From unknown Sun Apr 26 04:45:12 2026
X-Loop: owner@bugs.x2go.org
Subject: Bug#1469: Patch!
Reply-To: Melroy van den Berg <melroy89@protonmail.com>, 1469@bugs.x2go.org
Resent-From: Melroy van den Berg <melroy89@protonmail.com>
Resent-To: x2go-dev@lists.x2go.org
Resent-CC: X2Go Developers <x2go-dev@lists.x2go.org>
X-Loop: owner@bugs.x2go.org
Resent-Date: Tue, 19 May 2020 02:00:03 +0000
Resent-Message-ID: <handler.1469.B1469.158985357929805@bugs.x2go.org>
Resent-Sender: owner@bugs.x2go.org
X-X2Go-PR-Message: followup 1469
X-X2Go-PR-Package: x2goclient
X-X2Go-PR-Keywords: 
References: <vq79NxFEEt8Pcp8OgUNEMq3mjc-pTXr2Am-M5IFBFEQ3Z2QlGHllLVmhjXXGe6fRM_hIfq91T7Y419CPz62rBb9Yn0GQL6Fc2s1kdrffjlY=@protonmail.com>
Received: via spool by 1469-submit@bugs.x2go.org id=B1469.158985357929805
          (code B ref 1469); Tue, 19 May 2020 02:00:03 +0000
Received: (at 1469) by bugs.x2go.org; 19 May 2020 01:59:39 +0000
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on
	ymir.das-netzwerkteam.de
X-Spam-Level: 
X-Spam-Status: No, score=-1.7 required=3.0 tests=BAYES_00,DKIM_SIGNED,
	DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,FREEMAIL_REPLYTO_END_DIGIT,
	HTML_MESSAGE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,URIBL_BLOCKED
	autolearn=no autolearn_force=no version=3.4.2
Received: from mail4.protonmail.ch (mail4.protonmail.ch [185.70.40.27])
	by ymir.das-netzwerkteam.de (Postfix) with ESMTPS id 031CC5DAF0
	for <1469@bugs.x2go.org>; Tue, 19 May 2020 03:59:24 +0200 (CEST)
Date: Tue, 19 May 2020 01:59:16 +0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com;
	s=protonmail; t=1589853562;
	bh=vxifWNEn9yV8EmFqpaaRWWLw6CCPvlJ2iQ/OzrNcVEc=;
	h=Date:To:From:Reply-To:Subject:From;
	b=H5u6KTMCdik1ckVncU0bDLWlxnIF8scuMSHabGehMMwg5BBMKxZMSu17cW8FQJRKL
	 NQBxybz9LCYAmkSh9xupa+Uiz2NR7q25NqOd0njpQns5duVsSpxOGZq7IzD93z6weF
	 uqz86ofwAYWRVMrKqK9EL2WXW9UzOkn8n8ulcMEo=
To: "1469@bugs.x2go.org" <1469@bugs.x2go.org>
From: Melroy van den Berg <melroy89@protonmail.com>
Message-ID: <Nf4e-RR7tv5ZjrP9b31cyDJXHDClVE5R6fFyaE0wsZNPOk928OaXhMPa1ORMSsmATLtCa2Jp8XlSZqscpcQh-P9Em3cji311xXVTm_JUrnI=@protonmail.com>
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="b1_d4bbc6fe9ba24f53adc087369873ae07"

This is a multi-part message in MIME format.

--b1_d4bbc6fe9ba24f53adc087369873ae07
Content-Type: multipart/alternative;
	boundary="b2_d4bbc6fe9ba24f53adc087369873ae07"

--b2_d4bbc6fe9ba24f53adc087369873ae07
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64

SGksCgpJIGRpZCBzb21lIHJlZmFjdG9yaW5nIGluIHRoZSBzc2htYXN0ZXJjb25uZWN0aW9uLmNw
cCBmaWxlLiBJIHRoaW5rIGl0IGNhbiBkZWZpbml0ZWx5IHVzZSBzb21lIGNsZWFuLXVwIGFuZCBm
dXJ0aGVyIHNwbGl0dGluZyBmdW5jdGlvbnMgYW5kIGV2ZW4gaW50byBtdWx0aXBsZSBmaWxlcyBl
dmVudHVhbGx5LgpJIGNsb25lZCB0aGUgbWFzdGVyIGJyYW5jaCBvZiBjb2RlLngyZ28ub3JnL3gy
Z29jbGllbnQgcmVwby4KClRoZSBjaGFuZ2VzIEkgYXBwbGllZCBhcmUgaW4gdGhlIGF0dGFjaG1l
bnQgb2YgdGhpcyBtYWlsIChhIGdpdCBwYXRjaCBmaWxlKS4gSSB0aGluayBjbG9zaW5nIHByZXZp
b3VzIHNlc3Npb25zIGFuZCBjb25uZWN0aW9uIHNvbHZlZCBteSBzdHJhbmdlIFNTSCBjb25uZWN0
aW9uIGlzIHJlc3VsdGluZyBpbnRvIFNvY2tldCBlcnJvcjogTm8gc3VjaCBmaWxlIG9yIGRpcmVj
dG9yeSIuCkFsdGhvdWdoIFgyR28gY2xpZW50IGlzIGNhbGxpbmcgW2xpYnNzaCBjYWxsc10oaHR0
cHM6Ly9hcGkubGlic3NoLm9yZy9tYXN0ZXIvaW5kZXguaHRtbCkgKGxpYnNzaCB2ZXJzaW9uIGN1
cnJlbnRseSBpbiB1c2UgcnVudGltZSBvbiBteSBob3N0IGlzOiAwLjcuMCkuCkZvciBzb21lIHJl
YXNvbiB0aGlzIHZhZ3VlIGVycm9yIG1lc3NhZ2UgcG9wcGVkLXVwIGJ5IGxpYnNzaCwgcHJvcGVy
bHkgYSByZXN1bHQgb2YgcHJldmlvdXMgc2Vzc2lvbiBiZWluZyBjcmVhdGVkIGFuZCBub3QgY29y
cmVjdGx5IGNsb3NlZC4gQW5kL29yIG5vdCBjbG9zZWQgaW4gdGhlIHJpZ2h0IG9yZGVyICgvbWlz
c2luZyBBUEkgY2FsbHMpLCBsaWtlIGEgZ29vZCBleGFtcGxlOgoKc3NoX2NoYW5uZWxfc2VuZF9l
b2YoY2hhbm5lbCk7CnNzaF9jaGFubmVsX2Nsb3NlKGNoYW5uZWwpOwpzc2hfY2hhbm5lbF9mcmVl
KGNoYW5uZWwpOwoKQW5kIEkgY3JlYXRlZCB5ZXQgYWdhaW4gYSBuZXcgWVQgdmlkZW8gc2hvd2lu
ZyBteSByZXN1bHQ6Cmh0dHBzOi8veW91dHUuYmUvdm1BU0xKcTBDS00KKGluY2x1ZGluZyBzb21l
IGJyaWVmIGV4cGxhbmF0aW9uIHdoYXQgSSBkaWQgc28gZmFyLCBJIGFsc28gcmFuIGFuIGZvcm1h
dHRlZCBvbiB0aGUgY29kZSwgYmVjYXVzZSBpdCB3YXMgdmVyeSB2ZXJ5IGhhcmQgdG8gcmVhZCB3
aXRoIGFsbCB0aGUgd3JvbmcgaW5kZW50cykKCkkgYWxzbyBtYWRlIGFub3RoZXIgdmlkZW8gc2hv
d2luZyB5ZXQgYW5vdGhlciBidWcgSSBmb3VuZCByZWdhcmRpbmcgdGhlIFNTSCB0dW5uZWxpbmcg
KGR1cmluZyBzb21lIGhlYXZ5IHRlc3RpbmcpLCB0aGUgb25seSBzb2x1dGlvbiB3YXMgdG8gcmVz
dGFydCB0aGUgd2hvbGUgZG9ja2VyIGltYWdlOgpodHRwczovL3lvdXR1LmJlL3hFcEl5bzg0Zldj
IChJIHRoaW5rIHRoaXMgaXNzdWUgaXMgdW5yZWxhdGVkLCBidXQgbWF5YmUgd2lzZSB0byB0YWtl
IHNlcmlvdXMgYXMgd2VsbCkKCkFnYWluIHNlZSBhdHRhY2htZW50IGZvciB0aGUgcGF0Y2ggKGJy
YW5jaGVkIGZyb20gbWFzdGVyKS4KClJlZ2FyZHMsCk1lbHJveSB2YW4gZGVuIEJlcmc=


--b2_d4bbc6fe9ba24f53adc087369873ae07
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64

PGRpdj5IaSw8YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5JIGRpZCBzb21lIHJlZmFjdG9y
aW5nIGluIHRoZSBzc2htYXN0ZXJjb25uZWN0aW9uLmNwcCBmaWxlLiBJIHRoaW5rIGl0IGNhbiBk
ZWZpbml0ZWx5IHVzZSBzb21lIGNsZWFuLXVwIGFuZCBmdXJ0aGVyIHNwbGl0dGluZyBmdW5jdGlv
bnMgYW5kIGV2ZW4gaW50byBtdWx0aXBsZSBmaWxlcyBldmVudHVhbGx5Ljxicj48L2Rpdj48ZGl2
PkkgY2xvbmVkIHRoZSBtYXN0ZXIgYnJhbmNoIG9mIDxhIGhyZWY9Imh0dHA6Ly9jb2RlLngyZ28u
b3JnL3gyZ29jbGllbnQiPmNvZGUueDJnby5vcmcveDJnb2NsaWVudDwvYT4gcmVwby48YnI+PC9k
aXY+PGRpdj48YnI+PC9kaXY+PGRpdj5UaGUgY2hhbmdlcyBJIGFwcGxpZWQgYXJlIGluIHRoZSBh
dHRhY2htZW50IG9mIHRoaXMgbWFpbCAoYSBnaXQgcGF0Y2ggZmlsZSkuIEkgdGhpbmsgY2xvc2lu
ZyBwcmV2aW91cyBzZXNzaW9ucyBhbmQgY29ubmVjdGlvbiBzb2x2ZWQgbXkgc3RyYW5nZSBTU0gg
Y29ubmVjdGlvbiBpcyByZXN1bHRpbmcgaW50byBTb2NrZXQgZXJyb3I6IE5vIHN1Y2ggZmlsZSBv
ciBkaXJlY3RvcnkiLjxicj48L2Rpdj48ZGl2PkFsdGhvdWdoIFgyR28gY2xpZW50IGlzIGNhbGxp
bmcgPGEgcmVsPSJub2ZvbGxvdyIgdGl0bGU9Imh0dHBzOi8vYXBpLmxpYnNzaC5vcmcvbWFzdGVy
L2luZGV4Lmh0bWwiIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2FwaS5saWJzc2gub3Jn
L21hc3Rlci9pbmRleC5odG1sIj5saWJzc2ggY2FsbHM8L2E+IChsaWJzc2ggdmVyc2lvbiBjdXJy
ZW50bHkgaW4gdXNlIHJ1bnRpbWUgb24gbXkgaG9zdCBpczogMC43LjApLjxicj48L2Rpdj48ZGl2
PkZvciBzb21lIHJlYXNvbiB0aGlzIHZhZ3VlIGVycm9yIG1lc3NhZ2UgcG9wcGVkLXVwIGJ5IGxp
YnNzaCwgcHJvcGVybHkgYSByZXN1bHQgb2YgcHJldmlvdXMgc2Vzc2lvbiBiZWluZyBjcmVhdGVk
IGFuZCBub3QgY29ycmVjdGx5IGNsb3NlZC4gQW5kL29yIG5vdCBjbG9zZWQgaW4gdGhlIHJpZ2h0
IG9yZGVyICgvbWlzc2luZyBBUEkgY2FsbHMpLCBsaWtlIGEgZ29vZCBleGFtcGxlOjxicj48L2Rp
dj48ZGl2Pjxicj48L2Rpdj48ZGl2IHN0eWxlPSJjb2xvcjogI2Q0ZDRkNDtiYWNrZ3JvdW5kLWNv
bG9yOiAjMWUxZTFlO2ZvbnQtZmFtaWx5OiAnRHJvaWQgU2FucyBNb25vJywgJ21vbm9zcGFjZScs
IG1vbm9zcGFjZSwgJ0Ryb2lkIFNhbnMgRmFsbGJhY2snO2ZvbnQtd2VpZ2h0OiBub3JtYWw7Zm9u
dC1zaXplOiAxNHB4O2xpbmUtaGVpZ2h0OiAxOXB4O3doaXRlLXNwYWNlOiBwcmU7Ij48ZGl2Pjxz
cGFuIHN0eWxlPSJjb2xvcjpyZ2IoMjIwLCAyMjAsIDE3MCkiPnNzaF9jaGFubmVsX3NlbmRfZW9m
PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMjEyLCAyMTIsIDIxMikiPihjaGFubmVsKTs8
L3NwYW4+PGJyPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImNvbG9yOnJnYigyMjAsIDIyMCwgMTcw
KSI+c3NoX2NoYW5uZWxfY2xvc2U8L3NwYW4+PHNwYW4gc3R5bGU9ImNvbG9yOnJnYigyMTIsIDIx
MiwgMjEyKSI+KGNoYW5uZWwpOzwvc3Bhbj48YnI+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iY29s
b3I6cmdiKDIyMCwgMjIwLCAxNzApIj5zc2hfY2hhbm5lbF9mcmVlPC9zcGFuPjxzcGFuIHN0eWxl
PSJjb2xvcjpyZ2IoMjEyLCAyMTIsIDIxMikiPihjaGFubmVsKTs8L3NwYW4+PGJyPjwvZGl2Pjwv
ZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+QW5kIEkgY3JlYXRlZCB5ZXQgYWdhaW4gYSBuZXcgWVQg
dmlkZW8gc2hvd2luZyBteSByZXN1bHQ6IDxicj48L2Rpdj48ZGl2PjxhIGhyZWY9Imh0dHBzOi8v
eW91dHUuYmUvdm1BU0xKcTBDS00iPmh0dHBzOi8veW91dHUuYmUvdm1BU0xKcTBDS008L2E+PGJy
PjwvZGl2PjxkaXY+KGluY2x1ZGluZyBzb21lIGJyaWVmIGV4cGxhbmF0aW9uIHdoYXQgSSBkaWQg
c28gZmFyLCBJIGFsc28gcmFuIGFuIGZvcm1hdHRlZCBvbiB0aGUgY29kZSwgYmVjYXVzZSBpdCB3
YXMgdmVyeSB2ZXJ5IGhhcmQgdG8gcmVhZCB3aXRoIGFsbCB0aGUgd3JvbmcgaW5kZW50cyk8YnI+
PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5JIGFsc28gbWFkZSBhbm90aGVyIHZpZGVvIHNob3dp
bmcgeWV0IDxpPmFub3RoZXI8L2k+IGJ1ZyBJIGZvdW5kIHJlZ2FyZGluZyB0aGUgU1NIIHR1bm5l
bGluZyAoZHVyaW5nIHNvbWUgaGVhdnkgdGVzdGluZyksIHRoZSBvbmx5IHNvbHV0aW9uIHdhcyB0
byByZXN0YXJ0IHRoZSB3aG9sZSBkb2NrZXIgaW1hZ2U6PGJyPjwvZGl2PjxkaXY+PGEgaHJlZj0i
aHR0cHM6Ly95b3V0dS5iZS94RXBJeW84NGZXYyI+aHR0cHM6Ly95b3V0dS5iZS94RXBJeW84NGZX
YzwvYT4gKEkgdGhpbmsgdGhpcyBpc3N1ZSBpcyA8Yj51bjwvYj5yZWxhdGVkLCBidXQgbWF5YmUg
d2lzZSB0byB0YWtlIHNlcmlvdXMgYXMgd2VsbCk8YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRp
dj5BZ2FpbiBzZWUgYXR0YWNobWVudCBmb3IgdGhlIHBhdGNoIChicmFuY2hlZCBmcm9tIG1hc3Rl
cikuPGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+UmVnYXJkcyw8YnI+PC9kaXY+PGRpdiBj
bGFzcz0icHJvdG9ubWFpbF9zaWduYXR1cmVfYmxvY2siPjxkaXYgY2xhc3M9InByb3Rvbm1haWxf
c2lnbmF0dXJlX2Jsb2NrLXVzZXIiPjxkaXY+TWVscm95IHZhbiBkZW4gQmVyZzxicj48L2Rpdj48
ZGl2Pjxicj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2Pjxicj48L2Rpdj4=



--b2_d4bbc6fe9ba24f53adc087369873ae07--

--b1_d4bbc6fe9ba24f53adc087369873ae07
Content-Type: text/x-patch; name="melroy_socket_error.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=melroy_socket_error.patch

ZGlmZiAtLWdpdCBhL3NyYy9zc2htYXN0ZXJjb25uZWN0aW9uLmNwcCBiL3NyYy9zc2htYXN0ZXJj
b25uZWN0aW9uLmNwcAppbmRleCA4YjU5ZmU3Li4yMDA3ZGY3IDEwMDY0NAotLS0gYS9zcmMvc3No
bWFzdGVyY29ubmVjdGlvbi5jcHAKKysrIGIvc3JjL3NzaG1hc3RlcmNvbm5lY3Rpb24uY3BwCkBA
IC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSAic3NocHJvY2Vz
cy5oIgogCi0KICNpbmNsdWRlIDxRU3RyaW5nTGlzdD4KICNpbmNsdWRlIDxRRmlsZT4KICNpbmNs
dWRlIDxRRGlyPgpAQCAtNDMsMzYgKzQyLDMzIEBACiAjaW5jbHVkZSA8UXROZXR3b3JrL3FhYnN0
cmFjdHNvY2tldC5oPgogI2VuZGlmCiAKLQogI2luY2x1ZGUgIm9ubWFpbndpbmRvdy5oIgogCi0K
ICNkZWZpbmUgUFJPWFlUVU5ORUxQT1JUIDQ0NDQ0CiAKIGNvbnN0IFFTdHJpbmcgU3NoTWFzdGVy
Q29ubmVjdGlvbjo6Y2hhbGxlbmdlX2F1dGhfY29kZV9wcm9tcHRzX1tdID0gewotICAiVmVyaWZp
Y2F0aW9uIGNvZGU6IiwgICAgICAgICAgICAvLyBHQSAgICAgIChodHRwOi8vZ2l0aHViLmNvbS9n
b29nbGUvZ29vZ2xlLWF1dGhlbnRpY2F0b3IpCi0gICJPbmUtdGltZSBwYXNzd29yZCAoT0FUSCkg
Zm9yIiwgIC8vIE9BVEggICAgKGh0dHA6Ly93d3cubm9uZ251Lm9yZy9vYXRoLXRvb2xraXQvcGFt
X29hdGguaHRtbCkKLSAgInBhc3Njb2RlOiIsICAgICAgICAgICAgICAgICAgICAgLy8gTU9UUCAg
ICAoaHR0cDovL21vdHAuc291cmNlZm9yZ2UubmV0KQotICAiRW50ZXIgUEFTU0NPREU6IiwgICAg
ICAgICAgICAgICAvLyBTZWN1cklECi0gICJZdWJpS2V5IGZvciIgICAgICAgICAgICAgICAgICAg
IC8vIFl1YmlLZXkgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1l1YmlLZXkpCisgICAg
IlZlcmlmaWNhdGlvbiBjb2RlOiIsICAgICAgICAgICAvLyBHQSAgICAgIChodHRwOi8vZ2l0aHVi
LmNvbS9nb29nbGUvZ29vZ2xlLWF1dGhlbnRpY2F0b3IpCisgICAgIk9uZS10aW1lIHBhc3N3b3Jk
IChPQVRIKSBmb3IiLCAvLyBPQVRIICAgIChodHRwOi8vd3d3Lm5vbmdudS5vcmcvb2F0aC10b29s
a2l0L3BhbV9vYXRoLmh0bWwpCisgICAgInBhc3Njb2RlOiIsICAgICAgICAgICAgICAgICAgICAv
LyBNT1RQICAgIChodHRwOi8vbW90cC5zb3VyY2Vmb3JnZS5uZXQpCisgICAgIkVudGVyIFBBU1ND
T0RFOiIsICAgICAgICAgICAgICAvLyBTZWN1cklECisgICAgIll1YmlLZXkgZm9yIiAgICAgICAg
ICAgICAgICAgICAvLyBZdWJpS2V5IChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9ZdWJp
S2V5KQogfTsKIAotCiAjaWZkZWYgUV9PU19XSU4KICNpbmNsdWRlIDxRU2V0dGluZ3M+CiAvLyBw
YXJzZSBrbm93bl9ob3N0cyBmaWxlIGZyb20gbGlic3NoIGFuZCBleHBvcnQga2V5cyBpbiByZWdp
c3RyeSB0byB1c2Ugd2l0aCBwbGluay5leGUKIHZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6cGFy
c2VLbm93bkhvc3RzKCkKIHsKLSAgICBRRmlsZSBmbChtYWluV25kLT5nZXRIb21lRGlyZWN0b3J5
KCkrIi9zc2gva25vd25faG9zdHMiKTsKKyAgICBRRmlsZSBmbChtYWluV25kLT5nZXRIb21lRGly
ZWN0b3J5KCkgKyAiL3NzaC9rbm93bl9ob3N0cyIpOwogICAgIGlmICghZmwub3BlbihRRmlsZTo6
UmVhZE9ubHkpKQogICAgICAgICByZXR1cm47CiAgICAgUVNldHRpbmdzIHNldHRpbmdzKCJIS0VZ
X0NVUlJFTlRfVVNFUlxcU29mdHdhcmVcXFNpbW9uVGF0aGFtXFxQdVRUWVxcU3NoSG9zdEtleXMi
LAogICAgICAgICAgICAgICAgICAgICAgICBRU2V0dGluZ3M6Ok5hdGl2ZUZvcm1hdCk7CiAgICAg
d2hpbGUgKCFmbC5hdEVuZCgpKQogICAgIHsKLSAgICAgICAgUVN0cmluZyBsaW5lPWZsLnJlYWRM
aW5lKCk7Ci0gICAgICAgIFFTdHJpbmdMaXN0IHBhcnRzPWxpbmUuc3BsaXQoJyAnLFFTdHJpbmc6
OlNraXBFbXB0eVBhcnRzKTsKLSAgICAgICAgaWYgKHBhcnRzLmNvdW50KCkhPTMpCisgICAgICAg
IFFTdHJpbmcgbGluZSA9IGZsLnJlYWRMaW5lKCk7CisgICAgICAgIFFTdHJpbmdMaXN0IHBhcnRz
ID0gbGluZS5zcGxpdCgnICcsIFFTdHJpbmc6OlNraXBFbXB0eVBhcnRzKTsKKyAgICAgICAgaWYg
KHBhcnRzLmNvdW50KCkgIT0gMykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8v
bGluZXMgaW4ga25vd25faG9zdHMgaGF2ZSBmb3JtYXQ6CkBAIC04MCwyNTcgKzc2LDI1NSBAQCB2
b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OnBhcnNlS25vd25Ib3N0cygpCiAgICAgICAgIC8vd2Ug
cHJvY2VlZGluZyBvbmx5IGxpbmVzIGZyb20gbGlic3NoIC0gbm8gaGFzaGVkIGhvc3RuYW1lcwog
ICAgICAgICAvL29yIHBhdHRlcm5zIGFyZSBhbGxvd2VkCiAKLSAgICAgICAgUVN0cmluZyB0eXBl
PSJ1bmtub3duIjsKLSAgICAgICAgUVN0cmluZyBwb3J0PSIyMiI7Ci0gICAgICAgIGlmIChwYXJ0
c1sxXT09InNzaC1kc3MiKQotICAgICAgICAgICAgdHlwZT0iZHNzIjsKLSAgICAgICAgaWYgKHBh
cnRzWzFdPT0ic3NoLXJzYSIpCi0gICAgICAgICAgICB0eXBlPSJyc2EyIjsKKyAgICAgICAgUVN0
cmluZyB0eXBlID0gInVua25vd24iOworICAgICAgICBRU3RyaW5nIHBvcnQgPSAiMjIiOworICAg
ICAgICBpZiAocGFydHNbMV0gPT0gInNzaC1kc3MiKQorICAgICAgICAgICAgdHlwZSA9ICJkc3Mi
OworICAgICAgICBpZiAocGFydHNbMV0gPT0gInNzaC1yc2EiKQorICAgICAgICAgICAgdHlwZSA9
ICJyc2EyIjsKIAorICAgICAgICBRU3RyaW5nTGlzdCBob3N0UGFydHMgPSBwYXJ0c1swXS5zcGxp
dCgiOiIsIFFTdHJpbmc6OlNraXBFbXB0eVBhcnRzKTsKKyAgICAgICAgaWYgKGhvc3RQYXJ0cy5j
b3VudCgpID4gMSkKKyAgICAgICAgICAgIHBvcnQgPSBob3N0UGFydHNbMV07CisgICAgICAgIGhv
c3RQYXJ0c1swXS5yZXBsYWNlKCJbIiwgIiIpOworICAgICAgICBob3N0UGFydHNbMF0ucmVwbGFj
ZSgiXSIsICIiKTsKIAotICAgICAgICBRU3RyaW5nTGlzdCBob3N0UGFydHM9cGFydHNbMF0uc3Bs
aXQoIjoiLFFTdHJpbmc6OlNraXBFbXB0eVBhcnRzKTsKLSAgICAgICAgaWYgKGhvc3RQYXJ0cy5j
b3VudCgpPjEpCi0gICAgICAgICAgICBwb3J0PWhvc3RQYXJ0c1sxXTsKLSAgICAgICAgaG9zdFBh
cnRzWzBdLnJlcGxhY2UoIlsiLCIiKTsKLSAgICAgICAgaG9zdFBhcnRzWzBdLnJlcGxhY2UoIl0i
LCIiKTsKKyAgICAgICAgUVN0cmluZyBrZXlOYW1lID0gdHlwZSArICJAIiArIHBvcnQgKyAiOiIg
KyBob3N0UGFydHNbMF07CiAKLSAgICAgICAgUVN0cmluZyBrZXlOYW1lPXR5cGUrIkAiK3BvcnQr
IjoiK2hvc3RQYXJ0c1swXTsKLQotICAgICAgICBRQnl0ZUFycmF5IGJ5dGVzPVFCeXRlQXJyYXk6
OmZyb21CYXNlNjQocGFydHNbMl0udG9MYXRpbjEoKSk7CisgICAgICAgIFFCeXRlQXJyYXkgYnl0
ZXMgPSBRQnl0ZUFycmF5Ojpmcm9tQmFzZTY0KHBhcnRzWzJdLnRvTGF0aW4xKCkpOwogICAgICAg
ICBRU3RyaW5nTGlzdCBmaWVsZHM7CiAKICAgICAgICAgLy9rZXkgaXMgYSBzZXQgb2YgZGF0YSBm
aWVsZHM6CiAgICAgICAgIC8vW3NpemVdW2RhdGFdW3NpemVdW2RhdGFdLi4uLi5bc2l6ZV1bZGF0
YV0KIAotICAgICAgICBmb3IgKGludCBpPTA7IGk8Ynl0ZXMuY291bnQoKTspCisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgYnl0ZXMuY291bnQoKTspCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGludCBzaXplPTA7CisgICAgICAgICAgICBpbnQgc2l6ZSA9IDA7CiAgICAgICAgICAgICAvL2Zp
cnN0IDQgYnl0ZXMgYXJlIGZvciBzaXplIG9mIGRhdGEgZmllbGQgKGJpZy1lbmRpYW4pCi0gICAg
ICAgICAgICBmb3IgKGludCBqPTA7IGo8NDsgKytqKQorICAgICAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCA0OyArK2opCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2l6ZSs9KCh1
Y2hhcikoYnl0ZXNbaV0pKSAqIHBvdygoZmxvYXQpMjU2LDMtaik7CisgICAgICAgICAgICAgICAg
c2l6ZSArPSAoKHVjaGFyKShieXRlc1tpXSkpICogcG93KChmbG9hdCkyNTYsIDMgLSBqKTsKICAg
ICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBRQnl0ZUFycmF5
IGRhdGE7Ci0gICAgICAgICAgICBkYXRhPWJ5dGVzLm1pZChpLHNpemUpOworICAgICAgICAgICAg
ZGF0YSA9IGJ5dGVzLm1pZChpLCBzaXplKTsKICAgICAgICAgICAgIFFTdHJpbmcgaGV4OwogCi0g
ICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8ZGF0YS5jb3VudCgpOyArK2opCisgICAgICAgICAg
ICBmb3IgKGludCBqID0gMDsgaiA8IGRhdGEuY291bnQoKTsgKytqKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIFFTdHJpbmcgYnl0ZTsKLSAgICAgICAgICAgICAgICBieXRlLnNwcmlu
dGYoIiUwMngiLCh1Y2hhcikoZGF0YVtqXSkpOwotICAgICAgICAgICAgICAgIGhleCs9Ynl0ZTsK
KyAgICAgICAgICAgICAgICBieXRlLnNwcmludGYoIiUwMngiLCAodWNoYXIpKGRhdGFbal0pKTsK
KyAgICAgICAgICAgICAgICBoZXggKz0gYnl0ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IC8vcmVtb3ZlIGxlYWRpbmcgJzAnCiAgICAgICAgICAgICBmb3IgKDs7KQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmIChoZXgubGVuZ3RoKCk9PTApCisgICAgICAgICAgICAgICAg
aWYgKGhleC5sZW5ndGgoKSA9PSAwKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBpZiAoaGV4WzBdPT0nMCcpCi0gICAgICAgICAgICAgICAgICAgIGhleC5yZW1v
dmUoMCwxKTsKKyAgICAgICAgICAgICAgICBpZiAoaGV4WzBdID09ICcwJykKKyAgICAgICAgICAg
ICAgICAgICAgaGV4LnJlbW92ZSgwLCAxKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaGV4PSIweCIr
aGV4OwotICAgICAgICAgICAgZmllbGRzPDxoZXg7Ci0gICAgICAgICAgICBpKz1zaXplOworICAg
ICAgICAgICAgaGV4ID0gIjB4IiArIGhleDsKKyAgICAgICAgICAgIGZpZWxkcyA8PCBoZXg7Cisg
ICAgICAgICAgICBpICs9IHNpemU7CiAgICAgICAgIH0KICAgICAgICAgLy9maXJzdCBlbGVtZW50
IGlzIGEgdHlwZSBvZiBrZXksIHdlIGRvbid0IG5lZWQgaXQKICAgICAgICAgZmllbGRzLnJlbW92
ZUZpcnN0KCk7Ci0gICAgICAgIHNldHRpbmdzLnNldFZhbHVlKGtleU5hbWUsZmllbGRzLmpvaW4o
IiwiKSk7Ci0gICAgICAgIHgyZ29EZWJ1Zzw8IldyaXRpbmcga2V5IHRvIHJlZ2lzdHJ5OiBIS0VZ
X0NVUlJFTlRfVVNFUlxcU29mdHdhcmVcXFNpbW9uVGF0aGFtXFxQdVRUWVxcU3NoSG9zdEtleXMi
PDxlbmRsOwotICAgICAgICB4MmdvRGVidWc8PGtleU5hbWU8PCI9Ijw8ZmllbGRzLmpvaW4oIiwi
KTw8ZW5kbDsKKyAgICAgICAgc2V0dGluZ3Muc2V0VmFsdWUoa2V5TmFtZSwgZmllbGRzLmpvaW4o
IiwiKSk7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCAiV3JpdGluZyBrZXkgdG8gcmVnaXN0cnk6IEhL
RVlfQ1VSUkVOVF9VU0VSXFxTb2Z0d2FyZVxcU2ltb25UYXRoYW1cXFB1VFRZXFxTc2hIb3N0S2V5
cyIgPDwgZW5kbDsKKyAgICAgICAgeDJnb0RlYnVnIDw8IGtleU5hbWUgPDwgIj0iIDw8IGZpZWxk
cy5qb2luKCIsIikgPDwgZW5kbDsKICAgICB9CiAgICAgc2V0dGluZ3Muc3luYygpOwogfQogI2Vu
ZGlmCiAKLQotU3NoTWFzdGVyQ29ubmVjdGlvbjo6U3NoTWFzdGVyQ29ubmVjdGlvbiAoUU9iamVj
dCogcGFyZW50LCBRU3RyaW5nIGhvc3QsIGludCBwb3J0LCBib29sIGFjY2VwdFVua25vd25TZXJ2
ZXJzLCBRU3RyaW5nIHVzZXIsCi0gICAgICAgIFFTdHJpbmcgcGFzcywgUVN0cmluZyBrZXksIGJv
b2wgYXV0b2xvZ2luLCBib29sIGtyYmxvZ2luLAotICAgICAgICBib29sIHVzZXByb3h5LCBQcm94
eVR5cGUgdHlwZSwgUVN0cmluZyBwcm94eXNlcnZlciwgcXVpbnQxNiBwcm94eXBvcnQsCi0gICAg
ICAgIFFTdHJpbmcgcHJveHlsb2dpbiwgUVN0cmluZyBwcm94eXBhc3N3b3JkLCBRU3RyaW5nIHBy
b3h5a2V5LAotICAgICAgICBib29sIHByb3h5YXV0b2xvZ2luLCBib29sIHByb3h5S3JiTG9naW4g
KSA6IFFUaHJlYWQgKCBwYXJlbnQgKQorU3NoTWFzdGVyQ29ubmVjdGlvbjo6U3NoTWFzdGVyQ29u
bmVjdGlvbihRT2JqZWN0ICpwYXJlbnQsIFFTdHJpbmcgaG9zdCwgaW50IHBvcnQsIGJvb2wgYWNj
ZXB0VW5rbm93blNlcnZlcnMsIFFTdHJpbmcgdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUVN0cmluZyBwYXNzLCBRU3RyaW5nIGtleSwgYm9vbCBhdXRvbG9n
aW4sIGJvb2wga3JibG9naW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgdXNlcHJveHksIFByb3h5VHlwZSB0eXBlLCBRU3RyaW5nIHByb3h5c2VydmVyLCBx
dWludDE2IHByb3h5cG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUVN0cmluZyBwcm94eWxvZ2luLCBRU3RyaW5nIHByb3h5cGFzc3dvcmQsIFFTdHJpbmcgcHJv
eHlrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJv
eHlhdXRvbG9naW4sIGJvb2wgcHJveHlLcmJMb2dpbikgOiBRVGhyZWFkKHBhcmVudCkKIHsKLSNp
ZiBkZWZpbmVkICggUV9PU19EQVJXSU4gKQorI2lmIGRlZmluZWQoUV9PU19EQVJXSU4pCiAgICAg
Ly8gTWFjIE9TIFggcHJvdmlkZXMgb25seSA1MTJLQiBzdGFjayBzcGFjZSBmb3Igc2Vjb25kYXJ5
IHRocmVhZHMuCiAgICAgLy8gQXMgd2UgcHV0IGEgNTEyS0IgYnVmZmVyIG9uIHRoZSBzdGFjayBs
YXRlciBvbiwgd2UgbmVlZCBhIGJpZ2dlciBzdGFjayBzcGFjZS4KLSAgICBzZXRTdGFja1NpemUg
KHNpemVvZiAoY2hhcikgKiAxMDI0ICogMTAyNCAqIDIpOworICAgIHNldFN0YWNrU2l6ZShzaXpl
b2YoY2hhcikgKiAxMDI0ICogMTAyNCAqIDIpOwogI2VuZGlmCiAgICAgdGNwUHJveHlTb2NrZXQg
PSBOVUxMOwogICAgIHRjcE5ldHdvcmtQcm94eSA9IE5VTEw7Ci0gICAgc3NoUHJveHk9IE5VTEw7
Ci0gICAgc3NoUHJveHlSZWFkeT1mYWxzZTsKLSAgICBuZXh0UGlkPTA7CisgICAgc3NoUHJveHkg
PSBOVUxMOworICAgIHNzaFByb3h5UmVhZHkgPSBmYWxzZTsKKyAgICBuZXh0UGlkID0gMDsKIAot
ICAgIGJyZWFrTG9vcD1mYWxzZTsKLSAgICBrZXJiZXJvc0RlbGVnYXRpb249ZmFsc2U7CisgICAg
YnJlYWtMb29wID0gZmFsc2U7CisgICAga2VyYmVyb3NEZWxlZ2F0aW9uID0gZmFsc2U7CiAgICAg
eDJnb0RlYnVnIDw8ICJTc2hNYXN0ZXJDb25uZWN0aW9uLCBob3N0ICIgPDwgaG9zdCA8PCAiOyBw
b3J0ICIgPDwgcG9ydCA8PCAiOyB1c2VyICIgPDwgdXNlcgogICAgICAgICAgICAgICA8PCAiOyB1
c2Vwcm94eSAiIDw8IHVzZXByb3h5IDw8ICI7IHByb3h5c2VydmVyICIgPDwgcHJveHlzZXJ2ZXIK
LSAgICAgICAgICAgICAgPDwgIjsgcHJveHlwb3J0ICIgPDwgcHJveHlwb3J0OwotICAgIHRoaXMt
Pmhvc3Q9aG9zdDsKKyAgICAgICAgICAgICAgPDwgIjsgcHJveHlwb3J0ICIgPDwgcHJveHlwb3J0
IDw8IGVuZGw7CisgICAgdGhpcy0+aG9zdCA9IGhvc3Q7CiAgICAgLy8gSWYgdGhlIGhvc3RuYW1l
IHN0YXJ0cyB3aXRoICIhIiBkbyBub3QgcGVyZm9ybSBsb2dpbkNoZWNrKCkgZm9yIHRoaXMgY29u
bmVjdGlvbgogICAgIGlmICh0aGlzLT5ob3N0LmluZGV4T2YoIiEiKSA9PSAwKQogICAgIHsKLSAg
ICAgICAgdGhpcy0+bG9naW5DaGVjaz1mYWxzZTsKKyAgICAgICAgdGhpcy0+bG9naW5DaGVjayA9
IGZhbHNlOwogICAgICAgICB0aGlzLT5ob3N0LnJlbW92ZSgwLCAxKTsKICAgICB9CiAgICAgZWxz
ZQogICAgIHsKLSAgICAgICAgdGhpcy0+bG9naW5DaGVjaz10cnVlOwotICAgIH0KLSAgICB0aGlz
LT5wb3J0PXBvcnQ7Ci0gICAgdGhpcy0+dXNlcj11c2VyOwotICAgIHRoaXMtPnBhc3M9cGFzczsK
LSAgICB0aGlzLT5rZXk9a2V5OwotICAgIHRoaXMtPmF1dG9sb2dpbj1hdXRvbG9naW47Ci0gICAg
dGhpcy0+YWNjZXB0VW5rbm93blNlcnZlcnM9YWNjZXB0VW5rbm93blNlcnZlcnM7Ci0gICAgdGhp
cy0+dXNlcHJveHk9dXNlcHJveHk7Ci0gICAgdGhpcy0+cHJveHl0eXBlPXR5cGU7Ci0gICAgdGhp
cy0+cHJveHlhdXRvbG9naW49cHJveHlhdXRvbG9naW47Ci0gICAgdGhpcy0+cHJveHlrZXk9cHJv
eHlrZXk7Ci0gICAgdGhpcy0+cHJveHlzZXJ2ZXI9cHJveHlzZXJ2ZXI7Ci0gICAgdGhpcy0+cHJv
eHlwb3J0PXByb3h5cG9ydDsKLSAgICB0aGlzLT5wcm94eWxvZ2luPXByb3h5bG9naW47Ci0gICAg
dGhpcy0+cHJveHlwYXNzd29yZD1wcm94eXBhc3N3b3JkOwotICAgIHRoaXMtPnByb3h5S3JiTG9n
aW49cHJveHlLcmJMb2dpbjsKLSAgICBtYWluV25kPShPTk1haW5XaW5kb3cqKSBwYXJlbnQ7Ci0g
ICAga2VyYmVyb3M9a3JibG9naW47Ci0gICAgY2hhbGxlbmdlQXV0aFZlcmlmaWNhdGlvbkNvZGU9
UVN0cmluZzo6bnVsbDsKLQotI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9J
TlQgKDAsIDYsIDApCi0gICAgaWYgKHRoaXMtPnVzZXIuaXNFbXB0eSAoKSkgeworICAgICAgICB0
aGlzLT5sb2dpbkNoZWNrID0gdHJ1ZTsKKyAgICB9CisgICAgdGhpcy0+cG9ydCA9IHBvcnQ7Cisg
ICAgdGhpcy0+dXNlciA9IHVzZXI7CisgICAgdGhpcy0+cGFzcyA9IHBhc3M7CisgICAgdGhpcy0+
a2V5ID0ga2V5OworICAgIHRoaXMtPmF1dG9sb2dpbiA9IGF1dG9sb2dpbjsKKyAgICB0aGlzLT5h
Y2NlcHRVbmtub3duU2VydmVycyA9IGFjY2VwdFVua25vd25TZXJ2ZXJzOworICAgIHRoaXMtPnVz
ZXByb3h5ID0gdXNlcHJveHk7CisgICAgdGhpcy0+cHJveHl0eXBlID0gdHlwZTsKKyAgICB0aGlz
LT5wcm94eWF1dG9sb2dpbiA9IHByb3h5YXV0b2xvZ2luOworICAgIHRoaXMtPnByb3h5a2V5ID0g
cHJveHlrZXk7CisgICAgdGhpcy0+cHJveHlzZXJ2ZXIgPSBwcm94eXNlcnZlcjsKKyAgICB0aGlz
LT5wcm94eXBvcnQgPSBwcm94eXBvcnQ7CisgICAgdGhpcy0+cHJveHlsb2dpbiA9IHByb3h5bG9n
aW47CisgICAgdGhpcy0+cHJveHlwYXNzd29yZCA9IHByb3h5cGFzc3dvcmQ7CisgICAgdGhpcy0+
cHJveHlLcmJMb2dpbiA9IHByb3h5S3JiTG9naW47CisgICAgbWFpblduZCA9IChPTk1haW5XaW5k
b3cgKilwYXJlbnQ7CisgICAga2VyYmVyb3MgPSBrcmJsb2dpbjsKKyAgICBjaGFsbGVuZ2VBdXRo
VmVyaWZpY2F0aW9uQ29kZSA9IFFTdHJpbmc6Om51bGw7CisKKyNpZiBMSUJTU0hfVkVSU0lPTl9J
TlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsIDYsIDApCisgICAgaWYgKHRoaXMtPnVzZXIuaXNFbXB0
eSgpKQorICAgIHsKICAgICAgICAgLyogV2UgbWlnaHQgaGF2ZSBhIGNvbmZpZyBmaWxlIHJlcXVl
c3QgcGVuZGluZywgaG9ub3IgdGhpcy4gKi8KLSAgICAgICAgc3NoX3Nlc3Npb24gdG1wX3Nlc3Np
b24gPSBzc2hfbmV3ICgpOworICAgICAgICBzc2hfc2Vzc2lvbiB0bXBfc2Vzc2lvbiA9IHNzaF9u
ZXcoKTsKIAotICAgICAgICBpZiAoIXRtcF9zZXNzaW9uKSB7Ci0gICAgICAgICAgICBRU3RyaW5n
IGVycm9yX21zZyA9IHRyICgiQ2Fubm90IGNyZWF0ZSBTU0ggc2Vzc2lvbi4iKTsKLSAgICAgICAg
ICAgIGVycm9yX21zZyArPSAiICIgKyB0ciAoIlVzaW5nIGVudmlyb25tZW50LXByb3ZpZGVkIHVz
ZXJuYW1lLiIpOwotICAgICAgICAgICAgeDJnb0RlYnVnIDw8IGVycm9yX21zZzsKKyAgICAgICAg
aWYgKCF0bXBfc2Vzc2lvbikKKyAgICAgICAgeworICAgICAgICAgICAgUVN0cmluZyBlcnJvcl9t
c2cgPSB0cigiQ2Fubm90IGNyZWF0ZSBTU0ggc2Vzc2lvbi4iKTsKKyAgICAgICAgICAgIGVycm9y
X21zZyArPSAiICIgKyB0cigiVXNpbmcgZW52aXJvbm1lbnQtcHJvdmlkZWQgdXNlcm5hbWUuIik7
CisgICAgICAgICAgICB4MmdvRGVidWcgPDwgZXJyb3JfbXNnIDw8IGVuZGw7CiAgICAgICAgIH0K
LSAgICAgICAgZWxzZSB7CisgICAgICAgIGVsc2UKKyAgICAgICAgewogICAgICAgICAgICAgUUJ5
dGVBcnJheSB0bXBfQkE7CiAKLSAgICAgICAgICAgIHRtcF9CQSA9IHRoaXMtPmhvc3QudG9Mb2Nh
bDhCaXQgKCk7CisgICAgICAgICAgICB0bXBfQkEgPSB0aGlzLT5ob3N0LnRvTG9jYWw4Qml0KCk7
CiAKLSAgICAgICAgICAgIHNzaF9vcHRpb25zX3NldCAodG1wX3Nlc3Npb24sIFNTSF9PUFRJT05T
X0hPU1QsIHRtcF9CQS5kYXRhICgpKTsKKyAgICAgICAgICAgIHNzaF9vcHRpb25zX3NldCh0bXBf
c2Vzc2lvbiwgU1NIX09QVElPTlNfSE9TVCwgdG1wX0JBLmRhdGEoKSk7CiAKLSAgICAgICAgICAg
IGlmIChzc2hfb3B0aW9uc19wYXJzZV9jb25maWcgKHRtcF9zZXNzaW9uLCBOVUxMKSA8IDApIHsK
LSAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIldhcm5pbmc6IHVuYWJsZSB0byBwYXJzZSB0
aGUgU1NIIGNvbmZpZyBmaWxlLiI7CisgICAgICAgICAgICBpZiAoc3NoX29wdGlvbnNfcGFyc2Vf
Y29uZmlnKHRtcF9zZXNzaW9uLCBOVUxMKSA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgeDJnb0RlYnVnIDw8ICJXYXJuaW5nOiB1bmFibGUgdG8gcGFyc2UgdGhlIFNTSCBjb25m
aWcgZmlsZS4iIDw8IGVuZGw7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNoYXIgKmlu
ZmVycmVkX3VzZXJuYW1lID0gTlVMTDsKLSAgICAgICAgICAgIHNzaF9vcHRpb25zX2dldCAodG1w
X3Nlc3Npb24sIFNTSF9PUFRJT05TX1VTRVIsICZpbmZlcnJlZF91c2VybmFtZSk7Ci0gICAgICAg
ICAgICB4MmdvRGVidWcgPDwgIlRlbXBvcmFyeSBzZXNzaW9uIHVzZXIgbmFtZSBhZnRlciBjb25m
aWcgZmlsZSBwYXJzZTogIiA8PCBpbmZlcnJlZF91c2VybmFtZTsKKyAgICAgICAgICAgIHNzaF9v
cHRpb25zX2dldCh0bXBfc2Vzc2lvbiwgU1NIX09QVElPTlNfVVNFUiwgJmluZmVycmVkX3VzZXJu
YW1lKTsKKyAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiVGVtcG9yYXJ5IHNlc3Npb24gdXNlciBu
YW1lIGFmdGVyIGNvbmZpZyBmaWxlIHBhcnNlOiAiIDw8IGluZmVycmVkX3VzZXJuYW1lIDw8IGVu
ZGw7CiAKLSAgICAgICAgICAgIHRoaXMtPnVzZXIgPSBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0IChp
bmZlcnJlZF91c2VybmFtZSk7CisgICAgICAgICAgICB0aGlzLT51c2VyID0gUVN0cmluZzo6ZnJv
bUxvY2FsOEJpdChpbmZlcnJlZF91c2VybmFtZSk7CiAKLSAgICAgICAgICAgIHNzaF9zdHJpbmdf
ZnJlZV9jaGFyIChpbmZlcnJlZF91c2VybmFtZSk7Ci0gICAgICAgICAgICBzc2hfZnJlZSAodG1w
X3Nlc3Npb24pOworICAgICAgICAgICAgc3NoX3N0cmluZ19mcmVlX2NoYXIoaW5mZXJyZWRfdXNl
cm5hbWUpOworICAgICAgICAgICAgc3NoX2ZyZWUodG1wX3Nlc3Npb24pOwogICAgICAgICB9CiAg
ICAgfQogI2VuZGlmCiAKLSAgICBpZiAodGhpcy0+dXNlci5pc0VtcHR5ICgpKSB7CisgICAgaWYg
KHRoaXMtPnVzZXIuaXNFbXB0eSgpKQorICAgIHsKICNpZmRlZiBRX09TX1dJTgotICAgICAgICB0
aGlzLT51c2VyID0gZ2V0ZW52ICgiVVNFUk5BTUUiKTsKKyAgICAgICAgdGhpcy0+dXNlciA9IGdl
dGVudigiVVNFUk5BTUUiKTsKICNlbHNlCi0gICAgICAgIHRoaXMtPnVzZXIgPSBnZXRlbnYgKCJV
U0VSIik7CisgICAgICAgIHRoaXMtPnVzZXIgPSBnZXRlbnYoIlVTRVIiKTsKICNlbmRpZgogICAg
IH0KIAogICAgIGlmIChrZXJiZXJvcykKICAgICB7Ci0gICAgICAgIHgyZ29EZWJ1Zzw8IlN0YXJ0
aW5nIFNTSCBjb25uZWN0aW9uIHdpdGggS2VyYmVyb3MgYXV0aGVudGljYXRpb24uIjsKKyAgICAg
ICAgeDJnb0RlYnVnIDw8ICJTdGFydGluZyBTU0ggY29ubmVjdGlvbiB3aXRoIEtlcmJlcm9zIGF1
dGhlbnRpY2F0aW9uLiIgPDwgZW5kbDsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAg
eDJnb0RlYnVnPDwiU3RhcnRpbmcgU1NIIGNvbm5lY3Rpb24gd2l0aG91dCBLZXJiZXJvcyBhdXRo
ZW50aWNhdGlvbi4iOworICAgICAgICB4MmdvRGVidWcgPDwgIlN0YXJ0aW5nIFNTSCBjb25uZWN0
aW9uIHdpdGhvdXQgS2VyYmVyb3MgYXV0aGVudGljYXRpb24uIiA8PCBlbmRsOwogICAgIH0KLSAg
ICB4MmdvRGVidWc8PCJTc2hNYXN0ZXJDb25uZWN0aW9uLCBpbnN0YW5jZSAiPDx0aGlzPDwiIGNy
ZWF0ZWQuIjsKKyAgICB4MmdvRGVidWcgPDwgIlNzaE1hc3RlckNvbm5lY3Rpb24sIGluc3RhbmNl
ICIgPDwgdGhpcyA8PCAiIGNyZWF0ZWQuIiA8PCBlbmRsOwogfQogCi0KIHZvaWQgU3NoTWFzdGVy
Q29ubmVjdGlvbjo6c2xvdFNzaFByb3h5Q29ubmVjdGlvbk9rKCkKIHsKLSAgICB4MmdvRGVidWc8
PCJTU0ggcHJveHkgY29ubmVjdGVkLiI7Ci0KKyAgICB4MmdvRGVidWcgPDwgIlNTSCBwcm94eSBj
b25uZWN0ZWQuIiA8PCBlbmRsOwogCi0gICAgbG9jYWxQcm94eVBvcnQ9UFJPWFlUVU5ORUxQT1JU
OwotICAgIHdoaWxlICggT05NYWluV2luZG93Ojppc1NlcnZlclJ1bm5pbmcgKCBsb2NhbFByb3h5
UG9ydCApICkKKyAgICBsb2NhbFByb3h5UG9ydCA9IFBST1hZVFVOTkVMUE9SVDsKKyAgICB3aGls
ZSAoT05NYWluV2luZG93Ojppc1NlcnZlclJ1bm5pbmcobG9jYWxQcm94eVBvcnQpKQogICAgICAg
ICArK2xvY2FsUHJveHlQb3J0OwogCi0gICAgc3NoUHJveHktPnN0YXJ0VHVubmVsICggaG9zdCwg
cG9ydCwgIjEyNy4wLjAuMSIsbG9jYWxQcm94eVBvcnQsZmFsc2UsdGhpcywgU0xPVCAoIHNsb3RT
c2hQcm94eVR1bm5lbE9rKGludCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNMT1Qg
KCBzbG90U3NoUHJveHlUdW5uZWxGYWlsZWQoYm9vbCxRU3RyaW5nLGludCkpKTsKLQorICAgIHNz
aFByb3h5LT5zdGFydFR1bm5lbChob3N0LCBwb3J0LCAiMTI3LjAuMC4xIiwgbG9jYWxQcm94eVBv
cnQsIGZhbHNlLCB0aGlzLCBTTE9UKHNsb3RTc2hQcm94eVR1bm5lbE9rKGludCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBTTE9UKHNsb3RTc2hQcm94eVR1bm5lbEZhaWxlZChib29sLCBR
U3RyaW5nLCBpbnQpKSk7CiB9CiAKLQotaW50IFNzaE1hc3RlckNvbm5lY3Rpb246OmNvcHlGaWxl
KGNvbnN0IFFTdHJpbmcmIHNyYywgY29uc3QgUVN0cmluZyBkc3QsIFFPYmplY3QqIHJlY2VpdmVy
LCBjb25zdCBjaGFyKiBzbG90RmluaXNoZWQpCitpbnQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6Y29w
eUZpbGUoY29uc3QgUVN0cmluZyAmc3JjLCBjb25zdCBRU3RyaW5nIGRzdCwgUU9iamVjdCAqcmVj
ZWl2ZXIsIGNvbnN0IGNoYXIgKnNsb3RGaW5pc2hlZCkKIHsKLSAgICBTc2hQcm9jZXNzKiBwcm9j
PW5ldyBTc2hQcm9jZXNzKHRoaXMsIG5leHRQaWQrKyk7Ci0gICAgaWYocmVjZWl2ZXIgJiYgc2xv
dEZpbmlzaGVkKQorICAgIFNzaFByb2Nlc3MgKnByb2MgPSBuZXcgU3NoUHJvY2Vzcyh0aGlzLCBu
ZXh0UGlkKyspOworICAgIGlmIChyZWNlaXZlciAmJiBzbG90RmluaXNoZWQpCiAgICAgewotICAg
ICAgICBjb25uZWN0KHByb2MsIFNJR05BTChzc2hGaW5pc2hlZChib29sLFFTdHJpbmcsaW50KSks
IHJlY2VpdmVyLCBzbG90RmluaXNoZWQpOworICAgICAgICBjb25uZWN0KHByb2MsIFNJR05BTChz
c2hGaW5pc2hlZChib29sLCBRU3RyaW5nLCBpbnQpKSwgcmVjZWl2ZXIsIHNsb3RGaW5pc2hlZCk7
CiAgICAgfQotICAgIHByb2MtPnN0YXJ0X2NwKHNyYyxkc3QpOwotICAgIHByb2Nlc3Nlczw8cHJv
YzsKKyAgICBwcm9jLT5zdGFydF9jcChzcmMsIGRzdCk7CisgICAgcHJvY2Vzc2VzIDw8IHByb2M7
CiAgICAgcmV0dXJuIHByb2MtPnBpZDsKIH0KIAotaW50IFNzaE1hc3RlckNvbm5lY3Rpb246OmV4
ZWN1dGVDb21tYW5kKGNvbnN0IFFTdHJpbmcmIGNvbW1hbmQsIFFPYmplY3QqIHJlY2VpdmVyLCBj
b25zdCBjaGFyKiBzbG90RmluaXNoZWQsIGJvb2wgb3ZlcnJpZGVQYXRoKQoraW50IFNzaE1hc3Rl
ckNvbm5lY3Rpb246OmV4ZWN1dGVDb21tYW5kKGNvbnN0IFFTdHJpbmcgJmNvbW1hbmQsIFFPYmpl
Y3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyICpzbG90RmluaXNoZWQsIGJvb2wgb3ZlcnJpZGVQYXRo
KQogewotICAgIFNzaFByb2Nlc3MqIHByb2M9bmV3IFNzaFByb2Nlc3ModGhpcywgbmV4dFBpZCsr
KTsKLSAgICBpZihyZWNlaXZlciAmJiBzbG90RmluaXNoZWQpCisgICAgU3NoUHJvY2VzcyAqcHJv
YyA9IG5ldyBTc2hQcm9jZXNzKHRoaXMsIG5leHRQaWQrKyk7CisgICAgaWYgKHJlY2VpdmVyICYm
IHNsb3RGaW5pc2hlZCkKICAgICB7Ci0gICAgICAgIGNvbm5lY3QocHJvYywgU0lHTkFMKHNzaEZp
bmlzaGVkKGJvb2wsUVN0cmluZyxpbnQpKSwgcmVjZWl2ZXIsIHNsb3RGaW5pc2hlZCk7CisgICAg
ICAgIGNvbm5lY3QocHJvYywgU0lHTkFMKHNzaEZpbmlzaGVkKGJvb2wsIFFTdHJpbmcsIGludCkp
LCByZWNlaXZlciwgc2xvdEZpbmlzaGVkKTsKICAgICB9CiAgICAgcHJvYy0+c3RhcnROb3JtYWwo
Y29tbWFuZCwgb3ZlcnJpZGVQYXRoKTsKLSAgICBwcm9jZXNzZXM8PHByb2M7CisgICAgcHJvY2Vz
c2VzIDw8IHByb2M7CiAgICAgcmV0dXJuIHByb2MtPnBpZDsKLQogfQogCiBRU3RyaW5nIFNzaE1h
c3RlckNvbm5lY3Rpb246OmdldFNvdXJjZUZpbGUoaW50IHBpZCkKIHsKLSAgICBmb3JlYWNoIChT
c2hQcm9jZXNzKiBwcm9jLCBwcm9jZXNzZXMpCisgICAgZm9yZWFjaCAoU3NoUHJvY2VzcyAqcHJv
YywgcHJvY2Vzc2VzKQogICAgIHsKLSAgICAgICAgaWYocHJvYy0+cGlkPT1waWQpCisgICAgICAg
IGlmIChwcm9jLT5waWQgPT0gcGlkKQogICAgICAgICAgICAgcmV0dXJuIHByb2MtPmdldFNvdXJj
ZSgpOwogICAgIH0KICAgICByZXR1cm4gUVN0cmluZyA6Om51bGw7CiB9CiAKLQogdm9pZCBTc2hN
YXN0ZXJDb25uZWN0aW9uOjphZGRSZXZlcnNlVHVubmVsQ29ubmVjdGlvbnMoKQogewogICAgIHJl
dmVyc2VUdW5uZWxSZXF1ZXN0TXV0ZXgubG9jaygpOwotICAgIGZvcihpbnQgaT0wOyBpPHJldmVy
c2VUdW5uZWxSZXF1ZXN0LmNvdW50KCk7ICsraSkKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHJl
dmVyc2VUdW5uZWxSZXF1ZXN0LmNvdW50KCk7ICsraSkKICAgICB7Ci0gICAgICAgIGlmKCFyZXZl
cnNlVHVubmVsUmVxdWVzdFtpXS5saXN0ZW4pCisgICAgICAgIGlmICghcmV2ZXJzZVR1bm5lbFJl
cXVlc3RbaV0ubGlzdGVuKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXZlcnNlVHVubmVsUmVx
dWVzdFtpXS5saXN0ZW49dHJ1ZTsKKyAgICAgICAgICAgIHJldmVyc2VUdW5uZWxSZXF1ZXN0W2ld
Lmxpc3RlbiA9IHRydWU7CiAKICAgICAgICAgICAgIGludCByYyA9IFNTSF9BR0FJTjsKIAotI2lm
IExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQgKDAsIDcsIDApCisjaWYgTElC
U1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCgwLCA3LCAwKQogICAgICAgICAgICAg
LyogTm9uLWJsb2NraW5nIG1vZGUgbWF5IHJldHVybiBTU0hfQUdBSU4sIHNvIHRyeSBhZ2FpbiBp
ZiBuZWNlYXNzYXJ5LiAqLwotICAgICAgICAgICAgd2hpbGUgKFNTSF9BR0FJTiA9PSByYykgewor
ICAgICAgICAgICAgd2hpbGUgKFNTSF9BR0FJTiA9PSByYykKKyAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByYyA9IHNzaF9jaGFubmVsX2xpc3Rlbl9mb3J3YXJkKG15X3NzaF9zZXNzaW9u
LCBOVUxMLCByZXZlcnNlVHVubmVsUmVxdWVzdFtpXS5mb3J3YXJkUG9ydCwgTlVMTCk7CiAjZWxz
ZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJjID0gc3NoX2ZvcndhcmRfbGlzdGVu
KG15X3NzaF9zZXNzaW9uLCBOVUxMLCByZXZlcnNlVHVubmVsUmVxdWVzdFtpXS5mb3J3YXJkUG9y
dCwgTlVMTCk7CiAjZW5kaWYKIAotICAgICAgICAgICAgICAgIGlmKHJjPT1TU0hfT0spCisgICAg
ICAgICAgICAgICAgaWYgKHJjID09IFNTSF9PSykKICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgIGVtaXQgcmV2ZXJzZVR1bm5lbE9rKHJldmVyc2VUdW5uZWxSZXF1ZXN0W2ld
LmNyZWF0b3IpOwotICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWc8PCJMaXN0ZW5pbmcgZm9y
IFRDUC9JUCBjb25uZWN0aW9ucyBvbiAiPDxyZXZlcnNlVHVubmVsUmVxdWVzdFtpXS5mb3J3YXJk
UG9ydDsKKyAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJMaXN0ZW5pbmcgZm9yIFRD
UC9JUCBjb25uZWN0aW9ucyBvbiAiIDw8IHJldmVyc2VUdW5uZWxSZXF1ZXN0W2ldLmZvcndhcmRQ
b3J0IDw8IGVuZGw7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmKHJjPT1T
U0hfRVJST1IpCisgICAgICAgICAgICAgICAgaWYgKHJjID09IFNTSF9FUlJPUikKICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyPXNzaF9nZXRfZXJyb3Io
bXlfc3NoX3Nlc3Npb24pOwotICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWc8PCJGb3J3YXJk
IHBvcnQgIjw8cmV2ZXJzZVR1bm5lbFJlcXVlc3RbaV0uZm9yd2FyZFBvcnQ8PCIgZmFpbGVkOiI8
PGVycjsKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBlcnIgPSBzc2hfZ2V0X2Vycm9yKG15
X3NzaF9zZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJGb3J3YXJk
IHBvcnQgIiA8PCByZXZlcnNlVHVubmVsUmVxdWVzdFtpXS5mb3J3YXJkUG9ydCA8PCAiIGZhaWxl
ZDoiIDw8IGVyciA8PCBlbmRsOwogICAgICAgICAgICAgICAgICAgICBlbWl0IHJldmVyc2VUdW5u
ZWxGYWlsZWQocmV2ZXJzZVR1bm5lbFJlcXVlc3RbaV0uY3JlYXRvciwgZXJyKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zNDIsMTkyICszMzYsMTg1IEBAIHZvaWQgU3No
TWFzdGVyQ29ubmVjdGlvbjo6YWRkUmV2ZXJzZVR1bm5lbENvbm5lY3Rpb25zKCkKIHZvaWQgU3No
TWFzdGVyQ29ubmVjdGlvbjo6Y2hlY2tSZXZlcnNlVHVubmVsQ29ubmVjdGlvbnMoKQogewogICAg
IGludCBwb3J0OwotICAgIHNzaF9jaGFubmVsIGNoYW49c3NoX2NoYW5uZWxfYWNjZXB0X2Zvcndh
cmQobXlfc3NoX3Nlc3Npb24sIDAsICZwb3J0KTsKLSAgICBpZihjaGFuKQorICAgIHNzaF9jaGFu
bmVsIGNoYW4gPSBzc2hfY2hhbm5lbF9hY2NlcHRfZm9yd2FyZChteV9zc2hfc2Vzc2lvbiwgMCwg
JnBvcnQpOworICAgIGlmIChjaGFuKQogICAgIHsKLSAgICAgICAgeDJnb0RlYnVnPDwiTmV3IHJl
dmVyc2UgY29ubmVjdGlvbiBvbiBwb3J0ICI8PHBvcnQ7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCAi
TmV3IHJldmVyc2UgY29ubmVjdGlvbiBvbiBwb3J0ICIgPDwgcG9ydCA8PCBlbmRsOwogCiAgICAg
ICAgIHJldmVyc2VUdW5uZWxSZXF1ZXN0TXV0ZXgubG9jaygpOwotICAgICAgICBmb3IoaW50IGk9
MDsgaTxyZXZlcnNlVHVubmVsUmVxdWVzdC5jb3VudCgpOyArK2kpCisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgcmV2ZXJzZVR1bm5lbFJlcXVlc3QuY291bnQoKTsgKytpKQogICAgICAgICB7
Ci0gICAgICAgICAgICBSZXZlcnNlVHVubmVsUmVxdWVzdCByZXE9cmV2ZXJzZVR1bm5lbFJlcXVl
c3RbaV07Ci0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PiAocmVxLmZvcndhcmRQb3J0
KSA9PSBwb3J0KQorICAgICAgICAgICAgUmV2ZXJzZVR1bm5lbFJlcXVlc3QgcmVxID0gcmV2ZXJz
ZVR1bm5lbFJlcXVlc3RbaV07CisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihyZXEu
Zm9yd2FyZFBvcnQpID09IHBvcnQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeDJn
b0RlYnVnPDwiQ3JlYXRpbmcgbmV3IGNoYW5uZWwgZm9yIHJldmVyc2UgdHVubmVsICI8PHBvcnQ7
Ci0gICAgICAgICAgICAgICAgaW50IHNvY2s9c29ja2V0ICggQUZfSU5FVCwgU09DS19TVFJFQU0s
MCApOworICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiQ3JlYXRpbmcgbmV3IGNoYW5uZWwg
Zm9yIHJldmVyc2UgdHVubmVsICIgPDwgcG9ydCA8PCBlbmRsOworICAgICAgICAgICAgICAgIGlu
dCBzb2NrID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKICNpZm5kZWYgUV9PU19X
SU4KLSAgICAgICAgICAgICAgICBjb25zdCBpbnQgeT0xOworICAgICAgICAgICAgICAgIGNvbnN0
IGludCB5ID0gMTsKICNlbHNlCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciB5PTE7CisgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciB5ID0gMTsKICNlbmRpZgotICAgICAgICAgICAgICAgIHNl
dHNvY2tvcHQoc29jaywgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZLCZ5LCBzaXplb2YoaW50KSk7
CisgICAgICAgICAgICAgICAgc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1RDUCwgVENQX05PREVM
QVksICZ5LCBzaXplb2YoaW50KSk7CiAKICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJf
aW4gYWRkcmVzczsKLSAgICAgICAgICAgICAgICBhZGRyZXNzLnNpbl9mYW1pbHk9QUZfSU5FVDsK
LSAgICAgICAgICAgICAgICBhZGRyZXNzLnNpbl9wb3J0PWh0b25zICggcmVxLmxvY2FsUG9ydCAp
OwotICAgICAgICAgICAgICAgIHgyZ29EZWJ1Zzw8IkNvbm5lY3RpbmcgdG8gIjw8cmVxLmxvY2Fs
SG9zdDw8IjoiPDxyZXEubG9jYWxQb3J0PDxlbmRsOworICAgICAgICAgICAgICAgIGFkZHJlc3Mu
c2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgICAgICAgICAgYWRkcmVzcy5zaW5fcG9ydCA9
IGh0b25zKHJlcS5sb2NhbFBvcnQpOworICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiQ29u
bmVjdGluZyB0byAiIDw8IHJlcS5sb2NhbEhvc3QgPDwgIjoiIDw8IHJlcS5sb2NhbFBvcnQgPDwg
ZW5kbDsKICNpZm5kZWYgUV9PU19XSU4KLSAgICAgICAgICAgICAgICBpbmV0X2F0b24gKCByZXEu
bG9jYWxIb3N0LnRvTGF0aW4xKCksICZhZGRyZXNzLnNpbl9hZGRyICk7CisgICAgICAgICAgICAg
ICAgaW5ldF9hdG9uKHJlcS5sb2NhbEhvc3QudG9MYXRpbjEoKSwgJmFkZHJlc3Muc2luX2FkZHIp
OwogI2Vsc2UKLSAgICAgICAgICAgICAgICBhZGRyZXNzLnNpbl9hZGRyLnNfYWRkcj1pbmV0X2Fk
ZHIgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEubG9j
YWxIb3N0LnRvTGF0aW4xKCkgKTsKKyAgICAgICAgICAgICAgICBhZGRyZXNzLnNpbl9hZGRyLnNf
YWRkciA9IGluZXRfYWRkcigKKyAgICAgICAgICAgICAgICAgICAgcmVxLmxvY2FsSG9zdC50b0xh
dGluMSgpKTsKICNlbmRpZgogCi0gICAgICAgICAgICAgICAgaWYgKCA6OmNvbm5lY3QgKCBzb2Nr
LCAoIHN0cnVjdCBzb2NrYWRkciAqICkgJmFkZHJlc3Msc2l6ZW9mICggYWRkcmVzcyApICkgIT0w
ICkKKyAgICAgICAgICAgICAgICBpZiAoOjpjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIg
KikmYWRkcmVzcywgc2l6ZW9mKGFkZHJlc3MpKSAhPSAwKQogICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgUVN0cmluZyBlcnJNc2c9dHIgKCAiQ2Fubm90IGNvbm5lY3QgdG8g
IiApICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLmxvY2FsSG9zdCsi
OiIrUVN0cmluZzo6bnVtYmVyICggcmVxLmxvY2FsUG9ydCApOwotICAgICAgICAgICAgICAgICAg
ICB4MmdvRGVidWc8PGVyck1zZzw8ZW5kbDsKLSAgICAgICAgICAgICAgICAgICAgZW1pdCBpb0Vy
ciAoIHJlcS5jcmVhdG9yLCBlcnJNc2csICIiICk7CisgICAgICAgICAgICAgICAgICAgIFFTdHJp
bmcgZXJyTXNnID0gdHIoIkNhbm5vdCBjb25uZWN0IHRvICIpICsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXEubG9jYWxIb3N0ICsgIjoiICsgUVN0cmluZzo6bnVtYmVy
KHJlcS5sb2NhbFBvcnQpOworICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgZXJyTXNn
IDw8IGVuZGw7CisgICAgICAgICAgICAgICAgICAgIGVtaXQgaW9FcnIocmVxLmNyZWF0b3IsIGVy
ck1zZywgIiIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICBDaGFubmVsQ29ubmVjdGlvbiBjb247Ci0gICAgICAgICAgICAg
ICAgY29uLmNoYW5uZWw9Y2hhbjsKLSAgICAgICAgICAgICAgICBjb24uc29jaz1zb2NrOwotICAg
ICAgICAgICAgICAgIGNvbi5jcmVhdG9yPXJlcS5jcmVhdG9yOworICAgICAgICAgICAgICAgIGNv
bi5jaGFubmVsID0gY2hhbjsKKyAgICAgICAgICAgICAgICBjb24uc29jayA9IHNvY2s7CisgICAg
ICAgICAgICAgICAgY29uLmNyZWF0b3IgPSByZXEuY3JlYXRvcjsKICAgICAgICAgICAgICAgICBj
aGFubmVsQ29ubmVjdGlvbnNNdXRleC5sb2NrKCk7Ci0gICAgICAgICAgICAgICAgY2hhbm5lbENv
bm5lY3Rpb25zPDxjb247CisgICAgICAgICAgICAgICAgY2hhbm5lbENvbm5lY3Rpb25zIDw8IGNv
bjsKICAgICAgICAgICAgICAgICBjaGFubmVsQ29ubmVjdGlvbnNNdXRleC51bmxvY2soKTsKLSAg
ICAgICAgICAgICAgICB4MmdvRGVidWc8PCJOZXcgY2hhbm5lbCBjcmVhdGVkIjsKKyAgICAgICAg
ICAgICAgICB4MmdvRGVidWcgPDwgIk5ldyBjaGFubmVsIGNyZWF0ZWQiIDw8IGVuZGw7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV2
ZXJzZVR1bm5lbFJlcXVlc3RNdXRleC51bmxvY2soKTsKLQotCiAgICAgfQogfQogCi0KLWludCBT
c2hNYXN0ZXJDb25uZWN0aW9uOjpzdGFydFR1bm5lbChjb25zdCBRU3RyaW5nJiBmb3J3YXJkSG9z
dCwgdWludCBmb3J3YXJkUG9ydCwgY29uc3QgUVN0cmluZyYgbG9jYWxIb3N0LCB1aW50IGxvY2Fs
UG9ydCwgYm9vbCByZXZlcnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFFPYmplY3QqIHJlY2VpdmVyLCBjb25zdCBjaGFyKiBzbG90VHVubmVsT2ssIGNvbnN0IGNoYXIq
IHNsb3RGaW5pc2hlZCkKK2ludCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpzdGFydFR1bm5lbChjb25z
dCBRU3RyaW5nICZmb3J3YXJkSG9zdCwgdWludCBmb3J3YXJkUG9ydCwgY29uc3QgUVN0cmluZyAm
bG9jYWxIb3N0LCB1aW50IGxvY2FsUG9ydCwgYm9vbCByZXZlcnNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyICpzbG90
VHVubmVsT2ssIGNvbnN0IGNoYXIgKnNsb3RGaW5pc2hlZCkKIHsKLSAgICBTc2hQcm9jZXNzKiBw
cm9jPW5ldyBTc2hQcm9jZXNzKHRoaXMsIG5leHRQaWQrKyk7Ci0gICAgaWYocmVjZWl2ZXIgJiYg
c2xvdEZpbmlzaGVkKQorICAgIFNzaFByb2Nlc3MgKnByb2MgPSBuZXcgU3NoUHJvY2Vzcyh0aGlz
LCBuZXh0UGlkKyspOworICAgIGlmIChyZWNlaXZlciAmJiBzbG90RmluaXNoZWQpCiAgICAgewot
ICAgICAgICBjb25uZWN0KHByb2MsIFNJR05BTChzc2hGaW5pc2hlZChib29sLFFTdHJpbmcsaW50
KSksIHJlY2VpdmVyLCBzbG90RmluaXNoZWQpOworICAgICAgICBjb25uZWN0KHByb2MsIFNJR05B
TChzc2hGaW5pc2hlZChib29sLCBRU3RyaW5nLCBpbnQpKSwgcmVjZWl2ZXIsIHNsb3RGaW5pc2hl
ZCk7CiAgICAgfQotICAgIGlmKHJlY2VpdmVyICYmIHNsb3RUdW5uZWxPaykKKyAgICBpZiAocmVj
ZWl2ZXIgJiYgc2xvdFR1bm5lbE9rKQogICAgIHsKICAgICAgICAgY29ubmVjdChwcm9jLCBTSUdO
QUwoc3NoVHVubmVsT2soaW50KSksIHJlY2VpdmVyLCBzbG90VHVubmVsT2spOwogICAgIH0KICAg
ICBwcm9jLT5zdGFydFR1bm5lbChmb3J3YXJkSG9zdCwgZm9yd2FyZFBvcnQsIGxvY2FsSG9zdCwg
bG9jYWxQb3J0LCByZXZlcnNlKTsKLSAgICBpZihyZXZlcnNlICYmICFrZXJiZXJvcykKKyAgICBp
ZiAocmV2ZXJzZSAmJiAha2VyYmVyb3MpCiAgICAgewotICAgICAgICBjb25uZWN0KHRoaXMsIFNJ
R05BTChyZXZlcnNlVHVubmVsT2soU3NoUHJvY2VzcyopKSwgcHJvYywgU0xPVChzbG90UmV2ZXJz
ZVR1bm5lbE9rKFNzaFByb2Nlc3MqKSkpOwotICAgICAgICBjb25uZWN0KHRoaXMsIFNJR05BTChy
ZXZlcnNlVHVubmVsRmFpbGVkKFNzaFByb2Nlc3MqLFFTdHJpbmcpKSwgcHJvYywgU0xPVChzbG90
UmV2ZXJzZVR1bm5lbEZhaWxlZChTc2hQcm9jZXNzKixRU3RyaW5nKSkpOworICAgICAgICBjb25u
ZWN0KHRoaXMsIFNJR05BTChyZXZlcnNlVHVubmVsT2soU3NoUHJvY2VzcyAqKSksIHByb2MsIFNM
T1Qoc2xvdFJldmVyc2VUdW5uZWxPayhTc2hQcm9jZXNzICopKSk7CisgICAgICAgIGNvbm5lY3Qo
dGhpcywgU0lHTkFMKHJldmVyc2VUdW5uZWxGYWlsZWQoU3NoUHJvY2VzcyAqLCBRU3RyaW5nKSks
IHByb2MsIFNMT1Qoc2xvdFJldmVyc2VUdW5uZWxGYWlsZWQoU3NoUHJvY2VzcyAqLCBRU3RyaW5n
KSkpOwogICAgICAgICBSZXZlcnNlVHVubmVsUmVxdWVzdCByZXE7Ci0gICAgICAgIHJlcS5jcmVh
dG9yPXByb2M7Ci0gICAgICAgIHJlcS5sb2NhbFBvcnQ9bG9jYWxQb3J0OwotICAgICAgICByZXEu
bG9jYWxIb3N0PWxvY2FsSG9zdDsKLSAgICAgICAgcmVxLmZvcndhcmRQb3J0PWZvcndhcmRQb3J0
OwotICAgICAgICByZXEubGlzdGVuPWZhbHNlOwotICAgICAgICB4MmdvRGVidWc8PCJSZXF1ZXN0
aW5nIHJldmVyc2UgdHVubmVsIGZyb20gcG9ydCAiPDxmb3J3YXJkUG9ydDw8ICIgdG8gIjw8bG9j
YWxQb3J0OworICAgICAgICByZXEuY3JlYXRvciA9IHByb2M7CisgICAgICAgIHJlcS5sb2NhbFBv
cnQgPSBsb2NhbFBvcnQ7CisgICAgICAgIHJlcS5sb2NhbEhvc3QgPSBsb2NhbEhvc3Q7CisgICAg
ICAgIHJlcS5mb3J3YXJkUG9ydCA9IGZvcndhcmRQb3J0OworICAgICAgICByZXEubGlzdGVuID0g
ZmFsc2U7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCAiUmVxdWVzdGluZyByZXZlcnNlIHR1bm5lbCBm
cm9tIHBvcnQgIiA8PCBmb3J3YXJkUG9ydCA8PCAiIHRvICIgPDwgbG9jYWxQb3J0OwogICAgICAg
ICByZXZlcnNlVHVubmVsUmVxdWVzdE11dGV4LmxvY2soKTsKLSAgICAgICAgcmV2ZXJzZVR1bm5l
bFJlcXVlc3Q8PHJlcTsKKyAgICAgICAgcmV2ZXJzZVR1bm5lbFJlcXVlc3QgPDwgcmVxOwogICAg
ICAgICByZXZlcnNlVHVubmVsUmVxdWVzdE11dGV4LnVubG9jaygpOwogICAgIH0KLSAgICBwcm9j
ZXNzZXM8PHByb2M7CisgICAgcHJvY2Vzc2VzIDw8IHByb2M7CiAgICAgcmV0dXJuIHByb2MtPnBp
ZDsKIH0KIAotdm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpzbG90U3NoUHJveHlJbnRlcmFjdGlv
bkZpbmlzaChTc2hNYXN0ZXJDb25uZWN0aW9uKiBjb25uZWN0aW9uKQordm9pZCBTc2hNYXN0ZXJD
b25uZWN0aW9uOjpzbG90U3NoUHJveHlJbnRlcmFjdGlvbkZpbmlzaChTc2hNYXN0ZXJDb25uZWN0
aW9uICpjb25uZWN0aW9uIC8qIHVudXNlZCAqLykKIHsKLSAgICB4MmdvRGVidWc8PCJTU0ggcHJv
eHkgaW50ZXJhY3Rpb24gZmluaXNoZWQiOworICAgIHgyZ29EZWJ1ZyA8PCAiU1NIIHByb3h5IGlu
dGVyYWN0aW9uIGZpbmlzaGVkIjsKICAgICBzbG90U3NoUHJveHlVc2VyQXV0aEVycm9yKCJOT19F
UlJPUiIpOwogfQogCi12b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OnNsb3RTc2hQcm94eUludGVy
YWN0aW9uU3RhcnQoU3NoTWFzdGVyQ29ubmVjdGlvbiogY29ubmVjdGlvbiwgUVN0cmluZyBwcm9t
cHQpCit2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OnNsb3RTc2hQcm94eUludGVyYWN0aW9uU3Rh
cnQoU3NoTWFzdGVyQ29ubmVjdGlvbiAqY29ubmVjdGlvbiAvKiB1bnVzZWQgKi8sIFFTdHJpbmcg
cHJvbXB0KQogewogICAgIGVtaXQgc3RhcnRJbnRlcmFjdGlvbih0aGlzLCBwcm9tcHQpOwogfQog
Ci12b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OnNsb3RTc2hQcm94eUludGVyYWN0aW9uVXBkYXRl
KFNzaE1hc3RlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIFFTdHJpbmcgb3V0cHV0KQordm9pZCBT
c2hNYXN0ZXJDb25uZWN0aW9uOjpzbG90U3NoUHJveHlJbnRlcmFjdGlvblVwZGF0ZShTc2hNYXN0
ZXJDb25uZWN0aW9uICpjb25uZWN0aW9uIC8qIHVudXNlZCAqLywgUVN0cmluZyBvdXRwdXQpCiB7
CiAgICAgZW1pdCB1cGRhdGVJbnRlcmFjdGlvbih0aGlzLCBvdXRwdXQpOwogfQogCi0KIHZvaWQg
U3NoTWFzdGVyQ29ubmVjdGlvbjo6c2xvdFNzaFByb3h5Q29ubmVjdGlvbkVycm9yKFFTdHJpbmcg
ZXJyMSwgUVN0cmluZyBlcnIyKQogewotICAgIGJyZWFrTG9vcD10cnVlOwotICAgIGVtaXQgY29u
bmVjdGlvbkVycm9yKHRyKCJTU0ggcHJveHkgY29ubmVjdGlvbiBlcnJvci4iKSxlcnIxKyIgIitl
cnIyKTsKKyAgICBicmVha0xvb3AgPSB0cnVlOworICAgIGVtaXQgY29ubmVjdGlvbkVycm9yKHRy
KCJTU0ggcHJveHkgY29ubmVjdGlvbiBlcnJvci4iKSwgZXJyMSArICIgIiArIGVycjIpOwogfQog
Ci12b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OnNsb3RTc2hQcm94eVNlcnZlckF1dGhFcnJvcihp
bnQgZXJyQ29kZSwgUVN0cmluZyBlcnIsIFNzaE1hc3RlckNvbm5lY3Rpb24qIGNvbikKK3ZvaWQg
U3NoTWFzdGVyQ29ubmVjdGlvbjo6c2xvdFNzaFByb3h5U2VydmVyQXV0aEVycm9yKGludCBlcnJD
b2RlLCBRU3RyaW5nIGVyciwgU3NoTWFzdGVyQ29ubmVjdGlvbiAqY29uKQogewotICAgIGVtaXQg
c2VydmVyQXV0aEVycm9yKGVyckNvZGUsIHRyKCJTU0ggcHJveHkgY29ubmVjdGlvbiBlcnJvcjog
IikrZXJyLCBjb24pOworICAgIGVtaXQgc2VydmVyQXV0aEVycm9yKGVyckNvZGUsIHRyKCJTU0gg
cHJveHkgY29ubmVjdGlvbiBlcnJvcjogIikgKyBlcnIsIGNvbik7CiB9CiAKIHZvaWQgU3NoTWFz
dGVyQ29ubmVjdGlvbjo6c2xvdFNzaFByb3h5VXNlckF1dGhFcnJvcihRU3RyaW5nIGVycikKIHsK
LSAgICBicmVha0xvb3A9dHJ1ZTsKLSAgICBpZihlcnI9PSJOT19FUlJPUiIgfHwgZXJyPT0iTk9f
UFJPWFlfRVJST1IiKQotICAgICAgZW1pdCB1c2VyQXV0aEVycm9yKGVycik7CisgICAgYnJlYWtM
b29wID0gdHJ1ZTsKKyAgICBpZiAoZXJyID09ICJOT19FUlJPUiIgfHwgZXJyID09ICJOT19QUk9Y
WV9FUlJPUiIpCisgICAgICAgIGVtaXQgdXNlckF1dGhFcnJvcihlcnIpOwogICAgIGVsc2UKLSAg
ICAgIGVtaXQgdXNlckF1dGhFcnJvcih0cigiU1NIIHByb3h5IGNvbm5lY3Rpb24gZXJyb3I6ICIp
K2Vycik7CisgICAgICAgIGVtaXQgdXNlckF1dGhFcnJvcih0cigiU1NIIHByb3h5IGNvbm5lY3Rp
b24gZXJyb3I6ICIpICsgZXJyKTsKIH0KIAotCiB2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OnNs
b3RTc2hQcm94eVR1bm5lbE9rKGludCkKIHsKLSAgICB4MmdvRGVidWc8PCJTU0ggcHJveHkgdHVu
bmVsIGVzdGFibGlzaGVkLiI7Ci0gICAgc3NoUHJveHlSZWFkeT10cnVlOworICAgIHgyZ29EZWJ1
ZyA8PCAiU1NIIHByb3h5IHR1bm5lbCBlc3RhYmxpc2hlZC4iIDw8IGVuZGw7CisgICAgc3NoUHJv
eHlSZWFkeSA9IHRydWU7CiB9CiAKLXZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6c2xvdFNzaFBy
b3h5VHVubmVsRmFpbGVkKGJvb2wgLCAgUVN0cmluZyBvdXRwdXQsCi0gICAgICAgIGludCkKK3Zv
aWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6c2xvdFNzaFByb3h5VHVubmVsRmFpbGVkKGJvb2wsIFFT
dHJpbmcgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50KQogewotICAgIGJyZWFrTG9vcD10cnVlOworICAgIGJyZWFrTG9vcCA9IHRy
dWU7CiAgICAgZW1pdCBjb25uZWN0aW9uRXJyb3IodHIoIkZhaWxlZCB0byBjcmVhdGUgU1NIIHBy
b3h5IHR1bm5lbC4iKSwgb3V0cHV0KTsKIH0KIAotCi0KIHZvaWQgU3NoTWFzdGVyQ29ubmVjdGlv
bjo6c2xvdFNzaFByb3h5U2VydmVyQXV0aEFib3J0ZWQoKQogewotICAgIGJyZWFrTG9vcD10cnVl
OworICAgIGJyZWFrTG9vcCA9IHRydWU7CiB9CiAKIHZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6
cnVuKCkKIHsKLSAgICB4MmdvRGVidWc8PCJTc2hNYXN0ZXJDb25uZWN0aW9uLCBpbnN0YW5jZSAi
PDx0aGlzPDwiIGVudGVyaW5nIHRocmVhZC4iOwotICAgIGlmKHVzZXByb3h5ICYmIHByb3h5dHlw
ZT09UFJPWFlTU0gpCisgICAgeDJnb0RlYnVnIDw8ICJTc2hNYXN0ZXJDb25uZWN0aW9uLCBpbnN0
YW5jZSAiIDw8IHRoaXMgPDwgIiBlbnRlcmluZyB0aHJlYWQuIiA8PCBlbmRsOworICAgIGlmICh1
c2Vwcm94eSAmJiBwcm94eXR5cGUgPT0gUFJPWFlTU0gpCiAgICAgewogICAgICAgICB4MmdvRGVi
dWcgPDwgInByb3h5c2VydmVyOiAiIDw8IHByb3h5c2VydmVyIDw8ICI7IHByb3h5cG9ydDogIiA8
PCBwcm94eXBvcnQgPDwgIjsgcHJveHlsb2dpbjogIiA8PCBwcm94eWxvZ2luOwotICAgICAgICBz
c2hQcm94eT1uZXcgU3NoTWFzdGVyQ29ubmVjdGlvbiAoMCwgcHJveHlzZXJ2ZXIsIHByb3h5cG9y
dCxhY2NlcHRVbmtub3duU2VydmVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3h5bG9naW4sIHByb3h5cGFzc3dvcmQsIHByb3h5a2V5LCBwcm94eWF1dG9s
b2dpbiwgcHJveHlLcmJMb2dpbiwgZmFsc2UpOwotCi0gICAgICAgIHFSZWdpc3Rlck1ldGFUeXBl
PFNzaE1hc3RlckNvbm5lY3Rpb246OnBhc3NwaHJhc2VfdHlwZXM+ICgiU3NoTWFzdGVyQ29ubmVj
dGlvbjo6cGFzc3BocmFzZV90eXBlcyIpOwotCi0gICAgICAgIGNvbm5lY3QgKCBzc2hQcm94eSwg
U0lHTkFMICggY29ubmVjdGlvbk9rKFFTdHJpbmcpICksIHRoaXMsIFNMT1QgKCBzbG90U3NoUHJv
eHlDb25uZWN0aW9uT2soKSApICk7Ci0KLSAgICAgICAgY29ubmVjdCAoIHNzaFByb3h5LCBTSUdO
QUwgKCBzZXJ2ZXJBdXRoRXJyb3IgKCBpbnQsUVN0cmluZyxTc2hNYXN0ZXJDb25uZWN0aW9uKiAp
ICksdGhpcywKLSAgICAgICAgICAgICAgICAgIFNMT1QgKCBzbG90U3NoUHJveHlTZXJ2ZXJBdXRo
RXJyb3IgKCBpbnQsUVN0cmluZywgU3NoTWFzdGVyQ29ubmVjdGlvbiogKSApICk7Ci0gICAgICAg
IGNvbm5lY3QgKCBzc2hQcm94eSwgU0lHTkFMICggbmVlZFBhc3NQaHJhc2UoU3NoTWFzdGVyQ29u
bmVjdGlvbiosIFNzaE1hc3RlckNvbm5lY3Rpb246OnBhc3NwaHJhc2VfdHlwZXMpKSx0aGlzLAot
ICAgICAgICAgICAgICAgICAgU0lHTkFMICggbmVlZFBhc3NQaHJhc2UoU3NoTWFzdGVyQ29ubmVj
dGlvbiosIFNzaE1hc3RlckNvbm5lY3Rpb246OnBhc3NwaHJhc2VfdHlwZXMpKSApOwotICAgICAg
ICBjb25uZWN0ICggc3NoUHJveHksIFNJR05BTCAoIHNlcnZlckF1dGhBYm9ydGVkKCkpLHRoaXMs
Ci0gICAgICAgICAgICAgICAgICBTTE9UICggc2xvdFNzaFByb3h5U2VydmVyQXV0aEFib3J0ZWQo
KSkgKTsKLSAgICAgICAgY29ubmVjdCAoIHNzaFByb3h5LCBTSUdOQUwgKCB1c2VyQXV0aEVycm9y
ICggUVN0cmluZyApICksdGhpcyxTTE9UICggc2xvdFNzaFByb3h5VXNlckF1dGhFcnJvciAoIFFT
dHJpbmcgKSApICk7Ci0gICAgICAgIGNvbm5lY3QgKCBzc2hQcm94eSwgU0lHTkFMICggY29ubmVj
dGlvbkVycm9yICggUVN0cmluZyxRU3RyaW5nICkgKSwgdGhpcywKLSAgICAgICAgICAgICAgICAg
IFNMT1QgKCBzbG90U3NoUHJveHlDb25uZWN0aW9uRXJyb3IgKCBRU3RyaW5nLFFTdHJpbmcgKSAp
ICk7Ci0KLSAgICAgICAgY29ubmVjdCAoIHNzaFByb3h5LCBTSUdOQUwoc3RhcnRJbnRlcmFjdGlv
bihTc2hNYXN0ZXJDb25uZWN0aW9uKixRU3RyaW5nKSksdGhpcywKLSAgICAgICAgICAgICAgICAg
IFNMT1Qoc2xvdFNzaFByb3h5SW50ZXJhY3Rpb25TdGFydChTc2hNYXN0ZXJDb25uZWN0aW9uKixR
U3RyaW5nKSkgKTsKLSAgICAgICAgY29ubmVjdCAoIHNzaFByb3h5LCBTSUdOQUwodXBkYXRlSW50
ZXJhY3Rpb24oU3NoTWFzdGVyQ29ubmVjdGlvbiosUVN0cmluZykpLHRoaXMsCi0gICAgICAgICAg
ICAgICAgICBTTE9UKHNsb3RTc2hQcm94eUludGVyYWN0aW9uVXBkYXRlKFNzaE1hc3RlckNvbm5l
Y3Rpb24qLFFTdHJpbmcpKSApOwotICAgICAgICBjb25uZWN0ICggc3NoUHJveHksIFNJR05BTChm
aW5pc2hJbnRlcmFjdGlvbihTc2hNYXN0ZXJDb25uZWN0aW9uKikpLHRoaXMsCi0JCSAgU0xPVChz
bG90U3NoUHJveHlJbnRlcmFjdGlvbkZpbmlzaChTc2hNYXN0ZXJDb25uZWN0aW9uKikpKTsKLS8v
ICAgICAgICAgY29ubmVjdCAoIGludGVyRGxnLCBTSUdOQUwodGV4dEVudGVyZWQoUVN0cmluZykp
LCBjb24sIFNMT1QoaW50ZXJhY3Rpb25UZXh0RW50ZXIoUVN0cmluZykpKTsKLS8vICAgICAgICAg
Y29ubmVjdCAoIGludGVyRGxnLCBTSUdOQUwoaW50ZXJydXB0KCkpLCBjb24sIFNMT1QoaW50ZXJh
Y3Rpb25JbnRlcnJ1cHRTbG90KCkpKTsKLQotICAgICAgICBzc2hQcm94eVJlYWR5PWZhbHNlOwor
ICAgICAgICBzc2hQcm94eSA9IG5ldyBTc2hNYXN0ZXJDb25uZWN0aW9uKDAsIHByb3h5c2VydmVy
LCBwcm94eXBvcnQsIGFjY2VwdFVua25vd25TZXJ2ZXJzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb3h5bG9naW4sIHByb3h5cGFzc3dvcmQsIHByb3h5a2V5
LCBwcm94eWF1dG9sb2dpbiwgcHJveHlLcmJMb2dpbiwgZmFsc2UpOworCisgICAgICAgIHFSZWdp
c3Rlck1ldGFUeXBlPFNzaE1hc3RlckNvbm5lY3Rpb246OnBhc3NwaHJhc2VfdHlwZXM+KCJTc2hN
YXN0ZXJDb25uZWN0aW9uOjpwYXNzcGhyYXNlX3R5cGVzIik7CisKKyAgICAgICAgY29ubmVjdChz
c2hQcm94eSwgU0lHTkFMKGNvbm5lY3Rpb25PayhRU3RyaW5nKSksIHRoaXMsIFNMT1Qoc2xvdFNz
aFByb3h5Q29ubmVjdGlvbk9rKCkpKTsKKworICAgICAgICBjb25uZWN0KHNzaFByb3h5LCBTSUdO
QUwoc2VydmVyQXV0aEVycm9yKGludCwgUVN0cmluZywgU3NoTWFzdGVyQ29ubmVjdGlvbiAqKSks
IHRoaXMsCisgICAgICAgICAgICAgICAgU0xPVChzbG90U3NoUHJveHlTZXJ2ZXJBdXRoRXJyb3Io
aW50LCBRU3RyaW5nLCBTc2hNYXN0ZXJDb25uZWN0aW9uICopKSk7CisgICAgICAgIGNvbm5lY3Qo
c3NoUHJveHksIFNJR05BTChuZWVkUGFzc1BocmFzZShTc2hNYXN0ZXJDb25uZWN0aW9uICosIFNz
aE1hc3RlckNvbm5lY3Rpb246OnBhc3NwaHJhc2VfdHlwZXMpKSwgdGhpcywKKyAgICAgICAgICAg
ICAgICBTSUdOQUwobmVlZFBhc3NQaHJhc2UoU3NoTWFzdGVyQ29ubmVjdGlvbiAqLCBTc2hNYXN0
ZXJDb25uZWN0aW9uOjpwYXNzcGhyYXNlX3R5cGVzKSkpOworICAgICAgICBjb25uZWN0KHNzaFBy
b3h5LCBTSUdOQUwoc2VydmVyQXV0aEFib3J0ZWQoKSksIHRoaXMsCisgICAgICAgICAgICAgICAg
U0xPVChzbG90U3NoUHJveHlTZXJ2ZXJBdXRoQWJvcnRlZCgpKSk7CisgICAgICAgIGNvbm5lY3Qo
c3NoUHJveHksIFNJR05BTCh1c2VyQXV0aEVycm9yKFFTdHJpbmcpKSwgdGhpcywgU0xPVChzbG90
U3NoUHJveHlVc2VyQXV0aEVycm9yKFFTdHJpbmcpKSk7CisgICAgICAgIGNvbm5lY3Qoc3NoUHJv
eHksIFNJR05BTChjb25uZWN0aW9uRXJyb3IoUVN0cmluZywgUVN0cmluZykpLCB0aGlzLAorICAg
ICAgICAgICAgICAgIFNMT1Qoc2xvdFNzaFByb3h5Q29ubmVjdGlvbkVycm9yKFFTdHJpbmcsIFFT
dHJpbmcpKSk7CisKKyAgICAgICAgY29ubmVjdChzc2hQcm94eSwgU0lHTkFMKHN0YXJ0SW50ZXJh
Y3Rpb24oU3NoTWFzdGVyQ29ubmVjdGlvbiAqLCBRU3RyaW5nKSksIHRoaXMsCisgICAgICAgICAg
ICAgICAgU0xPVChzbG90U3NoUHJveHlJbnRlcmFjdGlvblN0YXJ0KFNzaE1hc3RlckNvbm5lY3Rp
b24gKiwgUVN0cmluZykpKTsKKyAgICAgICAgY29ubmVjdChzc2hQcm94eSwgU0lHTkFMKHVwZGF0
ZUludGVyYWN0aW9uKFNzaE1hc3RlckNvbm5lY3Rpb24gKiwgUVN0cmluZykpLCB0aGlzLAorICAg
ICAgICAgICAgICAgIFNMT1Qoc2xvdFNzaFByb3h5SW50ZXJhY3Rpb25VcGRhdGUoU3NoTWFzdGVy
Q29ubmVjdGlvbiAqLCBRU3RyaW5nKSkpOworICAgICAgICBjb25uZWN0KHNzaFByb3h5LCBTSUdO
QUwoZmluaXNoSW50ZXJhY3Rpb24oU3NoTWFzdGVyQ29ubmVjdGlvbiAqKSksIHRoaXMsCisgICAg
ICAgICAgICAgICAgU0xPVChzbG90U3NoUHJveHlJbnRlcmFjdGlvbkZpbmlzaChTc2hNYXN0ZXJD
b25uZWN0aW9uICopKSk7CisgICAgICAgIC8vICAgICAgICAgY29ubmVjdCAoIGludGVyRGxnLCBT
SUdOQUwodGV4dEVudGVyZWQoUVN0cmluZykpLCBjb24sIFNMT1QoaW50ZXJhY3Rpb25UZXh0RW50
ZXIoUVN0cmluZykpKTsKKyAgICAgICAgLy8gICAgICAgICBjb25uZWN0ICggaW50ZXJEbGcsIFNJ
R05BTChpbnRlcnJ1cHQoKSksIGNvbiwgU0xPVChpbnRlcmFjdGlvbkludGVycnVwdFNsb3QoKSkp
OworCisgICAgICAgIHNzaFByb3h5UmVhZHkgPSBmYWxzZTsKICAgICAgICAgc3NoUHJveHktPnN0
YXJ0KCk7CiAKLSAgICAgICAgd2hpbGUoISBzc2hQcm94eVJlYWR5KQorICAgICAgICB3aGlsZSAo
IXNzaFByb3h5UmVhZHkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmKGJyZWFrTG9vcCkKKyAg
ICAgICAgICAgIGlmIChicmVha0xvb3ApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cXVpdCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTUzNSw0NCArNTIyLDQ3IEBAIHZv
aWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6cnVuKCkKICAgICAgICAgICAgIHRoaXMtPnVzbGVlcCgy
MDApOwogICAgICAgICB9CiAgICAgfQotICAgIGRpc2Nvbm5lY3RTZXNzaW9uRmxhZz1mYWxzZTsK
KyAgICBkaXNjb25uZWN0U2Vzc2lvbkZsYWcgPSBmYWxzZTsKIAogICAgIGludCB2ZXJib3NpdHkg
PSBTU0hfTE9HX05PTE9HOwogCi0gICAgaWYgKE9OTWFpbldpbmRvdzo6bGlic3NoX2RlYnVnZ2lu
ZykgewotI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQgKDAsIDYsIDAp
Ci0gICAgICB2ZXJib3NpdHkgPSBTU0hfTE9HX0lORk87CisgICAgaWYgKE9OTWFpbldpbmRvdzo6
bGlic3NoX2RlYnVnZ2luZykKKyAgICB7CisjaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9W
RVJTSU9OX0lOVCgwLCA2LCAwKQorICAgICAgICB2ZXJib3NpdHkgPSBTU0hfTE9HX0lORk87CiAj
ZWxzZQotICAgICAgdmVyYm9zaXR5ID0gU1NIX0xPR19QUk9UT0NPTDsKKyAgICAgICAgdmVyYm9z
aXR5ID0gU1NIX0xPR19QUk9UT0NPTDsKICNlbmRpZgogICAgIH0KIAotICAgIGlmIChPTk1haW5X
aW5kb3c6OmxpYnNzaF9wYWNrZXRsb2cpIHsKLSNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NI
X1ZFUlNJT05fSU5UICgwLCA2LCAwKQotICAgICAgdmVyYm9zaXR5ID0gU1NIX0xPR19ERUJVRzsK
KyAgICBpZiAoT05NYWluV2luZG93OjpsaWJzc2hfcGFja2V0bG9nKQorICAgIHsKKyNpZiBMSUJT
U0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsIDYsIDApCisgICAgICAgIHZlcmJv
c2l0eSA9IFNTSF9MT0dfREVCVUc7CiAjZWxzZQotICAgICAgdmVyYm9zaXR5ID0gU1NIX0xPR19Q
QUNLRVQ7CisgICAgICAgIHZlcmJvc2l0eSA9IFNTSF9MT0dfUEFDS0VUOwogI2VuZGlmCiAgICAg
fQogCisgICAgLy8gU2V0IHRpbWUtb3V0IHRvIDEgbWluLgogICAgIGxvbmcgdGltZW91dCA9IDYw
OwogCiAgICAgbXlfc3NoX3Nlc3Npb24gPSBzc2hfbmV3KCk7Ci0gICAgaWYgKCBteV9zc2hfc2Vz
c2lvbiA9PSBOVUxMICkKKyAgICBpZiAobXlfc3NoX3Nlc3Npb24gPT0gTlVMTCkKICAgICB7Ci0g
ICAgICAgIFFTdHJpbmcgZXJyPXRyICggIkNhbm5vdCBjcmVhdGUgU1NIIHNlc3Npb24uIiApOwot
ICAgICAgICB4MmdvRGVidWc8PGVycjw8ZW5kbDsKLSAgICAgICAgZW1pdCBjb25uZWN0aW9uRXJy
b3IgKCBlcnIsIiIgKTsKKyAgICAgICAgUVN0cmluZyBlcnIgPSB0cigiQ2Fubm90IGNyZWF0ZSBT
U0ggc2Vzc2lvbi4iKTsKKyAgICAgICAgeDJnb0RlYnVnIDw8IGVyciA8PCBlbmRsOworICAgICAg
ICBlbWl0IGNvbm5lY3Rpb25FcnJvcihlcnIsICIiKTsKICAgICAgICAgcXVpdCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAjaWZkZWYgUV9PU19XSU4KICAgICB7Ci0gICAgICAgIFFCeXRl
QXJyYXkgdG1wX0JBID0gKG1haW5XbmQtPmdldEhvbWVEaXJlY3RvcnkgKCkgKyAiL3NzaCIpLnRv
TG9jYWw4Qml0ICgpOworICAgICAgICBRQnl0ZUFycmF5IHRtcF9CQSA9IChtYWluV25kLT5nZXRI
b21lRGlyZWN0b3J5KCkgKyAiL3NzaCIpLnRvTG9jYWw4Qml0KCk7CiAKLSAgICAgICAgc3NoX29w
dGlvbnNfc2V0ICggbXlfc3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX1NTSF9ESVIsIHRtcF9CQS5k
YXRhICgpKTsKLSAgICAgICAgeDJnb0RlYnVnIDw8ICJTZXR0aW5nIFNTSCBkaXJlY3RvcnkgdG8g
IiA8PCB0bXBfQkEuZGF0YSAoKTsKKyAgICAgICAgc3NoX29wdGlvbnNfc2V0KG15X3NzaF9zZXNz
aW9uLCBTU0hfT1BUSU9OU19TU0hfRElSLCB0bXBfQkEuZGF0YSgpKTsKKyAgICAgICAgeDJnb0Rl
YnVnIDw8ICJTZXR0aW5nIFNTSCBkaXJlY3RvcnkgdG8gIiA8PCB0bXBfQkEuZGF0YSgpOwogICAg
ICAgICBpZiAoa2VyYmVyb3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHBhcnNlS25vd25Ib3N0
cygpOwpAQCAtNTgxLDEzNiArNTcxLDEzNSBAQCB2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OnJ1
bigpCiAjZW5kaWYKIAogICAgIHNzaF9vcHRpb25zX3NldChteV9zc2hfc2Vzc2lvbiwgU1NIX09Q
VElPTlNfTE9HX1ZFUkJPU0lUWSwgJnZlcmJvc2l0eSk7Ci0KICAgICBzc2hfb3B0aW9uc19zZXQo
bXlfc3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX1RJTUVPVVQsICZ0aW1lb3V0KTsKIAogICAgIGlm
ICh1c2Vwcm94eSAmJiBwcm94eXR5cGUgPT0gUFJPWFlIVFRQKQogICAgIHsKICAgICAgICAgc29j
a2V0X3QgcHJveHlzb2NrZXQgPSBTU0hfSU5WQUxJRF9TT0NLRVQ7CiAKLSAgICAgICAgdGNwTmV0
d29ya1Byb3h5ID0gbmV3IFFOZXR3b3JrUHJveHkoIFFOZXR3b3JrUHJveHk6Okh0dHBQcm94eSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5c2VydmVy
LCBwcm94eXBvcnQsIHByb3h5bG9naW4sIHByb3h5cGFzc3dvcmQpOworICAgICAgICB0Y3BOZXR3
b3JrUHJveHkgPSBuZXcgUU5ldHdvcmtQcm94eShRTmV0d29ya1Byb3h5OjpIdHRwUHJveHksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5c2VydmVyLCBw
cm94eXBvcnQsIHByb3h5bG9naW4sIHByb3h5cGFzc3dvcmQpOwogICAgICAgICB0Y3BQcm94eVNv
Y2tldCA9IG5ldyBRVGNwU29ja2V0KCk7Ci0gICAgICAgIHRjcFByb3h5U29ja2V0LT5zZXRQcm94
eSggKnRjcE5ldHdvcmtQcm94eSApOworICAgICAgICB0Y3BQcm94eVNvY2tldC0+c2V0UHJveHko
KnRjcE5ldHdvcmtQcm94eSk7CiAgICAgICAgIHRjcFByb3h5U29ja2V0LT5jb25uZWN0VG9Ib3N0
KGhvc3QsIHBvcnQpOwogICAgICAgICBpZiAoIXRjcFByb3h5U29ja2V0LT53YWl0Rm9yQ29ubmVj
dGVkKDMwMDAwKSkKICAgICAgICAgewotICAgICAgICAgICAgUVN0cmluZyBtZXNzYWdlPXRyICgg
IkNhbm5vdCBjb25uZWN0IHRvIHByb3h5IHNlcnZlci4iICk7Ci0gICAgICAgICAgICB4MmdvRGVi
dWc8PG1lc3NhZ2U8PGVuZGw7Ci0gICAgICAgICAgICBlbWl0IGNvbm5lY3Rpb25FcnJvciAoICJQ
cm94eSIsIG1lc3NhZ2UgKTsKLSAgICAgICAgICAgIHNzaF9mcmVlICggbXlfc3NoX3Nlc3Npb24g
KTsKKyAgICAgICAgICAgIFFTdHJpbmcgbWVzc2FnZSA9IHRyKCJDYW5ub3QgY29ubmVjdCB0byBw
cm94eSBzZXJ2ZXIuIik7CisgICAgICAgICAgICB4MmdvRGVidWcgPDwgbWVzc2FnZSA8PCBlbmRs
OworICAgICAgICAgICAgZW1pdCBjb25uZWN0aW9uRXJyb3IoIlByb3h5IiwgbWVzc2FnZSk7Cisg
ICAgICAgICAgICBzc2hfZnJlZShteV9zc2hfc2Vzc2lvbik7CiAgICAgICAgICAgICBxdWl0KCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcHJveHlzb2NrZXQgPSB0
Y3BQcm94eVNvY2tldC0+c29ja2V0RGVzY3JpcHRvcigpOwogICAgICAgICB4MmdvRGVidWcgPDwg
IkNyZWF0ZWQgSFRUUCBwcm94eSBzb2NrZXQ6ICIgPDwgcHJveHlzb2NrZXQgPDwgZW5kbDsKLSAg
ICAgICAgc3NoX29wdGlvbnNfc2V0KCBteV9zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfRkQsICZw
cm94eXNvY2tldCk7Ci0gICAgICAgIHNzaF9zZXRfZmRfdG9yZWFkKCBteV9zc2hfc2Vzc2lvbik7
Ci0gICAgICAgIHgyZ29EZWJ1Zzw8IkNvbm5lY3RlZCB0byBIVFRQIHByb3h5IHNlcnZlcjogIiA8
PCBwcm94eXNlcnZlciA8PCAiOiIKLSAgICAgICAgICAgICAgICAgPDwgcHJveHlwb3J0IDw8ZW5k
bDsKKyAgICAgICAgc3NoX29wdGlvbnNfc2V0KG15X3NzaF9zZXNzaW9uLCBTU0hfT1BUSU9OU19G
RCwgJnByb3h5c29ja2V0KTsKKyAgICAgICAgc3NoX3NldF9mZF90b3JlYWQobXlfc3NoX3Nlc3Np
b24pOworICAgICAgICB4MmdvRGVidWcgPDwgIkNvbm5lY3RlZCB0byBIVFRQIHByb3h5IHNlcnZl
cjogIiA8PCBwcm94eXNlcnZlciA8PCAiOiIKKyAgICAgICAgICAgICAgICAgIDw8IHByb3h5cG9y
dCA8PCBlbmRsOwogICAgIH0KIAotICAgIGlmICggIXNzaENvbm5lY3QoKSApCisgICAgaWYgKCFz
c2hDb25uZWN0KCkpCiAgICAgewotICAgICAgICBpZihkaXNjb25uZWN0U2Vzc2lvbkZsYWcpCisg
ICAgICAgIGlmIChkaXNjb25uZWN0U2Vzc2lvbkZsYWcpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHgyZ29EZWJ1Zzw8IlNlc3Npb24gaXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQsIGV4aXRpbmcuIjw8
ZW5kbDsKKyAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiU2Vzc2lvbiBpcyBhbHJlYWR5IGRpc2Nv
bm5lY3RlZCwgZXhpdGluZy4iIDw8IGVuZGw7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgUVN0cmluZyBlcnI9c3NoX2dldF9lcnJvciAoIG15X3NzaF9zZXNzaW9uICk7
Ci0gICAgICAgIFFTdHJpbmcgbWVzc2FnZT10ciAoICJDYW5ub3QgY29ubmVjdCB0byAiICkgK2hv
c3QrIjoiK1FTdHJpbmc6Om51bWJlciAoIHBvcnQgKTsKLSAgICAgICAgeDJnb0RlYnVnPDxtZXNz
YWdlPDwiIC0gIjw8ZXJyOwotICAgICAgICBlbWl0IGNvbm5lY3Rpb25FcnJvciAoIG1lc3NhZ2Us
IGVyciApOwotICAgICAgICBzc2hfZnJlZSAoIG15X3NzaF9zZXNzaW9uICk7CisgICAgICAgIFFT
dHJpbmcgZXJyID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lvbik7CisgICAgICAgIFFTdHJp
bmcgbWVzc2FnZSA9IHRyKCJDYW5ub3QgY29ubmVjdCB0byAiKSArIGhvc3QgKyAiOiIgKyBRU3Ry
aW5nOjpudW1iZXIocG9ydCk7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCBtZXNzYWdlIDw8ICIgLSAi
IDw8IGVycjsKKyAgICAgICAgZW1pdCBjb25uZWN0aW9uRXJyb3IobWVzc2FnZSwgZXJyKTsKKyAg
ICAgICAgc3NoX2ZyZWUobXlfc3NoX3Nlc3Npb24pOwogICAgICAgICBxdWl0KCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYoZGlzY29ubmVjdFNlc3Npb25GbGFnKQorICAgIGlmIChk
aXNjb25uZWN0U2Vzc2lvbkZsYWcpCiAgICAgewotICAgICAgICB4MmdvRGVidWc8PCJTZXNzaW9u
IGlzIGFscmVhZHkgZGlzY29ubmVjdGVkLCBleGl0aW5nLiI8PGVuZGw7CisgICAgICAgIHgyZ29E
ZWJ1ZyA8PCAiU2Vzc2lvbiBpcyBhbHJlYWR5IGRpc2Nvbm5lY3RlZCwgZXhpdGluZy4iIDw8IGVu
ZGw7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUVN0cmluZyBlcnJNc2c7Ci0gICAgaW50
IHN0YXRlPXNlcnZlckF1dGggKCBlcnJNc2cgKTsKLSAgICBpZiAoIHN0YXRlICE9IFNTSF9TRVJW
RVJfS05PV05fT0sgKQorICAgIGludCBzdGF0ZSA9IHNlcnZlckF1dGgoZXJyTXNnKTsKKyAgICBp
ZiAoc3RhdGUgIT0gU1NIX1NFUlZFUl9LTk9XTl9PSykKICAgICB7Ci0gICAgICAgIGlmKGRpc2Nv
bm5lY3RTZXNzaW9uRmxhZykKKyAgICAgICAgaWYgKGRpc2Nvbm5lY3RTZXNzaW9uRmxhZykKICAg
ICAgICAgewotICAgICAgICAgICAgeDJnb0RlYnVnPDwiU2Vzc2lvbiBpcyBhbHJlYWR5IGRpc2Nv
bm5lY3RlZCwgZXhpdGluZy4iPDxlbmRsOworICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJTZXNz
aW9uIGlzIGFscmVhZHkgZGlzY29ubmVjdGVkLCBleGl0aW5nLiIgPDwgZW5kbDsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICB3cml0ZUhvc3RLZXk9d3JpdGVIb3N0S2V5
UmVhZHk9ZmFsc2U7Ci0gICAgICAgIGVtaXQgc2VydmVyQXV0aEVycm9yICggc3RhdGUsZXJyTXNn
LCB0aGlzICk7Ci0gICAgICAgIGZvcig7OykKKyAgICAgICAgd3JpdGVIb3N0S2V5ID0gd3JpdGVI
b3N0S2V5UmVhZHkgPSBmYWxzZTsKKyAgICAgICAgZW1pdCBzZXJ2ZXJBdXRoRXJyb3Ioc3RhdGUs
IGVyck1zZywgdGhpcyk7CisgICAgICAgIGZvciAoOzspCiAgICAgICAgIHsKICAgICAgICAgICAg
IHRoaXMtPnVzbGVlcCgxMDApOwogICAgICAgICAgICAgd3JpdGVIb3N0S2V5TXV0ZXgubG9jaygp
OwotICAgICAgICAgICAgaWYod3JpdGVIb3N0S2V5UmVhZHkpCisgICAgICAgICAgICBpZiAod3Jp
dGVIb3N0S2V5UmVhZHkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYod3JpdGVI
b3N0S2V5KQorICAgICAgICAgICAgICAgIGlmICh3cml0ZUhvc3RLZXkpCiAgICAgICAgICAgICAg
ICAgICAgIHNzaF93cml0ZV9rbm93bmhvc3QobXlfc3NoX3Nlc3Npb24pOwogICAgICAgICAgICAg
ICAgIHdyaXRlSG9zdEtleU11dGV4LnVubG9jaygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgd3JpdGVIb3N0S2V5TXV0ZXgudW5sb2NrKCk7CiAg
ICAgICAgIH0KLSAgICAgICAgc3NoX2Rpc2Nvbm5lY3QgKCBteV9zc2hfc2Vzc2lvbiApOwotICAg
ICAgICBzc2hfZnJlZSAoIG15X3NzaF9zZXNzaW9uICk7CisgICAgICAgIHNzaF9kaXNjb25uZWN0
KG15X3NzaF9zZXNzaW9uKTsKKyAgICAgICAgc3NoX2ZyZWUobXlfc3NoX3Nlc3Npb24pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYoZGlzY29ubmVjdFNlc3Npb25GbGFnKQorICAg
IGlmIChkaXNjb25uZWN0U2Vzc2lvbkZsYWcpCiAgICAgewotICAgICAgICB4MmdvRGVidWc8PCJT
ZXNzaW9uIGlzIGFscmVhZHkgZGlzY29ubmVjdGVkLCBleGl0aW5nLiI8PGVuZGw7CisgICAgICAg
IHgyZ29EZWJ1ZyA8PCAiU2Vzc2lvbiBpcyBhbHJlYWR5IGRpc2Nvbm5lY3RlZCwgZXhpdGluZy4i
IDw8IGVuZGw7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBRQnl0ZUFycmF5IHRtcF9C
QSA9IHVzZXIudG9Mb2NhbDhCaXQgKCk7Ci0gICAgc3NoX29wdGlvbnNfc2V0ICggbXlfc3NoX3Nl
c3Npb24sIFNTSF9PUFRJT05TX1VTRVIsIHRtcF9CQS5kYXRhICgpICk7CisgICAgUUJ5dGVBcnJh
eSB0bXBfQkEgPSB1c2VyLnRvTG9jYWw4Qml0KCk7CisgICAgc3NoX29wdGlvbnNfc2V0KG15X3Nz
aF9zZXNzaW9uLCBTU0hfT1BUSU9OU19VU0VSLCB0bXBfQkEuZGF0YSgpKTsKIAogI2lmZGVmIFFf
T1NfV0lOCiAgICAgewotICAgICAgICBRQnl0ZUFycmF5IHRtcF9CQSA9IChtYWluV25kLT5nZXRI
b21lRGlyZWN0b3J5ICgpICsgIi9zc2giKS50b0xvY2FsOEJpdCAoKTsKKyAgICAgICAgUUJ5dGVB
cnJheSB0bXBfQkEgPSAobWFpblduZC0+Z2V0SG9tZURpcmVjdG9yeSgpICsgIi9zc2giKS50b0xv
Y2FsOEJpdCgpOwogCi0gICAgICAgIHNzaF9vcHRpb25zX3NldCAoIG15X3NzaF9zZXNzaW9uLCBT
U0hfT1BUSU9OU19TU0hfRElSLCB0bXBfQkEuZGF0YSAoKSApOwotICAgICAgICB4MmdvRGVidWcg
PDwgIlNldHRpbmcgU1NIIGRpcmVjdG9yeSB0byAiIDw8IHRtcF9CQS5kYXRhICgpOworICAgICAg
ICBzc2hfb3B0aW9uc19zZXQobXlfc3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX1NTSF9ESVIsIHRt
cF9CQS5kYXRhKCkpOworICAgICAgICB4MmdvRGVidWcgPDwgIlNldHRpbmcgU1NIIGRpcmVjdG9y
eSB0byAiIDw8IHRtcF9CQS5kYXRhKCk7CiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAoIHVzZXJB
dXRoKCkgKQorICAgIGlmICh1c2VyQXV0aCgpKQogICAgIHsKLSAgICAgICAgaWYoZGlzY29ubmVj
dFNlc3Npb25GbGFnKQorICAgICAgICBpZiAoZGlzY29ubmVjdFNlc3Npb25GbGFnKQogICAgICAg
ICB7Ci0gICAgICAgICAgICB4MmdvRGVidWc8PCJTZXNzaW9uIGlzIGFscmVhZHkgZGlzY29ubmVj
dGVkLCBleGl0aW5nLiI8PGVuZGw7CisgICAgICAgICAgICB4MmdvRGVidWcgPDwgIlNlc3Npb24g
aXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQsIGV4aXRpbmcuIiA8PCBlbmRsOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHgyZ29EZWJ1Zzw8IlVzZXIgYXV0aGVudGljYXRp
b24gT0suIjsKKyAgICAgICAgeDJnb0RlYnVnIDw8ICJVc2VyIGF1dGhlbnRpY2F0aW9uIE9LLiI7
CiAgICAgICAgIC8vIGNoZWNrTG9naW4oKSBpcyBjdXJyZW50bHkgc3BlY2lmaWMgdG8gbGlic3No
LgotICAgICAgICBpZihrZXJiZXJvcykKKyAgICAgICAgaWYgKGtlcmJlcm9zKQogICAgICAgICB7
CiAgICAgICAgICAgICBlbWl0IGNvbm5lY3Rpb25Payhob3N0KTsKICAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmKHRoaXMtPmxvZ2luQ2hlY2sgPT0gZmFsc2UpCisgICAgICAgIGVsc2UgaWYgKHRo
aXMtPmxvZ2luQ2hlY2sgPT0gZmFsc2UpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHgyZ29EZWJ1
Zzw8IlNraXBwaW5nIExvZ2luIENoZWNrIGFzIHJlcXVlc3RlZCBieSBjb25maWd1cmF0aW9uIjsK
KyAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiU2tpcHBpbmcgTG9naW4gQ2hlY2sgYXMgcmVxdWVz
dGVkIGJ5IGNvbmZpZ3VyYXRpb24iIDw8IGVuZGw7CiAgICAgICAgICAgICBlbWl0IGNvbm5lY3Rp
b25Payhob3N0KTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmKGNoZWNrTG9naW4oKSkKKyAgICAgICAgICAgIGlmIChjaGVja0xvZ2luKCkpCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeDJnb0RlYnVnPDwiTG9naW4gQ2hlY2sgLSBPSyI7
CisgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJMb2dpbiBDaGVjayAtIE9LIiA8PCBlbmRs
OwogICAgICAgICAgICAgICAgIGVtaXQgY29ubmVjdGlvbk9rKGhvc3QpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHgyZ29E
ZWJ1Zzw8IkxvZ2luIENoZWNrIC0gRmFpbGVkIjsKLS8vICAgICAgICAgIGlmKCFpbnRlcmFjdGlv
bkludGVycnVwdCkKKyAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIkxvZ2luIENoZWNrIC0g
RmFpbGVkIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIC8vIGlmKCFpbnRlcmFjdGlvbkludGVy
cnVwdCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBlbWl0IGZpbmlzaElu
dGVyYWN0aW9uKHRoaXMpOworICAgICAgICAgICAgICAgICAgICBlbWl0IGZpbmlzaEludGVyYWN0
aW9uKHRoaXMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzc2hfZGlzY29u
bmVjdCAoIG15X3NzaF9zZXNzaW9uICk7Ci0gICAgICAgICAgICAgICAgc3NoX2ZyZWUgKCBteV9z
c2hfc2Vzc2lvbiApOworICAgICAgICAgICAgICAgIHNzaF9kaXNjb25uZWN0KG15X3NzaF9zZXNz
aW9uKTsKKyAgICAgICAgICAgICAgICBzc2hfZnJlZShteV9zc2hfc2Vzc2lvbik7CiAgICAgICAg
ICAgICAgICAgcXVpdCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
QEAgLTcxOCwxMDUgKzcwNywxMDQgQEAgdm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpydW4oKQog
ICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZihkaXNjb25uZWN0U2Vzc2lvbkZsYWcp
CisgICAgICAgIGlmIChkaXNjb25uZWN0U2Vzc2lvbkZsYWcpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHgyZ29EZWJ1Zzw8IlNlc3Npb24gaXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQsIGV4aXRpbmcu
Ijw8ZW5kbDsKKyAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiU2Vzc2lvbiBpcyBhbHJlYWR5IGRp
c2Nvbm5lY3RlZCwgZXhpdGluZy4iIDw8IGVuZGw7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgUVN0cmluZyBlcnI7CiAgICAgICAgIGlmICgha2VyYmVyb3MpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGVycj1zc2hfZ2V0X2Vycm9yICggbXlfc3NoX3Nlc3Npb24gKTsK
KyAgICAgICAgICAgIGVyciA9IHNzaF9nZXRfZXJyb3IobXlfc3NoX3Nlc3Npb24pOwogICAgICAg
ICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgZXJyPXNzaFByb2NFcnJT
dHJpbmc7CisgICAgICAgICAgICBlcnIgPSBzc2hQcm9jRXJyU3RyaW5nOwogICAgICAgICB9Ci0g
ICAgICAgIFFTdHJpbmcgbWVzc2FnZT10ciAoICJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIiApOwot
ICAgICAgICB4MmdvRGVidWc8PG1lc3NhZ2U8PCIgLSAiPDxlcnI7Ci0gICAgICAgIGVtaXQgdXNl
ckF1dGhFcnJvciAoIGF1dGhFcnJvcnMuam9pbiAoICJcbiIgKSApOwotICAgICAgICBzc2hfZGlz
Y29ubmVjdCAoIG15X3NzaF9zZXNzaW9uICk7Ci0gICAgICAgIHNzaF9mcmVlICggbXlfc3NoX3Nl
c3Npb24gKTsKKyAgICAgICAgUVN0cmluZyBtZXNzYWdlID0gdHIoIkF1dGhlbnRpY2F0aW9uIGZh
aWxlZC4iKTsKKyAgICAgICAgeDJnb0RlYnVnIDw8IG1lc3NhZ2UgPDwgIiAtICIgPDwgZXJyOwor
ICAgICAgICBlbWl0IHVzZXJBdXRoRXJyb3IoYXV0aEVycm9ycy5qb2luKCJcbiIpKTsKKyAgICAg
ICAgc3NoX2Rpc2Nvbm5lY3QobXlfc3NoX3Nlc3Npb24pOworICAgICAgICBzc2hfZnJlZShteV9z
c2hfc2Vzc2lvbik7CiAgICAgICAgIHF1aXQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
CiAjaWZuZGVmIFFfT1NfV0lOCi0gICAgY29uc3QgaW50IHk9MTsKKyAgICBjb25zdCBpbnQgeSA9
IDE7CiAjZWxzZQotICAgIGNvbnN0IGNoYXIgeT0xOworICAgIGNvbnN0IGNoYXIgeSA9IDE7CiAj
ZW5kaWYKLSAgICBzb2NrZXRfdCBzZXNzaW9uX3NvY2s9c3NoX2dldF9mZChteV9zc2hfc2Vzc2lv
bik7Ci0gICAgc2V0c29ja29wdChzZXNzaW9uX3NvY2ssIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxB
WSwmeSwgc2l6ZW9mKGludCkpOwotCisgICAgc29ja2V0X3Qgc2Vzc2lvbl9zb2NrID0gc3NoX2dl
dF9mZChteV9zc2hfc2Vzc2lvbik7CisgICAgc2V0c29ja29wdChzZXNzaW9uX3NvY2ssIElQUFJP
VE9fVENQLCBUQ1BfTk9ERUxBWSwgJnksIHNpemVvZihpbnQpKTsKIAogICAgIGNoYW5uZWxMb29w
KCk7CiB9CiAKLQogU3NoTWFzdGVyQ29ubmVjdGlvbjo6flNzaE1hc3RlckNvbm5lY3Rpb24oKQog
ewogCiAgICAgZGlzY29ubmVjdEZsYWdNdXRleC5sb2NrKCk7Ci0gICAgZGlzY29ubmVjdFNlc3Np
b25GbGFnPXRydWU7CisgICAgZGlzY29ubmVjdFNlc3Npb25GbGFnID0gdHJ1ZTsKICAgICBkaXNj
b25uZWN0RmxhZ011dGV4LnVubG9jaygpOwotICAgIHgyZ29EZWJ1Zzw8IlNzaE1hc3RlckNvbm5l
Y3Rpb24sIGluc3RhbmNlICI8PHRoaXM8PCIgd2FpdGluZyBmb3IgdGhyZWFkIHRvIGZpbmlzaC4i
OworICAgIHgyZ29EZWJ1ZyA8PCAiU3NoTWFzdGVyQ29ubmVjdGlvbiwgaW5zdGFuY2UgIiA8PCB0
aGlzIDw8ICIgd2FpdGluZyBmb3IgdGhyZWFkIHRvIGZpbmlzaC4iIDw8IGVuZGw7CiAgICAgd2Fp
dCgxNTAwMCk7Ci0gICAgeDJnb0RlYnVnPDwiU3NoTWFzdGVyQ29ubmVjdGlvbiwgaW5zdGFuY2Ug
Ijw8dGhpczw8IiB0aHJlYWQgZmluaXNoZWQuIjsKLSAgICBmb3IoaW50IGk9cHJvY2Vzc2VzLmNv
dW50KCktMTsgaT49MDsgLS1pKQorICAgIHgyZ29EZWJ1ZyA8PCAiU3NoTWFzdGVyQ29ubmVjdGlv
biwgaW5zdGFuY2UgIiA8PCB0aGlzIDw8ICIgdGhyZWFkIGZpbmlzaGVkLiIgPDwgZW5kbDsKKyAg
ICBmb3IgKGludCBpID0gcHJvY2Vzc2VzLmNvdW50KCkgLSAxOyBpID49IDA7IC0taSkKICAgICB7
CiAgICAgICAgIGRlbGV0ZSBwcm9jZXNzZXNbaV07CiAgICAgfQotICAgIHgyZ29EZWJ1Zzw8IlNz
aE1hc3RlckNvbm5lY3Rpb24sIGluc3RhbmNlICI8PHRoaXM8PCIgZmluaXNoZWQgZGVzdHJ1Y3Rv
ci4iOworICAgIHgyZ29EZWJ1ZyA8PCAiU3NoTWFzdGVyQ29ubmVjdGlvbiwgaW5zdGFuY2UgIiA8
PCB0aGlzIDw8ICIgZmluaXNoZWQgZGVzdHJ1Y3Rvci4iIDw8IGVuZGw7CiB9CiAKLQogYm9vbCBT
c2hNYXN0ZXJDb25uZWN0aW9uOjpzc2hDb25uZWN0KCkKIHsKICAgICBpbnQgcmM7CiAgICAgUUJ5
dGVBcnJheSB0bXBCQSA9IGhvc3QudG9Mb2NhbDhCaXQoKTsKLSAgICBpZih1c2Vwcm94eSAmJiBw
cm94eXR5cGU9PVBST1hZU1NIKQorICAgIGlmICh1c2Vwcm94eSAmJiBwcm94eXR5cGUgPT0gUFJP
WFlTU0gpCiAgICAgewotICAgICAgICBzc2hfb3B0aW9uc19zZXQgKCBteV9zc2hfc2Vzc2lvbiwg
U1NIX09QVElPTlNfSE9TVCwgIjEyNy4wLjAuMSIgKTsKLSAgICAgICAgaWYgKGxvY2FsUHJveHlQ
b3J0KSB7Ci0gICAgICAgICAgICBzc2hfb3B0aW9uc19zZXQgKCBteV9zc2hfc2Vzc2lvbiwgU1NI
X09QVElPTlNfUE9SVCwgJmxvY2FsUHJveHlQb3J0ICk7CisgICAgICAgIHNzaF9vcHRpb25zX3Nl
dChteV9zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfSE9TVCwgIjEyNy4wLjAuMSIpOworICAgICAg
ICBpZiAobG9jYWxQcm94eVBvcnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNzaF9vcHRpb25z
X3NldChteV9zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfUE9SVCwgJmxvY2FsUHJveHlQb3J0KTsK
ICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBzc2hfb3B0aW9uc19z
ZXQgKCBteV9zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfSE9TVCwgdG1wQkEuZGF0YSgpICk7Ci0g
ICAgICAgIGlmIChwb3J0KSB7Ci0gICAgICAgICAgICBzc2hfb3B0aW9uc19zZXQgKCBteV9zc2hf
c2Vzc2lvbiwgU1NIX09QVElPTlNfUE9SVCwgJnBvcnQgKTsKKyAgICAgICAgc3NoX29wdGlvbnNf
c2V0KG15X3NzaF9zZXNzaW9uLCBTU0hfT1BUSU9OU19IT1NULCB0bXBCQS5kYXRhKCkpOworICAg
ICAgICBpZiAocG9ydCkKKyAgICAgICAgeworICAgICAgICAgICAgc3NoX29wdGlvbnNfc2V0KG15
X3NzaF9zZXNzaW9uLCBTU0hfT1BUSU9OU19QT1JULCAmcG9ydCk7CiAgICAgICAgIH0KICAgICB9
CiAKLSNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UICgwLCA2LCAwKQor
I2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCwgNiwgMCkKICAgICB1
bnNpZ25lZCBpbnQgY3VyX3BvcnQgPSAwOwotICAgIHNzaF9vcHRpb25zX2dldF9wb3J0IChteV9z
c2hfc2Vzc2lvbiwgJmN1cl9wb3J0KTsKLSAgICB4MmdvRGVidWcgPDwgIlNlc3Npb24gcG9ydCBi
ZWZvcmUgY29uZmlnIGZpbGUgcGFyc2U6ICIgPDwgY3VyX3BvcnQ7CisgICAgc3NoX29wdGlvbnNf
Z2V0X3BvcnQobXlfc3NoX3Nlc3Npb24sICZjdXJfcG9ydCk7CisgICAgeDJnb0RlYnVnIDw8ICJT
ZXNzaW9uIHBvcnQgYmVmb3JlIGNvbmZpZyBmaWxlIHBhcnNlOiAiIDw8IGN1cl9wb3J0IDw8IGVu
ZGw7CiAjZW5kaWYKIAogICAgIC8qIFBhcnNlIH4vLnNzaC9jb25maWcuICovCi0gICAgaWYgKHNz
aF9vcHRpb25zX3BhcnNlX2NvbmZpZyAobXlfc3NoX3Nlc3Npb24sIE5VTEwpIDwgMCkgewotICAg
ICAgICB4MmdvRGVidWcgPDwgIldhcm5pbmc6IHVuYWJsZSB0byBwYXJzZSB0aGUgU1NIIGNvbmZp
ZyBmaWxlLiI7CisgICAgaWYgKHNzaF9vcHRpb25zX3BhcnNlX2NvbmZpZyhteV9zc2hfc2Vzc2lv
biwgTlVMTCkgPCAwKQorICAgIHsKKyAgICAgICAgeDJnb0RlYnVnIDw8ICJXYXJuaW5nOiB1bmFi
bGUgdG8gcGFyc2UgdGhlIFNTSCBjb25maWcgZmlsZS4iIDw8IGVuZGw7CiAgICAgfQogCi0jaWYg
TElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCAoMCwgNiwgMCkKLSAgICBzc2hf
b3B0aW9uc19nZXRfcG9ydCAobXlfc3NoX3Nlc3Npb24sICZjdXJfcG9ydCk7Ci0gICAgeDJnb0Rl
YnVnIDw8ICJTZXNzaW9uIHBvcnQgYWZ0ZXIgY29uZmlnIGZpbGUgcGFyc2U6ICIgPDwgY3VyX3Bv
cnQ7CisjaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCgwLCA2LCAwKQor
ICAgIHNzaF9vcHRpb25zX2dldF9wb3J0KG15X3NzaF9zZXNzaW9uLCAmY3VyX3BvcnQpOworICAg
IHgyZ29EZWJ1ZyA8PCAiU2Vzc2lvbiBwb3J0IGFmdGVyIGNvbmZpZyBmaWxlIHBhcnNlOiAiIDw8
IGN1cl9wb3J0IDw8IGVuZGw7CiAjZW5kaWYKIAotICAgIHJjID0gc3NoX2Nvbm5lY3QgKCBteV9z
c2hfc2Vzc2lvbiApOwotICAgIGlmICggcmMgIT0gU1NIX09LICkKKyAgICByYyA9IHNzaF9jb25u
ZWN0KG15X3NzaF9zZXNzaW9uKTsKKyAgICBpZiAocmMgIT0gU1NIX09LKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLS8vc2V0IHZhbHVlcyBmb3IgcmVtb3RlIGhvc3QgZm9y
IHByb3BlciBzZXJ2ZXIgYXV0aGVudGljYXRpb24KLSAgICBpZih1c2Vwcm94eSAmJiBwcm94eXR5
cGU9PVBST1hZU1NIKQorICAgIC8vc2V0IHZhbHVlcyBmb3IgcmVtb3RlIGhvc3QgZm9yIHByb3Bl
ciBzZXJ2ZXIgYXV0aGVudGljYXRpb24KKyAgICBpZiAodXNlcHJveHkgJiYgcHJveHl0eXBlID09
IFBST1hZU1NIKQogICAgIHsKLSAgICAgICAgeDJnb0RlYnVnIDw8ICJDb25uZWN0ZWQgdmlhIHBy
b3h5LCByZXNldHRpbmcgY29ubmVjdGlvbiB2YWx1ZXMgb24gc2Vzc2lvbiB0byAiIDw8IHRtcEJB
LmRhdGEoKSA8PCAiOiIgPDwgcG9ydDsKLSAgICAgICAgc3NoX29wdGlvbnNfc2V0ICggbXlfc3No
X3Nlc3Npb24sIFNTSF9PUFRJT05TX0hPU1QsIHRtcEJBLmRhdGEoKSApOworICAgICAgICB4Mmdv
RGVidWcgPDwgIkNvbm5lY3RlZCB2aWEgcHJveHksIHJlc2V0dGluZyBjb25uZWN0aW9uIHZhbHVl
cyBvbiBzZXNzaW9uIHRvICIgPDwgdG1wQkEuZGF0YSgpIDw8ICI6IiA8PCBwb3J0IDw8IGVuZGw7
CisgICAgICAgIHNzaF9vcHRpb25zX3NldChteV9zc2hfc2Vzc2lvbiwgU1NIX09QVElPTlNfSE9T
VCwgdG1wQkEuZGF0YSgpKTsKIAogICAgICAgICAvKgogICAgICAgICAgKiBUaGUgU1NIIHBvcnQg
bWlnaHQgYmUgMCwgd2hpY2ggaW5kaWNhdGVzIHRvIHVzZSB0aGUgZGVmYXVsdCBwb3J0CkBAIC04
MzQsMjA1ICs4MjIsMjEyIEBAIGJvb2wgU3NoTWFzdGVyQ29ubmVjdGlvbjo6c3NoQ29ubmVjdCgp
CiAgICAgICAgIGludCB3b3JrX3BvcnQgPSBwb3J0OwogCiAgICAgICAgIC8qIE9oLCB5ZWFoLCBh
bmQgd2UgZG9uJ3QgcmVhbGx5IHN1cHBvcnQgcG9ydCB2YWx1ZXMgb2YgMCBmb3IgcHJlLTAuNi4w
IGxpYnNzaC4gU29ycnkuICovCi0jaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9O
X0lOVCAoMCwgNiwgMCkKLSAgICAgICAgaWYgKCF3b3JrX3BvcnQpIHsKLSAgICAgICAgICAgIHNz
aF9zZXNzaW9uIHRtcF9zZXNzaW9uID0gc3NoX25ldyAoKTsKKyNpZiBMSUJTU0hfVkVSU0lPTl9J
TlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsIDYsIDApCisgICAgICAgIGlmICghd29ya19wb3J0KQor
ICAgICAgICB7CisgICAgICAgICAgICBzc2hfc2Vzc2lvbiB0bXBfc2Vzc2lvbiA9IHNzaF9uZXco
KTsKIAotICAgICAgICAgICAgaWYgKCF0bXBfc2Vzc2lvbikgewotICAgICAgICAgICAgICAgIFFT
dHJpbmcgZXJyb3JfbXNnID0gdHIgKCJDYW5ub3QgY3JlYXRlIFNTSCBzZXNzaW9uLiIpOwotICAg
ICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCBlcnJvcl9tc2c7CisgICAgICAgICAgICBpZiAoIXRt
cF9zZXNzaW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyb3Jf
bXNnID0gdHIoIkNhbm5vdCBjcmVhdGUgU1NIIHNlc3Npb24uIik7CisgICAgICAgICAgICAgICAg
eDJnb0RlYnVnIDw8IGVycm9yX21zZyA8PCBlbmRsOwogICAgICAgICAgICAgICAgIHJldHVybiAo
ZmFsc2UpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgc3NoX29wdGlvbnNfc2V0ICh0bXBfc2Vzc2lvbiwgU1NIX09QVElPTlNfSE9TVCwgdG1wQkEu
ZGF0YSAoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc3NoX29wdGlvbnNfc2V0KHRtcF9zZXNzaW9uLCBTU0hfT1BUSU9OU19IT1NULCB0bXBCQS5k
YXRhKCkpOwogCiAgICAgICAgICAgICAgICAgLyogUGFyc2Ugfi8uc3NoL2NvbmZpZy4gKi8KLSAg
ICAgICAgICAgICAgICBpZiAoc3NoX29wdGlvbnNfcGFyc2VfY29uZmlnICh0bXBfc2Vzc2lvbiwg
TlVMTCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiV2FybmluZzog
dW5hYmxlIHRvIHBhcnNlIHRoZSBTU0ggY29uZmlnIGZpbGUuIjsKKyAgICAgICAgICAgICAgICBp
ZiAoc3NoX29wdGlvbnNfcGFyc2VfY29uZmlnKHRtcF9zZXNzaW9uLCBOVUxMKSA8IDApCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIldhcm5pbmc6
IHVuYWJsZSB0byBwYXJzZSB0aGUgU1NIIGNvbmZpZyBmaWxlLiIgPDwgZW5kbDsKICAgICAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5mZXJyZWRfcG9ydCA9
IDA7Ci0gICAgICAgICAgICAgICAgc3NoX29wdGlvbnNfZ2V0X3BvcnQgKHRtcF9zZXNzaW9uLCAm
aW5mZXJyZWRfcG9ydCk7Ci0gICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJGZXRjaGVkIGlu
ZmVycmVkIHNlc3Npb24gcG9ydDogIiA8PCBpbmZlcnJlZF9wb3J0OworICAgICAgICAgICAgICAg
IHNzaF9vcHRpb25zX2dldF9wb3J0KHRtcF9zZXNzaW9uLCAmaW5mZXJyZWRfcG9ydCk7CisgICAg
ICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJGZXRjaGVkIGluZmVycmVkIHNlc3Npb24gcG9ydDog
IiA8PCBpbmZlcnJlZF9wb3J0IDw8IGVuZGw7CiAKICAgICAgICAgICAgICAgICB3b3JrX3BvcnQg
PSBpbmZlcnJlZF9wb3J0ICYgMHhGRkZGOwogCi0gICAgICAgICAgICAgICAgc3NoX2ZyZWUgKHRt
cF9zZXNzaW9uKTsKKyAgICAgICAgICAgICAgICBzc2hfZGlzY29ubmVjdCh0bXBfc2Vzc2lvbik7
CisgICAgICAgICAgICAgICAgc3NoX2ZyZWUodG1wX3Nlc3Npb24pOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAjZW5kaWYKIAotICAgICAgICBzc2hfb3B0aW9uc19zZXQgKCBteV9zc2hfc2Vz
c2lvbiwgU1NIX09QVElPTlNfUE9SVCwgJndvcmtfcG9ydCApOworICAgICAgICBzc2hfb3B0aW9u
c19zZXQobXlfc3NoX3Nlc3Npb24sIFNTSF9PUFRJT05TX1BPUlQsICZ3b3JrX3BvcnQpOwogICAg
IH0KIAotI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQgKDAsIDYsIDAp
Ci0gICAgc3NoX29wdGlvbnNfZ2V0X3BvcnQgKG15X3NzaF9zZXNzaW9uLCAmY3VyX3BvcnQpOwot
ICAgIHgyZ29EZWJ1ZyA8PCAiU2Vzc2lvbiBwb3J0IGJlZm9yZSBjb25maWcgZmlsZSBwYXJzZSAo
cGFydCAyKTogIiA8PCBjdXJfcG9ydDsKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZF
UlNJT05fSU5UKDAsIDYsIDApCisgICAgc3NoX29wdGlvbnNfZ2V0X3BvcnQobXlfc3NoX3Nlc3Np
b24sICZjdXJfcG9ydCk7CisgICAgeDJnb0RlYnVnIDw8ICJTZXNzaW9uIHBvcnQgYmVmb3JlIGNv
bmZpZyBmaWxlIHBhcnNlIChwYXJ0IDIpOiAiIDw8IGN1cl9wb3J0IDw8IGVuZGw7CiAjZW5kaWYK
IAogICAgIC8qIFBhcnNlIH4vLnNzaC9jb25maWcuICovCi0gICAgaWYgKHNzaF9vcHRpb25zX3Bh
cnNlX2NvbmZpZyAobXlfc3NoX3Nlc3Npb24sIE5VTEwpIDwgMCkgewotICAgICAgICB4MmdvRGVi
dWcgPDwgIldhcm5pbmc6IHVuYWJsZSB0byBwYXJzZSB0aGUgU1NIIGNvbmZpZyBmaWxlLiI7Cisg
ICAgaWYgKHNzaF9vcHRpb25zX3BhcnNlX2NvbmZpZyhteV9zc2hfc2Vzc2lvbiwgTlVMTCkgPCAw
KQorICAgIHsKKyAgICAgICAgeDJnb0RlYnVnIDw8ICJXYXJuaW5nOiB1bmFibGUgdG8gcGFyc2Ug
dGhlIFNTSCBjb25maWcgZmlsZS4iIDw8IGVuZGw7CiAgICAgfQogCi0jaWYgTElCU1NIX1ZFUlNJ
T05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCAoMCwgNiwgMCkKLSAgICBzc2hfb3B0aW9uc19nZXRf
cG9ydCAobXlfc3NoX3Nlc3Npb24sICZjdXJfcG9ydCk7Ci0gICAgeDJnb0RlYnVnIDw8ICJTZXNz
aW9uIHBvcnQgYWZ0ZXIgY29uZmlnIGZpbGUgcGFyc2UgKHBhcnQgMik6ICIgPDwgY3VyX3BvcnQ7
CisjaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCgwLCA2LCAwKQorICAg
IHNzaF9vcHRpb25zX2dldF9wb3J0KG15X3NzaF9zZXNzaW9uLCAmY3VyX3BvcnQpOworICAgIHgy
Z29EZWJ1ZyA8PCAiU2Vzc2lvbiBwb3J0IGFmdGVyIGNvbmZpZyBmaWxlIHBhcnNlIChwYXJ0IDIp
OiAiIDw8IGN1cl9wb3J0IDw8IGVuZGw7CiAjZW5kaWYKIAogICAgIHJldHVybiB0cnVlOwogfQog
Ci0KIHZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6d3JpdGVLbm93bkhvc3RzKGJvb2wgd3JpdGUp
CiB7CiAgICAgd3JpdGVIb3N0S2V5TXV0ZXgubG9jaygpOwotICAgIHdyaXRlSG9zdEtleVJlYWR5
PXRydWU7Ci0gICAgd3JpdGVIb3N0S2V5PXdyaXRlOwotICAgIGlmKCF3cml0ZSkKKyAgICB3cml0
ZUhvc3RLZXlSZWFkeSA9IHRydWU7CisgICAgd3JpdGVIb3N0S2V5ID0gd3JpdGU7CisgICAgaWYg
KCF3cml0ZSkKICAgICB7Ci0gICAgICAgIGJyZWFrTG9vcD10cnVlOworICAgICAgICBicmVha0xv
b3AgPSB0cnVlOwogICAgICAgICBlbWl0IHNlcnZlckF1dGhBYm9ydGVkKCk7CiAgICAgfQogICAg
IHdyaXRlSG9zdEtleU11dGV4LnVubG9jaygpOwotCiB9CiAKLQotaW50IFNzaE1hc3RlckNvbm5l
Y3Rpb246OnNlcnZlckF1dGggKCBRU3RyaW5nJiBlcnJvck1zZyApCitpbnQgU3NoTWFzdGVyQ29u
bmVjdGlvbjo6c2VydmVyQXV0aChRU3RyaW5nICZlcnJvck1zZykKIHsKLSAgICB4MmdvRGVidWc8
PCJjc2VydmVyQXV0aCI7CisgICAgeDJnb0RlYnVnIDw8ICJjc2VydmVyQXV0aCIgPDwgZW5kbDsK
IAogICAgIGludCBzdGF0ZSA9IFNTSF9TRVJWRVJfRVJST1I7CiAgICAgdW5zaWduZWQgY2hhciAq
aGFzaCA9IE5VTEw7CiAgICAgY2hhciAqaGV4YSA9IE5VTEw7Ci0jaWYgTElCU1NIX1ZFUlNJT05f
SU5UID49IFNTSF9WRVJTSU9OX0lOVCAoMCwgNiwgMCkKLSAgICBzc2hfa2V5IHNydl9wdWJrZXkg
PSB7IDAgfTsKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsIDYs
IDApCisgICAgc3NoX2tleSBzcnZfcHVia2V5ID0gezB9OwogICAgIGludCByYyA9IFNTSF9FUlJP
UjsKICAgICBzaXplX3QgaGxlbiA9IDA7CiAjZWxzZQogICAgIGludCBobGVuID0gMDsKICNlbmRp
ZgogCi0gICAgc3RhdGUgPSBzc2hfaXNfc2VydmVyX2tub3duICggbXlfc3NoX3Nlc3Npb24gKTsK
KyAgICBzdGF0ZSA9IHNzaF9pc19zZXJ2ZXJfa25vd24obXlfc3NoX3Nlc3Npb24pOwogCi0jaWYg
TElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCAoMCwgNiwgMCkKLSNpZiBMSUJT
U0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UICgwLCA4LCAwKQotICAgIHJjID0gc3No
X2dldF9zZXJ2ZXJfcHVibGlja2V5IChteV9zc2hfc2Vzc2lvbiwgJnNydl9wdWJrZXkpOwotI2Vs
c2UgLyogTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCAoMCwgOCwgMCkgKi8K
LSAgICByYyA9IHNzaF9nZXRfcHVibGlja2V5IChteV9zc2hfc2Vzc2lvbiwgJnNydl9wdWJrZXkp
OworI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCwgNiwgMCkKKyNp
ZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UKDAsIDgsIDApCisgICAgcmMg
PSBzc2hfZ2V0X3NlcnZlcl9wdWJsaWNrZXkobXlfc3NoX3Nlc3Npb24sICZzcnZfcHVia2V5KTsK
KyNlbHNlICAvKiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UICgwLCA4LCAw
KSAqLworICAgIHJjID0gc3NoX2dldF9zZXJ2ZXJfcHVibGlja2V5KG15X3NzaF9zZXNzaW9uLCAm
c3J2X3B1YmtleSk7CisgICAgaWYgKFNTSF9PSyAhPSByYykKKyAgICB7CisgICAgICAgIHJldHVy
biAoU1NIX1NFUlZFUl9FUlJPUik7CisgICAgfQogI2VuZGlmIC8qIExJQlNTSF9WRVJTSU9OX0lO
VCA+PSBTU0hfVkVSU0lPTl9JTlQgKDAsIDgsIDApICovCiAKLSAgICBpZiAoU1NIX09LICE9IHJj
KSB7CisgICAgaWYgKFNTSF9PSyAhPSByYykKKyAgICB7CiAgICAgICAgIHJldHVybiAoU1NIX1NF
UlZFUl9FUlJPUik7CiAgICAgfQogCi0gICAgcmMgPSBzc2hfZ2V0X3B1YmxpY2tleV9oYXNoIChz
cnZfcHVia2V5LCBTU0hfUFVCTElDS0VZX0hBU0hfU0hBMSwgJmhhc2gsICZobGVuKTsKLSAgICBz
c2hfa2V5X2ZyZWUgKHNydl9wdWJrZXkpOworICAgIHJjID0gc3NoX2dldF9wdWJsaWNrZXlfaGFz
aChzcnZfcHVia2V5LCBTU0hfUFVCTElDS0VZX0hBU0hfU0hBMSwgJmhhc2gsICZobGVuKTsKKyAg
ICBzc2hfa2V5X2ZyZWUoc3J2X3B1YmtleSk7CiAKLSAgICBpZiAoMCAhPSByYykgeworICAgIGlm
ICgwICE9IHJjKQorICAgIHsKICAgICAgICAgcmV0dXJuIChTU0hfU0VSVkVSX0VSUk9SKTsKICAg
ICB9CiAjZWxzZQotICAgIGhsZW4gPSBzc2hfZ2V0X3B1YmtleV9oYXNoICggbXlfc3NoX3Nlc3Np
b24sICZoYXNoICk7CisgICAgaGxlbiA9IHNzaF9nZXRfcHVia2V5X2hhc2gobXlfc3NoX3Nlc3Np
b24sICZoYXNoKTsKICNlbmRpZgogCi0gICAgaWYgKCAwID49IGhsZW4gKQorICAgIGlmICgwID49
IGhsZW4pCiAgICAgICAgIHJldHVybiBTU0hfU0VSVkVSX0VSUk9SOwogCi0gICAgeDJnb0RlYnVn
PDwic3RhdGU6ICI8PHN0YXRlPDxlbmRsOworICAgIHgyZ29EZWJ1ZyA8PCAic3RhdGU6ICIgPDwg
c3RhdGUgPDwgZW5kbDsKIAotICAgIHN3aXRjaCAoIHN0YXRlICkKKyAgICBzd2l0Y2ggKHN0YXRl
KQogICAgIHsKICAgICBjYXNlIFNTSF9TRVJWRVJfS05PV05fT0s6CiAgICAgICAgIGJyZWFrOyAv
KiBvayAqLwogCiAgICAgY2FzZSBTU0hfU0VSVkVSX0tOT1dOX0NIQU5HRUQ6Ci0gICAgICAgIGhl
eGEgPSBzc2hfZ2V0X2hleGEgKCBoYXNoLCBobGVuICk7Ci0gICAgICAgIGVycm9yTXNnPWhvc3Qr
IjoiK1FTdHJpbmc6Om51bWJlcihwb3J0KSsiIC0gIitoZXhhOwotICAgICAgICBzc2hfc3RyaW5n
X2ZyZWVfY2hhciAoIGhleGEgKTsKKyAgICAgICAgaGV4YSA9IHNzaF9nZXRfaGV4YShoYXNoLCBo
bGVuKTsKKyAgICAgICAgZXJyb3JNc2cgPSBob3N0ICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHBv
cnQpICsgIiAtICIgKyBoZXhhOworICAgICAgICBzc2hfc3RyaW5nX2ZyZWVfY2hhcihoZXhhKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTU0hfU0VSVkVSX0ZPVU5EX09USEVSOgogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFNTSF9TRVJWRVJfRklMRV9OT1RfRk9VTkQ6CiAgICAgY2FzZSBT
U0hfU0VSVkVSX05PVF9LTk9XTjoKLSAgICAgICAgaWYgKCAhYWNjZXB0VW5rbm93blNlcnZlcnMg
KQorICAgICAgICBpZiAoIWFjY2VwdFVua25vd25TZXJ2ZXJzKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBoZXhhID0gc3NoX2dldF9oZXhhICggaGFzaCwgaGxlbiApOwotICAgICAgICAgICAgZXJy
b3JNc2c9aG9zdCsiOiIrUVN0cmluZzo6bnVtYmVyKHBvcnQpKyIgLSAiK2hleGE7Ci0gICAgICAg
ICAgICBzc2hfc3RyaW5nX2ZyZWVfY2hhciAoIGhleGEgKTsKKyAgICAgICAgICAgIGhleGEgPSBz
c2hfZ2V0X2hleGEoaGFzaCwgaGxlbik7CisgICAgICAgICAgICBlcnJvck1zZyA9IGhvc3QgKyAi
OiIgKyBRU3RyaW5nOjpudW1iZXIocG9ydCkgKyAiIC0gIiArIGhleGE7CisgICAgICAgICAgICBz
c2hfc3RyaW5nX2ZyZWVfY2hhcihoZXhhKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIHNzaF93cml0ZV9rbm93bmhvc3QgKCBteV9zc2hfc2Vzc2lvbiApOwotICAgICAg
ICBzdGF0ZT1TU0hfU0VSVkVSX0tOT1dOX09LOworICAgICAgICBzc2hfd3JpdGVfa25vd25ob3N0
KG15X3NzaF9zZXNzaW9uKTsKKyAgICAgICAgc3RhdGUgPSBTU0hfU0VSVkVSX0tOT1dOX09LOwog
ICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU1NIX1NFUlZFUl9FUlJPUjoKLSAgICAgICAgZXJy
b3JNc2c9aG9zdCsiOiIrUVN0cmluZzo6bnVtYmVyKHBvcnQpKyIgLSAiK3NzaF9nZXRfZXJyb3Ig
KCBteV9zc2hfc2Vzc2lvbiApOworICAgICAgICBlcnJvck1zZyA9IGhvc3QgKyAiOiIgKyBRU3Ry
aW5nOjpudW1iZXIocG9ydCkgKyAiIC0gIiArIHNzaF9nZXRfZXJyb3IobXlfc3NoX3Nlc3Npb24p
OwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgc3NoX2NsZWFuX3B1YmtleV9oYXNoICggJmhh
c2ggKTsKKyAgICBzc2hfY2xlYW5fcHVia2V5X2hhc2goJmhhc2gpOwogICAgIHJldHVybiBzdGF0
ZTsKIH0KIAogdm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpzZXRWZXJmaWNhdGlvbkNvZGUoUVN0
cmluZyBjb2RlKQogewotICAgIGNoYWxsZW5nZUF1dGhWZXJpZmljYXRpb25Db2RlPWNvZGU7Cisg
ICAgY2hhbGxlbmdlQXV0aFZlcmlmaWNhdGlvbkNvZGUgPSBjb2RlOwogfQogCi0KLQogYm9vbCBT
c2hNYXN0ZXJDb25uZWN0aW9uOjp1c2VyQXV0aEtleWJvYXJkSW50ZXJhY3RpdmUoUVN0cmluZyBw
cm9tcHQpCiB7Ci0gICAgeDJnb0RlYnVnPDwiT3BlbiBJbnRlcmFjdGlvbiBkaWFsb2cgdG8gY29t
cGxldGUgYXV0aGVudGljYXRpb24iOworICAgIHgyZ29EZWJ1ZyA8PCAiT3BlbiBJbnRlcmFjdGlv
biBkaWFsb2cgdG8gY29tcGxldGUgYXV0aGVudGljYXRpb24iIDw8IGVuZGw7CiAgICAgZW1pdCBz
dGFydEludGVyYWN0aW9uKHRoaXMsIHByb21wdCk7Ci0gICAgaW50ZXJhY3Rpb25JbnRlcnJ1cHQ9
ZmFsc2U7Ci0gICAgaW50ZXJhY3Rpb25JbnB1dFRleHQ9UVN0cmluZzo6bnVsbDsKLSAgICBpbnQg
cmV6PVNTSF9BVVRIX0lORk87Ci0gICAgYm9vbCBmaXJzdExvb3A9dHJ1ZTsKLSAgICBpbnQgcHJv
bXB0cz0xOworICAgIGludGVyYWN0aW9uSW50ZXJydXB0ID0gZmFsc2U7CisgICAgaW50ZXJhY3Rp
b25JbnB1dFRleHQgPSBRU3RyaW5nOjpudWxsOworICAgIGludCByZXogPSBTU0hfQVVUSF9JTkZP
OworICAgIGJvb2wgZmlyc3RMb29wID0gdHJ1ZTsKKyAgICBpbnQgcHJvbXB0cyA9IDE7CiAgICAg
UVN0cmluZyBpbnN0cnVjdGlvbjsKLSAgICB3aGlsZSAocmV6PT1TU0hfQVVUSF9JTkZPKQorICAg
IHdoaWxlIChyZXogPT0gU1NIX0FVVEhfSU5GTykKICAgICB7CiAKLSAgICAgICAgaWYoZmlyc3RM
b29wKQorICAgICAgICBpZiAoZmlyc3RMb29wKQogICAgICAgICB7Ci0gICAgICAgICAgICBmaXJz
dExvb3A9ZmFsc2U7CisgICAgICAgICAgICBmaXJzdExvb3AgPSBmYWxzZTsKICAgICAgICAgfQog
ICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHByb21wdHM9c3NoX3VzZXJhdXRo
X2tiZGludF9nZXRucHJvbXB0cyhteV9zc2hfc2Vzc2lvbik7Ci0gICAgICAgICAgICBpZihwcm9t
cHRzPjApCi0gICAgICAgICAgICAgICAgZW1pdCB1cGRhdGVJbnRlcmFjdGlvbih0aGlzLCBzc2hf
dXNlcmF1dGhfa2JkaW50X2dldHByb21wdChteV9zc2hfc2Vzc2lvbiwwLE5VTEwpKTsKKyAgICAg
ICAgICAgIHByb21wdHMgPSBzc2hfdXNlcmF1dGhfa2JkaW50X2dldG5wcm9tcHRzKG15X3NzaF9z
ZXNzaW9uKTsKKyAgICAgICAgICAgIGlmIChwcm9tcHRzID4gMCkKKyAgICAgICAgICAgICAgICBl
bWl0IHVwZGF0ZUludGVyYWN0aW9uKHRoaXMsIHNzaF91c2VyYXV0aF9rYmRpbnRfZ2V0cHJvbXB0
KG15X3NzaF9zZXNzaW9uLCAwLCBOVUxMKSk7CiAKLSAgICAgICAgICAgIFFTdHJpbmcgbmFtZT0g
c3NoX3VzZXJhdXRoX2tiZGludF9nZXRuYW1lKG15X3NzaF9zZXNzaW9uKTsKKyAgICAgICAgICAg
IFFTdHJpbmcgbmFtZSA9IHNzaF91c2VyYXV0aF9rYmRpbnRfZ2V0bmFtZShteV9zc2hfc2Vzc2lv
bik7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbiA9IHNzaF91c2VyYXV0aF9rYmRpbnRfZ2V0aW5z
dHJ1Y3Rpb24obXlfc3NoX3Nlc3Npb24pOwotICAgICAgICAgICAgeDJnb0RlYnVnPDwiSGF2ZSBw
cm9tcHRzOiAiPDxwcm9tcHRzPDxlbmRsOwotICAgICAgICAgICAgeDJnb0RlYnVnPDwiTmFtZTog
Ijw8bmFtZTw8ZW5kbDsKLSAgICAgICAgICAgIHgyZ29EZWJ1Zzw8Ikluc3RydWN0aW9uOiAiPDxp
bnN0cnVjdGlvbjw8ZW5kbDsKKyAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiSGF2ZSBwcm9tcHRz
OiAiIDw8IHByb21wdHMgPDwgZW5kbDsKKyAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiTmFtZTog
IiA8PCBuYW1lIDw8IGVuZGw7CisgICAgICAgICAgICB4MmdvRGVidWcgPDwgIkluc3RydWN0aW9u
OiAiIDw8IGluc3RydWN0aW9uIDw8IGVuZGw7CiAgICAgICAgIH0KLSAgICAgICAgaWYocHJvbXB0
cz4wKQorICAgICAgICBpZiAocHJvbXB0cyA+IDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHdo
aWxlKHRydWUpCisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBib29sIGludGVycnVwdDsKICAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbklu
cHV0TXV0ZXgubG9jaygpOwotICAgICAgICAgICAgICAgIGludGVycnVwdD1pbnRlcmFjdGlvbklu
dGVycnVwdDsKLSAgICAgICAgICAgICAgICBRU3RyaW5nIHRleHRUb1NlbmQ9aW50ZXJhY3Rpb25J
bnB1dFRleHQ7Ci0gICAgICAgICAgICAgICAgaW50ZXJhY3Rpb25JbnB1dFRleHQ9UVN0cmluZzo6
bnVsbDsKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgPSBpbnRlcmFjdGlvbkludGVycnVwdDsK
KyAgICAgICAgICAgICAgICBRU3RyaW5nIHRleHRUb1NlbmQgPSBpbnRlcmFjdGlvbklucHV0VGV4
dDsKKyAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbklucHV0VGV4dCA9IFFTdHJpbmc6Om51bGw7
CiAgICAgICAgICAgICAgICAgaW50ZXJhY3Rpb25JbnB1dE11dGV4LnVubG9jaygpOwotICAgICAg
ICAgICAgICAgIGlmKHRleHRUb1NlbmQubGVuZ3RoKCk+MCkKKyAgICAgICAgICAgICAgICBpZiAo
dGV4dFRvU2VuZC5sZW5ndGgoKSA+IDApCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICB4MmdvRGVidWc8PCJTRU5EIElucHV0IHRvIFNFUlZFUiI7Ci0gICAgICAgICAgICAg
ICAgICAgIHRleHRUb1NlbmQucmVwbGFjZSgiXG4iLCIiKTsKLSAgICAgICAgICAgICAgICAgICAg
c3NoX3VzZXJhdXRoX2tiZGludF9zZXRhbnN3ZXIobXlfc3NoX3Nlc3Npb24sMCx0ZXh0VG9TZW5k
LnRvTG9jYWw4Qml0KCkpOworICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIlNFTkQg
SW5wdXQgdG8gU0VSVkVSIiA8PCBlbmRsOworICAgICAgICAgICAgICAgICAgICB0ZXh0VG9TZW5k
LnJlcGxhY2UoIlxuIiwgIiIpOworICAgICAgICAgICAgICAgICAgICBzc2hfdXNlcmF1dGhfa2Jk
aW50X3NldGFuc3dlcihteV9zc2hfc2Vzc2lvbiwgMCwgdGV4dFRvU2VuZC50b0xvY2FsOEJpdCgp
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmKGludGVycnVwdCkKKyAgICAgICAgICAgICAgICBpZiAoaW50ZXJydXB0KQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnPDwiS2V5Ym9h
cmQgYXV0aGVudGljYXRpb24gZmFpbGVkIjsKLS8vICAgICAgICAgUVN0cmluZyBlcnI9c3NoX2dl
dF9lcnJvciAoIG15X3NzaF9zZXNzaW9uICk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dGhFcnJv
cnM8PCJOT19FUlJPUiI7CisgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiS2V5Ym9h
cmQgYXV0aGVudGljYXRpb24gZmFpbGVkIiA8PCBlbmRsOworICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIFFTdHJpbmcgZXJyPXNzaF9nZXRfZXJyb3IgKCBteV9zc2hfc2Vzc2lvbiApOwor
ICAgICAgICAgICAgICAgICAgICBhdXRoRXJyb3JzIDw8ICJOT19FUlJPUiI7CiAgICAgICAgICAg
ICAgICAgICAgIGVtaXQgZmluaXNoSW50ZXJhY3Rpb24odGhpcyk7CiAKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA0MSwxNTkgKzEwMzYsMTYzIEBAIGJvb2wgU3NoTWFz
dGVyQ29ubmVjdGlvbjo6dXNlckF1dGhLZXlib2FyZEludGVyYWN0aXZlKFFTdHJpbmcgcHJvbXB0
KQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmV6PXNzaF91c2VyYXV0aF9r
YmRpbnQobXlfc3NoX3Nlc3Npb24sIE5VTEwsIE5VTEwpOwotCisgICAgICAgIHJleiA9IHNzaF91
c2VyYXV0aF9rYmRpbnQobXlfc3NoX3Nlc3Npb24sIE5VTEwsIE5VTEwpOwogICAgIH0KLSAgICBp
ZihyZXo9PVNTSF9BVVRIX1NVQ0NFU1MpCisgICAgaWYgKHJleiA9PSBTU0hfQVVUSF9TVUNDRVNT
KQogICAgIHsKLSAgICAgICAgeDJnb0RlYnVnPDwiS2V5Ym9hcmQgYXV0aGVudGljYXRpb24gc3Vj
Y2Vzc2Z1bCI7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCAiS2V5Ym9hcmQgYXV0aGVudGljYXRpb24g
c3VjY2Vzc2Z1bCIgPDwgZW5kbDsKICAgICAgICAgZW1pdCBmaW5pc2hJbnRlcmFjdGlvbih0aGlz
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGlmKHJlej09U1NIX0FVVEhfREVO
SUVEKQorICAgIGlmIChyZXogPT0gU1NIX0FVVEhfREVOSUVEKQogICAgIHsKLSAgICAgICAgeDJn
b0RlYnVnPDwiS2V5Ym9hcmQgYXV0aGVudGljYXRpb24gZmFpbGVkIjsKLSAgICAgICAgUVN0cmlu
ZyBlcnI9c3NoX2dldF9lcnJvciAoIG15X3NzaF9zZXNzaW9uICk7Ci0gICAgICAgIGlmKGluc3Ry
dWN0aW9uLmxlbmd0aCgpPjApCisgICAgICAgIHgyZ29EZWJ1ZyA8PCAiS2V5Ym9hcmQgYXV0aGVu
dGljYXRpb24gZmFpbGVkIiA8PCBlbmRsOworICAgICAgICBRU3RyaW5nIGVyciA9IHNzaF9nZXRf
ZXJyb3IobXlfc3NoX3Nlc3Npb24pOworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24ubGVuZ3RoKCkg
PiAwKQogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRoRXJyb3JzPDxpbnN0cnVjdGlvbjsKKyAg
ICAgICAgICAgIGF1dGhFcnJvcnMgPDwgaW5zdHJ1Y3Rpb247CiAgICAgICAgIH0KLSAgICAgICAg
YXV0aEVycm9yczw8ZXJyOworICAgICAgICBhdXRoRXJyb3JzIDw8IGVycjsKICAgICAgICAgZW1p
dCBmaW5pc2hJbnRlcmFjdGlvbih0aGlzKTsKIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgUVN0cmluZyBlcnI9c3NoX2dldF9lcnJvciAoIG15X3NzaF9zZXNzaW9uICk7Ci0g
ICAgYXV0aEVycm9yczw8ZXJyOworICAgIFFTdHJpbmcgZXJyID0gc3NoX2dldF9lcnJvcihteV9z
c2hfc2Vzc2lvbik7CisgICAgYXV0aEVycm9ycyA8PCBlcnI7CiAKICAgICByZXR1cm4gZmFsc2U7
Ci0KIH0KIAotCi0KIGJvb2wgU3NoTWFzdGVyQ29ubmVjdGlvbjo6dXNlckNoYWxsZW5nZUF1dGgo
KQogewotICAgIGludCByZXo9c3NoX3VzZXJhdXRoX2tiZGludChteV9zc2hfc2Vzc2lvbiwgTlVM
TCwgTlVMTCk7CisgICAgaW50IHJleiA9IHNzaF91c2VyYXV0aF9rYmRpbnQobXlfc3NoX3Nlc3Np
b24sIE5VTEwsIE5VTEwpOwogICAgIGludCBwcm9tcHRzOwogCi0gICAgc3dpdGNoKCByZXopCisg
ICAgc3dpdGNoIChyZXopCiAgICAgewogICAgIGNhc2UgU1NIX0FVVEhfSU5GTzoKLSAgICAgICAg
cHJvbXB0cz1zc2hfdXNlcmF1dGhfa2JkaW50X2dldG5wcm9tcHRzKG15X3NzaF9zZXNzaW9uKTsK
LSAgICAgICAgeDJnb0RlYnVnPDwiSGF2ZSBwcm9tcHRzOiAiPDxwcm9tcHRzPDxlbmRsOwotICAg
ICAgICBpZihwcm9tcHRzKQorICAgICAgICBwcm9tcHRzID0gc3NoX3VzZXJhdXRoX2tiZGludF9n
ZXRucHJvbXB0cyhteV9zc2hfc2Vzc2lvbik7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCAiSGF2ZSBw
cm9tcHRzOiAiIDw8IHByb21wdHMgPDwgZW5kbDsKKyAgICAgICAgaWYgKHByb21wdHMpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb21wdD0gc3NoX3VzZXJhdXRoX2tiZGlu
dF9nZXRwcm9tcHQobXlfc3NoX3Nlc3Npb24sMCxOVUxMKTsKLSAgICAgICAgICAgIHgyZ29EZWJ1
Zzw8IlByb21wdFswXTogfCI8PHByb21wdDw8InwiPDxlbmRsOwotICAgICAgICAgICAgUVN0cmlu
ZyBwcj1wcm9tcHQ7Ci0gICAgICAgICAgICBpZihwci5zdGFydHNXaXRoICgiUGFzc3dvcmQ6Iikp
CisgICAgICAgICAgICBjb25zdCBjaGFyICpwcm9tcHQgPSBzc2hfdXNlcmF1dGhfa2JkaW50X2dl
dHByb21wdChteV9zc2hfc2Vzc2lvbiwgMCwgTlVMTCk7CisgICAgICAgICAgICB4MmdvRGVidWcg
PDwgIlByb21wdFswXTogfCIgPDwgcHJvbXB0IDw8ICJ8IiA8PCBlbmRsOworICAgICAgICAgICAg
UVN0cmluZyBwciA9IHByb21wdDsKKyAgICAgICAgICAgIGlmIChwci5zdGFydHNXaXRoKCJQYXNz
d29yZDoiKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB4MmdvRGVidWc8PCJQYXNz
d29yZCByZXF1ZXN0Ijw8ZW5kbDsKLSAgICAgICAgICAgICAgICBzc2hfdXNlcmF1dGhfa2JkaW50
X3NldGFuc3dlcihteV9zc2hfc2Vzc2lvbiwwLHBhc3MudG9MYXRpbjEoKSk7CisgICAgICAgICAg
ICAgICAgeDJnb0RlYnVnIDw8ICJQYXNzd29yZCByZXF1ZXN0IiA8PCBlbmRsOworICAgICAgICAg
ICAgICAgIHNzaF91c2VyYXV0aF9rYmRpbnRfc2V0YW5zd2VyKG15X3NzaF9zZXNzaW9uLCAwLCBw
YXNzLnRvTGF0aW4xKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiB1c2VyQ2hhbGxlbmdlQXV0
aCgpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBib29sIGhhc19jaGFsbGVuZ2VfYXV0
aF9jb2RlX3Byb21wdCA9IGZhbHNlOwogICAgICAgICAgICAgYm9vbCBuZWVkX3RvX2Rpc3BsYXlf
YXV0aF9jb2RlX3Byb21wdCA9IGZhbHNlOwotICAgICAgICAgICAgY29uc3Qgc3RkOjpzaXplX3Qg
Y2hhbGxlbmdlX2F1dGhfY29kZV9wcm9tcHRzX3NpemUgPSAoc2l6ZW9mIChjaGFsbGVuZ2VfYXV0
aF9jb2RlX3Byb21wdHNfKS9zaXplb2YgKCpjaGFsbGVuZ2VfYXV0aF9jb2RlX3Byb21wdHNfKSk7
CisgICAgICAgICAgICBjb25zdCBzdGQ6OnNpemVfdCBjaGFsbGVuZ2VfYXV0aF9jb2RlX3Byb21w
dHNfc2l6ZSA9IChzaXplb2YoY2hhbGxlbmdlX2F1dGhfY29kZV9wcm9tcHRzXykgLyBzaXplb2Yo
KmNoYWxsZW5nZV9hdXRoX2NvZGVfcHJvbXB0c18pKTsKIAotICAgICAgICAgICAgaWYgKHByLmNv
bnRhaW5zICgiY2hhbGxlbmdlIiwgUXQ6OkNhc2VJbnNlbnNpdGl2ZSkpIHsKLSAgICAgICAgICAg
ICAgeDJnb0RlYnVnIDw8ICJwcm9tcHQgY29udGFpbnMgJ2NoYWxsZW5nZSc6ICIgPDwgcHIgPDwg
ZW5kbDsKLSAgICAgICAgICAgICAgaGFzX2NoYWxsZW5nZV9hdXRoX2NvZGVfcHJvbXB0ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgbmVlZF90b19kaXNwbGF5X2F1dGhfY29kZV9wcm9tcHQgPSB0cnVl
OworICAgICAgICAgICAgaWYgKHByLmNvbnRhaW5zKCJjaGFsbGVuZ2UiLCBRdDo6Q2FzZUluc2Vu
c2l0aXZlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgInBy
b21wdCBjb250YWlucyAnY2hhbGxlbmdlJzogIiA8PCBwciA8PCBlbmRsOworICAgICAgICAgICAg
ICAgIGhhc19jaGFsbGVuZ2VfYXV0aF9jb2RlX3Byb21wdCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgbmVlZF90b19kaXNwbGF5X2F1dGhfY29kZV9wcm9tcHQgPSB0cnVlOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgIGZvciAoc3RkOjpzaXplX3QgaSA9
IDA7IGkgPCBjaGFsbGVuZ2VfYXV0aF9jb2RlX3Byb21wdHNfc2l6ZTsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgeDJnb0RlYnVnIDw8ICJDaGVja2luZyBhZ2FpbnN0IGtub3duIHByb21wdCAjIiA8
PCBpIDw8ICI6ICIgPDwgY2hhbGxlbmdlX2F1dGhfY29kZV9wcm9tcHRzX1tpXSA8PCBlbmRsOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc3Rk
OjpzaXplX3QgaSA9IDA7IGkgPCBjaGFsbGVuZ2VfYXV0aF9jb2RlX3Byb21wdHNfc2l6ZTsgKytp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJD
aGVja2luZyBhZ2FpbnN0IGtub3duIHByb21wdCAjIiA8PCBpIDw8ICI6ICIgPDwgY2hhbGxlbmdl
X2F1dGhfY29kZV9wcm9tcHRzX1tpXSA8PCBlbmRsOwogCi0gICAgICAgICAgICAgICAgLyogSWdu
b3JlICJnYXJiYWdlIiBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZywgYnV0IHJlcXVpcmUgYXQg
bGVhc3Qgb25lIGxpbmUgdG8gc3RhcnQgd2l0aCBhIGtub3duIHByb21wdC4gKi8KLSAgICAgICAg
ICAgICAgICBRU3RyaW5nTGlzdCB0bXBfc3RyX2xpc3QgPSBwci5zcGxpdCAoIlxuIiwgUVN0cmlu
Zzo6U2tpcEVtcHR5UGFydHMpOworICAgICAgICAgICAgICAgICAgICAvKiBJZ25vcmUgImdhcmJh
Z2UiIGF0IHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nLCBidXQgcmVxdWlyZSBhdCBsZWFzdCBvbmUg
bGluZSB0byBzdGFydCB3aXRoIGEga25vd24gcHJvbXB0LiAqLworICAgICAgICAgICAgICAgICAg
ICBRU3RyaW5nTGlzdCB0bXBfc3RyX2xpc3QgPSBwci5zcGxpdCgiXG4iLCBRU3RyaW5nOjpTa2lw
RW1wdHlQYXJ0cyk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKFFTdHJpbmdMaXN0Ojpjb25zdF9p
dGVyYXRvciBjaXQgPSB0bXBfc3RyX2xpc3QuY29uc3RCZWdpbiAoKTsgY2l0ICE9IHRtcF9zdHJf
bGlzdC5jb25zdEVuZCAoKTsgKytjaXQpIHsKLSAgICAgICAgICAgICAgICAgIGlmICgoKmNpdCku
c3RhcnRzV2l0aCAoY2hhbGxlbmdlX2F1dGhfY29kZV9wcm9tcHRzX1tpXSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaGFzX2NoYWxsZW5nZV9hdXRoX2NvZGVfcHJvbXB0ID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBmb3IgKFFTdHJpbmdMaXN0Ojpjb25zdF9pdGVyYXRv
ciBjaXQgPSB0bXBfc3RyX2xpc3QuY29uc3RCZWdpbigpOyBjaXQgIT0gdG1wX3N0cl9saXN0LmNv
bnN0RW5kKCk7ICsrY2l0KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoKCpjaXQpLnN0YXJ0c1dpdGgoY2hhbGxlbmdlX2F1dGhfY29kZV9wcm9tcHRz
X1tpXSkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGFzX2NoYWxsZW5nZV9hdXRoX2NvZGVfcHJvbXB0ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLyogU2tpcCBvdmVyIG90aGVyIGNo
YWxsZW5nZSBhdXRoIGNvZGUgcHJvbXB0cyBpZiB3ZSBmb3VuZCBvbmUgYWxyZWFkeS4gKi8KLSAg
ICAgICAgICAgICAgICBpZiAoaGFzX2NoYWxsZW5nZV9hdXRoX2NvZGVfcHJvbXB0KSB7Ci0gICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgLyogU2tpcCBvdmVyIG90
aGVyIGNoYWxsZW5nZSBhdXRoIGNvZGUgcHJvbXB0cyBpZiB3ZSBmb3VuZCBvbmUgYWxyZWFkeS4g
Ki8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc19jaGFsbGVuZ2VfYXV0aF9jb2RlX3Byb21w
dCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGhhc19jaGFsbGVuZ2VfYXV0aF9j
b2RlX3Byb21wdCkgewotICAgICAgICAgICAgICAgIHgyZ29EZWJ1Zzw8IlZlcmlmaWNhdGlvbiBj
b2RlIHJlcXVlc3QiPDxlbmRsOworICAgICAgICAgICAgaWYgKGhhc19jaGFsbGVuZ2VfYXV0aF9j
b2RlX3Byb21wdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwg
IlZlcmlmaWNhdGlvbiBjb2RlIHJlcXVlc3QiIDw8IGVuZGw7CiAKLSAgICAgICAgICAgICAgICBj
aGFsbGVuZ2VBdXRoUGFzc3dvcmRBY2NlcHRlZD10cnVlOwotICAgICAgICAgICAgICAgIGlmKGNo
YWxsZW5nZUF1dGhWZXJpZmljYXRpb25Db2RlID09IFFTdHJpbmc6Om51bGwpCisgICAgICAgICAg
ICAgICAgY2hhbGxlbmdlQXV0aFBhc3N3b3JkQWNjZXB0ZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGlmIChjaGFsbGVuZ2VBdXRoVmVyaWZpY2F0aW9uQ29kZSA9PSBRU3RyaW5nOjpudWxsKQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAga2V5UGhyYXNlUmVhZHk9ZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZWVkX3RvX2Rpc3BsYXlfYXV0aF9jb2RlX3By
b21wdCkgewotICAgICAgICAgICAgICAgICAgICAgIGVtaXQgbmVlZENoYWxsZW5nZVJlc3BvbnNl
KHRoaXMsIHByKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICBlbWl0IG5lZWRQYXNzUGhyYXNlKHRoaXMsIFBBU1NQSFJBU0VfQ0hBTExFTkdFKTsK
KyAgICAgICAgICAgICAgICAgICAga2V5UGhyYXNlUmVhZHkgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG5lZWRfdG9fZGlzcGxheV9hdXRoX2NvZGVfcHJvbXB0KQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbWl0IG5lZWRDaGFsbGVuZ2VS
ZXNwb25zZSh0aGlzLCBwcik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgZm9yKDs7KQorICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVhZHk9ZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbWl0IG5lZWRQYXNzUGhyYXNlKHRoaXMsIFBBU1NQSFJBU0VfQ0hB
TExFTkdFKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmb3Ig
KDs7KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHJlYWR5ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT51c2xlZXAoMjAw
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGtleVBocmFzZU11dGV4LmxvY2soKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmKGtleVBocmFzZVJlYWR5KQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlYWR5PXRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5UGhy
YXNlUmVhZHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICAgICAga2V5UGhyYXNlTXV0ZXgudW5sb2NrKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZihyZWFkeSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFk
eSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBjaGFsbGVuZ2VBdXRoVmVyaWZpY2F0aW9uQ29kZT1r
ZXlQaHJhc2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmKGNoYWxsZW5nZUF1dGhWZXJpZmljYXRp
b25Db2RlPT1RU3RyaW5nOjpudWxsKQorICAgICAgICAgICAgICAgICAgICBjaGFsbGVuZ2VBdXRo
VmVyaWZpY2F0aW9uQ29kZSA9IGtleVBocmFzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNo
YWxsZW5nZUF1dGhWZXJpZmljYXRpb25Db2RlID09IFFTdHJpbmc6Om51bGwpCiAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhFcnJvcnM8PHRyKCJBdXRo
ZW50aWNhdGlvbiBmYWlsZWQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRoRXJyb3Jz
IDw8IHRyKCJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgc3NoX3VzZXJhdXRoX2tiZGludF9zZXRhbnN3ZXIobXlfc3NoX3Nl
c3Npb24sMCxjaGFsbGVuZ2VBdXRoVmVyaWZpY2F0aW9uQ29kZS50b0xhdGluMSgpKTsKKyAgICAg
ICAgICAgICAgICBzc2hfdXNlcmF1dGhfa2JkaW50X3NldGFuc3dlcihteV9zc2hfc2Vzc2lvbiwg
MCwgY2hhbGxlbmdlQXV0aFZlcmlmaWNhdGlvbkNvZGUudG9MYXRpbjEoKSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHVzZXJDaGFsbGVuZ2VBdXRoKCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBlbHNlCi0JICAgIHsKLQkgICAgICAgIHJldHVybiB1c2VyQXV0aEtleWJvYXJkSW50ZXJh
Y3RpdmUocHJvbXB0KTsKLQkgICAgfQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiB1c2VyQXV0aEtleWJvYXJkSW50ZXJhY3RpdmUocHJvbXB0KTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiB1
c2VyQ2hhbGxlbmdlQXV0aCgpOwogICAgICAgICB9CiAgICAgY2FzZSBTU0hfQVVUSF9TVUNDRVNT
OgotICAgICAgICB4MmdvRGVidWc8PCJDaGFsbGVuZ2UgYXV0aGVudGljYXRpb24gT0suIjw8ZW5k
bDsKKyAgICAgICAgeDJnb0RlYnVnIDw8ICJDaGFsbGVuZ2UgYXV0aGVudGljYXRpb24gT0suIiA8
PCBlbmRsOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFNTSF9BVVRIX0RFTklFRDoK
LSAgICAgICAgaWYoIWNoYWxsZW5nZUF1dGhQYXNzd29yZEFjY2VwdGVkICkKKyAgICAgICAgaWYg
KCFjaGFsbGVuZ2VBdXRoUGFzc3dvcmRBY2NlcHRlZCkKICAgICAgICAgewotICAgICAgICAgICAg
UVN0cmluZyBlcnI9c3NoX2dldF9lcnJvciAoIG15X3NzaF9zZXNzaW9uICk7Ci0gICAgICAgICAg
ICBhdXRoRXJyb3JzPDxlcnI7CisgICAgICAgICAgICBRU3RyaW5nIGVyciA9IHNzaF9nZXRfZXJy
b3IobXlfc3NoX3Nlc3Npb24pOworICAgICAgICAgICAgYXV0aEVycm9ycyA8PCBlcnI7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7
Ci0gICAgICAgICAgICBjaGFsbGVuZ2VBdXRoVmVyaWZpY2F0aW9uQ29kZT1RU3RyaW5nOjpudWxs
OworICAgICAgICAgICAgY2hhbGxlbmdlQXV0aFZlcmlmaWNhdGlvbkNvZGUgPSBRU3RyaW5nOjpu
dWxsOwogICAgICAgICAgICAgLy90cnkgd2l0aCBhbm90aGVyIHZlcmlmaWNhdGlvbiBjb2RlCiAg
ICAgICAgICAgICByZXR1cm4gdXNlckNoYWxsZW5nZUF1dGgoKTsKICAgICAgICAgfQogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFFTdHJpbmcgZXJyPXNzaF9nZXRfZXJyb3IgKCBteV9zc2hfc2Vzc2lv
biApOwotICAgICAgICBhdXRoRXJyb3JzPDxlcnI7CisgICAgICAgIFFTdHJpbmcgZXJyID0gc3No
X2dldF9lcnJvcihteV9zc2hfc2Vzc2lvbik7CisgICAgICAgIGF1dGhFcnJvcnMgPDwgZXJyOwog
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwotCiB9CiAK
LQogYm9vbCBTc2hNYXN0ZXJDb25uZWN0aW9uOjp1c2VyQXV0aFdpdGhQYXNzKCkKIHsKICAgICBi
b29sIHJldCA9IGZhbHNlOwpAQCAtMTIwMywxMDcgKzEyMDIsMTE3IEBAIGJvb2wgU3NoTWFzdGVy
Q29ubmVjdGlvbjo6dXNlckF1dGhXaXRoUGFzcygpCiAKICAgICBpbnQgbWV0aG9kID0gc3NoX3Vz
ZXJhdXRoX2xpc3QobXlfc3NoX3Nlc3Npb24sIE5VTEwpOwogCi0gICAgaWYgKG1ldGhvZCAmIFNT
SF9BVVRIX01FVEhPRF9JTlRFUkFDVElWRSkgeworICAgIGlmIChtZXRob2QgJiBTU0hfQVVUSF9N
RVRIT0RfSU5URVJBQ1RJVkUpCisgICAgewogICAgICAgICB4MmdvRGVidWcgPDwgIkNoYWxsZW5n
ZSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0ZWQuIiA8PCBlbmRsOwogCiAgICAgICAgIGNoYWxsZW5n
ZUF1dGhQYXNzd29yZEFjY2VwdGVkID0gZmFsc2U7Ci0gICAgICAgIHJldCA9IHVzZXJDaGFsbGVu
Z2VBdXRoICgpOworICAgICAgICByZXQgPSB1c2VyQ2hhbGxlbmdlQXV0aCgpOwogCi0gICAgICAg
IGlmICghcmV0KSB7CisgICAgICAgIGlmICghcmV0KQorICAgICAgICB7CiAgICAgICAgICAgICB4
MmdvRGVidWcgPDwgIkNoYWxsZW5nZSBhdXRoZW50aWNhdGlvbiBmYWlsZWQuIiA8PCBlbmRsOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCFyZXQpIHsKKyAgICBpZiAoIXJldCkKKyAgICB7
CiAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiVHJ5aW5nIHBhc3N3b3JkIG1lY2hhbmlzbSBpZiBhdmFp
bGFibGUuIiA8PCBlbmRsOwogICAgIH0KIAotICAgIGlmICgoIXJldCkgJiYgKG1ldGhvZCAmIFNT
SF9BVVRIX01FVEhPRF9QQVNTV09SRCkpIHsKKyAgICBpZiAoKCFyZXQpICYmIChtZXRob2QgJiBT
U0hfQVVUSF9NRVRIT0RfUEFTU1dPUkQpKQorICAgIHsKICAgICAgICAgeDJnb0RlYnVnIDw8ICJQ
YXNzd29yZCBtZWNoYW5pc20gYXZhaWxhYmxlLiBDb250aW51aW5nLiIgPDwgZW5kbDsKIAogICAg
ICAgICBRU3RyaW5nIGF1dGhfcGFzc3dvcmQgPSBwYXNzOwogCi0gICAgICAgIGlmIChhdXRoX3Bh
c3N3b3JkLmlzRW1wdHkgKCkpIHsKKyAgICAgICAgaWYgKGF1dGhfcGFzc3dvcmQuaXNFbXB0eSgp
KQorICAgICAgICB7CiAgICAgICAgICAgICBrZXlQaHJhc2VSZWFkeSA9IGZhbHNlOwotICAgICAg
ICAgICAgZW1pdCBuZWVkUGFzc1BocmFzZSAodGhpcywgUEFTU1BIUkFTRV9QQVNTV09SRCk7Cisg
ICAgICAgICAgICBlbWl0IG5lZWRQYXNzUGhyYXNlKHRoaXMsIFBBU1NQSFJBU0VfUEFTU1dPUkQp
OwogCi0gICAgICAgICAgICBmb3IgKGJvb2wgcmVhZHkgPSBmYWxzZTsgIXJlYWR5OykgewotICAg
ICAgICAgICAgICAgIHRoaXMtPnVzbGVlcCAoMjAwKTsKKyAgICAgICAgICAgIGZvciAoYm9vbCBy
ZWFkeSA9IGZhbHNlOyAhcmVhZHk7KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRo
aXMtPnVzbGVlcCgyMDApOwogCi0gICAgICAgICAgICAgICAga2V5UGhyYXNlTXV0ZXgubG9jayAo
KTsKKyAgICAgICAgICAgICAgICBrZXlQaHJhc2VNdXRleC5sb2NrKCk7CiAgICAgICAgICAgICAg
ICAgcmVhZHkgPSBrZXlQaHJhc2VSZWFkeTsKLSAgICAgICAgICAgICAgICBrZXlQaHJhc2VNdXRl
eC51bmxvY2sgKCk7CisgICAgICAgICAgICAgICAga2V5UGhyYXNlTXV0ZXgudW5sb2NrKCk7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChrZXlQaHJhc2UuaXNOdWxsICgpKSB7Cisg
ICAgICAgICAgICBpZiAoa2V5UGhyYXNlLmlzTnVsbCgpKQorICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIGF1dGhFcnJvcnMgPDwgIk5vIHBhc3N3b3JkIHByb3ZpZGVkLiI7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIChyZXQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYXV0aF9w
YXNzd29yZCA9IGtleVBocmFzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBp
bnQgcmMgPSBzc2hfdXNlcmF1dGhfcGFzc3dvcmQgKG15X3NzaF9zZXNzaW9uLCBOVUxMLCBhdXRo
X3Bhc3N3b3JkLnRvTGF0aW4xICgpKTsKLSAgICAgICAgaWYgKCByYyAhPSBTU0hfQVVUSF9TVUND
RVNTICkKKyAgICAgICAgaW50IHJjID0gc3NoX3VzZXJhdXRoX3Bhc3N3b3JkKG15X3NzaF9zZXNz
aW9uLCBOVUxMLCBhdXRoX3Bhc3N3b3JkLnRvTGF0aW4xKCkpOworICAgICAgICBpZiAocmMgIT0g
U1NIX0FVVEhfU1VDQ0VTUykKICAgICAgICAgewotICAgICAgICAgICAgUVN0cmluZyBlcnI9c3No
X2dldF9lcnJvciAoIG15X3NzaF9zZXNzaW9uICk7Ci0gICAgICAgICAgICBhdXRoRXJyb3JzPDxl
cnI7CisgICAgICAgICAgICBRU3RyaW5nIGVyciA9IHNzaF9nZXRfZXJyb3IobXlfc3NoX3Nlc3Np
b24pOworICAgICAgICAgICAgYXV0aEVycm9ycyA8PCBlcnI7CiAgICAgICAgICAgICB4MmdvRGVi
dWcgPDwgIlBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIGZhaWxlZDogIiA8PCBlcnIgPDwgZW5kbDsK
ICAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgZWxzZQorICAgICAgICB7CiAgICAg
ICAgICAgICByZXQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCghcmV0KSAm
JiAobWV0aG9kICYgflNTSF9BVVRIX01FVEhPRF9QQVNTV09SRCkpIHsKKyAgICBpZiAoKCFyZXQp
ICYmICEobWV0aG9kICYgU1NIX0FVVEhfTUVUSE9EX1BBU1NXT1JEKSkKKyAgICB7CiAgICAgICAg
IC8qIEluIGNhc2UgcGFzc3dvcmQgYXV0aCBpcyBkaXNhYmxlZCwgbWFrZSBzdXJlIHRoZSBlcnJv
ciBtZXNzYWdlIGlzIG5vdCBlbXB0eS4gKi8KLSAgICAgICAgUVN0cmluZyBlcnIgPSBzc2hfZ2V0
X2Vycm9yIChteV9zc2hfc2Vzc2lvbik7CisgICAgICAgIFFTdHJpbmcgZXJyID0gc3NoX2dldF9l
cnJvcihteV9zc2hfc2Vzc2lvbik7CiAgICAgICAgIGF1dGhFcnJvcnMgPDwgZXJyOwogICAgICAg
ICB4MmdvRGVidWcgPDwgIlBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIG5vdCBhdmFpbGFibGU6ICIg
PDwgZXJyIDw8IGVuZGw7CiAgICAgfQogCi0gICAgcmV0dXJuIChyZXQpOworICAgIHJldHVybiBy
ZXQ7CiB9CiAKLQogYm9vbCBTc2hNYXN0ZXJDb25uZWN0aW9uOjp1c2VyQXV0aEF1dG8oKQogewot
ICAgIGludCByYyA9IHNzaF91c2VyYXV0aF9hdXRvcHVia2V5ICggbXlfc3NoX3Nlc3Npb24sICIi
ICk7Ci0gICAgaW50IGk9MDsKLSAgICB3aGlsZShyYyAhPSBTU0hfQVVUSF9TVUNDRVNTKQorICAg
IGludCByYyA9IHNzaF91c2VyYXV0aF9hdXRvcHVia2V5KG15X3NzaF9zZXNzaW9uLCAiIik7Cisg
ICAgaW50IGkgPSAwOworICAgIHdoaWxlIChyYyAhPSBTU0hfQVVUSF9TVUNDRVNTKQogICAgIHsK
LSAgICAgICAgaWYgKFNTSF9BVVRIX0RFTklFRCA9PSByYykgewotICAgICAgICAgIC8qIE5vIG5l
ZWQgdG8gY29udGludWUsIGFsbCBrZXlzIGhhdmUgYmVlbiByZWplY3RlZCBieSB0aGUgc2VydmVy
LiAqLwotICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoU1NIX0FVVEhfREVOSUVEID09IHJj
KQorICAgICAgICB7CisgICAgICAgICAgICAvKiBObyBuZWVkIHRvIGNvbnRpbnVlLCBhbGwga2V5
cyBoYXZlIGJlZW4gcmVqZWN0ZWQgYnkgdGhlIHNlcnZlci4gKi8KKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKICAgICAgICAgLyogVGhpcyBzZWN0aW9uIHNob3VsZCBvbmx5IGJlIGV4
ZWN1dGVkIGlmIHJjIGlzIFNTSF9BVVRIX0VSUk9SLiAqLwotICAgICAgICBrZXlQaHJhc2VSZWFk
eT1mYWxzZTsKKyAgICAgICAga2V5UGhyYXNlUmVhZHkgPSBmYWxzZTsKICAgICAgICAgZW1pdCBu
ZWVkUGFzc1BocmFzZSh0aGlzLCBQQVNTUEhSQVNFX1BSSVZLRVkpOwotICAgICAgICBmb3IoOzsp
CisgICAgICAgIGZvciAoOzspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgcmVhZHk9ZmFs
c2U7CisgICAgICAgICAgICBib29sIHJlYWR5ID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlzLT51
c2xlZXAoMjAwKTsKICAgICAgICAgICAgIGtleVBocmFzZU11dGV4LmxvY2soKTsKLSAgICAgICAg
ICAgIGlmKGtleVBocmFzZVJlYWR5KQotICAgICAgICAgICAgICAgIHJlYWR5PXRydWU7CisgICAg
ICAgICAgICBpZiAoa2V5UGhyYXNlUmVhZHkpCisgICAgICAgICAgICAgICAgcmVhZHkgPSB0cnVl
OwogICAgICAgICAgICAga2V5UGhyYXNlTXV0ZXgudW5sb2NrKCk7Ci0gICAgICAgICAgICBpZihy
ZWFkeSkKKyAgICAgICAgICAgIGlmIChyZWFkeSkKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBpZihrZXlQaHJhc2U9PVFTdHJpbmc6Om51bGwpCisgICAgICAgIGlm
IChrZXlQaHJhc2UgPT0gUVN0cmluZzo6bnVsbCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICByYyA9IHNzaF91c2VyYXV0aF9hdXRvcHVia2V5ICggbXlfc3NoX3Nlc3Npb24sIGtleVBocmFz
ZS50b0xhdGluMSgpICk7Ci0gICAgICAgIGlmKGkrKz09MikKKyAgICAgICAgcmMgPSBzc2hfdXNl
cmF1dGhfYXV0b3B1YmtleShteV9zc2hfc2Vzc2lvbiwga2V5UGhyYXNlLnRvTGF0aW4xKCkpOwor
ICAgICAgICBpZiAoaSsrID09IDIpCiAgICAgICAgIHsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKCByYyAhPSBTU0hfQVVUSF9TVUNDRVNTICkKKyAgICBp
ZiAocmMgIT0gU1NIX0FVVEhfU1VDQ0VTUykKICAgICB7Ci0gICAgICAgIFFTdHJpbmcgZXJyPXNz
aF9nZXRfZXJyb3IgKCBteV9zc2hfc2Vzc2lvbiApOwotICAgICAgICBhdXRoRXJyb3JzPDxlcnI7
CisgICAgICAgIFFTdHJpbmcgZXJyID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lvbik7Cisg
ICAgICAgIGF1dGhFcnJvcnMgPDwgZXJyOwogICAgICAgICB4MmdvRGVidWcgPDwgInVzZXJBdXRo
QXV0byBmYWlsZWQ6IiA8PCBlcnIgPDwgIiAoY29kZSAiIDw8IHJjIDw8ICIpIiA8PCBlbmRsOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTMxMywzNyArMTMyMiwzNiBAQCBib29s
IFNzaE1hc3RlckNvbm5lY3Rpb246OnVzZXJBdXRoQXV0bygpCiB2b2lkIFNzaE1hc3RlckNvbm5l
Y3Rpb246OnNldEtleVBocmFzZShRU3RyaW5nIHBocmFzZSkKIHsKICAgICBrZXlQaHJhc2VNdXRl
eC5sb2NrKCk7Ci0gICAga2V5UGhyYXNlPXBocmFzZTsKLSAgICBrZXlQaHJhc2VSZWFkeT10cnVl
OworICAgIGtleVBocmFzZSA9IHBocmFzZTsKKyAgICBrZXlQaHJhc2VSZWFkeSA9IHRydWU7CiAg
ICAga2V5UGhyYXNlTXV0ZXgudW5sb2NrKCk7CiB9CiAKLQogYm9vbCBTc2hNYXN0ZXJDb25uZWN0
aW9uOjp1c2VyQXV0aFdpdGhLZXkoKQogewotICAgIHgyZ29EZWJ1Zzw8IlRyeWluZyB0byBhdXRo
ZW50aWNhdGUgdXNlciB3aXRoIHByaXZhdGUga2V5LiI7Ci0gICAgUVN0cmluZyBrZXlOYW1lPWtl
eTsKLSAgICBib29sIGF1dG9SZW1vdmU9ZmFsc2U7Ci0gICAgaWYgKCBrZXkuaW5kZXhPZiAoICJQ
UklWQVRFIEtFWSIgKSAhPS0xICkKKyAgICB4MmdvRGVidWcgPDwgIlRyeWluZyB0byBhdXRoZW50
aWNhdGUgdXNlciB3aXRoIHByaXZhdGUga2V5LiI7CisgICAgUVN0cmluZyBrZXlOYW1lID0ga2V5
OworICAgIGJvb2wgYXV0b1JlbW92ZSA9IGZhbHNlOworICAgIGlmIChrZXkuaW5kZXhPZigiUFJJ
VkFURSBLRVkiKSAhPSAtMSkKICAgICB7CiAgICAgICAgIFFEaXIgZHI7Ci0gICAgICAgIFFTdHJp
bmcga2V5UGF0aD1tYWluV25kLT5nZXRIb21lRGlyZWN0b3J5KCkgKyIvLngyZ28vc3NoL2dlbiI7
Ci0gICAgICAgIGRyLm1rcGF0aCAoIGtleVBhdGggKTsKLSAgICAgICAgUVRlbXBvcmFyeUZpbGUg
ZmwgKCBrZXlQYXRoKyIva2V5IiApOworICAgICAgICBRU3RyaW5nIGtleVBhdGggPSBtYWluV25k
LT5nZXRIb21lRGlyZWN0b3J5KCkgKyAiLy54MmdvL3NzaC9nZW4iOworICAgICAgICBkci5ta3Bh
dGgoa2V5UGF0aCk7CisgICAgICAgIFFUZW1wb3JhcnlGaWxlIGZsKGtleVBhdGggKyAiL2tleSIp
OwogICAgICAgICBmbC5vcGVuKCk7Ci0gICAgICAgIGtleU5hbWU9ZmwuZmlsZU5hbWUoKTsKLSAg
ICAgICAgZmwuc2V0QXV0b1JlbW92ZSAoIGZhbHNlICk7Ci0gICAgICAgIFFUZXh0U3RyZWFtIG91
dCAoICZmbCApOwotICAgICAgICBvdXQ8PGtleTsKKyAgICAgICAga2V5TmFtZSA9IGZsLmZpbGVO
YW1lKCk7CisgICAgICAgIGZsLnNldEF1dG9SZW1vdmUoZmFsc2UpOworICAgICAgICBRVGV4dFN0
cmVhbSBvdXQoJmZsKTsKKyAgICAgICAgb3V0IDw8IGtleTsKICAgICAgICAgZmwuY2xvc2UoKTsK
LSAgICAgICAgYXV0b1JlbW92ZT10cnVlOwotICAgICAgICB4MmdvRGVidWc8PCJUZW1wb3Jhcmls
eSBzYXZlZCBrZXkgaW4gIjw8a2V5TmFtZTsKKyAgICAgICAgYXV0b1JlbW92ZSA9IHRydWU7Cisg
ICAgICAgIHgyZ29EZWJ1ZyA8PCAiVGVtcG9yYXJpbHkgc2F2ZWQga2V5IGluICIgPDwga2V5TmFt
ZTsKICAgICB9CiAKLSAgICBRQnl0ZUFycmF5IHRtcF9iYSA9IGtleU5hbWUudG9Mb2NhbDhCaXQg
KCk7CisgICAgUUJ5dGVBcnJheSB0bXBfYmEgPSBrZXlOYW1lLnRvTG9jYWw4Qml0KCk7CiAKLSNp
ZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UICgwLCA2LCAwKQotICAgIHNz
aF9rZXkgcHJpdl9rZXkgPSB7IDAgfTsKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZF
UlNJT05fSU5UKDAsIDYsIDApCisgICAgc3NoX2tleSBwcml2X2tleSA9IHswfTsKIAogICAgIC8q
CiAgICAgICogUGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgYXMgYSBwYXNzcGhyYXNlIHBhcmFtZXRl
ciBpcyBhIHdvcmthcm91bmQgZm9yIGluY29uc2lzdGVudApAQCAtMTM1NiwxNjYgKzEzNjQsMTc1
IEBAIGJvb2wgU3NoTWFzdGVyQ29ubmVjdGlvbjo6dXNlckF1dGhXaXRoS2V5KCkKICAgICAgKiBw
YXNzcGhyYXNlIG9uIGEgdGVybWluYWwgKGFuZCB0aGUgY2xpZW50IG5vdCByZWFjdGluZyB0byBh
bnkgaW5wdXQgd2hpbGUgdGhpcwogICAgICAqIGhhcHBlbnMpLCBzbyB3b3JrIGFyb3VuZCB0aGlz
IGluY29uc2lzdGVuY3kgYnkgcHJvdmlkaW5nIGFuIGVtcHR5IHBhc3NwaHJhc2UuCiAgICAgICov
Ci0gICAgaW50IHJjID0gc3NoX3BraV9pbXBvcnRfcHJpdmtleV9maWxlICh0bXBfYmEuZGF0YSAo
KSwgIiIsIE5VTEwsIE5VTEwsICZwcml2X2tleSk7CisgICAgaW50IHJjID0gc3NoX3BraV9pbXBv
cnRfcHJpdmtleV9maWxlKHRtcF9iYS5kYXRhKCksICIiLCBOVUxMLCBOVUxMLCAmcHJpdl9rZXkp
OwogCi0gICAgaWYgKFNTSF9FT0YgPT0gcmMpIHsKKyAgICBpZiAoU1NIX0VPRiA9PSByYykKKyAg
ICB7CiAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiRmFpbGVkIHRvIGdldCBwcml2YXRlIGtleSBmcm9t
ICIgPDwga2V5TmFtZSA8PCAiOyBmaWxlIGRvZXMgbm90IGV4aXN0LiI7CiAKLSAgICAgICAgc3No
X2tleV9mcmVlIChwcml2X2tleSk7CisgICAgICAgIHNzaF9rZXlfZnJlZShwcml2X2tleSk7CiAK
ICAgICAgICAgcmV0dXJuIChmYWxzZSk7CiAgICAgfQotICAgIGVsc2UgaWYgKFNTSF9PSyAhPSBy
YykgeworICAgIGVsc2UgaWYgKFNTSF9PSyAhPSByYykKKyAgICB7CiAgICAgICAgIHgyZ29EZWJ1
ZyA8PCAiRmFpbGVkIHRvIGdldCBwcml2YXRlIGtleSBmcm9tICIgPDwga2V5TmFtZSA8PCAiOyB0
cnlpbmcgdG8gcXVlcnkgcGFzc3BocmFzZS4iOwogCi0gICAgICAgIHNzaF9rZXlfZnJlZSAocHJp
dl9rZXkpOworICAgICAgICBzc2hfa2V5X2ZyZWUocHJpdl9rZXkpOwogICAgICAgICBwcml2X2tl
eSA9IE5VTEw7CiAgICAgfQogI2Vsc2UKICAgICAvKiBUaGlzIGlzIFRPQ1RVLCBidXQgZm9yY2Vk
IHVwb24gdXMgYnkgbGlic3NoJ3MgbGVnYWN5IGZ1bmN0aW9uLiAqLwogICAgIHsKLSAgICAgIFFG
aWxlIHRtcF9maWxlIChrZXlOYW1lKTsKLSAgICAgIGlmICh0bXBfZmlsZS5vcGVuIChRSU9EZXZp
Y2U6OlJlYWRPbmx5KSkgewotICAgICAgICB0bXBfZmlsZS5jbG9zZSAoKTsKLSAgICAgIH0KLSAg
ICAgIGVsc2UgewotICAgICAgICAvKiBEb24ndCBwYXNzIGludmFsaWQgZmlsZXMgdG8gcHJpdmF0
ZWtleV9mcm9tX2ZpbGUgKCkgLSBpdCBjcmFzaGVzIGluIHRoaXMgY2FzZS4gKi8KLSAgICAgICAg
cmV0dXJuIChmYWxzZSk7Ci0gICAgICB9CisgICAgICAgIFFGaWxlIHRtcF9maWxlKGtleU5hbWUp
OworICAgICAgICBpZiAodG1wX2ZpbGUub3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgdG1wX2ZpbGUuY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIERvbid0IHBhc3MgaW52YWxpZCBmaWxlcyB0
byBwcml2YXRla2V5X2Zyb21fZmlsZSAoKSAtIGl0IGNyYXNoZXMgaW4gdGhpcyBjYXNlLiAqLwor
ICAgICAgICAgICAgcmV0dXJuIChmYWxzZSk7CisgICAgICAgIH0KICAgICB9Ci0gICAgc3NoX3By
aXZhdGVfa2V5IHByaXZfa2V5ID0gcHJpdmF0ZWtleV9mcm9tX2ZpbGUgKG15X3NzaF9zZXNzaW9u
LCB0bXBfYmEuZGF0YSAoKSwgMCwgTlVMTCk7CisgICAgc3NoX3ByaXZhdGVfa2V5IHByaXZfa2V5
ID0gcHJpdmF0ZWtleV9mcm9tX2ZpbGUobXlfc3NoX3Nlc3Npb24sIHRtcF9iYS5kYXRhKCksIDAs
IE5VTEwpOwogI2VuZGlmCiAKLSAgICBpbnQgaT0wOwotI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+
PSBTU0hfVkVSU0lPTl9JTlQgKDAsIDYsIDApCisgICAgaW50IGkgPSAwOworI2lmIExJQlNTSF9W
RVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCwgNiwgMCkKICAgICB3aGlsZSAoU1NIX09L
ICE9IHJjKQogI2Vsc2UKICAgICB3aGlsZSAoIXByaXZfa2V5KQogI2VuZGlmCiAgICAgewotICAg
ICAgICBrZXlQaHJhc2VSZWFkeT1mYWxzZTsKKyAgICAgICAga2V5UGhyYXNlUmVhZHkgPSBmYWxz
ZTsKICAgICAgICAgZW1pdCBuZWVkUGFzc1BocmFzZSh0aGlzLCBQQVNTUEhSQVNFX1BSSVZLRVkp
OwotICAgICAgICBmb3IoOzspCisgICAgICAgIGZvciAoOzspCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGJvb2wgcmVhZHk9ZmFsc2U7CisgICAgICAgICAgICBib29sIHJlYWR5ID0gZmFsc2U7CiAg
ICAgICAgICAgICB0aGlzLT51c2xlZXAoMjAwKTsKICAgICAgICAgICAgIGtleVBocmFzZU11dGV4
LmxvY2soKTsKLSAgICAgICAgICAgIGlmKGtleVBocmFzZVJlYWR5KQotICAgICAgICAgICAgICAg
IHJlYWR5PXRydWU7CisgICAgICAgICAgICBpZiAoa2V5UGhyYXNlUmVhZHkpCisgICAgICAgICAg
ICAgICAgcmVhZHkgPSB0cnVlOwogICAgICAgICAgICAga2V5UGhyYXNlTXV0ZXgudW5sb2NrKCk7
Ci0gICAgICAgICAgICBpZihyZWFkeSkKKyAgICAgICAgICAgIGlmIChyZWFkeSkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZihrZXlQaHJhc2U9PVFTdHJpbmc6
Om51bGwpCisgICAgICAgIGlmIChrZXlQaHJhc2UgPT0gUVN0cmluZzo6bnVsbCkKICAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgIFFCeXRlQXJyYXkgdG1wX2JhX3Bhc3NwaHJhc2UgPSBrZXlQ
aHJhc2UudG9Mb2NhbDhCaXQgKCk7CisgICAgICAgIFFCeXRlQXJyYXkgdG1wX2JhX3Bhc3NwaHJh
c2UgPSBrZXlQaHJhc2UudG9Mb2NhbDhCaXQoKTsKIAotI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+
PSBTU0hfVkVSU0lPTl9JTlQgKDAsIDYsIDApCi0gICAgICAgIHJjID0gc3NoX3BraV9pbXBvcnRf
cHJpdmtleV9maWxlICh0bXBfYmEuZGF0YSAoKSwgdG1wX2JhX3Bhc3NwaHJhc2UuZGF0YSAoKSwg
TlVMTCwgTlVMTCwgJnByaXZfa2V5KTsKKyNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZF
UlNJT05fSU5UKDAsIDYsIDApCisgICAgICAgIHJjID0gc3NoX3BraV9pbXBvcnRfcHJpdmtleV9m
aWxlKHRtcF9iYS5kYXRhKCksIHRtcF9iYV9wYXNzcGhyYXNlLmRhdGEoKSwgTlVMTCwgTlVMTCwg
JnByaXZfa2V5KTsKIAotICAgICAgICBpZiAoU1NIX09LICE9IHJjKSB7Ci0gICAgICAgICAgICBz
c2hfa2V5X2ZyZWUgKHByaXZfa2V5KTsKKyAgICAgICAgaWYgKFNTSF9PSyAhPSByYykKKyAgICAg
ICAgeworICAgICAgICAgICAgc3NoX2tleV9mcmVlKHByaXZfa2V5KTsKICAgICAgICAgICAgIHBy
aXZfa2V5ID0gTlVMTDsKICAgICAgICAgfQogI2Vsc2UKLSAgICAgICAgcHJpdl9rZXkgPSBwcml2
YXRla2V5X2Zyb21fZmlsZSAobXlfc3NoX3Nlc3Npb24sIHRtcF9iYS5kYXRhICgpLCAwLCB0bXBf
YmFfcGFzc3BocmFzZS5kYXRhICgpKTsKKyAgICAgICAgcHJpdl9rZXkgPSBwcml2YXRla2V5X2Zy
b21fZmlsZShteV9zc2hfc2Vzc2lvbiwgdG1wX2JhLmRhdGEoKSwgMCwgdG1wX2JhX3Bhc3NwaHJh
c2UuZGF0YSgpKTsKICNlbmRpZgogCi0gICAgICAgIGlmKGkrKz09MikKKyAgICAgICAgaWYgKGkr
KyA9PSAyKQogICAgICAgICB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0K
LSNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UICgwLCA2LCAwKQorI2lm
IExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCwgNiwgMCkKICAgICBpZiAo
U1NIX09LICE9IHJjKQogI2Vsc2UKICAgICBpZiAoIXByaXZfa2V5KQogI2VuZGlmCiAgICAgewot
ICAgICAgICB4MmdvRGVidWc8PCJGYWlsZWQgdG8gZ2V0IHByaXZhdGUga2V5IGZyb20gIjw8a2V5
TmFtZTsKLSAgICAgICAgaWYgKCBhdXRvUmVtb3ZlICkKLSAgICAgICAgICAgIFFGaWxlOjpyZW1v
dmUgKCBrZXlOYW1lICk7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCAiRmFpbGVkIHRvIGdldCBwcml2
YXRlIGtleSBmcm9tICIgPDwga2V5TmFtZSA8PCBlbmRsOworICAgICAgICBpZiAoYXV0b1JlbW92
ZSkKKyAgICAgICAgICAgIFFGaWxlOjpyZW1vdmUoa2V5TmFtZSk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5U
ICgwLCA2LCAwKQotICAgIHNzaF9rZXkgcHViX2tleSA9IHsgMCB9OworI2lmIExJQlNTSF9WRVJT
SU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCwgNiwgMCkKKyAgICBzc2hfa2V5IHB1Yl9rZXkg
PSB7MH07CiAKLSAgICByYyA9IHNzaF9wa2lfZXhwb3J0X3ByaXZrZXlfdG9fcHVia2V5IChwcml2
X2tleSwgJnB1Yl9rZXkpOworICAgIHJjID0gc3NoX3BraV9leHBvcnRfcHJpdmtleV90b19wdWJr
ZXkocHJpdl9rZXksICZwdWJfa2V5KTsKICNlbHNlCi0gICAgc3NoX3B1YmxpY19rZXkgcHViX2tl
eSA9IHB1YmxpY2tleV9mcm9tX3ByaXZhdGVrZXkgKHByaXZfa2V5KTsKKyAgICBzc2hfcHVibGlj
X2tleSBwdWJfa2V5ID0gcHVibGlja2V5X2Zyb21fcHJpdmF0ZWtleShwcml2X2tleSk7CiAjZW5k
aWYKIAotI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQgKDAsIDYsIDAp
CisjaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCgwLCA2LCAwKQogICAg
IGlmIChTU0hfT0sgIT0gcmMpCiAjZWxzZQogICAgIGlmICghcHViX2tleSkKICNlbmRpZgogICAg
IHsKLSAgICAgICAgeDJnb0RlYnVnPDwiRmFpbGVkIHRvIGdldCBwdWJsaWMga2V5IGZyb20gcHJp
dmF0ZSBrZXkuIjsKLSNpZiBMSUJTU0hfVkVSU0lPTl9JTlQgPj0gU1NIX1ZFUlNJT05fSU5UICgw
LCA2LCAwKQotICAgICAgICBzc2hfa2V5X2ZyZWUgKHByaXZfa2V5KTsKKyAgICAgICAgeDJnb0Rl
YnVnIDw8ICJGYWlsZWQgdG8gZ2V0IHB1YmxpYyBrZXkgZnJvbSBwcml2YXRlIGtleS4iIDw8IGVu
ZGw7CisjaWYgTElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCgwLCA2LCAwKQor
ICAgICAgICBzc2hfa2V5X2ZyZWUocHJpdl9rZXkpOwogICAgICAgICBwcml2X2tleSA9IE5VTEw7
CiAKLSAgICAgICAgc3NoX2tleV9mcmVlIChwdWJfa2V5KTsKKyAgICAgICAgc3NoX2tleV9mcmVl
KHB1Yl9rZXkpOwogICAgICAgICBwdWJfa2V5ID0gTlVMTDsKICNlbHNlCiAgICAgICAgIHByaXZh
dGVrZXlfZnJlZShwcml2X2tleSk7CiAjZW5kaWYKLSAgICAgICAgaWYgKCBhdXRvUmVtb3ZlICkK
LSAgICAgICAgICAgIFFGaWxlOjpyZW1vdmUgKCBrZXlOYW1lICk7CisgICAgICAgIGlmIChhdXRv
UmVtb3ZlKQorICAgICAgICAgICAgUUZpbGU6OnJlbW92ZShrZXlOYW1lKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotI2lmIExJQlNTSF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lP
Tl9JTlQgKDAsIDYsIDApCi0gICAgZG8gewotICAgICAgICByYyA9IHNzaF91c2VyYXV0aF90cnlf
cHVibGlja2V5IChteV9zc2hfc2Vzc2lvbiwgTlVMTCwgcHViX2tleSk7CisjaWYgTElCU1NIX1ZF
UlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCgwLCA2LCAwKQorICAgIGRvCisgICAgeworICAg
ICAgICByYyA9IHNzaF91c2VyYXV0aF90cnlfcHVibGlja2V5KG15X3NzaF9zZXNzaW9uLCBOVUxM
LCBwdWJfa2V5KTsKICAgICB9IHdoaWxlIChTU0hfQVVUSF9BR0FJTiA9PSByYyk7CiAKLSAgICBz
c2hfa2V5X2ZyZWUgKHB1Yl9rZXkpOworICAgIHNzaF9rZXlfZnJlZShwdWJfa2V5KTsKICAgICBw
dWJfa2V5ID0gTlVMTDsKIAogICAgIC8qIEZJWE1FOiBoYW5kbGUgU1NIX0FVVEhfUEFSVElBTCBj
b3JyZWN0bHkhICovCi0gICAgaWYgKFNTSF9BVVRIX1NVQ0NFU1MgIT0gcmMpIHsKLSAgICAgICAg
eDJnb0RlYnVnIDw8ICJVbmFibGUgdG8gYXV0aGVudGljYXRlIHdpdGggcHVibGljIGtleS4iOwor
ICAgIGlmIChTU0hfQVVUSF9TVUNDRVNTICE9IHJjKQorICAgIHsKKyAgICAgICAgeDJnb0RlYnVn
IDw8ICJVbmFibGUgdG8gYXV0aGVudGljYXRlIHdpdGggcHVibGljIGtleS4iIDw8IGVuZGw7CiAK
LSAgICAgICAgc3NoX2tleV9mcmVlIChwcml2X2tleSk7CisgICAgICAgIHNzaF9rZXlfZnJlZShw
cml2X2tleSk7CiAgICAgICAgIHByaXZfa2V5ID0gTlVMTDsKIAotICAgICAgICBpZiAoYXV0b1Jl
bW92ZSkgewotICAgICAgICAgICAgUUZpbGU6OnJlbW92ZSAoa2V5TmFtZSk7CisgICAgICAgIGlm
IChhdXRvUmVtb3ZlKQorICAgICAgICB7CisgICAgICAgICAgICBRRmlsZTo6cmVtb3ZlKGtleU5h
bWUpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIChmYWxzZSk7CiAgICAgfQogCi0gICAg
ZG8gewotICAgICAgICByYyA9IHNzaF91c2VyYXV0aF9wdWJsaWNrZXkgKG15X3NzaF9zZXNzaW9u
LCBOVUxMLCBwcml2X2tleSk7CisgICAgZG8KKyAgICB7CisgICAgICAgIHJjID0gc3NoX3VzZXJh
dXRoX3B1YmxpY2tleShteV9zc2hfc2Vzc2lvbiwgTlVMTCwgcHJpdl9rZXkpOwogICAgIH0gd2hp
bGUgKFNTSF9BVVRIX0FHQUlOID09IHJjKTsKIAotICAgIHNzaF9rZXlfZnJlZSAocHJpdl9rZXkp
OworICAgIHNzaF9rZXlfZnJlZShwcml2X2tleSk7CiAgICAgcHJpdl9rZXkgPSBOVUxMOwogI2Vs
c2UKLSAgICBzc2hfc3RyaW5nIHB1YmtleVN0cj1wdWJsaWNrZXlfdG9fc3RyaW5nKHB1Yl9rZXkp
OworICAgIHNzaF9zdHJpbmcgcHVia2V5U3RyID0gcHVibGlja2V5X3RvX3N0cmluZyhwdWJfa2V5
KTsKICAgICBwdWJsaWNrZXlfZnJlZShwdWJfa2V5KTsKLSAgICBpbnQgcmM9c3NoX3VzZXJhdXRo
X3B1YmtleShteV9zc2hfc2Vzc2lvbiwgTlVMTCwgcHVia2V5U3RyLCBwcml2X2tleSk7CisgICAg
aW50IHJjID0gc3NoX3VzZXJhdXRoX3B1YmtleShteV9zc2hfc2Vzc2lvbiwgTlVMTCwgcHVia2V5
U3RyLCBwcml2X2tleSk7CiAgICAgcHJpdmF0ZWtleV9mcmVlKHByaXZfa2V5KTsKICAgICBzc2hf
c3RyaW5nX2ZyZWUocHVia2V5U3RyKTsKICNlbmRpZgogCi0gICAgeDJnb0RlYnVnPDwiQXV0aGVu
dGljYXRpbmcgd2l0aCBrZXk6ICI8PHJjPDxlbmRsOworICAgIHgyZ29EZWJ1ZyA8PCAiQXV0aGVu
dGljYXRpbmcgd2l0aCBrZXk6ICIgPDwgcmMgPDwgZW5kbDsKIAotICAgIGlmICggYXV0b1JlbW92
ZSApCi0gICAgICAgIFFGaWxlOjpyZW1vdmUgKCBrZXlOYW1lICk7CisgICAgaWYgKGF1dG9SZW1v
dmUpCisgICAgICAgIFFGaWxlOjpyZW1vdmUoa2V5TmFtZSk7CiAKICAgICAvKiBGSVhNRTogaGFu
ZGxlIFNTSF9BVVRIX1BBUlRJQUwgY29ycmVjdGx5ISAqLwotICAgIGlmICggcmMgIT0gU1NIX0FV
VEhfU1VDQ0VTUyApCisgICAgaWYgKHJjICE9IFNTSF9BVVRIX1NVQ0NFU1MpCiAgICAgewotICAg
ICAgICBRU3RyaW5nIGVycj1zc2hfZ2V0X2Vycm9yICggbXlfc3NoX3Nlc3Npb24gKTsKLSAgICAg
ICAgYXV0aEVycm9yczw8ZXJyOworICAgICAgICBRU3RyaW5nIGVyciA9IHNzaF9nZXRfZXJyb3Io
bXlfc3NoX3Nlc3Npb24pOworICAgICAgICBhdXRoRXJyb3JzIDw8IGVycjsKIAotICAgICAgICB4
MmdvRGVidWc8PCJ1c2VyQXV0aFdpdGhLZXkgZmFpbGVkOiIgPDxlcnI8PGVuZGw7CisgICAgICAg
IHgyZ29EZWJ1ZyA8PCAidXNlckF1dGhXaXRoS2V5IGZhaWxlZDoiIDw8IGVyciA8PCBlbmRsOwog
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xNTU2LDE0ICsxNTczLDE3IEBAIGJv
b2wgU3NoTWFzdGVyQ29ubmVjdGlvbjo6dXNlckF1dGhLcmIoKQogICAgIGxvY2FsX2NtZCA9ICJz
c2giOwogCiAgICAgLyogS2VyYmVyb3Mgb3B0aW9ucy4gKi8KLSAgICBsb2NhbF9hcmdzIDw8ICIt
byIgPDwgIkdTU0FwaUF1dGhlbnRpY2F0aW9uPXllcyIKLSAgICAgICAgICAgICAgIDw8ICItbyIg
PDwgIlBhc3N3b3JkQXV0aGVudGljYXRpb249bm8iCi0gICAgICAgICAgICAgICA8PCAiLW8iIDw8
ICJQdWJrZXlBdXRoZW50aWNhdGlvbj1ubyI7CisgICAgbG9jYWxfYXJncyA8PCAiLW8iCisgICAg
ICAgICAgICAgICA8PCAiR1NTQXBpQXV0aGVudGljYXRpb249eWVzIgorICAgICAgICAgICAgICAg
PDwgIi1vIgorICAgICAgICAgICAgICAgPDwgIlBhc3N3b3JkQXV0aGVudGljYXRpb249bm8iCisg
ICAgICAgICAgICAgICA8PCAiLW8iCisgICAgICAgICAgICAgICA8PCAiUHVia2V5QXV0aGVudGlj
YXRpb249bm8iOwogCiAgICAgLyogUG9ydCBvcHRpb24uIE11c3QgYmUgdGhlIGxhc3Qgb25lIGFk
ZGVkISAqLwogICAgIGxvY2FsX2FyZ3MgPDwgIi1wIjsKICNlbmRpZgotICAgIGxvY2FsX2FyZ3Mg
PDwgUVN0cmluZzo6bnVtYmVyIChwb3J0KQorICAgIGxvY2FsX2FyZ3MgPDwgUVN0cmluZzo6bnVt
YmVyKHBvcnQpCiAgICAgICAgICAgICAgICA8PCAiLWwiIDw8IHVzZXIKICAgICAgICAgICAgICAg
IDw8IGhvc3Q7CiAKQEAgLTE1NzYsMTI1ICsxNTk2LDEyMyBAQCBib29sIFNzaE1hc3RlckNvbm5l
Y3Rpb246OnVzZXJBdXRoS3JiKCkKICAgICAgKi8KICAgICBsb2NhbF9hcmdzIDw8IHNoY21kOwog
Ci0gICAgeDJnb0RlYnVnIDw8ICJTdGFydGluZyBzc2g6IiA8PCBsb2NhbF9jbWQgPDwgIiAiIDw8
IGxvY2FsX2FyZ3Muam9pbiAoIiAiKSA8PCBlbmRsOwotICAgIHNzaC5zdGFydCAobG9jYWxfY21k
LCBsb2NhbF9hcmdzKTsKLQorICAgIHgyZ29EZWJ1ZyA8PCAiU3RhcnRpbmcgc3NoOiIgPDwgbG9j
YWxfY21kIDw8ICIgIiA8PCBsb2NhbF9hcmdzLmpvaW4oIiAiKSA8PCBlbmRsOworICAgIHNzaC5z
dGFydChsb2NhbF9jbWQsIGxvY2FsX2FyZ3MpOwogCiAgICAgaWYgKCFzc2gud2FpdEZvclN0YXJ0
ZWQoNTAwMCkpCiAgICAgewotICAgICAgICBzc2hQcm9jRXJyU3RyaW5nPXNzaC5lcnJvclN0cmlu
ZygpOwotICAgICAgICBhdXRoRXJyb3JzPDxzc2hQcm9jRXJyU3RyaW5nOwotICAgICAgICB4Mmdv
RGVidWc8PCJTU0ggc3RhcnQgZmFpbGVkOiIgPDxzc2hQcm9jRXJyU3RyaW5nPDxlbmRsOworICAg
ICAgICBzc2hQcm9jRXJyU3RyaW5nID0gc3NoLmVycm9yU3RyaW5nKCk7CisgICAgICAgIGF1dGhF
cnJvcnMgPDwgc3NoUHJvY0VyclN0cmluZzsKKyAgICAgICAgeDJnb0RlYnVnIDw8ICJTU0ggc3Rh
cnQgZmFpbGVkOiIgPDwgc3NoUHJvY0VyclN0cmluZyA8PCBlbmRsOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIGlmICghc3NoLndhaXRGb3JGaW5pc2hlZCgyMDAwMCkpCiAgICAg
ewotICAgICAgICBzc2hQcm9jRXJyU3RyaW5nPXNzaC5lcnJvclN0cmluZygpOwotICAgICAgICBh
dXRoRXJyb3JzPDx0cigiRmFpbGVkIHRvIHN0YXJ0IFNTSCBjbGllbnQuIFBsZWFzZSBjaGVjayB5
b3VyIGluc3RhbGxhdGlvbiBhbmQgR1NTQXBpIGNvbmZpZ3VyYXRpb24uIik7Ci0gICAgICAgIGF1
dGhFcnJvcnM8PHNzaFByb2NFcnJTdHJpbmc7Ci0gICAgICAgIHgyZ29EZWJ1Zzw8IlNTSCBkaWQg
bm90IGZpbmlzaDoiIDw8c3NoUHJvY0VyclN0cmluZzw8ZW5kbDsKKyAgICAgICAgc3NoUHJvY0Vy
clN0cmluZyA9IHNzaC5lcnJvclN0cmluZygpOworICAgICAgICBhdXRoRXJyb3JzIDw8IHRyKCJG
YWlsZWQgdG8gc3RhcnQgU1NIIGNsaWVudC4gUGxlYXNlIGNoZWNrIHlvdXIgaW5zdGFsbGF0aW9u
IGFuZCBHU1NBcGkgY29uZmlndXJhdGlvbi4iKTsKKyAgICAgICAgYXV0aEVycm9ycyA8PCBzc2hQ
cm9jRXJyU3RyaW5nOworICAgICAgICB4MmdvRGVidWcgPDwgIlNTSCBkaWQgbm90IGZpbmlzaDoi
IDw8IHNzaFByb2NFcnJTdHJpbmcgPDwgZW5kbDsKIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQotICAgIFFTdHJpbmcgb3V0cD1zc2gucmVhZEFsbFN0YW5kYXJkT3V0cHV0KCk7Ci0gICAg
UVN0cmluZyBlcnI9c3NoLnJlYWRBbGxTdGFuZGFyZEVycm9yKCk7Ci0gICAgeDJnb0RlYnVnPDwi
U1NIIGV4aXRlZC4iOwotICAgIHgyZ29EZWJ1Zzw8InN0ZG91dDogIjw8b3V0cDw8ZW5kbDsKLSAg
ICB4MmdvRGVidWc8PCJzdGRlcnI6ICI8PGVycjw8ZW5kbDsKLSAgICB4MmdvRGVidWc8PCJFeGl0
IGNvZGU6ICI8PHNzaC5leGl0Q29kZSgpPDwiOyBzdGF0dXM6ICI8PHNzaC5leGl0U3RhdHVzKCk8
PGVuZGw7Ci0KLSAgICBRU3RyaW5nIGJlZ2luX21hcmtlciA9ICJYMkdPREFUQUJFR0lOOiIrdXVp
ZFN0cisiXG4iOwotICAgIFFTdHJpbmcgZW5kX21hcmtlciA9ICJYMkdPREFUQUVORDoiK3V1aWRT
dHIrIlxuIjsKLSAgICBpbnQgb3V0cHV0X2JlZ2luPW91dHAuaW5kZXhPZihiZWdpbl9tYXJrZXIp
ICsgYmVnaW5fbWFya2VyLmxlbmd0aCgpOwotICAgIGludCBvdXRwdXRfZW5kPW91dHAuaW5kZXhP
ZihlbmRfbWFya2VyKTsKLSAgICBvdXRwID0gb3V0cC5taWQob3V0cHV0X2JlZ2luLCBvdXRwdXRf
ZW5kLW91dHB1dF9iZWdpbik7Ci0gICAgb3V0cC5yZXBsYWNlKCJcbiIsIiIpOwotCi0gICAgaWYg
KHNzaC5leGl0Q29kZSgpID09IDAgJiYgc3NoLmV4aXRTdGF0dXMoKSA9PSAwICYmIG91dHA9PSB1
c2VyKQorICAgIFFTdHJpbmcgb3V0cCA9IHNzaC5yZWFkQWxsU3RhbmRhcmRPdXRwdXQoKTsKKyAg
ICBRU3RyaW5nIGVyciA9IHNzaC5yZWFkQWxsU3RhbmRhcmRFcnJvcigpOworICAgIHgyZ29EZWJ1
ZyA8PCAiU1NIIGV4aXRlZC4iOworICAgIHgyZ29EZWJ1ZyA8PCAic3Rkb3V0OiAiIDw8IG91dHAg
PDwgZW5kbDsKKyAgICB4MmdvRGVidWcgPDwgInN0ZGVycjogIiA8PCBlcnIgPDwgZW5kbDsKKyAg
ICB4MmdvRGVidWcgPDwgIkV4aXQgY29kZTogIiA8PCBzc2guZXhpdENvZGUoKSA8PCAiOyBzdGF0
dXM6ICIgPDwgc3NoLmV4aXRTdGF0dXMoKSA8PCBlbmRsOworCisgICAgUVN0cmluZyBiZWdpbl9t
YXJrZXIgPSAiWDJHT0RBVEFCRUdJTjoiICsgdXVpZFN0ciArICJcbiI7CisgICAgUVN0cmluZyBl
bmRfbWFya2VyID0gIlgyR09EQVRBRU5EOiIgKyB1dWlkU3RyICsgIlxuIjsKKyAgICBpbnQgb3V0
cHV0X2JlZ2luID0gb3V0cC5pbmRleE9mKGJlZ2luX21hcmtlcikgKyBiZWdpbl9tYXJrZXIubGVu
Z3RoKCk7CisgICAgaW50IG91dHB1dF9lbmQgPSBvdXRwLmluZGV4T2YoZW5kX21hcmtlcik7Cisg
ICAgb3V0cCA9IG91dHAubWlkKG91dHB1dF9iZWdpbiwgb3V0cHV0X2VuZCAtIG91dHB1dF9iZWdp
bik7CisgICAgb3V0cC5yZXBsYWNlKCJcbiIsICIiKTsKKworICAgIGlmIChzc2guZXhpdENvZGUo
KSA9PSAwICYmIHNzaC5leGl0U3RhdHVzKCkgPT0gMCAmJiBvdXRwID09IHVzZXIpCiAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIGF1dGhFcnJvcnM8PHRyKCJDaGVjayB5b3VyIEdTU0FwaSBjb25m
aWd1cmF0aW9uIG9yIGNob29zZSBhbm90aGVyIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4iKTsKKyAg
ICBhdXRoRXJyb3JzIDw8IHRyKCJDaGVjayB5b3VyIEdTU0FwaSBjb25maWd1cmF0aW9uIG9yIGNo
b29zZSBhbm90aGVyIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4iKTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLQogdm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjppbnRlcmFjdGlvblRleHRFbnRlcihR
U3RyaW5nIHRleHQpCiB7Ci0gICAgaWYoc3NoUHJveHkgJiYgISBzc2hQcm94eVJlYWR5KQorICAg
IGlmIChzc2hQcm94eSAmJiAhc3NoUHJveHlSZWFkeSkKICAgICB7CiAgICAgICAgIHNzaFByb3h5
LT5pbnRlcmFjdGlvblRleHRFbnRlcih0ZXh0KTsKLQlyZXR1cm47CisgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaW50ZXJhY3Rpb25JbnB1dE11dGV4LmxvY2soKTsKLSAgICBpbnRlcmFjdGlv
bklucHV0VGV4dD10ZXh0OworICAgIGludGVyYWN0aW9uSW5wdXRUZXh0ID0gdGV4dDsKICAgICBp
bnRlcmFjdGlvbklucHV0TXV0ZXgudW5sb2NrKCk7CiB9CiAKIHZvaWQgU3NoTWFzdGVyQ29ubmVj
dGlvbjo6aW50ZXJhY3Rpb25JbnRlcnJ1cHRTbG90KCkKIHsKLSAgICBpZihzc2hQcm94eSAmJiAh
IHNzaFByb3h5UmVhZHkpCisgICAgaWYgKHNzaFByb3h5ICYmICFzc2hQcm94eVJlYWR5KQogICAg
IHsKICAgICAgICAgc3NoUHJveHktPmludGVyYWN0aW9uSW50ZXJydXB0U2xvdCgpOwotCXJldHVy
bjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpbnRlcmFjdGlvbklucHV0TXV0ZXgubG9j
aygpOwotICAgIGludGVyYWN0aW9uSW50ZXJydXB0PXRydWU7CisgICAgaW50ZXJhY3Rpb25JbnRl
cnJ1cHQgPSB0cnVlOwogICAgIGludGVyYWN0aW9uSW5wdXRNdXRleC51bmxvY2soKTsKIH0KIAog
Ym9vbCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpjaGVja0xvZ2luKCkKIHsKLSAgICBpbnRlcmFjdGlv
bkludGVycnVwdD1mYWxzZTsKLSAgICBpbnRlcmFjdGlvbklucHV0VGV4dD1RU3RyaW5nOjpudWxs
OwotCi0KLSAgICBzc2hfY2hhbm5lbCBjaGFubmVsID0gc3NoX2NoYW5uZWxfbmV3ICggbXlfc3No
X3Nlc3Npb24gKTsKKyAgICBpbnRlcmFjdGlvbkludGVycnVwdCA9IGZhbHNlOworICAgIGludGVy
YWN0aW9uSW5wdXRUZXh0ID0gUVN0cmluZzo6bnVsbDsKIAotICAgIGlmICghY2hhbm5lbCkgewot
ICAgICAgICBRU3RyaW5nIGVyciA9IHNzaF9nZXRfZXJyb3IgKG15X3NzaF9zZXNzaW9uKTsKLSAg
ICAgICAgUVN0cmluZyBlcnJvcl9tc2cgPSB0ciAoIiUxIGZhaWxlZC4iKS5hcmcgKCJzc2hfY2hh
bm5lbF9uZXciKTsKKyAgICBzc2hfY2hhbm5lbCBjaGFubmVsID0gc3NoX2NoYW5uZWxfbmV3KG15
X3NzaF9zZXNzaW9uKTsKKyAgICBpZiAoIWNoYW5uZWwpCisgICAgeworICAgICAgICBRU3RyaW5n
IGVyciA9IHNzaF9nZXRfZXJyb3IobXlfc3NoX3Nlc3Npb24pOworICAgICAgICBRU3RyaW5nIGVy
cm9yX21zZyA9IHRyKCIlMSBmYWlsZWQuIikuYXJnKCJzc2hfY2hhbm5lbF9uZXciKTsKIAotICAg
ICAgICB4MmdvRGVidWcgPDwgZXJyb3JfbXNnLmxlZnQgKGVycm9yX21zZy5zaXplICgpIC0gMSkg
PDwgIjogIiA8PCBlcnIgPDwgZW5kbDsKKyAgICAgICAgeDJnb0RlYnVnIDw8IGVycm9yX21zZy5s
ZWZ0KGVycm9yX21zZy5zaXplKCkgLSAxKSA8PCAiOiAiIDw8IGVyciA8PCBlbmRsOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGlmICggc3NoX2NoYW5uZWxfb3Blbl9zZXNzaW9u
ICggY2hhbm5lbCApICE9U1NIX09LICkKKyAgICBpZiAoc3NoX2NoYW5uZWxfb3Blbl9zZXNzaW9u
KGNoYW5uZWwpICE9IFNTSF9PSykKICAgICB7Ci0gICAgICAgIFFTdHJpbmcgZXJyPXNzaF9nZXRf
ZXJyb3IgKCBteV9zc2hfc2Vzc2lvbiApOwotICAgICAgICBRU3RyaW5nIGVycm9yTXNnPXRyICgg
IiUxIGZhaWxlZC4iICkuYXJnICgic3NoX2NoYW5uZWxfb3Blbl9zZXNzaW9uIik7Ci0gICAgICAg
IHgyZ29EZWJ1Zzw8ZXJyb3JNc2cubGVmdCAoZXJyb3JNc2cuc2l6ZSAoKSAtIDEpPDwiOiAiPDxl
cnI8PGVuZGw7CisgICAgICAgIFFTdHJpbmcgZXJyID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vz
c2lvbik7CisgICAgICAgIFFTdHJpbmcgZXJyb3JNc2cgPSB0cigiJTEgZmFpbGVkLiIpLmFyZygi
c3NoX2NoYW5uZWxfb3Blbl9zZXNzaW9uIik7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCBlcnJvck1z
Zy5sZWZ0KGVycm9yTXNnLnNpemUoKSAtIDEpIDw8ICI6ICIgPDwgZXJyIDw8IGVuZGw7CiAgICAg
ICAgIHNzaF9jaGFubmVsX2ZyZWUoY2hhbm5lbCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9Ci0gICAgaWYgKHNzaF9jaGFubmVsX3JlcXVlc3RfcHR5KGNoYW5uZWwpIT1TU0hfT0spCisg
ICAgaWYgKHNzaF9jaGFubmVsX3JlcXVlc3RfcHR5KGNoYW5uZWwpICE9IFNTSF9PSykKICAgICB7
Ci0gICAgICAgIFFTdHJpbmcgZXJyPXNzaF9nZXRfZXJyb3IgKCBteV9zc2hfc2Vzc2lvbiApOwot
ICAgICAgICBRU3RyaW5nIGVycm9yTXNnPXRyICggIiUxIGZhaWxlZC4iICkuYXJnICgic3NoX2No
YW5uZWxfcmVxdWVzdF9wdHkiKTsKLSAgICAgICAgeDJnb0RlYnVnPDxlcnJvck1zZy5sZWZ0IChl
cnJvck1zZy5zaXplICgpIC0gMSk8PCI6ICI8PGVycjw8ZW5kbDsKKyAgICAgICAgUVN0cmluZyBl
cnIgPSBzc2hfZ2V0X2Vycm9yKG15X3NzaF9zZXNzaW9uKTsKKyAgICAgICAgUVN0cmluZyBlcnJv
ck1zZyA9IHRyKCIlMSBmYWlsZWQuIikuYXJnKCJzc2hfY2hhbm5lbF9yZXF1ZXN0X3B0eSIpOwor
ICAgICAgICB4MmdvRGVidWcgPDwgZXJyb3JNc2cubGVmdChlcnJvck1zZy5zaXplKCkgLSAxKSA8
PCAiOiAiIDw8IGVyciA8PCBlbmRsOwogICAgICAgICBzc2hfY2hhbm5lbF9mcmVlKGNoYW5uZWwp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGlmKHNzaF9jaGFubmVsX2NoYW5n
ZV9wdHlfc2l6ZShjaGFubmVsLCA4MCwgMjQpIT1TU0hfT0spCisgICAgaWYgKHNzaF9jaGFubmVs
X2NoYW5nZV9wdHlfc2l6ZShjaGFubmVsLCA4MCwgMjQpICE9IFNTSF9PSykKICAgICB7Ci0gICAg
ICAgIFFTdHJpbmcgZXJyPXNzaF9nZXRfZXJyb3IgKCBteV9zc2hfc2Vzc2lvbiApOwotICAgICAg
ICBRU3RyaW5nIGVycm9yTXNnPXRyICggIiUxIGZhaWxlZC4iICkuYXJnICgic3NoX2NoYW5uZWxf
Y2hhbmdlX3B0eV9zaXplIik7Ci0gICAgICAgIHgyZ29EZWJ1Zzw8ZXJyb3JNc2cubGVmdCAoZXJy
b3JNc2cuc2l6ZSAoKSAtIDEpPDwiOiAiPDxlcnI8PGVuZGw7CisgICAgICAgIFFTdHJpbmcgZXJy
ID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lvbik7CisgICAgICAgIFFTdHJpbmcgZXJyb3JN
c2cgPSB0cigiJTEgZmFpbGVkLiIpLmFyZygic3NoX2NoYW5uZWxfY2hhbmdlX3B0eV9zaXplIik7
CisgICAgICAgIHgyZ29EZWJ1ZyA8PCBlcnJvck1zZy5sZWZ0KGVycm9yTXNnLnNpemUoKSAtIDEp
IDw8ICI6ICIgPDwgZXJyIDw8IGVuZGw7CiAgICAgICAgIHNzaF9jaGFubmVsX2ZyZWUoY2hhbm5l
bCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgaWYgKCBzc2hfY2hhbm5lbF9y
ZXF1ZXN0X2V4ZWMgKCBjaGFubmVsLCAiZWNobyBcIkxPR0lOIE9LXCIiICkgIT0gU1NIX09LICkK
KyAgICBpZiAoc3NoX2NoYW5uZWxfcmVxdWVzdF9leGVjKGNoYW5uZWwsICJlY2hvIFwiTE9HSU4g
T0tcIiIpICE9IFNTSF9PSykKICAgICB7Ci0gICAgICAgIFFTdHJpbmcgZXJyPXNzaF9nZXRfZXJy
b3IgKCBteV9zc2hfc2Vzc2lvbiApOwotICAgICAgICBRU3RyaW5nIGVycm9yTXNnPXRyICggIiUx
IGZhaWxlZC4iICkuYXJnICgic3NoX2NoYW5uZWxfcmVxdWVzdF9leGVjIik7Ci0gICAgICAgIHgy
Z29EZWJ1Zzw8ZXJyb3JNc2cubGVmdCAoZXJyb3JNc2cuc2l6ZSAoKSAtIDEpPDwiOiAiPDxlcnI8
PGVuZGw7CisgICAgICAgIFFTdHJpbmcgZXJyID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lv
bik7CisgICAgICAgIFFTdHJpbmcgZXJyb3JNc2cgPSB0cigiJTEgZmFpbGVkLiIpLmFyZygic3No
X2NoYW5uZWxfcmVxdWVzdF9leGVjIik7CisgICAgICAgIHgyZ29EZWJ1ZyA8PCBlcnJvck1zZy5s
ZWZ0KGVycm9yTXNnLnNpemUoKSAtIDEpIDw8ICI6ICIgPDwgZXJyIDw8IGVuZGw7CiAgICAgICAg
IHNzaF9jaGFubmVsX2ZyZWUoY2hhbm5lbCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgY2hhciBidWZmZXJbMTAyNCo1MTJdOyAvLzUxMksg
YnVmZmVyCi0gICAgICAgIGJvb2wgaGFzSW50ZXJyYWN0aW9uPXRydWU7Ci0JYm9vbCBpbnRlcmFj
dGlvblN0YXJ0ZWQ9ZmFsc2U7Ci0vLyAgICAgICAgIHgyZ29EZWJ1Zzw8IkNIRUNLIExPR0lOIGNo
YW5uZWwgY3JlYXRlZC4iPDxlbmRsOworICAgICAgICBjaGFyIGJ1ZmZlclsxMDI0ICogNTEyXTsg
Ly81MTJLIGJ1ZmZlcgorICAgICAgICBib29sIGhhc0ludGVycmFjdGlvbiA9IHRydWU7CisgICAg
ICAgIGJvb2wgaW50ZXJhY3Rpb25TdGFydGVkID0gZmFsc2U7CisgICAgICAgIC8vICAgICAgICAg
eDJnb0RlYnVnPDwiQ0hFQ0sgTE9HSU4gY2hhbm5lbCBjcmVhdGVkLiI8PGVuZGw7CiAgICAgICAg
IHdoaWxlIChzc2hfY2hhbm5lbF9pc19vcGVuKGNoYW5uZWwpICYmCi0gICAgICAgICAgICAgICAg
IXNzaF9jaGFubmVsX2lzX2VvZihjaGFubmVsKSkKKyAgICAgICAgICAgICAgICFzc2hfY2hhbm5l
bF9pc19lb2YoY2hhbm5lbCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGludCBuYnl0ZXMgPSBz
c2hfY2hhbm5lbF9yZWFkX25vbmJsb2NraW5nKGNoYW5uZWwsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZl
ciksIDApOwogICAgICAgICAgICAgaWYgKG5ieXRlcyA8IDApCkBAIC0xNzA0LDE5NCArMTcyMiwx
ODggQEAgYm9vbCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpjaGVja0xvZ2luKCkKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChuYnl0ZXMgPiAwKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIFFTdHJpbmcgaW5mPVFCeXRlQXJyYXkgKCBidWZmZXIsbmJ5dGVzICk7Ci0gICAgICAg
ICAgICAgICAgeDJnb0RlYnVnPDwiTE9HSU4gQ0hFQ0s6Ijw8aW5mOwotICAgICAgICAgICAgICAg
IGlmKGluZi5pbmRleE9mKCJMT0dJTiBPSyIpIT0tMSkKKyAgICAgICAgICAgICAgICBRU3RyaW5n
IGluZiA9IFFCeXRlQXJyYXkoYnVmZmVyLCBuYnl0ZXMpOworICAgICAgICAgICAgICAgIHgyZ29E
ZWJ1ZyA8PCAiTE9HSU4gQ0hFQ0s6IiA8PCBpbmY7CisgICAgICAgICAgICAgICAgaWYgKGluZi5p
bmRleE9mKCJMT0dJTiBPSyIpICE9IC0xKQogICAgICAgICAgICAgICAgIHsKLQkJICAgIHgyZ29E
ZWJ1Zzw8ImRvbid0IGhhdmUgaW50ZXJhY3Rpb24iOwotICAgICAgICAgICAgICAgICAgICBoYXNJ
bnRlcnJhY3Rpb249ZmFsc2U7Ci0JCSAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgeDJn
b0RlYnVnIDw8ICJkb24ndCBoYXZlIGludGVyYWN0aW9uIjsKKyAgICAgICAgICAgICAgICAgICAg
aGFzSW50ZXJyYWN0aW9uID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCi0JCXsKLQkJICBpZighaW50ZXJh
Y3Rpb25TdGFydGVkKQotCQkgIHsKLQkJICAgICBpbnRlcmFjdGlvblN0YXJ0ZWQ9dHJ1ZTsKLQkJ
ICAgICBlbWl0IHN0YXJ0SW50ZXJhY3Rpb24odGhpcywgaW5mKTsKLQkJICB9Ci0JCSAgZWxzZQot
CQkgICAgIGVtaXQgdXBkYXRlSW50ZXJhY3Rpb24odGhpcyxpbmYpOwotCQl9CisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWludGVyYWN0aW9uU3RhcnRlZCkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rpb25T
dGFydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVtaXQgc3RhcnRJbnRlcmFj
dGlvbih0aGlzLCBpbmYpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGVtaXQgdXBkYXRlSW50ZXJhY3Rpb24o
dGhpcywgaW5mKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBib29sIGludGVycnVwdDsKICAgICAgICAgICAgIGludGVyYWN0aW9uSW5wdXRNdXRleC5sb2Nr
KCk7Ci0JICAgIGludGVycnVwdD1pbnRlcmFjdGlvbkludGVycnVwdDsKLQkgICAgUVN0cmluZyB0
ZXh0VG9TZW5kPWludGVyYWN0aW9uSW5wdXRUZXh0OwotCSAgICBpbnRlcmFjdGlvbklucHV0VGV4
dD1RU3RyaW5nOjpudWxsOwotCSAgICBpbnRlcmFjdGlvbklucHV0TXV0ZXgudW5sb2NrKCk7Ci0J
ICAgIGlmKHRleHRUb1NlbmQubGVuZ3RoKCk+MCkKLQkgICAgewotLy8gCSAgICAgICAgeDJnb0Rl
YnVnPDwiU0VORCBJbnB1dCB0byBTRVJWRVIiOwotCSAgICAgICAgc3NoX2NoYW5uZWxfd3JpdGUo
Y2hhbm5lbCwgdGV4dFRvU2VuZC50b0xvY2FsOEJpdCgpLmNvbnN0RGF0YSgpLCB0ZXh0VG9TZW5k
Lmxlbmd0aCgpKTsKLQkgICAgfQotCSAgICBpZihpbnRlcnJ1cHQpCi0JICAgIHsKLQkgICAgICAg
IGJyZWFrOwotCSAgICB9CisgICAgICAgICAgICBpbnRlcnJ1cHQgPSBpbnRlcmFjdGlvbkludGVy
cnVwdDsKKyAgICAgICAgICAgIFFTdHJpbmcgdGV4dFRvU2VuZCA9IGludGVyYWN0aW9uSW5wdXRU
ZXh0OworICAgICAgICAgICAgaW50ZXJhY3Rpb25JbnB1dFRleHQgPSBRU3RyaW5nOjpudWxsOwor
ICAgICAgICAgICAgaW50ZXJhY3Rpb25JbnB1dE11dGV4LnVubG9jaygpOworICAgICAgICAgICAg
aWYgKHRleHRUb1NlbmQubGVuZ3RoKCkgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIC8vIAkgICAgICAgIHgyZ29EZWJ1Zzw8IlNFTkQgSW5wdXQgdG8gU0VSVkVSIjsKKyAgICAg
ICAgICAgICAgICBzc2hfY2hhbm5lbF93cml0ZShjaGFubmVsLCB0ZXh0VG9TZW5kLnRvTG9jYWw4
Qml0KCkuY29uc3REYXRhKCksIHRleHRUb1NlbmQubGVuZ3RoKCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGludGVycnVwdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMtPnVzbGVlcCgzMCk7CiAg
ICAgICAgIH0KIAotICAgICAgICB4MmdvRGVidWc8PCJMT09QIEZJTklTSEVEIjsKLQlib29sIHJl
dFZhbD1mYWxzZTsKLSAgICAgICAgaWYoIWhhc0ludGVycmFjdGlvbikKLQl7Ci0JICAgIHgyZ29E
ZWJ1Zzw8Ik5vIGludGVyYWN0aW9uIG5lZWRlZCwgY29udGludWUgc2Vzc2lvbiI7Ci0gICAgICAg
ICAgICByZXRWYWw9dHJ1ZTsKLQl9Ci0JZWxzZQorICAgICAgICB4MmdvRGVidWcgPDwgIkxPT1Ag
RklOSVNIRUQiOworICAgICAgICBib29sIHJldFZhbCA9IGZhbHNlOworICAgICAgICBpZiAoIWhh
c0ludGVycmFjdGlvbikKICAgICAgICAgewotICAgICAgICAgICAgc3NoUHJvY0VyclN0cmluZz10
cigiUmVjb25uZWN0IHNlc3Npb24iKTsKLSAgICAgICAgICAgIHgyZ29EZWJ1Zzw8IlJlY29ubmVj
dCBzZXNzaW9uIjsKKyAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiTm8gaW50ZXJhY3Rpb24gbmVl
ZGVkLCBjb250aW51ZSBzZXNzaW9uIjsKKyAgICAgICAgICAgIHJldFZhbCA9IHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzc2hQcm9jRXJyU3Ry
aW5nID0gdHIoIlJlY29ubmVjdCBzZXNzaW9uIik7CisgICAgICAgICAgICB4MmdvRGVidWcgPDwg
IlJlY29ubmVjdCBzZXNzaW9uIjsKICAgICAgICAgfQotICAgICAgICBzc2hfY2hhbm5lbF9jbG9z
ZShjaGFubmVsKTsKICAgICAgICAgc3NoX2NoYW5uZWxfc2VuZF9lb2YoY2hhbm5lbCk7CisgICAg
ICAgIHNzaF9jaGFubmVsX2Nsb3NlKGNoYW5uZWwpOwogICAgICAgICBzc2hfY2hhbm5lbF9mcmVl
KGNoYW5uZWwpOwotCXJldHVybiByZXRWYWw7Ci0KKyAgICAgICAgcmV0dXJuIHJldFZhbDsKICAg
ICB9CiAgICAgcmV0dXJuIGZhbHNlOwotCiB9CiAKIGJvb2wgU3NoTWFzdGVyQ29ubmVjdGlvbjo6
dXNlckF1dGgoKQogewogICAgIGlmIChrZXJiZXJvcykKICAgICAgICAgcmV0dXJuIHVzZXJBdXRo
S3JiKCk7Ci0gICAgaWYgKCBhdXRvbG9naW4gJiYga2V5PT0iIiApCi0gICAgICAgIGlmICggdXNl
ckF1dGhBdXRvKCkgKQorICAgIGlmIChhdXRvbG9naW4gJiYga2V5ID09ICIiKQorICAgICAgICBp
ZiAodXNlckF1dGhBdXRvKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIGtl
eSE9IiIgKQorICAgIGlmIChrZXkgIT0gIiIpCiAgICAgewotICAgICAgICBpZiAoIHVzZXJBdXRo
V2l0aEtleSgpICkKKyAgICAgICAgaWYgKHVzZXJBdXRoV2l0aEtleSgpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiB1c2VyQXV0aFdpdGhQYXNzKCk7CiB9CiAK
LQotdm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjphZGRDaGFubmVsQ29ubmVjdGlvbiAoIFNzaFBy
b2Nlc3MqIGNyZWF0b3IsIGludCBzb2NrLCBRU3RyaW5nIGZvcndhcmRIb3N0LCBpbnQgZm9yd2Fy
ZFBvcnQsCi0gICAgICAgIFFTdHJpbmcgbG9jYWxIb3N0LCBpbnQgbG9jYWxQb3J0LCB2b2lkKiBj
aGFubmVsICkKK3ZvaWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6YWRkQ2hhbm5lbENvbm5lY3Rpb24o
U3NoUHJvY2VzcyAqY3JlYXRvciwgaW50IHNvY2ssIFFTdHJpbmcgZm9yd2FyZEhvc3QsIGludCBm
b3J3YXJkUG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUVN0cmluZyBsb2NhbEhvc3QsIGludCBsb2NhbFBvcnQsIHZvaWQgKmNoYW5uZWwpCiB7CiAg
ICAgQ2hhbm5lbENvbm5lY3Rpb24gY29uOwotICAgIGNvbi5jaGFubmVsPSAoIHNzaF9jaGFubmVs
ICkgY2hhbm5lbDsKLSAgICBjb24uc29jaz1zb2NrOwotICAgIGNvbi5jcmVhdG9yPWNyZWF0b3I7
Ci0gICAgY29uLmZvcndhcmRIb3N0PWZvcndhcmRIb3N0OwotICAgIGNvbi5mb3J3YXJkUG9ydD1m
b3J3YXJkUG9ydDsKLSAgICBjb24ubG9jYWxIb3N0PWxvY2FsSG9zdDsKLSAgICBjb24ubG9jYWxQ
b3J0PWxvY2FsUG9ydDsKKyAgICBjb24uY2hhbm5lbCA9IChzc2hfY2hhbm5lbCljaGFubmVsOwor
ICAgIGNvbi5zb2NrID0gc29jazsKKyAgICBjb24uY3JlYXRvciA9IGNyZWF0b3I7CisgICAgY29u
LmZvcndhcmRIb3N0ID0gZm9yd2FyZEhvc3Q7CisgICAgY29uLmZvcndhcmRQb3J0ID0gZm9yd2Fy
ZFBvcnQ7CisgICAgY29uLmxvY2FsSG9zdCA9IGxvY2FsSG9zdDsKKyAgICBjb24ubG9jYWxQb3J0
ID0gbG9jYWxQb3J0OwogCiAgICAgY2hhbm5lbENvbm5lY3Rpb25zTXV0ZXgubG9jaygpOwotICAg
IGNoYW5uZWxDb25uZWN0aW9uczw8Y29uOworICAgIGNoYW5uZWxDb25uZWN0aW9ucyA8PCBjb247
CiAgICAgY2hhbm5lbENvbm5lY3Rpb25zTXV0ZXgudW5sb2NrKCk7CiB9CiAKLQotdm9pZCBTc2hN
YXN0ZXJDb25uZWN0aW9uOjphZGRDaGFubmVsQ29ubmVjdGlvbiAoIFNzaFByb2Nlc3MqIGNyZWF0
b3IsIFFTdHJpbmcgdXVpZCwgUVN0cmluZyBjbWQgKQordm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9u
OjphZGRDaGFubmVsQ29ubmVjdGlvbihTc2hQcm9jZXNzICpjcmVhdG9yLCBRU3RyaW5nIHV1aWQs
IFFTdHJpbmcgY21kKQogewogCiAgICAgQ2hhbm5lbENvbm5lY3Rpb24gY29uOwotICAgIGNvbi5j
aGFubmVsPU5VTEw7Ci0gICAgY29uLnNvY2s9LTE7Ci0gICAgY29uLmNyZWF0b3I9Y3JlYXRvcjsK
LSAgICBjb24uY29tbWFuZD1jbWQ7Ci0gICAgY29uLnV1aWQ9dXVpZDsKKyAgICBjb24uY2hhbm5l
bCA9IE5VTEw7CisgICAgY29uLnNvY2sgPSAtMTsKKyAgICBjb24uY3JlYXRvciA9IGNyZWF0b3I7
CisgICAgY29uLmNvbW1hbmQgPSBjbWQ7CisgICAgY29uLnV1aWQgPSB1dWlkOwogCiAgICAgeDJn
b0RlYnVnIDw8ICJMb2NraW5nIFNTSCBjaGFubmVsIGNvbm5lY3Rpb24gTVVURVguIjsKICAgICBj
aGFubmVsQ29ubmVjdGlvbnNNdXRleC5sb2NrKCk7CiAgICAgeDJnb0RlYnVnIDw8ICJQYXNzaW5n
IG5ldyBjaGFubmVsIGNvbm5lY3Rpb24gb2JqZWN0IHRvIGNoYW5uZWxDb25uZWN0aW9ucy4iOwot
ICAgIGNoYW5uZWxDb25uZWN0aW9uczw8Y29uOworICAgIGNoYW5uZWxDb25uZWN0aW9ucyA8PCBj
b247CiAgICAgeDJnb0RlYnVnIDw8ICJVbmxvY2tpbmcgU1NIIGNoYW5uZWwgY29ubmVjdGlvbiBN
VVRFWC4iOwogICAgIGNoYW5uZWxDb25uZWN0aW9uc011dGV4LnVubG9jaygpOwogfQogCi0KLXZv
aWQgU3NoTWFzdGVyQ29ubmVjdGlvbjo6YWRkQ29weVJlcXVlc3QgKCBTc2hQcm9jZXNzKiBjcmVh
dG9yLCBRU3RyaW5nIHNyYywgUVN0cmluZyBkc3QgKQordm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9u
OjphZGRDb3B5UmVxdWVzdChTc2hQcm9jZXNzICpjcmVhdG9yLCBRU3RyaW5nIHNyYywgUVN0cmlu
ZyBkc3QpCiB7CiAgICAgQ29weVJlcXVlc3QgcmVxOwotICAgIHJlcS5zcmM9c3JjOwotICAgIHJl
cS5kc3Q9ZHN0OwotICAgIHJlcS5jcmVhdG9yPWNyZWF0b3I7CisgICAgcmVxLnNyYyA9IHNyYzsK
KyAgICByZXEuZHN0ID0gZHN0OworICAgIHJlcS5jcmVhdG9yID0gY3JlYXRvcjsKICAgICBjb3B5
UmVxdWVzdE11dGV4LmxvY2soKTsKLSAgICBjb3B5UmVxdWVzdHM8PHJlcTsKKyAgICBjb3B5UmVx
dWVzdHMgPDwgcmVxOwogICAgIGNvcHlSZXF1ZXN0TXV0ZXgudW5sb2NrKCk7CiB9CiAKLQogdm9p
ZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpjb3B5KCkKIHsKIAotICAgIGZvciAoIGludCBpPWNvcHlS
ZXF1ZXN0cy5zaXplKCktMTsgaT49MDsgLS1pICkKKyAgICBmb3IgKGludCBpID0gY29weVJlcXVl
c3RzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKQogICAgIHsKLSAgICAgICAgUVN0cmluZ0xpc3Qg
bHN0PWNvcHlSZXF1ZXN0c1tpXS5kc3Quc3BsaXQgKCAiLyIgKTsKLSAgICAgICAgUVN0cmluZyBk
c3RGaWxlPWxzdC5sYXN0KCk7CisgICAgICAgIFFTdHJpbmdMaXN0IGxzdCA9IGNvcHlSZXF1ZXN0
c1tpXS5kc3Quc3BsaXQoIi8iKTsKKyAgICAgICAgUVN0cmluZyBkc3RGaWxlID0gbHN0Lmxhc3Qo
KTsKICAgICAgICAgbHN0LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgUVN0cmluZyBkc3RQYXRoPWxz
dC5qb2luICggIi8iICk7Ci0gICAgICAgIHgyZ29EZWJ1Zzw8IlNTSCBNYXN0ZXIgQ29ubmVjdGlv
biBjb3B5IC0gZHN0IHBhdGg6Ijw8ZHN0UGF0aDw8IiBmaWxlOiI8PGRzdEZpbGU8PGVuZGw7Ci0g
ICAgICAgIHNzaF9zY3Agc2NwPXNzaF9zY3BfbmV3ICggbXlfc3NoX3Nlc3Npb24sIFNTSF9TQ1Bf
V1JJVEV8U1NIX1NDUF9SRUNVUlNJVkUsIGRzdFBhdGgudG9MYXRpbjEoKSApOwotICAgICAgICBp
ZiAoIHNjcCA9PSBOVUxMICkKKyAgICAgICAgUVN0cmluZyBkc3RQYXRoID0gbHN0LmpvaW4oIi8i
KTsKKyAgICAgICAgeDJnb0RlYnVnIDw8ICJTU0ggTWFzdGVyIENvbm5lY3Rpb24gY29weSAtIGRz
dCBwYXRoOiIgPDwgZHN0UGF0aCA8PCAiIGZpbGU6IiA8PCBkc3RGaWxlIDw8IGVuZGw7CisgICAg
ICAgIHNzaF9zY3Agc2NwID0gc3NoX3NjcF9uZXcobXlfc3NoX3Nlc3Npb24sIFNTSF9TQ1BfV1JJ
VEUgfCBTU0hfU0NQX1JFQ1VSU0lWRSwgZHN0UGF0aC50b0xhdGluMSgpKTsKKyAgICAgICAgaWYg
KHNjcCA9PSBOVUxMKQogICAgICAgICB7Ci0gICAgICAgICAgICB4MmdvRGVidWc8PCJFcnJvciBh
bGxvY2F0aW5nIFNDUCBzZXNzaW9uOiAiPDwgc3NoX2dldF9lcnJvciAoIG15X3NzaF9zZXNzaW9u
ICkgPDxlbmRsOworICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJFcnJvciBhbGxvY2F0aW5nIFND
UCBzZXNzaW9uOiAiIDw8IHNzaF9nZXRfZXJyb3IobXlfc3NoX3Nlc3Npb24pIDw8IGVuZGw7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaW50IHJjID0gc3NoX3NjcF9p
bml0ICggc2NwICk7Ci0gICAgICAgIGlmICggcmMgIT0gU1NIX09LICkKKyAgICAgICAgaW50IHJj
ID0gc3NoX3NjcF9pbml0KHNjcCk7CisgICAgICAgIGlmIChyYyAhPSBTU0hfT0spCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHgyZ29EZWJ1Zzw8IkVycm9yIGluaXRpYWxpemluZyBTQ1Agc2Vzc2lv
bjogIjw8IHNzaF9nZXRfZXJyb3IgKCBteV9zc2hfc2Vzc2lvbiApIDw8ZW5kbDsKLSAgICAgICAg
ICAgIHNzaF9zY3BfZnJlZSAoIHNjcCApOworICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJFcnJv
ciBpbml0aWFsaXppbmcgU0NQIHNlc3Npb246ICIgPDwgc3NoX2dldF9lcnJvcihteV9zc2hfc2Vz
c2lvbikgPDwgZW5kbDsKKyAgICAgICAgICAgIHNzaF9zY3BfZnJlZShzY3ApOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFFGaWxlIGZpbGUgKCBjb3B5UmVxdWVzdHNb
aV0uc3JjICk7Ci0gICAgICAgIGlmICggIWZpbGUub3BlbiAoIFFJT0RldmljZTo6UmVhZE9ubHkg
KSApCisgICAgICAgIFFGaWxlIGZpbGUoY29weVJlcXVlc3RzW2ldLnNyYyk7CisgICAgICAgIGlm
ICghZmlsZS5vcGVuKFFJT0RldmljZTo6UmVhZE9ubHkpKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBRU3RyaW5nIGVyck1zZz10ciAoICJDYW5ub3Qgb3BlbiBmaWxlICIgKSArY29weVJlcXVlc3Rz
W2ldLnNyYzsKLSAgICAgICAgICAgIGVtaXQgY29weUVyciAoIGNvcHlSZXF1ZXN0c1tpXS5jcmVh
dG9yLCBlcnJNc2csICIiICk7Ci0gICAgICAgICAgICBjb3B5UmVxdWVzdHMucmVtb3ZlQXQgKCBp
ICk7Ci0gICAgICAgICAgICBzc2hfc2NwX2Nsb3NlICggc2NwICk7Ci0gICAgICAgICAgICBzc2hf
c2NwX2ZyZWUgKCBzY3AgKTsKKyAgICAgICAgICAgIFFTdHJpbmcgZXJyTXNnID0gdHIoIkNhbm5v
dCBvcGVuIGZpbGUgIikgKyBjb3B5UmVxdWVzdHNbaV0uc3JjOworICAgICAgICAgICAgZW1pdCBj
b3B5RXJyKGNvcHlSZXF1ZXN0c1tpXS5jcmVhdG9yLCBlcnJNc2csICIiKTsKKyAgICAgICAgICAg
IGNvcHlSZXF1ZXN0cy5yZW1vdmVBdChpKTsKKyAgICAgICAgICAgIHNzaF9zY3BfY2xvc2Uoc2Nw
KTsKKyAgICAgICAgICAgIHNzaF9zY3BfZnJlZShzY3ApOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KLSAgICAgICAgUUJ5dGVBcnJheSBhcnI9ZmlsZS5yZWFkQWxsKCk7CisgICAg
ICAgIFFCeXRlQXJyYXkgYXJyID0gZmlsZS5yZWFkQWxsKCk7CiAgICAgICAgIGZpbGUuY2xvc2Uo
KTsKLSAgICAgICAgcmM9c3NoX3NjcF9wdXNoX2ZpbGUgKCBzY3AsZHN0RmlsZS50b0xhdGluMSgp
LGFyci5zaXplKCksIDA2MDAgKTsKLSAgICAgICAgaWYgKCByYyAhPSBTU0hfT0sgKQorICAgICAg
ICByYyA9IHNzaF9zY3BfcHVzaF9maWxlKHNjcCwgZHN0RmlsZS50b0xhdGluMSgpLCBhcnIuc2l6
ZSgpLCAwNjAwKTsKKyAgICAgICAgaWYgKHJjICE9IFNTSF9PSykKICAgICAgICAgewotICAgICAg
ICAgICAgUVN0cmluZyBlcnJNc2c9dHIgKCAiQ2Fubm90IGNyZWF0ZSByZW1vdGUgZmlsZSAiICkg
K2NvcHlSZXF1ZXN0c1tpXS5kc3Q7Ci0gICAgICAgICAgICBRU3RyaW5nIHNlcnI9c3NoX2dldF9l
cnJvciAoIG15X3NzaF9zZXNzaW9uICk7Ci0gICAgICAgICAgICB4MmdvRGVidWc8PGVyck1zZzw8
IiAtICI8PHNlcnI8PGVuZGw7Ci0gICAgICAgICAgICBlbWl0IGNvcHlFcnIgKCBjb3B5UmVxdWVz
dHNbaV0uY3JlYXRvciwgZXJyTXNnLCBzZXJyICk7Ci0gICAgICAgICAgICBjb3B5UmVxdWVzdHMu
cmVtb3ZlQXQgKCBpICk7Ci0gICAgICAgICAgICBzc2hfc2NwX2Nsb3NlICggc2NwICk7Ci0gICAg
ICAgICAgICBzc2hfc2NwX2ZyZWUgKCBzY3AgKTsKKyAgICAgICAgICAgIFFTdHJpbmcgZXJyTXNn
ID0gdHIoIkNhbm5vdCBjcmVhdGUgcmVtb3RlIGZpbGUgIikgKyBjb3B5UmVxdWVzdHNbaV0uZHN0
OworICAgICAgICAgICAgUVN0cmluZyBzZXJyID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lv
bik7CisgICAgICAgICAgICB4MmdvRGVidWcgPDwgZXJyTXNnIDw8ICIgLSAiIDw8IHNlcnIgPDwg
ZW5kbDsKKyAgICAgICAgICAgIGVtaXQgY29weUVycihjb3B5UmVxdWVzdHNbaV0uY3JlYXRvciwg
ZXJyTXNnLCBzZXJyKTsKKyAgICAgICAgICAgIGNvcHlSZXF1ZXN0cy5yZW1vdmVBdChpKTsKKyAg
ICAgICAgICAgIHNzaF9zY3BfY2xvc2Uoc2NwKTsKKyAgICAgICAgICAgIHNzaF9zY3BfZnJlZShz
Y3ApOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgcmM9c3NoX3Nj
cF93cml0ZSAoIHNjcCxhcnIuZGF0YSgpLGFyci5zaXplKCkgKTsKLSAgICAgICAgaWYgKCByYyAh
PSBTU0hfT0sgKQorICAgICAgICByYyA9IHNzaF9zY3Bfd3JpdGUoc2NwLCBhcnIuZGF0YSgpLCBh
cnIuc2l6ZSgpKTsKKyAgICAgICAgaWYgKHJjICE9IFNTSF9PSykKICAgICAgICAgewotICAgICAg
ICAgICAgUVN0cmluZyBzZXJyPXNzaF9nZXRfZXJyb3IgKCBteV9zc2hfc2Vzc2lvbiApOwotICAg
ICAgICAgICAgUVN0cmluZyBlcnJNc2c9dHIgKCAiQ2Fubm90IHdyaXRlIHRvIHJlbW90ZSBmaWxl
ICIgKSArY29weVJlcXVlc3RzW2ldLmRzdDsKLSAgICAgICAgICAgIHgyZ29EZWJ1Zzw8ZXJyTXNn
PDwiIC0gIjw8c2Vycjw8ZW5kbDsKLSAgICAgICAgICAgIGVtaXQgY29weUVyciAoIGNvcHlSZXF1
ZXN0c1tpXS5jcmVhdG9yLCBlcnJNc2csIHNlcnIgKTsKLSAgICAgICAgICAgIGNvcHlSZXF1ZXN0
cy5yZW1vdmVBdCAoIGkgKTsKLSAgICAgICAgICAgIHNzaF9zY3BfY2xvc2UgKCBzY3AgKTsKLSAg
ICAgICAgICAgIHNzaF9zY3BfZnJlZSAoIHNjcCApOworICAgICAgICAgICAgUVN0cmluZyBzZXJy
ID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lvbik7CisgICAgICAgICAgICBRU3RyaW5nIGVy
ck1zZyA9IHRyKCJDYW5ub3Qgd3JpdGUgdG8gcmVtb3RlIGZpbGUgIikgKyBjb3B5UmVxdWVzdHNb
aV0uZHN0OworICAgICAgICAgICAgeDJnb0RlYnVnIDw8IGVyck1zZyA8PCAiIC0gIiA8PCBzZXJy
IDw8IGVuZGw7CisgICAgICAgICAgICBlbWl0IGNvcHlFcnIoY29weVJlcXVlc3RzW2ldLmNyZWF0
b3IsIGVyck1zZywgc2Vycik7CisgICAgICAgICAgICBjb3B5UmVxdWVzdHMucmVtb3ZlQXQoaSk7
CisgICAgICAgICAgICBzc2hfc2NwX2Nsb3NlKHNjcCk7CisgICAgICAgICAgICBzc2hfc2NwX2Zy
ZWUoc2NwKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGVtaXQg
Y29weU9rICggY29weVJlcXVlc3RzW2ldLmNyZWF0b3IgKTsKLSAgICAgICAgeDJnb0RlYnVnPDwi
c2NwIG9rOiAiPDxjb3B5UmVxdWVzdHNbaV0uc3JjPDwiIC0+ICI8PHVzZXI8PCJAIjw8aG9zdDw8
IjoiPDxjb3B5UmVxdWVzdHNbaV0uZHN0PDxlbmRsOwotICAgICAgICBjb3B5UmVxdWVzdHMucmVt
b3ZlQXQgKCBpICk7Ci0gICAgICAgIHNzaF9zY3BfY2xvc2UgKCBzY3AgKTsKLSAgICAgICAgc3No
X3NjcF9mcmVlICggc2NwICk7CisgICAgICAgIGVtaXQgY29weU9rKGNvcHlSZXF1ZXN0c1tpXS5j
cmVhdG9yKTsKKyAgICAgICAgeDJnb0RlYnVnIDw8ICJzY3Agb2s6ICIgPDwgY29weVJlcXVlc3Rz
W2ldLnNyYyA8PCAiIC0+ICIgPDwgdXNlciA8PCAiQCIgPDwgaG9zdCA8PCAiOiIgPDwgY29weVJl
cXVlc3RzW2ldLmRzdCA8PCBlbmRsOworICAgICAgICBjb3B5UmVxdWVzdHMucmVtb3ZlQXQoaSk7
CisgICAgICAgIHNzaF9zY3BfY2xvc2Uoc2NwKTsKKyAgICAgICAgc3NoX3NjcF9mcmVlKHNjcCk7
CiAgICAgfQogfQogCkBAIC0xOTAwLDQ3ICsxOTEyLDQ3IEBAIHZvaWQgU3NoTWFzdGVyQ29ubmVj
dGlvbjo6Y2hhbm5lbExvb3AoKQogICAgIGZvcmV2ZXIKICAgICB7CiAgICAgICAgIGRpc2Nvbm5l
Y3RGbGFnTXV0ZXgubG9jaygpOwotICAgICAgICBib29sIGRpc2Nvbm5lY3Q9ZGlzY29ubmVjdFNl
c3Npb25GbGFnOworICAgICAgICBib29sIGRpc2Nvbm5lY3QgPSBkaXNjb25uZWN0U2Vzc2lvbkZs
YWc7CiAgICAgICAgIGRpc2Nvbm5lY3RGbGFnTXV0ZXgudW5sb2NrKCk7CiAKLSAgICAgICAgaWYg
KCBkaXNjb25uZWN0ICkKKyAgICAgICAgaWYgKGRpc2Nvbm5lY3QpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHgyZ29EZWJ1Zzw8IkRpc2Nvbm5lY3RpbmcgLi4uIjw8ZW5kbDsKKyAgICAgICAgICAg
IHgyZ29EZWJ1ZyA8PCAiRGlzY29ubmVjdGluZyAuLi4iIDw8IGVuZGw7CiAKLSAgICAgICAgICAg
IGlmICh1c2Vwcm94eSAmJiBwcm94eXR5cGU9PVBST1hZU1NIJiZzc2hQcm94eSkKKyAgICAgICAg
ICAgIGlmICh1c2Vwcm94eSAmJiBwcm94eXR5cGUgPT0gUFJPWFlTU0ggJiYgc3NoUHJveHkpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZGVsZXRlIHNzaFByb3h5OwotICAgICAgICAg
ICAgICAgIHNzaFByb3h5PTA7CisgICAgICAgICAgICAgICAgc3NoUHJveHkgPSAwOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBjaGFubmVsQ29ubmVjdGlvbnNNdXRleC5sb2NrKCk7Ci0g
ICAgICAgICAgICB4MmdvRGVidWc8PCJEZWxldGluZyBjaGFubmVsIGNvbm5lY3Rpb25zLiI8PGVu
ZGw7Ci0gICAgICAgICAgICBmb3IgKCBpbnQgaT0wOyBpPGNoYW5uZWxDb25uZWN0aW9ucy5zaXpl
KCk7ICsraSApCisgICAgICAgICAgICB4MmdvRGVidWcgPDwgIkRlbGV0aW5nIGNoYW5uZWwgY29u
bmVjdGlvbnMuIiA8PCBlbmRsOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGFu
bmVsQ29ubmVjdGlvbnMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZmluYWxpemUgKCBpICk7CisgICAgICAgICAgICAgICAgZmluYWxpemUoaSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjaGFubmVsQ29ubmVjdGlvbnNNdXRleC51bmxvY2soKTsKLSAg
ICAgICAgICAgIHgyZ29EZWJ1Zzw8IkRpc2Nvbm5lY3Rpbmcgc2Vzc2lvbi4iPDxlbmRsOwotICAg
ICAgICAgICAgc3NoX2Rpc2Nvbm5lY3QgKCBteV9zc2hfc2Vzc2lvbiApOwotICAgICAgICAgICAg
c3NoX2ZyZWUgKCBteV9zc2hfc2Vzc2lvbiApOworICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJE
aXNjb25uZWN0aW5nIHNlc3Npb24uIiA8PCBlbmRsOworICAgICAgICAgICAgc3NoX2Rpc2Nvbm5l
Y3QobXlfc3NoX3Nlc3Npb24pOworICAgICAgICAgICAgc3NoX2ZyZWUobXlfc3NoX3Nlc3Npb24p
OwogCi0gICAgICAgICAgICB4MmdvRGVidWc8PCJEZWxldGluZyBzb2NrZXRzLiI8PGVuZGw7Cisg
ICAgICAgICAgICB4MmdvRGVidWcgPDwgIkRlbGV0aW5nIHNvY2tldHMuIiA8PCBlbmRsOwogICAg
ICAgICAgICAgaWYgKHRjcFByb3h5U29ja2V0ICE9IE5VTEwpCiAgICAgICAgICAgICAgICAgZGVs
ZXRlIHRjcFByb3h5U29ja2V0OwogICAgICAgICAgICAgaWYgKHRjcE5ldHdvcmtQcm94eSAhPSBO
VUxMKQogICAgICAgICAgICAgICAgIGRlbGV0ZSB0Y3BOZXR3b3JrUHJveHk7Ci0gICAgICAgICAg
ICB4MmdvRGVidWc8PCJBbGwgY2hhbm5lbHMgY2xvc2VkIGFuZCBzZXNzaW9uIGRpc2Nvbm5lY3Rl
ZC4gUXVpdHRpbmcgc2Vzc2lvbiBsb29wLiI8PGVuZGw7CisgICAgICAgICAgICB4MmdvRGVidWcg
PDwgIkFsbCBjaGFubmVscyBjbG9zZWQgYW5kIHNlc3Npb24gZGlzY29ubmVjdGVkLiBRdWl0dGlu
ZyBzZXNzaW9uIGxvb3AuIiA8PCBlbmRsOwogICAgICAgICAgICAgcXVpdCgpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGFkZFJldmVyc2VUdW5uZWxDb25uZWN0aW9u
cygpOwogICAgICAgICBjaGVja1JldmVyc2VUdW5uZWxDb25uZWN0aW9ucygpOwogICAgICAgICBj
b3B5UmVxdWVzdE11dGV4LmxvY2soKTsKLSAgICAgICAgaWYgKCBjb3B5UmVxdWVzdHMuc2l6ZSgp
ID4wICkKKyAgICAgICAgaWYgKGNvcHlSZXF1ZXN0cy5zaXplKCkgPiAwKQogICAgICAgICAgICAg
Y29weSgpOwogICAgICAgICBjb3B5UmVxdWVzdE11dGV4LnVubG9jaygpOwogCi0gICAgICAgIGNo
YXIgYnVmZmVyWzEwMjQqNTEyXTsgLy81MTJLIGJ1ZmZlcgorICAgICAgICBjaGFyIGJ1ZmZlclsx
MDI0ICogNTEyXTsgLy81MTJLIGJ1ZmZlcgogICAgICAgICBpbnQgbmJ5dGVzOwogICAgICAgICBm
ZF9zZXQgcmZkczsKIApAQCAtMTk1MCwyNjAgKzE5NjIsMTQ4IEBAIHZvaWQgU3NoTWFzdGVyQ29u
bmVjdGlvbjo6Y2hhbm5lbExvb3AoKQogICAgICAgICB0di50dl91c2VjID0gNTAwMDAwOwogCiAg
ICAgICAgIGludCByZXR2YWw7Ci0gICAgICAgIGludCBtYXhzb2NrPS0xOwotCisgICAgICAgIGlu
dCBtYXhzb2NrID0gLTE7CiAKICAgICAgICAgY2hhbm5lbENvbm5lY3Rpb25zTXV0ZXgubG9jaygp
OwotICAgICAgICBpZiAoIGNoYW5uZWxDb25uZWN0aW9ucy5zaXplKCkgPD0wICkKKyAgICAgICAg
aWYgKGNoYW5uZWxDb25uZWN0aW9ucy5zaXplKCkgPD0gMCkKICAgICAgICAgewogICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgeDJnb0RlYnVnPDwibm8gY2hhbm5lbCBjb25uZWN0aW9ucywgd2Fp
dGluZ1xuIjsKICAgICAgICAgICAgIGNoYW5uZWxDb25uZWN0aW9uc011dGV4LnVubG9jaygpOwot
ICAgICAgICAgICAgdXNsZWVwICggNTAwICk7CisgICAgICAgICAgICB1c2xlZXAoNTAwKTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIHNzaF9jaGFubmVsKiByZWFk
X2NoYW49bmV3IHNzaF9jaGFubmVsW2NoYW5uZWxDb25uZWN0aW9ucy5zaXplKCkgKzFdOwotICAg
ICAgICBzc2hfY2hhbm5lbCogb3V0X2NoYW49bmV3IHNzaF9jaGFubmVsW2NoYW5uZWxDb25uZWN0
aW9ucy5zaXplKCkgKzFdOwotICAgICAgICByZWFkX2NoYW5bY2hhbm5lbENvbm5lY3Rpb25zLnNp
emUoKSBdPU5VTEw7CisgICAgICAgIHNzaF9jaGFubmVsICpyZWFkX2NoYW4gPSBuZXcgc3NoX2No
YW5uZWxbY2hhbm5lbENvbm5lY3Rpb25zLnNpemUoKSArIDFdOworICAgICAgICBzc2hfY2hhbm5l
bCAqb3V0X2NoYW4gPSBuZXcgc3NoX2NoYW5uZWxbY2hhbm5lbENvbm5lY3Rpb25zLnNpemUoKSAr
IDFdOworICAgICAgICByZWFkX2NoYW5bY2hhbm5lbENvbm5lY3Rpb25zLnNpemUoKV0gPSBOVUxM
OwogCi0gICAgICAgIEZEX1pFUk8gKCAmcmZkcyApOworICAgICAgICBGRF9aRVJPKCZyZmRzKTsK
IAotICAgICAgICBmb3IgKCBpbnQgaT0wOyBpPGNoYW5uZWxDb25uZWN0aW9ucy5zaXplKCk7ICsr
aSApCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hhbm5lbENvbm5lY3Rpb25zLnNpemUo
KTsgKytpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgdGNwU29ja2V0PWNoYW5uZWxDb25u
ZWN0aW9ucy5hdCAoIGkgKS5zb2NrOwotICAgICAgICAgICAgaWYgKCB0Y3BTb2NrZXQ+MCApCi0g
ICAgICAgICAgICAgICAgRkRfU0VUICggdGNwU29ja2V0LCAmcmZkcyApOwotICAgICAgICAgICAg
aWYgKCBjaGFubmVsQ29ubmVjdGlvbnMuYXQgKCBpICkuY2hhbm5lbD09MGwgKQorICAgICAgICAg
ICAgLy8gVHJ5IHRvIG1ha2UgYSBjaGFubmVsIGNvbm5lY3Rpb24KKyAgICAgICAgICAgIC8vIFRP
RE86IE1hYnllIGEgcmV0cnk/CisgICAgICAgICAgICBib29sIHJlcyA9IGNyZWF0ZUNoYW5uZWxD
b25uZWN0aW9uKGksIG1heHNvY2ssIHJmZHMsIHJlYWRfY2hhbik7CisgICAgICAgICAgICBpZiAo
IXJlcykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB4MmdvRGVidWc8PCJDcmVhdGlu
ZyBuZXcgY2hhbm5lbC4iPDxlbmRsOwotICAgICAgICAgICAgICAgIHNzaF9jaGFubmVsIGNoYW5u
ZWwgPSBzc2hfY2hhbm5lbF9uZXcgKCBteV9zc2hfc2Vzc2lvbiApOwotCi0gICAgICAgICAgICAg
ICAgaWYgKCFjaGFubmVsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyID0gc3No
X2dldF9lcnJvciAobXlfc3NoX3Nlc3Npb24pOwotICAgICAgICAgICAgICAgICAgICAvKjogQXJn
dW1lbnQgaW4gdGhpcyBjb250ZXh0IHdpbGwgYmUgYSBmdW5jdGlvbiBuYW1lLiAqLwotICAgICAg
ICAgICAgICAgICAgICBRU3RyaW5nIGVycm9yX21zZyA9IHRyICgiJTEgZmFpbGVkLiIpLmFyZyAo
InNzaF9jaGFubmVsX25ldyIpOwotICAgICAgICAgICAgICAgICAgICBlbWl0IGlvRXJyIChjaGFu
bmVsQ29ubmVjdGlvbnNbaV0uY3JlYXRvciwgZXJyb3JfbXNnLCBlcnIpOwotCi0gICAgICAgICAg
ICAgICAgICAgIHgyZ29EZWJ1ZyA8PCBlcnJvcl9tc2cubGVmdCAoZXJyb3JfbXNnLnNpemUgKCkg
LSAxKSA8PCAiOiAiIDw8IGVyciA8PCBlbmRsOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB4MmdvRGVidWc8PCJOZXcg
Y2hhbm5lbDoiPDxjaGFubmVsPDxlbmRsOwotICAgICAgICAgICAgICAgIGNoYW5uZWxDb25uZWN0
aW9uc1tpXS5jaGFubmVsPWNoYW5uZWw7Ci0gICAgICAgICAgICAgICAgaWYgKCB0Y3BTb2NrZXQ+
MCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwg
IkZvcndhcmRpbmcgcGFyYW1ldGVyczogZnJvbSByZW1vdGUgKCIgPDwgY2hhbm5lbENvbm5lY3Rp
b25zLmF0IChpKS5mb3J3YXJkSG9zdCA8PCAiOiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDw8IGNoYW5uZWxDb25uZWN0aW9ucy5hdCAoaSkuZm9yd2FyZFBvcnQgPDwgIikgdG8gbG9j
YWwgKCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGNoYW5uZWxDb25uZWN0aW9u
cy5hdCAoaSkubG9jYWxIb3N0IDw8ICI6IiA8PCBjaGFubmVsQ29ubmVjdGlvbnMuYXQgKGkpLmxv
Y2FsUG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIikiOwotCi0gICAgICAg
ICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAqIENhbm5vdCBzdXBwb3J0IGNv
bmZpZyBmaWxlIHBhcnNpbmcgaGVyZSB3aXRoIHByZS0wLjYuMCBsaWJzc2ggdmVyc2lvbnMuCi0g
ICAgICAgICAgICAgICAgICAgICAqIFRoZXJlJ3MganVzdCBubyB3YXkgdG8gZ2V0IHRoZSBpbmZl
cnJlZCBob3N0IGFuZCBwb3J0IHZhbHVlcy4KLSAgICAgICAgICAgICAgICAgICAgICovCi0jaWYg
TElCU1NIX1ZFUlNJT05fSU5UID49IFNTSF9WRVJTSU9OX0lOVCAoMCwgNiwgMCkKLSAgICAgICAg
ICAgICAgICAgICAgc3NoX3Nlc3Npb24gdG1wX3Nlc3Npb24gPSBzc2hfbmV3ICgpOwotCi0gICAg
ICAgICAgICAgICAgICAgIGlmICghdG1wX3Nlc3Npb24pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFFTdHJpbmcgZXJyb3JfbXNnID0gdHIgKCJDYW5ub3QgY3JlYXRlIFNTSCBzZXNzaW9uLiIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8IGVycm9yX21zZzsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGVtaXQgaW9FcnIgKGNoYW5uZWxDb25uZWN0aW9uc1tpXS5jcmVh
dG9yLCBlcnJvcl9tc2csICIiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFFCeXRlQXJyYXkgdG1wX0JB
ID0gY2hhbm5lbENvbm5lY3Rpb25zLmF0IChpKS5mb3J3YXJkSG9zdC50b0xvY2FsOEJpdCAoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB0bXBfcG9ydCA9IGNoYW5uZWxDb25u
ZWN0aW9ucy5hdCAoaSkuZm9yd2FyZFBvcnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNz
aF9vcHRpb25zX3NldCAodG1wX3Nlc3Npb24sIFNTSF9PUFRJT05TX0hPU1QsIHRtcF9CQS5kYXRh
ICgpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcF9wb3J0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3NoX29wdGlvbnNfc2V0ICh0bXBfc2Vzc2lvbiwgU1NIX09Q
VElPTlNfUE9SVCwgJnRtcF9wb3J0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGhvc3QgYW5kIHBvcnQgbWlnaHQgYmUgYSBzaG9y
dGhhbmQgYW5kIHplcm8sIHNvIGZldGNoIHRoZSBhY3R1YWwgZGF0YS4gKi8KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzc2hfb3B0aW9uc19wYXJzZV9jb25maWcgKHRtcF9zZXNzaW9uLCBO
VUxMKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIldh
cm5pbmc6IHVuYWJsZSB0byBwYXJzZSB0aGUgU1NIIGNvbmZpZyBmaWxlLiI7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBp
bmZlcnJlZF9wb3J0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNzaF9vcHRpb25zX2dl
dF9wb3J0ICh0bXBfc2Vzc2lvbiwgJmluZmVycmVkX3BvcnQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgeDJnb0RlYnVnIDw8ICJUZW1wb3Jhcnkgc2Vzc2lvbiBwb3J0IGFmdGVyIGNvbmZpZyBm
aWxlIHBhcnNlOiAiIDw8IGluZmVycmVkX3BvcnQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKmluZmVycmVkX2hvc3QgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgc3No
X29wdGlvbnNfZ2V0ICh0bXBfc2Vzc2lvbiwgU1NIX09QVElPTlNfSE9TVCwgJmluZmVycmVkX2hv
c3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJUZW1wb3Jhcnkgc2Vz
c2lvbiBob3N0IGFmdGVyIGNvbmZpZyBmaWxlIHBhcnNlOiAiIDw8IGluZmVycmVkX2hvc3Q7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxDb25uZWN0aW9uc1tpXS5mb3J3YXJkSG9z
dCA9IFFTdHJpbmcgKGluZmVycmVkX2hvc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hh
bm5lbENvbm5lY3Rpb25zW2ldLmZvcndhcmRQb3J0ID0gc3RhdGljX2Nhc3Q8aW50PiAoaW5mZXJy
ZWRfcG9ydCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNzaF9zdHJpbmdfZnJlZV9jaGFy
IChpbmZlcnJlZF9ob3N0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNzaF9mcmVlICh0bXBf
c2Vzc2lvbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFFCeXRlQXJyYXkgdG1wX0JBX2Zvcndh
cmQgPSBjaGFubmVsQ29ubmVjdGlvbnMuYXQgKGkpLmZvcndhcmRIb3N0LnRvTG9jYWw4Qml0ICgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgUUJ5dGVBcnJheSB0bXBfQkFfbG9jYWwgPSBjaGFu
bmVsQ29ubmVjdGlvbnMuYXQgKGkpLmxvY2FsSG9zdC50b0xvY2FsOEJpdCAoKTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBzc2hfY2hhbm5lbF9vcGVuX2ZvcndhcmQgKCBjaGFubmVs
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0bXBfQkFfZm9yd2FyZC5kYXRhICgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ29ubmVjdGlvbnMuYXQgKCBpICkuZm9y
d2FyZFBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRtcF9CQV9sb2NhbC5kYXRhICgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ29ubmVjdGlvbnMuYXQgKCBp
ICkubG9jYWxQb3J0ICkgIT0gU1NIX09LICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGVycj1zc2hfZ2V0X2Vycm9yICggbXlf
c3NoX3Nlc3Npb24gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGVycm9y
TXNnPXRyICggIiUxIGZhaWxlZC4iICkuYXJnICgic3NoX2NoYW5uZWxfb3Blbl9mb3J3YXJkIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdCBpb0VyciAoIGNoYW5uZWxDb25uZWN0
aW9uc1tpXS5jcmVhdG9yLCBlcnJvck1zZywgZXJyICk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeDJnb0RlYnVnPDxlcnJvck1zZy5sZWZ0IChlcnJvck1zZy5zaXplICgpIC0gMSk8PCI6
ICI8PGVycjw8ZW5kbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4MmdvRGVidWc8PCJOZXcgY2hhbm5lbCBmb3J3YXJkZWQuIjw8ZW5kbDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICB4MmdvRGVidWc8PCJFeGVjdXRpbmcgcmVtb3RlOiAiPDxjaGFubmVs
Q29ubmVjdGlvbnMuYXQgKCBpICkuY29tbWFuZDw8ZW5kbDsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCBzc2hfY2hhbm5lbF9vcGVuX3Nlc3Npb24gKCBjaGFubmVsICkgIT1TU0hfT0sgKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGVycj1z
c2hfZ2V0X2Vycm9yICggbXlfc3NoX3Nlc3Npb24gKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IFFTdHJpbmcgZXJyb3JNc2c9dHIgKCAiJTEgZmFpbGVkLiIgKS5hcmcgKCJzc2hfY2hhbm5lbF9v
cGVuX3Nlc3Npb24iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVtaXQgaW9FcnIgKCBjaGFu
bmVsQ29ubmVjdGlvbnNbaV0uY3JlYXRvciwgZXJyb3JNc2csIGVyciApOwotICAgICAgICAgICAg
ICAgICAgICAgICAgeDJnb0RlYnVnPDxlcnJvck1zZy5sZWZ0IChlcnJvck1zZy5zaXplICgpIC0g
MSk8PCI6ICI8PGVycjw8ZW5kbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmICggc3NoX2NoYW5uZWxfcmVxdWVzdF9leGVjICggY2hhbm5lbCwgY2hh
bm5lbENvbm5lY3Rpb25zW2ldLmNvbW1hbmQudG9MYXRpbjEoKSApICE9IFNTSF9PSyApCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyPXNz
aF9nZXRfZXJyb3IgKCBteV9zc2hfc2Vzc2lvbiApOwotICAgICAgICAgICAgICAgICAgICAgICAg
UVN0cmluZyBlcnJvck1zZz10ciAoICIlMSBmYWlsZWQuIiApLmFyZyAoInNzaF9jaGFubmVsX3Jl
cXVlc3RfZXhlYyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZW1pdCBpb0VyciAoIGNoYW5u
ZWxDb25uZWN0aW9uc1tpXS5jcmVhdG9yLCBlcnJvck1zZywgZXJyICk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB4MmdvRGVidWc8PGVycm9yTXNnLmxlZnQgKGVycm9yTXNnLnNpemUgKCkgLSAx
KTw8IjogIjw8ZXJyPDxlbmRsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgeDJnb0RlYnVnPDwiTmV3IGV4ZWMgY2hhbm5lbCBjcmVhdGVkLiI8PGVuZGw7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAgICB4Mmdv
RGVidWcgPDwgIkNvbm5lY3Rpb24gdG8gY2hhbm5lbCB3ZW50IHdyb25nLiI7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZWFkX2NoYW5baV09
Y2hhbm5lbENvbm5lY3Rpb25zLmF0ICggaSApLmNoYW5uZWw7Ci0gICAgICAgICAgICBpZiAoIHRj
cFNvY2tldD5tYXhzb2NrICkKLSAgICAgICAgICAgICAgICBtYXhzb2NrPXRjcFNvY2tldDsKICAg
ICAgICAgfQorCiAgICAgICAgIGNoYW5uZWxDb25uZWN0aW9uc011dGV4LnVubG9jaygpOwotICAg
ICAgICByZXR2YWw9c3NoX3NlbGVjdCAoIHJlYWRfY2hhbixvdXRfY2hhbixtYXhzb2NrKzEsJnJm
ZHMsJnR2ICk7Ci0gICAgICAgIGRlbGV0ZSBbXSByZWFkX2NoYW47Ci0gICAgICAgIGRlbGV0ZSBb
XSBvdXRfY2hhbjsKKyAgICAgICAgcmV0dmFsID0gc3NoX3NlbGVjdChyZWFkX2NoYW4sIG91dF9j
aGFuLCBtYXhzb2NrICsgMSwgJnJmZHMsICZ0dik7CisgICAgICAgIGRlbGV0ZVtdIHJlYWRfY2hh
bjsKKyAgICAgICAgZGVsZXRlW10gb3V0X2NoYW47CiAKLSAgICAgICAgaWYgKCByZXR2YWwgPT0g
LTEgKQorICAgICAgICBpZiAoU1NIX09LICE9IHJldHZhbCkKICAgICAgICAgewotICAgICAgICAg
ICAgeDJnb0RlYnVnPDwic2VsZWN0KCkgZXJyb3IuIjsKKyAgICAgICAgICAgIHgyZ29EZWJ1ZyA8
PCAic2VsZWN0KCkgZXJyb3IuIiA8PCBlbmRsOwogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KIAotICAgICAgICAvLyAgICAgICAgIHgyZ29EZWJ1Zzw8InNlbGVjdCBleGl0ZWQiPDxl
bmRsOwotCiAgICAgICAgIGNoYW5uZWxDb25uZWN0aW9uc011dGV4LmxvY2soKTsKLSAgICAgICAg
Zm9yICggaW50IGk9Y2hhbm5lbENvbm5lY3Rpb25zLnNpemUoKS0xOyBpPj0wOyAtLWkgKQorICAg
ICAgICBmb3IgKGludCBpID0gY2hhbm5lbENvbm5lY3Rpb25zLnNpemUoKSAtIDE7IGkgPj0gMDsg
LS1pKQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgdGNwU29ja2V0PWNoYW5uZWxDb25uZWN0
aW9ucy5hdCAoIGkgKS5zb2NrOwotICAgICAgICAgICAgc3NoX2NoYW5uZWwgY2hhbm5lbD1jaGFu
bmVsQ29ubmVjdGlvbnMuYXQgKCBpICkuY2hhbm5lbDsKLSAgICAgICAgICAgIGlmICggY2hhbm5l
bD09MGwgKQorICAgICAgICAgICAgaW50IHRjcFNvY2tldCA9IGNoYW5uZWxDb25uZWN0aW9ucy5h
dChpKS5zb2NrOworICAgICAgICAgICAgc3NoX2NoYW5uZWwgY2hhbm5lbCA9IGNoYW5uZWxDb25u
ZWN0aW9ucy5hdChpKS5jaGFubmVsOworICAgICAgICAgICAgaWYgKGNoYW5uZWwgPT0gMGwpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIHNzaF9jaGFubmVsX3Bv
bGwgKCBjaGFubmVsLDEgKSA+IDAgKQorICAgICAgICAgICAgaWYgKHNzaF9jaGFubmVsX3BvbGwo
Y2hhbm5lbCwgMSkgPiAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgICB4MmdvRGVidWc8PCJyZWFkIGVyciBkYXRhIGZyb20gY2hhbm5lbFxuIjsKLSAgICAg
ICAgICAgICAgICBuYnl0ZXMgPSBzc2hfY2hhbm5lbF9yZWFkICggY2hhbm5lbCwgYnVmZmVyLCBz
aXplb2YgKCBidWZmZXIgKS0xLCAxICk7Ci0gICAgICAgICAgICAgICAgZW1pdCBzdGRFcnIgKCBj
aGFubmVsQ29ubmVjdGlvbnNbaV0uY3JlYXRvciwgUUJ5dGVBcnJheSAoIGJ1ZmZlcixuYnl0ZXMg
KSApOworICAgICAgICAgICAgICAgIG5ieXRlcyA9IHNzaF9jaGFubmVsX3JlYWQoY2hhbm5lbCwg
YnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsIDEpOworICAgICAgICAgICAgICAgIGVtaXQgc3Rk
RXJyKGNoYW5uZWxDb25uZWN0aW9uc1tpXS5jcmVhdG9yLCBRQnl0ZUFycmF5KGJ1ZmZlciwgbmJ5
dGVzKSk7CiAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIHgyZ29EZWJ1Zzw8bmJ5dGVz
PDwiIGVyciBmcm9tIGNoYW5uZWwiPDxlbmRsOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
aW50IHJleiA9IHNzaF9jaGFubmVsX3BvbGwgKCBjaGFubmVsLCAwICk7Ci0gICAgICAgICAgICBp
ZiAoIHJlej09U1NIX0VPRiApCisgICAgICAgICAgICBpbnQgcmV6ID0gc3NoX2NoYW5uZWxfcG9s
bChjaGFubmVsLCAwKTsKKyAgICAgICAgICAgIGlmIChyZXogPT0gU1NIX0VPRikKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICB4MmdvRGVidWc8PCJFT0Ygb24gY2hhbm5lbCAiPDxjaGFu
bmVsPDwiOyBTc2hQcm9jZXNzIG9iamVjdDogIjw8Y2hhbm5lbENvbm5lY3Rpb25zW2ldLmNyZWF0
b3ItPnBpZDsKKyAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIkVPRiBvbiBjaGFubmVsICIg
PDwgY2hhbm5lbCA8PCAiOyBTc2hQcm9jZXNzIG9iamVjdDogIiA8PCBjaGFubmVsQ29ubmVjdGlv
bnNbaV0uY3JlYXRvci0+cGlkIDw8IGVuZGw7CiAKICAgICAgICAgICAgICAgICAvLy8vLy9GaW5p
c2hlZC8vLy8vLy8vCi0gICAgICAgICAgICAgICAgZmluYWxpemUgKCBpICk7CisgICAgICAgICAg
ICAgICAgZmluYWxpemUoaSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoIHJlej4wICkKKyAgICAgICAgICAgIGlmIChyZXogPiAwKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgeDJnb0Rl
YnVnPDwicmVhZCBkYXRhIGZyb20gY2hhbm5lbCAiPDxjaGFubmVsPDxlbmRsOwotICAgICAgICAg
ICAgICAgIG5ieXRlcyA9IHNzaF9jaGFubmVsX3JlYWQgKCBjaGFubmVsLCBidWZmZXIsIHNpemVv
ZiAoIGJ1ZmZlciApLTEsIDAgKTsKKyAgICAgICAgICAgICAgICBuYnl0ZXMgPSBzc2hfY2hhbm5l
bF9yZWFkKGNoYW5uZWwsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgLSAxLCAwKTsKICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1Zzw8bmJ5dGVzPDwiIGZyb20gY2hh
bm5lbCAiPDxjaGFubmVsPDxlbmRsOwotICAgICAgICAgICAgICAgIGlmICggbmJ5dGVzID4gMCAp
CisgICAgICAgICAgICAgICAgaWYgKG5ieXRlcyA+IDApCiAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoIHRjcFNvY2tldD4wICkKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHRjcFNvY2tldCA+IDApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggc2VuZCAoIHRjcFNvY2tldCxidWZmZXIsIG5ieXRlcywwICkgIT0gbmJ5
dGVzICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZW5kKHRjcFNvY2tldCwgYnVmZmVy
LCBuYnl0ZXMsIDApICE9IG5ieXRlcykKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGVyck1zZz10ciAoICJFcnJvciB3cml0aW5n
IHRvIHNvY2tldC4iICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnPDwi
RXJyb3Igd3JpdGluZyAiPDxuYnl0ZXM8PCIgdG8gVENQIHNvY2tldCI8PHRjcFNvY2tldDw8ZW5k
bDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0IGlvRXJyICggY2hhbm5lbENvbm5l
Y3Rpb25zW2ldLmNyZWF0b3IsZXJyTXNnLCIiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmluYWxpemUgKCBpICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBl
cnJNc2cgPSB0cigiRXJyb3Igd3JpdGluZyB0byBzb2NrZXQuIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJFcnJvciB3cml0aW5nICIgPDwgbmJ5dGVzIDw8ICIg
dG8gVENQIHNvY2tldCIgPDwgdGNwU29ja2V0IDw8IGVuZGw7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW1pdCBpb0VycihjaGFubmVsQ29ubmVjdGlvbnNbaV0uY3JlYXRvciwgZXJyTXNn
LCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoaSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICB4MmdvRGVi
dWc8PCJ3cm90ZSAiPDxuYnl0ZXM8PCIgdG8gdGNwIHNvY2tldCAiPDx0Y3BTb2NrZXQ8PGVuZGw7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbWl0IHN0ZE91dCAoIGNo
YW5uZWxDb25uZWN0aW9uc1tpXS5jcmVhdG9yLCBRQnl0ZUFycmF5ICggYnVmZmVyLG5ieXRlcyAp
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbWl0IHN0ZE91dChjaGFubmVsQ29ubmVjdGlv
bnNbaV0uY3JlYXRvciwgUUJ5dGVBcnJheShidWZmZXIsIG5ieXRlcykpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCBuYnl0
ZXMgPCAwICkKKyAgICAgICAgICAgICAgICBpZiAobmJ5dGVzIDwgMCkKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIC8vLy8vL0VSUk9SISEhISEvLy8vLy8vLwotICAgICAg
ICAgICAgICAgICAgICBRU3RyaW5nIGVycj1zc2hfZ2V0X2Vycm9yICggbXlfc3NoX3Nlc3Npb24g
KTsKLSAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBlcnJvck1zZz10ciAoICJFcnJvciByZWFk
aW5nIGNoYW5uZWwuIiApOwotICAgICAgICAgICAgICAgICAgICBlbWl0IGlvRXJyICggY2hhbm5l
bENvbm5lY3Rpb25zW2ldLmNyZWF0b3IsIGVycm9yTXNnLCBlcnIgKTsKLSAgICAgICAgICAgICAg
ICAgICAgeDJnb0RlYnVnPDxlcnJvck1zZzw8IiAtICI8PGVycjw8ZW5kbDsKLSAgICAgICAgICAg
ICAgICAgICAgZmluYWxpemUgKCBpICk7CisgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJy
ID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lvbik7CisgICAgICAgICAgICAgICAgICAgIFFT
dHJpbmcgZXJyb3JNc2cgPSB0cigiRXJyb3IgcmVhZGluZyBjaGFubmVsLiIpOworICAgICAgICAg
ICAgICAgICAgICBlbWl0IGlvRXJyKGNoYW5uZWxDb25uZWN0aW9uc1tpXS5jcmVhdG9yLCBlcnJv
ck1zZywgZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8IGVycm9yTXNnIDw8
ICIgLSAiIDw8IGVyciA8PCBlbmRsOworICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZShpKTsK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgaWYgKCBzc2hfY2hhbm5lbF9pc19lb2YgKCBjaGFubmVsICkgKQorICAgICAg
ICAgICAgICAgIGlmIChzc2hfY2hhbm5lbF9pc19lb2YoY2hhbm5lbCkpCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICB4MmdvRGVidWc8PCJFT0Ygb24gY2hhbm5lbCAiPDxj
aGFubmVsPDwiOyBTc2hQcm9jZXNzIG9iamVjdDogIjw8Y2hhbm5lbENvbm5lY3Rpb25zW2ldLmNy
ZWF0b3ItPnBpZDsKKyAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJFT0Ygb24gY2hh
bm5lbCAiIDw8IGNoYW5uZWwgPDwgIjsgU3NoUHJvY2VzcyBvYmplY3Q6ICIgPDwgY2hhbm5lbENv
bm5lY3Rpb25zW2ldLmNyZWF0b3ItPnBpZCA8PCBlbmRsOwogCiAgICAgICAgICAgICAgICAgICAg
IC8vLy8vL0ZpbmlzaGVkLy8vLy8vLy8KLSAgICAgICAgICAgICAgICAgICAgZmluYWxpemUgKCBp
ICk7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKGkpOwogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoIHRjcFNvY2tldDw9MCApCisgICAgICAgICAgICBpZiAodGNwU29ja2V0IDw9IDApCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoIEZEX0lTU0VUICggdGNwU29ja2V0LCZyZmRzICkgKQorICAgICAgICAg
ICAgaWYgKEZEX0lTU0VUKHRjcFNvY2tldCwgJnJmZHMpKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG5ieXRlcyA9IHJlY3YgKCB0Y3BTb2NrZXQsIGJ1ZmZlciwgc2l6ZW9mICggYnVm
ZmVyICktMSwwICk7CisgICAgICAgICAgICAgICAgbmJ5dGVzID0gcmVjdih0Y3BTb2NrZXQsIGJ1
ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgLSAxLCAwKTsKICAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgICAgICAgIHgyZ29EZWJ1Zzw8bmJ5dGVzPDwiIGJ5dGVzIGZyb20gdGNwIHNvY2tldCAiPDx0
Y3BTb2NrZXQ8PGVuZGw7Ci0gICAgICAgICAgICAgICAgaWYgKCBuYnl0ZXMgPiAwICkKKyAgICAg
ICAgICAgICAgICBpZiAobmJ5dGVzID4gMCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICggc3NoX2NoYW5uZWxfd3JpdGUgKCBjaGFubmVsLCBidWZmZXIsIG5ieXRl
cyApICE9bmJ5dGVzICkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNzaF9jaGFubmVsX3dyaXRl
KGNoYW5uZWwsIGJ1ZmZlciwgbmJ5dGVzKSAhPSBuYnl0ZXMpCiAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyPXNzaF9nZXRfZXJyb3IgKCBt
eV9zc2hfc2Vzc2lvbiApOwotICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBlcnJvck1z
Zz10ciAoICIlMSBmYWlsZWQuIiApLmFyZyAoInNzaF9jaGFubmVsX3dyaXRlIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbWl0IGlvRXJyICggY2hhbm5lbENvbm5lY3Rpb25zW2ldLmNyZWF0
b3IsIGVycm9yTXNnLCBlcnIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1Zzw8
ZXJyb3JNc2cubGVmdCAoZXJyb3JNc2cuc2l6ZSAoKSAtIDEpPDwiOiAiPDxlcnI8PGVuZGw7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSAoIGkgKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFFTdHJpbmcgZXJyID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lvbik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGVycm9yTXNnID0gdHIoIiUxIGZhaWxlZC4iKS5h
cmcoInNzaF9jaGFubmVsX3dyaXRlIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbWl0IGlv
RXJyKGNoYW5uZWxDb25uZWN0aW9uc1tpXS5jcmVhdG9yLCBlcnJvck1zZywgZXJyKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCBlcnJvck1zZy5sZWZ0KGVycm9yTXNnLnNp
emUoKSAtIDEpIDw8ICI6ICIgPDwgZXJyIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmaW5hbGl6ZShpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgIHgyZ29EZWJ1Zzw8bmJ5dGVzPDwiIGJ5dGVzIHdyb3RlIHRvIGNoYW5uZWwiPDxjaGFubmVs
PDxlbmRsOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIG5ieXRlcyA8
IDAgKQorICAgICAgICAgICAgICAgIGlmIChuYnl0ZXMgPCAwKQogICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8vLy8vRVJST1IhISEhIS8vLy8vLy8vCi0gICAgICAgICAg
ICAgICAgICAgIFFTdHJpbmcgZXJyPSIiOwotICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGVy
cm9yTXNnPXRyICggIkVycm9yIHJlYWRpbmcgZnJvbSBUQ1Agc29ja2V0LiIgKTsKLSAgICAgICAg
ICAgICAgICAgICAgZW1pdCBpb0VyciAoIGNoYW5uZWxDb25uZWN0aW9uc1tpXS5jcmVhdG9yLCBl
cnJvck1zZywgZXJyICk7Ci0gICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1Zzw8ZXJyb3JNc2c8
PCIgLSAiPDxlcnI8PGVuZGw7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsaXplICggaSApOwor
ICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGVyciA9ICIiOworICAgICAgICAgICAgICAgICAg
ICBRU3RyaW5nIGVycm9yTXNnID0gdHIoIkVycm9yIHJlYWRpbmcgZnJvbSBUQ1Agc29ja2V0LiIp
OworICAgICAgICAgICAgICAgICAgICBlbWl0IGlvRXJyKGNoYW5uZWxDb25uZWN0aW9uc1tpXS5j
cmVhdG9yLCBlcnJvck1zZywgZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8
IGVycm9yTXNnIDw8ICIgLSAiIDw8IGVyciA8PCBlbmRsOworICAgICAgICAgICAgICAgICAgICBm
aW5hbGl6ZShpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGlmICggbmJ5dGVzPT0wICkKKyAgICAgICAgICAgICAgICBp
ZiAobmJ5dGVzID09IDApCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB4
MmdvRGVidWc8PCJTb2NrZXQgIjw8dGNwU29ja2V0PDwiIGNsb3NlZC4iPDxlbmRsOwotICAgICAg
ICAgICAgICAgICAgICBmaW5hbGl6ZSAoIGkgKTsKKyAgICAgICAgICAgICAgICAgICAgeDJnb0Rl
YnVnIDw8ICJTb2NrZXQgIiA8PCB0Y3BTb2NrZXQgPDwgIiBjbG9zZWQuIiA8PCBlbmRsOworICAg
ICAgICAgICAgICAgICAgICBmaW5hbGl6ZShpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjIxMiwzNCArMjExMiwx
NjkgQEAgdm9pZCBTc2hNYXN0ZXJDb25uZWN0aW9uOjpjaGFubmVsTG9vcCgpCiAgICAgfQogfQog
Ci12b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OmZpbmFsaXplICggaW50IGl0ZW0gKQorLyoqCisg
KiBDcmVhdGUgU1NIIGNoYW5uZWwgY29ubmVjdGlvbiAodXNlZCB3aXRoaW4gYSBsb29wIG9mIGNo
YW5uZWxzKQorICovCitib29sIFNzaE1hc3RlckNvbm5lY3Rpb246OmNyZWF0ZUNoYW5uZWxDb25u
ZWN0aW9uKGludCBpLCBpbnQgJm1heHNvY2ssIGZkX3NldCAmcmZkcywgc3NoX2NoYW5uZWwgcmVh
ZF9jaGFuW10pCiB7Ci0gICAgaW50IHRjcFNvY2tldD1jaGFubmVsQ29ubmVjdGlvbnMuYXQgKCBp
dGVtICkuc29jazsKLSAgICBzc2hfY2hhbm5lbCBjaGFubmVsPWNoYW5uZWxDb25uZWN0aW9ucy5h
dCAoIGl0ZW0gKS5jaGFubmVsOwotICAgIGlmICggY2hhbm5lbCApCisgICAgaW50IHRjcFNvY2tl
dCA9IGNoYW5uZWxDb25uZWN0aW9ucy5hdChpKS5zb2NrOworICAgIGlmICh0Y3BTb2NrZXQgPiAw
KQorICAgICAgICBGRF9TRVQodGNwU29ja2V0LCAmcmZkcyk7CisgICAgaWYgKGNoYW5uZWxDb25u
ZWN0aW9ucy5hdChpKS5jaGFubmVsID09IDBsKQogICAgIHsKLSAgICAgICAgc3NoX2NoYW5uZWxf
c2VuZF9lb2YgKCBjaGFubmVsICk7Ci0gICAgICAgIHgyZ29EZWJ1Zzw8IkVPRiBzZW50LiI7Ci0g
ICAgICAgIHNzaF9jaGFubmVsX2Nsb3NlICggY2hhbm5lbCApOwotICAgICAgICB4MmdvRGVidWc8
PCJDaGFubmVsIGNsb3NlZC4iOwotICAgICAgICBzc2hfY2hhbm5lbF9mcmVlICggY2hhbm5lbCAp
OworICAgICAgICB4MmdvRGVidWcgPDwgIkNyZWF0aW5nIG5ldyBjaGFubmVsLiIgPDwgZW5kbDsK
KworICAgICAgICBzc2hfY2hhbm5lbCBjaGFubmVsID0gc3NoX2NoYW5uZWxfbmV3KG15X3NzaF9z
ZXNzaW9uKTsKKyAgICAgICAgaWYgKCFjaGFubmVsKQorICAgICAgICB7CisgICAgICAgICAgICBR
U3RyaW5nIGVyciA9IHNzaF9nZXRfZXJyb3IobXlfc3NoX3Nlc3Npb24pOworICAgICAgICAgICAg
Lyo6IEFyZ3VtZW50IGluIHRoaXMgY29udGV4dCB3aWxsIGJlIGEgZnVuY3Rpb24gbmFtZS4gKi8K
KyAgICAgICAgICAgIFFTdHJpbmcgZXJyb3JfbXNnID0gdHIoIiUxIGZhaWxlZC4iKS5hcmcoInNz
aF9jaGFubmVsX25ldyIpOworICAgICAgICAgICAgZW1pdCBpb0VycihjaGFubmVsQ29ubmVjdGlv
bnNbaV0uY3JlYXRvciwgZXJyb3JfbXNnLCBlcnIpOworCisgICAgICAgICAgICB4MmdvRGVidWcg
PDwgZXJyb3JfbXNnLmxlZnQoZXJyb3JfbXNnLnNpemUoKSAtIDEpIDw8ICI6ICIgPDwgZXJyIDw8
IGVuZGw7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgeDJn
b0RlYnVnIDw8ICJOZXcgY2hhbm5lbDoiIDw8IGNoYW5uZWwgPDwgZW5kbDsKKyAgICAgICAgY2hh
bm5lbENvbm5lY3Rpb25zW2ldLmNoYW5uZWwgPSBjaGFubmVsOworICAgICAgICBpZiAodGNwU29j
a2V0ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgeDJnb0RlYnVnIDw8ICJGb3J3YXJkaW5n
IHBhcmFtZXRlcnM6IGZyb20gcmVtb3RlICgiIDw8IGNoYW5uZWxDb25uZWN0aW9ucy5hdChpKS5m
b3J3YXJkSG9zdCA8PCAiOiIKKyAgICAgICAgICAgICAgICAgICAgICA8PCBjaGFubmVsQ29ubmVj
dGlvbnMuYXQoaSkuZm9yd2FyZFBvcnQgPDwgIikgdG8gbG9jYWwgKCIKKyAgICAgICAgICAgICAg
ICAgICAgICA8PCBjaGFubmVsQ29ubmVjdGlvbnMuYXQoaSkubG9jYWxIb3N0IDw8ICI6IiA8PCBj
aGFubmVsQ29ubmVjdGlvbnMuYXQoaSkubG9jYWxQb3J0CisgICAgICAgICAgICAgICAgICAgICAg
PDwgIikiOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICogQ2Fubm90IHN1cHBv
cnQgY29uZmlnIGZpbGUgcGFyc2luZyBoZXJlIHdpdGggcHJlLTAuNi4wIGxpYnNzaCB2ZXJzaW9u
cy4KKyAgICAgICAgICAgICAgICAqIFRoZXJlJ3MganVzdCBubyB3YXkgdG8gZ2V0IHRoZSBpbmZl
cnJlZCBob3N0IGFuZCBwb3J0IHZhbHVlcy4KKyAgICAgICAgICAgICAgICAqLworI2lmIExJQlNT
SF9WRVJTSU9OX0lOVCA+PSBTU0hfVkVSU0lPTl9JTlQoMCwgNiwgMCkKKyAgICAgICAgICAgIHNz
aF9zZXNzaW9uIHRtcF9zZXNzaW9uID0gc3NoX25ldygpOworCisgICAgICAgICAgICBpZiAoIXRt
cF9zZXNzaW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyb3Jf
bXNnID0gdHIoIkNhbm5vdCBjcmVhdGUgU1NIIHNlc3Npb24uIik7CisgICAgICAgICAgICAgICAg
eDJnb0RlYnVnIDw8IGVycm9yX21zZyA8PCBlbmRsOworICAgICAgICAgICAgICAgIGVtaXQgaW9F
cnIoY2hhbm5lbENvbm5lY3Rpb25zW2ldLmNyZWF0b3IsIGVycm9yX21zZywgIiIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IFFCeXRlQXJyYXkgdG1wX0JBID0gY2hhbm5lbENvbm5lY3Rpb25zLmF0KGkpLmZvcndhcmRIb3N0
LnRvTG9jYWw4Qml0KCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHRtcF9wb3J0ID0gY2hh
bm5lbENvbm5lY3Rpb25zLmF0KGkpLmZvcndhcmRQb3J0OworCisgICAgICAgICAgICAgICAgc3No
X29wdGlvbnNfc2V0KHRtcF9zZXNzaW9uLCBTU0hfT1BUSU9OU19IT1NULCB0bXBfQkEuZGF0YSgp
KTsKKworICAgICAgICAgICAgICAgIGlmICh0bXBfcG9ydCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHNzaF9vcHRpb25zX3NldCh0bXBfc2Vzc2lvbiwgU1NIX09QVElP
TlNfUE9SVCwgJnRtcF9wb3J0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvKiBUaGUgaG9zdCBhbmQgcG9ydCBtaWdodCBiZSBhIHNob3J0aGFuZCBhbmQgemVybywgc28g
ZmV0Y2ggdGhlIGFjdHVhbCBkYXRhLiAqLworICAgICAgICAgICAgICAgIGlmIChzc2hfb3B0aW9u
c19wYXJzZV9jb25maWcodG1wX3Nlc3Npb24sIE5VTEwpIDwgMCkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiV2FybmluZzogdW5hYmxlIHRvIHBh
cnNlIHRoZSBTU0ggY29uZmlnIGZpbGUuIiA8PCBlbmRsOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbmZlcnJlZF9wb3J0ID0gMDsKKyAgICAgICAg
ICAgICAgICBzc2hfb3B0aW9uc19nZXRfcG9ydCh0bXBfc2Vzc2lvbiwgJmluZmVycmVkX3BvcnQp
OworICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiVGVtcG9yYXJ5IHNlc3Npb24gcG9ydCBh
ZnRlciBjb25maWcgZmlsZSBwYXJzZTogIiA8PCBpbmZlcnJlZF9wb3J0IDw8IGVuZGw7CisKKyAg
ICAgICAgICAgICAgICBjaGFyICppbmZlcnJlZF9ob3N0ID0gTlVMTDsKKyAgICAgICAgICAgICAg
ICBzc2hfb3B0aW9uc19nZXQodG1wX3Nlc3Npb24sIFNTSF9PUFRJT05TX0hPU1QsICZpbmZlcnJl
ZF9ob3N0KTsKKyAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgIlRlbXBvcmFyeSBzZXNzaW9u
IGhvc3QgYWZ0ZXIgY29uZmlnIGZpbGUgcGFyc2U6ICIgPDwgaW5mZXJyZWRfaG9zdCA8PCBlbmRs
OworCisgICAgICAgICAgICAgICAgY2hhbm5lbENvbm5lY3Rpb25zW2ldLmZvcndhcmRIb3N0ID0g
UVN0cmluZyhpbmZlcnJlZF9ob3N0KTsKKyAgICAgICAgICAgICAgICBjaGFubmVsQ29ubmVjdGlv
bnNbaV0uZm9yd2FyZFBvcnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGluZmVycmVkX3BvcnQpOworCisg
ICAgICAgICAgICAgICAgc3NoX3N0cmluZ19mcmVlX2NoYXIoaW5mZXJyZWRfaG9zdCk7CisgICAg
ICAgICAgICAgICAgc3NoX2ZyZWUodG1wX3Nlc3Npb24pOworICAgICAgICAgICAgfQorI2VuZGlm
CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBRQnl0ZUFycmF5IHRtcF9CQV9mb3J3
YXJkID0gY2hhbm5lbENvbm5lY3Rpb25zLmF0KGkpLmZvcndhcmRIb3N0LnRvTG9jYWw4Qml0KCk7
CisgICAgICAgICAgICAgICAgUUJ5dGVBcnJheSB0bXBfQkFfbG9jYWwgPSBjaGFubmVsQ29ubmVj
dGlvbnMuYXQoaSkubG9jYWxIb3N0LnRvTG9jYWw4Qml0KCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoc3NoX2NoYW5uZWxfb3Blbl9mb3J3YXJkKGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfQkFfZm9yd2FyZC5kYXRhKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ29ubmVjdGlvbnMu
YXQoaSkuZm9yd2FyZFBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0bXBfQkFfbG9jYWwuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhbm5lbENvbm5lY3Rpb25zLmF0KGkpLmxvY2FsUG9ydCkgIT0g
U1NIX09LKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBl
cnIgPSBzc2hfZ2V0X2Vycm9yKG15X3NzaF9zZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAg
UVN0cmluZyBlcnJvck1zZyA9IHRyKCIlMSBmYWlsZWQuIikuYXJnKCJzc2hfY2hhbm5lbF9vcGVu
X2ZvcndhcmQiKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdCBpb0VycihjaGFubmVsQ29ubmVj
dGlvbnNbaV0uY3JlYXRvciwgZXJyb3JNc2csIGVycik7CisgICAgICAgICAgICAgICAgICAgIHgy
Z29EZWJ1ZyA8PCBlcnJvck1zZy5sZWZ0KGVycm9yTXNnLnNpemUoKSAtIDEpIDw8ICI6ICIgPDwg
ZXJyIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHgyZ29EZWJ1ZyA8PCAiTmV3IGNo
YW5uZWwgZm9yd2FyZGVkLiIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB4Mmdv
RGVidWcgPDwgIkV4ZWN1dGluZyByZW1vdGU6ICIgPDwgY2hhbm5lbENvbm5lY3Rpb25zLmF0KGkp
LmNvbW1hbmQgPDwgZW5kbDsKKyAgICAgICAgICAgIGlmIChzc2hfY2hhbm5lbF9vcGVuX3Nlc3Np
b24oY2hhbm5lbCkgIT0gU1NIX09LKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFFT
dHJpbmcgZXJyID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lvbik7CisgICAgICAgICAgICAg
ICAgUVN0cmluZyBlcnJvck1zZyA9IHRyKCIlMSBmYWlsZWQuIikuYXJnKCJzc2hfY2hhbm5lbF9v
cGVuX3Nlc3Npb24iKTsKKworICAgICAgICAgICAgICAgIC8vIEZyZWUgY2hhbm5lbAorICAgICAg
ICAgICAgICAgIHNzaF9jaGFubmVsX2ZyZWUoY2hhbm5lbCk7CisgICAgICAgICAgICAgICAgZW1p
dCBpb0VycihjaGFubmVsQ29ubmVjdGlvbnNbaV0uY3JlYXRvciwgZXJyb3JNc2csIGVycik7Cisg
ICAgICAgICAgICAgICAgeDJnb0RlYnVnIDw8IGVycm9yTXNnLmxlZnQoZXJyb3JNc2cuc2l6ZSgp
IC0gMSkgPDwgIjogIiA8PCBlcnIgPDwgZW5kbDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChzc2hfY2hhbm5lbF9yZXF1
ZXN0X2V4ZWMoY2hhbm5lbCwgY2hhbm5lbENvbm5lY3Rpb25zW2ldLmNvbW1hbmQudG9MYXRpbjEo
KSkgIT0gU1NIX09LKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJy
ID0gc3NoX2dldF9lcnJvcihteV9zc2hfc2Vzc2lvbik7CisgICAgICAgICAgICAgICAgUVN0cmlu
ZyBlcnJvck1zZyA9IHRyKCIlMSBmYWlsZWQuIikuYXJnKCJzc2hfY2hhbm5lbF9yZXF1ZXN0X2V4
ZWMiKTsKKworICAgICAgICAgICAgICAgIC8vIEZyZWUgY2xvc2UgY29ubmVjdGlvbiBhbmQgZnJl
ZSBjaGFubmVsCisgICAgICAgICAgICAgICAgc3NoX2NoYW5uZWxfY2xvc2UoY2hhbm5lbCk7Cisg
ICAgICAgICAgICAgICAgc3NoX2NoYW5uZWxfZnJlZShjaGFubmVsKTsKKyAgICAgICAgICAgICAg
ICBlbWl0IGlvRXJyKGNoYW5uZWxDb25uZWN0aW9uc1tpXS5jcmVhdG9yLCBlcnJvck1zZywgZXJy
KTsKKyAgICAgICAgICAgICAgICB4MmdvRGVidWcgPDwgZXJyb3JNc2cubGVmdChlcnJvck1zZy5z
aXplKCkgLSAxKSA8PCAiOiAiIDw8IGVyciA8PCBlbmRsOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBFdmVyeXRoaW5nIGlzIE9LCisgICAgICAgICAgICAgICAgeDJn
b0RlYnVnIDw8ICJOZXcgZXhlYyBjaGFubmVsIGNyZWF0ZWQuIiA8PCBlbmRsOworICAgICAgICAg
ICAgfQorICAgICAgICB9CiAgICAgfQotICAgIGlmICggdGNwU29ja2V0PjAgKQorICAgIHJlYWRf
Y2hhbltpXSA9IGNoYW5uZWxDb25uZWN0aW9ucy5hdChpKS5jaGFubmVsOworICAgIGlmICh0Y3BT
b2NrZXQgPiBtYXhzb2NrKQorICAgICAgICBtYXhzb2NrID0gdGNwU29ja2V0OworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFNzaE1hc3RlckNvbm5lY3Rpb246OmZpbmFsaXplKGludCBpdGVt
KQoreworICAgIGludCB0Y3BTb2NrZXQgPSBjaGFubmVsQ29ubmVjdGlvbnMuYXQoaXRlbSkuc29j
azsKKyAgICBzc2hfY2hhbm5lbCBjaGFubmVsID0gY2hhbm5lbENvbm5lY3Rpb25zLmF0KGl0ZW0p
LmNoYW5uZWw7CisgICAgaWYgKGNoYW5uZWwpCisgICAgeworICAgICAgICBzc2hfY2hhbm5lbF9z
ZW5kX2VvZihjaGFubmVsKTsKKyAgICAgICAgeDJnb0RlYnVnIDw8ICJFT0Ygc2VudC4iIDw8IGVu
ZGw7CisgICAgICAgIHNzaF9jaGFubmVsX2Nsb3NlKGNoYW5uZWwpOworICAgICAgICB4MmdvRGVi
dWcgPDwgIkNoYW5uZWwgY2xvc2VkLiIgPDwgZW5kbDsKKyAgICAgICAgc3NoX2NoYW5uZWxfZnJl
ZShjaGFubmVsKTsKKyAgICB9CisgICAgaWYgKHRjcFNvY2tldCA+IDApCiAgICAgewogI2lmbmRl
ZiBRX09TX1dJTgogICAgICAgICBzaHV0ZG93bih0Y3BTb2NrZXQsIFNIVVRfUkRXUik7Ci0gICAg
ICAgIGNsb3NlICggdGNwU29ja2V0ICk7CisgICAgICAgIGNsb3NlKHRjcFNvY2tldCk7CiAjZWxz
ZQogICAgICAgICBzaHV0ZG93bih0Y3BTb2NrZXQsIFNEX0JPVEgpOwotICAgICAgICBjbG9zZXNv
Y2tldCAoIHRjcFNvY2tldCApOworICAgICAgICBjbG9zZXNvY2tldCh0Y3BTb2NrZXQpOwogI2Vu
ZGlmCiAgICAgfQotICAgIFNzaFByb2Nlc3MqIHByb2M9Y2hhbm5lbENvbm5lY3Rpb25zW2l0ZW1d
LmNyZWF0b3I7Ci0gICAgUVN0cmluZyB1dWlkPWNoYW5uZWxDb25uZWN0aW9uc1tpdGVtXS51dWlk
OwotICAgIGNoYW5uZWxDb25uZWN0aW9ucy5yZW1vdmVBdCAoIGl0ZW0gKTsKLSAgICBlbWl0IGNo
YW5uZWxDbG9zZWQgKCBwcm9jLCB1dWlkICk7CisgICAgU3NoUHJvY2VzcyAqcHJvYyA9IGNoYW5u
ZWxDb25uZWN0aW9uc1tpdGVtXS5jcmVhdG9yOworICAgIFFTdHJpbmcgdXVpZCA9IGNoYW5uZWxD
b25uZWN0aW9uc1tpdGVtXS51dWlkOworICAgIGNoYW5uZWxDb25uZWN0aW9ucy5yZW1vdmVBdChp
dGVtKTsKKyAgICBlbWl0IGNoYW5uZWxDbG9zZWQocHJvYywgdXVpZCk7CiB9Ci0KLQotCi0KZGlm
ZiAtLWdpdCBhL3NyYy9zc2htYXN0ZXJjb25uZWN0aW9uLmggYi9zcmMvc3NobWFzdGVyY29ubmVj
dGlvbi5oCmluZGV4IGZmYjg1M2IuLjIzYWJmYjEgMTAwNjQ0Ci0tLSBhL3NyYy9zc2htYXN0ZXJj
b25uZWN0aW9uLmgKKysrIGIvc3JjL3NzaG1hc3RlcmNvbm5lY3Rpb24uaApAQCAtMTM0LDYgKzEz
NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCB1c2VyQXV0aEtyYigpOwogICAgIGJvb2wgdXNlckF1
dGhLZXlib2FyZEludGVyYWN0aXZlKFFTdHJpbmcgcHJvbXB0KTsKICAgICB2b2lkIGNoYW5uZWxM
b29wKCk7CisgICAgYm9vbCBjcmVhdGVDaGFubmVsQ29ubmVjdGlvbihpbnQgaSwgaW50JiBtYXhz
b2NrLCBmZF9zZXQmIHJmZHMsIHNzaF9jaGFubmVsIHJlYWRfY2hhbltdKTsKICAgICB2b2lkIGZp
bmFsaXplKGludCBhcmcxKTsKICAgICB2b2lkIGNvcHkoKTsKICAgICBpbnQgc2VydmVyQXV0aChR
U3RyaW5nJiBlcnJvck1zZyk7Cg==


--b1_d4bbc6fe9ba24f53adc087369873ae07--
