public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: libstdc++/10064: crash when using valarray's operator=
@ 2003-03-14 15:46 Gabriel Dos Reis
  0 siblings, 0 replies; 4+ messages in thread
From: Gabriel Dos Reis @ 2003-03-14 15:46 UTC (permalink / raw)
  To: gdr; +Cc: gcc-prs

The following reply was made to PR libstdc++/10064; it has been noted by GNATS.

From: Gabriel Dos Reis <gdr@integrable-solutions.net>
To: Brian.R.Landy@mortgage.wellsFargo.COM
Cc: libstdc++@gcc.gnu.org, gcc-gnats@gcc.gnu.org
Subject: Re: libstdc++/10064: crash when using valarray's operator=
Date: 14 Mar 2003 16:33:30 +0100

 Brian.R.Landy@mortgage.wellsFargo.COM writes:
 
 | Sorry, I assumed it should resize since MS's STL (in VC++ 6.0) does resize.
 | I take it this is particular to valarray? 
 
 Yes, the behaviour I was describing is particular to valarray<> -- as
 opposed to vector<> which does resizing.  Valarray<> should be thought
 of as a low level building bloc.  Automatic resizing is too high level
 for the purpose of valarray.
 
 | Because I think I remember
 | checking vector (in gcc's STL) and it does.   By undefined do you mean that
 | the behavior is left up to the implementer, or that MS should not do the
 | resize?  Thanks!
 
 By "undefined behaviour", I meant what the C++ standard means.
 Anything can happen.  The implementation may accept or reject it, or
 the program may reformat your hard drive.
 
 Thanks,
 
 -- Gaby


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: libstdc++/10064: crash when using valarray's operator=
@ 2003-03-14 13:46 Gabriel Dos Reis
  0 siblings, 0 replies; 4+ messages in thread
From: Gabriel Dos Reis @ 2003-03-14 13:46 UTC (permalink / raw)
  To: gdr; +Cc: gcc-prs

The following reply was made to PR libstdc++/10064; it has been noted by GNATS.

From: Gabriel Dos Reis <gdr@integrable-solutions.net>
To: brian.r.landy@wellsfargo.com
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: libstdc++/10064: crash when using valarray's operator=
Date: 14 Mar 2003 14:37:11 +0100

 brian.r.landy@wellsfargo.com writes:
 
 | >Number:         10064
 | >Category:       libstdc++
 | >Synopsis:       crash when using valarray's operator=
 | >Confidential:   no
 | >Severity:       serious
 | >Priority:       medium
 | >Responsible:    unassigned
 | >State:          open
 | >Class:          sw-bug
 | >Submitter-Id:   net
 | >Arrival-Date:   Thu Mar 13 19:56:01 UTC 2003
 | >Closed-Date:
 | >Last-Modified:
 | >Originator:     Brian Landy
 | >Release:        gcc version 3.2
 | >Organization:
 | >Environment:
 | AIX 4.3, cygwin, ...
 | >Description:
 | There is a bug in the dfinition of:
 | 
 |    valarray<_Tp>::operator= (const valarray<_Tp>& __v)
 | 
 | The target valarray is not resized to match the size of the source
 | valarray before copying.  
 
 This is not a bug.  
 
 It is an undefined behaviour if both operands of operator= doe not
 have the ame size.
 
 -- Gaby


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: libstdc++/10064: crash when using valarray's operator=
@ 2003-03-14 13:40 gdr
  0 siblings, 0 replies; 4+ messages in thread
From: gdr @ 2003-03-14 13:40 UTC (permalink / raw)
  To: brian.r.landy, gcc-bugs, gcc-prs, gdr, nobody

Synopsis: crash when using valarray's operator=

Responsible-Changed-From-To: unassigned->gdr
Responsible-Changed-By: gdr
Responsible-Changed-When: Fri Mar 14 13:39:58 2003
Responsible-Changed-Why:
    Mine
State-Changed-From-To: open->closed
State-Changed-By: gdr
State-Changed-When: Fri Mar 14 13:39:58 2003
State-Changed-Why:
    Not a bug.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=10064


^ permalink raw reply	[flat|nested] 4+ messages in thread

* libstdc++/10064: crash when using valarray's operator=
@ 2003-03-13 19:56 brian.r.landy
  0 siblings, 0 replies; 4+ messages in thread
From: brian.r.landy @ 2003-03-13 19:56 UTC (permalink / raw)
  To: gcc-gnats


>Number:         10064
>Category:       libstdc++
>Synopsis:       crash when using valarray's operator=
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Mar 13 19:56:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Brian Landy
>Release:        gcc version 3.2
>Organization:
>Environment:
AIX 4.3, cygwin, ...
>Description:
There is a bug in the dfinition of:

   valarray<_Tp>::operator= (const valarray<_Tp>& __v)

The target valarray is not resized to match the size of the source valarray before copying.  Then, the size of the target valarray is used to determine what elements to copy.  This means the assignment always succeeds, but (assuming the target valarray has size==0) any attempt to access the target valarray causes a crash.
>How-To-Repeat:
I've attached a .ii that reproduces the problem.
>Fix:
This patch (to include/c++/3.2/valarray) resolves the problem:

--- valarray.old        2002-08-19 11:18:44.000000000 -0500
+++ valarray    2003-01-10 09:29:48.000000000 -0600
@@ -336,6 +336,9 @@
   inline valarray<_Tp>&
   valarray<_Tp>::operator= (const valarray<_Tp>& __v)
   {
+      if (this == &__v)
+          return *this;
+      resize(__v._M_size);
       __valarray_copy(__v._M_data, _M_size, _M_data);
       return *this;
   }
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="valarrtest.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="valarrtest.ii"

IyAxICJ2YWxhcnJ0ZXN0LmNwcCINCiMgMSAiPGJ1aWx0LWluPiINCiMgMSAiPGNvbW1hbmQgbGlu
ZT4iDQojIDEgInZhbGFycnRlc3QuY3BwIg0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi92YWxh
cnJheSIgMSAzDQojIDQyICIvdXNyL2luY2x1ZGUvYysrLzMuMi92YWxhcnJheSIgMw0KDQojIDEg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtY3lnd2luL2JpdHMvYysrY29uZmlnLmgiIDEg
Mw0KIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4vYml0cy9jKytjb25m
aWcuaCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRzL29z
X2RlZmluZXMuaCIgMSAzDQojIDM1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWN5Z3dp
bi9iaXRzL2MrK2NvbmZpZy5oIiAyIDMNCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL3ZhbGFy
cmF5IiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGRlZiIgMSAzDQojIDQ3ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkZGVmIiAzDQoNCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p
Njg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzDQojIDE0OSAiL3Vzci9saWIv
Z2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMw0KdHlwZWRlZiBp
bnQgcHRyZGlmZl90Ow0KIyAyMDMgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4y
L2luY2x1ZGUvc3RkZGVmLmgiIDMNCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsNCiMgNDkg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRkZWYiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQog
IHVzaW5nIDo6cHRyZGlmZl90Ow0KICB1c2luZyA6OnNpemVfdDsNCn0NCiMgNDUgIi91c3IvaW5j
bHVkZS9jKysvMy4yL3ZhbGFycmF5IiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21h
dGgiIDEgMw0KIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMNCg0KDQoNCiMgMSAi
L3Vzci9pbmNsdWRlL21hdGguaCIgMSAzDQoNCg0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lz
L3JlZW50LmgiIDEgMw0KIyA5ICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMNCmV4dGVybiAi
QyIgew0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvX2Fuc2kuaCIgMSAzDQojIDE1ICIvdXNyL2lu
Y2x1ZGUvX2Fuc2kuaCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvbmV3bGliLmgiIDEgMw0KIyAxNiAi
L3Vzci9pbmNsdWRlL19hbnNpLmgiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NvbmZpZy5o
IiAxIDMNCg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL21hY2hpbmUvaWVlZWZwLmgiIDEgMw0KIyA1
ICIvdXNyL2luY2x1ZGUvc3lzL2NvbmZpZy5oIiAyIDMNCiMgMTcgIi91c3IvaW5jbHVkZS9fYW5z
aS5oIiAyIDMNCiMgMTQgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMiAzDQojIDEgIi91c3Iv
aW5jbHVkZS9zeXMvX3R5cGVzLmgiIDEgMw0KIyAxMiAiL3Vzci9pbmNsdWRlL3N5cy9fdHlwZXMu
aCIgMw0KdHlwZWRlZiBsb25nIF9vZmZfdDsNCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxv
bmcgX29mZjY0X3Q7DQoNCg0KdHlwZWRlZiBpbnQgX3NzaXplX3Q7DQoNCg0KDQoNCg0KIyAxICIv
dXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMN
CiMgMzIzICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGRl
Zi5oIiAzDQp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7DQojIDIzICIvdXNyL2luY2x1ZGUv
c3lzL190eXBlcy5oIiAyIDMNCg0KDQp0eXBlZGVmIHN0cnVjdA0Kew0KICBpbnQgX19jb3VudDsN
CiAgdW5pb24NCiAgew0KICAgIHdpbnRfdCBfX3djaDsNCiAgICB1bnNpZ25lZCBjaGFyIF9fd2No
Yls0XTsNCiAgfSBfX3ZhbHVlOw0KfSBfbWJzdGF0ZV90Ow0KDQp0eXBlZGVmIGludCBfZmxvY2tf
dDsNCiMgMTUgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMiAzDQoNCg0KDQoNCnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBfX1VMb25nOw0KIyA0MCAiL3Vzci9pbmNsdWRlL3N5cy9yZWVudC5oIiAz
DQpzdHJ1Y3QgX0JpZ2ludA0Kew0KICBzdHJ1Y3QgX0JpZ2ludCAqX25leHQ7DQogIGludCBfaywg
X21heHdkcywgX3NpZ24sIF93ZHM7DQogIF9fVUxvbmcgX3hbMV07DQp9Ow0KDQoNCnN0cnVjdCBf
X3RtDQp7DQogIGludCBfX3RtX3NlYzsNCiAgaW50IF9fdG1fbWluOw0KICBpbnQgX190bV9ob3Vy
Ow0KICBpbnQgX190bV9tZGF5Ow0KICBpbnQgX190bV9tb247DQogIGludCBfX3RtX3llYXI7DQog
IGludCBfX3RtX3dkYXk7DQogIGludCBfX3RtX3lkYXk7DQogIGludCBfX3RtX2lzZHN0Ow0KfTsN
CiMgNjggIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMw0Kc3RydWN0IF9hdGV4aXQgew0KICAg
ICAgICBzdHJ1Y3QgX2F0ZXhpdCAqX25leHQ7DQogICAgICAgIGludCBfaW5kOw0KICAgICAgICB2
b2lkICgqX2Zuc1szMl0pKHZvaWQpOw0KICAgICAgICB2b2lkICpfZm5hcmdzWzMyXTsNCiAgICAg
ICAgX19VTG9uZyBfZm50eXBlczsNCn07DQojIDkxICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50Lmgi
IDMNCnN0cnVjdCBfX3NidWYgew0KICAgICAgICB1bnNpZ25lZCBjaGFyICpfYmFzZTsNCiAgICAg
ICAgaW50IF9zaXplOw0KfTsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgbG9uZyBfZnBvc190Ow0KIyAx
NTYgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMw0Kc3RydWN0IF9fc0ZJTEUgew0KICB1bnNp
Z25lZCBjaGFyICpfcDsNCiAgaW50IF9yOw0KICBpbnQgX3c7DQogIHNob3J0IF9mbGFnczsNCiAg
c2hvcnQgX2ZpbGU7DQogIHN0cnVjdCBfX3NidWYgX2JmOw0KICBpbnQgX2xiZnNpemU7DQoNCg0K
DQoNCg0KDQogIHZvaWQgKiBfY29va2llOw0KDQogIF9zc2l6ZV90IF9fYXR0cmlidXRlX18oKF9f
Y2RlY2xfXykpICgqX3JlYWQpICh2b2lkICogX2Nvb2tpZSwgY2hhciAqX2J1ZiwgaW50IF9uKTsN
CiAgX3NzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgKCpfd3JpdGUpICh2b2lkICog
X2Nvb2tpZSwgY29uc3QgY2hhciAqX2J1ZiwgaW50IF9uKTsNCg0KICBfZnBvc190IF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpICgqX3NlZWspICh2b2lkICogX2Nvb2tpZSwgX2Zwb3NfdCBfb2Zm
c2V0LCBpbnQgX3doZW5jZSk7DQogIGludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSAoKl9j
bG9zZSkgKHZvaWQgKiBfY29va2llKTsNCg0KDQogIHN0cnVjdCBfX3NidWYgX3ViOw0KICB1bnNp
Z25lZCBjaGFyICpfdXA7DQogIGludCBfdXI7DQoNCg0KICB1bnNpZ25lZCBjaGFyIF91YnVmWzNd
Ow0KICB1bnNpZ25lZCBjaGFyIF9uYnVmWzFdOw0KDQoNCiAgc3RydWN0IF9fc2J1ZiBfbGI7DQoN
Cg0KICBpbnQgX2Jsa3NpemU7DQogIGludCBfb2Zmc2V0Ow0KDQoNCiAgc3RydWN0IF9yZWVudCAq
X2RhdGE7DQoNCg0KDQogIF9mbG9ja190IF9sb2NrOw0KDQp9Ow0KIyAyNDkgIi91c3IvaW5jbHVk
ZS9zeXMvcmVlbnQuaCIgMw0KdHlwZWRlZiBzdHJ1Y3QgX19zRklMRSBfX0ZJTEU7DQoNCg0Kc3Ry
dWN0IF9nbHVlDQp7DQogIHN0cnVjdCBfZ2x1ZSAqX25leHQ7DQogIGludCBfbmlvYnM7DQogIF9f
RklMRSAqX2lvYnM7DQp9Ow0KIyAyODAgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMw0Kc3Ry
dWN0IF9yYW5kNDggew0KICB1bnNpZ25lZCBzaG9ydCBfc2VlZFszXTsNCiAgdW5zaWduZWQgc2hv
cnQgX211bHRbM107DQogIHVuc2lnbmVkIHNob3J0IF9hZGQ7DQoNCg0KDQoNCn07DQojIDUzMiAi
L3Vzci9pbmNsdWRlL3N5cy9yZWVudC5oIiAzDQpzdHJ1Y3QgX3JlZW50DQp7DQogIGludCBfZXJy
bm87DQoNCg0KDQoNCiAgX19GSUxFICpfc3RkaW4sICpfc3Rkb3V0LCAqX3N0ZGVycjsNCg0KICBp
bnQgX2luYzsNCiAgY2hhciBfZW1lcmdlbmN5WzI1XTsNCg0KICBpbnQgX2N1cnJlbnRfY2F0ZWdv
cnk7DQogIGNvbnN0IGNoYXIgKl9jdXJyZW50X2xvY2FsZTsNCg0KICBpbnQgX19zZGlkaW5pdDsN
Cg0KICB2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpICgqX19jbGVhbnVwKSAoc3RydWN0
IF9yZWVudCAqKTsNCg0KDQogIHN0cnVjdCBfQmlnaW50ICpfcmVzdWx0Ow0KICBpbnQgX3Jlc3Vs
dF9rOw0KICBzdHJ1Y3QgX0JpZ2ludCAqX3A1czsNCiAgc3RydWN0IF9CaWdpbnQgKipfZnJlZWxp
c3Q7DQoNCg0KICBpbnQgX2N2dGxlbjsNCiAgY2hhciAqX2N2dGJ1ZjsNCg0KICB1bmlvbg0KICAg
IHsNCiAgICAgIHN0cnVjdA0KICAgICAgICB7DQogICAgICAgICAgdW5zaWduZWQgaW50IF91bnVz
ZWRfcmFuZDsNCiAgICAgICAgICBjaGFyICogX3N0cnRva19sYXN0Ow0KICAgICAgICAgIGNoYXIg
X2FzY3RpbWVfYnVmWzI2XTsNCiAgICAgICAgICBzdHJ1Y3QgX190bSBfbG9jYWx0aW1lX2J1ZjsN
CiAgICAgICAgICBpbnQgX2dhbW1hX3NpZ25nYW07DQogICAgICAgICAgX19leHRlbnNpb25fXyB1
bnNpZ25lZCBsb25nIGxvbmcgX3JhbmRfbmV4dDsNCiAgICAgICAgICBzdHJ1Y3QgX3JhbmQ0OCBf
cjQ4Ow0KICAgICAgICAgIF9tYnN0YXRlX3QgX21ibGVuX3N0YXRlOw0KICAgICAgICAgIF9tYnN0
YXRlX3QgX21idG93Y19zdGF0ZTsNCiAgICAgICAgICBfbWJzdGF0ZV90IF93Y3RvbWJfc3RhdGU7
DQogICAgICAgICAgY2hhciBfbDY0YV9idWZbOF07DQogICAgICAgICAgY2hhciBfc2lnbmFsX2J1
ZlsyNF07DQogICAgICAgICAgaW50IF9nZXRkYXRlX2VycjsNCiAgICAgICAgICBfbWJzdGF0ZV90
IF9tYnJsZW5fc3RhdGU7DQogICAgICAgICAgX21ic3RhdGVfdCBfbWJydG93Y19zdGF0ZTsNCiAg
ICAgICAgICBfbWJzdGF0ZV90IF9tYnNydG93Y3Nfc3RhdGU7DQogICAgICAgICAgX21ic3RhdGVf
dCBfd2NydG9tYl9zdGF0ZTsNCiAgICAgICAgICBfbWJzdGF0ZV90IF93Y3NydG9tYnNfc3RhdGU7
DQogICAgICAgIH0gX3JlZW50Ow0KDQoNCg0KICAgICAgc3RydWN0DQogICAgICAgIHsNCg0KICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgKiBfbmV4dGZbMzBdOw0KICAgICAgICAgIHVuc2lnbmVkIGlu
dCBfbm1hbGxvY1szMF07DQogICAgICAgIH0gX3VudXNlZDsNCiAgICB9IF9uZXc7DQoNCg0KICBz
dHJ1Y3QgX2F0ZXhpdCAqX2F0ZXhpdDsNCiAgc3RydWN0IF9hdGV4aXQgX2F0ZXhpdDA7DQoNCg0K
ICB2b2lkICgqKihfc2lnX2Z1bmMpKShpbnQpOw0KDQoNCg0KDQogIHN0cnVjdCBfZ2x1ZSBfX3Nn
bHVlOw0KICBfX0ZJTEUgX19zZlszXTsNCn07DQojIDcyOCAiL3Vzci9pbmNsdWRlL3N5cy9yZWVu
dC5oIiAzDQpleHRlcm4gc3RydWN0IF9yZWVudCAqX2ltcHVyZV9wdHIgOw0KDQp2b2lkIF9yZWNs
YWltX3JlZW50IChzdHJ1Y3QgX3JlZW50ICopOw0KIyA3NDYgIi91c3IvaW5jbHVkZS9zeXMvcmVl
bnQuaCIgMw0KfQ0KIyA3ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMNCiMgMSAiL3Vzci9pbmNs
dWRlL21hY2hpbmUvaWVlZWZwLmgiIDEgMw0KIyA4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMN
Cg0KDQpleHRlcm4gIkMiIHsNCg0KDQoNCg0KDQoNCnVuaW9uIF9fZG1hdGgNCnsNCiAgX19VTG9u
ZyBpWzJdOw0KICBkb3VibGUgZDsNCn07DQoNCg0KDQoNCmV4dGVybiBfX2F0dHJpYnV0ZV9fKChk
bGxpbXBvcnQpKSBjb25zdCB1bmlvbiBfX2RtYXRoIF9faW5maW5pdHlbXTsNCiMgMzUgIi91c3Iv
aW5jbHVkZS9tYXRoLmgiIDMNCmV4dGVybiBkb3VibGUgYXRhbiAoZG91YmxlKTsNCmV4dGVybiBk
b3VibGUgY29zIChkb3VibGUpOw0KZXh0ZXJuIGRvdWJsZSBzaW4gKGRvdWJsZSk7DQpleHRlcm4g
ZG91YmxlIHRhbiAoZG91YmxlKTsNCmV4dGVybiBkb3VibGUgdGFuaCAoZG91YmxlKTsNCmV4dGVy
biBkb3VibGUgZnJleHAgKGRvdWJsZSwgaW50ICopOw0KZXh0ZXJuIGRvdWJsZSBtb2RmIChkb3Vi
bGUsIGRvdWJsZSAqKTsNCmV4dGVybiBkb3VibGUgY2VpbCAoZG91YmxlKTsNCmV4dGVybiBkb3Vi
bGUgZmFicyAoZG91YmxlKTsNCmV4dGVybiBkb3VibGUgZmxvb3IgKGRvdWJsZSk7DQoNCg0KDQoN
Cg0KDQpleHRlcm4gZG91YmxlIGFjb3MgKGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIGFzaW4gKGRv
dWJsZSk7DQpleHRlcm4gZG91YmxlIGF0YW4yIChkb3VibGUsIGRvdWJsZSk7DQpleHRlcm4gZG91
YmxlIGNvc2ggKGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIHNpbmggKGRvdWJsZSk7DQpleHRlcm4g
ZG91YmxlIGV4cCAoZG91YmxlKTsNCmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSwgaW50KTsN
CmV4dGVybiBkb3VibGUgbG9nIChkb3VibGUpOw0KZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91Ymxl
KTsNCmV4dGVybiBkb3VibGUgcG93IChkb3VibGUsIGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIHNx
cnQgKGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIGZtb2QgKGRvdWJsZSwgZG91YmxlKTsNCiMgNzIg
Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDMNCnR5cGVkZWYgZmxvYXQgZmxvYXRfdDsNCnR5cGVkZWYg
ZG91YmxlIGRvdWJsZV90Ow0KIyA4MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMw0KZXh0ZXJuIGlu
dCBfX2ZwY2xhc3NpZnlmIChmbG9hdCB4KTsNCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5ZCAoZG91
YmxlIHgpOw0KIyAxMjEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMNCmV4dGVybiBkb3VibGUgaW5m
aW5pdHkgKHZvaWQpOw0KZXh0ZXJuIGRvdWJsZSBuYW4gKHZvaWQpOw0KZXh0ZXJuIGludCBpc25h
biAoZG91YmxlKTsNCmV4dGVybiBpbnQgaXNpbmYgKGRvdWJsZSk7DQpleHRlcm4gaW50IGZpbml0
ZSAoZG91YmxlKTsNCmV4dGVybiBkb3VibGUgY29weXNpZ24gKGRvdWJsZSwgZG91YmxlKTsNCmV4
dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSk7DQoNCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSk7
DQpleHRlcm4gZG91YmxlIGNicnQgKGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIG5leHRhZnRlciAo
ZG91YmxlLCBkb3VibGUpOw0KZXh0ZXJuIGRvdWJsZSByaW50IChkb3VibGUpOw0KZXh0ZXJuIGRv
dWJsZSBzY2FsYm4gKGRvdWJsZSwgaW50KTsNCg0KZXh0ZXJuIGRvdWJsZSBleHAyIChkb3VibGUp
Ow0KZXh0ZXJuIGRvdWJsZSBzY2FsYmxuIChkb3VibGUsIGxvbmcgaW50KTsNCmV4dGVybiBkb3Vi
bGUgdGdhbW1hIChkb3VibGUpOw0KZXh0ZXJuIGRvdWJsZSBuZWFyYnlpbnQgKGRvdWJsZSk7DQpl
eHRlcm4gbG9uZyBpbnQgbHJpbnQgKGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIHJvdW5kIChkb3Vi
bGUpOw0KZXh0ZXJuIGxvbmcgaW50IGxyb3VuZCAoZG91YmxlKTsNCmV4dGVybiBkb3VibGUgdHJ1
bmMgKGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIHJlbXF1byAoZG91YmxlLCBkb3VibGUsIGludCAq
KTsNCmV4dGVybiBkb3VibGUgY29weXNpZ24gKGRvdWJsZSwgZG91YmxlKTsNCmV4dGVybiBkb3Vi
bGUgZmRpbSAoZG91YmxlLCBkb3VibGUpOw0KZXh0ZXJuIGRvdWJsZSBmbWF4IChkb3VibGUsIGRv
dWJsZSk7DQpleHRlcm4gZG91YmxlIGZtaW4gKGRvdWJsZSwgZG91YmxlKTsNCmV4dGVybiBkb3Vi
bGUgZm1hIChkb3VibGUsIGRvdWJsZSwgZG91YmxlKTsNCmV4dGVybiB2b2lkIHNpbmNvcyAoZG91
YmxlLCBkb3VibGUgKiwgZG91YmxlICopOw0KDQoNCmV4dGVybiBkb3VibGUgbG9nMXAgKGRvdWJs
ZSk7DQpleHRlcm4gZG91YmxlIGV4cG0xIChkb3VibGUpOw0KDQoNCg0KZXh0ZXJuIGRvdWJsZSBh
Y29zaCAoZG91YmxlKTsNCmV4dGVybiBkb3VibGUgYXRhbmggKGRvdWJsZSk7DQpleHRlcm4gZG91
YmxlIHJlbWFpbmRlciAoZG91YmxlLCBkb3VibGUpOw0KZXh0ZXJuIGRvdWJsZSBnYW1tYSAoZG91
YmxlKTsNCmV4dGVybiBkb3VibGUgZ2FtbWFfciAoZG91YmxlLCBpbnQgKik7DQpleHRlcm4gZG91
YmxlIGxnYW1tYSAoZG91YmxlKTsNCmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKGRvdWJsZSwgaW50
ICopOw0KZXh0ZXJuIGRvdWJsZSBlcmYgKGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIGVyZmMgKGRv
dWJsZSk7DQpleHRlcm4gZG91YmxlIHkwIChkb3VibGUpOw0KZXh0ZXJuIGRvdWJsZSB5MSAoZG91
YmxlKTsNCmV4dGVybiBkb3VibGUgeW4gKGludCwgZG91YmxlKTsNCmV4dGVybiBkb3VibGUgajAg
KGRvdWJsZSk7DQpleHRlcm4gZG91YmxlIGoxIChkb3VibGUpOw0KZXh0ZXJuIGRvdWJsZSBqbiAo
aW50LCBkb3VibGUpOw0KDQoNCg0KZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlLCBkb3VibGUp
Ow0KDQoNCmV4dGVybiBkb3VibGUgY2FicygpOw0KZXh0ZXJuIGRvdWJsZSBkcmVtIChkb3VibGUs
IGRvdWJsZSk7DQojIDE4OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMw0KZXh0ZXJuIGZsb2F0IGF0
YW5mIChmbG9hdCk7DQpleHRlcm4gZmxvYXQgY29zZiAoZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IHNp
bmYgKGZsb2F0KTsNCmV4dGVybiBmbG9hdCB0YW5mIChmbG9hdCk7DQpleHRlcm4gZmxvYXQgdGFu
aGYgKGZsb2F0KTsNCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0LCBpbnQgKik7DQpleHRlcm4g
ZmxvYXQgbW9kZmYgKGZsb2F0LCBmbG9hdCAqKTsNCmV4dGVybiBmbG9hdCBjZWlsZiAoZmxvYXQp
Ow0KZXh0ZXJuIGZsb2F0IGZhYnNmIChmbG9hdCk7DQpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9h
dCk7DQoNCg0KZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCk7DQpleHRlcm4gZmxvYXQgYXNpbmYg
KGZsb2F0KTsNCmV4dGVybiBmbG9hdCBhdGFuMmYgKGZsb2F0LCBmbG9hdCk7DQpleHRlcm4gZmxv
YXQgY29zaGYgKGZsb2F0KTsNCmV4dGVybiBmbG9hdCBzaW5oZiAoZmxvYXQpOw0KZXh0ZXJuIGZs
b2F0IGV4cGYgKGZsb2F0KTsNCmV4dGVybiBmbG9hdCBsZGV4cGYgKGZsb2F0LCBpbnQpOw0KZXh0
ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0KTsNCmV4dGVybiBmbG9hdCBsb2cxMGYgKGZsb2F0KTsNCmV4
dGVybiBmbG9hdCBwb3dmIChmbG9hdCwgZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IHNxcnRmIChmbG9h
dCk7DQpleHRlcm4gZmxvYXQgZm1vZGYgKGZsb2F0LCBmbG9hdCk7DQojIDIyMSAiL3Vzci9pbmNs
dWRlL21hdGguaCIgMw0KZXh0ZXJuIGZsb2F0IGV4cDJmIChmbG9hdCk7DQpleHRlcm4gZmxvYXQg
c2NhbGJsbmYgKGZsb2F0LCBsb25nIGludCk7DQpleHRlcm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQp
Ow0KZXh0ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0KTsNCmV4dGVybiBsb25nIGludCBscmlu
dGYgKGZsb2F0KTsNCmV4dGVybiBmbG9hdCByb3VuZGYgKGZsb2F0KTsNCmV4dGVybiBsb25nIGlu
dCBscm91bmRmIChmbG9hdCk7DQpleHRlcm4gZmxvYXQgdHJ1bmNmIChmbG9hdCk7DQpleHRlcm4g
ZmxvYXQgcmVtcXVvZiAoZmxvYXQsIGZsb2F0LCBpbnQgKik7DQpleHRlcm4gZmxvYXQgY29weXNp
Z25mIChmbG9hdCwgZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IGZkaW1mIChmbG9hdCwgZmxvYXQpOw0K
ZXh0ZXJuIGZsb2F0IGZtYXhmIChmbG9hdCwgZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IGZtaW5mIChm
bG9hdCwgZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IGZtYWYgKGZsb2F0LCBmbG9hdCwgZmxvYXQpOw0K
DQpleHRlcm4gZmxvYXQgaW5maW5pdHlmICh2b2lkKTsNCmV4dGVybiBmbG9hdCBuYW5mICh2b2lk
KTsNCmV4dGVybiBpbnQgaXNuYW5mIChmbG9hdCk7DQpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQp
Ow0KZXh0ZXJuIGludCBmaW5pdGVmIChmbG9hdCk7DQpleHRlcm4gZmxvYXQgY29weXNpZ25mIChm
bG9hdCwgZmxvYXQpOw0KZXh0ZXJuIGludCBpbG9nYmYgKGZsb2F0KTsNCg0KZXh0ZXJuIGZsb2F0
IGFzaW5oZiAoZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCk7DQpleHRlcm4gZmxv
YXQgbmV4dGFmdGVyZiAoZmxvYXQsIGZsb2F0KTsNCmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQp
Ow0KZXh0ZXJuIGZsb2F0IHNjYWxibmYgKGZsb2F0LCBpbnQpOw0KZXh0ZXJuIGZsb2F0IGxvZzFw
ZiAoZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IGV4cG0xZiAoZmxvYXQpOw0KZXh0ZXJuIHZvaWQgc2lu
Y29zZiAoZmxvYXQsIGZsb2F0ICosIGZsb2F0ICopOw0KDQoNCmV4dGVybiBmbG9hdCBhY29zaGYg
KGZsb2F0KTsNCmV4dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0KTsNCmV4dGVybiBmbG9hdCByZW1h
aW5kZXJmIChmbG9hdCwgZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IGdhbW1hZiAoZmxvYXQpOw0KZXh0
ZXJuIGZsb2F0IGdhbW1hZl9yIChmbG9hdCwgaW50ICopOw0KZXh0ZXJuIGZsb2F0IGxnYW1tYWYg
KGZsb2F0KTsNCmV4dGVybiBmbG9hdCBsZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKik7DQpleHRlcm4g
ZmxvYXQgZXJmZiAoZmxvYXQpOw0KZXh0ZXJuIGZsb2F0IGVyZmNmIChmbG9hdCk7DQpleHRlcm4g
ZmxvYXQgeTBmIChmbG9hdCk7DQpleHRlcm4gZmxvYXQgeTFmIChmbG9hdCk7DQpleHRlcm4gZmxv
YXQgeW5mIChpbnQsIGZsb2F0KTsNCmV4dGVybiBmbG9hdCBqMGYgKGZsb2F0KTsNCmV4dGVybiBm
bG9hdCBqMWYgKGZsb2F0KTsNCmV4dGVybiBmbG9hdCBqbmYgKGludCwgZmxvYXQpOw0KDQpleHRl
cm4gZmxvYXQgaHlwb3RmIChmbG9hdCwgZmxvYXQpOw0KDQpleHRlcm4gZmxvYXQgY2Fic2YoKTsN
CmV4dGVybiBmbG9hdCBkcmVtZiAoZmxvYXQsIGZsb2F0KTsNCg0KDQoNCg0KDQoNCmV4dGVybiBp
bnQgKl9fc2lnbmdhbSAodm9pZCk7DQoNCg0KDQoNCg0KDQoNCnN0cnVjdCBfX2V4Y2VwdGlvbg0K
DQoNCg0Kew0KICBpbnQgdHlwZTsNCiAgY2hhciAqbmFtZTsNCiAgZG91YmxlIGFyZzE7DQogIGRv
dWJsZSBhcmcyOw0KICBkb3VibGUgcmV0dmFsOw0KICBpbnQgZXJyOw0KfTsNCg0KDQpleHRlcm4g
aW50IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqZSk7DQojIDM0NSAiL3Vzci9pbmNsdWRl
L21hdGguaCIgMw0KZW51bSBfX2ZkbGlibV92ZXJzaW9uDQp7DQogIF9fZmRsaWJtX2llZWUgPSAt
MSwNCiAgX19mZGxpYm1fc3ZpZCwNCiAgX19mZGxpYm1feG9wZW4sDQogIF9fZmRsaWJtX3Bvc2l4
DQp9Ow0KDQoNCg0KDQpleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgY29uc3QgZW51
bSBfX2ZkbGlibV92ZXJzaW9uIF9fZmRsaWJfdmVyc2lvbjsNCiMgMzY1ICIvdXNyL2luY2x1ZGUv
bWF0aC5oIiAzDQp9DQojIDUyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMiAzDQojIDc5
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19jbWF0aF9wb3dlcihfVHAsIHVuc2lnbmVkIGlu
dCk7DQoNCiAgaW5saW5lIGRvdWJsZQ0KICBhYnMoZG91YmxlIF9feCkNCiAgeyByZXR1cm4gX19i
dWlsdGluX2ZhYnMoX194KTsgfQ0KDQogIGlubGluZSBmbG9hdA0KICBhYnMoZmxvYXQgX194KQ0K
ICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsgfQ0KDQogIGlubGluZSBsb25nIGRvdWJs
ZQ0KICBhYnMobG9uZyBkb3VibGUgX194KQ0KICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2woX194
KTsgfQ0KDQoNCiAgaW5saW5lIGZsb2F0DQogIGFjb3MoZmxvYXQgX194KSB7IHJldHVybiA6OmFj
b3NmKF9feCk7IH0NCg0KDQoNCg0KDQogIHVzaW5nIDo6YWNvczsNCg0KDQoNCg0KDQogIGlubGlu
ZSBsb25nIGRvdWJsZQ0KICBhY29zKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphY29zKHN0
YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0NCg0KDQogIHVzaW5nIDo6YXNpbjsNCg0KDQogIGlu
bGluZSBmbG9hdA0KICBhc2luKGZsb2F0IF9feCkgeyByZXR1cm4gOjphc2luZihfX3gpOyB9DQoj
IDEyOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMNCiAgaW5saW5lIGxvbmcgZG91Ymxl
DQogIGFzaW4obG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFzaW4oc3RhdGljX2Nhc3Q8ZG91
YmxlPihfX3gpKTsgfQ0KDQoNCiAgdXNpbmcgOjphdGFuOw0KDQoNCiAgaW5saW5lIGZsb2F0DQog
IGF0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW5mKF9feCk7IH0NCiMgMTQ3ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9jbWF0aCIgMw0KICBpbmxpbmUgbG9uZyBkb3VibGUNCiAgYXRhbihsb25n
IGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbihzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9
DQoNCg0KICB1c2luZyA6OmF0YW4yOw0KDQoNCiAgaW5saW5lIGZsb2F0DQogIGF0YW4yKGZsb2F0
IF9feSwgZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW4yZihfX3ksIF9feCk7IH0NCiMgMTY2ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMw0KICBpbmxpbmUgbG9uZyBkb3VibGUNCiAgYXRh
bjIobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpDQogIHsgcmV0dXJuIDo6YXRhbjIo
c3RhdGljX2Nhc3Q8ZG91YmxlPihfX3kpLCBzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9DQoN
Cg0KICB1c2luZyA6OmNlaWw7DQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgY2VpbChmbG9hdCBfX3gp
IHsgcmV0dXJuIDo6Y2VpbGYoX194KTsgfQ0KIyAxODUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Nt
YXRoIiAzDQogIGlubGluZSBsb25nIGRvdWJsZQ0KICBjZWlsKGxvbmcgZG91YmxlIF9feCkgeyBy
ZXR1cm4gOjpjZWlsKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0NCg0KDQogIHVzaW5nIDo6
Y29zOw0KDQogIGlubGluZSBmbG9hdA0KICBjb3MoZmxvYXQgX194KQ0KICB7IHJldHVybiBfX2J1
aWx0aW5fY29zZihfX3gpOyB9DQoNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIGNvcyhsb25nIGRv
dWJsZSBfX3gpDQogIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NsKF9feCk7IH0NCg0KICB1c2luZyA6
OmNvc2g7DQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgY29zaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6
Y29zaGYoX194KTsgfQ0KIyAyMTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzDQogIGlu
bGluZSBsb25nIGRvdWJsZQ0KICBjb3NoKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjb3No
KHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0NCg0KDQogIHVzaW5nIDo6ZXhwOw0KDQoNCiAg
aW5saW5lIGZsb2F0DQogIGV4cChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZXhwZihfX3gpOyB9DQoj
IDIzMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMNCiAgaW5saW5lIGxvbmcgZG91Ymxl
DQogIGV4cChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6ZXhwKHN0YXRpY19jYXN0PGRvdWJs
ZT4oX194KSk7IH0NCg0KDQogIHVzaW5nIDo6ZmFiczsNCg0KICBpbmxpbmUgZmxvYXQNCiAgZmFi
cyhmbG9hdCBfX3gpDQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9DQoNCiAgaW5s
aW5lIGxvbmcgZG91YmxlDQogIGZhYnMobG9uZyBkb3VibGUgX194KQ0KICB7IHJldHVybiBfX2J1
aWx0aW5fZmFic2woX194KTsgfQ0KDQogIHVzaW5nIDo6Zmxvb3I7DQoNCg0KICBpbmxpbmUgZmxv
YXQNCiAgZmxvb3IoZmxvYXQgX194KSB7IHJldHVybiA6OmZsb29yZihfX3gpOyB9DQojIDI1OSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIGZs
b29yKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpmbG9vcihzdGF0aWNfY2FzdDxkb3VibGU+
KF9feCkpOyB9DQoNCg0KICB1c2luZyA6OmZtb2Q7DQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgZm1v
ZChmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1cm4gOjpmbW9kZihfX3gsIF9feSk7IH0NCiMg
Mjc4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMw0KICBpbmxpbmUgbG9uZyBkb3VibGUN
CiAgZm1vZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkNCiAgeyByZXR1cm4gOjpm
bW9kKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3kpKTsg
fQ0KDQoNCiAgdXNpbmcgOjpmcmV4cDsNCg0KDQogIGlubGluZSBmbG9hdA0KICBmcmV4cChmbG9h
dCBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHBmKF9feCwgX19leHApOyB9DQojIDI5
NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMNCiAgaW5saW5lIGxvbmcgZG91YmxlDQog
IGZyZXhwKGxvbmcgZG91YmxlIF9feCwgaW50KiBfX2V4cCkNCiAgeyByZXR1cm4gOjpmcmV4cChz
dGF0aWNfY2FzdDxkb3VibGU+KF9feCksIF9fZXhwKTsgfQ0KDQoNCiAgdXNpbmcgOjpsZGV4cDsN
Cg0KDQogIGlubGluZSBmbG9hdA0KICBsZGV4cChmbG9hdCBfX3gsIGludCBfX2V4cCkgeyByZXR1
cm4gOjpsZGV4cGYoX194LCBfX2V4cCk7IH0NCiMgMzE3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9j
bWF0aCIgMw0KICBpbmxpbmUgbG9uZyBkb3VibGUNCiAgbGRleHAobG9uZyBkb3VibGUgX194LCBp
bnQgX19leHApDQogIHsgcmV0dXJuIDo6bGRleHAoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpLCBf
X2V4cCk7IH0NCg0KDQogIHVzaW5nIDo6bG9nOw0KDQoNCiAgaW5saW5lIGZsb2F0DQogIGxvZyhm
bG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9DQojIDMzNiAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvY21hdGgiIDMNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIGxvZyhsb25nIGRvdWJsZSBf
X3gpIHsgcmV0dXJuIDo6bG9nKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0NCg0KDQogIHVz
aW5nIDo6bG9nMTA7DQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgbG9nMTAoZmxvYXQgX194KSB7IHJl
dHVybiA6OmxvZzEwZihfX3gpOyB9DQojIDM1NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgi
IDMNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIGxvZzEwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1
cm4gOjpsb2cxMChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9DQoNCg0KICB1c2luZyA6Om1v
ZGY7DQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgbW9kZihmbG9hdCBfX3gsIGZsb2F0KiBfX2lwdHIp
IHsgcmV0dXJuIDo6bW9kZmYoX194LCBfX2lwdHIpOyB9DQojIDM3OCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvY21hdGgiIDMNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIG1vZGYobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSogX19pcHRyKQ0KICB7DQogICAgZG91YmxlIF9fdG1wOw0KICAgIGRv
dWJsZSBfX3JlcyA9IDo6bW9kZihzdGF0aWNfY2FzdDxkb3VibGU+KF9feCksICZfX3RtcCk7DQog
ICAgKiBfX2lwdHIgPSBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oX190bXApOw0KICAgIHJldHVy
biBfX3JlczsNCiAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIGlubGluZSBf
VHANCiAgICBfX3Bvd19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikNCiAgICB7DQogICAgICByZXR1
cm4gX19uIDwgMA0KICAgICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9feCwgLV9fbikNCiAg
ICAgICAgOiBfX2NtYXRoX3Bvd2VyKF9feCwgX19uKTsNCiAgICB9DQoNCiAgdXNpbmcgOjpwb3c7
DQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgcG93KGZsb2F0IF9feCwgZmxvYXQgX195KSB7IHJldHVy
biA6OnBvd2YoX194LCBfX3kpOyB9DQojIDQxMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgi
IDMNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIHBvdyhsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlIF9feSkNCiAgeyByZXR1cm4gOjpwb3coc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpLCBzdGF0
aWNfY2FzdDxkb3VibGU+KF9feSkpOyB9DQoNCg0KICBpbmxpbmUgZG91YmxlDQogIHBvdyhkb3Vi
bGUgX194LCBpbnQgX19pKQ0KICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX2kpOyB9DQoN
CiAgaW5saW5lIGZsb2F0DQogIHBvdyhmbG9hdCBfX3gsIGludCBfX24pDQogIHsgcmV0dXJuIF9f
cG93X2hlbHBlcihfX3gsIF9fbik7IH0NCg0KICBpbmxpbmUgbG9uZyBkb3VibGUNCiAgcG93KGxv
bmcgZG91YmxlIF9feCwgaW50IF9fbikNCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19u
KTsgfQ0KDQogIHVzaW5nIDo6c2luOw0KDQogIGlubGluZSBmbG9hdA0KICBzaW4oZmxvYXQgX194
KQ0KICB7IHJldHVybiBfX2J1aWx0aW5fc2luZihfX3gpOyB9DQoNCiAgaW5saW5lIGxvbmcgZG91
YmxlDQogIHNpbihsb25nIGRvdWJsZSBfX3gpDQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5sKF9f
eCk7IH0NCg0KICB1c2luZyA6OnNpbmg7DQoNCg0KICBpbmxpbmUgZmxvYXQNCiAgc2luaChmbG9h
dCBfX3gpIHsgcmV0dXJuIDo6c2luaGYoX194KTsgfQ0KIyA0NTMgIi91c3IvaW5jbHVkZS9jKysv
My4yL2NtYXRoIiAzDQogIGlubGluZSBsb25nIGRvdWJsZQ0KICBzaW5oKGxvbmcgZG91YmxlIF9f
eCkgeyByZXR1cm4gOjpzaW5oKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0NCg0KDQogIHVz
aW5nIDo6c3FydDsNCg0KICBpbmxpbmUgZmxvYXQNCiAgc3FydChmbG9hdCBfX3gpDQogIHsgcmV0
dXJuIF9fYnVpbHRpbl9zcXJ0ZihfX3gpOyB9DQoNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIHNx
cnQobG9uZyBkb3VibGUgX194KQ0KICB7IHJldHVybiBfX2J1aWx0aW5fc3FydGwoX194KTsgfQ0K
DQogIHVzaW5nIDo6dGFuOw0KDQoNCiAgaW5saW5lIGZsb2F0DQogIHRhbihmbG9hdCBfX3gpIHsg
cmV0dXJuIDo6dGFuZihfX3gpOyB9DQojIDQ4MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgi
IDMNCiAgaW5saW5lIGxvbmcgZG91YmxlDQogIHRhbihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu
IDo6dGFuKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0NCg0KDQogIHVzaW5nIDo6dGFuaDsN
Cg0KDQogIGlubGluZSBmbG9hdA0KICB0YW5oKGZsb2F0IF9feCkgeyByZXR1cm4gOjp0YW5oZihf
X3gpOyB9DQojIDQ5OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMNCiAgaW5saW5lIGxv
bmcgZG91YmxlDQogIHRhbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbmgoc3RhdGlj
X2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQ0KDQp9DQojIDY1NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Y21hdGgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jbWF0aC50Y2MiIDEgMw0K
IyAzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jbWF0aC50Y2MiIDMNCm5hbWVzcGFjZSBz
dGQNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIF9UcA0KICAgIF9fY21hdGhfcG93
ZXIoX1RwIF9feCwgdW5zaWduZWQgaW50IF9fbikNCiAgICB7DQogICAgICBfVHAgX195ID0gX19u
ICUgMiA/IF9feCA6IDE7DQoNCiAgICAgIHdoaWxlIChfX24gPj49IDEpDQogICAgICAgIHsNCiAg
ICAgICAgICBfX3ggPSBfX3ggKiBfX3g7DQogICAgICAgICAgaWYgKF9fbiAlIDIpDQogICAgICAg
ICAgICBfX3kgPSBfX3kgKiBfX3g7DQogICAgICAgIH0NCg0KICAgICAgcmV0dXJuIF9feTsNCiAg
ICB9DQp9DQojIDY1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDIgMw0KIyA0NiAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvdmFsYXJyYXkiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9jc3RkbGliIiAxIDMNCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRsaWIiIDMNCg0K
DQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMw0KIyAxNCAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAzDQojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMw0KIyAxNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMNCg0K
DQojIDEgIi91c3IvaW5jbHVkZS9tYWNoaW5lL3N0ZGxpYi5oIiAxIDMNCiMgMTggIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMiAzDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMNCiMg
MjAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzDQoNCg0KZXh0ZXJuICJDIiB7DQoNCnR5cGVk
ZWYgc3RydWN0DQp7DQogIGludCBxdW90Ow0KICBpbnQgcmVtOw0KfSBkaXZfdDsNCg0KdHlwZWRl
ZiBzdHJ1Y3QNCnsNCiAgbG9uZyBxdW90Ow0KICBsb25nIHJlbTsNCn0gbGRpdl90Ow0KIyA0NSAi
L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzDQpleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0
KSkgaW50IF9fbWJfY3VyX21heDsNCg0KDQoNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgYWJvcnQgKHZvaWQpIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOw0KaW50IF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIGFicyAoaW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpKHZvaWQpKTsNCmRvdWJsZSBfX2F0dHJpYnV0ZV9f
KChfX2NkZWNsX18pKSBhdG9mIChjb25zdCBjaGFyICpfX25wdHIpOw0KDQpmbG9hdCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBhdG9mZiAoY29uc3QgY2hhciAqX19ucHRyKTsNCg0KaW50IF9f
YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGF0b2kgKGNvbnN0IGNoYXIgKl9fbnB0cik7DQpsb25n
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGF0b2wgKGNvbnN0IGNoYXIgKl9fbnB0cik7DQp2
b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYnNlYXJjaCAoY29uc3Qgdm9pZCAqIF9f
a2V5LCBjb25zdCB2b2lkICogX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwg
aW50ICgqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9jb21wYXIpIChjb25zdCB2b2lkICos
IGNvbnN0IHZvaWQgKikpOw0KDQoNCg0KDQp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSk7DQpkaXZfdCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSk7DQp2b2lk
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGV4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1
dGVfXyAoKG5vcmV0dXJuKSk7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZyZWUg
KHZvaWQgKik7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0ZW52IChjb25z
dCBjaGFyICpfX3N0cmluZyk7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2dl
dGVudl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9fc3RyaW5nKTsNCmNoYXIgKiBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZmluZGVudiAoY29uc3QgY2hhciAqLCBpbnQgKik7
DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2ZpbmRlbnZfciAoc3RydWN0IF9y
ZWVudCAqLCBjb25zdCBjaGFyICosIGludCAqKTsNCmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVj
bF9fKSkgbGFicyAobG9uZyk7DQpsZGl2X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbGRp
diAobG9uZyBfX251bWVyLCBsb25nIF9fZGVub20pOw0Kdm9pZCAqIF9fYXR0cmlidXRlX18oKF9f
Y2RlY2xfXykpIG1hbGxvYyAoc2l6ZV90IF9fc2l6ZSk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19j
ZGVjbF9fKSkgbWJsZW4gKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCmludCBfX2F0dHJpYnV0ZV9f
KChfX2NkZWNsX18pKSBfbWJsZW5fciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIHNp
emVfdCwgX21ic3RhdGVfdCAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtYnRv
d2MgKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0KaW50IF9fYXR0cmlidXRlX18o
KF9fY2RlY2xfXykpIF9tYnRvd2NfciAoc3RydWN0IF9yZWVudCAqLCB3Y2hhcl90ICosIGNvbnN0
IGNoYXIgKiwgc2l6ZV90LCBfbWJzdGF0ZV90ICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIHdjdG9tYiAoY2hhciAqLCB3Y2hhcl90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk
ZWNsX18pKSBfd2N0b21iX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCB3Y2hhcl90LCBfbWJz
dGF0ZV90ICopOw0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1ic3Rvd2NzICh3
Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCnNpemVfdCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBfbWJzdG93Y3NfciAoc3RydWN0IF9yZWVudCAqLCB3Y2hhcl90ICosIGNvbnN0
IGNoYXIgKiwgc2l6ZV90LCBfbWJzdGF0ZV90ICopOw0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9f
Y2RlY2xfXykpIHdjc3RvbWJzIChjaGFyICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsNCnNp
emVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfd2NzdG9tYnNfciAoc3RydWN0IF9yZWVu
dCAqLCBjaGFyICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90LCBfbWJzdGF0ZV90ICopOw0KDQoN
CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBta3N0ZW1wIChjaGFyICopOw0KY2hhciAq
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1rdGVtcCAoY2hhciAqKTsNCg0KDQp2b2lkIF9f
YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHFzb3J0ICh2b2lkICogX19iYXNlLCBzaXplX3QgX19u
bWVtYiwgc2l6ZV90IF9fc2l6ZSwgaW50KCpfY29tcGFyKShjb25zdCB2b2lkICosIGNvbnN0IHZv
aWQgKikpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJhbmQgKHZvaWQpOw0Kdm9p
ZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJlYWxsb2MgKHZvaWQgKiBfX3IsIHNpemVf
dCBfX3NpemUpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzcmFuZCAodW5zaWdu
ZWQgX19zZWVkKTsNCmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJ0b2QgKGNv
bnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUik7DQpkb3VibGUgX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgX3N0cnRvZF9yIChzdHJ1Y3QgX3JlZW50ICosY29uc3QgY2hhciAqX19uLCBj
aGFyICoqX19lbmRfUFRSKTsNCmZsb2F0IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnRv
ZiAoY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSKTsNCg0KDQoNCg0KDQoNCmxvbmcg
X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG9sIChjb25zdCBjaGFyICpfX24sIGNoYXIg
KipfX2VuZF9QVFIsIGludCBfX2Jhc2UpOw0KbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBfc3RydG9sX3IgKHN0cnVjdCBfcmVlbnQgKixjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2Vu
ZF9QVFIsIGludCBfX2Jhc2UpOw0KdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSBzdHJ0b3VsIChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIsIGludCBfX2Jh
c2UpOw0KdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc3RydG91bF9y
IChzdHJ1Y3QgX3JlZW50ICosY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSLCBpbnQg
X19iYXNlKTsNCg0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN5c3RlbSAoY29uc3Qg
Y2hhciAqX19zdHJpbmcpOw0KDQoNCmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYTY0
bCAoY29uc3QgY2hhciAqX19pbnB1dCk7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgbDY0YSAobG9uZyBfX2lucHV0KTsNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBfbDY0YV9yIChzdHJ1Y3QgX3JlZW50ICosbG9uZyBfX2lucHV0KTsNCmludCBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBvbl9leGl0ICh2b2lkICgqX19mdW5jKShpbnQsIHZvaWQgKiksdm9p
ZCAqIF9fYXJnKTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX0V4aXQgKGludCBf
X3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7DQppbnQgX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgcHV0ZW52IChjb25zdCBjaGFyICpfX3N0cmluZyk7DQppbnQgX19hdHRyaWJ1
dGVfXygoX19jZGVjbF9fKSkgX3B1dGVudl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIg
Kl9fc3RyaW5nKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXRlbnYgKGNvbnN0
IGNoYXIgKl9fc3RyaW5nLCBjb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19vdmVyd3JpdGUpOw0K
aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zZXRlbnZfciAoc3RydWN0IF9yZWVudCAq
LCBjb25zdCBjaGFyICpfX3N0cmluZywgY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fb3Zlcndy
aXRlKTsNCg0KY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdjdnQgKGRvdWJsZSxp
bnQsY2hhciAqKTsNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnY3Z0ZiAoZmxv
YXQsaW50LGNoYXIgKik7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmN2dCAo
ZG91YmxlLGludCxpbnQgKixpbnQgKik7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgZmN2dGYgKGZsb2F0LGludCxpbnQgKixpbnQgKik7DQpjaGFyICogX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgZWN2dCAoZG91YmxlLGludCxpbnQgKixpbnQgKik7DQpjaGFyICogX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgZWN2dGJ1ZiAoZG91YmxlLCBpbnQsIGludCosIGludCosIGNo
YXIgKik7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmN2dGJ1ZiAoZG91Ymxl
LCBpbnQsIGludCosIGludCosIGNoYXIgKik7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVj
bF9fKSkgZWN2dGYgKGZsb2F0LGludCxpbnQgKixpbnQgKik7DQpjaGFyICogX19hdHRyaWJ1dGVf
XygoX19jZGVjbF9fKSkgZHRvYSAoZG91YmxlLCBpbnQsIGludCwgaW50ICosIGludCosIGNoYXIq
Kik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcmFuZF9yICh1bnNpZ25lZCAqX19z
ZWVkKTsNCg0KZG91YmxlIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGRyYW5kNDggKHZvaWQp
Ow0KZG91YmxlIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9kcmFuZDQ4X3IgKHN0cnVjdCBf
cmVlbnQgKik7DQpkb3VibGUgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZXJhbmQ0OCAodW5z
aWduZWQgc2hvcnQgWzNdKTsNCmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZXJh
bmQ0OF9yIChzdHJ1Y3QgX3JlZW50ICosIHVuc2lnbmVkIHNob3J0IFszXSk7DQpsb25nIF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IFszXSk7DQpsb25n
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9qcmFuZDQ4X3IgKHN0cnVjdCBfcmVlbnQgKiwg
dW5zaWduZWQgc2hvcnQgWzNdKTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbGNv
bmc0OCAodW5zaWduZWQgc2hvcnQgWzddKTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgX2xjb25nNDhfciAoc3RydWN0IF9yZWVudCAqLCB1bnNpZ25lZCBzaG9ydCBbN10pOw0KbG9u
ZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBscmFuZDQ4ICh2b2lkKTsNCmxvbmcgX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgX2xyYW5kNDhfciAoc3RydWN0IF9yZWVudCAqKTsNCmxvbmcg
X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbXJhbmQ0OCAodm9pZCk7DQpsb25nIF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIF9tcmFuZDQ4X3IgKHN0cnVjdCBfcmVlbnQgKik7DQpsb25nIF9f
YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IFszXSk7DQps
b25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9ucmFuZDQ4X3IgKHN0cnVjdCBfcmVlbnQg
KiwgdW5zaWduZWQgc2hvcnQgWzNdKTsNCnVuc2lnbmVkIHNob3J0ICoNCiAgICAgICBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBzZWVkNDggKHVuc2lnbmVkIHNob3J0IFszXSk7DQp1bnNpZ25l
ZCBzaG9ydCAqDQogICAgICAgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3NlZWQ0OF9yIChz
dHJ1Y3QgX3JlZW50ICosIHVuc2lnbmVkIHNob3J0IFszXSk7DQp2b2lkIF9fYXR0cmlidXRlX18o
KF9fY2RlY2xfXykpIHNyYW5kNDggKGxvbmcpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSBfc3JhbmQ0OF9yIChzdHJ1Y3QgX3JlZW50ICosIGxvbmcpOw0KbG9uZyBsb25nIF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnRvbGwgKGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9f
ZW5kX1BUUiwgaW50IF9fYmFzZSk7DQpsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgX3N0cnRvbGxfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICpfX24sIGNoYXIgKipf
X2VuZF9QVFIsIGludCBfX2Jhc2UpOw0KdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18o
KF9fY2RlY2xfXykpIHN0cnRvdWxsIChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9QVFIs
IGludCBfX2Jhc2UpOw0KdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xf
XykpIF9zdHJ0b3VsbF9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9fbiwgY2hhciAq
Kl9fZW5kX1BUUiwgaW50IF9fYmFzZSk7DQoNCg0KDQoNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSByZWFscGF0aCAoY29uc3QgY2hhciAqLCBjaGFyICopOw0Kdm9pZCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSB1bnNldGVudiAoY29uc3QgY2hhciAqX19zdHJpbmcpOw0Kdm9p
ZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdW5zZXRlbnZfciAoc3RydWN0IF9yZWVudCAq
LCBjb25zdCBjaGFyICpfX3N0cmluZyk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
cmFuZG9tICh2b2lkKTsNCmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3JhbmRvbSAo
dW5zaWduZWQgX19zZWVkKTsNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwdHNu
YW1lIChpbnQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdyYW50cHQgKGludCk7
DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdW5sb2NrcHQgKGludCk7DQoNCg0KDQoN
CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZHRvYV9yIChzdHJ1Y3QgX3JlZW50
ICosIGRvdWJsZSwgaW50LCBpbnQsIGludCAqLCBpbnQqLCBjaGFyKiopOw0KDQoNCg0KDQoNCg0K
DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3N5c3RlbV9yIChzdHJ1Y3QgX3JlZW50
ICosIGNvbnN0IGNoYXIgKik7DQoNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX19l
cHJpbnRmIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LCBjb25zdCBj
aGFyICopOw0KIyAyMTMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMw0KfQ0KIyA1MyAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMiAzDQojIDg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9j
c3RkbGliIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6ZGl2X3Q7DQogIHVzaW5nIDo6
bGRpdl90Ow0KDQogIHVzaW5nIDo6YWJvcnQ7DQogIHVzaW5nIDo6YWJzOw0KICB1c2luZyA6OmF0
ZXhpdDsNCiAgdXNpbmcgOjphdG9mOw0KICB1c2luZyA6OmF0b2k7DQogIHVzaW5nIDo6YXRvbDsN
CiAgdXNpbmcgOjpic2VhcmNoOw0KICB1c2luZyA6OmNhbGxvYzsNCiAgdXNpbmcgOjpkaXY7DQog
IHVzaW5nIDo6ZXhpdDsNCiAgdXNpbmcgOjpmcmVlOw0KICB1c2luZyA6OmdldGVudjsNCiAgdXNp
bmcgOjpsYWJzOw0KICB1c2luZyA6OmxkaXY7DQogIHVzaW5nIDo6bWFsbG9jOw0KICB1c2luZyA6
Om1ibGVuOw0KICB1c2luZyA6Om1ic3Rvd2NzOw0KICB1c2luZyA6Om1idG93YzsNCiAgdXNpbmcg
Ojpxc29ydDsNCiAgdXNpbmcgOjpyYW5kOw0KICB1c2luZyA6OnJlYWxsb2M7DQogIHVzaW5nIDo6
c3JhbmQ7DQogIHVzaW5nIDo6c3RydG9kOw0KICB1c2luZyA6OnN0cnRvbDsNCiAgdXNpbmcgOjpz
dHJ0b3VsOw0KICB1c2luZyA6OnN5c3RlbTsNCiAgdXNpbmcgOjp3Y3N0b21iczsNCiAgdXNpbmcg
Ojp3Y3RvbWI7DQoNCiAgaW5saW5lIGxvbmcNCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJz
KF9faSk7IH0NCg0KICBpbmxpbmUgbGRpdl90DQogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsg
cmV0dXJuIGxkaXYoX19pLCBfX2opOyB9DQp9DQojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi92
YWxhcnJheSIgMiAzDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL251bWVyaWMiIDEgMw0KIyA2
NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbnVtZXJpYyIgMw0KDQoNCiMgMSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvaXRlcmF0b3IiIDEgMw0KIyA2NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaXRlcmF0
b3IiIDMNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jh
c2VfdHlwZXMuaCIgMSAzDQojIDY4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVy
YXRvcl9iYXNlX3R5cGVzLmgiIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KIyA4MCAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzDQogIHN0cnVjdCBp
bnB1dF9pdGVyYXRvcl90YWcge307DQoNCiAgc3RydWN0IG91dHB1dF9pdGVyYXRvcl90YWcge307
DQoNCiAgc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9y
X3RhZyB7fTsNCg0KICBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMg
Zm9yd2FyZF9pdGVyYXRvcl90YWcge307DQoNCiAgc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9Ow0KIyAxMDAgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMw0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2F0ZWdvcnksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Rpc3Rh
bmNlID0gcHRyZGlmZl90LA0KICAgICAgICAgICB0eXBlbmFtZSBfUG9pbnRlciA9IF9UcCosIHR5
cGVuYW1lIF9SZWZlcmVuY2UgPSBfVHAmPg0KICAgIHN0cnVjdCBpdGVyYXRvciB7DQoNCiAgICAg
IHR5cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5Ow0KDQogICAgICB0eXBlZGVmIF9U
cCB2YWx1ZV90eXBlOw0KDQogICAgICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7
DQoNCiAgICAgIHR5cGVkZWYgX1BvaW50ZXIgcG9pbnRlcjsNCg0KICAgICAgdHlwZWRlZiBfUmVm
ZXJlbmNlIHJlZmVyZW5jZTsNCiAgICB9Ow0KDQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyYXRvcj4NCiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzIHsNCiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29y
eTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5
cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRp
ZmZlcmVuY2VfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVy
IHBvaW50ZXI7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJl
ZmVyZW5jZTsNCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICBzdHJ1Y3Qg
aXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsNCiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7DQogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl
Ow0KICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOw0KICAgICAgdHlwZWRl
ZiBfVHAqIHBvaW50ZXI7DQogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KICAgIH07DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29u
c3QgX1RwKj4gew0KICAgICAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVy
YXRvcl9jYXRlZ29yeTsNCiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQogICAgICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7DQogICAgICB0eXBlZGVmIGNvbnN0IF9UcCog
cG9pbnRlcjsNCiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7DQogICAgfTsNCg0K
DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4NCiAgICBpbmxpbmUgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkNCiAgICBfX2l0ZXJh
dG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikNCiAgICB7IHJldHVybiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpOyB9DQoNCn0NCiMgNjggIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2l0ZXJhdG9yIiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMNCiMgNjggIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMw0KIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzDQojIDM5ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMw0KIyA2OSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMNCg0KDQoNCg0KbmFtZXNwYWNl
IHN0ZA0Kew0KdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+DQogIGlubGluZSB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUNCiAg
X19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs
IGlucHV0X2l0ZXJhdG9yX3RhZykNCiAgew0KDQogICANCg0KICAgIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOw0KICAgIHdo
aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICAgKytfX2ZpcnN0OyArK19fbjsNCiAgICB9
DQogICAgcmV0dXJuIF9fbjsNCiAgfQ0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlcmF0b3I+DQogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQogIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAg
ICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpDQogIHsNCg0KICAgDQogICAgcmV0dXJuIF9f
bGFzdCAtIF9fZmlyc3Q7DQogIH0NCiMgMTExICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMNCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJh
dG9yPg0KICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6
ZGlmZmVyZW5jZV90eXBlDQogIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1
dEl0ZXJhdG9yIF9fbGFzdCkNCiAgew0KDQogICAgcmV0dXJuIF9fZGlzdGFuY2UoX19maXJzdCwg
X19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAgfQ0KDQp0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+DQogIGlubGluZSB2b2lkDQog
IF9fYWR2YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9y
X3RhZykNCiAgew0KDQogICANCiAgICB3aGlsZSAoX19uLS0pICsrX19pOw0KICB9DQoNCnRlbXBs
YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4N
CiAgaW5saW5lIHZvaWQNCiAgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwg
X0Rpc3RhbmNlIF9fbiwNCiAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQ0K
ICB7DQoNCiAgIA0KDQogICAgaWYgKF9fbiA+IDApDQogICAgICB3aGlsZSAoX19uLS0pICsrX19p
Ow0KICAgIGVsc2UNCiAgICAgIHdoaWxlIChfX24rKykgLS1fX2k7DQogIH0NCg0KdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+DQogIGlu
bGluZSB2b2lkDQogIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3Rh
bmNlIF9fbiwNCiAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0KICB7DQoN
CiAgIA0KICAgIF9faSArPSBfX247DQogIH0NCiMgMTY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMNCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+DQogIGlubGluZSB2b2lkDQogIGFkdmFuY2Uo
X0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikNCiAgew0KDQogICAgX19hZHZhbmNl
KF9faSwgX19uLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOw0KICB9DQoNCn0NCiMgNjkgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2l0ZXJhdG9yIiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAzDQojIDY4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9pdGVyYXRvci5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQojIDg5ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
dGVyYXRvcj4NCiAgICBjbGFzcyByZXZlcnNlX2l0ZXJhdG9yDQogICAgOiBwdWJsaWMgaXRlcmF0
b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5
LA0KICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0
b3I+Ojp2YWx1ZV90eXBlLA0KICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsDQogICAgICAgICAgICAgICAgICAg
ICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsDQogICAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVy
ZW5jZT4NCiAgICB7DQogICAgcHJvdGVjdGVkOg0KICAgICAgX0l0ZXJhdG9yIGN1cnJlbnQ7DQoN
CiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOw0KICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5j
ZV90eXBlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJlbmNlOw0KICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVy
Ow0KDQogICAgcHVibGljOg0KDQoNCg0KICAgICAgcmV2ZXJzZV9pdGVyYXRvcigpIHsgfQ0KDQoN
Cg0KDQogICAgICBleHBsaWNpdA0KICAgICAgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBl
IF9feCkgOiBjdXJyZW50KF9feCkgeyB9DQoNCg0KDQoNCiAgICAgIHJldmVyc2VfaXRlcmF0b3Io
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvciYgX194KQ0KICAgICAgOiBjdXJyZW50KF9feC5jdXJyZW50
KSB7IH0NCg0KDQoNCg0KDQogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4NCiAgICAgICAg
cmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQ0KICAg
ICAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkgeyB9DQoNCg0KDQoNCiAgICAgIGl0ZXJhdG9yX3R5
cGUNCiAgICAgIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9DQoNCg0KDQoNCg0KDQog
ICAgICByZWZlcmVuY2UNCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0DQogICAgICB7DQogICAgICAg
IF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7DQogICAgICAgIHJldHVybiAqLS1fX3RtcDsNCiAg
ICAgIH0NCg0KDQoNCg0KDQoNCiAgICAgIHBvaW50ZXINCiAgICAgIG9wZXJhdG9yLT4oKSBjb25z
dCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQ0KDQoNCg0KDQoNCg0KICAgICAgcmV2ZXJzZV9p
dGVyYXRvciYNCiAgICAgIG9wZXJhdG9yKysoKQ0KICAgICAgew0KICAgICAgICAtLWN1cnJlbnQ7
DQogICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KDQoNCg0KDQoNCiAgICAgIHJldmVy
c2VfaXRlcmF0b3INCiAgICAgIG9wZXJhdG9yKysoaW50KQ0KICAgICAgew0KICAgICAgICByZXZl
cnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7DQogICAgICAgIC0tY3VycmVudDsNCiAgICAgICAg
cmV0dXJuIF9fdG1wOw0KICAgICAgfQ0KDQoNCg0KDQoNCg0KICAgICAgcmV2ZXJzZV9pdGVyYXRv
ciYNCiAgICAgIG9wZXJhdG9yLS0oKQ0KICAgICAgew0KICAgICAgICArK2N1cnJlbnQ7DQogICAg
ICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KDQoNCg0KDQoNCiAgICAgIHJldmVyc2VfaXRl
cmF0b3Igb3BlcmF0b3ItLShpbnQpDQogICAgICB7DQogICAgICAgIHJldmVyc2VfaXRlcmF0b3Ig
X190bXAgPSAqdGhpczsNCiAgICAgICAgKytjdXJyZW50Ow0KICAgICAgICByZXR1cm4gX190bXA7
DQogICAgICB9DQoNCg0KDQoNCg0KDQogICAgICByZXZlcnNlX2l0ZXJhdG9yDQogICAgICBvcGVy
YXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QNCiAgICAgIHsgcmV0dXJuIHJldmVyc2Vf
aXRlcmF0b3IoY3VycmVudCAtIF9fbik7IH0NCg0KDQoNCg0KDQoNCiAgICAgIHJldmVyc2VfaXRl
cmF0b3ImDQogICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pDQogICAgICB7DQog
ICAgICAgIGN1cnJlbnQgLT0gX19uOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoN
Cg0KDQoNCg0KDQogICAgICByZXZlcnNlX2l0ZXJhdG9yDQogICAgICBvcGVyYXRvci0oZGlmZmVy
ZW5jZV90eXBlIF9fbikgY29uc3QNCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3Vy
cmVudCArIF9fbik7IH0NCg0KDQoNCg0KDQoNCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImDQogICAg
ICBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pDQogICAgICB7DQogICAgICAgIGN1cnJl
bnQgKz0gX19uOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoNCg0KDQoNCg0KDQog
ICAgICByZWZlcmVuY2UNCiAgICAgIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29u
c3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0NCiAgICB9Ow0KIyAyNjkgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0
ZXJhdG9yPg0KICAgIGlubGluZSBib29sDQogICAgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwNCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRl
cmF0b3I8X0l0ZXJhdG9yPiYgX195KQ0KICAgIHsgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJh
c2UoKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4NCiAgICBpbmxpbmUgYm9v
bA0KICAgIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwN
CiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpDQog
ICAgeyByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSXRlcmF0b3I+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvciE9KGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAgICAgICAgY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpDQogICAgeyByZXR1cm4gIShfX3ggPT0gX195
KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4NCiAgICBpbmxpbmUgYm9vbA0K
ICAgIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwNCiAg
ICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpDQogICAg
eyByZXR1cm4gX195IDwgX194OyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPg0K
ICAgIGlubGluZSBib29sDQogICAgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj4mIF9feCwNCiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj4mIF9feSkNCiAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0NCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSXRlcmF0b3I+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj49KGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAgICAgICAgY29u
c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpDQogICAgeyByZXR1cm4gIShfX3gg
PCBfX3kpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPg0KICAgIGlubGluZSB0
eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0KICAg
IG9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwNCiAgICAg
ICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpDQogICAgeyBy
ZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNlKCk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SXRlcmF0b3I+DQogICAgaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPg0KICAgIG9w
ZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2Vf
dHlwZSBfX24sDQogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PiYgX194KQ0KICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFz
ZSgpIC0gX19uKTsgfQ0KIyAzMjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJh
dG9yLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4NCiAgICBjbGFzcyBiYWNr
X2luc2VydF9pdGVyYXRvcg0KICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90
YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+DQogICAgew0KICAgIHByb3RlY3RlZDoNCiAgICAg
IF9Db250YWluZXIqIGNvbnRhaW5lcjsNCg0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBf
Q29udGFpbmVyIGNvbnRhaW5lcl90eXBlOw0KDQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBiYWNr
X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsgfQ0K
IyAzNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMNCiAgICAg
IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWlu
ZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQ0KICAgICAgew0KICAgICAgICBjb250YWluZXIt
PnB1c2hfYmFjayhfX3ZhbHVlKTsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0KDQoN
CiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4g
KnRoaXM7IH0NCg0KDQogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9y
KysoKSB7IHJldHVybiAqdGhpczsgfQ0KDQoNCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yDQog
ICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgICB9Ow0KIyAzODQgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NvbnRhaW5lcj4NCiAgICBpbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRh
aW5lcj4NCiAgICBiYWNrX2luc2VydGVyKF9Db250YWluZXImIF9feCkNCiAgICB7IHJldHVybiBi
YWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9DQojIDM5NyAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q29udGFpbmVyPg0KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvcg0KICAgIDogcHVibGlj
IGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+DQog
ICAgew0KICAgIHByb3RlY3RlZDoNCiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsNCg0KICAg
IHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOw0KDQoN
CiAgICAgIGV4cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDog
Y29udGFpbmVyKCZfX3gpIHsgfQ0KIyA0MjIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2l0ZXJhdG9yLmgiIDMNCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYNCiAgICAgIG9wZXJh
dG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkNCiAgICAg
IHsNCiAgICAgICAgY29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOw0KICAgICAgICByZXR1
cm4gKnRoaXM7DQogICAgICB9DQoNCg0KICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJg0KICAg
ICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0NCg0KDQogICAgICBmcm9udF9pbnNlcnRf
aXRlcmF0b3ImDQogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0NCg0KDQogICAg
ICBmcm9udF9pbnNlcnRfaXRlcmF0b3INCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAq
dGhpczsgfQ0KICAgIH07DQojIDQ1MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRl
cmF0b3IuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPg0KICAgIGlubGluZSBm
cm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4NCiAgICBmcm9udF9pbnNlcnRlcihfQ29u
dGFpbmVyJiBfX3gpDQogICAgeyByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWlu
ZXI+KF9feCk7IH0NCiMgNDcwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRv
ci5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+DQogICAgY2xhc3MgaW5zZXJ0
X2l0ZXJhdG9yDQogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9p
ZCwgdm9pZCwgdm9pZCwgdm9pZD4NCiAgICB7DQogICAgcHJvdGVjdGVkOg0KICAgICAgX0NvbnRh
aW5lciogY29udGFpbmVyOw0KICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRl
cjsNCg0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90
eXBlOw0KDQoNCg0KDQoNCiAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5
cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkNCiAgICAgIDogY29udGFpbmVyKCZfX3gp
LCBpdGVyKF9faSkge30NCiMgNTEyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVy
YXRvci5oIiAzDQogICAgICBpbnNlcnRfaXRlcmF0b3ImDQogICAgICBvcGVyYXRvcj0oY29uc3Qg
dHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpDQogICAgICB7DQog
ICAgICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsNCiAgICAgICAg
KytpdGVyOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoNCg0KICAgICAgaW5zZXJ0
X2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0NCg0KDQogICAg
ICBpbnNlcnRfaXRlcmF0b3ImDQogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0N
Cg0KDQogICAgICBpbnNlcnRfaXRlcmF0b3ImDQogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1
cm4gKnRoaXM7IH0NCiAgICB9Ow0KIyA1NDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2l0ZXJhdG9yLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lciwgdHlwZW5hbWUg
X0l0ZXJhdG9yPg0KICAgIGlubGluZSBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4NCiAgICBp
bnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpDQogICAgew0KICAgICAgcmV0
dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yKF9faSkp
Ow0KICAgIH0NCn0NCg0KbmFtZXNwYWNlIF9fZ251X2N4eA0Kew0KDQoNCg0KDQoNCg0KDQogIHVz
aW5nIHN0ZDo6aXRlcmF0b3JfdHJhaXRzOw0KICB1c2luZyBzdGQ6Oml0ZXJhdG9yOw0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+DQogICAgY2xhc3Mg
X19ub3JtYWxfaXRlcmF0b3INCiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwNCiAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBl
LA0KICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
YXRvcj46OmRpZmZlcmVuY2VfdHlwZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4NCiAg
ICB7DQogICAgcHJvdGVjdGVkOg0KICAgICAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7DQoNCiAgICBw
dWJsaWM6DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+
OjpkaWZmZXJlbmNlX3R5cGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsNCiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7
DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2lu
dGVyIHBvaW50ZXI7DQoNCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9J
dGVyYXRvcigpKSB7IH0NCg0KICAgICAgZXhwbGljaXQNCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9y
KGNvbnN0IF9JdGVyYXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0NCg0KDQogICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4NCiAgICAgIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRhaW5lcj4mIF9faSkNCiAgICAgICAg
OiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQ0KDQoNCiAgICAgIHJlZmVyZW5jZQ0KICAgICAg
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cnJlbnQ7IH0NCg0KICAgICAgcG9pbnRl
cg0KICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0NCg0KICAg
ICAgX19ub3JtYWxfaXRlcmF0b3ImDQogICAgICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7
IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBfX25vcm1hbF9pdGVyYXRvcg0KICAgICAgb3BlcmF0
b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQrKyk7IH0NCg0K
DQogICAgICBfX25vcm1hbF9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9yLS0oKSB7IC0tX01fY3Vy
cmVudDsgcmV0dXJuICp0aGlzOyB9DQoNCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yDQogICAgICBv
cGVyYXRvci0tKGludCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudC0tKTsg
fQ0KDQoNCiAgICAgIHJlZmVyZW5jZQ0KICAgICAgb3BlcmF0b3JbXShjb25zdCBkaWZmZXJlbmNl
X3R5cGUmIF9fbikgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQ0KDQog
ICAgICBfX25vcm1hbF9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5j
ZV90eXBlJiBfX24pDQogICAgICB7IF9NX2N1cnJlbnQgKz0gX19uOyByZXR1cm4gKnRoaXM7IH0N
Cg0KICAgICAgX19ub3JtYWxfaXRlcmF0b3INCiAgICAgIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJl
bmNlX3R5cGUmIF9fbikgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9N
X2N1cnJlbnQgKyBfX24pOyB9DQoNCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJg0KICAgICAgb3Bl
cmF0b3ItPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikNCiAgICAgIHsgX01fY3VycmVudCAt
PSBfX247IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBfX25vcm1hbF9pdGVyYXRvcg0KICAgICAg
b3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdA0KICAgICAgeyByZXR1
cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCAtIF9fbik7IH0NCg0KICAgICAgY29uc3Qg
X0l0ZXJhdG9yJg0KICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0NCiAg
ICB9Ow0KIyA2NDUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlw
ZW5hbWUgX0NvbnRhaW5lcj4NCiAgaW5saW5lIGJvb2wNCiAgb3BlcmF0b3I9PShjb25zdCBfX25v
cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsDQogICAgICAgICAg
ICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhz
KQ0KICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KICBpbmxpbmUgYm9v
bA0KICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRh
aW5lcj4mIF9fbGhzLA0KICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQ0KICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19y
aHMuYmFzZSgpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg
X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4NCiAgaW5saW5lIGJvb2wNCiAgb3BlcmF0
b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19s
aHMsDQogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0Nv
bnRhaW5lcj4mIF9fcmhzKQ0KICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgp
OyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVy
Pg0KICBpbmxpbmUgYm9vbA0KICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQ0KICB7IHJldHVybiBfX2xo
cy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl
cmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KICBpbmxp
bmUgYm9vbA0KICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwg
X0NvbnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQ0KICB7IHJldHVybiBfX2xocy5iYXNlKCkg
PCBfX3Jocy5iYXNlKCk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVu
YW1lIF9Db250YWluZXI+DQogIGlubGluZSBib29sDQogIG9wZXJhdG9yPChjb25zdCBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywNCiAgICAgICAgICAgICBj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykNCiAg
eyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5l
cj4NCiAgaW5saW5lIGJvb2wNCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywNCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykNCiAgeyByZXR1cm4gX19s
aHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh
dG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KICBpbmxpbmUgYm9vbA0KICBvcGVyYXRvcj4oY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsDQogICAg
ICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBf
X3JocykNCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUg
X0NvbnRhaW5lcj4NCiAgaW5saW5lIGJvb2wNCiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsDQogICAgICAgICAgICAgY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQ0KICB7
IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KICBpbmxpbmUgYm9vbA0KICBv
cGVyYXRvcjw9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4m
IF9fbGhzLA0KICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwg
X0NvbnRhaW5lcj4mIF9fcmhzKQ0KICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFz
ZSgpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJh
dG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4NCiAgaW5saW5lIGJvb2wNCiAgb3BlcmF0b3I+PShj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsDQog
ICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5l
cj4mIF9fcmhzKQ0KICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KICBp
bmxpbmUgYm9vbA0KICBvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ciwgX0NvbnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQ0KICB7IHJldHVybiBfX2xocy5iYXNl
KCkgPj0gX19yaHMuYmFzZSgpOyB9DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl
cmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KICBpbmxp
bmUgdHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj46OmRp
ZmZlcmVuY2VfdHlwZQ0KICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykNCiAgeyByZXR1cm4gX19saHMu
YmFzZSgpIC0gX19yaHMuYmFzZSgpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
LCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yLCBfQ29udGFpbmVyPg0KICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwNCiAgICAgICAgICAg
IGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9faSkNCiAg
eyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPihfX2kuYmFz
ZSgpICsgX19uKTsgfQ0KfQ0KIyA3MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaXRlcmF0b3IiIDIg
Mw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9vc3RyZWFtIiAxIDMNCiMgNDQgIi91c3IvaW5j
bHVkZS9jKysvMy4yL29zdHJlYW0iIDMNCg0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3Mi
IDEgMw0KIyA0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAzDQoNCiMgMSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvaW9zZndkIiAxIDMNCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3
ZCIgMw0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJpbmdmd2QuaCIgMSAz
DQojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmluZ2Z3ZC5oIiAzDQoNCg0KDQpu
YW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4NCiAgICBzdHJ1Y3QgY2hh
cl90cmFpdHM7DQoNCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj47DQoNCg0K
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPg0KICAgIGNsYXNzIGFsbG9jYXRvcjsNCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+LA0KICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJU
PiA+DQogICAgY2xhc3MgYmFzaWNfc3RyaW5nOw0KDQogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNo
YXI+IHN0cmluZzsNCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8d2NoYXJfdD4gd3N0cmluZzsNCn0N
CiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIgMiAzDQojIDEgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAxIDMNCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvZnBvcy5oIiAzDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4v
Yml0cy9jKytpby5oIiAxIDMNCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtY3ln
d2luL2JpdHMvYysraW8uaCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDEg
Mw0KIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAzDQoNCg0KDQoNCiMgMSAiL3Vz
ci9pbmNsdWRlL3N0ZGlvLmgiIDEgMw0KIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMNCiMg
MSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRkZWYuaCIg
MSAzDQojIDM1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzDQoNCg0KIyAxICIvdXNyL2xpYi9n
Y2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMNCiMgNDQgIi91
c3IvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2luY2x1ZGUvc3RkYXJnLmgiIDMNCnR5
cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7DQojIDM4ICIvdXNyL2luY2x1
ZGUvc3RkaW8uaCIgMiAzDQojIDQ2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMw0KIyAxICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMw0KIyAyNCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o
IiAzDQp0eXBlZGVmIHNob3J0IGludCBfX2ludDE2X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IGludCBfX3VpbnQxNl90Ow0KDQoNCg0KDQoNCnR5cGVkZWYgaW50IF9faW50MzJfdDsNCnR5cGVk
ZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7DQoNCg0KDQoNCg0KDQpfX2V4dGVuc2lvbl9fIHR5
cGVkZWYgbG9uZyBsb25nIF9faW50NjRfdDsNCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIGxvbmcgX191aW50NjRfdDsNCiMgNTkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
Mw0KIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMNCiMgNjAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzDQojIDEgIi91c3Iv
aW5jbHVkZS9tYWNoaW5lL3R5cGVzLmgiIDEgMw0KIyAzNiAiL3Vzci9pbmNsdWRlL21hY2hpbmUv
dHlwZXMuaCIgMw0KdHlwZWRlZiBsb25nIGludCBfX29mZl90Ow0KdHlwZWRlZiBpbnQgX19waWRf
dDsNCg0KX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19sb2ZmX3Q7DQojIDYx
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMw0KIyA4MiAiL3Vzci9pbmNsdWRlL3N5cy90
eXBlcy5oIiAzDQp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdV9jaGFyOw0KdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCB1X3Nob3J0Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ7DQp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgdV9sb25nOw0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2hvcnQ7
DQp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50Ow0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBsb25n
IGNsb2NrX3Q7DQoNCg0KDQoNCnR5cGVkZWYgbG9uZyB0aW1lX3Q7DQoNCg0KDQoNCnN0cnVjdCB0
aW1lc3BlYyB7DQogIHRpbWVfdCB0dl9zZWM7DQogIGxvbmcgdHZfbnNlYzsNCn07DQoNCnN0cnVj
dCBpdGltZXJzcGVjIHsNCiAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOw0KICBzdHJ1Y3Qg
dGltZXNwZWMgaXRfdmFsdWU7DQp9Ow0KDQoNCnR5cGVkZWYgbG9uZyBkYWRkcl90Ow0KdHlwZWRl
ZiBjaGFyICogY2FkZHJfdDsNCg0KDQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW5vX3Q7DQojIDEz
MCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzDQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdm1f
b2Zmc2V0X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdm1fc2l6ZV90Ow0KDQoNCg0KdHlwZWRl
ZiBjaGFyIGludDhfdDsNCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1X2ludDhfdDsNCnR5cGVkZWYg
c2hvcnQgaW50MTZfdDsNCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9pbnQxNl90Ow0KdHlwZWRl
ZiBpbnQgaW50MzJfdDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdDsNCnR5cGVkZWYg
bG9uZyBsb25nIGludDY0X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1X2ludDY0X3Q7
DQp0eXBlZGVmIGludDMyX3QgcmVnaXN0ZXJfdDsNCiMgMTY5ICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMNCnR5cGVkZWYgaW50IHBpZF90Ow0KdHlwZWRlZiBsb25nIGtleV90Ow0KdHlwZWRl
ZiBfc3NpemVfdCBzc2l6ZV90Ow0KDQoNCnR5cGVkZWYgY2hhciAqIGFkZHJfdDsNCnR5cGVkZWYg
aW50IG1vZGVfdDsNCiMgMTg4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMNCnR5cGVkZWYg
dW5zaWduZWQgc2hvcnQgbmxpbmtfdDsNCiMgMjEwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDMNCnR5cGVkZWYgbG9uZyBmZF9tYXNrOw0KDQoNCg0KDQoNCg0KDQp0eXBlZGVmIHN0cnVjdCBf
dHlwZXNfZmRfc2V0IHsNCiAgICAgICAgZmRfbWFzayBmZHNfYml0c1soKCg2NCkrKCgoc2l6ZW9m
IChmZF9tYXNrKSAqIDgpKS0xKSkvKChzaXplb2YgKGZkX21hc2spICogOCkpKV07DQp9IF90eXBl
c19mZF9zZXQ7DQojIDI0NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzDQp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgY2xvY2tpZF90Ow0KDQoNCg0KDQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdGlt
ZXJfdDsNCg0KDQoNCg0KdHlwZWRlZiBsb25nIHVzZWNvbmRzX3Q7DQoNCg0KIyAxICIvdXNyL2lu
Y2x1ZGUvc3lzL2ZlYXR1cmVzLmgiIDEgMw0KIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJl
cy5oIiAzDQpleHRlcm4gIkMiIHsNCiMgOTMgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZXMuaCIg
Mw0KfQ0KIyAyNjAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzDQojIDM2NCAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzDQojIDEgIi91c3IvaW5jbHVkZS9jeWd3aW4vdHlwZXMuaCIg
MSAzDQojIDEzICIvdXNyL2luY2x1ZGUvY3lnd2luL3R5cGVzLmgiIDMNCmV4dGVybiAiQyINCnsN
Cg0KDQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMw0KIyAyMSAi
L3Vzci9pbmNsdWRlL2N5Z3dpbi90eXBlcy5oIiAyIDMNCg0KdHlwZWRlZiBzdHJ1Y3QgdGltZXNw
ZWMgdGltZXNwZWNfdCwgdGltZXN0cnVjX3Q7DQoNCnR5cGVkZWYgbG9uZyBfX29mZjMyX3Q7DQp0
eXBlZGVmIGxvbmcgbG9uZyBfX29mZjY0X3Q7DQoNCg0KDQp0eXBlZGVmIF9fb2ZmMzJfdCBvZmZf
dDsNCg0KDQp0eXBlZGVmIHNob3J0IF9fZGV2MTZfdDsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBf
X2RldjMyX3Q7DQoNCg0KDQp0eXBlZGVmIF9fZGV2MTZfdCBkZXZfdDsNCg0KDQp0eXBlZGVmIGxv
bmcgYmxrc2l6ZV90Ow0KDQp0eXBlZGVmIGxvbmcgX19ibGtjbnQzMl90Ow0KdHlwZWRlZiBsb25n
IGxvbmcgX19ibGtjbnQ2NF90Ow0KDQoNCg0KdHlwZWRlZiBfX2Jsa2NudDMyX3QgYmxrY250X3Q7
DQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3VpZDE2X3Q7DQp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IF9fZ2lkMTZfdDsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VpZDMyX3Q7DQp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgX19naWQzMl90Ow0KDQoNCg0KDQp0eXBlZGVmIF9fdWlkMTZfdCB1
aWRfdDsNCnR5cGVkZWYgX19naWQxNl90IGdpZF90Ow0KDQoNCg0KDQp0eXBlZGVmIHN0cnVjdCBf
X3B0aHJlYWRfdCB7Y2hhciBfX2R1bW15O30gKnB0aHJlYWRfdDsNCnR5cGVkZWYgc3RydWN0IF9f
cHRocmVhZF9tdXRleF90IHtjaGFyIF9fZHVtbXk7fSAqcHRocmVhZF9tdXRleF90Ow0KDQp0eXBl
ZGVmIHN0cnVjdCBfX3B0aHJlYWRfa2V5X3Qge2NoYXIgX19kdW1teTt9ICpwdGhyZWFkX2tleV90
Ow0KdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfdCB7Y2hhciBfX2R1bW15O30gKnB0aHJl
YWRfYXR0cl90Ow0KdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX211dGV4YXR0cl90IHtjaGFyIF9f
ZHVtbXk7fSAqcHRocmVhZF9tdXRleGF0dHJfdDsNCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9j
b25kYXR0cl90IHtjaGFyIF9fZHVtbXk7fSAqcHRocmVhZF9jb25kYXR0cl90Ow0KdHlwZWRlZiBz
dHJ1Y3QgX19wdGhyZWFkX2NvbmRfdCB7Y2hhciBfX2R1bW15O30gKnB0aHJlYWRfY29uZF90Ow0K
DQoNCnR5cGVkZWYgc3RydWN0DQp7DQogIHB0aHJlYWRfbXV0ZXhfdCBtdXRleDsNCiAgaW50IHN0
YXRlOw0KfQ0KcHRocmVhZF9vbmNlX3Q7DQp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfcndsb2Nr
X3Qge2NoYXIgX19kdW1teTt9ICpwdGhyZWFkX3J3bG9ja190Ow0KdHlwZWRlZiBzdHJ1Y3QgX19w
dGhyZWFkX3J3bG9ja2F0dHJfdCB7Y2hhciBfX2R1bW15O30gKnB0aHJlYWRfcndsb2NrYXR0cl90
Ow0KIyAxMDQgIi91c3IvaW5jbHVkZS9jeWd3aW4vdHlwZXMuaCIgMw0KfQ0KIyAzNjUgIi91c3Iv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzDQojIDQ3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAz
DQoNCmV4dGVybiAiQyIgew0KDQp0eXBlZGVmIF9mcG9zX3QgZnBvc190Ow0KdHlwZWRlZiBfX0ZJ
TEUgRklMRTsNCg0KDQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RkaW8uaCIgMSAzDQoj
IDU4ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzDQojIDE2MiAiL3Vzci9pbmNsdWRlL3N0ZGlv
LmgiIDMNCkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0bXBmaWxlICh2b2lkKTsN
CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0bXBuYW0gKGNoYXIgKik7DQppbnQg
X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmNsb3NlIChGSUxFICopOw0KaW50IF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIGZmbHVzaCAoRklMRSAqKTsNCkZJTEUgKiBfX2F0dHJpYnV0ZV9f
KChfX2NkZWNsX18pKSBmcmVvcGVuIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgRklMRSAq
KTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0YnVmIChGSUxFICosIGNoYXIg
Kik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0dmJ1ZiAoRklMRSAqLCBjaGFy
ICosIGludCwgc2l6ZV90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmcHJpbnRm
IChGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSBmc2NhbmYgKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOw0KaW50IF9fYXR0cmlidXRl
X18oKF9fY2RlY2xfXykpIHByaW50ZiAoY29uc3QgY2hhciAqLCAuLi4pOw0KaW50IF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIHNjYW5mIChjb25zdCBjaGFyICosIC4uLik7DQppbnQgX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgc3NjYW5mIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg
Li4uKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB2ZnByaW50ZiAoRklMRSAqLCBj
b25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSB2cHJpbnRmIChjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsNCmludCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSB2c3ByaW50ZiAoY2hhciAqLCBjb25zdCBjaGFyICosIF9fZ251
Y192YV9saXN0KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmZ2V0YyAoRklMRSAq
KTsNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmZ2V0cyAoY2hhciAqLCBpbnQs
IEZJTEUgKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnB1dGMgKGludCwgRklM
RSAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmcHV0cyAoY29uc3QgY2hhciAq
LCBGSUxFICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldGMgKEZJTEUgKik7
DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0Y2hhciAodm9pZCk7DQpjaGFyICog
X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0cyAoY2hhciAqKTsNCmludCBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBwdXRjIChpbnQsIEZJTEUgKik7DQppbnQgX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgcHV0Y2hhciAoaW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBwdXRzIChjb25zdCBjaGFyICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHVu
Z2V0YyAoaW50LCBGSUxFICopOw0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZy
ZWFkICh2b2lkICosIHNpemVfdCBfc2l6ZSwgc2l6ZV90IF9uLCBGSUxFICopOw0Kc2l6ZV90IF9f
YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZ3cml0ZSAoY29uc3Qgdm9pZCAqICwgc2l6ZV90IF9z
aXplLCBzaXplX3QgX24sIEZJTEUgKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
ZmdldHBvcyAoRklMRSAqLCBmcG9zX3QgKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgZnNlZWsgKEZJTEUgKiwgbG9uZywgaW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSBmc2V0cG9zIChGSUxFICosIGNvbnN0IGZwb3NfdCAqKTsNCmxvbmcgX19hdHRyaWJ1dGVf
XygoX19jZGVjbF9fKSkgZnRlbGwgKCBGSUxFICopOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Nk
ZWNsX18pKSByZXdpbmQgKEZJTEUgKik7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp
IGNsZWFyZXJyIChGSUxFICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZlb2Yg
KEZJTEUgKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmVycm9yIChGSUxFICop
Ow0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwZXJyb3IgKGNvbnN0IGNoYXIgKik7
DQoNCkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmb3BlbiAoY29uc3QgY2hhciAq
X25hbWUsIGNvbnN0IGNoYXIgKl90eXBlKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBzcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCmludCBfX2F0dHJpYnV0ZV9f
KChfX2NkZWNsX18pKSByZW1vdmUgKGNvbnN0IGNoYXIgKik7DQppbnQgX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgcmVuYW1lIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQoNCg0KaW50
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGFzcHJpbnRmIChjaGFyICoqLCBjb25zdCBjaGFy
ICosIC4uLik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnNlZWtvIChGSUxFICos
IG9mZl90LCBpbnQpOw0Kb2ZmX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnRlbGxvICgg
RklMRSAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB2ZmlwcmludGYgKEZJTEUg
KiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19j
ZGVjbF9fKSkgaXByaW50ZiAoY29uc3QgY2hhciAqLCAuLi4pOw0KaW50IF9fYXR0cmlidXRlX18o
KF9fY2RlY2xfXykpIGZpcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCmludCBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzaXByaW50ZiAoY2hhciAqLCBjb25zdCBjaGFyICos
IC4uLik7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdGVtcG5hbSAoY29uc3Qg
Y2hhciAqLCBjb25zdCBjaGFyICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHZh
c3ByaW50ZiAoY2hhciAqKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7DQppbnQgX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdnNucHJpbnRmIChjaGFyICosIHNpemVfdCwgY29uc3Qg
Y2hhciAqLCBfX2dudWNfdmFfbGlzdCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
dmZzY2FuZiAoRklMRSAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsNCmludCBfX2F0
dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB2c2NhbmYgKGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xp
c3QpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHZzc2NhbmYgKGNvbnN0IGNoYXIg
KiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7DQoNCmludCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBmY2xvc2VhbGwgKHZvaWQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf
XykpIHNucHJpbnRmIChjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOw0KIyAyMzEg
Ii91c3IvaW5jbHVkZS9zdGRpby5oIiAzDQpGSUxFICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgZmRvcGVuIChpbnQsIGNvbnN0IGNoYXIgKik7DQoNCmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk
ZWNsX18pKSBmaWxlbm8gKEZJTEUgKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
Z2V0dyAoRklMRSAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwY2xvc2UgKEZJ
TEUgKik7DQpGSUxFICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcG9wZW4gKGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwdXR3
IChpbnQsIEZJTEUgKik7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldGJ1ZmZl
ciAoRklMRSAqLCBjaGFyICosIGludCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
c2V0bGluZWJ1ZiAoRklMRSAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRj
X3VubG9ja2VkIChGSUxFICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldGNo
YXJfdW5sb2NrZWQgKHZvaWQpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmbG9j
a2ZpbGUgKEZJTEUgKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnRyeWxvY2tm
aWxlIChGSUxFICopOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmdW5sb2NrZmls
ZSAoRklMRSAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBwdXRjX3VubG9ja2Vk
IChpbnQsIEZJTEUgKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcHV0Y2hhcl91
bmxvY2tlZCAoaW50KTsNCg0KDQoNCg0KDQoNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBfYXNwcmludGZfciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICoqLCBjb25zdCBjaGFyICosIC4u
Lik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2ZjbG9zZWFsbF9yIChzdHJ1Y3Qg
X3JlZW50ICopOw0KRklMRSAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9mZG9wZW5fciAo
c3RydWN0IF9yZWVudCAqLCBpbnQsIGNvbnN0IGNoYXIgKik7DQpGSUxFICogX19hdHRyaWJ1dGVf
XygoX19jZGVjbF9fKSkgX2ZvcGVuX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBj
b25zdCBjaGFyICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9mc2NhbmZfciAo
c3RydWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCmludCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBfZ2V0Y2hhcl9yIChzdHJ1Y3QgX3JlZW50ICopOw0KY2hhciAq
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9nZXRzX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hh
ciAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfaXByaW50Zl9yIChzdHJ1Y3Qg
X3JlZW50ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSBfbWtzdGVtcF9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKik7DQpjaGFyICogX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgX21rdGVtcF9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKik7
DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9wZXJyb3JfciAoc3RydWN0IF9yZWVu
dCAqLCBjb25zdCBjaGFyICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9wcmlu
dGZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIC4uLik7DQppbnQgX19hdHRyaWJ1
dGVfXygoX19jZGVjbF9fKSkgX3B1dGNoYXJfciAoc3RydWN0IF9yZWVudCAqLCBpbnQpOw0KaW50
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9wdXRzX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29u
c3QgY2hhciAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfcmVtb3ZlX3IgKHN0
cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSBfcmVuYW1lX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX29sZCwgY29uc3Qg
Y2hhciAqX25ldyk7DQoNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc2NhbmZfciAo
c3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIC4uLik7DQppbnQgX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgX3NwcmludGZfciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICosIGNvbnN0IGNo
YXIgKiwgLi4uKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc25wcmludGZfciAo
c3RydWN0IF9yZWVudCAqLCBjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOw0KaW50
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zc2NhbmZfciAoc3RydWN0IF9yZWVudCAqLCBj
b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBfdGVtcG5hbV9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKiwgY29u
c3QgY2hhciAqKTsNCkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdG1wZmlsZV9y
IChzdHJ1Y3QgX3JlZW50ICopOw0KY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF90
bXBuYW1fciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICopOw0KaW50IF9fYXR0cmlidXRlX18oKF9f
Y2RlY2xfXykpIF92YXNwcmludGZfciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICoqLCBjb25zdCBj
aGFyICosIF9fZ251Y192YV9saXN0KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBf
dmZwcmludGZfciAoc3RydWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgX19nbnVj
X3ZhX2xpc3QpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF92cHJpbnRmX3IgKHN0
cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7DQppbnQgX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgX3ZzcHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAq
LCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk
ZWNsX18pKSBfdnNucHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqLCBzaXplX3QsIGNv
bnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf
XykpIF92ZnNjYW5mX3IgKHN0cnVjdCBfcmVlbnQgKiwgRklMRSAqLCBjb25zdCBjaGFyICosIF9f
Z251Y192YV9saXN0KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdnNjYW5mX3Ig
KHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7DQppbnQgX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3Zzc2NhbmZfciAoc3RydWN0IF9yZWVudCAqLCBjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOw0KDQpzc2l6ZV90IF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIF9fZ2V0ZGVsaW0gKGNoYXIgKiosIHNpemVfdCAqLCBpbnQs
IEZJTEUgKik7DQpzc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9fZ2V0bGluZSAo
Y2hhciAqKiwgc2l6ZV90ICosIEZJTEUgKik7DQojIDMwOSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgi
IDMNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfX3NyZ2V0IChGSUxFICopOw0KaW50
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9fc3didWYgKGludCwgRklMRSAqKTsNCg0KDQoN
Cg0KDQoNCkZJTEUgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZ1bm9wZW4gKGNvbnN0IHZv
aWQgKiBfY29va2llLCBpbnQgKCpyZWFkZm4pKHZvaWQgKiBfY29va2llLCBjaGFyICpfYnVmLCBp
bnQgX24pLCBpbnQgKCp3cml0ZWZuKSh2b2lkICogX2Nvb2tpZSwgY29uc3QgY2hhciAqX2J1Ziwg
aW50IF9uKSwgZnBvc190ICgqc2Vla2ZuKSh2b2lkICogX2Nvb2tpZSwgZnBvc190IF9vZmYsIGlu
dCBfd2hlbmNlKSwgaW50ICgqY2xvc2Vmbikodm9pZCAqIF9jb29raWUpKTsNCiMgMzM0ICIvdXNy
L2luY2x1ZGUvc3RkaW8uaCIgMw0Kc3RhdGljIF9faW5saW5lX18gaW50IF9fc2dldGMoRklMRSAq
X19wKQ0KICB7DQogICAgaW50IF9fYyA9ICgtLShfX3ApLT5fciA8IDAgPyBfX3NyZ2V0KF9fcCkg
OiAoaW50KSgqKF9fcCktPl9wKyspKTsNCiAgICBpZiAoKF9fcC0+X2ZsYWdzICYgMHg0MDAwKSAm
JiAoX19jID09ICdccicpKQ0KICAgICAgew0KICAgICAgaW50IF9fYzIgPSAoLS0oX19wKS0+X3Ig
PCAwID8gX19zcmdldChfX3ApIDogKGludCkoKihfX3ApLT5fcCsrKSk7DQogICAgICBpZiAoX19j
MiA9PSAnXG4nKQ0KICAgICAgICBfX2MgPSBfX2MyOw0KICAgICAgZWxzZQ0KICAgICAgICB1bmdl
dGMoX19jMiwgX19wKTsNCiAgICAgIH0NCiAgICByZXR1cm4gX19jOw0KICB9DQojIDQxNiAiL3Vz
ci9pbmNsdWRlL3N0ZGlvLmgiIDMNCn0NCiMgNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRp
byIgMiAzDQojIDk3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDMNCm5hbWVzcGFjZSBz
dGQNCnsNCiAgdXNpbmcgOjpGSUxFOw0KICB1c2luZyA6OmZwb3NfdDsNCg0KICB1c2luZyA6OmNs
ZWFyZXJyOw0KICB1c2luZyA6OmZjbG9zZTsNCiAgdXNpbmcgOjpmZW9mOw0KICB1c2luZyA6OmZl
cnJvcjsNCiAgdXNpbmcgOjpmZmx1c2g7DQogIHVzaW5nIDo6ZmdldGM7DQogIHVzaW5nIDo6Zmdl
dHBvczsNCiAgdXNpbmcgOjpmZ2V0czsNCiAgdXNpbmcgOjpmb3BlbjsNCiAgdXNpbmcgOjpmcHJp
bnRmOw0KICB1c2luZyA6OmZwdXRjOw0KICB1c2luZyA6OmZwdXRzOw0KICB1c2luZyA6OmZyZWFk
Ow0KICB1c2luZyA6OmZyZW9wZW47DQogIHVzaW5nIDo6ZnNjYW5mOw0KICB1c2luZyA6OmZzZWVr
Ow0KICB1c2luZyA6OmZzZXRwb3M7DQogIHVzaW5nIDo6ZnRlbGw7DQogIHVzaW5nIDo6ZndyaXRl
Ow0KICB1c2luZyA6OmdldGM7DQogIHVzaW5nIDo6Z2V0Y2hhcjsNCiAgdXNpbmcgOjpnZXRzOw0K
ICB1c2luZyA6OnBlcnJvcjsNCiAgdXNpbmcgOjpwcmludGY7DQogIHVzaW5nIDo6cHV0YzsNCiAg
dXNpbmcgOjpwdXRjaGFyOw0KICB1c2luZyA6OnB1dHM7DQogIHVzaW5nIDo6cmVtb3ZlOw0KICB1
c2luZyA6OnJlbmFtZTsNCiAgdXNpbmcgOjpyZXdpbmQ7DQogIHVzaW5nIDo6c2NhbmY7DQogIHVz
aW5nIDo6c2V0YnVmOw0KICB1c2luZyA6OnNldHZidWY7DQogIHVzaW5nIDo6c3ByaW50ZjsNCiAg
dXNpbmcgOjpzc2NhbmY7DQogIHVzaW5nIDo6dG1wZmlsZTsNCiAgdXNpbmcgOjp0bXBuYW07DQog
IHVzaW5nIDo6dW5nZXRjOw0KICB1c2luZyA6OnZmcHJpbnRmOw0KICB1c2luZyA6OnZwcmludGY7
DQogIHVzaW5nIDo6dnNwcmludGY7DQp9DQojIDM2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2
LXBjLWN5Z3dpbi9iaXRzL2MrK2lvLmgiIDIgMw0KDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2k2ODYtcGMtY3lnd2luL2JpdHMvZ3Roci5oIiAxIDMNCiMgMTAyICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRzL2d0aHIuaCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRzL2d0aHItc2luZ2xlLmgiIDEgMw0KIyAzNCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4vYml0cy9ndGhyLXNpbmdsZS5oIiAzDQp0eXBl
ZGVmIGludCBfX2d0aHJlYWRfbXV0ZXhfdDsNCiMgMjExICIvdXNyL2luY2x1ZGUvYysrLzMuMi9p
Njg2LXBjLWN5Z3dpbi9iaXRzL2d0aHItc2luZ2xlLmgiIDMNCnN0YXRpYyBpbmxpbmUgaW50DQpf
X2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpDQp7DQogIHJldHVybiAwOw0KfQ0KDQpzdGF0aWMgaW5s
aW5lIGludA0KX19ndGhyZWFkX211dGV4X2xvY2sgKF9fZ3RocmVhZF9tdXRleF90ICogKQ0Kew0K
ICByZXR1cm4gMDsNCn0NCg0Kc3RhdGljIGlubGluZSBpbnQNCl9fZ3RocmVhZF9tdXRleF90cnls
b2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqICkNCnsNCiAgcmV0dXJuIDA7DQp9DQoNCnN0YXRpYyBp
bmxpbmUgaW50DQpfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqICkN
CnsNCiAgcmV0dXJuIDA7DQp9DQojIDEwMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1j
eWd3aW4vYml0cy9ndGhyLmgiIDIgMw0KIyAzOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1w
Yy1jeWd3aW4vYml0cy9jKytpby5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogIHR5cGVk
ZWYgbG9uZyBzdHJlYW1vZmY7DQogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7DQoNCg0K
DQogIHR5cGVkZWYgZnBvc190IF9fY19zdHJlYW1wb3M7DQoNCiAgdHlwZWRlZiBfX2d0aHJlYWRf
bXV0ZXhfdCBfX2NfbG9jazsNCg0KDQogIHR5cGVkZWYgRklMRSBfX2NfZmlsZTsNCg0KDQogIHN0
cnVjdCBfX2lvc19mbGFncw0KICB7DQogICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOw0KDQog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYm9vbGFscGhhID0gMHgwMDAxOw0KICAgIHN0
YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsNCiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19maXhlZCA9IDB4MDAwNDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19oZXggPSAweDAwMDg7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50ZXJu
YWwgPSAweDAwMTA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfbGVmdCA9IDB4MDAy
MDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vY3QgPSAweDAwNDA7DQogICAgc3Rh
dGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAwODA7DQogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsNCiAgICBzdGF0aWMgY29uc3QgX19p
bnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19zaG93cG9pbnQgPSAweDA0MDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
c2hvd3BvcyA9IDB4MDgwMDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19za2lwd3Mg
PSAweDEwMDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAw
MDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191cHBlcmNhc2UgPSAweDQwMDA7DQog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYWRqdXN0ZmllbGQgPSAweDAwMjAgfCAweDAw
ODAgfCAweDAwMTA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0g
MHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7DQoNCg0KICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
ZW9mYml0ID0gMHgwMjsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0ID0g
MHgwNDsNCg0KDQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsNCiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hdGUgPSAweDAyOw0KICAgIHN0YXRpYyBjb25z
dCBfX2ludF90eXBlIF9TX2JpbiA9IDB4MDQ7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfaW4gPSAweDA4Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9IDB4MTA7
DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOw0KICB9Ow0KfQ0K
IyA0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mcG9zLmgiIDIgMw0KIyAxICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9jd2NoYXIiIDEgMw0KIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3dj
aGFyIiAzDQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N0aW1lIiAxIDMNCiMgNDgg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2N0aW1lIiAzDQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDEgMw0KIyAxOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMw0KIyAxICIvdXNyL2luY2x1
ZGUvbWFjaGluZS90aW1lLmgiIDEgMw0KIyAxOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzDQoj
IDI3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzDQojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1w
Yy1jeWd3aW4vMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMw0KIyAyOCAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMiAzDQoNCg0KDQpleHRlcm4gIkMiIHsNCg0Kc3RydWN0IHRtDQp7DQogIGludCB0bV9z
ZWM7DQogIGludCB0bV9taW47DQogIGludCB0bV9ob3VyOw0KICBpbnQgdG1fbWRheTsNCiAgaW50
IHRtX21vbjsNCiAgaW50IHRtX3llYXI7DQogIGludCB0bV93ZGF5Ow0KICBpbnQgdG1feWRheTsN
CiAgaW50IHRtX2lzZHN0Ow0KfTsNCg0KY2xvY2tfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBjbG9jayAodm9pZCk7DQpkb3VibGUgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZGlmZnRp
bWUgKHRpbWVfdCBfdGltZTIsIHRpbWVfdCBfdGltZTEpOw0KdGltZV90IF9fYXR0cmlidXRlX18o
KF9fY2RlY2xfXykpIG1rdGltZSAoc3RydWN0IHRtICpfdGltZXB0cik7DQp0aW1lX3QgX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgdGltZSAodGltZV90ICpfdGltZXIpOw0KDQpjaGFyICpfX2F0
dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhc2N0aW1lIChjb25zdCBzdHJ1Y3QgdG0gKl90YmxvY2sp
Ow0KY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgY3RpbWUgKGNvbnN0IHRpbWVfdCAq
X3RpbWUpOw0Kc3RydWN0IHRtICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnbXRpbWUgKGNv
bnN0IHRpbWVfdCAqX3RpbWVyKTsNCnN0cnVjdCB0bSAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgbG9jYWx0aW1lIChjb25zdCB0aW1lX3QgKl90aW1lcik7DQoNCnNpemVfdCBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBzdHJmdGltZSAoY2hhciAqX3MsIHNpemVfdCBfbWF4c2l6ZSwgY29u
c3QgY2hhciAqX2ZtdCwgY29uc3Qgc3RydWN0IHRtICpfdCk7DQoNCmNoYXIgKl9fYXR0cmlidXRl
X18oKF9fY2RlY2xfXykpIGFzY3RpbWVfciAoY29uc3Qgc3RydWN0IHRtICosIGNoYXIgKik7DQpj
aGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBjdGltZV9yIChjb25zdCB0aW1lX3QgKiwg
Y2hhciAqKTsNCnN0cnVjdCB0bSAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ210aW1lX3Ig
KGNvbnN0IHRpbWVfdCAqLCBzdHJ1Y3QgdG0gKik7DQpzdHJ1Y3QgdG0gKl9fYXR0cmlidXRlX18o
KF9fY2RlY2xfXykpIGxvY2FsdGltZV9yIChjb25zdCB0aW1lX3QgKiwgc3RydWN0IHRtICopOw0K
DQp9DQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0KDQpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSBzdHJwdGltZSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHN0cnVjdCB0bSAqKTsN
CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdHpzZXQgKHZvaWQpOw0Kdm9pZCBfX2F0
dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdHpzZXRfciAoc3RydWN0IF9yZWVudCAqKTsNCiMgOTgg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMNCmV4dGVybiBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQp
KSB0aW1lX3QgX3RpbWV6b25lOw0KZXh0ZXJuIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIGlu
dCBfZGF5bGlnaHQ7DQpleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgY2hhciAqX3R6
bmFtZVsyXTsNCiMgMTE3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzDQpjaGFyICpfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSB0aW1lem9uZSAodm9pZCk7DQoNCg0KDQoNCg0KfQ0KIyAxNjkgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDMNCmV4dGVybiAiQyIgew0KDQppbnQgX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgbmFub3NsZWVwIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnJxdHAsIHN0cnVj
dCB0aW1lc3BlYyAqcm10cCk7DQoNCn0NCg0KDQoNCg0KDQpleHRlcm4gIkMiIHsNCiMgMjQ3ICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAzDQp9DQojIDUyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jdGlt
ZSIgMiAzDQojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jdGltZSIgMw0KbmFtZXNwYWNlIHN0
ZA0Kew0KICB1c2luZyA6OmNsb2NrX3Q7DQogIHVzaW5nIDo6dGltZV90Ow0KICB1c2luZyA6OnRt
Ow0KDQogIHVzaW5nIDo6Y2xvY2s7DQogIHVzaW5nIDo6ZGlmZnRpbWU7DQogIHVzaW5nIDo6bWt0
aW1lOw0KICB1c2luZyA6OnRpbWU7DQogIHVzaW5nIDo6YXNjdGltZTsNCiAgdXNpbmcgOjpjdGlt
ZTsNCiAgdXNpbmcgOjpnbXRpbWU7DQogIHVzaW5nIDo6bG9jYWx0aW1lOw0KICB1c2luZyA6OnN0
cmZ0aW1lOw0KfQ0KIyA1MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAyIDMNCg0KDQoj
IDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMNCiMgOSAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDMNCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRk
ZWYuaCIgMSAzDQojIDEwICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzDQojIDM0ICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMw0KZXh0ZXJuICJDIiB7DQoNCg0KDQp0eXBlZGVmIF9tYnN0YXRlX3Qg
bWJzdGF0ZV90Ow0KDQoNCndpbnRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBidG93YyAo
aW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3RvYiAod2ludF90KTsNCnNp
emVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtYnJsZW4gKGNvbnN0IGNoYXIgKiAsIHNp
emVfdCwgbWJzdGF0ZV90ICopOw0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1i
cnRvd2MgKHdjaGFyX3QgKiAsIGNvbnN0IGNoYXIgKiAsIHNpemVfdCwgbWJzdGF0ZV90ICopOw0K
aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1ic2luaXQgKGNvbnN0IG1ic3RhdGVfdCAq
KTsNCnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtYnNydG93Y3MgKHdjaGFyX3Qg
KiAsIGNvbnN0IGNoYXIgKiogLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsNCnNpemVfdCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSB3Y3J0b21iIChjaGFyICogLCB3Y2hhcl90LCBtYnN0YXRlX3Qg
Kik7DQpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzcnRvbWJzIChjaGFyICog
LCBjb25zdCB3Y2hhcl90ICoqICwgc2l6ZV90LCBtYnN0YXRlX3QgKik7DQp3Y2hhcl90ICpfX2F0
dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NjYXQgKHdjaGFyX3QgKiAsIGNvbnN0IHdjaGFyX3Qg
Kik7DQp3Y2hhcl90ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NjaHIgKGNvbnN0IHdj
aGFyX3QgKiwgd2NoYXJfdCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzY21w
IChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7DQp3Y2hhcl90ICpfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSB3Y3NjcHkgKHdjaGFyX3QgKiAsIGNvbnN0IHdjaGFyX3QgKik7DQpz
aXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzY3NwbiAoY29uc3Qgd2NoYXJfdCAq
LCBjb25zdCB3Y2hhcl90ICopOw0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdj
c2xjYXQgKHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOw0Kc2l6ZV90IF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIHdjc2xjcHkgKHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAq
LCBzaXplX3QpOw0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjc2xlbiAoY29u
c3Qgd2NoYXJfdCAqKTsNCndjaGFyX3QgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjc25j
YXQgKHdjaGFyX3QgKiAsIGNvbnN0IHdjaGFyX3QgKiAsIHNpemVfdCk7DQppbnQgX19hdHRyaWJ1
dGVfXygoX19jZGVjbF9fKSkgd2NzbmNtcCAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90
ICosIHNpemVfdCk7DQp3Y2hhcl90ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3NuY3B5
ICh3Y2hhcl90ICogLCBjb25zdCB3Y2hhcl90ICogLCBzaXplX3QpOw0Kd2NoYXJfdCAqX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzcGJyayAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hh
cl90ICopOw0Kd2NoYXJfdCAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2NzcmNociAoY29u
c3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsNCnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSB3Y3NzcG4gKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsNCndjaGFyX3QgKl9f
YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjc3N0ciAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3
Y2hhcl90ICopOw0Kd2NoYXJfdCAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd21lbWNociAo
Y29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90LCBzaXplX3QpOw0KaW50IF9fYXR0cmlidXRlX18oKF9f
Y2RlY2xfXykpIHdtZW1jbXAgKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXpl
X3QpOw0Kd2NoYXJfdCAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd21lbWNweSAod2NoYXJf
dCAqICwgY29uc3Qgd2NoYXJfdCAqICwgc2l6ZV90KTsNCndjaGFyX3QgKl9fYXR0cmlidXRlX18o
KF9fY2RlY2xfXykpIHdtZW1tb3ZlICh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90
KTsNCndjaGFyX3QgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdtZW1zZXQgKHdjaGFyX3Qg
Kiwgd2NoYXJfdCwgc2l6ZV90KTsNCg0KfQ0KIyA1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3dj
aGFyIiAyIDMNCiMgNjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N3Y2hhciIgMw0KbmFtZXNwYWNl
IHN0ZA0Kew0KICB1c2luZyA6Om1ic3RhdGVfdDsNCn0NCiMgNDYgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvZnBvcy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfU3RhdGVUPg0KICAgIGNsYXNzIGZwb3MNCiAgICB7DQogICAgcHVibGljOg0K
DQogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90eXBlOw0KDQogICAgcHJpdmF0ZToNCiAg
ICAgIHN0cmVhbW9mZiBfTV9vZmY7DQogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7DQoNCiAgICBw
dWJsaWM6DQogICAgICBfX3N0YXRlX3R5cGUNCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
X01fc3Q7IH0NCg0KICAgICAgdm9pZA0KICAgICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3QpIHsg
X01fc3QgPSBfX3N0OyB9DQoNCg0KDQogICAgICBmcG9zKCk6IF9NX29mZihzdHJlYW1vZmYoKSks
IF9NX3N0KF9fc3RhdGVfdHlwZSgpKSB7IH0NCg0KICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYs
IF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpDQogICAgICA6IF9NX29mZihfX29m
ZiksIF9NX3N0KF9fc3QpIHsgfQ0KDQogICAgICBvcGVyYXRvciBzdHJlYW1vZmYoKSBjb25zdCB7
IHJldHVybiBfTV9vZmY7IH0NCg0KICAgICAgZnBvcyYNCiAgICAgIG9wZXJhdG9yKz0oc3RyZWFt
b2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9DQoNCiAgICAgIGZw
b3MmDQogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0gX19vZmY7
IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBmcG9zDQogICAgICBvcGVyYXRvcisoc3RyZWFtb2Zm
IF9fb2ZmKQ0KICAgICAgew0KICAgICAgICBmcG9zIF9fdCgqdGhpcyk7DQogICAgICAgIF9fdCAr
PSBfX29mZjsNCiAgICAgICAgcmV0dXJuIF9fdDsNCiAgICAgIH0NCg0KICAgICAgZnBvcw0KICAg
ICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikNCiAgICAgIHsNCiAgICAgICAgZnBvcyBfX3Qo
KnRoaXMpOw0KICAgICAgICBfX3QgLT0gX19vZmY7DQogICAgICAgIHJldHVybiBfX3Q7DQogICAg
ICB9DQoNCiAgICAgIGJvb2wNCiAgICAgIG9wZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNv
bnN0DQogICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2ZmOyB9DQoNCiAgICAgIGJv
b2wNCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0DQogICAgICB7IHJl
dHVybiBfTV9vZmYgIT0gX19wb3MuX01fb2ZmOyB9DQoNCiAgICAgIHN0cmVhbW9mZg0KICAgICAg
X01fcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0NCg0KICAgICAgdm9pZA0KICAg
ICAgX01fcG9zaXRpb24oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9DQogICAg
fTsNCg0KDQogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVhbXBvczsNCg0KDQoNCn0NCiMg
NDcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIgMiAzDQojIDEgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzDQojIDM0ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0
aW9uX2RlZmluZXMuaCIgMSAzDQojIDM1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0
ZXhjZXB0LmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCiAgdm9pZA0KICBfX3Rocm93X2Jh
ZF9leGNlcHRpb24odm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQp
Ow0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOw0KDQogIHZvaWQNCiAgX190
aHJvd19iYWRfdHlwZWlkKHZvaWQpOw0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2xvZ2ljX2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0
IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFy
KiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19z
KTsNCg0KICB2b2lkDQogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K
DQogIHZvaWQNCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZv
aWQNCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQN
CiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KDQogIHZvaWQN
CiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOw0KfQ0KIyA0OCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvaW9zZndkIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+
ID4NCiAgICBjbGFzcyBiYXNpY19pb3M7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+DQogICAgY2xhc3MgYmFzaWNf
c3RyZWFtYnVmOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW07DQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8
X0NoYXJUPiA+DQogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4NCiAgICBj
bGFzcyBiYXNpY19pb3N0cmVhbTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LA0KICAgICAgICAgICAgdHlwZW5hbWUg
X0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZjsN
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry
YWl0czxfQ2hhclQ+LA0KICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0No
YXJUPiA+DQogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTsNCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LA0KICAg
ICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+DQogICAgY2xhc3Mg
YmFzaWNfb3N0cmluZ3N0cmVhbTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LA0KICAgICAgICAgICB0eXBlbmFtZSBf
QWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFt
Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf
dHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+
DQogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+DQogICAgY2xhc3MgYmFz
aWNfb2ZzdHJlYW07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+DQogICAgY2xhc3MgYmFzaWNfZnN0cmVhbTsNCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+ID4NCiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOw0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4g
Pg0KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7DQoNCg0KDQogIGNsYXNzIGlvc19iYXNl
Ow0KDQoNCiAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9zOw0KICB0eXBlZGVmIGJhc2ljX3N0
cmVhbWJ1ZjxjaGFyPiBzdHJlYW1idWY7DQogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyPiBp
c3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsNCiAgdHlwZWRl
ZiBiYXNpY19pb3N0cmVhbTxjaGFyPiBpb3N0cmVhbTsNCiAgdHlwZWRlZiBiYXNpY19zdHJpbmdi
dWY8Y2hhcj4gc3RyaW5nYnVmOw0KICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4g
aXN0cmluZ3N0cmVhbTsNCiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJp
bmdzdHJlYW07DQogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0cmVh
bTsNCiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXI+IGZpbGVidWY7DQogIHR5cGVkZWYgYmFz
aWNfaWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07DQogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hh
cj4gb2ZzdHJlYW07DQogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBmc3RyZWFtOw0KDQog
IHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+IHdpb3M7DQogIHR5cGVkZWYgYmFzaWNfc3RyZWFt
YnVmPHdjaGFyX3Q+IHdzdHJlYW1idWY7DQogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90
PiB3aXN0cmVhbTsNCiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+IHdvc3RyZWFtOw0K
ICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPHdjaGFyX3Q+IHdpb3N0cmVhbTsNCiAgdHlwZWRlZiBi
YXNpY19zdHJpbmdidWY8d2NoYXJfdD4gd3N0cmluZ2J1ZjsNCiAgdHlwZWRlZiBiYXNpY19pc3Ry
aW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX29zdHJp
bmdzdHJlYW08d2NoYXJfdD4gd29zdHJpbmdzdHJlYW07DQogIHR5cGVkZWYgYmFzaWNfc3RyaW5n
c3RyZWFtPHdjaGFyX3Q+IHdzdHJpbmdzdHJlYW07DQogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3
Y2hhcl90PiB3ZmlsZWJ1ZjsNCiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTx3Y2hhcl90PiB3aWZz
dHJlYW07DQogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4gd29mc3RyZWFtOw0KICB0
eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07DQp9DQojIDQ1ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9pb3MiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRp
b24iIDEgMw0KIyA0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uIiAzDQpleHRlcm4g
IkMrKyIgew0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQoNCg0KDQogIGNsYXNzIGV4Y2VwdGlv
bg0KICB7DQogIHB1YmxpYzoNCiAgICBleGNlcHRpb24oKSB0aHJvdygpIHsgfQ0KICAgIHZpcnR1
YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7DQoNCg0KICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hh
dCgpIGNvbnN0IHRocm93KCk7DQogIH07DQoNCg0KDQogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBw
dWJsaWMgZXhjZXB0aW9uDQogIHsNCiAgcHVibGljOg0KICAgIGJhZF9leGNlcHRpb24oKSB0aHJv
dygpIHsgfQ0KDQoNCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3coKTsNCiAgfTsN
Cg0KDQogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsNCg0KICB0eXBlZGVm
IHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOw0KDQoNCiAgdGVybWluYXRlX2hhbmRsZXIg
c2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsNCg0KDQogIHZvaWQgdGVy
bWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOw0KDQoNCiAgdW5leHBlY3Rl
ZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsNCg0K
DQogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsNCiMg
OTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbiIgMw0KICBib29sIHVuY2F1Z2h0X2V4
Y2VwdGlvbigpIHRocm93KCk7DQp9DQoNCm5hbWVzcGFjZSBfX2dudV9jeHgNCnsNCiMgMTExICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb24iIDMNCiAgdm9pZCBfX3ZlcmJvc2VfdGVybWlu
YXRlX2hhbmRsZXIgKCk7DQp9DQoNCn0NCiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIg
MiAzDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY2hhcl90cmFpdHMuaCIgMSAzDQoj
IDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NoYXJfdHJhaXRzLmgiIDMNCg0KIyAxICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAxIDMNCiMgNDggIi91c3IvaW5jbHVkZS9jKysv
My4yL2NzdHJpbmciIDMNCg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMNCiMg
MTQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMw0KIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYt
cGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMNCiMgMTUgIi91c3IvaW5jbHVkZS9z
dHJpbmcuaCIgMiAzDQoNCg0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCnZvaWQgKiBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBtZW1jaHIgKGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOw0KaW50
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1lbWNtcCAoY29uc3Qgdm9pZCAqLCBjb25zdCB2
b2lkICosIHNpemVfdCk7DQp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWVtY3B5
ICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsNCnZvaWQgKiBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBtZW1tb3ZlICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsNCnZvaWQg
KiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtZW1zZXQgKHZvaWQgKiwgaW50LCBzaXplX3Qp
Ow0KY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyY2F0IChjaGFyICosIGNvbnN0
IGNoYXIgKik7DQpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJjaHIgKGNvbnN0
IGNoYXIgKiwgaW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJjbXAgKGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBzdHJjb2xsIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQpjaGFyICpfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBzdHJjcHkgKGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCnNpemVfdCBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJjc3BuIChjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKik7DQpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJlcnJvciAoaW50KTsN
CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJsZW4gKGNvbnN0IGNoYXIgKik7
DQpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJuY2F0IChjaGFyICosIGNvbnN0
IGNoYXIgKiwgc2l6ZV90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJuY21w
IChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCmNoYXIgKl9fYXR0cmlidXRl
X18oKF9fY2RlY2xfXykpIHN0cm5jcHkgKGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0K
Y2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RycGJyayAoY29uc3QgY2hhciAqLCBj
b25zdCBjaGFyICopOw0KY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RycmNociAo
Y29uc3QgY2hhciAqLCBpbnQpOw0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0
cnNwbiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOw0KY2hhciAqX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgc3Ryc3RyIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQoNCg0KY2hh
ciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG9rIChjaGFyICosIGNvbnN0IGNoYXIg
Kik7DQoNCg0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnhmcm0gKGNoYXIg
KiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0KDQoNCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIHN0cnRva19yIChjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7DQoNCmludCBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBiY21wIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQg
Kiwgc2l6ZV90KTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYmNvcHkgKGNvbnN0
IHZvaWQgKiwgdm9pZCAqLCBzaXplX3QpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBiemVybyAodm9pZCAqLCBzaXplX3QpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp
IGZmcyAoaW50KTsNCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGluZGV4IChjb25z
dCBjaGFyICosIGludCk7DQp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWVtY2Nw
eSAodm9pZCAqLCBjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsNCnZvaWQgKiBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBtZW1wY3B5ICh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsN
CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJpbmRleCAoY29uc3QgY2hhciAqLCBp
bnQpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cmNhc2VjbXAgKGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqKTsNCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0
cmR1cCAoY29uc3QgY2hhciAqKTsNCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9z
dHJkdXBfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICopOw0KY2hhciAqX19hdHRyaWJ1
dGVfXygoX19jZGVjbF9fKSkgc3RybmR1cCAoY29uc3QgY2hhciAqLCBzaXplX3QpOw0KY2hhciAq
X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3N0cm5kdXBfciAoc3RydWN0IF9yZWVudCAqLCBj
b25zdCBjaGFyICosIHNpemVfdCk7DQpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBz
dHJlcnJvcl9yIChpbnQsIGNoYXIgKiwgc2l6ZV90KTsNCnNpemVfdCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBzdHJsY2F0IChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCnNpemVf
dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJsY3B5IChjaGFyICosIGNvbnN0IGNoYXIg
Kiwgc2l6ZV90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJuY2FzZWNtcCAo
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7DQpzaXplX3QgX19hdHRyaWJ1dGVf
XygoX19jZGVjbF9fKSkgc3RybmxlbiAoY29uc3QgY2hhciAqLCBzaXplX3QpOw0KY2hhciAqX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3Ryc2VwIChjaGFyICoqLCBjb25zdCBjaGFyICopOw0K
Y2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RybHdyIChjaGFyICopOw0KY2hhciAq
X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydXByIChjaGFyICopOw0KDQoNCmNvbnN0IGNo
YXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnNpZ25hbCAoaW50IF9fc2lnbm8pOw0K
DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG9zaWdubyAoY29uc3QgY2hhciAq
X19uYW1lKTsNCiMgOTggIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMw0KfQ0KIyA1MiAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvY3N0cmluZyIgMiAzDQojIDc3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9j
c3RyaW5nIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6bWVtY3B5Ow0KICB1c2luZyA6
Om1lbW1vdmU7DQogIHVzaW5nIDo6c3RyY3B5Ow0KICB1c2luZyA6OnN0cm5jcHk7DQogIHVzaW5n
IDo6c3RyY2F0Ow0KICB1c2luZyA6OnN0cm5jYXQ7DQogIHVzaW5nIDo6bWVtY21wOw0KICB1c2lu
ZyA6OnN0cmNtcDsNCiAgdXNpbmcgOjpzdHJjb2xsOw0KICB1c2luZyA6OnN0cm5jbXA7DQogIHVz
aW5nIDo6c3RyeGZybTsNCiAgdXNpbmcgOjpzdHJjc3BuOw0KICB1c2luZyA6OnN0cnNwbjsNCiAg
dXNpbmcgOjpzdHJ0b2s7DQogIHVzaW5nIDo6bWVtc2V0Ow0KICB1c2luZyA6OnN0cmVycm9yOw0K
ICB1c2luZyA6OnN0cmxlbjsNCg0KICB1c2luZyA6Om1lbWNocjsNCg0KICBpbmxpbmUgdm9pZCoN
CiAgbWVtY2hyKHZvaWQqIF9fcCwgaW50IF9fYywgc2l6ZV90IF9fbikNCiAgeyByZXR1cm4gbWVt
Y2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9fYywgX19uKTsgfQ0KDQogIHVzaW5n
IDo6c3RyY2hyOw0KDQogIGlubGluZSBjaGFyKg0KICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9f
bikNCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihf
X3MxKSwgX19uKTsgfQ0KDQogIHVzaW5nIDo6c3RycGJyazsNCg0KICBpbmxpbmUgY2hhcioNCiAg
c3RycGJyayhjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQ0KICB7IHJldHVybiBfX2J1aWx0
aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0NCg0KICB1
c2luZyA6OnN0cnJjaHI7DQoNCiAgaW5saW5lIGNoYXIqDQogIHN0cnJjaHIoY2hhciogX19zMSwg
aW50IF9fbikNCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBj
aGFyKj4oX19zMSksIF9fbik7IH0NCg0KICB1c2luZyA6OnN0cnN0cjsNCg0KICBpbmxpbmUgY2hh
cioNCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpDQogIHsgcmV0dXJuIF9f
YnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9DQp9
DQojIDQ2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMw0KDQoN
Cm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPg0KICAgIHN0
cnVjdCBjaGFyX3RyYWl0cw0KICAgIHsNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsN
Cg0KICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOw0KICAgICAgdHlwZWRlZiBz
dHJlYW1wb3MgcG9zX3R5cGU7DQogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsNCiAg
ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7DQoNCiAgICAgIHN0YXRpYyB2b2lkDQog
ICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOw0KDQog
ICAgICBzdGF0aWMgYm9vbA0KICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj
aGFyX3R5cGUmIF9fYzIpOw0KDQogICAgICBzdGF0aWMgYm9vbA0KICAgICAgbHQoY29uc3QgY2hh
cl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOw0KDQogICAgICBzdGF0aWMgaW50
DQogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBf
X3MyLCBzaXplX3QgX19uKTsNCg0KICAgICAgc3RhdGljIHNpemVfdA0KICAgICAgbGVuZ3RoKGNv
bnN0IGNoYXJfdHlwZSogX19zKTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoNCiAg
ICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlw
ZSYgX19hKTsNCg0KICAgICAgc3RhdGljIGNoYXJfdHlwZSoNCiAgICAgIG1vdmUoY2hhcl90eXBl
KiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOw0KDQogICAgICBzdGF0
aWMgY2hhcl90eXBlKg0KICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlw
ZSogX19zMiwgc2l6ZV90IF9fbik7DQoNCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqDQogICAgICBh
c3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpOw0KDQogICAg
ICBzdGF0aWMgY2hhcl90eXBlDQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9f
Yyk7DQoNCiAgICAgIHN0YXRpYyBpbnRfdHlwZQ0KICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hh
cl90eXBlJiBfX2MpOw0KDQogICAgICBzdGF0aWMgYm9vbA0KICAgICAgZXFfaW50X3R5cGUoY29u
c3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKTsNCg0KICAgICAgc3RhdGlj
IGludF90eXBlDQogICAgICBlb2YoKTsNCg0KICAgICAgc3RhdGljIGludF90eXBlDQogICAgICBu
b3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpOw0KICAgIH07DQoNCg0KDQogIHRlbXBsYXRlPD4N
CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj4NCiAgICB7DQogICAgICB0eXBlZGVmIGNoYXIg
Y2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7DQogICAgICB0eXBlZGVmIHN0
cmVhbXBvcyBwb3NfdHlwZTsNCiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOw0KICAg
ICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsNCg0KICAgICAgc3RhdGljIHZvaWQNCiAg
ICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikNCiAgICAg
IHsgX19jMSA9IF9fYzI7IH0NCg0KICAgICAgc3RhdGljIGJvb2wNCiAgICAgIGVxKGNvbnN0IGNo
YXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQ0KICAgICAgeyByZXR1cm4gX19j
MSA9PSBfX2MyOyB9DQoNCiAgICAgIHN0YXRpYyBib29sDQogICAgICBsdChjb25zdCBjaGFyX3R5
cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikNCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBf
X2MyOyB9DQoNCiAgICAgIHN0YXRpYyBpbnQNCiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBl
KiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pDQogICAgICB7IHJldHVy
biBtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQ0KDQogICAgICBzdGF0aWMgc2l6ZV90DQogICAg
ICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpDQogICAgICB7IHJldHVybiBzdHJsZW4oX19z
KTsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZmluZChjb25zdCBj
aGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpDQogICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5cGUqPihtZW1jaHIoX19zLCBfX2EsIF9f
bikpOyB9DQoNCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqDQogICAgICBtb3ZlKGNoYXJfdHlwZSog
X19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQ0KICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtbW92ZShfX3MxLCBfX3MyLCBfX24pKTsgfQ0KDQog
ICAgICBzdGF0aWMgY2hhcl90eXBlKg0KICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0
IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PGNoYXJfdHlwZSo+KG1lbWNweShfX3MxLCBfX3MyLCBfX24pKTsgfQ0KDQogICAgICBzdGF0aWMg
Y2hhcl90eXBlKg0KICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFy
X3R5cGUgX19hKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtc2V0
KF9fcywgX19hLCBfX24pKTsgfQ0KDQogICAgICBzdGF0aWMgY2hhcl90eXBlDQogICAgICB0b19j
aGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PGNoYXJfdHlwZT4oX19jKTsgfQ0KDQoNCg0KICAgICAgc3RhdGljIGludF90eXBlDQogICAgICB0
b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGludF90eXBlPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpKTsgfQ0KDQogICAg
ICBzdGF0aWMgYm9vbA0KICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNv
bnN0IGludF90eXBlJiBfX2MyKQ0KICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9DQoNCiAg
ICAgIHN0YXRpYyBpbnRfdHlwZQ0KICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
X3R5cGU+KCgtMSkpOyB9DQoNCiAgICAgIHN0YXRpYyBpbnRfdHlwZQ0KICAgICAgbm90X2VvZihj
b25zdCBpbnRfdHlwZSYgX19jKQ0KICAgICAgeyByZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDog
X19jOyB9DQogIH07DQojIDI0MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0
cy5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAg
ICBzdHJ1Y3QgX0NoYXJfdHJhaXRzX21hdGNoDQogICAgew0KICAgICAgX0NoYXJUIF9NX2M7DQog
ICAgICBfQ2hhcl90cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2MpIHsg
fQ0KDQogICAgICBib29sDQogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJl
dHVybiBfVHJhaXRzOjplcShfTV9jLCBfX2EpOyB9DQogICAgfTsNCn0NCiMgNDcgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2lvcyIgMiAzDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9s
b2NhbGVmd2QuaCIgMSAzDQojIDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3
ZC5oIiAzDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRz
L2MrK2xvY2FsZS5oIiAxIDMNCiMgMzYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtY3ln
d2luL2JpdHMvYysrbG9jYWxlLmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2xvY2Fs
ZSIgMSAzDQojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbG9jYWxlIiAzDQoNCiMgMSAiL3Vz
ci9pbmNsdWRlL2xvY2FsZS5oIiAxIDMNCiMgMjQgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMw0K
ZXh0ZXJuICJDIiB7DQoNCnN0cnVjdCBsY29udg0Kew0KICBjaGFyICpkZWNpbWFsX3BvaW50Ow0K
ICBjaGFyICp0aG91c2FuZHNfc2VwOw0KICBjaGFyICpncm91cGluZzsNCiAgY2hhciAqaW50X2N1
cnJfc3ltYm9sOw0KICBjaGFyICpjdXJyZW5jeV9zeW1ib2w7DQogIGNoYXIgKm1vbl9kZWNpbWFs
X3BvaW50Ow0KICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsNCiAgY2hhciAqbW9uX2dyb3VwaW5n
Ow0KICBjaGFyICpwb3NpdGl2ZV9zaWduOw0KICBjaGFyICpuZWdhdGl2ZV9zaWduOw0KICBjaGFy
IGludF9mcmFjX2RpZ2l0czsNCiAgY2hhciBmcmFjX2RpZ2l0czsNCiAgY2hhciBwX2NzX3ByZWNl
ZGVzOw0KICBjaGFyIHBfc2VwX2J5X3NwYWNlOw0KICBjaGFyIG5fY3NfcHJlY2VkZXM7DQogIGNo
YXIgbl9zZXBfYnlfc3BhY2U7DQogIGNoYXIgcF9zaWduX3Bvc247DQogIGNoYXIgbl9zaWduX3Bv
c247DQp9Ow0KDQoNCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldGxvY2FsZSAo
aW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpOw0Kc3RydWN0IGxjb252ICpfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBsb2NhbGVjb252ICh2b2lkKTsNCg0KDQpzdHJ1Y3QgX3JlZW50
Ow0KY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3NldGxvY2FsZV9yIChzdHJ1Y3Qg
X3JlZW50ICosIGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqbG9jYWxlKTsNCnN0cnVjdCBsY29u
diAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2xvY2FsZWNvbnZfciAoc3RydWN0IF9yZWVu
dCAqKTsNCg0KfQ0KIyA1MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2xvY2FsZSIgMiAzDQoNCg0K
DQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB1c2luZyA6Omxjb252Ow0KICB1c2luZyA6OnNldGxv
Y2FsZTsNCiAgdXNpbmcgOjpsb2NhbGVjb252Ow0KfQ0KIyAzNyAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvaTY4Ni1wYy1jeWd3aW4vYml0cy9jKytsb2NhbGUuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQN
CnsNCiAgdHlwZWRlZiBpbnQqIF9fY19sb2NhbGU7DQp9DQojIDQ3ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2xp
bWl0cyIgMSAzDQojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbGltaXRzIiAzDQoNCiMgMSAi
L3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMSAz
DQojIDExICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL2xpbWl0
cy5oIiAzDQojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1jeWd3aW4vMy4yL2luY2x1ZGUv
c3lzbGltaXRzLmgiIDEgMw0KDQoNCg0KDQoNCg0KIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYt
cGMtY3lnd2luLzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMNCiMgMTMyICIvdXNyL2xpYi9nY2Mt
bGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAzDQojIDEgIi91c3IvaW5j
bHVkZS9saW1pdHMuaCIgMSAzDQojIDEzMyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dp
bi8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzDQojIDggIi91c3IvbGliL2djYy1saWIvaTY4Ni1w
Yy1jeWd3aW4vMy4yL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMw0KIyAxMiAiL3Vzci9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzDQojIDUwICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9jbGltaXRzIiAyIDMNCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvbG9jYWxlZndkLmgiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jY3R5cGUi
IDEgMw0KIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2N0eXBlIiAzDQoNCg0KIyAxICIvdXNy
L2luY2x1ZGUvY3R5cGUuaCIgMSAzDQoNCg0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCmludCBfX2F0
dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc2FsbnVtIChpbnQgX19jKTsNCmludCBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBpc2FscGhhIChpbnQgX19jKTsNCmludCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBpc2NudHJsIChpbnQgX19jKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSBpc2RpZ2l0IChpbnQgX19jKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBp
c2dyYXBoIChpbnQgX19jKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc2xvd2Vy
IChpbnQgX19jKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3ByaW50IChpbnQg
X19jKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3B1bmN0IChpbnQgX19jKTsN
CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3NwYWNlIChpbnQgX19jKTsNCmludCBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3VwcGVyIChpbnQgX19jKTsNCmludCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBpc3hkaWdpdCAoaW50IF9fYyk7DQppbnQgX19hdHRyaWJ1dGVf
XygoX19jZGVjbF9fKSkgdG9sb3dlciAoaW50IF9fYyk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19j
ZGVjbF9fKSkgdG91cHBlciAoaW50IF9fYyk7DQoNCg0KaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIGlzYmxhbmsgKGludCBfX2MpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp
IGlzYXNjaWkgKGludCBfX2MpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHRvYXNj
aWkgKGludCBfX2MpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF90b2xvd2VyIChp
bnQgX19jKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdG91cHBlciAoaW50IF9f
Yyk7DQojIDM5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMw0KZXh0ZXJuIF9fYXR0cmlidXRlX18o
KGRsbGltcG9ydCkpIGNvbnN0IGNoYXIgX2N0eXBlX1tdOw0KIyA2OCAiL3Vzci9pbmNsdWRlL2N0
eXBlLmgiIDMNCn0NCiMgNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NjdHlwZSIgMiAzDQojIDY2
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jY3R5cGUiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdXNp
bmcgOjppc2FsbnVtOw0KICB1c2luZyA6OmlzYWxwaGE7DQogIHVzaW5nIDo6aXNjbnRybDsNCiAg
dXNpbmcgOjppc2RpZ2l0Ow0KICB1c2luZyA6OmlzZ3JhcGg7DQogIHVzaW5nIDo6aXNsb3dlcjsN
CiAgdXNpbmcgOjppc3ByaW50Ow0KICB1c2luZyA6OmlzcHVuY3Q7DQogIHVzaW5nIDo6aXNzcGFj
ZTsNCiAgdXNpbmcgOjppc3VwcGVyOw0KICB1c2luZyA6OmlzeGRpZ2l0Ow0KICB1c2luZyA6OnRv
bG93ZXI7DQogIHVzaW5nIDo6dG91cHBlcjsNCn0NCiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvbG9jYWxlZndkLmgiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmci
IDEgMw0KIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAzDQoNCg0KDQoNCiMgMSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAxIDMNCiMgNTMgIi91c3IvaW5jbHVkZS9jKysv
My4yL21lbW9yeSIgMw0KDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDEgMw0KIyA2OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9uZXciIDEgMw0KIyA0NCAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvbmV3IiAzDQpleHRlcm4gIkMrKyIgew0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoN
Cg0KICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uDQogIHsNCiAgcHVibGljOg0K
ICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9DQoNCg0KICAgIHZpcnR1YWwgfmJhZF9hbGxvYygp
IHRocm93KCk7DQogIH07DQoNCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07DQogIGV4dGVybiBjb25z
dCBub3Rocm93X3Qgbm90aHJvdzsNCg0KDQogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgp
Ow0KDQogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcikgdGhyb3coKTsN
Cn0NCiMgNzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL25ldyIgMw0Kdm9pZCogb3BlcmF0b3IgbmV3
KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOw0Kdm9pZCogb3BlcmF0b3IgbmV3
W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7DQp2b2lkIG9wZXJhdG9yIGRl
bGV0ZSh2b2lkKikgdGhyb3coKTsNCnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCopIHRocm93
KCk7DQp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190
JikgdGhyb3coKTsNCnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6
Om5vdGhyb3dfdCYpIHRocm93KCk7DQp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29uc3Qg
c3RkOjpub3Rocm93X3QmKSB0aHJvdygpOw0Kdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwg
Y29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOw0KDQoNCmlubGluZSB2b2lkKiBvcGVyYXRv
ciBuZXcoc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0NCmlu
bGluZSB2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJvdygp
IHsgcmV0dXJuIF9fcDsgfQ0KDQoNCmlubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCos
IHZvaWQqKSB0aHJvdygpIHsgfTsNCmlubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQq
LCB2b2lkKikgdGhyb3coKSB7IH07DQoNCn0NCiMgNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsZ29iYXNlLmgiIDIgMw0KDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX3BhaXIuaCIgMSAzDQojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9wYWly
LmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf
VDI+DQpzdHJ1Y3QgcGFpciB7DQogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7DQogIHR5cGVkZWYg
X1QyIHNlY29uZF90eXBlOw0KDQogIF9UMSBmaXJzdDsNCiAgX1QyIHNlY29uZDsNCg0KDQoNCg0K
ICBwYWlyKCkgOiBmaXJzdCgpLCBzZWNvbmQoKSB7fQ0KDQoNCg0KDQogIHBhaXIoY29uc3QgX1Qx
JiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29uZChfX2IpIHt9DQoNCg0K
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+DQogIHBhaXIoY29uc3QgcGFpcjxfVTEs
IF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30NCn07
DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195
KQ0Kew0KICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9f
eS5zZWNvbmQ7DQp9DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5saW5l
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1Qx
LCBfVDI+JiBfX3kpDQp7DQogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwNCiAgICAg
ICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQp
Ow0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m
IF9feSkgew0KICByZXR1cm4gIShfX3ggPT0gX195KTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X1QxLCBjbGFzcyBfVDI+DQppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9U
Mj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgew0KICByZXR1cm4gX195IDwgX194
Ow0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBib29sIG9w
ZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m
IF9feSkgew0KICByZXR1cm4gIShfX3kgPCBfX3gpOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf
VDEsIGNsYXNzIF9UMj4NCmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9U
Mj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgew0KICByZXR1cm4gIShfX3ggPCBf
X3kpOw0KfQ0KIyAxNDAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3BhaXIuaCIgMw0K
dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KDQoNCmlubGluZSBwYWlyPF9UMSwgX1Qy
PiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9feSkNCg0KDQoNCnsNCiAgcmV0dXJuIHBhaXI8X1Qx
LCBfVDI+KF9feCwgX195KTsNCn0NCg0KfQ0KIyA3MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvdHlw
ZV90cmFpdHMuaCIgMSAzDQojIDUzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3R5cGVfdHJh
aXRzLmgiIDMNCiMgOTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvdHlwZV90cmFpdHMuaCIg
Mw0Kc3RydWN0IF9fdHJ1ZV90eXBlIHt9Ow0Kc3RydWN0IF9fZmFsc2VfdHlwZSB7fTsNCg0KdGVt
cGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsNCiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsNCiMgMTEzICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3R5cGVfdHJhaXRzLmgiIDMNCiAgIHR5cGVkZWYgX19mYWxzZV90
eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fZmFsc2Vf
dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX2ZhbHNlX3R5
cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX19mYWxzZV90
eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19Q
T0RfdHlwZTsNCn07DQoNCg0KDQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9v
bD4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
Ow0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
Ow0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8Y2hhcj4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsNCiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf
UE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVk
IGNoYXI+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25z
dHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVj
dCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0K
DQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7DQogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25l
ZCBzaG9ydD4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0K
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3Ry
dWN0IF9fdHlwZV90cmFpdHM8aW50PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0K
dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsNCiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxv
bmc+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBf
X3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9
Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gew0KICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8
dW5zaWduZWQgbG9uZyBsb25nPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVt
cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gew0KICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf
dHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7DQog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
YWl0czxsb25nIGRvdWJsZT4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBs
YXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAqPiB7DQogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGlzX1BPRF90eXBlOw0KfTsNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3Qg
X0lzX2ludGVnZXIgew0KICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0
ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7DQogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4g
ew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3Ry
dWN0IF9Jc19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu
dGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hh
cj4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4g
c3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50
ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4gew0KICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9J
c19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
cmFsOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7DQogIHR5cGVk
ZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2lu
dGVnZXI8dW5zaWduZWQgaW50PiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0K
fTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gew0KICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy
PHVuc2lnbmVkIGxvbmc+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0K
DQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nIGxvbmc+IHsNCiAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl
cjx1bnNpZ25lZCBsb25nIGxvbmc+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7
DQp9Ow0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9y
IHsNCiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7DQp9Ow0KDQoNCm5hbWVzcGFjZSBf
X2dudV9jeHgNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29u
dGFpbmVyPiBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcjsNCn0NCg0KdGVtcGxhdGU8dHlwZW5hbWUg
X0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0Kc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0
b3I8IF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiA+
IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsNCn07DQojIDczICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMNCg0KDQoNCg0KDQpuYW1lc3BhY2Ug
c3RkDQp7DQojIDkxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAz
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cjI+DQogICAgaW5saW5lIHZvaWQNCiAgICBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9G
b3J3YXJkSXRlcjIgX19iKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOw0KICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyMj46OnZhbHVlX3R5cGUg
X1ZhbHVlVHlwZTI7DQoNCg0KICAgICANCiAgICAgDQogICAgIA0KICAgICANCg0KICAgICAgX1Zh
bHVlVHlwZTEgX190bXAgPSAqX19hOw0KICAgICAgKl9fYSA9ICpfX2I7DQogICAgICAqX19iID0g
X190bXA7DQogICAgfQ0KIyAxMTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIGlubGluZSB2b2lkDQogICAg
c3dhcChfVHAmIF9fYSwgX1RwJiBfX2IpDQogICAgew0KDQogICAgIA0KDQogICAgICBfVHAgX190
bXAgPSBfX2E7DQogICAgICBfX2EgPSBfX2I7DQogICAgICBfX2IgPSBfX3RtcDsNCiAgICB9DQoj
IDE0NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMw0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgaW5saW5lIGNvbnN0IF9UcCYNCiAgICBtaW4oY29uc3Qg
X1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQ0KICAgIHsNCg0KICAgICANCg0KICAgICAgaWYgKF9f
YiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsNCiAgICB9DQojIDE2NiAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+DQogICAgaW5saW5lIGNvbnN0IF9UcCYNCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0
IF9UcCYgX19iKQ0KICAgIHsNCg0KICAgICANCg0KICAgICAgaWYgKF9fYSA8IF9fYikgcmV0dXJu
IF9fYjsgcmV0dXJuIF9fYTsNCiAgICB9DQojIDE4NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnb2Jhc2UuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D
b21wYXJlPg0KICAgIGlubGluZSBjb25zdCBfVHAmDQogICAgbWluKGNvbnN0IF9UcCYgX19hLCBj
b25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICAgaWYgKF9fY29t
cChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7DQogICAgfQ0KIyAyMDQgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBpbmxpbmUgY29uc3QgX1RwJg0KICAgIG1h
eChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkNCiAgICB7
DQoNCiAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOw0K
ICAgIH0NCiMgMjIxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAz
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0K
ICAgIGlubGluZSBfT3V0cHV0SXRlcg0KICAgIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwNCiAgICAg
ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAgIGZvciAoIDsgX19maXJzdCAh
PSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkNCiAgICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3Q7DQogICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4NCiAgICBpbmxpbmUg
X091dHB1dEl0ZXINCiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwNCiAg
ICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpDQogICAgew0KICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNl
X3R5cGUNCiAgICAgICAgICBfRGlzdGFuY2U7DQogICAgICBmb3IgKF9EaXN0YW5jZSBfX24gPSBf
X2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgew0KICAgICAgICAqX19yZXN1bHQgPSAq
X19maXJzdDsNCiAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAgICArK19fcmVzdWx0Ow0KICAgICAg
fQ0KICAgICAgcmV0dXJuIF9fcmVzdWx0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+DQogICAgaW5saW5lIF9UcCoNCiAgICBfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmly
c3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQ0KICAgIHsNCiAgICAgIG1lbW1v
dmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsN
CiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgICB9DQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQogICAg
aW5saW5lIF9PdXRwdXRJdGVyDQogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg
X19mYWxzZV90eXBlKQ0KICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0KICAgIGlubGluZSBfT3V0cHV0
SXRlcg0KICAgIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsDQogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQ0K
ICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9y
X2NhdGVnb3J5KF9fZmlyc3QpKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICBp
bmxpbmUgX1RwKg0KICAgIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsDQog
ICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpDQogICAgeyByZXR1cm4g
X19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0NCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+DQogICAgaW5saW5lIF9UcCoNCiAgICBfX2NvcHlfYXV4Mihjb25zdCBf
VHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LA0KICAgICAgICAgICAgICAgIF9UcCogX19y
ZXN1bHQsIF9fdHJ1ZV90eXBlKQ0KICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3Qs
IF9fbGFzdCwgX19yZXN1bHQpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX091dHB1dEl0ZXI+DQogICAgaW5saW5lIF9PdXRwdXRJdGVyDQogICAgX19jb3B5
X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQ0KICAgIHsNCiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlDQogICAg
ICAgICAgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxf
VmFsdWVUeXBlPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcg0KICAgICAgICAgIF9U
cml2aWFsOw0KICAgICAgcmV0dXJuIF9PdXRwdXRJdGVyKF9fY29weV9hdXgyKF9fZmlyc3QsIF9f
bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdC5iYXNl
KCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSkpOw0K
ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0
SXRlcj4NCiAgICBpbmxpbmUgX091dHB1dEl0ZXINCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCwgX19mYWxzZV90eXBlKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlDQogICAgICAgICAgX1ZhbHVlVHlw
ZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcg0KICAgICAgICAgIF9Ucml2aWFsOw0KICAgICAg
cmV0dXJuIF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfVHJpdmlhbCgpKTsNCiAg
ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0
ZXI+DQogICAgaW5saW5lIF9PdXRwdXRJdGVyDQogICAgX19jb3B5X25pMShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQsIF9fdHJ1ZV90eXBlKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25v
cm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7DQogICAgICByZXR1
cm4gX19jb3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwgX19yZXN1bHQsIF9f
Tm9ybWFsKCkpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl
bmFtZSBfT3V0cHV0SXRlcj4NCiAgICBpbmxpbmUgX091dHB1dEl0ZXINCiAgICBfX2NvcHlfbmkx
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3Jt
YWw7DQogICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBf
X05vcm1hbCgpKTsNCiAgICB9DQojIDMzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxnb2Jhc2UuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
T3V0cHV0SXRlcj4NCiAgICBpbmxpbmUgX091dHB1dEl0ZXINCiAgICBjb3B5KF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQ0KICAgIHsN
Cg0KICAgICANCiAgICAgDQoNCg0KICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9p
dGVyYXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsNCiAgICAgICByZXR1cm4gX19j
b3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsNCiAgICB9DQoN
Cg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyMj4NCiAgICBpbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyMg0KICAg
IF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlv
bmFsSXRlcjEgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIy
IF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZykNCiAgICB7DQogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpDQogICAgICAgICotLV9f
cmVzdWx0ID0gKi0tX19sYXN0Ow0KICAgICAgcmV0dXJuIF9fcmVzdWx0Ow0KICAgIH0NCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyPg0KICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXINCiAgICBfX2NvcHlfYmFja3dh
cmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0K
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsDQogICAgICAg
ICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAgIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlw
ZSBfX247DQogICAgICBmb3IgKF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19u
KQ0KICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsNCiAgICAgIHJldHVybiBfX3Jlc3Vs
dDsNCiAgICB9DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwNCiAgICAgICAgICAgdHlwZW5h
bWUgX0Jvb2xUeXBlPg0KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gNCiAgICB7
DQogICAgICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVyMg0KICAgICAgY29weShfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LA0KICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KQ0KICAgICAgew0KICAgICAgICByZXR1cm4g
X19jb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh
dG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAgICAgIH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4NCiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9U
cCosIF9fdHJ1ZV90eXBlPg0KICAgIHsNCiAgICAgIHN0YXRpYyBfVHAqDQogICAgICBjb3B5KGNv
bnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpDQogICAg
ICB7DQogICAgICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVtID0gX19sYXN0IC0gX19maXJzdDsNCiAg
ICAgICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051
bSk7DQogICAgICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07DQogICAgICB9DQogICAgfTsNCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNw
YXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4NCiAgICB7DQogICAgICBzdGF0aWMg
X1RwKg0KICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBf
VHAqIF9fcmVzdWx0KQ0KICAgICAgew0KICAgICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rp
c3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPg0KICAgICAgICAgIDo6Y29weShfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0KTsNCiAgICAgIH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+DQogICAgaW5saW5lIF9CSTINCiAgICBfX2NvcHlfYmFj
a3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpDQogICAg
ew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IgX1RyaXZpYWw7DQogICAgICByZXR1cm4g
X19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPg0KICAgICAgICAg
ICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOw0KICAgIH0NCg0KICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4NCiAgICBpbmxpbmUgX0JJMg0K
ICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwg
X0JJMSBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpDQogICAgeyByZXR1cm4gX0JJMihfX2NvcHlfYmFj
a3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFzZSgpKSk7IH0NCg0KICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4NCiAgICBpbmxpbmUgX0JJMg0KICAg
IF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJ
MSBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJ
MiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQ0KICAgIHsgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9h
dXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
X0JJMSwgdHlwZW5hbWUgX0JJMj4NCiAgICBpbmxpbmUgX0JJMg0KICAgIF9fY29weV9iYWNrd2Fy
ZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1
ZV90eXBlKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRv
cjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsNCiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRf
b3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3Vs
dCwgX19Ob3JtYWwoKSk7DQogICAgfQ0KDQogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBl
bmFtZSBfQkkyPg0KICAgIGlubGluZSBfQkkyDQogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25v
cm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQ0K
ICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6
X05vcm1hbCBfX05vcm1hbDsNCiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25v
cm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOw0KICAgIH0N
CiMgNDc3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzDQogIHRl
bXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPg0KICAgIGlubGluZSBfQkkyDQog
ICAgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0
KQ0KICAgIHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQoNCg0KICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTE+OjpfTm9ybWFsIF9fTm9ybWFsOw0KICAgICAg
cmV0dXJuIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fTm9ybWFsKCkpOw0KICAgIH0NCiMgNTA5ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
ciwgdHlwZW5hbWUgX1RwPg0KICAgIHZvaWQNCiAgICBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpDQogICAgew0KDQogICAg
IA0KDQogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgICAg
ICpfX2ZpcnN0ID0gX192YWx1ZTsNCiAgICB9DQojIDUzMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwg
dHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4NCiAgICBfT3V0cHV0SXRlcg0KICAgIGZpbGxf
bihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkNCiAg
ICB7DQoNCiAgICAgDQoNCiAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkN
CiAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOw0KICAgICAgcmV0dXJuIF9fZmlyc3Q7DQogICAg
fQ0KDQoNCg0KICBpbmxpbmUgdm9pZA0KICBmaWxsKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHVu
c2lnbmVkIGNoYXIqIF9fbGFzdCwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQ0KICB7DQogICAg
dW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsNCiAgICBtZW1zZXQoX19maXJzdCwgX190bXAsIF9f
bGFzdCAtIF9fZmlyc3QpOw0KICB9DQoNCiAgaW5saW5lIHZvaWQNCiAgZmlsbChzaWduZWQgY2hh
ciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9fbGFzdCwgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykN
CiAgew0KICAgIHNpZ25lZCBjaGFyIF9fdG1wID0gX19jOw0KICAgIG1lbXNldChfX2ZpcnN0LCBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOw0KICB9
DQoNCiAgaW5saW5lIHZvaWQNCiAgZmlsbChjaGFyKiBfX2ZpcnN0LCBjaGFyKiBfX2xhc3QsIGNv
bnN0IGNoYXImIF9fYykNCiAgew0KICAgIGNoYXIgX190bXAgPSBfX2M7DQogICAgbWVtc2V0KF9f
Zmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJz
dCk7DQogIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4NCiAgICBpbmxpbmUgdW5zaWdu
ZWQgY2hhcioNCiAgICBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLCBj
b25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpDQogICAgew0KICAgICAgZmlsbChfX2ZpcnN0LCBfX2Zp
cnN0ICsgX19uLCBfX2MpOw0KICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247DQogICAgfQ0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPg0KICAgIGlubGluZSBzaWduZWQgY2hhcioNCiAgICBm
aWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBzaWduZWQgY2hhciYgX19jKQ0K
ICAgIHsNCiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsNCiAgICAgIHJl
dHVybiBfX2ZpcnN0ICsgX19uOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4N
CiAgICBpbmxpbmUgY2hhcioNCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBj
b25zdCBjaGFyJiBfX2MpDQogICAgew0KICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19u
LCBfX2MpOw0KICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247DQogICAgfQ0KIyA2MDYgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPg0KICAgIHBhaXI8X0lucHV0SXRl
cjEsIF9JbnB1dEl0ZXIyPg0KICAgIG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w
dXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQ0KICAg
IHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQogICAgIA0KDQoNCiAgICAgIHdoaWxlIChfX2Zp
cnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIpIHsNCiAgICAgICAgKytf
X2ZpcnN0MTsNCiAgICAgICAgKytfX2ZpcnN0MjsNCiAgICAgIH0NCiAgICAgIHJldHVybiBwYWly
PF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsNCiAgICB9DQoj
IDY0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMw0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l
IF9CaW5hcnlQcmVkaWNhdGU+DQogICAgcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+DQog
ICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQog
ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsDQogICAgICAgICAgICAgX0JpbmFyeVBy
ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAgICAgIHdo
aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19m
aXJzdDIpKSB7DQogICAgICAgICsrX19maXJzdDE7DQogICAgICAgICsrX19maXJzdDI7DQogICAg
ICB9DQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3Qx
LCBfX2ZpcnN0Mik7DQogICAgfQ0KIyA2NjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l
IF9JbnB1dEl0ZXIyPg0KICAgIGlubGluZSBib29sDQogICAgZXF1YWwoX0lucHV0SXRlcjEgX19m
aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIpDQogICAgew0KDQogICAgIA0KICAgICANCiAgICAgDQoNCg0KDQogICAgICBmb3IgKCA7IF9f
Zmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpDQogICAgICAgIGlmICgh
KCpfX2ZpcnN0MSA9PSAqX19maXJzdDIpKQ0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAg
IHJldHVybiB0cnVlOw0KICAgIH0NCiMgNjk5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt
ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4NCiAgICBpbmxpbmUgYm9v
bA0KICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0K
ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLA0KICAgICAgICAgIF9CaW5hcnlQcmVkaWNh
dGUgX19iaW5hcnlfcHJlZCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQogICAgICBmb3IgKCA7
IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpDQogICAgICAgIGlm
ICghX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpDQogICAgICAgICAgcmV0dXJu
IGZhbHNlOw0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KIyA3MzIgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPg0KICAgIGJvb2wNCiAgICBsZXhpY29ncmFwaGlj
YWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl
cjIgX19sYXN0MikNCiAgICB7DQoNCiAgICAgDQogICAgIA0KICAgICANCg0KICAgICANCg0KDQog
ICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mg0K
ICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7DQogICAgICAgIGlmICgqX19m
aXJzdDEgPCAqX19maXJzdDIpDQogICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIGlmICgq
X19maXJzdDIgPCAqX19maXJzdDEpDQogICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0K
ICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsN
CiAgICB9DQojIDc2NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
Mw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIs
IHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIGJvb2wNCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFy
ZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0
MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0K
DQogICAgIA0KICAgICANCg0KICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDINCiAgICAgICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0Mikg
ew0KICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsNCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpDQog
ICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsNCiAgICB9DQoNCiAgaW5saW5lIGJvb2wN
CiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEs
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xh
c3QyKQ0KICB7DQogICAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsN
CiAgICBjb25zdCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOw0KICAgIGNvbnN0
IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9f
bGVuMikpOw0KICAgIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4x
IDwgX19sZW4yOw0KICB9DQoNCiAgaW5saW5lIGJvb2wNCiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBh
cmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3Qy
KQ0KICB7DQoNCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25l
ZCBjaGFyKikgX19maXJzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj
b25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsNCg0KDQoNCg0K
DQoNCiAgfQ0KDQp9DQojIDU1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDIgMw0KIyAx
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAxIDMNCiMgODQgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvY2Fzc2VydCIgMSAzDQojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAz
DQoNCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMNCg0KDQoNCg0KDQpleHRlcm4gIkMi
IHsNCiMgMjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBfX2Fzc2VydCAoY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKik7DQoN
Cg0KfQ0KIyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2Fzc2VydCIgMiAzDQojIDg1ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMNCiMgMzQgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9leGNl
cHRpb25fZGVmaW5lcy5oIiAxIDMNCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVu
Y3RleGNlcHQuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB2b2lkDQogIF9fdGhyb3df
YmFkX2V4Y2VwdGlvbih2b2lkKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19iYWRfYWxsb2Modm9p
ZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7DQoNCiAgdm9pZA0KICBf
X3Rocm93X2JhZF90eXBlaWQodm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfbG9naWNfZXJy
b3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29u
c3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBf
X3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
DQoNCiAgdm9pZA0KICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAg
dm9pZA0KICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9p
ZA0KICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQoNCiAgdm9p
ZA0KICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7DQp9DQojIDg2ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAxIDMNCiMgNTQgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KDQogIHN0
cnVjdCBfUmVmY291bnRfQmFzZQ0KICB7DQoNCiAgICB0eXBlZGVmIHNpemVfdCBfUkNfdDsNCg0K
DQogICAgdm9sYXRpbGUgX1JDX3QgX01fcmVmX2NvdW50Ow0KDQoNCiAgICBfX2d0aHJlYWRfbXV0
ZXhfdCBfTV9yZWZfY291bnRfbG9jazsNCg0KICAgIF9SZWZjb3VudF9CYXNlKF9SQ190IF9fbikg
OiBfTV9yZWZfY291bnQoX19uKQ0KICAgIHsNCg0KICAgICAgX19ndGhyZWFkX211dGV4X3QgX190
bXAgPSAwOw0KICAgICAgX01fcmVmX2NvdW50X2xvY2sgPSBfX3RtcDsNCg0KDQoNCg0KDQogICAg
fQ0KDQogICAgdm9pZA0KICAgIF9NX2luY3IoKQ0KICAgIHsNCiAgICAgIF9fZ3RocmVhZF9tdXRl
eF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7DQogICAgICArK19NX3JlZl9jb3VudDsNCiAgICAg
IF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsNCiAgICB9DQoNCiAg
ICBfUkNfdA0KICAgIF9NX2RlY3IoKQ0KICAgIHsNCiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2Nr
KCZfTV9yZWZfY291bnRfbG9jayk7DQogICAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01f
cmVmX2NvdW50Ow0KICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xv
Y2spOw0KICAgICAgcmV0dXJuIF9fdG1wOw0KICAgIH0NCiAgfTsNCiMgMTA5ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDMNCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+
DQogICAgc3RydWN0IF9Td2FwX2xvY2tfc3RydWN0DQogICAgeyBzdGF0aWMgX19ndGhyZWFkX211
dGV4X3QgX1Nfc3dhcF9sb2NrOyB9Ow0KDQogIHRlbXBsYXRlPGludCBfX2R1bW15Pg0KICAgIF9f
Z3RocmVhZF9tdXRleF90DQogICAgX1N3YXBfbG9ja19zdHJ1Y3Q8X19kdW1teT46Ol9TX3N3YXBf
bG9jayA9IDA7DQoNCg0KDQogIGlubGluZSB1bnNpZ25lZCBsb25nDQogIF9BdG9taWNfc3dhcCh1
bnNpZ25lZCBsb25nICogX19wLCB1bnNpZ25lZCBsb25nIF9fcSkNCiAgew0KICAgIF9fZ3RocmVh
ZF9tdXRleF9sb2NrKCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsNCiAgICB1
bnNpZ25lZCBsb25nIF9fcmVzdWx0ID0gKl9fcDsNCiAgICAqX19wID0gX19xOw0KICAgIF9fZ3Ro
cmVhZF9tdXRleF91bmxvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOw0K
ICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgfQ0KIyAxNTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX3RocmVhZHMuaCIgMw0KICBzdHJ1Y3QgX1NUTF9tdXRleF9sb2NrDQogIHsNCg0KDQoN
Cg0KDQogICAgX19ndGhyZWFkX211dGV4X3QgX01fbG9jazsNCg0KICAgIHZvaWQNCiAgICBfTV9p
bml0aWFsaXplKCkNCiAgICB7DQojIDE4NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
dGhyZWFkcy5oIiAzDQogICAgfQ0KDQogICAgdm9pZA0KICAgIF9NX2FjcXVpcmVfbG9jaygpDQog
ICAgew0KDQoNCg0KICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX2xvY2spOw0KICAgIH0N
Cg0KICAgIHZvaWQNCiAgICBfTV9yZWxlYXNlX2xvY2soKQ0KICAgIHsNCg0KDQoNCiAgICAgIF9f
Z3RocmVhZF9tdXRleF91bmxvY2soJl9NX2xvY2spOw0KICAgIH0NCiAgfTsNCiMgMjIwICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDMNCiAgc3RydWN0IF9TVExfYXV0
b19sb2NrDQogIHsNCiAgICBfU1RMX211dGV4X2xvY2smIF9NX2xvY2s7DQoNCiAgICBfU1RMX2F1
dG9fbG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykNCiAgICB7
IF9NX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0NCg0KICAgIH5fU1RMX2F1dG9fbG9jaygpIHsg
X01fbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQ0KDQogIHByaXZhdGU6DQogICAgdm9pZCBvcGVy
YXRvcj0oY29uc3QgX1NUTF9hdXRvX2xvY2smKTsNCiAgICBfU1RMX2F1dG9fbG9jayhjb25zdCBf
U1RMX2F1dG9fbG9jayYpOw0KICB9Ow0KDQp9DQojIDg3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9hbGxvYy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KIyA5OCAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMw0KICBjbGFzcyBfX25ld19hbGxvYw0KICB7
DQogIHB1YmxpYzoNCiAgICBzdGF0aWMgdm9pZCoNCiAgICBhbGxvY2F0ZShzaXplX3QgX19uKQ0K
ICAgIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KF9fbik7IH0NCg0KICAgIHN0YXRpYyB2b2lkDQog
ICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCkNCiAgICB7IDo6b3BlcmF0b3IgZGVsZXRl
KF9fcCk7IH0NCiAgfTsNCiMgMTIxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxv
Yy5oIiAzDQogIHRlbXBsYXRlIDxpbnQgX19pbnN0Pg0KICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9j
X3RlbXBsYXRlDQogICAgew0KICAgIHByaXZhdGU6DQogICAgICBzdGF0aWMgdm9pZCogX1Nfb29t
X21hbGxvYyhzaXplX3QpOw0KICAgICAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZvaWQq
LCBzaXplX3QpOw0KICAgICAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRs
ZXIpKCk7DQoNCiAgICBwdWJsaWM6DQogICAgICBzdGF0aWMgdm9pZCoNCiAgICAgIGFsbG9jYXRl
KHNpemVfdCBfX24pDQogICAgICB7DQogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9f
bik7DQogICAgICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxsb2Mo
X19uKTsNCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0Ow0KICAgICAgfQ0KDQogICAgICBzdGF0aWMg
dm9pZA0KICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApDQogICAgICB7IGZyZWUo
X19wKTsgfQ0KDQogICAgICBzdGF0aWMgdm9pZCoNCiAgICAgIHJlYWxsb2NhdGUodm9pZCogX19w
LCBzaXplX3QgLCBzaXplX3QgX19uZXdfc3opDQogICAgICB7DQogICAgICAgIHZvaWQqIF9fcmVz
dWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsNCiAgICAgICAgaWYgKDAgPT0gX19yZXN1bHQp
IF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7DQogICAgICAgIHJldHVy
biBfX3Jlc3VsdDsNCiAgICAgIH0NCg0KICAgICAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9j
X2hhbmRsZXIodm9pZCAoKl9fZikoKSkpKCkNCiAgICAgIHsNCiAgICAgICAgdm9pZCAoKiBfX29s
ZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOw0KICAgICAgICBfX21hbGxvY19hbGxv
Y19vb21faGFuZGxlciA9IF9fZjsNCiAgICAgICAgcmV0dXJuKF9fb2xkKTsNCiAgICAgIH0NCiAg
ICB9Ow0KDQoNCiAgdGVtcGxhdGUgPGludCBfX2luc3Q+DQogICAgdm9pZCAoKiBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7
DQoNCiAgdGVtcGxhdGUgPGludCBfX2luc3Q+DQogICAgdm9pZCoNCiAgICBfX21hbGxvY19hbGxv
Y190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pDQogICAgew0KICAg
ICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOw0KICAgICAgdm9pZCogX19yZXN1bHQ7
DQoNCiAgICAgIGZvciAoOzspDQogICAgICAgIHsNCiAgICAgICAgICBfX215X21hbGxvY19oYW5k
bGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7DQogICAgICAgICAgaWYgKDAgPT0gX19t
eV9tYWxsb2NfaGFuZGxlcikNCiAgICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsN
CiAgICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7DQogICAgICAgICAgX19yZXN1bHQg
PSBtYWxsb2MoX19uKTsNCiAgICAgICAgICBpZiAoX19yZXN1bHQpDQogICAgICAgICAgICByZXR1
cm4oX19yZXN1bHQpOw0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRlIDxpbnQgX19pbnN0
Pg0KICAgIHZvaWQqDQogICAgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29t
X3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQ0KICAgIHsNCiAgICAgIHZvaWQgKCogX19t
eV9tYWxsb2NfaGFuZGxlcikoKTsNCiAgICAgIHZvaWQqIF9fcmVzdWx0Ow0KDQogICAgICBmb3Ig
KDs7KQ0KICAgICAgICB7DQogICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9j
X2FsbG9jX29vbV9oYW5kbGVyOw0KICAgICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRs
ZXIpDQogICAgICAgICAgICBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7DQogICAgICAgICAgKCpf
X215X21hbGxvY19oYW5kbGVyKSgpOw0KICAgICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3As
IF9fbik7DQogICAgICAgICAgaWYgKF9fcmVzdWx0KQ0KICAgICAgICAgICAgcmV0dXJuKF9fcmVz
dWx0KTsNCiAgICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdHlwZWRlZiBfX25ld19hbGxv
YyBfX21lbV9pbnRlcmZhY2U7DQojIDIxOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxsb2MuaCIgMw0KICB0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCiAgY2xhc3Mg
X19zaW1wbGVfYWxsb2MNCiAgew0KICBwdWJsaWM6DQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUo
c2l6ZV90IF9fbikNCiAgICB7IHJldHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikgX0FsbG9jOjph
bGxvY2F0ZShfX24gKiBzaXplb2YgKF9UcCkpOyB9DQoNCiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0
ZSgpDQogICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsg
fQ0KDQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikNCiAg
ICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mIChf
VHApKTsgfQ0KDQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkNCiAgICB7IF9B
bGxvYzo6ZGVhbGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0NCiAgfTsNCiMgMjUxICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzDQogIHRlbXBsYXRlIDxjbGFzcyBf
QWxsb2M+DQogIGNsYXNzIF9fZGVidWdfYWxsb2MNCiAgew0KICBwcml2YXRlOg0KICAgIGVudW0g
e19TX2V4dHJhID0gOH07DQoNCg0KICBwdWJsaWM6DQoNCiAgICBzdGF0aWMgdm9pZCogYWxsb2Nh
dGUoc2l6ZV90IF9fbikNCiAgICB7DQogICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxs
b2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsNCiAgICAgICooc2l6ZV90KilfX3Jl
c3VsdCA9IF9fbjsNCiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOw0KICAg
IH0NCg0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQ0K
ICAgIHsNCiAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJh
Ow0KICAgICAgKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/ICh2b2lkKTAgOiBfX2Fzc2Vy
dCgiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIsIDI3MCwgIiooc2l6ZV90
KilfX3JlYWxfcCA9PSBfX24iKSk7DQogICAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19yZWFsX3As
IF9fbiArIChpbnQpIF9TX2V4dHJhKTsNCiAgICB9DQoNCiAgICBzdGF0aWMgdm9pZCogcmVhbGxv
Y2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KQ0KICAgIHsN
CiAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOw0KICAg
ICAgKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3opID8gKHZvaWQpMCA6IF9fYXNzZXJ0
KCIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiwgMjc3LCAiKihzaXplX3Qq
KV9fcmVhbF9wID09IF9fb2xkX3N6IikpOw0KICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hhciop
DQogICAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50KSBf
U19leHRyYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zeiAr
IChpbnQpIF9TX2V4dHJhKTsNCiAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6Ow0K
ICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7DQogICAgfQ0KICB9Ow0KIyAz
MjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMNCnRlbXBsYXRlPGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KICBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGUNCiAgew0KICBwcml2YXRlOg0KICAgIGVudW0ge19BTElHTiA9IDh9Ow0KICAgIGVudW0ge19N
QVhfQllURVMgPSAxMjh9Ow0KICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRFUyAvIF9B
TElHTn07DQoNCiAgICB1bmlvbiBfT2JqDQogICAgew0KICAgICAgdW5pb24gX09iaiogX01fZnJl
ZV9saXN0X2xpbms7DQogICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOw0KICAgIH07DQoNCiAg
ICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsNCg0KDQog
ICAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7DQogICAgc3RhdGljIGNoYXIqIF9TX2VuZF9m
cmVlOw0KICAgIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOw0KDQogICAgc3RhdGljIF9TVExf
bXV0ZXhfbG9jayBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOw0KDQogICAgc3RhdGljIHNpemVfdA0K
ICAgIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQ0KICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMp
ICsgKHNpemVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7IH0NCg0KICAg
IHN0YXRpYyBzaXplX3QNCiAgICBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRlcykNCiAg
ICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpX0FMSUdOLTEpLyhzaXplX3QpX0FMSUdO
IC0gMSk7IH0NCg0KDQoNCiAgICBzdGF0aWMgdm9pZCoNCiAgICBfU19yZWZpbGwoc2l6ZV90IF9f
bik7DQoNCg0KDQogICAgc3RhdGljIGNoYXIqDQogICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9f
c2l6ZSwgaW50JiBfX25vYmpzKTsNCg0KDQoNCiAgICBjbGFzcyBfTG9jaw0KICAgIHsNCiAgICBw
dWJsaWM6DQogICAgICBfTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3Jf
bG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQ0KICAgICAgfl9Mb2NrKCkgeyBpZiAoX190aHJlYWRz
KSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9DQogICAgfSBfX2F0
dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOw0KICAgIGZyaWVuZCBjbGFzcyBfTG9jazsNCg0KICBw
dWJsaWM6DQoNCiAgICBzdGF0aWMgdm9pZCoNCiAgICBhbGxvY2F0ZShzaXplX3QgX19uKQ0KICAg
IHsNCiAgICAgIHZvaWQqIF9fcmV0ID0gMDsNCg0KICAgICAgaWYgKF9fbiA+IChzaXplX3QpIF9N
QVhfQllURVMpDQogICAgICAgIF9fcmV0ID0gX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShfX24p
Ow0KICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlf
ZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0DQogICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4
KF9fbik7DQoNCg0KDQogICAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOw0KICAgICAgICAg
IF9PYmoqIF9fcmVzdHJpY3RfXyBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAgICAg
ICBpZiAoX19yZXN1bHQgPT0gMCkNCiAgICAgICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3Jv
dW5kX3VwKF9fbikpOw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg
ICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01fZnJlZV9saXN0X2xpbms7DQogICAg
ICAgICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAg
ICAgIHJldHVybiBfX3JldDsNCiAgICB9Ow0KDQoNCiAgICBzdGF0aWMgdm9pZA0KICAgIGRlYWxs
b2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQ0KICAgIHsNCiAgICAgIGlmIChfX24gPiAoc2l6
ZV90KSBfTUFYX0JZVEVTKQ0KICAgICAgICBfX21lbV9pbnRlcmZhY2U6OmRlYWxsb2NhdGUoX19w
LCBfX24pOw0KICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgX09iaiogdm9sYXRpbGUq
IF9fbXlfZnJlZV9saXN0DQogICAgICAgICAgICA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0
X2luZGV4KF9fbik7DQogICAgICAgICAgX09iaiogX19xID0gKF9PYmoqKV9fcDsNCg0KDQoNCiAg
ICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7DQogICAgICAgICAgX19xIC0+IF9NX2ZyZWVf
bGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0Ow0KICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9
IF9fcTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHN0YXRpYyB2b2lkKg0KICAgIHJlYWxsb2Nh
dGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7DQogIH07DQoN
Cg0KICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4NCiAgICBpbmxpbmUgYm9v
bA0KICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk
cywgX19pbnN0PiYsDQogICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLCBfX2luc3Q+JikNCiAgICB7IHJldHVybiB0cnVlOyB9DQoNCiAgdGVtcGxh
dGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVy
YXRvciE9KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4m
LA0KICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk
cywgX19pbnN0PiYpDQogICAgeyByZXR1cm4gZmFsc2U7IH0NCg0KDQoNCg0KDQogIHRlbXBsYXRl
PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KICAgIGNoYXIqDQogICAgX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9f
c2l6ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpDQogICAgew0KICAgICAgY2hhciogX19yZXN1bHQ7
DQogICAgICBzaXplX3QgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7DQogICAgICBz
aXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBfU19zdGFydF9mcmVlOw0KDQogICAg
ICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpDQogICAgICB7DQogICAgICAgIF9f
cmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsNCiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFs
X2J5dGVzOw0KICAgICAgICByZXR1cm4oX19yZXN1bHQpOw0KICAgICAgfQ0KICAgICAgZWxzZSBp
ZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkNCiAgICAgICAgew0KICAgICAgICAgIF9fbm9ianMg
PSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsNCiAgICAgICAgICBfX3RvdGFsX2J5dGVzID0g
X19zaXplICogX19ub2JqczsNCiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7DQog
ICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOw0KICAgICAgICAgIHJldHVy
bihfX3Jlc3VsdCk7DQogICAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAgICAg
IHNpemVfdCBfX2J5dGVzX3RvX2dldCA9DQogICAgICAgICAgICAyICogX190b3RhbF9ieXRlcyAr
IF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsNCg0KICAgICAgICAgIGlmIChfX2J5dGVz
X2xlZnQgPiAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSog
X19teV9mcmVlX2xpc3QgPQ0KICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVs
aXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7DQoNCiAgICAgICAgICAgICAgKChfT2JqKilfU19zdGFy
dF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAgICAg
ICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7DQogICAgICAgICAg
ICB9DQogICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKikgX19tZW1faW50ZXJmYWNlOjph
bGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7DQogICAgICAgICAgaWYgKDAgPT0gX1Nfc3RhcnRfZnJl
ZSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgc2l6ZV90IF9faTsNCiAgICAgICAgICAg
ICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0Ow0KICAgICAgICAgICAgICBfT2JqKiBf
X3A7DQoNCg0KDQogICAgICAgICAgICAgIF9faSA9IF9fc2l6ZTsNCiAgICAgICAgICAgICAgZm9y
ICg7IF9faSA8PSAoc2l6ZV90KSBfTUFYX0JZVEVTOyBfX2kgKz0gKHNpemVfdCkgX0FMSUdOKQ0K
ICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1Nf
ZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsNCiAgICAgICAgICAgICAgICAgIF9f
cCA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAgICAgICAgICAgICAgIGlmICgwICE9IF9fcCkNCiAg
ICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICpfX215X2ZyZWVfbGlz
dCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGluazsNCiAgICAgICAgICAgICAgICAgICAgICBfU19z
dGFydF9mcmVlID0gKGNoYXIqKV9fcDsNCiAgICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJl
ZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2k7DQogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKF9T
X2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOw0KDQoNCiAgICAgICAgICAgICAgICAgICAg
fQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSAwOw0KICAg
ICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fbWVtX2ludGVyZmFjZTo6YWxsb2Nh
dGUoX19ieXRlc190b19nZXQpOw0KDQoNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBfU19oZWFw
X3NpemUgKz0gX19ieXRlc190b19nZXQ7DQogICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFy
dF9mcmVlICsgX19ieXRlc190b19nZXQ7DQogICAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9j
KF9fc2l6ZSwgX19ub2JqcykpOw0KICAgICAgICB9DQogICAgfQ0KDQoNCg0KDQoNCiAgdGVtcGxh
dGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQogICAgdm9pZCoNCiAgICBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikN
CiAgICB7DQogICAgICBpbnQgX19ub2JqcyA9IDIwOw0KICAgICAgY2hhciogX19jaHVuayA9IF9T
X2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7DQogICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9m
cmVlX2xpc3Q7DQogICAgICBfT2JqKiBfX3Jlc3VsdDsNCiAgICAgIF9PYmoqIF9fY3VycmVudF9v
Ymo7DQogICAgICBfT2JqKiBfX25leHRfb2JqOw0KICAgICAgaW50IF9faTsNCg0KICAgICAgaWYg
KDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOw0KICAgICAgX19teV9mcmVlX2xpc3QgPSBf
U19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOw0KDQoNCiAgICAgIF9fcmVzdWx0
ID0gKF9PYmoqKV9fY2h1bms7DQogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX25leHRfb2JqID0g
KF9PYmoqKShfX2NodW5rICsgX19uKTsNCiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgew0K
ICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsNCiAgICAgICAgX19uZXh0X29iaiA9
IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmogKyBfX24pOw0KICAgICAgICBpZiAoX19ub2JqcyAt
IDEgPT0gX19pKSB7DQogICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGlu
ayA9IDA7DQogICAgICAgICAgYnJlYWs7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgX19j
dXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7DQogICAgICAgIH0N
CiAgICAgIH0NCiAgICAgIHJldHVybihfX3Jlc3VsdCk7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8
Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4NCiAgICB2b2lkKg0KICAgIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkKiBfX3AsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29s
ZF9zeiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IF9fbmV3X3N6KQ0KICAgIHsNCiAgICAgIHZvaWQqIF9fcmVzdWx0Ow0KICAg
ICAgc2l6ZV90IF9fY29weV9zejsNCg0KICAgICAgaWYgKF9fb2xkX3N6ID4gKHNpemVfdCkgX01B
WF9CWVRFUyAmJiBfX25ld19zeiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsNCiAgICAgICAgcmV0
dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOw0KICAgICAgfQ0KICAgICAgaWYgKF9TX3JvdW5k
X3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikpIHJldHVybihfX3ApOw0KICAg
ICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7DQogICAgICBfX2NvcHlfc3ogPSBfX25l
d19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6Ow0KICAgICAgbWVtY3B5KF9fcmVz
dWx0LCBfX3AsIF9fY29weV9zeik7DQogICAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOw0K
ICAgICAgcmV0dXJuKF9fcmVzdWx0KTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVh
ZHMsIGludCBfX2luc3Q+DQogIF9TVExfbXV0ZXhfbG9jaw0KICBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrDQogID0geyAw
IH07DQoNCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQogIGNoYXIqIF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUg
PSAwOw0KDQogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KICBjaGFyKiBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19lbmRfZnJlZSA9
IDA7DQoNCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQogIHNpemVfdCBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19oZWFwX3NpemUg
PSAwOw0KDQogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KICB0eXBlbmFt
ZSBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfT2JqKiB2b2xh
dGlsZQ0KICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19m
cmVlX2xpc3RbX05GUkVFTElTVFNdOw0KDQogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPHRydWUsIDA+IF9fYWxsb2M7DQogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PGZhbHNlLCAwPiBfX3NpbmdsZV9jbGllbnRfYWxsb2M7DQojIDYxMyAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmNsYXNzIGFs
bG9jYXRvcg0Kew0KICB0eXBlZGVmIF9fYWxsb2MgX0FsbG9jOw0KcHVibGljOg0KICB0eXBlZGVm
IHNpemVfdCBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsN
CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2lu
dGVyOw0KICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KICB0eXBlZGVmIGNvbnN0IF9UcCYgY29u
c3RfcmVmZXJlbmNlOw0KICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KDQogIHRlbXBsYXRlIDxj
bGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsNCiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBv
dGhlcjsNCiAgfTsNCg0KICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9DQogIGFsbG9jYXRvcihjb25z
dCBhbGxvY2F0b3ImKSB0aHJvdygpIHt9DQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0
b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSB7fQ0KICB+YWxsb2NhdG9yKCkgdGhy
b3coKSB7fQ0KDQogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVy
biAmX194OyB9DQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBj
b25zdCB7IHJldHVybiAmX194OyB9DQoNCg0KDQogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9f
biwgY29uc3Qgdm9pZCogPSAwKSB7DQogICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8
X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpDQogICAgICAgICAgICAg
ICAgICAgIDogMDsNCiAgfQ0KDQoNCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXpl
X3R5cGUgX19uKQ0KICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9U
cCkpOyB9DQoNCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQ0KICAgIHsgcmV0
dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQ0KDQogIHZvaWQgY29uc3RydWN0KHBvaW50
ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0NCiAgdm9p
ZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9DQp9Ow0KDQp0ZW1wbGF0ZTw+
DQpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gew0KcHVibGljOg0KICB0eXBlZGVmIHNpemVfdCBzaXpl
X3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB2
b2lkKiBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7DQogIHR5
cGVkZWYgdm9pZCB2YWx1ZV90eXBlOw0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3Qg
cmViaW5kIHsNCiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsNCiAgfTsNCn07DQoN
Cg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikNCnsNCiAgcmV0
dXJuIHRydWU7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1Qy
PiYpDQp7DQogIHJldHVybiBmYWxzZTsNCn0NCiMgNjk1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9hbGxvYy5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpz
dHJ1Y3QgX19hbGxvY2F0b3INCnsNCiAgX0FsbG9jIF9fdW5kZXJseWluZ19hbGxvYzsNCg0KICB0
eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf
dHlwZTsNCiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25z
dF9wb2ludGVyOw0KICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KICB0eXBlZGVmIGNvbnN0IF9U
cCYgY29uc3RfcmVmZXJlbmNlOw0KICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KDQogIHRlbXBs
YXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsNCiAgICB0eXBlZGVmIF9fYWxsb2NhdG9y
PF9UcDEsIF9BbGxvYz4gb3RoZXI7DQogIH07DQoNCiAgX19hbGxvY2F0b3IoKSB0aHJvdygpIHt9
DQogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yJiBfX2EpIHRocm93KCkNCiAgICA6IF9f
dW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQ0KICB0ZW1wbGF0ZSA8
Y2xhc3MgX1RwMT4NCiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9j
PiYgX19hKSB0aHJvdygpDQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWlu
Z19hbGxvYykge30NCiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQ0KDQogIHBvaW50ZXIgYWRk
cmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9DQogIGNvbnN0X3BvaW50
ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9DQoN
Cg0KICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgew0KICAg
IHJldHVybiBfX24gIT0gMA0KICAgICAgICA/IHN0YXRpY19jYXN0PF9UcCo+KF9fdW5kZXJseWlu
Z19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpDQogICAgICAgIDogMDsNCiAgfQ0K
DQoNCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQ0KICAgIHsg
X191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0N
Cg0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpDQogICAgeyByZXR1cm4gc2l6
ZV90KC0xKSAvIHNpemVvZihfVHApOyB9DQoNCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3As
IGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQ0KICB2b2lkIGRlc3Ry
b3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0NCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBf
QWxsb2M+DQpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsNCiAgdHlwZWRlZiBzaXpl
X3Qgc2l6ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5
cGVkZWYgdm9pZCogcG9pbnRlcjsNCiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVy
Ow0KICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4g
c3RydWN0IHJlYmluZCB7DQogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90
aGVyOw0KICB9Ow0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0KaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEs
DQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYg
X19hMikNCnsNCiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRl
cmx5aW5nX2FsbG9jOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19h
MSwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+
JiBfX2EyKQ0Kew0KICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5fX3Vu
ZGVybHlpbmdfYWxsb2M7DQp9DQoNCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxpbnQgaW5zdD4NCmlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4m
LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxp
bnN0PiYpDQp7DQogIHJldHVybiB0cnVlOw0KfQ0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCmlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
PiYsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl
PF9faW5zdD4mKQ0Kew0KICByZXR1cm4gZmFsc2U7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfQWxs
b2M+DQppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYs
DQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsN
CiAgcmV0dXJuIHRydWU7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+DQppbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsDQogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsNCiAgcmV0dXJuIGZhbHNl
Ow0KfQ0KIyA4NDAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMNCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0
cw0Kew0KICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSBmYWxzZTsNCiAgdHlw
ZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgYWxs
b2NhdG9yX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9y
Pg0KY29uc3QgYm9vbCBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNl
bGVzczsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPg0Kc3RydWN0IF9BbGxv
Y190cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1RwMT4gPg0Kew0KICBzdGF0aWMgY29uc3QgYm9vbCBf
U19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19h
bGxvYz4gX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5
cGU7DQp9Ow0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0Pg0Kc3RydWN0
IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4NCnsN
CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBf
X3NpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxs
b2NfdHlwZTsNCiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBs
YXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9U
cCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAs
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPg0Kew0KICBzdGF0
aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIF9fc2ltcGxl
X2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+
DQogICAgICAgICAgX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2Rl
ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4NCiAgICAgICAgICBhbGxv
Y2F0b3JfdHlwZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0K
c3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPg0Kew0KICBz
dGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIF9fc2lt
cGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7DQogIHR5
cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3Jf
dHlwZTsNCn07DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGludCBf
X2luc3Q+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsDQogICAgICAgICAgICAgICAgICAgICBf
X2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPg0Kew0K
ICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIF9f
c2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxv
Y190eXBlOw0KICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0Pg0Kc3RydWN0IF9BbGxvY190cmFp
dHM8X1RwLA0KICAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
LCBfX2luc3Q+ID4gPg0Kew0KICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0
cnVlOw0KICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyLF9faW5zdD4gPg0KICAgICAgICAgIF9BbGxvY190eXBlOw0KICB0eXBlZGVmIF9f
YWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPg0K
ICAgICAgICAgIGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfVHAxLCBjbGFzcyBfQWxsb2M+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxs
b2NhdG9yPF9UcDEsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4NCnsNCiAgc3RhdGljIGNvbnN0
IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxf
VHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOw0KICB0eXBlZGVmIF9fYWxs
b2NhdG9yPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0K
DQoNCg0KDQoNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjxjaGFyPjsNCiAgZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjx3Y2hhcl90PjsNCg0KDQoNCiAgZXh0ZXJuIHRl
bXBsYXRlIGNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPjsNCg0KfQ0KIyA1
NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMw0KIyA2NyAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCg0KDQoN
CiAgdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KICAgIGlubGluZSB2b2lkDQogICAg
X0NvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKQ0KICAgIHsgbmV3IChzdGF0
aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKF9fdmFsdWUpOyB9DQoNCg0KDQoNCg0KDQoNCiAgdGVt
cGxhdGUgPGNsYXNzIF9UMT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIF9Db25zdHJ1Y3QoX1QxKiBf
X3ApDQogICAgeyBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoKTsgfQ0KIyA5OCAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDMNCiAgdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQogICAgaW5saW5lIHZvaWQNCiAgICBfX2Rlc3Ryb3lf
YXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9f
ZmFsc2VfdHlwZSkNCiAgICB7IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkg
X0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQ0KIyAxMTIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2NvbnN0cnVjdC5oIiAzDQogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPg0K
ICAgIGlubGluZSB2b2lkDQogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9y
d2FyZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkNCiAgICB7IH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxh
dGUgPGNsYXNzIF9UcD4NCiAgICBpbmxpbmUgdm9pZA0KICAgIF9EZXN0cm95KF9UcCogX19wb2lu
dGVyKQ0KICAgIHsgX19wb2ludGVyLT5+X1RwKCk7IH0NCiMgMTM0ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMw0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvcj4NCiAgICBpbmxpbmUgdm9pZA0KICAgIF9EZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3Ig
X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpDQogICAgew0KICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUNCiAg
ICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9fdHlwZV90cmFpdHM8X1ZhbHVlX3R5cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yDQogICAg
ICAgICAgICAgICAgICAgICAgIF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KDQogICAgICBfX2Rl
c3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7DQog
ICAgfQ0KfQ0KIyA1NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMNCg0KIyAxICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMw0KIyA2NiAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzDQpuYW1lc3Bh
Y2Ugc3RkDQp7DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9Gb3J3YXJkSXRlcj4NCiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyDQogICAgX191bmluaXRpYWxp
emVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpDQogICAgeyByZXR1cm4gY29weShfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0
ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4NCiAgICBfRm9yd2FyZEl0ZXINCiAgICBfX3VuaW5p
dGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpDQogICAgew0KICAgICAgX0Zv
cndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7DQogICAgICB0cnkgew0KICAgICAgICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpDQogICAgICAgICAgX0NvbnN0
cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7DQogICAgICAgIHJldHVybiBfX2N1cjsNCiAgICAgIH0N
CiAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgew0KICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0
LCBfX2N1cik7DQogICAgICAgICAgdGhyb3c7DQogICAgICAgIH0NCiAgICB9DQojIDEwNiAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4NCiAgICBpbmxpbmUg
X0ZvcndhcmRJdGVyDQogICAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkNCiAgICB7DQogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBl
IF9WYWx1ZVR5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVl
VHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7DQogICAgICByZXR1cm4gX191bmluaXRpYWxpemVk
X2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7DQogICAgfQ0K
DQogIGlubGluZSBjaGFyKg0KICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJz
dCwgY29uc3QgY2hhciogX19sYXN0LCBjaGFyKiBfX3Jlc3VsdCkNCiAgew0KICAgIG1lbW1vdmUo
X19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmlyc3QpOw0KICAgIHJldHVybiBfX3Jlc3Vs
dCArIChfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgfQ0KDQogIGlubGluZSB3Y2hhcl90Kg0KICB1bmlu
aXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19s
YXN0LA0KICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpDQogIHsNCiAgICBt
ZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19m
aXJzdCkpOw0KICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgfQ0K
DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4NCiAg
ICBpbmxpbmUgdm9pZA0KICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQ0KICAgIHsgZmlsbChfX2ZpcnN0LCBfX2xh
c3QsIF9feCk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9UcD4NCiAgICB2b2lkDQogICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQ0KICAgIHsNCiAgICAgIF9Gb3J3YXJk
SXRlciBfX2N1ciA9IF9fZmlyc3Q7DQogICAgICB0cnkgew0KICAgICAgICBmb3IgKCA7IF9fY3Vy
ICE9IF9fbGFzdDsgKytfX2N1cikNCiAgICAgICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7
DQogICAgICB9DQogICAgICBjYXRjaCguLi4pDQogICAgICAgIHsNCiAgICAgICAgICBfRGVzdHJv
eShfX2ZpcnN0LCBfX2N1cik7DQogICAgICAgICAgdGhyb3c7DQogICAgICAgIH0NCiAgICB9DQoj
IDE2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPg0KICAgIGlubGlu
ZSB2b2lkDQogICAgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9feCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5
cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omlz
X1BPRF90eXBlIF9Jc19QT0Q7DQogICAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJz
dCwgX19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7DQogICAgfQ0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+DQogICAgaW5s
aW5lIF9Gb3J3YXJkSXRlcg0KICAgIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQ0KICAgIHsNCiAgICAgIHJldHVybiBmaWxsX24o
X19maXJzdCwgX19uLCBfX3gpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+DQogICAgX0ZvcndhcmRJdGVyDQog
ICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXpl
IF9fbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19m
YWxzZV90eXBlKQ0KICAgIHsNCiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7DQog
ICAgICB0cnkgew0KICAgICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQ0KICAg
ICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsNCiAgICAgICAgcmV0dXJuIF9fY3VyOw0K
ICAgICAgfQ0KICAgICAgY2F0Y2goLi4uKQ0KICAgICAgICB7DQogICAgICAgICAgX0Rlc3Ryb3ko
X19maXJzdCwgX19jdXIpOw0KICAgICAgICAgIHRocm93Ow0KICAgICAgICB9DQogICAgfQ0KIyAy
MTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMw0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBf
VHA+DQogICAgaW5saW5lIF9Gb3J3YXJkSXRlcg0KICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194KQ0KICAgIHsNCiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVl
X3R5cGUgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxf
VmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsNCiAgICAgIHJldHVybiBfX3VuaW5pdGlh
bGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsNCiAgICB9DQoj
IDIyNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlw
ZW5hbWUgX0ZvcndhcmRJdGVyPg0KICAgIGlubGluZSBfRm9yd2FyZEl0ZXINCiAgICBfX3VuaW5p
dGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh
c3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs
IF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19yZXN1bHQpDQogICAgew0KICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gdW5p
bml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7DQogICAgICB0cnkg
ew0KICAgICAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBf
X21pZCk7DQogICAgICB9DQogICAgICBjYXRjaCguLi4pDQogICAgICAgIHsNCiAgICAgICAgICBf
RGVzdHJveShfX3Jlc3VsdCwgX19taWQpOw0KICAgICAgICAgIHRocm93Ow0KICAgICAgICB9DQog
ICAgfQ0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg
X1RwLCB0eXBlbmFtZSBfSW5wdXRJdGVyPg0KICAgIGlubGluZSBfRm9yd2FyZEl0ZXINCiAgICBf
X3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJ
dGVyIF9fbWlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0KQ0KICAgIHsNCiAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX3Jlc3VsdCwg
X19taWQsIF9feCk7DQogICAgICB0cnkgew0KICAgICAgICByZXR1cm4gdW5pbml0aWFsaXplZF9j
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOw0KICAgICAgfQ0KICAgICAgY2F0Y2goLi4uKQ0K
ICAgICAgICB7DQogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsNCiAgICAgICAg
ICB0aHJvdzsNCiAgICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBpbmxp
bmUgdm9pZA0KICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBfX2ZpcnN0
MSwgX0lucHV0SXRlciBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQ0KICAgIHsNCiAgICAgIF9Gb3J3YXJkSXRl
ciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3Qy
KTsNCiAgICAgIHRyeSB7DQogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX21pZDIsIF9fbGFz
dDIsIF9feCk7DQogICAgICB9DQogICAgICBjYXRjaCguLi4pDQogICAgICAgIHsNCiAgICAgICAg
ICBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsNCiAgICAgICAgICB0aHJvdzsNCiAgICAgICAg
fQ0KICAgIH0NCg0KfQ0KIyA1OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMNCiMg
MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAxIDMN
CiMgNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIg
Mw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KDQogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXJhdG9yLCBjbGFzcyBfVHA+DQogIGNsYXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9yDQogICAgOiBw
dWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9p
ZD4NCiAgICB7DQogICAgcHJvdGVjdGVkOg0KICAgICAgX0ZvcndhcmRJdGVyYXRvciBfTV9pdGVy
Ow0KDQogICAgcHVibGljOg0KICAgICAgZXhwbGljaXQNCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJh
dG9yKF9Gb3J3YXJkSXRlcmF0b3IgX194KSA6IF9NX2l0ZXIoX194KSB7fQ0KDQogICAgICByYXdf
c3RvcmFnZV9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9DQoN
CiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UcCYg
X19lbGVtZW50KQ0KICAgICAgew0KICAgICAgICBfQ29uc3RydWN0KCYqX01faXRlciwgX19lbGVt
ZW50KTsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0KDQogICAgICByYXdfc3RvcmFn
ZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+Jg0KICAgICAgb3BlcmF0b3IrKygpDQog
ICAgICB7DQogICAgICAgICsrX01faXRlcjsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAg
fQ0KDQogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+DQog
ICAgICBvcGVyYXRvcisrKGludCkNCiAgICAgIHsNCiAgICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0
b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBfX3RtcCA9ICp0aGlzOw0KICAgICAgICArK19NX2l0
ZXI7DQogICAgICAgIHJldHVybiBfX3RtcDsNCiAgICAgIH0NCiAgICB9Ow0KfQ0KIyA2MCAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMNCg0KDQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0K
IyA3NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzDQp0ZW1wbGF0ZSA8dHlwZW5hbWUg
X1RwPg0KcGFpcjxfVHAqLCBwdHJkaWZmX3Q+DQpfX2dldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRp
ZmZfdCBfX2xlbiwgX1RwKikNCnsNCiAgaWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcg
LyBzaXplb2YoX1RwKSkpDQogICAgX19sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7DQoN
CiAgd2hpbGUgKF9fbGVuID4gMCkgew0KICAgIF9UcCogX190bXAgPSAoX1RwKikgc3RkOjptYWxs
b2MoKHN0ZDo6c2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOw0KICAgIGlmIChfX3RtcCAhPSAw
KQ0KICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PihfX3RtcCwgX19sZW4pOw0KICAg
IF9fbGVuIC89IDI7DQogIH0NCg0KICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAq
KTAsIDApOw0KfQ0KIyAxMDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMw0KdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgcGFpcjxfVHAqLHB0cmRpZmZfdD4NCiAgZ2V0X3Rl
bXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuKQ0KICB7DQogICAgcmV0dXJuIF9fZ2V0X3Rl
bXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsNCiAgfQ0KIyAxMjAgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL21lbW9yeSIgMw0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICB2b2lkDQogIHJl
dHVybl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKQ0KICB7DQogICAgc3RkOjpmcmVlKF9fcCk7
DQogIH0NCiMgMTM1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMNCnRlbXBsYXRlPHR5
cGVuYW1lIF9UcDE+DQogIHN0cnVjdCBhdXRvX3B0cl9yZWYNCnsNCiAgIF9UcDEqIF9NX3B0cjsN
Cg0KICAgZXhwbGljaXQNCiAgIGF1dG9fcHRyX3JlZihfVHAxKiBfX3ApDQogICA6IF9NX3B0cihf
X3ApIHt9DQp9Ow0KIyAxNzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMw0KdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPg0KICBjbGFzcyBhdXRvX3B0cg0Kew0KcHJpdmF0ZToNCiAgX1RwKiBf
TV9wdHI7DQoNCnB1YmxpYzoNCg0KICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7DQoNCg0KDQoN
Cg0KDQoNCiAgZXhwbGljaXQNCiAgYXV0b19wdHIoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0aHJv
dygpDQogIDogX01fcHRyKF9fcCkgeyB9DQojIDIwMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVt
b3J5IiAzDQogIGF1dG9fcHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkNCiAgOiBfTV9wdHIoX19h
LnJlbGVhc2UoKSkgeyB9DQojIDIxNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+DQogICAgYXV0b19wdHIoYXV0b19wdHI8X1RwMT4mIF9f
YSkgdGhyb3coKQ0KICAgIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHsgfQ0KIyAyMjYgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMw0KICBhdXRvX3B0ciYNCiAgb3BlcmF0b3I9KGF1dG9f
cHRyJiBfX2EpIHRocm93KCkNCiAgICB7DQogICAgICByZXNldChfX2EucmVsZWFzZSgpKTsNCiAg
ICAgIHJldHVybiAqdGhpczsNCiAgICB9DQojIDI0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVt
b3J5IiAzDQogIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAxPg0KICAgIGF1dG9fcHRyJg0KICAgIG9w
ZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpDQogICAgew0KICAgICAgcmVzZXQo
X19hLnJlbGVhc2UoKSk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KIyAyNjMgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMw0KICB+YXV0b19wdHIoKSB7IGRlbGV0ZSBfTV9wdHI7
IH0NCiMgMjczICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMNCiAgZWxlbWVudF90eXBl
Jg0KICBvcGVyYXRvciooKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICpfTV9wdHI7IH0NCg0KDQoN
Cg0KDQoNCg0KICBlbGVtZW50X3R5cGUqDQogIG9wZXJhdG9yLT4oKSBjb25zdCB0aHJvdygpIHsg
cmV0dXJuIF9NX3B0cjsgfQ0KIyAyOTUgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMw0K
ICBlbGVtZW50X3R5cGUqDQogIGdldCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01fcHRyOyB9
DQojIDMwOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzDQogIGVsZW1lbnRfdHlwZSoN
CiAgcmVsZWFzZSgpIHRocm93KCkNCiAgICB7DQogICAgICBlbGVtZW50X3R5cGUqIF9fdG1wID0g
X01fcHRyOw0KICAgICAgX01fcHRyID0gMDsNCiAgICAgIHJldHVybiBfX3RtcDsNCiAgICB9DQoj
IDMyNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzDQogIHZvaWQNCiAgcmVzZXQoZWxl
bWVudF90eXBlKiBfX3AgPSAwKSB0aHJvdygpDQogICAgew0KICAgICAgaWYgKF9fcCAhPSBfTV9w
dHIpDQogICAgICAgIHsNCiAgICAgICAgICBkZWxldGUgX01fcHRyOw0KICAgICAgICAgIF9NX3B0
ciA9IF9fcDsNCiAgICAgICAgfQ0KICAgIH0NCiMgMzQ1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9t
ZW1vcnkiIDMNCiAgYXV0b19wdHIoYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYpIHRo
cm93KCkNCiAgICA6IF9NX3B0cihfX3JlZi5fTV9wdHIpIHt9DQoNCiAgYXV0b19wdHImDQogIG9w
ZXJhdG9yPShhdXRvX3B0cl9yZWY8ZWxlbWVudF90eXBlPiBfX3JlZikgdGhyb3coKQ0KICAgIHsN
CiAgICAgIGlmIChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpDQogICAgICAgIHsNCiAgICAg
ICAgICBkZWxldGUgX01fcHRyOw0KICAgICAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsNCiAg
ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHAxPg0KICAgIG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkNCiAgICAg
IHsgcmV0dXJuIGF1dG9fcHRyX3JlZjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwMT4NCiAgICBvcGVyYXRvciBhdXRvX3B0cjxfVHAxPigpIHRocm93
KCkNCiAgICAgIHsgcmV0dXJuIGF1dG9fcHRyPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0NCg0K
fTsNCg0KfQ0KIyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMNCg0KDQoNCiMg
MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMSAzDQojIDY0ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzDQpuYW1lc3BhY2Ugc3Rk
DQp7DQojIDEwMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMw0K
dGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+DQpzdHJ1Y3QgdW5hcnlfZnVuY3Rp
b24gew0KICB0eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsNCiAgdHlwZWRlZiBfUmVzdWx0IHJl
c3VsdF90eXBlOw0KfTsNCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJn
MiwgY2xhc3MgX1Jlc3VsdD4NCnN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gew0KICB0eXBlZGVmIF9B
cmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7DQogIHR5cGVkZWYgX0FyZzIgc2Vjb25kX2FyZ3VtZW50
X3R5cGU7DQogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsNCn07DQojIDEyNyAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9U
cD4NCnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gew0K
ICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg
cmV0dXJuIF9feCArIF9feTsgfQ0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0
IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gew0KICBfVHAgb3Bl
cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f
eCAtIF9feTsgfQ0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IG11bHRpcGxp
ZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7DQogIF9UcCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICog
X195OyB9DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgZGl2aWRlcyA6IHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsNCiAgX1RwIG9wZXJhdG9yKCkoY29u
c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7IH0N
Cn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4NCnsNCiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJSBfX3k7IH0NCn07DQoN
Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVu
Y3Rpb248X1RwLF9UcD4NCnsNCiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0
IHsgcmV0dXJuIC1fX3g7IH0NCn07DQojIDE3MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfZnVuY3Rpb24uaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBlcXVhbF90byA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPg0Kew0KICBib29sIG9wZXJhdG9y
KCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0g
X195OyB9DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3Qgbm90X2VxdWFsX3Rv
IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+DQp7DQogIGJvb2wgb3BlcmF0
b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAh
PSBfX3k7IH0NCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBncmVhdGVyIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+DQp7DQogIGJvb2wgb3BlcmF0b3Io
KShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+IF9f
eTsgfQ0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IGxlc3MgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4NCnsNCiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0
IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDwgX195OyB9DQp9
Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPg0Kew0KICBib29sIG9wZXJhdG9yKCkoY29u
c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPj0gX195OyB9
DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPg0Kew0KICBib29sIG9wZXJhdG9yKCkoY29u
c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0gX195OyB9
DQp9Ow0KIyAyMjIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMN
CnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4NCnsNCiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg
X194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQ0KfTsNCg0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4NCnsNCiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg
X194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8IF9feTsgfQ0KfTsNCg0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPF9UcCxib29sPg0Kew0KICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gp
IGNvbnN0IHsgcmV0dXJuICFfX3g7IH0NCn07DQojIDI3MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfZnVuY3Rpb24uaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+DQpjbGFz
cyB1bmFyeV9uZWdhdGUNCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRp
Y2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gew0KcHJvdGVjdGVkOg0KICBfUHJlZGljYXRlIF9N
X3ByZWQ7DQpwdWJsaWM6DQogIGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRl
JiBfX3gpIDogX01fcHJlZChfX3gpIHt9DQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFt
ZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsNCiAgICByZXR1cm4gIV9N
X3ByZWQoX194KTsNCiAgfQ0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4NCmlu
bGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4NCm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19w
cmVkKQ0Kew0KICByZXR1cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7DQp9DQoN
Cg0KdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+DQpjbGFzcyBiaW5hcnlfbmVnYXRlDQogIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVu
dF90eXBlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6
c2Vjb25kX2FyZ3VtZW50X3R5cGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBib29sPiB7
DQpwcm90ZWN0ZWQ6DQogIF9QcmVkaWNhdGUgX01fcHJlZDsNCnB1YmxpYzoNCiAgZXhwbGljaXQg
YmluYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9DQog
IGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVu
dF90eXBlJiBfX3gsDQogICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRl
OjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSBjb25zdA0KICB7DQogICAgcmV0dXJuICFfTV9w
cmVkKF9feCwgX195KTsNCiAgfQ0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4N
CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+DQpub3QyKGNvbnN0IF9QcmVkaWNhdGUm
IF9fcHJlZCkNCnsNCiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsN
Cn0NCiMgMzQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzDQp0
ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4NCmNsYXNzIGJpbmRlcjFzdA0KICA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5
cGU+IHsNCnByb3RlY3RlZDoNCiAgX09wZXJhdGlvbiBvcDsNCiAgdHlwZW5hbWUgX09wZXJhdGlv
bjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsNCnB1YmxpYzoNCiAgYmluZGVyMXN0KGNvbnN0
IF9PcGVyYXRpb24mIF9feCwNCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246
OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkNCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7
fQ0KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQ0KICBvcGVyYXRvcigpKGNvbnN0
IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsN
CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7DQogIH0NCg0KDQogIHR5cGVuYW1lIF9PcGVyYXRp
b246OnJlc3VsdF90eXBlDQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25k
X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgew0KICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsN
CiAgfQ0KDQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+DQpp
bmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+DQpiaW5kMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9f
Zm4sIGNvbnN0IF9UcCYgX194KQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OmZp
cnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsNCiAgcmV0dXJuIGJpbmRlcjFzdDxfT3BlcmF0
aW9uPihfX2ZuLCBfQXJnMV90eXBlKF9feCkpOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfT3Bl
cmF0aW9uPg0KY2xhc3MgYmluZGVyMm5kDQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVu
YW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7DQpwcm90ZWN0ZWQ6DQog
IF9PcGVyYXRpb24gb3A7DQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90
eXBlIHZhbHVlOw0KcHVibGljOg0KICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LA0K
ICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5
cGUmIF9feSkNCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQ0KICB0eXBlbmFtZSBfT3Bl
cmF0aW9uOjpyZXN1bHRfdHlwZQ0KICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRp
b246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgew0KICAgIHJldHVybiBvcChfX3gs
IHZhbHVlKTsNCiAgfQ0KDQoNCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUNCiAg
b3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gp
IGNvbnN0IHsNCiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7DQogIH0NCg0KfTsNCg0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPg0KaW5saW5lIGJpbmRlcjJuZDxfT3Bl
cmF0aW9uPg0KYmluZDJuZChjb25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkN
CnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBf
QXJnMl90eXBlOw0KICByZXR1cm4gYmluZGVyMm5kPF9PcGVyYXRpb24+KF9fZm4sIF9BcmcyX3R5
cGUoX194KSk7DQp9DQojIDQzOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rp
b24uaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+DQpjbGFzcyBwb2lu
dGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1
bHQ+IHsNCnByb3RlY3RlZDoNCiAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZyk7DQpwdWJsaWM6DQog
IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oKSB7fQ0KICBleHBsaWNpdCBwb2ludGVyX3RvX3Vu
YXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6IF9NX3B0cihfX3gpIHt9DQogIF9S
ZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0N
Cn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+DQppbmxpbmUgcG9p
bnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpf
X3gpKF9BcmcpKQ0Kew0KICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBf
UmVzdWx0PihfX3gpOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIs
IGNsYXNzIF9SZXN1bHQ+DQpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6DQogIHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gew0KcHJvdGVjdGVkOg0K
ICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7DQpwdWJsaWM6DQogICAgcG9pbnRl
cl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQ0KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5
X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpDQogICAgICA6IF9NX3B0cihf
X3gpIHt9DQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIgX195KSBjb25z
dCB7DQogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsNCiAgICB9DQp9Ow0KDQoNCnRlbXBs
YXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+DQppbmxpbmUgcG9p
bnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4NCnB0cl9mdW4oX1Jl
c3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgew0KICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlf
ZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPg0Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1Rw
PiB7DQogIF9UcCYgb3BlcmF0b3IoKShfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9DQog
IGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194
OyB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+DQpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1
YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsN
CiAgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29u
c3Qgew0KICAgIHJldHVybiBfX3guZmlyc3Q7DQogIH0NCiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6
OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3Qgew0KICAgIHJl
dHVybiBfX3guZmlyc3Q7DQogIH0NCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4NCnN0cnVj
dCBfU2VsZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFp
cjo6c2Vjb25kX3R5cGU+DQp7DQogIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0
b3IoKShfUGFpciYgX194KSBjb25zdCB7DQogICAgcmV0dXJuIF9feC5zZWNvbmQ7DQogIH0NCiAg
Y29uc3QgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWly
JiBfX3gpIGNvbnN0IHsNCiAgICByZXR1cm4gX194LnNlY29uZDsNCiAgfQ0KfTsNCiMgNTI4ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzDQp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwPg0KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPF9UcCosX1JldD4gew0KcHVibGljOg0KICBleHBsaWNpdCBtZW1fZnVuX3QoX1JldCAoX1Rw
OjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9DQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkg
Y29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0NCnByaXZhdGU6DQogIF9SZXQgKF9UcDo6
Kl9NX2YpKCk7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+DQpjbGFz
cyBjb25zdF9tZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfUmV0
PiB7DQpwdWJsaWM6DQogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3Bm
KSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30NCiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCog
X19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQ0KcHJpdmF0ZToNCiAgX1JldCAo
X1RwOjoqX01fZikoKSBjb25zdDsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz
IF9UcD4NCmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9S
ZXQ+IHsNCnB1YmxpYzoNCiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3Bm
KSgpKSA6IF9NX2YoX19wZikge30NCiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7
IHJldHVybiAoX19yLipfTV9mKSgpOyB9DQpwcml2YXRlOg0KICBfUmV0IChfVHA6OipfTV9mKSgp
Ow0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPg0KY2xhc3MgY29uc3Rf
bWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gew0KcHVibGlj
Og0KICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29u
c3QpIDogX01fZihfX3BmKSB7fQ0KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNv
bnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0NCnByaXZhdGU6DQogIF9SZXQgKF9UcDo6Kl9N
X2YpKCkgY29uc3Q7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs
YXNzIF9Bcmc+DQpjbGFzcyBtZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAq
LF9BcmcsX1JldD4gew0KcHVibGljOg0KICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6
Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30NCiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19w
LCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0NCnByaXZhdGU6
DQogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOw0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
dCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPg0KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsNCnB1YmxpYzoNCiAgZXhw
bGljaXQgY29uc3RfbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBf
TV9mKF9fcGYpIHt9DQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gp
IGNvbnN0DQogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0NCnByaXZhdGU6DQogIF9S
ZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Ow0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
dCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPg0KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsNCnB1YmxpYzoNCiAgZXhwbGljaXQgbWVt
X2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQ0KICBf
UmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipf
TV9mKShfX3gpOyB9DQpwcml2YXRlOg0KICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsNCn07DQoN
Cg0KdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4NCmNsYXNzIGNv
bnN0X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0
PiB7DQpwdWJsaWM6DQogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6
Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30NCiAgX1JldCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsg
fQ0KcHJpdmF0ZToNCiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7DQp9Ow0KDQoNCnRl
bXBsYXRlIDxjbGFzcyBfVHA+DQpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsNCnB1YmxpYzoNCiAgZXhwbGljaXQgbWVtX2Z1bl90
KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQ0KICB2b2lkIG9wZXJhdG9yKCko
X1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0NCnByaXZhdGU6DQogIHZvaWQgKF9U
cDo6Kl9NX2YpKCk7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpjbGFzcyBjb25zdF9t
ZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLHZv
aWQ+IHsNCnB1YmxpYzoNCiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9f
cGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQ0KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1Rw
KiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0NCnByaXZhdGU6DQogIHZvaWQgKF9UcDo6
Kl9NX2YpKCkgY29uc3Q7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpjbGFzcyBtZW1f
ZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsN
CnB1YmxpYzoNCiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6
IF9NX2YoX19wZikge30NCiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IChfX3Iu
Kl9NX2YpKCk7IH0NCnByaXZhdGU6DQogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7DQp9Ow0KDQoNCnRl
bXBsYXRlIDxjbGFzcyBfVHA+DQpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4g
OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsNCnB1YmxpYzoNCiAgZXhwbGljaXQg
Y29uc3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19w
Zikge30NCiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9N
X2YpKCk7IH0NCnByaXZhdGU6DQogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7DQp9Ow0KDQoN
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+DQpjbGFzcyBtZW1fZnVuMV90PHZvaWQs
IF9UcCwgX0FyZz4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyx2b2lkPiB7DQpw
dWJsaWM6DQogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDog
X01fZihfX3BmKSB7fQ0KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25z
dCB7IChfX3AtPipfTV9mKShfX3gpOyB9DQpwcml2YXRlOg0KICB2b2lkIChfVHA6OipfTV9mKShf
QXJnKTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4NCmNsYXNzIGNv
bnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPg0KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsNCnB1YmxpYzoNCiAgZXhwbGljaXQgY29uc3RfbWVt
X2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9DQog
IHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+
Kl9NX2YpKF9feCk7IH0NCnByaXZhdGU6DQogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0
Ow0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPg0KY2xhc3MgbWVtX2Z1
bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPg0KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
LF9Bcmcsdm9pZD4gew0KcHVibGljOg0KICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdCh2b2lkIChf
VHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9DQogIHZvaWQgb3BlcmF0b3IoKShfVHAm
IF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQ0KcHJpdmF0ZToNCiAg
dm9pZCAoX1RwOjoqX01fZikoX0FyZyk7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9Bcmc+DQpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+DQog
IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7DQpwdWJsaWM6DQogIGV4
cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0
KSA6IF9NX2YoX19wZikge30NCiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJn
IF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9DQpwcml2YXRlOg0KICB2b2lkIChfVHA6
OipfTV9mKShfQXJnKSBjb25zdDsNCn07DQoNCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SZXQs
IGNsYXNzIF9UcD4NCmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1Rw
OjoqX19mKSgpKQ0KICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0NCg0KdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4NCmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1Jl
dCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQ0KICB7IHJldHVybiBjb25z
dF9tZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs
YXNzIF9UcD4NCmlubGluZSBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0
IChfVHA6OipfX2YpKCkpDQogIHsgcmV0dXJuIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7
IH0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4NCmlubGluZSBjb25zdF9tZW1f
ZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkgY29uc3Qp
DQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0NCg0KdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4NCmlubGluZSBtZW1fZnVu
MV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkNCiAgeyBy
ZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9DQoNCnRlbXBsYXRlIDxjbGFz
cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+DQppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxf
UmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpDQogIHsg
cmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPg0KaW5saW5lIG1lbV9mdW4xX3Jl
Zl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpDQog
IHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4NCmlubGluZSBjb25zdF9tZW1f
ZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPg0KbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShf
QXJnKSBjb25zdCkNCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0Fy
Zz4oX19mKTsgfQ0KDQoNCg0KfQ0KIyA1MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAy
IDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMSAzDQoj
IDQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzDQoNCiMgMSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4vYml0cy9hdG9taWNpdHkuaCIgMSAz
DQojIDMzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRzL2F0b21pY2l0
eS5oIiAzDQp0eXBlZGVmIGludCBfQXRvbWljX3dvcmQ7DQoNCnN0YXRpYyBpbmxpbmUgX0F0b21p
Y193b3JkDQpfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpDQpfX2V4Y2hhbmdlX2FuZF9hZGQg
KHZvbGF0aWxlIF9BdG9taWNfd29yZCAqX19tZW0sIGludCBfX3ZhbCkNCnsNCiAgcmVnaXN0ZXIg
X0F0b21pY193b3JkIF9fcmVzdWx0Ow0KICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IHhh
ZGRsICUwLCUyIg0KICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChfX3Jlc3VsdCkNCiAg
ICAgICAgICAgICAgICAgICAgICAgIDogIjAiIChfX3ZhbCksICJtIiAoKl9fbWVtKQ0KICAgICAg
ICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7DQogIHJldHVybiBfX3Jlc3VsdDsNCn0NCg0K
c3RhdGljIGlubGluZSB2b2lkDQpfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpDQpfX2F0b21p
Y19hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkNCnsNCiAgX19h
c21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRsICUwLCUxIg0KICAgICAgICAgICAgICAgICAg
ICAgICAgOiA6ICJpciIgKF9fdmFsKSwgIm0iICgqX19tZW0pIDogIm1lbW9yeSIpOw0KfQ0KIyA0
NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMiAzDQoNCm5hbWVz
cGFjZSBzdGQNCnsNCiMgODggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5n
LmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+DQogICAgY2xhc3MgYmFzaWNfc3RyaW5nDQogICAgew0KDQogICAgcHVibGlj
Og0KICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUgdmFsdWVfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0FsbG9j
IGFsbG9jYXRvcl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlw
ZSBzaXplX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90
eXBlIGRpZmZlcmVuY2VfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZl
cmVuY2UgcmVmZXJlbmNlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3Jl
ZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6
cG9pbnRlciBwb2ludGVyOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3Bv
aW50ZXIgY29uc3RfcG9pbnRlcjsNCiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9p
dGVyYXRvcjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOw0KICAgICAgdHlwZWRlZiBf
X2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIGJhc2ljX3N0cmluZz4N
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0X2l0ZXJhdG9yOw0KICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0
X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOw0KICAgICAgdHlwZWRlZiByZXZlcnNl
X2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOw0KDQogICAgcHJpdmF0ZToNCiMg
MTIzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzDQogICAgICBz
dHJ1Y3QgX1JlcA0KICAgICAgew0KDQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0
ZW1wbGF0ZSByZWJpbmQ8Y2hhcj46Om90aGVyIF9SYXdfYnl0ZXNfYWxsb2M7DQojIDE0MSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMw0KICAgICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90eXBlIF9TX21heF9zaXplOw0KICAgICAgICBzdGF0aWMgY29uc3QgX0NoYXJU
IF9TX3Rlcm1pbmFsOw0KDQogICAgICAgIHNpemVfdHlwZSBfTV9sZW5ndGg7DQogICAgICAgIHNp
emVfdHlwZSBfTV9jYXBhY2l0eTsNCiAgICAgICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7
DQoNCiAgICAgICAgYm9vbA0KICAgICAgICBfTV9pc19sZWFrZWQoKSBjb25zdA0KICAgICAgICB7
IHJldHVybiBfTV9yZWZlcmVuY2VzIDwgMDsgfQ0KDQogICAgICAgIGJvb2wNCiAgICAgICAgX01f
aXNfc2hhcmVkKCkgY29uc3QNCiAgICAgICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA+IDA7IH0N
Cg0KICAgICAgICB2b2lkDQogICAgICAgIF9NX3NldF9sZWFrZWQoKQ0KICAgICAgICB7IF9NX3Jl
ZmVyZW5jZXMgPSAtMTsgfQ0KDQogICAgICAgIHZvaWQNCiAgICAgICAgX01fc2V0X3NoYXJhYmxl
KCkNCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gMDsgfQ0KDQogICAgICAgIF9DaGFyVCoNCiAg
ICAgICAgX01fcmVmZGF0YSgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxfQ2hhclQqPih0aGlzICsgMSk7IH0NCg0KICAgICAgICBfQ2hhclQmDQogICAgICAgIG9w
ZXJhdG9yW10oc2l6ZV90IF9fcykgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBfTV9yZWZkYXRh
KCkgW19fc107IH0NCg0KICAgICAgICBfQ2hhclQqDQogICAgICAgIF9NX2dyYWIoY29uc3QgX0Fs
bG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikNCiAgICAgICAgew0KICAgICAg
ICAgIHJldHVybiAoIV9NX2lzX2xlYWtlZCgpICYmIF9fYWxsb2MxID09IF9fYWxsb2MyKQ0KICAg
ICAgICAgICAgICAgICAgPyBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7DQogICAg
ICAgIH0NCg0KDQogICAgICAgIHN0YXRpYyBfUmVwKg0KICAgICAgICBfU19jcmVhdGUoc2l6ZV90
LCBjb25zdCBfQWxsb2MmKTsNCg0KICAgICAgICB2b2lkDQogICAgICAgIF9NX2Rpc3Bvc2UoY29u
c3QgX0FsbG9jJiBfX2EpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRf
YWRkKCZfTV9yZWZlcmVuY2VzLCAtMSkgPD0gMCkNCiAgICAgICAgICAgIF9NX2Rlc3Ryb3koX19h
KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHZvaWQNCiAgICAgICAgX01fZGVzdHJveShjb25zdCBf
QWxsb2MmKSB0aHJvdygpOw0KDQogICAgICAgIF9DaGFyVCoNCiAgICAgICAgX01fcmVmY29weSgp
IHRocm93KCkNCiAgICAgICAgew0KICAgICAgICAgIF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNl
cywgMSk7DQogICAgICAgICAgcmV0dXJuIF9NX3JlZmRhdGEoKTsNCiAgICAgICAgfQ0KDQogICAg
ICAgIF9DaGFyVCoNCiAgICAgICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiwgc2l6ZV90eXBlIF9f
cmVzID0gMCk7DQogICAgICB9Ow0KDQoNCiAgICAgIHN0cnVjdCBfQWxsb2NfaGlkZXIgOiBfQWxs
b2MNCiAgICAgIHsNCiAgICAgICAgX0FsbG9jX2hpZGVyKF9DaGFyVCogX19kYXQsIGNvbnN0IF9B
bGxvYyYgX19hKQ0KICAgICAgICA6IF9BbGxvYyhfX2EpLCBfTV9wKF9fZGF0KSB7IH0NCg0KICAg
ICAgICBfQ2hhclQqIF9NX3A7DQogICAgICB9Ow0KDQogICAgcHVibGljOg0KDQoNCg0KICAgICAg
c3RhdGljIGNvbnN0IHNpemVfdHlwZSBucG9zID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSk7
DQoNCiAgICBwcml2YXRlOg0KDQogICAgICBtdXRhYmxlIF9BbGxvY19oaWRlciBfTV9kYXRhcGx1
czsNCg0KDQoNCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVwX3N0b3JhZ2VbKHNp
emVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXpl
b2Yoc2l6ZV90eXBlKV07DQoNCiAgICAgIF9DaGFyVCoNCiAgICAgIF9NX2RhdGEoKSBjb25zdA0K
ICAgICAgeyByZXR1cm4gX01fZGF0YXBsdXMuX01fcDsgfQ0KDQogICAgICBfQ2hhclQqDQogICAg
ICBfTV9kYXRhKF9DaGFyVCogX19wKQ0KICAgICAgeyByZXR1cm4gKF9NX2RhdGFwbHVzLl9NX3Ag
PSBfX3ApOyB9DQoNCiAgICAgIF9SZXAqDQogICAgICBfTV9yZXAoKSBjb25zdA0KICAgICAgeyBy
ZXR1cm4gJigocmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0NCg0K
DQoNCiAgICAgIGl0ZXJhdG9yDQogICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcihfTV9kYXRhKCkpOyB9DQoNCiAgICAgIGl0ZXJhdG9yDQogICAgICBfTV9pZW5kKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQ0KDQogICAg
ICB2b2lkDQogICAgICBfTV9sZWFrKCkNCiAgICAgIHsNCiAgICAgICAgaWYgKCFfTV9yZXAoKS0+
X01faXNfbGVha2VkKCkpDQogICAgICAgICAgX01fbGVha19oYXJkKCk7DQogICAgICB9DQoNCiAg
ICAgIGl0ZXJhdG9yDQogICAgICBfTV9jaGVjayhzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAg
ICB7DQogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkNCiAgICAgICAgICBfX3Rocm93
X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpfTV9jaGVjayIpOw0KICAgICAgICByZXR1cm4g
X01faWJlZ2luKCkgKyBfX3BvczsNCiAgICAgIH0NCg0KDQogICAgICBpdGVyYXRvcg0KICAgICAg
X01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX29mZikgY29uc3QNCiAgICAgIHsN
CiAgICAgICAgYm9vbCBfX3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOw0K
ICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBfX3Rlc3RvZmYgPyBfX29mZiA6IHRoaXMtPnNp
emUoKSAtIF9fcG9zOw0KICAgICAgICByZXR1cm4gKF9NX2liZWdpbigpICsgX19wb3MgKyBfX25l
d29mZik7DQogICAgICB9DQoNCg0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0b3I+DQog
ICAgICAgIHN0YXRpYyB2b2lkDQogICAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9J
dGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikNCiAgICAgICAgew0KICAgICAgICAgIGZvciAo
OyBfX2sxICE9IF9fazI7ICsrX19rMSwgKytfX3ApDQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6
YXNzaWduKCpfX3AsICpfX2sxKTsNCiAgICAgICAgfQ0KDQogICAgICBzdGF0aWMgdm9pZA0KICAg
ICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19r
MikNCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7
IH0NCg0KICAgICAgc3RhdGljIHZvaWQNCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3As
IGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpDQogICAgICB7IF9TX2Nv
cHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9DQoNCiAgICAgIHN0YXRp
YyB2b2lkDQogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hhclQqIF9fazEsIF9D
aGFyVCogX19rMikNCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0g
X19rMSk7IH0NCg0KICAgICAgc3RhdGljIHZvaWQNCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJU
KiBfX3AsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQ0KICAgICAgeyB0
cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQ0KDQogICAgICB2b2lk
DQogICAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXpl
X3R5cGUgX19sZW4yKTsNCg0KICAgICAgdm9pZA0KICAgICAgX01fbGVha19oYXJkKCk7DQoNCiAg
ICAgIHN0YXRpYyBfUmVwJg0KICAgICAgX1NfZW1wdHlfcmVwKCkNCiAgICAgIHsgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PF9SZXAqPigmX1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9DQoNCiAgICBw
dWJsaWM6DQoNCg0KDQoNCiAgICAgIGlubGluZQ0KICAgICAgYmFzaWNfc3RyaW5nKCk7DQoNCiAg
ICAgIGV4cGxpY2l0DQogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpOw0KDQoN
CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsNCiAgICAgIGJh
c2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsDQog
ICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IG5wb3MpOw0KICAgICAgYmFzaWNfc3Ry
aW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywNCiAgICAgICAg
ICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSk7DQoNCiAgICAgIGJh
c2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwNCiAgICAgICAgICAg
ICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsNCiAgICAgIGJhc2ljX3N0cmlu
Zyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7DQogICAg
ICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBf
X2EgPSBfQWxsb2MoKSk7DQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0K
ICAgICAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9y
IF9fZW5kLA0KICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2Mo
KSk7DQoNCiAgICAgIH5iYXNpY19zdHJpbmcoKQ0KICAgICAgeyBfTV9yZXAoKS0+X01fZGlzcG9z
ZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAg
IG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5hc3Np
Z24oX19zdHIpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIG9wZXJhdG9yPShjb25z
dCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcyk7IH0NCg0KICAgICAgYmFz
aWNfc3RyaW5nJg0KICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFz
c2lnbigxLCBfX2MpOyB9DQoNCg0KICAgICAgaXRlcmF0b3INCiAgICAgIGJlZ2luKCkNCiAgICAg
IHsNCiAgICAgICAgX01fbGVhaygpOw0KICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgp
KTsNCiAgICAgIH0NCg0KICAgICAgY29uc3RfaXRlcmF0b3INCiAgICAgIGJlZ2luKCkgY29uc3QN
CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0NCg0KICAgICAgaXRl
cmF0b3INCiAgICAgIGVuZCgpDQogICAgICB7DQogICAgICAgICBfTV9sZWFrKCk7DQogICAgICAg
ICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsNCiAgICAgIH0NCg0K
ICAgICAgY29uc3RfaXRlcmF0b3INCiAgICAgIGVuZCgpIGNvbnN0DQogICAgICB7IHJldHVybiBj
b25zdF9pdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9DQoNCiAgICAgIHJldmVy
c2VfaXRlcmF0b3INCiAgICAgIHJiZWdpbigpDQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJh
dG9yKHRoaXMtPmVuZCgpKTsgfQ0KDQogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yDQogICAg
ICByYmVnaW4oKSBjb25zdA0KICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0
aGlzLT5lbmQoKSk7IH0NCg0KICAgICAgcmV2ZXJzZV9pdGVyYXRvcg0KICAgICAgcmVuZCgpDQog
ICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9DQoNCiAgICAg
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3INCiAgICAgIHJlbmQoKSBjb25zdA0KICAgICAgeyByZXR1
cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQ0KDQogICAgcHVibGlj
Og0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9yZXAo
KS0+X01fbGVuZ3RoOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAg
IG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX1JlcDo6X1NfbWF4X3NpemU7IH0NCg0KICAgICAg
dm9pZA0KICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOw0KDQogICAgICB2
b2lkDQogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbikgeyB0aGlzLT5yZXNpemUoX19uLCBfQ2hh
clQoKSk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0
dXJuIF9NX3JlcCgpLT5fTV9jYXBhY2l0eTsgfQ0KDQogICAgICB2b2lkDQogICAgICByZXNlcnZl
KHNpemVfdHlwZSBfX3Jlc19hcmcgPSAwKTsNCg0KICAgICAgdm9pZA0KICAgICAgY2xlYXIoKSB7
IF9NX211dGF0ZSgwLCB0aGlzLT5zaXplKCksIDApOyB9DQoNCiAgICAgIGJvb2wNCiAgICAgIGVt
cHR5KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+c2l6ZSgpID09IDA7IH0NCg0KDQogICAgICBjb25z
dF9yZWZlcmVuY2UNCiAgICAgIG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29uc3QNCiAg
ICAgIHsgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107IH0NCg0KICAgICAgcmVmZXJlbmNlDQogICAg
ICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX3BvcykNCiAgICAgIHsNCiAgICAgICAgX01fbGVhaygp
Ow0KICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsNCiAgICAgIH0NCg0KICAgICAgY29u
c3RfcmVmZXJlbmNlDQogICAgICBhdChzaXplX3R5cGUgX19uKSBjb25zdA0KICAgICAgew0KICAg
ICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkNCiAgICAgICAgICBfX3Rocm93X291dF9vZl9y
YW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOw0KICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07
DQogICAgICB9DQoNCiAgICAgIHJlZmVyZW5jZQ0KICAgICAgYXQoc2l6ZV90eXBlIF9fbikNCiAg
ICAgIHsNCiAgICAgICAgaWYgKF9fbiA+PSBzaXplKCkpDQogICAgICAgICAgX190aHJvd19vdXRf
b2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsNCiAgICAgICAgX01fbGVhaygpOw0KICAgICAg
ICByZXR1cm4gX01fZGF0YSgpW19fbl07DQogICAgICB9DQoNCg0KICAgICAgYmFzaWNfc3RyaW5n
Jg0KICAgICAgb3BlcmF0b3IrPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0
aGlzLT5hcHBlbmQoX19zdHIpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIG9wZXJh
dG9yKz0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MpOyB9DQoN
CiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIG9wZXJhdG9yKz0oX0NoYXJUIF9fYykgeyByZXR1
cm4gdGhpcy0+YXBwZW5kKHNpemVfdHlwZSgxKSwgX19jKTsgfQ0KDQogICAgICBiYXNpY19zdHJp
bmcmDQogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7DQoNCiAgICAgIGJh
c2ljX3N0cmluZyYNCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pOw0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAg
ICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pOw0KDQogICAgICBiYXNp
Y19zdHJpbmcmDQogICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MpDQogICAgICB7IHJldHVy
biB0aGlzLT5hcHBlbmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAg
IGJhc2ljX3N0cmluZyYNCiAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsN
Cg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogICAgICAgIGJhc2ljX3N0
cmluZyYNCiAgICAgICAgYXBwZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCkNCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9N
X2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQ0KDQogICAgICB2b2lkDQogICAgICBwdXNoX2Jh
Y2soX0NoYXJUIF9fYykNCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQo
KSwgMSwgX19jKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBhc3NpZ24oY29uc3Qg
YmFzaWNfc3RyaW5nJiBfX3N0cik7DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGFzc2ln
bihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24pDQogICAgICB7DQogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5z
aXplKCk7DQogICAgICAgIGlmIChfX3BvcyA+IF9fc3Ryc2l6ZSkNCiAgICAgICAgICBfX3Rocm93
X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsNCiAgICAgICAgY29uc3QgYm9v
bCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19wb3M7DQogICAgICAgIGNvbnN0IHNpemVf
dHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3M7DQogICAg
ICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIuX01fZGF0YSgpICsgX19wb3MsIF9fbmV3c2l6
ZSk7DQogICAgICB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGFzc2lnbihjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikNCiAgICAgIHsNCiAgICAgICAgaWYgKF9fbiA+IHRo
aXMtPm1heF9zaXplKCkpDQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0
cmluZzo6YXNzaWduIik7DQogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwg
bGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQ0KICAgICAgICAgICAgfHwgbGVz
czxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSwgX19zKSkNCiAgICAg
ICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcywg
X19zICsgX19uKTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIHsNCg0KICAgICAgICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01fZGF0YSgpOw0KICAgICAgICAgICAgaWYgKF9f
cG9zID49IF9fbikNCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fZGF0YSgpLCBf
X3MsIF9fbik7DQogICAgICAgICAgICBlbHNlIGlmIChfX3BvcykNCiAgICAgICAgICAgICAgdHJh
aXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpLCBfX3MsIF9fbik7DQogICAgICAgICAgICBfTV9yZXAo
KS0+X01fbGVuZ3RoID0gX19uOw0KICAgICAgICAgICAgX01fZGF0YSgpW19fbl0gPSBfUmVwOjpf
U190ZXJtaW5hbDsNCiAgICAgICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgICAgICB9DQogICAg
ICB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9f
cykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgo
X19zKSk7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXNzaWduKHNpemVfdHlwZSBf
X24sIF9DaGFyVCBfX2MpDQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigp
LCBfTV9pZW5kKCksIF9fbiwgX19jKTsgfQ0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4NCiAgICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgICBhc3NpZ24oX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQ0KICAgICAgICB7IHJldHVybiB0
aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0N
Cg0KICAgICAgdm9pZA0KICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwg
X0NoYXJUIF9fYykNCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19uLCBfX2MpOyB9
DQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgICAgICB2b2lkIGlu
c2VydChpdGVyYXRvciBfX3AsIF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBf
X2VuZCkNCiAgICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9
DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9f
cG9zMSwgX19zdHIsIDAsIF9fc3RyLnNpemUoKSk7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0K
ICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
DQogICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbikNCiAgICAgIHsN
CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAg
ICAgaWYgKF9fcG9zMiA+IF9fc3Ryc2l6ZSkNCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5n
ZSgiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsNCiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuID0g
X19uIDwgX19zdHJzaXplIC0gX19wb3MyOw0KICAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdz
aXplID0gX190ZXN0biA/IF9fbiA6IF9fc3Ryc2l6ZSAtIF9fcG9zMjsNCiAgICAgICAgcmV0dXJu
IHRoaXMtPmluc2VydChfX3BvczEsIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19uZXdzaXpl
KTsNCiAgICAgIH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgaW5zZXJ0KHNpemVfdHlw
ZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pDQogICAgICB7DQogICAg
ICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICAgIGlmIChf
X3BvcyA+IF9fc2l6ZSkNCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3Ry
aW5nOjppbnNlcnQiKTsNCiAgICAgICAgaWYgKF9fc2l6ZSA+IHRoaXMtPm1heF9zaXplKCkgLSBf
X24pDQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6aW5zZXJ0
Iik7DQogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBf
Q2hhclQqPigpKF9fcywgX01fZGF0YSgpKQ0KICAgICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hh
clQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkNCiAgICAgICAgICByZXR1cm4gX01fcmVw
bGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3MsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbik7DQogICAgICAgIGVs
c2UNCiAgICAgICAgICB7DQoNCg0KDQogICAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19vZmYg
PSBfX3MgLSBfTV9kYXRhKCk7DQogICAgICAgICAgICBfTV9tdXRhdGUoX19wb3MsIDAsIF9fbik7
DQogICAgICAgICAgICBfX3MgPSBfTV9kYXRhKCkgKyBfX29mZjsNCiAgICAgICAgICAgIF9DaGFy
VCogX19wID0gX01fZGF0YSgpICsgX19wb3M7DQogICAgICAgICAgICBpZiAoX19zICsgX19uIDw9
IF9fcCkNCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9fbik7DQog
ICAgICAgICAgICBlbHNlIGlmIChfX3MgPj0gX19wKQ0KICAgICAgICAgICAgICB0cmFpdHNfdHlw
ZTo6Y29weShfX3AsIF9fcyArIF9fbiwgX19uKTsNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAg
ICAgICAgew0KICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBfX3Ag
LSBfX3MpOw0KICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCArIChfX3AgLSBf
X3MpLCBfX3AgKyBfX24sIF9fbiAtIChfX3AgLSBfX3MpKTsNCiAgICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgICAgIH0NCiAgICAgICB9DQoNCiAgICAgIGJh
c2ljX3N0cmluZyYNCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCog
X19zKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBl
OjpsZW5ndGgoX19zKSk7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgaW5zZXJ0KHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykNCiAgICAgIHsNCiAgICAg
ICAgdGhpcy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgX19uLCBfX2MpOw0KICAgICAgICByZXR1
cm4gKnRoaXM7DQogICAgICB9DQoNCiAgICAgIGl0ZXJhdG9yDQogICAgICBpbnNlcnQoaXRlcmF0
b3IgX19wLCBfQ2hhclQgX19jID0gX0NoYXJUKCkpDQogICAgICB7DQogICAgICAgIHNpemVfdHlw
ZSBfX3BvcyA9IF9fcCAtIF9NX2liZWdpbigpOw0KICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hl
Y2soX19wb3MpLCBzaXplX3R5cGUoMSksIF9fYyk7DQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRf
bGVha2VkKCk7DQogICAgICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4oKSArIF9fcG9zOw0KICAg
ICAgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBlcmFzZShzaXplX3R5cGUgX19wb3Mg
PSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMt
PnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfTV9kYXRhKCksIF9NX2RhdGEoKSk7DQogICAgICB9DQoNCiAg
ICAgIGl0ZXJhdG9yDQogICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQ0KICAgICAgew0K
ICAgICAgICBzaXplX3R5cGUgX19pID0gX19wb3NpdGlvbiAtIF9NX2liZWdpbigpOw0KICAgICAg
ICB0aGlzLT5yZXBsYWNlKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyAxLCBfTV9kYXRhKCksIF9N
X2RhdGEoKSk7DQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7DQogICAgICAgIHJl
dHVybiBfTV9pYmVnaW4oKSArIF9faTsNCiAgICAgIH0NCg0KICAgICAgaXRlcmF0b3INCiAgICAg
IGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkNCiAgICAgIHsNCiAgICAg
ICAgc2l6ZV90eXBlIF9faSA9IF9fZmlyc3QgLSBfTV9pYmVnaW4oKTsNCiAgICAgICAgdGhpcy0+
cmVwbGFjZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsNCiAgICAgICAg
X01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsNCiAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBf
X2k7DQogICAgICB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIHJlcGxhY2Uoc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQ0KICAg
ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uLCBfX3N0ci5fTV9kYXRhKCksIF9f
c3RyLnNpemUoKSk7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVwbGFjZShzaXpl
X3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwN
CiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOw0KDQogICAg
ICBiYXNpY19zdHJpbmcmDQogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl
IF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLA0KICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikN
CiAgICAgIHsNCiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsN
CiAgICAgICAgaWYgKF9fcG9zID4gX19zaXplKQ0KICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh
bmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsNCiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3Ru
MSA9IF9fbjEgPCBfX3NpemUgLSBfX3BvczsNCiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9s
ZG4xID0gX190ZXN0bjEgPyBfX24xIDogX19zaXplIC0gX19wb3M7DQogICAgICAgIGlmIChfX3Np
emUgLSBfX2ZvbGRuMSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24yKQ0KICAgICAgICAgIF9fdGhy
b3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsNCiAgICAgICAgaWYgKF9N
X3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9k
YXRhKCkpDQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsg
X19zaXplLCBfX3MpKQ0KICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2lu
KCkgKyBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2liZWdpbigp
ICsgX19wb3MgKyBfX2ZvbGRuMSwgX19zLCBfX3MgKyBfX24yKTsNCg0KICAgICAgICBlbHNlIHJl
dHVybg0KICAgICAgICAgICAgICAgX01fcmVwbGFjZShfTV9pYmVnaW4oKSArIF9fcG9zLCBfTV9p
YmVnaW4oKSArIF9fcG9zICsgX19mb2xkbjEsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9f
cywgX19zICsgX19uMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPGNvbnN0IF9DaGFyVCo+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsNCiAgICAgIH0N
Cg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJl
cGxhY2UoX19wb3MsIF9fbjEsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQ0KDQog
ICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90
eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQ0KICAgICAgeyByZXR1cm4gdGhp
cy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLCBfX24yLCBf
X2MpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19p
MSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikNCiAgICAgIHsgcmV0
dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5zaXpl
KCkpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19p
MSwgaXRlcmF0b3IgX19pMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFy
VCogX19zLCBzaXplX3R5cGUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kx
IC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9fbik7IH0NCg0KICAgICAgYmFzaWNf
c3RyaW5nJg0KICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25z
dCBfQ2hhclQqIF9fcykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwg
X19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYN
CiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9f
biwgX0NoYXJUIF9fYyk7DQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0K
ICAgICAgICBiYXNpY19zdHJpbmcmDQogICAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRl
cmF0b3IgX19pMiwNCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJ
dGVyYXRvciBfX2syKQ0KICAgICAgICB7IHJldHVybiBfTV9yZXBsYWNlKF9faTEsIF9faTIsIF9f
azEsIF9fazIsDQogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7IH0NCg0KDQoNCiAgICAgIGJhc2ljX3N0cmlu
ZyYNCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0NoYXJUKiBf
X2sxLCBfQ2hhclQqIF9fazIpDQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAt
IF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2sxLCBfX2syIC0gX19rMSk7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVw
bGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fazEsIGNv
bnN0IF9DaGFyVCogX19rMikNCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0g
X01faWJlZ2luKCksIF9faTIgLSBfX2kxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fazEsIF9fazIgLSBfX2sxKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBs
YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9y
IF9fazIpDQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigp
LCBfX2kyIC0gX19pMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLmJhc2Uo
KSwgX19rMiAtIF9fazEpOw0KICAgICAgICB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAg
IHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3RfaXRlcmF0b3IgX19r
MSwgY29uc3RfaXRlcmF0b3IgX19rMikNCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShf
X2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fazEuYmFzZSgpLCBfX2syIC0gX19rMSk7DQogICAgICAgIH0NCg0KICAgIHByaXZh
dGU6DQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgICAgICAgYmFzaWNf
c3RyaW5nJg0KICAgICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs
IF9JbnB1dEl0ZXJhdG9yIF9fazEsDQogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig
X19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Zvcndh
cmRJdGVyYXRvcj4NCiAgICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgICBfTV9yZXBsYWNlX3Nh
ZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyYXRvciBfX2sxLA0K
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19rMik7DQoNCg0KDQogICAgICB0
ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPg0KICAgICAgICBzdGF0aWMgX0NoYXJUKg0KICAgICAgICBf
U19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxv
YyYgX19hLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkNCiAgICAgICAg
ew0KICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Jbkl0ZXI+Ojpp
dGVyYXRvcl9jYXRlZ29yeSBfVGFnOw0KICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19i
ZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7DQogICAgICAgIH0NCg0KICAgICAgdGVtcGxhdGU8Y2xh
c3MgX0luSXRlcj4NCiAgICAgICAgc3RhdGljIF9DaGFyVCoNCiAgICAgICAgX1NfY29uc3RydWN0
X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkNCiAgICAgICAgew0KICAgICAgICAg
IHJldHVybiBfU19jb25zdHJ1Y3Qoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2JlZyksDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPihfX2VuZCks
IF9fYSk7DQogICAgICAgIH0NCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4NCiAgICAg
ICAgc3RhdGljIF9DaGFyVCoNCiAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9J
bkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQ0KICAgICAgICB7DQogICAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsN
CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0X2F1eChfX2JlZywgX19lbmQsIF9fYSwgX0lu
dGVncmFsKCkpOw0KICAgICAgICB9DQoNCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4N
CiAgICAgICAgc3RhdGljIF9DaGFyVCoNCiAgICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9f
YmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwNCiAgICAgICAgICAgICAgICAg
ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOw0KDQoNCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3
ZEl0ZXI+DQogICAgICAgIHN0YXRpYyBfQ2hhclQqDQogICAgICAgIF9TX2NvbnN0cnVjdChfRndk
SXRlciBfX2JlZywgX0Z3ZEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLA0KICAgICAgICAg
ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOw0KDQogICAgICBzdGF0aWMgX0NoYXJU
Kg0KICAgICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3Qg
X0FsbG9jJiBfX2EpOw0KDQogICAgcHVibGljOg0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGNv
cHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0
Ow0KDQogICAgICB2b2lkDQogICAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fcyk7DQoNCg0KICAgICAgY29uc3QgX0NoYXJUKg0KICAgICAgY19zdHIoKSBj
b25zdA0KICAgICAgew0KDQogICAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlzLT5zaXplKCk7DQog
ICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpW19fbl0sIF9SZXA6Ol9TX3Rlcm1p
bmFsKTsNCiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsNCiAgICAgIH0NCg0KICAgICAgY29uc3Qg
X0NoYXJUKg0KICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEoKTsgfQ0KDQogICAg
ICBhbGxvY2F0b3JfdHlwZQ0KICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9N
X2RhdGFwbHVzOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZChjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsNCg0KICAgICAgc2l6
ZV90eXBlDQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf
X3BvcyA9IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fc3RyLmRhdGEoKSwg
X19wb3MsIF9fc3RyLnNpemUoKSk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kKGNv
bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdA0KICAgICAgeyByZXR1
cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoN
CiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3Mg
PSAwKSBjb25zdDsNCg0KICAgICAgc2l6ZV90eXBlDQogICAgICByZmluZChjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdA0KICAgICAgeyByZXR1
cm4gdGhpcy0+cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQog
ICAgICBzaXplX3R5cGUNCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg
X19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIHJm
aW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdA0KICAg
ICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChf
X3MpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVf
dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRf
Zmlyc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkg
Y29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBf
X3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmly
c3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikg
Y29uc3Q7DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hh
clQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMt
PmZpbmRfZmlyc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQ0K
DQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90
eXBlIF9fcG9zID0gMCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19jLCBfX3Bv
cyk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QNCiAgICAgIHsgcmV0
dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkp
OyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCog
X19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0Ow0KDQogICAgICBzaXpl
X3R5cGUNCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
cG9zID0gbnBvcykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3Ms
IF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0K
ICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNv
bnN0DQogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX2MsIF9fcG9zKTsgfQ0KDQogICAgICBz
aXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5maW5k
X2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9DQoNCiAg
ICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24p
IGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0
IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdA0KICAgICAgeyByZXR1cm4g
dGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChf
X3MpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKF9DaGFy
VCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAg
ICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBl
IF9fcG9zID0gbnBvcykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rf
b2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBzaXplX3R5
cGUNCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7DQogICAg
ICBzaXplX3R5cGUNCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xh
c3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0NCg0KICAg
ICAgc2l6ZV90eXBlDQogICAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlw
ZSBfX3BvcyA9IG5wb3MpIGNvbnN0Ow0KDQogICAgICBiYXNpY19zdHJpbmcNCiAgICAgIHN1YnN0
cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykgY29uc3QNCiAgICAg
IHsNCiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQ0KICAgICAgICAgIF9fdGhyb3df
b3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnN1YnN0ciIpOw0KICAgICAgICByZXR1cm4gYmFz
aWNfc3RyaW5nKCp0aGlzLCBfX3BvcywgX19uKTsNCiAgICAgIH0NCg0KICAgICAgaW50DQogICAg
ICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0DQogICAgICB7DQogICAg
ICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICAgIHNpemVfdHlwZSBf
X29zaXplID0gX19zdHIuc2l6ZSgpOw0KICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19z
aXplLCBfX29zaXplKTsNCg0KICAgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUo
X01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsNCiAgICAgICAgaWYgKCFfX3IpDQogICAg
ICAgICAgX19yID0gX19zaXplIC0gX19vc2l6ZTsNCiAgICAgICAgcmV0dXJuIF9fcjsNCiAgICAg
IH0NCg0KICAgICAgaW50DQogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl
IF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7DQoNCiAgICAgIGludA0KICAg
ICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0ciwNCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBl
IF9fbjIpIGNvbnN0Ow0KDQogICAgICBpbnQNCiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBf
X3MpIGNvbnN0Ow0KDQoNCg0KICAgICAgaW50DQogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsNCg0KICAgICAgaW50
DQogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9D
aGFyVCogX19zLA0KICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3Q7DQogIH07DQoN
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4NCiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6DQogICAgYmFzaWNfc3RyaW5nKCkNCiAgICA6IF9NX2RhdGFwbHVzKF9TX2VtcHR5X3JlcCgp
Ll9NX3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPg0KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgew0KICAg
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7DQog
ICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOw0KICAgICAgcmV0dXJuIF9fc3RyOw0KICAgIH0NCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPg0KICAgIG9wZXJh
dG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+DQogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsNCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4NCiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPg0KICAg
IG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X2xocywNCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQ0KICAgIHsNCiAgICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOw0KICAgICAg
X19zdHIuYXBwZW5kKF9fcmhzKTsNCiAgICAgIHJldHVybiBfX3N0cjsNCiAgICB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
DQogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4NCiAgICBv
cGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19s
aHMsIF9DaGFyVCBfX3JocykNCiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOw0KICAgICAgX19zdHJpbmdf
dHlwZSBfX3N0cihfX2xocyk7DQogICAgICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9f
cmhzKTsNCiAgICAgIHJldHVybiBfX3N0cjsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUg
Ym9vbA0KICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9f
cmhzKSA9PSAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj09KGNv
bnN0IF9DaGFyVCogX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJl
KF9fbGhzKSA9PSAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj09
KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAg
ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21w
YXJlKF9fcmhzKSA9PSAwOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJh
dG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMs
DQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX3JocykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvciE9KGNvbnN0IF9DaGFyVCogX19s
aHMsDQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3JocykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29u
c3QgX0NoYXJUKiBfX3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSAhPSAw
OyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yPChjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAg
eyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5l
IGJvb2wNCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpDQogICAg
eyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5l
IGJvb2wNCiAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywNCiAgICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAg
eyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPiAwOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxp
bmUgYm9vbA0KICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShf
X3JocykgPiAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj4oY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAg
ICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpDQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShf
X3JocykgPiAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj4oY29u
c3QgX0NoYXJUKiBfX2xocywNCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShf
X2xocykgPCAwOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yPD0o
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAg
ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3QgX0NoYXJU
KiBfX3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9DQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcjw9KGNvbnN0IF9DaGFyVCogX19saHMs
DQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX3JocykNCiAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPj0gMDsgfQ0KDQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgeyByZXR1
cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29s
DQogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpDQogICAgeyBy
ZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBi
b29sDQogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgIGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQ0KICAgIHsg
cmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDw9IDA7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGlu
ZSB2b2lkDQogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X2xocywNCiAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
cmhzKQ0KICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mIF9faXMsDQogICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JiBfX29zLA0KICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19zdHIpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LF9UcmFpdHM+Jg0KICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf
X2lzLA0KICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19zdHIsIF9DaGFyVCBfX2RlbGltKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsX1RyYWl0cz4mDQogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mIF9faXMsDQogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3N0cik7DQp9DQojIDU0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIg
Mw0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYWxnb3JpdGhtIiAxIDMNCiMgNjUgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2FsZ29yaXRobSIgMw0KDQoNCg0KDQojIDEgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMSAzDQojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9hbGdvLmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
aGVhcC5oIiAxIDMNCiMgNjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2hlYXAuaCIg
Mw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPg0KICAgIHZvaWQN
CiAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwNCiAgICAgICAg
ICAgICAgICBfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAg
X192YWx1ZSkNCiAgICB7DQogICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXgg
LSAxKSAvIDI7DQogICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmICooX19m
aXJzdCArIF9fcGFyZW50KSA8IF9fdmFsdWUpIHsNCiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xl
SW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOw0KICAgICAgICBfX2hvbGVJbmRleCA9IF9f
cGFyZW50Ow0KICAgICAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsNCiAgICAg
IH0NCiAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7DQogICAgfQ0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4NCiAgICBpbmxpbmUgdm9p
ZA0KICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlDQogICAgICAgICAg
X1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0KICAgICAgICAgIF9EaXN0YW5jZVR5
cGU7DQoNCg0KICAgICANCg0KICAgICANCg0KICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rp
c3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlVHlwZSgwKSwNCiAg
ICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOw0KICAgIH0NCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5j
ZSwgdHlwZW5hbWUgX1RwLA0KICAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgdm9p
ZA0KICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFu
Y2UgX19ob2xlSW5kZXgsDQogICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9U
cCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgX0Rpc3RhbmNlIF9fcGFy
ZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOw0KICAgICAgd2hpbGUgKF9faG9sZUluZGV4ID4g
X190b3BJbmRleCAmJiBfX2NvbXAoKihfX2ZpcnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgew0K
ICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7
DQogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7DQogICAgICAgIF9fcGFyZW50ID0gKF9f
aG9sZUluZGV4IC0gMSkgLyAyOw0KICAgICAgfQ0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5k
ZXgpID0gX192YWx1ZTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIHB1c2hf
aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fbGFzdCwNCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZh
bHVlX3R5cGUNCiAgICAgICAgICBfVmFsdWVUeXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQog
ICAgICAgICAgX0Rpc3RhbmNlVHlwZTsNCg0KDQogICAgIA0KDQoNCiAgICAgIF9fcHVzaF9oZWFw
KF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5j
ZVR5cGUoMCksDQogICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpLCBf
X2NvbXApOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPg0KICAgIHZvaWQNCiAgICBfX2Fk
anVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xl
SW5kZXgsDQogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQ0K
ICAgIHsNCiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7DQogICAgICBf
RGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7DQogICAgICB3aGls
ZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7DQogICAgICAgIGlmICgqKF9fZmlyc3QgKyBfX3Nl
Y29uZENoaWxkKSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKQ0KICAgICAgICAg
IF9fc2Vjb25kQ2hpbGQtLTsNCiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihf
X2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7DQogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRD
aGlsZDsNCiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOw0K
ICAgICAgfQ0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsNCiAgICAgICAgKihf
X2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7
DQogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7DQogICAgICB9DQogICAg
ICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7
DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlw
ZW5hbWUgX1RwPg0KICAgIGlubGluZSB2b2lkDQogICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUpDQogICAg
ew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsNCiAgICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0Ow0KICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0
YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1ZSk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4NCiAgICBpbmxpbmUgdm9pZA0KICAgIHBvcF9o
ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19sYXN0KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsNCg0KDQogICAgIA0K
DQogICAgIA0KDQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAt
IDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwNCiAgICAgICAg
ICAgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICB2b2lkDQogICAgX19hZGp1
c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUlu
ZGV4LA0KICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSwgX0Nv
bXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xl
SW5kZXg7DQogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCAr
IDI7DQogICAgICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7DQogICAgICAgIGlmIChf
X2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENo
aWxkIC0gMSkpKSkNCiAgICAgICAgICBfX3NlY29uZENoaWxkLS07DQogICAgICAgICooX19maXJz
dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOw0KICAgICAgICBf
X2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7DQogICAgICAgIF9fc2Vjb25kQ2hpbGQgPSAyICog
KF9fc2Vjb25kQ2hpbGQgKyAxKTsNCiAgICAgIH0NCiAgICAgIGlmIChfX3NlY29uZENoaWxkID09
IF9fbGVuKSB7DQogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCAr
IChfX3NlY29uZENoaWxkIC0gMSkpOw0KICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hp
bGQgLSAxOw0KICAgICAgfQ0KICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgs
IF9fdG9wSW5kZXgsIF9fdmFsdWUsIF9fY29tcCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFy
ZT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2Nv
bXApDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsNCiAgICAgICpfX3Jl
c3VsdCA9ICpfX2ZpcnN0Ow0KICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2Uo
MCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgX192
YWx1ZSwgX19jb21wKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIHBvcF9o
ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQoNCiAgICAgDQoN
Cg0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOw0KICAgICAgX19wb3BfaGVhcChfX2ZpcnN0
LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpLCBfX2Nv
bXApOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+
DQogICAgdm9pZA0KICAgIG1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlDQog
ICAgICAgICAgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0KICAgICAgICAgIF9E
aXN0YW5jZVR5cGU7DQoNCg0KICAgICANCg0KICAgICANCg0KICAgICAgaWYgKF9fbGFzdCAtIF9f
Zmlyc3QgPCAyKSByZXR1cm47DQogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gX19sYXN0IC0g
X19maXJzdDsNCiAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOw0K
DQogICAgICB3aGlsZSAodHJ1ZSkgew0KICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9f
cGFyZW50LCBfX2xlbiwgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsNCiAgICAg
ICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsNCiAgICAgICAgX19wYXJlbnQtLTsNCiAgICAg
IH0NCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0
eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIG1ha2VfaGVhcChfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAg
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUNCiAg
ICAgICAgICBfVmFsdWVUeXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQogICAgICAgICAgX0Rp
c3RhbmNlVHlwZTsNCg0KDQogICAgIA0KDQoNCiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwg
MikgcmV0dXJuOw0KICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7
DQogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsNCg0KICAgICAg
d2hpbGUgKHRydWUpIHsNCiAgICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwg
X19sZW4sDQogICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3Bh
cmVudCkpLCBfX2NvbXApOw0KICAgICAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOw0KICAg
ICAgICBfX3BhcmVudC0tOw0KICAgICAgfQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcmF0b3I+DQogICAgdm9pZA0KICAgIHNvcnRfaGVhcChfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkNCiAgICB7
DQoNCiAgICAgDQoNCiAgICAgDQoNCg0KICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAx
KQ0KICAgICAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSk7DQogICAgfQ0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+DQog
ICAgdm9pZA0KICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQ0KICAgIHsNCg0KICAgICANCg0KDQogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEp
DQogICAgICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tLCBfX2NvbXApOw0KICAgIH0NCg0K
fQ0KIyA2NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAyIDMNCiMgMSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAxIDMNCiMgNjQgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RlbXBidWYuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0K
IyA3NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPg0KICBjbGFzcyBfVGVtcG9yYXJ5
X2J1ZmZlcg0Kew0KDQogDQoNCiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsNCiAgcHRyZGlm
Zl90IF9NX2xlbjsNCiAgX1RwKiBfTV9idWZmZXI7DQoNCg0KICB2b2lkIF9NX2FsbG9jYXRlX2J1
ZmZlcigpIHsNCiAgICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47DQogICAgX01fYnVmZmVyID0g
MDsNCg0KICAgIGlmIChfTV9sZW4gPiAocHRyZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9U
cCkpKQ0KICAgICAgX01fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOw0KDQogICAgd2hp
bGUgKF9NX2xlbiA+IDApIHsNCiAgICAgIF9NX2J1ZmZlciA9IChfVHAqKSBtYWxsb2MoX01fbGVu
ICogc2l6ZW9mKF9UcCkpOw0KICAgICAgaWYgKF9NX2J1ZmZlcikNCiAgICAgICAgYnJlYWs7DQog
ICAgICBfTV9sZW4gLz0gMjsNCiAgICB9DQogIH0NCg0KICB2b2lkIF9NX2luaXRpYWxpemVfYnVm
ZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQ0KICB2b2lkIF9NX2luaXRpYWxpemVfYnVm
ZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUpIHsNCiAgICB1bmluaXRpYWxpemVkX2Zp
bGxfbihfTV9idWZmZXIsIF9NX2xlbiwgdmFsKTsNCiAgfQ0KDQpwdWJsaWM6DQoNCiAgcHRyZGlm
Zl90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9sZW47IH0NCg0KICBwdHJkaWZmX3QgcmVxdWVz
dGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47IH0NCg0KICBfVHAqIGJl
Z2luKCkgeyByZXR1cm4gX01fYnVmZmVyOyB9DQoNCiAgX1RwKiBlbmQoKSB7IHJldHVybiBfTV9i
dWZmZXIgKyBfTV9sZW47IH0NCg0KICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7DQoNCiAgICB0eXBlZGVmIHR5cGVu
YW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rvcg0K
ICAgICAgICAgICAgX1RyaXZpYWw7DQoNCiAgICB0cnkgew0KICAgICAgX01fbGVuID0gZGlzdGFu
Y2UoX19maXJzdCwgX19sYXN0KTsNCiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOw0KICAgICAg
aWYgKF9NX2xlbiA+IDApDQogICAgICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBf
VHJpdmlhbCgpKTsNCiAgICB9DQogICAgY2F0Y2goLi4uKQ0KICAgICAgew0KICAgICAgICBmcmVl
KF9NX2J1ZmZlcik7DQogICAgICAgIF9NX2J1ZmZlciA9IDA7DQogICAgICAgIF9NX2xlbiA9IDA7
DQogICAgICAgIHRocm93Ow0KICAgICAgfQ0KICB9DQoNCiAgfl9UZW1wb3JhcnlfYnVmZmVyKCkg
ew0KICAgIF9EZXN0cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsgX01fbGVuKTsNCiAgICBmcmVl
KF9NX2J1ZmZlcik7DQogIH0NCg0KcHJpdmF0ZToNCg0KICBfVGVtcG9yYXJ5X2J1ZmZlcihjb25z
dCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9DQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3Jh
cnlfYnVmZmVyJikge30NCn07DQoNCn0NCiMgNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2FsZ28uaCIgMiAzDQoNCg0KDQpuYW1lc3BhY2Ugc3RkDQp7DQojIDg0ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0K
ICBpbmxpbmUgY29uc3QgX1RwJg0KICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBf
VHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpDQogICAgew0KDQogICAgIA0KICAgICAgaWYgKF9fYSA8
IF9fYikNCiAgICAgICAgaWYgKF9fYiA8IF9fYykNCiAgICAgICAgICByZXR1cm4gX19iOw0KICAg
ICAgICBlbHNlIGlmIChfX2EgPCBfX2MpDQogICAgICAgICAgcmV0dXJuIF9fYzsNCiAgICAgICAg
ZWxzZQ0KICAgICAgICAgIHJldHVybiBfX2E7DQogICAgICBlbHNlIGlmIChfX2EgPCBfX2MpDQog
ICAgICAgIHJldHVybiBfX2E7DQogICAgICBlbHNlIGlmIChfX2IgPCBfX2MpDQogICAgICAgIHJl
dHVybiBfX2M7DQogICAgICBlbHNlDQogICAgICAgIHJldHVybiBfX2I7DQogICAgfQ0KIyAxMTgg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIGlubGluZSBjb25zdCBfVHAmDQogICAg
X19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYywg
X0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgIGlmIChfX2NvbXAoX19hLCBf
X2IpKQ0KICAgICAgICBpZiAoX19jb21wKF9fYiwgX19jKSkNCiAgICAgICAgICByZXR1cm4gX19i
Ow0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQ0KICAgICAgICAgIHJldHVybiBf
X2M7DQogICAgICAgIGVsc2UNCiAgICAgICAgICByZXR1cm4gX19hOw0KICAgICAgZWxzZSBpZiAo
X19jb21wKF9fYSwgX19jKSkNCiAgICAgICAgcmV0dXJuIF9fYTsNCiAgICAgIGVsc2UgaWYgKF9f
Y29tcChfX2IsIF9fYykpDQogICAgICAgIHJldHVybiBfX2M7DQogICAgICBlbHNlDQogICAgICAg
IHJldHVybiBfX2I7DQogICAgfQ0KIyAxNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRnVu
Y3Rpb24+DQogICAgX0Z1bmN0aW9uDQogICAgZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikNCiAgICB7DQoNCiAgICAgDQogICAgICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgICAgIF9fZigqX19maXJz
dCk7DQogICAgICByZXR1cm4gX19mOw0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1RwPg0KICAgIGlubGluZSBfSW5wdXRJdGVyDQog
ICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAg
Y29uc3QgX1RwJiBfX3ZhbCwNCiAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykNCiAgICB7DQog
ICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgISgqX19maXJzdCA9PSBfX3ZhbCkpDQog
ICAgICAgICsrX19maXJzdDsNCiAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIH0NCg0KDQoNCg0K
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4N
CiAgICBpbmxpbmUgX0lucHV0SXRlcg0KICAgIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLA0KICAgICAg
ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9
IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkNCiAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAg
cmV0dXJuIF9fZmlyc3Q7DQogICAgfQ0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPg0KICAgIF9SYW5kb21BY2Nlc3NJdGVyDQog
ICAgZmluZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsDQogICAgICAgICBjb25zdCBfVHAmIF9fdmFsLA0KICAgICAgICAgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcpDQogICAgew0KICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudA0KICAgICAgICA9IChf
X2xhc3QgLSBfX2ZpcnN0KSA+PiAyOw0KDQogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAg
OyAtLV9fdHJpcF9jb3VudCkgew0KICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVy
biBfX2ZpcnN0Ow0KICAgICAgICArK19fZmlyc3Q7DQoNCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09
IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICAgICAgKytfX2ZpcnN0Ow0KDQogICAgICAgIGlm
ICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7DQogICAgICAgICsrX19maXJzdDsN
Cg0KICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Ow0KICAgICAg
ICArK19fZmlyc3Q7DQogICAgICB9DQoNCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7
DQogICAgICBjYXNlIDM6DQogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9f
Zmlyc3Q7DQogICAgICAgICsrX19maXJzdDsNCiAgICAgIGNhc2UgMjoNCiAgICAgICAgaWYgKCpf
X2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICAgICAgKytfX2ZpcnN0Ow0KICAg
ICAgY2FzZSAxOg0KICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0
Ow0KICAgICAgICArK19fZmlyc3Q7DQogICAgICBjYXNlIDA6DQogICAgICBkZWZhdWx0Og0KICAg
ICAgICByZXR1cm4gX19sYXN0Ow0KICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+DQogICAg
X1JhbmRvbUFjY2Vzc0l0ZXINCiAgICBmaW5kX2lmKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk
LA0KICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpDQogICAgew0KICAgICAg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90
eXBlIF9fdHJpcF9jb3VudA0KICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOw0KDQog
ICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgew0KICAgICAg
ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAgICAgICsrX19maXJz
dDsNCg0KICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAg
ICAgICsrX19maXJzdDsNCg0KICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9f
Zmlyc3Q7DQogICAgICAgICsrX19maXJzdDsNCg0KICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0
KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAgICAgICsrX19maXJzdDsNCiAgICAgIH0NCg0KICAgICAg
c3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsNCiAgICAgIGNhc2UgMzoNCiAgICAgICAgaWYgKF9f
cHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Ow0KICAgICAgICArK19fZmlyc3Q7DQogICAg
ICBjYXNlIDI6DQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsN
CiAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAgY2FzZSAxOg0KICAgICAgICBpZiAoX19wcmVkKCpf
X2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAgICAgICsrX19maXJzdDsNCiAgICAgIGNhc2Ug
MDoNCiAgICAgIGRlZmF1bHQ6DQogICAgICAgIHJldHVybiBfX2xhc3Q7DQogICAgICB9DQogICAg
fQ0KIyAyODkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+DQogICAgaW5saW5lIF9JbnB1
dEl0ZXINCiAgICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQog
ICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAgICAg
IHJldHVybiBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9faXRlcmF0b3JfY2F0ZWdvcnko
X19maXJzdCkpOw0KICAgIH0NCiMgMzA5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h
bGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRp
Y2F0ZT4NCiAgICBpbmxpbmUgX0lucHV0SXRlcg0KICAgIGZpbmRfaWYoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQ0K
ICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAgICAgIHJldHVybiBmaW5kX2lmKF9fZmlyc3QsIF9f
bGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAgICB9DQojIDMy
OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlcj4NCiAgICBfRm9yd2FyZEl0ZXINCiAgICBhZGphY2VudF9maW5k
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQ0KICAgIHsNCg0KICAg
ICANCiAgICAgDQoNCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkNCiAgICAgICAgcmV0dXJu
IF9fbGFzdDsNCiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0Ow0KICAgICAgd2hp
bGUoKytfX25leHQgIT0gX19sYXN0KSB7DQogICAgICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0
KQ0KICAgICAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgICAgICBfX2ZpcnN0ID0gX19uZXh0Ow0K
ICAgICAgfQ0KICAgICAgcmV0dXJuIF9fbGFzdDsNCiAgICB9DQojIDM1OCAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4NCiAgICBfRm9yd2FyZEl0ZXINCiAgICBh
ZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0K
ICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQ0KICAgIHsN
Cg0KICAgICANCiAgICAgDQoNCg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgICAg
ICByZXR1cm4gX19sYXN0Ow0KICAgICAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7DQog
ICAgICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsNCiAgICAgICAgaWYgKF9fYmluYXJ5X3By
ZWQoKl9fZmlyc3QsICpfX25leHQpKQ0KICAgICAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgICAg
ICBfX2ZpcnN0ID0gX19uZXh0Ow0KICAgICAgfQ0KICAgICAgcmV0dXJuIF9fbGFzdDsNCiAgICB9
DQojIDM4NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4NCiAgICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQ0KICAgIGNvdW50KF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkNCiAg
ICB7DQoNCiAgICAgDQogICAgIA0KDQogICAgIA0KICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsNCiAgICAgIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9f
dmFsdWUpDQogICAgICAgICAgKytfX247DQogICAgICByZXR1cm4gX19uOw0KICAgIH0NCiMgNDEx
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4NCiAgICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQ0KICAgIGNvdW50X2lmKF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQ0K
ICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7DQogICAgICBmb3IgKCA7IF9fZmly
c3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQ0K
ICAgICAgICAgICsrX19uOw0KICAgICAgcmV0dXJuIF9fbjsNCiAgICB9DQojIDQ1MCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9G
b3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+DQogICAgX0ZvcndhcmRJdGVyMQ0K
ICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEs
DQogICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0
MikNCiAgICB7DQoNCiAgICAgDQogICAgIA0KICAgICANCg0KDQoNCg0KICAgICAgaWYgKF9fZmly
c3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikNCiAgICAgICAgcmV0dXJuIF9f
Zmlyc3QxOw0KDQoNCiAgICAgIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOw0KICAgICAg
KytfX3RtcDsNCiAgICAgIGlmIChfX3RtcCA9PSBfX2xhc3QyKQ0KICAgICAgICByZXR1cm4gZmlu
ZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsNCg0KDQoNCiAgICAgIF9Gb3J3YXJkSXRl
cjIgX19wMSwgX19wOw0KDQogICAgICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsNCg0KICAgICAg
X0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsNCg0KICAgICAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEpIHsNCiAgICAgICAgX19maXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xh
c3QxLCAqX19maXJzdDIpOw0KICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkNCiAgICAg
ICAgICByZXR1cm4gX19sYXN0MTsNCg0KICAgICAgICBfX3AgPSBfX3AxOw0KICAgICAgICBfX2N1
cnJlbnQgPSBfX2ZpcnN0MTsNCiAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpDQog
ICAgICAgICAgcmV0dXJuIF9fbGFzdDE7DQoNCiAgICAgICAgd2hpbGUgKCpfX2N1cnJlbnQgPT0g
Kl9fcCkgew0KICAgICAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQ0KICAgICAgICAgICAgcmV0
dXJuIF9fZmlyc3QxOw0KICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQ0KICAg
ICAgICAgICAgcmV0dXJuIF9fbGFzdDE7DQogICAgICAgIH0NCg0KICAgICAgICArK19fZmlyc3Qx
Ow0KICAgICAgfQ0KICAgICAgcmV0dXJuIF9fZmlyc3QxOw0KICAgIH0NCiMgNTIyICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWQ+
DQogICAgX0ZvcndhcmRJdGVyMQ0KICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBf
Rm9yd2FyZEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIs
IF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVkaWNh
dGUpDQogICAgew0KDQogICAgIA0KICAgICANCiAgICAgDQoNCg0KDQoNCiAgICAgIGlmIChfX2Zp
cnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpDQogICAgICAgIHJldHVybiBf
X2ZpcnN0MTsNCg0KDQogICAgICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsNCiAgICAg
ICsrX190bXA7DQogICAgICBpZiAoX190bXAgPT0gX19sYXN0Mikgew0KICAgICAgICB3aGlsZSAo
X19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIp
KQ0KICAgICAgICAgICsrX19maXJzdDE7DQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsNCiAgICAg
IH0NCg0KDQoNCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOw0KDQogICAgICBfX3AxID0g
X19maXJzdDI7ICsrX19wMTsNCg0KICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2Zp
cnN0MTsNCg0KICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsNCiAgICAgICAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsNCiAgICAgICAgICBpZiAoX19wcmVkaWNhdGUoKl9f
Zmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgKytfX2Zp
cnN0MTsNCiAgICAgICAgfQ0KICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAh
X19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgICAgICsrX19maXJzdDE7
DQogICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAgICAgICAgIHJldHVybiBfX2xh
c3QxOw0KDQogICAgICAgIF9fcCA9IF9fcDE7DQogICAgICAgIF9fY3VycmVudCA9IF9fZmlyc3Qx
Ow0KICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFzdDE7DQoN
CiAgICAgICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7DQogICAgICAg
ICAgaWYgKCsrX19wID09IF9fbGFzdDIpDQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7DQog
ICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpDQogICAgICAgICAgICByZXR1cm4g
X19sYXN0MTsNCiAgICAgICAgfQ0KDQogICAgICAgICsrX19maXJzdDE7DQogICAgICB9DQogICAg
ICByZXR1cm4gX19maXJzdDE7DQogICAgfQ0KIyA1OTYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu
YW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHA+DQogICAgX0ZvcndhcmRJdGVyDQogICAgc2VhcmNo
X24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAg
ICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCkNCiAgICB7DQoNCiAgICAgDQog
ICAgIA0KDQogICAgIA0KDQogICAgICBpZiAoX19jb3VudCA8PSAwKQ0KICAgICAgICByZXR1cm4g
X19maXJzdDsNCiAgICAgIGVsc2Ugew0KICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBf
X2xhc3QsIF9fdmFsKTsNCiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAg
ICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7DQogICAgICAgICAgX0ZvcndhcmRJdGVy
IF9faSA9IF9fZmlyc3Q7DQogICAgICAgICAgKytfX2k7DQogICAgICAgICAgd2hpbGUgKF9faSAh
PSBfX2xhc3QgJiYgX19uICE9IDAgJiYgKl9faSA9PSBfX3ZhbCkgew0KICAgICAgICAgICAgKytf
X2k7DQogICAgICAgICAgICAtLV9fbjsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKF9fbiA9
PSAwKQ0KICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7DQogICAgICAgICAgZWxzZQ0KICAgICAg
ICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsNCiAgICAgICAgfQ0KICAg
ICAgICByZXR1cm4gX19sYXN0Ow0KICAgICAgfQ0KICAgIH0NCiMgNjQzICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwLA0KICAgICAgICAgICB0eXBlbmFt
ZSBfQmluYXJ5UHJlZD4NCiAgICBfRm9yd2FyZEl0ZXINCiAgICBzZWFyY2hfbihfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICBfSW50ZWdlciBf
X2NvdW50LCBjb25zdCBfVHAmIF9fdmFsLA0KICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmlu
YXJ5X3ByZWQpDQogICAgew0KDQogICAgIA0KICAgICANCg0KDQogICAgICBpZiAoX19jb3VudCA8
PSAwKQ0KICAgICAgICByZXR1cm4gX19maXJzdDsNCiAgICAgIGVsc2Ugew0KICAgICAgICB3aGls
ZSAoX19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19m
aXJzdCwgX192YWwpKQ0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgKytfX2ZpcnN0Ow0K
ICAgICAgICB9DQogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICAgICAg
IF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOw0KICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2kg
PSBfX2ZpcnN0Ow0KICAgICAgICAgICsrX19pOw0KICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19s
YXN0ICYmIF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7DQogICAgICAg
ICAgICArK19faTsNCiAgICAgICAgICAgIC0tX19uOw0KICAgICAgICAgIH0NCiAgICAgICAgICBp
ZiAoX19uID09IDApDQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsNCiAgICAgICAgICBlbHNl
IHsNCiAgICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0KSB7DQogICAgICAgICAgICAgIGlm
IChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkNCiAgICAgICAgICAgICAgICBicmVhazsNCiAg
ICAgICAgICAgICAgKytfX2k7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBfX2ZpcnN0ID0g
X19pOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gX19sYXN0Ow0KICAg
ICAgfQ0KICAgIH0NCiMgNjk3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgi
IDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJ
dGVyMj4NCiAgICBfRm9yd2FyZEl0ZXIyDQogICAgc3dhcF9yYW5nZXMoX0ZvcndhcmRJdGVyMSBf
X2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlcjIgX19maXJzdDIpDQogICAgew0KDQogICAgIA0KICAgICANCiAgICAgDQoNCg0KICAgICAN
Cg0KDQoNCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytf
X2ZpcnN0MikNCiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0Mik7DQogICAgICBy
ZXR1cm4gX19maXJzdDI7DQogICAgfQ0KIyA3MzIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
T3V0cHV0SXRlciwgdHlwZW5hbWUgX1VuYXJ5T3BlcmF0aW9uPg0KICAgIF9PdXRwdXRJdGVyDQog
ICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9v
cCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQoNCg0KICAgICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQ0KICAgICAgICAqX19yZXN1bHQgPSBfX3Vu
YXJ5X29wKCpfX2ZpcnN0KTsNCiAgICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgICB9DQojIDc2NSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0
ZXIsDQogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24+DQogICAgX091dHB1dEl0
ZXINCiAgICB0cmFuc2Zvcm0oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz
dDEsDQogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwNCiAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkNCiAgICB7
DQoNCiAgICAgDQogICAgIA0KICAgICANCg0KDQoNCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0g
X19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jlc3VsdCkNCiAgICAgICAgKl9f
cmVzdWx0ID0gX19iaW5hcnlfb3AoKl9fZmlyc3QxLCAqX19maXJzdDIpOw0KICAgICAgcmV0dXJu
IF9fcmVzdWx0Ow0KICAgIH0NCiMgNzk2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h
bGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+
DQogICAgdm9pZA0KICAgIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsDQogICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAm
IF9fbmV3X3ZhbHVlKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAgICAgDQoNCg0KICAgICAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgICAgICBpZiAoKl9fZmly
c3QgPT0gX19vbGRfdmFsdWUpDQogICAgICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsNCiAg
ICB9DQojIDgyNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5h
bWUgX1RwPg0KICAgIHZvaWQNCiAgICByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNv
bnN0IF9UcCYgX19uZXdfdmFsdWUpDQogICAgew0KDQogICAgIA0KICAgICANCg0KICAgICANCg0K
DQogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgICAgIGlm
IChfX3ByZWQoKl9fZmlyc3QpKQ0KICAgICAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7DQog
ICAgfQ0KIyA4NTYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5h
bWUgX1RwPg0KICAgIF9PdXRwdXRJdGVyDQogICAgcmVwbGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LA0KICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBf
VHAmIF9fbmV3X3ZhbHVlKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAgICAgDQoNCg0KICAg
ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQ0KICAg
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVlIDog
Kl9fZmlyc3Q7DQogICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0KIyA4ODggIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwNCiAgICAg
ICAgICAgdHlwZW5hbWUgX1RwPg0KICAgIF9PdXRwdXRJdGVyDQogICAgcmVwbGFjZV9jb3B5X2lm
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRl
IF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkNCiAgICB7DQoNCiAgICAgDQogICAgIA0K
DQogICAgIA0KDQoNCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwg
KytfX3Jlc3VsdCkNCiAgICAgICAgKl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3
X3ZhbHVlIDogKl9fZmlyc3Q7DQogICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0KIyA5MTgg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9HZW5lcmF0b3I+DQogICAgdm9pZA0KICAgIGdl
bmVyYXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfR2VuZXJh
dG9yIF9fZ2VuKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCg0KICAgICAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgICAgICAqX19maXJzdCA9IF9fZ2VuKCk7DQog
ICAgfQ0KIyA5NDIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9H
ZW5lcmF0b3I+DQogICAgX091dHB1dEl0ZXINCiAgICBnZW5lcmF0ZV9uKF9PdXRwdXRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRvciBfX2dlbikNCiAgICB7DQoNCiAgICAgDQoNCg0K
DQogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpDQogICAgICAgICpfX2Zp
cnN0ID0gX19nZW4oKTsNCiAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIH0NCiMgOTY5ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBfT3V0
cHV0SXRlcg0KICAgIHJlbW92ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsDQogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYg
X192YWx1ZSkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQogICAgIA0KDQoNCiAgICAgIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICAgICAgaWYgKCEoKl9fZmlyc3Qg
PT0gX192YWx1ZSkpIHsNCiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsNCiAgICAgICAg
ICArK19fcmVzdWx0Ow0KICAgICAgICB9DQogICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0K
IyAxMDAzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9Q
cmVkaWNhdGU+DQogICAgX091dHB1dEl0ZXINCiAgICByZW1vdmVfY29weV9pZihfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0K
DQogICAgIA0KDQoNCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkN
CiAgICAgICAgaWYgKCFfX3ByZWQoKl9fZmlyc3QpKSB7DQogICAgICAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3Q7DQogICAgICAgICAgKytfX3Jlc3VsdDsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJu
IF9fcmVzdWx0Ow0KICAgIH0NCiMgMTAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1Rw
Pg0KICAgIF9Gb3J3YXJkSXRlcg0KICAgIHJlbW92ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbHVlKQ0KICAgIHsN
Cg0KICAgICANCiAgICAgDQoNCiAgICAgDQoNCg0KICAgICAgX19maXJzdCA9IGZpbmQoX19maXJz
dCwgX19sYXN0LCBfX3ZhbHVlKTsNCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0Ow0K
ICAgICAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX192
YWx1ZSk7DQogICAgfQ0KIyAxMDczICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
LmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGlj
YXRlPg0KICAgIF9Gb3J3YXJkSXRlcg0KICAgIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQp
DQogICAgew0KDQogICAgIA0KICAgICANCg0KDQogICAgICBfX2ZpcnN0ID0gZmluZF9pZihfX2Zp
cnN0LCBfX2xhc3QsIF9fcHJlZCk7DQogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsN
CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5X2lmKCsrX19pLCBfX2xhc3QsIF9fZmlyc3Qs
IF9fcHJlZCk7DQogICAgfQ0KDQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0KICAgIF9PdXRwdXRJdGVyDQogICAgX191bmlx
dWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICBvdXRwdXRf
aXRlcmF0b3JfdGFnKQ0KICAgIHsNCg0KICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
bnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsNCiAgICAgICpfX3Jlc3Vs
dCA9IF9fdmFsdWU7DQogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICAgICAg
aWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsNCiAgICAgICAgICBfX3ZhbHVlID0gKl9fZmly
c3Q7DQogICAgICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOw0KICAgICAgICB9DQogICAgICBy
ZXR1cm4gKytfX3Jlc3VsdDsNCiAgICB9DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPg0KICAgIF9Gb3J3YXJkSXRlcg0K
ICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwN
CiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAg
ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCg0KICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3Q7DQogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICAgICAgaWYgKCEo
Kl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkNCiAgICAgICAgICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0
Ow0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7DQogICAgfQ0KIyAxMTQ1ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQogICAgaW5saW5lIF9PdXRwdXRJdGVyDQogICAgdW5p
cXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQog
ICAgIA0KDQoNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJ
dGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOw0KDQogICAgICBpZiAoX19maXJzdCA9
PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsNCiAgICAgIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9JdGVyVHlwZSgpKTsNCiAgICB9DQojIDExNzAgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRp
Y2F0ZT4NCiAgICBfT3V0cHV0SXRlcg0KICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LA0KICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk
LA0KICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykNCiAgICB7DQoNCiAgICAg
DQoNCg0KDQogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVl
X3R5cGUgX192YWx1ZSA9ICpfX2ZpcnN0Ow0KICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsNCiAg
ICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQ0KICAgICAgICBpZiAoIV9fYmluYXJ5X3By
ZWQoX192YWx1ZSwgKl9fZmlyc3QpKSB7DQogICAgICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0Ow0K
ICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJu
ICsrX19yZXN1bHQ7DQogICAgfQ0KIyAxMTk5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Zv
cndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPg0KICAgIF9Gb3J3YXJkSXRlcg0K
ICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwN
CiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAg
ICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwNCiAgICAgICAgICAgICAgICAgIGZv
cndhcmRfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCg0KICAgICANCg0KDQoNCiAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0Ow0KICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAgICAg
IGlmICghX19iaW5hcnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAq
X19maXJzdDsNCiAgICAgIHJldHVybiArK19fcmVzdWx0Ow0KICAgIH0NCiMgMTIzMiAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRl
Pg0KICAgIGlubGluZSBfT3V0cHV0SXRlcg0KICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQsDQogICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQ0K
ICAgIHsNCg0KICAgICANCiAgICAgDQoNCg0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7DQoNCiAg
ICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0Ow0KICAgICAgcmV0dXJu
IF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LA0KX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQs
IF9JdGVyVHlwZSgpKTsNCiAgICB9DQojIDEyNjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+DQogICAgX0Zv
cndhcmRJdGVyDQogICAgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0KQ0KICAgIHsNCg0KICAgICAgICAgDQogICAgICAgICANCg0KDQogICAgICAgICAgX19m
aXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0KTsNCiAgICAgICAgICByZXR1cm4g
dW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsNCiAgICB9DQojIDEyOTAgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+DQogICAgX0ZvcndhcmRJ
dGVyDQogICAgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LA0KICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpDQogICAgew0KDQog
ICAgIA0KICAgICANCg0KDQoNCiAgICAgIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3Qs
IF9fbGFzdCwgX19iaW5hcnlfcHJlZCk7DQogICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJz
dCwgX19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsNCiAgICB9DQoNCg0KDQoNCg0KDQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPg0KICAgIHZvaWQNCiAgICBf
X3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnKQ0KICAgIHsNCiAgICAgICAgICB3aGlsZSAodHJ1ZSkNCiAgICAgICAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0KQ0KICAgICAgICAgICAgICAgICAg
cmV0dXJuOw0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgaXRlcl9zd2FwKF9f
Zmlyc3QrKywgX19sYXN0KTsNCiAgICB9DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1JhbmRvbUFjY2Vzc0l0ZXI+DQogICAgdm9pZA0KICAgIF9fcmV2ZXJzZShfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAgICAg
ICB3aGlsZSAoX19maXJzdCA8IF9fbGFzdCkNCiAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0
KyssIC0tX19sYXN0KTsNCiAgICB9DQojIDEzNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+DQog
ICAgaW5saW5lIHZvaWQNCiAgICByZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQ0KICAgIHsNCg0KICAgICAgICAgDQoNCiAgICAgICAg
ICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3Qp
KTsNCiAgICB9DQojIDEzNzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg
Mw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9PdXRw
dXRJdGVyPg0KICAgIF9PdXRwdXRJdGVyDQogICAgcmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkNCiAgICB7DQoNCiAgICAgDQogICAg
IA0KDQoNCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICAgICAtLV9fbGFz
dDsNCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fbGFzdDsNCiAgICAgICAgKytfX3Jlc3VsdDsNCiAg
ICAgIH0NCiAgICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgICB9DQojIDEzOTkgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXVjbGlk
ZWFuUmluZ0VsZW1lbnQ+DQogICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50DQogICAgX19nY2QoX0V1
Y2xpZGVhblJpbmdFbGVtZW50IF9fbSwgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikNCiAgICB7
DQogICAgICB3aGlsZSAoX19uICE9IDApIHsNCiAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50
IF9fdCA9IF9fbSAlIF9fbjsNCiAgICAgICAgX19tID0gX19uOw0KICAgICAgICBfX24gPSBfX3Q7
DQogICAgICB9DQogICAgICByZXR1cm4gX19tOw0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPg0KICAgIHZvaWQNCiAgICBfX3JvdGF0ZShfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsDQogICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgZm9yd2FyZF9pdGVy
YXRvcl90YWcpDQogICAgew0KICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAoX19s
YXN0ID09IF9fbWlkZGxlKSkNCiAgICAgICAgcmV0dXJuOw0KDQogICAgICBfRm9yd2FyZEl0ZXIg
X19maXJzdDIgPSBfX21pZGRsZTsNCiAgICAgIGRvIHsNCiAgICAgICAgc3dhcCgqX19maXJzdCsr
LCAqX19maXJzdDIrKyk7DQogICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQ0KICAgICAg
ICAgIF9fbWlkZGxlID0gX19maXJzdDI7DQogICAgICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xh
c3QpOw0KDQogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOw0KDQogICAgICB3aGlsZSAoX19maXJz
dDIgIT0gX19sYXN0KSB7DQogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOw0K
ICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkNCiAgICAgICAgICBfX21pZGRsZSA9IF9f
Zmlyc3QyOw0KICAgICAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpDQogICAgICAgICAg
X19maXJzdDIgPSBfX21pZGRsZTsNCiAgICAgIH0NCiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4NCiAgICB2b2lkDQogICAgX19yb3RhdGUo
X0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQog
ICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCg0KICAgICAN
Cg0KDQogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRk
bGUpKQ0KICAgICAgICByZXR1cm47DQoNCiAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRs
ZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7DQogICAgICBfX3JldmVyc2UoX19taWRk
bGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7DQoNCiAgICAgIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9fbGFzdCkNCiAgICAgICAgc3dh
cCAoKl9fZmlyc3QrKywgKi0tX19sYXN0KTsNCg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRk
bGUpIHsNCiAgICAgICAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnKCkpOw0KICAgICAgfQ0KICAgICAgZWxzZSB7DQogICAgICAgIF9fcmV2ZXJz
ZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7DQogICAg
ICB9DQogICAgfQ0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlcj4NCiAgICB2b2lkDQogICAgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwN
CiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwNCiAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvcl90YWcpDQogICAgew0KDQogICAgIA0KDQoNCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21p
ZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpDQogICAgICAgIHJldHVybjsNCg0KICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZm
ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQoNCiAgICAg
IF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0Ow0KICAgICAgX0Rpc3RhbmNlIF9fayA9
IF9fbWlkZGxlIC0gX19maXJzdDsNCiAgICAgIF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7DQoN
CiAgICAgIGlmIChfX2sgPT0gX19sKSB7DQogICAgICAgIHN3YXBfcmFuZ2VzKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX21pZGRsZSk7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0NCg0KICAgICAgX0Rp
c3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwgX19rKTsNCg0KICAgICAgZm9yIChfRGlzdGFuY2UgX19p
ID0gMDsgX19pIDwgX19kOyBfX2krKykgew0KICAgICAgICBfVmFsdWVUeXBlIF9fdG1wID0gKl9f
Zmlyc3Q7DQogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7DQoNCiAgICAg
ICAgaWYgKF9fayA8IF9fbCkgew0KICAgICAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9f
aiA8IF9fbC9fX2Q7IF9faisrKSB7DQogICAgICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9f
bCkgew0KICAgICAgICAgICAgICAqX19wID0gKihfX3AgLSBfX2wpOw0KICAgICAgICAgICAgICBf
X3AgLT0gX19sOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAqX19wID0gKihfX3AgKyBf
X2spOw0KICAgICAgICAgICAgX19wICs9IF9fazsNCiAgICAgICAgICB9DQogICAgICAgIH0NCg0K
ICAgICAgICBlbHNlIHsNCiAgICAgICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBf
X2svX19kIC0gMTsgX19qICsrKSB7DQogICAgICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19r
KSB7DQogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7DQogICAgICAgICAgICAgIF9f
cCArPSBfX2s7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICpfX3AgPSAqIChfX3AgLSBf
X2wpOw0KICAgICAgICAgICAgX19wIC09IF9fbDsNCiAgICAgICAgICB9DQogICAgICAgIH0NCg0K
ICAgICAgICAqX19wID0gX190bXA7DQogICAgICAgICsrX19maXJzdDsNCiAgICAgIH0NCiAgICB9
DQojIDE1NjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+DQogICAgaW5saW5lIHZvaWQNCiAgICByb3RhdGUo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX0ZvcndhcmRJdGVy
IF9fbGFzdCkNCiAgICB7DQoNCiAgICAgDQoNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsNCiAg
ICAgIF9fcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9JdGVyVHlwZSgpKTsNCiAg
ICB9DQojIDE1ODkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0KICAg
IF9PdXRwdXRJdGVyDQogICAgcm90YXRlX2NvcHkoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBf
T3V0cHV0SXRlciBfX3Jlc3VsdCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQoNCiAgICAgIHJl
dHVybiBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fcmVz
dWx0KSk7DQogICAgfQ0KIyAxNjEyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
LmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Rpc3RhbmNlPg0KICAgIGlubGluZSBfRGlzdGFu
Y2UNCiAgICBfX3JhbmRvbV9udW1iZXIoX0Rpc3RhbmNlIF9fbikNCiAgICB7DQoNCg0KDQogICAg
ICByZXR1cm4gcmFuZCgpICUgX19uOw0KDQogICAgfQ0KIyAxNjM0ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXI+DQogICAgaW5saW5lIHZvaWQNCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpDQogICAgew0KDQogICAgIA0K
DQoNCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOw0KICAgICAgZm9yIChfUmFu
ZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpDQog
ICAgICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9f
Zmlyc3QpICsgMSkpOw0KICAgIH0NCiMgMTY2MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl
bmFtZSBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPg0KICAgIHZvaWQNCiAgICByYW5kb21fc2h1ZmZs
ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQog
ICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQ0KICAgIHsN
Cg0KICAgICANCg0KDQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsNCiAgICAg
IGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7
ICsrX19pKQ0KICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBf
X2ZpcnN0KSArIDEpKTsNCiAgICB9DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPg0KICAgIF9Gb3J3YXJkSXRlcg0KICAg
IF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0K
ICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLA0KICAgICAgICAgICAgICAgIGZvcndh
cmRfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0
dXJuIF9fZmlyc3Q7DQoNCiAgICAgIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQ0KICAgICAgICBp
ZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7DQoNCiAgICAgIF9Gb3J3YXJk
SXRlciBfX25leHQgPSBfX2ZpcnN0Ow0KDQogICAgICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0
KQ0KICAgICAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7DQogICAgICAgICAgc3dhcCgqX19maXJz
dCwgKl9fbmV4dCk7DQogICAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAgICB9DQoNCiAgICAgIHJl
dHVybiBfX2ZpcnN0Ow0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp
ZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPg0KICAgIF9CaWRpcmVjdGlvbmFs
SXRlcg0KICAgIF9fcGFydGl0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLA0K
ICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAg
IHdoaWxlICh0cnVlKSB7DQogICAgICAgIHdoaWxlICh0cnVlKQ0KICAgICAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkNCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgICAgICAgIGVs
c2UgaWYgKF9fcHJlZCgqX19maXJzdCkpDQogICAgICAgICAgICArK19fZmlyc3Q7DQogICAgICAg
ICAgZWxzZQ0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIC0tX19sYXN0Ow0KICAgICAgICB3
aGlsZSAodHJ1ZSkNCiAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgICAg
ICByZXR1cm4gX19maXJzdDsNCiAgICAgICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xhc3QpKQ0K
ICAgICAgICAgICAgLS1fX2xhc3Q7DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgYnJlYWs7
DQogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOw0KICAgICAgICArK19fZmlyc3Q7
DQogICAgICB9DQogICAgfQ0KIyAxNzQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h
bGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJl
ZGljYXRlPg0KICAgIGlubGluZSBfRm9yd2FyZEl0ZXINCiAgICBwYXJ0aXRpb24oX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgIF9QcmVkaWNh
dGUgX19wcmVkKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCg0KICAgICAgcmV0dXJuIF9fcGFy
dGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmly
c3QpKTsNCiAgICB9DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfRGlzdGFuY2U+DQogICAgX0Zvcndh
cmRJdGVyDQogICAgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbikNCiAgICB7DQogICAgICBpZiAoX19s
ZW4gPT0gMSkNCiAgICAgICAgcmV0dXJuIF9fcHJlZCgqX19maXJzdCkgPyBfX2xhc3QgOiBfX2Zp
cnN0Ow0KICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsNCiAgICAgIGFkdmFu
Y2UoX19taWRkbGUsIF9fbGVuIC8gMik7DQogICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9f
aW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbWlkZGxlLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu
IC8gMik7DQogICAgICBfRm9yd2FyZEl0ZXIgX19lbmQgPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRp
dGlvbihfX21pZGRsZSwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19wcmVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIpOw0KICAgICAgcm90
YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7DQogICAgICBhZHZhbmNlKF9fYmVnaW4sIGRp
c3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOw0KICAgICAgcmV0dXJuIF9fYmVnaW47DQogICAgfQ0K
DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Q
b2ludGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLA0KICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFu
Y2U+DQogICAgX0ZvcndhcmRJdGVyDQogICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpDQogICAgew0K
ICAgICAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsNCiAgICAgICAgX0ZvcndhcmRJdGVy
IF9fcmVzdWx0MSA9IF9fZmlyc3Q7DQogICAgICAgIF9Qb2ludGVyIF9fcmVzdWx0MiA9IF9fYnVm
ZmVyOw0KICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQ0KICAg
ICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSB7DQogICAgICAgICAgICAqX19yZXN1bHQxID0g
Kl9fZmlyc3Q7DQogICAgICAgICAgICArK19fcmVzdWx0MTsNCiAgICAgICAgICB9DQogICAgICAg
ICAgZWxzZSB7DQogICAgICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7DQogICAgICAgICAg
ICArK19fcmVzdWx0MjsNCiAgICAgICAgICB9DQogICAgICAgIGNvcHkoX19idWZmZXIsIF9fcmVz
dWx0MiwgX19yZXN1bHQxKTsNCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0MTsNCiAgICAgIH0NCiAg
ICAgIGVsc2Ugew0KICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAg
ICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOw0KICAgICAgICBfRm9yd2FyZEl0ZXIg
X19iZWdpbiA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19wcmVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2xlbiAvIDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsNCiAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKCBf
X21pZGRsZSwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcHJlZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMiwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZl
ciwgX19idWZmZXJfc2l6ZSk7DQogICAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21pZGRsZSwgX19l
bmQpOw0KICAgICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkp
Ow0KICAgICAgICByZXR1cm4gX19iZWdpbjsNCiAgICAgIH0NCiAgICB9DQojIDE4NDggIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+DQogICAgX0ZvcndhcmRJdGVyDQogICAg
c3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwNCiAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQ0KICAgIHsNCg0KICAg
ICANCiAgICAgDQoNCg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgICAgICByZXR1
cm4gX19maXJzdDsNCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOw0K
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojpk
aWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsNCg0KICAgICAgICBfVGVtcG9yYXJ5X2J1ZmZl
cjxfRm9yd2FyZEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7DQogICAg
ICAgIGlmIChfX2J1Zi5zaXplKCkgPiAwKQ0KICAgICAgICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0
aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3Rl
ZF9zaXplKCkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19idWYuYmVnaW4oKSwgX19idWYuc2l6ZSgpKTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIHJl
dHVybiBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlw
ZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7DQogICAgICB9DQogICAgfQ0KDQoNCg0KDQoNCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPg0KICAg
IF9SYW5kb21BY2Nlc3NJdGVyDQogICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1RwIF9fcGl2b3QpDQogICAgew0KICAgICAgd2hpbGUgKHRydWUpIHsNCiAg
ICAgICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkNCiAgICAgICAgICArK19fZmlyc3Q7DQog
ICAgICAgIC0tX19sYXN0Ow0KICAgICAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpDQogICAg
ICAgICAgLS1fX2xhc3Q7DQogICAgICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQ0KICAgICAg
ICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsN
CiAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Nv
bXBhcmU+DQogICAgX1JhbmRvbUFjY2Vzc0l0ZXINCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24o
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCwgX0NvbXBhcmUgX19jb21wKQ0KICAg
IHsNCiAgICAgIHdoaWxlICh0cnVlKSB7DQogICAgICAgIHdoaWxlIChfX2NvbXAoKl9fZmlyc3Qs
IF9fcGl2b3QpKQ0KICAgICAgICAgICsrX19maXJzdDsNCiAgICAgICAgLS1fX2xhc3Q7DQogICAg
ICAgIHdoaWxlIChfX2NvbXAoX19waXZvdCwgKl9fbGFzdCkpDQogICAgICAgICAgLS1fX2xhc3Q7
DQogICAgICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQ0KICAgICAgICAgIHJldHVybiBfX2Zp
cnN0Ow0KICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsNCiAgICAgICAgKytfX2Zp
cnN0Ow0KICAgICAgfQ0KICAgIH0NCiMgMTkyOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfYWxnby5oIiAzDQogIGVudW0geyBfTV90aHJlc2hvbGQgPSAxNiB9Ow0KDQoNCg0KDQoNCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPg0KICAg
IHZvaWQNCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwgX1RwIF9fdmFsKQ0KICAgIHsNCiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9
IF9fbGFzdDsNCiAgICAgIC0tX19uZXh0Ow0KICAgICAgd2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkg
ew0KICAgICAgICAqX19sYXN0ID0gKl9fbmV4dDsNCiAgICAgICAgX19sYXN0ID0gX19uZXh0Ow0K
ICAgICAgICAtLV9fbmV4dDsNCiAgICAgIH0NCiAgICAgICpfX2xhc3QgPSBfX3ZhbDsNCiAgICB9
DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl
bmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIHZvaWQNCiAgICBfX3VuZ3VhcmRlZF9s
aW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsLCBfQ29tcGFy
ZSBfX2NvbXApDQogICAgew0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0
Ow0KICAgICAgLS1fX25leHQ7DQogICAgICB3aGlsZSAoX19jb21wKF9fdmFsLCAqX19uZXh0KSkg
ew0KICAgICAgICAqX19sYXN0ID0gKl9fbmV4dDsNCiAgICAgICAgX19sYXN0ID0gX19uZXh0Ow0K
ICAgICAgICAtLV9fbmV4dDsNCiAgICAgIH0NCiAgICAgICpfX2xhc3QgPSBfX3ZhbDsNCiAgICB9
DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPg0KICAg
IHZvaWQNCiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCiAgICB7DQogICAgICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpIHJldHVybjsNCg0KICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0
ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpDQogICAgICB7DQogICAgICAgIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX192YWwgPSAqX19p
Ow0KICAgICAgICBpZiAoX192YWwgPCAqX19maXJzdCkgew0KICAgICAgICAgIGNvcHlfYmFja3dh
cmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsNCiAgICAgICAgICAqX19maXJzdCA9IF9fdmFsOw0K
ICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5z
ZXJ0KF9faSwgX192YWwpOw0KICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIHZvaWQN
CiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkN
CiAgICB7DQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsNCg0KICAgICAgZm9y
IChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytf
X2kpDQogICAgICB7DQogICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OnZhbHVlX3R5cGUgX192YWwgPSAqX19pOw0KICAgICAgICBpZiAoX19jb21wKF9f
dmFsLCAqX19maXJzdCkpIHsNCiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9faSwg
X19pICsgMSk7DQogICAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbDsNCiAgICAgICAgfQ0KICAgICAg
ICBlbHNlDQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9fdmFsLCBf
X2NvbXApOw0KICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXI+DQogICAgaW5saW5lIHZvaWQNCiAgICBfX3VuZ3VhcmRlZF9pbnNl
cnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QpDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQoNCiAgICAgIGZvciAoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpDQogICAg
ICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpKTsNCiAg
ICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0
eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIF9fdW5ndWFyZGVkX2luc2Vy
dGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQog
ICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz
c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQoNCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpDQogICAgICAgIF9fdW5n
dWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOw0KICAg
IH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+DQog
ICAgdm9pZA0KICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0KICAgIHsNCiAgICAgIGlmIChfX2xhc3Qg
LSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7DQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19m
aXJzdCwgX19maXJzdCArIF9NX3RocmVzaG9sZCk7DQogICAgICAgIF9fdW5ndWFyZGVkX2luc2Vy
dGlvbl9zb3J0KF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCk7DQogICAgICB9DQogICAg
ICBlbHNlDQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsNCiAgICB9
DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBl
bmFtZSBfQ29tcGFyZT4NCiAgICB2b2lkDQogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgaWYgKF9f
bGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsNCiAgICAgICAgX19pbnNlcnRpb25fc29y
dChfX2ZpcnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2NvbXApOw0KICAgICAgICBfX3Vu
Z3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2xhc3QsIF9f
Y29tcCk7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19m
aXJzdCwgX19sYXN0LCBfX2NvbXApOw0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1NpemU+DQogICAgaW5saW5lIF9TaXplDQogICAgX19sZyhfU2l6ZSBfX24pDQogICAg
ew0KICAgICAgX1NpemUgX19rOw0KICAgICAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+
PSAxKSArK19fazsNCiAgICAgIHJldHVybiBfX2s7DQogICAgfQ0KDQoNCg0KDQoNCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemU+DQogICAgdm9p
ZA0KICAgIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9s
aW1pdCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsNCg0KICAgICAgd2hpbGUgKF9f
bGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsNCiAgICAgICAgaWYgKF9fZGVwdGhfbGlt
aXQgPT0gMCkgew0KICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFz
dCk7DQogICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgIC0tX19kZXB0aF9saW1p
dDsNCiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQ0KICAgICAgICAgIF9fdW5ndWFy
ZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9f
Zmlyc3QpLzIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICooX19sYXN0IC0gMSkpKSk7DQogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQs
IF9fbGFzdCwgX19kZXB0aF9saW1pdCk7DQogICAgICAgIF9fbGFzdCA9IF9fY3V0Ow0KICAgICAg
fQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0
ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICB2b2lkDQogICAgX19p
bnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0LCBfQ29t
cGFyZSBfX2NvbXApDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQoNCiAgICAgIHdo
aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7DQogICAgICAgIGlmIChfX2Rl
cHRoX2xpbWl0ID09IDApIHsNCiAgICAgICAgICBwYXJ0aWFsX3NvcnQoX19maXJzdCwgX19sYXN0
LCBfX2xhc3QsIF9fY29tcCk7DQogICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAg
IC0tX19kZXB0aF9saW1pdDsNCiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQ0KICAg
ICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0
ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLA0KICAgICAgICAg
ICBfX2NvbXApOw0KICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIF9fZGVw
dGhfbGltaXQsIF9fY29tcCk7DQogICAgICAgIF9fbGFzdCA9IF9fY3V0Ow0KICAgICAgfQ0KICAg
IH0NCiMgMjE2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPg0KICAgIGlubGluZSB2b2lkDQogICAg
c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp
DQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQoNCg0KICAgICANCg0KICAgICANCg0K
ICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAgICAgIF9faW50cm9zb3J0X2xvb3Ao
X19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMik7DQogICAgICAgIF9f
ZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsNCiAgICAgIH0NCiAgICB9DQoj
IDIxOTcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgaW5s
aW5lIHZvaWQNCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFs
dWVUeXBlOw0KDQoNCiAgICAgDQoNCiAgICAgDQoNCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFz
dCkgew0KICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhfX2xh
c3QgLSBfX2ZpcnN0KSAqIDIsIF9fY29tcCk7DQogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9uX3Nv
cnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOw0KICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoN
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4NCiAgICB2b2lkDQogICAg
X19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCkNCiAgICB7DQogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1
KSB7DQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsNCiAgICAgICAg
cmV0dXJuOw0KICAgICAgfQ0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2Zp
cnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsNCiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29y
dChfX2ZpcnN0LCBfX21pZGRsZSk7DQogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRk
bGUsIF9fbGFzdCk7DQogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19m
aXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUpOw0K
ICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIs
IHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIHZvaWQNCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgaWYg
KF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgew0KICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly
c3QsIF9fbGFzdCwgX19jb21wKTsNCiAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8g
MjsNCiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21w
KTsNCiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0LCBfX2NvbXAp
Ow0KICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwNCiAgICAgICAg
ICAgdHlwZW5hbWUgX0Rpc3RhbmNlPg0KICAgIHZvaWQNCiAgICBfX21lcmdlX3NvcnRfbG9vcChf
UmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwNCiAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5j
ZSBfX3N0ZXBfc2l6ZSkNCiAgICB7DQogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBf
X3N0ZXBfc2l6ZTsNCg0KICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3Rl
cCkgew0KICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBf
c2l6ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9f
Zmlyc3QgKyBfX3R3b19zdGVwLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0KTsN
CiAgICAgICAgX19maXJzdCArPSBfX3R3b19zdGVwOw0KICAgICAgfQ0KDQogICAgICBfX3N0ZXBf
c2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsNCiAg
ICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fc3Rl
cF9zaXplLCBfX2xhc3QsDQogICAgICAgICAgICBfX3Jlc3VsdCk7DQogICAgfQ0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0
ZXIyLA0KICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPg0K
ICAgIHZvaWQNCiAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwNCiAgICAgICAg
ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgX0Rpc3RhbmNlIF9f
dHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7DQoNCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2Zp
cnN0ID49IF9fdHdvX3N0ZXApIHsNCiAgICAgICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBf
X2ZpcnN0ICsgX19zdGVwX3NpemUsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCAr
IF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAgICAg
ICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7DQogICAgICB9DQogICAgICBfX3N0ZXBfc2l6ZSA9IG1p
bihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsNCg0KICAgICAgbWVy
Z2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLA0KICAgICAgICAgICAgX19maXJzdCAr
IF9fc3RlcF9zaXplLCBfX2xhc3QsDQogICAgICAgICAgICBfX3Jlc3VsdCwNCiAgICAgICAgICAg
IF9fY29tcCk7DQogICAgfQ0KDQogIGVudW0geyBfTV9jaHVua19zaXplID0gNyB9Ow0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+DQog
ICAgdm9pZA0KICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSkNCiAgICB7DQogICAgICB3aGlsZSAoX19sYXN0IC0g
X19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsNCiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2Zp
cnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplKTsNCiAgICAgICAgX19maXJzdCArPSBfX2NodW5r
X3NpemU7DQogICAgICB9DQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7
DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt
ZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIHZvaWQNCiAgICBfX2NodW5rX2lu
c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3Np
emUsIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJz
dCA+PSBfX2NodW5rX3NpemUpIHsNCiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf
X2ZpcnN0ICsgX19jaHVua19zaXplLCBfX2NvbXApOw0KICAgICAgICBfX2ZpcnN0ICs9IF9fY2h1
bmtfc2l6ZTsNCiAgICAgIH0NCiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0
LCBfX2NvbXApOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
ciwgdHlwZW5hbWUgX1BvaW50ZXI+DQogICAgdm9pZA0KICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1
ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyKQ0KICAgIHsN
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
Pjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsNCg0KICAgICAgX0Rpc3RhbmNlIF9fbGVuID0g
X19sYXN0IC0gX19maXJzdDsNCiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZl
ciArIF9fbGVuOw0KDQogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXpl
Ow0KICAgICAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9z
aXplKTsNCg0KICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsNCiAgICAgICAgX19t
ZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUpOw0K
ICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOw0KICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1
ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOw0KICAgICAgICBfX3N0
ZXBfc2l6ZSAqPSAyOw0KICAgICAgfQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAg
IHZvaWQNCiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlIF9EaXN0YW5jZTsNCg0KICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0g
X19maXJzdDsNCiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVu
Ow0KDQogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOw0KICAgICAg
X19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplLCBfX2Nv
bXApOw0KDQogICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgew0KICAgICAgICBfX21l
cmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwgX19j
b21wKTsNCiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsNCiAgICAgICAgX19tZXJnZV9zb3J0X2xv
b3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXAp
Ow0KICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOw0KICAgICAgfQ0KICAgIH0NCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1l
IF9EaXN0YW5jZT4NCiAgICB2b2lkDQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np
emUpDQogICAgew0KICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAx
KSAvIDI7DQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xl
bjsNCiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsNCiAgICAgICAgX19zdGFibGVf
c29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUp
Ow0KICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9zaXplKTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICBfX21l
cmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsNCiAgICAg
ICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsN
CiAgICAgIH0NCiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFz
dCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksDQogICAgICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsN
CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l
IF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsDQogICAgICAgICAgIHR5cGVuYW1lIF9Db21w
YXJlPg0KICAgIHZvaWQNCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQogICAgICBf
RGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsNCiAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOw0KICAgICAgaWYgKF9fbGVu
ID4gX19idWZmZXJfc2l6ZSkgew0KICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmly
c3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbXApOw0KICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9f
bWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29tcCk7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAgICAg
X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19j
b21wKTsNCiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3Qs
IF9fYnVmZmVyLCBfX2NvbXApOw0KICAgICAgfQ0KICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2Zp
cnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZm
ZXIsIF9fYnVmZmVyX3NpemUsDQogICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQogICAg
fQ0KIyAyNDMwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+DQogICAgaW5saW5lIHZvaWQNCiAgICBz
dGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QpDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlw
ZSBfRGlzdGFuY2VUeXBlOw0KDQoNCiAgICAgDQoNCiAgICAgDQoNCiAgICAgIF9UZW1wb3Jhcnlf
YnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYoX19maXJzdCwgX19sYXN0
KTsNCiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQ0KICAgICAgICBfX2lucGxhY2Vfc3RhYmxl
X3NvcnQoX19maXJzdCwgX19sYXN0KTsNCiAgICAgIGVsc2UNCiAgICAgICAgX19zdGFibGVfc29y
dF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1
Zi5zaXplKCkpKTsNCiAgICB9DQojIDI0NjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h
bWUgX0NvbXBhcmU+DQogICAgaW5saW5lIHZvaWQNCiAgICBzdGFibGVfc29ydChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29t
cCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E
aXN0YW5jZVR5cGU7DQoNCg0KICAgICANCg0KICAgICANCg0KDQogICAgICBfVGVtcG9yYXJ5X2J1
ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7
DQogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkNCiAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9z
b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsNCiAgICAgIGVsc2UNCiAgICAgICAgX19zdGFi
bGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VU
eXBlKGJ1Zi5zaXplKCkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7
DQogICAgfQ0KIyAyNTAyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+DQogICAgdm9pZA0KICAgIHBh
cnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOw0KDQoNCiAgICAg
DQoNCiAgICAgDQoNCiAgICAgIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7DQogICAgICBm
b3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19p
KQ0KICAgICAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQ0KICAgICAgICAgIF9fcG9wX2hlYXAoX19m
aXJzdCwgX19taWRkbGUsIF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7DQogICAgICBzb3J0X2hlYXAo
X19maXJzdCwgX19taWRkbGUpOw0KICAgIH0NCiMgMjU0MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy
LCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICB2b2lkDQogICAgcGFydGlhbF9zb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bWlkZGxlLA0KICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAg
ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVl
VHlwZTsNCg0KDQogICAgIA0KDQogICAgIA0KDQoNCiAgICAgIG1ha2VfaGVhcChfX2ZpcnN0LCBf
X21pZGRsZSwgX19jb21wKTsNCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19t
aWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpDQogICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9f
Zmlyc3QpKQ0KICAgICAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1Zh
bHVlVHlwZSgqX19pKSwgX19jb21wKTsNCiAgICAgIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRs
ZSwgX19jb21wKTsNCiAgICB9DQojIDI1NzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcj4NCiAgICBfUmFuZG9tQWNjZXNzSXRlcg0KICAgIHBhcnRpYWxfc29ydF9j
b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsDQogICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkNCiAgICB7DQogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBf
SW5wdXRWYWx1ZVR5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
UmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsNCiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7DQoNCg0KICAgICANCiAgICAgDQogICAgIA0KICAgICAN
Cg0KICAgICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jl
c3VsdF9sYXN0Ow0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0g
X19yZXN1bHRfZmlyc3Q7DQogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3Vs
dF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgew0KICAgICAgICAqX19yZXN1bHRfcmVhbF9s
YXN0ID0gKl9fZmlyc3Q7DQogICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0Ow0KICAgICAgICAr
K19fZmlyc3Q7DQogICAgICB9DQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVz
dWx0X3JlYWxfbGFzdCk7DQogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAg
ICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0KQ0KICAgICAgICAgIF9fYWRqdXN0X2hl
YXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksDQogICAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwN
CiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCkpOw0KICAg
ICAgICArK19fZmlyc3Q7DQogICAgICB9DQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3Qs
IF9fcmVzdWx0X3JlYWxfbGFzdCk7DQogICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0Ow0K
ICAgIH0NCiMgMjYzMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy
LCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBfUmFuZG9tQWNjZXNzSXRlcg0KICAgIHBhcnRpYWxf
c29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsDQogICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwNCiAgICAgICAg
ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX0lucHV0VmFsdWVU
eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz
c0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7DQogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBf
RGlzdGFuY2VUeXBlOw0KDQoNCiAgICAgDQogICAgIA0KICAgICANCiAgICAgDQoNCg0KICAgICAg
aWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0
Ow0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRf
Zmlyc3Q7DQogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xh
c3QgIT0gX19yZXN1bHRfbGFzdCkgew0KICAgICAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9f
Zmlyc3Q7DQogICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0Ow0KICAgICAgICArK19fZmlyc3Q7
DQogICAgICB9DQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxf
bGFzdCwgX19jb21wKTsNCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICAg
ICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQ0KICAgICAgICAgIF9fYWRq
dXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksDQogICAgICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2Zp
cnN0KSwNCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCks
DQogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAgICAgICArK19fZmlyc3Q7DQog
ICAgICB9DQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFz
dCwgX19jb21wKTsNCiAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7DQogICAgfQ0KIyAy
Njg2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+DQogICAgdm9pZA0KICAgIG50aF9lbGVtZW50KF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19udGgsDQogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0KICAg
IHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOw0KDQoNCiAgICAgDQogICAgIA0KDQogICAgICB3
aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsNCiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19jdXQgPQ0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3Qs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9f
Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7DQogICAg
ICAgIGlmIChfX2N1dCA8PSBfX250aCkNCiAgICAgICAgICBfX2ZpcnN0ID0gX19jdXQ7DQogICAg
ICAgIGVsc2UNCiAgICAgICAgICBfX2xhc3QgPSBfX2N1dDsNCiAgICAgIH0NCiAgICAgIF9faW5z
ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsNCiAgICB9DQojIDI3MjggIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgdm9pZA0KICAgIG50aF9lbGVtZW50
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19udGgsDQogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh
bHVlX3R5cGUgX1ZhbHVlVHlwZTsNCg0KDQogICAgIA0KICAgICANCg0KDQogICAgICB3aGlsZSAo
X19sYXN0IC0gX19maXJzdCA+IDMpIHsNCiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQg
PQ0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3Qs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihf
X2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKSksDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQogICAgICAgIGlmIChfX2N1dCA8PSBf
X250aCkNCiAgICAgICAgICBfX2ZpcnN0ID0gX19jdXQ7DQogICAgICAgIGVsc2UNCiAgICAgICAg
ICBfX2xhc3QgPSBfX2N1dDsNCiAgICAgIH0NCiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJz
dCwgX19sYXN0LCBfX2NvbXApOw0KICAgIH0NCiMgMjc2OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw
ZW5hbWUgX1RwPg0KICAgIF9Gb3J3YXJkSXRlcg0KICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQ0KICAgIHsN
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh
bHVlX3R5cGUgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOw0KDQoNCg0K
DQoNCg0KICAgICANCiAgICAgDQogICAgIA0KDQogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0g
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsNCiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOw0K
ICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOw0KDQogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7
DQogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7DQogICAgICAgIF9fbWlkZGxlID0gX19maXJz
dDsNCiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICAgICAgaWYgKCpfX21p
ZGRsZSA8IF9fdmFsKSB7DQogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOw0KICAgICAgICAg
ICsrX19maXJzdDsNCiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsNCiAgICAg
ICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7DQogICAgICB9DQog
ICAgICByZXR1cm4gX19maXJzdDsNCiAgICB9DQojIDI4MTYgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgX0ZvcndhcmRJdGVyDQogICAgbG93
ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAg
ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVl
X3R5cGUgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOw0KDQoNCiAgICAg
DQogICAgIA0KDQogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwg
X19sYXN0KTsNCiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOw0KICAgICAgX0ZvcndhcmRJdGVy
IF9fbWlkZGxlOw0KDQogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgICAgIF9faGFsZiA9
IF9fbGVuID4+IDE7DQogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsNCiAgICAgICAgYWR2YW5j
ZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFs
KSkgew0KICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsNCiAgICAgICAgICArK19fZmlyc3Q7
DQogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7DQogICAgICAgIH0NCiAgICAg
ICAgZWxzZQ0KICAgICAgICAgIF9fbGVuID0gX19oYWxmOw0KICAgICAgfQ0KICAgICAgcmV0dXJu
IF9fZmlyc3Q7DQogICAgfQ0KIyAyODU2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h
bGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+
DQogICAgX0ZvcndhcmRJdGVyDQogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpDQogICAgew0KICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBf
VmFsdWVUeXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7DQoNCg0KDQogICAgIA0KICAg
ICANCiAgICAgDQoNCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0
LCBfX2xhc3QpOw0KICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7DQogICAgICBfRm9yd2FyZEl0
ZXIgX19taWRkbGU7DQoNCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsNCiAgICAgICAgX19oYWxm
ID0gX19sZW4gPj4gMTsNCiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAgICAgICBhZHZh
bmNlKF9fbWlkZGxlLCBfX2hhbGYpOw0KICAgICAgICBpZiAoX192YWwgPCAqX19taWRkbGUpDQog
ICAgICAgICAgX19sZW4gPSBfX2hhbGY7DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgIF9fZmly
c3QgPSBfX21pZGRsZTsNCiAgICAgICAgICArK19fZmlyc3Q7DQogICAgICAgICAgX19sZW4gPSBf
X2xlbiAtIF9faGFsZiAtIDE7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHJldHVybiBfX2Zp
cnN0Ow0KICAgIH0NCiMgMjkwMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBl
bmFtZSBfQ29tcGFyZT4NCiAgICBfRm9yd2FyZEl0ZXINCiAgICB1cHBlcl9ib3VuZChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICBjb25z
dCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBl
Ow0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6
ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7DQoNCg0KICAgICANCiAgICAgDQoNCiAgICAg
IF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOw0KICAgICAg
X0Rpc3RhbmNlVHlwZSBfX2hhbGY7DQogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7DQoNCiAg
ICAgIHdoaWxlIChfX2xlbiA+IDApIHsNCiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsNCiAg
ICAgICAgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hh
bGYpOw0KICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQ0KICAgICAgICAgIF9f
bGVuID0gX19oYWxmOw0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRk
bGU7DQogICAgICAgICAgKytfX2ZpcnN0Ow0KICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh
bGYgLSAxOw0KICAgICAgICB9DQogICAgICB9DQogICAgICByZXR1cm4gX19maXJzdDsNCiAgICB9
DQojIDI5NDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBwYWlyPF9Gb3J3
YXJkSXRlciwgX0ZvcndhcmRJdGVyPg0KICAgIGVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQ0KICAgIHsNCiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5
cGUgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G
b3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOw0KDQoNCg0KICAgICAN
CiAgICAgDQogICAgIA0KDQogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0KTsNCiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOw0KICAgICAgX0Zvcndh
cmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7DQoNCiAgICAgIHdoaWxlIChfX2xlbiA+
IDApIHsNCiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsNCiAgICAgICAgX19taWRkbGUgPSBf
X2ZpcnN0Ow0KICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOw0KICAgICAgICBpZiAo
Kl9fbWlkZGxlIDwgX192YWwpIHsNCiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7DQogICAg
ICAgICAgKytfX2ZpcnN0Ow0KICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOw0K
ICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQ0KICAgICAgICAg
IF9fbGVuID0gX19oYWxmOw0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICBfX2xlZnQgPSBsb3dl
cl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOw0KICAgICAgICAgIGFkdmFuY2UoX19m
aXJzdCwgX19sZW4pOw0KICAgICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxl
LCBfX2ZpcnN0LCBfX3ZhbCk7DQogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBf
Rm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAg
IHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0
KTsNCiAgICB9DQojIDMwMDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg
Mw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0NvbXBhcmU+DQogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4NCiAgICBl
cXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29u
c3QgX1RwJiBfX3ZhbCwNCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0K
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFs
dWVfdHlwZSBfVmFsdWVUeXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7DQoNCg0KICAg
ICANCiAgICAgDQogICAgIA0KDQogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2Uo
X19maXJzdCwgX19sYXN0KTsNCiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOw0KICAgICAgX0Zv
cndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7DQoNCiAgICAgIHdoaWxlIChfX2xl
biA+IDApIHsNCiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsNCiAgICAgICAgX19taWRkbGUg
PSBfX2ZpcnN0Ow0KICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOw0KICAgICAgICBp
ZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7DQogICAgICAgICAgX19maXJzdCA9IF9fbWlk
ZGxlOw0KICAgICAgICAgICsrX19maXJzdDsNCiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19o
YWxmIC0gMTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoX192YWwsICpfX21p
ZGRsZSkpDQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7DQogICAgICAgIGVsc2Ugew0KICAgICAg
ICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19jb21w
KTsNCiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsNCiAgICAgICAgICBfX3JpZ2h0
ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwsIF9fY29tcCk7DQogICAg
ICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19y
aWdodCk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRl
ciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsNCiAgICB9DQojIDMwNTIgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBib29sDQogICAgYmluYXJ5X3NlYXJjaChf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9UcCYgX192YWwpDQogICAgew0KDQoNCiAgICAgDQogICAgIA0KDQogICAgIA0K
DQogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBf
X3ZhbCk7DQogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7DQog
ICAgfQ0KIyAzMDgzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D
b21wYXJlPg0KICAgIGJvb2wNCiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3Zh
bCwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAgICAgDQoNCg0K
ICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192
YWwsIF9fY29tcCk7DQogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhX19jb21wKF9fdmFs
LCAqX19pKTsNCiAgICB9DQojIDMxMTUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs
Z28uaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0
SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0KICAgIF9PdXRwdXRJdGVyDQogICAgbWVyZ2Uo
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQpDQogICAgew0KDQogICAgIA0KICAgICANCiAgICAgDQoNCiAgICAgDQoN
Cg0KICAgICANCg0KDQogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0
MiAhPSBfX2xhc3QyKSB7DQogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsNCiAg
ICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7DQogICAgICAgICAgKytfX2ZpcnN0MjsNCiAg
ICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7
DQogICAgICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICAgfQ0KICAgICAgICArK19fcmVzdWx0Ow0K
ICAgICAgfQ0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJz
dDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7DQogICAgfQ0KIyAzMTY2ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEs
IHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwNCiAgICAgICAgICAg
dHlwZW5hbWUgX0NvbXBhcmU+DQogICAgX091dHB1dEl0ZXINCiAgICBtZXJnZShfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICBfSW5wdXRJdGVyMiBf
X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQoN
CiAgICAgDQoNCiAgICAgDQoNCg0KDQogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7DQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAq
X19maXJzdDEpKSB7DQogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOw0KICAgICAgICAg
ICsrX19maXJzdDI7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3QxOw0KICAgICAgICAgICsrX19maXJzdDE7DQogICAgICAgIH0NCiAgICAg
ICAgKytfX3Jlc3VsdDsNCiAgICAgIH0NCiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xh
c3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOw0KICAgIH0NCg0KDQoNCg0K
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlz
dGFuY2U+DQogICAgdm9pZA0KICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19taWRkbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVu
MSwgX0Rpc3RhbmNlIF9fbGVuMikNCiAgICB7DQogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19s
ZW4yID09IDApDQogICAgICAgIHJldHVybjsNCiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0g
Mikgew0KICAgICAgICBpZiAoKl9fbWlkZGxlIDwgKl9fZmlyc3QpDQogICAgICAgICAgICAgIGl0
ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7DQogICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7DQogICAgICBfRGlzdGFuY2Ug
X19sZW4xMSA9IDA7DQogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7DQogICAgICBpZiAoX19s
ZW4xID4gX19sZW4yKSB7DQogICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOw0KICAgICAgICBh
ZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsNCiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93
ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsNCiAgICAgICAgX19sZW4y
MiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOw0KICAgICAgfQ0KICAgICAgZWxz
ZSB7DQogICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOw0KICAgICAgICBhZHZhbmNlKF9fc2Vj
b25kX2N1dCwgX19sZW4yMik7DQogICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19m
aXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOw0KICAgICAgICBfX2xlbjExID0gZGlzdGFu
Y2UoX19maXJzdCwgX19maXJzdF9jdXQpOw0KICAgICAgfQ0KICAgICAgcm90YXRlKF9fZmlyc3Rf
Y3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsNCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsNCiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBk
aXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KSk7DQogICAgICBfX21lcmdlX3dpdGhvdXRf
YnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIpOw0KICAgICAgX19tZXJnZV93aXRob3V0
X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIgLSBfX2xlbjIyKTsNCiAg
ICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwg
dHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICB2b2lkDQogICAgX19t
ZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCiAgICAgIGlm
IChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkNCiAgICAgICAgcmV0dXJuOw0KICAgICAgaWYg
KF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7DQogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCAq
X19maXJzdCkpDQogICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7DQog
ICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
X2N1dCA9IF9fZmlyc3Q7DQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0g
X19taWRkbGU7DQogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7DQogICAgICBfRGlzdGFuY2Ug
X19sZW4yMiA9IDA7DQogICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7DQogICAgICAgIF9fbGVu
MTEgPSBfX2xlbjEgLyAyOw0KICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsN
CiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9f
Zmlyc3RfY3V0LCBfX2NvbXApOw0KICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUs
IF9fc2Vjb25kX2N1dCk7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAgICAgX19sZW4yMiA9
IF9fbGVuMiAvIDI7DQogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsNCiAg
ICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vj
b25kX2N1dCwgX19jb21wKTsNCiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9f
Zmlyc3RfY3V0KTsNCiAgICAgIH0NCiAgICAgIHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUs
IF9fc2Vjb25kX2N1dCk7DQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0g
X19maXJzdF9jdXQ7DQogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRk
bGUsIF9fc2Vjb25kX2N1dCkpOw0KICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0
LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xlbjExLCBfX2xlbjIyLCBfX2NvbXApOw0KICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZl
cihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIgLSBfX2xlbjIyLCBfX2NvbXApOw0K
ICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy
MSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwNCiAgICAgICAgICAgdHlwZW5hbWUgX0Rp
c3RhbmNlPg0KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjENCiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShf
QmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyMSBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4x
LCBfRGlzdGFuY2UgX19sZW4yLA0KICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjIgX19idWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVy
X3NpemUpDQogICAgew0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlcl9lbmQ7DQog
ICAgICBpZiAoX19sZW4xID4gX19sZW4yICYmIF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7DQog
ICAgICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOw0K
ICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOw0KICAgICAg
ICByZXR1cm4gY29weShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2ZpcnN0KTsNCiAgICAgIH0N
CiAgICAgIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7DQogICAgICAgIF9fYnVm
ZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsNCiAgICAgICAgY29w
eShfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsNCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh
cmQoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsNCiAgICAgIH0NCiAgICAgIGVsc2Ug
ew0KICAgICAgICByb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7DQogICAgICAgIGFk
dmFuY2UoX19maXJzdCwgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCkpOw0KICAgICAgICByZXR1
cm4gX19maXJzdDsNCiAgICAgIH0NCiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsDQog
ICAgICAgICAgIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjM+DQogICAgX0JpZGlyZWN0aW9u
YWxJdGVyMw0KICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0
MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLA0K
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCkNCiAgICB7
DQogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkNCiAgICAgICAgcmV0dXJuIGNvcHlfYmFj
a3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsNCiAgICAgIGlmIChfX2ZpcnN0MiA9
PSBfX2xhc3QyKQ0KICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0
MSwgX19yZXN1bHQpOw0KICAgICAgLS1fX2xhc3QxOw0KICAgICAgLS1fX2xhc3QyOw0KICAgICAg
d2hpbGUgKHRydWUpIHsNCiAgICAgICAgaWYgKCpfX2xhc3QyIDwgKl9fbGFzdDEpIHsNCiAgICAg
ICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOw0KICAgICAgICAgIGlmIChfX2ZpcnN0MSA9PSBf
X2xhc3QxKQ0KICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19s
YXN0MiwgX19yZXN1bHQpOw0KICAgICAgICAgIC0tX19sYXN0MTsNCiAgICAgICAgfQ0KICAgICAg
ICBlbHNlIHsNCiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOw0KICAgICAgICAgIGlm
IChfX2ZpcnN0MiA9PSBfX2xhc3QyKQ0KICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQo
X19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOw0KICAgICAgICAgIC0tX19sYXN0MjsNCiAg
ICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwNCiAgICAg
ICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMywgdHlwZW5hbWUgX0NvbXBhcmU+DQog
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMw0KICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9u
YWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLA0KICAgICAgICAg
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJ
dGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBf
X3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQog
ICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkNCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh
cmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsNCiAgICAgIGlmIChfX2ZpcnN0MiA9PSBf
X2xhc3QyKQ0KICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwg
X19yZXN1bHQpOw0KICAgICAgLS1fX2xhc3QxOw0KICAgICAgLS1fX2xhc3QyOw0KICAgICAgd2hp
bGUgKHRydWUpIHsNCiAgICAgICAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7DQog
ICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsNCiAgICAgICAgICBpZiAoX19maXJzdDEg
PT0gX19sYXN0MSkNCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCAr
K19fbGFzdDIsIF9fcmVzdWx0KTsNCiAgICAgICAgICAtLV9fbGFzdDE7DQogICAgICAgIH0NCiAg
ICAgICAgZWxzZSB7DQogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsNCiAgICAgICAg
ICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikNCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3
YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsNCiAgICAgICAgICAtLV9fbGFzdDI7
DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9p
bnRlcj4NCiAgICB2b2lkDQogICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRs
ZSwNCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAg
ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLA0KICAg
ICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9z
aXplKQ0KICAgIHsNCiAgICAgICAgICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0g
X19idWZmZXJfc2l6ZSkgew0KICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29w
eShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOw0KICAgICAgICAgICAgbWVyZ2UoX19idWZm
ZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7DQogICAgICAgICAg
fQ0KICAgICAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7DQogICAgICAg
ICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVm
ZmVyKTsNCiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9f
YnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVs
c2Ugew0KICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJz
dDsNCiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRs
ZTsNCiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsNCiAgICAgICAgICAgIF9EaXN0
YW5jZSBfX2xlbjIyID0gMDsNCiAgICAgICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsNCiAg
ICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOw0KICAgICAgICAgICAgICAgICAg
YWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7DQogICAgICAgICAgICAgICAgICBfX3NlY29u
ZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOw0KICAg
ICAgICAgICAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQp
Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICBf
X2xlbjIyID0gX19sZW4yIC8gMjsNCiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRf
Y3V0LCBfX2xlbjIyKTsNCiAgICAgICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91
bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOw0KICAgICAgICAgICAgICAgICAg
X19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsNCiAgICAgICAgICAgIH0N
CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQ0KICAgICAgICAg
ICAgICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29u
ZF9jdXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xl
bjExLCBfX2xlbjIyLCBfX2J1ZmZlciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fYnVmZmVyX3NpemUpOw0KICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0
LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7DQogICAgICAgICAg
ICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9f
bGVuMSAtIF9fbGVuMTEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9f
bGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsNCiAgICAgICAgICB9DQogICAgfQ0KDQoN
Cg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1l
IF9EaXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50ZXIsDQogICAgICAgICAgIHR5cGVuYW1lIF9Db21w
YXJlPg0KICAgIHZvaWQNCiAgICBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBf
X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl
LA0KICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwNCiAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsDQogICAg
ICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np
emUsDQogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KICAgICAg
ICAgIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7DQog
ICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2J1ZmZlcik7DQogICAgICAgICAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBf
X21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOw0KICAgICAgICAgIH0NCiAgICAgICAg
ICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgew0KICAgICAgICAgICAgX1BvaW50
ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7DQogICAg
ICAgICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19i
dWZmZXJfZW5kLCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbXApOw0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIHsNCiAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7DQogICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7DQogICAgICAgICAg
ICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7DQogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9
IDA7DQogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7DQogICAgICAgICAgICAgICAg
ICBfX2xlbjExID0gX19sZW4xIC8gMjsNCiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJz
dF9jdXQsIF9fbGVuMTEpOw0KICAgICAgICAgICAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJf
Ym91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOw0KICAgICAgICAg
ICAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOw0KICAg
ICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICBfX2xlbjIy
ID0gX19sZW4yIC8gMjsNCiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBf
X2xlbjIyKTsNCiAgICAgICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19m
aXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7DQogICAgICAgICAgICAgICAg
ICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOw0KICAgICAgICAgICAg
fQ0KICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9DQogICAgICAg
ICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vj
b25kX2N1dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9f
bGVuMTEsIF9fbGVuMjIsIF9fYnVmZmVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19idWZmZXJfc2l6ZSk7DQogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmly
c3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOw0K
ICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwg
X19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsNCiAgICAg
ICAgICB9DQogICAgfQ0KIyAzNTA4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
LmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPg0KICAgIHZvaWQN
CiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBlDQogICAgICAg
ICAgX1ZhbHVlVHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C
aWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQ0KICAgICAgICAgIF9EaXN0YW5jZVR5
cGU7DQoNCg0KICAgICANCg0KICAgICANCg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUg
fHwgX19taWRkbGUgPT0gX19sYXN0KQ0KICAgICAgICByZXR1cm47DQoNCiAgICAgIF9EaXN0YW5j
ZVR5cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOw0KICAgICAgX0Rpc3Rh
bmNlVHlwZSBfX2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsNCg0KICAgICAgX1Rl
bXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2Zp
cnN0LCBfX2xhc3QpOw0KICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkNCiAgICAgICAgX19t
ZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9f
bGVuMik7DQogICAgICBlbHNlDQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19t
aWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsDQogICAgICAgICAgICAgICAgICAgICAgICAg
X19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpKTsNCiAgICB9DQojIDM1
NTkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMw0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIHZvaWQN
CiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlk
aXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBlDQogICAgICAgICAgX1ZhbHVlVHlwZTsNCiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRp
ZmZlcmVuY2VfdHlwZQ0KICAgICAgICAgIF9EaXN0YW5jZVR5cGU7DQoNCg0KICAgICANCg0KICAg
ICANCg0KDQogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xh
c3QpDQogICAgICAgIHJldHVybjsNCg0KICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjEgPSBkaXN0
YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7DQogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IGRp
c3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOw0KDQogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlk
aXJlY3Rpb25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7DQogICAg
ICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQ0KICAgICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVy
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXApOw0KICAg
ICAgZWxzZQ0KICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xh
c3QsIF9fbGVuMSwgX19sZW4yLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2lu
KCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbXApOw0KICAgIH0NCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPg0KICAgIGJvb2wNCiAgICBpbmNsdWRlcyhfSW5w
dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikNCiAgICB7DQoNCiAgICAgDQog
ICAgIA0KICAgICANCg0KDQogICAgIA0KDQoNCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpDQogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19m
aXJzdDEpDQogICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICBlbHNlIGlmKCpfX2ZpcnN0
MSA8ICpfX2ZpcnN0MikNCiAgICAgICAgICArK19fZmlyc3QxOw0KICAgICAgICBlbHNlDQogICAg
ICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsNCg0KICAgICAgcmV0dXJuIF9fZmlyc3QyID09
IF9fbGFzdDI7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBl
bmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgYm9vbA0KICAgIGluY2x1
ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLCBfQ29tcGFyZSBf
X2NvbXApDQogICAgew0KDQogICAgIA0KICAgICANCiAgICAgDQoNCg0KICAgICANCg0KDQoNCiAg
ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpDQog
ICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQ0KICAgICAgICAgIHJldHVy
biBmYWxzZTsNCiAgICAgICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0K
ICAgICAgICAgICsrX19maXJzdDE7DQogICAgICAgIGVsc2UNCiAgICAgICAgICArK19fZmlyc3Qx
LCArK19fZmlyc3QyOw0KDQogICAgICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsNCiAgICB9
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIy
LCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4NCiAgICBfT3V0cHV0SXRlcg0KICAgIHNldF91bmlvbihf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQ0KICAgIHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQog
ICAgIA0KDQoNCiAgICAgDQoNCg0KICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
X19maXJzdDIgIT0gX19sYXN0Mikgew0KICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3Qy
KSB7DQogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAgICAgICAgICsrX19maXJz
dDE7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7
DQogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOw0KICAgICAgICAgICsrX19maXJzdDI7
DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QxOw0KICAgICAgICAgICsrX19maXJzdDE7DQogICAgICAgICAgKytfX2ZpcnN0MjsNCiAgICAg
ICAgfQ0KICAgICAgICArK19fcmVzdWx0Ow0KICAgICAgfQ0KICAgICAgcmV0dXJuIGNvcHkoX19m
aXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7DQogICAg
fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVy
MiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsDQogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPg0K
ICAgIF9PdXRwdXRJdGVyDQogICAgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w
dXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9D
b21wYXJlIF9fY29tcCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KICAgICANCg0KDQogICAgIA0K
DQogICAgIA0KDQoNCg0KICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0Mikgew0KICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3Qy
KSkgew0KICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICAgICArK19fZmly
c3QxOw0KICAgICAgICB9DQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2Zp
cnN0MSkpIHsNCiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7DQogICAgICAgICAgKytf
X2ZpcnN0MjsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAqX19yZXN1bHQg
PSAqX19maXJzdDE7DQogICAgICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICAgICArK19fZmlyc3Qy
Ow0KICAgICAgICB9DQogICAgICAgICsrX19yZXN1bHQ7DQogICAgICB9DQogICAgICByZXR1cm4g
Y29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQp
KTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9J
bnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4NCiAgICBfT3V0cHV0SXRlcg0KICAgIHNl
dF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
DQogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIg
X19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQ0KICAg
IHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQogICAgIA0KDQoNCiAgICAgDQoNCg0KICAgICAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICAg
ICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikNCiAgICAgICAgICArK19fZmlyc3QxOw0KICAg
ICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpDQogICAgICAgICAgKytfX2ZpcnN0
MjsNCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAg
ICAgICAgICsrX19maXJzdDE7DQogICAgICAgICAgKytfX2ZpcnN0MjsNCiAgICAgICAgICArK19f
cmVzdWx0Ow0KICAgICAgICB9DQogICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5h
bWUgX091dHB1dEl0ZXIsDQogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPg0KICAgIF9PdXRw
dXRJdGVyDQogICAgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0
SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KICAgICAN
Cg0KDQogICAgIA0KDQogICAgIA0KDQoNCg0KICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEs
ICpfX2ZpcnN0MikpDQogICAgICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICAgZWxzZSBpZiAoX19j
b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkNCiAgICAgICAgICArK19fZmlyc3QyOw0KICAgICAg
ICBlbHNlIHsNCiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7DQogICAgICAgICAgKytf
X2ZpcnN0MTsNCiAgICAgICAgICArK19fZmlyc3QyOw0KICAgICAgICAgICsrX19yZXN1bHQ7DQog
ICAgICAgIH0NCiAgICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0
SXRlcj4NCiAgICBfT3V0cHV0SXRlcg0KICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0KQ0KICAgIHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQogICAg
IA0KDQoNCiAgICAgDQoNCg0KICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m
aXJzdDIgIT0gX19sYXN0MikNCiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikgew0K
ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICAgICArK19fZmlyc3QxOw0K
ICAgICAgICAgICsrX19yZXN1bHQ7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAoKl9fZmly
c3QyIDwgKl9fZmlyc3QxKQ0KICAgICAgICAgICsrX19maXJzdDI7DQogICAgICAgIGVsc2Ugew0K
ICAgICAgICAgICsrX19maXJzdDE7DQogICAgICAgICAgKytfX2ZpcnN0MjsNCiAgICAgICAgfQ0K
ICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsNCiAgICB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0
eXBlbmFtZSBfT3V0cHV0SXRlciwNCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAg
X091dHB1dEl0ZXINCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQogICAgIA0K
DQoNCiAgICAgDQoNCiAgICAgDQoNCg0KDQogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0KICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkgew0KICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICAg
ICArK19fZmlyc3QxOw0KICAgICAgICAgICsrX19yZXN1bHQ7DQogICAgICAgIH0NCiAgICAgICAg
ZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkNCiAgICAgICAgICArK19fZmly
c3QyOw0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICArK19fZmlyc3QxOw0KICAgICAgICAgICsr
X19maXJzdDI7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3Qx
LCBfX3Jlc3VsdCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0
eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQogICAgX091dHB1dEl0
ZXINCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkNCiAgICB7DQoNCiAgICAgDQogICAgIA0KICAg
ICANCg0KICAgICANCg0KDQogICAgIA0KDQoNCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpDQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19m
aXJzdDIpIHsNCiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7DQogICAgICAgICAgKytf
X2ZpcnN0MTsNCiAgICAgICAgICArK19fcmVzdWx0Ow0KICAgICAgICB9DQogICAgICAgIGVsc2Ug
aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgew0KICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0MjsNCiAgICAgICAgICArK19fZmlyc3QyOw0KICAgICAgICAgICsrX19yZXN1bHQ7DQogICAg
ICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICAgICAr
K19fZmlyc3QyOw0KICAgICAgICB9DQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0
MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsNCiAgICB9DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBf
T3V0cHV0SXRlciwNCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+DQogICAgX091dHB1dEl0
ZXINCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQogICAgIA0KDQoNCiAg
ICAgDQoNCiAgICAgDQoNCg0KDQogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
X2ZpcnN0MiAhPSBfX2xhc3QyKQ0KICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmly
c3QyKSkgew0KICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICAgICArK19f
Zmlyc3QxOw0KICAgICAgICAgICsrX19yZXN1bHQ7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBp
ZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgew0KICAgICAgICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0MjsNCiAgICAgICAgICArK19fZmlyc3QyOw0KICAgICAgICAgICsrX19yZXN1bHQ7
DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgKytfX2ZpcnN0MTsNCiAgICAg
ICAgICArK19fZmlyc3QyOw0KICAgICAgICB9DQogICAgICByZXR1cm4gY29weShfX2ZpcnN0Miwg
X19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsNCiAgICB9DQoNCg0K
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPg0KICAgIF9Gb3J3YXJkSXRlcg0K
ICAgIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
KQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KSByZXR1cm4gX19maXJzdDsNCiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7
DQogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICAgICAgaWYgKCpfX3Jlc3Vs
dCA8ICpfX2ZpcnN0KQ0KICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsNCiAgICAgIHJldHVy
biBfX3Jlc3VsdDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0
eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBfRm9yd2FyZEl0ZXINCiAgICBtYXhfZWxlbWVudChfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApDQogICAgew0KDQogICAgIA0KICAgICANCg0KDQoNCiAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7DQogICAgICBfRm9yd2FyZEl0ZXIgX19y
ZXN1bHQgPSBfX2ZpcnN0Ow0KICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAg
ICAgIGlmIChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsN
CiAgICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyPg0KICAgIF9Gb3J3YXJkSXRlcg0KICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoN
Cg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsNCiAgICAgIF9G
b3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7DQogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9
IF9fbGFzdCkNCiAgICAgICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0KQ0KICAgICAgICAgIF9f
cmVzdWx0ID0gX19maXJzdDsNCiAgICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgICB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4NCiAgICBfRm9y
d2FyZEl0ZXINCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQogICAgew0KDQog
ICAgIA0KICAgICANCg0KDQoNCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f
Zmlyc3Q7DQogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Ow0KICAgICAgd2hp
bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpf
X3Jlc3VsdCkpDQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0Ow0KICAgICAgcmV0dXJuIF9f
cmVzdWx0Ow0KICAgIH0NCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXI+DQogICAgYm9vbA0KICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpDQogICAgew0KDQogICAgIA0KICAg
ICANCg0KDQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgIHJldHVybiBmYWxz
ZTsNCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0Ow0KICAgICAgKytfX2k7
DQogICAgICBpZiAoX19pID09IF9fbGFzdCkNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAg
X19pID0gX19sYXN0Ow0KICAgICAgLS1fX2k7DQoNCiAgICAgIGZvcig7Oykgew0KICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsNCiAgICAgICAgLS1fX2k7DQogICAgICAgIGlm
ICgqX19pIDwgKl9faWkpIHsNCiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19s
YXN0Ow0KICAgICAgICAgIHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQ0KICAgICAgICAgICAge30N
CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOw0KICAgICAgICAgIHJldmVyc2UoX19paSwg
X19sYXN0KTsNCiAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAo
X19pID09IF9fZmlyc3QpIHsNCiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7DQog
ICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+DQog
ICAgYm9vbA0KICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBfQ29tcGFy
ZSBfX2NvbXApDQogICAgew0KDQogICAgIA0KICAgICANCg0KDQoNCiAgICAgIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9faSA9IF9fZmlyc3Q7DQogICAgICArK19faTsNCiAgICAgIGlmIChfX2kgPT0gX19sYXN0
KQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICBfX2kgPSBfX2xhc3Q7DQogICAgICAtLV9f
aTsNCg0KICAgICAgZm9yKDs7KSB7DQogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0g
X19pOw0KICAgICAgICAtLV9faTsNCiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpIHsN
CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0Ow0KICAgICAgICAgIHdo
aWxlICghX19jb21wKCpfX2ksICotLV9faikpDQogICAgICAgICAgICB7fQ0KICAgICAgICAgIGl0
ZXJfc3dhcChfX2ksIF9faik7DQogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOw0KICAg
ICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIGlmIChfX2kgPT0gX19maXJz
dCkgew0KICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsNCiAgICAgICAgICByZXR1
cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0JpZGlyZWN0aW9uYWxJdGVyPg0KICAgIGJvb2wNCiAgICBwcmV2X3Blcm11dGF0aW9uKF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQ0KICAg
IHsNCg0KICAgICANCiAgICAgDQoNCg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAg
ICAgICByZXR1cm4gZmFsc2U7DQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJz
dDsNCiAgICAgICsrX19pOw0KICAgICAgaWYgKF9faSA9PSBfX2xhc3QpDQogICAgICAgIHJldHVy
biBmYWxzZTsNCiAgICAgIF9faSA9IF9fbGFzdDsNCiAgICAgIC0tX19pOw0KDQogICAgICBmb3Io
OzspIHsNCiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7DQogICAgICAgIC0t
X19pOw0KICAgICAgICBpZiAoKl9faWkgPCAqX19pKSB7DQogICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9faiA9IF9fbGFzdDsNCiAgICAgICAgICB3aGlsZSAoISgqLS1fX2ogPCAqX19pKSkN
CiAgICAgICAgICAgIHt9DQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsNCiAgICAgICAg
ICByZXZlcnNlKF9faWksIF9fbGFzdCk7DQogICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAg
IH0NCiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7DQogICAgICAgICAgcmV2ZXJzZShfX2Zp
cnN0LCBfX2xhc3QpOw0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAg
fQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVu
YW1lIF9Db21wYXJlPg0KICAgIGJvb2wNCiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg
ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCg0KDQog
ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0Ow0KICAgICAgKytfX2k7DQogICAgICBp
ZiAoX19pID09IF9fbGFzdCkNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgX19pID0gX19s
YXN0Ow0KICAgICAgLS1fX2k7DQoNCiAgICAgIGZvcig7Oykgew0KICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19paSA9IF9faTsNCiAgICAgICAgLS1fX2k7DQogICAgICAgIGlmIChfX2NvbXAo
Kl9faWksICpfX2kpKSB7DQogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFz
dDsNCiAgICAgICAgICB3aGlsZSAoIV9fY29tcCgqLS1fX2osICpfX2kpKQ0KICAgICAgICAgICAg
e30NCiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOw0KICAgICAgICAgIHJldmVyc2UoX19p
aSwgX19sYXN0KTsNCiAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgICBp
ZiAoX19pID09IF9fZmlyc3QpIHsNCiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7
DQogICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KDQoN
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+
DQogICAgX0lucHV0SXRlcg0KICAgIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwg
X0lucHV0SXRlciBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmly
c3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MikNCiAgICB7DQoNCiAgICAgDQogICAgIA0KICAgICAN
Cg0KDQoNCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkNCiAg
ICAgICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xh
c3QyOyArK19faXRlcikNCiAgICAgICAgICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIpDQogICAg
ICAgICAgICByZXR1cm4gX19maXJzdDE7DQogICAgICByZXR1cm4gX19sYXN0MTsNCiAgICB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0
eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPg0KICAgIF9JbnB1dEl0ZXINCiAgICBmaW5kX2ZpcnN0
X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwNCiAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsDQogICAg
ICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkNCiAgICB7DQoNCiAgICAgDQog
ICAgIA0KICAgICANCg0KDQogICAgIA0KDQoNCg0KICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBf
X2xhc3QxOyArK19fZmlyc3QxKQ0KICAgICAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBf
X2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQ0KICAgICAgICAgIGlmIChfX2Nv
bXAoKl9fZmlyc3QxLCAqX19pdGVyKSkNCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsNCiAg
ICAgIHJldHVybiBfX2xhc3QxOw0KICAgIH0NCiMgNDIwMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnby5oIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5
cGVuYW1lIF9Gb3J3YXJkSXRlcjI+DQogICAgX0ZvcndhcmRJdGVyMQ0KICAgIF9fZmluZF9lbmQo
X0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLA0KICAg
ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0K
ICAgIHsNCiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQ0KICAgICAgICByZXR1cm4gX19s
YXN0MTsNCiAgICAgIGVsc2Ugew0KICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19s
YXN0MTsNCiAgICAgICAgd2hpbGUgKDEpIHsNCiAgICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3
X3Jlc3VsdA0KICAgICAgICAgICAgPSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3Qy
LCBfX2xhc3QyKTsNCiAgICAgICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpDQogICAg
ICAgICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBf
X3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsNCiAgICAgICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVz
dWx0Ow0KICAgICAgICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAg
ICAgIH0NCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5h
bWUgX0ZvcndhcmRJdGVyMiwNCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4N
CiAgICBfRm9yd2FyZEl0ZXIxDQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3Qx
LCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9f
Zmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICBmb3J3YXJkX2l0
ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcsDQogICAgICAgICAgICAgICBfQmluYXJ5
UHJlZGljYXRlIF9fY29tcCkNCiAgICB7DQogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikN
CiAgICAgICAgcmV0dXJuIF9fbGFzdDE7DQogICAgICBlbHNlIHsNCiAgICAgICAgX0ZvcndhcmRJ
dGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7DQogICAgICAgIHdoaWxlICgxKSB7DQogICAgICAgICAg
X0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQNCiAgICAgICAgICAgID0gc2VhcmNoKF9fZmlyc3Qx
LCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsNCiAgICAgICAgICBpZiAoX19u
ZXdfcmVzdWx0ID09IF9fbGFzdDEpDQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7DQogICAg
ICAgICAgZWxzZSB7DQogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsNCiAgICAg
ICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0Ow0KICAgICAgICAgICAgKytfX2ZpcnN0MTsN
CiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIy
Pg0KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjENCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFs
SXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19s
YXN0MiwNCiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVj
dGlvbmFsX2l0ZXJhdG9yX3RhZykNCiAgICB7DQoNCiAgICAgDQogICAgIA0KDQogICAgICB0eXBl
ZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOw0KICAg
ICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVy
MjsNCg0KICAgICAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsNCiAgICAgIF9SZXZJdGVy
MiBfX3JsYXN0MihfX2ZpcnN0Mik7DQogICAgICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNo
KF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIpOw0KDQogICAgICBpZiAoX19y
cmVzdWx0ID09IF9fcmxhc3QxKQ0KICAgICAgICByZXR1cm4gX19sYXN0MTsNCiAgICAgIGVsc2Ug
ew0KICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2Uo
KTsNCiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3Qy
KSk7DQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgICAgIH0NCiAgICB9DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJ
dGVyMiwNCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4NCiAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIxDQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3Qx
LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsDQogICAgICAg
ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcsDQogICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkNCiAgICB7DQoN
CiAgICAgDQogICAgIA0KDQogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0
aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOw0KICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9C
aWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsNCg0KICAgICAgX1Jldkl0ZXIxIF9fcmxhc3Qx
KF9fZmlyc3QxKTsNCiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7DQogICAgICBf
UmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwg
X19ybGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQoN
CiAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpDQogICAgICAgIHJldHVybiBfX2xhc3Qx
Ow0KICAgICAgZWxzZSB7DQogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBf
X3JyZXN1bHQuYmFzZSgpOw0KICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19m
aXJzdDIsIF9fbGFzdDIpKTsNCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0Ow0KICAgICAgfQ0KICAg
IH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0Zv
cndhcmRJdGVyMj4NCiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyMQ0KICAgIGZpbmRfZW5kKF9Gb3J3
YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpDQogICAgew0KDQog
ICAgIA0KICAgICANCiAgICAgDQoNCg0KDQogICAgICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0
MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICBf
X2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIF9f
aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwNCiAgICAgICAgICAgdHlw
ZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4NCiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyMQ0KICAgIGZp
bmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwNCiAg
ICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIs
DQogICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApDQogICAgew0KDQogICAgIA0K
ICAgICANCiAgICAgDQoNCg0KDQogICAgICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19s
YXN0MSwgX19maXJzdDIsIF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh
dG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0
b3JfY2F0ZWdvcnkoX19maXJzdDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsN
CiAgICB9DQoNCn0NCiMgNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2FsZ29yaXRobSIgMiAzDQoj
IDU3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDEgMw0KIyA0NSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
DQogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
DQogICAgX1JlcDo6X1NfbWF4X3NpemUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2Yo
X0NoYXJUKSkgLSAxKSAvIDQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgY29uc3QgX0NoYXJUDQogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgX1JlcDo6X1NfdGVybWluYWwg
PSBfQ2hhclQoKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zOw0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0eXBlbmFtZSBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfU19lbXB0eV9yZXBfc3RvcmFnZVsNCiAg
ICAoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEp
L3NpemVvZihzaXplX3R5cGUpXTsNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9Jbkl0ZXI+DQogICAgICBfQ2hhclQqDQogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoNCiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5J
dGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwNCiAgICAgICAgICAgICAgICAgICBpbnB1dF9p
dGVyYXRvcl90YWcpDQogICAgICB7DQogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2Eg
PT0gX0FsbG9jKCkpDQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHko
KTsNCg0KICAgICAgICBfQ2hhclQgX19idWZbMTAwXTsNCiAgICAgICAgc2l6ZV90eXBlIF9faSA9
IDA7DQogICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXplb2YoX19idWYp
IC8gc2l6ZW9mKF9DaGFyVCkpDQogICAgICAgICAgew0KICAgICAgICAgICAgX19idWZbX19pKytd
ID0gKl9fYmVnOw0KICAgICAgICAgICAgKytfX2JlZzsNCiAgICAgICAgICB9DQogICAgICAgIF9S
ZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ksIF9fYSk7DQogICAgICAgIHRyYWl0c190eXBl
Ojpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsNCiAgICAgICAgX19yLT5fTV9s
ZW5ndGggPSBfX2k7DQogICAgICAgIHRyeQ0KICAgICAgICAgIHsNCg0KDQoNCiAgICAgICAgICAg
IGZvciAoOzspDQogICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fcCA9
IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9sZW5ndGg7DQogICAgICAgICAgICAgICAgX0No
YXJUKiBfX2xhc3QgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fY2FwYWNpdHk7DQogICAg
ICAgICAgICAgICAgZm9yICg7OykNCiAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
ICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQ0KICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19wIC0gX19yLT5fTV9yZWZkYXRh
KCk7DQogICAgICAgICAgICAgICAgICAgICAgICAqX19wID0gX1JlcDo6X1NfdGVybWluYWw7DQog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7DQogICAgICAg
ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoX19wID09IF9fbGFzdCkN
CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgKl9fcCsr
ID0gKl9fYmVnOw0KICAgICAgICAgICAgICAgICAgICArK19fYmVnOw0KICAgICAgICAgICAgICAg
ICAgfQ0KDQogICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19wIC0gX19yLT5fTV9y
ZWZkYXRhKCk7DQogICAgICAgICAgICAgICAgX1JlcCogX19hbm90aGVyID0gX1JlcDo6X1NfY3Jl
YXRlKF9fbGVuICsgMSwgX19hKTsNCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShf
X2Fub3RoZXItPl9NX3JlZmRhdGEoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3ItPl9NX3JlZmRhdGEoKSwgX19sZW4pOw0KICAgICAgICAgICAgICAgIF9fci0+X01fZGVz
dHJveShfX2EpOw0KICAgICAgICAgICAgICAgIF9fciA9IF9fYW5vdGhlcjsNCiAgICAgICAgICAg
ICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fbGVuOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAg
fQ0KICAgICAgICBjYXRjaCguLi4pDQogICAgICAgICAgew0KICAgICAgICAgICAgX19yLT5fTV9k
ZXN0cm95KF9fYSk7DQogICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICB9DQogICAgICAgIHJl
dHVybiAwOw0KICAgICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5JdGVyPg0K
ICAgICAgX0NoYXJUKg0KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6DQogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29u
c3QgX0FsbG9jJiBfX2EsDQogICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp
DQogICAgICB7DQogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5
cGU+KGRpc3RhbmNlKF9fYmVnLCBfX2VuZCkpOw0KDQoNCiAgICAgICAgaWYgKF9fYnVpbHRpbl9l
eHBlY3QoX19iZWcgPT0gX0luSXRlcigpLCAwKSkNCiAgICAgICAgICBfX3Rocm93X2xvZ2ljX2Vy
cm9yKCJhdHRlbXB0IHRvIGNyZWF0ZSBzdHJpbmcgd2l0aCBudWxsIHBvaW50ZXIiKTsNCg0KICAg
ICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQ0KICAgICAgICAgIHJl
dHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7DQoNCg0KICAgICAgICBfUmVwKiBfX3Ig
PSBfUmVwOjpfU19jcmVhdGUoX19kbmV3LCBfX2EpOw0KICAgICAgICB0cnkNCiAgICAgICAgICB7
IF9TX2NvcHlfY2hhcnMoX19yLT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2VuZCk7IH0NCiAgICAg
ICAgY2F0Y2goLi4uKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShf
X2EpOw0KICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgfQ0KICAgICAgICBfX3ItPl9NX2xl
bmd0aCA9IF9fZG5ldzsNCg0KICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX2RuZXddID0gX1Jl
cDo6X1NfdGVybWluYWw7DQogICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsNCiAgICAg
IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4NCiAgICBfQ2hhclQqDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6DQogICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2Ms
IGNvbnN0IF9BbGxvYyYgX19hKQ0KICAgIHsNCiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2EgPT0g
X0FsbG9jKCkpDQogICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7DQoN
Cg0KICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbiwgX19hKTsNCiAgICAgIHRy
eQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKF9fbikNCiAgICAgICAgICAgIHRyYWl0c190eXBl
Ojphc3NpZ24oX19yLT5fTV9yZWZkYXRhKCksIF9fbiwgX19jKTsNCiAgICAgICAgfQ0KICAgICAg
Y2F0Y2goLi4uKQ0KICAgICAgICB7DQogICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7DQog
ICAgICAgICAgdGhyb3c7DQogICAgICAgIH0NCiAgICAgIF9fci0+X01fbGVuZ3RoID0gX19uOw0K
ICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOw0KICAgICAg
cmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0cikNCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgpLT5fTV9n
cmFiKF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLA0KICAgICAgICAgICAgICAgICBf
X3N0ci5nZXRfYWxsb2NhdG9yKCkpDQogICAgeyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxv
YyYgX19hKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNpemVfdHlwZSgpLCBfQ2hh
clQoKSwgX19hKSwgX19hKQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJp
bmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pDQogICAgOiBfTV9kYXRh
cGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxvYygpKSwgX0Fs
bG9jKCkpDQogICAgeyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6DQogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
IHNpemVfdHlwZSBfX3BvcywNCiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3Qg
X0FsbG9jJiBfX2EpDQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hl
Y2soX19wb3MpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQo
X19wb3MsIF9fbiksIF9fYSksIF9fYSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0No
YXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQ0KICAgIDogX01fZGF0
YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2EpDQogICAgeyB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAg
YmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSkNCiAgICA6
IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyA/IF9fcyArIHRyYWl0c190eXBlOjps
ZW5ndGgoX19zKSA6IDAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hKSwgX19h
KQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46Og0KICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25z
dCBfQWxsb2MmIF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX24sIF9fYywg
X19hKSwgX19hKQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXI+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAg
YmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIgX19iZWcsIF9JbnB1dEl0ZXIgX19lbmQsIGNvbnN0IF9B
bGxvYyYgX19hKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwg
X19hKSwgX19hKQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAgew0KICAgICAgaWYgKF9N
X3JlcCgpICE9IF9fc3RyLl9NX3JlcCgpKQ0KICAgICAgICB7DQoNCiAgICAgICAgICBhbGxvY2F0
b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7DQogICAgICAgICAgX0NoYXJUKiBf
X3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9fYSwgX19zdHIuZ2V0X2FsbG9jYXRvcigp
KTsNCiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOw0KICAgICAgICAgIF9NX2Rh
dGEoX190bXApOw0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
Pg0KICAgIHZvaWQNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpf
UmVwOjoNCiAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAoKQ0KICAgIHsN
CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01fY2FwYWNpdHkgKyAx
KSAqIHNpemVvZihfQ2hhclQpOw0KICAgICAgX1Jhd19ieXRlc19hbGxvYyhfX2EpLmRlYWxsb2Nh
dGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyksIF9fc2l6ZSk7DQogICAgfQ0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
Pg0KICAgIHZvaWQNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpf
TV9sZWFrX2hhcmQoKQ0KICAgIHsNCiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkp
DQogICAgICAgIF9NX211dGF0ZSgwLCAwLCAwKTsNCiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVh
a2VkKCk7DQogICAgfQ0KDQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQNCiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBfTV9tdXRhdGUoc2l6ZV90eXBl
IF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKQ0KICAgIHsNCiAgICAg
IHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXplICsgX19sZW4yIC0gX19sZW4xOw0KICAgICAgY29u
c3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4xOw0KICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfX29sZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7DQoN
CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFj
aXR5KCkpDQogICAgICAgIHsNCg0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9h
bGxvY2F0b3IoKTsNCg0KDQogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0
MDk2Ow0KICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQg
KiBzaXplb2YgKHZvaWQqKTsNCg0KICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2Fw
YWNpdHkgPSAoX19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXplDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHNpemVvZihfUmVwKSAtIHNpemVvZihf
Q2hhclQpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBz
aXplb2YoX0NoYXJUKTsNCiAgICAgICAgICBfUmVwKiBfX3I7DQogICAgICAgICAgaWYgKF9fbmV3
X3NpemUgPiBjYXBhY2l0eSgpICYmIF9fbmV3X3NpemUgPiBfX3BhZ2VfY2FwYWNpdHkpDQoNCiAg
ICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplID4gMipjYXBhY2l0eSgp
ID8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zaXplIDogMipjYXBh
Y2l0eSgpLCBfX2EpOw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9T
X2NyZWF0ZShfX25ld19zaXplLCBfX2EpOw0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0K
ICAgICAgICAgICAgICBpZiAoX19wb3MpDQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNv
cHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX2RhdGEoKSwgX19wb3MpOw0KICAgICAgICAgICAgICBp
ZiAoX19ob3dfbXVjaCkNCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9N
X3JlZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fc3JjLCBfX2hvd19tdWNoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRj
aCguLi4pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fci0+X01fZGlzcG9zZShnZXRf
YWxsb2NhdG9yKCkpOw0KICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAg
ICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOw0KICAgICAgICAgIF9NX2RhdGEoX19yLT5f
TV9yZWZkYXRhKCkpOw0KICAgICAgfQ0KICAgICAgZWxzZSBpZiAoX19ob3dfbXVjaCAmJiBfX2xl
bjEgIT0gX19sZW4yKQ0KICAgICAgICB7DQoNCiAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShf
TV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwgX19zcmMsIF9faG93X211Y2gpOw0KICAgICAgICB9
DQogICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7DQogICAgICBfTV9yZXAoKS0+X01f
bGVuZ3RoID0gX19uZXdfc2l6ZTsNCiAgICAgIF9NX2RhdGEoKVtfX25ld19zaXplXSA9IF9SZXA6
Ol9TX3Rlcm1pbmFsOw0KDQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQNCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNpemVfdHlwZSBfX3JlcykNCiAg
ICB7DQogICAgICBpZiAoX19yZXMgPiB0aGlzLT5jYXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9p
c19zaGFyZWQoKSkNCiAgICAgICAgew0KICAgICAgICAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9z
aXplKCkpDQogICAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpy
ZXNlcnZlIik7DQoNCiAgICAgICAgICBpZiAoX19yZXMgPCB0aGlzLT5zaXplKCkpDQogICAgICAg
ICAgICBfX3JlcyA9IHRoaXMtPnNpemUoKTsNCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2Eg
PSBnZXRfYWxsb2NhdG9yKCk7DQogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX3JlcCgpLT5f
TV9jbG9uZShfX2EsIF9fcmVzIC0gdGhpcy0+c2l6ZSgpKTsNCiAgICAgICAgICBfTV9yZXAoKS0+
X01fZGlzcG9zZShfX2EpOw0KICAgICAgICAgIF9NX2RhdGEoX190bXApOw0KICAgICAgICB9DQog
ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c3dhcChiYXNpY19zdHJpbmcmIF9fcykNCiAgICB7DQogICAgICBpZiAoX01fcmVwKCkt
Pl9NX2lzX2xlYWtlZCgpKQ0KICAgICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7DQog
ICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkNCiAgICAgICAgX19zLl9NX3Jl
cCgpLT5fTV9zZXRfc2hhcmFibGUoKTsNCiAgICAgIGlmICh0aGlzLT5nZXRfYWxsb2NhdG9yKCkg
PT0gX19zLmdldF9hbGxvY2F0b3IoKSkNCiAgICAgICAgew0KICAgICAgICAgIF9DaGFyVCogX190
bXAgPSBfTV9kYXRhKCk7DQogICAgICAgICAgX01fZGF0YShfX3MuX01fZGF0YSgpKTsNCiAgICAg
ICAgICBfX3MuX01fZGF0YShfX3RtcCk7DQogICAgICAgIH0NCg0KICAgICAgZWxzZQ0KICAgICAg
ICB7DQogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMShfTV9pYmVnaW4oKSwgX01faWVuZCgp
LCBfX3MuZ2V0X2FsbG9jYXRvcigpKTsNCiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAyKF9f
cy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7DQogICAgICAgICAgKnRoaXMgPSBfX3RtcDI7DQog
ICAgICAgICAgX19zID0gX190bXAxOw0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHR5
cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXAqDQogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6DQogICAgX1NfY3Jl
YXRlKHNpemVfdCBfX2NhcGFjaXR5LCBjb25zdCBfQWxsb2MmIF9fYWxsb2MpDQogICAgew0KICAg
ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5n
X3R5cGU7DQoNCg0KICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkNCg0KDQoNCiAg
ICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X1NfY3JlYXRlIik7DQoN
Cg0KDQoNCiAgICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9D
aGFyVCkgKyBzaXplb2YoX1JlcCk7DQojIDQyMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9i
YXNpY19zdHJpbmcudGNjIiAzDQogICAgICBjb25zdCBzaXplX3QgX19wYWdlc2l6ZSA9IDQwOTY7
DQogICAgICBjb25zdCBzaXplX3QgX19zdWJwYWdlc2l6ZSA9IDEyODsNCiAgICAgIGNvbnN0IHNp
emVfdCBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsNCiAgICAgIGlm
ICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpID4gX19wYWdlc2l6ZSkNCiAgICAgICAg
ew0KICAgICAgICAgIHNpemVfdCBfX2V4dHJhID0NCiAgICAgICAgICAgIChfX3BhZ2VzaXplIC0g
KChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgJSBfX3BhZ2VzaXplKSkNCiAgICAgICAg
ICAgICUgX19wYWdlc2l6ZTsNCiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXpl
b2YoX0NoYXJUKTsNCiAgICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9m
KF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7DQogICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKF9fc2l6
ZSA+IF9fc3VicGFnZXNpemUpDQogICAgICAgIHsNCiAgICAgICAgICBzaXplX3QgX19leHRyYSA9
DQogICAgICAgICAgICAoX19zdWJwYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVy
X3NpemUpICUgX19zdWJwYWdlc2l6ZSkpDQogICAgICAgICAgICAlIF9fc3VicGFnZXNpemU7DQog
ICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7DQogICAgICAg
ICAgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9S
ZXApOw0KICAgICAgICB9DQoNCg0KDQogICAgICB2b2lkKiBfX3BsYWNlID0gX1Jhd19ieXRlc19h
bGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOw0KICAgICAgX1JlcCAqX19wID0gbmV3IChf
X3BsYWNlKSBfUmVwOw0KICAgICAgX19wLT5fTV9jYXBhY2l0eSA9IF9fY2FwYWNpdHk7DQogICAg
ICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOw0KICAgICAgX19wLT5fTV9sZW5ndGggPSAwOw0KICAg
ICAgcmV0dXJuIF9fcDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgX0NoYXJUKg0KICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6Og0KICAgIF9NX2Nsb25lKGNvbnN0
IF9BbGxvYyYgX19hbGxvYywgc2l6ZV90eXBlIF9fcmVzKQ0KICAgIHsNCg0KICAgICAgY29uc3Qg
c2l6ZV90eXBlIF9fcmVxdWVzdGVkX2NhcCA9IF9NX2xlbmd0aCArIF9fcmVzOw0KDQogICAgICBj
b25zdCBzaXplX3R5cGUgX19wYWdlc2l6ZSA9IDQwOTY7DQogICAgICBjb25zdCBzaXplX3R5cGUg
X19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7DQoNCiAgICAgIGNvbnN0
IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPQ0KICAgICAgICAoX19wYWdlc2l6ZSAtIF9fbWFs
bG9jX2hlYWRlcl9zaXplIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpDQogICAgICAg
IC8gc2l6ZW9mKF9DaGFyVCk7DQogICAgICBfUmVwKiBfX3I7DQogICAgICBpZiAoX19yZXF1ZXN0
ZWRfY2FwID4gX01fY2FwYWNpdHkgJiYgX19yZXF1ZXN0ZWRfY2FwID4gX19wYWdlX2NhcGFjaXR5
KQ0KDQogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAgPiAyKl9N
X2NhcGFjaXR5ID8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVxdWVzdGVkX2Nh
cCA6IDIqX01fY2FwYWNpdHksIF9fYWxsb2MpOw0KICAgICAgZWxzZQ0KICAgICAgICBfX3IgPSBf
UmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwLCBfX2FsbG9jKTsNCg0KICAgICAgaWYgKF9N
X2xlbmd0aCkNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgeyB0cmFpdHNf
dHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9
DQogICAgICAgICAgY2F0Y2goLi4uKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX3It
Pl9NX2Rlc3Ryb3koX19hbGxvYyk7DQogICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAg
fQ0KICAgICAgICB9DQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9NX2xlbmd0aDsNCiAgICAgIHJl
dHVybiBfX3ItPl9NX3JlZmRhdGEoKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdm9pZA0KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2l6ZShzaXplX3R5cGUgX19u
LCBfQ2hhclQgX19jKQ0KICAgIHsNCiAgICAgIGlmIChfX24gPiBtYXhfc2l6ZSgpKQ0KICAgICAg
ICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUiKTsNCiAgICAgIHNp
emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19zaXplIDwgX19uKQ0K
ICAgICAgICB0aGlzLT5hcHBlbmQoX19uIC0gX19zaXplLCBfX2MpOw0KICAgICAgZWxzZSBpZiAo
X19uIDwgX19zaXplKQ0KICAgICAgICB0aGlzLT5lcmFzZShfX24pOw0KDQogICAgfQ0KDQoNCg0K
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+DQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4NCiAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mDQogICAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwg
aXRlcmF0b3IgX19pMiwgX0lucHV0SXRlciBfX2sxLA0KICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZykNCiAgICAgIHsNCg0KICAgICAgICBiYXNpY19z
dHJpbmcgX19zKF9fazEsIF9fazIpOw0KICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9f
aTEsIF9faTIsIF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7DQogICAgICB9DQoNCg0K
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+DQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPg0KICAgICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYNCiAgICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgICAgX01fcmVwbGFjZV9zYWZlKGl0ZXJhdG9y
IF9faTEsIGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJkSXRlciBfX2sxLA0KICAgICAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlciBfX2syKQ0KICAgICAgew0KICAgICAgICBzaXplX3R5cGUgX19k
bmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5jZShfX2sxLCBfX2syKSk7DQogICAg
ICAgIHNpemVfdHlwZSBfX2RvbGQgPSBfX2kyIC0gX19pMTsNCiAgICAgICAgc2l6ZV90eXBlIF9f
ZG1heCA9IHRoaXMtPm1heF9zaXplKCk7DQoNCiAgICAgICAgaWYgKF9fZG1heCA8PSBfX2RuZXcp
DQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X01fcmVwbGFj
ZSIpOw0KICAgICAgICBzaXplX3R5cGUgX19vZmYgPSBfX2kxIC0gX01faWJlZ2luKCk7DQogICAg
ICAgIF9NX211dGF0ZShfX29mZiwgX19kb2xkLCBfX2RuZXcpOw0KDQoNCiAgICAgICAgaWYgKF9f
ZG5ldykNCiAgICAgICAgICBfU19jb3B5X2NoYXJzKF9NX2RhdGEoKSArIF9fb2ZmLCBfX2sxLCBf
X2syKTsNCg0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYNCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNp
emVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLA0KICAgICAgICAgICAgc2l6
ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpDQogICAgew0KICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAgIGlmIChfX3BvczIgPiBfX3N0cnNp
emUpDQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2Ui
KTsNCiAgICAgIGNvbnN0IGJvb2wgX190ZXN0bjIgPSBfX24yIDwgX19zdHJzaXplIC0gX19wb3My
Ow0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4yID0gX190ZXN0bjIgPyBfX24yIDogX19z
dHJzaXplIC0gX19wb3MyOw0KICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MxLCBfX24x
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZGF0YSgpICsgX19wb3MyLCBf
X2ZvbGRuMik7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
DQogICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAgew0KDQoNCg0KICAg
ICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAgIHNpemVfdHlwZSBfX2xl
biA9IF9fc2l6ZSArIHRoaXMtPnNpemUoKTsNCiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFj
aXR5KCkpDQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOw0KICAgICAgcmV0dXJuIF9NX3Jl
cGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01faWJlZ2luKCksDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7DQogICAgfQ0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
Pg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mDQogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgYXBwZW5kKGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikNCiAgICB7DQoN
Cg0KDQogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zdHIuc2l6ZSgpIC0gX19wb3MsIF9f
bikgKyB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQ0K
ICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsNCiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3Nh
ZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSk7DQogICAgfQ0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mDQogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgYXBwZW5kKGNvbnN0
IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQ0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX2xl
biA9IF9fbiArIHRoaXMtPnNpemUoKTsNCiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5
KCkpDQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOw0KICAgICAgcmV0dXJuIF9NX3JlcGxh
Y2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zLCBfX3MgKyBfX24pOw0KICAgIH0NCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Jg0KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGFwcGVuZChzaXplX3R5
cGUgX19uLCBfQ2hhclQgX19jKQ0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiAr
IHRoaXMtPnNpemUoKTsNCiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpDQogICAg
ICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOw0KICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9N
X2llbmQoKSwgX01faWVuZCgpLCBfX24sIF9fYyk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4NCiAgICBvcGVyYXRvcisoY29uc3QgX0No
YXJUKiBfX2xocywNCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7DQogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsNCiAgICAgIF9fc2l6
ZV90eXBlIF9fbGVuID0gX1RyYWl0czo6bGVuZ3RoKF9fbGhzKTsNCiAgICAgIF9fc3RyaW5nX3R5
cGUgX19zdHI7DQogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsNCiAg
ICAgIF9fc3RyLmFwcGVuZChfX2xocywgX19saHMgKyBfX2xlbik7DQogICAgICBfX3N0ci5hcHBl
bmQoX19yaHMpOw0KICAgICAgcmV0dXJuIF9fc3RyOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+DQogICAgb3BlcmF0b3IrKF9DaGFyVCBf
X2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp
DQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+IF9fc3RyaW5nX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6
OnNpemVfdHlwZSBfX3NpemVfdHlwZTsNCiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7DQogICAg
ICBfX3NpemVfdHlwZSBfX2xlbiA9IF9fcmhzLnNpemUoKTsNCiAgICAgIF9fc3RyLnJlc2VydmUo
X19sZW4gKyAxKTsNCiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19saHMpOw0K
ICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsNCiAgICAgIHJldHVybiBfX3N0cjsNCiAgICB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYNCiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICByZXBsYWNlKGl0ZXJh
dG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQ0KICAg
IHsNCiAgICAgIHNpemVfdHlwZSBfX24xID0gX19pMiAtIF9faTE7DQogICAgICBzaXplX3R5cGUg
X19vZmYxID0gX19pMSAtIF9NX2liZWdpbigpOw0KICAgICAgaWYgKG1heF9zaXplKCkgLSAodGhp
cy0+c2l6ZSgpIC0gX19uMSkgPD0gX19uMikNCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3Io
ImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOw0KICAgICAgX01fbXV0YXRlIChfX29mZjEsIF9fbjEs
IF9fbjIpOw0KDQogICAgICBpZiAoX19uMikNCiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihf
TV9kYXRhKCkgKyBfX29mZjEsIF9fbjIsIF9fYyk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAg
fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46Og0KICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3Bv
cykgY29uc3QNCiAgICB7DQogICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpDQogICAgICAg
IF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsNCg0KICAgICAgaWYg
KF9fbiA+IHRoaXMtPnNpemUoKSAtIF9fcG9zKQ0KICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkg
LSBfX3BvczsNCg0KICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9kYXRhKCkgKyBfX3Bv
cywgX19uKTsNCg0KICAgICAgcmV0dXJuIF9fbjsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdHlwZW5h
bWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgZmluZChjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdA0KICAgIHsN
CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBzaXplX3QgX194
cG9zID0gX19wb3M7DQogICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsNCiAg
ICAgIGZvciAoOyBfX3hwb3MgKyBfX24gPD0gX19zaXplOyArK19feHBvcykNCiAgICAgICAgaWYg
KHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9feHBvcywgX19zLCBfX24pID09IDApDQog
ICAgICAgICAgcmV0dXJuIF9feHBvczsNCiAgICAgIHJldHVybiBucG9zOw0KICAgIH0NCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4NCiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpz
aXplX3R5cGUNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAg
ICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QNCiAgICB7DQogICAgICBz
aXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgc2l6ZV90eXBlIF9fcmV0ID0g
bnBvczsNCiAgICAgIGlmIChfX3BvcyA8IF9fc2l6ZSkNCiAgICAgICAgew0KICAgICAgICAgIGNv
bnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOw0KICAgICAgICAgIHNpemVfdHlwZSBfX24g
PSBfX3NpemUgLSBfX3BvczsNCiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190
eXBlOjpmaW5kKF9fZGF0YSArIF9fcG9zLCBfX24sIF9fYyk7DQogICAgICAgICAgaWYgKF9fcCkN
CiAgICAgICAgICAgIF9fcmV0ID0gX19wIC0gX19kYXRhOw0KICAgICAgICB9DQogICAgICByZXR1
cm4gX19yZXQ7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5cGUg
X19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaWYgKF9fbiA8PSBfX3NpemUpDQogICAgICAg
IHsNCiAgICAgICAgICBfX3BvcyA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fbiwgX19wb3MpOw0KICAg
ICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOw0KICAgICAgICAgIGRvDQog
ICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2Rh
dGEgKyBfX3BvcywgX19zLCBfX24pID09IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIF9fcG9z
Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIHdoaWxlIChfX3Bvcy0tID4gMCk7DQogICAgICAg
IH0NCiAgICAgIHJldHVybiBucG9zOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0eXBlbmFtZSBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICByZmluZChfQ2hhclQgX19jLCBz
aXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo
aXMtPnNpemUoKTsNCiAgICAgIGlmIChfX3NpemUpDQogICAgICAgIHsNCiAgICAgICAgICBzaXpl
X3QgX194cG9zID0gX19zaXplIC0gMTsNCiAgICAgICAgICBpZiAoX194cG9zID4gX19wb3MpDQog
ICAgICAgICAgICBfX3hwb3MgPSBfX3BvczsNCg0KICAgICAgICAgIGZvciAoKytfX3hwb3M7IF9f
eHBvcy0tID4gMDsgKQ0KICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcShfTV9kYXRhKClb
X194cG9zXSwgX19jKSkNCiAgICAgICAgICAgICAgcmV0dXJuIF9feHBvczsNCiAgICAgICAgfQ0K
ICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0No
YXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QNCiAgICB7DQog
ICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+c2l6ZSgpOyArK19fcG9zKQ0KICAgICAg
ICB7DQogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX3Ms
IF9fbiwgX01fZGF0YSgpW19fcG9zXSk7DQogICAgICAgICAgaWYgKF9fcCkNCiAgICAgICAgICAg
IHJldHVybiBfX3BvczsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0K
ICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z
aXplKCk7DQogICAgICBpZiAoX19zaXplICYmIF9fbikNCiAgICAgICAgew0KICAgICAgICAgIGlm
ICgtLV9fc2l6ZSA+IF9fcG9zKQ0KICAgICAgICAgICAgX19zaXplID0gX19wb3M7DQogICAgICAg
ICAgZG8NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpmaW5k
KF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpDQogICAgICAgICAgICAgICAgcmV0dXJuIF9f
c2l6ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7DQog
ICAgICAgIH0NCiAgICAgIHJldHVybiBucG9zOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0eXBlbmFt
ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBmaW5kX2ZpcnN0X25v
dF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBj
b25zdA0KICAgIHsNCiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsNCiAgICAgIGZvciAoOyBf
X3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQ0KICAgICAgICBpZiAoIXRyYWl0c190eXBl
OjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX194cG9zXSkpDQogICAgICAgICAgcmV0dXJuIF9f
eHBvczsNCiAgICAgIHJldHVybiBucG9zOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0eXBlbmFtZSBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBmaW5kX2ZpcnN0X25vdF9v
ZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90
IF9feHBvcyA9IF9fcG9zOw0KICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytf
X3hwb3MpDQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBf
X2MpKQ0KICAgICAgICAgIHJldHVybiBfX3hwb3M7DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+DQogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6DQogICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19uKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX3NpemUg
PSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19zaXplKQ0KICAgICAgICB7DQogICAgICAgICAg
aWYgKC0tX19zaXplID4gX19wb3MpDQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsNCiAgICAg
ICAgICBkbw0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpm
aW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpDQogICAgICAgICAgICAgICAgcmV0dXJu
IF9fc2l6ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOw0KICAg
ICAgICB9DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdHlwZW5hbWUg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgZmluZF9sYXN0X25vdF9v
ZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90
eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIGlmIChfX3NpemUpDQogICAgICAgIHsN
CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykNCiAgICAgICAgICAgIF9fc2l6ZSA9IF9f
cG9zOw0KICAgICAgICAgIGRvDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmICghdHJh
aXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3NpemVdLCBfX2MpKQ0KICAgICAgICAgICAgICAgIHJl
dHVybiBfX3NpemU7DQogICAgICAgICAgICB9DQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsN
CiAgICAgICAgfQ0KICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0K
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGNvbXBhcmUo
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry
KSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQog
ICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAgIGlmIChfX3BvcyA+
IF9fc2l6ZSkNCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29t
cGFyZSIpOw0KDQogICAgICBzaXplX3R5cGUgX19yc2l6ZT0gbWluKF9fc2l6ZSAtIF9fcG9zLCBf
X24pOw0KICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOw0KICAg
ICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3N0
ci5kYXRhKCksIF9fbGVuKTsNCiAgICAgIGlmICghX19yKQ0KICAgICAgICBfX3IgPSBfX3JzaXpl
IC0gX19vc2l6ZTsNCiAgICAgIHJldHVybiBfX3I7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0K
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGNvbXBhcmUo
c2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIsDQogICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3QN
CiAgICB7DQogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgc2l6
ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7DQogICAgICBpZiAoX19wb3MxID4gX19zaXpl
IHx8IF9fcG9zMiA+IF9fb3NpemUpDQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp
Y19zdHJpbmc6OmNvbXBhcmUiKTsNCg0KICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19z
aXplIC0gX19wb3MxLCBfX24xKTsNCiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29z
aXplIC0gX19wb3MyLCBfX24yKTsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXpl
LCBfX3Jvc2l6ZSk7DQogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0
YSgpICsgX19wb3MxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3Ry
LmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOw0KICAgICAgaWYgKCFfX3IpDQogICAgICAgIF9fciA9
IF9fcnNpemUgLSBfX3Jvc2l6ZTsNCiAgICAgIHJldHVybiBfX3I7DQogICAgfQ0KDQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
DQogICAgaW50DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQog
ICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5
cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpj
b21wYXJlKF9NX2RhdGEoKSwgX19zLCBfX3NpemUpOw0KICAgICAgaWYgKCFfX3IpDQogICAgICAg
IF9fciA9IF9fc2l6ZSAtIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsNCiAgICAgIHJldHVybiBf
X3I7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW50DQogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90eXBl
IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkNCiAgICAg
ICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOw0KDQogICAg
ICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsNCiAgICAgIHNp
emVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsNCiAgICAgIHNpemVf
dHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsNCiAgICAgIGludCBfX3IgPSB0cmFp
dHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7DQogICAgICBp
ZiAoIV9fcikNCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7DQogICAgICByZXR1cm4g
X19yOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbnQNCiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6DQogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw
ZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywNCiAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBj
b25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAg
ICBpZiAoX19wb3MgPiBfX3NpemUpDQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp
Y19zdHJpbmc6OmNvbXBhcmUiKTsNCg0KICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBtaW4odHJh
aXRzX3R5cGU6Omxlbmd0aChfX3MpLCBfX24yKTsNCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0g
bWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihf
X3JzaXplLCBfX29zaXplKTsNCiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShf
TV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7DQogICAgICBpZiAoIV9fcikNCiAgICAgICAg
X19yID0gX19yc2l6ZSAtIF9fb3NpemU7DQogICAgICByZXR1cm4gX19yOw0KICAgIH0NCg0KICB0
ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+DQogICAg
dm9pZA0KICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fc3RyLA0KICAgICAgICAgICAgICAgICAgIF9DaGFyVCogX19idWYsIHR5
cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIF9fYnVmc2l6KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOw0KICAgICAgc2l6ZV90eXBlIF9f
c3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAgIHNpemVfdHlwZSBfX2J5dGVzID0gbWluKF9f
c3Ryc2l6ZSwgX19idWZzaXogLSAxKTsNCiAgICAgIF9UcmFpdHM6OmNvcHkoX19idWYsIF9fc3Ry
LmRhdGEoKSwgX19ieXRlcyk7DQogICAgICBfX2J1ZltfX2J5dGVzXSA9IF9DaGFyVCgpOw0KICAg
IH0NCg0KDQoNCg0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nPGNoYXI+Ow0K
ICBleHRlcm4gdGVtcGxhdGUNCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+Jg0KICAgIG9wZXJhdG9y
Pj4oYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOw0KICBleHRlcm4gdGVtcGxhdGUNCiAg
ICBiYXNpY19vc3RyZWFtPGNoYXI+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFy
PiYsIGNvbnN0IHN0cmluZyYpOw0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBiYXNpY19pc3RyZWFt
PGNoYXI+Jg0KICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYsIGNoYXIp
Ow0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+Jg0KICAgIGdldGxp
bmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBiYXNpY19zdHJpbmc8d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJhc2lj
X2lzdHJlYW08d2NoYXJfdD4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPHdjaGFyX3Q+
Jiwgd3N0cmluZyYpOw0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBiYXNpY19vc3RyZWFtPHdjaGFy
X3Q+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYsIGNvbnN0IHdzdHJp
bmcmKTsNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYNCiAg
ICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJiwgd2NoYXJfdCk7DQog
IGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mDQogICAgZ2V0bGlu
ZShiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYpOw0KfQ0KIyA1OCAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMNCiMgNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
bG9jYWxlZndkLmgiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhj
ZXB0LmgiIDEgMw0KIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5o
IiAzDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMw0K
IyAzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMNCg0KbmFt
ZXNwYWNlIHN0ZA0Kew0KDQogIHZvaWQNCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOw0K
DQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsNCg0KDQogIHZvaWQNCiAgX190
aHJvd19iYWRfY2FzdCh2b2lkKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lk
KTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K
DQogIHZvaWQNCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2
b2lkDQogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZv
aWQNCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQog
IF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Ro
cm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3df
cmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfb3ZlcmZs
b3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfdW5kZXJmbG93
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfaW9zX2ZhaWx1
cmUoY29uc3QgY2hhciogX19zKTsNCn0NCiMgNTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
bG9jYWxlZndkLmgiIDIgMw0KDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICBjbGFzcyBsb2NhbGU7
DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBp
c3NwYWNlKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNwcmludChfQ2hhclQsIGNvbnN0IGxvY2FsZSYp
Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlz
Y250cmwoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNs
b3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzYWxwaGEoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsN
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc2Rp
Z2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
Pg0KICAgIGlubGluZSBib29sDQogICAgaXNwdW5jdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzeGRp
Z2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
Pg0KICAgIGlubGluZSBib29sDQogICAgaXNhbG51bShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzZ3Jh
cGgoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
DQogICAgaW5saW5lIF9DaGFyVA0KICAgIHRvdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsN
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIF9DaGFyVA0KICAgIHRv
bG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KDQoNCiAgY2xhc3MgY3R5cGVfYmFzZTsN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNsYXNzIGN0eXBlOw0KICB0ZW1wbGF0
ZTw+IGNsYXNzIGN0eXBlPGNoYXI+Ow0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
DQogICAgY2xhc3MgY3R5cGVfYnluYW1lOw0KDQoNCiAgY2xhc3MgY29kZWN2dF9iYXNlOw0KICBj
bGFzcyBfX2VuY190cmFpdHM7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFt
ZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4NCiAgICBjbGFzcyBjb2RlY3Z0Ow0KICB0ZW1w
bGF0ZTw+IGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PjsNCg0KDQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3Rh
dGVUPg0KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lOw0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4N
CiAgICBjbGFzcyBudW1fZ2V0Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4NCiAgICBjbGFzcyBudW1f
cHV0Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0Ow0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsNCg0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBjb2xsYXRlOw0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+IGNsYXNzDQogICAgY29sbGF0ZV9ieW5hbWU7DQoNCg0KICBjbGFzcyB0aW1l
X2Jhc2U7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlz
dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgdGltZV9nZXQ7DQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0
b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgdGltZV9nZXRfYnluYW1lOw0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQ+ID4NCiAgICBjbGFzcyB0aW1lX3B1dDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAgY2xh
c3MgdGltZV9wdXRfYnluYW1lOw0KDQoNCiAgY2xhc3MgbW9uZXlfYmFzZTsNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxf
Q2hhclQ+ID4NCiAgICBjbGFzcyBtb25leV9nZXQ7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPg0KICAg
IGNsYXNzIG1vbmV5X3B1dDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRs
ID0gZmFsc2U+DQogICAgY2xhc3MgbW9uZXlwdW5jdDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCBib29sIF9JbnRsID0gZmFsc2U+DQogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU7DQoN
Cg0KICBjbGFzcyBtZXNzYWdlc19iYXNlOw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQog
ICAgY2xhc3MgbWVzc2FnZXM7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFz
cyBtZXNzYWdlc19ieW5hbWU7DQoNCg0KICBjbGFzcyBsb2NhbGUNCiAgew0KICBwdWJsaWM6DQoN
CiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRlZ29yeTsNCg0KDQogICAgY2xhc3MgZmFjZXQ7
DQogICAgY2xhc3MgaWQ7DQogICAgY2xhc3MgX0ltcGw7DQoNCiAgICBmcmllbmQgY2xhc3MgZmFj
ZXQ7DQogICAgZnJpZW5kIGNsYXNzIF9JbXBsOw0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zh
Y2V0Pg0KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYNCiAgICAgIHVzZV9mYWNldChjb25zdCBs
b2NhbGUmKTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBi
b29sDQogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsNCg0KDQoNCiAgICBz
dGF0aWMgY29uc3QgY2F0ZWdvcnkgbm9uZSA9IDA7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5
IGN0eXBlID0gMUwgPDwgMDsNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbnVtZXJpYyA9IDFM
IDw8IDE7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUgPSAxTCA8PCAyOw0KICAg
IHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lID0gMUwgPDwgMzsNCiAgICBzdGF0aWMgY29uc3Qg
Y2F0ZWdvcnkgbW9uZXRhcnkgPSAxTCA8PCA0Ow0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBt
ZXNzYWdlcyA9IDFMIDw8IDU7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9IChjb2xs
YXRlIHwgY3R5cGUgfCBtb25ldGFyeSB8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtZXJpYyB8IHRpbWUgfCBtZXNzYWdlcyk7DQoNCg0KICAgIGxvY2FsZSgp
IHRocm93KCk7DQoNCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOw0K
DQogICAgZXhwbGljaXQNCiAgICBsb2NhbGUoY29uc3QgY2hhciogX19zKTsNCg0KICAgIGxvY2Fs
ZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgY2hhciogX19zLCBjYXRlZ29yeSBfX2NhdCk7
DQoNCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQs
IGNhdGVnb3J5IF9fY2F0KTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAg
IGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKTsNCg0KICAgIH5sb2Nh
bGUoKSB0aHJvdygpOw0KDQogICAgY29uc3QgbG9jYWxlJg0KICAgIG9wZXJhdG9yPShjb25zdCBs
b2NhbGUmIF9fb3RoZXIpIHRocm93KCk7DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+
DQogICAgICBsb2NhbGUNCiAgICAgIGNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25z
dDsNCg0KDQogICAgc3RyaW5nDQogICAgbmFtZSgpIGNvbnN0Ow0KDQogICAgYm9vbA0KICAgIG9w
ZXJhdG9yPT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKTsNCg0KICAgIGlu
bGluZSBib29sDQogICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRo
cm93ICgpDQogICAgeyByZXR1cm4gISh0aGlzLT5vcGVyYXRvcj09KF9fb3RoZXIpKTsgfQ0KDQog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4NCiAgICAgIGJvb2wNCiAgICAgIG9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MxLA0KICAgICAgICAgICAgICAgICBjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0Ow0KDQoNCiAgICBz
dGF0aWMgbG9jYWxlDQogICAgZ2xvYmFsKGNvbnN0IGxvY2FsZSYpOw0KDQogICAgc3RhdGljIGNv
bnN0IGxvY2FsZSYNCiAgICBjbGFzc2ljKCk7DQoNCiAgcHJpdmF0ZToNCg0KICAgIF9JbXBsKiBf
TV9pbXBsOw0KDQoNCiAgICBzdGF0aWMgX0ltcGwqIF9TX2NsYXNzaWM7DQoNCg0KICAgIHN0YXRp
YyBfSW1wbCogX1NfZ2xvYmFsOw0KDQogICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19udW1fY2F0
ZWdvcmllcyA9IDY7DQoNCiAgICBleHBsaWNpdA0KICAgIGxvY2FsZShfSW1wbCopIHRocm93KCk7
DQoNCiAgICBzdGF0aWMgaW5saW5lIHZvaWQNCiAgICBfU19pbml0aWFsaXplKCkNCiAgICB7DQog
ICAgICBpZiAoIV9TX2NsYXNzaWMpDQogICAgICAgIGNsYXNzaWMoKTsNCiAgICB9DQoNCiAgICBz
dGF0aWMgY2F0ZWdvcnkNCiAgICBfU19ub3JtYWxpemVfY2F0ZWdvcnkoY2F0ZWdvcnkpOw0KDQog
ICAgdm9pZA0KICAgIF9NX2NvYWxlc2NlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2Nh
bGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7DQogIH07DQoNCg0KDQogIGNsYXNzIGxvY2FsZTo6
X0ltcGwNCiAgew0KICBwdWJsaWM6DQoNCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOw0KICAgIGZy
aWVuZCBjbGFzcyBsb2NhbGU6OmZhY2V0Ow0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0
Pg0KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYNCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2Nh
bGUmKTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBib29s
DQogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsNCg0KICBwcml2YXRlOg0K
DQogICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7DQogICAgZmFjZXQqKiBfTV9mYWNldHM7
DQogICAgc2l6ZV90IF9NX2ZhY2V0c19zaXplOw0KICAgIGNvbnN0IGNoYXIqIF9NX25hbWVzW19T
X251bV9jYXRlZ29yaWVzXTsNCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1Nf
aWRfY3R5cGVbXTsNCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbnVt
ZXJpY1tdOw0KICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jb2xsYXRl
W107DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX3RpbWVbXTsNCiAg
ICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbW9uZXRhcnlbXTsNCiAgICBz
dGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbWVzc2FnZXNbXTsNCiAgICBzdGF0
aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QqIGNvbnN0IF9TX2ZhY2V0X2NhdGVnb3JpZXNbXTsN
Cg0KICAgIGlubGluZSB2b2lkDQogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCkNCiAgICB7
IF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7IH0NCg0KICAgIGlubGluZSB2b2lkDQog
ICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCkNCiAgICB7DQogICAgICBpZiAoX19leGNo
YW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAtMSkgPT0gMSkNCiAgICAgICAgew0KICAgICAg
ICAgIHRyeQ0KICAgICAgICAgICAgeyBkZWxldGUgdGhpczsgfQ0KICAgICAgICAgIGNhdGNoKC4u
LikNCiAgICAgICAgICAgIHsgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgX0ltcGwoY29uc3Qg
X0ltcGwmLCBzaXplX3QpOw0KICAgIF9JbXBsKGNvbnN0IGNoYXIqLCBzaXplX3QpOw0KICAgIF9J
bXBsKGZhY2V0KiosIHNpemVfdCwgYm9vbCk7DQoNCiAgIH5fSW1wbCgpIHRocm93KCk7DQoNCiAg
ICBfSW1wbChjb25zdCBfSW1wbCYpOw0KDQogICAgdm9pZA0KICAgIG9wZXJhdG9yPShjb25zdCBf
SW1wbCYpOw0KDQogICAgaW5saW5lIGJvb2wNCiAgICBfTV9jaGVja19zYW1lX25hbWUoKQ0KICAg
IHsNCiAgICAgIGJvb2wgX19yZXQgPSB0cnVlOw0KICAgICAgZm9yIChzaXplX3QgaSA9IDA7IF9f
cmV0ICYmIGkgPCBfU19udW1fY2F0ZWdvcmllcyAtIDE7ICsraSkNCiAgICAgICAgX19yZXQgJj0g
KHN0cmNtcChfTV9uYW1lc1tpXSwgX01fbmFtZXNbaSArIDFdKSA9PSAwKTsNCiAgICAgIHJldHVy
biBfX3JldDsNCiAgICB9DQoNCiAgICB2b2lkDQogICAgX01fcmVwbGFjZV9jYXRlZ29yaWVzKGNv
bnN0IF9JbXBsKiwgY2F0ZWdvcnkpOw0KDQogICAgdm9pZA0KICAgIF9NX3JlcGxhY2VfY2F0ZWdv
cnkoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCopOw0KDQogICAgdm9pZA0K
ICAgIF9NX3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKik7DQoN
CiAgICB2b2lkDQogICAgX01faW5zdGFsbF9mYWNldChjb25zdCBsb2NhbGU6OmlkKiwgZmFjZXQq
KTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGlubGluZSB2b2lkDQog
ICAgICBfTV9pbml0X2ZhY2V0KF9GYWNldCogX19mYWNldCkNCiAgICAgIHsgX01faW5zdGFsbF9m
YWNldCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0NCiAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRmFjZXQ+DQogICAgbG9jYWxlOjpsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFj
ZXQqIF9fZikNCiAgICB7DQogICAgICBfTV9pbXBsID0gbmV3IF9JbXBsKCpfX290aGVyLl9NX2lt
cGwsIDEpOw0KICAgICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19m
KTsNCiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9TX251bV9jYXRlZ29yaWVzOyAr
K19faSkNCiAgICAgICAgX01faW1wbC0+X01fbmFtZXNbX19pXSA9ICIqIjsNCiAgICB9DQoNCg0K
ICBjbGFzcyBsb2NhbGU6OmZhY2V0DQogIHsNCiAgcHJpdmF0ZToNCiAgICBmcmllbmQgY2xhc3Mg
bG9jYWxlOw0KICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOw0KDQogICAgX0F0b21pY193
b3JkIF9NX3JlZmVyZW5jZXM7DQoNCiAgcHJvdGVjdGVkOg0KDQoNCiAgICBzdGF0aWMgX19jX2xv
Y2FsZSBfU19jX2xvY2FsZTsNCg0KICAgIGV4cGxpY2l0DQogICAgZmFjZXQoc2l6ZV90IF9fcmVm
cyA9IDApIHRocm93KCk7DQoNCiAgICB2aXJ0dWFsDQogICAgfmZhY2V0KCk7DQoNCiAgICBzdGF0
aWMgdm9pZA0KICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0
IGNoYXIqIF9fcywNCiAgICAgICAgICAgICAgICAgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IDAp
Ow0KDQogICAgc3RhdGljIF9fY19sb2NhbGUNCiAgICBfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9j
YWxlJiBfX2Nsb2MpOw0KDQogICAgc3RhdGljIHZvaWQNCiAgICBfU19kZXN0cm95X2NfbG9jYWxl
KF9fY19sb2NhbGUmIF9fY2xvYyk7DQoNCiAgcHJpdmF0ZToNCiAgICB2b2lkDQogICAgX01fYWRk
X3JlZmVyZW5jZSgpIHRocm93KCk7DQoNCiAgICB2b2lkDQogICAgX01fcmVtb3ZlX3JlZmVyZW5j
ZSgpIHRocm93KCk7DQoNCiAgICBmYWNldChjb25zdCBmYWNldCYpOw0KDQogICAgdm9pZA0KICAg
IG9wZXJhdG9yPShjb25zdCBmYWNldCYpOw0KICB9Ow0KDQoNCg0KICBjbGFzcyBsb2NhbGU6Omlk
DQogIHsNCiAgcHJpdmF0ZToNCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOw0KICAgIGZyaWVuZCBj
bGFzcyBsb2NhbGU6Ol9JbXBsOw0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAg
IGZyaWVuZCBjb25zdCBfRmFjZXQmDQogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7DQog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgICAgZnJpZW5kIGJvb2wNCiAgICAgIGhh
c19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdyAoKTsNCg0KDQoNCg0KICAgIG11dGFibGUgc2l6
ZV90IF9NX2luZGV4Ow0KDQoNCiAgICBzdGF0aWMgX0F0b21pY193b3JkIF9TX2hpZ2h3YXRlcjsN
Cg0KICAgIHZvaWQNCiAgICBvcGVyYXRvcj0oY29uc3QgaWQmKTsNCg0KICAgIGlkKGNvbnN0IGlk
Jik7DQoNCiAgcHVibGljOg0KDQoNCiAgICBpZCgpOw0KDQogICAgaW5saW5lIHNpemVfdA0KICAg
IF9NX2lkKCkgY29uc3QNCiAgICB7DQogICAgICBpZiAoIV9NX2luZGV4KQ0KICAgICAgICBfTV9p
bmRleCA9IDEgKyBfX2V4Y2hhbmdlX2FuZF9hZGQoJl9TX2hpZ2h3YXRlciwgMSk7DQogICAgICBy
ZXR1cm4gX01faW5kZXggLSAxOw0KICAgIH0NCiAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
RmFjZXQ+DQogICAgY29uc3QgX0ZhY2V0Jg0KICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmIF9f
bG9jKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAgYm9vbA0KICAgIGhhc19m
YWNldChjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpOw0KfQ0KIyA0OSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvaW9zIiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9pb3NfYmFz
ZS5oIiAxIDMNCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvaW9zX2Jhc2UuaCIgMw0K
DQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KDQogIGVudW0gX0lvc19GbXRmbGFncyB7IF9N
X2lvc19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9Ow0KDQogIGlubGluZSBfSW9zX0ZtdGZsYWdz
DQogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpDQogIHsg
cmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8
aW50PihfX2IpKTsgfQ0KDQogIGlubGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJhdG9yfChfSW9z
X0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpDQogIHsgcmV0dXJuIF9Jb3NfRm10Zmxh
Z3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQog
IGlubGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lv
c19GbXRmbGFncyBfX2IpDQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50
PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQogIGlubGluZSBfSW9zX0ZtdGZs
YWdzDQogIG9wZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikN
CiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MN
CiAgb3BlcmF0b3ImPShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQ0KICB7
IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0NCg0KICBpbmxpbmUgX0lvc19GbXRmbGFncw0KICBv
cGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpDQogIHsgcmV0
dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQ0KDQogIGlubGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJh
dG9yfihfSW9zX0ZtdGZsYWdzIF9fYSkNCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyh+c3RhdGlj
X2Nhc3Q8aW50PihfX2EpKTsgfQ0KDQoNCiAgZW51bSBfSW9zX09wZW5tb2RlIHsgX01faW9zX29w
ZW5tb2RlX2VuZCA9IDFMIDw8IDE2IH07DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3Bl
cmF0b3ImKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyByZXR1cm4g
X0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9f
YikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0b3J8KF9Jb3NfT3Blbm1v
ZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0
aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9DQoNCiAgaW5saW5l
IF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0b3JeKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5t
b2RlIF9fYikNCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkg
XiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAg
b3BlcmF0b3J8PShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQ0KICB7IHJl
dHVybiBfX2EgPSBfX2EgfCBfX2I7IH0NCg0KICBpbmxpbmUgX0lvc19PcGVubW9kZQ0KICBvcGVy
YXRvciY9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpDQogIHsgcmV0dXJu
IF9fYSA9IF9fYSAmIF9fYjsgfQ0KDQogIGlubGluZSBfSW9zX09wZW5tb2RlDQogIG9wZXJhdG9y
Xj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyByZXR1cm4gX19h
ID0gX19hIF4gX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0b3J+KF9J
b3NfT3Blbm1vZGUgX19hKQ0KICB7IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxp
bnQ+KF9fYSkpOyB9DQoNCg0KICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRlX2Vu
ZCA9IDFMIDw8IDE2IH07DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBvcGVyYXRvciYoX0lv
c19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikNCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRl
KHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0NCg0KICBp
bmxpbmUgX0lvc19Jb3N0YXRlDQogIG9wZXJhdG9yfChfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lv
c3RhdGUgX19iKQ0KICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2Ep
IHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQogIGlubGluZSBfSW9zX0lvc3RhdGUNCiAg
b3BlcmF0b3JeKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpDQogIHsgcmV0dXJu
IF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9f
YikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBvcGVyYXRvcnw9KF9Jb3NfSW9zdGF0
ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQ0KICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0N
Cg0KICBpbmxpbmUgX0lvc19Jb3N0YXRlDQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBfX2Es
IF9Jb3NfSW9zdGF0ZSBfX2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQ0KDQogIGlu
bGluZSBfSW9zX0lvc3RhdGUNCiAgb3BlcmF0b3JePShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19J
b3N0YXRlIF9fYikNCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9DQoNCiAgaW5saW5lIF9J
b3NfSW9zdGF0ZQ0KICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkNCiAgeyByZXR1cm4gX0lv
c19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9DQoNCiAgZW51bSBfSW9zX1NlZWtk
aXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxTCA8PCAxNiB9Ow0KDQoNCiAgY2xhc3MgaW9zX2Jh
c2UNCiAgew0KICBwdWJsaWM6DQoNCg0KICAgIGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMgZXhjZXB0
aW9uDQogICAgew0KICAgIHB1YmxpYzoNCg0KDQogICAgICBleHBsaWNpdA0KICAgICAgZmFpbHVy
ZShjb25zdCBzdHJpbmcmIF9fc3RyKSB0aHJvdygpOw0KDQoNCg0KICAgICAgdmlydHVhbA0KICAg
ICAgfmZhaWx1cmUoKSB0aHJvdygpOw0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqDQogICAg
ICB3aGF0KCkgY29uc3QgdGhyb3coKTsNCg0KICAgIHByaXZhdGU6DQogICAgICBlbnVtIHsgX01f
YnVmc2l6ZSA9IDI1NiB9Ow0KICAgICAgY2hhciBfTV9uYW1lW19NX2J1ZnNpemVdOw0KDQogICAg
fTsNCg0KDQogICAgdHlwZWRlZiBfSW9zX0ZtdGZsYWdzIGZtdGZsYWdzOw0KDQogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIGJvb2xhbHBoYSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19ib29s
YWxwaGEpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBkZWMgPSBmbXRmbGFncyhfX2lvc19m
bGFnczo6X1NfZGVjKTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZml4ZWQgPSBmbXRmbGFn
cyhfX2lvc19mbGFnczo6X1NfZml4ZWQpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBoZXgg
PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaGV4KTsNCiAgICBzdGF0aWMgY29uc3QgZm10Zmxh
Z3MgaW50ZXJuYWwgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaW50ZXJuYWwpOw0KICAgIHN0
YXRpYyBjb25zdCBmbXRmbGFncyBsZWZ0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2xlZnQp
Ow0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBvY3QgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6
X1Nfb2N0KTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgcmlnaHQgPSBmbXRmbGFncyhfX2lv
c19mbGFnczo6X1NfcmlnaHQpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzY2llbnRpZmlj
ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NjaWVudGlmaWMpOw0KICAgIHN0YXRpYyBjb25z
dCBmbXRmbGFncyBzaG93YmFzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93YmFzZSk7
DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb2ludCA9IGZtdGZsYWdzKF9faW9zX2Zs
YWdzOjpfU19zaG93cG9pbnQpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9zID0g
Zm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb3MpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRm
bGFncyBza2lwd3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2tpcHdzKTsNCiAgICBzdGF0
aWMgY29uc3QgZm10ZmxhZ3MgdW5pdGJ1ZiA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191bml0
YnVmKTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdXBwZXJjYXNlID0gZm10ZmxhZ3MoX19p
b3NfZmxhZ3M6Ol9TX3VwcGVyY2FzZSk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGFkanVz
dGZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2FkanVzdGZpZWxkKTsNCiAgICBzdGF0
aWMgY29uc3QgZm10ZmxhZ3MgYmFzZWZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jh
c2VmaWVsZCk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZsb2F0ZmllbGQgPSBmbXRmbGFn
cyhfX2lvc19mbGFnczo6X1NfZmxvYXRmaWVsZCk7DQoNCg0KICAgIHR5cGVkZWYgX0lvc19Jb3N0
YXRlIGlvc3RhdGU7DQogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgYmFkYml0ID0gaW9zdGF0ZShf
X2lvc19mbGFnczo6X1NfYmFkYml0KTsNCiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBlb2ZiaXQg
PSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19lb2ZiaXQpOw0KICAgIHN0YXRpYyBjb25zdCBpb3N0
YXRlIGZhaWxiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19mYWlsYml0KTsNCiAgICBzdGF0
aWMgY29uc3QgaW9zdGF0ZSBnb29kYml0ID0gaW9zdGF0ZSgwKTsNCg0KDQogICAgdHlwZWRlZiBf
SW9zX09wZW5tb2RlIG9wZW5tb2RlOw0KICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhcHAgPSBv
cGVubW9kZShfX2lvc19mbGFnczo6X1NfYXBwKTsNCiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUg
YXRlID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2F0ZSk7DQogICAgc3RhdGljIGNvbnN0IG9w
ZW5tb2RlIGJpbmFyeSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19iaW4pOw0KICAgIHN0YXRp
YyBjb25zdCBvcGVubW9kZSBpbiA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19pbik7DQogICAg
c3RhdGljIGNvbnN0IG9wZW5tb2RlIG91dCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19vdXQp
Ow0KICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSB0cnVuYyA9IG9wZW5tb2RlKF9faW9zX2ZsYWdz
OjpfU190cnVuYyk7DQoNCg0KICAgIHR5cGVkZWYgX0lvc19TZWVrZGlyIHNlZWtkaXI7DQogICAg
c3RhdGljIGNvbnN0IHNlZWtkaXIgYmVnID0gc2Vla2RpcigwKTsNCiAgICBzdGF0aWMgY29uc3Qg
c2Vla2RpciBjdXIgPSBzZWVrZGlyKDEpOw0KICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGVuZCA9
IHNlZWtkaXIoMik7DQojIDIyNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9pb3NfYmFzZS5o
IiAzDQogICAgZW51bSBldmVudA0KICAgIHsNCiAgICAgIGVyYXNlX2V2ZW50LA0KICAgICAgaW1i
dWVfZXZlbnQsDQogICAgICBjb3B5Zm10X2V2ZW50DQogICAgfTsNCg0KICAgIHR5cGVkZWYgdm9p
ZCAoKmV2ZW50X2NhbGxiYWNrKSAoZXZlbnQsIGlvc19iYXNlJiwgaW50KTsNCg0KICAgIHZvaWQN
CiAgICByZWdpc3Rlcl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRleCk7
DQoNCiAgcHJvdGVjdGVkOg0KDQogICAgc3RyZWFtc2l6ZSBfTV9wcmVjaXNpb247DQogICAgc3Ry
ZWFtc2l6ZSBfTV93aWR0aDsNCiAgICBmbXRmbGFncyBfTV9mbGFnczsNCiAgICBpb3N0YXRlIF9N
X2V4Y2VwdGlvbjsNCiAgICBpb3N0YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsNCg0KDQoNCiAgICBz
dHJ1Y3QgX0NhbGxiYWNrX2xpc3QNCiAgICB7DQoNCiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9u
ZXh0Ow0KICAgICAgaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9NX2ZuOw0KICAgICAgaW50IF9N
X2luZGV4Ow0KICAgICAgX0F0b21pY193b3JkIF9NX3JlZmNvdW50Ow0KDQogICAgICBfQ2FsbGJh
Y2tfbGlzdChpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgsDQogICAg
ICAgICAgICAgICAgICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYikNCiAgICAgIDogX01fbmV4dChf
X2NiKSwgX01fZm4oX19mbiksIF9NX2luZGV4KF9faW5kZXgpLCBfTV9yZWZjb3VudCgwKSB7IH0N
Cg0KICAgICAgdm9pZA0KICAgICAgX01fYWRkX3JlZmVyZW5jZSgpIHsgX19hdG9taWNfYWRkKCZf
TV9yZWZjb3VudCwgMSk7IH0NCg0KDQogICAgICBpbnQNCiAgICAgIF9NX3JlbW92ZV9yZWZlcmVu
Y2UoKSB7IHJldHVybiBfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmNvdW50LCAtMSk7IH0NCiAg
ICB9Ow0KDQogICAgIF9DYWxsYmFja19saXN0KiBfTV9jYWxsYmFja3M7DQoNCiAgICB2b2lkDQog
ICAgX01fY2FsbF9jYWxsYmFja3MoZXZlbnQgX19ldikgdGhyb3coKTsNCg0KICAgIHZvaWQNCiAg
ICBfTV9kaXNwb3NlX2NhbGxiYWNrcyh2b2lkKTsNCg0KDQogICAgc3RydWN0IF9Xb3Jkcw0KICAg
IHsNCiAgICAgIHZvaWQqIF9NX3B3b3JkOw0KICAgICAgbG9uZyBfTV9pd29yZDsNCiAgICAgIF9X
b3JkcygpIDogX01fcHdvcmQoMCksIF9NX2l3b3JkKDApIHsgfQ0KICAgIH07DQoNCg0KICAgIF9X
b3JkcyBfTV93b3JkX3plcm87DQoNCg0KICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29y
ZF9zaXplID0gODsNCiAgICBfV29yZHMgX01fbG9jYWxfd29yZFtfU19sb2NhbF93b3JkX3NpemVd
Ow0KDQoNCiAgICBpbnQgX01fd29yZF9zaXplOw0KICAgIF9Xb3JkcyogX01fd29yZDsNCg0KICAg
IF9Xb3JkcyYNCiAgICBfTV9ncm93X3dvcmRzKGludCBfX2luZGV4KTsNCg0KDQogICAgbG9jYWxl
IF9NX2lvc19sb2NhbGU7DQoNCiAgICB2b2lkDQogICAgX01faW5pdCgpOw0KDQogIHB1YmxpYzoN
Cg0KDQoNCg0KDQogICAgY2xhc3MgSW5pdA0KICAgIHsNCiAgICAgIGZyaWVuZCBjbGFzcyBpb3Nf
YmFzZTsNCiAgICBwdWJsaWM6DQogICAgICBJbml0KCk7DQogICAgICB+SW5pdCgpOw0KDQogICAg
ICBzdGF0aWMgdm9pZA0KICAgICAgX1NfaW9zX2NyZWF0ZShib29sIF9fc3luYyk7DQoNCiAgICAg
IHN0YXRpYyB2b2lkDQogICAgICBfU19pb3NfZGVzdHJveSgpOw0KDQogICAgcHJpdmF0ZToNCiAg
ICAgIHN0YXRpYyBpbnQgX1NfaW9zX2Jhc2VfaW5pdDsNCiAgICAgIHN0YXRpYyBib29sIF9TX3N5
bmNlZF93aXRoX3N0ZGlvOw0KICAgIH07DQoNCg0KICAgIGlubGluZSBmbXRmbGFncw0KICAgIGZs
YWdzKCkgY29uc3QgeyByZXR1cm4gX01fZmxhZ3M7IH0NCg0KICAgIGlubGluZSBmbXRmbGFncw0K
ICAgIGZsYWdzKGZtdGZsYWdzIF9fZm10ZmwpDQogICAgew0KICAgICAgZm10ZmxhZ3MgX19vbGQg
PSBfTV9mbGFnczsNCiAgICAgIF9NX2ZsYWdzID0gX19mbXRmbDsNCiAgICAgIHJldHVybiBfX29s
ZDsNCiAgICB9DQoNCiAgICBpbmxpbmUgZm10ZmxhZ3MNCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10
ZmwpDQogICAgew0KICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsNCiAgICAgIF9NX2Zs
YWdzIHw9IF9fZm10Zmw7DQogICAgICByZXR1cm4gX19vbGQ7DQogICAgfQ0KDQogICAgaW5saW5l
IGZtdGZsYWdzDQogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsLCBmbXRmbGFncyBfX21hc2spDQog
ICAgew0KICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsNCiAgICAgIF9NX2ZsYWdzICY9
IH5fX21hc2s7DQogICAgICBfTV9mbGFncyB8PSAoX19mbXRmbCAmIF9fbWFzayk7DQogICAgICBy
ZXR1cm4gX19vbGQ7DQogICAgfQ0KDQogICAgaW5saW5lIHZvaWQNCiAgICB1bnNldGYoZm10Zmxh
Z3MgX19tYXNrKSB7IF9NX2ZsYWdzICY9IH5fX21hc2s7IH0NCg0KICAgIGlubGluZSBzdHJlYW1z
aXplDQogICAgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9DQoNCiAg
ICBpbmxpbmUgc3RyZWFtc2l6ZQ0KICAgIHByZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykNCiAg
ICB7DQogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fcHJlY2lzaW9uOw0KICAgICAgX01fcHJl
Y2lzaW9uID0gX19wcmVjOw0KICAgICAgcmV0dXJuIF9fb2xkOw0KICAgIH0NCg0KICAgIGlubGlu
ZSBzdHJlYW1zaXplDQogICAgd2lkdGgoKSBjb25zdCB7IHJldHVybiBfTV93aWR0aDsgfQ0KDQog
ICAgaW5saW5lIHN0cmVhbXNpemUNCiAgICB3aWR0aChzdHJlYW1zaXplIF9fd2lkZSkNCiAgICB7
DQogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fd2lkdGg7DQogICAgICBfTV93aWR0aCA9IF9f
d2lkZTsNCiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9DQoNCiAgICBzdGF0aWMgYm9vbA0KICAg
IHN5bmNfd2l0aF9zdGRpbyhib29sIF9fc3luYyA9IHRydWUpOw0KDQoNCiAgICBsb2NhbGUNCiAg
ICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsNCg0KICAgIGlubGluZSBsb2NhbGUNCiAgICBn
ZXRsb2MoKSBjb25zdCB7IHJldHVybiBfTV9pb3NfbG9jYWxlOyB9DQoNCg0KICAgIHN0YXRpYyBp
bnQNCiAgICB4YWxsb2MoKSB0aHJvdygpOw0KDQogICAgaW5saW5lIGxvbmcmDQogICAgaXdvcmQo
aW50IF9faXgpDQogICAgew0KICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRf
c2l6ZSkNCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZFtfX2l4XSA6IF9NX2dyb3df
d29yZHMoX19peCk7DQogICAgICByZXR1cm4gX193b3JkLl9NX2l3b3JkOw0KICAgIH0NCg0KICAg
IGlubGluZSB2b2lkKiYNCiAgICBwd29yZChpbnQgX19peCkNCiAgICB7DQogICAgICBfV29yZHMm
IF9fd29yZCA9IChfX2l4IDwgX01fd29yZF9zaXplKQ0KICAgICAgICAgICAgICAgICAgICAgICAg
PyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsNCiAgICAgIHJldHVybiBfX3dv
cmQuX01fcHdvcmQ7DQogICAgfQ0KDQoNCiAgICB+aW9zX2Jhc2UoKTsNCg0KICBwcm90ZWN0ZWQ6
DQogICAgaW9zX2Jhc2UoKTsNCg0KDQoNCiAgcHJpdmF0ZToNCiAgICBpb3NfYmFzZShjb25zdCBp
b3NfYmFzZSYpOw0KDQogICAgaW9zX2Jhc2UmDQogICAgb3BlcmF0b3I9KGNvbnN0IGlvc19iYXNl
Jik7DQoNCiAgfTsNCg0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgYm9vbGFscGhhKGlvc19iYXNl
JiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsNCiAg
ICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBub2Jvb2xhbHBo
YShpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9v
bGFscGhhKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0K
ICBzaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19iYXNlLnNldGYoaW9zX2Jh
c2U6OnNob3diYXNlKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19i
YXNlJg0KICBub3Nob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5z
ZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlu
bGluZSBpb3NfYmFzZSYNCiAgc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBf
X2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9
DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBub3Nob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQ0K
ICB7DQogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsNCiAgICByZXR1cm4g
X19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBzaG93cG9zKGlvc19iYXNlJiBf
X2Jhc2UpDQogIHsNCiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7DQogICAgcmV0
dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgbm9zaG93cG9zKGlvc19i
YXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsN
CiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBza2lwd3Mo
aW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpza2lwd3Mp
Ow0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIG5vc2tp
cHdzKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpz
a2lwd3MpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQog
IHVwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19iYXNlLnNldGYoaW9zX2Jh
c2U6OnVwcGVyY2FzZSk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3Nf
YmFzZSYNCiAgbm91cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS51
bnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQog
IGlubGluZSBpb3NfYmFzZSYNCiAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAg
IF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsNCiAgICAgcmV0dXJuIF9fYmFzZTsNCiAg
fQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgbm91bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpDQog
IHsNCiAgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7DQogICAgIHJldHVybiBf
X2Jhc2U7DQogIH0NCg0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgaW50ZXJuYWwoaW9zX2Jhc2Um
IF9fYmFzZSkNCiAgew0KICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aW50ZXJuYWwsIGlvc19i
YXNlOjphZGp1c3RmaWVsZCk7DQogICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUg
aW9zX2Jhc2UmDQogIGxlZnQoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5zZXRm
KGlvc19iYXNlOjpsZWZ0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOw0KICAgIHJldHVybiBfX2Jh
c2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIHJpZ2h0KGlvc19iYXNlJiBfX2Jhc2Up
DQogIHsNCiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6cmlnaHQsIGlvc19iYXNlOjphZGp1c3Rm
aWVsZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQoNCiAgaW5saW5lIGlvc19iYXNlJg0K
ICBkZWMoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpk
ZWMsIGlvc19iYXNlOjpiYXNlZmllbGQpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBp
bmxpbmUgaW9zX2Jhc2UmDQogIGhleChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19iYXNl
LnNldGYoaW9zX2Jhc2U6OmhleCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7DQogICAgcmV0dXJuIF9f
YmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgb2N0KGlvc19iYXNlJiBfX2Jhc2Up
DQogIHsNCiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6b2N0LCBpb3NfYmFzZTo6YmFzZWZpZWxk
KTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIGZp
eGVkKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Zml4
ZWQsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAg
aW5saW5lIGlvc19iYXNlJg0KICBzY2llbnRpZmljKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAg
ICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2NpZW50aWZpYywgaW9zX2Jhc2U6OmZsb2F0ZmllbGQp
Ow0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KfQ0KIyA1MCAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvaW9zIiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAxIDMNCiMg
NDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMw0KDQoNCg0KDQoNCg0KDQpuYW1l
c3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4NCiAgICBzdHJlYW1zaXplDQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFy
VCwgX1RyYWl0cz4mIF9pb3MsDQogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwNCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCk7DQoNCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVm
DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0K
ICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1l
IHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
dHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYgY3R5cGU8
Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjxj
aGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiB0
eXBlbmFtZSB0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZSBfX3N0YXRlX3R5cGU7DQoNCiAgICAgIGZy
aWVuZCBjbGFzcyBiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47DQogICAgICBmcmll
bmQgY2xhc3MgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsNCiAgICAgIGZy
aWVuZCBjbGFzcyBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+Ow0KICAgICAg
ZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47
DQogICAgICBmcmllbmQgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0
c190eXBlPjsNCg0KICAgICAgZnJpZW5kIHN0cmVhbXNpemUNCiAgICAgIF9fY29weV9zdHJlYW1i
dWZzPD4oYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+JiBfX2lvcywNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYmluLF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2JvdXQpOw0KDQogICAgcHJvdGVjdGVkOg0KDQoNCg0KDQoNCiAgICAgIGNoYXJfdHlw
ZSogX01fYnVmOw0KDQoNCiAgICAgIHNpemVfdCBfTV9idWZfc2l6ZTsNCg0KDQogICAgICBzaXpl
X3QgX01fYnVmX3NpemVfb3B0Ow0KDQoNCg0KICAgICAgYm9vbCBfTV9idWZfdW5pZmllZDsNCg0K
DQoNCg0KDQoNCiAgICAgIGNoYXJfdHlwZSogX01faW5fYmVnOw0KICAgICAgY2hhcl90eXBlKiBf
TV9pbl9jdXI7DQogICAgICBjaGFyX3R5cGUqIF9NX2luX2VuZDsNCiAgICAgIGNoYXJfdHlwZSog
X01fb3V0X2JlZzsNCiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2N1cjsNCiAgICAgIGNoYXJfdHlw
ZSogX01fb3V0X2VuZDsNCg0KDQogICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX01fbW9kZTsNCg0K
DQogICAgICBsb2NhbGUgX01fYnVmX2xvY2FsZTsNCg0KDQogICAgICBib29sIF9NX2J1Zl9sb2Nh
bGVfaW5pdDsNCg0KDQoNCg0KDQoNCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfcGJhY2tf
c2l6ZSA9IDE7DQogICAgICBjaGFyX3R5cGUgX01fcGJhY2tbX1NfcGJhY2tfc2l6ZV07DQogICAg
ICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOw0KICAgICAgY2hhcl90eXBlKiBfTV9wYmFj
a19lbmRfc2F2ZTsNCiAgICAgIGJvb2wgX01fcGJhY2tfaW5pdDsNCg0KDQogICAgICBmcG9zPF9f
c3RhdGVfdHlwZT4gX01fcG9zOw0KDQoNCg0KDQogICAgICB2b2lkDQogICAgICBfTV9wYmFja19j
cmVhdGUoKQ0KICAgICAgew0KICAgICAgICBpZiAoIV9NX3BiYWNrX2luaXQpDQogICAgICAgICAg
ew0KICAgICAgICAgICAgc2l6ZV90IF9fZGlzdCA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsNCiAg
ICAgICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihfU19wYmFja19zaXplLCBfX2Rpc3QpOw0KICAg
ICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJhY2ssIF9NX2luX2N1ciwgX19sZW4pOw0K
ICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfTV9pbl9jdXI7DQogICAgICAgICAgICBf
TV9wYmFja19lbmRfc2F2ZSA9IF9NX2luX2VuZDsNCiAgICAgICAgICAgIHRoaXMtPnNldGcoX01f
cGJhY2ssIF9NX3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsNCiAgICAgICAgICAgIF9NX3BiYWNr
X2luaXQgPSB0cnVlOw0KICAgICAgICAgIH0NCiAgICAgIH0NCg0KDQoNCg0KICAgICAgdm9pZA0K
ICAgICAgX01fcGJhY2tfZGVzdHJveSgpDQogICAgICB7DQogICAgICAgIGlmIChfTV9wYmFja19p
bml0KQ0KICAgICAgICAgIHsNCg0KICAgICAgICAgICAgc2l6ZV90IF9fb2ZmX2N1ciA9IF9NX2lu
X2N1ciAtIF9NX3BiYWNrOw0KDQoNCiAgICAgICAgICAgIHNpemVfdCBfX29mZl9lbmQgPSAwOw0K
ICAgICAgICAgICAgc2l6ZV90IF9fcGJhY2tfbGVuID0gX01faW5fZW5kIC0gX01fcGJhY2s7DQog
ICAgICAgICAgICBzaXplX3QgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fYnVm
Ow0KICAgICAgICAgICAgaWYgKF9fcGJhY2tfbGVuID4gX19zYXZlX2xlbikNCiAgICAgICAgICAg
ICAgX19vZmZfZW5kID0gX19wYmFja19sZW4gLSBfX3NhdmVfbGVuOw0KDQogICAgICAgICAgICB0
aGlzLT5zZXRnKF9NX2J1ZiwgX01fcGJhY2tfY3VyX3NhdmUgKyBfX29mZl9jdXIsDQogICAgICAg
ICAgICAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlICsgX19vZmZfZW5kKTsNCiAgICAgICAg
ICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX19udWxsOw0KICAgICAgICAgICAgX01fcGJhY2tfZW5k
X3NhdmUgPSBfX251bGw7DQogICAgICAgICAgICBfTV9wYmFja19pbml0ID0gZmFsc2U7DQogICAg
ICAgICAgfQ0KICAgICAgfQ0KDQoNCg0KICAgICAgdm9pZA0KICAgICAgX01faW5fY3VyX21vdmUo
b2ZmX3R5cGUgX19uKQ0KICAgICAgew0KICAgICAgICBib29sIF9fdGVzdG91dCA9IF9NX291dF9j
dXI7DQogICAgICAgIF9NX2luX2N1ciArPSBfX247DQogICAgICAgIGlmIChfX3Rlc3RvdXQgJiYg
X01fYnVmX3VuaWZpZWQpDQogICAgICAgICAgX01fb3V0X2N1ciArPSBfX247DQogICAgICB9DQoj
IDIwMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAzDQogICAgICB2b2lkDQogICAg
ICBfTV9vdXRfY3VyX21vdmUob2ZmX3R5cGUgX19uKQ0KICAgICAgew0KICAgICAgICBib29sIF9f
dGVzdGluID0gX01faW5fY3VyOw0KDQogICAgICAgIF9NX291dF9jdXIgKz0gX19uOw0KICAgICAg
ICBpZiAoX190ZXN0aW4gJiYgX01fYnVmX3VuaWZpZWQpDQogICAgICAgICAgX01faW5fY3VyICs9
IF9fbjsNCiAgICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9vdXRfZW5kKQ0KICAgICAgICAgIHsN
CiAgICAgICAgICAgIF9NX291dF9lbmQgPSBfTV9vdXRfY3VyOw0KDQogICAgICAgICAgICBpZiAo
X190ZXN0aW4pDQogICAgICAgICAgICAgIF9NX2luX2VuZCArPSBfX247DQogICAgICAgICAgfQ0K
ICAgICAgfQ0KDQoNCg0KDQogICAgICBvZmZfdHlwZQ0KICAgICAgX01fb3V0X2J1Zl9zaXplKCkN
CiAgICAgIHsNCiAgICAgICAgb2ZmX3R5cGUgX19yZXQgPSAwOw0KICAgICAgICBpZiAoX01fb3V0
X2N1cikNCiAgICAgICAgICB7DQoNCiAgICAgICAgICAgIGlmIChfTV9vdXRfYmVnID09IF9NX2J1
ZikNCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnICsgX01fYnVmX3NpemUgLSBfTV9v
dXRfY3VyOw0KDQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0
X2VuZCAtIF9NX291dF9jdXI7DQogICAgICAgICAgfQ0KICAgICAgICByZXR1cm4gX19yZXQ7DQog
ICAgICB9DQoNCiAgcHVibGljOg0KICAgICAgdmlydHVhbA0KICAgICAgfmJhc2ljX3N0cmVhbWJ1
ZigpDQogICAgICB7DQogICAgICAgIF9NX2J1Zl91bmlmaWVkID0gZmFsc2U7DQogICAgICAgIF9N
X2J1Zl9zaXplID0gMDsNCiAgICAgICAgX01fYnVmX3NpemVfb3B0ID0gMDsNCiAgICAgICAgX01f
bW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsNCiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0
ID0gZmFsc2U7DQogICAgICB9DQoNCg0KICAgICAgbG9jYWxlDQogICAgICBwdWJpbWJ1ZShjb25z
dCBsb2NhbGUgJl9fbG9jKQ0KICAgICAgew0KICAgICAgICBsb2NhbGUgX190bXAodGhpcy0+Z2V0
bG9jKCkpOw0KICAgICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7DQogICAgICAgIHJldHVybiBfX3Rt
cDsNCiAgICAgIH0NCg0KICAgICAgbG9jYWxlDQogICAgICBnZXRsb2MoKSBjb25zdA0KICAgICAg
ew0KICAgICAgICBpZiAoX01fYnVmX2xvY2FsZV9pbml0KQ0KICAgICAgICAgIHJldHVybiBfTV9i
dWZfbG9jYWxlOw0KICAgICAgICBlbHNlDQogICAgICAgICAgcmV0dXJuIGxvY2FsZSgpOw0KICAg
ICAgfQ0KDQoNCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqDQogICAgICBwdWJzZXRidWYoY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+c2V0YnVmKF9f
cywgX19uKTsgfQ0KDQogICAgICBwb3NfdHlwZQ0KICAgICAgcHVic2Vla29mZihvZmZfdHlwZSBf
X29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksDQogICAgICAgICAgICAgICAgIGlvc19iYXNl
OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAg
eyByZXR1cm4gdGhpcy0+c2Vla29mZihfX29mZiwgX193YXksIF9fbW9kZSk7IH0NCg0KICAgICAg
cG9zX3R5cGUNCiAgICAgIHB1YnNlZWtwb3MocG9zX3R5cGUgX19zcCwNCiAgICAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpv
dXQpDQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0NCg0KICAg
ICAgaW50DQogICAgICBwdWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9DQoNCg0KDQog
ICAgICBzdHJlYW1zaXplDQogICAgICBpbl9hdmFpbCgpDQogICAgICB7DQogICAgICAgIHN0cmVh
bXNpemUgX19yZXQ7DQogICAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5f
ZW5kKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIGlmIChfTV9wYmFja19pbml0KQ0KICAgICAg
ICAgICAgICB7DQogICAgICAgICAgICAgICAgc2l6ZV90IF9fc2F2ZV9sZW4gPSBfTV9wYmFja19l
bmRfc2F2ZSAtIF9NX3BiYWNrX2N1cl9zYXZlOw0KICAgICAgICAgICAgICAgIHNpemVfdCBfX3Bi
YWNrX2xlbiA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOw0KICAgICAgICAgICAgICAgIF9fcmV0ID0g
X19zYXZlX2xlbiAtIF9fcGJhY2tfbGVuOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICBl
bHNlDQogICAgICAgICAgICAgIF9fcmV0ID0gdGhpcy0+ZWdwdHIoKSAtIHRoaXMtPmdwdHIoKTsN
CiAgICAgICAgICB9DQogICAgICAgIGVsc2UNCiAgICAgICAgICBfX3JldCA9IHRoaXMtPnNob3dt
YW55YygpOw0KICAgICAgICByZXR1cm4gX19yZXQ7DQogICAgICB9DQoNCiAgICAgIGludF90eXBl
DQogICAgICBzbmV4dGMoKQ0KICAgICAgew0KICAgICAgICBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0
c190eXBlOjplb2YoKTsNCiAgICAgICAgcmV0dXJuICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo
dGhpcy0+c2J1bXBjKCksIF9fZW9mKQ0KICAgICAgICAgICAgICAgID8gX19lb2YgOiB0aGlzLT5z
Z2V0YygpKTsNCiAgICAgIH0NCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHNidW1wYygpOw0KDQog
ICAgICBpbnRfdHlwZQ0KICAgICAgc2dldGMoKQ0KICAgICAgew0KICAgICAgICBpbnRfdHlwZSBf
X3JldDsNCiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpDQog
ICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkp
KTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIF9fcmV0ID0gdGhpcy0+dW5kZXJmbG93KCk7DQog
ICAgICAgIHJldHVybiBfX3JldDsNCiAgICAgIH0NCg0KICAgICAgc3RyZWFtc2l6ZQ0KICAgICAg
c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhp
cy0+eHNnZXRuKF9fcywgX19uKTsgfQ0KDQoNCiAgICAgIGludF90eXBlDQogICAgICBzcHV0YmFj
a2MoY2hhcl90eXBlIF9fYyk7DQoNCiAgICAgIGludF90eXBlDQogICAgICBzdW5nZXRjKCk7DQoN
Cg0KICAgICAgaW50X3R5cGUNCiAgICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpOw0KDQogICAgICBz
dHJlYW1zaXplDQogICAgICBzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
X24pDQogICAgICB7IHJldHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9DQoNCiAgICBwcm90
ZWN0ZWQ6DQogICAgICBiYXNpY19zdHJlYW1idWYoKQ0KICAgICAgOiBfTV9idWYoX19udWxsKSwg
X01fYnVmX3NpemUoMCksIF9NX2J1Zl9zaXplX29wdCgxMDI0KSwNCiAgICAgIF9NX2J1Zl91bmlm
aWVkKGZhbHNlKSwgX01faW5fYmVnKDApLCBfTV9pbl9jdXIoMCksIF9NX2luX2VuZCgwKSwNCiAg
ICAgIF9NX291dF9iZWcoMCksIF9NX291dF9jdXIoMCksIF9NX291dF9lbmQoMCksDQogICAgICBf
TV9tb2RlKGlvc19iYXNlOjpvcGVubW9kZSgwKSksIF9NX2J1Zl9sb2NhbGUobG9jYWxlKCkpLA0K
ICAgICAgX01fYnVmX2xvY2FsZV9pbml0KGZhbHNlKSwgX01fcGJhY2tfY3VyX3NhdmUoMCksIF9N
X3BiYWNrX2VuZF9zYXZlKDApLA0KICAgICAgX01fcGJhY2tfaW5pdChmYWxzZSkNCiAgICAgIHsg
fQ0KDQoNCiAgICAgIGNoYXJfdHlwZSoNCiAgICAgIGViYWNrKCkgY29uc3QgeyByZXR1cm4gX01f
aW5fYmVnOyB9DQoNCiAgICAgIGNoYXJfdHlwZSoNCiAgICAgIGdwdHIoKSBjb25zdCB7IHJldHVy
biBfTV9pbl9jdXI7IH0NCg0KICAgICAgY2hhcl90eXBlKg0KICAgICAgZWdwdHIoKSBjb25zdCB7
IHJldHVybiBfTV9pbl9lbmQ7IH0NCg0KICAgICAgdm9pZA0KICAgICAgZ2J1bXAoaW50IF9fbikg
eyBfTV9pbl9jdXIgKz0gX19uOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHNldGcoY2hhcl90eXBl
KiBfX2diZWcsIGNoYXJfdHlwZSogX19nbmV4dCwgY2hhcl90eXBlKiBfX2dlbmQpDQogICAgICB7
DQogICAgICAgIF9NX2luX2JlZyA9IF9fZ2JlZzsNCiAgICAgICAgX01faW5fY3VyID0gX19nbmV4
dDsNCiAgICAgICAgX01faW5fZW5kID0gX19nZW5kOw0KICAgICAgICBpZiAoIShfTV9tb2RlICYg
aW9zX2Jhc2U6OmluKSAmJiBfX2diZWcgJiYgX19nbmV4dCAmJiBfX2dlbmQpDQogICAgICAgICAg
X01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6aW47DQogICAgICB9DQoNCg0KICAgICAgY2hh
cl90eXBlKg0KICAgICAgcGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfYmVnOyB9DQoNCiAg
ICAgIGNoYXJfdHlwZSoNCiAgICAgIHBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfY3VyOyB9
DQoNCiAgICAgIGNoYXJfdHlwZSoNCiAgICAgIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0
X2VuZDsgfQ0KDQogICAgICB2b2lkDQogICAgICBwYnVtcChpbnQgX19uKSB7IF9NX291dF9jdXIg
Kz0gX19uOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHNldHAoY2hhcl90eXBlKiBfX3BiZWcsIGNo
YXJfdHlwZSogX19wZW5kKQ0KICAgICAgew0KICAgICAgICBfTV9vdXRfYmVnID0gX01fb3V0X2N1
ciA9IF9fcGJlZzsNCiAgICAgICAgX01fb3V0X2VuZCA9IF9fcGVuZDsNCiAgICAgICAgaWYgKCEo
X01fbW9kZSAmIGlvc19iYXNlOjpvdXQpICYmIF9fcGJlZyAmJiBfX3BlbmQpDQogICAgICAgICAg
X01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6b3V0Ow0KICAgICAgfQ0KDQoNCg0KICAgICAg
dmlydHVhbCB2b2lkDQogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgICAgew0K
ICAgICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSB0cnVlOw0KICAgICAgICBpZiAoX01fYnVmX2xv
Y2FsZSAhPSBfX2xvYykNCiAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7DQogICAgICB9
DQoNCg0KICAgICAgdmlydHVhbCBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLF9UcmFpdHM+Kg0K
ICAgICAgc2V0YnVmKGNoYXJfdHlwZSosIHN0cmVhbXNpemUpDQogICAgICB7IHJldHVybiB0aGlz
OyB9DQoNCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUNCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlv
c19iYXNlOjpzZWVrZGlyLA0KICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3Nf
YmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5
cGUoLTEpKTsgfQ0KDQogICAgICB2aXJ0dWFsIHBvc190eXBlDQogICAgICBzZWVrcG9zKHBvc190
eXBlLA0KICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBp
b3NfYmFzZTo6b3V0KQ0KICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsgfQ0K
DQogICAgICB2aXJ0dWFsIGludA0KICAgICAgc3luYygpIHsgcmV0dXJuIDA7IH0NCg0KDQogICAg
ICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0NCg0K
ICAgICAgdmlydHVhbCBzdHJlYW1zaXplDQogICAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0
cmVhbXNpemUgX19uKTsNCg0KICAgICAgdmlydHVhbCBpbnRfdHlwZQ0KICAgICAgdW5kZXJmbG93
KCkNCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQ0KDQogICAgICB2aXJ0dWFs
IGludF90eXBlDQogICAgICB1ZmxvdygpDQogICAgICB7DQogICAgICAgIGludF90eXBlIF9fcmV0
ID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190
eXBlOjplcV9pbnRfdHlwZSh0aGlzLT51bmRlcmZsb3coKSwgX19yZXQpOw0KICAgICAgICBib29s
IF9fdGVzdHBlbmRpbmcgPSBfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kOw0KICAg
ICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RwZW5kaW5nKQ0KICAgICAgICAgIHsNCiAgICAg
ICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOw0KICAg
ICAgICAgICAgKytfTV9pbl9jdXI7DQogICAgICAgICAgICBpZiAoX01fYnVmX3VuaWZpZWQgJiYg
X01fbW9kZSAmIGlvc19iYXNlOjpvdXQpDQogICAgICAgICAgICAgICsrX01fb3V0X2N1cjsNCiAg
ICAgICAgICB9DQogICAgICAgIHJldHVybiBfX3JldDsNCiAgICAgIH0NCg0KDQogICAgICB2aXJ0
dWFsIGludF90eXBlDQogICAgICBwYmFja2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9m
KCkpDQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0NCg0KDQogICAgICB2aXJ0
dWFsIHN0cmVhbXNpemUNCiAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFt
c2l6ZSBfX24pOw0KDQogICAgICB2aXJ0dWFsIGludF90eXBlDQogICAgICBvdmVyZmxvdyhpbnRf
dHlwZSA9IHRyYWl0c190eXBlOjplb2YoKSkNCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjpl
b2YoKTsgfQ0KIyA0ODUgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMw0KICAgIHBy
aXZhdGU6DQogICAgICBiYXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1idWZfdHlwZSYpIHsg
fTsNCg0KICAgICAgX19zdHJlYW1idWZfdHlwZSYNCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX3N0
cmVhbWJ1Zl90eXBlJikgeyByZXR1cm4gKnRoaXM7IH07DQoNCiAgICB9Ow0KfQ0KDQoNCg0KDQoN
CiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJlYW1idWYudGNjIiAxIDMNCiMgMzkg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RyZWFtYnVmLnRjYyIgMw0KDQpuYW1lc3BhY2Ug
c3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAg
ICBjb25zdCBzaXplX3QNCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6X1Nf
cGJhY2tfc2l6ZTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+DQogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90
eXBlDQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHNidW1wYygp
DQogICAgew0KICAgICAgaW50X3R5cGUgX19yZXQ7DQogICAgICBpZiAoX01faW5fY3VyICYmIF9N
X2luX2N1ciA8IF9NX2luX2VuZCkNCiAgICAgICAgew0KICAgICAgICAgIGNoYXJfdHlwZSBfX2Mg
PSAqKHRoaXMtPmdwdHIoKSk7DQogICAgICAgICAgX01faW5fY3VyX21vdmUoMSk7DQogICAgICAg
ICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsNCiAgICAgICAgfQ0KICAg
ICAgZWxzZQ0KICAgICAgICBfX3JldCA9IHRoaXMtPnVmbG93KCk7DQogICAgICByZXR1cm4gX19y
ZXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4NCiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5
cGUNCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6DQogICAgc3B1dGJhY2tj
KGNoYXJfdHlwZSBfX2MpDQogICAgew0KICAgICAgaW50X3R5cGUgX19yZXQ7DQogICAgICBib29s
IF9fdGVzdHBvcyA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7DQogICAgICBi
b29sIF9fdGVzdG5lID0gX01faW5fY3VyICYmICF0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlzLT5n
cHRyKClbLTFdKTsNCiAgICAgIGlmICghX190ZXN0cG9zIHx8IF9fdGVzdG5lKQ0KICAgICAgICBf
X3JldCA9IHBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7DQogICAgICBl
bHNlDQogICAgICAgIHsNCiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7DQogICAgICAgICAg
X19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7DQogICAgICAg
IH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+OjppbnRfdHlwZQ0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+OjoNCiAgICBzdW5nZXRjKCkNCiAgICB7DQogICAgICBpbnRfdHlwZSBfX3JldDsNCiAgICAg
IGlmIChfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyKQ0KICAgICAgICB7DQogICAg
ICAgICAgX01faW5fY3VyX21vdmUoLTEpOw0KICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6
OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOw0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAg
IF9fcmV0ID0gdGhpcy0+cGJhY2tmYWlsKCk7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0K
DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
DQogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBl
DQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHNwdXRjKGNoYXJf
dHlwZSBfX2MpDQogICAgew0KICAgICAgaW50X3R5cGUgX19yZXQ7DQogICAgICBpZiAoX01fb3V0
X2J1Zl9zaXplKCkpDQogICAgICAgIHsNCiAgICAgICAgICAqX01fb3V0X2N1ciA9IF9fYzsNCiAg
ICAgICAgICBfTV9vdXRfY3VyX21vdmUoMSk7DQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlw
ZTo6dG9faW50X3R5cGUoX19jKTsNCiAgICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICBfX3Jl
dCA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsNCiAgICAg
IHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPg0KICAgIHN0cmVhbXNpemUNCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPjo6DQogICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikN
CiAgICB7DQogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsNCiAgICAgIHdoaWxlIChfX3JldCA8
IF9fbikNCiAgICAgICAgew0KICAgICAgICAgIHNpemVfdCBfX2J1Zl9sZW4gPSBfTV9pbl9lbmQg
LSBfTV9pbl9jdXI7DQogICAgICAgICAgaWYgKF9fYnVmX2xlbiA+IDApDQogICAgICAgICAgICB7
DQogICAgICAgICAgICAgIHNpemVfdCBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0Ow0KICAgICAg
ICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7DQogICAg
ICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01faW5fY3VyLCBfX2xlbik7DQogICAg
ICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOw0KICAgICAgICAgICAgICBfX3MgKz0gX19sZW47DQog
ICAgICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKF9fbGVuKTsNCiAgICAgICAgICAgIH0NCg0KICAg
ICAgICAgIGlmIChfX3JldCA8IF9fbikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW50
X3R5cGUgX19jID0gdGhpcy0+dWZsb3coKTsNCiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlw
ZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQ0KICAgICAgICAgICAgICAg
IHsNCiAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0cmFpdHNf
dHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOw0KICAgICAgICAgICAgICAgICAgKytfX3JldDsNCiAg
ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICBicmVh
azsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0N
Cg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
Pg0KICAgIHN0cmVhbXNpemUNCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6
DQogICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICB7
DQogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsNCiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikN
CiAgICAgICAgew0KICAgICAgICAgIG9mZl90eXBlIF9fYnVmX2xlbiA9IF9NX291dF9idWZfc2l6
ZSgpOw0KICAgICAgICAgIGlmIChfX2J1Zl9sZW4gPiAwKQ0KICAgICAgICAgICAgew0KICAgICAg
ICAgICAgICBvZmZfdHlwZSBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0Ow0KICAgICAgICAgICAg
ICBvZmZfdHlwZSBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsNCiAgICAgICAg
ICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fb3V0X2N1ciwgX19zLCBfX2xlbik7DQogICAgICAg
ICAgICAgIF9fcmV0ICs9IF9fbGVuOw0KICAgICAgICAgICAgICBfX3MgKz0gX19sZW47DQogICAg
ICAgICAgICAgIF9NX291dF9jdXJfbW92ZShfX2xlbik7DQogICAgICAgICAgICB9DQoNCiAgICAg
ICAgICBpZiAoX19yZXQgPCBfX24pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGludF90
eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX19zKSk7
DQogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRz
X3R5cGU6OmVvZigpKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICArK19f
cmV0Ow0KICAgICAgICAgICAgICAgICAgKytfX3M7DQogICAgICAgICAgICAgICAgfQ0KICAgICAg
ICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAg
ICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFtc2l6ZQ0KICAgIF9f
Y29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lvcywNCiAgICAg
ICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmlu
LA0KICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
KiBfX3Nib3V0KQ0KICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBl
IGludF90eXBlOw0KDQogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsNCiAgICAgIHN0cmVhbXNp
emUgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOw0KICAgICAgc3RyZWFtc2l6ZSBfX3h0
cmN0Ow0KICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfX3Nib3V0LT5fTV9tb2RlICYgaW9zX2Jhc2U6
Om91dDsNCiAgICAgIHRyeQ0KICAgICAgICB7DQogICAgICAgICAgd2hpbGUgKF9fdGVzdHB1dCAm
JiBfX2J1ZnNpemUgIT0gLTEpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9feHRyY3Qg
PSBfX3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXplKTsNCiAgICAgICAgICAg
ICAgX19yZXQgKz0gX194dHJjdDsNCiAgICAgICAgICAgICAgX19zYmluLT5fTV9pbl9jdXJfbW92
ZShfX3h0cmN0KTsNCiAgICAgICAgICAgICAgaWYgKF9feHRyY3QgPT0gX19idWZzaXplKQ0KICAg
ICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlw
ZShfX3NiaW4tPnNnZXRjKCksIF9UcmFpdHM6OmVvZigpKSkNCiAgICAgICAgICAgICAgICAgICAg
YnJlYWs7DQogICAgICAgICAgICAgICAgICBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7
DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAg
YnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQ0KICAgICAgICB7DQogICAgICAgICAgX19pb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmZh
aWxiaXQpOw0KICAgICAgICAgIGlmICgoX19pb3MuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmZh
aWxiaXQpICE9IDApDQogICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJu
IF9fcmV0Ow0KICAgIH0NCg0KDQoNCg0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3Ry
ZWFtYnVmPGNoYXI+Ow0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBzdHJlYW1zaXplDQogICAgX19j
b3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPGNoYXI+JiwgYmFzaWNfc3RyZWFtYnVmPGNoYXI+KiwN
CiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8Y2hhcj4qKTsNCg0KICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+Ow0KICBleHRlcm4gdGVt
cGxhdGUNCiAgICBzdHJlYW1zaXplDQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPHdj
aGFyX3Q+JiwgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+KiwNCiAgICAgICAgICAgICAgICAgICAg
ICBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4qKTsNCn0NCiMgNDk5ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9zdHJlYW1idWYiIDIgMw0KIyA1MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAyIDMN
CiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MuaCIgMSAzDQojIDM5ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAzDQoNCiMgMSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdHJlYW1idWZfaXRlcmF0b3IuaCIgMSAzDQojIDQyICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oIiAzDQoNCm5hbWVzcGFjZSBz
dGQNCnsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQog
ICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcg0KICAgIDogcHVibGljIGl0ZXJhdG9yPGlucHV0
X2l0ZXJhdG9yX3RhZywgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSwNCiAgICAg
ICAgICAgICAgICAgICAgICBfQ2hhclQqLCBfQ2hhclQmPg0KICAgIHsNCiAgICBwdWJsaWM6DQoN
CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0
cmFpdHNfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50
X3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0
cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4gaXN0cmVhbV90eXBlOw0KDQogICAgcHJpdmF0ZToNCg0KDQoNCg0KDQoNCg0KICAgICAgbXV0
YWJsZSBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsNCiAgICAgIGludF90eXBlIF9NX2M7DQoNCiAg
ICBwdWJsaWM6DQogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKCkgdGhyb3coKQ0KICAgICAgOiBf
TV9zYnVmKDApLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9DQoNCiAgICAgIGlzdHJlYW1i
dWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93KCkNCiAgICAgIDogX01fc2J1Zihf
X3MucmRidWYoKSksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0NCg0KICAgICAgaXN0cmVh
bWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdygpDQogICAgICA6IF9NX3Ni
dWYoX19zKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQ0KDQoNCiAgICAgIGNoYXJfdHlw
ZQ0KICAgICAgb3BlcmF0b3IqKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjp0
b19jaGFyX3R5cGUoX01fZ2V0KCkpOyB9DQoNCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3ImDQog
ICAgICBvcGVyYXRvcisrKCkNCiAgICAgIHsNCiAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2Yg
PSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgIGlmIChfTV9zYnVmICYmIHRyYWl0c190eXBl
OjplcV9pbnRfdHlwZShfTV9zYnVmLT5zYnVtcGMoKSwgX19lb2YpKQ0KICAgICAgICAgIF9NX3Ni
dWYgPSAwOw0KICAgICAgICBlbHNlDQogICAgICAgICAgX01fYyA9IF9fZW9mOw0KICAgICAgICBy
ZXR1cm4gKnRoaXM7DQogICAgICB9DQoNCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3INCiAgICAg
IG9wZXJhdG9yKysoaW50KQ0KICAgICAgew0KICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9
IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciBfX29sZCA9
ICp0aGlzOw0KICAgICAgICBpZiAoX01fc2J1Zg0KICAgICAgICAgICAgJiYgdHJhaXRzX3R5cGU6
OmVxX2ludF90eXBlKChfX29sZC5fTV9jID0gX01fc2J1Zi0+c2J1bXBjKCkpLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZW9mKSkNCiAgICAgICAgICBfTV9zYnVm
ID0gMDsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIF9NX2MgPSBfX2VvZjsNCiAgICAgICAgcmV0
dXJuIF9fb2xkOw0KICAgICAgfQ0KDQoNCg0KDQogICAgICBib29sDQogICAgICBlcXVhbChjb25z
dCBpc3RyZWFtYnVmX2l0ZXJhdG9yJiBfX2IpIGNvbnN0DQogICAgICB7DQogICAgICAgIGNvbnN0
IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICBib29sIF9fdGhp
c2VvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9nZXQoKSwgX19lb2YpOw0KICAgICAg
ICBib29sIF9fYmVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2IuX01fZ2V0KCksIF9f
ZW9mKTsNCiAgICAgICAgcmV0dXJuIChfX3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9m
ICYmICFfX2Jlb2YpKTsNCiAgICAgIH0NCg0KDQogICAgcHJpdmF0ZToNCiAgICAgIGludF90eXBl
DQogICAgICBfTV9nZXQoKSBjb25zdA0KICAgICAgew0KICAgICAgICBjb25zdCBpbnRfdHlwZSBf
X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgaW50X3R5cGUgX19yZXQgPSBfX2Vv
ZjsNCiAgICAgICAgaWYgKF9NX3NidWYpDQogICAgICAgICAgew0KICAgICAgICAgICAgaWYgKCF0
cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fYywgX19lb2YpKQ0KICAgICAgICAgICAgICBfX3Jl
dCA9IF9NX2M7DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlw
ZTo6ZXFfaW50X3R5cGUoKF9fcmV0ID0gX01fc2J1Zi0+c2dldGMoKSksIF9fZW9mKSkNCiAgICAg
ICAgICAgICAgICBfTV9zYnVmID0gMDsNCiAgICAgICAgICB9DQogICAgICAgIHJldHVybiBfX3Jl
dDsNCiAgICAgIH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVh
bWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsDQogICAgICAgICAgICAgICBjb25z
dCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikNCiAgICB7IHJldHVy
biBfX2EuZXF1YWwoX19iKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0cmVh
bWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsDQogICAgICAgICAgICAgICBjb25z
dCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikNCiAgICB7IHJldHVy
biAhX19hLmVxdWFsKF9fYik7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+DQogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcg0KICAgIDogcHVibGlj
IGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+DQog
ICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAg
ICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsNCg0KICAgIHByaXZhdGU6
DQogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsNCiAgICAgIGJvb2wgX01fZmFpbGVkOw0K
DQogICAgcHVibGljOg0KICAgICAgaW5saW5lDQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9z
dHJlYW1fdHlwZSYgX19zKSB0aHJvdyAoKQ0KICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwg
X01fZmFpbGVkKCFfTV9zYnVmKSB7IH0NCg0KICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJl
YW1idWZfdHlwZSogX19zKSB0aHJvdyAoKQ0KICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ZhaWxl
ZCghX01fc2J1ZikgeyB9DQoNCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImDQogICAgICBvcGVy
YXRvcj0oX0NoYXJUIF9fYyk7DQoNCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImDQogICAgICBv
cGVyYXRvciooKSB0aHJvdygpDQogICAgICB7IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBvc3Ry
ZWFtYnVmX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3IrKyhpbnQpIHRocm93KCkNCiAgICAgIHsg
cmV0dXJuICp0aGlzOyB9DQoNCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImDQogICAgICBvcGVy
YXRvcisrKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gKnRoaXM7IH0NCg0KICAgICAgYm9vbA0K
ICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gX01fZmFpbGVkOyB9
DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
DQogICAgaW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYNCiAgICBv
c3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPShfQ2hhclQgX19j
KQ0KICAgIHsNCiAgICAgIGlmICghX01fZmFpbGVkICYmDQogICAgICAgICAgX1RyYWl0czo6ZXFf
aW50X3R5cGUoX01fc2J1Zi0+c3B1dGMoX19jKSwgX1RyYWl0czo6ZW9mKCkpKQ0KICAgICAgICBf
TV9mYWlsZWQgPSB0cnVlOw0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCn0NCiMgNDEgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLmgiIDIgMw0KIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAzDQojIDQ0ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMw0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvY3djdHlwZSIgMSAzDQojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAz
DQoNCg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAxIDMNCg0KDQoNCg0KDQoNCg0K
IyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMNCiMgOSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMNCg0KDQoNCg0KDQpleHRlcm4g
IkMiIHsNCg0KDQoNCnR5cGVkZWYgaW50IHdjdHlwZV90Ow0KDQoNCg0KDQp0eXBlZGVmIGludCB3
Y3RyYW5zX3Q7DQoNCg0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzd2FscGhhICh3
aW50X3QpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzd2FsbnVtICh3aW50X3Qp
Ow0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzd2JsYW5rICh3aW50X3QpOw0KaW50
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzd2NudHJsICh3aW50X3QpOw0KaW50IF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIGlzd2N0eXBlICh3aW50X3QsIHdjdHlwZV90KTsNCmludCBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3dkaWdpdCAod2ludF90KTsNCmludCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBpc3dncmFwaCAod2ludF90KTsNCmludCBfX2F0dHJpYnV0ZV9f
KChfX2NkZWNsX18pKSBpc3dsb3dlciAod2ludF90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk
ZWNsX18pKSBpc3dwcmludCAod2ludF90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBpc3dwdW5jdCAod2ludF90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3dz
cGFjZSAod2ludF90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3d1cHBlciAo
d2ludF90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3d4ZGlnaXQgKHdpbnRf
dCk7DQp3aW50X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdG93Y3RyYW5zICh3aW50X3Qs
IHdjdHJhbnNfdCk7DQp3aW50X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdG93dXBwZXIg
KHdpbnRfdCk7DQp3aW50X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdG93bG93ZXIgKHdp
bnRfdCk7DQp3Y3RyYW5zX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgd2N0cmFucyAoY29u
c3QgY2hhciAqKTsNCndjdHlwZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjdHlwZSAo
Y29uc3QgY2hhciAqKTsNCg0KfQ0KIyA1MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djdHlwZSIg
MiAzDQojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAz
DQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMSAzDQojIDQ4ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0K
DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
DQogICAgc3RydWN0IF9fcGFkOw0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2
LXBjLWN5Z3dpbi9iaXRzL2N0eXBlX2Jhc2UuaCIgMSAzDQojIDM4ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9pNjg2LXBjLWN5Z3dpbi9iaXRzL2N0eXBlX2Jhc2UuaCIgMw0KICBzdHJ1Y3QgY3R5cGVf
YmFzZQ0KICB7DQoNCiAgICB0eXBlZGVmIGNvbnN0IGludCogX190b190eXBlOw0KDQoNCg0KICAg
IHR5cGVkZWYgY2hhciBtYXNrOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIHVwcGVyID0gMDE7DQog
ICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSAwMjsNCiAgICBzdGF0aWMgY29uc3QgbWFzayBh
bHBoYSA9IDAxIHwgMDI7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgZGlnaXQgPSAwNDsNCiAgICBz
dGF0aWMgY29uc3QgbWFzayB4ZGlnaXQgPSAwMTAwIHwgMDQ7DQogICAgc3RhdGljIGNvbnN0IG1h
c2sgc3BhY2UgPSAwMTA7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSAwMjAgfCAwMSB8
IDAyIHwgMDQgfCAwMjAwOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoID0gMDIwIHwgMDEg
fCAwMiB8IDA0Ow0KICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsID0gMDQwOw0KICAgIHN0YXRp
YyBjb25zdCBtYXNrIHB1bmN0ID0gMDIwOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtID0g
MDEgfCAwMiB8IDA0Ow0KICB9Ow0KIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2Nh
bGVfZmFjZXRzLmgiIDIgMw0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNs
YXNzIF9fY3R5cGVfYWJzdHJhY3RfYmFzZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMg
Y3R5cGVfYmFzZQ0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsNCg0KICAgICAgYm9vbA0KICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2Mp
IGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19pcyhfX20sIF9fYyk7IH0NCg0KICAgICAg
Y29uc3QgY2hhcl90eXBlKg0KICAgICAgaXMoY29uc3QgY2hhcl90eXBlICpfX2xvLCBjb25zdCBj
aGFyX3R5cGUgKl9faGksIG1hc2sgKl9fdmVjKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9faXMoX19sbywgX19oaSwgX192ZWMpOyB9DQoNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoNCiAg
ICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90
eXBlKiBfX2hpKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9f
bG8sIF9faGkpOyB9DQoNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIHNjYW5fbm90KG1h
c2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29u
c3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3NjYW5fbm90KF9fbSwgX19sbywgX19oaSk7IH0N
Cg0KICAgICAgY2hhcl90eXBlDQogICAgICB0b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0DQog
ICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fYyk7IH0NCg0KICAgICAgY29uc3QgY2hh
cl90eXBlKg0KICAgICAgdG91cHBlcihjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSog
X19oaSkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19sbywgX19oaSk7
IH0NCg0KICAgICAgY2hhcl90eXBlDQogICAgICB0b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0
DQogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fYyk7IH0NCg0KICAgICAgY29uc3Qg
Y2hhcl90eXBlKg0KICAgICAgdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19sbywgX19o
aSk7IH0NCg0KICAgICAgY2hhcl90eXBlDQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3QNCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0NCg0KICAgICAgY29uc3QgY2hhcioN
CiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlw
ZSogX190bykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fbG8sIF9faGks
IF9fdG8pOyB9DQoNCiAgICAgIGNoYXINCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFy
IF9fZGZhdWx0KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fYywgX19k
ZmF1bHQpOyB9DQoNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIG5hcnJvdyhjb25zdCBj
aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwNCiAgICAgICAgICAgICAgY2hh
ciBfX2RmYXVsdCwgY2hhciAqX190bykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25h
cnJvdyhfX2xvLCBfX2hpLCBfX2RmYXVsdCwgX190byk7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAg
ICAgIGV4cGxpY2l0DQogICAgICBfX2N0eXBlX2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9
IDApOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5f
X2N0eXBlX2Fic3RyYWN0X2Jhc2UoKSB7IH0NCg0KICAgICAgdmlydHVhbCBib29sDQogICAgICBk
b19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29u
c3QgY2hhcl90eXBlKiBfX2hpLA0KICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0ID0gMDsN
Cg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb19zY2FuX2lzKG1hc2sg
X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sDQogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJf
dHlwZSogX19oaSkgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoN
CiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sDQogICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsNCg0KICAgICAg
dmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7
DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fdG91cHBlcihjaGFy
X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOw0KDQogICAgICB2
aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsN
Cg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb190b2xvd2VyKGNoYXJf
dHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7DQoNCiAgICAgIHZp
cnR1YWwgY2hhcl90eXBlDQogICAgICBkb193aWRlbihjaGFyKSBjb25zdCA9IDA7DQoNCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcioNCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNv
bnN0IGNoYXIqIF9faGksDQogICAgICAgICAgICAgICBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Qg
PSAwOw0KDQogICAgICB2aXJ0dWFsIGNoYXINCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNo
YXIgX19kZmF1bHQpIGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq
DQogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq
IF9faGksDQogICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29u
c3QgPSAwOw0KICAgIH07DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xh
c3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4NCiAgICB7DQog
ICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGN0eXBlOjptYXNrIG1hc2s7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk
IGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgY3R5cGUoc2l6ZV90IF9fcmVmcyA9IDApIDog
X19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4oX19yZWZzKSB7IH0NCg0KICAgcHJvdGVjdGVk
Og0KICAgICAgdmlydHVhbA0KICAgICAgfmN0eXBlKCk7DQoNCiAgICAgIHZpcnR1YWwgYm9vbA0K
ICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0Ow0KDQogICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywg
Y29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7DQoNCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hh
cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ow0KDQogICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBj
aGFyX3R5cGUqIF9fbG8sDQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkp
IGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fdG91cHBlcihjaGFy
X3R5cGUgX19jKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAg
ICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
dDsNCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBl
IF9fYykgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9f
dG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7DQoN
CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBkb193aWRlbihjaGFyIF9fYykgY29uc3Q7
DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioNCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIq
IF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsNCg0KICAg
ICAgdmlydHVhbCBjaGFyDQogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0
KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb19uYXJy
b3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksDQogICAgICAg
ICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsNCiAgICB9Ow0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBsb2NhbGU6OmlkIGN0eXBlPF9DaGFyVD46
OmlkOw0KDQoNCiAgdGVtcGxhdGU8Pg0KICAgIGNsYXNzIGN0eXBlPGNoYXI+IDogcHVibGljIF9f
Y3R5cGVfYWJzdHJhY3RfYmFzZTxjaGFyPg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5
cGVkZWYgY2hhciBjaGFyX3R5cGU7DQoNCiAgICBwcm90ZWN0ZWQ6DQoNCiAgICAgIF9fY19sb2Nh
bGUgX01fY19sb2NhbGVfY3R5cGU7DQogICAgICBib29sIF9NX2RlbDsNCiAgICAgIF9fdG9fdHlw
ZSBfTV90b3VwcGVyOw0KICAgICAgX190b190eXBlIF9NX3RvbG93ZXI7DQogICAgICBjb25zdCBt
YXNrKiBfTV90YWJsZTsNCg0KICAgIHB1YmxpYzoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk
Ow0KICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCB0YWJsZV9zaXplID0gMSArIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KC0xKTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGN0eXBlKGNvbnN0
IG1hc2sqIF9fdGFibGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2UsIHNpemVfdCBfX3JlZnMgPSAw
KTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGN0eXBlKF9fY19sb2NhbGUgX19jbG9jLCBjb25z
dCBtYXNrKiBfX3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNlLA0KICAgICAgICAgICAgc2l6
ZV90IF9fcmVmcyA9IDApOw0KDQogICAgICBpbmxpbmUgYm9vbA0KICAgICAgaXMobWFzayBfX20s
IGNoYXIgX19jKSBjb25zdDsNCg0KICAgICAgaW5saW5lIGNvbnN0IGNoYXIqDQogICAgICBpcyhj
b25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7DQoN
CiAgICAgIGlubGluZSBjb25zdCBjaGFyKg0KICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qg
Y2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7DQoNCiAgICAgIGlubGluZSBjb25z
dCBjaGFyKg0KICAgICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0
IGNoYXIqIF9faGkpIGNvbnN0Ow0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgY29uc3QgbWFzayoN
CiAgICAgIHRhYmxlKCkgY29uc3QgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gX01fdGFibGU7IH0N
Cg0KICAgICAgc3RhdGljIGNvbnN0IG1hc2sqDQogICAgICBjbGFzc2ljX3RhYmxlKCkgdGhyb3co
KTsNCg0KICAgICAgdmlydHVhbA0KICAgICAgfmN0eXBlKCk7DQoNCiAgICAgIHZpcnR1YWwgYm9v
bA0KICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0Ow0KDQogICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7DQoNCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qg
Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ow0KDQogICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25z
dCBjaGFyX3R5cGUqIF9fbG8sDQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f
aGkpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fdG91cHBlcihj
aGFyX3R5cGUpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAg
IGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0
Ow0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUp
IGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3RvbG93
ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ow0KDQogICAg
ICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7DQoNCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcioNCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNv
bnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsNCg0KICAgICAgdmlydHVh
bCBjaGFyDQogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsN
Cg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb19uYXJyb3coY29uc3Qg
Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksDQogICAgICAgICAgICAgICAg
Y2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsNCiAgICB9Ow0KDQogIHRlbXBsYXRl
PD4NCiAgICBjb25zdCBjdHlwZTxjaGFyPiYNCiAgICB1c2VfZmFjZXQ8Y3R5cGU8Y2hhcj4gPihj
b25zdCBsb2NhbGUmIF9fbG9jKTsNCiMgNDAwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv
Y2FsZV9mYWNldHMuaCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWN5Z3dp
bi9iaXRzL2N0eXBlX2lubGluZS5oIiAxIDMNCiMgMzcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2k2
ODYtcGMtY3lnd2luL2JpdHMvY3R5cGVfaW5saW5lLmgiIDMNCiAgYm9vbA0KICBjdHlwZTxjaGFy
Pjo6DQogIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3QNCiAgeyByZXR1cm4gX01fdGFibGVb
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV0gJiBfX207IH0NCg0KICBjb25zdCBjaGFy
Kg0KICBjdHlwZTxjaGFyPjo6DQogIGlzKGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBf
X2hpZ2gsIG1hc2sqIF9fdmVjKSBjb25zdA0KICB7DQogICAgd2hpbGUgKF9fbG93IDwgX19oaWdo
KQ0KICAgICAgKl9fdmVjKysgPSBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigq
X19sb3crKyldOw0KICAgIHJldHVybiBfX2hpZ2g7DQogIH0NCg0KICBjb25zdCBjaGFyKg0KICBj
dHlwZTxjaGFyPjo6DQogIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25z
dCBjaGFyKiBfX2hpZ2gpIGNvbnN0DQogIHsNCiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2ggJiYg
IXRoaXMtPmlzKF9fbSwgKl9fbG93KSkNCiAgICAgICsrX19sb3c7DQogICAgcmV0dXJuIF9fbG93
Ow0KICB9DQoNCiAgY29uc3QgY2hhcioNCiAgY3R5cGU8Y2hhcj46Og0KICBzY2FuX25vdChtYXNr
IF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QNCiAgew0K
ICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCAmJiB0aGlzLT5pcyhfX20sICpfX2xvdykgIT0gMCkN
CiAgICAgICsrX19sb3c7DQogICAgcmV0dXJuIF9fbG93Ow0KICB9DQojIDQwMSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMw0KDQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPg0KICAgIGNsYXNzIGN0eXBlX2J5bmFtZSA6IHB1YmxpYyBjdHlwZTxfQ2hh
clQ+DQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsN
Cg0KICAgICAgZXhwbGljaXQNCiAgICAgIGN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNp
emVfdCBfX3JlZnMgPSAwKTsNCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAg
IH5jdHlwZV9ieW5hbWUoKSB7IH07DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPD4NCiAgICBjdHlw
ZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IHJlZnMpOw0K
DQogIHRlbXBsYXRlPD4NCiAgICBjdHlwZV9ieW5hbWU8d2NoYXJfdD46OmN0eXBlX2J5bmFtZShj
b25zdCBjaGFyKiwgc2l6ZV90IHJlZnMpOw0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9jb2RlY3Z0LmgiIDEgMw0KIyA0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jb2Rl
Y3Z0LmgiIDMNCg0KDQogIGNsYXNzIGNvZGVjdnRfYmFzZQ0KICB7DQogIHB1YmxpYzoNCiAgICBl
bnVtIHJlc3VsdA0KICAgIHsNCiAgICAgIG9rLA0KICAgICAgcGFydGlhbCwNCiAgICAgIGVycm9y
LA0KICAgICAgbm9jb252DQogICAgfTsNCiAgfTsNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4NCiAgICBj
bGFzcyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZQ0KICAgIDogcHVibGljIGxvY2FsZTo6ZmFjZXQs
IHB1YmxpYyBjb2RlY3Z0X2Jhc2UNCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVm
IGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsNCiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50
ZXJuX3R5cGU7DQogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOw0KICAgICAgdHlw
ZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7DQoNCg0KICAgICAgcmVzdWx0DQogICAgICBvdXQoc3Rh
dGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAgICAgICBj
b25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21f
bmV4dCwNCiAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5k
LA0KICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdA0KICAgICAgew0KICAg
ICAgICByZXR1cm4gdGhpcy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19m
cm9tX25leHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9f
dG9fbmV4dCk7DQogICAgICB9DQoNCiAgICAgIHJlc3VsdA0KICAgICAgdW5zaGlmdChzdGF0ZV90
eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLA0K
ICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QNCiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX3Vuc2hpZnQoX19zdGF0ZSwgX190byxfX3RvX2VuZCxfX3RvX25leHQpOyB9
DQoNCiAgICAgIHJlc3VsdA0KICAgICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0
ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5k
LCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LA0KICAgICAgICAgaW50ZXJuX3R5cGUq
IF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwNCiAgICAgICAgIGludGVybl90eXBlKiYgX190
b19uZXh0KSBjb25zdA0KICAgICAgew0KICAgICAgICByZXR1cm4gdGhpcy0+ZG9faW4oX19zdGF0
ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOw0KICAgICAgfQ0KDQogICAgICBpbnQN
CiAgICAgIGVuY29kaW5nKCkgY29uc3QgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
ZW5jb2RpbmcoKTsgfQ0KDQogICAgICBib29sDQogICAgICBhbHdheXNfbm9jb252KCkgY29uc3Qg
dGhyb3coKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fYWx3YXlzX25vY29udigpOyB9DQoNCiAg
ICAgIGludA0KICAgICAgbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4
dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5k
LCBzaXplX3QgX19tYXgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19sZW5ndGgoX19z
dGF0ZSwgX19mcm9tLCBfX2VuZCwgX19tYXgpOyB9DQoNCiAgICAgIGludA0KICAgICAgbWF4X2xl
bmd0aCgpIGNvbnN0IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX21heF9sZW5ndGgo
KTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgZXhwbGljaXQNCiAgICAgIF9fY29kZWN2dF9h
YnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7
IH0NCg0KICAgICAgdmlydHVhbA0KICAgICAgfl9fY29kZWN2dF9hYnN0cmFjdF9iYXNlKCkgeyB9
DQoNCiAgICAgIHZpcnR1YWwgcmVzdWx0DQogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0
ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5f
dHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwNCiAgICAg
ICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLA0KICAgICAg
ICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1
YWwgcmVzdWx0DQogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90
eXBlKiBfX3RvLA0KICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVy
bl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgcmVzdWx0DQog
ICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t
LA0KICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVy
bl90eXBlKiYgX19mcm9tX25leHQsDQogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50
ZXJuX3R5cGUqIF9fdG9fZW5kLA0KICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQp
IGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX2VuY29kaW5nKCkgY29u
c3QgdGhyb3coKSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgYm9vbA0KICAgICAgZG9fYWx3YXlzX25v
Y29udigpIGNvbnN0IHRocm93KCkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9f
bGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLA0KICAg
ICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25z
dCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3Qg
dGhyb3coKSA9IDA7DQogICAgfTsNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQs
IHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPg0KICAgIGNsYXNzIGNvZGVjdnQN
CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCwgX0V4dGVyblQs
IF9TdGF0ZVQ+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jh
c2U6OnJlc3VsdCByZXN1bHQ7DQogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOw0K
ICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsNCiAgICAgIHR5cGVkZWYgX1N0YXRl
VCBzdGF0ZV90eXBlOw0KDQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KDQogICAgICBl
eHBsaWNpdA0KICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkNCiAgICAgIDogX19jb2Rl
Y3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsX0V4dGVyblQsX1N0YXRlVD4gKF9fcmVmcykgeyB9
DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+Y29kZWN2dCgpIHsgfQ0K
DQogICAgICB2aXJ0dWFsIHJlc3VsdA0KICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUs
IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5
cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsDQogICAgICAg
ICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwNCiAgICAgICAg
ICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgcmVz
dWx0DQogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBf
X3RvLA0KICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBl
KiYgX190b19uZXh0KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCByZXN1bHQNCiAgICAgIGRvX2lu
KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAg
ICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBf
X2Zyb21fbmV4dCwNCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSog
X190b19lbmQsDQogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7DQoN
CiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7DQoN
CiAgICAgIHZpcnR1YWwgYm9vbA0KICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93
KCk7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlw
ZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgICAgY29uc3QgZXh0
ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGlu
dA0KICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7DQogICAgfTsNCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0
ZVQ+DQogICAgbG9jYWxlOjppZCBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD46
OmlkOw0KDQoNCiAgdGVtcGxhdGU8Pg0KICAgIGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJz
dGF0ZV90Pg0KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNoYXIs
IG1ic3RhdGVfdD4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIGNoYXIgaW50
ZXJuX3R5cGU7DQogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7DQogICAgICB0eXBlZGVm
IG1ic3RhdGVfdCBzdGF0ZV90eXBlOw0KDQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0K
DQogICAgICBleHBsaWNpdA0KICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7DQoNCiAg
ICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+Y29kZWN2dCgpOw0KDQogICAgICB2
aXJ0dWFsIHJlc3VsdA0KICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGlu
dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJv
bV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsDQogICAgICAgICAgICAgZXh0
ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwNCiAgICAgICAgICAgICBleHRl
cm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgcmVzdWx0DQogICAg
ICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLA0KICAg
ICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19u
ZXh0KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCByZXN1bHQNCiAgICAgIGRvX2luKHN0YXRlX3R5
cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICBjb25z
dCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4
dCwNCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQs
DQogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7DQoNCiAgICAgIHZp
cnR1YWwgaW50DQogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7DQoNCiAgICAgIHZp
cnR1YWwgYm9vbA0KICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7DQoNCiAg
ICAgIHZpcnR1YWwgaW50DQogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0
IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAg
ZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7DQogIH07DQojIDMxOCAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9jb2RlY3Z0LmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQs
IHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPg0KICAgIGNsYXNzIGNvZGVjdnRf
YnluYW1lIDogcHVibGljIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPg0KICAg
IHsNCiAgICBwdWJsaWM6DQogICAgICBleHBsaWNpdA0KICAgICAgY29kZWN2dF9ieW5hbWUoY29u
c3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBf
RXh0ZXJuVCwgX1N0YXRlVD4oX19yZWZzKSB7IH0NCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0
dWFsDQogICAgICB+Y29kZWN2dF9ieW5hbWUoKSB7IH0NCiAgICB9Ow0KIyA0MjYgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMNCg0KDQoNCiAgY2xhc3MgX19u
dW1fYmFzZQ0KICB7DQogIHByb3RlY3RlZDoNCg0KDQogICAgc3RhdGljIGNvbnN0IGNoYXIgX1Nf
YXRvbXNbXTsNCg0KICAgIGVudW0NCiAgICB7DQogICAgICBfTV96ZXJvLA0KICAgICAgX01fZSA9
IF9NX3plcm8gKyAxMCwNCiAgICAgIF9NX0UgPSBfTV96ZXJvICsgMTEsDQogICAgICBfTV9zaXpl
ID0gMjEgKyAxDQogICAgfTsNCg0KDQoNCiAgICBzdGF0aWMgYm9vbA0KICAgIF9TX2Zvcm1hdF9m
bG9hdChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9kLA0KICAg
ICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7DQoNCg0KICAgIHN0YXRpYyB2b2lk
DQogICAgX1NfZm9ybWF0X2ludChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBj
aGFyIF9fbW9kLCBjaGFyIF9fbW9kbCk7DQogIH07DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+DQogICAgY2xhc3MgbnVtcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldA0KICAgIHsN
CiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5
cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBs
b2NhbGU6OmlkIGlkOw0KDQogICAgcHJpdmF0ZToNCiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFs
X3BvaW50Ow0KICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7DQogICAgICBjb25zdCBj
aGFyKiBfTV9ncm91cGluZzsNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fdHJ1ZW5hbWU7DQog
ICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX2ZhbHNlbmFtZTsNCg0KICAgIHB1YmxpYzoNCiAgICAg
IGV4cGxpY2l0DQogICAgICBudW1wdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZh
Y2V0KF9fcmVmcykNCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9DQoNCiAgICAg
IGV4cGxpY2l0DQogICAgICBudW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVm
cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpDQogICAgICB7IF9NX2luaXRpYWxpemVfbnVt
cHVuY3QoX19jbG9jKTsgfQ0KDQogICAgICBjaGFyX3R5cGUNCiAgICAgIGRlY2ltYWxfcG9pbnQo
KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgpOyB9DQoNCiAg
ICAgIGNoYXJfdHlwZQ0KICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0DQogICAgICB7IHJldHVy
biB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0NCg0KICAgICAgc3RyaW5nDQogICAgICBncm91
cGluZygpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9DQoNCiAg
ICAgIHN0cmluZ190eXBlDQogICAgICB0cnVlbmFtZSgpIGNvbnN0DQogICAgICB7IHJldHVybiB0
aGlzLT5kb190cnVlbmFtZSgpOyB9DQoNCiAgICAgIHN0cmluZ190eXBlDQogICAgICBmYWxzZW5h
bWUoKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0NCg0KICAg
IHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5udW1wdW5jdCgpOw0KDQogICAgICB2
aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0DQogICAgICB7
IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQog
ICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5k
c19zZXA7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmcNCiAgICAgIGRvX2dyb3VwaW5nKCkgY29u
c3QNCiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5n
X3R5cGUNCiAgICAgIGRvX3RydWVuYW1lKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3RydWVu
YW1lOyB9DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX2ZhbHNlbmFtZSgp
IGNvbnN0DQogICAgICB7IHJldHVybiBfTV9mYWxzZW5hbWU7IH0NCg0KDQogICAgICB2b2lkDQog
ICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX1NfY19sb2Nh
bGUpOw0KICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGxvY2FsZTo6
aWQgbnVtcHVuY3Q8X0NoYXJUPjo6aWQ7DQoNCiAgdGVtcGxhdGU8Pg0KICAgIG51bXB1bmN0PGNo
YXI+Ojp+bnVtcHVuY3QoKTsNCg0KICB0ZW1wbGF0ZTw+DQogICAgdm9pZA0KICAgIG51bXB1bmN0
PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsNCiMgNTUw
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMw0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGljIG51
bXB1bmN0PF9DaGFyVD4NCiAgICB7DQoNCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbnVt
cHVuY3Q7DQoNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQog
ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOw0KDQogICAgICBl
eHBsaWNpdA0KICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9f
cmVmcyA9IDApDQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQ0KICAgICAgew0KICAg
ICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QsIF9fcyk7DQogICAg
ICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOw0KICAgICAg
fQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfm51bXB1bmN0X2J5bmFt
ZSgpDQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9
DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+
DQogICAgY2xhc3MgbnVtX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgX19udW1f
YmFzZQ0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsNCiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2Nh
bGU6OmlkIGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbnVtX2dldChzaXplX3QgX19yZWZz
ID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAg
ICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0K
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdA0KICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsg
fQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIGxvbmcmIF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBf
X2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQo
aXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdA0K
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192
KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90
eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
Z2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5cGUN
CiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p
bywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9f
dikgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywg
X19lcnIsIF9fdik7IH0NCg0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUg
X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9uZyYgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQ0KDQogICAgICBp
dGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVk
IGxvbmcgbG9uZyYgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4s
IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQ0KDQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAg
Z2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QNCiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0N
Cg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCBkb3VibGUmIF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBf
X2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQo
aXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdA0KICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsg
fQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIHZvaWQqJiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwg
X19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0
dWFsIH5udW1fZ2V0KCkgeyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgX01fZXh0cmFjdF9m
bG9hdChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYs
DQogICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyYgX194dHJjKSBjb25zdDsNCg0KICAgICAg
aXRlcl90eXBlDQogICAgICBfTV9leHRyYWN0X2ludChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9z
X2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsDQogICAgICAgICAgICAgICAgICAgICBzdHJpbmcm
IF9feHRyYywgaW50JiBfX2Jhc2UpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0K
ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp
b3N0YXRlJiwgYm9vbCYpIGNvbnN0Ow0KDQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAg
ICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3Rh
dGUmLCBsb25nJikgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19n
ZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLA0KICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCYpIGNvbnN0Ow0KDQogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFz
ZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwNCiAgICAgICAgICAgICB1bnNpZ25lZCBpbnQm
KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5
cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsDQogICAg
ICAgICAgICAgdW5zaWduZWQgbG9uZyYpIGNvbnN0Ow0KDQoNCiAgICAgIHZpcnR1YWwgaXRlcl90
eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLA0KICAgICAgICAgICAgIGxvbmcgbG9uZyYpIGNvbnN0Ow0KDQog
ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBl
LCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwNCiAgICAgICAgICAgICB1bnNp
Z25lZCBsb25nIGxvbmcmKSBjb25zdDsNCg0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAg
ICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwNCiAgICAgICAgICAgICBmbG9hdCYpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYs
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwNCiAgICAgICAgICAgICBkb3VibGUmKSBjb25zdDsN
Cg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJf
dHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsDQogICAgICAgICAgICAg
bG9uZyBkb3VibGUmKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRv
X2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsDQogICAgICAgICAgICAgdm9pZComKSBjb25zdDsNCiAgICB9Ow0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBsb2NhbGU6OmlkIG51bV9n
ZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7DQojIDcyMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9sb2NhbGVfZmFjZXRzLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfT3V0SXRlcj4NCiAgICBjbGFzcyBudW1fcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1
YmxpYyBfX251bV9iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7DQoNCiAgICAg
IHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbnVtX3B1dChz
aXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAgICAgIGl0
ZXJfdHlwZQ0KICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw
ZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9f
cywgX19mLCBfX2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBwdXQoaXRl
cl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNv
bnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsg
fQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYg
X19mLCBjaGFyX3R5cGUgX19maWxsLA0KICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25z
dA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0N
Cg0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYg
X19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdA0KICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90
eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9f
ZmlsbCwNCiAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdA0KICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0NCg0KDQogICAgICBp
dGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5
cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0
KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBwdXQo
aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwNCiAgICAgICAg
ICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19z
LCBfX2YsIF9fZmlsbCwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVy
X3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLA0KICAgICAgICAgIGNv
bnN0IHZvaWQqIF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9f
ZiwgX19maWxsLCBfX3YpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVmFsdWVUPg0KICAgICAgICBpdGVyX3R5cGUNCiAgICAgICAgX01fY29udmVydF9mbG9h
dChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgX19tb2QsIF9WYWx1ZVQgX192KSBjb25zdDsNCg0KICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4NCiAgICAgICAgaXRlcl90eXBlDQogICAgICAgIF9N
X2NvbnZlcnRfaW50KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws
DQogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2QsIGNoYXIgX19tb2RsLCBfVmFsdWVU
IF9fdikgY29uc3Q7DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgX01fd2lkZW5fZmxvYXQoaXRl
cl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY2hhciogX19jcywNCiAg
ICAgICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3Q7DQoNCiAgICAgIGl0ZXJfdHlwZQ0K
ICAgICAgX01fd2lkZW5faW50KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBf
X2ZpbGwsIGNoYXIqIF9fY3MsDQogICAgICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdDsN
Cg0KICAgICAgaXRlcl90eXBlDQogICAgICBfTV9pbnNlcnQoaXRlcl90eXBlLCBpb3NfYmFzZSYg
X19pbywgY2hhcl90eXBlIF9fZmlsbCwNCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq
IF9fd3MsIGludCBfX2xlbikgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5udW1fcHV0
KCkgeyB9Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3Q7DQoNCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNo
YXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5
cGUNCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwg
dW5zaWduZWQgbG9uZykgY29uc3Q7DQoNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAg
IGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25n
IF9fdikgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRl
cl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcgbG9uZykg
Y29uc3Q7DQoNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX3B1dChpdGVyX3R5
cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3Q7DQoNCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYs
IGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdikgY29uc3Q7DQoNCiAgICAgIHZpcnR1
YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlw
ZSBfX2ZpbGwsIGNvbnN0IHZvaWQqIF9fdikgY29uc3Q7DQogICAgfTsNCg0KICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBsb2NhbGU6OmlkIG51bV9w
dXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOw0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
Pg0KICAgIGNsYXNzIGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpmYWNldA0KICAgIHsNCiAgICBw
dWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICBwcm90ZWN0ZWQ6DQoNCg0K
ICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9jb2xsYXRlOw0KDQogICAgcHVibGljOg0KICAg
ICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBjb2xsYXRl
KHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykNCiAgICAg
IHsgX01fY19sb2NhbGVfY29sbGF0ZSA9IF9TX2NfbG9jYWxlOyB9DQoNCg0KICAgICAgZXhwbGlj
aXQNCiAgICAgIGNvbGxhdGUoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKQ0K
ICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykNCiAgICAgIHsgX01fY19sb2NhbGVfY29sbGF0
ZSA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7IH0NCg0KICAgICAgaW50DQogICAgICBjb21w
YXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0IF9DaGFyVCogX19oaTEsDQogICAgICAgICAg
ICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0DQogICAg
ICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9fbG8xLCBfX2hpMSwgX19sbzIsIF9faGkyKTsg
fQ0KDQogICAgICBzdHJpbmdfdHlwZQ0KICAgICAgdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19s
bywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJh
bnNmb3JtKF9fbG8sIF9faGkpOyB9DQoNCiAgICAgIGxvbmcNCiAgICAgIGhhc2goY29uc3QgX0No
YXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlz
LT5kb19oYXNoKF9fbG8sIF9faGkpOyB9DQoNCg0KICAgICAgaW50DQogICAgICBfTV9jb21wYXJl
KGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0Ow0KDQogICAgICBzaXplX3QNCiAg
ICAgIF9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0Ow0K
DQogIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5jb2xsYXRlKCkNCiAgICAgIHsN
CiAgICAgICAgaWYgKF9NX2NfbG9jYWxlX2NvbGxhdGUgIT0gX1NfY19sb2NhbGUpDQogICAgICAg
ICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xsYXRlKTsNCiAgICAgIH0NCg0K
ICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwg
Y29uc3QgX0NoYXJUKiBfX2hpMSwNCiAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xv
MiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5
cGUNCiAgICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCog
X19oaSkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgbG9uZw0KICAgICAgZG9faGFzaChjb25zdCBf
Q2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7DQogICAgfTsNCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgbG9jYWxlOjppZCBjb2xsYXRlPF9DaGFyVD46Omlk
Ow0KDQoNCiAgdGVtcGxhdGU8Pg0KICAgIGludA0KICAgIGNvbGxhdGU8Y2hhcj46Ol9NX2NvbXBh
cmUoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSBjb25zdDsNCg0KICB0ZW1wbGF0ZTw+DQogICAg
c2l6ZV90DQogICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqLCBjb25zdCBjaGFy
Kiwgc2l6ZV90KSBjb25zdDsNCiMgOTE3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2Fs
ZV9mYWNldHMuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgY29s
bGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+DQogICAgew0KICAgIHB1YmxpYzoN
CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3Ry
aW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBjb2xsYXRl
X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAgOiBjb2xs
YXRlPF9DaGFyVD4oX19yZWZzKQ0KICAgICAgew0KICAgICAgICBpZiAoX01fY19sb2NhbGVfY29s
bGF0ZSAhPSBfU19jX2xvY2FsZSkNCiAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2Nf
bG9jYWxlX2NvbGxhdGUpOw0KICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVf
Y29sbGF0ZSwgX19zKTsNCiAgICAgIH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwN
CiAgICAgIH5jb2xsYXRlX2J5bmFtZSgpIHsgfQ0KICAgIH07DQoNCg0KICBjbGFzcyB0aW1lX2Jh
c2UNCiAgew0KICBwdWJsaWM6DQogICAgZW51bSBkYXRlb3JkZXIgeyBub19vcmRlciwgZG15LCBt
ZHksIHltZCwgeWRtIH07DQogIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAg
IGNsYXNzIF9fdGltZXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQNCiAgICB7DQogICAgcHVi
bGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBfX2NoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGxvY2Fs
ZTo6aWQgaWQ7DQoNCg0KICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCogX1NfdGltZXpvbmVzWzE0
XTsNCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfdGltZXB1
bmN0Ow0KICAgICAgY29uc3QgY2hhciogX01fbmFtZV90aW1lcHVuY3Q7DQogICAgICBjb25zdCBf
Q2hhclQqIF9NX2RhdGVfZm9ybWF0Ow0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX2VyYV9m
b3JtYXQ7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVfZm9ybWF0Ow0KICAgICAgY29uc3Qg
X0NoYXJUKiBfTV90aW1lX2VyYV9mb3JtYXQ7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVf
dGltZV9mb3JtYXQ7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfdGltZV9lcmFfZm9ybWF0
Ow0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbTsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fcG07
DQogICAgICBjb25zdCBfQ2hhclQqIF9NX2FtX3BtX2Zvcm1hdDsNCg0KDQogICAgICBjb25zdCBf
Q2hhclQqIF9NX2RheTE7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTI7DQogICAgICBjb25z
dCBfQ2hhclQqIF9NX2RheTM7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTQ7DQogICAgICBj
b25zdCBfQ2hhclQqIF9NX2RheTU7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTY7DQogICAg
ICBjb25zdCBfQ2hhclQqIF9NX2RheTc7DQoNCg0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlf
YTE7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMjsNCiAgICAgIGNvbnN0IF9DaGFyVCog
X01fZGF5X2EzOw0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTQ7DQogICAgICBjb25zdCBf
Q2hhclQqIF9NX2RheV9hNTsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E2Ow0KICAgICAg
Y29uc3QgX0NoYXJUKiBfTV9kYXlfYTc7DQoNCg0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250
aDAxOw0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAyOw0KICAgICAgY29uc3QgX0NoYXJU
KiBfTV9tb250aDAzOw0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA0Ow0KICAgICAgY29u
c3QgX0NoYXJUKiBfTV9tb250aDA1Ow0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA2Ow0K
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA3Ow0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9t
b250aDA4Ow0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA5Ow0KICAgICAgY29uc3QgX0No
YXJUKiBfTV9tb250aDEwOw0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDExOw0KICAgICAg
Y29uc3QgX0NoYXJUKiBfTV9tb250aDEyOw0KDQoNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u
dGhfYTAxOw0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDI7DQogICAgICBjb25zdCBf
Q2hhclQqIF9NX21vbnRoX2EwMzsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA0Ow0K
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDU7DQogICAgICBjb25zdCBfQ2hhclQqIF9N
X21vbnRoX2EwNjsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA3Ow0KICAgICAgY29u
c3QgX0NoYXJUKiBfTV9tb250aF9hMDg7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2Ew
OTsNCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTEwOw0KICAgICAgY29uc3QgX0NoYXJU
KiBfTV9tb250aF9hMTE7DQogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMjsNCg0KICAg
IHB1YmxpYzoNCiAgICAgIGV4cGxpY2l0DQogICAgICBfX3RpbWVwdW5jdChzaXplX3QgX19yZWZz
ID0gMCkNCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpLCBfTV9uYW1lX3RpbWVwdW5jdCgi
QyIpDQogICAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0NCg0KICAgICAgZXhwbGlj
aXQNCiAgICAgIF9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3Ms
IHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcyksIF9NX25h
bWVfdGltZXB1bmN0KF9fcykNCiAgICAgIHsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9j
KTsgfQ0KDQogICAgICB2b2lkDQogICAgICBfTV9wdXQoX0NoYXJUKiBfX3MsIHNpemVfdCBfX21h
eGxlbiwgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCwNCiAgICAgICAgICAgICBjb25zdCB0bSogX190
bSkgY29uc3Q7DQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX2RhdGVfZm9ybWF0cyhjb25zdCBfQ2hh
clQqKiBfX2RhdGUpIGNvbnN0DQogICAgICB7DQoNCiAgICAgICAgX19kYXRlWzBdID0gX01fZGF0
ZV9mb3JtYXQ7DQogICAgICAgIF9fZGF0ZVsxXSA9IF9NX2RhdGVfZXJhX2Zvcm1hdDsNCiAgICAg
IH0NCg0KICAgICAgdm9pZA0KICAgICAgX01fdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9f
dGltZSkgY29uc3QNCiAgICAgIHsNCg0KICAgICAgICBfX3RpbWVbMF0gPSBfTV90aW1lX2Zvcm1h
dDsNCiAgICAgICAgX190aW1lWzFdID0gX01fdGltZV9lcmFfZm9ybWF0Ow0KICAgICAgfQ0KDQog
ICAgICB2b2lkDQogICAgICBfTV9hbXBtKGNvbnN0IF9DaGFyVCoqIF9fYW1wbSkgY29uc3QNCiAg
ICAgIHsNCiAgICAgICAgX19hbXBtWzBdID0gX01fYW07DQogICAgICAgIF9fYW1wbVsxXSA9IF9N
X3BtOw0KICAgICAgfQ0KDQogICAgICB2b2lkDQogICAgICBfTV9kYXRlX3RpbWVfZm9ybWF0cyhj
b25zdCBfQ2hhclQqKiBfX2R0KSBjb25zdA0KICAgICAgew0KDQogICAgICAgIF9fZHRbMF0gPSBf
TV9kYXRlX3RpbWVfZm9ybWF0Ow0KICAgICAgICBfX2R0WzFdID0gX01fZGF0ZV90aW1lX2VyYV9m
b3JtYXQ7DQogICAgICB9DQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX2RheXMoY29uc3QgX0NoYXJU
KiogX19kYXlzKSBjb25zdA0KICAgICAgew0KICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXkxOw0K
ICAgICAgICBfX2RheXNbMV0gPSBfTV9kYXkyOw0KICAgICAgICBfX2RheXNbMl0gPSBfTV9kYXkz
Ow0KICAgICAgICBfX2RheXNbM10gPSBfTV9kYXk0Ow0KICAgICAgICBfX2RheXNbNF0gPSBfTV9k
YXk1Ow0KICAgICAgICBfX2RheXNbNV0gPSBfTV9kYXk2Ow0KICAgICAgICBfX2RheXNbNl0gPSBf
TV9kYXk3Ow0KICAgICAgfQ0KDQogICAgICB2b2lkDQogICAgICBfTV9kYXlzX2FiYnJldmlhdGVk
KGNvbnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QNCiAgICAgIHsNCiAgICAgICAgX19kYXlzWzBd
ID0gX01fZGF5X2ExOw0KICAgICAgICBfX2RheXNbMV0gPSBfTV9kYXlfYTI7DQogICAgICAgIF9f
ZGF5c1syXSA9IF9NX2RheV9hMzsNCiAgICAgICAgX19kYXlzWzNdID0gX01fZGF5X2E0Ow0KICAg
ICAgICBfX2RheXNbNF0gPSBfTV9kYXlfYTU7DQogICAgICAgIF9fZGF5c1s1XSA9IF9NX2RheV9h
NjsNCiAgICAgICAgX19kYXlzWzZdID0gX01fZGF5X2E3Ow0KICAgICAgfQ0KDQogICAgICB2b2lk
DQogICAgICBfTV9tb250aHMoY29uc3QgX0NoYXJUKiogX19tb250aHMpIGNvbnN0DQogICAgICB7
DQogICAgICAgIF9fbW9udGhzWzBdID0gX01fbW9udGgwMTsNCiAgICAgICAgX19tb250aHNbMV0g
PSBfTV9tb250aDAyOw0KICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoMDM7DQogICAgICAg
IF9fbW9udGhzWzNdID0gX01fbW9udGgwNDsNCiAgICAgICAgX19tb250aHNbNF0gPSBfTV9tb250
aDA1Ow0KICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoMDY7DQogICAgICAgIF9fbW9udGhz
WzZdID0gX01fbW9udGgwNzsNCiAgICAgICAgX19tb250aHNbN10gPSBfTV9tb250aDA4Ow0KICAg
ICAgICBfX21vbnRoc1s4XSA9IF9NX21vbnRoMDk7DQogICAgICAgIF9fbW9udGhzWzldID0gX01f
bW9udGgxMDsNCiAgICAgICAgX19tb250aHNbMTBdID0gX01fbW9udGgxMTsNCiAgICAgICAgX19t
b250aHNbMTFdID0gX01fbW9udGgxMjsNCiAgICAgIH0NCg0KICAgICAgdm9pZA0KICAgICAgX01f
bW9udGhzX2FiYnJldmlhdGVkKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdA0KICAgICAg
ew0KICAgICAgICBfX21vbnRoc1swXSA9IF9NX21vbnRoX2EwMTsNCiAgICAgICAgX19tb250aHNb
MV0gPSBfTV9tb250aF9hMDI7DQogICAgICAgIF9fbW9udGhzWzJdID0gX01fbW9udGhfYTAzOw0K
ICAgICAgICBfX21vbnRoc1szXSA9IF9NX21vbnRoX2EwNDsNCiAgICAgICAgX19tb250aHNbNF0g
PSBfTV9tb250aF9hMDU7DQogICAgICAgIF9fbW9udGhzWzVdID0gX01fbW9udGhfYTA2Ow0KICAg
ICAgICBfX21vbnRoc1s2XSA9IF9NX21vbnRoX2EwNzsNCiAgICAgICAgX19tb250aHNbN10gPSBf
TV9tb250aF9hMDg7DQogICAgICAgIF9fbW9udGhzWzhdID0gX01fbW9udGhfYTA5Ow0KICAgICAg
ICBfX21vbnRoc1s5XSA9IF9NX21vbnRoX2ExMDsNCiAgICAgICAgX19tb250aHNbMTBdID0gX01f
bW9udGhfYTExOw0KICAgICAgICBfX21vbnRoc1sxMV0gPSBfTV9tb250aF9hMTI7DQogICAgICB9
DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+X190aW1lcHVuY3QoKTsN
Cg0KDQogICAgICB2b2lkDQogICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxl
IF9fY2xvYyA9IF9TX2NfbG9jYWxlKTsNCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4NCiAgICBsb2NhbGU6OmlkIF9fdGltZXB1bmN0PF9DaGFyVD46OmlkOw0KDQoNCiAgdGVt
cGxhdGU8Pg0KICAgIF9fdGltZXB1bmN0PGNoYXI+Ojp+X190aW1lcHVuY3QoKTsNCg0KICB0ZW1w
bGF0ZTw+DQogICAgY29uc3QgY2hhcioNCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X1NfdGltZXpv
bmVzWzE0XTsNCg0KICB0ZW1wbGF0ZTw+DQogICAgdm9pZA0KICAgIF9fdGltZXB1bmN0PGNoYXI+
OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7DQoNCiAgdGVtcGxh
dGU8Pg0KICAgIHZvaWQNCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01fcHV0KGNoYXIqLCBzaXpl
X3QsIGNvbnN0IGNoYXIqLCBjb25zdCB0bSopIGNvbnN0Ow0KIyAxMTY4ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+DQogICAgY29uc3QgX0NoYXJUKiBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfU190aW1lem9uZXNb
MTRdOw0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0K
ICAgIGNsYXNzIHRpbWVfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jh
c2UNCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
DQogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19z
dHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOw0KDQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBp
ZDsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIHRpbWVfZ2V0KHNpemVfdCBfX3JlZnMgPSAwKQ0K
ICAgICAgOiBsb2NhbGU6OmZhY2V0IChfX3JlZnMpIHsgfQ0KDQogICAgICBkYXRlb3JkZXINCiAg
ICAgIGRhdGVfb3JkZXIoKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGF0ZV9vcmRl
cigpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVn
LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX2dldF90aW1lKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9DQoNCiAgICAg
IGl0ZXJfdHlwZQ0KICAgICAgZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB0bSogX190bSkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF9kYXRlKF9f
YmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAg
ICAgZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
JiBfX2lvLA0KICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSog
X190bSkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF93ZWVrZGF5KF9fYmVnLCBf
X2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0
X21vbnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sDQogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9f
dG0pIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfbW9udGhuYW1lKF9fYmVnLCBf
X2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0
X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0K
ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QN
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF95ZWFyKF9fYmVnLCBfX2VuZCwgX19pbywgX19l
cnIsIF9fdG0pOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+dGlt
ZV9nZXQoKSB7IH0NCg0KICAgICAgdmlydHVhbCBkYXRlb3JkZXINCiAgICAgIGRvX2RhdGVfb3Jk
ZXIoKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldF90aW1l
KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAg
ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0Ow0K
DQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9f
YmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7DQoNCiAgICAgIHZpcnR1
YWwgaXRlcl90eXBlDQogICAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmLA0KICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
DQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgdG0qIF9fdG0pIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAg
ZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf
X2lvLA0KICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190
bSkgY29uc3Q7DQoNCg0KICAgICAgdm9pZA0KICAgICAgX01fZXh0cmFjdF9udW0oaXRlcl90eXBl
JiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwNCiAgICAgICAgICAgICAg
ICAgICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4sDQogICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlLA0KICAgICAgICAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsNCg0KDQoNCiAgICAgIHZvaWQNCiAg
ICAgIF9NX2V4dHJhY3RfbmFtZShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBp
bnQmIF9fbWVtYmVyLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFt
ZXMsIHNpemVfdCBfX2luZGV4bGVuLA0KICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VycikgY29uc3Q7DQoNCg0KICAgICAgdm9pZA0KICAgICAgX01fZXh0cmFjdF92
aWFfZm9ybWF0KGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGlvc19iYXNlJiBf
X2lvLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgdG0qIF9fdG0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBf
X2Zvcm1hdCkgY29uc3Q7DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9Jbkl0ZXI+DQogICAgbG9jYWxlOjppZCB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
OjppZDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQog
ICAgY2xhc3MgdGltZV9nZXRfYnluYW1lIDogcHVibGljIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRl
cj4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
DQogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOw0KDQogICAgICBleHBsaWNpdA0KICAg
ICAgdGltZV9nZXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkNCiAgICAg
IDogdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPihfX3JlZnMpIHsgfQ0KDQogICAgcHJvdGVjdGVk
Og0KICAgICAgdmlydHVhbA0KICAgICAgfnRpbWVfZ2V0X2J5bmFtZSgpIHsgfQ0KICAgIH07DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBjbGFz
cyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlDQogICAg
ew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAg
dHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk
Ow0KDQogICAgICBleHBsaWNpdA0KICAgICAgdGltZV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApDQog
ICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAg
ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNv
bnN0IHRtKiBfX3RtLA0KICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFy
VCogX19lbmQpIGNvbnN0Ow0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUg
X19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwNCiAgICAgICAgICBjb25zdCB0
bSogX190bSwgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCA9IDApIGNvbnN0DQogICAgICB7IHJl
dHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdG0sIF9fZm9ybWF0LCBfX21v
ZCk7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH50aW1lX3B1dCgp
DQogICAgICB7IH0NCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX3B1dChpdGVy
X3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY29uc3QgdG0qIF9f
dG0sDQogICAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3Q7DQogICAg
fTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAg
IGxvY2FsZTo6aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOw0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgY2xhc3MgdGltZV9wdXRf
YnluYW1lIDogcHVibGljIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+DQogICAgew0KICAgIHB1
YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBf
T3V0SXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICB0aW1lX3B1dF9ieW5h
bWUoY29uc3QgY2hhciogLCBzaXplX3QgX19yZWZzID0gMCkNCiAgICAgIDogdGltZV9wdXQ8X0No
YXJULCBfT3V0SXRlcj4oX19yZWZzKQ0KICAgICAgeyB9Ow0KDQogICAgcHJvdGVjdGVkOg0KICAg
ICAgdmlydHVhbA0KICAgICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsgfQ0KICAgIH07DQoNCg0KICBj
bGFzcyBtb25leV9iYXNlDQogIHsNCiAgcHVibGljOg0KICAgIGVudW0gcGFydCB7IG5vbmUsIHNw
YWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07DQogICAgc3RydWN0IHBhdHRlcm4geyBjaGFyIGZp
ZWxkWzRdOyB9Ow0KDQogICAgc3RhdGljIGNvbnN0IHBhdHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJu
Ow0KDQoNCg0KICAgIHN0YXRpYyBwYXR0ZXJuDQogICAgX1NfY29uc3RydWN0X3BhdHRlcm4oY2hh
ciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKTsNCiAgfTsNCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+DQogICAgY2xhc3MgbW9uZXlwdW5jdCA6
IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFzZQ0KICAgIHsNCiAgICBwdWJs
aWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGludGwgPSBfSW50bDsNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KDQogICAgcHJpdmF0
ZToNCiAgICAgIGNvbnN0IGNoYXIqIF9NX2dyb3VwaW5nOw0KICAgICAgY2hhcl90eXBlIF9NX2Rl
Y2ltYWxfcG9pbnQ7DQogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsNCiAgICAgIGNv
bnN0IGNoYXJfdHlwZSogX01fY3Vycl9zeW1ib2w7DQogICAgICBjb25zdCBjaGFyX3R5cGUqIF9N
X3Bvc2l0aXZlX3NpZ247DQogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX25lZ2F0aXZlX3NpZ247
DQogICAgICBpbnQgX01fZnJhY19kaWdpdHM7DQogICAgICBwYXR0ZXJuIF9NX3Bvc19mb3JtYXQ7
DQogICAgICBwYXR0ZXJuIF9NX25lZ19mb3JtYXQ7DQoNCiAgICBwdWJsaWM6DQogICAgICBleHBs
aWNpdA0KICAgICAgbW9uZXlwdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0
KF9fcmVmcykNCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0NCg0KICAgICAg
ZXhwbGljaXQNCiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIq
IF9fcywgc2l6ZV90IF9fcmVmcyA9IDApDQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQ0K
ICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jbG9jLCBfX3MpOyB9DQoNCiAgICAg
IGNoYXJfdHlwZQ0KICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0DQogICAgICB7IHJldHVybiB0
aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0NCg0KICAgICAgY2hhcl90eXBlDQogICAgICB0aG91
c2FuZHNfc2VwKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAo
KTsgfQ0KDQogICAgICBzdHJpbmcNCiAgICAgIGdyb3VwaW5nKCkgY29uc3QNCiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAgICAgIGN1
cnJfc3ltYm9sKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7
IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAgICAgIHBvc2l0aXZlX3NpZ24oKSBjb25zdA0KICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zaXRpdmVfc2lnbigpOyB9DQoNCiAgICAgIHN0cmluZ190
eXBlDQogICAgICBuZWdhdGl2ZV9zaWduKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X25lZ2F0aXZlX3NpZ24oKTsgfQ0KDQogICAgICBpbnQNCiAgICAgIGZyYWNfZGlnaXRzKCkgY29u
c3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRzKCk7IH0NCg0KICAgICAgcGF0
dGVybg0KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19w
b3NfZm9ybWF0KCk7IH0NCg0KICAgICAgcGF0dGVybg0KICAgICAgbmVnX2Zvcm1hdCgpIGNvbnN0
DQogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7IH0NCg0KICAgIHByb3RlY3Rl
ZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5tb25leXB1bmN0KCk7DQoNCiAgICAgIHZpcnR1YWwg
Y2hhcl90eXBlDQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QNCiAgICAgIHsgcmV0dXJu
IF9NX2RlY2ltYWxfcG9pbnQ7IH0NCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRv
X3Rob3VzYW5kc19zZXAoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsg
fQ0KDQogICAgICB2aXJ0dWFsIHN0cmluZw0KICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdA0KICAg
ICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0K
ICAgICAgZG9fY3Vycl9zeW1ib2woKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fY3Vycl9zeW1i
b2w7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAgICAgZG9fcG9zaXRpdmVfc2ln
bigpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9wb3NpdGl2ZV9zaWduOyB9DQoNCiAgICAgIHZp
cnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX25lZ2F0aXZlX3NpZ24oKSBjb25zdA0KICAgICAg
eyByZXR1cm4gX01fbmVnYXRpdmVfc2lnbjsgfQ0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAg
ZG9fZnJhY19kaWdpdHMoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fZnJhY19kaWdpdHM7IH0N
Cg0KICAgICAgdmlydHVhbCBwYXR0ZXJuDQogICAgICBkb19wb3NfZm9ybWF0KCkgY29uc3QNCiAg
ICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7IH0NCg0KICAgICAgdmlydHVhbCBwYXR0ZXJuDQog
ICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7
IH0NCg0KDQogICAgICAgdm9pZA0KICAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Nf
bG9jYWxlIF9fY2xvYyA9IF9TX2NfbG9jYWxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBfX25hbWUgPSBfX251bGwpOw0KICAgIH07DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPg0KICAgIGxvY2FsZTo6aWQgbW9uZXlwdW5jdDxf
Q2hhclQsIF9JbnRsPjo6aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9J
bnRsPg0KICAgIGNvbnN0IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsNCg0K
ICB0ZW1wbGF0ZTw+DQogICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKTsN
Cg0KICB0ZW1wbGF0ZTw+DQogICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0
KCk7DQoNCiAgdGVtcGxhdGU8Pg0KICAgIHZvaWQNCiAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+
OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwgY29uc3QgY2hhciopOw0KDQog
IHRlbXBsYXRlPD4NCiAgICB2b2lkDQogICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46Ol9NX2lu
aXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFyKik7DQojIDE1MDUgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4NCiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFtZSA6
IHB1YmxpYyBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+DQogICAgew0KICAgICAgX19jX2xvY2Fs
ZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0Ow0KDQogICAgcHVibGljOg0KICAgICAgdHlwZWRlZiBf
Q2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJp
bmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOw0KDQogICAg
ICBleHBsaWNpdA0KICAgICAgbW9uZXlwdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXpl
X3QgX19yZWZzID0gMCkNCiAgICAgIDogbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPihfX3JlZnMp
DQogICAgICB7DQogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1
bmN0LCBfX3MpOw0KICAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01fY19sb2NhbGVf
bW9uZXlwdW5jdCk7DQogICAgICB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQog
ICAgICB+bW9uZXlwdW5jdF9ieW5hbWUoKQ0KICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9N
X2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIGJvb2wgX0ludGw+DQogICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxfQ2hh
clQsIF9JbnRsPjo6aW50bDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9Jbkl0ZXI+DQogICAgY2xhc3MgbW9uZXlfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQNCiAg
ICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAg
ICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJUPiBzdHJpbmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAg
ICAgIGV4cGxpY2l0DQogICAgICBtb25leV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxl
OjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5
cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywNCiAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBj
b25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwgX19p
bywgX19lcnIsIF9fdW5pdHMpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0KGl0ZXJf
dHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLA0K
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRz
KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwg
X19pbywgX19lcnIsIF9fZGlnaXRzKTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVh
bA0KICAgICAgfm1vbmV5X2dldCgpIHsgfQ0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAg
ICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlv
c19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9u
ZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAg
ICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlv
c19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3Ry
aW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsNCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hh
clQsIF9Jbkl0ZXI+OjppZDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9PdXRJdGVyPg0KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0DQog
ICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAg
IHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJUPiBzdHJpbmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAg
ICAgIGV4cGxpY2l0DQogICAgICBtb25leV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxl
OjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5
cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgY2hhcl90eXBl
IF9fZmlsbCwgbG9uZyBkb3VibGUgX191bml0cykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX3VuaXRzKTsgfQ0KDQogICAgICBp
dGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2Um
IF9faW8sDQogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9f
ZGlnaXRzKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBf
X2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVh
bA0KICAgICAgfm1vbmV5X3B1dCgpIHsgfQ0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAg
ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hh
cl90eXBlIF9fZmlsbCwNCiAgICAgICAgICAgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdDsN
Cg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBi
b29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsDQogICAgICAgICAg
ICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsNCiAgICB9Ow0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgbG9jYWxlOjppZCBt
b25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOw0KDQoNCiAgc3RydWN0IG1lc3NhZ2VzX2Jh
c2UNCiAgew0KICAgIHR5cGVkZWYgaW50IGNhdGFsb2c7DQogIH07DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPg0KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6ZmFjZXQs
IHB1YmxpYyBtZXNzYWdlc19iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBz
dHJpbmdfdHlwZTsNCg0KICAgIHByb3RlY3RlZDoNCg0KDQogICAgICBfX2NfbG9jYWxlIF9NX2Nf
bG9jYWxlX21lc3NhZ2VzOw0KDQoNCiAgICAgIGNvbnN0IGNoYXIqIF9NX25hbWVfbWVzc2FnZXM7
DQoNCg0KICAgIHB1YmxpYzoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KDQogICAgICBl
eHBsaWNpdA0KICAgICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVmcyA9IDApDQogICAgICA6IGxvY2Fs
ZTo6ZmFjZXQoX19yZWZzKSwgX01fbmFtZV9tZXNzYWdlcygiQyIpDQogICAgICB7IF9NX2NfbG9j
YWxlX21lc3NhZ2VzID0gX1NfY19sb2NhbGU7IH0NCg0KDQogICAgICBleHBsaWNpdA0KICAgICAg
bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fbmFtZSwgc2l6ZV90IF9f
cmVmcyA9IDApDQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQ0KICAgICAgew0KICAgICAg
ICBfTV9uYW1lX21lc3NhZ2VzID0gX19uYW1lOw0KICAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdl
cyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7DQogICAgICB9DQoNCiAgICAgIGNhdGFsb2cN
CiAgICAgIG9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYg
X19sb2MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOyB9
DQoNCg0KICAgICAgY2F0YWxvZw0KICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4m
LCBjb25zdCBsb2NhbGUmLCBjb25zdCBjaGFyKikgY29uc3Q7DQoNCiAgICAgIHN0cmluZ190eXBl
DQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0
cmluZ190eXBlJiBfX3MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19jLCBf
X3NldCwgX19tc2dpZCwgX19zKTsgfQ0KDQogICAgICB2b2lkDQogICAgICBjbG9zZShjYXRhbG9n
IF9fYykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Nsb3NlKF9fYyk7IH0NCg0KICAg
IHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5tZXNzYWdlcygpDQogICAgICAgew0K
ICAgICAgICAgaWYgKF9NX2NfbG9jYWxlX21lc3NhZ2VzICE9IF9TX2NfbG9jYWxlKQ0KICAgICAg
ICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsNCiAgICAgICB9
DQoNCiAgICAgIHZpcnR1YWwgY2F0YWxvZw0KICAgICAgZG9fb3Blbihjb25zdCBiYXNpY19zdHJp
bmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBzdHJpbmdf
dHlwZQ0KICAgICAgZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmdfdHlwZSYg
X19kZmF1bHQpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIHZvaWQNCiAgICAgIGRvX2Nsb3NlKGNh
dGFsb2cpIGNvbnN0Ow0KDQoNCiAgICAgIGNoYXIqDQogICAgICBfTV9jb252ZXJ0X3RvX2NoYXIo
Y29uc3Qgc3RyaW5nX3R5cGUmIF9fbXNnKSBjb25zdA0KICAgICAgew0KDQogICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdF9jYXN0PF9DaGFyVCo+KF9fbXNnLmNfc3Ry
KCkpKTsNCiAgICAgIH0NCg0KDQogICAgICBzdHJpbmdfdHlwZQ0KICAgICAgX01fY29udmVydF9m
cm9tX2NoYXIoY2hhciogX19tc2cpIGNvbnN0DQogICAgICB7DQoNCiAgICAgICAgc2l6ZV90IF9f
bGVuID0gY2hhcl90cmFpdHM8Y2hhcj46Omxlbmd0aChfX21zZykgLSAxOw0KIyAxNzMwICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMw0KICAgICAgICByZXR1cm4g
c3RyaW5nX3R5cGUoKTsNCiAgICAgIH0NCiAgICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+DQogICAgbG9jYWxlOjppZCBtZXNzYWdlczxfQ2hhclQ+OjppZDsNCg0KDQogIHRlbXBs
YXRlPD4NCiAgICBzdHJpbmcNCiAgICBtZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGlu
dCwgaW50LCBjb25zdCBzdHJpbmcmKSBjb25zdDsNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9jKysv
My4yL2k2ODYtcGMtY3lnd2luL2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIiAxIDMNCiMgMzcgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtY3lnd2luL2JpdHMvbWVzc2FnZXNfbWVtYmVycy5o
IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICB0eXBlbmFtZSBtZXNzYWdlczxf
Q2hhclQ+OjpjYXRhbG9nDQogICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19z
dHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqKSBjb25zdA0KICAgIHsgcmV0dXJuIHRoaXMtPmRvX29wZW4o
X19zLCBfX2xvYyk7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICB0eXBl
bmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nDQogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9f
b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdA0KICAg
IHsgcmV0dXJuIDA7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgdHlwZW5h
bWUgbWVzc2FnZXM8X0NoYXJUPjo6c3RyaW5nX3R5cGUNCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpk
b19nZXQoY2F0YWxvZywgaW50LCBpbnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3QNCiAgICB7IHJldHVybiBfX2RmYXVsdDsg
fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICB2b2lkDQogICAgbWVzc2FnZXM8
X0NoYXJUPjo6ZG9fY2xvc2UoY2F0YWxvZykgY29uc3QNCiAgICB7IH0NCiMgMTc0NCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMw0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2Fn
ZXM8X0NoYXJUPg0KICAgIHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy
X3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOw0K
DQogICAgICBleHBsaWNpdA0KICAgICAgbWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywg
c2l6ZV90IF9fcmVmcyA9IDApDQogICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZzKQ0KICAg
ICAgew0KICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX19zOw0KICAgICAgICBpZiAoX01fY19s
b2NhbGVfbWVzc2FnZXMgIT0gX1NfY19sb2NhbGUpDQogICAgICAgICAgX1NfZGVzdHJveV9jX2xv
Y2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7DQogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShf
TV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsNCiAgICAgIH0NCg0KICAgIHByb3RlY3RlZDoNCiAg
ICAgIHZpcnR1YWwNCiAgICAgIH5tZXNzYWdlc19ieW5hbWUoKQ0KICAgICAgeyB9DQogICAgfTsN
Cg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29s
DQogICAgaXNzcGFjZShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0
dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnNwYWNl
LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29s
DQogICAgaXNwcmludChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0
dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnByaW50
LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29s
DQogICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0
dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmNudHJs
LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29s
DQogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0
dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVy
LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29s
IGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1
c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpsb3dlciwgX19j
KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAg
IGlzYWxwaGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1
c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19j
KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAg
IGlzZGlnaXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1
c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19j
KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAg
IGlzcHVuY3QoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1
c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwdW5jdCwgX19j
KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAg
IGlzeGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyByZXR1cm4g
dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBf
X2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQog
ICAgaXNhbG51bShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJu
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBf
X2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQog
ICAgaXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJu
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmdyYXBoLCBf
X2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBfQ2hhclQN
CiAgICB0b3VwcGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyByZXR1
cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91cHBlcihfX2MpOyB9DQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBfQ2hhclQNCiAgICB0b2xvd2Vy
KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyByZXR1cm4gdXNlX2ZhY2V0
PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG9sb3dlcihfX2MpOyB9DQp9DQojIDQyICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFz
cyBiYXNpY19pb3MgOiBwdWJsaWMgaW9zX2Jhc2UNCiAgICB7DQogICAgcHVibGljOg0KDQogICAg
ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFp
dHM6OmludF90eXBlIGludF90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpw
b3NfdHlwZSBwb3NfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5
cGUgb2ZmX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQoNCg0KICAg
ICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsNCiAgICAgIHR5cGVkZWYgb3N0
cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOw0KICAg
ICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5
cGU7DQogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBf
X2lzdHJlYW1idWZfaXRlcjsNCiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVh
bWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOw0KDQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3RpZTsNCiAgICAgIG11dGFibGUgY2hhcl90
eXBlIF9NX2ZpbGw7DQogICAgICBtdXRhYmxlIGJvb2wgX01fZmlsbF9pbml0Ow0KICAgICAgYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3N0cmVhbWJ1ZjsNCg0KDQogICAgICBj
b25zdCBfX2N0eXBlX3R5cGUqIF9NX2ZjdHlwZTsNCg0KICAgICAgY29uc3QgX19udW1wdXRfdHlw
ZSogX01fZm51bXB1dDsNCg0KICAgICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51bWdldDsN
Cg0KICAgIHB1YmxpYzoNCiAgICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QNCiAgICAgIHsgcmV0
dXJuIHRoaXMtPmZhaWwoKSA/IDAgOiBjb25zdF9jYXN0PGJhc2ljX2lvcyo+KHRoaXMpOyB9DQoN
CiAgICAgIGJvb2wNCiAgICAgIG9wZXJhdG9yISgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlz
LT5mYWlsKCk7IH0NCg0KICAgICAgaW9zdGF0ZQ0KICAgICAgcmRzdGF0ZSgpIGNvbnN0DQogICAg
ICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0NCg0KICAgICAgdm9pZA0KICAgICAgY2xl
YXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCk7DQoNCiAgICAgIHZvaWQNCiAgICAgIHNldHN0
YXRlKGlvc3RhdGUgX19zdGF0ZSkNCiAgICAgIHsgdGhpcy0+Y2xlYXIodGhpcy0+cmRzdGF0ZSgp
IHwgX19zdGF0ZSk7IH0NCg0KICAgICAgYm9vbA0KICAgICAgZ29vZCgpIGNvbnN0DQogICAgICB7
IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0gMDsgfQ0KDQogICAgICBib29sDQogICAgICBlb2Yo
KSBjb25zdA0KICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJpdCkgIT0gMDsg
fQ0KDQogICAgICBib29sDQogICAgICBmYWlsKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuICh0aGlz
LT5yZHN0YXRlKCkgJiAoYmFkYml0IHwgZmFpbGJpdCkpICE9IDA7IH0NCg0KICAgICAgYm9vbA0K
ICAgICAgYmFkKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRi
aXQpICE9IDA7IH0NCg0KICAgICAgaW9zdGF0ZQ0KICAgICAgZXhjZXB0aW9ucygpIGNvbnN0DQog
ICAgICB7IHJldHVybiBfTV9leGNlcHRpb247IH0NCg0KICAgICAgdm9pZA0KICAgICAgZXhjZXB0
aW9ucyhpb3N0YXRlIF9fZXhjZXB0KQ0KICAgICAgew0KICAgICAgICBfTV9leGNlcHRpb24gPSBf
X2V4Y2VwdDsNCiAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRlKTsNCiAgICAg
IH0NCg0KDQogICAgICBleHBsaWNpdA0KICAgICAgYmFzaWNfaW9zKGJhc2ljX3N0cmVhbWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+KiBfX3NiKSA6IGlvc19iYXNlKCkNCiAgICAgIHsgdGhpcy0+aW5pdChf
X3NiKTsgfQ0KDQogICAgICB2aXJ0dWFsDQogICAgICB+YmFzaWNfaW9zKCkgeyB9DQoNCg0KICAg
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Kg0KICAgICAgdGllKCkgY29uc3QNCiAg
ICAgIHsgcmV0dXJuIF9NX3RpZTsgfQ0KDQogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4qDQogICAgICB0aWUoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX3RpZXN0
cikNCiAgICAgIHsNCiAgICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX29s
ZCA9IF9NX3RpZTsNCiAgICAgICAgX01fdGllID0gX190aWVzdHI7DQogICAgICAgIHJldHVybiBf
X29sZDsNCiAgICAgIH0NCg0KICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4q
DQogICAgICByZGJ1ZigpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWY7IH0NCg0K
ICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qDQogICAgICByZGJ1ZihiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7DQoNCiAgICAgIGJhc2ljX2lvcyYN
CiAgICAgIGNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3Jocyk7DQoNCiAgICAgIGNoYXJfdHlw
ZQ0KICAgICAgZmlsbCgpIGNvbnN0DQogICAgICB7DQogICAgICAgIGlmICghX01fZmlsbF9pbml0
KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRlbignICcpOw0K
ICAgICAgICAgICAgX01fZmlsbF9pbml0ID0gdHJ1ZTsNCiAgICAgICAgICB9DQogICAgICAgIHJl
dHVybiBfTV9maWxsOw0KICAgICAgfQ0KDQogICAgICBjaGFyX3R5cGUNCiAgICAgIGZpbGwoY2hh
cl90eXBlIF9fY2gpDQogICAgICB7DQogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IHRoaXMtPmZp
bGwoKTsNCiAgICAgICAgX01fZmlsbCA9IF9fY2g7DQogICAgICAgIHJldHVybiBfX29sZDsNCiAg
ICAgIH0NCg0KDQogICAgICBsb2NhbGUNCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2Mp
Ow0KDQogICAgICBjaGFyDQogICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVs
dCkgY29uc3Q7DQoNCiAgICAgIGNoYXJfdHlwZQ0KICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0
Ow0KDQogICAgcHJvdGVjdGVkOg0KDQogICAgICBiYXNpY19pb3MoKSA6IGlvc19iYXNlKCkNCiAg
ICAgIHsgfQ0KDQogICAgICB2b2lkDQogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+KiBfX3NiKTsNCg0KICAgICAgYm9vbA0KICAgICAgX01fY2hlY2tfZmFjZXQoY29u
c3QgbG9jYWxlOjpmYWNldCogX19mKSBjb25zdA0KICAgICAgew0KICAgICAgICBpZiAoIV9fZikN
CiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAg
ICAgfQ0KDQogICAgICB2b2lkDQogICAgICBfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBf
X2xvYyk7DQogICAgfTsNCn0NCg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9i
YXNpY19pb3MudGNjIiAxIDMNCiMgMzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNf
aW9zLnRjYyIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1Ry
YWl0cz46OmNsZWFyKGlvc3RhdGUgX19zdGF0ZSkNCiAgICB7DQogICAgICBpZiAodGhpcy0+cmRi
dWYoKSkNCiAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZTsNCiAgICAgIGVsc2UN
CiAgICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlIHwgYmFkYml0Ow0KICAgICAg
aWYgKCh0aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQ0KICAgICAgICBfX3Ro
cm93X2lvc19mYWlsdXJlKCJiYXNpY19pb3M6OmNsZWFyKGlvc3RhdGUpIGNhdXNlZCBleGNlcHRp
b24iKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPg0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Kg0KICAgIGJhc2ljX2lv
czxfQ2hhclQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
PiogX19zYikNCiAgICB7DQogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiog
X19vbGQgPSBfTV9zdHJlYW1idWY7DQogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOw0KICAgICAg
dGhpcy0+Y2xlYXIoKTsNCiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lvczxfQ2hhclQs
IF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpjb3B5Zm10KGNvbnN0
IGJhc2ljX2lvcyYgX19yaHMpDQogICAgew0KDQoNCg0KDQogICAgICBfV29yZHMqIF9fd29yZHMg
PSAoX19yaHMuX01fd29yZF9zaXplIDw9IF9TX2xvY2FsX3dvcmRfc2l6ZSkgPw0KICAgICAgICBf
TV9sb2NhbF93b3JkIDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX3NpemVdOw0KDQoNCiAgICAg
IF9DYWxsYmFja19saXN0KiBfX2NiID0gX19yaHMuX01fY2FsbGJhY2tzOw0KICAgICAgaWYgKF9f
Y2IpDQogICAgICAgIF9fY2ItPl9NX2FkZF9yZWZlcmVuY2UoKTsNCiAgICAgIF9NX2NhbGxfY2Fs
bGJhY2tzKGVyYXNlX2V2ZW50KTsNCiAgICAgIGlmIChfTV93b3JkICE9IF9NX2xvY2FsX3dvcmQp
DQogICAgICAgIHsNCiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsNCiAgICAgICAgICBfTV93
b3JkID0gMDsNCiAgICAgICAgfQ0KICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsNCg0KICAg
ICAgX01fY2FsbGJhY2tzID0gX19jYjsNCiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9f
cmhzLl9NX3dvcmRfc2l6ZTsgKytfX2kpDQogICAgICAgIF9fd29yZHNbX19pXSA9IF9fcmhzLl9N
X3dvcmRbX19pXTsNCiAgICAgIGlmIChfTV93b3JkICE9IF9NX2xvY2FsX3dvcmQpDQogICAgICAg
IHsNCiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsNCiAgICAgICAgICBfTV93b3JkID0gMDsN
CiAgICAgICAgfQ0KICAgICAgX01fd29yZCA9IF9fd29yZHM7DQogICAgICBfTV93b3JkX3NpemUg
PSBfX3Jocy5fTV93b3JkX3NpemU7DQoNCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhzLmZsYWdzKCkp
Ow0KICAgICAgdGhpcy0+d2lkdGgoX19yaHMud2lkdGgoKSk7DQogICAgICB0aGlzLT5wcmVjaXNp
b24oX19yaHMucHJlY2lzaW9uKCkpOw0KICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgpKTsNCiAg
ICAgIHRoaXMtPmZpbGwoX19yaHMuZmlsbCgpKTsNCg0KICAgICAgdGhpcy0+ZXhjZXB0aW9ucyhf
X3Jocy5leGNlcHRpb25zKCkpOw0KDQogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhjb3B5Zm10X2V2
ZW50KTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNoYXINCiAgICBiYXNpY19pb3M8X0NoYXJU
LCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0DQog
ICAgew0KICAgICAgY2hhciBfX3JldCA9IF9fZGZhdWx0Ow0KICAgICAgaWYgKF9NX2NoZWNrX2Zh
Y2V0KF9NX2ZjdHlwZSkpDQogICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT5uYXJyb3coX19jLCBf
X2RmYXVsdCk7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBfQ2hhclQNCiAgICBiYXNpY19pb3M8
X0NoYXJULCBfVHJhaXRzPjo6d2lkZW4oY2hhciBfX2MpIGNvbnN0DQogICAgew0KICAgICAgY2hh
cl90eXBlIF9fcmV0ID0gY2hhcl90eXBlKCk7DQogICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f
ZmN0eXBlKSkNCiAgICAgICAgX19yZXQgPSBfTV9mY3R5cGUtPndpZGVuKF9fYyk7DQogICAgICBy
ZXR1cm4gX19yZXQ7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPg0KICAgIGxvY2FsZQ0KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+
OjppbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsNCiAgICAgIGxvY2FsZSBfX29sZCh0
aGlzLT5nZXRsb2MoKSk7DQogICAgICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOw0KICAgICAgX01f
Y2FjaGVfZmFjZXRzKF9fbG9jKTsNCiAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICE9IDApDQogICAg
ICAgIHRoaXMtPnJkYnVmKCktPnB1YmltYnVlKF9fbG9jKTsNCiAgICAgIHJldHVybiBfX29sZDsN
CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0K
ICAgIHZvaWQNCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikNCiAgICB7DQoNCiAgICAgIGlvc19iYXNlOjpf
TV9pbml0KCk7DQogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xvY2FsZSk7DQogICAgICBf
TV90aWUgPSAwOw0KIyAxNTkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9zLnRj
YyIgMw0KICAgICAgX01fZmlsbCA9IF9DaGFyVCgpOw0KICAgICAgX01fZmlsbF9pbml0ID0gZmFs
c2U7DQoNCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7DQogICAgICBfTV9zdHJlYW1idWYg
PSBfX3NiOw0KICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zYiA/IGdvb2RiaXQgOiBiYWRi
aXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4NCiAgICB2b2lkDQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Ol9NX2NhY2hlX2Zh
Y2V0cyhjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsNCiAgICAgIGlmIChoYXNfZmFjZXQ8X19j
dHlwZV90eXBlPihfX2xvYykpDQogICAgICAgIF9NX2ZjdHlwZSA9ICZ1c2VfZmFjZXQ8X19jdHlw
ZV90eXBlPihfX2xvYyk7DQogICAgICBlbHNlDQogICAgICAgIF9NX2ZjdHlwZSA9IDA7DQoNCiAg
ICAgIGlmIChoYXNfZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpKQ0KICAgICAgICBfTV9mbnVt
cHV0ID0gJnVzZV9mYWNldDxfX251bXB1dF90eXBlPihfX2xvYyk7DQogICAgICBlbHNlDQogICAg
ICAgIF9NX2ZudW1wdXQgPSAwOw0KICAgICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihf
X2xvYykpDQogICAgICAgIF9NX2ZudW1nZXQgPSAmdXNlX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9f
bG9jKTsNCiAgICAgIGVsc2UNCiAgICAgICAgX01fZm51bWdldCA9IDA7DQogICAgfQ0KDQoNCg0K
DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3M8Y2hhcj47DQogIGV4dGVybiB0ZW1w
bGF0ZSBjbGFzcyBiYXNpY19pb3M8d2NoYXJfdD47DQp9DQojIDIwOCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9iYXNpY19pb3MuaCIgMiAzDQojIDUyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9p
b3MiIDIgMw0KIyA0NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMiAzDQoNCm5hbWVz
cGFjZSBzdGQNCnsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+DQogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxf
Q2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBp
bnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5
cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOw0K
ICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5
cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsNCiAgICAgIHR5cGVk
ZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOw0KICAgICAg
dHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVm
X2l0ZXI7DQogICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4g
X19udW1wdXRfdHlwZTsNCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7
DQoNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGJhc2ljX29zdHJlYW0oX19zdHJlYW1idWZfdHlw
ZSogX19zYikNCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQ0KDQogICAgICB2aXJ0dWFsDQog
ICAgICB+YmFzaWNfb3N0cmVhbSgpIHsgfQ0KDQoNCiAgICAgIGNsYXNzIHNlbnRyeTsNCiAgICAg
IGZyaWVuZCBjbGFzcyBzZW50cnk7DQoNCg0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAg
IG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFtX3R5cGUmKSk7DQoN
CiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9f
cGYpKF9faW9zX3R5cGUmKSk7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0
b3I8PChpb3NfYmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7DQoNCg0KICAgICAgX19vc3RyZWFt
X3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsNCg0KICAgICAgX19vc3RyZWFtX3R5
cGUmDQogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKTsNCg0KICAgICAgX19vc3Ry
ZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGJvb2wgX19uKTsNCg0KICAgICAgX19vc3RyZWFt
X3R5cGUmDQogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikNCiAgICAgIHsNCiAgICAgICAgaW9z
X2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmll
bGQ7DQogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFz
ZTo6aGV4KQ0KICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmc+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19j
YXN0PHVuc2lnbmVkIHNob3J0PihfX24pKSk7DQogICAgICAgIGVsc2UNCiAgICAgICAgICByZXR1
cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsNCiAgICAgIH0NCg0K
ICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9f
bikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZz4oX19uKSk7IH0NCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8
KGludCBfX24pDQogICAgICB7DQogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRo
aXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOw0KICAgICAgICBpZiAoX19mbXQgJiBp
b3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkNCiAgICAgICAgICByZXR1cm4g
dGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsN
CiAgICAgICAgZWxzZQ0KICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19j
YXN0PGxvbmc+KF9fbikpOw0KICAgICAgfQ0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAg
IG9wZXJhdG9yPDwodW5zaWduZWQgaW50IF9fbikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJh
dG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0NCg0KDQogICAgICBfX29z
dHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwobG9uZyBsb25nIF9fbik7DQoNCiAgICAgIF9f
b3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgX19uKTsN
Cg0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwoZG91YmxlIF9fZik7
DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PChmbG9hdCBfX2YpDQog
ICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7
IH0NCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91Ymxl
IF9fZik7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PChjb25zdCB2
b2lkKiBfX3ApOw0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwoX19z
dHJlYW1idWZfdHlwZSogX19zYik7DQoNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBw
dXQoY2hhcl90eXBlIF9fYyk7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgd3JpdGUo
Y29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsNCg0KICAgICAgX19vc3RyZWFt
X3R5cGUmDQogICAgICBmbHVzaCgpOw0KDQoNCiAgICAgIHBvc190eXBlDQogICAgICB0ZWxscCgp
Ow0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIHNlZWtwKHBvc190eXBlKTsNCg0KICAg
ICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtk
aXIpOw0KICAgIH07DQoNCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPg0KICAgIGNsYXNzIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5
DQogICAgew0KDQogICAgICBib29sIF9NX29rOw0KICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
X1RyYWl0cz4mIF9NX29zOw0KDQogICAgcHVibGljOg0KICAgICAgZXhwbGljaXQNCiAgICAgIHNl
bnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7DQoNCiAgICAgIH5zZW50
cnkoKQ0KICAgICAgew0KDQogICAgICAgIGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVu
aXRidWYgJiYgIXVuY2F1Z2h0X2V4Y2VwdGlvbigpKQ0KICAgICAgICAgIHsNCg0KICAgICAgICAg
ICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01fb3MucmRidWYoKS0+cHVic3luYygpID09IC0xKQ0K
ICAgICAgICAgICAgICBfTV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAg
ICB9DQogICAgICB9DQoNCiAgICAgIG9wZXJhdG9yIGJvb2woKQ0KICAgICAgeyByZXR1cm4gX01f
b2s7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8
PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKTsNCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpDQogICAgeyByZXR1cm4gKF9fb3V0IDw8
IF9fb3V0LndpZGVuKF9fYykpOyB9DQoNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4NCiAg
ICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0
cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsNCg0KDQogIHRlbXBsYXRlPGNs
YXNzIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBzaWduZWQgY2hhciBf
X2MpDQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9DQoN
CiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp
dHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQs
IHVuc2lnbmVkIGNoYXIgX19jKQ0KICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxj
aGFyPihfX2MpKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8
PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9f
cyk7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAmDQogICAgb3BlcmF0b3I8PChiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOw0KDQoNCiAg
dGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+
Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNv
bnN0IGNoYXIqIF9fcyk7DQoNCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2lj
X29zdHJlYW08Y2hhciwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNo
YXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3Qgc2lnbmVkIGNoYXIqIF9fcykNCiAgICB7IHJldHVy
biAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0NCg0KICB0
ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4g
Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNv
bnN0IHVuc2lnbmVkIGNoYXIqIF9fcykNCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mDQogICAgZW5kbChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpDQogICAg
eyByZXR1cm4gZmx1c2goX19vcy5wdXQoX19vcy53aWRlbignXG4nKSkpOyB9DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYNCiAgICBlbmRzKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19vcykNCiAgICB7IHJldHVybiBfX29zLnB1dChfQ2hhclQoKSk7IH0NCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+Jg0KICAgIGZsdXNoKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19vcykNCiAgICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0NCg0KfQ0KDQoNCg0KDQoNCiMg
MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9vc3RyZWFtLnRjYyIgMSAzDQojIDM2ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL29zdHJlYW0udGNjIiAzDQoNCiMgMSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvbG9jYWxlIiAxIDMNCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2xvY2FsZSIg
Mw0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNj
IiAxIDMNCiMgMzcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2Mi
IDMNCg0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jZXJybm8iIDEgMw0KIyA0NyAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvY2Vycm5vIiAzDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEg
Mw0KDQoNCg0KdHlwZWRlZiBpbnQgZXJyb3JfdDsNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2Vy
cm5vLmgiIDEgMw0KDQoNCg0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0KDQoNCg0KDQoNCmV4dGVy
biBpbnQgKl9fZXJybm8gKHZvaWQpOw0KDQoNCg0KDQpleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxs
aW1wb3J0KSkgY29uc3QgY2hhciAqIGNvbnN0IF9zeXNfZXJybGlzdFtdOw0KZXh0ZXJuIF9fYXR0
cmlidXRlX18oKGRsbGltcG9ydCkpIGludCBfc3lzX25lcnI7DQoNCmV4dGVybiBfX2F0dHJpYnV0
ZV9fKChkbGxpbXBvcnQpKSBjb25zdCBjaGFyICogY29uc3Qgc3lzX2Vycmxpc3RbXTsNCmV4dGVy
biBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBpbnQgc3lzX25lcnI7DQojIDE1OCAiL3Vzci9p
bmNsdWRlL3N5cy9lcnJuby5oIiAzDQp9DQojIDcgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAyIDMN
CiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NlcnJubyIgMiAzDQojIDM5ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCg0KDQoNCg0KIyAxICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDEgMw0KIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
bGltaXRzIiAzDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1jeWd3aW4vYml0
cy9jcHVfbGltaXRzLmgiIDEgMw0KIyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAy
IDMNCiMgODg3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMNCm5hbWVzcGFjZSBzdGQN
CnsNCiAgZW51bSBmbG9hdF9yb3VuZF9zdHlsZQ0KICB7DQogICAgcm91bmRfaW5kZXRlcm1pbmF0
ZSA9IC0xLA0KICAgIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwNCiAgICByb3VuZF90b19uZWFyZXN0
ID0gMSwNCiAgICByb3VuZF90b3dhcmRfaW5maW5pdHkgPSAyLA0KICAgIHJvdW5kX3Rvd2FyZF9u
ZWdfaW5maW5pdHkgPSAzDQogIH07DQoNCiAgZW51bSBmbG9hdF9kZW5vcm1fc3R5bGUNCiAgew0K
ICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsDQogICAgZGVub3JtX2Fic2VudCA9IDAsDQog
ICAgZGVub3JtX3ByZXNlbnQgPSAxDQogIH07DQoNCg0KDQoNCiAgc3RydWN0IF9fbnVtZXJpY19s
aW1pdHNfYmFzZQ0KICB7DQogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSBm
YWxzZTsNCg0KICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMDsNCiAgICBzdGF0aWMgY29u
c3QgaW50IGRpZ2l0czEwID0gMDsNCiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBm
YWxzZTsNCiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7DQogICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsNCiAgICBzdGF0aWMgY29uc3QgaW50IHJh
ZGl4ID0gMDsNCg0KICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudCA9IDA7DQogICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9
IDA7DQoNCiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsNCiAgICBzdGF0aWMgY29uc3QgZmxvYXRf
ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaWVjNTU5ID0gZmFsc2U7DQogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IGZh
bHNlOw0KICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOw0KDQogICAgc3Rh
dGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsNCiAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55
bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg
cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+DQogICAgc3RydWN0IG51bWVyaWNfbGltaXRzIDogcHVibGljIF9fbnVtZXJpY19s
aW1pdHNfYmFzZQ0KICAgIHsNCiAgICAgIHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxfVHA+KDApOyB9DQogICAgICBzdGF0aWMgX1RwIG1heCgpIHRocm93KCkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQ0KICAgICAgc3RhdGljIF9UcCBlcHNpbG9u
KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9DQogICAgICBzdGF0aWMg
X1RwIHJvdW5kX2Vycm9yKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9
DQogICAgICBzdGF0aWMgX1RwIGluZmluaXR5KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxfVHA+KDApOyB9DQogICAgICBzdGF0aWMgX1RwIHF1aWV0X05hTigpIHRocm93KCkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQ0KICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFO
KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9DQogICAgICBzdGF0aWMg
X1RwIGRlbm9ybV9taW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0N
CiAgICB9Ow0KDQoNCg0KICB0ZW1wbGF0ZTw+DQogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGJv
b2w+DQogICAgew0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl
Ow0KDQogICAgICBzdGF0aWMgYm9vbCBtaW4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiBmYWxz
ZTsgfQ0KDQogICAgICBzdGF0aWMgYm9vbCBtYXgoKSB0aHJvdygpDQogICAgICB7IHJldHVybiB0
cnVlOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTsNCiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln
bmVkID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsN
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAgc3RhdGljIGJvb2wgZXBzaWxvbigpIHRocm93KCkN
CiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9DQogICAgICBzdGF0aWMgYm9vbCByb3VuZF9lcnJvcigp
IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
MTAgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGlu
Z19OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz
X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVu
b3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAgc3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygp
DQogICAgICB7IHJldHVybiBmYWxzZTsgfQ0KICAgICAgc3RhdGljIGJvb2wgcXVpZXRfTmFOKCkg
dGhyb3coKQ0KICAgICAgeyByZXR1cm4gZmFsc2U7IH0NCiAgICAgIHN0YXRpYyBib29sIHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiBmYWxzZTsgfQ0KICAgICAgc3RhdGlj
IGJvb2wgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9DQoNCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19t
b2R1bG8gPSBmYWxzZTsNCg0KDQoNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0
cnVlDQogICAgICAgICAgICAgICB8fCB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu
eW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5
bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQoNCg0KICB0ZW1w
bGF0ZTw+DQogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+DQogICAgew0KICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBzdGF0aWMgY2hh
ciBtaW4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiAoY2hhcikoLTEyNyAtIDEpOyB9DQogICAg
ICBzdGF0aWMgY2hhciBtYXgoKSB0aHJvdygpDQogICAgICB7IHJldHVybiAoY2hhcikxMjc7IH0N
Cg0KICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3Ow0KICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMxMCA9IDc7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0
cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsNCiAgICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpDQogICAgICB7
IHJldHVybiBjaGFyKCk7IH0NCiAgICAgIHN0YXRpYyBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3co
KQ0KICAgICAgeyByZXR1cm4gY2hhcigpOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
X2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw
Ow0KICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0
X05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
PSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y
bSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xv
c3MgPSBmYWxzZTsNCg0KICAgICAgc3RhdGljIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpDQogICAg
ICB7IHJldHVybiBjaGFyKCk7IH0NCiAgICAgIHN0YXRpYyBjaGFyIHF1aWV0X05hTigpIHRocm93
KCkNCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQ0KICAgICAgc3RhdGljIGNoYXIgc2lnbmFsaW5n
X05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQ0KICAgICAgc3RhdGljIGNo
YXIgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+
KDApOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOw0KICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw
cyA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz
ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJv
dW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07DQojIDEwNzEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2xp
bWl0cyIgMw0KICB0ZW1wbGF0ZTw+DQogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNpZ25lZCBj
aGFyPg0KICAgIHsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1
ZTsNCg0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkNCiAgICAgIHsgcmV0
dXJuICgtMTI3IC0gMSk7IH0NCiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtYXgoKSB0aHJvdygp
DQogICAgICB7IHJldHVybiAxMjc7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMg
PSA3Ow0KICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7DQogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aW50ZWdlciA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7
DQogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgIHN0YXRpYyBzaWduZWQg
Y2hhciBlcHNpbG9uKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAgc3RhdGlj
IHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0K
DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAw
Ow0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgIHN0YXRpYyBz
aWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHNpZ25lZCBjaGFyPigwKTsgfQ0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHF1aWV0X05hTigp
IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQ0K
ICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0NCiAgICAgIHN0YXRpYyBzaWdu
ZWQgY2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
c2lnbmVkIGNoYXI+KDApOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9
IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOw0KDQogICAgICBzdGF0aWMgY29u
c3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19i
ZWZvcmUgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu
ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07DQojIDExMjggIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2xpbWl0cyIgMw0KICB0ZW1wbGF0ZTw+DQogICAgc3RydWN0IG51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkIGNoYXI+DQogICAgew0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl
Y2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0aHJv
dygpDQogICAgICB7IHJldHVybiAwOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtYXgo
KSB0aHJvdygpDQogICAgICB7IHJldHVybiAoMTI3ICogMiArIDEpOyB9DQoNCiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzID0gODsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg
PSAyOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7DQogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOw0K
ICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkNCiAgICAgIHsgcmV0
dXJuIDA7IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3co
KQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
aW5maW5pdHkgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g
PSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs
c2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBk
ZW5vcm1fYWJzZW50Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g
ZmFsc2U7DQoNCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhyb3coKQ0K
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0NCiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hh
ciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oMCk7IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRlbm9ybV9taW4o
KSB0aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsg
fQ0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsNCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfbW9kdWxvID0gdHJ1ZTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0
cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQog
ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90
b3dhcmRfemVybzsNCiAgICB9Ow0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTw+DQogICAgc3RydWN0
IG51bWVyaWNfbGltaXRzPHdjaGFyX3Q+DQogICAgew0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBzdGF0aWMgd2NoYXJfdCBtaW4oKSB0aHJv
dygpDQogICAgICB7IHJldHVybiAod2NoYXJfdCkoLTIxNDc0ODM2NDdMIC0gMSk7IH0NCiAgICAg
IHN0YXRpYyB3Y2hhcl90IG1heCgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuICh3Y2hhcl90KTIx
NDc0ODM2NDdMOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7DQogICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX3NpZ25lZCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0g
dHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAgc3RhdGljIHdjaGFyX3QgZXBzaWxvbigp
IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgIHN0YXRpYyB3Y2hhcl90IHJvdW5k
X2Vycm9yKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudDEwID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
YWxpbmdfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl
IGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgIHN0YXRpYyB3Y2hhcl90IGluZmluaXR5KCkg
dGhyb3coKQ0KICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9DQogICAgICBzdGF0aWMgd2NoYXJf
dCBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0NCiAgICAg
IHN0YXRpYyB3Y2hhcl90IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiB3
Y2hhcl90KCk7IH0NCiAgICAgIHN0YXRpYyB3Y2hhcl90IGRlbm9ybV9taW4oKSB0aHJvdygpDQog
ICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aWVjNTU5ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1
ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7DQoNCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp
bnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0
eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCiMgMTI0MSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzDQogIHRlbXBsYXRlPD4NCiAgICBzdHJ1Y3QgbnVt
ZXJpY19saW1pdHM8c2hvcnQ+DQogICAgew0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl
Y2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBzdGF0aWMgc2hvcnQgbWluKCkgdGhyb3coKQ0KICAg
ICAgeyByZXR1cm4gKC0zMjc2NyAtIDEpOyB9DQogICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhy
b3coKQ0KICAgICAgeyByZXR1cm4gMzI3Njc7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMgPSAxNTsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0Ow0KICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2ludGVnZXIgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg
PSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICBzdGF0aWMg
c2hvcnQgZXBzaWxvbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgIHN0YXRp
YyBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAg
ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsNCg0K
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0
X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICBzdGF0aWMgc2hvcnQg
aW5maW5pdHkoKSB0aHJvdygpDQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9DQogICAgICBzdGF0
aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQ0K
ICAgICAgc3RhdGljIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVy
biBzaG9ydCgpOyB9DQogICAgICBzdGF0aWMgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkNCiAg
ICAgIHsgcmV0dXJuIHNob3J0KCk7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj
NTU5ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0K
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsNCg0KICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l
c3NfYmVmb3JlID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg
cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KIyAxMjk4ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9saW1pdHMiIDMNCiAgdGVtcGxhdGU8Pg0KICAgIHN0cnVjdCBudW1lcmlj
X2xpbWl0czx1bnNpZ25lZCBzaG9ydD4NCiAgICB7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19zcGVjaWFsaXplZCA9IHRydWU7DQoNCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4o
KSB0aHJvdygpDQogICAgICB7IHJldHVybiAwOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hv
cnQgbWF4KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gKDMyNzY3ICogMiArIDEpOyB9DQoNCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTY7DQogICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0czEwID0gNDsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNl
Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgaW50IHJh
ZGl4ID0gMjsNCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQ0K
ICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHJvdW5kX2Vy
cm9yKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu
dDEwID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxp
bmdfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhh
c19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl
bm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0
eSgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pigw
KTsgfQ0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkNCiAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQ0KICAgICAgc3Rh
dGljIHVuc2lnbmVkIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgc2hvcnQ+KDApOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1
OSA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7DQoNCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRyYXBzID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNz
X2JlZm9yZSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv
dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCg0KDQoNCg0KDQoNCiAgdGVt
cGxhdGU8Pg0KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+DQogICAgew0KICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBzdGF0aWMgaW50
IG1pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIChpbnQpKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9
DQogICAgICBzdGF0aWMgaW50IG1heCgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIChpbnQpMjE0
NzQ4MzY0N0w7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsNCiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0
cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgc3Rh
dGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICBzdGF0aWMgaW50IGVwc2lsb24oKSB0aHJv
dygpDQogICAgICB7IHJldHVybiAwOyB9DQogICAgICBzdGF0aWMgaW50IHJvdW5kX2Vycm9yKCkg
dGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g
MDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll
dF9OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFO
ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5v
cm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s
b3NzID0gZmFsc2U7DQoNCiAgICAgIHN0YXRpYyBpbnQgaW5maW5pdHkoKSB0aHJvdygpDQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9DQogICAgICBzdGF0aWMgaW50IHF1aWV0
X05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0NCiAg
ICAgIHN0YXRpYyBpbnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4oMCk7IH0NCiAgICAgIHN0YXRpYyBpbnQgZGVub3JtX21pbigpIHRocm93
KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0NCg0KICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2JvdW5kZWQgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1
ZTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9
Ow0KIyAxNDEwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMNCiAgdGVtcGxhdGU8Pg0K
ICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+DQogICAgew0KICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBzdGF0aWMgdW5z
aWduZWQgaW50IG1pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgICAgICBz
dGF0aWMgdW5zaWduZWQgaW50IG1heCgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuICh1bnNpZ25l
ZCkoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzID0gMzI7DQogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsNCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9
IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgIHN0YXRpYyB1
bnNpZ25lZCBpbnQgZXBzaWxvbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAg
IHN0YXRpYyB1bnNpZ25lZCBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAgICB7IHJldHVy
biAwOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0
IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l
bnQxMCA9IDA7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl
Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAg
c3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg
cXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50PigwKTsgfQ0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBzaWduYWxpbmdfTmFOKCkgdGhy
b3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQ0KICAg
ICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQ0KICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQ0KDQogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pZWM1NTkgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl
ZCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOw0KDQog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9y
b3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07DQoNCg0K
DQoNCg0KDQogIHRlbXBsYXRlPD4NCiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZz4NCiAg
ICB7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7DQoNCiAg
ICAgIHN0YXRpYyBsb25nIG1pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuICgtMjE0NzQ4MzY0
N0wgLSAxKTsgfQ0KICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhyb3coKQ0KICAgICAgeyByZXR1
cm4gMjE0NzQ4MzY0N0w7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsN
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVn
ZXIgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAg
ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICBzdGF0aWMgbG9uZyBlcHNpbG9u
KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAgc3RhdGljIGxvbmcgcm91bmRf
ZXJyb3IoKSB0aHJvdygpDQogICAgICB7IHJldHVybiAwOyB9DQoNCiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50MTAgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25h
bGluZ19OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUg
aGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
ZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAgc3RhdGljIGxvbmcgaW5maW5pdHkoKSB0aHJv
dygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQ0KICAgICAgc3RhdGlj
IGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9u
Zz4oMCk7IH0NCiAgICAgIHN0YXRpYyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQ0KICAgICAgc3RhdGljIGxvbmcgZGVu
b3JtX21pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9
DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7DQogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX21vZHVsbyA9IHRydWU7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1
ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93
YXJkX3plcm87DQogICAgfTsNCiMgMTUyMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAz
DQogIHRlbXBsYXRlPD4NCiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz4N
CiAgICB7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7DQoN
CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJu
IDA7IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heCgpIHRocm93KCkNCiAgICAgIHsg
cmV0dXJuICgyMTQ3NDgzNjQ3TCAqIDJVICsgMSk7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMgPSAzMjsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4
YWN0ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAgc3Rh
dGljIHVuc2lnbmVkIGxvbmcgZXBzaWxvbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0N
CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQ0KICAgICAg
eyByZXR1cm4gMDsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7
DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkg
PSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsN
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz
ZW50Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoN
CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0NCiAgICAgIHN0YXRpYyB1bnNp
Z25lZCBsb25nIHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmc+KDApOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaWduYWxp
bmdfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
Zz4oMCk7IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygp
DQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQ0KDQogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1
bG8gPSB0cnVlOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv
Ow0KICAgIH07DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPD4NCiAgICBzdHJ1Y3QgbnVtZXJpY19s
aW1pdHM8bG9uZyBsb25nPg0KICAgIHsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gdHJ1ZTsNCg0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpDQog
ICAgICB7IHJldHVybiAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAtIDEpOyB9DQogICAgICBzdGF0
aWMgbG9uZyBsb25nIG1heCgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDkyMjMzNzIwMzY4NTQ3
NzU4MDdMTDsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDYzOw0KICAgICAg
c3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE4Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0
cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgc3Rh
dGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICBzdGF0aWMgbG9uZyBsb25nIGVwc2lsb24o
KSB0aHJvdygpDQogICAgICB7IHJldHVybiAwOyB9DQogICAgICBzdGF0aWMgbG9uZyBsb25nIHJv
dW5kX2Vycm9yKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudDEwID0gMDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsN
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19z
aWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0
eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgaW5maW5p
dHkoKSB0aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9
DQogICAgICBzdGF0aWMgbG9uZyBsb25nIHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0NCiAgICAgIHN0YXRpYyBsb25nIGxvbmcg
c2lnbmFsaW5nX05hTigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcg
bG9uZz4oMCk7IH0NCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkN
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0NCg0KICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g
dHJ1ZTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29u
c3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAg
ICB9Ow0KIyAxNjM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMNCiAgdGVtcGxhdGU8
Pg0KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nIGxvbmc+DQogICAgew0K
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBz
dGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7
IH0NCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQ0KICAgICAg
eyByZXR1cm4gKDkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAqIDJVTEwgKyAxKTsgfQ0KDQogICAgICBz
dGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0Ow0KICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp
dHMxMCA9IDE5Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7DQog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg
PSAyOw0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQ0K
ICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByb3Vu
ZF9lcnJvcigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAgc3RhdGljIGNv
bnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQxMCA9IDA7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2ln
bmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls
ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25n
IGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPigwKTsgfQ0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBxdWlldF9O
YU4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxv
bmc+KDApOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25hbGluZ19OYU4o
KSB0aHJvdygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KDApOyB9DQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJv
dygpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9
DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7DQogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX21vZHVsbyA9IHRydWU7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1
ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93
YXJkX3plcm87DQogICAgfTsNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8Pg0KICAgIHN0cnVjdCBu
dW1lcmljX2xpbWl0czxmbG9hdD4NCiAgICB7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
cGVjaWFsaXplZCA9IHRydWU7DQoNCiAgICAgIHN0YXRpYyBmbG9hdCBtaW4oKSB0aHJvdygpDQog
ICAgICB7IHJldHVybiAxLjE3NTQ5NDM1ZS0zOEY7IH0NCiAgICAgIHN0YXRpYyBmbG9hdCBtYXgo
KSB0aHJvdygpDQogICAgICB7IHJldHVybiAzLjQwMjgyMzQ3ZSszOEY7IH0NCg0KICAgICAgc3Rh
dGljIGNvbnN0IGludCBkaWdpdHMgPSAyNDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
MTAgPSA2Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2V4YWN0ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g
MjsNCiAgICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4g
MS4xOTIwOTI5MGUtMDdGOyB9DQogICAgICBzdGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJv
dygpDQogICAgICB7IHJldHVybiAxLjBGOyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
X2V4cG9uZW50ID0gLTEyNTsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAg
PSAtMzc7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEyODsNCiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzODsNCg0KICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFs
aW5nX05hTiA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBo
YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k
ZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICBzdGF0aWMgZmxvYXQgaW5maW5pdHkoKSB0aHJv
dygpDQogICAgICB7IHJldHVybiAwLjBGOyB9DQogICAgICBzdGF0aWMgZmxvYXQgcXVpZXRfTmFO
KCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMC4wRjsgfQ0KICAgICAgc3RhdGljIGZsb2F0IHNp
Z25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiAwLjBGOyB9DQogICAgICBzdGF0
aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0NCg0K
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X21vZHVsbyA9IGZhbHNlOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNl
Ow0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh
cmRfemVybzsNCiAgICB9Ow0KIyAxNzY1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMN
CiAgdGVtcGxhdGU8Pg0KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+DQogICAgew0K
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICBz
dGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDIuMjI1MDczODU4NTA3
MjAxNGUtMzA4OyB9DQogICAgICBzdGF0aWMgZG91YmxlIG1heCgpIHRocm93KCkNCiAgICAgIHsg
cmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4OyB9DQoNCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gNTM7DQogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTU7DQog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
ZXhhY3QgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAg
c3RhdGljIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMi4yMjA0NDYw
NDkyNTAzMTMxZS0xNjsgfQ0KICAgICAgc3RhdGljIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93
KCkNCiAgICAgIHsgcmV0dXJuIDEuMDsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudCA9IC0xMDIxOw0KICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9
IC0zMDc7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7DQogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMzA4Ow0KDQogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
YWxpbmdfTmFOID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl
IGhhc19kZW5vcm0gPQ0KICAgICAgICAgICAgICBkZW5vcm1fYWJzZW50Ow0KICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgIHN0YXRpYyBkb3Vi
bGUgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICB7IHJldHVybiAwLjA7IH0NCiAgICAgIHN0YXRp
YyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMC4wOyB9DQogICAg
ICBzdGF0aWMgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICB7IHJldHVybiAw
LjA7IH0NCiAgICAgIHN0YXRpYyBkb3VibGUgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgIHsg
cmV0dXJuIDAuMDsgfQ0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz
ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7DQoNCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRyYXBzID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZv
cmUgPSBmYWxzZTsNCiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z
dHlsZSA9DQogICAgICAgICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07DQojIDE4NDQg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMw0KICB0ZW1wbGF0ZTw+DQogICAgc3RydWN0
IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPg0KICAgIHsNCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1p
bigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDMuMzYyMTAzMTQzMTEyMDkzNTA2MjZlLTQ5MzJM
OyB9DQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbWF4KCkgdGhyb3coKQ0KICAgICAgeyByZXR1
cm4gMS4xODk3MzE0OTUzNTcyMzE3NjUwMmUrNDkzMkw7IH0NCg0KICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMgPSA2NDsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsN
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7DQogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19leGFjdCA9IGZhbHNlOw0KICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAg
ICBzdGF0aWMgbG9uZyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDEu
MDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TDsgfQ0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHJv
dW5kX2Vycm9yKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gMS4wTDsgfQ0KDQogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xNjM4MTsNCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50MTAgPSAtNDkzMTsNCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4
cG9uZW50ID0gMTYzODQ7DQogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g
NDkzMjsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9DQogICAgICAgICAgICAgICAgZmFsc2U7
DQogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQ0KICAg
ICAgICAgICAgICAgIGRlbm9ybV9hYnNlbnQ7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
ZGVub3JtX2xvc3MgPQ0KICAgICAgICAgICAgICAgIGZhbHNlOw0KDQogICAgICBzdGF0aWMgbG9u
ZyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICB7IHJldHVybiAwLjBMOyB9DQogICAg
ICBzdGF0aWMgbG9uZyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4g
MC4wTDsgfQ0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygp
DQogICAgICB7IHJldHVybiAwLjBMOyB9DQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZGVub3Jt
X21pbigpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0NCg0KICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19i
b3VuZGVkID0gdHJ1ZTsNCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNl
Ow0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOw0KICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPQ0KICAgICAgICByb3VuZF90b3dhcmRfemVy
bzsNCiAgICB9Ow0KIyAxOTI0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMNCn0NCiMg
NDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMw0KDQoj
IDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL3R5cGVpbmZvIiAxIDMNCiMgNDAgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL3R5cGVpbmZvIiAzDQpleHRlcm4gIkMrKyIgew0KDQpuYW1lc3BhY2UgX19jeHhh
Yml2MQ0Kew0KICBjbGFzcyBfX2NsYXNzX3R5cGVfaW5mbzsNCn0NCiMgNTcgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL3R5cGVpbmZvIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQogIGNsYXNzIHR5
cGVfaW5mbw0KICB7DQogIHB1YmxpYzoNCg0KDQoNCg0KICAgIHZpcnR1YWwgfnR5cGVfaW5mbygp
Ow0KDQogIHByaXZhdGU6DQoNCiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2lu
Zm8mKTsNCiAgICB0eXBlX2luZm8oY29uc3QgdHlwZV9pbmZvJik7DQoNCiAgcHJvdGVjdGVkOg0K
ICAgIGNvbnN0IGNoYXIgKl9fbmFtZTsNCg0KICBwcm90ZWN0ZWQ6DQogICAgZXhwbGljaXQgdHlw
ZV9pbmZvKGNvbnN0IGNoYXIgKl9fbik6IF9fbmFtZShfX24pIHsgfQ0KDQogIHB1YmxpYzoNCg0K
DQoNCiAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QNCiAgICB7IHJldHVybiBfX25hbWU7IH0N
Cg0KDQogICAgYm9vbCBiZWZvcmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3Q7DQoNCg0K
DQogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0Ow0KIyAx
MDUgIi91c3IvaW5jbHVkZS9jKysvMy4yL3R5cGVpbmZvIiAzDQogICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0DQogICAgeyByZXR1cm4gIW9wZXJhdG9yPT0o
X19hcmcpOyB9DQoNCg0KICBwdWJsaWM6DQoNCiAgICB2aXJ0dWFsIGJvb2wgX19pc19wb2ludGVy
X3AoKSBjb25zdDsNCg0KICAgIHZpcnR1YWwgYm9vbCBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsN
Cg0KDQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgYm9vbCBfX2RvX2NhdGNoKGNvbnN0IHR5cGVfaW5m
byAqX190aHJfdHlwZSwgdm9pZCAqKl9fdGhyX29iaiwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsNCg0KDQogICAgdmlydHVhbCBib29sIF9fZG9f
dXBjYXN0KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlwZV9pbmZvICpfX3RhcmdldCwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fb2JqX3B0cikgY29uc3Q7DQogIH07
DQoNCg0KDQogIGNsYXNzIGJhZF9jYXN0IDogcHVibGljIGV4Y2VwdGlvbg0KICB7DQogIHB1Ymxp
YzoNCiAgICBiYWRfY2FzdCgpIHRocm93KCkgeyB9DQoNCg0KICAgIHZpcnR1YWwgfmJhZF9jYXN0
KCkgdGhyb3coKTsNCiAgfTsNCg0KDQogIGNsYXNzIGJhZF90eXBlaWQgOiBwdWJsaWMgZXhjZXB0
aW9uDQogIHsNCiAgcHVibGljOg0KICAgIGJhZF90eXBlaWQgKCkgdGhyb3coKSB7IH0NCg0KDQog
ICAgdmlydHVhbCB+YmFkX3R5cGVpZCgpIHRocm93KCk7DQogIH07DQp9DQoNCn0NCiMgNDYgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMw0KDQpuYW1lc3Bh
Y2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICBsb2NhbGUNCiAgICBs
b2NhbGU6OmNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdA0KICAgIHsNCiAgICAg
IF9JbXBsKiBfX3RtcCA9IG5ldyBfSW1wbCgqX01faW1wbCwgMSk7DQogICAgICBfX3RtcC0+X01f
cmVwbGFjZV9mYWNldChfX290aGVyLl9NX2ltcGwsICZfRmFjZXQ6OmlkKTsNCiAgICAgIHJldHVy
biBsb2NhbGUoX190bXApOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBib29sDQogICAgbG9jYWxlOjpv
cGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
czEsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0DQogICAgew0KICAgICAgdHlwZWRlZiBzdGQ6OmNv
bGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsNCiAgICAgIGNvbnN0IF9fY29sbGF0ZV90eXBl
JiBfX2NvbGxhdGUgPSB1c2VfZmFjZXQ8X19jb2xsYXRlX3R5cGU+KCp0aGlzKTsNCiAgICAgIHJl
dHVybiAoX19jb2xsYXRlLmNvbXBhcmUoX19zMS5kYXRhKCksIF9fczEuZGF0YSgpICsgX19zMS5s
ZW5ndGgoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zMi5kYXRhKCksIF9f
czIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZhY2V0Pg0KICAgIGNvbnN0IF9GYWNldCYNCiAgICB1c2VfZmFjZXQoY29uc3QgbG9j
YWxlJiBfX2xvYykNCiAgICB7DQogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgp
Ow0KICAgICAgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01fZmFj
ZXRzOw0KICAgICAgaWYgKCEoX19pIDwgX19sb2MuX01faW1wbC0+X01fZmFjZXRzX3NpemUgJiYg
X19mYWNldHNbX19pXSkpDQogICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsNCiAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQmPigqX19mYWNldHNbX19pXSk7DQogICAgfQ0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICBib29sDQogICAgaGFzX2ZhY2V0KGNvbnN0
IGxvY2FsZSYgX19sb2MpIHRocm93KCkNCiAgICB7DQogICAgICBzaXplX3QgX19pID0gX0ZhY2V0
OjppZC5fTV9pZCgpOw0KICAgICAgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01f
aW1wbC0+X01fZmFjZXRzOw0KICAgICAgcmV0dXJuIChfX2kgPCBfX2xvYy5fTV9pbXBsLT5fTV9m
YWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKTsNCiAgICB9DQoNCg0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dl
dDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBfTV9leHRyYWN0X2Zsb2F0KF9Jbkl0ZXIgX19iZWcs
IF9Jbkl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYykgY29uc3QNCiAgICB7DQogICAg
ICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsNCiAgICAgIGNvbnN0
IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+
JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7DQogICAgICBjb25z
dCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihf
X2xvYyk7DQoNCg0KICAgICAgY29uc3QgY2hhcl90eXBlIF9fcGx1cyA9IF9fY3R5cGUud2lkZW4o
JysnKTsNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScp
Ow0KICAgICAgaW50IF9fcG9zID0gMDsNCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7DQog
ICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKSB8fCBfX3RyYWl0c190eXBl
OjplcShfX2MsIF9fbWludXMpKQ0KICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQ0KICAgICAg
ICB7DQogICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsNCiAg
ICAgICAgICArK19fcG9zOw0KICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7DQogICAgICAgIH0N
Cg0KDQogICAgICBjb25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9t
c1tfTV96ZXJvXSk7DQogICAgICBib29sIF9fZm91bmRfemVybyA9IGZhbHNlOw0KICAgICAgd2hp
bGUgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkNCiAg
ICAgICAgew0KICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7DQogICAgICAgICAgX19mb3VuZF96
ZXJvID0gdHJ1ZTsNCiAgICAgICAgfQ0KICAgICAgaWYgKF9fZm91bmRfemVybykNCiAgICAgICAg
ew0KICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfTV96ZXJvXTsNCiAgICAgICAgICArK19f
cG9zOw0KICAgICAgICB9DQoNCg0KICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX01fRSAtIF9N
X3plcm8gKyAxOw0KICAgICAgY2hhcl90eXBlIF9fd2F0b21zW19fbGVuXTsNCiAgICAgIF9fY3R5
cGUud2lkZW4oX1NfYXRvbXMsIF9TX2F0b21zICsgX19sZW4sIF9fd2F0b21zKTsNCiAgICAgIGJv
b2wgX19mb3VuZF9kZWMgPSBmYWxzZTsNCiAgICAgIGJvb2wgX19mb3VuZF9zY2kgPSBmYWxzZTsN
CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX2RlYyA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOw0KDQog
ICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGluZzsNCiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3Vw
aW5nID0gX19ucC5ncm91cGluZygpOw0KICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5nID0gX19n
cm91cGluZy5zaXplKCk7DQogICAgICBpbnQgX19zZXBfcG9zID0gMDsNCiAgICAgIGNvbnN0IGNo
YXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOw0KDQogICAgICB3aGlsZSAoX19i
ZWcgIT0gX19lbmQpDQogICAgICAgIHsNCg0KICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19w
ID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9tcywgMTAsIF9fYyk7DQoNCg0KICAgICAgICAg
IGlmIChfX3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVxKF9fYywgY2hhcl90eXBlKCkpKQ0KICAgICAg
ICAgICAgew0KDQogICAgICAgICAgICAgICsrX19wb3M7DQogICAgICAgICAgICAgIF9feHRyYyAr
PSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107DQogICAgICAgICAgICAgICsrX19zZXBfcG9zOw0K
ICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg
IGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19zZXApDQogICAgICAgICAgICAgICAg
ICAgJiYgX19jaGVja19ncm91cGluZyAmJiAhX19mb3VuZF9kZWMpDQogICAgICAgICAgICB7DQoN
Cg0KICAgICAgICAgICAgICBpZiAoX19zZXBfcG9zKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAg
ICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBf
cG9zKTsNCiAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7DQogICAgICAgICAgICAgICAg
ICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxz
ZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNl
OjpmYWlsYml0Ow0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0K
ICAgICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywg
X19kZWMpICYmICFfX2ZvdW5kX2RlYykNCiAgICAgICAgICAgIHsNCg0KDQoNCiAgICAgICAgICAg
ICAgaWYgKF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQ0KICAgICAgICAgICAgICAgIF9fZm91bmRf
Z3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsNCiAgICAgICAgICAgICAg
KytfX3BvczsNCiAgICAgICAgICAgICAgX194dHJjICs9ICcuJzsNCiAgICAgICAgICAgICAgX19j
ID0gKigrK19fYmVnKTsNCiAgICAgICAgICAgICAgX19mb3VuZF9kZWMgPSB0cnVlOw0KICAgICAg
ICAgICAgfQ0KICAgICAgICAgIGVsc2UgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fd2F0
b21zW19NX2VdKQ0KICAgICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190eXBlOjplcShfX2Ms
IF9fd2F0b21zW19NX0VdKSkNCiAgICAgICAgICAgICAgICAgICAmJiAhX19mb3VuZF9zY2kgJiYg
X19wb3MpDQogICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgKytfX3BvczsNCiAgICAgICAg
ICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsNCiAgICAgICAgICAg
ICAgX19jID0gKigrK19fYmVnKTsNCg0KDQogICAgICAgICAgICAgIGlmIChfX3RyYWl0c190eXBl
OjplcShfX2MsIF9fcGx1cykNCiAgICAgICAgICAgICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVx
KF9fYywgX19taW51cykpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgKytf
X3BvczsNCiAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNo
YXIoKSk7DQogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICAgICAg
ICAgIH0NCiAgICAgICAgICAgICAgX19mb3VuZF9zY2kgPSB0cnVlOw0KICAgICAgICAgICAgfQ0K
ICAgICAgICAgIGVsc2UNCg0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCg0KDQoNCiAg
ICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQ0KICAg
ICAgICB7DQoNCiAgICAgICAgICBpZiAoIV9fZm91bmRfZGVjKQ0KICAgICAgICAgICAgX19mb3Vu
ZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOw0KICAgICAgICAgIGlm
ICghX192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19mb3VuZF9ncm91cGluZykpDQogICAg
ICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCiAgICAgICAgfQ0KDQoNCiAgICAg
IF9feHRyYyArPSBjaGFyKCk7DQogICAgICBpZiAoX19iZWcgPT0gX19lbmQpDQogICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7DQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0
ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIF9NX2V4dHJhY3RfaW50KF9J
bkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3h0cmMsIGludCYgX19i
YXNlKSBjb25zdA0KICAgIHsNCiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3Ry
YWl0c190eXBlOw0KICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsNCiAg
ICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU
PiA+KF9fbG9jKTsNCiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFj
ZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsNCg0KDQogICAgICBpb3NfYmFzZTo6Zm10Zmxh
Z3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOw0KICAg
ICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpvY3QpDQogICAgICAgIF9fYmFzZSA9IDg7
DQogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6aGV4KQ0KICAgICAgICBf
X2Jhc2UgPSAxNjsNCiAgICAgIGVsc2UNCiAgICAgICAgX19iYXNlID0gMTA7DQoNCg0KICAgICAg
aW50IF9fcG9zID0gMDsNCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7DQogICAgICBjb25z
dCBjaGFyX3R5cGUgX19wbHVzID0gX19jdHlwZS53aWRlbignKycpOw0KICAgICAgY29uc3QgY2hh
cl90eXBlIF9fbWludXMgPSBfX2N0eXBlLndpZGVuKCctJyk7DQoNCiAgICAgIGlmICgoX190cmFp
dHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51
cykpDQogICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpDQogICAgICAgIHsNCiAgICAgICAgICBf
X3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOw0KICAgICAgICAgICsrX19wb3M7
DQogICAgICAgICAgX19jID0gKigrK19fYmVnKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGNvbnN0
IGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKF9TX2F0b21zW19NX3plcm9dKTsNCiAg
ICAgIGNvbnN0IGNoYXJfdHlwZSBfX3ggPSBfX2N0eXBlLndpZGVuKCd4Jyk7DQogICAgICBjb25z
dCBjaGFyX3R5cGUgX19YID0gX19jdHlwZS53aWRlbignWCcpOw0KICAgICAgaWYgKF9fYmFzZSA9
PSAxMCkNCiAgICAgICAgew0KICAgICAgICAgIGJvb2wgX19mb3VuZF96ZXJvID0gZmFsc2U7DQog
ICAgICAgICAgd2hpbGUgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAh
PSBfX2VuZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsN
CiAgICAgICAgICAgICAgX19mb3VuZF96ZXJvID0gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAg
ICAgICBpZiAoX19mb3VuZF96ZXJvKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX3h0
cmMgKz0gX1NfYXRvbXNbX01femVyb107DQogICAgICAgICAgICAgICsrX19wb3M7DQogICAgICAg
ICAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSAwKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAg
ICAgICAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3gpDQogICAgICAgICAgICAg
ICAgICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19YKSkNCiAgICAgICAgICAgICAg
ICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAg
ICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7DQog
ICAgICAgICAgICAgICAgICAgICAgKytfX3BvczsNCiAgICAgICAgICAgICAgICAgICAgICBfX2Mg
PSAqKCsrX19iZWcpOw0KICAgICAgICAgICAgICAgICAgICAgIF9fYmFzZSA9IDE2Ow0KICAgICAg
ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAg
ICAgIF9fYmFzZSA9IDg7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAg
ICB9DQogICAgICBlbHNlIGlmIChfX2Jhc2UgPT0gMTYpDQogICAgICAgIHsNCiAgICAgICAgICBp
ZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYmIF9fYmVnICE9IF9fZW5kKQ0KICAg
ICAgICAgICAgew0KICAgICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107DQog
ICAgICAgICAgICAgICsrX19wb3M7DQogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7DQog
ICAgICAgICAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3gpIHx8IF9fdHJhaXRz
X3R5cGU6OmVxKF9fYywgX19YKSkNCiAgICAgICAgICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5k
KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBl
Lm5hcnJvdyhfX2MsIGNoYXIoKSk7DQogICAgICAgICAgICAgICAgICArK19fcG9zOw0KICAgICAg
ICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAg
ICAgICB9DQogICAgICAgIH0NCg0KDQoNCiAgICAgIHNpemVfdCBfX2xlbjsNCiAgICAgIGlmIChf
X2Jhc2UgPT0gMTYpDQogICAgICAgIF9fbGVuID0gX01fc2l6ZTsNCiAgICAgIGVsc2UNCiAgICAg
ICAgX19sZW4gPSBfX2Jhc2U7DQoNCg0KICAgICAgY2hhcl90eXBlIF9fd2F0b21zW19NX3NpemVd
Ow0KICAgICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1NfYXRvbXMgKyBfX2xlbiwgX193YXRv
bXMpOw0KICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7DQogICAgICBjb25zdCBzdHJpbmcg
X19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsNCiAgICAgIGJvb2wgX19jaGVja19ncm91cGlu
ZyA9IF9fZ3JvdXBpbmcuc2l6ZSgpOw0KICAgICAgaW50IF9fc2VwX3BvcyA9IDA7DQogICAgICBj
b25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX25wLnRob3VzYW5kc19zZXAoKTsNCiAgICAgIHdoaWxl
IChfX2JlZyAhPSBfX2VuZCkNCiAgICAgICAgew0KICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9tcywgX19sZW4sIF9fYyk7DQoNCg0KICAg
ICAgICAgIGlmIChfX3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVxKF9fYywgY2hhcl90eXBlKCkpKQ0K
ICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfX3AgLSBf
X3dhdG9tc107DQogICAgICAgICAgICAgICsrX19wb3M7DQogICAgICAgICAgICAgICsrX19zZXBf
cG9zOw0KICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICAgICAgfQ0KICAg
ICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19zZXApICYmIF9fY2hlY2tf
Z3JvdXBpbmcpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICBpZiAoX19zZXBfcG9z
KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcg
Kz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsNCiAgICAgICAgICAgICAgICAgIF9fc2Vw
X3BvcyA9IDA7DQogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICAg
ICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAg
ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAgICAgICAgICAgICAg
YnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UN
Cg0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCg0KDQoNCiAgICAgIGlmIChfX2NoZWNr
X2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQ0KICAgICAgICB7DQoNCiAgICAg
ICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7DQog
ICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2ZvdW5kX2dyb3Vw
aW5nKSkNCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAgICB9
DQoNCg0KICAgICAgX194dHJjICs9IGNoYXIoKTsNCiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkN
CiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsNCiAgICAgIHJldHVybiBfX2JlZzsN
CiAgICB9DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
cj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19n
ZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QNCiAgICB7
DQoNCiAgICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxwaGEpKQ0KICAg
ICAgICB7DQoNCg0KICAgICAgICAgIHN0cmluZyBfX3h0cmM7DQogICAgICAgICAgaW50IF9fYmFz
ZTsNCiAgICAgICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywg
X19lcnIsIF9feHRyYywgX19iYXNlKTsNCg0KICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsN
CiAgICAgICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9T
X2NfbG9jYWxlLCBfX2Jhc2UpOw0KICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZh
aWxiaXQpICYmIF9fdWwgPD0gMSkNCiAgICAgICAgICAgIF9fdiA9IF9fdWw7DQogICAgICAgICAg
ZWxzZQ0KICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQogICAgICAgIH0N
Cg0KDQogICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICB0eXBlZGVmIGNoYXJfdHJhaXRz
PF9DaGFyVD4gX190cmFpdHNfdHlwZTsNCiAgICAgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf
Q2hhclQ+IF9fc3RyaW5nX3R5cGU7DQoNCiAgICAgICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdl
dGxvYygpOw0KICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFj
ZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsNCiAgICAgICAgICBjb25zdCBfX3N0cmluZ190
eXBlIF9fdHJ1ZSA9IF9fbnAudHJ1ZW5hbWUoKTsNCiAgICAgICAgICBjb25zdCBfX3N0cmluZ190
eXBlIF9fZmFsc2UgPSBfX25wLmZhbHNlbmFtZSgpOw0KICAgICAgICAgIGNvbnN0IGNoYXJfdHlw
ZSogX190cnVlcyA9IF9fdHJ1ZS5jX3N0cigpOw0KICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X19mYWxzZXMgPSBfX2ZhbHNlLmNfc3RyKCk7DQogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdHJ1
ZW4gPSBfX3RydWUuc2l6ZSgpIC0gMTsNCiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZW4g
PSBfX2ZhbHNlLnNpemUoKSAtIDE7DQoNCiAgICAgICAgICBmb3IgKHNpemVfdCBfX24gPSAwOyBf
X2JlZyAhPSBfX2VuZDsgKytfX24pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGNoYXJf
dHlwZSBfX2MgPSAqX19iZWcrKzsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RmID0gX19uIDw9
IF9fZmFsc2VuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX190cmFpdHNfdHlwZTo6
ZXEoX19jLCBfX2ZhbHNlc1tfX25dKSA6IGZhbHNlOw0KICAgICAgICAgICAgICBib29sIF9fdGVz
dHQgPSBfX24gPD0gX190cnVlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9fdHJh
aXRzX3R5cGU6OmVxKF9fYywgX190cnVlc1tfX25dKSA6IGZhbHNlOw0KICAgICAgICAgICAgICBp
ZiAoIShfX3Rlc3RmIHx8IF9fdGVzdHQpKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAg
ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAgICAgICAgICAgICAgYnJl
YWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3RmICYm
IF9fbiA9PSBfX2ZhbHNlbikNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBf
X3YgPSAwOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3R0ICYmIF9fbiA9PSBfX3RydWVuKQ0KICAgICAgICAg
ICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fdiA9IDE7DQogICAgICAgICAgICAgICAgICBi
cmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKF9f
YmVnID09IF9fZW5kKQ0KICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsNCiAg
ICAgICAgfQ0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxf
Q2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIGxvbmcmIF9fdikgY29uc3QNCiAgICB7DQogICAgICBzdHJpbmcgX194dHJjOw0KICAgICAg
aW50IF9fYmFzZTsNCiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBf
X2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOw0KICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJj
LmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOw0KICAgICAgcmV0dXJu
IF9fYmVnOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXI+DQogICAgX0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAg
ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywN
CiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192
KSBjb25zdA0KICAgIHsNCiAgICAgIHN0cmluZyBfX3h0cmM7DQogICAgICBpbnQgX19iYXNlOw0K
ICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf
X3h0cmMsIF9fYmFzZSk7DQogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7DQogICAgICBfX2NvbnZl
cnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2Up
Ow0KICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkNCiAgICAgICAgICAmJiBf
X3VsIDw9IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCkpDQogICAgICAgIF9f
diA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX3VsKTsNCiAgICAgIGVsc2UNCiAgICAg
ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQogICAgICByZXR1cm4gX19iZWc7DQogICAg
fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBf
SW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90
eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdA0KICAgIHsN
CiAgICAgIHN0cmluZyBfX3h0cmM7DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX19iZWcgPSBf
TV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7
DQogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7DQogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMu
Y19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOw0KICAgICAgaWYgKCEo
X19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkNCiAgICAgICAgICAmJiBfX3VsIDw9IG51bWVyaWNf
bGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpKQ0KICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBpbnQ+KF9fdWwpOw0KICAgICAgZWxzZQ0KICAgICAgICBfX2VyciB8PSBpb3NfYmFz
ZTo6ZmFpbGJpdDsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0ZXINCiAgICBudW1fZ2V0
PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdA0KICAgIHsNCiAgICAgIHN0cmluZyBfX3h0
cmM7DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2Jl
ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7DQogICAgICBfX2NvbnZlcnRf
dG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7DQog
ICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0lu
SXRlcj46Og0KICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBs
b25nJiBfX3YpIGNvbnN0DQogICAgew0KICAgICAgc3RyaW5nIF9feHRyYzsNCiAgICAgIGludCBf
X2Jhc2U7DQogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywg
X19lcnIsIF9feHRyYywgX19iYXNlKTsNCiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0
cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsNCiAgICAgIHJldHVybiBfX2Jl
ZzsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
Pg0KICAgIF9Jbkl0ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dl
dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyBsb25nJiBfX3Yp
IGNvbnN0DQogICAgew0KICAgICAgc3RyaW5nIF9feHRyYzsNCiAgICAgIGludCBfX2Jhc2U7DQog
ICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
eHRyYywgX19iYXNlKTsNCiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3Ys
IF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9
DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAg
X0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAgZG9fZ2V0KGl0ZXJf
dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdA0KICAgIHsNCiAgICAg
IHN0cmluZyBfX3h0cmM7DQogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7DQogICAgICBfX2JlZyA9
IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsNCiAg
ICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2Fs
ZSk7DQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQs
IF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRv
dWJsZSYgX192KSBjb25zdA0KICAgIHsNCiAgICAgIHN0cmluZyBfX3h0cmM7DQogICAgICBfX3h0
cmMucmVzZXJ2ZSgzMik7DQogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsNCiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5j
X3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7DQogICAgICByZXR1cm4gX19iZWc7DQog
ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAg
ICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRl
cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0DQogICAg
ew0KICAgICAgc3RyaW5nIF9feHRyYzsNCiAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsNCiAgICAg
IF9fYmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0
cmMpOw0KDQoNCg0KDQoNCiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3Ys
IF9fZXJyLCBfU19jX2xvY2FsZSk7DQoNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0ZXIN
CiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dldChpdGVyX3R5cGUgX19i
ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QNCiAgICB7DQoNCiAgICAgIHR5cGVk
ZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOw0KICAgICAgZm10ZmxhZ3MgX19mbXQgPSBf
X2lvLmZsYWdzKCk7DQogICAgICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93
cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOw0KICAgICAgX19pby5m
bGFncyhfX2ZtdCAmIF9fZm10bWFzayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3di
YXNlKSk7DQoNCiAgICAgIHN0cmluZyBfX3h0cmM7DQogICAgICBpbnQgX19iYXNlOw0KICAgICAg
X19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMs
IF9fYmFzZSk7DQoNCg0KICAgICAgX19pby5mbGFncyhfX2ZtdCk7DQoNCiAgICAgIHVuc2lnbmVk
IGxvbmcgX191bDsNCiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBf
X2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7DQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNl
OjpmYWlsYml0KSkNCiAgICAgICAgX192ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oX191bCk7
DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAg
cmV0dXJuIF9fYmVnOw0KICAgIH0NCiMgNjI0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv
Y2FsZV9mYWNldHMudGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXI+DQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4NCiAgICAgIF9PdXRJdGVy
DQogICAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICAgIF9NX2NvbnZlcnRfZmxv
YXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciBfX21v
ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVCBfX3YpIGNvbnN0DQogICAgICB7DQoN
Cg0KICAgICAgICBjb25zdCBpbnQgX19tYXhfZGlnaXRzID0gbnVtZXJpY19saW1pdHM8X1ZhbHVl
VD46OmRpZ2l0czEwICsgMTsNCiAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMgPSBfX2lvLnByZWNp
c2lvbigpOw0KDQogICAgICAgIGlmIChfX3ByZWMgPiBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihf
X21heF9kaWdpdHMpKQ0KICAgICAgICAgIF9fcHJlYyA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+
KF9fbWF4X2RpZ2l0cyk7DQoNCg0KICAgICAgICBjaGFyIF9fZmJ1ZlsxNl07DQoNCg0KICAgICAg
ICBpbnQgX19sZW47DQojIDY3MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFj
ZXRzLnRjYyIgMw0KICAgICAgICBjb25zdCBib29sIF9fZml4ZWQgPSBfX2lvLmZsYWdzKCkgJiBp
b3NfYmFzZTo6Zml4ZWQ7DQogICAgICAgIGNvbnN0IGludCBfX21heF9leHAgPSBudW1lcmljX2xp
bWl0czxfVmFsdWVUPjo6bWF4X2V4cG9uZW50MTA7DQoNCg0KDQoNCg0KICAgICAgICBjb25zdCBp
bnQgX19jc19zaXplID0gX19maXhlZCA/IF9fbWF4X2V4cCArIF9fbWF4X2RpZ2l0cyArIDQNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21heF9kaWdpdHMgKiAzOw0K
ICAgICAgICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2Eo
X19jc19zaXplKSk7DQoNCiAgICAgICAgaWYgKF9TX2Zvcm1hdF9mbG9hdChfX2lvLCBfX2ZidWYs
IF9fbW9kLCBfX3ByZWMpKQ0KICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2Nz
LCAwLCBfX2ZidWYsIF9fdiwgX1NfY19sb2NhbGUsIF9fcHJlYyk7DQogICAgICAgIGVsc2UNCiAg
ICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgMCwgX19mYnVmLCBfX3YsIF9T
X2NfbG9jYWxlKTsNCg0KICAgICAgICByZXR1cm4gX01fd2lkZW5fZmxvYXQoX19zLCBfX2lvLCBf
X2ZpbGwsIF9fY3MsIF9fbGVuKTsNCiAgICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+DQog
ICAgICBfT3V0SXRlcg0KICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgICBf
TV9jb252ZXJ0X2ludChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxs
LCBjaGFyIF9fbW9kLA0KICAgICAgICAgICAgICAgICAgICAgY2hhciBfX21vZGwsIF9WYWx1ZVQg
X192KSBjb25zdA0KICAgICAgew0KDQoNCg0KICAgICAgICBjaGFyIF9fZmJ1ZlsxNl07DQogICAg
ICAgIF9TX2Zvcm1hdF9pbnQoX19pbywgX19mYnVmLCBfX21vZCwgX19tb2RsKTsNCiMgNzE5ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQogICAgICAgIGNo
YXIgX19jc1sxMjhdOw0KICAgICAgICBpbnQgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3Ms
IDAsIF9fZmJ1ZiwgX192LCBfU19jX2xvY2FsZSk7DQoNCiAgICAgICAgcmV0dXJuIF9NX3dpZGVu
X2ludChfX3MsIF9faW8sIF9fZmlsbCwgX19jcywgX19sZW4pOw0KICAgICAgfQ0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0ZXINCiAg
ICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBfTV93aWRlbl9mbG9hdChfT3V0SXRl
ciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyKiBfX2NzLA0KICAgICAg
ICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QNCiAgICB7DQogICAgICB0eXBlZGVmIGNoYXJf
dHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsNCg0KDQogICAgICBjb25zdCBsb2NhbGUgX19s
b2MgPSBfX2lvLmdldGxvYygpOw0KICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOw0KICAgICAgX0NoYXJUKiBfX3dzID0g
c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQ0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
IF9fbGVuKSk7DQoNCg0KICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+
KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4gKiAyKSk7DQogICAg
ICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7DQoNCg0KICAgICAgY29u
c3QgX0NoYXJUKiBfX3A7DQogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNl
X2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7DQogICAgICBpZiAoX19wID0gX190cmFp
dHNfdHlwZTo6ZmluZChfX3dzLCBfX2xlbiwgX19jdHlwZS53aWRlbignLicpKSkNCiAgICAgICAg
X193c1tfX3AgLSBfX3dzXSA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOw0KDQoNCg0KDQogICAgICBj
b25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsNCiAgICAgIGlvc19iYXNl
OjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmll
bGQ7DQogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkpDQogICAgICAgIHsNCiAgICAgICAgICBf
Q2hhclQqIF9fcDI7DQogICAgICAgICAgaW50IF9fZGVjbGVuID0gX19wID8gX19wIC0gX193cyA6
IF9fbGVuOw0KICAgICAgICAgIF9fcDIgPSBfX2FkZF9ncm91cGluZyhfX3dzMiwgX19ucC50aG91
c2FuZHNfc2VwKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcu
Y19zdHIoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0
cigpICsgX19ncm91cGluZy5zaXplKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fd3MsIF9fd3MgKyBfX2RlY2xlbik7DQogICAgICAgICAgaW50IF9fbmV3bGVuID0gX19wMiAt
IF9fd3MyOw0KDQoNCiAgICAgICAgICBpZiAoX19wKQ0KICAgICAgICAgICAgew0KICAgICAgICAg
ICAgICBfX3RyYWl0c190eXBlOjpjb3B5KF9fcDIsIF9fcCwgX19sZW4gLSBfX2RlY2xlbik7DQog
ICAgICAgICAgICAgIF9fbmV3bGVuICs9IF9fbGVuIC0gX19kZWNsZW47DQogICAgICAgICAgICB9
DQoNCg0KICAgICAgICAgIF9fd3MgPSBfX3dzMjsNCiAgICAgICAgICBfX2xlbiA9IF9fbmV3bGVu
Ow0KICAgICAgICB9DQoNCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGws
IF9fd3MsIF9fbGVuKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRl
cj46Og0KICAgIF9NX3dpZGVuX2ludChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hh
clQgX19maWxsLCBjaGFyKiBfX2NzLA0KICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0
DQogICAgew0KDQoNCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQog
ICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy
VD4gPihfX2xvYyk7DQogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihf
X2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4pKTsNCg0KDQogICAgICBf
Q2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXpl
b2YoX0NoYXJUKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKiBfX2xlbiAqIDIpKTsNCiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywg
X19jcyArIF9fbGVuLCBfX3dzKTsNCg0KDQogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBf
X25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7DQogICAgICBjb25zdCBz
dHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsNCiAgICAgIGNvbnN0IGlvc19iYXNl
OjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmll
bGQ7DQogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkpDQogICAgICAgIHsNCg0KDQoNCiAgICAg
ICAgICBzdHJlYW1zaXplIF9fb2ZmID0gMDsNCiAgICAgICAgICBpZiAoX19pby5mbGFncygpICYg
aW9zX2Jhc2U6OnNob3diYXNlKQ0KICAgICAgICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19i
YXNlOjpvY3QpDQogICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBfX29mZiA9IDE7DQog
ICAgICAgICAgICAgICAgKl9fd3MyID0gKl9fd3M7DQogICAgICAgICAgICAgIH0NCiAgICAgICAg
ICAgIGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpDQogICAgICAgICAgICAg
IHsNCiAgICAgICAgICAgICAgICBfX29mZiA9IDI7DQogICAgICAgICAgICAgICAgKl9fd3MyID0g
Kl9fd3M7DQogICAgICAgICAgICAgICAgKihfX3dzMiArIDEpID0gKihfX3dzICsgMSk7DQogICAg
ICAgICAgICAgIH0NCiAgICAgICAgICBfQ2hhclQqIF9fcDsNCiAgICAgICAgICBfX3AgPSBfX2Fk
ZF9ncm91cGluZyhfX3dzMiArIF9fb2ZmLCBfX25wLnRob3VzYW5kc19zZXAoKSwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigpICsgX19ncm91cGluZy5zaXplKCks
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193cyArIF9fb2ZmLCBfX3dzICsgX19s
ZW4pOw0KICAgICAgICAgIF9fbGVuID0gX19wIC0gX193czI7DQoNCiAgICAgICAgICBfX3dzID0g
X193czI7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2Zp
bGwsIF9fd3MsIF9fbGVuKTsNCiAgICB9DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0ZXINCiAgICBudW1fcHV0PF9DaGFyVCwg
X091dEl0ZXI+OjoNCiAgICBfTV9pbnNlcnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywg
X0NoYXJUIF9fZmlsbCwgY29uc3QgX0NoYXJUKiBfX3dzLA0KICAgICAgICAgICAgICBpbnQgX19s
ZW4pIGNvbnN0DQogICAgew0KICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJh
aXRzX3R5cGU7DQoNCiAgICAgIHN0cmVhbXNpemUgX193ID0gX19pby53aWR0aCgpOw0KICAgICAg
X0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6
ZW9mKF9DaGFyVCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICogX193KSk7DQogICAgICBpZiAoX193ID4gc3RhdGljX2Nhc3Q8c3Ry
ZWFtc2l6ZT4oX19sZW4pKQ0KICAgICAgICB7DQogICAgICAgICAgX19wYWQ8X0NoYXJULCBfX3Ry
YWl0c190eXBlPjo6X1NfcGFkKF9faW8sIF9fZmlsbCwgX193czIsIF9fd3MsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdywgX19sZW4sIHRydWUpOw0K
ICAgICAgICAgIF9fbGVuID0gc3RhdGljX2Nhc3Q8aW50PihfX3cpOw0KDQogICAgICAgICAgX193
cyA9IF9fd3MyOw0KICAgICAgICB9DQogICAgICBfX2lvLndpZHRoKDApOw0KDQoNCg0KICAgICAg
Zm9yIChpbnQgX19qID0gMDsgX19qIDwgX19sZW47ICsrX19qLCArK19fcykNCiAgICAgICAgKl9f
cyA9IF9fd3NbX19qXTsNCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0ZXINCiAgICBudW1f
cHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jh
c2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdA0KICAgIHsNCiAgICAg
IGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOw0KICAgICAgaWYgKChf
X2ZsYWdzICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCkNCiAgICAgICAgew0KICAgICAgICAg
IHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsNCiAgICAgICAgICBfX3MgPSBfTV9jb252ZXJ0X2lu
dChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCBjaGFyKCksIF9fdXYpOw0KICAgICAgICB9DQogICAg
ICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+
IF9fc3RyaW5nX3R5cGU7DQogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsN
CiAgICAgICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1
bmN0PF9DaGFyVD4gPihfX2xvYyk7DQogICAgICAgICAgX19zdHJpbmdfdHlwZSBfX25hbWU7DQog
ICAgICAgICAgaWYgKF9fdikNCiAgICAgICAgICAgIF9fbmFtZSA9IF9fbnAudHJ1ZW5hbWUoKTsN
CiAgICAgICAgICBlbHNlDQogICAgICAgICAgICBfX25hbWUgPSBfX25wLmZhbHNlbmFtZSgpOw0K
ICAgICAgICAgIF9fcyA9IF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX19uYW1lLmNfc3Ry
KCksIF9fbmFtZS5zaXplKCkpOw0KICAgICAgICB9DQogICAgICByZXR1cm4gX19zOw0KICAgIH0N
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIF9P
dXRJdGVyDQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgZG9fcHV0KGl0ZXJf
dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29u
c3QNCiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ2QnLCBj
aGFyKCksIF9fdik7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P
dXRJdGVyPg0KICAgIF9PdXRJdGVyDQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQog
ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs
LA0KICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QNCiAgICB7IHJldHVybiBfTV9j
b252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCBjaGFyKCksIF9fdik7IH0NCg0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0
ZXINCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBkb19wdXQoaXRlcl90eXBl
IF9fcywgaW9zX2Jhc2UmIF9fYiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29u
c3QNCiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9fYiwgX19maWxsLCAnZCcsICds
JywgX192KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXI+DQogICAgX091dEl0ZXINCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBk
b19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsDQog
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0DQogICAgeyByZXR1cm4gX01f
Y29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgJ2wnLCBfX3YpOyB9DQoNCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIF9PdXRJdGVy
DQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgZG9fcHV0KGl0ZXJfdHlwZSBf
X3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdA0K
ICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIGNoYXIoKSwg
X192KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+
DQogICAgX091dEl0ZXINCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBkb19w
dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsDQogICAg
ICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QNCiAgICB7DQoNCg0KDQoNCiAgICAgIHJldHVy
biBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7DQoNCiAgIH0N
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIF9P
dXRJdGVyDQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgZG9fcHV0KGl0ZXJf
dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLA0KICAgICAgICAgICBj
b25zdCB2b2lkKiBfX3YpIGNvbnN0DQogICAgew0KICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9f
ZmxhZ3MgPSBfX2lvLmZsYWdzKCk7DQogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+
KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50
ZXJuYWwpOw0KICAgICAgX19pby5mbGFncyhfX2ZsYWdzICYgX19mbXQgfCAoaW9zX2Jhc2U6Omhl
eCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOw0KICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAg
ICBfX3MgPSBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCBjaGFyKCksDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBs
b25nPihfX3YpKTsNCiAgICAgICAgICBfX2lvLmZsYWdzKF9fZmxhZ3MpOw0KICAgICAgICB9DQog
ICAgICBjYXRjaCAoLi4uKQ0KICAgICAgICB7DQogICAgICAgICAgX19pby5mbGFncyhfX2ZsYWdz
KTsNCiAgICAgICAgICB0aHJvdzsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fczsNCiAgICB9
DQojIDk4MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMw0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgX0luSXRl
cg0KICAgIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBl
IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywNCiAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykg
Y29uc3QNCiAgICB7DQogICAgICBzdHJpbmdfdHlwZSBfX3N0cjsNCiAgICAgIF9fYmVnID0gdGhp
cy0+ZG9fZ2V0KF9fYmVnLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX19zdHIpOw0KDQog
ICAgICBjb25zdCBpbnQgX19uID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjpkaWdpdHMx
MDsNCiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9j
YShfX24pKTsNCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAg
ICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g
PihfX2xvYyk7DQogICAgICBjb25zdCBfQ2hhclQqIF9fd2NzID0gX19zdHIuY19zdHIoKTsNCiAg
ICAgIF9fY3R5cGUubmFycm93KF9fd2NzLCBfX3djcyArIF9fc3RyLnNpemUoKSArIDEsIGNoYXIo
KSwgX19jcyk7DQogICAgICBfX2NvbnZlcnRfdG9fdihfX2NzLCBfX3VuaXRzLCBfX2VyciwgX1Nf
Y19sb2NhbGUpOw0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbW9uZXlf
Z2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX3VuaXRzKSBjb25zdA0KICAgIHsN
Cg0KICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgdHJ1ZT4gX19tb25leV90cnVlOw0K
ICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9uZXlfZmFsc2U7DQog
ICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsNCiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7DQoNCiAgICAgIGNvbnN0IGxvY2Fs
ZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0
ID0gdXNlX2ZhY2V0PF9fbW9uZXlfdHJ1ZT4oX19sb2MpOw0KICAgICAgY29uc3QgX19tb25leV9m
YWxzZSYgX19tcGYgPSB1c2VfZmFjZXQ8X19tb25leV9mYWxzZT4oX19sb2MpOw0KICAgICAgY29u
c3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s
b2MpOw0KDQogICAgICBjb25zdCBtb25leV9iYXNlOjpwYXR0ZXJuIF9fcCA9IF9faW50bCA/IF9f
bXB0Lm5lZ19mb3JtYXQoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBfX21wZi5uZWdfZm9ybWF0KCk7DQoNCiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9f
cG9zX3NpZ24gPV9faW50bCA/IF9fbXB0LnBvc2l0aXZlX3NpZ24oKQ0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYucG9zaXRpdmVfc2lnbigpOw0KICAg
ICAgY29uc3Qgc3RyaW5nX3R5cGUgX19uZWdfc2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVf
c2lnbigpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21w
Zi5uZWdhdGl2ZV9zaWduKCk7DQogICAgICBjb25zdCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8g
X19tcHQuZGVjaW1hbF9wb2ludCgpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogX19tcGYuZGVjaW1hbF9wb2ludCgpOw0KICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0g
X19pbnRsID8gX19tcHQudGhvdXNhbmRzX3NlcCgpDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBfX21wZi50aG91c2FuZHNfc2VwKCk7DQoNCiAgICAgIGNvbnN0IHN0cmlu
ZyBfX2dyb3VwaW5nID0gX19pbnRsID8gX19tcHQuZ3JvdXBpbmcoKSA6IF9fbXBmLmdyb3VwaW5n
KCk7DQoNCg0KICAgICAgc3RyaW5nX3R5cGUgX19zaWduOw0KDQogICAgICBzdHJpbmcgX19ncm91
cGluZ190bXA7DQoNCiAgICAgIGludCBfX3NlcF9wb3MgPSAwOw0KDQogICAgICBib29sIF9fdGVz
dHZhbGlkID0gdHJ1ZTsNCg0KICAgICAgYm9vbCBfX3Rlc3RkZWNmb3VuZCA9IGZhbHNlOw0KDQoN
CiAgICAgIHN0cmluZ190eXBlIF9fdGVtcF91bml0czsNCg0KICAgICAgY2hhcl90eXBlIF9fYyA9
ICpfX2JlZzsNCiAgICAgIGNoYXJfdHlwZSBfX2VvZiA9IHN0YXRpY19jYXN0PGNoYXJfdHlwZT4o
Y2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6ZW9mKCkpOw0KICAgICAgZm9yIChpbnQgX19pID0gMDsg
X19iZWcgIT0gX19lbmQgJiYgX19pIDwgNCAmJiBfX3Rlc3R2YWxpZDsgKytfX2kpDQogICAgICAg
IHsNCiAgICAgICAgICBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRb
X19pXSk7DQogICAgICAgICAgc3dpdGNoIChfX3doaWNoKQ0KICAgICAgICAgICAgICAgIHsNCiAg
ICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoNCiAgICAgICAgICAgICAgICAg
IGlmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UNCiAgICAgICAgICAgICAgICAg
ICAgICB8fCBfX2kgPCAyIHx8IF9fc2lnbi5zaXplKCkgPiAxDQogICAgICAgICAgICAgICAgICAg
ICAgfHwgKChzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRbM10pICE9IG1vbmV5X2Jhc2U6Om5v
bmUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9faSA9PSAyKSkNCiAgICAgICAgICAg
ICAgICAgICAgew0KDQoNCg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdf
dHlwZSBfX3N5bWJvbCA9IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuY3Vy
cl9zeW1ib2woKTsNCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3N5
bWJvbC5zaXplKCk7DQogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9faiA9IDA7DQog
ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIF9faiA8IF9fbGVuICYmIF9fc3ltYm9sW19fal0gPT0gX19jKQ0K
ICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Mg
PSAqKCsrX19iZWcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICArK19fajsNCiAgICAgICAg
ICAgICAgICAgICAgICAgIH0NCg0KDQogICAgICAgICAgICAgICAgICAgICAgaWYgKF9faiAhPSBf
X2xlbiAmJiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSkNCiAgICAgICAgICAg
ICAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgIH0N
CiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFz
ZTo6c2lnbjoNCg0KICAgICAgICAgICAgICAgICAgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9f
bmVnX3NpZ24uc2l6ZSgpKQ0KICAgICAgICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgICAg
ICAgIGlmIChfX2MgPT0gX19wb3Nfc2lnblswXSkNCiAgICAgICAgICAgICAgICAgICAgICB7DQog
ICAgICAgICAgICAgICAgICAgICAgICBfX3NpZ24gPSBfX3Bvc19zaWduOw0KICAgICAgICAgICAg
ICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsNCiAgICAgICAgICAgICAgICAgICAgICB9DQog
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fYyA9PSBfX25lZ19zaWduWzBdKQ0KICAgICAg
ICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fbmVn
X3NpZ247DQogICAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAg
ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAg
ICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICB9DQogICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChfX3Bvc19zaWduLnNpemUoKSAmJiBfX2MgPT0gX19wb3Nf
c2lnblswXSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgIF9f
c2lnbiA9IF9fcG9zX3NpZ247DQogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVn
KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19u
ZWdfc2lnbi5zaXplKCkgJiYgX19jID09IF9fbmVnX3NpZ25bMF0pDQogICAgICAgICAgICAgICAg
ICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICBfX3NpZ24gPSBfX25lZ19zaWduOw0KICAgICAg
ICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7DQogICAgICAgICAgICAgICAgICAgIH0N
CiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFz
ZTo6dmFsdWU6DQoNCg0KICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kDQog
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQs
IF9fYykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKF9fYyA9PSBfX2QgJiYgIV9f
dGVzdGRlY2ZvdW5kKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19z
ZXApKQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKF9f
YyA9PSBfX2QpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fZ3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7DQog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7DQogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fdGVzdGRlY2ZvdW5kID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAg
IH0NCiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19zZXApDQogICAgICAg
ICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2dyb3Vw
aW5nLnNpemUoKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQoNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9f
c2VwX3Bvcyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg
ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAg
ICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RlbXBfdW5pdHMgKz0gX19j
Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICArK19fc2VwX3BvczsNCiAgICAgICAgICAgICAg
ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAg
ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAg
ICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOg0KICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlf
YmFzZTo6bm9uZToNCg0KICAgICAgICAgICAgICAgICAgaWYgKF9faSAhPSAzKQ0KICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpDQogICAgICAgICAgICAg
ICAgICAgICAgX19jID0gKigrK19fYmVnKTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAg
ICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQoNCiAgICAgIGlmIChfX3NpZ24uc2l6ZSgpID4g
MSkNCiAgICAgICAgew0KICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc2lnbi5zaXplKCk7
DQogICAgICAgICAgc2l6ZV90eXBlIF9faSA9IDE7DQogICAgICAgICAgZm9yICg7IF9fYyAhPSBf
X2VvZiAmJiBfX2kgPCBfX2xlbjsgKytfX2kpDQogICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0g
X19lbmQgJiYgX19jICE9IF9fc2lnbltfX2ldKQ0KICAgICAgICAgICAgICBfX2MgPSAqKCsrX19i
ZWcpOw0KDQogICAgICAgICAgaWYgKF9faSAhPSBfX2xlbikNCiAgICAgICAgICAgIF9fdGVzdHZh
bGlkID0gZmFsc2U7DQogICAgICAgIH0NCg0KDQogICAgICB3aGlsZSAoX190ZW1wX3VuaXRzWzBd
ID09IF9fY3R5cGUud2lkZW4oJzAnKSkNCiAgICAgICAgX190ZW1wX3VuaXRzLmVyYXNlKF9fdGVt
cF91bml0cy5iZWdpbigpKTsNCg0KICAgICAgaWYgKF9fc2lnbi5zaXplKCkgJiYgX19zaWduID09
IF9fbmVnX3NpZ24pDQogICAgICAgIF9fdGVtcF91bml0cy5pbnNlcnQoX190ZW1wX3VuaXRzLmJl
Z2luKCksIF9fY3R5cGUud2lkZW4oJy0nKSk7DQoNCg0KICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6
ZSgpICYmIF9fZ3JvdXBpbmdfdG1wLnNpemUoKSkNCiAgICAgICAgew0KICAgICAgICAgIGlmICgh
X192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19ncm91cGluZ190bXApKQ0KICAgICAgICAg
ICAgX190ZXN0dmFsaWQgPSBmYWxzZTsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGlmIChfX2MgPT0g
X19lb2YpDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7DQoNCg0KICAgICAgaWYg
KCFfX3Rlc3R2YWxpZCB8fCAhX190ZW1wX3VuaXRzLnNpemUoKSkNCiAgICAgICAgX19lcnIgfD0g
aW9zX2Jhc2U6OmZhaWxiaXQ7DQogICAgICBlbHNlDQoNCiAgICAgICAgX190ZW1wX3VuaXRzLnN3
YXAoX191bml0cyk7DQoNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQojIDEyMzYgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG1vbmV5
X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wg
X19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwNCiAgICAgICAgICAgbG9u
ZyBkb3VibGUgX191bml0cykgY29uc3QNCiAgICB7DQogICAgICBjb25zdCBsb2NhbGUgX19sb2Mg
PSBfX2lvLmdldGxvYygpOw0KICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVz
ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOw0KIyAxMjYxICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQogICAgICBjb25zdCBpbnQgX19jc19zaXpl
ID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjptYXhfZXhwb25lbnQxMCArIDU7DQogICAg
ICBjaGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19z
aXplKSk7DQogICAgICBpbnQgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIDAsICIlLjAx
TGYiLCBfX3VuaXRzLCBfU19jX2xvY2FsZSk7DQoNCiAgICAgIF9DaGFyVCogX193cyA9IHN0YXRp
Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2NzX3Np
emUpKTsNCiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsNCiAg
ICAgIHN0cmluZ190eXBlIF9fZGlnaXRzKF9fd3MpOw0KICAgICAgcmV0dXJuIHRoaXMtPmRvX3B1
dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7DQogICAgfQ0KDQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0K
ICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgZG9fcHV0KGl0ZXJfdHlwZSBf
X3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwNCiAgICAg
ICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdA0KICAgIHsNCiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7DQogICAgICB0
eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsNCg0KICAgICAgY29uc3QgbG9jYWxlIF9fbG9j
ID0gX19pby5nZXRsb2MoKTsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3dpZHRoID0gc3RhdGlj
X2Nhc3Q8c2l6ZV90eXBlPihfX2lvLndpZHRoKCkpOw0KDQoNCiAgICAgIHR5cGVkZWYgbW9uZXlw
dW5jdDxfQ2hhclQsIHRydWU+IF9fbW9uZXlfdHJ1ZTsNCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5j
dDxfQ2hhclQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOw0KICAgICAgY29uc3QgX19tb25leV90cnVl
JiBfX21wdCA9IHVzZV9mYWNldDxfX21vbmV5X3RydWU+KF9fbG9jKTsNCiAgICAgIGNvbnN0IF9f
bW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsNCiAg
ICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU
PiA+KF9fbG9jKTsNCg0KDQoNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19iZWcgPSBfX2RpZ2l0
cy5kYXRhKCk7DQogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZW5kID0gX19iZWcgKyBfX2RpZ2l0
cy5zaXplKCk7DQogICAgICBtb25leV9iYXNlOjpwYXR0ZXJuIF9fcDsNCiAgICAgIHN0cmluZ190
eXBlIF9fc2lnbjsNCiAgICAgIGlmICgqX19iZWcgIT0gX19jdHlwZS53aWRlbignLScpKQ0KICAg
ICAgICB7DQogICAgICAgICAgX19wID0gX19pbnRsID8gX19tcHQucG9zX2Zvcm1hdCgpIDogX19t
cGYucG9zX2Zvcm1hdCgpOw0KICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQucG9zaXRp
dmVfc2lnbigpIDogX19tcGYucG9zaXRpdmVfc2lnbigpOw0KICAgICAgICB9DQogICAgICBlbHNl
DQogICAgICAgIHsNCiAgICAgICAgICBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0KCkg
OiBfX21wZi5uZWdfZm9ybWF0KCk7DQogICAgICAgICAgX19zaWduID1fX2ludGwgPyBfX21wdC5u
ZWdhdGl2ZV9zaWduKCkgOiBfX21wZi5uZWdhdGl2ZV9zaWduKCk7DQogICAgICAgICAgKytfX2Jl
ZzsNCiAgICAgICAgfQ0KDQoNCiAgICAgIF9fZW5kID0gX19jdHlwZS5zY2FuX25vdChjdHlwZV9i
YXNlOjpkaWdpdCwgX19iZWcsIF9fZW5kKTsNCiAgICAgIGlmIChfX2JlZyAhPSBfX2VuZCkNCiAg
ICAgICAgew0KDQoNCg0KICAgICAgICAgIHN0cmluZ190eXBlIF9fcmVzOw0KICAgICAgICAgIHN0
cmluZ190eXBlIF9fdmFsdWU7DQogICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1ib2wg
PSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5bWJvbCgpOw0KDQoNCiAgICAgICAg
ICBjb25zdCBpbnQgX19mcmFjID0gX19pbnRsID8gX19tcHQuZnJhY19kaWdpdHMoKQ0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5mcmFjX2RpZ2l0cygpOw0KICAg
ICAgICAgIGlmIChfX2ZyYWMgPiAwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBjb25z
dCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgpDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50
KCk7DQogICAgICAgICAgICAgIGlmIChfX2VuZCAtIF9fYmVnID49IF9fZnJhYykNCiAgICAgICAg
ICAgICAgICB7DQogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19lbmQg
LSBfX2ZyYWMsIF9fZW5kKTsNCiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFs
dWUuYmVnaW4oKSwgX19kKTsNCiAgICAgICAgICAgICAgICAgIF9fZW5kIC09IF9fZnJhYzsNCiAg
ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQoN
CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUgPSBzdHJpbmdfdHlwZShfX2JlZywgX19lbmQpOw0K
ICAgICAgICAgICAgICAgICAgaW50IF9fcGFkZGVjID0gX19mcmFjIC0gKF9fZW5kIC0gX19iZWcp
Ow0KICAgICAgICAgICAgICAgICAgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAn
KTsNCiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwgX19w
YWRkZWMsIF9femVybyk7DQogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydChfX3ZhbHVl
LmJlZ2luKCksIF9fZCk7DQogICAgICAgICAgICAgICAgICBfX2JlZyA9IF9fZW5kOw0KICAgICAg
ICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KDQoNCiAgICAgICAgICBpZiAoX19iZWcgIT0g
X19lbmQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3Vw
aW5nID0gX19pbnRsID8gX19tcHQuZ3JvdXBpbmcoKQ0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmdyb3VwaW5nKCk7DQogICAgICAgICAgICAg
IGlmIChfX2dyb3VwaW5nLnNpemUoKSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNfc2Vw
KCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9f
bXBmLnRob3VzYW5kc19zZXAoKTsNCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2Jl
ZyA9IF9fZ3JvdXBpbmcuY19zdHIoKTsNCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9f
Z2VuZCA9IF9fZ2JlZyArIF9fZ3JvdXBpbmcuc2l6ZSgpOw0KICAgICAgICAgICAgICAgICAgY29u
c3QgaW50IF9fbiA9IChfX2VuZCAtIF9fYmVnKSAqIDI7DQogICAgICAgICAgICAgICAgICBfQ2hh
clQqIF9fd3MyID0NCiAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19i
dWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbikpOw0KICAgICAgICAgICAgICAgICAg
X0NoYXJUKiBfX3dzX2VuZCA9IF9fYWRkX2dyb3VwaW5nKF9fd3MyLCBfX3NlcCwgX19nYmVnLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2Vu
ZCwgX19iZWcsIF9fZW5kKTsNCiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KDAsIF9f
d3MyLCBfX3dzX2VuZCAtIF9fd3MyKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg
IGVsc2UNCiAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydCgwLCBzdHJpbmdfdHlwZShfX2Jl
ZywgX19lbmQpKTsNCiAgICAgICAgICAgIH0NCg0KDQogICAgICAgICAgaW9zX2Jhc2U6OmZtdGZs
YWdzIF9fZiA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsNCiAgICAgICAg
ICBzaXplX3R5cGUgX19sZW4gPSBfX3ZhbHVlLnNpemUoKSArIF9fc2lnbi5zaXplKCk7DQogICAg
ICAgICAgX19sZW4gKz0gKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkgPyBfX3N5
bWJvbC5zaXplKCkgOiAwOw0KICAgICAgICAgIGJvb2wgX190ZXN0aXBhZCA9IF9fZiA9PSBpb3Nf
YmFzZTo6aW50ZXJuYWwgJiYgX19sZW4gPCBfX3dpZHRoOw0KDQoNCiAgICAgICAgICBmb3IgKGlu
dCBfX2kgPSAwOyBfX2kgPCA0OyArK19faSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
cGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOw0KICAgICAg
ICAgICAgICBzd2l0Y2ggKF9fd2hpY2gpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAg
ICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOg0KICAgICAgICAgICAgICAgICAgaWYgKF9faW8u
ZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkNCiAgICAgICAgICAgICAgICAgICAgX19yZXMg
Kz0gX19zeW1ib2w7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBj
YXNlIG1vbmV5X2Jhc2U6OnNpZ246DQoNCg0KDQogICAgICAgICAgICAgICAgICBpZiAoX19zaWdu
LnNpemUoKSkNCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19zaWduWzBdOw0KICAgICAg
ICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjp2YWx1
ZToNCiAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fdmFsdWU7DQogICAgICAgICAgICAgICAg
ICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOg0KDQoNCg0K
ICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQpDQogICAgICAgICAgICAgICAgICAgIF9f
cmVzICs9IHN0cmluZ190eXBlKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsNCiAgICAgICAgICAg
ICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19jdHlwZS53aWRlbihf
X2ZpbGwpOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBt
b25leV9iYXNlOjpub25lOg0KICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQpDQogICAg
ICAgICAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBlKF9fd2lkdGggLSBfX2xlbiwgX19m
aWxsKTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAg
ICAgICAgIH0NCg0KDQogICAgICAgICAgaWYgKF9fc2lnbi5zaXplKCkgPiAxKQ0KICAgICAgICAg
ICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX19zaWduLmJlZ2luKCkgKyAxLCBfX3NpZ24uZW5kKCkp
Ow0KDQoNCiAgICAgICAgICBfX2xlbiA9IF9fcmVzLnNpemUoKTsNCiAgICAgICAgICBpZiAoX193
aWR0aCA+IF9fbGVuKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoX19mID09IGlv
c19iYXNlOjpsZWZ0KQ0KDQogICAgICAgICAgICAgICAgX19yZXMuYXBwZW5kKF9fd2lkdGggLSBf
X2xlbiwgX19maWxsKTsNCiAgICAgICAgICAgICAgZWxzZQ0KDQogICAgICAgICAgICAgICAgX19y
ZXMuaW5zZXJ0KDAsIHN0cmluZ190eXBlKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKSk7DQogICAg
ICAgICAgICAgIF9fbGVuID0gX193aWR0aDsNCiAgICAgICAgICAgIH0NCg0KDQogICAgICAgICAg
Zm9yIChzaXplX3R5cGUgX19qID0gMDsgX19qIDwgX19sZW47ICsrX19qLCArK19fcykNCiAgICAg
ICAgICAgICpfX3MgPSBfX3Jlc1tfX2pdOw0KICAgICAgICB9DQogICAgICBfX2lvLndpZHRoKDAp
Ow0KICAgICAgcmV0dXJuIF9fczsNCiAgICB9DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgdGltZV9iYXNlOjpkYXRlb3JkZXINCiAg
ICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpkb19kYXRlX29yZGVyKCkgY29uc3QNCiAgICB7
IHJldHVybiB0aW1lX2Jhc2U6Om5vX29yZGVyOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIHZvaWQNCiAgICB0aW1lX2dldDxfQ2hhclQsIF9J
bkl0ZXI+OjoNCiAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRl
cl90eXBlJiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgICAgICAgICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0sDQogICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9DaGFyVCogX19mb3JtYXQpIGNvbnN0DQogICAgew0KICAgICAgbG9jYWxl
IF9fbG9jID0gX19pby5nZXRsb2MoKTsNCiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3Qm
IF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsNCiAgICAgIGNv
bnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f
bG9jKTsNCiAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJfdHJhaXRzPF9DaGFyVD46Omxlbmd0aChf
X2Zvcm1hdCk7DQoNCiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYm
IF9faSA8IF9fbGVuICYmICFfX2VycjsgKytfX2kpDQogICAgICAgIHsNCiAgICAgICAgICBjaGFy
IF9fYyA9IF9fZm9ybWF0W19faV07DQogICAgICAgICAgaWYgKF9fYyA9PSAnJScpDQogICAgICAg
ICAgICB7DQoNCiAgICAgICAgICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOw0KICAgICAgICAg
ICAgICBjaGFyIF9fbW9kID0gMDsNCiAgICAgICAgICAgICAgaW50IF9fbWVtID0gMDsNCiAgICAg
ICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykNCiAgICAgICAgICAgICAgICB7
DQogICAgICAgICAgICAgICAgICBfX21vZCA9IF9fYzsNCiAgICAgICAgICAgICAgICAgIF9fYyA9
IF9fZm9ybWF0WysrX19pXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIHN3aXRj
aCAoX19jKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IF9fY3M7DQogICAgICAgICAgICAgICAgICBfQ2hhclQgX193Y3NbMTBdOw0KICAgICAgICAgICAg
ICAgIGNhc2UgJ2EnOg0KDQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5
czFbN107DQogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RheXNfYWJicmV2aWF0ZWQoX19kYXlz
MSk7DQogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3Rt
LT50bV93ZGF5LCBfX2RheXMxLCA3LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fZXJyKTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2Ug
J0EnOg0KDQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5czJbN107DQog
ICAgICAgICAgICAgICAgICBfX3RwLl9NX2RheXMoX19kYXlzMik7DQogICAgICAgICAgICAgICAg
ICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2RheXMyLCA3
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsNCiAgICAgICAgICAg
ICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ2gnOg0KICAgICAgICAgICAgICAg
IGNhc2UgJ2InOg0KDQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhz
MVsxMl07DQogICAgICAgICAgICAgICAgICBfX3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChfX21v
bnRoczEpOw0KICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwg
X190bS0+dG1fbW9uLCBfX21vbnRoczEsIDEyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fZXJyKTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAg
IGNhc2UgJ0InOg0KDQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhz
MlsxMl07DQogICAgICAgICAgICAgICAgICBfX3RwLl9NX21vbnRocyhfX21vbnRoczIpOw0KICAg
ICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9u
LCBfX21vbnRoczIsIDEyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJy
KTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ2MnOg0K
DQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZHRbMl07DQogICAgICAgICAg
ICAgICAgICBfX3RwLl9NX2RhdGVfdGltZV9mb3JtYXRzKF9fZHQpOw0KICAgICAgICAgICAgICAg
ICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0s
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kdFswXSk7DQogICAg
ICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdkJzoNCg0KICAgICAg
ICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5LCAx
LCAzMSwgMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJy
KTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ0QnOg0K
DQogICAgICAgICAgICAgICAgICBfX2NzID0gIiVtLyVkLyV5IjsNCiAgICAgICAgICAgICAgICAg
IF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDksIF9fd2NzKTsNCiAgICAgICAgICAgICAgICAg
IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2NzKTsNCiAgICAgICAg
ICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ0gnOg0KDQogICAgICAgICAg
ICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDAsIDIz
LCAyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOw0K
ICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnSSc6DQoNCiAg
ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1faG91
ciwgMSwgMTIsIDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBf
X2Vycik7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdt
JzoNCg0KICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21l
bSwgMSwgMTIsIDIsIF9fY3R5cGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2Vycik7DQogICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyKQ0KICAgICAgICAgICAgICAgICAg
ICBfX3RtLT50bV9tb24gPSBfX21lbSAtIDE7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAg
ICAgICAgICAgICAgICBjYXNlICdNJzoNCg0KICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9u
dW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9taW4sIDAsIDU5LCAyLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOw0KICAgICAgICAgICAgICAgICAgYnJl
YWs7DQogICAgICAgICAgICAgICAgY2FzZSAnbic6DQogICAgICAgICAgICAgICAgICBpZiAoX19j
dHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXG4nKQ0KICAgICAgICAgICAgICAgICAgICArK19f
YmVnOw0KICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICBfX2VyciB8
PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAg
ICAgICAgIGNhc2UgJ1InOg0KDQogICAgICAgICAgICAgICAgICBfX2NzID0gIiVIOiVNIjsNCiAg
ICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDYsIF9fd2NzKTsNCiAg
ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3RtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
d2NzKTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ1Mn
Og0KDQogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0t
PnRtX3NlYywgMCwgNTksIDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0
eXBlLCBfX2Vycik7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBj
YXNlICd0JzoNCiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDAp
ID09ICdcdCcpDQogICAgICAgICAgICAgICAgICAgICsrX19iZWc7DQogICAgICAgICAgICAgICAg
ICBlbHNlDQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQogICAg
ICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdUJzoNCg0KICAgICAg
ICAgICAgICAgICAgX19jcyA9ICIlSDolTTolUyI7DQogICAgICAgICAgICAgICAgICBfX2N0eXBl
LndpZGVuKF9fY3MsIF9fY3MgKyA5LCBfX3djcyk7DQogICAgICAgICAgICAgICAgICBfTV9leHRy
YWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3djcyk7DQogICAgICAgICAgICAgICAg
ICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICd4JzoNCg0KICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhcl90eXBlKiBfX2RhdGVzWzJdOw0KICAgICAgICAgICAgICAgICAgX190cC5fTV9k
YXRlX2Zvcm1hdHMoX19kYXRlcyk7DQogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9m
b3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2RhdGVzWzBdKTsNCiAgICAgICAgICAgICAgICAgIGJy
ZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ1gnOg0KDQogICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyX3R5cGUqIF9fdGltZXNbMl07DQogICAgICAgICAgICAgICAgICBfX3RwLl9NX3RpbWVf
Zm9ybWF0cyhfX3RpbWVzKTsNCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1h
dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fdGltZXNbMF0pOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7
DQogICAgICAgICAgICAgICAgY2FzZSAneSc6DQoNCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJh
Y3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1feWVhciwgMCwgOTksIDIsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7DQogICAgICAgICAgICAgICAg
ICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdZJzoNCg0KICAgICAgICAgICAgICAgICAg
X01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwgMCwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG51bWVyaWNfbGltaXRzPGludD46Om1heCgpLCA0LA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOw0KICAgICAgICAgICAgICAg
ICAgaWYgKCFfX2VycikNCiAgICAgICAgICAgICAgICAgICAgX190bS0+dG1feWVhciA9IF9fbWVt
IC0gMTkwMDsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2Ug
J1onOg0KDQogICAgICAgICAgICAgICAgICBpZiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjp1cHBl
ciwgKl9fYmVnKSkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAg
IGludCBfX3RtcDsNCiAgICAgICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcs
IF9fZW5kLCBfX3RtcCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190
aW1lcHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxNCwgX19lcnIpOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICBjaGFy
X3R5cGUgX19jID0gKl9fYmVnOw0KICAgICAgICAgICAgICAgICAgICAgIGlmICghX19lcnIgJiYg
X190bXAgPT0gMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jID09IF9fY3R5cGUu
d2lkZW4oJy0nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX19jID09IF9fY3R5
cGUud2lkZW4oJysnKSkpDQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDIzLCAy
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19l
cnIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19l
bmQsIF9fdG1wLCAwLCA1OSwgMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY3R5cGUsIF9fZXJyKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KDQogICAg
ICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQogICAgICAgICAg
ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UNCiAgICAg
ICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19jdHlwZS5uYXJy
b3coKl9fYmVnLCAwKSkNCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsNCiAgICAgICAgICAg
ICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi
aXQ7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICB2b2lkDQogICAgdGltZV9nZXQ8
X0NoYXJULCBfSW5JdGVyPjo6DQogICAgX01fZXh0cmFjdF9udW0oaXRlcl90eXBlJiBfX2JlZywg
aXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwNCiAgICAgICAgICAgICAgICAgICBpbnQg
X19taW4sIGludCBfX21heCwgc2l6ZV90IF9fbGVuLA0KICAgICAgICAgICAgICAgICAgIGNvbnN0
IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsDQogICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdCBfX2kgPSAwOw0KICAgICAg
c3RyaW5nIF9fZGlnaXRzOw0KICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7DQogICAgICBj
aGFyX3R5cGUgX19jID0gKl9fYmVnOw0KICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9f
aSA8IF9fbGVuDQogICAgICAgICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwg
X19jKSkNCiAgICAgICAgew0KICAgICAgICAgIF9fZGlnaXRzICs9IF9fY3R5cGUubmFycm93KF9f
YywgMCk7DQogICAgICAgICAgX19jID0gKigrK19fYmVnKTsNCiAgICAgICAgICArK19faTsNCiAg
ICAgICAgfQ0KICAgICAgaWYgKF9faSA9PSBfX2xlbikNCiAgICAgICAgew0KICAgICAgICAgIGlu
dCBfX3ZhbHVlID0gYXRvaShfX2RpZ2l0cy5jX3N0cigpKTsNCiAgICAgICAgICBpZiAoX19taW4g
PD0gX192YWx1ZSAmJiBfX3ZhbHVlIDw9IF9fbWF4KQ0KICAgICAgICAgICAgX19tZW1iZXIgPSBf
X3ZhbHVlOw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7
DQogICAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsNCiAg
ICAgIGlmICghX190ZXN0dmFsaWQpDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0
Ow0KICAgIH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPg0KICAgIHZvaWQNCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBfTV9l
eHRyYWN0X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21l
bWJlciwNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiogX19uYW1lcywgc2l6ZV90
IF9faW5kZXhsZW4sDQogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
cikgY29uc3QNCiAgICB7DQogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFp
dHNfdHlwZTsNCiAgICAgIGludCogX19tYXRjaGVzID0gc3RhdGljX2Nhc3Q8aW50Kj4oX19idWls
dGluX2FsbG9jYShzaXplb2YoaW50KSAqIF9faW5kZXhsZW4pKTsNCiAgICAgIHNpemVfdCBfX25t
YXRjaGVzID0gMDsNCiAgICAgIHNpemVfdCBfX3BvcyA9IDA7DQogICAgICBib29sIF9fdGVzdHZh
bGlkID0gdHJ1ZTsNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lOw0KDQogICAgICBjaGFy
X3R5cGUgX19jID0gKl9fYmVnOw0KDQogICAgICBmb3IgKHNpemVfdCBfX2kxID0gMDsgX19pMSA8
IF9faW5kZXhsZW47ICsrX19pMSkNCiAgICAgICAgaWYgKF9fYyA9PSBfX25hbWVzW19faTFdWzBd
KQ0KICAgICAgICAgIF9fbWF0Y2hlc1tfX25tYXRjaGVzKytdID0gX19pMTsNCg0KICAgICAgd2hp
bGUoX19ubWF0Y2hlcyA+IDEpDQogICAgICAgIHsNCg0KICAgICAgICAgIHNpemVfdCBfX21pbmxl
biA9IDEwOw0KICAgICAgICAgIGZvciAoc2l6ZV90IF9faTIgPSAwOyBfX2kyIDwgX19ubWF0Y2hl
czsgKytfX2kyKQ0KICAgICAgICAgICAgX19taW5sZW4gPSBtaW4oX19taW5sZW4sDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lc1tfX21hdGNo
ZXNbX19pMl1dKSk7DQoNCiAgICAgICAgICBpZiAoX19wb3MgPCBfX21pbmxlbiAmJiBfX2JlZyAh
PSBfX2VuZCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgKytfX3BvczsNCiAgICAgICAg
ICAgICAgX19jID0gKigrK19fYmVnKTsNCiAgICAgICAgICAgICAgZm9yIChzaXplX3QgX19pMyA9
IDA7IF9faTMgPCBfX25tYXRjaGVzOyArK19faTMpDQogICAgICAgICAgICAgICAgew0KICAgICAg
ICAgICAgICAgICAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbX19pM11dOw0KICAgICAgICAg
ICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gIT0gX19jKQ0KICAgICAgICAgICAgICAgICAgICBf
X21hdGNoZXNbX19pM10gPSBfX21hdGNoZXNbLS1fX25tYXRjaGVzXTsNCiAgICAgICAgICAgICAg
ICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgYnJlYWs7DQog
ICAgICAgIH0NCg0KICAgICAgaWYgKF9fbm1hdGNoZXMgPT0gMSkNCiAgICAgICAgew0KDQogICAg
ICAgICAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbMF1dOw0KICAgICAgICAgIGNvbnN0IHNp
emVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOw0KICAgICAgICAgIHdo
aWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kICYmIF9fbmFtZVtfX3Bvc10gPT0g
Kl9fYmVnKQ0KICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsNCg0KICAgICAgICAgIGlmIChf
X2xlbiA9PSBfX3BvcykNCiAgICAgICAgICAgIF9fbWVtYmVyID0gX19tYXRjaGVzWzBdOw0KICAg
ICAgICAgIGVsc2UNCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7DQogICAgICAgIH0N
CiAgICAgIGVsc2UNCiAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsNCiAgICAgIGlmICghX190
ZXN0dmFsaWQpDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgIH0NCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgX0luSXRl
cg0KICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dldF90aW1lKGl0ZXJf
dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdA0KICAgIHsNCiAg
ICAgIF9DaGFyVCBfX3djc1szXTsNCiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJVgiOw0KICAg
ICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsNCiAgICAgIGN0eXBlPF9DaGFyVD4gY29u
c3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsNCiAgICAgIF9f
Y3R5cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9fd2NzKTsNCiAgICAgIF9NX2V4dHJhY3Rfdmlh
X2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLCBfX3djcyk7DQogICAgICBp
ZiAoX19iZWcgPT0gX19lbmQpDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7DQog
ICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6DQogICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgdG0qIF9fdG0pIGNvbnN0DQogICAgew0KICAgICAgX0NoYXJUIF9fd2NzWzNdOw0KICAgICAg
Y29uc3QgY2hhciogX19jcyA9ICIleCI7DQogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxv
YygpOw0KICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlw
ZTxfQ2hhclQ+ID4oX19sb2MpOw0KICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgMywg
X193Y3MpOw0KICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywg
X19lcnIsIF9fdG0sIF9fd2NzKTsNCiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAgICAgICAg
X19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0
ZXINCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXRfd2Vla2RheShp
dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QNCiAg
ICB7DQogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsNCiAg
ICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICBfX3RpbWVwdW5jdDxfQ2hh
clQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7
DQogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5c1s3XTsNCiAgICAgIF9fdHAuX01fZGF5c19h
YmJyZXZpYXRlZChfX2RheXMpOw0KICAgICAgaW50IF9fdG1wd2RheTsNCiAgICAgIF9NX2V4dHJh
Y3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1wd2RheSwgX19kYXlzLCA3LCBfX2Vycik7DQoNCg0K
DQoNCg0KDQoNCiAgICAgIGlmICghX19lcnIpDQogICAgICAgIHsNCiAgICAgICAgICBzaXplX3Qg
X19wb3MgPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19kYXlzW19fdG1wd2RheV0pOw0KICAgICAg
ICAgIF9fdHAuX01fZGF5cyhfX2RheXMpOw0KICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19u
YW1lID0gX19kYXlzW19fdG1wd2RheV07DQogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0g
Kl9fYmVnKQ0KICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xl
biA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOw0KICAgICAgICAgICAgICB3aGlsZSAo
X19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZA0KICAgICAgICAgICAgICAgICAgICAgJiYg
X19uYW1lW19fcG9zXSA9PSAqX19iZWcpDQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3Bv
czsNCiAgICAgICAgICAgICAgaWYgKF9fbGVuICE9IF9fcG9zKQ0KICAgICAgICAgICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGlmICgh
X19lcnIpDQogICAgICAgICAgICBfX3RtLT50bV93ZGF5ID0gX190bXB3ZGF5Ow0KICAgICAgICB9
DQogICAgICBpZiAoX19iZWcgPT0gX19lbmQpDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpl
b2ZiaXQ7DQogICAgICByZXR1cm4gX19iZWc7DQogICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgX0luSXRlcg0KICAgIHRpbWVfZ2V0PF9D
aGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBp
dGVyX3R5cGUgX19lbmQsDQogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZSYgX19pbywgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QNCiAgICB7DQogICAgICB0eXBl
ZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsNCiAgICAgIGxvY2FsZSBfX2xv
YyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3Rw
ID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7DQogICAgICBjb25zdCBj
aGFyX3R5cGUqIF9fbW9udGhzWzEyXTsNCiAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVk
KF9fbW9udGhzKTsNCiAgICAgIGludCBfX3RtcG1vbjsNCiAgICAgIF9NX2V4dHJhY3RfbmFtZShf
X2JlZywgX19lbmQsIF9fdG1wbW9uLCBfX21vbnRocywgMTIsIF9fZXJyKTsNCg0KDQoNCg0KDQoN
Cg0KICAgICAgaWYgKCFfX2VycikNCiAgICAgICAgew0KICAgICAgICAgIHNpemVfdCBfX3BvcyA9
IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX21vbnRoc1tfX3RtcG1vbl0pOw0KICAgICAgICAgIF9f
dHAuX01fbW9udGhzKF9fbW9udGhzKTsNCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbmFt
ZSA9IF9fbW9udGhzW19fdG1wbW9uXTsNCiAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSA9PSAq
X19iZWcpDQogICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVu
ID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7DQogICAgICAgICAgICAgIHdoaWxlIChf
X3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kDQogICAgICAgICAgICAgICAgICAgICAmJiBf
X25hbWVbX19wb3NdID09ICpfX2JlZykNCiAgICAgICAgICAgICAgICArK19fYmVnLCArK19fcG9z
Ow0KICAgICAgICAgICAgICBpZiAoX19sZW4gIT0gX19wb3MpDQogICAgICAgICAgICAgICAgX19l
cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKCFf
X2VycikNCiAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fdG1wbW9uOw0KICAgICAgICB9DQoN
CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVv
ZmJpdDsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0ZXINCiAgICB0aW1lX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QNCiAgICB7DQogICAgICBsb2NhbGUgX19sb2MgPSBf
X2lvLmdldGxvYygpOw0KICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9m
YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOw0KDQogICAgICBjaGFyX3R5cGUgX19jID0gKl9f
YmVnOw0KICAgICAgc2l6ZV90IF9faSA9IDA7DQogICAgICBzdHJpbmcgX19kaWdpdHM7DQogICAg
ICB3aGlsZSAoX19pIDwgNCAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jh
c2U6OmRpZ2l0LCBfX2MpKQ0KICAgICAgICB7DQogICAgICAgICAgX19kaWdpdHMgKz0gX19jdHlw
ZS5uYXJyb3coX19jLCAwKTsNCiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOw0KICAgICAgICAg
ICsrX19pOw0KICAgICAgICB9DQogICAgICBpZiAoX19pID09IDIgfHwgX19pID09IDQpDQogICAg
ICAgIHsNCiAgICAgICAgICBsb25nIF9fbDsNCiAgICAgICAgICBfX2NvbnZlcnRfdG9fdihfX2Rp
Z2l0cy5jX3N0cigpLCBfX2wsIF9fZXJyLCBfU19jX2xvY2FsZSk7DQogICAgICAgICAgaWYgKCEo
X19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgJiYgX19sIDw9IDIxNDc0ODM2NDcpDQogICAgICAg
ICAgICB7DQogICAgICAgICAgICAgIF9fbCA9IF9faSA9PSAyID8gX19sIDogX19sIC0gMTkwMDsN
CiAgICAgICAgICAgICAgX190bS0+dG1feWVhciA9IHN0YXRpY19jYXN0PGludD4oX19sKTsNCiAg
ICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICBfX2VyciB8PSBpb3Nf
YmFzZTo6ZmFpbGJpdDsNCiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmVvZmJpdDsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0K
ICAgIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBwdXQoaXRlcl90eXBlIF9fcywg
aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sDQogICAgICAgIGNvbnN0
IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0DQogICAgew0KICAgICAg
bG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsNCiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3Qm
IF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsNCiAgICAgIHdoaWxl
IChfX2JlZyAhPSBfX2VuZCkNCiAgICAgICAgew0KICAgICAgICAgIGNoYXIgX19jID0gX19jdHlw
ZS5uYXJyb3coKl9fYmVnLCAwKTsNCiAgICAgICAgICArK19fYmVnOw0KICAgICAgICAgIGlmIChf
X2MgPT0gJyUnKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBjaGFyIF9fZm9ybWF0Ow0K
ICAgICAgICAgICAgICBjaGFyIF9fbW9kID0gMDsNCiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVu
ID0gMTsNCiAgICAgICAgICAgICAgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsNCiAg
ICAgICAgICAgICAgKytfX2JlZzsNCiAgICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19j
ID09ICdPJykNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBfX21vZCA9IF9f
YzsNCiAgICAgICAgICAgICAgICAgIF9fZm9ybWF0ID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAw
KTsNCiAgICAgICAgICAgICAgICAgICsrX19iZWc7DQogICAgICAgICAgICAgICAgfQ0KICAgICAg
ICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgX19mb3JtYXQgPSBfX2M7DQogICAgICAgICAg
ICAgIF9fcyA9IHRoaXMtPmRvX3B1dChfX3MsIF9faW8sIGNoYXJfdHlwZSgpLCBfX3RtLCBfX2Zv
cm1hdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbW9kKTsNCiAgICAgICAg
ICAgIH0NCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICpfX3Mg
PSBfX2M7DQogICAgICAgICAgICAgICsrX19zOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog
ICAgICByZXR1cm4gX19zOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9PdXRJdGVyPg0KICAgIF9PdXRJdGVyDQogICAgdGltZV9wdXQ8X0NoYXJULCBfT3V0
SXRlcj46Og0KICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90
eXBlLCBjb25zdCB0bSogX190bSwNCiAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21v
ZCkgY29uc3QNCiAgICB7DQogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOw0KICAg
ICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+
ID4oX19sb2MpOw0KICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9m
YWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOw0KDQoNCg0KICAgICAgY29uc3Qgc2l6
ZV90IF9fbWF4bGVuID0gNjQ7DQogICAgICBjaGFyX3R5cGUqIF9fcmVzID0NCiAgICAgICAgc3Rh
dGljX2Nhc3Q8Y2hhcl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoY2hhcl90eXBlKSAq
IF9fbWF4bGVuKSk7DQoNCg0KDQoNCg0KDQogICAgICBjaGFyX3R5cGUgX19mbXRbNF07DQogICAg
ICBfX2ZtdFswXSA9IF9fY3R5cGUud2lkZW4oJyUnKTsNCiAgICAgIGlmICghX19tb2QpDQogICAg
ICAgIHsNCiAgICAgICAgICBfX2ZtdFsxXSA9IF9fZm9ybWF0Ow0KICAgICAgICAgIF9fZm10WzJd
ID0gY2hhcl90eXBlKCk7DQogICAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgew0KICAgICAg
ICAgIF9fZm10WzFdID0gX19tb2Q7DQogICAgICAgICAgX19mbXRbMl0gPSBfX2Zvcm1hdDsNCiAg
ICAgICAgICBfX2ZtdFszXSA9IGNoYXJfdHlwZSgpOw0KICAgICAgICB9DQoNCiAgICAgIF9fdHAu
X01fcHV0KF9fcmVzLCBfX21heGxlbiwgX19mbXQsIF9fdG0pOw0KDQoNCiAgICAgIHNpemVfdCBf
X2xlbiA9IGNoYXJfdHJhaXRzPGNoYXJfdHlwZT46Omxlbmd0aChfX3Jlcyk7DQogICAgICBmb3Ig
KHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX2xlbjsgKytfX2ksICsrX19zKQ0KICAgICAgICAqX19z
ID0gX19yZXNbX19pXTsNCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQoNCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW50DQogICAgY29sbGF0ZTxfQ2hhclQ+OjpfTV9jb21w
YXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0DQogICAgeyByZXR1cm4gMDsg
fQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHNpemVfdA0KICAgIGNvbGxh
dGU8X0NoYXJUPjo6X01fdHJhbnNmb3JtKF9DaGFyVCosIGNvbnN0IF9DaGFyVCosIHNpemVfdCkg
Y29uc3QNCiAgICB7IHJldHVybiAwOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0K
ICAgIGludA0KICAgIGNvbGxhdGU8X0NoYXJUPjo6DQogICAgZG9fY29tcGFyZShjb25zdCBfQ2hh
clQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLA0KICAgICAgICAgICAgICAgY29uc3QgX0No
YXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QNCiAgICB7DQogICAgICBjb25z
dCBzdHJpbmdfdHlwZSBfX29uZShfX2xvMSwgX19oaTEpOw0KICAgICAgY29uc3Qgc3RyaW5nX3R5
cGUgX190d28oX19sbzIsIF9faGkyKTsNCiAgICAgIHJldHVybiBfTV9jb21wYXJlKF9fb25lLmNf
c3RyKCksIF9fdHdvLmNfc3RyKCkpOw0KICAgIH0NCg0KIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4NCiAgICB0eXBlbmFtZSBjb2xsYXRlPF9DaGFyVD46OnN0cmluZ190eXBlDQogICAgY29sbGF0
ZTxfQ2hhclQ+OjoNCiAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBf
Q2hhclQqIF9faGkpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90IF9fbGVuID0gKF9faGkgLSBf
X2xvKSAqIDI7DQoNCiAgICAgIF9DaGFyVCogX19jID0NCiAgICAgICAgc3RhdGljX2Nhc3Q8X0No
YXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbGVuKSk7DQogICAgICBz
aXplX3QgX19yZXMgPSBfTV90cmFuc2Zvcm0oX19jLCBfX2xvLCBfX2xlbik7DQoNCiAgICAgIGlm
IChfX3JlcyA+PSBfX2xlbikNCiAgICAgICAgew0KICAgICAgICAgIF9fYyA9DQogICAgICAgICAg
ICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICog
KF9fcmVzICsgMSkpKTsNCiAgICAgICAgICBfTV90cmFuc2Zvcm0oX19jLCBfX2xvLCBfX3JlcyAr
IDEpOw0KICAgICAgICB9DQogICAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19jKTsNCiAgICB9DQoN
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgbG9uZw0KICAgIGNvbGxhdGU8X0NoYXJU
Pjo6DQogICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkg
Y29uc3QNCiAgICB7DQogICAgICB1bnNpZ25lZCBsb25nIF9fdmFsID0gMDsNCiAgICAgIGZvciAo
OyBfX2xvIDwgX19oaTsgKytfX2xvKQ0KICAgICAgICBfX3ZhbCA9ICpfX2xvICsgKChfX3ZhbCA8
PCA3KSB8DQogICAgICAgICAgICAgICAgICAgICAgIChfX3ZhbCA+PiAobnVtZXJpY19saW1pdHM8
dW5zaWduZWQgbG9uZz46OmRpZ2l0cyAtIDcpKSk7DQogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
bG9uZz4oX192YWwpOw0KICAgIH0NCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+DQog
ICAgdm9pZA0KICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9faW4sIF9UdiYgX19vdXQs
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwNCiAgICAgICAgICAgICAgICAgICBjb25zdCBfX2Nf
bG9jYWxlJiBfX2Nsb2MsIGludCBfX2Jhc2UgPSAxMCk7DQojIDIwNjQgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2
Pg0KICAgIGludA0KICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsIGNvbnN0IGludCwg
Y29uc3QgY2hhciogX19mbXQsIF9UdiBfX3YsDQogICAgICAgICAgICAgICAgICAgICBjb25zdCBf
X2NfbG9jYWxlJiwgaW50IF9fcHJlYyA9IC0xKQ0KICAgIHsNCiAgICAgIGludCBfX3JldDsNCiAg
ICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZSgwLCBfX251bGwpKTsNCiAgICAgIHNl
dGxvY2FsZSgwLCAiQyIpOw0KICAgICAgaWYgKF9fcHJlYyA+PSAwKQ0KICAgICAgICBfX3JldCA9
IHNwcmludGYoX19vdXQsIF9fZm10LCBfX3ByZWMsIF9fdik7DQogICAgICBlbHNlDQogICAgICAg
IF9fcmV0ID0gc3ByaW50ZihfX291dCwgX19mbXQsIF9fdik7DQogICAgICBzZXRsb2NhbGUoMCwg
X19vbGQpOw0KICAgICAgZnJlZShfX29sZCk7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0K
IyAyMDk0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBzdHJ1Y3Qg
X19wYWQNCiAgICB7DQogICAgICBzdGF0aWMgdm9pZA0KICAgICAgX1NfcGFkKGlvc19iYXNlJiBf
X2lvLCBfQ2hhclQgX19maWxsLCBfQ2hhclQqIF9fbmV3cywNCiAgICAgICAgICAgICBjb25zdCBf
Q2hhclQqIF9fb2xkcywgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwNCiAgICAgICAgICAgICBj
b25zdCBzdHJlYW1zaXplIF9fb2xkbGVuLCBjb25zdCBib29sIF9fbnVtKTsNCiAgICB9Ow0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQog
ICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQg
X19maWxsLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fbmV3
cywgY29uc3QgX0NoYXJUKiBfX29sZHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4sIGNvbnN0IGJvb2wgX19udW0pDQog
ICAgew0KICAgICAgc2l6ZV90IF9fcGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXdsZW4g
LSBfX29sZGxlbik7DQogICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+
KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3BsZW4pKTsNCiAgICAgIF9UcmFp
dHM6OmFzc2lnbihfX3BhZHMsIF9fcGxlbiwgX19maWxsKTsNCg0KICAgICAgX0NoYXJUKiBfX2Jl
ZzsNCiAgICAgIF9DaGFyVCogX19lbmQ7DQogICAgICBzaXplX3QgX19tb2QgPSAwOw0KICAgICAg
c2l6ZV90IF9fYmVnbGVuOw0KICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYWRqdXN0ID0gX19p
by5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOw0KDQogICAgICBpZiAoX19hZGp1c3Qg
PT0gaW9zX2Jhc2U6OmxlZnQpDQogICAgICAgIHsNCg0KICAgICAgICAgIF9fYmVnID0gY29uc3Rf
Y2FzdDxfQ2hhclQqPihfX29sZHMpOw0KICAgICAgICAgIF9fYmVnbGVuID0gX19vbGRsZW47DQog
ICAgICAgICAgX19lbmQgPSBfX3BhZHM7DQogICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKF9fYWRq
dXN0ID09IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX251bSkNCiAgICAgICAgew0KDQoNCg0KICAg
ICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICAgICAgY29uc3QgY3R5
cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOw0K
ICAgICAgICAgIGNvbnN0IF9DaGFyVCBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScpOw0KICAg
ICAgICAgIGNvbnN0IF9DaGFyVCBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7DQogICAgICAg
ICAgYm9vbCBfX3Rlc3RzaWduID0gX1RyYWl0czo6ZXEoX19vbGRzWzBdLCBfX21pbnVzKQ0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19wbHVz
KTsNCg0KICAgICAgICAgIGJvb2wgX190ZXN0aGV4ID0gX1RyYWl0czo6ZXEoX19jdHlwZS53aWRl
bignMCcpLCBfX29sZHNbMF0pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX1RyYWl0
czo6ZXEoX19jdHlwZS53aWRlbigneCcpLCBfX29sZHNbMV0pDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgX1RyYWl0czo6ZXEoX19jdHlwZS53aWRlbignWCcpLCBfX29sZHNbMV0p
KTsNCiAgICAgICAgICBpZiAoX190ZXN0aGV4KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
ICBfX25ld3NbMF0gPSBfX29sZHNbMF07DQogICAgICAgICAgICAgIF9fbmV3c1sxXSA9IF9fb2xk
c1sxXTsNCiAgICAgICAgICAgICAgX19tb2QgKz0gMjsNCiAgICAgICAgICAgICAgX19uZXdzICs9
IDI7DQogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOw0KICAgICAgICAgICAgICBfX2JlZ2xl
biA9IF9fcGxlbjsNCiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9f
b2xkcyArIF9fbW9kKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIGlmIChfX3Rlc3Rz
aWduKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfVHJhaXRzOjplcSgoX19uZXdzWzBd
ID0gX19vbGRzWzBdKSwgX19wbHVzKSA/IF9fcGx1cyA6IF9fbWludXM7DQogICAgICAgICAgICAg
ICsrX19tb2Q7DQogICAgICAgICAgICAgICsrX19uZXdzOw0KICAgICAgICAgICAgICBfX2JlZyA9
IF9fcGFkczsNCiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47DQogICAgICAgICAgICAg
IF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMgKyBfX21vZCk7DQogICAgICAgICAg
ICB9DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgIF9fYmVn
ID0gX19wYWRzOw0KICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsNCiAgICAgICAgICAg
ICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7DQogICAgICAgICAgICB9DQog
ICAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgew0KDQogICAgICAgICAgX19iZWcgPSBfX3Bh
ZHM7DQogICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47DQogICAgICAgICAgX19lbmQgPSBjb25z
dF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7DQogICAgICAgIH0NCiAgICAgIF9UcmFpdHM6OmNvcHko
X19uZXdzLCBfX2JlZywgX19iZWdsZW4pOw0KICAgICAgX1RyYWl0czo6Y29weShfX25ld3MgKyBf
X2JlZ2xlbiwgX19lbmQsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3bGVuIC0gX19i
ZWdsZW4gLSBfX21vZCk7DQogICAgfQ0KIyAyMTg5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L2xvY2FsZV9mYWNldHMudGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBi
b29sDQogICAgX192ZXJpZnlfZ3JvdXBpbmcoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9f
Z3JvdXBpbmcsDQogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9f
Z3JvdXBpbmdfdG1wKQ0KICAgIHsNCiAgICAgIGludCBfX2kgPSAwOw0KICAgICAgaW50IF9faiA9
IDA7DQogICAgICBjb25zdCBpbnQgX19sZW4gPSBfX2dyb3VwaW5nLnNpemUoKTsNCiAgICAgIGNv
bnN0IGludCBfX24gPSBfX2dyb3VwaW5nX3RtcC5zaXplKCk7DQogICAgICBib29sIF9fdGVzdCA9
IHRydWU7DQoNCg0KDQoNCiAgICAgIHdoaWxlIChfX3Rlc3QgJiYgX19pIDwgX19uIC0gMSkNCiAg
ICAgICAgZm9yIChfX2ogPSAwOyBfX3Rlc3QgJiYgX19qIDwgX19sZW4gJiYgX19pIDwgX19uIC0g
MTsgKytfX2osKytfX2kpDQogICAgICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdbX19qXSA9PSBf
X2dyb3VwaW5nX3RtcFtfX24gLSBfX2kgLSAxXTsNCg0KDQogICAgICBfX2ogPT0gX19sZW4gPyBf
X2ogPSAwIDogX19qOw0KICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdbX19qXSA+PSBfX2dyb3Vw
aW5nX3RtcFtfX24gLSBfX2kgLSAxXTsNCiAgICAgIHJldHVybiBfX3Rlc3Q7DQogICAgfQ0KDQoN
Cg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgX0NoYXJUKg0KICAgIF9f
YWRkX2dyb3VwaW5nKF9DaGFyVCogX19zLCBfQ2hhclQgX19zZXAsDQogICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogX19nYmVnLCBjb25zdCBjaGFyKiBfX2dlbmQsDQogICAgICAgICAgICAg
ICAgICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0LCBjb25zdCBfQ2hhclQqIF9fbGFzdCkNCiAgICB7
DQogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+ICpfX2diZWcpDQogICAgICAgIHsNCiAgICAg
ICAgICBfX3MgPSBfX2FkZF9ncm91cGluZyhfX3MsIF9fc2VwLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChfX2diZWcgKyAxID09IF9fZ2VuZCA/IF9fZ2JlZyA6IF9fZ2JlZyArIDEp
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2VuZCwgX19maXJzdCwgX19sYXN0
IC0gKl9fZ2JlZyk7DQogICAgICAgICAgX19maXJzdCA9IF9fbGFzdCAtICpfX2diZWc7DQogICAg
ICAgICAgKl9fcysrID0gX19zZXA7DQogICAgICAgIH0NCiAgICAgIGRvDQogICAgICAgICpfX3Mr
KyA9ICpfX2ZpcnN0Kys7DQogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpOw0KICAgICAg
cmV0dXJuIF9fczsNCiAgICB9DQoNCg0KDQoNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5
cHVuY3Q8Y2hhciwgZmFsc2U+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDxj
aGFyLCB0cnVlPjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPGNo
YXIsIGZhbHNlPjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPGNo
YXIsIHRydWU+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfZ2V0PGNoYXI+Ow0KICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfcHV0PGNoYXI+Ow0KICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz
cyBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9u
ZXlwdW5jdF9ieW5hbWU8d2NoYXJfdCwgZmFsc2U+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
bW9uZXlwdW5jdF9ieW5hbWU8d2NoYXJfdCwgdHJ1ZT47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz
cyBtb25leV9nZXQ8d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8
d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdDxjaGFyPjsNCiAgZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTxjaGFyPjsNCiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIG51bV9nZXQ8Y2hhcj47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fcHV0
PGNoYXI+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Q8d2NoYXJfdD47DQogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdF9ieW5hbWU8d2NoYXJfdD47DQogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBudW1fZ2V0PHdjaGFyX3Q+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
bnVtX3B1dDx3Y2hhcl90PjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PGNo
YXI+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8Y2hhcj47DQogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8Y2hhcj47DQogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyB0aW1lX2dldDxjaGFyPjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5
bmFtZTxjaGFyPjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PHdjaGFyX3Q+
Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8d2NoYXJfdD47DQogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0
ZSBjbGFzcyB0aW1lX2dldDx3Y2hhcl90PjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVf
Z2V0X2J5bmFtZTx3Y2hhcl90PjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzPGNo
YXI+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXNfYnluYW1lPGNoYXI+Ow0KICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXM8d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0
ZSBjbGFzcyBtZXNzYWdlc19ieW5hbWU8d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz
cyBjdHlwZV9ieW5hbWU8Y2hhcj47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjdHlwZV9ieW5h
bWU8d2NoYXJfdD47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0X2J5bmFtZTxjaGFy
LCBjaGFyLCBtYnN0YXRlX3Q+Ow0KICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5h
bWU8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNv
bGxhdGU8Y2hhcj47DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTxjaGFy
PjsNCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGU8d2NoYXJfdD47DQogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTx3Y2hhcl90PjsNCg0KICBleHRlcm4gdGVtcGxh
dGUNCiAgICBjb25zdCBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4mDQogICAgdXNlX2Zh
Y2V0PGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQog
IGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNvbnN0IGNvbGxhdGU8Y2hhcj4mDQogICAgdXNlX2ZhY2V0
PGNvbGxhdGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAg
ICBjb25zdCBudW1wdW5jdDxjaGFyPiYNCiAgICB1c2VfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihj
b25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBjb25zdCBudW1fcHV0PGNo
YXI+Jg0KICAgIHVzZV9mYWNldDxudW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAg
ZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgbnVtX2dldDxjaGFyPiYNCiAgICB1c2VfZmFjZXQ8
bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAg
IGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT4mDQogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8
Y2hhciwgdHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBj
b25zdCBtb25leXB1bmN0PGNoYXIsIGZhbHNlPiYNCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxj
aGFyLCBmYWxzZT4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBj
b25zdCBtb25leV9wdXQ8Y2hhcj4mDQogICAgdXNlX2ZhY2V0PG1vbmV5X3B1dDxjaGFyPiA+KGNv
bnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNvbnN0IG1vbmV5X2dldDxj
aGFyPiYNCiAgICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoN
CiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgX190aW1lcHVuY3Q8Y2hhcj4mDQogICAgdXNl
X2ZhY2V0PF9fdGltZXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRl
bXBsYXRlDQogICAgY29uc3QgdGltZV9wdXQ8Y2hhcj4mDQogICAgdXNlX2ZhY2V0PHRpbWVfcHV0
PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3Qg
dGltZV9nZXQ8Y2hhcj4mDQogICAgdXNlX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9j
YWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgbWVzc2FnZXM8Y2hhcj4mDQog
ICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJu
IHRlbXBsYXRlDQogICAgY29uc3QgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+Jg0K
ICAgIHVzZV9mYWNldDxjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4gPihsb2NhbGUg
Y29uc3QmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBjb25zdCBjb2xsYXRlPHdjaGFyX3Q+
Jg0KICAgIHVzZV9mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAg
ZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgbnVtcHVuY3Q8d2NoYXJfdD4mDQogICAgdXNlX2Zh
Y2V0PG51bXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBs
YXRlDQogICAgY29uc3QgbnVtX3B1dDx3Y2hhcl90PiYNCiAgICB1c2VfZmFjZXQ8bnVtX3B1dDx3
Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNvbnN0
IG51bV9nZXQ8d2NoYXJfdD4mDQogICAgdXNlX2ZhY2V0PG51bV9nZXQ8d2NoYXJfdD4gPihjb25z
dCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBjb25zdCBtb25leXB1bmN0PHdj
aGFyX3QsIHRydWU+Jg0KICAgIHVzZV9mYWNldDxtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+ID4o
Y29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgbW9uZXlwdW5j
dDx3Y2hhcl90LCBmYWxzZT4mDQogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFs
c2U+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgY29uc3QgbW9u
ZXlfcHV0PHdjaGFyX3Q+Jg0KICAgIHVzZV9mYWNldDxtb25leV9wdXQ8d2NoYXJfdD4gPihjb25z
dCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBjb25zdCBtb25leV9nZXQ8d2No
YXJfdD4mDQogICAgdXNlX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYp
Ow0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNvbnN0IF9fdGltZXB1bmN0PHdjaGFyX3Q+Jg0K
ICAgIHVzZV9mYWNldDxfX3RpbWVwdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQog
IGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNvbnN0IHRpbWVfcHV0PHdjaGFyX3Q+Jg0KICAgIHVzZV9m
YWNldDx0aW1lX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1w
bGF0ZQ0KICAgIGNvbnN0IHRpbWVfZ2V0PHdjaGFyX3Q+Jg0KICAgIHVzZV9mYWNldDx0aW1lX2dl
dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGNv
bnN0IG1lc3NhZ2VzPHdjaGFyX3Q+Jg0KICAgIHVzZV9mYWNldDxtZXNzYWdlczx3Y2hhcl90PiA+
KGNvbnN0IGxvY2FsZSYpOw0KDQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0KICAgIGhh
c19mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0
ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+
ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0KICAgIGhh
c19mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBs
YXRlDQogICAgYm9vbA0KICAgIGhhc19mYWNldDxudW1wdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2Fs
ZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8bnVtX3B1
dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wN
CiAgICBoYXNfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVy
biB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyPiA+KGNv
bnN0IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFj
ZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRl
DQogICAgYm9vbA0KICAgIGhhc19mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUm
KTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBib29sDQogICAgaGFzX2ZhY2V0PF9fdGltZXB1
bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9v
bA0KICAgIGhhc19mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4
dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihj
b25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBib29sDQogICAgaGFzX2Zh
Y2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7DQoNCiBleHRlcm4gdGVtcGxhdGUN
CiAgICBib29sDQogICAgaGFzX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7
DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0KICAgIGhhc19mYWNldDxjb2RlY3Z0PHdj
aGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVt
cGxhdGUNCiAgICBib29sDQogICAgaGFzX2ZhY2V0PGNvbGxhdGU8d2NoYXJfdD4gPihjb25zdCBs
b2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBib29sDQogICAgaGFzX2ZhY2V0PG51
bXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQog
ICAgYm9vbA0KICAgIGhhc19mYWNldDxudW1fcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7
DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0KICAgIGhhc19mYWNldDxudW1fZ2V0PHdj
aGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0K
ICAgIGhhc19mYWNldDxtb25leXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAg
ZXh0ZXJuIHRlbXBsYXRlDQogICAgYm9vbA0KICAgIGhhc19mYWNldDxtb25leV9wdXQ8d2NoYXJf
dD4gPihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBib29sDQogICAg
aGFzX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOw0KDQogIGV4dGVy
biB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8d2NoYXJfdD4g
Pihjb25zdCBsb2NhbGUmKTsNCg0KICBleHRlcm4gdGVtcGxhdGUNCiAgICBib29sDQogICAgaGFz
X2ZhY2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7DQoNCiAgZXh0ZXJuIHRl
bXBsYXRlDQogICAgYm9vbA0KICAgIGhhc19mYWNldDx0aW1lX2dldDx3Y2hhcl90PiA+KGNvbnN0
IGxvY2FsZSYpOw0KDQogIGV4dGVybiB0ZW1wbGF0ZQ0KICAgIGJvb2wNCiAgICBoYXNfZmFjZXQ8
bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsNCn0NCiMgNDcgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2xvY2FsZSIgMiAzDQojIDM4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL29z
dHJlYW0udGNjIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjpzZW50cnk6Og0KICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYg
X19vcykNCiAgICA6IF9NX29rKF9fb3MuZ29vZCgpKSwgX01fb3MoX19vcykNCiAgICB7DQoNCiAg
ICAgIGlmIChfTV9vayAmJiBfX29zLnRpZSgpKQ0KICAgICAgICBfX29zLnRpZSgpLT5mbHVzaCgp
Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3Bm
KShfX29zdHJlYW1fdHlwZSYpKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0K
ICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAg
eyBfX3BmKCp0aGlzKTsgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAg
ICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0
b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkNCiAgICB7DQogICAgICBzZW50
cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAg
ICB0cnkNCiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0NCiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7
DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46Og0KICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkNCiAg
ICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg
ICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0NCiAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBp
ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAg
ICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAq
dGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYmlu
KQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2VyYiAm
JiBfX3NiaW4pDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAg
ICAgICAgICAgaWYgKCFfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCB0aGlzLT5yZGJ1
ZigpKSkNCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7
DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg
ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAg
ICAgICB9DQogICAgICBlbHNlIGlmICghX19zYmluKQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9w
ZXJhdG9yPDwoYm9vbCBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQog
ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7
DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkNCiAgICAgICAg
ICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBf
X24pLmZhaWxlZCgpKQ0KICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAg
ICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVy
YXRvcjw8KGxvbmcgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAg
ICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0K
ICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOw0KICAgICAgICAgICAg
ICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJh
c2VmaWVsZDsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQ0K
ICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIGJvb2wgX19iID0gZmFsc2U7DQog
ICAgICAgICAgICAgICAgICBpZiAoKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYg
aW9zX2Jhc2U6OmhleCkpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBsb25nIF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbik7
DQogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhp
cywgX19jLCBfX2wpLmZhaWxlZCgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg
ICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgq
dGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsNCiAgICAgICAgICAgICAgICAgIGlmIChf
X2IpDQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7
DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pDQogICAgew0KICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAg
dHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m
bnVtcHV0KSkNCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhp
cywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQ0KICAgICAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAg
IHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog
ICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBsb25nIF9fbikNCiAgICB7DQogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAg
ICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRo
aXMtPmZpbGwoKTsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhp
cy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7DQogICAgICAgICAgICAgIGlmIChfTV9j
aGVja19mYWNldChfTV9mbnVtcHV0KSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAg
ICAgICBib29sIF9fYiA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgaWYgKChfX2ZtdCAmIGlv
c19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19iYXNlOjpoZXgpKQ0KICAgICAgICAgICAgICAg
ICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fbDsNCiAg
ICAgICAgICAgICAgICAgICAgICBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KF9fbik7DQogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlz
LCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAg
ICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQt
PnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsNCiAgICAgICAgICAgICAgICAg
IGlmIChfX2IpDQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMt
PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAg
dGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAg
ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9fbikNCiAgICB7DQog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsN
CiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr
X2ZhY2V0KF9NX2ZudW1wdXQpKQ0KICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQo
KnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpDQogICAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAg
ICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVy
biAqdGhpczsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQ0KICAgIHsN
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoX01fY2hl
Y2tfZmFjZXQoX01fZm51bXB1dCkpDQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1
dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkNCiAgICAgICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgfQ0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAg
ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg
ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0
dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX24pDQog
ICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAoX19jZXJiKQ0KICAg
ICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChf
TV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkNCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1
dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQ0KICAgICAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAg
ICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN
Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAg
ICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9f
bikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIp
DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQ0KICAgICAgICAgICAgICAgIGlmIChfTV9m
bnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpDQog
ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAg
ICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAg
IHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0K
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0N
CiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYN
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnB1dChjaGFyX3R5cGUgX19jKQ0K
ICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg
ICAgICAgew0KICAgICAgICAgIGludF90eXBlIF9fcHV0ID0gcmRidWYoKS0+c3B1dGMoX19jKTsN
CiAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fcHV0LCB0cmFpdHNfdHlw
ZTo6ZW9mKCkpKQ0KICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OndyaXRlKGNv
bnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBzdHJl
YW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOw0KICAgICAgICAg
IGlmICggX19wdXQgIT0gX19uKQ0KICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OmZsdXNoKCkNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChf
X2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAodGhpcy0+cmRidWYoKSAmJiB0aGlzLT5y
ZGJ1ZigpLT5wdWJzeW5jKCkgPT0gLTEpDQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdHlwZW5h
bWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQ0KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6dGVsbHAoKQ0KICAgIHsNCiAgICAgIHBvc190eXBlIF9f
cmV0ID0gcG9zX3R5cGUoLTEpOw0KICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpDQogICAgICAgIF9f
cmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFz
ZTo6b3V0KTsNCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2Vla3AocG9z
X3R5cGUgX19wb3MpDQogICAgew0KICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpDQogICAgICAgIHsN
Cg0KDQogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9z
KF9fcG9zLCBpb3NfYmFzZTo6b3V0KTsNCg0KDQogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190
eXBlKG9mZl90eXBlKC0xKSkpDQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
ZmFpbGJpdCk7DQoNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6DQogICAgc2Vla3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZCkNCiAg
ICB7DQogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkNCiAgICAgICAgew0KDQoNCiAgICAgICAgICBw
b3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZCwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jh
c2U6Om91dCk7DQoNCg0KICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgt
MSkpKQ0KICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KDQog
ICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX291dCwgX0NoYXJUIF9fYykNCiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVh
bV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAg
IHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6
ZSBfX3cgPSBfX291dC53aWR0aCgpOw0KICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0
YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX193
ICsgMSkpKTsNCiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOw0KICAgICAgICAgICAgICBz
dHJlYW1zaXplIF9fbGVuID0gMTsNCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQ0KICAg
ICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46
Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fYywgX193LCBfX2xlbiwgZmFsc2UpOw0K
ICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAg
ICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsNCiAgICAgICAgICAgICAgX19vdXQu
d2lkdGgoMCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAg
ICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gX19vdXQ7DQogICAgfQ0KDQoNCiAgdGVtcGxh
dGUgPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAg
ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9f
YykNCiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gX19v
c3RyZWFtX3R5cGU7DQogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2Vy
YihfX291dCk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQog
ICAgICAgICAgICB7DQogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgo
KTsNCiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVp
bHRpbl9hbGxvY2EoX193ICsgMSkpOw0KICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBfX2M7DQog
ICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOw0KICAgICAgICAgICAgICBpZiAoX193
ID4gX19sZW4pDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgX19wYWQ8Y2hh
ciwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2MsIF9fdywgX19sZW4s
IGZhbHNlKTsNCiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193Ow0KICAgICAgICAgICAgICAg
IH0NCiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7DQogICAgICAgICAg
ICAgIF9fb3V0LndpZHRoKDApOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgX19vdXQuc2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsN
CiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fb3V0Ow0KICAgICB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IF9DaGFyVCogX19zKQ0KICAgIHsNCiAgICAg
IHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOw0K
ICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOw0KICAg
ICAgaWYgKF9fY2VyYiAmJiBfX3MpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg
ICAgIHsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOw0KICAg
ICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRp
bl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6
ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsN
CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAg
ICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQu
ZmlsbCgpLCBfX3BhZHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19zLCBfX3csIF9fbGVuLCBmYWxzZSk7DQogICAgICAgICAgICAgICAgICBfX3Mg
PSBfX3BhZHM7DQogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsNCiAgICAgICAgICAgICAg
ICB9DQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOw0KICAgICAgICAgICAg
ICBfX291dC53aWR0aCgwKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIF9fb3V0LnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQog
ICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKCFfX3MpDQogICAgICAgIF9f
b3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgcmV0dXJuIF9fb3V0Ow0KICAg
IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKQ0KICAgIHsNCiAg
ICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBl
Ow0KDQoNCg0KICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPiBfX3RyYWl0c190eXBlOw0K
DQogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7DQog
ICAgICBpZiAoX19jZXJiICYmIF9fcykNCiAgICAgICAgew0KICAgICAgICAgIHNpemVfdCBfX2Ns
ZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19zKTsNCiAgICAgICAgICBfQ2hhclQqIF9fd3Mg
PSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICog
KF9fY2xlbiArIDEpKSk7DQogICAgICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19j
bGVuOyArK19faSkNCiAgICAgICAgICAgIF9fd3NbX19pXSA9IF9fb3V0LndpZGVuKF9fc1tfX2ld
KTsNCiAgICAgICAgICBfQ2hhclQqIF9fc3RyID0gX193czsNCg0KICAgICAgICAgIHRyeQ0KICAg
ICAgICAgICAgew0KICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8
c3RyZWFtc2l6ZT4oX19jbGVuKTsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291
dC53aWR0aCgpOw0KICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9D
aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsNCg0KICAgICAg
ICAgICAgICBpZiAoX193ID4gX19sZW4pDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAg
ICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCks
IF9fcGFkcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3dzLCBfX3csIF9fbGVuLCBmYWxzZSk7DQogICAgICAgICAgICAgICAgICBfX3N0ciA9IF9f
cGFkczsNCiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193Ow0KICAgICAgICAgICAgICAgIH0N
CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsNCiAgICAgICAgICAgICAg
X19vdXQud2lkdGgoMCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICBfX291dC5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg
ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICBlbHNlIGlmICghX19zKQ0KICAgICAgICBfX291
dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgIHJldHVybiBfX291dDsNCiAgICB9
DQoNCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08Y2hhciwg
X1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBf
X291dCwgY29uc3QgY2hhciogX19zKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh
bTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVh
bV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQ0K
ICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHN0
cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsNCiAgICAgICAgICAgICAgY2hhciogX19wYWRz
ID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7DQogICAgICAgICAg
ICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjps
ZW5ndGgoX19zKSk7DQoNCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAg
ICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fcGFkPGNoYXIsIF9UcmFpdHM+OjpfU19wYWQo
X19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fcywgX193LCBfX2xlbiwgZmFsc2UpOw0KICAgICAgICAg
ICAgICAgICAgX19zID0gX19wYWRzOw0KICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7DQog
ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsN
CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7DQogICAgICAgICAgICB9DQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAg
ICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKChf
X291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAg
ICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICBlbHNlIGlmICghX19z
KQ0KICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgIHJldHVy
biBfX291dDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f
b3V0LA0KICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19zdHIpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7DQogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw
ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQog
ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRhKCk7DQogICAgICAgICAgc3Ry
ZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOw0KICAgICAgICAgIF9DaGFyVCogX19wYWRzID0g
c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9f
dykpOw0KICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXpl
PihfX3N0ci5zaXplKCkpOw0KDQoNCg0KICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikNCiAgICAg
ICAgICAgIHsNCiAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9f
b3V0LCBfX291dC5maWxsKCksIF9fcGFkcywgX19zLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX193LCBfX2xlbiwgZmFsc2UpOw0KICAgICAgICAgICAgICBf
X3MgPSBfX3BhZHM7DQogICAgICAgICAgICAgIF9fbGVuID0gX193Ow0KICAgICAgICAgICAgfQ0K
ICAgICAgICAgIHN0cmVhbXNpemUgX19yZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3MsIF9f
bGVuKTsNCiAgICAgICAgICBfX291dC53aWR0aCgwKTsNCiAgICAgICAgICBpZiAoX19yZXMgIT0g
X19sZW4pDQogICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQog
ICAgICAgIH0NCiAgICAgIHJldHVybiBfX291dDsNCiAgICB9DQoNCg0KDQoNCiAgZXh0ZXJuIHRl
bXBsYXRlIGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcj47DQogIGV4dGVybiB0ZW1wbGF0ZSBvc3Ry
ZWFtJiBlbmRsKG9zdHJlYW0mKTsNCiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGVuZHMob3N0
cmVhbSYpOw0KICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYpOw0KICBl
eHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY2hhcik7DQogIGV4
dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCB1bnNpZ25lZCBjaGFy
KTsNCiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIHNpZ25l
ZCBjaGFyKTsNCiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYs
IGNvbnN0IGNoYXIqKTsNCiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0
cmVhbSYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqKTsNCiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0m
IG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHNpZ25lZCBjaGFyKik7DQojIDcxMyAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9vc3RyZWFtLnRjYyIgMw0KfQ0KIyAyNzYgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL29zdHJlYW0iIDIgMw0KIyA3MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaXRlcmF0
b3IiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pc3RyZWFtIiAxIDMNCiMgNDMgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2lzdHJlYW0iIDMNCg0KDQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFz
cyBiYXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOw0KICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsNCiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7DQogICAgICB0eXBlZGVm
IF9UcmFpdHMgdHJhaXRzX3R5cGU7DQoNCg0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19p
b3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIGlzdHJl
YW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsNCiAgICAg
IHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBl
Ow0KICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsNCg0KICAgIHByb3Rl
Y3RlZDoNCg0KICAgICAgc3RyZWFtc2l6ZSBfTV9nY291bnQ7DQoNCiAgICBwdWJsaWM6DQoNCiAg
ICAgIGV4cGxpY2l0DQogICAgICBiYXNpY19pc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Ip
DQogICAgICB7DQogICAgICAgIHRoaXMtPmluaXQoX19zYik7DQogICAgICAgIF9NX2djb3VudCA9
IHN0cmVhbXNpemUoMCk7DQogICAgICB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5iYXNpY19p
c3RyZWFtKCkNCiAgICAgIHsgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsgfQ0KDQoNCiAgICAg
IGNsYXNzIHNlbnRyeTsNCiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7DQoNCg0KDQogICAgICBf
X2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZiko
X19pc3RyZWFtX3R5cGUmKSk7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0
b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7DQoNCiAgICAgIF9faXN0cmVh
bV90eXBlJg0KICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKTsN
Cg0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKTsN
Cg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pOw0K
DQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQm
IF9fbik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+PihpbnQmIF9f
bik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBp
bnQmIF9fbik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+Pihsb25n
JiBfX24pOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4odW5zaWdu
ZWQgbG9uZyYgX19uKTsNCg0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9y
Pj4obG9uZyBsb25nJiBfX24pOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJh
dG9yPj4odW5zaWduZWQgbG9uZyBsb25nJiBfX24pOw0KDQoNCiAgICAgIF9faXN0cmVhbV90eXBl
Jg0KICAgICAgb3BlcmF0b3I+PihmbG9hdCYgX19mKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUm
DQogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19mKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUm
DQogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX2YpOw0KDQogICAgICBfX2lzdHJlYW1f
dHlwZSYNCiAgICAgIG9wZXJhdG9yPj4odm9pZComIF9fcCk7DQoNCiAgICAgIF9faXN0cmVhbV90
eXBlJg0KICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsNCg0KDQogICAg
ICBpbmxpbmUgc3RyZWFtc2l6ZQ0KICAgICAgZ2NvdW50KHZvaWQpIGNvbnN0DQogICAgICB7IHJl
dHVybiBfTV9nY291bnQ7IH0NCg0KICAgICAgaW50X3R5cGUNCiAgICAgIGdldCh2b2lkKTsNCg0K
ICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBnZXQoY2hhcl90eXBlJiBfX2MpOw0KDQogICAg
ICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
X24sIGNoYXJfdHlwZSBfX2RlbGltKTsNCg0KICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJg0K
ICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICAgIHsgcmV0dXJu
IHRoaXMtPmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9DQoNCiAgICAgIF9faXN0
cmVhbV90eXBlJg0KICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBf
X2RlbGltKTsNCg0KICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0KF9fc3Ry
ZWFtYnVmX3R5cGUmIF9fc2IpDQogICAgICB7IHJldHVybiB0aGlzLT5nZXQoX19zYiwgdGhpcy0+
d2lkZW4oJ1xuJykpOyB9DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0bGluZShj
aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsNCg0KICAg
ICAgaW5saW5lIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywg
c3RyZWFtc2l6ZSBfX24pDQogICAgICB7IHJldHVybiB0aGlzLT5nZXRsaW5lKF9fcywgX19uLCB0
aGlzLT53aWRlbignXG4nKSk7IH0NCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBpZ25v
cmUoc3RyZWFtc2l6ZSBfX24gPSAxLCBpbnRfdHlwZSBfX2RlbGltID0gdHJhaXRzX3R5cGU6OmVv
ZigpKTsNCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHBlZWsodm9pZCk7DQoNCiAgICAgIF9faXN0
cmVhbV90eXBlJg0KICAgICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0K
DQogICAgICBzdHJlYW1zaXplDQogICAgICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFt
c2l6ZSBfX24pOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIHB1dGJhY2soY2hhcl90
eXBlIF9fYyk7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgdW5nZXQodm9pZCk7DQoN
CiAgICAgIGludA0KICAgICAgc3luYyh2b2lkKTsNCg0KICAgICAgcG9zX3R5cGUNCiAgICAgIHRl
bGxnKHZvaWQpOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIHNlZWtnKHBvc190eXBl
KTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBzZWVrZyhvZmZfdHlwZSwgaW9zX2Jh
c2U6OnNlZWtkaXIpOw0KICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPg0KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
c2VudHJ5DQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNf
dHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19z
dHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw
ZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Ry
YWl0czo6aW50X3R5cGUgX19pbnRfdHlwZTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIHNlbnRy
eShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIGJvb2wgX19ub3NraXB3cyA9
IGZhbHNlKTsNCg0KICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIF9NX29rOyB9DQoNCiAg
ICBwcml2YXRlOg0KICAgICAgYm9vbCBfTV9vazsNCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19pbiwgX0NoYXJUJiBfX2MpOw0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAg
YmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJl
YW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXImIF9fYykNCiAgICB7IHJldHVy
biAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQ0KDQogIHRlbXBsYXRl
PGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAgICBv
cGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFy
JiBfX2MpDQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19j
KSk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcyk7DQoNCiAgdGVtcGxh
dGU8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mDQogICAg
b3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNo
YXIqIF9fcykNCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihf
X3MpKTsgfQ0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxj
aGFyLF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+
JiBfX2luLCBzaWduZWQgY2hhciogX19zKQ0KICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW0NCiAgICA6IHB1Ymxp
YyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4sDQogICAgICBwdWJsaWMgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoNCg0KDQoNCiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6
aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190
eXBlIHBvc190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBv
ZmZfdHlwZTsNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsNCg0KDQoNCiAgICAg
IHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0K
ICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5
cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikNCiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiks
IF9fb3N0cmVhbV90eXBlKF9fc2IpDQogICAgICB7IH0NCg0KICAgICAgdmlydHVhbA0KICAgICAg
fmJhc2ljX2lvc3RyZWFtKCkgeyB9DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mDQogICAgd3MoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzKTsNCn0NCg0K
DQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvaXN0cmVhbS50Y2MiIDEgMw0K
IyAzNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9pc3RyZWFtLnRjYyIgMw0KDQoNCg0KDQpu
YW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6DQogICAg
c2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgYm9vbCBfX25vc2tp
cHdzKQ0KICAgIHsNCiAgICAgIGlmIChfX2luLmdvb2QoKSkNCiAgICAgICAgew0KICAgICAgICAg
IGlmIChfX2luLnRpZSgpKQ0KICAgICAgICAgICAgX19pbi50aWUoKS0+Zmx1c2goKTsNCiAgICAg
ICAgICBpZiAoIV9fbm9za2lwd3MgJiYgKF9faW4uZmxhZ3MoKSAmIGlvc19iYXNlOjpza2lwd3Mp
KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0g
dHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni
ID0gX19pbi5yZGJ1ZigpOw0KICAgICAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNn
ZXRjKCk7DQoNCiAgICAgICAgICAgICAgaWYgKF9faW4uX01fY2hlY2tfZmFjZXQoX19pbi5fTV9m
Y3R5cGUpKQ0KICAgICAgICAgICAgICAgIHdoaWxlICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl
KF9fYywgX19lb2YpDQogICAgICAgICAgICAgICAgICAgICAgICYmIF9faW4uX01fZmN0eXBlLT5p
cyhjdHlwZV9iYXNlOjpzcGFjZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSkpDQogICAgICAgICAgICAg
ICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsNCg0KDQoNCiAgICAgICAgICAgICAgaWYgKHRyYWl0
c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkNCiAgICAgICAgICAgICAgICBfX2luLnNl
dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0KDQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0K
ICAgICAgaWYgKF9faW4uZ29vZCgpKQ0KICAgICAgICBfTV9vayA9IHRydWU7DQogICAgICBlbHNl
DQogICAgICAgIHsNCiAgICAgICAgICBfTV9vayA9IGZhbHNlOw0KICAgICAgICAgIF9faW4uc2V0
c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg
ICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBlJikpDQog
ICAgew0KICAgICAgX19wZigqdGhpcyk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjoNCiAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQ0K
ICAgIHsNCiAgICAgIF9fcGYoKnRoaXMpOw0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6DQogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQ0KICAg
IHsNCiAgICAgIF9fcGYoKnRoaXMpOw0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6DQogICAgb3BlcmF0b3I+Pihib29sJiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAg
IHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy
ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAg
aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1n
ZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0K
ICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjoNCiAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAg
ICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBf
X2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAg
ICAgbG9uZyBfX2w7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0
KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vy
ciwgX19sKTsNCg0KDQogICAgICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxi
aXQpDQogICAgICAgICAgICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8c2hvcnQ+OjptaW4oKSA8
PSBfX2wNCiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8c2hv
cnQ+OjptYXgoKSkpDQogICAgICAgICAgICAgICAgX19uID0gX19sOw0KICAgICAgICAgICAgICBl
bHNlDQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7DQoNCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAg
ICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlz
Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKQ0K
ICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2Nl
cmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6
Z29vZGJpdCk7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkN
CiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg
X19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAg
fQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkN
CiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAg
cmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+PihpbnQmIF9fbikN
CiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7DQogICAgICBpZiAoX19j
ZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6
Omdvb2RiaXQpOw0KICAgICAgICAgICAgICBsb25nIF9fbDsNCiAgICAgICAgICAgICAgaWYgKF9N
X2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdl
dCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX2wpOw0KDQoNCiAgICAgICAgICAgICAgaWYgKCEo
X19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkNCiAgICAgICAgICAgICAgICAgICYmIChudW1lcmlj
X2xpbWl0czxpbnQ+OjptaW4oKSA8PSBfX2wNCiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2wg
PD0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQ0KICAgICAgICAgICAgICAgIF9fbiA9IF9f
bDsNCiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNl
OjpmYWlsYml0Ow0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsNCiAgICAg
ICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAg
IHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0K
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0N
CiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYN
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4odW5z
aWduZWQgaW50JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2Up
Ow0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAg
ICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp
b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2Zh
Y2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywg
MCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vy
cik7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQog
ICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0K
ICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVy
YXRvcj4+KGxvbmcmIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxz
ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAg
ICAgICB7DQogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6
Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOw0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf
ZmFjZXQoX01fZm51bWdldCkpDQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz
LCAwLCAqdGhpcywgX19lcnIsIF9fbik7DQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9f
ZXJyKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkN
CiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9
DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIG9w
ZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0
cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg
PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAgIGlm
IChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0
LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAg
ICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjoNCiAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAg
ICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAg
ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAgICAgICBf
TV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgdGhy
b3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyBsb25nJiBfX24pDQogICAg
ew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikN
CiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k
Yml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAg
ICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24p
Ow0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAgICB9DQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAg
ICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1
cm4gKnRoaXM7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fbikN
CiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7DQogICAgICBpZiAoX19j
ZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6
Omdvb2RiaXQpOw0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkp
DQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIs
IF9fbik7DQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsNCiAgICAgICAgICAg
IH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0K
DQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
DQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAg
IHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4oZG91YmxlJiBf
X24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYg
KF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19i
YXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1n
ZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9f
ZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAg
ICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7
DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog
ICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KGxvbmcg
ZG91YmxlJiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0K
ICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAg
ew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0
YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0
KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwg
KnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7
DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg
ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAg
ICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRv
cj4+KHZvaWQqJiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2Up
Ow0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAg
ICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp
b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2Zh
Y2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywg
MCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vy
cik7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQog
ICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0K
ICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVy
YXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpDQogICAgew0KICAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgICBpZiAoX19jZXJiKQ0KICAgICAgICAgew0KICAg
ICAgICAgICB0cnkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICBzdHJlYW1zaXplIF9f
eHRyY3QgPSAwOw0KICAgICAgICAgICAgICAgaWYgKF9fc2JvdXQpDQogICAgICAgICAgICAgICAg
IHsNCiAgICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0aGlzLT5y
ZGJ1ZigpOw0KICAgICAgICAgICAgICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygq
dGhpcywgX19zYmluLCBfX3Nib3V0KTsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
ICAgaWYgKCFfX3Nib3V0IHx8ICFfX3h0cmN0KQ0KICAgICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAg
ICAgIHRocm93Ow0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgICByZXR1cm4gKnRo
aXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4NCiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBl
DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBnZXQodm9pZCkNCiAg
ICB7DQogICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAg
ICAgIGludF90eXBlIF9fYyA9IF9fZW9mOw0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0K
ICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX2MgPSB0aGlzLT5y
ZGJ1ZigpLT5zYnVtcGMoKTsNCg0KICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9p
bnRfdHlwZShfX2MsIF9fZW9mKSkNCiAgICAgICAgICAgICAgICBfTV9nY291bnQgPSAxOw0KICAg
ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAg
ICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX2M7DQog
ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoNCiAgICBnZXQoY2hhcl90eXBlJiBfX2MpDQogICAgew0KICAgICAgX01f
Z2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYg
KF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAg
ICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAg
ICAgICAgICAgaW50X3R5cGUgX19idWZ2YWwgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsNCg0K
ICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2J1ZnZhbCwgX19l
b2YpKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7
DQogICAgICAgICAgICAgICAgICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYnVm
dmFsKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQp
Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAg
ICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgZ2V0KGNo
YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pDQogICAgew0K
ICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0K
ICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAg
ew0KICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0
b19pbnRfdHlwZShfX2RlbGltKTsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2Yg
PSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f
c2IgPSB0aGlzLT5yZGJ1ZigpOw0KICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5z
Z2V0YygpOw0KDQogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgKyAxIDwgX19uDQogICAg
ICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2Yp
DQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywg
X19pZGVsaW0pKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICpfX3MrKyA9
IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgICAgIF9fYyA9
IF9fc2ItPnNuZXh0YygpOw0KICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7DQogICAgICAg
ICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9f
YywgX19lb2YpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2Zi
aXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K
ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0N
CiAgICAgICAgfQ0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOw0KICAgICAgaWYgKCFfTV9nY291
bnQpDQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJl
dHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBf
X3NiLCBjaGFyX3R5cGUgX19kZWxpbSkNCiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAg
ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg
ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGNvbnN0IGlu
dF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOw0KICAg
ICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAg
ICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0gdGhpcy0+cmRidWYoKTsN
CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX190aGlzX3NiLT5zZ2V0YygpOw0KICAgICAg
ICAgICAgICBjaGFyX3R5cGUgX19jMiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsN
Cg0KICAgICAgICAgICAgICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9f
ZW9mKQ0KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShf
X2MsIF9faWRlbGltKQ0KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9p
bnRfdHlwZShfX3NiLnNwdXRjKF9fYzIpLCBfX2VvZikpDQogICAgICAgICAgICAgICAgew0KICAg
ICAgICAgICAgICAgICAgKytfTV9nY291bnQ7DQogICAgICAgICAgICAgICAgICBfX2MgPSBfX3Ro
aXNfc2ItPnNuZXh0YygpOw0KICAgICAgICAgICAgICAgICAgX19jMiA9IHRyYWl0c190eXBlOjp0
b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGlmICh0
cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpDQogICAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAg
ICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICBpZiAoIV9NX2djb3Vu
dCkNCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgcmV0
dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywg
c3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQ0KICAgIHsNCiAgICAgIF9NX2djb3Vu
dCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2Nl
cmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg
ICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19k
ZWxpbSk7DQogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6
OmVvZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRi
dWYoKTsNCiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsNCg0KICAg
ICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50ICsgMSA8IF9fbg0KICAgICAgICAgICAgICAgICAg
ICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQ0KICAgICAgICAgICAg
ICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkNCiAg
ICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6
dG9fY2hhcl90eXBlKF9fYyk7DQogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMo
KTsNCiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Ow0KICAgICAgICAgICAgICAgIH0NCiAg
ICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkNCiAg
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCiAgICAgICAg
ICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIGlmICh0cmFp
dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpDQogICAgICAgICAgICAgICAgICAg
IHsNCiAgICAgICAgICAgICAgICAgICAgICBfX3NiLT5zYnVtcGMoKTsNCiAgICAgICAgICAgICAg
ICAgICAgICArK19NX2djb3VudDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
ICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
ZmFpbGJpdCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAg
ICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgKl9fcyA9IGNoYXJfdHlw
ZSgpOw0KICAgICAgaWYgKCFfTV9nY291bnQpDQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAg
IGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19kZWxpbSkNCiAgICB7DQogICAgICBf
TV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBp
ZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAg
ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAg
ICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsNCiAgICAg
ICAgICAgICAgaW50X3R5cGUgX19jOw0KDQogICAgICAgICAgICAgIF9fbiA9IG1pbihfX24sIG51
bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7DQogICAgICAgICAgICAgIHdoaWxlIChf
TV9nY291bnQgPCBfX24NCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFf
aW50X3R5cGUoX19jID0gX19zYi0+c2J1bXBjKCksIF9fZW9mKSkNCiAgICAgICAgICAgICAgICB7
DQogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsNCiAgICAgICAgICAgICAgICAgIGlmICh0
cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2RlbGltKSkNCiAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5
cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj
ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv
dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0N
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdHlw
ZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQ0KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgcGVlayh2b2lkKQ0KICAgIHsNCiAgICAg
IGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgIF9NX2djb3VudCA9IDA7
DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQog
ICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsgX19jID0gdGhpcy0+cmRidWYo
KS0+c2dldGMoKTsgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAg
ICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAg
ICAgfQ0KICAgICAgcmV0dXJuIF9fYzsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHJlYWQoY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9IDA7DQog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg
ICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX01fZ2Nv
dW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX24pOw0KICAgICAgICAgICAgICBpZiAo
X01fZ2NvdW50ICE9IF9fbikNCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAg
ICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gKnRoaXM7
DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N
CiAgICBzdHJlYW1zaXplDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg
ICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQogICAgew0KICAgICAg
X01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAg
aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAg
ICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYoKS0+aW5fYXZhaWwoKTsN
CiAgICAgICAgICAgICAgaWYgKF9fbnVtID4gMCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAg
ICAgICAgICAgICBfX251bSA9IG1pbihfX251bSwgX19uKTsNCiAgICAgICAgICAgICAgICAgIGlm
IChfX251bSkNCiAgICAgICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gdGhpcy0+cmRidWYoKS0+
c2dldG4oX19zLCBfX251bSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBlbHNl
DQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAg
ICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAg
ICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsN
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9
DQogICAgICBlbHNlDQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsN
CiAgICAgIHJldHVybiBfTV9nY291bnQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBwdXRiYWNrKGNo
YXJfdHlwZSBfX2MpDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQog
ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7
DQogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigp
Ow0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsN
CiAgICAgICAgICAgICAgaWYgKCFfX3NiDQogICAgICAgICAgICAgICAgICB8fCB0cmFpdHNfdHlw
ZTo6ZXFfaW50X3R5cGUoX19zYi0+c3B1dGJhY2tjKF9fYyksIF9fZW9mKSkNCiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAg
ICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGVsc2UN
CiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgcmV0dXJu
ICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgdW5nZXQodm9pZCkNCiAgICB7DQogICAgICBf
TV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBp
ZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAg
ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAg
ICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsNCiAgICAg
ICAgICAgICAgaWYgKCFfX3NiDQogICAgICAgICAgICAgICAgICB8fCB0cmFpdHNfdHlwZTo6ZXFf
aW50X3R5cGUoX19zYi0+c3VuZ2V0YygpLCBfX2VvZikpDQogICAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAg
IHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAg
ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg
IGludA0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgc3luYyh2b2lk
KQ0KICAgIHsNCiAgICAgIGludCBfX3JldCA9IC0xOw0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAg
ICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX3N0cmVh
bWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsNCiAgICAgICAgICAgICAgaWYgKF9fc2Ip
DQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgaWYgKF9fc2ItPnB1YnN5bmMo
KSA9PSAtMSkNCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7DQogICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIF9fcmV0
ID0gMDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo
cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gX19yZXQ7DQogICAg
fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB0
eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlDQogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICB0ZWxsZyh2b2lkKQ0KICAgIHsNCiAg
ICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOw0KICAgICAgX01fZ2NvdW50ID0gMDsN
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg
ICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgIF9fcmV0
ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6
aW4pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K
ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0N
CiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBz
ZWVrZyhwb3NfdHlwZSBfX3BvcykNCiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7
DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICBwb3NfdHlw
ZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjppbik7
DQoNCg0KICAgICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkN
CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQoNCiAg
ICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAg
ICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
Ow0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAg
IH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHNlZWtnKG9mZl90
eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikNCiAgICB7DQogICAgICBfTV9nY291
bnQgPSAwOw0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19j
ZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQoNCg0KICAgICAg
ICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYs
IF9fZGlyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6OmluKTsNCg0KDQogICAgICAgICAgICAgIGlmIChfX2VyciA9PSBw
b3NfdHlwZShvZmZfdHlwZSgtMSkpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpmYWlsYml0KTsNCg0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsN
CiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKQ0KICAgIHsNCiAgICAgIHR5cGVk
ZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAg
dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOw0KICAg
ICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgeyBf
X2luLmdldChfX2MpOyB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg
ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOw0KICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAg
ICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0
KTsNCiAgICAgIHJldHVybiBfX2luOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBf
Q2hhclQqIF9fcykNCiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFt
X3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0eXBlZGVmIF9DaGFy
VCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOw0K
ICAgICAgc3RyZWFtc2l6ZSBfX2V4dHJhY3RlZCA9IDA7DQoNCiAgICAgIHR5cGVuYW1lIF9faXN0
cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIp
DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCg0KICAgICAgICAgICAg
ICBzdHJlYW1zaXplIF9fbnVtID0gX19pbi53aWR0aCgpOw0KICAgICAgICAgICAgICBpZiAoX19u
dW0gPT0gMCkNCiAgICAgICAgICAgICAgICBfX251bSA9IG51bWVyaWNfbGltaXRzPHN0cmVhbXNp
emU+OjptYXgoKTsNCg0KICAgICAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3R5cGUg
PSB1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsNCiAgICAgICAgICAgICAg
Y29uc3QgaW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsNCiAgICAgICAgICAgICAgX19z
dHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsNCiAgICAgICAgICAgICAgaW50X3R5
cGUgX19jID0gX19zYi0+c2dldGMoKTsNCg0KICAgICAgICAgICAgICB3aGlsZSAoX19leHRyYWN0
ZWQgPCBfX251bSAtIDENCiAgICAgICAgICAgICAgICAgICAgICYmIF9fYyAhPSBfX2VvZiAmJiAh
X19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkNCiAgICAgICAgICAgICAgICB7DQog
ICAgICAgICAgICAgICAgICAqX19zKysgPSBfX2M7DQogICAgICAgICAgICAgICAgICArK19fZXh0
cmFjdGVkOw0KICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7DQogICAgICAg
ICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQ0KICAgICAgICAgICAg
ICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQoNCg0KDQogICAgICAgICAgICAg
ICpfX3MgPSBjaGFyX3R5cGUoKTsNCg0KICAgICAgICAgICAgICBfX2luLndpZHRoKDApOw0KICAg
ICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAg
ICAgew0KDQoNCiAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsN
CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0N
CiAgICAgIGlmICghX19leHRyYWN0ZWQpDQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6
OmZhaWxiaXQpOw0KICAgICAgcmV0dXJuIF9faW47DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LF9UcmFpdHM+Jg0KICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2luKQ0K
ICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0
cmVhbV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJl
YW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lz
dHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7DQoNCiAgICAgIGNvbnN0
IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0
bG9jKCkpOw0KICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOw0K
ICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsNCiAgICAgIF9faW50
X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsNCg0KICAgICAgd2hpbGUgKF9fYyAhPSBfX2VvZiAm
JiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQ0KICAgICAgICBfX2MgPSBfX3Ni
LT5zbmV4dGMoKTsNCiAgICAgIGlmIChfX2MgPT0gX19lb2YpDQogICAgICAgIF9faW4uc2V0c3Rh
dGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQoNCiAgICAgIHJldHVybiBfX2luOw0KICAgIH0NCg0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+
KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwNCiAgICAgICAgICAgICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQ0KICAgIHsNCiAgICAg
IHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0K
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlw
ZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5
cGUgX19zdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5
cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsNCiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOw0KICAgICAgX19z
aXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOw0KDQogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw
ZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg
ICB7DQogICAgICAgICAgX19zdHIuZXJhc2UoKTsNCiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9
IF9faW4ud2lkdGgoKTsNCiAgICAgICAgICBfX3NpemVfdHlwZSBfX247DQogICAgICAgICAgX19u
ID0gX193ID4gMCA/IHN0YXRpY19jYXN0PF9fc2l6ZV90eXBlPihfX3cpIDogX19zdHIubWF4X3Np
emUoKTsNCg0KICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNl
dDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOw0KICAgICAgICAgIGNvbnN0IF9faW50X3R5
cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsNCiAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBf
X3NiID0gX19pbi5yZGJ1ZigpOw0KICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dl
dGMoKTsNCg0KICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbg0KICAgICAgICAgICAg
ICAgICAmJiBfX2MgIT0gX19lb2YgJiYgIV9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9f
YykpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fc3RyICs9IF9UcmFpdHM6OnRvX2No
YXJfdHlwZShfX2MpOw0KICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOw0KICAgICAgICAgICAg
ICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoX19j
ID09IF9fZW9mKQ0KICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsN
CiAgICAgICAgICBfX2luLndpZHRoKDApOw0KICAgICAgICB9DQoNCg0KICAgICAgaWYgKCFfX2V4
dHJhY3RlZCkNCiAgICAgICAgX19pbi5zZXRzdGF0ZSAoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KDQog
ICAgICByZXR1cm4gX19pbjsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+Jg0KICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX2luLA0KICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlw
ZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBf
X2N0eXBlX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4gX19zdHJpbmdfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdf
dHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOw0KDQogICAgICBfX3NpemVfdHlwZSBfX2V4dHJh
Y3RlZCA9IDA7DQogICAgICBib29sIF9fdGVzdGRlbGltID0gZmFsc2U7DQogICAgICB0eXBlbmFt
ZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCB0cnVlKTsNCiAgICAgIGlmIChf
X2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBfX3N0ci5lcmFzZSgpOw0KICAgICAgICAgIF9f
c2l6ZV90eXBlIF9fbiA9IF9fc3RyLm1heF9zaXplKCk7DQoNCiAgICAgICAgICBfX2ludF90eXBl
IF9faWRlbGltID0gX1RyYWl0czo6dG9faW50X3R5cGUoX19kZWxpbSk7DQogICAgICAgICAgX19z
dHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsNCiAgICAgICAgICBfX2ludF90eXBl
IF9fYyA9IF9fc2ItPnNidW1wYygpOw0KICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2Yg
PSBfVHJhaXRzOjplb2YoKTsNCiAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9UcmFpdHM6OmVxX2lu
dF90eXBlKF9fYywgX19pZGVsaW0pOw0KDQogICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDw9
IF9fbg0KICAgICAgICAgICAgICAgICAmJiAhX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2Vv
ZikNCiAgICAgICAgICAgICAgICAgJiYgIV9fdGVzdGRlbGltKQ0KICAgICAgICAgICAgew0KICAg
ICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAg
ICAgICAgKytfX2V4dHJhY3RlZDsNCiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7
DQogICAgICAgICAgICAgIF9fdGVzdGRlbGltID0gX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBf
X2lkZWxpbSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90
eXBlKF9fYywgX19lb2YpKQ0KICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m
Yml0KTsNCiAgICAgICAgfQ0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCAmJiAhX190ZXN0ZGVsaW0p
DQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgcmV0dXJu
IF9faW47DQogICAgfQ0KDQogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywg
Y2xhc3MgX0FsbG9jPg0KICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYN
CiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwNCiAgICAg
ICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3N0cikNCiAgICB7
IHJldHVybiBnZXRsaW5lKF9faW4sIF9fc3RyLCBfX2luLndpZGVuKCdcbicpKTsgfQ0KDQoNCg0K
DQogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXI+Ow0KICBleHRlcm4g
dGVtcGxhdGUgaXN0cmVhbSYgd3MoaXN0cmVhbSYpOw0KICBleHRlcm4gdGVtcGxhdGUgaXN0cmVh
bSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciYpOw0KICBleHRlcm4gdGVtcGxhdGUgaXN0cmVh
bSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciopOw0KICBleHRlcm4gdGVtcGxhdGUgaXN0cmVh
bSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciYpOw0KICBleHRlcm4gdGVtcGxh
dGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXImKTsNCiAgZXh0ZXJu
IHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHVuc2lnbmVkIGNoYXIqKTsN
CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHNpZ25lZCBj
aGFyKik7DQoNCg0KDQoNCg0KDQoNCn0NCiMgMjk4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pc3Ry
ZWFtIiAyIDMNCiMgNzIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2l0ZXJhdG9yIiAyIDMNCiMgMSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJlYW1faXRlcmF0b3IuaCIgMSAzDQojIDM5ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmVhbV9pdGVyYXRvci5oIiAzDQoNCm5hbWVzcGFj
ZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hhclQgPSBjaGFy
LA0KICAgICAgICAgICB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwgdHlw
ZW5hbWUgX0Rpc3QgPSBwdHJkaWZmX3Q+DQogICAgY2xhc3MgaXN0cmVhbV9pdGVyYXRvcg0KICAg
ICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfVHAsIF9EaXN0LCBjb25z
dCBfVHAqLCBjb25zdCBfVHAmPg0KICAgIHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9D
aGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAg
ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7DQoN
CiAgICBwcml2YXRlOg0KICAgICAgaXN0cmVhbV90eXBlKiBfTV9zdHJlYW07DQogICAgICBfVHAg
X01fdmFsdWU7DQogICAgICBib29sIF9NX29rOw0KDQogICAgcHVibGljOg0KICAgICAgaXN0cmVh
bV9pdGVyYXRvcigpIDogX01fc3RyZWFtKDApLCBfTV9vayhmYWxzZSkge30NCg0KICAgICAgaXN0
cmVhbV9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0oJl9fcykgeyBfTV9y
ZWFkKCk7IH0NCg0KICAgICAgaXN0cmVhbV9pdGVyYXRvcihjb25zdCBpc3RyZWFtX2l0ZXJhdG9y
JiBfX29iaikNCiAgICAgIDogX01fc3RyZWFtKF9fb2JqLl9NX3N0cmVhbSksIF9NX3ZhbHVlKF9f
b2JqLl9NX3ZhbHVlKSwNCiAgICAgICAgX01fb2soX19vYmouX01fb2spDQogICAgICB7IH0NCg0K
ICAgICAgY29uc3QgX1RwJg0KICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01fdmFs
dWU7IH0NCg0KICAgICAgY29uc3QgX1RwKg0KICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0
dXJuICYob3BlcmF0b3IqKCkpOyB9DQoNCiAgICAgIGlzdHJlYW1faXRlcmF0b3ImDQogICAgICBv
cGVyYXRvcisrKCkNCiAgICAgIHsgX01fcmVhZCgpOyByZXR1cm4gKnRoaXM7IH0NCg0KICAgICAg
aXN0cmVhbV9pdGVyYXRvcg0KICAgICAgb3BlcmF0b3IrKyhpbnQpDQogICAgICB7DQogICAgICAg
IGlzdHJlYW1faXRlcmF0b3IgX190bXAgPSAqdGhpczsNCiAgICAgICAgX01fcmVhZCgpOw0KICAg
ICAgICByZXR1cm4gX190bXA7DQogICAgICB9DQoNCiAgICAgIGJvb2wNCiAgICAgIF9NX2VxdWFs
KGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImIF9feCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIChfTV9v
ayA9PSBfX3guX01fb2spICYmICghX01fb2sgfHwgX01fc3RyZWFtID09IF9feC5fTV9zdHJlYW0p
O30NCg0KICAgIHByaXZhdGU6DQogICAgICB2b2lkDQogICAgICBfTV9yZWFkKCkNCiAgICAgIHsN
CiAgICAgICAgX01fb2sgPSAoX01fc3RyZWFtICYmICpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNl
Ow0KICAgICAgICBpZiAoX01fb2spDQogICAgICAgICAgew0KICAgICAgICAgICAgKl9NX3N0cmVh
bSA+PiBfTV92YWx1ZTsNCiAgICAgICAgICAgIF9NX29rID0gKl9NX3N0cmVhbSA/IHRydWUgOiBm
YWxzZTsNCiAgICAgICAgICB9DQogICAgICB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Rpc3Q+
DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8
X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX194LA0KICAgICAgICAgICAgICAgY29uc3Qg
aXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpDQogICAg
eyByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7IH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9EaXN0Pg0KICAgIGlubGluZSBib29s
DQogICAgb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJh
aXRzLCBfRGlzdD4mIF9feCwNCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8
X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195KQ0KICAgIHsgcmV0dXJuICFfX3guX01f
ZXF1YWwoX195KTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hh
clQgPSBjaGFyLA0KICAgICAgICAgICB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No
YXJUPiA+DQogICAgY2xhc3Mgb3N0cmVhbV9pdGVyYXRvcg0KICAgICAgOiBwdWJsaWMgaXRlcmF0
b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4NCiAgICB7DQog
ICAgcHVibGljOg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl
ZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOw0KDQogICAgcHJpdmF0ZToNCiAgICAgIG9zdHJlYW1f
dHlwZSogX01fc3RyZWFtOw0KICAgICAgY29uc3QgX0NoYXJUKiBfTV9zdHJpbmc7DQoNCiAgICBw
dWJsaWM6DQogICAgICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zKSA6IF9NX3N0
cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9DQoNCiAgICAgIG9zdHJlYW1faXRlcmF0b3Iob3N0
cmVhbV90eXBlJiBfX3MsIGNvbnN0IF9DaGFyVCogX19jKQ0KICAgICAgOiBfTV9zdHJlYW0oJl9f
cyksIF9NX3N0cmluZyhfX2MpIHsgfQ0KDQogICAgICBvc3RyZWFtX2l0ZXJhdG9yKGNvbnN0IG9z
dHJlYW1faXRlcmF0b3ImIF9fb2JqKQ0KICAgICAgOiBfTV9zdHJlYW0oX19vYmouX01fc3RyZWFt
KSwgX01fc3RyaW5nKF9fb2JqLl9NX3N0cmluZykgeyB9DQoNCiAgICAgIG9zdHJlYW1faXRlcmF0
b3ImDQogICAgICBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVlKQ0KICAgICAgew0KICAgICAg
ICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7DQogICAgICAgIGlmIChfTV9zdHJpbmcpICpfTV9zdHJl
YW0gPDwgX01fc3RyaW5nOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoNCiAgICAg
IG9zdHJlYW1faXRlcmF0b3ImDQogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQ0K
DQogICAgICBvc3RyZWFtX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0
aGlzOyB9DQoNCiAgICAgIG9zdHJlYW1faXRlcmF0b3ImDQogICAgICBvcGVyYXRvcisrKGludCkg
eyByZXR1cm4gKnRoaXM7IH0NCiAgICB9Ow0KfQ0KIyA3MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
aXRlcmF0b3IiIDIgMw0KIyA2OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbnVtZXJpYyIgMiAzDQoN
CiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbnVtZXJpYy5oIiAxIDMNCiMgNjQg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX251bWVyaWMuaCIgMw0KbmFtZXNwYWNlIHN0
ZA0Kew0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+
DQogICAgX1RwDQogICAgYWNjdW11bGF0ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QsIF9UcCBfX2luaXQpDQogICAgew0KDQogICAgIA0KDQogICAgICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgICAgIF9faW5pdCA9IF9faW5p
dCArICpfX2ZpcnN0Ow0KICAgICAgcmV0dXJuIF9faW5pdDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0JpbmFyeU9w
ZXJhdGlvbj4NCiAgICBfVHANCiAgICBhY2N1bXVsYXRlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX1RwIF9faW5pdCwNCiAgICAgICAgICAgICAgIF9CaW5h
cnlPcGVyYXRpb24gX19iaW5hcnlfb3ApDQogICAgew0KDQogICAgIA0KDQogICAgICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgICAgIF9faW5pdCA9IF9fYmluYXJ5
X29wKF9faW5pdCwgKl9fZmlyc3QpOw0KICAgICAgcmV0dXJuIF9faW5pdDsNCiAgICB9DQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRv
cjIsIHR5cGVuYW1lIF9UcD4NCiAgICBfVHANCiAgICBpbm5lcl9wcm9kdWN0KF9JbnB1dEl0ZXJh
dG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9UcCBfX2luaXQpDQogICAgew0KDQogICAgIA0K
ICAgICANCg0KICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCAr
K19fZmlyc3QyKQ0KICAgICAgICBfX2luaXQgPSBfX2luaXQgKyAoKl9fZmlyc3QxICogKl9fZmly
c3QyKTsNCiAgICAgIHJldHVybiBfX2luaXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLCB0eXBlbmFtZSBfVHAs
DQogICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uMSwgdHlwZW5hbWUgX0JpbmFy
eU9wZXJhdGlvbjI+DQogICAgX1RwDQogICAgaW5uZXJfcHJvZHVjdChfSW5wdXRJdGVyYXRvcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfVHAgX19pbml0LA0KICAgICAgICAgICAgICAgICAgX0Jp
bmFyeU9wZXJhdGlvbjEgX19iaW5hcnlfb3AxLA0KICAgICAgICAgICAgICAgICAgX0JpbmFyeU9w
ZXJhdGlvbjIgX19iaW5hcnlfb3AyKQ0KICAgIHsNCg0KICAgICANCiAgICAgDQoNCiAgICAgIGZv
ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikNCiAgICAg
ICAgX19pbml0ID0gX19iaW5hcnlfb3AxKF9faW5pdCwgX19iaW5hcnlfb3AyKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSk7DQogICAgICByZXR1cm4gX19pbml0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPg0KICAgIF9P
dXRwdXRJdGVyYXRvcg0KICAgIHBhcnRpYWxfc3VtKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19y
ZXN1bHQpDQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu
cHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQoNCg0KICAgICANCiAgICAgDQoN
CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0Ow0KICAgICAgKl9f
cmVzdWx0ID0gKl9fZmlyc3Q7DQogICAgICBfVmFsdWVUeXBlIF9fdmFsdWUgPSAqX19maXJzdDsN
CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSB7DQogICAgICAgIF9fdmFsdWUgPSBf
X3ZhbHVlICsgKl9fZmlyc3Q7DQogICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsNCiAgICAg
IH0NCiAgICAgIHJldHVybiArK19fcmVzdWx0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfQmlu
YXJ5T3BlcmF0aW9uPg0KICAgIF9PdXRwdXRJdGVyYXRvcg0KICAgIHBhcnRpYWxfc3VtKF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3Ap
DQogICAgew0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl
cmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7DQoNCg0KICAgICANCiAgICAgDQoNCiAgICAg
IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0Ow0KICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3Q7DQogICAgICBfVmFsdWVUeXBlIF9fdmFsdWUgPSAqX19maXJzdDsNCiAgICAg
IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSB7DQogICAgICAgIF9fdmFsdWUgPSBfX2JpbmFy
eV9vcChfX3ZhbHVlLCAqX19maXJzdCk7DQogICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsN
CiAgICAgIH0NCiAgICAgIHJldHVybiArK19fcmVzdWx0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPg0KICAgIF9P
dXRwdXRJdGVyYXRvcg0KICAgIGFkamFjZW50X2RpZmZlcmVuY2UoX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX091
dHB1dEl0ZXJhdG9yIF9fcmVzdWx0KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOw0KDQoN
CiAgICAgDQogICAgIA0KDQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jl
c3VsdDsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICAgICAgX1ZhbHVlVHlwZSBfX3Zh
bHVlID0gKl9fZmlyc3Q7DQogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAg
ICAgICBfVmFsdWVUeXBlIF9fdG1wID0gKl9fZmlyc3Q7DQogICAgICAgICorK19fcmVzdWx0ID0g
X190bXAgLSBfX3ZhbHVlOw0KICAgICAgICBfX3ZhbHVlID0gX190bXA7DQogICAgICB9DQogICAg
ICByZXR1cm4gKytfX3Jlc3VsdDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0JpbmFyeU9wZXJh
dGlvbj4NCiAgICBfT3V0cHV0SXRlcmF0b3INCiAgICBhZGphY2VudF9kaWZmZXJlbmNlKF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0JpbmFyeU9wZXJhdGlvbiBfX2Jp
bmFyeV9vcCkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsNCg0KDQogICAgIA0KICAgICAN
Cg0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7DQogICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDsNCiAgICAgIF9WYWx1ZVR5cGUgX192YWx1ZSA9ICpfX2ZpcnN0
Ow0KICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAgICAgX1ZhbHVlVHlw
ZSBfX3RtcCA9ICpfX2ZpcnN0Ow0KICAgICAgICAqKytfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKF9f
dG1wLCBfX3ZhbHVlKTsNCiAgICAgICAgX192YWx1ZSA9IF9fdG1wOw0KICAgICAgfQ0KICAgICAg
cmV0dXJuICsrX19yZXN1bHQ7DQogICAgfQ0KDQp9DQojIDcwICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9udW1lcmljIiAyIDMNCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL3ZhbGFycmF5IiAyIDMN
CiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZnVuY3Rpb25hbCIgMSAzDQojIDUzICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9mdW5jdGlvbmFsIiAzDQojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi92
YWxhcnJheSIgMiAzDQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICAgIHRlbXBsYXRlPGNsYXNzIF9D
bG9zLCB0eXBlbmFtZSBfVHA+IGNsYXNzIF9FeHByOw0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwMSwgdHlwZW5hbWUgX1RwMj4gY2xhc3MgX1ZhbEFycmF5Ow0KDQogICAgdGVtcGxhdGU8dGVt
cGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLA0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcywgY2xhc3M+
IGNsYXNzIF9NZXRhLCBjbGFzcyBfRG9tPiBzdHJ1Y3QgX1VuQ2xvczsNCg0KICAgIHRlbXBsYXRl
PHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwNCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MsIGNs
YXNzPiBjbGFzcyBfTWV0YTEsDQogICAgICAgIHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3Mg
X01ldGEyLA0KICAgICAgICBjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGNsYXNzIF9CaW5DbG9z
Ow0KDQogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MsIGNsYXNzPiBjbGFzcyBfTWV0YSwgY2xh
c3MgX0RvbT4gY2xhc3MgX1NDbG9zOw0KDQogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MsIGNs
YXNzPiBjbGFzcyBfTWV0YSwgY2xhc3MgX0RvbT4gY2xhc3MgX0dDbG9zOw0KDQogICAgdGVtcGxh
dGU8dGVtcGxhdGU8Y2xhc3MsIGNsYXNzPiBjbGFzcyBfTWV0YSwgY2xhc3MgX0RvbT4gY2xhc3Mg
X0lDbG9zOw0KDQogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MsIGNsYXNzPiBjbGFzcyBfTWV0
YSwgY2xhc3MgX0RvbT4gY2xhc3MgX1ZhbEZ1bkNsb3M7DQoNCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0
ZTxjbGFzcywgY2xhc3M+IGNsYXNzIF9NZXRhLCBjbGFzcyBfRG9tPiBjbGFzcyBfUmVmRnVuQ2xv
czsNCg0KICAgIHRlbXBsYXRlPGNsYXNzIF9UcD4gc3RydWN0IF9VbmFyeV9wbHVzOw0KICAgIHRl
bXBsYXRlPGNsYXNzIF9UcD4gc3RydWN0IF9CaXR3aXNlX2FuZDsNCiAgICB0ZW1wbGF0ZTxjbGFz
cyBfVHA+IHN0cnVjdCBfQml0d2lzZV9vcjsNCiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IHN0cnVj
dCBfQml0d2lzZV94b3I7DQogICAgdGVtcGxhdGU8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0JpdHdpc2Vf
bm90Ow0KICAgIHRlbXBsYXRlPGNsYXNzIF9UcD4gc3RydWN0IF9TaGlmdF9sZWZ0Ow0KICAgIHRl
bXBsYXRlPGNsYXNzIF9UcD4gc3RydWN0IF9TaGlmdF9yaWdodDsNCg0KICAgIHRlbXBsYXRlPGNs
YXNzIF9UcD4gY2xhc3MgdmFsYXJyYXk7DQogICAgY2xhc3Mgc2xpY2U7DQogICAgdGVtcGxhdGU8
Y2xhc3MgX1RwPiBjbGFzcyBzbGljZV9hcnJheTsNCiAgICBjbGFzcyBnc2xpY2U7DQogICAgdGVt
cGxhdGU8Y2xhc3MgX1RwPiBjbGFzcyBnc2xpY2VfYXJyYXk7DQogICAgdGVtcGxhdGU8Y2xhc3Mg
X1RwPiBjbGFzcyBtYXNrX2FycmF5Ow0KICAgIHRlbXBsYXRlPGNsYXNzIF9UcD4gY2xhc3MgaW5k
aXJlY3RfYXJyYXk7DQoNCn0NCg0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3ZhbGFy
cmF5X2FycmF5LmgiIDEgMw0KIyA0MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJh
eV9hcnJheS5oIiAzDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NwcF90eXBl
X3RyYWl0cy5oIiAxIDMNCiMgNDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY3BwX3R5cGVf
dHJhaXRzLmgiIDMNCiMgNjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY3BwX3R5cGVfdHJh
aXRzLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAg
IHN0cnVjdCBfX2lzX3ZvaWQNCiAgICB7DQogICAgICBlbnVtDQogICAgICB7DQogICAgICAgIF9N
X3R5cGUgPSAwDQogICAgICB9Ow0KICAgIH07DQoNCiAgdGVtcGxhdGU8Pg0KICAgIHN0cnVjdCBf
X2lzX3ZvaWQ8dm9pZD4NCiAgICB7DQogICAgICBlbnVtDQogICAgICB7DQogICAgICAgIF9NX3R5
cGUgPSAxDQogICAgICB9Ow0KICAgIH07DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
Pg0KICAgIHN0cnVjdCBfX2lzX2ludGVnZXINCiAgICB7DQogICAgICBlbnVtDQogICAgICB7DQog
ICAgICAgIF9NX3R5cGUgPSAwDQogICAgICB9Ow0KICAgIH07DQoNCg0KDQoNCiAgdGVtcGxhdGU8
Pg0KICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8Ym9vbD4NCiAgICB7DQogICAgICBlbnVtDQogICAg
ICB7DQogICAgICAgIF9NX3R5cGUgPSAxDQogICAgICB9Ow0KICAgIH07DQoNCiAgdGVtcGxhdGU8
Pg0KICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8Y2hhcj4NCiAgICB7DQogICAgICBlbnVtDQogICAg
ICB7DQogICAgICAgIF9NX3R5cGUgPSAxDQogICAgICB9Ow0KICAgIH07DQoNCiAgdGVtcGxhdGU8
Pg0KICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8c2lnbmVkIGNoYXI+DQogICAgew0KICAgICAgZW51
bQ0KICAgICAgew0KICAgICAgICBfTV90eXBlID0gMQ0KICAgICAgfTsNCiAgICB9Ow0KDQogIHRl
bXBsYXRlPD4NCiAgc3RydWN0IF9faXNfaW50ZWdlcjx1bnNpZ25lZCBjaGFyPg0KICB7DQogICAg
ZW51bQ0KICAgIHsNCiAgICAgIF9NX3R5cGUgPSAxDQogICAgfTsNCiAgfTsNCiMgMTQ5ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL2NwcF90eXBlX3RyYWl0cy5oIiAzDQogIHRlbXBsYXRlPD4N
CiAgc3RydWN0IF9faXNfaW50ZWdlcjxzaG9ydD4NCiAgew0KICAgIGVudW0NCiAgICB7DQogICAg
ICBfTV90eXBlID0gMQ0KICAgIH07DQogIH07DQoNCiAgdGVtcGxhdGU8Pg0KICBzdHJ1Y3QgX19p
c19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0Pg0KICB7DQogICAgZW51bQ0KICAgIHsNCiAgICAgIF9N
X3R5cGUgPSAxDQogICAgfTsNCiAgfTsNCg0KICB0ZW1wbGF0ZTw+DQogIHN0cnVjdCBfX2lzX2lu
dGVnZXI8aW50Pg0KICB7DQogICAgZW51bQ0KICAgIHsNCiAgICAgIF9NX3R5cGUgPSAxDQogICAg
fTsNCiAgfTsNCg0KICB0ZW1wbGF0ZTw+DQogIHN0cnVjdCBfX2lzX2ludGVnZXI8dW5zaWduZWQg
aW50Pg0KICB7DQogICAgZW51bQ0KICAgIHsNCiAgICAgIF9NX3R5cGUgPSAxDQogICAgfTsNCiAg
fTsNCg0KICB0ZW1wbGF0ZTw+DQogIHN0cnVjdCBfX2lzX2ludGVnZXI8bG9uZz4NCiAgew0KICAg
IGVudW0NCiAgICB7DQogICAgICBfTV90eXBlID0gMQ0KICAgIH07DQogIH07DQoNCiAgdGVtcGxh
dGU8Pg0KICBzdHJ1Y3QgX19pc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmc+DQogIHsNCiAgICBlbnVt
DQogICAgew0KICAgICAgX01fdHlwZSA9IDENCiAgICB9Ow0KICB9Ow0KDQogIHRlbXBsYXRlPD4N
CiAgc3RydWN0IF9faXNfaW50ZWdlcjxsb25nIGxvbmc+DQogIHsNCiAgICBlbnVtDQogICAgew0K
ICAgICAgX01fdHlwZSA9IDENCiAgICB9Ow0KICB9Ow0KDQogIHRlbXBsYXRlPD4NCiAgc3RydWN0
IF9faXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+DQogIHsNCiAgICBlbnVtDQogICAgew0K
ICAgICAgX01fdHlwZSA9IDENCiAgICB9Ow0KICB9Ow0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4NCiAgc3RydWN0IF9faXNfZmxvYXRpbmcNCiAgew0KICAgIGVudW0NCiAgICB7DQog
ICAgICBfTV90eXBlID0gMA0KICAgIH07DQogIH07DQoNCg0KICB0ZW1wbGF0ZTw+DQogIHN0cnVj
dCBfX2lzX2Zsb2F0aW5nPGZsb2F0Pg0KICB7DQogICAgZW51bQ0KICAgIHsNCiAgICAgIF9NX3R5
cGUgPSAxDQogICAgfTsNCiAgfTsNCg0KICB0ZW1wbGF0ZTw+DQogIHN0cnVjdCBfX2lzX2Zsb2F0
aW5nPGRvdWJsZT4NCiAgew0KICAgIGVudW0NCiAgICB7DQogICAgICBfTV90eXBlID0gMQ0KICAg
IH07DQogIH07DQoNCiAgdGVtcGxhdGU8Pg0KICBzdHJ1Y3QgX19pc19mbG9hdGluZzxsb25nIGRv
dWJsZT4NCiAgew0KICAgIGVudW0NCiAgICB7DQogICAgICBfTV90eXBlID0gMQ0KICAgIH07DQog
IH07DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICBzdHJ1Y3QgX19pc19hcml0
aG1ldGljDQogIHsNCiAgICBlbnVtDQogICAgew0KICAgICAgX01fdHlwZSA9IF9faXNfaW50ZWdl
cjxfVHA+OjpfTV90eXBlIHx8IF9faXNfZmxvYXRpbmc8X1RwPjo6X01fdHlwZQ0KICAgIH07DQog
IH07DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICBzdHJ1Y3QgX19pc19mdW5k
YW1lbnRhbA0KICB7DQogICAgZW51bQ0KICAgIHsNCiAgICAgIF9NX3R5cGUgPSBfX2lzX3ZvaWQ8
X1RwPjo6X01fdHlwZSB8fCBfX2lzX2FyaXRobWV0aWM8X1RwPjo6X01fdHlwZQ0KICAgIH07DQog
IH07DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICBzdHJ1Y3QgX19pc19wb2QN
CiAgew0KICAgIGVudW0NCiAgICB7DQogICAgICBfTV90eXBlID0gX19pc19mdW5kYW1lbnRhbDxf
VHA+OjpfTV90eXBlDQogICAgfTsNCiAgfTsNCg0KfQ0KIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy92YWxhcnJheV9hcnJheS5oIiAyIDMNCg0KDQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0K
DQoNCg0KDQoNCiAgaW5saW5lIHZvaWQqDQogIF9fdmFsYXJyYXlfZ2V0X21lbW9yeShzaXplX3Qg
X19uKQ0KICB7IHJldHVybiBvcGVyYXRvciBuZXcoX19uKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4NCiAgICAgaW5saW5lIF9UcCpfX3Jlc3RyaWN0X18NCiAgICAgX192YWxhcnJheV9n
ZXRfc3RvcmFnZShzaXplX3QgX19uKQ0KICAgICB7DQogICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PF9UcCpfX3Jlc3RyaWN0X18+DQogICAgICAgICAoX192YWxhcnJheV9nZXRfbWVtb3J5KF9fbiAq
IHNpemVvZihfVHApKSk7DQogICAgIH0NCg0KDQogIGlubGluZSB2b2lkDQogIF9fdmFsYXJyYXlf
cmVsZWFzZV9tZW1vcnkodm9pZCogX19wKQ0KICB7IG9wZXJhdG9yIGRlbGV0ZShfX3ApOyB9DQoN
Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbD4NCiAgICAgc3RydWN0IF9BcnJheV9k
ZWZhdWx0X2N0b3INCiAgICAgew0KDQoNCiAgICAgICBpbmxpbmUgc3RhdGljIHZvaWQNCiAgICAg
ICBfU19kb19pdChfVHAqIF9fcmVzdHJpY3RfXyBfX2IsIF9UcCogX19yZXN0cmljdF9fIF9fZSkN
CiAgICAgICB7IHdoaWxlIChfX2IgIT0gX19lKSBuZXcoX19iKyspIF9UcCgpOyB9DQogICAgIH07
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBzdHJ1Y3QgX0FycmF5X2RlZmF1bHRf
Y3RvcjxfVHAsIHRydWU+DQogICAgIHsNCg0KICAgICAgIGlubGluZSBzdGF0aWMgdm9pZA0KICAg
ICAgIF9TX2RvX2l0KF9UcCogX19yZXN0cmljdF9fIF9fYiwgX1RwKiBfX3Jlc3RyaWN0X18gX19l
KQ0KICAgICAgIHsgbWVtc2V0KF9fYiwgMCwgKF9fZSAtIF9fYikqc2l6ZW9mKF9UcCkpOyB9DQog
ICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgdm9pZA0KICAg
ICBfX3ZhbGFycmF5X2RlZmF1bHRfY29uc3RydWN0KF9UcCogX19yZXN0cmljdF9fIF9fYiwgX1Rw
KiBfX3Jlc3RyaWN0X18gX19lKQ0KICAgICB7DQogICAgICAgX0FycmF5X2RlZmF1bHRfY3Rvcjxf
VHAsIF9faXNfZnVuZGFtZW50YWw8X1RwPjo6X01fdHlwZT46Og0KICAgICAgICAgX1NfZG9faXQo
X19iLCBfX2UpOw0KICAgICB9DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBib29s
Pg0KICAgICBzdHJ1Y3QgX0FycmF5X2luaXRfY3Rvcg0KICAgICB7DQoNCg0KICAgICAgIGlubGlu
ZSBzdGF0aWMgdm9pZA0KICAgICAgIF9TX2RvX2l0KF9UcCogX19yZXN0cmljdF9fIF9fYiwgX1Rw
KiBfX3Jlc3RyaWN0X18gX19lLCBjb25zdCBfVHAgX190KQ0KICAgICAgIHsgd2hpbGUgKF9fYiAh
PSBfX2UpIG5ldyhfX2IrKykgX1RwKF9fdCk7IH0NCiAgICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+DQogICAgIHN0cnVjdCBfQXJyYXlfaW5pdF9jdG9yPF9UcCwgdHJ1ZT4NCiAgICAg
ew0KICAgICAgIGlubGluZSBzdGF0aWMgdm9pZA0KICAgICAgIF9TX2RvX2l0KF9UcCogX19yZXN0
cmljdF9fIF9fYiwgX1RwKiBfX3Jlc3RyaWN0X18gX19lLCBjb25zdCBfVHAgX190KQ0KICAgICAg
IHsgd2hpbGUgKF9fYiAhPSBfX2UpICpfX2IrKyA9IF9fdDsgfQ0KICAgICB9Ow0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQNCiAgICAgX192YWxhcnJheV9maWxs
X2NvbnN0cnVjdChfVHAqIF9fcmVzdHJpY3RfXyBfX2IsIF9UcCogX19yZXN0cmljdF9fIF9fZSwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAgX190KQ0KICAgICB7DQog
ICAgICAgX0FycmF5X2luaXRfY3RvcjxfVHAsIF9faXNfZnVuZGFtZW50YWw8X1RwPjo6X01fdHlw
ZT46Og0KICAgICAgICAgX1NfZG9faXQoX19iLCBfX2UsIF9fdCk7DQogICAgIH0NCg0KDQoNCg0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbD4NCiAgICAgc3RydWN0IF9BcnJheV9jb3B5
X2N0b3INCiAgICAgew0KDQoNCiAgICAgICBpbmxpbmUgc3RhdGljIHZvaWQNCiAgICAgICBfU19k
b19pdChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2IsIGNvbnN0IF9UcCogX19yZXN0cmljdF9f
IF9fZSwNCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdHJpY3RfXyBfX28pDQogICAgICAgeyB3
aGlsZSAoX19iICE9IF9fZSkgbmV3KF9fbysrKSBfVHAoKl9fYisrKTsgfQ0KICAgICB9Ow0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgc3RydWN0IF9BcnJheV9jb3B5X2N0b3I8X1Rw
LCB0cnVlPg0KICAgICB7DQogICAgICAgaW5saW5lIHN0YXRpYyB2b2lkDQogICAgICAgX1NfZG9f
aXQoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19iLCBjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBf
X2UsDQogICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3RyaWN0X18gX19vKQ0KICAgICAgIHsgbWVt
Y3B5KF9fbywgX19iLCAoX19lIC0gX19iKSpzaXplb2YoX1RwKSk7IH0NCiAgICAgfTsNCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgIGlubGluZSB2b2lkDQogICAgIF9fdmFsYXJyYXlf
Y29weV9jb25zdHJ1Y3QoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19iLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fZSwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdHJpY3RfXyBfX28pDQogICAgIHsNCiAg
ICAgICBfQXJyYXlfY29weV9jdG9yPF9UcCwgX19pc19mdW5kYW1lbnRhbDxfVHA+OjpfTV90eXBl
Pjo6DQogICAgICAgICBfU19kb19pdChfX2IsIF9fZSwgX19vKTsNCiAgICAgfQ0KDQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgdm9pZA0KICAgICBfX3ZhbGFycmF5X2Nv
cHlfY29uc3RydWN0IChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2EsIHNpemVfdCBfX24sDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3MsIF9UcCogX19yZXN0cmlj
dF9fIF9fbykNCiAgICAgew0KICAgICAgIGlmIChfX2lzX2Z1bmRhbWVudGFsPF9UcD46Ol9NX3R5
cGUpDQogICAgICAgICB3aGlsZSAoX19uLS0pIHsgKl9fbysrID0gKl9fYTsgX19hICs9IF9fczsg
fQ0KICAgICAgIGVsc2UNCiAgICAgICAgIHdoaWxlIChfX24tLSkgeyBuZXcoX19vKyspIF9UcCgq
X19hKTsgX19hICs9IF9fczsgfQ0KICAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
DQogICAgIGlubGluZSB2b2lkDQogICAgIF9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QgKGNvbnN0
IF9UcCogX19yZXN0cmljdF9fIF9fYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc2l6ZV90KiBfX3Jlc3RyaWN0X18gX19pLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfVHAqIF9fcmVzdHJpY3RfXyBfX28sIHNpemVfdCBfX24pDQogICAgIHsNCiAgICAg
ICBpZiAoX19pc19mdW5kYW1lbnRhbDxfVHA+OjpfTV90eXBlKQ0KICAgICAgICAgd2hpbGUgKF9f
bi0tKSAqX19vKysgPSBfX2FbKl9faSsrXTsNCiAgICAgICBlbHNlDQogICAgICAgICB3aGlsZSAo
X19uLS0pIG5ldyAoX19vKyspIF9UcChfX2FbKl9faSsrXSk7DQogICAgIH0NCg0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQNCiAgICAgX192YWxhcnJheV9kZXN0
cm95X2VsZW1lbnRzKF9UcCogX19yZXN0cmljdF9fIF9fYiwgX1RwKiBfX3Jlc3RyaWN0X18gX19l
KQ0KICAgICB7DQogICAgICAgaWYgKCFfX2lzX2Z1bmRhbWVudGFsPF9UcD46Ol9NX3R5cGUpDQog
ICAgICAgICB3aGlsZSAoX19iICE9IF9fZSkgeyBfX2ItPn5fVHAoKTsgKytfX2I7IH0NCiAgICAg
fQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgdm9pZA0KICAgICBf
X3ZhbGFycmF5X2ZpbGwgKF9UcCogX19yZXN0cmljdF9fIF9fYSwgc2l6ZV90IF9fbiwgY29uc3Qg
X1RwJiBfX3QpDQogICAgIHsgd2hpbGUgKF9fbi0tKSAqX19hKysgPSBfX3Q7IH0NCg0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQNCiAgICAgX192YWxhcnJheV9m
aWxsIChfVHAqIF9fcmVzdHJpY3RfXyBfX2EsIHNpemVfdCBfX24sDQogICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IF9fcywgY29uc3QgX1RwJiBfX3QpDQogICAgIHsgZm9yIChzaXplX3QgX19p
PTA7IF9faTxfX247ICsrX19pLCBfX2ErPV9fcykgKl9fYSA9IF9fdDsgfQ0KDQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgdm9pZA0KICAgICBfX3ZhbGFycmF5X2ZpbGwo
X1RwKiBfX3Jlc3RyaWN0X18gX19hLCBjb25zdCBzaXplX3QqIF9fcmVzdHJpY3RfXyBfX2ksDQog
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBjb25zdCBfVHAmIF9fdCkNCiAgICAgeyBm
b3IgKHNpemVfdCBfX2o9MDsgX19qPF9fbjsgKytfX2osICsrX19pKSBfX2FbKl9faV0gPSBfX3Q7
IH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBib29sPg0KICAgICBzdHJ1Y3QgX0Fy
cmF5X2NvcGllcg0KICAgICB7DQogICAgICAgaW5saW5lIHN0YXRpYyB2b2lkDQogICAgICAgX1Nf
ZG9faXQoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBzaXplX3QgX19uLCBfVHAqIF9fcmVz
dHJpY3RfXyBfX2IpDQogICAgICAgeyB3aGlsZSAoX19uLS0pICpfX2IrKyA9ICpfX2ErKzsgfQ0K
ICAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgc3RydWN0IF9BcnJheV9j
b3BpZXI8X1RwLCB0cnVlPg0KICAgICB7DQogICAgICAgaW5saW5lIHN0YXRpYyB2b2lkDQogICAg
ICAgX1NfZG9faXQoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBzaXplX3QgX19uLCBfVHAq
IF9fcmVzdHJpY3RfXyBfX2IpDQogICAgICAgeyBtZW1jcHkgKF9fYiwgX19hLCBfX24gKiBzaXpl
b2YgKF9UcCkpOyB9DQogICAgIH07DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAg
IGlubGluZSB2b2lkDQogICAgIF9fdmFsYXJyYXlfY29weShjb25zdCBfVHAqIF9fcmVzdHJpY3Rf
XyBfX2EsIHNpemVfdCBfX24sDQogICAgICAgICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3RyaWN0
X18gX19iKQ0KICAgICB7DQogICAgICAgX0FycmF5X2NvcGllcjxfVHAsIF9faXNfZnVuZGFtZW50
YWw8X1RwPjo6X01fdHlwZT46Og0KICAgICAgICAgX1NfZG9faXQoX19hLCBfX24sIF9fYik7DQog
ICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQNCiAg
ICAgX192YWxhcnJheV9jb3B5KGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYSwgc2l6ZV90IF9f
biwgc2l6ZV90IF9fcywNCiAgICAgICAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdHJpY3RfXyBf
X2IpDQogICAgIHsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK19fYiwgX19h
ICs9IF9fcykgKl9fYiA9ICpfX2E7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAg
ICAgaW5saW5lIHZvaWQNCiAgICAgX192YWxhcnJheV9jb3B5KGNvbnN0IF9UcCogX19yZXN0cmlj
dF9fIF9fYSwgX1RwKiBfX3Jlc3RyaWN0X18gX19iLA0KICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX24sIHNpemVfdCBfX3MpDQogICAgIHsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247
ICsrX19pLCArK19fYSwgX19iKz1fX3MpICpfX2IgPSAqX19hOyB9DQoNCg0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQNCiAgICAgX192YWxhcnJheV9jb3B5KGNv
bnN0IF9UcCogX19yZXN0cmljdF9fIF9fc3JjLCBzaXplX3QgX19uLCBzaXplX3QgX19zMSwNCiAg
ICAgICAgICAgICAgICAgICAgIF9UcCogX19yZXN0cmljdF9fIF9fZHN0LCBzaXplX3QgX19zMikN
CiAgICAgew0KICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpDQog
ICAgICAgICBfX2RzdFtfX2kgKiBfX3MyXSA9IF9fc3JjIFsgX19pICogX19zMV07DQogICAgIH0N
Cg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgdm9pZA0KICAgICBf
X3ZhbGFycmF5X2NvcHkgKGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYSwNCiAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzaXplX3QqIF9fcmVzdHJpY3RfXyBfX2ksDQogICAgICAgICAgICAg
ICAgICAgICAgX1RwKiBfX3Jlc3RyaWN0X18gX19iLCBzaXplX3QgX19uKQ0KICAgICB7IGZvciAo
c2l6ZV90IF9faj0wOyBfX2o8X19uOyArK19faiwgKytfX2IsICsrX19pKSAqX19iID0gX19hWypf
X2ldOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgIGlubGluZSB2b2lkDQog
ICAgIF9fdmFsYXJyYXlfY29weSAoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBzaXplX3Qg
X19uLA0KICAgICAgICAgICAgICAgICAgICAgIF9UcCogX19yZXN0cmljdF9fIF9fYiwgY29uc3Qg
c2l6ZV90KiBfX3Jlc3RyaWN0X18gX19pKQ0KICAgICB7IGZvciAoc2l6ZV90IF9faj0wOyBfX2o8
X19uOyArK19faiwgKytfX2EsICsrX19pKSBfX2JbKl9faV0gPSAqX19hOyB9DQoNCg0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQNCiAgICAgX192YWxhcnJheV9j
b3B5KGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fc3JjLCBzaXplX3QgX19uLA0KICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc2l6ZV90KiBfX3Jlc3RyaWN0X18gX19pLA0KICAgICAgICAgICAg
ICAgICAgICAgX1RwKiBfX3Jlc3RyaWN0X18gX19kc3QsIGNvbnN0IHNpemVfdCogX19yZXN0cmlj
dF9fIF9faikNCiAgICAgew0KICAgICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8IF9fbjsg
KytfX2spDQogICAgICAgICBfX2RzdFsqX19qKytdID0gX19zcmNbKl9faSsrXTsNCiAgICAgfQ0K
IyAzMDcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvdmFsYXJyYXlfYXJyYXkuaCIgMw0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgIGlubGluZSBfVHANCiAgICAgX192YWxhcnJheV9z
dW0oY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19mLCBjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBf
X2wpDQogICAgIHsNCiAgICAgICBfVHAgX19yID0gX1RwKCk7DQogICAgICAgd2hpbGUgKF9fZiAh
PSBfX2wpIF9fciArPSAqX19mKys7DQogICAgICAgcmV0dXJuIF9fcjsNCiAgICAgfQ0KDQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgX1RwDQogICAgIF9fdmFsYXJyYXlf
cHJvZHVjdChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2YsDQogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2wpDQogICAgIHsNCiAgICAgICBfVHAgX19y
ID0gX1RwKDEpOw0KICAgICAgIHdoaWxlIChfX2YgIT0gX19sKSBfX3IgPSBfX3IgKiAqX19mKys7
DQogICAgICAgcmV0dXJuIF9fcjsNCiAgICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rh
Pg0KICAgICBpbmxpbmUgdHlwZW5hbWUgX1RhOjp2YWx1ZV90eXBlDQogICAgIF9fdmFsYXJyYXlf
bWluKGNvbnN0IF9UYSYgX19hKQ0KICAgICB7DQogICAgICAgc2l6ZV90IF9fcyA9IF9fYS5zaXpl
KCk7DQogICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVGE6OnZhbHVlX3R5cGUgX1ZhbHVlX3R5cGU7
DQogICAgICAgX1ZhbHVlX3R5cGUgX19yID0gX19zID09IDAgPyBfVmFsdWVfdHlwZSgpIDogX19h
WzBdOw0KICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDE7IF9faSA8IF9fczsgKytfX2kpDQogICAg
ICAgICB7DQogICAgICAgICAgIF9WYWx1ZV90eXBlIF9fdCA9IF9fYVtfX2ldOw0KICAgICAgICAg
ICBpZiAoX190IDwgX19yKQ0KICAgICAgICAgICAgIF9fciA9IF9fdDsNCiAgICAgICAgIH0NCiAg
ICAgICByZXR1cm4gX19yOw0KICAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RhPg0KICAg
ICBpbmxpbmUgdHlwZW5hbWUgX1RhOjp2YWx1ZV90eXBlDQogICAgIF9fdmFsYXJyYXlfbWF4KGNv
bnN0IF9UYSYgX19hKQ0KICAgICB7DQogICAgICAgc2l6ZV90IF9fcyA9IF9fYS5zaXplKCk7DQog
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVGE6OnZhbHVlX3R5cGUgX1ZhbHVlX3R5cGU7DQogICAg
ICAgX1ZhbHVlX3R5cGUgX19yID0gX19zID09IDAgPyBfVmFsdWVfdHlwZSgpIDogX19hWzBdOw0K
ICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDE7IF9faSA8IF9fczsgKytfX2kpDQogICAgICAgICB7
DQogICAgICAgICAgIF9WYWx1ZV90eXBlIF9fdCA9IF9fYVtfX2ldOw0KICAgICAgICAgICBpZiAo
X190ID4gX19yKQ0KICAgICAgICAgICAgIF9fciA9IF9fdDsNCiAgICAgICAgIH0NCiAgICAgICBy
ZXR1cm4gX19yOw0KICAgICB9DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
Pg0KICAgICBzdHJ1Y3QgX0FycmF5DQogICAgIHsNCiAgICAgICBleHBsaWNpdCBfQXJyYXkgKHNp
emVfdCk7DQogICAgICAgZXhwbGljaXQgX0FycmF5IChfVHAqIGNvbnN0IF9fcmVzdHJpY3RfXyk7
DQogICAgICAgZXhwbGljaXQgX0FycmF5IChjb25zdCB2YWxhcnJheTxfVHA+Jik7DQogICAgICAg
X0FycmF5IChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXywgc2l6ZV90KTsNCg0KICAgICAgIF9UcCog
YmVnaW4gKCkgY29uc3Q7DQoNCiAgICAgICBfVHAqIGNvbnN0IF9fcmVzdHJpY3RfXyBfTV9kYXRh
Ow0KICAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQN
CiAgICAgX192YWxhcnJheV9maWxsIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIGNvbnN0
IF9UcCYgX190KQ0KICAgICB7IF9fdmFsYXJyYXlfZmlsbCAoX19hLl9NX2RhdGEsIF9fbiwgX190
KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQNCiAgICAg
X192YWxhcnJheV9maWxsIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3Ms
IGNvbnN0IF9UcCYgX190KQ0KICAgICB7IF9fdmFsYXJyYXlfZmlsbCAoX19hLl9NX2RhdGEsIF9f
biwgX19zLCBfX3QpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUg
dm9pZA0KICAgICBfX3ZhbGFycmF5X2ZpbGwgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVf
dD4gX19pLA0KICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190
KQ0KICAgICB7IF9fdmFsYXJyYXlfZmlsbCAoX19hLl9NX2RhdGEsIF9faS5fTV9kYXRhLCBfX24s
IF9fdCk7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQN
CiAgICAgX192YWxhcnJheV9jb3B5KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5
PF9UcD4gX19iKQ0KICAgICB7IF9fdmFsYXJyYXlfY29weShfX2EuX01fZGF0YSwgX19uLCBfX2Iu
X01fZGF0YSk7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZv
aWQNCiAgICAgX192YWxhcnJheV9jb3B5KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgc2l6
ZV90IF9fcywgX0FycmF5PF9UcD4gX19iKQ0KICAgICB7IF9fdmFsYXJyYXlfY29weShfX2EuX01f
ZGF0YSwgX19uLCBfX3MsIF9fYi5fTV9kYXRhKTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPg0KICAgICBpbmxpbmUgdm9pZA0KICAgICBfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4g
X19hLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24sIHNpemVfdCBfX3MpDQogICAgIHsgX192
YWxhcnJheV9jb3B5KF9fYS5fTV9kYXRhLCBfX2IuX01fZGF0YSwgX19uLCBfX3MpOyB9DQoNCg0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lIHZvaWQNCiAgICAgX192YWxh
cnJheV9jb3B5KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgc2l6ZV90IF9fczEsDQogICAg
ICAgICAgICAgICAgICAgICBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX3MyKQ0KICAgICB7IF9f
dmFsYXJyYXlfY29weShfX2EuX01fZGF0YSwgX19uLCBfX3MxLCBfX2IuX01fZGF0YSwgX19zMik7
IH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgdm9pZA0KICAg
ICBfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksDQog
ICAgICAgICAgICAgICAgICAgICAgX0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKQ0KICAgICB7
IF9fdmFsYXJyYXlfY29weShfX2EuX01fZGF0YSwgX19pLl9NX2RhdGEsIF9fYi5fTV9kYXRhLCBf
X24pOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgIGlubGluZSB2b2lkDQog
ICAgIF9fdmFsYXJyYXlfY29weShfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxf
VHA+IF9fYiwNCiAgICAgICAgICAgICAgICAgICAgICBfQXJyYXk8c2l6ZV90PiBfX2kpDQogICAg
IHsgX192YWxhcnJheV9jb3B5KF9fYS5fTV9kYXRhLCBfX24sIF9fYi5fTV9kYXRhLCBfX2kuX01f
ZGF0YSk7IH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgdm9p
ZA0KICAgICBfX3ZhbGFycmF5X2NvcHkoX0FycmF5PF9UcD4gX19zcmMsIHNpemVfdCBfX24sIF9B
cnJheTxzaXplX3Q+IF9faSwNCiAgICAgICAgICAgICAgICAgICAgIF9BcnJheTxfVHA+IF9fZHN0
LCBfQXJyYXk8c2l6ZV90PiBfX2opDQogICAgIHsNCiAgICAgICBfX3ZhbGFycmF5X2NvcHkoX19z
cmMuX01fZGF0YSwgX19uLCBfX2kuX01fZGF0YSwNCiAgICAgICAgICAgICAgICAgICAgICAgX19k
c3QuX01fZGF0YSwgX19qLl9NX2RhdGEpOw0KICAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPg0KICAgICBpbmxpbmUNCiAgICAgX0FycmF5PF9UcD46Ol9BcnJheSAoc2l6ZV90IF9fbikN
CiAgICAgICA6IF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9fbikpDQogICAg
IHsgX192YWxhcnJheV9kZWZhdWx0X2NvbnN0cnVjdChfTV9kYXRhLCBfTV9kYXRhICsgX19uKTsg
fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lDQogICAgIF9BcnJheTxf
VHA+OjpfQXJyYXkgKF9UcCogY29uc3QgX19yZXN0cmljdF9fIF9fcCkgOiBfTV9kYXRhIChfX3Ap
IHt9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgX0FycmF5PF9UcD46
Ol9BcnJheSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KQ0KICAgICAgICAgOiBfTV9kYXRhIChf
X3YuX01fZGF0YSkge30NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgIGlubGluZQ0K
ICAgICBfQXJyYXk8X1RwPjo6X0FycmF5IChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2IsIHNp
emVfdCBfX3MpDQogICAgICAgOiBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihf
X3MpKQ0KICAgICB7IF9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX19iLCBfX3MsIF9NX2RhdGEp
OyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgX1RwKg0KICAgICBf
QXJyYXk8X1RwPjo6YmVnaW4gKCkgY29uc3QNCiAgICAgeyByZXR1cm4gX01fZGF0YTsgfQ0KIyA2
MDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvdmFsYXJyYXlfYXJyYXkuaCIgMw0KICAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX3BsdXMgKF9B
cnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgY29uc3QgX1RwJiBfX3QpIHsgZm9yIChfVHAqIF9f
cD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3ApICpfX3AgKz0gX190OyB9
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9wbHVz
IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9f
cCA9IF9fYS5fTV9kYXRhOyBmb3IgKF9UcCogX19xPV9fYi5fTV9kYXRhOyBfX3E8X19iLl9NX2Rh
dGErX19uOyArK19fcCwgKytfX3EpICpfX3AgKz0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9wbHVzIChfQXJyYXk8X1RwPiBf
X2EsIGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IF9UcCogX19wIChf
X2EuX01fZGF0YSk7IGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwgKytfX3ApICpf
X3AgKz0gX19lW19faV07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJy
YXlfYXVnbWVudGVkX3BsdXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgc2l6ZV90IF9f
cywgX0FycmF5PF9UcD4gX19iKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1RwKiBf
X3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX3MqX19uOyBfX3ArPV9fcywgKytfX3Ep
ICpfX3AgKz0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJh
eV9hdWdtZW50ZWRfcGx1cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVf
dCBfX24sIHNpemVfdCBfX3MpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChfVHAqIF9f
cD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3AsIF9fcSs9X19zKSAqX19w
ICs9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJh
eV9hdWdtZW50ZWRfcGx1cyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19zLCBjb25zdCBfRXhw
cjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBm
b3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksIF9fcCs9X19zKSAqX19wICs9IF9fZVtf
X2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRl
ZF9wbHVzIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwgX0FycmF5PF9UcD4g
X19iLCBzaXplX3QgX19uKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoc2l6ZV90KiBf
X2o9X19pLl9NX2RhdGE7IF9fajxfX2kuX01fZGF0YStfX247ICsrX19qLCArK19fcSkgX19hLl9N
X2RhdGFbKl9fal0gKz0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lk
IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJy
YXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9faSkgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEp
OyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19uOyArK19f
aiwgKytfX3ApICpfX3AgKz0gX19iLl9NX2RhdGFbKl9fal07IH0gdGVtcGxhdGU8dHlwZW5hbWUg
X1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX0FycmF5PF9UcD4g
X19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksIGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6
ZV90IF9fbikgeyBzaXplX3QqIF9faiAoX19pLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2s9MDsg
X19rPF9fbjsgKytfX2ssICsrX19qKSBfX2EuX01fZGF0YVsqX19qXSArPSBfX2VbX19rXTsgfSB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9wbHVzIChfQXJyYXk8
X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20sIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikg
eyBib29sKiBvayAoX19tLl9NX2RhdGEpOyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKF9U
cCogX19xPV9fYi5fTV9kYXRhOyBfX3E8X19iLl9NX2RhdGErX19uOyArK19fcSwgKytvaywgKytf
X3ApIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19wOyB9ICpfX3AgKz0gKl9fcTsgfSB9IHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3BsdXMgKF9BcnJheTxf
VHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8Ym9vbD4gX19tKSB7
IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1Rw
KiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wLCArK29rLCArK19f
cSkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3E7IH0gKl9fcCArPSAqX19xOyB9IH0gdGVt
cGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfcGx1
cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBjb25zdCBfRXhwcjxfRG9tLCBf
VHA+JiBfX2UsIHNpemVfdCBfX24pIHsgYm9vbCogb2soX19tLl9NX2RhdGEpOyBfVHAqIF9fcCAo
X19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksICsrb2ssICsr
X19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAqX19wICs9IF9fZVtfX2ldOyB9
IH0NCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRl
ZF9taW51cyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBjb25zdCBfVHAmIF9fdCkgeyBm
b3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyArK19fcCkgKl9f
cCAtPSBfX3Q7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVn
bWVudGVkX21pbnVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9f
YikgeyBfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBmb3IgKF9UcCogX19xPV9fYi5fTV9kYXRhOyBf
X3E8X19iLl9NX2RhdGErX19uOyArK19fcCwgKytfX3EpICpfX3AgLT0gKl9fcTsgfSB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9taW51cyAo
X0FycmF5PF9UcD4gX19hLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikg
eyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytf
X2ksICsrX19wKSAqX19wIC09IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5s
aW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9taW51cyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3Qg
X19uLCBzaXplX3QgX19zLCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRh
KTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fcypfX247IF9f
cCs9X19zLCArK19fcSkgKl9fcCAtPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5s
aW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9taW51cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8
X1RwPiBfX2IsIHNpemVfdCBfX24sIHNpemVfdCBfX3MpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRh
KTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3As
IF9fcSs9X19zKSAqX19wIC09ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBf
RG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90
IF9fcywgY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3Ag
KF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9f
cykgKl9fcCAtPSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lk
IF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4g
X19pLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRh
KTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9kYXRhK19fbjsgKytf
X2osICsrX19xKSBfX2EuX01fZGF0YVsqX19qXSAtPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9taW51cyAoX0FycmF5PF9UcD4gX19h
LCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9faSkgeyBfVHAq
IF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19p
Ll9NX2RhdGErX19uOyArK19faiwgKytfX3ApICpfX3AgLT0gX19iLl9NX2RhdGFbKl9fal07IH0g
dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRf
bWludXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhwcjxf
RG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsg
Zm9yIChzaXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFbKl9f
al0gLT0gX19lW19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdt
ZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgX0FycmF5PF9U
cD4gX19iLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9UcCogX19wIChf
X2EuX01fZGF0YSk7IGZvciAoX1RwKiBfX3E9X19iLl9NX2RhdGE7IF9fcTxfX2IuX01fZGF0YStf
X247ICsrX19xLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0g
Kl9fcCAtPSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdt
ZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19i
LCBfQXJyYXk8Ym9vbD4gX19tKSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9UcCogX19xIChf
X2IuX01fZGF0YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStf
X247ICsrX19wLCArK29rLCArK19fcSkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3E7IH0g
Kl9fcCAtPSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lk
IF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9f
bSwgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rKF9f
bS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9f
aTxfX247ICsrX19pLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7
IH0gKl9fcCAtPSBfX2VbX19pXTsgfSB9DQogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu
ZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX0FycmF5PF9UcD4gX19hLCBzaXpl
X3QgX19uLCBjb25zdCBfVHAmIF9fdCkgeyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8
X19hLl9NX2RhdGErX19uOyArK19fcCkgKl9fcCAqPSBfX3Q7IH0gdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxfVHA+
IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iKSB7IF9UcCogX19wID0gX19hLl9NX2Rh
dGE7IGZvciAoX1RwKiBfX3E9X19iLl9NX2RhdGE7IF9fcTxfX2IuX01fZGF0YStfX247ICsrX19w
LCArK19fcSkgKl9fcCAqPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0Rv
bT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxfVHA+IF9fYSwgY29u
c3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9fYS5fTV9k
YXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK19fcCkgKl9fcCAqPSBf
X2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdt
ZW50ZWRfbXVsdGlwbGllcyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBzaXplX3QgX19z
LCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChfVHAqIF9f
cD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fcypfX247IF9fcCs9X19zLCArK19fcSkg
Kl9fcCAqPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5
X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxfVHA+IF9fYiwg
c2l6ZV90IF9fbiwgc2l6ZV90IF9fcykgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9U
cCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyArK19fcCwgX19xKz1fX3Mp
ICpfX3AgKj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQg
X0FycmF5X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX3Ms
IGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IF9UcCogX19wIChfX2Eu
X01fZGF0YSk7IGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwgX19wKz1fX3MpICpf
X3AgKj0gX19lW19faV07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJy
YXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4g
X19pLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRh
KTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9kYXRhK19fbjsgKytf
X2osICsrX19xKSBfX2EuX01fZGF0YVsqX19qXSAqPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1Rw
PiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5PHNpemVfdD4gX19pKSB7
IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9f
ajxfX2kuX01fZGF0YStfX247ICsrX19qLCArK19fcCkgKl9fcCAqPSBfX2IuX01fZGF0YVsqX19q
XTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21l
bnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwgY29u
c3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IHNpemVfdCogX19qIChfX2ku
X01fZGF0YSk7IGZvciAoc2l6ZV90IF9faz0wOyBfX2s8X19uOyArK19faywgKytfX2opIF9fYS5f
TV9kYXRhWypfX2pdICo9IF9fZVtfX2tdOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBf
QXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+
IF9fbSwgX0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rIChfX20uX01fZGF0
YSk7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoX1RwKiBfX3E9X19iLl9NX2RhdGE7IF9f
cTxfX2IuX01fZGF0YStfX247ICsrX19xLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsg
KytvazsgKytfX3A7IH0gKl9fcCAqPSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2
b2lkIF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3Qg
X19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxib29sPiBfX20pIHsgYm9vbCogb2sgKF9fbS5f
TV9kYXRhKTsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0
YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3AsICsrb2ssICsrX19xKSB7IHdoaWxlICghICpv
aykgeyArK29rOyArK19fcTsgfSAqX19wICo9ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8
X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20sIGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwg
c2l6ZV90IF9fbikgeyBib29sKiBvayhfX20uX01fZGF0YSk7IF9UcCogX19wIChfX2EuX01fZGF0
YSk7IGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwgKytvaywgKytfX3ApIHsgd2hp
bGUgKCEgKm9rKSB7ICsrb2s7ICsrX19wOyB9ICpfX3AgKj0gX19lW19faV07IH0gfQ0KICAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX2RpdmlkZXMg
KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgY29uc3QgX1RwJiBfX3QpIHsgZm9yIChfVHAq
IF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3ApICpfX3AgLz0gX190
OyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9k
aXZpZGVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYikgeyBf
VHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBmb3IgKF9UcCogX19xPV9fYi5fTV9kYXRhOyBfX3E8X19i
Ll9NX2RhdGErX19uOyArK19fcCwgKytfX3EpICpfX3AgLz0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9kaXZpZGVzIChfQXJy
YXk8X1RwPiBfX2EsIGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IF9U
cCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwg
KytfX3ApICpfX3AgLz0gX19lW19faV07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUg
dm9pZCBfQXJyYXlfYXVnbWVudGVkX2RpdmlkZXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9f
biwgc2l6ZV90IF9fcywgX0FycmF5PF9UcD4gX19iKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7
IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX3MqX19uOyBfX3Ar
PV9fcywgKytfX3EpICpfX3AgLz0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu
ZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8
X1RwPiBfX2IsIHNpemVfdCBfX24sIHNpemVfdCBfX3MpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRh
KTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3As
IF9fcSs9X19zKSAqX19wIC89ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBf
RG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX0FycmF5PF9UcD4gX19hLCBzaXpl
X3QgX19zLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAqIF9f
cCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksIF9fcCs9
X19zKSAqX19wIC89IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZv
aWQgX0FycmF5X2F1Z21lbnRlZF9kaXZpZGVzIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXpl
X3Q+IF9faSwgX0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKSB7IF9UcCogX19xIChfX2IuX01f
ZGF0YSk7IGZvciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9fajxfX2kuX01fZGF0YStfX247
ICsrX19qLCArK19fcSkgX19hLl9NX2RhdGFbKl9fal0gLz0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX0FycmF5PF9U
cD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9faSkg
eyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBf
X2o8X19pLl9NX2RhdGErX19uOyArK19faiwgKytfX3ApICpfX3AgLz0gX19iLl9NX2RhdGFbKl9f
al07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdt
ZW50ZWRfZGl2aWRlcyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksIGNvbnN0
IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBzaXplX3QqIF9faiAoX19pLl9N
X2RhdGEpOyBmb3IgKHNpemVfdCBfX2s9MDsgX19rPF9fbjsgKytfX2ssICsrX19qKSBfX2EuX01f
ZGF0YVsqX19qXSAvPSBfX2VbX19rXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0Fy
cmF5X2F1Z21lbnRlZF9kaXZpZGVzIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20s
IF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBib29sKiBvayAoX19tLl9NX2RhdGEpOyBf
VHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKF9UcCogX19xPV9fYi5fTV9kYXRhOyBfX3E8X19i
Ll9NX2RhdGErX19uOyArK19fcSwgKytvaywgKytfX3ApIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7
ICsrX19wOyB9ICpfX3AgLz0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBf
QXJyYXlfYXVnbWVudGVkX2RpdmlkZXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0Fy
cmF5PF9UcD4gX19iLCBfQXJyYXk8Ym9vbD4gX19tKSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7
IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxf
X2EuX01fZGF0YStfX247ICsrX19wLCArK29rLCArK19fcSkgeyB3aGlsZSAoISAqb2spIHsgKytv
azsgKytfX3E7IH0gKl9fcCAvPSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFz
cyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX0FycmF5PF9UcD4gX19hLCBf
QXJyYXk8Ym9vbD4gX19tLCBjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24p
IHsgYm9vbCogb2soX19tLl9NX2RhdGEpOyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNp
emVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykg
eyArK29rOyArK19fcDsgfSAqX19wIC89IF9fZVtfX2ldOyB9IH0NCiAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9tb2R1bHVzIChfQXJyYXk8X1Rw
PiBfX2EsIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KSB7IGZvciAoX1RwKiBfX3A9X19hLl9N
X2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wKSAqX19wICU9IF9fdDsgfSB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX0Fy
cmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3AgPSBf
X2EuX01fZGF0YTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19f
bjsgKytfX3AsICsrX19xKSAqX19wICU9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBj
bGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX0FycmF5PF9UcD4gX19h
LCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcCAoX19h
Ll9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksICsrX19wKSAqX19w
ICU9IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5
X2F1Z21lbnRlZF9tb2R1bHVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBf
X3MsIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9UcCog
X19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19zKl9fbjsgX19wKz1fX3MsICsrX19x
KSAqX19wICU9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJy
YXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PF9UcD4gX19iLCBz
aXplX3QgX19uLCBzaXplX3QgX19zKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1Rw
KiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wLCBfX3ErPV9fcykg
Kl9fcCAlPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBf
QXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcywgY29u
c3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9fYS5fTV9k
YXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9fcykgKl9fcCAl
PSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9h
dWdtZW50ZWRfbW9kdWx1cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksIF9B
cnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3Ig
KHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19uOyArK19faiwgKytf
X3EpIF9fYS5fTV9kYXRhWypfX2pdICU9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBp
bmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6
ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8c2l6ZV90PiBfX2kpIHsgX1RwKiBfX3Ag
KF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9k
YXRhK19fbjsgKytfX2osICsrX19wKSAqX19wICU9IF9fYi5fTV9kYXRhWypfX2pdOyB9IHRlbXBs
YXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX21vZHVs
dXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhwcjxfRG9t
LCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsgZm9y
IChzaXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFbKl9fal0g
JT0gX19lW19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50
ZWRfbW9kdWx1cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBfQXJyYXk8X1Rw
PiBfX2IsIHNpemVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9f
YS5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19f
bjsgKytfX3EsICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAq
X19wICU9ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0FycmF5X2F1Z21l
bnRlZF9tb2R1bHVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9f
YiwgX0FycmF5PGJvb2w+IF9fbSkgeyBib29sKiBvayAoX19tLl9NX2RhdGEpOyBfVHAqIF9fcSAo
X19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGEr
X19uOyArK19fcCwgKytvaywgKytfX3EpIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19xOyB9
ICpfX3AgJT0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9p
ZCBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+
IF9fbSwgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IGJvb2wqIG9r
KF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7
IF9faTxfX247ICsrX19pLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytf
X3A7IH0gKl9fcCAlPSBfX2VbX19pXTsgfSB9DQogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlu
bGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfeG9yIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBf
X24sIGNvbnN0IF9UcCYgX190KSB7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2Eu
X01fZGF0YStfX247ICsrX19wKSAqX19wIF49IF9fdDsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfeG9yIChfQXJyYXk8X1RwPiBfX2EsIHNpemVf
dCBfX24sIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBmb3IgKF9U
cCogX19xPV9fYi5fTV9kYXRhOyBfX3E8X19iLl9NX2RhdGErX19uOyArK19fcCwgKytfX3EpICpf
X3AgXj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0Fy
cmF5X2F1Z21lbnRlZF94b3IgKF9BcnJheTxfVHA+IF9fYSwgY29uc3QgX0V4cHI8X0RvbSxfVHA+
JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3Qg
X19pPTA7IF9faTxfX247ICsrX19pLCArK19fcCkgKl9fcCBePSBfX2VbX19pXTsgfSB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfeG9yIChfQXJyYXk8
X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3MsIF9BcnJheTxfVHA+IF9fYikgeyBfVHAq
IF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9N
X2RhdGErX19zKl9fbjsgX19wKz1fX3MsICsrX19xKSAqX19wIF49ICpfX3E7IH0gdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX3hvciAoX0FycmF5PF9U
cD4gX19hLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24sIHNpemVfdCBfX3MpIHsgX1RwKiBf
X3EgKF9fYi5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9k
YXRhK19fbjsgKytfX3AsIF9fcSs9X19zKSAqX19wIF49ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5h
bWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfeG9yIChfQXJyYXk8X1Rw
PiBfX2EsIHNpemVfdCBfX3MsIGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lLCBzaXplX3QgX19u
KSB7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19uOyAr
K19faSwgX19wKz1fX3MpICpfX3AgXj0gX19lW19faV07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX3hvciAoX0FycmF5PF9UcD4gX19hLCBfQXJy
YXk8c2l6ZV90PiBfX2ksIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcSAo
X19iLl9NX2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2Rh
dGErX19uOyArK19faiwgKytfX3EpIF9fYS5fTV9kYXRhWypfX2pdIF49ICpfX3E7IH0gdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX3hvciAoX0FycmF5
PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9f
aSkgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRh
OyBfX2o8X19pLl9NX2RhdGErX19uOyArK19faiwgKytfX3ApICpfX3AgXj0gX19iLl9NX2RhdGFb
Kl9fal07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9h
dWdtZW50ZWRfeG9yIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwgY29uc3Qg
X0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IHNpemVfdCogX19qIChfX2kuX01f
ZGF0YSk7IGZvciAoc2l6ZV90IF9faz0wOyBfX2s8X19uOyArK19faywgKytfX2opIF9fYS5fTV9k
YXRhWypfX2pdIF49IF9fZVtfX2tdOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBfQXJy
YXlfYXVnbWVudGVkX3hvciAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBfQXJy
YXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBf
X3AgKF9fYS5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9k
YXRhK19fbjsgKytfX3EsICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19f
cDsgfSAqX19wIF49ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0FycmF5
X2F1Z21lbnRlZF94b3IgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4g
X19iLCBfQXJyYXk8Ym9vbD4gX19tKSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9UcCogX19x
IChfX2IuX01fZGF0YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0
YStfX247ICsrX19wLCArK29rLCArK19fcSkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3E7
IH0gKl9fcCBePSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2
b2lkIF9BcnJheV9hdWdtZW50ZWRfeG9yIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxib29sPiBf
X20sIGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBib29sKiBvayhf
X20uX01fZGF0YSk7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90IF9faT0wOyBf
X2k8X19uOyArK19faSwgKytvaywgKytfX3ApIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19w
OyB9ICpfX3AgXj0gX19lW19faV07IH0gfQ0KICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxp
bmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX29yIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24s
IGNvbnN0IF9UcCYgX190KSB7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01f
ZGF0YStfX247ICsrX19wKSAqX19wIHw9IF9fdDsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlu
bGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfb3IgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9f
biwgX0FycmF5PF9UcD4gX19iKSB7IF9UcCogX19wID0gX19hLl9NX2RhdGE7IGZvciAoX1RwKiBf
X3E9X19iLl9NX2RhdGE7IF9fcTxfX2IuX01fZGF0YStfX247ICsrX19wLCArK19fcSkgKl9fcCB8
PSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlf
YXVnbWVudGVkX29yIChfQXJyYXk8X1RwPiBfX2EsIGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19l
LCBzaXplX3QgX19uKSB7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90IF9faT0w
OyBfX2k8X19uOyArK19faSwgKytfX3ApICpfX3AgfD0gX19lW19faV07IH0gdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX29yIChfQXJyYXk8X1RwPiBf
X2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3MsIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcSAo
X19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGEr
X19zKl9fbjsgX19wKz1fX3MsICsrX19xKSAqX19wIHw9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX29yIChfQXJyYXk8X1RwPiBfX2Es
IF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbiwgc2l6ZV90IF9fcykgeyBfVHAqIF9fcSAoX19i
Ll9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19u
OyArK19fcCwgX19xKz1fX3MpICpfX3AgfD0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs
IGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9vciAoX0FycmF5PF9UcD4gX19hLCBz
aXplX3QgX19zLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAq
IF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksIF9f
cCs9X19zKSAqX19wIHw9IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5l
IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9vciAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90
PiBfX2ksIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcSAoX19iLl9NX2Rh
dGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19uOyAr
K19faiwgKytfX3EpIF9fYS5fTV9kYXRhWypfX2pdIHw9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX29yIChfQXJyYXk8X1RwPiBfX2Es
IHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5PHNpemVfdD4gX19pKSB7IF9UcCog
X19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9fajxfX2ku
X01fZGF0YStfX247ICsrX19qLCArK19fcCkgKl9fcCB8PSBfX2IuX01fZGF0YVsqX19qXTsgfSB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9v
ciAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksIGNvbnN0IF9FeHByPF9Eb20s
IF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBzaXplX3QqIF9faiAoX19pLl9NX2RhdGEpOyBmb3Ig
KHNpemVfdCBfX2s9MDsgX19rPF9fbjsgKytfX2ssICsrX19qKSBfX2EuX01fZGF0YVsqX19qXSB8
PSBfX2VbX19rXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0FycmF5X2F1Z21lbnRl
ZF9vciAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBfQXJyYXk8X1RwPiBfX2Is
IHNpemVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9k
YXRhKTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsgKytf
X3EsICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAqX19wIHw9
ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9v
ciAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxi
b29sPiBfX20pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3EgKF9fYi5fTV9kYXRh
KTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3As
ICsrb2ssICsrX19xKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcTsgfSAqX19wIHw9ICpf
X3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1
Z21lbnRlZF9vciAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBjb25zdCBfRXhw
cjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgYm9vbCogb2soX19tLl9NX2RhdGEpOyBf
VHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ks
ICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAqX19wIHw9IF9f
ZVtfX2ldOyB9IH0NCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5
X2F1Z21lbnRlZF9hbmQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgY29uc3QgX1RwJiBf
X3QpIHsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytf
X3ApICpfX3AgJj0gX190OyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0Fy
cmF5X2F1Z21lbnRlZF9hbmQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9U
cD4gX19iKSB7IF9UcCogX19wID0gX19hLl9NX2RhdGE7IGZvciAoX1RwKiBfX3E9X19iLl9NX2Rh
dGE7IF9fcTxfX2IuX01fZGF0YStfX247ICsrX19wLCArK19fcSkgKl9fcCAmPSAqX19xOyB9IHRl
bXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX2Fu
ZCAoX0FycmF5PF9UcD4gX19hLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9f
bikgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsg
KytfX2ksICsrX19wKSAqX19wICY9IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g
aW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9hbmQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90
IF9fbiwgc2l6ZV90IF9fcywgX0FycmF5PF9UcD4gX19iKSB7IF9UcCogX19xIChfX2IuX01fZGF0
YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX3MqX19uOyBf
X3ArPV9fcywgKytfX3EpICpfX3AgJj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlu
bGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfYW5kIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxf
VHA+IF9fYiwgc2l6ZV90IF9fbiwgc2l6ZV90IF9fcykgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEp
OyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyArK19fcCwg
X19xKz1fX3MpICpfX3AgJj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9E
b20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9hbmQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9f
cywgY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9f
YS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9fcykg
Kl9fcCAmPSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9B
cnJheV9hdWdtZW50ZWRfYW5kIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwg
X0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZv
ciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9fajxfX2kuX01fZGF0YStfX247ICsrX19qLCAr
K19fcSkgX19hLl9NX2RhdGFbKl9fal0gJj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfYW5kIChfQXJyYXk8X1RwPiBfX2EsIHNpemVf
dCBfX24sIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5PHNpemVfdD4gX19pKSB7IF9UcCogX19wIChf
X2EuX01fZGF0YSk7IGZvciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9fajxfX2kuX01fZGF0
YStfX247ICsrX19qLCArK19fcCkgKl9fcCAmPSBfX2IuX01fZGF0YVsqX19qXTsgfSB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9hbmQgKF9B
cnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhwcjxfRG9tLCBfVHA+
JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsgZm9yIChzaXpl
X3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFbKl9fal0gJj0gX19l
W19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfYW5k
IChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20sIF9BcnJheTxfVHA+IF9fYiwgc2l6
ZV90IF9fbikgeyBib29sKiBvayAoX19tLl9NX2RhdGEpOyBfVHAqIF9fcCAoX19hLl9NX2RhdGEp
OyBmb3IgKF9UcCogX19xPV9fYi5fTV9kYXRhOyBfX3E8X19iLl9NX2RhdGErX19uOyArK19fcSwg
KytvaywgKytfX3ApIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19wOyB9ICpfX3AgJj0gKl9f
cTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX2FuZCAo
X0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxib29s
PiBfX20pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsg
Zm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3AsICsr
b2ssICsrX19xKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcTsgfSAqX19wICY9ICpfX3E7
IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21l
bnRlZF9hbmQgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgY29uc3QgX0V4cHI8
X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rKF9fbS5fTV9kYXRhKTsgX1Rw
KiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCAr
K29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9fcCAmPSBfX2Vb
X19pXTsgfSB9DQogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9h
dWdtZW50ZWRfc2hpZnRfbGVmdCAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBjb25zdCBf
VHAmIF9fdCkgeyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19u
OyArK19fcCkgKl9fcCA8PD0gX190OyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZv
aWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBf
X24sIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBmb3IgKF9UcCog
X19xPV9fYi5fTV9kYXRhOyBfX3E8X19iLl9NX2RhdGErX19uOyArK19fcCwgKytfX3EpICpfX3Ag
PDw9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJh
eV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX0FycmF5PF9UcD4gX19hLCBjb25zdCBfRXhwcjxfRG9t
LF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNp
emVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksICsrX19wKSAqX19wIDw8PSBfX2VbX19pXTsgfSB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRf
bGVmdCAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBzaXplX3QgX19zLCBfQXJyYXk8X1Rw
PiBfX2IpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0
YTsgX19wPF9fYS5fTV9kYXRhK19fcypfX247IF9fcCs9X19zLCArK19fcSkgKl9fcCA8PD0gKl9f
cTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRf
c2hpZnRfbGVmdCAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24s
IHNpemVfdCBfX3MpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2Eu
X01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3AsIF9fcSs9X19zKSAqX19wIDw8PSAq
X19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVn
bWVudGVkX3NoaWZ0X2xlZnQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcywgY29uc3QgX0V4
cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsg
Zm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9fcykgKl9fcCA8PD0gX19l
W19faV07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVu
dGVkX3NoaWZ0X2xlZnQgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBfQXJy
YXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChz
aXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9kYXRhK19fbjsgKytfX2osICsrX19x
KSBfX2EuX01fZGF0YVsqX19qXSA8PD0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlu
bGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX0FycmF5PF9UcD4gX19hLCBz
aXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9faSkgeyBfVHAqIF9f
cCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9N
X2RhdGErX19uOyArK19faiwgKytfX3ApICpfX3AgPDw9IF9fYi5fTV9kYXRhWypfX2pdOyB9IHRl
bXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3No
aWZ0X2xlZnQgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhw
cjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRh
KTsgZm9yIChzaXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFb
Kl9fal0gPDw9IF9fZVtfX2tdOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBfQXJyYXlf
YXVnbWVudGVkX3NoaWZ0X2xlZnQgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwg
X0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9U
cCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoX1RwKiBfX3E9X19iLl9NX2RhdGE7IF9fcTxfX2Iu
X01fZGF0YStfX247ICsrX19xLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsg
KytfX3A7IH0gKl9fcCA8PD0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBf
QXJyYXlfYXVnbWVudGVkX3NoaWZ0X2xlZnQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwg
X0FycmF5PF9UcD4gX19iLCBfQXJyYXk8Ym9vbD4gX19tKSB7IGJvb2wqIG9rIChfX20uX01fZGF0
YSk7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9f
cDxfX2EuX01fZGF0YStfX247ICsrX19wLCArK29rLCArK19fcSkgeyB3aGlsZSAoISAqb2spIHsg
KytvazsgKytfX3E7IH0gKl9fcCA8PD0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg
Y2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X2xlZnQgKF9BcnJheTxfVHA+
IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXpl
X3QgX19uKSB7IGJvb2wqIG9rKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsg
Zm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK29rLCArK19fcCkgeyB3aGlsZSAo
ISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9fcCA8PD0gX19lW19faV07IH0gfQ0KICAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0
IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KSB7IGZvciAoX1Rw
KiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wKSAqX19wID4+PSBf
X3Q7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVk
X3NoaWZ0X3JpZ2h0IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9f
YikgeyBfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBmb3IgKF9UcCogX19xPV9fYi5fTV9kYXRhOyBf
X3E8X19iLl9NX2RhdGErX19uOyArK19fcCwgKytfX3EpICpfX3AgPj49ICpfX3E7IH0gdGVtcGxh
dGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRf
cmlnaHQgKF9BcnJheTxfVHA+IF9fYSwgY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVf
dCBfX24pIHsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxf
X247ICsrX19pLCArK19fcCkgKl9fcCA+Pj0gX19lW19faV07IH0gdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0IChfQXJyYXk8X1Rw
PiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3MsIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9f
cSAoX19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2Rh
dGErX19zKl9fbjsgX19wKz1fX3MsICsrX19xKSAqX19wID4+PSAqX19xOyB9IHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX0Fy
cmF5PF9UcD4gX19hLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24sIHNpemVfdCBfX3MpIHsg
X1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9f
YS5fTV9kYXRhK19fbjsgKytfX3AsIF9fcSs9X19zKSAqX19wID4+PSAqX19xOyB9IHRlbXBsYXRl
PHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3Jp
Z2h0IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX3MsIGNvbnN0IF9FeHByPF9Eb20sX1RwPiYg
X19lLCBzaXplX3QgX19uKSB7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90IF9f
aT0wOyBfX2k8X19uOyArK19faSwgX19wKz1fX3MpICpfX3AgPj49IF9fZVtfX2ldOyB9IHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdo
dCAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksIF9BcnJheTxfVHA+IF9fYiwg
c2l6ZV90IF9fbikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9f
aS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19uOyArK19faiwgKytfX3EpIF9fYS5fTV9kYXRh
WypfX2pdID4+PSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0Fy
cmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBf
QXJyYXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9faSkgeyBfVHAqIF9fcCAoX19hLl9NX2Rh
dGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19uOyAr
K19faiwgKytfX3ApICpfX3AgPj49IF9fYi5fTV9kYXRhWypfX2pdOyB9IHRlbXBsYXRlPHR5cGVu
YW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0IChf
QXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwgY29uc3QgX0V4cHI8X0RvbSwgX1Rw
PiYgX19lLCBzaXplX3QgX19uKSB7IHNpemVfdCogX19qIChfX2kuX01fZGF0YSk7IGZvciAoc2l6
ZV90IF9faz0wOyBfX2s8X19uOyArK19faywgKytfX2opIF9fYS5fTV9kYXRhWypfX2pdID4+PSBf
X2VbX19rXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9z
aGlmdF9yaWdodCAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBfQXJyYXk8X1Rw
PiBfX2IsIHNpemVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9f
YS5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19f
bjsgKytfX3EsICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAq
X19wID4+PSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdt
ZW50ZWRfc2hpZnRfcmlnaHQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9U
cD4gX19iLCBfQXJyYXk8Ym9vbD4gX19tKSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9UcCog
X19xIChfX2IuX01fZGF0YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01f
ZGF0YStfX247ICsrX19wLCArK29rLCArK19fcSkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytf
X3E7IH0gKl9fcCA+Pj0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0Rv
bT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0IChfQXJyYXk8X1RwPiBfX2EsIF9B
cnJheTxib29sPiBfX20sIGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbikg
eyBib29sKiBvayhfX20uX01fZGF0YSk7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6
ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwgKytvaywgKytfX3ApIHsgd2hpbGUgKCEgKm9rKSB7
ICsrb2s7ICsrX19wOyB9ICpfX3AgPj49IF9fZVtfX2ldOyB9IH0NCg0KDQoNCn0NCg0KDQoNCiMg
MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJheV9hcnJheS50Y2MiIDEgMw0KIyAz
NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJheV9hcnJheS50Y2MiIDMNCm5hbWVz
cGFjZSBzdGQNCnsNCg0KIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCnZvaWQNCl9fdmFsYXJyYXlf
ZmlsbCAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8Ym9vbD4gX19tLCBjb25z
dCBfVHAmIF9fdCkNCnsNCiAgICBfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOw0KICAgIGJvb2wqIF9f
b2sgKF9fbS5fTV9kYXRhKTsNCiAgICBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ks
ICsrX19vaywgKytfX3ApIHsNCiAgICAgICAgd2hpbGUgKCEgKl9fb2spIHsNCiAgICAgICAgICAg
ICsrX19vazsNCiAgICAgICAgICAgICsrX19wOw0KICAgICAgICB9DQogICAgICAgICpfX3AgPSBf
X3Q7DQogICAgfQ0KfQ0KDQogdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0Kdm9pZA0KX192YWxhcnJh
eV9jb3B5IChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20sIF9BcnJheTxfVHA+IF9f
Yiwgc2l6ZV90IF9fbikNCnsNCiAgICBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOw0KICAgIGJvb2wq
IF9fb2sgKF9fbS5fTV9kYXRhKTsNCiAgICBmb3IgKF9UcCogX19xPV9fYi5fTV9kYXRhOyBfX3E8
X19iLl9NX2RhdGErX19uOyArK19fcSwgKytfX29rLCArK19fcCkgew0KICAgICAgICB3aGlsZSAo
ISAqX19vaykgew0KICAgICAgICAgICAgKytfX29rOw0KICAgICAgICAgICAgKytfX3A7DQogICAg
ICAgIH0NCiAgICAgICAgKl9fcSA9ICpfX3A7DQogICAgfQ0KfQ0KDQogdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPg0Kdm9pZA0KX192YWxhcnJheV9jb3B5IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBf
X24sIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5PGJvb2w+IF9fbSkNCnsNCiAgICBfVHAqIF9fcSAo
X19iLl9NX2RhdGEpOw0KICAgIGJvb2wqIF9fb2sgKF9fbS5fTV9kYXRhKTsNCiAgICBmb3IgKF9U
cCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyArK19fcCwgKytfX29rLCAr
K19fcSkgew0KICAgICAgICB3aGlsZSAoISAqX19vaykgew0KICAgICAgICAgICAgKytfX29rOw0K
ICAgICAgICAgICAgKytfX3E7DQogICAgICAgIH0NCiAgICAgICAgKl9fcSA9ICpfX3A7DQogICAg
fQ0KfQ0KDQogdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPg0Kdm9pZA0KX192YWxh
cnJheV9jb3B5IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24sIF9BcnJh
eTxfVHA+IF9fYSkNCnsNCiAgICBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOw0KICAgIGZvciAoc2l6
ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwgKytfX3ApICpfX3AgPSBfX2VbX19pXTsNCn0NCg0K
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4NCnZvaWQNCl9fdmFsYXJyYXlfY29w
eSAoY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uLA0KICAgICAgICAgICAg
ICAgICBfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX3MpDQp7DQogICAgX1RwKiBfX3AgKF9fYS5f
TV9kYXRhKTsNCiAgICBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksIF9fcCs9X19z
KSAqX19wID0gX19lW19faV07DQp9DQoNCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9E
b20+DQp2b2lkDQpfX3ZhbGFycmF5X2NvcHkgKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwg
c2l6ZV90IF9fbiwNCiAgICAgICAgICAgICAgICAgX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6
ZV90PiBfX2kpDQp7DQogICAgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsNCiAgICBmb3IgKHNp
emVfdCBfX2s9MDsgX19rPF9fbjsgKytfX2ssICsrX19qKSBfX2EuX01fZGF0YVsqX19qXSA9IF9f
ZVtfX2tdOw0KfQ0KDQogdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPg0Kdm9pZA0K
X192YWxhcnJheV9jb3B5IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24s
DQogICAgICAgICAgICAgICAgIF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSkNCnsN
CiAgICBib29sKiBfX29rIChfX20uX01fZGF0YSk7DQogICAgX1RwKiBfX3AgKF9fYS5fTV9kYXRh
KTsNCiAgICBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksICsrX19vaywgKytfX3Ap
IHsNCiAgICAgICAgd2hpbGUgKCEgKl9fb2spIHsNCiAgICAgICAgICAgICsrX19vazsNCiAgICAg
ICAgICAgICsrX19wOw0KICAgICAgICB9DQogICAgICAgICpfX3AgPSBfX2VbX19pXTsNCiAgICB9
DQp9DQoNCg0KIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4NCnZvaWQNCl9fdmFs
YXJyYXlfY29weV9jb25zdHJ1Y3QgKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90
IF9fbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BcnJheTxfVHA+IF9fYSkNCnsNCiAg
ICBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOw0KICAgIGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19u
OyArK19faSwgKytfX3ApIG5ldyAoX19wKSBfVHAoX19lW19faV0pOw0KfQ0KDQoNCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+DQp2b2lkDQpfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0IChfQXJyYXk8
X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBf
QXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pDQp7DQogICAgX1RwKiBfX3AgKF9fYS5fTV9kYXRh
KTsNCiAgICBib29sKiBfX29rIChfX20uX01fZGF0YSk7DQogICAgZm9yIChfVHAqIF9fcT1fX2Iu
X01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsgKytfX3EsICsrX19vaywgKytfX3ApIHsNCiAg
ICAgICAgd2hpbGUgKCEgKl9fb2spIHsNCiAgICAgICAgICAgICsrX19vazsNCiAgICAgICAgICAg
ICsrX19wOw0KICAgICAgICB9DQogICAgICAgIG5ldyAoX19xKSBfVHAoKl9fcCk7DQogICAgfQ0K
fQ0KDQoNCg0KDQp9DQojIDYyNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJheV9h
cnJheS5oIiAyIDMNCiMgOTQgIi91c3IvaW5jbHVkZS9jKysvMy4yL3ZhbGFycmF5IiAyIDMNCiMg
MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJheV9tZXRhLmgiIDEgMw0KIyA0MSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJheV9tZXRhLmgiIDMNCg0KbmFtZXNwYWNl
IHN0ZA0Kew0KIyA1NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJheV9tZXRhLmgi
IDMNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPiBjbGFzcyBfQ29u
c3RhbnQ7DQoNCg0KDQoNCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBjbGFzcyBfVW5GdW5CYXNl
IHsNCiAgICBwdWJsaWM6DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZSB2YWx1ZV90eXBlOw0KICAgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUgX1Z0Ow0KDQogICAgICAg
IF9VbkZ1bkJhc2UgKGNvbnN0IF9Eb20mIF9fZSwgX1Z0IF9fZihfVnQpKQ0KICAgICAgICAgICAg
ICAgIDogX01fZXhwcihfX2UpLCBfTV9mdW5jKF9fZikge30NCg0KICAgICAgICBfVnQgb3BlcmF0
b3JbXSAoc2l6ZV90IF9faSkgY29uc3QgeyByZXR1cm4gX01fZnVuYyhfTV9leHByW19faV0pOyB9
DQogICAgICAgIHNpemVfdCBzaXplICgpIGNvbnN0IHsgcmV0dXJuIF9NX2V4cHIuc2l6ZSgpOyB9
DQoNCiAgICBwcml2YXRlOg0KICAgICAgICBjb25zdCBfRG9tJiBfTV9leHByOw0KICAgICAgICBf
VnQgKCpfTV9mdW5jKShfVnQpOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFz
cywgY2xhc3M+IGNsYXNzIF9NZXRhLCBjbGFzcyBfRG9tPg0KICAgICAgICBjbGFzcyBfVW5GdW5D
bG9zOw0KDQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICBzdHJ1Y3QgX1VuRnVuQ2xvczxf
RXhwcixfRG9tPiA6IF9VbkZ1bkJhc2U8X0RvbT4gew0KICAgICAgICB0eXBlZGVmIF9VbkZ1bkJh
c2U8X0RvbT4gX0Jhc2U7DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5
cGUgdmFsdWVfdHlwZTsNCg0KICAgICAgICBfVW5GdW5DbG9zIChjb25zdCBfRG9tJiBfX2UsIHZh
bHVlX3R5cGUgX19mKHZhbHVlX3R5cGUpKQ0KICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9fZSwg
X19mKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgc3RydWN0
IF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4gOiBfVW5GdW5CYXNlPHZhbGFycmF5PF9UcD4gPiB7
DQogICAgICAgIHR5cGVkZWYgX1VuRnVuQmFzZTx2YWxhcnJheTxfVHA+ID4gX0Jhc2U7DQogICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsNCg0KICAg
ICAgICBfVW5GdW5DbG9zIChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIF9UcCBfX2YoX1RwKSkN
CiAgICAgICAgICAgICAgICA6IF9CYXNlIChfX3YsIF9fZikge30NCiAgICB9Ow0KDQoNCg0KDQog
ICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MsIGNsYXNzPiBjbGFzcyBfTWV0YTEsDQogICAgICAg
IHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3MgTWV0YTIsDQogICAgICAgIGNsYXNzIF9Eb20x
LCBjbGFzcyBfRG9tMj4gY2xhc3MgX0JpbkZ1bkNsb3M7DQoNCiAgICB0ZW1wbGF0ZTxjbGFzcyBf
RG9tMSwgY2xhc3MgX0RvbTI+IGNsYXNzIF9CaW5GdW5CYXNlIHsNCiAgICBwdWJsaWM6DQogICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsNCiAgICAg
ICAgdHlwZWRlZiB2YWx1ZV90eXBlIF9WdDsNCg0KICAgICAgICBfQmluRnVuQmFzZSAoY29uc3Qg
X0RvbTEmIF9fZTEsIGNvbnN0IF9Eb20yJiBfX2UyLA0KICAgICAgICAgICAgICAgICAgICAgIF9W
dCBfX2YgKF9WdCwgX1Z0KSkNCiAgICAgICAgICAgICAgICA6IF9NX2V4cHIxIChfX2UxKSwgX01f
ZXhwcjIgKF9fZTIpLCBfTV9mdW5jIChfX2YpIHt9DQoNCiAgICAgICAgdmFsdWVfdHlwZSBvcGVy
YXRvcltdIChzaXplX3QgX19pKSBjb25zdA0KICAgICAgICB7IHJldHVybiBfTV9mdW5jIChfTV9l
eHByMVtfX2ldLCBfTV9leHByMltfX2ldKTsgfQ0KICAgICAgICBzaXplX3Qgc2l6ZSAoKSBjb25z
dCB7IHJldHVybiBfTV9leHByMS5zaXplICgpOyB9DQoNCiAgICBwcml2YXRlOg0KICAgICAgICBj
b25zdCBfRG9tMSYgX01fZXhwcjE7DQogICAgICAgIGNvbnN0IF9Eb20yJiBfTV9leHByMjsNCiAg
ICAgICAgX1Z0ICgqX01fZnVuYykoX1Z0LCBfVnQpOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTxj
bGFzcyBfRG9tPiBjbGFzcyBfQmluRnVuQmFzZTEgew0KICAgIHB1YmxpYzoNCiAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGUgOw0KICAgICAgICB0eXBl
ZGVmIHZhbHVlX3R5cGUgX1Z0Ow0KDQogICAgICAgIF9CaW5GdW5CYXNlMSAoY29uc3QgX1Z0JiBf
X2MsIGNvbnN0IF9Eb20mIF9fZSwgX1Z0IF9fZihfVnQsIF9WdCkpDQogICAgICAgICAgICAgICAg
OiBfTV9leHByMSAoX19jKSwgX01fZXhwcjIgKF9fZSksIF9NX2Z1bmMgKF9fZikge30NCg0KICAg
ICAgICB2YWx1ZV90eXBlIG9wZXJhdG9yW10gKHNpemVfdCBfX2kpIGNvbnN0DQogICAgICAgIHsg
cmV0dXJuIF9NX2Z1bmMgKF9NX2V4cHIxLCBfTV9leHByMltfX2ldKTsgfQ0KICAgICAgICBzaXpl
X3Qgc2l6ZSAoKSBjb25zdCB7IHJldHVybiBfTV9leHByMi5zaXplICgpOyB9DQoNCiAgICBwcml2
YXRlOg0KICAgICAgICBjb25zdCBfVnQmIF9NX2V4cHIxOw0KICAgICAgICBjb25zdCBfRG9tJiBf
TV9leHByMjsNCiAgICAgICAgX1Z0ICgqX01fZnVuYykoX1Z0LCBfVnQpOw0KICAgIH07DQoNCiAg
ICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBjbGFzcyBfQmluRnVuQmFzZTIgew0KICAgIHB1YmxpYzoN
CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7DQog
ICAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSBfVnQ7DQoNCiAgICAgICAgX0JpbkZ1bkJhc2UyIChj
b25zdCBfRG9tJiBfX2UsIGNvbnN0IF9WdCYgX19jLCBfVnQgX19mKF9WdCwgX1Z0KSkNCiAgICAg
ICAgICAgICAgICA6IF9NX2V4cHIxIChfX2UpLCBfTV9leHByMiAoX19jKSwgX01fZnVuYyAoX19m
KSB7fQ0KDQogICAgICAgIHZhbHVlX3R5cGUgb3BlcmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QN
CiAgICAgICAgeyByZXR1cm4gX01fZnVuYyAoX01fZXhwcjFbX19pXSwgX01fZXhwcjIpOyB9DQog
ICAgICAgIHNpemVfdCBzaXplICgpIGNvbnN0IHsgcmV0dXJuIF9NX2V4cHIxLnNpemUgKCk7IH0N
Cg0KICAgIHByaXZhdGU6DQogICAgICAgIGNvbnN0IF9Eb20mIF9NX2V4cHIxOw0KICAgICAgICBj
b25zdCBfVnQmIF9NX2V4cHIyOw0KICAgICAgICBfVnQgKCpfTV9mdW5jKShfVnQsIF9WdCk7DQog
ICAgfTsNCg0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4NCiAgICBzdHJ1
Y3QgX0JpbkZ1bkNsb3M8X0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+IDogX0JpbkZ1bkJhc2U8X0Rv
bTEsX0RvbTI+IHsNCiAgICAgICAgdHlwZWRlZiBfQmluRnVuQmFzZTxfRG9tMSxfRG9tMj4gX0Jh
c2U7DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlw
ZTsNCiAgICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlIF9UcDsNCg0KICAgICAgICBfQmluRnVuQ2xv
cyAoY29uc3QgX0RvbTEmIF9fZTEsIGNvbnN0IF9Eb20yJiBfX2UyLA0KICAgICAgICAgICAgICAg
ICAgICAgX1RwIF9fZihfVHAsIF9UcCkpDQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX19lMSwg
X19lMiwgX19mKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAg
c3RydWN0IF9CaW5GdW5DbG9zPF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4NCiAgICAgICAg
OiBfQmluRnVuQmFzZTx2YWxhcnJheTxfVHA+LCB2YWxhcnJheTxfVHA+ID4gew0KICAgICAgICB0
eXBlZGVmIF9CaW5GdW5CYXNlPHZhbGFycmF5PF9UcD4sIHZhbGFycmF5PF9UcD4gPiBfQmFzZTsN
CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCg0KICAgICAgICBfQmluRnVuQ2xvcyAo
Y29uc3QgdmFsYXJyYXk8X1RwPiYgX192LCBjb25zdCB2YWxhcnJheTxfVHA+JiBfX3csDQogICAg
ICAgICAgICAgICAgICAgICBfVHAgX19mKF9UcCwgX1RwKSkNCiAgICAgICAgICAgICAgICA6IF9C
YXNlIChfX3YsIF9fdywgX19mKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9t
Pg0KICAgIHN0cnVjdCBfQmluRnVuQ2xvczxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlPg0KICAgICAgICA6IF9CaW5GdW5CYXNlPF9Eb20sdmFsYXJyYXk8dHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gPiB7DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Rv
bTo6dmFsdWVfdHlwZSBfVHA7DQogICAgICAgIHR5cGVkZWYgX0JpbkZ1bkJhc2U8X0RvbSx2YWxh
cnJheTxfVHA+ID4gX0Jhc2U7DQogICAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQoNCiAg
ICAgICAgX0JpbkZ1bkNsb3MgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3QgdmFsYXJyYXk8X1RwPiYg
X192LA0KICAgICAgICAgICAgICAgICAgICAgX1RwIF9fZihfVHAsIF9UcCkpDQogICAgICAgICAg
ICAgICAgOiBfQmFzZSAoX19lLCBfX3YsIF9fZikge30NCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8
Y2xhc3MgX0RvbT4NCiAgICBzdHJ1Y3QgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9FeHByLHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4NCiAgICAgICAgOiBfQmluRnVuQmFzZTx2YWxhcnJh
eTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPixfRG9tPiB7DQogICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7DQogICAgICAgIHR5cGVkZWYgX0JpbkZ1bkJhc2U8
X0RvbSx2YWxhcnJheTxfVHA+ID4gX0Jhc2U7DQogICAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5
cGU7DQoNCiAgICAgICAgX0JpbkZ1bkNsb3MgKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgY29u
c3QgX0RvbSYgX19lLA0KICAgICAgICAgICAgICAgICAgICAgX1RwIF9fZihfVHAsIF9UcCkpDQog
ICAgICAgICAgICAgICAgOiBfQmFzZSAoX192LCBfX2UsIF9fZikge30NCiAgICB9Ow0KDQogICAg
dGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICBzdHJ1Y3QgX0JpbkZ1bkNsb3M8X0V4cHIsX0NvbnN0
YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4NCiAgICAgICAgOiBfQmluRnVuQmFz
ZTI8X0RvbT4gew0KICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1Rw
Ow0KICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICAgICAgICB0eXBlZGVmIF9CaW5G
dW5CYXNlMjxfRG9tPiBfQmFzZTsNCg0KICAgICAgICBfQmluRnVuQ2xvcyAoY29uc3QgX0RvbSYg
X19lLCBjb25zdCBfVHAmIF9fdCwgX1RwIF9fZiAoX1RwLCBfVHApKQ0KICAgICAgICAgICAgICAg
IDogX0Jhc2UgKF9fZSwgX190LCBfX2YpIHt9DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPGNsYXNz
IF9Eb20+DQogICAgc3RydWN0IF9CaW5GdW5DbG9zPF9Db25zdGFudCxfRXhwcixfRG9tLHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGU+DQogICAgICAgIDogX0JpbkZ1bkJhc2UxPF9Eb20+IHsNCiAg
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsNCiAgICAgICAgdHlw
ZWRlZiBfVHAgdmFsdWVfdHlwZTsNCiAgICAgICAgdHlwZWRlZiBfQmluRnVuQmFzZTE8X0RvbT4g
X0Jhc2U7DQoNCiAgICAgICAgX0JpbkZ1bkNsb3MgKGNvbnN0IF9UcCYgX190LCBjb25zdCBfRG9t
JiBfX2UsIF9UcCBfX2YgKF9UcCwgX1RwKSkNCiAgICAgICAgICAgICAgICA6IF9CYXNlIChfX3Qs
IF9fZSwgX19mKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAg
c3RydWN0IF9CaW5GdW5DbG9zPF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4NCiAgICAgICAg
OiBfQmluRnVuQmFzZTI8dmFsYXJyYXk8X1RwPiA+IHsNCiAgICAgICAgdHlwZWRlZiBfQmluRnVu
QmFzZTI8dmFsYXJyYXk8X1RwPiA+IF9CYXNlOw0KICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90
eXBlOw0KDQogICAgICAgIF9CaW5GdW5DbG9zIChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIGNv
bnN0IF9UcCYgX190LA0KICAgICAgICAgICAgICAgICAgICAgX1RwIF9fZihfVHAsIF9UcCkpDQog
ICAgICAgICAgICAgICAgOiBfQmFzZSAoX192LCBfX3QsIF9fZikge30NCiAgICB9Ow0KDQogICAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIHN0cnVjdCBfQmluRnVuQ2xvczxfQ29uc3RhbnQs
X1ZhbEFycmF5LF9UcCxfVHA+DQogICAgICAgIDogX0JpbkZ1bkJhc2UxPHZhbGFycmF5PF9UcD4g
PiB7DQogICAgICAgIHR5cGVkZWYgX0JpbkZ1bkJhc2UxPHZhbGFycmF5PF9UcD4gPiBfQmFzZTsN
CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCg0KICAgICAgICBfQmluRnVuQ2xvcyAo
Y29uc3QgX1RwJiBfX3QsIGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwNCiAgICAgICAgICAgICAg
ICAgICAgIF9UcCBfX2YgKF9UcCwgX1RwKSkNCiAgICAgICAgICAgICAgICA6IF9CYXNlIChfX3Qs
IF9fdiwgX19mKSB7fQ0KICAgIH07DQoNCg0KDQoNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9E
b20sIHR5cGVuYW1lIF9Bcmc+IGNsYXNzIF9GdW5CYXNlIHsNCiAgICBwdWJsaWM6DQogICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOw0KDQogICAgICAg
IF9GdW5CYXNlIChjb25zdCBfRG9tJiBfX2UsIHZhbHVlX3R5cGUgX19mKF9BcmcpKQ0KICAgICAg
ICAgICAgICAgIDogX01fZXhwciAoX19lKSwgX01fZnVuYyAoX19mKSB7fQ0KDQogICAgICAgIHZh
bHVlX3R5cGUgb3BlcmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QNCiAgICAgICAgeyByZXR1cm4g
X01fZnVuYyAoX01fZXhwcltfX2ldKTsgfQ0KICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIF9NX2V4cHIuc2l6ZSAoKTt9DQoNCiAgICBwcml2YXRlOg0KICAgICAgICBjb25zdCBf
RG9tJiBfTV9leHByOw0KICAgICAgICB2YWx1ZV90eXBlICgqX01fZnVuYykoX0FyZyk7DQogICAg
fTsNCg0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+DQogICAgc3RydWN0IF9WYWxGdW5DbG9zPF9F
eHByLF9Eb20+DQogICAgICAgIDogX0Z1bkJhc2U8X0RvbSwgdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZT4gew0KICAgICAgICB0eXBlZGVmIF9GdW5CYXNlPF9Eb20sIHR5cGVuYW1lIF9Eb206OnZh
bHVlX3R5cGU+IF9CYXNlOw0KICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90
eXBlIHZhbHVlX3R5cGU7DQogICAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSBfVHA7DQoNCiAgICAg
ICAgX1ZhbEZ1bkNsb3MgKGNvbnN0IF9Eb20mIF9fZSwgX1RwIF9fZiAoX1RwKSkgOiBfQmFzZSAo
X19lLCBfX2YpIHt9DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICBz
dHJ1Y3QgX1ZhbEZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4NCiAgICAgICAgOiBfRnVuQmFzZTx2YWxh
cnJheTxfVHA+LCBfVHA+IHsNCiAgICAgICAgdHlwZWRlZiBfRnVuQmFzZTx2YWxhcnJheTxfVHA+
LCBfVHA+IF9CYXNlOw0KICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KDQogICAgICAg
IF9WYWxGdW5DbG9zIChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIF9UcCBfX2YoX1RwKSkNCiAg
ICAgICAgICAgICAgICA6IF9CYXNlIChfX3YsIF9fZikge30NCiAgICB9Ow0KDQogICAgdGVtcGxh
dGU8Y2xhc3MgX0RvbT4NCiAgICBzdHJ1Y3QgX1JlZkZ1bkNsb3M8X0V4cHIsX0RvbT4gOg0KICAg
ICAgICBfRnVuQmFzZTxfRG9tLCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJj4gew0K
ICAgICAgICB0eXBlZGVmIF9GdW5CYXNlPF9Eb20sIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGUmPiBfQmFzZTsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlw
ZSB2YWx1ZV90eXBlOw0KICAgICAgICB0eXBlZGVmIHZhbHVlX3R5cGUgX1RwOw0KDQogICAgICAg
IF9SZWZGdW5DbG9zIChjb25zdCBfRG9tJiBfX2UsIF9UcCBfX2YgKGNvbnN0IF9UcCYpKQ0KICAg
ICAgICAgICAgICAgIDogX0Jhc2UgKF9fZSwgX19mKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+DQogICAgc3RydWN0IF9SZWZGdW5DbG9zPF9WYWxBcnJheSxfVHA+DQog
ICAgICAgIDogX0Z1bkJhc2U8dmFsYXJyYXk8X1RwPiwgY29uc3QgX1RwJj4gew0KICAgICAgICB0
eXBlZGVmIF9GdW5CYXNlPHZhbGFycmF5PF9UcD4sIGNvbnN0IF9UcCY+IF9CYXNlOw0KICAgICAg
ICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KDQogICAgICAgIF9SZWZGdW5DbG9zIChjb25zdCB2
YWxhcnJheTxfVHA+JiBfX3YsIF9UcCBfX2YoY29uc3QgX1RwJikpDQogICAgICAgICAgICAgICAg
OiBfQmFzZSAoX192LCBfX2YpIHt9DQogICAgfTsNCg0KDQoNCg0KDQogICAgdGVtcGxhdGU8dGVt
cGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCB0eXBlbmFtZSBfQXJnPg0KICAgIGNsYXNzIF9VbkJh
c2Ugew0KICAgIHB1YmxpYzoNCiAgICAgICAgdHlwZWRlZiBfT3Blcjx0eXBlbmFtZSBfQXJnOjp2
YWx1ZV90eXBlPiBfT3A7DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX09wOjpyZXN1bHRfdHlw
ZSB2YWx1ZV90eXBlOw0KDQogICAgICAgIF9VbkJhc2UgKGNvbnN0IF9BcmcmIF9fZSkgOiBfTV9l
eHByKF9fZSkge30NCiAgICAgICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdIChzaXplX3QpIGNvbnN0
Ow0KICAgICAgICBzaXplX3Qgc2l6ZSAoKSBjb25zdCB7IHJldHVybiBfTV9leHByLnNpemUgKCk7
IH0NCg0KICAgIHByaXZhdGU6DQogICAgICAgIGNvbnN0IF9BcmcmIF9NX2V4cHI7DQogICAgfTsN
Cg0KICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwgdHlwZW5hbWUgX0Fy
Zz4NCiAgICBpbmxpbmUgdHlwZW5hbWUgX1VuQmFzZTxfT3BlciwgX0FyZz46OnZhbHVlX3R5cGUN
CiAgICBfVW5CYXNlPF9PcGVyLCBfQXJnPjo6b3BlcmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QN
CiAgICB7IHJldHVybiBfT3AoKSAoX01fZXhwcltfX2ldKTsgfQ0KDQogICAgdGVtcGxhdGU8dGVt
cGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCBjbGFzcyBfRG9tPg0KICAgIHN0cnVjdCBfVW5DbG9z
PF9PcGVyLCBfRXhwciwgX0RvbT4gOiBfVW5CYXNlPF9PcGVyLCBfRG9tPiB7DQogICAgICAgIHR5
cGVkZWYgX0RvbSBfQXJnOw0KICAgICAgICB0eXBlZGVmIF9VbkJhc2U8X09wZXIsIF9Eb20+IF9C
YXNlOw0KICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5
cGU7DQoNCiAgICAgICAgX1VuQ2xvcyAoY29uc3QgX0FyZyYgX19lKSA6IF9CYXNlKF9fZSkge30N
CiAgICB9Ow0KDQogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCB0eXBl
bmFtZSBfVHA+DQogICAgc3RydWN0IF9VbkNsb3M8X09wZXIsIF9WYWxBcnJheSwgX1RwPiA6IF9V
bkJhc2U8X09wZXIsIHZhbGFycmF5PF9UcD4gPiB7DQogICAgICAgIHR5cGVkZWYgdmFsYXJyYXk8
X1RwPiBfQXJnOw0KICAgICAgICB0eXBlZGVmIF9VbkJhc2U8X09wZXIsIHZhbGFycmF5PF9UcD4g
PiBfQmFzZTsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1
ZV90eXBlOw0KDQogICAgICAgIF9VbkNsb3MgKGNvbnN0IF9BcmcmIF9fZSkgOiBfQmFzZShfX2Up
IHt9DQogICAgfTsNCg0KDQoNCg0KDQoNCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xh
c3MgX09wZXIsDQogICAgICAgIHR5cGVuYW1lIF9GaXJzdEFyZywgdHlwZW5hbWUgX1NlY29uZEFy
Zz4NCiAgICBjbGFzcyBfQmluQmFzZSB7DQogICAgcHVibGljOg0KICAgICAgICB0eXBlZGVmIF9P
cGVyPHR5cGVuYW1lIF9GaXJzdEFyZzo6dmFsdWVfdHlwZT4gX09wOw0KICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9PcDo6cmVzdWx0X3R5cGUgdmFsdWVfdHlwZTsNCg0KICAgICAgICBfQmluQmFz
ZSAoY29uc3QgX0ZpcnN0QXJnJiBfX2UxLCBjb25zdCBfU2Vjb25kQXJnJiBfX2UyKQ0KICAgICAg
ICAgICAgICAgIDogX01fZXhwcjEgKF9fZTEpLCBfTV9leHByMiAoX19lMikge30NCiAgICAgICAg
dmFsdWVfdHlwZSBvcGVyYXRvcltdIChzaXplX3QpIGNvbnN0Ow0KICAgICAgICBzaXplX3Qgc2l6
ZSAoKSBjb25zdCB7IHJldHVybiBfTV9leHByMS5zaXplICgpOyB9DQoNCiAgICBwcml2YXRlOg0K
ICAgICAgICBjb25zdCBfRmlyc3RBcmcmIF9NX2V4cHIxOw0KICAgICAgICBjb25zdCBfU2Vjb25k
QXJnJiBfTV9leHByMjsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNs
YXNzIF9PcGVyLA0KICAgICAgICB0eXBlbmFtZSBfRmlyc3RBcmcsIHR5cGVuYW1lIF9TZWNvbmRB
cmc+DQogICAgaW5saW5lIHR5cGVuYW1lIF9CaW5CYXNlPF9PcGVyLF9GaXJzdEFyZyxfU2Vjb25k
QXJnPjo6dmFsdWVfdHlwZQ0KICAgIF9CaW5CYXNlPF9PcGVyLF9GaXJzdEFyZyxfU2Vjb25kQXJn
Pjo6b3BlcmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QNCiAgICB7IHJldHVybiBfT3AoKSAoX01f
ZXhwcjFbX19pXSwgX01fZXhwcjJbX19pXSk7IH0NCg0KDQogICAgdGVtcGxhdGU8dGVtcGxhdGU8
Y2xhc3M+IGNsYXNzIF9PcGVyLCBjbGFzcyBfQ2xvcz4NCiAgICBjbGFzcyBfQmluQmFzZTIgew0K
ICAgIHB1YmxpYzoNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ2xvczo6dmFsdWVfdHlwZSBf
VnQ7DQogICAgICAgIHR5cGVkZWYgX09wZXI8X1Z0PiBfT3A7DQogICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX09wOjpyZXN1bHRfdHlwZSB2YWx1ZV90eXBlOw0KDQogICAgICAgIF9CaW5CYXNlMiAo
Y29uc3QgX0Nsb3MmIF9fZSwgY29uc3QgX1Z0JiBfX3QpDQogICAgICAgICAgICAgICAgOiBfTV9l
eHByMSAoX19lKSwgX01fZXhwcjIgKF9fdCkge30NCiAgICAgICAgdmFsdWVfdHlwZSBvcGVyYXRv
cltdIChzaXplX3QpIGNvbnN0Ow0KICAgICAgICBzaXplX3Qgc2l6ZSAoKSBjb25zdCB7IHJldHVy
biBfTV9leHByMS5zaXplICgpOyB9DQoNCiAgICBwcml2YXRlOg0KICAgICAgICBjb25zdCBfQ2xv
cyYgX01fZXhwcjE7DQogICAgICAgIGNvbnN0IF9WdCYgX01fZXhwcjI7DQogICAgfTsNCg0KICAg
IHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwgY2xhc3MgX0Nsb3M+DQogICAg
aW5saW5lIHR5cGVuYW1lIF9CaW5CYXNlMjxfT3BlcixfQ2xvcz46OnZhbHVlX3R5cGUNCiAgICBf
QmluQmFzZTI8X09wZXIsX0Nsb3M+OjpvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdA0KICAg
IHsgcmV0dXJuIF9PcCgpIChfTV9leHByMVtfX2ldLCBfTV9leHByMik7IH0NCg0KDQogICAgdGVt
cGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCBjbGFzcyBfQ2xvcz4NCiAgICBjbGFz
cyBfQmluQmFzZTEgew0KICAgIHB1YmxpYzoNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQ2xv
czo6dmFsdWVfdHlwZSBfVnQ7DQogICAgICAgIHR5cGVkZWYgX09wZXI8X1Z0PiBfT3A7DQogICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX09wOjpyZXN1bHRfdHlwZSB2YWx1ZV90eXBlOw0KDQogICAg
ICAgIF9CaW5CYXNlMSAoY29uc3QgX1Z0JiBfX3QsIGNvbnN0IF9DbG9zJiBfX2UpDQogICAgICAg
ICAgICAgICAgOiBfTV9leHByMSAoX190KSwgX01fZXhwcjIgKF9fZSkge30NCiAgICAgICAgdmFs
dWVfdHlwZSBvcGVyYXRvcltdIChzaXplX3QpIGNvbnN0Ow0KICAgICAgICBzaXplX3Qgc2l6ZSAo
KSBjb25zdCB7IHJldHVybiBfTV9leHByMi5zaXplICgpOyB9DQoNCiAgICBwcml2YXRlOg0KICAg
ICAgICBjb25zdCBfVnQmIF9NX2V4cHIxOw0KICAgICAgICBjb25zdCBfQ2xvcyYgX01fZXhwcjI7
DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwgY2xh
c3MgX0Nsb3M+DQogICAgaW5saW5lIHR5cGVuYW1lDQogICAgX0JpbkJhc2UxPF9PcGVyLF9DbG9z
Pjo6dmFsdWVfdHlwZQ0KICAgIF9CaW5CYXNlMTxfT3BlcixfQ2xvcz46OiBvcGVyYXRvcltdIChz
aXplX3QgX19pKSBjb25zdA0KICAgIHsgcmV0dXJuIF9PcCgpIChfTV9leHByMSwgX01fZXhwcjJb
X19pXSk7IH0NCg0KDQogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCBj
bGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+DQogICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLCBfRXhw
ciwgX0V4cHIsIF9Eb20xLCBfRG9tMj4NCiAgICAgICAgOiBfQmluQmFzZTxfT3BlcixfRG9tMSxf
RG9tMj4gew0KICAgICAgICB0eXBlZGVmIF9CaW5CYXNlPF9PcGVyLF9Eb20xLF9Eb20yPiBfQmFz
ZTsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBl
Ow0KDQogICAgICAgIF9CaW5DbG9zKGNvbnN0IF9Eb20xJiBfX2UxLCBjb25zdCBfRG9tMiYgX19l
MikgOiBfQmFzZShfX2UxLCBfX2UyKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0
ZTxjbGFzcz4gY2xhc3MgX09wZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBzdHJ1Y3QgX0JpbkNsb3M8
X09wZXIsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPg0KICAgICAgICA6IF9CaW5CYXNlPF9P
cGVyLHZhbGFycmF5PF9UcD4sdmFsYXJyYXk8X1RwPiA+IHsNCiAgICAgICAgdHlwZWRlZiBfQmlu
QmFzZTxfT3Blcix2YWxhcnJheTxfVHA+LHZhbGFycmF5PF9UcD4gPiBfQmFzZTsNCiAgICAgICAg
dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCg0KICAgICAgICBfQmluQ2xvcyAoY29uc3QgdmFsYXJy
YXk8X1RwPiYgX192LCBjb25zdCB2YWxhcnJheTxfVHA+JiBfX3cpDQogICAgICAgICAgICAgICAg
OiBfQmFzZSAoX192LCBfX3cpIHt9DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNs
YXNzPiBjbGFzcyBfT3BlciwgY2xhc3MgX0RvbT4NCiAgICBzdHJ1Y3QgX0JpbkNsb3M8X09wZXIs
X0V4cHIsX1ZhbEFycmF5LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4NCiAgICAgICAg
OiBfQmluQmFzZTxfT3BlcixfRG9tLHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+
ID4gew0KICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOw0KICAg
ICAgICB0eXBlZGVmIF9CaW5CYXNlPF9PcGVyLF9Eb20sdmFsYXJyYXk8X1RwPiA+IF9CYXNlOw0K
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7DQoN
CiAgICAgICAgX0JpbkNsb3MoY29uc3QgX0RvbSYgX19lMSwgY29uc3QgdmFsYXJyYXk8X1RwPiYg
X19lMikNCiAgICAgICAgICAgICAgICA6IF9CYXNlIChfX2UxLCBfX2UyKSB7fQ0KICAgIH07DQoN
CiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xhc3MgX09wZXIsIGNsYXNzIF9Eb20+DQog
ICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlLF9Eb20+DQogICAgICAgIDogX0JpbkJhc2U8X09wZXIsdmFsYXJyYXk8dHlwZW5h
bWUgX0RvbTo6dmFsdWVfdHlwZT4sX0RvbT4gew0KICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9E
b206OnZhbHVlX3R5cGUgX1RwOw0KICAgICAgICB0eXBlZGVmIF9CaW5CYXNlPF9PcGVyLHZhbGFy
cmF5PF9UcD4sX0RvbT4gX0Jhc2U7DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZh
bHVlX3R5cGUgdmFsdWVfdHlwZTsNCg0KICAgICAgICBfQmluQ2xvcyAoY29uc3QgdmFsYXJyYXk8
X1RwPiYgX19lMSwgY29uc3QgX0RvbSYgX19lMikNCiAgICAgICAgICAgICAgICA6IF9CYXNlIChf
X2UxLCBfX2UyKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xh
c3MgX09wZXIsIGNsYXNzIF9Eb20+DQogICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLF9FeHByLF9D
b25zdGFudCxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+DQogICAgICAgIDogX0JpbkJh
c2UyPF9PcGVyLF9Eb20+IHsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90
eXBlIF9UcDsNCiAgICAgICAgdHlwZWRlZiBfQmluQmFzZTI8X09wZXIsX0RvbT4gX0Jhc2U7DQog
ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsNCg0K
ICAgICAgICBfQmluQ2xvcyAoY29uc3QgX0RvbSYgX19lMSwgY29uc3QgX1RwJiBfX2UyKSA6IF9C
YXNlIChfX2UxLCBfX2UyKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFz
cz4gY2xhc3MgX09wZXIsIGNsYXNzIF9Eb20+DQogICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLF9D
b25zdGFudCxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+DQogICAgICAgIDog
X0JpbkJhc2UxPF9PcGVyLF9Eb20+IHsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlIF9UcDsNCiAgICAgICAgdHlwZWRlZiBfQmluQmFzZTE8X09wZXIsX0RvbT4gX0Jh
c2U7DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlw
ZTsNCg0KICAgICAgICBfQmluQ2xvcyAoY29uc3QgX1RwJiBfX2UxLCBjb25zdCBfRG9tJiBfX2Uy
KSA6IF9CYXNlIChfX2UxLCBfX2UyKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0
ZTxjbGFzcz4gY2xhc3MgX09wZXIsIHR5cGVuYW1lIF9UcD4NCiAgICBzdHJ1Y3QgX0JpbkNsb3M8
X09wZXIsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPg0KICAgICAgICA6IF9CaW5CYXNlMjxf
T3Blcix2YWxhcnJheTxfVHA+ID4gew0KICAgICAgICB0eXBlZGVmIF9CaW5CYXNlMjxfT3Blcix2
YWxhcnJheTxfVHA+ID4gX0Jhc2U7DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZh
bHVlX3R5cGUgdmFsdWVfdHlwZTsNCg0KICAgICAgICBfQmluQ2xvcyAoY29uc3QgdmFsYXJyYXk8
X1RwPiYgX192LCBjb25zdCBfVHAmIF9fdCkNCiAgICAgICAgICAgICAgICA6IF9CYXNlIChfX3Ys
IF9fdCkge30NCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9P
cGVyLCB0eXBlbmFtZSBfVHA+DQogICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLF9Db25zdGFudCxf
VmFsQXJyYXksX1RwLF9UcD4NCiAgICAgICAgOiBfQmluQmFzZTE8X09wZXIsdmFsYXJyYXk8X1Rw
PiA+IHsNCiAgICAgICAgdHlwZWRlZiBfQmluQmFzZTE8X09wZXIsdmFsYXJyYXk8X1RwPiA+IF9C
YXNlOw0KICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5
cGU7DQoNCiAgICAgICAgX0JpbkNsb3MgKGNvbnN0IF9UcCYgX190LCBjb25zdCB2YWxhcnJheTxf
VHA+JiBfX3YpDQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX190LCBfX3YpIHt9DQogICAgfTsN
Cg0KDQoNCg0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0RvbT4gY2xhc3MgX1NCYXNlIHsNCiAg
ICBwdWJsaWM6DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSB2YWx1
ZV90eXBlOw0KDQogICAgICAgIF9TQmFzZSAoY29uc3QgX0RvbSYgX19lLCBjb25zdCBzbGljZSYg
X19zKQ0KICAgICAgICAgICAgICAgIDogX01fZXhwciAoX19lKSwgX01fc2xpY2UgKF9fcykge30N
CiAgICAgICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdA0KICAgICAg
ICB7IHJldHVybiBfTV9leHByW19NX3NsaWNlLnN0YXJ0ICgpICsgX19pICogX01fc2xpY2Uuc3Ry
aWRlICgpXTsgfQ0KICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3NsaWNl
LnNpemUgKCk7IH0NCg0KICAgIHByaXZhdGU6DQogICAgICAgIGNvbnN0IF9Eb20mIF9NX2V4cHI7
DQogICAgICAgIGNvbnN0IHNsaWNlJiBfTV9zbGljZTsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPiBjbGFzcyBfU0Jhc2U8X0FycmF5PF9UcD4gPiB7DQogICAgcHVibGljOg0K
ICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KDQogICAgICAgIF9TQmFzZSAoX0FycmF5
PF9UcD4gX19hLCBjb25zdCBzbGljZSYgX19zKQ0KICAgICAgICAgICAgICAgIDogX01fYXJyYXkg
KF9fYS5fTV9kYXRhK19fcy5zdGFydCgpKSwgX01fc2l6ZSAoX19zLnNpemUoKSksDQogICAgICAg
ICAgICAgICAgICBfTV9zdHJpZGUgKF9fcy5zdHJpZGUoKSkge30NCiAgICAgICAgdmFsdWVfdHlw
ZSBvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdA0KICAgICAgICB7IHJldHVybiBfTV9hcnJh
eS5fTV9kYXRhW19faSAqIF9NX3N0cmlkZV07IH0NCiAgICAgICAgc2l6ZV90IHNpemUoKSBjb25z
dCB7IHJldHVybiBfTV9zaXplOyB9DQoNCiAgICBwcml2YXRlOg0KICAgICAgICBjb25zdCBfQXJy
YXk8X1RwPiBfTV9hcnJheTsNCiAgICAgICAgY29uc3Qgc2l6ZV90IF9NX3NpemU7DQogICAgICAg
IGNvbnN0IHNpemVfdCBfTV9zdHJpZGU7DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPGNsYXNzIF9E
b20+IHN0cnVjdCBfU0Nsb3M8X0V4cHIsX0RvbT4gOiBfU0Jhc2U8X0RvbT4gew0KICAgICAgICB0
eXBlZGVmIF9TQmFzZTxfRG9tPiBfQmFzZTsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFz
ZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOw0KDQogICAgICAgIF9TQ2xvcyAoY29uc3QgX0RvbSYg
X19lLCBjb25zdCBzbGljZSYgX19zKSA6IF9CYXNlIChfX2UsIF9fcykge30NCiAgICB9Ow0KDQog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIHN0cnVjdCBfU0Nsb3M8X1ZhbEFycmF5LF9U
cD4gOiBfU0Jhc2U8X0FycmF5PF9UcD4gPiB7DQogICAgICAgIHR5cGVkZWYgX1NCYXNlPF9BcnJh
eTxfVHA+ID4gX0Jhc2U7DQogICAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQoNCiAgICAg
ICAgX1NDbG9zIChfQXJyYXk8X1RwPiBfX2EsIGNvbnN0IHNsaWNlJiBfX3MpIDogX0Jhc2UgKF9f
YSwgX19zKSB7fQ0KICAgIH07DQoNCg0KDQoNCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBjbGFz
cyBfR0Jhc2Ugew0KICAgIHB1YmxpYzoNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlIHZhbHVlX3R5cGU7DQoNCiAgICAgICAgX0dCYXNlIChjb25zdCBfRG9tJiBfX2Us
IGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkNCiAgICAgICAgICAgICAgICA6IF9NX2V4cHIg
KF9fZSksIF9NX2luZGV4KF9faSkge30NCiAgICAgICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdIChz
aXplX3QgX19pKSBjb25zdA0KICAgICAgICB7IHJldHVybiBfTV9leHByW19NX2luZGV4W19faV1d
OyB9DQogICAgICAgIHNpemVfdCBzaXplICgpIGNvbnN0IHsgcmV0dXJuIF9NX2luZGV4LnNpemUo
KTsgfQ0KDQogICAgcHJpdmF0ZToNCiAgICAgICAgY29uc3QgX0RvbSYgX01fZXhwcjsNCiAgICAg
ICAgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX01faW5kZXg7DQogICAgfTsNCg0KICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4gY2xhc3MgX0dCYXNlPF9BcnJheTxfVHA+ID4gew0KICAgIHB1Ymxp
YzoNCiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCg0KICAgICAgICBfR0Jhc2UgKF9B
cnJheTxfVHA+IF9fYSwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19pKQ0KICAgICAgICAgICAg
ICAgIDogX01fYXJyYXkgKF9fYSksIF9NX2luZGV4KF9faSkge30NCiAgICAgICAgdmFsdWVfdHlw
ZSBvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdA0KICAgICAgICB7IHJldHVybiBfTV9hcnJh
eS5fTV9kYXRhW19NX2luZGV4W19faV1dOyB9DQogICAgICAgIHNpemVfdCBzaXplICgpIGNvbnN0
IHsgcmV0dXJuIF9NX2luZGV4LnNpemUoKTsgfQ0KDQogICAgcHJpdmF0ZToNCiAgICAgICAgY29u
c3QgX0FycmF5PF9UcD4gX01fYXJyYXk7DQogICAgICAgIGNvbnN0IHZhbGFycmF5PHNpemVfdD4m
IF9NX2luZGV4Ow0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBzdHJ1Y3QgX0dD
bG9zPF9FeHByLF9Eb20+IDogX0dCYXNlPF9Eb20+IHsNCiAgICAgICAgdHlwZWRlZiBfR0Jhc2U8
X0RvbT4gX0Jhc2U7DQogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUg
dmFsdWVfdHlwZTsNCg0KICAgICAgICBfR0Nsb3MgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3QgdmFs
YXJyYXk8c2l6ZV90PiYgX19pKQ0KICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9fZSwgX19pKSB7
fQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgc3RydWN0IF9HQ2xv
czxfVmFsQXJyYXksX1RwPiA6IF9HQmFzZTxfQXJyYXk8X1RwPiA+IHsNCiAgICAgICAgdHlwZWRl
ZiBfR0Jhc2U8X0FycmF5PF9UcD4gPiBfQmFzZTsNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
QmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOw0KDQogICAgICAgIF9HQ2xvcyAoX0FycmF5PF9U
cD4gX19hLCBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kpDQogICAgICAgICAgICAgICAgOiBf
QmFzZSAoX19hLCBfX2kpIHt9DQogICAgfTsNCg0KDQoNCg0KDQogICAgdGVtcGxhdGU8Y2xhc3Mg
X0RvbT4gY2xhc3MgX0lCYXNlIHsNCiAgICBwdWJsaWM6DQogICAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0RvbTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOw0KDQogICAgICAgIF9JQmFzZSAoY29uc3Qg
X0RvbSYgX19lLCBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kpDQogICAgICAgICAgICAgICAg
OiBfTV9leHByIChfX2UpLCBfTV9pbmRleCAoX19pKSB7fQ0KICAgICAgICB2YWx1ZV90eXBlIG9w
ZXJhdG9yW10gKHNpemVfdCBfX2kpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIF9NX2V4cHJbX01f
aW5kZXhbX19pXV07IH0NCiAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9p
bmRleC5zaXplKCk7IH0NCg0KICAgIHByaXZhdGU6DQogICAgICAgIGNvbnN0IF9Eb20mIF9NX2V4
cHI7DQogICAgICAgIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9NX2luZGV4Ow0KICAgIH07DQoN
CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBzdHJ1Y3QgX0lDbG9zPF9FeHByLF9Eb20+IDogX0lC
YXNlPF9Eb20+IHsNCiAgICAgICAgdHlwZWRlZiBfSUJhc2U8X0RvbT4gX0Jhc2U7DQogICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsNCg0KICAgICAg
ICBfSUNsb3MgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19pKQ0K
ICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9fZSwgX19pKSB7fQ0KICAgIH07DQoNCiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgc3RydWN0IF9JQ2xvczxfVmFsQXJyYXksX1RwPiA6IF9J
QmFzZTx2YWxhcnJheTxfVHA+ID4gew0KICAgICAgICB0eXBlZGVmIF9JQmFzZTx2YWxhcnJheTxf
VHA+ID4gX0Jhc2U7DQogICAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQoNCiAgICAgICAg
X0lDbG9zIChjb25zdCB2YWxhcnJheTxfVHA+JiBfX2EsIGNvbnN0IHZhbGFycmF5PHNpemVfdD4m
IF9faSkNCiAgICAgICAgICAgICAgICA6IF9CYXNlIChfX2EsIF9faSkge30NCiAgICB9Ow0KDQoN
Cg0KDQogICAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4gY2xhc3MgX0V4cHIg
ew0KICAgIHB1YmxpYzoNCiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCg0KICAgICAg
ICBfRXhwciAoY29uc3QgX0Nsb3MmKTsNCg0KICAgICAgICBjb25zdCBfQ2xvcyYgb3BlcmF0b3Io
KSAoKSBjb25zdDsNCg0KICAgICAgICB2YWx1ZV90eXBlIG9wZXJhdG9yW10gKHNpemVfdCkgY29u
c3Q7DQogICAgICAgIHZhbGFycmF5PHZhbHVlX3R5cGU+IG9wZXJhdG9yW10gKHNsaWNlKSBjb25z
dDsNCiAgICAgICAgdmFsYXJyYXk8dmFsdWVfdHlwZT4gb3BlcmF0b3JbXSAoY29uc3QgZ3NsaWNl
JikgY29uc3Q7DQogICAgICAgIHZhbGFycmF5PHZhbHVlX3R5cGU+IG9wZXJhdG9yW10gKGNvbnN0
IHZhbGFycmF5PGJvb2w+JikgY29uc3Q7DQogICAgICAgIHZhbGFycmF5PHZhbHVlX3R5cGU+IG9w
ZXJhdG9yW10gKGNvbnN0IHZhbGFycmF5PHNpemVfdD4mKSBjb25zdDsNCg0KICAgICAgICBfRXhw
cjxfVW5DbG9zPF9VbmFyeV9wbHVzLHN0ZDo6X0V4cHIsX0Nsb3M+LCB2YWx1ZV90eXBlPg0KICAg
ICAgICBvcGVyYXRvcisgKCkgY29uc3Q7DQoNCiAgICAgICAgX0V4cHI8X1VuQ2xvczxuZWdhdGUs
c3RkOjpfRXhwcixfQ2xvcz4sIHZhbHVlX3R5cGU+DQogICAgICAgIG9wZXJhdG9yLSAoKSBjb25z
dDsNCg0KICAgICAgICBfRXhwcjxfVW5DbG9zPF9CaXR3aXNlX25vdCxzdGQ6Ol9FeHByLF9DbG9z
PiwgdmFsdWVfdHlwZT4NCiAgICAgICAgb3BlcmF0b3J+ICgpIGNvbnN0Ow0KDQogICAgICAgIF9F
eHByPF9VbkNsb3M8bG9naWNhbF9ub3Qsc3RkOjpfRXhwcixfQ2xvcz4sIGJvb2w+DQogICAgICAg
IG9wZXJhdG9yISAoKSBjb25zdDsNCg0KICAgICAgICBzaXplX3Qgc2l6ZSAoKSBjb25zdDsNCiAg
ICAgICAgdmFsdWVfdHlwZSBzdW0gKCkgY29uc3Q7DQoNCiAgICAgICAgdmFsYXJyYXk8dmFsdWVf
dHlwZT4gc2hpZnQgKGludCkgY29uc3Q7DQogICAgICAgIHZhbGFycmF5PHZhbHVlX3R5cGU+IGNz
aGlmdCAoaW50KSBjb25zdDsNCg0KICAgICAgdmFsdWVfdHlwZSBtaW4oKSBjb25zdDsNCiAgICAg
IHZhbHVlX3R5cGUgbWF4KCkgY29uc3Q7DQoNCiAgICAgIHZhbGFycmF5PHZhbHVlX3R5cGU+IGFw
cGx5KHZhbHVlX3R5cGUgKCopIChjb25zdCB2YWx1ZV90eXBlJikpIGNvbnN0Ow0KICAgICAgdmFs
YXJyYXk8dmFsdWVfdHlwZT4gYXBwbHkodmFsdWVfdHlwZSAoKikgKHZhbHVlX3R5cGUpKSBjb25z
dDsNCg0KICAgIHByaXZhdGU6DQogICAgICAgIGNvbnN0IF9DbG9zIF9NX2Nsb3N1cmU7DQogICAg
fTsNCg0KICAgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+DQogICAgaW5saW5l
DQogICAgX0V4cHI8X0Nsb3MsX1RwPjo6X0V4cHIgKGNvbnN0IF9DbG9zJiBfX2MpIDogX01fY2xv
c3VyZShfX2MpIHt9DQoNCiAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPg0K
ICAgIGlubGluZSBjb25zdCBfQ2xvcyYNCiAgICBfRXhwcjxfQ2xvcyxfVHA+OjpvcGVyYXRvcigp
ICgpIGNvbnN0DQogICAgeyByZXR1cm4gX01fY2xvc3VyZTsgfQ0KDQogICAgdGVtcGxhdGU8Y2xh
c3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4NCiAgICBpbmxpbmUgX1RwDQogICAgX0V4cHI8X0Nsb3Ms
X1RwPjo6b3BlcmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QNCiAgICB7IHJldHVybiBfTV9jbG9z
dXJlW19faV07IH0NCg0KICAgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+DQog
ICAgaW5saW5lIHZhbGFycmF5PF9UcD4NCiAgICBfRXhwcjxfQ2xvcyxfVHA+OjpvcGVyYXRvcltd
IChzbGljZSBfX3MpIGNvbnN0DQogICAgeyByZXR1cm4gX01fY2xvc3VyZVtfX3NdOyB9DQoNCiAg
ICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPg0KICAgIGlubGluZSB2YWxhcnJh
eTxfVHA+DQogICAgX0V4cHI8X0Nsb3MsX1RwPjo6b3BlcmF0b3JbXSAoY29uc3QgZ3NsaWNlJiBf
X2dzKSBjb25zdA0KICAgIHsgcmV0dXJuIF9NX2Nsb3N1cmVbX19nc107IH0NCg0KICAgIHRlbXBs
YXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+DQogICAgaW5saW5lIHZhbGFycmF5PF9UcD4N
CiAgICBfRXhwcjxfQ2xvcyxfVHA+OjpvcGVyYXRvcltdIChjb25zdCB2YWxhcnJheTxib29sPiYg
X19tKSBjb25zdA0KICAgIHsgcmV0dXJuIF9NX2Nsb3N1cmVbX19tXTsgfQ0KDQogICAgdGVtcGxh
dGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4NCiAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPg0K
ICAgIF9FeHByPF9DbG9zLF9UcD46Om9wZXJhdG9yW10gKGNvbnN0IHZhbGFycmF5PHNpemVfdD4m
IF9faSkgY29uc3QNCiAgICB7IHJldHVybiBfTV9jbG9zdXJlW19faV07IH0NCg0KICAgIHRlbXBs
YXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+DQogICAgaW5saW5lIHNpemVfdA0KICAgIF9F
eHByPF9DbG9zLF9UcD46OnNpemUgKCkgY29uc3QgeyByZXR1cm4gX01fY2xvc3VyZS5zaXplICgp
OyB9DQoNCiAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4NCiAgaW5saW5lIHZh
bGFycmF5PF9UcD4NCiAgX0V4cHI8X0Nsb3MsIF9UcD46OnNoaWZ0KGludCBfX24pIGNvbnN0DQog
IHsgcmV0dXJuIHZhbGFycmF5PF9UcD4oX01fY2xvc3VyZSkuc2hpZnQoX19uKTsgfQ0KDQogIHRl
bXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+DQogIGlubGluZSB2YWxhcnJheTxfVHA+
DQogIF9FeHByPF9DbG9zLCBfVHA+Ojpjc2hpZnQoaW50IF9fbikgY29uc3QNCiAgeyByZXR1cm4g
dmFsYXJyYXk8X1RwPihfTV9jbG9zdXJlKS5jc2hpZnQoX19uKTsgfQ0KDQogIHRlbXBsYXRlPGNs
YXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+DQogIGlubGluZSB2YWxhcnJheTxfVHA+DQogIF9FeHBy
PF9DbG9zLCBfVHA+OjphcHBseShfVHAgX19mKGNvbnN0IF9UcCYpKSBjb25zdA0KICB7IHJldHVy
biB2YWxhcnJheTxfVHA+KF9NX2Nsb3N1cmUpLmFwcGx5KF9fZik7IH0NCg0KICB0ZW1wbGF0ZTxj
bGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgdmFsYXJyYXk8X1RwPg0KICBfRXhw
cjxfQ2xvcywgX1RwPjo6YXBwbHkoX1RwIF9fZihfVHApKSBjb25zdA0KICB7IHJldHVybiB2YWxh
cnJheTxfVHA+KF9NX2Nsb3N1cmUpLmFwcGx5KF9fZik7IH0NCg0KDQogICAgdGVtcGxhdGU8Y2xh
c3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4NCiAgICBpbmxpbmUgX1RwDQogICAgX0V4cHI8X0Nsb3Ms
X1RwPjo6c3VtICgpIGNvbnN0DQogICAgew0KICAgICAgICBzaXplX3QgX19uID0gX01fY2xvc3Vy
ZS5zaXplKCk7DQogICAgICAgIGlmIChfX24gPT0gMCkgcmV0dXJuIF9UcCgpOw0KICAgICAgICBl
bHNlIHsNCiAgICAgICAgICAgIF9UcCBfX3MgPSBfTV9jbG9zdXJlWy0tX19uXTsNCiAgICAgICAg
ICAgIHdoaWxlIChfX24gIT0gMCkgX19zICs9IF9NX2Nsb3N1cmVbLS1fX25dOw0KICAgICAgICAg
ICAgcmV0dXJuIF9fczsNCiAgICAgICAgfQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfQ2xv
cywgdHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgX1RwDQogIF9FeHByPF9DbG9zLCBfVHA+OjptaW4o
KSBjb25zdA0KICB7IHJldHVybiBfX3ZhbGFycmF5X21pbihfTV9jbG9zdXJlKTsgfQ0KDQogIHRl
bXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+DQogIGlubGluZSBfVHANCiAgX0V4cHI8
X0Nsb3MsIF9UcD46Om1heCgpIGNvbnN0DQogIHsgcmV0dXJuIF9fdmFsYXJyYXlfbWF4KF9NX2Ns
b3N1cmUpOyB9DQoNCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tLCB0eXBlbmFtZSBfVHA+DQogICAg
aW5saW5lIF9FeHByPF9VbkNsb3M8bG9naWNhbF9ub3QsX0V4cHIsX0RvbT4sIGJvb2w+DQogICAg
X0V4cHI8X0RvbSxfVHA+OjpvcGVyYXRvciEgKCkgY29uc3QNCiAgICB7DQogICAgICAgIHR5cGVk
ZWYgX1VuQ2xvczxsb2dpY2FsX25vdCxzdGQ6Ol9FeHByLF9Eb20+IF9DbG9zdXJlOw0KICAgICAg
ICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUodGhpcy0+X01fY2xvc3VyZSkp
Ow0KICAgIH0NCiMgNzkwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3ZhbGFycmF5X21ldGEu
aCIgMw0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20sIHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHBy
PF9VbkNsb3M8X1VuYXJ5X3BsdXMsc3RkOjpfRXhwcixfRG9tPixfVHA+IF9FeHByPF9Eb20sX1Rw
Pjo6b3BlcmF0b3IgKyAoKSBjb25zdCB7IHR5cGVkZWYgX1VuQ2xvczxfVW5hcnlfcGx1cyxzdGQ6
Ol9FeHByLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1
cmUgKHRoaXMtPl9NX2Nsb3N1cmUpKTsgfQ0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20sIHR5cGVu
YW1lIF9UcD4gaW5saW5lIF9FeHByPF9VbkNsb3M8bmVnYXRlLHN0ZDo6X0V4cHIsX0RvbT4sX1Rw
PiBfRXhwcjxfRG9tLF9UcD46Om9wZXJhdG9yIC0gKCkgY29uc3QgeyB0eXBlZGVmIF9VbkNsb3M8
bmVnYXRlLHN0ZDo6X0V4cHIsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxf
VHA+IChfQ2xvc3VyZSAodGhpcy0+X01fY2xvc3VyZSkpOyB9DQogICAgdGVtcGxhdGU8Y2xhc3Mg
X0RvbSwgdHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X1VuQ2xvczxfQml0d2lzZV9ub3Qsc3Rk
OjpfRXhwcixfRG9tPixfVHA+IF9FeHByPF9Eb20sX1RwPjo6b3BlcmF0b3IgfiAoKSBjb25zdCB7
IHR5cGVkZWYgX1VuQ2xvczxfQml0d2lzZV9ub3Qsc3RkOjpfRXhwcixfRG9tPiBfQ2xvc3VyZTsg
cmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlICh0aGlzLT5fTV9jbG9zdXJlKSk7
IH0NCiMgODU4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3ZhbGFycmF5X21ldGEuaCIgMw0K
ICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5D
bG9zPHBsdXMsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+LCB0eXBlbmFtZSBwbHVzPHR5cGVuYW1l
IF9Eb20xOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yICsgKGNvbnN0IF9FeHBy
PF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9t
Mix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVuYW1lIF9E
b20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgcGx1czxfQXJnPjo6cmVzdWx0
X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPHBsdXMsX0V4cHIsX0V4cHIsX0RvbTEsX0Rv
bTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9f
diAoKSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5D
bG9zPHBsdXMsX0V4cHIsX0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4s
IHR5cGVuYW1lIHBsdXM8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBv
cGVyYXRvciArIChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBf
X3YsIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCkgeyB0eXBlZGVmIHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBwbHVzPF9Bcmc+Ojpy
ZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8cGx1cyxfRXhwcixfQ29uc3RhbnQs
X0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9z
dXJlIChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxf
QmluQ2xvczxwbHVzLF9Db25zdGFudCxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9E
b20+LCB0eXBlbmFtZSBwbHVzPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlw
ZT4gb3BlcmF0b3IgKyAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25z
dCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0
eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgcGx1czxfQXJn
Pjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPHBsdXMsX0NvbnN0YW50LF9F
eHByLF9BcmcsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChf
Q2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4
cHI8X0JpbkNsb3M8cGx1cyxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1
ZV90eXBlPiwgdHlwZW5hbWUgcGx1czx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0
X3R5cGU+IG9wZXJhdG9yICsgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9f
dikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBl
bmFtZSBwbHVzPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8cGx1
cyxfRXhwcixfVmFsQXJyYXksX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z
dXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9E
b20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxwbHVzLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0eXBlbmFtZSBwbHVzPHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgKyAoY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7
IHR5cGVkZWYgdHlwZW5hbWUgcGx1czxfVHA+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYg
X0JpbkNsb3M8cGx1cyxfVmFsQXJyYXksX0V4cHIsX1RwLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4g
X0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiwgX19lICgpKSk7IH0NCiAgICB0
ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxt
aW51cyxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4sIHR5cGVuYW1lIG1pbnVzPHR5cGVuYW1lIF9E
b20xOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yIC0gKGNvbnN0IF9FeHByPF9E
b20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tMix0
eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb20x
Ojp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbWludXM8X0FyZz46OnJlc3VsdF90
eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxtaW51cyxfRXhwcixfRXhwcixfRG9tMSxfRG9t
Mj4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192
ICgpLCBfX3cgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNs
b3M8bWludXMsX0V4cHIsX0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4s
IHR5cGVuYW1lIG1pbnVzPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4g
b3BlcmF0b3IgLSAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYg
X192LCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBl
bmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbWludXM8X0FyZz46
OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxtaW51cyxfRXhwcixfQ29uc3Rh
bnQsX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9D
bG9zdXJlIChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhw
cjxfQmluQ2xvczxtaW51cyxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZSxfRG9tPiwgdHlwZW5hbWUgbWludXM8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3Vs
dF90eXBlPiBvcGVyYXRvciAtIChjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3Qs
IGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBl
ZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBtaW51
czxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG1pbnVzLF9Db25z
dGFudCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1Zh
bHVlPiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5s
aW5lIF9FeHByPF9CaW5DbG9zPG1pbnVzLF9FeHByLF9WYWxBcnJheSxfRG9tLHR5cGVuYW1lIF9E
b206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBtaW51czx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl
Pjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yIC0gKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0Rv
bTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlw
ZWRlZiB0eXBlbmFtZSBtaW51czxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9C
aW5DbG9zPG1pbnVzLF9FeHByLF9WYWxBcnJheSxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4g
X0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fZSAoKSwgX192KSk7IH0gdGVtcGxh
dGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG1pbnVzLF9WYWxBcnJheSxfRXhw
cix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0eXBlbmFtZSBtaW51czx0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yIC0gKGNvbnN0IHZhbGFy
cmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20sdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZh
bHVlX3R5cGUgX1RwOyB0eXBlZGVmIHR5cGVuYW1lIG1pbnVzPF9UcD46OnJlc3VsdF90eXBlIF9W
YWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxtaW51cyxfVmFsQXJyYXksX0V4cHIsX1RwLF9Eb20+IF9D
bG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiwgX19l
ICgpKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGlubGluZSBf
RXhwcjxfQmluQ2xvczxtdWx0aXBsaWVzLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwgdHlwZW5h
bWUgbXVsdGlwbGllczx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBv
cGVyYXRvciAqIChjb25zdCBfRXhwcjxfRG9tMSx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT4m
IF9fdiwgY29uc3QgX0V4cHI8X0RvbTIsdHlwZW5hbWUgX0RvbTI6OnZhbHVlX3R5cGU+JiBfX3cp
IHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVu
YW1lIG11bHRpcGxpZXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xv
czxtdWx0aXBsaWVzLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJuIF9F
eHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRlbXBs
YXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtdWx0aXBsaWVzLF9FeHByLF9D
b25zdGFudCxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBtdWx0aXBs
aWVzPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgKiAo
Y29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCB0
eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbXVsdGlwbGllczxfQXJnPjo6cmVzdWx0
X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG11bHRpcGxpZXMsX0V4cHIsX0NvbnN0YW50
LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xv
c3VyZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8
X0JpbkNsb3M8bXVsdGlwbGllcyxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZSxfRG9tPiwgdHlwZW5hbWUgbXVsdGlwbGllczx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl
Pjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yICogKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5
cGUmIF9fdCwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192
KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVu
YW1lIG11bHRpcGxpZXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xv
czxtdWx0aXBsaWVzLF9Db25zdGFudCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4g
X0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxh
dGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG11bHRpcGxpZXMsX0V4cHIsX1Zh
bEFycmF5LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIG11bHRpcGxp
ZXM8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAqIChj
b25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UsIGNvbnN0IHZh
bGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbXVsdGlwbGllczxfQXJn
Pjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG11bHRpcGxpZXMsX0V4cHIs
X1ZhbEFycmF5LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFs
dWU+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxp
bmUgX0V4cHI8X0JpbkNsb3M8bXVsdGlwbGllcyxfVmFsQXJyYXksX0V4cHIsdHlwZW5hbWUgX0Rv
bTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgbXVsdGlwbGllczx0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yICogKGNvbnN0IHZhbGFycmF5PHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0Rv
bTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUg
X1RwOyB0eXBlZGVmIHR5cGVuYW1lIG11bHRpcGxpZXM8X1RwPjo6cmVzdWx0X3R5cGUgX1ZhbHVl
OyB0eXBlZGVmIF9CaW5DbG9zPG11bHRpcGxpZXMsX1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBf
Q2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YsIF9f
ZSAoKSkpOyB9DQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiBpbmxpbmUg
X0V4cHI8X0JpbkNsb3M8ZGl2aWRlcyxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4sIHR5cGVuYW1l
IGRpdmlkZXM8dHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0
b3IgLyAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+JiBfX3Ys
IGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193KSB7IHR5
cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBk
aXZpZGVzPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8ZGl2aWRl
cyxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3Vy
ZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBf
RG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8ZGl2aWRlcyxfRXhwcixfQ29uc3RhbnQsX0RvbSx0
eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgZGl2aWRlczx0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yIC8gKGNvbnN0IF9FeHByPF9Eb20s
dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZSYgX190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0
eXBlZGVmIHR5cGVuYW1lIGRpdmlkZXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRl
ZiBfQmluQ2xvczxkaXZpZGVzLF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9zdXJlOyBy
ZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX190KSk7IH0g
dGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGRpdmlkZXMsX0NvbnN0
YW50LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIGRpdmlk
ZXM8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAvIChj
b25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QsIGNvbnN0IF9FeHByPF9Eb20sdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZh
bHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBkaXZpZGVzPF9Bcmc+OjpyZXN1bHRfdHlw
ZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8ZGl2aWRlcyxfQ29uc3RhbnQsX0V4cHIsX0FyZyxf
RG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChf
X3QsIF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xv
czxkaXZpZGVzLF9FeHByLF9WYWxBcnJheSxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+
LCB0eXBlbmFtZSBkaXZpZGVzPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlw
ZT4gb3BlcmF0b3IgLyAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl
PiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7
IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1l
IGRpdmlkZXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxkaXZp
ZGVzLF9FeHByLF9WYWxBcnJheSxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Ns
b3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fZSAoKSwgX192KSk7IH0gdGVtcGxhdGU8Y2xhc3Mg
X0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGRpdmlkZXMsX1ZhbEFycmF5LF9FeHByLHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIGRpdmlkZXM8dHlwZW5hbWUgX0Rv
bTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAvIChjb25zdCB2YWxhcnJheTx0
eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1l
IF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90
eXBlIF9UcDsgdHlwZWRlZiB0eXBlbmFtZSBkaXZpZGVzPF9UcD46OnJlc3VsdF90eXBlIF9WYWx1
ZTsgdHlwZWRlZiBfQmluQ2xvczxkaXZpZGVzLF9WYWxBcnJheSxfRXhwcixfVHAsX0RvbT4gX0Ns
b3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192LCBfX2Ug
KCkpKTsgfQ0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9F
eHByPF9CaW5DbG9zPG1vZHVsdXMsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+LCB0eXBlbmFtZSBt
b2R1bHVzPHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9y
ICUgKGNvbnN0IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX192LCBj
b25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBl
ZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbW9k
dWx1czxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG1vZHVsdXMs
X0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUs
X1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0Rv
bT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG1vZHVsdXMsX0V4cHIsX0NvbnN0YW50LF9Eb20sdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIG1vZHVsdXM8dHlwZW5hbWUgX0RvbTo6
dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAlIChjb25zdCBfRXhwcjxfRG9tLHR5
cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGUmIF9fdCkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlw
ZWRlZiB0eXBlbmFtZSBtb2R1bHVzPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYg
X0JpbkNsb3M8bW9kdWx1cyxfRXhwcixfQ29uc3RhbnQsX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0
dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdCkpOyB9IHRl
bXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtb2R1bHVzLF9Db25zdGFu
dCxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0eXBlbmFtZSBtb2R1bHVz
PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgJSAoY29u
c3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1
ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbW9kdWx1czxfQXJnPjo6cmVzdWx0X3R5cGUg
X1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG1vZHVsdXMsX0NvbnN0YW50LF9FeHByLF9BcmcsX0Rv
bT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX190
LCBfX3YgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8
bW9kdWx1cyxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwg
dHlwZW5hbWUgbW9kdWx1czx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+
IG9wZXJhdG9yICUgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4m
IF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0
eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBt
b2R1bHVzPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8bW9kdWx1
cyxfRXhwcixfVmFsQXJyYXksX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z
dXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9E
b20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtb2R1bHVzLF9WYWxBcnJheSxfRXhwcix0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0eXBlbmFtZSBtb2R1bHVzPHR5cGVuYW1lIF9Eb206
OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgJSAoY29uc3QgdmFsYXJyYXk8dHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZSBfVHA7IHR5cGVkZWYgdHlwZW5hbWUgbW9kdWx1czxfVHA+OjpyZXN1bHRfdHlwZSBfVmFsdWU7
IHR5cGVkZWYgX0JpbkNsb3M8bW9kdWx1cyxfVmFsQXJyYXksX0V4cHIsX1RwLF9Eb20+IF9DbG9z
dXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiwgX19lICgp
KSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGlubGluZSBfRXhw
cjxfQmluQ2xvczxfQml0d2lzZV94b3IsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+LCB0eXBlbmFt
ZSBfQml0d2lzZV94b3I8dHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4g
b3BlcmF0b3IgXiAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+
JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193
KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBl
bmFtZSBfQml0d2lzZV94b3I8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmlu
Q2xvczxfQml0d2lzZV94b3IsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+IF9DbG9zdXJlOyByZXR1
cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX193ICgpKSk7IH0g
dGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX3hvcixf
RXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUg
X0JpdHdpc2VfeG9yPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3Bl
cmF0b3IgXiAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192
LCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgX0JpdHdpc2VfeG9yPF9B
cmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfeG9yLF9F
eHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUs
X1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX190KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4g
aW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX3hvcixfQ29uc3RhbnQsX0V4cHIsdHlwZW5h
bWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgX0JpdHdpc2VfeG9yPHR5cGVuYW1l
IF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgXiAoY29uc3QgdHlwZW5h
bWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206
OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9B
cmc7IHR5cGVkZWYgdHlwZW5hbWUgX0JpdHdpc2VfeG9yPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFs
dWU7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfeG9yLF9Db25zdGFudCxfRXhwcixfQXJnLF9E
b20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9f
dCwgX192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9z
PF9CaXR3aXNlX3hvcixfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90
eXBlPiwgdHlwZW5hbWUgX0JpdHdpc2VfeG9yPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+Ojpy
ZXN1bHRfdHlwZT4gb3BlcmF0b3IgXiAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl
PiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVm
IHR5cGVuYW1lIF9CaXR3aXNlX3hvcjxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVm
IF9CaW5DbG9zPF9CaXR3aXNlX3hvcixfRXhwcixfVmFsQXJyYXksX0RvbSxfQXJnPiBfQ2xvc3Vy
ZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX2UgKCksIF9fdikp
OyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfQml0d2lzZV94
b3IsX1ZhbEFycmF5LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVu
YW1lIF9CaXR3aXNlX3hvcjx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+
IG9wZXJhdG9yIF4gKGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBf
X3YsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0
eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIHR5cGVuYW1lIF9C
aXR3aXNlX3hvcjxfVHA+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X0Jp
dHdpc2VfeG9yLF9WYWxBcnJheSxfRXhwcixfVHAsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhw
cjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192LCBfX2UgKCkpKTsgfQ0KICAgIHRlbXBs
YXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3
aXNlX2FuZCxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4sIHR5cGVuYW1lIF9CaXR3aXNlX2FuZDx0
eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAmIChjb25z
dCBfRXhwcjxfRG9tMSx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4
cHI8X0RvbTIsdHlwZW5hbWUgX0RvbTI6OnZhbHVlX3R5cGU+JiBfX3cpIHsgdHlwZWRlZiB0eXBl
bmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIF9CaXR3aXNlX2Fu
ZDxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX2Fu
ZCxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3Vy
ZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBf
RG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9FeHByLF9Db25zdGFudCxf
RG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBfQml0d2lzZV9hbmQ8dHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAmIChjb25zdCBf
RXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IHR5cGVuYW1l
IF9Eb206OnZhbHVlX3R5cGUmIF9fdCkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5
cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBfQml0d2lzZV9hbmQ8X0FyZz46OnJlc3VsdF90eXBl
IF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfQml0d2lzZV9hbmQsX0V4cHIsX0NvbnN0YW50LF9E
b20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3Vy
ZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0Jp
bkNsb3M8X0JpdHdpc2VfYW5kLF9Db25zdGFudCxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90
eXBlLF9Eb20+LCB0eXBlbmFtZSBfQml0d2lzZV9hbmQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAmIChjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90
eXBlJiBfX3QsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9f
dikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBl
bmFtZSBfQml0d2lzZV9hbmQ8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmlu
Q2xvczxfQml0d2lzZV9hbmQsX0NvbnN0YW50LF9FeHByLF9BcmcsX0RvbT4gX0Nsb3N1cmU7IHJl
dHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0
ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9F
eHByLF9WYWxBcnJheSxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBf
Qml0d2lzZV9hbmQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVy
YXRvciAmIChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2Us
IGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRl
ZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgX0JpdHdp
c2VfYW5kPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdp
c2VfYW5kLF9FeHByLF9WYWxBcnJheSxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8
X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fZSAoKSwgX192KSk7IH0gdGVtcGxhdGU8Y2xh
c3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX2FuZCxfVmFsQXJyYXksX0V4
cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgX0JpdHdpc2VfYW5k
PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgJiAoY29u
c3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8
X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgdHlwZW5hbWUgX0JpdHdpc2VfYW5kPF9UcD46
OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfQml0d2lzZV9hbmQsX1ZhbEFy
cmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1
ZT4gKF9DbG9zdXJlIChfX3YsIF9fZSAoKSkpOyB9DQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEs
IGNsYXNzIF9Eb20yPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2Vfb3IsX0V4cHIsX0V4
cHIsX0RvbTEsX0RvbTI+LCB0eXBlbmFtZSBfQml0d2lzZV9vcjx0eXBlbmFtZSBfRG9tMTo6dmFs
dWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciB8IChjb25zdCBfRXhwcjxfRG9tMSx0eXBl
bmFtZSBfRG9tMTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbTIsdHlwZW5hbWUg
X0RvbTI6OnZhbHVlX3R5cGU+JiBfX3cpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVf
dHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIF9CaXR3aXNlX29yPF9Bcmc+OjpyZXN1bHRfdHlw
ZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2Vfb3IsX0V4cHIsX0V4cHIsX0RvbTEs
X0RvbTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUg
KF9fdiAoKSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9C
aW5DbG9zPF9CaXR3aXNlX29yLF9FeHByLF9Db25zdGFudCxfRG9tLHR5cGVuYW1lIF9Eb206OnZh
bHVlX3R5cGU+LCB0eXBlbmFtZSBfQml0d2lzZV9vcjx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl
Pjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yIHwgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0Rv
bTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190
KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVu
YW1lIF9CaXR3aXNlX29yPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNs
b3M8X0JpdHdpc2Vfb3IsX0V4cHIsX0NvbnN0YW50LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVy
biBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1w
bGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2Vfb3IsX0NvbnN0
YW50LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIF9CaXR3
aXNlX29yPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3Ig
fCAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9t
LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgX0JpdHdpc2Vfb3I8X0FyZz46OnJl
c3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfQml0d2lzZV9vcixfQ29uc3RhbnQs
X0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4g
KF9DbG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBf
RXhwcjxfQmluQ2xvczxfQml0d2lzZV9vcixfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgX0JpdHdpc2Vfb3I8dHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciB8IChjb25zdCBfRXhwcjxfRG9tLHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UsIGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206
OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9B
cmc7IHR5cGVkZWYgdHlwZW5hbWUgX0JpdHdpc2Vfb3I8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1
ZTsgdHlwZWRlZiBfQmluQ2xvczxfQml0d2lzZV9vcixfRXhwcixfVmFsQXJyYXksX0RvbSxfQXJn
PiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX2Ug
KCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxf
Qml0d2lzZV9vcixfVmFsQXJyYXksX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9t
PiwgdHlwZW5hbWUgX0JpdHdpc2Vfb3I8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3Vs
dF90eXBlPiBvcGVyYXRvciB8IChjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90
eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBf
X2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiB0eXBl
bmFtZSBfQml0d2lzZV9vcjxfVHA+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNs
b3M8X0JpdHdpc2Vfb3IsX1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJu
IF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YsIF9fZSAoKSkpOyB9DQogICAg
dGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8
X1NoaWZ0X2xlZnQsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+LCB0eXBlbmFtZSBfU2hpZnRfbGVm
dDx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciA8PCAo
Y29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0
IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193KSB7IHR5cGVkZWYg
dHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBfU2hpZnRf
bGVmdDxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPF9TaGlmdF9s
ZWZ0LF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z
dXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRlbXBsYXRlPGNsYXNz
IF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfbGVmdCxfRXhwcixfQ29uc3RhbnQs
X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgX1NoaWZ0X2xlZnQ8dHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciA8PCAoY29uc3Qg
X0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCB0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90
eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgX1NoaWZ0X2xlZnQ8X0FyZz46OnJlc3VsdF90eXBl
IF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfbGVmdCxfRXhwcixfQ29uc3RhbnQsX0Rv
bSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJl
IChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmlu
Q2xvczxfU2hpZnRfbGVmdCxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZSxfRG9tPiwgdHlwZW5hbWUgX1NoaWZ0X2xlZnQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46
OnJlc3VsdF90eXBlPiBvcGVyYXRvciA8PCAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3Yp
IHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5h
bWUgX1NoaWZ0X2xlZnQ8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xv
czxfU2hpZnRfbGVmdCxfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJu
IF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBs
YXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfbGVmdCxfRXhwcixf
VmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgX1NoaWZ0
X2xlZnQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciA8
PCAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25z
dCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIF9TaGlmdF9sZWZ0
PF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X1NoaWZ0X2xlZnQs
X0V4cHIsX1ZhbEFycmF5LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3Vy
ZSxfVmFsdWU+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9t
PiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X1NoaWZ0X2xlZnQsX1ZhbEFycmF5LF9FeHByLHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIF9TaGlmdF9sZWZ0PHR5cGVuYW1l
IF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgPDwgKGNvbnN0IHZhbGFy
cmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20sdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZh
bHVlX3R5cGUgX1RwOyB0eXBlZGVmIHR5cGVuYW1lIF9TaGlmdF9sZWZ0PF9UcD46OnJlc3VsdF90
eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfbGVmdCxfVmFsQXJyYXksX0V4cHIs
X1RwLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1
cmUgKF9fdiwgX19lICgpKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0Rv
bTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfcmlnaHQsX0V4cHIsX0V4cHIsX0RvbTEs
X0RvbTI+LCB0eXBlbmFtZSBfU2hpZnRfcmlnaHQ8dHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+
OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgPj4gKGNvbnN0IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9E
b20xOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6
dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9B
cmc7IHR5cGVkZWYgdHlwZW5hbWUgX1NoaWZ0X3JpZ2h0PF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFs
dWU7IHR5cGVkZWYgX0JpbkNsb3M8X1NoaWZ0X3JpZ2h0LF9FeHByLF9FeHByLF9Eb20xLF9Eb20y
PiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3Yg
KCksIF9fdyAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xv
czxfU2hpZnRfcmlnaHQsX0V4cHIsX0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZT4sIHR5cGVuYW1lIF9TaGlmdF9yaWdodDx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6
cmVzdWx0X3R5cGU+IG9wZXJhdG9yID4+IChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206
OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCkg
eyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFt
ZSBfU2hpZnRfcmlnaHQ8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xv
czxfU2hpZnRfcmlnaHQsX0V4cHIsX0NvbnN0YW50LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVy
biBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1w
bGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X1NoaWZ0X3JpZ2h0LF9Db25z
dGFudCxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0eXBlbmFtZSBfU2hp
ZnRfcmlnaHQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRv
ciA+PiAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxf
RG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgX1NoaWZ0X3JpZ2h0PF9Bcmc+
OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X1NoaWZ0X3JpZ2h0LF9Db25z
dGFudCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1Zh
bHVlPiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5s
aW5lIF9FeHByPF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBl
bmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgX1NoaWZ0X3JpZ2h0PHR5cGVuYW1lIF9E
b206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgPj4gKGNvbnN0IF9FeHByPF9E
b20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5h
bWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBfU2hpZnRfcmlnaHQ8X0FyZz46OnJlc3VsdF90
eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfcmlnaHQsX0V4cHIsX1ZhbEFycmF5
LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xv
c3VyZSAoX19lICgpLCBfX3YpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8
X0JpbkNsb3M8X1NoaWZ0X3JpZ2h0LF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1
ZV90eXBlLF9Eb20+LCB0eXBlbmFtZSBfU2hpZnRfcmlnaHQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciA+PiAoY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7
IHR5cGVkZWYgdHlwZW5hbWUgX1NoaWZ0X3JpZ2h0PF9UcD46OnJlc3VsdF90eXBlIF9WYWx1ZTsg
dHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfcmlnaHQsX1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBf
Q2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YsIF9f
ZSAoKSkpOyB9DQojIDkyNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJheV9tZXRh
LmgiIDMNCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGlubGluZSBfRXhw
cjxfQmluQ2xvczxsb2dpY2FsX2FuZCxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4sIGJvb2w+IG9w
ZXJhdG9yICYmIChjb25zdCBfRXhwcjxfRG9tMSx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT4m
IF9fdiwgY29uc3QgX0V4cHI8X0RvbTIsdHlwZW5hbWUgX0RvbTI6OnZhbHVlX3R5cGU+JiBfX3cp
IHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5D
bG9zPGxvZ2ljYWxfYW5kLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJu
IF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkpKTsgfSB0ZW1w
bGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bG9naWNhbF9hbmQsX0V4cHIs
X0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIGJvb2w+IG9wZXJhdG9y
ICYmIChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNv
bnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCkgeyB0eXBlZGVmIHR5cGVuYW1lIF9E
b206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiBfQmluQ2xvczxsb2dpY2FsX2FuZCxfRXhwcixf
Q29uc3RhbnQsX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+
IChfQ2xvc3VyZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUg
X0V4cHI8X0JpbkNsb3M8bG9naWNhbF9hbmQsX0NvbnN0YW50LF9FeHByLHR5cGVuYW1lIF9Eb206
OnZhbHVlX3R5cGUsX0RvbT4sIGJvb2w+IG9wZXJhdG9yICYmIChjb25zdCB0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlJiBfX3QsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlw
ZWRlZiBfQmluQ2xvczxsb2dpY2FsX2FuZCxfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9tPiBfQ2xv
c3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX190LCBfX3YgKCkp
KTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bG9naWNhbF9h
bmQsX0V4cHIsX1ZhbEFycmF5LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIGJvb2w+
IG9wZXJhdG9yICYmIChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+
JiBfX2UsIGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsg
dHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfQmluQ2xvczxs
b2dpY2FsX2FuZCxfRXhwcixfVmFsQXJyYXksX0RvbSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4
cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNs
YXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsb2dpY2FsX2FuZCxfVmFsQXJyYXksX0V4
cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4gb3BlcmF0b3IgJiYgKGNv
bnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHBy
PF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1l
IF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfYW5kLF9WYWxB
cnJheSxfRXhwcixfVHAsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29s
PiAoX0Nsb3N1cmUgKF9fdiwgX19lICgpKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwg
Y2xhc3MgX0RvbTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsb2dpY2FsX29yLF9FeHByLF9FeHBy
LF9Eb20xLF9Eb20yPiwgYm9vbD4gb3BlcmF0b3IgfHwgKGNvbnN0IF9FeHByPF9Eb20xLHR5cGVu
YW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBf
RG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90
eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8bG9naWNhbF9vcixfRXhwcixfRXhwcixfRG9tMSxf
RG9tMj4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9f
diAoKSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5D
bG9zPGxvZ2ljYWxfb3IsX0V4cHIsX0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZT4sIGJvb2w+IG9wZXJhdG9yIHx8IChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206
OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCkg
eyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiBfQmluQ2xv
czxsb2dpY2FsX29yLF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4g
X0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRl
PGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsb2dpY2FsX29yLF9Db25zdGFudCxf
RXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCBib29sPiBvcGVyYXRvciB8fCAo
Y29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5
cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8bG9naWNhbF9vcixfQ29uc3RhbnQsX0V4
cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xv
c3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8
X0JpbkNsb3M8bG9naWNhbF9vcixfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgfHwgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0
eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfb3IsX0V4cHIsX1ZhbEFycmF5LF9Eb20sX1RwPiBfQ2xv
c3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX19lICgpLCBfX3Yp
KTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bG9naWNhbF9v
cixfVmFsQXJyYXksX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4g
b3BlcmF0b3IgfHwgKGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBf
X3YsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0
eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9CaW5DbG9zPGxv
Z2ljYWxfb3IsX1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHBy
PF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX2UgKCkpKTsgfQ0KICAgIHRlbXBsYXRl
PGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGVxdWFsX3Rv
LF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwgYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0IF9FeHBy
PF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9t
Mix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVuYW1lIF9E
b20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8ZXF1YWxfdG8sX0V4cHIsX0V4
cHIsX0RvbTEsX0RvbTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9D
bG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBf
RXhwcjxfQmluQ2xvczxlcXVhbF90byxfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5h
bWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZSYgX190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVm
IF9CaW5DbG9zPGVxdWFsX3RvLF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9zdXJlOyBy
ZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3YgKCksIF9fdCkpOyB9IHRl
bXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxlcXVhbF90byxfQ29uc3Rh
bnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4gb3BlcmF0b3Ig
PT0gKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3QgX0V4cHI8X0Rv
bSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0Rv
bTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGVxdWFsX3RvLF9Db25zdGFudCxf
RXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9D
bG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhw
cjxfQmluQ2xvczxlcXVhbF90byxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0
eXBlZGVmIF9CaW5DbG9zPGVxdWFsX3RvLF9FeHByLF9WYWxBcnJheSxfRG9tLF9UcD4gX0Nsb3N1
cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fZSAoKSwgX192KSk7
IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGVxdWFsX3RvLF9W
YWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCBib29sPiBvcGVy
YXRvciA9PSAoY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwg
Y29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVk
ZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8ZXF1YWxf
dG8sX1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z
dXJlLGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX2UgKCkpKTsgfQ0KICAgIHRlbXBsYXRlPGNsYXNz
IF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG5vdF9lcXVhbF90byxf
RXhwcixfRXhwcixfRG9tMSxfRG9tMj4sIGJvb2w+IG9wZXJhdG9yICE9IChjb25zdCBfRXhwcjxf
RG9tMSx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbTIs
dHlwZW5hbWUgX0RvbTI6OnZhbHVlX3R5cGU+JiBfX3cpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9t
MTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPG5vdF9lcXVhbF90byxfRXhwcixf
RXhwcixfRG9tMSxfRG9tMj4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAo
X0Nsb3N1cmUgKF9fdiAoKSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5l
IF9FeHByPF9CaW5DbG9zPG5vdF9lcXVhbF90byxfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgIT0gKGNvbnN0IF9FeHByPF9Eb20s
dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZSYgX190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0
eXBlZGVmIF9CaW5DbG9zPG5vdF9lcXVhbF90byxfRXhwcixfQ29uc3RhbnQsX0RvbSxfQXJnPiBf
Q2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBf
X3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bm90X2Vx
dWFsX3RvLF9Db25zdGFudCxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCBi
b29sPiBvcGVyYXRvciAhPSAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBj
b25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRl
ZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8bm90X2Vx
dWFsX3RvLF9Db25zdGFudCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8
X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNsYXNz
IF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxub3RfZXF1YWxfdG8sX0V4cHIsX1ZhbEFycmF5
LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIGJvb2w+IG9wZXJhdG9yICE9IChjb25z
dCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UsIGNvbnN0IHZhbGFy
cmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfQmluQ2xvczxub3RfZXF1YWxfdG8sX0V4cHIs
X1ZhbEFycmF5LF9Eb20sX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+
IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUg
X0V4cHI8X0JpbkNsb3M8bm90X2VxdWFsX3RvLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlLF9Eb20+LCBib29sPiBvcGVyYXRvciAhPSAoY29uc3QgdmFsYXJyYXk8dHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8bm90X2VxdWFsX3RvLF9WYWxBcnJheSxfRXhwcixfVHAs
X0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9f
diwgX19lICgpKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGlu
bGluZSBfRXhwcjxfQmluQ2xvczxsZXNzLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwgYm9vbD4g
b3BlcmF0b3IgPCAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+
JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193
KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiBfQmlu
Q2xvczxsZXNzLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHBy
PF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkpKTsgfSB0ZW1wbGF0ZTxj
bGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bGVzcyxfRXhwcixfQ29uc3RhbnQsX0Rv
bSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPCAoY29uc3QgX0V4
cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCB0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl
IF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8bGVzcyxfRXhwcixfQ29uc3RhbnQsX0RvbSxfQXJnPiBf
Q2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBf
X3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bGVzcyxf
Q29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4gb3Bl
cmF0b3IgPCAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhw
cjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8bGVzcyxfQ29uc3RhbnQs
X0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChf
Q2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4
cHI8X0JpbkNsb3M8bGVzcyxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1
ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPCAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90
eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVk
ZWYgX0JpbkNsb3M8bGVzcyxfRXhwcixfVmFsQXJyYXksX0RvbSxfVHA+IF9DbG9zdXJlOyByZXR1
cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBs
YXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsZXNzLF9WYWxBcnJheSxfRXhw
cix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCBib29sPiBvcGVyYXRvciA8IChjb25z
dCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxf
RG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfQmluQ2xvczxsZXNzLF9WYWxBcnJheSxfRXhw
cixfVHAsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1
cmUgKF9fdiwgX19lICgpKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0Rv
bTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxncmVhdGVyLF9FeHByLF9FeHByLF9Eb20xLF9Eb20y
PiwgYm9vbD4gb3BlcmF0b3IgPiAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZh
bHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90
eXBlPiYgX193KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlw
ZWRlZiBfQmluQ2xvczxncmVhdGVyLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsg
cmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkpKTsg
fSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8Z3JlYXRlcixfRXhw
cixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0
b3IgPiAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBj
b25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcixfRXhwcixfQ29u
c3RhbnQsX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChf
Q2xvc3VyZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4
cHI8X0JpbkNsb3M8Z3JlYXRlcixfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZSxfRG9tPiwgYm9vbD4gb3BlcmF0b3IgPiAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBf
X3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0Jp
bkNsb3M8Z3JlYXRlcixfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJu
IF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1wbGF0
ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8Z3JlYXRlcixfRXhwcixfVmFsQXJy
YXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPiAoY29u
c3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxh
cnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcixfRXhwcixfVmFs
QXJyYXksX0RvbSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9D
bG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhw
cjxfQmluQ2xvczxncmVhdGVyLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90
eXBlLF9Eb20+LCBib29sPiBvcGVyYXRvciA+IChjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlw
ZWRlZiBfQmluQ2xvczxncmVhdGVyLF9WYWxBcnJheSxfRXhwcixfVHAsX0RvbT4gX0Nsb3N1cmU7
IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdiwgX19lICgpKSk7IH0N
CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGlubGluZSBfRXhwcjxfQmlu
Q2xvczxsZXNzX2VxdWFsLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwgYm9vbD4gb3BlcmF0b3Ig
PD0gKGNvbnN0IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX192LCBj
b25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBl
ZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8bGVz
c19lcXVhbCxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxf
Q2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xh
c3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxlc3NfZXF1YWwsX0V4cHIsX0NvbnN0YW50
LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIGJvb2w+IG9wZXJhdG9yIDw9IChjb25z
dCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGUgX0FyZzsgdHlwZWRlZiBfQmluQ2xvczxsZXNzX2VxdWFsLF9FeHByLF9Db25zdGFudCxf
RG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJl
IChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmlu
Q2xvczxsZXNzX2VxdWFsLF9Db25zdGFudCxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl
LF9Eb20+LCBib29sPiBvcGVyYXRvciA8PSAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3Yp
IHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNs
b3M8bGVzc19lcXVhbCxfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJu
IF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1wbGF0
ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bGVzc19lcXVhbCxfRXhwcixfVmFs
QXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPD0g
KGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3Qg
dmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9CaW5DbG9zPGxlc3NfZXF1YWwsX0V4
cHIsX1ZhbEFycmF5LF9Eb20sX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJv
b2w+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxp
bmUgX0V4cHI8X0JpbkNsb3M8bGVzc19lcXVhbCxfVmFsQXJyYXksX0V4cHIsdHlwZW5hbWUgX0Rv
bTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4gb3BlcmF0b3IgPD0gKGNvbnN0IHZhbGFycmF5PHR5
cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5
cGUgX1RwOyB0eXBlZGVmIF9CaW5DbG9zPGxlc3NfZXF1YWwsX1ZhbEFycmF5LF9FeHByLF9UcCxf
RG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192
LCBfX2UgKCkpKTsgfQ0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5s
aW5lIF9FeHByPF9CaW5DbG9zPGdyZWF0ZXJfZXF1YWwsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+
LCBib29sPiBvcGVyYXRvciA+PSAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZh
bHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90
eXBlPiYgX193KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlw
ZWRlZiBfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xv
c3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cg
KCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8Z3JlYXRl
cl9lcXVhbCxfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwg
Ym9vbD4gb3BlcmF0b3IgPj0gKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190KSB7IHR5cGVk
ZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGdyZWF0
ZXJfZXF1YWwsX0V4cHIsX0NvbnN0YW50LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhw
cjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX190KSk7IH0gdGVtcGxhdGU8Y2xh
c3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGdyZWF0ZXJfZXF1YWwsX0NvbnN0YW50LF9F
eHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIGJvb2w+IG9wZXJhdG9yID49IChj
b25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QsIGNvbnN0IF9FeHByPF9Eb20sdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZh
bHVlX3R5cGUgX0FyZzsgdHlwZWRlZiBfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9Db25zdGFudCxf
RXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9D
bG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhw
cjxfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9FeHByLF9WYWxBcnJheSxfRG9tLHR5cGVuYW1lIF9E
b206OnZhbHVlX3R5cGU+LCBib29sPiBvcGVyYXRvciA+PSAoY29uc3QgX0V4cHI8X0RvbSx0eXBl
bmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBf
VHA7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcl9lcXVhbCxfRXhwcixfVmFsQXJyYXksX0RvbSxf
VHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX2Ug
KCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxn
cmVhdGVyX2VxdWFsLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9E
b20+LCBib29sPiBvcGVyYXRvciA+PSAoY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl
PiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYg
X0JpbkNsb3M8Z3JlYXRlcl9lcXVhbCxfVmFsQXJyYXksX0V4cHIsX1RwLF9Eb20+IF9DbG9zdXJl
OyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3YsIF9fZSAoKSkpOyB9
DQojIDk1OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92YWxhcnJheV9tZXRhLmgiIDMNCiAg
ICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9t
Pix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiBhYnMoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZSBfVHA7IHR5cGVkZWYgX1VuRnVuQ2xvczxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJu
IF9FeHByPF9DbG9zdXJlLF9UcD4oX0Nsb3N1cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmFicykp
KTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9WYWxB
cnJheSxfVHA+LF9UcD4gYWJzKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9V
bkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxf
VHA+IChfQ2xvc3VyZSAoX192LCAoX1RwKCopKF9UcCkpKCZhYnMpKSk7IH0NCiAgICB0ZW1wbGF0
ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlPiBjb3MoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7
IHR5cGVkZWYgX1VuRnVuQ2xvczxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9D
bG9zdXJlLF9UcD4oX0Nsb3N1cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmNvcykpKTsgfSB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+
LF9UcD4gY29zKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8
X1ZhbEFycmF5LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xv
c3VyZSAoX192LCAoX1RwKCopKF9UcCkpKCZjb3MpKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBf
RG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlPiBhY29zKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVm
IF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxf
VHA+KF9DbG9zdXJlKF9fZSgpLCAoX1RwKCopKF9UcCkpKCZhY29zKSkpOyB9IHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4sX1RwPiBh
Y29zKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8X1ZhbEFy
cmF5LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAo
X192LCAoX1RwKCopKF9UcCkpKCZhY29zKSkpOyB9DQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4g
aW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4sdHlwZW5hbWUgX0RvbTo6dmFsdWVf
dHlwZT4gY29zaChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBf
X2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfVW5G
dW5DbG9zPF9FeHByLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPihf
Q2xvc3VyZShfX2UoKSwgKF9UcCgqKShfVHApKSgmY29zaCkpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+LF9UcD4gY29zaChj
b25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIHsgdHlwZWRlZiBfVW5GdW5DbG9zPF9WYWxBcnJheSxf
VHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwg
KF9UcCgqKShfVHApKSgmY29zaCkpKTsgfQ0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGlu
ZSBfRXhwcjxfVW5GdW5DbG9zPF9FeHByLF9Eb20+LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+
IHNpbihjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsg
dHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfVW5GdW5DbG9z
PF9FeHByLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPihfQ2xvc3Vy
ZShfX2UoKSwgKF9UcCgqKShfVHApKSgmc2luKSkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g
aW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4sX1RwPiBzaW4oY29uc3QgdmFs
YXJyYXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xv
c3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIChfVHAoKiko
X1RwKSkoJnNpbikpKTsgfQ0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxf
VW5GdW5DbG9zPF9FeHByLF9Eb20+LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IGFzaW4oY29u
c3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYg
dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX1VuRnVuQ2xvczxfRXhwcixf
RG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4oX0Nsb3N1cmUoX19lKCks
IChfVHAoKikoX1RwKSkoJmFzaW4pKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUg
X0V4cHI8X1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPixfVHA+IGFzaW4oY29uc3QgdmFsYXJyYXk8
X1RwPiYgX192KSB7IHR5cGVkZWYgX1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsg
cmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIChfVHAoKikoX1RwKSko
JmFzaW4pKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVu
Q2xvczxfRXhwcixfRG9tPix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiBzaW5oKGNvbnN0IF9F
eHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4g
X0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+KF9DbG9zdXJlKF9fZSgpLCAoX1Rw
KCopKF9UcCkpKCZzaW5oKSkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHBy
PF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4sX1RwPiBzaW5oKGNvbnN0IHZhbGFycmF5PF9UcD4m
IF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4gX0Nsb3N1cmU7IHJldHVy
biBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX192LCAoX1RwKCopKF9UcCkpKCZzaW5o
KSkpOyB9DQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8
X0V4cHIsX0RvbT4sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gdGFuKGNvbnN0IF9FeHByPF9E
b20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9E
b206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4gX0Nsb3N1
cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+KF9DbG9zdXJlKF9fZSgpLCAoX1RwKCopKF9U
cCkpKCZ0YW4pKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X1VuRnVu
Q2xvczxfVmFsQXJyYXksX1RwPixfVHA+IHRhbihjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIHsg
dHlwZWRlZiBfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8
X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwgKF9UcCgqKShfVHApKSgmdGFuKSkpOyB9DQog
ICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X0V4cHIsX0Rv
bT4sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gdGFuaChjb25zdCBfRXhwcjxfRG9tLHR5cGVu
YW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1
ZV90eXBlIF9UcDsgdHlwZWRlZiBfVW5GdW5DbG9zPF9FeHByLF9Eb20+IF9DbG9zdXJlOyByZXR1
cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPihfQ2xvc3VyZShfX2UoKSwgKF9UcCgqKShfVHApKSgmdGFu
aCkpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9W
YWxBcnJheSxfVHA+LF9UcD4gdGFuaChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIHsgdHlwZWRl
ZiBfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1
cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwgKF9UcCgqKShfVHApKSgmdGFuaCkpKTsgfQ0KICAgIHRl
bXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9FeHByLF9Eb20+LHR5
cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IGF0YW4oY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBf
RG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw
ZSBfVHA7IHR5cGVkZWYgX1VuRnVuQ2xvczxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9F
eHByPF9DbG9zdXJlLF9UcD4oX0Nsb3N1cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmF0YW4pKSk7
IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfVmFsQXJy
YXksX1RwPixfVHA+IGF0YW4oY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX1Vu
RnVuQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9U
cD4gKF9DbG9zdXJlIChfX3YsIChfVHAoKikoX1RwKSkoJmF0YW4pKSk7IH0NCiAgICB0ZW1wbGF0
ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFt
ZSBfRG9tOjp2YWx1ZV90eXBlPiBleHAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7
IHR5cGVkZWYgX1VuRnVuQ2xvczxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9D
bG9zdXJlLF9UcD4oX0Nsb3N1cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmV4cCkpKTsgfSB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+
LF9UcD4gZXhwKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8
X1ZhbEFycmF5LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xv
c3VyZSAoX192LCAoX1RwKCopKF9UcCkpKCZleHApKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBf
RG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlPiBsb2coY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl
PiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYg
X1VuRnVuQ2xvczxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9U
cD4oX0Nsb3N1cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmxvZykpKTsgfSB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+LF9UcD4gbG9n
KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8X1ZhbEFycmF5
LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX192
LCAoX1RwKCopKF9UcCkpKCZsb2cpKSk7IH0NCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxp
bmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl
PiBsb2cxMChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2Up
IHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfVW5GdW5D
bG9zPF9FeHByLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPihfQ2xv
c3VyZShfX2UoKSwgKF9UcCgqKShfVHApKSgmbG9nMTApKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPixfVHA+IGxvZzEwKGNv
bnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9U
cD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX192LCAo
X1RwKCopKF9UcCkpKCZsb2cxMCkpKTsgfQ0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGlu
ZSBfRXhwcjxfVW5GdW5DbG9zPF9FeHByLF9Eb20+LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+
IHNxcnQoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7
IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX1VuRnVuQ2xv
czxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4oX0Nsb3N1
cmUoX19lKCksIChfVHAoKikoX1RwKSkoJnNxcnQpKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPixfVHA+IHNxcnQoY29uc3Qg
dmFsYXJyYXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPiBf
Q2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIChfVHAo
KikoX1RwKSkoJnNxcnQpKSk7IH0NCiMgMTA2MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy92
YWxhcnJheV9tZXRhLmgiIDMNCnRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5s
aW5lIF9FeHByPF9CaW5GdW5DbG9zPF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPix0eXBlbmFtZSBf
RG9tMTo6dmFsdWVfdHlwZT5hdGFuMiAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6
OnZhbHVlX3R5cGU+JiBfX2UxLCBjb25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFs
dWVfdHlwZT4mIF9fZTIpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfVHA7
IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+IF9DbG9zdXJlOyBy
ZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fZTEgKCksIF9fZTIgKCksIChf
VHAoKikoX1RwLCBfVHApKSgmYXRhbjIpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5l
IF9FeHByPF9CaW5GdW5DbG9zPF9FeHByLF9WYWxBcnJheSxfRG9tLHR5cGVuYW1lIF9Eb206OnZh
bHVlX3R5cGU+LCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiBhdGFuMiAoY29uc3QgX0V4cHI8
X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBl
bmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X0V4cHIsX1ZhbEFycmF5LF9Eb20sX1Rw
PiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX2UgKCks
IF9fdiwgKF9UcCgqKShfVHAsIF9UcCkpKCZhdGFuMikpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9t
PiBpbmxpbmUgX0V4cHI8X0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9FeHByLHR5cGVuYW1lIF9Eb206
OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IGF0YW4yIChjb25z
dCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWxhcnJheT4mIF9fdiwgY29uc3QgX0V4cHI8X0Rv
bSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0Rv
bTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9FeHByLF9U
cCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChf
X3YsIF9fZSAoKSwgKF9UcCgqKShfVHAsIF9UcCkpKCZhdGFuMikpKTsgfSB0ZW1wbGF0ZTxjbGFz
cyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkZ1bkNsb3M8X0V4cHIsX0NvbnN0YW50LF9Eb20sdHlw
ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IGF0YW4y
IChjb25zdCBfRXhwcjxfRG9tLCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25z
dCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9t
Ojp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfQmluRnVuQ2xvczxfRXhwcixfQ29uc3RhbnQsX0Rv
bSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9f
ZSAoKSwgX190LCAoX1RwKCopKF9UcCwgX1RwKSkoJmF0YW4yKSkpOyB9IHRlbXBsYXRlPGNsYXNz
IF9Eb20+IGlubGluZSBfRXhwcjxfQmluRnVuQ2xvczxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gYXRhbjIg
KGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3QgX0V4cHI8X0RvbSx0
eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6
dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X0NvbnN0YW50LF9FeHByLF9UcCxf
RG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3Qs
IF9fZSAoKSwgKF9UcCgqKShfVHAsIF9UcCkpKCZhdGFuMikpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+IGlubGluZSBfRXhwcjxfQmluRnVuQ2xvczxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxf
VHA+LCBfVHA+IGF0YW4yIChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIGNvbnN0IHZhbGFycmF5
PF9UcD4mIF9fdykgeyB0eXBlZGVmIF9CaW5GdW5DbG9zPF9WYWxBcnJheSxfVmFsQXJyYXksX1Rw
LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX192
LCBfX3csIChfVHAoKikoX1RwLF9UcCkpKCZhdGFuMikpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+IGlubGluZSBfRXhwcjxfQmluRnVuQ2xvczxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+
LF9UcD4gYXRhbjIgKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgY29uc3QgX1RwJiBfX3QpIHsg
dHlwZWRlZiBfQmluRnVuQ2xvczxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9zdXJl
OyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwgX190LCAoX1RwKCop
KF9UcCxfVHApKSgmYXRhbjIpKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4
cHI8X0JpbkZ1bkNsb3M8X0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPixfVHA+IGF0YW4yIChj
b25zdCBfVHAmIF9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX0JpbkZ1
bkNsb3M8X0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHBy
PF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3QsIF9fdiwgKF9UcCgqKShfVHAsX1RwKSkoJmF0
YW4yKSkpOyB9DQp0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGlubGluZSBfRXhw
cjxfQmluRnVuQ2xvczxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4sdHlwZW5hbWUgX0RvbTE6OnZh
bHVlX3R5cGU+cG93IChjb25zdCBfRXhwcjxfRG9tMSx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlw
ZT4mIF9fZTEsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYg
X19lMikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBf
QmluRnVuQ2xvczxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4gX0Nsb3N1cmU7IHJldHVybiBfRXhw
cjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX19lMSAoKSwgX19lMiAoKSwgKF9UcCgqKShfVHAs
IF9UcCkpKCZwb3cpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5G
dW5DbG9zPF9FeHByLF9WYWxBcnJheSxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0
eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiBwb3cgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUg
X0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFs
dWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0
eXBlZGVmIF9CaW5GdW5DbG9zPF9FeHByLF9WYWxBcnJheSxfRG9tLF9UcD4gX0Nsb3N1cmU7IHJl
dHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YsIChfVHAoKiko
X1RwLCBfVHApKSgmcG93KSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxf
QmluRnVuQ2xvczxfVmFsQXJyYXksX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9t
PiwgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gcG93IChjb25zdCB2YWxhcnJheTx0eXBlbmFt
ZSBfRG9tOjp2YWxhcnJheT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2
YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7
IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsg
cmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fZSAoKSwgKF9UcCgq
KShfVHAsIF9UcCkpKCZwb3cpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHBy
PF9CaW5GdW5DbG9zPF9FeHByLF9Db25zdGFudCxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5
cGU+LCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiBwb3cgKGNvbnN0IF9FeHByPF9Eb20sIHR5
cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UsIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVl
X3R5cGUmIF9fdCkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBl
ZGVmIF9CaW5GdW5DbG9zPF9FeHByLF9Db25zdGFudCxfRG9tLF9UcD4gX0Nsb3N1cmU7IHJldHVy
biBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX19lICgpLCBfX3QsIChfVHAoKikoX1Rw
LCBfVHApKSgmcG93KSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmlu
RnVuQ2xvczxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwg
dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gcG93IChjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1
ZV90eXBlJiBfX3QsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4m
IF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9C
aW5GdW5DbG9zPF9Db25zdGFudCxfRXhwcixfVHAsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhw
cjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX190LCBfX2UgKCksIChfVHAoKikoX1RwLCBfVHAp
KSgmcG93KSkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5GdW5D
bG9zPF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4sIF9UcD4gcG93IChjb25zdCB2YWxhcnJh
eTxfVHA+JiBfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdykgeyB0eXBlZGVmIF9CaW5GdW5D
bG9zPF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxf
Q2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX192LCBfX3csIChfVHAoKikoX1RwLF9UcCkpKCZwb3cp
KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkZ1bkNsb3M8X1Zh
bEFycmF5LF9Db25zdGFudCxfVHAsX1RwPixfVHA+IHBvdyAoY29uc3QgdmFsYXJyYXk8X1RwPiYg
X192LCBjb25zdCBfVHAmIF9fdCkgeyB0eXBlZGVmIF9CaW5GdW5DbG9zPF9WYWxBcnJheSxfQ29u
c3RhbnQsX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xv
c3VyZSAoX192LCBfX3QsIChfVHAoKikoX1RwLF9UcCkpKCZwb3cpKSk7IH0gdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkZ1bkNsb3M8X0NvbnN0YW50LF9WYWxBcnJheSxf
VHAsX1RwPixfVHA+IHBvdyAoY29uc3QgX1RwJiBfX3QsIGNvbnN0IHZhbGFycmF5PF9UcD4mIF9f
dikgeyB0eXBlZGVmIF9CaW5GdW5DbG9zPF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Ns
b3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX190LCBfX3YsIChf
VHAoKikoX1RwLF9UcCkpKCZwb3cpKSk7IH0NCg0KDQoNCn0NCiMgOTUgIi91c3IvaW5jbHVkZS9j
KysvMy4yL3ZhbGFycmF5IiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTxjbGFz
cyBfVHA+IGNsYXNzIHZhbGFycmF5DQogIHsNCiAgcHVibGljOg0KICAgICAgdHlwZWRlZiBfVHAg
dmFsdWVfdHlwZTsNCg0KDQogICAgICB2YWxhcnJheSgpOw0KICAgICAgZXhwbGljaXQgdmFsYXJy
YXkoc2l6ZV90KTsNCiAgICAgIHZhbGFycmF5KGNvbnN0IF9UcCYsIHNpemVfdCk7DQogICAgICB2
YWxhcnJheShjb25zdCBfVHAqIF9fcmVzdHJpY3RfXywgc2l6ZV90KTsNCiAgICAgIHZhbGFycmF5
KGNvbnN0IHZhbGFycmF5Jik7DQogICAgICB2YWxhcnJheShjb25zdCBzbGljZV9hcnJheTxfVHA+
Jik7DQogICAgICB2YWxhcnJheShjb25zdCBnc2xpY2VfYXJyYXk8X1RwPiYpOw0KICAgICAgdmFs
YXJyYXkoY29uc3QgbWFza19hcnJheTxfVHA+Jik7DQogICAgICB2YWxhcnJheShjb25zdCBpbmRp
cmVjdF9hcnJheTxfVHA+Jik7DQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgdmFs
YXJyYXkoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpOw0KICAgICB+dmFsYXJyYXkoKTsNCg0K
DQogICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcj0oY29uc3QgdmFsYXJyYXk8X1RwPiYpOw0K
ICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9UcCYpOw0KICAgICAgdmFsYXJy
YXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IHNsaWNlX2FycmF5PF9UcD4mKTsNCiAgICAgIHZhbGFy
cmF5PF9UcD4mIG9wZXJhdG9yPShjb25zdCBnc2xpY2VfYXJyYXk8X1RwPiYpOw0KICAgICAgdmFs
YXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IG1hc2tfYXJyYXk8X1RwPiYpOw0KICAgICAgdmFs
YXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IGluZGlyZWN0X2FycmF5PF9UcD4mKTsNCg0KICAg
ICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gdmFsYXJyYXk8X1RwPiYNCiAgICAgICAgb3BlcmF0b3I9
IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKTsNCg0KDQoNCiAgICAgIGNvbnN0IF9UcCYgb3BlcmF0
b3JbXShzaXplX3QpIGNvbnN0Ow0KICAgICAgX1RwJiBvcGVyYXRvcltdKHNpemVfdCk7DQoNCiAg
ICAgIF9FeHByPF9TQ2xvczxfVmFsQXJyYXksX1RwPiwgX1RwPiBvcGVyYXRvcltdKHNsaWNlKSBj
b25zdDsNCiAgICAgIHNsaWNlX2FycmF5PF9UcD4gb3BlcmF0b3JbXShzbGljZSk7DQogICAgICBf
RXhwcjxfR0Nsb3M8X1ZhbEFycmF5LF9UcD4sIF9UcD4gb3BlcmF0b3JbXShjb25zdCBnc2xpY2Um
KSBjb25zdDsNCiAgICAgIGdzbGljZV9hcnJheTxfVHA+IG9wZXJhdG9yW10oY29uc3QgZ3NsaWNl
Jik7DQogICAgICB2YWxhcnJheTxfVHA+IG9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8Ym9vbD4m
KSBjb25zdDsNCiAgICAgIG1hc2tfYXJyYXk8X1RwPiBvcGVyYXRvcltdKGNvbnN0IHZhbGFycmF5
PGJvb2w+Jik7DQogICAgICBfRXhwcjxfSUNsb3M8X1ZhbEFycmF5LCBfVHA+LCBfVHA+DQogICAg
ICAgIG9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYpIGNvbnN0Ow0KICAgICAgaW5k
aXJlY3RfYXJyYXk8X1RwPiBvcGVyYXRvcltdKGNvbnN0IHZhbGFycmF5PHNpemVfdD4mKTsNCg0K
DQogICAgICBfRXhwcjxfVW5DbG9zPF9VbmFyeV9wbHVzLF9WYWxBcnJheSxfVHA+LF9UcD4gb3Bl
cmF0b3IrICgpIGNvbnN0Ow0KICAgICAgX0V4cHI8X1VuQ2xvczxuZWdhdGUsX1ZhbEFycmF5LF9U
cD4sX1RwPiBvcGVyYXRvci0gKCkgY29uc3Q7DQogICAgICBfRXhwcjxfVW5DbG9zPF9CaXR3aXNl
X25vdCxfVmFsQXJyYXksX1RwPixfVHA+IG9wZXJhdG9yfiAoKSBjb25zdDsNCiAgICAgIF9FeHBy
PF9VbkNsb3M8bG9naWNhbF9ub3QsX1ZhbEFycmF5LF9UcD4sYm9vbD4gb3BlcmF0b3IhICgpIGNv
bnN0Ow0KDQoNCiAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yKj0gKGNvbnN0IF9UcCYpOw0K
ICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IvPSAoY29uc3QgX1RwJik7DQogICAgICB2YWxh
cnJheTxfVHA+JiBvcGVyYXRvciU9IChjb25zdCBfVHAmKTsNCiAgICAgIHZhbGFycmF5PF9UcD4m
IG9wZXJhdG9yKz0gKGNvbnN0IF9UcCYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3It
PSAoY29uc3QgX1RwJik7DQogICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcl49IChjb25zdCBf
VHAmKTsNCiAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yJj0gKGNvbnN0IF9UcCYpOw0KICAg
ICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3J8PSAoY29uc3QgX1RwJik7DQogICAgICB2YWxhcnJh
eTxfVHA+JiBvcGVyYXRvcjw8PShjb25zdCBfVHAmKTsNCiAgICAgIHZhbGFycmF5PF9UcD4mIG9w
ZXJhdG9yPj49KGNvbnN0IF9UcCYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IqPSAo
Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IvPSAo
Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IlPSAo
Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IrPSAo
Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3ItPSAo
Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3JePSAo
Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3J8PSAo
Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3ImPSAo
Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I8PD0o
Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I+Pj0o
Y29uc3QgdmFsYXJyYXk8X1RwPiYpOw0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAg
ICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcio9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKTsN
CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+DQogICAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJh
dG9yLz0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpOw0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Rv
bT4NCiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IlPSAoY29uc3QgX0V4cHI8X0RvbSxf
VHA+Jik7DQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2YWxhcnJheTxfVHA+
JiBvcGVyYXRvcis9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKTsNCiAgICAgIHRlbXBsYXRlPGNs
YXNzIF9Eb20+DQogICAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yLT0gKGNvbnN0IF9FeHBy
PF9Eb20sX1RwPiYpOw0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdmFsYXJy
YXk8X1RwPiYgb3BlcmF0b3JePSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7DQogICAgICB0ZW1w
bGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcnw9IChjb25z
dCBfRXhwcjxfRG9tLF9UcD4mKTsNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+DQogICAgICAg
IHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yJj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpOw0KICAg
ICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I8
PD0oY29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7DQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0K
ICAgICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcj4+PShjb25zdCBfRXhwcjxfRG9tLF9UcD4m
KTsNCg0KDQoNCiAgICAgIHNpemVfdCBzaXplKCkgY29uc3Q7DQogICAgICBfVHAgc3VtKCkgY29u
c3Q7DQogICAgICBfVHAgbWluKCkgY29uc3Q7DQogICAgICBfVHAgbWF4KCkgY29uc3Q7DQoNCg0K
DQoNCiAgICAgIHZhbGFycmF5PF9UcD4gc2hpZnQgKGludCkgY29uc3Q7DQogICAgICB2YWxhcnJh
eTxfVHA+IGNzaGlmdChpbnQpIGNvbnN0Ow0KICAgICAgX0V4cHI8X1ZhbEZ1bkNsb3M8X1ZhbEFy
cmF5LF9UcD4sX1RwPiBhcHBseShfVHAgZnVuYyhfVHApKSBjb25zdDsNCiAgICAgIF9FeHByPF9S
ZWZGdW5DbG9zPF9WYWxBcnJheSxfVHA+LF9UcD4gYXBwbHkoX1RwIGZ1bmMoY29uc3QgX1RwJikp
IGNvbnN0Ow0KICAgICAgdm9pZCByZXNpemUoc2l6ZV90IF9fc2l6ZSwgX1RwIF9fYyA9IF9UcCgp
KTsNCg0KICBwcml2YXRlOg0KICAgICAgc2l6ZV90IF9NX3NpemU7DQogICAgICBfVHAqIF9fcmVz
dHJpY3RfXyBfTV9kYXRhOw0KDQogICAgICBmcmllbmQgY2xhc3MgX0FycmF5PF9UcD47DQogIH07
DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBfVW5hcnlfcGx1cyA6IHVuYXJ5
X2Z1bmN0aW9uPF9UcCxfVHA+IHsNCiAgICAgIF9UcCBvcGVyYXRvcigpIChjb25zdCBfVHAmIF9f
dCkgY29uc3QgeyByZXR1cm4gX190OyB9DQogIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PiBzdHJ1Y3QgX0JpdHdpc2VfYW5kIDogYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7DQog
ICAgICBfVHAgb3BlcmF0b3IoKSAoX1RwIF9feCwgX1RwIF9feSkgY29uc3QgeyByZXR1cm4gX194
ICYgX195OyB9DQogIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0JpdHdp
c2Vfb3IgOiBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsNCiAgICAgIF9UcCBvcGVyYXRv
cigpIChfVHAgX194LCBfVHAgX195KSBjb25zdCB7IHJldHVybiBfX3ggfCBfX3k7IH0NCiAgfTsN
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBfQml0d2lzZV94b3IgOiBiaW5hcnlf
ZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsNCiAgICAgIF9UcCBvcGVyYXRvcigpIChfVHAgX194LCBf
VHAgX195KSBjb25zdCB7IHJldHVybiBfX3ggXiBfX3k7IH0NCiAgfTsNCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+IHN0cnVjdCBfQml0d2lzZV9ub3QgOiB1bmFyeV9mdW5jdGlvbjxfVHAsX1Rw
PiB7DQogICAgICBfVHAgb3BlcmF0b3IoKSAoX1RwIF9fdCkgY29uc3QgeyByZXR1cm4gfl9fdDsg
fQ0KICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9TaGlmdF9sZWZ0IDog
dW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gew0KICAgICAgX1RwIG9wZXJhdG9yKCkgKF9UcCBfX3gs
IF9UcCBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8PCBfX3k7IH0NCiAgfTsNCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBfU2hpZnRfcmlnaHQgOiB1bmFyeV9mdW5jdGlvbjxfVHAs
X1RwPiB7DQogICAgICBfVHAgb3BlcmF0b3IoKSAoX1RwIF9feCwgX1RwIF9feSkgY29uc3QgeyBy
ZXR1cm4gX194ID4+IF9feTsgfQ0KICB9Ow0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0K
ICBpbmxpbmUgY29uc3QgX1RwJg0KICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcltdIChzaXplX3Qg
X19pKSBjb25zdA0KICB7IHJldHVybiBfTV9kYXRhW19faV07IH0NCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+DQogIGlubGluZSBfVHAmDQogIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yW10gKHNp
emVfdCBfX2kpDQogIHsgcmV0dXJuIF9NX2RhdGFbX19pXTsgfQ0KDQp9DQoNCiMgMSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zbGljZS5oIiAxIDMNCiMgNDEgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc2xpY2UuaCIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCmNsYXNzIHNsaWNlDQp7
DQpwdWJsaWM6DQogICAgc2xpY2UgKCk7DQogICAgc2xpY2UgKHNpemVfdCwgc2l6ZV90LCBzaXpl
X3QpOw0KDQogICAgc2l6ZV90IHN0YXJ0ICgpIGNvbnN0Ow0KICAgIHNpemVfdCBzaXplICgpIGNv
bnN0Ow0KICAgIHNpemVfdCBzdHJpZGUgKCkgY29uc3Q7DQoNCnByaXZhdGU6DQogICAgc2l6ZV90
IF9NX29mZjsNCiAgICBzaXplX3QgX01fc3o7DQogICAgc2l6ZV90IF9NX3N0Ow0KfTsNCg0KaW5s
aW5lIHNsaWNlOjpzbGljZSAoKSB7fQ0KDQppbmxpbmUgc2xpY2U6OnNsaWNlIChzaXplX3QgX19v
LCBzaXplX3QgX19kLCBzaXplX3QgX19zKQ0KICAgICAgICA6IF9NX29mZiAoX19vKSwgX01fc3og
KF9fZCksIF9NX3N0IChfX3MpIHt9DQoNCmlubGluZSBzaXplX3QNCnNsaWNlOjpzdGFydCAoKSBj
b25zdA0KICB7IHJldHVybiBfTV9vZmY7IH0NCg0KaW5saW5lIHNpemVfdA0Kc2xpY2U6OnNpemUg
KCkgY29uc3QNCiAgeyByZXR1cm4gX01fc3o7IH0NCg0KaW5saW5lIHNpemVfdA0Kc2xpY2U6OnN0
cmlkZSAoKSBjb25zdA0KICB7IHJldHVybiBfTV9zdDsgfQ0KDQp9DQojIDI1OCAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvdmFsYXJyYXkiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3NsaWNlX2FycmF5LmgiIDEgMw0KIyA0MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zbGlj
ZV9hcnJheS5oIiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4NCiAgICBjbGFzcyBzbGljZV9hcnJheQ0KICAgIHsNCiAgICBwdWJsaWM6DQogICAgICAg
IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQoNCg0KICAgICAgc2xpY2VfYXJyYXkgKGNvbnN0IHNs
aWNlX2FycmF5Jik7DQoNCg0KICAgICAgc2xpY2VfYXJyYXkmIG9wZXJhdG9yPSAoY29uc3Qgc2xp
Y2VfYXJyYXkmKTsNCg0KICAgICAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgdmFsYXJyYXk8X1Rw
PiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9yKj0gKGNvbnN0IHZhbGFycmF5PF9UcD4m
KSBjb25zdDsNCiAgICAgICAgdm9pZCBvcGVyYXRvci89IChjb25zdCB2YWxhcnJheTxfVHA+Jikg
Y29uc3Q7DQogICAgICAgIHZvaWQgb3BlcmF0b3IlPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNv
bnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9yKz0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25z
dDsNCiAgICAgICAgdm9pZCBvcGVyYXRvci09IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7
DQogICAgICAgIHZvaWQgb3BlcmF0b3JePSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0K
ICAgICAgICB2b2lkIG9wZXJhdG9yJj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsNCiAg
ICAgICAgdm9pZCBvcGVyYXRvcnw9IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7DQogICAg
ICAgIHZvaWQgb3BlcmF0b3I8PD0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsNCiAgICAg
ICAgdm9pZCBvcGVyYXRvcj4+PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0KICAgICAg
ICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgX1RwICYpOw0KDQoNCiAgICAgICAgdGVtcGxhdGU8Y2xh
c3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYp
IGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJh
dG9yKj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxj
bGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yLz0gKGNvbnN0IF9FeHByPF9Eb20sX1Rw
PiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9w
ZXJhdG9yJT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0
ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yKz0gKGNvbnN0IF9FeHByPF9Eb20s
X1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lk
IG9wZXJhdG9yLT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1w
bGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yXj0gKGNvbnN0IF9FeHByPF9E
b20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2
b2lkIG9wZXJhdG9yJj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0
ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yfD0gKGNvbnN0IF9FeHBy
PF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAg
ICB2b2lkIG9wZXJhdG9yPDw9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsNCiAgICAg
ICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRvcj4+PSAoY29uc3Qg
X0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7DQoNCiAgICBwcml2YXRlOg0KICAgICAgICBmcmllbmQg
Y2xhc3MgdmFsYXJyYXk8X1RwPjsNCiAgICAgICAgc2xpY2VfYXJyYXkoX0FycmF5PF9UcD4sIGNv
bnN0IHNsaWNlJik7DQoNCiAgICAgICAgY29uc3Qgc2l6ZV90IF9NX3N6Ow0KICAgICAgICBjb25z
dCBzaXplX3QgX01fc3RyaWRlOw0KICAgICAgICBjb25zdCBfQXJyYXk8X1RwPiBfTV9hcnJheTsN
Cg0KDQogICAgICAgIHNsaWNlX2FycmF5ICgpOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+DQogICAgaW5saW5lIHNsaWNlX2FycmF5PF9UcD46OnNsaWNlX2FycmF5IChfQXJy
YXk8X1RwPiBfX2EsIGNvbnN0IHNsaWNlJiBfX3MpDQogICAgICAgICAgICA6IF9NX3N6IChfX3Mu
c2l6ZSAoKSksIF9NX3N0cmlkZSAoX19zLnN0cmlkZSAoKSksDQogICAgICAgICAgICAgIF9NX2Fy
cmF5IChfX2EuYmVnaW4gKCkgKyBfX3Muc3RhcnQgKCkpIHt9DQoNCg0KICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4NCiAgICBpbmxpbmUgc2xpY2VfYXJyYXk8X1RwPjo6c2xpY2VfYXJyYXkoY29u
c3Qgc2xpY2VfYXJyYXk8X1RwPiYgYSkNCiAgICAgICAgICAgIDogX01fc3ooYS5fTV9zeiksIF9N
X3N0cmlkZShhLl9NX3N0cmlkZSksIF9NX2FycmF5KGEuX01fYXJyYXkpIHt9DQoNCg0KDQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgc2xpY2VfYXJyYXk8X1RwPiYNCiAgc2xp
Y2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IHNsaWNlX2FycmF5PF9UcD4mIF9fYSkNCiAg
ew0KICAgIF9fdmFsYXJyYXlfY29weShfTV9hcnJheSwgX01fc3osIF9NX3N0cmlkZSwgX19hLl9N
X2FycmF5LCBfX2EuX01fc3RyaWRlKTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCg0KDQogICAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIGlubGluZSB2b2lkDQogICAgc2xpY2VfYXJyYXk8
X1RwPjo6b3BlcmF0b3I9IChjb25zdCBfVHAmIF9fdCkNCiAgICB7IF9fdmFsYXJyYXlfZmlsbCAo
X01fYXJyYXksIF9NX3N6LCBfTV9zdHJpZGUsIF9fdCk7IH0NCg0KICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4NCiAgICBpbmxpbmUgdm9pZA0KICAgIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9y
PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdA0KICAgIHsgX192YWxhcnJheV9jb3B5
IChfQXJyYXk8X1RwPiAoX192KSwgX01fYXJyYXksIF9NX3N6LCBfTV9zdHJpZGUpOyB9DQoNCiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICBp
bmxpbmUgdm9pZA0KICAgIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgX0V4cHI8
X0RvbSxfVHA+JiBfX2UpIGNvbnN0DQogICAgeyBfX3ZhbGFycmF5X2NvcHkgKF9fZSwgX01fc3os
IF9NX2FycmF5LCBfTV9zdHJpZGUpOyB9DQojIDE2MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zbGljZV9hcnJheS5oIiAzDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIHNs
aWNlX2FycmF5PF9UcD46Om9wZXJhdG9yICo9IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNv
bnN0IHsgX0FycmF5X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfTV9hcnJheSwgX01fc3osIF9NX3N0
cmlkZSwgX0FycmF5PF9UcD4gKF9fdikpO30gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0
ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAqPSAo
Y29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9tdWx0
aXBsaWVzIChfTV9hcnJheSwgX01fc3RyaWRlLCBfX2UsIF9NX3N6KTsgfQ0KdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAvPSAoY29u
c3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAo
X01fYXJyYXksIF9NX3N6LCBfTV9zdHJpZGUsIF9BcnJheTxfVHA+IChfX3YpKTt9IHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZvaWQgc2xpY2VfYXJy
YXk8X1RwPjo6b3BlcmF0b3IgLz0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7
IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX01fYXJyYXksIF9NX3N0cmlkZSwgX19lLCBfTV9z
eik7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgc2xpY2VfYXJyYXk8X1Rw
Pjo6b3BlcmF0b3IgJT0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlf
YXVnbWVudGVkX21vZHVsdXMgKF9NX2FycmF5LCBfTV9zeiwgX01fc3RyaWRlLCBfQXJyYXk8X1Rw
PiAoX192KSk7fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlu
bGluZSB2b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yICU9IChjb25zdCBfRXhwcjxfRG9t
LF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9NX2FycmF5LCBf
TV9zdHJpZGUsIF9fZSwgX01fc3opOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2
b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yICs9IChjb25zdCB2YWxhcnJheTxfVHA+JiBf
X3YpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9wbHVzIChfTV9hcnJheSwgX01fc3osIF9NX3N0
cmlkZSwgX0FycmF5PF9UcD4gKF9fdikpO30gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0
ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciArPSAo
Y29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9wbHVz
IChfTV9hcnJheSwgX01fc3RyaWRlLCBfX2UsIF9NX3N6KTsgfQ0KdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAtPSAoY29uc3QgdmFs
YXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9NX2FycmF5
LCBfTV9zeiwgX01fc3RyaWRlLCBfQXJyYXk8X1RwPiAoX192KSk7fSB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSB2b2lkIHNsaWNlX2FycmF5PF9UcD46
Om9wZXJhdG9yIC09IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlf
YXVnbWVudGVkX21pbnVzIChfTV9hcnJheSwgX01fc3RyaWRlLCBfX2UsIF9NX3N6KTsgfQ0KdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRv
ciBePSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRf
eG9yIChfTV9hcnJheSwgX01fc3osIF9NX3N0cmlkZSwgX0FycmF5PF9UcD4gKF9fdikpO30gdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBzbGlj
ZV9hcnJheTxfVHA+OjpvcGVyYXRvciBePSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNv
bnN0IHsgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9NX2FycmF5LCBfTV9zdHJpZGUsIF9fZSwgX01f
c3opOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIHNsaWNlX2FycmF5PF9U
cD46Om9wZXJhdG9yICY9IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0IHsgX0FycmF5
X2F1Z21lbnRlZF9hbmQgKF9NX2FycmF5LCBfTV9zeiwgX01fc3RyaWRlLCBfQXJyYXk8X1RwPiAo
X192KSk7fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGlu
ZSB2b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yICY9IChjb25zdCBfRXhwcjxfRG9tLF9U
cD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX2FuZCAoX01fYXJyYXksIF9NX3N0cmlk
ZSwgX19lLCBfTV9zeik7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgc2xp
Y2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgfD0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29u
c3QgeyBfQXJyYXlfYXVnbWVudGVkX29yIChfTV9hcnJheSwgX01fc3osIF9NX3N0cmlkZSwgX0Fy
cmF5PF9UcD4gKF9fdikpO30gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBf
RG9tPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciB8PSAoY29uc3QgX0V4
cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9vciAoX01fYXJyYXks
IF9NX3N0cmlkZSwgX19lLCBfTV9zeik7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5l
IHZvaWQgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgPDw9IChjb25zdCB2YWxhcnJheTxfVHA+
JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfTV9hcnJheSwgX01f
c3osIF9NX3N0cmlkZSwgX0FycmF5PF9UcD4gKF9fdikpO30gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVy
YXRvciA8PD0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdt
ZW50ZWRfc2hpZnRfbGVmdCAoX01fYXJyYXksIF9NX3N0cmlkZSwgX19lLCBfTV9zeik7IH0NCnRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0
b3IgPj49IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRl
ZF9zaGlmdF9yaWdodCAoX01fYXJyYXksIF9NX3N6LCBfTV9zdHJpZGUsIF9BcnJheTxfVHA+IChf
X3YpKTt9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5l
IHZvaWQgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgPj49IChjb25zdCBfRXhwcjxfRG9tLF9U
cD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0IChfTV9hcnJheSwg
X01fc3RyaWRlLCBfX2UsIF9NX3N6KTsgfQ0KDQoNCg0KfQ0KIyAyNTkgIi91c3IvaW5jbHVkZS9j
KysvMy4yL3ZhbGFycmF5IiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9nc2xp
Y2UuaCIgMSAzDQojIDQxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2dzbGljZS5oIiAzDQoN
Cm5hbWVzcGFjZSBzdGQgew0KDQogICAgY2xhc3MgZ3NsaWNlDQogICAgew0KICAgIHB1YmxpYzoN
CiAgICAgICAgZ3NsaWNlICgpOw0KICAgICAgICBnc2xpY2UgKHNpemVfdCwgY29uc3QgdmFsYXJy
YXk8c2l6ZV90PiYsIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mKTsNCg0KDQoNCiAgICAgICAgZ3Ns
aWNlKGNvbnN0IGdzbGljZSYpOw0KICAgICAgICB+Z3NsaWNlKCk7DQoNCg0KICAgICAgICBnc2xp
Y2UmIG9wZXJhdG9yPSAoY29uc3QgZ3NsaWNlJik7DQoNCiAgICAgICAgc2l6ZV90IHN0YXJ0ICgp
IGNvbnN0Ow0KICAgICAgICB2YWxhcnJheTxzaXplX3Q+IHNpemUgKCkgY29uc3Q7DQogICAgICAg
IHZhbGFycmF5PHNpemVfdD4gc3RyaWRlICgpIGNvbnN0Ow0KDQogICAgcHJpdmF0ZToNCiAgICAg
ICAgc3RydWN0IF9JbmRleGVyIHsNCiAgICAgICAgICAgIHNpemVfdCBfTV9jb3VudDsNCiAgICAg
ICAgICAgIHNpemVfdCBfTV9zdGFydDsNCiAgICAgICAgICAgIHZhbGFycmF5PHNpemVfdD4gX01f
c2l6ZTsNCiAgICAgICAgICAgIHZhbGFycmF5PHNpemVfdD4gX01fc3RyaWRlOw0KICAgICAgICAg
ICAgdmFsYXJyYXk8c2l6ZV90PiBfTV9pbmRleDsNCiAgICAgICAgICAgIF9JbmRleGVyKHNpemVf
dCwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYsDQogICAgICAgICAgICAgICAgICAgICBjb25zdCB2
YWxhcnJheTxzaXplX3Q+Jik7DQogICAgICAgICAgICB2b2lkIF9NX2luY3JlbWVudF91c2UoKSB7
ICsrX01fY291bnQ7IH0NCiAgICAgICAgICAgIHNpemVfdCBfTV9kZWNyZW1lbnRfdXNlKCkgeyBy
ZXR1cm4gLS1fTV9jb3VudDsgfQ0KICAgICAgICB9Ow0KDQogICAgICAgIF9JbmRleGVyKiBfTV9p
bmRleDsNCg0KICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGZyaWVuZCBjbGFzcyB2YWxh
cnJheTsNCiAgICB9Ow0KDQogICAgaW5saW5lIHNpemVfdA0KICAgIGdzbGljZTo6c3RhcnQgKCkg
Y29uc3QNCiAgICB7IHJldHVybiBfTV9pbmRleCA/IF9NX2luZGV4LT5fTV9zdGFydCA6IDA7IH0N
Cg0KICAgIGlubGluZSB2YWxhcnJheTxzaXplX3Q+DQogICAgZ3NsaWNlOjpzaXplICgpIGNvbnN0
DQogICAgeyByZXR1cm4gX01faW5kZXggPyBfTV9pbmRleC0+X01fc2l6ZSA6IHZhbGFycmF5PHNp
emVfdD4oKTsgfQ0KDQogICAgaW5saW5lIHZhbGFycmF5PHNpemVfdD4NCiAgICBnc2xpY2U6OnN0
cmlkZSAoKSBjb25zdA0KICAgIHsgcmV0dXJuIF9NX2luZGV4ID8gX01faW5kZXgtPl9NX3N0cmlk
ZSA6IHZhbGFycmF5PHNpemVfdD4oKTsgfQ0KDQogICAgaW5saW5lIGdzbGljZTo6Z3NsaWNlICgp
IDogX01faW5kZXgoMCkge30NCg0KICAgIGlubGluZQ0KICAgIGdzbGljZTo6Z3NsaWNlKHNpemVf
dCBfX28sIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9fbCwNCiAgICAgICAgICAgICAgICAgICBj
b25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX3MpDQogICAgICAgICAgICA6IF9NX2luZGV4KG5ldyBn
c2xpY2U6Ol9JbmRleGVyKF9fbywgX19sLCBfX3MpKSB7fQ0KDQogICAgaW5saW5lDQogICAgZ3Ns
aWNlOjpnc2xpY2UoY29uc3QgZ3NsaWNlJiBfX2cpIDogX01faW5kZXgoX19nLl9NX2luZGV4KQ0K
ICAgIHsgaWYgKF9NX2luZGV4KSBfTV9pbmRleC0+X01faW5jcmVtZW50X3VzZSgpOyB9DQoNCiAg
ICBpbmxpbmUNCiAgICBnc2xpY2U6On5nc2xpY2UoKQ0KICAgIHsgaWYgKF9NX2luZGV4ICYmIF9N
X2luZGV4LT5fTV9kZWNyZW1lbnRfdXNlKCkgPT0gMCkgZGVsZXRlIF9NX2luZGV4OyB9DQoNCiAg
ICBpbmxpbmUgZ3NsaWNlJg0KICAgIGdzbGljZTo6b3BlcmF0b3I9IChjb25zdCBnc2xpY2UmIF9f
ZykNCiAgICB7DQogICAgICAgIGlmIChfX2cuX01faW5kZXgpIF9fZy5fTV9pbmRleC0+X01faW5j
cmVtZW50X3VzZSgpOw0KICAgICAgICBpZiAoX01faW5kZXggJiYgX01faW5kZXgtPl9NX2RlY3Jl
bWVudF91c2UoKSA9PSAwKSBkZWxldGUgX01faW5kZXg7DQogICAgICAgIF9NX2luZGV4ID0gX19n
Ll9NX2luZGV4Ow0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQoNCn0NCiMgMjYwICIv
dXNyL2luY2x1ZGUvYysrLzMuMi92YWxhcnJheSIgMiAzDQojIDEgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvZ3NsaWNlX2FycmF5LmgiIDEgMw0KIyA0MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9nc2xpY2VfYXJyYXkuaCIgMw0KDQpuYW1lc3BhY2Ugc3RkIHsNCg0KICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4gY2xhc3MgZ3NsaWNlX2FycmF5DQogICAgew0KICAgIHB1YmxpYzoNCiAg
ICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCg0KICAgICAgICB2b2lkIG9wZXJhdG9yPSAo
Y29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9yKj0gKGNv
bnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsNCiAgICAgICAgdm9pZCBvcGVyYXRvci89IChjb25z
dCB2YWxhcnJheTxfVHA+JikgY29uc3Q7DQogICAgICAgIHZvaWQgb3BlcmF0b3IlPSAoY29uc3Qg
dmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9yKz0gKGNvbnN0IHZh
bGFycmF5PF9UcD4mKSBjb25zdDsNCiAgICAgICAgdm9pZCBvcGVyYXRvci09IChjb25zdCB2YWxh
cnJheTxfVHA+JikgY29uc3Q7DQogICAgICAgIHZvaWQgb3BlcmF0b3JePSAoY29uc3QgdmFsYXJy
YXk8X1RwPiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9yJj0gKGNvbnN0IHZhbGFycmF5
PF9UcD4mKSBjb25zdDsNCiAgICAgICAgdm9pZCBvcGVyYXRvcnw9IChjb25zdCB2YWxhcnJheTxf
VHA+JikgY29uc3Q7DQogICAgICAgIHZvaWQgb3BlcmF0b3I8PD0oY29uc3QgdmFsYXJyYXk8X1Rw
PiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9yPj49KGNvbnN0IHZhbGFycmF5PF9UcD4m
KSBjb25zdDsNCiAgICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1RwJik7DQoNCiAgICAgICAg
dGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IF9FeHBy
PF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAg
ICB2b2lkIG9wZXJhdG9yKj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAg
ICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yLz0gKGNvbnN0IF9F
eHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAg
ICAgICB2b2lkIG9wZXJhdG9yJT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAg
ICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yKz0gKGNvbnN0
IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0K
ICAgICAgICB2b2lkIG9wZXJhdG9yLT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0K
ICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yXj0gKGNv
bnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9t
Pg0KICAgICAgICB2b2lkIG9wZXJhdG9yJj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0
Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yfD0g
KGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0Ow0KICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBf
RG9tPg0KICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBj
b25zdDsNCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRv
cj4+PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7DQoNCiAgICBwcml2YXRlOg0KICAg
ICAgICBfQXJyYXk8X1RwPiBfTV9hcnJheTsNCiAgICAgICAgY29uc3QgdmFsYXJyYXk8c2l6ZV90
PiYgX01faW5kZXg7DQoNCiAgICAgICAgZnJpZW5kIGNsYXNzIHZhbGFycmF5PF9UcD47DQoNCiAg
ICAgICAgZ3NsaWNlX2FycmF5IChfQXJyYXk8X1RwPiwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYp
Ow0KDQoNCiAgICAgICAgZ3NsaWNlX2FycmF5IChjb25zdCBnc2xpY2VfYXJyYXkmKTsNCg0KDQog
ICAgICAgIGdzbGljZV9hcnJheSgpOw0KICAgICAgICBnc2xpY2VfYXJyYXkmIG9wZXJhdG9yPSAo
Y29uc3QgZ3NsaWNlX2FycmF5Jik7DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4NCiAgICBpbmxpbmUNCiAgICBnc2xpY2VfYXJyYXk8X1RwPjo6Z3NsaWNlX2FycmF5IChfQXJy
YXk8X1RwPiBfX2EsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dmFsYXJyYXk8c2l6ZV90PiYgX19pKQ0KICAgICAgICAgICAgOiBfTV9hcnJheSAoX19hKSwgX01f
aW5kZXggKF9faSkge30NCg0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIGlubGlu
ZQ0KICAgIGdzbGljZV9hcnJheTxfVHA+Ojpnc2xpY2VfYXJyYXkgKGNvbnN0IGdzbGljZV9hcnJh
eTxfVHA+JiBfX2EpDQogICAgICAgICAgICA6IF9NX2FycmF5IChfX2EuX01fYXJyYXkpLCBfTV9p
bmRleCAoX19hLl9NX2luZGV4KSB7fQ0KDQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQog
ICAgaW5saW5lIHZvaWQNCiAgICBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9IChjb25zdCBf
VHAmIF9fdCkNCiAgICB7DQogICAgICAgIF9fdmFsYXJyYXlfZmlsbCAoX01fYXJyYXksIF9BcnJh
eTxzaXplX3Q+KF9NX2luZGV4KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfTV9pbmRleC5z
aXplKCksIF9fdCk7DQogICAgfQ0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgIGlu
bGluZSB2b2lkDQogICAgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgdmFsYXJy
YXk8X1RwPiYgX192KSBjb25zdA0KICAgIHsNCiAgICAgICAgX192YWxhcnJheV9jb3B5IChfQXJy
YXk8X1RwPiAoX192KSwgX192LnNpemUgKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgX01f
YXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSk7DQogICAgfQ0KDQogICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPg0KICAgIHRlbXBsYXRlPGNsYXNzIEU+DQogICAgaW5saW5lIHZvaWQNCiAg
ICBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9IChjb25zdCBfRXhwcjxFLCBfVHA+JiBfX2Up
IGNvbnN0DQogICAgew0KICAgICAgICBfX3ZhbGFycmF5X2NvcHkgKF9fZSwgX01faW5kZXguc2l6
ZSgpLCBfTV9hcnJheSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfQXJyYXk8c2l6ZV90Pihf
TV9pbmRleCkpOw0KICAgIH0NCiMgMTU3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2dzbGlj
ZV9hcnJheS5oIiAzDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIGdzbGljZV9h
cnJheTxfVHA+OjpvcGVyYXRvciAqPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7
IF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9N
X2luZGV4KSwgX0FycmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+
OjpvcGVyYXRvciAqPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9h
dWdtZW50ZWRfbXVsdGlwbGllcyAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwg
X19lLCBfTV9pbmRleC5zaXplKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2
b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAvPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYg
X192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX01fYXJyYXksIF9BcnJheTxz
aXplX3Q+KF9NX2luZGV4KSwgX0FycmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIGdzbGljZV9h
cnJheTxfVHA+OjpvcGVyYXRvciAvPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7
IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2lu
ZGV4KSwgX19lLCBfTV9pbmRleC5zaXplKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlu
bGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAlPSAoY29uc3QgdmFsYXJyYXk8
X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX01fYXJyYXksIF9B
cnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX0FycmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsg
fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIGdz
bGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAlPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBj
b25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+
KF9NX2luZGV4KSwgX19lLCBfTV9pbmRleC5zaXplKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciArPSAoY29uc3QgdmFs
YXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX01fYXJyYXks
IF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX0FycmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgp
KTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lk
IGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciArPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19l
KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+
KF9NX2luZGV4KSwgX19lLCBfTV9pbmRleC5zaXplKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAtPSAoY29uc3QgdmFs
YXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9NX2FycmF5
LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9BcnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAo
KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBFPiBpbmxpbmUgdm9p
ZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgLT0gKGNvbnN0IF9FeHByPEUsIF9UcD4mIF9f
ZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21pbnVzIChfTV9hcnJheSwgX0FycmF5PHNpemVf
dD4oX01faW5kZXgpLCBfX2UsIF9NX2luZGV4LnNpemUoKSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4gaW5saW5lIHZvaWQgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yIF49IChjb25zdCB2
YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9NX2FycmF5
LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9BcnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAo
KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBFPiBpbmxpbmUgdm9p
ZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgXj0gKGNvbnN0IF9FeHByPEUsIF9UcD4mIF9f
ZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3hvciAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+
KF9NX2luZGV4KSwgX19lLCBfTV9pbmRleC5zaXplKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAmPSAoY29uc3QgdmFs
YXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfYW5kIChfTV9hcnJheSwg
X0FycmF5PHNpemVfdD4oX01faW5kZXgpLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNpemUgKCkp
OyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQg
Z3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yICY9IChjb25zdCBfRXhwcjxFLCBfVHA+JiBfX2Up
IGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9hbmQgKF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90Pihf
TV9pbmRleCksIF9fZSwgX01faW5kZXguc2l6ZSgpKTsgfQ0KdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgfD0gKGNvbnN0IHZhbGFy
cmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX29yIChfTV9hcnJheSwgX0Fy
cmF5PHNpemVfdD4oX01faW5kZXgpLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNpemUgKCkpOyB9
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQgZ3Ns
aWNlX2FycmF5PF9UcD46Om9wZXJhdG9yIHw9IChjb25zdCBfRXhwcjxFLCBfVHA+JiBfX2UpIGNv
bnN0IHsgX0FycmF5X2F1Z21lbnRlZF9vciAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2lu
ZGV4KSwgX19lLCBfTV9pbmRleC5zaXplKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlu
bGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciA8PD0gKGNvbnN0IHZhbGFycmF5
PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X2xlZnQgKF9NX2FycmF5
LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9BcnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAo
KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBFPiBpbmxpbmUgdm9p
ZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgPDw9IChjb25zdCBfRXhwcjxFLCBfVHA+JiBf
X2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfTV9hcnJheSwgX0FycmF5
PHNpemVfdD4oX01faW5kZXgpLCBfX2UsIF9NX2luZGV4LnNpemUoKSk7IH0NCnRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yID4+PSAo
Y29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRf
cmlnaHQgKF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9BcnJheTxfVHA+IChf
X3YpLCBfX3Yuc2l6ZSAoKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFz
cyBFPiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgPj49IChjb25zdCBf
RXhwcjxFLCBfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAo
X01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX19lLCBfTV9pbmRleC5zaXplKCkp
OyB9DQoNCg0KDQp9DQojIDI2MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvdmFsYXJyYXkiIDIgMw0K
IyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL21hc2tfYXJyYXkuaCIgMSAzDQojIDQxICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL21hc2tfYXJyYXkuaCIgMw0KDQpuYW1lc3BhY2Ugc3Rk
IHsNCg0KICAgIHRlbXBsYXRlIDxjbGFzcyBfVHA+IGNsYXNzIG1hc2tfYXJyYXkNCiAgICB7DQog
ICAgcHVibGljOg0KICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KDQogICAgICAgIHZv
aWQgb3BlcmF0b3I9IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7DQogICAgICAgIHZvaWQg
b3BlcmF0b3IqPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9w
ZXJhdG9yLz0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsNCiAgICAgICAgdm9pZCBvcGVy
YXRvciU9IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7DQogICAgICAgIHZvaWQgb3BlcmF0
b3IrPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9y
LT0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsNCiAgICAgICAgdm9pZCBvcGVyYXRvcl49
IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7DQogICAgICAgIHZvaWQgb3BlcmF0b3ImPSAo
Y29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9yfD0gKGNv
bnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsNCiAgICAgICAgdm9pZCBvcGVyYXRvcjw8PShjb25z
dCB2YWxhcnJheTxfVHA+JikgY29uc3Q7DQogICAgICAgIHZvaWQgb3BlcmF0b3I+Pj0oY29uc3Qg
dmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0KICAgICAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgX1Rw
Jik7DQoNCg0KDQogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+DQogICAgICAgIHZvaWQgb3Bl
cmF0b3I9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsNCiAgICAgICAgdGVtcGxhdGU8
Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRvcio9IChjb25zdCBfRXhwcjxfRG9tLF9U
cD4mKSBjb25zdDsNCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBv
cGVyYXRvci89IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsNCiAgICAgICAgdGVtcGxh
dGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRvciU9IChjb25zdCBfRXhwcjxfRG9t
LF9UcD4mKSBjb25zdDsNCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9p
ZCBvcGVyYXRvcis9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsNCiAgICAgICAgdGVt
cGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRvci09IChjb25zdCBfRXhwcjxf
RG9tLF9UcD4mKSBjb25zdDsNCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAg
dm9pZCBvcGVyYXRvcl49IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsNCiAgICAgICAg
dGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRvciY9IChjb25zdCBfRXhw
cjxfRG9tLF9UcD4mKSBjb25zdDsNCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAg
ICAgdm9pZCBvcGVyYXRvcnw9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsNCiAgICAg
ICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICAgdm9pZCBvcGVyYXRvcjw8PShjb25zdCBf
RXhwcjxfRG9tLF9UcD4mKSBjb25zdDsNCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAg
ICAgICAgdm9pZCBvcGVyYXRvcj4+PShjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsNCg0K
ICAgIHByaXZhdGU6DQogICAgICAgIG1hc2tfYXJyYXkgKF9BcnJheTxfVHA+LCBzaXplX3QsIF9B
cnJheTxib29sPik7DQogICAgICAgIGZyaWVuZCBjbGFzcyB2YWxhcnJheTxfVHA+Ow0KDQogICAg
ICAgIGNvbnN0IHNpemVfdCBfTV9zejsNCiAgICAgICAgY29uc3QgX0FycmF5PGJvb2w+IF9NX21h
c2s7DQogICAgICAgIGNvbnN0IF9BcnJheTxfVHA+IF9NX2FycmF5Ow0KDQogICAgICAgIG1hc2tf
YXJyYXkgKGNvbnN0IG1hc2tfYXJyYXkmKTsNCg0KDQogICAgICAgIG1hc2tfYXJyYXkgKCk7DQog
ICAgICAgIG1hc2tfYXJyYXkmIG9wZXJhdG9yPSAoY29uc3QgbWFza19hcnJheSYpOw0KICAgIH07
DQoNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICBpbmxpbmUgbWFza19hcnJheTxf
VHA+OjptYXNrX2FycmF5IChjb25zdCBtYXNrX2FycmF5PF9UcD4mIGEpDQogICAgICAgICAgICA6
IF9NX3N6IChhLl9NX3N6KSwgX01fbWFzayAoYS5fTV9tYXNrKSwgX01fYXJyYXkgKGEuX01fYXJy
YXkpIHt9DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgaW5saW5lDQogICAgbWFz
a19hcnJheTxfVHA+OjptYXNrX2FycmF5IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX3MsIF9B
cnJheTxib29sPiBfX20pDQogICAgICAgICAgICA6IF9NX3N6IChfX3MpLCBfTV9tYXNrIChfX20p
LCBfTV9hcnJheSAoX19hKSB7fQ0KDQoNCg0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0K
ICAgIGlubGluZSB2b2lkDQogICAgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvcj0gKGNvbnN0IF9U
cCYgX190KQ0KICAgIHsgX192YWxhcnJheV9maWxsIChfTV9hcnJheSwgX01fc3osIF9NX21hc2ss
IF9fdCk7IH0NCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICBpbmxpbmUgdm9pZA0K
ICAgIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3I9IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3Yp
IGNvbnN0DQogICAgeyBfX3ZhbGFycmF5X2NvcHkgKF9BcnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6
ZSAoKSwgX01fYXJyYXksIF9NX21hc2spOyB9DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
DQogICAgdGVtcGxhdGU8Y2xhc3MgRT4NCiAgICBpbmxpbmUgdm9pZA0KICAgIG1hc2tfYXJyYXk8
X1RwPjo6b3BlcmF0b3I9IChjb25zdCBfRXhwcjxFLCBfVHA+JiBfX2UpIGNvbnN0DQogICAgeyBf
X3ZhbGFycmF5X2NvcHkgKF9fZSwgX19lLnNpemUgKCksIF9NX2FycmF5LCBfTV9tYXNrKTsgfQ0K
IyAxNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbWFza19hcnJheS5oIiAzDQp0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKj0g
KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX211bHRp
cGxpZXMgKF9NX2FycmF5LCBfTV9tYXNrLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNpemUgKCkp
OyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQg
bWFza19hcnJheTxfVHA+OjpvcGVyYXRvciAqPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBj
b25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX01fYXJyYXksIF9NX21hc2ssIF9f
ZSwgX19lLnNpemUgKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIG1h
c2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgLz0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29u
c3QgeyBfQXJyYXlfYXVnbWVudGVkX2RpdmlkZXMgKF9NX2FycmF5LCBfTV9tYXNrLCBfQXJyYXk8
X1RwPiAoX192KSwgX192LnNpemUgKCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxh
dGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvciAvPSAoY29u
c3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAo
X01fYXJyYXksIF9NX21hc2ssIF9fZSwgX19lLnNpemUgKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgJT0gKGNvbnN0IHZh
bGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9NX2Fy
cmF5LCBfTV9tYXNrLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNpemUgKCkpOyB9IHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQgbWFza19hcnJheTxf
VHA+OjpvcGVyYXRvciAlPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJh
eV9hdWdtZW50ZWRfbW9kdWx1cyAoX01fYXJyYXksIF9NX21hc2ssIF9fZSwgX19lLnNpemUgKCkp
OyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6
b3BlcmF0b3IgKz0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVn
bWVudGVkX3BsdXMgKF9NX2FycmF5LCBfTV9tYXNrLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNp
emUgKCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5l
IHZvaWQgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvciArPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYg
X19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX01fYXJyYXksIF9NX21hc2ssIF9f
ZSwgX19lLnNpemUgKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIG1h
c2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgLT0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29u
c3QgeyBfQXJyYXlfYXVnbWVudGVkX21pbnVzIChfTV9hcnJheSwgX01fbWFzaywgX0FycmF5PF9U
cD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRl
PGNsYXNzIEU+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgLT0gKGNvbnN0
IF9FeHByPEUsIF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21pbnVzIChfTV9h
cnJheSwgX01fbWFzaywgX19lLCBfX2Uuc2l6ZSAoKSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4gaW5saW5lIHZvaWQgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvciBePSAoY29uc3QgdmFsYXJy
YXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfeG9yIChfTV9hcnJheSwgX01f
bWFzaywgX0FycmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+IHRlbXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3Bl
cmF0b3IgXj0gKGNvbnN0IF9FeHByPEUsIF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVu
dGVkX3hvciAoX01fYXJyYXksIF9NX21hc2ssIF9fZSwgX19lLnNpemUgKCkpOyB9DQp0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgJj0g
KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX2FuZCAo
X01fYXJyYXksIF9NX21hc2ssIF9BcnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAoKSk7IH0gdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBFPiBpbmxpbmUgdm9pZCBtYXNrX2Fy
cmF5PF9UcD46Om9wZXJhdG9yICY9IChjb25zdCBfRXhwcjxFLCBfVHA+JiBfX2UpIGNvbnN0IHsg
X0FycmF5X2F1Z21lbnRlZF9hbmQgKF9NX2FycmF5LCBfTV9tYXNrLCBfX2UsIF9fZS5zaXplICgp
KTsgfQ0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBtYXNrX2FycmF5PF9UcD46
Om9wZXJhdG9yIHw9IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1
Z21lbnRlZF9vciAoX01fYXJyYXksIF9NX21hc2ssIF9BcnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6
ZSAoKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBFPiBpbmxpbmUg
dm9pZCBtYXNrX2FycmF5PF9UcD46Om9wZXJhdG9yIHw9IChjb25zdCBfRXhwcjxFLCBfVHA+JiBf
X2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9vciAoX01fYXJyYXksIF9NX21hc2ssIF9fZSwg
X19lLnNpemUgKCkpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIG1hc2tf
YXJyYXk8X1RwPjo6b3BlcmF0b3IgPDw9IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0
IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfTV9hcnJheSwgX01fbWFzaywgX0FycmF5
PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBs
YXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgPDw9IChj
b25zdCBfRXhwcjxFLCBfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9s
ZWZ0IChfTV9hcnJheSwgX01fbWFzaywgX19lLCBfX2Uuc2l6ZSAoKSk7IH0NCnRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvciA+Pj0gKGNv
bnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3Jp
Z2h0IChfTV9hcnJheSwgX01fbWFzaywgX0FycmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsg
fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIG1h
c2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgPj49IChjb25zdCBfRXhwcjxFLCBfVHA+JiBfX2UpIGNv
bnN0IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX01fYXJyYXksIF9NX21hc2ssIF9f
ZSwgX19lLnNpemUgKCkpOyB9DQoNCg0KDQp9DQojIDI2MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
dmFsYXJyYXkiIDIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2luZGlyZWN0X2Fy
cmF5LmgiIDEgMw0KIyA0MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9pbmRpcmVjdF9hcnJh
eS5oIiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGUgPGNsYXNzIF9UcD4NCiAgICAg
Y2xhc3MgaW5kaXJlY3RfYXJyYXkNCiAgICAgew0KICAgICBwdWJsaWM6DQogICAgICAgdHlwZWRl
ZiBfVHAgdmFsdWVfdHlwZTsNCg0KDQogICAgICAgaW5kaXJlY3RfYXJyYXkmIG9wZXJhdG9yPSAo
Y29uc3QgaW5kaXJlY3RfYXJyYXkmKTsNCg0KICAgICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCB2
YWxhcnJheTxfVHA+JikgY29uc3Q7DQogICAgICAgdm9pZCBvcGVyYXRvcio9IChjb25zdCB2YWxh
cnJheTxfVHA+JikgY29uc3Q7DQogICAgICAgdm9pZCBvcGVyYXRvci89IChjb25zdCB2YWxhcnJh
eTxfVHA+JikgY29uc3Q7DQogICAgICAgdm9pZCBvcGVyYXRvciU9IChjb25zdCB2YWxhcnJheTxf
VHA+JikgY29uc3Q7DQogICAgICAgdm9pZCBvcGVyYXRvcis9IChjb25zdCB2YWxhcnJheTxfVHA+
JikgY29uc3Q7DQogICAgICAgdm9pZCBvcGVyYXRvci09IChjb25zdCB2YWxhcnJheTxfVHA+Jikg
Y29uc3Q7DQogICAgICAgdm9pZCBvcGVyYXRvcl49IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29u
c3Q7DQogICAgICAgdm9pZCBvcGVyYXRvciY9IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7
DQogICAgICAgdm9pZCBvcGVyYXRvcnw9IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7DQog
ICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0Ow0KICAg
ICAgIHZvaWQgb3BlcmF0b3I+Pj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsNCiAgICAg
ICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgX1RwJik7DQoNCg0KICAgICAgIHRlbXBsYXRlPGNsYXNz
IF9Eb20+DQogICAgICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBj
b25zdDsNCiAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgIHZvaWQgb3BlcmF0b3Iq
PSAoY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0Ow0KICAgICAgIHRlbXBsYXRlPGNsYXNz
IF9Eb20+DQogICAgICAgdm9pZCBvcGVyYXRvci89IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+Jikg
Y29uc3Q7DQogICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICB2b2lkIG9wZXJhdG9y
JT0gKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsNCiAgICAgICB0ZW1wbGF0ZTxjbGFz
cyBfRG9tPg0KICAgICAgIHZvaWQgb3BlcmF0b3IrPSAoY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYp
IGNvbnN0Ow0KICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+DQogICAgICAgdm9pZCBvcGVyYXRv
ci09IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7DQogICAgICAgdGVtcGxhdGU8Y2xh
c3MgX0RvbT4NCiAgICAgICB2b2lkIG9wZXJhdG9yXj0gKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4m
KSBjb25zdDsNCiAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICAgIHZvaWQgb3BlcmF0
b3ImPSAoY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0Ow0KICAgICAgIHRlbXBsYXRlPGNs
YXNzIF9Eb20+DQogICAgICAgdm9pZCBvcGVyYXRvcnw9IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+
JikgY29uc3Q7DQogICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgICAgICB2b2lkIG9wZXJh
dG9yPDw9IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7DQogICAgICAgdGVtcGxhdGU8
Y2xhc3MgX0RvbT4NCiAgICAgICB2b2lkIG9wZXJhdG9yPj49IChjb25zdCBfRXhwcjxfRG9tLCBf
VHA+JikgY29uc3Q7DQoNCiAgICAgcHJpdmF0ZToNCiAgICAgICBpbmRpcmVjdF9hcnJheSAoY29u
c3QgaW5kaXJlY3RfYXJyYXkmKTsNCiAgICAgICBpbmRpcmVjdF9hcnJheSAoX0FycmF5PF9UcD4s
IHNpemVfdCwgX0FycmF5PHNpemVfdD4pOw0KDQogICAgICAgZnJpZW5kIGNsYXNzIHZhbGFycmF5
PF9UcD47DQogICAgICAgZnJpZW5kIGNsYXNzIGdzbGljZV9hcnJheTxfVHA+Ow0KDQogICAgICAg
Y29uc3Qgc2l6ZV90IF9NX3N6Ow0KICAgICAgIGNvbnN0IF9BcnJheTxzaXplX3Q+IF9NX2luZGV4
Ow0KICAgICAgIGNvbnN0IF9BcnJheTxfVHA+IF9NX2FycmF5Ow0KDQoNCiAgICAgICBpbmRpcmVj
dF9hcnJheSAoKTsNCiAgICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogIGlubGlu
ZSBpbmRpcmVjdF9hcnJheTxfVHA+OjppbmRpcmVjdF9hcnJheShjb25zdCBpbmRpcmVjdF9hcnJh
eTxfVHA+JiBfX2EpDQogICAgICAgICAgOiBfTV9zeiAoX19hLl9NX3N6KSwgX01faW5kZXggKF9f
YS5fTV9pbmRleCksDQogICAgICAgICAgICBfTV9hcnJheSAoX19hLl9NX2FycmF5KSB7fQ0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgICAgaW5saW5lDQogICAgIGluZGlyZWN0X2FycmF5
PF9UcD46OmluZGlyZWN0X2FycmF5IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX3MsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQXJyYXk8c2l6ZV90PiBfX2kp
DQogICAgICAgICAgICAgOiBfTV9zeiAoX19zKSwgX01faW5kZXggKF9faSksIF9NX2FycmF5IChf
X2EpIHt9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICAgICBpbmxpbmUgaW5kaXJlY3Rf
YXJyYXk8X1RwPiYNCiAgICAgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IGlu
ZGlyZWN0X2FycmF5PF9UcD4mIF9fYSkNCiAgICAgew0KICAgICAgIF9fdmFsYXJyYXlfY29weShf
X2EuX01fYXJyYXksIF9NX3N6LCBfX2EuX01faW5kZXgsIF9NX2FycmF5LCBfTV9pbmRleCk7DQog
ICAgICAgcmV0dXJuICp0aGlzOw0KICAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
DQogICAgIGlubGluZSB2b2lkDQogICAgIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yPSAo
Y29uc3QgX1RwJiBfX3QpDQogICAgIHsgX192YWxhcnJheV9maWxsKF9NX2FycmF5LCBfTV9pbmRl
eCwgX01fc3osIF9fdCk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogICAgIGlubGlu
ZSB2b2lkDQogICAgIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgdmFsYXJy
YXk8X1RwPiYgX192KSBjb25zdA0KICAgICB7IF9fdmFsYXJyYXlfY29weSAoX0FycmF5PF9UcD4g
KF9fdiksIF9NX3N6LCBfTV9hcnJheSwgX01faW5kZXgpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPg0KICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPg0KICAgICBpbmxpbmUgdm9pZA0KICAg
ICBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvcj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYg
X19lKSBjb25zdA0KICAgICB7IF9fdmFsYXJyYXlfY29weSAoX19lLCBfTV9zeiwgX01fYXJyYXks
IF9NX2luZGV4KTsgfQ0KIyAxNTcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvaW5kaXJlY3Rf
YXJyYXkuaCIgMw0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9h
cnJheTxfVHA+OjpvcGVyYXRvciAqPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7
IF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX01fYXJyYXksIF9NX2luZGV4LCBfQXJyYXk8
X1RwPiAoX192KSwgX01fc3opOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xh
c3MgX0RvbT4gaW5saW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKj0gKGNv
bnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbXVsdGlw
bGllcyAoX01fYXJyYXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsgfQ0KdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvciAvPSAoY29u
c3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAo
X01fYXJyYXksIF9NX2luZGV4LCBfQXJyYXk8X1RwPiAoX192KSwgX01fc3opOyB9IHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZvaWQgaW5kaXJlY3Rf
YXJyYXk8X1RwPjo6b3BlcmF0b3IgLz0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25z
dCB7IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX01fYXJyYXksIF9NX2luZGV4LCBfX2UsIF9N
X3N6KTsgfQ0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJh
eTxfVHA+OjpvcGVyYXRvciAlPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9B
cnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX01fYXJyYXksIF9NX2luZGV4LCBfQXJyYXk8X1RwPiAo
X192KSwgX01fc3opOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0Rv
bT4gaW5saW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3IgJT0gKGNvbnN0IF9F
eHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX01f
YXJyYXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsgfQ0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBp
bmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvciArPSAoY29uc3QgdmFsYXJy
YXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX01fYXJyYXksIF9N
X2luZGV4LCBfQXJyYXk8X1RwPiAoX192KSwgX01fc3opOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1RwPjo6
b3BlcmF0b3IgKz0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9h
dWdtZW50ZWRfcGx1cyAoX01fYXJyYXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsgfQ0KdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRv
ciAtPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRf
bWludXMgKF9NX2FycmF5LCBfTV9pbmRleCwgX0FycmF5PF9UcD4gKF9fdiksIF9NX3N6KTsgfSB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSB2b2lkIGlu
ZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yIC09IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9f
ZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21pbnVzIChfTV9hcnJheSwgX01faW5kZXgsIF9f
ZSwgX01fc3opOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIGluZGlyZWN0
X2FycmF5PF9UcD46Om9wZXJhdG9yIF49IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0
IHsgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9NX2FycmF5LCBfTV9pbmRleCwgX0FycmF5PF9UcD4g
KF9fdiksIF9NX3N6KTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9E
b20+IGlubGluZSB2b2lkIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yIF49IChjb25zdCBf
RXhwcjxfRG9tLF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3hvciAoX01fYXJy
YXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsgfQ0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxp
bmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvciAmPSAoY29uc3QgdmFsYXJyYXk8
X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfYW5kIChfTV9hcnJheSwgX01faW5k
ZXgsIF9BcnJheTxfVHA+IChfX3YpLCBfTV9zeik7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0
ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVy
YXRvciAmPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21l
bnRlZF9hbmQgKF9NX2FycmF5LCBfTV9pbmRleCwgX19lLCBfTV9zeik7IH0NCnRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3IgfD0g
KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX29yIChf
TV9hcnJheSwgX01faW5kZXgsIF9BcnJheTxfVHA+IChfX3YpLCBfTV9zeik7IH0gdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9h
cnJheTxfVHA+OjpvcGVyYXRvciB8PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0
IHsgX0FycmF5X2F1Z21lbnRlZF9vciAoX01fYXJyYXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsg
fQ0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+
OjpvcGVyYXRvciA8PD0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlf
YXVnbWVudGVkX3NoaWZ0X2xlZnQgKF9NX2FycmF5LCBfTV9pbmRleCwgX0FycmF5PF9UcD4gKF9f
diksIF9NX3N6KTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+
IGlubGluZSB2b2lkIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yIDw8PSAoY29uc3QgX0V4
cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChf
TV9hcnJheSwgX01faW5kZXgsIF9fZSwgX01fc3opOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
IGlubGluZSB2b2lkIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yID4+PSAoY29uc3QgdmFs
YXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfcmlnaHQgKF9N
X2FycmF5LCBfTV9pbmRleCwgX0FycmF5PF9UcD4gKF9fdiksIF9NX3N6KTsgfSB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSB2b2lkIGluZGlyZWN0X2Fy
cmF5PF9UcD46Om9wZXJhdG9yID4+PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0
IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX01fYXJyYXksIF9NX2luZGV4LCBfX2Us
IF9NX3N6KTsgfQ0KDQoNCg0KfQ0KIyAyNjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL3ZhbGFycmF5
IiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogIGlu
bGluZSB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheSAoKSA6IF9NX3NpemUgKDApLCBfTV9kYXRhICgw
KSB7fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgaW5saW5lIHZhbGFycmF5PF9UcD46
OnZhbGFycmF5IChzaXplX3QgX19uKQ0KICAgICAgOiBfTV9zaXplKF9fbiksIF9NX2RhdGEoX192
YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9fbikpDQogIHsgX192YWxhcnJheV9kZWZhdWx0X2Nv
bnN0cnVjdChfTV9kYXRhLCBfTV9kYXRhICsgX19uKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4NCiAgaW5saW5lIHZhbGFycmF5PF9UcD46OnZhbGFycmF5IChjb25zdCBfVHAmIF9fdCwg
c2l6ZV90IF9fbikNCiAgICA6IF9NX3NpemUoX19uKSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9z
dG9yYWdlPF9UcD4oX19uKSkNCiAgeyBfX3ZhbGFycmF5X2ZpbGxfY29uc3RydWN0IChfTV9kYXRh
LCBfTV9kYXRhICsgX19uLCBfX3QpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICBp
bmxpbmUgdmFsYXJyYXk8X1RwPjo6dmFsYXJyYXkgKGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9f
cCwgc2l6ZV90IF9fbikNCiAgICA6IF9NX3NpemUoX19uKSwgX01fZGF0YShfX3ZhbGFycmF5X2dl
dF9zdG9yYWdlPF9UcD4oX19uKSkNCiAgeyBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0IChfX3As
IF9fcCArIF9fbiwgX01fZGF0YSk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogIGlu
bGluZSB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KQ0K
ICAgIDogX01fc2l6ZShfX3YuX01fc2l6ZSksIF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFn
ZTxfVHA+KF9fdi5fTV9zaXplKSkNCiAgeyBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0IChfX3Yu
X01fZGF0YSwgX192Ll9NX2RhdGEgKyBfTV9zaXplLCBfTV9kYXRhKTsgfQ0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4NCiAgaW5saW5lIHZhbGFycmF5PF9UcD46OnZhbGFycmF5IChjb25zdCBz
bGljZV9hcnJheTxfVHA+JiBfX3NhKQ0KICAgIDogX01fc2l6ZShfX3NhLl9NX3N6KSwgX01fZGF0
YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19zYS5fTV9zeikpDQogIHsNCiAgICBfX3Zh
bGFycmF5X2NvcHkNCiAgICAgIChfX3NhLl9NX2FycmF5LCBfX3NhLl9NX3N6LCBfX3NhLl9NX3N0
cmlkZSwgX0FycmF5PF9UcD4oX01fZGF0YSkpOw0KICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPg0KICBpbmxpbmUgdmFsYXJyYXk8X1RwPjo6dmFsYXJyYXkgKGNvbnN0IGdzbGljZV9hcnJh
eTxfVHA+JiBfX2dhKQ0KICAgIDogX01fc2l6ZShfX2dhLl9NX2luZGV4LnNpemUoKSksDQogICAg
ICBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfTV9zaXplKSkNCiAgew0KICAg
IF9fdmFsYXJyYXlfY29weQ0KICAgICAgKF9fZ2EuX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9f
Z2EuX01faW5kZXgpLA0KICAgICAgIF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplKTsNCiAg
fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgaW5saW5lIHZhbGFycmF5PF9UcD46OnZh
bGFycmF5IChjb25zdCBtYXNrX2FycmF5PF9UcD4mIF9fbWEpDQogICAgOiBfTV9zaXplKF9fbWEu
X01fc3opLCBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfX21hLl9NX3N6KSkN
CiAgew0KICAgIF9fdmFsYXJyYXlfY29weQ0KICAgICAgKF9fbWEuX01fYXJyYXksIF9fbWEuX01f
bWFzaywgX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUpOw0KICB9DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgdmFsYXJyYXk8X1RwPjo6dmFsYXJyYXkgKGNvbnN0IGlu
ZGlyZWN0X2FycmF5PF9UcD4mIF9faWEpDQogICAgOiBfTV9zaXplKF9faWEuX01fc3opLCBfTV9k
YXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfX2lhLl9NX3N6KSkNCiAgew0KICAgIF9f
dmFsYXJyYXlfY29weQ0KICAgICAgKF9faWEuX01fYXJyYXksIF9faWEuX01faW5kZXgsIF9BcnJh
eTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplKTsNCiAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4NCiAgaW5saW5lIHZhbGFycmF5PF9UcD46OnZhbGFycmF5
IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UpDQogICAgOiBfTV9zaXplKF9fZS5zaXplICgp
KSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX01fc2l6ZSkpDQogIHsgX192
YWxhcnJheV9jb3B5IChfX2UsIF9NX3NpemUsIF9BcnJheTxfVHA+KF9NX2RhdGEpKTsgfQ0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgaW5saW5lIHZhbGFycmF5PF9UcD46On52YWxhcnJh
eSAoKQ0KICB7DQogICAgICBfX3ZhbGFycmF5X2Rlc3Ryb3lfZWxlbWVudHMoX01fZGF0YSwgX01f
ZGF0YSArIF9NX3NpemUpOw0KICAgICAgX192YWxhcnJheV9yZWxlYXNlX21lbW9yeShfTV9kYXRh
KTsNCiAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgaW5saW5lIHZhbGFycmF5PF9U
cD4mDQogIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192
KQ0KICB7DQoNCg0KDQogICAgICBfX3ZhbGFycmF5X2NvcHkoX192Ll9NX2RhdGEsIF9NX3NpemUs
IF9NX2RhdGEpOw0KICAgICAgcmV0dXJuICp0aGlzOw0KICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPg0KICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYNCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0
b3I9IChjb25zdCBfVHAmIF9fdCkNCiAgew0KICAgICAgX192YWxhcnJheV9maWxsIChfTV9kYXRh
LCBfTV9zaXplLCBfX3QpOw0KICAgICAgcmV0dXJuICp0aGlzOw0KICB9DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYNCiAgdmFsYXJyYXk8X1RwPjo6
b3BlcmF0b3I9IChjb25zdCBzbGljZV9hcnJheTxfVHA+JiBfX3NhKQ0KICB7DQogICAgICBfX3Zh
bGFycmF5X2NvcHkgKF9fc2EuX01fYXJyYXksIF9fc2EuX01fc3osDQogICAgICAgICAgICAgIF9f
c2EuX01fc3RyaWRlLCBfQXJyYXk8X1RwPihfTV9kYXRhKSk7DQogICAgICByZXR1cm4gKnRoaXM7
DQogIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogIGlubGluZSB2YWxhcnJheTxfVHA+
Jg0KICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcj0gKGNvbnN0IGdzbGljZV9hcnJheTxfVHA+JiBf
X2dhKQ0KICB7DQogICAgICBfX3ZhbGFycmF5X2NvcHkgKF9fZ2EuX01fYXJyYXksIF9BcnJheTxz
aXplX3Q+KF9fZ2EuX01faW5kZXgpLA0KICAgICAgICAgICAgICBfQXJyYXk8X1RwPihfTV9kYXRh
KSwgX01fc2l6ZSk7DQogICAgICByZXR1cm4gKnRoaXM7DQogIH0NCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+DQogIGlubGluZSB2YWxhcnJheTxfVHA+Jg0KICB2YWxhcnJheTxfVHA+OjpvcGVy
YXRvcj0gKGNvbnN0IG1hc2tfYXJyYXk8X1RwPiYgX19tYSkNCiAgew0KICAgICAgX192YWxhcnJh
eV9jb3B5IChfX21hLl9NX2FycmF5LCBfX21hLl9NX21hc2ssDQogICAgICAgICAgICAgIF9BcnJh
eTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplKTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAgfQ0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgaW5saW5lIHZhbGFycmF5PF9UcD4mDQogIHZhbGFy
cmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgaW5kaXJlY3RfYXJyYXk8X1RwPiYgX19pYSkNCiAg
ew0KICAgICAgX192YWxhcnJheV9jb3B5IChfX2lhLl9NX2FycmF5LCBfX2lhLl9NX2luZGV4LA0K
ICAgICAgICAgICAgICAgX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUpOw0KICAgICAgcmV0
dXJuICp0aGlzOw0KICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFz
cyBfRG9tPg0KICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYNCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0
b3I9IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UpDQogIHsNCiAgICAgIF9fdmFsYXJyYXlf
Y29weSAoX19lLCBfTV9zaXplLCBfQXJyYXk8X1RwPihfTV9kYXRhKSk7DQogICAgICByZXR1cm4g
KnRoaXM7DQogIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogIGlubGluZSBfRXhwcjxf
U0Nsb3M8X1ZhbEFycmF5LF9UcD4sIF9UcD4NCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXSAo
c2xpY2UgX19zKSBjb25zdA0KICB7DQogICAgICB0eXBlZGVmIF9TQ2xvczxfVmFsQXJyYXksX1Rw
PiBfQ2xvc3VyZTsNCiAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUg
KF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX3MpKTsNCiAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4NCiAgaW5saW5lIHNsaWNlX2FycmF5PF9UcD4NCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0
b3JbXSAoc2xpY2UgX19zKQ0KICB7DQogICAgICByZXR1cm4gc2xpY2VfYXJyYXk8X1RwPiAoX0Fy
cmF5PF9UcD4oX01fZGF0YSksIF9fcyk7DQogIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
DQogIGlubGluZSBfRXhwcjxfR0Nsb3M8X1ZhbEFycmF5LF9UcD4sIF9UcD4NCiAgdmFsYXJyYXk8
X1RwPjo6b3BlcmF0b3JbXSAoY29uc3QgZ3NsaWNlJiBfX2dzKSBjb25zdA0KICB7DQogICAgICB0
eXBlZGVmIF9HQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsNCiAgICAgIHJldHVybiBfRXhw
cjxfQ2xvc3VyZSwgX1RwPg0KICAgICAgICAgIChfQ2xvc3VyZSAoX0FycmF5PF9UcD4oX01fZGF0
YSksIF9fZ3MuX01faW5kZXgtPl9NX2luZGV4KSk7DQogIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+DQogIGlubGluZSBnc2xpY2VfYXJyYXk8X1RwPg0KICB2YWxhcnJheTxfVHA+OjpvcGVy
YXRvcltdIChjb25zdCBnc2xpY2UmIF9fZ3MpDQogIHsNCiAgICAgIHJldHVybiBnc2xpY2VfYXJy
YXk8X1RwPg0KICAgICAgICAgIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX19ncy5fTV9pbmRleC0+
X01faW5kZXgpOw0KICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgdmFs
YXJyYXk8X1RwPg0KICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcltdIChjb25zdCB2YWxhcnJheTxi
b29sPiYgX19tKSBjb25zdA0KICB7DQogICAgICBzaXplX3QgX19zICgwKTsNCiAgICAgIHNpemVf
dCBfX2UgKF9fbS5zaXplICgpKTsNCiAgICAgIGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19lOyAr
K19faSkNCiAgICAgICAgICBpZiAoX19tW19faV0pICsrX19zOw0KICAgICAgcmV0dXJuIHZhbGFy
cmF5PF9UcD4gKG1hc2tfYXJyYXk8X1RwPiAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fcywNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FycmF5PGJvb2w+IChfX20p
KSk7DQogIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogIGlubGluZSBtYXNrX2FycmF5
PF9UcD4NCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXSAoY29uc3QgdmFsYXJyYXk8Ym9vbD4m
IF9fbSkNCiAgew0KICAgICAgc2l6ZV90IF9fcyAoMCk7DQogICAgICBzaXplX3QgX19lIChfX20u
c2l6ZSAoKSk7DQogICAgICBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fZTsgKytfX2kpDQogICAg
ICAgICAgaWYgKF9fbVtfX2ldKSArK19fczsNCiAgICAgIHJldHVybiBtYXNrX2FycmF5PF9UcD4g
KF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX3MsIF9BcnJheTxib29sPiAoX19tKSk7DQogIH0NCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+DQogIGlubGluZSBfRXhwcjxfSUNsb3M8X1ZhbEFycmF5
LF9UcD4sIF9UcD4NCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXSAoY29uc3QgdmFsYXJyYXk8
c2l6ZV90PiYgX19pKSBjb25zdA0KICB7DQogICAgICB0eXBlZGVmIF9JQ2xvczxfVmFsQXJyYXks
X1RwPiBfQ2xvc3VyZTsNCiAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1
cmUgKCp0aGlzLCBfX2kpKTsNCiAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4NCiAgaW5s
aW5lIGluZGlyZWN0X2FycmF5PF9UcD4NCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXSAoY29u
c3QgdmFsYXJyYXk8c2l6ZV90PiYgX19pKQ0KICB7DQogICAgICByZXR1cm4gaW5kaXJlY3RfYXJy
YXk8X1RwPiAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9faS5zaXplKCksDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9BcnJheTxzaXplX3Q+IChfX2kpKTsNCiAgfQ0KDQogIHRlbXBs
YXRlPGNsYXNzIF9UcD4NCiAgaW5saW5lIHNpemVfdCB2YWxhcnJheTxfVHA+OjpzaXplICgpIGNv
bnN0IHsgcmV0dXJuIF9NX3NpemU7IH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHA+DQogIGlubGlu
ZSBfVHANCiAgdmFsYXJyYXk8X1RwPjo6c3VtICgpIGNvbnN0DQogIHsNCiAgICAgIHJldHVybiBf
X3ZhbGFycmF5X3N1bShfTV9kYXRhLCBfTV9kYXRhICsgX01fc2l6ZSk7DQogIH0NCiMgNDg2ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi92YWxhcnJheSIgMw0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0K
ICAgICBpbmxpbmUgdmFsYXJyYXk8X1RwPg0KICAgICB2YWxhcnJheTxfVHA+OjpzaGlmdChpbnQg
X19uKSBjb25zdA0KICAgICB7DQogICAgICAgX1RwKiBjb25zdCBfX2EgPSBzdGF0aWNfY2FzdDxf
VHAqPg0KICAgICAgICAgKF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9UcCkgKiBfTV9zaXplKSk7
DQogICAgICAgaWYgKF9fbiA9PSAwKQ0KICAgICAgICAgX192YWxhcnJheV9jb3B5X2NvbnN0cnVj
dChfTV9kYXRhLCBfTV9kYXRhICsgX01fc2l6ZSwgX19hKTsNCiAgICAgICBlbHNlIGlmIChfX24g
PiAwKQ0KICAgICAgICAgew0KICAgICAgICAgICBpZiAoc2l6ZV90KF9fbikgPiBfTV9zaXplKQ0K
ICAgICAgICAgICAgIF9fdmFsYXJyYXlfZGVmYXVsdF9jb25zdHJ1Y3QoX19hLCBfX2EgKyBfX24p
Ow0KICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgX192YWxh
cnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRhK19fbiwgX01fZGF0YSArIF9NX3NpemUsIF9fYSk7
DQogICAgICAgICAgICAgICBfX3ZhbGFycmF5X2RlZmF1bHRfY29uc3RydWN0KF9fYStfTV9zaXpl
LV9fbiwgX19hICsgX01fc2l6ZSk7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICAg
IGVsc2UNCiAgICAgICAgIHsNCiAgICAgICAgICAgX192YWxhcnJheV9jb3B5X2NvbnN0cnVjdCAo
X01fZGF0YSwgX01fZGF0YStfTV9zaXplK19fbiwgX19hLV9fbik7DQogICAgICAgICAgIF9fdmFs
YXJyYXlfZGVmYXVsdF9jb25zdHJ1Y3QoX19hLCBfX2EgLSBfX24pOw0KICAgICAgICAgfQ0KICAg
ICAgIHJldHVybiB2YWxhcnJheTxfVHA+IChfX2EsIF9NX3NpemUpOw0KICAgICB9DQoNCiAgdGVt
cGxhdGUgPGNsYXNzIF9UcD4NCiAgICAgaW5saW5lIHZhbGFycmF5PF9UcD4NCiAgICAgdmFsYXJy
YXk8X1RwPjo6Y3NoaWZ0IChpbnQgX19uKSBjb25zdA0KICAgICB7DQogICAgICAgX1RwKiBjb25z
dCBfX2EgPSBzdGF0aWNfY2FzdDxfVHAqPg0KICAgICAgICAgKF9fYnVpbHRpbl9hbGxvY2EgKHNp
emVvZihfVHApICogX01fc2l6ZSkpOw0KICAgICAgIGlmIChfX24gPT0gMCkNCiAgICAgICAgIF9f
dmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX01fZGF0YSwgX01fZGF0YSArIF9NX3NpemUsIF9fYSk7
DQogICAgICAgZWxzZSBpZiAoX19uID4gMCkNCiAgICAgICAgIHsNCiAgICAgICAgICAgX192YWxh
cnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRhLCBfTV9kYXRhK19fbiwgX19hK19NX3NpemUtX19u
KTsNCiAgICAgICAgICAgX192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRhK19fbiwgX01f
ZGF0YSArIF9NX3NpemUsIF9fYSk7DQogICAgICAgICB9DQogICAgICAgZWxzZQ0KICAgICAgICAg
ew0KICAgICAgICAgICBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0DQogICAgICAgICAgICAgKF9N
X2RhdGEgKyBfTV9zaXplK19fbiwgX01fZGF0YSArIF9NX3NpemUsIF9fYSk7DQogICAgICAgICAg
IF9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QNCiAgICAgICAgICAgICAoX01fZGF0YSwgX01fZGF0
YSArIF9NX3NpemUrX19uLCBfX2EgLSBfX24pOw0KICAgICAgICAgfQ0KICAgICAgIHJldHVybiB2
YWxhcnJheTxfVHA+KF9fYSwgX01fc2l6ZSk7DQogICAgIH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPg0KICBpbmxpbmUgdm9pZA0KICB2YWxhcnJheTxfVHA+OjpyZXNpemUgKHNpemVfdCBfX24s
IF9UcCBfX2MpDQogIHsNCg0KDQoNCiAgICBfX3ZhbGFycmF5X2Rlc3Ryb3lfZWxlbWVudHMoX01f
ZGF0YSwgX01fZGF0YSArIF9NX3NpemUpOw0KICAgIGlmIChfTV9zaXplICE9IF9fbikNCiAgICAg
IHsNCiAgICAgICAgX192YWxhcnJheV9yZWxlYXNlX21lbW9yeShfTV9kYXRhKTsNCiAgICAgICAg
X01fc2l6ZSA9IF9fbjsNCiAgICAgICAgX01fZGF0YSA9IF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8
X1RwPihfX24pOw0KICAgICAgfQ0KICAgIF9fdmFsYXJyYXlfZmlsbF9jb25zdHJ1Y3QoX01fZGF0
YSwgX01fZGF0YSArIF9fbiwgX19jKTsNCiAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4N
CiAgaW5saW5lIF9UcA0KICB2YWxhcnJheTxfVHA+OjptaW4oKSBjb25zdA0KICB7DQogICAgICBy
ZXR1cm4gKm1pbl9lbGVtZW50IChfTV9kYXRhLCBfTV9kYXRhK19NX3NpemUpOw0KICB9DQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgX1RwDQogIHZhbGFycmF5PF9UcD46Om1h
eCgpIGNvbnN0DQogIHsNCiAgICAgIHJldHVybiAqbWF4X2VsZW1lbnQgKF9NX2RhdGEsIF9NX2Rh
dGErX01fc2l6ZSk7DQogIH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHA+DQogIGlubGluZSBfRXhw
cjxfVmFsRnVuQ2xvczxfVmFsQXJyYXksX1RwPixfVHA+DQogIHZhbGFycmF5PF9UcD46OmFwcGx5
IChfVHAgZnVuYyAoX1RwKSkgY29uc3QNCiAgew0KICAgICAgdHlwZWRlZiBfVmFsRnVuQ2xvczxf
VmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsNCiAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+
IChfQ2xvc3VyZSAoKnRoaXMsIGZ1bmMpKTsNCiAgfQ0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcD4N
CiAgaW5saW5lIF9FeHByPF9SZWZGdW5DbG9zPF9WYWxBcnJheSxfVHA+LF9UcD4NCiAgdmFsYXJy
YXk8X1RwPjo6YXBwbHkgKF9UcCBmdW5jIChjb25zdCBfVHAgJikpIGNvbnN0DQogIHsNCiAgICAg
IHR5cGVkZWYgX1JlZkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4gX0Nsb3N1cmU7DQogICAgICByZXR1
cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKCp0aGlzLCBmdW5jKSk7DQogIH0NCiMg
NTkxICIvdXNyL2luY2x1ZGUvYysrLzMuMi92YWxhcnJheSIgMw0KICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4gaW5saW5lIF9FeHByPF9VbkNsb3M8X1VuYXJ5X3BsdXMsX1ZhbEFycmF5LF9UcD4s
IF9UcD4gdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgKygpIGNvbnN0IHsgdHlwZWRlZiBfVW5DbG9z
PF9VbmFyeV9wbHVzLF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1
cmUsIF9UcD4gKF9DbG9zdXJlICgqdGhpcykpOyB9DQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PiBpbmxpbmUgX0V4cHI8X1VuQ2xvczxuZWdhdGUsX1ZhbEFycmF5LF9UcD4sIF9UcD4gdmFsYXJy
YXk8X1RwPjo6b3BlcmF0b3IgLSgpIGNvbnN0IHsgdHlwZWRlZiBfVW5DbG9zPG5lZ2F0ZSxfVmFs
QXJyYXksX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+IChfQ2xvc3Vy
ZSAoKnRoaXMpKTsgfQ0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9V
bkNsb3M8X0JpdHdpc2Vfbm90LF9WYWxBcnJheSxfVHA+LCBfVHA+IHZhbGFycmF5PF9UcD46Om9w
ZXJhdG9yIH4oKSBjb25zdCB7IHR5cGVkZWYgX1VuQ2xvczxfQml0d2lzZV9ub3QsX1ZhbEFycmF5
LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKCp0
aGlzKSk7IH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPg0KICBpbmxpbmUgX0V4cHI8
X1VuQ2xvczxsb2dpY2FsX25vdCxfVmFsQXJyYXksX1RwPiwgYm9vbD4NCiAgdmFsYXJyYXk8X1Rw
Pjo6b3BlcmF0b3IhKCkgY29uc3QNCiAgew0KICAgICAgdHlwZWRlZiBfVW5DbG9zPGxvZ2ljYWxf
bm90LF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOw0KICAgICAgcmV0dXJuIF9FeHByPF9DbG9zdXJl
LCBib29sPiAoX0Nsb3N1cmUgKCp0aGlzKSk7DQogIH0NCiMgNjIzICIvdXNyL2luY2x1ZGUvYysr
LzMuMi92YWxhcnJheSIgMw0KdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8X1Rw
PiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yICs9IChjb25zdCBfVHAgJl9fdCkgeyBfQXJyYXlf
YXVnbWVudGVkX3BsdXMgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplLCBfX3QpOyByZXR1
cm4gKnRoaXM7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZh
bGFycmF5PF9UcD46Om9wZXJhdG9yICs9IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgX0Fy
cmF5X2F1Z21lbnRlZF9wbHVzIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX0FycmF5
PF9UcD4oX192Ll9NX2RhdGEpKTsgcmV0dXJuICp0aGlzOyB9DQp0ZW1wbGF0ZTxjbGFzcyBfVHA+
IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgLT0gKGNvbnN0
IF9UcCAmX190KSB7IF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+KF9NX2RhdGEp
LCBfTV9zaXplLCBfX3QpOyByZXR1cm4gKnRoaXM7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxp
bmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yIC09IChjb25zdCB2YWxh
cnJheTxfVHA+ICZfX3YpIHsgX0FycmF5X2F1Z21lbnRlZF9taW51cyAoX0FycmF5PF9UcD4oX01f
ZGF0YSksIF9NX3NpemUsIF9BcnJheTxfVHA+KF9fdi5fTV9kYXRhKSk7IHJldHVybiAqdGhpczsg
fQ0KdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5PF9U
cD46Om9wZXJhdG9yICo9IChjb25zdCBfVHAgJl9fdCkgeyBfQXJyYXlfYXVnbWVudGVkX211bHRp
cGxpZXMgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplLCBfX3QpOyByZXR1cm4gKnRoaXM7
IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5PF9U
cD46Om9wZXJhdG9yICo9IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgX0FycmF5X2F1Z21l
bnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX0FycmF5PF9U
cD4oX192Ll9NX2RhdGEpKTsgcmV0dXJuICp0aGlzOyB9DQp0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlu
bGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgLz0gKGNvbnN0IF9U
cCAmX190KSB7IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX0FycmF5PF9UcD4oX01fZGF0YSks
IF9NX3NpemUsIF9fdCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGlu
ZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgLz0gKGNvbnN0IHZhbGFy
cmF5PF9UcD4gJl9fdikgeyBfQXJyYXlfYXVnbWVudGVkX2RpdmlkZXMgKF9BcnJheTxfVHA+KF9N
X2RhdGEpLCBfTV9zaXplLCBfQXJyYXk8X1RwPihfX3YuX01fZGF0YSkpOyByZXR1cm4gKnRoaXM7
IH0NCnRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxf
VHA+OjpvcGVyYXRvciAlPSAoY29uc3QgX1RwICZfX3QpIHsgX0FycmF5X2F1Z21lbnRlZF9tb2R1
bHVzIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX190KTsgcmV0dXJuICp0aGlzOyB9
IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+
OjpvcGVyYXRvciAlPSAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IF9BcnJheV9hdWdtZW50
ZWRfbW9kdWx1cyAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUsIF9BcnJheTxfVHA+KF9f
di5fTV9kYXRhKSk7IHJldHVybiAqdGhpczsgfQ0KdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUg
dmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yIF49IChjb25zdCBfVHAgJl9f
dCkgeyBfQXJyYXlfYXVnbWVudGVkX3hvciAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUs
IF9fdCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSB2YWxhcnJh
eTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgXj0gKGNvbnN0IHZhbGFycmF5PF9UcD4g
Jl9fdikgeyBfQXJyYXlfYXVnbWVudGVkX3hvciAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3Np
emUsIF9BcnJheTxfVHA+KF9fdi5fTV9kYXRhKSk7IHJldHVybiAqdGhpczsgfQ0KdGVtcGxhdGU8
Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9y
ICY9IChjb25zdCBfVHAgJl9fdCkgeyBfQXJyYXlfYXVnbWVudGVkX2FuZCAoX0FycmF5PF9UcD4o
X01fZGF0YSksIF9NX3NpemUsIF9fdCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFzcyBf
VHA+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgJj0gKGNv
bnN0IHZhbGFycmF5PF9UcD4gJl9fdikgeyBfQXJyYXlfYXVnbWVudGVkX2FuZCAoX0FycmF5PF9U
cD4oX01fZGF0YSksIF9NX3NpemUsIF9BcnJheTxfVHA+KF9fdi5fTV9kYXRhKSk7IHJldHVybiAq
dGhpczsgfQ0KdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFy
cmF5PF9UcD46Om9wZXJhdG9yIHw9IChjb25zdCBfVHAgJl9fdCkgeyBfQXJyYXlfYXVnbWVudGVk
X29yIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX190KTsgcmV0dXJuICp0aGlzOyB9
IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+
OjpvcGVyYXRvciB8PSAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IF9BcnJheV9hdWdtZW50
ZWRfb3IgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplLCBfQXJyYXk8X1RwPihfX3YuX01f
ZGF0YSkpOyByZXR1cm4gKnRoaXM7IH0NCnRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFy
cmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciA8PD0gKGNvbnN0IF9UcCAmX190KSB7
IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3Np
emUsIF9fdCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSB2YWxh
cnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgPDw9IChjb25zdCB2YWxhcnJheTxf
VHA+ICZfX3YpIHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfQXJyYXk8X1RwPihfTV9k
YXRhKSwgX01fc2l6ZSwgX0FycmF5PF9UcD4oX192Ll9NX2RhdGEpKTsgcmV0dXJuICp0aGlzOyB9
DQp0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1Rw
Pjo6b3BlcmF0b3IgPj49IChjb25zdCBfVHAgJl9fdCkgeyBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0
X3JpZ2h0IChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX190KTsgcmV0dXJuICp0aGlz
OyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxf
VHA+OjpvcGVyYXRvciA+Pj0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdikgeyBfQXJyYXlfYXVn
bWVudGVkX3NoaWZ0X3JpZ2h0IChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX0FycmF5
PF9UcD4oX192Ll9NX2RhdGEpKTsgcmV0dXJuICp0aGlzOyB9DQoNCg0KDQoNCn0NCg0KDQpuYW1l
c3BhY2Ugc3RkDQp7DQojIDY1MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvdmFsYXJyYXkiIDMNCnRl
bXBsYXRlPGNsYXNzIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZhbGFycmF5PF9U
cD4gJiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciArPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+ICZf
X2UpIHsgX0FycmF5X2F1Z21lbnRlZF9wbHVzIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX19lLCBf
TV9zaXplKTsgcmV0dXJuICp0aGlzOyB9DQp0ZW1wbGF0ZTxjbGFzcyBfVHA+IHRlbXBsYXRlPGNs
YXNzIF9Eb20+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3Ig
LT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiAmX19lKSB7IF9BcnJheV9hdWdtZW50ZWRfbWludXMg
KF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX2UsIF9NX3NpemUpOyByZXR1cm4gKnRoaXM7IH0NCnRl
bXBsYXRlPGNsYXNzIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZhbGFycmF5PF9U
cD4gJiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciAqPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+ICZf
X2UpIHsgX0FycmF5X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPihfTV9kYXRhKSwg
X19lLCBfTV9zaXplKTsgcmV0dXJuICp0aGlzOyB9DQp0ZW1wbGF0ZTxjbGFzcyBfVHA+IHRlbXBs
YXRlPGNsYXNzIF9Eb20+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3Bl
cmF0b3IgLz0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiAmX19lKSB7IF9BcnJheV9hdWdtZW50ZWRf
ZGl2aWRlcyAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fZSwgX01fc2l6ZSk7IHJldHVybiAqdGhp
czsgfQ0KdGVtcGxhdGU8Y2xhc3MgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdmFs
YXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yICU9IChjb25zdCBfRXhwcjxfRG9t
LF9UcD4gJl9fZSkgeyBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+KF9NX2Rh
dGEpLCBfX2UsIF9NX3NpemUpOyByZXR1cm4gKnRoaXM7IH0NCnRlbXBsYXRlPGNsYXNzIF9UcD4g
dGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+
OjpvcGVyYXRvciBePSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+ICZfX2UpIHsgX0FycmF5X2F1Z21l
bnRlZF94b3IgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX2UsIF9NX3NpemUpOyByZXR1cm4gKnRo
aXM7IH0NCnRlbXBsYXRlPGNsYXNzIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZh
bGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciAmPSAoY29uc3QgX0V4cHI8X0Rv
bSxfVHA+ICZfX2UpIHsgX0FycmF5X2F1Z21lbnRlZF9hbmQgKF9BcnJheTxfVHA+KF9NX2RhdGEp
LCBfX2UsIF9NX3NpemUpOyByZXR1cm4gKnRoaXM7IH0NCnRlbXBsYXRlPGNsYXNzIF9UcD4gdGVt
cGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+Ojpv
cGVyYXRvciB8PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+ICZfX2UpIHsgX0FycmF5X2F1Z21lbnRl
ZF9vciAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fZSwgX01fc2l6ZSk7IHJldHVybiAqdGhpczsg
fQ0KdGVtcGxhdGU8Y2xhc3MgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdmFsYXJy
YXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yIDw8PSAoY29uc3QgX0V4cHI8X0RvbSxf
VHA+ICZfX2UpIHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfQXJyYXk8X1RwPihfTV9k
YXRhKSwgX19lLCBfTV9zaXplKTsgcmV0dXJuICp0aGlzOyB9DQp0ZW1wbGF0ZTxjbGFzcyBfVHA+
IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1Rw
Pjo6b3BlcmF0b3IgPj49IChjb25zdCBfRXhwcjxfRG9tLF9UcD4gJl9fZSkgeyBfQXJyYXlfYXVn
bWVudGVkX3NoaWZ0X3JpZ2h0IChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX19lLCBfTV9zaXplKTsg
cmV0dXJuICp0aGlzOyB9DQojIDY5MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvdmFsYXJyYXkiIDMN
CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPHBsdXMsX1ZhbEFy
cmF5LF9WYWxBcnJheSxfVHAsX1RwPiwgX1RwPiBvcGVyYXRvciArIChjb25zdCB2YWxhcnJheTxf
VHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPHBs
dXMsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9D
bG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAoX192LCBfX3cpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxwbHVzLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9U
cD4sX1RwPiBvcGVyYXRvciArIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAm
X190KSB7IHR5cGVkZWYgX0JpbkNsb3M8cGx1cyxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+
IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9f
dCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPHBsdXMs
X0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPixfVHA+IG9wZXJhdG9yICsgKGNvbnN0IF9UcCAm
X190LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxwbHVzLF9D
b25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3Vy
ZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g
aW5saW5lIF9FeHByPF9CaW5DbG9zPG1pbnVzLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4s
IF9UcD4gb3BlcmF0b3IgLSAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192LCBjb25zdCB2YWxhcnJh
eTxfVHA+ICZfX3cpIHsgdHlwZWRlZiBfQmluQ2xvczxtaW51cyxfVmFsQXJyYXksX1ZhbEFycmF5
LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJl
IChfX3YsIF9fdykpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5D
bG9zPG1pbnVzLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sX1RwPiBvcGVyYXRvciAtIChj
b25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNs
b3M8bWludXMsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9F
eHByPF9DbG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAoX192LCBfX3QpKTsgfSB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtaW51cyxfQ29uc3RhbnQsX1ZhbEFycmF5
LF9UcCxfVHA+LF9UcD4gb3BlcmF0b3IgLSAoY29uc3QgX1RwICZfX3QsIGNvbnN0IHZhbGFycmF5
PF9UcD4gJl9fdikgeyB0eXBlZGVmIF9CaW5DbG9zPG1pbnVzLF9Db25zdGFudCxfVmFsQXJyYXks
X1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUg
KF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5D
bG9zPG11bHRpcGxpZXMsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiwgX1RwPiBvcGVyYXRv
ciAqIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykg
eyB0eXBlZGVmIF9CaW5DbG9zPG11bHRpcGxpZXMsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1Rw
PiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAoX192LCBf
X3cpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtdWx0
aXBsaWVzLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sX1RwPiBvcGVyYXRvciAqIChjb25z
dCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8
bXVsdGlwbGllcyxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4g
X0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9IHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG11bHRpcGxpZXMsX0NvbnN0YW50LF9W
YWxBcnJheSxfVHAsX1RwPixfVHA+IG9wZXJhdG9yICogKGNvbnN0IF9UcCAmX190LCBjb25zdCB2
YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxtdWx0aXBsaWVzLF9Db25zdGFu
dCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1Rw
PiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5l
IF9FeHByPF9CaW5DbG9zPGRpdmlkZXMsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiwgX1Rw
PiBvcGVyYXRvciAvIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9U
cD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPGRpdmlkZXMsX1ZhbEFycmF5LF9WYWxBcnJheSxf
VHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAo
X192LCBfX3cpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xv
czxkaXZpZGVzLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sX1RwPiBvcGVyYXRvciAvIChj
b25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNs
b3M8ZGl2aWRlcyxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4g
X0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9IHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGRpdmlkZXMsX0NvbnN0YW50LF9WYWxB
cnJheSxfVHAsX1RwPixfVHA+IG9wZXJhdG9yIC8gKGNvbnN0IF9UcCAmX190LCBjb25zdCB2YWxh
cnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxkaXZpZGVzLF9Db25zdGFudCxfVmFs
QXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Ns
b3N1cmUgKF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHBy
PF9CaW5DbG9zPG1vZHVsdXMsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiwgX1RwPiBvcGVy
YXRvciAlIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9f
dykgeyB0eXBlZGVmIF9CaW5DbG9zPG1vZHVsdXMsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1Rw
PiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAoX192LCBf
X3cpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtb2R1
bHVzLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sX1RwPiBvcGVyYXRvciAlIChjb25zdCB2
YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8bW9k
dWx1cyxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8
X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG1vZHVsdXMsX0NvbnN0YW50LF9WYWxBcnJheSxf
VHAsX1RwPixfVHA+IG9wZXJhdG9yICUgKGNvbnN0IF9UcCAmX190LCBjb25zdCB2YWxhcnJheTxf
VHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxtb2R1bHVzLF9Db25zdGFudCxfVmFsQXJyYXks
X1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUg
KF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5D
bG9zPF9CaXR3aXNlX3hvcixfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+LCBfVHA+IG9wZXJh
dG9yIF4gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX193
KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfeG9yLF9WYWxBcnJheSxfVmFsQXJyYXksX1Rw
LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9f
diwgX193KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8
X0JpdHdpc2VfeG9yLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sX1RwPiBvcGVyYXRvciBe
IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0Jp
bkNsb3M8X0JpdHdpc2VfeG9yLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4gX0Nsb3N1cmU7
IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdiwgX190KSk7IH0gdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2VfeG9yLF9D
b25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4sX1RwPiBvcGVyYXRvciBeIChjb25zdCBfVHAgJl9f
dCwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2Vf
eG9yLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxf
Q2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX2FuZCxfVmFsQXJyYXksX1ZhbEFy
cmF5LF9UcCxfVHA+LCBfVHA+IG9wZXJhdG9yICYgKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwg
Y29uc3QgdmFsYXJyYXk8X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfYW5k
LF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xv
c3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9WYWxBcnJheSxfQ29uc3RhbnQs
X1RwLF9UcD4sX1RwPiBvcGVyYXRvciAmIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0
IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9WYWxBcnJheSxfQ29u
c3RhbnQsX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Ns
b3N1cmUgKF9fdiwgX190KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8
X0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4sX1RwPiBv
cGVyYXRvciAmIChjb25zdCBfVHAgJl9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5
cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4g
X0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdCwgX192
KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3
aXNlX29yLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4sIF9UcD4gb3BlcmF0b3IgfCAoY29u
c3QgdmFsYXJyYXk8X1RwPiAmX192LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3cpIHsgdHlwZWRl
ZiBfQmluQ2xvczxfQml0d2lzZV9vcixfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9z
dXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdykpOyB9
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX29y
LF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sX1RwPiBvcGVyYXRvciB8IChjb25zdCB2YWxh
cnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdp
c2Vfb3IsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHBy
PF9DbG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAoX192LCBfX3QpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfQml0d2lzZV9vcixfQ29uc3RhbnQsX1ZhbEFy
cmF5LF9UcCxfVHA+LF9UcD4gb3BlcmF0b3IgfCAoY29uc3QgX1RwICZfX3QsIGNvbnN0IHZhbGFy
cmF5PF9UcD4gJl9fdikgeyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX29yLF9Db25zdGFudCxf
VmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAo
X0Nsb3N1cmUgKF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9F
eHByPF9CaW5DbG9zPF9TaGlmdF9sZWZ0LF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4sIF9U
cD4gb3BlcmF0b3IgPDwgKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgdmFsYXJyYXk8
X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8X1NoaWZ0X2xlZnQsX1ZhbEFycmF5LF9WYWxB
cnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+IChfQ2xv
c3VyZSAoX192LCBfX3cpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxf
QmluQ2xvczxfU2hpZnRfbGVmdCxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+LF9UcD4gb3Bl
cmF0b3IgPDwgKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZfX3QpIHsgdHlw
ZWRlZiBfQmluQ2xvczxfU2hpZnRfbGVmdCxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9D
bG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdCkp
OyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9TaGlmdF9s
ZWZ0LF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4sX1RwPiBvcGVyYXRvciA8PCAoY29uc3Qg
X1RwICZfX3QsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdikgeyB0eXBlZGVmIF9CaW5DbG9zPF9T
aGlmdF9sZWZ0LF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBf
RXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfVmFsQXJyYXks
X1ZhbEFycmF5LF9UcCxfVHA+LCBfVHA+IG9wZXJhdG9yID4+IChjb25zdCB2YWxhcnJheTxfVHA+
ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPF9TaGlm
dF9yaWdodCxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4
cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdykpOyB9IHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfVmFsQXJyYXksX0Nv
bnN0YW50LF9UcCxfVHA+LF9UcD4gb3BlcmF0b3IgPj4gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9f
diwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfcmlnaHQsX1ZhbEFy
cmF5LF9Db25zdGFudCxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBf
VHA+IChfQ2xvc3VyZSAoX192LCBfX3QpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu
ZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfcmlnaHQsX0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1Rw
PixfVHA+IG9wZXJhdG9yID4+IChjb25zdCBfVHAgJl9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiAm
X192KSB7IHR5cGVkZWYgX0JpbkNsb3M8X1NoaWZ0X3JpZ2h0LF9Db25zdGFudCxfVmFsQXJyYXks
X1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUg
KF9fdCwgX192KSk7IH0NCiMgNzI5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi92YWxhcnJheSIgMw0K
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bG9naWNhbF9hbmQs
X1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPixib29sPiBvcGVyYXRvciAmJiAoY29uc3QgdmFs
YXJyYXk8X1RwPiAmX192LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3cpIHsgdHlwZWRlZiBfQmlu
Q2xvczxsb2dpY2FsX2FuZCxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyBy
ZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX3cpKTsgfSB0ZW1w
bGF0ZTxjbGFzcyBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsb2dpY2FsX2FuZCxfVmFsQXJy
YXksX0NvbnN0YW50LF9UcCxfVHA+LGJvb2w+IG9wZXJhdG9yICYmIChjb25zdCB2YWxhcnJheTxf
VHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8bG9naWNhbF9hbmQs
X1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z
dXJlLCBib29sPiAoX0Nsb3N1cmUgKF9fdiwgX190KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBp
bmxpbmUgX0V4cHI8X0JpbkNsb3M8bG9naWNhbF9hbmQsX0NvbnN0YW50LF9WYWxBcnJheSxfVHAs
X1RwPixib29sPiBvcGVyYXRvciAmJiAoY29uc3QgX1RwICZfX3QsIGNvbnN0IHZhbGFycmF5PF9U
cD4gJl9fdikgeyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfYW5kLF9Db25zdGFudCxfVmFsQXJy
YXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9z
dXJlIChfX3QsIF9fdikpOyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxf
QmluQ2xvczxsb2dpY2FsX29yLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4sYm9vbD4gb3Bl
cmF0b3IgfHwgKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgdmFsYXJyYXk8X1RwPiAm
X193KSB7IHR5cGVkZWYgX0JpbkNsb3M8bG9naWNhbF9vcixfVmFsQXJyYXksX1ZhbEFycmF5LF9U
cCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAo
X192LCBfX3cpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxs
b2dpY2FsX29yLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgfHwg
KGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRlZiBfQmlu
Q2xvczxsb2dpY2FsX29yLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4gX0Nsb3N1cmU7IHJl
dHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9IHRlbXBs
YXRlPGNsYXNzIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxvZ2ljYWxfb3IsX0NvbnN0YW50
LF9WYWxBcnJheSxfVHAsX1RwPixib29sPiBvcGVyYXRvciB8fCAoY29uc3QgX1RwICZfX3QsIGNv
bnN0IHZhbGFycmF5PF9UcD4gJl9fdikgeyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfb3IsX0Nv
bnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJl
LCBib29sPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g
aW5saW5lIF9FeHByPF9CaW5DbG9zPGVxdWFsX3RvLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9U
cD4sYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgdmFs
YXJyYXk8X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8ZXF1YWxfdG8sX1ZhbEFycmF5LF9W
YWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBib29sPiAo
X0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgX0V4cHI8
X0JpbkNsb3M8ZXF1YWxfdG8sX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPixib29sPiBvcGVy
YXRvciA9PSAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192LCBjb25zdCBfVHAgJl9fdCkgeyB0eXBl
ZGVmIF9CaW5DbG9zPGVxdWFsX3RvLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4gX0Nsb3N1
cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9
IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGVxdWFsX3RvLF9Db25z
dGFudCxfVmFsQXJyYXksX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0IF9UcCAmX190
LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxlcXVhbF90byxf
Q29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1
cmUsIGJvb2w+IChfQ2xvc3VyZSAoX190LCBfX3YpKTsgfQ0KdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bm90X2VxdWFsX3RvLF9WYWxBcnJheSxfVmFsQXJyYXks
X1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgIT0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29u
c3QgdmFsYXJyYXk8X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8bm90X2VxdWFsX3RvLF9W
YWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3Vy
ZSwgYm9vbD4gKF9DbG9zdXJlIChfX3YsIF9fdykpOyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5s
aW5lIF9FeHByPF9CaW5DbG9zPG5vdF9lcXVhbF90byxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxf
VHA+LGJvb2w+IG9wZXJhdG9yICE9IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9U
cCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8bm90X2VxdWFsX3RvLF9WYWxBcnJheSxfQ29uc3Rh
bnQsX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9z
dXJlIChfX3YsIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIF9FeHByPF9CaW5D
bG9zPG5vdF9lcXVhbF90byxfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+LGJvb2w+IG9wZXJh
dG9yICE9IChjb25zdCBfVHAgJl9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5cGVk
ZWYgX0JpbkNsb3M8bm90X2VxdWFsX3RvLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Ns
b3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3QsIF9fdikp
OyB9DQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsZXNzLF9W
YWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPCAoY29uc3QgdmFsYXJy
YXk8X1RwPiAmX192LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3cpIHsgdHlwZWRlZiBfQmluQ2xv
czxsZXNzLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhw
cjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3YsIF9fdykpOyB9IHRlbXBsYXRlPGNsYXNz
IF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxlc3MsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAs
X1RwPixib29sPiBvcGVyYXRvciA8IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9U
cCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8bGVzcyxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxf
VHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX192
LCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsZXNz
LF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPCAoY29uc3QgX1Rw
ICZfX3QsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdikgeyB0eXBlZGVmIF9CaW5DbG9zPGxlc3Ms
X0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z
dXJlLCBib29sPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0NCnRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGdyZWF0ZXIsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAs
X1RwPixib29sPiBvcGVyYXRvciA+IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZh
bGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPGdyZWF0ZXIsX1ZhbEFycmF5LF9W
YWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBib29sPiAo
X0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgX0V4cHI8
X0JpbkNsb3M8Z3JlYXRlcixfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+LGJvb2w+IG9wZXJh
dG9yID4gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRl
ZiBfQmluQ2xvczxncmVhdGVyLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4gX0Nsb3N1cmU7
IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9IHRl
bXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGdyZWF0ZXIsX0NvbnN0YW50
LF9WYWxBcnJheSxfVHAsX1RwPixib29sPiBvcGVyYXRvciA+IChjb25zdCBfVHAgJl9fdCwgY29u
c3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcixfQ29uc3Rh
bnQsX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIGJv
b2w+IChfQ2xvc3VyZSAoX190LCBfX3YpKTsgfQ0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxp
bmUgX0V4cHI8X0JpbkNsb3M8bGVzc19lcXVhbCxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+
LGJvb2w+IG9wZXJhdG9yIDw9IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFy
cmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPGxlc3NfZXF1YWwsX1ZhbEFycmF5LF9W
YWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBib29sPiAo
X0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgX0V4cHI8
X0JpbkNsb3M8bGVzc19lcXVhbCxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+LGJvb2w+IG9w
ZXJhdG9yIDw9IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5
cGVkZWYgX0JpbkNsb3M8bGVzc19lcXVhbCxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9D
bG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX3Qp
KTsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsZXNzX2VxdWFs
LF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPD0gKGNvbnN0IF9U
cCAmX190LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxsZXNz
X2VxdWFsLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhw
cjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3QsIF9fdikpOyB9DQp0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9WYWxBcnJheSxf
VmFsQXJyYXksX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPj0gKGNvbnN0IHZhbGFycmF5PF9UcD4g
Jl9fdiwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRl
cl9lcXVhbCxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4
cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX3cpKTsgfSB0ZW1wbGF0ZTxjbGFz
cyBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9WYWxBcnJheSxfQ29u
c3RhbnQsX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPj0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9f
diwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRlZiBfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9WYWxB
cnJheSxfQ29uc3RhbnQsX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwg
Ym9vbD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5l
IF9FeHByPF9CaW5DbG9zPGdyZWF0ZXJfZXF1YWwsX0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1Rw
Pixib29sPiBvcGVyYXRvciA+PSAoY29uc3QgX1RwICZfX3QsIGNvbnN0IHZhbGFycmF5PF9UcD4g
Jl9fdikgeyB0eXBlZGVmIF9CaW5DbG9zPGdyZWF0ZXJfZXF1YWwsX0NvbnN0YW50LF9WYWxBcnJh
eSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBib29sPiAoX0Nsb3N1
cmUgKF9fdCwgX192KSk7IH0NCg0KDQoNCn0NCiMgMiAidmFsYXJydGVzdC5jcHAiIDINCg0KaW50
IG1haW4oKSB7DQogICAgc3RkOjp2YWxhcnJheTxpbnQ+IHYxOw0KICAgIHN0ZDo6dmFsYXJyYXk8
aW50PiB2MjsNCg0KICAgIHYxLnJlc2l6ZSgxKTsNCiAgICB2MVswXT0xMDsNCiAgICB2Mj12MTsN
CiAgICBpbnQgaT12MlswXTsNCn0NCg==


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2003-03-14 15:46 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-03-14 15:46 libstdc++/10064: crash when using valarray's operator= Gabriel Dos Reis
  -- strict thread matches above, loose matches on Subject: below --
2003-03-14 13:46 Gabriel Dos Reis
2003-03-14 13:40 gdr
2003-03-13 19:56 brian.r.landy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).