delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2023/09/27/06:51:43

X-Recipient: archive-cygwin AT delorie DOT com
DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7FC1D3861805
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com;
s=default; t=1695811900;
bh=JEhVuXrJq141V2WH/iDyKcj69G2+jolqklOEKsK+xY0=;
h=Date:To:Subject:In-Reply-To:References:List-Id:List-Unsubscribe:
List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:
From;
b=wp9h5rYT7k+z8NLIPqp1kbfLVgXzOGVAr0R4AY5R782Zp18dcOPcW9S+X6XN6knQK
o1VDyZ4YppC3R2sKOZRen/mmWAepWptjtWTaQtycshFS25obxQbxf1am3iHAyC48qk
knvOp3oZvxdeaitMt5FlgJVRYmxl8OP2oMyW7Udw=
X-Original-To: cygwin AT cygwin DOT com
Delivered-To: cygwin AT cygwin DOT com
DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D1FC03858436
Date: Wed, 27 Sep 2023 19:50:39 +0900
To: cygwin AT cygwin DOT com
Subject: Re: std::runtime_error on std::locale("")
Message-Id: <20230927195039.e62f7482898ab5615cc1605b@nifty.ne.jp>
In-Reply-To: <20230923172359.d854a5a98afbc44beaf50c78@nifty.ne.jp>
References: <20230922011204 DOT bb166498090e6cbe163349f3 AT nifty DOT ne DOT jp>
<87o7huzos2 DOT fsf AT Otto DOT invalid>
<20230923172359 DOT d854a5a98afbc44beaf50c78 AT nifty DOT ne DOT jp>
X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32)
Mime-Version: 1.0
X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00, GIT_PATCH_0,
KAM_DMARC_STATUS, KAM_SHORT, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS,
SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on
server2.sourceware.org
X-BeenThere: cygwin AT cygwin DOT com
X-Mailman-Version: 2.1.30
List-Id: General Cygwin discussions and problem reports <cygwin.cygwin.com>
List-Unsubscribe: <https://cygwin.com/mailman/options/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=unsubscribe>
List-Archive: <https://cygwin.com/pipermail/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-request AT cygwin DOT com?subject=help>
List-Subscribe: <https://cygwin.com/mailman/listinfo/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=subscribe>
From: Takashi Yano via Cygwin <cygwin AT cygwin DOT com>
Reply-To: Takashi Yano <takashi DOT yano AT nifty DOT ne DOT jp>
Errors-To: cygwin-bounces+archive-cygwin=delorie DOT com AT cygwin DOT com
Sender: "Cygwin" <cygwin-bounces+archive-cygwin=delorie DOT com AT cygwin DOT com>

This is a multi-part message in MIME format.

--Multipart=_Wed__27_Sep_2023_19_50_39_+0900_=sZ.W=81WNihN9Sy
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

Hi Achim,

On Sat, 23 Sep 2023 17:23:59 +0900
Takashi Yano via Cygwin <cygwin AT cygwin DOT com> wrote:
> On Fri, 22 Sep 2023 08:48:45 +0200
> ASSI  wrote:
> > Takashi Yano via Cygwin writes:
> > > I wonder why the following code throws std::runtime_error
> > > even though the LC_ALL is set to valid locale other than "C".
> > > This does not occur only when LC_ALL is set to "C".
> > 
> > This functionality is currently only supported for Glibc targets in
> > libstdc++.  I seem to remember that I've looked into this some time ago,
> > but there didn't seem to be an easy way of enabling it for Cygwin at
> > that time.
> 
> Thanks for the answer.
> 
> It might not be an easy way, but I tried to enabling the locale
> feature for libstdc++.
> 
> Please try:
> 
> 1) Run cygport gcc prep
> 2) Remove libstdc++-v3/config/locale/generic
> 3) Copy libstdc++-v3/config/locale/gnu to libstdc++-v3/config/locale/generic
> 4) Apply patches attached to the working source directory.
> 5) Run cygport gcc compile
> 
> I also tried to automate above steps in gcc.cygport.
> 
> Further, I tested and confirmed that a few test cases works as expected.
> 
> What do you think of this idea?

I have a new revised draft patch. The patch attached is against
the HEAD of upstream gcc repository. However, it can be applied
to 11.4.0 as well if s/c++11/c++98/g.

This is not a last-minute job like last time, but a full rework.

Any advice or comment would be appreciated.

-- 
Takashi Yano <takashi DOT yano AT nifty DOT ne DOT jp>

--Multipart=_Wed__27_Sep_2023_19_50_39_+0900_=sZ.W=81WNihN9Sy
Content-Type: text/plain;
 name="0001-libstdc-Implement-most-of-locale-features-for-newlib.patch"
Content-Disposition: attachment;
 filename="0001-libstdc-Implement-most-of-locale-features-for-newlib.patch"
Content-Transfer-Encoding: base64

RnJvbSAwMjY4NWJiZjc2NDNmNjJkMWE4YjM4MGI2MDQ5YzM3ZWRmZGY0MzFhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQ0KRnJvbTogVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHkubmUu
anA+DQpEYXRlOiBTdW4sIDI0IFNlcCAyMDIzIDEzOjEzOjA4ICswOTAwDQpTdWJqZWN0OiBbUEFU
Q0hdIGxpYnN0ZGMrKzogSW1wbGVtZW50IG1vc3Qgb2YgbG9jYWxlIGZlYXR1cmVzIGZvciBuZXds
aWIuDQoNClByZXZpb3VzbHksIGxvY2FsZSBpbXBsZW1lbnRhdGlvbiBmb3IgbmV3bGliIHN1cHBv
cnRzIG9ubHkgIkMiIGxvY2FsZS4NCldpdGggdGhpcyBwYXRjaCwgdGhlIGxvY2FsZSBpbXBsZW1l
bnRhdGlvbiBmb3IgbmV3bGliIGhhcyBiZWVuIG11Y2gNCmltcHJvdmVkIHVzaW5nIG5ld2xpYiBm
dW5jdGlvbmFsaXR5IGN1cnJlbnRseSBzdXBwb3J0ZWQgc28gdGhhdCBtb3N0DQpvZiBsb2NhbGUg
ZmVhdHVyZXMgY2FuIGJlIHVzZWQuIFRoZSBtb3N0IG9mIHRoZSBjb2RlcyBhcmUgYmFzZWQgb24N
CnRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIEdOVSBsaWJjLg0KLS0tDQogbGlic3RkYysrLXYz
L01ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsNCiBsaWJzdGRjKystdjMv
YWNpbmNsdWRlLm00ICAgICAgICAgICAgICAgICAgICAgfCAgMjggKy0NCiAuLi4vY29uZmlnL2xv
Y2FsZS9kcmFnb25mbHkvY19sb2NhbGUuY2MgICAgICAgfCAgIDEgKw0KIC4uLi9jb25maWcvbG9j
YWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgICAgICAgICB8ICAgMSArDQogbGlic3RkYysrLXYzL2Nv
bmZpZy9sb2NhbGUvZ251L2NfbG9jYWxlLmNjICAgIHwgICAxICsNCiAuLi4vbG9jYWxlL2llZWVf
MTAwMy4xLTIwMDEvY19sb2NhbGUuY2MgICAgICAgfCAgIDIgKw0KIC4uLi9jb25maWcvbG9jYWxl
L25ld2xpYi9jKytsb2NhbGVfaW50ZXJuYWwuaCB8ICA5NSArKw0KIGxpYnN0ZGMrKy12My9jb25m
aWcvbG9jYWxlL25ld2xpYi9jX2xvY2FsZS5jYyB8IDM4NCArKysrKysrDQogbGlic3RkYysrLXYz
L2NvbmZpZy9sb2NhbGUvbmV3bGliL2NfbG9jYWxlLmggIHwgIDgyICsrDQogLi4uL2NvbmZpZy9s
b2NhbGUvbmV3bGliL2NvZGVjdnRfbWVtYmVycy5jYyAgIHwgMjg4ICsrKysrKw0KIC4uLi9jb25m
aWcvbG9jYWxlL25ld2xpYi9jb2xsYXRlX21lbWJlcnMuY2MgICB8ICA3NCArKw0KIC4uLi9jb25m
aWcvbG9jYWxlL25ld2xpYi9jdHlwZV9tZW1iZXJzLmNjICAgICB8ICA1OCArLQ0KIC4uLi9jb25m
aWcvbG9jYWxlL25ld2xpYi9tZXNzYWdlc19tZW1iZXJzLmNjICB8IDE3MyArKysrDQogLi4uL2Nv
bmZpZy9sb2NhbGUvbmV3bGliL21lc3NhZ2VzX21lbWJlcnMuaCAgIHwgMTUyICsrKw0KIC4uLi9j
b25maWcvbG9jYWxlL25ld2xpYi9tb25ldGFyeV9tZW1iZXJzLmNjICB8IDk0MiArKysrKysrKysr
KysrKysrKysNCiAuLi4vY29uZmlnL2xvY2FsZS9uZXdsaWIvbnVtZXJpY19tZW1iZXJzLmNjICAg
fCAyODIgKysrKysrDQogLi4uL2NvbmZpZy9sb2NhbGUvbmV3bGliL3RpbWVfbWVtYmVycy5jYyAg
ICAgIHwgMzc5ICsrKysrKysNCiAuLi4vY29uZmlnL2xvY2FsZS9uZXdsaWIvdGltZV9tZW1iZXJz
LmggICAgICAgfCAgOTAgKysNCiBsaWJzdGRjKystdjMvY29uZmlndXJlICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgMjkgKy0NCiBsaWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmluICAgICAgICAg
ICAgICAgICAgfCAgIDMgKy0NCiBsaWJzdGRjKystdjMvc3JjL2MrKzExL2xvY2FsZV9pbml0LmNj
ICAgICAgICAgfCAgIDMgKy0NCiAyMSBmaWxlcyBjaGFuZ2VkLCAzMDE2IGluc2VydGlvbnMoKyks
IDUyIGRlbGV0aW9ucygtKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmln
L2xvY2FsZS9uZXdsaWIvYysrbG9jYWxlX2ludGVybmFsLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQg
bGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2NfbG9jYWxlLmNjDQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9jX2xvY2FsZS5oDQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9jb2Rl
Y3Z0X21lbWJlcnMuY2MNCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9s
b2NhbGUvbmV3bGliL2NvbGxhdGVfbWVtYmVycy5jYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJz
dGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvbWVzc2FnZXNfbWVtYmVycy5jYw0KIGNyZWF0
ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvbWVzc2FnZXNf
bWVtYmVycy5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxl
L25ld2xpYi9tb25ldGFyeV9tZW1iZXJzLmNjDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMr
Ky12My9jb25maWcvbG9jYWxlL25ld2xpYi9udW1lcmljX21lbWJlcnMuY2MNCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL3RpbWVfbWVtYmVycy5j
Yw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIv
dGltZV9tZW1iZXJzLmgNCg0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9NYWtlZmlsZS5pbiBi
L2xpYnN0ZGMrKy12My9NYWtlZmlsZS5pbg0KaW5kZXggNTAwYzBkNzUyODIuLmMwNWQyMGUyNTY4
IDEwMDY0NA0KLS0tIGEvbGlic3RkYysrLXYzL01ha2VmaWxlLmluDQorKysgYi9saWJzdGRjKyst
djMvTWFrZWZpbGUuaW4NCkBAIC0yNDQsNiArMjQ0LDcgQEAgRVJST1JfQ09OU1RBTlRTX1NSQ0RJ
UiA9IEBFUlJPUl9DT05TVEFOVFNfU1JDRElSQA0KIEVYRUVYVCA9IEBFWEVFWFRADQogRVhUUkFf
Q0ZMQUdTID0gQEVYVFJBX0NGTEFHU0ANCiBFWFRSQV9DWFhfRkxBR1MgPSBARVhUUkFfQ1hYX0ZM
QUdTQA0KK0VYVFJBX0xJQlMgPSBARVhUUkFfTElCU0ANCiBGR1JFUCA9IEBGR1JFUEANCiBGT1JN
QVRfRklMRSA9IEBGT1JNQVRfRklMRUANCiBGUkVFU1RBTkRJTkdfRkxBR1MgPSBARlJFRVNUQU5E
SU5HX0ZMQUdTQA0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgYi9saWJz
dGRjKystdjMvYWNpbmNsdWRlLm00DQppbmRleCBkOGYwYmExYzNlMi4uMjAyYjNjNDc1Y2YgMTAw
NjQ0DQotLS0gYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00DQorKysgYi9saWJzdGRjKystdjMv
YWNpbmNsdWRlLm00DQpAQCAtMjgwNyw3ICsyODA3LDcgQEAgQUNfREVGVU4oW0dMSUJDWFhfRU5B
QkxFX0NMT0NBTEVdLCBbDQogICAgICAgZHJhZ29uZmx5KiB8IGZyZWVic2QqKQ0KIAllbmFibGVf
Y2xvY2FsZV9mbGFnPWRyYWdvbmZseQ0KIAk7Ow0KLSAgICAgIG9wZW5ic2QqKQ0KKyAgICAgIG9w
ZW5ic2QqIHwgY3lnd2luKikNCiAJZW5hYmxlX2Nsb2NhbGVfZmxhZz1uZXdsaWINCiAJOzsNCiAg
ICAgICAqKQ0KQEAgLTI4MTksNiArMjgxOSwxMCBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVf
Q0xPQ0FMRV0sIFsNCiAJOzsNCiAgICAgZXNhYw0KICAgZmkNCisgIGNhc2UgJHt0YXJnZXRfb3N9
IGluIGN5Z3dpbiopDQorICAgIEVYVFJBX0xJQlM9Ii1saW50bCINCisgICAgOzsNCisgIGVzYWMN
CiANCiAgICMgU2FuaXR5IGNoZWNrIG1vZGVsLCBhbmQgdGVzdCBmb3Igc3BlY2lhbCBmdW5jdGlv
bmFsaXR5Lg0KICAgaWYgdGVzdCAkZW5hYmxlX2Nsb2NhbGVfZmxhZyA9IGdudTsgdGhlbg0KQEAg
LTI5ODQsMTggKzI5ODgsMTggQEAgQUNfREVGVU4oW0dMSUJDWFhfRU5BQkxFX0NMT0NBTEVdLCBb
DQogICAgIG5ld2xpYikNCiAgICAgICBBQ19NU0dfUkVTVUxUKG5ld2xpYikNCiANCi0gICAgICBD
TE9DQUxFX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgNCi0gICAgICBDTE9DQUxF
X0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYw0KLSAgICAgIENDT0RFQ1ZUX0ND
PWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jb2RlY3Z0X21lbWJlcnMuY2MNCi0gICAgICBDQ09MTEFU
RV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvY29sbGF0ZV9tZW1iZXJzLmNjDQorICAgICAgQ0xP
Q0FMRV9IPWNvbmZpZy9sb2NhbGUvbmV3bGliL2NfbG9jYWxlLmgNCisgICAgICBDTE9DQUxFX0ND
PWNvbmZpZy9sb2NhbGUvbmV3bGliL2NfbG9jYWxlLmNjDQorICAgICAgQ0NPREVDVlRfQ0M9Y29u
ZmlnL2xvY2FsZS9uZXdsaWIvY29kZWN2dF9tZW1iZXJzLmNjDQorICAgICAgQ0NPTExBVEVfQ0M9
Y29uZmlnL2xvY2FsZS9uZXdsaWIvY29sbGF0ZV9tZW1iZXJzLmNjDQogICAgICAgQ0NUWVBFX0ND
PWNvbmZpZy9sb2NhbGUvbmV3bGliL2N0eXBlX21lbWJlcnMuY2MNCi0gICAgICBDTUVTU0FHRVNf
SD1jb25maWcvbG9jYWxlL2dlbmVyaWMvbWVzc2FnZXNfbWVtYmVycy5oDQotICAgICAgQ01FU1NB
R0VTX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9tZXNzYWdlc19tZW1iZXJzLmNjDQotICAgICAg
Q01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9tb25ldGFyeV9tZW1iZXJzLmNjDQotICAg
ICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL251bWVyaWNfbWVtYmVycy5jYw0K
LSAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5oDQotICAg
ICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYw0KLSAgICAg
IENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVy
bmFsLmgNCisgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL25ld2xpYi9tZXNzYWdlc19t
ZW1iZXJzLmgNCisgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS9uZXdsaWIvbWVzc2Fn
ZXNfbWVtYmVycy5jYw0KKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL25ld2xpYi9tb25l
dGFyeV9tZW1iZXJzLmNjDQorICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS9uZXdsaWIv
bnVtZXJpY19tZW1iZXJzLmNjDQorICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL25ld2xpYi90
aW1lX21lbWJlcnMuaA0KKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvbmV3bGliL3RpbWVf
bWVtYmVycy5jYw0KKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL25ld2xp
Yi9jKytsb2NhbGVfaW50ZXJuYWwuaA0KICAgICAgIDs7DQogICBlc2FjDQogDQpkaWZmIC0tZ2l0
IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZHJhZ29uZmx5L2NfbG9jYWxlLmNjIGIvbGli
c3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZHJhZ29uZmx5L2NfbG9jYWxlLmNjDQppbmRleCBmMDI2
ZTE3ZDVhMC4uMGUxMDE4OGYyMjAgMTAwNjQ0DQotLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xv
Y2FsZS9kcmFnb25mbHkvY19sb2NhbGUuY2MNCisrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9j
YWxlL2RyYWdvbmZseS9jX2xvY2FsZS5jYw0KQEAgLTE4OCw2ICsxODgsNyBAQCBuYW1lc3BhY2Ug
c3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkNCiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BB
Q0VfVkVSU0lPTg0KIA0KICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0
ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7DQorICBjb25zdCBfX3R5cGVvZihz
ZXRsb2NhbGUpICpfX3NldGxvY2FsZSA9IHNldGxvY2FsZTsNCiANCiBfR0xJQkNYWF9FTkRfTkFN
RVNQQUNFX1ZFUlNJT04NCiB9IC8vIG5hbWVzcGFjZQ0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12
My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmln
L2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjDQppbmRleCA4ODQ5ZDc4ZmRmYS4uMjdhMjQ2OTIx
ZTYgMTAwNjQ0DQotLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9j
YWxlLmNjDQorKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxl
LmNjDQpAQCAtMjg0LDYgKzI4NCw3IEBAIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElU
WShkZWZhdWx0KQ0KIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9ODQogDQogICBjb25z
dCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4Ojpj
YXRlZ29yeV9uYW1lczsNCisgIGNvbnN0IF9fdHlwZW9mKHNldGxvY2FsZSkgKl9fc2V0bG9jYWxl
ID0gc2V0bG9jYWxlOw0KIA0KIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTg0KIH0gLy8g
bmFtZXNwYWNlDQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ251L2Nf
bG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ251L2NfbG9jYWxlLmNjDQpp
bmRleCA1ZGRiZGUxZTZjYy4uNTUyNzFiNjE2MWIgMTAwNjQ0DQotLS0gYS9saWJzdGRjKystdjMv
Y29uZmlnL2xvY2FsZS9nbnUvY19sb2NhbGUuY2MNCisrKyBiL2xpYnN0ZGMrKy12My9jb25maWcv
bG9jYWxlL2dudS9jX2xvY2FsZS5jYw0KQEAgLTI4Myw2ICsyODMsNyBAQCBuYW1lc3BhY2Ugc3Rk
IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkNCiBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Vf
VkVSU0lPTg0KIA0KICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdv
cmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7DQorICBjb25zdCBfX3R5cGVvZihzZXRs
b2NhbGUpICpfX3NldGxvY2FsZSA9IHNldGxvY2FsZTsNCiANCiBfR0xJQkNYWF9FTkRfTkFNRVNQ
QUNFX1ZFUlNJT04NCiB9IC8vIG5hbWVzcGFjZQ0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9j
b25maWcvbG9jYWxlL2llZWVfMTAwMy4xLTIwMDEvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMv
Y29uZmlnL2xvY2FsZS9pZWVlXzEwMDMuMS0yMDAxL2NfbG9jYWxlLmNjDQppbmRleCBjOTExODNl
MmY4Yy4uMjg3MjM0YThjNjcgMTAwNjQ0DQotLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2Fs
ZS9pZWVlXzEwMDMuMS0yMDAxL2NfbG9jYWxlLmNjDQorKysgYi9saWJzdGRjKystdjMvY29uZmln
L2xvY2FsZS9pZWVlXzEwMDMuMS0yMDAxL2NfbG9jYWxlLmNjDQpAQCAtMTAzLDUgKzEwMyw3IEBA
IG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQ0KICAgICAgIF9NX25l
Z19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47DQogICAgIH0NCiAjZW5k
aWYNCisNCisgIGNvbnN0IF9fdHlwZW9mKHNldGxvY2FsZSkgKl9fc2V0bG9jYWxlID0gc2V0bG9j
YWxlOw0KIH0gIC8vIG5hbWVzcGFjZSBzdGQNCiANCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMv
Y29uZmlnL2xvY2FsZS9uZXdsaWIvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMv
Y29uZmlnL2xvY2FsZS9uZXdsaWIvYysrbG9jYWxlX2ludGVybmFsLmgNCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMC4uMzUxZDQ1NjZiM2ENCi0tLSAvZGV2L251bGwNCisr
KyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9jKytsb2NhbGVfaW50ZXJuYWwu
aA0KQEAgLTAsMCArMSw5NSBAQA0KKy8vIExvY2FsZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBo
ZWFkZXIgLSotIEMrKyAtKi0NCisNCisvLyBDb3B5cmlnaHQgKEMpIDIwMDItMjAyMyBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisvLw0KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUNCisvLyBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUNCisv
LyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZQ0KKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3Ig
KGF0IHlvdXIgb3B0aW9uKQ0KKy8vIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKy8vIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0K
Ky8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mDQorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZQ0KKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuDQorDQorLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlv
dSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsDQorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRo
ZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbg0KKy8vIDMuMSwgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQorDQorLy8gWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
YW5kDQorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9u
ZyB3aXRoIHRoaXMgcHJvZ3JhbTsNCisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZ
SU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUNCisvLyA8aHR0cDovL3d3dy5n
bnUub3JnL2xpY2Vuc2VzLz4uDQorDQorLyoqIEBmaWxlIGJpdHMvYysrbG9jYWxlX2ludGVybmFs
LmgNCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3Ro
ZXIgbGlicmFyeSBoZWFkZXJzLg0KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0
bHkuIEBoZWFkZXJuYW1le2xvY2FsZX0NCisgKi8NCisNCisvLyBXcml0dGVuIGJ5IEpha3ViIEpl
bGluZWsgPGpha3ViQHJlZGhhdC5jb20+DQorLy8gTW9kaWZpZWQgYnkgVGFrYXNoaSBZYW5vIDx0
YWthc2hpLnlhbm9AbmlmdHkubmUuanA+DQorDQorI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+
DQorI2luY2x1ZGUgPGNsb2NhbGU+DQorI2luY2x1ZGUgPGNzdGRsaWI+DQorI2luY2x1ZGUgPGNz
dHJpbmc+DQorI2luY2x1ZGUgPGNzdGRkZWY+DQorI2luY2x1ZGUgPGxhbmdpbmZvLmg+DQorDQor
I2luY2x1ZGUgPHZlY3Rvcj4NCisjaW5jbHVkZSA8c3RyaW5nLmg+CS8vIDo6c3RyZHVwDQorDQor
I2luY2x1ZGUgPGV4dC9jb25jdXJyZW5jZS5oPg0KKw0KK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhf
VklTSUJJTElUWShkZWZhdWx0KQ0KK3sNCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lP
Tg0KKw0KKyAgc3RydWN0IENhdGFsb2dfaW5mbw0KKyAgew0KKyAgICBDYXRhbG9nX2luZm8obWVz
c2FnZXNfYmFzZTo6Y2F0YWxvZyBfX2lkLCBjb25zdCBjaGFyKiBfX2RvbWFpbiwNCisJCSBsb2Nh
bGUgX19sb2MpDQorICAgICAgOiBfTV9pZChfX2lkKSwgX01fZG9tYWluKHN0cmR1cChfX2RvbWFp
bikpLCBfTV9sb2NhbGUoX19sb2MpDQorICAgIHsgfQ0KKw0KKyAgICB+Q2F0YWxvZ19pbmZvKCkN
CisgICAgeyBmcmVlKF9NX2RvbWFpbik7IH0NCisNCisgICAgbWVzc2FnZXNfYmFzZTo6Y2F0YWxv
ZyBfTV9pZDsNCisgICAgY2hhciogX01fZG9tYWluOw0KKyAgICBsb2NhbGUgX01fbG9jYWxlOw0K
Kw0KKyAgcHJpdmF0ZToNCisgICAgQ2F0YWxvZ19pbmZvKGNvbnN0IENhdGFsb2dfaW5mbyYpOw0K
Kw0KKyAgICBDYXRhbG9nX2luZm8mDQorICAgIG9wZXJhdG9yPShjb25zdCBDYXRhbG9nX2luZm8m
KTsNCisgIH07DQorDQorICBjbGFzcyBDYXRhbG9ncw0KKyAgew0KKyAgcHVibGljOg0KKyAgICBD
YXRhbG9ncygpIDogX01fY2F0YWxvZ19jb3VudGVyKDApIHsgfQ0KKyAgICB+Q2F0YWxvZ3MoKTsN
CisNCisgICAgbWVzc2FnZXNfYmFzZTo6Y2F0YWxvZw0KKyAgICBfTV9hZGQoY29uc3QgY2hhciog
X19kb21haW4sIGxvY2FsZSBfX2wpOw0KKw0KKyAgICB2b2lkDQorICAgIF9NX2VyYXNlKG1lc3Nh
Z2VzX2Jhc2U6OmNhdGFsb2cgX19jKTsNCisNCisgICAgY29uc3QgQ2F0YWxvZ19pbmZvKg0KKyAg
ICBfTV9nZXQobWVzc2FnZXNfYmFzZTo6Y2F0YWxvZyBfX2MpIGNvbnN0Ow0KKw0KKyAgcHJpdmF0
ZToNCisgICAgbXV0YWJsZSBfX2dudV9jeHg6Ol9fbXV0ZXggX01fbXV0ZXg7DQorICAgIG1lc3Nh
Z2VzX2Jhc2U6OmNhdGFsb2cgX01fY2F0YWxvZ19jb3VudGVyOw0KKyAgICB2ZWN0b3I8Q2F0YWxv
Z19pbmZvKj4gX01faW5mb3M7DQorICB9Ow0KKw0KKyAgQ2F0YWxvZ3MmDQorICBnZXRfY2F0YWxv
Z3MoKTsNCisNCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04NCit9IC8vIG5hbWVzcGFj
ZQ0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9jX2xvY2Fs
ZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9jX2xvY2FsZS5jYw0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwLi5jNDllNTc1Mzk0Yg0KLS0tIC9k
ZXYvbnVsbA0KKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2NfbG9jYWxl
LmNjDQpAQCAtMCwwICsxLDM4NCBAQA0KKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5n
dWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0NCisNCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEt
MjAyMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisvLw0KKy8vIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUN
CisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1
bmRlciB0aGUNCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZQ0KKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl
cnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQ0KKy8vIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0K
Ky8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLA0KKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQorLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2
ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsDQorLy8gcGVybWlzc2lvbnMgZGVz
Y3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbg0KKy8v
IDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQorDQor
Ly8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgYW5kDQorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4
Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsNCisvLyBzZWUgdGhlIGZpbGVzIENPUFlJ
TkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUNCisvLyA8
aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQorDQorLy8NCisvLyBJU08gQysrIDE0ODgy
OiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4NCisvLw0KKw0KKy8vIFdyaXR0ZW4g
YnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+DQorLy8gTW9kaWZpZWQgYnkgVGFr
YXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHkubmUuanA+DQorDQorI2RlZmluZSBfR05VX1NP
VVJDRSAxDQorI2luY2x1ZGUgPGNzdGRpbz4NCisjaW5jbHVkZSA8bG9jYWxlPg0KKyNpbmNsdWRl
IDxzdGRleGNlcHQ+DQorI2luY2x1ZGUgPGxpbWl0cz4NCisjaW5jbHVkZSA8YWxnb3JpdGhtPg0K
KyNpbmNsdWRlIDxsYW5naW5mby5oPg0KKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5h
bC5oPg0KKw0KKyNpbmNsdWRlIDxiYWNrd2FyZC9hdXRvX3B0ci5oPg0KKw0KKy8qIE5ld2xpYiBj
b25zdGF0bnQgKi8NCisjZGVmaW5lIEVOQ09ESU5HX0xFTiAzMQ0KKyNkZWZpbmUgQ0FURUdPUllf
TEVOIDExDQorI2RlZmluZSBOVU1fQ0FURUdPUklFUyA2DQorI2RlZmluZSB4c3RyKHMpIHN0cihz
KQ0KKyNkZWZpbmUgc3RyKHMpICNzDQorI2RlZmluZSBGTVRfTE9DQUxFICIlIiB4c3RyKENBVEVH
T1JZX0xFTikgIltePV09JSIgeHN0cihFTkNPRElOR19MRU4pICJbXjtdIg0KKw0KK25hbWVzcGFj
ZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQ0KK3sNCitfR0xJQkNYWF9CRUdJTl9O
QU1FU1BBQ0VfVkVSU0lPTg0KKw0KKyAgdGVtcGxhdGU8Pg0KKyAgICB2b2lkDQorICAgIF9fY29u
dmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLA0KKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKSB0aHJvdygpDQorICAgIHsN
CisgICAgICBjaGFyKiBfX3Nhbml0eTsNCisgICAgICBfX3YgPSBzdHJ0b2ZfbChfX3MsICZfX3Nh
bml0eSwgX19jbG9jKTsNCisNCisgICAgICAvLyBfR0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RT
DQorICAgICAgLy8gMjMuIE51bV9nZXQgb3ZlcmZsb3cgcmVzdWx0Lg0KKyAgICAgIGlmIChfX3Nh
bml0eSA9PSBfX3MgfHwgKl9fc2FuaXR5ICE9ICdcMCcpDQorCXsNCisJICBfX3YgPSAwLjBmOw0K
KwkgIF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQorCX0NCisgICAgICBlbHNlIGlmIChfX3Yg
PT0gbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKQ0KKwl7DQorCSAgX192ID0gbnVt
ZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsNCisJICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0
Ow0KKwl9DQorICAgICAgZWxzZSBpZiAoX192ID09IC1udW1lcmljX2xpbWl0czxmbG9hdD46Omlu
ZmluaXR5KCkpDQorCXsNCisJICBfX3YgPSAtbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsN
CisJICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0Ow0KKwl9DQorICAgIH0NCisNCisgIHRlbXBs
YXRlPD4NCisgICAgdm9pZA0KKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRv
dWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsDQorCQkgICBjb25zdCBfX2NfbG9j
YWxlJiBfX2Nsb2MpIHRocm93KCkNCisgICAgew0KKyAgICAgIGNoYXIqIF9fc2FuaXR5Ow0KKyAg
ICAgIF9fdiA9IHN0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOw0KKw0KKyAgICAgIC8v
IF9HTElCQ1hYX1JFU09MVkVfTElCX0RFRkVDVFMNCisgICAgICAvLyAyMy4gTnVtX2dldCBvdmVy
ZmxvdyByZXN1bHQuDQorICAgICAgaWYgKF9fc2FuaXR5ID09IF9fcyB8fCAqX19zYW5pdHkgIT0g
J1wwJykNCisJew0KKwkgIF9fdiA9IDAuMDsNCisJICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0
Ow0KKwl9DQorICAgICAgZWxzZSBpZiAoX192ID09IG51bWVyaWNfbGltaXRzPGRvdWJsZT46Omlu
ZmluaXR5KCkpDQorCXsNCisJICBfX3YgPSBudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKTsN
CisJICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0Ow0KKwl9DQorICAgICAgZWxzZSBpZiAoX192
ID09IC1udW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQ0KKwl7DQorCSAgX192ID0g
LW51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpOw0KKwkgIF9fZXJyID0gaW9zX2Jhc2U6OmZh
aWxiaXQ7DQorCX0NCisgICAgfQ0KKw0KKyAgdGVtcGxhdGU8Pg0KKyAgICB2b2lkDQorICAgIF9f
Y29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLA0KKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKSB0aHJvdygp
DQorICAgIHsNCisgICAgICBjaGFyKiBfX3Nhbml0eTsNCisgICAgICBfX3YgPSBzdHJ0b2xkX2wo
X19zLCAmX19zYW5pdHksIF9fY2xvYyk7DQorDQorICAgICAgLy8gX0dMSUJDWFhfUkVTT0xWRV9M
SUJfREVGRUNUUw0KKyAgICAgIC8vIDIzLiBOdW1fZ2V0IG92ZXJmbG93IHJlc3VsdC4NCisgICAg
ICBpZiAoX19zYW5pdHkgPT0gX19zIHx8ICpfX3Nhbml0eSAhPSAnXDAnKQ0KKwl7DQorCSAgX192
ID0gMC4wbDsNCisJICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0Ow0KKwl9DQorICAgICAgZWxz
ZSBpZiAoX192ID09IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6aW5maW5pdHkoKSkNCisJ
ew0KKwkgIF9fdiA9IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6bWF4KCk7DQorCSAgX19l
cnIgPSBpb3NfYmFzZTo6ZmFpbGJpdDsNCisJfQ0KKyAgICAgIGVsc2UgaWYgKF9fdiA9PSAtbnVt
ZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjppbmZpbml0eSgpKQ0KKwl7DQorCSAgX192ID0gLW51
bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6bWF4KCk7DQorCSAgX19lcnIgPSBpb3NfYmFzZTo6
ZmFpbGJpdDsNCisJfQ0KKyAgICB9DQorDQorICB2b2lkDQorICBsb2NhbGU6OmZhY2V0OjpfU19j
cmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsDQorCQkJ
CSAgICBfX2NfbG9jYWxlIF9fb2xkKQ0KKyAgew0KKyAgICBfX2Nsb2MgPSBuZXdsb2NhbGUoMSA8
PCBMQ19BTEwsIF9fcywgX19vbGQpOw0KKyAgICBpZiAoX19jbG9jKQ0KKyAgICAgIHJldHVybjsN
CisNCisgICAgLyogTmV3bGliIGRvZXMgbm90IHN1cHBvcnQgbG9jYWxlIHN0cmlnIHN1Y2ggYXMN
CisgICAgICAgIkxDX0NUWVBFPWVuX1VTLlVURjg7TENfTlVNRVJJQz1kZV9ERS5VVEY4Oy4uLiIg
Ki8NCisgICAgY29uc3QgY2hhciAqX19wID0gX19zOw0KKyAgICBfX2Nsb2MgPSBfX29sZDsNCisg
ICAgY2hhciBfX2NhdFtDQVRFR09SWV9MRU4gKyAxXSwgX19sb2NbRU5DT0RJTkdfTEVOICsgMV07
DQorICAgIHdoaWxlICgyID09IHNzY2FuZihfX3AsIEZNVF9MT0NBTEUsIF9fY2F0LCBfX2xvYykp
DQorICAgICAgew0KKwlzdHJ1Y3Qge2NvbnN0IGNoYXIgKl9fY2F0OyBpbnQgX19tYXNrO30gX190
YmxbTlVNX0NBVEVHT1JJRVMgKyAxXSA9DQorCSAgew0KKwkgICAgICB7IkxDX0NUWVBFIiwgTENf
Q1RZUEVfTUFTS30sDQorCSAgICAgIHsiTENfTlVNRVJJQyIsIExDX05VTUVSSUNfTUFTS30sDQor
CSAgICAgIHsiTENfVElNRSIsIExDX1RJTUVfTUFTS30sDQorCSAgICAgIHsiTENfQ09MTEFURSIs
IExDX0NPTExBVEVfTUFTS30sDQorCSAgICAgIHsiTENfTU9ORVRBUlkiLCBMQ19NT05FVEFSWV9N
QVNLfSwNCisJICAgICAgeyJMQ19NRVNTQUdFUyIsIExDX01FU1NBR0VTX01BU0t9LA0KKwkgICAg
ICB7TlVMTCwgMH0NCisJICB9Ow0KKwlmb3IgKGludCBfX2kgPSAwOyBfX3RibFtfX2ldLl9fY2F0
OyBfX2krKykNCisJICBpZiAoc3RyY21wKF9fdGJsW19faV0uX19jYXQsIF9fY2F0KSA9PSAwKQ0K
KwkgICAgew0KKwkgICAgICBfX2Nsb2MgPSBuZXdsb2NhbGUoX190YmxbX19pXS5fX21hc2ssIF9f
bG9jLCBfX2Nsb2MpOw0KKwkgICAgICBicmVhazsNCisJICAgIH0NCisJaWYgKCFfX2Nsb2MpDQor
CSAgYnJlYWs7DQorCWlmICgoX19wID0gc3RyY2hyKF9fcCwgJzsnKSkgPT0gTlVMTCkNCisJICBi
cmVhazsNCisJX19wKys7DQorICAgICAgfQ0KKyAgICBpZiAoIV9fY2xvYykNCisgICAgICB7DQor
CS8vIFRoaXMgbmFtZWQgbG9jYWxlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcg
T1MuDQorCV9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0
ZV9jX2xvY2FsZSAiDQorCQkJCSAgIm5hbWUgbm90IHZhbGlkIikpOw0KKyAgICAgIH0NCisgIH0N
CisNCisgIHZvaWQNCisgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xv
Y2FsZSYgX19jbG9jKQ0KKyAgew0KKyAgICBpZiAoX19jbG9jICYmIF9TX2dldF9jX2xvY2FsZSgp
ICE9IF9fY2xvYykNCisgICAgICBmcmVlbG9jYWxlKF9fY2xvYyk7DQorICB9DQorDQorICBfX2Nf
bG9jYWxlDQorICBsb2NhbGU6OmZhY2V0OjpfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBf
X2Nsb2MpIHRocm93KCkNCisgIHsgcmV0dXJuIGR1cGxvY2FsZShfX2Nsb2MpOyB9DQorDQorICBf
X2NfbG9jYWxlDQorICBsb2NhbGU6OmZhY2V0OjpfU19sY19jdHlwZV9jX2xvY2FsZShfX2NfbG9j
YWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zKQ0KKyAgew0KKyAgICBfX2NfbG9jYWxlIF9fZHVw
ID0gZHVwbG9jYWxlKF9fY2xvYyk7DQorICAgIGlmIChfX2R1cCA9PSBfX2NfbG9jYWxlKDApKQ0K
KyAgICAgIF9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2xjX2N0
eXBlX2NfbG9jYWxlICINCisJCQkJImR1cGxvY2FsZSBlcnJvciIpKTsNCisgICAgX19jX2xvY2Fs
ZSBfX2NoYW5nZWQgPSBuZXdsb2NhbGUoTENfQ1RZUEVfTUFTSywgX19zLCBfX2R1cCk7DQorICAg
IGlmIChfX2NoYW5nZWQgPT0gX19jX2xvY2FsZSgwKSkNCisgICAgICB7DQorCS8qIE5ld2xpYiBk
b2VzIG5vdCBzdXBwb3J0IGxvY2FsZSBzdHJpZyBzdWNoIGFzDQorCSAgICJMQ19DVFlQRT1lbl9V
Uy5VVEY4O0xDX05VTUVSSUM9ZGVfREUuVVRGODsuLi4iICovDQorCWNvbnN0IGNoYXIgKl9fcCA9
IF9fczsNCisJY2hhciBfX2NhdFtDQVRFR09SWV9MRU4gKyAxXSwgX19sb2NbRU5DT0RJTkdfTEVO
ICsgMV07DQorCXdoaWxlICgyID09IHNzY2FuZihfX3AsIEZNVF9MT0NBTEUsIF9fY2F0LCBfX2xv
YykpDQorCSAgew0KKwkgICAgaWYgKHN0cmNtcCgiTENfQ1RZUEUiLCBfX2NhdCkgPT0gMCkNCisJ
ICAgICAgew0KKwkJX19jaGFuZ2VkID0gbmV3bG9jYWxlKExDX0NUWVBFX01BU0ssIF9fbG9jLCBf
X2R1cCk7DQorCQlicmVhazsNCisJICAgICAgfQ0KKwkgICAgaWYgKChfX3AgPSBzdHJjaHIoX19w
LCAnOycpKSA9PSBOVUxMKQ0KKwkgICAgICBicmVhazsNCisJICAgIF9fcCsrOw0KKwkgIH0NCisg
ICAgICB9DQorICAgIGlmIChfX2NoYW5nZWQgPT0gX19jX2xvY2FsZSgwKSkNCisgICAgICB7DQor
CWZyZWVsb2NhbGUoX19kdXApOw0KKwlfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6
OmZhY2V0OjpfU19sY19jdHlwZV9jX2xvY2FsZSAiDQorCQkJCSAgIm5ld2xvY2FsZSBlcnJvciIp
KTsNCisgICAgICB9DQorICAgIHJldHVybiBfX2NoYW5nZWQ7DQorICB9DQorDQorICBzdHJ1Y3Qg
X0NhdGFsb2dJZENvbXANCisgIHsNCisgICAgYm9vbA0KKyAgICBvcGVyYXRvcigpKG1lc3NhZ2Vz
X2Jhc2U6OmNhdGFsb2cgX19jYXQsIGNvbnN0IENhdGFsb2dfaW5mbyogX19pbmZvKSBjb25zdA0K
KyAgICB7IHJldHVybiBfX2NhdCA8IF9faW5mby0+X01faWQ7IH0NCisNCisgICAgYm9vbA0KKyAg
ICBvcGVyYXRvcigpKGNvbnN0IENhdGFsb2dfaW5mbyogX19pbmZvLCBtZXNzYWdlc19iYXNlOjpj
YXRhbG9nIF9fY2F0KSBjb25zdA0KKyAgICB7IHJldHVybiBfX2luZm8tPl9NX2lkIDwgX19jYXQ7
IH0NCisgIH07DQorDQorICBDYXRhbG9nczo6fkNhdGFsb2dzKCkNCisgIHsNCisgICAgZm9yICh2
ZWN0b3I8Q2F0YWxvZ19pbmZvKj46Oml0ZXJhdG9yIF9faXQgPSBfTV9pbmZvcy5iZWdpbigpOw0K
KwkgX19pdCAhPSBfTV9pbmZvcy5lbmQoKTsgKytfX2l0KQ0KKyAgICAgIGRlbGV0ZSAqX19pdDsN
CisgIH0NCisNCisgIG1lc3NhZ2VzX2Jhc2U6OmNhdGFsb2cNCisgIENhdGFsb2dzOjpfTV9hZGQo
Y29uc3QgY2hhciogX19kb21haW4sIGxvY2FsZSBfX2wpDQorICB7DQorICAgIF9fZ251X2N4eDo6
X19zY29wZWRfbG9jayBsb2NrKF9NX211dGV4KTsNCisNCisgICAgLy8gVGhlIGNvdW50ZXIgaXMg
bm90IGxpa2VseSB0byByb2xsIHVubGVzcyBjYXRhbG9ncyBrZWVwIG9uIGJlaW5nDQorICAgIC8v
IG9wZW5lZC9jbG9zZWQgd2hpY2ggaXMgY29uc2lkZXIgYXMgYW4gYXBwbGljYXRpb24gbWlzdGFr
ZSBmb3IgdGhlDQorICAgIC8vIG1vbWVudC4NCisgICAgaWYgKF9NX2NhdGFsb2dfY291bnRlciA9
PSBudW1lcmljX2xpbWl0czxtZXNzYWdlc19iYXNlOjpjYXRhbG9nPjo6bWF4KCkpDQorICAgICAg
cmV0dXJuIC0xOw0KKw0KKyAgICBhdXRvX3B0cjxDYXRhbG9nX2luZm8+IGluZm8obmV3IENhdGFs
b2dfaW5mbyhfTV9jYXRhbG9nX2NvdW50ZXIrKywNCisJCQkJCQkgX19kb21haW4sIF9fbCkpOw0K
Kw0KKyAgICAvLyBDaGVjayBpZiB3ZSBtYW5hZ2VkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZG9t
YWluLg0KKyAgICBpZiAoIWluZm8tPl9NX2RvbWFpbikNCisgICAgICByZXR1cm4gLTE7DQorDQor
ICAgIF9NX2luZm9zLnB1c2hfYmFjayhpbmZvLmdldCgpKTsNCisgICAgcmV0dXJuIGluZm8ucmVs
ZWFzZSgpLT5fTV9pZDsNCisgIH0NCisNCisgIHZvaWQNCisgIENhdGFsb2dzOjpfTV9lcmFzZSht
ZXNzYWdlc19iYXNlOjpjYXRhbG9nIF9fYykNCisgIHsNCisgICAgX19nbnVfY3h4OjpfX3Njb3Bl
ZF9sb2NrIGxvY2soX01fbXV0ZXgpOw0KKw0KKyAgICB2ZWN0b3I8Q2F0YWxvZ19pbmZvKj46Oml0
ZXJhdG9yIF9fcmVzID0NCisgICAgICBsb3dlcl9ib3VuZChfTV9pbmZvcy5iZWdpbigpLCBfTV9p
bmZvcy5lbmQoKSwgX19jLCBfQ2F0YWxvZ0lkQ29tcCgpKTsNCisgICAgaWYgKF9fcmVzID09IF9N
X2luZm9zLmVuZCgpIHx8ICgqX19yZXMpLT5fTV9pZCAhPSBfX2MpDQorICAgICAgcmV0dXJuOw0K
Kw0KKyAgICBkZWxldGUgKl9fcmVzOw0KKyAgICBfTV9pbmZvcy5lcmFzZShfX3Jlcyk7DQorDQor
ICAgIC8vIEp1c3QgaW4gY2FzZSBjbG9zZWQgY2F0YWxvZyB3YXMgdGhlIGxhc3Qgb3Blbi4NCisg
ICAgaWYgKF9fYyA9PSBfTV9jYXRhbG9nX2NvdW50ZXIgLSAxKQ0KKyAgICAgIC0tX01fY2F0YWxv
Z19jb3VudGVyOw0KKyAgfQ0KKw0KKyAgY29uc3QgQ2F0YWxvZ19pbmZvKg0KKyAgQ2F0YWxvZ3M6
Ol9NX2dldChtZXNzYWdlc19iYXNlOjpjYXRhbG9nIF9fYykgY29uc3QNCisgIHsNCisgICAgX19n
bnVfY3h4OjpfX3Njb3BlZF9sb2NrIGxvY2soX01fbXV0ZXgpOw0KKw0KKyAgICB2ZWN0b3I8Q2F0
YWxvZ19pbmZvKj46OmNvbnN0X2l0ZXJhdG9yIF9fcmVzID0NCisgICAgICBsb3dlcl9ib3VuZChf
TV9pbmZvcy5iZWdpbigpLCBfTV9pbmZvcy5lbmQoKSwgX19jLCBfQ2F0YWxvZ0lkQ29tcCgpKTsN
CisNCisgICAgaWYgKF9fcmVzICE9IF9NX2luZm9zLmVuZCgpICYmICgqX19yZXMpLT5fTV9pZCA9
PSBfX2MpDQorICAgICAgcmV0dXJuICpfX3JlczsNCisNCisgICAgcmV0dXJuIDA7DQorICB9DQor
DQorICBDYXRhbG9ncyYNCisgIGdldF9jYXRhbG9ncygpDQorICB7DQorICAgIHN0YXRpYyBDYXRh
bG9ncyBfX2NhdGFsb2dzOw0KKyAgICByZXR1cm4gX19jYXRhbG9nczsNCisgIH0NCisNCitfR0xJ
QkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04NCit9IC8vIG5hbWVzcGFjZQ0KKw0KK25hbWVzcGFj
ZSBfX2dudV9jeHggX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQ0KK3sNCitfR0xJQkNYWF9C
RUdJTl9OQU1FU1BBQ0VfVkVSU0lPTg0KKw0KKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlf
bmFtZXNbTlVNX0NBVEVHT1JJRVNdID0NCisgICAgew0KKyAgICAgICJMQ19DVFlQRSIsDQorICAg
ICAgIkxDX05VTUVSSUMiLA0KKyAgICAgICJMQ19USU1FIiwNCisgICAgICAiTENfQ09MTEFURSIs
DQorICAgICAgIkxDX01PTkVUQVJZIiwNCisgICAgICAiTENfTUVTU0FHRVMiLA0KKyAgICB9Ow0K
Kw0KK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTg0KK30gLy8gbmFtZXNwYWNlDQorDQor
c3RhdGljIGNoYXIgKg0KK19fc2V0bG9jYWxlX2Zvcl9uZXdsaWIoaW50IF9fY2F0ZWdvcnksIGNv
bnN0IGNoYXIgKl9fbG9jYWxlKQ0KK3sNCisgIGNoYXIgKl9fcmV0Ow0KKyAgaWYgKChfX3JldCA9
IHNldGxvY2FsZShfX2NhdGVnb3J5LCBfX2xvY2FsZSkpID09IE5VTEwNCisgICAgICAmJiBfX2Nh
dGVnb3J5ID09IExDX0FMTCkNCisgICAgew0KKyAgICAgIC8qIE5ld2xpYiBkb2VzIG5vdCBzdXBw
b3J0IGxvY2FsZSBzdHJpZyBzdWNoIGFzDQorCSAiTENfQ1RZUEU9ZW5fVVMuVVRGODtMQ19OVU1F
UklDPWRlX0RFLlVURjg7Li4uIiAqLw0KKyAgICAgIGNoYXIgX19idWZbTlVNX0NBVEVHT1JJRVNd
W0VOQ09ESU5HX0xFTiArIDFdOw0KKyAgICAgIGNvbnN0IGNoYXIgKl9fcCA9IF9fbG9jYWxlOw0K
KyAgICAgIGNoYXIgX19jYXRbQ0FURUdPUllfTEVOICsgMV0sIF9fbG9jW0VOQ09ESU5HX0xFTiAr
IDFdOw0KKyAgICAgIHdoaWxlICgyID09IHNzY2FuZihfX3AsIEZNVF9MT0NBTEUsIF9fY2F0LCBf
X2xvYykpDQorCXsNCisJICBjb25zdCBjaGFyICpfX3RibFtOVU1fQ0FURUdPUklFU10gPQ0KKwkg
ICAgew0KKwkgICAgICAiTENfQ09MTEFURSIsDQorCSAgICAgICJMQ19DVFlQRSIsDQorCSAgICAg
ICJMQ19NT05FVEFSWSIsDQorCSAgICAgICJMQ19OVU1FUklDIiwNCisJICAgICAgIkxDX1RJTUUi
LA0KKwkgICAgICAiTENfTUVTU0FHRVMiDQorCSAgICB9Ow0KKwkgIGZvciAoaW50IF9faSA9IDA7
IF9faSA8IE5VTV9DQVRFR09SSUVTOyBfX2krKykNCisJICAgIGlmIChzdHJjbXAoX190YmxbX19p
XSwgX19jYXQpID09IDApDQorCSAgICAgIHsNCisJCXN0cm5jcHkoX19idWZbX19pXSwgX19sb2Ms
IHNpemVvZihfX2J1ZltfX2ldKSk7DQorCQlfX2J1ZltfX2ldW0VOQ09ESU5HX0xFTl0gPSAnXDAn
Ow0KKwkJYnJlYWs7DQorCSAgICAgIH0NCisJICBpZiAoKF9fcCA9IHN0cmNocihfX3AsICc7Jykp
ID09IE5VTEwpDQorCSAgICBicmVhazsNCisJICBfX3AgKys7DQorCX0NCisgICAgICBjaGFyIF9f
bmV3bG9jWyhFTkNPRElOR19MRU4gKyAxKSAqIE5VTV9DQVRFR09SSUVTXTsNCisgICAgICBzcHJp
bnRmKF9fbmV3bG9jLCAiJXMvJXMvJXMvJXMvJXMvJXMiLA0KKwkgICAgICBfX2J1ZlswXSwgX19i
dWZbMV0sIF9fYnVmWzJdLCBfX2J1ZlszXSwgX19idWZbNF0sIF9fYnVmWzVdKTsNCisgICAgICBf
X3JldCA9IHNldGxvY2FsZShfX2NhdGVnb3J5LCBfX25ld2xvYyk7DQorDQorICAgIH0NCisgIHJl
dHVybiBfX3JldDsNCit9DQorDQorbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRl
ZmF1bHQpDQorew0KK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9ODQorDQorICBjb25z
dCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4Ojpj
YXRlZ29yeV9uYW1lczsNCisgIGNvbnN0IF9fdHlwZW9mKHNldGxvY2FsZSkgKl9fc2V0bG9jYWxl
ID0gX19zZXRsb2NhbGVfZm9yX25ld2xpYjsNCisNCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZF
UlNJT04NCit9IC8vIG5hbWVzcGFjZQ0KKw0KKy8vIFhYWCBHTElCQ1hYX0FCSSBEZXByZWNhdGVk
DQorI2lmZGVmIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVA0KKyNkZWZpbmUgX0dMSUJDWFhf
TERCTF9DT01QQVQoZGJsLCBsZGJsKSBcDQorICBleHRlcm4gIkMiIHZvaWQgbGRibCAodm9pZCkg
X19hdHRyaWJ1dGVfXyAoKGFsaWFzICgjZGJsKSkpDQorX0dMSUJDWFhfTERCTF9DT01QQVQoX1pT
dDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpLCBfWlN0MTRf
X2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGkpOw0KKyNlbmRpZiAv
LyBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQNCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMv
Y29uZmlnL2xvY2FsZS9uZXdsaWIvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9j
YWxlL25ld2xpYi9jX2xvY2FsZS5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw
MDAwMDAuLjQ2MjkxMDM1MjVmDQotLS0gL2Rldi9udWxsDQorKysgYi9saWJzdGRjKystdjMvY29u
ZmlnL2xvY2FsZS9uZXdsaWIvY19sb2NhbGUuaA0KQEAgLTAsMCArMSw4MiBAQA0KKy8vIFdyYXBw
ZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0NCisN
CisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4NCisvLw0KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5
LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUNCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUNCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKy8vIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQ0KKy8v
IGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKy8vIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorLy8gTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0K
Ky8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorDQorLy8g
VW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlv
bmFsDQorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5
IEV4Y2VwdGlvbiwgdmVyc2lvbg0KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24uDQorDQorLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kDQorLy8gYSBjb3B5IG9mIHRo
ZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsN
CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2
ZWx5LiAgSWYgbm90LCBzZWUNCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQor
DQorLyoqIEBmaWxlIGJpdHMvYysrbG9jYWxlLmgNCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBo
ZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLg0KKyAqICBEbyBu
b3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2xvY2FsZX0NCisgKi8N
CisNCisvLw0KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29y
aWVzLg0KKy8vDQorDQorLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0
LmNvbT4NCisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5u
ZS5qcD4NCisNCisjaWZuZGVmIF9HTElCQ1hYX0NYWF9MT0NBTEVfSA0KKyNkZWZpbmUgX0dMSUJD
WFhfQ1hYX0xPQ0FMRV9IIDENCisNCisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyDQorDQorI2lu
Y2x1ZGUgPGNsb2NhbGU+DQorDQorI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwDQor
DQorbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpDQorew0KK19HTElC
Q1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9ODQorDQorICB0eXBlZGVmIGxvY2FsZV90IF9fY19s
b2NhbGU7DQorDQorICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgYW5k
IGxvbmcgZG91YmxlIHRvIHN0cmluZyBhbmQNCisgIC8vIHJldHVybiBsZW5ndGggb2Ygc3RyaW5n
LiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZQ0KKyAgLy8gZmFs
bCBiYWNrIHRvIHRoZSB1bnNhZmUgdnNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBk
YW5nZXJvdXMNCisgIC8vIGFuZCBzaG91bGQgYmUgYXZvaWRlZC4NCisgIGlubGluZSBpbnQNCisg
IF9fY29udmVydF9mcm9tX3YoY29uc3QgX19jX2xvY2FsZSYgX19jbG9jIF9fYXR0cmlidXRlX18g
KChfX3VudXNlZF9fKSksDQorCQkgICBjaGFyKiBfX291dCwNCisJCSAgIGNvbnN0IGludCBfX3Np
emUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwNCisJCSAgIGNvbnN0IGNoYXIqIF9fZm10
LCAuLi4pDQorICB7DQorICAgIF9fY19sb2NhbGUgX19vbGQgPSB1c2Vsb2NhbGUoX19jbG9jKTsN
CisNCisgICAgX19idWlsdGluX3ZhX2xpc3QgX19hcmdzOw0KKyAgICBfX2J1aWx0aW5fdmFfc3Rh
cnQoX19hcmdzLCBfX2ZtdCk7DQorDQorI2lmIF9HTElCQ1hYX1VTRV9DOTlfU1RESU8NCisgICAg
Y29uc3QgaW50IF9fcmV0ID0gX19idWlsdGluX3ZzbnByaW50ZihfX291dCwgX19zaXplLCBfX2Zt
dCwgX19hcmdzKTsNCisjZWxzZQ0KKyAgICBjb25zdCBpbnQgX19yZXQgPSBfX2J1aWx0aW5fdnNw
cmludGYoX19vdXQsIF9fZm10LCBfX2FyZ3MpOw0KKyNlbmRpZg0KKw0KKyAgICBfX2J1aWx0aW5f
dmFfZW5kKF9fYXJncyk7DQorDQorICAgIHVzZWxvY2FsZShfX29sZCk7DQorICAgIHJldHVybiBf
X3JldDsNCisgIH0NCisNCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04NCit9IC8vIG5h
bWVzcGFjZQ0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9j
YWxlL25ld2xpYi9jb2RlY3Z0X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2Fs
ZS9uZXdsaWIvY29kZWN2dF9tZW1iZXJzLmNjDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg
MDAwMDAwMDAwMDAuLmU0ODM1NDJjZWI0DQotLS0gL2Rldi9udWxsDQorKysgYi9saWJzdGRjKyst
djMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY29kZWN2dF9tZW1iZXJzLmNjDQpAQCAtMCwwICsxLDI4
OCBAQA0KKy8vIHN0ZDo6Y29kZWN2dCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBuZXdsaWIgdmVy
c2lvbiAtKi0gQysrIC0qLQ0KKw0KKy8vIENvcHlyaWdodCAoQykgMjAwMi0yMDIzIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKy8vDQorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQ0KKy8vIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQ0KKy8v
IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlDQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAo
YXQgeW91ciBvcHRpb24pDQorLy8gYW55IGxhdGVyIHZlcnNpb24uDQorDQorLy8gVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQor
Ly8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YNCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlDQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4NCisNCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91
IGFyZSBncmFudGVkIGFkZGl0aW9uYWwNCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhl
IEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uDQorLy8gMy4xLCBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4NCisNCisvLyBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh
bmQNCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25n
IHdpdGggdGhpcyBwcm9ncmFtOw0KKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJ
TkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQ0KKy8vIDxodHRwOi8vd3d3Lmdu
dS5vcmcvbGljZW5zZXMvPi4NCisNCisvLw0KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS41IC0g
VGVtcGxhdGUgY2xhc3MgY29kZWN2dA0KKy8vDQorDQorLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBL
b3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4NCisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlhbm8gPHRh
a2FzaGkueWFub0BuaWZ0eS5uZS5qcD4NCisNCisjaW5jbHVkZSA8bG9jYWxlPg0KKyNpbmNsdWRl
IDxjc3RkbGliPiAgLy8gRm9yIE1CX0NVUl9NQVgNCisjaW5jbHVkZSA8Y2xpbWl0cz4gIC8vIEZv
ciBNQl9MRU5fTUFYDQorI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+DQorDQor
bmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpDQorew0KK19HTElCQ1hY
X0JFR0lOX05BTUVTUEFDRV9WRVJTSU9ODQorDQorICAvLyBTcGVjaWFsaXphdGlvbnMuDQorI2lm
ZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UDQorICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdA0KKyAgY29k
ZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoNCisgIGRvX291dChzdGF0ZV90eXBlJiBf
X3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLA0KKwkgY29uc3QgaW50ZXJuX3R5cGUq
IF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsDQorCSBleHRlcm5f
dHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLA0KKwkgZXh0ZXJuX3R5cGUqJiBfX3Rv
X25leHQpIGNvbnN0DQorICB7DQorICAgIHJlc3VsdCBfX3JldCA9IG9rOw0KKyAgICBzdGF0ZV90
eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOw0KKw0KKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gdXNl
bG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOw0KKw0KKyAgICAvLyB3Y3NucnRvbWJzIGlzICp2
ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOg0KKyAgICAv
LyBpbiBjYXNlIHdlIGZhbGwgYmFjayB0byB3Y3J0b21iIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBh
IGxvb3AuDQorICAgIC8vIE5COiB3Y3NucnRvbWJzIGlzIGEgR05VIGV4dGVuc2lvbg0KKyAgICBm
b3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOw0KKwkgX19mcm9tX25l
eHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kDQorCSAmJiBfX3JldCA9PSBv
azspDQorICAgICAgew0KKwljb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZCA9IHdt
ZW1jaHIoX19mcm9tX25leHQsIEwnXDAnLA0KKwkJCQkJCSAgICAgIF9fZnJvbV9lbmQgLSBfX2Zy
b21fbmV4dCk7DQorCWlmICghX19mcm9tX2NodW5rX2VuZCkNCisJICBfX2Zyb21fY2h1bmtfZW5k
ID0gX19mcm9tX2VuZDsNCisNCisJX19mcm9tID0gX19mcm9tX25leHQ7DQorCWNvbnN0IHNpemVf
dCBfX2NvbnYgPSB3Y3NucnRvbWJzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LA0KKwkJCQkJIF9f
ZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwNCisJCQkJCSBfX3RvX2VuZCAtIF9fdG9fbmV4
dCwgJl9fc3RhdGUpOw0KKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQ0K
KwkgIHsNCisJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhl
IGV4YWN0IHBsYWNlIHdlDQorCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJl
Z2lubmluZyB3aXRoIGEgc2VyaWVzIG9mDQorCSAgICAvLyB3Y3J0b21iLg0KKwkgICAgZm9yICg7
IF9fZnJvbSA8IF9fZnJvbV9uZXh0OyArK19fZnJvbSkNCisJICAgICAgX190b19uZXh0ICs9IHdj
cnRvbWIoX190b19uZXh0LCAqX19mcm9tLCAmX190bXBfc3RhdGUpOw0KKwkgICAgX19zdGF0ZSA9
IF9fdG1wX3N0YXRlOw0KKwkgICAgX19yZXQgPSBlcnJvcjsNCisJICB9DQorCWVsc2UgaWYgKF9f
ZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkNCisJICB7DQorCSAg
ICBfX3RvX25leHQgKz0gX19jb252Ow0KKwkgICAgX19yZXQgPSBwYXJ0aWFsOw0KKwkgIH0NCisJ
ZWxzZQ0KKwkgIHsNCisJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsNCisJICAg
IF9fdG9fbmV4dCArPSBfX2NvbnY7DQorCSAgfQ0KKw0KKwlpZiAoX19mcm9tX25leHQgPCBfX2Zy
b21fZW5kICYmIF9fcmV0ID09IG9rKQ0KKwkgIHsNCisJICAgIGV4dGVybl90eXBlIF9fYnVmW01C
X0xFTl9NQVhdOw0KKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOw0KKwkgICAgY29uc3Qgc2l6
ZV90IF9fY29udjIgPSB3Y3J0b21iKF9fYnVmLCAqX19mcm9tX25leHQsICZfX3RtcF9zdGF0ZSk7
DQorCSAgICBpZiAoX19jb252MiA+IHN0YXRpY19jYXN0PHNpemVfdD4oX190b19lbmQgLSBfX3Rv
X25leHQpKQ0KKwkgICAgICBfX3JldCA9IHBhcnRpYWw7DQorCSAgICBlbHNlDQorCSAgICAgIHsN
CisJCW1lbWNweShfX3RvX25leHQsIF9fYnVmLCBfX2NvbnYyKTsNCisJCV9fc3RhdGUgPSBfX3Rt
cF9zdGF0ZTsNCisJCV9fdG9fbmV4dCArPSBfX2NvbnYyOw0KKwkJKytfX2Zyb21fbmV4dDsNCisJ
ICAgICAgfQ0KKwkgIH0NCisgICAgICB9DQorDQorICAgIHVzZWxvY2FsZShfX29sZCk7DQorDQor
ICAgIHJldHVybiBfX3JldDsNCisgIH0NCisNCisgIGNvZGVjdnRfYmFzZTo6cmVzdWx0DQorICBj
b2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46Og0KKyAgZG9faW4oc3RhdGVfdHlwZSYg
X19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwNCisJY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsDQorCWludGVybl90
eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsDQorCWludGVybl90eXBlKiYgX190b19u
ZXh0KSBjb25zdA0KKyAgew0KKyAgICByZXN1bHQgX19yZXQgPSBvazsNCisgICAgc3RhdGVfdHlw
ZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsNCisNCisgICAgX19jX2xvY2FsZSBfX29sZCA9IHVzZWxv
Y2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsNCisNCisgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVy
eSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoNCisgICAgLy8g
aW4gY2FzZSB3ZSBzdG9yZSBhIEwnXDAnIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuDQor
ICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbg0KKyAgICBmb3IgKF9fZnJv
bV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOw0KKwkgX19mcm9tX25leHQgPCBfX2Zy
b21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kDQorCSAmJiBfX3JldCA9PSBvazspDQorICAg
ICAgew0KKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsNCisJX19mcm9tX2No
dW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbV9u
ZXh0LCAnXDAnLA0KKwkJCQkJCQkJICBfX2Zyb21fZW5kDQorCQkJCQkJCQkgIC0gX19mcm9tX25l
eHQpKTsNCisJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQ0KKwkgIF9fZnJvbV9jaHVua19lbmQgPSBf
X2Zyb21fZW5kOw0KKw0KKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsNCisJc2l6ZV90IF9fY29udiA9
IG1ic25ydG93Y3MoX190b19uZXh0LCAmX19mcm9tX25leHQsDQorCQkJCSAgIF9fZnJvbV9jaHVu
a19lbmQgLSBfX2Zyb21fbmV4dCwNCisJCQkJICAgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0
YXRlKTsNCisJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkNCisJICB7DQor
CSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBw
bGFjZSB3ZQ0KKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcg
d2l0aCBhIHNlcmllcyBvZg0KKwkgICAgLy8gbWJydG93Yy4NCisJICAgIGZvciAoOzsgKytfX3Rv
X25leHQsIF9fZnJvbSArPSBfX2NvbnYpDQorCSAgICAgIHsNCisJCV9fY29udiA9IG1icnRvd2Mo
X190b19uZXh0LCBfX2Zyb20sIF9fZnJvbV9lbmQgLSBfX2Zyb20sDQorCQkJCSAmX190bXBfc3Rh
dGUpOw0KKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKQ0KKwkJICAgIHx8
IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkNCisJCSAgYnJlYWs7DQorCSAgICAg
IH0NCisJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tOw0KKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0
YXRlOw0KKwkgICAgX19yZXQgPSBlcnJvcjsNCisJICB9DQorCWVsc2UgaWYgKF9fZnJvbV9uZXh0
ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkNCisJICB7DQorCSAgICAvLyBJdCBp
cyB1bmNsZWFyIHdoYXQgdG8gcmV0dXJuIGluIHRoaXMgY2FzZSAoc2VlIERSIDM4MikuDQorCSAg
ICBfX3RvX25leHQgKz0gX19jb252Ow0KKwkgICAgX19yZXQgPSBwYXJ0aWFsOw0KKwkgIH0NCisJ
ZWxzZQ0KKwkgIHsNCisJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsNCisJICAg
IF9fdG9fbmV4dCArPSBfX2NvbnY7DQorCSAgfQ0KKw0KKwlpZiAoX19mcm9tX25leHQgPCBfX2Zy
b21fZW5kICYmIF9fcmV0ID09IG9rKQ0KKwkgIHsNCisJICAgIGlmIChfX3RvX25leHQgPCBfX3Rv
X2VuZCkNCisJICAgICAgew0KKwkJLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBl
bmNvZGluZ3MNCisJCV9fdG1wX3N0YXRlID0gX19zdGF0ZTsNCisJCSsrX19mcm9tX25leHQ7DQor
CQkqX190b19uZXh0KysgPSBMJ1wwJzsNCisJICAgICAgfQ0KKwkgICAgZWxzZQ0KKwkgICAgICBf
X3JldCA9IHBhcnRpYWw7DQorCSAgfQ0KKyAgICAgIH0NCisNCisgICAgdXNlbG9jYWxlKF9fb2xk
KTsNCisNCisgICAgcmV0dXJuIF9fcmV0Ow0KKyAgfQ0KKw0KKyAgaW50DQorICBjb2RlY3Z0PHdj
aGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46Og0KKyAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygp
DQorICB7DQorICAgIC8vIFhYWCBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUg
ZW5jb2RpbmcgaXMNCisgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIgc2luZ2xlLWJ5dGUg
b3IgdmFyaWFibGUtd2lkdGguDQorICAgIGludCBfX3JldCA9IDA7DQorICAgIF9fY19sb2NhbGUg
X19vbGQgPSB1c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7DQorICAgIGlmIChNQl9DVVJf
TUFYID09IDEpDQorICAgICAgX19yZXQgPSAxOw0KKyAgICB1c2Vsb2NhbGUoX19vbGQpOw0KKyAg
ICByZXR1cm4gX19yZXQ7DQorICB9DQorDQorICBpbnQNCisgIGNvZGVjdnQ8d2NoYXJfdCwgY2hh
ciwgbWJzdGF0ZV90Pjo6DQorICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQ0KKyAgew0K
KyAgICBfX2NfbG9jYWxlIF9fb2xkID0gdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOw0K
KyAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncy4NCisgICAg
aW50IF9fcmV0ID0gTUJfQ1VSX01BWDsNCisgICAgdXNlbG9jYWxlKF9fb2xkKTsNCisgICAgcmV0
dXJuIF9fcmV0Ow0KKyAgfQ0KKw0KKyAgaW50DQorICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1i
c3RhdGVfdD46Og0KKyAgZG9fbGVuZ3RoKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVy
bl90eXBlKiBfX2Zyb20sDQorCSAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBf
X21heCkgY29uc3QNCisgIHsNCisgICAgaW50IF9fcmV0ID0gMDsNCisgICAgc3RhdGVfdHlwZSBf
X3RtcF9zdGF0ZShfX3N0YXRlKTsNCisNCisgICAgX19jX2xvY2FsZSBfX29sZCA9IHVzZWxvY2Fs
ZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsNCisNCisgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSog
ZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoNCisgICAgLy8gaW4g
Y2FzZSB3ZSBhZHZhbmNlIHBhc3QgaXQgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4NCisg
ICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uDQorDQorICAgIC8vIEEgZHVt
bXkgaW50ZXJuYWwgYnVmZmVyIGlzIG5lZWRlZCBpbiBvcmRlciBmb3IgbWJzbnJ0b2N3cyB0byBj
b25zaWRlcg0KKyAgICAvLyBpdHMgZm91cnRoIHBhcmFtZXRlciAoaXQgd291bGRuJ3Qgd2l0aCBO
VUxMIGFzIGZpcnN0IHBhcmFtZXRlcikuDQorICAgIHdjaGFyX3QqIF9fdG8gPSBzdGF0aWNfY2Fz
dDx3Y2hhcl90Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yod2NoYXJfdCkNCisJCQkJCQkJICAg
KiBfX21heCkpOw0KKyAgICB3aGlsZSAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpDQorICAgICAg
ew0KKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZDsNCisJX19mcm9tX2NodW5r
X2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4obWVtY2hyKF9fZnJvbSwgJ1ww
JywNCisJCQkJCQkJCSAgX19lbmQNCisJCQkJCQkJCSAgLSBfX2Zyb20pKTsNCisJaWYgKCFfX2Zy
b21fY2h1bmtfZW5kKQ0KKwkgIF9fZnJvbV9jaHVua19lbmQgPSBfX2VuZDsNCisNCisJY29uc3Qg
ZXh0ZXJuX3R5cGUqIF9fdG1wX2Zyb20gPSBfX2Zyb207DQorCXNpemVfdCBfX2NvbnYgPSBtYnNu
cnRvd2NzKF9fdG8sICZfX2Zyb20sDQorCQkJCSAgIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb20s
DQorCQkJCSAgIF9fbWF4LCAmX19zdGF0ZSk7DQorCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8
c2l6ZV90PigtMSkpDQorCSAgew0KKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIg
dG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UNCisJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdh
aW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YNCisJICAgIC8vIG1icnRvd2Mu
DQorCSAgICBmb3IgKF9fZnJvbSA9IF9fdG1wX2Zyb207OyBfX2Zyb20gKz0gX19jb252KQ0KKwkg
ICAgICB7DQorCQlfX2NvbnYgPSBtYnJ0b3djKDAsIF9fZnJvbSwgX19lbmQgLSBfX2Zyb20sDQor
CQkJCSAmX190bXBfc3RhdGUpOw0KKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+
KC0xKQ0KKwkJICAgIHx8IF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0yKSkNCisJCSAg
YnJlYWs7DQorCSAgICAgIH0NCisJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsNCisJICAgIF9f
cmV0ICs9IF9fZnJvbSAtIF9fdG1wX2Zyb207DQorCSAgICBicmVhazsNCisJICB9DQorCWlmICgh
X19mcm9tKQ0KKwkgIF9fZnJvbSA9IF9fZnJvbV9jaHVua19lbmQ7DQorDQorCV9fcmV0ICs9IF9f
ZnJvbSAtIF9fdG1wX2Zyb207DQorCV9fbWF4IC09IF9fY29udjsNCisNCisJaWYgKF9fZnJvbSA8
IF9fZW5kICYmIF9fbWF4KQ0KKwkgIHsNCisJICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Ig
c3RhdGVmdWwgZW5jb2RpbmdzDQorCSAgICBfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7DQorCSAgICAr
K19fZnJvbTsNCisJICAgICsrX19yZXQ7DQorCSAgICAtLV9fbWF4Ow0KKwkgIH0NCisgICAgICB9
DQorDQorICAgIHVzZWxvY2FsZShfX29sZCk7DQorDQorICAgIHJldHVybiBfX3JldDsNCisgIH0N
CisjZW5kaWYNCisNCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04NCit9IC8vIG5hbWVz
cGFjZQ0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9jb2xs
YXRlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY29sbGF0
ZV9tZW1iZXJzLmNjDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAuLjc0
YTY0NjE0M2JlDQotLS0gL2Rldi9udWxsDQorKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2Fs
ZS9uZXdsaWIvY29sbGF0ZV9tZW1iZXJzLmNjDQpAQCAtMCwwICsxLDc0IEBADQorLy8gc3RkOjpj
b2xsYXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIG5ld2xpYiB2ZXJzaW9uIC0qLSBDKysgLSot
DQorDQorLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMjMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuDQorLy8NCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGli
cmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlDQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlDQorLy8gdGVybXMgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisvLyBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikN
CisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisvLyBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKy8vIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUNCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0K
Ky8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRk
aXRpb25hbA0KKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGli
cmFyeSBFeGNlcHRpb24sIHZlcnNpb24NCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KKw0KKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZA0KKy8vIGEgY29weSBv
ZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07DQorLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3Bl
Y3RpdmVseS4gIElmIG5vdCwgc2VlDQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+
Lg0KKw0KKy8vDQorLy8gSVNPIEMrKyAxNDg4MjogMjIuMi40LjEuMiAgY29sbGF0ZSB2aXJ0dWFs
IGZ1bmN0aW9ucw0KKy8vDQorDQorLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pA
cmVkaGF0LmNvbT4NCisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0Bu
aWZ0eS5uZS5qcD4NCisNCisjaW5jbHVkZSA8bG9jYWxlPg0KKyNpbmNsdWRlIDxiaXRzL2MrK2xv
Y2FsZV9pbnRlcm5hbC5oPg0KKw0KK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShk
ZWZhdWx0KQ0KK3sNCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTg0KKw0KKyAgLy8g
VGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFw
cyBzaG91bGQNCisgIC8vIGJlIHB1dCB0aGVyZSBpbnN0ZWFkIG9mIGhlcmUuDQorICB0ZW1wbGF0
ZTw+DQorICAgIGludA0KKyAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIq
IF9fb25lLA0KKwkJCSAgICAgIGNvbnN0IGNoYXIqIF9fdHdvKSBjb25zdCB0aHJvdygpDQorICAg
IHsNCisgICAgICBpbnQgX19jbXAgPSBzdHJjb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2Fs
ZV9jb2xsYXRlKTsNCisgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0g
MikpIHwgKF9fY21wICE9IDApOw0KKyAgICB9DQorDQorICB0ZW1wbGF0ZTw+DQorICAgIHNpemVf
dA0KKyAgICBjb2xsYXRlPGNoYXI+OjpfTV90cmFuc2Zvcm0oY2hhciogX190bywgY29uc3QgY2hh
ciogX19mcm9tLA0KKwkJCQlzaXplX3QgX19uKSBjb25zdCB0aHJvdygpDQorICAgIHsgcmV0dXJu
IHN0cnhmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0NCisN
CisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QNCisgIHRlbXBsYXRlPD4NCisgICAgaW50DQor
ICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUoY29uc3Qgd2NoYXJfdCogX19vbmUsDQor
CQkJCSBjb25zdCB3Y2hhcl90KiBfX3R3bykgY29uc3QgdGhyb3coKQ0KKyAgICB7DQorICAgICAg
aW50IF9fY21wID0gd2NzY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7
DQorICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2Nt
cCAhPSAwKTsNCisgICAgfQ0KKw0KKyAgdGVtcGxhdGU8Pg0KKyAgICBzaXplX3QNCisgICAgY29s
bGF0ZTx3Y2hhcl90Pjo6X01fdHJhbnNmb3JtKHdjaGFyX3QqIF9fdG8sIGNvbnN0IHdjaGFyX3Qq
IF9fZnJvbSwNCisJCQkJICAgc2l6ZV90IF9fbikgY29uc3QgdGhyb3coKQ0KKyAgICB7IHJldHVy
biB3Y3N4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9DQor
I2VuZGlmDQorDQorX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9ODQorfSAvLyBuYW1lc3Bh
Y2UNCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY3R5cGVf
bWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9jdHlwZV9tZW1i
ZXJzLmNjDQppbmRleCBlZTdlN2E3OWVmZS4uNmU2MGRmZDU4MzcgMTAwNjQ0DQotLS0gYS9saWJz
dGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY3R5cGVfbWVtYmVycy5jYw0KKysrIGIvbGli
c3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2N0eXBlX21lbWJlcnMuY2MNCkBAIC01OCwz
NyArNTgsMzcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04NCiAgICAgc3dpdGNo
IChfX20pDQogICAgICAgew0KICAgICAgIGNhc2Ugc3BhY2U6DQotCV9fcmV0ID0gd2N0eXBlKCJz
cGFjZSIpOw0KKwlfX3JldCA9IHdjdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsN
CiAJYnJlYWs7DQogICAgICAgY2FzZSBwcmludDoNCi0JX19yZXQgPSB3Y3R5cGUoInByaW50Iik7
DQorCV9fcmV0ID0gd2N0eXBlX2woInByaW50IiwgX01fY19sb2NhbGVfY3R5cGUpOw0KIAlicmVh
azsNCiAgICAgICBjYXNlIGNudHJsOg0KLQlfX3JldCA9IHdjdHlwZSgiY250cmwiKTsNCisJX19y
ZXQgPSB3Y3R5cGVfbCgiY250cmwiLCBfTV9jX2xvY2FsZV9jdHlwZSk7DQogCWJyZWFrOw0KICAg
ICAgIGNhc2UgdXBwZXI6DQotCV9fcmV0ID0gd2N0eXBlKCJ1cHBlciIpOw0KKwlfX3JldCA9IHdj
dHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsNCiAJYnJlYWs7DQogICAgICAgY2Fz
ZSBsb3dlcjoNCi0JX19yZXQgPSB3Y3R5cGUoImxvd2VyIik7DQorCV9fcmV0ID0gd2N0eXBlX2wo
Imxvd2VyIiwgX01fY19sb2NhbGVfY3R5cGUpOw0KIAlicmVhazsNCiAgICAgICBjYXNlIGFscGhh
Og0KLQlfX3JldCA9IHdjdHlwZSgiYWxwaGEiKTsNCisJX19yZXQgPSB3Y3R5cGVfbCgiYWxwaGEi
LCBfTV9jX2xvY2FsZV9jdHlwZSk7DQogCWJyZWFrOw0KICAgICAgIGNhc2UgZGlnaXQ6DQotCV9f
cmV0ID0gd2N0eXBlKCJkaWdpdCIpOw0KKwlfX3JldCA9IHdjdHlwZV9sKCJkaWdpdCIsIF9NX2Nf
bG9jYWxlX2N0eXBlKTsNCiAJYnJlYWs7DQogICAgICAgY2FzZSBwdW5jdDoNCi0JX19yZXQgPSB3
Y3R5cGUoInB1bmN0Iik7DQorCV9fcmV0ID0gd2N0eXBlX2woInB1bmN0IiwgX01fY19sb2NhbGVf
Y3R5cGUpOw0KIAlicmVhazsNCiAgICAgICBjYXNlIHhkaWdpdDoNCi0JX19yZXQgPSB3Y3R5cGUo
InhkaWdpdCIpOw0KKwlfX3JldCA9IHdjdHlwZV9sKCJ4ZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlw
ZSk7DQogCWJyZWFrOw0KICAgICAgIGNhc2UgYWxudW06DQotCV9fcmV0ID0gd2N0eXBlKCJhbG51
bSIpOw0KKwlfX3JldCA9IHdjdHlwZV9sKCJhbG51bSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsNCiAJ
YnJlYWs7DQogICAgICAgY2FzZSBncmFwaDoNCi0JX19yZXQgPSB3Y3R5cGUoImdyYXBoIik7DQor
CV9fcmV0ID0gd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOw0KIAlicmVhazsN
CiAgICAgICBkZWZhdWx0Og0KIAkvLyBEaWZmZXJlbnQgZnJvbSB0aGUgZ2VuZXJpYyB2ZXJzaW9u
LCB4ZGlnaXQgYW5kIHByaW50IGluDQpAQCAtMTAwLDI1ICsxMDAsMjUgQEAgX0dMSUJDWFhfQkVH
SU5fTkFNRVNQQUNFX1ZFUlNJT04NCiAJLy8gZXF1YWwgdG8gX1ggb3IgX0IsIHRoZSB0d28gY2Fz
ZXMgYXJlIHNwZWNpZmljYWxseSBoYW5kbGVkDQogCS8vIGhlcmUuDQogCWlmIChfX20gJiB4ZGln
aXQpDQotCSAgX19yZXQgPSB3Y3R5cGUoInhkaWdpdCIpOw0KKwkgIF9fcmV0ID0gd2N0eXBlX2wo
InhkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsNCiAJZWxzZSBpZiAoX19tICYgcHJpbnQpDQot
CSAgX19yZXQgPSB3Y3R5cGUoInByaW50Iik7DQorCSAgX19yZXQgPSB3Y3R5cGVfbCgicHJpbnQi
LCBfTV9jX2xvY2FsZV9jdHlwZSk7DQogCWVsc2UNCiAJICBfX3JldCA9IF9fd21hc2tfdHlwZSgp
Ow0KICAgICAgIH0NCiAgICAgcmV0dXJuIF9fcmV0Ow0KLSAgfTsNCisgIH0NCiANCiAgIHdjaGFy
X3QNCiAgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QgX19jKSBjb25zdA0KLSAg
eyByZXR1cm4gdG93dXBwZXIoX19jKTsgfQ0KKyAgeyByZXR1cm4gdG93dXBwZXJfbChfX2MsIF9N
X2NfbG9jYWxlX2N0eXBlKTsgfQ0KIA0KICAgY29uc3Qgd2NoYXJfdCoNCiAgIGN0eXBlPHdjaGFy
X3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0
DQogICB7DQogICAgIHdoaWxlIChfX2xvIDwgX19oaSkNCiAgICAgICB7DQotICAgICAgICAqX19s
byA9IHRvd3VwcGVyKCpfX2xvKTsNCisJKl9fbG8gPSB0b3d1cHBlcl9sKCpfX2xvLCBfTV9jX2xv
Y2FsZV9jdHlwZSk7DQogICAgICAgICArK19fbG87DQogICAgICAgfQ0KICAgICByZXR1cm4gX19o
aTsNCkBAIC0xMjYsMTQgKzEyNiwxNCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lP
Tg0KIA0KICAgd2NoYXJfdA0KICAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCBf
X2MpIGNvbnN0DQotICB7IHJldHVybiB0b3dsb3dlcihfX2MpOyB9DQorICB7IHJldHVybiB0b3ds
b3dlcl9sKF9fYywgX01fY19sb2NhbGVfY3R5cGUpOyB9DQogDQogICBjb25zdCB3Y2hhcl90Kg0K
ICAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJf
dCogX19oaSkgY29uc3QNCiAgIHsNCiAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQ0KICAgICAgIHsN
Ci0gICAgICAgICpfX2xvID0gdG93bG93ZXIoKl9fbG8pOw0KKwkqX19sbyA9IHRvd2xvd2VyX2wo
Kl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsNCiAgICAgICAgICsrX19sbzsNCiAgICAgICB9DQog
ICAgIHJldHVybiBfX2hpOw0KQEAgLTE0OCw3ICsxNDgsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1F
U1BBQ0VfVkVSU0lPTg0KICAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDc7DQogICAg
IGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytf
X2JpdGN1cikNCiAgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQ0KLQkgICYmIGlzd2N0
eXBlKF9fYywgX01fd21hc2tbX19iaXRjdXJdKSkNCisJICAmJiBpc3djdHlwZV9sKF9fYywgX01f
d21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpDQogCXsNCiAJICBfX3JldCA9IHRy
dWU7DQogCSAgYnJlYWs7DQpAQCAtMTY2LDcgKzE2Niw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVT
UEFDRV9WRVJTSU9ODQogCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gNzsNCiAJbWFzayBf
X20gPSAwOw0KIAlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFz
a3NpemU7ICsrX19iaXRjdXIpDQotCSAgaWYgKGlzd2N0eXBlKCpfX2xvLCBfTV93bWFza1tfX2Jp
dGN1cl0pKQ0KKwkgIGlmIChpc3djdHlwZV9sKCpfX2xvLCBfTV93bWFza1tfX2JpdGN1cl0sIF9N
X2NfbG9jYWxlX2N0eXBlKSkNCiAJICAgIF9fbSB8PSBfTV9iaXRbX19iaXRjdXJdOw0KIAkqX192
ZWMgPSBfX207DQogICAgICAgfQ0KQEAgLTIxNSw3ICsyMTUsOSBAQCBfR0xJQkNYWF9CRUdJTl9O
QU1FU1BBQ0VfVkVSU0lPTg0KICAgew0KICAgICBpZiAoX193YyA+PSAwICYmIF9fd2MgPCAxMjgg
JiYgX01fbmFycm93X29rKQ0KICAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107DQorICAgIF9f
Y19sb2NhbGUgX19vbGQgPSB1c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOw0KICAgICBjb25z
dCBpbnQgX19jID0gd2N0b2IoX193Yyk7DQorICAgIHVzZWxvY2FsZShfX29sZCk7DQogICAgIHJl
dHVybiAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7DQog
ICB9DQogDQpAQCAtMjI0LDYgKzIyNiw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJT
SU9ODQogICBkb19uYXJyb3coY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19o
aSwgY2hhciBfX2RmYXVsdCwNCiAJICAgIGNoYXIqIF9fZGVzdCkgY29uc3QNCiAgIHsNCisgICAg
X19jX2xvY2FsZSBfX29sZCA9IHVzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7DQogICAgIGlm
IChfTV9uYXJyb3dfb2spDQogICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQ0KIAl7DQpAQCAtMjQ1
LDEyICsyNDgsMTQgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04NCiAJICArK19f
bG87DQogCSAgKytfX2Rlc3Q7DQogCX0NCisgICAgdXNlbG9jYWxlKF9fb2xkKTsNCiAgICAgcmV0
dXJuIF9faGk7DQogICB9DQogDQogICB2b2lkDQogICBjdHlwZTx3Y2hhcl90Pjo6X01faW5pdGlh
bGl6ZV9jdHlwZSgpIHRocm93KCkNCiAgIHsNCisgICAgX19jX2xvY2FsZSBfX29sZCA9IHVzZWxv
Y2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7DQogICAgIHdpbnRfdCBfX2k7DQogICAgIGZvciAoX19p
ID0gMDsgX19pIDwgMTI4OyArK19faSkNCiAgICAgICB7DQpAQCAtMjY0LDE1ICsyNjksMTYgQEAg
X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04NCiAgICAgICBfTV9uYXJyb3dfb2sgPSB0
cnVlOw0KICAgICBlbHNlDQogICAgICAgX01fbmFycm93X29rID0gZmFsc2U7DQotICAgIGZvciAo
c2l6ZV90IF9faSA9IDA7DQotCSBfX2kgPCBzaXplb2YoX01fd2lkZW4pIC8gc2l6ZW9mKHdpbnRf
dCk7ICsrX19pKQ0KLSAgICAgIF9NX3dpZGVuW19faV0gPSBidG93YyhfX2kpOw0KKyAgICBmb3Ig
KHNpemVfdCBfX2ogPSAwOw0KKwkgX19qIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNpemVvZih3aW50
X3QpOyArK19faikNCisgICAgICBfTV93aWRlbltfX2pdID0gYnRvd2MoX19qKTsNCiANCi0gICAg
Zm9yIChzaXplX3QgX19pID0gMDsgX19pIDw9IDc7ICsrX19pKQ0KKyAgICBmb3IgKHNpemVfdCBf
X2sgPSAwOyBfX2sgPD0gNzsgKytfX2spDQogICAgICAgew0KLQlfTV9iaXRbX19pXSA9IHN0YXRp
Y19jYXN0PG1hc2s+KDEgPDwgX19pKTsNCi0JX01fd21hc2tbX19pXSA9IF9NX2NvbnZlcnRfdG9f
d21hc2soX01fYml0W19faV0pOw0KKwlfTV9iaXRbX19rXSA9IHN0YXRpY19jYXN0PG1hc2s+KDEg
PDwgX19rKTsNCisJX01fd21hc2tbX19rXSA9IF9NX2NvbnZlcnRfdG9fd21hc2soX01fYml0W19f
a10pOw0KICAgICAgIH0NCisgICAgdXNlbG9jYWxlKF9fb2xkKTsNCiAgIH0NCiAjZW5kaWYgLy8g
IF9HTElCQ1hYX1VTRV9XQ0hBUl9UDQogDQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZp
Zy9sb2NhbGUvbmV3bGliL21lc3NhZ2VzX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmln
L2xvY2FsZS9uZXdsaWIvbWVzc2FnZXNfbWVtYmVycy5jYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQN
CmluZGV4IDAwMDAwMDAwMDAwLi41OTE5OTVmYWJhNA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvbGli
c3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL21lc3NhZ2VzX21lbWJlcnMuY2MNCkBAIC0w
LDAgKzEsMTczIEBADQorLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBu
ZXdsaWIgdmVyc2lvbiAtKi0gQysrIC0qLQ0KKw0KKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDIz
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKy8vDQorLy8gVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQ0KKy8v
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVy
IHRoZQ0KKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlDQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv
biAzLCBvciAoYXQgeW91ciBvcHRpb24pDQorLy8gYW55IGxhdGVyIHZlcnNpb24uDQorDQorLy8g
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsDQorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YNCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNp
b24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwNCisvLyBwZXJtaXNzaW9ucyBkZXNjcmli
ZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uDQorLy8gMy4x
LCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4NCisNCisvLyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBhbmQNCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0
aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOw0KKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMg
YW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQ0KKy8vIDxodHRw
Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4NCisNCisvLw0KKy8vIElTTyBDKysgMTQ4ODI6IDIy
LjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zDQorLy8NCisNCisvLyBXcml0dGVu
IGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPg0KKy8vIE1vZGlmaWVkIGJ5IFRh
a2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5pZnR5Lm5lLmpwPg0KKw0KKyNpbmNsdWRlIDxsb2Nh
bGU+DQorI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+DQorDQorI2luY2x1ZGUg
PGNzdGRsaWI+CS8vIHN0ZDo6ZnJlZQ0KKyNpbmNsdWRlIDxzdHJpbmcuaD4JLy8gOjpzdHJkdXAN
CisNCituYW1lc3BhY2UNCit7DQorICB1c2luZyBuYW1lc3BhY2Ugc3RkOw0KKw0KKyAgY29uc3Qg
Y2hhcioNCisgIGdldF9nbGliY19tc2coX19jX2xvY2FsZSBfX2xvY2FsZV9tZXNzYWdlcyBfX2F0
dHJpYnV0ZV9fKCh1bnVzZWQpKSwNCisJCWNvbnN0IGNoYXIqIF9fbmFtZV9tZXNzYWdlcyBfX2F0
dHJpYnV0ZV9fKCh1bnVzZWQpKSwNCisJCWNvbnN0IGNoYXIqIF9fZG9tYWlubmFtZSwNCisJCWNv
bnN0IGNoYXIqIF9fZGZhdWx0KQ0KKyAgew0KKyAgICBzdGQ6Ol9fY19sb2NhbGUgX19vbGQgPSB1
c2Vsb2NhbGUoX19sb2NhbGVfbWVzc2FnZXMpOw0KKyAgICBjb25zdCBjaGFyKiBfX21zZyA9IGRn
ZXR0ZXh0KF9fZG9tYWlubmFtZSwgX19kZmF1bHQpOw0KKyAgICB1c2Vsb2NhbGUoX19vbGQpOw0K
KyAgICByZXR1cm4gX19tc2c7DQorICB9DQorfQ0KKw0KK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhf
VklTSUJJTElUWShkZWZhdWx0KQ0KK3sNCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lP
Tg0KKw0KKyAgLy8gU3BlY2lhbGl6YXRpb25zLg0KKyAgdGVtcGxhdGU8Pg0KKyAgICB0eXBlbmFt
ZSBtZXNzYWdlczxjaGFyPjo6Y2F0YWxvZw0KKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fb3Blbihj
b25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywNCisJCQkgICAgY29uc3QgbG9jYWxlJiBfX2wp
IGNvbnN0DQorICAgIHsNCisgICAgICB0eXBlZGVmIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0
ZV90PiBfX2NvZGVjdnRfdDsNCisgICAgICBjb25zdCBfX2NvZGVjdnRfdCYgX19jb2RlY3Z0ID0g
dXNlX2ZhY2V0PF9fY29kZWN2dF90PihfX2wpOw0KKw0KKyAgICAgIGJpbmRfdGV4dGRvbWFpbl9j
b2Rlc2V0KF9fcy5jX3N0cigpLA0KKwkgIG5sX2xhbmdpbmZvX2woQ09ERVNFVCwgX19jb2RlY3Z0
Ll9NX2NfbG9jYWxlX2NvZGVjdnQpKTsNCisgICAgICByZXR1cm4gZ2V0X2NhdGFsb2dzKCkuX01f
YWRkKF9fcy5jX3N0cigpLCBfX2wpOw0KKyAgICB9DQorDQorICB0ZW1wbGF0ZTw+DQorICAgIHZv
aWQNCisgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2Nsb3NlKGNhdGFsb2cgX19jKSBjb25zdA0KKyAg
ICB7IGdldF9jYXRhbG9ncygpLl9NX2VyYXNlKF9fYyk7IH0NCisNCisgIHRlbXBsYXRlPD4NCisg
ICAgc3RyaW5nDQorICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQoY2F0YWxvZyBfX2MsIGludCwg
aW50LA0KKwkJCSAgIGNvbnN0IHN0cmluZyYgX19kZmF1bHQpIGNvbnN0DQorICAgIHsNCisgICAg
ICBpZiAoX19jIDwgMCB8fCBfX2RmYXVsdC5lbXB0eSgpKQ0KKwlyZXR1cm4gX19kZmF1bHQ7DQor
DQorICAgICAgY29uc3QgQ2F0YWxvZ19pbmZvKiBfX2NhdF9pbmZvID0gZ2V0X2NhdGFsb2dzKCku
X01fZ2V0KF9fYyk7DQorDQorICAgICAgaWYgKCFfX2NhdF9pbmZvKQ0KKwlyZXR1cm4gX19kZmF1
bHQ7DQorDQorICAgICAgcmV0dXJuIGdldF9nbGliY19tc2coX01fY19sb2NhbGVfbWVzc2FnZXMs
IF9NX25hbWVfbWVzc2FnZXMsDQorCQkJICAgX19jYXRfaW5mby0+X01fZG9tYWluLA0KKwkJCSAg
IF9fZGZhdWx0LmNfc3RyKCkpOw0KKyAgICB9DQorDQorI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hB
Ul9UDQorICB0ZW1wbGF0ZTw+DQorICAgIHR5cGVuYW1lIG1lc3NhZ2VzPHdjaGFyX3Q+OjpjYXRh
bG9nDQorICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxj
aGFyPiYgX19zLA0KKwkJCSAgICAgICBjb25zdCBsb2NhbGUmIF9fbCkgY29uc3QNCisgICAgew0K
KyAgICAgIHR5cGVkZWYgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+IF9fY29kZWN2
dF90Ow0KKyAgICAgIGNvbnN0IF9fY29kZWN2dF90JiBfX2NvZGVjdnQgPSB1c2VfZmFjZXQ8X19j
b2RlY3Z0X3Q+KF9fbCk7DQorDQorICAgICAgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoX19zLmNf
c3RyKCksDQorCSAgbmxfbGFuZ2luZm9fbChDT0RFU0VULCBfX2NvZGVjdnQuX01fY19sb2NhbGVf
Y29kZWN2dCkpOw0KKw0KKyAgICAgIHJldHVybiBnZXRfY2F0YWxvZ3MoKS5fTV9hZGQoX19zLmNf
c3RyKCksIF9fbCk7DQorICAgIH0NCisNCisgIHRlbXBsYXRlPD4NCisgICAgdm9pZA0KKyAgICBt
ZXNzYWdlczx3Y2hhcl90Pjo6ZG9fY2xvc2UoY2F0YWxvZyBfX2MpIGNvbnN0DQorICAgIHsgZ2V0
X2NhdGFsb2dzKCkuX01fZXJhc2UoX19jKTsgfQ0KKw0KKyAgdGVtcGxhdGU8Pg0KKyAgICB3c3Ry
aW5nDQorICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19nZXQoY2F0YWxvZyBfX2MsIGludCwgaW50
LA0KKwkJCSAgICAgIGNvbnN0IHdzdHJpbmcmIF9fd2RmYXVsdCkgY29uc3QNCisgICAgew0KKyAg
ICAgIGlmIChfX2MgPCAwIHx8IF9fd2RmYXVsdC5lbXB0eSgpKQ0KKwlyZXR1cm4gX193ZGZhdWx0
Ow0KKw0KKyAgICAgIGNvbnN0IENhdGFsb2dfaW5mbyogX19jYXRfaW5mbyA9IGdldF9jYXRhbG9n
cygpLl9NX2dldChfX2MpOw0KKw0KKyAgICAgIGlmICghX19jYXRfaW5mbykNCisJcmV0dXJuIF9f
d2RmYXVsdDsNCisNCisgICAgICB0eXBlZGVmIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0
ZV90PiBfX2NvZGVjdnRfdDsNCisgICAgICBjb25zdCBfX2NvZGVjdnRfdCYgX19jb252ID0NCisJ
dXNlX2ZhY2V0PF9fY29kZWN2dF90PihfX2NhdF9pbmZvLT5fTV9sb2NhbGUpOw0KKw0KKyAgICAg
IGNvbnN0IGNoYXIqIF9fdHJhbnNsYXRpb247DQorICAgICAgbWJzdGF0ZV90IF9fc3RhdGU7DQor
ICAgICAgX19idWlsdGluX21lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOw0K
KyAgICAgIHsNCisJY29uc3Qgd2NoYXJfdCogX193ZGZhdWx0X25leHQ7DQorCXNpemVfdCBfX21i
X3NpemUgPSBfX3dkZmF1bHQuc2l6ZSgpICogX19jb252Lm1heF9sZW5ndGgoKTsNCisJY2hhciog
X19kZmF1bHQgPQ0KKwkgIHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVv
ZihjaGFyKSAqIChfX21iX3NpemUgKyAxKSkpOw0KKwljaGFyKiBfX2RmYXVsdF9uZXh0Ow0KKwlf
X2NvbnYub3V0KF9fc3RhdGUsDQorCQkgICBfX3dkZmF1bHQuZGF0YSgpLCBfX3dkZmF1bHQuZGF0
YSgpICsgX193ZGZhdWx0LnNpemUoKSwNCisJCSAgIF9fd2RmYXVsdF9uZXh0LA0KKwkJICAgX19k
ZmF1bHQsIF9fZGZhdWx0ICsgX19tYl9zaXplLCBfX2RmYXVsdF9uZXh0KTsNCisNCisJLy8gTWFr
ZSBzdXJlIHN0cmluZyBwYXNzZWQgdG8gZGdldHRleHQgaXMgXDAgdGVybWluYXRlZC4NCisJKl9f
ZGZhdWx0X25leHQgPSAnXDAnOw0KKwlfX3RyYW5zbGF0aW9uID0gZ2V0X2dsaWJjX21zZyhfTV9j
X2xvY2FsZV9tZXNzYWdlcywgX01fbmFtZV9tZXNzYWdlcywNCisJCQkJICAgICAgX19jYXRfaW5m
by0+X01fZG9tYWluLCBfX2RmYXVsdCk7DQorDQorCS8vIElmIHdlIGVuZCB1cCBnZXR0aW5nIGRl
ZmF1bHQgdmFsdWUgYmFjayB3ZSBjYW4gc2ltcGx5IHJldHVybiBvcmlnaW5hbA0KKwkvLyBkZWZh
dWx0IHZhbHVlLg0KKwlpZiAoX190cmFuc2xhdGlvbiA9PSBfX2RmYXVsdCkNCisJICByZXR1cm4g
X193ZGZhdWx0Ow0KKyAgICAgIH0NCisNCisgICAgICBfX2J1aWx0aW5fbWVtc2V0KCZfX3N0YXRl
LCAwLCBzaXplb2YobWJzdGF0ZV90KSk7DQorICAgICAgc2l6ZV90IF9fc2l6ZSA9IF9fYnVpbHRp
bl9zdHJsZW4oX190cmFuc2xhdGlvbik7DQorICAgICAgY29uc3QgY2hhciogX190cmFuc2xhdGlv
bl9uZXh0Ow0KKyAgICAgIHdjaGFyX3QqIF9fd3RyYW5zbGF0aW9uID0NCisJc3RhdGljX2Nhc3Q8
d2NoYXJfdCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKHdjaGFyX3QpICogKF9fc2l6ZSArIDEp
KSk7DQorICAgICAgd2NoYXJfdCogX193dHJhbnNsYXRpb25fbmV4dDsNCisgICAgICBfX2NvbnYu
aW4oX19zdGF0ZSwgX190cmFuc2xhdGlvbiwgX190cmFuc2xhdGlvbiArIF9fc2l6ZSwNCisJCV9f
dHJhbnNsYXRpb25fbmV4dCwNCisJCV9fd3RyYW5zbGF0aW9uLCBfX3d0cmFuc2xhdGlvbiArIF9f
c2l6ZSwNCisJCV9fd3RyYW5zbGF0aW9uX25leHQpOw0KKyAgICAgIHJldHVybiB3c3RyaW5nKF9f
d3RyYW5zbGF0aW9uLCBfX3d0cmFuc2xhdGlvbl9uZXh0KTsNCisgICAgfQ0KKyNlbmRpZg0KKw0K
K19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTg0KK30gLy8gbmFtZXNwYWNlDQpkaWZmIC0t
Z2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL21lc3NhZ2VzX21lbWJlcnMu
aCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9tZXNzYWdlc19tZW1iZXJzLmgN
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMC4uZGRmYWMyMDc4OTcNCi0t
LSAvZGV2L251bGwNCisrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9tZXNz
YWdlc19tZW1iZXJzLmgNCkBAIC0wLDAgKzEsMTUyIEBADQorLy8gc3RkOjptZXNzYWdlcyBpbXBs
ZW1lbnRhdGlvbiBkZXRhaWxzLCBuZXdsaWIgdmVyc2lvbiAtKi0gQysrIC0qLQ0KKw0KKy8vIENv
cHlyaWdodCAoQykgMjAwMS0yMDIzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKy8v
DQorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlz
IGxpYnJhcnkgaXMgZnJlZQ0KKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQ0KKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlDQorLy8gRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pDQorLy8gYW55IGxh
dGVyIHZlcnNpb24uDQorDQorLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisvLyBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorLy8gR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCisvLyBVbmRlciBT
ZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwNCisv
LyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0
aW9uLCB2ZXJzaW9uDQorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbi4NCisNCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQNCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBS
dW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOw0KKy8vIHNl
ZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJ
ZiBub3QsIHNlZQ0KKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4NCisNCisvKiog
QGZpbGUgYml0cy9tZXNzYWdlc19tZW1iZXJzLmgNCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBo
ZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLg0KKyAqICBEbyBu
b3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2xvY2FsZX0NCisgKi8N
CisNCisvLw0KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIGZ1bmN0aW9u
cw0KKy8vDQorDQorLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNv
bT4NCisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q
cD4NCisNCisjaW5jbHVkZSA8bGliaW50bC5oPg0KKw0KK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhf
VklTSUJJTElUWShkZWZhdWx0KQ0KK3sNCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lP
Tg0KKw0KKyAgLy8gTm9uLXZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4NCisgIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4NCisgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9f
cmVmcykNCisgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRf
Y19sb2NhbGUoKSksDQorICAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpDQor
ICAgIHsgfQ0KKw0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KKyAgICBtZXNzYWdlczxf
Q2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLA0KKwkJ
CSAgICAgICBzaXplX3QgX19yZWZzKQ0KKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxl
X21lc3NhZ2VzKDApLCBfTV9uYW1lX21lc3NhZ2VzKDApDQorICAgIHsNCisgICAgICBpZiAoX19i
dWlsdGluX3N0cmNtcChfX3MsIF9TX2dldF9jX25hbWUoKSkgIT0gMCkNCisJew0KKwkgIGNvbnN0
IHNpemVfdCBfX2xlbiA9IF9fYnVpbHRpbl9zdHJsZW4oX19zKSArIDE7DQorCSAgY2hhciogX190
bXAgPSBuZXcgY2hhcltfX2xlbl07DQorCSAgX19idWlsdGluX21lbWNweShfX3RtcCwgX19zLCBf
X2xlbik7DQorCSAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOw0KKwl9DQorICAgICAgZWxzZQ0K
KwlfTV9uYW1lX21lc3NhZ2VzID0gX1NfZ2V0X2NfbmFtZSgpOw0KKw0KKyAgICAgIC8vIExhc3Qg
dG8gYXZvaWQgbGVha2luZyBtZW1vcnkgaWYgbmV3IHRocm93cy4NCisgICAgICBfTV9jX2xvY2Fs
ZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7DQorICAgIH0NCisNCisgIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCisgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6
Y2F0YWxvZw0KKyAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxj
aGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLA0KKwkJCSAgIGNvbnN0IGNoYXIqIF9fZGly
KSBjb25zdA0KKyAgICB7DQorICAgICAgYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGly
KTsNCisgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsNCisgICAgfQ0KKw0K
KyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLg0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPg0KKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+bWVzc2FnZXMoKQ0KKyAgICB7DQorICAgICAg
aWYgKF9NX25hbWVfbWVzc2FnZXMgIT0gX1NfZ2V0X2NfbmFtZSgpKQ0KKwlkZWxldGUgW10gX01f
bmFtZV9tZXNzYWdlczsNCisgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21l
c3NhZ2VzKTsNCisgICAgfQ0KKw0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KKyAgICB0
eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nDQorICAgIG1lc3NhZ2VzPF9DaGFyVD46
OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsDQorCQkJICAgICAgY29uc3Qg
bG9jYWxlJikgY29uc3QNCisgICAgew0KKyAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRv
bmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbg0KKyAgICAgIC8vIGJlIHVzZWQu
DQorICAgICAgdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7DQorICAgICAgcmV0dXJuIDA7DQorICAg
IH0NCisNCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCisgICAgdm9pZA0KKyAgICBtZXNz
YWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdA0KKyAgICB7IH0NCisNCisgIC8v
IG1lc3NhZ2VzX2J5bmFtZQ0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KKyAgICBtZXNz
YWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6
ZV90IF9fcmVmcykNCisgICAgOiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykNCisgICAgew0KKyAg
ICAgIGlmICh0aGlzLT5fTV9uYW1lX21lc3NhZ2VzICE9IGxvY2FsZTo6ZmFjZXQ6Ol9TX2dldF9j
X25hbWUoKSkNCisJew0KKwkgIGRlbGV0ZSBbXSB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzOw0KKwkg
IGlmIChfX2J1aWx0aW5fc3RyY21wKF9fcywgbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgp
KSAhPSAwKQ0KKwkgICAgew0KKwkgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX2J1aWx0aW5f
c3RybGVuKF9fcykgKyAxOw0KKwkgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsN
CisJICAgICAgX19idWlsdGluX21lbWNweShfX3RtcCwgX19zLCBfX2xlbik7DQorCSAgICAgIHRo
aXMtPl9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsNCisJICAgIH0NCisJICBlbHNlDQorCSAgICB0
aGlzLT5fTV9uYW1lX21lc3NhZ2VzID0gbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgpOw0K
Kwl9DQorDQorICAgICAgaWYgKF9fYnVpbHRpbl9zdHJjbXAoX19zLCAiQyIpICE9IDANCisJICAm
JiBfX2J1aWx0aW5fc3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkNCisJew0KKwkgIHRoaXMtPl9T
X2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMpOw0KKwkgIHRoaXMt
Pl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsNCisJ
fQ0KKyAgICB9DQorDQorICAgLy9TcGVjaWFsaXphdGlvbnMuDQorICB0ZW1wbGF0ZTw+DQorICAg
IHR5cGVuYW1lIG1lc3NhZ2VzPGNoYXI+OjpjYXRhbG9nDQorICAgIG1lc3NhZ2VzPGNoYXI+Ojpk
b19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYsDQorCQkJICAgIGNvbnN0IGxvY2FsZSYp
IGNvbnN0Ow0KKw0KKyAgdGVtcGxhdGU8Pg0KKyAgICB2b2lkDQorICAgIG1lc3NhZ2VzPGNoYXI+
Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdDsNCisNCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFS
X1QNCisgIHRlbXBsYXRlPD4NCisgICAgdHlwZW5hbWUgbWVzc2FnZXM8d2NoYXJfdD46OmNhdGFs
b2cNCisgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNo
YXI+JiwNCisJCQkgICAgICAgY29uc3QgbG9jYWxlJikgY29uc3Q7DQorDQorICB0ZW1wbGF0ZTw+
DQorICAgIHZvaWQNCisgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNv
bnN0Ow0KKyNlbmRpZg0KKw0KK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTg0KK30gLy8g
bmFtZXNwYWNlDQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGli
L21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIv
bW9uZXRhcnlfbWVtYmVycy5jYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAw
MDAwLi4yYmJjOTZlNzNhNA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvbGlic3RkYysrLXYzL2NvbmZp
Zy9sb2NhbGUvbmV3bGliL21vbmV0YXJ5X21lbWJlcnMuY2MNCkBAIC0wLDAgKzEsOTQyIEBADQor
Ly8gc3RkOjptb25leXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIG5ld2xpYiB2ZXJzaW9u
IC0qLSBDKysgLSotDQorDQorLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMjMgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuDQorLy8NCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05V
IElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlDQorLy8gc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlDQorLy8gdGVy
bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUN
CisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5
b3VyIG9wdGlvbikNCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisvLyBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisvLyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZg0KKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUNCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLg0KKw0KKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJl
IGdyYW50ZWQgYWRkaXRpb25hbA0KKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0ND
IFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24NCisvLyAzLjEsIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KKw0KKy8vIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZA0K
Ky8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0
aCB0aGlzIHByb2dyYW07DQorLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5S
VU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlDQorLy8gPGh0dHA6Ly93d3cuZ251Lm9y
Zy9saWNlbnNlcy8+Lg0KKw0KKy8vDQorLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9u
ZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucw0KKy8vDQorDQorLy8gV3JpdHRlbiBieSBCZW5qYW1p
biBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4NCisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlhbm8g
PHRha2FzaGkueWFub0BuaWZ0eS5uZS5qcD4NCisNCisjaW5jbHVkZSA8bG9jYWxlPg0KKyNpbmNs
dWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPg0KKw0KK25hbWVzcGFjZSBzdGQgX0dMSUJD
WFhfVklTSUJJTElUWShkZWZhdWx0KQ0KK3sNCitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVS
U0lPTg0KKw0KKy8vIFRoaXMgZmlsZSBtaWdodCBiZSBjb21waWxlZCB0d2ljZSwgYnV0IHdlIG9u
bHkgd2FudCB0byBkZWZpbmUgdGhlIG1lbWJlcnMNCisvLyBvZiBtb25leV9iYXNlIG9uY2UuDQor
I2lmICEgX0dMSUJDWFhfVVNFX0NYWDExX0FCSQ0KKw0KKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1
cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6DQorICAv
LyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlDQorICBtb25leV9iYXNlOjpwYXR0ZXJuDQor
ICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIg
X19zcGFjZSwNCisJCQkJICAgY2hhciBfX3Bvc24pIHRocm93KCkNCisgIHsNCisgICAgcGF0dGVy
biBfX3JldDsNCisNCisgICAgLy8gVGhpcyBpbnNhbmVseSBjb21wbGljYXRlZCByb3V0aW5lIGF0
dGVtcHRzIHRvIGNvbnN0cnVjdCBhIHZhbGlkDQorICAgIC8vIHBhdHRlcm4gZm9yIHVzZSB3aXRo
IG1vbnllcHVuY3QuIEEgY291cGxlIG9mIGludmFyaWFudHM6DQorDQorICAgIC8vIGlmIChfX3By
ZWNlZGVzKSBzeW1ib2wgLT4gdmFsdWUNCisgICAgLy8gZWxzZSB2YWx1ZSAtPiBzeW1ib2wNCisN
CisgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlDQorICAgIC8vIGVsc2Ugbm9uZQ0KKw0KKyAgICAv
LyBub25lID09IG5ldmVyIGZpcnN0DQorICAgIC8vIHNwYWNlIG5ldmVyIGZpcnN0IG9yIGxhc3QN
CisNCisgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdlbGNv
bWUuDQorICAgIHN3aXRjaCAoX19wb3NuKQ0KKyAgICAgIHsNCisgICAgICBjYXNlIDA6DQorICAg
ICAgY2FzZSAxOg0KKwkvLyAxIFRoZSBzaWduIHByZWNlZGVzIHRoZSB2YWx1ZSBhbmQgc3ltYm9s
Lg0KKwlfX3JldC5maWVsZFswXSA9IHNpZ247DQorCWlmIChfX3NwYWNlKQ0KKwkgIHsNCisJICAg
IC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbi4NCisJICAgIGlmIChfX3ByZWNlZGVzKQ0KKwkg
ICAgICB7DQorCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsNCisJCV9fcmV0LmZpZWxkWzNdID0g
dmFsdWU7DQorCSAgICAgIH0NCisJICAgIGVsc2UNCisJICAgICAgew0KKwkJX19yZXQuZmllbGRb
MV0gPSB2YWx1ZTsNCisJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOw0KKwkgICAgICB9DQorCSAg
ICBfX3JldC5maWVsZFsyXSA9IHNwYWNlOw0KKwkgIH0NCisJZWxzZQ0KKwkgIHsNCisJICAgIC8v
IFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuDQorCSAgICBpZiAo
X19wcmVjZWRlcykNCisJICAgICAgew0KKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7DQorCQlf
X3JldC5maWVsZFsyXSA9IHZhbHVlOw0KKwkgICAgICB9DQorCSAgICBlbHNlDQorCSAgICAgIHsN
CisJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7DQorCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsN
CisJICAgICAgfQ0KKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOw0KKwkgIH0NCisJYnJlYWs7
DQorICAgICAgY2FzZSAyOg0KKwkvLyAyIFRoZSBzaWduIGZvbGxvd3MgdGhlIHZhbHVlIGFuZCBz
eW1ib2wuDQorCWlmIChfX3NwYWNlKQ0KKwkgIHsNCisJICAgIC8vIFBhdHRlcm4gZWl0aGVyIGVu
ZHMgd2l0aCBzaWduLg0KKwkgICAgaWYgKF9fcHJlY2VkZXMpDQorCSAgICAgIHsNCisJCV9fcmV0
LmZpZWxkWzBdID0gc3ltYm9sOw0KKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsNCisJICAgICAg
fQ0KKwkgICAgZWxzZQ0KKwkgICAgICB7DQorCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOw0KKwkJ
X19yZXQuZmllbGRbMl0gPSBzeW1ib2w7DQorCSAgICAgIH0NCisJICAgIF9fcmV0LmZpZWxkWzFd
ID0gc3BhY2U7DQorCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247DQorCSAgfQ0KKwllbHNlDQor
CSAgew0KKwkgICAgLy8gUGF0dGVybiBlbmRzIHdpdGggc2lnbiB0aGVuIG5vbmUuDQorCSAgICBp
ZiAoX19wcmVjZWRlcykNCisJICAgICAgew0KKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7DQor
CQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOw0KKwkgICAgICB9DQorCSAgICBlbHNlDQorCSAgICAg
IHsNCisJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7DQorCQlfX3JldC5maWVsZFsxXSA9IHN5bWJv
bDsNCisJICAgICAgfQ0KKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOw0KKwkgICAgX19yZXQu
ZmllbGRbM10gPSBub25lOw0KKwkgIH0NCisJYnJlYWs7DQorICAgICAgY2FzZSAzOg0KKwkvLyAz
IFRoZSBzaWduIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBzeW1ib2wuDQorCWlmIChfX3ByZWNl
ZGVzKQ0KKwkgIHsNCisJICAgIF9fcmV0LmZpZWxkWzBdID0gc2lnbjsNCisJICAgIF9fcmV0LmZp
ZWxkWzFdID0gc3ltYm9sOw0KKwkgICAgaWYgKF9fc3BhY2UpDQorCSAgICAgIHsNCisJCV9fcmV0
LmZpZWxkWzJdID0gc3BhY2U7DQorCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOw0KKwkgICAgICB9
DQorCSAgICBlbHNlDQorCSAgICAgIHsNCisJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7DQorCQlf
X3JldC5maWVsZFszXSA9IG5vbmU7DQorCSAgICAgIH0NCisJICB9DQorCWVsc2UNCisJICB7DQor
CSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOw0KKwkgICAgaWYgKF9fc3BhY2UpDQorCSAgICAg
IHsNCisJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7DQorCQlfX3JldC5maWVsZFsyXSA9IHNpZ247
DQorCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsNCisJICAgICAgfQ0KKwkgICAgZWxzZQ0KKwkg
ICAgICB7DQorCQlfX3JldC5maWVsZFsxXSA9IHNpZ247DQorCQlfX3JldC5maWVsZFsyXSA9IHN5
bWJvbDsNCisJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsNCisJICAgICAgfQ0KKwkgIH0NCisJYnJl
YWs7DQorICAgICAgY2FzZSA0Og0KKwkvLyA0IFRoZSBzaWduIGltbWVkaWF0ZWx5IGZvbGxvd3Mg
dGhlIHN5bWJvbC4NCisJaWYgKF9fcHJlY2VkZXMpDQorCSAgew0KKwkgICAgX19yZXQuZmllbGRb
MF0gPSBzeW1ib2w7DQorCSAgICBfX3JldC5maWVsZFsxXSA9IHNpZ247DQorCSAgICBpZiAoX19z
cGFjZSkNCisJICAgICAgew0KKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsNCisJCV9fcmV0LmZp
ZWxkWzNdID0gdmFsdWU7DQorCSAgICAgIH0NCisJICAgIGVsc2UNCisJICAgICAgew0KKwkJX19y
ZXQuZmllbGRbMl0gPSB2YWx1ZTsNCisJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsNCisJICAgICAg
fQ0KKwkgIH0NCisJZWxzZQ0KKwkgIHsNCisJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7DQor
CSAgICBpZiAoX19zcGFjZSkNCisJICAgICAgew0KKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsN
CisJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOw0KKwkJX19yZXQuZmllbGRbM10gPSBzaWduOw0K
KwkgICAgICB9DQorCSAgICBlbHNlDQorCSAgICAgIHsNCisJCV9fcmV0LmZpZWxkWzFdID0gc3lt
Ym9sOw0KKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOw0KKwkJX19yZXQuZmllbGRbM10gPSBub25l
Ow0KKwkgICAgICB9DQorCSAgfQ0KKwlicmVhazsNCisgICAgICBkZWZhdWx0Og0KKwlfX3JldCA9
IHBhdHRlcm4oKTsNCisgICAgICB9DQorICAgIHJldHVybiBfX3JldDsNCisgIH0NCisjZW5kaWYN
CisNCisgIGV4dGVybiBjaGFyIF9fbmFycm93X211bHRpYnl0ZV9jaGFycyhjb25zdCBjaGFyKiBz
LCBsb2NhbGVfdCBjbG9jKTsNCisNCisgIHRlbXBsYXRlPD4NCisgICAgdm9pZA0KKyAgICBtb25l
eXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBf
X2Nsb2MsDQorCQkJCQkJICAgICBjb25zdCBjaGFyKikNCisgICAgew0KKyAgICAgIGlmICghX01f
ZGF0YSkNCisJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgdHJ1ZT47DQor
DQorICAgICAgaWYgKCFfX2Nsb2MpDQorCXsNCisJICAvLyAiQyIgbG9jYWxlDQorCSAgX01fZGF0
YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsNCisJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2Vw
ID0gJywnOw0KKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7DQorCSAgX01fZGF0YS0+X01f
Z3JvdXBpbmdfc2l6ZSA9IDA7DQorCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7
DQorCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsNCisJICBfTV9kYXRhLT5fTV9jdXJy
X3N5bWJvbF9zaXplID0gMDsNCisJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7DQor
CSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsNCisJICBfTV9kYXRhLT5fTV9u
ZWdhdGl2ZV9zaWduID0gIiI7DQorCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0g
MDsNCisJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7DQorCSAgX01fZGF0YS0+X01fcG9z
X2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsNCisJICBfTV9kYXRhLT5f
TV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOw0KKw0KKwkgIGZv
ciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpDQorCSAg
ICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsNCisJ
fQ0KKyAgICAgIGVsc2UNCisJew0KKwkgIC8vIE5hbWVkIGxvY2FsZS4NCisJICBfTV9kYXRhLT5f
TV9kZWNpbWFsX3BvaW50ID0NCisJICAgICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfTU9O
X0RFQ0lNQUxfUE9JTlQsIF9fY2xvYykpOw0KKwkgIGNvbnN0IGNoYXIqIHRob3VzYW5kc19zZXAg
PQ0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfTU9OX1RIT1VTQU5EU19TRVAsIF9f
Y2xvYyk7DQorCSAgaWYgKHRob3VzYW5kc19zZXBbMF0gIT0gJ1wwJyAmJiB0aG91c2FuZHNfc2Vw
WzFdICE9ICdcMCcpDQorCSAgICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19uYXJyb3df
bXVsdGlieXRlX2NoYXJzKHRob3VzYW5kc19zZXAsDQorCQkJCQkJCQkgX19jbG9jKTsNCisJICBl
bHNlDQorCSAgICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKnRob3VzYW5kc19zZXA7DQor
DQorCSAgLy8gQ2hlY2sgZm9yIE5VTEwsIHdoaWNoIGltcGxpZXMgbm8gZnJhY3Rpb25hbCBkaWdp
dHMuDQorCSAgaWYgKF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPT0gJ1wwJykNCisJICAgIHsN
CisJICAgICAgLy8gTGlrZSBpbiAiQyIgbG9jYWxlLg0KKwkgICAgICBfTV9kYXRhLT5fTV9mcmFj
X2RpZ2l0cyA9IDA7DQorCSAgICAgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7DQor
CSAgICB9DQorCSAgZWxzZQ0KKwkgICAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPQ0KKwkgICAg
ICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0lOVF9GUkFDX0RJR0lUUywgX19jbG9jKSk7
DQorDQorCSAgY29uc3QgY2hhciogX19jZ3JvdXAgPQ0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxf
TU9ORVRBUllfTU9OX0dST1VQSU5HLCBfX2Nsb2MpOw0KKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3Np
Z24gPQ0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfUE9TSVRJVkVfU0lHTiwgX19j
bG9jKTsNCisJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0NCisJICAgIG5sX2xhbmdpbmZvX2wo
X05MX01PTkVUQVJZX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7DQorCSAgLy8gX0ludGwgPT0gdHJ1
ZQ0KKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPQ0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9O
RVRBUllfSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOw0KKw0KKwkgIGNoYXIqIF9fZ3JvdXAgPSAw
Ow0KKwkgIGNoYXIqIF9fcHMgPSAwOw0KKwkgIGNoYXIqIF9fbnMgPSAwOw0KKwkgIGNvbnN0IGNo
YXIgX19ucG9zbiA9DQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0lOVF9OX1NJ
R05fUE9TTiwgX19jbG9jKSk7DQorCSAgX190cnkNCisJICAgIHsNCisJICAgICAgc2l6ZV90IF9f
bGVuOw0KKw0KKwkgICAgICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91
cGluZy4NCisJICAgICAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gJ1wwJykNCisJ
CXsNCisJCSAgLy8gTGlrZSBpbiAiQyIgbG9jYWxlLg0KKwkJICBfTV9kYXRhLT5fTV9ncm91cGlu
ZyA9ICIiOw0KKwkJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsNCisJCSAgX01fZGF0
YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7DQorCQkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19z
ZXAgPSAnLCc7DQorCQl9DQorCSAgICAgIGVsc2UNCisJCXsNCisJCSAgX19sZW4gPSBzdHJsZW4o
X19jZ3JvdXApOw0KKwkJICBpZiAoX19sZW4pDQorCQkgICAgew0KKwkJICAgICAgX19ncm91cCA9
IG5ldyBjaGFyW19fbGVuICsgMV07DQorCQkgICAgICBtZW1jcHkoX19ncm91cCwgX19jZ3JvdXAs
IF9fbGVuICsgMSk7DQorCQkgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fZ3JvdXA7DQor
CQkgICAgfQ0KKwkJICBlbHNlDQorCQkgICAgew0KKwkJICAgICAgX01fZGF0YS0+X01fZ3JvdXBp
bmcgPSAiIjsNCisJCSAgICAgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOw0KKwkJ
ICAgIH0NCisJCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IF9fbGVuOw0KKwkJfQ0KKw0K
KwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2Nwb3NzaWduKTsNCisJICAgICAgaWYgKF9fbGVuKQ0K
KwkJew0KKwkJICBfX3BzID0gbmV3IGNoYXJbX19sZW4gKyAxXTsNCisJCSAgbWVtY3B5KF9fcHMs
IF9fY3Bvc3NpZ24sIF9fbGVuICsgMSk7DQorCQkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24g
PSBfX3BzOw0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWdu
ID0gIiI7DQorCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IF9fbGVuOw0K
Kw0KKwkgICAgICBpZiAoIV9fbnBvc24pDQorCQl7DQorCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZl
X3NpZ24gPSAiKCkiOw0KKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAyOw0K
KwkJfQ0KKwkgICAgICBlbHNlDQorCQl7DQorCQkgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24p
Ow0KKwkJICBpZiAoX19sZW4pDQorCQkgICAgew0KKwkJICAgICAgX19ucyA9IG5ldyBjaGFyW19f
bGVuICsgMV07DQorCQkgICAgICBtZW1jcHkoX19ucywgX19jbmVnc2lnbiwgX19sZW4gKyAxKTsN
CisJCSAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25zOw0KKwkJICAgIH0NCisJ
CSAgZWxzZQ0KKwkJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsNCisJCSAgX01f
ZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gX19sZW47DQorCQl9DQorDQorCSAgICAgIF9f
bGVuID0gc3RybGVuKF9fY2N1cnIpOw0KKwkgICAgICBpZiAoX19sZW4pDQorCQl7DQorCQkgIGNo
YXIqIF9fY3VyciA9IG5ldyBjaGFyW19fbGVuICsgMV07DQorCQkgIG1lbWNweShfX2N1cnIsIF9f
Y2N1cnIsIF9fbGVuICsgMSk7DQorCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19jdXJy
Ow0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOw0K
KwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gX19sZW47DQorCSAgICB9DQor
CSAgX19jYXRjaCguLi4pDQorCSAgICB7DQorCSAgICAgIGRlbGV0ZSBfTV9kYXRhOw0KKwkgICAg
ICBfTV9kYXRhID0gMDsNCisJICAgICAgZGVsZXRlIFtdIF9fZ3JvdXA7DQorCSAgICAgIGRlbGV0
ZSBbXSBfX3BzOw0KKwkgICAgICBkZWxldGUgW10gX19uczsNCisJICAgICAgX190aHJvd19leGNl
cHRpb25fYWdhaW47DQorCSAgICB9DQorDQorCSAgY2hhciBfX3BwcmVjZWRlcyA9DQorCSAgICAq
KG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsN
CisJICBjaGFyIF9fcHNwYWNlID0NCisJICAgICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllf
SU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsNCisJICBjaGFyIF9fcHBvc24gPQ0KKwkgICAg
KihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOw0K
KwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVj
ZWRlcywgX19wc3BhY2UsDQorCQkJCQkJCV9fcHBvc24pOw0KKwkgIGNoYXIgX19ucHJlY2VkZXMg
PQ0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9JTlRfTl9DU19QUkVDRURFUywg
X19jbG9jKSk7DQorCSAgY2hhciBfX25zcGFjZSA9DQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05M
X01PTkVUQVJZX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7DQorCSAgX01fZGF0YS0+X01f
bmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwN
CisJCQkJCQkJX19ucG9zbik7DQorCX0NCisgICAgfQ0KKw0KKyAgdGVtcGxhdGU8Pg0KKyAgICB2
b2lkDQorICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVu
Y3QoX19jX2xvY2FsZSBfX2Nsb2MsDQorCQkJCQkJICAgICAgY29uc3QgY2hhciopDQorICAgIHsN
CisgICAgICBpZiAoIV9NX2RhdGEpDQorCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hl
PGNoYXIsIGZhbHNlPjsNCisNCisgICAgICBpZiAoIV9fY2xvYykNCisJew0KKwkgIC8vICJDIiBs
b2NhbGUNCisJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOw0KKwkgIF9NX2RhdGEt
Pl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7DQorCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsN
CisJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsNCisJICBfTV9kYXRhLT5fTV91c2Vf
Z3JvdXBpbmcgPSBmYWxzZTsNCisJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOw0KKwkg
IF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOw0KKwkgIF9NX2RhdGEtPl9NX3Bvc2l0
aXZlX3NpZ24gPSAiIjsNCisJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOw0K
KwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsNCisJICBfTV9kYXRhLT5fTV9uZWdh
dGl2ZV9zaWduX3NpemUgPSAwOw0KKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsNCisJ
ICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJu
Ow0KKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3Bh
dHRlcm47DQorDQorCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1Nf
ZW5kOyArK19faSkNCisJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpf
U19hdG9tc1tfX2ldOw0KKwl9DQorICAgICAgZWxzZQ0KKwl7DQorCSAgLy8gTmFtZWQgbG9jYWxl
Lg0KKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPQ0KKwkgICAgKihubF9sYW5naW5mb19s
KF9OTF9NT05FVEFSWV9NT05fREVDSU1BTF9QT0lOVCwgX19jbG9jKSk7DQorCSAgX01fZGF0YS0+
X01fdGhvdXNhbmRzX3NlcCA9DQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX01P
Tl9USE9VU0FORFNfU0VQLCBfX2Nsb2MpKTsNCisNCisJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hp
Y2ggaW1wbGllcyBubyBmcmFjdGlvbmFsIGRpZ2l0cy4NCisJICBpZiAoX01fZGF0YS0+X01fZGVj
aW1hbF9wb2ludCA9PSAnXDAnKQ0KKwkgICAgew0KKwkgICAgICAvLyBMaWtlIGluICJDIiBsb2Nh
bGUuDQorCSAgICAgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsNCisJICAgICAgX01fZGF0
YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsNCisJICAgIH0NCisJICBlbHNlDQorCSAgICBfTV9k
YXRhLT5fTV9mcmFjX2RpZ2l0cyA9DQorCSAgICAgICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRB
UllfRlJBQ19ESUdJVFMsIF9fY2xvYykpOw0KKw0KKwkgIGNvbnN0IGNoYXIqIF9fY2dyb3VwID0N
CisJICAgIG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX01PTl9HUk9VUElORywgX19jbG9jKTsN
CisJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0NCisJICAgIG5sX2xhbmdpbmZvX2woX05MX01P
TkVUQVJZX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7DQorCSAgY29uc3QgY2hhciogX19jbmVnc2ln
biA9DQorCSAgICBubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ORUdBVElWRV9TSUdOLCBfX2Ns
b2MpOw0KKwkgIC8vIF9JbnRsID09IGZhbHNlDQorCSAgY29uc3QgY2hhciogX19jY3VyciA9DQor
CSAgICBubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7
DQorDQorCSAgY2hhciogX19ncm91cCA9IDA7DQorCSAgY2hhciogX19wcyA9IDA7DQorCSAgY2hh
ciogX19ucyA9IDA7DQorCSAgY29uc3QgY2hhciBfX25wb3NuID0NCisJICAgICoobmxfbGFuZ2lu
Zm9fbChfTkxfTU9ORVRBUllfTl9TSUdOX1BPU04sIF9fY2xvYykpOw0KKwkgIF9fdHJ5DQorCSAg
ICB7DQorCSAgICAgIHNpemVfdCBfX2xlbjsNCisNCisJICAgICAgLy8gQ2hlY2sgZm9yIE5VTEws
IHdoaWNoIGltcGxpZXMgbm8gZ3JvdXBpbmcuDQorCSAgICAgIGlmIChfTV9kYXRhLT5fTV90aG91
c2FuZHNfc2VwID09ICdcMCcpDQorCQl7DQorCQkgIC8vIExpa2UgaW4gIkMiIGxvY2FsZS4NCisJ
CSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsNCisJCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdf
c2l6ZSA9IDA7DQorCQkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOw0KKwkJICBf
TV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOw0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQl7
DQorCQkgIF9fbGVuID0gc3RybGVuKF9fY2dyb3VwKTsNCisJCSAgaWYgKF9fbGVuKQ0KKwkJICAg
IHsNCisJCSAgICAgIF9fZ3JvdXAgPSBuZXcgY2hhcltfX2xlbiArIDFdOw0KKwkJICAgICAgbWVt
Y3B5KF9fZ3JvdXAsIF9fY2dyb3VwLCBfX2xlbiArIDEpOw0KKwkJICAgICAgX01fZGF0YS0+X01f
Z3JvdXBpbmcgPSBfX2dyb3VwOw0KKwkJICAgIH0NCisJCSAgZWxzZQ0KKwkJICAgIHsNCisJCSAg
ICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7DQorCQkgICAgICBfTV9kYXRhLT5fTV91c2Vf
Z3JvdXBpbmcgPSBmYWxzZTsNCisJCSAgICB9DQorCQkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3Np
emUgPSBfX2xlbjsNCisJCX0NCisNCisJICAgICAgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7
DQorCSAgICAgIGlmIChfX2xlbikNCisJCXsNCisJCSAgX19wcyA9IG5ldyBjaGFyW19fbGVuICsg
MV07DQorCQkgIG1lbWNweShfX3BzLCBfX2Nwb3NzaWduLCBfX2xlbiArIDEpOw0KKwkJICBfTV9k
YXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19wczsNCisJCX0NCisJICAgICAgZWxzZQ0KKwkJX01f
ZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOw0KKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2
ZV9zaWduX3NpemUgPSBfX2xlbjsNCisNCisJICAgICAgaWYgKCFfX25wb3NuKQ0KKwkJew0KKwkJ
ICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsNCisJCSAgX01fZGF0YS0+X01fbmVn
YXRpdmVfc2lnbl9zaXplID0gMjsNCisJCX0NCisJICAgICAgZWxzZQ0KKwkJew0KKwkJICBfX2xl
biA9IHN0cmxlbihfX2NuZWdzaWduKTsNCisJCSAgaWYgKF9fbGVuKQ0KKwkJICAgIHsNCisJCSAg
ICAgIF9fbnMgPSBuZXcgY2hhcltfX2xlbiArIDFdOw0KKwkJICAgICAgbWVtY3B5KF9fbnMsIF9f
Y25lZ3NpZ24sIF9fbGVuICsgMSk7DQorCQkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWdu
ID0gX19uczsNCisJCSAgICB9DQorCQkgIGVsc2UNCisJCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2
ZV9zaWduID0gIiI7DQorCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IF9fbGVu
Ow0KKwkJfQ0KKw0KKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsNCisJICAgICAgaWYg
KF9fbGVuKQ0KKwkJew0KKwkJICBjaGFyKiBfX2N1cnIgPSBuZXcgY2hhcltfX2xlbiArIDFdOw0K
KwkJICBtZW1jcHkoX19jdXJyLCBfX2NjdXJyLCBfX2xlbiArIDEpOw0KKwkJICBfTV9kYXRhLT5f
TV9jdXJyX3N5bWJvbCA9IF9fY3VycjsNCisJCX0NCisJICAgICAgZWxzZQ0KKwkJX01fZGF0YS0+
X01fY3Vycl9zeW1ib2wgPSAiIjsNCisJICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6
ZSA9IF9fbGVuOw0KKwkgICAgfQ0KKwkgIF9fY2F0Y2goLi4uKQ0KKwkgICAgew0KKwkgICAgICBk
ZWxldGUgX01fZGF0YTsNCisJICAgICAgX01fZGF0YSA9IDA7DQorCSAgICAgIGRlbGV0ZSBbXSBf
X2dyb3VwOw0KKwkgICAgICBkZWxldGUgW10gX19wczsNCisJICAgICAgZGVsZXRlIFtdIF9fbnM7
DQorCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOw0KKwkgICAgfQ0KKw0KKwkgIGNoYXIg
X19wcHJlY2VkZXMgPQ0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9QX0NTX1BS
RUNFREVTLCBfX2Nsb2MpKTsNCisJICBjaGFyIF9fcHNwYWNlID0NCisJICAgICoobmxfbGFuZ2lu
Zm9fbChfTkxfTU9ORVRBUllfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOw0KKwkgIGNoYXIgX19w
cG9zbiA9ICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfUF9TSUdOX1BPU04sIF9fY2xvYykp
Ow0KKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3Bw
cmVjZWRlcywgX19wc3BhY2UsDQorCQkJCQkJCV9fcHBvc24pOw0KKwkgIGNoYXIgX19ucHJlY2Vk
ZXMgPQ0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9OX0NTX1BSRUNFREVTLCBf
X2Nsb2MpKTsNCisJICBjaGFyIF9fbnNwYWNlID0NCisJICAgICoobmxfbGFuZ2luZm9fbChfTkxf
TU9ORVRBUllfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOw0KKwkgIF9NX2RhdGEtPl9NX25lZ19m
b3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsDQorCQkJ
CQkJCV9fbnBvc24pOw0KKwl9DQorICAgIH0NCisNCisgIHRlbXBsYXRlPD4NCisgICAgbW9uZXlw
dW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKQ0KKyAgICB7DQorICAgICAgaWYgKF9NX2Rh
dGEtPl9NX2dyb3VwaW5nX3NpemUpDQorCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9ncm91cGluZzsN
CisgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQ0KKwlkZWxldGUgW10g
X01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsNCisgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRp
dmVfc2lnbl9zaXplDQorCSAgJiYgc3RyY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sICIo
KSIpICE9IDApDQorCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOw0KKyAgICAg
IGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQ0KKwlkZWxldGUgW10gX01fZGF0YS0+
X01fY3Vycl9zeW1ib2w7DQorICAgICAgZGVsZXRlIF9NX2RhdGE7DQorICAgIH0NCisNCisgIHRl
bXBsYXRlPD4NCisgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkNCisg
ICAgew0KKyAgICAgIGlmIChfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplKQ0KKwlkZWxldGUgW10g
X01fZGF0YS0+X01fZ3JvdXBpbmc7DQorICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3Np
Z25fc2l6ZSkNCisJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247DQorICAgICAg
aWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQ0KKwkgICYmIHN0cmNtcChfTV9kYXRh
LT5fTV9uZWdhdGl2ZV9zaWduLCAiKCkiKSAhPSAwKQ0KKwlkZWxldGUgW10gX01fZGF0YS0+X01f
bmVnYXRpdmVfc2lnbjsNCisgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkN
CisJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOw0KKyAgICAgIGRlbGV0ZSBfTV9k
YXRhOw0KKyAgICB9DQorDQorI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UDQorICB0ZW1wbGF0
ZTw+DQorICAgIHZvaWQNCisgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6X01faW5pdGlh
bGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLA0KKwkJCQkJCQljb25zdCBjaGFyKikN
CisgICAgew0KKyAgICAgIGlmICghX01fZGF0YSkNCisJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVu
Y3RfY2FjaGU8d2NoYXJfdCwgdHJ1ZT47DQorDQorICAgICAgaWYgKCFfX2Nsb2MpDQorCXsNCisJ
ICAvLyAiQyIgbG9jYWxlDQorCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7DQor
CSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7DQorCSAgX01fZGF0YS0+X01fZ3Jv
dXBpbmcgPSAiIjsNCisJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsNCisJICBfTV9k
YXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsNCisJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJv
bCA9IEwiIjsNCisJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsNCisJICBfTV9k
YXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOw0KKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3Np
Z25fc2l6ZSA9IDA7DQorCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsNCisJICBf
TV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOw0KKwkgIF9NX2RhdGEtPl9NX2ZyYWNf
ZGlnaXRzID0gMDsNCisJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1Nf
ZGVmYXVsdF9wYXR0ZXJuOw0KKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNl
OjpfU19kZWZhdWx0X3BhdHRlcm47DQorDQorCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdp
dGhvdXQgdGhlIGZhY2V0Li4uDQorCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlf
YmFzZTo6X1NfZW5kOyArK19faSkNCisJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQ0KKwkg
ICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsNCisJ
fQ0KKyAgICAgIGVsc2UNCisJew0KKwkgIC8vIE5hbWVkIGxvY2FsZS4NCisJICBfX2NfbG9jYWxl
IF9fb2xkID0gdXNlbG9jYWxlKF9fY2xvYyk7DQorDQorCSAgdW5pb24geyBjaGFyICpfX3M7IHdj
aGFyX3QgX193OyB9IF9fdTsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRB
UllfV01PTl9ERUNJTUFMX1BPSU5ULCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxf
cG9pbnQgPSBfX3UuX193Ow0KKw0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9NT05F
VEFSWV9XTU9OX1RIT1VTQU5EU19TRVAsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fdGhvdXNh
bmRzX3NlcCA9IF9fdS5fX3c7DQorDQorCSAgLy8gQ2hlY2sgZm9yIE5VTEwsIHdoaWNoIGltcGxp
ZXMgbm8gZnJhY3Rpb25hbCBkaWdpdHMuDQorCSAgaWYgKF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9p
bnQgPT0gTCdcMCcpDQorCSAgICB7DQorCSAgICAgIC8vIExpa2UgaW4gIkMiIGxvY2FsZS4NCisJ
ICAgICAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOw0KKwkgICAgICBfTV9kYXRhLT5fTV9k
ZWNpbWFsX3BvaW50ID0gTCcuJzsNCisJICAgIH0NCisJICBlbHNlDQorCSAgICBfTV9kYXRhLT5f
TV9mcmFjX2RpZ2l0cyA9DQorCSAgICAgICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfSU5U
X0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsNCisNCisJICBjb25zdCBjaGFyKiBfX2Nncm91cCA9DQor
CSAgICBubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9NT05fR1JPVVBJTkcsIF9fY2xvYyk7DQor
CSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9DQorCSAgICBubF9sYW5naW5mb19sKF9OTF9NT05F
VEFSWV9QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOw0KKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24g
PQ0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfTkVHQVRJVkVfU0lHTiwgX19jbG9j
KTsNCisJICBjb25zdCBjaGFyKiBfX2NjdXJyID0NCisJICAgIG5sX2xhbmdpbmZvX2woX05MX01P
TkVUQVJZX0lOVF9DVVJSX1NZTUJPTCwgX19jbG9jKTsNCisNCisJICBjaGFyKiBfX2dyb3VwID0g
MDsNCisJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7DQorCSAgd2NoYXJfdCogX193Y3NfbnMgPSAw
Ow0KKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9DQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01P
TkVUQVJZX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7DQorCSAgX190cnkNCisJICAgIHsNCisJ
ICAgICAgc2l6ZV90IF9fbGVuOw0KKw0KKwkgICAgICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2gg
aW1wbGllcyBubyBncm91cGluZy4NCisJICAgICAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19z
ZXAgPT0gTCdcMCcpDQorCQl7DQorCQkgIC8vIExpa2UgaW4gIkMiIGxvY2FsZS4NCisJCSAgX01f
ZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsNCisJCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9
IDA7DQorCQkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOw0KKwkJICBfTV9kYXRh
LT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsNCisJCX0NCisJICAgICAgZWxzZQ0KKwkJew0KKwkJ
ICBfX2xlbiA9IHN0cmxlbihfX2Nncm91cCk7DQorCQkgIGlmIChfX2xlbikNCisJCSAgICB7DQor
CQkgICAgICBfX2dyb3VwID0gbmV3IGNoYXJbX19sZW4gKyAxXTsNCisJCSAgICAgIG1lbWNweShf
X2dyb3VwLCBfX2Nncm91cCwgX19sZW4gKyAxKTsNCisJCSAgICAgIF9NX2RhdGEtPl9NX2dyb3Vw
aW5nID0gX19ncm91cDsNCisJCSAgICB9DQorCQkgIGVsc2UNCisJCSAgICB7DQorCQkgICAgICBf
TV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOw0KKwkJICAgICAgX01fZGF0YS0+X01fdXNlX2dyb3Vw
aW5nID0gZmFsc2U7DQorCQkgICAgfQ0KKwkJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0g
X19sZW47DQorCQl9DQorDQorCSAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOw0KKwkgICAgICBfX2xl
biA9IHN0cmxlbihfX2Nwb3NzaWduKTsNCisJICAgICAgaWYgKF9fbGVuKQ0KKwkJew0KKwkJICBt
ZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsNCisJCSAgX193Y3NfcHMgPSBu
ZXcgd2NoYXJfdFtfX2xlbiArIDFdOw0KKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3Nz
aWduLCBfX2xlbiArIDEsICZfX3N0YXRlKTsNCisJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2ln
biA9IF9fd2NzX3BzOw0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQlfTV9kYXRhLT5fTV9wb3NpdGl2
ZV9zaWduID0gTCIiOw0KKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPQ0K
KwkJd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOw0KKw0KKwkgICAgICBfX2xlbiA9
IHN0cmxlbihfX2NuZWdzaWduKTsNCisJICAgICAgaWYgKCFfX25wb3NuKQ0KKwkJX01fZGF0YS0+
X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOw0KKwkgICAgICBlbHNlIGlmIChfX2xlbikNCisJCXsN
CisJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7DQorCQkgIF9fd2Nz
X25zID0gbmV3IHdjaGFyX3RbX19sZW4gKyAxXTsNCisJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAm
X19jbmVnc2lnbiwgX19sZW4gKyAxLCAmX19zdGF0ZSk7DQorCQkgIF9NX2RhdGEtPl9NX25lZ2F0
aXZlX3NpZ24gPSBfX3djc19uczsNCisJCX0NCisJICAgICAgZWxzZQ0KKwkJX01fZGF0YS0+X01f
bmVnYXRpdmVfc2lnbiA9IEwiIjsNCisJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9z
aXplID0NCisJCXdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsNCisNCisJICAgICAg
Ly8gX0ludGwgPT0gdHJ1ZS4NCisJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7DQorCSAg
ICAgIGlmIChfX2xlbikNCisJCXsNCisJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJz
dGF0ZV90KSk7DQorCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW4gKyAxXTsN
CisJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4gKyAxLCAmX19zdGF0ZSk7DQor
CQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7DQorCQl9DQorCSAgICAgIGVsc2UN
CisJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOw0KKwkgICAgICBfTV9kYXRhLT5fTV9j
dXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsNCisJICAg
IH0NCisJICBfX2NhdGNoKC4uLikNCisJICAgIHsNCisJICAgICAgZGVsZXRlIF9NX2RhdGE7DQor
CSAgICAgIF9NX2RhdGEgPSAwOw0KKwkgICAgICBkZWxldGUgW10gX19ncm91cDsNCisJICAgICAg
ZGVsZXRlIFtdIF9fd2NzX3BzOw0KKwkgICAgICBkZWxldGUgW10gX193Y3NfbnM7DQorCSAgICAg
IHVzZWxvY2FsZShfX29sZCk7DQorCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOw0KKwkg
ICAgfQ0KKw0KKwkgIGNoYXIgX19wcHJlY2VkZXMgPQ0KKwkgICAgKihubF9sYW5naW5mb19sKF9O
TF9NT05FVEFSWV9JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7DQorCSAgY2hhciBfX3BzcGFj
ZSA9DQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0lOVF9QX1NFUF9CWV9TUEFD
RSwgX19jbG9jKSk7DQorCSAgY2hhciBfX3Bwb3NuID0NCisJICAgICoobmxfbGFuZ2luZm9fbChf
TkxfTU9ORVRBUllfSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsNCisJICBfTV9kYXRhLT5fTV9w
b3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLA0K
KwkJCQkJCQlfX3Bwb3NuKTsNCisJICBjaGFyIF9fbnByZWNlZGVzID0NCisJICAgICoobmxfbGFu
Z2luZm9fbChfTkxfTU9ORVRBUllfSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOw0KKwkgIGNo
YXIgX19uc3BhY2UgPQ0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9JTlRfTl9T
RVBfQllfU1BBQ0UsIF9fY2xvYykpOw0KKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19j
b25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsDQorCQkJCQkJCV9fbnBvc24p
Ow0KKw0KKwkgIHVzZWxvY2FsZShfX29sZCk7DQorCX0NCisgICAgfQ0KKw0KKyAgdGVtcGxhdGU8
Pg0KKyAgdm9pZA0KKyAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46Ol9NX2luaXRpYWxpemVf
bW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywNCisJCQkJCQkgICAgICAgY29uc3QgY2hhciop
DQorICB7DQorICAgIGlmICghX01fZGF0YSkNCisgICAgICBfTV9kYXRhID0gbmV3IF9fbW9uZXlw
dW5jdF9jYWNoZTx3Y2hhcl90LCBmYWxzZT47DQorDQorICAgIGlmICghX19jbG9jKQ0KKwl7DQor
CSAgLy8gIkMiIGxvY2FsZQ0KKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOw0K
KwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOw0KKwkgIF9NX2RhdGEtPl9NX2dy
b3VwaW5nID0gIiI7DQorCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7DQorCSAgX01f
ZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7DQorCSAgX01fZGF0YS0+X01fY3Vycl9zeW1i
b2wgPSBMIiI7DQorCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7DQorCSAgX01f
ZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsNCisJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9z
aWduX3NpemUgPSAwOw0KKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7DQorCSAg
X01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsNCisJICBfTV9kYXRhLT5fTV9mcmFj
X2RpZ2l0cyA9IDA7DQorCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9T
X2RlZmF1bHRfcGF0dGVybjsNCisJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFz
ZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOw0KKw0KKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3
aXRob3V0IHRoZSBmYWNldC4uLg0KKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5
X2Jhc2U6Ol9TX2VuZDsgKytfX2kpDQorCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0NCisJ
ICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7DQor
CX0NCisgICAgICBlbHNlDQorCXsNCisJICAvLyBOYW1lZCBsb2NhbGUuDQorCSAgX19jX2xvY2Fs
ZSBfX29sZCA9IHVzZWxvY2FsZShfX2Nsb2MpOw0KKw0KKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3
Y2hhcl90ICpfX3c7IH0gX191Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9NT05F
VEFSWV9XTU9OX0RFQ0lNQUxfUE9JTlQsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGVjaW1h
bF9wb2ludCA9ICpfX3UuX193Ow0KKw0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9N
T05FVEFSWV9XTU9OX1RIT1VTQU5EU19TRVAsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fdGhv
dXNhbmRzX3NlcCA9ICpfX3UuX193Ow0KKw0KKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBp
bXBsaWVzIG5vIGZyYWN0aW9uYWwgZGlnaXRzLg0KKwkgIGlmIChfTV9kYXRhLT5fTV9kZWNpbWFs
X3BvaW50ID09IEwnXDAnKQ0KKwkgICAgew0KKwkgICAgICAvLyBMaWtlIGluICJDIiBsb2NhbGUu
DQorCSAgICAgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsNCisJICAgICAgX01fZGF0YS0+
X01fZGVjaW1hbF9wb2ludCA9IEwnLic7DQorCSAgICB9DQorCSAgZWxzZQ0KKwkgICAgX01fZGF0
YS0+X01fZnJhY19kaWdpdHMgPQ0KKwkgICAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZ
X0ZSQUNfRElHSVRTLCBfX2Nsb2MpKTsNCisNCisJICBjb25zdCBjaGFyKiBfX2Nncm91cCA9DQor
CSAgICBubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9NT05fR1JPVVBJTkcsIF9fY2xvYyk7DQor
CSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9DQorCSAgICBubF9sYW5naW5mb19sKF9OTF9NT05F
VEFSWV9QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOw0KKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24g
PQ0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfTkVHQVRJVkVfU0lHTiwgX19jbG9j
KTsNCisJICBjb25zdCBjaGFyKiBfX2NjdXJyID0NCisJICAgIG5sX2xhbmdpbmZvX2woX05MX01P
TkVUQVJZX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsNCisNCisJICBjaGFyKiBfX2dyb3VwID0g
MDsNCisJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7DQorCSAgd2NoYXJfdCogX193Y3NfbnMgPSAw
Ow0KKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9DQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01P
TkVUQVJZX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsNCisJICBfX3RyeQ0KKwkgICAgew0KKwkgICAg
ICBzaXplX3QgX19sZW47DQorDQorCSAgICAgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBs
aWVzIG5vIGdyb3VwaW5nLg0KKwkgICAgICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9
PSBMJ1wwJykNCisJCXsNCisJCSAgLy8gTGlrZSBpbiAiQyIgbG9jYWxlLg0KKwkJICBfTV9kYXRh
LT5fTV9ncm91cGluZyA9ICIiOw0KKwkJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsN
CisJCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7DQorCQkgIF9NX2RhdGEtPl9N
X3Rob3VzYW5kc19zZXAgPSBMJywnOw0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQl7DQorCQkgIF9f
bGVuID0gc3RybGVuKF9fY2dyb3VwKTsNCisJCSAgaWYgKF9fbGVuKQ0KKwkJICAgIHsNCisJCSAg
ICAgIF9fZ3JvdXAgPSBuZXcgY2hhcltfX2xlbiArIDFdOw0KKwkJICAgICAgbWVtY3B5KF9fZ3Jv
dXAsIF9fY2dyb3VwLCBfX2xlbiArIDEpOw0KKwkJICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcg
PSBfX2dyb3VwOw0KKwkJICAgIH0NCisJCSAgZWxzZQ0KKwkJICAgIHsNCisJCSAgICAgIF9NX2Rh
dGEtPl9NX2dyb3VwaW5nID0gIiI7DQorCQkgICAgICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcg
PSBmYWxzZTsNCisJCSAgICB9DQorCQkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBfX2xl
bjsNCisJCX0NCisNCisJICAgICAgbWJzdGF0ZV90IF9fc3RhdGU7DQorCSAgICAgIF9fbGVuID0g
c3RybGVuKF9fY3Bvc3NpZ24pOw0KKwkgICAgICBpZiAoX19sZW4pDQorCQl7DQorCQkgIG1lbXNl
dCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOw0KKwkJICBfX3djc19wcyA9IG5ldyB3
Y2hhcl90W19fbGVuICsgMV07DQorCQkgIG1ic3J0b3djcyhfX3djc19wcywgJl9fY3Bvc3NpZ24s
IF9fbGVuICsgMSwgJl9fc3RhdGUpOw0KKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0g
X193Y3NfcHM7DQorCQl9DQorCSAgICAgIGVsc2UNCisJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3Np
Z24gPSBMIiI7DQorCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9DQorCQl3
Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7DQorDQorCSAgICAgIF9fbGVuID0gc3Ry
bGVuKF9fY25lZ3NpZ24pOw0KKwkgICAgICBpZiAoIV9fbnBvc24pDQorCQlfTV9kYXRhLT5fTV9u
ZWdhdGl2ZV9zaWduID0gTCIoKSI7DQorCSAgICAgIGVsc2UgaWYgKF9fbGVuKQ0KKwkJew0KKwkJ
ICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsNCisJCSAgX193Y3NfbnMg
PSBuZXcgd2NoYXJfdFtfX2xlbiArIDFdOw0KKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2Nu
ZWdzaWduLCBfX2xlbiArIDEsICZfX3N0YXRlKTsNCisJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVf
c2lnbiA9IF9fd2NzX25zOw0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQlfTV9kYXRhLT5fTV9uZWdh
dGl2ZV9zaWduID0gTCIiOw0KKwkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUg
PQ0KKwkJd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOw0KKw0KKwkgICAgICAvLyBf
SW50bCA9PSB0cnVlLg0KKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsNCisJICAgICAg
aWYgKF9fbGVuKQ0KKwkJew0KKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRl
X3QpKTsNCisJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbiArIDFdOw0KKwkJ
ICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiArIDEsICZfX3N0YXRlKTsNCisJCSAg
X01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsNCisJCX0NCisJICAgICAgZWxzZQ0KKwkJ
X01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7DQorCSAgICAgIF9NX2RhdGEtPl9NX2N1cnJf
c3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOw0KKwkgICAgfQ0K
KwkgIF9fY2F0Y2goLi4uKQ0KKwkgICAgew0KKwkgICAgICBkZWxldGUgX01fZGF0YTsNCisJICAg
ICAgX01fZGF0YSA9IDA7DQorCSAgICAgIGRlbGV0ZSBbXSBfX2dyb3VwOw0KKwkgICAgICBkZWxl
dGUgW10gX193Y3NfcHM7DQorCSAgICAgIGRlbGV0ZSBbXSBfX3djc19uczsNCisJICAgICAgdXNl
bG9jYWxlKF9fb2xkKTsNCisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47DQorCSAgICB9
DQorDQorCSAgY2hhciBfX3BwcmVjZWRlcyA9DQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01P
TkVUQVJZX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOw0KKwkgIGNoYXIgX19wc3BhY2UgPQ0KKwkg
ICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7
DQorCSAgY2hhciBfX3Bwb3NuID0NCisJICAgICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllf
UF9TSUdOX1BPU04sIF9fY2xvYykpOw0KKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19j
b25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsDQorCQkJCQkJCV9fcHBvc24p
Ow0KKwkgIGNoYXIgX19ucHJlY2VkZXMgPQ0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9NT05F
VEFSWV9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsNCisJICBjaGFyIF9fbnNwYWNlID0NCisJICAg
ICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOw0K
KwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVj
ZWRlcywgX19uc3BhY2UsDQorCQkJCQkJCV9fbnBvc24pOw0KKw0KKwkgIHVzZWxvY2FsZShfX29s
ZCk7DQorCX0NCisgICAgfQ0KKw0KKyAgdGVtcGxhdGU8Pg0KKyAgICBtb25leXB1bmN0PHdjaGFy
X3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgpDQorICAgIHsNCisgICAgICBpZiAoX01fZGF0YS0+X01f
Z3JvdXBpbmdfc2l6ZSkNCisJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2dyb3VwaW5nOw0KKyAgICAg
IGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpDQorCWRlbGV0ZSBbXSBfTV9kYXRh
LT5fTV9wb3NpdGl2ZV9zaWduOw0KKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWdu
X3NpemUNCisJICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9
IDApDQorCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOw0KKyAgICAgIGlmIChf
TV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQ0KKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vy
cl9zeW1ib2w7DQorICAgICAgZGVsZXRlIF9NX2RhdGE7DQorICAgIH0NCisNCisgIHRlbXBsYXRl
PD4NCisgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT46On5tb25leXB1bmN0KCkNCisgICAg
ew0KKyAgICAgIGlmIChfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplKQ0KKwlkZWxldGUgW10gX01f
ZGF0YS0+X01fZ3JvdXBpbmc7DQorICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25f
c2l6ZSkNCisJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247DQorICAgICAgaWYg
KF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQ0KKwkgICYmIHdjc2NtcChfTV9kYXRhLT5f
TV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkNCisJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25l
Z2F0aXZlX3NpZ247DQorICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpDQor
CWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsNCisgICAgICBkZWxldGUgX01fZGF0
YTsNCisgICAgfQ0KKyNlbmRpZg0KKw0KK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTg0K
K30gLy8gbmFtZXNwYWNlDQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUv
bmV3bGliL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25l
d2xpYi9udW1lcmljX21lbWJlcnMuY2MNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAw
MDAwMDAwMC4uMjM4MDdlYTcxNzENCi0tLSAvZGV2L251bGwNCisrKyBiL2xpYnN0ZGMrKy12My9j
b25maWcvbG9jYWxlL25ld2xpYi9udW1lcmljX21lbWJlcnMuY2MNCkBAIC0wLDAgKzEsMjgyIEBA
DQorLy8gc3RkOjpudW1wdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBuZXdsaWIgdmVyc2lv
biAtKi0gQysrIC0qLQ0KKw0KKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDIzIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLg0KKy8vDQorLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdO
VSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQ0KKy8vIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQ0KKy8vIHRl
cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
DQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQg
eW91ciBvcHRpb24pDQorLy8gYW55IGxhdGVyIHZlcnNpb24uDQorDQorLy8gVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorLy8g
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YNCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlDQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4NCisNCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFy
ZSBncmFudGVkIGFkZGl0aW9uYWwNCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdD
QyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uDQorLy8gMy4xLCBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4NCisNCisvLyBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQN
CisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOw0KKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcu
UlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQ0KKy8vIDxodHRwOi8vd3d3LmdudS5v
cmcvbGljZW5zZXMvPi4NCisNCisvLw0KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMy4xLjIgIG51
bXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zDQorLy8NCisNCisvLyBXcml0dGVuIGJ5IEJlbmphbWlu
IEtvc25payA8YmtvekByZWRoYXQuY29tPg0KKy8vIE1vZGlmaWVkIGJ5IFRha2FzaGkgWWFubyA8
dGFrYXNoaS55YW5vQG5pZnR5Lm5lLmpwPg0KKw0KKyNpbmNsdWRlIDxsb2NhbGU+DQorI2luY2x1
ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+DQorI2luY2x1ZGUgPGljb252Lmg+DQorDQor
bmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpDQorew0KK19HTElCQ1hY
X0JFR0lOX05BTUVTUEFDRV9WRVJTSU9ODQorDQorICBleHRlcm4gY2hhciBfX25hcnJvd19tdWx0
aWJ5dGVfY2hhcnMoY29uc3QgY2hhciogcywgbG9jYWxlX3QgY2xvYyk7DQorDQorLy8gVGhpcyBm
aWxlIG1pZ2h0IGJlIGNvbXBpbGVkIHR3aWNlLCBidXQgd2Ugb25seSB3YW50IHRvIGRlZmluZSB0
aGlzIG9uY2UuDQorI2lmICEgX0dMSUJDWFhfVVNFX0NYWDExX0FCSQ0KKyAgY2hhcg0KKyAgX19u
YXJyb3dfbXVsdGlieXRlX2NoYXJzKGNvbnN0IGNoYXIqIHMsIGxvY2FsZV90IGNsb2MpDQorICB7
DQorICAgIGNvbnN0IGNoYXIqIGNvZGVzZXQgPSBubF9sYW5naW5mb19sKENPREVTRVQsIGNsb2Mp
Ow0KKyAgICBpZiAoIXN0cmNtcChjb2Rlc2V0LCAiVVRGLTgiKSkNCisgICAgICB7DQorCS8vIG9w
dGltaXplIGZvciBzb21lIGtub3duIGNhc2VzDQorCWlmICghc3RyY21wKHMsICJcdTIwMkYiKSkg
Ly8gTkFSUk9XIE5PLUJSRUFLIFNQQUNFDQorCSAgcmV0dXJuICcgJzsNCisJaWYgKCFzdHJjbXAo
cywgIlx1MjAxOSIpKSAvLyBSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksNCisJICByZXR1cm4g
J1wnJzsNCisJaWYgKCFzdHJjbXAocywgIlx1MDY2QyIpKSAvLyBBUkFCSUMgVEhPVVNBTkRTIFNF
UEFSQVRPUg0KKwkgIHJldHVybiAnXCcnOw0KKyAgICAgIH0NCisNCisgICAgaWNvbnZfdCBjZCA9
IGljb252X29wZW4oIkFTQ0lJLy9UUkFOU0xJVCIsIGNvZGVzZXQpOw0KKyAgICBpZiAoY2QgIT0g
KGljb252X3QpLTEpDQorICAgICAgew0KKwljaGFyIGMxOw0KKwlzaXplX3QgaW5ieXRlc2xlZnQg
PSBzdHJsZW4ocyk7DQorCXNpemVfdCBvdXRieXRlc2xlZnQgPSAxOw0KKwljaGFyKiBpbmJ1ZiA9
IGNvbnN0X2Nhc3Q8Y2hhcio+KHMpOw0KKwljaGFyKiBvdXRidWYgPSAmYzE7DQorCXNpemVfdCBu
ID0gaWNvbnYoY2QsICZpbmJ1ZiwgJmluYnl0ZXNsZWZ0LCAmb3V0YnVmLCAmb3V0Ynl0ZXNsZWZ0
KTsNCisJaWNvbnZfY2xvc2UoY2QpOw0KKwlpZiAobiAhPSAoc2l6ZV90KS0xKQ0KKwkgIHsNCisJ
ICAgIGNkID0gaWNvbnZfb3Blbihjb2Rlc2V0LCAiQVNDSUkiKTsNCisJICAgIGlmIChjZCAhPSAo
aWNvbnZfdCktMSkNCisJICAgICAgew0KKwkJY2hhciBjMjsNCisJCWluYnVmID0gJmMxOw0KKwkJ
aW5ieXRlc2xlZnQgPSAxOw0KKwkJb3V0YnVmID0gJmMyOw0KKwkJb3V0Ynl0ZXNsZWZ0ID0gMTsN
CisJCW4gPSBpY29udihjZCwgJmluYnVmLCAmaW5ieXRlc2xlZnQsICZvdXRidWYsICZvdXRieXRl
c2xlZnQpOw0KKwkJaWNvbnZfY2xvc2UoY2QpOw0KKwkJaWYgKG4gIT0gKHNpemVfdCktMSkNCisJ
CSAgcmV0dXJuIGMyOw0KKwkgICAgICB9DQorCSAgfQ0KKyAgICAgIH0NCisgICAgcmV0dXJuICdc
MCc7DQorICB9DQorI2VuZGlmDQorDQorICB0ZW1wbGF0ZTw+DQorICAgIHZvaWQNCisgICAgbnVt
cHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpDQor
ICAgIHsNCisgICAgICBpZiAoIV9NX2RhdGEpDQorCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9j
YWNoZTxjaGFyPjsNCisNCisgICAgICBpZiAoIV9fY2xvYykNCisJew0KKwkgIC8vICJDIiBsb2Nh
bGUNCisJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOw0KKwkgIF9NX2RhdGEtPl9NX2dyb3Vw
aW5nX3NpemUgPSAwOw0KKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOw0KKw0K
KwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7DQorCSAgX01fZGF0YS0+X01fdGhv
dXNhbmRzX3NlcCA9ICcsJzsNCisNCisJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251
bV9iYXNlOjpfU19vZW5kOyArK19faSkNCisJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ld
ID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07DQorDQorCSAgZm9yIChzaXplX3QgX19q
ID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opDQorCSAgICBfTV9kYXRhLT5f
TV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXTsNCisJfQ0KKyAg
ICAgIGVsc2UNCisJew0KKwkgIC8vIE5hbWVkIGxvY2FsZS4NCisJICBjb25zdCBjaGFyKiBkZWNp
bWFsX3BvaW50ID0NCisJICAgIChubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9J
TlRfV0MsIF9fY2xvYykpOw0KKw0KKwkgIGlmIChkZWNpbWFsX3BvaW50WzBdICE9ICdcMCcgJiYg
ZGVjaW1hbF9wb2ludFsxXSAhPSAnXDAnKQ0KKwkgICAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2lu
dCA9IF9fbmFycm93X211bHRpYnl0ZV9jaGFycyhkZWNpbWFsX3BvaW50LA0KKwkJCQkJCQkJIF9f
Y2xvYyk7DQorCSAgZWxzZQ0KKwkgICAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICpkZWNp
bWFsX3BvaW50Ow0KKw0KKwkgIGNvbnN0IGNoYXIqIHRob3VzYW5kc19zZXAgPQ0KKwkgICAgbmxf
bGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOw0KKw0KKwkg
IGlmICh0aG91c2FuZHNfc2VwWzBdICE9ICdcMCcgJiYgdGhvdXNhbmRzX3NlcFsxXSAhPSAnXDAn
KQ0KKwkgICAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fbmFycm93X211bHRpYnl0ZV9j
aGFycyh0aG91c2FuZHNfc2VwLA0KKwkJCQkJCQkJIF9fY2xvYyk7DQorCSAgZWxzZQ0KKwkgICAg
X01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICp0aG91c2FuZHNfc2VwOw0KKw0KKwkgIC8vIENo
ZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdyb3VwaW5nLg0KKwkgIGlmIChfTV9kYXRh
LT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpDQorCSAgICB7DQorCSAgICAgIC8vIExpa2UgaW4g
IkMiIGxvY2FsZS4NCisJICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsNCisJICAgICAg
X01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7DQorCSAgICAgIF9NX2RhdGEtPl9NX3VzZV9n
cm91cGluZyA9IGZhbHNlOw0KKwkgICAgICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywn
Ow0KKwkgICAgfQ0KKwkgIGVsc2UNCisJICAgIHsNCisJICAgICAgY29uc3QgY2hhciogX19zcmMg
PSBubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0dST1VQSU5HLCBfX2Nsb2MpOw0KKwkgICAgICBj
b25zdCBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19zcmMpOw0KKwkgICAgICBpZiAoX19sZW4pDQor
CQl7DQorCQkgIF9fdHJ5DQorCQkgICAgew0KKwkJICAgICAgY2hhciogX19kc3QgPSBuZXcgY2hh
cltfX2xlbiArIDFdOw0KKwkJICAgICAgbWVtY3B5KF9fZHN0LCBfX3NyYywgX19sZW4gKyAxKTsN
CisJCSAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19kc3Q7DQorCQkgICAgfQ0KKwkJICBf
X2NhdGNoKC4uLikNCisJCSAgICB7DQorCQkgICAgICBkZWxldGUgX01fZGF0YTsNCisJCSAgICAg
IF9NX2RhdGEgPSAwOw0KKwkJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47DQorCQkgICAg
fQ0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQl7DQorCQkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0g
IiI7DQorCQkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOw0KKwkJfQ0KKwkgICAg
ICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gX19sZW47DQorCSAgICB9DQorCX0NCisNCisg
ICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3Np
eCBsb2NhbGVzLg0KKyAgICAgIC8vIF9NX3RydWVuYW1lID0gbmxfbGFuZ2luZm9fbChZRVNTVFIs
IF9fY2xvYyk7DQorICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSAidHJ1ZSI7DQorICAgICAg
X01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7DQorICAgICAgLy8gX01fZmFsc2VuYW1lID0g
bmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsNCisgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5h
bWUgPSAiZmFsc2UiOw0KKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsNCisg
ICAgfQ0KKw0KKyAgdGVtcGxhdGU8Pg0KKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkN
CisgICAgew0KKyAgICAgIGlmIChfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplKQ0KKwlkZWxldGUg
W10gX01fZGF0YS0+X01fZ3JvdXBpbmc7DQorICAgICAgZGVsZXRlIF9NX2RhdGE7DQorICAgIH0N
CisNCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QNCisgIHRlbXBsYXRlPD4NCisgICAgdm9p
ZA0KKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9j
YWxlIF9fY2xvYykNCisgICAgew0KKyAgICAgIGlmICghX01fZGF0YSkNCisJX01fZGF0YSA9IG5l
dyBfX251bXB1bmN0X2NhY2hlPHdjaGFyX3Q+Ow0KKw0KKyAgICAgIGlmICghX19jbG9jKQ0KKwl7
DQorCSAgLy8gIkMiIGxvY2FsZQ0KKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7DQorCSAg
X01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7DQorCSAgX01fZGF0YS0+X01fdXNlX2dyb3Vw
aW5nID0gZmFsc2U7DQorDQorCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7DQor
CSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7DQorDQorCSAgLy8gVXNlIGN0eXBl
Ojp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uDQorCSAgZm9yIChzaXplX3QgX19pID0g
MDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpDQorCSAgICBfTV9kYXRhLT5fTV9h
dG9tc19vdXRbX19pXSA9DQorCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6
Ol9TX2F0b21zX291dFtfX2ldKTsNCisNCisJICBmb3IgKHNpemVfdCBfX2ogPSAwOyBfX2ogPCBf
X251bV9iYXNlOjpfU19pZW5kOyArK19faikNCisJICAgIF9NX2RhdGEtPl9NX2F0b21zX2luW19f
al0gPQ0KKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19p
bltfX2pdKTsNCisJfQ0KKyAgICAgIGVsc2UNCisJew0KKwkgIC8vIE5hbWVkIGxvY2FsZS4NCisJ
ICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4N
CisJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCAqX193OyB9IF9fdTsNCisJICBfX3UuX19z
ID0gbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOw0K
KwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqX191Ll9fdzsNCisNCisJICBfX3UuX19z
ID0gbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOw0K
KwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqX191Ll9fdzsNCisNCisJICAvLyBDaGVj
ayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4NCisJICBpZiAoX01fZGF0YS0+
X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykNCisJICAgIHsNCisJICAgICAgLy8gTGlrZSBpbiAi
QyIgbG9jYWxlLg0KKwkgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOw0KKwkgICAgICBf
TV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsNCisJICAgICAgX01fZGF0YS0+X01fdXNlX2dy
b3VwaW5nID0gZmFsc2U7DQorCSAgICAgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywn
Ow0KKwkgICAgfQ0KKwkgIGVsc2UNCisJICAgIHsNCisJICAgICAgY29uc3QgY2hhciogX19zcmMg
PSBubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0dST1VQSU5HLCBfX2Nsb2MpOw0KKwkgICAgICBj
b25zdCBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19zcmMpOw0KKwkgICAgICBpZiAoX19sZW4pDQor
CQl7DQorCQkgIF9fdHJ5DQorCQkgICAgew0KKwkJICAgICAgY2hhciogX19kc3QgPSBuZXcgY2hh
cltfX2xlbiArIDFdOw0KKwkJICAgICAgbWVtY3B5KF9fZHN0LCBfX3NyYywgX19sZW4gKyAxKTsN
CisJCSAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19kc3Q7DQorCQkgICAgfQ0KKwkJICBf
X2NhdGNoKC4uLikNCisJCSAgICB7DQorCQkgICAgICBkZWxldGUgX01fZGF0YTsNCisJCSAgICAg
IF9NX2RhdGEgPSAwOw0KKwkJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47DQorCQkgICAg
fQ0KKwkJfQ0KKwkgICAgICBlbHNlDQorCQl7DQorCQkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0g
IiI7DQorCQkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOw0KKwkJfQ0KKwkgICAg
ICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gX19sZW47DQorCSAgICB9DQorCX0NCisNCisg
ICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3Np
eCBsb2NhbGVzLg0KKyAgICAgIC8vIF9NX3RydWVuYW1lID0gbmxfbGFuZ2luZm9fbChZRVNTVFIs
IF9fY2xvYyk7DQorICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSBMInRydWUiOw0KKyAgICAg
IF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0Ow0KKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9
IG5sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7DQorICAgICAgX01fZGF0YS0+X01fZmFsc2Vu
YW1lID0gTCJmYWxzZSI7DQorICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1Ow0K
KyAgICB9DQorDQorICB0ZW1wbGF0ZTw+DQorICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVu
Y3QoKQ0KKyAgICB7DQorICAgICAgaWYgKF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUpDQorCWRl
bGV0ZSBbXSBfTV9kYXRhLT5fTV9ncm91cGluZzsNCisgICAgICBkZWxldGUgX01fZGF0YTsNCisg
ICAgfQ0KKyNlbmRpZg0KKw0KK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTg0KK30gLy8g
bmFtZXNwYWNlDQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGli
L3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi90aW1l
X21lbWJlcnMuY2MNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMC4uZmQw
OWZhNTg5YmENCi0tLSAvZGV2L251bGwNCisrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxl
L25ld2xpYi90aW1lX21lbWJlcnMuY2MNCkBAIC0wLDAgKzEsMzc5IEBADQorLy8gc3RkOjp0aW1l
X2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgbmV3bGliIHZlcnNpb24gLSotIEMr
KyAtKi0NCisNCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMyBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4NCisvLw0KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMr
KyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUNCisvLyBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUNCisvLyB0ZXJtcyBvZiB0
aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KKy8vIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0
aW9uKQ0KKy8vIGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKy8vIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQor
Ly8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZQ0KKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
DQorDQorLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRl
ZCBhZGRpdGlvbmFsDQorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGlt
ZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbg0KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQorDQorLy8gWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kDQorLy8gYSBj
b3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMg
cHJvZ3JhbTsNCisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUg
cmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUNCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu
c2VzLz4uDQorDQorLy8NCisvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQg
dmlydHVhbCBmdW5jdGlvbnMNCisvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9w
dXQgdmlydHVhbCBmdW5jdGlvbnMNCisvLw0KKw0KKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29z
bmlrIDxia296QHJlZGhhdC5jb20+DQorLy8gTW9kaWZpZWQgYnkgVGFrYXNoaSBZYW5vIDx0YWth
c2hpLnlhbm9AbmlmdHkubmUuanA+DQorDQorI2RlZmluZSBfR05VX1NPVVJDRSAxDQorI2luY2x1
ZGUgPGxvY2FsZT4NCisjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4NCisNCitu
YW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkNCit7DQorX0dMSUJDWFhf
QkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04NCisNCisgIHRlbXBsYXRlPD4NCisgICAgdm9pZA0KKyAg
ICBfX3RpbWVwdW5jdDxjaGFyPjo6DQorICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21h
eGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsDQorCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdCB0
aHJvdygpDQorICAgIHsNCisgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZV9sKF9f
cywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLA0KKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0
KTsNCisgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4NCisgICAgICBp
ZiAoX19sZW4gPT0gMCkNCisJX19zWzBdID0gJ1wwJzsNCisgICAgfQ0KKw0KKyAgdGVtcGxhdGU8
Pg0KKyAgICB2b2lkDQorICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX3RpbWVw
dW5jdChfX2NfbG9jYWxlIF9fY2xvYykNCisgICAgew0KKyAgICAgIGlmICghX01fZGF0YSkNCisJ
X01fZGF0YSA9IG5ldyBfX3RpbWVwdW5jdF9jYWNoZTxjaGFyPjsNCisNCisgICAgICBpZiAoIV9f
Y2xvYykNCisJew0KKwkgIC8vICJDIiBsb2NhbGUNCisJICBfTV9jX2xvY2FsZV90aW1lcHVuY3Qg
PSBfU19nZXRfY19sb2NhbGUoKTsNCisNCisJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9ICIl
bS8lZC8leSI7DQorCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gIiVtLyVkLyV5IjsN
CisJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9ICIlSDolTTolUyI7DQorCSAgX01fZGF0YS0+
X01fdGltZV9lcmFfZm9ybWF0ID0gIiVIOiVNOiVTIjsNCisJICBfTV9kYXRhLT5fTV9kYXRlX3Rp
bWVfZm9ybWF0ID0gIiI7DQorCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSAi
IjsNCisJICBfTV9kYXRhLT5fTV9hbSA9ICJBTSI7DQorCSAgX01fZGF0YS0+X01fcG0gPSAiUE0i
Ow0KKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9ICIlSTolTTolUyAlcCI7DQorDQorCSAg
Ly8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4NCisJICBfTV9kYXRhLT5f
TV9kYXkxID0gIlN1bmRheSI7DQorCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOw0KKwkg
IF9NX2RhdGEtPl9NX2RheTMgPSAiVHVlc2RheSI7DQorCSAgX01fZGF0YS0+X01fZGF5NCA9ICJX
ZWRuZXNkYXkiOw0KKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOw0KKwkgIF9NX2Rh
dGEtPl9NX2RheTYgPSAiRnJpZGF5IjsNCisJICBfTV9kYXRhLT5fTV9kYXk3ID0gIlNhdHVyZGF5
IjsNCisNCisJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3Mg
U3VuLg0KKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gIlN1biI7DQorCSAgX01fZGF0YS0+X01fYWRh
eTIgPSAiTW9uIjsNCisJICBfTV9kYXRhLT5fTV9hZGF5MyA9ICJUdWUiOw0KKwkgIF9NX2RhdGEt
Pl9NX2FkYXk0ID0gIldlZCI7DQorCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsNCisJICBf
TV9kYXRhLT5fTV9hZGF5NiA9ICJGcmkiOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gIlNhdCI7
DQorDQorCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4NCisJ
ICBfTV9kYXRhLT5fTV9tb250aDAxID0gIkphbnVhcnkiOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRo
MDIgPSAiRmVicnVhcnkiOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSAiTWFyY2giOw0KKwkg
IF9NX2RhdGEtPl9NX21vbnRoMDQgPSAiQXByaWwiOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUg
PSAiTWF5IjsNCisJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gIkp1bmUiOw0KKwkgIF9NX2RhdGEt
Pl9NX21vbnRoMDcgPSAiSnVseSI7DQorCSAgX01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3Qi
Ow0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSAiU2VwdGVtYmVyIjsNCisJICBfTV9kYXRhLT5f
TV9tb250aDEwID0gIk9jdG9iZXIiOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1i
ZXIiOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSAiRGVjZW1iZXIiOw0KKw0KKwkgIC8vIEFi
YnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4NCisJICBfTV9k
YXRhLT5fTV9hbW9udGgwMSA9ICJKYW4iOw0KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gIkZl
YiI7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFyIjsNCisJICBfTV9kYXRhLT5fTV9h
bW9udGgwNCA9ICJBcHIiOw0KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gIk1heSI7DQorCSAg
X01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsNCisJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9
ICJKdWwiOw0KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gIkF1ZyI7DQorCSAgX01fZGF0YS0+
X01fYW1vbnRoMDkgPSAiU2VwIjsNCisJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9ICJPY3QiOw0K
KwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gIk5vdiI7DQorCSAgX01fZGF0YS0+X01fYW1vbnRo
MTIgPSAiRGVjIjsNCisJfQ0KKyAgICAgIGVsc2UNCisJew0KKwkgIF9NX2NfbG9jYWxlX3RpbWVw
dW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7DQorDQorCSAgX01fZGF0YS0+X01fZGF0
ZV9mb3JtYXQgPSBubF9sYW5naW5mb19sKERfRk1ULCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9N
X2RhdGVfZXJhX2Zvcm1hdCA9IG5sX2xhbmdpbmZvX2woRVJBX0RfRk1ULCBfX2Nsb2MpOw0KKwkg
IF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsN
CisJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBubF9sYW5naW5mb19sKEVSQV9UX0ZN
VCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gbmxfbGFuZ2lu
Zm9fbChEX1RfRk1ULCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9y
bWF0ID0gbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5f
TV9hbSA9IG5sX2xhbmdpbmZvX2woQU1fU1RSLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX3Bt
ID0gbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fYW1fcG1f
Zm9ybWF0ID0gbmxfbGFuZ2luZm9fbChUX0ZNVF9BTVBNLCBfX2Nsb2MpOw0KKw0KKwkgIC8vIERh
eSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuDQorCSAgX01fZGF0YS0+X01fZGF5
MSA9IG5sX2xhbmdpbmZvX2woREFZXzEsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGF5MiA9
IG5sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGF5MyA9IG5s
X2xhbmdpbmZvX2woREFZXzMsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGF5NCA9IG5sX2xh
bmdpbmZvX2woREFZXzQsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGF5NSA9IG5sX2xhbmdp
bmZvX2woREFZXzUsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGF5NiA9IG5sX2xhbmdpbmZv
X2woREFZXzYsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGF5NyA9IG5sX2xhbmdpbmZvX2wo
REFZXzcsIF9fY2xvYyk7DQorDQorCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGlu
ZyB3aXRoICJDIidzIFN1bi4NCisJICBfTV9kYXRhLT5fTV9hZGF5MSA9IG5sX2xhbmdpbmZvX2wo
QUJEQVlfMSwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hZGF5MiA9IG5sX2xhbmdpbmZvX2wo
QUJEQVlfMiwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hZGF5MyA9IG5sX2xhbmdpbmZvX2wo
QUJEQVlfMywgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hZGF5NCA9IG5sX2xhbmdpbmZvX2wo
QUJEQVlfNCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hZGF5NSA9IG5sX2xhbmdpbmZvX2wo
QUJEQVlfNSwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hZGF5NiA9IG5sX2xhbmdpbmZvX2wo
QUJEQVlfNiwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hZGF5NyA9IG5sX2xhbmdpbmZvX2wo
QUJEQVlfNywgX19jbG9jKTsNCisNCisJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAi
QyIncyBKYW51YXJ5Lg0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBubF9sYW5naW5mb19sKE1P
Tl8xLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBubF9sYW5naW5mb19sKE1P
Tl8yLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBubF9sYW5naW5mb19sKE1P
Tl8zLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBubF9sYW5naW5mb19sKE1P
Tl80LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBubF9sYW5naW5mb19sKE1P
Tl81LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBubF9sYW5naW5mb19sKE1P
Tl82LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBubF9sYW5naW5mb19sKE1P
Tl83LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBubF9sYW5naW5mb19sKE1P
Tl84LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBubF9sYW5naW5mb19sKE1P
Tl85LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBubF9sYW5naW5mb19sKE1P
Tl8xMCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9tb250aDExID0gbmxfbGFuZ2luZm9fbChN
T05fMTEsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IG5sX2xhbmdpbmZvX2wo
TU9OXzEyLCBfX2Nsb2MpOw0KKw0KKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFy
dGluZyB3aXRoICJDIidzIEphbi4NCisJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IG5sX2xhbmdp
bmZvX2woQUJNT05fMSwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IG5sX2xh
bmdpbmZvX2woQUJNT05fMiwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IG5s
X2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9
IG5sX2xhbmdpbmZvX2woQUJNT05fNCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hbW9udGgw
NSA9IG5sX2xhbmdpbmZvX2woQUJNT05fNSwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hbW9u
dGgwNiA9IG5sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9h
bW9udGgwNyA9IG5sX2xhbmdpbmZvX2woQUJNT05fNywgX19jbG9jKTsNCisJICBfTV9kYXRhLT5f
TV9hbW9udGgwOCA9IG5sX2xhbmdpbmZvX2woQUJNT05fOCwgX19jbG9jKTsNCisJICBfTV9kYXRh
LT5fTV9hbW9udGgwOSA9IG5sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsNCisJICBfTV9k
YXRhLT5fTV9hbW9udGgxMCA9IG5sX2xhbmdpbmZvX2woQUJNT05fMTAsIF9fY2xvYyk7DQorCSAg
X01fZGF0YS0+X01fYW1vbnRoMTEgPSBubF9sYW5naW5mb19sKEFCTU9OXzExLCBfX2Nsb2MpOw0K
KwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9j
KTsNCisJfQ0KKyAgICB9DQorDQorI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UDQorICB0ZW1w
bGF0ZTw+DQorICAgIHZvaWQNCisgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Og0KKyAgICBfTV9w
dXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0
LA0KKwkgICBjb25zdCB0bSogX190bSkgY29uc3QgdGhyb3coKQ0KKyAgICB7DQorICAgICAgY29u
c3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190
bSwNCisJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7DQorICAgICAgLy8gTWFrZSBzdXJlIF9f
cyBpcyBudWxsIHRlcm1pbmF0ZWQuDQorICAgICAgaWYgKF9fbGVuID09IDApDQorCV9fc1swXSA9
IEwnXDAnOw0KKyAgICB9DQorDQorICB0ZW1wbGF0ZTw+DQorICAgIHZvaWQNCisgICAgX190aW1l
cHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9j
KQ0KKyAgICB7DQorICAgICAgaWYgKCFfTV9kYXRhKQ0KKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1
bmN0X2NhY2hlPHdjaGFyX3Q+Ow0KKw0KKyAgICAgIGlmICghX19jbG9jKQ0KKwl7DQorCSAgLy8g
IkMiIGxvY2FsZQ0KKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgp
Ow0KKw0KKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8lZC8leSI7DQorCSAgX01f
ZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gTCIlbS8lZC8leSI7DQorCSAgX01fZGF0YS0+X01f
dGltZV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsNCisJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3Jt
YXQgPSBMIiVIOiVNOiVTIjsNCisJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gTCIi
Ow0KKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gTCIiOw0KKwkgIF9NX2Rh
dGEtPl9NX2FtID0gTCJBTSI7DQorCSAgX01fZGF0YS0+X01fcG0gPSBMIlBNIjsNCisJICBfTV9k
YXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBMIiVJOiVNOiVTICVwIjsNCisNCisJICAvLyBEYXkgbmFt
ZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5Lg0KKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBM
IlN1bmRheSI7DQorCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsNCisJICBfTV9kYXRh
LT5fTV9kYXkzID0gTCJUdWVzZGF5IjsNCisJICBfTV9kYXRhLT5fTV9kYXk0ID0gTCJXZWRuZXNk
YXkiOw0KKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsNCisJICBfTV9kYXRhLT5f
TV9kYXk2ID0gTCJGcmlkYXkiOw0KKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBMIlNhdHVyZGF5IjsN
CisNCisJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3Vu
Lg0KKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gTCJTdW4iOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXky
ID0gTCJNb24iOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gTCJUdWUiOw0KKwkgIF9NX2RhdGEt
Pl9NX2FkYXk0ID0gTCJXZWQiOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOw0KKwkg
IF9NX2RhdGEtPl9NX2FkYXk2ID0gTCJGcmkiOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gTCJT
YXQiOw0KKw0KKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnku
DQorCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IEwiSmFudWFyeSI7DQorCSAgX01fZGF0YS0+X01f
bW9udGgwMiA9IEwiRmVicnVhcnkiOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBMIk1hcmNo
IjsNCisJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gTCJBcHJpbCI7DQorCSAgX01fZGF0YS0+X01f
bW9udGgwNSA9IEwiTWF5IjsNCisJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gTCJKdW5lIjsNCisJ
ICBfTV9kYXRhLT5fTV9tb250aDA3ID0gTCJKdWx5IjsNCisJICBfTV9kYXRhLT5fTV9tb250aDA4
ID0gTCJBdWd1c3QiOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBMIlNlcHRlbWJlciI7DQor
CSAgX01fZGF0YS0+X01fbW9udGgxMCA9IEwiT2N0b2JlciI7DQorCSAgX01fZGF0YS0+X01fbW9u
dGgxMSA9IEwiTm92ZW1iZXIiOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBMIkRlY2VtYmVy
IjsNCisNCisJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIn
cyBKYW4uDQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBMIkphbiI7DQorCSAgX01fZGF0YS0+
X01fYW1vbnRoMDIgPSBMIkZlYiI7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7
DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBMIkFwciI7DQorCSAgX01fZGF0YS0+X01fYW1v
bnRoMDUgPSBMIk1heSI7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBMIkp1biI7DQorCSAg
X01fZGF0YS0+X01fYW1vbnRoMDcgPSBMIkp1bCI7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDgg
PSBMIkF1ZyI7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBMIlNlcCI7DQorCSAgX01fZGF0
YS0+X01fYW1vbnRoMTAgPSBMIk9jdCI7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBMIk5v
diI7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7DQorCX0NCisgICAgICBlbHNl
DQorCXsNCisJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Ns
b2MpOw0KKw0KKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191Ow0KKw0K
KwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dEX0ZNVCwgX19jbG9jKTsNCisJ
ICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7DQorCSAgX191Ll9fcyA9IG5sX2xh
bmdpbmZvX2woX05MX1RJTUVfV0VSQV9EX0ZNVCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9k
YXRlX2VyYV9mb3JtYXQgPSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9O
TF9USU1FX1dUX0ZNVCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9f
dS5fX3c7DQorCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV0VSQV9UX0ZNVCwg
X19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193Ow0KKwkg
IF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dEX1RfRk1ULCBfX2Nsb2MpOw0KKwkg
IF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBu
bF9sYW5naW5mb19sKF9OTF9USU1FX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsNCisJICBfTV9kYXRh
LT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7DQorCSAgX191Ll9fcyA9IG5sX2xh
bmdpbmZvX2woX05MX1RJTUVfV0FNX1NUUiwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hbSA9
IF9fdS5fX3c7DQorCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1BNX1NUUiwg
X19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7DQorCSAgX191Ll9fcyA9IG5s
X2xhbmdpbmZvX2woX05MX1RJTUVfV1RfRk1UX0FNUE0sIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+
X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsNCisNCisJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5n
IHdpdGggIkMiJ3MgU3VuZGF5Lg0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1F
X1dXRUVLREFZXzEsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGF5MSA9IF9fdS5fX3c7DQor
CSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1dFRUtEQVlfMiwgX19jbG9jKTsN
CisJICBfTV9kYXRhLT5fTV9kYXkyID0gX191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2lu
Zm9fbChfTkxfVElNRV9XV0VFS0RBWV8zLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2RheTMg
PSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dXRUVLREFZ
XzQsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fZGF5NCA9IF9fdS5fX3c7DQorCSAgX191Ll9f
cyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1dFRUtEQVlfNSwgX19jbG9jKTsNCisJICBfTV9k
YXRhLT5fTV9kYXk1ID0gX191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxf
VElNRV9XV0VFS0RBWV82LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193
Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dXRUVLREFZXzcsIF9fY2xv
Yyk7DQorCSAgX01fZGF0YS0+X01fZGF5NyA9IF9fdS5fX3c7DQorDQorCSAgLy8gQWJicmV2aWF0
ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4NCisJICBfX3UuX19zID0gbmxf
bGFuZ2luZm9fbChfTkxfVElNRV9XV0RBWV8xLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2Fk
YXkxID0gX191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XV0RB
WV8yLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX191Ll9fdzsNCisJICBfX3Uu
X19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XV0RBWV8zLCBfX2Nsb2MpOw0KKwkgIF9NX2Rh
dGEtPl9NX2FkYXkzID0gX191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxf
VElNRV9XV0RBWV80LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsN
CisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XV0RBWV81LCBfX2Nsb2MpOw0K
KwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2lu
Zm9fbChfTkxfVElNRV9XV0RBWV82LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0g
X191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XV0RBWV83LCBf
X2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsNCisNCisJICAvLyBNb250
aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5Lg0KKwkgIF9fdS5fX3MgPSBubF9s
YW5naW5mb19sKF9OTF9USU1FX1dNT05USF8xLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21v
bnRoMDEgPSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dN
T05USF8yLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX3UuX193Ow0KKwkg
IF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05USF8zLCBfX2Nsb2MpOw0KKwkg
IF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5m
b19sKF9OTF9USU1FX1dNT05USF80LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQg
PSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05USF81
LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX3UuX193Ow0KKwkgIF9fdS5f
X3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05USF82LCBfX2Nsb2MpOw0KKwkgIF9NX2Rh
dGEtPl9NX21vbnRoMDYgPSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9O
TF9USU1FX1dNT05USF83LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX3Uu
X193Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05USF84LCBfX2Ns
b2MpOw0KKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBu
bF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05USF85LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9N
X21vbnRoMDkgPSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1F
X1dNT05USF8xMCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX191Ll9fdzsN
CisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OVEhfMTEsIF9fY2xvYyk7
DQorCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fdS5fX3c7DQorCSAgX191Ll9fcyA9IG5sX2xh
bmdpbmZvX2woX05MX1RJTUVfV01PTlRIXzEyLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX21v
bnRoMTIgPSBfX3UuX193Ow0KKw0KKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFy
dGluZyB3aXRoICJDIidzIEphbi4NCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElN
RV9XTU9OXzEsIF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBfX3UuX193Ow0K
KwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05fMiwgX19jbG9jKTsNCisJ
ICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fdS5fX3c7DQorCSAgX191Ll9fcyA9IG5sX2xhbmdp
bmZvX2woX05MX1RJTUVfV01PTl8zLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAz
ID0gX191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OXzQs
IF9fY2xvYyk7DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBfX3UuX193Ow0KKwkgIF9fdS5f
X3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05fNSwgX19jbG9jKTsNCisJICBfTV9kYXRh
LT5fTV9hbW9udGgwNSA9IF9fdS5fX3c7DQorCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05M
X1RJTUVfV01PTl82LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9f
dzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OXzcsIF9fY2xvYyk7
DQorCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX3UuX193Ow0KKwkgIF9fdS5fX3MgPSBubF9s
YW5naW5mb19sKF9OTF9USU1FX1dNT05fOCwgX19jbG9jKTsNCisJICBfTV9kYXRhLT5fTV9hbW9u
dGgwOCA9IF9fdS5fX3c7DQorCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV01P
Tl85LCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsNCisJICBf
X3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OXzEwLCBfX2Nsb2MpOw0KKwkgIF9N
X2RhdGEtPl9NX2Ftb250aDEwID0gX191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9f
bChfTkxfVElNRV9XTU9OXzExLCBfX2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0g
X191Ll9fdzsNCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OXzEyLCBf
X2Nsb2MpOw0KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsNCisJfQ0KKyAgICB9
DQorI2VuZGlmDQorDQorX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9ODQorfSAvLyBuYW1l
c3BhY2UNCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvdGlt
ZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvdGltZV9tZW1i
ZXJzLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMC4uYjBjN2MyOWJm
ZGUNCi0tLSAvZGV2L251bGwNCisrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xp
Yi90aW1lX21lbWJlcnMuaA0KQEAgLTAsMCArMSw5MCBAQA0KKy8vIHN0ZDo6dGltZV9nZXQsIHN0
ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIG5ld2xpYiB2ZXJzaW9uIC0qLSBDKysgLSotDQor
DQorLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMjMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuDQorLy8NCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFy
eS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlDQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlDQorLy8gdGVybXMgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisvLyBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikNCisv
LyBhbnkgbGF0ZXIgdmVyc2lvbi4NCisNCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisvLyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKy8vIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUN
CisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKy8v
IFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRp
b25hbA0KKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFy
eSBFeGNlcHRpb24sIHZlcnNpb24NCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLg0KKw0KKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZA0KKy8vIGEgY29weSBvZiB0
aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07
DQorLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3Rp
dmVseS4gIElmIG5vdCwgc2VlDQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lg0K
Kw0KKy8qKiBAZmlsZSBiaXRzL3RpbWVfbWVtYmVycy5oDQorICogIFRoaXMgaXMgYW4gaW50ZXJu
YWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4NCisgKiAg
RG8gbm90IGF0dGVtcHQgdG8gdXNlIGl0IGRpcmVjdGx5LiBAaGVhZGVybmFtZXtsb2NhbGV9DQor
ICovDQorDQorLy8NCisvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgZnVu
Y3Rpb25zDQorLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IGZ1bmN0aW9u
cw0KKy8vDQorDQorLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNv
bT4NCisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q
cD4NCisNCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkNCit7DQor
X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04NCisNCisgIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4NCisgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9f
cmVmcykNCisgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKDApLCBfTV9jX2xvY2FsZV90aW1l
cHVuY3QoMCksDQorICAgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQ0KKyAg
ICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0NCisNCisgIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4NCisgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jYWNoZV90
eXBlKiBfX2NhY2hlLCBzaXplX3QgX19yZWZzKQ0KKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2Rh
dGEoX19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCgwKSwNCisgICAgICBfTV9uYW1lX3Rp
bWVwdW5jdChfU19nZXRfY19uYW1lKCkpDQorICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3Qo
KTsgfQ0KKw0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KKyAgICBfX3RpbWVwdW5jdDxf
Q2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLA0K
KwkJCQkgICAgIHNpemVfdCBfX3JlZnMpDQorICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YSgw
KSwgX01fY19sb2NhbGVfdGltZXB1bmN0KDApLA0KKyAgICAgIF9NX25hbWVfdGltZXB1bmN0KDAp
DQorICAgIHsNCisgICAgICBpZiAoX19idWlsdGluX3N0cmNtcChfX3MsIF9TX2dldF9jX25hbWUo
KSkgIT0gMCkNCisJew0KKwkgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fYnVpbHRpbl9zdHJsZW4o
X19zKSArIDE7DQorCSAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07DQorCSAgX19idWls
dGluX21lbWNweShfX3RtcCwgX19zLCBfX2xlbik7DQorCSAgX01fbmFtZV90aW1lcHVuY3QgPSBf
X3RtcDsNCisJfQ0KKyAgICAgIGVsc2UNCisJX01fbmFtZV90aW1lcHVuY3QgPSBfU19nZXRfY19u
YW1lKCk7DQorDQorICAgICAgX190cnkNCisJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Ns
b2MpOyB9DQorICAgICAgX19jYXRjaCguLi4pDQorCXsNCisJICBpZiAoX01fbmFtZV90aW1lcHVu
Y3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQ0KKwkgICAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0
Ow0KKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOw0KKwl9DQorICAgIH0NCisNCisgIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4NCisgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6fl9fdGltZXB1
bmN0KCkNCisgICAgew0KKyAgICAgIGlmIChfTV9uYW1lX3RpbWVwdW5jdCAhPSBfU19nZXRfY19u
YW1lKCkpDQorCWRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsNCisgICAgICBkZWxldGUgX01f
ZGF0YTsNCisgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7
DQorICAgIH0NCisNCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04NCit9IC8vIG5hbWVz
cGFjZQ0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMv
Y29uZmlndXJlDQppbmRleCAxM2ZjMDNiMmEzZi4uNTM1NDQxY2QxODEgMTAwNzU1DQotLS0gYS9s
aWJzdGRjKystdjMvY29uZmlndXJlDQorKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlDQpAQCAt
NzIzLDYgKzcyMyw3IEBAIENYWEZJTFQNCiBMVExJQklDT05WDQogTElCSUNPTlYNCiBPUFRfTERG
TEFHUw0KK0VYVFJBX0xJQlMNCiBTRUNUSU9OX0xERkxBR1MNCiBHTElCQ1hYX0xJQlMNCiBFTkFC
TEVfVlRBQkxFX1ZFUklGWV9GQUxTRQ0KQEAgLTE2NTUyLDcgKzE2NTUzLDcgQEAgZmkNCiAgICAg
ICBkcmFnb25mbHkqIHwgZnJlZWJzZCopDQogCWVuYWJsZV9jbG9jYWxlX2ZsYWc9ZHJhZ29uZmx5
DQogCTs7DQotICAgICAgb3BlbmJzZCopDQorICAgICAgb3BlbmJzZCogfCBjeWd3aW4qKQ0KIAll
bmFibGVfY2xvY2FsZV9mbGFnPW5ld2xpYg0KIAk7Ow0KICAgICAgICopDQpAQCAtMTY1NjQsNiAr
MTY1NjUsMTAgQEAgZmkNCiAJOzsNCiAgICAgZXNhYw0KICAgZmkNCisgIGNhc2UgJHt0YXJnZXRf
b3N9IGluIGN5Z3dpbiopDQorICAgIEVYVFJBX0xJQlM9Ii1saW50bCINCisgICAgOzsNCisgIGVz
YWMNCiANCiAgICMgU2FuaXR5IGNoZWNrIG1vZGVsLCBhbmQgdGVzdCBmb3Igc3BlY2lhbCBmdW5j
dGlvbmFsaXR5Lg0KICAgaWYgdGVzdCAkZW5hYmxlX2Nsb2NhbGVfZmxhZyA9IGdudTsgdGhlbg0K
QEAgLTE2ODI0LDE4ICsxNjgyOSwxOCBAQCAkYXNfZWNobyAiSUVFRSAxMDAzLjEiID4mNjsgfQ0K
ICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBu
ZXdsaWIiID4mNQ0KICRhc19lY2hvICJuZXdsaWIiID4mNjsgfQ0KIA0KLSAgICAgIENMT0NBTEVf
SD1jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaA0KLSAgICAgIENMT0NBTEVfQ0M9Y29u
ZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjDQotICAgICAgQ0NPREVDVlRfQ0M9Y29uZmln
L2xvY2FsZS9nZW5lcmljL2NvZGVjdnRfbWVtYmVycy5jYw0KLSAgICAgIENDT0xMQVRFX0NDPWNv
bmZpZy9sb2NhbGUvZ2VuZXJpYy9jb2xsYXRlX21lbWJlcnMuY2MNCisgICAgICBDTE9DQUxFX0g9
Y29uZmlnL2xvY2FsZS9uZXdsaWIvY19sb2NhbGUuaA0KKyAgICAgIENMT0NBTEVfQ0M9Y29uZmln
L2xvY2FsZS9uZXdsaWIvY19sb2NhbGUuY2MNCisgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9j
YWxlL25ld2xpYi9jb2RlY3Z0X21lbWJlcnMuY2MNCisgICAgICBDQ09MTEFURV9DQz1jb25maWcv
bG9jYWxlL25ld2xpYi9jb2xsYXRlX21lbWJlcnMuY2MNCiAgICAgICBDQ1RZUEVfQ0M9Y29uZmln
L2xvY2FsZS9uZXdsaWIvY3R5cGVfbWVtYmVycy5jYw0KLSAgICAgIENNRVNTQUdFU19IPWNvbmZp
Zy9sb2NhbGUvZ2VuZXJpYy9tZXNzYWdlc19tZW1iZXJzLmgNCi0gICAgICBDTUVTU0FHRVNfQ0M9
Y29uZmlnL2xvY2FsZS9nZW5lcmljL21lc3NhZ2VzX21lbWJlcnMuY2MNCi0gICAgICBDTU9ORVlf
Q0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL21vbmV0YXJ5X21lbWJlcnMuY2MNCi0gICAgICBDTlVN
RVJJQ19DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvbnVtZXJpY19tZW1iZXJzLmNjDQotICAgICAg
Q1RJTUVfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmgNCi0gICAgICBDVElN
RV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjDQotICAgICAgQ0xPQ0FM
RV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaA0K
KyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvbmV3bGliL21lc3NhZ2VzX21lbWJlcnMu
aA0KKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL25ld2xpYi9tZXNzYWdlc19tZW1i
ZXJzLmNjDQorICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvbmV3bGliL21vbmV0YXJ5X21l
bWJlcnMuY2MNCisgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL25ld2xpYi9udW1lcmlj
X21lbWJlcnMuY2MNCisgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvbmV3bGliL3RpbWVfbWVt
YmVycy5oDQorICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9uZXdsaWIvdGltZV9tZW1iZXJz
LmNjDQorICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvbmV3bGliL2MrK2xv
Y2FsZV9pbnRlcm5hbC5oDQogICAgICAgOzsNCiAgIGVzYWMNCiANCmRpZmYgLS1naXQgYS9saWJz
dGRjKystdjMvc3JjL01ha2VmaWxlLmluIGIvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbg0K
aW5kZXggYzVkMDFlN2JlYmEuLjIwZGFhNjJlMWQ1IDEwMDY0NA0KLS0tIGEvbGlic3RkYysrLXYz
L3NyYy9NYWtlZmlsZS5pbg0KKysrIGIvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbg0KQEAg
LTMwNyw2ICszMDcsNyBAQCBFUlJPUl9DT05TVEFOVFNfU1JDRElSID0gQEVSUk9SX0NPTlNUQU5U
U19TUkNESVJADQogRVhFRVhUID0gQEVYRUVYVEANCiBFWFRSQV9DRkxBR1MgPSBARVhUUkFfQ0ZM
QUdTQA0KIEVYVFJBX0NYWF9GTEFHUyA9IEBFWFRSQV9DWFhfRkxBR1NADQorRVhUUkFfTElCUyA9
IEBFWFRSQV9MSUJTQA0KIEZHUkVQID0gQEZHUkVQQA0KIEZPUk1BVF9GSUxFID0gQEZPUk1BVF9G
SUxFQA0KIEZSRUVTVEFORElOR19GTEFHUyA9IEBGUkVFU1RBTkRJTkdfRkxBR1NADQpAQCAtNTYz
LDcgKzU2NCw3IEBAIGxpYnN0ZGNfX19sYV9ERVBFTkRFTkNJRVMgPSBcDQogCSQodG9wX2J1aWxk
ZGlyKS9zcmMvYysrMjAvbGliYysrMjBjb252ZW5pZW5jZS5sYQ0KIA0KIGxpYnN0ZGNfX19sYV9M
REZMQUdTID0gXA0KLQktdmVyc2lvbi1pbmZvICQobGlidG9vbF9WRVJTSU9OKSAke3ZlcnNpb25f
YXJnfSAtbG0NCisJLXZlcnNpb24taW5mbyAkKGxpYnRvb2xfVkVSU0lPTikgJHt2ZXJzaW9uX2Fy
Z30gLWxtICQoRVhUUkFfTElCUykNCiANCiBsaWJzdGRjX19fbGFfTElOSyA9ICQoQ1hYTElOSykg
JChsaWJzdGRjX19fbGFfTERGTEFHUykgJChsdF9ob3N0X2ZsYWdzKQ0KIEBHTElCQ1hYX0xEQkxf
QUxUMTI4X0NPTVBBVF9GQUxTRUBAR0xJQkNYWF9MREJMX0NPTVBBVF9UUlVFQExUQ1hYQ09NUElM
RTY0ID0gJChMVENYWENPTVBJTEUpDQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3NyYy9jKysx
MS9sb2NhbGVfaW5pdC5jYyBiL2xpYnN0ZGMrKy12My9zcmMvYysrMTEvbG9jYWxlX2luaXQuY2MN
CmluZGV4IGNmYzIyZWFmNWE0Li41ODJhODE2ZGE2NSAxMDA2NDQNCi0tLSBhL2xpYnN0ZGMrKy12
My9zcmMvYysrMTEvbG9jYWxlX2luaXQuY2MNCisrKyBiL2xpYnN0ZGMrKy12My9zcmMvYysrMTEv
bG9jYWxlX2luaXQuY2MNCkBAIC0zMDAsOCArMzAwLDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQ
QUNFX1ZFUlNJT04NCiAJX19vdGhlci5fTV9pbXBsLT5fTV9hZGRfcmVmZXJlbmNlKCk7DQogICAg
ICAgX1NfZ2xvYmFsID0gX19vdGhlci5fTV9pbXBsOw0KICAgICAgIGNvbnN0IHN0cmluZyBfX290
aGVyX25hbWUgPSBfX290aGVyLm5hbWUoKTsNCisgICAgICBleHRlcm4gY29uc3QgX190eXBlb2Yo
c2V0bG9jYWxlKSAqX19zZXRsb2NhbGU7DQogICAgICAgaWYgKF9fb3RoZXJfbmFtZSAhPSAiKiIp
DQotCXNldGxvY2FsZShMQ19BTEwsIF9fb3RoZXJfbmFtZS5jX3N0cigpKTsNCisJX19zZXRsb2Nh
bGUoTENfQUxMLCBfX290aGVyX25hbWUuY19zdHIoKSk7DQogICAgIH0NCiANCiAgICAgLy8gUmVm
ZXJlbmNlIGNvdW50IHNhbml0eSBjaGVjazogb25lIHJlZmVyZW5jZSByZW1vdmVkIGZvciB0aGUN
Ci0tIA0KMi4zOS4wDQoNCg==

--Multipart=_Wed__27_Sep_2023_19_50_39_+0900_=sZ.W=81WNihN9Sy
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


-- 
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

--Multipart=_Wed__27_Sep_2023_19_50_39_+0900_=sZ.W=81WNihN9Sy--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019