public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/2876: Internal error: Segmentation fault
@ 2001-12-07 16:58 rodrigc
  0 siblings, 0 replies; 3+ messages in thread
From: rodrigc @ 2001-12-07 16:58 UTC (permalink / raw)
  To: gcc-bugs, gcc-gnats, gcc-prs, gcsr, gilles.rajaobelina, mmitchel

Synopsis: Internal error: Segmentation fault

State-Changed-From-To: analyzed->closed
State-Changed-By: rodrigc
State-Changed-When: Fri Dec  7 16:58:18 2001
State-Changed-Why:
    Appears to be fixed in gcc 3.0.3.

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


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

* Re: c++/2876: Internal error: Segmentation fault
@ 2001-12-07 17:06 rodrigc
  0 siblings, 0 replies; 3+ messages in thread
From: rodrigc @ 2001-12-07 17:06 UTC (permalink / raw)
  To: mmitchel; +Cc: gcc-prs

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

From: rodrigc@gcc.gnu.org
To: gcc-bugs@gcc.gnu.org, gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org,
  gcsr@free.fr, gilles.rajaobelina@wanadoo.fr, mmitchel@gcc.gnu.org
Cc:  
Subject: Re: c++/2876: Internal error: Segmentation fault
Date: 8 Dec 2001 00:58:19 -0000

 Synopsis: Internal error: Segmentation fault
 
 State-Changed-From-To: analyzed->closed
 State-Changed-By: rodrigc
 State-Changed-When: Fri Dec  7 16:58:18 2001
 State-Changed-Why:
     Appears to be fixed in gcc 3.0.3.
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&pr=2876&database=gcc


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

* c++/2876: Internal error: Segmentation fault
@ 2001-05-20  0:46 gilles.rajaobelina
  0 siblings, 0 replies; 3+ messages in thread
From: gilles.rajaobelina @ 2001-05-20  0:46 UTC (permalink / raw)
  To: gcc-gnats; +Cc: gcsr

>Number:         2876
>Category:       c++
>Synopsis:       Internal error: Segmentation fault
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun May 20 00:46:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Gilles-Claude Rajaobelina
>Release:        unknown-1.0
>Organization:
>Environment:
System: Linux mylinux.mydomain 2.2.15 #21 dim sep 24 15:10:43 CEST 2000 i686 unknown
Architecture: i686
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: /obj/GNU/src/gcc/configure --prefix /opt/gnu-new i686-pc-linux-gnu
>Description:
c++ failes to compile attached source with -O3 option
>How-To-Repeat:
-O3
>Fix:
-O2 temporarily
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="nsFormControlHelper.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="nsFormControlHelper.ii"

IyAxICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIKIyAxICIuLi8uLi8uLi8uLi9jb25maWctZGVm
cy5oIiAxCiMgMiAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAyMiAibnNGb3JtQ29udHJv
bEhlbHBlci5jcHAiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiIDEK
IyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zRGVidWcuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNEZWJ1Zy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NvbS5oIiAxCiMg
MjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlYnVnLmgiIDIKIyAxICIvR00vaGRkOS9t
b3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMzkgIi9HTS9o
ZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCiMgMSAiL0dN
L2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY3B1Y2ZnLmgiIDEKIyA0
MCAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIg
MgoKCiMgMSAiL29wdC9nbnUtbmV3L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi9vcHQvZ251LW5ldy9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGludCBwdHJkaWZm
X3Q7CiMgMTk5ICIvb3B0L2dudS1uZXcvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDQzICIv
R00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAyCiMg
MjM0ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5o
IgpleHRlcm4gIkMiIHsKIyAyNDQgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgdW5zaWduZWQgY2hhciBQUlVpbnQ4OwojIDI1OCAi
L0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlw
ZWRlZiBzaWduZWQgY2hhciBQUkludDg7CiMgMjcxICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFBSVWlu
dDE2Owp0eXBlZGVmIHNob3J0IFBSSW50MTY7CiMgMjg0ICIvR00vaGRkOS9tb3ppbGxhL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGludCBQUlVp
bnQzMjsKdHlwZWRlZiBpbnQgUFJJbnQzMjsKIyAzMTggIi9HTS9oZGQ5L21vemlsbGEvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgbG9uZyBsb25nIFBSSW50NjQ7
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIFBSVWludDY0OwojIDM0MiAiL0dNL2hkZDkvbW96
aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBpbnQgUFJJ
bnRuOwp0eXBlZGVmIHVuc2lnbmVkIGludCBQUlVpbnRuOwojIDM1MyAiL0dNL2hkZDkvbW96aWxs
YS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBkb3VibGUgUFJG
bG9hdDY0OwoKCgoKCgp0eXBlZGVmIHNpemVfdCBQUlNpemU7CgoKCgoKCgp0eXBlZGVmIFBSSW50
MzIgUFJPZmZzZXQzMjsKdHlwZWRlZiBQUkludDY0IFBST2Zmc2V0NjQ7CgoKCgoKCgp0eXBlZGVm
IHB0cmRpZmZfdCBQUlB0cmRpZmY7CgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgUFJVcHRy
ZGlmZjsKIyAzOTUgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cnR5cGVzLmgiCnR5cGVkZWYgUFJJbnRuIFBSQm9vbDsKIyA0MDUgIi9HTS9oZGQ5L21vemlsbGEv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgUFJVaW50OCBQUlBh
Y2tlZEJvb2w7CgoKCgoKdHlwZWRlZiBlbnVtIHsgUFJfRkFJTFVSRSA9IC0xLCBQUl9TVUNDRVNT
ID0gMCB9IFBSU3RhdHVzOwojIDQyNCAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBsb25nIFBSV29yZDsKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIFBSVXdvcmQ7CiMgNDY2ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJ0eXBlcy5oIgojIDEgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIiAxCiMgMjkgIi9HTS9oZGQ5L21vemlsbGEv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBS
VWludG4gdWludG47Cgp0eXBlZGVmIFBSSW50biBpbnRuOwojIDUzICIvR00vaGRkOS9tb3ppbGxh
L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvb2Jzb2xldGUvcHJvdHlwZXMuaCIKIyAxICIvbmV3
bGliL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvbmV3bGliL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMKIyAxICIvbmV3bGliL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjgzICIvbmV3
bGliL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi9uZXdsaWIvaW5jbHVkZS9zeXMvY2RlZnMu
aCIgMSAzCiMgMjg0ICIvbmV3bGliL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzExICIvbmV3
bGliL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi9uZXdsaWIvaW5jbHVkZS9nbnUvc3R1YnMu
aCIgMSAzCiMgMzEyICIvbmV3bGliL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjcgIi9uZXds
aWIvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL25ld2xpYi9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjYgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDMKIyAxICIvbmV3bGliL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi9uZXdsaWIv
aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL29wdC9nbnUtbmV3L2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL25ld2xp
Yi9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9j
aGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25f
XyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25f
XyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi9uZXdsaWIvaW5jbHVkZS9i
aXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNp
Z25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsK
dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50
IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9u
X18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18g
dHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVh
ZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3Vf
aW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9f
aW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtf
dDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0
eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgX191X2xv
bmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9p
bnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2Zz
aWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0
eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRz
X3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3
YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVmIGludCBfX2Nsb2Nr
aWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7
CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCnR5cGVkZWYgbG9u
ZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVk
ZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90
Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBf
X2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCgp0eXBlZGVm
IF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKCnR5
cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9f
dF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVk
IGludCBfX3NvY2tsZW5fdDsKCgoKCiMgMSAiL25ld2xpYi9pbmNsdWRlL2JpdHMvcHRocmVhZHR5
cGVzLmgiIDEgMwojIDIzICIvbmV3bGliL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwoj
IDEgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvbmV3bGliL2luY2x1
ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2No
ZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL25ld2xpYi9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz
LmgiIDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7
CiAgaW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9z
dHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRy
X3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBf
X3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9f
c2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9p
ZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoK
Cgp0eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwog
IF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVm
IHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYg
dW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBf
X21fcmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7
CiAgaW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBw
dGhyZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0g
cHRocmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0
eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rs
b2NrIF9fcndfbG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndf
d3JpdGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rl
c2NyIF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFy
ZWQ7Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2tr
aW5kOwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVm
IHZvbGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0
cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAg
aW50IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVh
ZF9iYXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVh
ZF9iYXJyaWVyYXR0cl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90
OwojIDE0NCAiL25ld2xpYi9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgMzEgIi9uZXdsaWIv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVk
ZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3Vf
bG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3Qg
dV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgbG9m
Zl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82NF90IGlu
bzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lk
X3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5s
aW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9m
Zl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBfX3BpZF90
IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNz
aXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBj
YWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTI2ICIvbmV3bGliL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDMKIyAxICIvbmV3bGliL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA1NiAiL25l
d2xpYi9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL3R5cGVzLmgi
IDEgMwojIDU3ICIvbmV3bGliL2luY2x1ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fY2xvY2tf
dCBjbG9ja190OwoKCgoKCgoKIyAxICIvbmV3bGliL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMK
IyA2OCAiL25ld2xpYi9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX3RpbWVfdCB0aW1l
X3Q7CiMgNzkgIi9uZXdsaWIvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvbmV3bGliL2luY2x1ZGUv
Yml0cy90eXBlcy5oIiAxIDMKIyA4MCAiL25ld2xpYi9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlw
ZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgOTEgIi9uZXdsaWIvaW5jbHVkZS90aW1lLmgi
IDMKIyAxICIvbmV3bGliL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA5MiAiL25ld2xpYi9p
bmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMjcgIi9u
ZXdsaWIvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgX191c2Vjb25kc190IHVz
ZWNvbmRzX3Q7CgoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoKCgojIDEg
Ii9vcHQvZ251LW5ldy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9z
dGRkZWYuaCIgMSAzCiMgMTQxICIvbmV3bGliL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlu
dCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTg0ICIvbmV3bGliL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2
X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQg
aW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9f
KSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
d29yZF9fKSkpOwojIDIwNiAiL25ld2xpYi9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL25l
d2xpYi9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMiAiL25ld2xpYi9pbmNsdWRlL2VuZGlhbi5o
IiAzCiMgMSAiL25ld2xpYi9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvbmV3bGliL2lu
Y2x1ZGUvZW5kaWFuLmgiIDIgMwojIDM3ICIvbmV3bGliL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAx
ICIvbmV3bGliL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi9uZXdsaWIvaW5jbHVk
ZS9lbmRpYW4uaCIgMiAzCiMgMjA3ICIvbmV3bGliL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoK
CiMgMSAiL25ld2xpYi9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMjUgIi9uZXdsaWIvaW5j
bHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvbmV3bGliL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAz
CiMgMjYgIi9uZXdsaWIvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL25ld2xpYi9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi9uZXdsaWIvaW5jbHVkZS9zeXMvc2VsZWN0
LmgiIDIgMwoKCiMgMSAiL25ld2xpYi9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIv
bmV3bGliL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi9uZXdsaWIvaW5jbHVkZS9i
aXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL25ld2xpYi9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMK
dHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVu
c2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcg
aW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUgIi9uZXdsaWIvaW5jbHVkZS9zeXMvc2VsZWN0
LmgiIDIgMwoKCgp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgojIDEgIi9uZXdsaWIv
aW5jbHVkZS90aW1lLmgiIDEgMwojIDEwNiAiL25ld2xpYi9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1
Y3QgdGltZXNwZWMKICB7CiAgICBsb25nIGludCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2Vj
OwogIH07CiMgNDQgIi9uZXdsaWIvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKIyAxICIvbmV3
bGliL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDYzICIvbmV3bGliL2luY2x1ZGUvYml0cy90
aW1lLmgiIDMKIyAxICIvbmV3bGliL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2NCAiL25l
d2xpYi9pbmNsdWRlL2JpdHMvdGltZS5oIiAyIDMKCgoKc3RydWN0IHRpbWV2YWwKICB7CiAgICBf
X3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NiAiL25l
d2xpYi9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9t
YXNrOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNb
MTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoK
dHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKIyA4OSAiL25ld2xpYi9pbmNsdWRlL3N5cy9zZWxl
Y3QuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMs
IGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQg
Kl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0
cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jl
c3RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQg
X19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAg
IGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3Nl
dCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1
Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0LAogICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdtYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjEw
ICIvbmV3bGliL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL25ld2xpYi9pbmNsdWRl
L3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjEzICIvbmV3bGliL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYgX19i
bGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoK
dHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTEgIi9uZXdsaWIvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9f
ZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNu
dDY0X3Q7CgoKfQojIDU0ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvb2Jzb2xldGUvcHJvdHlwZXMuaCIgMgoKCgoKCnR5cGVkZWYgUFJVaW50NjQgdWludDY0OwoK
dHlwZWRlZiBQUlVpbnQzMiB1aW50MzI7CgoKCnR5cGVkZWYgUFJVaW50MTYgdWludDE2Owp0eXBl
ZGVmIFBSVWludDggdWludDg7CiMgNzcgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSSW50NjQgaW50NjQ7CgoK
CgoKCgp0eXBlZGVmIFBSSW50MzIgaW50MzI7CgoKCgp0eXBlZGVmIFBSSW50MTYgaW50MTY7CnR5
cGVkZWYgUFJJbnQ4IGludDg7CgoKCgoKdHlwZWRlZiBQUkZsb2F0NjQgZmxvYXQ2NDsKdHlwZWRl
ZiBQUlVwdHJkaWZmIHVwdHJkaWZmX3Q7CnR5cGVkZWYgUFJVd29yZCB1cHJ3b3JkX3Q7CnR5cGVk
ZWYgUFJXb3JkIHByd29yZF90OwojIDQ2NyAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMgoKCgoKCn0KIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zRGVidWcuaCIgMgojIDQyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNEZWJ1
Zy5oIgpjbGFzcyBuc0RlYnVnIHsKcHVibGljOgoKCgoKCgogIHN0YXRpYyB2b2lkIEFib3J0SWZG
YWxzZShjb25zdCBjaGFyKiBhU3RyLCBjb25zdCBjaGFyKiBhRXhwciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwojIDYw
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNEZWJ1Zy5oIgogIHN0YXRpYyBQUkJvb2wgV2Fy
bklmRmFsc2UoY29uc3QgY2hhciogYVN0ciwgY29uc3QgY2hhciogYUV4cHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBhTGluZSk7
CiMgNzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlYnVnLmgiCiAgc3RhdGljIHZvaWQg
U2V0V2FybmluZ01lc3NhZ2VCb3hFbmFibGUoUFJCb29sIGFPbk9mZik7CgoKCgogIHN0YXRpYyBQ
UkJvb2wgR2V0V2FybmluZ01lc3NhZ2VCb3hFbmFibGUodm9pZCk7CiMgOTYgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0RlYnVnLmgiCiAgc3RhdGljIHZvaWQgQWJvcnQoY29uc3QgY2hhciog
YUZpbGUsIFBSSW50biBhTGluZSk7CgoKCgogIHN0YXRpYyB2b2lkIEJyZWFrKGNvbnN0IGNoYXIq
IGFGaWxlLCBQUkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBQcmVDb25kaXRpb24oY29u
c3QgY2hhciogYVN0ciwgY29uc3QgY2hhciogYUV4cHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoKCiAgc3RhdGlj
IHZvaWQgUG9zdENvbmRpdGlvbihjb25zdCBjaGFyKiBhU3RyLCBjb25zdCBjaGFyKiBhRXhwciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJ
bnRuIGFMaW5lKTsKCgoKCiAgc3RhdGljIHZvaWQgQXNzZXJ0aW9uKGNvbnN0IGNoYXIqIGFTdHIs
IGNvbnN0IGNoYXIqIGFFeHByLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogYUZpbGUsIFBSSW50biBhTGluZSk7CgoKCgogIHN0YXRpYyB2b2lkIE5vdFlldEltcGxl
bWVudGVkKGNvbnN0IGNoYXIqIGFNZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoKCiAgc3RhdGlj
IHZvaWQgTm90UmVhY2hlZChjb25zdCBjaGFyKiBhTWVzc2FnZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoKCiAgc3Rh
dGljIHZvaWQgRXJyb3IoY29uc3QgY2hhciogYU1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9p
ZCBXYXJuaW5nKGNvbnN0IGNoYXIqIGFNZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwp9OwojIDQ1ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIgMgoKCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDEwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
U3VwcG9ydHMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNyb290aWRsLmgiIDEK
IyAxMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zcm9vdGlkbC5oIgojIDEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNjb3JlLmgiCiMgMSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3BydHlwZXMuaCIgMQojIDM4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgi
IDIKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlYnVnLmgiIDEKIyA0MSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAyCiMgMjA5ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNjb3JlLmgiCiAgICB0eXBlZGVmIFBSVWludDE2IFBSVW5pY2hhcjsKIyAxMiAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zcm9vdGlkbC5oIiAyCiMgMSAiL0dNL2hkZDkvbW96
aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIiAxCiMgMzIgIi9HTS9oZGQ5
L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKIyAxICIvR00vaGRk
OS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb25nLmgiIDEKIyAzMCAiL0dN
L2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9uZy5oIgojIDEgIi9H
TS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAz
MSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9uZy5oIiAy
CgpleHRlcm4gIkMiIHsKIyA1MCAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BybG9uZy5oIgpleHRlcm4gUFJJbnQ2NCBMTF9NYXhJbnQodm9pZCk7CmV4dGVybiBQ
UkludDY0IExMX01pbkludCh2b2lkKTsKZXh0ZXJuIFBSSW50NjQgTExfWmVybyh2b2lkKTsKIyA0
MDcgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvbmcuaCIK
fQojIDMzICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1l
LmgiIDIKCmV4dGVybiAiQyIgewojIDYxICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9p
bmNsdWRlL25zcHIvcHJ0aW1lLmgiCnR5cGVkZWYgUFJJbnQ2NCBQUlRpbWU7CgoKCgoKCnR5cGVk
ZWYgc3RydWN0IFBSVGltZVBhcmFtZXRlcnMgewogICAgUFJJbnQzMiB0cF9nbXRfb2Zmc2V0Owog
ICAgUFJJbnQzMiB0cF9kc3Rfb2Zmc2V0Owp9IFBSVGltZVBhcmFtZXRlcnM7CiMgOTYgIi9HTS9o
ZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKdHlwZWRlZiBz
dHJ1Y3QgUFJFeHBsb2RlZFRpbWUgewogICAgUFJJbnQzMiB0bV91c2VjOwogICAgUFJJbnQzMiB0
bV9zZWM7CgogICAgUFJJbnQzMiB0bV9taW47CiAgICBQUkludDMyIHRtX2hvdXI7CiAgICBQUklu
dDMyIHRtX21kYXk7CgogICAgUFJJbnQzMiB0bV9tb250aDsKICAgIFBSSW50MTYgdG1feWVhcjsK
CgogICAgUFJJbnQ4IHRtX3dkYXk7CgogICAgUFJJbnQxNiB0bV95ZGF5OwoKCiAgICBQUlRpbWVQ
YXJhbWV0ZXJzIHRtX3BhcmFtczsKfSBQUkV4cGxvZGVkVGltZTsKIyAxMzkgIi9HTS9oZGQ5L21v
emlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKdHlwZWRlZiBQUlRpbWVQ
YXJhbWV0ZXJzICggKlBSVGltZVBhcmFtRm4pKGNvbnN0IFBSRXhwbG9kZWRUaW1lICpnbXQpOwoj
IDE2MSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5o
IgpleHRlcm4gUFJUaW1lCgpQUl9Ob3codm9pZCk7CiMgMTc1ICIvR00vaGRkOS9tb3ppbGxhL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiB2b2lkIFBSX0V4cGxvZGVU
aW1lKAogICAgUFJUaW1lIHVzZWNzLCBQUlRpbWVQYXJhbUZuIHBhcmFtcywgUFJFeHBsb2RlZFRp
bWUgKmV4cGxvZGVkKTsKCgoKCgpleHRlcm4gUFJUaW1lCgpQUl9JbXBsb2RlVGltZShjb25zdCBQ
UkV4cGxvZGVkVGltZSAqZXhwbG9kZWQpOwojIDE5OCAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgpleHRlcm4gdm9pZCBQUl9Ob3JtYWxpemVUaW1l
KAogICAgUFJFeHBsb2RlZFRpbWUgKmV4cGxvZGVkLCBQUlRpbWVQYXJhbUZuIHBhcmFtcyk7CgoK
CgoKCmV4dGVybiBQUlRpbWVQYXJhbWV0ZXJzIFBSX0xvY2FsVGltZVBhcmFtZXRlcnMoY29uc3Qg
UFJFeHBsb2RlZFRpbWUgKmdtdCk7CgoKZXh0ZXJuIFBSVGltZVBhcmFtZXRlcnMgUFJfR01UUGFy
YW1ldGVycyhjb25zdCBQUkV4cGxvZGVkVGltZSAqZ210KTsKCgoKCgpleHRlcm4gUFJUaW1lUGFy
YW1ldGVycyBQUl9VU1BhY2lmaWNUaW1lUGFyYW1ldGVycyhjb25zdCBQUkV4cGxvZGVkVGltZSAq
Z210KTsKIyAyNDggIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cnRpbWUuaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1BhcnNlVGltZVN0cmluZyAoCiAgICAgICAgY29u
c3QgY2hhciAqc3RyaW5nLAogICAgICAgIFBSQm9vbCBkZWZhdWx0X3RvX2dtdCwKICAgICAgICBQ
UlRpbWUgKnJlc3VsdCk7CiMgMjY1ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiBQUlVpbnQzMiBQUl9Gb3JtYXRUaW1lKGNoYXIgKmJ1
ZiwgaW50IGJ1ZmxlbiwgY29uc3QgY2hhciAqZm10LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUFJFeHBsb2RlZFRpbWUgKnRtKTsKCgoKCmV4dGVybiBQ
UlVpbnQzMgpQUl9Gb3JtYXRUaW1lVVNFbmdsaXNoKCBjaGFyKiBidWYsIFBSVWludDMyIGJ1ZlNp
emUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZvcm1hdCwgY29uc3QgUFJF
eHBsb2RlZFRpbWUqIHRtICk7CgoKCn0KIyAxMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
cm9vdGlkbC5oIiAyCiMgMTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5o
IiAyCiMgMTExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIiAxCiMgMzIgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgiCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lTdXBwb3J0c1V0aWxzLmgiIDIKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Rl
YnVnLmgiIDEKIyAzNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMu
aCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lELmgiIDEKIyAyNiAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUQuaCIKIyAxICIvbmV3bGliL2luY2x1ZGUvc3RyaW5nLmgi
IDEgMwojIDI2ICIvbmV3bGliL2luY2x1ZGUvc3RyaW5nLmgiIDMKIyAxICIvbmV3bGliL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi9uZXdsaWIvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgpl
eHRlcm4gIkMiIHsKCgoKCiMgMSAiL29wdC9nbnUtbmV3L2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL25ld2xpYi9pbmNsdWRlL3N0
cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rl
c3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywg
c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVz
dCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9p
ZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVf
dCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpfX3Ms
IGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2Nv
bnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChf
X2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2Nv
bnN0IHZvaWQgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBz
aXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK
CmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNw
eSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBj
aGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAq
X19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3RyY21w
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBj
aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0
IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmlj
dCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgojIDEgIi9uZXdsaWIvaW5jbHVkZS94
bG9jYWxlLmgiIDEgMwojIDI4ICIvbmV3bGliL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYg
c3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVz
WzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGlu
dCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xv
Y2FsZV90OwojIDEwOSAiL25ld2xpYi9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgpleHRlcm4gaW50
IF9fc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19s
b2NhbGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl
eHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19z
cmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19s
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAq
c3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL25ld2xpYi9pbmNsdWRlL3N0
cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJy
Y2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9f
cywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRl
cm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVq
ZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBz
aXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpz
dHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIg
KF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmNh
c2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIg
KnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2RlbGltKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAq
X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90
IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVk
bGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rl
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3Ny
Yywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jl
c3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0
cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxl
biAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXpl
X3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
CgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCmV4dGVy
biBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19i
dWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqX19zLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19z
cmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnpl
cm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiY21wIChf
X2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXgg
KF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f
YykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZz
IChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBp
bnQgZmZzbCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsK
Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKCgoKZXh0ZXJuIGludCBzdHJjYXNl
Y21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChf
X2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gaW50IF9fc3Ry
Y2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAoX19jb25zdCBj
aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3Ry
aWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVsaW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0
IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRo
cm93ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3Qs
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGNo
YXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hh
ciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpz
dHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0
ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2b2lk
ICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
Y2hhciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CiMgMzYz
ICIvbmV3bGliL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJRC5oIiAyCiMgNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lELmgiCnN0
cnVjdCBuc0lEIHsKCgoKCgogIFBSVWludDMyIG0wOwogIFBSVWludDE2IG0xOwogIFBSVWludDE2
IG0yOwogIFBSVWludDggbTNbOF07CiMgNjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lE
LmgiCiAgaW5saW5lIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNJRCYgb3RoZXIpIGNvbnN0IHsKICAg
IHJldHVybiAoUFJCb29sKQogICAgICAoKCgoUFJVaW50MzIqKSAmbTApWzBdID09ICgoUFJVaW50
MzIqKSAmb3RoZXIubTApWzBdKSAmJgogICAgICAgKCgoUFJVaW50MzIqKSAmbTApWzFdID09ICgo
UFJVaW50MzIqKSAmb3RoZXIubTApWzFdKSAmJgogICAgICAgKCgoUFJVaW50MzIqKSAmbTApWzJd
ID09ICgoUFJVaW50MzIqKSAmb3RoZXIubTApWzJdKSAmJgogICAgICAgKCgoUFJVaW50MzIqKSAm
bTApWzNdID09ICgoUFJVaW50MzIqKSAmb3RoZXIubTApWzNdKSk7CiAgfQoKCgoKCiAgICAgICAg
IFBSQm9vbCBQYXJzZShjb25zdCBjaGFyICphSURTdHIpOwoKCgoKCiAgICAgICAgIGNoYXIqIFRv
U3RyaW5nKCkgY29uc3Q7Cgp9OwojIDEwMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUQu
aCIKdHlwZWRlZiBuc0lEIG5zQ0lEOwojIDM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
U3VwcG9ydHNVdGlscy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlELmgi
IDEKIyAzNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlELmgiCnR5cGVkZWYgbnNJRCBu
c0lJRDsKIyAzOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIg
MgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Vycm9yLmgiIDEKIyAyNiAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zRXJyb3IuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNDb20uaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNFcnJvci5oIiAy
CiMgMSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMu
aCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNFcnJvci5oIiAyCgoKCgoKdHlw
ZWRlZiBQUlVpbnQzMiBuc3Jlc3VsdDsKIyAyNjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0Vycm9yLmgiCmV4dGVybiBuc3Jlc3VsdApOU19FcnJvckFjY29yZGluZ1RvTlNQUigpOwojIDM5
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIiAyCiMgMSAiL0dN
L2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIiAxCiMgMjcg
Ii9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIKIyAx
ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAx
CiMgMjggIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20u
aCIgMgojIDEgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxv
Y2suaCIgMQojIDMyICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJsb2NrLmgiCiMgMSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3BydHlwZXMuaCIgMQojIDMzICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcHJsb2NrLmgiIDIKCmV4dGVybiAiQyIgewojIDQ3ICIvR00vaGRkOS9tb3ppbGxhL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiCnR5cGVkZWYgc3RydWN0IFBSTG9jayBQ
UkxvY2s7CiMgNjQgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cmxvY2suaCIKZXh0ZXJuIFBSTG9jayogUFJfTmV3TG9jayh2b2lkKTsKIyA3NSAiL0dNL2hkZDkv
bW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgpleHRlcm4gdm9pZCBQ
Ul9EZXN0cm95TG9jayhQUkxvY2sgKmxvY2spOwojIDg2ICIvR00vaGRkOS9tb3ppbGxhL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiCmV4dGVybiB2b2lkIFBSX0xvY2soUFJMb2Nr
ICpsb2NrKTsKIyA5OCAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3BybG9jay5oIgpleHRlcm4gUFJTdGF0dXMgUFJfVW5sb2NrKFBSTG9jayAqbG9jayk7Cgp9CiMg
MjkgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIg
MgoKZXh0ZXJuICJDIiB7CiMgNDEgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wcmF0b20uaCIKZXh0ZXJuIFBSSW50MzIgUFJfQXRvbWljSW5jcmVtZW50KFBSSW50
MzIgKnZhbCk7CiMgNTIgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wcmF0b20uaCIKZXh0ZXJuIFBSSW50MzIgUFJfQXRvbWljRGVjcmVtZW50KFBSSW50MzIgKnZh
bCk7CiMgNjQgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0
b20uaCIKZXh0ZXJuIFBSSW50MzIgUFJfQXRvbWljU2V0KFBSSW50MzIgKnZhbCwgUFJJbnQzMiBu
ZXd2YWwpOwojIDc2ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJhdG9tLmgiCmV4dGVybiBQUkludDMyIFBSX0F0b21pY0FkZChQUkludDMyICpwdHIsIFBSSW50
MzIgdmFsKTsKCgoKCnR5cGVkZWYgc3RydWN0IFBSU3RhY2tFbGVtU3RyIFBSU3RhY2tFbGVtOwoK
c3RydWN0IFBSU3RhY2tFbGVtU3RyIHsKICAgIFBSU3RhY2tFbGVtICpwcnN0a19lbGVtX25leHQ7
Cgp9OwoKdHlwZWRlZiBzdHJ1Y3QgUFJTdGFja1N0ciBQUlN0YWNrOwojIDk5ICIvR00vaGRkOS9t
b3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiBQUlN0YWNr
ICogUFJfQ3JlYXRlU3RhY2soY29uc3QgY2hhciAqc3RhY2tfbmFtZSk7CiMgMTExICIvR00vaGRk
OS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiB2b2lk
IFBSX1N0YWNrUHVzaChQUlN0YWNrICpzdGFjaywgUFJTdGFja0VsZW0gKnN0YWNrX2VsZW0pOwoj
IDEyNCAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5o
IgpleHRlcm4gUFJTdGFja0VsZW0gKiBQUl9TdGFja1BvcChQUlN0YWNrICpzdGFjayk7CiMgMTM4
ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4
dGVybiBQUlN0YXR1cyBQUl9EZXN0cm95U3RhY2soUFJTdGFjayAqc3RhY2spOwoKfQojIDQwICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIiAyCgoKIyAxICIvR00v
aGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJjbW9uLmgiIDEKIyAzMiAi
L0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY21vbi5oIgojIDEg
Ii9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm1vbi5oIiAxCiMg
MjIgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm1vbi5oIgoj
IDEgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgi
IDEKIyAyMyAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybW9u
LmgiIDIKIyAxICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJp
bnJ2YWwuaCIgMQojIDM0ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcHJpbnJ2YWwuaCIKIyAxICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcHJ0eXBlcy5oIiAxCiMgMzUgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcmlucnZhbC5oIiAyCgpleHRlcm4gIkMiIHsKCgoKCgp0eXBlZGVmIFBSVWlu
dDMyIFBSSW50ZXJ2YWxUaW1lOwojIDg5ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9p
bmNsdWRlL25zcHIvcHJpbnJ2YWwuaCIKZXh0ZXJuIFBSSW50ZXJ2YWxUaW1lIFBSX0ludGVydmFs
Tm93KHZvaWQpOwojIDEwNyAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3ByaW5ydmFsLmgiCmV4dGVybiBQUlVpbnQzMiBQUl9UaWNrc1BlclNlY29uZCh2b2lkKTsK
IyAxMjYgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZh
bC5oIgpleHRlcm4gUFJJbnRlcnZhbFRpbWUgUFJfU2Vjb25kc1RvSW50ZXJ2YWwoUFJVaW50MzIg
c2Vjb25kcyk7CmV4dGVybiBQUkludGVydmFsVGltZSBQUl9NaWxsaXNlY29uZHNUb0ludGVydmFs
KFBSVWludDMyIG1pbGxpKTsKZXh0ZXJuIFBSSW50ZXJ2YWxUaW1lIFBSX01pY3Jvc2Vjb25kc1Rv
SW50ZXJ2YWwoUFJVaW50MzIgbWljcm8pOwojIDE0NyAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ydmFsLmgiCmV4dGVybiBQUlVpbnQzMiBQUl9JbnRlcnZh
bFRvU2Vjb25kcyhQUkludGVydmFsVGltZSB0aWNrcyk7CmV4dGVybiBQUlVpbnQzMiBQUl9JbnRl
cnZhbFRvTWlsbGlzZWNvbmRzKFBSSW50ZXJ2YWxUaW1lIHRpY2tzKTsKZXh0ZXJuIFBSVWludDMy
IFBSX0ludGVydmFsVG9NaWNyb3NlY29uZHMoUFJJbnRlcnZhbFRpbWUgdGlja3MpOwoKfQojIDI0
ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtb24uaCIgMgoK
ZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIHN0cnVjdCBQUk1vbml0b3IgUFJNb25pdG9yOwojIDM2ICIv
R00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtb24uaCIKZXh0ZXJu
IFBSTW9uaXRvciogUFJfTmV3TW9uaXRvcih2b2lkKTsKCgoKCgoKCmV4dGVybiB2b2lkIFBSX0Rl
c3Ryb3lNb25pdG9yKFBSTW9uaXRvciAqbW9uKTsKCgoKCgoKZXh0ZXJuIHZvaWQgUFJfRW50ZXJN
b25pdG9yKFBSTW9uaXRvciAqbW9uKTsKCgoKCgoKZXh0ZXJuIFBSU3RhdHVzIFBSX0V4aXRNb25p
dG9yKFBSTW9uaXRvciAqbW9uKTsKIyA3NiAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BybW9uLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9XYWl0KFBSTW9uaXRvciAq
bW9uLCBQUkludGVydmFsVGltZSB0aWNrcyk7CgoKCgoKCmV4dGVybiBQUlN0YXR1cyBQUl9Ob3Rp
ZnkoUFJNb25pdG9yICptb24pOwoKCgoKCgpleHRlcm4gUFJTdGF0dXMgUFJfTm90aWZ5QWxsKFBS
TW9uaXRvciAqbW9uKTsKCn0KIyAzMyAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3ByY21vbi5oIiAyCiMgMSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3ByaW5ydmFsLmgiIDEKIyAzNCAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3ByY21vbi5oIiAyCgpleHRlcm4gIkMiIHsKIyA0NSAiL0dNL2hk
ZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY21vbi5oIgpleHRlcm4gUFJN
b25pdG9yKiBQUl9DRW50ZXJNb25pdG9yKHZvaWQgKmFkZHJlc3MpOwoKCgoKCmV4dGVybiBQUlN0
YXR1cyBQUl9DRXhpdE1vbml0b3Iodm9pZCAqYWRkcmVzcyk7CgoKCgoKZXh0ZXJuIFBSU3RhdHVz
IFBSX0NXYWl0KHZvaWQgKmFkZHJlc3MsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwoKCgoKCmV4
dGVybiBQUlN0YXR1cyBQUl9DTm90aWZ5KHZvaWQgKmFkZHJlc3MpOwoKCgoKCmV4dGVybiBQUlN0
YXR1cyBQUl9DTm90aWZ5QWxsKHZvaWQgKmFkZHJlc3MpOwoKCgoKCmV4dGVybiB2b2lkIFBSX0NT
ZXRPbk1vbml0b3JSZWN5Y2xlKHZvaWQgKCpjYWxsYmFjaykodm9pZCAqYWRkcmVzcykpOwoKfQoj
IDQzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIiAyCiMgNzEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgiCnR5cGVkZWYgUFJV
aW50MzIgbnNyZWZjbnQ7CiMgOTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0
c1V0aWxzLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zVHJhY2VSZWZjbnQuaCIg
MQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNUcmFjZVJlZmNudC5oIgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NvbS5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1RyYWNlUmVmY250LmgiIDIKCiMgMSAiL25ld2xpYi9pbmNsdWRlL3N0ZGlvLmgi
IDEgMwojIDI3ICIvbmV3bGliL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi9uZXdsaWIvaW5jbHVk
ZS9mZWF0dXJlcy5oIiAxIDMKIyAyOCAiL25ld2xpYi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKZXh0
ZXJuICJDIiB7CgoKCiMgMSAiL29wdC9nbnUtbmV3L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL25ld2xpYi9pbmNsdWRlL3N0ZGlv
LmgiIDIgMwoKIyAxICIvbmV3bGliL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAzNiAiL25l
d2xpYi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDQ0ICIvbmV3bGliL2luY2x1ZGUvc3RkaW8uaCIg
Mwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwojIDU0ICIvbmV3bGliL2luY2x1ZGUvc3Rk
aW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNjQgIi9uZXdsaWIvaW5j
bHVkZS9zdGRpby5oIiAzCiMgMSAiL25ld2xpYi9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMwICIv
bmV3bGliL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi9uZXdsaWIvaW5jbHVkZS9fR19jb25maWcu
aCIgMSAzCiMgOSAiL25ld2xpYi9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL25ld2xpYi9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMTAgIi9uZXdsaWIvaW5jbHVkZS9fR19jb25maWcu
aCIgMiAzCgoKCgojIDEgIi9vcHQvZ251LW5ldy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEyICIvb3B0L2dudS1uZXcvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgd2ludF90OwojIDE1ICIvbmV3bGliL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoj
IDI0ICIvbmV3bGliL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvbmV3bGliL2luY2x1ZGUv
d2NoYXIuaCIgMSAzCiMgNDggIi9uZXdsaWIvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL29wdC9n
bnUtbmV3L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKIyA0OSAiL25ld2xpYi9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvbmV3bGliL2lu
Y2x1ZGUvYml0cy93Y2hhci5oIiAxIDMKIyA1MSAiL25ld2xpYi9pbmNsdWRlL3djaGFyLmgiIDIg
MwojIDY3ICIvbmV3bGliL2luY2x1ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50
IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0
XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUgIi9uZXdsaWIvaW5jbHVkZS9fR19j
b25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3Rh
dGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBf
X3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90OwojIDQ0ICIvbmV3bGli
L2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvbmV3bGliL2luY2x1ZGUvZ2NvbnYuaCIgMSAz
CiMgMjYgIi9uZXdsaWIvaW5jbHVkZS9nY29udi5oIiAzCiMgMSAiL25ld2xpYi9pbmNsdWRlL2Zl
YXR1cmVzLmgiIDEgMwojIDI3ICIvbmV3bGliL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgojIDEgIi9u
ZXdsaWIvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL25ld2xpYi9pbmNsdWRlL3djaGFyLmgi
IDMKIyAxICIvb3B0L2dudS1uZXcvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvbmV3bGliL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoj
IDEgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvbmV3bGliL2luY2x1
ZGUvd2NoYXIuaCIgMiAzCiMgMjkgIi9uZXdsaWIvaW5jbHVkZS9nY29udi5oIiAyIDMKCiMgMSAi
L29wdC9nbnUtbmV3L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKIyAzMSAiL25ld2xpYi9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0K
ewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBf
X0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQ
VVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwK
CiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9
OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVf
RVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252
X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZf
dHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252
X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICos
IGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19n
Y29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19n
Y29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0
IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQg
KCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNo
YXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1
bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2Nv
bnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRl
ZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsK
dHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBf
X2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBf
X2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90
cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9f
Z2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBz
dHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNo
YXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAg
Y2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0
IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5f
bmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRf
dG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpf
X2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAq
X19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7
CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsK
CiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3Ry
dWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19n
Y29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19z
dGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107
Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL25ld2xpYi9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlw
ZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAg
IHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBf
X2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQx
Nl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19p
bnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2ln
bmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX1NJX18pKSk7CiMgMzEgIi9uZXdsaWIvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1MSAiL25l
d2xpYi9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvb3B0L2dudS1uZXcvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvb3B0L2dudS1u
ZXcvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDMK
dHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1MiAiL25ld2xpYi9p
bmNsdWRlL2xpYmlvLmgiIDIgMwojIDE1OCAiL25ld2xpYi9pbmNsdWRlL2xpYmlvLmgiIDMKc3Ry
dWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNjggIi9uZXdsaWIvaW5jbHVkZS9s
aWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2Vy
IHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsK
CgoKICBpbnQgX3BvczsKIyAxOTEgIi9uZXdsaWIvaW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51
bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWws
CiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKIyAyNTkgIi9uZXdsaWIv
aW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAg
Y2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVh
ZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAg
Y2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1
Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwog
IGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBz
dHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwog
IF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAg
c2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lP
X2xvY2tfdCAqX2xvY2s7CiMgMzAzICIvbmV3bGliL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2Zm
NjRfdCBfb2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50
IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAo
dm9pZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBf
SU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMg
X0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRl
cnJfOwojIDM0MiAiL25ld2xpYi9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3Qg
X19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRl
cyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tp
ZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29v
a2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3Nl
X2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9mbiBjb29raWVfcmVh
ZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dyaXRlX2Z1bmN0aW9u
X3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9uX3Q7CnR5cGVkZWYg
X19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBlZGVmIHN0cnVjdAp7
CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRlOwogIF9faW9fc2Vl
a19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29va2llX2lvX2Z1bmN0
aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29va2llX2lvX2Z1bmN0
aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9pZCBfSU9fY29va2ll
X2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBfX3JlYWRfd3JpdGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19jb29raWUsIF9JT19jb29raWVf
aW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3Vu
ZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJ
TEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSB0
aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgp
OwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdp
bnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0aHJvdyAoKTsKIyA0MjQgIi9u
ZXdsaWIvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMgKF9JT19GSUxFICpf
X2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9f
ZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19mcCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKZXh0
ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB2
b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lP
X2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMgNDU0ICIvbmV3bGliL2luY2x1
ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJp
Y3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2du
dWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZw
cmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19z
c2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4
dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgdGhyb3cg
KCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3Qs
IGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJ
TEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFj
a3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwojIDUxMCAiL25ld2xpYi9pbmNsdWRlL2xp
YmlvLmgiIDMKfQojIDY1ICIvbmV3bGliL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVm
IF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CiMgNzkgIi9uZXdsaWIvaW5jbHVkZS9zdGRpby5oIiAz
CnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0
X3Q7CiMgMTI4ICIvbmV3bGliL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi9uZXdsaWIvaW5jbHVk
ZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxMjkgIi9uZXdsaWIvaW5jbHVkZS9zdGRpby5oIiAy
IDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklM
RSAqc3RkZXJyOwoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVu
YW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBf
X2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2
b2lkKSB0aHJvdyAoKTsKIyAxNTcgIi9uZXdsaWIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBG
SUxFICp0bXBmaWxlNjQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICp0bXBuYW0gKGNo
YXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykg
dGhyb3cgKCk7CiMgMTc3ICIvbmV3bGliL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAq
dGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBmY2xv
c2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
aWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19t
b2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0pIHRocm93ICgpOwojIDIyMSAiL25ld2xpYi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0
ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRo
cm93ICgpOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29u
c3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuY29va2ll
ICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgdGhyb3cgKCk7CgoK
ZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBj
aGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAo
Y2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg
c2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgIGludCBfX21v
ZGVzLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlciAoRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzZXRs
aW5lYnVmIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwcmludGYg
KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBwcmlu
dGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9f
YXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJn
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3Ms
IHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9y
bWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAq
X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDAp
KSk7CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAgICAgICAgICAgX19nbnVj
X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVz
dHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3Ry
aWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w
cmludGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf
bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w
cmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgpleHRlcm4gaW50IGZzY2FuZiAo
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NhbmYg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3Qg
X19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZf
XywgMiwgMCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2Fu
ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7
CgoKCgpleHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0Y2hhciAo
dm9pZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBp
bnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg
KmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2VkIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpn
ZXRzIChjaGFyICpfX3MpIHRocm93ICgpOwojIDQyNSAiL25ld2xpYi9pbmNsdWRlL3N0ZGlvLmgi
IDMKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVw
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19u
LCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAo
Y2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl
cm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnB1dHNfdW5s
b2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmdldGMg
KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVh
ZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7Cgpl
eHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXpl
X3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0
cmljdCBfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lk
ICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK
ZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBf
X3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRo
cm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA0ODggIi9u
ZXdsaWIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvIChGSUxFICpfX3N0cmVh
bSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZl90
IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZnZXRwb3Mg
KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykKICAg
ICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3Qg
ZnBvc190ICpfX3BvcykgdGhyb3cgKCk7CiMgNTIyICIvbmV3bGliL2luY2x1ZGUvc3RkaW8uaCIg
MwpleHRlcm4gaW50IGZzZWVrbzY0IChGSUxFICpfX3N0cmVhbSwgX19vZmY2NF90IF9fb2ZmLCBp
bnQgX193aGVuY2UpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90IGZ0ZWxsbzY0IChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmdldHBvczY0IChGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKZXh0
ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3M2NF90ICpfX3Bv
cykgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNs
ZWFyZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVv
Zl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlcnJvcl91
bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcGVycm9y
IChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c19uZXJyOwpl
eHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CgoKZXh0ZXJuIGludCBf
c3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3QgX3N5c19lcnJsaXN0W107CgoK
CgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQsIF9fY29uc3QgY2hhciAq
X19tb2RlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCnN0cnVj
dCBvYnN0YWNrOwoKCmV4dGVybiBpbnQgb2JzdGFja19wcmludGYgKHN0cnVjdCBvYnN0YWNrICpf
X3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwpleHRlcm4gaW50IG9ic3Rh
Y2tfdnByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmdzKSB0aHJvdyAo
KTsKCgoKCgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK
CmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNjI5
ICIvbmV3bGliL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL3N0
ZGlvLmgiIDEgMwojIDM5ICIvbmV3bGliL2luY2x1ZGUvYml0cy9zdGRpby5oIiAzCmlubGluZSBp
bnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlz
dCBfX2FyZykgdGhyb3cgKCkKewogIHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0LCBfX2ZtdCwgX19h
cmcpOwp9CgoKaW5saW5lIGludApnZXRjaGFyICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9J
T19nZXRjIChzdGRpbik7Cn0KCgoKCmlubGluZSBpbnQKZ2V0Y191bmxvY2tlZCAoRklMRSAqX19m
cCkgdGhyb3cgKCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVhZF9wdHIgPj0gKF9fZnApLT5f
SU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWduZWQgY2hhciAqKSAoX19mcCkt
Pl9JT19yZWFkX3B0cisrKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkg
dGhyb3cgKCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRfcHRyID49IChzdGRpbiktPl9J
T19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWduZWQgY2hhciAqKSAoc3RkaW4p
LT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmlubGluZSBpbnQKcHV0Y2hhciAoaW50IF9fYykgdGhy
b3cgKCkKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9CgoKCgppbmxpbmUgaW50
CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJl
dHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRl
X2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1
bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0K
CgoKCgppbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJl
YW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hh
cikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisr
ID0gKF9fYykpKTsKfQoKCmlubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhy
b3cgKCkKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRyID49IChzdGRvdXQpLT5f
SU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIpIChfX2Mp
KSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkp
Owp9CgoKCgoKaW5saW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoqX19saW5lcHRyLCBzaXpl
X3QgKl9fbiwgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gX19nZXRkZWxpbSAo
X19saW5lcHRyLCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoKCmlubGluZSBpbnQKZmVvZl91
bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0p
LT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmlubGluZSBpbnQKZmVycm9yX3VubG9ja2VkIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAm
IDB4MjApICE9IDApOwp9CiMgNjMwICIvbmV3bGliL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKfQoj
IDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNUcmFjZVJlZmNudC5oIiAyCgpjbGFzcyBu
c0lTdXBwb3J0czsKIyAxMzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1RyYWNlUmVmY250
LmgiCnN0cnVjdCBuc1RyYWNlUmVmY250U3RhdHMgewogIG5zcmVmY250IG1BZGRSZWZzOwogIG5z
cmVmY250IG1SZWxlYXNlczsKICBuc3JlZmNudCBtQ3JlYXRlczsKICBuc3JlZmNudCBtRGVzdHJv
eXM7CiAgZG91YmxlIG1SZWZzT3V0c3RhbmRpbmdUb3RhbDsKICBkb3VibGUgbVJlZnNPdXRzdGFu
ZGluZ1NxdWFyZWQ7CiAgZG91YmxlIG1PYmpzT3V0c3RhbmRpbmdUb3RhbDsKICBkb3VibGUgbU9i
anNPdXRzdGFuZGluZ1NxdWFyZWQ7Cn07CiMgMTUyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNUcmFjZVJlZmNudC5oIgp0eXBlZGVmIFBSQm9vbCAoICpuc1RyYWNlUmVmY250U3RhdEZ1bmMp
CiAgKGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwKICAgUFJVaW50MzIgYUluc3RhbmNlU2l6ZSwKICAg
bnNUcmFjZVJlZmNudFN0YXRzKiBhQ3VycmVudFN0YXRzLAogICBuc1RyYWNlUmVmY250U3RhdHMq
IGFQcmV2U3RhdHMsCiAgIHZvaWQgKmFDbG9zdXJlKTsKCgoKCgpjbGFzcyBuc1RyYWNlUmVmY250
IHsKcHVibGljOgogIHN0YXRpYyB2b2lkIFN0YXJ0dXAoKTsKCiAgc3RhdGljIHZvaWQgU2h1dGRv
d24oKTsKCiAgc3RhdGljIHZvaWQgTG9nQWRkUmVmKHZvaWQqIGFQdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc3JlZmNudCBhTmV3UmVmQ250LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogYVR5cGVOYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJVaW50MzIgYUluc3RhbmNlU2l6ZSk7CgogIHN0YXRpYyB2b2lkIExvZ1JlbGVh
c2Uodm9pZCogYVB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNudCBh
TmV3UmVmQ250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFU
eXBlTmFtZSk7CgogIHN0YXRpYyB2b2lkIExvZ05ld1hQQ09NKHZvaWQqIGFQdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUluc3RhbmNlU2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBhTGluZSk7CgogIHN0YXRpYyB2b2lkIExvZ0RlbGV0ZVhQ
Q09NKHZvaWQqIGFQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIGFGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYUxp
bmUpOwoKICBzdGF0aWMgbnNyZWZjbnQgTG9nQWRkUmVmQ2FsbCh2b2lkKiBhUHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNudCBhTmV3UmVmY250LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFMaW5lKTsKCiAgc3RhdGlj
IG5zcmVmY250IExvZ1JlbGVhc2VDYWxsKHZvaWQqIGFQdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc3JlZmNudCBhTmV3UmVmY250LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYUxpbmUpOwoKICBzdGF0aWMgdm9pZCBMb2dD
dG9yKHZvaWQqIGFQdHIsIGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUlVpbnQzMiBhSW5zdGFuY2VTaXplKTsKCiAgc3RhdGljIHZvaWQgTG9nRHRv
cih2b2lkKiBhUHRyLCBjb25zdCBjaGFyKiBhVHlwZU5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJVaW50MzIgYUluc3RhbmNlU2l6ZSk7CgogIHN0YXRpYyB2b2lkIExvZ0FkZENP
TVB0cih2b2lkICphQ09NUHRyLCBuc0lTdXBwb3J0cyAqYU9iamVjdCk7CgogIHN0YXRpYyB2b2lk
IExvZ1JlbGVhc2VDT01QdHIodm9pZCAqYUNPTVB0ciwgbnNJU3VwcG9ydHMgKmFPYmplY3QpOwoK
ICBlbnVtIFN0YXRpc3RpY3NUeXBlIHsKICAgIEFMTF9TVEFUUywKICAgIE5FV19TVEFUUwogIH07
CgogIHN0YXRpYyBuc3Jlc3VsdCBEdW1wU3RhdGlzdGljcyhTdGF0aXN0aWNzVHlwZSB0eXBlID0g
QUxMX1NUQVRTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSog
b3V0ID0gMCk7CgogIHN0YXRpYyB2b2lkIFJlc2V0U3RhdGlzdGljcyh2b2lkKTsKCiAgc3RhdGlj
IHZvaWQgR2F0aGVyU3RhdGlzdGljcyhuc1RyYWNlUmVmY250U3RhdEZ1bmMgYUZ1bmMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYUNsb3N1cmUpOwoKICBzdGF0
aWMgdm9pZCBMb2FkTGlicmFyeVN5bWJvbHMoY29uc3QgY2hhciogYUxpYnJhcnlOYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYUxpYnJheUhhbmRsZSk7
CgogIHN0YXRpYyB2b2lkIERlbWFuZ2xlU3ltYm9sKGNvbnN0IGNoYXIgKiBhU3ltYm9sLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogYUJ1ZmZlciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFCdWZMZW4pOwoKICBzdGF0aWMgdm9pZCBX
YWxrVGhlU3RhY2soRklMRSogYVN0cmVhbSk7CgogIHN0YXRpYyB2b2lkIFNldFByZWZTZXJ2aWNl
QXZhaWxhYmlsaXR5KFBSQm9vbCBhdmFpbCk7CgoKCgoKCiAgc3RhdGljIHZvaWQgU2V0QWN0aXZp
dHlJc0xlZ2FsKFBSQm9vbCBhTGVnYWwpOwp9OwoKCgoKZXh0ZXJuICJDIiB2b2lkCk5TX01lYW5B
bmRTdGREZXYoZG91YmxlIG4sIGRvdWJsZSBzdW1PZlZhbHVlcywgZG91YmxlIHN1bU9mU3F1YXJl
ZFZhbHVlcywKICAgICAgICAgICAgICAgICBkb3VibGUgKm1lYW5SZXN1bHQsIGRvdWJsZSAqc3Rk
RGV2UmVzdWx0KTsKIyA5MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRp
bHMuaCIgMgoKCgoKCgoKY2xhc3MgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiMgMTE1ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
UXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkKiogYUluc3RhbmNlUHRyKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZWZjbnQg
QWRkUmVmKHZvaWQpID0gMDsKIyAxMzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBw
b3J0c1V0aWxzLmgiCiAgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpID0gMDsKCgp9Owoj
IDE2MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIKZXh0ZXJu
ICJDIiB2b2lkKiBOU19DdXJyZW50VGhyZWFkKHZvaWQpOwpleHRlcm4gIkMiIHZvaWQgTlNfQ2hl
Y2tUaHJlYWRTYWZlKHZvaWQqIG93bmluZ1RocmVhZCwgY29uc3QgY2hhciogbXNnKTsKIyAzMTEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgiCmlubGluZQpuc3Jl
ZmNudApOU19EZWJ1Z0dldFJlZkNvdW50KCBuc0lTdXBwb3J0cyogb2JqICkKCgogIHsKICAgIG5z
cmVmY250IHJlZl9jb3VudCA9IDA7CgogICAgaWYgKCBvYmogKQogICAgICB7CgoKICAgICAgICBv
YmotPkFkZFJlZigpOwogICAgICAgIHJlZl9jb3VudCA9IG9iai0+UmVsZWFzZSgpOwoKCgoKICAg
ICAgICBpZiAoIShyZWZfY291bnQpKSBuc0RlYnVnOjpBc3NlcnRpb24oIk9vcHMhIENhbGxpbmcg
fE5TX0RlYnVnR2V0UmVmQ291bnQoKXwgcHJvYmFibHkganVzdCBkZXN0cm95ZWQgdGhpcyBvYmpl
Y3QuIiwgInJlZl9jb3VudCIsICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNV
dGlscy5oIiwgMzI5KTsKICAgICAgfQoKICAgICByZXR1cm4gcmVmX2NvdW50OwogIH0KIyAxMTE3
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIgpleHRlcm4gIkMr
KyIgewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCm5zcmVmY250Cm5zX2lmX2FkZHJlZigg
VCBleHByICkKCgoKICB7CiAgICByZXR1cm4gZXhwciA/IGV4cHItPkFkZFJlZigpIDogMDsKICB9
CgogfQojIDEyMzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgi
CmV4dGVybiAiQysrIiB7CgoKCmNsYXNzIG5zSVN1cHBvcnRzOwoKdGVtcGxhdGUgPGNsYXNzIFQ+
CnN0cnVjdCBuc0NPTVR5cGVJbmZvCiAgewogICAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo
KSB7IHJldHVybiBUOjpHZXRJSUQoKTsgfQogIH07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnNDT01U
eXBlSW5mbzxuc0lTdXBwb3J0cz4KICB7CiAgICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp
IHsKICAgICAgICBzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDAwMDAwMDAwLCAweDAwMDAs
IDB4MDAwMCwgezB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDZ9
IH07IHJldHVybiBpaWQ7CiAgICB9CiAgfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBEZXN0aW5hdGlv
blR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsUXVlcnlJbnRlcmZhY2UoIG5zSVN1cHBvcnRzKiBh
U291cmNlLCBEZXN0aW5hdGlvblR5cGUqKiBhRGVzdGluYXRpb24gKQogIHsKICAgIGlmICghKGFT
b3VyY2UpKSBuc0RlYnVnOjpQcmVDb25kaXRpb24oIm51bGwgcGFyYW1ldGVyIiwgImFTb3VyY2Ui
LCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIsIDEyNjApOwog
ICAgaWYgKCEoYURlc3RpbmF0aW9uKSkgbnNEZWJ1Zzo6UHJlQ29uZGl0aW9uKCJudWxsIHBhcmFt
ZXRlciIsICJhRGVzdGluYXRpb24iLCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBv
cnRzVXRpbHMuaCIsIDEyNjEpOwoKICAgIHJldHVybiBhU291cmNlLT5RdWVyeUludGVyZmFjZShu
c0NPTVR5cGVJbmZvPERlc3RpbmF0aW9uVHlwZT46OkdldElJRCgpLCAodm9pZCoqKWFEZXN0aW5h
dGlvbik7CiAgfQoKfQoKCgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDbGFz
c0luZm8uaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2xhc3NJbmZvLmgi
CmNsYXNzIG5zSUNsYXNzSW5mbyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0
YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg5
ODZjMTFkMCwgMHhmMzQwLCAweDExZDQsIHsgMHg5MCwgMHg3NSwgMHgwMCwgMHgxMCwgMHhhNCwg
MHhlNywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9CgoKCgogIGVudW0geyBMQU5HVUFHRV9V
TktOT1dOID0gMFUgfTsKCiAgZW51bSB7IExBTkdVQUdFX0NQUCA9IDFVIH07CgogIGVudW0geyBM
QU5HVUFHRV9KQVZBU0NSSVBUID0gMlUgfTsKCiAgZW51bSB7IExBTkdVQUdFX1BZVEhPTiA9IDNV
IH07CgogIGVudW0geyBMQU5HVUFHRV9QRVJMID0gNFUgfTsKCiAgZW51bSB7IExBTkdVQUdFX0pB
VkEgPSA1VSB9OwoKICBlbnVtIHsgTEFOR1VBR0VfWlg4MV9CQVNJQyA9IDZVIH07CgogIGVudW0g
eyBMQU5HVUFHRV9KQVZBU0NSSVBUMiA9IDdVIH07CiMgNTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lDbGFzc0luZm8uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEludGVyZmFjZXMoUFJV
aW50MzIgKmNvdW50LCBuc0lJRCAqICoqYXJyYXkpID0gMDsKIyA3MCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUNsYXNzSW5mby5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVscGVyRm9y
TGFuZ3VhZ2UoUFJVaW50MzIgbGFuZ3VhZ2UsIG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAwOwoK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udHJhY3RJRChjaGFyICogKmFDb250cmFjdElE
KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc0lEKG5zQ0lEICogKmFDbGFz
c0lEKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEltcGxlbWVudGF0aW9uTGFuZ3VhZ2Uo
UFJVaW50MzIgKmFJbXBsZW1lbnRhdGlvbkxhbmd1YWdlKSA9IDA7CgoKCgogIGVudW0geyBUSFJF
QURTQUZFID0gMVUgfTsKCiAgZW51bSB7IFNJTkdMRVRPTiA9IDJVIH07CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldEZsYWdzKFBSVWludDMyICphRmxhZ3MpID0gMDsKCn07CiMgMTI3NCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIgMgojIDExMiAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDIKIyA1MCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zQ09NUHRyLmgiIDIKCgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
Y29yZS5oIiAxCiMgNTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAyCiMg
MTA3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICB0eXBlZGVmIFBSQm9v
bCBOU0NBUF9CT09MOwojIDE1OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgi
CnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBuc0Rlcml2ZWRTYWZlIDogcHVibGljIFQKIyAxNzAg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogIHsKICAgIHByaXZhdGU6Cgog
ICAgICB1c2luZyBUOjpBZGRSZWY7CiAgICAgIHVzaW5nIFQ6OlJlbGVhc2U7CgoKCgoKCiAgICAg
IHZvaWQgb3BlcmF0b3IgZGVsZXRlKCB2b2lkKiwgc2l6ZV90ICk7CgoKCiAgICAgIG5zRGVyaXZl
ZFNhZmU8VD4mIG9wZXJhdG9yPSggY29uc3QgVCYgKTsKIyAxOTQgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0NPTVB0ci5oIgogIH07CiMgMjE1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNDT01QdHIuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBhbHJlYWR5X0FkZFJlZmVkCiMg
MjMyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICB7CiAgICBhbHJlYWR5
X0FkZFJlZmVkKCBUKiBhUmF3UHRyICkKICAgICAgICA6IG1SYXdQdHIoYVJhd1B0cikKICAgICAg
ewoKICAgICAgfQoKICAgIG9wZXJhdG9yIFQqKCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVy
biBtUmF3UHRyOwogICAgICB9CgogICAgVCogbVJhd1B0cjsKICB9OwoKdGVtcGxhdGUgPGNsYXNz
IFQ+CmlubGluZQpjb25zdCBhbHJlYWR5X0FkZFJlZmVkPFQ+CmdldHRlcl9BZGRSZWZzKCBUKiBh
UmF3UHRyICkKCgoKCiAgewogICAgcmV0dXJuIGFscmVhZHlfQWRkUmVmZWQ8VD4oYVJhd1B0cik7
CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25zdCBhbHJlYWR5X0FkZFJlZmVkPFQ+
CmdldHRlcl9BZGRSZWZzKCBjb25zdCBhbHJlYWR5X0FkZFJlZmVkPFQ+JiBhQWxyZWFkeUFkZFJl
ZmVkUHRyICkKICB7CiAgICByZXR1cm4gYUFscmVhZHlBZGRSZWZlZFB0cjsKICB9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVD4KaW5saW5lCmNvbnN0IGFscmVhZHlfQWRkUmVmZWQ8VD4KZG9udF9BZGRSZWYo
IFQqIGFSYXdQdHIgKQogIHsKICAgIHJldHVybiBhbHJlYWR5X0FkZFJlZmVkPFQ+KGFSYXdQdHIp
OwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxU
Pgpkb250X0FkZFJlZiggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxUPiBhQWxyZWFkeUFkZFJlZmVk
UHRyICkKICB7CiAgICByZXR1cm4gYUFscmVhZHlBZGRSZWZlZFB0cjsKICB9CiMgMjk0ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGlu
ZQpUKgpkb250X1F1ZXJ5SW50ZXJmYWNlKCBUKiBleHByICkKICB7CiAgICByZXR1cm4gZXhwcjsK
ICB9CgoKCmNsYXNzIG5zQ09NUHRyX2hlbHBlcgojIDMyMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zQ09NUHRyLmgiCiAgewogICAgcHVibGljOgogICAgICB2aXJ0dWFsIG5zcmVzdWx0IG9w
ZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiwgdm9pZCoqICkgY29uc3QgPSAwOwogIH07CgpjbGFzcyBu
c1F1ZXJ5SW50ZXJmYWNlIDogcHVibGljIG5zQ09NUHRyX2hlbHBlcgogIHsKICAgIHB1YmxpYzoK
ICAgICAgbnNRdWVyeUludGVyZmFjZSggbnNJU3VwcG9ydHMqIGFSYXdQdHIsIG5zcmVzdWx0KiBl
cnJvciApCiAgICAgICAgICA6IG1SYXdQdHIoYVJhd1B0ciksCiAgICAgICAgICAgIG1FcnJvclB0
cihlcnJvcikKICAgICAgICB7CgogICAgICAgIH0KCiAgICAgIHZpcnR1YWwgbnNyZXN1bHQgb3Bl
cmF0b3IoKSggY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiApIGNvbnN0OwoKICAgIHByaXZhdGU6
CiAgICAgIG5zSVN1cHBvcnRzKiBtUmF3UHRyOwogICAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwog
IH07CgppbmxpbmUKY29uc3QgbnNRdWVyeUludGVyZmFjZQpkb19RdWVyeUludGVyZmFjZSggbnNJ
U3VwcG9ydHMqIGFSYXdQdHIsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQogIHsKICAgIHJldHVybiBu
c1F1ZXJ5SW50ZXJmYWNlKGFSYXdQdHIsIGVycm9yKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4K
aW5saW5lCnZvaWQKZG9fUXVlcnlJbnRlcmZhY2UoIGFscmVhZHlfQWRkUmVmZWQ8VD4mICkKICB7
CgoKCiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQp2b2lkCmRvX1F1ZXJ5SW50ZXJmYWNl
KCBhbHJlYWR5X0FkZFJlZmVkPFQ+JiwgbnNyZXN1bHQqICkKICB7CgoKCiAgfQojIDM4NSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCmNsYXNzIG5zQ09NUHRyX2Jhc2UKIyAz
OTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogIHsKICAgIHB1YmxpYzoK
CiAgICAgIG5zQ09NUHRyX2Jhc2UoIG5zSVN1cHBvcnRzKiByYXdQdHIgPSAwICkKICAgICAgICAg
IDogbVJhd1B0cihyYXdQdHIpCiAgICAgICAgewoKICAgICAgICB9CgoKCgoKCiAgICAgICAgICAg
ICAgICB+bnNDT01QdHJfYmFzZSgpIHsgfQoKCiAgICAgICAgICAgICAgICB2b2lkIGFzc2lnbl93
aXRoX0FkZFJlZiggbnNJU3VwcG9ydHMqICk7CiAgICAgICAgICAgICAgICB2b2lkIGFzc2lnbl9m
cm9tX2hlbHBlciggY29uc3QgbnNDT01QdHJfaGVscGVyJiwgY29uc3QgbnNJSUQmICk7CiAgICAg
ICAgICAgICAgICB2b2lkKiogYmVnaW5fYXNzaWdubWVudCgpOwoKICAgIHByb3RlY3RlZDoKICAg
ICAgbnNJU3VwcG9ydHMqIG1SYXdQdHI7CgogICAgICB2b2lkCiAgICAgIGFzc2lnbl9hc3N1bWlu
Z19BZGRSZWYoIG5zSVN1cHBvcnRzKiBuZXdQdHIgKQogICAgICAgIHsKIyA0MzMgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAgICAgICAgbnNJU3VwcG9ydHMqIG9sZFB0
ciA9IG1SYXdQdHI7CiAgICAgICAgICBtUmF3UHRyID0gbmV3UHRyOwogICAgICAgICAgOzsKICAg
ICAgICAgIGlmICggb2xkUHRyICkKICAgICAgICAgICAgKG9sZFB0ciktPlJlbGVhc2UoKTsKICAg
ICAgICB9CiAgfTsKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIG5zQ09NUHRyCgoKCiAgewog
ICAgZW51bSB7IF9mb3JjZV9ldmVuX2NvbXBsaWFudF9jb21waWxlcnNfdG9fZmFpbF8gPSBzaXpl
b2YoVCkgfTsKIyA0NjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAg
cHJpdmF0ZToKICAgICAgdm9pZCBhc3NpZ25fd2l0aF9BZGRSZWYoIG5zSVN1cHBvcnRzKiApOwog
ICAgICB2b2lkIGFzc2lnbl9mcm9tX2hlbHBlciggY29uc3QgbnNDT01QdHJfaGVscGVyJiwgY29u
c3QgbnNJSUQmICk7CiAgICAgIHZvaWQqKiBiZWdpbl9hc3NpZ25tZW50KCk7CgogICAgICB2b2lk
CiAgICAgIGFzc2lnbl9hc3N1bWluZ19BZGRSZWYoIFQqIG5ld1B0ciApCiAgICAgICAgewogICAg
ICAgICAgVCogb2xkUHRyID0gbVJhd1B0cjsKICAgICAgICAgIG1SYXdQdHIgPSBuZXdQdHI7CiAg
ICAgICAgICA7OwogICAgICAgICAgaWYgKCBvbGRQdHIgKQogICAgICAgICAgICAob2xkUHRyKS0+
UmVsZWFzZSgpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgogICAgICBUKiBtUmF3UHRyOwoKCgoK
CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIFQgZWxlbWVudF90eXBlOwoKCiAgICAgfm5zQ09N
UHRyKCkKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAgICAgICAobVJh
d1B0ciktPlJlbGVhc2UoKTsKICAgICAgICB9CgoKCiAgICAgIHZvaWQKICAgICAgQXNzZXJ0X05v
UXVlcnlOZWVkZWQoKQogICAgICAgIHsKICAgICAgICAgIGlmICggbVJhd1B0ciApCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBuc0NPTVB0cjxUPiBxdWVyeV9yZXN1bHQoIGRvX1F1ZXJ5SW50
ZXJmYWNlKG1SYXdQdHIpICk7CiAgICAgICAgICAgICAgaWYgKCEocXVlcnlfcmVzdWx0LmdldCgp
ID09IG1SYXdQdHIpKSBuc0RlYnVnOjpBc3NlcnRpb24oIlF1ZXJ5SW50ZXJmYWNlIG5lZWRlZCIs
ICJxdWVyeV9yZXN1bHQuZ2V0KCkgPT0gbVJhd1B0ciIsICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNDT01QdHIuaCIsIDUwMyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiMgNTE1ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICAgICAgbnNDT01QdHIoKQogICAgICAg
ICAgICA6IG1SYXdQdHIoMCkKCiAgICAgICAgewogICAgICAgICAgOzsKICAgICAgICB9CgogICAg
ICBuc0NPTVB0ciggY29uc3QgbnNDT01QdHI8VD4mIGFTbWFydFB0ciApCiAgICAgICAgICAgIDog
bVJhd1B0cihhU21hcnRQdHIubVJhd1B0cikKCiAgICAgICAgewogICAgICAgICAgaWYgKCBtUmF3
UHRyICkKICAgICAgICAgICAgKG1SYXdQdHIpLT5BZGRSZWYoKTsKICAgICAgICAgIDs7CiAgICAg
ICAgfQoKICAgICAgbnNDT01QdHIoIFQqIGFSYXdQdHIgKQogICAgICAgICAgICA6IG1SYXdQdHIo
YVJhd1B0cikKCiAgICAgICAgewogICAgICAgICAgaWYgKCBtUmF3UHRyICkKICAgICAgICAgICAg
KG1SYXdQdHIpLT5BZGRSZWYoKTsKICAgICAgICAgIDs7CiAgICAgICAgICA7IEFzc2VydF9Ob1F1
ZXJ5TmVlZGVkKCk7OwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBhbHJlYWR5X0Fk
ZFJlZmVkPFQ+JiBhU21hcnRQdHIgKQogICAgICAgICAgICA6IG1SYXdQdHIoYVNtYXJ0UHRyLm1S
YXdQdHIpCgogICAgICAgIHsKICAgICAgICAgIDs7CiAgICAgICAgICA7IEFzc2VydF9Ob1F1ZXJ5
TmVlZGVkKCk7OwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBuc0NPTVB0cl9oZWxw
ZXImIGhlbHBlciApCiAgICAgICAgICAgIDogbVJhd1B0cigwKQoKCiAgICAgICAgewogICAgICAg
ICAgOzsKICAgICAgICAgIGFzc2lnbl9mcm9tX2hlbHBlcihoZWxwZXIsIG5zQ09NVHlwZUluZm88
VD46OkdldElJRCgpKTsKICAgICAgICAgIDsgQXNzZXJ0X05vUXVlcnlOZWVkZWQoKTs7CiAgICAg
ICAgfQoKCgoKCiAgICAgIG5zQ09NUHRyKCBjb25zdCBuc1F1ZXJ5SW50ZXJmYWNlJiBoZWxwZXIg
KQogICAgICAgICAgICA6IG1SYXdQdHIoMCkKICAgICAgICB7CiAgICAgICAgICA7OwogICAgICAg
ICAgYXNzaWduX2Zyb21faGVscGVyKGhlbHBlciwgbnNDT01UeXBlSW5mbzxUPjo6R2V0SUlEKCkp
OwogICAgICAgIH0KCgoKCgogICAgICBuc0NPTVB0cjxUPiYKICAgICAgb3BlcmF0b3I9KCBjb25z
dCBuc0NPTVB0cjxUPiYgcmhzICkKCiAgICAgICAgewogICAgICAgICAgYXNzaWduX3dpdGhfQWRk
UmVmKHJocy5tUmF3UHRyKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAg
ICBuc0NPTVB0cjxUPiYKICAgICAgb3BlcmF0b3I9KCBUKiByaHMgKQoKICAgICAgICB7CiAgICAg
ICAgICBhc3NpZ25fd2l0aF9BZGRSZWYocmhzKTsKICAgICAgICAgIDsgQXNzZXJ0X05vUXVlcnlO
ZWVkZWQoKTs7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01Q
dHI8VD4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxUPiYgcmhzICkK
CiAgICAgICAgewogICAgICAgICAgYXNzaWduX2Fzc3VtaW5nX0FkZFJlZihyaHMubVJhd1B0cik7
CiAgICAgICAgICA7IEFzc2VydF9Ob1F1ZXJ5TmVlZGVkKCk7OwogICAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyPFQ+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0
IG5zQ09NUHRyX2hlbHBlciYgcmhzICkKCgogICAgICAgIHsKICAgICAgICAgIGFzc2lnbl9mcm9t
X2hlbHBlcihyaHMsIG5zQ09NVHlwZUluZm88VD46OkdldElJRCgpKTsKICAgICAgICAgIDsgQXNz
ZXJ0X05vUXVlcnlOZWVkZWQoKTs7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoK
CgoKCiAgICAgIG5zQ09NUHRyPFQ+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IG5zUXVlcnlJbnRl
cmZhY2UmIHJocyApCiAgICAgICAgewogICAgICAgICAgYXNzaWduX2Zyb21faGVscGVyKHJocywg
bnNDT01UeXBlSW5mbzxUPjo6R2V0SUlEKCkpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
ICAgIH0KCgoKCgogICAgICBuc0Rlcml2ZWRTYWZlPFQ+KgogICAgICBnZXQoKSBjb25zdAoKCgoK
CgogICAgICAgIHsKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBuc0Rlcml2ZWRT
YWZlPFQ+KiA+KG1SYXdQdHIpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zRGVyaXZlZFNh
ZmU8VD4qKCkgY29uc3QKCgoKCgoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIGdldCgpOwog
ICAgICAgIH0KCiAgICAgIG5zRGVyaXZlZFNhZmU8VD4qCiAgICAgIG9wZXJhdG9yLT4oKSBjb25z
dAogICAgICAgIHsKICAgICAgICAgIGlmICghKG1SYXdQdHIgIT0gMCkpIG5zRGVidWc6OlByZUNv
bmRpdGlvbigiWW91IGNhbid0IGRlcmVmZXJlbmNlIGEgTlVMTCBuc0NPTVB0ciB3aXRoIG9wZXJh
dG9yLT4oKS4iLCAibVJhd1B0ciAhPSAwIiwgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NP
TVB0ci5oIiwgNjUyKTsKICAgICAgICAgIHJldHVybiBnZXQoKTsKICAgICAgICB9CiMgNjY5ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICAgICAgbnNDT01QdHI8VD4qCiAg
ICAgIGdldF9hZGRyZXNzKCkKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAg
ICAgIH0KCiAgICAgIGNvbnN0IG5zQ09NUHRyPFQ+KgogICAgICBnZXRfYWRkcmVzcygpIGNvbnN0
CgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgoKCgoKCiAgICBw
cml2YXRlOgogICAgICBjb25zdCBuc0NPTVB0cjxUPioKICAgICAgb3BlcmF0b3ImKCkgY29uc3QK
CgoKCgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICBu
c0NPTVB0cjxUPioKICAgICAgb3BlcmF0b3ImKCkKCgoKICAgICAgICB7CiAgICAgICAgICByZXR1
cm4gdGhpczsKICAgICAgICB9CgogICAgcHVibGljOgogICAgICBuc0Rlcml2ZWRTYWZlPFQ+Jgog
ICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIGlmICghKG1SYXdQdHIg
IT0gMCkpIG5zRGVidWc6OlByZUNvbmRpdGlvbigiWW91IGNhbid0IGRlcmVmZXJlbmNlIGEgTlVM
TCBuc0NPTVB0ciB3aXRoIG9wZXJhdG9yKigpLiIsICJtUmF3UHRyICE9IDAiLCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiLCA3MTYpOwogICAgICAgICAgcmV0dXJuICpnZXQo
KTsKICAgICAgICB9CgoKCgoKCiAgICAgIFQqKgogICAgICBTdGFydEFzc2lnbm1lbnQoKQogICAg
ICAgIHsKCiAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgVCoqID4oYmVnaW5fYXNz
aWdubWVudCgpKTsKCgoKCiAgICAgICAgfQogIH07CiMgNzQ4ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNDT01QdHIuaCIKdGVtcGxhdGUgPD4KY2xhc3MgbnNDT01QdHI8bnNJU3VwcG9ydHM+
CiAgICA6IHByaXZhdGUgbnNDT01QdHJfYmFzZQogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl
ZiBuc0lTdXBwb3J0cyBlbGVtZW50X3R5cGU7CgoKICAgICB+bnNDT01QdHIoKQogICAgICAgICB7
CiAgICAgICAgICAgaWYgKCBtUmF3UHRyICkKICAgICAgICAgICAgIChtUmF3UHRyKS0+UmVsZWFz
ZSgpOwogICAgICAgICB9CgoKCgoKICAgICAgbnNDT01QdHIoKQogICAgICAgICAgICA6IG5zQ09N
UHRyX2Jhc2UoMCkKCiAgICAgICAgewogICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBuc0NP
TVB0ciggY29uc3QgbnNDT01QdHI8bnNJU3VwcG9ydHM+JiBhU21hcnRQdHIgKQogICAgICAgICAg
ICA6IG5zQ09NUHRyX2Jhc2UoYVNtYXJ0UHRyLm1SYXdQdHIpCgogICAgICAgIHsKICAgICAgICAg
IGlmICggbVJhd1B0ciApCiAgICAgICAgICAgIChtUmF3UHRyKS0+QWRkUmVmKCk7CiAgICAgICAg
ICA7OwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBuc0lTdXBwb3J0cyogYVJhd1B0ciApCiAg
ICAgICAgICAgIDogbnNDT01QdHJfYmFzZShhUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICBp
ZiAoIG1SYXdQdHIgKQogICAgICAgICAgICAobVJhd1B0ciktPkFkZFJlZigpOwogICAgICAgICAg
OzsKICAgICAgICB9CgogICAgICBuc0NPTVB0ciggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxuc0lT
dXBwb3J0cz4mIGFTbWFydFB0ciApCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZShhU21hcnRQ
dHIubVJhd1B0cikKCiAgICAgICAgewogICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBuc0NP
TVB0ciggY29uc3QgbnNDT01QdHJfaGVscGVyJiBoZWxwZXIgKQogICAgICAgICAgICA6IG5zQ09N
UHRyX2Jhc2UoMCkKCgogICAgICAgIHsKICAgICAgICAgIDs7CiAgICAgICAgICBhc3NpZ25fZnJv
bV9oZWxwZXIoaGVscGVyLCBuc0NPTVR5cGVJbmZvPG5zSVN1cHBvcnRzPjo6R2V0SUlEKCkpOwog
ICAgICAgIH0KCgoKCiAgICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiYKICAgICAgb3BlcmF0b3I9
KCBjb25zdCBuc0NPTVB0cjxuc0lTdXBwb3J0cz4mIHJocyApCgogICAgICAgIHsKICAgICAgICAg
IGFzc2lnbl93aXRoX0FkZFJlZihyaHMubVJhd1B0cik7CiAgICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgICAgfQoKICAgICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+JgogICAgICBvcGVyYXRvcj0o
IG5zSVN1cHBvcnRzKiByaHMgKQoKICAgICAgICB7CiAgICAgICAgICBhc3NpZ25fd2l0aF9BZGRS
ZWYocmhzKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBuc0NPTVB0
cjxuc0lTdXBwb3J0cz4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxu
c0lTdXBwb3J0cz4mIHJocyApCgogICAgICAgIHsKICAgICAgICAgIGFzc2lnbl9hc3N1bWluZ19B
ZGRSZWYocmhzLm1SYXdQdHIpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAg
ICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiYKICAgICAgb3BlcmF0b3I9KCBjb25zdCBuc0NPTVB0
cl9oZWxwZXImIHJocyApCgoKICAgICAgICB7CiAgICAgICAgICBhc3NpZ25fZnJvbV9oZWxwZXIo
cmhzLCBuc0NPTVR5cGVJbmZvPG5zSVN1cHBvcnRzPjo6R2V0SUlEKCkpOwogICAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgICAgIH0KCgoKCiAgICAgIG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9ydHM+
KgogICAgICBnZXQoKSBjb25zdAoKCgoKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PCBuc0Rlcml2ZWRTYWZlPG5zSVN1cHBvcnRzPiogPihtUmF3UHRyKTsKICAg
ICAgICB9CgogICAgICBvcGVyYXRvciBuc0Rlcml2ZWRTYWZlPG5zSVN1cHBvcnRzPiooKSBjb25z
dAoKCgoKCgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gZ2V0KCk7CiAgICAgICAgfQoKICAg
ICAgbnNEZXJpdmVkU2FmZTxuc0lTdXBwb3J0cz4qCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAog
ICAgICAgIHsKICAgICAgICAgIGlmICghKG1SYXdQdHIgIT0gMCkpIG5zRGVidWc6OlByZUNvbmRp
dGlvbigiWW91IGNhbid0IGRlcmVmZXJlbmNlIGEgTlVMTCBuc0NPTVB0ciB3aXRoIG9wZXJhdG9y
LT4oKS4iLCAibVJhd1B0ciAhPSAwIiwgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0
ci5oIiwgODczKTsKICAgICAgICAgIHJldHVybiBnZXQoKTsKICAgICAgICB9CiMgODkwICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICAgICAgbnNDT01QdHI8bnNJU3VwcG9y
dHM+KgogICAgICBnZXRfYWRkcmVzcygpCgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gdGhp
czsKICAgICAgICB9CgogICAgICBjb25zdCBuc0NPTVB0cjxuc0lTdXBwb3J0cz4qCiAgICAgIGdl
dF9hZGRyZXNzKCkgY29uc3QKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAg
ICAgIH0KCgoKCgoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IG5zQ09NUHRyPG5zSVN1cHBvcnRz
PioKICAgICAgb3BlcmF0b3ImKCkgY29uc3QKCgoKCgoKICAgICAgICB7CiAgICAgICAgICByZXR1
cm4gdGhpczsKICAgICAgICB9CgogICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4qCiAgICAgIG9w
ZXJhdG9yJigpCgoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoK
ICAgIHB1YmxpYzoKCiAgICAgIG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9ydHM+JgogICAgICBvcGVy
YXRvciooKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIGlmICghKG1SYXdQdHIgIT0gMCkpIG5z
RGVidWc6OlByZUNvbmRpdGlvbigiWW91IGNhbid0IGRlcmVmZXJlbmNlIGEgTlVMTCBuc0NPTVB0
ciB3aXRoIG9wZXJhdG9yKigpLiIsICJtUmF3UHRyICE9IDAiLCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zQ09NUHRyLmgiLCA5MzgpOwogICAgICAgICAgcmV0dXJuICpnZXQoKTsKICAgICAg
ICB9CgoKCgoKCiAgICAgIG5zSVN1cHBvcnRzKioKICAgICAgU3RhcnRBc3NpZ25tZW50KCkKICAg
ICAgICB7CgogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IG5zSVN1cHBvcnRzKiog
PihiZWdpbl9hc3NpZ25tZW50KCkpOwoKCgoKICAgICAgICB9CiAgfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgVD4Kdm9pZApuc0NPTVB0cjxUPjo6YXNzaWduX3dpdGhfQWRkUmVmKCBuc0lTdXBwb3J0cyog
cmF3UHRyICkKICB7CiAgICBpZiAoIHJhd1B0ciApCiAgICAgIChyYXdQdHIpLT5BZGRSZWYoKTsK
ICAgIGFzc2lnbl9hc3N1bWluZ19BZGRSZWYocmVpbnRlcnByZXRfY2FzdDwgVCogPihyYXdQdHIp
KTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kdm9pZApuc0NPTVB0cjxUPjo6YXNzaWduX2Zyb21f
aGVscGVyKCBjb25zdCBuc0NPTVB0cl9oZWxwZXImIGhlbHBlciwgY29uc3QgbnNJSUQmIGFJSUQg
KQogIHsKICAgIFQqIG5ld1Jhd1B0cjsKICAgIGlmICggISghKChoZWxwZXIoYUlJRCwgcmVpbnRl
cnByZXRfY2FzdDwgdm9pZCoqID4oJm5ld1Jhd1B0cikpKSAmIDB4ODAwMDAwMDApKSApCiAgICAg
IG5ld1Jhd1B0ciA9IDA7CiAgICBhc3NpZ25fYXNzdW1pbmdfQWRkUmVmKG5ld1Jhd1B0cik7CiAg
fQoKdGVtcGxhdGUgPGNsYXNzIFQ+CnZvaWQqKgpuc0NPTVB0cjxUPjo6YmVnaW5fYXNzaWdubWVu
dCgpCiAgewogICAgYXNzaWduX2Fzc3VtaW5nX0FkZFJlZigwKTsKICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PCB2b2lkKiogPigmbVJhd1B0cik7CiAgfQojIDEwMDIgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0NPTVB0ci5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCm5zQ09NUHRy
PFQ+KgphZGRyZXNzX29mKCBuc0NPTVB0cjxUPiYgYVB0ciApCiAgewogICAgcmV0dXJuIGFQdHIu
Z2V0X2FkZHJlc3MoKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCmNvbnN0IG5zQ09N
UHRyPFQ+KgphZGRyZXNzX29mKCBjb25zdCBuc0NPTVB0cjxUPiYgYVB0ciApCiAgewogICAgcmV0
dXJuIGFQdHIuZ2V0X2FkZHJlc3MoKTsKICB9CgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBu
c0dldHRlckFkZFJlZnMKIyAxMDM5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIu
aCIKICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIG5zR2V0dGVyQWRkUmVmcygg
bnNDT01QdHI8VD4mIGFTbWFydFB0ciApCiAgICAgICAgICA6IG1UYXJnZXRTbWFydFB0cihhU21h
cnRQdHIpCiAgICAgICAgewoKICAgICAgICB9CgoKICAgICB+bnNHZXR0ZXJBZGRSZWZzKCkKICAg
ICAgICB7CgoKCgoKICAgICAgICAgIG1UYXJnZXRTbWFydFB0ci5Bc3NlcnRfTm9RdWVyeU5lZWRl
ZCgpOwoKICAgICAgICB9CgoKICAgICAgb3BlcmF0b3Igdm9pZCoqKCkKICAgICAgICB7CiAgICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgdm9pZCoqID4obVRhcmdldFNtYXJ0UHRyLlN0
YXJ0QXNzaWdubWVudCgpKTsKICAgICAgICB9CgogICAgICBvcGVyYXRvciBuc0lTdXBwb3J0cyoq
KCkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgbnNJU3VwcG9y
dHMqKiA+KG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKSk7CiAgICAgICAgfQoKICAg
ICAgb3BlcmF0b3IgVCoqKCkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbVRhcmdldFNtYXJ0
UHRyLlN0YXJ0QXNzaWdubWVudCgpOwogICAgICAgIH0KCiAgICAgIFQqJgogICAgICBvcGVyYXRv
ciooKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiAqKG1UYXJnZXRTbWFydFB0ci5TdGFydEFz
c2lnbm1lbnQoKSk7CiAgICAgICAgfQoKICAgIHByaXZhdGU6CiAgICAgIG5zQ09NUHRyPFQ+JiBt
VGFyZ2V0U21hcnRQdHI7CiAgfTsKCgp0ZW1wbGF0ZSA8PgpjbGFzcyBuc0dldHRlckFkZFJlZnM8
bnNJU3VwcG9ydHM+CiAgewogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBuc0dldHRl
ckFkZFJlZnMoIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiYgYVNtYXJ0UHRyICkKICAgICAgICAgIDog
bVRhcmdldFNtYXJ0UHRyKGFTbWFydFB0cikKICAgICAgICB7CgogICAgICAgIH0KIyAxMTA1ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICAgICAgb3BlcmF0b3Igdm9pZCoq
KCkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgdm9pZCoqID4o
bVRhcmdldFNtYXJ0UHRyLlN0YXJ0QXNzaWdubWVudCgpKTsKICAgICAgICB9CgogICAgICBvcGVy
YXRvciBuc0lTdXBwb3J0cyoqKCkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbVRhcmdldFNt
YXJ0UHRyLlN0YXJ0QXNzaWdubWVudCgpOwogICAgICAgIH0KCiAgICAgIG5zSVN1cHBvcnRzKiYK
ICAgICAgb3BlcmF0b3IqKCkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gKihtVGFyZ2V0U21h
cnRQdHIuU3RhcnRBc3NpZ25tZW50KCkpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgogICAgICBu
c0NPTVB0cjxuc0lTdXBwb3J0cz4mIG1UYXJnZXRTbWFydFB0cjsKICB9OwoKCnRlbXBsYXRlIDxj
bGFzcyBUPgppbmxpbmUKbnNHZXR0ZXJBZGRSZWZzPFQ+CmdldHRlcl9BZGRSZWZzKCBuc0NPTVB0
cjxUPiYgYVNtYXJ0UHRyICkKCgoKCiAgewogICAgcmV0dXJuIG5zR2V0dGVyQWRkUmVmczxUPihh
U21hcnRQdHIpOwogIH0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5T
Q0FQX0JPT0wKb3BlcmF0b3I9PSggY29uc3QgbnNDT01QdHI8VD4mIGxocywgY29uc3QgbnNDT01Q
dHI8VT4mIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KGxo
cy5nZXQoKSkgPT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgpKTsKICB9CgoK
dGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yIT0o
IGNvbnN0IG5zQ09NUHRyPFQ+JiBsaHMsIGNvbnN0IG5zQ09NUHRyPFU+JiByaHMgKQogIHsKICAg
IHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkpICE9IHN0YXRpY19j
YXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQoKCgoKdGVtcGxhdGUgPGNsYXNzIFQs
IGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIGNvbnN0IG5zQ09NUHRyPFQ+
JiBsaHMsIGNvbnN0IFUqIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2
b2lkKiA+KGxocy5nZXQoKSkgPT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzKTsKICB9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3I9
PSggY29uc3QgVSogbGhzLCBjb25zdCBuc0NPTVB0cjxUPiYgcmhzICkKICB7CiAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzKSA9PSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9p
ZCogPihyaHMuZ2V0KCkpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUK
TlNDQVBfQk9PTApvcGVyYXRvciE9KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBjb25zdCBVKiBy
aHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkp
ICE9IHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yIT0oIGNvbnN0IFUqIGxocywg
Y29uc3QgbnNDT01QdHI8VD4mIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25z
dCB2b2lkKiA+KGxocykgIT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgpKTsK
ICB9CiMgMTIwOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCnRlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRvcj09KCBjb25zdCBu
c0NPTVB0cjxUPiYgbGhzLCBVKiByaHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29u
c3Qgdm9pZCogPihsaHMuZ2V0KCkpID09IHN0YXRpY19jYXN0PCB2b2lkKiA+KHJocyk7CiAgfQoK
dGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0o
IFUqIGxocywgY29uc3QgbnNDT01QdHI8VD4mIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19j
YXN0PCB2b2lkKiA+KGxocykgPT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgp
KTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3Bl
cmF0b3IhPSggY29uc3QgbnNDT01QdHI8VD4mIGxocywgVSogcmhzICkKICB7CiAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSAhPSBzdGF0aWNfY2FzdDwgdm9p
ZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBf
Qk9PTApvcGVyYXRvciE9KCBVKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiByaHMgKQogIHsKICAg
IHJldHVybiBzdGF0aWNfY2FzdDwgdm9pZCogPihsaHMpICE9IHN0YXRpY19jYXN0PCBjb25zdCB2
b2lkKiA+KHJocy5nZXQoKSk7CiAgfQoKCgoKCgpjbGFzcyBOU0NBUF9aZXJvOwoKdGVtcGxhdGUg
PGNsYXNzIFQ+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIGNvbnN0IG5zQ09NUHRyPFQ+
JiBsaHMsIE5TQ0FQX1plcm8qIHJocyApCgogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29u
c3Qgdm9pZCogPihsaHMuZ2V0KCkpID09IHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IHZvaWQqID4o
cmhzKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3I9
PSggTlNDQVBfWmVybyogbGhzLCBjb25zdCBuc0NPTVB0cjxUPiYgcmhzICkKCiAgewogICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzKSA9PSBzdGF0aWNfY2FzdDwg
Y29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUK
TlNDQVBfQk9PTApvcGVyYXRvciE9KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBOU0NBUF9aZXJv
KiByaHMgKQoKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdl
dCgpKSAhPSByZWludGVycHJldF9jYXN0PCBjb25zdCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxh
dGUgPGNsYXNzIFQ+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yIT0oIE5TQ0FQX1plcm8qIGxo
cywgY29uc3QgbnNDT01QdHI8VD4mIHJocyApCgogIHsKICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PCBjb25zdCB2b2lkKiA+KGxocykgIT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhz
LmdldCgpKTsKICB9CiMgMTMxMiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgi
CmlubGluZQpOU0NBUF9CT09MClNhbWVDT01JZGVudGl0eSggbnNJU3VwcG9ydHMqIGxocywgbnNJ
U3VwcG9ydHMqIHJocyApCiAgewogICAgcmV0dXJuIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiggZG9f
UXVlcnlJbnRlcmZhY2UobGhzKSApID09IG5zQ09NUHRyPG5zSVN1cHBvcnRzPiggZG9fUXVlcnlJ
bnRlcmZhY2UocmhzKSApOwogIH0KCgoKdGVtcGxhdGUgPGNsYXNzIFNvdXJjZVR5cGUsIGNsYXNz
IERlc3RpbmF0aW9uVHlwZT4KaW5saW5lCm5zcmVzdWx0CkNhbGxRdWVyeUludGVyZmFjZSggbnND
T01QdHI8U291cmNlVHlwZT4mIGFTb3VyY2VQdHIsIERlc3RpbmF0aW9uVHlwZSoqIGFEZXN0UHRy
ICkKICB7CiAgICByZXR1cm4gQ2FsbFF1ZXJ5SW50ZXJmYWNlKGFTb3VyY2VQdHIuZ2V0KCksIGFE
ZXN0UHRyKTsKICB9CiMgMjMgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAibnNGb3Jt
Q29udHJvbEhlbHBlci5oIiAxCiMgMjYgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIKIyAxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybUNvbnRyb2xGcmFtZS5oIiAxCiMgMjYgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtQ29udHJvbEZyYW1lLmgiCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSUZvcm1Db250cm9sRnJhbWUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0ZvbnQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGb250Lmgi
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMjcgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0ZvbnQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0Nvb3JkLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAyNyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMgojIDQwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNDb29yZC5oIgp0eXBlZGVmIFBSSW50MzIgbnNjb29yZDsKIyAyOCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zRm9udC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
U3RyaW5nLmgiIDEKIyA0NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIiAxCiMgNDcgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKIyAxICIvR00vaGRkOS9tb3ppbGxhL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgNDggIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1N0cmluZzIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2Nv
cmUuaCIgMQojIDQ5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiIDIKIyAx
ICIvbmV3bGliL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgNTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1N0cmluZzIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmlu
Zy5oIiAxCiMgNTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIgMgojIDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lBdG9tLmgiIDEKIyAxNyAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUF0b20uaCIKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKCiMgMSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVdyaXRhYmxlU3RyaW5nLmgiIDEKIyAzMCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zQVdyaXRhYmxlU3RyaW5nLmgiCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQVJlYWRhYmxlU3RyaW5nLmgiIDEKIyAzMCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zQVJlYWRhYmxlU3RyaW5nLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zQVN0cmluZy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJp
bmcuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdGd2QuaCIgMQojIDM0
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdGd2QuaCIKY2xhc3MgbnNBU3RyaW5n
OwpjbGFzcyBuc0FDU3RyaW5nOwoKCgoKCgpjbGFzcyBuc0FQcm9taXNlU3RyaW5nOwpjbGFzcyBu
c0FQcm9taXNlQ1N0cmluZzsKCgoKCgoKY2xhc3MgbnNBRmxhdFN0cmluZzsKY2xhc3MgbnNBRmxh
dENTdHJpbmc7CgoKCgoKCmNsYXNzIG5zTG9jYWxTdHJpbmc7CmNsYXNzIG5zTG9jYWxDU3RyaW5n
OwojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiIDIKCgoKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQcml2YXRlU2hhcmFibGVTdHJpbmcuaCIgMQojIDI5
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQcml2YXRlU2hhcmFibGVTdHJpbmcuaCIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIgMQojIDMwICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIKIyAxICIvb3B0L2dudS1uZXcv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj
IDMxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIgMgoKCiMgMSAi
L0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQoj
IDM0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIgMgoKCiMgMSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVidWcuaCIgMQojIDM3ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIgMgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zY29yZS5oIiAxCiMgNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1ZmZl
ckhhbmRsZS5oIiAyCiMgNzUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1ZmZlckhhbmRs
ZS5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zQnVmZmVySGFuZGxlCiAgewogICAg
cHVibGljOgogICAgICBuc0J1ZmZlckhhbmRsZSggQ2hhclQqIGFEYXRhU3RhcnQsIENoYXJUKiBh
RGF0YUVuZCApIDogbURhdGFTdGFydChhRGF0YVN0YXJ0KSwgbURhdGFFbmQoYURhdGFFbmQpIHsg
fQoKICAgICAgdm9pZCBEYXRhU3RhcnQoIENoYXJUKiBhTmV3RGF0YVN0YXJ0ICkgeyBtRGF0YVN0
YXJ0ID0gYU5ld0RhdGFTdGFydDsgfQogICAgICBDaGFyVCogRGF0YVN0YXJ0KCkgeyByZXR1cm4g
bURhdGFTdGFydDsgfQogICAgICBjb25zdCBDaGFyVCogRGF0YVN0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbURhdGFTdGFydDsgfQoKICAgICAgdm9pZCBEYXRhRW5kKCBDaGFyVCogYU5ld0RhdGFFbmQg
KSB7IG1EYXRhRW5kID0gYU5ld0RhdGFFbmQ7IH0KICAgICAgQ2hhclQqIERhdGFFbmQoKSB7IHJl
dHVybiBtRGF0YUVuZDsgfQogICAgICBjb25zdCBDaGFyVCogRGF0YUVuZCgpIGNvbnN0IHsgcmV0
dXJuIG1EYXRhRW5kOyB9CgogICAgICBwdHJkaWZmX3QgRGF0YUxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1EYXRhRW5kIC0gbURhdGFTdGFydDsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgQ2hhclQq
IG1EYXRhU3RhcnQ7CiAgICAgIENoYXJUKiBtRGF0YUVuZDsKICB9OwoKdGVtcGxhdGUgPGNsYXNz
IENoYXJUPgpjbGFzcyBuc0NvbnN0QnVmZmVySGFuZGxlCiAgewogICAgcHVibGljOgogICAgICBu
c0NvbnN0QnVmZmVySGFuZGxlKCBjb25zdCBDaGFyVCogYURhdGFTdGFydCwgY29uc3QgQ2hhclQq
IGFEYXRhRW5kICkgOiBtRGF0YVN0YXJ0KGFEYXRhU3RhcnQpLCBtRGF0YUVuZChhRGF0YUVuZCkg
eyB9CgogICAgICBjb25zdCBDaGFyVCogRGF0YVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbURhdGFT
dGFydDsgfQogICAgICBjb25zdCBDaGFyVCogRGF0YUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1EYXRh
RW5kOyB9CiAgICAgIHB0cmRpZmZfdCBEYXRhTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbURhdGFF
bmQgLSBtRGF0YVN0YXJ0OyB9CgogICAgcHJvdGVjdGVkOgogICAgICBjb25zdCBDaGFyVCogbURh
dGFTdGFydDsKICAgICAgY29uc3QgQ2hhclQqIG1EYXRhRW5kOwogIH07CgoKCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zU3RyaW5nQWxsb2NhdG9yCiAgewogICAgcHVibGljOgoK
ICAgICAgdmlydHVhbCB2b2lkIERlYWxsb2NhdGUoIENoYXJUKiApIGNvbnN0ID0gMDsKICB9OwoK
CgoKICAgICAgIG5zU3RyaW5nQWxsb2NhdG9yPGNoYXI+JiBTdHJpbmdBbGxvY2F0b3JfY2hhcigp
OwogICAgICAgbnNTdHJpbmdBbGxvY2F0b3I8UFJVbmljaGFyPiYgU3RyaW5nQWxsb2NhdG9yX3dj
aGFyX3QoKTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IG5zU3RyaW5nQWxsb2NhdG9y
VHJhaXRzCiAgewogIH07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnNTdHJpbmdBbGxvY2F0b3JUcmFp
dHM8Y2hhcj4KICB7CiAgICBzdGF0aWMgbnNTdHJpbmdBbGxvY2F0b3I8Y2hhcj4mIGdsb2JhbF9z
dHJpbmdfYWxsb2NhdG9yKCkgeyByZXR1cm4gU3RyaW5nQWxsb2NhdG9yX2NoYXIoKTsgfQogIH07
Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnNTdHJpbmdBbGxvY2F0b3JUcmFpdHM8UFJVbmljaGFyPgog
IHsKICAgIHN0YXRpYyBuc1N0cmluZ0FsbG9jYXRvcjxQUlVuaWNoYXI+JiBnbG9iYWxfc3RyaW5n
X2FsbG9jYXRvcigpIHsgcmV0dXJuIFN0cmluZ0FsbG9jYXRvcl93Y2hhcl90KCk7IH0KICB9Owoj
IDE1OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlLmgiCnRlbXBsYXRl
IDxjbGFzcyBDaGFyVD4KY2xhc3MgbnNTaGFyZWRCdWZmZXJIYW5kbGUKICAgIDogcHVibGljIG5z
QnVmZmVySGFuZGxlPENoYXJUPgogIHsKICAgIHByb3RlY3RlZDoKICAgICAgZW51bQogICAgICAg
IHsKICAgICAgICAgIGtJc1NoYXJlZCA9IDB4ODAwMDAwMCwKICAgICAgICAgIGtJc1NpbmdsZUFs
bG9jYXRpb25XaXRoQnVmZmVyID0gMHg0MDAwMDAwLAogICAgICAgICAga0lzU3RvcmFnZURlZmlu
ZWRTZXBhcmF0ZWx5ID0gMHgyMDAwMDAwLAogICAgICAgICAga0lzVXNlckFsbG9jYXRvciA9IDB4
MTAwMDAwMCwKCiAgICAgICAgICBrSW1wbGVtZW50YXRpb25GbGFnc01hc2sgPSAweDBGMDAwMDAs
CiAgICAgICAgICBrRmxhZ3NNYXNrID0gMHhGRjAwMDAwLAogICAgICAgICAga1JlZkNvdW50TWFz
ayA9IDB4MDBGRkZGRgogICAgICAgIH07CgogICAgcHVibGljOgogICAgICBuc1NoYXJlZEJ1ZmZl
ckhhbmRsZSggQ2hhclQqIGFEYXRhU3RhcnQsIENoYXJUKiBhRGF0YUVuZCApCiAgICAgICAgICA6
IG5zQnVmZmVySGFuZGxlPENoYXJUPihhRGF0YVN0YXJ0LCBhRGF0YUVuZCkKICAgICAgICB7CiAg
ICAgICAgICBtRmxhZ3MgPSBrSXNTaGFyZWQ7CiAgICAgICAgfQoKICAgICAgbnNTaGFyZWRCdWZm
ZXJIYW5kbGUoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFFbmQsIENoYXJUKiwgQ2hh
clQqLCBQUkJvb2wgaXNTaW5nbGVBbGxvY2F0aW9uICkKICAgICAgICAgIDogbnNCdWZmZXJIYW5k
bGU8Q2hhclQ+KGFEYXRhU3RhcnQsIGFEYXRhRW5kKQogICAgICAgIHsKICAgICAgICAgIG1GbGFn
cyA9IGtJc1NoYXJlZDsKICAgICAgICAgIGlmICggaXNTaW5nbGVBbGxvY2F0aW9uICkKICAgICAg
ICAgICAgbUZsYWdzIHw9IGtJc1NpbmdsZUFsbG9jYXRpb25XaXRoQnVmZmVyOwogICAgICAgIH0K
CiAgICAgIH5uc1NoYXJlZEJ1ZmZlckhhbmRsZSgpOwoKICAgICAgdm9pZAogICAgICBBY3F1aXJl
UmVmZXJlbmNlKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRs
ZTxDaGFyVD4qIG11dGFibGVfdGhpcyA9IGNvbnN0X2Nhc3Q8IG5zU2hhcmVkQnVmZmVySGFuZGxl
PENoYXJUPiogPih0aGlzKTsKICAgICAgICAgIG11dGFibGVfdGhpcy0+c2V0X3JlZmNvdW50KCBn
ZXRfcmVmY291bnQoKSsxICk7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBSZWxlYXNlUmVm
ZXJlbmNlKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxD
aGFyVD4qIG11dGFibGVfdGhpcyA9IGNvbnN0X2Nhc3Q8IG5zU2hhcmVkQnVmZmVySGFuZGxlPENo
YXJUPiogPih0aGlzKTsKICAgICAgICAgIGlmICggIW11dGFibGVfdGhpcy0+c2V0X3JlZmNvdW50
KCBnZXRfcmVmY291bnQoKS0xICkgKQogICAgICAgICAgICBkZWxldGUgbXV0YWJsZV90aGlzOwoK
ICAgICAgICB9CgogICAgICBQUkJvb2wKICAgICAgSXNSZWZlcmVuY2VkKCkgY29uc3QKICAgICAg
ICB7CiAgICAgICAgICByZXR1cm4gZ2V0X3JlZmNvdW50KCkgIT0gMDsKICAgICAgICB9CgogICAg
ICBQUlVpbnQzMgogICAgICBHZXRJbXBsZW1lbnRhdGlvbkZsYWdzKCkgY29uc3QKICAgICAgICB7
CiAgICAgICAgICByZXR1cm4gbUZsYWdzICYga0ltcGxlbWVudGF0aW9uRmxhZ3NNYXNrOwogICAg
ICAgIH0KCiAgICAgIHZvaWQKICAgICAgU2V0SW1wbGVtZW50YXRpb25GbGFncyggUFJVaW50MzIg
YU5ld0ZsYWdzICkKICAgICAgICB7CiAgICAgICAgICBtRmxhZ3MgPSAobUZsYWdzICYgfmtJbXBs
ZW1lbnRhdGlvbkZsYWdzTWFzaykgfCAoYU5ld0ZsYWdzICYga0ltcGxlbWVudGF0aW9uRmxhZ3NN
YXNrKTsKICAgICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICBQUlVpbnQzMiBtRmxhZ3M7Cgog
ICAgICBQUlVpbnQzMgogICAgICBnZXRfcmVmY291bnQoKSBjb25zdAogICAgICAgIHsKICAgICAg
ICAgIHJldHVybiBtRmxhZ3MgJiBrUmVmQ291bnRNYXNrOwogICAgICAgIH0KCiAgICAgIFBSVWlu
dDMyCiAgICAgIHNldF9yZWZjb3VudCggUFJVaW50MzIgYU5ld1JlZkNvdW50ICkKICAgICAgICB7
CiAgICAgICAgICBpZiAoIShhTmV3UmVmQ291bnQgPD0ga1JlZkNvdW50TWFzaykpIG5zRGVidWc6
OkFzc2VydGlvbigiYU5ld1JlZkNvdW50IDw9IGtSZWZDb3VudE1hc2siLCAiYU5ld1JlZkNvdW50
IDw9IGtSZWZDb3VudE1hc2siLCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFu
ZGxlLmgiLCAyMzkpOwoKICAgICAgICAgIG1GbGFncyA9IChtRmxhZ3MgJiBrRmxhZ3NNYXNrKSB8
IGFOZXdSZWZDb3VudDsKICAgICAgICAgIHJldHVybiBhTmV3UmVmQ291bnQ7CiAgICAgICAgfQoK
ICAgICAgbnNTdHJpbmdBbGxvY2F0b3I8Q2hhclQ+JiBnZXRfYWxsb2NhdG9yKCkgY29uc3Q7CiAg
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zRmxleEJ1ZmZlckhhbmRsZQogICAg
OiBwdWJsaWMgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+CiAgewogICAgcHVibGljOgogICAg
ICBuc0ZsZXhCdWZmZXJIYW5kbGUoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFFbmQs
IENoYXJUKiBhU3RvcmFnZVN0YXJ0LCBDaGFyVCogYVN0b3JhZ2VFbmQgKQogICAgICAgICAgOiBu
c1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4oYURhdGFTdGFydCwgYURhdGFFbmQpLAogICAgICAg
ICAgICBtU3RvcmFnZVN0YXJ0KGFTdG9yYWdlU3RhcnQpLAogICAgICAgICAgICBtU3RvcmFnZUVu
ZChhU3RvcmFnZUVuZCkKICAgICAgICB7CiAgICAgICAgICB0aGlzLT5tRmxhZ3MgfD0gdGhpcy0+
a0lzU3RvcmFnZURlZmluZWRTZXBhcmF0ZWx5OwogICAgICAgIH0KCiAgICAgIHZvaWQgU3RvcmFn
ZVN0YXJ0KCBDaGFyVCogYU5ld1N0b3JhZ2VTdGFydCApIHsgbVN0b3JhZ2VTdGFydCA9IGFOZXdT
dG9yYWdlU3RhcnQ7IH0KICAgICAgQ2hhclQqIFN0b3JhZ2VTdGFydCgpIHsgcmV0dXJuIG1TdG9y
YWdlU3RhcnQ7IH0KICAgICAgY29uc3QgQ2hhclQqIFN0b3JhZ2VTdGFydCgpIGNvbnN0IHsgcmV0
dXJuIG1TdG9yYWdlU3RhcnQ7IH0KCiAgICAgIHZvaWQgU3RvcmFnZUVuZCggQ2hhclQqIGFOZXdT
dG9yYWdlRW5kICkgeyBtU3RvcmFnZUVuZCA9IGFOZXdTdG9yYWdlRW5kOyB9CiAgICAgIENoYXJU
KiBTdG9yYWdlRW5kKCkgeyByZXR1cm4gbVN0b3JhZ2VFbmQ7IH0KICAgICAgY29uc3QgQ2hhclQq
IFN0b3JhZ2VFbmQoKSBjb25zdCB7IHJldHVybiBtU3RvcmFnZUVuZDsgfQoKICAgICAgcHRyZGlm
Zl90IFN0b3JhZ2VMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtU3RvcmFnZUVuZCAtIG1TdG9yYWdl
U3RhcnQ7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIENoYXJUKiBtU3RvcmFnZVN0YXJ0OwogICAg
ICBDaGFyVCogbVN0b3JhZ2VFbmQ7CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KY2xhc3Mg
bnNTaGFyZWRCdWZmZXJIYW5kbGVXaXRoQWxsb2NhdG9yCiAgICA6IHB1YmxpYyBuc1NoYXJlZEJ1
ZmZlckhhbmRsZTxDaGFyVD4KICB7CiAgICBwdWJsaWM6CiAgICAgIG5zU2hhcmVkQnVmZmVySGFu
ZGxlV2l0aEFsbG9jYXRvciggQ2hhclQqIGFEYXRhU3RhcnQsIENoYXJUKiBhRGF0YUVuZCwgbnNT
dHJpbmdBbGxvY2F0b3I8Q2hhclQ+JiBhQWxsb2NhdG9yICkKICAgICAgICAgIDogbnNTaGFyZWRC
dWZmZXJIYW5kbGU8Q2hhclQ+KGFEYXRhU3RhcnQsIGFEYXRhRW5kKSwKICAgICAgICAgICAgbUFs
bG9jYXRvcihhQWxsb2NhdG9yKQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPm1GbGFncyB8PSB0
aGlzLT5rSXNVc2VyQWxsb2NhdG9yOwogICAgICAgIH0KCiAgICAgIG5zU3RyaW5nQWxsb2NhdG9y
PENoYXJUPiYgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1BbGxvY2F0b3I7IH0KCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIG5zU3RyaW5nQWxsb2NhdG9yPENoYXJUPiYgbUFsbG9jYXRvcjsK
ICB9OwoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpjbGFzcyBuc0ZsZXhCdWZmZXJIYW5kbGVXaXRo
QWxsb2NhdG9yCiAgICA6IHB1YmxpYyBuc0ZsZXhCdWZmZXJIYW5kbGU8Q2hhclQ+CiAgewogICAg
cHVibGljOgogICAgICBuc0ZsZXhCdWZmZXJIYW5kbGVXaXRoQWxsb2NhdG9yKCBDaGFyVCogYURh
dGFTdGFydCwgQ2hhclQqIGFEYXRhRW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDaGFyVCogYVN0b3JhZ2VTdGFydCwgQ2hhclQqIGFTdG9yYWdlRW5kLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1N0cmluZ0FsbG9jYXRvcjxDaGFyVD4m
IGFBbGxvY2F0b3IgKQogICAgICAgICAgOiBuc0ZsZXhCdWZmZXJIYW5kbGU8Q2hhclQ+KGFEYXRh
U3RhcnQsIGFEYXRhRW5kLCBhU3RvcmFnZVN0YXJ0LCBhU3RvcmFnZUVuZCksCiAgICAgICAgICAg
IG1BbGxvY2F0b3IoYUFsbG9jYXRvcikKICAgICAgICB7CiAgICAgICAgICB0aGlzLT5tRmxhZ3Mg
fD0gdGhpcy0+a0lzVXNlckFsbG9jYXRvcjsKICAgICAgICB9CgogICAgICBuc1N0cmluZ0FsbG9j
YXRvcjxDaGFyVD4mIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBtQWxsb2NhdG9yOyB9
CgogICAgcHJvdGVjdGVkOgogICAgICBuc1N0cmluZ0FsbG9jYXRvcjxDaGFyVD4mIG1BbGxvY2F0
b3I7CiAgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+Cm5zU3RyaW5nQWxsb2NhdG9yPENoYXJU
PiYKbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+OjpnZXRfYWxsb2NhdG9yKCkgY29uc3QKCiAg
ewogICAgaWYgKCBtRmxhZ3MgJiBrSXNVc2VyQWxsb2NhdG9yICkKICAgICAgewogICAgICAgIGlm
ICggbUZsYWdzICYga0lzU3RvcmFnZURlZmluZWRTZXBhcmF0ZWx5ICkKICAgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PCBjb25zdCBuc0ZsZXhCdWZmZXJIYW5kbGVXaXRoQWxsb2NhdG9y
PENoYXJUPiogPih0aGlzKS0+Z2V0X2FsbG9jYXRvcigpOwogICAgICAgIGVsc2UKICAgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZVdpdGhB
bGxvY2F0b3I8Q2hhclQ+KiA+KHRoaXMpLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgIH0KCiAgICBy
ZXR1cm4gbnNTdHJpbmdBbGxvY2F0b3JUcmFpdHM8Q2hhclQ+OjpnbG9iYWxfc3RyaW5nX2FsbG9j
YXRvcigpOwogIH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+Cm5zU2hhcmVkQnVmZmVySGFuZGxl
PENoYXJUPjo6fm5zU2hhcmVkQnVmZmVySGFuZGxlKCkKCiAgewogICAgaWYgKCEoIUlzUmVmZXJl
bmNlZCgpKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCIhSXNSZWZlcmVuY2VkKCkiLCAiIUlzUmVmZXJl
bmNlZCgpIiwgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1ZmZlckhhbmRsZS5oIiwgMzM3
KTsKCiAgICBpZiAoICEobUZsYWdzICYga0lzU2luZ2xlQWxsb2NhdGlvbldpdGhCdWZmZXIpICkK
ICAgICAgewogICAgICAgIENoYXJUKiBzdHJpbmdfc3RvcmFnZSA9IHRoaXMtPm1EYXRhU3RhcnQ7
CiAgICAgICAgaWYgKCBtRmxhZ3MgJiBrSXNTdG9yYWdlRGVmaW5lZFNlcGFyYXRlbHkgKQogICAg
ICAgICAgc3RyaW5nX3N0b3JhZ2UgPSByZWludGVycHJldF9jYXN0PCBuc0ZsZXhCdWZmZXJIYW5k
bGU8Q2hhclQ+KiA+KHRoaXMpLT5TdG9yYWdlU3RhcnQoKTsKCiAgICAgICAgZ2V0X2FsbG9jYXRv
cigpLkRlYWxsb2NhdGUoc3RyaW5nX3N0b3JhZ2UpOwogICAgICB9CiAgfQojIDMwICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNQcml2YXRlU2hhcmFibGVTdHJpbmcuaCIgMgojIDQwICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQcml2YXRlU2hhcmFibGVTdHJpbmcuaCIKY2xhc3MgbnNQ
cml2YXRlU2hhcmFibGVTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgUFJVbmlj
aGFyIGNoYXJfdHlwZTsKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgfm5zUHJpdmF0ZVNoYXJh
YmxlU3RyaW5nKCkge30KCiAgICAgIHZpcnR1YWwgUFJVaW50MzIgR2V0SW1wbGVtZW50YXRpb25G
bGFncygpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXJfdHlw
ZT4qIEdldEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBuc0J1
ZmZlckhhbmRsZTxjaGFyX3R5cGU+KiBHZXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmly
dHVhbCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxjaGFyX3R5cGU+KiBHZXRTaGFyZWRCdWZm
ZXJIYW5kbGUoKSBjb25zdDsKCgoKCgoKCiAgfTsKCmNsYXNzIG5zUHJpdmF0ZVNoYXJhYmxlQ1N0
cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgICBw
dWJsaWM6CiAgICAgIHZpcnR1YWwgfm5zUHJpdmF0ZVNoYXJhYmxlQ1N0cmluZygpIHt9CgogICAg
ICB2aXJ0dWFsIFBSVWludDMyIEdldEltcGxlbWVudGF0aW9uRmxhZ3MoKSBjb25zdDsKICAgICAg
dmlydHVhbCBjb25zdCBuc0J1ZmZlckhhbmRsZTxjaGFyX3R5cGU+KiBHZXRGbGF0QnVmZmVySGFu
ZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcl90eXBl
PiogR2V0QnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNTaGFyZWRC
dWZmZXJIYW5kbGU8Y2hhcl90eXBlPiogR2V0U2hhcmVkQnVmZmVySGFuZGxlKCkgY29uc3Q7CgoK
CgoKCgogIH07CiMgMzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIgMgoK
CgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFpdHMuaCIgMQojIDI3ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDaGFyVHJhaXRzLmgiCiMgMSAiL25ld2xpYi9pbmNs
dWRlL2N0eXBlLmgiIDEgMwojIDI2ICIvbmV3bGliL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi9u
ZXdsaWIvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL25ld2xpYi9pbmNsdWRlL2N0eXBl
LmgiIDIgMwojIDEgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI4ICIvbmV3
bGliL2luY2x1ZGUvY3R5cGUuaCIgMiAzCgpleHRlcm4gIkMiIHsKIyA0MCAiL25ld2xpYi9pbmNs
dWRlL2N0eXBlLmgiIDMKIyAxICIvbmV3bGliL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDQxICIv
bmV3bGliL2luY2x1ZGUvY3R5cGUuaCIgMiAzCgoKCgoKCmVudW0KewogIF9JU3VwcGVyID0gKCgw
KSA8IDggPyAoKDEgPDwgKDApKSA8PCA4KSA6ICgoMSA8PCAoMCkpID4+IDgpKSwKICBfSVNsb3dl
ciA9ICgoMSkgPCA4ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAoKDEgPDwgKDEpKSA+PiA4KSksCiAg
X0lTYWxwaGEgPSAoKDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8IDgpIDogKCgxIDw8ICgyKSkgPj4g
OCkpLAogIF9JU2RpZ2l0ID0gKCgzKSA8IDggPyAoKDEgPDwgKDMpKSA8PCA4KSA6ICgoMSA8PCAo
MykpID4+IDgpKSwKICBfSVN4ZGlnaXQgPSAoKDQpIDwgOCA/ICgoMSA8PCAoNCkpIDw8IDgpIDog
KCgxIDw8ICg0KSkgPj4gOCkpLAogIF9JU3NwYWNlID0gKCg1KSA8IDggPyAoKDEgPDwgKDUpKSA8
PCA4KSA6ICgoMSA8PCAoNSkpID4+IDgpKSwKICBfSVNwcmludCA9ICgoNikgPCA4ID8gKCgxIDw8
ICg2KSkgPDwgOCkgOiAoKDEgPDwgKDYpKSA+PiA4KSksCiAgX0lTZ3JhcGggPSAoKDcpIDwgOCA/
ICgoMSA8PCAoNykpIDw8IDgpIDogKCgxIDw8ICg3KSkgPj4gOCkpLAogIF9JU2JsYW5rID0gKCg4
KSA8IDggPyAoKDEgPDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAoOCkpID4+IDgpKSwKICBfSVNjbnRy
bCA9ICgoOSkgPCA4ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAoKDEgPDwgKDkpKSA+PiA4KSksCiAg
X0lTcHVuY3QgPSAoKDEwKSA8IDggPyAoKDEgPDwgKDEwKSkgPDwgOCkgOiAoKDEgPDwgKDEwKSkg
Pj4gOCkpLAogIF9JU2FsbnVtID0gKCgxMSkgPCA4ID8gKCgxIDw8ICgxMSkpIDw8IDgpIDogKCgx
IDw8ICgxMSkpID4+IDgpKQp9OwojIDc1ICIvbmV3bGliL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRl
cm4gX19jb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKZXh0ZXJuIF9fY29uc3Qg
X19pbnQzMl90ICpfX2N0eXBlX3RvbG93ZXI7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19j
dHlwZV90b3VwcGVyOwojIDkxICIvbmV3bGliL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50
IGlzYWxudW0gKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNhbHBoYSAoaW50KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBpc2NudHJsIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZGlnaXQg
KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNsb3dlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBpc2dyYXBoIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHJpbnQgKGludCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgaXNwdW5jdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3Nw
YWNlIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgaXN4ZGlnaXQgKGludCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc2JsYW5rIChp
bnQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB0b2xvd2VyIChpbnQgX19jKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHRvdXBwZXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50
IGlzYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHRvYXNjaWkgKGludCBf
X2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF90b3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRl
cm4gaW50IF90b2xvd2VyIChpbnQpIHRocm93ICgpOwojIDE2OCAiL25ld2xpYi9pbmNsdWRlL2N0
eXBlLmgiIDMKZXh0ZXJuIF9faW5saW5lIGludAp0b2xvd2VyIChpbnQgX19jKSB0aHJvdyAoKQp7
CiAgcmV0dXJuIF9fYyA+PSAtMTI4ICYmIF9fYyA8IDI1NiA/IF9fY3R5cGVfdG9sb3dlcltfX2Nd
IDogX19jOwp9CgpleHRlcm4gX19pbmxpbmUgaW50CnRvdXBwZXIgKGludCBfX2MpIHRocm93ICgp
CnsKICByZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwgMjU2ID8gX19jdHlwZV90b3VwcGVyW19f
Y10gOiBfX2M7Cn0KIyAyMTEgIi9uZXdsaWIvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL25ld2xp
Yi9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjEyICIvbmV3bGliL2luY2x1ZGUvY3R5cGUuaCIg
MiAzCiMgMjI0ICIvbmV3bGliL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IF9faXNhbG51
bV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNhbHBoYV9sIChp
bnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNjbnRybF9sIChpbnQsIF9f
bG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNkaWdpdF9sIChpbnQsIF9fbG9jYWxl
X3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRo
cm93ICgpOwpleHRlcm4gaW50IF9faXNncmFwaF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgp
OwpleHRlcm4gaW50IF9faXNwcmludF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRl
cm4gaW50IF9faXNwdW5jdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50
IF9faXNzcGFjZV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN1
cHBlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN4ZGlnaXRf
bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX19pc2JsYW5rX2wgKGlu
dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX190b2xvd2VyX2wgKGludCBf
X2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChp
bnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CiMgMjc3ICIvbmV3bGliL2luY2x1ZGUv
Y3R5cGUuaCIgMwp9CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFpdHMu
aCIgMgoKCiMgMSAiL25ld2xpYi9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAzMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIiAyCiMgMzkgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0NoYXJUcmFpdHMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNT
dHJpbmdJdGVyYXRvclV0aWxzLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
U3RyaW5nSXRlcmF0b3JVdGlscy5oIgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+CmlubGluZQpQ
UkJvb2wKU2FtZUZyYWdtZW50KCBjb25zdCBJdGVyYXRvciYgbGhzLCBjb25zdCBJdGVyYXRvciYg
cmhzICkKICB7CiAgICByZXR1cm4gbGhzLmZyYWdtZW50KCkubVN0YXJ0ID09IHJocy5mcmFnbWVu
dCgpLm1TdGFydDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+IGNsYXNzIG5zUmVhZGluZ0l0
ZXJhdG9yOwoKCgoKICAgICAgIHNpemVfdCBEaXN0YW5jZSggY29uc3QgbnNSZWFkaW5nSXRlcmF0
b3I8UFJVbmljaGFyPiYsIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPFBSVW5pY2hhcj4mICk7CiAg
ICAgICBzaXplX3QgRGlzdGFuY2UoIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPGNoYXI+JiwgY29u
c3QgbnNSZWFkaW5nSXRlcmF0b3I8Y2hhcj4mICk7CiMgNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0NoYXJUcmFpdHMuaCIgMgoKCgoKCiAgdHlwZWRlZiBQUkJvb2wgbnNDaGFyVHJhaXRz
X2Jvb2w7CgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpzdHJ1Y3QgbnNDaGFyVHJhaXRzCiAgewog
ICAgdHlwZWRlZiBDaGFyVCBjaGFyX3R5cGU7CiAgICB0eXBlZGVmIGNoYXIgaW5jb21wYXRpYmxl
X2NoYXJfdHlwZTsKCiAgICBzdGF0aWMKICAgIHZvaWQKICAgIGFzc2lnbiggY2hhcl90eXBlJiBs
aHMsIGNvbnN0IGNoYXJfdHlwZSYgcmhzICkKICAgICAgewogICAgICAgIGxocyA9IHJoczsKICAg
ICAgfQoKCgoKICAgIHR5cGVkZWYgaW50IGludF90eXBlOwoKICAgIHN0YXRpYwogICAgY2hhcl90
eXBlCiAgICB0b19jaGFyX3R5cGUoIGNvbnN0IGludF90eXBlJiBjICkKICAgICAgewogICAgICAg
IHJldHVybiBjaGFyX3R5cGUoYyk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGludF90eXBlCiAg
ICB0b19pbnRfdHlwZSggY29uc3QgY2hhcl90eXBlJiBjICkKICAgICAgewogICAgICAgIHJldHVy
biBpbnRfdHlwZShjKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgbnNDaGFyVHJhaXRzX2Jvb2wK
ICAgIGVxX2ludF90eXBlKCBjb25zdCBpbnRfdHlwZSYgbGhzLCBjb25zdCBpbnRfdHlwZSYgcmhz
ICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMgPT0gcmhzOwogICAgICB9CgoKCgogICAgc3Rh
dGljCiAgICBuc0NoYXJUcmFpdHNfYm9vbAogICAgZXEoIGNvbnN0IGNoYXJfdHlwZSYgbGhzLCBj
b25zdCBjaGFyX3R5cGUmIHJocyApCiAgICAgIHsKICAgICAgICByZXR1cm4gbGhzID09IHJoczsK
ICAgICAgfQoKICAgIHN0YXRpYwogICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAgIGx0KCBjb25zdCBj
aGFyX3R5cGUmIGxocywgY29uc3QgY2hhcl90eXBlJiByaHMgKQogICAgICB7CiAgICAgICAgcmV0
dXJuIGxocyA8IHJoczsKICAgICAgfQoKCgoKICAgIHN0YXRpYwogICAgY2hhcl90eXBlKgogICAg
Y29weSggY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4gKQogICAg
ICB7CiAgICAgICAgY2hhcl90eXBlKiByZXN1bHQgPSBzMTsKICAgICAgICB3aGlsZSAoIG4tLSAp
CiAgICAgICAgICBhc3NpZ24oKnMxKyssICpzMisrKTsKICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICB9CgogICAgc3RhdGljCiAgICBjaGFyX3R5cGUqCiAgICBtb3ZlKCBjaGFyX3R5cGUqIHMx
LCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbiApCiAgICAgIHsKICAgICAgICBjaGFyX3R5
cGUqIHJlc3VsdCA9IHMxOwoKICAgICAgICBpZiAoIG4gKQogICAgICAgICAgewogICAgICAgICAg
ICBpZiAoIHMyID4gczEgKQogICAgICAgICAgICAgIGNvcHkoczEsIHMyLCBuKTsKICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHMxICs9IG47CiAgICAgICAg
ICAgICAgICBzMiArPSBuOwogICAgICAgICAgICAgICAgd2hpbGUgKCBuLS0gKQogICAgICAgICAg
ICAgICAgICBhc3NpZ24oKi0tczEsICotLXMyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9
CgogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNoYXJfdHlw
ZSoKICAgIGFzc2lnbiggY2hhcl90eXBlKiBzLCBzaXplX3QgbiwgY29uc3QgY2hhcl90eXBlJiBj
ICkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSogcmVzdWx0ID0gczsKICAgICAgICB3aGlsZSAo
IG4tLSApCiAgICAgICAgICBhc3NpZ24oKnMrKywgYyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgfQoKICAgIHN0YXRpYwogICAgaW50CiAgICBjb21wYXJlKCBjb25zdCBjaGFyX3R5cGUq
IHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbiApCiAgICAgIHsKICAgICAgICBmb3Ig
KCA7IG4tLTsgKytzMSwgKytzMiApCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmICggbHQoKnMx
LCAqczIpICkKICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgIGlmICggbHQoKnMy
LCAqczEpICkKICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgIH0KCiAgICAgICAgcmV0
dXJuIDA7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIHNpemVfdAogICAgbGVuZ3RoKCBjb25zdCBj
aGFyX3R5cGUqIHMgKQogICAgICB7CiAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CiAgICAgICAg
d2hpbGUgKCAhZXEoKnMrKywgQ2hhclQoMCkpICkKICAgICAgICAgICsrcmVzdWx0OwogICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IGNoYXJfdHlwZSoK
ICAgIGZpbmQoIGNvbnN0IGNoYXJfdHlwZSogcywgc2l6ZV90IG4sIGNvbnN0IGNoYXJfdHlwZSYg
YyApCiAgICAgIHsKICAgICAgICB3aGlsZSAoIG4tLSApCiAgICAgICAgICB7CiAgICAgICAgICAg
IGlmICggZXEoKnMsIGMpICkKICAgICAgICAgICAgICByZXR1cm4gczsKICAgICAgICAgICAgKytz
OwogICAgICAgICAgfQoKICAgICAgICByZXR1cm4gMDsKICAgICAgfQojIDIxMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIgogIH07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3Qg
bnNDaGFyVHJhaXRzPGNoYXI+CiAgewogICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAgIHR5
cGVkZWYgUFJVbmljaGFyIGluY29tcGF0aWJsZV9jaGFyX3R5cGU7CgogICAgc3RhdGljCiAgICB2
b2lkCiAgICBhc3NpZ24oIGNoYXImIGxocywgY2hhciByaHMgKQogICAgICB7CiAgICAgICAgbGhz
ID0gcmhzOwogICAgICB9CgoKCgogICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CgogICAgc3RhdGlj
CiAgICBjaGFyCiAgICB0b19jaGFyX3R5cGUoIGludCBjICkKICAgICAgewogICAgICAgIHJldHVy
biBjaGFyKGMpOwogICAgICB9CgogICAgc3RhdGljCiAgICBpbnQKICAgIHRvX2ludF90eXBlKCBj
aGFyIGMgKQogICAgICB7CiAgICAgICAgcmV0dXJuIGludCggc3RhdGljX2Nhc3Q8IHVuc2lnbmVk
IGNoYXIgPihjKSApOwogICAgICB9CgogICAgc3RhdGljCiAgICBuc0NoYXJUcmFpdHNfYm9vbAog
ICAgZXFfaW50X3R5cGUoIGludCBsaHMsIGludCByaHMgKQogICAgICB7CiAgICAgICAgcmV0dXJu
IGxocyA9PSByaHM7CiAgICAgIH0KCgoKCiAgICBzdGF0aWMKICAgIG5zQ2hhclRyYWl0c19ib29s
CiAgICBlcSggY2hhciBsaHMsIGNoYXIgcmhzICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMg
PT0gcmhzOwogICAgICB9CgogICAgc3RhdGljCiAgICBuc0NoYXJUcmFpdHNfYm9vbAogICAgbHQo
IGNoYXIgbGhzLCBjaGFyIHJocyApCiAgICAgIHsKICAgICAgICByZXR1cm4gbGhzIDwgcmhzOwog
ICAgICB9CgoKCgogICAgc3RhdGljCiAgICBjaGFyKgogICAgbW92ZSggY2hhciogczEsIGNvbnN0
IGNoYXIqIHMyLCBzaXplX3QgbiApCiAgICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
IGNoYXIqID4obWVtbW92ZShzMSwgczIsIG4pKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgY2hh
cioKICAgIGNvcHkoIGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwgc2l6ZV90IG4gKQogICAgICB7
CiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjaGFyKiA+KG1lbWNweShzMSwgczIsIG4pKTsK
ICAgICAgfQoKICAgIHN0YXRpYwogICAgY2hhcioKICAgIGFzc2lnbiggY2hhciogcywgc2l6ZV90
IG4sIGNoYXIgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNoYXIqID4o
bWVtc2V0KHMsIHRvX2ludF90eXBlKGMpLCBuKSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGlu
dAogICAgY29tcGFyZSggY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBzaXplX3QgbiAp
CiAgICAgIHsKICAgICAgICByZXR1cm4gbWVtY21wKHMxLCBzMiwgbik7CiAgICAgIH0KCiAgICBz
dGF0aWMKICAgIHNpemVfdAogICAgbGVuZ3RoKCBjb25zdCBjaGFyKiBzICkKICAgICAgewogICAg
ICAgIHJldHVybiBzdHJsZW4ocyk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IGNoYXIq
CiAgICBmaW5kKCBjb25zdCBjaGFyKiBzLCBzaXplX3QgbiwgY2hhciBjICkKICAgICAgewogICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCBjaGFyKiA+KG1lbWNocihzLCB0b19p
bnRfdHlwZShjKSwgbikpOwogICAgICB9CiMgMzM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNDaGFyVHJhaXRzLmgiCiAgfTsKIyA0NjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0No
YXJUcmFpdHMuaCIKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CnN0cnVjdCBuc0NoYXJT
b3VyY2VUcmFpdHMKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIElucHV0SXRlcmF0b3I6OmRpZmZl
cmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiMgNDgwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNDaGFyVHJhaXRzLmgiCiAgICBzdGF0aWMKICAgIFBSVWludDMyCiAgICByZWFkYWJsZV9k
aXN0YW5jZSggY29uc3QgSW5wdXRJdGVyYXRvciYgaXRlciApCiAgICAgIHsKICAgICAgICByZXR1
cm4gaXRlci5zaXplX2ZvcndhcmQoKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgUFJVaW50MzIK
ICAgIHJlYWRhYmxlX2Rpc3RhbmNlKCBjb25zdCBJbnB1dEl0ZXJhdG9yJiBmaXJzdCwgY29uc3Qg
SW5wdXRJdGVyYXRvciYgbGFzdCApCiAgICAgIHsKICAgICAgICByZXR1cm4gUFJVaW50MzIoU2Ft
ZUZyYWdtZW50KGZpcnN0LCBsYXN0KSA/IGxhc3QuZ2V0KCktZmlyc3QuZ2V0KCkgOiBmaXJzdC5z
aXplX2ZvcndhcmQoKSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IHR5cGVuYW1lIElu
cHV0SXRlcmF0b3I6OnZhbHVlX3R5cGUqCiAgICByZWFkKCBjb25zdCBJbnB1dEl0ZXJhdG9yJiBp
dGVyICkKICAgICAgewogICAgICAgIHJldHVybiBpdGVyLmdldCgpOwogICAgICB9CgogICAgc3Rh
dGljCiAgICB2b2lkCiAgICBhZHZhbmNlKCBJbnB1dEl0ZXJhdG9yJiBzLCBkaWZmZXJlbmNlX3R5
cGUgbiApCiAgICAgIHsKICAgICAgICBzLmFkdmFuY2Uobik7CiAgICAgIH0KICB9OwoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgQ2hhclQ+CnN0cnVjdCBuc0NoYXJTb3VyY2VUcmFpdHM8Q2hhclQqPgogIHsK
ICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKIyA1MjUgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFpdHMuaCIKICAgIHN0YXRpYwogICAgUFJVaW50MzIKICAg
IHJlYWRhYmxlX2Rpc3RhbmNlKCBDaGFyVCogcyApCiAgICAgIHsKICAgICAgICByZXR1cm4gUFJV
aW50MzIobnNDaGFyVHJhaXRzPENoYXJUPjo6bGVuZ3RoKHMpKTsKCiAgICAgIH0KCiAgICBzdGF0
aWMKICAgIFBSVWludDMyCiAgICByZWFkYWJsZV9kaXN0YW5jZSggQ2hhclQqIGZpcnN0LCBDaGFy
VCogbGFzdCApCiAgICAgIHsKICAgICAgICByZXR1cm4gUFJVaW50MzIobGFzdC1maXJzdCk7CiAg
ICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IENoYXJUKgogICAgcmVhZCggQ2hhclQqIHMgKQog
ICAgICB7CiAgICAgICAgcmV0dXJuIHM7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIHZvaWQKICAg
IGFkdmFuY2UoIENoYXJUKiYgcywgZGlmZmVyZW5jZV90eXBlIG4gKQogICAgICB7CiAgICAgICAg
cyArPSBuOwogICAgICB9CiAgfTsKIyA2NDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0No
YXJUcmFpdHMuaCIKdGVtcGxhdGUgPGNsYXNzIE91dHB1dEl0ZXJhdG9yPgpzdHJ1Y3QgbnNDaGFy
U2lua1RyYWl0cwogIHsKICAgIHN0YXRpYwogICAgUFJVaW50MzIKICAgIHdyaXRlKCBPdXRwdXRJ
dGVyYXRvciYgaXRlciwgY29uc3QgdHlwZW5hbWUgT3V0cHV0SXRlcmF0b3I6OnZhbHVlX3R5cGUq
IHMsIFBSVWludDMyIG4gKQogICAgICB7CiAgICAgICAgcmV0dXJuIGl0ZXIud3JpdGUocywgbik7
CiAgICAgIH0KICB9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CnN0cnVjdCBuc0NoYXJTaW5r
VHJhaXRzPENoYXJUKj4KICB7CiAgICBzdGF0aWMKICAgIFBSVWludDMyCiAgICB3cml0ZSggQ2hh
clQqJiBpdGVyLCBjb25zdCBDaGFyVCogcywgUFJVaW50MzIgbiApCiAgICAgIHsKICAgICAgICBu
c0NoYXJUcmFpdHM8Q2hhclQ+Ojptb3ZlKGl0ZXIsIHMsIG4pOwogICAgICAgIGl0ZXIgKz0gbjsK
ICAgICAgICByZXR1cm4gbjsKICAgICAgfQogIH07CiMgMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0FTdHJpbmcuaCIgMgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0
cmluZ0l0ZXJhdG9yLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5n
SXRlcmF0b3IuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdGcmFnbWVu
dC5oIiAxCiMgMzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0ZyYWdtZW50Lmgi
CmVudW0gbnNGcmFnbWVudFJlcXVlc3QgeyBrUHJldkZyYWdtZW50LCBrRmlyc3RGcmFnbWVudCwg
a0xhc3RGcmFnbWVudCwga05leHRGcmFnbWVudCwga0ZyYWdtZW50QXQgfTsKIyA1MyAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nRnJhZ21lbnQuaCIKdGVtcGxhdGUgPGNsYXNzIENo
YXJUPgpzdHJ1Y3QgbnNSZWFkYWJsZUZyYWdtZW50CiAgewogICAgY29uc3QgQ2hhclQqIG1TdGFy
dDsKICAgIGNvbnN0IENoYXJUKiBtRW5kOwogICAgY29uc3Qgdm9pZCogbUZyYWdtZW50SWRlbnRp
ZmllcjsKCiAgICBuc1JlYWRhYmxlRnJhZ21lbnQoKQogICAgICAgIDogbVN0YXJ0KDApLCBtRW5k
KDApLCBtRnJhZ21lbnRJZGVudGlmaWVyKDApCiAgICAgIHsKCiAgICAgIH0KICB9OwojIDgwICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdGcmFnbWVudC5oIgp0ZW1wbGF0ZSA8Y2xh
c3MgQ2hhclQ+CnN0cnVjdCBuc1dyaXRhYmxlRnJhZ21lbnQKICB7CiAgICBDaGFyVCogbVN0YXJ0
OwogICAgQ2hhclQqIG1FbmQ7CiAgICB2b2lkKiBtRnJhZ21lbnRJZGVudGlmaWVyOwoKICAgIG5z
V3JpdGFibGVGcmFnbWVudCgpCiAgICAgICAgOiBtU3RhcnQoMCksIG1FbmQoMCksIG1GcmFnbWVu
dElkZW50aWZpZXIoMCkKICAgICAgewoKICAgICAgfQogIH07CiMgMjkgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiIDIKCgoKCgoKCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyaW5nVHJhaXRzLmgiIDEKIyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zU3RyaW5nVHJhaXRzLmgiCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4Kc3RydWN0IG5z
U3RyaW5nVHJhaXRzCiAgewogICAgdHlwZWRlZiBuc0FTdHJpbmcgYWJzdHJhY3Rfc3RyaW5nX3R5
cGU7CiAgICB0eXBlZGVmIG5zQVByb21pc2VTdHJpbmcgYWJzdHJhY3RfcHJvbWlzZV90eXBlOwog
ICAgdHlwZWRlZiBuc0FGbGF0U3RyaW5nIGFic3RyYWN0X2ZsYXRfdHlwZTsKICAgIHR5cGVkZWYg
Y29uc3QgbnNMb2NhbFN0cmluZyBsaXRlcmFsX3N0cmluZ190eXBlOwogIH07CiMgNjYgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ1RyYWl0cy5oIgp0ZW1wbGF0ZSA8PgpzdHJ1Y3Qg
bnNTdHJpbmdUcmFpdHM8Y2hhcj4KICB7CiAgICB0eXBlZGVmIG5zQUNTdHJpbmcgYWJzdHJhY3Rf
c3RyaW5nX3R5cGU7CiAgICB0eXBlZGVmIG5zQVByb21pc2VDU3RyaW5nIGFic3RyYWN0X3Byb21p
c2VfdHlwZTsKICAgIHR5cGVkZWYgbnNBRmxhdENTdHJpbmcgYWJzdHJhY3RfZmxhdF90eXBlOwog
ICAgdHlwZWRlZiBjb25zdCBuc0xvY2FsQ1N0cmluZyBsaXRlcmFsX3N0cmluZ190eXBlOwogIH07
CiMgMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiIDIKCgoK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBbGdvcml0aG0uaCIgMQojIDM4ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBbGdvcml0aG0uaCIKdGVtcGxhdGUgPGNsYXNzIFQ+Cmlu
bGluZQpjb25zdCBUJgpOU19NSU4oIGNvbnN0IFQmIGEsIGNvbnN0IFQmIGIgKQogIHsKICAgIHJl
dHVybiBiIDwgYSA/IGIgOiBhOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29uc3Qg
VCYKTlNfTUFYKCBjb25zdCBUJiBhLCBjb25zdCBUJiBiICkKICB7CiAgICByZXR1cm4gYSA+IGIg
PyBhIDogYjsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgVD4KaW5s
aW5lClBSVWludDMyCk5TX0NPVU5UKCBJbnB1dEl0ZXJhdG9yJiBmaXJzdCwgY29uc3QgSW5wdXRJ
dGVyYXRvciYgbGFzdCwgY29uc3QgVCYgdmFsdWUgKQogIHsKICAgIFBSVWludDMyIHJlc3VsdCA9
IDA7CiAgICBmb3IgKCA7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3QgKQogICAgICBpZiAoICpmaXJz
dCA9PSB2YWx1ZSApCiAgICAgICAgKytyZXN1bHQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCnRl
bXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJhdG9yLCBjbGFzcyBPdXRwdXRJdGVyYXRvcj4KaW5saW5l
Ck91dHB1dEl0ZXJhdG9yJgpjb3B5X3N0cmluZyggSW5wdXRJdGVyYXRvciYgZmlyc3QsIGNvbnN0
IElucHV0SXRlcmF0b3ImIGxhc3QsIE91dHB1dEl0ZXJhdG9yJiByZXN1bHQgKQogIHsKICAgIHR5
cGVkZWYgbnNDaGFyU291cmNlVHJhaXRzPElucHV0SXRlcmF0b3I+IHNvdXJjZV90cmFpdHM7CiAg
ICB0eXBlZGVmIG5zQ2hhclNpbmtUcmFpdHM8T3V0cHV0SXRlcmF0b3I+IHNpbmtfdHJhaXRzOwoK
ICAgIHdoaWxlICggZmlyc3QgIT0gbGFzdCApCiAgICAgIHsKICAgICAgICBQUkludDMyIGNvdW50
X2NvcGllZCA9IFBSSW50MzIoc2lua190cmFpdHM6OndyaXRlKHJlc3VsdCwgc291cmNlX3RyYWl0
czo6cmVhZChmaXJzdCksIHNvdXJjZV90cmFpdHM6OnJlYWRhYmxlX2Rpc3RhbmNlKGZpcnN0LCBs
YXN0KSkpOwogICAgICAgIGlmICghKGNvdW50X2NvcGllZCA+IDApKSBuc0RlYnVnOjpBc3NlcnRp
b24oInxjb3B5X3N0cmluZ3wgd2lsbCBuZXZlciB0ZXJtaW5hdGUiLCAiY291bnRfY29waWVkID4g
MCIsICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBbGdvcml0aG0uaCIsIDc3KTsKICAgICAg
ICBzb3VyY2VfdHJhaXRzOjphZHZhbmNlKGZpcnN0LCBjb3VudF9jb3BpZWQpOwogICAgICB9Cgog
ICAgcmV0dXJuIHJlc3VsdDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xh
c3MgT3V0cHV0SXRlcmF0b3I+Ck91dHB1dEl0ZXJhdG9yJgpjb3B5X3N0cmluZ19iYWNrd2FyZCgg
Y29uc3QgSW5wdXRJdGVyYXRvciYgZmlyc3QsIElucHV0SXRlcmF0b3ImIGxhc3QsIE91dHB1dEl0
ZXJhdG9yJiByZXN1bHQgKQogIHsKICAgIHdoaWxlICggZmlyc3QgIT0gbGFzdCApCiAgICAgIHsK
ICAgICAgICBsYXN0Lm5vcm1hbGl6ZV9iYWNrd2FyZCgpOwogICAgICAgIHJlc3VsdC5ub3JtYWxp
emVfYmFja3dhcmQoKTsKICAgICAgICBQUlVpbnQzMiBsZW5ndGhUb0NvcHkgPSBQUlVpbnQzMigg
TlNfTUlOKGxhc3Quc2l6ZV9iYWNrd2FyZCgpLCByZXN1bHQuc2l6ZV9iYWNrd2FyZCgpKSApOwog
ICAgICAgIGlmICggZmlyc3QuZnJhZ21lbnQoKS5tU3RhcnQgPT0gbGFzdC5mcmFnbWVudCgpLm1T
dGFydCApCiAgICAgICAgICBsZW5ndGhUb0NvcHkgPSBOU19NSU4obGVuZ3RoVG9Db3B5LCBQUlVp
bnQzMihsYXN0LmdldCgpIC0gZmlyc3QuZ2V0KCkpKTsKCiAgICAgICAgaWYgKCEobGVuZ3RoVG9D
b3B5KSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJ8Y29weV9zdHJpbmdfYmFja3dhcmR8IHdpbGwgbmV2
ZXIgdGVybWluYXRlIiwgImxlbmd0aFRvQ29weSIsICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNBbGdvcml0aG0uaCIsIDk2KTsKCgoKCgogICAgICAgIG5zQ2hhclRyYWl0czx0eXBlbmFtZSBP
dXRwdXRJdGVyYXRvcjo6dmFsdWVfdHlwZT46Om1vdmUocmVzdWx0LmdldCgpLWxlbmd0aFRvQ29w
eSwgbGFzdC5nZXQoKS1sZW5ndGhUb0NvcHksIGxlbmd0aFRvQ29weSk7CgoKICAgICAgICBsYXN0
LmFkdmFuY2UoIC1QUkludDMyKGxlbmd0aFRvQ29weSkgKTsKICAgICAgICByZXN1bHQuYWR2YW5j
ZSggLVBSSW50MzIobGVuZ3RoVG9Db3B5KSApOwogICAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsK
ICB9CiMgNDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiIDIK
IyA1NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nSXRlcmF0b3IuaCIKdGVtcGxh
dGUgPGNsYXNzIENoYXJUPgpjbGFzcyBuc1JlYWRpbmdJdGVyYXRvcgoKICB7CiAgICBwdWJsaWM6
CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBD
aGFyVCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIGNvbnN0IENoYXJUKiBwb2ludGVyOwogICAg
ICB0eXBlZGVmIGNvbnN0IENoYXJUJiByZWZlcmVuY2U7CgoKICAgIHByaXZhdGU6CiAgICAgIGZy
aWVuZCBjbGFzcyBuc0FTdHJpbmc7CiAgICAgIGZyaWVuZCBjbGFzcyBuc0FDU3RyaW5nOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIG5zU3RyaW5nVHJhaXRzPENoYXJUPjo6YWJzdHJhY3Rfc3RyaW5n
X3R5cGUgc3RyaW5nX3R5cGU7CgogICAgICBuc1JlYWRhYmxlRnJhZ21lbnQ8Q2hhclQ+IG1GcmFn
bWVudDsKICAgICAgY29uc3QgQ2hhclQqIG1Qb3NpdGlvbjsKICAgICAgY29uc3Qgc3RyaW5nX3R5
cGUqIG1Pd25pbmdTdHJpbmc7CgogICAgcHVibGljOgogICAgICBuc1JlYWRpbmdJdGVyYXRvcigp
IHsgfQoKCgogICAgICBpbmxpbmUgdm9pZCBub3JtYWxpemVfZm9yd2FyZCgpOwogICAgICBpbmxp
bmUgdm9pZCBub3JtYWxpemVfYmFja3dhcmQoKTsKCiAgICAgIHBvaW50ZXIKICAgICAgZ2V0KCkg
Y29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbVBvc2l0aW9uOwogICAgICAgIH0KCiAg
ICAgIENoYXJUCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0
dXJuICpnZXQoKTsKICAgICAgICB9CiMgMTA1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNT
dHJpbmdJdGVyYXRvci5oIgogICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4mCiAgICAgIG9w
ZXJhdG9yKysoKQogICAgICAgIHsKICAgICAgICAgICsrbVBvc2l0aW9uOwogICAgICAgICAgbm9y
bWFsaXplX2ZvcndhcmQoKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAg
ICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4KICAgICAgb3BlcmF0b3IrKyggaW50ICkKICAgICAg
ICB7CiAgICAgICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4gcmVzdWx0KCp0aGlzKTsKICAg
ICAgICAgICsrbVBvc2l0aW9uOwogICAgICAgICAgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgbnNSZWFkaW5nSXRlcmF0b3I8Q2hh
clQ+JgogICAgICBvcGVyYXRvci0tKCkKICAgICAgICB7CiAgICAgICAgICBub3JtYWxpemVfYmFj
a3dhcmQoKTsKICAgICAgICAgIC0tbVBvc2l0aW9uOwogICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICAgIH0KCiAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPgogICAgICBvcGVyYXRvci0t
KCBpbnQgKQogICAgICAgIHsKICAgICAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiByZXN1
bHQoKnRoaXMpOwogICAgICAgICAgbm9ybWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgICAtLW1Q
b3NpdGlvbjsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgY29uc3Qg
bnNSZWFkYWJsZUZyYWdtZW50PENoYXJUPiYKICAgICAgZnJhZ21lbnQoKSBjb25zdAogICAgICAg
IHsKICAgICAgICAgIHJldHVybiBtRnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAgY29uc3Qgc3Ry
aW5nX3R5cGUmCiAgICAgIHN0cmluZygpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgaWYgKCEo
bU93bmluZ1N0cmluZykpIG5zRGVidWc6OkFzc2VydGlvbigiaXRlcmF0b3Igbm90IGF0dGFjaGVk
IHRvIGEgc3RyaW5nICh8bU93bmluZ1N0cmluZ3wgPT0gMCkiLCAibU93bmluZ1N0cmluZyIsICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIiwgMTQ4KTsKICAgICAg
ICAgIHJldHVybiAqbU93bmluZ1N0cmluZzsKICAgICAgICB9CgogICAgICBkaWZmZXJlbmNlX3R5
cGUKICAgICAgc2l6ZV9mb3J3YXJkKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4g
bUZyYWdtZW50Lm1FbmQgLSBtUG9zaXRpb247CiAgICAgICAgfQoKICAgICAgZGlmZmVyZW5jZV90
eXBlCiAgICAgIHNpemVfYmFja3dhcmQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVy
biBtUG9zaXRpb24gLSBtRnJhZ21lbnQubVN0YXJ0OwogICAgICAgIH0KCiAgICAgIG5zUmVhZGlu
Z0l0ZXJhdG9yPENoYXJUPiYKICAgICAgYWR2YW5jZSggZGlmZmVyZW5jZV90eXBlIG4gKQogICAg
ICAgIHsKICAgICAgICAgIHdoaWxlICggbiA+IDAgKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgZGlmZmVyZW5jZV90eXBlIG9uZV9ob3AgPSBOU19NSU4obiwgc2l6ZV9mb3J3YXJkKCkpOwoK
ICAgICAgICAgICAgICBpZiAoIShvbmVfaG9wPjApKSBuc0RlYnVnOjpBc3NlcnRpb24oIkluZmlu
aXRlIGxvb3A6IGNhbid0IGFkdmFuY2UgYSByZWFkaW5nIGl0ZXJhdG9yIGJleW9uZCB0aGUgZW5k
IG9mIGEgc3RyaW5nIiwgIm9uZV9ob3A+MCIsICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNT
dHJpbmdJdGVyYXRvci5oIiwgMTcxKTsKCgogICAgICAgICAgICAgIG1Qb3NpdGlvbiArPSBvbmVf
aG9wOwogICAgICAgICAgICAgIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgICAgICAgICAgbiAt
PSBvbmVfaG9wOwogICAgICAgICAgICB9CgogICAgICAgICAgd2hpbGUgKCBuIDwgMCApCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgICAg
ICBkaWZmZXJlbmNlX3R5cGUgb25lX2hvcCA9IE5TX01BWChuLCAtc2l6ZV9iYWNrd2FyZCgpKTsK
CiAgICAgICAgICAgICAgaWYgKCEob25lX2hvcDwwKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJJbmZp
bml0ZSBsb29wOiBjYW4ndCBhZHZhbmNlIChiYWNrd2FyZCkgYSByZWFkaW5nIGl0ZXJhdG9yIGJl
eW9uZCB0aGUgZW5kIG9mIGEgc3RyaW5nIiwgIm9uZV9ob3A8MCIsICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIiwgMTg0KTsKCgogICAgICAgICAgICAgIG1Qb3Np
dGlvbiArPSBvbmVfaG9wOwogICAgICAgICAgICAgIG4gLT0gb25lX2hvcDsKICAgICAgICAgICAg
fQoKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgfTsKCnRlbXBsYXRlIDxjbGFz
cyBDaGFyVD4KY2xhc3MgbnNXcml0aW5nSXRlcmF0b3IKCiAgewogICAgcHVibGljOgogICAgICB0
eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgQ2hhclQgdmFs
dWVfdHlwZTsKICAgICAgdHlwZWRlZiBDaGFyVCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBDaGFy
VCYgcmVmZXJlbmNlOwoKCiAgICBwcml2YXRlOgogICAgICBmcmllbmQgY2xhc3MgbnNBU3RyaW5n
OwogICAgICBmcmllbmQgY2xhc3MgbnNBQ1N0cmluZzsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBu
c1N0cmluZ1RyYWl0czxDaGFyVD46OmFic3RyYWN0X3N0cmluZ190eXBlIHN0cmluZ190eXBlOwoK
ICAgICAgbnNXcml0YWJsZUZyYWdtZW50PENoYXJUPiBtRnJhZ21lbnQ7CiAgICAgIENoYXJUKiBt
UG9zaXRpb247CiAgICAgIHN0cmluZ190eXBlKiBtT3duaW5nU3RyaW5nOwoKICAgIHB1YmxpYzoK
ICAgICAgbnNXcml0aW5nSXRlcmF0b3IoKSB7IH0KCgoKICAgICAgaW5saW5lIHZvaWQgbm9ybWFs
aXplX2ZvcndhcmQoKTsKICAgICAgaW5saW5lIHZvaWQgbm9ybWFsaXplX2JhY2t3YXJkKCk7Cgog
ICAgICBwb2ludGVyCiAgICAgIGdldCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJu
IG1Qb3NpdGlvbjsKICAgICAgICB9CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkg
Y29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gKmdldCgpOwogICAgICAgIH0KIyAyNDUg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiCiAgICAgIG5zV3Jp
dGluZ0l0ZXJhdG9yPENoYXJUPiYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgICAgewogICAgICAg
ICAgKyttUG9zaXRpb247CiAgICAgICAgICBub3JtYWxpemVfZm9yd2FyZCgpOwogICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPgog
ICAgICBvcGVyYXRvcisrKCBpbnQgKQogICAgICAgIHsKICAgICAgICAgIG5zV3JpdGluZ0l0ZXJh
dG9yPENoYXJUPiByZXN1bHQoKnRoaXMpOwogICAgICAgICAgKyttUG9zaXRpb247CiAgICAgICAg
ICBub3JtYWxpemVfZm9yd2FyZCgpOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9
CgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4mCiAgICAgIG9wZXJhdG9yLS0oKQogICAg
ICAgIHsKICAgICAgICAgIG5vcm1hbGl6ZV9iYWNrd2FyZCgpOwogICAgICAgICAgLS1tUG9zaXRp
b247CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNXcml0aW5nSXRl
cmF0b3I8Q2hhclQ+CiAgICAgIG9wZXJhdG9yLS0oIGludCApCiAgICAgICAgewogICAgICAgICAg
bnNXcml0aW5nSXRlcmF0b3I8Q2hhclQ+IHJlc3VsdCgqdGhpcyk7CiAgICAgICAgICBub3JtYWxp
emVfYmFja3dhcmQoKTsKICAgICAgICAgIC0tbVBvc2l0aW9uOwogICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICAgICB9CgogICAgICBjb25zdCBuc1dyaXRhYmxlRnJhZ21lbnQ8Q2hhclQ+Jgog
ICAgICBmcmFnbWVudCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1GcmFnbWVu
dDsKICAgICAgICB9CgogICAgICBuc1dyaXRhYmxlRnJhZ21lbnQ8Q2hhclQ+JgogICAgICBmcmFn
bWVudCgpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1GcmFnbWVudDsKICAgICAgICB9Cgog
ICAgICBjb25zdCBzdHJpbmdfdHlwZSYKICAgICAgc3RyaW5nKCkgY29uc3QKICAgICAgICB7CiAg
ICAgICAgICBpZiAoIShtT3duaW5nU3RyaW5nKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJpdGVyYXRv
ciBub3QgYXR0YWNoZWQgdG8gYSBzdHJpbmcgKHxtT3duaW5nU3RyaW5nfCA9PSAwKSIsICJtT3du
aW5nU3RyaW5nIiwgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgi
LCAyOTQpOwogICAgICAgICAgcmV0dXJuICptT3duaW5nU3RyaW5nOwogICAgICAgIH0KCiAgICAg
IHN0cmluZ190eXBlJgogICAgICBzdHJpbmcoKQogICAgICAgIHsKICAgICAgICAgIGlmICghKG1P
d25pbmdTdHJpbmcpKSBuc0RlYnVnOjpBc3NlcnRpb24oIml0ZXJhdG9yIG5vdCBhdHRhY2hlZCB0
byBhIHN0cmluZyAofG1Pd25pbmdTdHJpbmd8ID09IDApIiwgIm1Pd25pbmdTdHJpbmciLCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nSXRlcmF0b3IuaCIsIDMwMSk7CiAgICAgICAg
ICByZXR1cm4gKm1Pd25pbmdTdHJpbmc7CiAgICAgICAgfQoKICAgICAgZGlmZmVyZW5jZV90eXBl
CiAgICAgIHNpemVfZm9yd2FyZCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1G
cmFnbWVudC5tRW5kIC0gbVBvc2l0aW9uOwogICAgICAgIH0KCiAgICAgIGRpZmZlcmVuY2VfdHlw
ZQogICAgICBzaXplX2JhY2t3YXJkKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4g
bVBvc2l0aW9uIC0gbUZyYWdtZW50Lm1TdGFydDsKICAgICAgICB9CgogICAgICBuc1dyaXRpbmdJ
dGVyYXRvcjxDaGFyVD4mCiAgICAgIGFkdmFuY2UoIGRpZmZlcmVuY2VfdHlwZSBuICkKICAgICAg
ICB7CiAgICAgICAgICB3aGlsZSAoIG4gPiAwICkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGRpZmZlcmVuY2VfdHlwZSBvbmVfaG9wID0gTlNfTUlOKG4sIHNpemVfZm9yd2FyZCgpKTsKCiAg
ICAgICAgICAgICAgaWYgKCEob25lX2hvcD4wKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJJbmZpbml0
ZSBsb29wOiBjYW4ndCBhZHZhbmNlIGEgd3JpdGluZyBpdGVyYXRvciBiZXlvbmQgdGhlIGVuZCBv
ZiBhIHN0cmluZyIsICJvbmVfaG9wPjAiLCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry
aW5nSXRlcmF0b3IuaCIsIDMyNCk7CgoKICAgICAgICAgICAgICBtUG9zaXRpb24gKz0gb25lX2hv
cDsKICAgICAgICAgICAgICBub3JtYWxpemVfZm9yd2FyZCgpOwogICAgICAgICAgICAgIG4gLT0g
b25lX2hvcDsKICAgICAgICAgICAgfQoKICAgICAgICAgIHdoaWxlICggbiA8IDAgKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgbm9ybWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgICAgICAg
ZGlmZmVyZW5jZV90eXBlIG9uZV9ob3AgPSBOU19NQVgobiwgLXNpemVfYmFja3dhcmQoKSk7Cgog
ICAgICAgICAgICAgIGlmICghKG9uZV9ob3A8MCkpIG5zRGVidWc6OkFzc2VydGlvbigiSW5maW5p
dGUgbG9vcDogY2FuJ3QgYWR2YW5jZSAoYmFja3dhcmQpIGEgd3JpdGluZyBpdGVyYXRvciBiZXlv
bmQgdGhlIGVuZCBvZiBhIHN0cmluZyIsICJvbmVfaG9wPDAiLCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zU3RyaW5nSXRlcmF0b3IuaCIsIDMzNyk7CgoKICAgICAgICAgICAgICBtUG9zaXRp
b24gKz0gb25lX2hvcDsKICAgICAgICAgICAgICBuIC09IG9uZV9ob3A7CiAgICAgICAgICAgIH0K
CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgUFJVaW50MzIKICAgICAg
d3JpdGUoIGNvbnN0IHZhbHVlX3R5cGUqIHMsIFBSVWludDMyIG4gKQogICAgICAgIHsKICAgICAg
ICAgIGlmICghKHNpemVfZm9yd2FyZCgpID4gMCkpIG5zRGVidWc6OkFzc2VydGlvbigiWW91IGNh
bid0IHx3cml0ZXwgaW50byBhbiB8bnNXcml0aW5nSXRlcmF0b3J8IHdpdGggbm8gc3BhY2UhIiwg
InNpemVfZm9yd2FyZCgpID4gMCIsICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdJ
dGVyYXRvci5oIiwgMzUwKTsKCiAgICAgICAgICBuID0gTlNfTUlOKG4sIFBSVWludDMyKHNpemVf
Zm9yd2FyZCgpKSk7CiAgICAgICAgICBuc0NoYXJUcmFpdHM8dmFsdWVfdHlwZT46Om1vdmUobVBv
c2l0aW9uLCBzLCBuKTsKICAgICAgICAgIGFkdmFuY2UoIGRpZmZlcmVuY2VfdHlwZShuKSApOwog
ICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgfQogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+
CmlubGluZQp2b2lkCm5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPjo6bm9ybWFsaXplX2ZvcndhcmQo
KQogIHsKICAgIHdoaWxlICggbVBvc2l0aW9uID09IG1GcmFnbWVudC5tRW5kCiAgICAgICAgICYm
IG1Pd25pbmdTdHJpbmctPkdldFJlYWRhYmxlRnJhZ21lbnQobUZyYWdtZW50LCBrTmV4dEZyYWdt
ZW50KSApCiAgICAgICAgbVBvc2l0aW9uID0gbUZyYWdtZW50Lm1TdGFydDsKICB9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2b2lkCm5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPjo6bm9y
bWFsaXplX2JhY2t3YXJkKCkKICB7CiAgICB3aGlsZSAoIG1Qb3NpdGlvbiA9PSBtRnJhZ21lbnQu
bVN0YXJ0CiAgICAgICAgICYmIG1Pd25pbmdTdHJpbmctPkdldFJlYWRhYmxlRnJhZ21lbnQobUZy
YWdtZW50LCBrUHJldkZyYWdtZW50KSApCiAgICAgICAgbVBvc2l0aW9uID0gbUZyYWdtZW50Lm1F
bmQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPT0o
IGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYgbGhzLCBjb25zdCBuc1JlYWRpbmdJdGVy
YXRvcjxDaGFyVD4mIHJocyApCiAgewogICAgcmV0dXJuIGxocy5nZXQoKSA9PSByaHMuZ2V0KCk7
CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgppbmxpbmUKUFJCb29sCm9wZXJhdG9yIT0oIGNv
bnN0IG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYgbGhzLCBjb25zdCBuc1JlYWRpbmdJdGVyYXRv
cjxDaGFyVD4mIHJocyApCiAgewogICAgcmV0dXJuIGxocy5nZXQoKSAhPSByaHMuZ2V0KCk7CiAg
fQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2b2lkCm5zV3JpdGluZ0l0ZXJh
dG9yPENoYXJUPjo6bm9ybWFsaXplX2ZvcndhcmQoKQogIHsKICAgIHdoaWxlICggbVBvc2l0aW9u
ID09IG1GcmFnbWVudC5tRW5kCiAgICAgICAgICYmIG1Pd25pbmdTdHJpbmctPkdldFdyaXRhYmxl
RnJhZ21lbnQobUZyYWdtZW50LCBrTmV4dEZyYWdtZW50KSApCiAgICAgIG1Qb3NpdGlvbiA9IG1G
cmFnbWVudC5tU3RhcnQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgppbmxpbmUKdm9pZApu
c1dyaXRpbmdJdGVyYXRvcjxDaGFyVD46Om5vcm1hbGl6ZV9iYWNrd2FyZCgpCiAgewogICAgd2hp
bGUgKCBtUG9zaXRpb24gPT0gbUZyYWdtZW50Lm1TdGFydAogICAgICAgICAmJiBtT3duaW5nU3Ry
aW5nLT5HZXRXcml0YWJsZUZyYWdtZW50KG1GcmFnbWVudCwga1ByZXZGcmFnbWVudCkgKQogICAg
ICBtUG9zaXRpb24gPSBtRnJhZ21lbnQubUVuZDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+
CmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PSggY29uc3QgbnNXcml0aW5nSXRlcmF0b3I8Q2hhclQ+
JiBsaHMsIGNvbnN0IG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiYgcmhzICkKICB7CiAgICByZXR1
cm4gbGhzLmdldCgpID09IHJocy5nZXQoKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+Cmlu
bGluZQpQUkJvb2wKb3BlcmF0b3IhPSggY29uc3QgbnNXcml0aW5nSXRlcmF0b3I8Q2hhclQ+JiBs
aHMsIGNvbnN0IG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiYgcmhzICkKICB7CiAgICByZXR1cm4g
bGhzLmdldCgpICE9IHJocy5nZXQoKTsKICB9CiMgNDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0FTdHJpbmcuaCIgMgoKCgoKCgoKY2xhc3MgbnNBU3RyaW5nCiAgICA6IHB1YmxpYyBuc1By
aXZhdGVTaGFyYWJsZVN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0FTdHJp
bmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIG5zQVByb21pc2VTdHJpbmcgcHJvbWlzZV90eXBl
OwogICAgICB0eXBlZGVmIFBSVW5pY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgY2hhciBp
bmNvbXBhdGlibGVfY2hhcl90eXBlOwoKCiAgICAgIHR5cGVkZWYgbnNSZWFkaW5nSXRlcmF0b3I8
Y2hhcl90eXBlPiBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiBuc1dyaXRpbmdJdGVyYXRv
cjxjaGFyX3R5cGU+IGl0ZXJhdG9yOwoKICAgICAgdHlwZWRlZiBQUlVpbnQzMiBzaXplX3R5cGU7
CiAgICAgIHR5cGVkZWYgUFJVaW50MzIgaW5kZXhfdHlwZTsKCgoKCgoKICAgICAgdmlydHVhbCB+
bnNBU3RyaW5nKCkgeyB9CgogICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3ImIEJlZ2luUmVhZGlu
ZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CiAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvciYg
RW5kUmVhZGluZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CgogICAgICBpbmxpbmUgaXRlcmF0
b3ImIEJlZ2luV3JpdGluZyggaXRlcmF0b3ImICk7CiAgICAgIGlubGluZSBpdGVyYXRvciYgRW5k
V3JpdGluZyggaXRlcmF0b3ImICk7CgogICAgICB2aXJ0dWFsIHNpemVfdHlwZSBMZW5ndGgoKSBj
b25zdCA9IDA7CiAgICAgIFBSQm9vbCBJc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gTGVuZ3RoKCkg
PT0gMDsgfQoKICAgICAgaW5saW5lIFBSQm9vbCBFcXVhbHMoIGNvbnN0IHNlbGZfdHlwZSYgKSBj
b25zdDsKICAgICAgUFJCb29sIEVxdWFscyggY29uc3QgY2hhcl90eXBlKiApIGNvbnN0OwoKCgoK
CgoKICAgICAgY2hhcl90eXBlIEZpcnN0KCkgY29uc3Q7CiAgICAgIGNoYXJfdHlwZSBMYXN0KCkg
Y29uc3Q7CgogICAgICBzaXplX3R5cGUgQ291bnRDaGFyKCBjaGFyX3R5cGUgKSBjb25zdDsKIyAx
MTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgc2l6ZV90eXBl
IExlZnQoIHNlbGZfdHlwZSYsIHNpemVfdHlwZSApIGNvbnN0OwogICAgICBzaXplX3R5cGUgTWlk
KCBzZWxmX3R5cGUmLCBQUlVpbnQzMiwgUFJVaW50MzIgKSBjb25zdDsKICAgICAgc2l6ZV90eXBl
IFJpZ2h0KCBzZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKCgogICAgICBQUkludDMyIEZp
bmRDaGFyKCBjaGFyX3R5cGUsIGluZGV4X3R5cGUgYU9mZnNldCA9IDAgKSBjb25zdDsKIyAxMjgg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgdmlydHVhbCB2b2lk
IFNldENhcGFjaXR5KCBzaXplX3R5cGUgKSB7IH0KIyAxNDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0FTdHJpbmcuaCIKICAgICAgdmlydHVhbCB2b2lkIFNldExlbmd0aCggc2l6ZV90eXBl
ICkgeyB9CgoKICAgICAgdm9pZAogICAgICBUcnVuY2F0ZSggc2l6ZV90eXBlIGFOZXdMZW5ndGg9
MCApCiAgICAgICAgewogICAgICAgICAgaWYgKCEoYU5ld0xlbmd0aDw9dGhpcy0+TGVuZ3RoKCkp
KSBuc0RlYnVnOjpBc3NlcnRpb24oIkNhbid0IHVzZSB8VHJ1bmNhdGUoKXwgdG8gbWFrZSBhIHN0
cmluZyBsb25nZXIuIiwgImFOZXdMZW5ndGg8PXRoaXMtPkxlbmd0aCgpIiwgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIsIDE0OSk7CgogICAgICAgICAgaWYgKCBhTmV3TGVu
Z3RoIDwgdGhpcy0+TGVuZ3RoKCkgKQogICAgICAgICAgICBTZXRMZW5ndGgoYU5ld0xlbmd0aCk7
CiAgICAgICAgfQojIDE3OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIgog
ICAgICB2b2lkIEFzc2lnbiggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFzc2lnbkZy
b21SZWFkYWJsZShhUmVhZGFibGUpOyB9CiAgICAgIGlubGluZSB2b2lkIEFzc2lnbiggY29uc3Qg
cHJvbWlzZV90eXBlJiBhUmVhZGFibGUgKTsKICAgICAgdm9pZCBBc3NpZ24oIGNvbnN0IGNoYXJf
dHlwZSogYVB0ciApIHsgYVB0ciA/IGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyKGFQdHIpIDogU2V0
TGVuZ3RoKDApOyB9CiAgICAgIHZvaWQgQXNzaWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIsIHNp
emVfdHlwZSBhTGVuZ3RoICkgeyBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0ckxlbmd0aChhUHRyLCBh
TGVuZ3RoKTsgfQogICAgICB2b2lkIEFzc2lnbiggY2hhcl90eXBlIGFDaGFyICkgeyBkb19Bc3Np
Z25Gcm9tRWxlbWVudChhQ2hhcik7IH0KCgogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY29u
c3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRo
aXM7IH0KCiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3I9KCBjb25zdCBwcm9taXNlX3R5cGUmIGFS
ZWFkYWJsZSApIHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxm
X3R5cGUmIG9wZXJhdG9yPSggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBBc3NpZ24oYVB0cik7
IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY2hhcl90eXBlIGFD
aGFyICkgeyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgoKCiAgICAgIHZvaWQg
QXBwZW5kKCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgQXBwZW5kRnJvbVJlYWRhYmxl
KGFSZWFkYWJsZSk7IH0KICAgICAgaW5saW5lIHZvaWQgQXBwZW5kKCBjb25zdCBwcm9taXNlX3R5
cGUmIGFSZWFkYWJsZSApOwogICAgICB2b2lkIEFwcGVuZCggY29uc3QgY2hhcl90eXBlKiBhUHRy
ICkgeyBpZiAoYVB0cikgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHIoYVB0cik7IH0KICAgICAgdm9p
ZCBBcHBlbmQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgc2l6ZV90eXBlIGFMZW5ndGggKSB7IGRv
X0FwcGVuZEZyb21FbGVtZW50UHRyTGVuZ3RoKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAgIHZvaWQg
QXBwZW5kKCBjaGFyX3R5cGUgYUNoYXIgKSB7IGRvX0FwcGVuZEZyb21FbGVtZW50KGFDaGFyKTsg
fQoKICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcis9KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJs
ZSApIHsgQXBwZW5kKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUm
IG9wZXJhdG9yKz0oIGNvbnN0IHByb21pc2VfdHlwZSYgYVJlYWRhYmxlICkgeyBBcHBlbmQoYVJl
YWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3IrPSggY29u
c3QgY2hhcl90eXBlKiBhUHRyICkgeyBBcHBlbmQoYVB0cik7IHJldHVybiAqdGhpczsgfQogICAg
ICBzZWxmX3R5cGUmIG9wZXJhdG9yKz0oIGNoYXJfdHlwZSBhQ2hhciApIHsgQXBwZW5kKGFDaGFy
KTsgcmV0dXJuICp0aGlzOyB9CiMgMjE5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3Ry
aW5nLmgiCiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSwgaW5k
ZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBJbnNlcnRGcm9tUmVhZGFibGUoYVJlYWRhYmxlLCBhdFBv
c2l0aW9uKTsgfQogICAgICBpbmxpbmUgdm9pZCBJbnNlcnQoIGNvbnN0IHByb21pc2VfdHlwZSYg
YVJlYWRhYmxlLCBpbmRleF90eXBlIGF0UG9zaXRpb24gKTsKICAgICAgdm9pZCBJbnNlcnQoIGNv
bnN0IGNoYXJfdHlwZSogYVB0ciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBpZiAoYVB0cikg
ZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHIoYVB0ciwgYXRQb3NpdGlvbik7IH0KICAgICAgdm9pZCBJ
bnNlcnQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uLCBzaXpl
X3R5cGUgYUxlbmd0aCApIHsgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHJMZW5ndGgoYVB0ciwgYXRQ
b3NpdGlvbiwgYUxlbmd0aCk7IH0KICAgICAgdm9pZCBJbnNlcnQoIGNoYXJfdHlwZSBhQ2hhciwg
aW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBkb19JbnNlcnRGcm9tRWxlbWVudChhQ2hhciwgYXRQ
b3NpdGlvbik7IH0KCgoKICAgICAgdmlydHVhbCB2b2lkIEN1dCggaW5kZXhfdHlwZSBjdXRTdGFy
dCwgc2l6ZV90eXBlIGN1dExlbmd0aCApOwoKCgogICAgICB2b2lkIFJlcGxhY2UoIGluZGV4X3R5
cGUgY3V0U3RhcnQsIHNpemVfdHlwZSBjdXRMZW5ndGgsIGNvbnN0IHNlbGZfdHlwZSYgYVJlYWRh
YmxlICkgeyBSZXBsYWNlRnJvbVJlYWRhYmxlKGN1dFN0YXJ0LCBjdXRMZW5ndGgsIGFSZWFkYWJs
ZSk7IH0KCgogICAgcHJpdmF0ZToKCiAgICAgIGluZGV4X3R5cGUgQ291bnRDaGFyKCBpbmNvbXBh
dGlibGVfY2hhcl90eXBlICkgY29uc3Q7CiAgICAgIHZvaWQgb3BlcmF0b3I9ICggaW5jb21wYXRp
YmxlX2NoYXJfdHlwZSApOwogICAgICB2b2lkIEFzc2lnbiAoIGluY29tcGF0aWJsZV9jaGFyX3R5
cGUgKTsKICAgICAgdm9pZCBvcGVyYXRvcis9ICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSApOwog
ICAgICB2b2lkIEFwcGVuZCAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBJ
bnNlcnQgKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlLCBpbmRleF90eXBlICk7CgoKICAgIHByb3Rl
Y3RlZDoKICAgICAgICAgICAgICB2b2lkIEFzc2lnbkZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90
eXBlJiApOwogICAgICAgICAgICAgIHZvaWQgQXNzaWduRnJvbVByb21pc2UoIGNvbnN0IHNlbGZf
dHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21SZWFkYWJsZSggY29uc3Qg
c2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbUVsZW1lbnRQdHIo
IGNvbnN0IGNoYXJfdHlwZSogKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVt
ZW50UHRyTGVuZ3RoKCBjb25zdCBjaGFyX3R5cGUqLCBzaXplX3R5cGUgKTsKICAgICAgdmlydHVh
bCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVtZW50KCBjaGFyX3R5cGUgKTsKCiAgICAgICAgICAgICAg
dm9pZCBBcHBlbmRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgICAgICAg
ICB2b2lkIEFwcGVuZEZyb21Qcm9taXNlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgIHZpcnR1
YWwgdm9pZCBkb19BcHBlbmRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAg
dmlydHVhbCB2b2lkIGRvX0FwcGVuZEZyb21FbGVtZW50UHRyKCBjb25zdCBjaGFyX3R5cGUqICk7
CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tRWxlbWVudFB0ckxlbmd0aCggY29uc3Qg
Y2hhcl90eXBlKiwgc2l6ZV90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9t
RWxlbWVudCggY2hhcl90eXBlICk7CgogICAgICAgICAgICAgIHZvaWQgSW5zZXJ0RnJvbVJlYWRh
YmxlKCBjb25zdCBzZWxmX3R5cGUmLCBpbmRleF90eXBlICk7CiAgICAgICAgICAgICAgdm9pZCBJ
bnNlcnRGcm9tUHJvbWlzZSggY29uc3Qgc2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAgICB2
aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmLCBpbmRl
eF90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19JbnNlcnRGcm9tRWxlbWVudFB0ciggY29u
c3QgY2hhcl90eXBlKiwgaW5kZXhfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0
RnJvbUVsZW1lbnRQdHJMZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIGluZGV4X3R5cGUsIHNpemVf
dHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoIGNoYXJfdHlw
ZSwgaW5kZXhfdHlwZSApOwoKICAgICAgICAgICAgICB2b2lkIFJlcGxhY2VGcm9tUmVhZGFibGUo
IGluZGV4X3R5cGUsIHNpemVfdHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwogICAgICAgICAgICAg
IHZvaWQgUmVwbGFjZUZyb21Qcm9taXNlKCBpbmRleF90eXBlLCBzaXplX3R5cGUsIGNvbnN0IHNl
bGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX1JlcGxhY2VGcm9tUmVhZGFibGUoIGlu
ZGV4X3R5cGUsIHNpemVfdHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwoKCgogICAgcHVibGljOgog
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSogR2V0UmVhZGFibGVGcmFnbWVudCggbnNSZWFk
YWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgPSAw
ICkgY29uc3QgPSAwOwogICAgICB2aXJ0dWFsIGNoYXJfdHlwZSogR2V0V3JpdGFibGVGcmFnbWVu
dCggbnNXcml0YWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJV
aW50MzIgPSAwICkgPSAwOwogICAgICB2aXJ0dWFsIFBSQm9vbCBQcm9taXNlcyggY29uc3Qgc2Vs
Zl90eXBlJiBhU3RyaW5nICkgY29uc3QgeyByZXR1cm4gJmFTdHJpbmcgPT0gdGhpczsgfQogIH07
CgpjbGFzcyBuc0FDU3RyaW5nCiAgICA6IHB1YmxpYyBuc1ByaXZhdGVTaGFyYWJsZUNTdHJpbmcK
ICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgbnNBQ1N0cmluZyBzZWxmX3R5cGU7CiAgICAg
IHR5cGVkZWYgbnNBUHJvbWlzZUNTdHJpbmcgcHJvbWlzZV90eXBlOwogICAgICB0eXBlZGVmIGNo
YXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIFBSVW5pY2hhciBpbmNvbXBhdGlibGVfY2hhcl90
eXBlOwoKCiAgICAgIHR5cGVkZWYgbnNSZWFkaW5nSXRlcmF0b3I8Y2hhcl90eXBlPiBjb25zdF9p
dGVyYXRvcjsKICAgICAgdHlwZWRlZiBuc1dyaXRpbmdJdGVyYXRvcjxjaGFyX3R5cGU+IGl0ZXJh
dG9yOwoKICAgICAgdHlwZWRlZiBQUlVpbnQzMiBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgUFJV
aW50MzIgaW5kZXhfdHlwZTsKCgoKCgoKICAgICAgdmlydHVhbCB+bnNBQ1N0cmluZygpIHsgfQoK
ICAgICAgaW5saW5lIGNvbnN0X2l0ZXJhdG9yJiBCZWdpblJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9y
JiApIGNvbnN0OwogICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3ImIEVuZFJlYWRpbmcoIGNvbnN0
X2l0ZXJhdG9yJiApIGNvbnN0OwoKICAgICAgaW5saW5lIGl0ZXJhdG9yJiBCZWdpbldyaXRpbmco
IGl0ZXJhdG9yJiApOwogICAgICBpbmxpbmUgaXRlcmF0b3ImIEVuZFdyaXRpbmcoIGl0ZXJhdG9y
JiApOwoKICAgICAgdmlydHVhbCBzaXplX3R5cGUgTGVuZ3RoKCkgY29uc3QgPSAwOwogICAgICBQ
UkJvb2wgSXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIExlbmd0aCgpID09IDA7IH0KCiAgICAgIGlu
bGluZSBQUkJvb2wgRXF1YWxzKCBjb25zdCBzZWxmX3R5cGUmICkgY29uc3Q7CiAgICAgIFBSQm9v
bCBFcXVhbHMoIGNvbnN0IGNoYXJfdHlwZSogKSBjb25zdDsKCgoKCgoKCiAgICAgIGNoYXJfdHlw
ZSBGaXJzdCgpIGNvbnN0OwogICAgICBjaGFyX3R5cGUgTGFzdCgpIGNvbnN0OwoKICAgICAgc2l6
ZV90eXBlIENvdW50Q2hhciggY2hhcl90eXBlICkgY29uc3Q7CiMgMzQyICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiCiAgICAgIHNpemVfdHlwZSBMZWZ0KCBzZWxmX3R5cGUm
LCBzaXplX3R5cGUgKSBjb25zdDsKICAgICAgc2l6ZV90eXBlIE1pZCggc2VsZl90eXBlJiwgUFJV
aW50MzIsIFBSVWludDMyICkgY29uc3Q7CiAgICAgIHNpemVfdHlwZSBSaWdodCggc2VsZl90eXBl
Jiwgc2l6ZV90eXBlICkgY29uc3Q7CgoKICAgICAgUFJJbnQzMiBGaW5kQ2hhciggY2hhcl90eXBl
LCBQUlVpbnQzMiBhT2Zmc2V0ID0gMCApIGNvbnN0OwojIDM1OCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zQVN0cmluZy5oIgogICAgICB2aXJ0dWFsIHZvaWQgU2V0Q2FwYWNpdHkoIHNpemVf
dHlwZSApIHsgfQojIDM3MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIgog
ICAgICB2aXJ0dWFsIHZvaWQgU2V0TGVuZ3RoKCBzaXplX3R5cGUgKSB7IH0KCgogICAgICB2b2lk
CiAgICAgIFRydW5jYXRlKCBzaXplX3R5cGUgYU5ld0xlbmd0aD0wICkKICAgICAgICB7CiAgICAg
ICAgICBpZiAoIShhTmV3TGVuZ3RoPD10aGlzLT5MZW5ndGgoKSkpIG5zRGVidWc6OkFzc2VydGlv
bigiQ2FuJ3QgdXNlIHxUcnVuY2F0ZSgpfCB0byBtYWtlIGEgc3RyaW5nIGxvbmdlci4iLCAiYU5l
d0xlbmd0aDw9dGhpcy0+TGVuZ3RoKCkiLCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0
cmluZy5oIiwgMzc5KTsKCiAgICAgICAgICBpZiAoIGFOZXdMZW5ndGggPCB0aGlzLT5MZW5ndGgo
KSApCiAgICAgICAgICAgIFNldExlbmd0aChhTmV3TGVuZ3RoKTsKICAgICAgICB9CiMgNDA4ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiCiAgICAgIHZvaWQgQXNzaWduKCBj
b25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgQXNzaWduRnJvbVJlYWRhYmxlKGFSZWFkYWJs
ZSk7IH0KICAgICAgaW5saW5lIHZvaWQgQXNzaWduKCBjb25zdCBwcm9taXNlX3R5cGUmIGFSZWFk
YWJsZSApOwogICAgICB2b2lkIEFzc2lnbiggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBhUHRy
ID8gZG9fQXNzaWduRnJvbUVsZW1lbnRQdHIoYVB0cikgOiBTZXRMZW5ndGgoMCk7IH0KICAgICAg
dm9pZCBBc3NpZ24oIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgc2l6ZV90eXBlIGFMZW5ndGggKSB7
IGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyTGVuZ3RoKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAgIHZv
aWQgQXNzaWduKCBjaGFyX3R5cGUgYUNoYXIgKSB7IGRvX0Fzc2lnbkZyb21FbGVtZW50KGFDaGFy
KTsgfQoKCiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3I9KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFk
YWJsZSApIHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQoKICAgICAgc2VsZl90
eXBlJiBvcGVyYXRvcj0oIGNvbnN0IHByb21pc2VfdHlwZSYgYVJlYWRhYmxlICkgeyBBc3NpZ24o
YVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3I9KCBj
b25zdCBjaGFyX3R5cGUqIGFQdHIgKSB7IEFzc2lnbihhUHRyKTsgcmV0dXJuICp0aGlzOyB9CiAg
ICAgIHNlbGZfdHlwZSYgb3BlcmF0b3I9KCBjaGFyX3R5cGUgYUNoYXIgKSB7IEFzc2lnbihhQ2hh
cik7IHJldHVybiAqdGhpczsgfQoKCgoKCgoKICAgICAgdm9pZCBBcHBlbmQoIGNvbnN0IHNlbGZf
dHlwZSYgYVJlYWRhYmxlICkgeyBBcHBlbmRGcm9tUmVhZGFibGUoYVJlYWRhYmxlKTsgfQogICAg
ICBpbmxpbmUgdm9pZCBBcHBlbmQoIGNvbnN0IHByb21pc2VfdHlwZSYgYVJlYWRhYmxlICk7CiAg
ICAgIHZvaWQgQXBwZW5kKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKSB7IGlmIChhUHRyKSBkb19B
cHBlbmRGcm9tRWxlbWVudFB0cihhUHRyKTsgfQogICAgICB2b2lkIEFwcGVuZCggY29uc3QgY2hh
cl90eXBlKiBhUHRyLCBzaXplX3R5cGUgYUxlbmd0aCApIHsgZG9fQXBwZW5kRnJvbUVsZW1lbnRQ
dHJMZW5ndGgoYVB0ciwgYUxlbmd0aCk7IH0KICAgICAgdm9pZCBBcHBlbmQoIGNoYXJfdHlwZSBh
Q2hhciApIHsgZG9fQXBwZW5kRnJvbUVsZW1lbnQoYUNoYXIpOyB9CgogICAgICBzZWxmX3R5cGUm
IG9wZXJhdG9yKz0oIGNvbnN0IHNlbGZfdHlwZSYgYVJlYWRhYmxlICkgeyBBcHBlbmQoYVJlYWRh
YmxlKTsgcmV0dXJuICp0aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3IrPSggY29uc3Qg
cHJvbWlzZV90eXBlJiBhUmVhZGFibGUgKSB7IEFwcGVuZChhUmVhZGFibGUpOyByZXR1cm4gKnRo
aXM7IH0KICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcis9KCBjb25zdCBjaGFyX3R5cGUqIGFQdHIg
KSB7IEFwcGVuZChhUHRyKTsgcmV0dXJuICp0aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0
b3IrPSggY2hhcl90eXBlIGFDaGFyICkgeyBBcHBlbmQoYUNoYXIpOyByZXR1cm4gKnRoaXM7IH0K
IyA0NDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgdm9pZCBJ
bnNlcnQoIGNvbnN0IHNlbGZfdHlwZSYgYVJlYWRhYmxlLCBpbmRleF90eXBlIGF0UG9zaXRpb24g
KSB7IEluc2VydEZyb21SZWFkYWJsZShhUmVhZGFibGUsIGF0UG9zaXRpb24pOyB9CiAgICAgIGlu
bGluZSB2b2lkIEluc2VydCggY29uc3QgcHJvbWlzZV90eXBlJiBhUmVhZGFibGUsIGluZGV4X3R5
cGUgYXRQb3NpdGlvbiApOwogICAgICB2b2lkIEluc2VydCggY29uc3QgY2hhcl90eXBlKiBhUHRy
LCBpbmRleF90eXBlIGF0UG9zaXRpb24gKSB7IGlmIChhUHRyKSBkb19JbnNlcnRGcm9tRWxlbWVu
dFB0cihhUHRyLCBhdFBvc2l0aW9uKTsgfQogICAgICB2b2lkIEluc2VydCggY29uc3QgY2hhcl90
eXBlKiBhUHRyLCBpbmRleF90eXBlIGF0UG9zaXRpb24sIHNpemVfdHlwZSBhTGVuZ3RoICkgeyBk
b19JbnNlcnRGcm9tRWxlbWVudFB0ckxlbmd0aChhUHRyLCBhdFBvc2l0aW9uLCBhTGVuZ3RoKTsg
fQogICAgICB2b2lkIEluc2VydCggY2hhcl90eXBlIGFDaGFyLCBpbmRleF90eXBlIGF0UG9zaXRp
b24gKSB7IGRvX0luc2VydEZyb21FbGVtZW50KGFDaGFyLCBhdFBvc2l0aW9uKTsgfQoKCgogICAg
ICB2aXJ0dWFsIHZvaWQgQ3V0KCBpbmRleF90eXBlIGN1dFN0YXJ0LCBzaXplX3R5cGUgY3V0TGVu
Z3RoICk7CgoKCiAgICAgIHZvaWQgUmVwbGFjZSggaW5kZXhfdHlwZSBjdXRTdGFydCwgc2l6ZV90
eXBlIGN1dExlbmd0aCwgY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IFJlcGxhY2VGcm9t
UmVhZGFibGUoY3V0U3RhcnQsIGN1dExlbmd0aCwgYVJlYWRhYmxlKTsgfQoKCiAgICBwcml2YXRl
OgoKICAgICAgaW5kZXhfdHlwZSBDb3VudENoYXIoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKSBj
b25zdDsKICAgICAgdm9pZCBvcGVyYXRvcj0gKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICk7CiAg
ICAgIHZvaWQgQXNzaWduICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSApOwogICAgICB2b2lkIG9w
ZXJhdG9yKz0gKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICk7CiAgICAgIHZvaWQgQXBwZW5kICgg
aW5jb21wYXRpYmxlX2NoYXJfdHlwZSApOwogICAgICB2b2lkIEluc2VydCAoIGluY29tcGF0aWJs
ZV9jaGFyX3R5cGUsIGluZGV4X3R5cGUgKTsKCgogICAgcHJvdGVjdGVkOgogICAgICAgICAgICAg
IHZvaWQgQXNzaWduRnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgICAgICAg
ICAgdm9pZCBBc3NpZ25Gcm9tUHJvbWlzZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICB2aXJ0
dWFsIHZvaWQgZG9fQXNzaWduRnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAg
IHZpcnR1YWwgdm9pZCBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0ciggY29uc3QgY2hhcl90eXBlKiAp
OwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbUVsZW1lbnRQdHJMZW5ndGgoIGNvbnN0
IGNoYXJfdHlwZSosIHNpemVfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJv
bUVsZW1lbnQoIGNoYXJfdHlwZSApOwoKICAgICAgICAgICAgICB2b2lkIEFwcGVuZEZyb21SZWFk
YWJsZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICAgICAgICAgIHZvaWQgQXBwZW5kRnJvbVBy
b21pc2UoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0FwcGVuZEZy
b21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBw
ZW5kRnJvbUVsZW1lbnRQdHIoIGNvbnN0IGNoYXJfdHlwZSogKTsKICAgICAgdmlydHVhbCB2b2lk
IGRvX0FwcGVuZEZyb21FbGVtZW50UHRyTGVuZ3RoKCBjb25zdCBjaGFyX3R5cGUqLCBzaXplX3R5
cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0FwcGVuZEZyb21FbGVtZW50KCBjaGFyX3R5cGUg
KTsKCiAgICAgICAgICAgICAgdm9pZCBJbnNlcnRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlw
ZSYsIGluZGV4X3R5cGUgKTsKICAgICAgICAgICAgICB2b2lkIEluc2VydEZyb21Qcm9taXNlKCBj
b25zdCBzZWxmX3R5cGUmLCBpbmRleF90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19JbnNl
cnRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYsIGluZGV4X3R5cGUgKTsKICAgICAgdmly
dHVhbCB2b2lkIGRvX0luc2VydEZyb21FbGVtZW50UHRyKCBjb25zdCBjaGFyX3R5cGUqLCBpbmRl
eF90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19JbnNlcnRGcm9tRWxlbWVudFB0ckxlbmd0
aCggY29uc3QgY2hhcl90eXBlKiwgaW5kZXhfdHlwZSwgc2l6ZV90eXBlICk7CiAgICAgIHZpcnR1
YWwgdm9pZCBkb19JbnNlcnRGcm9tRWxlbWVudCggY2hhcl90eXBlLCBpbmRleF90eXBlICk7Cgog
ICAgICAgICAgICAgIHZvaWQgUmVwbGFjZUZyb21SZWFkYWJsZSggaW5kZXhfdHlwZSwgc2l6ZV90
eXBlLCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgICAgICAgICAgdm9pZCBSZXBsYWNlRnJvbVBy
b21pc2UoIGluZGV4X3R5cGUsIHNpemVfdHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwogICAgICB2
aXJ0dWFsIHZvaWQgZG9fUmVwbGFjZUZyb21SZWFkYWJsZSggaW5kZXhfdHlwZSwgc2l6ZV90eXBl
LCBjb25zdCBzZWxmX3R5cGUmICk7CgoKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcl90
eXBlPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiA9IDAgKSBjb25zdCA9IDA7CiAgICAg
IHZpcnR1YWwgY2hhcl90eXBlKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21l
bnQ8Y2hhcl90eXBlPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiA9IDAgKSA9IDA7CiAg
ICAgIHZpcnR1YWwgUFJCb29sIFByb21pc2VzKCBjb25zdCBzZWxmX3R5cGUmIGFTdHJpbmcgKSBj
b25zdCB7IHJldHVybiAmYVN0cmluZyA9PSB0aGlzOyB9CiAgfTsKCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQVByb21pc2VTdHJpbmcuaCIgMQojIDM1ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNBUHJvbWlzZVN0cmluZy5oIgpjbGFzcyBuc0FQcm9taXNlU3RyaW5nIDogcHVi
bGljIG5zQVN0cmluZyB7IH07CmNsYXNzIG5zQVByb21pc2VDU3RyaW5nIDogcHVibGljIG5zQUNT
dHJpbmcgeyB9OwojIDUwOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIiAy
CgppbmxpbmUKdm9pZApuc0FTdHJpbmc6OkFzc2lnbiggY29uc3QgbnNBUHJvbWlzZVN0cmluZyYg
YVJlYWRhYmxlICkKICB7CiAgICBBc3NpZ25Gcm9tUHJvbWlzZShhUmVhZGFibGUpOwogIH0KCmlu
bGluZQp2b2lkCm5zQVN0cmluZzo6QXBwZW5kKCBjb25zdCBuc0FQcm9taXNlU3RyaW5nJiBhUmVh
ZGFibGUgKQogIHsKICAgIEFwcGVuZEZyb21Qcm9taXNlKGFSZWFkYWJsZSk7CiAgfQoKaW5saW5l
CnZvaWQKbnNBU3RyaW5nOjpJbnNlcnQoIGNvbnN0IG5zQVByb21pc2VTdHJpbmcmIGFSZWFkYWJs
ZSwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkKICB7CiAgICBJbnNlcnRGcm9tUHJvbWlzZShhUmVh
ZGFibGUsIGF0UG9zaXRpb24pOwogIH0KCmlubGluZQp2b2lkCm5zQUNTdHJpbmc6OkFzc2lnbigg
Y29uc3QgbnNBUHJvbWlzZUNTdHJpbmcmIGFSZWFkYWJsZSApCiAgewogICAgQXNzaWduRnJvbVBy
b21pc2UoYVJlYWRhYmxlKTsKICB9CgppbmxpbmUKdm9pZApuc0FDU3RyaW5nOjpBcHBlbmQoIGNv
bnN0IG5zQVByb21pc2VDU3RyaW5nJiBhUmVhZGFibGUgKQogIHsKICAgIEFwcGVuZEZyb21Qcm9t
aXNlKGFSZWFkYWJsZSk7CiAgfQoKaW5saW5lCnZvaWQKbnNBQ1N0cmluZzo6SW5zZXJ0KCBjb25z
dCBuc0FQcm9taXNlQ1N0cmluZyYgYVJlYWRhYmxlLCBpbmRleF90eXBlIGF0UG9zaXRpb24gKQog
IHsKICAgIEluc2VydEZyb21Qcm9taXNlKGFSZWFkYWJsZSwgYXRQb3NpdGlvbik7CiAgfQoKCgoK
CmlubGluZQpuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJgpuc0FTdHJpbmc6OkJlZ2luUmVhZGlu
ZyggY29uc3RfaXRlcmF0b3ImIGFSZXN1bHQgKSBjb25zdAogIHsKICAgIGFSZXN1bHQubU93bmlu
Z1N0cmluZyA9IHRoaXM7CiAgICBHZXRSZWFkYWJsZUZyYWdtZW50KGFSZXN1bHQubUZyYWdtZW50
LCBrRmlyc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFSZXN1bHQubUZyYWdt
ZW50Lm1TdGFydDsKICAgIGFSZXN1bHQubm9ybWFsaXplX2ZvcndhcmQoKTsKICAgIHJldHVybiBh
UmVzdWx0OwogIH0KCmlubGluZQpuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJgpuc0FTdHJpbmc6
OkVuZFJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBhUmVz
dWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVzdWx0
Lm1GcmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFSZXN1
bHQubUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKaW5saW5lCm5zQVN0
cmluZzo6aXRlcmF0b3ImCm5zQVN0cmluZzo6QmVnaW5Xcml0aW5nKCBpdGVyYXRvciYgYVJlc3Vs
dCApCiAgewogICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhpczsKICAgIEdldFdyaXRhYmxl
RnJhZ21lbnQoYVJlc3VsdC5tRnJhZ21lbnQsIGtGaXJzdEZyYWdtZW50KTsKICAgIGFSZXN1bHQu
bVBvc2l0aW9uID0gYVJlc3VsdC5tRnJhZ21lbnQubVN0YXJ0OwogICAgYVJlc3VsdC5ub3JtYWxp
emVfZm9yd2FyZCgpOwogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKCmlubGluZQpuc0FTdHJpbmc6
Oml0ZXJhdG9yJgpuc0FTdHJpbmc6OkVuZFdyaXRpbmcoIGl0ZXJhdG9yJiBhUmVzdWx0ICkKICB7
CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0V3JpdGFibGVGcmFnbWVu
dChhUmVzdWx0Lm1GcmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlv
biA9IGFSZXN1bHQubUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKY2xh
c3MgbnNTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGludCBv
cGVyYXRvcigpKCBjb25zdCBQUlVuaWNoYXIqLCBjb25zdCBQUlVuaWNoYXIqLCBQUlVpbnQzMiBh
TGVuZ3RoICkgY29uc3QgPSAwOwogIH07CgpjbGFzcyBuc0RlZmF1bHRTdHJpbmdDb21wYXJhdG9y
CiAgICA6IHB1YmxpYyBuc1N0cmluZ0NvbXBhcmF0b3IKICB7CiAgICBwdWJsaWM6CiAgICAgIHZp
cnR1YWwgaW50IG9wZXJhdG9yKCkoIGNvbnN0IFBSVW5pY2hhciosIGNvbnN0IFBSVW5pY2hhcios
IFBSVWludDMyIGFMZW5ndGggKSBjb25zdDsKICB9OwoKY2xhc3MgbnNDYXNlSW5zZW5zaXRpdmVT
dHJpbmdDb21wYXJhdG9yCiAgICA6IHB1YmxpYyBuc1N0cmluZ0NvbXBhcmF0b3IKICB7CiAgICBw
dWJsaWM6CiAgICAgIHZpcnR1YWwgaW50IG9wZXJhdG9yKCkoIGNvbnN0IFBSVW5pY2hhciosIGNv
bnN0IFBSVW5pY2hhciosIFBSVWludDMyIGFMZW5ndGggKSBjb25zdDsKICB9OwoKICAgICAgIGlu
dCBDb21wYXJlKCBjb25zdCBuc0FTdHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMsIGNv
bnN0IG5zU3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRTdHJpbmdDb21wYXJhdG9yKCkgKTsK
CmlubGluZQpQUkJvb2wKbnNBU3RyaW5nOjpFcXVhbHMoIGNvbnN0IHNlbGZfdHlwZSYgcmhzICkg
Y29uc3QKICB7CiAgICByZXR1cm4gTGVuZ3RoKCk9PXJocy5MZW5ndGgoKSAmJiBDb21wYXJlKCp0
aGlzLCByaHMpPT0wOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3IhPSggY29uc3QgbnNBU3Ry
aW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gIWxocy5FcXVh
bHMocmhzKTsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPCAoIGNvbnN0IG5zQVN0cmluZyYg
bGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUobGhzLCBy
aHMpPCAwOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I8PSggY29uc3QgbnNBU3RyaW5nJiBs
aHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShsaHMsIHJo
cyk8PTA7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj09KCBjb25zdCBuc0FTdHJpbmcmIGxo
cywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBsaHMuRXF1YWxzKHJocyk7
CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj49KCBjb25zdCBuc0FTdHJpbmcmIGxocywgY29u
c3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywgcmhzKT49MDsK
ICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPiAoIGNvbnN0IG5zQVN0cmluZyYgbGhzLCBjb25z
dCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUobGhzLCByaHMpPiAwOwog
IH0KCmlubGluZQpuc0FTdHJpbmc6OnNpemVfdHlwZQpuc0FTdHJpbmc6OkxlZnQoIG5zQVN0cmlu
ZyYgYVJlc3VsdCwgc2l6ZV90eXBlIGFMZW5ndGhUb0NvcHkgKSBjb25zdAogIHsKICAgIHJldHVy
biBNaWQoYVJlc3VsdCwgMCwgYUxlbmd0aFRvQ29weSk7CiAgfQoKCgoKCgppbmxpbmUKbnNBQ1N0
cmluZzo6Y29uc3RfaXRlcmF0b3ImCm5zQUNTdHJpbmc6OkJlZ2luUmVhZGluZyggY29uc3RfaXRl
cmF0b3ImIGFSZXN1bHQgKSBjb25zdAogIHsKICAgIGFSZXN1bHQubU93bmluZ1N0cmluZyA9IHRo
aXM7CiAgICBHZXRSZWFkYWJsZUZyYWdtZW50KGFSZXN1bHQubUZyYWdtZW50LCBrRmlyc3RGcmFn
bWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFSZXN1bHQubUZyYWdtZW50Lm1TdGFydDsK
ICAgIGFSZXN1bHQubm9ybWFsaXplX2ZvcndhcmQoKTsKICAgIHJldHVybiBhUmVzdWx0OwogIH0K
CmlubGluZQpuc0FDU3RyaW5nOjpjb25zdF9pdGVyYXRvciYKbnNBQ1N0cmluZzo6RW5kUmVhZGlu
ZyggY29uc3RfaXRlcmF0b3ImIGFSZXN1bHQgKSBjb25zdAogIHsKICAgIGFSZXN1bHQubU93bmlu
Z1N0cmluZyA9IHRoaXM7CiAgICBHZXRSZWFkYWJsZUZyYWdtZW50KGFSZXN1bHQubUZyYWdtZW50
LCBrTGFzdEZyYWdtZW50KTsKICAgIGFSZXN1bHQubVBvc2l0aW9uID0gYVJlc3VsdC5tRnJhZ21l
bnQubUVuZDsKCiAgICByZXR1cm4gYVJlc3VsdDsKICB9CgppbmxpbmUKbnNBQ1N0cmluZzo6aXRl
cmF0b3ImCm5zQUNTdHJpbmc6OkJlZ2luV3JpdGluZyggaXRlcmF0b3ImIGFSZXN1bHQgKQogIHsK
ICAgIGFSZXN1bHQubU93bmluZ1N0cmluZyA9IHRoaXM7CiAgICBHZXRXcml0YWJsZUZyYWdtZW50
KGFSZXN1bHQubUZyYWdtZW50LCBrRmlyc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlv
biA9IGFSZXN1bHQubUZyYWdtZW50Lm1TdGFydDsKICAgIGFSZXN1bHQubm9ybWFsaXplX2Zvcndh
cmQoKTsKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCgppbmxpbmUKbnNBQ1N0cmluZzo6aXRlcmF0
b3ImCm5zQUNTdHJpbmc6OkVuZFdyaXRpbmcoIGl0ZXJhdG9yJiBhUmVzdWx0ICkKICB7CiAgICBh
UmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0V3JpdGFibGVGcmFnbWVudChhUmVz
dWx0Lm1GcmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFS
ZXN1bHQubUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKCmNsYXNzIG5z
Q1N0cmluZ0NvbXBhcmF0b3IKICB7CiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgaW50IG9wZXJh
dG9yKCkoIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgUFJVaW50MzIgYUxlbmd0aCApIGNvbnN0
ID0gMDsKICB9OwoKY2xhc3MgbnNEZWZhdWx0Q1N0cmluZ0NvbXBhcmF0b3IKICAgIDogcHVibGlj
IG5zQ1N0cmluZ0NvbXBhcmF0b3IKICB7CiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgaW50IG9w
ZXJhdG9yKCkoIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgUFJVaW50MzIgYUxlbmd0aCApIGNv
bnN0OwogIH07CgpjbGFzcyBuc0Nhc2VJbnNlbnNpdGl2ZUNTdHJpbmdDb21wYXJhdG9yCiAgICA6
IHB1YmxpYyBuc0NTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgogICAgICB2aXJ0dWFs
IGludCBvcGVyYXRvcigpKCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIFBSVWludDMyIGFMZW5n
dGggKSBjb25zdDsKICB9OwoKICAgICAgIGludCBDb21wYXJlKCBjb25zdCBuc0FDU3RyaW5nJiBs
aHMsIGNvbnN0IG5zQUNTdHJpbmcmIHJocywgY29uc3QgbnNDU3RyaW5nQ29tcGFyYXRvciYgPSBu
c0RlZmF1bHRDU3RyaW5nQ29tcGFyYXRvcigpICk7CgppbmxpbmUKUFJCb29sCm5zQUNTdHJpbmc6
OkVxdWFscyggY29uc3Qgc2VsZl90eXBlJiByaHMgKSBjb25zdAogIHsKICAgIHJldHVybiBMZW5n
dGgoKT09cmhzLkxlbmd0aCgpICYmIENvbXBhcmUoKnRoaXMsIHJocyk9PTA7CiAgfQoKaW5saW5l
ClBSQm9vbApvcGVyYXRvciE9KCBjb25zdCBuc0FDU3RyaW5nJiBsaHMsIGNvbnN0IG5zQUNTdHJp
bmcmIHJocyApCiAgewogICAgcmV0dXJuICFsaHMuRXF1YWxzKHJocyk7CiAgfQoKaW5saW5lClBS
Qm9vbApvcGVyYXRvcjwgKCBjb25zdCBuc0FDU3RyaW5nJiBsaHMsIGNvbnN0IG5zQUNTdHJpbmcm
IHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUobGhzLCByaHMpPCAwOwogIH0KCmlubGluZQpQ
UkJvb2wKb3BlcmF0b3I8PSggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5n
JiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywgcmhzKTw9MDsKICB9CgppbmxpbmUK
UFJCb29sCm9wZXJhdG9yPT0oIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3QgbnNBQ1N0cmlu
ZyYgcmhzICkKICB7CiAgICByZXR1cm4gbGhzLkVxdWFscyhyaHMpOwogIH0KCmlubGluZQpQUkJv
b2wKb3BlcmF0b3I+PSggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiBy
aHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywgcmhzKT49MDsKICB9CgppbmxpbmUKUFJC
b29sCm9wZXJhdG9yPiAoIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3QgbnNBQ1N0cmluZyYg
cmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShsaHMsIHJocyk+IDA7CiAgfQoKaW5saW5lCm5z
QUNTdHJpbmc6OnNpemVfdHlwZQpuc0FDU3RyaW5nOjpMZWZ0KCBuc0FDU3RyaW5nJiBhUmVzdWx0
LCBzaXplX3R5cGUgYUxlbmd0aFRvQ29weSApIGNvbnN0CiAgewogICAgcmV0dXJuIE1pZChhUmVz
dWx0LCAwLCBhTGVuZ3RoVG9Db3B5KTsKICB9CgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zUHJvbWlzZUNvbmNhdGVuYXRpb24uaCIgMQojIDUwICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNQcm9taXNlQ29uY2F0ZW5hdGlvbi5oIgpjbGFzcyBuc1Byb21pc2VDb25jYXRlbmF0
aW9uCiAgICA6IHB1YmxpYyBuc0FQcm9taXNlU3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB0
eXBlZGVmIG5zUHJvbWlzZUNvbmNhdGVuYXRpb24gc2VsZl90eXBlOwogICAgICB0eXBlZGVmIFBS
VW5pY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNBU3RyaW5nIHN0cmluZ190eXBlOwog
ICAgICB0eXBlZGVmIHN0cmluZ190eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsK
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJs
ZUZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYsIG5zRnJhZ21lbnRSZXF1
ZXN0LCBQUlVpbnQzMiApIGNvbnN0OwogICAgICB2aXJ0dWFsIGNoYXJfdHlwZSogR2V0V3JpdGFi
bGVGcmFnbWVudCggbnNXcml0YWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mLCBuc0ZyYWdtZW50UmVx
dWVzdCwgUFJVaW50MzIgKSB7IHJldHVybiAwOyB9CgogICAgICBlbnVtIHsga0xlZnRTdHJpbmcs
IGtSaWdodFN0cmluZyB9OwoKICAgICAgaW50CiAgICAgIEdldEN1cnJlbnRTdHJpbmdGcm9tRnJh
Z21lbnQoIGNvbnN0IG5zUmVhZGFibGVGcmFnbWVudDxjaGFyX3R5cGU+JiBhRnJhZ21lbnQgKSBj
b25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDwgUFJVaW50
MzIgPihhRnJhZ21lbnQubUZyYWdtZW50SWRlbnRpZmllcikgJiBtRnJhZ21lbnRJZGVudGlmaWVy
TWFzaykgPyBrUmlnaHRTdHJpbmcgOiBrTGVmdFN0cmluZzsKICAgICAgICB9CgogICAgICBpbnQK
ICAgICAgU2V0TGVmdFN0cmluZ0luRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxjaGFyX3R5
cGU+JiBhRnJhZ21lbnQgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIGFGcmFnbWVudC5tRnJh
Z21lbnRJZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDwgdm9pZCogPihyZWludGVycHJldF9j
YXN0PCBQUlVpbnQzMiA+KGFGcmFnbWVudC5tRnJhZ21lbnRJZGVudGlmaWVyKSAmIH5tRnJhZ21l
bnRJZGVudGlmaWVyTWFzayk7CiAgICAgICAgICByZXR1cm4ga0xlZnRTdHJpbmc7CiAgICAgICAg
fQoKICAgICAgaW50CiAgICAgIFNldFJpZ2h0U3RyaW5nSW5GcmFnbWVudCggbnNSZWFkYWJsZUZy
YWdtZW50PGNoYXJfdHlwZT4mIGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewogICAgICAgICAg
YUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PCB2b2lkKiA+
KHJlaW50ZXJwcmV0X2Nhc3Q8IFBSVWludDMyID4oYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZp
ZXIpIHwgbUZyYWdtZW50SWRlbnRpZmllck1hc2spOwogICAgICAgICAgcmV0dXJuIGtSaWdodFN0
cmluZzsKICAgICAgICB9CgogICAgcHVibGljOgogICAgICBuc1Byb21pc2VDb25jYXRlbmF0aW9u
KCBjb25zdCBzdHJpbmdfdHlwZSYgYUxlZnRTdHJpbmcsIGNvbnN0IHN0cmluZ190eXBlJiBhUmln
aHRTdHJpbmcsIFBSVWludDMyIGFNYXNrID0gMSApCiAgICAgICAgICA6IG1GcmFnbWVudElkZW50
aWZpZXJNYXNrKGFNYXNrKQogICAgICAgIHsKICAgICAgICAgIG1TdHJpbmdzW2tMZWZ0U3RyaW5n
XSA9ICZhTGVmdFN0cmluZzsKICAgICAgICAgIG1TdHJpbmdzW2tSaWdodFN0cmluZ10gPSAmYVJp
Z2h0U3RyaW5nOwogICAgICAgIH0KCiAgICAgIG5zUHJvbWlzZUNvbmNhdGVuYXRpb24oIGNvbnN0
IHNlbGZfdHlwZSYgYUxlZnRTdHJpbmcsIGNvbnN0IHN0cmluZ190eXBlJiBhUmlnaHRTdHJpbmcg
KQogICAgICAgICAgOiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzayhhTGVmdFN0cmluZy5tRnJhZ21l
bnRJZGVudGlmaWVyTWFzazw8MSkKICAgICAgICB7CiAgICAgICAgICBtU3RyaW5nc1trTGVmdFN0
cmluZ10gPSAmYUxlZnRTdHJpbmc7CiAgICAgICAgICBtU3RyaW5nc1trUmlnaHRTdHJpbmddID0g
JmFSaWdodFN0cmluZzsKICAgICAgICB9CgoKCgogICAgcHJpdmF0ZToKCiAgICAgIHZvaWQgb3Bl
cmF0b3I9KCBjb25zdCBzZWxmX3R5cGUmICk7CgogICAgcHVibGljOgoKICAgICAgdmlydHVhbCBQ
UlVpbnQzMiBMZW5ndGgoKSBjb25zdDsKICAgICAgdmlydHVhbCBQUkJvb2wgUHJvbWlzZXMoIGNv
bnN0IHN0cmluZ190eXBlJiApIGNvbnN0OwoKCgoKICAgICAgUFJVaW50MzIgR2V0RnJhZ21lbnRJ
ZGVudGlmaWVyTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1GcmFnbWVudElkZW50aWZpZXJNYXNrOyB9
CgogICAgcHJpdmF0ZToKICAgICAgdm9pZCBvcGVyYXRvcisoIGNvbnN0IHNlbGZfdHlwZSYgKTsK
CgoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IHN0cmluZ190eXBlKiBtU3RyaW5nc1syXTsKICAg
ICAgUFJVaW50MzIgbUZyYWdtZW50SWRlbnRpZmllck1hc2s7CiAgfTsKCmNsYXNzIG5zUHJvbWlz
ZUNDb25jYXRlbmF0aW9uCiAgICA6IHB1YmxpYyBuc0FQcm9taXNlQ1N0cmluZwogIHsKICAgIHB1
YmxpYzoKICAgICAgdHlwZWRlZiBuc1Byb21pc2VDQ29uY2F0ZW5hdGlvbiBzZWxmX3R5cGU7CiAg
ICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNBQ1N0cmluZyBzdHJp
bmdfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJpbmdfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3Rf
aXRlcmF0b3I7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSog
R2V0UmVhZGFibGVGcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mLCBuc0Zy
YWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSBjb25zdDsKICAgICAgdmlydHVhbCBjaGFyX3R5cGUq
IEdldFdyaXRhYmxlRnJhZ21lbnQoIG5zV3JpdGFibGVGcmFnbWVudDxjaGFyX3R5cGU+JiwgbnNG
cmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgeyByZXR1cm4gMDsgfQoKICAgICAgZW51bSB7IGtM
ZWZ0U3RyaW5nLCBrUmlnaHRTdHJpbmcgfTsKCiAgICAgIGludAogICAgICBHZXRDdXJyZW50U3Ry
aW5nRnJvbUZyYWdtZW50KCBjb25zdCBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYgYUZy
YWdtZW50ICkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nh
c3Q8IFBSVWludDMyID4oYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIpICYgbUZyYWdtZW50
SWRlbnRpZmllck1hc2spID8ga1JpZ2h0U3RyaW5nIDoga0xlZnRTdHJpbmc7CiAgICAgICAgfQoK
ICAgICAgaW50CiAgICAgIFNldExlZnRTdHJpbmdJbkZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21l
bnQ8Y2hhcl90eXBlPiYgYUZyYWdtZW50ICkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBhRnJh
Z21lbnQubUZyYWdtZW50SWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQqID4ocmVp
bnRlcnByZXRfY2FzdDwgUFJVaW50MzIgPihhRnJhZ21lbnQubUZyYWdtZW50SWRlbnRpZmllcikg
JiB+bUZyYWdtZW50SWRlbnRpZmllck1hc2spOwogICAgICAgICAgcmV0dXJuIGtMZWZ0U3RyaW5n
OwogICAgICAgIH0KCiAgICAgIGludAogICAgICBTZXRSaWdodFN0cmluZ0luRnJhZ21lbnQoIG5z
UmVhZGFibGVGcmFnbWVudDxjaGFyX3R5cGU+JiBhRnJhZ21lbnQgKSBjb25zdAogICAgICAgIHsK
ICAgICAgICAgIGFGcmFnbWVudC5tRnJhZ21lbnRJZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2Fz
dDwgdm9pZCogPihyZWludGVycHJldF9jYXN0PCBQUlVpbnQzMiA+KGFGcmFnbWVudC5tRnJhZ21l
bnRJZGVudGlmaWVyKSB8IG1GcmFnbWVudElkZW50aWZpZXJNYXNrKTsKICAgICAgICAgIHJldHVy
biBrUmlnaHRTdHJpbmc7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgbnNQcm9taXNlQ0Nv
bmNhdGVuYXRpb24oIGNvbnN0IHN0cmluZ190eXBlJiBhTGVmdFN0cmluZywgY29uc3Qgc3RyaW5n
X3R5cGUmIGFSaWdodFN0cmluZywgUFJVaW50MzIgYU1hc2sgPSAxICkKICAgICAgICAgIDogbUZy
YWdtZW50SWRlbnRpZmllck1hc2soYU1hc2spCiAgICAgICAgewogICAgICAgICAgbVN0cmluZ3Nb
a0xlZnRTdHJpbmddID0gJmFMZWZ0U3RyaW5nOwogICAgICAgICAgbVN0cmluZ3Nba1JpZ2h0U3Ry
aW5nXSA9ICZhUmlnaHRTdHJpbmc7CiAgICAgICAgfQoKICAgICAgbnNQcm9taXNlQ0NvbmNhdGVu
YXRpb24oIGNvbnN0IHNlbGZfdHlwZSYgYUxlZnRTdHJpbmcsIGNvbnN0IHN0cmluZ190eXBlJiBh
UmlnaHRTdHJpbmcgKQogICAgICAgICAgOiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzayhhTGVmdFN0
cmluZy5tRnJhZ21lbnRJZGVudGlmaWVyTWFzazw8MSkKICAgICAgICB7CiAgICAgICAgICBtU3Ry
aW5nc1trTGVmdFN0cmluZ10gPSAmYUxlZnRTdHJpbmc7CiAgICAgICAgICBtU3RyaW5nc1trUmln
aHRTdHJpbmddID0gJmFSaWdodFN0cmluZzsKICAgICAgICB9CgoKCgogICAgcHJpdmF0ZToKCiAg
ICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBzZWxmX3R5cGUmICk7CgogICAgcHVibGljOgoKICAg
ICAgdmlydHVhbCBQUlVpbnQzMiBMZW5ndGgoKSBjb25zdDsKICAgICAgdmlydHVhbCBQUkJvb2wg
UHJvbWlzZXMoIGNvbnN0IHN0cmluZ190eXBlJiApIGNvbnN0OwoKCgoKICAgICAgUFJVaW50MzIg
R2V0RnJhZ21lbnRJZGVudGlmaWVyTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1GcmFnbWVudElkZW50
aWZpZXJNYXNrOyB9CgogICAgcHJpdmF0ZToKICAgICAgdm9pZCBvcGVyYXRvcisoIGNvbnN0IHNl
bGZfdHlwZSYgKTsKCgoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IHN0cmluZ190eXBlKiBtU3Ry
aW5nc1syXTsKICAgICAgUFJVaW50MzIgbUZyYWdtZW50SWRlbnRpZmllck1hc2s7CiAgfTsKIyAy
MjQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb21pc2VDb25jYXRlbmF0aW9uLmgiCmlu
bGluZQpjb25zdCBuc1Byb21pc2VDb25jYXRlbmF0aW9uCm9wZXJhdG9yKyggY29uc3QgbnNQcm9t
aXNlQ29uY2F0ZW5hdGlvbiYgbGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0
dXJuIG5zUHJvbWlzZUNvbmNhdGVuYXRpb24obGhzLCByaHMsIGxocy5HZXRGcmFnbWVudElkZW50
aWZpZXJNYXNrKCk8PDEpOwogIH0KCmlubGluZQpjb25zdCBuc1Byb21pc2VDQ29uY2F0ZW5hdGlv
bgpvcGVyYXRvcisoIGNvbnN0IG5zUHJvbWlzZUNDb25jYXRlbmF0aW9uJiBsaHMsIGNvbnN0IG5z
QUNTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIG5zUHJvbWlzZUNDb25jYXRlbmF0aW9uKGxo
cywgcmhzLCBsaHMuR2V0RnJhZ21lbnRJZGVudGlmaWVyTWFzaygpPDwxKTsKICB9CgppbmxpbmUK
Y29uc3QgbnNQcm9taXNlQ29uY2F0ZW5hdGlvbgpvcGVyYXRvcisoIGNvbnN0IG5zQVN0cmluZyYg
bGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIG5zUHJvbWlzZUNvbmNh
dGVuYXRpb24obGhzLCByaHMpOwogIH0KCmlubGluZQpjb25zdCBuc1Byb21pc2VDQ29uY2F0ZW5h
dGlvbgpvcGVyYXRvcisoIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3QgbnNBQ1N0cmluZyYg
cmhzICkKICB7CiAgICByZXR1cm4gbnNQcm9taXNlQ0NvbmNhdGVuYXRpb24obGhzLCByaHMpOwog
IH0KIyA4MTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIgMgojIDMxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBUmVhZGFibGVTdHJpbmcuaCIgMgoKCnR5cGVkZWYg
Y29uc3QgbnNBU3RyaW5nIG5zQVJlYWRhYmxlU3RyaW5nOwp0eXBlZGVmIGNvbnN0IG5zQUNTdHJp
bmcgbnNBUmVhZGFibGVDU3RyaW5nOwoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
TGl0ZXJhbFN0cmluZy5oIiAxCiMgMzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0xpdGVy
YWxTdHJpbmcuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNMb2NhbFN0cmluZy5o
IiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0xvY2FsU3RyaW5nLmgiCiMgMSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQUZsYXRTdHJpbmcuaCIgMQojIDMzICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNBRmxhdFN0cmluZy5oIgpjbGFzcyBuc0FGbGF0U3RyaW5nCiAg
ICA6IHB1YmxpYyBuc0FTdHJpbmcKICB7CiAgICBwdWJsaWM6CgogICAgICB2aXJ0dWFsIGNvbnN0
IFBSVW5pY2hhciogZ2V0KCkgY29uc3QgeyByZXR1cm4gR2V0QnVmZmVySGFuZGxlKCktPkRhdGFT
dGFydCgpOyB9CiAgICAgIFBSVW5pY2hhciBvcGVyYXRvcltdKCBQUlVpbnQzMiBpICkgY29uc3Qg
eyByZXR1cm4gZ2V0KClbIGkgXTsgfQogICAgICBQUlVuaWNoYXIgQ2hhckF0KCBQUlVpbnQzMiAp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBQUlVpbnQzMiBMZW5ndGgoKSBjb25zdCB7IHJldHVybiBQ
UlVpbnQzMihHZXRCdWZmZXJIYW5kbGUoKS0+RGF0YUxlbmd0aCgpKTsgfQoKCiAgICBwdWJsaWM6
CiAgICAgIHZpcnR1YWwgY29uc3QgUFJVbmljaGFyKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1Jl
YWRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiAp
IGNvbnN0OwogICAgICB2aXJ0dWFsIFBSVW5pY2hhciogR2V0V3JpdGFibGVGcmFnbWVudCggbnNX
cml0YWJsZUZyYWdtZW50PFBSVW5pY2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIg
KTsKICB9OwoKY2xhc3MgbnNBRmxhdENTdHJpbmcKICAgIDogcHVibGljIG5zQUNTdHJpbmcKICB7
CiAgICBwdWJsaWM6CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGdldCgpIGNvbnN0IHsgcmV0
dXJuIEdldEJ1ZmZlckhhbmRsZSgpLT5EYXRhU3RhcnQoKTsgfQogICAgICBjaGFyIG9wZXJhdG9y
W10oIFBSVWludDMyIGkgKSBjb25zdCB7IHJldHVybiBnZXQoKVsgaSBdOyB9CiAgICAgIGNoYXIg
Q2hhckF0KCBQUlVpbnQzMiApIGNvbnN0OwoKICAgICAgdmlydHVhbCBQUlVpbnQzMiBMZW5ndGgo
KSBjb25zdCB7IHJldHVybiBQUlVpbnQzMihHZXRCdWZmZXJIYW5kbGUoKS0+RGF0YUxlbmd0aCgp
KTsgfQoKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogR2V0UmVhZGFibGVG
cmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBS
VWludDMyICkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY2hhciogR2V0V3JpdGFibGVGcmFnbWVudCgg
bnNXcml0YWJsZUZyYWdtZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICk7
CiAgfTsKCmlubGluZQpQUlVuaWNoYXIKbnNBRmxhdFN0cmluZzo6Q2hhckF0KCBQUlVpbnQzMiBp
ICkgY29uc3QKICB7CiAgICBpZiAoIShpPExlbmd0aCgpKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJ8
Q2hhckF0fCBvdXQtb2YtcmFuZ2UiLCAiaTxMZW5ndGgoKSIsICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNBRmxhdFN0cmluZy5oIiwgNzEpOwogICAgcmV0dXJuIG9wZXJhdG9yW10oaSk7CiAg
fQoKaW5saW5lCmNoYXIKbnNBRmxhdENTdHJpbmc6OkNoYXJBdCggUFJVaW50MzIgaSApIGNvbnN0
CiAgewogICAgaWYgKCEoaTxMZW5ndGgoKSkpIG5zRGVidWc6OkFzc2VydGlvbigifENoYXJBdHwg
b3V0LW9mLXJhbmdlIiwgImk8TGVuZ3RoKCkiLCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
QUZsYXRTdHJpbmcuaCIsIDc5KTsKICAgIHJldHVybiBvcGVyYXRvcltdKGkpOwogIH0KIyAyOSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTG9jYWxTdHJpbmcuaCIgMgojIDQ5ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNMb2NhbFN0cmluZy5oIgpjbGFzcyBuc0xvY2FsU3RyaW5nCiAg
ICAgIDogcHVibGljIG5zQUZsYXRTdHJpbmcKICB7CiAgICBwdWJsaWM6CgogICAgICBleHBsaWNp
dAogICAgICBuc0xvY2FsU3RyaW5nKCBjb25zdCBQUlVuaWNoYXIqIGFMaXRlcmFsICkKICAgICAg
ICAgIDogbUhhbmRsZShjb25zdF9jYXN0PCBQUlVuaWNoYXIqID4oYUxpdGVyYWwpLCBhTGl0ZXJh
bCA/IChjb25zdF9jYXN0PCBQUlVuaWNoYXIqID4oYUxpdGVyYWwpK25zQ2hhclRyYWl0czxQUlVu
aWNoYXI+OjpsZW5ndGgoYUxpdGVyYWwpKSA6IGNvbnN0X2Nhc3Q8IFBSVW5pY2hhciogPihhTGl0
ZXJhbCkpCiAgICAgICAgewoKICAgICAgICB9CgogICAgICBuc0xvY2FsU3RyaW5nKCBjb25zdCBQ
UlVuaWNoYXIqIGFMaXRlcmFsLCBQUlVpbnQzMiBhTGVuZ3RoICkKICAgICAgICAgIDogbUhhbmRs
ZShjb25zdF9jYXN0PCBQUlVuaWNoYXIqID4oYUxpdGVyYWwpLCBjb25zdF9jYXN0PCBQUlVuaWNo
YXIqID4oYUxpdGVyYWwpK2FMZW5ndGgpCiAgICAgICAgewoKCiAgICAgICAgICBpZiAoIGFMZW5n
dGggPT0gUFJVaW50MzIoLTEpICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBtSGFuZGxl
LkRhdGFFbmQoYUxpdGVyYWwgPyAoY29uc3RfY2FzdDwgUFJVbmljaGFyKiA+KGFMaXRlcmFsKStu
c0NoYXJUcmFpdHM8UFJVbmljaGFyPjo6bGVuZ3RoKGFMaXRlcmFsKSkgOiBjb25zdF9jYXN0PCBQ
UlVuaWNoYXIqID4oYUxpdGVyYWwpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCgoKCiAgICAg
IHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8UFJVbmljaGFyPiogR2V0RmxhdEJ1ZmZlckhh
bmRsZSgpIGNvbnN0IHsgcmV0dXJuICZtSGFuZGxlOyB9CiAgICAgIHZpcnR1YWwgY29uc3QgbnNC
dWZmZXJIYW5kbGU8UFJVbmljaGFyPiogR2V0QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1cm4g
Jm1IYW5kbGU7IH0KCiAgICBwcml2YXRlOgogICAgICBuc0J1ZmZlckhhbmRsZTxQUlVuaWNoYXI+
IG1IYW5kbGU7CgogICAgcHJpdmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBuc0xv
Y2FsU3RyaW5nJiApOwogIH07CgoKCmNsYXNzIG5zTG9jYWxDU3RyaW5nCiAgICAgIDogcHVibGlj
IG5zQUZsYXRDU3RyaW5nCiAgewogICAgcHVibGljOgoKICAgICAgZXhwbGljaXQKICAgICAgbnNM
b2NhbENTdHJpbmcoIGNvbnN0IGNoYXIqIGFMaXRlcmFsICkKICAgICAgICAgIDogbUhhbmRsZShj
b25zdF9jYXN0PCBjaGFyKiA+KGFMaXRlcmFsKSwgYUxpdGVyYWwgPyAoY29uc3RfY2FzdDwgY2hh
ciogPihhTGl0ZXJhbCkrbnNDaGFyVHJhaXRzPGNoYXI+OjpsZW5ndGgoYUxpdGVyYWwpKSA6IGNv
bnN0X2Nhc3Q8IGNoYXIqID4oYUxpdGVyYWwpKQogICAgICAgIHsKCiAgICAgICAgfQoKICAgICAg
bnNMb2NhbENTdHJpbmcoIGNvbnN0IGNoYXIqIGFMaXRlcmFsLCBQUlVpbnQzMiBhTGVuZ3RoICkK
ICAgICAgICAgIDogbUhhbmRsZShjb25zdF9jYXN0PCBjaGFyKiA+KGFMaXRlcmFsKSwgY29uc3Rf
Y2FzdDwgY2hhciogPihhTGl0ZXJhbCkrYUxlbmd0aCkKICAgICAgICB7CgoKICAgICAgICAgIGlm
ICggYUxlbmd0aCA9PSBQUlVpbnQzMigtMSkgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAg
IG1IYW5kbGUuRGF0YUVuZChhTGl0ZXJhbCA/IChjb25zdF9jYXN0PCBjaGFyKiA+KGFMaXRlcmFs
KStuc0NoYXJUcmFpdHM8Y2hhcj46Omxlbmd0aChhTGl0ZXJhbCkpIDogY29uc3RfY2FzdDwgY2hh
ciogPihhTGl0ZXJhbCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKCgoKICAgICAgdmlydHVh
bCBjb25zdCBuc0J1ZmZlckhhbmRsZTxjaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0
IHsgcmV0dXJuICZtSGFuZGxlOyB9CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8
Y2hhcj4qIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuICZtSGFuZGxlOyB9CgogICAg
cHJpdmF0ZToKICAgICAgbnNCdWZmZXJIYW5kbGU8Y2hhcj4gbUhhbmRsZTsKCiAgICBwcml2YXRl
OgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0IG5zTG9jYWxDU3RyaW5nJiApOwogIH07CiMg
MzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0xpdGVyYWxTdHJpbmcuaCIgMgoKCnR5cGVk
ZWYgbnNMb2NhbFN0cmluZyBuc0xpdGVyYWxTdHJpbmc7CnR5cGVkZWYgbnNMb2NhbENTdHJpbmcg
bnNMaXRlcmFsQ1N0cmluZzsKIyAzOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQVJlYWRh
YmxlU3RyaW5nLmgiIDIKCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm9taXNl
U3Vic3RyaW5nLmgiIDEKIyA0MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJvbWlzZVN1
YnN0cmluZy5oIgpjbGFzcyBuc1Byb21pc2VTdWJzdHJpbmcKICAgICAgOiBwdWJsaWMgbnNBUHJv
bWlzZVN0cmluZwojIDUxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm9taXNlU3Vic3Ry
aW5nLmgiCiAgewogICAgdHlwZWRlZiBuc0FTdHJpbmcgc3RyaW5nX3R5cGU7CiAgICB0eXBlZGVm
IHN0cmluZ190eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgICBwcm90ZWN0
ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgUFJVbmljaGFyKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBu
c1JlYWRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQz
MiApIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSVW5pY2hhciogR2V0V3JpdGFibGVGcmFnbWVudCgg
bnNXcml0YWJsZUZyYWdtZW50PFBSVW5pY2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50
MzIgKSB7IHJldHVybiAwOyB9CgogICAgcHVibGljOgogICAgICBuc1Byb21pc2VTdWJzdHJpbmco
IGNvbnN0IHN0cmluZ190eXBlJiBhU3RyaW5nLCBQUlVpbnQzMiBhU3RhcnRQb3MsIFBSVWludDMy
IGFMZW5ndGggKQogICAgICAgICAgOiBtU3RyaW5nKGFTdHJpbmcpLAogICAgICAgICAgICBtU3Rh
cnRQb3MoIE5TX01JTihhU3RhcnRQb3MsIGFTdHJpbmcuTGVuZ3RoKCkpICksCiAgICAgICAgICAg
IG1MZW5ndGgoIE5TX01JTihhTGVuZ3RoLCBhU3RyaW5nLkxlbmd0aCgpLW1TdGFydFBvcykgKQog
ICAgICAgIHsKCiAgICAgICAgfQoKICAgICAgbnNQcm9taXNlU3Vic3RyaW5nKCBjb25zdCBjb25z
dF9pdGVyYXRvciYgYVN0YXJ0LCBjb25zdCBjb25zdF9pdGVyYXRvciYgYUVuZCApCiAgICAgICAg
ICA6IG1TdHJpbmcoYVN0YXJ0LnN0cmluZygpKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2l0
ZXJhdG9yIHplcm9Qb2ludDsKICAgICAgICAgIG1TdHJpbmcuQmVnaW5SZWFkaW5nKHplcm9Qb2lu
dCk7CiAgICAgICAgICBtU3RhcnRQb3MgPSBEaXN0YW5jZSh6ZXJvUG9pbnQsIGFTdGFydCk7CiAg
ICAgICAgICBtTGVuZ3RoID0gRGlzdGFuY2UoYVN0YXJ0LCBhRW5kKTsKICAgICAgICB9CgoKCgog
ICAgcHJpdmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBuc1Byb21pc2VTdWJzdHJp
bmcmICk7CgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0
OwogICAgICB2aXJ0dWFsIFBSQm9vbCBQcm9taXNlcyggY29uc3Qgc3RyaW5nX3R5cGUmIGFTdHJp
bmcgKSBjb25zdCB7IHJldHVybiBtU3RyaW5nLlByb21pc2VzKGFTdHJpbmcpOyB9CgogICAgcHJp
dmF0ZToKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIG1TdHJpbmc7CiAgICAgIFBSVWludDMyIG1T
dGFydFBvczsKICAgICAgUFJVaW50MzIgbUxlbmd0aDsKICB9OwoKY2xhc3MgbnNQcm9taXNlQ1N1
YnN0cmluZwogICAgICA6IHB1YmxpYyBuc0FQcm9taXNlQ1N0cmluZwojIDEwNCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zUHJvbWlzZVN1YnN0cmluZy5oIgogIHsKICAgIHR5cGVkZWYgbnNB
Q1N0cmluZyBzdHJpbmdfdHlwZTsKICAgIHR5cGVkZWYgc3RyaW5nX3R5cGU6OmNvbnN0X2l0ZXJh
dG9yIGNvbnN0X2l0ZXJhdG9yOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbCBjb25zdCBj
aGFyKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcj4mLCBuc0Zy
YWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSBjb25zdDsKICAgICAgdmlydHVhbCBjaGFyKiBHZXRX
cml0YWJsZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21lbnQ8Y2hhcj4mLCBuc0ZyYWdtZW50UmVx
dWVzdCwgUFJVaW50MzIgKSB7IHJldHVybiAwOyB9CgogICAgcHVibGljOgogICAgICBuc1Byb21p
c2VDU3Vic3RyaW5nKCBjb25zdCBzdHJpbmdfdHlwZSYgYVN0cmluZywgUFJVaW50MzIgYVN0YXJ0
UG9zLCBQUlVpbnQzMiBhTGVuZ3RoICkKICAgICAgICAgIDogbVN0cmluZyhhU3RyaW5nKSwKICAg
ICAgICAgICAgbVN0YXJ0UG9zKCBOU19NSU4oYVN0YXJ0UG9zLCBhU3RyaW5nLkxlbmd0aCgpKSAp
LAogICAgICAgICAgICBtTGVuZ3RoKCBOU19NSU4oYUxlbmd0aCwgYVN0cmluZy5MZW5ndGgoKS1t
U3RhcnRQb3MpICkKICAgICAgICB7CgogICAgICAgIH0KCiAgICAgIG5zUHJvbWlzZUNTdWJzdHJp
bmcoIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBhU3RhcnQsIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBh
RW5kICkKICAgICAgICAgIDogbVN0cmluZyhhU3RhcnQuc3RyaW5nKCkpCiAgICAgICAgewogICAg
ICAgICAgY29uc3RfaXRlcmF0b3IgemVyb1BvaW50OwogICAgICAgICAgbVN0cmluZy5CZWdpblJl
YWRpbmcoemVyb1BvaW50KTsKICAgICAgICAgIG1TdGFydFBvcyA9IERpc3RhbmNlKHplcm9Qb2lu
dCwgYVN0YXJ0KTsKICAgICAgICAgIG1MZW5ndGggPSBEaXN0YW5jZShhU3RhcnQsIGFFbmQpOwog
ICAgICAgIH0KCgoKCiAgICBwcml2YXRlOgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0IG5z
UHJvbWlzZUNTdWJzdHJpbmcmICk7CgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIFBSVWludDMy
IExlbmd0aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSQm9vbCBQcm9taXNlcyggY29uc3Qgc3Ry
aW5nX3R5cGUmIGFTdHJpbmcgKSBjb25zdCB7IHJldHVybiBtU3RyaW5nLlByb21pc2VzKGFTdHJp
bmcpOyB9CgogICAgcHJpdmF0ZToKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIG1TdHJpbmc7CiAg
ICAgIFBSVWludDMyIG1TdGFydFBvczsKICAgICAgUFJVaW50MzIgbUxlbmd0aDsKICB9OwoKCgoK
CgoKaW5saW5lCmNvbnN0IG5zUHJvbWlzZUNTdWJzdHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc0FD
U3RyaW5nJiBhU3RyaW5nLCBQUlVpbnQzMiBhU3RhcnRQb3MsIFBSVWludDMyIGFTdWJzdHJpbmdM
ZW5ndGggKQogIHsKICAgIHJldHVybiBuc1Byb21pc2VDU3Vic3RyaW5nKGFTdHJpbmcsIGFTdGFy
dFBvcywgYVN1YnN0cmluZ0xlbmd0aCk7CiAgfQoKaW5saW5lCmNvbnN0IG5zUHJvbWlzZVN1YnN0
cmluZwpTdWJzdHJpbmcoIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZywgUFJVaW50MzIgYVN0YXJ0
UG9zLCBQUlVpbnQzMiBhU3Vic3RyaW5nTGVuZ3RoICkKICB7CiAgICByZXR1cm4gbnNQcm9taXNl
U3Vic3RyaW5nKGFTdHJpbmcsIGFTdGFydFBvcywgYVN1YnN0cmluZ0xlbmd0aCk7CiAgfQoKaW5s
aW5lCmNvbnN0IG5zUHJvbWlzZUNTdWJzdHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc1JlYWRpbmdJ
dGVyYXRvcjxjaGFyPiYgYVN0YXJ0LCBjb25zdCBuc1JlYWRpbmdJdGVyYXRvcjxjaGFyPiYgYUVu
ZCApCiAgewogICAgcmV0dXJuIG5zUHJvbWlzZUNTdWJzdHJpbmcoYVN0YXJ0LCBhRW5kKTsKICB9
CgppbmxpbmUKY29uc3QgbnNQcm9taXNlU3Vic3RyaW5nClN1YnN0cmluZyggY29uc3QgbnNSZWFk
aW5nSXRlcmF0b3I8UFJVbmljaGFyPiYgYVN0YXJ0LCBjb25zdCBuc1JlYWRpbmdJdGVyYXRvcjxQ
UlVuaWNoYXI+JiBhRW5kICkKICB7CiAgICByZXR1cm4gbnNQcm9taXNlU3Vic3RyaW5nKGFTdGFy
dCwgYUVuZCk7CiAgfQojIDQyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBUmVhZGFibGVT
dHJpbmcuaCIgMgoKCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb21pc2VGbGF0
U3RyaW5nLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJvbWlzZUZsYXRT
dHJpbmcuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb21tb25TdHJpbmcuaCIg
MQojIDM1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb21tb25TdHJpbmcuaCIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGVVdGlscy5oIiAxCiMgMzYgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1ZmZlckhhbmRsZVV0aWxzLmgiCiMgMSAiL29wdC9n
bnUtbmV3L2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL25ldy5oIiAxIDMKIyAzMyAiL29wdC9nbnUt
bmV3L2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL25ldy5oIiAzCiMgMSAiL29wdC9nbnUtbmV3L2lu
Y2x1ZGUvZysrLXYzL2JhY2t3YXJkL2JhY2t3YXJkX3dhcm5pbmcuaCIgMSAzCiMgMzQgIi9vcHQv
Z251LW5ldy9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9uZXcuaCIgMiAzCiMgMSAiL29wdC9nbnUt
bmV3L2luY2x1ZGUvZysrLXYzL25ldyIgMSAzCiMgMzQgIi9vcHQvZ251LW5ldy9pbmNsdWRlL2cr
Ky12My9uZXciIDMKIyAxICIvb3B0L2dudS1uZXcvaW5jbHVkZS9nKystdjMvY3N0ZGRlZiIgMSAz
CgojIDEgIi9vcHQvZ251LW5ldy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEg
MwojIDQwICIvb3B0L2dudS1uZXcvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAz
CiMgMSAiL29wdC9nbnUtbmV3L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMKIyA0MSAiL29wdC9nbnUtbmV3L2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NzdGRkZWYuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsK
ICB1c2luZyA6OnNpemVfdDsKfQojIDMgIi9vcHQvZ251LW5ldy9pbmNsdWRlL2crKy12My9jc3Rk
ZGVmIiAyIDMKIyAzNSAiL29wdC9nbnUtbmV3L2luY2x1ZGUvZysrLXYzL25ldyIgMiAzCiMgMSAi
L29wdC9nbnUtbmV3L2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMgMzQgIi9vcHQvZ251
LW5ldy9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFj
ZSBzdGQKewogIGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNlcHRpb24oKSB0
aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCiAgY2xhc3MgYmFkX2V4Y2Vw
dGlvbiA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2V4Y2VwdGlvbigp
IHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoK
ICB0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7CiAgdHlwZWRlZiB2b2lkICgq
dW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCiAgdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0
ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKICB2b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmli
dXRlX18gKChfX25vcmV0dXJuX18pKTsKCiAgdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVj
dGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0
dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkg
dGhyb3coKTsKfQoKfQojIDM2ICIvb3B0L2dudS1uZXcvaW5jbHVkZS9nKystdjMvbmV3IiAyIDMK
CmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJs
aWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9CiAg
ICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93X3Qg
eyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKICB0eXBlZGVmIHZvaWQgKCpu
ZXdfaGFuZGxlcikoKTsKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hhbmRsZXIp
Owp9CgoKdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxs
b2MpOwp2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2Fs
bG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9y
IGRlbGV0ZVtdKHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90
LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0
ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3Ig
ZGVsZXRlKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJh
dG9yIGRlbGV0ZVtdKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlu
bGluZSB2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygp
IHsgcmV0dXJuIHBsYWNlOyB9CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVf
dCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KfQojIDM1ICIvb3B0L2du
dS1uZXcvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvbmV3LmgiIDIgMwoKdXNpbmcgc3RkOjpiYWRf
YWxsb2M7CnVzaW5nIHN0ZDo6bm90aHJvd190Owp1c2luZyBzdGQ6Om5vdGhyb3c7CnVzaW5nIHN0
ZDo6bmV3X2hhbmRsZXI7CnVzaW5nIHN0ZDo6c2V0X25ld19oYW5kbGVyOwojIDM3ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGVVdGlscy5oIiAyCgoKCnRlbXBsYXRlIDxj
bGFzcyBDaGFyVD4KY2xhc3MgbnNBdXRvQnVmZmVySGFuZGxlCiAgewogICAgcHVibGljOgogICAg
ICBuc0F1dG9CdWZmZXJIYW5kbGUoKSA6IG1IYW5kbGUoMCkgeyB9CgogICAgICBuc0F1dG9CdWZm
ZXJIYW5kbGUoIGNvbnN0IG5zQXV0b0J1ZmZlckhhbmRsZTxDaGFyVD4mIGFPdGhlciApCiAgICAg
ICAgICA6IG1IYW5kbGUoYU90aGVyLmdldCgpKQogICAgICAgIHsKICAgICAgICAgIGlmICggbUhh
bmRsZSkKICAgICAgICAgICAgbUhhbmRsZS0+QWNxdWlyZVJlZmVyZW5jZSgpOwogICAgICAgIH0K
CiAgICAgIGV4cGxpY2l0CiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZSggY29uc3QgbnNTaGFyZWRC
dWZmZXJIYW5kbGU8Q2hhclQ+KiBhSGFuZGxlICkKICAgICAgICAgIDogbUhhbmRsZSggY29uc3Rf
Y2FzdDwgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiA+KGFIYW5kbGUpICkKICAgICAgICB7
CiAgICAgICAgICBpZiAoIG1IYW5kbGUpCiAgICAgICAgICAgIG1IYW5kbGUtPkFjcXVpcmVSZWZl
cmVuY2UoKTsKICAgICAgICB9CgogICAgIH5uc0F1dG9CdWZmZXJIYW5kbGUoKQogICAgICAgIHsK
ICAgICAgICAgIGlmICggbUhhbmRsZSApCiAgICAgICAgICAgIG1IYW5kbGUtPlJlbGVhc2VSZWZl
cmVuY2UoKTsKICAgICAgICB9CgogICAgICBuc0F1dG9CdWZmZXJIYW5kbGU8Q2hhclQ+JgogICAg
ICBvcGVyYXRvcj0oIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogcmhzICkKICAg
ICAgICB7CiAgICAgICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qIG9sZF9oYW5kbGUg
PSBtSGFuZGxlOwogICAgICAgICAgaWYgKCAobUhhbmRsZSA9IGNvbnN0X2Nhc3Q8IG5zU2hhcmVk
QnVmZmVySGFuZGxlPENoYXJUPiogPihyaHMpKSApCiAgICAgICAgICAgIG1IYW5kbGUtPkFjcXVp
cmVSZWZlcmVuY2UoKTsKICAgICAgICAgIGlmICggb2xkX2hhbmRsZSApCiAgICAgICAgICAgIG9s
ZF9oYW5kbGUtPlJlbGVhc2VSZWZlcmVuY2UoKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAg
ICAgICB9CgogICAgICBuc0F1dG9CdWZmZXJIYW5kbGU8Q2hhclQ+JgogICAgICBvcGVyYXRvcj0o
IGNvbnN0IG5zQXV0b0J1ZmZlckhhbmRsZTxDaGFyVD4mIHJocyApCiAgICAgICAgewogICAgICAg
ICAgcmV0dXJuIG9wZXJhdG9yPShyaHMuZ2V0KCkpOwogICAgICAgIH0KCiAgICAgIG5zU2hhcmVk
QnVmZmVySGFuZGxlPENoYXJUPioKICAgICAgZ2V0KCkgY29uc3QKICAgICAgICB7CiAgICAgICAg
ICByZXR1cm4gbUhhbmRsZTsKICAgICAgICB9CgogICAgICBvcGVyYXRvciBuc1NoYXJlZEJ1ZmZl
ckhhbmRsZTxDaGFyVD4qKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gZ2V0KCk7
CiAgICAgICAgfQoKICAgICAgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KgogICAgICBvcGVy
YXRvci0+KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gZ2V0KCk7CiAgICAgICAg
fQoKICAgIHByaXZhdGU6CiAgICAgIG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogbUhhbmRs
ZTsKICB9OwoKCnRlbXBsYXRlIDxjbGFzcyBIYW5kbGVULCBjbGFzcyBDaGFyVD4KaW5saW5lCnNp
emVfdApOU19BbGlnbmVkSGFuZGxlU2l6ZSggY29uc3QgSGFuZGxlVCosIGNvbnN0IENoYXJUKiAp
CiAgewoKICAgIHJldHVybiAoKHNpemVvZihIYW5kbGVUKSArIHNpemVvZihDaGFyVCkgLSAxKSAv
IHNpemVvZihDaGFyVCkpICogc2l6ZW9mKENoYXJUKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSGFu
ZGxlVCwgY2xhc3MgQ2hhclQ+CmlubGluZQpjb25zdCBDaGFyVCoKTlNfRGF0YUFmdGVySGFuZGxl
KCBjb25zdCBIYW5kbGVUKiBhSGFuZGxlUHRyLCBjb25zdCBDaGFyVCogYUR1bW15Q2hhclRQdHIg
KQogIHsKICAgIHR5cGVkZWYgY29uc3QgQ2hhclQqIENoYXJUX3B0cjsKICAgIHJldHVybiBDaGFy
VF9wdHIoc3RhdGljX2Nhc3Q8IGNvbnN0IHVuc2lnbmVkIGNoYXIqID4oYUhhbmRsZVB0cikgKyBO
U19BbGlnbmVkSGFuZGxlU2l6ZShhSGFuZGxlUHRyLCBhRHVtbXlDaGFyVFB0cikpOwogIH0KCnRl
bXBsYXRlIDxjbGFzcyBIYW5kbGVULCBjbGFzcyBDaGFyVD4KaW5saW5lCkNoYXJUKgpOU19EYXRh
QWZ0ZXJIYW5kbGUoIEhhbmRsZVQqIGFIYW5kbGVQdHIsIGNvbnN0IENoYXJUKiBhRHVtbXlDaGFy
VFB0ciApCiAgewogICAgdHlwZWRlZiBDaGFyVCogQ2hhclRfcHRyOwogICAgcmV0dXJuIENoYXJU
X3B0cihzdGF0aWNfY2FzdDwgdW5zaWduZWQgY2hhciogPihhSGFuZGxlUHRyKSArIE5TX0FsaWdu
ZWRIYW5kbGVTaXplKGFIYW5kbGVQdHIsIGFEdW1teUNoYXJUUHRyKSk7CiAgfQoKdGVtcGxhdGUg
PGNsYXNzIEhhbmRsZVQsIGNsYXNzIFN0cmluZ1Q+CkhhbmRsZVQqCk5TX0FsbG9jYXRlQ29udGln
dW91c0hhbmRsZVdpdGhEYXRhKCBjb25zdCBIYW5kbGVUKiBhRHVtbXlIYW5kbGVQdHIsIGNvbnN0
IFN0cmluZ1QmIGFEYXRhU291cmNlLCBQUlVpbnQzMiBhQWRkaXRpb25hbENhcGFjaXR5ICkKICB7
CiAgICB0eXBlZGVmIHR5cGVuYW1lIFN0cmluZ1Q6OmNoYXJfdHlwZSBjaGFyX3R5cGU7CiAgICB0
eXBlZGVmIGNoYXJfdHlwZSogY2hhcl9wdHI7CgoKICAgIHNpemVfdCBoYW5kbGVfc2l6ZSA9IE5T
X0FsaWduZWRIYW5kbGVTaXplKGFEdW1teUhhbmRsZVB0ciwgY2hhcl9wdHIoMCkpOwoKCiAgICBz
aXplX3QgZGF0YV9sZW5ndGggPSBhRGF0YVNvdXJjZS5MZW5ndGgoKTsKICAgIHNpemVfdCBidWZm
ZXJfbGVuZ3RoID0gZGF0YV9sZW5ndGggKyBhQWRkaXRpb25hbENhcGFjaXR5OwoKCiAgICBzaXpl
X3QgYnVmZmVyX3NpemUgPSBidWZmZXJfbGVuZ3RoICogc2l6ZW9mKGNoYXJfdHlwZSk7CgoKICAg
IEhhbmRsZVQqIHJlc3VsdCA9IDA7CiAgICB2b2lkKiBoYW5kbGVfcHRyID0gOjpvcGVyYXRvciBu
ZXcoaGFuZGxlX3NpemUgKyBidWZmZXJfc2l6ZSk7CgogICAgaWYgKCBoYW5kbGVfcHRyICkKICAg
ICAgewogICAgICAgIGNoYXJfcHRyIGRhdGFfc3RhcnRfcHRyID0gY2hhcl9wdHIoc3RhdGljX2Nh
c3Q8IHVuc2lnbmVkIGNoYXIqID4oaGFuZGxlX3B0cikgKyBoYW5kbGVfc2l6ZSk7CiAgICAgICAg
Y2hhcl9wdHIgZGF0YV9lbmRfcHRyID0gZGF0YV9zdGFydF9wdHIgKyBkYXRhX2xlbmd0aDsKICAg
ICAgICBjaGFyX3B0ciBidWZmZXJfZW5kX3B0ciA9IGRhdGFfc3RhcnRfcHRyICsgYnVmZmVyX2xl
bmd0aDsKCiAgICAgICAgdHlwZW5hbWUgU3RyaW5nVDo6Y29uc3RfaXRlcmF0b3IgZnJvbUJlZ2lu
LCBmcm9tRW5kOwogICAgICAgIGNoYXJfcHRyIHRvQmVnaW4gPSBkYXRhX3N0YXJ0X3B0cjsKICAg
ICAgICBjb3B5X3N0cmluZyhhRGF0YVNvdXJjZS5CZWdpblJlYWRpbmcoZnJvbUJlZ2luKSwgYURh
dGFTb3VyY2UuRW5kUmVhZGluZyhmcm9tRW5kKSwgdG9CZWdpbik7CgoKICAgICAgICBpZiAoIGFB
ZGRpdGlvbmFsQ2FwYWNpdHkgPiAwICkKICAgICAgICAgICp0b0JlZ2luID0gY2hhcl90eXBlKDAp
OwoKICAgICAgICByZXN1bHQgPSBuZXcgKGhhbmRsZV9wdHIpIEhhbmRsZVQoZGF0YV9zdGFydF9w
dHIsIGRhdGFfZW5kX3B0ciwgZGF0YV9zdGFydF9wdHIsIGJ1ZmZlcl9lbmRfcHRyLCAxKTsKICAg
ICAgfQoKICAgIHJldHVybiByZXN1bHQ7CiAgfQojIDM2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNDb21tb25TdHJpbmcuaCIgMgojIDQ0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnND
b21tb25TdHJpbmcuaCIKY2xhc3MgbnNDb21tb25TdHJpbmcKICAgIDogcHVibGljIG5zQUZsYXRT
dHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgbnNDb21tb25TdHJpbmcgc2VsZl90
eXBlOwogICAgICB0eXBlZGVmIFBSVW5pY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNB
U3RyaW5nIHN0cmluZ190eXBlOwoKICAgIHB1YmxpYzoKICAgICAgbnNDb21tb25TdHJpbmcoKSB7
IH0KICAgICAgbnNDb21tb25TdHJpbmcoIGNvbnN0IHNlbGZfdHlwZSYgYU90aGVyICkgOiBtQnVm
ZmVyKGFPdGhlci5tQnVmZmVyKSB7IH0KICAgICAgbnNDb21tb25TdHJpbmcoIGNvbnN0IHN0cmlu
Z190eXBlJiBhUmVhZGFibGUgKSB7IGFzc2lnbihhUmVhZGFibGUpOyB9CgogICAgICBzZWxmX3R5
cGUmCiAgICAgIG9wZXJhdG9yPSggY29uc3Qgc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApCiAgICAg
ICAgewogICAgICAgICAgYXNzaWduKGFSZWFkYWJsZSk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdm9pZCBhc3NpZ24oIGNvbnN0IHN0cmlu
Z190eXBlJiApOwogICAgICB2aXJ0dWFsIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXJf
dHlwZT4qIEdldFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAg
IG5zQXV0b0J1ZmZlckhhbmRsZTxjaGFyX3R5cGU+IG1CdWZmZXI7CiAgfTsKCgpjbGFzcyBuc0Nv
bW1vbkNTdHJpbmcKICAgIDogcHVibGljIG5zQUZsYXRDU3RyaW5nCiAgewogICAgcHVibGljOgog
ICAgICB0eXBlZGVmIG5zQ29tbW9uQ1N0cmluZyBzZWxmX3R5cGU7CiAgICAgIHR5cGVkZWYgY2hh
ciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNBQ1N0cmluZyBzdHJpbmdfdHlwZTsKCiAgICBw
dWJsaWM6CiAgICAgIG5zQ29tbW9uQ1N0cmluZygpIHsgfQogICAgICBuc0NvbW1vbkNTdHJpbmco
IGNvbnN0IHNlbGZfdHlwZSYgYU90aGVyICkgOiBtQnVmZmVyKGFPdGhlci5tQnVmZmVyKSB7IH0K
ICAgICAgbnNDb21tb25DU3RyaW5nKCBjb25zdCBzdHJpbmdfdHlwZSYgYVJlYWRhYmxlICkgeyBh
c3NpZ24oYVJlYWRhYmxlKTsgfQoKICAgICAgc2VsZl90eXBlJgogICAgICBvcGVyYXRvcj0oIGNv
bnN0IHN0cmluZ190eXBlJiBhUmVhZGFibGUgKQogICAgICAgIHsKICAgICAgICAgIGFzc2lnbihh
UmVhZGFibGUpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICBwcm90ZWN0
ZWQ6CiAgICAgIHZvaWQgYXNzaWduKCBjb25zdCBzdHJpbmdfdHlwZSYgKTsKICAgICAgdmlydHVh
bCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxjaGFyX3R5cGU+KiBHZXRTaGFyZWRCdWZmZXJI
YW5kbGUoKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBuc0F1dG9CdWZmZXJIYW5kbGU8Y2hh
cl90eXBlPiBtQnVmZmVyOwogIH07CiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1By
b21pc2VGbGF0U3RyaW5nLmgiIDIKIyA4MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJv
bWlzZUZsYXRTdHJpbmcuaCIKY2xhc3MgbnNQcm9taXNlRmxhdFN0cmluZwogICAgOiBwdWJsaWMg
bnNBRmxhdFN0cmluZwogIHsKICAgIGZyaWVuZCBjb25zdCBuc1Byb21pc2VGbGF0U3RyaW5nIFBy
b21pc2VGbGF0U3RyaW5nKCBjb25zdCBuc0FTdHJpbmcmICk7CgogICAgcHVibGljOgogICAgICBu
c1Byb21pc2VGbGF0U3RyaW5nKCBjb25zdCBuc1Byb21pc2VGbGF0U3RyaW5nJiApOwoKICAgIHBy
b3RlY3RlZDoKICAgICAgbnNQcm9taXNlRmxhdFN0cmluZygpIDogbVByb21pc2VkU3RyaW5nKCZt
RmxhdHRlbmVkU3RyaW5nKSB7IH0KICAgICAgZXhwbGljaXQgbnNQcm9taXNlRmxhdFN0cmluZygg
Y29uc3QgbnNBU3RyaW5nJiBhU3RyaW5nICk7CgoKICAgICAgdmlydHVhbCBjb25zdCBuc0J1ZmZl
ckhhbmRsZTxQUlVuaWNoYXI+KiBHZXRGbGF0QnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgIHZp
cnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8UFJVbmljaGFyPiogR2V0QnVmZmVySGFuZGxlKCkg
Y29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNTaGFyZWRCdWZmZXJIYW5kbGU8UFJVbmljaGFy
PiogR2V0U2hhcmVkQnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJCb29sIFBy
b21pc2VzKCBjb25zdCBuc0FTdHJpbmcmICkgY29uc3Q7CgoKCiAgICBwdWJsaWM6CiAgICAgIHZp
cnR1YWwgY29uc3QgUFJVbmljaGFyKiBnZXQoKSBjb25zdDsKICAgICAgdmlydHVhbCBQUlVpbnQz
MiBMZW5ndGgoKSBjb25zdDsKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbCBjb25zdCBQUlVu
aWNoYXIqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxQUlVuaWNoYXI+
JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CgoKICAgIHByaXZhdGU6Cgog
ICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3QgbnNQcm9taXNlRmxhdFN0cmluZyYgKTsKCiAgICBw
cml2YXRlOgogICAgICBuc0NvbW1vblN0cmluZyBtRmxhdHRlbmVkU3RyaW5nOwogICAgICBjb25z
dCBuc0FGbGF0U3RyaW5nKiBtUHJvbWlzZWRTdHJpbmc7CiAgfTsKCmNsYXNzIG5zUHJvbWlzZUZs
YXRDU3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0Q1N0cmluZwogIHsKICAgIGZyaWVuZCBjb25z
dCBuc1Byb21pc2VGbGF0Q1N0cmluZyBQcm9taXNlRmxhdENTdHJpbmcoIGNvbnN0IG5zQUNTdHJp
bmcmICk7CgogICAgcHVibGljOgogICAgICBuc1Byb21pc2VGbGF0Q1N0cmluZyggY29uc3QgbnNQ
cm9taXNlRmxhdENTdHJpbmcmICk7CgogICAgcHJvdGVjdGVkOgogICAgICBuc1Byb21pc2VGbGF0
Q1N0cmluZygpIDogbVByb21pc2VkU3RyaW5nKCZtRmxhdHRlbmVkU3RyaW5nKSB7IH0KICAgICAg
ZXhwbGljaXQgbnNQcm9taXNlRmxhdENTdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmIGFTdHJpbmcg
KTsKCgogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXI+KiBHZXRGbGF0QnVm
ZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hh
cj4qIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IG5zU2hhcmVk
QnVmZmVySGFuZGxlPGNoYXI+KiBHZXRTaGFyZWRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAg
dmlydHVhbCBQUkJvb2wgUHJvbWlzZXMoIGNvbnN0IG5zQUNTdHJpbmcmICkgY29uc3Q7CgoKCiAg
ICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogZ2V0KCkgY29uc3Q7CiAgICAgIHZp
cnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhciogR2V0UmVhZGFibGVGcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNo
YXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CgoKICAgIHByaXZhdGU6
CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3QgbnNQcm9taXNlRmxhdENTdHJpbmcmICk7Cgog
ICAgcHJpdmF0ZToKICAgICAgbnNDb21tb25DU3RyaW5nIG1GbGF0dGVuZWRTdHJpbmc7CiAgICAg
IGNvbnN0IG5zQUZsYXRDU3RyaW5nKiBtUHJvbWlzZWRTdHJpbmc7CiAgfTsKCgppbmxpbmUKY29u
c3QgbnNQcm9taXNlRmxhdFN0cmluZwpQcm9taXNlRmxhdFN0cmluZyggY29uc3QgbnNBU3RyaW5n
JiBhU3RyaW5nICkKICB7CiAgICByZXR1cm4gbnNQcm9taXNlRmxhdFN0cmluZyhhU3RyaW5nKTsK
ICB9CgppbmxpbmUKY29uc3QgbnNQcm9taXNlRmxhdENTdHJpbmcKUHJvbWlzZUZsYXRDU3RyaW5n
KCBjb25zdCBuc0FDU3RyaW5nJiBhU3RyaW5nICkKICB7CiAgICByZXR1cm4gbnNQcm9taXNlRmxh
dENTdHJpbmcoYVN0cmluZyk7CiAgfQojIDQ2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNB
UmVhZGFibGVTdHJpbmcuaCIgMgojIDMxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNBV3Jp
dGFibGVTdHJpbmcuaCIgMgoKCnR5cGVkZWYgbnNBU3RyaW5nIG5zQVdyaXRhYmxlU3RyaW5nOwp0
eXBlZGVmIG5zQUNTdHJpbmcgbnNBV3JpdGFibGVDU3RyaW5nOwojIDIwICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJQXRvbS5oIiAyCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lBdG9tLmgiCmNsYXNzIG5zSUF0b20gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoK
ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g
ezB4M2QxYjE1YjAsIDB4OTNiNCwgMHgxMWQxLCB7IDB4ODksIDB4NWIsIDB4MDAsIDB4NjAsIDB4
MDgsIDB4OTEsIDB4MWIsIDB4ODEgfX07IHJldHVybiBpaWQ7fQoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBUb1N0cmluZyhuc0FXcml0YWJsZVN0cmluZyAmIGFTdHJpbmcpID0gMDsKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0VW5pY29kZShjb25zdCBQUlVuaWNoYXIgKiphUmVzdWx0KSA9IDA7
CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNpemVPZihuc0lTaXplT2ZIYW5kbGVyICphSGFuZGxl
ciwgUFJVaW50MzIgKl9yZXR2YWwpID0gMDsKCn07CiMgMTE5ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJQXRvbS5oIgpleHRlcm4gbnNJQXRvbSogTlNfTmV3QXRvbShjb25zdCBjaGFyKiBp
c29sYXRpbjEpOwoKCgoKZXh0ZXJuIG5zSUF0b20qIE5TX05ld0F0b20oY29uc3QgUFJVbmljaGFy
KiB1bmljb2RlKTsKCgoKZXh0ZXJuIG5zSUF0b20qIE5TX05ld0F0b20oY29uc3QgbnNBUmVhZGFi
bGVTdHJpbmcmIGFTdHJpbmcpOwoKCgoKZXh0ZXJuIG5zcmVmY250IE5TX0dldE51bWJlck9mQXRv
bXModm9pZCk7CmV4dGVybiB2b2lkIE5TX1B1cmdlQXRvbVRhYmxlKHZvaWQpOwojIDUyICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNTdHIuaCIgMQojIDE5MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry
LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMTkyICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc01lbW9yeS5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc01lbW9y
eS5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW1vcnkuaCIgMQojIDM2ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTWVtb3J5LmgiCmNsYXNzIG5zSU1lbW9yeSA6IHB1
YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE
KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg1OWU3ZTc3YSwgMHgzOGU0LCAweDExZDQs
IHsgMHg4YywgMHhmNSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0
dXJuIGlpZDt9CiMgNTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW1vcnkuaCIKICB2
aXJ0dWFsIHZvaWQgKiBBbGxvYyhzaXplX3Qgc2l6ZSkgPSAwOwojIDY3ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJTWVtb3J5LmgiCiAgdmlydHVhbCB2b2lkICogUmVhbGxvYyh2b2lkICog
cHRyLCBzaXplX3QgbmV3U2l6ZSkgPSAwOwojIDc2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJTWVtb3J5LmgiCiAgdmlydHVhbCB2b2lkIEZyZWUodm9pZCAqIHB0cikgPSAwOwojIDg4ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTWVtb3J5LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBI
ZWFwTWluaW1pemUoUFJCb29sIGltbWVkaWF0ZSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IElzTG93TWVtb3J5KFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyAyNyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zTWVtb3J5LmgiIDIKCgoKCgoKCmNsYXNzIG5zTWVtb3J5CnsKcHVi
bGljOgogICAgc3RhdGljIHZvaWQqIEFsbG9jKHNpemVfdCBzaXplKTsKICAgIHN0YXRpYyB2b2lk
KiBSZWFsbG9jKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpOwogICAgc3RhdGljIHZvaWQgRnJlZSh2
b2lkKiBwdHIpOwogICAgc3RhdGljIG5zcmVzdWx0IEhlYXBNaW5pbWl6ZShQUkJvb2wgYUltbWVk
aWF0ZSk7CiAgICBzdGF0aWMgdm9pZCogQ2xvbmUoY29uc3Qgdm9pZCogcHRyLCBzaXplX3Qgc2l6
ZSk7CiAgICBzdGF0aWMgbnNJTWVtb3J5KiBHZXRHbG9iYWxNZW1vcnlTZXJ2aWNlKCk7Cn07CiMg
MTkzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIgMgojIDEgIi9uZXdsaWIvaW5j
bHVkZS9zdHJpbmcuaCIgMSAzCiMgMTk0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIu
aCIgMgojIDEgIi9uZXdsaWIvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAxOTUgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc1N0ci5oIiAyCiMgMSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3BsaGFzaC5oIiAxCiMgMjQgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wbGhhc2guaCIKIyAxICIvbmV3bGliL2luY2x1ZGUvc3RkaW8u
aCIgMSAzCiMgMjUgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
bGhhc2guaCIgMgojIDEgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wcnR5cGVzLmgiIDEKIyAyNiAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BsaGFzaC5oIiAyCgpleHRlcm4gIkMiIHsKCnR5cGVkZWYgc3RydWN0IFBMSGFzaEVu
dHJ5IFBMSGFzaEVudHJ5Owp0eXBlZGVmIHN0cnVjdCBQTEhhc2hUYWJsZSBQTEhhc2hUYWJsZTsK
dHlwZWRlZiBQUlVpbnQzMiBQTEhhc2hOdW1iZXI7Cgp0eXBlZGVmIFBMSGFzaE51bWJlciAoICpQ
TEhhc2hGdW5jdGlvbikoY29uc3Qgdm9pZCAqa2V5KTsKdHlwZWRlZiBQUkludG4gKCAqUExIYXNo
Q29tcGFyYXRvcikoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQgKnYyKTsKCgoKCnR5cGVkZWYg
UFJJbnRuICggKlBMSGFzaEVudW1lcmF0b3IpKFBMSGFzaEVudHJ5ICpoZSwgUFJJbnRuIGksIHZv
aWQgKmFyZyk7CiMgNTEgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wbGhhc2guaCIKdHlwZWRlZiBzdHJ1Y3QgUExIYXNoQWxsb2NPcHMgewogICAgdm9pZCAqICgg
KmFsbG9jVGFibGUpKHZvaWQgKnBvb2wsIFBSU2l6ZSBzaXplKTsKICAgIHZvaWQgKCAqZnJlZVRh
YmxlKSh2b2lkICpwb29sLCB2b2lkICppdGVtKTsKICAgIFBMSGFzaEVudHJ5ICogKCAqYWxsb2NF
bnRyeSkodm9pZCAqcG9vbCwgY29uc3Qgdm9pZCAqa2V5KTsKICAgIHZvaWQgKCAqZnJlZUVudHJ5
KSh2b2lkICpwb29sLCBQTEhhc2hFbnRyeSAqaGUsIFBSVWludG4gZmxhZyk7Cn0gUExIYXNoQWxs
b2NPcHM7CgoKCgpzdHJ1Y3QgUExIYXNoRW50cnkgewogICAgUExIYXNoRW50cnkgKm5leHQ7CiAg
ICBQTEhhc2hOdW1iZXIga2V5SGFzaDsKICAgIGNvbnN0IHZvaWQgKmtleTsKICAgIHZvaWQgKnZh
bHVlOwp9OwoKc3RydWN0IFBMSGFzaFRhYmxlIHsKICAgIFBMSGFzaEVudHJ5ICoqYnVja2V0czsK
ICAgIFBSVWludDMyIG5lbnRyaWVzOwogICAgUFJVaW50MzIgc2hpZnQ7CiAgICBQTEhhc2hGdW5j
dGlvbiBrZXlIYXNoOwogICAgUExIYXNoQ29tcGFyYXRvciBrZXlDb21wYXJlOwogICAgUExIYXNo
Q29tcGFyYXRvciB2YWx1ZUNvbXBhcmU7CiAgICBjb25zdCBQTEhhc2hBbGxvY09wcyAqYWxsb2NP
cHM7CiAgICB2b2lkICphbGxvY1ByaXY7CgoKCgoKCn07CgoKCgoKZXh0ZXJuIFBMSGFzaFRhYmxl
ICoKUExfTmV3SGFzaFRhYmxlKFBSVWludDMyIG51bUJ1Y2tldHMsIFBMSGFzaEZ1bmN0aW9uIGtl
eUhhc2gsCiAgICAgICAgICAgICAgICBQTEhhc2hDb21wYXJhdG9yIGtleUNvbXBhcmUsIFBMSGFz
aENvbXBhcmF0b3IgdmFsdWVDb21wYXJlLAogICAgICAgICAgICAgICAgY29uc3QgUExIYXNoQWxs
b2NPcHMgKmFsbG9jT3BzLCB2b2lkICphbGxvY1ByaXYpOwoKZXh0ZXJuIHZvaWQKUExfSGFzaFRh
YmxlRGVzdHJveShQTEhhc2hUYWJsZSAqaHQpOwoKCmV4dGVybiBQTEhhc2hFbnRyeSAqClBMX0hh
c2hUYWJsZUFkZChQTEhhc2hUYWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqdmFsdWUp
OwoKZXh0ZXJuIFBSQm9vbApQTF9IYXNoVGFibGVSZW1vdmUoUExIYXNoVGFibGUgKmh0LCBjb25z
dCB2b2lkICprZXkpOwoKZXh0ZXJuIHZvaWQgKgpQTF9IYXNoVGFibGVMb29rdXAoUExIYXNoVGFi
bGUgKmh0LCBjb25zdCB2b2lkICprZXkpOwoKZXh0ZXJuIHZvaWQgKgpQTF9IYXNoVGFibGVMb29r
dXBDb25zdChQTEhhc2hUYWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSk7CgpleHRlcm4gUFJJbnRu
ClBMX0hhc2hUYWJsZUVudW1lcmF0ZUVudHJpZXMoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hFbnVt
ZXJhdG9yIGYsIHZvaWQgKmFyZyk7CgoKZXh0ZXJuIFBMSGFzaE51bWJlcgpQTF9IYXNoU3RyaW5n
KGNvbnN0IHZvaWQgKmtleSk7CgoKZXh0ZXJuIFBSSW50bgpQTF9Db21wYXJlU3RyaW5ncyhjb25z
dCB2b2lkICp2MSwgY29uc3Qgdm9pZCAqdjIpOwoKCmV4dGVybiBQUkludG4KUExfQ29tcGFyZVZh
bHVlcyhjb25zdCB2b2lkICp2MSwgY29uc3Qgdm9pZCAqdjIpOwoKCmV4dGVybiBQTEhhc2hFbnRy
eSAqKgpQTF9IYXNoVGFibGVSYXdMb29rdXAoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hOdW1iZXIg
a2V5SGFzaCwgY29uc3Qgdm9pZCAqa2V5KTsKCmV4dGVybiBQTEhhc2hFbnRyeSAqKgpQTF9IYXNo
VGFibGVSYXdMb29rdXBDb25zdChQTEhhc2hUYWJsZSAqaHQsIFBMSGFzaE51bWJlciBrZXlIYXNo
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICprZXkpOwoKZXh0ZXJuIFBM
SGFzaEVudHJ5ICoKUExfSGFzaFRhYmxlUmF3QWRkKFBMSGFzaFRhYmxlICpodCwgUExIYXNoRW50
cnkgKipoZXAsIFBMSGFzaE51bWJlciBrZXlIYXNoLAogICAgICAgICAgICAgICAgICAgY29uc3Qg
dm9pZCAqa2V5LCB2b2lkICp2YWx1ZSk7CgpleHRlcm4gdm9pZApQTF9IYXNoVGFibGVSYXdSZW1v
dmUoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hFbnRyeSAqKmhlcCwgUExIYXNoRW50cnkgKmhlKTsK
CgpleHRlcm4gUFJJbnRuClBMX0hhc2hUYWJsZUR1bXAoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hF
bnVtZXJhdG9yIGR1bXAsIEZJTEUgKmZwKTsKCn0KIyAxOTYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1N0ci5oIiAyCgoKCmVudW0gZUNoYXJTaXplIHtlT25lQnl0ZT0wLGVUd29CeXRlPTF9
OwoKCgoKCgoKY29uc3QgUFJJbnQzMiBrRGVmYXVsdFN0cmluZ1NpemUgPSA2NDsKY29uc3QgUFJJ
bnQzMiBrTm90Rm91bmQgPSAtMTsKCgoKCmNsYXNzIENCdWZEZXNjcmlwdG9yIHsKcHVibGljOgog
IENCdWZEZXNjcmlwdG9yKGNoYXIqIGFTdHJpbmcsIFBSQm9vbCBhU3RhY2tCYXNlZCxQUlVpbnQz
MiBhQ2FwYWNpdHksUFJJbnQzMiBhTGVuZ3RoPS0xKTsKICBDQnVmRGVzY3JpcHRvcihjb25zdCBj
aGFyKiBhU3RyaW5nLCBQUkJvb2wgYVN0YWNrQmFzZWQsUFJVaW50MzIgYUNhcGFjaXR5LFBSSW50
MzIgYUxlbmd0aD0tMSk7CiAgQ0J1ZkRlc2NyaXB0b3IoUFJVbmljaGFyKiBhU3RyaW5nLCBQUkJv
b2wgYVN0YWNrQmFzZWQsUFJVaW50MzIgYUNhcGFjaXR5LFBSSW50MzIgYUxlbmd0aD0tMSk7CiAg
Q0J1ZkRlc2NyaXB0b3IoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSQm9vbCBhU3RhY2tCYXNl
ZCxQUlVpbnQzMiBhQ2FwYWNpdHksUFJJbnQzMiBhTGVuZ3RoPS0xKTsKCiAgY2hhciogbUJ1ZmZl
cjsKICBlQ2hhclNpemUgbUNoYXJTaXplOwogIFBSVWludDMyIG1DYXBhY2l0eTsKICBQUkludDMy
IG1MZW5ndGg7CiAgUFJCb29sIG1TdGFja0Jhc2VkOwogIFBSQm9vbCBtSXNDb25zdDsKfTsKCgoK
CnN0cnVjdCBuc1N0ciB7CgogIG5zU3RyKCkgewogICAgZG8geyBuc1RyYWNlUmVmY250OjpMb2dD
dG9yKCh2b2lkKil0aGlzLCAibnNTdHIiLCBzaXplb2YoKnRoaXMpKTsgfSB3aGlsZSAoMCk7CiAg
fQoKICB+bnNTdHIoKSB7CiAgICBkbyB7IG5zVHJhY2VSZWZjbnQ6OkxvZ0R0b3IoKHZvaWQqKXRo
aXMsICJuc1N0ciIsIHNpemVvZigqdGhpcykpOyB9IHdoaWxlICgwKTsKICB9CiMgMjQ4ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBJbml0aWFsaXplKG5z
U3RyJiBhRGVzdCxlQ2hhclNpemUgYUNoYXJTaXplKTsKIyAyNTcgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2b2lkIEluaXRpYWxpemUobnNTdHImIGFEZXN0LGNo
YXIqIGFDU3RyaW5nLFBSVWludDMyIGFDYXBhY2l0eSxQUlVpbnQzMiBhTGVuZ3RoLGVDaGFyU2l6
ZSBhQ2hhclNpemUsUFJCb29sIGFPd25zQnVmZmVyKTsKIyAyNjggIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2b2lkIERlc3Ryb3kobnNTdHImIGFEZXN0KTsKIyAy
NzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgogIHN0YXRpYyBQUkJvb2wgRW5z
dXJlQ2FwYWNpdHkobnNTdHImIGFTdHJpbmcsUFJVaW50MzIgYU5ld0xlbmd0aCk7CiAgc3RhdGlj
IFBSQm9vbCBHcm93Q2FwYWNpdHkobnNTdHImIGFTdHJpbmcsUFJVaW50MzIgYU5ld0xlbmd0aCk7
CiMgMjkxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBT
dHJBcHBlbmQobnNTdHImIGFEZXN0LGNvbnN0IG5zU3RyJiBhU291cmNlLFBSVWludDMyIGFuT2Zm
c2V0LFBSSW50MzIgYUNvdW50KTsKIyAzMDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0
ci5oIgogIHN0YXRpYyB2b2lkIFN0ckFzc2lnbihuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFT
b3VyY2UsUFJVaW50MzIgYW5PZmZzZXQsUFJJbnQzMiBhQ291bnQpOwojIDMxNiAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZvaWQgU3RySW5zZXJ0KCBuc1N0ciYg
YURlc3QsUFJVaW50MzIgYURlc3RPZmZzZXQsY29uc3QgbnNTdHImIGFTb3VyY2UsUFJVaW50MzIg
YVNyY09mZnNldCxQUkludDMyIGFDb3VudCk7CiMgMzI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBEZWxldGUobnNTdHImIGFEZXN0LFBSVWludDMyIGFE
ZXN0T2Zmc2V0LFBSVWludDMyIGFDb3VudCk7CiMgMzQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBTdHJUcnVuY2F0ZShuc1N0ciYgYURlc3QsUFJVaW50
MzIgYURlc3RPZmZzZXQpOwojIDM1MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgi
CiAgc3RhdGljIHZvaWQgQ2hhbmdlQ2FzZShuc1N0ciYgYURlc3QsUFJCb29sIGFUb1VwcGVyKTsK
IyAzNjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2b2lkIFRy
aW0obnNTdHImIGFEZXN0LGNvbnN0IGNoYXIqIGFTZXQsUFJCb29sIGFFbGltaW5hdGVMZWFkaW5n
LFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmcpOwojIDM3NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zU3RyLmgiCiAgc3RhdGljIHZvaWQgQ29tcHJlc3NTZXQobnNTdHImIGFEZXN0LGNvbnN0
IGNoYXIqIGFTZXQsUFJCb29sIGFFbGltaW5hdGVMZWFkaW5nLFBSQm9vbCBhRWxpbWluYXRlVHJh
aWxpbmcpOwojIDM4NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGlj
IHZvaWQgU3RyaXBDaGFycyhuc1N0ciYgYURlc3QsY29uc3QgY2hhciogYVNldCk7CiMgMzk4ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgUFJJbnQzMiBTdHJDb21w
YXJlKGNvbnN0IG5zU3RyJiBhRGVzdCxjb25zdCBuc1N0ciYgYVNvdXJjZSxQUkludDMyIGFDb3Vu
dCxQUkJvb2wgYUlnbm9yZUNhc2UpOwojIDQxMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
U3RyLmgiCiAgc3RhdGljIFBSSW50MzIgRmluZFN1YnN0cihjb25zdCBuc1N0ciYgYURlc3QsY29u
c3QgbnNTdHImIGFTb3VyY2UsIFBSQm9vbCBhSWdub3JlQ2FzZSxQUkludDMyIGFuT2Zmc2V0LFBS
SW50MzIgYUNvdW50KTsKICBzdGF0aWMgUFJJbnQzMiBGaW5kQ2hhcihjb25zdCBuc1N0ciYgYURl
c3QsUFJVbmljaGFyIGFDaGFyLCBQUkJvb2wgYUlnbm9yZUNhc2UsUFJJbnQzMiBhbk9mZnNldCxQ
UkludDMyIGFDb3VudCk7CiAgc3RhdGljIFBSSW50MzIgRmluZENoYXJJblNldChjb25zdCBuc1N0
ciYgYURlc3QsY29uc3QgbnNTdHImIGFTZXQsUFJCb29sIGFJZ25vcmVDYXNlLFBSSW50MzIgYW5P
ZmZzZXQpOwoKICBzdGF0aWMgUFJJbnQzMiBSRmluZFN1YnN0cihjb25zdCBuc1N0ciYgYURlc3Qs
Y29uc3QgbnNTdHImIGFTb3VyY2UsIFBSQm9vbCBhSWdub3JlQ2FzZSxQUkludDMyIGFuT2Zmc2V0
LFBSSW50MzIgYUNvdW50KTsKICBzdGF0aWMgUFJJbnQzMiBSRmluZENoYXIoY29uc3QgbnNTdHIm
IGFEZXN0LFBSVW5pY2hhciBhQ2hhciwgUFJCb29sIGFJZ25vcmVDYXNlLFBSSW50MzIgYW5PZmZz
ZXQsUFJJbnQzMiBhQ291bnQpOwogIHN0YXRpYyBQUkludDMyIFJGaW5kQ2hhckluU2V0KGNvbnN0
IG5zU3RyJiBhRGVzdCxjb25zdCBuc1N0ciYgYVNldCxQUkJvb2wgYUlnbm9yZUNhc2UsUFJJbnQz
MiBhbk9mZnNldCk7CgogIHN0YXRpYyB2b2lkIE92ZXJ3cml0ZShuc1N0ciYgYURlc3QsY29uc3Qg
bnNTdHImIGFTb3VyY2UsUFJJbnQzMiBhbk9mZnNldCk7CgogIHN0YXRpYyBQUkJvb2wgRGlkQWNx
dWlyZU1lbW9yeSh2b2lkKTsKCgoKCiAgc3RhdGljIFBSVWludDMyIEhhc2hDb2RlKGNvbnN0IG5z
U3RyJiBhRGVzdCk7CiMgNDM2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBQ
UlVpbnQzMiBtTGVuZ3RoOwogIFBSVWludDMyIG1DYXBhY2l0eTsKICBlQ2hhclNpemUgbUNoYXJT
aXplOwogIFBSQm9vbCBtT3duc0J1ZmZlcjsKCiAgdW5pb24gewogICAgY2hhciogbVN0cjsKICAg
IFBSVW5pY2hhciogbVVTdHI7CiAgfTsKCnByaXZhdGU6CiAgc3RhdGljIFBSQm9vbCBBbGxvYyhu
c1N0ciYgYVN0cmluZyxQUlVpbnQzMiBhQ291bnQpOwogIHN0YXRpYyBQUkJvb2wgUmVhbGxvYyhu
c1N0ciYgYVN0cmluZyxQUlVpbnQzMiBhQ291bnQpOwogIHN0YXRpYyBQUkJvb2wgRnJlZShuc1N0
ciYgYVN0cmluZyk7Cgp9OwojIDQ2MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgi
CmlubGluZSBQUkludDMyIE1pbkludChQUkludDMyIGFuSW50MSxQUkludDMyIGFuSW50Mil7CiAg
cmV0dXJuIChhbkludDE8YW5JbnQyKSA/IGFuSW50MSA6IGFuSW50MjsKfQoKaW5saW5lIFBSSW50
MzIgTWF4SW50KFBSSW50MzIgYW5JbnQxLFBSSW50MzIgYW5JbnQyKXsKICByZXR1cm4gKGFuSW50
MTxhbkludDIpID8gYW5JbnQyIDogYW5JbnQxOwp9CgppbmxpbmUgdm9pZCBBZGROdWxsVGVybWlu
YXRvcihuc1N0ciYgYURlc3QpIHsKICBpZihlVHdvQnl0ZT09YURlc3QubUNoYXJTaXplKQogICAg
YURlc3QubVVTdHJbYURlc3QubUxlbmd0aF09MDsKICBlbHNlIGFEZXN0Lm1TdHJbYURlc3QubUxl
bmd0aF09MDsKfQoKCgoKCgoKaW5saW5lIHZvaWQgUmVjeWNsZSggY2hhciogYUJ1ZmZlcikgeyBu
c01lbW9yeTo6RnJlZShhQnVmZmVyKTsgfQppbmxpbmUgdm9pZCBSZWN5Y2xlKCBQUlVuaWNoYXIq
IGFCdWZmZXIpIHsgbnNNZW1vcnk6OkZyZWUoYUJ1ZmZlcik7IH0KIyA0OTEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgppbmxpbmUgUFJVbmljaGFyIEdldENoYXJBdChjb25zdCBu
c1N0ciYgYURlc3QsUFJVaW50MzIgYW5JbmRleCkgewogIGlmKGFuSW5kZXg8YURlc3QubUxlbmd0
aCkgewogICAgcmV0dXJuIChlVHdvQnl0ZT09YURlc3QubUNoYXJTaXplKSA/IGFEZXN0Lm1VU3Ry
W2FuSW5kZXhdIDogKFBSVW5pY2hhcilhRGVzdC5tU3RyW2FuSW5kZXhdOwogIH0KICByZXR1cm4g
MDsKfQojIDUzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNDUlQuaCIKIyAxICIvbmV3bGliL2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDI1
ICIvbmV3bGliL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvbmV3bGliL2luY2x1ZGUvZmVhdHVy
ZXMuaCIgMSAzCiMgMjYgIi9uZXdsaWIvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCgojIDEg
Ii9vcHQvZ251LW5ldy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9z
dGRkZWYuaCIgMSAzCiMgMzQgIi9uZXdsaWIvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4g
IkMiIHsKCgoKCgoKIyAxICIvbmV3bGliL2luY2x1ZGUvYml0cy93YWl0ZmxhZ3MuaCIgMSAzCiMg
NDMgIi9uZXdsaWIvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgMSAiL25ld2xpYi9pbmNsdWRlL2Jp
dHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2MyAiL25ld2xpYi9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1
cy5oIiAzCiMgMSAiL25ld2xpYi9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyA2NCAiL25ld2xpYi9p
bmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAyIDMKCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19z
dGF0dXM7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1z
aWc6NzsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWdu
ZWQgaW50IF9fd19yZXRjb2RlOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAg
ICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2ln
bmVkIGludCBfX3dfc3RvcHZhbDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4
OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsK
ICB9OwojIDQ0ICIvbmV3bGliL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDk0ICIvbmV3bGliL2lu
Y2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGlu
dCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90
OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRl
ZiBzdHJ1Y3QKICB7CiAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJl
bTsKICB9IGxsZGl2X3Q7CiMgMTMzICIvbmV3bGliL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu
IHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGRvdWJsZSBhdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9s
IChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3Qg
Y2hhciAqX19ucHRyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CgpleHRlcm4gZG91YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGZsb2F0IHN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93
ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBs
b25nIGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl
KSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
c3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh
c2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu
dCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19iYXNlKQogICAgIHRocm93ICgpOwojIDIxMSAiL25ld2xpYi9pbmNsdWRlL3N0ZGxpYi5o
IiAzCiMgMSAiL25ld2xpYi9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjEyICIvbmV3bGliL2lu
Y2x1ZGUvc3RkbGliLmgiIDIgMwoKCgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9u
ZyBpbnQgX19zdHJ0b3VsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19s
b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcg
aW50IF9fc3RydG9sbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9f
bG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBp
bnQgX19zdHJ0b3VsbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIF9f
c3RydG9kX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2Mp
CiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRv
dWJsZSBfX3N0cnRvbGRfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxv
YXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xk
X2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgp
OwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcg
aW50IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18K
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRl
bnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFs
IChfX2NvbnN0IGNoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2Us
IGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwojIDI5NCAiL25ld2xpYi9pbmNsdWRlL3N0ZGxp
Yi5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJl
dHVybiBfX3N0cnRvZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9f
aW5saW5lIGxvbmcgaW50CnN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkK
ewogIHJldHVybiBfX3N0cnRvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAw
KTsKfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg
ICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChf
X25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0CnN0
cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2ZfaW50ZXJuYWwgKF9fbnB0ciwg
X19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZQpzdHJ0b2xkIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikg
dGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs
IDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3Ry
dG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9s
bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9f
IGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdXEgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwg
KF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBleHRlcm4g
X19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkg
dGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs
IF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9u
ZyBsb25nIGludApzdHJ0b3VsbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkK
ewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us
IDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0
cikgdGhyb3cgKCkKewogIHJldHVybiBzdHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCk7
Cn0KZXh0ZXJuIF9faW5saW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cg
KCkKewogIHJldHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTAp
Owp9CmV4dGVybiBfX2lubGluZSBsb25nIGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg
dGhyb3cgKCkKewogIHJldHVybiBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTAp
Owp9CgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAo
X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sbCAoX19ucHRy
LCAoY2hhciAqKikgX19udWxsLCAxMCk7Cn0KIyAzODUgIi9uZXdsaWIvaW5jbHVkZS9zdGRsaWIu
aCIgMwpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4g
bG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCiMgMSAiL25ld2xpYi9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAz
OTIgIi9uZXdsaWIvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCmV4dGVybiBsb25nIGludCBy
YW5kb20gKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGlu
dCBfX3NlZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVk
IGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFy
ICpfX3N0YXRlYnVmKSB0aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAg
IGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAg
ICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAg
aW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRv
bV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpf
X3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNp
Z25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJp
Y3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4s
CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBf
X2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3Qg
X19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9f
cmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhy
b3cgKCk7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoK
CgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91Ymxl
IGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRl
cm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFu
ZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv
bmcgaW50IG1yYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAo
dW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNy
YW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9y
dCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7
CmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJv
dyAoKTsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50
IF9feFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQg
c2hvcnQgaW50IF9fYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgaW50IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3Qg
ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg
ZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4
X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwK
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i
dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3Vs
dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19y
ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25n
IGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4
X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAg
ICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19z
ZWVkMTZ2WzNdLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1
ZmZlcikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50
IF9fcGFyYW1bN10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X2J1ZmZlcikgdGhyb3cgKCk7CiMgNTI4ICIvbmV3bGliL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0
ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXpl
X3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoK
CgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9p
ZCAqX19wdHIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRo
cm93ICgpOwoKCgojIDEgIi9uZXdsaWIvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMjIgIi9uZXds
aWIvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi9uZXdsaWIvaW5jbHVkZS9mZWF0dXJlcy5oIiAx
IDMKIyAyMyAiL25ld2xpYi9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCgojIDEgIi9vcHQvZ251LW5l
dy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
CiMgMjYgIi9uZXdsaWIvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpl
eHRlcm4gdm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTQ4
ICIvbmV3bGliL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAo
c2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoK
CmV4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxp
Z25tZW50LCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21h
bGxvY19fKSk7CgoKCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5j
KSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5j
KSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgp
OwoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1
cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGNo
YXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hh
ciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwg
aW50IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2Nv
bnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZv
aWQpIHRocm93ICgpOwojIDYyNCAiL25ld2xpYi9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBj
aGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGlu
dCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2NDEgIi9uZXdsaWIvaW5j
bHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkg
dGhyb3cgKCk7CiMgNjUxICIvbmV3bGliL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIg
Km1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXN0
ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIg
KmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsK
IyA2NzMgIi9uZXdsaWIvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGgg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAoKTsKCgoKCgoKdHlwZWRlZiBpbnQg
KCpfX2NvbXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgp0eXBl
ZGVmIF9fY29tcGFyX2ZuX3QgY29tcGFyaXNvbl9mbl90OwoKCgoKCmV4dGVybiB2b2lkICpic2Vh
cmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90
IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9f
bm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9f
Y29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4g
bG9uZyBsb25nIGludCBsbGFicyAobG9uZyBsb25nIGludCBfX3gpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19u
dW1lciwgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVu
b20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNp
b25fXyBleHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgaW50IF9fZGVub20pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDcyOSAiL25ld2xpYi9pbmNs
dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9f
bmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAq
X19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJs
ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAg
ICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g
Y2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQg
X19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGlu
dCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcg
ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9f
cmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVy
biBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpf
X2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGlu
dCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBp
bnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAg
ICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJs
ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAg
ICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1
ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRlcm4gaW50
IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAg
ICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwK
ICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4p
IHRocm93ICgpOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBf
X25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50
ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0
IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChf
X2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtYnRv
d2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRlcm4g
c2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywg
c2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19j
b25zdCBjaGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA4MDkgIi9uZXdsaWIvaW5jbHVkZS9z
dGRsaWIuaCIgMwpleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRp
b25wLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rv
a2VucywKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRo
cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJv
dyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq
cHRzbmFtZSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAo
aW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgZ2V0cHQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcg
KGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyAyNiAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ1JULmgiIDIKIyAxICIvbmV3bGliL2luY2x1ZGUv
c3RyaW5nLmgiIDEgMwojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMgoj
IDEgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIiAx
CiMgNDIgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5o
IgojIDEgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVz
LmgiIDEKIyA0MyAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bs
c3RyLmgiIDIKCmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gUFJVaW50MzIKUExfc3RybGVuKGNv
bnN0IGNoYXIgKnN0cik7CiMgNjIgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gUFJVaW50MzIKUExfc3Rybmxlbihjb25zdCBjaGFyICpz
dHIsIFBSVWludDMyIG1heCk7CiMgNzMgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNweShjaGFyICpkZXN0LCBj
b25zdCBjaGFyICpzcmMpOwojIDg2ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuY3B5KGNoYXIgKmRlc3QsIGNv
bnN0IGNoYXIgKnNyYywgUFJVaW50MzIgbWF4KTsKIyAxMDkgIi9HTS9oZGQ5L21vemlsbGEvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cm5jcHl6
KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgUFJVaW50MzIgbWF4KTsKIyAxMjMgIi9HTS9o
ZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hh
ciAqClBMX3N0cmR1cChjb25zdCBjaGFyICpzKTsKCgoKCgoKCmV4dGVybiB2b2lkClBMX3N0cmZy
ZWUoY2hhciAqcyk7CiMgMTQ3ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuZHVwKGNvbnN0IGNoYXIgKnMsIFBS
VWludDMyIG1heCk7CiMgMTU5ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJjYXQoY2hhciAqZHN0LCBjb25zdCBj
aGFyICpzcmMpOwojIDE3NCAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNhdChjaGFyICpkc3QsIGNvbnN0IGNo
YXIgKnNyYywgUFJVaW50MzIgbWF4KTsKIyAxODggIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNhdG4oY2hhciAq
ZHN0LCBQUlVpbnQzMiBtYXgsIGNvbnN0IGNoYXIgKnNyYyk7CiMgMjAwICIvR00vaGRkOS9tb3pp
bGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9z
dHJjbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYik7CiMgMjE0ICIvR00vaGRkOS9tb3pp
bGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9z
dHJuY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIFBSVWludDMyIG1heCk7CiMgMjI2
ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0
ZXJuIFBSSW50bgpQTF9zdHJjYXNlY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpOwoj
IDIzOCAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgi
CmV4dGVybiBQUkludG4KUExfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAq
YiwgUFJVaW50MzIgbWF4KTsKIyAyNDkgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNocihjb25zdCBjaGFyICpz
LCBjaGFyIGMpOwojIDI2MCAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RycmNocihjb25zdCBjaGFyICpzLCBjaGFy
IGMpOwojIDI3MiAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bs
c3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNocihjb25zdCBjaGFyICpzLCBjaGFyIGMsIFBS
VWludDMyIG4pOwojIDI4NCAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybnJjaHIoY29uc3QgY2hhciAqcywgY2hh
ciBjLCBQUlVpbnQzMiBuKTsKIyAzMDAgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cnBicmsoY29uc3QgY2hhciAq
cywgY29uc3QgY2hhciAqbGlzdCk7CiMgMzExICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJwcmJyayhjb25zdCBj
aGFyICpzLCBjb25zdCBjaGFyICpsaXN0KTsKIyAzMjIgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cm5wYnJrKGNv
bnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxpc3QsIFBSVWludDMyIG4pOwojIDMzMyAiL0dNL2hk
ZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFy
ICoKUExfc3RybnByYnJrKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxpc3QsIFBSVWludDMy
IG4pOwojIDM0MyAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bs
c3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3Ryc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3QgY2hh
ciAqbGl0dGxlKTsKIyAzNTMgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cnJzdHIoY29uc3QgY2hhciAqYmlnLCBj
b25zdCBjaGFyICpsaXR0bGUpOwojIDM2NCAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybnN0cihjb25zdCBjaGFy
ICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRsZSwgUFJVaW50MzIgbik7CiMgMzc1ICIvR00vaGRkOS9t
b3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQ
TF9zdHJucnN0cihjb25zdCBjaGFyICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRsZSwgUFJVaW50MzIg
bWF4KTsKIyAzODUgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
bHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNhc2VzdHIoY29uc3QgY2hhciAqYmlnLCBjb25z
dCBjaGFyICpsaXR0bGUpOwojIDM5NSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RyY2FzZXJzdHIoY29uc3QgY2hh
ciAqYmlnLCBjb25zdCBjaGFyICpsaXR0bGUpOwojIDQwNiAiL0dNL2hkZDkvbW96aWxsYS9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNhc2Vz
dHIoY29uc3QgY2hhciAqYmlnLCBjb25zdCBjaGFyICpsaXR0bGUsIFBSVWludDMyIG1heCk7CiMg
NDE3ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIK
ZXh0ZXJuIGNoYXIgKgpQTF9zdHJuY2FzZXJzdHIoY29uc3QgY2hhciAqYmlnLCBjb25zdCBjaGFy
ICpsaXR0bGUsIFBSVWludDMyIG1heCk7CgoKCgoKCgp9CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0NSVC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5o
IiAxCiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIiAyCiMgMSAiL0dNL2hk
ZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDMwICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0NwcFNoYXJlZEFsbG9jYXRvci5oIiAxCgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zTWVtb3J5LmgiIDEKIyA1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnND
cHBTaGFyZWRBbGxvY2F0b3IuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2Nv
cmUuaCIgMQojIDYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NwcFNoYXJlZEFsbG9jYXRv
ci5oIiAyCiMgMSAiL29wdC9nbnUtbmV3L2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL25ldy5oIiAx
IDMKIyA3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDcHBTaGFyZWRBbGxvY2F0b3IuaCIg
MgojIDIzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDcHBTaGFyZWRBbGxvY2F0b3IuaCIK
IyAxICIvbmV3bGliL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDI2ICIvbmV3bGliL2luY2x1ZGUv
bGltaXRzLmgiIDMKIyAxICIvbmV3bGliL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi9u
ZXdsaWIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTI0ICIvbmV3bGliL2luY2x1ZGUvbGltaXRz
LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEyNCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL29wdC9nbnUtbmV3L2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMjUgIi91c3IvbG9j
YWwvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvbGltaXRz
LmgiIDMKIyAxICIvbmV3bGliL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwojIDEyNiAi
L25ld2xpYi9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAzCiMgMSAiL25ld2xpYi9pbmNsdWRl
L2JpdHMvbG9jYWxfbGltLmgiIDEgMwojIDM2ICIvbmV3bGliL2luY2x1ZGUvYml0cy9sb2NhbF9s
aW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaCIgMSAzCiMgMzcgIi9uZXds
aWIvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMKIyAxMjcgIi9uZXdsaWIvaW5jbHVkZS9i
aXRzL3Bvc2l4MV9saW0uaCIgMiAzCiMgMTQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvbGltaXRzLmgi
IDIgMwoKCgojIDEgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMgMTQ5
ICIvdXNyL2xvY2FsL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi9uZXdsaWIvaW5jbHVk
ZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMKIyAzNCAiL25ld2xpYi9pbmNsdWRlL2JpdHMveG9wZW5f
bGltLmgiIDMKIyAxICIvbmV3bGliL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMzUg
Ii9uZXdsaWIvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMKIyAxNTMgIi91c3IvbG9jYWwv
aW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTI1ICIvbmV3bGliL2luY2x1ZGUvbGltaXRzLmgiIDIg
MwojIDE0NCAiL25ld2xpYi9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL25ld2xpYi9pbmNsdWRl
L2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxNDUgIi9uZXdsaWIvaW5jbHVkZS9saW1pdHMuaCIg
MiAzCgoKCiMgMSAiL25ld2xpYi9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMKIyAxNDkg
Ii9uZXdsaWIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL25ld2xpYi9pbmNsdWRlL2Jp
dHMveG9wZW5fbGltLmgiIDEgMwojIDE1MyAiL25ld2xpYi9pbmNsdWRlL2xpbWl0cy5oIiAyIDMK
IyAyNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ3BwU2hhcmVkQWxsb2NhdG9yLmgiIDIK
CgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIG5zQ3BwU2hhcmVkQWxsb2NhdG9yCgoKCgogIHsK
ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgc2l6
ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoK
ICAgICAgdHlwZWRlZiBUKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X3Bv
aW50ZXI7CgogICAgICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25zdCBU
JiBjb25zdF9yZWZlcmVuY2U7CgoKCiAgICAgIG5zQ3BwU2hhcmVkQWxsb2NhdG9yKCkgeyB9CgoK
CgoKCiAgICAgfm5zQ3BwU2hhcmVkQWxsb2NhdG9yKCkgeyB9CgoKICAgICAgcG9pbnRlcgogICAg
ICBhZGRyZXNzKCByZWZlcmVuY2UgciApIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJu
ICZyOwogICAgICAgIH0KCiAgICAgIGNvbnN0X3BvaW50ZXIKICAgICAgYWRkcmVzcyggY29uc3Rf
cmVmZXJlbmNlIHIgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiAmcjsKICAgICAg
ICB9CgogICAgICBwb2ludGVyCiAgICAgIGFsbG9jYXRlKCBzaXplX3R5cGUgbiwgY29uc3Qgdm9p
ZCogPTAgKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBwb2lu
dGVyID4obnNNZW1vcnk6OkFsbG9jKHN0YXRpY19jYXN0PCBQUlVpbnQzMiA+KG4qc2l6ZW9mKFQp
KSkpOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgZGVhbGxvY2F0ZSggcG9pbnRlciBwLCBz
aXplX3R5cGUgKQogICAgICAgIHsKICAgICAgICAgIG5zTWVtb3J5OjpGcmVlKHApOwogICAgICAg
IH0KCiAgICAgIHZvaWQKICAgICAgY29uc3RydWN0KCBwb2ludGVyIHAsIGNvbnN0IFQmIHZhbCAp
CiAgICAgICAgewogICAgICAgICAgbmV3IChwKSBUKHZhbCk7CiAgICAgICAgfQoKICAgICAgdm9p
ZAogICAgICBkZXN0cm95KCBwb2ludGVyIHAgKQogICAgICAgIHsKICAgICAgICAgIHAtPn5UKCk7
CiAgICAgICAgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QKICAgICAg
ICB7CgoKCiAgICAgICAgICByZXR1cm4gKDIxNDc0ODM2NDdMICogMlVMICsgMSkgLyBzaXplb2Yo
VCk7CgogICAgICAgIH0KIyAxMTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NwcFNoYXJl
ZEFsbG9jYXRvci5oIgogIH07CgoKdGVtcGxhdGUgPGNsYXNzIFQ+ClBSQm9vbApvcGVyYXRvcj09
KCBjb25zdCBuc0NwcFNoYXJlZEFsbG9jYXRvcjxUPiYsIGNvbnN0IG5zQ3BwU2hhcmVkQWxsb2Nh
dG9yPFQ+JiApCiAgewogICAgcmV0dXJuIDE7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+ClBSQm9v
bApvcGVyYXRvciE9KCBjb25zdCBuc0NwcFNoYXJlZEFsbG9jYXRvcjxUPiYsIGNvbnN0IG5zQ3Bw
U2hhcmVkQWxsb2NhdG9yPFQ+JiApCiAgewogICAgcmV0dXJuIDA7CiAgfQojIDMxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMgojIDQ3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNDUlQuaCIKZXh0ZXJuIGNvbnN0IFBSVW5pY2hhciBrSXNvTGF0aW4xVG9VQ1MyWzI1Nl07
CiMgODYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIgpjbGFzcyBuc0NSVCB7CnB1
YmxpYzoKICBlbnVtIHsKICAgIFRBQj0nXHQnICwKICAgIExGPSdcbicgLAogICAgVlRBQj0nXHYn
ICwKICAgIEZGPSdcZicgLAogICAgQ1I9J1xyJwogIH07CgoKCgoKCiAgc3RhdGljIHZvaWQgbWVt
Y3B5KHZvaWQqIGFEZXN0LCBjb25zdCB2b2lkKiBhU3JjLCBQUlVpbnQzMiBhQ291bnQpIHsKICAg
IGlmICghKChhRGVzdCAhPSBfX251bGwgJiYgYVNyYyAhPSBfX251bGwpIHx8IChhQ291bnQgPT0g
MCkpKSBuc0RlYnVnOjpBc3NlcnRpb24oIkludmFsaWQgTlVMTCBhcmd1bWVudCIsICIoYURlc3Qg
IT0gTlVMTCAmJiBhU3JjICE9IE5VTEwpIHx8IChhQ291bnQgPT0gMCkiLCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQ1JULmgiLCAxMDIpOwogICAgOjptZW1jcHkoYURlc3QsIGFTcmMsIChz
aXplX3QpYUNvdW50KTsKICB9CgogIHN0YXRpYyBQUkludDMyIG1lbWNtcCh2b2lkKiBhRGVzdCwg
Y29uc3Qgdm9pZCogYVNyYywgUFJVaW50MzIgYUNvdW50KSB7CiAgICBpZiAoISgoYURlc3QgIT0g
X19udWxsICYmIGFTcmMgIT0gX19udWxsKSB8fCAoYUNvdW50ID09IDApKSkgbnNEZWJ1Zzo6QXNz
ZXJ0aW9uKCJJbnZhbGlkIE5VTEwgYXJndW1lbnQiLCAiKGFEZXN0ICE9IE5VTEwgJiYgYVNyYyAh
PSBOVUxMKSB8fCAoYUNvdW50ID09IDApIiwgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NS
VC5oIiwgMTA3KTsKICAgIHJldHVybiA6Om1lbWNtcChhRGVzdCwgYVNyYywgKHNpemVfdClhQ291
bnQpOwogIH0KCiAgc3RhdGljIHZvaWQgbWVtbW92ZSh2b2lkKiBhRGVzdCwgY29uc3Qgdm9pZCog
YVNyYywgUFJVaW50MzIgYUNvdW50KSB7CiAgICBpZiAoISgoYURlc3QgIT0gX19udWxsICYmIGFT
cmMgIT0gX19udWxsKSB8fCAoYUNvdW50ID09IDApKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJJbnZh
bGlkIE5VTEwgYXJndW1lbnQiLCAiKGFEZXN0ICE9IE5VTEwgJiYgYVNyYyAhPSBOVUxMKSB8fCAo
YUNvdW50ID09IDApIiwgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIiwgMTEyKTsK
ICAgIDo6bWVtbW92ZShhRGVzdCwgYVNyYywgKHNpemVfdClhQ291bnQpOwogIH0KCiAgc3RhdGlj
IHZvaWQgbWVtc2V0KHZvaWQqIGFEZXN0LCBQUlVpbnQ4IGFCeXRlLCBQUlVpbnQzMiBhQ291bnQp
IHsKICAgIGlmICghKChhRGVzdCAhPSBfX251bGwpIHx8IChhQ291bnQgPT0gMCkpKSBuc0RlYnVn
OjpBc3NlcnRpb24oIkludmFsaWQgTlVMTCBhcmd1bWVudCIsICIoYURlc3QgIT0gTlVMTCkgfHwg
KGFDb3VudCA9PSAwKSIsICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIsIDExNyk7
CiAgICA6Om1lbXNldChhRGVzdCwgYUJ5dGUsIGFDb3VudCk7CiAgfQoKICBzdGF0aWMgdm9pZCB6
ZXJvKHZvaWQqIGFEZXN0LCBQUlVpbnQzMiBhQ291bnQpIHsKICAgIGlmICghKChhRGVzdCAhPSBf
X251bGwpIHx8IChhQ291bnQgPT0gMCkpKSBuc0RlYnVnOjpBc3NlcnRpb24oIkludmFsaWQgTlVM
TCBhcmd1bWVudCIsICIoYURlc3QgIT0gTlVMTCkgfHwgKGFDb3VudCA9PSAwKSIsICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIsIDEyMik7CiAgICA6Om1lbXNldChhRGVzdCwgMCwg
KHNpemVfdClhQ291bnQpOwogIH0KCgoKCgogIHN0YXRpYyBQUlVpbnQzMiBzdHJsZW4oY29uc3Qg
Y2hhciogcykgewogICAgcmV0dXJuIFBSVWludDMyKDo6c3RybGVuKHMpKTsKICB9CgoKICBzdGF0
aWMgUFJJbnQzMiBzdHJjbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyKSB7CiAgICBy
ZXR1cm4gUFJJbnQzMihQTF9zdHJjbXAoczEsIHMyKSk7CiAgfQoKICBzdGF0aWMgUFJJbnQzMiBz
dHJuY21wKGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwKICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSVWludDMyIGFNYXhMZW4pIHsKICAgIHJldHVybiBQUkludDMyKFBMX3N0cm5jbXAo
czEsIHMyLCBhTWF4TGVuKSk7CiAgfQoKCiAgc3RhdGljIFBSSW50MzIgc3RyY2FzZWNtcChjb25z
dCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIpIHsKICAgIHJldHVybiBQUkludDMyKFBMX3N0cmNh
c2VjbXAoczEsIHMyKSk7CiAgfQoKCiAgc3RhdGljIFBSSW50MzIgc3RybmNhc2VjbXAoY29uc3Qg
Y2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBQUlVpbnQzMiBhTWF4TGVuKSB7CiAgICBQUkludDMy
IHJlc3VsdD1QUkludDMyKFBMX3N0cm5jYXNlY21wKHMxLCBzMiwgYU1heExlbikpOwoKCiAgICBp
ZihyZXN1bHQ8MCkKICAgICAgcmVzdWx0PS0xOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0
YXRpYyBQUkludDMyIHN0cm5jbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBQUklu
dDMyIGFNYXhMZW4pIHsKCiAgICBQUkludDMyIGRpZmYgPSAoKGNvbnN0IHVuc2lnbmVkIGNoYXIq
KXMxKVswXSAtICgoY29uc3QgdW5zaWduZWQgY2hhciopczIpWzBdOwogICAgaWYgKGRpZmYgIT0g
MCkgcmV0dXJuIGRpZmY7CiAgICByZXR1cm4gUFJJbnQzMihQTF9zdHJuY21wKHMxLHMyLHVuc2ln
bmVkKGFNYXhMZW4pKSk7CiAgfQoKICBzdGF0aWMgY2hhciogc3RyZHVwKGNvbnN0IGNoYXIqIHN0
cikgewogICAgcmV0dXJuIFBMX3N0cmR1cChzdHIpOwogIH0KCiAgc3RhdGljIGNoYXIqIHN0cm5k
dXAoY29uc3QgY2hhciogc3RyLCBQUlVpbnQzMiBsZW4pIHsKICAgIHJldHVybiBQTF9zdHJuZHVw
KHN0ciwgbGVuKTsKICB9CgogIHN0YXRpYyB2b2lkIGZyZWUoY2hhciogc3RyKSB7CiAgICBQTF9z
dHJmcmVlKHN0cik7CiAgfQojIDE5NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ1JULmgi
CiAgc3RhdGljIGNoYXIqIHN0cnRvayhjaGFyKiBzdHIsIGNvbnN0IGNoYXIqIGRlbGltcywgY2hh
ciogKm5ld1N0cik7CgoKICBzdGF0aWMgUFJVaW50MzIgc3RybGVuKGNvbnN0IFBSVW5pY2hhciog
cyk7CgoKICBzdGF0aWMgUFJJbnQzMiBzdHJjbXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3Qg
UFJVbmljaGFyKiBzMik7CgogIHN0YXRpYyBQUkludDMyIHN0cm5jbXAoY29uc3QgUFJVbmljaGFy
KiBzMSwgY29uc3QgUFJVbmljaGFyKiBzMiwKICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWlu
dDMyIGFNYXhMZW4pOwoKCiAgc3RhdGljIFBSSW50MzIgc3RyY2FzZWNtcChjb25zdCBQUlVuaWNo
YXIqIHMxLCBjb25zdCBQUlVuaWNoYXIqIHMyKTsKCiAgc3RhdGljIFBSSW50MzIgc3RybmNhc2Vj
bXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgUFJVbmljaGFyKiBzMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKTsKCgogIHN0YXRpYyBQUkludDMyIHN0
cmNtcChjb25zdCBQUlVuaWNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMik7CgogIHN0YXRpYyBQUklu
dDMyIHN0cm5jbXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgY2hhciogczIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKTsKCgogIHN0YXRpYyBQUkludDMyIHN0
cmNhc2VjbXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgY2hhciogczIpOwoKICBzdGF0aWMg
UFJJbnQzMiBzdHJuY2FzZWNtcChjb25zdCBQUlVuaWNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKTsKCgoKICBzdGF0
aWMgUFJVbmljaGFyKiBzdHJkdXAoY29uc3QgUFJVbmljaGFyKiBzdHIpOwoKICBzdGF0aWMgUFJV
bmljaGFyKiBzdHJuZHVwKGNvbnN0IFBSVW5pY2hhciogc3RyLCBQUlVpbnQzMiBsZW4pOwoKICBz
dGF0aWMgdm9pZCBmcmVlKFBSVW5pY2hhciogc3RyKSB7CiAgICAgICAgbnNDcHBTaGFyZWRBbGxv
Y2F0b3I8UFJVbmljaGFyPiBzaGFyZWRfYWxsb2NhdG9yOwogICAgICAgIHNoYXJlZF9hbGxvY2F0
b3IuZGVhbGxvY2F0ZShzdHIsIDAgKTsKICB9CgoKICBzdGF0aWMgUFJVaW50MzIgSGFzaENvZGUo
Y29uc3QgY2hhciogc3RyLCBQUlVpbnQzMiogcmVzdWx0aW5nU3RyTGVuID0gMCk7CgoKICBzdGF0
aWMgUFJVaW50MzIgSGFzaENvZGUoY29uc3QgUFJVbmljaGFyKiBzdHIsIFBSVWludDMyKiByZXN1
bHRpbmdTdHJMZW4gPSAwKTsKCgogIHN0YXRpYyBQUlVpbnQzMiBCdWZmZXJIYXNoQ29kZShjb25z
dCBjaGFyKiBzdHIsIFBSVWludDMyIHN0ckxlbik7CgoKICBzdGF0aWMgUFJJbnQzMiBhdG9pKCBj
b25zdCBQUlVuaWNoYXIgKnN0cmluZyApOwoKICBzdGF0aWMgUFJVbmljaGFyIFRvVXBwZXIoUFJV
bmljaGFyIGFDaGFyKTsKCiAgc3RhdGljIFBSVW5pY2hhciBUb0xvd2VyKFBSVW5pY2hhciBhQ2hh
cik7CgogIHN0YXRpYyBQUkJvb2wgSXNVcHBlcihQUlVuaWNoYXIgYUNoYXIpOwoKICBzdGF0aWMg
UFJCb29sIElzTG93ZXIoUFJVbmljaGFyIGFDaGFyKTsKCiAgc3RhdGljIGNoYXIgVG9VcHBlcihj
aGFyIGFDaGFyKTsKCiAgc3RhdGljIGNoYXIgVG9Mb3dlcihjaGFyIGFDaGFyKTsKCiAgc3RhdGlj
IFBSQm9vbCBJc1VwcGVyKGNoYXIgYUNoYXIpOwoKICBzdGF0aWMgUFJCb29sIElzTG93ZXIoY2hh
ciBhQ2hhcik7CgogIHN0YXRpYyBQUkJvb2wgSXNBc2NpaShQUlVuaWNoYXIgYUNoYXIpOwogIHN0
YXRpYyBQUkJvb2wgSXNBc2NpaShQUlVuaWNoYXIqIGFTdHJpbmcpOwogIHN0YXRpYyBQUkJvb2wg
SXNBc2NpaUFscGhhKFBSVW5pY2hhciBhQ2hhcik7CiAgc3RhdGljIFBSQm9vbCBJc0FzY2lpRGln
aXQoUFJVbmljaGFyIGFDaGFyKTsKICBzdGF0aWMgUFJCb29sIElzQXNjaWlTcGFjZShQUlVuaWNo
YXIgYUNoYXIpOwp9OwojIDU0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgi
IDIKIyA2MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgpjbGFzcyBuc0lT
aXplT2ZIYW5kbGVyOwoKCgoKCmNsYXNzIG5zU3Vic3VtZVN0cjsKCmNsYXNzIG5zU3RyaW5nIDoK
ICBwdWJsaWMgbnNBRmxhdFN0cmluZywKICBwdWJsaWMgbnNTdHIgewoKcHJvdGVjdGVkOgogIHZp
cnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8UFJVbmljaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRs
ZSgpIGNvbnN0OwogIHZpcnR1YWwgY29uc3QgUFJVbmljaGFyKiBHZXRSZWFkYWJsZUZyYWdtZW50
KCBuc1JlYWRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVp
bnQzMiApIGNvbnN0OwogIHZpcnR1YWwgUFJVbmljaGFyKiBHZXRXcml0YWJsZUZyYWdtZW50KCBu
c1dyaXRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQz
MiApOwoKcHVibGljOgogIHZpcnR1YWwgY29uc3QgUFJVbmljaGFyKiBnZXQoKSBjb25zdCB7IHJl
dHVybiBHZXRVbmljb2RlKCk7IH0KCnB1YmxpYzoKCgoKICBuc1N0cmluZygpOwoKCgoKCiAgbnNT
dHJpbmcoY29uc3QgbnNTdHJpbmcmIGFTdHJpbmcpOwoKICBleHBsaWNpdCBuc1N0cmluZyhjb25z
dCBuc0FTdHJpbmcmKTsKCiAgZXhwbGljaXQgbnNTdHJpbmcoY29uc3QgUFJVbmljaGFyKik7CiAg
bnNTdHJpbmcoY29uc3QgUFJVbmljaGFyKiwgUFJJbnQzMik7CiMgMTA4ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgZXhwbGljaXQgbnNTdHJpbmcobnNTdWJzdW1lU3Ry
JiBhU3Vic3VtZVN0cik7CgoKCgoKCiAgdmlydHVhbCB+bnNTdHJpbmcoKTsKCgoKCgogIHZpcnR1
YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbUxlbmd0aDsgfQoKCgoKCiAgdmly
dHVhbCB2b2lkIFNpemVPZihuc0lTaXplT2ZIYW5kbGVyKiBhSGFuZGxlciwgUFJVaW50MzIqIGFS
ZXN1bHQpIGNvbnN0OwoKCgoKCgoKICB2b2lkIFNldExlbmd0aChQUlVpbnQzMiBhTGVuZ3RoKTsK
CgoKCgoKICB2b2lkIFNldENhcGFjaXR5KFBSVWludDMyIGFMZW5ndGgpOwojIDE1MSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIFBSQm9vbCBJc1VuaWNvZGUodm9pZCkg
Y29uc3QgewogICAgUFJCb29sIHJlc3VsdD1QUkJvb2wobUNoYXJTaXplPT1lVHdvQnl0ZSk7CiAg
ICByZXR1cm4gcmVzdWx0OwogIH0KIyAxNjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0
cmluZzIuaCIKICBjb25zdCBjaGFyKiBHZXRCdWZmZXIodm9pZCkgY29uc3Q7CiAgY29uc3QgUFJV
bmljaGFyKiBHZXRVbmljb2RlKHZvaWQpIGNvbnN0OwoKCgoKICBQUkJvb2wgU2V0Q2hhckF0KFBS
VW5pY2hhciBhQ2hhcixQUlVpbnQzMiBhbkluZGV4KTsKIyAxODIgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1N0cmluZzIuaCIKICB2b2lkIFRvTG93ZXJDYXNlKCk7CiMgMTkxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgdm9pZCBUb0xvd2VyQ2FzZShuc1N0cmlu
ZyYgYVN0cmluZykgY29uc3Q7CgoKCgoKICB2b2lkIFRvVXBwZXJDYXNlKCk7CgoKCgoKCgogIHZv
aWQgVG9VcHBlckNhc2UobnNTdHJpbmcmIGFTdHJpbmcpIGNvbnN0OwojIDIxNSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIHZvaWQgU3RyaXBDaGFycyggY29uc3QgY2hh
ciogYVNldCApOwogIHZvaWQgU3RyaXBDaGFyKCBQUlVuaWNoYXIgYUNoYXIsIFBSSW50MzIgYW5P
ZmZzZXQ9MCApOwogIHZvaWQgU3RyaXBDaGFyKCBjaGFyIGFDaGFyLCBQUkludDMyIGFuT2Zmc2V0
PTAgKSB7IFN0cmlwQ2hhcigoUFJVbmljaGFyKSAodW5zaWduZWQgY2hhcilhQ2hhcixhbk9mZnNl
dCk7IH0KICB2b2lkIFN0cmlwQ2hhciggUFJJbnQzMiBhbkludCwgUFJJbnQzMiBhbk9mZnNldD0w
ICkgeyBTdHJpcENoYXIoKFBSVW5pY2hhcilhbkludCxhbk9mZnNldCk7IH0KCgoKCgoKICB2b2lk
IFN0cmlwV2hpdGVzcGFjZSgpOwoKCgoKCgogIHZvaWQgUmVwbGFjZUNoYXIoIFBSVW5pY2hhciBh
bk9sZENoYXIsIFBSVW5pY2hhciBhTmV3Q2hhciApOwogIHZvaWQgUmVwbGFjZUNoYXIoIGNvbnN0
IGNoYXIqIGFTZXQsIFBSVW5pY2hhciBhTmV3Q2hhciApOwoKICB2b2lkIFJlcGxhY2VTdWJzdHJp
bmcoIGNvbnN0IG5zU3RyaW5nJiBhVGFyZ2V0LCBjb25zdCBuc1N0cmluZyYgYU5ld1ZhbHVlICk7
CiAgdm9pZCBSZXBsYWNlU3Vic3RyaW5nKCBjb25zdCBQUlVuaWNoYXIqIGFUYXJnZXQsIGNvbnN0
IFBSVW5pY2hhciogYU5ld1ZhbHVlICk7CiMgMjQ5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNTdHJpbmcyLmgiCiAgdm9pZCBUcmltKGNvbnN0IGNoYXIqIGFTZXQsUFJCb29sIGFFbGltaW5h
dGVMZWFkaW5nPTEsUFJCb29sIGFFbGltaW5hdGVUcmFpbGluZz0xLFBSQm9vbCBhSWdub3JlUXVv
dGVzPTApOwojIDI2MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIHZv
aWQgQ29tcHJlc3NTZXQoY29uc3QgY2hhciogYVNldCwgUFJVbmljaGFyIGFDaGFyLFBSQm9vbCBh
RWxpbWluYXRlTGVhZGluZz0xLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxpbmc9MSk7CiMgMjcxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgdm9pZCBDb21wcmVzc1doaXRl
c3BhY2UoIFBSQm9vbCBhRWxpbWluYXRlTGVhZGluZz0xLFBSQm9vbCBhRWxpbWluYXRlVHJhaWxp
bmc9MSk7CiMgMjgxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgbnNT
dHJpbmcqIFRvTmV3U3RyaW5nKCkgY29uc3Q7CgoKCgoKCgogIGNoYXIqIFRvTmV3Q1N0cmluZygp
IGNvbnN0OwoKCgoKCgoKICBjaGFyKiBUb05ld1VURjhTdHJpbmcoKSBjb25zdDsKCgoKCgoKCiAg
UFJVbmljaGFyKiBUb05ld1VuaWNvZGUoKSBjb25zdDsKIyAzMTQgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1N0cmluZzIuaCIKICBjaGFyKiBUb0NTdHJpbmcoY2hhciogYUJ1ZixQUlVpbnQz
MiBhQnVmTGVuZ3RoLFBSVWludDMyIGFuT2Zmc2V0PTApIGNvbnN0OwoKCgoKCgogIGZsb2F0IFRv
RmxvYXQoUFJJbnQzMiogYUVycm9yQ29kZSkgY29uc3Q7CgoKCgoKCgogIFBSSW50MzIgVG9JbnRl
Z2VyKFBSSW50MzIqIGFFcnJvckNvZGUsUFJVaW50MzIgYVJhZGl4PSgxMCkpIGNvbnN0OwojIDM0
NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIG5zU3RyaW5nJiBvcGVy
YXRvcj0oIGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nICkgeyBBc3NpZ24oYVN0cmluZyk7IHJldHVy
biAqdGhpczsgfQogIG5zU3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IG5zQVN0cmluZyYgYVJlYWRh
YmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogIG5zU3RyaW5nJiBv
cGVyYXRvcj0oIGNvbnN0IFBSVW5pY2hhciogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4g
KnRoaXM7IH0KICBuc1N0cmluZyYgb3BlcmF0b3I9KCBQUlVuaWNoYXIgYUNoYXIgKSB7IEFzc2ln
bihhQ2hhcik7IHJldHVybiAqdGhpczsgfQoKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKGNo
YXIpOwogIHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oY29uc3QgY2hhciopOwogIHZvaWQgQXNz
aWduV2l0aENvbnZlcnNpb24oY29uc3QgY2hhciosIFBSSW50MzIpOwojIDM2NCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIHZvaWQgQXBwZW5kSW50KFBSSW50MzIsIFBS
SW50MzI9MTApOwogIHZvaWQgQXBwZW5kRmxvYXQoZG91YmxlKTsKICB2b2lkIEFwcGVuZFdpdGhD
b252ZXJzaW9uKGNvbnN0IGNoYXIqLCBQUkludDMyPS0xKTsKICB2b2lkIEFwcGVuZFdpdGhDb252
ZXJzaW9uKGNoYXIpOwoKICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbUVsZW1lbnQoIFBSVW5p
Y2hhciApOwoKCgogIHZvaWQgSW5zZXJ0V2l0aENvbnZlcnNpb24oY29uc3QgY2hhciosIFBSVWlu
dDMyLCBQUkludDMyPS0xKTsKIyAzODkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmlu
ZzIuaCIKICBQUkludDMyIEZpbmQoY29uc3QgbnNTdHJpbmcmIGFTdHJpbmcsUFJCb29sIGFJZ25v
cmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQ
UkludDMyIEZpbmQoY29uc3QgbnNTdHImIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJ
bnQzMiBhbk9mZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkludDMyIEZpbmQo
Y29uc3QgY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0
PTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSSW50MzIgRmluZChjb25zdCBQUlVuaWNo
YXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0wLFBSSW50
MzIgYUNvdW50PS0xKSBjb25zdDsKIyA0MDUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0
cmluZzIuaCIKICBQUkludDMyIEZpbmRDaGFyKFBSVW5pY2hhciBhQ2hhcixQUkJvb2wgYUlnbm9y
ZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwojIDQx
NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIFBSSW50MzIgRmluZENo
YXJJblNldChjb25zdCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiAg
UFJJbnQzMiBGaW5kQ2hhckluU2V0KGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkludDMyIGFu
T2Zmc2V0PTApIGNvbnN0OwogIFBSSW50MzIgRmluZENoYXJJblNldChjb25zdCBuc1N0ciYgYVN0
cmluZyxQUkludDMyIGFuT2Zmc2V0PTApIGNvbnN0OwojIDQyNyAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zU3RyaW5nMi5oIgogIFBSSW50MzIgUkZpbmQoY29uc3QgY2hhciogYUNTdHJpbmcs
UFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0t
MSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZChjb25zdCBuc1N0cmluZyYgYVN0cmluZyxQUkJvb2wg
YUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNvdW50PS0xKSBjb25z
dDsKICBQUkludDMyIFJGaW5kKGNvbnN0IG5zU3RyJiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2Fz
ZT0wLFBSSW50MzIgYW5PZmZzZXQ9LTEsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSSW50
MzIgUkZpbmQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBS
SW50MzIgYW5PZmZzZXQ9LTEsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwojIDQ0MyAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIFBSSW50MzIgUkZpbmRDaGFyKFBSVW5p
Y2hhciBhQ2hhcixQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50
MzIgYUNvdW50PS0xKSBjb25zdDsKIyA0NTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0
cmluZzIuaCIKICBQUkludDMyIFJGaW5kQ2hhckluU2V0KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJ
bnQzMiBhbk9mZnNldD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25zdCBQ
UlVuaWNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBS
RmluZENoYXJJblNldChjb25zdCBuc1N0ciYgYVN0cmluZyxQUkludDMyIGFuT2Zmc2V0PS0xKSBj
b25zdDsKIyA0NzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICBQUklu
dDMyIENvbXBhcmVXaXRoQ29udmVyc2lvbihjb25zdCBjaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdu
b3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkludDMyIENvbXBhcmVXaXRo
Q29udmVyc2lvbihjb25zdCBuc1N0cmluZyYgYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQ
UkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBDb21wYXJlV2l0aENvbnZlcnNpb24o
Y29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNv
dW50PS0xKSBjb25zdDsKCiAgUFJCb29sIEVxdWFsc1dpdGhDb252ZXJzaW9uKGNvbnN0IG5zU3Ry
aW5nICZhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25z
dDsKICBQUkJvb2wgRXF1YWxzV2l0aENvbnZlcnNpb24oY29uc3QgY2hhciogYVN0cmluZyxQUkJv
b2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJCb29sIEVxdWFs
c1dpdGhDb252ZXJzaW9uKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNh
c2U9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJCb29sIEVxdWFsc0F0b20oIG5zSUF0
b20qIGFuQXRvbSxQUkJvb2wgYUlnbm9yZUNhc2UpIGNvbnN0OwoKICBQUkJvb2wgRXF1YWxzSWdu
b3JlQ2FzZShjb25zdCBuc1N0cmluZyYgYVN0cmluZykgY29uc3Q7CiAgUFJCb29sIEVxdWFsc0ln
bm9yZUNhc2UoY29uc3QgY2hhciogYVN0cmluZyxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAg
UFJCb29sIEVxdWFsc0lnbm9yZUNhc2UoIG5zSUF0b20gKmFBdG9tKSBjb25zdDsKIyA0OTAgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICBQUkJvb2wgSXNBU0NJSShjb25z
dCBQUlVuaWNoYXIqIGFCdWZmZXI9MCk7CgogIHZvaWQgRGVidWdEdW1wKHZvaWQpIGNvbnN0OwoK
CgoKCgoKICBzdGF0aWMgUFJCb29sIElzU3BhY2UoUFJVbmljaGFyIGNoKTsKCgoKCgoKCiAgc3Rh
dGljIFBSQm9vbCBJc0FscGhhKFBSVW5pY2hhciBjaCk7CgoKCgoKCgogIHN0YXRpYyBQUkJvb2wg
SXNEaWdpdChQUlVuaWNoYXIgY2gpOwoKcHJpdmF0ZToKCgogIHZvaWQgb3BlcmF0b3I9KCBjaGFy
ICk7CiAgdm9pZCBBc3NpZ25XaXRoQ29udmVyc2lvbiggUFJVbmljaGFyICk7CiAgdm9pZCBBc3Np
Z25XaXRoQ29udmVyc2lvbiggY29uc3QgUFJVbmljaGFyKiwgUFJJbnQzMj0tMSApOwogIHZvaWQg
QXBwZW5kV2l0aENvbnZlcnNpb24oIFBSVW5pY2hhciApOwogIHZvaWQgQXBwZW5kV2l0aENvbnZl
cnNpb24oIGNvbnN0IFBSVW5pY2hhciosIFBSSW50MzI9LTEgKTsKICB2b2lkIEluc2VydFdpdGhD
b252ZXJzaW9uKCBjb25zdCBQUlVuaWNoYXIqLCBQUlVpbnQzMiwgUFJJbnQzMj0tMSApOwp9OwoK
CgoKZXh0ZXJuIGludCBmcHV0cyhjb25zdCBuc1N0cmluZyYgYVN0cmluZywgRklMRSogb3V0KTsK
IyA1NDIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKY2xhc3MgbnNBdXRv
U3RyaW5nIDogcHVibGljIG5zU3RyaW5nIHsKcHVibGljOgoKICAgIHZpcnR1YWwgfm5zQXV0b1N0
cmluZygpOwogICAgbnNBdXRvU3RyaW5nKCk7CiAgICBuc0F1dG9TdHJpbmcoY29uc3QgbnNBdXRv
U3RyaW5nJiBhU3RyaW5nKTsKICAgIGV4cGxpY2l0IG5zQXV0b1N0cmluZyhjb25zdCBuc0FTdHJp
bmcmIGFTdHJpbmcpOwogICAgZXhwbGljaXQgbnNBdXRvU3RyaW5nKGNvbnN0IG5zU3RyaW5nJiBh
U3RyaW5nKTsKICAgIGV4cGxpY2l0IG5zQXV0b1N0cmluZyhjb25zdCBQUlVuaWNoYXIqIGFTdHJp
bmcpOwogICAgbnNBdXRvU3RyaW5nKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkludDMyIGFM
ZW5ndGgpOwogICAgZXhwbGljaXQgbnNBdXRvU3RyaW5nKFBSVW5pY2hhciBhQ2hhcik7CiAgICBl
eHBsaWNpdCBuc0F1dG9TdHJpbmcoY29uc3QgQ0J1ZkRlc2NyaXB0b3ImIGFCdWZmZXIpOwoKCgoK
ICAgIGV4cGxpY2l0IG5zQXV0b1N0cmluZyhuc1N1YnN1bWVTdHImIGFTdWJzdW1lU3RyKTsKCgoK
ICAgIG5zQXV0b1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0F1dG9TdHJpbmcmIGFTdHJpbmcg
KSB7IEFzc2lnbihhU3RyaW5nKTsgcmV0dXJuICp0aGlzOyB9CiAgcHJpdmF0ZToKICAgIHZvaWQg
b3BlcmF0b3I9KCBjaGFyICk7CiAgcHVibGljOgogICAgbnNBdXRvU3RyaW5nJiBvcGVyYXRvcj0o
IGNvbnN0IG5zQVN0cmluZyYgYVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJu
ICp0aGlzOyB9CgogICAgbnNBdXRvU3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IFBSVW5pY2hhciog
YVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICAgIG5zQXV0b1N0cmluZyYg
b3BlcmF0b3I9KCBQUlVuaWNoYXIgYUNoYXIgKSB7IEFzc2lnbihhQ2hhcik7IHJldHVybiAqdGhp
czsgfQoKCgoKCiAgICB2aXJ0dWFsIHZvaWQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIqIGFIYW5k
bGVyLCBQUlVpbnQzMiogYVJlc3VsdCkgY29uc3Q7CgogICAgY2hhciBtQnVmZmVyW2tEZWZhdWx0
U3RyaW5nU2l6ZTw8ZVR3b0J5dGVdOwp9OwoKCgpjbGFzcyBOU19Db252ZXJ0QVNDSUl0b1VDUzIK
ICAgICAgOiBwdWJsaWMgbnNBdXRvU3RyaW5nCgoKCiAgewogICAgcHVibGljOgogICAgICBleHBs
aWNpdCBOU19Db252ZXJ0QVNDSUl0b1VDUzIoIGNvbnN0IGNoYXIqICk7CiAgICAgIE5TX0NvbnZl
cnRBU0NJSXRvVUNTMiggY29uc3QgY2hhciosIFBSVWludDMyICk7CiAgICAgIGV4cGxpY2l0IE5T
X0NvbnZlcnRBU0NJSXRvVUNTMiggY2hhciApOwojIDYwMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zU3RyaW5nMi5oIgogICAgcHJpdmF0ZToKCiAgICAgIE5TX0NvbnZlcnRBU0NJSXRvVUNT
MiggUFJVbmljaGFyICk7CiAgfTsKCmNsYXNzIE5TX0NvbnZlcnRVVEY4dG9VQ1MyCiAgICAgIDog
cHVibGljIG5zQXV0b1N0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAg
TlNfQ29udmVydFVURjh0b1VDUzIoIGNvbnN0IGNoYXIqIGFDU3RyaW5nICkKICAgICAgICB7CiAg
ICAgICAgICBJbml0KCBhQ1N0cmluZywgflBSVWludDMyKDApICk7CiAgICAgICAgfQoKICAgICAg
TlNfQ29udmVydFVURjh0b1VDUzIoIGNvbnN0IGNoYXIqIGFDU3RyaW5nLCBQUlVpbnQzMiBhTGVu
Z3RoICkKICAgICAgICB7CiAgICAgICAgICBJbml0KCBhQ1N0cmluZywgYUxlbmd0aCApOwogICAg
ICAgIH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIE5TX0NvbnZlcnRVVEY4dG9VQ1MyKCBjaGFyIGFD
aGFyICkKICAgICAgICB7CiAgICAgICAgICBJbml0KCAmYUNoYXIsIDEgKTsKICAgICAgICB9Cgog
ICAgcHJvdGVjdGVkOgogICAgICB2b2lkIEluaXQoIGNvbnN0IGNoYXIqIGFDU3RyaW5nLCBQUlVp
bnQzMiBhTGVuZ3RoICk7CgogICAgcHJpdmF0ZToKICAgICAgTlNfQ29udmVydFVURjh0b1VDUzIo
IFBSVW5pY2hhciApOwogIH07CiMgNjQ2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJp
bmcyLmgiCmNsYXNzIG5zU3Vic3VtZVN0ciA6IHB1YmxpYyBuc1N0cmluZyB7CnB1YmxpYzoKICBu
c1N1YnN1bWVTdHIoKTsKICBleHBsaWNpdCBuc1N1YnN1bWVTdHIobnNTdHImIGFTdHJpbmcpOwog
IG5zU3Vic3VtZVN0cihQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFzc3VtZU93bmVyc2hpcCxQ
UkludDMyIGFMZW5ndGg9LTEpOwogIG5zU3Vic3VtZVN0cihjaGFyKiBhU3RyaW5nLFBSQm9vbCBh
c3N1bWVPd25lcnNoaXAsUFJJbnQzMiBhTGVuZ3RoPS0xKTsKICBpbnQgU3Vic3VtZShQUlVuaWNo
YXIqIGFTdHJpbmcsUFJCb29sIGFzc3VtZU93bmVyc2hpcCxQUkludDMyIGFMZW5ndGg9LTEpOwoK
ICBuc1N1YnN1bWVTdHImIG9wZXJhdG9yPSggY29uc3QgbnNTdWJzdW1lU3RyJiBhUmVhZGFibGUg
KSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICBuc1N1YnN1bWVTdHImIG9w
ZXJhdG9yPSggY29uc3QgbnNBU3RyaW5nJiBhUmVhZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUp
OyByZXR1cm4gKnRoaXM7IH0KCiAgbnNTdWJzdW1lU3RyJiBvcGVyYXRvcj0oIGNvbnN0IFBSVW5p
Y2hhciogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICBuc1N1YnN1bWVT
dHImIG9wZXJhdG9yPSggUFJVbmljaGFyIGFDaGFyICkgeyBBc3NpZ24oYUNoYXIpOyByZXR1cm4g
KnRoaXM7IH0KcHJpdmF0ZToKICB2b2lkIG9wZXJhdG9yPSggY2hhciApOwp9OwojIDQ3ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMgojIDEgIi9HTS9oZGQ5L21vemlsbGEv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyA0OCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNjb3JlLmgiIDEKIyA0OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIK
IyAxICIvbmV3bGliL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgNTAgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1N0cmluZy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry
LmgiIDEKIyA1MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQXRvbS5oIiAxCiMgNTIgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1N0cmluZy5oIiAyCgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0FTdHJpbmcuaCIgMQojIDU0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIg
MgojIDYyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFibGVTdHJpbmcuaCIgMQojIDYzICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMgoKCgpjbGFzcyBuc1N1YnN1bWVDU3RyOwoKY2xh
c3MgbnNDU3RyaW5nIDoKICBwdWJsaWMgbnNBRmxhdENTdHJpbmcsCiAgcHVibGljIG5zU3RyIHsK
CnByb3RlY3RlZDoKICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXI+KiBHZXRGbGF0
QnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgdmlydHVhbCBjb25zdCBjaGFyKiBHZXRSZWFkYWJsZUZy
YWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJV
aW50MzIgKSBjb25zdDsKICB2aXJ0dWFsIGNoYXIqIEdldFdyaXRhYmxlRnJhZ21lbnQoIG5zV3Jp
dGFibGVGcmFnbWVudDxjaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApOwoKcHVi
bGljOgogIHZpcnR1YWwgY29uc3QgY2hhciogZ2V0KCkgY29uc3QgeyByZXR1cm4gbVN0cjsgfQoK
cHVibGljOgoKCgogIG5zQ1N0cmluZygpOwoKCgoKCiAgbnNDU3RyaW5nKGNvbnN0IG5zQ1N0cmlu
ZyYgYVN0cmluZyk7CgogIGV4cGxpY2l0IG5zQ1N0cmluZyggY29uc3QgbnNBQ1N0cmluZyYgKTsK
CiAgZXhwbGljaXQgbnNDU3RyaW5nKGNvbnN0IGNoYXIqKTsKICBuc0NTdHJpbmcoY29uc3QgY2hh
ciosIFBSSW50MzIpOwoKCgoKCiAgZXhwbGljaXQgbnNDU3RyaW5nKG5zU3Vic3VtZUNTdHImIGFT
dWJzdW1lU3RyKTsKCgoKCgogIHZpcnR1YWwgfm5zQ1N0cmluZygpOwoKCgoKCiAgdmlydHVhbCBQ
UlVpbnQzMiBMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtTGVuZ3RoOyB9CgoKCgoKICB2aXJ0dWFs
IHZvaWQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIqIGFIYW5kbGVyLCBQUlVpbnQzMiogYVJlc3Vs
dCkgY29uc3Q7CiMgMTI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICB2
b2lkIFNldExlbmd0aChQUlVpbnQzMiBhTGVuZ3RoKTsKCgoKCgoKICB2b2lkIFNldENhcGFjaXR5
KFBSVWludDMyIGFMZW5ndGgpOwoKCgoKCiAgUFJCb29sIFNldENoYXJBdChQUlVuaWNoYXIgYUNo
YXIsUFJVaW50MzIgYW5JbmRleCk7CiMgMTUxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNT
dHJpbmcuaCIKICB2b2lkIFRvTG93ZXJDYXNlKCk7CiMgMTYwICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNTdHJpbmcuaCIKICB2b2lkIFRvTG93ZXJDYXNlKG5zQ1N0cmluZyYgYVN0cmluZykg
Y29uc3Q7CgoKCgoKICB2b2lkIFRvVXBwZXJDYXNlKCk7CgoKCgoKCgogIHZvaWQgVG9VcHBlckNh
c2UobnNDU3RyaW5nJiBhU3RyaW5nKSBjb25zdDsKIyAxODQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1N0cmluZy5oIgogIHZvaWQgU3RyaXBDaGFycyhjb25zdCBjaGFyKiBhU2V0KTsKICB2
b2lkIFN0cmlwQ2hhcihQUlVuaWNoYXIgYUNoYXIsUFJJbnQzMiBhbk9mZnNldD0wKTsKICB2b2lk
IFN0cmlwQ2hhcihjaGFyIGFDaGFyLFBSSW50MzIgYW5PZmZzZXQ9MCkgeyBTdHJpcENoYXIoKFBS
VW5pY2hhcikgKHVuc2lnbmVkIGNoYXIpYUNoYXIsYW5PZmZzZXQpOyB9CgoKCgoKCiAgdm9pZCBT
dHJpcFdoaXRlc3BhY2UoKTsKCgoKCgoKICB2b2lkIFJlcGxhY2VDaGFyKFBSVW5pY2hhciBhT2xk
Q2hhcixQUlVuaWNoYXIgYU5ld0NoYXIpOwogIHZvaWQgUmVwbGFjZUNoYXIoY29uc3QgY2hhciog
YVNldCxQUlVuaWNoYXIgYU5ld0NoYXIpOwoKICB2b2lkIFJlcGxhY2VTdWJzdHJpbmcoY29uc3Qg
bnNDU3RyaW5nJiBhVGFyZ2V0LGNvbnN0IG5zQ1N0cmluZyYgYU5ld1ZhbHVlKTsKICB2b2lkIFJl
cGxhY2VTdWJzdHJpbmcoY29uc3QgY2hhciogYVRhcmdldCxjb25zdCBjaGFyKiBhTmV3VmFsdWUp
OwojIDIxNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgdm9pZCBUcmlt
KGNvbnN0IGNoYXIqIGFTZXQsUFJCb29sIGFFbGltaW5hdGVMZWFkaW5nPTEsUFJCb29sIGFFbGlt
aW5hdGVUcmFpbGluZz0xLFBSQm9vbCBhSWdub3JlUXVvdGVzPTApOwojIDIyOCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgdm9pZCBDb21wcmVzc1NldChjb25zdCBjaGFy
KiBhU2V0LCBQUlVuaWNoYXIgYUNoYXIsUFJCb29sIGFFbGltaW5hdGVMZWFkaW5nPTEsUFJCb29s
IGFFbGltaW5hdGVUcmFpbGluZz0xKTsKIyAyMzkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c1N0cmluZy5oIgogIHZvaWQgQ29tcHJlc3NXaGl0ZXNwYWNlKCBQUkJvb2wgYUVsaW1pbmF0ZUxl
YWRpbmc9MSxQUkJvb2wgYUVsaW1pbmF0ZVRyYWlsaW5nPTEpOwoKCgoKCiAgb3BlcmF0b3IgY29u
c3QgY2hhciooKSBjb25zdCB7cmV0dXJuIChjb25zdCBjaGFyKiltU3RyO30KCgoKCgoKCiAgbnND
U3RyaW5nKiBUb05ld1N0cmluZygpIGNvbnN0OwoKCgoKCgoKICBjaGFyKiBUb05ld0NTdHJpbmco
KSBjb25zdDsKCgoKCgoKCiAgUFJVbmljaGFyKiBUb05ld1VuaWNvZGUoKSBjb25zdDsKIyAyNzgg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIGNoYXIqIFRvQ1N0cmluZyhj
aGFyKiBhQnVmLFBSVWludDMyIGFCdWZMZW5ndGgsUFJVaW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7
CgoKCgoKCiAgZmxvYXQgVG9GbG9hdChQUkludDMyKiBhRXJyb3JDb2RlKSBjb25zdDsKIyAyOTQg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIFBSSW50MzIgVG9JbnRlZ2Vy
KFBSSW50MzIqIGFFcnJvckNvZGUsUFJVaW50MzIgYVJhZGl4PSgxMCkpIGNvbnN0OwojIDMxMCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgbnNDU3RyaW5nJiBvcGVyYXRv
cj0oIGNvbnN0IG5zQ1N0cmluZyYgYVN0cmluZyApIHsgQXNzaWduKGFTdHJpbmcpOyByZXR1cm4g
KnRoaXM7IH0KICBuc0NTdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgbnNBQ1N0cmluZyYgYVJlYWRh
YmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogIG5zQ1N0cmluZyYg
b3BlcmF0b3I9KCBjb25zdCBjaGFyKiBhUHRyICkgeyBBc3NpZ24oYVB0cik7IHJldHVybiAqdGhp
czsgfQogIG5zQ1N0cmluZyYgb3BlcmF0b3I9KCBjaGFyIGFDaGFyICkgeyBBc3NpZ24oYUNoYXIp
OyByZXR1cm4gKnRoaXM7IH0KCiAgdm9pZCBBc3NpZ25XaXRoQ29udmVyc2lvbihjb25zdCBQUlVu
aWNoYXIqLFBSSW50MzI9LTEpOwogIHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oIGNvbnN0IG5z
U3RyaW5nJiBhU3RyaW5nICk7CiAgdm9pZCBBc3NpZ25XaXRoQ29udmVyc2lvbiggY29uc3QgbnNB
U3RyaW5nJiBhU3RyaW5nICk7CiAgdm9pZCBBc3NpZ25XaXRoQ29udmVyc2lvbihQUlVuaWNoYXIp
OwojIDMzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgdm9pZCBBcHBl
bmRXaXRoQ29udmVyc2lvbihjb25zdCBuc1N0cmluZyYsIFBSSW50MzI9LTEpOwogIHZvaWQgQXBw
ZW5kV2l0aENvbnZlcnNpb24oUFJVbmljaGFyIGFDaGFyKTsKICB2b2lkIEFwcGVuZFdpdGhDb252
ZXJzaW9uKCBjb25zdCBuc0FTdHJpbmcmIGFTdHJpbmcgKTsKICB2b2lkIEFwcGVuZFdpdGhDb252
ZXJzaW9uKGNvbnN0IFBSVW5pY2hhciosIFBSSW50MzI9LTEpOwoKICB2b2lkIEFwcGVuZEludChQ
UkludDMyIGFJbnRlZ2VyLFBSSW50MzIgYVJhZGl4PTEwKTsKICB2b2lkIEFwcGVuZEZsb2F0KCBk
b3VibGUgYUZsb2F0ICk7CgoKICB2b2lkIEluc2VydFdpdGhDb252ZXJzaW9uKFBSVW5pY2hhciBh
Q2hhcixQUlVpbnQzMiBhbk9mZnNldCk7CiMgMzYzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNTdHJpbmcuaCIKICBQUkludDMyIEZpbmQoY29uc3QgbnNTdHImIGFTdHJpbmcsUFJCb29sIGFJ
Z25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsK
ICBQUkludDMyIEZpbmQoY29uc3QgY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQ
UkludDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSSW50MzIgRmlu
ZChjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBh
bk9mZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKIyAzNzYgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIFBSSW50MzIgRmluZENoYXIoUFJVbmljaGFyIGFDaGFy
LFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0t
MSkgY29uc3Q7CiMgMzg1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICBQ
UkludDMyIEZpbmRDaGFySW5TZXQoY29uc3QgY2hhciogYVN0cmluZyxQUkludDMyIGFuT2Zmc2V0
PTApIGNvbnN0OwogIFBSSW50MzIgRmluZENoYXJJblNldChjb25zdCBQUlVuaWNoYXIqIGFTdHJp
bmcsUFJJbnQzMiBhbk9mZnNldD0wKSBjb25zdDsKICBQUkludDMyIEZpbmRDaGFySW5TZXQoY29u
c3QgbnNTdHImIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0wKSBjb25zdDsKIyAzOTcgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIFBSSW50MzIgUkZpbmQoY29uc3QgY2hh
ciogYUNTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUklu
dDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZChjb25zdCBuc1N0ciYgYVN0cmlu
ZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNvdW50
PS0xKSBjb25zdDsKICBQUkludDMyIFJGaW5kKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkJv
b2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNvdW50PS0xKSBj
b25zdDsKIyA0MTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIFBSSW50
MzIgUkZpbmRDaGFyKFBSVW5pY2hhciBhQ2hhcixQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMy
IGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKIyA0MTkgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIFBSSW50MzIgUkZpbmRDaGFySW5TZXQoY29uc3Qg
Y2hhciogYVN0cmluZyxQUkludDMyIGFuT2Zmc2V0PS0xKSBjb25zdDsKICBQUkludDMyIFJGaW5k
Q2hhckluU2V0KGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkludDMyIGFuT2Zmc2V0PS0xKSBj
b25zdDsKICBQUkludDMyIFJGaW5kQ2hhckluU2V0KGNvbnN0IG5zU3RyJiBhU3RyaW5nLFBSSW50
MzIgYW5PZmZzZXQ9LTEpIGNvbnN0OwojIDQzNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
U3RyaW5nLmgiCiAgUFJJbnQzMiBDb21wYXJlV2l0aENvbnZlcnNpb24oY29uc3QgUFJVbmljaGFy
KiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsK
ICBQUkludDMyIENvbXBhcmVXaXRoQ29udmVyc2lvbihjb25zdCBjaGFyKiBhU3RyaW5nLFBSQm9v
bCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKCiAgUFJCb29sIEVxdWFs
c1dpdGhDb252ZXJzaW9uKGNvbnN0IG5zU3RyaW5nICZhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2Fz
ZT0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkJvb2wgRXF1YWxzV2l0aENvbnZlcnNp
b24oY29uc3QgY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFDb3Vu
dD0tMSkgY29uc3Q7CiAgUFJCb29sIEVxdWFsc1dpdGhDb252ZXJzaW9uKGNvbnN0IFBSVW5pY2hh
ciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7
CgogIFBSQm9vbCBFcXVhbHNJZ25vcmVDYXNlKGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBh
Q291bnQ9LTEpIGNvbnN0OwogIFBSQm9vbCBFcXVhbHNJZ25vcmVDYXNlKGNvbnN0IFBSVW5pY2hh
ciogYVN0cmluZyxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CgoKICB2b2lkIERlYnVnRHVtcCh2
b2lkKSBjb25zdDsKCnByaXZhdGU6CgoKICB2b2lkIG9wZXJhdG9yPSggUFJVbmljaGFyICk7CiAg
dm9pZCBBc3NpZ25XaXRoQ29udmVyc2lvbiggY2hhciApOwogIHZvaWQgQXNzaWduV2l0aENvbnZl
cnNpb24oIGNvbnN0IGNoYXIqLCBQUkludDMyPS0xICk7CiAgdm9pZCBBcHBlbmRXaXRoQ29udmVy
c2lvbiggY2hhciApOwogIHZvaWQgSW5zZXJ0V2l0aENvbnZlcnNpb24oIGNoYXIsIFBSVWludDMy
ICk7Cn07CgoKCgpleHRlcm4gaW50IGZwdXRzKGNvbnN0IG5zQ1N0cmluZyYgYVN0cmluZywgRklM
RSogb3V0KTsKIyA0NzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgpjbGFz
cyBuc0NBdXRvU3RyaW5nIDogcHVibGljIG5zQ1N0cmluZyB7CnB1YmxpYzoKCiAgICB2aXJ0dWFs
IH5uc0NBdXRvU3RyaW5nKCk7CgogICAgbnNDQXV0b1N0cmluZygpOwogICAgZXhwbGljaXQgbnND
QXV0b1N0cmluZyhjb25zdCBuc0NTdHJpbmcmICk7CiAgICBleHBsaWNpdCBuc0NBdXRvU3RyaW5n
KGNvbnN0IG5zQUNTdHJpbmcmIGFTdHJpbmcpOwogICAgZXhwbGljaXQgbnNDQXV0b1N0cmluZyhj
b25zdCBjaGFyKiBhU3RyaW5nKTsKICAgIG5zQ0F1dG9TdHJpbmcoY29uc3QgY2hhciogYVN0cmlu
ZyxQUkludDMyIGFMZW5ndGgpOwogICAgZXhwbGljaXQgbnNDQXV0b1N0cmluZyhjb25zdCBDQnVm
RGVzY3JpcHRvciYgYUJ1ZmZlcik7CgoKCgogICAgZXhwbGljaXQgbnNDQXV0b1N0cmluZyhuc1N1
YnN1bWVDU3RyJiBhU3Vic3VtZVN0cik7CgoKCiAgICBuc0NBdXRvU3RyaW5nJiBvcGVyYXRvcj0o
IGNvbnN0IG5zQ0F1dG9TdHJpbmcmIGFTdHJpbmcgKSB7IEFzc2lnbihhU3RyaW5nKTsgcmV0dXJu
ICp0aGlzOyB9CiAgcHJpdmF0ZToKICAgIHZvaWQgb3BlcmF0b3I9KCBQUlVuaWNoYXIgKTsKICBw
dWJsaWM6CiAgICBuc0NBdXRvU3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IG5zQUNTdHJpbmcmIGFS
ZWFkYWJsZSApIHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQoKICAgIG5zQ0F1
dG9TdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgY2hhciogYVB0ciApIHsgQXNzaWduKGFQdHIpOyBy
ZXR1cm4gKnRoaXM7IH0KICAgIG5zQ0F1dG9TdHJpbmcmIG9wZXJhdG9yPSggY2hhciBhQ2hhciAp
IHsgQXNzaWduKGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoKICAgIHZpcnR1YWwgdm9pZCBT
aXplT2YobnNJU2l6ZU9mSGFuZGxlciogYUhhbmRsZXIsIFBSVWludDMyKiBhUmVzdWx0KSBjb25z
dDsKCiAgICBjaGFyIG1CdWZmZXJba0RlZmF1bHRTdHJpbmdTaXplXTsKfTsKCgoKCgoKY2xhc3Mg
TlNfQ29udmVydFVDUzJ0b1VURjgKICAgICAgOiBwdWJsaWMgbnNDQXV0b1N0cmluZwoKCgogIHsK
ICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgTlNfQ29udmVydFVDUzJ0b1VURjgoIGNv
bnN0IFBSVW5pY2hhciogYVN0cmluZyApCiAgICAgICAgewogICAgICAgICAgQXBwZW5kKCBhU3Ry
aW5nLCB+UFJVaW50MzIoMCkgKTsKICAgICAgICB9CgogICAgICBOU19Db252ZXJ0VUNTMnRvVVRG
OCggY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLCBQUlVpbnQzMiBhTGVuZ3RoICkKICAgICAgICB7
CiAgICAgICAgICBBcHBlbmQoIGFTdHJpbmcsIGFMZW5ndGggKTsKICAgICAgICB9CgogICAgICBl
eHBsaWNpdAogICAgICBOU19Db252ZXJ0VUNTMnRvVVRGOCggUFJVbmljaGFyIGFDaGFyICkKICAg
ICAgICB7CiAgICAgICAgICBBcHBlbmQoICZhQ2hhciwgMSApOwogICAgICAgIH0KCiAgICAgIGV4
cGxpY2l0IE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBjb25zdCBuc0FTdHJpbmcmIGFTdHJpbmcgKTsK
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZvaWQgQXBwZW5kKCBjb25zdCBQUlVuaWNoYXIqIGFTdHJp
bmcsIFBSVWludDMyIGFMZW5ndGggKTsKCiAgICBwcml2YXRlOgoKICAgICAgTlNfQ29udmVydFVD
UzJ0b1VURjgoIGNoYXIgKTsKICAgICAgb3BlcmF0b3IgY29uc3QgY2hhciooKSBjb25zdDsKICB9
OwojIDU2NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCmNsYXNzIG5zU3Vi
c3VtZUNTdHIgOiBwdWJsaWMgbnNDU3RyaW5nIHsKcHVibGljOgogIGV4cGxpY2l0IG5zU3Vic3Vt
ZUNTdHIobnNTdHImIGFTdHJpbmcpOwogIG5zU3Vic3VtZUNTdHIoUFJVbmljaGFyKiBhU3RyaW5n
LFBSQm9vbCBhc3N1bWVPd25lcnNoaXAsUFJJbnQzMiBhTGVuZ3RoPS0xKTsKICBuc1N1YnN1bWVD
U3RyKGNoYXIqIGFTdHJpbmcsUFJCb29sIGFzc3VtZU93bmVyc2hpcCxQUkludDMyIGFMZW5ndGg9
LTEpOwoKICBuc1N1YnN1bWVDU3RyJiBvcGVyYXRvcj0oIGNvbnN0IG5zU3Vic3VtZUNTdHImIGFT
dHJpbmcgKSB7IEFzc2lnbihhU3RyaW5nKTsgcmV0dXJuICp0aGlzOyB9CiAgbnNTdWJzdW1lQ1N0
ciYgb3BlcmF0b3I9KCBjb25zdCBuc0FDU3RyaW5nJiBhUmVhZGFibGUgKSB7IEFzc2lnbihhUmVh
ZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgbnNTdWJzdW1lQ1N0ciYgb3BlcmF0b3I9KCBjb25z
dCBjaGFyKiBhUHRyICkgeyBBc3NpZ24oYVB0cik7IHJldHVybiAqdGhpczsgfQogIG5zU3Vic3Vt
ZUNTdHImIG9wZXJhdG9yPSggY2hhciBhQ2hhciApIHsgQXNzaWduKGFDaGFyKTsgcmV0dXJuICp0
aGlzOyB9CnByaXZhdGU6CiAgdm9pZCBvcGVyYXRvcj0oIFBSVW5pY2hhciApOwp9OwojIDI5ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGb250LmgiIDIKCgoKCgp0eXBlZGVmIFBSQm9vbCAo
Km5zRm9udEZhbWlseUVudW1GdW5jKShjb25zdCBuc1N0cmluZyYgYUZhbWlseSwgUFJCb29sIGFH
ZW5lcmljLCB2b2lkICphRGF0YSk7CgoKc3RydWN0IG5zRm9udCB7CgogIG5zU3RyaW5nIG5hbWU7
CgoKICBQUlVpbnQ4IHN0eWxlOwoKCiAgUFJVaW50OCB2YXJpYW50OwoKCiAgUFJVaW50MTYgd2Vp
Z2h0OwoKCgogIFBSVWludDggZGVjb3JhdGlvbnM7CgoKICBuc2Nvb3JkIHNpemU7CgoKICBuc0Zv
bnQoY29uc3QgY2hhciogYU5hbWUsIFBSVWludDggYVN0eWxlLCBQUlVpbnQ4IGFWYXJpYW50LAog
ICAgICAgICBQUlVpbnQxNiBhV2VpZ2h0LCBQUlVpbnQ4IGFEZWNvcmF0aW9uLCBuc2Nvb3JkIGFT
aXplKTsKCgogIG5zRm9udChjb25zdCBuc1N0cmluZyYgYU5hbWUsIFBSVWludDggYVN0eWxlLCBQ
UlVpbnQ4IGFWYXJpYW50LAogICAgICAgICBQUlVpbnQxNiBhV2VpZ2h0LCBQUlVpbnQ4IGFEZWNv
cmF0aW9uLCBuc2Nvb3JkIGFTaXplKTsKCgogIG5zRm9udChjb25zdCBuc0ZvbnQmIGFGb250KTsK
CiAgfm5zRm9udCgpOwoKICBQUkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc0ZvbnQmIGFPdGhlcikg
Y29uc3QgewogICAgcmV0dXJuIEVxdWFscyhhT3RoZXIpOwogIH0KCiAgUFJCb29sIEVxdWFscyhj
b25zdCBuc0ZvbnQmIGFPdGhlcikgY29uc3QgOwoKICBuc0ZvbnQmIG9wZXJhdG9yPShjb25zdCBu
c0ZvbnQmIGFPdGhlcik7CgoKCgoKICBQUkJvb2wgRW51bWVyYXRlRmFtaWxpZXMobnNGb250RmFt
aWx5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKSBjb25zdDsKICB2b2lkIEdldEZpcnN0RmFt
aWx5KG5zU3RyaW5nJiBhRmFtaWx5KSBjb25zdDsKfTsKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSUZvcm1Db250cm9sRnJhbWUuaCIgMgpjbGFzcyBuc0Zvcm1GcmFtZTsKY2xhc3Mg
bnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zU3RyaW5nOwpjbGFzcyBuc0lDb250ZW50OwojIDQ0ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybUNvbnRyb2xGcmFtZS5oIgpjbGFzcyBuc0lG
b3JtQ29udHJvbEZyYW1lIDogcHVibGljIG5zSVN1cHBvcnRzIHsKCnB1YmxpYzoKICBzdGF0aWMg
Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDM4ZWIz
OTgwLCAweDRkOTksIDB4MTFkMiwgeyAweDgwLCAweDNmLCAweDAsIDB4NjAsIDB4OCwgMHgxNSwg
MHhhNywgMHg5MSB9IH07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUo
UFJJbnQzMiogYVR5cGUpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lKG5z
U3RyaW5nKiBhTmFtZSkgPSAwOwoKICB2aXJ0dWFsIHZvaWQgU2V0Rm9jdXMoUFJCb29sIGFPbiA9
IDEsIFBSQm9vbCBhUmVwYWludCA9IDApID0gMDsKCiAgdmlydHVhbCB2b2lkIFNjcm9sbEludG9W
aWV3KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpID0gMDsKCiAgdmlydHVhbCB2b2lkIE1v
dXNlQ2xpY2tlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KSA9IDA7CgogIHZpcnR1YWwg
dm9pZCBSZXNldChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KSA9IDA7CgogIHZpcnR1YWwg
UFJCb29sIElzU3VjY2Vzc2Z1bChuc0lGb3JtQ29udHJvbEZyYW1lKiBhU3VibWl0dGVyKSA9IDA7
CgogIHZpcnR1YWwgUFJJbnQzMiBHZXRNYXhOdW1WYWx1ZXMoKSA9IDA7CgogIHZpcnR1YWwgUFJC
b29sIEdldE5hbWVzVmFsdWVzKFBSSW50MzIgYU1heE51bVZhbHVlcywgUFJJbnQzMiYgYU51bVZh
bHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTdHJpbmcqIGFWYWx1ZXMs
IG5zU3RyaW5nKiBhTmFtZXMpID0gMDsKCiAgdmlydHVhbCB2b2lkIFNldEZvcm1GcmFtZShuc0Zv
cm1GcmFtZSogYUZyYW1lKSA9IDA7CiMgNzkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lG
b3JtQ29udHJvbEZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdWdnZXN0ZWRTaXplKG5z
Y29vcmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpID0gMDsKIyA5NCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUZvcm1Db250cm9sRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlcXVp
cmVzV2lkZ2V0KFBSQm9vbCAmYVJlcXVpcmVzV2lkZ2V0KSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRGb250KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG5zRm9udComIGFGb250KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRGb3JtQ29udGVudChuc0lDb250ZW50KiYgYUNvbnRlbnQpIGNvbnN0ID0gMDsKIyAxMTYg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtQ29udHJvbEZyYW1lLmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXRQcm9wZXJ0eShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBuc0lB
dG9tKiBhTmFtZSwgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFWYWx1ZSkgPSAwOwojIDEyNiAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvcm1Db250cm9sRnJhbWUuaCIKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldFByb3BlcnR5KG5zSUF0b20qIGFOYW1lLCBuc0FXcml0YWJsZVN0cmluZyYg
YVZhbHVlKSA9IDA7CgoKCn07CiMgMjcgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIgMgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtTWFuYWdlci5oIiAxCiMgMjUgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtTWFuYWdlci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lGb3JtTWFuYWdlci5oIiAyCmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc0lGcmFtZTsK
IyAzOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvcm1NYW5hZ2VyLmgiCmNsYXNzIG5z
SUZvcm1NYW5hZ2VyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBjb25z
dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4NTkyZGFhMDEs
IDB4Y2IyMywgMHgxMWQxLCB7IDB4ODAsIDB4MmQsIDB4MCwgMHg2MCwgMHg4LCAweDE1LCAweGE3
LCAweDkxIH0gfTsgcmV0dXJuIGlpZDt9CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgT25SZXNldChu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KSA9IDA7CiMgNTQgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGb3JtTWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgT25TdWJtaXQobnNJ
UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJhbWUqIGFGcmFtZSkgPSAwOwoKfTsKIyAy
OCAibnNGb3JtQ29udHJvbEhlbHBlci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVN1cHBvcnRzLmgiIDEKIyAyOSAibnNGb3JtQ29udHJvbEhlbHBlci5oIiAyCiMgMSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
U3VwcG9ydHMuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0Lmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb2xvci5oIiAxCiMgMjYgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NvbG9yLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zY29yZS5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NvbG9yLmgi
IDIKCmNsYXNzIG5zU3RyaW5nOwoKCgp0eXBlZGVmIFBSVWludDMyIG5zY29sb3I7CiMgNzEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NvbG9yLmgiCmV4dGVybiAiQyIgUFJCb29sIE5TX0hl
eFRvUkdCKGNvbnN0IG5zU3RyaW5nJiBhQnVmLCBuc2NvbG9yKiBhUmVzdWx0KTsKCgoKCmV4dGVy
biAiQyIgUFJCb29sIE5TX0xvb3NlSGV4VG9SR0IoY29uc3QgbnNTdHJpbmcmIGFCdWYsIG5zY29s
b3IqIGFSZXN1bHQpOwoKCgpleHRlcm4gIkMiIFBSQm9vbCBOU19Db2xvck5hbWVUb1JHQihjb25z
dCBuc1N0cmluZyYgYUJ1ZiwgbnNjb2xvciogYVJlc3VsdCk7CgoKCmV4dGVybiAiQyIgdm9pZCBO
U19HZXQzRENvbG9ycyhuc2NvbG9yIGFSZXN1bHRbMl0sIG5zY29sb3IgYUNvbG9yKTsKCgpleHRl
cm4gIkMiIHZvaWQgTlNfR2V0U3BlY2lhbDNEQ29sb3JzKG5zY29sb3IgYVJlc3VsdFsyXSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29sb3IgYUJhY2tncm91bmRDb2xvciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29sb3IgYUJvcmRlckNvbG9yKTsK
CgoKZXh0ZXJuICJDIiBuc2NvbG9yIE5TX0JyaWdodGVuQ29sb3IobnNjb2xvciBpbkNvbG9yKTsK
CgoKZXh0ZXJuICJDIiBuc2NvbG9yIE5TX0RhcmtlbkNvbG9yKG5zY29sb3IgaW5Db2xvcik7CgoK
ZXh0ZXJuICJDIiBpbnQgTlNfR2V0QnJpZ2h0bmVzcyhQUlVpbnQ4IGFSZWQsIFBSVWludDggYUdy
ZWVuLCBQUlVpbnQ4IGFCbHVlKTsKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdp
ZGdldC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1vdXNlTGlzdGVuZXIu
aCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTW91c2VMaXN0ZW5lci5oIgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dVSUV2ZW50LmgiIDEKIyAyNiAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zR1VJRXZlbnQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNQb2ludC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1BvaW50
LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI3ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQb2ludC5oIiAyCgpzdHJ1Y3QgbnNQb2ludCB7CiAgbnNj
b29yZCB4LCB5OwoKCiAgbnNQb2ludCgpIHt9CiAgbnNQb2ludChjb25zdCBuc1BvaW50JiBhUG9p
bnQpIHt4ID0gYVBvaW50Lng7IHkgPSBhUG9pbnQueTt9CiAgbnNQb2ludChuc2Nvb3JkIGFYLCBu
c2Nvb3JkIGFZKSB7eCA9IGFYOyB5ID0gYVk7fQoKICB2b2lkIE1vdmVUbyhuc2Nvb3JkIGFYLCBu
c2Nvb3JkIGFZKSB7eCA9IGFYOyB5ID0gYVk7fQogIHZvaWQgTW92ZUJ5KG5zY29vcmQgYUR4LCBu
c2Nvb3JkIGFEeSkge3ggKz0gYUR4OyB5ICs9IGFEeTt9CgoKCiAgUFJCb29sIG9wZXJhdG9yPT0o
Y29uc3QgbnNQb2ludCYgYVBvaW50KSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh4ID09
IGFQb2ludC54KSAmJiAoeSA9PSBhUG9pbnQueSkpOwogIH0KICBQUkJvb2wgb3BlcmF0b3IhPShj
b25zdCBuc1BvaW50JiBhUG9pbnQpIGNvbnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKHggIT0g
YVBvaW50LngpIHx8ICh5ICE9IGFQb2ludC55KSk7CiAgfQogIG5zUG9pbnQgb3BlcmF0b3IrKGNv
bnN0IG5zUG9pbnQmIGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIG5zUG9pbnQoeCArIGFQb2lu
dC54LCB5ICsgYVBvaW50LnkpOwogIH0KICBuc1BvaW50IG9wZXJhdG9yLShjb25zdCBuc1BvaW50
JiBhUG9pbnQpIGNvbnN0IHsKICAgIHJldHVybiBuc1BvaW50KHggLSBhUG9pbnQueCwgeSAtIGFQ
b2ludC55KTsKICB9CiAgbnNQb2ludCYgb3BlcmF0b3IrPShjb25zdCBuc1BvaW50JiBhUG9pbnQp
IHsKICAgIHggKz0gYVBvaW50Lng7CiAgICB5ICs9IGFQb2ludC55OwogICAgcmV0dXJuICp0aGlz
OwogIH0KICBuc1BvaW50JiBvcGVyYXRvci09KGNvbnN0IG5zUG9pbnQmIGFQb2ludCkgewogICAg
eCAtPSBhUG9pbnQueDsKICAgIHkgLT0gYVBvaW50Lnk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQp9
OwoKCgoKCnN0cnVjdCBuc0Zsb2F0UG9pbnQgewogIGZsb2F0IHgsIHk7CgoKICBuc0Zsb2F0UG9p
bnQoKSB7fQogIG5zRmxvYXRQb2ludChjb25zdCBuc0Zsb2F0UG9pbnQmIGFQb2ludCkge3ggPSBh
UG9pbnQueDsgeSA9IGFQb2ludC55O30KICBuc0Zsb2F0UG9pbnQoZmxvYXQgYVgsIGZsb2F0IGFZ
KSB7eCA9IGFYOyB5ID0gYVk7fQoKICB2b2lkIE1vdmVUbyhmbG9hdCBhWCwgZmxvYXQgYVkpIHt4
ID0gYVg7IHkgPSBhWTt9CiAgdm9pZCBNb3ZlVG8obnNjb29yZCBhWCwgbnNjb29yZCBhWSkge3gg
PSAoZmxvYXQpYVg7IHkgPSAoZmxvYXQpYVk7fQogIHZvaWQgTW92ZUJ5KGZsb2F0IGFEeCwgZmxv
YXQgYUR5KSB7eCArPSBhRHg7IHkgKz0gYUR5O30KCgoKICBQUkJvb2wgb3BlcmF0b3I9PShjb25z
dCBuc0Zsb2F0UG9pbnQmIGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgoeCA9
PSBhUG9pbnQueCkgJiYgKHkgPT0gYVBvaW50LnkpKTsKICB9CiAgUFJCb29sIG9wZXJhdG9yIT0o
Y29uc3QgbnNGbG9hdFBvaW50JiBhUG9pbnQpIGNvbnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAo
KHggIT0gYVBvaW50LngpIHx8ICh5ICE9IGFQb2ludC55KSk7CiAgfQogIG5zRmxvYXRQb2ludCBv
cGVyYXRvcisoY29uc3QgbnNGbG9hdFBvaW50JiBhUG9pbnQpIGNvbnN0IHsKICAgIHJldHVybiBu
c0Zsb2F0UG9pbnQoeCArIGFQb2ludC54LCB5ICsgYVBvaW50LnkpOwogIH0KICBuc0Zsb2F0UG9p
bnQgb3BlcmF0b3ItKGNvbnN0IG5zRmxvYXRQb2ludCYgYVBvaW50KSBjb25zdCB7CiAgICByZXR1
cm4gbnNGbG9hdFBvaW50KHggLSBhUG9pbnQueCwgeSAtIGFQb2ludC55KTsKICB9CiAgbnNGbG9h
dFBvaW50JiBvcGVyYXRvcis9KGNvbnN0IG5zRmxvYXRQb2ludCYgYVBvaW50KSB7CiAgICB4ICs9
IGFQb2ludC54OwogICAgeSArPSBhUG9pbnQueTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgbnNG
bG9hdFBvaW50JiBvcGVyYXRvci09KGNvbnN0IG5zRmxvYXRQb2ludCYgYVBvaW50KSB7CiAgICB4
IC09IGFQb2ludC54OwogICAgeSAtPSBhUG9pbnQueTsKICAgIHJldHVybiAqdGhpczsKICB9Cn07
CgoKCgoKCnN0cnVjdCBuc1BhdGhQb2ludDogcHVibGljIG5zRmxvYXRQb2ludHsKCiAgUFJCb29s
IG1Jc09uQ3VydmU7CgoKICBuc1BhdGhQb2ludCgpIHt9CiAgbnNQYXRoUG9pbnQoY29uc3QgbnNQ
YXRoUG9pbnQmIGFQb2ludCkge3ggPSBhUG9pbnQueDsgeSA9IGFQb2ludC55O21Jc09uQ3VydmU9
YVBvaW50Lm1Jc09uQ3VydmU7fQogIG5zUGF0aFBvaW50KGZsb2F0IGFYLCBmbG9hdCBhWSkge3gg
PSBhWDsgeSA9IGFZO21Jc09uQ3VydmU9MTt9CiAgbnNQYXRoUG9pbnQoZmxvYXQgYVgsIGZsb2F0
IGFZLFBSQm9vbCBhSXNPbkN1cnZlKSB7eCA9IGFYOyB5ID0gYVk7bUlzT25DdXJ2ZT1hSXNPbkN1
cnZlO30KCn07CiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dVSUV2ZW50LmgiIDIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNSZWN0LmgiIDEKIyAyNyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zUmVjdC5oIgojIDEgIi9uZXdsaWIvaW5jbHVkZS9zdGRpby5oIiAx
IDMKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUmVjdC5oIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNSZWN0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNQb2ludC5o
IiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1JlY3QuaCIgMgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1NpemUuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNTaXplLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIg
MQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTaXplLmgiIDIKCgoKCnN0cnVjdCBu
c1NpemUgewogIG5zY29vcmQgd2lkdGgsIGhlaWdodDsKCgogIG5zU2l6ZSgpIHt9CiAgbnNTaXpl
KGNvbnN0IG5zU2l6ZSYgYVNpemUpIHt3aWR0aCA9IGFTaXplLndpZHRoOyBoZWlnaHQgPSBhU2l6
ZS5oZWlnaHQ7fQogIG5zU2l6ZShuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSB7d2lk
dGggPSBhV2lkdGg7IGhlaWdodCA9IGFIZWlnaHQ7fQoKICB2b2lkIFNpemVUbyhuc2Nvb3JkIGFX
aWR0aCwgbnNjb29yZCBhSGVpZ2h0KSB7d2lkdGggPSBhV2lkdGg7IGhlaWdodCA9IGFIZWlnaHQ7
fQogIHZvaWQgU2l6ZUJ5KG5zY29vcmQgYURlbHRhV2lkdGgsIG5zY29vcmQgYURlbHRhSGVpZ2h0
KSB7d2lkdGggKz0gYURlbHRhV2lkdGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgKz0gYURlbHRhSGVpZ2h0O30KCgoKICBQ
UkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc1NpemUmIGFTaXplKSBjb25zdCB7CiAgICByZXR1cm4g
KFBSQm9vbCkgKCh3aWR0aCA9PSBhU2l6ZS53aWR0aCkgJiYgKGhlaWdodCA9PSBhU2l6ZS5oZWln
aHQpKTsKICB9CiAgUFJCb29sIG9wZXJhdG9yIT0oY29uc3QgbnNTaXplJiBhU2l6ZSkgY29uc3Qg
ewogICAgcmV0dXJuIChQUkJvb2wpICgod2lkdGggIT0gYVNpemUud2lkdGgpIHx8IChoZWlnaHQg
IT0gYVNpemUuaGVpZ2h0KSk7CiAgfQogIG5zU2l6ZSBvcGVyYXRvcisoY29uc3QgbnNTaXplJiBh
U2l6ZSkgY29uc3QgewogICAgcmV0dXJuIG5zU2l6ZSh3aWR0aCArIGFTaXplLndpZHRoLCBoZWln
aHQgKyBhU2l6ZS5oZWlnaHQpOwogIH0KICBuc1NpemUgb3BlcmF0b3ItKGNvbnN0IG5zU2l6ZSYg
YVNpemUpIGNvbnN0IHsKICAgIHJldHVybiBuc1NpemUod2lkdGggLSBhU2l6ZS53aWR0aCwgaGVp
Z2h0IC0gYVNpemUuaGVpZ2h0KTsKICB9CiAgbnNTaXplJiBvcGVyYXRvcis9KGNvbnN0IG5zU2l6
ZSYgYVNpemUpIHt3aWR0aCArPSBhU2l6ZS53aWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlaWdodCArPSBhU2l6ZS5oZWlnaHQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7fQogIG5zU2l6ZSYgb3Bl
cmF0b3ItPShjb25zdCBuc1NpemUmIGFTaXplKSB7d2lkdGggLT0gYVNpemUud2lkdGg7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgLT0gYVNpemUuaGVp
Z2h0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICp0
aGlzO30KfTsKIyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUmVjdC5oIiAyCiMgMSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zTWFyZ2luLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zTWFyZ2luLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
Q29vcmQuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNNYXJnaW4uaCIgMgoK
c3RydWN0IG5zTWFyZ2luIHsKICBuc2Nvb3JkIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKCgog
IG5zTWFyZ2luKCkge30KICBuc01hcmdpbihjb25zdCBuc01hcmdpbiYgYU1hcmdpbikgeyp0aGlz
ID0gYU1hcmdpbjt9CiAgbnNNYXJnaW4obnNjb29yZCBhTGVmdCwgbnNjb29yZCBhVG9wLAogICAg
ICAgICAgIG5zY29vcmQgYVJpZ2h0LCBuc2Nvb3JkIGFCb3R0b20pIHtsZWZ0ID0gYUxlZnQ7IHRv
cCA9IGFUb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJp
Z2h0ID0gYVJpZ2h0OyBib3R0b20gPSBhQm90dG9tO30KCiAgdm9pZCBTaXplVG8obnNjb29yZCBh
TGVmdCwgbnNjb29yZCBhVG9wLAogICAgICAgICAgICAgIG5zY29vcmQgYVJpZ2h0LCBuc2Nvb3Jk
IGFCb3R0b20pIHtsZWZ0ID0gYUxlZnQ7IHRvcCA9IGFUb3A7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gYVJpZ2h0OyBib3R0b20gPSBhQm90
dG9tO30KICB2b2lkIFNpemVCeShuc2Nvb3JkIGFMZWZ0LCBuc2Nvb3JkIGFUb3AsCiAgICAgICAg
ICAgICAgbnNjb29yZCBhUmlnaHQsIG5zY29vcmQgYUJvdHRvbSkge2xlZnQgKz0gYUxlZnQ7IHRv
cCArPSBhVG9wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByaWdodCArPSBhUmlnaHQ7IGJvdHRvbSArPSBhQm90dG9tO30KCgoKICBQUkJvb2wgb3BlcmF0
b3I9PShjb25zdCBuc01hcmdpbiYgYU1hcmdpbikgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wp
ICgobGVmdCA9PSBhTWFyZ2luLmxlZnQpICYmICh0b3AgPT0gYU1hcmdpbi50b3ApICYmCiAgICAg
ICAgICAgICAgICAgICAgIChyaWdodCA9PSBhTWFyZ2luLnJpZ2h0KSAmJiAoYm90dG9tID09IGFN
YXJnaW4uYm90dG9tKSk7CiAgfQogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0IG5zTWFyZ2luJiBh
TWFyZ2luKSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKChsZWZ0ICE9IGFNYXJnaW4ubGVm
dCkgfHwgKHRvcCAhPSBhTWFyZ2luLnRvcCkgfHwKICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0
ICE9IGFNYXJnaW4ucmlnaHQpIHx8IChib3R0b20gIT0gYU1hcmdpbi5ib3R0b20pKTsKICB9CiAg
bnNNYXJnaW4gb3BlcmF0b3IrKGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdCB7CiAgICBy
ZXR1cm4gbnNNYXJnaW4obGVmdCArIGFNYXJnaW4ubGVmdCwgdG9wICsgYU1hcmdpbi50b3AsCiAg
ICAgICAgICAgICAgICAgICAgcmlnaHQgKyBhTWFyZ2luLnJpZ2h0LCBib3R0b20gKyBhTWFyZ2lu
LmJvdHRvbSk7CiAgfQogIG5zTWFyZ2luIG9wZXJhdG9yLShjb25zdCBuc01hcmdpbiYgYU1hcmdp
bikgY29uc3QgewogICAgcmV0dXJuIG5zTWFyZ2luKGxlZnQgLSBhTWFyZ2luLmxlZnQsIHRvcCAt
IGFNYXJnaW4udG9wLAogICAgICAgICAgICAgICAgICAgIHJpZ2h0IC0gYU1hcmdpbi5yaWdodCwg
Ym90dG9tIC0gYU1hcmdpbi5ib3R0b20pOwogIH0KICBuc01hcmdpbiYgb3BlcmF0b3IrPShjb25z
dCBuc01hcmdpbiYgYU1hcmdpbikge2xlZnQgKz0gYU1hcmdpbi5sZWZ0OwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wICs9IGFNYXJnaW4udG9wOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgKz0g
YU1hcmdpbi5yaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvdHRvbSArPSBhTWFyZ2luLmJvdHRvbTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczt9CiAgbnNNYXJnaW4mIG9wZXJh
dG9yLT0oY29uc3QgbnNNYXJnaW4mIGFNYXJnaW4pIHtsZWZ0IC09IGFNYXJnaW4ubGVmdDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAtPSBhTWFy
Z2luLnRvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJpZ2h0IC09IGFNYXJnaW4ucmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib3R0b20gLT0gYU1hcmdpbi5ib3R0b207CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7fQp9OwojIDMy
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNSZWN0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNVbml0Q29udmVyc2lvbi5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1VuaXRDb252ZXJzaW9uLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zY29yZS5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1VuaXRDb252ZXJz
aW9uLmgiIDIKIyAxICIvbmV3bGliL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAyNyAiL25ld2xpYi9p
bmNsdWRlL21hdGguaCIgMwojIDEgIi9uZXdsaWIvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAy
OCAiL25ld2xpYi9pbmNsdWRlL21hdGguaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKIyAxICIvbmV3
bGliL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAxIDMKIyAyNSAiL25ld2xpYi9pbmNsdWRlL2Jp
dHMvaHVnZV92YWwuaCIgMwojIDEgIi9uZXdsaWIvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAy
NiAiL25ld2xpYi9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMiAzCiMgMzQgIi9uZXdsaWIvaW5j
bHVkZS9tYXRoLmgiIDIgMwoKCgojIDEgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL25hbi5oIiAxIDMK
IyAzOCAiL25ld2xpYi9pbmNsdWRlL21hdGguaCIgMiAzCgoKIyAxICIvbmV3bGliL2luY2x1ZGUv
Yml0cy9tYXRoZGVmLmgiIDEgMwojIDI5ICIvbmV3bGliL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgi
IDMKdHlwZWRlZiBsb25nIGRvdWJsZSBmbG9hdF90OwoKdHlwZWRlZiBsb25nIGRvdWJsZSBkb3Vi
bGVfdDsKIyA0MSAiL25ld2xpYi9pbmNsdWRlL21hdGguaCIgMiAzCiMgNjMgIi9uZXdsaWIvaW5j
bHVkZS9tYXRoLmgiIDMKIyAxICIvbmV3bGliL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAz
CiMgNTQgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUg
YWNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zIChkb3VibGUg
X194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19hc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3Vi
bGUgYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuIChkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgY29zIChkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2NvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91
YmxlIHNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW4gKGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZv
aWQgc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIHRo
cm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3Npbngs
IGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX3NpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUg
YXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbmggKGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGRvdWJsZSBleHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhw
IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX3BvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBmcmV4cCAo
ZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Zy
ZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3Vi
bGUgbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2xkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGRvdWJsZSBsb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9n
IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzEwIChkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsK
CgpleHRlcm4gZG91YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX21vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBleHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBs
b2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cxcCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2xvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGRvdWJsZSBleHAyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIg
KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMiAoZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGRvdWJsZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fcG93IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpl
eHRlcm4gZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
c3FydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgaHlwb3QgKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9faHlwb3QgKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBm
YWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4
dGVybiBkb3VibGUgX19mYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19mbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRv
dWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUg
X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBp
bnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCmV4dGVybiBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19kcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19zaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91
YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3Qg
Y2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpl
eHRlcm4gaW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91
YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpleHRl
cm4gZG91YmxlIGoxIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJs
ZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2puIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAg
KGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsK
ZXh0ZXJuIGRvdWJsZSB5MSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChk
b3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX195biAoaW50LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBk
b3VibGUgZXJmIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUp
IHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19lcmZjIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91
YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGRvdWJsZSB0Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X190Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGdhbW1hIChkb3Vi
bGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19yaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91
YmxlIG5leHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194
LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRl
cm4gZG91YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2Fy
ZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3Vi
bGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwg
ZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gs
IGRvdWJsZSBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJsZSBfX3gs
IGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBf
X3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194
LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gZG91YmxlIHNjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4
dGVybiBkb3VibGUgX19zY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgp
OwoKCgpleHRlcm4gZG91YmxlIG5lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19uZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91
YmxlIHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChk
b3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1
bmMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
CmV4dGVybiBkb3VibGUgcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVv
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSwgaW50ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194KSB0
aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgaW50IF9fbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBp
bnQgbGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9f
bGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91
YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGltIChkb3Vi
bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91Ymxl
IF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUg
X194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBf
X3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91
YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CmV4dGVybiBpbnQgX19zaWduYml0IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194
LCBkb3VibGUgX195LCBkb3VibGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAo
ZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7CiMgNjQgIi9uZXds
aWIvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDgyICIvbmV3bGliL2luY2x1ZGUvbWF0aC5oIiAzCiMg
MSAiL25ld2xpYi9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvbmV3bGliL2lu
Y2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0
ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2lu
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRl
cm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX2F0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBm
bG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jb3NmIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQg
dGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19z
aW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NmIChmbG9h
dCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gZmxvYXQgY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hm
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmhmIChmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19zaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVy
biBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4
dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fz
aW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gZmxvYXQgZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGV4cDEwZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwMTBmIChmbG9hdCBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGZsb2F0IHBvdzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZnJleHBm
IChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Zy
ZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9h
dCBsZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19sZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVy
biBmbG9hdCBsb2dmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2dmIChm
bG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxMGYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRl
cm4gZmxvYXQgbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX21vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIHRocm93ICgpOwoKCgpl
eHRlcm4gZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19l
eHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzFwZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKCmV4dGVybiBmbG9hdCBsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZXhwMmYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cDJmIChmbG9hdCBfX3gpIHRocm93
ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBwb3dm
IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Bvd2YgKGZs
b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NxcnRmIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19jYnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNlaWxmIChm
bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jZWlsZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsKCgpleHRlcm4gZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mYWJzZiAoZmxvYXQgX194KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZsb29yZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3JmIChmbG9hdCBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19mbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVmIChmbG9hdCBfX3Zh
bHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50
IGlzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBm
bG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19kcmVtZiAoZmxvYXQgX194LCBmbG9h
dCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gZmxvYXQgY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jb3B5c2ln
bmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCgpleHRlcm4gZmxvYXQgbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19j
b25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CgoKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0IF9fdmFsdWUp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgajBm
IChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2owZiAoZmxvYXQpIHRocm93ICgpOwpl
eHRlcm4gZmxvYXQgajFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2oxZiAoZmxv
YXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgam5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkwZiAo
ZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195MGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0
ZXJuIGZsb2F0IHkxZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195MWYgKGZsb2F0
KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGVy
ZmYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpIHRocm93ICgp
OwpleHRlcm4gZmxvYXQgZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJm
Y2YgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKGZsb2F0KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgpleHRlcm4gZmxv
YXQgdGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9h
dCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQg
bGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fbGdhbW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGZsb2F0IHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yaW50
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbmV4dGFmdGVyZiAoZmxvYXQg
X194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0
ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBmbG9hdCBuZXh0dG93YXJkZiAoZmxv
YXQgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9h
dCByZW1haW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX3JlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGZsb2F0IHNjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19zY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBm
bG9hdCBzY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19zY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGls
b2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGlu
dCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmxuZiAoZmxvYXQgX194LCBsb25n
IGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGZsb2F0IHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fcm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdHJ1bmNm
IChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu
IGZsb2F0IF9fdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgoKCmV4dGVybiBmbG9hdCByZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwg
aW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JlbXF1b2YgKGZsb2F0IF9feCwg
ZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxy
aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRmIChmbG9h
dCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRmIChmbG9hdCBfX3gp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBpbnQgX19scm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9u
ZyBsb25nIGludCBsbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgX19sbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZk
aW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZkaW1m
IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtYXhmIChm
bG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtYXhmIChmbG9h
dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtaW5mIChmbG9hdCBfX3gs
IGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5ZiAoZmxvYXQg
X192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0
ZXJuIGludCBfX3NpZ25iaXRmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0IGZtYWYgKGZsb2F0IF9feCwgZmxv
YXQgX195LCBmbG9hdCBfX3opIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWFmIChmbG9hdCBf
X3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAoKTsKIyA4MyAiL25ld2xpYi9pbmNsdWRl
L21hdGguaCIgMiAzCiMgOTkgIi9uZXdsaWIvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvbmV3bGli
L2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi9uZXdsaWIvaW5jbHVkZS9iaXRz
L21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CmV4dGVybiBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRvdWJsZSBf
X3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2wg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2wgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lubCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBzaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg
ZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9p
ZCBfX3NpbmNvc2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBk
b3VibGUgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NobCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zaGwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2luaGwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmhsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5obCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2hsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHAxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3cxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4
cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsIChsb25nIGRvdWJs
ZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxk
ZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2xkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBtb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAq
X19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbW9kZmwgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJs
ZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUg
bG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19s
b2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxv
Z2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2di
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHAy
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMmwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzJsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cybCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvd2wgKGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4
dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlwb3RsIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2JydGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NicnRsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2VpbGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NlaWxsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmYWJzbCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbG9vcmwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Zt
b2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IF9faXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxvbmcgZG91YmxlIF9f
dmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBp
bnQgaXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
dGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3B5c2lnbmwgKGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19u
YW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFubCAo
bG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRv
dWJsZSBqMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajFs
IChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwgbG9u
ZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9uZyBk
b3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpl
eHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUg
eW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feW5s
IChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXJm
bCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZsIChsb25n
IGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAobG9uZyBkb3VibGUp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3VibGUpIHRocm93
ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBsb25nIGRvdWJsZSB0Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX3RnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBs
b25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRv
dWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdh
bXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0ZXJsIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0
ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19uZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IHJlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X3NjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50
IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50
IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibG5sIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBuZWFy
YnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19u
ZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3Vi
bGUgcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19yb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJs
ZSB0cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IHJlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBp
bnQgbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19s
cmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxs
cmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9f
bGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxy
b3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3Vu
ZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91
bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xs
cm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg
ZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1heGwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3Vi
bGUgZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChsb25nIGRvdWJsZSBfX3Zh
bHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g
aW50IF9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1hbCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
LCBsb25nIGRvdWJsZSBfX3opIHRocm93ICgpOwojIDEwMCAiL25ld2xpYi9pbmNsdWRlL21hdGgu
aCIgMiAzCiMgMTEzICIvbmV3bGliL2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiBpbnQgc2lnbmdh
bTsKIyAxNTQgIi9uZXdsaWIvaW5jbHVkZS9tYXRoLmgiIDMKZW51bQogIHsKICAgIEZQX05BTiwK
CiAgICBGUF9JTkZJTklURSwKCiAgICBGUF9aRVJPLAoKICAgIEZQX1NVQk5PUk1BTCwKCiAgICBG
UF9OT1JNQUwKCiAgfTsKIyAyNDAgIi9uZXdsaWIvaW5jbHVkZS9tYXRoLmgiIDMKdHlwZWRlZiBl
bnVtCnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAogIF9J
U09DXwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9M
SUJfVkVSU0lPTjsKIyAyNjMgIi9uZXdsaWIvaW5jbHVkZS9tYXRoLmgiIDMKc3RydWN0IF9fZXhj
ZXB0aW9uCgoKCiAgewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFy
ZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50
IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93ICgpOwojIDM1MCAiL25l
d2xpYi9pbmNsdWRlL21hdGguaCIgMwojIDEgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL21hdGhpbmxp
bmUuaCIgMSAzCiMgMTI3ICIvbmV3bGliL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19p
bmxpbmUgaW50Cl9fc2lnbmJpdGYgKGZsb2F0IF9feCkgdGhyb3cgKCkKewogIF9fZXh0ZW5zaW9u
X18gdW5pb24geyBmbG9hdCBfX2Y7IGludCBfX2k7IH0gX191ID0geyBfX2Y6IF9feCB9OwogIHJl
dHVybiBfX3UuX19pIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWduYml0IChkb3VibGUgX194KSB0
aHJvdyAoKQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07
IH0gX191ID0geyBfX2Q6IF9feCB9OwogIHJldHVybiBfX3UuX19pWzFdIDwgMDsKfQpfX2lubGlu
ZSBpbnQKX19zaWduYml0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNp
b25fXyB1bmlvbiB7IGxvbmcgZG91YmxlIF9fbDsgaW50IF9faVszXTsgfSBfX3UgPSB7IF9fbDog
X194IH07CiAgcmV0dXJuIChfX3UuX19pWzJdICYgMHg4MDAwKSAhPSAwOwp9CiMgMjkxICIvbmV3
bGliL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIF9fc2duIChk
b3VibGUpIHRocm93ICgpOyBfX2lubGluZSBkb3VibGUgX19zZ24gKGRvdWJsZSBfX3gpIHRocm93
ICgpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7
IH0gX19pbmxpbmUgZmxvYXQgX19zZ25mIChmbG9hdCkgdGhyb3cgKCk7IF9faW5saW5lIGZsb2F0
IF9fc2duZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDog
KF9feCA+IDAuMCA/IDEuMCA6IC0xLjApOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAo
bG9uZyBkb3VibGUpIHRocm93ICgpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAw
LjAgPyAxLjAgOiAtMS4wKTsgfQojIDQyNSAiL25ld2xpYi9pbmNsdWRlL2JpdHMvbWF0aGlubGlu
ZS5oIiAzCl9faW5saW5lIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhy
b3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18g
KCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgx
KSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwg
ZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNt
IF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUi
IChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91Ymxl
IGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVn
aXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6
ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJu
IF9fdmFsdWU7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9f
eSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs
dWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAo
X194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CgoKX19pbmxpbmUg
ZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIg
bG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAi
Zm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIw
IiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5s
aW5lIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQi
ICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDog
IjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19p
bmxpbmUgbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRp
bGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIi
IDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyBy
ZXR1cm4gX192YWx1ZTsgfQojIDQ0MCAiL25ld2xpYi9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5o
IiAzCl9faW5saW5lIGRvdWJsZSBzcXJ0IChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVy
IGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19y
ZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGZsb2F0IHNx
cnRmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNt
IF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJl
dHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3Zv
bGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4g
X19yZXN1bHQ7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgX19zcXJ0bCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0
aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19y
ZXN1bHQ7IH0KCgpfX2lubGluZSBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyBy
ZXR1cm4gX19idWlsdGluX2ZhYnMgKF9feCk7IH0KX19pbmxpbmUgZmxvYXQgZmFic2YgKGZsb2F0
IF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNmIChfX3gpOyB9Cl9faW5saW5l
IGxvbmcgZG91YmxlIGZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9f
YnVpbHRpbl9mYWJzbCAoX194KTsgfQpfX2lubGluZSBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQoj
IDQ2NiAiL25ld2xpYi9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJs
ZSBhdGFuIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsg
X19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIw
IiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgZmxvYXQgYXRh
bmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20g
X192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194
KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRh
bmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jl
c3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0
KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KCl9faW5saW5lIGxv
bmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgX19pbmxpbmUgbG9uZyBk
b3VibGUgX19zZ24xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IF9fZXh0ZW5zaW9uX18g
dW5pb24geyBsb25nIGRvdWJsZSBfX3hsZDsgdW5zaWduZWQgaW50IF9feGlbM107IH0gX19uID0g
eyBfX3hsZDogX194IH07IF9fbi5fX3hpWzJdID0gKF9fbi5fX3hpWzJdICYgMHg4MDAwKSB8IDB4
M2ZmZjsgX19uLl9feGlbMV0gPSAweDgwMDAwMDAwOyBfX24uX194aVswXSA9IDA7IHJldHVybiBf
X24uX194bGQ7IH0KIyA0OTIgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpf
X2lubGluZSBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192
b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZu
c3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0
MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2Fz
bSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9f
YXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1
ZTsgfSBfX2lubGluZSBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3
OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxl
ICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8
IDB4MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7
IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gp
KTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBf
X3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7
IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0g
KF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDog
OiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192
YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIg
KF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1MDMgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL21h
dGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkg
eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0
IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBf
X3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYg
MHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChf
X2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDog
IjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7
IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93
ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBz
aG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19h
c20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19j
dyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJt
IiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVl
KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j
dykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9s
YXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg
aW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykp
OyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgi
ZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQi
IDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cg
JTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1MjEgIi9uZXdsaWIvaW5j
bHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUKbGRleHAgKGRvdWJsZSBf
X3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBf
X2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCks
ICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KIyA1MzkgIi9uZXds
aWIvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgbG9nMXAgKGRv
dWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9f
ZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFs
dWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxu
XHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAi
c3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgbG9nMXBmIChmbG9hdCBf
X3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wg
KF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBs
b2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJm
eGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSki
KTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9f
ZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFs
dWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxu
XHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAi
c3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1NTMgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL21h
dGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgp
IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cx
cGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkg
KiBfX3NnbjFsIChfX3gpKTsgfSBfX2lubGluZSBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkgdGhy
b3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4g
KGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjApICsg
X195KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGFzaW5obCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFi
c2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195
ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0KCgoKCl9faW5saW5lIGRv
dWJsZSBhY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gbG9nbCAoX194ICsgX19z
cXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9IF9faW5saW5lIGZsb2F0
IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3NxcnRs
IChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0gX19pbmxpbmUgbG9uZyBkb3Vi
bGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIGxvZ2wgKF9feCAr
IF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfQoKCl9faW5saW5l
IGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJs
ZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kp
IC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBfX2lubGluZSBmbG9hdCBhdGFuaGYg
KGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNs
IChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkp
ICogX19zZ24xbCAoX194KTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChf
X3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICog
X19zZ24xbCAoX194KTsgfQoKCgoKX19pbmxpbmUgZG91YmxlIGh5cG90IChkb3VibGUgX194LCBk
b3VibGUgX195KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBf
X3kpOyB9IF9faW5saW5lIGZsb2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93
ICgpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0gX19pbmxpbmUg
bG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhy
b3cgKCkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsgX195ICogX195KTsgfQoKX19pbmxp
bmUgZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxl
X18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAo
X194KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gp
IHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBk
b3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChf
X2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9f
aW5saW5lIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVn
aXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBf
X2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChf
X3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgNTgzICIvbmV3bGliL2lu
Y2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZmxvYXQKbGRleHBmIChmbG9hdCBf
X3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBf
X2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCks
ICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KCl9faW5saW5lIGxv
bmcgZG91YmxlCmxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX195KSB0aHJvdyAoKQp7CiAg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxl
IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7
IHJldHVybiBfX3ZhbHVlOwp9CiMgNjA3ICIvbmV3bGliL2luY2x1ZGUvYml0cy9tYXRoaW5saW5l
LmgiIDMKX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpCnsKICBs
b25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbCAlMCIgOiAi
PW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19scmludHJlczsK
fQpfX2lubGluZSBsb25nIGludApscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIGxvbmcg
aW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsICUwIiA6ICI9bSIg
KF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xyaW50cmVzOwp9Cl9f
aW5saW5lIGxvbmcgaW50CmxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgbG9u
ZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAiIDogIj1t
IiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbHJpbnRyZXM7Cn0K
IyA2MzAgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBsb25n
IGxvbmcgaW50CmxscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCkKewogIGxvbmcgbG9uZyBpbnQg
X19sbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChf
X2xscmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9Cl9f
aW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgbG9u
ZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGxsICUw
IiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19sbHJp
bnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRp
bGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0
Iik7IHJldHVybiBfX2xscmludHJlczsKfQoKCgoKCgoKX19pbmxpbmUgZG91YmxlIGRyZW0gKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7
IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0x
XG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVl
KSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJl
dHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGRyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xv
YmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVheFxu
XHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVy
ZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19p
bmxpbmUgbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9i
YmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5c
dCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJl
ZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfQojIDY2
NSAiL25ld2xpYi9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGludApfX2Zp
bml0ZSAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIHJldHVybiAoX19leHRlbnNpb25fXwogICAg
ICAgICAgKCgoKCh1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0pIHtfX2Q6IF9feH0p
Ll9faVsxXQogICAgICAgICAgICAgfCAweDgwMGZmZmZmdSkgKyAxKSA+PiAzMSkpOwp9CiMgMzUx
ICIvbmV3bGliL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA0MTEgIi9uZXdsaWIvaW5jbHVkZS9tYXRo
LmgiIDMKfQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNVbml0Q29udmVyc2lvbi5o
IiAyCiMgMzkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1VuaXRDb252ZXJzaW9uLmgiCmlu
bGluZSBuc2Nvb3JkIE5TVG9Db29yZEZsb29yKGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAu
MGYgPD0gYVZhbHVlKSA/IG5zY29vcmQoYVZhbHVlKSA6IG5zY29vcmQoYVZhbHVlIC0gMC45OTk5
OTk5OTk5OTk5OTk5ZikpOwp9CgppbmxpbmUgbnNjb29yZCBOU1RvQ29vcmRDZWlsKGZsb2F0IGFW
YWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IG5zY29vcmQoYVZhbHVlICsgMC45
OTk5OTk5OTk5OTk5OTk5ZikgOiBuc2Nvb3JkKGFWYWx1ZSkpOwp9CgppbmxpbmUgbnNjb29yZCBO
U1RvQ29vcmRSb3VuZChmbG9hdCBhVmFsdWUpCnsKICByZXR1cm4gKCgwLjBmIDw9IGFWYWx1ZSkg
PyBuc2Nvb3JkKGFWYWx1ZSArIDAuNWYpIDogbnNjb29yZChhVmFsdWUgLSAwLjVmKSk7Cn0KCmlu
bGluZSBuc2Nvb3JkIE5TVG9Db29yZFJvdW5kRXhjbHVzaXZlKGZsb2F0IGFWYWx1ZSkKewogIHJl
dHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IG5zY29vcmQoYVZhbHVlICsgMC40OTk5OTk5OTk5OTk5
OTk5ZikgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQoYVZhbHVlIC0gMC40
OTk5OTk5OTk5OTk5OTk5ZikpOwp9CgoKCgoKaW5saW5lIFBSSW50MzIgTlNUb0ludEZsb29yKGZs
b2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IFBSSW50MzIoYVZhbHVl
KSA6IFBSSW50MzIoYVZhbHVlIC0gMC45OTk5OTk5OTk5OTk5OTk5ZikpOwp9CgppbmxpbmUgUFJJ
bnQzMiBOU1RvSW50Q2VpbChmbG9hdCBhVmFsdWUpCnsKICByZXR1cm4gKCgwLjBmIDw9IGFWYWx1
ZSkgPyBQUkludDMyKGFWYWx1ZSArIDAuOTk5OTk5OTk5OTk5OTk5OWYpIDogUFJJbnQzMihhVmFs
dWUpKTsKfQoKaW5saW5lIFBSSW50MzIgTlNUb0ludFJvdW5kKGZsb2F0IGFWYWx1ZSkKewogIHJl
dHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IFBSSW50MzIoYVZhbHVlICsgMC41ZikgOiBQUkludDMy
KGFWYWx1ZSAtIDAuNWYpKTsKfQoKaW5saW5lIFBSSW50MzIgTlNUb0ludFJvdW5kRXhjbHVzaXZl
KGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IFBSSW50MzIoYVZh
bHVlICsgMC40OTk5OTk5OTk5OTk5OTk5ZikgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBSSW50MzIoYVZhbHVlIC0gMC40OTk5OTk5OTk5OTk5OTk5ZikpOwp9CgoKCgoKaW5saW5lIG5z
Y29vcmQgTlNGbG9hdFBvaW50c1RvVHdpcHMoZmxvYXQgYVBvaW50cykKewogIHJldHVybiBOU1Rv
Q29vcmRSb3VuZChhUG9pbnRzICogMjAuMGYpOwp9CgppbmxpbmUgbnNjb29yZCBOU0ludFBvaW50
c1RvVHdpcHMoUFJJbnQzMiBhUG9pbnRzKQp7CiAgcmV0dXJuIG5zY29vcmQoYVBvaW50cyAqIDIw
KTsKfQoKaW5saW5lIFBSSW50MzIgTlNUd2lwc1RvSW50UG9pbnRzKG5zY29vcmQgYVR3aXBzKQp7
CiAgcmV0dXJuIE5TVG9JbnRSb3VuZChhVHdpcHMgLyAyMC4wZik7Cn0KCmlubGluZSBQUkludDMy
IE5TVHdpcHNUb0Zsb29ySW50UG9pbnRzKG5zY29vcmQgYVR3aXBzKQp7CiAgcmV0dXJuIE5TVG9J
bnRGbG9vcihhVHdpcHMgLyAyMC4wZik7Cn0KCmlubGluZSBQUkludDMyIE5TVHdpcHNUb0NlaWxJ
bnRQb2ludHMobnNjb29yZCBhVHdpcHMpCnsKICByZXR1cm4gTlNUb0ludENlaWwoYVR3aXBzIC8g
MjAuMGYpOwp9CgppbmxpbmUgZmxvYXQgTlNUd2lwc1RvRmxvYXRQb2ludHMobnNjb29yZCBhVHdp
cHMpCnsKICByZXR1cm4gKGZsb2F0KGFUd2lwcykgLyAyMC4wZik7Cn0KCgoKCmlubGluZSBuc2Nv
b3JkIE5TRmxvYXRQaXhlbHNUb1R3aXBzKGZsb2F0IGFQaXhlbHMsIGZsb2F0IGFUd2lwc1BlclBp
eGVsKQp7CiAgcmV0dXJuIE5TVG9Db29yZFJvdW5kKGFQaXhlbHMgKiBhVHdpcHNQZXJQaXhlbCk7
Cn0KCmlubGluZSBuc2Nvb3JkIE5TSW50UGl4ZWxzVG9Ud2lwcyhQUkludDMyIGFQaXhlbHMsIGZs
b2F0IGFUd2lwc1BlclBpeGVsKQp7CiAgcmV0dXJuIE5TVG9Db29yZFJvdW5kKGZsb2F0KGFQaXhl
bHMpICogYVR3aXBzUGVyUGl4ZWwpOwp9CgppbmxpbmUgZmxvYXQgTlNUd2lwc1RvRmxvYXRQaXhl
bHMobnNjb29yZCBhVHdpcHMsIGZsb2F0IGFQaXhlbHNQZXJUd2lwKQp7CiAgcmV0dXJuIChmbG9h
dChhVHdpcHMpICogYVBpeGVsc1BlclR3aXApOwp9CgppbmxpbmUgUFJJbnQzMiBOU1R3aXBzVG9J
bnRQaXhlbHMobnNjb29yZCBhVHdpcHMsIGZsb2F0IGFQaXhlbHNQZXJUd2lwKQp7CiAgcmV0dXJu
IE5TVG9JbnRSb3VuZChmbG9hdChhVHdpcHMpICogYVBpeGVsc1BlclR3aXApOwp9CgoKCgppbmxp
bmUgbnNjb29yZCBOU1VuaXRzVG9Ud2lwcyhmbG9hdCBhVmFsdWUsIGZsb2F0IGFQb2ludHNQZXJV
bml0KQp7CiAgcmV0dXJuIE5TVG9Db29yZFJvdW5kKGFWYWx1ZSAqIGFQb2ludHNQZXJVbml0ICog
MjAuMGYpOwp9CgppbmxpbmUgZmxvYXQgTlNUd2lwc1RvVW5pdHMobnNjb29yZCBhVHdpcHMsIGZs
b2F0IGFVbml0c1BlclBvaW50KQp7CiAgcmV0dXJuIChhVHdpcHMgKiAoYVVuaXRzUGVyUG9pbnQg
LyAyMC4wZikpOwp9CiMgMzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1JlY3QuaCIgMgoK
c3RydWN0IG5zUmVjdCB7CiAgbnNjb29yZCB4LCB5OwogIG5zY29vcmQgd2lkdGgsIGhlaWdodDsK
CgogIG5zUmVjdCgpIDogeCgwKSwgeSgwKSwgd2lkdGgoMCksIGhlaWdodCgwKSB7fQogIG5zUmVj
dChjb25zdCBuc1JlY3QmIGFSZWN0KSB7KnRoaXMgPSBhUmVjdDt9CiAgbnNSZWN0KGNvbnN0IG5z
UG9pbnQmIGFPcmlnaW4sIGNvbnN0IG5zU2l6ZSAmYVNpemUpIHt4ID0gYU9yaWdpbi54OyB5ID0g
YU9yaWdpbi55OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2lkdGggPSBhU2l6ZS53aWR0aDsgaGVpZ2h0ID0gYVNpemUuaGVpZ2h0O30KICBu
c1JlY3QobnNjb29yZCBhWCwgbnNjb29yZCBhWSwgbnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhl
aWdodCkge3ggPSBhWDsgeSA9IGFZOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBhV2lkdGg7IGhlaWdodCA9
IGFIZWlnaHQ7fQoKCgogIFBSQm9vbCBJc0VtcHR5KCkgY29uc3QgewogICAgcmV0dXJuIChQUkJv
b2wpICgod2lkdGggPD0gMCkgfHwgKGhlaWdodCA8PSAwKSk7CiAgfQogIHZvaWQgRW1wdHkoKSB7
d2lkdGggPSBoZWlnaHQgPSAwO30KCgogIFBSQm9vbCBDb250YWlucyhjb25zdCBuc1JlY3QmIGFS
ZWN0KSBjb25zdDsKICBQUkJvb2wgQ29udGFpbnMobnNjb29yZCBhWCwgbnNjb29yZCBhWSkgY29u
c3Q7CiAgUFJCb29sIENvbnRhaW5zKGNvbnN0IG5zUG9pbnQmIGFQb2ludCkgY29uc3Qge3JldHVy
biBDb250YWlucyhhUG9pbnQueCwgYVBvaW50LnkpO30KCgoKICBQUkJvb2wgSW50ZXJzZWN0cyhj
b25zdCBuc1JlY3QmIGFSZWN0KSBjb25zdDsKCgoKCgoKICBQUkJvb2wgSW50ZXJzZWN0UmVjdChj
b25zdCBuc1JlY3QmIGFSZWN0MSwgY29uc3QgbnNSZWN0JiBhUmVjdDIpOwoKCgoKCgogIFBSQm9v
bCBVbmlvblJlY3QoY29uc3QgbnNSZWN0JiBhUmVjdDEsIGNvbnN0IG5zUmVjdCYgYVJlY3QyKTsK
CgogIHZvaWQgU2V0UmVjdChuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZLCBuc2Nvb3JkIGFXaWR0aCwg
bnNjb29yZCBhSGVpZ2h0KSB7CiAgICB4ID0gYVg7IHkgPSBhWTsgd2lkdGggPSBhV2lkdGg7IGhl
aWdodCA9IGFIZWlnaHQ7CiAgfQogIHZvaWQgTW92ZVRvKG5zY29vcmQgYVgsIG5zY29vcmQgYVkp
IHt4ID0gYVg7IHkgPSBhWTt9CiAgdm9pZCBNb3ZlVG8oY29uc3QgbnNQb2ludCYgYVBvaW50KSB7
eCA9IGFQb2ludC54OyB5ID0gYVBvaW50Lnk7fQogIHZvaWQgTW92ZUJ5KG5zY29vcmQgYUR4LCBu
c2Nvb3JkIGFEeSkge3ggKz0gYUR4OyB5ICs9IGFEeTt9CiAgdm9pZCBTaXplVG8obnNjb29yZCBh
V2lkdGgsIG5zY29vcmQgYUhlaWdodCkge3dpZHRoID0gYVdpZHRoOyBoZWlnaHQgPSBhSGVpZ2h0
O30KICB2b2lkIFNpemVUbyhjb25zdCBuc1NpemUmIGFTaXplKSB7U2l6ZVRvKGFTaXplLndpZHRo
LCBhU2l6ZS5oZWlnaHQpO30KICB2b2lkIFNpemVCeShuc2Nvb3JkIGFEZWx0YVdpZHRoLCBuc2Nv
b3JkIGFEZWx0YUhlaWdodCkge3dpZHRoICs9IGFEZWx0YVdpZHRoOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ICs9IGFEZWx0
YUhlaWdodDt9CgoKICB2b2lkIEluZmxhdGUobnNjb29yZCBhRHgsIG5zY29vcmQgYUR5KTsKICB2
b2lkIEluZmxhdGUoY29uc3QgbnNTaXplJiBhU2l6ZSkge0luZmxhdGUoYVNpemUud2lkdGgsIGFT
aXplLmhlaWdodCk7fQogIHZvaWQgSW5mbGF0ZShjb25zdCBuc01hcmdpbiYgYU1hcmdpbik7CgoK
ICB2b2lkIERlZmxhdGUobnNjb29yZCBhRHgsIG5zY29vcmQgYUR5KTsKICB2b2lkIERlZmxhdGUo
Y29uc3QgbnNTaXplJiBhU2l6ZSkge0RlZmxhdGUoYVNpemUud2lkdGgsIGFTaXplLmhlaWdodCk7
fQogIHZvaWQgRGVmbGF0ZShjb25zdCBuc01hcmdpbiYgYU1hcmdpbik7CgoKCiAgUFJCb29sIG9w
ZXJhdG9yPT0oY29uc3QgbnNSZWN0JiBhUmVjdCkgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wp
ICgoSXNFbXB0eSgpICYmIGFSZWN0LklzRW1wdHkoKSkgfHwKICAgICAgICAgICAgICAgICAgICAg
KCh4ID09IGFSZWN0LngpICYmICh5ID09IGFSZWN0LnkpICYmCiAgICAgICAgICAgICAgICAgICAg
ICAod2lkdGggPT0gYVJlY3Qud2lkdGgpICYmIChoZWlnaHQgPT0gYVJlY3QuaGVpZ2h0KSkpOwog
IH0KICBQUkJvb2wgb3BlcmF0b3IhPShjb25zdCBuc1JlY3QmIGFSZWN0KSBjb25zdCB7CiAgICBy
ZXR1cm4gKFBSQm9vbCkgIW9wZXJhdG9yPT0oYVJlY3QpOwogIH0KICBuc1JlY3Qgb3BlcmF0b3Ir
KGNvbnN0IG5zUmVjdCYgYVJlY3QpIGNvbnN0IHsKICAgIHJldHVybiBuc1JlY3QoeCArIGFSZWN0
LngsIHkgKyBhUmVjdC55LAogICAgICAgICAgICAgICAgICB3aWR0aCArIGFSZWN0LndpZHRoLCBo
ZWlnaHQgKyBhUmVjdC5oZWlnaHQpOwogIH0KICBuc1JlY3Qgb3BlcmF0b3ItKGNvbnN0IG5zUmVj
dCYgYVJlY3QpIGNvbnN0IHsKICAgIHJldHVybiBuc1JlY3QoeCAtIGFSZWN0LngsIHkgLSBhUmVj
dC55LAogICAgICAgICAgICAgICAgICB3aWR0aCAtIGFSZWN0LndpZHRoLCBoZWlnaHQgLSBhUmVj
dC5oZWlnaHQpOwogIH0KICBuc1JlY3QmIG9wZXJhdG9yKz0oY29uc3QgbnNQb2ludCYgYVBvaW50
KSB7eCArPSBhUG9pbnQueDsgeSArPSBhUG9pbnQueTsgcmV0dXJuICp0aGlzO30KICBuc1JlY3Qm
IG9wZXJhdG9yLT0oY29uc3QgbnNQb2ludCYgYVBvaW50KSB7eCAtPSBhUG9pbnQueDsgeSAtPSBh
UG9pbnQueTsgcmV0dXJuICp0aGlzO30KCiAgbnNSZWN0JiBvcGVyYXRvcio9KGNvbnN0IGZsb2F0
IGFTY2FsZSkge3ggPSBOU1RvQ29vcmRSb3VuZCh4ICogYVNjYWxlKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IE5TVG9Db29yZFJvdW5kKHkgKiBhU2NhbGUp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IE5TVG9D
b29yZFJvdW5kKHdpZHRoICogYVNjYWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVpZ2h0ID0gTlNUb0Nvb3JkUm91bmQoaGVpZ2h0ICogYVNjYWxlKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzO30KCiAg
bnNSZWN0JiBTY2FsZVJvdW5kT3V0KGNvbnN0IGZsb2F0IGFTY2FsZSk7CiAgbnNSZWN0JiBTY2Fs
ZVJvdW5kSW4oY29uc3QgZmxvYXQgYVNjYWxlKTsKCgogIG5zY29vcmQgWE1vc3QoKSBjb25zdCB7
cmV0dXJuIHggKyB3aWR0aDt9CiAgbnNjb29yZCBZTW9zdCgpIGNvbnN0IHtyZXR1cm4geSArIGhl
aWdodDt9Cn07CgoKZXh0ZXJuIEZJTEUqIG9wZXJhdG9yPDwoRklMRSogb3V0LCBjb25zdCBuc1Jl
Y3QmIHJlY3QpOwojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAy
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDEKIyAzNiAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiCiMgMSAiL0dNL2hkZDkvbW96aWxs
YS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BsaGFzaC5oIiAxCiMgMzcgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAyCiMgMSAiL0dNL2hkZDkvbW96aWxsYS9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIiAxCiMgMzggIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
Q29tLmgiIDEKIyAzOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyA0MCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNTdHJpbmcuaCIgMQojIDQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNo
dGFibGUuaCIgMgoKY2xhc3MgbnNIYXNodGFibGU7CmNsYXNzIG5zU3RyaW5nS2V5OwoKY2xhc3Mg
bnNIYXNoS2V5IHsKcHJvdGVjdGVkOgogIG5zSGFzaEtleSh2b2lkKTsKCnB1YmxpYzoKICB2aXJ0
dWFsIH5uc0hhc2hLZXkodm9pZCk7CiAgdmlydHVhbCBQUlVpbnQzMiBIYXNoQ29kZSh2b2lkKSBj
b25zdCA9IDA7CiAgdmlydHVhbCBQUkJvb2wgRXF1YWxzKGNvbnN0IG5zSGFzaEtleSAqYUtleSkg
Y29uc3QgPSAwOwogIHZpcnR1YWwgbnNIYXNoS2V5ICpDbG9uZSgpIGNvbnN0ID0gMDsKCgpwdWJs
aWM6CgogIGVudW0gbnNIYXNoS2V5VHlwZSB7CiAgICBVbmtub3duS2V5LAogICAgU3VwcG9ydHNL
ZXksCiAgICBWb2lkS2V5LAogICAgSURLZXksCiAgICBDU3RyaW5nS2V5LAogICAgU3RyaW5nS2V5
LAogICAgT3BhcXVlS2V5CiAgfTsKICBuc0hhc2hLZXlUeXBlIEdldEtleVR5cGUoKSBjb25zdCB7
IHJldHVybiBtS2V5VHlwZTsgfQpwcm90ZWN0ZWQ6CiAgbnNIYXNoS2V5VHlwZSBtS2V5VHlwZTsK
Cn07CgoKCnR5cGVkZWYgUFJCb29sICgqIG5zSGFzaHRhYmxlRW51bUZ1bmMpKG5zSGFzaEtleSAq
YUtleSwgdm9pZCAqYURhdGEsIHZvaWQqIGNsb3N1cmUpOwoKY2xhc3MgbnNIYXNodGFibGUgewpw
cm90ZWN0ZWQ6CgogIFBSTG9jayogbUxvY2s7CiAgUExIYXNoVGFibGUgbUhhc2h0YWJsZTsKICBQ
UkJvb2wgbUVudW1lcmF0aW5nOwoKcHVibGljOgogIG5zSGFzaHRhYmxlKFBSVWludDMyIGFTaXpl
ID0gMTYsIFBSQm9vbCB0aHJlYWRTYWZlID0gMCk7CiAgdmlydHVhbCB+bnNIYXNodGFibGUoKTsK
CiAgUFJJbnQzMiBDb3VudCh2b2lkKSB7IHJldHVybiBtSGFzaHRhYmxlLm5lbnRyaWVzOyB9CiAg
UFJCb29sIEV4aXN0cyhuc0hhc2hLZXkgKmFLZXkpOwogIHZvaWQgKlB1dChuc0hhc2hLZXkgKmFL
ZXksIHZvaWQgKmFEYXRhKTsKICB2b2lkICpHZXQobnNIYXNoS2V5ICphS2V5KTsKICB2b2lkICpS
ZW1vdmUobnNIYXNoS2V5ICphS2V5KTsKICBuc0hhc2h0YWJsZSAqQ2xvbmUoKTsKICB2b2lkIEVu
dW1lcmF0ZShuc0hhc2h0YWJsZUVudW1GdW5jIGFFbnVtRnVuYywgdm9pZCogY2xvc3VyZSA9IF9f
bnVsbCk7CiAgdm9pZCBSZXNldCgpOwogIHZvaWQgUmVzZXQobnNIYXNodGFibGVFbnVtRnVuYyBk
ZXN0cm95RnVuYywgdm9pZCogY2xvc3VyZSA9IF9fbnVsbCk7Cn07CgoKCgoKdHlwZWRlZiB2b2lk
KiAoKiBuc0hhc2h0YWJsZUNsb25lRWxlbWVudEZ1bmMpKG5zSGFzaEtleSAqYUtleSwgdm9pZCAq
YURhdGEsIHZvaWQqIGNsb3N1cmUpOwoKY2xhc3MgbnNPYmplY3RIYXNodGFibGUgOiBwdWJsaWMg
bnNIYXNodGFibGUgewpwdWJsaWM6CiAgbnNPYmplY3RIYXNodGFibGUobnNIYXNodGFibGVDbG9u
ZUVsZW1lbnRGdW5jIGNsb25lRWxlbWVudEZ1biwKICAgICAgICAgICAgICAgICAgICB2b2lkKiBj
bG9uZUVsZW1lbnRDbG9zdXJlLAogICAgICAgICAgICAgICAgICAgIG5zSGFzaHRhYmxlRW51bUZ1
bmMgZGVzdHJveUVsZW1lbnRGdW4sCiAgICAgICAgICAgICAgICAgICAgdm9pZCogZGVzdHJveUVs
ZW1lbnRDbG9zdXJlLAogICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFTaXplID0gMTYsIFBS
Qm9vbCB0aHJlYWRTYWZlID0gMCk7CiAgfm5zT2JqZWN0SGFzaHRhYmxlKCk7CgogIG5zSGFzaHRh
YmxlICpDbG9uZSgpOwogIHZvaWQgUmVzZXQoKTsKICBQUkJvb2wgUmVtb3ZlQW5kRGVsZXRlKG5z
SGFzaEtleSAqYUtleSk7Cgpwcm90ZWN0ZWQ6CiAgc3RhdGljIFBSSW50biBDb3B5RWxlbWVudChQ
TEhhc2hFbnRyeSAqaGUsIFBSSW50biBpLCB2b2lkICphcmcpOwoKICBuc0hhc2h0YWJsZUNsb25l
RWxlbWVudEZ1bmMgbUNsb25lRWxlbWVudEZ1bjsKICB2b2lkKiBtQ2xvbmVFbGVtZW50Q2xvc3Vy
ZTsKICBuc0hhc2h0YWJsZUVudW1GdW5jIG1EZXN0cm95RWxlbWVudEZ1bjsKICB2b2lkKiBtRGVz
dHJveUVsZW1lbnRDbG9zdXJlOwp9OwoKCgoKY2xhc3MgbnNJU3VwcG9ydHM7CgpjbGFzcyBuc1N1
cHBvcnRzSGFzaHRhYmxlCiA6IHByaXZhdGUgbnNIYXNodGFibGUKewpwdWJsaWM6CiAgdHlwZWRl
ZiBQUkJvb2wgKCogRW51bUZ1bmMpIChuc0hhc2hLZXkgKmFLZXksIHZvaWQgKmFEYXRhLCB2b2lk
KiBjbG9zdXJlKTsKCiAgbnNTdXBwb3J0c0hhc2h0YWJsZShQUlVpbnQzMiBhU2l6ZSA9IDE2LCBQ
UkJvb2wgdGhyZWFkU2FmZSA9IDApCiAgICA6IG5zSGFzaHRhYmxlKGFTaXplLCB0aHJlYWRTYWZl
KSB7fQogIH5uc1N1cHBvcnRzSGFzaHRhYmxlKCk7CgogIFBSSW50MzIgQ291bnQgKHZvaWQpCiAg
ewogICAgcmV0dXJuIG5zSGFzaHRhYmxlOjpDb3VudCgpOwogIH0KICBQUkJvb2wgRXhpc3RzIChu
c0hhc2hLZXkgKmFLZXkpCiAgewogICAgcmV0dXJuIG5zSGFzaHRhYmxlOjpFeGlzdHMgKGFLZXkp
OwogIH0KICBQUkJvb2wgUHV0IChuc0hhc2hLZXkgKmFLZXksCiAgICAgICAgICAgICAgbnNJU3Vw
cG9ydHMgKmFEYXRhLAogICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqdmFsdWUgPSAwKTsKICBu
c0lTdXBwb3J0cyogR2V0IChuc0hhc2hLZXkgKmFLZXkpOwogIFBSQm9vbCBSZW1vdmUgKG5zSGFz
aEtleSAqYUtleSwgbnNJU3VwcG9ydHMgKip2YWx1ZSA9IDApOwogIG5zSGFzaHRhYmxlICpDbG9u
ZSgpOwogIHZvaWQgRW51bWVyYXRlIChFbnVtRnVuYyBhRW51bUZ1bmMsIHZvaWQqIGNsb3N1cmUg
PSBfX251bGwpCiAgewogICAgbnNIYXNodGFibGU6OkVudW1lcmF0ZSAoYUVudW1GdW5jLCBjbG9z
dXJlKTsKICB9CiAgdm9pZCBSZXNldCgpOwoKIHByaXZhdGU6CiAgc3RhdGljIFBSQm9vbCBSZWxl
YXNlRWxlbWVudCAobnNIYXNoS2V5ICosIHZvaWQgKiwgdm9pZCAqKTsKICBzdGF0aWMgUFJJbnRu
IEVudW1lcmF0ZUNvcHkgKFBMSGFzaEVudHJ5ICosIFBSSW50biwgdm9pZCAqKTsKfTsKCgoKCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAxNzEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAyCgpjbGFzcyBuc0lTdXBwb3J0c0tl
eSA6IHB1YmxpYyBuc0hhc2hLZXkgewpwcm90ZWN0ZWQ6CiAgbnNJU3VwcG9ydHMqIG1LZXk7Cgpw
dWJsaWM6CiAgbnNJU3VwcG9ydHNLZXkobnNJU3VwcG9ydHMqIGtleSkgewoKICAgIG1LZXlUeXBl
ID0gU3VwcG9ydHNLZXk7CgogICAgbUtleSA9IGtleTsKICAgICgoMCAhPSAobUtleSkpID8gbnNf
aWZfYWRkcmVmKG1LZXkpIDogMCk7CiAgfQoKICB+bnNJU3VwcG9ydHNLZXkodm9pZCkgewogICAg
ZG8geyBpZiAobUtleSkgeyAobUtleSktPlJlbGVhc2UoKTsgKG1LZXkpID0gMDsgfSB9IHdoaWxl
ICgwKTsKICB9CgogIFBSVWludDMyIEhhc2hDb2RlKHZvaWQpIGNvbnN0IHsKICAgIHJldHVybiAo
UFJVaW50MzIpbUtleTsKICB9CgogIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNIYXNoS2V5ICphS2V5
KSBjb25zdCB7CiAgICBpZiAoIShhS2V5LT5HZXRLZXlUeXBlKCkgPT0gU3VwcG9ydHNLZXkpKSBu
c0RlYnVnOjpBc3NlcnRpb24oIm1pc21hdGNoZWQga2V5IHR5cGVzIiwgImFLZXktPkdldEtleVR5
cGUoKSA9PSBTdXBwb3J0c0tleSIsICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFi
bGUuaCIsIDE5NCk7CiAgICByZXR1cm4gKG1LZXkgPT0gKChuc0lTdXBwb3J0c0tleSAqKSBhS2V5
KS0+bUtleSk7CiAgfQoKICBuc0hhc2hLZXkgKkNsb25lKCkgY29uc3QgewogICAgcmV0dXJuIG5l
dyBuc0lTdXBwb3J0c0tleShtS2V5KTsKICB9Cn07CgoKCgpjbGFzcyBuc1ZvaWRLZXkgOiBwdWJs
aWMgbnNIYXNoS2V5IHsKcHJvdGVjdGVkOgogIHZvaWQqIG1LZXk7CgpwdWJsaWM6CiAgbnNWb2lk
S2V5KHZvaWQqIGtleSkgewoKICAgIG1LZXlUeXBlID0gVm9pZEtleTsKCiAgICBtS2V5ID0ga2V5
OwogIH0KCiAgUFJVaW50MzIgSGFzaENvZGUodm9pZCkgY29uc3QgewogICAgcmV0dXJuIChQUlVp
bnQzMiltS2V5OwogIH0KCiAgUFJCb29sIEVxdWFscyhjb25zdCBuc0hhc2hLZXkgKmFLZXkpIGNv
bnN0IHsKICAgIGlmICghKGFLZXktPkdldEtleVR5cGUoKSA9PSBWb2lkS2V5KSkgbnNEZWJ1Zzo6
QXNzZXJ0aW9uKCJtaXNtYXRjaGVkIGtleSB0eXBlcyIsICJhS2V5LT5HZXRLZXlUeXBlKCkgPT0g
Vm9pZEtleSIsICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIsIDIyMyk7
CiAgICByZXR1cm4gKG1LZXkgPT0gKChjb25zdCBuc1ZvaWRLZXkgKikgYUtleSktPm1LZXkpOwog
IH0KCiAgbnNIYXNoS2V5ICpDbG9uZSgpIGNvbnN0IHsKICAgIHJldHVybiBuZXcgbnNWb2lkS2V5
KG1LZXkpOwogIH0KCiAgdm9pZCogR2V0VmFsdWUoKSB7IHJldHVybiBtS2V5OyB9Cn07CgoKCgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lELmgiIDEKIyAyMzggIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAyCgpjbGFzcyBuc0lES2V5IDogcHVibGljIG5z
SGFzaEtleSB7CnByb3RlY3RlZDoKICBuc0lEIG1JRDsKCnB1YmxpYzoKICBuc0lES2V5KGNvbnN0
IG5zSUQgJmFJRCkgewoKICAgIG1LZXlUeXBlID0gSURLZXk7CgogICAgbUlEID0gYUlEOwogIH0K
CiAgUFJVaW50MzIgSGFzaENvZGUodm9pZCkgY29uc3QgewogICAgcmV0dXJuIG1JRC5tMDsKICB9
CgogIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNIYXNoS2V5ICphS2V5KSBjb25zdCB7CiAgICBpZiAo
IShhS2V5LT5HZXRLZXlUeXBlKCkgPT0gSURLZXkpKSBuc0RlYnVnOjpBc3NlcnRpb24oIm1pc21h
dGNoZWQga2V5IHR5cGVzIiwgImFLZXktPkdldEtleVR5cGUoKSA9PSBJREtleSIsICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIsIDI1Nik7CiAgICByZXR1cm4gKG1JRC5F
cXVhbHMoKChjb25zdCBuc0lES2V5ICopIGFLZXkpLT5tSUQpKTsKICB9CgogIG5zSGFzaEtleSAq
Q2xvbmUoKSBjb25zdCB7CiAgICByZXR1cm4gbmV3IG5zSURLZXkobUlEKTsKICB9Cn07CgoKCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyAyNjggIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAyCgoKY2xhc3MgbnNDU3RyaW5nS2V5IDog
cHVibGljIG5zSGFzaEtleSB7CnB1YmxpYzoKCiAgZW51bSBPd25lcnNoaXAgewogICAgTkVWRVJf
T1dOLAogICAgT1dOX0NMT05FLAogICAgT1dOCiAgfTsKCiAgbnNDU3RyaW5nS2V5KGNvbnN0IGNo
YXIqIHN0ciwgUFJJbnQzMiBzdHJMZW4gPSAtMSwgT3duZXJzaGlwIG93biA9IE9XTl9DTE9ORSk7
CiAgbnNDU3RyaW5nS2V5KGNvbnN0IG5zQ1N0cmluZyYgc3RyKTsKICB+bnNDU3RyaW5nS2V5KHZv
aWQpOwoKICBQUlVpbnQzMiBIYXNoQ29kZSh2b2lkKSBjb25zdDsKICBQUkJvb2wgRXF1YWxzKGNv
bnN0IG5zSGFzaEtleSogYUtleSkgY29uc3Q7CiAgbnNIYXNoS2V5KiBDbG9uZSgpIGNvbnN0OwoK
CgogIGNvbnN0IGNoYXIqIEdldFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1TdHI7IH0KICBQUlVp
bnQzMiBHZXRTdHJpbmdMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtU3RyTGVuOyB9Cgpwcm90ZWN0
ZWQ6CiAgY2hhciogbVN0cjsKICBQUlVpbnQzMiBtU3RyTGVuOwogIE93bmVyc2hpcCBtT3duZXJz
aGlwOwp9OwoKCmNsYXNzIG5zU3RyaW5nS2V5IDogcHVibGljIG5zSGFzaEtleSB7CnB1YmxpYzoK
CiAgZW51bSBPd25lcnNoaXAgewogICAgTkVWRVJfT1dOLAogICAgT1dOX0NMT05FLAogICAgT1dO
CiAgfTsKCiAgbnNTdHJpbmdLZXkoY29uc3QgUFJVbmljaGFyKiBzdHIsIFBSSW50MzIgc3RyTGVu
ID0gLTEsIE93bmVyc2hpcCBvd24gPSBPV05fQ0xPTkUpOwogIG5zU3RyaW5nS2V5KGNvbnN0IG5z
QVJlYWRhYmxlU3RyaW5nJiBzdHIpOwogIH5uc1N0cmluZ0tleSh2b2lkKTsKCiAgUFJVaW50MzIg
SGFzaENvZGUodm9pZCkgY29uc3Q7CiAgUFJCb29sIEVxdWFscyhjb25zdCBuc0hhc2hLZXkqIGFL
ZXkpIGNvbnN0OwogIG5zSGFzaEtleSogQ2xvbmUoKSBjb25zdDsKCgoKICBjb25zdCBQUlVuaWNo
YXIqIEdldFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1TdHI7IH0KICBQUlVpbnQzMiBHZXRTdHJp
bmdMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtU3RyTGVuOyB9Cgpwcm90ZWN0ZWQ6CiAgUFJVbmlj
aGFyKiBtU3RyOwogIFBSVWludDMyIG1TdHJMZW47CiAgT3duZXJzaGlwIG1Pd25lcnNoaXA7Cn07
CgoKY2xhc3MgbnNPcGFxdWVLZXkgOiBwdWJsaWMgbnNIYXNoS2V5IHsKcHVibGljOgoKICBlbnVt
IE93bmVyc2hpcCB7CiAgICBORVZFUl9PV04sCiAgICBPV05fQ0xPTkUsCiAgICBPV04KICB9OwoK
ICBuc09wYXF1ZUtleShjb25zdCBjaGFyKiBidWYsIFBSVWludDMyIGJ1ZkxlbiwgT3duZXJzaGlw
IG93biA9IE9XTl9DTE9ORSk7CiAgfm5zT3BhcXVlS2V5KHZvaWQpOwoKICBQUlVpbnQzMiBIYXNo
Q29kZSh2b2lkKSBjb25zdDsKICBQUkJvb2wgRXF1YWxzKGNvbnN0IG5zSGFzaEtleSogYUtleSkg
Y29uc3Q7CiAgbnNIYXNoS2V5KiBDbG9uZSgpIGNvbnN0OwoKCgogIGNvbnN0IGNoYXIqIEdldEJ1
ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1CdWY7IH0KICBQUlVpbnQzMiBHZXRCdWZmZXJMZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtQnVmTGVuOyB9Cgpwcm90ZWN0ZWQ6CiAgY2hhciogbUJ1ZjsKICBQ
UlVpbnQzMiBtQnVmTGVuOwogIE93bmVyc2hpcCBtT3duZXJzaGlwOwp9OwojIDI5ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAyCgoKCgoKCgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lET01LZXlFdmVudC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lET01LZXlFdmVudC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lTdXBwb3J0cy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01LZXlF
dmVudC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyAy
OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTUtleUV2ZW50LmgiIDIKIyAxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIiAxCiMgMjYgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lTY3JpcHRDb250ZXh0LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lT
Y3JpcHRDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcu
aCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIiAy
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyOSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNjcmlwdENvbnRleHQuaCIgMgoKY2xhc3MgbnNJU2Ny
aXB0R2xvYmFsT2JqZWN0OwpjbGFzcyBuc0lTY3JpcHRTZWN1cml0eU1hbmFnZXI7CmNsYXNzIG5z
SVNjcmlwdE5hbWVTcGFjZU1hbmFnZXI7CmNsYXNzIG5zSVNjcmlwdENvbnRleHRPd25lcjsKY2xh
c3MgbnNJUHJpbmNpcGFsOwoKdHlwZWRlZiB2b2lkICgqbnNTY3JpcHRUZXJtaW5hdGlvbkZ1bmMp
KG5zSVN1cHBvcnRzKiBhUmVmKTsKIyA1MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNj
cmlwdENvbnRleHQuaCIKY2xhc3MgbnNJU2NyaXB0Q29udGV4dCA6IHB1YmxpYyBuc0lTdXBwb3J0
cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg
bnNJSUQgaWlkID0geyAweDhmNmJjYTdkLCAweGNlNDIsIDB4MTFkMSwgezB4YjcsIDB4MjQsIDB4
MDAsIDB4NjAsIDB4MDgsIDB4OTEsIDB4ZDgsIDB4Yzl9IH07IHJldHVybiBpaWQ7fQojIDcxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgRXZhbHVhdGVTdHJpbmcoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTY3JpcHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphU2NvcGVPYmplY3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lQcmluY2lwYWwgKmFQcmluY2lwYWwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICphVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJVaW50MzIgYUxpbmVObywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGFWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBV3JpdGFibGVTdHJp
bmcmIGFSZXRWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYUlzVW5k
ZWZpbmVkKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgRXZhbHVhdGVTdHJpbmdXaXRoVmFsdWUo
Y29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTY3JpcHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkICphU2NvcGVPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lQcmluY2lwYWwgKmFQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphVVJMLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUxpbmVObywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFWZXJzaW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCogYVJldFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJCb29sKiBhSXNVbmRlZmluZWQpID0gMDsKIyAxMDcgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lTY3JpcHRDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBD
b21waWxlU2NyaXB0KGNvbnN0IFBSVW5pY2hhciogYVRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSSW50MzIgYVRleHRMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQqIGFTY29wZU9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJpbmNpcGFs
KiBhUHJpbmNpcGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhVVJM
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhTGluZU5vLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhVmVyc2lvbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCoqIGFTY3JpcHRPYmplY3QpID0gMDsKIyAxMzAgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lTY3JpcHRDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFeGVjdXRl
U2NyaXB0KHZvaWQqIGFTY3JpcHRPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQqIGFTY29wZU9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBV3JpdGFibGVT
dHJpbmcqIGFSZXRWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhSXNV
bmRlZmluZWQpID0gMDsKIyAxNTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTY3JpcHRD
b250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb21waWxlRXZlbnRIYW5kbGVyKHZvaWQqIGFU
YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFOYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYg
YUJvZHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhU2hhcmVkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogYUhhbmRsZXIpID0gMDsKIyAx
NzUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTY3JpcHRDb250ZXh0LmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBDYWxsRXZlbnRIYW5kbGVyKHZvaWQqIGFUYXJnZXQsIHZvaWQqIGFIYW5kbGVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhcmdjLCB2b2lkKiBhcmd2
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFCb29sUmVzdWx0LCBQUkJv
b2wgYVJldmVyc2VSZXR1cm5SZXN1bHQpID0gMDsKIyAxOTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lTY3JpcHRDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBCaW5kQ29tcGlsZWRF
dmVudEhhbmRsZXIodm9pZCogYVRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lBdG9tKiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkKiBhSGFuZGxlcikgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbXBpbGVGdW5j
dGlvbih2b2lkKiBhVGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5z
Q1N0cmluZyYgYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUFy
Z0NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBhQXJnQXJy
YXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcm
IGFCb2R5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFVUkwsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUxpbmVObywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUkJvb2wgYVNoYXJlZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkKiogYUZ1bmN0aW9uT2JqZWN0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgU2V0RGVmYXVsdExhbmd1YWdlVmVyc2lvbihjb25zdCBjaGFyKiBhVmVyc2lvbikgPSAwOwoK
CgoKCiAgdmlydHVhbCBuc0lTY3JpcHRHbG9iYWxPYmplY3QqIEdldEdsb2JhbE9iamVjdCgpID0g
MDsKCgoKCgogIHZpcnR1YWwgdm9pZCogR2V0TmF0aXZlQ29udGV4dCgpID0gMDsKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgSW5pdENsYXNzZXMoKSA9IDA7CiMgMjQzICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdENvbnRl
eHQobnNJU2NyaXB0R2xvYmFsT2JqZWN0ICphR2xvYmFsT2JqZWN0KSA9IDA7CiMgMjUyICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgSXNDb250ZXh0SW5pdGlhbGl6ZWQoKSA9IDA7CiMgMjY1ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkTmFtZWRSZWZl
cmVuY2Uodm9pZCAqYVNsb3QsIHZvaWQgKmFTY3JpcHRPYmplY3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphTmFtZSkgPSAwOwojIDI3NyAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVNjcmlwdENvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0
IFJlbW92ZVJlZmVyZW5jZSh2b2lkICphU2xvdCwgdm9pZCAqYVNjcmlwdE9iamVjdCkgPSAwOwoK
CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdDKCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXROYW1lU3BhY2VNYW5hZ2VyKG5zSVNjcmlwdE5hbWVTcGFjZU1hbmFnZXIqKiBhSW5zdGFu
Y2VQdHIpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VjdXJpdHlNYW5hZ2VyKG5z
SVNjcmlwdFNlY3VyaXR5TWFuYWdlcioqIGFJbnN0YW5jZVB0cikgPSAwOwojIDMxMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVNjcmlwdENvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0
IFNjcmlwdEV2YWx1YXRlZChQUkJvb2wgYVRlcm1pbmF0ZWQpID0gMDsKCgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXRPd25lcihuc0lTY3JpcHRDb250ZXh0T3duZXIqIG93bmVyKSA9IDA7CgoK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T3duZXIobnNJU2NyaXB0Q29udGV4dE93bmVyKiog
b3duZXIpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUZXJtaW5hdGlvbkZ1bmN0
aW9uKG5zU2NyaXB0VGVybWluYXRpb25GdW5jIGFGdW5jLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lTdXBwb3J0cyogYVJlZikgPSAwOwojIDM0NiAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVNjcmlwdENvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJv
b3RlZFNjcmlwdE9iamVjdCh2b2lkICphT2JqZWN0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0U2NyaXB0c0VuYWJsZWQoUFJCb29sICphRW5hYmxlZCkgPSAwOwogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0U2NyaXB0c0VuYWJsZWQoUFJCb29sIGFFbmFibGVkKSA9IDA7Cn07CgoKCgoKZXh0
ZXJuICJDIiBuc3Jlc3VsdCBOU19DcmVhdGVTY3JpcHRDb250ZXh0KG5zSVNjcmlwdEdsb2JhbE9i
amVjdCAqYUdsb2JhbCwgbnNJU2NyaXB0Q29udGV4dCAqKmFDb250ZXh0KTsKIyAzMCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSURPTUtleUV2ZW50LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJRE9NVUlFdmVudC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lET01VSUV2ZW50LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1
cHBvcnRzLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTVVJRXZlbnQu
aCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMjkgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01VSUV2ZW50LmgiIDIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lET01VSUV2ZW50LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRE9NRXZlbnQuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9N
RXZlbnQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQoj
IDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NRXZlbnQuaCIgMgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lET01FdmVudC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVNjcmlwdENvbnRleHQuaCIgMQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9N
RXZlbnQuaCIgMgoKY2xhc3MgbnNJRE9NRXZlbnRUYXJnZXQ7CgoKCgoKY2xhc3MgbnNJRE9NRXZl
bnQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH
ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhhNjZiN2I4MCwgMHhmZjQ2LCAw
eGJkOTcsIHsgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhlMywgMHg4YSwgMHhkZCwgMHgzMiB9
IH07IHJldHVybiBpaWQ7fQogIGVudW0gewogICAgQ0FQVFVSSU5HX1BIQVNFID0gMSwKICAgIEFU
X1RBUkdFVCA9IDIsCiAgICBCVUJCTElOR19QSEFTRSA9IDMsCiAgICBNT1VTRURPV04gPSAxLAog
ICAgTU9VU0VVUCA9IDIsCiAgICBNT1VTRU9WRVIgPSA0LAogICAgTU9VU0VPVVQgPSA4LAogICAg
TU9VU0VNT1ZFID0gMTYsCiAgICBNT1VTRURSQUcgPSAzMiwKICAgIENMSUNLID0gNjQsCiAgICBE
QkxDTElDSyA9IDEyOCwKICAgIEtFWURPV04gPSAyNTYsCiAgICBLRVlVUCA9IDUxMiwKICAgIEtF
WVBSRVNTID0gMTAyNCwKICAgIERSQUdEUk9QID0gMjA0OCwKICAgIEZPQ1VTID0gNDA5NiwKICAg
IEJMVVIgPSA4MTkyLAogICAgU0VMRUNUID0gMTYzODQsCiAgICBDSEFOR0UgPSAzMjc2OCwKICAg
IFJFU0VUID0gNjU1MzYsCiAgICBTVUJNSVQgPSAxMzEwNzIsCiAgICBTQ1JPTEwgPSAyNjIxNDQs
CiAgICBMT0FEID0gNTI0Mjg4LAogICAgVU5MT0FEID0gMTA0ODU3NiwKICAgIFhGRVJfRE9ORSA9
IDIwOTcxNTIsCiAgICBBQk9SVCA9IDQxOTQzMDQsCiAgICBFUlJPUiA9IDgzODg2MDgsCiAgICBM
T0NBVEUgPSAxNjc3NzIxNiwKICAgIE1PVkUgPSAzMzU1NDQzMiwKICAgIFJFU0laRSA9IDY3MTA4
ODY0LAogICAgRk9SV0FSRCA9IDEzNDIxNzcyOCwKICAgIEhFTFAgPSAyNjg0MzU0NTYsCiAgICBC
QUNLID0gNTM2ODcwOTEyLAogICAgVEVYVCA9IDEwNzM3NDE4MjQsCiAgICBBTFRfTUFTSyA9IDEs
CiAgICBDT05UUk9MX01BU0sgPSAyLAogICAgU0hJRlRfTUFTSyA9IDQsCiAgICBNRVRBX01BU0sg
PSA4CiAgfTsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUeXBlKG5zQVdyaXRhYmxlU3RyaW5nJiBh
VHlwZSk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUYXJnZXQobnNJRE9NRXZlbnRUYXJnZXQq
KiBhVGFyZ2V0KT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1cnJlbnRUYXJnZXQobnNJRE9N
RXZlbnRUYXJnZXQqKiBhQ3VycmVudFRhcmdldCk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRP
cmlnaW5hbFRhcmdldChuc0lET01FdmVudFRhcmdldCoqIGFPcmlnaW5hbFRhcmdldCk9MDsKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRFdmVudFBoYXNlKFBSVWludDE2KiBhRXZlbnRQaGFzZSk9MDsK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCdWJibGVzKFBSQm9vbCogYUJ1YmJsZXMpPTA7CgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0Q2FuY2VsYWJsZShQUkJvb2wqIGFDYW5jZWxhYmxlKT0wOwoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFRpbWVTdGFtcChQUlVpbnQ2NCogYVRpbWVTdGFtcCk9MDsKCiAg
dmlydHVhbCBuc3Jlc3VsdCBTdG9wUHJvcGFnYXRpb24oKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0
IFByZXZlbnRCdWJibGUoKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFByZXZlbnRDYXB0dXJlKCk9
MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBQcmV2ZW50RGVmYXVsdCgpPTA7CgogIHZpcnR1YWwgbnNy
ZXN1bHQgSW5pdEV2ZW50KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhRXZlbnRUeXBlQXJnLCBQ
UkJvb2wgYUNhbkJ1YmJsZUFyZywgUFJCb29sIGFDYW5jZWxhYmxlQXJnKT0wOwp9OwojIDE0MiAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTUV2ZW50LmgiCmV4dGVybiAiQyIgbnNyZXN1
bHQgTlNfSW5pdEV2ZW50Q2xhc3MobnNJU2NyaXB0Q29udGV4dCAqYUNvbnRleHQsIHZvaWQgKiph
UHJvdG90eXBlKTsKCmV4dGVybiAiQyIgbnNyZXN1bHQgTlNfTmV3U2NyaXB0RXZlbnQobnNJU2Ny
aXB0Q29udGV4dCAqYUNvbnRleHQsIG5zSVN1cHBvcnRzICphU3VwcG9ydHMsIG5zSVN1cHBvcnRz
ICphUGFyZW50LCB2b2lkICoqYVJldHVybik7CiMgMzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lET01VSUV2ZW50LmgiIDIKCmNsYXNzIG5zSURPTUFic3RyYWN0VmlldzsKCgoKCgpjbGFz
cyBuc0lET01VSUV2ZW50IDogcHVibGljIG5zSURPTUV2ZW50IHsKcHVibGljOgogIHN0YXRpYyBj
b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4YTZjZjkw
YzMsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEs
IDB4ZGQsIDB4MzIgfSB9OyByZXR1cm4gaWlkO30KCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWaWV3
KG5zSURPTUFic3RyYWN0VmlldyoqIGFWaWV3KT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERl
dGFpbChQUkludDMyKiBhRGV0YWlsKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXRVSUV2ZW50
KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhVHlwZUFyZywgUFJCb29sIGFDYW5CdWJibGVBcmcs
IFBSQm9vbCBhQ2FuY2VsYWJsZUFyZywgbnNJRE9NQWJzdHJhY3RWaWV3KiBhVmlld0FyZywgUFJJ
bnQzMiBhRGV0YWlsQXJnKT0wOwp9OwojIDYzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RE9NVUlFdmVudC5oIgpleHRlcm4gIkMiIG5zcmVzdWx0IE5TX0luaXRVSUV2ZW50Q2xhc3MobnNJ
U2NyaXB0Q29udGV4dCAqYUNvbnRleHQsIHZvaWQgKiphUHJvdG90eXBlKTsKCmV4dGVybiAiQyIg
bnNyZXN1bHQgTlNfTmV3U2NyaXB0VUlFdmVudChuc0lTY3JpcHRDb250ZXh0ICphQ29udGV4dCwg
bnNJU3VwcG9ydHMgKmFTdXBwb3J0cywgbnNJU3VwcG9ydHMgKmFQYXJlbnQsIHZvaWQgKiphUmV0
dXJuKTsKIyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTUtleUV2ZW50LmgiIDIK
CmNsYXNzIG5zSURPTUFic3RyYWN0VmlldzsKCgoKCgpjbGFzcyBuc0lET01LZXlFdmVudCA6IHB1
YmxpYyBuc0lET01VSUV2ZW50IHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE
KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4MDI4ZTBlNmUsIDB4OGIwMSwgMHgxMWQz
LCB7IDB4YWEsIDB4ZTcsIDB4MDAsIDB4MTAsIDB4ODMsIDB4OGEsIDB4MzEsIDB4MjMgfSB9OyBy
ZXR1cm4gaWlkO30KICBlbnVtIHsKICAgIERPTV9WS19DQU5DRUwgPSAzLAogICAgRE9NX1ZLX0JB
Q0tfU1BBQ0UgPSA4LAogICAgRE9NX1ZLX1RBQiA9IDksCiAgICBET01fVktfQ0xFQVIgPSAxMiwK
ICAgIERPTV9WS19SRVRVUk4gPSAxMywKICAgIERPTV9WS19FTlRFUiA9IDE0LAogICAgRE9NX1ZL
X1NISUZUID0gMTYsCiAgICBET01fVktfQ09OVFJPTCA9IDE3LAogICAgRE9NX1ZLX0FMVCA9IDE4
LAogICAgRE9NX1ZLX1BBVVNFID0gMTksCiAgICBET01fVktfQ0FQU19MT0NLID0gMjAsCiAgICBE
T01fVktfRVNDQVBFID0gMjcsCiAgICBET01fVktfU1BBQ0UgPSAzMiwKICAgIERPTV9WS19QQUdF
X1VQID0gMzMsCiAgICBET01fVktfUEFHRV9ET1dOID0gMzQsCiAgICBET01fVktfRU5EID0gMzUs
CiAgICBET01fVktfSE9NRSA9IDM2LAogICAgRE9NX1ZLX0xFRlQgPSAzNywKICAgIERPTV9WS19V
UCA9IDM4LAogICAgRE9NX1ZLX1JJR0hUID0gMzksCiAgICBET01fVktfRE9XTiA9IDQwLAogICAg
RE9NX1ZLX1BSSU5UU0NSRUVOID0gNDQsCiAgICBET01fVktfSU5TRVJUID0gNDUsCiAgICBET01f
VktfREVMRVRFID0gNDYsCiAgICBET01fVktfMCA9IDQ4LAogICAgRE9NX1ZLXzEgPSA0OSwKICAg
IERPTV9WS18yID0gNTAsCiAgICBET01fVktfMyA9IDUxLAogICAgRE9NX1ZLXzQgPSA1MiwKICAg
IERPTV9WS181ID0gNTMsCiAgICBET01fVktfNiA9IDU0LAogICAgRE9NX1ZLXzcgPSA1NSwKICAg
IERPTV9WS184ID0gNTYsCiAgICBET01fVktfOSA9IDU3LAogICAgRE9NX1ZLX1NFTUlDT0xPTiA9
IDU5LAogICAgRE9NX1ZLX0VRVUFMUyA9IDYxLAogICAgRE9NX1ZLX0EgPSA2NSwKICAgIERPTV9W
S19CID0gNjYsCiAgICBET01fVktfQyA9IDY3LAogICAgRE9NX1ZLX0QgPSA2OCwKICAgIERPTV9W
S19FID0gNjksCiAgICBET01fVktfRiA9IDcwLAogICAgRE9NX1ZLX0cgPSA3MSwKICAgIERPTV9W
S19IID0gNzIsCiAgICBET01fVktfSSA9IDczLAogICAgRE9NX1ZLX0ogPSA3NCwKICAgIERPTV9W
S19LID0gNzUsCiAgICBET01fVktfTCA9IDc2LAogICAgRE9NX1ZLX00gPSA3NywKICAgIERPTV9W
S19OID0gNzgsCiAgICBET01fVktfTyA9IDc5LAogICAgRE9NX1ZLX1AgPSA4MCwKICAgIERPTV9W
S19RID0gODEsCiAgICBET01fVktfUiA9IDgyLAogICAgRE9NX1ZLX1MgPSA4MywKICAgIERPTV9W
S19UID0gODQsCiAgICBET01fVktfVSA9IDg1LAogICAgRE9NX1ZLX1YgPSA4NiwKICAgIERPTV9W
S19XID0gODcsCiAgICBET01fVktfWCA9IDg4LAogICAgRE9NX1ZLX1kgPSA4OSwKICAgIERPTV9W
S19aID0gOTAsCiAgICBET01fVktfTlVNUEFEMCA9IDk2LAogICAgRE9NX1ZLX05VTVBBRDEgPSA5
NywKICAgIERPTV9WS19OVU1QQUQyID0gOTgsCiAgICBET01fVktfTlVNUEFEMyA9IDk5LAogICAg
RE9NX1ZLX05VTVBBRDQgPSAxMDAsCiAgICBET01fVktfTlVNUEFENSA9IDEwMSwKICAgIERPTV9W
S19OVU1QQUQ2ID0gMTAyLAogICAgRE9NX1ZLX05VTVBBRDcgPSAxMDMsCiAgICBET01fVktfTlVN
UEFEOCA9IDEwNCwKICAgIERPTV9WS19OVU1QQUQ5ID0gMTA1LAogICAgRE9NX1ZLX01VTFRJUExZ
ID0gMTA2LAogICAgRE9NX1ZLX0FERCA9IDEwNywKICAgIERPTV9WS19TRVBBUkFUT1IgPSAxMDgs
CiAgICBET01fVktfU1VCVFJBQ1QgPSAxMDksCiAgICBET01fVktfREVDSU1BTCA9IDExMCwKICAg
IERPTV9WS19ESVZJREUgPSAxMTEsCiAgICBET01fVktfRjEgPSAxMTIsCiAgICBET01fVktfRjIg
PSAxMTMsCiAgICBET01fVktfRjMgPSAxMTQsCiAgICBET01fVktfRjQgPSAxMTUsCiAgICBET01f
VktfRjUgPSAxMTYsCiAgICBET01fVktfRjYgPSAxMTcsCiAgICBET01fVktfRjcgPSAxMTgsCiAg
ICBET01fVktfRjggPSAxMTksCiAgICBET01fVktfRjkgPSAxMjAsCiAgICBET01fVktfRjEwID0g
MTIxLAogICAgRE9NX1ZLX0YxMSA9IDEyMiwKICAgIERPTV9WS19GMTIgPSAxMjMsCiAgICBET01f
VktfRjEzID0gMTI0LAogICAgRE9NX1ZLX0YxNCA9IDEyNSwKICAgIERPTV9WS19GMTUgPSAxMjYs
CiAgICBET01fVktfRjE2ID0gMTI3LAogICAgRE9NX1ZLX0YxNyA9IDEyOCwKICAgIERPTV9WS19G
MTggPSAxMjksCiAgICBET01fVktfRjE5ID0gMTMwLAogICAgRE9NX1ZLX0YyMCA9IDEzMSwKICAg
IERPTV9WS19GMjEgPSAxMzIsCiAgICBET01fVktfRjIyID0gMTMzLAogICAgRE9NX1ZLX0YyMyA9
IDEzNCwKICAgIERPTV9WS19GMjQgPSAxMzUsCiAgICBET01fVktfTlVNX0xPQ0sgPSAxNDQsCiAg
ICBET01fVktfU0NST0xMX0xPQ0sgPSAxNDUsCiAgICBET01fVktfQ09NTUEgPSAxODgsCiAgICBE
T01fVktfUEVSSU9EID0gMTkwLAogICAgRE9NX1ZLX1NMQVNIID0gMTkxLAogICAgRE9NX1ZLX0JB
Q0tfUVVPVEUgPSAxOTIsCiAgICBET01fVktfT1BFTl9CUkFDS0VUID0gMjE5LAogICAgRE9NX1ZL
X0JBQ0tfU0xBU0ggPSAyMjAsCiAgICBET01fVktfQ0xPU0VfQlJBQ0tFVCA9IDIyMSwKICAgIERP
TV9WS19RVU9URSA9IDIyMiwKICAgIERPTV9WS19NRVRBID0gMjI0CiAgfTsKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRDaGFyQ29kZShQUlVpbnQzMiogYUNoYXJDb2RlKT0wOwoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldEtleUNvZGUoUFJVaW50MzIqIGFLZXlDb2RlKT0wOwoKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldEFsdEtleShQUkJvb2wqIGFBbHRLZXkpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
Q3RybEtleShQUkJvb2wqIGFDdHJsS2V5KT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNoaWZ0
S2V5KFBSQm9vbCogYVNoaWZ0S2V5KT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1ldGFLZXko
UFJCb29sKiBhTWV0YUtleSk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0S2V5RXZlbnQoY29u
c3QgbnNBUmVhZGFibGVTdHJpbmcmIGFUeXBlQXJnLCBQUkJvb2wgYUNhbkJ1YmJsZUFyZywgUFJC
b29sIGFDYW5jZWxhYmxlQXJnLCBQUkJvb2wgYUN0cmxLZXlBcmcsIFBSQm9vbCBhQWx0S2V5QXJn
LCBQUkJvb2wgYVNoaWZ0S2V5QXJnLCBQUkJvb2wgYU1ldGFLZXlBcmcsIFBSVWludDMyIGFLZXlD
b2RlQXJnLCBQUlVpbnQzMiBhQ2hhckNvZGVBcmcsIG5zSURPTUFic3RyYWN0VmlldyogYVZpZXdB
cmcpPTA7Cn07CiMgMTk0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NS2V5RXZlbnQu
aCIKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19Jbml0S2V5RXZlbnRDbGFzcyhuc0lTY3JpcHRDb250
ZXh0ICphQ29udGV4dCwgdm9pZCAqKmFQcm90b3R5cGUpOwoKZXh0ZXJuICJDIiBuc3Jlc3VsdCBO
U19OZXdTY3JpcHRLZXlFdmVudChuc0lTY3JpcHRDb250ZXh0ICphQ29udGV4dCwgbnNJU3VwcG9y
dHMgKmFTdXBwb3J0cywgbnNJU3VwcG9ydHMgKmFQYXJlbnQsIHZvaWQgKiphUmV0dXJuKTsKIyAz
NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zR1VJRXZlbnQuaCIgMgoKY2xhc3MgbnNJUmVu
ZGVyaW5nQ29udGV4dDsKY2xhc3MgbnNJUmVnaW9uOwpjbGFzcyBuc0lXaWRnZXQ7CmNsYXNzIG5z
SU1lbnVJdGVtOwpjbGFzcyBuc0lBY2Nlc3NpYmxlOwpjbGFzcyBuc0lDb250ZW50OwoKCgoKCmVu
dW0gbnNFdmVudFN0YXR1cyB7CgogIG5zRXZlbnRTdGF0dXNfZUlnbm9yZSwKCiAgbnNFdmVudFN0
YXR1c19lQ29uc3VtZU5vRGVmYXVsdCwKCiAgbnNFdmVudFN0YXR1c19lQ29uc3VtZURvRGVmYXVs
dAp9OwoKCgoKZW51bSBuc1NpemVNb2RlIHsKICBuc1NpemVNb2RlX05vcm1hbCA9IDAsCiAgbnNT
aXplTW9kZV9NaW5pbWl6ZWQsCiAgbnNTaXplTW9kZV9NYXhpbWl6ZWQKfTsKCgoKCmVudW0gbnNX
aW5kb3daIHsKICBuc1dpbmRvd1pUb3AgPSAwLAogIG5zV2luZG93WkJvdHRvbSwKICBuc1dpbmRv
d1pSZWxhdGl2ZQp9OwoKCgoKCnN0cnVjdCBuc0V2ZW50IHsKCiAgUFJVaW50OCBldmVudFN0cnVj
dFR5cGU7CgogIFBSVWludDMyIG1lc3NhZ2U7CgogIG5zUG9pbnQgcG9pbnQ7CgogIG5zUG9pbnQg
cmVmUG9pbnQ7CgogIFBSVWludDMyIHRpbWU7CgogIFBSVWludDMyIGZsYWdzOwoKICBQUlVpbnQz
MiBpbnRlcm5hbEFwcEZsYWdzOwoKICBuc0hhc2hLZXkqIHVzZXJUeXBlOwp9OwoKCgoKCnN0cnVj
dCBuc0dVSUV2ZW50IDogcHVibGljIG5zRXZlbnQgewoKICBuc0lXaWRnZXQqIHdpZGdldDsKCiAg
dm9pZCogbmF0aXZlTXNnOwp9OwoKCgoKCnN0cnVjdCBuc1NpemVFdmVudCA6IHB1YmxpYyBuc0dV
SUV2ZW50IHsKCiAgICBuc1JlY3QgKndpbmRvd1NpemU7CgogICAgUFJJbnQzMiBtV2luV2lkdGg7
CgogICAgUFJJbnQzMiBtV2luSGVpZ2h0Owp9OwoKCgoKCnN0cnVjdCBuc1NpemVNb2RlRXZlbnQg
OiBwdWJsaWMgbnNHVUlFdmVudCB7CgogICAgbnNTaXplTW9kZSBtU2l6ZU1vZGU7Cn07CgoKCgoK
c3RydWN0IG5zWkxldmVsRXZlbnQgOiBwdWJsaWMgbnNHVUlFdmVudCB7CgogIG5zV2luZG93WiBt
UGxhY2VtZW50OwogIG5zSVdpZGdldCAqbVJlcUJlbG93LAogICAgICAgICAgICAqbUFjdHVhbEJl
bG93OwogIFBSQm9vbCBtSW1tZWRpYXRlLAogICAgICAgICAgICAgbUFkanVzdGVkOwp9OwoKCgoK
CnN0cnVjdCBuc1BhaW50RXZlbnQgOiBwdWJsaWMgbnNHVUlFdmVudCB7CgogICAgbnNJUmVuZGVy
aW5nQ29udGV4dCAqcmVuZGVyaW5nQ29udGV4dDsKCiAgICBuc0lSZWdpb24gKnJlZ2lvbjsKCiAg
ICBuc1JlY3QgKnJlY3Q7Cn07CgoKCgoKc3RydWN0IG5zU2Nyb2xsYmFyRXZlbnQgOiBwdWJsaWMg
bnNHVUlFdmVudCB7CgogICAgUFJVaW50MzIgcG9zaXRpb247Cn07CgpzdHJ1Y3QgbnNTY3JvbGxQ
b3J0RXZlbnQgOiBwdWJsaWMgbnNHVUlFdmVudCB7CiAgZW51bSBvcmllbnRUeXBlIHsKICAgIHZl
cnRpY2FsID0gMCwKICAgIGhvcml6b250YWwgPSAxLAogICAgYm90aCA9IDIKICB9OwoKICBvcmll
bnRUeXBlIG9yaWVudDsKfTsKCnN0cnVjdCBuc0lucHV0RXZlbnQgOiBwdWJsaWMgbnNHVUlFdmVu
dCB7CgogICAgUFJCb29sIGlzU2hpZnQ7CgogICAgUFJCb29sIGlzQ29udHJvbDsKCiAgICBQUkJv
b2wgaXNBbHQ7CgoKICAgIFBSQm9vbCBpc01ldGE7Cn07CgoKCgoKc3RydWN0IG5zTW91c2VFdmVu
dCA6IHB1YmxpYyBuc0lucHV0RXZlbnQgewoKICAgIFBSVWludDMyIGNsaWNrQ291bnQ7CgoKICAg
IFBSQm9vbCBhY2NlcHRBY3RpdmF0aW9uOwp9OwoKCgoKCnN0cnVjdCBuc0FjY2Vzc2libGVFdmVu
dCA6IHB1YmxpYyBuc0lucHV0RXZlbnQgewogICAgbnNJQWNjZXNzaWJsZSogYWNjZXNzaWJsZTsK
fTsKCgoKCgpzdHJ1Y3QgbnNLZXlFdmVudCA6IHB1YmxpYyBuc0lucHV0RXZlbnQgewoKICAgIFBS
VWludDMyIGtleUNvZGU7CgogICAgUFJVaW50MzIgY2hhckNvZGU7CgogICAgUFJCb29sIGlzQ2hh
cjsKfTsKCgoKCnN0cnVjdCBuc1RleHRSYW5nZSB7CiAgICAgICAgUFJVaW50MzIgbVN0YXJ0T2Zm
c2V0OwogICAgICAgIFBSVWludDMyIG1FbmRPZmZzZXQ7CiAgICAgICAgUFJVaW50MzIgbVJhbmdl
VHlwZTsKfTsKCnR5cGVkZWYgc3RydWN0IG5zVGV4dFJhbmdlIG5zVGV4dFJhbmdlOwp0eXBlZGVm
IG5zVGV4dFJhbmdlKiBuc1RleHRSYW5nZUFycmF5OwoKc3RydWN0IG5zVGV4dEV2ZW50UmVwbHkg
ewogICAgICAgIG5zUmVjdCBtQ3Vyc29yUG9zaXRpb247CiAgICAgICAgUFJCb29sIG1DdXJzb3JJ
c0NvbGxhcHNlZDsKfTsKCnR5cGVkZWYgc3RydWN0IG5zVGV4dEV2ZW50UmVwbHkgbnNUZXh0RXZl
bnRSZXBseTsKCnN0cnVjdCBuc1RleHRFdmVudCA6IHB1YmxpYyBuc0lucHV0RXZlbnQgewogICAg
ICAgIFBSVW5pY2hhciogdGhlVGV4dDsKICAgICAgICBuc1RleHRFdmVudFJlcGx5IHRoZVJlcGx5
OwogICAgICAgIFBSVWludDMyIHJhbmdlQ291bnQ7CiAgICAgICAgbnNUZXh0UmFuZ2VBcnJheSBy
YW5nZUFycmF5OwogIFBSQm9vbCBpc0NoYXI7Cn07CgpzdHJ1Y3QgbnNDb21wb3NpdGlvbkV2ZW50
IDogcHVibGljIG5zSW5wdXRFdmVudCB7CiAgICAgICAgUFJVaW50MzIgY29tcG9zaXRpb25NZXNz
YWdlOwogICAgICAgIG5zVGV4dEV2ZW50UmVwbHkgdGhlUmVwbHk7Cn07CgpzdHJ1Y3QgbnNNb3Vz
ZVNjcm9sbEV2ZW50IDogcHVibGljIG5zSW5wdXRFdmVudCB7CgogIGVudW0gbnNNb3VzZVNjcm9s
bEZsYWdzIHsKICAgIGtJc0Z1bGxQYWdlID0gMSA8PCAwLAogICAga0lzVmVydGljYWwgPSAxIDw8
IDEsCiAgICBrSXNIb3Jpem9udGFsID0gMSA8PCAyCiAgfTsKCiAgUFJJbnQzMiBzY3JvbGxGbGFn
czsKICBQUkludDMyIGRlbHRhOwp9OwoKc3RydWN0IG5zUmVjb252ZXJzaW9uRXZlbnRSZXBseSB7
CiAgUFJVbmljaGFyICptUmVjb252ZXJzaW9uU3RyaW5nOwp9OwoKc3RydWN0IG5zUmVjb252ZXJz
aW9uRXZlbnQgOiBwdWJsaWMgbnNJbnB1dEV2ZW50IHsKICBuc1JlY29udmVyc2lvbkV2ZW50UmVw
bHkgdGhlUmVwbHk7Cn07CgoKCgpzdHJ1Y3QgbnNUb29sdGlwRXZlbnQgOiBwdWJsaWMgbnNHVUlF
dmVudCB7CgogICAgUFJVaW50MzIgdGlwSW5kZXg7Cn07CiMgMjg5ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNHVUlFdmVudC5oIgpzdHJ1Y3QgbnNNZW51RXZlbnQgOiBwdWJsaWMgbnNHVUlF
dmVudCB7CiAgbnNJTWVudUl0ZW0gKiBtTWVudUl0ZW07CiAgUFJVaW50MzIgbUNvbW1hbmQ7Cn07
CiMgMzAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNHVUlFdmVudC5oIgpzdHJ1Y3QgbnNG
b3JtRXZlbnQgOiBwdWJsaWMgbnNFdmVudCB7CiAgbnNJQ29udGVudCAqb3JpZ2luYXRvcjsKfTsK
CgoKCgplbnVtIG5zRHJhZ0Ryb3BFdmVudFN0YXR1cyB7CgogIG5zRHJhZ0Ryb3BFdmVudFN0YXR1
c19lRHJhZ0VudGVyZWQsCgogIG5zRHJhZ0Ryb3BFdmVudFN0YXR1c19lRHJhZ0V4aXRlZCwKCiAg
bnNEcmFnRHJvcEV2ZW50U3RhdHVzX2VEcm9wCn07CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lNb3VzZUxpc3RlbmVyLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJU3VwcG9ydHMuaCIgMQojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTW91c2VM
aXN0ZW5lci5oIiAyCiMgNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNb3VzZUxpc3Rl
bmVyLmgiCmNsYXNzIG5zSU1vdXNlTGlzdGVuZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJs
aWM6CiAgICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg
aWlkID0geyAweGM4M2Y2YjgxLCAweGQ3Y2UsIDB4MTFkMiwgeyAweDgzLCAweDYwLCAweGM0LCAw
eGM4LCAweDk0LCAweGM0LCAweDkxLCAweDdjIH0gfTsgcmV0dXJuIGlpZDt9CgoKCgoKCiAgICB2
aXJ0dWFsIG5zRXZlbnRTdGF0dXMgTW91c2VQcmVzc2VkKGNvbnN0IG5zR1VJRXZlbnQgJiBhTW91
c2VFdmVudCkgPSAwOwoKCgoKCgogICAgdmlydHVhbCBuc0V2ZW50U3RhdHVzIE1vdXNlUmVsZWFz
ZWQoY29uc3QgbnNHVUlFdmVudCAmIGFNb3VzZUV2ZW50KSA9IDA7CgoKCgoKCgogICAgdmlydHVh
bCBuc0V2ZW50U3RhdHVzIE1vdXNlQ2xpY2tlZChjb25zdCBuc0dVSUV2ZW50ICYgYU1vdXNlRXZl
bnQpID0gMDsKCgoKCgoKICAgIHZpcnR1YWwgbnNFdmVudFN0YXR1cyBNb3VzZU1vdmVkKGNvbnN0
IG5zR1VJRXZlbnQgJiBhTW91c2VFdmVudCkgPSAwOwoKfTsKIyAyOSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVdpZGdldC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SU1lbnVMaXN0ZW5lci5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW51
TGlzdGVuZXIuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNHVUlFdmVudC5oIiAx
CiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW51TGlzdGVuZXIuaCIgMgojIDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjggIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lNZW51TGlzdGVuZXIuaCIgMgojIDQxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJTWVudUxpc3RlbmVyLmgiCmNsYXNzIG5zSU1lbnVMaXN0ZW5lciA6IHB1
YmxpYyBuc0lTdXBwb3J0cyB7CgogIHB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4ZjJlNzk2MDIsIDB4MTcwMCwgMHgx
MWQ1LCB7IDB4YmIsIDB4NmYsIDB4OTAsIDB4ZjIsIDB4NDAsIDB4ZmUsIDB4NDksIDB4M2MgfSB9
OzsgcmV0dXJuIGlpZDt9CgoKCgoKCiAgICB2aXJ0dWFsIG5zRXZlbnRTdGF0dXMgTWVudUl0ZW1T
ZWxlY3RlZChjb25zdCBuc01lbnVFdmVudCAmIGFNZW51RXZlbnQpID0gMDsKCgoKCgoKICAgIHZp
cnR1YWwgbnNFdmVudFN0YXR1cyBNZW51U2VsZWN0ZWQoY29uc3QgbnNNZW51RXZlbnQgJiBhTWVu
dUV2ZW50KSA9IDA7CgoKCgoKCiAgICB2aXJ0dWFsIG5zRXZlbnRTdGF0dXMgTWVudURlc2VsZWN0
ZWQoY29uc3QgbnNNZW51RXZlbnQgJiBhTWVudUV2ZW50KSA9IDA7CgogICAgdmlydHVhbCBuc0V2
ZW50U3RhdHVzIE1lbnVDb25zdHJ1Y3QoIGNvbnN0IG5zTWVudUV2ZW50ICYgYU1lbnVFdmVudCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2lkZ2V0KiBhUGFy
ZW50V2luZG93LCB2b2lkKiBhTm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCogYVdlYlNoZWxsKSA9IDA7CgogICAgdmlydHVhbCBuc0V2ZW50U3RhdHVz
IE1lbnVEZXN0cnVjdChjb25zdCBuc01lbnVFdmVudCAmIGFNZW51RXZlbnQpID0gMDsKCiAgICB2
aXJ0dWFsIG5zRXZlbnRTdGF0dXMgQ2hlY2tSZWJ1aWxkKFBSQm9vbCAmIGFNZW51RXZlbnQpID0g
MDsKICAgIHZpcnR1YWwgbnNFdmVudFN0YXR1cyBTZXRSZWJ1aWxkKFBSQm9vbCBhTWVudUV2ZW50
KSA9IDA7Cn07CiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIgMgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIiAxCiMgMjYgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFn
ZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUmVjdC5oIiAxCiMgMjggIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc2NvcmUuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVy
aW5nQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRz
LmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQu
aCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NvbG9yLmgiIDEKIyAyOSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIgMgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiIDEKIyAzMCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lEcmF3aW5nU3VyZmFjZS5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lEcmF3aW5nU3VyZmFjZS5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2Nv
cmUuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRHJhd2luZ1N1cmZhY2Uu
aCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjgg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEcmF3aW5nU3VyZmFjZS5oIiAyCiMgMSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUmVjdC5oIiAxCiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lEcmF3aW5nU3VyZmFjZS5oIiAyCgoKCnR5cGVkZWYgc3RydWN0CnsKICBQUlVp
bnQzMiBtUmVkWmVyb01hc2s7CiAgUFJVaW50MzIgbUdyZWVuWmVyb01hc2s7CiAgUFJVaW50MzIg
bUJsdWVaZXJvTWFzazsKICBQUlVpbnQzMiBtQWxwaGFaZXJvTWFzazsKICBQUlVpbnQzMiBtUmVk
TWFzazsKICBQUlVpbnQzMiBtR3JlZW5NYXNrOwogIFBSVWludDMyIG1CbHVlTWFzazsKICBQUlVp
bnQzMiBtQWxwaGFNYXNrOwogIFBSVWludDggbVJlZENvdW50OwogIFBSVWludDggbUdyZWVuQ291
bnQ7CiAgUFJVaW50OCBtQmx1ZUNvdW50OwogIFBSVWludDggbUFscGhhQ291bnQ7CiAgUFJVaW50
OCBtUmVkU2hpZnQ7CiAgUFJVaW50OCBtR3JlZW5TaGlmdDsKICBQUlVpbnQ4IG1CbHVlU2hpZnQ7
CiAgUFJVaW50OCBtQWxwaGFTaGlmdDsKfSBuc1BpeGVsRm9ybWF0OwoKCgoKCgoKY2xhc3MgbnNJ
RHJhd2luZ1N1cmZhY2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMKewpwdWJsaWM6CiAgc3RhdGljIGNv
bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHg2MWNjNzdl
MCwgMHhjYWFjLCAweDExZDIsIHsgMHhhOCwgMHg0OSwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5YSwg
MHgyOCwgMHhjOSB9IH07IHJldHVybiBpaWQ7fQojIDc5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRHJhd2luZ1N1cmZhY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IExvY2soUFJJbnQzMiBh
WCwgUFJJbnQzMiBhWSwgUFJVaW50MzIgYVdpZHRoLCBQUlVpbnQzMiBhSGVpZ2h0LAogICAgICAg
ICAgICAgICAgICB2b2lkICoqYUJpdHMsIFBSSW50MzIgKmFTdHJpZGUsIFBSSW50MzIgKmFXaWR0
aEJ5dGVzLAogICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhRmxhZ3MpID0gMDsKCgoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBVbmxvY2sodm9pZCkgPSAwOwojIDk4ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJRHJhd2luZ1N1cmZhY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpbWVu
c2lvbnMoUFJVaW50MzIgKmFXaWR0aCwgUFJVaW50MzIgKmFIZWlnaHQpID0gMDsKIyAxMDkgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEcmF3aW5nU3VyZmFjZS5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgSXNPZmZzY3JlZW4oUFJCb29sICphT2ZmU2NyZWVuKSA9IDA7CiMgMTIzICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRHJhd2luZ1N1cmZhY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0
IElzUGl4ZWxBZGRyZXNzYWJsZShQUkJvb2wgKmFBZGRyZXNzYWJsZSkgPSAwOwojIDEzMiAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURyYXdpbmdTdXJmYWNlLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRQaXhlbEZvcm1hdChuc1BpeGVsRm9ybWF0ICphRm9ybWF0KSA9IDA7Cn07CiMgMzEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiIDIKCmNsYXNz
IG5zSVdpZGdldDsKY2xhc3MgbnNJRm9udE1ldHJpY3M7CmNsYXNzIG5zSUltYWdlOwpjbGFzcyBu
c1RyYW5zZm9ybTJEOwpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNJRGV2aWNlQ29udGV4dDsKY2xh
c3MgbnNJUmVnaW9uOwoKc3RydWN0IG5zRm9udDsKc3RydWN0IG5zUG9pbnQ7CnN0cnVjdCBuc1Jl
Y3Q7CgpzdHJ1Y3QgbnNCb3VuZGluZ01ldHJpY3M7CgoKCgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvZ2Z4dHlwZXMuaCIgMQojIDE0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvZ2Z4
dHlwZXMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvZ2Z4MnR5cGVzLmgiIDEKIyAx
NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2dmeDJ0eXBlcy5oIgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9nZnhjb21wYXQuaCIgMQojIDM2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvZ2Z4Y29tcGF0LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIg
MQojIDM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvZ2Z4Y29tcGF0LmgiIDIKIyAxOCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2dmeDJ0eXBlcy5oIiAyCgoKCgp0eXBlZGVmIGZsb2F0IGdm
eF9kaW1lbnNpb247CgoKCgoKdHlwZWRlZiBmbG9hdCBnZnhfY29vcmQ7CgoKCgoKdHlwZWRlZiBm
bG9hdCBnZnhfYW5nbGU7CgoKCgoKCgp0eXBlZGVmIFBSVWludDMyIGdmeF9jb2xvcjsKCgoKCgp0
eXBlZGVmIFBSVWludDE2IGdmeF9kZXB0aDsKCgoKCgoKdHlwZWRlZiBQUkludDMyIGdmeF9mb3Jt
YXQ7CgoKCgoKdHlwZWRlZiBmbG9hdCBnZnhfZ2FtbWE7CiMgMTUgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9nZnh0eXBlcy5oIiAyCgoKCgoKCnR5cGVkZWYgUFJJbnQzMiBuc2Nvb3JkOwojIDUx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIiAyCmNsYXNz
IGltZ0lDb250YWluZXI7CgoKCgp0eXBlZGVmIGVudW0KewogIG5zQ2xpcENvbWJpbmVfa0ludGVy
c2VjdCA9IDAsCiAgbnNDbGlwQ29tYmluZV9rVW5pb24gPSAxLAogIG5zQ2xpcENvbWJpbmVfa1N1
YnRyYWN0ID0gMiwKICBuc0NsaXBDb21iaW5lX2tSZXBsYWNlID0gMwp9IG5zQ2xpcENvbWJpbmU7
CgoKdHlwZWRlZiBlbnVtCnsKICBuc0xpbmVTdHlsZV9rTm9uZSA9IDAsCiAgbnNMaW5lU3R5bGVf
a1NvbGlkID0gMSwKICBuc0xpbmVTdHlsZV9rRGFzaGVkID0gMiwKICBuc0xpbmVTdHlsZV9rRG90
dGVkID0gMwp9IG5zTGluZVN0eWxlOwojIDgwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
UmVuZGVyaW5nQ29udGV4dC5oIgp0eXBlZGVmIHZvaWQgKiBuc0RyYXdpbmdTdXJmYWNlOwoKCmNs
YXNzIG5zSVJlbmRlcmluZ0NvbnRleHQgOiBwdWJsaWMgbnNJU3VwcG9ydHMKewpwdWJsaWM6CiAg
c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsg
MHhhNmNmOTA2OCwgMHgxNWIzLCAweDExZDIsezB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYs
IDB4OGEsIDB4ZGQsIDB4MzJ9fTsgcmV0dXJuIGlpZDt9CiMgOTcgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5z
SURldmljZUNvbnRleHQqIGFDb250ZXh0LCBuc0lXaWRnZXQgKmFXaWRnZXQpID0gMDsKCgoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSURldmljZUNvbnRleHQqIGFDb250ZXh0LCBuc0Ry
YXdpbmdTdXJmYWNlIGFTdXJmYWNlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzZXQo
dm9pZCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZXZpY2VDb250ZXh0KG5zSURl
dmljZUNvbnRleHQgKiYgYURldmljZUNvbnRleHQpID0gMDsKIyAxMjggIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBMb2Nr
RHJhd2luZ1N1cmZhY2UoUFJJbnQzMiBhWCwgUFJJbnQzMiBhWSwgUFJVaW50MzIgYVdpZHRoLCBQ
UlVpbnQzMiBhSGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiph
Qml0cywgUFJJbnQzMiAqYVN0cmlkZSwgUFJJbnQzMiAqYVdpZHRoQnl0ZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUZsYWdzKSA9IDA7CgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBVbmxvY2tEcmF3aW5nU3VyZmFjZSh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgU2VsZWN0T2ZmU2NyZWVuRHJhd2luZ1N1cmZhY2UobnNEcmF3aW5nU3VyZmFj
ZSBhU3VyZmFjZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREcmF3aW5nU3VyZmFj
ZShuc0RyYXdpbmdTdXJmYWNlICphU3VyZmFjZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRIaW50cyhQUlVpbnQzMiYgYVJlc3VsdCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IFB1c2hTdGF0ZSh2b2lkKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQb3BTdGF0ZShQ
UkJvb2wgJmFDbGlwRW1wdHkpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzVmlzaWJs
ZVJlY3QoY29uc3QgbnNSZWN0JiBhUmVjdCwgUFJCb29sICZhSXNWaXNpYmxlKSA9IDA7CiMgMTg1
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgU2V0Q2xpcFJlY3QoY29uc3QgbnNSZWN0JiBhUmVjdCwgbnNDbGlwQ29tYmlu
ZSBhQ29tYmluZSwgUFJCb29sICZhQ2xpcEVtcHR5KSA9IDA7CiMgMTk0ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
Q2xpcFJlY3QobnNSZWN0ICZhUmVjdCwgUFJCb29sICZhSGFzTG9jYWxDbGlwKSA9IDA7CgoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMaW5lU3R5bGUobnNMaW5lU3R5bGUgYUxpbmVTdHlsZSkg
PSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGluZVN0eWxlKG5zTGluZVN0eWxlICZh
TGluZVN0eWxlKSA9IDA7CiMgMjE3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVy
aW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2xpcFJlZ2lvbihjb25zdCBuc0lS
ZWdpb24mIGFSZWdpb24sIG5zQ2xpcENvbWJpbmUgYUNvbWJpbmUsIFBSQm9vbCAmYUNsaXBFbXB0
eSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvcHlDbGlwUmVnaW9uKG5zSVJlZ2lv
biAmYVJlZ2lvbikgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENsaXBSZWdpb24o
bnNJUmVnaW9uICoqYVJlZ2lvbikgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb2xv
cihuc2NvbG9yIGFDb2xvcikgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb2xvcihu
c2NvbG9yICZhQ29sb3IpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Rm9u
dChjb25zdCBuc0ZvbnQmIGFGb250KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRG
b250KG5zSUZvbnRNZXRyaWNzICphRm9udE1ldHJpY3MpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0Rm9udE1ldHJpY3MobnNJRm9udE1ldHJpY3MgKiZhRm9udE1ldHJpY3MpID0gMDsK
CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRyYW5zbGF0ZShuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZ
KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTY2FsZShmbG9hdCBhU3gsIGZsb2F0IGFT
eSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJyZW50VHJhbnNmb3JtKG5zVHJh
bnNmb3JtMkQgKiZhVHJhbnNmb3JtKSA9IDA7CiMgMjk2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlRHJhd2lu
Z1N1cmZhY2UobnNSZWN0ICphQm91bmRzLCBQUlVpbnQzMiBhU3VyZkZsYWdzLCBuc0RyYXdpbmdT
dXJmYWNlICZhU3VyZmFjZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZXN0cm95RHJh
d2luZ1N1cmZhY2UobnNEcmF3aW5nU3VyZmFjZSBhRFMpID0gMDsKIyAzMTEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBE
cmF3TGluZShuc2Nvb3JkIGFYMCwgbnNjb29yZCBhWTAsIG5zY29vcmQgYVgxLCBuc2Nvb3JkIGFZ
MSkgPSAwOwojIDMyMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRl
eHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdTdGRMaW5lKG5zY29vcmQgYVgwLCBuc2Nvb3Jk
IGFZMCwgbnNjb29yZCBhWDEsIG5zY29vcmQgYVkxKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBEcmF3UG9seWxpbmUoY29uc3QgbnNQb2ludCBhUG9pbnRzW10sIFBSSW50MzIgYU51bVBv
aW50cykgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3UmVjdChjb25zdCBuc1JlY3Qm
IGFSZWN0KSA9IDA7CiMgMzQzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5n
Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd1JlY3QobnNjb29yZCBhWCwgbnNjb29y
ZCBhWSwgbnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYUhlaWdodCkgPSAwOwoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBGaWxsUmVjdChjb25zdCBuc1JlY3QmIGFSZWN0KSA9IDA7CiMgMzU4ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgRmlsbFJlY3QobnNjb29yZCBhWCwgbnNjb29yZCBhWSwgbnNjb29yZCBhV2lkdGgsIG5z
Y29vcmQgYUhlaWdodCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZlcnRSZWN0KGNv
bnN0IG5zUmVjdCYgYVJlY3QpID0gMDsKIyAzNzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZlcnRSZWN0KG5zY29v
cmQgYVgsIG5zY29vcmQgYVksIG5zY29vcmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpID0gMDsK
CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdQb2x5Z29uKGNvbnN0IG5zUG9pbnQgYVBvaW50
c1tdLCBQUkludDMyIGFOdW1Qb2ludHMpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZp
bGxQb2x5Z29uKGNvbnN0IG5zUG9pbnQgYVBvaW50c1tdLCBQUkludDMyIGFOdW1Qb2ludHMpID0g
MDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJhc3RlclBvbHlnb24oY29uc3QgbnNQb2ludCBh
UG9pbnRzW10sIFBSSW50MzIgYU51bVBvaW50cyk9MDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEZpbGxTdGRQb2x5Z29uKGNvbnN0IG5zUG9pbnQgYVBvaW50c1tdLCBQUkludDMyIGFOdW1Qb2lu
dHMpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd0VsbGlwc2UoY29uc3QgbnNSZWN0
JiBhUmVjdCkgPSAwOwojIDQxNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmlu
Z0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdFbGxpcHNlKG5zY29vcmQgYVgsIG5z
Y29vcmQgYVksIG5zY29vcmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpID0gMDsKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgRmlsbEVsbGlwc2UoY29uc3QgbnNSZWN0JiBhUmVjdCkgPSAwOwojIDQz
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IEZpbGxFbGxpcHNlKG5zY29vcmQgYVgsIG5zY29vcmQgYVksIG5zY29vcmQg
YVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBE
cmF3QXJjKGNvbnN0IG5zUmVjdCYgYVJlY3QsCiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFT
dGFydEFuZ2xlLCBmbG9hdCBhRW5kQW5nbGUpID0gMDsKIyA0NTEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3QXJj
KG5zY29vcmQgYVgsIG5zY29vcmQgYVksIG5zY29vcmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQs
CiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFTdGFydEFuZ2xlLCBmbG9hdCBhRW5kQW5nbGUp
ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaWxsQXJjKGNvbnN0IG5zUmVjdCYgYVJl
Y3QsCiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGFTdGFydEFuZ2xlLCBmbG9hdCBhRW5kQW5n
bGUpID0gMDsKIyA0NzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250
ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBGaWxsQXJjKG5zY29vcmQgYVgsIG5zY29vcmQgYVks
IG5zY29vcmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgIGZs
b2F0IGFTdGFydEFuZ2xlLCBmbG9hdCBhRW5kQW5nbGUpID0gMDsKIyA0ODIgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRXaWR0aChjaGFyIGFDLCBuc2Nvb3JkICZhV2lkdGgpID0gMDsKIyA0OTQgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRXaWR0aChQUlVuaWNoYXIgYUMsIG5zY29vcmQgJmFXaWR0aCwKICAgICAgICAgICAgICAgICAg
ICAgIFBSSW50MzIgKmFGb250SUQgPSAwKSA9IDA7CiMgNTA3ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0V2lkdGgo
Y29uc3QgbnNTdHJpbmcmIGFTdHJpbmcsIG5zY29vcmQgJmFXaWR0aCwKICAgICAgICAgICAgICAg
ICAgICAgIFBSSW50MzIgKmFGb250SUQgPSAwKSA9IDA7CiMgNTE3ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0V2lk
dGgoY29uc3QgY2hhciogYVN0cmluZywgbnNjb29yZCYgYVdpZHRoKSA9IDA7CiMgNTI3ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0V2lkdGgoY29uc3QgY2hhciogYVN0cmluZywgUFJVaW50MzIgYUxlbmd0aCwKICAg
ICAgICAgICAgICAgICAgICAgIG5zY29vcmQmIGFXaWR0aCkgPSAwOwojIDU0MSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldFdpZHRoKGNvbnN0IFBSVW5pY2hhciAqYVN0cmluZywgUFJVaW50MzIgYUxlbmd0aCwKICAg
ICAgICAgICAgICAgICAgICAgIG5zY29vcmQgJmFXaWR0aCwgUFJJbnQzMiAqYUZvbnRJRCA9IDAp
ID0gMDsKIyA2MTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3U3RyaW5nKGNvbnN0IGNoYXIgKmFTdHJpbmcsIFBS
VWludDMyIGFMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYVgsIG5zY29v
cmQgYVksCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zY29vcmQqIGFTcGFjaW5nID0g
MCkgPSAwOwojIDYyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRl
eHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdTdHJpbmcoY29uc3QgUFJVbmljaGFyICphU3Ry
aW5nLCBQUlVpbnQzMiBhTGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFY
LCBuc2Nvb3JkIGFZLAogICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFGb250SUQgPSAt
MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNjb29yZCogYVNwYWNpbmcgPSAwKSA9
IDA7CiMgNjQyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd1N0cmluZyhjb25zdCBuc1N0cmluZyYgYVN0cmluZywg
bnNjb29yZCBhWCwgbnNjb29yZCBhWSwKICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBh
Rm9udElEID0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zY29vcmQqIGFTcGFj
aW5nID0gMCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRHJhd0ltYWdlKG5zSUltYWdl
ICphSW1hZ2UsIG5zY29vcmQgYVgsIG5zY29vcmQgYVkpID0gMDsKIyA2NjAgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBE
cmF3SW1hZ2UobnNJSW1hZ2UgKmFJbWFnZSwgbnNjb29yZCBhWCwgbnNjb29yZCBhWSwKICAgICAg
ICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdJbWFnZShuc0lJbWFnZSAqYUltYWdlLCBjb25zdCBu
c1JlY3QmIGFSZWN0KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3SW1hZ2UobnNJ
SW1hZ2UgKmFJbWFnZSwgY29uc3QgbnNSZWN0JiBhU1JlY3QsIGNvbnN0IG5zUmVjdCYgYURSZWN0
KT0wOwojIDY4OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQu
aCIKICB2aXJ0dWFsIG5zcmVzdWx0IERyYXdUaWxlKG5zSUltYWdlICphSW1hZ2UsbnNjb29yZCBh
WDAsbnNjb29yZCBhWTAsbnNjb29yZCBhWDEsbnNjb29yZCBhWTEsCiAgICAgICAgICAgICAgICAg
ICAgICAgIG5zY29vcmQgYVdpZHRoLG5zY29vcmQgYUhlaWdodCkgPSAwOwojIDcwMiAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IERyYXdQYXRoKG5zUGF0aFBvaW50IGFQb2ludEFycmF5W10sUFJJbnQzMiBhTnVtUHRzKSA9
IDA7CiMgNzExICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgRmlsbFBhdGgobnNQYXRoUG9pbnQgYVBvaW50QXJyYXlbXSxQ
UkludDMyIGFOdW1QdHMpID0gMDsKIyA3MjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lS
ZW5kZXJpbmdDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5T2ZmU2NyZWVuQml0cyhu
c0RyYXdpbmdTdXJmYWNlIGFTcmNTdXJmLCBQUkludDMyIGFTcmNYLCBQUkludDMyIGFTcmNZLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0ICZhRGVzdEJvdW5kcywg
UFJVaW50MzIgYUNvcHlGbGFncykgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFJldHJpZXZlQ3Vy
cmVudE5hdGl2ZUdyYXBoaWNEYXRhKFBSVWludDMyICogbmdkKSA9IDA7CiMgNzM0ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgRHJhd1RpbGUobnNJSW1hZ2UgKmFJbWFnZSwgbnNjb29yZCBhU3JjWE9mZnNldCwKICAgICAg
ICAgICAgICAgICAgICAgIG5zY29vcmQgYVNyY1lPZmZzZXQsIGNvbnN0IG5zUmVjdCAmYVRpbGVS
ZWN0KSA9IDA7CiMgNzQ2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29u
dGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQKICBHZXRCb3VuZGluZ01ldHJpY3MoY29uc3QgY2hh
ciogYVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUxlbmd0aCwKICAgICAg
ICAgICAgICAgICAgICAgbnNCb3VuZGluZ01ldHJpY3MmIGFCb3VuZGluZ01ldHJpY3MpID0gMDsK
IyA3NjAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAg
dmlydHVhbCBuc3Jlc3VsdAogIEdldEJvdW5kaW5nTWV0cmljcyhjb25zdCBQUlVuaWNoYXIqIGFT
dHJpbmcsCiAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFMZW5ndGgsCiAgICAgICAgICAg
ICAgICAgICAgIG5zQm91bmRpbmdNZXRyaWNzJiBhQm91bmRpbmdNZXRyaWNzLAogICAgICAgICAg
ICAgICAgICAgICBQUkludDMyKiBhRm9udElEID0gMCkgPSAwOwojIDc3OSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERy
YXdJbWFnZShpbWdJQ29udGFpbmVyICphSW1hZ2UsIGNvbnN0IG5zUmVjdCAqIGFTcmNSZWN0LCBj
b25zdCBuc1BvaW50ICogYURlc3RQb2ludCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3
U2NhbGVkSW1hZ2UoaW1nSUNvbnRhaW5lciAqYUltYWdlLCBjb25zdCBuc1JlY3QgKiBhU3JjUmVj
dCwgY29uc3QgbnNSZWN0ICogYURlc3RSZWN0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERy
YXdUaWxlKGltZ0lDb250YWluZXIgKmFJbWFnZSwgbnNjb29yZCBhWE9mZnNldCwgbnNjb29yZCBh
WU9mZnNldCwgY29uc3QgbnNSZWN0ICogYVRhcmdldFJlY3QpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgRHJhd1NjYWxlZFRpbGUoaW1nSUNvbnRhaW5lciAqYUltYWdlLCBuc2Nvb3JkIGFYT2Zm
c2V0LCBuc2Nvb3JkIGFZT2Zmc2V0LCBuc2Nvb3JkIGFUaWxlV2lkdGgsIG5zY29vcmQgYVRpbGVI
ZWlnaHQsIGNvbnN0IG5zUmVjdCAqIGFUYXJnZXRSZWN0KSA9IDA7Cgp9OwojIDg1NiAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIKc3RydWN0IG5zQm91bmRp
bmdNZXRyaWNzIHsKIyA4NzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdD
b250ZXh0LmgiCiAgbnNjb29yZCBsZWZ0QmVhcmluZzsKCgoKICBuc2Nvb3JkIHJpZ2h0QmVhcmlu
ZzsKCgoKCgogIG5zY29vcmQgYXNjZW50OwoKCgogIG5zY29vcmQgZGVzY2VudDsKIyA4OTkgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0LmgiCiAgbnNjb29yZCB3
aWR0aDsKIyA5MDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZW5kZXJpbmdDb250ZXh0
LmgiCiAgdm9pZAogIENsZWFyKCkgewogICAgbGVmdEJlYXJpbmcgPSByaWdodEJlYXJpbmcgPSAw
OwogICAgYXNjZW50ID0gZGVzY2VudCA9IHdpZHRoID0gMDsKICB9CgoKCgoKCiAgdm9pZAogIG9w
ZXJhdG9yICs9IChjb25zdCBuc0JvdW5kaW5nTWV0cmljcyYgYm0pIHsKICAgIGlmIChhc2NlbnQg
PCBibS5hc2NlbnQpIGFzY2VudCA9IGJtLmFzY2VudDsKICAgIGlmIChkZXNjZW50IDwgYm0uZGVz
Y2VudCkgZGVzY2VudCA9IGJtLmRlc2NlbnQ7CiAgICByaWdodEJlYXJpbmcgPSB3aWR0aCArIGJt
LnJpZ2h0QmVhcmluZzsKICAgIHdpZHRoICs9IGJtLndpZHRoOwogIH0KfTsKIyAyOSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUltYWdlLmgiIDIKCnR5cGVkZWYgc3RydWN0CnsKCgoKICBQ
UkludDMyIE51bUNvbG9yczsKCgoKICBQUlVpbnQ4ICpJbmRleDsKCn0gbnNDb2xvck1hcDsKCnR5
cGVkZWYgZW51bSB7CiAgICBuc01hc2tSZXF1aXJlbWVudHNfa05vTWFzaywKICAgIG5zTWFza1Jl
cXVpcmVtZW50c19rTmVlZHMxQml0LAogICAgbnNNYXNrUmVxdWlyZW1lbnRzX2tOZWVkczhCaXQK
fSBuc01hc2tSZXF1aXJlbWVudHM7CiMgNTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJ
bWFnZS5oIgpjbGFzcyBuc0lJbWFnZSA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CgpwdWJsaWM6CiAg
c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsg
MHgwYjRmYWFhMCwgMHhhYTNhLCAweDExZDEsIHsgMHhhOCwgMHgyNCwgMHgwMCwgMHg0MCwgMHg5
NSwgMHg5YSwgMHgyOCwgMHhjOSB9IH07IHJldHVybiBpaWQ7fQojIDcyICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJSW1hZ2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQoUFJJbnQzMiBh
V2lkdGgsIFBSSW50MzIgYUhlaWdodCwgUFJJbnQzMiBhRGVwdGgsIG5zTWFza1JlcXVpcmVtZW50
cyBhTWFza1JlcXVpcmVtZW50cykgPSAwOwoKCgoKCgogIHZpcnR1YWwgUFJJbnQzMiBHZXRCeXRl
c1BpeCgpID0gMDsKCgoKCgoKICB2aXJ0dWFsIFBSQm9vbCBHZXRJc1Jvd09yZGVyVG9wVG9Cb3R0
b20oKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBQUkludDMyIEdldFdpZHRoKCkgPSAwOwoKCgoKCgog
IHZpcnR1YWwgUFJJbnQzMiBHZXRIZWlnaHQoKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IFNldERlY29kZWRSZWN0KFBSSW50MzIsIFBSSW50MzIsIFBSSW50MzIsIFBSSW50MzIpID0gMDsK
ICB2aXJ0dWFsIFBSSW50MzIgR2V0RGVjb2RlZFgxKCkgPSAwOwogIHZpcnR1YWwgUFJJbnQzMiBH
ZXREZWNvZGVkWTEoKSA9IDA7CiAgdmlydHVhbCBQUkludDMyIEdldERlY29kZWRYMigpID0gMDsK
ICB2aXJ0dWFsIFBSSW50MzIgR2V0RGVjb2RlZFkyKCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0
IFNldE5hdHVyYWxXaWR0aChQUkludDMyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXROYXR1
cmFsSGVpZ2h0KFBSSW50MzIpID0gMDsKICB2aXJ0dWFsIFBSSW50MzIgR2V0TmF0dXJhbFdpZHRo
KCkgPSAwOwogIHZpcnR1YWwgUFJJbnQzMiBHZXROYXR1cmFsSGVpZ2h0KCkgPSAwOwoKCgoKCgog
IHZpcnR1YWwgUFJVaW50OCAqIEdldEJpdHMoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBQUkludDMy
IEdldExpbmVTdHJpZGUoKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgUFJCb29sIEdldEhhc0FscGhh
TWFzaygpID0gMDsKCgoKCgoKICB2aXJ0dWFsIFBSVWludDggKiBHZXRBbHBoYUJpdHMoKSA9IDA7
CgoKCgoKCiAgdmlydHVhbCBQUkludDMyIEdldEFscGhhV2lkdGgoKSA9IDA7CgoKCgoKCiAgdmly
dHVhbCBQUkludDMyIEdldEFscGhhSGVpZ2h0KCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgUFJJbnQz
MiBHZXRBbHBoYUxpbmVTdHJpZGUoKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgdm9pZCBJbWFnZVVw
ZGF0ZWQobnNJRGV2aWNlQ29udGV4dCAqYUNvbnRleHQsIFBSVWludDggYUZsYWdzLCBuc1JlY3Qg
KmFVcGRhdGVSZWN0KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBQUkJvb2wgSXNPcHRpbWl6ZWQoKSA9
IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3B0aW1pemUobnNJRGV2aWNlQ29udGV4dCog
YUNvbnRleHQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zQ29sb3JNYXAgKiBHZXRDb2xvck1hcCgp
ID0gMDsKIyAyMDcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgRHJhdyhuc0lSZW5kZXJpbmdDb250ZXh0ICZhQ29udGV4dCwgbnNEcmF3aW5n
U3VyZmFjZSBhU3VyZmFjZSwgUFJJbnQzMiBhWCwgUFJJbnQzMiBhWSwgUFJJbnQzMiBhV2lkdGgs
IFBSSW50MzIgYUhlaWdodCkgPSAwOwojIDIyMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUltYWdlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEcmF3KG5zSVJlbmRlcmluZ0NvbnRleHQgJmFD
b250ZXh0LCBuc0RyYXdpbmdTdXJmYWNlIGFTdXJmYWNlLCBQUkludDMyIGFTWCwgUFJJbnQzMiBh
U1ksIFBSSW50MzIgYVNXaWR0aCwgUFJJbnQzMiBhU0hlaWdodCwKICAgICAgICAgICAgICAgICAg
UFJJbnQzMiBhRFgsIFBSSW50MzIgYURZLCBQUkludDMyIGFEV2lkdGgsIFBSSW50MzIgYURIZWln
aHQpID0gMDsKIyAyMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgRHJhd1RvSW1hZ2UobnNJSW1hZ2UqIGFEc3RJbWFnZSwgUFJJbnQzMiBh
RFgsIFBSSW50MzIgYURZLCBQUkludDMyIGFEV2lkdGgsIFBSSW50MzIgYURIZWlnaHQpID0gMDsK
CgoKCgoKCiAgdmlydHVhbCB2b2lkIFNldEFscGhhTGV2ZWwoUFJJbnQzMiBhQWxwaGFMZXZlbCkg
PSAwOwoKCgoKCgogIHZpcnR1YWwgUFJJbnQzMiBHZXRBbHBoYUxldmVsKCkgPSAwOwoKCgoKCgog
IHZpcnR1YWwgdm9pZCogR2V0Qml0SW5mbygpID0gMDsKIyAyNzQgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lJbWFnZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgTG9ja0ltYWdlUGl4ZWxzKFBS
Qm9vbCBhTWFza1BpeGVscykgPSAwOwojIDI4NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUltYWdlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVbmxvY2tJbWFnZVBpeGVscyhQUkJvb2wgYU1h
c2tQaXhlbHMpID0gMDsKIyAyOTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbWFnZS5o
Igp9OwojIDMxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiIDIKCiMgMSAi
L0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiIDEK
IyA1OSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhyZWFk
LmgiCiMgMSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlw
ZXMuaCIgMQojIDYwICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJ0aHJlYWQuaCIgMgojIDEgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wcmlucnZhbC5oIiAxCiMgNjEgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcnRocmVhZC5oIiAyCgpleHRlcm4gIkMiIHsKCnR5cGVkZWYgc3RydWN0IFBS
VGhyZWFkIFBSVGhyZWFkOwp0eXBlZGVmIHN0cnVjdCBQUlRocmVhZFN0YWNrIFBSVGhyZWFkU3Rh
Y2s7Cgp0eXBlZGVmIGVudW0gUFJUaHJlYWRUeXBlIHsKICAgIFBSX1VTRVJfVEhSRUFELAogICAg
UFJfU1lTVEVNX1RIUkVBRAp9IFBSVGhyZWFkVHlwZTsKCnR5cGVkZWYgZW51bSBQUlRocmVhZFNj
b3BlIHsKICAgIFBSX0xPQ0FMX1RIUkVBRCwKICAgIFBSX0dMT0JBTF9USFJFQUQsCiAgICBQUl9H
TE9CQUxfQk9VTkRfVEhSRUFECn0gUFJUaHJlYWRTY29wZTsKCnR5cGVkZWYgZW51bSBQUlRocmVh
ZFN0YXRlIHsKICAgIFBSX0pPSU5BQkxFX1RIUkVBRCwKICAgIFBSX1VOSk9JTkFCTEVfVEhSRUFE
Cn0gUFJUaHJlYWRTdGF0ZTsKCnR5cGVkZWYgZW51bSBQUlRocmVhZFByaW9yaXR5CnsKICAgIFBS
X1BSSU9SSVRZX0ZJUlNUID0gMCwKICAgIFBSX1BSSU9SSVRZX0xPVyA9IDAsCiAgICBQUl9QUklP
UklUWV9OT1JNQUwgPSAxLAogICAgUFJfUFJJT1JJVFlfSElHSCA9IDIsCiAgICBQUl9QUklPUklU
WV9VUkdFTlQgPSAzLAogICAgUFJfUFJJT1JJVFlfTEFTVCA9IDMKfSBQUlRocmVhZFByaW9yaXR5
OwojIDExOCAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhy
ZWFkLmgiCmV4dGVybiBQUlRocmVhZCogUFJfQ3JlYXRlVGhyZWFkKFBSVGhyZWFkVHlwZSB0eXBl
LAogICAgICAgICAgICAgICAgICAgICB2b2lkICgqc3RhcnQpKHZvaWQgKmFyZyksCiAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKmFyZywKICAgICAgICAgICAgICAgICAgICAgUFJUaHJlYWRQcmlv
cml0eSBwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgUFJUaHJlYWRTY29wZSBzY29wZSwK
ICAgICAgICAgICAgICAgICAgICAgUFJUaHJlYWRTdGF0ZSBzdGF0ZSwKICAgICAgICAgICAgICAg
ICAgICAgUFJVaW50MzIgc3RhY2tTaXplKTsKIyAxMzkgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcnRocmVhZC5oIgpleHRlcm4gUFJTdGF0dXMgUFJfSm9pblRo
cmVhZChQUlRocmVhZCAqdGhyZWFkKTsKCgoKCgpleHRlcm4gUFJUaHJlYWQqIFBSX0dldEN1cnJl
bnRUaHJlYWQodm9pZCk7CgoKCgoKZXh0ZXJuIFBSVGhyZWFkUHJpb3JpdHkgUFJfR2V0VGhyZWFk
UHJpb3JpdHkoY29uc3QgUFJUaHJlYWQgKnRocmVhZCk7CgoKCgpleHRlcm4gdm9pZCBQUl9TZXRU
aHJlYWRQcmlvcml0eShQUlRocmVhZCAqdGhyZWFkLCBQUlRocmVhZFByaW9yaXR5IHByaW9yaXR5
KTsKIyAxODIgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRo
cmVhZC5oIgp0eXBlZGVmIHZvaWQgKCAqUFJUaHJlYWRQcml2YXRlRFRPUikodm9pZCAqcHJpdik7
CgpleHRlcm4gUFJTdGF0dXMgUFJfTmV3VGhyZWFkUHJpdmF0ZUluZGV4KAogICAgUFJVaW50biAq
bmV3SW5kZXgsIFBSVGhyZWFkUHJpdmF0ZURUT1IgZGVzdHJ1Y3Rvcik7CiMgMTk4ICIvR00vaGRk
OS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aHJlYWQuaCIKZXh0ZXJuIFBS
U3RhdHVzIFBSX1NldFRocmVhZFByaXZhdGUoUFJVaW50biB0cGRJbmRleCwgdm9pZCAqcHJpdik7
CiMgMjA5ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aHJl
YWQuaCIKZXh0ZXJuIHZvaWQqIFBSX0dldFRocmVhZFByaXZhdGUoUFJVaW50biB0cGRJbmRleCk7
CiMgMjIxICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aHJl
YWQuaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0ludGVycnVwdChQUlRocmVhZCAqdGhyZWFkKTsKCgoK
CgpleHRlcm4gdm9pZCBQUl9DbGVhckludGVycnVwdCh2b2lkKTsKCgoKCmV4dGVybiB2b2lkIFBS
X0Jsb2NrSW50ZXJydXB0KHZvaWQpOwoKCgoKZXh0ZXJuIHZvaWQgUFJfVW5ibG9ja0ludGVycnVw
dCh2b2lkKTsKIyAyNDYgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wcnRocmVhZC5oIgpleHRlcm4gUFJTdGF0dXMgUFJfU2xlZXAoUFJJbnRlcnZhbFRpbWUgdGlj
a3MpOwoKCgoKZXh0ZXJuIFBSVGhyZWFkU2NvcGUgUFJfR2V0VGhyZWFkU2NvcGUoY29uc3QgUFJU
aHJlYWQgKnRocmVhZCk7CgoKCgpleHRlcm4gUFJUaHJlYWRUeXBlIFBSX0dldFRocmVhZFR5cGUo
Y29uc3QgUFJUaHJlYWQgKnRocmVhZCk7CgoKCgpleHRlcm4gUFJUaHJlYWRTdGF0ZSBQUl9HZXRU
aHJlYWRTdGF0ZShjb25zdCBQUlRocmVhZCAqdGhyZWFkKTsKCn0KIyAzMyAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zR1VJRXZlbnQuaCIgMQojIDM0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0
LmgiIDIKCgpjbGFzcyBuc0lBcHBTaGVsbDsKY2xhc3MgbnNJVG9vbGtpdDsKY2xhc3MgbnNJRm9u
dE1ldHJpY3M7CmNsYXNzIG5zSVRvb2xraXQ7CmNsYXNzIG5zSVJlbmRlcmluZ0NvbnRleHQ7CmNs
YXNzIG5zSUVudW1lcmF0b3I7CmNsYXNzIG5zSURldmljZUNvbnRleHQ7CnN0cnVjdCBuc1JlY3Q7
CnN0cnVjdCBuc0ZvbnQ7CmNsYXNzIG5zSU1lbnVCYXI7CmNsYXNzIG5zSUV2ZW50TGlzdGVuZXI7
CmNsYXNzIG5zSVJvbGx1cExpc3RlbmVyOwojIDU3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJV2lkZ2V0LmgiCnR5cGVkZWYgbnNFdmVudFN0YXR1cyAoKiBFVkVOVF9DQUxMQkFDSykobnNH
VUlFdmVudCAqZXZlbnQpOwojIDgzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0
LmgiCnR5cGVkZWYgdm9pZCogbnNOYXRpdmVXaWRnZXQ7CgoKCgoKZW51bSBuc1dpbmRvd1R5cGUg
ewoKICBlV2luZG93VHlwZV90b3BsZXZlbCwKCiAgZVdpbmRvd1R5cGVfZGlhbG9nLAoKICBlV2lu
ZG93VHlwZV9wb3B1cCwKCiAgZVdpbmRvd1R5cGVfY2hpbGQKfTsKCgplbnVtIG5zQm9yZGVyU3R5
bGUKewoKICBlQm9yZGVyU3R5bGVfbm9uZSA9IDAsCgoKICBlQm9yZGVyU3R5bGVfYWxsID0gMSA8
PCAwLAoKCiAgZUJvcmRlclN0eWxlX2JvcmRlciA9IDEgPDwgMSwKCgogIGVCb3JkZXJTdHlsZV9y
ZXNpemVoID0gMSA8PCAyLAoKCiAgZUJvcmRlclN0eWxlX3RpdGxlID0gMSA8PCAzLAoKCiAgZUJv
cmRlclN0eWxlX21lbnUgPSAxIDw8IDQsCgoKCiAgZUJvcmRlclN0eWxlX21pbmltaXplID0gMSA8
PCA1LAoKCiAgZUJvcmRlclN0eWxlX21heGltaXplID0gMSA8PCA2LAoKCiAgZUJvcmRlclN0eWxl
X2Nsb3NlID0gMSA8PCA3LAoKCiAgZUJvcmRlclN0eWxlX2RlZmF1bHQgPSAtMQp9OwoKCgoKCmVu
dW0gbnNDdXJzb3IgewogICAgICAgICAgICAgICAgZUN1cnNvcl9zdGFuZGFyZCwKCiAgICAgICAg
ICAgICAgICBlQ3Vyc29yX3dhaXQsCgogICAgICAgICAgICAgICAgZUN1cnNvcl9zZWxlY3QsCgog
ICAgICAgICAgICAgICAgZUN1cnNvcl9oeXBlcmxpbmssCgogICAgICAgICAgICAgICAgZUN1cnNv
cl9zaXplV0UsCgogICAgICAgICAgICAgICAgZUN1cnNvcl9zaXplTlMsCgogICAgICAgICAgICAg
ICAgZUN1cnNvcl9zaXplTlcsCiAgICAgICAgICAgICAgICBlQ3Vyc29yX3NpemVTRSwKICAgICAg
ICAgICAgICAgIGVDdXJzb3Jfc2l6ZU5FLAogICAgICAgICAgICAgICAgZUN1cnNvcl9zaXplU1cs
CiAgICAgICAgICAgICAgICBlQ3Vyc29yX2Fycm93X25vcnRoLAogICAgICAgICAgICAgICAgZUN1
cnNvcl9hcnJvd19ub3J0aF9wbHVzLAogICAgICAgICAgICAgICAgZUN1cnNvcl9hcnJvd19zb3V0
aCwKICAgICAgICAgICAgICAgIGVDdXJzb3JfYXJyb3dfc291dGhfcGx1cywKICAgICAgICAgICAg
ICAgIGVDdXJzb3JfYXJyb3dfd2VzdCwKICAgICAgICAgICAgICAgIGVDdXJzb3JfYXJyb3dfd2Vz
dF9wbHVzLAogICAgICAgICAgICAgICAgZUN1cnNvcl9hcnJvd19lYXN0LAogICAgICAgICAgICAg
ICAgZUN1cnNvcl9hcnJvd19lYXN0X3BsdXMsCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2Nyb3Nz
aGFpciwKCiAgICAgICAgICAgICAgICBlQ3Vyc29yX21vdmUsCiAgICAgICAgICAgICAgICBlQ3Vy
c29yX2hlbHAsCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2NvcHksCiAgICAgICAgICAgICAgICBl
Q3Vyc29yX2FsaWFzLAogICAgICAgICAgICAgICAgZUN1cnNvcl9jb250ZXh0X21lbnUsCiAgICAg
ICAgICAgICAgICBlQ3Vyc29yX2NlbGwsCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2dyYWIsCiAg
ICAgICAgICAgICAgICBlQ3Vyc29yX2dyYWJiaW5nLAogICAgICAgICAgICAgICAgZUN1cnNvcl9z
cGlubmluZywKICAgICAgICAgICAgICAgIGVDdXJzb3JfY291bnRfdXAsCiAgICAgICAgICAgICAg
ICBlQ3Vyc29yX2NvdW50X2Rvd24sCiAgICAgICAgICAgICAgICBlQ3Vyc29yX2NvdW50X3VwX2Rv
d24KICAgICAgICAgICAgICAgIH07CgoKCgoKCgpzdHJ1Y3QgbnNXaWRnZXRJbml0RGF0YSB7CiAg
bnNXaWRnZXRJbml0RGF0YSgpCiAgICA6IGNsaXBDaGlsZHJlbigwKSwgY2xpcFNpYmxpbmdzKDAp
LAogICAgICBtV2luZG93VHlwZShlV2luZG93VHlwZV9jaGlsZCksCiAgICAgIG1Cb3JkZXJTdHls
ZShlQm9yZGVyU3R5bGVfZGVmYXVsdCkKICB7CiAgfQoKCiAgUFJQYWNrZWRCb29sIGNsaXBDaGls
ZHJlbiwgY2xpcFNpYmxpbmdzOwogIG5zV2luZG93VHlwZSBtV2luZG93VHlwZTsKICBuc0JvcmRl
clN0eWxlIG1Cb3JkZXJTdHlsZTsKfTsKCgoKCgpjbGFzcyBuc0lXaWRnZXQgOiBwdWJsaWMgbnNJ
U3VwcG9ydHMgewoKICBwdWJsaWM6CgogICAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7
c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHgxODAzMmFkNSwgMHhiMjY1LCAweDExZDEsIHsg
MHhhYSwgMHgyYSwgMHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCB9IH07IHJldHVybiBpaWQ7
fQojIDIzOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVh
bCBuc3Jlc3VsdCBDcmVhdGUobnNJV2lkZ2V0ICphUGFyZW50LAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBuc1JlY3QgJmFSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICBFVkVOVF9D
QUxMQkFDSyBhSGFuZGxlRXZlbnRGdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
RGV2aWNlQ29udGV4dCAqYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSUFwcFNo
ZWxsICphQXBwU2hlbGwgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICBuc0lUb29sa2l0ICph
VG9vbGtpdCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zV2lkZ2V0SW5pdERhdGEgKmFJ
bml0RGF0YSA9IDApID0gMDsKIyAyNjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRn
ZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlKG5zTmF0aXZlV2lkZ2V0IGFQYXJlbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCAmYVJlY3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgIEVWRU5UX0NBTExCQUNLIGFIYW5kbGVFdmVudEZ1bmN0aW9uLAogICAgICAg
ICAgICAgICAgICAgICAgICBuc0lEZXZpY2VDb250ZXh0ICphQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJQXBwU2hlbGwgKmFBcHBTaGVsbCA9IDAsCiAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSVRvb2xraXQgKmFUb29sa2l0ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAg
bnNXaWRnZXRJbml0RGF0YSAqYUluaXREYXRhID0gMCkgPSAwOwoKCgoKCgoKICAgIHZpcnR1YWwg
bnNyZXN1bHQgR2V0Q2xpZW50RGF0YSh2b2lkKiYgYUNsaWVudERhdGEpID0gMDsKICAgIHZpcnR1
YWwgbnNyZXN1bHQgU2V0Q2xpZW50RGF0YSh2b2lkKiBhQ2xpZW50RGF0YSkgPSAwOwoKCgoKCgoK
ICAgIHZpcnR1YWwgbnNyZXN1bHQgRGVzdHJveSh2b2lkKSA9IDA7CiMgMjk3ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zSVdpZGdldCogR2V0UGFy
ZW50KHZvaWQpID0gMDsKIyAzMDYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQu
aCIKICAgIHZpcnR1YWwgbnNJRW51bWVyYXRvciogR2V0Q2hpbGRyZW4odm9pZCkgPSAwOwoKCgoK
CgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2hvdyhQUkJvb2wgYVN0YXRlKSA9IDA7CgoKCgoKICAg
IHZpcnR1YWwgbnNyZXN1bHQgU2V0TW9kYWwoUFJCb29sIGFNb2RhbCkgPSAwOwoKCgoKCiAgICB2
aXJ0dWFsIG5zcmVzdWx0IElzVmlzaWJsZShQUkJvb2wgJiBhU3RhdGUpID0gMDsKIyAzMzkgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQg
Q29uc3RyYWluUG9zaXRpb24oUFJJbnQzMiAqYVgsIFBSSW50MzIgKmFZKSA9IDA7CiMgMzQ4ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0
IE1vdmUoUFJJbnQzMiBhWCwgUFJJbnQzMiBhWSkgPSAwOwojIDM1OCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBSZXNpemUoUFJJbnQz
MiBhV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFIZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICBQUkJvb2wgYVJlcGFpbnQpID0gMDsKIyAzNzIgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgUmVzaXplKFBSSW50
MzIgYVgsCiAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFZLAogICAgICAgICAgICAgICAg
ICAgICAgUFJJbnQzMiBhV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFIZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlcGFpbnQpID0gMDsKCgoKCiAgICB2
aXJ0dWFsIG5zcmVzdWx0IFNldFpJbmRleChQUkludDMyIGFaSW5kZXgpID0gMDsKCgoKCiAgICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFpJbmRleChQUkludDMyKiBhWkluZGV4KSA9IDA7CgoKCgoKCgog
ICAgdmlydHVhbCBuc3Jlc3VsdCBQbGFjZUJlaGluZChuc0lXaWRnZXQgKmFXaWRnZXQsIFBSQm9v
bCBhQWN0aXZhdGUpID0gMDsKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTaXplTW9kZShQ
UkludDMyIGFNb2RlKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2l6ZU1vZGUo
UFJJbnQzMiogYU1vZGUpID0gMDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEVuYWJsZShQ
UkJvb2wgYVN0YXRlKSA9IDA7CgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb2N1cyhQUkJv
b2wgYVJhaXNlID0gMCkgPSAwOwoKCgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm91bmRz
KG5zUmVjdCAmYVJlY3QpID0gMDsKIyA0MzkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lX
aWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2NyZWVuQm91bmRzKG5zUmVjdCAmYVJl
Y3QpID0gMDsKIyA0NDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAg
IHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xpZW50Qm91bmRzKG5zUmVjdCAmYVJlY3QpID0gMDsKCgoK
CgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJvcmRlclNpemUoUFJJbnQzMiAmYVdpZHRoLCBQ
UkludDMyICZhSGVpZ2h0KSA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc2NvbG9yIEdldEZvcmVn
cm91bmRDb2xvcih2b2lkKSA9IDA7CiMgNDc0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
V2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvcmVncm91bmRDb2xvcihjb25zdCBu
c2NvbG9yICZhQ29sb3IpID0gMDsKIyA0ODMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lX
aWRnZXQuaCIKICAgIHZpcnR1YWwgbnNjb2xvciBHZXRCYWNrZ3JvdW5kQ29sb3Iodm9pZCkgPSAw
OwojIDQ5MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVh
bCBuc3Jlc3VsdCBTZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgbnNjb2xvciAmYUNvbG9yKSA9IDA7
CgoKCgoKCgogICAgdmlydHVhbCBuc0lGb250TWV0cmljcyogR2V0Rm9udCh2b2lkKSA9IDA7CgoK
CgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb250KGNvbnN0IG5zRm9udCAmYUZvbnQpID0g
MDsKCgoKCgoKCiAgICB2aXJ0dWFsIG5zQ3Vyc29yIEdldEN1cnNvcih2b2lkKSA9IDA7CgoKCgoK
CgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDdXJzb3IobnNDdXJzb3IgYUN1cnNvcikgPSAwOwoj
IDUzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBu
c3Jlc3VsdCBJbnZhbGlkYXRlKFBSQm9vbCBhSXNTeW5jaHJvbm91cykgPSAwOwojIDU0MiAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBJ
bnZhbGlkYXRlKGNvbnN0IG5zUmVjdCAmIGFSZWN0LCBQUkJvb2wgYUlzU3luY2hyb25vdXMpID0g
MDsKIyA1NTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZpcnR1
YWwgbnNyZXN1bHQgSW52YWxpZGF0ZVJlZ2lvbihjb25zdCBuc0lSZWdpb24qIGFSZWdpb24sIFBS
Qm9vbCBhSXNTeW5jaHJvbm91cykgPSAwOwoKCgoKCgoKICAgICB2aXJ0dWFsIG5zcmVzdWx0IFVw
ZGF0ZSgpID0gMDsKIyA1NjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIK
ICAgIHZpcnR1YWwgbnNyZXN1bHQgQWRkTW91c2VMaXN0ZW5lcihuc0lNb3VzZUxpc3RlbmVyICog
YUxpc3RlbmVyKSA9IDA7CiMgNTc3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0
LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEFkZEV2ZW50TGlzdGVuZXIobnNJRXZlbnRMaXN0ZW5l
ciAqIGFMaXN0ZW5lcikgPSAwOwojIDU4NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdp
ZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBBZGRNZW51TGlzdGVuZXIobnNJTWVudUxpc3Rl
bmVyICogYUxpc3RlbmVyKSA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc0lUb29sa2l0KiBHZXRU
b29sa2l0KCkgPSAwOwojIDYwMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5o
IgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb2xvck1hcChuc0NvbG9yTWFwICphQ29sb3JNYXAp
ID0gMDsKIyA2MTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAgIHZp
cnR1YWwgbnNyZXN1bHQgU2Nyb2xsKFBSSW50MzIgYUR4LCBQUkludDMyIGFEeSwgbnNSZWN0ICph
Q2xpcFJlY3QpID0gMDsKIyA2MjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQu
aCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsV2lkZ2V0cyhQUkludDMyIGFEeCwgUFJJbnQz
MiBhRHkpID0gMDsKIyA2MzkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIK
ICAgIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsUmVjdChuc1JlY3QgJmFTcmNSZWN0LCBQUkludDMy
IGFEeCwgUFJJbnQzMiBhRHkpID0gMDsKCgoKCgoKICAgIHZpcnR1YWwgdm9pZCBBZGRDaGlsZChu
c0lXaWRnZXQqIGFDaGlsZCkgPSAwOwogICAgdmlydHVhbCB2b2lkIFJlbW92ZUNoaWxkKG5zSVdp
ZGdldCogYUNoaWxkKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQqIEdldE5hdGl2ZURhdGEoUFJVaW50
MzIgYURhdGFUeXBlKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgRnJlZU5hdGl2ZURhdGEodm9pZCAq
IGRhdGEsIFBSVWludDMyIGFEYXRhVHlwZSkgPSAwOwogICAgdmlydHVhbCBuc0lSZW5kZXJpbmdD
b250ZXh0KiBHZXRSZW5kZXJpbmdDb250ZXh0KCkgPSAwOwogICAgdmlydHVhbCBuc0lEZXZpY2VD
b250ZXh0KiBHZXREZXZpY2VDb250ZXh0KCkgPSAwOwogICAgdmlydHVhbCBuc0lBcHBTaGVsbCAq
R2V0QXBwU2hlbGwoKSA9IDA7CiMgNjYxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lk
Z2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJvcmRlclN0eWxlKG5zQm9yZGVyU3R5bGUg
YUJvcmRlclN0eWxlKSA9IDA7CiMgNjcwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lk
Z2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRpdGxlKGNvbnN0IG5zU3RyaW5nJiBhVGl0
bGUpID0gMDsKIyA2ODEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIKICAg
IHZpcnR1YWwgbnNyZXN1bHQgU2V0SWNvbihjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYW5JY29u
U3BlYykgPSAwOwojIDY5MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdpZGdldC5oIgog
ICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNZW51QmFyKG5zSU1lbnVCYXIgKiBhTWVudUJhcikgPSAw
OwoKCgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2hvd01lbnVCYXIoUFJCb29sIGFTaG93KSA9
IDA7CiMgNzA3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgICB2aXJ0
dWFsIG5zcmVzdWx0IFdpZGdldFRvU2NyZWVuKGNvbnN0IG5zUmVjdCYgYU9sZFJlY3QsIG5zUmVj
dCYgYU5ld1JlY3QpID0gMDsKIyA3MTYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRn
ZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2NyZWVuVG9XaWRnZXQoY29uc3QgbnNSZWN0JiBh
T2xkUmVjdCwgbnNSZWN0JiBhTmV3UmVjdCkgPSAwOwojIDcyNiAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBCZWdpblJlc2l6aW5nQ2hp
bGRyZW4odm9pZCkgPSAwOwoKCgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgRW5kUmVzaXppbmdD
aGlsZHJlbih2b2lkKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJlZmVycmVk
U2l6ZShQUkludDMyJiBhV2lkdGgsIFBSSW50MzImIGFIZWlnaHQpID0gMDsKCgoKCgogICAgdmly
dHVhbCBuc3Jlc3VsdCBTZXRQcmVmZXJyZWRTaXplKFBSSW50MzIgYVdpZHRoLCBQUkludDMyIGFI
ZWlnaHQpID0gMDsKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBEaXNwYXRjaEV2ZW50KG5zR1VJ
RXZlbnQqIGV2ZW50LCBuc0V2ZW50U3RhdHVzICYgYVN0YXR1cykgPSAwOwoKCgoKCgogICAgdmly
dHVhbCBuc3Jlc3VsdCBQYWludChuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBhRGlydHlSZWN0KSA9IDA7CgoK
CgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgRW5hYmxlRHJhZ0Ryb3AoUFJCb29sIGFFbmFibGUpID0g
MDsKCiAgICB2aXJ0dWFsIHZvaWQgQ29udmVydFRvRGV2aWNlQ29vcmRpbmF0ZXMobnNjb29yZCAm
YVgsbnNjb29yZCAmYVkpID0gMDsKCgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgQ2FwdHVyZU1v
dXNlKFBSQm9vbCBhQ2FwdHVyZSkgPSAwOwojIDc4NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBDYXB0dXJlUm9sbHVwRXZlbnRzKG5z
SVJvbGx1cExpc3RlbmVyICogYUxpc3RlbmVyLCBQUkJvb2wgYURvQ2FwdHVyZSwgUFJCb29sIGFD
b25zdW1lUm9sbHVwRXZlbnQpID0gMDsKIyA3OTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lXaWRnZXQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE1vZGFsRXZlbnRGaWx0ZXIoUFJCb29sIGFS
ZWFsRXZlbnQsIHZvaWQgKmFFdmVudCwgUFJCb29sICphRm9yV2luZG93KSA9IDA7CiMgODA4ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRBdHRlbnRpb24oKSA9IDA7Cgp9OwojIDMwICJuc0Zvcm1Db250cm9sSGVscGVyLmgiIDIKIyAx
ICIuLi8uLi9iYXNlL3NyYy9uc0xlYWZGcmFtZS5oIiAxCiMgMjUgIi4uLy4uL2Jhc2Uvc3JjL25z
TGVhZkZyYW1lLmgiCiMgMSAiLi4vLi4vYmFzZS9zcmMvbnNGcmFtZS5oIiAxCiMgMjYgIi4uLy4u
L2Jhc2Uvc3JjL25zRnJhbWUuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJh
bWUuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKIyAxICIv
bmV3bGliL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5b3V0Lmgi
IDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5b3V0LmgiCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc2xheW91dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBv
cnRzLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5b3V0LmgiIDIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNUcmFjZVJlZmNudC5oIiAxCiMgMjggIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc2xheW91dC5oIiAyCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1
cHBvcnRzLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiIDIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTaXplLmgiIDEKIyAyOSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNHVUlFdmVudC5oIiAxCiMgMzAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFt
ZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVDb25zdHMuaCIgMQoj
IDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvbnN0cy5oIgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZvbnQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNTdHlsZUNvbnN0cy5oIiAyCiMgMzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVTdHJ1Y3Qu
aCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIgplbnVt
IG5zU3R5bGVTdHJ1Y3RJRCB7CiAgZVN0eWxlU3RydWN0X0ZvbnQgPSAxLAogIGVTdHlsZVN0cnVj
dF9Db2xvciA9IDIsCiAgZVN0eWxlU3RydWN0X0xpc3QgPSAzLAogIGVTdHlsZVN0cnVjdF9Qb3Np
dGlvbiA9IDQsCiAgZVN0eWxlU3RydWN0X1RleHQgPSA1LAogIGVTdHlsZVN0cnVjdF9EaXNwbGF5
ID0gNiwKICBlU3R5bGVTdHJ1Y3RfVGFibGUgPSA3LAogIGVTdHlsZVN0cnVjdF9Db250ZW50ID0g
OCwKICBlU3R5bGVTdHJ1Y3RfVXNlckludGVyZmFjZSA9IDksCiAgZVN0eWxlU3RydWN0X1ByaW50
ID0gMTAsCiAgZVN0eWxlU3RydWN0X01hcmdpbiA9IDExLAogIGVTdHlsZVN0cnVjdF9QYWRkaW5n
ID0gMTIsCiAgZVN0eWxlU3RydWN0X0JvcmRlciA9IDEzLAogIGVTdHlsZVN0cnVjdF9PdXRsaW5l
ID0gMTQsCgogIGVTdHlsZVN0cnVjdF9YVUwgPSAxNSwKICBlU3R5bGVTdHJ1Y3RfTWF4ID0gZVN0
eWxlU3RydWN0X1hVTCwKICBlU3R5bGVTdHJ1Y3RfQm9yZGVyUGFkZGluZ1Nob3J0Y3V0ID0gMTYK
CgoKCn07CgpzdHJ1Y3QgbnNTdHlsZVN0cnVjdCB7Cn07CiMgMzIgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5
bGVDb29yZC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlQ29vcmQu
aCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAyNiAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVDb29yZC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNT
dHlsZUNvb3JkLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMQoj
IDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZUNvb3JkLmgiIDIKY2xhc3MgbnNT
dHJpbmc7CgplbnVtIG5zU3R5bGVVbml0IHsKICBlU3R5bGVVbml0X051bGwgPSAwLAogIGVTdHls
ZVVuaXRfTm9ybWFsID0gMSwKICBlU3R5bGVVbml0X0F1dG8gPSAyLAogIGVTdHlsZVVuaXRfSW5o
ZXJpdCA9IDMsCiAgZVN0eWxlVW5pdF9QZXJjZW50ID0gMTAsCiAgZVN0eWxlVW5pdF9GYWN0b3Ig
PSAxMSwKICBlU3R5bGVVbml0X0Nvb3JkID0gMjAsCiAgZVN0eWxlVW5pdF9JbnRlZ2VyID0gMzAs
CiAgZVN0eWxlVW5pdF9Qcm9wb3J0aW9uYWwgPSAzMSwKICBlU3R5bGVVbml0X0VudW1lcmF0ZWQg
PSAzMiwKICBlU3R5bGVVbml0X0NoYXJzID0gMzMKfTsKCnR5cGVkZWYgdW5pb24gewogIFBSSW50
MzIgbUludDsKICBmbG9hdCBtRmxvYXQ7Cn0gbnNTdHlsZVVuaW9uOwoKY2xhc3MgbnNTdHlsZUNv
b3JkIHsKcHVibGljOgogIG5zU3R5bGVDb29yZChuc1N0eWxlVW5pdCBhVW5pdCA9IGVTdHlsZVVu
aXRfTnVsbCk7CiAgbnNTdHlsZUNvb3JkKG5zY29vcmQgYVZhbHVlKTsKICBuc1N0eWxlQ29vcmQo
UFJJbnQzMiBhVmFsdWUsIG5zU3R5bGVVbml0IGFVbml0KTsKICBuc1N0eWxlQ29vcmQoZmxvYXQg
YVZhbHVlLCBuc1N0eWxlVW5pdCBhVW5pdCk7CiAgbnNTdHlsZUNvb3JkKGNvbnN0IG5zU3R5bGVD
b29yZCYgYUNvcHkpOwoKICBuc1N0eWxlQ29vcmQmIG9wZXJhdG9yPShjb25zdCBuc1N0eWxlQ29v
cmQmIGFDb3B5KTsKICBQUkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc1N0eWxlQ29vcmQmIGFPdGhl
cikgY29uc3Q7CiAgUFJCb29sIG9wZXJhdG9yIT0oY29uc3QgbnNTdHlsZUNvb3JkJiBhT3RoZXIp
IGNvbnN0OwoKICBuc1N0eWxlVW5pdCBHZXRVbml0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Vbml0
OyB9CiAgbnNjb29yZCBHZXRDb29yZFZhbHVlKHZvaWQpIGNvbnN0OwogIFBSSW50MzIgR2V0SW50
VmFsdWUodm9pZCkgY29uc3Q7CiAgZmxvYXQgR2V0UGVyY2VudFZhbHVlKHZvaWQpIGNvbnN0Owog
IGZsb2F0IEdldEZhY3RvclZhbHVlKHZvaWQpIGNvbnN0OwogIHZvaWQgR2V0VW5pb25WYWx1ZShu
c1N0eWxlVW5pb24mIGFWYWx1ZSkgY29uc3Q7CgogIHZvaWQgUmVzZXQodm9pZCk7CiAgdm9pZCBT
ZXRDb29yZFZhbHVlKG5zY29vcmQgYVZhbHVlKTsKICB2b2lkIFNldEludFZhbHVlKFBSSW50MzIg
YVZhbHVlLCBuc1N0eWxlVW5pdCBhVW5pdCk7CiAgdm9pZCBTZXRQZXJjZW50VmFsdWUoZmxvYXQg
YVZhbHVlKTsKICB2b2lkIFNldEZhY3RvclZhbHVlKGZsb2F0IGFWYWx1ZSk7CiAgdm9pZCBTZXRO
b3JtYWxWYWx1ZSh2b2lkKTsKICB2b2lkIFNldEF1dG9WYWx1ZSh2b2lkKTsKICB2b2lkIFNldElu
aGVyaXRWYWx1ZSh2b2lkKTsKICB2b2lkIFNldFVuaW9uVmFsdWUoY29uc3QgbnNTdHlsZVVuaW9u
JiBhVmFsdWUsIG5zU3R5bGVVbml0IGFVbml0KTsKCiAgdm9pZCBBcHBlbmRUb1N0cmluZyhuc1N0
cmluZyYgYUJ1ZmZlcikgY29uc3Q7CiAgdm9pZCBUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikg
Y29uc3Q7CgpwdWJsaWM6CiAgbnNTdHlsZVVuaXQgbVVuaXQ7CiAgbnNTdHlsZVVuaW9uIG1WYWx1
ZTsKfTsKCgpjbGFzcyBuc1N0eWxlU2lkZXMgewpwdWJsaWM6CiAgbnNTdHlsZVNpZGVzKHZvaWQp
OwoKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3QgbnNTdHlsZVNpZGVzJiBhT3RoZXIpIGNvbnN0
OwogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0IG5zU3R5bGVTaWRlcyYgYU90aGVyKSBjb25zdDsK
CiAgbnNTdHlsZVVuaXQgR2V0TGVmdFVuaXQodm9pZCkgY29uc3Q7CiAgbnNTdHlsZVVuaXQgR2V0
VG9wVW5pdCh2b2lkKSBjb25zdDsKICBuc1N0eWxlVW5pdCBHZXRSaWdodFVuaXQodm9pZCkgY29u
c3Q7CiAgbnNTdHlsZVVuaXQgR2V0Qm90dG9tVW5pdCh2b2lkKSBjb25zdDsKCiAgbnNTdHlsZUNv
b3JkJiBHZXRMZWZ0KG5zU3R5bGVDb29yZCYgYUNvb3JkKSBjb25zdDsKICBuc1N0eWxlQ29vcmQm
IEdldFRvcChuc1N0eWxlQ29vcmQmIGFDb29yZCkgY29uc3Q7CiAgbnNTdHlsZUNvb3JkJiBHZXRS
aWdodChuc1N0eWxlQ29vcmQmIGFDb29yZCkgY29uc3Q7CiAgbnNTdHlsZUNvb3JkJiBHZXRCb3R0
b20obnNTdHlsZUNvb3JkJiBhQ29vcmQpIGNvbnN0OwoKICB2b2lkIFJlc2V0KHZvaWQpOwogIHZv
aWQgU2V0TGVmdChjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCk7CiAgdm9pZCBTZXRUb3AoY29u
c3QgbnNTdHlsZUNvb3JkJiBhQ29vcmQpOwogIHZvaWQgU2V0UmlnaHQoY29uc3QgbnNTdHlsZUNv
b3JkJiBhQ29vcmQpOwogIHZvaWQgU2V0Qm90dG9tKGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvb3Jk
KTsKCiAgdm9pZCBBcHBlbmRUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CiAgdm9p
ZCBUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7Cgpwcm90ZWN0ZWQ6CiAgUFJVaW50
OCBtTGVmdFVuaXQ7CiAgUFJVaW50OCBtVG9wVW5pdDsKICBQUlVpbnQ4IG1SaWdodFVuaXQ7CiAg
UFJVaW50OCBtQm90dG9tVW5pdDsKICBuc1N0eWxlVW5pb24gbUxlZnRWYWx1ZTsKICBuc1N0eWxl
VW5pb24gbVRvcFZhbHVlOwogIG5zU3R5bGVVbmlvbiBtUmlnaHRWYWx1ZTsKICBuc1N0eWxlVW5p
b24gbUJvdHRvbVZhbHVlOwp9OwoKCgoKaW5saW5lIFBSQm9vbCBuc1N0eWxlQ29vcmQ6Om9wZXJh
dG9yIT0oY29uc3QgbnNTdHlsZUNvb3JkJiBhT3RoZXIpIGNvbnN0CnsKICByZXR1cm4gUFJCb29s
KCEgKCgqdGhpcykgPT0gYU90aGVyKSk7Cn0KCmlubGluZSBQUkludDMyIG5zU3R5bGVDb29yZDo6
R2V0Q29vcmRWYWx1ZSh2b2lkKSBjb25zdAp7CiAgaWYgKCEoKG1Vbml0ID09IGVTdHlsZVVuaXRf
Q29vcmQpKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJub3QgYSBjb29yZCB2YWx1ZSIsICIobVVuaXQg
PT0gZVN0eWxlVW5pdF9Db29yZCkiLCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVD
b29yZC5oIiwgMTM1KTsKICBpZiAobVVuaXQgPT0gZVN0eWxlVW5pdF9Db29yZCkgewogICAgcmV0
dXJuIG1WYWx1ZS5tSW50OwogIH0KICByZXR1cm4gMDsKfQoKaW5saW5lIFBSSW50MzIgbnNTdHls
ZUNvb3JkOjpHZXRJbnRWYWx1ZSh2b2lkKSBjb25zdAp7CiAgaWYgKCEoKG1Vbml0ID09IGVTdHls
ZVVuaXRfUHJvcG9ydGlvbmFsKSB8fCAobVVuaXQgPT0gZVN0eWxlVW5pdF9FbnVtZXJhdGVkKSB8
fCAobVVuaXQgPT0gZVN0eWxlVW5pdF9DaGFycykgfHwgKG1Vbml0ID09IGVTdHlsZVVuaXRfSW50
ZWdlcikpKSBuc0RlYnVnOjpBc3NlcnRpb24oIm5vdCBhbiBpbnQgdmFsdWUiLCAiKG1Vbml0ID09
IGVTdHlsZVVuaXRfUHJvcG9ydGlvbmFsKSB8fCAobVVuaXQgPT0gZVN0eWxlVW5pdF9FbnVtZXJh
dGVkKSB8fCAobVVuaXQgPT0gZVN0eWxlVW5pdF9DaGFycykgfHwgKG1Vbml0ID09IGVTdHlsZVVu
aXRfSW50ZWdlcikiLCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVDb29yZC5oIiwg
MTQ0KTsKCgoKICBpZiAoKG1Vbml0ID09IGVTdHlsZVVuaXRfUHJvcG9ydGlvbmFsKSB8fAogICAg
ICAobVVuaXQgPT0gZVN0eWxlVW5pdF9FbnVtZXJhdGVkKSB8fAogICAgICAobVVuaXQgPT0gZVN0
eWxlVW5pdF9DaGFycykgfHwKICAgICAgKG1Vbml0ID09IGVTdHlsZVVuaXRfSW50ZWdlcikpIHsK
ICAgIHJldHVybiBtVmFsdWUubUludDsKICB9CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBmbG9hdCBu
c1N0eWxlQ29vcmQ6OkdldFBlcmNlbnRWYWx1ZSh2b2lkKSBjb25zdAp7CiAgaWYgKCEobVVuaXQg
PT0gZVN0eWxlVW5pdF9QZXJjZW50KSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJub3QgYSBwZXJjZW50
IHZhbHVlIiwgIm1Vbml0ID09IGVTdHlsZVVuaXRfUGVyY2VudCIsICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNTdHlsZUNvb3JkLmgiLCAxNTkpOwogIGlmIChtVW5pdCA9PSBlU3R5bGVVbml0
X1BlcmNlbnQpIHsKICAgIHJldHVybiBtVmFsdWUubUZsb2F0OwogIH0KICByZXR1cm4gMC4wZjsK
fQoKaW5saW5lIGZsb2F0IG5zU3R5bGVDb29yZDo6R2V0RmFjdG9yVmFsdWUodm9pZCkgY29uc3QK
ewogIGlmICghKG1Vbml0ID09IGVTdHlsZVVuaXRfRmFjdG9yKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9u
KCJub3QgYSBmYWN0b3IgdmFsdWUiLCAibVVuaXQgPT0gZVN0eWxlVW5pdF9GYWN0b3IiLCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVDb29yZC5oIiwgMTY4KTsKICBpZiAobVVuaXQg
PT0gZVN0eWxlVW5pdF9GYWN0b3IpIHsKICAgIHJldHVybiBtVmFsdWUubUZsb2F0OwogIH0KICBy
ZXR1cm4gMC4wZjsKfQoKaW5saW5lIHZvaWQgbnNTdHlsZUNvb3JkOjpHZXRVbmlvblZhbHVlKG5z
U3R5bGVVbmlvbiYgYVZhbHVlKSBjb25zdAp7CiAgbnNDUlQ6Om1lbWNweSgmYVZhbHVlLCAmbVZh
bHVlLCBzaXplb2YobnNTdHlsZVVuaW9uKSk7Cn0KCgoKCmlubGluZSBQUkJvb2wgbnNTdHlsZVNp
ZGVzOjpvcGVyYXRvciE9KGNvbnN0IG5zU3R5bGVTaWRlcyYgYU90aGVyKSBjb25zdAp7CiAgcmV0
dXJuIFBSQm9vbCghICgoKnRoaXMpID09IGFPdGhlcikpOwp9CgppbmxpbmUgbnNTdHlsZVVuaXQg
bnNTdHlsZVNpZGVzOjpHZXRMZWZ0VW5pdCh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIChuc1N0eWxl
VW5pdCltTGVmdFVuaXQ7Cn0KCmlubGluZSBuc1N0eWxlVW5pdCBuc1N0eWxlU2lkZXM6OkdldFRv
cFVuaXQodm9pZCkgY29uc3QKewogIHJldHVybiAobnNTdHlsZVVuaXQpbVRvcFVuaXQ7Cn0KCmlu
bGluZSBuc1N0eWxlVW5pdCBuc1N0eWxlU2lkZXM6OkdldFJpZ2h0VW5pdCh2b2lkKSBjb25zdAp7
CiAgcmV0dXJuIChuc1N0eWxlVW5pdCltUmlnaHRVbml0Owp9CgppbmxpbmUgbnNTdHlsZVVuaXQg
bnNTdHlsZVNpZGVzOjpHZXRCb3R0b21Vbml0KHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKG5zU3R5
bGVVbml0KW1Cb3R0b21Vbml0Owp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxlU2lkZXM6
OkdldExlZnQobnNTdHlsZUNvb3JkJiBhQ29vcmQpIGNvbnN0CnsKICBhQ29vcmQuU2V0VW5pb25W
YWx1ZShtTGVmdFZhbHVlLCAobnNTdHlsZVVuaXQpbUxlZnRVbml0KTsKICByZXR1cm4gYUNvb3Jk
Owp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxlU2lkZXM6OkdldFRvcChuc1N0eWxlQ29v
cmQmIGFDb29yZCkgY29uc3QKewogIGFDb29yZC5TZXRVbmlvblZhbHVlKG1Ub3BWYWx1ZSwgKG5z
U3R5bGVVbml0KW1Ub3BVbml0KTsKICByZXR1cm4gYUNvb3JkOwp9CgppbmxpbmUgbnNTdHlsZUNv
b3JkJiBuc1N0eWxlU2lkZXM6OkdldFJpZ2h0KG5zU3R5bGVDb29yZCYgYUNvb3JkKSBjb25zdAp7
CiAgYUNvb3JkLlNldFVuaW9uVmFsdWUobVJpZ2h0VmFsdWUsIChuc1N0eWxlVW5pdCltUmlnaHRV
bml0KTsKICByZXR1cm4gYUNvb3JkOwp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxlU2lk
ZXM6OkdldEJvdHRvbShuc1N0eWxlQ29vcmQmIGFDb29yZCkgY29uc3QKewogIGFDb29yZC5TZXRV
bmlvblZhbHVlKG1Cb3R0b21WYWx1ZSwgKG5zU3R5bGVVbml0KW1Cb3R0b21Vbml0KTsKICByZXR1
cm4gYUNvb3JkOwp9CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldExlZnQoY29uc3QgbnNT
dHlsZUNvb3JkJiBhQ29vcmQpCnsKICBtTGVmdFVuaXQgPSBhQ29vcmQuR2V0VW5pdCgpOwogIGFD
b29yZC5HZXRVbmlvblZhbHVlKG1MZWZ0VmFsdWUpOwp9CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lk
ZXM6OlNldFRvcChjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCkKewogIG1Ub3BVbml0ID0gYUNv
b3JkLkdldFVuaXQoKTsKICBhQ29vcmQuR2V0VW5pb25WYWx1ZShtVG9wVmFsdWUpOwp9Cgppbmxp
bmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldFJpZ2h0KGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvb3Jk
KQp7CiAgbVJpZ2h0VW5pdCA9IGFDb29yZC5HZXRVbml0KCk7CiAgYUNvb3JkLkdldFVuaW9uVmFs
dWUobVJpZ2h0VmFsdWUpOwp9CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldEJvdHRvbShj
b25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCkKewogIG1Cb3R0b21Vbml0ID0gYUNvb3JkLkdldFVu
aXQoKTsKICBhQ29vcmQuR2V0VW5pb25WYWx1ZShtQm90dG9tVmFsdWUpOwp9CiMgMzMgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSFRNTFJlZmxvd1N0YXRlLmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSFRNTFJlZmxvd1N0YXRlLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
bGF5b3V0LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFJlZmxvd1N0
YXRlLmgiIDIKCmNsYXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJ
UmVmbG93Q29tbWFuZDsKY2xhc3MgbnNJUmVuZGVyaW5nQ29udGV4dDsKY2xhc3MgbnNJU3BhY2VN
YW5hZ2VyOwpjbGFzcyBuc0xpbmVMYXlvdXQ7CgpzdHJ1Y3QgbnNTdHlsZURpc3BsYXk7CnN0cnVj
dCBuc1N0eWxlUG9zaXRpb247CnN0cnVjdCBuc1N0eWxlQm9yZGVyOwpzdHJ1Y3QgbnNTdHlsZU1h
cmdpbjsKc3RydWN0IG5zU3R5bGVQYWRkaW5nOwpzdHJ1Y3QgbnNTdHlsZVRleHQ7CnN0cnVjdCBu
c0h5cG90aGV0aWNhbEJveDsKIyA1NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFJl
Zmxvd1N0YXRlLmgiCmVudW0gbnNSZWZsb3dSZWFzb24gewogIGVSZWZsb3dSZWFzb25fSW5pdGlh
bCA9IDAsCiAgZVJlZmxvd1JlYXNvbl9JbmNyZW1lbnRhbCA9IDEsCiAgZVJlZmxvd1JlYXNvbl9S
ZXNpemUgPSAyLAogIGVSZWZsb3dSZWFzb25fU3R5bGVDaGFuZ2UgPSAzLAoKICBlUmVmbG93UmVh
c29uX0RpcnR5ID0gNAp9OwoKCgoKdHlwZWRlZiBQUlVpbnQzMiBuc0NTU0ZyYW1lVHlwZTsKIyAx
MTMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxSZWZsb3dTdGF0ZS5oIgpzdHJ1Y3Qg
bnNIVE1MUmVmbG93U3RhdGUgewoKCiAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIHBhcmVudFJl
Zmxvd1N0YXRlOwoKCiAgbnNJRnJhbWUqIGZyYW1lOwoKCiAgbnNSZWZsb3dSZWFzb24gcmVhc29u
OwoKCiAgbnNJUmVmbG93Q29tbWFuZCogcmVmbG93Q29tbWFuZDsKIyAxMzQgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0hUTUxSZWZsb3dTdGF0ZS5oIgogIG5zY29vcmQgYXZhaWxhYmxlV2lk
dGgsIGF2YWlsYWJsZUhlaWdodDsKCgogIG5zSVJlbmRlcmluZ0NvbnRleHQqIHJlbmRDb250ZXh0
OwoKCiAgUFJQYWNrZWRCb29sIGlzVG9wT2ZQYWdlOwoKCgogIG5zQ1NTRnJhbWVUeXBlIG1GcmFt
ZVR5cGU7CgoKICBuc0lTcGFjZU1hbmFnZXIqIG1TcGFjZU1hbmFnZXI7CgoKICBuc0xpbmVMYXlv
dXQqIG1MaW5lTGF5b3V0OwojIDE2MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFJl
Zmxvd1N0YXRlLmgiCiAgbnNjb29yZCBtQ29tcHV0ZWRXaWR0aDsKIyAxNzggIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0hUTUxSZWZsb3dTdGF0ZS5oIgogIG5zY29vcmQgbUNvbXB1dGVkSGVp
Z2h0OwoKCiAgbnNNYXJnaW4gbUNvbXB1dGVkTWFyZ2luOwoKCiAgbnNNYXJnaW4gbUNvbXB1dGVk
Qm9yZGVyUGFkZGluZzsKCgogIG5zTWFyZ2luIG1Db21wdXRlZFBhZGRpbmc7CgoKCiAgbnNNYXJn
aW4gbUNvbXB1dGVkT2Zmc2V0czsKCgogIG5zY29vcmQgbUNvbXB1dGVkTWluV2lkdGgsIG1Db21w
dXRlZE1heFdpZHRoOwogIG5zY29vcmQgbUNvbXB1dGVkTWluSGVpZ2h0LCBtQ29tcHV0ZWRNYXhI
ZWlnaHQ7CgoKICBuc2Nvb3JkIG1Db21wYWN0TWFyZ2luV2lkdGg7CgoKCgoKCiAgbnNjb29yZCBt
QWxpZ25DaGFyT2Zmc2V0OwoKCgogIFBSUGFja2VkQm9vbCBtVXNlQWxpZ25DaGFyT2Zmc2V0OwoK
CiAgY29uc3QgbnNTdHlsZURpc3BsYXkqIG1TdHlsZURpc3BsYXk7CiAgY29uc3QgbnNTdHlsZVBv
c2l0aW9uKiBtU3R5bGVQb3NpdGlvbjsKICBjb25zdCBuc1N0eWxlQm9yZGVyKiBtU3R5bGVCb3Jk
ZXI7CiAgY29uc3QgbnNTdHlsZU1hcmdpbiogbVN0eWxlTWFyZ2luOwogIGNvbnN0IG5zU3R5bGVQ
YWRkaW5nKiBtU3R5bGVQYWRkaW5nOwogIGNvbnN0IG5zU3R5bGVUZXh0KiBtU3R5bGVUZXh0OwoK
CgogIFBSSW50MzIgbVJlZmxvd0RlcHRoOwoKCgoKCgoKICB2b2lkKiBtRGVidWdIb29rOwojIDIz
OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFJlZmxvd1N0YXRlLmgiCiAgbnNIVE1M
UmVmbG93U3RhdGUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgIG5zUmVmbG93UmVhc29u
IGFSZWFzb24sCiAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCogYVJlbmRl
cmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTaXplJiBhQXZhaWxhYmxl
U3BhY2UpOwoKCgogIG5zSFRNTFJlZmxvd1N0YXRlKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAg
ICAgICBuc0lSZWZsb3dDb21tYW5kJiBhUmVmbG93Q29tbWFuZCwKICAgICAgICAgICAgICAgICAg
ICBuc0lSZW5kZXJpbmdDb250ZXh0KiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICBjb25zdCBuc1NpemUmIGFBdmFpbGFibGVTcGFjZSk7CgoKCgogIG5zSFRNTFJlZmxvd1N0
YXRlKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNIVE1MUmVmbG93U3RhdGUmIGFQYXJlbnRSZWZsb3dTdGF0ZSwKICAgICAgICAgICAgICAg
ICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU2l6ZSYg
YUF2YWlsYWJsZVNwYWNlLAogICAgICAgICAgICAgICAgICAgIG5zUmVmbG93UmVhc29uIGFSZWFz
b24pOwoKCgogIG5zSFRNTFJlZmxvd1N0YXRlKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFQYXJlbnRSZWZs
b3dTdGF0ZSwKICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zU2l6ZSYgYUF2YWlsYWJsZVNwYWNlKTsKCgoKICBuc0hUTUxSZWZs
b3dTdGF0ZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAg
IGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlJiBhUGFyZW50UmVmbG93U3RhdGUsCiAgICAgICAgICAg
ICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1Np
emUmIGFBdmFpbGFibGVTcGFjZSwKICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250YWlu
aW5nQmxvY2tXaWR0aCwKICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxv
Y2tIZWlnaHQpOwoKCgoKCgogIHN0YXRpYyBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSoKICAgIEdl
dENvbnRhaW5pbmdCbG9ja1JlZmxvd1N0YXRlKGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlKiBhUGFy
ZW50UlMpOwoKCgoKCgogIHN0YXRpYyBuc2Nvb3JkCiAgICBHZXRDb250YWluaW5nQmxvY2tDb250
ZW50V2lkdGgoY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIGFQYXJlbnRSUyk7CgoKCgoKCiAgc3Rh
dGljIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlKgogICAgR2V0UGFnZUJveFJlZmxvd1N0YXRlKGNv
bnN0IG5zSFRNTFJlZmxvd1N0YXRlKiBhUGFyZW50UlMpOwojIDMwOSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSFRNTFJlZmxvd1N0YXRlLmgiCiAgc3RhdGljIHZvaWQgQ29tcHV0ZUJvcmRl
clBhZGRpbmdGb3IobnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSogYVBhcmVudFJTLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zTWFyZ2luJiBhUmVzdWx0KTsKCgoKCgoKICBz
dGF0aWMgbnNjb29yZCBDYWxjTGluZUhlaWdodChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQqIGFS
ZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l
KiBhRnJhbWUpOwoKICBzdGF0aWMgUFJCb29sIFVzZUNvbXB1dGVkSGVpZ2h0KCk7CgogIHN0YXRp
YyBuc0NTU0ZyYW1lVHlwZSBEZXRlcm1pbmVGcmFtZVR5cGUobnNJRnJhbWUqIGFGcmFtZSk7Cgog
IHZvaWQgQ29tcHV0ZUNvbnRhaW5pbmdCbG9ja1JlY3RhbmdsZShuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c0hUTUxSZWZsb3dTdGF0ZSogYUNvbnRhaW5pbmdCbG9ja1JTLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkJiBhQ29udGFpbmluZ0Jsb2NrV2lkdGgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQmIGFDb250YWluaW5nQmxv
Y2tIZWlnaHQpOwoKICB2b2lkIENhbGN1bGF0ZUJsb2NrU2lkZU1hcmdpbnMobnNjb29yZCBhQXZh
aWxXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29tcHV0
ZWRXaWR0aCk7CgoKcHJvdGVjdGVkOgoKCiAgdm9pZCBJbml0KG5zSVByZXNDb250ZXh0KiBhUHJl
c0NvbnRleHQsCiAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRoID0gLTEs
CiAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja0hlaWdodCA9IC0xKTsKCiAgdm9p
ZCBJbml0Q29uc3RyYWludHMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tXaWR0aCwKICAgICAgICAgICAg
ICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tIZWlnaHQpOwoKICB2b2lkIENhbGN1
bGF0ZUh5cG90aGV0aWNhbEJveChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhUGxhY2Vob2xkZXJGcmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUJsb2NrRnJhbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNNYXJnaW4mIGFCbG9ja0NvbnRlbnRBcmVhLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhQWJzb2x1dGVDb250YWlu
aW5nQmxvY2tGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0h5cG90aGV0
aWNhbEJveCYgYUh5cG90aGV0aWNhbEJveCk7CgogIHZvaWQgSW5pdEFic29sdXRlQ29uc3RyYWlu
dHMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRlKiBjYnJzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrV2lkdGgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tIZWlnaHQpOwoKICB2b2lk
IENvbXB1dGVSZWxhdGl2ZU9mZnNldHMoY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIGNicnMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRo
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tI
ZWlnaHQpOwoKICB2b2lkIENvbXB1dGVCbG9ja0JveERhdGEobnNJUHJlc0NvbnRleHQqIGFQcmVz
Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3Rh
dGUqIGNicnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU3R5bGVVbml0IGFXaWR0aFVu
aXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU3R5bGVVbml0IGFIZWlnaHRVbml0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tXaWR0aCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrSGVpZ2h0
KTsKCiAgdm9pZCBDb21wdXRlSG9yaXpvbnRhbFZhbHVlKG5zY29vcmQgYUNvbnRhaW5pbmdCbG9j
a1dpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTdHlsZVVuaXQg
YVVuaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1N0eWxl
Q29vcmQmIGFDb29yZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29v
cmQmIGFSZXN1bHQpOwoKICB2b2lkIENvbXB1dGVWZXJ0aWNhbFZhbHVlKG5zY29vcmQgYUNvbnRh
aW5pbmdCbG9ja0hlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1N0
eWxlVW5pdCBhVW5pdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c1N0eWxlQ29vcmQmIGFDb29yZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c2Nvb3JkJiBhUmVzdWx0KTsKCiAgc3RhdGljIG5zQ1NTRnJhbWVUeXBlIERldGVybWluZUZyYW1l
VHlwZShuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbnNTdHlsZVBvc2l0aW9uKiBhUG9zaXRpb24sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1N0eWxlRGlzcGxheSogYURpc3Bs
YXkpOwoKCgogIHZvaWQgQ29tcHV0ZU1hcmdpbihuc2Nvb3JkIGFDb250YWluaW5nQmxvY2tXaWR0
aCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIGFDb250YWlu
aW5nQmxvY2tSUyk7CgoKCiAgdm9pZCBDb21wdXRlUGFkZGluZyhuc2Nvb3JkIGFDb250YWluaW5n
QmxvY2tXaWR0aCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0YXRl
KiBhQ29udGFpbmluZ0Jsb2NrUlMpOwoKCgoKICB2b2lkIENvbXB1dGVNaW5NYXhWYWx1ZXMobnNj
b29yZCBhQ29udGFpbmluZ0Jsb2NrV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
Y29vcmQgYUNvbnRhaW5pbmdCbG9ja0hlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbnNIVE1MUmVmbG93U3RhdGUqIGFDb250YWluaW5nQmxvY2tSUyk7CgogIG5zY29vcmQg
Q2FsY3VsYXRlSG9yaXpCb3JkZXJQYWRkaW5nTWFyZ2luKG5zY29vcmQgYUNvbnRhaW5pbmdCbG9j
a1dpZHRoKTsKCgoKCgogIHZvaWQgQWRqdXN0Q29tcHV0ZWRIZWlnaHQodm9pZCk7CiAgdm9pZCBB
ZGp1c3RDb21wdXRlZFdpZHRoKHZvaWQpOwp9OwojIDM0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRnJhbWUuaCIgMgoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVy
aW5nQ29udGV4dC5oIiAxCiMgMzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5o
IiAyCiMgNTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgpjbGFzcyBuc0lB
dG9tOwpjbGFzcyBuc0lDb250ZW50OwpjbGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJUHJl
c1NoZWxsOwpjbGFzcyBuc0lSZW5kZXJpbmdDb250ZXh0OwpjbGFzcyBuc0lTaXplT2ZIYW5kbGVy
OwpjbGFzcyBuc0lTdHlsZUNvbnRleHQ7CmNsYXNzIG5zSVZpZXc7CmNsYXNzIG5zSVdpZGdldDsK
Y2xhc3MgbnNBdXRvU3RyaW5nOwpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNJRm9jdXNUcmFja2Vy
OwpjbGFzcyBuc1N0eWxlQ2hhbmdlTGlzdDsKY2xhc3MgbnNCbG9ja0ZyYW1lOwpjbGFzcyBuc0xp
bmVMYXlvdXQ7CgpzdHJ1Y3QgbnNQZWVrT2Zmc2V0U3RydWN0OwpzdHJ1Y3QgbnNQb2ludDsKc3Ry
dWN0IG5zUmVjdDsKc3RydWN0IG5zU3R5bGVTdHJ1Y3Q7CmNsYXNzIG5zSURPTVJhbmdlOwpjbGFz
cyBuc0lDYXJldDsKY2xhc3MgbnNJU2VsZWN0aW9uQ29udHJvbGxlcjsKc3RydWN0IFBSTG9nTW9k
dWxlSW5mbzsKIyA5OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCnR5cGVk
ZWYgUFJVaW50MzIgbnNTcGxpdHRhYmxlVHlwZTsKIyAxMTYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lGcmFtZS5oIgp0eXBlZGVmIFBSVWludDMyIG5zRnJhbWVTdGF0ZTsKIyAyMDggIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgplbnVtIG5zRnJhbWVQYWludExheWVy
IHsKICBlRnJhbWVQYWludExheWVyX1VuZGVybGF5ID0gMCwKICBlRnJhbWVQYWludExheWVyX0Nv
bnRlbnQgPSAxLAogIGVGcmFtZVBhaW50TGF5ZXJfT3ZlcmxheSA9IDIKfTsKCmVudW0gbnNTZWxl
Y3Rpb25BbW91bnQgewogIGVTZWxlY3RDaGFyYWN0ZXIgPSAwLAogIGVTZWxlY3RXb3JkID0gMSwK
ICBlU2VsZWN0TGluZSA9IDIsCiAgZVNlbGVjdEJlZ2luTGluZSA9IDMsCiAgZVNlbGVjdEVuZExp
bmUgPSA0LAogIGVTZWxlY3ROb0Ftb3VudCA9IDUsCiAgZVNlbGVjdERpciA9IDYsCiAgZVNlbGVj
dFBhcmFncmFwaCA9IDcKfTsKCmVudW0gbnNEaXJlY3Rpb24gewogIGVEaXJOZXh0ID0gMCwKICBl
RGlyUHJldmlvdXM9IDEKfTsKCmVudW0gbnNTcHJlYWQgewogIGVTcHJlYWROb25lID0gMCwKICBl
U3ByZWFkQWNyb3NzID0gMSwKICBlU3ByZWFkRG93biA9IDIKfTsKCmVudW0gbnNDb250ZXh0UHJv
dmlkZXJSZWxhdGlvbnNoaXAgewogIGVDb250ZXh0UHJvdmlkZXJfQW5jZXN0b3IgPSAwLAogIGVD
b250ZXh0UHJvdmlkZXJfRGVzY2VuZGFudCA9IDEKfTsKIyAyNTUgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGcmFtZS5oIgpzdHJ1Y3QgbnNIVE1MUmVmbG93TWV0cmljcyB7CiAgbnNjb29y
ZCB3aWR0aCwgaGVpZ2h0OwogIG5zY29vcmQgYXNjZW50LCBkZXNjZW50OwoKCiAgbnNTaXplKiBt
YXhFbGVtZW50U2l6ZTsKCgoKICBuc2Nvb3JkIG1NYXhpbXVtV2lkdGg7CiMgMjczICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICBuc0JvdW5kaW5nTWV0cmljcyBtQm91bmRp
bmdNZXRyaWNzOwoKCgoKICBuc2Nvb3JkIG1DYXJyaWVkT3V0Qm90dG9tTWFyZ2luOwojIDI4OCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgbnNSZWN0IG1PdmVyZmxvd0Fy
ZWE7CgogIFBSVWludDMyIG1GbGFnczsKCgogIFBSQm9vbCBtTm90aGluZ0NoYW5nZWQ7CgogIG5z
SFRNTFJlZmxvd01ldHJpY3MobnNTaXplKiBhTWF4RWxlbWVudFNpemUsIFBSVWludDMyIGFGbGFn
cyA9IDApIHsKICAgIG1heEVsZW1lbnRTaXplID0gYU1heEVsZW1lbnRTaXplOwogICAgbU1heGlt
dW1XaWR0aCA9IDA7CiAgICBtRmxhZ3MgPSBhRmxhZ3M7CiAgICBtQ2FycmllZE91dEJvdHRvbU1h
cmdpbiA9IDA7CiAgICBtT3ZlcmZsb3dBcmVhLnggPSAwOwogICAgbU92ZXJmbG93QXJlYS55ID0g
MDsKICAgIG1PdmVyZmxvd0FyZWEud2lkdGggPSAwOwogICAgbU92ZXJmbG93QXJlYS5oZWlnaHQg
PSAwOwogICAgbU5vdGhpbmdDaGFuZ2VkID0gMDsKCiAgICBtQm91bmRpbmdNZXRyaWNzLkNsZWFy
KCk7CgoKCgoKICAgIHdpZHRoID0gaGVpZ2h0ID0gMDsKICAgIGFzY2VudCA9IGRlc2NlbnQgPSAw
OwogIH0KCiAgdm9pZCBBZGRCb3JkZXJQYWRkaW5nVG9NYXhFbGVtZW50U2l6ZShjb25zdCBuc01h
cmdpbiYgYUJvcmRlclBhZGRpbmcpIHsKICAgIG1heEVsZW1lbnRTaXplLT53aWR0aCArPSBhQm9y
ZGVyUGFkZGluZy5sZWZ0ICsgYUJvcmRlclBhZGRpbmcucmlnaHQ7CiAgICBtYXhFbGVtZW50U2l6
ZS0+aGVpZ2h0ICs9IGFCb3JkZXJQYWRkaW5nLnRvcCArIGFCb3JkZXJQYWRkaW5nLmJvdHRvbTsK
ICB9CgogIG5zSFRNTFJlZmxvd01ldHJpY3MmIG9wZXJhdG9yPShjb25zdCBuc0hUTUxSZWZsb3dN
ZXRyaWNzJiBhT3RoZXIpCiAgewogICAgaWYgKG1heEVsZW1lbnRTaXplICYmIGFPdGhlci5tYXhF
bGVtZW50U2l6ZSkgewogICAgICBtYXhFbGVtZW50U2l6ZS0+d2lkdGggPSBhT3RoZXIubWF4RWxl
bWVudFNpemUtPndpZHRoOwogICAgICBtYXhFbGVtZW50U2l6ZS0+aGVpZ2h0ID0gYU90aGVyLm1h
eEVsZW1lbnRTaXplLT5oZWlnaHQ7CiAgICB9CiAgICBtTWF4aW11bVdpZHRoID0gYU90aGVyLm1N
YXhpbXVtV2lkdGg7CiAgICBtRmxhZ3MgPSBhT3RoZXIubUZsYWdzOwogICAgbUNhcnJpZWRPdXRC
b3R0b21NYXJnaW4gPSBhT3RoZXIubUNhcnJpZWRPdXRCb3R0b21NYXJnaW47CiAgICBtT3ZlcmZs
b3dBcmVhLnggPSBhT3RoZXIubU92ZXJmbG93QXJlYS54OwogICAgbU92ZXJmbG93QXJlYS55ID0g
YU90aGVyLm1PdmVyZmxvd0FyZWEueTsKICAgIG1PdmVyZmxvd0FyZWEud2lkdGggPSBhT3RoZXIu
bU92ZXJmbG93QXJlYS53aWR0aDsKICAgIG1PdmVyZmxvd0FyZWEuaGVpZ2h0ID0gYU90aGVyLm1P
dmVyZmxvd0FyZWEuaGVpZ2h0OwogICAgbU5vdGhpbmdDaGFuZ2VkID0gYU90aGVyLm1Ob3RoaW5n
Q2hhbmdlZDsKCiAgICBtQm91bmRpbmdNZXRyaWNzID0gYU90aGVyLm1Cb3VuZGluZ01ldHJpY3M7
CgoKICAgIHdpZHRoID0gYU90aGVyLndpZHRoOwogICAgaGVpZ2h0ID0gYU90aGVyLmhlaWdodDsK
ICAgIGFzY2VudCA9IGFPdGhlci5hc2NlbnQ7CiAgICBkZXNjZW50ID0gYU90aGVyLmRlc2NlbnQ7
CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKfTsKIyAzODAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGcmFtZS5oIgp0eXBlZGVmIFBSVWludDMyIG5zUmVmbG93U3RhdHVzOwojIDQ1MCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCnR5cGVkZWYgUFJCb29sIG5zRGlkUmVm
bG93U3RhdHVzOwojIDQ3MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCmNs
YXNzIG5zSUZyYW1lIDogcHVibGljIG5zSVN1cHBvcnRzCnsKcHVibGljOgogIHN0YXRpYyBjb25z
dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4YTZjZjkwNTAs
IDB4MTViMywgMHgxMWQyLHsweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRk
LCAweDMyfX07IHJldHVybiBpaWQ7fQojIDQ5MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAg
ICAgICAgICAgIG5zSUZyYW1lKiBhUGFyZW50LAogICAgICAgICAgICAgICAgICAgbnNJU3R5bGVD
b250ZXh0KiBhQ29udGV4dCwKICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhUHJldkluRmxv
dykgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQpID0gMDsKIyA1MjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFt
ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SW5pdGlhbENoaWxkTGlzdChuc0lQcmVzQ29udGV4
dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRv
bSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUq
IGFDaGlsZExpc3QpID0gMDsKIyA1NDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFt
ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5kRnJhbWVzKG5zSVByZXNDb250ZXh0KiBhUHJl
c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1No
ZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lTGlzdCkgPSAwOwojIDU2MSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnNl
cnRGcmFtZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l
KiBhUHJldkZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWVM
aXN0KSA9IDA7CiMgNTgzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUZyYW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hlbGwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lGcmFtZSogYU9sZEZyYW1lKSA9IDA7CiMgNjA1ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlcGxhY2VGcmFtZShuc0lQ
cmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVBy
ZXNTaGVsbCYgYVByZXNTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBh
TGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFPbGRGcmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU5ld0ZyYW1lKSA9IDA7CgoKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVudChuc0lDb250ZW50KiogYUNvbnRlbnQpIGNv
bnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T2Zmc2V0cyhQUkludDMyICZzdGFy
dCwgUFJJbnQzMiAmZW5kKSBjb25zdCA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
U3R5bGVDb250ZXh0KG5zSVN0eWxlQ29udGV4dCoqIGFTdHlsZUNvbnRleHQpIGNvbnN0ID0gMDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN0eWxlQ29udGV4dChuc0lQcmVzQ29udGV4dCogYVByZXND
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFD
b250ZXh0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVEYXRhKG5zU3R5bGVT
dHJ1Y3RJRCBhU0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1N0eWxlU3Ry
dWN0KiYgYVN0eWxlU3RydWN0KSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5
bGUobnNTdHlsZVN0cnVjdElEIGFTSUQsIG5zU3R5bGVTdHJ1Y3QmIGFTdHJ1Y3QpIGNvbnN0ID0g
MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBDYWxjQm9yZGVyUGFkZGluZyhuc01hcmdpbiYgYUJvcmRl
clBhZGRpbmcpIGNvbnN0ID0gMDsKIyA2NTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lG
cmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWRkaXRpb25hbFN0eWxlQ29udGV4dChQUklu
dDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0
eWxlQ29udGV4dCoqIGFTdHlsZUNvbnRleHQpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0
IFNldEFkZGl0aW9uYWxTdHlsZUNvbnRleHQoUFJJbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFTdHlsZUNvbnRleHQp
ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJRnJhbWUqKiBhUGFyZW50
KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQYXJlbnQoY29uc3QgbnNJRnJhbWUq
IGFQYXJlbnQpID0gMDsKIyA2NzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVjdChuc1JlY3QmIGFSZWN0KSBjb25zdCA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRPcmlnaW4obnNQb2ludCYgYVBvaW50KSBjb25zdCA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRTaXplKG5zU2l6ZSYgYVNpemUpIGNvbnN0ID0gMDsKICB2aXJ0
dWFsIG5zcmVzdWx0IFNldFJlY3QobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYVJlY3QpID0gMDsKICB2aXJ0dWFsIG5zcmVz
dWx0IE1vdmVUbyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICBuc2Nvb3JkIGFYLAogICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFZKSA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBTaXplVG8obnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgbnNjb29yZCBhV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgIG5z
Y29vcmQgYUhlaWdodCkgPSAwOwojIDY5NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZy
YW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBZGRpdGlvbmFsQ2hpbGRMaXN0TmFtZShQUklu
dDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lB
dG9tKiogYUxpc3ROYW1lKSBjb25zdCA9IDA7CiMgNzA3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEZpcnN0Q2hpbGQobnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0
TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYUZpcnN0Q2hpbGQpIGNv
bnN0ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROZXh0U2libGluZyhuc0lGcmFtZSoq
IGFOZXh0U2libGluZykgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TmV4dFNpYmxp
bmcobnNJRnJhbWUqIGFOZXh0U2libGluZykgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
UGFpbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICBu
c0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICBjb25zdCBuc1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICAgbnNGcmFtZVBh
aW50TGF5ZXIgYVdoaWNoTGF5ZXIpID0gMDsKIyA3NDIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRXZlbnQobnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0dVSUV2ZW50KiBh
RXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYUV2ZW50U3Rh
dHVzKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVudEZvckV2ZW50KG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
RXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVu
dCoqIGFDb250ZW50KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVudEFuZE9mZnNl
dHNGcm9tUG9pbnQobnNJUHJlc0NvbnRleHQqIGFDWCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUG9pbnQmIGFQb2ludCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQgKiogYU5ld0NvbnRlbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyJiBhQ29udGVu
dE9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50
MzImIGFDb250ZW50T2Zmc2V0RW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJCb29sJiBhQmVnaW5GcmFtZUNvbnRlbnQpID0gMDsKCgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0Q3Vyc29yKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgIG5zUG9pbnQmIGFQb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAg
UFJJbnQzMiYgYUN1cnNvcikgPSAwOwojIDc3MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZUZvclBvaW50KG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c1BvaW50JiBhUG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZyYW1lUGFp
bnRMYXllciBhV2hpY2hMYXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZy
YW1lKiogYUZyYW1lKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UG9pbnRGcm9t
T2Zmc2V0KG5zSVByZXNDb250ZXh0KiBpblByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0KiBpblJlbmRDb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGluT2Zmc2V0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc1BvaW50KiBvdXRQb2ludCkgPSAwOwojIDc5NiAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGls
ZEZyYW1lQ29udGFpbmluZ09mZnNldChQUkludDMyIGluQ29udGVudE9mZnNldCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGluSGludCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJJbnQzMiogb3V0RnJhbWVDb250ZW50T2Zmc2V0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogKm91dENoaWxkRnJhbWUpID0gMDsKCgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lU3RhdGUobnNGcmFtZVN0YXRlKiBhUmVzdWx0
KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZyYW1lU3RhdGUobnNGcmFtZVN0YXRl
IGFOZXdTdGF0ZSkgPSAwOwojIDgyMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1l
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb250ZW50Q2hhbmdlZChuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDaGls
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyogYVN1YkNvbnRlbnQp
ID0gMDsKIyA4MzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgQXR0cmlidXRlQ2hhbmdlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmFtZVNwYWNlSUQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSGludCkgPSAwOwojIDg1MiAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb250ZW50U3RhdGVD
aGFuZ2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUkludDMyIGFIaW50KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNT
cGxpdHRhYmxlKG5zU3BsaXR0YWJsZVR5cGUmIGFJc1NwbGl0dGFibGUpIGNvbnN0ID0gMDsKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmV2SW5GbG93KG5zSUZyYW1lKiogYVByZXZJbkZsb3cp
IGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByZXZJbkZsb3cobnNJRnJhbWUqKSA9
IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROZXh0SW5GbG93KG5zSUZyYW1lKiogYU5leHRJbkZs
b3cpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5leHRJbkZsb3cobnNJRnJhbWUq
KSA9IDA7CiMgODc4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IFdpbGxSZWZsb3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCkgPSAw
OwojIDkyMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBSZWZsb3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICBuc0hUTUxSZWZsb3dNZXRyaWNzJiBhUmVmbG93TWV0cmljcywKICAgICAgICAgICAg
ICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVJlZmxvd1N0YXRlLAogICAgICAgICAg
ICAgICAgICAgIG5zUmVmbG93U3RhdHVzJiBhU3RhdHVzKSA9IDA7CiMgOTQwICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERpZFJlZmxvdyhu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBuc0Rp
ZFJlZmxvd1N0YXR1cyBhU3RhdHVzKSA9IDA7CiMgOTU2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENhbkNvbnRpbnVlVGV4dFJ1bihQUkJv
b2wmIGFDb250aW51ZVRleHRSdW4pIGNvbnN0ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBB
ZGp1c3RGcmFtZVNpemUobnNjb29yZCBhRXh0cmFTcGFjZSwgbnNjb29yZCYgYVVzZWRTcGFjZSkg
PSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQgVHJpbVRyYWlsaW5nV2hpdGVTcGFjZShuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUkMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zY29vcmQmIGFEZWx0YVdpZHRoKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0Vmlldyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAg
ICAgbnNJVmlldyoqIGFWaWV3KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWaWV3
KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICBuc0lW
aWV3KiBhVmlldykgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhcmVudFdpdGhWaWV3
KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJRnJhbWUqKiBhUGFyZW50KSBjb25zdCA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldE9mZnNldEZyb21WaWV3KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNQb2ludCYgYU9mZnNldCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lWaWV3KiogYVZpZXcpIGNvbnN0ID0gMDsKCgoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2lkZ2V0KiogYVdpZGdldCkgY29uc3QgPSAwOwoK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVUeXBlKG5zSUF0b20qKiBhVHlwZSkgY29u
c3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzUGVyY2VudGFnZUJhc2UoUFJCb29sJiBh
QmFzZSkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JvbGxlZChuc0lWaWV3
ICphVmlldykgPSAwOwojIDEwMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2VsZWN0ZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lET01SYW5nZSogYVJhbmdlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhU2VsZWN0ZWQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNTcHJlYWQgYVNwcmVhZCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNl
bGVjdGVkKFBSQm9vbCAqYVNlbGVjdGVkKSBjb25zdCA9IDA7CiMgMTA0NCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1NlbGVjdGFibGUo
UFJCb29sKiBhSXNTZWxlY3RhYmxlLCBQUlVpbnQ4KiBhU2VsZWN0U3R5bGUpIGNvbnN0ID0gMDsK
CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlbGVjdGlvbkNvbnRyb2xsZXIobnNJUHJlc0Nv
bnRleHQgKmFQcmVzQ29udGV4dCwgbnNJU2VsZWN0aW9uQ29udHJvbGxlciAqKmFTZWxDb24pID0g
MDsKIyAxMDYyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFs
IG5zcmVzdWx0IENhcHR1cmVNb3VzZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBQUkJv
b2wgYUdyYWJNb3VzZUV2ZW50cykgPSAwOwojIDEwNzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUGVla09mZnNldChuc0lQcmVzQ29udGV4
dCogYVByZXNDb250ZXh0LCBuc1BlZWtPZmZzZXRTdHJ1Y3QgKmFQb3MpID0gMDsKIyAxMDg0ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENo
ZWNrVmlzaWJpbGl0eShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQsIFBSSW50MzIgYVN0YXJ0SW5k
ZXgsIFBSSW50MzIgYUVuZEluZGV4LCBQUkJvb2wgYVJlY3Vyc2UsIFBSQm9vbCAqYUZpbmlzaGVk
LCBQUkJvb2wgKl9yZXR2YWwpPTA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVmbG93RGly
dHlDaGlsZChuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiBhQ2hpbGQpID0gMDsK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVmbG93Q29tbWFuZE5vdGlmeShuc0lQcmVzU2hlbGwq
IGFTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVmbG93Q29tbWFu
ZCogYVJDLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYUNvbW1hbmRB
ZGRlZCkgPSAwOwojIDExMjAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50U3R5bGVDb250ZXh0UHJvdmlkZXIobnNJUHJlc0Nv
bnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUZyYW1lKiogYVByb3ZpZGVyRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0NvbnRleHRQcm92aWRlclJlbGF0aW9uc2hpcCYgYVJlbGF0
aW9uc2hpcCkgPSAwOwojIDExMzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgSXNWaXNpYmxlRm9yUGFpbnRpbmcobnNJUHJlc0NvbnRleHQg
KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5k
ZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBSQm9vbCBhQ2hlY2tWaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkJvb2wqIGFJc1Zpc2libGUpID0gMDsKIyAxMTUxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJRnJhbWUuaCIKcHJpdmF0ZToKICB2aXJ0dWFsIG5zcmVmY250IEFkZFJlZih2b2lk
KSA9IDA7CiAgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpID0gMDsKfTsKIyAyNyAiLi4v
Li4vYmFzZS9zcmMvbnNGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
UmVjdC5oIiAxCiMgMjggIi4uLy4uL2Jhc2Uvc3JjL25zRnJhbWUuaCIgMgojIDEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMjkgIi4uLy4uL2Jhc2Uvc3JjL25zRnJh
bWUuaCIgMgojIDEgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cmxvZy5oIiAxCiMgMjIgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wcmxvZy5oIgojIDEgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wcnR5cGVzLmgiIDEKIyAyMyAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BybG9nLmgiIDIKCmV4dGVybiAiQyIgewojIDExOSAiL0dNL2hkZDkvbW96aWxsYS9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9nLmgiCnR5cGVkZWYgZW51bSBQUkxvZ01vZHVs
ZUxldmVsIHsKICAgIFBSX0xPR19OT05FID0gMCwKICAgIFBSX0xPR19BTFdBWVMgPSAxLAogICAg
UFJfTE9HX0VSUk9SID0gMiwKICAgIFBSX0xPR19XQVJOSU5HID0gMywKICAgIFBSX0xPR19ERUJV
RyA9IDQsCgogICAgUFJfTE9HX05PVElDRSA9IFBSX0xPR19ERUJVRywKICAgIFBSX0xPR19XQVJO
ID0gUFJfTE9HX1dBUk5JTkcsCiAgICBQUl9MT0dfTUlOID0gUFJfTE9HX0RFQlVHLAogICAgUFJf
TE9HX01BWCA9IFBSX0xPR19ERUJVRwp9IFBSTG9nTW9kdWxlTGV2ZWw7CgoKCgoKCnR5cGVkZWYg
c3RydWN0IFBSTG9nTW9kdWxlSW5mbyB7CiAgICBjb25zdCBjaGFyICpuYW1lOwogICAgUFJMb2dN
b2R1bGVMZXZlbCBsZXZlbDsKICAgIHN0cnVjdCBQUkxvZ01vZHVsZUluZm8gKm5leHQ7Cn0gUFJM
b2dNb2R1bGVJbmZvOwoKCgoKZXh0ZXJuIFBSTG9nTW9kdWxlSW5mbyogUFJfTmV3TG9nTW9kdWxl
KGNvbnN0IGNoYXIgKm5hbWUpOwoKCgoKCmV4dGVybiBQUkJvb2wgUFJfU2V0TG9nRmlsZShjb25z
dCBjaGFyICpuYW1lKTsKCgoKCgpleHRlcm4gdm9pZCBQUl9TZXRMb2dCdWZmZXJpbmcoUFJJbnRu
IGJ1ZmZlcl9zaXplKTsKCgoKCgoKCmV4dGVybiB2b2lkIFBSX0xvZ1ByaW50KGNvbnN0IGNoYXIg
KmZtdCwgLi4uKTsKCgoKCmV4dGVybiB2b2lkIFBSX0xvZ0ZsdXNoKHZvaWQpOwojIDIyMSAiL0dN
L2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9nLmgiCmV4dGVybiB2
b2lkIFBSX0Fzc2VydChjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpmaWxlLCBQUkludG4gbG4p
OwojIDIzNSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9n
LmgiCn0KIyAzMCAiLi4vLi4vYmFzZS9zcmMvbnNGcmFtZS5oIiAyCgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lGcmFtZURlYnVnLmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSUZyYW1lRGVidWcuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNs
YXlvdXQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVEZWJ1Zy5o
IiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyNyAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lRGVidWcuaCIgMgoKY2xhc3MgbnNJRnJh
bWU7CmNsYXNzIG5zSVByZXNDb250ZXh0OwojIDM5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJRnJhbWVEZWJ1Zy5oIgpjbGFzcyBuc0lGcmFtZURlYnVnIDogcHVibGljIG5zSVN1cHBvcnRz
IHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQg
aWlkID0geyAweGE2Y2Y5MDY5LCAweDE1YjMsIDB4MTFkMiwgezB4OTMsIDB4MmUsIDB4MDAsIDB4
ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzJ9fTsgcmV0dXJuIGlpZDsgfQoKICB2aXJ0dWFsIG5z
cmVzdWx0IExpc3QobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgRklMRSogb3V0LCBQUklu
dDMyIGFJbmRlbnQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVO
YW1lKG5zU3RyaW5nJiBhUmVzdWx0KSBjb25zdCA9IDA7CiMgNjAgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGcmFtZURlYnVnLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEdW1wUmVncmVzc2lv
bkRhdGEobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgRklMRSogb3V0LCBQUkludDMyIGFJ
bmRlbnQsIFBSQm9vbCBhSW5jbHVkZVN0eWxlRGF0YSkgPSAwOwojIDc3ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJRnJhbWVEZWJ1Zy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2l6ZU9mKG5z
SVNpemVPZkhhbmRsZXIqIGFTaXplciwgUFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAg
dmlydHVhbCBuc3Jlc3VsdCBWZXJpZnlUcmVlKCkgY29uc3QgPSAwOwoKCgoKCgoKICBzdGF0aWMg
UFJCb29sIEdldFZlcmlmeVRyZWVFbmFibGUoKTsKCgoKCiAgc3RhdGljIHZvaWQgU2V0VmVyaWZ5
VHJlZUVuYWJsZShQUkJvb2wgYUVuYWJsZWQpOwoKCgoKCgoKICBzdGF0aWMgUFJCb29sIEdldFZl
cmlmeVN0eWxlVHJlZUVuYWJsZSgpOwoKCgoKICBzdGF0aWMgdm9pZCBTZXRWZXJpZnlTdHlsZVRy
ZWVFbmFibGUoUFJCb29sIGFFbmFibGVkKTsKIyAxMTQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGcmFtZURlYnVnLmgiCiAgc3RhdGljIFBSTG9nTW9kdWxlSW5mbyogR2V0TG9nTW9kdWxl
SW5mbygpOwoKCiAgc3RhdGljIHZvaWQgU2hvd0ZyYW1lQm9yZGVycyhQUkJvb2wgYUVuYWJsZSk7
CiAgc3RhdGljIFBSQm9vbCBHZXRTaG93RnJhbWVCb3JkZXJzKCk7CgoKICBzdGF0aWMgdm9pZCBT
aG93RXZlbnRUYXJnZXRGcmFtZUJvcmRlcihQUkJvb2wgYUVuYWJsZSk7CiAgc3RhdGljIFBSQm9v
bCBHZXRTaG93RXZlbnRUYXJnZXRGcmFtZUJvcmRlcigpOwoKcHJpdmF0ZToKICB2aXJ0dWFsIG5z
cmVmY250IEFkZFJlZih2b2lkKSA9IDA7CiAgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQp
ID0gMDsKfTsKIyAzMiAiLi4vLi4vYmFzZS9zcmMvbnNGcmFtZS5oIiAyCgoKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiIDEKIyA0MCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c2xheW91dC5oIiAxCiMgNDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwu
aCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgNDIg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIgMgojIDEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgiIDEKIyA0MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVByZXNTaGVsbC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNl
bGVjdGlvbi5oIiAxCiMgMTQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb24u
aCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tc3R1YnMuaCIgMQojIDg1MSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbXN0dWJzLmgiCiAgICBjbGFzcyBuc0lET01Ob2RlOwog
ICAgY2xhc3MgbnNJRE9NRWxlbWVudDsKICAgIGNsYXNzIG5zSURPTURvY3VtZW50OwogICAgY2xh
c3MgbnNJRE9NTm9kZUxpc3Q7CiAgICBjbGFzcyBuc0lET01OYXZpZ2F0b3I7CiAgICBjbGFzcyBu
c0lET01TY3JlZW47CiAgICBjbGFzcyBuc0lET01IaXN0b3J5OwogICAgY2xhc3MgbnNJRE9NQmFy
UHJvcDsKICAgIGNsYXNzIG5zSURPTVdpbmRvd0NvbGxlY3Rpb247CiAgICBjbGFzcyBuc0lET01X
aW5kb3c7CiAgICBjbGFzcyBuc0lET01XaW5kb3dJbnRlcm5hbDsKICAgIGNsYXNzIG5zSURPTURv
Y3VtZW50RnJhZ21lbnQ7CiAgICBjbGFzcyBuc0lET01FdmVudDsKICAgIGNsYXNzIG5zSURPTVJh
bmdlOwogICAgY2xhc3MgbnNJRE9NQ2hhcmFjdGVyRGF0YTsKIyAxNSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVNlbGVjdGlvbi5oIiAyCgoKCgoKCmNsYXNzIG5zSURPTU5vZGU7CmNsYXNz
IG5zSURPTVJhbmdlOwojIDM4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9u
LmgiCmNsYXNzIG5zSVNlbGVjdGlvbiA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6Cgog
IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7
MHhiMmM3ZWQ1OSwgMHg4NjM0LCAweDQzNTIsIHsgMHg5ZSwgMHgzNywgMHg1NCwgMHg4NCwgMHhj
OCwgMHhiNiwgMHhlNCwgMHhlMSB9fTsgcmV0dXJuIGlpZDt9CgoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldEFuY2hvck5vZGUobnNJRE9NTm9kZSAqICphQW5jaG9yTm9kZSkgPSAwOwoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRBbmNob3JPZmZzZXQoUFJJbnQzMiAqYUFuY2hvck9mZnNldCkg
PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb2N1c05vZGUobnNJRE9NTm9kZSAqICph
Rm9jdXNOb2RlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvY3VzT2Zmc2V0KFBS
SW50MzIgKmFGb2N1c09mZnNldCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJc0Nv
bGxhcHNlZChQUkJvb2wgKmFJc0NvbGxhcHNlZCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRSYW5nZUNvdW50KFBSSW50MzIgKmFSYW5nZUNvdW50KSA9IDA7CgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldFJhbmdlQXQoUFJJbnQzMiBpbmRleCwgbnNJRE9NUmFuZ2UgKipfcmV0dmFs
KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb2xsYXBzZShuc0lET01Ob2RlICpwYXJl
bnROb2RlLCBQUkludDMyIG9mZnNldCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXh0
ZW5kKG5zSURPTU5vZGUgKnBhcmVudE5vZGUsIFBSSW50MzIgb2Zmc2V0KSA9IDA7CgoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBDb2xsYXBzZVRvU3RhcnQodm9pZCkgPSAwOwoKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgQ29sbGFwc2VUb0VuZCh2b2lkKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBDb250YWluc05vZGUobnNJRE9NTm9kZSAqbm9kZSwgUFJCb29sIHJlY3Vyc2l2ZSwgUFJC
b29sICpfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNlbGVjdEFsbENoaWxk
cmVuKG5zSURPTU5vZGUgKnBhcmVudE5vZGUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
QWRkUmFuZ2UobnNJRE9NUmFuZ2UgKnJhbmdlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IFJlbW92ZVJhbmdlKG5zSURPTVJhbmdlICpyYW5nZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBSZW1vdmVBbGxSYW5nZXModm9pZCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBE
ZWxldGVGcm9tRG9jdW1lbnQodm9pZCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
bGVjdGlvbkxhbmd1YWdlQ2hhbmdlKFBSQm9vbCBsYW5nUlRMKSA9IDA7CgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IFRvU3RyaW5nKFBSVW5pY2hhciAqKl9yZXR2YWwpID0gMDsKCn07CiMgNDQgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIgMgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lSZWZsb3dDb21tYW5kLmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVJlZmxvd0NvbW1hbmQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVm
bG93Q29tbWFuZC5oIiAyCiMgMSAiL25ld2xpYi9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDI3ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVmbG93Q29tbWFuZC5oIiAyCgpjbGFzcyBuc0lB
dG9tOwpjbGFzcyBuc0lGcmFtZTsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zSVJlbmRl
cmluZ0NvbnRleHQ7CnN0cnVjdCBuc0hUTUxSZWZsb3dNZXRyaWNzOwpzdHJ1Y3QgbnNTaXplOwoj
IDY1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVmbG93Q29tbWFuZC5oIgpjbGFzcyBu
c0lSZWZsb3dDb21tYW5kIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBj
b25zdCBuc0lJRCYgR2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQgaWlkID0geyAweGMzNjU4ZTQwLCAw
eGZmMjAsIDB4MTFkMSwgezB4ODUsIDB4YmMsIDB4MCwgMHhhMCwgMHgyNCwgMHg2OCwgMHhmYSwg
MHhiNn19OyByZXR1cm4gaWlkOyB9CgogIGVudW0gUmVmbG93VHlwZSB7CgoKCgoKICAgIENvbnRl
bnRDaGFuZ2VkLAoKCgoKCiAgICBTdHlsZUNoYW5nZWQsCgoKCgogICAgUHVsbHVwUmVmbG93LAog
ICAgUHVzaFJlZmxvdywKCgoKCiAgICBDaGVja1B1bGx1cFJlZmxvdywKCgogICAgUmVmbG93RGly
dHksCgoKICAgIFRpbWVvdXQsCgoKICAgIFVzZXJEZWZpbmVkCiAgfTsKIyAxMTIgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lSZWZsb3dDb21tYW5kLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBE
aXNwYXRjaChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAg
ICAgbnNIVE1MUmVmbG93TWV0cmljcyYgYURlc2lyZWRTaXplLAogICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNTaXplJiBhTWF4U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRl
cmluZ0NvbnRleHQmIGFSZW5kQ29udGV4dCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0TmV4dChuc0lGcmFtZSomIGFOZXh0RnJhbWUsIFBSQm9vbCBhUmVtb3ZlID0gMSkgPSAwOwoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRhcmdldChuc0lGcmFtZSomIGFUYXJnZXRGcmFtZSkg
Y29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRhcmdldChuc0lGcmFtZSogYVRh
cmdldEZyYW1lKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZShSZWZsb3dUeXBl
JiBhUmVmbG93VHlwZSkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoaWxk
RnJhbWUobnNJRnJhbWUqJiBhQ2hpbGRGcmFtZSkgY29uc3QgPSAwOwojIDE1MiAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVJlZmxvd0NvbW1hbmQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dENoaWxkTGlzdE5hbWUobnNJQXRvbSomIGFMaXN0TmFtZSkgY29uc3QgPSAwOwoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0Q2hpbGRMaXN0TmFtZShuc0lBdG9tKiBhTGlzdE5hbWUpID0gMDsK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJldlNpYmxpbmdGcmFtZShuc0lGcmFtZSomIGFT
aWJsaW5nRnJhbWUpIGNvbnN0ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBMaXN0KEZJTEUq
IG91dCkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZsYWdzKFBSSW50MzIq
IGFGbGFncykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RmxhZ3MoUFJJbnQzMiBhRmxhZ3Mp
ID0gMDsKfTsKIyA0NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIiAy
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zR1VJRXZlbnQuaCIgMQojIDQ2ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiIDIKCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIgMQojIDI1ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgpjbGFzcyBuc0lTZWxlY3Rp
b247CnR5cGVkZWYgc2hvcnQgU2VsZWN0aW9uVHlwZTsKdHlwZWRlZiBzaG9ydCBTZWxlY3Rpb25S
ZWdpb247CmNsYXNzIG5zSURPTU5vZGU7CiMgMzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lTZWxlY3Rpb25Db250cm9sbGVyLmgiCmNsYXNzIG5zSVNlbGVjdGlvbkNvbnRyb2xsZXIgOiBw
dWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ
RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZDJkMWQxNzksIDB4ODVhNywgMHgxMWQz
LCB7IDB4OTksIDB4MzIsIDB4MDAsIDB4MTAsIDB4ODMsIDB4MDEsIDB4MjMsIDB4M2MgfX07IHJl
dHVybiBpaWQ7fQoKICBlbnVtIHsgU0VMRUNUSU9OX05PTkUgPSAwIH07CgogIGVudW0geyBTRUxF
Q1RJT05fTk9STUFMID0gMSB9OwoKICBlbnVtIHsgU0VMRUNUSU9OX1NQRUxMQ0hFQ0sgPSAyIH07
CgogIGVudW0geyBTRUxFQ1RJT05fSU1FX1JBV0lOUFVUID0gNCB9OwoKICBlbnVtIHsgU0VMRUNU
SU9OX0lNRV9TRUxFQ1RFRFJBV1RFWFQgPSA4IH07CgogIGVudW0geyBTRUxFQ1RJT05fSU1FX0NP
TlZFUlRFRFRFWFQgPSAxNiB9OwoKICBlbnVtIHsgU0VMRUNUSU9OX0lNRV9TRUxFQ1RFRENPTlZF
UlRFRFRFWFQgPSAzMiB9OwoKICBlbnVtIHsgTlVNX1NFTEVDVElPTlRZUEVTID0gNiB9OwoKICBl
bnVtIHsgU0VMRUNUSU9OX0FOQ0hPUl9SRUdJT04gPSAwIH07CgogIGVudW0geyBTRUxFQ1RJT05f
Rk9DVVNfUkVHSU9OID0gMSB9OwoKICBlbnVtIHsgTlVNX1NFTEVDVElPTl9SRUdJT05TID0gMiB9
OwoKICBlbnVtIHsgU0VMRUNUSU9OX09GRiA9IDAgfTsKCiAgZW51bSB7IFNFTEVDVElPTl9ISURE
RU4gPSAxIH07CgogIGVudW0geyBTRUxFQ1RJT05fT04gPSAyIH07CgogIGVudW0geyBTRUxFQ1RJ
T05fRElTQUJMRUQgPSAzIH07CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERpc3BsYXlTZWxl
Y3Rpb24oUFJJbnQxNiB0b2dnbGUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlz
cGxheVNlbGVjdGlvbihQUkludDE2ICpfcmV0dmFsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBTZXREaXNwbGF5Tm9uVGV4dFNlbGVjdGlvbihQUkJvb2wgdG9nZ2xlKSA9IDA7CgoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXNwbGF5Tm9uVGV4dFNlbGVjdGlvbihQUkJvb2wgKl9y
ZXR2YWwpID0gMDsKIyAxMDYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb25D
b250cm9sbGVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxlY3Rpb24oUFJJbnQxNiB0eXBl
LCBuc0lTZWxlY3Rpb24gKipfcmV0dmFsKSA9IDA7CiMgMTE2ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xs
U2VsZWN0aW9uSW50b1ZpZXcoUFJJbnQxNiB0eXBlLCBQUkludDE2IHJlZ2lvbikgPSAwOwoKCgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlcGFpbnRTZWxlY3Rpb24oUFJJbnQxNiB0eXBlKSA9IDA7
CiMgMTM0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2FyZXRFbmFibGVkKFBSQm9vbCBlbmFibGVkKSA9IDA7
CiMgMTQzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2FyZXRXaWR0aChQUkludDE2IHBpeGVscykgPSAwOwoj
IDE1MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldENhcmV0UmVhZE9ubHkoUFJCb29sIHJlYWRPbmx5KSA9IDA7
CiMgMTYxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FyZXRFbmFibGVkKFBSQm9vbCAqX3JldHZhbCkgPSAw
OwojIDE3MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbkNvbnRyb2xsZXIu
aCIKICB2aXJ0dWFsIG5zcmVzdWx0IENoYXJhY3Rlck1vdmUoUFJCb29sIGZvcndhcmQsIFBSQm9v
bCBleHRlbmQpID0gMDsKIyAxODEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rp
b25Db250cm9sbGVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBXb3JkTW92ZShQUkJvb2wgZm9yd2Fy
ZCwgUFJCb29sIGV4dGVuZCkgPSAwOwojIDE5MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IExpbmVNb3ZlKFBSQm9v
bCBmb3J3YXJkLCBQUkJvb2wgZXh0ZW5kKSA9IDA7CiMgMjAyICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW50cmFM
aW5lTW92ZShQUkJvb2wgZm9yd2FyZCwgUFJCb29sIGV4dGVuZCkgPSAwOwojIDIxMiAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IFBhZ2VNb3ZlKFBSQm9vbCBmb3J3YXJkLCBQUkJvb2wgZXh0ZW5kKSA9IDA7CgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IENvbXBsZXRlU2Nyb2xsKFBSQm9vbCBmb3J3YXJkKSA9IDA7CiMg
MjI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VsZWN0aW9uQ29udHJvbGxlci5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgQ29tcGxldGVNb3ZlKFBSQm9vbCBmb3J3YXJkLCBQUkJvb2wgZXh0
ZW5kKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbFBhZ2UoUFJCb29sIGZvcndh
cmQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsTGluZShQUkJvb2wgZm9yd2Fy
ZCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JvbGxIb3Jpem9udGFsKFBSQm9vbCBs
ZWZ0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0QWxsKHZvaWQpID0gMDsKIyAy
NjEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBDaGVja1Zpc2liaWxpdHkobnNJRE9NTm9kZSAqbm9kZSwgUFJJbnQx
NiBzdGFydE9mZnNldCwgUFJJbnQxNiBlbmRPZmZzZXQsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoK
fTsKIyA0OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIiAyCgoKY2xh
c3MgbnNJQ29udGVudDsKY2xhc3MgbnNJQ29udGVudEl0ZXJhdG9yOwpjbGFzcyBuc0lEb2N1bWVu
dDsKY2xhc3MgbnNJRG9jdW1lbnRPYnNlcnZlcjsKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSVBy
ZXNDb250ZXh0OwpjbGFzcyBuc0lTdHlsZVNldDsKY2xhc3MgbnNJVmlld01hbmFnZXI7CmNsYXNz
IG5zSURldmljZUNvbnRleHQ7CmNsYXNzIG5zSVJlbmRlcmluZ0NvbnRleHQ7CmNsYXNzIG5zSVBh
Z2VTZXF1ZW5jZUZyYW1lOwpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNTdHJpbmdBcnJheTsKY2xh
c3MgbnNJQ2FyZXQ7CmNsYXNzIG5zSVN0eWxlQ29udGV4dDsKY2xhc3MgbnNJRnJhbWVTZWxlY3Rp
b247CmNsYXNzIG5zSUZyYW1lTWFuYWdlcjsKY2xhc3MgbnNJTGF5b3V0SGlzdG9yeVN0YXRlOwpj
bGFzcyBuc0lBcmVuYTsKY2xhc3MgbnNJUmVmbG93Q2FsbGJhY2s7CmNsYXNzIG5zSVN1cHBvcnRz
QXJyYXk7CiMgMTA2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiCmVu
dW0gbnNBdHRyaWJ1dGVDaGFuZ2VUeXBlIHsKICBlQ2hhbmdlVHlwZV9TZXQgPSAwLAogIGVDaGFu
Z2VUeXBlX1JlbW92ZSA9IDEKfTsKIyAxMjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQ
cmVzU2hlbGwuaCIKY2xhc3MgbnNJUHJlc1NoZWxsIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVi
bGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQgaWlkID0g
eyAweDc2ZTc5YzYwLCAweDk0NGUsIDB4MTFkMSwgezB4OTMsIDB4MjMsIDB4MDAsIDB4ODAsIDB4
NWYsIDB4OGEsIDB4ZGQsIDB4MzJ9IH07IHJldHVybiBpaWQ7IH0KCiAgdmlydHVhbCBuc3Jlc3Vs
dCBJbml0KG5zSURvY3VtZW50KiBhRG9jdW1lbnQsCiAgICAgICAgICAgICAgICAgIG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgIG5zSVZpZXdNYW5hZ2VyKiBh
Vmlld01hbmFnZXIsCiAgICAgICAgICAgICAgICAgIG5zSVN0eWxlU2V0KiBhU3R5bGVTZXQpID0g
MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZUZyYW1lKHNpemVfdCBhU2l6ZSwgdm9p
ZCoqIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEZyZWVGcmFtZShzaXplX3QgYVNp
emUsIHZvaWQqIGFGcmVlQ2h1bmspID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHVzaFN0YWNr
TWVtb3J5KCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgUG9wU3RhY2tNZW1vcnkoKSA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZVN0YWNrTWVtb3J5KHNpemVfdCBhU2l6ZSwgdm9pZCoq
IGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb2N1bWVudChuc0lEb2N1bWVu
dCoqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVzQ29udGV4dChuc0lQ
cmVzQ29udGV4dCoqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWaWV3TWFu
YWdlcihuc0lWaWV3TWFuYWdlcioqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRTdHlsZVNldChuc0lTdHlsZVNldCoqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRBY3RpdmVBbHRlcm5hdGVTdHlsZVNoZWV0KG5zU3RyaW5nJiBhU2hlZXRUaXRsZSkgPSAw
OwoKICB2aXJ0dWFsIG5zcmVzdWx0IFNlbGVjdEFsdGVybmF0ZVN0eWxlU2hlZXQoY29uc3QgbnNT
dHJpbmcmIGFTaGVldFRpdGxlKSA9IDA7CiMgMTYyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJUHJlc1NoZWxsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQcmVmZXJlbmNlU3R5bGVSdWxl
cyhQUkJvb2wgYUZvcmNlUmVmbG93KSA9IDA7CiMgMTcxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJUHJlc1NoZWxsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmFibGVQcmVmU3R5bGVSdWxl
cyhQUkJvb2wgYUVuYWJsZSwgUFJVaW50OCBhUHJlZlR5cGU9MHhGRikgPSAwOwogIHZpcnR1YWwg
bnNyZXN1bHQgQXJlUHJlZlN0eWxlUnVsZXNFbmFibGVkKFBSQm9vbCYgYUVuYWJsZWQpID0gMDsK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTGlzdEFsdGVybmF0ZVN0eWxlU2hlZXRzKG5zU3RyaW5n
QXJyYXkmIGFUaXRsZUxpc3QpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVT
ZWxlY3Rpb24obnNJRnJhbWVTZWxlY3Rpb24qKiBhU2VsZWN0aW9uKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEJlZ2luT2JzZXJ2aW5nRG9jdW1lbnQoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEVuZE9ic2VydmluZ0RvY3VtZW50KCkgPSAwOwojIDE5OSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdGlhbFJlZmxvdyhu
c2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IFJlc2l6ZVJlZmxvdyhuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgU3R5bGVDaGFuZ2VSZWZsb3coKSA9IDA7CgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0Um9vdEZyYW1lKG5zSUZyYW1lKiogYUZyYW1lKSBjb25zdCA9IDA7CgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhZ2VTZXF1ZW5jZUZyYW1lKG5zSVBhZ2VTZXF1ZW5jZUZy
YW1lKiogYVJlc3VsdCkgY29uc3QgPSAwOwojIDIzNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJpbWFyeUZyYW1lRm9yKG5z
SUNvbnRlbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZy
YW1lKiogYVByaW1hcnlGcmFtZSkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRTdHlsZUNvbnRleHRGb3IobnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqKiBhU3R5bGVDb250ZXh0KSBjb25zdCA9IDA7CgoK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGF5b3V0T2JqZWN0Rm9yKG5zSUNvbnRlbnQqIGFD
b250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiogYVJl
c3VsdCkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdWJTaGVsbEZvcihu
c0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBv
cnRzKiogYVJlc3VsdCkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdWJT
aGVsbEZvcihuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSVN1cHBvcnRzKiBhU3ViU2hlbGwpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
UGxhY2Vob2xkZXJGcmFtZUZvcihuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFQbGFjZWhvbGRlckZyYW1lKSBjb25zdCA9IDA7
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5kUmVmbG93Q29tbWFuZChuc0lSZWZsb3dDb21t
YW5kKiBhUmVmbG93Q29tbWFuZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuY2VsUmVmbG93
Q29tbWFuZChuc0lGcmFtZSogYVRhcmdldEZyYW1lLCBuc0lSZWZsb3dDb21tYW5kOjpSZWZsb3dU
eXBlKiBhQ21kVHlwZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuY2VsQWxsUmVmbG93Q29t
bWFuZHMoKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTYWZlVG9GbHVzaChQUkJv
b2wmIGFJc1NhZmVUb0ZsdXNoKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZsdXNoUGVu
ZGluZ05vdGlmaWNhdGlvbnMoKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUG9zdERPTUV2
ZW50KG5zSUNvbnRlbnQqIGFDb250ZW50LCBuc0V2ZW50KiBhRXZlbnQpPTA7CgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgUG9zdEF0dHJpYnV0ZUNoYW5nZShuc0lDb250ZW50KiBhQ29udGVudCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmFtZVNwYWNlSUQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFOYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1N0cmluZyYgYVZhbHVlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5vdGlmeSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNBdHRyaWJ1dGVDaGFuZ2VUeXBlIGFUeXBlKSA9IDA7CgogIHZpcnR1YWwg
bnNyZXN1bHQgUG9zdFJlZmxvd0NhbGxiYWNrKG5zSVJlZmxvd0NhbGxiYWNrKiBhQ2FsbGJhY2sp
ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IENhbmNlbFJlZmxvd0NhbGxiYWNrKG5zSVJlZmxvd0Nh
bGxiYWNrKiBhQ2FsbGJhY2spID0gMDsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEJlZ2luUmVmbG93
QmF0Y2hpbmcoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBFbmRSZWZsb3dCYXRjaGluZyhQUkJv
b2wgYUZsdXNoUGVuZGluZ1JlZmxvd3MpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlZmxv
d0JhdGNoaW5nU3RhdHVzKFBSQm9vbCogYUlzQmF0Y2hpbmcpID0gMDsKCiAgdmlydHVhbCBuc3Jl
c3VsdCBDbGVhckZyYW1lUmVmcyhuc0lGcmFtZSogYUZyYW1lKSA9IDA7CgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IENyZWF0ZVJlbmRlcmluZ0NvbnRleHQobnNJRnJhbWUgKmFGcmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCoqIGFDb250
ZXh0KSA9IDA7CiMgMzM1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBDYW50UmVuZGVyUmVwbGFjZWRFbGVtZW50KG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSUZyYW1lKiBhRnJhbWUpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdvVG9BbmNo
b3IoY29uc3QgbnNTdHJpbmcmIGFBbmNob3JOYW1lKSA9IDA7CiMgMzczICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JvbGxGcmFt
ZUludG9WaWV3KG5zSUZyYW1lICphRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSSW50biBhVlBlcmNlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
SW50biBhSFBlcmNlbnQpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5vdGlm
eURlc3Ryb3lpbmdGcmFtZShuc0lGcmFtZSogYUZyYW1lKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0RnJhbWVNYW5hZ2VyKG5zSUZyYW1lTWFuYWdlcioqIGFGcmFtZU1hbmFnZXIpIGNv
bnN0ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEb0NvcHkoKSA9IDA7CgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgRG9Db3B5TGlua0xvY2F0aW9uKG5zSURPTU5vZGUqIGFOb2RlKSA9IDA7CgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgRG9Db3B5SW1hZ2VMb2NhdGlvbihuc0lET01Ob2RlKiBhTm9k
ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgRG9Db3B5SW1hZ2VDb250ZW50cyhuc0lET01Ob2Rl
KiBhTm9kZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhcmV0KG5zSUNhcmV0ICoq
YU91dENhcmV0KSA9IDA7CiMgNDE5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc1No
ZWxsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREaXNwbGF5Tm9uVGV4dFNlbGVjdGlvbihQUkJv
b2wgYUluRW5hYmxlKSA9IDA7CiMgNDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJl
c1NoZWxsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXNwbGF5Tm9uVGV4dFNlbGVjdGlvbihQ
UkJvb2wgKmFPdXRFbmFibGVkKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRXZl
bnRXaXRoVGFyZ2V0KG5zRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSVWludDMyIGFGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0V2ZW50U3RhdHVzKiBhU3RhdHVzKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxl
RE9NRXZlbnRXaXRoVGFyZ2V0KG5zSUNvbnRlbnQqIGFUYXJnZXRDb250ZW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNFdmVudCogYUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNFdmVudFN0YXR1cyogYVN0YXR1cykgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldEV2ZW50VGFyZ2V0RnJhbWUobnNJRnJhbWUqKiBhRnJhbWUpID0gMDsKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgQ2FwdHVyZUhpc3RvcnlTdGF0ZShuc0lMYXlvdXRIaXN0b3J5U3RhdGUqKiBh
TGF5b3V0SGlzdG9yeVN0YXRlLCBQUkJvb2wgYUxlYXZpbmdQYWdlID0gMCkgPSAwOwogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0SGlzdG9yeVN0YXRlKG5zSUxheW91dEhpc3RvcnlTdGF0ZSoqIGFMYXlv
dXRIaXN0b3J5U3RhdGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhpc3RvcnlTdGF0ZShu
c0lMYXlvdXRIaXN0b3J5U3RhdGUqIGFMYXlvdXRIaXN0b3J5U3RhdGUpID0gMDsKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgSXNSZWZsb3dMb2NrZWQoUFJCb29sKiBhSXNMb2NrZWQpID0gMDsKIyA0
NzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIKICBlbnVtIEdlbmVy
YXRlZENvbnRlbnRUeXBlIHtCZWZvcmUsIEFmdGVyfTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEdl
bmVyYXRlZENvbnRlbnRJdGVyYXRvcihuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZWRDb250ZW50VHlwZSBhVHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50SXRlcmF0
b3IqKiBhSXRlcmF0b3IpIGNvbnN0ID0gMDsKIyA0ODcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lQcmVzU2hlbGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFub255bW91c0NvbnRlbnRG
b3IobnNJQ29udGVudCogYUNvbnRlbnQsIG5zSVN1cHBvcnRzQXJyYXkqIGFBbm9ueW1vdXNFbGVt
ZW50cykgPSAwOwojIDQ5OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNTaGVsbC5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QW5vbnltb3VzQ29udGVudEZvcihuc0lDb250ZW50KiBh
Q29udGVudCwgbnNJU3VwcG9ydHNBcnJheSoqIGFBbm9ueW1vdXNFbGVtZW50cykgPSAwOwoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBSZWxlYXNlQW5vbnltb3VzQ29udGVudCgpID0gMDsKCiAgZW51
bSBJbnRlcnJ1cHRUeXBlIHtUaW1lb3V0fTsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNlbmRJbnRl
cnJ1cHROb3RpZmljYXRpb25Ubyhuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdFR5cGUgYUludGVycnVwdFR5cGUpID0gMDsK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbmNlbEludGVycnVwdE5vdGlmaWNhdGlvblRvKG5zSUZy
YW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bnRlcnJ1cHRUeXBlIGFJbnRlcnJ1cHRUeXBlKSA9IDA7CiMgNTI1ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJUHJlc1NoZWxsLmgiCiAgc3RhdGljIFBSQm9vbCBHZXRWZXJpZnlSZWZsb3dF
bmFibGUoKTsKCgoKCiAgc3RhdGljIHZvaWQgU2V0VmVyaWZ5UmVmbG93RW5hYmxlKFBSQm9vbCBh
RW5hYmxlZCk7CgoKCgogIHN0YXRpYyBQUkludDMyIEdldFZlcmlmeVJlZmxvd0ZsYWdzKCk7CgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBEdW1wUmVmbG93cygpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0
IENvdW50UmVmbG93cyhjb25zdCBjaGFyICogYU5hbWUsIFBSVWludDMyIGFUeXBlLCBuc0lGcmFt
ZSAqIGFGcmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgUGFpbnRDb3VudChjb25zdCBjaGFy
ICogYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQqIGFS
ZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzQ29udGV4dCAq
IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUgKiBhRnJhbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFDb2xvcikgPSAwOwogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0UGFpbnRGcmFtZUNvdW50KFBSQm9vbCBhT24pID0gMDsKIyA1NzEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIKfTsKCgoKCgpleHRlcm4gbnNyZXN1
bHQKICBOU19OZXdQcmVzU2hlbGwobnNJUHJlc1NoZWxsKiogYUluc3RhbmNlUHRyUmVzdWx0KTsK
IyAzNSAiLi4vLi4vYmFzZS9zcmMvbnNGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVJlZmxvd0NvbW1hbmQuaCIgMQojIDM2ICIuLi8uLi9iYXNlL3NyYy9uc0ZyYW1l
LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVTZWxlY3Rpb24uaCIg
MQojIDMzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVTZWxlY3Rpb24uaCIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDM0ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVTZWxlY3Rpb24uaCIgMgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lGcmFtZS5oIiAxCiMgMzUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGcmFtZVNlbGVjdGlvbi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUZvY3VzVHJhY2tlci5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb2N1
c1RyYWNrZXIuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIg
MQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9jdXNUcmFja2VyLmgiIDIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWUuaCIgMQojIDI5ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRm9jdXNUcmFja2VyLmgiIDIKCgpjbGFzcyBuc0lQcmVzQ29udGV4
dDsKCgoKCgoKCmNsYXNzIG5zSUZvY3VzVHJhY2tlciA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1
YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9
IHsgMHg4MWFjNTFkMSwgMHg5MjNiLCAweDExZDIsIHsgMHg5MSwgMHg4ZiwgMHgwLCAweDgwLCAw
eGM4LCAweGU0LCAweDRkLCAweGI1IH0gfTsgcmV0dXJuIGlpZDsgfQoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBTY3JvbGxGcmFtZUludG9WaWV3KG5zSUZyYW1lICphRnJhbWUpID0gMDsKIyA2MyAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvY3VzVHJhY2tlci5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0UHJpbWFyeUZyYW1lRm9yKG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYVByaW1hcnlGcmFtZSkgY29uc3QgPSAw
OwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJlc0NvbnRleHQobnNJUHJlc0NvbnRleHQg
KiphQ29udGV4dCkgPSAwOwp9OwojIDM2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJh
bWVTZWxlY3Rpb24uaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rp
b24uaCIgMQojIDM3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVTZWxlY3Rpb24u
aCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzU2hlbGwuaCIgMQojIDM4
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVTZWxlY3Rpb24uaCIgMgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIKIyAxICIvbmV3bGliL2luY2x1ZGUvc3RkaW8uaCIg
MSAzCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVN1cHBvcnRzLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRl
bnQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dVSUV2ZW50LmgiIDEKIyAy
OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIgMgojIDEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0FXcml0YWJsZVN0cmluZy5oIiAxCiMgMzAgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiIDIKCgpjbGFzcyBuc0lBdG9tOwpjbGFzcyBuc0lE
b2N1bWVudDsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zVm9pZEFycmF5OwpjbGFzcyBu
c0lET01FdmVudDsKY2xhc3MgbnNJQ29udGVudDsKY2xhc3MgbnNJU3VwcG9ydHNBcnJheTsKY2xh
c3MgbnNJRE9NUmFuZ2U7CmNsYXNzIG5zSVNpemVPZkhhbmRsZXI7CmNsYXNzIG5zSU5vZGVJbmZv
OwojIDUwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIgpjbGFzcyBuc0lD
b250ZW50IDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJ
RCYgR2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQgaWlkID0geyAweDc4MDMwMjIwLCAweDk0NDcsIDB4
MTFkMSwgezB4OTMsIDB4MjMsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzJ9IH07
IHJldHVybiBpaWQ7IH0KCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb2N1bWVudChuc0lEb2N1bWVu
dComIGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREb2N1bWVudChu
c0lEb2N1bWVudCogYURvY3VtZW50LCBQUkJvb2wgYURlZXAsIFBSQm9vbCBhQ29tcGlsZUV2ZW50
SGFuZGxlcnMpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJQ29udGVudCom
IGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQYXJlbnQobnNJQ29u
dGVudCogYVBhcmVudCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWVTcGFjZUlE
KFBSSW50MzImIGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUYWco
bnNJQXRvbSomIGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb2Rl
SW5mbyhuc0lOb2RlSW5mbyomIGFSZXN1bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBDYW5Db250YWluQ2hpbGRyZW4oUFJCb29sJiBhUmVzdWx0KSBjb25zdCA9IDA7CgogIHZpcnR1
YWwgbnNyZXN1bHQgQ2hpbGRDb3VudChQUkludDMyJiBhUmVzdWx0KSBjb25zdCA9IDA7CgogIHZp
cnR1YWwgbnNyZXN1bHQgQ2hpbGRBdChQUkludDMyIGFJbmRleCwgbnNJQ29udGVudComIGFSZXN1
bHQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbmRleE9mKG5zSUNvbnRlbnQqIGFQ
b3NzaWJsZUNoaWxkLCBQUkludDMyJiBhSW5kZXgpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jl
c3VsdCBJbnNlcnRDaGlsZEF0KG5zSUNvbnRlbnQqIGFLaWQsIFBSSW50MzIgYUluZGV4LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5vdGlmeSwgUFJCb29sIGFEZWVwU2V0RG9j
dW1lbnQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXBsYWNlQ2hpbGRBdChuc0lDb250ZW50
KiBhS2lkLCBQUkludDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9v
bCBhTm90aWZ5LCBQUkJvb2wgYURlZXBTZXREb2N1bWVudCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVz
dWx0IEFwcGVuZENoaWxkVG8obnNJQ29udGVudCogYUtpZCwgUFJCb29sIGFOb3RpZnksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRGVlcFNldERvY3VtZW50KSA9IDA7CgogIHZp
cnR1YWwgbnNyZXN1bHQgUmVtb3ZlQ2hpbGRBdChQUkludDMyIGFJbmRleCwgUFJCb29sIGFOb3Rp
ZnkpID0gMDsKIyAxMDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBOb3JtYWxpemVBdHRyaWJ1dGVTdHJpbmcoY29uc3QgbnNBUmVhZGFi
bGVTdHJpbmcmIGFTdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
Tm9kZUluZm8qJiBhTm9kZUluZm8pID0gMDsKIyAxMTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBdHRyaWJ1dGUoUFJJbnQzMiBh
TmFtZVNwYWNlSUQsIG5zSUF0b20qIGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJCb29sIGFOb3RpZnkpID0gMDsKIyAxMzUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lD
b250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBdHRyaWJ1dGUobnNJTm9kZUluZm8qIGFO
b2RlSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmlu
ZyYgYVZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhTm90aWZ5KSA9IDA7
CiMgMTU2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0QXR0cmlidXRlKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0FXcml0YWJsZVN0cmluZyYgYVJlc3VsdCkg
Y29uc3QgPSAwOwojIDE3OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF0dHJpYnV0ZShQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJ
QXRvbSogYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSomIGFQcmVmaXgs
IG5zQVdyaXRhYmxlU3RyaW5nJiBhUmVzdWx0KSBjb25zdCA9IDA7CiMgMTkxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgVW5zZXRBdHRy
aWJ1dGUoUFJJbnQzMiBhTmFtZVNwYWNlSUQsIG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5vdGlmeSkgPSAwOwojIDIwMyAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF0dHJp
YnV0ZU5hbWVBdChQUkludDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUkludDMyJiBhTmFtZVNwYWNlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJQXRvbSomIGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20q
JiBhUHJlZml4KSBjb25zdCA9IDA7CiMgMjE1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
Q29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlQ291bnQoUFJJbnQzMiYg
YUNvdW50UmVzdWx0KSBjb25zdCA9IDA7CiMgMjMyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIq
IGFTaXplciwgUFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IExpc3QoRklMRSogb3V0ID0gc3Rkb3V0LCBQUkludDMyIGFJbmRlbnQgPSAwKSBjb25z
dCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEdW1wQ29udGVudChGSUxFKiBvdXQgPSBz
dGRvdXQsIFBSSW50MzIgYUluZGVudCA9IDAsUFJCb29sIGFEdW1wQWxsPTEpIGNvbnN0ID0gMDsK
IyAyNTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBSYW5nZUFkZChuc0lET01SYW5nZSYgYVJhbmdlKSA9IDA7CiAgdmlydHVhbCBuc3Jl
c3VsdCBSYW5nZVJlbW92ZShuc0lET01SYW5nZSYgYVJhbmdlKSA9IDA7CiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRSYW5nZUxpc3QobnNWb2lkQXJyYXkqJiBhUmVzdWx0KSBjb25zdCA9IDA7CgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRE9NRXZlbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnQqIGFFdmVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSURPTUV2ZW50KiogYURPTUV2ZW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUZsYWdzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNFdmVudFN0YXR1cyogYUV2ZW50U3RhdHVzKSA9IDA7CiMgMjgwICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVu
dElEKFBSVWludDMyKiBhSUQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbnRlbnRJRChQ
UlVpbnQzMiBhSUQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvY3VzKG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUZv
Y3VzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IFNldEJpbmRpbmdQYXJlbnQobnNJQ29udGVudCogYUNvbnRlbnQpID0gMDsKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldEJpbmRpbmdQYXJlbnQobnNJQ29udGVudCoqIGFDb250ZW50KSA9IDA7
Cn07CiMgMzkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIiAy
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiIDEKIyA0MCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiIDIKIyAxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc2xheW91dC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNv
bnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAx
CiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIgMgojIDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NvbG9yLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zQ29vcmQuaCIgMQojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5
bGVDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNNYXJnaW4uaCIg
MQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNSZWN0LmgiIDEKIyAzMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zRm9udC5oIiAxCiMgMzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHls
ZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1ZvaWRBcnJheS5o
IiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1ZvaWRBcnJheS5oIgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0FXcml0YWJsZVN0cmluZy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Zv
aWRBcnJheS5oIiAyCmNsYXNzIG5zSVNpemVPZkhhbmRsZXI7CgoKdHlwZWRlZiBQUkJvb2wgKCog
bnNWb2lkQXJyYXlFbnVtRnVuYykodm9pZCogYUVsZW1lbnQsIHZvaWQgKmFEYXRhKTsKCgpjbGFz
cyBuc1ZvaWRBcnJheSB7CnB1YmxpYzoKICBuc1ZvaWRBcnJheSgpOwogIG5zVm9pZEFycmF5KFBS
SW50MzIgYUNvdW50KTsKICB2aXJ0dWFsIH5uc1ZvaWRBcnJheSgpOwoKICBuc1ZvaWRBcnJheSYg
b3BlcmF0b3I9KGNvbnN0IG5zVm9pZEFycmF5JiBvdGhlcik7CgogIHZvaWQgU2l6ZU9mKG5zSVNp
emVPZkhhbmRsZXIqIGFIYW5kbGVyLCBQUlVpbnQzMiogYVJlc3VsdCkgY29uc3Q7CgogIFBSSW50
MzIgQ291bnQoKSBjb25zdCB7CiAgICByZXR1cm4gbUltcGwgPyBtSW1wbC0+bUNvdW50IDogMDsK
ICB9CgogIHZvaWQqIEVsZW1lbnRBdChQUkludDMyIGFJbmRleCkgY29uc3Q7CiAgdm9pZCogb3Bl
cmF0b3JbXShQUkludDMyIGFJbmRleCkgY29uc3QgeyByZXR1cm4gRWxlbWVudEF0KGFJbmRleCk7
IH0KCiAgUFJJbnQzMiBJbmRleE9mKHZvaWQqIGFQb3NzaWJsZUVsZW1lbnQpIGNvbnN0OwoKICBQ
UkJvb2wgSW5zZXJ0RWxlbWVudEF0KHZvaWQqIGFFbGVtZW50LCBQUkludDMyIGFJbmRleCk7Cgog
IFBSQm9vbCBSZXBsYWNlRWxlbWVudEF0KHZvaWQqIGFFbGVtZW50LCBQUkludDMyIGFJbmRleCk7
CgogIFBSQm9vbCBBcHBlbmRFbGVtZW50KHZvaWQqIGFFbGVtZW50KSB7CiAgICByZXR1cm4gSW5z
ZXJ0RWxlbWVudEF0KGFFbGVtZW50LCBDb3VudCgpKTsKICB9CgogIFBSQm9vbCBSZW1vdmVFbGVt
ZW50KHZvaWQqIGFFbGVtZW50KTsKICBQUkJvb2wgUmVtb3ZlRWxlbWVudEF0KFBSSW50MzIgYUlu
ZGV4KTsKICB2b2lkIENsZWFyKCk7CgogIHZvaWQgQ29tcGFjdCgpOwoKICBQUkJvb2wgRW51bWVy
YXRlRm9yd2FyZHMobnNWb2lkQXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCogYURhdGEpOwogIFBS
Qm9vbCBFbnVtZXJhdGVCYWNrd2FyZHMobnNWb2lkQXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCog
YURhdGEpOwoKcHJvdGVjdGVkOgogIHN0cnVjdCBJbXBsIHsKCgoKCgoKICAgIFBSVWludDMyIG1C
aXRzOwoKCgoKICAgIFBSSW50MzIgbUNvdW50OwoKCgoKICAgIHZvaWQqIG1BcnJheVsxXTsKICB9
OwoKICBJbXBsKiBtSW1wbDsKCiAgZW51bSB7CiAgICBrQXJyYXlPd25lck1hc2sgPSAxIDw8IDMx
LAogICAga0FycmF5U2l6ZU1hc2sgPSB+a0FycmF5T3duZXJNYXNrCiAgfTsKCgoKICBQUkludDMy
IEdldEFycmF5U2l6ZSgpIGNvbnN0OwogIHZvaWQgU2V0QXJyYXlTaXplKFBSSW50MzIgYVNpemUp
OwogIFBSQm9vbCBJc0FycmF5T3duZXIoKSBjb25zdDsKICB2b2lkIFNldEFycmF5T3duZXIoUFJC
b29sIGFPd25lcik7Cgpwcml2YXRlOgoKICBuc1ZvaWRBcnJheShjb25zdCBuc1ZvaWRBcnJheSYg
b3RoZXIpOwp9OwoKCgpjbGFzcyBuc0F1dG9Wb2lkQXJyYXkgOiBwdWJsaWMgbnNWb2lkQXJyYXkg
ewpwdWJsaWM6CiAgbnNBdXRvVm9pZEFycmF5KCk7Cgpwcm90ZWN0ZWQ6CgoKICBlbnVtIHsga0F1
dG9CdWZTaXplID0gOCB9OwogIGNoYXIgbUF1dG9CdWZbc2l6ZW9mKEltcGwpICsgKGtBdXRvQnVm
U2l6ZSAtIDEpICogc2l6ZW9mKHZvaWQqKV07Cn07CgoKY2xhc3MgbnNTdHJpbmc7Cgp0eXBlZGVm
IFBSQm9vbCAoKm5zU3RyaW5nQXJyYXlFbnVtRnVuYykobnNTdHJpbmcmIGFFbGVtZW50LCB2b2lk
ICphRGF0YSk7CgpjbGFzcyBuc1N0cmluZ0FycmF5OiBwcm90ZWN0ZWQgbnNWb2lkQXJyYXkKewpw
dWJsaWM6CiAgbnNTdHJpbmdBcnJheSh2b2lkKTsKICB2aXJ0dWFsIH5uc1N0cmluZ0FycmF5KHZv
aWQpOwoKICBuc1N0cmluZ0FycmF5JiBvcGVyYXRvcj0oY29uc3QgbnNTdHJpbmdBcnJheSYgb3Ro
ZXIpOwoKICB2b2lkIFNpemVPZihuc0lTaXplT2ZIYW5kbGVyKiBhSGFuZGxlciwgUFJVaW50MzIq
IGFSZXN1bHQpIGNvbnN0OwoKICBQUkludDMyIENvdW50KHZvaWQpIGNvbnN0IHsKICAgIHJldHVy
biBuc1ZvaWRBcnJheTo6Q291bnQoKTsKICB9CgogIHZvaWQgU3RyaW5nQXQoUFJJbnQzMiBhSW5k
ZXgsIG5zQVdyaXRhYmxlU3RyaW5nJiBhU3RyaW5nKSBjb25zdDsKICBuc1N0cmluZyogU3RyaW5n
QXQoUFJJbnQzMiBhSW5kZXgpIGNvbnN0OwogIG5zU3RyaW5nKiBvcGVyYXRvcltdKFBSSW50MzIg
YUluZGV4KSBjb25zdCB7IHJldHVybiBTdHJpbmdBdChhSW5kZXgpOyB9CgogIFBSSW50MzIgSW5k
ZXhPZihjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVBvc3NpYmxlU3RyaW5nKSBjb25zdDsKICBQ
UkludDMyIEluZGV4T2ZJZ25vcmVDYXNlKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhUG9zc2li
bGVTdHJpbmcpIGNvbnN0OwoKICBQUkJvb2wgSW5zZXJ0U3RyaW5nQXQoY29uc3QgbnNBUmVhZGFi
bGVTdHJpbmcmIGFTdHJpbmcsIFBSSW50MzIgYUluZGV4KTsKCiAgUFJCb29sIFJlcGxhY2VTdHJp
bmdBdChjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0cmluZywgUFJJbnQzMiBhSW5kZXgpOwoK
ICBQUkJvb2wgQXBwZW5kU3RyaW5nKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU3RyaW5nKSB7
CiAgICByZXR1cm4gSW5zZXJ0U3RyaW5nQXQoYVN0cmluZywgQ291bnQoKSk7CiAgfQoKICBQUkJv
b2wgUmVtb3ZlU3RyaW5nKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU3RyaW5nKTsKICBQUkJv
b2wgUmVtb3ZlU3RyaW5nSWdub3JlQ2FzZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0cmlu
Zyk7CiAgUFJCb29sIFJlbW92ZVN0cmluZ0F0KFBSSW50MzIgYUluZGV4KTsKICB2b2lkIENsZWFy
KHZvaWQpOwoKICB2b2lkIENvbXBhY3Qodm9pZCkgewogICAgbnNWb2lkQXJyYXk6OkNvbXBhY3Qo
KTsKICB9CgogIFBSQm9vbCBFbnVtZXJhdGVGb3J3YXJkcyhuc1N0cmluZ0FycmF5RW51bUZ1bmMg
YUZ1bmMsIHZvaWQqIGFEYXRhKTsKICBQUkJvb2wgRW51bWVyYXRlQmFja3dhcmRzKG5zU3RyaW5n
QXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCogYURhdGEpOwoKcHJpdmF0ZToKCiAgbnNTdHJpbmdB
cnJheShjb25zdCBuc1N0cmluZ0FycmF5JiBvdGhlcik7Cn07CgoKY2xhc3MgbnNDU3RyaW5nOwoK
dHlwZWRlZiBQUkJvb2wgKCpuc0NTdHJpbmdBcnJheUVudW1GdW5jKShuc0NTdHJpbmcmIGFFbGVt
ZW50LCB2b2lkICphRGF0YSk7CgpjbGFzcyBuc0NTdHJpbmdBcnJheTogcHJvdGVjdGVkIG5zVm9p
ZEFycmF5CnsKcHVibGljOgogIG5zQ1N0cmluZ0FycmF5KHZvaWQpOwogIHZpcnR1YWwgfm5zQ1N0
cmluZ0FycmF5KHZvaWQpOwoKICBuc0NTdHJpbmdBcnJheSYgb3BlcmF0b3I9KGNvbnN0IG5zQ1N0
cmluZ0FycmF5JiBvdGhlcik7CgogIHZvaWQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIqIGFIYW5k
bGVyLCBQUlVpbnQzMiogYVJlc3VsdCkgY29uc3Q7CgogIFBSSW50MzIgQ291bnQodm9pZCkgY29u
c3QgewogICAgcmV0dXJuIG5zVm9pZEFycmF5OjpDb3VudCgpOwogIH0KCiAgdm9pZCBDU3RyaW5n
QXQoUFJJbnQzMiBhSW5kZXgsIG5zQ1N0cmluZyYgYUNTdHJpbmcpIGNvbnN0OwogIG5zQ1N0cmlu
ZyogQ1N0cmluZ0F0KFBSSW50MzIgYUluZGV4KSBjb25zdDsKICBuc0NTdHJpbmcqIG9wZXJhdG9y
W10oUFJJbnQzMiBhSW5kZXgpIGNvbnN0IHsgcmV0dXJuIENTdHJpbmdBdChhSW5kZXgpOyB9Cgog
IFBSSW50MzIgSW5kZXhPZihjb25zdCBuc0NTdHJpbmcmIGFQb3NzaWJsZVN0cmluZykgY29uc3Q7
CiAgUFJJbnQzMiBJbmRleE9mSWdub3JlQ2FzZShjb25zdCBuc0NTdHJpbmcmIGFQb3NzaWJsZVN0
cmluZykgY29uc3Q7CgogIFBSQm9vbCBJbnNlcnRDU3RyaW5nQXQoY29uc3QgbnNDU3RyaW5nJiBh
Q1N0cmluZywgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wgUmVwbGFjZUNTdHJpbmdBdChjb25z
dCBuc0NTdHJpbmcmIGFDU3RyaW5nLCBQUkludDMyIGFJbmRleCk7CgogIFBSQm9vbCBBcHBlbmRD
U3RyaW5nKGNvbnN0IG5zQ1N0cmluZyYgYUNTdHJpbmcpIHsKICAgIHJldHVybiBJbnNlcnRDU3Ry
aW5nQXQoYUNTdHJpbmcsIENvdW50KCkpOwogIH0KCiAgUFJCb29sIFJlbW92ZUNTdHJpbmcoY29u
c3QgbnNDU3RyaW5nJiBhQ1N0cmluZyk7CiAgUFJCb29sIFJlbW92ZUNTdHJpbmdJZ25vcmVDYXNl
KGNvbnN0IG5zQ1N0cmluZyYgYUNTdHJpbmcpOwogIFBSQm9vbCBSZW1vdmVDU3RyaW5nQXQoUFJJ
bnQzMiBhSW5kZXgpOwogIHZvaWQgQ2xlYXIodm9pZCk7CgogIHZvaWQgQ29tcGFjdCh2b2lkKSB7
CiAgICBuc1ZvaWRBcnJheTo6Q29tcGFjdCgpOwogIH0KCiAgUFJCb29sIEVudW1lcmF0ZUZvcndh
cmRzKG5zQ1N0cmluZ0FycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKICBQUkJvb2wg
RW51bWVyYXRlQmFja3dhcmRzKG5zQ1N0cmluZ0FycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFE
YXRhKTsKCnByaXZhdGU6CgogIG5zQ1N0cmluZ0FycmF5KGNvbnN0IG5zQ1N0cmluZ0FycmF5JiBv
dGhlcik7Cn07CiMgMzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQu
aCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0eWxlQ29vcmQuaCIgMQojIDM0
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDIKIyAxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVN0cnVjdC5oIiAxCiMgMzUgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1N0eWxlQ29uc3RzLmgiIDEKIyAzNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVN0eWxlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0
eWxlU2V0LmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlU2V0Lmgi
CiMgMSAiL25ld2xpYi9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDI2ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJU3R5bGVTZXQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZVNl
dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5b3V0LmgiIDEKIyAyOCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlU2V0LmgiIDIKCmNsYXNzIG5zSUF0b207
CmNsYXNzIG5zSVN0eWxlUnVsZTsKY2xhc3MgbnNJU3R5bGVTaGVldDsKY2xhc3MgbnNJU3R5bGVD
b250ZXh0OwpjbGFzcyBuc0lTdHlsZVJ1bGVTdXBwbGllcjsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7
CmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lEb2N1bWVudDsKY2xh
c3MgbnNJRnJhbWVNYW5hZ2VyOwpjbGFzcyBuc0lTdXBwb3J0c0FycmF5OwpzdHJ1Y3QgbnNGaW5k
RnJhbWVIaW50OwoKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIg
MQojIDQzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVTZXQuaCIgMgpjbGFzcyBu
c0lTaXplT2ZIYW5kbGVyOwoKY2xhc3MgbnNJQ1NTUHNldWRvQ29tcGFyYXRvcjsKCgoKCiMgMSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDEKIyA1MSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVN0eWxlU2V0LmgiIDIKCgoKCgoKCnR5cGVkZWYgUFJVaW50MzIg
c2NLZXk7CgoKY2xhc3MgbnNJU3R5bGVTZXQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6
CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7IHN0YXRpYyBuc0lJRCBpaWQgPSB7MHhl
NTkzOTZiMCwgMHhiMjQ0LCAweDExZDEsIHsweDgwLCAweDMxLCAweDAwLCAweDYwLCAweDA4LCAw
eDE1LCAweDliLCAweDVhfX07IHJldHVybiBpaWQ7IH0KCgoKICB2aXJ0dWFsIHZvaWQgQXBwZW5k
T3ZlcnJpZGVTdHlsZVNoZWV0KG5zSVN0eWxlU2hlZXQqIGFTaGVldCkgPSAwOwogIHZpcnR1YWwg
dm9pZCBJbnNlcnRPdmVycmlkZVN0eWxlU2hlZXRBZnRlcihuc0lTdHlsZVNoZWV0KiBhU2hlZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlU2hl
ZXQqIGFBZnRlclNoZWV0KSA9IDA7CiAgdmlydHVhbCB2b2lkIEluc2VydE92ZXJyaWRlU3R5bGVT
aGVldEJlZm9yZShuc0lTdHlsZVNoZWV0KiBhU2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZVNoZWV0KiBhQmVmb3JlU2hlZXQpID0gMDsK
ICB2aXJ0dWFsIHZvaWQgUmVtb3ZlT3ZlcnJpZGVTdHlsZVNoZWV0KG5zSVN0eWxlU2hlZXQqIGFT
aGVldCkgPSAwOwogIHZpcnR1YWwgUFJJbnQzMiBHZXROdW1iZXJPZk92ZXJyaWRlU3R5bGVTaGVl
dHMoKSA9IDA7CiAgdmlydHVhbCBuc0lTdHlsZVNoZWV0KiBHZXRPdmVycmlkZVN0eWxlU2hlZXRB
dChQUkludDMyIGFJbmRleCkgPSAwOwoKCiAgdmlydHVhbCB2b2lkIEFkZERvY1N0eWxlU2hlZXQo
bnNJU3R5bGVTaGVldCogYVNoZWV0LCBuc0lEb2N1bWVudCogYURvY3VtZW50KSA9IDA7CiAgdmly
dHVhbCB2b2lkIFJlbW92ZURvY1N0eWxlU2hlZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9IDA7
CiAgdmlydHVhbCBQUkludDMyIEdldE51bWJlck9mRG9jU3R5bGVTaGVldHMoKSA9IDA7CiAgdmly
dHVhbCBuc0lTdHlsZVNoZWV0KiBHZXREb2NTdHlsZVNoZWV0QXQoUFJJbnQzMiBhSW5kZXgpID0g
MDsKCiAgdmlydHVhbCB2b2lkIEFwcGVuZEJhY2tzdG9wU3R5bGVTaGVldChuc0lTdHlsZVNoZWV0
KiBhU2hlZXQpID0gMDsKICB2aXJ0dWFsIHZvaWQgSW5zZXJ0QmFja3N0b3BTdHlsZVNoZWV0QWZ0
ZXIobnNJU3R5bGVTaGVldCogYVNoZWV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lTdHlsZVNoZWV0KiBhQWZ0ZXJTaGVldCkgPSAwOwogIHZpcnR1YWwg
dm9pZCBJbnNlcnRCYWNrc3RvcFN0eWxlU2hlZXRCZWZvcmUobnNJU3R5bGVTaGVldCogYVNoZWV0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVT
aGVldCogYUJlZm9yZVNoZWV0KSA9IDA7CiAgdmlydHVhbCB2b2lkIFJlbW92ZUJhY2tzdG9wU3R5
bGVTaGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQpID0gMDsKICB2aXJ0dWFsIFBSSW50MzIgR2V0
TnVtYmVyT2ZCYWNrc3RvcFN0eWxlU2hlZXRzKCkgPSAwOwogIHZpcnR1YWwgbnNJU3R5bGVTaGVl
dCogR2V0QmFja3N0b3BTdHlsZVNoZWV0QXQoUFJJbnQzMiBhSW5kZXgpID0gMDsKICB2aXJ0dWFs
IHZvaWQgUmVwbGFjZUJhY2tzdG9wU3R5bGVTaGVldHMobnNJU3VwcG9ydHNBcnJheSogYU5ld1No
ZWV0cykgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW5hYmxlUXVpcmtTdHlsZVNoZWV0KFBS
Qm9vbCBhRW5hYmxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5vdGlmeVN0eWxlU2hlZXRT
dGF0ZUNoYW5nZWQoUFJCb29sIGFEaXNhYmxlZCkgPSAwOwoKCiAgdmlydHVhbCBuc0lTdHlsZUNv
bnRleHQqIFJlc29sdmVTdHlsZUZvcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNvbnRl
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNv
bnRleHQqIGFQYXJlbnRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJCb29sIGFGb3JjZVVuaXF1ZSA9IDApID0gMDsKCgogIHZpcnR1YWwgbnNJU3R5
bGVDb250ZXh0KiBSZXNvbHZlUHNldWRvU3R5bGVGb3IobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUNvbnRlbnQqIGFQYXJlbnRDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVBzZXVkb1RhZywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UkJvb2wgYUZvcmNlVW5pcXVlID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUNTU1BzZXVkb0NvbXBhcmF0b3IqIGFDb21wYXJhdG9yID0gMCkg
PSAwOwoKCgoKICB2aXJ0dWFsIG5zSVN0eWxlQ29udGV4dCogUHJvYmVQc2V1ZG9TdHlsZUZvcihu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFQYXJlbnRDb250ZW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UYWcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVD
b250ZXh0KiBhUGFyZW50Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUkJvb2wgYUZvcmNlVW5pcXVlID0gMCkgPSAwOwoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgUmVQYXJlbnRTdHlsZUNvbnRleHQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFT
dHlsZUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVD
b250ZXh0KiBhTmV3UGFyZW50Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lTdHlsZUNvbnRleHQqKiBhTmV3U3R5bGVDb250ZXh0KSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEhhc1N0YXRlRGVwZW5kZW50U3R5bGUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFD
b250ZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnN0cnVjdFJvb3RGcmFtZShuc0lQ
cmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lDb250ZW50KiBhRG9jRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJRnJhbWUqJiBhRnJhbWVTdWJUcmVlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
UmVjb25zdHJ1Y3REb2NFbGVtZW50SGllcmFyY2h5KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl
eHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudEFwcGVuZGVkKG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVu
dCogYUNvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFOZXdJ
bmRleEluQ29udGFpbmVyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBDb250ZW50SW5zZXJ0ZWQo
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lDb250ZW50KiBhQ29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUNvbnRlbnQqIGFDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFJ
bmRleEluQ29udGFpbmVyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBDb250ZW50UmVwbGFjZWQo
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lDb250ZW50KiBhQ29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUNvbnRlbnQqIGFPbGRDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250
ZW50KiBhTmV3Q2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSW5k
ZXhJbkNvbnRhaW5lcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudFJlbW92ZWQobnNJ
UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUNvbnRlbnQqIGFDb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250
ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFJbmRleElu
Q29udGFpbmVyKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudENoYW5nZWQobnNJUHJl
c0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNv
bnRlbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMq
IGFTdWJDb250ZW50KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBDb250ZW50U3RhdGVzQ2hhbmdl
ZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQ29udGVudCogYUNvbnRlbnQxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQ29udGVudCogYUNvbnRlbnQyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBB
dHRyaWJ1dGVDaGFuZ2VkKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDaGlsZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJJbnQzMiBhTmFtZVNwYWNlSUQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBSSW50MzIgYUhpbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3R5bGVSdWxlQ2hhbmdl
ZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lTdHlsZVNoZWV0KiBhU3R5bGVTaGVldCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJU3R5bGVSdWxlKiBhU3R5bGVSdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkludDMyIGFIaW50KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTdHlsZVJ1bGVBZGRl
ZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJU3R5bGVTaGVldCogYVN0eWxlU2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lTdHlsZVJ1bGUqIGFTdHlsZVJ1bGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFN0eWxl
UnVsZVJlbW92ZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJU3R5bGVTaGVldCogYVN0eWxlU2hlZXQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSVN0eWxlUnVsZSogYVN0eWxlUnVsZSkgPSAwOwoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgQ2FudFJlbmRlclJlcGxhY2VkRWxlbWVudChuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lG
cmFtZSogYUZyYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUNvbnRpbnVpbmdG
cmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJRnJhbWUqIGFQYXJlbnRGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lGcmFtZSoqIGFDb250aW51aW5nRnJhbWUpID0gMDsKIyAyMTAgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZVNldC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRmlu
ZFByaW1hcnlGcmFtZUZvcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZU1hbmFnZXIqIGFGcmFtZU1hbmFnZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFGcmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNGaW5kRnJhbWVIaW50KiBhSGludD0wKSA9IDA7CgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdHlsZVJ1bGVTdXBwbGllcihuc0lTdHlsZVJ1bGVTdXBw
bGllciogYVN1cHBsaWVyKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVSdWxlU3VwcGxp
ZXIobnNJU3R5bGVSdWxlU3VwcGxpZXIqKiBhU3VwcGxpZXIpPTA7CgogIHZpcnR1YWwgdm9pZCBM
aXN0KEZJTEUqIG91dCA9IHN0ZG91dCwgUFJJbnQzMiBhSW5kZW50ID0gMCkgPSAwOwogIHZpcnR1
YWwgdm9pZCBMaXN0Q29udGV4dHMobnNJU3R5bGVDb250ZXh0KiBhUm9vdENvbnRleHQsIEZJTEUq
IG91dCA9IHN0ZG91dCwgUFJJbnQzMiBhSW5kZW50ID0gMCkgPSAwOwoKICB2aXJ0dWFsIHZvaWQg
U2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIgKmFTaXplb2ZIYW5kbGVyLCBQUlVpbnQzMiAmYVNpemUp
ID0gMDsKICB2aXJ0dWFsIHZvaWQgUmVzZXRVbmlxdWVTdHlsZUl0ZW1zKHZvaWQpID0gMDsKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEF0dHJpYnV0ZUFmZmVjdHNTdHlsZShuc0lBdG9tICphQXR0cmli
dXRlLCBuc0lDb250ZW50ICphQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkJvb2wgJmFBZmZlY3RzKSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRTdHls
ZUNvbnRleHQobnNJU3R5bGVDb250ZXh0ICphTmV3U3R5bGVDb250ZXh0KSA9IDA7CiAgdmlydHVh
bCBuc3Jlc3VsdCBSZW1vdmVTdHlsZUNvbnRleHQobnNJU3R5bGVDb250ZXh0ICphTmV3U3R5bGVD
b250ZXh0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZpbmRNYXRjaGluZ0NvbnRleHQobnNJ
U3R5bGVDb250ZXh0ICphU3R5bGVDb250ZXh0VG9NYXRjaCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0ICoqYU1hdGNoaW5nQ29udGV4dCkgPSAwOwogIHZp
cnR1YWwgbnNyZXN1bHQgVXBkYXRlU3R5bGVDb250ZXh0S2V5KHNjS2V5IGFPbGRLZXksIHNjS2V5
IGFOZXdLZXkpID0gMDsKCn07CgpleHRlcm4gbnNyZXN1bHQKICBOU19OZXdTdHlsZVNldChuc0lT
dHlsZVNldCoqIGFJbnN0YW5jZVB0clJlc3VsdCk7CgoKY2xhc3MgbnNVbmlxdWVTdHlsZUl0ZW1z
IDogcHJpdmF0ZSBuc1ZvaWRBcnJheQp7CnB1YmxpYyA6CgogIHN0YXRpYyBuc1VuaXF1ZVN0eWxl
SXRlbXMgKkdldFVuaXF1ZVN0eWxlSXRlbXMoIHZvaWQgKXsKICAgIGlmKG1JbnN0YW5jZSA9PSAw
KXsKCiAgICAgIG5zVW5pcXVlU3R5bGVJdGVtcyAqcEluc3RhbmNlID0KCiAgICAgIG5ldyBuc1Vu
aXF1ZVN0eWxlSXRlbXM7CgogICAgICBpZiAoIShwSW5zdGFuY2UgPT0gbUluc3RhbmNlKSkgbnNE
ZWJ1Zzo6QXNzZXJ0aW9uKCJTaW5nbGV0b24/IiwgInBJbnN0YW5jZSA9PSBtSW5zdGFuY2UiLCAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlU2V0LmgiLCAyNTkpOwoKCgogICAgfQog
ICAgcmV0dXJuIG1JbnN0YW5jZTsKICB9CgogIHZvaWQgKkdldEl0ZW0odm9pZCAqYVB0cil7CiAg
ICBQUkludDMyIGluZGV4ID0gbnNWb2lkQXJyYXk6OkluZGV4T2YoYVB0cik7CiAgICBpZiggaW5k
ZXggIT0gLTEpewogICAgICByZXR1cm4gbnNWb2lkQXJyYXk6OkVsZW1lbnRBdChpbmRleCk7CiAg
ICB9IGVsc2UgewogICAgICByZXR1cm4gMDsKICAgIH0KICB9CgogIFBSQm9vbCBBZGRJdGVtKHZv
aWQgKmFQdHIpewogICAgaWYobnNWb2lkQXJyYXk6OkluZGV4T2YoYVB0cikgPT0gLTEpewogICAg
ICByZXR1cm4gbnNWb2lkQXJyYXk6OkFwcGVuZEVsZW1lbnQoYVB0cik7CiAgICB9IGVsc2Ugewog
ICAgICByZXR1cm4gMDsKICAgIH0KICB9CgogIFBSQm9vbCBSZW1vdmVJdGVtKHZvaWQgKmFQdHIp
ewogICAgcmV0dXJuIG5zVm9pZEFycmF5OjpSZW1vdmVFbGVtZW50KGFQdHIpOwogIH0KCiAgUFJJ
bnQzMiBDb3VudCh2b2lkKXsKICAgIHJldHVybiBuc1ZvaWRBcnJheTo6Q291bnQoKTsKICB9Cgog
IHZvaWQgQ2xlYXIodm9pZCl7CiAgICBuc1ZvaWRBcnJheTo6Q2xlYXIoKTsKICB9CnByb3RlY3Rl
ZDoKCiAgbnNVbmlxdWVTdHlsZUl0ZW1zKCBjb25zdCBuc1VuaXF1ZVN0eWxlSXRlbXMmIHNyYyk7
CiAgbnNVbmlxdWVTdHlsZUl0ZW1zJiBvcGVyYXRvciA9KGNvbnN0IG5zVW5pcXVlU3R5bGVJdGVt
cyYgc3JjKTsKCgogIG5zVW5pcXVlU3R5bGVJdGVtcyh2b2lkKSA6IG5zVm9pZEFycmF5KCl7CiAg
ICBpZiAoIShtSW5zdGFuY2UgPT0gMCkpIG5zRGVidWc6OkFzc2VydGlvbigic2luZ2xldG9uPyIs
ICJtSW5zdGFuY2UgPT0gbnNudWxsIiwgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHls
ZVNldC5oIiwgMzAyKTsKICAgIG1JbnN0YW5jZT10aGlzOwogIH0KCiAgc3RhdGljIG5zVW5pcXVl
U3R5bGVJdGVtcyAqbUluc3RhbmNlOwp9OwojIDMxNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVN0eWxlU2V0LmgiCnN0cnVjdCBuc0ZpbmRGcmFtZUhpbnQKewogIG5zSUZyYW1lICptUHJp
bWFyeUZyYW1lRm9yUHJldlNpYmxpbmc7CiAgbnNGaW5kRnJhbWVIaW50KCkgewogICAgbVByaW1h
cnlGcmFtZUZvclByZXZTaWJsaW5nID0gMDsKICB9Owp9OwojIDM3ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNDT01QdHIuaCIgMQojIDM4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVD
b250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTGFuZ3VhZ2VBdG9t
LmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxhbmd1YWdlQXRvbS5oIgpj
bGFzcyBuc0lMYW5ndWFnZUF0b20gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBz
dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4
YTZjZjkxMWUsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYs
IDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRMYW5ndWFnZShQUlVuaWNoYXIgKiAqYUxhbmd1YWdlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldExhbmd1YWdlR3JvdXAobnNJQXRvbSAqICphTGFuZ3VhZ2VHcm91cCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBMYW5ndWFnZUlzKGNvbnN0IFBSVW5pY2hhciAqYUxhbmd1YWdlLCBQ
UkJvb2wgKl9yZXR2YWwpID0gMDsKCn07CiMgMzkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lTdHlsZUNvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFt
ZS5oIiAxCiMgNDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIg
MgoKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKCmNsYXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lQcmVz
Q29udGV4dDsKY2xhc3MgbnNJU3VwcG9ydHNBcnJheTsKY2xhc3MgbnNJU3R5bGVDb250ZXh0OwoK
CmlubGluZSB2b2lkIENhbGNTaWRlc0Zvcihjb25zdCBuc0lGcmFtZSogYUZyYW1lLCBjb25zdCBu
c1N0eWxlU2lkZXMmIGFTaWRlcywKICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDggYVNw
YWNpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc2Nvb3JkKiBhRW51bVRhYmxl
LCBQUkludDMyIGFOdW1FbnVtcywKICAgICAgICAgICAgICAgICAgICAgICAgIG5zTWFyZ2luJiBh
UmVzdWx0KTsKCgoKCgoKc3RydWN0IG5zU3R5bGVGb250IDogcHVibGljIG5zU3R5bGVTdHJ1Y3Qg
ewogIG5zU3R5bGVGb250KHZvaWQpCiAgICA6IG1Gb250KDAsIDAsIDAsCiAgICAgICAgICAgIDQw
MCwgMHgwLCAwKSwKICAgICAgbUZpeGVkRm9udCgwLCAwLCAwLAogICAgICAgICAgICAgICAgIDQw
MCwgMHgwLCAwKQogICAge30KICB+bnNTdHlsZUZvbnQodm9pZCkge307CgogIG5zRm9udCBtRm9u
dDsKICBuc0ZvbnQgbUZpeGVkRm9udDsKICBQUlVpbnQ4IG1GbGFnczsKCnByb3RlY3RlZDoKICBu
c1N0eWxlRm9udChjb25zdCBuc0ZvbnQmIGFWYXJpYWJsZUZvbnQsIGNvbnN0IG5zRm9udCYgYUZp
eGVkRm9udCk7CiAgbnNTdHlsZUZvbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7Cn07
CgpzdHJ1Y3QgbnNTdHlsZUNvbG9yIDogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVD
b2xvcih2b2lkKSB7fQogIH5uc1N0eWxlQ29sb3Iodm9pZCkge30KCiAgbnNjb2xvciBtQ29sb3I7
CgogIFBSVWludDggbUJhY2tncm91bmRBdHRhY2htZW50OwogIFBSVWludDggbUJhY2tncm91bmRG
bGFnczsKICBQUlVpbnQ4IG1CYWNrZ3JvdW5kUmVwZWF0OwoKICBuc2NvbG9yIG1CYWNrZ3JvdW5k
Q29sb3I7CiAgbnNjb29yZCBtQmFja2dyb3VuZFhQb3NpdGlvbjsKICBuc2Nvb3JkIG1CYWNrZ3Jv
dW5kWVBvc2l0aW9uOwogIG5zU3RyaW5nIG1CYWNrZ3JvdW5kSW1hZ2U7CgogIFBSVWludDggbUN1
cnNvcjsKICBuc1N0cmluZyBtQ3Vyc29ySW1hZ2U7CiAgZmxvYXQgbU9wYWNpdHk7CgogIFBSQm9v
bCBCYWNrZ3JvdW5kSXNUcmFuc3BhcmVudCgpIGNvbnN0IHtyZXR1cm4gKG1CYWNrZ3JvdW5kRmxh
Z3MgJgogICAgKDB4MDEgfCAweDAyKSkgPT0KICAgICgweDAxIHwgMHgwMik7fQp9OwojIDExMSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIgpzdHJ1Y3QgbnNTdHls
ZU1hcmdpbjogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVNYXJnaW4odm9pZCkge307
CiAgfm5zU3R5bGVNYXJnaW4odm9pZCkge307CgogIG5zU3R5bGVTaWRlcyBtTWFyZ2luOwoKICBQ
UkJvb2wgR2V0TWFyZ2luKG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdAogIHsKICAgIGlmIChtSGFz
Q2FjaGVkTWFyZ2luKSB7CiAgICAgIGFNYXJnaW4gPSBtQ2FjaGVkTWFyZ2luOwogICAgICByZXR1
cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCgogIHZvaWQgQ2FsY01hcmdpbkZvcihjb25z
dCBuc0lGcmFtZSogYUZyYW1lLCBuc01hcmdpbiYgYU1hcmdpbikgY29uc3QKICB7CiAgICBpZiAo
bUhhc0NhY2hlZE1hcmdpbikgewogICAgICBhTWFyZ2luID0gbUNhY2hlZE1hcmdpbjsKICAgIH0g
ZWxzZSB7CiAgICAgIENhbGNTaWRlc0ZvcihhRnJhbWUsIG1NYXJnaW4sIDAsIDAsIDAsIGFNYXJn
aW4pOwogICAgfQogIH0KCnByb3RlY3RlZDoKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZE1hcmdp
bjsKICBuc01hcmdpbiBtQ2FjaGVkTWFyZ2luOwp9OwoKCnN0cnVjdCBuc1N0eWxlUGFkZGluZzog
cHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVQYWRkaW5nKHZvaWQpIHt9OwogIH5uc1N0
eWxlUGFkZGluZyh2b2lkKSB7fTsKCiAgbnNTdHlsZVNpZGVzIG1QYWRkaW5nOwoKICBQUkJvb2wg
R2V0UGFkZGluZyhuc01hcmdpbiYgYVBhZGRpbmcpIGNvbnN0CiAgewogICAgaWYgKG1IYXNDYWNo
ZWRQYWRkaW5nKSB7CiAgICAgIGFQYWRkaW5nID0gbUNhY2hlZFBhZGRpbmc7CiAgICAgIHJldHVy
biAxOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKCiAgdm9pZCBDYWxjUGFkZGluZ0Zvcihjb25z
dCBuc0lGcmFtZSogYUZyYW1lLCBuc01hcmdpbiYgYVBhZGRpbmcpIGNvbnN0CiAgewogICAgaWYg
KG1IYXNDYWNoZWRQYWRkaW5nKSB7CiAgICAgIGFQYWRkaW5nID0gbUNhY2hlZFBhZGRpbmc7CiAg
ICB9IGVsc2UgewogICAgICBDYWxjU2lkZXNGb3IoYUZyYW1lLCBtUGFkZGluZywgMSwgMCwgMCwg
YVBhZGRpbmcpOwogICAgfQogIH0KCnByb3RlY3RlZDoKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hl
ZFBhZGRpbmc7CiAgbnNNYXJnaW4gbUNhY2hlZFBhZGRpbmc7Cn07CgoKc3RydWN0IG5zU3R5bGVC
b3JkZXI6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlQm9yZGVyKHZvaWQpIHt9Owog
IH5uc1N0eWxlQm9yZGVyKHZvaWQpIHt9OwoKICBuc1N0eWxlU2lkZXMgbUJvcmRlcjsKICBuc1N0
eWxlU2lkZXMgbUJvcmRlclJhZGl1czsKICBQUlVpbnQ4IG1GbG9hdEVkZ2U7CgogIFBSQm9vbCBH
ZXRCb3JkZXIobnNNYXJnaW4mIGFCb3JkZXIpIGNvbnN0CiAgewogICAgaWYgKG1IYXNDYWNoZWRC
b3JkZXIpIHsKICAgICAgYUJvcmRlciA9IG1DYWNoZWRCb3JkZXI7CiAgICAgIHJldHVybiAxOwog
ICAgfQogICAgcmV0dXJuIDA7CiAgfQoKICBQUlVpbnQ4IEdldEJvcmRlclN0eWxlKFBSVWludDgg
YVNpZGUpIGNvbnN0CiAgewogICAgaWYgKCEoYVNpZGUgPD0gMykpIG5zRGVidWc6OkFzc2VydGlv
bigiYmFkIHNpZGUiLCAiYVNpZGUgPD0gTlNfU0lERV9MRUZUIiwgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIsIDE5Mik7CiAgICByZXR1cm4gKG1Cb3JkZXJTdHls
ZVthU2lkZV0gJiAweDNGKTsKICB9CgogIHZvaWQgU2V0Qm9yZGVyU3R5bGUoUFJVaW50OCBhU2lk
ZSwgUFJVaW50OCBhU3R5bGUpCiAgewogICAgaWYgKCEoYVNpZGUgPD0gMykpIG5zRGVidWc6OkFz
c2VydGlvbigiYmFkIHNpZGUiLCAiYVNpZGUgPD0gTlNfU0lERV9MRUZUIiwgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIsIDE5OCk7CiAgICBtQm9yZGVyU3R5bGVb
YVNpZGVdICY9IH4weDNGOwogICAgbUJvcmRlclN0eWxlW2FTaWRlXSB8PSAoYVN0eWxlICYgMHgz
Rik7CgogIH0KCgogIFBSQm9vbCBHZXRCb3JkZXJDb2xvcihQUlVpbnQ4IGFTaWRlLCBuc2NvbG9y
JiBhQ29sb3IpIGNvbnN0CiAgewogICAgaWYgKCEoYVNpZGUgPD0gMykpIG5zRGVidWc6OkFzc2Vy
dGlvbigiYmFkIHNpZGUiLCAiYVNpZGUgPD0gTlNfU0lERV9MRUZUIiwgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIsIDIwNyk7CiAgICBpZiAoKG1Cb3JkZXJTdHls
ZVthU2lkZV0gJiAweDQwKSA9PSAwKSB7CiAgICAgIGFDb2xvciA9IG1Cb3JkZXJDb2xvclthU2lk
ZV07CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKICB2b2lkIFNldEJv
cmRlckNvbG9yKFBSVWludDggYVNpZGUsIG5zY29sb3IgYUNvbG9yKQogIHsKICAgIGlmICghKGFT
aWRlIDw9IDMpKSBuc0RlYnVnOjpBc3NlcnRpb24oImJhZCBzaWRlIiwgImFTaWRlIDw9IE5TX1NJ
REVfTEVGVCIsICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiLCAy
MTcpOwogICAgbUJvcmRlckNvbG9yW2FTaWRlXSA9IGFDb2xvcjsKICAgIG1Cb3JkZXJTdHlsZVth
U2lkZV0gJj0gfjB4NDA7CiAgICBtQm9yZGVyU3R5bGVbYVNpZGVdIHw9IDB4ODA7CiAgfQoKICB2
b2lkIFNldEJvcmRlclRyYW5zcGFyZW50KFBSVWludDggYVNpZGUpCiAgewogICAgaWYgKCEoYVNp
ZGUgPD0gMykpIG5zRGVidWc6OkFzc2VydGlvbigiYmFkIHNpZGUiLCAiYVNpZGUgPD0gTlNfU0lE
RV9MRUZUIiwgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZUNvbnRleHQuaCIsIDIy
NSk7CiAgICBtQm9yZGVyU3R5bGVbYVNpZGVdIHw9ICgweDgwIHwgMHg0MCk7CiAgfQoKICB2b2lk
IFVuc2V0Qm9yZGVyQ29sb3IoUFJVaW50OCBhU2lkZSkKICB7CiAgICBpZiAoIShhU2lkZSA8PSAz
KSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJiYWQgc2lkZSIsICJhU2lkZSA8PSBOU19TSURFX0xFRlQi
LCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlQ29udGV4dC5oIiwgMjMxKTsKICAg
IG1Cb3JkZXJTdHlsZVthU2lkZV0gJj0gMHgzRjsKICB9CgoKICB2b2lkIENhbGNCb3JkZXJGb3Io
Y29uc3QgbnNJRnJhbWUqIGFGcmFtZSwgbnNNYXJnaW4mIGFCb3JkZXIpIGNvbnN0CiAgewogICAg
aWYgKG1IYXNDYWNoZWRCb3JkZXIpIHsKICAgICAgYUJvcmRlciA9IG1DYWNoZWRCb3JkZXI7CiAg
ICB9IGVsc2UgewogICAgICBDYWxjU2lkZXNGb3IoYUZyYW1lLCBtQm9yZGVyLCAyLCBtQm9yZGVy
V2lkdGhzLCAzLCBhQm9yZGVyKTsKICAgIH0KICB9Cgpwcm90ZWN0ZWQ6CiAgUFJQYWNrZWRCb29s
IG1IYXNDYWNoZWRCb3JkZXI7CiAgbnNNYXJnaW4gbUNhY2hlZEJvcmRlcjsKCiAgUFJVaW50OCBt
Qm9yZGVyU3R5bGVbNF07CiAgbnNjb2xvciBtQm9yZGVyQ29sb3JbNF07CgoKICBuc2Nvb3JkIG1C
b3JkZXJXaWR0aHNbM107Cn07CgoKc3RydWN0IG5zU3R5bGVCb3JkZXJQYWRkaW5nOiBwdWJsaWMg
bnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZUJvcmRlclBhZGRpbmcodm9pZCkgeyBtSGFzQ2FjaGVk
Qm9yZGVyUGFkZGluZyA9IDA7IH07CiAgfm5zU3R5bGVCb3JkZXJQYWRkaW5nKHZvaWQpIHt9OwoK
ICBQUkJvb2wgR2V0Qm9yZGVyUGFkZGluZyhuc01hcmdpbiYgYUJvcmRlclBhZGRpbmcpIGNvbnN0
IHsKICAgIGlmIChtSGFzQ2FjaGVkQm9yZGVyUGFkZGluZykgewogICAgICBhQm9yZGVyUGFkZGlu
ZyA9IG1DYWNoZWRCb3JkZXJQYWRkaW5nOwogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVy
biAwOwogIH0KCiAgdm9pZCBTZXRCb3JkZXJQYWRkaW5nKG5zTWFyZ2luIGFCb3JkZXJQYWRkaW5n
KSB7CiAgICBtQ2FjaGVkQm9yZGVyUGFkZGluZyA9IGFCb3JkZXJQYWRkaW5nOwogICAgbUhhc0Nh
Y2hlZEJvcmRlclBhZGRpbmcgPSAxOwogIH0KCnByb3RlY3RlZDoKICBuc01hcmdpbiBtQ2FjaGVk
Qm9yZGVyUGFkZGluZzsKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZEJvcmRlclBhZGRpbmc7Cn07
CgoKc3RydWN0IG5zU3R5bGVPdXRsaW5lOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHls
ZU91dGxpbmUodm9pZCkge307CiAgfm5zU3R5bGVPdXRsaW5lKHZvaWQpIHt9OwoKICBuc1N0eWxl
U2lkZXMgbU91dGxpbmVSYWRpdXM7CgoKICBuc1N0eWxlQ29vcmQgbU91dGxpbmVXaWR0aDsKCiAg
UFJCb29sIEdldE91dGxpbmVXaWR0aChuc2Nvb3JkJiBhV2lkdGgpIGNvbnN0CiAgewogICAgaWYg
KG1IYXNDYWNoZWRPdXRsaW5lKSB7CiAgICAgIGFXaWR0aCA9IG1DYWNoZWRPdXRsaW5lV2lkdGg7
CiAgICAgIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKICBQUlVpbnQ4IEdldE91
dGxpbmVTdHlsZSh2b2lkKSBjb25zdAogIHsKICAgIHJldHVybiAobU91dGxpbmVTdHlsZSAmIDB4
M0YpOwogIH0KCiAgdm9pZCBTZXRPdXRsaW5lU3R5bGUoUFJVaW50OCBhU3R5bGUpCiAgewogICAg
bU91dGxpbmVTdHlsZSAmPSB+MHgzRjsKICAgIG1PdXRsaW5lU3R5bGUgfD0gKGFTdHlsZSAmIDB4
M0YpOwogIH0KCgogIFBSQm9vbCBHZXRPdXRsaW5lQ29sb3IobnNjb2xvciYgYUNvbG9yKSBjb25z
dAogIHsKICAgIGlmICgobU91dGxpbmVTdHlsZSAmIDB4NDApID09IDApIHsKICAgICAgYUNvbG9y
ID0gbU91dGxpbmVDb2xvcjsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gMDsKICB9
CgogIHZvaWQgU2V0T3V0bGluZUNvbG9yKG5zY29sb3IgYUNvbG9yKQogIHsKICAgIG1PdXRsaW5l
Q29sb3IgPSBhQ29sb3I7CiAgICBtT3V0bGluZVN0eWxlICY9IH4weDQwOwogICAgbU91dGxpbmVT
dHlsZSB8PSAweDgwOwogIH0KCiAgdm9pZCBTZXRPdXRsaW5lSW52ZXJ0KHZvaWQpCiAgewogICAg
bU91dGxpbmVTdHlsZSB8PSAoMHg4MCB8IDB4NDApOwogIH0KCnByb3RlY3RlZDoKICBQUlBhY2tl
ZEJvb2wgbUhhc0NhY2hlZE91dGxpbmU7CiAgbnNjb29yZCBtQ2FjaGVkT3V0bGluZVdpZHRoOwoK
ICBQUlVpbnQ4IG1PdXRsaW5lU3R5bGU7CiAgbnNjb2xvciBtT3V0bGluZUNvbG9yOwoKCiAgbnNj
b29yZCBtQm9yZGVyV2lkdGhzWzNdOwp9OwoKCnN0cnVjdCBuc1N0eWxlTGlzdCA6IHB1YmxpYyBu
c1N0eWxlU3RydWN0IHsKICBuc1N0eWxlTGlzdCh2b2lkKTsKICB+bnNTdHlsZUxpc3Qodm9pZCk7
CgogIFBSVWludDggbUxpc3RTdHlsZVR5cGU7CiAgUFJVaW50OCBtTGlzdFN0eWxlUG9zaXRpb247
CiAgbnNTdHJpbmcgbUxpc3RTdHlsZUltYWdlOwp9OwoKc3RydWN0IG5zU3R5bGVQb3NpdGlvbiA6
IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlUG9zaXRpb24odm9pZCk7CiAgfm5zU3R5
bGVQb3NpdGlvbih2b2lkKTsKCiAgUFJVaW50OCBtUG9zaXRpb247CgogIG5zU3R5bGVTaWRlcyBt
T2Zmc2V0OwogIG5zU3R5bGVDb29yZCBtV2lkdGg7CiAgbnNTdHlsZUNvb3JkIG1NaW5XaWR0aDsK
ICBuc1N0eWxlQ29vcmQgbU1heFdpZHRoOwogIG5zU3R5bGVDb29yZCBtSGVpZ2h0OwogIG5zU3R5
bGVDb29yZCBtTWluSGVpZ2h0OwogIG5zU3R5bGVDb29yZCBtTWF4SGVpZ2h0OwogIFBSVWludDgg
bUJveFNpemluZzsKCiAgbnNTdHlsZUNvb3JkIG1aSW5kZXg7CgogIFBSQm9vbCBJc0Fic29sdXRl
bHlQb3NpdGlvbmVkKCkgY29uc3Qge3JldHVybiAoMiA9PSBtUG9zaXRpb24pIHx8CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzID09IG1Qb3NpdGlvbik7
fQoKICBQUkJvb2wgSXNQb3NpdGlvbmVkKCkgY29uc3Qge3JldHVybiBJc0Fic29sdXRlbHlQb3Np
dGlvbmVkKCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA9PSBt
UG9zaXRpb24pO30KfTsKCnN0cnVjdCBuc1N0eWxlVGV4dCA6IHB1YmxpYyBuc1N0eWxlU3RydWN0
IHsKICBuc1N0eWxlVGV4dCh2b2lkKTsKICB+bnNTdHlsZVRleHQodm9pZCk7CgogIFBSVWludDgg
bVRleHRBbGlnbjsKICBQUlVpbnQ4IG1UZXh0RGVjb3JhdGlvbjsKICBQUlVpbnQ4IG1UZXh0VHJh
bnNmb3JtOwogIFBSVWludDggbVdoaXRlU3BhY2U7CgoKCgogIG5zU3R5bGVDb29yZCBtTGV0dGVy
U3BhY2luZzsKICBuc1N0eWxlQ29vcmQgbUxpbmVIZWlnaHQ7CiAgbnNTdHlsZUNvb3JkIG1UZXh0
SW5kZW50OwogIG5zU3R5bGVDb29yZCBtV29yZFNwYWNpbmc7CiAgbnNTdHlsZUNvb3JkIG1WZXJ0
aWNhbEFsaWduOwoKICBQUkJvb2wgV2hpdGVTcGFjZUlzU2lnbmlmaWNhbnQoKSBjb25zdCB7CiAg
ICByZXR1cm4gbVdoaXRlU3BhY2UgPT0gMTsKICB9Cn07CgpzdHJ1Y3QgbnNTdHlsZURpc3BsYXkg
OiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZURpc3BsYXkodm9pZCkge307CiAgfm5z
U3R5bGVEaXNwbGF5KHZvaWQpIHt9OwoKICBQUlVpbnQ4IG1EaXJlY3Rpb247CgoKCiAgUFJVaW50
OCBtRGlzcGxheTsKICBQUlVpbnQ4IG1GbG9hdHM7CiAgUFJVaW50OCBtQnJlYWtUeXBlOwogIFBS
UGFja2VkQm9vbCBtQnJlYWtCZWZvcmU7CiAgUFJQYWNrZWRCb29sIG1CcmVha0FmdGVyOwogIFBS
VWludDggbVZpc2libGU7CiAgUFJVaW50OCBtT3ZlcmZsb3c7CgogIFBSVWludDggbUNsaXBGbGFn
czsKCgoKCgoKICBuc1JlY3QgbUNsaXA7CgogIG5zQ09NUHRyPG5zSUxhbmd1YWdlQXRvbT4gbUxh
bmd1YWdlOwoKICBQUkJvb2wgSXNCbG9ja0xldmVsKCkgY29uc3Qge3JldHVybiAoMSA9PSBtRGlz
cGxheSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCA9PSBtRGlz
cGxheSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOCA9PSBtRGlz
cGxheSk7fQoKICBQUkJvb2wgSXNGbG9hdGluZygpIGNvbnN0IHsKICAgIHJldHVybiAwICE9IG1G
bG9hdHM7CiAgfQoKICAgICAgICBQUkJvb2wgSXNWaXNpYmxlKCkgY29uc3QgewogICAgICAgICAg
ICAgICAgcmV0dXJuIChtVmlzaWJsZSA9PSAxKTsKICAgICAgICB9CgogICAgICAgIFBSQm9vbCBJ
c1Zpc2libGVPckNvbGxhcHNlZCgpIGNvbnN0IHsKICAgICAgICAgICAgICAgIHJldHVybiAoKG1W
aXNpYmxlID09IDEpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChtVmlzaWJsZSA9PSAyKSk7CiAgICAgICAgfQp9OwoKc3RydWN0IG5zU3R5bGVUYWJs
ZTogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVUYWJsZSh2b2lkKTsKICB+bnNTdHls
ZVRhYmxlKHZvaWQpOwoKICBQUlVpbnQ4IG1MYXlvdXRTdHJhdGVneTsKICBQUlVpbnQ4IG1GcmFt
ZTsKICBQUlVpbnQ4IG1SdWxlczsKICBQUlVpbnQ4IG1Cb3JkZXJDb2xsYXBzZTsKICBuc1N0eWxl
Q29vcmQgbUJvcmRlclNwYWNpbmdYOwogIG5zU3R5bGVDb29yZCBtQm9yZGVyU3BhY2luZ1k7CiAg
bnNTdHlsZUNvb3JkIG1DZWxsUGFkZGluZzsKICBQUlVpbnQ4IG1DYXB0aW9uU2lkZTsKICBQUlVp
bnQ4IG1FbXB0eUNlbGxzOwogIFBSSW50MzIgbUNvbHM7CiAgUFJJbnQzMiBtU3BhbjsKICBuc1N0
eWxlQ29vcmQgbVNwYW5XaWR0aDsKfTsKCmVudW0gbnNTdHlsZUNvbnRlbnRUeXBlIHsKICBlU3R5
bGVDb250ZW50VHlwZV9TdHJpbmcgPSAxLAogIGVTdHlsZUNvbnRlbnRUeXBlX1VSTCA9IDEwLAog
IGVTdHlsZUNvbnRlbnRUeXBlX0F0dHIgPSAyMCwKICBlU3R5bGVDb250ZW50VHlwZV9Db3VudGVy
ID0gMzAsCiAgZVN0eWxlQ29udGVudFR5cGVfQ291bnRlcnMgPSAzMSwKICBlU3R5bGVDb250ZW50
VHlwZV9PcGVuUXVvdGUgPSA0MCwKICBlU3R5bGVDb250ZW50VHlwZV9DbG9zZVF1b3RlID0gNDEs
CiAgZVN0eWxlQ29udGVudFR5cGVfTm9PcGVuUXVvdGUgPSA0MiwKICBlU3R5bGVDb250ZW50VHlw
ZV9Ob0Nsb3NlUXVvdGUgPSA0Mwp9OwoKc3RydWN0IG5zU3R5bGVDb250ZW50RGF0YSB7CiAgbnNT
dHlsZUNvbnRlbnRUeXBlIG1UeXBlOwogIG5zU3RyaW5nIG1Db250ZW50Owp9OwoKc3RydWN0IG5z
U3R5bGVDb3VudGVyRGF0YSB7CiAgbnNTdHJpbmcgbUNvdW50ZXI7CiAgUFJJbnQzMiBtVmFsdWU7
Cn07CgoKCgpzdHJ1Y3QgbnNTdHlsZUNvbnRlbnQ6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBu
c1N0eWxlQ29udGVudCh2b2lkKTsKICB+bnNTdHlsZUNvbnRlbnQodm9pZCk7CgogIFBSVWludDMy
IENvbnRlbnRDb3VudCh2b2lkKSBjb25zdCB7IHJldHVybiBtQ29udGVudENvdW50OyB9CiAgbnNy
ZXN1bHQgR2V0Q29udGVudEF0KFBSVWludDMyIGFJbmRleCwgbnNTdHlsZUNvbnRlbnRUeXBlJiBh
VHlwZSwgbnNTdHJpbmcmIGFDb250ZW50KSBjb25zdCB7CiAgICBpZiAoYUluZGV4IDwgbUNvbnRl
bnRDb3VudCkgewogICAgICBhVHlwZSA9IG1Db250ZW50c1thSW5kZXhdLm1UeXBlOwogICAgICBh
Q29udGVudCA9IG1Db250ZW50c1thSW5kZXhdLm1Db250ZW50OwogICAgICByZXR1cm4gMDsKICAg
IH0KICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDU3TCk7CiAgfQoKICBuc3Jlc3VsdCBB
bGxvY2F0ZUNvbnRlbnRzKFBSVWludDMyIGFDb3VudCkgewogICAgaWYgKGFDb3VudCAhPSBtQ29u
dGVudENvdW50KSB7CiAgICAgIGlmIChtQ29udGVudHMpIHsgZGVsZXRlW10gbUNvbnRlbnRzOyBt
Q29udGVudHMgPSAwOyB9OwogICAgICBpZiAoYUNvdW50KSB7CiAgICAgICAgbUNvbnRlbnRzID0g
bmV3IG5zU3R5bGVDb250ZW50RGF0YVthQ291bnRdOwogICAgICAgIGlmICghIG1Db250ZW50cykg
ewogICAgICAgICAgbUNvbnRlbnRDb3VudCA9IDA7CiAgICAgICAgICByZXR1cm4gKChuc3Jlc3Vs
dCkgMHg4MDA3MDAwZUwpOwogICAgICAgIH0KICAgICAgfQogICAgICBtQ29udGVudENvdW50ID0g
YUNvdW50OwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKICBuc3Jlc3VsdCBTZXRDb250ZW50QXQo
UFJVaW50MzIgYUluZGV4LCBuc1N0eWxlQ29udGVudFR5cGUgYVR5cGUsIGNvbnN0IG5zU3RyaW5n
JiBhQ29udGVudCkgewogICAgaWYgKGFJbmRleCA8IG1Db250ZW50Q291bnQpIHsKICAgICAgbUNv
bnRlbnRzW2FJbmRleF0ubVR5cGUgPSBhVHlwZTsKICAgICAgaWYgKGFUeXBlIDwgZVN0eWxlQ29u
dGVudFR5cGVfT3BlblF1b3RlKSB7CiAgICAgICAgbUNvbnRlbnRzW2FJbmRleF0ubUNvbnRlbnQg
PSBhQ29udGVudDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBtQ29udGVudHNbYUluZGV4
XS5tQ29udGVudC5UcnVuY2F0ZSgpOwogICAgICB9CiAgICAgIHJldHVybiAwOwogICAgfQogICAg
cmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwNTdMKTsKICB9CgogIFBSVWludDMyIENvdW50ZXJJ
bmNyZW1lbnRDb3VudCh2b2lkKSBjb25zdCB7IHJldHVybiBtSW5jcmVtZW50Q291bnQ7IH0KICBu
c3Jlc3VsdCBHZXRDb3VudGVySW5jcmVtZW50QXQoUFJVaW50MzIgYUluZGV4LCBuc1N0cmluZyYg
YUNvdW50ZXIsIFBSSW50MzImIGFJbmNyZW1lbnQpIGNvbnN0IHsKICAgIGlmIChhSW5kZXggPCBt
SW5jcmVtZW50Q291bnQpIHsKICAgICAgYUNvdW50ZXIgPSBtSW5jcmVtZW50c1thSW5kZXhdLm1D
b3VudGVyOwogICAgICBhSW5jcmVtZW50ID0gbUluY3JlbWVudHNbYUluZGV4XS5tVmFsdWU7CiAg
ICAgIHJldHVybiAwOwogICAgfQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwNTdMKTsK
ICB9CgogIG5zcmVzdWx0IEFsbG9jYXRlQ291bnRlckluY3JlbWVudHMoUFJVaW50MzIgYUNvdW50
KSB7CiAgICBpZiAoYUNvdW50ICE9IG1JbmNyZW1lbnRDb3VudCkgewogICAgICBpZiAobUluY3Jl
bWVudHMpIHsgZGVsZXRlW10gbUluY3JlbWVudHM7IG1JbmNyZW1lbnRzID0gMDsgfTsKICAgICAg
aWYgKGFDb3VudCkgewogICAgICAgIG1JbmNyZW1lbnRzID0gbmV3IG5zU3R5bGVDb3VudGVyRGF0
YVthQ291bnRdOwogICAgICAgIGlmICghIG1JbmNyZW1lbnRzKSB7CiAgICAgICAgICBtSW5jcmVt
ZW50Q291bnQgPSAwOwogICAgICAgICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsK
ICAgICAgICB9CiAgICAgIH0KICAgICAgbUluY3JlbWVudENvdW50ID0gYUNvdW50OwogICAgfQog
ICAgcmV0dXJuIDA7CiAgfQoKICBuc3Jlc3VsdCBTZXRDb3VudGVySW5jcmVtZW50QXQoUFJVaW50
MzIgYUluZGV4LCBjb25zdCBuc1N0cmluZyYgYUNvdW50ZXIsIFBSSW50MzIgYUluY3JlbWVudCkg
ewogICAgaWYgKGFJbmRleCA8IG1JbmNyZW1lbnRDb3VudCkgewogICAgICBtSW5jcmVtZW50c1th
SW5kZXhdLm1Db3VudGVyID0gYUNvdW50ZXI7CiAgICAgIG1JbmNyZW1lbnRzW2FJbmRleF0ubVZh
bHVlID0gYUluY3JlbWVudDsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChuc3Jl
c3VsdCkgMHg4MDA3MDA1N0wpOwogIH0KCiAgUFJVaW50MzIgQ291bnRlclJlc2V0Q291bnQodm9p
ZCkgY29uc3QgeyByZXR1cm4gbVJlc2V0Q291bnQ7IH0KICBuc3Jlc3VsdCBHZXRDb3VudGVyUmVz
ZXRBdChQUlVpbnQzMiBhSW5kZXgsIG5zU3RyaW5nJiBhQ291bnRlciwgUFJJbnQzMiYgYVZhbHVl
KSBjb25zdCB7CiAgICBpZiAoYUluZGV4IDwgbVJlc2V0Q291bnQpIHsKICAgICAgYUNvdW50ZXIg
PSBtUmVzZXRzW2FJbmRleF0ubUNvdW50ZXI7CiAgICAgIGFWYWx1ZSA9IG1SZXNldHNbYUluZGV4
XS5tVmFsdWU7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4
ODAwNzAwNTdMKTsKICB9CgogIG5zcmVzdWx0IEFsbG9jYXRlQ291bnRlclJlc2V0cyhQUlVpbnQz
MiBhQ291bnQpIHsKICAgIGlmIChhQ291bnQgIT0gbVJlc2V0Q291bnQpIHsKICAgICAgaWYgKG1S
ZXNldHMpIHsgZGVsZXRlW10gbVJlc2V0czsgbVJlc2V0cyA9IDA7IH07CiAgICAgIGlmIChhQ291
bnQpIHsKICAgICAgICBtUmVzZXRzID0gbmV3IG5zU3R5bGVDb3VudGVyRGF0YVthQ291bnRdOwog
ICAgICAgIGlmICghIG1SZXNldHMpIHsKICAgICAgICAgIG1SZXNldENvdW50ID0gMDsKICAgICAg
ICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7CiAgICAgICAgfQogICAgICB9CiAg
ICAgIG1SZXNldENvdW50ID0gYUNvdW50OwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKICBuc3Jl
c3VsdCBTZXRDb3VudGVyUmVzZXRBdChQUlVpbnQzMiBhSW5kZXgsIGNvbnN0IG5zU3RyaW5nJiBh
Q291bnRlciwgUFJJbnQzMiBhVmFsdWUpIHsKICAgIGlmIChhSW5kZXggPCBtUmVzZXRDb3VudCkg
ewogICAgICBtUmVzZXRzW2FJbmRleF0ubUNvdW50ZXIgPSBhQ291bnRlcjsKICAgICAgbVJlc2V0
c1thSW5kZXhdLm1WYWx1ZSA9IGFWYWx1ZTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1
cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDA1N0wpOwogIH0KCiAgbnNTdHlsZUNvb3JkIG1NYXJrZXJP
ZmZzZXQ7CgogIFBSVWludDMyIFF1b3Rlc0NvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1RdW90
ZXNDb3VudDsgfQogIG5zcmVzdWx0IEdldFF1b3Rlc0F0KFBSVWludDMyIGFJbmRleCwgbnNTdHJp
bmcmIGFPcGVuLCBuc1N0cmluZyYgYUNsb3NlKSBjb25zdCB7CiAgICBpZiAoYUluZGV4IDwgbVF1
b3Rlc0NvdW50KSB7CiAgICAgIGFJbmRleCAqPSAyOwogICAgICBhT3BlbiA9IG1RdW90ZXNbYUlu
ZGV4XTsKICAgICAgYUNsb3NlID0gbVF1b3Rlc1srK2FJbmRleF07CiAgICAgIHJldHVybiAwOwog
ICAgfQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwNTdMKTsKICB9CgogIG5zcmVzdWx0
IEFsbG9jYXRlUXVvdGVzKFBSVWludDMyIGFDb3VudCkgewogICAgaWYgKGFDb3VudCAhPSBtUXVv
dGVzQ291bnQpIHsKICAgICAgaWYgKG1RdW90ZXMpIHsgZGVsZXRlW10gbVF1b3RlczsgbVF1b3Rl
cyA9IDA7IH07CiAgICAgIGlmIChhQ291bnQpIHsKICAgICAgICBtUXVvdGVzID0gbmV3IG5zU3Ry
aW5nW2FDb3VudCAqIDJdOwogICAgICAgIGlmICghIG1RdW90ZXMpIHsKICAgICAgICAgIG1RdW90
ZXNDb3VudCA9IDA7CiAgICAgICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOwog
ICAgICAgIH0KICAgICAgfQogICAgICBtUXVvdGVzQ291bnQgPSBhQ291bnQ7CiAgICB9CiAgICBy
ZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0IFNldFF1b3Rlc0F0KFBSVWludDMyIGFJbmRleCwgY29u
c3QgbnNTdHJpbmcmIGFPcGVuLCBjb25zdCBuc1N0cmluZyYgYUNsb3NlKSB7CiAgICBpZiAoYUlu
ZGV4IDwgbVF1b3Rlc0NvdW50KSB7CiAgICAgIGFJbmRleCAqPSAyOwogICAgICBtUXVvdGVzW2FJ
bmRleF0gPSBhT3BlbjsKICAgICAgbVF1b3Rlc1srK2FJbmRleF0gPSBhQ2xvc2U7CiAgICAgIHJl
dHVybiAwOwogICAgfQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwNTdMKTsKICB9Cgpw
cm90ZWN0ZWQ6CiAgUFJVaW50MzIgbUNvbnRlbnRDb3VudDsKICBuc1N0eWxlQ29udGVudERhdGEq
IG1Db250ZW50czsKCiAgUFJVaW50MzIgbUluY3JlbWVudENvdW50OwogIG5zU3R5bGVDb3VudGVy
RGF0YSogbUluY3JlbWVudHM7CgogIFBSVWludDMyIG1SZXNldENvdW50OwogIG5zU3R5bGVDb3Vu
dGVyRGF0YSogbVJlc2V0czsKCiAgUFJVaW50MzIgbVF1b3Rlc0NvdW50OwogIG5zU3RyaW5nKiBt
UXVvdGVzOwp9OwoKc3RydWN0IG5zU3R5bGVVc2VySW50ZXJmYWNlOiBwdWJsaWMgbnNTdHlsZVN0
cnVjdCB7CiAgbnNTdHlsZVVzZXJJbnRlcmZhY2Uodm9pZCk7CiAgfm5zU3R5bGVVc2VySW50ZXJm
YWNlKHZvaWQpOwoKICBQUlVpbnQ4IG1Vc2VySW5wdXQ7CiAgUFJVaW50OCBtVXNlck1vZGlmeTsK
ICBQUlVpbnQ4IG1Vc2VyU2VsZWN0OwogIFBSVWludDggbVVzZXJGb2N1czsKICBQUlVuaWNoYXIg
bUtleUVxdWl2YWxlbnQ7CiAgUFJVaW50OCBtUmVzaXplcjsKICBuc1N0cmluZyBtQmVoYXZpb3I7
Cgp9OwoKc3RydWN0IG5zU3R5bGVQcmludDogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5
bGVQcmludCh2b2lkKTsKICB+bnNTdHlsZVByaW50KHZvaWQpOwoKICBQUlVpbnQ4IG1QYWdlQnJl
YWtCZWZvcmU7CiAgUFJVaW50OCBtUGFnZUJyZWFrQWZ0ZXI7CiAgUFJVaW50OCBtUGFnZUJyZWFr
SW5zaWRlOwogICAgICAgIG5zU3RyaW5nIG1QYWdlOwogIFBSVWludDMyIG1XaWRvd3M7CiAgUFJV
aW50MzIgbU9ycGhhbnM7CiAgUFJVaW50OCBtTWFya3M7CiAgbnNTdHlsZUNvb3JkIG1TaXplV2lk
dGg7CiAgbnNTdHlsZUNvb3JkIG1TaXplSGVpZ2h0Owp9OwoKCnN0cnVjdCBuc1N0eWxlWFVMIDog
cHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVYVUwoKTsKICB+bnNTdHlsZVhVTCgpOwoK
CgoKCiAgUFJVaW50OCBtQm94T3JpZW50Owp9OwoKCgoKCgpzdHJ1Y3QgbnNCb3JkZXJFZGdlczsK
CgpzdHJ1Y3QgbnNCb3JkZXJFZGdlCnsKCiAgbnNjb29yZCBtV2lkdGg7CgogIG5zY29vcmQgbUxl
bmd0aDsKICBQUlVpbnQ4IG1TdHlsZTsKICBuc2NvbG9yIG1Db2xvcjsKCiAgUFJVaW50OCBtU2lk
ZTsKCiAgbnNCb3JkZXJFZGdlcyAqIG1JbnNpZGVOZWlnaGJvcjsKCiAgbnNCb3JkZXJFZGdlKCk7
Cn07CgppbmxpbmUgbnNCb3JkZXJFZGdlOjpuc0JvcmRlckVkZ2UoKQp7CiAgbVdpZHRoPTA7CiAg
bUxlbmd0aD0wOwogIG1TdHlsZT0wOwogIG1Db2xvcj0wOwogIG1TaWRlPTM7CiAgbUluc2lkZU5l
aWdoYm9yID0gMDsKfTsKCgoKCnN0cnVjdCBuc0JvcmRlckVkZ2VzCnsKICBuc1ZvaWRBcnJheSBt
RWRnZXNbNF07CiAgbnNNYXJnaW4gbU1heEJvcmRlcldpZHRoOwogIFBSUGFja2VkQm9vbCBtT3V0
c2lkZUVkZ2U7CgogIG5zQm9yZGVyRWRnZXMoKTsKfTsKCmlubGluZSBuc0JvcmRlckVkZ2VzOjpu
c0JvcmRlckVkZ2VzKCkKewogIG1NYXhCb3JkZXJXaWR0aC5TaXplVG8oMCwwLDAsMCk7CiAgbU91
dHNpZGVFZGdlID0gMTsKfTsKIyA3NTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHls
ZUNvbnRleHQuaCIKY2xhc3MgbnNJU3R5bGVDb250ZXh0IDogcHVibGljIG5zSVN1cHBvcnRzIHsK
cHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQgaWlk
ID0geyAweDI2YTRkOTcwLCAweGEzNDIsIDB4MTFkMSwgezB4ODksIDB4NzQsIDB4MDAsIDB4NjAs
IDB4MDgsIDB4OTEsIDB4MWIsIDB4ODF9IH07IHJldHVybiBpaWQ7IH0KCiAgdmlydHVhbCBQUkJv
b2wgRXF1YWxzKGNvbnN0IG5zSVN0eWxlQ29udGV4dCogYU90aGVyKSBjb25zdCA9IDA7CiAgdmly
dHVhbCBQUlVpbnQzMiBIYXNoVmFsdWUodm9pZCkgY29uc3QgPSAwOwoKICB2aXJ0dWFsIG5zSVN0
eWxlQ29udGV4dCogR2V0UGFyZW50KHZvaWQpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zSVN1cHBv
cnRzQXJyYXkqIEdldFN0eWxlUnVsZXModm9pZCkgY29uc3QgPSAwOwogIHZpcnR1YWwgUFJJbnQz
MiBHZXRTdHlsZVJ1bGVDb3VudCh2b2lkKSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRQc2V1ZG9UeXBlKG5zSUF0b20qJiBhUHNldWRvVGFnKSBjb25zdCA9IDA7CgogIHZpcnR1YWwg
bnNyZXN1bHQgRmluZENoaWxkV2l0aFJ1bGVzKGNvbnN0IG5zSUF0b20qIGFQc2V1ZG9UYWcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHNBcnJheSogYVJ1bGVzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dComIGFSZXN1bHQp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGUobnNTdHlsZVN0cnVjdElEIGFTSUQs
IG5zU3R5bGVTdHJ1Y3QmIGFTdHJ1Y3QpIGNvbnN0ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
Q2FsY1N0eWxlRGlmZmVyZW5jZShuc0lTdHlsZUNvbnRleHQqIGFPdGhlciwgUFJJbnQzMiYgYUhp
bnQsIFBSQm9vbCBhU3RvcEF0Rmlyc3QgPSAwKSBjb25zdCA9IDA7CgoKICB2aXJ0dWFsIHZvaWQg
TGlzdChGSUxFKiBvdXQsIFBSSW50MzIgYUluZGVudCkgPSAwOwoKICB2aXJ0dWFsIHZvaWQgU2l6
ZU9mKG5zSVNpemVPZkhhbmRsZXIgKmFTaXplT2ZIYW5kbGVyLCBQUlVpbnQzMiAmYVNpemUpID0g
MDsKCgogIHZpcnR1YWwgdm9pZCBEdW1wUmVncmVzc2lvbkRhdGEobnNJUHJlc0NvbnRleHQqIGFQ
cmVzQ29udGV4dCwgRklMRSogb3V0LCBQUkludDMyIGFJbmRlbnQpID0gMDsKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgU3R5bGVEYXRhTWF0Y2hlcyhuc0lTdHlsZUNvbnRleHQqIGFTdHlsZUNvbnRl
eHRUb01hdGNoLCBQUkJvb2wgKmFNYXRjaGVzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRT
dHlsZUNvbnRleHRLZXkoc2NLZXkgJmFLZXkpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIGNv
bnN0IG5zU3R5bGVTdHJ1Y3QqIEdldFN0eWxlRGF0YShuc1N0eWxlU3RydWN0SUQgYVNJRCkgPSAw
OwoKCiAgdmlydHVhbCBuc1N0eWxlU3RydWN0KiBHZXRNdXRhYmxlU3R5bGVEYXRhKG5zU3R5bGVT
dHJ1Y3RJRCBhU0lEKSA9IDA7CgoKICB2aXJ0dWFsIHZvaWQgRm9yY2VVbmlxdWUodm9pZCkgPSAw
OwoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbWFwU3R5bGUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwgUFJCb29sIGFSZWN1cnNlID0gMSkgPSAwOwoKCiAgdmlydHVhbCB2b2lkIFJlY2FsY0F1
dG9tYXRpY0RhdGEobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCkgPSAwOwoKCiAgdmlydHVh
bCB2b2lkIENhbGNCb3JkZXJQYWRkaW5nRm9yKGNvbnN0IG5zSUZyYW1lKiBhRnJhbWUsIG5zTWFy
Z2luJiBhQm9yZGVyUGFkZGluZykgY29uc3QgPSAwOwp9OwoKCgppbmxpbmUgbnNjb29yZCBDYWxj
U2lkZUZvcihjb25zdCBuc0lGcmFtZSogYUZyYW1lLCBjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29y
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50OCBhU3BhY2luZywgUFJVaW50OCBh
U2lkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNjb29yZCogYUVudW1UYWJs
ZSwgUFJJbnQzMiBhTnVtRW51bXMpCnsKICBuc2Nvb3JkIHJlc3VsdCA9IDA7CgogIHN3aXRjaCAo
YUNvb3JkLkdldFVuaXQoKSkgewogICAgY2FzZSBlU3R5bGVVbml0X0F1dG86CgogICAgICBicmVh
azsKCiAgICBjYXNlIGVTdHlsZVVuaXRfSW5oZXJpdDoKICAgICAgbnNJRnJhbWUqIHBhcmVudEZy
YW1lOwogICAgICBhRnJhbWUtPkdldFBhcmVudCgmcGFyZW50RnJhbWUpOwogICAgICBpZiAoMCAh
PSBwYXJlbnRGcmFtZSkgewogICAgICAgIG5zSVN0eWxlQ29udGV4dCogcGFyZW50Q29udGV4dDsK
ICAgICAgICBwYXJlbnRGcmFtZS0+R2V0U3R5bGVDb250ZXh0KCZwYXJlbnRDb250ZXh0KTsKICAg
ICAgICBpZiAoMCAhPSBwYXJlbnRDb250ZXh0KSB7CiAgICAgICAgICBuc01hcmdpbiBwYXJlbnRT
cGFjaW5nOwogICAgICAgICAgc3dpdGNoIChhU3BhY2luZykgewogICAgICAgICAgICBjYXNlIDA6
CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY29uc3QgbnNTdHlsZU1hcmdpbiogcGFy
ZW50TWFyZ2luID0gKGNvbnN0IG5zU3R5bGVNYXJnaW4qKXBhcmVudENvbnRleHQtPkdldFN0eWxl
RGF0YShlU3R5bGVTdHJ1Y3RfTWFyZ2luKTsKICAgICAgICAgICAgICAgIHBhcmVudE1hcmdpbi0+
Q2FsY01hcmdpbkZvcihwYXJlbnRGcmFtZSwgcGFyZW50U3BhY2luZyk7CiAgICAgICAgICAgICAg
fQoKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIGNvbnN0IG5zU3R5bGVQYWRkaW5nKiBwYXJlbnRQYWRkaW5nID0g
KGNvbnN0IG5zU3R5bGVQYWRkaW5nKilwYXJlbnRDb250ZXh0LT5HZXRTdHlsZURhdGEoZVN0eWxl
U3RydWN0X1BhZGRpbmcpOwogICAgICAgICAgICAgICAgcGFyZW50UGFkZGluZy0+Q2FsY1BhZGRp
bmdGb3IocGFyZW50RnJhbWUsIHBhcmVudFNwYWNpbmcpOwogICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICBjb25zdCBuc1N0eWxlQm9yZGVyKiBwYXJlbnRCb3JkZXIgPSAoY29uc3QgbnNT
dHlsZUJvcmRlciopcGFyZW50Q29udGV4dC0+R2V0U3R5bGVEYXRhKGVTdHlsZVN0cnVjdF9Cb3Jk
ZXIpOwogICAgICAgICAgICAgICAgcGFyZW50Qm9yZGVyLT5DYWxjQm9yZGVyRm9yKHBhcmVudEZy
YW1lLCBwYXJlbnRTcGFjaW5nKTsKICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgfQogICAgICAgICAgc3dpdGNoIChhU2lkZSkgewogICAgICAgICAgICBjYXNl
IDM6IHJlc3VsdCA9IHBhcmVudFNwYWNpbmcubGVmdDsgYnJlYWs7CiAgICAgICAgICAgIGNhc2Ug
MDogcmVzdWx0ID0gcGFyZW50U3BhY2luZy50b3A7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDE6
IHJlc3VsdCA9IHBhcmVudFNwYWNpbmcucmlnaHQ7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDI6
IHJlc3VsdCA9IHBhcmVudFNwYWNpbmcuYm90dG9tOyBicmVhazsKICAgICAgICAgIH0KICAgICAg
ICAgIGRvIHsgKHBhcmVudENvbnRleHQpLT5SZWxlYXNlKCk7IChwYXJlbnRDb250ZXh0KSA9IDA7
IH0gd2hpbGUgKDApOwogICAgICAgIH0KICAgICAgfQogICAgICBicmVhazsKCiAgICBjYXNlIGVT
dHlsZVVuaXRfUGVyY2VudDoKICAgICAgewogICAgICAgIG5zY29vcmQgYmFzZVdpZHRoID0gMDsK
ICAgICAgICBQUkJvb2wgaXNCYXNlID0gMDsKICAgICAgICBuc0lGcmFtZSogZnJhbWU7CiAgICAg
ICAgYUZyYW1lLT5HZXRQYXJlbnQoJmZyYW1lKTsKICAgICAgICB3aGlsZSAoMCAhPSBmcmFtZSkg
ewogICAgICAgICAgZnJhbWUtPklzUGVyY2VudGFnZUJhc2UoaXNCYXNlKTsKICAgICAgICAgIGlm
IChpc0Jhc2UpIHsKICAgICAgICAgICAgbnNTaXplIHNpemU7CiAgICAgICAgICAgIGZyYW1lLT5H
ZXRTaXplKHNpemUpOwogICAgICAgICAgICBiYXNlV2lkdGggPSBzaXplLndpZHRoOwogICAgICAg
ICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGZyYW1lLT5HZXRQYXJlbnQoJmZyYW1l
KTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gKG5zY29vcmQpKChmbG9hdCliYXNlV2lkdGgg
KiBhQ29vcmQuR2V0UGVyY2VudFZhbHVlKCkpOwogICAgICB9CiAgICAgIGJyZWFrOwoKICAgIGNh
c2UgZVN0eWxlVW5pdF9Db29yZDoKICAgICAgcmVzdWx0ID0gYUNvb3JkLkdldENvb3JkVmFsdWUo
KTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBlU3R5bGVVbml0X0VudW1lcmF0ZWQ6CiAgICAgIGlm
ICgwICE9IGFFbnVtVGFibGUpIHsKICAgICAgICBQUkludDMyIHZhbHVlID0gYUNvb3JkLkdldElu
dFZhbHVlKCk7CiAgICAgICAgaWYgKCgwIDw9IHZhbHVlKSAmJiAodmFsdWUgPCBhTnVtRW51bXMp
KSB7CiAgICAgICAgICByZXR1cm4gYUVudW1UYWJsZVthQ29vcmQuR2V0SW50VmFsdWUoKV07CiAg
ICAgICAgfQogICAgICB9CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgZVN0eWxlVW5pdF9OdWxsOgog
ICAgY2FzZSBlU3R5bGVVbml0X05vcm1hbDoKICAgIGNhc2UgZVN0eWxlVW5pdF9JbnRlZ2VyOgog
ICAgY2FzZSBlU3R5bGVVbml0X1Byb3BvcnRpb25hbDoKICAgIGRlZmF1bHQ6CiAgICAgIHJlc3Vs
dCA9IDA7CiAgICAgIGJyZWFrOwogIH0KICBpZiAoKDEgPT0gYVNwYWNpbmcpIHx8ICgyID09IGFT
cGFjaW5nKSkgewogICAgaWYgKHJlc3VsdCA8IDApIHsKICAgICAgcmVzdWx0ID0gMDsKICAgIH0K
ICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKaW5saW5lIHZvaWQgQ2FsY1NpZGVzRm9yKGNvbnN0IG5z
SUZyYW1lKiBhRnJhbWUsIGNvbnN0IG5zU3R5bGVTaWRlcyYgYVNpZGVzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgUFJVaW50OCBhU3BhY2luZywKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IG5zY29vcmQqIGFFbnVtVGFibGUsIFBSSW50MzIgYU51bUVudW1zLAogICAgICAgICAgICAg
ICAgICAgICAgICAgbnNNYXJnaW4mIGFSZXN1bHQpCnsKICBuc1N0eWxlQ29vcmQgY29vcmQ7Cgog
IGFSZXN1bHQubGVmdCA9IENhbGNTaWRlRm9yKGFGcmFtZSwgYVNpZGVzLkdldExlZnQoY29vcmQp
LCBhU3BhY2luZywgMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhRW51bVRhYmxlLCBh
TnVtRW51bXMpOwogIGFSZXN1bHQudG9wID0gQ2FsY1NpZGVGb3IoYUZyYW1lLCBhU2lkZXMuR2V0
VG9wKGNvb3JkKSwgYVNwYWNpbmcsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhRW51
bVRhYmxlLCBhTnVtRW51bXMpOwogIGFSZXN1bHQucmlnaHQgPSBDYWxjU2lkZUZvcihhRnJhbWUs
IGFTaWRlcy5HZXRSaWdodChjb29yZCksIGFTcGFjaW5nLCAxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhRW51bVRhYmxlLCBhTnVtRW51bXMpOwogIGFSZXN1bHQuYm90dG9tID0gQ2Fs
Y1NpZGVGb3IoYUZyYW1lLCBhU2lkZXMuR2V0Qm90dG9tKGNvb3JkKSwgYVNwYWNpbmcsIDIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhRW51bVRhYmxlLCBhTnVtRW51bXMpOwp9CgoK
CmV4dGVybiBuc3Jlc3VsdAogIE5TX05ld1N0eWxlQ29udGV4dChuc0lTdHlsZUNvbnRleHQqKiBh
SW5zdGFuY2VQdHJSZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCog
YVBhcmVudENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UeXBl
LAogICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0c0FycmF5KiBhUnVsZXMsCiAgICAgICAg
ICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwojIDQxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVTZWxlY3Rpb24uaCIgMgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lTZWxlY3Rpb25Db250cm9sbGVyLmgiIDEKIyA0MiAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiIDIKIyA1NCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiCnN0cnVjdCBTZWxlY3Rpb25EZXRhaWxz
CnsKICBQUkludDMyIG1TdGFydDsKICBQUkludDMyIG1FbmQ7CiAgU2VsZWN0aW9uVHlwZSBtVHlw
ZTsKICBTZWxlY3Rpb25EZXRhaWxzICptTmV4dDsKfTsKIyA3NSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiCnN0cnVjdCBuc1BlZWtPZmZzZXRTdHJ1Y3QKewog
IHZvaWQgU2V0RGF0YShuc0lGb2N1c1RyYWNrZXIgKmFUcmFja2VyLAogICAgICAgICAgICAgICBu
c2Nvb3JkIGFEZXNpcmVkWCwKICAgICAgICAgICAgICAgbnNTZWxlY3Rpb25BbW91bnQgYUFtb3Vu
dCwKICAgICAgICAgICAgICAgbnNEaXJlY3Rpb24gYURpcmVjdGlvbiwKICAgICAgICAgICAgICAg
UFJJbnQzMiBhU3RhcnRPZmZzZXQsCiAgICAgICAgICAgICAgIFBSQm9vbCBhRWF0aW5nV1MsCiAg
ICAgICAgICAgICAgIFBSQm9vbCBhUHJlZmVyTGVmdCwKICAgICAgICAgICAgICAgUFJCb29sIGFK
dW1wTGluZXMpCiAgICAgIHsKICAgICAgIG1UcmFja2VyPWFUcmFja2VyO21EZXNpcmVkWD1hRGVz
aXJlZFg7bUFtb3VudD1hQW1vdW50OwogICAgICAgbURpcmVjdGlvbj1hRGlyZWN0aW9uO21TdGFy
dE9mZnNldD1hU3RhcnRPZmZzZXQ7bUVhdGluZ1dTPWFFYXRpbmdXUzsKICAgICAgIG1QcmVmZXJM
ZWZ0PWFQcmVmZXJMZWZ0O21KdW1wTGluZXMgPSBhSnVtcExpbmVzOwogICAgICB9CiAgbnNJRm9j
dXNUcmFja2VyICptVHJhY2tlcjsKICBuc2Nvb3JkIG1EZXNpcmVkWDsKICBuc1NlbGVjdGlvbkFt
b3VudCBtQW1vdW50OwogIG5zRGlyZWN0aW9uIG1EaXJlY3Rpb247CiAgUFJJbnQzMiBtU3RhcnRP
ZmZzZXQ7CiAgbnNDT01QdHI8bnNJQ29udGVudD4gbVJlc3VsdENvbnRlbnQ7CiAgUFJJbnQzMiBt
Q29udGVudE9mZnNldDsKICBQUkludDMyIG1Db250ZW50T2Zmc2V0RW5kOwogIG5zSUZyYW1lICpt
UmVzdWx0RnJhbWU7CiAgUFJCb29sIG1FYXRpbmdXUzsKICBQUkJvb2wgbVByZWZlckxlZnQ7CiAg
UFJCb29sIG1KdW1wTGluZXM7Cn07CgpjbGFzcyBuc0lTY3JvbGxhYmxlVmlldzsKCgpjbGFzcyBu
c0lGcmFtZVNlbGVjdGlvbiA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMg
Y29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsgMHhmNDZlNDE3MSwg
MHhkZWFhLCAweDExZDEsIHsgMHg5NywgMHhmYywgMHgwLCAweDYwLCAweDk3LCAweDMsIDB4YzEs
IDB4NGUgfSB9OyByZXR1cm4gaWlkOyB9CiAgZW51bSBISU5UIHtISU5UTEVGVD0wLEhJTlRSSUdI
VD0xfW1IaW50OwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lGb2N1c1RyYWNrZXIg
KmFUcmFja2VyLCBuc0lDb250ZW50ICphTGltaXRlcikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IFNldFNjcm9sbGFibGVWaWV3KG5zSVNjcm9sbGFibGVWaWV3ICphU2Nyb2xsVmlldykgPTA7
CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNodXREb3duKCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEhhbmRsZVRleHRFdmVudChuc0dVSUV2ZW50ICphR3VpRXZlbnQpID0gMDsKCgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYW5kbGVLZXlFdmVudChuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0LCBuc0dVSUV2ZW50ICphR3VpRXZlbnQpID0gMDsKIyAxNTkgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSGFu
ZGxlQ2xpY2sobnNJQ29udGVudCAqYU5ld0ZvY3VzLCBQUlVpbnQzMiBhQ29udGVudE9mZnNldCwg
UFJVaW50MzIgYUNvbnRlbnRFbmRPZmZzZXQgLAogICAgICAgICAgICAgICAgICAgICAgIFBSQm9v
bCBhQ29udGludWVTZWxlY3Rpb24sIFBSQm9vbCBhTXVsdGlwbGVTZWxlY3Rpb24sIFBSQm9vbCBh
SGludCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRHJhZyhuc0lQcmVzQ29u
dGV4dCAqYVByZXNDb250ZXh0LCBuc0lGcmFtZSAqYUZyYW1lLCBuc1BvaW50JiBhUG9pbnQpID0g
MDsKIyAxODEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlVGFibGVTZWxlY3Rpb24obnNJQ29udGVudCAqYVBhcmVu
dENvbnRlbnQsIFBSSW50MzIgYUNvbnRlbnRPZmZzZXQsIFBSSW50MzIgYVRhcmdldCwgbnNNb3Vz
ZUV2ZW50ICphTW91c2VFdmVudCkgPSAwOwojIDE5MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSUZyYW1lU2VsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTdGFydEF1dG9TY3JvbGxU
aW1lcihuc0lQcmVzQ29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lGcmFtZSAqYUZyYW1lLCBuc1Bv
aW50JiBhUG9pbnQsIFBSVWludDMyIGFEZWxheSkgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
U3RvcEF1dG9TY3JvbGxUaW1lcigpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW5hYmxl
RnJhbWVOb3RpZmljYXRpb24oUFJCb29sIGFFbmFibGUpID0gMDsKIyAyMTEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQgTG9v
a1VwU2VsZWN0aW9uKG5zSUNvbnRlbnQgKmFDb250ZW50LCBQUkludDMyIGFDb250ZW50T2Zmc2V0
LCBQUkludDMyIGFDb250ZW50TGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNl
bGVjdGlvbkRldGFpbHMgKiphUmV0dXJuRGV0YWlscywgUFJCb29sIGFTbG93Q2hlY2spID0gMDsK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TW91c2VEb3duU3RhdGUoUFJCb29sIGFTdGF0ZSk9
MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW91c2VEb3duU3RhdGUoUFJCb29sICphU3Rh
dGUpPTA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGFibGVDZWxsU2VsZWN0aW9uKFBSQm9v
bCAqYVN0YXRlKT0wOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRhYmxlQ2VsbFNlbGVjdGlv
blN0eWxlQ29sb3IoY29uc3QgbnNTdHlsZUNvbG9yICoqYVN0eWxlQ29sb3IpPTA7CgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFNlbGVjdGlvbihTZWxlY3Rpb25UeXBlIGFTZWxlY3Rpb25UeXBl
LCBuc0lTZWxlY3Rpb24gKiphU2VsZWN0aW9uKT0wOwojIDI0OSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JvbGxTZWxl
Y3Rpb25JbnRvVmlldyhTZWxlY3Rpb25UeXBlIGFTZWxlY3Rpb25UeXBlLCBTZWxlY3Rpb25SZWdp
b24gYVJlZ2lvbik9MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVwYWludFNlbGVjdGlvbihu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBTZWxlY3Rpb25UeXBlIGFTZWxlY3Rpb25UeXBl
KT0wOwojIDI2NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZUZvck5vZGVPZmZzZXQobnNJQ29udGVudCAqYU5v
ZGUsIFBSSW50MzIgYU9mZnNldCwgSElOVCBhSGludCwgbnNJRnJhbWUgKiphUmV0dXJuRnJhbWUs
IFBSSW50MzIgKmFSZXR1cm5PZmZzZXQpPTA7CiMgMjc0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRnJhbWVTZWxlY3Rpb24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFkanVzdE9mZnNldHNG
cm9tU3R5bGUobnNJRnJhbWUgKmFGcmFtZSwgUFJCb29sICpjaGFuZ2VTZWxlY3Rpb24sCiAgICAg
ICAgbnNJQ29udGVudCoqIG91dENvbnRlbnQsIFBSSW50MzIqIG91dFN0YXJ0T2Zmc2V0LCBQUklu
dDMyKiBvdXRFbmRPZmZzZXQpPTA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhpbnQoSElOVCAq
YUhpbnQpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIaW50KEhJTlQgYUhpbnQpPTA7CgoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBDaGFyYWN0ZXJNb3ZlKFBSQm9vbCBhRm9yd2FyZCwgUFJCb29s
IGFFeHRlbmQpPTA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBXb3JkTW92ZShQUkJvb2wgYUZv
cndhcmQsIFBSQm9vbCBhRXh0ZW5kKT0wOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTGluZU1v
dmUoUFJCb29sIGFGb3J3YXJkLCBQUkJvb2wgYUV4dGVuZCk9MDsKCgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEludHJhTGluZU1vdmUoUFJCb29sIGFGb3J3YXJkLCBQUkJvb2wgYUV4dGVuZCk9MDsK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZWxlY3RBbGwoKT0wOwoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgU2V0RGlzcGxheVNlbGVjdGlvbihQUkludDE2IGFTdGF0ZSk9MDsKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldERpc3BsYXlTZWxlY3Rpb24oUFJJbnQxNiAqYVN0YXRlKT0wOwojIDMzMCAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1lU2VsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXREZWxheUNhcmV0T3ZlckV4aXN0aW5nU2VsZWN0aW9uKFBSQm9vbCBhRGVsYXkpPTA7CiMg
MzM5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVTZWxlY3Rpb24uaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldERlbGF5Q2FyZXRPdmVyRXhpc3RpbmdTZWxlY3Rpb24oUFJCb29sICph
RGVsYXkpPTA7CiMgMzQ5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRnJhbWVTZWxlY3Rp
b24uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlbGF5ZWRDYXJldERhdGEobnNNb3VzZUV2ZW50
ICphTW91c2VFdmVudCk9MDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWxheWVkQ2Fy
ZXREYXRhKG5zTW91c2VFdmVudCAqKmFNb3VzZUV2ZW50KT0wOwoKCgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldExpbWl0ZXIobnNJQ29udGVudCAqKmFMaW1pdGVyQ29udGVudCk9MDsKIyAzOTcg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZVNlbGVjdGlvbi5oIgp9OwojIDM3ICIu
Li8uLi9iYXNlL3NyYy9uc0ZyYW1lLmgiIDIKIyAxMDcgIi4uLy4uL2Jhc2Uvc3JjL25zRnJhbWUu
aCIKY2xhc3MgbnNGcmFtZSA6IHB1YmxpYyBuc0lGcmFtZQoKICAsIHB1YmxpYyBuc0lGcmFtZURl
YnVnCgp7CnB1YmxpYzoKCgoKCiAgZnJpZW5kIG5zcmVzdWx0IE5TX05ld0VtcHR5RnJhbWUobnNJ
UHJlc1NoZWxsKiBhU2hlbGwsIG5zSUZyYW1lKiogYUluc3RhbmNlUHRyUmVzdWx0KTsKCgoKICB2
b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwpOwoK
CgoKCiAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCogYVB0ciwgc2l6ZV90IHN6KTsKCnByaXZh
dGU6CgoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6KSB0aHJvdyAoKSB7IHJldHVybiAw
OyB9OwoKCgoKcHVibGljOgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBRdWVyeUludGVyZmFjZShjb25z
dCBuc0lJRCYgYUlJRCwgdm9pZCoqIGFJbnN0YW5jZVB0cik7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEluaXQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgIG5z
SUNvbnRlbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQYXJlbnQs
CiAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFDb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgbnNJRnJhbWUqIGFzUHJldkluRmxvdyk7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJ
bml0aWFsQ2hpbGRMaXN0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUNoaWxkTGlzdCk7CiAgdmlydHVhbCBuc3Jl
c3VsdCBBcHBlbmRGcmFtZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSUZyYW1lKiBhRnJhbWVMaXN0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydEZyYW1l
cyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQ
cmV2RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWVMaXN0
KTsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUZyYW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxs
LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU9sZEZyYW1lKTsKICB2aXJ0dWFsIG5zcmVzdWx0
IFJlcGxhY2VGcmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJRnJhbWUqIGFPbGRGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUq
IGFOZXdGcmFtZSk7CiAgdmlydHVhbCBuc3Jlc3VsdCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQpOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVudChuc0lDb250ZW50Kiog
YUNvbnRlbnQpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVDb250ZXh0KG5zSVN0
eWxlQ29udGV4dCoqIGFTdHlsZUNvbnRleHQpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
U3R5bGVDb250ZXh0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYUNvbnRleHQpOwogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0U3R5bGVEYXRhKG5zU3R5bGVTdHJ1Y3RJRCBhU0lELAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBuc1N0eWxlU3RydWN0KiYgYVN0eWxlU3RydWN0KSBjb25zdDsKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFN0eWxlKG5zU3R5bGVTdHJ1Y3RJRCBhU0lELCBuc1N0eWxlU3Ry
dWN0JiBhU3RydWN0KSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IENhbGNCb3JkZXJQYWRkaW5n
KG5zTWFyZ2luJiBhQm9yZGVyUGFkZGluZykgY29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRB
ZGRpdGlvbmFsU3R5bGVDb250ZXh0KFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiogYVN0eWxlQ29udGV4dCkgY29u
c3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBZGRpdGlvbmFsU3R5bGVDb250ZXh0KFBSSW50MzIg
YUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVD
b250ZXh0KiBhU3R5bGVDb250ZXh0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhcmVudChuc0lG
cmFtZSoqIGFQYXJlbnQpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFyZW50KGNvbnN0
IG5zSUZyYW1lKiBhUGFyZW50KTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlY3QobnNSZWN0JiBh
UmVjdCkgY29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPcmlnaW4obnNQb2ludCYgYVBvaW50
KSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpemUobnNTaXplJiBhU2l6ZSkgY29uc3Q7
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRSZWN0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs
IGNvbnN0IG5zUmVjdCYgYVJlY3QpOwogIHZpcnR1YWwgbnNyZXN1bHQgTW92ZVRvKG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsIG5zY29vcmQgYVgsIG5zY29vcmQgYVkpOwogIHZpcnR1YWwg
bnNyZXN1bHQgU2l6ZVRvKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zY29vcmQgYVdp
ZHRoLCBuc2Nvb3JkIGFIZWlnaHQpOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWRkaXRpb25hbENo
aWxkTGlzdE5hbWUoUFJJbnQzMiBhSW5kZXgsIG5zSUF0b20qKiBhTGlzdE5hbWUpIGNvbnN0Owog
IHZpcnR1YWwgbnNyZXN1bHQgRmlyc3RDaGlsZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJRnJhbWUqKiBhRmlyc3RDaGlsZCkgY29uc3Q7CiAgdmlydHVhbCBu
c3Jlc3VsdCBQYWludChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAgICAgICAgICAgICAgICBu
c0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllcik7CiAgdmlydHVhbCBuc3Jlc3VsdCBIYW5kbGVF
dmVudChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zR1VJRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0V2ZW50
U3RhdHVzKiBhRXZlbnRTdGF0dXMpOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVudEZvckV2
ZW50KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJQ29udGVudCoqIGFDb250ZW50KTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1cnNvcihu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBuc1Bv
aW50JiBhUG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzImIGFDdXJzb3IpOwog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVGb3JQb2ludChuc0lQcmVzQ29udGV4dCogYVByZXND
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNQb2ludCYgYVBv
aW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGcmFtZVBhaW50TGF5ZXIgYVdo
aWNoTGF5ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFGcmFt
ZSk7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UG9pbnRGcm9tT2Zmc2V0KG5zSVByZXNDb250ZXh0
KiBpblByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5k
ZXJpbmdDb250ZXh0KiBpblJlbmRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkludDMyIGluT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c1BvaW50KiBvdXRQb2ludCk7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2hpbGRGcmFtZUNvbnRh
aW5pbmdPZmZzZXQoUFJJbnQzMiBpbkNvbnRlbnRPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSQm9vbCBpbkhpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSSW50MzIqIG91dEZyYW1lQ29udGVudE9mZnNldCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJRnJhbWUqICpvdXRDaGlsZEZyYW1lKTsKCiAgc3RhdGljIG5zcmVzdWx0
IEdldE5leHRQcmV2TGluZUZyb21lQmxvY2tGcmFtZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250
ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNQZWVrT2Zmc2V0
U3RydWN0ICphUG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
RnJhbWUgKmFCbG9ja0ZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJJbnQzMiBhTGluZVN0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJJbnQ4IGFPdXRTaWRlTGltaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVTdGF0ZShuc0ZyYW1lU3Rh
dGUqIGFSZXN1bHQpOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RnJhbWVTdGF0ZShuc0ZyYW1lU3Rh
dGUgYU5ld1N0YXRlKTsKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb250ZW50Q2hhbmdlZChuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNv
bnRlbnQqIGFDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyog
YVN1YkNvbnRlbnQpOwogIHZpcnR1YWwgbnNyZXN1bHQgQXR0cmlidXRlQ2hhbmdlZChuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
Q29udGVudCogYUNoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBh
TmFtZVNwYWNlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0
cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSGludCk7CiAg
dmlydHVhbCBuc3Jlc3VsdCBDb250ZW50U3RhdGVDaGFuZ2VkKG5zSVByZXNDb250ZXh0KiBhUHJl
c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBh
Q2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFIaW50KTsK
ICB2aXJ0dWFsIG5zcmVzdWx0IElzU3BsaXR0YWJsZShuc1NwbGl0dGFibGVUeXBlJiBhSXNTcGxp
dHRhYmxlKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZXZJbkZsb3cobnNJRnJhbWUq
KiBhUHJldkluRmxvdykgY29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQcmV2SW5GbG93KG5z
SUZyYW1lKik7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROZXh0SW5GbG93KG5zSUZyYW1lKiogYU5l
eHRJbkZsb3cpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TmV4dEluRmxvdyhuc0lGcmFt
ZSopOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Vmlldyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250
ZXh0LCBuc0lWaWV3KiogYVZpZXcpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Vmlldyhu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBuc0lWaWV3KiBhVmlldyk7CiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRQYXJlbnRXaXRoVmlldyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBu
c0lGcmFtZSoqIGFQYXJlbnQpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T2Zmc2V0RnJv
bVZpZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNQb2ludCYgYU9mZnNldCwgbnNJ
VmlldyoqIGFWaWV3KSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpbmRvdyhuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0LCBuc0lXaWRnZXQqKikgY29uc3Q7CiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRGcmFtZVR5cGUobnNJQXRvbSoqIGFUeXBlKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVz
dWx0IElzUGVyY2VudGFnZUJhc2UoUFJCb29sJiBhQmFzZSkgY29uc3Q7CiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXROZXh0U2libGluZyhuc0lGcmFtZSoqIGFOZXh0U2libGluZykgY29uc3Q7CiAgdmly
dHVhbCBuc3Jlc3VsdCBTZXROZXh0U2libGluZyhuc0lGcmFtZSogYU5leHRTaWJsaW5nKTsKICB2
aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbGVkKG5zSVZpZXcgKmFWaWV3KTsKCiAgdmlydHVhbCBuc3Jl
c3VsdCBMaXN0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIEZJTEUqIG91dCwgUFJJbnQz
MiBhSW5kZW50KSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lTmFtZShuc1N0cmlu
ZyYgYVJlc3VsdCkgY29uc3Q7CiAgdmlydHVhbCBuc3Jlc3VsdCBEdW1wUmVncmVzc2lvbkRhdGEo
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgRklMRSogb3V0LCBQUkludDMyIGFJbmRlbnQs
IFBSQm9vbCBhSW5jbHVkZVN0eWxlRGF0YSk7CiAgdmlydHVhbCBuc3Jlc3VsdCBTaXplT2YobnNJ
U2l6ZU9mSGFuZGxlciogYUhhbmRsZXIsIFBSVWludDMyKiBhUmVzdWx0KSBjb25zdDsKICB2aXJ0
dWFsIG5zcmVzdWx0IFZlcmlmeVRyZWUoKSBjb25zdDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
U2VsZWN0ZWQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRE9NUmFuZ2UgKmFSYW5n
ZSxQUkJvb2wgYVNlbGVjdGVkLCBuc1NwcmVhZCBhU3ByZWFkKTsKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldFNlbGVjdGVkKFBSQm9vbCAqYVNlbGVjdGVkKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0
IElzU2VsZWN0YWJsZShQUkJvb2wqIGFJc1NlbGVjdGFibGUsIFBSVWludDgqIGFTZWxlY3RTdHls
ZSkgY29uc3Q7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VsZWN0aW9uQ29udHJvbGxlcihuc0lQ
cmVzQ29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lTZWxlY3Rpb25Db250cm9sbGVyICoqYVNlbENv
bik7CiAgdmlydHVhbCBuc3Jlc3VsdCBQZWVrT2Zmc2V0KG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsIG5zUGVla09mZnNldFN0cnVjdCAqYVBvcykgOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2hl
Y2tWaXNpYmlsaXR5KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCwgUFJJbnQzMiBhU3RhcnRJbmRl
eCwgUFJJbnQzMiBhRW5kSW5kZXgsIFBSQm9vbCBhUmVjdXJzZSwgUFJCb29sICphRmluaXNoZWQs
IFBSQm9vbCAqX3JldHZhbCk7CgogIHZpcnR1YWwgbnNyZXN1bHQgUGVla09mZnNldFBhcmFncmFw
aChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNQZWVrT2Zmc2V0U3RydWN0ICphUG9zKTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dE9mZnNldHMoUFJJbnQzMiAmYVN0YXJ0LCBQUkludDMyICZhRW5kKSBjb25zdDsKICB2aXJ0dWFs
IG5zcmVzdWx0IFJlZmxvd0RpcnR5Q2hpbGQobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lG
cmFtZSogYUNoaWxkKTsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZmxvd0NvbW1hbmROb3RpZnkobnNJ
UHJlc1NoZWxsKiBhUHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJUmVmbG93Q29tbWFuZCogYVJDLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJCb29sIGFDb21tYW5kQWRkZWQpOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhcmVudFN0eWxl
Q29udGV4dFByb3ZpZGVyKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFQcm92aWRlckZyYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDb250ZXh0UHJv
dmlkZXJSZWxhdGlvbnNoaXAmIGFSZWxhdGlvbnNoaXApOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJ
c1Zpc2libGVGb3JQYWludGluZyhuc0lQcmVzQ29udGV4dCAqIGFQcmVzQ29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJp
bmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFDaGVj
a1ZpcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYUlzVmlzaWJs
ZSk7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFdpbGxSZWZsb3cobnNJUHJlc0NvbnRleHQqIGFQcmVz
Q29udGV4dCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZsb3cobnNJUHJlc0NvbnRleHQqIGFQcmVz
Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgbnNIVE1MUmVmbG93TWV0cmljcyYgYURlc2ly
ZWRTaXplLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVJl
Zmxvd1N0YXRlLAogICAgICAgICAgICAgICAgICAgICBuc1JlZmxvd1N0YXR1cyYgYVN0YXR1cyk7
CiAgdmlydHVhbCBuc3Jlc3VsdCBEaWRSZWZsb3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNEaWRSZWZsb3dTdGF0dXMgYVN0YXR1cyk7CiAg
dmlydHVhbCBuc3Jlc3VsdCBDYW5Db250aW51ZVRleHRSdW4oUFJCb29sJiBhQ29udGludWVUZXh0
UnVuKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IEFkanVzdEZyYW1lU2l6ZShuc2Nvb3JkIGFF
eHRyYVNwYWNlLCBuc2Nvb3JkJiBhVXNlZFNwYWNlKTsKICB2aXJ0dWFsIG5zcmVzdWx0IFRyaW1U
cmFpbGluZ1doaXRlU3BhY2UobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYVJDLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkJiBhRGVsdGFXaWR0aCk7CgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZVByZXNzKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0dVSUV2ZW50ICogYUV2ZW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYUV2ZW50U3RhdHVzKTsKCiAgdmly
dHVhbCBuc3Jlc3VsdCBIYW5kbGVNdWx0aXBsZVByZXNzKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0dVSUV2ZW50ICogYUV2ZW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYUV2ZW50U3RhdHVzKTsKCiAgdmly
dHVhbCBuc3Jlc3VsdCBIYW5kbGVEcmFnKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgIG5zR1VJRXZlbnQgKiBhRXZlbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgIG5zRXZlbnRTdGF0dXMqIGFFdmVudFN0YXR1cyk7CgogIHZpcnR1YWwgbnNyZXN1
bHQgSGFuZGxlUmVsZWFzZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0dVSUV2ZW50ICogYUV2ZW50LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0V2ZW50U3RhdHVzKiBhRXZlbnRTdGF0dXMpOwoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldENvbnRlbnRBbmRPZmZzZXRzRnJvbVBvaW50KG5zSVByZXNDb250ZXh0KiBhQ1gsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1BvaW50JiBhUG9p
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50
ICoqIGFOZXdDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJJbnQzMiYgYUNvbnRlbnRPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUkludDMyJiBhQ29udGVudE9mZnNldEVuZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCYgYUJlZ2luRnJhbWVDb250ZW50KTsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFBlZWtCYWNrd2FyZEFuZEZvcndhcmQobnNTZWxlY3Rpb25BbW91
bnQgYUFtb3VudEJhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU2Vs
ZWN0aW9uQW1vdW50IGFBbW91bnRGb3J3YXJkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUkludDMyIGFTdGFydFBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJCb29sIGFKdW1wTGluZXMpOwoKCgoKCgoKICB2b2lkIEludmFsaWRh
dGUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG5zUmVjdCYgYURhbWFnZVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBQUkJv
b2wgYUltbWVkaWF0ZSA9IDApIGNvbnN0OwoKCgogIHN0YXRpYyBQUkludDMyIENvbnRlbnRJbmRl
eEluQ29udGFpbmVyKGNvbnN0IG5zSUZyYW1lKiBhRnJhbWUpOwoKCgoKCgogIFBSQm9vbCBJc0Zy
YW1lVHJlZVRvb0RlZXAoY29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dTdGF0ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSFRNTFJlZmxvd01ldHJpY3MmIGFNZXRyaWNzKTsK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbG9zZXN0Vmlld0ZvckZyYW1lKG5zSVByZXNDb250ZXh0
KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSUZyYW1lICphRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVZpZXcgKiphVmlldyk7CgogIHN0YXRpYyBuc3Jlc3VsdCBDcmVhdGVBbmRQb3N0UmVm
bG93Q29tbWFuZChuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhVGFyZ2V0RnJhbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlZmxvd0NvbW1hbmQ6OlJl
Zmxvd1R5cGUgYVJlZmxvd1R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSUZyYW1lKiBhQ2hpbGRGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lKTsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgQ2FwdHVyZU1vdXNlKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs
IFBSQm9vbCBhR3JhYk1vdXNlRXZlbnRzKTsKICBQUkJvb2wgSXNNb3VzZUNhcHR1cmVkKG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwojIDM5MSAiLi4vLi4vYmFzZS9zcmMvbnNGcmFtZS5o
IgogIHZvaWQgVHJhY2UoY29uc3QgY2hhciogYU1ldGhvZCwgUFJCb29sIGFFbnRlcik7CiAgdm9p
ZCBUcmFjZShjb25zdCBjaGFyKiBhTWV0aG9kLCBQUkJvb2wgYUVudGVyLCBuc1JlZmxvd1N0YXR1
cyBhU3RhdHVzKTsKICB2b2lkIFRyYWNlTXNnKGNvbnN0IGNoYXIqIGZtdCwgLi4uKTsKCgoKICBz
dGF0aWMgdm9pZCBWZXJpZnlEaXJ0eUJpdFNldChuc0lGcmFtZSogYUZyYW1lTGlzdCk7CgogIHZv
aWQgTGlzdFRhZyhGSUxFKiBvdXQpIGNvbnN0IHsKICAgIExpc3RUYWcob3V0LCAobnNJRnJhbWUq
KXRoaXMpOwogIH0KCiAgc3RhdGljIHZvaWQgTGlzdFRhZyhGSUxFKiBvdXQsIG5zSUZyYW1lKiBh
RnJhbWUpIHsKICAgIG5zQXV0b1N0cmluZyB0bXA7CiAgICBuc0lGcmFtZURlYnVnKiBmcmFtZURl
YnVnOwoKICAgIGlmICgoISgoYUZyYW1lLT5RdWVyeUludGVyZmFjZShuc0NPTVR5cGVJbmZvPG5z
SUZyYW1lRGVidWc+OjpHZXRJSUQoKSwgKHZvaWQqKikmZnJhbWVEZWJ1ZykpICYgMHg4MDAwMDAw
MCkpKSB7CiAgICAgIGZyYW1lRGVidWctPkdldEZyYW1lTmFtZSh0bXApOwogICAgfQogICAgZnB1
dHModG1wLCBvdXQpOwogICAgZnByaW50ZihvdXQsICJAJXAiLCBhRnJhbWUpOwogIH0KCiAgc3Rh
dGljIHZvaWQgSW5kZW50QnkoRklMRSogb3V0LCBQUkludDMyIGFJbmRlbnQpIHsKICAgIHdoaWxl
ICgtLWFJbmRlbnQgPj0gMCkgZnB1dHMoIiAgIiwgb3V0KTsKICB9CiMgNDI3ICIuLi8uLi9iYXNl
L3NyYy9uc0ZyYW1lLmgiCiAgdmlydHVhbCB2b2lkIER1bXBCYXNlUmVncmVzc2lvbkRhdGEobnNJ
UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgRklMRSogb3V0LCBQUkludDMyIGFJbmRlbnQsIFBS
Qm9vbCBhSW5jbHVkZVN0eWxlRGF0YSk7CgogIG5zcmVzdWx0IE1ha2VGcmFtZU5hbWUoY29uc3Qg
Y2hhciogYUtpbmQsIG5zU3RyaW5nJiBhUmVzdWx0KSBjb25zdDsKCgpwcm90ZWN0ZWQ6CgogIG5z
RnJhbWUoKTsKICB2aXJ0dWFsIH5uc0ZyYW1lKCk7CgogIFBSSW50MTYgRGlzcGxheVNlbGVjdGlv
bihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBQUkJvb2wgaXNPa1RvVHVybk9uID0gMCk7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lRnJvbURpcmVjdGlvbihuc0lQcmVzQ29udGV4
dCogYVByZXNDb250ZXh0LCBuc1BlZWtPZmZzZXRTdHJ1Y3QgKmFQb3MpOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBEaWRTZXRTdHlsZUNvbnRleHQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7
CgoKICBuc3Jlc3VsdCBHZXRTZWxlY3Rpb25Gb3JWaXNDaGVjayhuc0lQcmVzQ29udGV4dCAqIGFQ
cmVzQ29udGV4dCwgbnNJU2VsZWN0aW9uKiogYVNlbGVjdGlvbik7CgoKICBzdGF0aWMgUFJJbnQz
MiBHZXRMaW5lTnVtYmVyKG5zSUZyYW1lICphRnJhbWUpOwoKICBzdGF0aWMgdm9pZCBHZXRMYXN0
TGVhZihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBuc0lGcmFtZSAqKmFGcmFtZSk7CiAg
c3RhdGljIHZvaWQgR2V0Rmlyc3RMZWFmKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5z
SUZyYW1lICoqYUZyYW1lKTsKIyA0NjIgIi4uLy4uL2Jhc2Uvc3JjL25zRnJhbWUuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldERhdGFGb3JUYWJsZVNlbGVjdGlvbihuc0lGcmFtZVNlbGVjdGlvbiAq
YUZyYW1lU2VsZWN0aW9uLCBuc01vdXNlRXZlbnQgKmFNb3VzZUV2ZW50LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQgKiphUGFyZW50Q29udGVudCwgUFJJ
bnQzMiAqYUNvbnRlbnRPZmZzZXQsIFBSSW50MzIgKmFUYXJnZXQpOwoKICBzdGF0aWMgdm9pZCBY
TUxRdW90ZShuc1N0cmluZyYgYVN0cmluZyk7CgoKCiAgdm9pZCBTZXREZWZhdWx0QmFja2dyb3Vu
ZENvbG9yKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwoKICB2aXJ0dWFsIFBSQm9vbCBQ
YXJlbnREaXNhYmxlc1NlbGVjdGlvbigpIGNvbnN0OwoKCgoKCiAgdm9pZCBTZXRPdmVyZmxvd0Ns
aXBSZWN0KG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0KTsKCiAgbnNSZWN0
IG1SZWN0OwogIG5zSUNvbnRlbnQqIG1Db250ZW50OwogIG5zSVN0eWxlQ29udGV4dCogbVN0eWxl
Q29udGV4dDsKICBuc0lGcmFtZSogbVBhcmVudDsKICBuc0lGcmFtZSogbU5leHRTaWJsaW5nOwog
IG5zRnJhbWVTdGF0ZSBtU3RhdGU7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCBuc3JlZmNudCBBZGRS
ZWYodm9pZCk7CiAgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpOwp9OwojIDI2ICIuLi8u
Li9iYXNlL3NyYy9uc0xlYWZGcmFtZS5oIiAyCgoKCgoKCgpjbGFzcyBuc0xlYWZGcmFtZSA6IHB1
YmxpYyBuc0ZyYW1lIHsKcHVibGljOgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQYWludChuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29u
dGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3Qm
IGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hM
YXllcik7CiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZsb3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICBuc0hUTUxSZWZsb3dNZXRyaWNzJiBhRGVzaXJlZFNp
emUsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dT
dGF0ZSwKICAgICAgICAgICAgICAgICAgICBuc1JlZmxvd1N0YXR1cyYgYVN0YXR1cyk7CiAgdmly
dHVhbCBuc3Jlc3VsdCBDb250ZW50Q2hhbmdlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIGFTdWJDb250ZW50KTsKCiAgdmlydHVh
bCBuc3Jlc3VsdCBTaXplT2YobnNJU2l6ZU9mSGFuZGxlciogYUhhbmRsZXIsIFBSVWludDMyKiBh
UmVzdWx0KSBjb25zdDsKCgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCB+bnNMZWFmRnJhbWUoKTsKCgoK
CgoKCiAgdmlydHVhbCB2b2lkIEdldERlc2lyZWRTaXplKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zSFRNTFJlZmxvd1N0
YXRlJiBhUmVmbG93U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSFRNTFJl
Zmxvd01ldHJpY3MmIGFEZXNpcmVkU2l6ZSkgPSAwOwoKCgoKICB2b2lkIEFkZEJvcmRlcnNBbmRQ
YWRkaW5nKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVJlZmxvd1N0YXRlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNIVE1MUmVmbG93TWV0cmljcyYgYURlc2lyZWRTaXplLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNNYXJnaW4mIGFCb3JkZXJQYWRkaW5nKTsKfTsKIyAz
MSAibnNGb3JtQ29udHJvbEhlbHBlci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zQ29vcmQuaCIgMQojIDMyICJuc0Zvcm1Db250cm9sSGVscGVyLmgiIDIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDEKIyAzMyAibnNGb3JtQ29udHJv
bEhlbHBlci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0
LmgiIDEKIyAzOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5b3V0LmgiIDEKIyAzOSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDQwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJUHJlc0NvbnRleHQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1JlY3Qu
aCIgMQojIDQxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIgMgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NvbG9yLmgiIDEKIyA0MiAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJRnJhbWVJbWFnZUxvYWRlci5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGcmFtZUltYWdlTG9hZGVyLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zbGF5b3V0LmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZyYW1l
SW1hZ2VMb2FkZXIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0
cy5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZUltYWdlTG9hZGVy
LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb2xvci5oIiAxCiMgMjggIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGcmFtZUltYWdlTG9hZGVyLmgiIDIKCmNsYXNzIG5z
SUZyYW1lOwpjbGFzcyBuc0lJbWFnZTsKY2xhc3MgbnNJSW1hZ2VHcm91cDsKY2xhc3MgbnNJUHJl
c0NvbnRleHQ7CmNsYXNzIG5zU3RyaW5nOwpzdHJ1Y3QgbnNTaXplOwoKCgoKCmVudW0gbnNJbWFn
ZUFuaW1hdGlvbiB7CiAgICBlSW1hZ2VBbmltYXRpb25fTm9ybWFsID0gMCwKICAgIGVJbWFnZUFu
aW1hdGlvbl9Ob25lID0gMSwKICAgIGVJbWFnZUFuaW1hdGlvbl9Mb29wT25jZSA9IDIKfTsKCgoK
CmNsYXNzIG5zSUZyYW1lSW1hZ2VMb2FkZXI7CnR5cGVkZWYgbnNyZXN1bHQgKCpuc0lGcmFtZUlt
YWdlTG9hZGVyQ0IpKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lSW1hZ2VMb2FkZXIqIGFMb2FkZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJh
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFDbG9z
dXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBh
U3RhdHVzKTsKCgoKCgoKCmNsYXNzIG5zSUZyYW1lSW1hZ2VMb2FkZXIgOiBwdWJsaWMgbnNJU3Vw
cG9ydHMgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIG5z
SUlEIGlpZCA9IHsgMHhhNmNmOTBlYywgMHgxNWIzLCAweDExZDIsezB4OTMsIDB4MmUsIDB4MDAs
IDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzJ9fTsgcmV0dXJuIGlpZDt9CgogIHZpcnR1YWwg
bnNyZXN1bHQgSW5pdChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAg
ICAgICBuc0lJbWFnZUdyb3VwKiBhR3JvdXAsCiAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3Ry
aW5nJiBhVVJMLAogICAgICAgICAgICAgICAgICBjb25zdCBuc2NvbG9yKiBhQmFja2dyb3VuZENv
bG9yLAogICAgICAgICAgICAgICAgICBjb25zdCBuc1NpemUqIGFEZXNpcmVkU2l6ZSwKICAgICAg
ICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgbnNJbWFnZUFu
aW1hdGlvbiBhQW5pbWF0aW9uTW9kZSwKICAgICAgICAgICAgICAgICAgbnNJRnJhbWVJbWFnZUxv
YWRlckNCIGFDYWxsQmFjaywKICAgICAgICAgICAgICAgICAgdm9pZCogYUNsb3N1cmUsIHZvaWQq
IGFLZXkpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBTdG9wSW1hZ2VMb2FkKFBSQm9vbCBhU3Rv
cENocm9tZSA9IDEpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBBYm9ydEltYWdlTG9hZCgpID0g
MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1NhbWVJbWFnZVJlcXVlc3QoY29uc3QgbnNTdHJpbmcm
IGFVUkwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNjb2xvciogYUJh
Y2tncm91bmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1Np
emUqIGFEZXNpcmVkU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wq
IGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRGcmFtZShuc0lGcmFtZSogYUZy
YW1lLCBuc0lGcmFtZUltYWdlTG9hZGVyQ0IgYUNhbGxCYWNrLAogICAgICAgICAgICAgICAgICAg
ICAgdm9pZCogYUNsb3N1cmUsIHZvaWQqIGFLZXkpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBS
ZW1vdmVGcmFtZSh2b2lkKiBhS2V5KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU2FmZVRvRGVz
dHJveShQUkJvb2wqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVUkwobnNT
dHJpbmcmIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZXNDb250ZXh0KG5z
SVByZXNDb250ZXh0KiogYVByZXNDb250ZXh0KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
SW1hZ2UobnNJSW1hZ2UqKiBhUmVzdWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNp
emUobnNTaXplJiBhUmVzdWx0KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW1hZ2VMb2Fk
U3RhdHVzKFBSVWludDMyKiBhTG9hZFN0YXR1cykgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0SW50cmluc2ljU2l6ZShuc1NpemUmIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldE5hdHVyYWxJbWFnZVNpemUoUFJVaW50MzIqIG5hdHVyYWxXaWR0aCwgUFJVaW50MzIgKm5h
dHVyYWxIZWlnaHQpID0gMDsKfTsKIyA0MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVBy
ZXNDb250ZXh0LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTGFuZ3VhZ2VB
dG9tLmgiIDEKIyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0Lmgi
IDIKCgoKCgoKc3RydWN0IG5zRm9udDsKCmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5zSURvY3Vt
ZW50OwpjbGFzcyBuc0lEZXZpY2VDb250ZXh0OwpjbGFzcyBuc0lGb250TWV0cmljczsKY2xhc3Mg
bnNJRnJhbWU7CmNsYXNzIG5zSUltYWdlOwpjbGFzcyBuc0lJbWFnZUdyb3VwOwpjbGFzcyBuc0lM
aW5rSGFuZGxlcjsKY2xhc3MgbnNJUHJlc1NoZWxsOwpjbGFzcyBuc0lQcmVmOwpjbGFzcyBuc0lT
dHlsZUNvbnRleHQ7CmNsYXNzIG5zSUF0b207CmNsYXNzIG5zU3RyaW5nOwpjbGFzcyBuc0lFdmVu
dFN0YXRlTWFuYWdlcjsKY2xhc3MgbnNJVVJJOwpjbGFzcyBuc0lMb29rQW5kRmVlbDsKY2xhc3Mg
bnNJQ1NTUHNldWRvQ29tcGFyYXRvcjsKCgpjbGFzcyBuc0lSZW5kZXJpbmdDb250ZXh0OwoKCgoK
CgplbnVtIG5zQ29tcGF0aWJpbGl0eSB7CiAgZUNvbXBhdGliaWxpdHlfU3RhbmRhcmQgPSAxLAog
IGVDb21wYXRpYmlsaXR5X05hdlF1aXJrcyA9IDIKfTsKCmVudW0gbnNXaWRnZXRSZW5kZXJpbmcg
ewogIGVXaWRnZXRSZW5kZXJpbmdfTmF0aXZlID0gMSwKICBlV2lkZ2V0UmVuZGVyaW5nX0dmeCA9
IDIsCiAgZVdpZGdldFJlbmRlcmluZ19QYXJ0aWFsR2Z4ID0gMwp9OwoKZW51bSBuc1dpZGdldFR5
cGUgewogIGVXaWRnZXRUeXBlX0J1dHRvbiA9IDEsCiAgZVdpZGdldFR5cGVfQ2hlY2tib3ggPSAy
LAogIGVXaWRnZXRUeXBlX1JhZGlvID0gMywKICBlV2lkZ2V0VHlwZV9UZXh0ID0gNAp9OwoKZW51
bSBuc0xhbmd1YWdlU3BlY2lmaWNUcmFuc2Zvcm1UeXBlIHsKICBlTGFuZ3VhZ2VTcGVjaWZpY1Ry
YW5zZm9ybVR5cGVfVW5rbm93biA9IC0xLAogIGVMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3JtVHlw
ZV9Ob25lID0gMCwKICBlTGFuZ3VhZ2VTcGVjaWZpY1RyYW5zZm9ybVR5cGVfSmFwYW5lc2UsCiAg
ZUxhbmd1YWdlU3BlY2lmaWNUcmFuc2Zvcm1UeXBlX0tvcmVhbgp9OwoKCmNvbnN0IFBSVWludDMy
IGtQcmVzQ29udGV4dF9Vc2VEb2N1bWVudENvbG9ycyA9IDB4MDE7CmNvbnN0IFBSVWludDMyIGtQ
cmVzQ29udGV4dF9Vc2VEb2N1bWVudEZvbnRzID0gMHgwMjsKY29uc3QgUFJVaW50MzIga1ByZXND
b250ZXh0X1VuZGVybGluZUxpbmtzID0gMHgwMzsKCgoKY2xhc3MgbnNJUHJlc0NvbnRleHQgOiBw
dWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo
KSB7IHN0YXRpYyBuc0lJRCBpaWQgPSB7IDB4MGE1ZDEyZTAsIDB4OTQ0ZSwgMHgxMWQxLCB7MHg5
MywgMHgyMywgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMn0gfTsgcmV0dXJuIGlp
ZDsgfQoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJRGV2aWNlQ29udGV4dCogYURldmlj
ZUNvbnRleHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3RvcChQUkJvb2wgYVN0b3BD
aHJvbWUgPSAxKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNoZWxsKG5zSVByZXNT
aGVsbCogYVNoZWxsKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2hlbGwobnNJUHJl
c1NoZWxsKiogYVJlc3VsdCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbXBhdGli
aWxpdHlNb2RlKG5zQ29tcGF0aWJpbGl0eSogYU1vZGVSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5z
cmVzdWx0IFNldENvbXBhdGliaWxpdHlNb2RlKG5zQ29tcGF0aWJpbGl0eSBhTW9kZSkgPSAwOwoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpZGdldFJlbmRlcmluZ01vZGUobnNXaWRnZXRSZW5k
ZXJpbmcqIGFNb2RlUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRXaWRnZXRSZW5k
ZXJpbmdNb2RlKG5zV2lkZ2V0UmVuZGVyaW5nIGFNb2RlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0SW1hZ2VBbmltYXRpb25Nb2RlKG5zSW1hZ2VBbmltYXRpb24qIGFNb2RlUmVzdWx0
KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbWFnZUFuaW1hdGlvbk1vZGUobnNJbWFnZUFu
aW1hdGlvbiBhTW9kZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExvb2tBbmRGZWVs
KG5zSUxvb2tBbmRGZWVsKiogYUxvb2tBbmRGZWVsKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0QmFzZVVSTChuc0lVUkkqKiBhVVJMUmVzdWx0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0TWVkaXVtKG5zSUF0b20qKiBhTWVkaXVtUmVzdWx0KSA9IDA7CgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgUmVtYXBTdHlsZUFuZFJlZmxvdyh2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IFJlc29sdmVTdHlsZUNvbnRleHRGb3IobnNJQ29udGVudCogYUNvbnRlbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVu
dENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRm9y
Y2VVbmlxdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29u
dGV4dCoqIGFSZXN1bHQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc29sdmVQc2V1
ZG9TdHlsZUNvbnRleHRGb3IobnNJQ29udGVudCogYVBhcmVudENvbnRlbnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UYWcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBh
cmVudENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
Qm9vbCBhRm9yY2VVbmlxdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVN0eWxlQ29udGV4dCoqIGFSZXN1bHQpID0gMDsKIyAyMDIgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzb2x2ZVBz
ZXVkb1N0eWxlV2l0aENvbXBhcmF0b3IobnNJQ29udGVudCogYVBhcmVudENvbnRlbnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhUHNldWRv
VGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5
bGVDb250ZXh0KiBhUGFyZW50Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSQm9vbCBhRm9yY2VVbmlxdWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDU1NQc2V1ZG9Db21wYXJhdG9yKiBhQ29tcGFy
YXRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0
eWxlQ29udGV4dCoqIGFSZXN1bHQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQcm9i
ZVBzZXVkb1N0eWxlQ29udGV4dEZvcihuc0lDb250ZW50KiBhUGFyZW50Q29udGVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UYWcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFQ
YXJlbnRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJC
b29sIGFGb3JjZVVuaXF1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSVN0eWxlQ29udGV4dCoqIGFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
UmVQYXJlbnRTdHlsZUNvbnRleHQobnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYU5ld1BhcmVudENvbnRleHQpID0gMDsK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWV0cmljc0Zvcihjb25zdCBuc0ZvbnQmIGFGb250
LCBuc0lGb250TWV0cmljcyoqIGFSZXN1bHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
RGVmYXVsdEZvbnQobnNGb250JiBhUmVzdWx0KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
RGVmYXVsdEZvbnQoY29uc3QgbnNGb250JiBhRm9udCkgPSAwOwogIHZpcnR1YWwgY29uc3QgbnNG
b250JiBHZXREZWZhdWx0Rm9udERlcHJlY2F0ZWQoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldERlZmF1bHRGaXhlZEZvbnQobnNGb250JiBhUmVzdWx0KSA9IDA7CgogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0RGVmYXVsdEZpeGVkRm9udChjb25zdCBuc0ZvbnQmIGFGb250KSA9IDA7CiAgdmly
dHVhbCBjb25zdCBuc0ZvbnQmIEdldERlZmF1bHRGaXhlZEZvbnREZXByZWNhdGVkKCkgPSAwOwoK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FjaGVkQm9vbFByZWYoUFJVaW50MzIgcHJlZlR5
cGUsIFBSQm9vbCAmYVZhbHVlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9udFNj
YWxlcihQUkludDMyKiBhUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb250U2Nh
bGVyKFBSSW50MzIgYVNjYWxlcikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1
bHRDb2xvcihuc2NvbG9yKiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1
bHRCYWNrZ3JvdW5kQ29sb3IobnNjb2xvciogYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXREZWZhdWx0QmFja2dyb3VuZEltYWdlKG5zU3RyaW5nJiBhSW1hZ2UpID0gMDsKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldERlZmF1bHRCYWNrZ3JvdW5kSW1hZ2VSZXBlYXQoUFJVaW50OCogYVJl
cGVhdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdEJhY2tncm91bmRJbWFnZU9m
ZnNldChuc2Nvb3JkKiBhWCwgbnNjb29yZCogYVkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dERlZmF1bHRCYWNrZ3JvdW5kSW1hZ2VBdHRhY2htZW50KFBSVWludDgqIGFSZXBlYXQpID0gMDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1bHRMaW5rQ29sb3IobnNjb2xvciogYUNvbG9yKSA9
IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0VmlzaXRlZExpbmtDb2xvcihuc2NvbG9y
KiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvY3VzQmFja2dyb3VuZENvbG9y
KG5zY29sb3IqIGFDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9jdXNUZXh0Q29s
b3IobnNjb2xvciogYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVc2VGb2N1c0Nv
bG9ycyhQUkJvb2wmIHVzZUZvY3VzQ29sb3JzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRG
b2N1c1JpbmdXaWR0aChQUlVpbnQ4ICpmb2N1c1JpbmdXaWR0aCkgPSAwOwogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0Rm9jdXNSaW5nT25Bbnl0aGluZyhQUkJvb2wmIGZvY3VzUmluZ09uQW55dGhpbmcp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGVmYXVsdENvbG9yKG5zY29sb3IgYUNvbG9y
KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0QmFja2dyb3VuZENvbG9yKG5zY29s
b3IgYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0QmFja2dyb3VuZElt
YWdlKGNvbnN0IG5zU3RyaW5nJiBhSW1hZ2UpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERl
ZmF1bHRCYWNrZ3JvdW5kSW1hZ2VSZXBlYXQoUFJVaW50OCBhUmVwZWF0KSA9IDA7CiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXREZWZhdWx0QmFja2dyb3VuZEltYWdlT2Zmc2V0KG5zY29vcmQgYVgsIG5z
Y29vcmQgYVkpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlZmF1bHRCYWNrZ3JvdW5kSW1h
Z2VBdHRhY2htZW50KFBSVWludDggYVJlcGVhdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
RGVmYXVsdExpbmtDb2xvcihuc2NvbG9yIGFDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg
U2V0RGVmYXVsdFZpc2l0ZWRMaW5rQ29sb3IobnNjb2xvciBhQ29sb3IpID0gMDsKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRJbWFnZUdyb3VwKG5zSUltYWdlR3JvdXAqKiBhR3JvdXBSZXN1bHQpID0g
MDsKIyAzMDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgU3RhcnRMb2FkSW1hZ2UoY29uc3QgbnNTdHJpbmcmIGFVUkwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc2NvbG9yKiBhQmFja2dyb3VuZENvbG9yLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTaXplKiBhRGVzaXJlZFNpemUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVRhcmdldEZyYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWVJbWFnZUxvYWRlckNCIGFDYWxsQmFjaywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFDbG9zdXJlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCogYUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZy
YW1lSW1hZ2VMb2FkZXIqKiBhUmVzdWx0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3Rv
cExvYWRJbWFnZSh2b2lkKiBhS2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFt
ZUltYWdlTG9hZGVyKiBhTG9hZGVyKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3RvcEFs
bExvYWRJbWFnZXNGb3IobnNJRnJhbWUqIGFUYXJnZXRGcmFtZSwgdm9pZCogYUtleSkgPSAwOwoK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbnRhaW5lcihuc0lTdXBwb3J0cyogYUNvbnRhaW5lcikg
PSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRhaW5lcihuc0lTdXBwb3J0cyoqIGFSZXN1
bHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGlua0hhbmRsZXIobnNJTGlua0hhbmRs
ZXIqIGFIYW5kbGVyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMaW5rSGFuZGxlcihuc0lM
aW5rSGFuZGxlcioqIGFSZXN1bHQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRW
aXNpYmxlQXJlYShuc1JlY3QmIGFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
U2V0VmlzaWJsZUFyZWEoY29uc3QgbnNSZWN0JiByKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IElzUGFnaW5hdGVkKFBSQm9vbCogYVJlc3VsdCkgPSAwOwojIDM2MCAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYWdl
RGltKG5zUmVjdCogYUFjdHVhbFJlY3QsIG5zUmVjdCogYUFkalJlY3QpID0gMDsKIyAzNjkgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcmVzQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgU2V0UGFnZURpbShuc1JlY3QqIGFSZWN0KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
UGl4ZWxzVG9Ud2lwcyhmbG9hdCogYVJlc3VsdCkgY29uc3QgPSAwOwoKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldFR3aXBzVG9QaXhlbHMoZmxvYXQqIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFNjYWxlZFBpeGVsc1RvVHdpcHMoZmxvYXQqIGFTY2FsZSkgY29u
c3QgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZXZpY2VDb250ZXh0KG5zSURldmljZUNv
bnRleHQqKiBhUmVzdWx0KSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXZlbnRT
dGF0ZU1hbmFnZXIobnNJRXZlbnRTdGF0ZU1hbmFnZXIqKiBhTWFuYWdlcikgPSAwOwogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0RGVmYXVsdERpcmVjdGlvbihQUlVpbnQ4KiBhRGlyZWN0aW9uKSA9IDA7
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0RGlyZWN0aW9uKFBSVWludDggYURpcmVjdGlv
bikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFuZ3VhZ2UobnNJTGFuZ3VhZ2VBdG9tKiog
YUxhbmd1YWdlKSA9IDA7CiMgMzk4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0Nv
bnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhbmd1YWdlU3BlY2lmaWNUcmFuc2Zvcm1U
eXBlKAogICAgICAgICAgICAgIG5zTGFuZ3VhZ2VTcGVjaWZpY1RyYW5zZm9ybVR5cGUqIGFUeXBl
KSA9IDA7CiMgNDkyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldElzUmVuZGVyaW5nT25seVNlbGVjdGlvbihQUkJvb2wgYVJl
c3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgSXNSZW5kZXJpbmdPbmx5U2VsZWN0aW9uKFBS
Qm9vbCogYVJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3VudFJlZmxvd3MoY29u
c3QgY2hhciAqIGFOYW1lLCBQUlVpbnQzMiBhVHlwZSwgbnNJRnJhbWUgKiBhRnJhbWUpID0gMDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFBhaW50Q291bnQoY29uc3QgY2hhciAqIGFOYW1lLCBuc0lSZW5k
ZXJpbmdDb250ZXh0KiBhUmVuZGluZ0NvbnRleHQsIG5zSUZyYW1lICogYUZyYW1lLCBQUlVpbnQz
MiBhQ29sb3IpID0gMDsKCn07CiMgNTA4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJl
c0NvbnRleHQuaCIKZXh0ZXJuIG5zcmVzdWx0CiAgTlNfTmV3R2FsbGV5Q29udGV4dChuc0lQcmVz
Q29udGV4dCoqIGFJbnN0YW5jZVB0clJlc3VsdCk7CgoKCmV4dGVybiBuc3Jlc3VsdAogIE5TX05l
d1ByaW50UHJldmlld0NvbnRleHQobnNJUHJlc0NvbnRleHQqKiBhSW5zdGFuY2VQdHJSZXN1bHQp
OwojIDM0ICJuc0Zvcm1Db250cm9sSGVscGVyLmgiIDIKCmNsYXNzIG5zSVZpZXc7CgpjbGFzcyBu
c1N0eWxlQ29vcmQ7CmNsYXNzIG5zRm9ybUZyYW1lOwojIDU0ICJuc0Zvcm1Db250cm9sSGVscGVy
LmgiCmVudW0gbnNNb3VzZVN0YXRlIHsKICBlTW91c2VOb25lLAogIGVNb3VzZUVudGVyLAogIGVN
b3VzZUV4aXQsCiAgZU1vdXNlRG93biwKICBlTW91c2VVcAp9OwoKc3RydWN0IG5zSW5wdXREaW1l
bnNpb25TcGVjCnsKICBuc0lBdG9tKiBtQ29sU2l6ZUF0dHI7CiAgUFJCb29sIG1Db2xTaXplQXR0
ckluUGl4ZWxzOwogIG5zSUF0b20qIG1Db2xWYWx1ZUF0dHI7CgogIG5zU3RyaW5nKiBtQ29sRGVm
YXVsdFZhbHVlOwogIG5zY29vcmQgbUNvbERlZmF1bHRTaXplOwogIFBSQm9vbCBtQ29sRGVmYXVs
dFNpemVJblBpeGVsczsKICBuc0lBdG9tKiBtUm93U2l6ZUF0dHI7CiAgbnNjb29yZCBtUm93RGVm
YXVsdFNpemU7CgogIG5zSW5wdXREaW1lbnNpb25TcGVjKG5zSUF0b20qIGFDb2xTaXplQXR0ciwg
UFJCb29sIGFDb2xTaXplQXR0ckluUGl4ZWxzLAogICAgICAgICAgICAgICAgICAgICAgIG5zSUF0
b20qIGFDb2xWYWx1ZUF0dHIsIG5zU3RyaW5nKiBhQ29sRGVmYXVsdFZhbHVlLAogICAgICAgICAg
ICAgICAgICAgICAgIG5zY29vcmQgYUNvbERlZmF1bHRTaXplLCBQUkJvb2wgYUNvbERlZmF1bHRT
aXplSW5QaXhlbHMsCiAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVJvd1NpemVBdHRy
LCBuc2Nvb3JkIGFSb3dEZWZhdWx0U2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICA6IG1Db2xT
aXplQXR0cihhQ29sU2l6ZUF0dHIpLCBtQ29sU2l6ZUF0dHJJblBpeGVscyhhQ29sU2l6ZUF0dHJJ
blBpeGVscyksCiAgICAgICAgICAgICAgICAgICAgICAgICBtQ29sVmFsdWVBdHRyKGFDb2xWYWx1
ZUF0dHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgbUNvbERlZmF1bHRWYWx1ZShhQ29sRGVm
YXVsdFZhbHVlKSwgbUNvbERlZmF1bHRTaXplKGFDb2xEZWZhdWx0U2l6ZSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICBtQ29sRGVmYXVsdFNpemVJblBpeGVscyhhQ29sRGVmYXVsdFNpemVJblBp
eGVscyksCiAgICAgICAgICAgICAgICAgICAgICAgICBtUm93U2l6ZUF0dHIoYVJvd1NpemVBdHRy
KSwgbVJvd0RlZmF1bHRTaXplKGFSb3dEZWZhdWx0U2l6ZSkKICB7CiAgfQoKfTsKIyA5NSAibnNG
b3JtQ29udHJvbEhlbHBlci5oIgpjbGFzcyBuc0Zvcm1Db250cm9sSGVscGVyCnsKCnB1YmxpYzoK
CgogIHN0YXRpYyBuc2Nvb3JkIENhbGN1bGF0ZVNpemUgKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4
dCogYVJlbmRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZvcm1D
b250cm9sRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBuc1NpemUmIGFDU1NTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSW5w
dXREaW1lbnNpb25TcGVjJiBhRGltZW5zaW9uU3BlYywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc1NpemUmIGFEZXNpcmVkU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc1NpemUmIGFNaW5TaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
Qm9vbCYgYVdpZHRoRXhwbGljaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJC
b29sJiBhSGVpZ2h0RXhwbGljaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNj
b29yZCYgYVJvd1NpemUpOwoKICBzdGF0aWMgbnNjb29yZCBHZXRUZXh0U2l6ZShuc0lQcmVzQ29u
dGV4dCogYUNvbnRleHQsIG5zSUZvcm1Db250cm9sRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBuc1N0cmluZyYgYVN0cmluZywgbnNTaXplJiBhU2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0ICphUmVuZENv
bnRleHQpOwoKICBzdGF0aWMgbnNjb29yZCBHZXRUZXh0U2l6ZShuc0lQcmVzQ29udGV4dCogYUNv
bnRleHQsIG5zSUZvcm1Db250cm9sRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUkludDMyIGFOdW1DaGFycywgbnNTaXplJiBhU2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0ICphUmVuZENvbnRleHQpOwoKICBzdGF0
aWMgbnNyZXN1bHQgR2V0Rm9udChuc0lGb3JtQ29udHJvbEZyYW1lICogYUZvcm1GcmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCAqIGFTdHlsZUNvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNGb250KiYgYUZvbnQpOwoKCiAgc3RhdGlj
IG5zcmVzdWx0IEdldEZyYW1lRm9udEZNKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZvcm1Db250cm9sRnJhbWUgKiBhRnJh
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZvbnRNZXRyaWNzKiogYUZv
bnRNZXQpOwoKICBzdGF0aWMgbnNjb29yZCBDYWxjTmF2UXVpcmtTaXppbmcobnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
UmVuZGVyaW5nQ29udGV4dCogYVJlbmRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lGb250TWV0cmljcyogYUZvbnRNZXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUZvcm1Db250cm9sRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJbnB1dERpbWVuc2lvblNwZWMmIGFTcGVjLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NpemUmIGFTaXplKTsKCiAgc3RhdGlj
IHZvaWQgRm9yY2VEcmF3RnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJh
bWUgKiBhRnJhbWUpOwoKCiAgc3RhdGljIHZvaWQgUGxhdGZvcm1Ub0RPTUxpbmVCcmVha3MobnNT
dHJpbmcgJmFTdHJpbmcpOwoKICBzdGF0aWMgbnNyZXN1bHQgR2V0VmFsdWUobnNJQ29udGVudCog
YUNvbnRlbnQsIG5zU3RyaW5nKiBhUmVzdWx0KTsKICBzdGF0aWMgbnNyZXN1bHQgR2V0TmFtZShu
c0lDb250ZW50KiBhQ29udGVudCwgbnNTdHJpbmcqIGFSZXN1bHQpOwogIHN0YXRpYyBuc3Jlc3Vs
dCBHZXRJbnB1dEVsZW1lbnRWYWx1ZShuc0lDb250ZW50KiBhQ29udGVudCwgbnNTdHJpbmcqIGFU
ZXh0LCBQUkJvb2wgYUluaXRpYWxWYWx1ZSk7CgoKCgoKCgogIHN0YXRpYyBQUkJvb2wgR2V0Qm9v
bChjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVZhbHVlKTsKIyAxNjIgIm5zRm9ybUNvbnRyb2xI
ZWxwZXIuaCIKICBzdGF0aWMgdm9pZCBHZXRCb29sU3RyaW5nKGNvbnN0IFBSQm9vbCBhVmFsdWUs
IG5zQVdyaXRhYmxlU3RyaW5nJiBhUmVzdWx0KTsKCiAgc3RhdGljIG5zQ29tcGF0aWJpbGl0eSBH
ZXRSZXBDaGFycyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBjaGFyJiBjaGFyMSwgY2hh
ciYgY2hhcjIpOwoKCiAgdHlwZWRlZiBlbnVtIHsKICAgIGVIVE1MVGV4dFdyYXBfT2ZmID0gMSwK
ICAgIGVIVE1MVGV4dFdyYXBfSGFyZCA9IDIsCiAgICBlSFRNTFRleHRXcmFwX1NvZnQgPSAzCiAg
fSBuc0hUTUxUZXh0V3JhcDsKCgoKCiAgc3RhdGljIG5zcmVzdWx0IEdldFdyYXBQcm9wZXJ0eShu
c0lDb250ZW50ICogYUNvbnRlbnQsIG5zU3RyaW5nICZhT3V0VmFsdWUpOwoKICBzdGF0aWMgbnNy
ZXN1bHQgR2V0V3JhcFByb3BlcnR5RW51bShuc0lDb250ZW50ICogYUNvbnRlbnQsIG5zSFRNTFRl
eHRXcmFwJiBhV3JhcFByb3ApOwoKCiAgc3RhdGljIG5zcmVzdWx0IEdldExvY2FsaXplZFN0cmlu
Zyhjb25zdCBjaGFyICogYVByb3BGaWxlTmFtZSwgY29uc3QgY2hhciogYUtleSwgbnNTdHJpbmcm
IG9WYWwpOwogIHN0YXRpYyBjb25zdCBjaGFyICogR2V0SFRNTFByb3BlcnRpZXNGaWxlTmFtZSgp
IHsgcmV0dXJuICJjaHJvbWU6Ly9jb21tdW5pY2F0b3IvbG9jYWxlL2xheW91dC9IdG1sRm9ybS5w
cm9wZXJ0aWVzIjsgfQoKICBzdGF0aWMgbnNyZXN1bHQgR2V0RGlzYWJsZWQobnNJQ29udGVudCog
YUNvbnRlbnQsIFBSQm9vbCogb0lzRGlzYWJsZWQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IERvTWFu
dWFsU3VibWl0T3JSZXNldChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGb3JtRnJh
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZv
cm1Db250cm9sRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UkJvb2wgYURvU3VibWl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJCb29sIGFEb0RPTUV2ZW50KTsKIyAyMTUgIm5zRm9ybUNvbnRyb2xIZWxwZXIuaCIKICBuc3Jl
c3VsdCBTZXRDdXJyZW50Q2hlY2tTdGF0ZShQUkJvb2wgYVN0YXRlKTsKIyAyMjQgIm5zRm9ybUNv
bnRyb2xIZWxwZXIuaCIKICBuc3Jlc3VsdCBHZXREZWZhdWx0Q2hlY2tTdGF0ZShQUkJvb2wqIGFT
dGF0ZSk7CiMgMjQwICJuc0Zvcm1Db250cm9sSGVscGVyLmgiCiAgIGVudW0gbnNBcnJvd0RpcmVj
dGlvbiB7CiAgICBlQXJyb3dEaXJlY3Rpb25fTGVmdCwKICAgIGVBcnJvd0RpcmVjdGlvbl9SaWdo
dCwKICAgIGVBcnJvd0RpcmVjdGlvbl9VcCwKICAgIGVBcnJvd0RpcmVjdGlvbl9Eb3duCiAgIH07
CiMgMjU5ICJuc0Zvcm1Db250cm9sSGVscGVyLmgiCiAgIHN0YXRpYyB2b2lkIFNldHVwUG9pbnRz
KFBSVWludDMyIGFOdW1iZXJPZlBvaW50cywgbnNjb29yZCogYVBvaW50cywKICAgICBuc1BvaW50
KiBhUG9seWdvbiwgbnNjb29yZCBhU2NhbGVGYWN0b3IsIG5zY29vcmQgYVgsIG5zY29vcmQgYVks
CiAgICAgbnNjb29yZCBhQ2VudGVyWCwgbnNjb29yZCBhQ2VudGVyWSk7CiMgMjc2ICJuc0Zvcm1D
b250cm9sSGVscGVyLmgiCiAgc3RhdGljIHZvaWQgUGFpbnRMaW5lKG5zSVJlbmRlcmluZ0NvbnRl
eHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgIG5zY29vcmQgYVNYLCBuc2Nv
b3JkIGFTWSwgbnNjb29yZCBhRVgsIG5zY29vcmQgYUVZLAogICAgICAgICAgICAgICAgIFBSQm9v
bCBhSG9yeiwgbnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYU9uZVBpeGVsKTsKIyAyODcgIm5zRm9y
bUNvbnRyb2xIZWxwZXIuaCIKICBzdGF0aWMgdm9pZCBQYWludEZpeGVkU2l6ZUNoZWNrTWFyayhu
c0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IGFQaXhlbHNUb1R3aXBzKTsKIyAyOTkgIm5zRm9ybUNv
bnRyb2xIZWxwZXIuaCIKICBzdGF0aWMgdm9pZCBQYWludENoZWNrTWFyayhuc0lSZW5kZXJpbmdD
b250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCBhUGl4ZWxzVG9Ud2lwcywgY29uc3QgbnNSZWN0ICYgYVJlY3QpOwojIDMxMCAibnNGb3Jt
Q29udHJvbEhlbHBlci5oIgogIHN0YXRpYyB2b2lkIFBhaW50Rml4ZWRTaXplQ2hlY2tNYXJrQm9y
ZGVyKG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgYVBpeGVsc1RvVHdpcHMsIGNvbnN0IG5zU3R5bGVDb2xvciYgYUJh
Y2tncm91bmRDb2xvcik7CiMgMzI3ICJuc0Zvcm1Db250cm9sSGVscGVyLmgiCiAgc3RhdGljIHZv
aWQgUGFpbnRSZWN0YW5ndWxhckJ1dHRvbihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYVJlbmRlcmlu
Z0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFEaXJ0
eVJlY3QsIGNvbnN0IG5zUmVjdCYgYVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UkJvb2wgYVNoaWZ0LCBQUkJvb2wgYVNob3dGb2N1cywgUFJCb29sIGFEaXNhYmxlZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSQm9vbCBhRHJhd091dGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQq
IGFPdXRsaW5lU3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFGb2N1c1N0eWxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhU3R5bGVDb250
ZXh0LCBuc1N0cmluZyYgYUxhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJh
bWUqIGFGb3JGcmFtZSk7Cgpwcm90ZWN0ZWQ6CiAgbnNGb3JtQ29udHJvbEhlbHBlcigpOwogIHZp
cnR1YWwgfm5zRm9ybUNvbnRyb2xIZWxwZXIoKTsKCgp9OwojIDI0ICJuc0Zvcm1Db250cm9sSGVs
cGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxQYXJ0cy5oIiAx
CiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxQYXJ0cy5oIgojIDEgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNIVE1MUGFydHMuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lT
dXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxQYXJ0cy5o
IiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVJlZmxvd0NvbW1hbmQuaCIgMQoj
IDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MUGFydHMuaCIgMgpjbGFzcyBuc0lB
cmVuYTsKY2xhc3MgbnNJQXRvbTsKY2xhc3MgbnNJTm9kZUluZm87CmNsYXNzIG5zSUNvbnRlbnQ7
CmNsYXNzIG5zSUNvbnRlbnRJdGVyYXRvcjsKY2xhc3MgbnNJRG9jdW1lbnQ7CmNsYXNzIG5zSUhU
TUxDb250ZW50OwpjbGFzcyBuc0lIVE1MQ29udGVudFNpbms7CmNsYXNzIG5zSUhUTUxGcmFnbWVu
dENvbnRlbnRTaW5rOwpjbGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJVGV4dENvbnRlbnQ7
CmNsYXNzIG5zSVVSSTsKY2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5zSVdlYlNoZWxsOwpjbGFzcyBu
c0lQcmVzU2hlbGw7CmNsYXNzIG5zSUNoYW5uZWw7CiMgNjAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0hUTUxQYXJ0cy5oIgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3R2VuZXJhdGVkQ29udGVu
dEl0ZXJhdG9yKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJQ29udGVudEl0ZXJhdG9yKiogYUl0ZXJhdG9yKTsKCgoKZXh0ZXJuIG5zcmVzdWx0
Ck5TX05ld0hUTUxBbmNob3JFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9k
ZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEFwcGxldEVsZW1l
bnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4
dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MQXJlYUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVz
dWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1M
QlJFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5m
byk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEJhc2VFbGVtZW50KG5zSUhUTUxDb250ZW50
KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNf
TmV3SFRNTEJhc2VGb250RWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJ
bmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxCb2R5RWxlbWVudChu
c0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJu
IG5zcmVzdWx0Ck5TX05ld0hUTUxCdXR0b25FbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3Vs
dCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTERM
aXN0RWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUlu
Zm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxEZWxFbGVtZW50KG5zSUhUTUxDb250ZW50
KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNf
TmV3SFRNTERpcmVjdG9yeUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2Rl
SW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MRGl2RWxlbWVudChu
c0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJu
IG5zcmVzdWx0Ck5TX05ld0hUTUxFbWJlZEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0
LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MRmll
bGRTZXRFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2Rl
SW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEZvbnRFbGVtZW50KG5zSUhUTUxDb250
ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQK
TlNfTmV3SFRNTEZvcm1FbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUlu
Zm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEZyYW1lRWxlbWVudChu
c0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJu
IG5zcmVzdWx0Ck5TX05ld0hUTUxGcmFtZVNldEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVz
dWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1M
SFJFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5m
byk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEhlYWRFbGVtZW50KG5zSUhUTUxDb250ZW50
KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNf
TmV3SFRNTEhlYWRpbmdFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUlu
Zm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTEh0bWxFbGVtZW50KG5z
SUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4g
bnNyZXN1bHQKTlNfTmV3SFRNTElGcmFtZUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0
LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MSW1h
Z2VFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5m
byk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTElucHV0RWxlbWVudChuc0lIVE1MQ29udGVu
dCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5T
X05ld0hUTUxJbnNFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8g
KmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTElzSW5kZXhFbGVtZW50KG5z
SUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4g
bnNyZXN1bHQKTlNfTmV3SFRNTExJRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5z
SU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxMYWJlbEVs
ZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsK
CmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MTGVnZW5kRWxlbWVudChuc0lIVE1MQ29udGVudCoq
IGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05l
d0hUTUxMaW5rRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICph
Tm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxNYXBFbGVtZW50KG5zSUhUTUxD
b250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1
bHQKTlNfTmV3SFRNTE1lbnVFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9k
ZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTE1ldGFFbGVtZW50
KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRl
cm4gbnNyZXN1bHQKTlNfTmV3SFRNTE1vZEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0
LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MT0xp
c3RFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5m
byk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTE9iamVjdEVsZW1lbnQobnNJSFRNTENvbnRl
bnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApO
U19OZXdIVE1MT3B0R3JvdXBFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9k
ZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTE9wdGlvbkVsZW1l
bnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4
dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MUGFyYWdyYXBoRWxlbWVudChuc0lIVE1MQ29udGVudCoq
IGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05l
d0hUTUxQYXJhbUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAq
YU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MUHJlRWxlbWVudChuc0lIVE1M
Q29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVz
dWx0Ck5TX05ld0hUTUxRdW90ZUVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lO
b2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MU2NyaXB0RWxl
bWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoK
ZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxTZWxlY3RFbGVtZW50KG5zSUhUTUxDb250ZW50Kiog
YVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3
SFRNTFNwYWNlckVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAq
YU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1MU3BhbkVsZW1lbnQobnNJSFRN
TENvbnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jl
c3VsdApOU19OZXdIVE1MU3R5bGVFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJ
Tm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LG5zSU5vZGVJbmZvICphTm9kZUlu
Zm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxUYWJsZUNlbGxFbGVtZW50KG5zSUhUTUxD
b250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1
bHQKTlNfTmV3SFRNTFRhYmxlQ29sRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5z
SU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxUYWJsZUNv
bEdyb3VwRWxlbWVudChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9k
ZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxUYWJsZUVsZW1lbnQobnNJSFRNTENv
bnRlbnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3Vs
dApOU19OZXdIVE1MVGFibGVSb3dFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJ
Tm9kZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVzdWx0LG5zSU5vZGVJbmZvICphTm9kZUlu
Zm8pOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxUYm9keUVsZW1lbnQobnNJSFRNTENvbnRl
bnQqKiBhUmVzdWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApO
U19OZXdIVE1MVGV4dEFyZWFFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9k
ZUluZm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFRmb290RWxlbWVu
dChuc0lIVE1MQ29udGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0
ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxUaGVhZEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBhUmVz
dWx0LCBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdIVE1M
VGl0bGVFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2Rl
SW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFVMaXN0RWxlbWVudChuc0lIVE1MQ29u
dGVudCoqIGFSZXN1bHQsIG5zSU5vZGVJbmZvICphTm9kZUluZm8pOwoKZXh0ZXJuIG5zcmVzdWx0
Ck5TX05ld0hUTUxXQlJFbGVtZW50KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUlu
Zm8gKmFOb2RlSW5mbyk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SFRNTFVua25vd25FbGVtZW50
KG5zSUhUTUxDb250ZW50KiogYVJlc3VsdCwgbnNJTm9kZUluZm8gKmFOb2RlSW5mbyk7CgoKCgoK
CgpleHRlcm4gbnNyZXN1bHQKTlNfQ3JlYXRlSFRNTEVsZW1lbnQobnNJSFRNTENvbnRlbnQqKiBh
UmVzdWx0LAogICAgICAgICAgICAgICAgICAgICBuc0lOb2RlSW5mbyAqYU5vZGVJbmZvKTsKCgoK
CgoKCmV4dGVybiBuc3Jlc3VsdCBOU19OZXdCbG9ja0ZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNT
aGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSVWludDMyIGFGbGFncyA9IDApOwoKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdBdHRyaWJ1
dGVDb250ZW50KG5zSUNvbnRlbnQgKiogYVJlc3VsdCk7CgoKCgoKZXh0ZXJuIG5zcmVzdWx0IE5T
X05ld1NlbGVjdHNBcmVhRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoq
IGFOZXdGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50
MzIgYUZsYWdzID0gMHgwMTAwMDAwMCk7CgoKCmV4dGVybiBuc3Jlc3VsdCBOU19OZXdBcmVhRnJh
bWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhRmxhZ3MgPSAweDAwODAwMDAwfDB4
MDEwMDAwMDApOwoKCmlubGluZSBuc3Jlc3VsdCBOU19OZXdUYWJsZUNlbGxJbm5lckZyYW1lKG5z
SVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUpIHsKICByZXR1cm4g
TlNfTmV3QmxvY2tGcmFtZShhUHJlc1NoZWxsLCBhTmV3RnJhbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwMDgwMDAwMHwweDAxMDAwMDAwfDB4MDA0MDAwMDApOwp9CgoKCmlubGluZSBu
c3Jlc3VsdCBOU19OZXdEb2N1bWVudEVsZW1lbnRGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hl
bGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lKSB7CiAgcmV0dXJuIE5TX05ld0FyZWFGcmFtZShhUHJl
c1NoZWxsLCBhTmV3RnJhbWUsIDB4MDA4MDAwMDB8MHgwMDQwMDAwMCk7Cn0KCgppbmxpbmUgbnNy
ZXN1bHQgTlNfTmV3QWJzb2x1dGVJdGVtV3JhcHBlckZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNT
aGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUpIHsKICByZXR1cm4gTlNfTmV3QXJlYUZyYW1lKGFQ
cmVzU2hlbGwsIGFOZXdGcmFtZSwgMHgwMDgwMDAwMHwweDAwNDAwMDAwKTsKfQoKCmlubGluZSBu
c3Jlc3VsdCBOU19OZXdGbG9hdGluZ0l0ZW1XcmFwcGVyRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJl
c1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFtZSkgewogIHJldHVybiBOU19OZXdBcmVhRnJhbWUo
YVByZXNTaGVsbCwgYU5ld0ZyYW1lLCAweDAwODAwMDAwfDB4MDAxMDAwMDApOwp9CgoKCmlubGlu
ZSBuc3Jlc3VsdCBOU19OZXdSZWxhdGl2ZUl0ZW1XcmFwcGVyRnJhbWUobnNJUHJlc1NoZWxsKiBh
UHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFtZSkgewogIHJldHVybiBOU19OZXdBcmVhRnJh
bWUoYVByZXNTaGVsbCwgYU5ld0ZyYW1lKTsKfQoKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0JSRnJh
bWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFtZSk7CgpleHRl
cm4gbnNyZXN1bHQgTlNfTmV3Q29tbWVudEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwg
bnNJRnJhbWUqKiBhRnJhbWVSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3SFJGcmFtZShu
c0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lKTsKCgpleHRlcm4g
bnNyZXN1bHQgTlNfTmV3SFRNTEZyYW1lT3V0ZXJGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hl
bGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lKTsKCmV4dGVybiBuc3Jlc3VsdCBOU19OZXdIVE1MRnJh
bWVzZXRGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1l
KTsKCmV4dGVybiBuc3Jlc3VsdCBOU19OZXdWaWV3cG9ydEZyYW1lKG5zSVByZXNTaGVsbCogYVBy
ZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3Q2Fu
dmFzRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFtZSk7
CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdJbWFnZUZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVs
bCwgbnNJRnJhbWUqKiBhRnJhbWVSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3SW5saW5l
RnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFtZSk7CmV4
dGVybiBuc3Jlc3VsdCBOU19OZXdQb3NpdGlvbmVkSW5saW5lRnJhbWUobnNJUHJlc1NoZWxsKiBh
UHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdGcmFtZSk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdP
YmplY3RGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYUZyYW1lUmVz
dWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld1NwYWNlckZyYW1lKG5zSVByZXNTaGVsbCogYVBy
ZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld1RleHRG
cmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVy
biBuc3Jlc3VsdCBOU19OZXdDb250aW51aW5nVGV4dEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNT
aGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0VtcHR5RnJh
bWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwppbmxpbmUg
bnNyZXN1bHQgTlNfTmV3V0JSRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFt
ZSoqIGFSZXN1bHQpIHsKICByZXR1cm4gTlNfTmV3RW1wdHlGcmFtZShhUHJlc1NoZWxsLCBhUmVz
dWx0KTsKfQpleHRlcm4gbnNyZXN1bHQgTlNfTmV3U2Nyb2xsRnJhbWUobnNJUHJlc1NoZWxsKiBh
UHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3U2lt
cGxlUGFnZVNlcXVlbmNlRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoq
IGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3UGFnZUZyYW1lKG5zSVByZXNTaGVsbCog
YVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0Zp
cnN0TGV0dGVyRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdG
cmFtZSk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdGaXJzdExpbmVGcmFtZShuc0lQcmVzU2hlbGwq
IGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYU5ld0ZyYW1lKTsKCgpleHRlcm4gbnNyZXN1bHQgTlNf
TmV3Rm9ybUZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0
LCBQUlVpbnQzMiBhRmxhZ3MpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3R2Z4QnV0dG9uQ29udHJv
bEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0
ZXJuIG5zcmVzdWx0IE5TX05ld05hdGl2ZUJ1dHRvbkNvbnRyb2xGcmFtZShuc0lQcmVzU2hlbGwq
IGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdJ
bWFnZUNvbnRyb2xGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJl
c3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdIVE1MQnV0dG9uQ29udHJvbEZyYW1lKG5zSVBy
ZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0
IE5TX05ld0dmeENoZWNrYm94Q29udHJvbEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwg
bnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld05hdGl2ZUNoZWNrYm94
Q29udHJvbEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0
KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0ZpZWxkU2V0RnJhbWUobnNJUHJlc1NoZWxsKiBhUHJl
c1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQsIFBSVWludDMyIGFGbGFncyk7CmV4dGVybiBuc3Jl
c3VsdCBOU19OZXdGaWxlQ29udHJvbEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJ
RnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0xhYmVsRnJhbWUobnNJUHJl
c1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1bHQsIFBSVWludDMyIGFTdGF0ZUZs
YWdzKTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld0xlZ2VuZEZyYW1lKG5zSVByZXNTaGVsbCogYVBy
ZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld05hdGl2
ZVRleHRDb250cm9sRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFO
ZXdGcmFtZSk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdHZnhUZXh0Q29udHJvbEZyYW1lKG5zSVBy
ZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUpOwpleHRlcm4gbnNyZXN1
bHQgTlNfTmV3R2Z4QXV0b1RleHRDb250cm9sRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxs
LCBuc0lGcmFtZSoqIGFOZXdGcmFtZSk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdHZnhSYWRpb0Nv
bnRyb2xGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7
CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdOYXRpdmVSYWRpb0NvbnRyb2xGcmFtZShuc0lQcmVzU2hl
bGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19O
ZXdOYXRpdmVTZWxlY3RDb250cm9sRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lG
cmFtZSoqIGFSZXN1bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3TGlzdENvbnRyb2xGcmFtZShu
c0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jl
c3VsdCBOU19OZXdDb21ib2JveENvbnRyb2xGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGws
IG5zSUZyYW1lKiogYVJlc3VsdCwgUFJVaW50MzIgYUZsYWdzKTsKZXh0ZXJuIG5zcmVzdWx0IE5T
X05ld0lzSW5kZXhGcmFtZShuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJl
c3VsdCk7CgoKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld1RhYmxlT3V0ZXJGcmFtZShuc0lQcmVzU2hl
bGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiogYVJlc3VsdCk7CmV4dGVybiBuc3Jlc3VsdCBOU19O
ZXdUYWJsZUZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0
KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05ld1RhYmxlQ2FwdGlvbkZyYW1lKG5zSVByZXNTaGVsbCog
YVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhTmV3RnJhbWUpOwoKZXh0ZXJuIG5zcmVzdWx0IE5TX05l
d1RhYmxlQ29sRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1
bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3VGFibGVDb2xHcm91cEZyYW1lKG5zSVByZXNTaGVs
bCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05l
d1RhYmxlUm93RnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFSZXN1
bHQpOwpleHRlcm4gbnNyZXN1bHQgTlNfTmV3VGFibGVSb3dHcm91cEZyYW1lKG5zSVByZXNTaGVs
bCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVzdWx0KTsKZXh0ZXJuIG5zcmVzdWx0IE5TX05l
d1RhYmxlQ2VsbEZyYW1lKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqKiBhUmVz
dWx0KTsKCgpleHRlcm4gbnNyZXN1bHQgTlNfTmV3SFRNTENvbnRlbnRTaW5rKG5zSUhUTUxDb250
ZW50U2luayoqIGFJbnN0YW5jZVB0clJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lEb2N1bWVudCogYURvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lVUkkqIGFVUkwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJV2ViU2hlbGwqIGFXZWJTaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lDaGFubmVsKiBhQ2hhbm5lbCk7CmV4dGVybiBuc3Jlc3VsdCBOU19OZXdI
VE1MRnJhZ21lbnRDb250ZW50U2luayhuc0lIVE1MRnJhZ21lbnRDb250ZW50U2luayoqIGFJbnN0
YW5jZVB0clJlc3VsdCk7CgoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld0hUTUxSZWZsb3dDb21tYW5k
KG5zSVJlZmxvd0NvbW1hbmQqKiBhSW5zdGFuY2VQdHJSZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUZyYW1lKiBhVGFyZ2V0RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5z
SVJlZmxvd0NvbW1hbmQ6OlJlZmxvd1R5cGUgYVJlZmxvd1R5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUZyYW1lKiBhQ2hpbGRGcmFtZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAg
IG5zSUF0b20qIGFBdHRyaWJ1dGUgPSAwKTsKIyAyNSAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSFRNTENvbnRlbnQuaCIgMQojIDI1
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSFRNTENvbnRlbnQuaCIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJWE1MQ29udGVudC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lYTUxDb250ZW50LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVN1cHBvcnRzLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVhNTENv
bnRlbnQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZWRDb250ZW50
LmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0eWxlZENvbnRlbnQuaCIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIiAxCiMgMjYgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHlsZWRDb250ZW50LmgiIDIKCmNsYXNzIG5zU3RyaW5n
OwpjbGFzcyBuc0lTdHlsZVJ1bGU7CmNsYXNzIG5zSVN0eWxlQ29udGV4dDsKY2xhc3MgbnNJU3Vw
cG9ydHNBcnJheTsKCgoKCgoKCmNsYXNzIG5zSVN0eWxlZENvbnRlbnQgOiBwdWJsaWMgbnNJQ29u
dGVudCB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGljIG5z
SUlEIGlpZCA9IHsgMHhjMWU4NGUwMSwgMHhjZDE1LCAweDExZDIsIHsgMHg5NiwgMHhlZCwgMHgw
LCAweDEwLCAweDRiLCAweDdiLCAweDdkLCAweGViIH0gfTsgcmV0dXJuIGlpZDsgfQoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldElEKG5zSUF0b20qJiBhUmVzdWx0KSBjb25zdCA9IDA7CiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRDbGFzc2VzKG5zVm9pZEFycmF5JiBhQXJyYXkpIGNvbnN0ID0gMDsKICB2
aXJ0dWFsIG5zcmVzdWx0IEhhc0NsYXNzKG5zSUF0b20qIGFDbGFzcykgY29uc3QgPSAwOwoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnRTdHlsZVJ1bGVzKG5zSVN1cHBvcnRzQXJyYXkqIGFS
dWxlcykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5saW5lU3R5bGVSdWxlcyhuc0lTdXBw
b3J0c0FycmF5KiBhUnVsZXMpID0gMDsKIyA1NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVN0eWxlZENvbnRlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1hcHBlZEF0dHJpYnV0ZUlt
cGFjdChjb25zdCBuc0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSSW50MzImIGFIaW50KSBjb25zdCA9IDA7Cgp9OwojIDI5ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJWE1MQ29udGVudC5oIiAyCgpjbGFzcyBuc0lOYW1lU3BhY2U7
CmNsYXNzIG5zSU5vZGVJbmZvOwpjbGFzcyBuc0lXZWJTaGVsbDsKY2xhc3MgbnNJVVJJOwojIDQy
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJWE1MQ29udGVudC5oIgpjbGFzcyBuc0lYTUxD
b250ZW50IDogcHVibGljIG5zSVN0eWxlZENvbnRlbnQgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0
IG5zSUlEJiBHZXRJSUQoKSB7IHN0YXRpYyBuc0lJRCBpaWQgPSB7IDB4YTZjZjkwY2IsIDB4MTVi
MywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4
MzIgfSB9OyByZXR1cm4gaWlkOyB9CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29udGFpbmluZ05h
bWVTcGFjZShuc0lOYW1lU3BhY2UqIGFOYW1lU3BhY2UpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldENvbnRhaW5pbmdOYW1lU3BhY2UobnNJTmFtZVNwYWNlKiYgYU5hbWVTcGFjZSkgY29uc3Qg
PSAwOwojIDU4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJWE1MQ29udGVudC5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgTWF5YmVUcmlnZ2VyQXV0b0xpbmsobnNJV2ViU2hlbGwgKmFTaGVsbCkg
PSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFhNTEJhc2VVUkkobnNJVVJJICoqYVVSSSkgPSAw
Owp9OwojIDczICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJWE1MQ29udGVudC5oIgpleHRl
cm4gbnNyZXN1bHQKTlNfTmV3WE1MRWxlbWVudChuc0lYTUxDb250ZW50KiogYVJlc3VsdCwgbnNJ
Tm9kZUluZm8qIGFOb2RlSW5mbyk7CgoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld1hNTFByb2Nlc3Np
bmdJbnN0cnVjdGlvbihuc0lDb250ZW50KiogYUluc3RhbmNlUHRyUmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFUYXJnZXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYURh
dGEpOwoKZXh0ZXJuIG5zcmVzdWx0Ck5TX05ld1hNTEVudGl0eShuc0lDb250ZW50KiogYUluc3Rh
bmNlUHRyUmVzdWx0LAogICAgICAgICAgICAgICAgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFO
YW1lLAogICAgICAgICAgICAgICAgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFQdWJsaWNJZCwK
ICAgICAgICAgICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU3lzdGVtSWQsCiAgICAg
ICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYU5vdGF0aW9uTmFtZSk7CgpleHRl
cm4gbnNyZXN1bHQKTlNfTmV3WE1MTm90YXRpb24obnNJQ29udGVudCoqIGFJbnN0YW5jZVB0clJl
c3VsdCwKICAgICAgICAgICAgICAgICAgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFOYW1lLAog
ICAgICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVB1YmxpY0lkLAogICAg
ICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN5c3RlbUlkKTsKCmNsYXNz
IG5zSURPTU5hbWVkTm9kZU1hcDsKCmV4dGVybiBuc3Jlc3VsdApOU19OZXdYTUxOYW1lZE5vZGVN
YXAobnNJRE9NTmFtZWROb2RlTWFwKiogYUluc3RhbmNlUHRyUmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgICAgbnNJU3VwcG9ydHNBcnJheSAqYUFycmF5KTsKCmV4dGVybiBuc3Jlc3VsdApOU19O
ZXdYTUxDREFUQVNlY3Rpb24obnNJQ29udGVudCoqIGFJbnN0YW5jZVB0clJlc3VsdCk7CiMgMjYg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lIVE1MQ29udGVudC5oIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFZhbHVlLmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSFRNTFZhbHVlLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
Y29yZS5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxWYWx1ZS5oIiAy
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29sb3IuaCIgMQojIDI3ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MVmFsdWUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hU
TUxWYWx1ZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgi
IDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFZhbHVlLmgiIDIKCmVudW0g
bnNIVE1MVW5pdCB7CiAgZUhUTUxVbml0X051bGwgPSAwLAogIGVIVE1MVW5pdF9FbXB0eSA9IDEs
CiAgZUhUTUxVbml0X1N0cmluZyA9IDEwLAogIGVIVE1MVW5pdF9JU3VwcG9ydHMgPSAyMCwKICBl
SFRNTFVuaXRfSW50ZWdlciA9IDUwLAogIGVIVE1MVW5pdF9FbnVtZXJhdGVkID0gNTEsCiAgZUhU
TUxVbml0X1Byb3BvcnRpb25hbCA9IDUyLAogIGVIVE1MVW5pdF9Db2xvciA9IDgwLAogIGVIVE1M
VW5pdF9Db2xvck5hbWUgPSA4MSwKICBlSFRNTFVuaXRfUGVyY2VudCA9IDkwLAoKCiAgZUhUTUxV
bml0X1BpeGVsID0gNjAwCn07CgpjbGFzcyBuc0hUTUxWYWx1ZSB7CnB1YmxpYzoKICBuc0hUTUxW
YWx1ZShuc0hUTUxVbml0IGFVbml0ID0gZUhUTUxVbml0X051bGwpOwogIG5zSFRNTFZhbHVlKFBS
SW50MzIgYVZhbHVlLCBuc0hUTUxVbml0IGFVbml0KTsKICBuc0hUTUxWYWx1ZShmbG9hdCBhVmFs
dWUpOwogIG5zSFRNTFZhbHVlKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhVmFsdWUsIG5zSFRN
TFVuaXQgYVVuaXQgPSBlSFRNTFVuaXRfU3RyaW5nKTsKICBuc0hUTUxWYWx1ZShuc0lTdXBwb3J0
cyogYVZhbHVlKTsKICBuc0hUTUxWYWx1ZShuc2NvbG9yIGFWYWx1ZSk7CiAgbnNIVE1MVmFsdWUo
Y29uc3QgbnNIVE1MVmFsdWUmIGFDb3B5KTsKICB+bnNIVE1MVmFsdWUodm9pZCk7CgogIG5zSFRN
TFZhbHVlJiBvcGVyYXRvcj0oY29uc3QgbnNIVE1MVmFsdWUmIGFDb3B5KTsKICBQUkJvb2wgb3Bl
cmF0b3I9PShjb25zdCBuc0hUTUxWYWx1ZSYgYU90aGVyKSBjb25zdDsKICBQUkJvb2wgb3BlcmF0
b3IhPShjb25zdCBuc0hUTUxWYWx1ZSYgYU90aGVyKSBjb25zdDsKICBQUlVpbnQzMiBIYXNoVmFs
dWUodm9pZCkgY29uc3Q7CgogIG5zSFRNTFVuaXQgR2V0VW5pdCh2b2lkKSBjb25zdCB7IHJldHVy
biBtVW5pdDsgfQogIFBSSW50MzIgR2V0SW50VmFsdWUodm9pZCkgY29uc3Q7CiAgUFJJbnQzMiBH
ZXRQaXhlbFZhbHVlKHZvaWQpIGNvbnN0OwogIGZsb2F0IEdldFBlcmNlbnRWYWx1ZSh2b2lkKSBj
b25zdDsKICBuc0FXcml0YWJsZVN0cmluZyYgR2V0U3RyaW5nVmFsdWUobnNBV3JpdGFibGVTdHJp
bmcmIGFCdWZmZXIpIGNvbnN0OwogIG5zSVN1cHBvcnRzKiBHZXRJU3VwcG9ydHNWYWx1ZSh2b2lk
KSBjb25zdDsKICBuc2NvbG9yIEdldENvbG9yVmFsdWUodm9pZCkgY29uc3Q7CgogIHZvaWQgUmVz
ZXQodm9pZCk7CiAgdm9pZCBTZXRJbnRWYWx1ZShQUkludDMyIGFWYWx1ZSwgbnNIVE1MVW5pdCBh
VW5pdCk7CiAgdm9pZCBTZXRQaXhlbFZhbHVlKFBSSW50MzIgYVZhbHVlKTsKICB2b2lkIFNldFBl
cmNlbnRWYWx1ZShmbG9hdCBhVmFsdWUpOwogIHZvaWQgU2V0U3RyaW5nVmFsdWUoY29uc3QgbnNB
UmVhZGFibGVTdHJpbmcmIGFWYWx1ZSwgbnNIVE1MVW5pdCBhVW5pdCA9IGVIVE1MVW5pdF9TdHJp
bmcpOwogIHZvaWQgU2V0SVN1cHBvcnRzVmFsdWUobnNJU3VwcG9ydHMqIGFWYWx1ZSk7CiAgdm9p
ZCBTZXRDb2xvclZhbHVlKG5zY29sb3IgYVZhbHVlKTsKICB2b2lkIFNldEVtcHR5VmFsdWUodm9p
ZCk7CgogIHZvaWQgQXBwZW5kVG9TdHJpbmcobnNBV3JpdGFibGVTdHJpbmcmIGFCdWZmZXIpIGNv
bnN0OwogIHZvaWQgVG9TdHJpbmcobnNBV3JpdGFibGVTdHJpbmcmIGFCdWZmZXIpIGNvbnN0OwoK
cHJvdGVjdGVkOgogIG5zSFRNTFVuaXQgbVVuaXQ7CiAgdW5pb24gewogICAgUFJJbnQzMiBtSW50
OwogICAgZmxvYXQgbUZsb2F0OwogICAgUFJVbmljaGFyKiBtU3RyaW5nOwogICAgbnNJU3VwcG9y
dHMqIG1JU3VwcG9ydHM7CiAgICBuc2NvbG9yIG1Db2xvcjsKICB9IG1WYWx1ZTsKfTsKCmlubGlu
ZSBQUkludDMyIG5zSFRNTFZhbHVlOjpHZXRJbnRWYWx1ZSh2b2lkKSBjb25zdAp7CiAgaWYgKCEo
KG1Vbml0ID09IGVIVE1MVW5pdF9TdHJpbmcpIHx8IChtVW5pdCA9PSBlSFRNTFVuaXRfSW50ZWdl
cikgfHwgKG1Vbml0ID09IGVIVE1MVW5pdF9FbnVtZXJhdGVkKSB8fCAobVVuaXQgPT0gZUhUTUxV
bml0X1Byb3BvcnRpb25hbCkpKSBuc0RlYnVnOjpBc3NlcnRpb24oIm5vdCBhbiBpbnQgdmFsdWUi
LCAiKG1Vbml0ID09IGVIVE1MVW5pdF9TdHJpbmcpIHx8IChtVW5pdCA9PSBlSFRNTFVuaXRfSW50
ZWdlcikgfHwgKG1Vbml0ID09IGVIVE1MVW5pdF9FbnVtZXJhdGVkKSB8fCAobVVuaXQgPT0gZUhU
TUxVbml0X1Byb3BvcnRpb25hbCkiLCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFZh
bHVlLmgiLCA5NSk7CgoKCiAgaWYgKChtVW5pdCA9PSBlSFRNTFVuaXRfSW50ZWdlcikgfHwKICAg
ICAgKG1Vbml0ID09IGVIVE1MVW5pdF9FbnVtZXJhdGVkKSB8fAogICAgICAobVVuaXQgPT0gZUhU
TUxVbml0X1Byb3BvcnRpb25hbCkpIHsKICAgIHJldHVybiBtVmFsdWUubUludDsKICB9CiAgZWxz
ZSBpZiAobVVuaXQgPT0gZUhUTUxVbml0X1N0cmluZykgewogICAgaWYgKG1WYWx1ZS5tU3RyaW5n
KSB7CiAgICAgIFBSSW50MzIgZXJyPTA7CiAgICAgIG5zQXV0b1N0cmluZyBzdHIobVZhbHVlLm1T
dHJpbmcpOwogICAgICByZXR1cm4gc3RyLlRvSW50ZWdlcigmZXJyKTsKICAgIH0KICB9CiAgcmV0
dXJuIDA7Cn0KCmlubGluZSBQUkludDMyIG5zSFRNTFZhbHVlOjpHZXRQaXhlbFZhbHVlKHZvaWQp
IGNvbnN0CnsKICBpZiAoISgobVVuaXQgPT0gZUhUTUxVbml0X1BpeGVsKSkpIG5zRGVidWc6OkFz
c2VydGlvbigibm90IGEgcGl4ZWwgdmFsdWUiLCAiKG1Vbml0ID09IGVIVE1MVW5pdF9QaXhlbCki
LCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFZhbHVlLmgiLCAxMTYpOwogIGlmICht
VW5pdCA9PSBlSFRNTFVuaXRfUGl4ZWwpIHsKICAgIHJldHVybiBtVmFsdWUubUludDsKICB9CiAg
cmV0dXJuIDA7Cn0KCmlubGluZSBmbG9hdCBuc0hUTUxWYWx1ZTo6R2V0UGVyY2VudFZhbHVlKHZv
aWQpIGNvbnN0CnsKICBpZiAoIShtVW5pdCA9PSBlSFRNTFVuaXRfUGVyY2VudCkpIG5zRGVidWc6
OkFzc2VydGlvbigibm90IGEgcGVyY2VudCB2YWx1ZSIsICJtVW5pdCA9PSBlSFRNTFVuaXRfUGVy
Y2VudCIsICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MVmFsdWUuaCIsIDEyNSk7CiAg
aWYgKG1Vbml0ID09IGVIVE1MVW5pdF9QZXJjZW50KSB7CiAgICByZXR1cm4gbVZhbHVlLm1GbG9h
dDsKICB9CiAgcmV0dXJuIDAuMGY7Cn0KCmlubGluZSBuc0FXcml0YWJsZVN0cmluZyYgbnNIVE1M
VmFsdWU6OkdldFN0cmluZ1ZhbHVlKG5zQVdyaXRhYmxlU3RyaW5nJiBhQnVmZmVyKSBjb25zdAp7
CiAgaWYgKCEoKG1Vbml0ID09IGVIVE1MVW5pdF9TdHJpbmcpIHx8IChtVW5pdCA9PSBlSFRNTFVu
aXRfQ29sb3JOYW1lKSB8fCAobVVuaXQgPT0gZUhUTUxVbml0X051bGwpKSkgbnNEZWJ1Zzo6QXNz
ZXJ0aW9uKCJub3QgYSBzdHJpbmcgdmFsdWUiLCAiKG1Vbml0ID09IGVIVE1MVW5pdF9TdHJpbmcp
IHx8IChtVW5pdCA9PSBlSFRNTFVuaXRfQ29sb3JOYW1lKSB8fCAobVVuaXQgPT0gZUhUTUxVbml0
X051bGwpIiwgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxWYWx1ZS5oIiwgMTM0KTsK
CiAgYUJ1ZmZlci5TZXRMZW5ndGgoMCk7CiAgaWYgKCgobVVuaXQgPT0gZUhUTUxVbml0X1N0cmlu
ZykgfHwgKG1Vbml0ID09IGVIVE1MVW5pdF9Db2xvck5hbWUpKSAmJgogICAgICAoMCAhPSBtVmFs
dWUubVN0cmluZykpIHsKICAgIGFCdWZmZXIuQXBwZW5kKG1WYWx1ZS5tU3RyaW5nKTsKICB9CiAg
cmV0dXJuIGFCdWZmZXI7Cn0KCmlubGluZSBuc0lTdXBwb3J0cyogbnNIVE1MVmFsdWU6OkdldElT
dXBwb3J0c1ZhbHVlKHZvaWQpIGNvbnN0CnsKICBpZiAoIShtVW5pdCA9PSBlSFRNTFVuaXRfSVN1
cHBvcnRzKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJub3QgYW4gSVN1cHBvcnRzIHZhbHVlIiwgIm1V
bml0ID09IGVIVE1MVW5pdF9JU3VwcG9ydHMiLCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SFRNTFZhbHVlLmgiLCAxNDYpOwogIGlmIChtVW5pdCA9PSBlSFRNTFVuaXRfSVN1cHBvcnRzKSB7
CiAgICBuc0lTdXBwb3J0cyAqcmVzdWx0ID0gbVZhbHVlLm1JU3VwcG9ydHM7CiAgICAoKDAgIT0g
KHJlc3VsdCkpID8gbnNfaWZfYWRkcmVmKHJlc3VsdCkgOiAwKTsKICAgIHJldHVybiByZXN1bHQ7
CiAgfQogIHJldHVybiAwOwp9CgppbmxpbmUgbnNjb2xvciBuc0hUTUxWYWx1ZTo6R2V0Q29sb3JW
YWx1ZSh2b2lkKSBjb25zdAp7CiAgaWYgKCEoKG1Vbml0ID09IGVIVE1MVW5pdF9Db2xvcikgfHwg
KG1Vbml0ID09IGVIVE1MVW5pdF9Db2xvck5hbWUpKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJub3Qg
YSBjb2xvciB2YWx1ZSIsICIobVVuaXQgPT0gZUhUTUxVbml0X0NvbG9yKSB8fCAobVVuaXQgPT0g
ZUhUTUxVbml0X0NvbG9yTmFtZSkiLCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTFZh
bHVlLmgiLCAxNTcpOwoKICBpZiAobVVuaXQgPT0gZUhUTUxVbml0X0NvbG9yKSB7CiAgICByZXR1
cm4gbVZhbHVlLm1Db2xvcjsKICB9CiAgaWYgKChtVW5pdCA9PSBlSFRNTFVuaXRfQ29sb3JOYW1l
KSAmJiAobVZhbHVlLm1TdHJpbmcpKSB7CiAgICBuc2NvbG9yIGNvbG9yOwogICAgaWYgKE5TX0Nv
bG9yTmFtZVRvUkdCKG5zQXV0b1N0cmluZyhtVmFsdWUubVN0cmluZyksICZjb2xvcikpIHsKICAg
ICAgcmV0dXJuIGNvbG9yOwogICAgfQogIH0KICByZXR1cm4gKChuc2NvbG9yKSAoKDI1NSA8PCAy
NCkgfCAoKDApPDwxNikgfCAoKDApPDw4KSB8ICgwKSkpOwp9CgppbmxpbmUgUFJCb29sIG5zSFRN
TFZhbHVlOjpvcGVyYXRvciE9KGNvbnN0IG5zSFRNTFZhbHVlJiBhT3RoZXIpIGNvbnN0CnsKICBy
ZXR1cm4gUFJCb29sKCEgKCgqdGhpcykgPT0gYU90aGVyKSk7Cn0KIyAyNyAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUhUTUxDb250ZW50LmgiIDIKY2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5z
SUZyYW1lOwpjbGFzcyBuc0lTdHlsZVJ1bGU7CmNsYXNzIG5zSU11dGFibGVTdHlsZUNvbnRleHQ7
CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc0lIVE1MTWFwcGVkQXR0cmlidXRlczsKY2xh
c3MgbnNJVVJJOwoKCgoKCgp0eXBlZGVmIHZvaWQgKCpuc01hcEF0dHJpYnV0ZXNGdW5jKShjb25z
dCBuc0lIVE1MTWFwcGVkQXR0cmlidXRlcyogYUF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSU11dGFibGVTdHlsZUNvbnRleHQqIGFDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzQ29udGV4dCogYVByZXNDb250
ZXh0KTsKCgpjbGFzcyBuc0lIVE1MQ29udGVudCA6IHB1YmxpYyBuc0lYTUxDb250ZW50CnsKcHVi
bGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBp
aWQgPSB7IDB4YjllMTEwYjAsIDB4OTRkNiwgMHgxMWQxLCB7MHg4OSwgMHg1YywgMHgwMCwgMHg2
MCwgMHgwOCwgMHg5MSwgMHgxYiwgMHg4MX0gfTsgcmV0dXJuIGlpZDt9CgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IENvbXBhY3QoKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SFRNTEF0dHJp
YnV0ZShuc0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBuc0hUTUxWYWx1ZSYgYVZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UkJvb2wgYU5vdGlmeSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhUTUxBdHRyaWJ1dGUo
bnNJQXRvbSogYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNIVE1M
VmFsdWUmIGFWYWx1ZSkgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRl
TWFwcGluZ0Z1bmN0aW9ucyhuc01hcEF0dHJpYnV0ZXNGdW5jJiBhRm9udE1hcEZ1bmMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zTWFwQXR0cmlidXRlc0Z1bmMm
IGFNYXBGdW5jKSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgQXR0cmlidXRlVG9TdHJp
bmcobnNJQXRvbSogYUF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IG5zSFRNTFZhbHVlJiBhVmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0FXcml0YWJsZVN0cmluZyYgYVJlc3VsdCkgY29uc3QgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0
IFN0cmluZ1RvQXR0cmlidXRlKG5zSUF0b20qIGFBdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVZhbHVlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNIVE1MVmFsdWUmIGFSZXN1bHQpID0gMDsKCgoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRCYXNlVVJMKG5zSVVSSSomIGFCYXNlVVJMKSBjb25zdCA9IDA7
CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmFzZVRhcmdldChuc0FXcml0YWJsZVN0cmlu
ZyYgYUJhc2VUYXJnZXQpIGNvbnN0ID0gMDsKfTsKIyAyNiAibnNGb3JtQ29udHJvbEhlbHBlci5j
cHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVuZGVyaW5nQ29udGV4dC5o
IiAxCiMgMjcgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVByZXNTaGVsbC5oIiAxCiMgMjggIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3Bw
IiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByZXNDb250ZXh0LmgiIDEKIyAy
OSAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJU3R5bGVDb250ZXh0LmgiIDEKIyAzMCAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIK
IyAxICIuLi8uLi9iYXNlL3NyYy9uc0xlYWZGcmFtZS5oIiAxCiMgMzEgIm5zRm9ybUNvbnRyb2xI
ZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vc3R5bGUvc3JjL25zQ1NTUmVuZGVyaW5nLmgiIDEKIyAy
NSAiLi4vLi4vc3R5bGUvc3JjL25zQ1NTUmVuZGVyaW5nLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVJlbmRlcmluZ0NvbnRleHQuaCIgMQojIDI2ICIuLi8uLi9zdHlsZS9zcmMv
bnNDU1NSZW5kZXJpbmcuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHls
ZUNvbnRleHQuaCIgMQojIDI3ICIuLi8uLi9zdHlsZS9zcmMvbnNDU1NSZW5kZXJpbmcuaCIgMgpz
dHJ1Y3QgbnNQb2ludDsKCmNsYXNzIG5zQ1NTUmVuZGVyaW5nIHsKcHVibGljOgojIDM5ICIuLi8u
Li9zdHlsZS9zcmMvbnNDU1NSZW5kZXJpbmcuaCIKICBzdGF0aWMgdm9pZCBQYWludEJvcmRlcihu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUZyYW1lKiBhRm9yRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNSZWN0JiBhRGlydHlSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5z
UmVjdCYgYUJvcmRlckFyZWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTdHls
ZUJvcmRlciYgYUJvcmRlclN0eWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxl
Q29udGV4dCogYVN0eWxlQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludG4g
YVNraXBTaWRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBuc1JlY3QqIGFHYXAgPSAwLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUhhcmRCb3JkZXJTaXplID0gMCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVNob3VsZElnbm9yZVJvdW5kZWQgPSAwKTsK
IyA1OSAiLi4vLi4vc3R5bGUvc3JjL25zQ1NTUmVuZGVyaW5nLmgiCiAgc3RhdGljIHZvaWQgUGFp
bnRPdXRsaW5lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGb3JGcmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBuc1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNSZWN0JiBhQm9yZGVyQXJlYSwKICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBuc1N0eWxlQm9yZGVyJiBhQm9yZGVyU3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNTdHlsZU91dGxpbmUmIGFPdXRsaW5lU3R5bGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhU3R5bGVDb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIFBSSW50biBhU2tpcFNpZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5z
UmVjdCogYUdhcCA9IDApOwojIDgxICIuLi8uLi9zdHlsZS9zcmMvbnNDU1NSZW5kZXJpbmcuaCIK
ICBzdGF0aWMgdm9pZCBQYWludEJvcmRlckVkZ2VzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBh
UmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l
KiBhRm9yRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3Qm
IGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3Qm
IGFCb3JkZXJBcmVhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNCb3JkZXJFZGdl
cyAqIGFCb3JkZXJFZGdlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxl
Q29udGV4dCogYVN0eWxlQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
SW50biBhU2tpcFNpZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNSZWN0KiBh
R2FwID0gMCk7CiMgOTkgIi4uLy4uL3N0eWxlL3NyYy9uc0NTU1JlbmRlcmluZy5oIgogIHN0YXRp
YyB2b2lkIFBhaW50QmFja2dyb3VuZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5n
Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGb3JGcmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBhRGlydHlSZWN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFCb3JkZXJBcmVh
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1N0eWxlQ29sb3ImIGFDb2xv
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTdHlsZUJvcmRlciYgYUJv
cmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhRFgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYURZKTsKCiAgc3RhdGljIHZvaWQgRHJhd0Rh
c2hlZFNpZGVzKFBSSW50biBzdGFydFNpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSVJlbmRlcmluZ0NvbnRleHQmIGFDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBuc1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFBSVWludDggYm9yZGVyU3R5bGVzW10sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG5zY29sb3IgYm9yZGVyQ29sb3JzW10sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYm9yZGVyT3V0c2lkZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBib3JkZXJJbnNpZGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSSW50biBhU2tpcFNpZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc1JlY3QqIGFHYXApOwoKICBzdGF0aWMgdm9pZCBEcmF3RGFzaGVkU2lkZXMoUFJJbnRu
IHN0YXJ0U2lkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29u
dGV4dCYgYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVj
dCYgYURpcnR5UmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTdHls
ZUJvcmRlciogYUJvcmRlclN0eWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBuc1N0eWxlT3V0bGluZSogYU91dGxpbmVTdHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJCb29sIGFEb091dGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IG5zUmVjdCYgYm9yZGVyT3V0c2lkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbnNSZWN0JiBib3JkZXJJbnNpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBSSW50biBhU2tpcFNpZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1JlY3Qq
IGFHYXApOwoKCgoKICBzdGF0aWMgdm9pZCBEcmF3RGFzaGVkU2VnbWVudHMobnNJUmVuZGVyaW5n
Q29udGV4dCYgYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG5zUmVjdCYgYUJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNCb3Jk
ZXJFZGdlcyAqIGFCb3JkZXJFZGdlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJJbnRuIGFTa2lwU2lkZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zUmVj
dCogYUdhcCk7Cgpwcm90ZWN0ZWQ6CgoKCgoKCgogIHN0YXRpYyB2b2lkIFBhaW50Um91bmRlZEJv
cmRlcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSUZyYW1lKiBhRm9yRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNSZWN0JiBhRGlydHlSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IG5zUmVjdCYgYUJvcmRlckFyZWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNTdHlsZUJvcmRlciogYUJvcmRlclN0eWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IG5zU3R5bGVPdXRsaW5lKiBhT3V0bGluZVN0eWxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVN0eWxlQ29udGV4dCogYVN0eWxlQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkludG4gYVNraXBTaWRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDE2
IGFCb3JkZXJSYWRpdXNbNF0sbnNSZWN0KiBhR2FwID0gMCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkJvb2wgYUlzT3V0bGluZT0wKTsKCgogIHN0YXRpYyB2b2lkIFJlbmRlclNpZGUobnNG
bG9hdFBvaW50IGFQb2ludHNbXSxuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTdHlsZUJvcmRlciogYUJvcmRlclN0
eWxlLGNvbnN0IG5zU3R5bGVPdXRsaW5lKiBhT3V0bGluZVN0eWxlLG5zSVN0eWxlQ29udGV4dCog
YVN0eWxlQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50OCBhU2lkZSxuc01h
cmdpbiAmYUJvclRoaWNrLG5zY29vcmQgYVR3aXBzUGVyUGl4ZWwsCiAgICAgICAgICAgICAgICAg
ICAgICAgIFBSQm9vbCBhSXNPdXRsaW5lPTApOwoKICBzdGF0aWMgdm9pZCBQYWludFJvdW5kZWRC
YWNrZ3JvdW5kKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZvckZyYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYUJvcmRlckFyZWEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3R5bGVDb2xvciYgYUNvbG9yLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFEWCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNjb29yZCBhRFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MTYg
YVRoZVJhZGl1c1s0XSk7CgoKICBzdGF0aWMgbnNjb2xvciBNYWtlQmV2ZWxDb2xvcihQUkludG4g
d2hpY2hTaWRlLCBQUlVpbnQ4IHN0eWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zY29sb3IgYUJhY2tncm91bmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc2NvbG9yIGFCb3JkZXJDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UkJvb2wgYVNwZWNpYWxDYXNlKTsKCiAgc3RhdGljIFBSSW50biBNYWtlU2lkZShuc1BvaW50IGFQ
b2ludHNbXSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFD
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnRuIHdoaWNoU2lkZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgb3V0c2lkZSwgY29uc3QgbnNSZWN0JiBp
bnNpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gYVNraXBTaWRlcywKICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSSW50biBib3JkZXJQYXJ0LCBmbG9hdCBib3JkZXJGcmFjLAog
ICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCB0d2lwc1BlclBpeGVsKTsKCiAgc3RhdGlj
IHZvaWQgRHJhd1NpZGUobnNJUmVuZGVyaW5nQ29udGV4dCYgYUNvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgUFJJbnRuIHdoaWNoU2lkZSwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBQUlVpbnQ4IGJvcmRlclN0eWxlLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zY29s
b3IgYm9yZGVyQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNjb2xvciBhQmFj
a2dyb3VuZENvbG9yLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYm9yZGVy
T3V0c2lkZSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGJvcmRlckluc2lk
ZSwKICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gYVNraXBTaWRlcywKICAgICAgICAgICAg
ICAgICAgICAgICBuc2Nvb3JkIHR3aXBzUGVyUGl4ZWwsCiAgICAgICAgICAgICAgICAgICAgICAg
bnNSZWN0KiBhR2FwID0gMCk7CgoKICBzdGF0aWMgdm9pZCBEcmF3TGluZSAobnNJUmVuZGVyaW5n
Q29udGV4dCYgYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQgYVgxLCBu
c2Nvb3JkIGFZMSwgbnNjb29yZCBhWDIsIG5zY29vcmQgYVkyLAogICAgICAgICAgICAgICAgICAg
ICAgICBuc1JlY3QqIGFHYXApOwoKICBzdGF0aWMgdm9pZCBGaWxsUG9seWdvbiAobnNJUmVuZGVy
aW5nQ29udGV4dCYgYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5z
UG9pbnQgYVBvaW50c1tdLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFOdW1Q
b2ludHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zUmVjdCogYUdhcCk7Cn07CgoKCgoK
CgpjbGFzcyBRQkN1cnZlCnsKCnB1YmxpYzoKICAgICAgICBuc0Zsb2F0UG9pbnQgbUFuYzE7CiAg
ICAgICAgbnNGbG9hdFBvaW50IG1Db247CiAgICAgICAgbnNGbG9hdFBvaW50IG1BbmMyOwoKICBR
QkN1cnZlKCkge21BbmMxLng9MDttQW5jMS55PTA7bUNvbj1tQW5jMj1tQW5jMTt9CiAgdm9pZCBT
ZXRDb250cm9scyhuc0Zsb2F0UG9pbnQgJmFBbmMxLG5zRmxvYXRQb2ludCAmYUNvbixuc0Zsb2F0
UG9pbnQgJmFBbmMyKSB7IG1BbmMxID0gYUFuYzE7IG1Db24gPSBhQ29uOyBtQW5jMiA9IGFBbmMy
O30KICB2b2lkIFNldFBvaW50cyhmbG9hdCBhMXgsZmxvYXQgYTF5LGZsb2F0IGFjeCxmbG9hdCBh
Y3ksZmxvYXQgYTJ4LGZsb2F0IGEyeSkge21BbmMxLk1vdmVUbyhhMXgsYTF5KSxtQ29uLk1vdmVU
byhhY3gsYWN5KSxtQW5jMi5Nb3ZlVG8oYTJ4LGEyeSk7fQojIDIzNyAiLi4vLi4vc3R5bGUvc3Jj
L25zQ1NTUmVuZGVyaW5nLmgiCiAgdm9pZCBTdWJEaXZpZGUobnNJUmVuZGVyaW5nQ29udGV4dCAq
YVJlbmRlcmluZ0NvbnRleHQsbnNQb2ludCBhUG9pbnRBcnJheVtdLFBSSW50MzIgKmFDdXJJbmRl
eCk7CgoKCgoKCgogIHZvaWQgTWlkUG9pbnREaXZpZGUoUUJDdXJ2ZSAqQSxRQkN1cnZlICpCKTsK
fTsKCgoKCgoKCmNsYXNzIFJvdW5kZWRSZWN0CnsKCnB1YmxpYzoKICBQUkludDMyIG1Sb3VuZG5l
c3NbNF07CgogIFBSQm9vbCBtRG9Sb3VuZDsKCiAgUFJJbnQxNiBtTGVmdDsKICBQUkludDE2IG1S
aWdodDsKICBQUkludDE2IG1Ub3A7CiAgUFJJbnQxNiBtQm90dG9tOwoKCgoKCiAgdm9pZCBSb3Vu
ZFJlY3QoKSB7bVJvdW5kbmVzc1swXT0wO30KIyAyODIgIi4uLy4uL3N0eWxlL3NyYy9uc0NTU1Jl
bmRlcmluZy5oIgogIHZvaWQgU2V0KG5zY29vcmQgYUxlZnQsbnNjb29yZCBhVG9wLFBSSW50MzIg
YVdpZHRoLFBSSW50MzIgYUhlaWdodCxQUkludDE2IGFSYWRpdXNbNF0sUFJJbnQxNiBhTnVtVHdp
cFBlclBpeCk7CiMgMjkxICIuLi8uLi9zdHlsZS9zcmMvbnNDU1NSZW5kZXJpbmcuaCIKICB2b2lk
IENhbGNJbnNldEN1cnZlcyhRQkN1cnZlICZhVUxDdXJ2ZSxRQkN1cnZlICZhVVJDdXJ2ZSxRQkN1
cnZlICZhTExDdXJ2ZSxRQkN1cnZlICZhTFJDdXJ2ZSxuc01hcmdpbiAmYUJvcmRlcik7CiMgMzAx
ICIuLi8uLi9zdHlsZS9zcmMvbnNDU1NSZW5kZXJpbmcuaCIKICB2b2lkIEdldFJvdW5kZWRCb3Jk
ZXJzKFFCQ3VydmUgJmFVTEN1cnZlLFFCQ3VydmUgJmFVUkN1cnZlLFFCQ3VydmUgJmFMTEN1cnZl
LFFCQ3VydmUgJmFMUkN1cnZlKTsKCn07CiMgMzIgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAy
CiMgMSAiLi4vLi4vYmFzZS9zcmMvbnNIVE1MSUlEcy5oIiAxCiMgMjUgIi4uLy4uL2Jhc2Uvc3Jj
L25zSFRNTElJRHMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMu
aCIgMQojIDI2ICIuLi8uLi9iYXNlL3NyYy9uc0hUTUxJSURzLmgiIDIKCgpleHRlcm4gY29uc3Qg
bnNJSUQga0lBcmVhRnJhbWVJSUQ7CmV4dGVybiBjb25zdCBuc0lJRCBrSUhUTUxDb250ZW50SUlE
OwpleHRlcm4gY29uc3QgbnNJSUQga0lIVE1MUmVmbG93SUlEOwpleHRlcm4gY29uc3QgbnNJSUQg
a0lQYWdlU2VxdWVuY2VGcmFtZUlJRDsKZXh0ZXJuIGNvbnN0IG5zSUlEIGtJU3R5bGVkQ29udGVu
dElJRDsKZXh0ZXJuIGNvbnN0IG5zSUlEIGtJVGV4dENvbnRlbnRJSUQ7CiMgMzMgIm5zRm9ybUNv
bnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcu
aCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlldy5oIgojIDEgIi9uZXds
aWIvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVZpZXcuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAx
CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiIDIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5oIiAxCiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lWaWV3LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0
LmgiIDEKIyAzMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIgMgojIDEgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0dVSUV2ZW50LmgiIDEKIyAzMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIgMgoKY2xhc3MgbnNJVmlld01hbmFnZXI7CmNsYXNzIG5z
SVJlZ2lvbjsKY2xhc3MgbnNJUmVuZGVyaW5nQ29udGV4dDsKY2xhc3MgbnNUcmFuc2Zvcm0yRDsK
Y2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSVZpZXdPYnNlcnZlcjsKY2xhc3MgbnNWb2lkQXJyYXk7
CnN0cnVjdCBuc1JlY3Q7CgoKCgpzdHJ1Y3QgbnNWaWV3Q2xpcCB7CiAgbnNjb29yZCBtTGVmdDsK
ICBuc2Nvb3JkIG1SaWdodDsKICBuc2Nvb3JkIG1Ub3A7CiAgbnNjb29yZCBtQm90dG9tOwp9OwoK
CgoKCgplbnVtIG5zVmlld1Zpc2liaWxpdHkgewogIG5zVmlld1Zpc2liaWxpdHlfa0hpZGUgPSAw
LAogIG5zVmlld1Zpc2liaWxpdHlfa1Nob3cgPSAxLAogIG5zVmlld1Zpc2liaWxpdHlfa0luaGVy
aXQgPSAyCn07CiMgNzggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCmNsYXNz
IG5zSVZpZXcgOiBwdWJsaWMgbnNJU3VwcG9ydHMKewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5z
SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhmMGEyMWM0MCwgMHhh
N2UxLCAweDExZDEsIHsgMHhhOCwgMHgyNCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5YSwgMHgyOCwg
MHhjOSB9IH07IHJldHVybiBpaWQ7fQojIDk0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
Vmlldy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lWaWV3TWFuYWdlciogYU1hbmFnZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBuc1JlY3QgJmFCb3VuZHMsCiAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lWaWV3ICph
UGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNWaWV3VmlzaWJpbGl0eSBhVmlzaWJpbGl0eUZsYWcgPSBuc1ZpZXdWaXNpYmlsaXR5X2tTaG93
KSA9IDA7CiMgMTA5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlldy5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgRGVzdHJveSgpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Vmll
d01hbmFnZXIobnNJVmlld01hbmFnZXIgKiZhVmlld01ncikgY29uc3QgPSAwOwojIDEyNiAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFBhaW50
KG5zSVJlbmRlcmluZ0NvbnRleHQmIHJjLCBjb25zdCBuc1JlY3QmIHJlY3QsCiAgICAgICAgICAg
ICAgICAgICAgUFJVaW50MzIgYVBhaW50RmxhZ3MsIFBSQm9vbCAmYVJlc3VsdCkgPSAwOwojIDEz
OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0
IFBhaW50KG5zSVJlbmRlcmluZ0NvbnRleHQmIHJjLCBjb25zdCBuc0lSZWdpb24mIHJlZ2lvbiwK
ICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhUGFpbnRGbGFncywgUFJCb29sICZhUmVzdWx0
KSA9IDA7CiMgMTQ5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlldy5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgSGFuZGxlRXZlbnQobnNHVUlFdmVudCAqZXZlbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJVaW50MzIgYUV2ZW50RmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNFdmVudFN0YXR1cyogYVN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJv
b2wgYUZvcmNlSGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCYgYUhhbmRs
ZWQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQb3NpdGlvbihuc2Nvb3JkIHgs
IG5zY29vcmQgeSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBvc2l0aW9uKG5z
Y29vcmQgKngsIG5zY29vcmQgKnkpIGNvbnN0ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXREaW1lbnNpb25zKG5zY29vcmQgd2lkdGgsIG5zY29vcmQgaGVpZ2h0LCBQUkJvb2wgYVBh
aW50ID0gMSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGltZW5zaW9ucyhuc2Nvb3JkICp3
aWR0aCwgbnNjb29yZCAqaGVpZ2h0KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRCb3VuZHMoY29uc3QgbnNSZWN0ICZhQm91bmRzLCBQUkJvb2wgYVBhaW50ID0gMSkgPSAw
OwojIDE5NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IFNldEJvdW5kcyhuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZLAogICAgICAgICAgICAgICAg
ICAgICAgICBuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0LAogICAgICAgICAgICAgICAg
ICAgICAgICBQUkJvb2wgYVBhaW50ID0gMSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRCb3VuZHMobnNSZWN0ICZhQm91bmRzKSBjb25zdCA9IDA7CiMgMjE1ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJVmlldy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2hpbGRDbGlwKG5z
Y29vcmQgYUxlZnQsIG5zY29vcmQgYVRvcCwgbnNjb29yZCBhUmlnaHQsIG5zY29vcmQgYUJvdHRv
bSkgPSAwOwojIDIyNCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldENoaWxkQ2xpcChuc2Nvb3JkICphTGVmdCwgbnNjb29yZCAqYVRvcCwg
bnNjb29yZCAqYVJpZ2h0LCBuc2Nvb3JkICphQm90dG9tKSBjb25zdCA9IDA7CgoKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBTZXRWaXNpYmlsaXR5KG5zVmlld1Zpc2liaWxpdHkgYVZpc2liaWxpdHkp
ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VmlzaWJpbGl0eShuc1ZpZXdWaXNpYmls
aXR5ICZhVmlzaWJpbGl0eSkgY29uc3QgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dFpQYXJlbnQobnNJVmlldyAqYVpQYXJlbnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFpQ
YXJlbnQobnNJVmlldyAqJmFaUGFyZW50KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBTZXRaSW5kZXgoUFJJbnQzMiBhWkluZGV4KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRaSW5kZXgoUFJJbnQzMiAmYVpJbmRleCkgY29uc3QgPSAwOwojIDI2OSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEF1dG9a
SW5kZXgoUFJCb29sIGFBdXRvWkluZGV4KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dEF1dG9aSW5kZXgoUFJCb29sICZhQXV0b1pJbmRleCkgY29uc3QgPSAwOwojIDI4NSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZsb2F0
aW5nKFBSQm9vbCBhRmxvYXRpbmdWaWV3KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGbG9h
dGluZyhQUkJvb2wgJmFGbG9hdGluZ1ZpZXcpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IFNldFBhcmVudChuc0lWaWV3ICphUGFyZW50KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFBhcmVudChuc0lWaWV3IComYVBhcmVudCkgY29uc3QgPSAwOwoKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXROZXh0U2libGluZyhuc0lWaWV3IComYU5leHRTaWJsaW5nKSBjb25z
dCA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5leHRTaWJsaW5nKG5zSVZpZXcqIGFO
ZXh0U2libGluZykgPSAwOwojIDMyMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXcu
aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydENoaWxkKG5zSVZpZXcgKmFDaGlsZCwgbnNJVmll
dyAqYVNpYmxpbmcpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUNoaWxkKG5z
SVZpZXcgKmFDaGlsZCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGlsZENvdW50
KFBSSW50MzIgJmFDb3VudCkgY29uc3QgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dENoaWxkKFBSSW50MzIgaW5kZXgsIG5zSVZpZXcqJiBhQ2hpbGQpIGNvbnN0ID0gMDsKCgoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPcGFjaXR5KGZsb2F0IGFPcGFjaXR5KSA9IDA7CgoKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T3BhY2l0eShmbG9hdCAmYU9wYWNpdHkpIGNvbnN0ID0g
MDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYXNUcmFuc3BhcmVuY3koUFJCb29sICZhVHJh
bnNwYXJlbnQpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbnRlbnRU
cmFuc3BhcmVuY3koUFJCb29sIGFUcmFuc3BhcmVudCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBTZXRDbGllbnREYXRhKHZvaWQgKmFEYXRhKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldENsaWVudERhdGEodm9pZCAqJmFEYXRhKSBjb25zdCA9IDA7CiMgMzk0ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJVmlldy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T2Zmc2V0
RnJvbVdpZGdldChuc2Nvb3JkICphRHgsIG5zY29vcmQgKmFEeSwgbnNJV2lkZ2V0IComYVdpZGdl
dCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXJ0eVJlZ2lvbihuc0lSZWdpb24g
KiZhUmVnaW9uKSBjb25zdCA9IDA7CiMgNDE1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
Vmlldy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlV2lkZ2V0KGNvbnN0IG5zSUlEICZhV2lu
ZG93SUlELAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zV2lkZ2V0SW5pdERhdGEgKmFXaWRn
ZXRJbml0RGF0YSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNOYXRpdmVXaWRnZXQgYU5hdGl2ZSA9IDAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJCb29sIGFFbmFibGVEcmFnRHJvcCA9IDEpID0gMDsKIyA0MjkgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRXaWRn
ZXQobnNJV2lkZ2V0ICphV2lkZ2V0KSA9IDA7CiMgNDM4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJVmlldy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0V2lkZ2V0KG5zSVdpZGdldCAqJmFX
aWRnZXQpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc1dpZGdldChQUkJv
b2wgKmFIYXNXaWRnZXQpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IExpc3Qo
RklMRSogb3V0ID0gc3Rkb3V0LCBQUkludDMyIGFJbmRlbnQgPSAwKSBjb25zdCA9IDA7CgoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWaWV3RmxhZ3MoUFJVaW50MzIgYUZsYWdzKSA9IDA7CgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbGVhclZpZXdGbGFncyhQUlVpbnQzMiBhRmxhZ3MpID0g
MDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZpZXdGbGFncyhQUlVpbnQzMiAqYUZsYWdz
KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb21wb3NpdG9yRmxhZ3Mo
UFJVaW50MzIgYUZsYWdzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb21wb3NpdG9yRmxh
Z3MoUFJVaW50MzIgKmFGbGFncykgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEV4
dGVudHMobnNSZWN0ICphRXh0ZW50cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJZ25vcmVT
ZXRQb3NpdGlvbihQUkJvb2wgYVNob3VsZElnbm9yZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IFN5bmNoV2lkZ2V0U2l6ZVBvc2l0aW9uKCkgPSAwOwojIDUwNiAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVZpZXcuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENsaXBwZWRSZWN0KG5z
UmVjdCYgYUNsaXBwZWRSZWN0LCBQUkJvb2wmIGFJc0NsaXBwZWQsIFBSQm9vbCYgYUVtcHR5KSBj
b25zdCA9IDA7CgoKcHJpdmF0ZToKICB2aXJ0dWFsIG5zcmVmY250IEFkZFJlZih2b2lkKSA9IDA7
CiAgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpID0gMDsKfTsKIyAzNCAibnNGb3JtQ29u
dHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01h
bmFnZXIuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIu
aCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAyNyAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJVmlld01hbmFnZXIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nv
b3JkLmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlldy5oIiAxCiMgMzAgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdlci5oIiAyCgpjbGFzcyBuc0lSZWdpb247
CmNsYXNzIG5zSUV2ZW50OwpjbGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJVmlldzsKY2xh
c3MgbnNJU2Nyb2xsYWJsZVZpZXc7CmNsYXNzIG5zSVdpZGdldDsKY2xhc3MgbnNJQ29tcG9zaXRl
TGlzdGVuZXI7CnN0cnVjdCBuc1JlY3Q7CgplbnVtIG5zQ29udGVudFF1YWxpdHkgewogIG5zQ29u
dGVudFF1YWxpdHlfa0dvb2QgPSAwLAogIG5zQ29udGVudFF1YWxpdHlfa0ZhaXIsCiAgbnNDb250
ZW50UXVhbGl0eV9rUG9vciwKICBuc0NvbnRlbnRRdWFsaXR5X2tVbmtub3duCn07CgoKCgoKY2xh
c3MgbnNJVmlld01hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMKewpwdWJsaWM6CgogIHN0YXRp
YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyBzdGF0aWMgbnNJSUQgaWlkID0geyAweDNhODg2M2Qw
LCAweGE3ZjMsIDB4MTFkMSwgeyAweGE4LCAweDI0LCAweDAwLCAweDQwLCAweDk1LCAweDlhLCAw
eDI4LCAweGM5IH0gfTsgcmV0dXJuIGlpZDsgfQojIDY1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJRGV2aWNlQ29u
dGV4dCogYUNvbnRleHQsIG5zY29vcmQgYVggPSAwLCBuc2Nvb3JkIGFZID0gMCkgPSAwOwoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSb290Vmlldyhuc0lWaWV3IComYVZpZXcpID0gMDsKIyA4
MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBTZXRSb290Vmlldyhuc0lWaWV3ICphVmlldywgbnNJV2lkZ2V0KiBhV2lkZ2V0ID0g
MCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpbmRvd0RpbWVuc2lvbnMobnNj
b29yZCAqd2lkdGgsIG5zY29vcmQgKmhlaWdodCkgPSAwOwojIDEwMCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRXaW5kb3dE
aW1lbnNpb25zKG5zY29vcmQgd2lkdGgsIG5zY29vcmQgaGVpZ2h0KSA9IDA7CgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgUmVzZXRTY3JvbGxpbmcodm9pZCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IENvbXBvc2l0ZSh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgVXBkYXRl
Vmlldyhuc0lWaWV3ICphVmlldywgUFJVaW50MzIgYVVwZGF0ZUZsYWdzKSA9IDA7CiMgMTI4ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IFVwZGF0ZVZpZXcobnNJVmlldyAqYVZpZXcsIGNvbnN0IG5zUmVjdCAmYVJlY3QsIFBSVWlu
dDMyIGFVcGRhdGVGbGFncykgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgVXBkYXRlQWxs
Vmlld3MoUFJVaW50MzIgYVVwZGF0ZUZsYWdzKSA9IDA7CiMgMTQ0ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFVwZGF0ZVZpZXdB
ZnRlclNjcm9sbChuc0lWaWV3ICphVmlldywgUFJJbnQzMiBhRFgsIFBSSW50MzIgYURZKSA9IDA7
CiMgMTUzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IERpc3BhdGNoRXZlbnQobnNHVUlFdmVudCAqYUV2ZW50LCBuc0V2ZW50U3Rh
dHVzKiBhU3RhdHVzKSA9IDA7CiMgMTYyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmll
d01hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdyYWJNb3VzZUV2ZW50cyhuc0lWaWV3ICph
VmlldywgUFJCb29sJiBhUmVzdWx0KSA9IDA7CiMgMTcxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdyYWJLZXlFdmVudHMobnNJ
VmlldyAqYVZpZXcsIFBSQm9vbCYgYVJlc3VsdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRNb3VzZUV2ZW50R3JhYmJlcihuc0lWaWV3IComYVZpZXcpID0gMDsKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0S2V5RXZlbnRHcmFiYmVyKG5zSVZpZXcgKiZhVmlldykgPSAwOwojIDE5
NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBJbnNlcnRDaGlsZChuc0lWaWV3ICphUGFyZW50LCBuc0lWaWV3ICphQ2hpbGQsIG5z
SVZpZXcgKmFTaWJsaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhQWJvdmUp
ID0gMDsKIyAyMDcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdlci5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgSW5zZXJ0Q2hpbGQobnNJVmlldyAqYVBhcmVudCwgbnNJVmlldyAq
YUNoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYVpJbmRleCkgPSAwOwoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydFpQbGFjZWhvbGRlcihuc0lWaWV3ICphUGFyZW50LCBu
c0lWaWV3ICphWkNoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMy
IGFaSW5kZXgpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVDaGlsZChuc0lW
aWV3ICphUGFyZW50LCBuc0lWaWV3ICphQ2hpbGQpID0gMDsKIyAyMjggIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgTW92ZVZpZXdC
eShuc0lWaWV3ICphVmlldywgbnNjb29yZCBhWCwgbnNjb29yZCBhWSkgPSAwOwojIDIzOCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBNb3ZlVmlld1RvKG5zSVZpZXcgKmFWaWV3LCBuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZKSA9IDA7
CiMgMjUwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IFJlc2l6ZVZpZXcobnNJVmlldyAqYVZpZXcsIG5zY29vcmQgYVdpZHRoLCBu
c2Nvb3JkIGFIZWlnaHQsIFBSQm9vbCBhUmVwYWludEV4cG9zZWRBcmVhT25seSA9IDApID0gMDsK
CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWaWV3Q2hpbGRDbGlwKG5zSVZpZXcgKmFWaWV3
LCBuc1JlY3QgKmFSZWN0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Vmlld1Zp
c2liaWxpdHkobnNJVmlldyAqYVZpZXcsIG5zVmlld1Zpc2liaWxpdHkgYVZpc2libGUpID0gMDsK
IyAyNzYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdlci5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgU2V0Vmlld1pJbmRleChuc0lWaWV3ICphVmlldywgUFJJbnQzMiBhWmluZGV4
KSA9IDA7CiMgMjg3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZpZXdBdXRvWkluZGV4KG5zSVZpZXcgKmFWaWV3LCBQUkJv
b2wgYUF1dG9aSW5kZXgpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBNb3ZlVmlld0Fi
b3ZlKG5zSVZpZXcgKmFWaWV3LCBuc0lWaWV3ICphT3RoZXIpID0gMDsKCgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBNb3ZlVmlld0JlbG93KG5zSVZpZXcgKmFWaWV3LCBuc0lWaWV3ICphT3RoZXIp
ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1ZpZXdTaG93bihuc0lWaWV3ICphVmll
dywgUFJCb29sICZhUmVzdWx0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Vmll
d0NsaXBBYnNvbHV0ZShuc0lWaWV3ICphVmlldywgbnNSZWN0ICphUmVjdCwgUFJCb29sICZhUmVz
dWx0KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWaWV3Q29udGVudFRyYW5zcGFy
ZW5jeShuc0lWaWV3ICphVmlldywgUFJCb29sIGFUcmFuc3BhcmVudCkgPSAwOwoKCgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFNldFZpZXdPcGFjaXR5KG5zSVZpZXcgKmFWaWV3LCBmbG9hdCBhT3Bh
Y2l0eSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Vmlld09ic2VydmVyKG5zSVZp
ZXdPYnNlcnZlciAqYU9ic2VydmVyKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRW
aWV3T2JzZXJ2ZXIobnNJVmlld09ic2VydmVyIComYU9ic2VydmVyKSA9IDA7CgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldERldmljZUNvbnRleHQobnNJRGV2aWNlQ29udGV4dCAqJmFDb250ZXh0
KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNob3dRdWFsaXR5KFBSQm9vbCBhU2hvdykg
PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTaG93UXVhbGl0eShQUkJvb2wgJmFSZXN1
bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UXVhbGl0eShuc0NvbnRlbnRRdWFs
aXR5IGFRdWFsaXR5KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERpc2FibGVSZWZyZXNo
KHZvaWQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmFibGVSZWZyZXNoKFBSVWlu
dDMyIGFVcGRhdGVGbGFncykgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEJlZ2luVXBk
YXRlVmlld0JhdGNoKHZvaWQpID0gMDsKIyA0MDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lWaWV3TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRW5kVXBkYXRlVmlld0JhdGNoKFBS
VWludDMyIGFVcGRhdGVGbGFncykgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJv
b3RTY3JvbGxhYmxlVmlldyhuc0lTY3JvbGxhYmxlVmlldyAqYVNjcm9sbGFibGUpID0gMDsKCgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSb290U2Nyb2xsYWJsZVZpZXcobnNJU2Nyb2xsYWJs
ZVZpZXcgKiphU2Nyb2xsYWJsZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERpc3BsYXko
bnNJVmlldyAqYVZpZXcsIG5zY29vcmQgYVgsIG5zY29vcmQgYVkpID0gMDsKCgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEFkZENvbXBvc2l0ZUxpc3RlbmVyKG5zSUNvbXBvc2l0ZUxpc3RlbmVyICph
TGlzdGVuZXIpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUNvbXBvc2l0ZUxp
c3RlbmVyKG5zSUNvbXBvc2l0ZUxpc3RlbmVyICphTGlzdGVuZXIpID0gMDsKIyA0NDcgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0V2lkZ2V0Rm9yVmlldyhuc0lWaWV3ICphVmlldywgbnNJV2lkZ2V0ICoqYVdpZGdldCkgPSAw
OwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdpZGdldChuc0lXaWRnZXQgKiphV2lkZ2V0
KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRm9yY2VVcGRhdGUoKSA9IDA7CiMgNDcz
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVmlld01hbmFnZXIuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldE9mZnNldChuc2Nvb3JkICphWCwgbnNjb29yZCAqYVkpID0gMDsKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBJc0NhY2hpbmdXaWRnZXRDaGFuZ2VzKFBSQm9vbCogYUNhY2hpbmcpPTA7
CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDYWNoZVdpZGdldENoYW5nZXMoUFJCb29sIGFDYWNo
ZSk9MDsKIyA0OTYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lWaWV3TWFuYWdlci5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgQWxsb3dEb3VibGVCdWZmZXJpbmcoUFJCb29sIGFEb3VibGVCdWZm
ZXIpPTA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNQYWludGluZyhQUkJvb2wmIGFJc1Bh
aW50aW5nKT0wOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRmx1c2hQZW5kaW5nSW52YWxpZGF0
ZXMoKT0wOwojIDUyMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVZpZXdNYW5hZ2VyLmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0QmFja2dyb3VuZENvbG9yKG5zY29sb3IgYUNv
bG9yKT0wOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdEJhY2tncm91bmRDb2xv
cihuc2NvbG9yKiBhQ29sb3IpPTA7Cn07CiMgMzUgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAy
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29vcmQuaCIgMQojIDM2ICJuc0Zvcm1D
b250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc1dpZGdl
dHNDSUQuaCIgMQojIDM3ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1ZpZXdzQ0lELmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zVmlld3NDSUQuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3Vw
cG9ydHMuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWaWV3c0NJRC5oIiAy
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZhY3RvcnkuaCIgMQojIDI1ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmFjdG9yeS5oIgpjbGFzcyBuc0lGYWN0b3J5IDogcHVi
bGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo
KSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDAwMDAwMDAxLCAweDAwMDAsIDB4MDAwMCwg
eyAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2IH19OyByZXR1
cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlSW5zdGFuY2UobnNJU3VwcG9ydHMg
KmFPdXRlciwgY29uc3QgbnNJSUQgJiBpaWQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IExvY2tGYWN0b3J5KFBSQm9vbCBsb2NrKSA9IDA7Cgp9OwojIDI4ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWaWV3c0NJRC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIgMQojIDE4ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lFbnVtZXJhdG9yLmgiIDEKIyAzNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUVudW1lcmF0b3IuaCIKY2xhc3MgbnNJU2ltcGxlRW51bWVyYXRvciA6IHB1YmxpYyBuc0lTdXBw
b3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj
b25zdCBuc0lJRCBpaWQgPSB7MHhkMTg5OTI0MCwgMHhmOWQyLCAweDExZDIsIHsgMHhiZCwgMHhk
NiwgMHgwMCwgMHgwMCwgMHg2NCwgMHg2NSwgMHg3MywgMHg3NCB9fTsgcmV0dXJuIGlpZDt9CiMg
NTMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBIYXNNb3JlRWxlbWVudHMoUFJCb29sICpfcmV0dmFsKSA9IDA7CiMgNzAgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXROZXh0KG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxMzYgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCmNsYXNzIG5zSUVudW1lcmF0b3IgOiBwdWJs
aWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp
IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YWQzODUyODYsIDB4Y2JjNCwgMHgxMWQyLCB7
IDB4OGMsIDB4Y2EsIDB4MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4MTQsIDB4YTMgfX07IHJldHVy
biBpaWQ7fQoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZpcnN0KHZvaWQpID0gMDsKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBOZXh0KHZvaWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3Vy
cmVudEl0ZW0obnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IElzRG9uZSh2b2lkKSA9IDA7Cgp9OwojIDI0MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSUVudW1lcmF0b3IuaCIKY2xhc3MgbnNJQmlkaXJlY3Rpb25hbEVudW1lcmF0b3IgOiBwdWJs
aWMgbnNJRW51bWVyYXRvciB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE
KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg3NWYxNThhMCwgMHhjYWRkLCAweDExZDIs
IHsgMHg4YywgMHhjYSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0
dXJuIGlpZDt9CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTGFzdCh2b2lkKSA9IDA7CgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgUHJldih2b2lkKSA9IDA7Cgp9OwojIDMxNCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUVudW1lcmF0b3IuaCIKZXh0ZXJuICJDIiBuc3Jlc3VsdApOU19OZXdFbXB0
eUVudW1lcmF0b3IobnNJU2ltcGxlRW51bWVyYXRvcioqIGFSZXN1bHQpOwoKCgoKZXh0ZXJuICJD
IiBuc3Jlc3VsdApOU19OZXdDb25qb2luaW5nRW51bWVyYXRvcihuc0lFbnVtZXJhdG9yKiBmaXJz
dCwgbnNJRW51bWVyYXRvciogc2Vjb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lC
aWRpcmVjdGlvbmFsRW51bWVyYXRvciogKmFJbnN0YW5jZVB0clJlc3VsdCk7CgoKCmV4dGVybiAi
QyIgbnNyZXN1bHQKTlNfTmV3VW5pb25FbnVtZXJhdG9yKG5zSUVudW1lcmF0b3IqIGZpcnN0LCBu
c0lFbnVtZXJhdG9yKiBzZWNvbmQsCiAgICAgICAgICAgICAgICAgICAgICBuc0lFbnVtZXJhdG9y
KiAqYUluc3RhbmNlUHRyUmVzdWx0KTsKCgoKZXh0ZXJuICJDIiBuc3Jlc3VsdApOU19OZXdJbnRl
cnNlY3Rpb25FbnVtZXJhdG9yKG5zSUVudW1lcmF0b3IqIGZpcnN0LCBuc0lFbnVtZXJhdG9yKiBz
ZWNvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRW51bWVyYXRvciogKmFJbnN0
YW5jZVB0clJlc3VsdCk7CiMgMTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25l
bnRNYW5hZ2VyLmgiIDIKCgoKCgoKY2xhc3MgbnNJRmlsZTsKIyAzNSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKY2xhc3MgbnNJQ29tcG9uZW50TWFuYWdl
ciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg
R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg4NDU4YTc0MCwgMHhkNWRjLCAw
eDExZDIsIHsgMHg5MiwgMHhmYiwgMHgwMCwgMHhlMCwgMHg5OCwgMHgwNSwgMHg1NywgMHgwZiB9
fTsgcmV0dXJuIGlpZDt9CiMgNDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25l
bnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5kRmFjdG9yeShjb25zdCBuc0NJRCAm
IGFDbGFzcywgbnNJRmFjdG9yeSAqKl9yZXR2YWwpID0gMDsKIyA2MCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENs
YXNzT2JqZWN0KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBuc0lJRCAmIGFJSUQsIHZvaWQg
KiAqX3JldHZhbCkgPSAwOwojIDczICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9u
ZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udHJhY3RJRFRvQ2xhc3NJRChjb25z
dCBjaGFyICphQ29udHJhY3RJRCwgbnNDSUQgKmFDbGFzcykgPSAwOwojIDg2ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
Q0xTSURUb0NvbnRyYWN0SUQoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNoYXIgKiphQ2xhc3NOYW1l
LCBjaGFyICoqX3JldHZhbCkgPSAwOwojIDk4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
Q29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlSW5zdGFuY2UoY29u
c3QgbnNDSUQgJiBhQ2xhc3MsIG5zSVN1cHBvcnRzICphRGVsZWdhdGUsIGNvbnN0IG5zSUlEICYg
YUlJRCwgdm9pZCAqICpfcmV0dmFsKSA9IDA7CiMgMTEyICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlSW5zdGFu
Y2VCeUNvbnRyYWN0SUQoY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzICphRGVs
ZWdhdGUsIGNvbnN0IG5zSUlEICYgSUlELCB2b2lkICogKl9yZXR2YWwpID0gMDsKIyAxMjQgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBSZWdpc3RyeUxvY2F0aW9uRm9yU3BlYyhuc0lGaWxlICphU3BlYywgY2hhciAqKl9y
ZXR2YWwpID0gMDsKIyAxMzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRN
YW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTcGVjRm9yUmVnaXN0cnlMb2NhdGlvbihjb25z
dCBjaGFyICphTG9jYXRpb24sIG5zSUZpbGUgKipfcmV0dmFsKSA9IDA7CiMgMTQ4ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgUmVnaXN0ZXJGYWN0b3J5KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBjaGFyICphQ2xh
c3NOYW1lLCBjb25zdCBjaGFyICphQ29udHJhY3RJRCwgbnNJRmFjdG9yeSAqYUZhY3RvcnksIFBS
Qm9vbCBhUmVwbGFjZSkgPSAwOwojIDE2OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNv
bXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9uZW50KGNv
bnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBjaGFyICphQ2xhc3NOYW1lLCBjb25zdCBjaGFyICph
Q29udHJhY3RJRCwgY29uc3QgY2hhciAqYUxvY2F0aW9uLCBQUkJvb2wgYVJlcGxhY2UsIFBSQm9v
bCBhUGVyc2lzdCkgPSAwOwojIDE5MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBv
bmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9uZW50V2l0aFR5
cGUoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNo
YXIgKmFDb250cmFjdElELCBuc0lGaWxlICphU3BlYywgY29uc3QgY2hhciAqYUxvY2F0aW9uLCBQ
UkJvb2wgYVJlcGxhY2UsIFBSQm9vbCBhUGVyc2lzdCwgY29uc3QgY2hhciAqYVR5cGUpID0gMDsK
IyAyMDkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckNvbXBvbmVudFNwZWMoY29uc3QgbnNDSUQgJiBhQ2xh
c3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNoYXIgKmFDb250cmFjdElELCBuc0lG
aWxlICphTGlicmFyeSwgUFJCb29sIGFSZXBsYWNlLCBQUkJvb2wgYVBlcnNpc3QpID0gMDsKIyAy
MjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBSZWdpc3RlckNvbXBvbmVudExpYihjb25zdCBuc0NJRCAmIGFDbGFzcywg
Y29uc3QgY2hhciAqYUNsYXNzTmFtZSwgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIGNvbnN0IGNo
YXIgKmFEbGxOYW1lLCBQUkJvb2wgYVJlcGxhY2UsIFBSQm9vbCBhUGVyc2lzdCkgPSAwOwojIDI0
MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IFVucmVnaXN0ZXJGYWN0b3J5KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBuc0lG
YWN0b3J5ICphRmFjdG9yeSkgPSAwOwojIDI1NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFVucmVnaXN0ZXJDb21wb25l
bnQoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFMb2NhdGlvbikgPSAwOwojIDI2
MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IFVucmVnaXN0ZXJDb21wb25lbnRTcGVjKGNvbnN0IG5zQ0lEICYgYUNsYXNz
LCBuc0lGaWxlICphTGlicmFyeVNwZWMpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBG
cmVlTGlicmFyaWVzKHZvaWQpID0gMDsKCgoKCiAgZW51bSB7IE5TX1N0YXJ0dXAgPSAwIH07Cgog
IGVudW0geyBOU19TY3JpcHQgPSAxIH07CgogIGVudW0geyBOU19UaW1lciA9IDIgfTsKCiAgZW51
bSB7IE5TX1NodXRkb3duID0gMyB9OwojIDI5NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEF1dG9SZWdpc3RlcihQUklu
dDMyIHdoZW4sIG5zSUZpbGUgKmRpcmVjdG9yeSkgPSAwOwojIDMwOCAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEF1dG9S
ZWdpc3RlckNvbXBvbmVudChQUkludDMyIHdoZW4sIG5zSUZpbGUgKmFGaWxlTG9jYXRpb24pID0g
MDsKIyAzMTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBBdXRvVW5yZWdpc3RlckNvbXBvbmVudChQUkludDMyIHdoZW4s
IG5zSUZpbGUgKmFGaWxlTG9jYXRpb24pID0gMDsKIyAzMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1JlZ2lzdGVy
ZWQoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDMzOSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IEVudW1lcmF0ZUNMU0lEcyhuc0lFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwojIDM0
OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IEVudW1lcmF0ZUNvbnRyYWN0SURzKG5zSUVudW1lcmF0b3IgKipfcmV0dmFs
KSA9IDA7Cgp9OwojIDU3NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1h
bmFnZXIuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb21wb25lbnRNYW5hZ2Vy
VXRpbHMuaCIgMQojIDIzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb21wb25lbnRNYW5h
Z2VyVXRpbHMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIgMQoj
IDI0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb21wb25lbnRNYW5hZ2VyVXRpbHMuaCIg
MgojIDM0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb21wb25lbnRNYW5hZ2VyVXRpbHMu
aCIKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU0dldEZhY3RvcnkobnNJU3VwcG9ydHMqIGFTZXJ2TWdy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNDSUQg
JmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmFDbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUZhY3RvcnkgKiphRmFjdG9yeSk7CmV4dGVybiAiQyIgUFJCb29s
IE5TQ2FuVW5sb2FkKG5zSVN1cHBvcnRzKiBhU2Vydk1ncik7CmV4dGVybiAiQyIgbnNyZXN1bHQg
TlNSZWdpc3RlclNlbGYobnNJU3VwcG9ydHMqIGFTZXJ2TWdyLCBjb25zdCBjaGFyICpmdWxscGF0
aCk7CmV4dGVybiAiQyIgbnNyZXN1bHQgTlNVbnJlZ2lzdGVyU2VsZihuc0lTdXBwb3J0cyogYVNl
cnZNZ3IsIGNvbnN0IGNoYXIgKmZ1bGxwYXRoKTsKCnR5cGVkZWYgbnNyZXN1bHQgKCpuc0ZhY3Rv
cnlQcm9jKShuc0lTdXBwb3J0cyogYVNlcnZNZ3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJRmFjdG9yeSAqKmFGYWN0b3J5KTsKdHlwZWRlZiBQUkJvb2wgKCpuc0NhblVu
bG9hZFByb2MpKG5zSVN1cHBvcnRzKiBhU2Vydk1ncik7CnR5cGVkZWYgbnNyZXN1bHQgKCpuc1Jl
Z2lzdGVyUHJvYykobnNJU3VwcG9ydHMqIGFTZXJ2TWdyLCBjb25zdCBjaGFyICpwYXRoKTsKdHlw
ZWRlZiBuc3Jlc3VsdCAoKm5zVW5yZWdpc3RlclByb2MpKG5zSVN1cHBvcnRzKiBhU2Vydk1nciwg
Y29uc3QgY2hhciAqcGF0aCk7CiMgNjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NvbXBv
bmVudE1hbmFnZXJVdGlscy5oIgpleHRlcm4gbnNyZXN1bHQKTlNfR2V0R2xvYmFsQ29tcG9uZW50
TWFuYWdlcihuc0lDb21wb25lbnRNYW5hZ2VyKiAqcmVzdWx0KTsKCgoKCgpjbGFzcyBuc0NvbXBv
bmVudE1hbmFnZXIgewpwdWJsaWM6CiAgc3RhdGljIG5zcmVzdWx0IEluaXRpYWxpemUodm9pZCk7
CgoKICBzdGF0aWMgbnNyZXN1bHQgRmluZEZhY3RvcnkoY29uc3QgbnNDSUQgJmFDbGFzcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmFjdG9yeSAqKmFGYWN0b3J5KTsKCgogIHN0
YXRpYyBuc3Jlc3VsdCBHZXRDbGFzc09iamVjdChjb25zdCBuc0NJRCAmYUNsYXNzLCBjb25zdCBu
c0lJRCAmYUlJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmFSZXN1
bHQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IENvbnRyYWN0SURUb0NsYXNzSUQoY29uc3QgY2hhciAq
YUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDSUQgKmFDbGFz
cyk7CgoKCiAgc3RhdGljIG5zcmVzdWx0IENMU0lEVG9Db250cmFjdElEKG5zQ0lEICphQ2xhc3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogKmFDbGFzc05hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogKmFDb250cmFjdElEKTsKCgogIHN0YXRp
YyBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZShjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqYURlbGVnYXRlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCAmYUlJRCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqKmFSZXN1bHQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IENy
ZWF0ZUluc3RhbmNlKGNvbnN0IGNoYXIgKmFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqYURlbGVnYXRlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBuc0lJRCAmYUlJRCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAqKmFSZXN1bHQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IFJlZ2lzdGVyRmFj
dG9yeShjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKmFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJRmFjdG9yeSAqYUZhY3RvcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkJvb2wgYVJlcGxhY2UpOwojIDExOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
Q29tcG9uZW50TWFuYWdlclV0aWxzLmgiCiAgc3RhdGljIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9u
ZW50KGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICphQ2xhc3NOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICphTGlicmFyeVBlcnNpc3RlbnREZXNjcmlwdG9yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJCb29sIGFSZXBsYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJCb29sIGFQZXJzaXN0KTsKCgoKICBzdGF0aWMgbnNyZXN1bHQgUmVnaXN0ZXJDb21wb25l
bnRTcGVjKGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJRCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lGaWxlICphTGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUkJvb2wgYVJlcGxhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJCb29sIGFQZXJzaXN0KTsKCgoKCiAgc3RhdGljIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9u
ZW50TGliKGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDb250cmFjdElELAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphZGxsTmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFSZXBsYWNlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVBlcnNpc3QpOwoKCgogIHN0YXRpYyBu
c3Jlc3VsdCBVbnJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGYWN0b3J5ICphRmFjdG9yeSk7CgoKICBzdGF0
aWMgbnNyZXN1bHQgVW5yZWdpc3RlckNvbXBvbmVudChjb25zdCBuc0NJRCAmYUNsYXNzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFMaWJyYXJ5KTsK
CgogIHN0YXRpYyBuc3Jlc3VsdCBVbnJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25zdCBuc0NJRCAm
YUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGaWxl
ICphTGlicmFyeVNwZWMpOwoKCiAgc3RhdGljIG5zcmVzdWx0IEZyZWVMaWJyYXJpZXModm9pZCk7
CgoKCgoKICBzdGF0aWMgbnNyZXN1bHQgQXV0b1JlZ2lzdGVyKFBSSW50MzIgd2hlbiwgbnNJRmls
ZSogZGlyZWN0b3J5KTsKICBzdGF0aWMgbnNyZXN1bHQgQXV0b1JlZ2lzdGVyQ29tcG9uZW50KFBS
SW50MzIgd2hlbiwgbnNJRmlsZSAqY29tcG9uZW50KTsKICBzdGF0aWMgbnNyZXN1bHQgQXV0b1Vu
cmVnaXN0ZXJDb21wb25lbnQoUFJJbnQzMiB3aGVuLCBuc0lGaWxlICpjb21wb25lbnQpOwoKCiAg
c3RhdGljIG5zcmVzdWx0IElzUmVnaXN0ZXJlZChjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sICphUmVnaXN0ZXJlZCk7CgoKICBzdGF0aWMg
bnNyZXN1bHQgRW51bWVyYXRlQ0xTSURzKG5zSUVudW1lcmF0b3IqKiBhRW11bWVyYXRvcik7CgoK
ICBzdGF0aWMgbnNyZXN1bHQgRW51bWVyYXRlQ29udHJhY3RJRHMobnNJRW51bWVyYXRvcioqIGFF
bXVtZXJhdG9yKTsKCn07CgoKY2xhc3MgbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEIDogcHVibGljIG5z
Q09NUHRyX2hlbHBlcgogICAgICAgIHsKICAgICAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEKCBjb25zdCBuc0NJRCYgYUNJRCwg
bnNJU3VwcG9ydHMqIGFPdXRlciwgbnNyZXN1bHQqIGFFcnJvclB0ciApCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1DSUQoYUNJRCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1PdXRlcihhT3V0ZXIpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRXJyb3JQdHIoYUVycm9yUHRy
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBv
cGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwoKICAgICAgICAgICAgICAg
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQ0lEJiBtQ0lEOwogICAg
ICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyogbU91dGVyOwogICAgICAgICAgICAgICAg
ICAgICAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwogICAgICAgIH07CgpjbGFzcyBuc0NyZWF0ZUlu
c3RhbmNlQnlDb250cmFjdElEIDogcHVibGljIG5zQ09NUHRyX2hlbHBlcgogICAgICAgIHsKICAg
ICAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgbnNDcmVhdGVJbnN0
YW5jZUJ5Q29udHJhY3RJRCggY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBh
T3V0ZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBtQ29udHJhY3RJRChhQ29udHJhY3RJRCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1PdXRlcihhT3V0ZXIpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRXJyb3JQdHIoYUVycm9yUHRy
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBv
cGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwoKICAgICAgICAgICAgICAg
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1Db250cmFjdElE
OwogICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyogbU91dGVyOwogICAgICAgICAg
ICAgICAgICAgICAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwogICAgICAgIH07CgpjbGFzcyBuc0Ny
ZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5IDogcHVibGljIG5zQ09NUHRyX2hlbHBlcgp7CnB1Ymxp
YzoKICAgIG5zQ3JlYXRlSW5zdGFuY2VGcm9tQ2F0ZWdvcnkoY29uc3QgY2hhciAqYUNhdGVnb3J5
LCBjb25zdCBjaGFyICphRW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SVN1cHBvcnRzICphT3V0ZXIsIG5zcmVzdWx0ICphRXJyb3JQdHIpCiAgICAgICAgOiBtQ2F0ZWdv
cnkoYUNhdGVnb3J5KSwKICAgICAgICAgIG1FbnRyeShhRW50cnkpLAogICAgICAgICAgbUVycm9y
UHRyKGFFcnJvclB0cikKICAgIHsKCiAgICB9CiAgICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9y
KCkoIGNvbnN0IG5zSUlEJiwgdm9pZCoqICkgY29uc3Q7CiAgICB2aXJ0dWFsIH5uc0NyZWF0ZUlu
c3RhbmNlRnJvbUNhdGVnb3J5KCkge307Cgpwcml2YXRlOgogICAgY29uc3QgY2hhciAqbUNhdGVn
b3J5OwogICAgY29uc3QgY2hhciAqbUVudHJ5OwogICAgbnNJU3VwcG9ydHMgKm1PdXRlcjsKICAg
IG5zcmVzdWx0ICptRXJyb3JQdHI7Cn07CgppbmxpbmUKY29uc3QgbnNDcmVhdGVJbnN0YW5jZUJ5
Q0lECmRvX0NyZWF0ZUluc3RhbmNlKCBjb25zdCBuc0NJRCYgYUNJRCwgbnNyZXN1bHQqIGVycm9y
ID0gMCApCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIG5zQ3JlYXRlSW5zdGFuY2VC
eUNJRChhQ0lELCAwLCBlcnJvcik7CiAgICAgICAgfQoKaW5saW5lCmNvbnN0IG5zQ3JlYXRlSW5z
dGFuY2VCeUNJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgbnNDSUQmIGFDSUQsIG5zSVN1cHBv
cnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQogICAgICAgIHsKICAgICAgICAgICAg
ICAgIHJldHVybiBuc0NyZWF0ZUluc3RhbmNlQnlDSUQoYUNJRCwgYU91dGVyLCBlcnJvcik7CiAg
ICAgICAgfQoKaW5saW5lCmNvbnN0IG5zQ3JlYXRlSW5zdGFuY2VCeUNvbnRyYWN0SUQKZG9fQ3Jl
YXRlSW5zdGFuY2UoIGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBuc3Jlc3VsdCogZXJyb3IgPSAw
ICkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUJ5Q29u
dHJhY3RJRChhQ29udHJhY3RJRCwgMCwgZXJyb3IpOwogICAgICAgIH0KCmlubGluZQpjb25zdCBu
c0NyZWF0ZUluc3RhbmNlQnlDb250cmFjdElECmRvX0NyZWF0ZUluc3RhbmNlKCBjb25zdCBjaGFy
KiBhQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMqIGFPdXRlciwgbnNyZXN1bHQqIGVycm9yID0gMCAp
CiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIG5zQ3JlYXRlSW5zdGFuY2VCeUNvbnRy
YWN0SUQoYUNvbnRyYWN0SUQsIGFPdXRlciwgZXJyb3IpOwogICAgICAgIH0KCmlubGluZQpjb25z
dCBuc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5CmRvX0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVn
b3J5KCBjb25zdCBjaGFyICphQ2F0ZWdvcnksIGNvbnN0IGNoYXIgKmFFbnRyeSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zcmVzdWx0ICphRXJyb3JQdHIgPSAwKQp7CiAgICByZXR1
cm4gbnNDcmVhdGVJbnN0YW5jZUZyb21DYXRlZ29yeShhQ2F0ZWdvcnksIGFFbnRyeSwgMCwgYUVy
cm9yUHRyKTsKfQoKaW5saW5lCmNvbnN0IG5zQ3JlYXRlSW5zdGFuY2VGcm9tQ2F0ZWdvcnkKZG9f
Q3JlYXRlSW5zdGFuY2VGcm9tQ2F0ZWdvcnkoIGNvbnN0IGNoYXIgKmFDYXRlZ29yeSwgY29uc3Qg
Y2hhciAqYUVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMg
KmFPdXRlciwgbnNyZXN1bHQgKmFFcnJvclB0ciA9IDApCnsKICAgIHJldHVybiBuc0NyZWF0ZUlu
c3RhbmNlRnJvbUNhdGVnb3J5KGFDYXRlZ29yeSwgYUVudHJ5LCBhT3V0ZXIsIGFFcnJvclB0cik7
Cn0KCgpleHRlcm4gY29uc3QgY2hhciB4cGNvbUtleU5hbWVbXTsKZXh0ZXJuIGNvbnN0IGNoYXIg
eHBjb21Db21wb25lbnRzS2V5TmFtZVtdOwpleHRlcm4gY29uc3QgY2hhciBsYXN0TW9kVmFsdWVO
YW1lW107CmV4dGVybiBjb25zdCBjaGFyIGZpbGVTaXplVmFsdWVOYW1lW107CmV4dGVybiBjb25z
dCBjaGFyIG5hdGl2ZUNvbXBvbmVudFR5cGVbXTsKIyA1NzcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiIDIKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zVmlld3NDSUQuaCIgMgojIDM4ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiIDEKIyAzOSAi
bnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNHVUlFdmVudC5oIiAxCiMgNDAgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvbnRNZXRyaWNzLmgiIDEKIyAyNiAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUZvbnRNZXRyaWNzLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUZvbnRNZXRyaWNzLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDb29yZC5o
IiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb250TWV0cmljcy5oIiAyCgpz
dHJ1Y3QgbnNGb250OwpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNJRGV2aWNlQ29udGV4dDsKY2xh
c3MgbnNJQXRvbTsKIyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvbnRNZXRyaWNz
LmgiCnR5cGVkZWYgdm9pZCogbnNGb250SGFuZGxlOwojIDYzICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJRm9udE1ldHJpY3MuaCIKY2xhc3MgbnNJRm9udE1ldHJpY3MgOiBwdWJsaWMgbnNJ
U3VwcG9ydHMKewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj
IGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhjNzRjYjc3MCwgMHhhMzNlLCAweDExZDEsIHsgMHhhOCwg
MHgyNCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5YSwgMHgyOCwgMHhjOSB9IH07IHJldHVybiBpaWQ7
fQoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQoY29uc3QgbnNGb250JiBhRm9udCwgbnNJ
QXRvbSogYUxhbmdHcm91cCwKICAgICAgICAgICAgICAgICAgIG5zSURldmljZUNvbnRleHQgKmFD
b250ZXh0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlc3Ryb3koKSA9IDA7CgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0WEhlaWdodChuc2Nvb3JkJiBhUmVzdWx0KSA9IDA7CgoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdXBlcnNjcmlwdE9mZnNldChuc2Nvb3JkJiBhUmVzdWx0
KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdWJzY3JpcHRPZmZzZXQobnNjb29y
ZCYgYVJlc3VsdCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RyaWtlb3V0KG5z
Y29vcmQmIGFPZmZzZXQsIG5zY29vcmQmIGFTaXplKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRVbmRlcmxpbmUobnNjb29yZCYgYU9mZnNldCwgbnNjb29yZCYgYVNpemUpID0gMDsK
IyAxMjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb250TWV0cmljcy5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0SGVpZ2h0KG5zY29vcmQgJmFIZWlnaHQpID0gMDsKIyAxMzIgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb250TWV0cmljcy5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0Tm9ybWFsTGluZUhlaWdodChuc2Nvb3JkICZhSGVpZ2h0KSA9IDA7CgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRMZWFkaW5nKG5zY29vcmQgJmFMZWFkaW5nKSA9IDA7CgoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0RW1IZWlnaHQobnNjb29yZCAmYUhlaWdodCkgPSAwOwoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldEVtQXNjZW50KG5zY29vcmQgJmFBc2NlbnQpID0gMDsKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRFbURlc2NlbnQobnNjb29yZCAmYURlc2NlbnQpID0gMDsKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWF4SGVpZ2h0KG5zY29vcmQgJmFIZWlnaHQpID0gMDsK
CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNYXhBc2NlbnQobnNjb29yZCAmYUFzY2VudCkg
PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNYXhEZXNjZW50KG5zY29vcmQgJmFEZXNj
ZW50KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWF4QWR2YW5jZShuc2Nvb3JkICZh
QWR2YW5jZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZvbnQoY29uc3QgbnNGb250
IComYUZvbnQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYW5nR3JvdXAobnNJQXRv
bSoqIGFMYW5nR3JvdXApID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb250SGFuZGxl
KG5zRm9udEhhbmRsZSAmYUhhbmRsZSkgPSAwOwoKCgoKCgoKfTsKIyA0MSAibnNGb3JtQ29udHJv
bEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybUNvbnRy
b2wuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybUNvbnRyb2wuaCIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI2ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybUNvbnRyb2wuaCIgMgpjbGFzcyBuc0lET01IVE1M
Rm9ybUVsZW1lbnQ7CiMgNjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtQ29udHJv
bC5oIgpjbGFzcyBuc0lGb3JtQ29udHJvbCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoK
CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7IHN0YXRpYyBuc0lJRCBpaWQgPSB7IDB4
MjgyZmY0NDAsIDB4Y2Q3ZSwgMHgxMWQxLCB7MHg4OSwgMHhhZCwgMHgwMCwgMHg2MCwgMHgwOCwg
MHg5MSwgMHgxYiwgMHg4MX0gfTsgcmV0dXJuIGlpZDsgfQoKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0Rm9ybShuc0lET01IVE1MRm9ybUVsZW1lbnQqKiBhRm9ybSkgPSAwOwoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0Rm9ybShuc0lET01IVE1MRm9ybUVsZW1lbnQqIGFGb3JtLAogICAg
ICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlbW92ZUZyb21Gb3JtID0gMSkgPSAwOwoKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZShQUkludDMyKiBhVHlwZSkgPSAwOwoKICB2aXJ0dWFs
IG5zcmVzdWx0IEluaXQoKSA9IDA7Cgp9OwojIDQyICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIg
MgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250ZXh0LmgiIDEKIyAy
NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURldmljZUNvbnRleHQuaCIKIyAxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zQ29vcmQuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2
aWNlQ29udGV4dC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zUmVjdC5oIiAx
CiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250ZXh0LmgiIDIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiIDEKIyAzMCAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSURldmljZUNvbnRleHQuaCIgMgoKY2xhc3MgbnNJUmVuZGVyaW5n
Q29udGV4dDsKY2xhc3MgbnNJVmlldzsKY2xhc3MgbnNJRm9udE1ldHJpY3M7CmNsYXNzIG5zSVdp
ZGdldDsKY2xhc3MgbnNJRGV2aWNlQ29udGV4dFNwZWM7CmNsYXNzIG5zSUF0b207CgpzdHJ1Y3Qg
bnNGb250OwpzdHJ1Y3QgbnNDb2xvcjsKCgp0eXBlZGVmIHZvaWQgKiBuc05hdGl2ZURldmljZUNv
bnRleHQ7CgoKCgoKCnR5cGVkZWYgdm9pZCAqIG5zUGFsZXR0ZTsKCgpzdHJ1Y3QgbnNQYWxldHRl
SW5mbyB7CiAgUFJQYWNrZWRCb29sIGlzUGFsZXR0ZURldmljZTsKICBQUlVpbnQxNiBzaXplUGFs
ZXR0ZTsKICBQUlVpbnQxNiBudW1SZXNlcnZlZDsKICBuc1BhbGV0dGUgcGFsZXR0ZTsKfTsKCgoK
CgogIHR5cGVkZWYgZW51bSB7CgogICAgZVN5c3RlbUF0dHJfQ29sb3JfV2luZG93QmFja2dyb3Vu
ZCwKICAgIGVTeXN0ZW1BdHRyX0NvbG9yX1dpbmRvd0ZvcmVncm91bmQsCiAgICBlU3lzdGVtQXR0
cl9Db2xvcl9XaWRnZXRCYWNrZ3JvdW5kLAogICAgZVN5c3RlbUF0dHJfQ29sb3JfV2lkZ2V0Rm9y
ZWdyb3VuZCwKICAgIGVTeXN0ZW1BdHRyX0NvbG9yX1dpZGdldFNlbGVjdEJhY2tncm91bmQsCiAg
ICBlU3lzdGVtQXR0cl9Db2xvcl9XaWRnZXRTZWxlY3RGb3JlZ3JvdW5kLAogICAgZVN5c3RlbUF0
dHJfQ29sb3JfV2lkZ2V0M0RIaWdobGlnaHQsCiAgICBlU3lzdGVtQXR0cl9Db2xvcl9XaWRnZXQz
RFNoYWRvdywKICAgIGVTeXN0ZW1BdHRyX0NvbG9yX1RleHRCYWNrZ3JvdW5kLAogICAgZVN5c3Rl
bUF0dHJfQ29sb3JfVGV4dEZvcmVncm91bmQsCiAgICBlU3lzdGVtQXR0cl9Db2xvcl9UZXh0U2Vs
ZWN0QmFja2dyb3VuZCwKICAgIGVTeXN0ZW1BdHRyX0NvbG9yX1RleHRTZWxlY3RGb3JlZ3JvdW5k
LAoKICAgIGVTeXN0ZW1BdHRyX1NpemVfV2luZG93VGl0bGVIZWlnaHQsCiAgICBlU3lzdGVtQXR0
cl9TaXplX1dpbmRvd0JvcmRlcldpZHRoLAogICAgZVN5c3RlbUF0dHJfU2l6ZV9XaW5kb3dCb3Jk
ZXJIZWlnaHQsCiAgICBlU3lzdGVtQXR0cl9TaXplX1dpZGdldDNEQm9yZGVyLAogICAgZVN5c3Rl
bUF0dHJfU2l6ZV9TY3JvbGxiYXJIZWlnaHQsCiAgICBlU3lzdGVtQXR0cl9TaXplX1Njcm9sbGJh
cldpZHRoLAoKICAgIGVTeXN0ZW1BdHRyX0ZvbnRfQ2FwdGlvbiwKICAgIGVTeXN0ZW1BdHRyX0Zv
bnRfSWNvbiwKICAgIGVTeXN0ZW1BdHRyX0ZvbnRfTWVudSwKICAgIGVTeXN0ZW1BdHRyX0ZvbnRf
TWVzc2FnZUJveCwKICAgIGVTeXN0ZW1BdHRyX0ZvbnRfU21hbGxDYXB0aW9uLAogICAgZVN5c3Rl
bUF0dHJfRm9udF9TdGF0dXNCYXIsCgogICAgICAgICAgICAgICAgZVN5c3RlbUF0dHJfRm9udF9X
aW5kb3csCiAgICAgICAgICAgICAgICBlU3lzdGVtQXR0cl9Gb250X0RvY3VtZW50LAogICAgICAg
ICAgICAgICAgZVN5c3RlbUF0dHJfRm9udF9Xb3Jrc3BhY2UsCiAgICAgICAgICAgICAgICBlU3lz
dGVtQXR0cl9Gb250X0Rlc2t0b3AsCiAgICAgICAgICAgICAgICBlU3lzdGVtQXR0cl9Gb250X0lu
Zm8sCiAgICAgICAgICAgICAgICBlU3lzdGVtQXR0cl9Gb250X0RpYWxvZywKICAgICAgICAgICAg
ICAgIGVTeXN0ZW1BdHRyX0ZvbnRfQnV0dG9uLAogICAgICAgICAgICAgICAgZVN5c3RlbUF0dHJf
Rm9udF9QdWxsRG93bk1lbnUsCiAgICAgICAgICAgICAgICBlU3lzdGVtQXR0cl9Gb250X0xpc3Qs
CiAgICAgICAgICAgICAgICBlU3lzdGVtQXR0cl9Gb250X0ZpZWxkLAoKICAgIGVTeXN0ZW1BdHRy
X0ZvbnRfVG9vbHRpcHMsCiAgICBlU3lzdGVtQXR0cl9Gb250X1dpZGdldAogIH0gbnNTeXN0ZW1B
dHRySUQ7CgogIHR5cGVkZWYgdW5pb24gewogICAgUFJVaW50MzIgbVNpemU7CiAgICBuc2NvbG9y
ICogbUNvbG9yOwogICAgbnNGb250ICogbUZvbnQ7CiAgfSBTeXN0ZW1BdHRyU3RydWN0OwojIDEy
MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURldmljZUNvbnRleHQuaCIKc3RydWN0IF9O
SV9Db2xvclNwYWNlOwp0eXBlZGVmIF9OSV9Db2xvclNwYWNlIE5JX0NvbG9yU3BhY2U7CnR5cGVk
ZWYgTklfQ29sb3JTcGFjZSBJTF9Db2xvclNwYWNlOwoKY2xhc3MgbnNJRGV2aWNlQ29udGV4dCA6
IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ
RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDU5MzFjNTgwLCAweGI5MTcsIDB4MTFk
MSwgeyAweGE4LCAweDI0LCAweDAwLCAweDQwLCAweDk1LCAweDlhLCAweDI4LCAweGM5IH0gfTsg
cmV0dXJuIGlpZDt9CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zTmF0aXZlV2lkZ2V0
IGFXaWRnZXQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVSZW5kZXJpbmdD
b250ZXh0KG5zSVZpZXcgKmFWaWV3LCBuc0lSZW5kZXJpbmdDb250ZXh0IComYUNvbnRleHQpID0g
MDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVSZW5kZXJpbmdDb250ZXh0KG5zSVdp
ZGdldCAqYVdpZGdldCwgbnNJUmVuZGVyaW5nQ29udGV4dCAqJmFDb250ZXh0KSA9IDA7CgoKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlUmVuZGVyaW5nQ29udGV4dChuc0lSZW5kZXJpbmdD
b250ZXh0IComYUNvbnRleHQpID0gMDsKIyAxNzEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lEZXZpY2VDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0UmVuZGVyaW5nQ29udGV4
dChuc0lSZW5kZXJpbmdDb250ZXh0ICphQ29udGV4dCwgbnNJV2lkZ2V0ICphV2luZG93KSA9IDA7
CiMgMTgwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgU3VwcG9ydHNOYXRpdmVXaWRnZXRzKFBSQm9vbCAmYVN1cHBvcnRzV2lk
Z2V0cykgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERldlVuaXRzVG9Ud2lwcyhm
bG9hdCAmYURldlVuaXRzVG9Ud2lwcykgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0VHdpcHNUb0RldlVuaXRzKGZsb2F0ICZhVHdpcHNUb0RldlVuaXRzKSBjb25zdCA9IDA7
CiMgMjA5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0QXBwVW5pdHNUb0RldlVuaXRzKGZsb2F0IGFBcHBVbml0cykgPSAw
OwojIDIxOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURldmljZUNvbnRleHQuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IFNldERldlVuaXRzVG9BcHBVbml0cyhmbG9hdCBhRGV2VW5pdHMpID0g
MDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBcHBVbml0c1RvRGV2VW5pdHMoZmxvYXQg
JmFBcHBVbml0cykgY29uc3QgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERldlVu
aXRzVG9BcHBVbml0cyhmbG9hdCAmYURldlVuaXRzKSBjb25zdCA9IDA7CiMgMjQ3ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0Q2Fub25pY2FsUGl4ZWxTY2FsZShmbG9hdCAmYVNjYWxlKSBjb25zdCA9IDA7CiMgMjU2ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0U2Nyb2xsQmFyRGltZW5zaW9ucyhmbG9hdCAmYVdpZHRoLCBmbG9hdCAmYUhlaWdo
dCkgY29uc3QgPSAwOwojIDI2NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURldmljZUNv
bnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN5c3RlbUF0dHJpYnV0ZShuc1N5c3RlbUF0
dHJJRCBhbklELCBTeXN0ZW1BdHRyU3RydWN0ICogYUluZm8pIGNvbnN0ID0gMDsKIyAyNzUgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRNZXRyaWNzRm9yKGNvbnN0IG5zRm9udCYgYUZvbnQsIG5zSUF0b20qIGFMYW5nR3Jv
dXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGb250TWV0cmljcyomIGFNZXRyaWNz
KSA9IDA7CiMgMjg1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRGV2aWNlQ29udGV4dC5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWV0cmljc0Zvcihjb25zdCBuc0ZvbnQmIGFGb250LCBu
c0lGb250TWV0cmljcyomIGFNZXRyaWNzKSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRa
b29tKGZsb2F0IGFab29tKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRab29tKGZsb2F0ICZh
Wm9vbSkgY29uc3QgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGV4dFpvb20oZmxvYXQg
YVRleHRab29tKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUZXh0Wm9vbShmbG9hdCAmYVRl
eHRab29tKSBjb25zdCA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERyYXdpbmdTdXJm
YWNlKG5zSVJlbmRlcmluZ0NvbnRleHQgJmFDb250ZXh0LCBuc0RyYXdpbmdTdXJmYWNlICZhU3Vy
ZmFjZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRHYW1tYShmbG9hdCAmYUdhbW1zKSA9
IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRHYW1tYShmbG9hdCBhR2FtbWEpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0R2FtbWFUYWJsZShQUlVpbnQ4IComYUdhbW1hVGFibGUpID0gMDsK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBMb2FkSWNvbkltYWdlKFBSSW50MzIgYUlkLCBuc0lJbWFn
ZSomIGFJbWFnZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tGb250RXhpc3Rl
bmNlKGNvbnN0IG5zU3RyaW5nJiBhRmFjZU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEZp
cnN0RXhpc3RpbmdGb250KGNvbnN0IG5zRm9udCYgYUZvbnQsIG5zU3RyaW5nJiBhRmFjZU5hbWUp
ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMb2NhbEZvbnROYW1lKGNvbnN0IG5zU3RyaW5n
JiBhRmFjZU5hbWUsIG5zU3RyaW5nJiBhTG9jYWxOYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUkJvb2wmIGFBbGlhc2VkKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBG
bHVzaEZvbnRDYWNoZSh2b2lkKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVwdGgo
UFJVaW50MzImIGFEZXB0aCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldElMQ29s
b3JTcGFjZShJTF9Db2xvclNwYWNlKiYgYUNvbG9yU3BhY2UpID0gMDsKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRQYWxldHRlSW5mbyhuc1BhbGV0dGVJbmZvJikgPSAwOwoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IENvbnZlcnRQaXhlbChuc2NvbG9yIGFDb2xvciwgUFJVaW50MzIgJiBhUGl4ZWwp
ID0gMDsKIyAzNjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250ZXh0Lmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZXZpY2VTdXJmYWNlRGltZW5zaW9ucyhQUkludDMyICZh
V2lkdGgsIFBSSW50MzIgJmFIZWlnaHQpID0gMDsKIyAzNzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lEZXZpY2VDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZWN0ICggbnNS
ZWN0ICZhUmVjdCApID0gMDsKIyAzODQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZp
Y2VDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGllbnRSZWN0KG5zUmVjdCAmYVJl
Y3QpID0gMDsKIyAzOTYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEZXZpY2VDb250ZXh0
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZXZpY2VDb250ZXh0Rm9yKG5zSURldmljZUNvbnRl
eHRTcGVjICphRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lEZXZp
Y2VDb250ZXh0IComYUNvbnRleHQpID0gMDsKIyA0MDggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lEZXZpY2VDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBCZWdpbkRvY3VtZW50KFBS
VW5pY2hhciAqIGFUaXRsZSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVuZERvY3Vt
ZW50KHZvaWQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBCZWdpblBhZ2Uodm9pZCkg
PSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVuZFBhZ2Uodm9pZCkgPSAwOwp9OwojIDQz
ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0hUTUxBdG9tcy5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hUTUxB
dG9tcy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lBdG9tLmgiIDEKIyAyNiAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSFRNTEF0b21zLmgiIDIKIyAzNiAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSFRNTEF0b21zLmgiCmNsYXNzIG5zSFRNTEF0b21zIHsKcHVibGlj
OgoKICBzdGF0aWMgdm9pZCBBZGRSZWZBdG9tcygpOwogIHN0YXRpYyB2b2lkIFJlbGVhc2VBdG9t
cygpOwojIDUwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MQXRvbXMuaCIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MQXRvbUxpc3QuaCIgMQojIDM5ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNIVE1MQXRvbUxpc3QuaCIKc3RhdGljIG5zSUF0b20qIG1vekFu
b255bW91c0Jsb2NrOwpzdGF0aWMgbnNJQXRvbSogbW96QW5vbnltb3VzUG9zaXRpb25lZEJsb2Nr
OwpzdGF0aWMgbnNJQXRvbSogbW96Rmlyc3RMaW5lRml4dXA7CnN0YXRpYyBuc0lBdG9tKiBtb3pM
ZXR0ZXJGcmFtZTsKc3RhdGljIG5zSUF0b20qIG1vekxpbmVGcmFtZTsKc3RhdGljIG5zSUF0b20q
IG1vekxpc3RCdWxsZXRQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBtb3pTaW5nbGVMaW5lVGV4dENv
bnRyb2xGcmFtZTsKc3RhdGljIG5zSUF0b20qIG1vekZvY3VzSW5uZXJQc2V1ZG87CnN0YXRpYyBu
c0lBdG9tKiBtb3pGb2N1c091dGVyUHNldWRvOwpzdGF0aWMgbnNJQXRvbSogbW96RGlzcGxheUNv
bWJvYm94Q29udHJvbEZyYW1lOwoKc3RhdGljIG5zSUF0b20qIF9iYXNlSHJlZjsKc3RhdGljIG5z
SUF0b20qIF9iYXNlVGFyZ2V0OwpzdGF0aWMgbnNJQXRvbSogYTsKc3RhdGljIG5zSUF0b20qIGFi
YnI7CnN0YXRpYyBuc0lBdG9tKiBhYm92ZTsKc3RhdGljIG5zSUF0b20qIGFjY2VwdDsKc3RhdGlj
IG5zSUF0b20qIGFjY2VwdGNoYXJzZXQ7CnN0YXRpYyBuc0lBdG9tKiBhY2Nlc3NrZXk7CnN0YXRp
YyBuc0lBdG9tKiBhY3Rpb247CnN0YXRpYyBuc0lBdG9tKiBhbGlnbjsKc3RhdGljIG5zSUF0b20q
IGFsaW5rOwpzdGF0aWMgbnNJQXRvbSogYWx0OwpzdGF0aWMgbnNJQXRvbSogYXBwbGV0OwpzdGF0
aWMgbnNJQXRvbSogYXJjaGl2ZTsKc3RhdGljIG5zSUF0b20qIGFyZWE7CnN0YXRpYyBuc0lBdG9t
KiBheGlzOwpzdGF0aWMgbnNJQXRvbSogYmFja2dyb3VuZDsKc3RhdGljIG5zSUF0b20qIGJlbG93
OwoKCgpzdGF0aWMgbnNJQXRvbSogYmdjb2xvcjsKc3RhdGljIG5zSUF0b20qIGJsb2NrcXVvdGU7
CnN0YXRpYyBuc0lBdG9tKiBib2R5OwpzdGF0aWMgbnNJQXRvbSogYm9yZGVyOwpzdGF0aWMgbnNJ
QXRvbSogYm9yZGVyY29sb3I7CnN0YXRpYyBuc0lBdG9tKiBib3R0b21wYWRkaW5nOwpzdGF0aWMg
bnNJQXRvbSogYnI7CnN0YXRpYyBuc0lBdG9tKiBiOwpzdGF0aWMgbnNJQXRvbSogYnV0dG9uOwpz
dGF0aWMgbnNJQXRvbSogYnV0dG9uQ29udGVudFBzZXVkbzsKc3RhdGljIG5zSUF0b20qIGNhcHRp
b247CnN0YXRpYyBuc0lBdG9tKiBjZWxsQ29udGVudFBzZXVkbzsKc3RhdGljIG5zSUF0b20qIGNl
bGxwYWRkaW5nOwpzdGF0aWMgbnNJQXRvbSogY2VsbHNwYWNpbmc7CnN0YXRpYyBuc0lBdG9tKiBj
aDsKc3RhdGljIG5zSUF0b20qIF9jaGFyOwpzdGF0aWMgbnNJQXRvbSogY2hhcm9mZjsKc3RhdGlj
IG5zSUF0b20qIGNoYXJzZXQ7CnN0YXRpYyBuc0lBdG9tKiBjaGVja2VkOwpzdGF0aWMgbnNJQXRv
bSogY2l0ZTsKc3RhdGljIG5zSUF0b20qIGtDbGFzczsKc3RhdGljIG5zSUF0b20qIGNsYXNzaWQ7
CnN0YXRpYyBuc0lBdG9tKiBjbGVhcjsKc3RhdGljIG5zSUF0b20qIGNsaXA7CnN0YXRpYyBuc0lB
dG9tKiBjb2RlOwpzdGF0aWMgbnNJQXRvbSogY29kZWJhc2U7CnN0YXRpYyBuc0lBdG9tKiBjb2Rl
dHlwZTsKc3RhdGljIG5zSUF0b20qIGNvbG9yOwpzdGF0aWMgbnNJQXRvbSogY29sOwpzdGF0aWMg
bnNJQXRvbSogY29sZ3JvdXA7CnN0YXRpYyBuc0lBdG9tKiBjb2xzOwpzdGF0aWMgbnNJQXRvbSog
Y29sc3BhbjsKc3RhdGljIG5zSUF0b20qIGNvbWJvYm94OwpzdGF0aWMgbnNJQXRvbSogY29sdW1u
UHNldWRvOwpzdGF0aWMgbnNJQXRvbSogY29tbWVudFBzZXVkbzsKc3RhdGljIG5zSUF0b20qIGNv
bXBhY3Q7CnN0YXRpYyBuc0lBdG9tKiBjb250ZW50OwpzdGF0aWMgbnNJQXRvbSogY29vcmRzOwpz
dGF0aWMgbnNJQXRvbSogZGQ7CnN0YXRpYyBuc0lBdG9tKiBkZWZhdWx0Y2hlY2tlZDsKc3RhdGlj
IG5zSUF0b20qIGRlZmF1bHRzZWxlY3RlZDsKc3RhdGljIG5zSUF0b20qIGRlZmF1bHR2YWx1ZTsK
c3RhdGljIG5zSUF0b20qIGRlY2xhcmU7CnN0YXRpYyBuc0lBdG9tKiBkZWZlcjsKc3RhdGljIG5z
SUF0b20qIGRpcjsKc3RhdGljIG5zSUF0b20qIGRpdjsKc3RhdGljIG5zSUF0b20qIGRpc2FibGVk
OwpzdGF0aWMgbnNJQXRvbSogZGw7CnN0YXRpYyBuc0lBdG9tKiBkcm9wRG93bkxpc3RQc2V1ZG87
CnN0YXRpYyBuc0lBdG9tKiBkdDsKCnN0YXRpYyBuc0lBdG9tKiBkYXRldGltZTsKc3RhdGljIG5z
SUF0b20qIGRhdGE7CnN0YXRpYyBuc0lBdG9tKiBkZm47CnN0YXRpYyBuc0lBdG9tKiBlbTsKc3Rh
dGljIG5zSUF0b20qIGVtYmVkOwpzdGF0aWMgbnNJQXRvbSogZW5jb2Rpbmc7CnN0YXRpYyBuc0lB
dG9tKiBlbmN0eXBlOwpzdGF0aWMgbnNJQXRvbSogZmFjZTsKc3RhdGljIG5zSUF0b20qIGZpZWxk
c2V0OwpzdGF0aWMgbnNJQXRvbSogZmllbGRzZXRDb250ZW50UHNldWRvOwpzdGF0aWMgbnNJQXRv
bSogZmlyc3RMZXR0ZXJQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiBmaXJzdExpbmVQc2V1ZG87CnN0
YXRpYyBuc0lBdG9tKiBmb250OwpzdGF0aWMgbnNJQXRvbSogZm9udFdlaWdodDsKc3RhdGljIG5z
SUF0b20qIF9mb3I7CnN0YXRpYyBuc0lBdG9tKiBmb3JtOwpzdGF0aWMgbnNJQXRvbSogZnJhbWU7
CnN0YXRpYyBuc0lBdG9tKiBmcmFtZWJvcmRlcjsKc3RhdGljIG5zSUF0b20qIGZyYW1lc2V0Owpz
dGF0aWMgbnNJQXRvbSogZnJhbWVzZXRCbGFua1BzZXVkbzsKc3RhdGljIG5zSUF0b20qIGd1dHRl
cjsKc3RhdGljIG5zSUF0b20qIGgxOwpzdGF0aWMgbnNJQXRvbSogaDI7CnN0YXRpYyBuc0lBdG9t
KiBoMzsKc3RhdGljIG5zSUF0b20qIGg0OwpzdGF0aWMgbnNJQXRvbSogaDU7CnN0YXRpYyBuc0lB
dG9tKiBoNjsKc3RhdGljIG5zSUF0b20qIGhlYWQ7CnN0YXRpYyBuc0lBdG9tKiBoZWFkZXJDb250
ZW50QmFzZTsKc3RhdGljIG5zSUF0b20qIGhlYWRlckNvbnRlbnRMYW5ndWFnZTsKc3RhdGljIG5z
SUF0b20qIGhlYWRlckNvbnRlbnRTY3JpcHRUeXBlOwpzdGF0aWMgbnNJQXRvbSogaGVhZGVyQ29u
dGVudFN0eWxlVHlwZTsKc3RhdGljIG5zSUF0b20qIGhlYWRlckNvbnRlbnRUeXBlOwpzdGF0aWMg
bnNJQXRvbSogaGVhZGVyRGVmYXVsdFN0eWxlOwpzdGF0aWMgbnNJQXRvbSogaGVhZGVyV2luZG93
VGFyZ2V0OwpzdGF0aWMgbnNJQXRvbSogaGVhZGVyczsKc3RhdGljIG5zSUF0b20qIGhlaWdodDsK
c3RhdGljIG5zSUF0b20qIGhpZGRlbjsKc3RhdGljIG5zSUF0b20qIGhvcml6b250YWxGcmFtZXNl
dEJvcmRlclBzZXVkbzsKc3RhdGljIG5zSUF0b20qIGhyOwpzdGF0aWMgbnNJQXRvbSogaHJlZjsK
c3RhdGljIG5zSUF0b20qIGhyZWZsYW5nOwpzdGF0aWMgbnNJQXRvbSogaHNwYWNlOwpzdGF0aWMg
bnNJQXRvbSogaHRtbDsKc3RhdGljIG5zSUF0b20qIGh0dHBFcXVpdjsKc3RhdGljIG5zSUF0b20q
IGliUHNldWRvOwpzdGF0aWMgbnNJQXRvbSogaTsKc3RhdGljIG5zSUF0b20qIGlkOwpzdGF0aWMg
bnNJQXRvbSogaWZyYW1lOwpzdGF0aWMgbnNJQXRvbSogaWxheWVyOwpzdGF0aWMgbnNJQXRvbSog
aW1nOwpzdGF0aWMgbnNJQXRvbSogaW5kZXg7CnN0YXRpYyBuc0lBdG9tKiBpbnB1dDsKc3RhdGlj
IG5zSUF0b20qIGlzaW5kZXg7CnN0YXRpYyBuc0lBdG9tKiBpc21hcDsKc3RhdGljIG5zSUF0b20q
IGxhYmVsOwpzdGF0aWMgbnNJQXRvbSogbGFiZWxDb250ZW50UHNldWRvOwpzdGF0aWMgbnNJQXRv
bSogbGFuZzsKc3RhdGljIG5zSUF0b20qIGxheWVyOwpzdGF0aWMgbnNJQXRvbSogbGF5b3V0Owpz
dGF0aWMgbnNJQXRvbSogbGk7CnN0YXRpYyBuc0lBdG9tKiBsaW5rOwpzdGF0aWMgbnNJQXRvbSog
bGVmdDsKc3RhdGljIG5zSUF0b20qIGxlZnRwYWRkaW5nOwpzdGF0aWMgbnNJQXRvbSogbGVnZW5k
OwpzdGF0aWMgbnNJQXRvbSogbGVnZW5kQ29udGVudFBzZXVkbzsKc3RhdGljIG5zSUF0b20qIGxl
bmd0aDsKc3RhdGljIG5zSUF0b20qIGxvbmdkZXNjOwpzdGF0aWMgbnNJQXRvbSogbG93c3JjOwpz
dGF0aWMgbnNJQXRvbSogbWFyZ2luaGVpZ2h0OwpzdGF0aWMgbnNJQXRvbSogbWFyZ2lud2lkdGg7
CnN0YXRpYyBuc0lBdG9tKiBtYXhsZW5ndGg7CnN0YXRpYyBuc0lBdG9tKiBtYXlzY3JpcHQ7CnN0
YXRpYyBuc0lBdG9tKiBtZWRpYTsKc3RhdGljIG5zSUF0b20qIG1lbnU7CnN0YXRpYyBuc0lBdG9t
KiBtZXRhOwpzdGF0aWMgbnNJQXRvbSogbWV0aG9kOwpzdGF0aWMgbnNJQXRvbSogbXVsdGljb2w7
CnN0YXRpYyBuc0lBdG9tKiBtdWx0aXBsZTsKc3RhdGljIG5zSUF0b20qIG5hbWU7CnN0YXRpYyBu
c0lBdG9tKiBub2ZyYW1lczsKc3RhdGljIG5zSUF0b20qIG5vaHJlZjsKc3RhdGljIG5zSUF0b20q
IG5vcmVzaXplOwpzdGF0aWMgbnNJQXRvbSogbm9zY3JpcHQ7CnN0YXRpYyBuc0lBdG9tKiBub3No
YWRlOwpzdGF0aWMgbnNJQXRvbSogbm93cmFwOwpzdGF0aWMgbnNJQXRvbSogb2JqZWN0OwpzdGF0
aWMgbnNJQXRvbSogb2w7CnN0YXRpYyBuc0lBdG9tKiBvcHRpb247CnN0YXRpYyBuc0lBdG9tKiBv
dmVyZmxvdzsKc3RhdGljIG5zSUF0b20qIHA7CnN0YXRpYyBuc0lBdG9tKiBwYWdleDsKc3RhdGlj
IG5zSUF0b20qIHBhZ2V5OwpzdGF0aWMgbnNJQXRvbSogcGFyYW07CnN0YXRpYyBuc0lBdG9tKiBw
bGFjZWhvbGRlclBzZXVkbzsKc3RhdGljIG5zSUF0b20qIHBvaW50U2l6ZTsKc3RhdGljIG5zSUF0
b20qIHByZTsKc3RhdGljIG5zSUF0b20qIHByb2Nlc3NpbmdJbnN0cnVjdGlvblBzZXVkbzsKc3Rh
dGljIG5zSUF0b20qIHByb2ZpbGU7CnN0YXRpYyBuc0lBdG9tKiBwcm9tcHQ7CnN0YXRpYyBuc0lB
dG9tKiByYWRpb1BzZXVkbzsKc3RhdGljIG5zSUF0b20qIGNoZWNrUHNldWRvOwpzdGF0aWMgbnNJ
QXRvbSogcmVhZG9ubHk7CnN0YXRpYyBuc0lBdG9tKiByZWZyZXNoOwpzdGF0aWMgbnNJQXRvbSog
cmVsOwpzdGF0aWMgbnNJQXRvbSogcmVwZWF0OwpzdGF0aWMgbnNJQXRvbSogcmV2OwpzdGF0aWMg
bnNJQXRvbSogcmlnaHRwYWRkaW5nOwpzdGF0aWMgbnNJQXRvbSogcm93czsKc3RhdGljIG5zSUF0
b20qIHJvd3NwYW47CnN0YXRpYyBuc0lBdG9tKiBydWxlczsKc3RhdGljIG5zSUF0b20qIHM7CnN0
YXRpYyBuc0lBdG9tKiBzY2hlbWU7CnN0YXRpYyBuc0lBdG9tKiBzY29wZTsKc3RhdGljIG5zSUF0
b20qIHNjcmlwdDsKc3RhdGljIG5zSUF0b20qIHNjcm9sbGluZzsKc3RhdGljIG5zSUF0b20qIHNl
bGVjdDsKc3RhdGljIG5zSUF0b20qIHNlbGVjdGVkOwpzdGF0aWMgbnNJQXRvbSogc2VsZWN0ZWRp
bmRleDsKc3RhdGljIG5zSUF0b20qIHNldGNvb2tpZTsKc3RhdGljIG5zSUF0b20qIHNoYXBlOwpz
dGF0aWMgbnNJQXRvbSogc2l6ZTsKc3RhdGljIG5zSUF0b20qIHNwYWNlcjsKc3RhdGljIG5zSUF0
b20qIHNwYW47CnN0YXRpYyBuc0lBdG9tKiBzcmM7CnN0YXRpYyBuc0lBdG9tKiBzdGFuZGJ5Owpz
dGF0aWMgbnNJQXRvbSogc3RhcnQ7CnN0YXRpYyBuc0lBdG9tKiBzdHJpa2U7CnN0YXRpYyBuc0lB
dG9tKiBzdHJvbmc7CnN0YXRpYyBuc0lBdG9tKiBzdHlsZTsKc3RhdGljIG5zSUF0b20qIHN1bW1h
cnk7CnN0YXRpYyBuc0lBdG9tKiBzdXBwcmVzczsKc3RhdGljIG5zSUF0b20qIHRhYmluZGV4Owpz
dGF0aWMgbnNJQXRvbSogdGFibGU7CnN0YXRpYyBuc0lBdG9tKiB0YWJsZVBzZXVkbzsKc3RhdGlj
IG5zSUF0b20qIHRhYmxlQ2VsbFBzZXVkbzsKc3RhdGljIG5zSUF0b20qIHRhYmxlQ29sR3JvdXBQ
c2V1ZG87CnN0YXRpYyBuc0lBdG9tKiB0YWJsZUNvbFBzZXVkbzsKc3RhdGljIG5zSUF0b20qIHRh
YmxlT3V0ZXJQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiB0YWJsZVJvd0dyb3VwUHNldWRvOwpzdGF0
aWMgbnNJQXRvbSogdGFibGVSb3dQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiB0YWJzdG9wOwpzdGF0
aWMgbnNJQXRvbSogdGFyZ2V0OwpzdGF0aWMgbnNJQXRvbSogdGJvZHk7CnN0YXRpYyBuc0lBdG9t
KiB0ZDsKc3RhdGljIG5zSUF0b20qIHRmb290OwpzdGF0aWMgbnNJQXRvbSogdGhlYWQ7CnN0YXRp
YyBuc0lBdG9tKiB0ZXh0OwpzdGF0aWMgbnNJQXRvbSogdGV4dGFyZWE7CnN0YXRpYyBuc0lBdG9t
KiB0ZXh0UHNldWRvOwpzdGF0aWMgbnNJQXRvbSogdGg7CnN0YXRpYyBuc0lBdG9tKiB0aXRsZTsK
c3RhdGljIG5zSUF0b20qIHRvcDsKc3RhdGljIG5zSUF0b20qIHRvcHBhZGRpbmc7CnN0YXRpYyBu
c0lBdG9tKiB0cjsKc3RhdGljIG5zSUF0b20qIHR0OwpzdGF0aWMgbnNJQXRvbSogdHlwZTsKc3Rh
dGljIG5zSUF0b20qIHU7CnN0YXRpYyBuc0lBdG9tKiB1bDsKc3RhdGljIG5zSUF0b20qIHVzZW1h
cDsKc3RhdGljIG5zSUF0b20qIHZhbGlnbjsKc3RhdGljIG5zSUF0b20qIHZhbHVlOwpzdGF0aWMg
bnNJQXRvbSogdmFsdWV0eXBlOwpzdGF0aWMgbnNJQXRvbSogdmFyaWFibGU7CnN0YXRpYyBuc0lB
dG9tKiB2Y2FyZF9uYW1lOwpzdGF0aWMgbnNJQXRvbSogdmVyc2lvbjsKc3RhdGljIG5zSUF0b20q
IHZlcnRpY2FsRnJhbWVzZXRCb3JkZXJQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiB2aXNpYmlsaXR5
OwpzdGF0aWMgbnNJQXRvbSogdmxpbms7CnN0YXRpYyBuc0lBdG9tKiB2c3BhY2U7CnN0YXRpYyBu
c0lBdG9tKiB3YnI7CnN0YXRpYyBuc0lBdG9tKiB3aWR0aDsKc3RhdGljIG5zSUF0b20qIHdyYXA7
CnN0YXRpYyBuc0lBdG9tKiB3cmFwcGVkRnJhbWVQc2V1ZG87CnN0YXRpYyBuc0lBdG9tKiB6aW5k
ZXg7CnN0YXRpYyBuc0lBdG9tKiB6X2luZGV4OwoKc3RhdGljIG5zSUF0b20qIG1vel90cmlzdGF0
ZTsKc3RhdGljIG5zSUF0b20qIG1vel90cmlzdGF0ZXZhbHVlOwoKCnN0YXRpYyBuc0lBdG9tKiBp
Zm9ybTsKc3RhdGljIG5zSUF0b20qIGZvcm1fY29udHJvbF9saXN0OwojIDUxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNIVE1MQXRvbXMuaCIgMgoKfTsKIyA0NCAibnNGb3JtQ29udHJvbEhl
bHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQnV0dG9uLmgiIDEK
IyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUJ1dHRvbi5oIgojIDEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lXaWRnZXQuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJQnV0dG9uLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJp
bmcuaCIgMQojIDI4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQnV0dG9uLmgiIDIKIyAz
OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUJ1dHRvbi5oIgpjbGFzcyBuc0lCdXR0b24g
OiBwdWJsaWMgbnNJU3VwcG9ydHMgewoKcHVibGljOgogICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl
dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDE4MDMyYWQwLCAweGIyNjUsIDB4
MTFkMSwgeyAweGFhLCAweDJhLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MCwgMHgwIH0gfTsgcmV0
dXJuIGlpZDt9CiMgNTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lCdXR0b24uaCIKICAg
IHZpcnR1YWwgbnNyZXN1bHQgU2V0TGFiZWwoY29uc3QgbnNTdHJpbmcgJmFUZXh0KSA9IDA7CiMg
NTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lCdXR0b24uaCIKICAgIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0TGFiZWwobnNTdHJpbmcgJmFCdWZmZXIpID0gMDsKCn07CiMgNDUgIm5zRm9ybUNv
bnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNoZWNr
QnV0dG9uLmgiIDEKIyAzMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNoZWNrQnV0dG9u
LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAzMSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNoZWNrQnV0dG9uLmgiIDIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJV2lkZ2V0LmgiIDEKIyAzMiAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSUNoZWNrQnV0dG9uLmgiIDIKCgoKCgoKCmNsYXNzIG5zSUNoZWNrQnV0dG9uIDog
cHVibGljIG5zSVN1cHBvcnRzIHsKCnB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4OTYxMDg1ZjUsIDB4YmQyOCwgMHgx
MWQxLCB7IDB4OTcsIDB4ZWYsIDB4MCwgMHg2MCwgMHg5NywgMHgzLCAweGMxLCAweDRlIH0gfTsg
cmV0dXJuIGlpZDt9CiMgNTEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDaGVja0J1dHRv
bi5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMYWJlbChjb25zdCBuc1N0cmluZyAmYVRleHQp
ID0gMDsKIyA2MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNoZWNrQnV0dG9uLmgiCiAg
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhYmVsKG5zU3RyaW5nICZhQnVmZmVyKSA9IDA7CgoKCgoK
CgogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdGF0ZShjb25zdCBQUkJvb2wgYVN0YXRlKSA9IDA7
CgoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdGF0ZShQUkJvb2wmIGFTdGF0ZSkgPSAw
OwoKfTsKIyA0NiAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJVGV4dFdpZGdldC5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lUZXh0V2lkZ2V0LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVdp
ZGdldC5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0V2lkZ2V0Lmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMQojIDI3ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVGV4dFdpZGdldC5oIiAyCgoKCgoKCnN0cnVjdCBuc1Rl
eHRXaWRnZXRJbml0RGF0YSA6IHB1YmxpYyBuc1dpZGdldEluaXREYXRhIHsKICBuc1RleHRXaWRn
ZXRJbml0RGF0YSgpCiAgICA6IG1Jc1Bhc3N3b3JkKDApLAogICAgICBtSXNSZWFkT25seSgwKQog
IHsKICB9CgogIFBSQm9vbCBtSXNQYXNzd29yZDsKICBQUkJvb2wgbUlzUmVhZE9ubHk7Cn07CiMg
NTMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0V2lkZ2V0LmgiCmNsYXNzIG5zSVRl
eHRXaWRnZXQgOiBwdWJsaWMgbnNJU3VwcG9ydHMKewoKICBwdWJsaWM6CiAgICBzdGF0aWMgY29u
c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweGY4MDMwMDEx
LCAweGMzNDIsIDB4MTFkMSwgeyAweDk3LCAweGYwLCAweDAsIDB4NjAsIDB4OTcsIDB4MywgMHhj
MSwgMHg0ZSB9IH07IHJldHVybiBpaWQ7fQojIDY5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJVGV4dFdpZGdldC5oIgogICAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUZXh0KG5zU3RyaW5nICZh
VGV4dEJ1ZmZlciwgUFJVaW50MzIgYUJ1ZmZlclNpemUsIFBSVWludDMyJiBhQWN0dWFsU2l6ZSkg
PSAwOwojIDgwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJVGV4dFdpZGdldC5oIgogICAg
dmlydHVhbCBuc3Jlc3VsdCBTZXRUZXh0KGNvbnN0IG5zU3RyaW5nICZhVGV4dCwgUFJVaW50MzIm
IGFBY3R1YWxTaXplKSA9IDA7CiMgOTUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0
V2lkZ2V0LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydFRleHQoY29uc3QgbnNTdHJpbmcg
JmFUZXh0LCBQUlVpbnQzMiBhU3RhcnRQb3MsIFBSVWludDMyIGFFbmRQb3MsIFBSVWludDMyJiBh
QWN0dWFsU2l6ZSkgPSAwOwoKCgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVUZXh0KHZv
aWQpID0gMDsKIyAxMTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0V2lkZ2V0Lmgi
CiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhc3N3b3JkKFBSQm9vbCBhSXNQYXNzd29yZCkgPSAw
OwojIDEyMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRXaWRnZXQuaCIKICAgIHZp
cnR1YWwgbnNyZXN1bHQgU2V0TWF4VGV4dExlbmd0aChQUlVpbnQzMiBhQ2hhcnMpID0gMDsKIyAx
MzMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lUZXh0V2lkZ2V0LmgiCiAgICB2aXJ0dWFs
IG5zcmVzdWx0IFNldFJlYWRPbmx5KFBSQm9vbCBhTmV3UmVhZE9ubHlGbGFnLCBQUkJvb2wmIGFP
bGRSZWFkT25seUZsYWcpID0gMDsKCgoKCgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0QWxs
KCkgPSAwOwojIDE0OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRXaWRnZXQuaCIK
ICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2VsZWN0aW9uKFBSVWludDMyIGFTdGFydFNlbCwgUFJV
aW50MzIgYUVuZFNlbCkgPSAwOwojIDE1OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRl
eHRXaWRnZXQuaCIKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VsZWN0aW9uKFBSVWludDMyICph
U3RhcnRTZWwsIFBSVWludDMyICphRW5kU2VsKSA9IDA7CgoKCgoKCgogICAgdmlydHVhbCBuc3Jl
c3VsdCBTZXRDYXJldFBvc2l0aW9uKFBSVWludDMyIGFQb3NpdGlvbikgPSAwOwoKCgoKCgoKICAg
IHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FyZXRQb3NpdGlvbihQUlVpbnQzMiYgYVBvc2l0aW9uKSA9
IDA7Cgp9OwojIDQ3ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgNDggIm5zRm9ybUNvbnRyb2xIZWxwZXIu
Y3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVDb25zdHMuaCIgMQoj
IDQ5ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1VuaXRDb252ZXJzaW9uLmgiIDEKIyA1MCAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVV0aWwuaCIgMQojIDI1ICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVV0aWwuaCIKIyAxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIgMQojIDI2ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNTdHlsZVV0aWwuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Nvb3JkLmgi
IDEKIyAyNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3R5bGVVdGlsLmgiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJlc0NvbnRleHQuaCIgMQojIDI4ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHlsZVV0aWwuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lMaW5rSGFuZGxlci5oIiAxCiMgMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lMaW5rSGFuZGxlci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBw
b3J0cy5oIiAxCiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMaW5rSGFuZGxlci5o
IiAyCgpjbGFzcyBuc0lJbnB1dFN0cmVhbTsKY2xhc3MgbnNJQ29udGVudDsKY2xhc3MgbnNTdHJp
bmc7CnN0cnVjdCBuc0dVSUV2ZW50OwoKCgoKCmVudW0gbnNMaW5rU3RhdGUgewogIGVMaW5rU3Rh
dGVfVW5rbm93biA9IDAsCiAgZUxpbmtTdGF0ZV9VbnZpc2l0ZWQgPSAxLAogIGVMaW5rU3RhdGVf
VmlzaXRlZCA9IDIsCiAgZUxpbmtTdGF0ZV9Ob3RMaW5rID0gMwp9OwoKCgoKZW51bSBuc0xpbmtW
ZXJiIHsKICBlTGlua1ZlcmJfUmVwbGFjZSA9IDAsCiAgZUxpbmtWZXJiX05ldyA9IDEsCiAgZUxp
bmtWZXJiX0VtYmVkID0gMiwKICBlTGlua1ZlcmJfVW5kZWZpbmVkID0gMwp9OwoKCgoKY2xhc3Mg
bnNJTGlua0hhbmRsZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGljIGNv
bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhhNmNmOTA1
YiwgMHgxNWIzLCAweDExZDIsezB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4
ZGQsIDB4MzJ9fTsgcmV0dXJuIGlpZDt9CiMgNjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lMaW5rSGFuZGxlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgT25MaW5rQ2xpY2sobnNJQ29udGVu
dCogYUNvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0xpbmtWZXJiIGFWZXJiLAog
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUFJVbmljaGFyKiBhVVJMU3BlYywKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhciogYVRhcmdldFNwZWMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lJbnB1dFN0cmVhbSogYVBvc3REYXRhU3RyZWFtID0gMCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUlucHV0U3RyZWFtKiBhSGVhZGVyc0RhdGFTdHJlYW0g
PSAwKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgT25PdmVyTGluayhuc0lDb250ZW50
KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUFJVbmljaGFyKiBhVVJM
U3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUFJVbmljaGFyKiBhVGFyZ2V0U3Bl
YykgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExpbmtTdGF0ZShjb25zdCBjaGFyKiBh
TGlua1VSSSwgbnNMaW5rU3RhdGUmIGFTdGF0ZSkgPSAwOwp9OwojIDI5ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNTdHlsZVV0aWwuaCIgMgoKY2xhc3MgbnNJU3R5bGVDb250ZXh0OwpzdHJ1
Y3QgbnNTdHlsZUNvbG9yOwoKZW51bSBuc0ZvbnRTaXplVHlwZSB7CiAgZUZvbnRTaXplX0hUTUwg
PSAxLAogIGVGb250U2l6ZV9DU1MgPSAyCn07CgoKCmNsYXNzIG5zU3R5bGVVdGlsIHsKcHVibGlj
OgoKICBzdGF0aWMgZmxvYXQgR2V0U2NhbGluZ0ZhY3RvcihQUkludDMyIGFTY2FsZXIpOwoKICBz
dGF0aWMgbnNjb29yZCBDYWxjRm9udFBvaW50U2l6ZShQUkludDMyIGFIVE1MU2l6ZSwgUFJJbnQz
MiBhQmFzZVBvaW50U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9h
dCBhU2NhbGluZ0ZhY3RvciwgbnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZvbnRTaXplVHlwZSBhRm9udFNpemVUeXBlID0g
ZUZvbnRTaXplX0hUTUwpOwoKICBzdGF0aWMgUFJJbnQzMiBGaW5kTmV4dFNtYWxsZXJGb250U2l6
ZShuc2Nvb3JkIGFGb250U2l6ZSwgUFJJbnQzMiBhQmFzZVBvaW50U2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBhU2NhbGluZ0ZhY3RvciwgbnNJUHJl
c0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0ZvbnRTaXplVHlwZSBhRm9udFNpemVUeXBlID0gZUZvbnRTaXplX0hUTUwpOwoK
ICBzdGF0aWMgUFJJbnQzMiBGaW5kTmV4dExhcmdlckZvbnRTaXplKG5zY29vcmQgYUZvbnRTaXpl
LCBQUkludDMyIGFCYXNlUG9pbnRTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQgYVNjYWxpbmdGYWN0b3IsIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZvbnRTaXplVHlw
ZSBhRm9udFNpemVUeXBlID0gZUZvbnRTaXplX0hUTUwpOwoKICBzdGF0aWMgUFJJbnQzMiBDb25z
dHJhaW5Gb250V2VpZ2h0KFBSSW50MzIgYVdlaWdodCk7CgogIHN0YXRpYyBjb25zdCBuc1N0eWxl
Q29sb3IqIEZpbmROb25UcmFuc3BhcmVudEJhY2tncm91bmQobnNJU3R5bGVDb250ZXh0KiBhQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSQm9vbCBhU3RhcnRBdFBhcmVudCA9IDApOwoKICBzdGF0aWMgUFJCb29sIElzSFRN
TExpbmsobnNJQ29udGVudCAqYUNvbnRlbnQsIG5zSUF0b20gKmFUYWcsIG5zSVByZXNDb250ZXh0
ICphUHJlc0NvbnRleHQsIG5zTGlua1N0YXRlICphU3RhdGUpOwogIHN0YXRpYyBQUkJvb2wgSXNT
aW1wbGVYbGluayhuc0lDb250ZW50ICphQ29udGVudCwgbnNJUHJlc0NvbnRleHQgKmFQcmVzQ29u
dGV4dCwgbnNMaW5rU3RhdGUgKmFTdGF0ZSk7Cgp9OwojIDUxICJuc0Zvcm1Db250cm9sSGVscGVy
LmNwcCIgMgojIDEgIm5zRm9ybUZyYW1lLmgiIDEKIyAyNSAibnNGb3JtRnJhbWUuaCIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybU1hbmFnZXIuaCIgMQojIDI2ICJuc0Zvcm1G
cmFtZS5oIiAyCiMgMSAiLi4vLi4vYmFzZS9zcmMvbnNCbG9ja0ZyYW1lLmgiIDEKIyAyNSAiLi4v
Li4vYmFzZS9zcmMvbnNCbG9ja0ZyYW1lLmgiCiMgMSAiLi4vLi4vYmFzZS9zcmMvbnNIVE1MQ29u
dGFpbmVyRnJhbWUuaCIgMQojIDI1ICIuLi8uLi9iYXNlL3NyYy9uc0hUTUxDb250YWluZXJGcmFt
ZS5oIgojIDEgIi4uLy4uL2Jhc2Uvc3JjL25zQ29udGFpbmVyRnJhbWUuaCIgMQojIDI1ICIuLi8u
Li9iYXNlL3NyYy9uc0NvbnRhaW5lckZyYW1lLmgiCiMgMSAiLi4vLi4vYmFzZS9zcmMvbnNTcGxp
dHRhYmxlRnJhbWUuaCIgMQojIDI1ICIuLi8uLi9iYXNlL3NyYy9uc1NwbGl0dGFibGVGcmFtZS5o
IgojIDEgIi4uLy4uL2Jhc2Uvc3JjL25zRnJhbWUuaCIgMQojIDI2ICIuLi8uLi9iYXNlL3NyYy9u
c1NwbGl0dGFibGVGcmFtZS5oIiAyCgoKY2xhc3MgbnNTcGxpdHRhYmxlRnJhbWUgOiBwdWJsaWMg
bnNGcmFtZQp7CnB1YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJUHJlc0NvbnRleHQq
IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNvbnRlbnQsCiAg
ICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhUGFyZW50LAogICAgICAgICAgICAgICAgICBuc0lT
dHlsZUNvbnRleHQqIGFDb250ZXh0LAogICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVByZXZJ
bkZsb3cpOwoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU3BsaXR0YWJsZShuc1NwbGl0dGFibGVUeXBl
JiBhSXNTcGxpdHRhYmxlKSBjb25zdDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBTaXplT2YobnNJU2l6
ZU9mSGFuZGxlciogYUhhbmRsZXIsIFBSVWludDMyKiBhUmVzdWx0KSBjb25zdDsKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldFByZXZJbkZsb3cobnNJRnJhbWUqKiBhUHJldkluRmxvdykgY29uc3Q7
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQcmV2SW5GbG93KG5zSUZyYW1lKik7CiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXROZXh0SW5GbG93KG5zSUZyYW1lKiogYU5leHRJbkZsb3cpIGNvbnN0OwogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0TmV4dEluRmxvdyhuc0lGcmFtZSopOwoKCgoKICBuc0lGcmFtZSog
R2V0Rmlyc3RJbkZsb3coKSBjb25zdDsKCgoKCiAgbnNJRnJhbWUqIEdldExhc3RJbkZsb3coKSBj
b25zdDsKCgoKICBzdGF0aWMgdm9pZCBSZW1vdmVGcm9tRmxvdyhuc0lGcmFtZSogYUZyYW1lKTsK
CgogIHN0YXRpYyB2b2lkIEJyZWFrRnJvbVByZXZGbG93KG5zSUZyYW1lKiBhRnJhbWUpOwoKICBu
c0lGcmFtZSogR2V0UHJldkluRmxvdygpOwogIG5zSUZyYW1lKiBHZXROZXh0SW5GbG93KCk7Cgpw
cm90ZWN0ZWQ6CgogIHZpcnR1YWwgdm9pZCBEdW1wQmFzZVJlZ3Jlc3Npb25EYXRhKG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsIEZJTEUqIG91dCwgUFJJbnQzMiBhSW5kZW50LCBQUkJvb2wg
YUluY2x1ZGVTdHlsZURhdGEpOwoKCiAgbnNJRnJhbWUqIG1QcmV2SW5GbG93OwogIG5zSUZyYW1l
KiBtTmV4dEluRmxvdzsKfTsKIyAyNiAiLi4vLi4vYmFzZS9zcmMvbnNDb250YWluZXJGcmFtZS5o
IiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRnJhbWVMaXN0LmgiIDEKIyAyNSAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRnJhbWVMaXN0LmgiCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUZyYW1lLmgiIDEKIyAyNiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zRnJhbWVMaXN0LmgiIDIKCgoKCgpjbGFzcyBuc0ZyYW1lTGlzdCB7CnB1YmxpYzoKICBuc0Zy
YW1lTGlzdCgpIHsKICAgIG1GaXJzdENoaWxkID0gMDsKICB9CgogIG5zRnJhbWVMaXN0KG5zSUZy
YW1lKiBhSGVhZCkgewogICAgbUZpcnN0Q2hpbGQgPSBhSGVhZDsKICB9CgogIH5uc0ZyYW1lTGlz
dCgpIHsKICB9CgogIHZvaWQgRGVzdHJveUZyYW1lcyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250
ZXh0KTsKCiAgdm9pZCBTZXRGcmFtZXMobnNJRnJhbWUqIGFGcmFtZUxpc3QpIHsKICAgIG1GaXJz
dENoaWxkID0gYUZyYW1lTGlzdDsKICB9CgogIHZvaWQgQXBwZW5kRnJhbWVzKG5zSUZyYW1lKiBh
UGFyZW50LCBuc0lGcmFtZSogYUZyYW1lTGlzdCk7CgogIHZvaWQgQXBwZW5kRnJhbWVzKG5zSUZy
YW1lKiBhUGFyZW50LCBuc0ZyYW1lTGlzdCYgYUZyYW1lTGlzdCkgewogICAgQXBwZW5kRnJhbWVz
KGFQYXJlbnQsIGFGcmFtZUxpc3QubUZpcnN0Q2hpbGQpOwogICAgYUZyYW1lTGlzdC5tRmlyc3RD
aGlsZCA9IDA7CiAgfQoKICB2b2lkIEFwcGVuZEZyYW1lKG5zSUZyYW1lKiBhUGFyZW50LCBuc0lG
cmFtZSogYUZyYW1lKTsKCgoKCiAgUFJCb29sIFJlbW92ZUZyYW1lKG5zSUZyYW1lKiBhRnJhbWUp
OwoKCgoKICBQUkJvb2wgUmVtb3ZlRmlyc3RDaGlsZCgpOwoKCgoKICBQUkJvb2wgRGVzdHJveUZy
YW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zSUZyYW1lKiBhRnJhbWUpOwoKICB2
b2lkIEluc2VydEZyYW1lKG5zSUZyYW1lKiBhUGFyZW50LAogICAgICAgICAgICAgICAgICAgbnNJ
RnJhbWUqIGFQcmV2U2libGluZywKICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhTmV3RnJh
bWUpOwoKICB2b2lkIEluc2VydEZyYW1lcyhuc0lGcmFtZSogYVBhcmVudCwKICAgICAgICAgICAg
ICAgICAgICBuc0lGcmFtZSogYVByZXZTaWJsaW5nLAogICAgICAgICAgICAgICAgICAgIG5zSUZy
YW1lKiBhRnJhbWVMaXN0KTsKCiAgdm9pZCBJbnNlcnRGcmFtZXMobnNJRnJhbWUqIGFQYXJlbnQs
IG5zSUZyYW1lKiBhUHJldlNpYmxpbmcsCiAgICAgICAgICAgICAgICAgICAgbnNGcmFtZUxpc3Qm
IGFGcmFtZUxpc3QpIHsKICAgIEluc2VydEZyYW1lcyhhUGFyZW50LCBhUHJldlNpYmxpbmcsIGFG
cmFtZUxpc3QuRmlyc3RDaGlsZCgpKTsKICAgIGFGcmFtZUxpc3QubUZpcnN0Q2hpbGQgPSAwOwog
IH0KCiAgUFJCb29sIFJlcGxhY2VGcmFtZShuc0lGcmFtZSogYVBhcmVudCwKICAgICAgICAgICAg
ICAgICAgICAgIG5zSUZyYW1lKiBhT2xkRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICBuc0lG
cmFtZSogYU5ld0ZyYW1lKTsKCiAgUFJCb29sIFJlcGxhY2VBbmREZXN0cm95RnJhbWUobnNJUHJl
c0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lGcmFtZSogYVBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFt
ZSogYU9sZEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBh
TmV3RnJhbWUpOwoKICBQUkJvb2wgU3BsaXQobnNJRnJhbWUqIGFBZnRlckZyYW1lLCBuc0lGcmFt
ZSoqIGFOZXh0RnJhbWVSZXN1bHQpOwoKICBuc0lGcmFtZSogUHVsbEZyYW1lKG5zSUZyYW1lKiBh
UGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFMYXN0Q2hpbGQsCiAgICAg
ICAgICAgICAgICAgICAgICBuc0ZyYW1lTGlzdCYgYUZyb21MaXN0KTsKCiAgbnNJRnJhbWUqIEZp
cnN0Q2hpbGQoKSBjb25zdCB7CiAgICByZXR1cm4gbUZpcnN0Q2hpbGQ7CiAgfQoKICBuc0lGcmFt
ZSogTGFzdENoaWxkKCkgY29uc3Q7CgogIG5zSUZyYW1lKiBGcmFtZUF0KFBSSW50MzIgYUluZGV4
KSBjb25zdDsKCiAgUFJCb29sIElzRW1wdHkoKSBjb25zdCB7CiAgICByZXR1cm4gMCA9PSBtRmly
c3RDaGlsZDsKICB9CgogIFBSQm9vbCBOb3RFbXB0eSgpIGNvbnN0IHsKICAgIHJldHVybiAwICE9
IG1GaXJzdENoaWxkOwogIH0KCiAgUFJCb29sIENvbnRhaW5zRnJhbWUoY29uc3QgbnNJRnJhbWUq
IGFGcmFtZSkgY29uc3Q7CgogIFBSSW50MzIgR2V0TGVuZ3RoKCkgY29uc3Q7CgogIG5zSUZyYW1l
KiBHZXRQcmV2U2libGluZ0Zvcihuc0lGcmFtZSogYUZyYW1lKSBjb25zdDsKIyAxMzcgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZyYW1lTGlzdC5oIgogIHZvaWQgVmVyaWZ5UGFyZW50KG5z
SUZyYW1lKiBhUGFyZW50KSBjb25zdDsKCgogIHZvaWQgTGlzdChuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0LCBGSUxFKiBvdXQpIGNvbnN0OwoKCnByb3RlY3RlZDoKICBuc0lGcmFtZSogbUZp
cnN0Q2hpbGQ7Cn07CiMgMjcgIi4uLy4uL2Jhc2Uvc3JjL25zQ29udGFpbmVyRnJhbWUuaCIgMgoj
IDM5ICIuLi8uLi9iYXNlL3NyYy9uc0NvbnRhaW5lckZyYW1lLmgiCmNsYXNzIG5zQ29udGFpbmVy
RnJhbWUgOiBwdWJsaWMgbnNTcGxpdHRhYmxlRnJhbWUKewpwdWJsaWM6CgogIHZpcnR1YWwgbnNy
ZXN1bHQgSW5pdChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg
ICBuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQYXJl
bnQsCiAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYUNvbnRleHQsCiAgICAgICAg
ICAgICAgICAgIG5zSUZyYW1lKiBhUHJldkluRmxvdyk7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJ
bml0aWFsQ2hpbGRMaXN0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFDaGlsZExpc3QpOwogIHZpcnR1YWwgbnNyZXN1
bHQgRmlyc3RDaGlsZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUZyYW1lKiogYUZpcnN0Q2hpbGQpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgRGVzdHJveShu
c0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IFBhaW50KG5z
SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJp
bmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IG5z
UmVjdCYgYURpcnR5UmVjdCwKICAgICAgICAgICAgICAgICAgIG5zRnJhbWVQYWludExheWVyIGFX
aGljaExheWVyKTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lRm9yUG9pbnQobnNJUHJlc0Nv
bnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNQb2ludCYgYVBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZyYW1lUGFp
bnRMYXllciBhV2hpY2hMYXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJh
bWUqKiBhRnJhbWUpOwogIHZpcnR1YWwgbnNyZXN1bHQgUmVwbGFjZUZyYW1lKG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxs
JiBhUHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU9sZEZyYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhTmV3RnJhbWUpOwogIHZpcnR1YWwgbnNyZXN1
bHQgUmVmbG93RGlydHlDaGlsZChuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsIG5zSUZyYW1lKiBh
Q2hpbGQpOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBMaXN0KG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsIEZJTEUqIG91dCwgUFJJbnQzMiBhSW5kZW50KSBjb25zdDsKICB2aXJ0dWFsIG5zcmVz
dWx0IFNpemVPZihuc0lTaXplT2ZIYW5kbGVyKiBhSGFuZGxlciwgUFJVaW50MzIqIGFSZXN1bHQp
IGNvbnN0OwoKCgogIHZpcnR1YWwgdm9pZCBEZWxldGVDaGlsZHNOZXh0SW5GbG93KG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJRnJhbWUqIGFDaGlsZCk7CgogIHN0YXRpYyBQUkludDMyIExlbmd0aE9mKG5zSUZyYW1l
KiBhRnJhbWVMaXN0KSB7CiAgICBuc0ZyYW1lTGlzdCB0bXAoYUZyYW1lTGlzdCk7CiAgICByZXR1
cm4gdG1wLkdldExlbmd0aCgpOwogIH0KCgogIHN0YXRpYyB2b2lkIFBvc2l0aW9uRnJhbWVWaWV3
KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJRnJhbWUqIGFLaWRGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lWaWV3KiBhVmlldyk7CiMgMTAyICIuLi8uLi9iYXNlL3NyYy9uc0NvbnRhaW5lckZyYW1l
LmgiCiAgc3RhdGljIHZvaWQgU3luY0ZyYW1lVmlld0FmdGVyUmVmbG93KG5zSVByZXNDb250ZXh0
KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SVZpZXcqIGFWaWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBuc1JlY3QqIGFDb21iaW5lZEFyZWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSVWludDMyIGFGbGFncyA9IDApOwojIDExOSAiLi4vLi4vYmFzZS9zcmMvbnNDb250
YWluZXJGcmFtZS5oIgogIG5zcmVzdWx0IFJlZmxvd0NoaWxkKG5zSUZyYW1lKiBhS2lkRnJhbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICBuc0hUTUxSZWZsb3dNZXRyaWNzJiBhRGVzaXJlZFNpemUsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dTdGF0
ZSwKICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFYLAogICAgICAgICAgICAgICAgICAg
ICAgIG5zY29vcmQgYVksCiAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUZsYWdzLAog
ICAgICAgICAgICAgICAgICAgICAgIG5zUmVmbG93U3RhdHVzJiBhU3RhdHVzKTsKIyAxNDkgIi4u
Ly4uL2Jhc2Uvc3JjL25zQ29udGFpbmVyRnJhbWUuaCIKICBzdGF0aWMgbnNyZXN1bHQgRmluaXNo
UmVmbG93Q2hpbGQobnNJRnJhbWUqIGFLaWRGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNIVE1MUmVmbG93TWV0cmljcyYgYURlc2lyZWRTaXplLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFYLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFZLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhRmxhZ3MpOwoKCiAgc3RhdGljIHZvaWQgUG9zaXRp
b25DaGlsZFZpZXdzKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUpOwoKcHJvdGVjdGVkOgogIG5zQ29u
dGFpbmVyRnJhbWUoKTsKICB+bnNDb250YWluZXJGcmFtZSgpOwoKICBuc3Jlc3VsdCBHZXRGcmFt
ZUZvclBvaW50VXNpbmcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNQb2ludCYgYVBvaW50LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNGcmFtZVBhaW50TGF5ZXIgYVdoaWNoTGF5ZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhQ29uc2lkZXJTZWxmLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFGcmFtZSk7CgogIHZpcnR1YWwgdm9pZCBQYWlu
dENoaWxkcmVuKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBhRGlydHlSZWN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zRnJhbWVQYWludExheWVyIGFXaGljaExheWVyKTsKCiAg
dmlydHVhbCB2b2lkIFBhaW50Q2hpbGQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFEaXJ0eVJlY3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllcik7CgoKCgogIG5zSUZy
YW1lKiBHZXRPdmVyZmxvd0ZyYW1lcyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlbW92ZVByb3BlcnR5KSBjb25zdDsK
CgoKCiAgbnNyZXN1bHQgU2V0T3ZlcmZsb3dGcmFtZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU92ZXJmbG93RnJh
bWVzKTsKIyAyMDMgIi4uLy4uL2Jhc2Uvc3JjL25zQ29udGFpbmVyRnJhbWUuaCIKICBQUkJvb2wg
TW92ZU92ZXJmbG93VG9DaGlsZExpc3QobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7CiMg
MjE5ICIuLi8uLi9iYXNlL3NyYy9uc0NvbnRhaW5lckZyYW1lLmgiCiAgdm9pZCBQdXNoQ2hpbGRy
ZW4obnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICBuc0lG
cmFtZSogYUZyb21DaGlsZCwKICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVByZXZTaWJs
aW5nKTsKCiAgbnNGcmFtZUxpc3QgbUZyYW1lczsKfTsKIyAyNiAiLi4vLi4vYmFzZS9zcmMvbnNI
VE1MQ29udGFpbmVyRnJhbWUuaCIgMgpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNBYnNvbHV0ZUZy
YW1lOwpjbGFzcyBuc1BsYWNlaG9sZGVyRnJhbWU7CnN0cnVjdCBuc1N0eWxlRGlzcGxheTsKc3Ry
dWN0IG5zU3R5bGVQb3NpdGlvbjsKIyA0NiAiLi4vLi4vYmFzZS9zcmMvbnNIVE1MQ29udGFpbmVy
RnJhbWUuaCIKY2xhc3MgbnNIVE1MQ29udGFpbmVyRnJhbWUgOiBwdWJsaWMgbnNDb250YWluZXJG
cmFtZSB7CnB1YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IFBhaW50KG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYVJl
bmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNSZWN0JiBhRGlydHlS
ZWN0LAogICAgICAgICAgICAgICAgICAgIG5zRnJhbWVQYWludExheWVyIGFXaGljaExheWVyKTsK
IyA2MCAiLi4vLi4vYmFzZS9zcmMvbnNIVE1MQ29udGFpbmVyRnJhbWUuaCIKICBzdGF0aWMgbnNy
ZXN1bHQgQ3JlYXRlTmV4dEluRmxvdyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhT3V0ZXJGcmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiYgYU5leHRJbkZsb3dSZXN1bHQp
OwojIDc1ICIuLi8uLi9iYXNlL3NyYy9uc0hUTUxDb250YWluZXJGcmFtZS5oIgogIHN0YXRpYyBu
c3Jlc3VsdCBDcmVhdGVWaWV3Rm9yRnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRleHQqIGFTdHls
ZUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSog
YUNvbnRlbnRQYXJlbnRGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBSQm9vbCBhRm9yY2UpOwoKICBzdGF0aWMgbnNyZXN1bHQgUmVwYXJlbnRGcmFtZVZpZXcobnNJ
UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJRnJhbWUqIGFDaGlsZEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lGcmFtZSogYU9sZFBhcmVudEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lGcmFtZSogYU5ld1BhcmVudEZyYW1lKTsKCiAgc3RhdGljIG5zcmVz
dWx0IFJlcGFyZW50RnJhbWVWaWV3TGlzdChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFDaGlsZEZy
YW1lTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l
KiBhT2xkUGFyZW50RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lGcmFtZSogYU5ld1BhcmVudEZyYW1lKTsKCnByb3RlY3RlZDoKICB2aXJ0dWFsIFBSSW50
biBHZXRTa2lwU2lkZXMoKSBjb25zdCA9IDA7Cn07CiMgMjYgIi4uLy4uL2Jhc2Uvc3JjL25zQmxv
Y2tGcmFtZS5oIiAyCiMgMSAiLi4vLi4vYmFzZS9zcmMvbnNIVE1MUGFydHMuaCIgMQojIDI3ICIu
Li8uLi9iYXNlL3NyYy9uc0Jsb2NrRnJhbWUuaCIgMgojIDEgIi4uLy4uL2Jhc2Uvc3JjL25zQWJz
b2x1dGVDb250YWluaW5nQmxvY2suaCIgMQojIDI1ICIuLi8uLi9iYXNlL3NyYy9uc0Fic29sdXRl
Q29udGFpbmluZ0Jsb2NrLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5b3V0
LmgiIDEKIyAyNiAiLi4vLi4vYmFzZS9zcmMvbnNBYnNvbHV0ZUNvbnRhaW5pbmdCbG9jay5oIiAy
CiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRnJhbWVMaXN0LmgiIDEKIyAyNyAiLi4v
Li4vYmFzZS9zcmMvbnNBYnNvbHV0ZUNvbnRhaW5pbmdCbG9jay5oIiAyCgpjbGFzcyBuc0lBdG9t
OwpjbGFzcyBuc0lGcmFtZTsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7CiMgNDMgIi4uLy4uL2Jhc2Uv
c3JjL25zQWJzb2x1dGVDb250YWluaW5nQmxvY2suaCIKY2xhc3MgbnNBYnNvbHV0ZUNvbnRhaW5p
bmdCbG9jawp7CnB1YmxpYzoKICBuc3Jlc3VsdCBGaXJzdENoaWxkKGNvbnN0IG5zSUZyYW1lKiBh
RGVsZWdhdGluZ0ZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1l
LAogICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqKiBhRmlyc3RDaGlsZCkgY29uc3Q7Cgog
IG5zcmVzdWx0IFNldEluaXRpYWxDaGlsZExpc3QobnNJRnJhbWUqIGFEZWxlZ2F0aW5nRnJhbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzQ29udGV4dCogYVByZXNDb250
ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFDaGlsZExpc3QpOwogIG5z
cmVzdWx0IEFwcGVuZEZyYW1lcyhuc0lGcmFtZSogYURlbGVnYXRpbmdGcmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAg
ICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l
KiBhRnJhbWVMaXN0KTsKICBuc3Jlc3VsdCBJbnNlcnRGcmFtZXMobnNJRnJhbWUqIGFEZWxlZ2F0
aW5nRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNTaGVsbCYgYVByZXNTaGVsbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICBuc0lGcmFtZSogYVByZXZGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
bnNJRnJhbWUqIGFGcmFtZUxpc3QpOwogIG5zcmVzdWx0IFJlbW92ZUZyYW1lKG5zSUZyYW1lKiBh
RGVsZWdhdGluZ0ZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1No
ZWxsLAogICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICBuc0lGcmFtZSogYU9sZEZyYW1lKTsKIyA3OCAiLi4vLi4vYmFzZS9zcmMv
bnNBYnNvbHV0ZUNvbnRhaW5pbmdCbG9jay5oIgogIG5zcmVzdWx0IFJlZmxvdyhuc0lGcmFtZSog
YURlbGVnYXRpbmdGcmFtZSwKICAgICAgICAgICAgICAgICAgbnNJUHJlc0NvbnRleHQqIGFQcmVz
Q29udGV4dCwKICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFSZWZs
b3dTdGF0ZSwKICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmluZ0Jsb2NrV2lkdGgs
CiAgICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja0hlaWdodCwKICAgICAg
ICAgICAgICAgICAgbnNSZWN0JiBhQ2hpbGRCb3VuZHMpOwojIDkyICIuLi8uLi9iYXNlL3NyYy9u
c0Fic29sdXRlQ29udGFpbmluZ0Jsb2NrLmgiCiAgbnNyZXN1bHQgSW5jcmVtZW50YWxSZWZsb3co
bnNJRnJhbWUqIGFEZWxlZ2F0aW5nRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVJlZmxvd1N0YXRlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja1dpZHRoLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zY29vcmQgYUNvbnRhaW5pbmdCbG9ja0hlaWdodCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUkJvb2wmIGFXYXNIYW5kbGVkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zUmVjdCYgYUNoaWxkQm91bmRzKTsKCiAgdm9pZCBEZXN0cm95RnJhbWVz
KG5zSUZyYW1lKiBhRGVsZWdhdGluZ0ZyYW1lLAogICAgICAgICAgICAgICAgICAgICBuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0KTsKCiAgUFJCb29sIEhhc0Fic29sdXRlRnJhbWVzKCkge3Jl
dHVybiBtQWJzb2x1dGVGcmFtZXMuTm90RW1wdHkoKTt9Cgpwcm90ZWN0ZWQ6CiAgbnNyZXN1bHQg
UmVmbG93QWJzb2x1dGVGcmFtZShuc0lGcmFtZSogYURlbGVnYXRpbmdGcmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVJlZmxv
d1N0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhQ29udGFpbmlu
Z0Jsb2NrV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDb250
YWluaW5nQmxvY2tIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFt
ZSogYUtpZEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNSZWZsb3dSZWFz
b24gYVJlYXNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zUmVmbG93U3RhdHVz
JiBhU3RhdHVzKTsKCiAgdm9pZCBDYWxjdWxhdGVDaGlsZEJvdW5kcyhuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0LCBuc1JlY3QmIGFDaGlsZEJvdW5kcyk7Cgpwcm90ZWN0ZWQ6CiAgbnNGcmFt
ZUxpc3QgbUFic29sdXRlRnJhbWVzOwp9OwojIDI4ICIuLi8uLi9iYXNlL3NyYy9uc0Jsb2NrRnJh
bWUuaCIgMgoKY2xhc3MgbnNCbG9ja1JlZmxvd1N0YXRlOwpjbGFzcyBuc0J1bGxldEZyYW1lOwpj
bGFzcyBuc0xpbmVCb3g7CmNsYXNzIG5zRmlyc3RMaW5lRnJhbWU7CiMgNDggIi4uLy4uL2Jhc2Uv
c3JjL25zQmxvY2tGcmFtZS5oIgpleHRlcm4gY29uc3QgbnNJSUQga0Jsb2NrRnJhbWVDSUQ7CiMg
NTcgIi4uLy4uL2Jhc2Uvc3JjL25zQmxvY2tGcmFtZS5oIgpjbGFzcyBuc0Jsb2NrRnJhbWUgOiBw
dWJsaWMgbnNIVE1MQ29udGFpbmVyRnJhbWUKewpwdWJsaWM6CiAgZnJpZW5kIG5zcmVzdWx0IE5T
X05ld0Jsb2NrRnJhbWUobnNJUHJlc1NoZWxsKiBhUHJlc1NoZWxsLCBuc0lGcmFtZSoqIGFOZXdG
cmFtZSwgUFJVaW50MzIgYUZsYWdzKTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUXVlcnlJbnRlcmZh
Y2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQdHIpOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBJbml0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgIG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVBh
cmVudCwKICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhQ29udGV4dCwKICAgICAg
ICAgICAgICAgICAgbnNJRnJhbWUqIGFQcmV2SW5GbG93KTsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dEluaXRpYWxDaGlsZExpc3QobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUNoaWxkTGlzdCk7CiAgdmlydHVhbCBuc3Jl
c3VsdCBBcHBlbmRGcmFtZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSUZyYW1lKiBhRnJhbWVMaXN0KTsKICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydEZyYW1l
cyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQ
cmV2RnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWVMaXN0
KTsKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUZyYW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxs
LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU9sZEZyYW1lKTsKICB2aXJ0dWFsIG5zcmVzdWx0
IEZpcnN0Q2hpbGQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBuc0lG
cmFtZSoqIGFGaXJzdENoaWxkKSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFkZGl0aW9u
YWxDaGlsZExpc3ROYW1lKFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJQXRvbSoqIGFMaXN0TmFtZSkgY29uc3Q7CiAgdmlydHVhbCBuc3Jl
c3VsdCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwogIHZpcnR1YWwgbnNy
ZXN1bHQgSXNTcGxpdHRhYmxlKG5zU3BsaXR0YWJsZVR5cGUmIGFJc1NwbGl0dGFibGUpIGNvbnN0
OwogIHZpcnR1YWwgbnNyZXN1bHQgSXNQZXJjZW50YWdlQmFzZShQUkJvb2wmIGFCYXNlKSBjb25z
dDsKICB2aXJ0dWFsIG5zcmVzdWx0IFBhaW50KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQs
CiAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAgICAg
ICAgICAgICAgIG5zRnJhbWVQYWludExheWVyIGFXaGljaExheWVyKTsKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldEZyYW1lVHlwZShuc0lBdG9tKiogYVR5cGUpIGNvbnN0OwoKICB2aXJ0dWFsIG5zcmVz
dWx0IExpc3QobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgRklMRSogb3V0LCBQUkludDMy
IGFJbmRlbnQpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVOYW1lKG5zU3RyaW5n
JiBhUmVzdWx0KSBjb25zdDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNpemVPZihuc0lTaXplT2ZIYW5k
bGVyKiBhSGFuZGxlciwgUFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0OwogIHZpcnR1YWwgbnNyZXN1
bHQgVmVyaWZ5VHJlZSgpIGNvbnN0OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZyYW1lRm9yUG9p
bnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgY29uc3QgbnNQb2ludCYgYVBvaW50LCBu
c0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllciwgbnNJRnJhbWUqKiBhRnJhbWUpOwogIHZpcnR1
YWwgbnNyZXN1bHQgSGFuZGxlRXZlbnQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zR1VJRXZlbnQqIGFFdmVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zRXZlbnRTdGF0dXMqIGFFdmVudFN0YXR1cyk7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBSZWZsb3dEaXJ0eUNoaWxkKG5zSVByZXNTaGVsbCogYVByZXNTaGVsbCwgbnNJRnJhbWUqIGFD
aGlsZCk7CgogIHZpcnR1YWwgbnNyZXN1bHQgSXNWaXNpYmxlRm9yUGFpbnRpbmcobnNJUHJlc0Nv
bnRleHQgKiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSQm9vbCBhQ2hlY2tWaXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUkJvb2wqIGFJc1Zpc2libGUpOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZs
b3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICBuc0hU
TUxSZWZsb3dNZXRyaWNzJiBhRGVzaXJlZFNpemUsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dTdGF0ZSwKICAgICAgICAgICAgICAgICAgICBuc1Jl
Zmxvd1N0YXR1cyYgYVN0YXR1cyk7CgogIHZpcnR1YWwgbnNyZXN1bHQgQXR0cmlidXRlQ2hhbmdl
ZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
SW50MzIgYU5hbWVTcGFjZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9t
KiBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFIaW50
KTsKIyAxNDQgIi4uLy4uL2Jhc2Uvc3JjL25zQmxvY2tGcmFtZS5oIgogIHZpcnR1YWwgdm9pZCBE
ZWxldGVDaGlsZHNOZXh0SW5GbG93KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFOZXh0SW5GbG93KTsK
CgoKCgogIG5zSUZyYW1lKiBHZXRUb3BCbG9ja0NoaWxkKCk7CgoKCgogIG5zcmVzdWx0IFVwZGF0
ZVNwYWNlTWFuYWdlcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lTcGFjZU1hbmFnZXIqIGFTcGFjZU1hbmFnZXIpOwoKICBuc0xp
bmVCb3gqIEZpbmRMaW5lRm9yKG5zSUZyYW1lKiBhRnJhbWUsIG5zTGluZUJveCoqIGFQcmV2TGlu
ZVJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYUlzRmxvYXRlclJlc3Vs
dCk7CgogIHN0YXRpYyBuc3Jlc3VsdCBHZXRDdXJyZW50TGluZShuc0Jsb2NrUmVmbG93U3RhdGUg
KmFTdGF0ZSwgbnNMaW5lQm94ICoqYU91dEN1cnJlbnRMaW5lKTsKCgoKICBuc2Nvb3JkIEdldEFz
Y2VudCgpIGNvbnN0OwoKcHJvdGVjdGVkOgogIG5zQmxvY2tGcmFtZSgpOwogIHZpcnR1YWwgfm5z
QmxvY2tGcmFtZSgpOwoKICBuc0lTdHlsZUNvbnRleHQqIEdldEZpcnN0TGV0dGVyU3R5bGUobnNJ
UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7CgogIHZvaWQgU2V0RmxhZ3MoUFJVaW50MzIgYUZs
YWdzKSB7CiAgICBtU3RhdGUgJj0gfjB4RkZGMDAwMDA7CiAgICBtU3RhdGUgfD0gYUZsYWdzOwog
IH0KCiAgUFJCb29sIEhhdmVPdXRzaWRlQnVsbGV0KCkgY29uc3QgewoKICAgIGlmKG1TdGF0ZSAm
IDB4NDAwMDAwMDApIHsKICAgICAgaWYgKCEobUJ1bGxldCkpIG5zRGVidWc6OkFzc2VydGlvbigi
TlNfQkxPQ0tfRlJBTUVfSEFTX09VVFNJREVfQlVMTEVUIGZsYWcgc2V0IGFuZCBubyBtQnVsbGV0
IiwgIm1CdWxsZXQiLCAiLi4vLi4vYmFzZS9zcmMvbnNCbG9ja0ZyYW1lLmgiLCAxODIpOwogICAg
fQoKICAgIHJldHVybiAwICE9IChtU3RhdGUgJiAweDQwMDAwMDAwKTsKICB9CgoKCgogIFBSQm9v
bCBJc0luY3JlbWVudGFsRGFtYWdlQ29uc3RyYWluZWQoY29uc3QgbnNCbG9ja1JlZmxvd1N0YXRl
JiBhU3RhdGUpIGNvbnN0OwoKCgoKICB2b2lkIFNsaWRlTGluZShuc0Jsb2NrUmVmbG93U3RhdGUm
IGFTdGF0ZSwKICAgICAgICAgICAgICAgICBuc0xpbmVCb3gqIGFMaW5lLCBuc2Nvb3JkIGFEWSk7
CgoKCgoKICBQUkJvb2wgRHJhaW5PdmVyZmxvd0xpbmVzKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQpOwoKICB2aXJ0dWFsIFBSSW50biBHZXRTa2lwU2lkZXMoKSBjb25zdDsKCiAgdmlydHVh
bCB2b2lkIENvbXB1dGVGaW5hbFNpemUoY29uc3QgbnNIVE1MUmVmbG93U3RhdGUmIGFSZWZsb3dT
dGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0Jsb2NrUmVmbG93U3RhdGUm
IGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0hUTUxSZWZsb3dNZXRy
aWNzJiBhTWV0cmljcyk7CgoKCgoKCgogIG5zcmVzdWx0IEFkZEZyYW1lcyhuc0lQcmVzQ29udGV4
dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYUZyYW1lTGlz
dCwKICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFQcmV2U2libGluZyk7CgoKCgoKICB2
b2lkIEZpeFBhcmVudEFuZFZpZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJh
bWUqIGFGcmFtZSk7CgoKCgoKCiAgbnNyZXN1bHQgRG9SZW1vdmVGcmFtZShuc0lQcmVzQ29udGV4
dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFEZWxl
dGVkRnJhbWUpOwoKCgogIG5zcmVzdWx0IFByZXBhcmVJbml0aWFsUmVmbG93KG5zQmxvY2tSZWZs
b3dTdGF0ZSYgYVN0YXRlKTsKCgogIG5zcmVzdWx0IFByZXBhcmVTdHlsZUNoYW5nZWRSZWZsb3co
bnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUpOwoKCgoKICBuc3Jlc3VsdCBQcmVwYXJlQ2hpbGRJ
bmNyZW1lbnRhbFJlZmxvdyhuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSk7CgoKCgogIG5zcmVz
dWx0IFByZXBhcmVSZXNpemVSZWZsb3cobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUpOwoKCiAg
bnNyZXN1bHQgUmVmbG93RGlydHlMaW5lcyhuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSk7CgoK
ICB2b2lkIFJlY292ZXJTdGF0ZUZyb20obnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgIG5zTGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAg
ICAgIG5zY29vcmQgYURlbHRhWSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNSZWN0KiBhRGFt
YWdlUmVjdCk7CiMgMjcyICIuLi8uLi9iYXNlL3NyYy9uc0Jsb2NrRnJhbWUuaCIKICBuc3Jlc3Vs
dCBSZWZsb3dMaW5lKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlLAogICAgICAgICAgICAgICAg
ICAgICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYUtl
ZXBSZWZsb3dHb2luZywKICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRGFtYWdlRGlydHlB
cmVhID0gMCk7CgogIG5zcmVzdWx0IFBsYWNlTGluZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0
ZSwKICAgICAgICAgICAgICAgICAgICAgbnNMaW5lTGF5b3V0JiBhTGluZUxheW91dCwKICAgICAg
ICAgICAgICAgICAgICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAgICAgICAgICAgICAgUFJC
b29sKiBhS2VlcFJlZmxvd0dvaW5nLAogICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVVwZGF0
ZU1heGltdW1XaWR0aCk7CgogIG5zcmVzdWx0IE1hcmtMaW5lRGlydHkgKG5zTGluZUJveCogYUxp
bmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBhUHJldkxpbmUpOwoKCiAg
dm9pZCBQb3N0UGxhY2VMaW5lKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlLAogICAgICAgICAg
ICAgICAgICAgICBuc0xpbmVCb3gqIGFMaW5lLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBu
c1NpemUmIGFNYXhFbGVtZW50U2l6ZSk7CgogIHZvaWQgQ29tcHV0ZUxpbmVNYXhFbGVtZW50U2l6
ZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNTaXplKiBhTWF4RWxlbWVudFNpemUpOwoKCiAgUFJCb29sIFNob3VsZEp1c3RpZnlMaW5lKG5z
QmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlLCBuc0xpbmVCb3gqIGFMaW5lKTsKCiAgdm9pZCBEZWxl
dGVMaW5lKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlLCBuc0xpbmVCb3gqIGFMaW5lKTsKCgoK
CiAgUFJCb29sIFNob3VsZEFwcGx5VG9wTWFyZ2luKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0xpbmVCb3gqIGFMaW5lKTsKCiAgbnNy
ZXN1bHQgUmVmbG93QmxvY2tGcmFtZShuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zTGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUkJvb2wqIGFLZWVwR29pbmcpOwoKICBuc3Jlc3VsdCBSZWZsb3dJbmxpbmVG
cmFtZXMobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zTGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
Qm9vbCogYUtlZXBMaW5lR29pbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9v
bCBhRGFtYWdlRGlydHlBcmVhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wg
YVVwZGF0ZU1heGltdW1XaWR0aCA9IDApOwoKICBuc3Jlc3VsdCBEb1JlZmxvd0lubGluZUZyYW1l
cyhuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0xpbmVMYXlvdXQmIGFMaW5lTGF5b3V0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zTGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJCb29sKiBhS2VlcFJlZmxvd0dvaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBSVWludDgqIGFMaW5lUmVmbG93U3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSQm9vbCBhVXBkYXRlTWF4aW11bVdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSQm9vbCBhRGFtYWdlRGlydHlBcmVhKTsKCiAgbnNyZXN1bHQgRG9SZWZsb3dJbmxp
bmVGcmFtZXNBdXRvKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0xpbmVCb3gqIGFMaW5lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUkJvb2wqIGFLZWVwUmVmbG93R29pbmcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSVWludDgqIGFMaW5lUmVmbG93U3RhdHVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVVwZGF0ZU1heGltdW1XaWR0aCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFEYW1hZ2VEaXJ0eUFy
ZWEpOwoKICBuc3Jlc3VsdCBEb1JlZmxvd0lubGluZUZyYW1lc01hbGxvYyhuc0Jsb2NrUmVmbG93
U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0xp
bmVCb3gqIGFMaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9v
bCogYUtlZXBSZWZsb3dHb2luZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUlVpbnQ4KiBhTGluZVJlZmxvd1N0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUkJvb2wgYVVwZGF0ZU1heGltdW1XaWR0aCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYURhbWFnZURpcnR5QXJlYSk7CgogIG5zcmVzdWx0
IFJlZmxvd0lubGluZUZyYW1lKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zTGluZUxheW91dCYgYUxpbmVMYXlvdXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNMaW5lQm94KiBhTGluZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
VWludDgqIGFMaW5lUmVmbG93U3RhdHVzKTsKCiAgbnNyZXN1bHQgUmVmbG93RmxvYXRlcihuc0Js
b2NrUmVmbG93U3RhdGUmIGFTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zUGxhY2Vo
b2xkZXJGcmFtZSogYVBsYWNlaG9sZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNSZWN0
JiBhQ29tYmluZWRSZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNNYXJnaW4mIGFNYXJn
aW5SZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc01hcmdpbiYgYUNvbXB1dGVkT2Zm
c2V0c1Jlc3VsdCk7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlQ29udGludWF0aW9uRm9y
KG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zTGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUkJvb2wmIGFNYWRlTmV3RnJhbWUpOwoKICBuc3Jlc3VsdCBTcGxp
dExpbmUobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgIG5z
TGluZUxheW91dCYgYUxpbmVMYXlvdXQsCiAgICAgICAgICAgICAgICAgICAgIG5zTGluZUJveCog
YUxpbmUsCiAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUpOwoKICBuc0Jsb2Nr
RnJhbWUqIEZpbmRGb2xsb3dpbmdCbG9ja0ZyYW1lKG5zSUZyYW1lKiBhRnJhbWUpOwoKICBuc3Jl
c3VsdCBQdWxsRnJhbWUobnNCbG9ja1JlZmxvd1N0YXRlJiBhU3RhdGUsCiAgICAgICAgICAgICAg
ICAgICAgIG5zTGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRGFt
YWdlRGVsZXRlZExpbmUsCiAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiYgYUZyYW1lUmVz
dWx0KTsKCiAgbnNyZXN1bHQgUHVsbEZyYW1lKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlLAog
ICAgICAgICAgICAgICAgICAgICBuc0xpbmVCb3gqIGFUb0xpbmUsCiAgICAgICAgICAgICAgICAg
ICAgIG5zTGluZUJveCoqIGFGcm9tTGlzdCwKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFV
cGRhdGVHZW9tZXRyaWNQYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRGFtYWdl
RGVsZXRlZExpbmVzLAogICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSomIGFGcmFtZVJlc3Vs
dCwKICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhU3RvcFB1bGxpbmcpOwoKICB2b2lkIFB1
c2hMaW5lcyhuc0Jsb2NrUmVmbG93U3RhdGUmIGFTdGF0ZSk7CgoKCiAgdmlydHVhbCB2b2lkIFBh
aW50Q2hpbGRyZW4obnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1JlY3QmIGFEaXJ0eVJlY3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNGcmFtZVBhaW50TGF5ZXIgYVdoaWNoTGF5ZXIpOwoK
ICB2b2lkIFBhaW50RmxvYXRlcnMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgbnNJUmVuZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCk7CgogIHZvaWQgUHJv
cG9nYXRlUmVmbG93RGFtYWdlKG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zTGluZUJveCogYUxpbmUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbnNSZWN0JiBhT2xkQ29tYmluZWRBcmVhLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zY29vcmQgYURlbHRhWSk7CgogIHZvaWQgQnVpbGRGbG9hdGVyTGlzdCgp
OwoKCgoKICB2b2lkIFJlbnVtYmVyTGlzdHMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7
CgogIFBSQm9vbCBSZW51bWJlckxpc3RzSW4obnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhQ29udGFpbmVyRnJhbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBQUkludDMyKiBhT3JkaW5hbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSSW50MzIgYURlcHRoKTsKCiAgUFJCb29sIFJlbnVtYmVyTGlzdHNJbkJsb2NrKG5z
SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zQmxvY2tGcmFtZSogYUNvbnRhaW5lckZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkludDMyKiBhT3JkaW5hbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJ
bnQzMiBhRGVwdGgpOwoKICBQUkJvb2wgUmVudW1iZXJMaXN0c0Zvcihuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0LCBuc0lGcmFtZSogYUtpZCwgUFJJbnQzMiogYU9yZGluYWwsIFBSSW50MzIg
YURlcHRoKTsKCiAgUFJCb29sIEZyYW1lU3RhcnRzQ291bnRlclNjb3BlKG5zSUZyYW1lKiBhRnJh
bWUpOwoKICBuc3Jlc3VsdCBVcGRhdGVCdWxsZXRQb3NpdGlvbihuc0Jsb2NrUmVmbG93U3RhdGUm
IGFTdGF0ZSk7CgogIHZvaWQgUmVmbG93QnVsbGV0KG5zQmxvY2tSZWZsb3dTdGF0ZSYgYVN0YXRl
LAogICAgICAgICAgICAgICAgICAgIG5zSFRNTFJlZmxvd01ldHJpY3MmIGFNZXRyaWNzKTsKCgoK
ICBuc0xpbmVCb3gqIEdldE92ZXJmbG93TGluZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFSZW1vdmVQcm9wZXJ0eSkg
Y29uc3Q7CgogIG5zcmVzdWx0IFNldE92ZXJmbG93TGluZXMobnNJUHJlc0NvbnRleHQqIGFQcmVz
Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zTGluZUJveCogYU92ZXJmbG93
RnJhbWVzKTsKCiAgbnNJRnJhbWUqIExhc3RDaGlsZCgpOwoKCiAgUFJCb29sIElzQ2hpbGQobnNJ
UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJhbWUqIGFGcmFtZSk7CiAgdm9pZCBWZXJp
ZnlMaW5lcyhQUkJvb2wgYUZpbmFsQ2hlY2tPSyk7CiAgdm9pZCBWZXJpZnlPdmVyZmxvd1NpdHVh
dGlvbihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsKICBQUkludDMyIEdldERlcHRoKCkg
Y29uc3Q7CgoKCiAgbnNjb29yZCBtQXNjZW50OwoKICBuc0xpbmVCb3gqIG1MaW5lczsKCgogIG5z
RnJhbWVMaXN0IG1GbG9hdGVyczsKCgoKICBuc0J1bGxldEZyYW1lKiBtQnVsbGV0OwoKICBmcmll
bmQgY2xhc3MgbnNCbG9ja1JlZmxvd1N0YXRlOwoKcHJpdmF0ZToKICBuc0Fic29sdXRlQ29udGFp
bmluZ0Jsb2NrIG1BYnNvbHV0ZUNvbnRhaW5lcjsKCn07CiMgMjcgIm5zRm9ybUZyYW1lLmgiIDIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIgMQojIDI4ICJuc0Zv
cm1GcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTcGVjLmgi
IDEKIyAxNyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTcGVjLmgiCiMgMSAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIgMQojIDEzMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNjb3JlLmgiIDEKIyAxMzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgi
IDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNFcnJvci5oIiAxCiMgMTMzICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyAxMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0ZpbGVTcGVjLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMQoj
IDEzNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIgMgojIDEgIi9HTS9o
ZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAxMzYg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIKIyAxNjAgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUxvY2FsRmlsZS5oIiAxCiMgMTAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lM
b2NhbEZpbGUuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIiAxCiMg
MTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCmNsYXNzIG5zSVNpbXBsZUVu
dW1lcmF0b3I7CiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCmNsYXNz
IG5zSUZpbGUgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg
bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YzhjMGEwODAsIDB4
MDg2OCwgMHgxMWQzLCB7IDB4OTEsIDB4NWYsIDB4ZDksIDB4ZDgsIDB4ODksIDB4ZDQsIDB4OGUs
IDB4M2MgfX07IHJldHVybiBpaWQ7fQoKCgoKCgoKICBlbnVtIHsgTk9STUFMX0ZJTEVfVFlQRSA9
IDBVIH07CgogIGVudW0geyBESVJFQ1RPUllfVFlQRSA9IDFVIH07CiMgNTMgIi4uLy4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmQoY29uc3Qg
Y2hhciAqbm9kZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmRVbmljb2RlKGNvbnN0
IFBSVW5pY2hhciAqbm9kZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBOb3JtYWxpemUo
dm9pZCkgPSAwOwojIDg1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgQ3JlYXRlKFBSVWludDMyIHR5cGUsIFBSVWludDMyIHBlcm1pc3Npb25z
KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlYWZOYW1lKGNoYXIgKiAqYUxlYWZO
YW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMZWFmTmFtZShjb25zdCBjaGFyICogYUxl
YWZOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVuaWNvZGVMZWFmTmFtZShQUlVu
aWNoYXIgKiAqYVVuaWNvZGVMZWFmTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VW5p
Y29kZUxlYWZOYW1lKGNvbnN0IFBSVW5pY2hhciAqIGFVbmljb2RlTGVhZk5hbWUpID0gMDsKIyAx
MjIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBDb3B5VG8obnNJRmlsZSAqbmV3UGFyZW50RGlyLCBjb25zdCBjaGFyICpuZXdOYW1lKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvcHlUb1VuaWNvZGUobnNJRmlsZSAqbmV3UGFyZW50RGly
LCBjb25zdCBQUlVuaWNoYXIgKm5ld05hbWUpID0gMDsKIyAxMzYgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5VG9Gb2xsb3dpbmdMaW5r
cyhuc0lGaWxlICpuZXdQYXJlbnREaXIsIGNvbnN0IGNoYXIgKm5ld05hbWUpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgQ29weVRvRm9sbG93aW5nTGlua3NVbmljb2RlKG5zSUZpbGUgKm5ld1Bh
cmVudERpciwgY29uc3QgUFJVbmljaGFyICpuZXdOYW1lKSA9IDA7CiMgMTY3ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgTW92ZVRvKG5zSUZp
bGUgKm5ld1BhcmVudERpciwgY29uc3QgY2hhciAqbmV3TmFtZSkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBNb3ZlVG9Vbmljb2RlKG5zSUZpbGUgKm5ld1BhcmVudERpciwgY29uc3QgUFJVbmlj
aGFyICpuZXdOYW1lKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3Bhd24oY29uc3Qg
Y2hhciAqKmFyZ3MsIFBSVWludDMyIGNvdW50KSA9IDA7CiMgMTg3ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlKFBSQm9vbCByZWN1
cnNpdmUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGVybWlzc2lvbnMoUFJVaW50
MzIgKmFQZXJtaXNzaW9ucykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGVybWlzc2lvbnMo
UFJVaW50MzIgYVBlcm1pc3Npb25zKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBlcm1p
c3Npb25zT2ZMaW5rKFBSVWludDMyICphUGVybWlzc2lvbnNPZkxpbmspID0gMDsKICB2aXJ0dWFs
IG5zcmVzdWx0IFNldFBlcm1pc3Npb25zT2ZMaW5rKFBSVWludDMyIGFQZXJtaXNzaW9uc09mTGlu
aykgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhc3RNb2RpZmljYXRpb25EYXRl
KFBSSW50NjQgKmFMYXN0TW9kaWZpY2F0aW9uRGF0ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQg
U2V0TGFzdE1vZGlmaWNhdGlvbkRhdGUoUFJJbnQ2NCBhTGFzdE1vZGlmaWNhdGlvbkRhdGUpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFzdE1vZGlmaWNhdGlvbkRhdGVPZkxpbmsoUFJJ
bnQ2NCAqYUxhc3RNb2RpZmljYXRpb25EYXRlT2ZMaW5rKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRMYXN0TW9kaWZpY2F0aW9uRGF0ZU9mTGluayhQUkludDY0IGFMYXN0TW9kaWZpY2F0aW9u
RGF0ZU9mTGluaykgPSAwOwojIDIyMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGUu
aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGVTaXplKFBSSW50NjQgKmFGaWxlU2l6ZSkgPSAw
OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RmlsZVNpemUoUFJJbnQ2NCBhRmlsZVNpemUpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZVNpemVPZkxpbmsoUFJJbnQ2NCAqYUZpbGVTaXpl
T2ZMaW5rKSA9IDA7CiMgMjQ4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0VGFyZ2V0KGNoYXIgKiAqYVRhcmdldCkgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRVbmljb2RlVGFyZ2V0KFBSVW5pY2hhciAqICphVW5pY29kZVRhcmdl
dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXRoKGNoYXIgKiAqYVBhdGgpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VW5pY29kZVBhdGgoUFJVbmljaGFyICogKmFVbmljb2Rl
UGF0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFeGlzdHMoUFJCb29sICpfcmV0dmFsKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzV3JpdGFibGUoUFJCb29sICpfcmV0dmFsKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzUmVhZGFibGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IElzRXhlY3V0YWJsZShQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgSXNIaWRkZW4oUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IElzRGlyZWN0b3J5KFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBJc0ZpbGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IElzU3ltbGluayhQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgSXNTcGVjaWFsKFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDMxNSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVVuaXF1ZShjb25z
dCBjaGFyICpzdWdnZXN0ZWROYW1lLCBQUlVpbnQzMiB0eXBlLCBQUlVpbnQzMiBwZXJtaXNzaW9u
cykgPSAwOwojIDMyOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGUuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IENsb25lKG5zSUZpbGUgKipfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEVxdWFscyhuc0lGaWxlICppbkZpbGUsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoK
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGFpbnMobnNJRmlsZSAqaW5GaWxlLCBQUkJvb2wg
cmVjdXIsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQ
YXJlbnQobnNJRmlsZSAqICphUGFyZW50KSA9IDA7CiMgMzU4ICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlyZWN0b3J5RW50cmllcyhu
c0lTaW1wbGVFbnVtZXJhdG9yICogKmFEaXJlY3RvcnlFbnRyaWVzKSA9IDA7CgoKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRVUkwoY2hhciAqICphVVJMKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRVUkwoY29uc3QgY2hhciAqIGFVUkwpID0gMDsKCn07CiMgNzgwICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJRmlsZS5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lT
ZXJ2aWNlTWFuYWdlci5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2
aWNlTWFuYWdlci5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRN
YW5hZ2VyLmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5h
Z2VyLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRC5oIiAxCiMgMjkgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIiAyCgoKCgoKY2xhc3Mg
bnNJU2h1dGRvd25MaXN0ZW5lcjsKY2xhc3MgbnNJRGlyZWN0b3J5U2VydmljZVByb3ZpZGVyOwoj
IDg3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VydmljZU1hbmFnZXIuaCIKY2xhc3Mg
bnNJU2VydmljZU1hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CgogICAgc3Rh
dGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhj
ZjBkZjNiMCwgMHgzNDAxLCAweDExZDIsIHsweDgxLCAweDYzLCAweDAwLCAweDYwLCAweDA4LCAw
eDExLCAweDlkLCAweDdhfSB9OyByZXR1cm4gaWlkO307CgoKCgoKCgogICAgdmlydHVhbCBuc3Jl
c3VsdAogICAgUmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1cHBvcnRz
KiBhU2VydmljZSkgPSAwOwojIDExMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZp
Y2VNYW5hZ2VyLmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShj
b25zdCBuc0NJRCYgYUNsYXNzKSA9IDA7CgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgR2V0U2Vy
dmljZShjb25zdCBuc0NJRCYgYUNsYXNzLCBjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAg
ICAgbnNJU3VwcG9ydHMqICpyZXN1bHQsCiAgICAgICAgICAgICAgIG5zSVNodXRkb3duTGlzdGVu
ZXIqIHNodXRkb3duTGlzdGVuZXIgPSAwKSA9IDA7CgoKICAgIHZpcnR1YWwgbnNyZXN1bHQKICAg
IFJlbGVhc2VTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1cHBvcnRzKiBzZXJ2aWNl
LAogICAgICAgICAgICAgICAgICAgbnNJU2h1dGRvd25MaXN0ZW5lciogc2h1dGRvd25MaXN0ZW5l
ciA9IDApID0gMDsKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBSZWdpc3RlclNlcnZpY2Uo
Y29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZSkgPSAwOwoKICAg
IHZpcnR1YWwgbnNyZXN1bHQKICAgIFVucmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250
cmFjdElEKSA9IDA7CgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgR2V0U2VydmljZShjb25zdCBj
aGFyKiBhQ29udHJhY3RJRCwgY29uc3QgbnNJSUQmIGFJSUQsCiAgICAgICAgICAgICAgIG5zSVN1
cHBvcnRzKiAqcmVzdWx0LAogICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0
ZG93bkxpc3RlbmVyID0gMCkgPSAwOwoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBSZWxlYXNl
U2VydmljZShjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMqIHNlcnZpY2UsCiAg
ICAgICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0g
MCkgPSAwOwoKfTsKIyAxNTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFu
YWdlci5oIgpjbGFzcyBuc0lTaHV0ZG93bkxpc3RlbmVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsK
cHVibGljOgoKICAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu
c0lJRCBpaWQgPSB7IDB4NTZkZWNhZTAsIDB4MzQwNiwgMHgxMWQyLCB7MHg4MSwgMHg2MywgMHgw
MCwgMHg2MCwgMHgwOCwgMHgxMSwgMHg5ZCwgMHg3YX0gfTsgcmV0dXJuIGlpZDt9OwoKICAgIHZp
cnR1YWwgbnNyZXN1bHQKICAgIE9uU2h1dGRvd24oY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3Vw
cG9ydHMqIHNlcnZpY2UpID0gMDsKCn07CgoKCgpjbGFzcyBuc1NlcnZpY2VNYW5hZ2VyIHsKcHVi
bGljOgoKICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgUmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IG5zQ0lE
JiBhQ2xhc3MsIG5zSVN1cHBvcnRzKiBhU2VydmljZSk7CgogICAgc3RhdGljIG5zcmVzdWx0CiAg
ICBVbnJlZ2lzdGVyU2VydmljZShjb25zdCBuc0NJRCYgYUNsYXNzKTsKCiAgICBzdGF0aWMgbnNy
ZXN1bHQKICAgIEdldFNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgY29uc3QgbnNJSUQmIGFJ
SUQsCiAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiAqcmVzdWx0LAogICAgICAgICAgICAgICBu
c0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCk7CgoKICAgIHN0YXRpYyBu
c3Jlc3VsdAogICAgUmVsZWFzZVNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3VwcG9y
dHMqIHNlcnZpY2UsCiAgICAgICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0
ZG93bkxpc3RlbmVyID0gMCk7CgoKCgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBSZWdpc3RlclNl
cnZpY2UoY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZSk7Cgog
ICAgc3RhdGljIG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShjb25zdCBjaGFyKiBhQ29u
dHJhY3RJRCk7CgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBHZXRTZXJ2aWNlKGNvbnN0IGNoYXIq
IGFDb250cmFjdElELCBjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAgICAgbnNJU3VwcG9y
dHMqICpyZXN1bHQsCiAgICAgICAgICAgICAgIG5zSVNodXRkb3duTGlzdGVuZXIqIHNodXRkb3du
TGlzdGVuZXIgPSAwKTsKCgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBSZWxlYXNlU2VydmljZShj
b25zdCBjaGFyKiBhQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMqIHNlcnZpY2UsCiAgICAgICAgICAg
ICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCk7CgoKCiAg
ICBzdGF0aWMgbnNyZXN1bHQgR2V0R2xvYmFsU2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFn
ZXIqICpyZXN1bHQpOwoKCgogICAgc3RhdGljIG5zcmVzdWx0IFNodXRkb3duR2xvYmFsU2Vydmlj
ZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQpOwp9OwoKCgoKY2xhc3MgbnNHZXRT
ZXJ2aWNlQnlDSUQgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCiAgewogICAgcHVibGljOgogICAg
ICBuc0dldFNlcnZpY2VCeUNJRCggY29uc3QgbnNDSUQmIGFDSUQsIG5zSVN1cHBvcnRzKiBhU2Vy
dmljZU1hbmFnZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIgKQogICAgICAgICAgOiBtQ0lEKGFDSUQp
LAogICAgICAgICAgICBtU2VydmljZU1hbmFnZXIoIGRvX1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNl
TWFuYWdlcikgKSwKICAgICAgICAgICAgbUVycm9yUHRyKGFFcnJvclB0cikKICAgICAgICB7Cgog
ICAgICAgIH0KCiAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5z
SUlEJiwgdm9pZCoqICkgY29uc3Q7CiAgICAgICAgdmlydHVhbCB+bnNHZXRTZXJ2aWNlQnlDSUQo
KSB7fTsKCiAgICBwcml2YXRlOgogICAgICBjb25zdCBuc0NJRCYgbUNJRDsKICAgICAgbnNDT01Q
dHI8bnNJU2VydmljZU1hbmFnZXI+IG1TZXJ2aWNlTWFuYWdlcjsKICAgICAgbnNyZXN1bHQqIG1F
cnJvclB0cjsKICB9OwoKaW5saW5lCmNvbnN0IG5zR2V0U2VydmljZUJ5Q0lECmRvX0dldFNlcnZp
Y2UoIGNvbnN0IG5zQ0lEJiBhQ0lELCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKICB7CiAgICByZXR1
cm4gbnNHZXRTZXJ2aWNlQnlDSUQoYUNJRCwgMCwgZXJyb3IpOwogIH0KCmlubGluZQpjb25zdCBu
c0dldFNlcnZpY2VCeUNJRApkb19HZXRTZXJ2aWNlKCBjb25zdCBuc0NJRCYgYUNJRCwgbnNJU3Vw
cG9ydHMqIGFTZXJ2aWNlTWFuYWdlciwgbnNyZXN1bHQqIGVycm9yID0gMCApCiAgewogICAgcmV0
dXJuIG5zR2V0U2VydmljZUJ5Q0lEKGFDSUQsIGFTZXJ2aWNlTWFuYWdlciwgZXJyb3IpOwogIH0K
CmNsYXNzIG5zR2V0U2VydmljZUJ5Q29udHJhY3RJRCA6IHB1YmxpYyBuc0NPTVB0cl9oZWxwZXIK
ICB7CiAgICBwdWJsaWM6CiAgICAgIG5zR2V0U2VydmljZUJ5Q29udHJhY3RJRCggY29uc3QgY2hh
ciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZU1hbmFnZXIsIG5zcmVzdWx0KiBh
RXJyb3JQdHIgKQogICAgICAgICAgOiBtQ29udHJhY3RJRChhQ29udHJhY3RJRCksCiAgICAgICAg
ICAgIG1TZXJ2aWNlTWFuYWdlciggZG9fUXVlcnlJbnRlcmZhY2UoYVNlcnZpY2VNYW5hZ2VyKSAp
LAogICAgICAgICAgICBtRXJyb3JQdHIoYUVycm9yUHRyKQogICAgICAgIHsKCiAgICAgICAgfQoK
ICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lk
KiogKSBjb25zdDsKCiAgICAgICAgdmlydHVhbCB+bnNHZXRTZXJ2aWNlQnlDb250cmFjdElEKCkg
e307CgogICAgcHJpdmF0ZToKICAgICAgY29uc3QgY2hhciogbUNvbnRyYWN0SUQ7CiAgICAgIG5z
Q09NUHRyPG5zSVNlcnZpY2VNYW5hZ2VyPiBtU2VydmljZU1hbmFnZXI7CiAgICAgIG5zcmVzdWx0
KiBtRXJyb3JQdHI7CiAgfTsKCmlubGluZQpjb25zdCBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQK
ZG9fR2V0U2VydmljZSggY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zcmVzdWx0KiBlcnJvciA9
IDAgKQogIHsKICAgIHJldHVybiBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQs
IDAsIGVycm9yKTsKICB9CgppbmxpbmUKY29uc3QgbnNHZXRTZXJ2aWNlQnlDb250cmFjdElECmRv
X0dldFNlcnZpY2UoIGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBuc0lTdXBwb3J0cyogYVNlcnZp
Y2VNYW5hZ2VyLCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNHZXRTZXJ2
aWNlQnlDb250cmFjdElEKGFDb250cmFjdElELCBhU2VydmljZU1hbmFnZXIsIGVycm9yKTsKICB9
CgpjbGFzcyBuc0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnkgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVy
CnsKcHVibGljOgogIG5zR2V0U2VydmljZUZyb21DYXRlZ29yeShjb25zdCBjaGFyKiBhQ2F0ZWdv
cnksIGNvbnN0IGNoYXIqIGFFbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3Vw
cG9ydHMqIGFTZXJ2aWNlTWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNyZXN1
bHQqIGFFcnJvclB0cikKICAgIDogbUNhdGVnb3J5KGFDYXRlZ29yeSksCiAgICAgIG1FbnRyeShh
RW50cnkpLAogICAgICBtU2VydmljZU1hbmFnZXIoIGRvX1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNl
TWFuYWdlcikgKSwKICAgICAgbUVycm9yUHRyKGFFcnJvclB0cikKICB7CgogIH0KCiAgdmlydHVh
bCBuc3Jlc3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwogIHZp
cnR1YWwgfm5zR2V0U2VydmljZUZyb21DYXRlZ29yeSgpIHt9Owpwcm90ZWN0ZWQ6CiAgY29uc3Qg
Y2hhciogbUNhdGVnb3J5OwogIGNvbnN0IGNoYXIqIG1FbnRyeTsKICBuc0NPTVB0cjxuc0lTZXJ2
aWNlTWFuYWdlcj4gbVNlcnZpY2VNYW5hZ2VyOwogIG5zcmVzdWx0KiBtRXJyb3JQdHI7Cn07Cgpp
bmxpbmUKY29uc3QgbnNHZXRTZXJ2aWNlRnJvbUNhdGVnb3J5CmRvX0dldFNlcnZpY2VGcm9tQ2F0
ZWdvcnkoIGNvbnN0IGNoYXIqIGNhdGVnb3J5LCBjb25zdCBjaGFyKiBlbnRyeSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNyZXN1bHQqIGVycm9yID0gMCkKICB7CiAgICByZXR1cm4gbnNH
ZXRTZXJ2aWNlRnJvbUNhdGVnb3J5KGNhdGVnb3J5LCBlbnRyeSwgMCwgZXJyb3IpOwogIH0KIyAz
NTYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIgpleHRlcm4g
bnNyZXN1bHQKTlNfTmV3U2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQp
OwojIDM2OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgiCmV4
dGVybiBuc3Jlc3VsdApOU19Jbml0WFBDT00obnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQsIG5z
SUZpbGUqIGJpbkRpcmVjdG9yeSk7CgoKCgpleHRlcm4gbnNyZXN1bHQKTlNfSW5pdFhQQ09NMihu
c0lTZXJ2aWNlTWFuYWdlciogKnJlc3VsdCwgbnNJRmlsZSogYmluRGlyZWN0b3J5LCBuc0lEaXJl
Y3RvcnlTZXJ2aWNlUHJvdmlkZXIqIGFwcEZpbGVMb2NhdGlvblByb3ZpZGVyKTsKIyAzODYgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIgpleHRlcm4gbnNyZXN1
bHQKTlNfU2h1dGRvd25YUENPTShuc0lTZXJ2aWNlTWFuYWdlciogc2Vydk1ncik7CiMgNzgxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVByb3BlcnRpZXMuaCIgMQojIDI1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbnNJUHJvcGVydGllcy5oIgpjbGFzcyBuc0lQcm9wZXJ0aWVzIDogcHVibGljIG5zSVN1cHBv
cnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv
bnN0IG5zSUlEIGlpZCA9IHsweDYxYzFiM2MwLCAweGIxYmYsIDB4MTFkMywgeyAweDkzLCAweGI2
LCAweDAwLCAweDEwLCAweDRiLCAweGEwLCAweGZkLCAweDQwIH19OyByZXR1cm4gaWlkO30KCgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWZpbmUoY29uc3QgY2hhciAqcHJvcCwgbnNJU3VwcG9y
dHMgKmluaXRpYWxWYWx1ZSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVuZGVmaW5l
KGNvbnN0IGNoYXIgKnByb3ApID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXQoY29u
c3QgY2hhciAqcHJvcCwgY29uc3QgbnNJSUQgJiB1dWlkLCB2b2lkICogKnJlc3VsdCkgPSAwOwoK
CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldChjb25zdCBjaGFyICpwcm9wLCBuc0lTdXBwb3J0
cyAqdmFsdWUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzKGNvbnN0IGNoYXIgKnBy
b3AsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyAxNTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lQcm9wZXJ0aWVzLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNv
bXBvbmVudE1hbmFnZXIuaCIgMQojIDE1OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVBy
b3BlcnRpZXMuaCIgMgppbmxpbmUgbnNyZXN1bHQKTlNfTmV3SVByb3BlcnRpZXMobnNJU3VwcG9y
dHMqIG91dGVyLCBuc0lQcm9wZXJ0aWVzKiAqcmVzdWx0KQp7CiAgICBzdGF0aWMgY29uc3QgbnND
SUQga1Byb3BlcnRpZXNDSUQgPSB7IDB4NGRlMmJjOTAsIDB4YjFiZiwgMHgxMWQzLCB7MHg5Mywg
MHhiNiwgMHgwMCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhmZCwgMHg0MH0gfTsKICAgIHJldHVybiBu
c0NvbXBvbmVudE1hbmFnZXI6OkNyZWF0ZUluc3RhbmNlKGtQcm9wZXJ0aWVzQ0lELAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSVByb3Bl
cnRpZXM+OjpHZXRJSUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICh2b2lkKiopcmVzdWx0KTsKfQojIDc4MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSUZpbGUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAx
CiMgNzgzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIiAyCgppbmxpbmUgbnNy
ZXN1bHQKTlNfR2V0U3BlY2lhbERpcmVjdG9yeShjb25zdCBjaGFyKiBzcGVjaWFsRGlyTmFtZSwg
bnNJRmlsZSogKnJlc3VsdCkKewogICAgbnNyZXN1bHQgcnY7CiAgICBzdGF0aWMgY29uc3QgbnND
SUQga0RpcmVjdG9yeVNlcnZpY2VDSUQgPSB7MHhmMDAxNTJkMCwweGI0MGIsMHgxMWQzLHsweDhj
LCAweDljLCAweDAwLCAweDAwLCAweDY0LCAweDY1LCAweDczLCAweDc0fX07CiAgICBuc0NPTVB0
cjxuc0lQcm9wZXJ0aWVzPiBzZXJ2ID0gZG9fR2V0U2VydmljZShrRGlyZWN0b3J5U2VydmljZUNJ
RCwgJnJ2KTs7CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgbnND
T01QdHI8bnNJU3VwcG9ydHM+IGRpcjsKICAgIHJ2ID0gc2Vydi0+R2V0KHNwZWNpYWxEaXJOYW1l
LCBuc0NPTVR5cGVJbmZvPG5zSUZpbGU+OjpHZXRJSUQoKSwgZ2V0dGVyX0FkZFJlZnMoZGlyKSk7
CiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgKnJlc3VsdCA9IChu
c0lGaWxlKilkaXIuZ2V0KCk7CiAgICBpZiAoKnJlc3VsdCkKICAgICAgICAoKnJlc3VsdCktPkFk
ZFJlZigpOwogICAgcmV0dXJuIDA7Cn0KIyAxMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUxvY2FsRmlsZS5oIiAyCgoKCgoKCiMgMSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3ByaW8uaCIgMQojIDI5ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJpby5oIgojIDEgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcmxvbmcuaCIgMQojIDMwICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAyCiMgMSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIiAxCiMgMzEgIi9HTS9oZGQ5L21vemlsbGEvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiIDIKIyAxICIvR00vaGRkOS9tb3ppbGxhL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbnJ2YWwuaCIgMQojIDMyICIvR00vaGRkOS9tb3pp
bGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAyCiMgMSAiL0dNL2hkZDkvbW96
aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIiAxCiMgNDggIi9HTS9oZGQ5
L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmluZXQuaCIKIyAxICIvbmV3bGli
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDQ5ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDIKIyAxICIvbmV3bGliL2luY2x1ZGUvc3lzL3Nv
Y2tldC5oIiAxIDMKIyAyMyAiL25ld2xpYi9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMwojIDEgIi9u
ZXdsaWIvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNCAiL25ld2xpYi9pbmNsdWRlL3N5cy9z
b2NrZXQuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL25ld2xpYi9pbmNsdWRlL3N5cy91aW8u
aCIgMSAzCiMgMjIgIi9uZXdsaWIvaW5jbHVkZS9zeXMvdWlvLmgiIDMKIyAxICIvbmV3bGliL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi9uZXdsaWIvaW5jbHVkZS9zeXMvdWlvLmgiIDIg
MwoKIyAxICIvbmV3bGliL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI1ICIvbmV3bGliL2lu
Y2x1ZGUvc3lzL3Vpby5oIiAyIDMKCmV4dGVybiAiQyIgewoKCiMgMSAiL25ld2xpYi9pbmNsdWRl
L2JpdHMvdWlvLmgiIDEgMwojIDI0ICIvbmV3bGliL2luY2x1ZGUvYml0cy91aW8uaCIgMwojIDEg
Ii9uZXdsaWIvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjUgIi9uZXdsaWIvaW5jbHVkZS9i
aXRzL3Vpby5oIiAyIDMKIyA0MiAiL25ld2xpYi9pbmNsdWRlL2JpdHMvdWlvLmgiIDMKc3RydWN0
IGlvdmVjCiAgewogICAgdm9pZCAqaW92X2Jhc2U7CiAgICBzaXplX3QgaW92X2xlbjsKICB9Owoj
IDMwICIvbmV3bGliL2luY2x1ZGUvc3lzL3Vpby5oIiAyIDMKCgoKCgoKCmV4dGVybiBzc2l6ZV90
IHJlYWR2IChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgaW92ZWMgKl9fdmVjdG9yLCBpbnQgX19j
b3VudCkKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHNzaXplX3Qgd3JpdGV2IChpbnQgX19m
ZCwgX19jb25zdCBzdHJ1Y3QgaW92ZWMgKl9fdmVjdG9yLCBpbnQgX19jb3VudCkKICAgICB0aHJv
dyAoKTsKCn0KIyAyOCAiL25ld2xpYi9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMiAzCgojIDEgIi9v
cHQvZ251LW5ldy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRk
ZWYuaCIgMSAzCiMgMzAgIi9uZXdsaWIvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDIgMwoKCgoKCiMg
MSAiL25ld2xpYi9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDEgMwojIDI5ICIvbmV3bGliL2luY2x1
ZGUvYml0cy9zb2NrZXQuaCIgMwojIDEgIi9vcHQvZ251LW5ldy9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi9uZXdsaWIvaW5jbHVk
ZS9iaXRzL3NvY2tldC5oIiAyIDMKCiMgMSAiL25ld2xpYi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMK
IyAxNDQgIi9uZXdsaWIvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi9uZXdsaWIvaW5jbHVkZS9i
aXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMgMTQ1ICIvbmV3bGliL2luY2x1ZGUvbGltaXRzLmgiIDIg
MwoKCgojIDEgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMgMTQ5ICIv
bmV3bGliL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi9uZXdsaWIvaW5jbHVkZS9iaXRz
L3hvcGVuX2xpbS5oIiAxIDMKIyAxNTMgIi9uZXdsaWIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMg
MzIgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAyIDMKIyAxICIvbmV3bGliL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDMzICIvbmV3bGliL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIg
MiAzCgoKCnR5cGVkZWYgX19zb2NrbGVuX3Qgc29ja2xlbl90OwoKCgoKZW51bSBfX3NvY2tldF90
eXBlCnsKICBTT0NLX1NUUkVBTSA9IDEsCgoKICBTT0NLX0RHUkFNID0gMiwKCgogIFNPQ0tfUkFX
ID0gMywKCiAgU09DS19SRE0gPSA0LAoKICBTT0NLX1NFUVBBQ0tFVCA9IDUsCgoKICBTT0NLX1BB
Q0tFVCA9IDEwCgoKCn07CiMgMTM4ICIvbmV3bGliL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMwoj
IDEgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL3NvY2thZGRyLmgiIDEgMwojIDI5ICIvbmV3bGliL2lu
Y2x1ZGUvYml0cy9zb2NrYWRkci5oIiAzCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHNhX2Zh
bWlseV90OwojIDEzOSAiL25ld2xpYi9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDIgMwoKCnN0cnVj
dCBzb2NrYWRkcgogIHsKICAgIHNhX2ZhbWlseV90IHNhX2ZhbWlseTsKICAgIGNoYXIgc2FfZGF0
YVsxNF07CiAgfTsKIyAxNTggIi9uZXdsaWIvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAzCnN0cnVj
dCBzb2NrYWRkcl9zdG9yYWdlCiAgewogICAgc2FfZmFtaWx5X3Qgc3NfZmFtaWx5OwogICAgX191
aW50MzJfdCBfX3NzX2FsaWduOwogICAgY2hhciBfX3NzX3BhZGRpbmdbKDEyOCAtICgyICogc2l6
ZW9mIChfX3VpbnQzMl90KSkpXTsKICB9OwoKCgplbnVtCiAgewogICAgTVNHX09PQiA9IDB4MDEs
CgogICAgTVNHX1BFRUsgPSAweDAyLAoKICAgIE1TR19ET05UUk9VVEUgPSAweDA0LAoKCgogICAg
TVNHX1RSWUhBUkQgPSBNU0dfRE9OVFJPVVRFLAoKCiAgICBNU0dfQ1RSVU5DID0gMHgwOCwKCiAg
ICBNU0dfUFJPWFkgPSAweDEwLAoKICAgIE1TR19UUlVOQyA9IDB4MjAsCgogICAgTVNHX0RPTlRX
QUlUID0gMHg0MCwKCiAgICBNU0dfRU9SID0gMHg4MCwKCiAgICBNU0dfV0FJVEFMTCA9IDB4MTAw
LAoKICAgIE1TR19GSU4gPSAweDIwMCwKCiAgICBNU0dfU1lOID0gMHg0MDAsCgogICAgTVNHX0NP
TkZJUk0gPSAweDgwMCwKCiAgICBNU0dfUlNUID0gMHgxMDAwLAoKICAgIE1TR19FUlJRVUVVRSA9
IDB4MjAwMCwKCiAgICBNU0dfTk9TSUdOQUwgPSAweDQwMDAKCiAgfTsKCgoKCnN0cnVjdCBtc2do
ZHIKICB7CiAgICB2b2lkICptc2dfbmFtZTsKICAgIHNvY2tsZW5fdCBtc2dfbmFtZWxlbjsKCiAg
ICBzdHJ1Y3QgaW92ZWMgKm1zZ19pb3Y7CiAgICBpbnQgbXNnX2lvdmxlbjsKCiAgICB2b2lkICpt
c2dfY29udHJvbDsKICAgIHNvY2tsZW5fdCBtc2dfY29udHJvbGxlbjsKCiAgICBpbnQgbXNnX2Zs
YWdzOwogIH07CgoKc3RydWN0IGNtc2doZHIKICB7CiAgICBzaXplX3QgY21zZ19sZW47CgogICAg
aW50IGNtc2dfbGV2ZWw7CiAgICBpbnQgY21zZ190eXBlOwogICAgX19leHRlbnNpb25fXyB1bnNp
Z25lZCBjaGFyIF9fY21zZ19kYXRhIFtdOwoKICB9OwojIDI1MCAiL25ld2xpYi9pbmNsdWRlL2Jp
dHMvc29ja2V0LmgiIDMKZXh0ZXJuIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2dfbnh0aGRyIChzdHJ1
Y3QgbXNnaGRyICpfX21oZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IGNtc2doZHIgKl9fY21zZykgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19pbmxpbmUgc3Ry
dWN0IGNtc2doZHIgKgpfX2Ntc2dfbnh0aGRyIChzdHJ1Y3QgbXNnaGRyICpfX21oZHIsIHN0cnVj
dCBjbXNnaGRyICpfX2Ntc2cpIHRocm93ICgpCnsKICBpZiAoKHNpemVfdCkgX19jbXNnLT5jbXNn
X2xlbiA8IHNpemVvZiAoc3RydWN0IGNtc2doZHIpKQoKICAgIHJldHVybiAwOwoKICBfX2Ntc2cg
PSAoc3RydWN0IGNtc2doZHIgKikgKCh1bnNpZ25lZCBjaGFyICopIF9fY21zZwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKyAoKChfX2Ntc2ctPmNtc2dfbGVuKSArIHNpemVvZiAoc2l6
ZV90KSAtIDEpICYgKHNpemVfdCkgfihzaXplb2YgKHNpemVfdCkgLSAxKSkpOwogIGlmICgodW5z
aWduZWQgY2hhciAqKSAoX19jbXNnICsgMSkgPj0gKCh1bnNpZ25lZCBjaGFyICopIF9fbWhkci0+
bXNnX2NvbnRyb2wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9f
bWhkci0+bXNnX2NvbnRyb2xsZW4pCiAgICAgIHx8ICgodW5zaWduZWQgY2hhciAqKSBfX2Ntc2cg
KyAoKChfX2Ntc2ctPmNtc2dfbGVuKSArIHNpemVvZiAoc2l6ZV90KSAtIDEpICYgKHNpemVfdCkg
fihzaXplb2YgKHNpemVfdCkgLSAxKSkKICAgICAgICAgID4gKCh1bnNpZ25lZCBjaGFyICopIF9f
bWhkci0+bXNnX2NvbnRyb2wgKyBfX21oZHItPm1zZ19jb250cm9sbGVuKSkpCgogICAgcmV0dXJu
IDA7CiAgcmV0dXJuIF9fY21zZzsKfQoKCgoKZW51bQogIHsKICAgIFNDTV9SSUdIVFMgPSAweDAx
LAoKCiAgICBTQ01fQ1JFREVOVElBTFMgPSAweDAyLAoKCiAgICBfX1NDTV9DT05ORUNUID0gMHgw
MwogIH07CgoKCnN0cnVjdCB1Y3JlZAp7CiAgcGlkX3QgcGlkOwogIHVpZF90IHVpZDsKICBnaWRf
dCBnaWQ7Cn07CgoKIyAxICIvdXNyL2luY2x1ZGUvYXNtL3NvY2tldC5oIiAxIDMKCgoKIyAxICIv
dXNyL2luY2x1ZGUvYXNtL3NvY2tpb3MuaCIgMSAzCiMgNSAiL3Vzci9pbmNsdWRlL2FzbS9zb2Nr
ZXQuaCIgMiAzCiMgMjk5ICIvbmV3bGliL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMiAzCgoKCnN0
cnVjdCBsaW5nZXIKICB7CiAgICBpbnQgbF9vbm9mZjsKICAgIGludCBsX2xpbmdlcjsKICB9Owoj
IDM2ICIvbmV3bGliL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMKCgoKCnN0cnVjdCBvc29ja2Fk
ZHIKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgc2FfZmFtaWx5OwogICAgdW5zaWduZWQgY2hh
ciBzYV9kYXRhWzE0XTsKICB9OwoKCgoKZW51bQp7CiAgU0hVVF9SRCA9IDAsCgogIFNIVVRfV1Is
CgogIFNIVVRfUkRXUgoKfTsKIyAxMDAgIi9uZXdsaWIvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDMK
ZXh0ZXJuIGludCBzb2NrZXQgKGludCBfX2RvbWFpbiwgaW50IF9fdHlwZSwgaW50IF9fcHJvdG9j
b2wpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc29ja2V0cGFpciAoaW50IF9fZG9tYWluLCBp
bnQgX190eXBlLCBpbnQgX19wcm90b2NvbCwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19m
ZHNbMl0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmluZCAoaW50IF9fZmQsIF9fY29uc3Qgc3Ry
dWN0IHNvY2thZGRyICogX19hZGRyLCBzb2NrbGVuX3QgX19sZW4pCiAgICAgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBnZXRzb2NrbmFtZSAoaW50IF9fZmQsIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0
cmljdCBfX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqX19yZXN0cmlj
dCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBjb25uZWN0IChpbnQgX19mZCwgX19j
b25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiBfX2FkZHIsIHNvY2tsZW5fdCBfX2xlbikKICAgICB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBnZXRwZWVybmFtZSAoaW50IF9fZmQsIHN0cnVjdCBzb2NrYWRk
ciAqX19yZXN0cmljdCBfX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCAq
X19yZXN0cmljdCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2VuZCAoaW50IF9fZmQs
IF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sIGludCBfX2ZsYWdzKQogICAgIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IHJlY3YgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9f
biwgaW50IF9fZmxhZ3MpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2VuZHRvIChpbnQg
X19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAg
IGludCBfX2ZsYWdzLCBfX2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqIF9fYWRkciwKICAgICAgICAg
ICAgICAgICAgIHNvY2tsZW5fdCBfX2FkZHJfbGVuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50
IHJlY3Zmcm9tIChpbnQgX19mZCwgdm9pZCAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbiwg
aW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0
cmljdCBfX2FkZHIsIHNvY2tsZW5fdCAqX19yZXN0cmljdCBfX2FkZHJfbGVuKQogICAgIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCBzZW5kbXNnIChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgbXNn
aGRyICpfX21lc3NhZ2UsIGludCBfX2ZsYWdzKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHJlY3Ztc2cgKGludCBfX2ZkLCBzdHJ1Y3QgbXNnaGRyICpfX21lc3NhZ2UsIGludCBfX2ZsYWdz
KQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0c29ja29wdCAoaW50IF9fZmQsIGlu
dCBfX2xldmVsLCBpbnQgX19vcHRuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9f
cmVzdHJpY3QgX19vcHR2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpfX3Jl
c3RyaWN0IF9fb3B0bGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0c29ja29wdCAoaW50
IF9fZmQsIGludCBfX2xldmVsLCBpbnQgX19vcHRuYW1lLAogICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgdm9pZCAqX19vcHR2YWwsIHNvY2tsZW5fdCBfX29wdGxlbikgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGludCBsaXN0ZW4gKGludCBfX2ZkLCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIGludCBhY2NlcHQgKGludCBfX2ZkLCBzdHJ1Y3Qgc29ja2FkZHIgKl9fcmVzdHJpY3Qg
X19hZGRyLAogICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fYWRkcl9s
ZW4pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHNodXRkb3duIChpbnQgX19mZCwg
aW50IF9faG93KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2ZkdHlwZSAoaW50IF9fZmQs
IGludCBfX2ZkdHlwZSkgdGhyb3cgKCk7CgoKfQojIDUwICIvR00vaGRkOS9tb3ppbGxhL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDIKIyAxICIvbmV3bGliL2luY2x1ZGUvbmV0
aW5ldC9pbi5oIiAxIDMKIyAyMiAiL25ld2xpYi9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwojIDEg
Ii9uZXdsaWIvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL25ld2xpYi9pbmNsdWRlL25l
dGluZXQvaW4uaCIgMiAzCiMgMSAiL25ld2xpYi9pbmNsdWRlL3N0ZGludC5oIiAxIDMKIyAyNiAi
L25ld2xpYi9pbmNsdWRlL3N0ZGludC5oIiAzCiMgMSAiL25ld2xpYi9pbmNsdWRlL2ZlYXR1cmVz
LmgiIDEgMwojIDI3ICIvbmV3bGliL2luY2x1ZGUvc3RkaW50LmgiIDIgMwoKIyAxICIvb3B0L2du
dS1uZXcvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMwojIDI5ICIvbmV3bGliL2luY2x1ZGUvc3RkaW50LmgiIDIgMwojIDEgIi9uZXdsaWIvaW5j
bHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDMwICIvbmV3bGliL2luY2x1ZGUvc3RkaW50LmgiIDIg
MwojIDEgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDMxICIvbmV3bGli
L2luY2x1ZGUvc3RkaW50LmgiIDIgMwojIDUxICIvbmV3bGliL2luY2x1ZGUvc3RkaW50LmgiIDMK
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50
IHVpbnQxNl90OwoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7CgoKCgoKX19leHRlbnNp
b25fXwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludDY0X3Q7CgoKCgoKCnR5cGVk
ZWYgc2lnbmVkIGNoYXIgaW50X2xlYXN0OF90Owp0eXBlZGVmIHNob3J0IGludCBpbnRfbGVhc3Qx
Nl90Owp0eXBlZGVmIGludCBpbnRfbGVhc3QzMl90OwoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYg
bG9uZyBsb25nIGludCBpbnRfbGVhc3Q2NF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWlu
dF9sZWFzdDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludF9sZWFzdDE2X3Q7CnR5
cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfbGVhc3QzMl90OwoKCgpfX2V4dGVuc2lvbl9fCnR5cGVk
ZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50X2xlYXN0NjRfdDsKCgoKCgoKdHlwZWRlZiBz
aWduZWQgY2hhciBpbnRfZmFzdDhfdDsKCgoKCgp0eXBlZGVmIGludCBpbnRfZmFzdDE2X3Q7CnR5
cGVkZWYgaW50IGludF9mYXN0MzJfdDsKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBp
bnQgaW50X2Zhc3Q2NF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9mYXN0OF90OwoK
CgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQg
aW50IHVpbnRfZmFzdDMyX3Q7Cl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxv
bmcgaW50IHVpbnRfZmFzdDY0X3Q7CiMgMTI4ICIvbmV3bGliL2luY2x1ZGUvc3RkaW50LmgiIDMK
dHlwZWRlZiBpbnQgaW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludHB0cl90Owoj
IDE0MCAiL25ld2xpYi9pbmNsdWRlL3N0ZGludC5oIiAzCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBs
b25nIGxvbmcgaW50IGludG1heF90OwpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBsb25nIGludCB1aW50bWF4X3Q7CiMgMjQgIi9uZXdsaWIvaW5jbHVkZS9uZXRpbmV0L2luLmgi
IDIgMwojIDEgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI1ICIvbmV3bGli
L2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgpleHRlcm4gIkMiIHsKCgplbnVtCiAgewogICAg
SVBQUk9UT19JUCA9IDAsCgogICAgSVBQUk9UT19IT1BPUFRTID0gMCwKCiAgICBJUFBST1RPX0lD
TVAgPSAxLAoKICAgIElQUFJPVE9fSUdNUCA9IDIsCgogICAgSVBQUk9UT19JUElQID0gNCwKCiAg
ICBJUFBST1RPX1RDUCA9IDYsCgogICAgSVBQUk9UT19FR1AgPSA4LAoKICAgIElQUFJPVE9fUFVQ
ID0gMTIsCgogICAgSVBQUk9UT19VRFAgPSAxNywKCiAgICBJUFBST1RPX0lEUCA9IDIyLAoKICAg
IElQUFJPVE9fVFAgPSAyOSwKCiAgICBJUFBST1RPX0lQVjYgPSA0MSwKCiAgICBJUFBST1RPX1JP
VVRJTkcgPSA0MywKCiAgICBJUFBST1RPX0ZSQUdNRU5UID0gNDQsCgogICAgSVBQUk9UT19SU1ZQ
ID0gNDYsCgogICAgSVBQUk9UT19HUkUgPSA0NywKCiAgICBJUFBST1RPX0VTUCA9IDUwLAoKICAg
IElQUFJPVE9fQUggPSA1MSwKCiAgICBJUFBST1RPX0lDTVBWNiA9IDU4LAoKICAgIElQUFJPVE9f
Tk9ORSA9IDU5LAoKICAgIElQUFJPVE9fRFNUT1BUUyA9IDYwLAoKICAgIElQUFJPVE9fTVRQID0g
OTIsCgogICAgSVBQUk9UT19FTkNBUCA9IDk4LAoKICAgIElQUFJPVE9fUElNID0gMTAzLAoKICAg
IElQUFJPVE9fQ09NUCA9IDEwOCwKCiAgICBJUFBST1RPX1JBVyA9IDI1NSwKCiAgICBJUFBST1RP
X01BWAogIH07CgoKCnR5cGVkZWYgdWludDE2X3QgaW5fcG9ydF90OwoKCmVudW0KICB7CiAgICBJ
UFBPUlRfRUNITyA9IDcsCiAgICBJUFBPUlRfRElTQ0FSRCA9IDksCiAgICBJUFBPUlRfU1lTVEFU
ID0gMTEsCiAgICBJUFBPUlRfREFZVElNRSA9IDEzLAogICAgSVBQT1JUX05FVFNUQVQgPSAxNSwK
ICAgIElQUE9SVF9GVFAgPSAyMSwKICAgIElQUE9SVF9URUxORVQgPSAyMywKICAgIElQUE9SVF9T
TVRQID0gMjUsCiAgICBJUFBPUlRfVElNRVNFUlZFUiA9IDM3LAogICAgSVBQT1JUX05BTUVTRVJW
RVIgPSA0MiwKICAgIElQUE9SVF9XSE9JUyA9IDQzLAogICAgSVBQT1JUX01UUCA9IDU3LAoKICAg
IElQUE9SVF9URlRQID0gNjksCiAgICBJUFBPUlRfUkpFID0gNzcsCiAgICBJUFBPUlRfRklOR0VS
ID0gNzksCiAgICBJUFBPUlRfVFRZTElOSyA9IDg3LAogICAgSVBQT1JUX1NVUERVUCA9IDk1LAoK
CiAgICBJUFBPUlRfRVhFQ1NFUlZFUiA9IDUxMiwKICAgIElQUE9SVF9MT0dJTlNFUlZFUiA9IDUx
MywKICAgIElQUE9SVF9DTURTRVJWRVIgPSA1MTQsCiAgICBJUFBPUlRfRUZTU0VSVkVSID0gNTIw
LAoKCiAgICBJUFBPUlRfQklGRlVEUCA9IDUxMiwKICAgIElQUE9SVF9XSE9TRVJWRVIgPSA1MTMs
CiAgICBJUFBPUlRfUk9VVEVTRVJWRVIgPSA1MjAsCgoKICAgIElQUE9SVF9SRVNFUlZFRCA9IDEw
MjQsCgoKICAgIElQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwCiAgfTsKCgoKdHlwZWRlZiB1aW50
MzJfdCBpbl9hZGRyX3Q7CnN0cnVjdCBpbl9hZGRyCiAgewogICAgaW5fYWRkcl90IHNfYWRkcjsK
ICB9OwojIDE5MCAiL25ld2xpYi9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwpzdHJ1Y3QgaW42X2Fk
ZHIKICB7CiAgICB1bmlvbgogICAgICB7CiAgICAgICAgdWludDhfdCB1Nl9hZGRyOFsxNl07CiAg
ICAgICAgdWludDE2X3QgdTZfYWRkcjE2WzhdOwogICAgICAgIHVpbnQzMl90IHU2X2FkZHIzMls0
XTsKICAgICAgfSBpbjZfdTsKCgoKICB9OwoKZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBp
bjZhZGRyX2FueTsKZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2xvb3BiYWNr
OwoKCgoKCgoKIyAxICIvbmV3bGliL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMSAzCiMgMjEzICIv
bmV3bGliL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgoKc3RydWN0IHNvY2thZGRyX2luCiAg
ewogICAgc2FfZmFtaWx5X3Qgc2luX2ZhbWlseTsKICAgIGluX3BvcnRfdCBzaW5fcG9ydDsKICAg
IHN0cnVjdCBpbl9hZGRyIHNpbl9hZGRyOwoKCiAgICB1bnNpZ25lZCBjaGFyIHNpbl96ZXJvW3Np
emVvZiAoc3RydWN0IHNvY2thZGRyKSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXpl
b2YgKHVuc2lnbmVkIHNob3J0IGludCkpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZW9mIChpbl9wb3J0X3QpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChzdHJ1
Y3QgaW5fYWRkcildOwogIH07CgoKc3RydWN0IHNvY2thZGRyX2luNgogIHsKICAgIHNhX2ZhbWls
eV90IHNpbjZfZmFtaWx5OwogICAgaW5fcG9ydF90IHNpbjZfcG9ydDsKICAgIHVpbnQzMl90IHNp
bjZfZmxvd2luZm87CiAgICBzdHJ1Y3QgaW42X2FkZHIgc2luNl9hZGRyOwogICAgdWludDMyX3Qg
c2luNl9zY29wZV9pZDsKICB9OwoKCnN0cnVjdCBpcHY2X21yZXEKICB7CgogICAgc3RydWN0IGlu
Nl9hZGRyIGlwdjZtcl9tdWx0aWFkZHI7CgoKICAgIHVuc2lnbmVkIGludCBpcHY2bXJfaW50ZXJm
YWNlOwogIH07CgoKIyAxICIvbmV3bGliL2luY2x1ZGUvYml0cy9pbi5oIiAxIDMKIyA2NiAiL25l
d2xpYi9pbmNsdWRlL2JpdHMvaW4uaCIgMwpzdHJ1Y3QgaXBfb3B0cwogIHsKICAgIHN0cnVjdCBp
bl9hZGRyIGlwX2RzdDsKICAgIGNoYXIgaXBfb3B0c1s0MF07CiAgfTsKCgpzdHJ1Y3QgaXBfbXJl
cQogIHsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9tdWx0aWFkZHI7CiAgICBzdHJ1Y3QgaW5fYWRk
ciBpbXJfaW50ZXJmYWNlOwogIH07CgoKc3RydWN0IGlwX21yZXFuCiAgewogICAgc3RydWN0IGlu
X2FkZHIgaW1yX211bHRpYWRkcjsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9hZGRyZXNzOwogICAg
aW50IGltcl9pZmluZGV4OwogIH07CgoKc3RydWN0IGluX3BrdGluZm8KICB7CiAgICBpbnQgaXBp
X2lmaW5kZXg7CiAgICBzdHJ1Y3QgaW5fYWRkciBpcGlfc3BlY19kc3Q7CiAgICBzdHJ1Y3QgaW5f
YWRkciBpcGlfYWRkcjsKICB9OwojIDI1MSAiL25ld2xpYi9pbmNsdWRlL25ldGluZXQvaW4uaCIg
MiAzCiMgMjU5ICIvbmV3bGliL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzCmV4dGVybiB1aW50MzJf
dCBudG9obCAodWludDMyX3QgX19uZXRsb25nKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CmV4dGVybiB1aW50MTZfdCBudG9ocyAodWludDE2X3QgX19uZXRzaG9ydCkKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiB1aW50MzJfdCBo
dG9ubCAodWludDMyX3QgX19ob3N0bG9uZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CmV4dGVybiB1aW50MTZfdCBodG9ucyAodWludDE2X3QgX19ob3N0c2hvcnQp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIyAxICIvbmV3bGli
L2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDI2OCAiL25ld2xpYi9pbmNsdWRlL25ldGluZXQvaW4u
aCIgMiAzCgoKIyAxICIvbmV3bGliL2luY2x1ZGUvYml0cy9ieXRlc3dhcC5oIiAxIDMKIyAyNzEg
Ii9uZXdsaWIvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwojIDMzMyAiL25ld2xpYi9pbmNsdWRl
L25ldGluZXQvaW4uaCIgMwpleHRlcm4gaW50IGJpbmRyZXN2cG9ydCAoaW50IF9fc29ja2ZkLCBz
dHJ1Y3Qgc29ja2FkZHJfaW4gKl9fc29ja19pbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiaW5k
cmVzdnBvcnQ2IChpbnQgX19zb2NrZmQsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKl9fc29ja19pbikK
ICAgICB0aHJvdyAoKTsKIyAzNjEgIi9uZXdsaWIvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKc3Ry
dWN0IGluNl9wa3RpbmZvCiAgewogICAgc3RydWN0IGluNl9hZGRyIGlwaTZfYWRkcjsKICAgIHVu
c2lnbmVkIGludCBpcGk2X2lmaW5kZXg7CiAgfTsKCn0KIyA1MSAiL0dNL2hkZDkvbW96aWxsYS9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIiAyCiMgNjUgIi9HTS9oZGQ5L21vemls
bGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmluZXQuaCIKIyAxICIvbmV3bGliL2luY2x1
ZGUvYXJwYS9pbmV0LmgiIDEgMwojIDIyICIvbmV3bGliL2luY2x1ZGUvYXJwYS9pbmV0LmgiIDMK
IyAxICIvbmV3bGliL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi9uZXdsaWIvaW5jbHVk
ZS9hcnBhL2luZXQuaCIgMiAzCiMgMSAiL25ld2xpYi9pbmNsdWRlL25ldGluZXQvaW4uaCIgMSAz
CiMgMjQgIi9uZXdsaWIvaW5jbHVkZS9hcnBhL2luZXQuaCIgMiAzCgoKCgoKCgpleHRlcm4gIkMi
IHsKCgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2FkZHIgKF9fY29uc3QgY2hhciAqX19jcCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2xuYW9mIChzdHJ1Y3QgaW5fYWRkciBfX2lu
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBpbl9hZGRyIGluZXRfbWFrZWFkZHIgKGluX2Fk
ZHJfdCBfX25ldCwgaW5fYWRkcl90IF9faG9zdCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW5f
YWRkcl90IGluZXRfbmV0b2YgKHN0cnVjdCBpbl9hZGRyIF9faW4pIHRocm93ICgpOwoKCgpleHRl
cm4gaW5fYWRkcl90IGluZXRfbmV0d29yayAoX19jb25zdCBjaGFyICpfX2NwKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGNoYXIgKmluZXRfbnRvYSAoc3RydWN0IGluX2FkZHIgX19pbikgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IGluZXRfcHRvbiAoaW50IF9fYWYsIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2NwLAogICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBfX2J1Zikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gX19jb25zdCBjaGFyICppbmV0X250b3AgKGludCBfX2FmLCBf
X2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19jcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzb2NrbGVuX3QgX19sZW4pCiAgICAgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBpbl9hZGRyX3QgaW5ldF9hdG9uIChfX2NvbnN0IGNoYXIgKl9fY3As
IHN0cnVjdCBpbl9hZGRyICpfX2lucCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICppbmV0X25l
dGEgKGluX2FkZHJfdCBfX25ldCwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7
CgoKCgpleHRlcm4gY2hhciAqaW5ldF9uZXRfbnRvcCAoaW50IF9fYWYsIF9fY29uc3Qgdm9pZCAq
X19jcCwgaW50IF9fYml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fYnVm
LCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpbmV0X25ldF9wdG9uIChp
bnQgX19hZiwgX19jb25zdCBjaGFyICpfX2NwLAogICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHVuc2lnbmVkIGlu
dCBpbmV0X25zYXBfYWRkciAoX19jb25zdCBjaGFyICpfX2NwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2J1ZiwgaW50IF9fbGVuKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGNoYXIgKmluZXRfbnNhcF9udG9hIChpbnQgX19sZW4sIF9fY29uc3QgdW5z
aWduZWQgY2hhciAqX19jcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX2J1
ZikgdGhyb3cgKCk7CgoKfQojIDY2ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJpbmV0LmgiIDIKCiMgMSAiL25ld2xpYi9pbmNsdWRlL25ldGRiLmgiIDEgMwoj
IDI2ICIvbmV3bGliL2luY2x1ZGUvbmV0ZGIuaCIgMwojIDEgIi9uZXdsaWIvaW5jbHVkZS9mZWF0
dXJlcy5oIiAxIDMKIyAyNyAiL25ld2xpYi9pbmNsdWRlL25ldGRiLmgiIDIgMwoKIyAxICIvbmV3
bGliL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAxIDMKIyAyOSAiL25ld2xpYi9pbmNsdWRlL25ldGRi
LmgiIDIgMwojIDEgIi9uZXdsaWIvaW5jbHVkZS9zdGRpbnQuaCIgMSAzCiMgMzAgIi9uZXdsaWIv
aW5jbHVkZS9uZXRkYi5oIiAyIDMKCgoKIyAxICIvbmV3bGliL2luY2x1ZGUvcnBjL25ldGRiLmgi
IDEgMwojIDM5ICIvbmV3bGliL2luY2x1ZGUvcnBjL25ldGRiLmgiIDMKIyAxICIvbmV3bGliL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgNDAgIi9uZXdsaWIvaW5jbHVkZS9ycGMvbmV0ZGIuaCIg
MiAzCgoKIyAxICIvb3B0L2dudS1uZXcvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQzICIvbmV3bGliL2luY2x1ZGUvcnBjL25ldGRiLmgi
IDIgMwoKZXh0ZXJuICJDIiB7CgpzdHJ1Y3QgcnBjZW50CnsKICBjaGFyICpyX25hbWU7CiAgY2hh
ciAqKnJfYWxpYXNlczsKICBpbnQgcl9udW1iZXI7Cn07CgpleHRlcm4gdm9pZCBzZXRycGNlbnQg
KGludCBfX3N0YXlvcGVuKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgZW5kcnBjZW50ICh2b2lkKSB0
aHJvdyAoKTsKZXh0ZXJuIHN0cnVjdCBycGNlbnQgKmdldHJwY2J5bmFtZSAoX19jb25zdCBjaGFy
ICpfX25hbWUpIHRocm93ICgpOwpleHRlcm4gc3RydWN0IHJwY2VudCAqZ2V0cnBjYnludW1iZXIg
KGludCBfX251bWJlcikgdGhyb3cgKCk7CmV4dGVybiBzdHJ1Y3QgcnBjZW50ICpnZXRycGNlbnQg
KHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cnBjYnluYW1lX3IgKF9fY29uc3QgY2hh
ciAqX19uYW1lLCBzdHJ1Y3QgcnBjZW50ICpfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKl9fYnVmZmVyLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBycGNlbnQgKipfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4g
aW50IGdldHJwY2J5bnVtYmVyX3IgKGludCBfX251bWJlciwgc3RydWN0IHJwY2VudCAqX19yZXN1
bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fYnVmZmVyLCBzaXpl
X3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJwY2VudCAq
Kl9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0cnBjZW50X3IgKHN0cnVjdCBycGNl
bnQgKl9fcmVzdWx0X2J1ZiwgY2hhciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX2J1Zmxlbiwgc3RydWN0IHJwY2VudCAqKl9fcmVzdWx0KSB0aHJvdyAoKTsKCgp9
CiMgMzQgIi9uZXdsaWIvaW5jbHVkZS9uZXRkYi5oIiAyIDMKCgoKCiMgMSAiL25ld2xpYi9pbmNs
dWRlL2JpdHMvc2lnaW5mby5oIiAxIDMKIyAyNSAiL25ld2xpYi9pbmNsdWRlL2JpdHMvc2lnaW5m
by5oIiAzCiMgMSAiL25ld2xpYi9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMjYgIi9u
ZXdsaWIvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMiAzCgoKCgoKCgp0eXBlZGVmIHVuaW9uIHNp
Z3ZhbAogIHsKICAgIGludCBzaXZhbF9pbnQ7CiAgICB2b2lkICpzaXZhbF9wdHI7CiAgfSBzaWd2
YWxfdDsKIyAyNzEgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwpzdHJ1Y3QgX19w
dGhyZWFkX2F0dHJfczsKCnR5cGVkZWYgc3RydWN0IHNpZ2V2ZW50CiAgewogICAgc2lndmFsX3Qg
c2lnZXZfdmFsdWU7CiAgICBpbnQgc2lnZXZfc2lnbm87CiAgICBpbnQgc2lnZXZfbm90aWZ5OwoK
ICAgIHVuaW9uCiAgICAgIHsKICAgICAgICBpbnQgX3BhZFsoKDY0IC8gc2l6ZW9mIChpbnQpKSAt
IDMpXTsKCiAgICAgICAgc3RydWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIHZvaWQgKCpfZnVu
Y3Rpb24pIChzaWd2YWxfdCk7CiAgICAgICAgICAgIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zICpf
YXR0cmlidXRlOwogICAgICAgICAgfSBfc2lnZXZfdGhyZWFkOwogICAgICB9IF9zaWdldl91bjsK
ICB9IHNpZ2V2ZW50X3Q7CgoKCgoKCmVudW0KewogIFNJR0VWX1NJR05BTCA9IDAsCgogIFNJR0VW
X05PTkUsCgogIFNJR0VWX1RIUkVBRAoKfTsKIyAzOSAiL25ld2xpYi9pbmNsdWRlL25ldGRiLmgi
IDIgMwoKIyAxICIvbmV3bGliL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA0MSAiL25ld2xpYi9pbmNs
dWRlL25ldGRiLmgiIDIgMwoKCiMgMSAiL25ld2xpYi9pbmNsdWRlL2JpdHMvbmV0ZGIuaCIgMSAz
CiMgMjcgIi9uZXdsaWIvaW5jbHVkZS9iaXRzL25ldGRiLmgiIDMKc3RydWN0IG5ldGVudAp7CiAg
Y2hhciAqbl9uYW1lOwogIGNoYXIgKipuX2FsaWFzZXM7CiAgaW50IG5fYWRkcnR5cGU7CiAgdWlu
dDMyX3Qgbl9uZXQ7Cn07CiMgNDQgIi9uZXdsaWIvaW5jbHVkZS9uZXRkYi5oIiAyIDMKIyA1NCAi
L25ld2xpYi9pbmNsdWRlL25ldGRiLmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBoX2Vy
cm5vOwoKCmV4dGVybiBpbnQgKl9faF9lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDEwNSAiL25ld2xpYi9pbmNsdWRlL25ldGRiLmgi
IDMKZXh0ZXJuIHZvaWQgaGVycm9yIChfX2NvbnN0IGNoYXIgKl9fc3RyKSB0aHJvdyAoKTsKCgpl
eHRlcm4gX19jb25zdCBjaGFyICpoc3RyZXJyb3IgKGludCBfX2Vycl9udW0pIHRocm93ICgpOwoK
CgoKc3RydWN0IGhvc3RlbnQKewogIGNoYXIgKmhfbmFtZTsKICBjaGFyICoqaF9hbGlhc2VzOwog
IGludCBoX2FkZHJ0eXBlOwogIGludCBoX2xlbmd0aDsKICBjaGFyICoqaF9hZGRyX2xpc3Q7Cgp9
OwoKCgpleHRlcm4gdm9pZCBzZXRob3N0ZW50IChpbnQgX19zdGF5X29wZW4pIHRocm93ICgpOwoK
CmV4dGVybiB2b2lkIGVuZGhvc3RlbnQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0
IGhvc3RlbnQgKmdldGhvc3RlbnQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IGhv
c3RlbnQgKmdldGhvc3RieWFkZHIgKF9fY29uc3Qgdm9pZCAqX19hZGRyLCBfX3NvY2tsZW5fdCBf
X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX190eXBlKSB0
aHJvdyAoKTsKCgpleHRlcm4gc3RydWN0IGhvc3RlbnQgKmdldGhvc3RieW5hbWUgKF9fY29uc3Qg
Y2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc3RydWN0IGhvc3RlbnQgKmdldGhv
c3RieW5hbWUyIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fYWYpIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gaW50IGdldGhvc3RlbnRfciAoc3RydWN0IGhvc3RlbnQgKl9fcmVzdHJpY3QgX19y
ZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1
Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3Rl
bnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpf
X3Jlc3RyaWN0IF9faF9lcnJub3ApIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRob3N0YnlhZGRy
X3IgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX2FkZHIsIF9fc29ja2xlbl90IF9fbGVuLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fdHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1
ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICoqX19yZXN0
cmljdCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj
dCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0aG9zdGJ5bmFtZV9yIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IGhvc3RlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKipfX3Jlc3RyaWN0IF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJu
b3ApIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRob3N0YnluYW1lMl9yIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19uYW1lLCBpbnQgX19hZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgaG9zdGVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICoqX19yZXN0cmljdCBf
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19o
X2Vycm5vcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0bmV0ZW50IChpbnQgX19zdGF5
X29wZW4pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGVuZG5ldGVudCAodm9pZCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBzdHJ1Y3QgbmV0ZW50ICpnZXRuZXRlbnQgKHZvaWQpIHRocm93ICgpOwoKCgpl
eHRlcm4gc3RydWN0IG5ldGVudCAqZ2V0bmV0YnlhZGRyICh1aW50MzJfdCBfX25ldCwgaW50IF9f
dHlwZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gc3RydWN0IG5ldGVudCAqZ2V0bmV0YnluYW1l
IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdldG5l
dGVudF9yIChzdHJ1Y3QgbmV0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAog
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3Vs
dCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBnZXRuZXRieWFkZHJfciAodWludDMyX3QgX19uZXQsIGludCBf
X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRlbnQgKl9fcmVzdHJp
Y3QgX19yZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry
aWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBuZXRlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgKl9fcmVzdHJpY3QgX19oX2Vycm5vcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdl
dG5ldGJ5bmFtZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90
IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0ZW50ICoqX19y
ZXN0cmljdCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry
aWN0IF9faF9lcnJub3ApIHRocm93ICgpOwoKCgoKc3RydWN0IHNlcnZlbnQKewogIGNoYXIgKnNf
bmFtZTsKICBjaGFyICoqc19hbGlhc2VzOwogIGludCBzX3BvcnQ7CiAgY2hhciAqc19wcm90bzsK
fTsKCgoKZXh0ZXJuIHZvaWQgc2V0c2VydmVudCAoaW50IF9fc3RheV9vcGVuKSB0aHJvdyAoKTsK
CgpleHRlcm4gdm9pZCBlbmRzZXJ2ZW50ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVj
dCBzZXJ2ZW50ICpnZXRzZXJ2ZW50ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBz
ZXJ2ZW50ICpnZXRzZXJ2YnluYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcHJvdG8pIHRocm93ICgp
OwoKCgpleHRlcm4gc3RydWN0IHNlcnZlbnQgKmdldHNlcnZieXBvcnQgKGludCBfX3BvcnQsIF9f
Y29uc3QgY2hhciAqX19wcm90bykKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHNl
cnZlbnRfciAoc3RydWN0IHNlcnZlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVu
LAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlcnZlbnQgKipfX3Jlc3RyaWN0IF9f
cmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0c2VydmJ5bmFtZV9yIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcHJvdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc2VydmVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VydmVudCAqKl9fcmVzdHJpY3QgX19yZXN1
bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRzZXJ2Ynlwb3J0X3IgKGludCBfX3BvcnQsIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Byb3RvLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHNlcnZlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlcnZlbnQgKipfX3Jlc3RyaWN0IF9f
cmVzdWx0KSB0aHJvdyAoKTsKCgoKCnN0cnVjdCBwcm90b2VudAp7CiAgY2hhciAqcF9uYW1lOwog
IGNoYXIgKipwX2FsaWFzZXM7CiAgaW50IHBfcHJvdG87Cn07CgoKCmV4dGVybiB2b2lkIHNldHBy
b3RvZW50IChpbnQgX19zdGF5X29wZW4pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGVuZHByb3Rv
ZW50ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9l
bnQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgcHJvdG9lbnQgKmdldHByb3RvYnlu
YW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBwcm90
b2VudCAqZ2V0cHJvdG9ieW51bWJlciAoaW50IF9fcHJvdG8pIHRocm93ICgpOwoKCgoKCmV4dGVy
biBpbnQgZ2V0cHJvdG9lbnRfciAoc3RydWN0IHByb3RvZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0
X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBz
aXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHByb3RvZW50
ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldHByb3RvYnlu
YW1lX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHByb3RvZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3Qg
X19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHByb3RvZW50ICoq
X19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldHByb3RvYnludW1i
ZXJfciAoaW50IF9fcHJvdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
cHJvdG9lbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHByb3RvZW50ICoqX19yZXN0cmljdCBfX3Jl
c3VsdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldG5ldGdyZW50IChfX2NvbnN0IGNoYXIg
Kl9fbmV0Z3JvdXApIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGVuZG5ldGdyZW50ICh2b2lkKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBnZXRuZXRncmVudCAoY2hhciAqKl9fcmVzdHJpY3QgX19o
b3N0cCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX191c2VycCwK
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19kb21haW5wKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBpbm5ldGdyIChfX2NvbnN0IGNoYXIgKl9fbmV0Z3JvdXAsIF9f
Y29uc3QgY2hhciAqX19ob3N0LAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX191
c2VyLCBfX2NvbnN0IGNoYXIgKmRvbWFpbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRuZXRn
cmVudF9yIChjaGFyICoqX19yZXN0cmljdCBfX2hvc3RwLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdXNlcnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19kb21haW5wLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKl9fcmVzdHJpY3QgX19idWZmZXIsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CiMgMzUx
ICIvbmV3bGliL2luY2x1ZGUvbmV0ZGIuaCIgMwpleHRlcm4gaW50IHJjbWQgKGNoYXIgKipfX3Jl
c3RyaWN0IF9fYWhvc3QsIHVuc2lnbmVkIHNob3J0IGludCBfX3Jwb3J0LAogICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2xvY3VzZXIsCiAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcmVtdXNlciwKICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19jbWQsIGludCAqX19yZXN0cmljdCBfX2ZkMnApCiAgICAg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmNtZF9hZiAoY2hhciAqKl9fcmVzdHJpY3QgX19haG9z
dCwgdW5zaWduZWQgc2hvcnQgaW50IF9fcnBvcnQsCiAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbG9jdXNlciwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19yZW11c2VyLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2NtZCwgaW50ICpfX3Jlc3RyaWN0IF9fZmQycCwKICAgICAgICAg
ICAgICAgICAgICBzYV9mYW1pbHlfdCBfX2FmKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBy
ZXhlYyAoY2hhciAqKl9fcmVzdHJpY3QgX19haG9zdCwgaW50IF9fcnBvcnQsCiAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Bhc3MsCiAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2NtZCwgaW50ICpfX3Jlc3RyaWN0IF9fZmQycCkKICAgICB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByZXhlY19hZiAoY2hhciAqKl9fcmVzdHJpY3QgX19haG9z
dCwgaW50IF9fcnBvcnQsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3Bhc3MsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2NtZCwgaW50ICpfX3Jlc3RyaWN0IF9fZmQycCwKICAgICAgICAgICAgICAgICAgICAgc2FfZmFt
aWx5X3QgX19hZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHJ1c2Vyb2sgKF9fY29uc3QgY2hh
ciAqX19yaG9zdCwgaW50IF9fc3VzZXIsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3JlbXVzZXIsIF9fY29uc3QgY2hhciAqX19sb2N1c2VyKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBydXNlcm9rX2FmIChfX2NvbnN0IGNoYXIgKl9fcmhvc3QsIGludCBfX3N1c2VyLAogICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZW11c2VyLCBfX2NvbnN0IGNoYXIg
Kl9fbG9jdXNlciwKICAgICAgICAgICAgICAgICAgICAgICBzYV9mYW1pbHlfdCBfX2FmKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgcnJlc3Zwb3J0IChpbnQgKl9fYWxwb3J0KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBycmVzdnBvcnRfYWYgKGludCAqX19hbHBvcnQsIHNhX2ZhbWlseV90IF9f
YWYpIHRocm93ICgpOwoKCgoKCgpzdHJ1Y3QgYWRkcmluZm8KewogIGludCBhaV9mbGFnczsKICBp
bnQgYWlfZmFtaWx5OwogIGludCBhaV9zb2NrdHlwZTsKICBpbnQgYWlfcHJvdG9jb2w7CiAgc29j
a2xlbl90IGFpX2FkZHJsZW47CiAgc3RydWN0IHNvY2thZGRyICphaV9hZGRyOwogIGNoYXIgKmFp
X2Nhbm9ubmFtZTsKICBzdHJ1Y3QgYWRkcmluZm8gKmFpX25leHQ7Cn07CgoKCnN0cnVjdCBnYWlj
Ygp7CiAgY29uc3QgY2hhciAqYXJfbmFtZTsKICBjb25zdCBjaGFyICphcl9zZXJ2aWNlOwogIGNv
bnN0IHN0cnVjdCBhZGRyaW5mbyAqYXJfcmVxdWVzdDsKICBzdHJ1Y3QgYWRkcmluZm8gKmFyX3Jl
c3VsdDsKCiAgaW50IF9fcmV0dXJuOwogIGludCBfX3VudXNlZFs1XTsKfTsKIyA0NzYgIi9uZXds
aWIvaW5jbHVkZS9uZXRkYi5oIiAzCmV4dGVybiBpbnQgZ2V0YWRkcmluZm8gKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3NlcnZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
c3RydWN0IGFkZHJpbmZvICpfX3Jlc3RyaWN0IF9fcmVxLAogICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgYWRkcmluZm8gKipfX3Jlc3RyaWN0IF9fcGFpKSB0aHJvdyAoKTsKCgpleHRlcm4g
dm9pZCBmcmVlYWRkcmluZm8gKHN0cnVjdCBhZGRyaW5mbyAqX19haSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIF9fY29uc3QgY2hhciAqZ2FpX3N0cmVycm9yIChpbnQgX19lY29kZSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBnZXRuYW1laW5mbyAoX19jb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKl9fcmVzdHJp
Y3QgX19zYSwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90IF9fc2FsZW4sIGNoYXIg
Kl9fcmVzdHJpY3QgX19ob3N0LAogICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgX19o
b3N0bGVuLCBjaGFyICpfX3Jlc3RyaWN0IF9fc2VydiwKICAgICAgICAgICAgICAgICAgICAgICAg
c29ja2xlbl90IF9fc2VydmxlbiwgdW5zaWduZWQgaW50IF9fZmxhZ3MpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgZ2V0YWRkcmluZm9fYSAoaW50IF9fbW9kZSwgc3RydWN0IGdhaWNiICpfX2xp
c3RbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19lbnQsIHN0cnVjdCBzaWdldmVu
dCAqX19yZXN0cmljdCBfX3NpZykKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZ2FpX3N1
c3BlbmQgKF9fY29uc3Qgc3RydWN0IGdhaWNiICpfX2NvbnN0IF9fbGlzdFtdLCBpbnQgX19lbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RpbWVv
dXQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2FpX2Vycm9yIChzdHJ1Y3QgZ2FpY2IgKl9fcmVx
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdhaV9jYW5jZWwgKHN0cnVjdCBnYWljYiAqX19nYWlj
YnApIHRocm93ICgpOwoKCgp9CiMgNjggIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcmluZXQuaCIgMgojIDMzICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJpby5oIiAyCgpleHRlcm4gIkMiIHsKCgp0eXBlZGVmIHN0cnVjdCBQ
UkRpciBQUkRpcjsKdHlwZWRlZiBzdHJ1Y3QgUFJEaXJFbnRyeSBQUkRpckVudHJ5Owp0eXBlZGVm
IHN0cnVjdCBQUkZpbGVEZXNjIFBSRmlsZURlc2M7CnR5cGVkZWYgc3RydWN0IFBSRmlsZUluZm8g
UFJGaWxlSW5mbzsKdHlwZWRlZiBzdHJ1Y3QgUFJGaWxlSW5mbzY0IFBSRmlsZUluZm82NDsKdHlw
ZWRlZiB1bmlvbiBQUk5ldEFkZHIgUFJOZXRBZGRyOwp0eXBlZGVmIHN0cnVjdCBQUklPTWV0aG9k
cyBQUklPTWV0aG9kczsKdHlwZWRlZiBzdHJ1Y3QgUFJQb2xsRGVzYyBQUlBvbGxEZXNjOwp0eXBl
ZGVmIHN0cnVjdCBQUkZpbGVQcml2YXRlIFBSRmlsZVByaXZhdGU7CnR5cGVkZWYgc3RydWN0IFBS
U2VuZEZpbGVEYXRhIFBSU2VuZEZpbGVEYXRhOwojIDU5ICIvR00vaGRkOS9tb3ppbGxhL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIFBSSW50biBQUkRlc2NJZGVudGl0
eTsKCnN0cnVjdCBQUkZpbGVEZXNjIHsKICAgIGNvbnN0IFBSSU9NZXRob2RzICptZXRob2RzOwog
ICAgUFJGaWxlUHJpdmF0ZSAqc2VjcmV0OwogICAgUFJGaWxlRGVzYyAqbG93ZXIsICpoaWdoZXI7
CiAgICB2b2lkICggKmR0b3IpKFBSRmlsZURlc2MgKmZkKTsKCiAgICBQUkRlc2NJZGVudGl0eSBp
ZGVudGl0eTsKfTsKIyA3OSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSVHJhbnNtaXRGaWxlRmxhZ3MgewogICAgUFJfVFJB
TlNNSVRGSUxFX0tFRVBfT1BFTiA9IDAsCgogICAgUFJfVFJBTlNNSVRGSUxFX0NMT1NFX1NPQ0tF
VCA9IDEKCn0gUFJUcmFuc21pdEZpbGVGbGFnczsKIyAxMzIgIi9HTS9oZGQ5L21vemlsbGEvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnN0cnVjdCBQUklQdjZBZGRyIHsKICAgICAg
ICB1bmlvbiB7CiAgICAgICAgICAgICAgICBQUlVpbnQ4IF9TNl91OFsxNl07CiAgICAgICAgICAg
ICAgICBQUlVpbnQxNiBfUzZfdTE2WzhdOwogICAgICAgICAgICAgICAgUFJVaW50MzIgX1M2X3Uz
Mls0XTsKICAgICAgICAgICAgICAgIFBSVWludDY0IF9TNl91NjRbMl07CiAgICAgICAgfSBfUzZf
dW47Cn07CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgUFJJUHY2QWRkciBQUklQdjZBZGRyOwoKdW5pb24g
UFJOZXRBZGRyIHsKICAgIHN0cnVjdCB7CiAgICAgICAgUFJVaW50MTYgZmFtaWx5OwoKCgogICAg
ICAgIGNoYXIgZGF0YVsxNF07CgogICAgfSByYXc7CiAgICBzdHJ1Y3QgewogICAgICAgIFBSVWlu
dDE2IGZhbWlseTsKICAgICAgICBQUlVpbnQxNiBwb3J0OwogICAgICAgIFBSVWludDMyIGlwOwoK
CgogICAgICAgIGNoYXIgcGFkWzhdOwoKICAgIH0gaW5ldDsKICAgIHN0cnVjdCB7CiAgICAgICAg
UFJVaW50MTYgZmFtaWx5OwogICAgICAgIFBSVWludDE2IHBvcnQ7CiAgICAgICAgUFJVaW50MzIg
Zmxvd2luZm87CiAgICAgICAgUFJJUHY2QWRkciBpcDsKICAgICAgICBQUlVpbnQzMiBzY29wZV9p
ZDsKICAgIH0gaXB2NjsKCiAgICBzdHJ1Y3QgewogICAgICAgIFBSVWludDE2IGZhbWlseTsKICAg
ICAgICBjaGFyIHBhdGhbMTA0XTsKICAgIH0gbG9jYWw7Cgp9OwojIDE5MCAiL0dNL2hkZDkvbW96
aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSU29j
a09wdGlvbgp7CiAgICBQUl9Tb2NrT3B0X05vbmJsb2NraW5nLAogICAgUFJfU29ja09wdF9MaW5n
ZXIsCiAgICBQUl9Tb2NrT3B0X1JldXNlYWRkciwKICAgIFBSX1NvY2tPcHRfS2VlcGFsaXZlLAog
ICAgUFJfU29ja09wdF9SZWN2QnVmZmVyU2l6ZSwKICAgIFBSX1NvY2tPcHRfU2VuZEJ1ZmZlclNp
emUsCgogICAgUFJfU29ja09wdF9JcFRpbWVUb0xpdmUsCiAgICBQUl9Tb2NrT3B0X0lwVHlwZU9m
U2VydmljZSwKCiAgICBQUl9Tb2NrT3B0X0FkZE1lbWJlciwKICAgIFBSX1NvY2tPcHRfRHJvcE1l
bWJlciwKICAgIFBSX1NvY2tPcHRfTWNhc3RJbnRlcmZhY2UsCiAgICBQUl9Tb2NrT3B0X01jYXN0
VGltZVRvTGl2ZSwKICAgIFBSX1NvY2tPcHRfTWNhc3RMb29wYmFjaywKCiAgICBQUl9Tb2NrT3B0
X05vRGVsYXksCiAgICBQUl9Tb2NrT3B0X01heFNlZ21lbnQsCiAgICBQUl9Tb2NrT3B0X0Jyb2Fk
Y2FzdCwKICAgIFBSX1NvY2tPcHRfTGFzdAp9IFBSU29ja09wdGlvbjsKCnR5cGVkZWYgc3RydWN0
IFBSTGluZ2VyIHsKICAgICAgICBQUkJvb2wgcG9sYXJpdHk7CiAgICAgICAgUFJJbnRlcnZhbFRp
bWUgbGluZ2VyOwp9IFBSTGluZ2VyOwoKdHlwZWRlZiBzdHJ1Y3QgUFJNY2FzdFJlcXVlc3Qgewog
ICAgICAgIFBSTmV0QWRkciBtY2FkZHI7CiAgICAgICAgUFJOZXRBZGRyIGlmYWRkcjsKfSBQUk1j
YXN0UmVxdWVzdDsKCnR5cGVkZWYgc3RydWN0IFBSU29ja2V0T3B0aW9uRGF0YQp7CiAgICBQUlNv
Y2tPcHRpb24gb3B0aW9uOwogICAgdW5pb24KICAgIHsKICAgICAgICBQUlVpbnRuIGlwX3R0bDsK
ICAgICAgICBQUlVpbnRuIG1jYXN0X3R0bDsKICAgICAgICBQUlVpbnRuIHRvczsKICAgICAgICBQ
UkJvb2wgbm9uX2Jsb2NraW5nOwogICAgICAgIFBSQm9vbCByZXVzZV9hZGRyOwogICAgICAgIFBS
Qm9vbCBrZWVwX2FsaXZlOwogICAgICAgIFBSQm9vbCBtY2FzdF9sb29wYmFjazsKICAgICAgICBQ
UkJvb2wgbm9fZGVsYXk7CiAgICAgICAgUFJCb29sIGJyb2FkY2FzdDsKICAgICAgICBQUlNpemUg
bWF4X3NlZ21lbnQ7CiAgICAgICAgUFJTaXplIHJlY3ZfYnVmZmVyX3NpemU7CiAgICAgICAgUFJT
aXplIHNlbmRfYnVmZmVyX3NpemU7CiAgICAgICAgUFJMaW5nZXIgbGluZ2VyOwogICAgICAgIFBS
TWNhc3RSZXF1ZXN0IGFkZF9tZW1iZXI7CiAgICAgICAgUFJNY2FzdFJlcXVlc3QgZHJvcF9tZW1i
ZXI7CiAgICAgICAgUFJOZXRBZGRyIG1jYXN0X2lmOwogICAgfSB2YWx1ZTsKfSBQUlNvY2tldE9w
dGlvbkRhdGE7CiMgMjU2ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcHJpby5oIgp0eXBlZGVmIHN0cnVjdCBQUklPVmVjIHsKICAgIGNoYXIgKmlvdl9iYXNlOwog
ICAgaW50IGlvdl9sZW47Cn0gUFJJT1ZlYzsKCgoKCgoKdHlwZWRlZiBlbnVtIFBSRGVzY1R5cGUK
ewogICAgUFJfREVTQ19GSUxFID0gMSwKICAgIFBSX0RFU0NfU09DS0VUX1RDUCA9IDIsCiAgICBQ
Ul9ERVNDX1NPQ0tFVF9VRFAgPSAzLAogICAgUFJfREVTQ19MQVlFUkVEID0gNCwKICAgIFBSX0RF
U0NfUElQRSA9IDUKfSBQUkRlc2NUeXBlOwoKdHlwZWRlZiBlbnVtIFBSU2Vla1doZW5jZSB7CiAg
ICBQUl9TRUVLX1NFVCA9IDAsCiAgICBQUl9TRUVLX0NVUiA9IDEsCiAgICBQUl9TRUVLX0VORCA9
IDIKfSBQUlNlZWtXaGVuY2U7CgpleHRlcm4gUFJEZXNjVHlwZSBQUl9HZXREZXNjVHlwZShQUkZp
bGVEZXNjICpmaWxlKTsKIyAyOTkgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wcmlvLmgiCnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJDbG9zZUZOKShQUkZpbGVEZXNj
ICpmZCk7CnR5cGVkZWYgUFJJbnQzMiAoICpQUlJlYWRGTikoUFJGaWxlRGVzYyAqZmQsIHZvaWQg
KmJ1ZiwgUFJJbnQzMiBhbW91bnQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJXcml0ZUZOKShQUkZp
bGVEZXNjICpmZCwgY29uc3Qgdm9pZCAqYnVmLCBQUkludDMyIGFtb3VudCk7CnR5cGVkZWYgUFJJ
bnQzMiAoICpQUkF2YWlsYWJsZUZOKShQUkZpbGVEZXNjICpmZCk7CnR5cGVkZWYgUFJJbnQ2NCAo
ICpQUkF2YWlsYWJsZTY0Rk4pKFBSRmlsZURlc2MgKmZkKTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQ
UkZzeW5jRk4pKFBSRmlsZURlc2MgKmZkKTsKdHlwZWRlZiBQUk9mZnNldDMyICggKlBSU2Vla0ZO
KShQUkZpbGVEZXNjICpmZCwgUFJPZmZzZXQzMiBvZmZzZXQsIFBSU2Vla1doZW5jZSBob3cpOwp0
eXBlZGVmIFBST2Zmc2V0NjQgKCAqUFJTZWVrNjRGTikoUFJGaWxlRGVzYyAqZmQsIFBST2Zmc2V0
NjQgb2Zmc2V0LCBQUlNlZWtXaGVuY2UgaG93KTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkZpbGVJ
bmZvRk4pKFBSRmlsZURlc2MgKmZkLCBQUkZpbGVJbmZvICppbmZvKTsKdHlwZWRlZiBQUlN0YXR1
cyAoICpQUkZpbGVJbmZvNjRGTikoUFJGaWxlRGVzYyAqZmQsIFBSRmlsZUluZm82NCAqaW5mbyk7
CnR5cGVkZWYgUFJJbnQzMiAoICpQUldyaXRldkZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCBjb25z
dCBQUklPVmVjICppb3YsIFBSSW50MzIgaW92X3NpemUsCiAgICBQUkludGVydmFsVGltZSB0aW1l
b3V0KTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkNvbm5lY3RGTikoCiAgICBQUkZpbGVEZXNjICpm
ZCwgY29uc3QgUFJOZXRBZGRyICphZGRyLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRl
ZiBQUkZpbGVEZXNjKiAoICpQUkFjY2VwdEZOKSAoCiAgICBQUkZpbGVEZXNjICpmZCwgUFJOZXRB
ZGRyICphZGRyLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQ
UkJpbmRGTikoUFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSTmV0QWRkciAqYWRkcik7CnR5cGVkZWYg
UFJTdGF0dXMgKCAqUFJMaXN0ZW5GTikoUFJGaWxlRGVzYyAqZmQsIFBSSW50biBiYWNrbG9nKTsK
dHlwZWRlZiBQUlN0YXR1cyAoICpQUlNodXRkb3duRk4pKFBSRmlsZURlc2MgKmZkLCBQUkludG4g
aG93KTsKdHlwZWRlZiBQUkludDMyICggKlBSUmVjdkZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCB2
b2lkICpidWYsIFBSSW50MzIgYW1vdW50LAogICAgUFJJbnRuIGZsYWdzLCBQUkludGVydmFsVGlt
ZSB0aW1lb3V0KTsKdHlwZWRlZiBQUkludDMyICggKlBSU2VuZEZOKSAoCiAgICBQUkZpbGVEZXNj
ICpmZCwgY29uc3Qgdm9pZCAqYnVmLCBQUkludDMyIGFtb3VudCwKICAgIFBSSW50biBmbGFncywg
UFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJJbnQzMiAoICpQUlJlY3Zmcm9tRk4p
KAogICAgUFJGaWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsCiAgICBQUklu
dG4gZmxhZ3MsIFBSTmV0QWRkciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVk
ZWYgUFJJbnQzMiAoICpQUlNlbmR0b0ZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCBjb25zdCB2b2lk
ICpidWYsIFBSSW50MzIgYW1vdW50LAogICAgUFJJbnRuIGZsYWdzLCBjb25zdCBQUk5ldEFkZHIg
KmFkZHIsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwp0eXBlZGVmIFBSSW50MTYgKCAqUFJQb2xs
Rk4pKAogICAgUFJGaWxlRGVzYyAqZmQsIFBSSW50MTYgaW5fZmxhZ3MsIFBSSW50MTYgKm91dF9m
bGFncyk7CnR5cGVkZWYgUFJJbnQzMiAoICpQUkFjY2VwdHJlYWRGTikoCiAgICBQUkZpbGVEZXNj
ICpzZCwgUFJGaWxlRGVzYyAqKm5kLCBQUk5ldEFkZHIgKipyYWRkciwKICAgIHZvaWQgKmJ1Ziwg
UFJJbnQzMiBhbW91bnQsIFBSSW50ZXJ2YWxUaW1lIHQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJU
cmFuc21pdGZpbGVGTikoCiAgICAgUFJGaWxlRGVzYyAqc2QsIFBSRmlsZURlc2MgKmZkLCBjb25z
dCB2b2lkICpoZWFkZXJzLAogICAgIFBSSW50MzIgaGxlbiwgUFJUcmFuc21pdEZpbGVGbGFncyBm
bGFncywgUFJJbnRlcnZhbFRpbWUgdCk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJHZXRzb2NrbmFt
ZUZOKShQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyKTsKdHlwZWRlZiBQUlN0YXR1cyAo
ICpQUkdldHBlZXJuYW1lRk4pKFBSRmlsZURlc2MgKmZkLCBQUk5ldEFkZHIgKmFkZHIpOwp0eXBl
ZGVmIFBSU3RhdHVzICggKlBSR2V0c29ja2V0b3B0aW9uRk4pKAogICAgUFJGaWxlRGVzYyAqZmQs
IFBSU29ja2V0T3B0aW9uRGF0YSAqZGF0YSk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJTZXRzb2Nr
ZXRvcHRpb25GTikoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJTb2NrZXRPcHRpb25EYXRh
ICpkYXRhKTsKdHlwZWRlZiBQUkludDMyICggKlBSU2VuZGZpbGVGTikoCiAgICAgICAgUFJGaWxl
RGVzYyAqbmV0d29ya1NvY2tldCwgUFJTZW5kRmlsZURhdGEgKnNlbmREYXRhLAogICAgICAgIFBS
VHJhbnNtaXRGaWxlRmxhZ3MgZmxhZ3MsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwp0eXBlZGVm
IFBSSW50biAoICpQUlJlc2VydmVkRk4pKFBSRmlsZURlc2MgKmZkKTsKCnN0cnVjdCBQUklPTWV0
aG9kcyB7CiAgICBQUkRlc2NUeXBlIGZpbGVfdHlwZTsKICAgIFBSQ2xvc2VGTiBjbG9zZTsKICAg
IFBSUmVhZEZOIHJlYWQ7CiAgICBQUldyaXRlRk4gd3JpdGU7CiAgICBQUkF2YWlsYWJsZUZOIGF2
YWlsYWJsZTsKICAgIFBSQXZhaWxhYmxlNjRGTiBhdmFpbGFibGU2NDsKICAgIFBSRnN5bmNGTiBm
c3luYzsKICAgIFBSU2Vla0ZOIHNlZWs7CiAgICBQUlNlZWs2NEZOIHNlZWs2NDsKICAgIFBSRmls
ZUluZm9GTiBmaWxlSW5mbzsKICAgIFBSRmlsZUluZm82NEZOIGZpbGVJbmZvNjQ7CiAgICBQUldy
aXRldkZOIHdyaXRldjsKICAgIFBSQ29ubmVjdEZOIGNvbm5lY3Q7CiAgICBQUkFjY2VwdEZOIGFj
Y2VwdDsKICAgIFBSQmluZEZOIGJpbmQ7CiAgICBQUkxpc3RlbkZOIGxpc3RlbjsKICAgIFBSU2h1
dGRvd25GTiBzaHV0ZG93bjsKICAgIFBSUmVjdkZOIHJlY3Y7CiAgICBQUlNlbmRGTiBzZW5kOwog
ICAgUFJSZWN2ZnJvbUZOIHJlY3Zmcm9tOwogICAgUFJTZW5kdG9GTiBzZW5kdG87CiAgICBQUlBv
bGxGTiBwb2xsOwogICAgUFJBY2NlcHRyZWFkRk4gYWNjZXB0cmVhZDsKICAgIFBSVHJhbnNtaXRm
aWxlRk4gdHJhbnNtaXRmaWxlOwogICAgUFJHZXRzb2NrbmFtZUZOIGdldHNvY2tuYW1lOwogICAg
UFJHZXRwZWVybmFtZUZOIGdldHBlZXJuYW1lOwogICAgUFJSZXNlcnZlZEZOIHJlc2VydmVkX2Zu
XzY7CiAgICBQUlJlc2VydmVkRk4gcmVzZXJ2ZWRfZm5fNTsKICAgIFBSR2V0c29ja2V0b3B0aW9u
Rk4gZ2V0c29ja2V0b3B0aW9uOwoKICAgIFBSU2V0c29ja2V0b3B0aW9uRk4gc2V0c29ja2V0b3B0
aW9uOwoKICAgIFBSU2VuZGZpbGVGTiBzZW5kZmlsZTsKICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZl
ZF9mbl80OwogICAgUFJSZXNlcnZlZEZOIHJlc2VydmVkX2ZuXzM7CiAgICBQUlJlc2VydmVkRk4g
cmVzZXJ2ZWRfZm5fMjsKICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZlZF9mbl8xOwogICAgUFJSZXNl
cnZlZEZOIHJlc2VydmVkX2ZuXzA7Cn07CiMgNDEwICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIGVudW0gUFJTcGVjaWFsRkQKewogICAg
UFJfU3RhbmRhcmRJbnB1dCwKICAgIFBSX1N0YW5kYXJkT3V0cHV0LAogICAgUFJfU3RhbmRhcmRF
cnJvcgp9IFBSU3BlY2lhbEZEOwoKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX0dldFNwZWNpYWxGRChQ
UlNwZWNpYWxGRCBpZCk7CiMgNDU2ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJEZXNjSWRlbnRpdHkgUFJfR2V0VW5pcXVlSWRlbnRp
dHkoY29uc3QgY2hhciAqbGF5ZXJfbmFtZSk7CmV4dGVybiBjb25zdCBjaGFyKiBQUl9HZXROYW1l
Rm9ySWRlbnRpdHkoUFJEZXNjSWRlbnRpdHkgaWRlbnQpOwpleHRlcm4gUFJEZXNjSWRlbnRpdHkg
UFJfR2V0TGF5ZXJzSWRlbnRpdHkoUFJGaWxlRGVzYyogZmQpOwpleHRlcm4gUFJGaWxlRGVzYyog
UFJfR2V0SWRlbnRpdGllc0xheWVyKFBSRmlsZURlc2MqIGZkX3N0YWNrLCBQUkRlc2NJZGVudGl0
eSBpZCk7CiMgNDY5ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJpby5oIgpleHRlcm4gY29uc3QgUFJJT01ldGhvZHMgKiBQUl9HZXREZWZhdWx0SU9NZXRob2Rz
KHZvaWQpOwojIDQ4MCAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3ByaW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX0NyZWF0ZUlPTGF5ZXJTdHViKAogICAgUFJE
ZXNjSWRlbnRpdHkgaWRlbnQsIGNvbnN0IFBSSU9NZXRob2RzICptZXRob2RzKTsKIyA0OTcgIi9H
TS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQ
UlN0YXR1cyBQUl9QdXNoSU9MYXllcigKICAgIFBSRmlsZURlc2MgKmZkX3N0YWNrLCBQUkRlc2NJ
ZGVudGl0eSBpZCwgUFJGaWxlRGVzYyAqbGF5ZXIpOwojIDUxNCAiL0dNL2hkZDkvbW96aWxsYS9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX1Bv
cElPTGF5ZXIoUFJGaWxlRGVzYyAqZmRfc3RhY2ssIFBSRGVzY0lkZW50aXR5IGlkKTsKIyA1ODgg
Ii9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVy
biBQUkZpbGVEZXNjKiBQUl9PcGVuKGNvbnN0IGNoYXIgKm5hbWUsIFBSSW50biBmbGFncywgUFJJ
bnRuIG1vZGUpOwojIDYxNCAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3ByaW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX09wZW5GaWxlKAogICAgY29uc3QgY2hh
ciAqbmFtZSwgUFJJbnRuIGZsYWdzLCBQUkludG4gbW9kZSk7CiMgNjM3ICIvR00vaGRkOS9tb3pp
bGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJf
Q2xvc2UoUFJGaWxlRGVzYyAqZmQpOwojIDY3MiAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSSW50MzIgUFJfUmVhZChQUkZpbGVEZXNj
ICpmZCwgdm9pZCAqYnVmLCBQUkludDMyIGFtb3VudCk7CiMgNjk2ICIvR00vaGRkOS9tb3ppbGxh
L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9Xcml0
ZShQUkZpbGVEZXNjICpmZCxjb25zdCB2b2lkICpidWYsUFJJbnQzMiBhbW91bnQpOwojIDczMCAi
L0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJu
IFBSSW50MzIgUFJfV3JpdGV2KAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSSU9WZWMgKmlv
diwgUFJJbnQzMiBpb3Zfc2l6ZSwKICAgIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDc1MSAi
L0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJu
IFBSU3RhdHVzIFBSX0RlbGV0ZShjb25zdCBjaGFyICpuYW1lKTsKCgoKdHlwZWRlZiBlbnVtIFBS
RmlsZVR5cGUKewogICAgUFJfRklMRV9GSUxFID0gMSwKICAgIFBSX0ZJTEVfRElSRUNUT1JZID0g
MiwKICAgIFBSX0ZJTEVfT1RIRVIgPSAzCn0gUFJGaWxlVHlwZTsKCnN0cnVjdCBQUkZpbGVJbmZv
IHsKICAgIFBSRmlsZVR5cGUgdHlwZTsKICAgIFBST2Zmc2V0MzIgc2l6ZTsKICAgIFBSVGltZSBj
cmVhdGlvblRpbWU7CiAgICBQUlRpbWUgbW9kaWZ5VGltZTsKfTsKCnN0cnVjdCBQUkZpbGVJbmZv
NjQgewogICAgUFJGaWxlVHlwZSB0eXBlOwogICAgUFJPZmZzZXQ2NCBzaXplOwogICAgUFJUaW1l
IGNyZWF0aW9uVGltZTsKICAgIFBSVGltZSBtb2RpZnlUaW1lOwp9OwojIDc5NCAiL0dNL2hkZDkv
bW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVz
IFBSX0dldEZpbGVJbmZvKGNvbnN0IGNoYXIgKmZuLCBQUkZpbGVJbmZvICppbmZvKTsKZXh0ZXJu
IFBSU3RhdHVzIFBSX0dldEZpbGVJbmZvNjQoY29uc3QgY2hhciAqZm4sIFBSRmlsZUluZm82NCAq
aW5mbyk7CiMgODE0ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfR2V0T3BlbkZpbGVJbmZvKFBSRmlsZURlc2MgKmZk
LCBQUkZpbGVJbmZvICppbmZvKTsKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldE9wZW5GaWxlSW5mbzY0
KFBSRmlsZURlc2MgKmZkLCBQUkZpbGVJbmZvNjQgKmluZm8pOwojIDgzMyAiL0dNL2hkZDkvbW96
aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBS
X1JlbmFtZShjb25zdCBjaGFyICpmcm9tLCBjb25zdCBjaGFyICp0byk7CiMgODU5ICIvR00vaGRk
OS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIGVudW0g
UFJBY2Nlc3NIb3cgewogICAgUFJfQUNDRVNTX0VYSVNUUyA9IDEsCiAgICBQUl9BQ0NFU1NfV1JJ
VEVfT0sgPSAyLAogICAgUFJfQUNDRVNTX1JFQURfT0sgPSAzCn0gUFJBY2Nlc3NIb3c7CgpleHRl
cm4gUFJTdGF0dXMgUFJfQWNjZXNzKGNvbnN0IGNoYXIgKm5hbWUsIFBSQWNjZXNzSG93IGhvdyk7
CiMgOTAwICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5o
IgpleHRlcm4gUFJPZmZzZXQzMiBQUl9TZWVrKFBSRmlsZURlc2MgKmZkLCBQUk9mZnNldDMyIG9m
ZnNldCwgUFJTZWVrV2hlbmNlIHdoZW5jZSk7CmV4dGVybiBQUk9mZnNldDY0IFBSX1NlZWs2NChQ
UkZpbGVEZXNjICpmZCwgUFJPZmZzZXQ2NCBvZmZzZXQsIFBSU2Vla1doZW5jZSB3aGVuY2UpOwoj
IDkyMyAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIK
ZXh0ZXJuIFBSSW50MzIgUFJfQXZhaWxhYmxlKFBSRmlsZURlc2MgKmZkKTsKZXh0ZXJuIFBSSW50
NjQgUFJfQXZhaWxhYmxlNjQoUFJGaWxlRGVzYyAqZmQpOwojIDk0MyAiL0dNL2hkZDkvbW96aWxs
YS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1N5
bmMoUFJGaWxlRGVzYyAqZmQpOwoKCgpzdHJ1Y3QgUFJEaXJFbnRyeSB7CiAgICBjb25zdCBjaGFy
ICpuYW1lOwp9OwojIDk3NSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3ByaW8uaCIKZXh0ZXJuIFBSRGlyKiBQUl9PcGVuRGlyKGNvbnN0IGNoYXIgKm5hbWUpOwoj
IDEwMDAgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi
CnR5cGVkZWYgZW51bSBQUkRpckZsYWdzIHsKICAgIFBSX1NLSVBfTk9ORSA9IDB4MCwKICAgIFBS
X1NLSVBfRE9UID0gMHgxLAogICAgUFJfU0tJUF9ET1RfRE9UID0gMHgyLAogICAgUFJfU0tJUF9C
T1RIID0gMHgzLAogICAgUFJfU0tJUF9ISURERU4gPSAweDQKfSBQUkRpckZsYWdzOwoKZXh0ZXJu
IFBSRGlyRW50cnkqIFBSX1JlYWREaXIoUFJEaXIgKmRpciwgUFJEaXJGbGFncyBmbGFncyk7CiMg
MTAyNyAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIK
ZXh0ZXJuIFBSU3RhdHVzIFBSX0Nsb3NlRGlyKFBSRGlyICpkaXIpOwojIDEwNDkgIi9HTS9oZGQ5
L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1
cyBQUl9Na0Rpcihjb25zdCBjaGFyICpuYW1lLCBQUkludG4gbW9kZSk7CiMgMTA2MSAiL0dNL2hk
ZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3Rh
dHVzIFBSX01ha2VEaXIoY29uc3QgY2hhciAqbmFtZSwgUFJJbnRuIG1vZGUpOwojIDEwODEgIi9H
TS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQ
UlN0YXR1cyBQUl9SbURpcihjb25zdCBjaGFyICpuYW1lKTsKIyAxMTAwICIvR00vaGRkOS9tb3pp
bGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJGaWxlRGVzYyog
UFJfTmV3VURQU29ja2V0KHZvaWQpOwojIDExMTkgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9OZXdUQ1BTb2Nr
ZXQodm9pZCk7CiMgMTEzOSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3ByaW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX09wZW5VRFBTb2NrZXQoUFJJbnRuIGFm
KTsKIyAxMTU5ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJp
by5oIgpleHRlcm4gUFJGaWxlRGVzYyogUFJfT3BlblRDUFNvY2tldChQUkludG4gYWYpOwojIDEx
ODMgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4
dGVybiBQUlN0YXR1cyBQUl9Db25uZWN0KAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSTmV0
QWRkciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTIxMiAiL0dNL2hkZDkvbW96
aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBS
X0dldENvbm5lY3RTdGF0dXMoY29uc3QgUFJQb2xsRGVzYyAqcGQpOwojIDEyMzYgIi9HTS9oZGQ5
L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkZpbGVE
ZXNjKiBQUl9BY2NlcHQoCiAgICBQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyLCBQUklu
dGVydmFsVGltZSB0aW1lb3V0KTsKIyAxMjU4ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfQmluZChQUkZpbGVEZXNj
ICpmZCwgY29uc3QgUFJOZXRBZGRyICphZGRyKTsKIyAxMjgwICIvR00vaGRkOS9tb3ppbGxhL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfTGlzdGVu
KFBSRmlsZURlc2MgKmZkLCBQUkludG4gYmFja2xvZyk7CiMgMTMwNCAiL0dNL2hkZDkvbW96aWxs
YS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSU2h1dGRv
d25Ib3cKewogICAgUFJfU0hVVERPV05fUkNWID0gMCwKICAgIFBSX1NIVVRET1dOX1NFTkQgPSAx
LAogICAgUFJfU0hVVERPV05fQk9USCA9IDIKfSBQUlNodXRkb3duSG93OwoKZXh0ZXJuIFBSU3Rh
dHVzIFBSX1NodXRkb3duKFBSRmlsZURlc2MgKmZkLCBQUlNodXRkb3duSG93IGhvdyk7CiMgMTM0
MiAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0
ZXJuIFBSSW50MzIgUFJfUmVjdihQUkZpbGVEZXNjICpmZCwgdm9pZCAqYnVmLCBQUkludDMyIGFt
b3VudCwKICAgICAgICAgICAgICAgIFBSSW50biBmbGFncywgUFJJbnRlcnZhbFRpbWUgdGltZW91
dCk7CiMgMTM3MyAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
aW8uaCIKZXh0ZXJuIFBSSW50MzIgUFJfU2VuZChQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9pZCAq
YnVmLCBQUkludDMyIGFtb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUklu
dG4gZmxhZ3MsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDE0MDggIi9HTS9oZGQ5L21vemls
bGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1Jl
Y3ZGcm9tKAogICAgUFJGaWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsIFBS
SW50biBmbGFncywKICAgIFBSTmV0QWRkciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7
CiMgMTQ0MSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8u
aCIKZXh0ZXJuIFBSSW50MzIgUFJfU2VuZFRvKAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IHZv
aWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsIFBSSW50biBmbGFncywKICAgIGNvbnN0IFBSTmV0QWRk
ciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTQ4MSAiL0dNL2hkZDkvbW96aWxs
YS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSSW50MzIgUFJfVHJh
bnNtaXRGaWxlKAogICAgUFJGaWxlRGVzYyAqbmV0d29ya1NvY2tldCwgUFJGaWxlRGVzYyAqc291
cmNlRmlsZSwKICAgIGNvbnN0IHZvaWQgKmhlYWRlcnMsIFBSSW50MzIgaGxlbiwgUFJUcmFuc21p
dEZpbGVGbGFncyBmbGFncywKICAgIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDE1MjAgIi9H
TS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnN0cnVjdCBQ
UlNlbmRGaWxlRGF0YSB7CiAgICAgICAgUFJGaWxlRGVzYyAqZmQ7CiAgICAgICAgUFJVaW50MzIg
ZmlsZV9vZmZzZXQ7CiAgICAgICAgUFJTaXplIGZpbGVfbmJ5dGVzOwoKCiAgICAgICAgY29uc3Qg
dm9pZCAqaGVhZGVyOwogICAgICAgIFBSSW50MzIgaGxlbjsKICAgICAgICBjb25zdCB2b2lkICp0
cmFpbGVyOwogICAgICAgIFBSSW50MzIgdGxlbjsKfTsKCgpleHRlcm4gUFJJbnQzMiBQUl9TZW5k
RmlsZSgKICAgIFBSRmlsZURlc2MgKm5ldHdvcmtTb2NrZXQsIFBSU2VuZEZpbGVEYXRhICpzZW5k
RGF0YSwKICAgICAgICBQUlRyYW5zbWl0RmlsZUZsYWdzIGZsYWdzLCBQUkludGVydmFsVGltZSB0
aW1lb3V0KTsKIyAxNTg3ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9BY2NlcHRSZWFkKAogICAgUFJGaWxlRGVzYyAq
bGlzdGVuU29jaywgUFJGaWxlRGVzYyAqKmFjY2VwdGVkU29jaywKICAgIFBSTmV0QWRkciAqKnBl
ZXJBZGRyLCB2b2lkICpidWYsIFBSSW50MzIgYW1vdW50LCBQUkludGVydmFsVGltZSB0aW1lb3V0
KTsKIyAxNjExICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJp
by5oIgpleHRlcm4gUFJTdGF0dXMgUFJfTmV3VENQU29ja2V0UGFpcihQUkZpbGVEZXNjICpmZHNb
Ml0pOwojIDE2MzEgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9HZXRTb2NrTmFtZShQUkZpbGVEZXNjICpmZCwgUFJO
ZXRBZGRyICphZGRyKTsKIyAxNjUzICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfR2V0UGVlck5hbWUoUFJGaWxlRGVz
YyAqZmQsIFBSTmV0QWRkciAqYWRkcik7CgpleHRlcm4gUFJTdGF0dXMgUFJfR2V0U29ja2V0T3B0
aW9uKAogICAgUFJGaWxlRGVzYyAqZmQsIFBSU29ja2V0T3B0aW9uRGF0YSAqZGF0YSk7CgpleHRl
cm4gUFJTdGF0dXMgUFJfU2V0U29ja2V0T3B0aW9uKAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0
IFBSU29ja2V0T3B0aW9uRGF0YSAqZGF0YSk7CiMgMTY4OCAiL0dNL2hkZDkvbW96aWxsYS9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1NldEZESW5o
ZXJpdGFibGUoCiAgICBQUkZpbGVEZXNjICpmZCwKICAgIFBSQm9vbCBpbmhlcml0YWJsZSk7CiMg
MTcwOCAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIK
ZXh0ZXJuIFBSRmlsZURlc2MgKiBQUl9HZXRJbmhlcml0ZWRGRChjb25zdCBjaGFyICpuYW1lKTsK
IyAxNzE4ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5o
Igp0eXBlZGVmIHN0cnVjdCBQUkZpbGVNYXAgUFJGaWxlTWFwOwoKCgoKdHlwZWRlZiBlbnVtIFBS
RmlsZU1hcFByb3RlY3QgewogICAgUFJfUFJPVF9SRUFET05MWSwKICAgIFBSX1BST1RfUkVBRFdS
SVRFLAogICAgUFJfUFJPVF9XUklURUNPUFkKfSBQUkZpbGVNYXBQcm90ZWN0OwoKZXh0ZXJuIFBS
RmlsZU1hcCAqIFBSX0NyZWF0ZUZpbGVNYXAoCiAgICBQUkZpbGVEZXNjICpmZCwKICAgIFBSSW50
NjQgc2l6ZSwKICAgIFBSRmlsZU1hcFByb3RlY3QgcHJvdCk7CgpleHRlcm4gdm9pZCAqIFBSX01l
bU1hcCgKICAgIFBSRmlsZU1hcCAqZm1hcCwKICAgIFBST2Zmc2V0NjQgb2Zmc2V0LAogICAgUFJV
aW50MzIgbGVuKTsKCmV4dGVybiBQUlN0YXR1cyBQUl9NZW1Vbm1hcCh2b2lkICphZGRyLCBQUlVp
bnQzMiBsZW4pOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX0Nsb3NlRmlsZU1hcChQUkZpbGVNYXAgKmZt
YXApOwojIDE3NTYgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9DcmVhdGVQaXBlKAogICAgUFJGaWxlRGVzYyAqKnJl
YWRQaXBlLAogICAgUFJGaWxlRGVzYyAqKndyaXRlUGlwZQopOwoKCgoKCnN0cnVjdCBQUlBvbGxE
ZXNjIHsKICAgIFBSRmlsZURlc2MqIGZkOwogICAgUFJJbnQxNiBpbl9mbGFnczsKICAgIFBSSW50
MTYgb3V0X2ZsYWdzOwp9OwojIDE4MzIgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1BvbGwoCiAgICBQUlBvbGxEZXNj
ICpwZHMsIFBSSW50biBucGRzLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKIyAxODc2ICIvR00v
aGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJG
aWxlRGVzYyAqIFBSX05ld1BvbGxhYmxlRXZlbnQodm9pZCk7CgpleHRlcm4gUFJTdGF0dXMgUFJf
RGVzdHJveVBvbGxhYmxlRXZlbnQoUFJGaWxlRGVzYyAqZXZlbnQpOwoKZXh0ZXJuIFBSU3RhdHVz
IFBSX1NldFBvbGxhYmxlRXZlbnQoUFJGaWxlRGVzYyAqZXZlbnQpOwoKZXh0ZXJuIFBSU3RhdHVz
IFBSX1dhaXRGb3JQb2xsYWJsZUV2ZW50KFBSRmlsZURlc2MgKmV2ZW50KTsKCn0KIyAxOCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsRmlsZS5oIiAyCiMgMSAiL0dNL2hkZDkvbW96
aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5oIiAxCiMgMjUgIi9HTS9oZGQ5
L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIKIyAxICIvR00vaGRk
OS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMjYgIi9H
TS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIgMgoKZXh0
ZXJuICJDIiB7Cgp0eXBlZGVmIHN0cnVjdCBQUkxpYnJhcnkgUFJMaWJyYXJ5OwoKdHlwZWRlZiBz
dHJ1Y3QgUFJTdGF0aWNMaW5rVGFibGUgewogICAgY29uc3QgY2hhciAqbmFtZTsKICAgIHZvaWQg
KCpmcCkoKTsKfSBQUlN0YXRpY0xpbmtUYWJsZTsKIyA0MyAiL0dNL2hkZDkvbW96aWxsYS9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5oIgpleHRlcm4gUFJTdGF0dXMgUFJfU2V0TGli
cmFyeVBhdGgoY29uc3QgY2hhciAqcGF0aCk7CiMgNTMgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIKZXh0ZXJuIGNoYXIqIFBSX0dldExpYnJhcnlQ
YXRoKHZvaWQpOwojIDY2ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcHJsaW5rLmgiCmV4dGVybiBjaGFyKiBQUl9HZXRMaWJyYXJ5TmFtZShjb25zdCBjaGFyICpk
aXIsIGNvbnN0IGNoYXIgKmxpYik7CgoKCgoKZXh0ZXJuIHZvaWQgUFJfRnJlZUxpYnJhcnlOYW1l
KGNoYXIgKm1lbSk7CiMgODYgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wcmxpbmsuaCIKZXh0ZXJuIFBSTGlicmFyeSogUFJfTG9hZExpYnJhcnkoY29uc3QgY2hh
ciAqbmFtZSk7CiMgMTA3ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcHJsaW5rLmgiCnR5cGVkZWYgZW51bSBQUkxpYlNwZWNUeXBlIHsKICAgIFBSX0xpYlNwZWNf
UGF0aG5hbWUsCiAgICBQUl9MaWJTcGVjX01hY05hbWVkRnJhZ21lbnQsCiAgICBQUl9MaWJTcGVj
X01hY0luZGV4ZWRGcmFnbWVudAp9IFBSTGliU3BlY1R5cGU7CgpzdHJ1Y3QgRlNTcGVjOwoKdHlw
ZWRlZiBzdHJ1Y3QgUFJMaWJTcGVjIHsKICAgIFBSTGliU3BlY1R5cGUgdHlwZTsKICAgIHVuaW9u
IHsKCiAgICAgICAgY29uc3QgY2hhciAqcGF0aG5hbWU7CgoKICAgICAgICBzdHJ1Y3QgewogICAg
ICAgICAgICBjb25zdCBzdHJ1Y3QgRlNTcGVjICpmc3NwZWM7CiAgICAgICAgICAgIGNvbnN0IGNo
YXIgKm5hbWU7CiAgICAgICAgfSBtYWNfbmFtZWRfZnJhZ21lbnQ7CgoKICAgICAgICBzdHJ1Y3Qg
ewogICAgICAgICAgICBjb25zdCBzdHJ1Y3QgRlNTcGVjICpmc3NwZWM7CiAgICAgICAgICAgIFBS
VWludDMyIGluZGV4OwogICAgICAgIH0gbWFjX2luZGV4ZWRfZnJhZ21lbnQ7CiAgICB9IHZhbHVl
Owp9IFBSTGliU3BlYzsKIyAxNTAgIi9HTS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wcmxpbmsuaCIKZXh0ZXJuIFBSTGlicmFyeSAqClBSX0xvYWRMaWJyYXJ5V2l0aEZs
YWdzKAogICAgUFJMaWJTcGVjIGxpYlNwZWMsCiAgICBQUkludG4gZmxhZ3MKKTsKIyAxNjUgIi9H
TS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIKZXh0ZXJu
IFBSU3RhdHVzIFBSX1VubG9hZExpYnJhcnkoUFJMaWJyYXJ5ICpsaWIpOwojIDE3NSAiL0dNL2hk
ZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5oIgpleHRlcm4gdm9p
ZCogUFJfRmluZFN5bWJvbChQUkxpYnJhcnkgKmxpYiwgY29uc3QgY2hhciAqbmFtZSk7CiMgMTg3
ICIvR00vaGRkOS9tb3ppbGxhL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCmV4
dGVybiB2b2lkKiBQUl9GaW5kU3ltYm9sQW5kTGlicmFyeShjb25zdCBjaGFyICpuYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkxpYnJh
cnkqICpsaWIpOwojIDIwMSAiL0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3BybGluay5oIgpleHRlcm4gUFJMaWJyYXJ5KiBQUl9Mb2FkU3RhdGljTGlicmFyeSgKICAg
IGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IFBSU3RhdGljTGlua1RhYmxlICp0YWJsZSk7Cgp9CiMg
MTkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZpbGUuaCIgMgojIDEgIi9uZXds
aWIvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAyMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUxvY2FsRmlsZS5oIiAyCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZp
bGUuaCIKY2xhc3MgbnNJTG9jYWxGaWxlIDogcHVibGljIG5zSUZpbGUgewogcHVibGljOgoKICBz
dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4
YWE2MTBmMjAsIDB4YTg4OSwgMHgxMWQzLCB7IDB4OGMsIDB4ODEsIDB4MDAsIDB4MDAsIDB4NjQs
IDB4NjUsIDB4NzMsIDB4NzQgfX07IHJldHVybiBpaWQ7fQojIDUxICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJTG9jYWxGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0V2l0aFBhdGgo
Y29uc3QgY2hhciAqZmlsZVBhdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdFdpdGhV
bmljb2RlUGF0aChjb25zdCBQUlVuaWNoYXIgKmZpbGVQYXRoKSA9IDA7CiMgNzIgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZv
bGxvd0xpbmtzKFBSQm9vbCAqYUZvbGxvd0xpbmtzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXRGb2xsb3dMaW5rcyhQUkJvb2wgYUZvbGxvd0xpbmtzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IE9wZW5OU1BSRmlsZURlc2MoUFJJbnQzMiBmbGFncywgUFJJbnQzMiBtb2RlLCBQUkZpbGVE
ZXNjICogKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3BlbkFOU0lGaWxlRGVz
Yyhjb25zdCBjaGFyICptb2RlLCBGSUxFICogKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgTG9hZChQUkxpYnJhcnkgKiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXREaXNrU3BhY2VBdmFpbGFibGUoUFJJbnQ2NCAqYURpc2tTcGFjZUF2YWlsYWJsZSkgPSAw
OwojIDk3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJTG9jYWxGaWxlLmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBBcHBlbmRSZWxhdGl2ZVBhdGgoY29uc3QgY2hhciAqcmVsYXRpdmVGaWxlUGF0
aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmRSZWxhdGl2ZVVuaWNvZGVQYXRoKGNv
bnN0IFBSVW5pY2hhciAqcmVsYXRpdmVGaWxlUGF0aCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0UGVyc2lzdGVudERlc2NyaXB0b3IoY2hhciAqICphUGVyc2lzdGVudERlc2NyaXB0
b3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBlcnNpc3RlbnREZXNjcmlwdG9yKGNvbnN0
IGNoYXIgKiBhUGVyc2lzdGVudERlc2NyaXB0b3IpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBSZXZlYWwodm9pZCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IExhdW5jaCh2
b2lkKSA9IDA7Cgp9OwojIDI3NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsRmls
ZS5oIgpleHRlcm4gIkMiIG5zcmVzdWx0Ck5TX05ld0xvY2FsRmlsZShjb25zdCBjaGFyKiBwYXRo
LCBQUkJvb2wgZm9sbG93TGlua3MsIG5zSUxvY2FsRmlsZSogKnJlc3VsdCk7CmV4dGVybiAiQyIg
bnNyZXN1bHQKTlNfTmV3VW5pY29kZUxvY2FsRmlsZShjb25zdCBQUlVuaWNoYXIqIHBhdGgsIFBS
Qm9vbCBmb2xsb3dMaW5rcywgbnNJTG9jYWxGaWxlKiAqcmVzdWx0KTsKIyAxNjEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNDT01QdHIuaCIgMQojIDE2MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRmls
ZVNwZWMuaCIgMgojIDE3NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIK
IyAxICIvbmV3bGliL2luY2x1ZGUvZGlyZW50LmgiIDEgMwojIDI2ICIvbmV3bGliL2luY2x1ZGUv
ZGlyZW50LmgiIDMKIyAxICIvbmV3bGliL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi9u
ZXdsaWIvaW5jbHVkZS9kaXJlbnQuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL25ld2xpYi9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMzEgIi9uZXdsaWIvaW5jbHVkZS9kaXJlbnQuaCIg
MiAzCiMgNjIgIi9uZXdsaWIvaW5jbHVkZS9kaXJlbnQuaCIgMwojIDEgIi9uZXdsaWIvaW5jbHVk
ZS9iaXRzL2RpcmVudC5oIiAxIDMKIyAyMyAiL25ld2xpYi9pbmNsdWRlL2JpdHMvZGlyZW50Lmgi
IDMKc3RydWN0IGRpcmVudAogIHsKCiAgICBfX2lub190IGRfaW5vOwogICAgX19vZmZfdCBkX29m
ZjsKCgoKCiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgZF9yZWNsZW47CiAgICB1bnNpZ25lZCBjaGFy
IGRfdHlwZTsKICAgIGNoYXIgZF9uYW1lWzI1Nl07CiAgfTsKCgpzdHJ1Y3QgZGlyZW50NjQKICB7
CiAgICBfX2lubzY0X3QgZF9pbm87CiAgICBfX29mZjY0X3QgZF9vZmY7CiAgICB1bnNpZ25lZCBz
aG9ydCBpbnQgZF9yZWNsZW47CiAgICB1bnNpZ25lZCBjaGFyIGRfdHlwZTsKICAgIGNoYXIgZF9u
YW1lWzI1Nl07CiAgfTsKIyA2MyAiL25ld2xpYi9pbmNsdWRlL2RpcmVudC5oIiAyIDMKIyA5OCAi
L25ld2xpYi9pbmNsdWRlL2RpcmVudC5oIiAzCmVudW0KICB7CiAgICBEVF9VTktOT1dOID0gMCwK
CiAgICBEVF9GSUZPID0gMSwKCiAgICBEVF9DSFIgPSAyLAoKICAgIERUX0RJUiA9IDQsCgogICAg
RFRfQkxLID0gNiwKCiAgICBEVF9SRUcgPSA4LAoKICAgIERUX0xOSyA9IDEwLAoKICAgIERUX1NP
Q0sgPSAxMiwKCiAgICBEVF9XSFQgPSAxNAoKICB9OwojIDEyOCAiL25ld2xpYi9pbmNsdWRlL2Rp
cmVudC5oIiAzCnR5cGVkZWYgc3RydWN0IF9fZGlyc3RyZWFtIERJUjsKCgoKZXh0ZXJuIERJUiAq
b3BlbmRpciAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNs
b3NlZGlyIChESVIgKl9fZGlycCkgdGhyb3cgKCk7CiMgMTQ2ICIvbmV3bGliL2luY2x1ZGUvZGly
ZW50LmgiIDMKZXh0ZXJuIHN0cnVjdCBkaXJlbnQgKnJlYWRkaXIgKERJUiAqX19kaXJwKSB0aHJv
dyAoKTsKIyAxNTYgIi9uZXdsaWIvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gc3RydWN0IGRp
cmVudDY0ICpyZWFkZGlyNjQgKERJUiAqX19kaXJwKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGlu
dCByZWFkZGlyX3IgKERJUiAqX19yZXN0cmljdCBfX2RpcnAsCiAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgZGlyZW50ICpfX3Jlc3RyaWN0IF9fZW50cnksCiAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgZGlyZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CiMgMTc5ICIv
bmV3bGliL2luY2x1ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIGludCByZWFkZGlyNjRfciAoRElSICpf
X3Jlc3RyaWN0IF9fZGlycCwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudDY0
ICpfX3Jlc3RyaWN0IF9fZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJl
bnQ2NCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcmV3
aW5kZGlyIChESVIgKl9fZGlycCkgdGhyb3cgKCk7CgoKIyAxICIvbmV3bGliL2luY2x1ZGUvYml0
cy90eXBlcy5oIiAxIDMKIyAxOTAgIi9uZXdsaWIvaW5jbHVkZS9kaXJlbnQuaCIgMiAzCgoKZXh0
ZXJuIHZvaWQgc2Vla2RpciAoRElSICpfX2RpcnAsIGxvbmcgaW50IF9fcG9zKSB0aHJvdyAoKTsK
CgpleHRlcm4gbG9uZyBpbnQgdGVsbGRpciAoRElSICpfX2RpcnApIHRocm93ICgpOwoKCgoKCmV4
dGVybiBpbnQgZGlyZmQgKERJUiAqX19kaXJwKSB0aHJvdyAoKTsKCgoKCgoKCiMgMSAiL25ld2xp
Yi9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAyMTAgIi9uZXdsaWIvaW5jbHVkZS9k
aXJlbnQuaCIgMiAzCiMgMjIwICIvbmV3bGliL2luY2x1ZGUvZGlyZW50LmgiIDMKIyAxICIvb3B0
L2dudS1uZXcvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVm
LmgiIDEgMwojIDIyMSAiL25ld2xpYi9pbmNsdWRlL2RpcmVudC5oIiAyIDMKCgoKCgoKZXh0ZXJu
IGludCBzY2FuZGlyIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kaXIsCiAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IGRpcmVudCAqKipfX3Jlc3RyaWN0IF9fbmFtZWxpc3QsCiAgICAgICAg
ICAgICAgICAgICAgaW50ICgqX19zZWxlY3RvcikgKF9fY29uc3Qgc3RydWN0IGRpcmVudCAqKSwK
ICAgICAgICAgICAgICAgICAgICBpbnQgKCpfX2NtcCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0
IHZvaWQgKikpIHRocm93ICgpOwojIDI0NyAiL25ld2xpYi9pbmNsdWRlL2RpcmVudC5oIiAzCmV4
dGVybiBpbnQgc2NhbmRpcjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kaXIsCiAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50NjQgKioqX19yZXN0cmljdCBfX25hbWVsaXN0
LAogICAgICAgICAgICAgICAgICAgICAgaW50ICgqX19zZWxlY3RvcikgKF9fY29uc3Qgc3RydWN0
IGRpcmVudDY0ICopLAogICAgICAgICAgICAgICAgICAgICAgaW50ICgqX19jbXApIChfX2NvbnN0
IHZvaWQgKiwgX19jb25zdCB2b2lkICopKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgYWxwaGFz
b3J0IChfX2NvbnN0IHZvaWQgKl9fZTEsIF9fY29uc3Qgdm9pZCAqX19lMikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyAyNjkgIi9uZXdsaWIvaW5jbHVkZS9kaXJl
bnQuaCIgMwpleHRlcm4gaW50IGFscGhhc29ydDY0IChfX2NvbnN0IHZvaWQgKl9fZTEsIF9fY29u
c3Qgdm9pZCAqX19lMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgoKCgpleHRlcm4gaW50IHZlcnNpb25zb3J0IChfX2NvbnN0IHZvaWQgKl9fZTEsIF9fY29uc3Qg
dm9pZCAqX19lMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyAy
OTAgIi9uZXdsaWIvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gaW50IHZlcnNpb25zb3J0NjQg
KF9fY29uc3Qgdm9pZCAqX19lMSwgX19jb25zdCB2b2lkICpfX2UyKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwojIDMwMCAiL25ld2xpYi9pbmNsdWRlL2RpcmVudC5o
IiAzCmV4dGVybiBfX3NzaXplX3QgZ2V0ZGlyZW50cmllcyAoaW50IF9fZmQsIGNoYXIgKl9fcmVz
dHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmJ5
dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmX3QgKl9fcmVzdHJpY3Qg
X19iYXNlcCkgdGhyb3cgKCk7CiMgMzE2ICIvbmV3bGliL2luY2x1ZGUvZGlyZW50LmgiIDMKZXh0
ZXJuIF9fc3NpemVfdCBnZXRkaXJlbnRyaWVzNjQgKGludCBfX2ZkLCBjaGFyICpfX3Jlc3RyaWN0
IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmJ5dGVz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vZmY2NF90ICpfX3Jlc3RyaWN0
IF9fYmFzZXApIHRocm93ICgpOwoKCgoKfQojIDE3NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zRmlsZVNwZWMuaCIgMgojIDE5NSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNw
ZWMuaCIKY2xhc3MgbnNGaWxlU3BlYzsKY2xhc3MgbnNGaWxlUGF0aDsKY2xhc3MgbnNGaWxlVVJM
OwpjbGFzcyBuc05TUFJQYXRoOwpjbGFzcyBuc1BlcnNpc3RlbnRGaWxlRGVzY3JpcHRvcjsKCgoK
CmNsYXNzIG5zT3V0cHV0U3RyZWFtOwpjbGFzcyBuc0lucHV0U3RyZWFtOwpjbGFzcyBuc0lPdXRw
dXRTdHJlYW07CmNsYXNzIG5zSUlucHV0U3RyZWFtOwpjbGFzcyBuc091dHB1dEZpbGVTdHJlYW07
CmNsYXNzIG5zSW5wdXRGaWxlU3RyZWFtOwpjbGFzcyBuc091dHB1dENvbnNvbGVTdHJlYW07Cgpj
bGFzcyBuc1N0cmluZzsKCmNsYXNzIG5zSVVuaWNvZGVFbmNvZGVyOwpjbGFzcyBuc0lVbmljb2Rl
RGVjb2RlcjsKIyAyMjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCm5z
cmVzdWx0IG5zX2ZpbGVfY29udmVydF9yZXN1bHQoUFJJbnQzMiBuYXRpdmVFcnIpOwoKCgpjbGFz
cyBuc0F1dG9DU3RyaW5nCiMgMjQ1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3Bl
Yy5oIgp7CnB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBdXRvQ1N0
cmluZyhjb25zdCBuc1N0cmluZyYgb3RoZXIpIDogbUNTdHJpbmcob3RoZXIuVG9OZXdDU3RyaW5n
KCkpIHt9CiAgICB2aXJ0dWFsIH5uc0F1dG9DU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29uc3QgeyByZXR1cm4gbUNTdHJp
bmc7IH0KCgoKCnByb3RlY3RlZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogbUNTdHJpbmc7Cn07CgoKY2xhc3MgbnNTaW1wbGVDaGFyU3RyaW5nCgoKCnsKcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NpbXBsZUNoYXJTdHJpbmco
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTaW1wbGVDaGFyU3RyaW5nKGNv
bnN0IGNoYXIqKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTaW1wbGVDaGFy
U3RyaW5nKGNvbnN0IG5zU3RyaW5nJik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zU2ltcGxlQ2hhclN0cmluZyhjb25zdCBuc1NpbXBsZUNoYXJTdHJpbmcmKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNTaW1wbGVDaGFyU3RyaW5nKGNvbnN0IGNoYXIqIGlu
RGF0YSwgUFJVaW50MzIgaW5MZW5ndGgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfm5zU2ltcGxlQ2hhclN0cmluZygpOwoKICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgY2hh
ciopOwogICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc1N0cmluZyYpOwogICAgdm9pZCBvcGVy
YXRvciA9IChjb25zdCBuc1NpbXBsZUNoYXJTdHJpbmcmKTsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29uc3QgeyByZXR1cm4gbURhdGEg
PyBtRGF0YS0+bVN0cmluZyA6IDA7IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3BlcmF0b3IgY2hhciogKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhbGxvY0RhdGEoTGVuZ3RoKCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1EYXRhID8gbURhdGEt
Pm1TdHJpbmcgOiAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICBQUkJv
b2wgb3BlcmF0b3IgPT0gKGNvbnN0IGNoYXIqKTsKICAgIFBSQm9vbCBvcGVyYXRvciA9PSAoY29u
c3QgbnNTdHJpbmcmKTsKICAgIFBSQm9vbCBvcGVyYXRvciA9PSAoY29uc3QgbnNTaW1wbGVDaGFy
U3RyaW5nJik7CgogICAgdm9pZCBvcGVyYXRvciArPSAoY29uc3QgY2hhciogaW5TdHJpbmcpOwog
ICAgbnNTaW1wbGVDaGFyU3RyaW5nIG9wZXJhdG9yICsgKGNvbnN0IGNoYXIqIGluU3RyaW5nKSBj
b25zdDsKCiAgICBjaGFyIG9wZXJhdG9yIFtdKGludCBpKSBjb25zdCB7IHJldHVybiBtRGF0YSA/
IG1EYXRhLT5tU3RyaW5nW2ldIDogJ1wwJzsgfQogICAgY2hhciYgb3BlcmF0b3IgW10oaW50IGkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpID49IChpbnQpTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUmVhbGxvY0RhdGEoKFBSVWludDMyKWkgKyAxKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtRGF0YS0+bVN0cmluZ1tp
XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgY2hhciYgb3BlcmF0b3Ig
W10odW5zaWduZWQgaW50IGkpIHsgcmV0dXJuICgqdGhpcylbKGludClpXTsgfQoKICAgIHZvaWQg
Q2F0ZW5hdGUoY29uc3QgY2hhciogaW5TdHJpbmcxLCBjb25zdCBjaGFyKiBpblN0cmluZzIpOwoK
ICAgIHZvaWQgU2V0VG9FbXB0eSgpOwogICAgUFJCb29sIElzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBMZW5ndGgoKSA9PSAwOyB9CgogICAgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bURhdGEgPyBtRGF0YS0+bUxlbmd0aCA6IDA7IH0KICAgIHZvaWQgU2V0TGVuZ3RoKFBSVWludDMy
IGluTGVuZ3RoKSB7IFJlYWxsb2NEYXRhKGluTGVuZ3RoKTsgfQogICAgdm9pZCBDb3B5RnJvbShj
b25zdCBjaGFyKiBpbkRhdGEsIFBSVWludDMyIGluTGVuZ3RoKTsKICAgIHZvaWQgTGVhZlJlcGxh
Y2UoY2hhciBpblNlcGFyYXRvciwgY29uc3QgY2hhciogaW5MZWFmTmFtZSk7CiAgICBjaGFyKiBH
ZXRMZWFmKGNoYXIgaW5TZXBhcmF0b3IpIGNvbnN0OwogICAgdm9pZCBVbmVzY2FwZSgpOwoKcHJv
dGVjdGVkOgoKICAgIHZvaWQgQWRkUmVmRGF0YSgpOwogICAgdm9pZCBSZWxlYXNlRGF0YSgpOwog
ICAgdm9pZCBSZWFsbG9jRGF0YShQUlVpbnQzMiBpbkxlbmd0aCk7CgoKCgoKcHJvdGVjdGVkOgoK
ICAgIHN0cnVjdCBEYXRhIHsKICAgICAgICBpbnQgbVJlZkNvdW50OwogICAgICAgIFBSVWludDMy
IG1MZW5ndGg7CiAgICAgICAgY2hhciBtU3RyaW5nWzFdOwogICAgICAgIH07CiAgICBEYXRhKiBt
RGF0YTsKfTsKCgpjbGFzcyBuc0ZpbGVTcGVjCgoKCnsKICAgIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0ZpbGVTcGVjKCk7CgoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0ZpbGVTcGVjKGNvbnN0IGNoYXIqIGluTmF0aXZlUGF0aCwgUFJCb29sIGlu
Q3JlYXRlRGlycyA9IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVNw
ZWMoY29uc3QgbnNTdHJpbmcmIGluTmF0aXZlUGF0aCwgUFJCb29sIGluQ3JlYXRlRGlycyA9IDAp
OwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlU3BlYyhjb25zdCBuc0Zp
bGVQYXRoJiBpblBhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVNw
ZWMoY29uc3QgbnNGaWxlVVJMJiBpblVSTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNGaWxlU3BlYyhjb25zdCBuc1BlcnNpc3RlbnRGaWxlRGVzY3JpcHRvciYgaW5VUkwpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVNwZWMoY29uc3QgbnNGaWxlU3Bl
YyYgaW5QYXRoKTsKICAgICAgICB2aXJ0dWFsIH5uc0ZpbGVTcGVjKCk7CgoKICAgICAgICB2b2lk
IG9wZXJhdG9yID0gKGNvbnN0IGNoYXIqIGluTmF0aXZlUGF0aCk7CiAgICAgICAgdm9pZCBvcGVy
YXRvciA9IChjb25zdCBuc1N0cmluZyYgaW5OYXRpdmVQYXRoKTsKCiAgICAgICAgdm9pZCBvcGVy
YXRvciA9IChjb25zdCBuc0ZpbGVQYXRoJiBpblBhdGgpOwogICAgICAgIHZvaWQgb3BlcmF0b3Ig
PSAoY29uc3QgbnNGaWxlVVJMJiBpblVSTCk7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25z
dCBuc0ZpbGVTcGVjJiBpbk90aGVyKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5z
UGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yJiBpbk90aGVyKTsKCiAgICAgICAgUFJCb29sIG9wZXJh
dG9yID09KGNvbnN0IG5zRmlsZVNwZWMmIGluT3RoZXIpIGNvbnN0OwogICAgICAgIFBSQm9vbCBv
cGVyYXRvciAhPShjb25zdCBuc0ZpbGVTcGVjJiBpbk90aGVyKSBjb25zdDsKIyAzNzIgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCiAgICAgICBjb25zdCBjaGFyKiBHZXRD
U3RyaW5nKCkgY29uc3Q7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0
b3IgY29uc3QgY2hhciogKCkgY29uc3QgeyByZXR1cm4gR2V0Q1N0cmluZygpOyB9CgoKCiAgICAg
ICBjb25zdCBjaGFyKiBHZXROYXRpdmVQYXRoQ1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIEdldENT
dHJpbmcoKTsgfQoKCgogICAgICAgdm9pZCBHZXROYXRpdmVQYXRoU3RyaW5nKG5zU3RyaW5nICZu
YXRpdmVQYXRoU3RyaW5nKTsKCiAgICAgICBQUkJvb2wgSXNDaGlsZE9mKG5zRmlsZVNwZWMgJnBv
c3NpYmxlUGFyZW50KTsKIyA0MjEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVj
LmgiCiAgICAgICAgUFJCb29sIFZhbGlkKCkgY29uc3QgeyByZXR1cm4gKCEoKEVycm9yKCkpICYg
MHg4MDAwMDAwMCkpOyB9CiAgICAgICAgbnNyZXN1bHQgRXJyb3IoKSBjb25zdAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtUGF0aC5Jc0VtcHR5KCkgJiYgKCEoKG1FcnJvcikgJiAweDgwMDAwMDAwKSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG5zRmlsZVNwZWMqKXRoaXMp
LT5tRXJyb3IgPSAoKChuc3Jlc3VsdCkgMHhDMUYzMDAwMCkgKyAxKTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtRXJyb3I7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgIFBSQm9vbCBGYWlsZWQoKSBjb25zdCB7IHJldHVybiAoUFJC
b29sKSgoRXJyb3IoKSkgJiAweDgwMDAwMDAwKTsgfQoKCgoKCiAgICAgICAgY2hhciogR2V0TGVh
Zk5hbWUoKSBjb25zdDsKCgogICAgICAgIHZvaWQgR2V0TGVhZk5hbWUobnNTdHJpbmcgJm5hdGl2
ZVBhdGhTdHJpbmcpOwojIDQ1MCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMu
aCIKICAgICAgICB2b2lkIFNldExlYWZOYW1lKGNvbnN0IGNoYXIqIGluTGVhZk5hbWUpOwogICAg
ICAgIHZvaWQgU2V0TGVhZk5hbWUoY29uc3QgbnNTdHJpbmcmIGluTGVhZk5hbWUpOwoKCgoKCgoK
ICAgICAgICB2b2lkIEdldFBhcmVudChuc0ZpbGVTcGVjJiBvdXRTcGVjKSBjb25zdDsKIyA0Njgg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCiAgICAgICAgdHlwZWRlZiBQ
UlVpbnQzMiBUaW1lU3RhbXA7CgoKCgoKICAgICAgICB2b2lkIEdldE1vZERhdGUoVGltZVN0YW1w
JiBvdXRTdGFtcCkgY29uc3Q7CgogICAgICAgIFBSQm9vbCBNb2REYXRlQ2hhbmdlZChjb25zdCBU
aW1lU3RhbXAmIG9sZFN0YW1wKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZVN0YW1wIG5ld1N0YW1w
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRNb2REYXRlKG5ld1N0YW1w
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1N0YW1wICE9
IG9sZFN0YW1wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgUFJV
aW50MzIgR2V0RmlsZVNpemUoKSBjb25zdDsKICAgICAgICBQUkludDY0IEdldERpc2tTcGFjZUF2
YWlsYWJsZSgpIGNvbnN0OwoKICAgICAgICBuc0ZpbGVTcGVjIG9wZXJhdG9yICsgKGNvbnN0IGNo
YXIqIGluUmVsYXRpdmVVbml4UGF0aCkgY29uc3Q7CiAgICAgICAgbnNGaWxlU3BlYyBvcGVyYXRv
ciArIChjb25zdCBuc1N0cmluZyYgaW5SZWxhdGl2ZVVuaXhQYXRoKSBjb25zdDsKIyA0OTcgIi4u
Ly4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCiAgICAgICAgdm9pZCBvcGVyYXRv
ciArPSAoY29uc3QgY2hhciogaW5SZWxhdGl2ZVVuaXhQYXRoKTsKCiAgICAgICAgdm9pZCBvcGVy
YXRvciArPSAoY29uc3QgbnNTdHJpbmcmIGluUmVsYXRpdmVVbml4UGF0aCk7CgogICAgICAgIHZv
aWQgTWFrZVVuaXF1ZSgpOwogICAgICAgIHZvaWQgTWFrZVVuaXF1ZShjb25zdCBjaGFyKiBpblN1
Z2dlc3RlZExlYWZOYW1lKTsKICAgICAgICB2b2lkIE1ha2VVbmlxdWUoY29uc3QgbnNTdHJpbmcm
IGluU3VnZ2VzdGVkTGVhZk5hbWUpOwoKCiAgICAgICAgUFJCb29sIElzRGlyZWN0b3J5KCkgY29u
c3Q7CiAgICAgICAgUFJCb29sIElzRmlsZSgpIGNvbnN0OwogICAgICAgIFBSQm9vbCBFeGlzdHMo
KSBjb25zdDsKCiAgICAgICAgUFJCb29sIElzSGlkZGVuKCkgY29uc3Q7CgogICAgICAgIFBSQm9v
bCBJc1N5bWxpbmsoKSBjb25zdDsKCgoKCgoKCiAgICAgICAgbnNyZXN1bHQgUmVzb2x2ZVN5bWxp
bmsoUFJCb29sJiB3YXNTeW1saW5rKTsKCiAgICAgICAgdm9pZCBDcmVhdGVEaXJlY3RvcnkoaW50
IG1vZGUgPSAwNzc1ICk7CiAgICAgICAgdm9pZCBDcmVhdGVEaXIoaW50IG1vZGUgPSAwNzc1KSB7
IENyZWF0ZURpcmVjdG9yeShtb2RlKTsgfQoKICAgICAgICB2b2lkIERlbGV0ZShQUkJvb2wgaW5S
ZWN1cnNpdmUpIGNvbnN0OwogICAgICAgIG5zcmVzdWx0IFRydW5jYXRlKFBSSW50MzIgYU5ld0xl
bmd0aCkgY29uc3Q7CiAgICAgICAgdm9pZCBSZWN1cnNpdmVDb3B5KG5zRmlsZVNwZWMgbmV3RGly
KSBjb25zdDsKCiAgICAgICAgbnNyZXN1bHQgUmVuYW1lKGNvbnN0IGNoYXIqIGluTmV3TmFtZSk7
CiAgICAgICAgbnNyZXN1bHQgUmVuYW1lKGNvbnN0IG5zU3RyaW5nJiBpbk5ld05hbWUpOwogICAg
ICAgIG5zcmVzdWx0IENvcHlUb0Rpcihjb25zdCBuc0ZpbGVTcGVjJiBpbk5ld1BhcmVudERpcmVj
dG9yeSkgY29uc3Q7CiAgICAgICAgbnNyZXN1bHQgTW92ZVRvRGlyKGNvbnN0IG5zRmlsZVNwZWMm
IGluTmV3UGFyZW50RGlyZWN0b3J5KTsKICAgICAgICBuc3Jlc3VsdCBFeGVjdXRlKGNvbnN0IGNo
YXIqIGFyZ3MpIGNvbnN0OwogICAgICAgIG5zcmVzdWx0IEV4ZWN1dGUoY29uc3QgbnNTdHJpbmcm
IGFyZ3MpIGNvbnN0OwoKCgoKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgIFBSVW5pY2hhciogQ29u
dmVydEZyb21GaWxlU3lzdGVtQ2hhcnNldChjb25zdCBjaGFyICppblN0cmluZyk7CiAgICAgICBz
dGF0aWMgdm9pZCBHZXRGaWxlU3lzdGVtQ2hhcnNldChuc1N0cmluZyAmIGZpbGVTeXN0ZW1DaGFy
c2V0KTsKCgoKCgogICAgcHJvdGVjdGVkOgoKCgogICAgICAgdm9pZCBDbGVhcigpOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgbnNGaWxlUGF0aDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgbnNGaWxlVVJMOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBuc0RpcmVjdG9yeUl0ZXJhdG9y
OwoKCgogICAgICAgIG5zU2ltcGxlQ2hhclN0cmluZyBtUGF0aDsKICAgICAgICBuc3Jlc3VsdCBt
RXJyb3I7Cgp9OwoKCgp0eXBlZGVmIG5zRmlsZVNwZWMgbnNOYXRpdmVGaWxlU3BlYzsKCgpjbGFz
cyBuc0ZpbGVVUkwKCgoKCnsKICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0ZpbGVVUkwoY29uc3QgbnNGaWxlVVJMJiBpblVSTCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNGaWxlVVJMKGNvbnN0IGNoYXIqIGluVVJMU3RyaW5nLCBQUkJvb2wg
aW5DcmVhdGVEaXJzID0gMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxl
VVJMKGNvbnN0IG5zU3RyaW5nJiBpblVSTFN0cmluZywgUFJCb29sIGluQ3JlYXRlRGlycyA9IDAp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVVSTChjb25zdCBuc0ZpbGVQ
YXRoJiBpblBhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVVSTChj
b25zdCBuc0ZpbGVTcGVjJiBpblBhdGgpOwogICAgICAgIHZpcnR1YWwgfm5zRmlsZVVSTCgpOwoK
CgoKCiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc0ZpbGVVUkwmIGluVVJMKTsKICAg
ICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IGNoYXIqIGluVVJMU3RyaW5nKTsKICAgICAgICB2
b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5zU3RyaW5nJiBpblVSTFN0cmluZykKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG5zQXV0b0NTdHJpbmcgc3RyaW5nKGluVVJMU3RyaW5nKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSBzdHJpbmc7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgbnNGaWxlUGF0aCYg
aW5PdGhlcik7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc0ZpbGVTcGVjJiBpbk90
aGVyKTsKCiAgICAgICAgdm9pZCBvcGVyYXRvciArPShjb25zdCBjaGFyKiBpblJlbGF0aXZlVW5p
eFBhdGgpOwogICAgICAgIG5zRmlsZVVSTCBvcGVyYXRvciArKGNvbnN0IGNoYXIqIGluUmVsYXRp
dmVVbml4UGF0aCkgY29uc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0
b3IgY29uc3QgY2hhciogKCkgY29uc3QgeyByZXR1cm4gKGNvbnN0IGNoYXIqKW1VUkw7IH0KICAg
ICAgICBjb25zdCBjaGFyKiBHZXRVUkxTdHJpbmcoKSBjb25zdCB7IHJldHVybiAoY29uc3QgY2hh
ciopbVVSTDsgfQoKICAgICAgICBjb25zdCBjaGFyKiBHZXRBc1N0cmluZygpIGNvbnN0IHsgcmV0
dXJuIChjb25zdCBjaGFyKiltVVJMOyB9CiMgNjE3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNGaWxlU3BlYy5oIgogICAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZyaWVuZCBjbGFzcyBuc0ZpbGVQYXRoOwogICAgICAgIG5zU2ltcGxlQ2hhclN0cmluZyBt
VVJMOwoKCgoKCgp9OwoKCmNsYXNzIG5zRmlsZVBhdGgKCgoKCnsKICAgIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVQYXRoKGNvbnN0IG5zRmlsZVBhdGgmIGlu
UGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlUGF0aChjb25zdCBj
aGFyKiBpblVuaXhQYXRoU3RyaW5nLCBQUkJvb2wgaW5DcmVhdGVEaXJzID0gMCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlUGF0aChjb25zdCBuc1N0cmluZyYgaW5Vbml4
UGF0aFN0cmluZywgUFJCb29sIGluQ3JlYXRlRGlycyA9IDApOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zRmlsZVBhdGgoY29uc3QgbnNGaWxlVVJMJiBpblVSTCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlUGF0aChjb25zdCBuc0ZpbGVTcGVjJiBpblBh
dGgpOwogICAgICAgIHZpcnR1YWwgfm5zRmlsZVBhdGgoKTsKCgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIqICgpIGNvbnN0IHsgcmV0dXJuIG1QYXRo
OyB9CgoKCgogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgbnNGaWxlUGF0aCYgaW5QYXRo
KTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IGNoYXIqIGluVW5peFBhdGhTdHJpbmcp
OwogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgbnNTdHJpbmcmIGluVW5peFBhdGhTdHJp
bmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBuc0F1dG9DU3RyaW5nIHN0cmluZyhpblVuaXhQYXRoU3Ry
aW5nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSBzdHJpbmc7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIHZvaWQgb3BlcmF0b3Ig
PSAoY29uc3QgbnNGaWxlVVJMJiBpblVSTCk7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25z
dCBuc0ZpbGVTcGVjJiBpbk90aGVyKTsKCiAgICAgICAgdm9pZCBvcGVyYXRvciArPShjb25zdCBj
aGFyKiBpblJlbGF0aXZlVW5peFBhdGgpOwogICAgICAgIG5zRmlsZVBhdGggb3BlcmF0b3IgKyhj
b25zdCBjaGFyKiBpblJlbGF0aXZlVW5peFBhdGgpIGNvbnN0OwojIDY3MiAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKICAgIHByaXZhdGU6CgogICAgICAgIG5zU2ltcGxl
Q2hhclN0cmluZyBtUGF0aDsKCgoKCgp9OwoKCmNsYXNzIG5zUGVyc2lzdGVudEZpbGVEZXNjcmlw
dG9yCgoKCgoKewogICAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
UGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yKCkge30KCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0b3IoY29uc3QgbnNQZXJzaXN0ZW50RmlsZURl
c2NyaXB0b3ImIGluRW5jb2RlZERhdGEpOwogICAgICAgIHZpcnR1YWwgfm5zUGVyc2lzdGVudEZp
bGVEZXNjcmlwdG9yKCk7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc1BlcnNpc3Rl
bnRGaWxlRGVzY3JpcHRvciYgaW5FbmNvZGVkRGF0YSk7CgoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc1BlcnNpc3RlbnRGaWxlRGVzY3JpcHRvcihjb25zdCBuc0ZpbGVTcGVjJiBp
blNwZWMpOwogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgbnNGaWxlU3BlYyYgaW5TcGVj
KTsKCgoKCiAgICAgICAgZnJpZW5kIG5zcmVzdWx0IFJlYWQobnNJSW5wdXRTdHJlYW0qIGFTdHJl
YW0sIG5zUGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yJik7CiAgICAgICAgZnJpZW5kIG5zcmVzdWx0
IFdyaXRlKG5zSU91dHB1dFN0cmVhbSogYVN0cmVhbSwgY29uc3QgbnNQZXJzaXN0ZW50RmlsZURl
c2NyaXB0b3ImKTsKCiAgICAgICAgZnJpZW5kIG5zSW5wdXRTdHJlYW0mIG9wZXJhdG9yID4+IChu
c0lucHV0U3RyZWFtJiwgbnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0b3ImKTsKCiAgICAgICAgZnJp
ZW5kIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAobnNPdXRwdXRTdHJlYW0mLCBjb25zdCBu
c1BlcnNpc3RlbnRGaWxlRGVzY3JpcHRvciYpOwoKICAgICAgICBmcmllbmQgY2xhc3MgbnNGaWxl
U3BlYzsKCiAgICAgICAgdm9pZCBHZXREYXRhKG5zU2ltcGxlQ2hhclN0cmluZyYgb3V0RGF0YSkg
Y29uc3Q7CiAgICAgICAgdm9pZCBTZXREYXRhKGNvbnN0IG5zU2ltcGxlQ2hhclN0cmluZyYgaW5E
YXRhKTsKICAgICAgICB2b2lkIEdldERhdGEobnNTaW1wbGVDaGFyU3RyaW5nJiBvdXREYXRhLCBQ
UkludDMyJiBvdXRTaXplKSBjb25zdDsKICAgICAgICB2b2lkIFNldERhdGEoY29uc3QgbnNTaW1w
bGVDaGFyU3RyaW5nJiBpbkRhdGEsIFBSSW50MzIgaW5TaXplKTsKICAgICAgICB2b2lkIFNldERh
dGEoY29uc3QgY2hhciogaW5EYXRhLCBQUkludDMyIGluU2l6ZSk7CgoKCgoKICAgIHByb3RlY3Rl
ZDoKCiAgICAgICAgbnNTaW1wbGVDaGFyU3RyaW5nIG1EZXNjcmlwdG9yU3RyaW5nOwoKfTsKCgpj
bGFzcyBuc0RpcmVjdG9yeUl0ZXJhdG9yCiMgNzQ3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNGaWxlU3BlYy5oIgp7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0RpcmVjdG9yeUl0ZXJhdG9yKCBjb25zdCBuc0ZpbGVTcGVjJiBwYXJlbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBSQm9vbCByZXNvdmVTeW1MaW5rcyk7CgoKICAgICAgICAgICAgdmlydHVhbCB+bnNEaXJlY3Rv
cnlJdGVyYXRvcigpOwoKICAgICAgICAgICAgUFJCb29sIEV4aXN0cygpIGNvbnN0IHsgcmV0dXJu
IG1FeGlzdHM7IH0KICAgICAgICAgICAgbnNEaXJlY3RvcnlJdGVyYXRvciYgb3BlcmF0b3IgKyso
KTsKICAgICAgICAgICAgbnNEaXJlY3RvcnlJdGVyYXRvciYgb3BlcmF0b3IgKysoaW50KSB7IHJl
dHVybiArKygqdGhpcyk7IH0KICAgICAgICAgICAgbnNEaXJlY3RvcnlJdGVyYXRvciYgb3BlcmF0
b3IgLS0oKTsKICAgICAgICAgICAgbnNEaXJlY3RvcnlJdGVyYXRvciYgb3BlcmF0b3IgLS0oaW50
KSB7IHJldHVybiAtLSgqdGhpcyk7IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0b3IgbnNGaWxlU3BlYyYoKSB7IHJldHVybiBtQ3VycmVudDsgfQoKICAgICAgICAg
ICAgbnNGaWxlU3BlYyYgU3BlYygpIHsgcmV0dXJuIG1DdXJyZW50OyB9CgogICAgICAgIHByaXZh
dGU6CiMgNzc0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgogICAgICAg
IHByaXZhdGU6CgogICAgICAgICAgICBuc0ZpbGVTcGVjIG1DdXJyZW50OwogICAgICAgICAgICBQ
UkJvb2wgbUV4aXN0czsKICAgICAgICBQUkJvb2wgbVJlc292ZVN5bUxpbmtzOwoKCiAgICAgICAg
ICAgIG5zRmlsZVNwZWMgbVN0YXJ0aW5nOwoKCgogICAgICAgICAgICBESVIqIG1EaXI7CiMgNzk0
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgp9OwoKCmNsYXNzIG5zTlNQ
UlBhdGgKCgoKCnsKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc05T
UFJQYXRoKGNvbnN0IG5zRmlsZVNwZWMmIGluU3BlYykKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogbUZpbGVQYXRoKGluU3BlYyksIG1vZGlmaWVkTlNQUlBhdGgoMCkge30K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNOU1BSUGF0aChjb25zdCBuc0ZpbGVV
UkwmIGluVVJMKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtRmlsZVBh
dGgoaW5VUkwpLCBtb2RpZmllZE5TUFJQYXRoKDApIHt9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zTlNQUlBhdGgoY29uc3QgbnNGaWxlUGF0aCYgaW5Vbml4UGF0aCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbUZpbGVQYXRoKGluVW5peFBhdGgpLCBt
b2RpZmllZE5TUFJQYXRoKDApIHt9CgogICAgdmlydHVhbCB+bnNOU1BSUGF0aCgpOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgY29uc3QgY2hhciooKSBjb25zdDsK
IyA4MjMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCnByaXZhdGU6Cgog
ICAgbnNGaWxlUGF0aCBtRmlsZVBhdGg7CiAgICBjaGFyKiBtb2RpZmllZE5TUFJQYXRoOwp9OwoK
CiAgICAgICBuc3Jlc3VsdCBOU19GaWxlU3BlY1RvSUZpbGUobnNGaWxlU3BlYyogZmlsZVNwZWMs
IG5zSUxvY2FsRmlsZSogKnJlc3VsdCk7CiMgMTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lGaWxlU3BlYy5oIiAyCmNsYXNzIG5zSUZpbGVVUkw7CgpjbGFzcyBuc0lGaWxlUGF0aDsKCmNs
YXNzIG5zSU91dHB1dFN0cmVhbTsKCmNsYXNzIG5zSUlucHV0U3RyZWFtOwojIDQyICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZVNwZWMuaCIKY2xhc3MgbnNJRmlsZVNwZWMgOiBwdWJs
aWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp
IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZDhjMGEwODAsIDB4MDg2OCwgMHgxMWQzLCB7
IDB4OTEsIDB4NWYsIDB4ZDksIDB4ZDgsIDB4ODksIDB4ZDQsIDB4OGUsIDB4M2MgfX07IHJldHVy
biBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGcm9tRmlsZVNwZWMoY29uc3QgbnNJRmlsZVNw
ZWMgKm9yaWdpbmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVSTFN0cmluZyhjaGFy
ICogKmFVUkxTdHJpbmcpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFVSTFN0cmluZyhjb25z
dCBjaGFyICogYVVSTFN0cmluZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVbml4U3R5
bGVGaWxlUGF0aChjaGFyICogKmFVbml4U3R5bGVGaWxlUGF0aCkgPSAwOwogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0VW5peFN0eWxlRmlsZVBhdGgoY29uc3QgY2hhciAqIGFVbml4U3R5bGVGaWxlUGF0
aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQZXJzaXN0ZW50RGVzY3JpcHRvclN0cmlu
ZyhjaGFyICogKmFQZXJzaXN0ZW50RGVzY3JpcHRvclN0cmluZykgPSAwOwogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0UGVyc2lzdGVudERlc2NyaXB0b3JTdHJpbmcoY29uc3QgY2hhciAqIGFQZXJzaXN0
ZW50RGVzY3JpcHRvclN0cmluZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYXRpdmVQ
YXRoKGNoYXIgKiAqYU5hdGl2ZVBhdGgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5hdGl2
ZVBhdGgoY29uc3QgY2hhciAqIGFOYXRpdmVQYXRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldE5TUFJQYXRoKGNoYXIgKiAqYU5TUFJQYXRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEVycm9yKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNWYWxpZChQUkJvb2wgKl9y
ZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRmFpbGVkKFBSQm9vbCAqX3JldHZhbCkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZWFmTmFtZShjaGFyICogKmFMZWFmTmFtZSkg
PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGVhZk5hbWUoY29uc3QgY2hhciAqIGFMZWFmTmFt
ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJRmlsZVNwZWMgKiAqYVBh
cmVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbnB1dFN0cmVhbShuc0lJbnB1dFN0
cmVhbSAqICphSW5wdXRTdHJlYW0pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T3V0cHV0
U3RyZWFtKG5zSU91dHB1dFN0cmVhbSAqICphT3V0cHV0U3RyZWFtKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IElzQ2hpbGRPZihuc0lGaWxlU3BlYyAqcG9zc2libGVQYXJlbnQsIFBSQm9vbCAq
X3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGaWxlU3BlYyhuc0ZpbGVTcGVj
ICphRmlsZVNwZWMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RnJvbUZpbGVTcGVjKGNv
bnN0IG5zRmlsZVNwZWMgJiBzcGVjKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGVD
b250ZW50cyhjaGFyICogKmFGaWxlQ29udGVudHMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dEZpbGVDb250ZW50cyhjb25zdCBjaGFyICogYUZpbGVDb250ZW50cykgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBNYWtlVW5pcXVlKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTWFr
ZVVuaXF1ZVdpdGhTdWdnZXN0ZWROYW1lKGNvbnN0IGNoYXIgKnN1Z2dlc3RlZE5hbWUpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW9kRGF0ZShQUlVpbnQzMiAqYU1vZERhdGUpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgTW9kRGF0ZUNoYW5nZWQoUFJVaW50MzIgb2xkU3RhbXAsIFBS
Qm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0RpcmVjdG9yeShQUkJv
b2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNGaWxlKFBSQm9vbCAqX3Jl
dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFeGlzdHMoUFJCb29sICpfcmV0dmFsKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzSGlkZGVuKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBFcXVhbHMobnNJRmlsZVNwZWMgKnNwZWMsIFBSQm9vbCAqX3Jl
dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGaWxlU2l6ZShQUlVpbnQzMiAqYUZp
bGVTaXplKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpc2tTcGFjZUF2YWlsYWJsZShQ
UkludDY0ICphRGlza1NwYWNlQXZhaWxhYmxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFw
cGVuZFJlbGF0aXZlVW5peFBhdGgoY29uc3QgY2hhciAqcmVsYXRpdmVQYXRoKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZURpcih2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IFRvdWNoKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTeW1saW5rKFBSQm9vbCAq
X3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNvbHZlU3ltbGluayh2b2lkKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZShQUkJvb2wgcmVjdXJzaXZlKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IFRydW5jYXRlKFBSSW50MzIgYU5ld0xlbmd0aCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBSZW5hbWUoY29uc3QgY2hhciAqbmV3TGVhZk5hbWUpID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgQ29weVRvRGlyKGNvbnN0IG5zSUZpbGVTcGVjICpuZXdQYXJlbnRE
aXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTW92ZVRvRGlyKGNvbnN0IG5zSUZpbGVTcGVj
ICpuZXdQYXJlbnREaXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXhlY3V0ZShjb25zdCBj
aGFyICphcmdzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9wZW5TdHJlYW1Gb3JSZWFkaW5n
KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3BlblN0cmVhbUZvcldyaXRpbmcodm9p
ZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPcGVuU3RyZWFtRm9yUmVhZGluZ0FuZFdyaXRp
bmcodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbG9zZVN0cmVhbSh2b2lkKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU3RyZWFtT3BlbihQUkJvb2wgKl9yZXR2YWwpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgRW9mKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBSZWFkKGNoYXIgKipidWZmZXIsIFBSSW50MzIgcmVxdWVzdGVkQ291bnQsIFBS
SW50MzIgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVhZExpbmUoY2hhciAq
KmxpbmUsIFBSSW50MzIgYnVmZmVyU2l6ZSwgUFJCb29sICp3YXNUcnVuY2F0ZWQpID0gMDsKCgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFdyaXRlKGNvbnN0IGNoYXIgKmRhdGEsIFBSSW50MzIgcmVx
dWVzdGVkQ291bnQsIFBSSW50MzIgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
Rmx1c2godm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZWVrKFBSSW50MzIgb2Zmc2V0
KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRlbGwoUFJJbnQzMiAqX3JldHZhbCkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBFbmRMaW5lKHZvaWQpID0gMDsKCn07CiMgNzE4ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZVNwZWMuaCIKY2xhc3MgbnNJRGlyZWN0b3J5SXRlcmF0
b3IgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm
IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZDhjMGEwODMsIDB4MDg2OCwg
MHgxMWQzLCB7IDB4OTEsIDB4NWYsIDB4ZDksIDB4ZDgsIDB4ODksIDB4ZDQsIDB4OGUsIDB4M2Mg
fX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSUZpbGVTcGVjICpw
YXJlbnQsIFBSQm9vbCByZXNvbHZlU3ltbGluaykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBF
eGlzdHMoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5leHQodm9p
ZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJyZW50U3BlYyhuc0lGaWxlU3BlYyAq
ICphQ3VycmVudFNwZWMpID0gMDsKCn07CiMgODA4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJRmlsZVNwZWMuaCIKICAgICAgIG5zcmVzdWx0IE5TX05ld0ZpbGVTcGVjV2l0aFNwZWMoY29u
c3QgbnNGaWxlU3BlYyYgYVNyY0ZpbGVTcGVjLCBuc0lGaWxlU3BlYyAqKnJlc3VsdCk7CiAgICAg
ICBuc3Jlc3VsdCBOU19OZXdGaWxlU3BlYyhuc0lGaWxlU3BlYyoqIHJlc3VsdCk7CiAgICAgICBu
c3Jlc3VsdCBOU19OZXdEaXJlY3RvcnlJdGVyYXRvcihuc0lEaXJlY3RvcnlJdGVyYXRvcioqIHJl
c3VsdCk7CgppbmxpbmUgUFJCb29sIEV4aXN0cyhuc0lGaWxlU3BlYyogZikgeyBQUkJvb2wgeWVz
OyByZXR1cm4gKCEoKGYtPkV4aXN0cygmeWVzKSkgJiAweDgwMDAwMDAwKSkgJiYgeWVzOyB9Cmlu
bGluZSBQUkJvb2wgRXhpc3RzKG5zSURpcmVjdG9yeUl0ZXJhdG9yKiBmKSB7IFBSQm9vbCB5ZXM7
IHJldHVybiAoISgoZi0+RXhpc3RzKCZ5ZXMpKSAmIDB4ODAwMDAwMDApKSAmJiB5ZXM7IH0KaW5s
aW5lIFBSQm9vbCBJc0RpcmVjdG9yeShuc0lGaWxlU3BlYyogZikgeyBQUkJvb2wgeWVzOyByZXR1
cm4gKCEoKGYtPklzRGlyZWN0b3J5KCZ5ZXMpKSAmIDB4ODAwMDAwMDApKSAmJiB5ZXM7IH0KIyAy
OSAibnNGb3JtRnJhbWUuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3Jt
UHJvY2Vzc29yLmgiIDEKIyAzMyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZvcm1Qcm9j
ZXNzb3IuaCIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQoj
IDM0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybVByb2Nlc3Nvci5oIiAyCiMgMSAi
L0dNL2hkZDkvbW96aWxsYS9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQoj
IDM1ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybVByb2Nlc3Nvci5oIiAyCgojIDEg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01IVE1MSW5wdXRFbGVtZW50LmgiIDEKIyAy
NyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTUhUTUxJbnB1dEVsZW1lbnQuaCIKIyAx
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI4ICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NSFRNTElucHV0RWxlbWVudC5oIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyAyOSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSURPTUhUTUxJbnB1dEVsZW1lbnQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lTY3JpcHRDb250ZXh0LmgiIDEKIyAzMCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSURPTUhUTUxJbnB1dEVsZW1lbnQuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lET01IVE1MRWxlbWVudC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lET01IVE1MRWxlbWVudC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lT
dXBwb3J0cy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01IVE1MRWxl
bWVudC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyAy
OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTUhUTUxFbGVtZW50LmgiIDIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIiAxCiMgMzAgIi4uLy4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01IVE1MRWxlbWVudC5oIiAyCiMgMSAiLi4vLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL25zSURPTUVsZW1lbnQuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJRE9NRWxlbWVudC5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lTdXBwb3J0cy5oIiAxCiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01FbGVt
ZW50LmgiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMQojIDI5
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NRWxlbWVudC5oIiAyCiMgMSAiLi4vLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVNjcmlwdENvbnRleHQuaCIgMQojIDMwICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRE9NRWxlbWVudC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSURPTU5vZGUuaCIgMQojIDI3ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RE9NTm9kZS5oIgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAx
CiMgMjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01Ob2RlLmgiIDIKIyAxICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMQojIDI5ICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJRE9NTm9kZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVNjcmlwdENvbnRleHQuaCIgMQojIDMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9N
Tm9kZS5oIiAyCgpjbGFzcyBuc0lET01Eb2N1bWVudDsKY2xhc3MgbnNJRE9NTmFtZWROb2RlTWFw
OwpjbGFzcyBuc0lET01Ob2RlOwpjbGFzcyBuc0lET01Ob2RlTGlzdDsKCgoKCgpjbGFzcyBuc0lE
T01Ob2RlIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJ
RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4YTZjZjkwN2MsIDB4MTVi
MywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4
MzIgfSB9OyByZXR1cm4gaWlkO30KICBlbnVtIHsKICAgIEVMRU1FTlRfTk9ERSA9IDEsCiAgICBB
VFRSSUJVVEVfTk9ERSA9IDIsCiAgICBURVhUX05PREUgPSAzLAogICAgQ0RBVEFfU0VDVElPTl9O
T0RFID0gNCwKICAgIEVOVElUWV9SRUZFUkVOQ0VfTk9ERSA9IDUsCiAgICBFTlRJVFlfTk9ERSA9
IDYsCiAgICBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUgPSA3LAogICAgQ09NTUVOVF9OT0RF
ID0gOCwKICAgIERPQ1VNRU5UX05PREUgPSA5LAogICAgRE9DVU1FTlRfVFlQRV9OT0RFID0gMTAs
CiAgICBET0NVTUVOVF9GUkFHTUVOVF9OT0RFID0gMTEsCiAgICBOT1RBVElPTl9OT0RFID0gMTIK
ICB9OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5vZGVOYW1lKG5zQVdyaXRhYmxlU3RyaW5nJiBh
Tm9kZU5hbWUpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Tm9kZVZhbHVlKG5zQVdyaXRhYmxl
U3RyaW5nJiBhTm9kZVZhbHVlKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Tm9kZVZhbHVlKGNv
bnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhTm9kZVZhbHVlKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldE5vZGVUeXBlKFBSVWludDE2KiBhTm9kZVR5cGUpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0UGFyZW50Tm9kZShuc0lET01Ob2RlKiogYVBhcmVudE5vZGUpPTA7CgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0Q2hpbGROb2Rlcyhuc0lET01Ob2RlTGlzdCoqIGFDaGlsZE5vZGVzKT0wOwoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldEZpcnN0Q2hpbGQobnNJRE9NTm9kZSoqIGFGaXJzdENoaWxkKT0w
OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhc3RDaGlsZChuc0lET01Ob2RlKiogYUxhc3RDaGls
ZCk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmV2aW91c1NpYmxpbmcobnNJRE9NTm9kZSoq
IGFQcmV2aW91c1NpYmxpbmcpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmV4dFNpYmxpbmco
bnNJRE9NTm9kZSoqIGFOZXh0U2libGluZyk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBdHRy
aWJ1dGVzKG5zSURPTU5hbWVkTm9kZU1hcCoqIGFBdHRyaWJ1dGVzKT0wOwoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldE93bmVyRG9jdW1lbnQobnNJRE9NRG9jdW1lbnQqKiBhT3duZXJEb2N1bWVudCk9
MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lc3BhY2VVUkkobnNBV3JpdGFibGVTdHJpbmcm
IGFOYW1lc3BhY2VVUkkpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJlZml4KG5zQVdyaXRh
YmxlU3RyaW5nJiBhUHJlZml4KT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJlZml4KGNvbnN0
IG5zQVJlYWRhYmxlU3RyaW5nJiBhUHJlZml4KT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExv
Y2FsTmFtZShuc0FXcml0YWJsZVN0cmluZyYgYUxvY2FsTmFtZSk9MDsKCiAgdmlydHVhbCBuc3Jl
c3VsdCBJbnNlcnRCZWZvcmUobnNJRE9NTm9kZSogYU5ld0NoaWxkLCBuc0lET01Ob2RlKiBhUmVm
Q2hpbGQsIG5zSURPTU5vZGUqKiBhUmV0dXJuKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlcGxh
Y2VDaGlsZChuc0lET01Ob2RlKiBhTmV3Q2hpbGQsIG5zSURPTU5vZGUqIGFPbGRDaGlsZCwgbnNJ
RE9NTm9kZSoqIGFSZXR1cm4pPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlQ2hpbGQobnNJ
RE9NTm9kZSogYU9sZENoaWxkLCBuc0lET01Ob2RlKiogYVJldHVybik9MDsKCiAgdmlydHVhbCBu
c3Jlc3VsdCBBcHBlbmRDaGlsZChuc0lET01Ob2RlKiBhTmV3Q2hpbGQsIG5zSURPTU5vZGUqKiBh
UmV0dXJuKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc0NoaWxkTm9kZXMoUFJCb29sKiBhUmV0
dXJuKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lTm9kZShQUkJvb2wgYURlZXAsIG5zSURP
TU5vZGUqKiBhUmV0dXJuKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IE5vcm1hbGl6ZSgpPTA7Cgog
IHZpcnR1YWwgbnNyZXN1bHQgSXNTdXBwb3J0ZWQoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFG
ZWF0dXJlLCBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVZlcnNpb24sIFBSQm9vbCogYVJldHVy
bik9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYXNBdHRyaWJ1dGVzKFBSQm9vbCogYVJldHVybik9
MDsKfTsKIyAxNjUgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01Ob2RlLmgiCmV4dGVy
biAiQyIgbnNyZXN1bHQgTlNfSW5pdE5vZGVDbGFzcyhuc0lTY3JpcHRDb250ZXh0ICphQ29udGV4
dCwgdm9pZCAqKmFQcm90b3R5cGUpOwoKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdTY3JpcHRO
b2RlKG5zSVNjcmlwdENvbnRleHQgKmFDb250ZXh0LCBuc0lTdXBwb3J0cyAqYVN1cHBvcnRzLCBu
c0lTdXBwb3J0cyAqYVBhcmVudCwgdm9pZCAqKmFSZXR1cm4pOwojIDMxICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJRE9NRWxlbWVudC5oIiAyCgpjbGFzcyBuc0lET01BdHRyOwpjbGFzcyBu
c0lET01Ob2RlTGlzdDsKCgoKCgpjbGFzcyBuc0lET01FbGVtZW50IDogcHVibGljIG5zSURPTU5v
ZGUgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0
IG5zSUlEIGlpZCA9IHsgMHhhNmNmOTA3OCwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwg
MHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9IH07IHJldHVybiBpaWQ7fQoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFRhZ05hbWUobnNBV3JpdGFibGVTdHJpbmcmIGFUYWdOYW1lKT0w
OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF0dHJpYnV0ZShjb25zdCBuc0FSZWFkYWJsZVN0cmlu
ZyYgYU5hbWUsIG5zQVdyaXRhYmxlU3RyaW5nJiBhUmV0dXJuKT0wOwoKICB2aXJ0dWFsIG5zcmVz
dWx0IFNldEF0dHJpYnV0ZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYU5hbWUsIGNvbnN0IG5z
QVJlYWRhYmxlU3RyaW5nJiBhVmFsdWUpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlQXR0
cmlidXRlKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhTmFtZSk9MDsKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRBdHRyaWJ1dGVOb2RlKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhTmFtZSwgbnNJ
RE9NQXR0cioqIGFSZXR1cm4pPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QXR0cmlidXRlTm9k
ZShuc0lET01BdHRyKiBhTmV3QXR0ciwgbnNJRE9NQXR0cioqIGFSZXR1cm4pPTA7CgogIHZpcnR1
YWwgbnNyZXN1bHQgUmVtb3ZlQXR0cmlidXRlTm9kZShuc0lET01BdHRyKiBhT2xkQXR0ciwgbnNJ
RE9NQXR0cioqIGFSZXR1cm4pPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RWxlbWVudHNCeVRh
Z05hbWUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFOYW1lLCBuc0lET01Ob2RlTGlzdCoqIGFS
ZXR1cm4pPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlTlMoY29uc3QgbnNBUmVh
ZGFibGVTdHJpbmcmIGFOYW1lc3BhY2VVUkksIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhTG9j
YWxOYW1lLCBuc0FXcml0YWJsZVN0cmluZyYgYVJldHVybik9MDsKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRBdHRyaWJ1dGVOUyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYU5hbWVzcGFjZVVSSSwg
Y29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFRdWFsaWZpZWROYW1lLCBjb25zdCBuc0FSZWFkYWJs
ZVN0cmluZyYgYVZhbHVlKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUF0dHJpYnV0ZU5T
KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhTmFtZXNwYWNlVVJJLCBjb25zdCBuc0FSZWFkYWJs
ZVN0cmluZyYgYUxvY2FsTmFtZSk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBdHRyaWJ1dGVO
b2RlTlMoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFOYW1lc3BhY2VVUkksIGNvbnN0IG5zQVJl
YWRhYmxlU3RyaW5nJiBhTG9jYWxOYW1lLCBuc0lET01BdHRyKiogYVJldHVybik9MDsKCiAgdmly
dHVhbCBuc3Jlc3VsdCBTZXRBdHRyaWJ1dGVOb2RlTlMobnNJRE9NQXR0ciogYU5ld0F0dHIsIG5z
SURPTUF0dHIqKiBhUmV0dXJuKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVsZW1lbnRzQnlU
YWdOYW1lTlMoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFOYW1lc3BhY2VVUkksIGNvbnN0IG5z
QVJlYWRhYmxlU3RyaW5nJiBhTG9jYWxOYW1lLCBuc0lET01Ob2RlTGlzdCoqIGFSZXR1cm4pPTA7
CgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzQXR0cmlidXRlKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5n
JiBhTmFtZSwgUFJCb29sKiBhUmV0dXJuKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc0F0dHJp
YnV0ZU5TKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhTmFtZXNwYWNlVVJJLCBjb25zdCBuc0FS
ZWFkYWJsZVN0cmluZyYgYUxvY2FsTmFtZSwgUFJCb29sKiBhUmV0dXJuKT0wOwp9OwojIDExNiAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTUVsZW1lbnQuaCIKZXh0ZXJuICJDIiBuc3Jl
c3VsdCBOU19Jbml0RWxlbWVudENsYXNzKG5zSVNjcmlwdENvbnRleHQgKmFDb250ZXh0LCB2b2lk
ICoqYVByb3RvdHlwZSk7CgpleHRlcm4gIkMiIG5zcmVzdWx0IE5TX05ld1NjcmlwdEVsZW1lbnQo
bnNJU2NyaXB0Q29udGV4dCAqYUNvbnRleHQsIG5zSVN1cHBvcnRzICphU3VwcG9ydHMsIG5zSVN1
cHBvcnRzICphUGFyZW50LCB2b2lkICoqYVJldHVybik7CiMgMzEgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lET01IVE1MRWxlbWVudC5oIiAyCgpjbGFzcyBuc0lET01FbGVtZW50OwpjbGFz
cyBuc0lET01DU1NTdHlsZURlY2xhcmF0aW9uOwoKCgoKCmNsYXNzIG5zSURPTUhUTUxFbGVtZW50
IDogcHVibGljIG5zSURPTUVsZW1lbnQgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH
ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhhNmNmOTA4NSwgMHgxNWIzLCAw
eDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9
IH07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldElkKG5zQVdyaXRhYmxlU3Ry
aW5nJiBhSWQpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJZChjb25zdCBuc0FSZWFkYWJsZVN0
cmluZyYgYUlkKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRpdGxlKG5zQVdyaXRhYmxlU3Ry
aW5nJiBhVGl0bGUpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUaXRsZShjb25zdCBuc0FSZWFk
YWJsZVN0cmluZyYgYVRpdGxlKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhbmcobnNBV3Jp
dGFibGVTdHJpbmcmIGFMYW5nKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGFuZyhjb25zdCBu
c0FSZWFkYWJsZVN0cmluZyYgYUxhbmcpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlyKG5z
QVdyaXRhYmxlU3RyaW5nJiBhRGlyKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGlyKGNvbnN0
IG5zQVJlYWRhYmxlU3RyaW5nJiBhRGlyKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENsYXNz
TmFtZShuc0FXcml0YWJsZVN0cmluZyYgYUNsYXNzTmFtZSk9MDsKICB2aXJ0dWFsIG5zcmVzdWx0
IFNldENsYXNzTmFtZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYUNsYXNzTmFtZSk9MDsKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZShuc0lET01DU1NTdHlsZURlY2xhcmF0aW9uKiogYVN0
eWxlKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9mZnNldFRvcChQUkludDMyKiBhT2Zmc2V0
VG9wKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9mZnNldExlZnQoUFJJbnQzMiogYU9mZnNl
dExlZnQpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T2Zmc2V0V2lkdGgoUFJJbnQzMiogYU9m
ZnNldFdpZHRoKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9mZnNldEhlaWdodChQUkludDMy
KiBhT2Zmc2V0SGVpZ2h0KT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9mZnNldFBhcmVudChu
c0lET01FbGVtZW50KiogYU9mZnNldFBhcmVudCk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJ
bm5lckhUTUwobnNBV3JpdGFibGVTdHJpbmcmIGFJbm5lckhUTUwpPTA7CiAgdmlydHVhbCBuc3Jl
c3VsdCBTZXRJbm5lckhUTUwoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFJbm5lckhUTUwpPTA7
Cn07CiMgMTE4ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NSFRNTEVsZW1lbnQuaCIK
ZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19Jbml0SFRNTEVsZW1lbnRDbGFzcyhuc0lTY3JpcHRDb250
ZXh0ICphQ29udGV4dCwgdm9pZCAqKmFQcm90b3R5cGUpOwoKZXh0ZXJuICJDIiBuc3Jlc3VsdCBO
U19OZXdTY3JpcHRIVE1MRWxlbWVudChuc0lTY3JpcHRDb250ZXh0ICphQ29udGV4dCwgbnNJU3Vw
cG9ydHMgKmFTdXBwb3J0cywgbnNJU3VwcG9ydHMgKmFQYXJlbnQsIHZvaWQgKiphUmV0dXJuKTsK
IyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTUhUTUxJbnB1dEVsZW1lbnQuaCIg
MgoKY2xhc3MgbnNJRE9NSFRNTEZvcm1FbGVtZW50OwoKCgoKCmNsYXNzIG5zSURPTUhUTUxJbnB1
dEVsZW1lbnQgOiBwdWJsaWMgbnNJRE9NSFRNTEVsZW1lbnQgewpwdWJsaWM6CiAgc3RhdGljIGNv
bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhhNmNmOTA5
MywgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg
MHhkZCwgMHgzMiB9IH07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1
bHRWYWx1ZShuc0FXcml0YWJsZVN0cmluZyYgYURlZmF1bHRWYWx1ZSk9MDsKICB2aXJ0dWFsIG5z
cmVzdWx0IFNldERlZmF1bHRWYWx1ZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYURlZmF1bHRW
YWx1ZSk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0Q2hlY2tlZChQUkJvb2wqIGFE
ZWZhdWx0Q2hlY2tlZCk9MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlZmF1bHRDaGVja2VkKFBS
Qm9vbCBhRGVmYXVsdENoZWNrZWQpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9ybShuc0lE
T01IVE1MRm9ybUVsZW1lbnQqKiBhRm9ybSk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBY2Nl
cHQobnNBV3JpdGFibGVTdHJpbmcmIGFBY2NlcHQpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRB
Y2NlcHQoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFBY2NlcHQpPTA7CgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0QWNjZXNzS2V5KG5zQVdyaXRhYmxlU3RyaW5nJiBhQWNjZXNzS2V5KT0wOwogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0QWNjZXNzS2V5KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhQWNj
ZXNzS2V5KT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsaWduKG5zQVdyaXRhYmxlU3RyaW5n
JiBhQWxpZ24pPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBbGlnbihjb25zdCBuc0FSZWFkYWJs
ZVN0cmluZyYgYUFsaWduKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsdChuc0FXcml0YWJs
ZVN0cmluZyYgYUFsdCk9MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsdChjb25zdCBuc0FSZWFk
YWJsZVN0cmluZyYgYUFsdCk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDaGVja2VkKFBSQm9v
bCogYUNoZWNrZWQpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDaGVja2VkKFBSQm9vbCBhQ2hl
Y2tlZCk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXNhYmxlZChQUkJvb2wqIGFEaXNhYmxl
ZCk9MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERpc2FibGVkKFBSQm9vbCBhRGlzYWJsZWQpPTA7
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWF4TGVuZ3RoKFBSSW50MzIqIGFNYXhMZW5ndGgpPTA7
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRNYXhMZW5ndGgoUFJJbnQzMiBhTWF4TGVuZ3RoKT0wOwoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBV3JpdGFibGVTdHJpbmcmIGFOYW1lKT0wOwog
IHZpcnR1YWwgbnNyZXN1bHQgU2V0TmFtZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYU5hbWUp
PTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVhZE9ubHkoUFJCb29sKiBhUmVhZE9ubHkpPTA7
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRSZWFkT25seShQUkJvb2wgYVJlYWRPbmx5KT0wOwoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFNpemUobnNBV3JpdGFibGVTdHJpbmcmIGFTaXplKT0wOwogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0U2l6ZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVNpemUpPTA7
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3JjKG5zQVdyaXRhYmxlU3RyaW5nJiBhU3JjKT0wOwog
IHZpcnR1YWwgbnNyZXN1bHQgU2V0U3JjKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU3JjKT0w
OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRhYkluZGV4KFBSSW50MzIqIGFUYWJJbmRleCk9MDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRhYkluZGV4KFBSSW50MzIgYVRhYkluZGV4KT0wOwoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUobnNBV3JpdGFibGVTdHJpbmcmIGFUeXBlKT0wOwogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0VHlwZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVR5cGUpPTA7
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VXNlTWFwKG5zQVdyaXRhYmxlU3RyaW5nJiBhVXNlTWFw
KT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VXNlTWFwKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5n
JiBhVXNlTWFwKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZhbHVlKG5zQVdyaXRhYmxlU3Ry
aW5nJiBhVmFsdWUpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWYWx1ZShjb25zdCBuc0FSZWFk
YWJsZVN0cmluZyYgYVZhbHVlKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEJsdXIoKT0wOwoKICB2
aXJ0dWFsIG5zcmVzdWx0IEZvY3VzKCk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZWxlY3QoKT0w
OwoKICB2aXJ0dWFsIG5zcmVzdWx0IENsaWNrKCk9MDsKfTsKIyAxOTAgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lET01IVE1MSW5wdXRFbGVtZW50LmgiCmV4dGVybiAiQyIgbnNyZXN1bHQg
TlNfSW5pdEhUTUxJbnB1dEVsZW1lbnRDbGFzcyhuc0lTY3JpcHRDb250ZXh0ICphQ29udGV4dCwg
dm9pZCAqKmFQcm90b3R5cGUpOwoKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdTY3JpcHRIVE1M
SW5wdXRFbGVtZW50KG5zSVNjcmlwdENvbnRleHQgKmFDb250ZXh0LCBuc0lTdXBwb3J0cyAqYVN1
cHBvcnRzLCBuc0lTdXBwb3J0cyAqYVBhcmVudCwgdm9pZCAqKmFSZXR1cm4pOwojIDM3ICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRm9ybVByb2Nlc3Nvci5oIiAyCgpjbGFzcyBuc1N0cmlu
ZzsKY2xhc3MgbnNWb2lkQXJyYXk7CiMgNTggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lG
b3JtUHJvY2Vzc29yLmgiCmNsYXNzIG5zSUZvcm1Qcm9jZXNzb3IgOiBwdWJsaWMgbnNJU3VwcG9y
dHMgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0
IG5zSUlEIGlpZCA9IHsgMHhmMTFjMWUyMCwgMHg4NzNmLCAweDExZDMsIHsgMHg5NiwgMHg3Ziwg
MHgwLCAweDEwLCAweDVhLCAweDFiLCAweDFiLCAweDc2IH0gfTsgcmV0dXJuIGlpZDt9CiMgNzQg
Ii4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGb3JtUHJvY2Vzc29yLmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBQcm9jZXNzVmFsdWUobnNJRE9NSFRNTEVsZW1lbnQgKmFFbGVtZW50LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3RyaW5nJiBhTmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc1N0cmluZyYgYVZhbHVlKSA9IDA7CiMgODcgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGb3JtUHJvY2Vzc29yLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBQcm92aWRlQ29u
dGVudChjb25zdCBuc1N0cmluZyYgYUZvcm1UeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNWb2lkQXJyYXkmIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNT
dHJpbmcmIGFBdHRyaWJ1dGUpID0gMDsKCn07CiMgMzAgIm5zRm9ybUZyYW1lLmgiIDIKCmNsYXNz
IG5zU3RyaW5nOwpjbGFzcyBuc0lDb250ZW50OwpjbGFzcyBuc0lGcmFtZTsKY2xhc3MgbnNJUHJl
c0NvbnRleHQ7CnN0cnVjdCBuc0hUTUxSZWZsb3dTdGF0ZTsKY2xhc3MgbnNGb3JtQ29udHJvbEZy
YW1lOwpjbGFzcyBuc0dmeFJhZGlvQ29udHJvbEZyYW1lOwpjbGFzcyBuc0lGb3JtQ29udHJvbEZy
YW1lOwpjbGFzcyBuc0lET01IVE1MRm9ybUVsZW1lbnQ7CmNsYXNzIG5zSURvY3VtZW50OwpjbGFz
cyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNGb3JtRnJhbWU7CmNsYXNzIG5zSVVuaWNvZGVFbmNv
ZGVyOwpjbGFzcyBuc1JhZGlvQ29udHJvbEdyb3VwOwoKY2xhc3MgbnNGb3JtRnJhbWUgOiBwdWJs
aWMgbnNCbG9ja0ZyYW1lLAogICAgICAgICAgICAgICAgICAgIHB1YmxpYyBuc0lGb3JtTWFuYWdl
cgp7CnB1YmxpYzoKICBuc0Zvcm1GcmFtZSgpOwogIHZpcnR1YWwgfm5zRm9ybUZyYW1lKCk7Cgog
IHZpcnR1YWwgbnNyZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQq
KiBhSW5zdGFuY2VQdHIpOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUZyYW1lKG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzU2hl
bGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5h
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYU9sZEZyYW1lKTsKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IE9uUmVzZXQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7Cgog
IHZpcnR1YWwgbnNyZXN1bHQgT25TdWJtaXQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwg
bnNJRnJhbWUqIGFGcmFtZSk7CgoKCgoKCgogIG5zcmVzdWx0IE9uUmFkaW9DaGVja2VkKG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsIG5zR2Z4UmFkaW9Db250cm9sRnJhbWUmIGFSYWRpbywg
UFJCb29sIGFDaGVja2VkID0gMSk7CgogIHZvaWQgQWRkRm9ybUNvbnRyb2xGcmFtZShuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0LCBuc0lGb3JtQ29udHJvbEZyYW1lJiBhRnJhbWUpOwogIHN0
YXRpYyB2b2lkIEFkZEZvcm1Db250cm9sRnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwgbnNJRnJhbWUmIGFGcmFtZSk7CiAgdm9pZCBSZW1vdmVGb3JtQ29udHJvbEZyYW1lKG5zSUZv
cm1Db250cm9sRnJhbWUmIGFGcmFtZSk7CiAgdm9pZCBSZW1vdmVSYWRpb0NvbnRyb2xGcmFtZShu
c0lGb3JtQ29udHJvbEZyYW1lICogYUZyYW1lKTsKICBuc3Jlc3VsdCBHZXRSYWRpb0luZm8obnNJ
Rm9ybUNvbnRyb2xGcmFtZSogYUZyYW1lLCBuc1N0cmluZyYgYU5hbWUsIG5zUmFkaW9Db250cm9s
R3JvdXAgKiYgYUdyb3VwKTsKCiAgUFJCb29sIENhblN1Ym1pdChuc0lGb3JtQ29udHJvbEZyYW1l
ICphRnJhbWUpOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1ldGhvZChQUkludDMyKiBhTWV0aG9k
KTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVuY3R5cGUoUFJJbnQzMiogYUVuY3R5cGUpOwogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0VGFyZ2V0KG5zU3RyaW5nKiBhVGFyZ2V0KTsKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldEFjdGlvbihuc1N0cmluZyogYUFjdGlvbik7CgoKCiAgc3RhdGljIFBSQm9vbCBH
ZXREaXNhYmxlZChuc0lGcmFtZSogYUNoaWxkRnJhbWUsIG5zSUNvbnRlbnQqIGFDb250ZW50ID0g
MCk7CiAgc3RhdGljIFBSQm9vbCBHZXRSZWFkb25seShuc0lGcmFtZSogYUNoaWxkRnJhbWUsIG5z
SUNvbnRlbnQqIGFDb250ZW50ID0gMCk7CiAgc3RhdGljIG5zcmVzdWx0IEdldE5hbWUobnNJRnJh
bWUqIGFDaGlsZEZyYW1lLCBuc1N0cmluZyYgYU5hbWUsIG5zSUNvbnRlbnQqIGFDb250ZW50ID0g
MCk7CiAgc3RhdGljIG5zcmVzdWx0IEdldFZhbHVlKG5zSUZyYW1lKiBhQ2hpbGRGcmFtZSwgbnNT
dHJpbmcmIGFWYWx1ZSwgbnNJQ29udGVudCogYUNvbnRlbnQgPSAwKTsKICBzdGF0aWMgdm9pZCBT
dHlsZUNoYW5nZVJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUpOwogIHN0YXRpYyBuc3Jlc3Vs
dCBHZXRSYWRpb0dyb3VwU2VsZWN0ZWRDb250ZW50KG5zR2Z4UmFkaW9Db250cm9sRnJhbWUqIGFD
b250cm9sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUNvbnRlbnQgKiogYVJhZGlvYnRuKTsKICB2b2lkIFNldEZsYWdzKFBSVWludDMyIGFGbGFncykg
ewogICAgbVN0YXRlICY9IH4weEZGRjAwMDAwOwogICAgbVN0YXRlIHw9IGFGbGFnczsKICB9Cgpw
cm90ZWN0ZWQ6CiAgdmlydHVhbCBuc3JlZmNudCBBZGRSZWYodm9pZCk7CiAgdmlydHVhbCBuc3Jl
ZmNudCBSZWxlYXNlKHZvaWQpOwogIHZvaWQgUmVtb3ZlUmFkaW9Hcm91cHMoKTsKCiAgdm9pZCBE
b0RlZmF1bHRTZWxlY3Rpb24obnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc1JhZGlvQ29udHJvbEdyb3VwICogYUdyb3VwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zR2Z4UmFkaW9Db250cm9sRnJhbWUgKiBhUmFkaW9Ub0lnbm9yZSA9
IDApOwoKICBuc3Jlc3VsdCBQcm9jZXNzVmFsdWUobnNJRm9ybVByb2Nlc3NvciYgYUZvcm1Qcm9j
ZXNzb3IsIG5zSUZvcm1Db250cm9sRnJhbWUqIGFGcmFtZUNvbnRyb2wsIGNvbnN0IG5zU3RyaW5n
JiBhTmFtZSwgbnNTdHJpbmcmIGFOZXdWYWx1ZSk7CiAgbnNyZXN1bHQgUHJvY2Vzc0FzVVJMRW5j
b2RlZChuc0lGb3JtUHJvY2Vzc29yKiBhRm9ybVByb2Nlc3NvciwgUFJCb29sIGFJc1Bvc3QsIG5z
U3RyaW5nJiBhRGF0YSwgbnNJRm9ybUNvbnRyb2xGcmFtZSogYUZyYW1lKTsKICBuc3Jlc3VsdCBQ
cm9jZXNzQXNNdWx0aXBhcnQobnNJRm9ybVByb2Nlc3NvciogYUZvcm1Qcm9jZXNzb3IsIG5zSUZp
bGVTcGVjKiYgYU11bHRpcGFydERhdGFGaWxlLCBuc0lGb3JtQ29udHJvbEZyYW1lKiBhRnJhbWUp
OwogIHN0YXRpYyBjb25zdCBjaGFyKiBHZXRGaWxlTmFtZVdpdGhpblBhdGgoY2hhciogYVBhdGhO
YW1lKTsKICBuc3Jlc3VsdCBHZXRDb250ZW50VHlwZShjaGFyKiBhUGF0aE5hbWUsIGNoYXIqKiBh
Q29udGVudFR5cGUpOwoKCiAgbnNTdHJpbmcqIFVSTEVuY29kZShjb25zdCBuc1N0cmluZyYgYVN0
cmluZywgbnNJVW5pY29kZUVuY29kZXIqIGVuY29kZXIpOwogIGNoYXIqIFVuaWNvZGVUb05ld0J5
dGVzKGNvbnN0IFBSVW5pY2hhciogYVNyYywgUFJVaW50MzIgYUxlbiwgbnNJVW5pY29kZUVuY29k
ZXIqIGVuY29kZXIpOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVuY29kZXIobnNJVW5pY29kZUVu
Y29kZXIqKiBlbmNvZGVyKTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBsYXRmb3JtRW5jb2Rlcihu
c0lVbmljb2RlRW5jb2RlcioqIGVuY29kZXIpOwogIHZvaWQgR2V0U3VibWl0Q2hhcnNldChuc1N0
cmluZyYgb0NoYXJzZXQpOwogIHZvaWQgVXBkYXRlU3VibWl0dGVyKG5zSUZvcm1Db250cm9sRnJh
bWUgKiBhRnJhbWUpOwoKICBuc1ZvaWRBcnJheSBtRm9ybUNvbnRyb2xzOwogIG5zVm9pZEFycmF5
IG1SYWRpb0dyb3VwczsKICBuc0lGb3JtQ29udHJvbEZyYW1lKiBtVGV4dFN1Ym1pdHRlcjsKICBQ
UkJvb2wgbVRleHRTdWJtaXR0ZXJTZXQ7CgoKCgoKCgp9OwojIDUyICJuc0Zvcm1Db250cm9sSGVs
cGVyLmNwcCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50LmgiIDEK
IyA1MyAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNTdHlsZVV0aWwuaCIgMQojIDU0ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lOYW1lU3BhY2VNYW5hZ2VyLmgiIDEKIyAy
NiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSU5hbWVTcGFjZU1hbmFnZXIuaCIKIyAxICIu
Li8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI3ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJTmFtZVNwYWNlTWFuYWdlci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL25zbGF5b3V0LmgiIDEKIyAyOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSU5hbWVTcGFjZU1hbmFnZXIuaCIgMgojIDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0FXcml0YWJsZVN0cmluZy5oIiAxCiMgMjkgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lO
YW1lU3BhY2VNYW5hZ2VyLmgiIDIKCmNsYXNzIG5zSUF0b207CmNsYXNzIG5zU3RyaW5nOwpjbGFz
cyBuc0lOYW1lU3BhY2U7CiMgNjggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lOYW1lU3Bh
Y2VNYW5hZ2VyLmgiCmNsYXNzIG5zSU5hbWVTcGFjZU1hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9y
dHMgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7IHN0YXRpYyBuc0lJ
RCBpaWQgPSB7IDB4YTZjZjkwZDUsIDB4MTViMywgMHgxMWQyLCB7MHg5MywgMHgyZSwgMHgwMCwg
MHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMn19OyByZXR1cm4gaWlkOyB9CgogIHZpcnR1YWwg
bnNyZXN1bHQgQ3JlYXRlUm9vdE5hbWVTcGFjZShuc0lOYW1lU3BhY2UqJiBhUm9vdE5hbWVTcGFj
ZSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyTmFtZVNwYWNlKGNvbnN0IG5zQVJl
YWRhYmxlU3RyaW5nJiBhVVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJJbnQzMiYgYU5hbWVTcGFjZUlEKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0TmFtZVNwYWNlVVJJKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0FXcml0YWJsZVN0cmlu
ZyYgYVVSSSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZVNwYWNlSUQoY29uc3QgbnNB
UmVhZGFibGVTdHJpbmcmIGFVUkksIFBSSW50MzImIGFOYW1lU3BhY2VJRCkgPSAwOwp9OwoKZXh0
ZXJuIG5zcmVzdWx0CiAgTlNfTmV3TmFtZVNwYWNlTWFuYWdlcihuc0lOYW1lU3BhY2VNYW5hZ2Vy
KiogYUluc3RhbmNlUHRyUmVzdWx0KTsKIyA1NSAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIK
IyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NSFRNTElucHV0RWxlbWVudC5oIiAx
CiMgNTYgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zTmV0Q0lELmgiIDEKIyA1NyAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKCgoj
IDEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIiAxCiMgNjAg
Im5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L25zSUlPU2VydmljZS5oIiAxCiMgMTcgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJT1Nl
cnZpY2UuaCIKY2xhc3MgbnNJUHJvdG9jb2xIYW5kbGVyOwoKY2xhc3MgbnNJQ2hhbm5lbDsKCmNs
YXNzIG5zSVVSSTsKIyAzMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlPU2VydmljZS5o
IgpjbGFzcyBuc0lJT1NlcnZpY2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBz
dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4
YWI3YzNhODQsIDB4ZDQ4OCwgMHgxMWQzLCB7IDB4OGMsIDB4ZGEsIDB4MDAsIDB4NjAsIDB4YjAs
IDB4ZmMsIDB4MTQsIDB4YTMgfX07IHJldHVybiBpaWQ7fQojIDQzICIuLi8uLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbnNJSU9TZXJ2aWNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm90b2NvbEhh
bmRsZXIoY29uc3QgY2hhciAqc2NoZW1lLCBuc0lQcm90b2NvbEhhbmRsZXIgKipfcmV0dmFsKSA9
IDA7CiMgNTYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IE5ld1VSSShjb25zdCBjaGFyICphU3BlYywgbnNJVVJJICphQmFzZVVSSSwg
bnNJVVJJICoqX3JldHZhbCkgPSAwOwojIDc0ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
SU9TZXJ2aWNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBOZXdDaGFubmVsRnJvbVVSSShuc0lVUkkg
KmFVUkksIG5zSUNoYW5uZWwgKipfcmV0dmFsKSA9IDA7CiMgOTIgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld0NoYW5uZWwoY29u
c3QgY2hhciAqYVNwZWMsIG5zSVVSSSAqYUJhc2VVUkksIG5zSUNoYW5uZWwgKipfcmV0dmFsKSA9
IDA7CiMgMTAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSU9TZXJ2aWNlLmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRPZmZsaW5lKFBSQm9vbCAqYU9mZmxpbmUpID0gMDsKICB2aXJ0dWFs
IG5zcmVzdWx0IFNldE9mZmxpbmUoUFJCb29sIGFPZmZsaW5lKSA9IDA7CiMgMTIwICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJSU9TZXJ2aWNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFeHRy
YWN0U2NoZW1lKGNvbnN0IGNoYXIgKnVybFN0cmluZywgUFJVaW50MzIgKnNjaGVtZVN0YXJ0UG9z
LCBQUlVpbnQzMiAqc2NoZW1lRW5kUG9zLCBjaGFyICoqc2NoZW1lKSA9IDA7CgoKCgogIGVudW0g
eyB1cmxfU2NoZW1lID0gMSB9OwoKICBlbnVtIHsgdXJsX1VzZXJuYW1lID0gMiB9OwoKICBlbnVt
IHsgdXJsX1Bhc3N3b3JkID0gNCB9OwoKICBlbnVtIHsgdXJsX0hvc3QgPSA4IH07CgogIGVudW0g
eyB1cmxfRGlyZWN0b3J5ID0gMTYgfTsKCiAgZW51bSB7IHVybF9GaWxlQmFzZU5hbWUgPSAzMiB9
OwoKICBlbnVtIHsgdXJsX0ZpbGVFeHRlbnNpb24gPSA2NCB9OwoKICBlbnVtIHsgdXJsX1BhcmFt
ID0gMTI4IH07CgogIGVudW0geyB1cmxfUXVlcnkgPSAyNTYgfTsKCiAgZW51bSB7IHVybF9SZWYg
PSA1MTIgfTsKCiAgZW51bSB7IHVybF9Gb3JjZWQgPSAxMDI0IH07CiMgMTU1ICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJSU9TZXJ2aWNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFc2NhcGUo
Y29uc3QgY2hhciAqc3RyLCBQUkludDE2IG1hc2ssIGNoYXIgKipfcmV0dmFsKSA9IDA7CiMgMTY0
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSU9TZXJ2aWNlLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBVbmVzY2FwZShjb25zdCBjaGFyICpzdHIsIGNoYXIgKipfcmV0dmFsKSA9IDA7CiMgMTcz
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJSU9TZXJ2aWNlLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBFeHRyYWN0UG9ydChjb25zdCBjaGFyICpzdHIsIFBSSW50MzIgKl9yZXR2YWwpID0gMDsK
IyAxODggIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJT1NlcnZpY2UuaCIKICB2aXJ0dWFs
IG5zcmVzdWx0IFJlc29sdmVSZWxhdGl2ZVBhdGgoY29uc3QgY2hhciAqcmVsYXRpdmVQYXRoLCBj
b25zdCBjaGFyICpiYXNlUGF0aCwgY2hhciAqKl9yZXR2YWwpID0gMDsKCn07CiMgNjEgIm5zRm9y
bUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVVS
SS5oIiAxCiMgNjEgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lVUkkuaCIKY2xhc3MgbnNJ
VVJJIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlE
JiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDA3YTIyY2MwLCAweDBjZTUs
IDB4MTFkMywgeyAweDkzLCAweDMxLCAweDAwLCAweDEwLCAweDRiLCAweGEwLCAweGZkLCAweDQw
IH19OyByZXR1cm4gaWlkO30KIyA3MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVVSSS5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3BlYyhjaGFyICogKmFTcGVjKSA9IDA7CiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXRTcGVjKGNvbnN0IGNoYXIgKiBhU3BlYykgPSAwOwoKCgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldFByZVBhdGgoY2hhciAqICphUHJlUGF0aCkgPSAwOwogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0UHJlUGF0aChjb25zdCBjaGFyICogYVByZVBhdGgpID0gMDsKIyA5MyAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVVSSS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2No
ZW1lKGNoYXIgKiAqYVNjaGVtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2NoZW1lKGNv
bnN0IGNoYXIgKiBhU2NoZW1lKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVI
b3N0KGNoYXIgKiAqYVByZUhvc3QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByZUhvc3Qo
Y29uc3QgY2hhciAqIGFQcmVIb3N0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVzZXJu
YW1lKGNoYXIgKiAqYVVzZXJuYW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRVc2VybmFt
ZShjb25zdCBjaGFyICogYVVzZXJuYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBh
c3N3b3JkKGNoYXIgKiAqYVBhc3N3b3JkKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQYXNz
d29yZChjb25zdCBjaGFyICogYVBhc3N3b3JkKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRIb3N0KGNoYXIgKiAqYUhvc3QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhvc3Qo
Y29uc3QgY2hhciAqIGFIb3N0KSA9IDA7CiMgMTMwICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJVVJJLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQb3J0KFBSSW50MzIgKmFQb3J0KSA9IDA7
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQb3J0KFBSSW50MzIgYVBvcnQpID0gMDsKCgoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRQYXRoKGNoYXIgKiAqYVBhdGgpID0gMDsKICB2aXJ0dWFsIG5z
cmVzdWx0IFNldFBhdGgoY29uc3QgY2hhciAqIGFQYXRoKSA9IDA7CiMgMTUxICIuLi8uLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbnNJVVJJLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFcXVhbHMobnNJVVJJ
ICpvdGhlciwgUFJCb29sICpfcmV0dmFsKSA9IDA7CiMgMTYwICIuLi8uLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJVVJJLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTY2hlbWVJcyhjb25zdCBjaGFyICpz
Y2hlbWUsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDE2OSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVVSSS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xvbmUobnNJVVJJICoqX3JldHZhbCkg
PSAwOwojIDE3OCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVVSSS5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgUmVzb2x2ZShjb25zdCBjaGFyICpyZWxhdGl2ZVBhdGgsIGNoYXIgKipfcmV0dmFs
KSA9IDA7Cgp9OwojIDYyICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIgMgojIDEgIi4uLy4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lTdHJpbmdCdW5kbGUuaCIgMQojIDE4ICIuLi8uLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbnNJU3RyaW5nQnVuZGxlLmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUxvY2FsZS5oIiAxCiMgMzIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMb2Nh
bGUuaCIKY2xhc3MgbnNJTG9jYWxlIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAg
c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw
eDIxMDM1ZWUwLCAweDQ1NTYsIDB4MTFkMywgeyAweDkxLCAweGNkLCAweDAwLCAweDEwLCAweDVh
LCAweGEzLCAweGY3LCAweGRjIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0Q2F0ZWdvcnkoY29uc3QgUFJVbmljaGFyICpjYXRlZ29yeSwgUFJVbmljaGFyICoqX3JldHZh
bCkgPSAwOwoKfTsKIyAxOSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0cmluZ0J1bmRs
ZS5oIiAyCgoKCgoKCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsZS5oIiAx
CiMgMjYgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHJpbmdCdW5kbGUuaCIgMgojIDQz
ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3RyaW5nQnVuZGxlLmgiCnR5cGVkZWYgbnNy
ZXN1bHQgKCogbnNTdHJCdW5kbGVMb2FkZWRGdW5jKSAodm9pZCAqLCBjb25zdCBjaGFyICosIHZv
aWQgKik7CiMgNTIgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHJpbmdCdW5kbGUuaCIK
Y2xhc3MgbnNJU3RyaW5nQnVuZGxlIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAg
c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw
eGQ4NWExN2MyLCAweGFhN2MsIDB4MTFkMiwgeyAweDliLCAweDhjLCAweDAwLCAweDgwLCAweDVm
LCAweDhhLCAweDE2LCAweGQ5IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0U3RyaW5nRnJvbUlEKFBSSW50MzIgYUlELCBQUlVuaWNoYXIgKipfcmV0dmFsKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0cmluZ0Zyb21OYW1lKGNvbnN0IFBSVW5pY2hhciAqYU5h
bWUsIFBSVW5pY2hhciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRm9ybWF0
U3RyaW5nRnJvbUlEKFBSSW50MzIgYUlELCBjb25zdCBQUlVuaWNoYXIgKipwYXJhbXMsIFBSVWlu
dDMyIGxlbmd0aCwgUFJVbmljaGFyICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBGb3JtYXRTdHJpbmdGcm9tTmFtZShjb25zdCBQUlVuaWNoYXIgKmFOYW1lLCBjb25zdCBQUlVu
aWNoYXIgKipwYXJhbXMsIFBSVWludDMyIGxlbmd0aCwgUFJVbmljaGFyICoqX3JldHZhbCkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbnVtZXJhdGlvbihuc0lCaWRpcmVjdGlvbmFsRW51
bWVyYXRvciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2ltcGxlRW51
bWVyYXRpb24obnNJU2ltcGxlRW51bWVyYXRvciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0TG9hZGVkKFBSQm9vbCAqYUxvYWRlZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1
bHQgU2V0TG9hZGVkKFBSQm9vbCBhTG9hZGVkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJl
Z2lzdGVyQ2FsbGJhY2sobnNTdHJCdW5kbGVMb2FkZWRGdW5jIGNhbGxiYWNrLCB2b2lkICogY2xv
c3VyZSkgPSAwOwoKfTsKIyAyMDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdHJpbmdC
dW5kbGUuaCIKY2xhc3MgbnNJU3RyaW5nQnVuZGxlU2VydmljZSA6IHB1YmxpYyBuc0lTdXBwb3J0
cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25z
dCBuc0lJRCBpaWQgPSB7MHhkODVhMTdjMCwgMHhhYTdjLCAweDExZDIsIHsgMHg5YiwgMHg4Yywg
MHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHgxNiwgMHhkOSB9fTsgcmV0dXJuIGlpZDt9CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUJ1bmRsZShjb25zdCBjaGFyICphVVJMU3BlYywgbnNJTG9j
YWxlICphTG9jYWxlLCBuc0lTdHJpbmdCdW5kbGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IENyZWF0ZUFzeW5jQnVuZGxlKGNvbnN0IGNoYXIgKmFVUkxTcGVjLCBuc0lTdHJp
bmdCdW5kbGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUV4dGVu
c2libGVCdW5kbGUoY29uc3QgY2hhciAqYVJlZ2lzdHJ5S2V5LCBuc0lTdHJpbmdCdW5kbGUgKipf
cmV0dmFsKSA9IDA7CiMgMjIzICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3RyaW5nQnVu
ZGxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBGb3JtYXRTdGF0dXNNZXNzYWdlKG5zcmVzdWx0IGFT
dGF0dXMsIGNvbnN0IFBSVW5pY2hhciAqYVN0YXR1c0FyZywgUFJVbmljaGFyICoqX3JldHZhbCkg
PSAwOwojIDIzNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0cmluZ0J1bmRsZS5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgRmx1c2hCdW5kbGVzKHZvaWQpID0gMDsKCn07CiMgNjMgIm5zRm9y
bUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRl
eHRDb250ZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRDb250
ZW50LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5b3V0LmgiIDEKIyAyNiAi
Li4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRDb250ZW50LmgiIDIKIyAxICIuLi8uLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbnNJQ29udGVudC5oIiAxCiMgMjcgIi4uLy4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lUZXh0Q29udGVudC5oIiAyCmNsYXNzIG5zU3RyaW5nOwpjbGFzcyBuc1RleHRG
cmFnbWVudDsKIyAzOCAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSVRleHRDb250ZW50Lmgi
CmNsYXNzIG5zSVRleHRDb250ZW50IDogcHVibGljIG5zSUNvbnRlbnQgewpwdWJsaWM6CiAgc3Rh
dGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7IHN0YXRpYyBuc0lJRCBpaWQgPSB7MHhhNmNmOTA2
NSwgMHgxNWIzLCAweDExZDIsIHsweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAw
eGRkLCAweDMyfX07IHJldHVybiBpaWQ7IH0KCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUZXh0
KGNvbnN0IG5zVGV4dEZyYWdtZW50KiogYUZyYWdtZW50c1Jlc3VsdCkgPSAwOwoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldFRleHRMZW5ndGgoUFJJbnQzMiogYUxlbmd0aFJlc3VsdCkgPSAwOwoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvcHlUZXh0KG5zQVdyaXRhYmxlU3RyaW5nJiBhUmVzdWx0
KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRleHQoY29uc3QgUFJVbmljaGFyKiBh
QnVmZmVyLAogICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFMZW5ndGgsCiAgICAgICAgICAg
ICAgICAgICAgIFBSQm9vbCBhTm90aWZ5KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dFRleHQoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTdHIsCiAgICAgICAgICAgICAgICAgICAg
IFBSQm9vbCBhTm90aWZ5KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRleHQoY29u
c3QgY2hhciogYUJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTGVuZ3RoLAog
ICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5vdGlmeSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IElzT25seVdoaXRlc3BhY2UoUFJCb29sKiBhUmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IENsb25lQ29udGVudChQUkJvb2wgYUNsb25lVGV4dCwgbnNJVGV4dENvbnRl
bnQqKiBhQ2xvbmUpID0gMDsKfTsKIyAxMDAgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lU
ZXh0Q29udGVudC5oIgpjbGFzcyBuc0lUZXh0Q29udGVudENoYW5nZURhdGEgOiBwdWJsaWMgbnNJ
U3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj
IGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDVlLCAweDE1YjMsIDB4MTFkMiwgezB4OTMsIDB4
MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzJ9fTsgcmV0dXJuIGlpZDt9OwoK
ICBlbnVtIENoYW5nZVR5cGUgewogICAgSW5zZXJ0LAogICAgQXBwZW5kLAogICAgUmVwbGFjZQog
IH07CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoYW5nZVR5cGUoQ2hhbmdlVHlwZSogYVJl
c3VsdCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEluc2VydERhdGEoUFJJbnQzMiogYU9m
ZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiogYUluc2VydExlbmd0aCkg
PSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFwcGVuZERhdGEoUFJJbnQzMiogYU9mZnNldCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiogYUFwcGVuZExlbmd0aCkgPSAwOwoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJlcGxhY2VEYXRhKFBSSW50MzIqIGFPZmZzZXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyKiBhU291cmNlTGVuZ3RoLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJJbnQzMiogYVJlcGxhY2VMZW5ndGgpID0gMDsKfTsKCgpleHRl
cm4gbnNyZXN1bHQKTlNfTmV3VGV4dE5vZGUobnNJQ29udGVudCoqIGFSZXN1bHQpOwoKZXh0ZXJu
IG5zcmVzdWx0Ck5TX05ld0NvbW1lbnROb2RlKG5zSUNvbnRlbnQqKiBhUmVzdWx0KTsKIyA2NCAi
bnNGb3JtQ29udHJvbEhlbHBlci5jcHAiIDIKIyAxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bnNJU3VwcG9ydHNBcnJheS5oIiAxCiMgMTQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lT
dXBwb3J0c0FycmF5LmgiCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbGxlY3Rp
b24uaCIgMQojIDI5ICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29sbGVjdGlvbi5oIgpj
bGFzcyBuc0lDb2xsZWN0aW9uIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3Rh
dGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDgz
YjYwMTljLCAweGNiYzQsIDB4MTFkMiwgeyAweDhjLCAweGNhLCAweDAwLCAweDYwLCAweGIwLCAw
eGZjLCAweDE0LCAweGEzIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgQ291
bnQoUFJVaW50MzIgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RWxlbWVu
dEF0KFBSVWludDMyIGluZGV4LCBuc0lTdXBwb3J0cyAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgUXVlcnlFbGVtZW50QXQoUFJVaW50MzIgaW5kZXgsIGNvbnN0IG5zSUlEICYg
dXVpZCwgdm9pZCAqICpyZXN1bHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RWxlbWVu
dEF0KFBSVWludDMyIGluZGV4LCBuc0lTdXBwb3J0cyAqaXRlbSkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBBcHBlbmRFbGVtZW50KG5zSVN1cHBvcnRzICppdGVtKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IFJlbW92ZUVsZW1lbnQobnNJU3VwcG9ydHMgKml0ZW0pID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgRW51bWVyYXRlKG5zSUVudW1lcmF0b3IgKipfcmV0dmFsKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IENsZWFyKHZvaWQpID0gMDsKCn07CiMgMTUgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lTdXBwb3J0c0FycmF5LmgiIDIKCgoKCgoKY2xhc3MgbnNJQmlkaXJlY3Rp
b25hbEVudW1lcmF0b3I7CiMgMzQgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0
c0FycmF5LmgiCnR5cGVkZWYgUFJCb29sICgqbnNJU3VwcG9ydHNBcnJheUVudW1GdW5jKShuc0lT
dXBwb3J0cyogYUVsZW1lbnQsIHZvaWQgKmFEYXRhKTsKIyA0NCAiLi4vLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVN1cHBvcnRzQXJyYXkuaCIKY2xhc3MgbnNJU3VwcG9ydHNBcnJheSA6IHB1Ymxp
YyBuc0lDb2xsZWN0aW9uIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo
KSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDc5MWVhZmEwLCAweGI5ZTYsIDB4MTFkMSwg
eyAweDgwLCAweDMxLCAweDAwLCAweDYwLCAweDA4LCAweDE1LCAweDliLCAweDVhIH19OyByZXR1
cm4gaWlkO30KCgogIHZpcnR1YWwgUFJCb29sIEVxdWFscyhjb25zdCBuc0lTdXBwb3J0c0FycmF5
ICpvdGhlcikgPSAwOwoKCiAgdmlydHVhbCBuc0lTdXBwb3J0cyAqIEVsZW1lbnRBdChQUlVpbnQz
MiBhSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgUFJJbnQzMiBJbmRleE9mKGNvbnN0IG5zSVN1cHBv
cnRzICphUG9zc2libGVFbGVtZW50KSA9IDA7CgoKICB2aXJ0dWFsIFBSSW50MzIgSW5kZXhPZlN0
YXJ0aW5nQXQoY29uc3QgbnNJU3VwcG9ydHMgKmFQb3NzaWJsZUVsZW1lbnQsIFBSVWludDMyIGFT
dGFydEluZGV4KSA9IDA7CgoKICB2aXJ0dWFsIFBSSW50MzIgTGFzdEluZGV4T2YoY29uc3QgbnNJ
U3VwcG9ydHMgKmFQb3NzaWJsZUVsZW1lbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
SW5kZXhPZihuc0lTdXBwb3J0cyAqYVBvc3NpYmxlRWxlbWVudCwgUFJJbnQzMiAqX3JldHZhbCkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbmRleE9mU3RhcnRpbmdBdChuc0lTdXBwb3J0
cyAqYVBvc3NpYmxlRWxlbWVudCwgUFJVaW50MzIgYVN0YXJ0SW5kZXgsIFBSSW50MzIgKl9yZXR2
YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFzdEluZGV4T2YobnNJU3VwcG9ydHMg
KmFQb3NzaWJsZUVsZW1lbnQsIFBSSW50MzIgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgUFJC
b29sIEluc2VydEVsZW1lbnRBdChuc0lTdXBwb3J0cyAqYUVsZW1lbnQsIFBSVWludDMyIGFJbmRl
eCkgPSAwOwoKCiAgdmlydHVhbCBQUkJvb2wgUmVwbGFjZUVsZW1lbnRBdChuc0lTdXBwb3J0cyAq
YUVsZW1lbnQsIFBSVWludDMyIGFJbmRleCkgPSAwOwoKCiAgdmlydHVhbCBQUkJvb2wgUmVtb3Zl
RWxlbWVudEF0KFBSVWludDMyIGFJbmRleCkgPSAwOwoKCiAgdmlydHVhbCBQUkJvb2wgUmVtb3Zl
TGFzdEVsZW1lbnQoY29uc3QgbnNJU3VwcG9ydHMgKmFFbGVtZW50KSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IERlbGV0ZUxhc3RFbGVtZW50KG5zSVN1cHBvcnRzICphRWxlbWVudCkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBEZWxldGVFbGVtZW50QXQoUFJVaW50MzIgYUluZGV4KSA9IDA7
CgoKICB2aXJ0dWFsIFBSQm9vbCBBcHBlbmRFbGVtZW50cyhuc0lTdXBwb3J0c0FycmF5ICphRWxl
bWVudHMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGFjdCh2b2lkKSA9IDA7CgoKICB2
aXJ0dWFsIFBSQm9vbCBFbnVtZXJhdGVGb3J3YXJkcyhuc0lTdXBwb3J0c0FycmF5RW51bUZ1bmMg
YUZ1bmMsIHZvaWQgKiBhRGF0YSkgPSAwOwoKCiAgdmlydHVhbCBQUkJvb2wgRW51bWVyYXRlQmFj
a3dhcmRzKG5zSVN1cHBvcnRzQXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCAqIGFEYXRhKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENsb25lKG5zSVN1cHBvcnRzQXJyYXkgKipfcmV0dmFsKSA9
IDA7Cgpwcml2YXRlOgoKICB2aXJ0dWFsIFBSQm9vbCBvcGVyYXRvcj09KGNvbnN0IG5zSVN1cHBv
cnRzQXJyYXkmIG90aGVyKSA9IDA7CiAgdmlydHVhbCBuc0lTdXBwb3J0cyogb3BlcmF0b3JbXShQ
UlVpbnQzMiBhSW5kZXgpID0gMDsKfTsKIyAzMDMgIi4uLy4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lTdXBwb3J0c0FycmF5LmgiCmV4dGVybiBuc3Jlc3VsdApOU19OZXdJU3VwcG9ydHNBcnJheShu
c0lTdXBwb3J0c0FycmF5KiogYUluc3RhbmNlUHRyUmVzdWx0KTsKCmV4dGVybiBuc3Jlc3VsdApO
U19OZXdJU3VwcG9ydHNBcnJheUVudW1lcmF0b3IobnNJU3VwcG9ydHNBcnJheSogYXJyYXksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lCaWRpcmVjdGlvbmFsRW51bWVyYXRvciog
KmFJbnN0YW5jZVB0clJlc3VsdCk7CiMgNjUgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiAyCiMg
MSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zWFBJRExTdHJpbmcuaCIgMQojIDkwICIuLi8u
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbnNYUElETFN0cmluZy5oIgojIDEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDkxICIuLi8uLi8uLi8uLi9kaXN0L2luY2x1ZGUvbnNY
UElETFN0cmluZy5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29tLmgiIDEK
IyA5MiAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zWFBJRExTdHJpbmcuaCIgMgojIDEgIi9H
TS9oZGQ5L21vemlsbGEvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyA5
MyAiLi4vLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25zWFBJRExTdHJpbmcuaCIgMgojIDEwOCAiLi4v
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL25zWFBJRExTdHJpbmcuaCIKY2xhc3MgbnNYUElETFN0cmlu
ZyB7CnByaXZhdGU6CiAgICBQUlVuaWNoYXIqIG1CdWY7CiAgICBQUkJvb2wgbUJ1Zk93bmVyOwoK
ICAgIFBSVW5pY2hhcioqIFN0YXJ0QXNzaWdubWVudEJ5VmFsdWUoKTsKICAgIGNvbnN0IFBSVW5p
Y2hhcioqIFN0YXJ0QXNzaWdubWVudEJ5UmVmZXJlbmNlKCk7CgpwdWJsaWM6CgoKCiAgICBuc1hQ
SURMU3RyaW5nKCkgOiBtQnVmKDApLCBtQnVmT3duZXIoMCkge30KCiAgICB+bnNYUElETFN0cmlu
ZygpOwoKCgoKICAgIG9wZXJhdG9yIGNvbnN0IFBSVW5pY2hhciooKSBjb25zdCB7IHJldHVybiBn
ZXQoKTsgfQoKCgoKICAgIGNvbnN0IFBSVW5pY2hhciogZ2V0KCkgY29uc3QgeyByZXR1cm4gbUJ1
ZjsgfQoKCgoKCiAgICBzdGF0aWMgUFJVbmljaGFyKiBDb3B5KGNvbnN0IFBSVW5pY2hhciogYVN0
cmluZyk7CgoKCgogICAgY2xhc3MgR2V0dGVyQ29waWVzIHsKICAgIHByaXZhdGU6CiAgICAgICAg
bnNYUElETFN0cmluZyYgbVhQSURMU3RyaW5nOwoKICAgIHB1YmxpYzoKICAgICAgICBHZXR0ZXJD
b3BpZXMobnNYUElETFN0cmluZyYgYVhQSURMU3RyaW5nKQogICAgICAgICAgICA6IG1YUElETFN0
cmluZyhhWFBJRExTdHJpbmcpIHt9CgogICAgICAgIG9wZXJhdG9yIFBSVW5pY2hhcioqKCkgewog
ICAgICAgICAgICByZXR1cm4gbVhQSURMU3RyaW5nLlN0YXJ0QXNzaWdubWVudEJ5VmFsdWUoKTsK
ICAgICAgICB9CgogICAgICAgIGZyaWVuZCBHZXR0ZXJDb3BpZXMgZ2V0dGVyX0NvcGllcyhuc1hQ
SURMU3RyaW5nJiBhWFBJRExTdHJpbmcpOwogICAgfTsKCiAgICBmcmllbmQgY2xhc3MgR2V0dGVy
Q29waWVzOwoKCgoKICAgIGNsYXNzIEdldHRlclNoYXJlcyB7CiAgICBwcml2YXRlOgogICAgICAg
IG5zWFBJRExTdHJpbmcmIG1YUElETFN0cmluZzsKCiAgICBwdWJsaWM6CiAgICAgICAgR2V0dGVy
U2hhcmVzKG5zWFBJRExTdHJpbmcmIGFYUElETFN0cmluZykKICAgICAgICAgICAgOiBtWFBJRExT
dHJpbmcoYVhQSURMU3RyaW5nKSB7fQoKICAgICAgICBvcGVyYXRvciBjb25zdCBQUlVuaWNoYXIq
KigpIHsKICAgICAgICAgICAgcmV0dXJuIG1YUElETFN0cmluZy5TdGFydEFzc2lnbm1lbnRCeVJl
ZmVyZW5jZSgpOwogICAgICAgIH0KCiAgICAgICAgZnJpZW5kIEdldHRlclNoYXJlcyBnZXR0ZXJf
U2hhcmVzKG5zWFBJRExTdHJpbmcmIGFYUElETFN0cmluZyk7CiAgICB9OwoKICAgIGZyaWVuZCBj
bGFzcyBHZXR0ZXJTaGFyZXM7Cgpwcml2YXRlOgoKICAgIG5zWFBJRExTdHJpbmcobnNYUElETFN0
cmluZyYgKSB7fQogICAgdm9pZCBvcGVyYXRvcj0obnNYUElETFN0cmluZyYgKSB7fQp9OwoKCgoK
CgppbmxpbmUgbnNYUElETFN0cmluZzo6R2V0dGVyQ29waWVzCmdldHRlcl9Db3BpZXMobnNYUElE
TFN0cmluZyYgYVhQSURMU3RyaW5nKQp7CiAgICByZXR1cm4gbnNYUElETFN0cmluZzo6R2V0dGVy
Q29waWVzKGFYUElETFN0cmluZyk7Cn0KCgoKCgppbmxpbmUgbnNYUElETFN0cmluZzo6R2V0dGVy
U2hhcmVzCmdldHRlcl9TaGFyZXMobnNYUElETFN0cmluZyYgYVhQSURMU3RyaW5nKQp7CiAgICBy
ZXR1cm4gbnNYUElETFN0cmluZzo6R2V0dGVyU2hhcmVzKGFYUElETFN0cmluZyk7Cn0KCgoKaW5s
aW5lClBSQm9vbApvcGVyYXRvcj09KGNvbnN0IFBSVW5pY2hhciogbGhzLCBjb25zdCBuc1hQSURM
U3RyaW5nJiByaHMpCnsKICAgIHJldHVybiBsaHMgPT0gc3RhdGljX2Nhc3Q8IGNvbnN0IFBSVW5p
Y2hhciogPihyaHMpOwp9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPT0oY29uc3QgbnNYUElETFN0
cmluZyYgbGhzLCBjb25zdCBQUlVuaWNoYXIqIHJocykKewogICAgcmV0dXJuIHN0YXRpY19jYXN0
PCBjb25zdCBQUlVuaWNoYXIqID4obGhzKSA9PSByaHM7Cn0KIyAyNTEgIi4uLy4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1hQSURMU3RyaW5nLmgiCmNsYXNzIG5zWFBJRExDU3RyaW5nIHsKcHJpdmF0
ZToKICAgIGNoYXIqIG1CdWY7CiAgICBQUkJvb2wgbUJ1Zk93bmVyOwoKICAgIGNoYXIqKiBTdGFy
dEFzc2lnbm1lbnRCeVZhbHVlKCk7CiAgICBjb25zdCBjaGFyKiogU3RhcnRBc3NpZ25tZW50QnlS
ZWZlcmVuY2UoKTsKCnB1YmxpYzoKCgoKICAgIG5zWFBJRExDU3RyaW5nKCkgOiBtQnVmKDApLCBt
QnVmT3duZXIoMCkge30KCiAgICB+bnNYUElETENTdHJpbmcoKTsKCgoKCgogICAgbnNYUElETENT
dHJpbmcmIG9wZXJhdG9yPShjb25zdCBjaGFyKiBhU3RyaW5nKTsKCgoKCiAgICBvcGVyYXRvciBj
b25zdCBjaGFyKigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CgoKCgogICAgY29uc3QgY2hhciog
Z2V0KCkgY29uc3QgeyByZXR1cm4gbUJ1ZjsgfQoKCgoKCiAgICBzdGF0aWMgY2hhciogQ29weShj
b25zdCBjaGFyKiBhU3RyaW5nKTsKCgoKCiAgICBjbGFzcyBHZXR0ZXJDb3BpZXMgewogICAgcHJp
dmF0ZToKICAgICAgICBuc1hQSURMQ1N0cmluZyYgbVhQSURMU3RyaW5nOwoKICAgIHB1YmxpYzoK
ICAgICAgICBHZXR0ZXJDb3BpZXMobnNYUElETENTdHJpbmcmIGFYUElETFN0cmluZykKICAgICAg
ICAgICAgOiBtWFBJRExTdHJpbmcoYVhQSURMU3RyaW5nKSB7fQoKICAgICAgICBvcGVyYXRvciBj
aGFyKiooKSB7CiAgICAgICAgICAgIHJldHVybiBtWFBJRExTdHJpbmcuU3RhcnRBc3NpZ25tZW50
QnlWYWx1ZSgpOwogICAgICAgIH0KCiAgICAgICAgZnJpZW5kIEdldHRlckNvcGllcyBnZXR0ZXJf
Q29waWVzKG5zWFBJRExDU3RyaW5nJiBhWFBJRExTdHJpbmcpOwogICAgfTsKCiAgICBmcmllbmQg
Y2xhc3MgR2V0dGVyQ29waWVzOwoKCgoKICAgIGNsYXNzIEdldHRlclNoYXJlcyB7CiAgICBwcml2
YXRlOgogICAgICAgIG5zWFBJRExDU3RyaW5nJiBtWFBJRExTdHJpbmc7CgogICAgcHVibGljOgog
ICAgICAgIEdldHRlclNoYXJlcyhuc1hQSURMQ1N0cmluZyYgYVhQSURMU3RyaW5nKQogICAgICAg
ICAgICA6IG1YUElETFN0cmluZyhhWFBJRExTdHJpbmcpIHt9CgogICAgICAgIG9wZXJhdG9yIGNv
bnN0IGNoYXIqKigpIHsKICAgICAgICAgICAgcmV0dXJuIG1YUElETFN0cmluZy5TdGFydEFzc2ln
bm1lbnRCeVJlZmVyZW5jZSgpOwogICAgICAgIH0KCiAgICAgICAgZnJpZW5kIEdldHRlclNoYXJl
cyBnZXR0ZXJfU2hhcmVzKG5zWFBJRExDU3RyaW5nJiBhWFBJRExTdHJpbmcpOwogICAgfTsKCiAg
ICBmcmllbmQgY2xhc3MgR2V0dGVyU2hhcmVzOwoKcHJpdmF0ZToKCiAgICBuc1hQSURMQ1N0cmlu
Zyhuc1hQSURMQ1N0cmluZyYgKSB7fQogICAgdm9pZCBvcGVyYXRvcj0obnNYUElETENTdHJpbmcm
ICkge30KfTsKCgoKCgppbmxpbmUgbnNYUElETENTdHJpbmc6OkdldHRlckNvcGllcwpnZXR0ZXJf
Q29waWVzKG5zWFBJRExDU3RyaW5nJiBhWFBJRExTdHJpbmcpCnsKICAgIHJldHVybiBuc1hQSURM
Q1N0cmluZzo6R2V0dGVyQ29waWVzKGFYUElETFN0cmluZyk7Cn0KCgoKCgoKaW5saW5lIG5zWFBJ
RExDU3RyaW5nOjpHZXR0ZXJTaGFyZXMKZ2V0dGVyX1NoYXJlcyhuc1hQSURMQ1N0cmluZyYgYVhQ
SURMU3RyaW5nKQp7CiAgICByZXR1cm4gbnNYUElETENTdHJpbmc6OkdldHRlclNoYXJlcyhhWFBJ
RExTdHJpbmcpOwp9CgoKaW5saW5lClBSQm9vbApvcGVyYXRvcj09KGNvbnN0IGNoYXIqIGxocywg
Y29uc3QgbnNYUElETENTdHJpbmcmIHJocykKewogICAgcmV0dXJuIGxocyA9PSBzdGF0aWNfY2Fz
dDwgY29uc3QgY2hhciogPihyaHMpOwp9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPT0oY29uc3Qg
bnNYUElETENTdHJpbmcmIGxocywgY29uc3QgY2hhciogcmhzKQp7CiAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8IGNvbnN0IGNoYXIqID4obGhzKSA9PSByaHM7Cn0KIyA2NiAibnNGb3JtQ29udHJvbEhl
bHBlci5jcHAiIDIKCnN0YXRpYyBjb25zdCBuc0NJRCBrSU9TZXJ2aWNlQ0lEID0geyAweDlhYzll
NzcwLCAweDE4YmMsIDB4MTFkMywgezB4OTMsIDB4MzcsIDB4MDAsIDB4MTAsIDB4NGIsIDB4YTAs
IDB4ZmQsIDB4NDB9IH07CnN0YXRpYyBjb25zdCBuc0NJRCBrU3RyaW5nQnVuZGxlU2VydmljZUNJ
RCA9IHsgMHhkODVhMTdjMSwgMHhhYTdjLCAweDExZDIsIHsgMHg5YiwgMHg4YywgMHgwLCAweDgw
LCAweDVmLCAweDhhLCAweDE2LCAweGQ5IH0gfTsKCgoKc3RhdGljIGNvbnN0IG5zSUlEIGtJU3Vw
cG9ydHNJSUQgPSB7IDB4MDAwMDAwMDAsIDB4MDAwMCwgMHgwMDAwLCB7MHhjMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0Nn0gfTsKc3RhdGljIGNvbnN0IG5zSUlEIGtW
aWV3Q0lEID0geyAweGM5NWYxODMyLCAweGMzNzYsIDB4MTFkMSwgezB4YjcsIDB4MjEsIDB4MCwg
MHg2MCwgMHg4LCAweDkxLCAweGQ4LCAweGM5fX07CiMgODYgIm5zRm9ybUNvbnRyb2xIZWxwZXIu
Y3BwIgpuc0Zvcm1Db250cm9sSGVscGVyOjpuc0Zvcm1Db250cm9sSGVscGVyKCkKewogIGRvIHsg
bnNUcmFjZVJlZmNudDo6TG9nQ3Rvcigodm9pZCopdGhpcywgIm5zRm9ybUNvbnRyb2xIZWxwZXIi
LCBzaXplb2YoKnRoaXMpKTsgfSB3aGlsZSAoMCk7Cn0KCm5zRm9ybUNvbnRyb2xIZWxwZXI6On5u
c0Zvcm1Db250cm9sSGVscGVyKCkKewogIGRvIHsgbnNUcmFjZVJlZmNudDo6TG9nRHRvcigodm9p
ZCopdGhpcywgIm5zRm9ybUNvbnRyb2xIZWxwZXIiLCBzaXplb2YoKnRoaXMpKTsgfSB3aGlsZSAo
MCk7Cn0KCnZvaWQgbnNGb3JtQ29udHJvbEhlbHBlcjo6Rm9yY2VEcmF3RnJhbWUobnNJUHJlc0Nv
bnRleHQqIGFQcmVzQ29udGV4dCwgbnNJRnJhbWUgKiBhRnJhbWUpCnsKCiAgaWYgKGFGcmFtZSA9
PSAwKSB7CiAgICByZXR1cm47CiAgfQogIG5zUmVjdCByZWN0OwogIG5zSVZpZXcgKiB2aWV3Owog
IG5zUG9pbnQgcG50OwogIGFGcmFtZS0+R2V0T2Zmc2V0RnJvbVZpZXcoYVByZXNDb250ZXh0LCBw
bnQsICZ2aWV3KTsKICBhRnJhbWUtPkdldFJlY3QocmVjdCk7CiAgcmVjdC54ID0gcG50Lng7CiAg
cmVjdC55ID0gcG50Lnk7CiAgaWYgKHZpZXcgIT0gMCkgewogICAgbnNJVmlld01hbmFnZXIgKiB2
aWV3TWdyOwogICAgdmlldy0+R2V0Vmlld01hbmFnZXIodmlld01ncik7CiAgICBpZiAodmlld01n
ciAhPSAwKSB7CiAgICAgIHZpZXdNZ3ItPlVwZGF0ZVZpZXcodmlldywgcmVjdCwgMHgwMDA0KTsK
ICAgICAgZG8geyAodmlld01nciktPlJlbGVhc2UoKTsgKHZpZXdNZ3IpID0gMDsgfSB3aGlsZSAo
MCk7CiAgICB9CiAgfQoKfQoKdm9pZCBuc0Zvcm1Db250cm9sSGVscGVyOjpQbGF0Zm9ybVRvRE9N
TGluZUJyZWFrcyhuc1N0cmluZyAmYVN0cmluZykKewoKICBhU3RyaW5nLlJlcGxhY2VTdWJzdHJp
bmcoTlNfQ29udmVydEFTQ0lJdG9VQ1MyKCJcclxuIiksIE5TX0NvbnZlcnRBU0NJSXRvVUNTMigi
XG4iKSk7CgoKICBhU3RyaW5nLlJlcGxhY2VTdWJzdHJpbmcoTlNfQ29udmVydEFTQ0lJdG9VQ1My
KCJcciIpLCBOU19Db252ZXJ0QVNDSUl0b1VDUzIoIlxuIikpOwp9CgpQUkJvb2wgbnNGb3JtQ29u
dHJvbEhlbHBlcjo6R2V0Qm9vbChjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVZhbHVlKQp7CiAg
cmV0dXJuIGFWYWx1ZS5FcXVhbHMoTlNfQ29udmVydEFTQ0lJdG9VQ1MyKCIxIiwgc2l6ZW9mKCIx
IiktMSkpOwp9Cgp2b2lkIG5zRm9ybUNvbnRyb2xIZWxwZXI6OkdldEJvb2xTdHJpbmcoY29uc3Qg
UFJCb29sIGFWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
QVdyaXRhYmxlU3RyaW5nJiBhUmVzdWx0KQp7CiAgaWYgKGFWYWx1ZSkKICAgIGFSZXN1bHQuQXNz
aWduKE5TX0NvbnZlcnRBU0NJSXRvVUNTMigiMSIsIHNpemVvZigiMSIpLTEpKTsKICBlbHNlCiAg
ICBhUmVzdWx0LkFzc2lnbihOU19Db252ZXJ0QVNDSUl0b1VDUzIoIjAiLCBzaXplb2YoIjAiKS0x
KSk7Cn0KCgpuc0NvbXBhdGliaWxpdHkKbnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0UmVwQ2hhcnMo
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgY2hhciYgY2hhcjEsIGNoYXImIGNoYXIyKQp7
CiAgbnNDb21wYXRpYmlsaXR5IG1vZGU7CiAgYVByZXNDb250ZXh0LT5HZXRDb21wYXRpYmlsaXR5
TW9kZSgmbW9kZSk7CiAgaWYgKGVDb21wYXRpYmlsaXR5X1N0YW5kYXJkID09IG1vZGUpIHsKICAg
IGNoYXIxID0gJ1cnOwogICAgY2hhcjIgPSAndyc7CiAgICByZXR1cm4gZUNvbXBhdGliaWxpdHlf
U3RhbmRhcmQ7CiAgfSBlbHNlIHsKICAgIGNoYXIxID0gJ1cnOwogICAgY2hhcjIgPSAndyc7CiAg
ICByZXR1cm4gZUNvbXBhdGliaWxpdHlfTmF2UXVpcmtzOwogIH0KfQoKbnNyZXN1bHQgbnNGb3Jt
Q29udHJvbEhlbHBlcjo6R2V0RnJhbWVGb250Rk0obnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGb3JtQ29udHJv
bEZyYW1lICogYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSUZvbnRNZXRyaWNzKiogYUZvbnRNZXQpCnsKCiAgY29uc3QgbnNGb250ICogZm9udCA9IDA7
CgogIGlmICgoISgoYUZyYW1lLT5HZXRGb250KGFQcmVzQ29udGV4dCwgZm9udCkpICYgMHg4MDAw
MDAwMCkpKSB7CiAgICBuc0NPTVB0cjxuc0lEZXZpY2VDb250ZXh0PiBkZXZpY2VDb250ZXh0Owog
ICAgYVByZXNDb250ZXh0LT5HZXREZXZpY2VDb250ZXh0KGdldHRlcl9BZGRSZWZzKGRldmljZUNv
bnRleHQpKTsKICAgIGlmICghKGRldmljZUNvbnRleHQpKSBuc0RlYnVnOjpBc3NlcnRpb24oIkNv
dWxkbid0IGdldCB0aGUgZGV2aWNlIGNvbnRleHQiLCAiZGV2aWNlQ29udGV4dCIsICJuc0Zvcm1D
b250cm9sSGVscGVyLmNwcCIsIDE3MCk7CiAgICBpZiAoZm9udCAhPSAwKSB7CiAgICAgIHJldHVy
biBkZXZpY2VDb250ZXh0LT5HZXRNZXRyaWNzRm9yKCpmb250LCAqYUZvbnRNZXQpOwogICAgfQog
IH0KICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwNDAwNUwpOwp9Cgpuc3Jlc3VsdApuc0Zvcm1D
b250cm9sSGVscGVyOjpHZXRXcmFwUHJvcGVydHkobnNJQ29udGVudCAqIGFDb250ZW50LCBuc1N0
cmluZyAmYU91dFZhbHVlKQp7CiAgYU91dFZhbHVlLlNldExlbmd0aCgwKTsKICBuc3Jlc3VsdCBy
ZXN1bHQgPSAoKG5zcmVzdWx0KSAoKChQUlVpbnQzMikoMCk8PDMxKSB8ICgoUFJVaW50MzIpKDgg
KzB4NDUpPDwxNikgfCAoKFBSVWludDMyKSgxKSkpICk7CiAgbnNJSFRNTENvbnRlbnQqIGNvbnRl
bnQgPSAwOwogIGFDb250ZW50LT5RdWVyeUludGVyZmFjZShrSUhUTUxDb250ZW50SUlELCAodm9p
ZCoqKSAmY29udGVudCk7CiAgaWYgKDAgIT0gY29udGVudCkgewogICAgbnNIVE1MVmFsdWUgdmFs
dWU7CiAgICByZXN1bHQgPSBjb250ZW50LT5HZXRIVE1MQXR0cmlidXRlKG5zSFRNTEF0b21zOjp3
cmFwLCB2YWx1ZSk7CiAgICBpZiAoZUhUTUxVbml0X1N0cmluZyA9PSB2YWx1ZS5HZXRVbml0KCkp
IHsKICAgICAgdmFsdWUuR2V0U3RyaW5nVmFsdWUoYU91dFZhbHVlKTsKICAgIH0KICAgIGRvIHsg
KGNvbnRlbnQpLT5SZWxlYXNlKCk7IChjb250ZW50KSA9IDA7IH0gd2hpbGUgKDApOwogIH0KICBy
ZXR1cm4gcmVzdWx0Owp9CgoKbnNyZXN1bHQKbnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0V3JhcFBy
b3BlcnR5RW51bShuc0lDb250ZW50ICogYUNvbnRlbnQsIG5zSFRNTFRleHRXcmFwJiBhV3JhcFBy
b3ApCnsKICBuc1N0cmluZyB3cmFwOwogIGFXcmFwUHJvcCA9IGVIVE1MVGV4dFdyYXBfT2ZmOwoK
ICBuc3Jlc3VsdCByZXN1bHQgPSBHZXRXcmFwUHJvcGVydHkoYUNvbnRlbnQsIHdyYXApOwoKICBp
ZiAoKChuc3Jlc3VsdCkgKCgoUFJVaW50MzIpKDApPDwzMSkgfCAoKFBSVWludDMyKSg4ICsweDQ1
KTw8MTYpIHwgKChQUlVpbnQzMikoMSkpKSApICE9IHJlc3VsdCkgewoKICAgIG5zQXV0b1N0cmlu
ZyB3cmFwSGFyZDsgd3JhcEhhcmQuQXNzaWduV2l0aENvbnZlcnNpb24oIkhBUkQiKTsKICAgIG5z
QXV0b1N0cmluZyB3cmFwUGh5c2ljYWw7IHdyYXBQaHlzaWNhbC5Bc3NpZ25XaXRoQ29udmVyc2lv
bigiUEhZU0lDQUwiKTsKICAgIGlmICh3cmFwLkVxdWFsc0lnbm9yZUNhc2Uod3JhcEhhcmQpIHx8
CiAgICAgICAgd3JhcC5FcXVhbHNJZ25vcmVDYXNlKHdyYXBQaHlzaWNhbCkpIHsKICAgICAgYVdy
YXBQcm9wID0gZUhUTUxUZXh0V3JhcF9IYXJkOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoK
ICAgIG5zQXV0b1N0cmluZyB3cmFwU29mdDsgd3JhcFNvZnQuQXNzaWduV2l0aENvbnZlcnNpb24o
IlNPRlQiKTsKICAgIG5zQXV0b1N0cmluZyB3cmFwVmlydHVhbDsgd3JhcFZpcnR1YWwuQXNzaWdu
V2l0aENvbnZlcnNpb24oIlZJUlRVQUwiKTsKICAgIGlmICh3cmFwLkVxdWFsc0lnbm9yZUNhc2Uo
d3JhcFNvZnQpIHx8CiAgICAgICAgd3JhcC5FcXVhbHNJZ25vcmVDYXNlKHdyYXBWaXJ0dWFsKSkg
ewogICAgICBhV3JhcFByb3AgPSBlSFRNTFRleHRXcmFwX1NvZnQ7CiAgICAgIHJldHVybiByZXN1
bHQ7CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCm5zY29vcmQKbnNGb3JtQ29udHJvbEhl
bHBlcjo6Q2FsY05hdlF1aXJrU2l6aW5nKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0
KiBhUmVuZENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lGb250TWV0cmljcyogYUZvbnRNZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lGb3JtQ29udHJvbEZyYW1lKiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lucHV0RGltZW5zaW9uU3BlYyYgYVNwZWMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NpemUmIGFTaXplKQp7CiAgZmxvYXQg
cDJ0OwogIGZsb2F0IHQycDsKICBhUHJlc0NvbnRleHQtPkdldFBpeGVsc1RvVHdpcHMoJnAydCk7
CiAgYVByZXNDb250ZXh0LT5HZXRUd2lwc1RvUGl4ZWxzKCZ0MnApOwoKICBuc2Nvb3JkIGFzY2Vu
dDsKICBuc2Nvb3JkIGRlc2NlbnQ7CiAgbnNjb29yZCBtYXhDaGFyV2lkdGg7CiAgYUZvbnRNZXQt
PkdldE1heEFzY2VudChhc2NlbnQpOwogIGFGb250TWV0LT5HZXRNYXhEZXNjZW50KGRlc2NlbnQp
OwogIGFGb250TWV0LT5HZXRNYXhBZHZhbmNlKG1heENoYXJXaWR0aCk7CgogIGFzY2VudCA9IE5T
VG9Db29yZFJvdW5kKGFzY2VudCAqIHQycCk7CiAgZGVzY2VudCA9IE5TVG9Db29yZFJvdW5kKGRl
c2NlbnQgKiB0MnApOwogIG1heENoYXJXaWR0aCA9IE5TVG9Db29yZFJvdW5kKG1heENoYXJXaWR0
aCAqIHQycCk7CgogIGNoYXIgY2hhcjEsIGNoYXIyOwogIEdldFJlcENoYXJzKGFQcmVzQ29udGV4
dCwgY2hhcjEsIGNoYXIyKTsKCiAgbnNjb29yZCBjaGFyMVdpZHRoLCBjaGFyMldpZHRoOwogIGFS
ZW5kQ29udGV4dC0+R2V0V2lkdGgoY2hhcjEsIGNoYXIxV2lkdGgpOwogIGFSZW5kQ29udGV4dC0+
R2V0V2lkdGgoY2hhcjIsIGNoYXIyV2lkdGgpOwogIGNoYXIxV2lkdGggPSBOU1RvQ29vcmRSb3Vu
ZChjaGFyMVdpZHRoICogdDJwKTsKICBjaGFyMldpZHRoID0gTlNUb0Nvb3JkUm91bmQoY2hhcjJX
aWR0aCAqIHQycCk7CgoKICBQUkludDMyIHR5cGU7CiAgYUZyYW1lLT5HZXRUeXBlKCZ0eXBlKTsK
ICBuc2Nvb3JkIHdpZHRoOwogIG5zY29vcmQgaGd0OwogIG5zY29vcmQgaGVpZ2h0OwogIG5zY29v
cmQgYXZlcmFnZSA9IDA7CiAgaWYgKCgxNCA9PSB0eXBlKSB8fCAoMTEgPT0gdHlwZSkpIHsKICAg
IGF2ZXJhZ2UgPSAoY2hhcjFXaWR0aCArIGNoYXIyV2lkdGgpIC8gMjsKICAgIHdpZHRoID0gbWF4
Q2hhcldpZHRoOwogICAgaGd0ID0gYXNjZW50ICsgZGVzY2VudDsKICAgIGhlaWdodCA9IGhndCAr
IChoZ3QgLyAyKTsKICAgIHdpZHRoICs9IGFTcGVjLm1Db2xEZWZhdWx0U2l6ZSAqIGF2ZXJhZ2U7
CiAgfSBlbHNlIGlmICgyMCA9PSB0eXBlKSB7CiAgICBuc2Nvb3JkIGxpbmVzID0gMTsKICAgIG5z
Y29vcmQgc2Nyb2xsYmFyV2lkdGggPSAwOwogICAgbnNjb29yZCBzY3JvbGxiYXJIZWlnaHQgPSAw
OwogICAgZmxvYXQgc2NhbGU7CiAgICBuc0NPTVB0cjxuc0lEZXZpY2VDb250ZXh0PiBkeDsKICAg
IGFQcmVzQ29udGV4dC0+R2V0RGV2aWNlQ29udGV4dChnZXR0ZXJfQWRkUmVmcyhkeCkpOwogICAg
aWYgKGR4KSB7CiAgICAgIGZsb2F0IHNiV2lkdGg7CiAgICAgIGZsb2F0IHNiSGVpZ2h0OwogICAg
ICBkeC0+R2V0Q2Fub25pY2FsUGl4ZWxTY2FsZShzY2FsZSk7CiAgICAgIGR4LT5HZXRTY3JvbGxC
YXJEaW1lbnNpb25zKHNiV2lkdGgsIHNiSGVpZ2h0KTsKICAgICAgc2Nyb2xsYmFyV2lkdGggPSBQ
UkludDMyKHNiV2lkdGggKiBzY2FsZSk7CiAgICAgIHNjcm9sbGJhckhlaWdodCA9IFBSSW50MzIo
c2JIZWlnaHQgKiBzY2FsZSk7CiAgICAgIHNjcm9sbGJhcldpZHRoID0gTlNUb0Nvb3JkUm91bmQo
c2Nyb2xsYmFyV2lkdGggKiB0MnApOwogICAgICBzY3JvbGxiYXJIZWlnaHQgPSBOU1RvQ29vcmRS
b3VuZChzY3JvbGxiYXJIZWlnaHQgKiB0MnApOwogICAgfSBlbHNlIHsKICAgICAgaWYgKCEoMCkp
IG5zRGVidWc6OkFzc2VydGlvbigiQ291bGRuJ3QgZ2V0IHRoZSBkZXZpY2UgY29udGV4dCIsICIw
IiwgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiwgMjg5KTsKICAgICAgc2Nyb2xsYmFyV2lkdGgg
PSAxNjsKICAgICAgc2Nyb2xsYmFySGVpZ2h0ID0gMTY7CiAgICB9CiAgICBuc0lDb250ZW50ICog
Y29udGVudDsKICAgIGFGcmFtZS0+R2V0Rm9ybUNvbnRlbnQoY29udGVudCk7CiAgICBuc0NPTVB0
cjxuc0lIVE1MQ29udGVudD4gaENvbnRlbnQoZG9fUXVlcnlJbnRlcmZhY2UoY29udGVudCkpOwoK
CiAgICBuc0hUTUxWYWx1ZSByb3dBdHRyOwogICAgbnNyZXN1bHQgcm93U3RhdHVzID0gKChuc3Jl
c3VsdCkgKCgoUFJVaW50MzIpKDApPDwzMSkgfCAoKFBSVWludDMyKSg4ICsweDQ1KTw8MTYpIHwg
KChQUlVpbnQzMikoMSkpKSApOwogICAgaWYgKDAgIT0gYVNwZWMubVJvd1NpemVBdHRyKSB7CiAg
ICAgIHJvd1N0YXR1cyA9IGhDb250ZW50LT5HZXRIVE1MQXR0cmlidXRlKGFTcGVjLm1Sb3dTaXpl
QXR0ciwgcm93QXR0cik7CiAgICB9CiAgICBpZiAoMCA9PSByb3dTdGF0dXMpIHsKICAgICAgUFJJ
bnQzMiByb3dBdHRySW50ID0gKChyb3dBdHRyLkdldFVuaXQoKSA9PSBlSFRNTFVuaXRfUGl4ZWwp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcm93QXR0ci5HZXRQaXhlbFZhbHVlKCkg
OiByb3dBdHRyLkdldEludFZhbHVlKCkpOwogICAgICBsaW5lcyA9IChyb3dBdHRySW50ID4gMCkg
PyByb3dBdHRySW50IDogMTsKICAgIH0gZWxzZSB7CiAgICAgIGxpbmVzID0gYVNwZWMubVJvd0Rl
ZmF1bHRTaXplOwogICAgfQoKICAgIGF2ZXJhZ2UgPSAoY2hhcjFXaWR0aCArIGNoYXIyV2lkdGgp
IC8gMjsKICAgIHdpZHRoID0gKChhU3BlYy5tQ29sRGVmYXVsdFNpemUgKyAxKSAqIGF2ZXJhZ2Up
ICsgc2Nyb2xsYmFyV2lkdGg7CiAgICBoZ3QgPSBhc2NlbnQgKyBkZXNjZW50OwogICAgaGVpZ2h0
ID0gKGxpbmVzICsgMSkgKiBoZ3Q7CgoKICAgIG5zSFRNTFRleHRXcmFwIHdyYXBQcm9wOwogICAg
bnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0V3JhcFByb3BlcnR5RW51bShjb250ZW50LCB3cmFwUHJv
cCk7CiAgICBpZiAod3JhcFByb3AgPT0gZUhUTUxUZXh0V3JhcF9PZmYpIHsKICAgICAgaGVpZ2h0
ICs9IHNjcm9sbGJhckhlaWdodDsKICAgIH0KICAgIGRvIHsgKGNvbnRlbnQpLT5SZWxlYXNlKCk7
IChjb250ZW50KSA9IDA7IH0gd2hpbGUgKDApOwogIH0gZWxzZSBpZiAoNSA9PSB0eXBlIHx8CiAg
ICAgICAgICAgICAxMyA9PSB0eXBlIHx8CiAgICAgICAgICAgICA5ID09IHR5cGUpIHsKICAgIEdl
dFRleHRTaXplKGFQcmVzQ29udGV4dCwgYUZyYW1lLCAqYVNwZWMubUNvbERlZmF1bHRWYWx1ZSwg
YVNpemUsIGFSZW5kQ29udGV4dCk7CiAgICBhU2l6ZS53aWR0aCA9IE5TVG9Db29yZFJvdW5kKGFT
aXplLndpZHRoICogdDJwKTsKICAgIGFTaXplLmhlaWdodCA9IE5TVG9Db29yZFJvdW5kKGFTaXpl
LmhlaWdodCAqIHQycCk7CiAgICB3aWR0aCA9IDMgKiBhU2l6ZS53aWR0aCAvIDI7CiAgICBoZWln
aHQgPSAzICogYVNpemUuaGVpZ2h0IC8gMjsKICB9IGVsc2UgaWYgKDggPT0gdHlwZSkgewogICAg
d2lkdGggPSAwOwogICAgaGVpZ2h0ID0gMDsKICB9IGVsc2UgewogICAgd2lkdGggPSAwOwogICAg
aGVpZ2h0ID0gMDsKICB9CgoKCgoKCiAgYVNpemUud2lkdGggPSBOU0ludFBpeGVsc1RvVHdpcHMo
d2lkdGgsIHAydCk7CiAgYVNpemUuaGVpZ2h0ID0gTlNJbnRQaXhlbHNUb1R3aXBzKGhlaWdodCwg
cDJ0KTsKICBhdmVyYWdlID0gTlNJbnRQaXhlbHNUb1R3aXBzKGF2ZXJhZ2UsIHAydCk7CgogIHJl
dHVybiBhdmVyYWdlOwoKfQoKbnNjb29yZApuc0Zvcm1Db250cm9sSGVscGVyOjpHZXRUZXh0U2l6
ZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBuc0lGb3JtQ29udHJvbEZyYW1lKiBhRnJh
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNTdHJpbmcmIGFTdHJp
bmcsIG5zU2l6ZSYgYVNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVu
ZGVyaW5nQ29udGV4dCAqYVJlbmRDb250ZXh0KQp7CiAgbnNDT01QdHI8bnNJRm9udE1ldHJpY3M+
IGZvbnRNZXQ7CiAgbnNyZXN1bHQgcmVzID0gR2V0RnJhbWVGb250Rk0oYVByZXNDb250ZXh0LCBh
RnJhbWUsIGdldHRlcl9BZGRSZWZzKGZvbnRNZXQpKTsKICBpZiAoKCEoKHJlcykgJiAweDgwMDAw
MDAwKSkgJiYgZm9udE1ldCkgewogICAgYVJlbmRDb250ZXh0LT5TZXRGb250KGZvbnRNZXQpOwoK
CiAgICBhUmVuZENvbnRleHQtPkdldFdpZHRoKGFTdHJpbmcsIGFTaXplLndpZHRoKTsKICAgIGZv
bnRNZXQtPkdldEhlaWdodChhU2l6ZS5oZWlnaHQpOwogIH0gZWxzZSB7CiAgICBpZiAoISgwKSkg
bnNEZWJ1Zzo6QXNzZXJ0aW9uKCJDb3VsZG4ndCBnZXQgRm9udCBNZXRyaWNzIiwgIlBSX0ZBTFNF
IiwgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiwgMzY2KTsKICAgIGFTaXplLndpZHRoID0gMDsK
ICB9CgogIGNoYXIgY2hhcjEsIGNoYXIyOwogIG5zQ29tcGF0aWJpbGl0eSBtb2RlID0gR2V0UmVw
Q2hhcnMoYVByZXNDb250ZXh0LCBjaGFyMSwgY2hhcjIpOwogIG5zY29vcmQgY2hhcjFXaWR0aCwg
Y2hhcjJXaWR0aDsKICBhUmVuZENvbnRleHQtPkdldFdpZHRoKGNoYXIxLCBjaGFyMVdpZHRoKTsK
ICBhUmVuZENvbnRleHQtPkdldFdpZHRoKGNoYXIyLCBjaGFyMldpZHRoKTsKCiAgaWYgKGVDb21w
YXRpYmlsaXR5X1N0YW5kYXJkID09IG1vZGUpIHsKICAgIHJldHVybiAoKGNoYXIxV2lkdGggKyBj
aGFyMldpZHRoKSAvIDIpICsgMTsKICB9IGVsc2UgewogICAgcmV0dXJuIChjaGFyMVdpZHRoICsg
Y2hhcjJXaWR0aCkgLyAyOwogIH0KfQoKbnNjb29yZApuc0Zvcm1Db250cm9sSGVscGVyOjpHZXRU
ZXh0U2l6ZShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBuc0lGb3JtQ29udHJvbEZyYW1l
KiBhRnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTnVtQ2hh
cnMsIG5zU2l6ZSYgYVNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJUmVu
ZGVyaW5nQ29udGV4dCAqYVJlbmRDb250ZXh0KQp7CiAgbnNBdXRvU3RyaW5nIHZhbDsKICBjaGFy
IGNoYXIxLCBjaGFyMjsKICBHZXRSZXBDaGFycyhhUHJlc0NvbnRleHQsIGNoYXIxLCBjaGFyMik7
CiAgaW50IGk7CiAgZm9yIChpID0gMDsgaSA8IGFOdW1DaGFyczsgaSs9MikgewogICAgdmFsLkFw
cGVuZFdpdGhDb252ZXJzaW9uKGNoYXIxKTsKICB9CiAgZm9yIChpID0gMTsgaSA8IGFOdW1DaGFy
czsgaSs9MikgewogICAgdmFsLkFwcGVuZFdpdGhDb252ZXJzaW9uKGNoYXIyKTsKICB9CiAgcmV0
dXJuIEdldFRleHRTaXplKGFQcmVzQ29udGV4dCwgYUZyYW1lLCB2YWwsIGFTaXplLCBhUmVuZENv
bnRleHQpOwp9CgpQUkludDMyCm5zRm9ybUNvbnRyb2xIZWxwZXI6OkNhbGN1bGF0ZVNpemUgKG5z
SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQqIGFSZW5kQ29udGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJRm9ybUNvbnRyb2xGcmFtZSogYUZyYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc1NpemUmIGFDU1NTaXplLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lucHV0RGltZW5zaW9uU3BlYyYgYVNw
ZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU2l6ZSYgYURlc2lyZWRT
aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NpemUmIGFNaW5TaXpl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wmIGFXaWR0aEV4cGxp
Y2l0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wmIGFIZWlnaHRF
eHBsaWNpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCYgYVJv
d0hlaWdodCkKewogIG5zY29vcmQgY2hhcldpZHRoID0gMDsKICBQUkludDMyIG51bVJvd3MgPSAt
MTsKICBhV2lkdGhFeHBsaWNpdCA9IDA7CiAgYUhlaWdodEV4cGxpY2l0ID0gMDsKCiAgYURlc2ly
ZWRTaXplLndpZHRoID0gLTE7CiAgYURlc2lyZWRTaXplLmhlaWdodCA9IC0xOwoKICBuc0lDb250
ZW50KiBpQ29udGVudCA9IDA7CiAgYUZyYW1lLT5HZXRGb3JtQ29udGVudCgobnNJQ29udGVudCom
KSBpQ29udGVudCk7CiAgaWYgKCFpQ29udGVudCkgewogICAgcmV0dXJuIDA7CiAgfQogIG5zSUhU
TUxDb250ZW50KiBoQ29udGVudCA9IDA7CiAgbnNyZXN1bHQgcmVzdWx0ID0gaUNvbnRlbnQtPlF1
ZXJ5SW50ZXJmYWNlKGtJSFRNTENvbnRlbnRJSUQsICh2b2lkKiopJmhDb250ZW50KTsKICBpZiAo
KDAgIT0gcmVzdWx0KSB8fCAhaENvbnRlbnQpIHsKICAgIGRvIHsgKGlDb250ZW50KS0+UmVsZWFz
ZSgpOyAoaUNvbnRlbnQpID0gMDsgfSB3aGlsZSAoMCk7CiAgICByZXR1cm4gMDsKICB9CiAgbnNB
dXRvU3RyaW5nIHZhbEF0dHI7CiAgbnNyZXN1bHQgdmFsU3RhdHVzID0gKChuc3Jlc3VsdCkgKCgo
UFJVaW50MzIpKDApPDwzMSkgfCAoKFBSVWludDMyKSg4ICsweDQ1KTw8MTYpIHwgKChQUlVpbnQz
MikoMSkpKSApOwogIGlmICgwICE9IGFTcGVjLm1Db2xWYWx1ZUF0dHIpIHsKICAgIHZhbFN0YXR1
cyA9IGhDb250ZW50LT5HZXRBdHRyaWJ1dGUoMywgYVNwZWMubUNvbFZhbHVlQXR0ciwgdmFsQXR0
cik7CiAgfQogIG5zSFRNTFZhbHVlIGNvbEF0dHI7CiAgbnNyZXN1bHQgY29sU3RhdHVzID0gKChu
c3Jlc3VsdCkgKCgoUFJVaW50MzIpKDApPDwzMSkgfCAoKFBSVWludDMyKSg4ICsweDQ1KTw8MTYp
IHwgKChQUlVpbnQzMikoMSkpKSApOwogIGlmICgwICE9IGFTcGVjLm1Db2xTaXplQXR0cikgewog
ICAgY29sU3RhdHVzID0gaENvbnRlbnQtPkdldEhUTUxBdHRyaWJ1dGUoYVNwZWMubUNvbFNpemVB
dHRyLCBjb2xBdHRyKTsKICB9CiAgZmxvYXQgcDJ0OwogIGFQcmVzQ29udGV4dC0+R2V0U2NhbGVk
UGl4ZWxzVG9Ud2lwcygmcDJ0KTsKIyA0NjQgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIgogIG5z
Q29tcGF0aWJpbGl0eSBxTW9kZTsKICBhUHJlc0NvbnRleHQtPkdldENvbXBhdGliaWxpdHlNb2Rl
KCZxTW9kZSk7CgoKICBpZiAoMCA9PSBjb2xTdGF0dXMpIHsKICAgIFBSSW50MzIgY29sID0gKChj
b2xBdHRyLkdldFVuaXQoKSA9PSBlSFRNTFVuaXRfUGl4ZWwpID8gY29sQXR0ci5HZXRQaXhlbFZh
bHVlKCkgOiBjb2xBdHRyLkdldEludFZhbHVlKCkpOwogICAgaWYgKGFTcGVjLm1Db2xTaXplQXR0
ckluUGl4ZWxzKSB7CgogICAgICBjaGFyV2lkdGggPSBHZXRUZXh0U2l6ZShhUHJlc0NvbnRleHQs
IGFGcmFtZSwgMSwgYURlc2lyZWRTaXplLCBhUmVuZENvbnRleHQpOwogICAgICBjb2wgPSAoY29s
IDw9IDApID8gMTUgOiBjb2w7CgogICAgICBhRGVzaXJlZFNpemUud2lkdGggPSBOU0ludFBpeGVs
c1RvVHdpcHMoY29sLCBwMnQpOwogICAgfSBlbHNlIHsKICAgICAgY29sID0gKGNvbCA8PSAwKSA/
IDEgOiBjb2w7CiAgICAgIGlmIChlQ29tcGF0aWJpbGl0eV9OYXZRdWlya3MgPT0gcU1vZGUpIHsK
ICAgICAgICBuc0NPTVB0cjxuc0lGb250TWV0cmljcz4gZm9udE1ldDsKICAgICAgICBuc3Jlc3Vs
dCByZXMgPSBHZXRGcmFtZUZvbnRGTShhUHJlc0NvbnRleHQsIGFGcmFtZSwgZ2V0dGVyX0FkZFJl
ZnMoZm9udE1ldCkpOwogICAgICAgIGlmICgoISgocmVzKSAmIDB4ODAwMDAwMDApKSAmJiBmb250
TWV0KSB7CiAgICAgICAgICBhUmVuZENvbnRleHQtPlNldEZvbnQoZm9udE1ldCk7CiAgICAgICAg
ICBhU3BlYy5tQ29sRGVmYXVsdFNpemUgPSBjb2w7CiAgICAgICAgICBjaGFyV2lkdGggPSBDYWxj
TmF2UXVpcmtTaXppbmcoYVByZXNDb250ZXh0LCBhUmVuZENvbnRleHQsIGZvbnRNZXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUZyYW1lLCBhU3BlYywgYURlc2ly
ZWRTaXplKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2hhcldpZHRoID0gR2V0VGV4dFNp
emUoYVByZXNDb250ZXh0LCBhRnJhbWUsIGNvbCwgYURlc2lyZWRTaXplLCBhUmVuZENvbnRleHQp
OwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGVDb21wYXRpYmlsaXR5X1N0YW5kYXJk
ID09IHFNb2RlKSB7CiAgICAgIGlmIChhU3BlYy5tQ29sU2l6ZUF0dHJJblBpeGVscykgewogICAg
ICAgIGFXaWR0aEV4cGxpY2l0ID0gMTsKICAgICAgfQogICAgfQogICAgYU1pblNpemUud2lkdGgg
PSBhRGVzaXJlZFNpemUud2lkdGg7CiAgfSBlbHNlIHsKCiAgICBpZiAoMCA9PSB2YWxTdGF0dXMp
IHsKICAgICAgY2hhcldpZHRoID0gR2V0VGV4dFNpemUoYVByZXNDb250ZXh0LCBhRnJhbWUsIHZh
bEF0dHIsIGFEZXNpcmVkU2l6ZSwgYVJlbmRDb250ZXh0KTsKICAgIH0gZWxzZSBpZiAoYVNwZWMu
bUNvbERlZmF1bHRWYWx1ZSkgewogICAgICBjaGFyV2lkdGggPSBHZXRUZXh0U2l6ZShhUHJlc0Nv
bnRleHQsIGFGcmFtZSwgKmFTcGVjLm1Db2xEZWZhdWx0VmFsdWUsIGFEZXNpcmVkU2l6ZSwgYVJl
bmRDb250ZXh0KTsKICAgIH0gZWxzZSBpZiAoYVNwZWMubUNvbERlZmF1bHRTaXplSW5QaXhlbHMp
IHsKICAgICAgY2hhcldpZHRoID0gR2V0VGV4dFNpemUoYVByZXNDb250ZXh0LCBhRnJhbWUsIDEs
IGFEZXNpcmVkU2l6ZSwgYVJlbmRDb250ZXh0KTsKICAgICAgYURlc2lyZWRTaXplLndpZHRoID0g
YVNwZWMubUNvbERlZmF1bHRTaXplOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGVDb21wYXRpYmls
aXR5X05hdlF1aXJrcyA9PSBxTW9kZSkgewogICAgICAgIG5zQ09NUHRyPG5zSUZvbnRNZXRyaWNz
PiBmb250TWV0OwogICAgICAgIG5zcmVzdWx0IHJlcyA9IEdldEZyYW1lRm9udEZNKGFQcmVzQ29u
dGV4dCwgYUZyYW1lLCBnZXR0ZXJfQWRkUmVmcyhmb250TWV0KSk7CiAgICAgICAgaWYgKCghKChy
ZXMpICYgMHg4MDAwMDAwMCkpICYmIGZvbnRNZXQpIHsKICAgICAgICAgIGFSZW5kQ29udGV4dC0+
U2V0Rm9udChmb250TWV0KTsKCiAgICAgICAgICBjaGFyV2lkdGggPSBDYWxjTmF2UXVpcmtTaXpp
bmcoYVByZXNDb250ZXh0LCBhUmVuZENvbnRleHQsIGZvbnRNZXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYUZyYW1lLCBhU3BlYywgYURlc2lyZWRTaXplKTsKICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCEoZm9udE1ldCkpIG5zRGVidWc6OkFzc2VydGlv
bigiQ291bGRuJ3QgZ2V0IEZvbnQgTWV0cmljcyIsICJmb250TWV0IiwgIm5zRm9ybUNvbnRyb2xI
ZWxwZXIuY3BwIiwgNTE2KTsKICAgICAgICAgIGFEZXNpcmVkU2l6ZS53aWR0aCA9IDMwMDsKICAg
ICAgICAgIGFEZXNpcmVkU2l6ZS53aWR0aCA9IDE1MDA7CiAgICAgICAgfQogICAgICB9IGVsc2Ug
ewogICAgICAgIGNoYXJXaWR0aCA9IEdldFRleHRTaXplKGFQcmVzQ29udGV4dCwgYUZyYW1lLCBh
U3BlYy5tQ29sRGVmYXVsdFNpemUsIGFEZXNpcmVkU2l6ZSwgYVJlbmRDb250ZXh0KTsKICAgICAg
fQogICAgfQogICAgYU1pblNpemUud2lkdGggPSBhRGVzaXJlZFNpemUud2lkdGg7CiAgICBpZiAo
LTEgIT0gYUNTU1NpemUud2lkdGgpIHsKICAgICAgaWYgKCEoYUNTU1NpemUud2lkdGggPj0gMCkp
IG5zRGVidWc6OkFzc2VydGlvbigiZm9ybSBjb250cm9sJ3MgY29tcHV0ZWQgd2lkdGggaXMgPCAw
IiwgImFDU1NTaXplLndpZHRoID49IDAiLCAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiLCA1MjYp
OwogICAgICBpZiAobnNjb29yZCgxIDw8IDMwKSAhPSBhQ1NTU2l6ZS53aWR0aCkgewogICAgICAg
IGFEZXNpcmVkU2l6ZS53aWR0aCA9ICgoYURlc2lyZWRTaXplLndpZHRoKT4oYUNTU1NpemUud2lk
dGgpPyhhRGVzaXJlZFNpemUud2lkdGgpOihhQ1NTU2l6ZS53aWR0aCkpOwogICAgICAgIGFXaWR0
aEV4cGxpY2l0ID0gMTsKICAgICAgfQogICAgfQogIH0KICBhUm93SGVpZ2h0ID0gYURlc2lyZWRT
aXplLmhlaWdodDsKICBhTWluU2l6ZS5oZWlnaHQgPSBhRGVzaXJlZFNpemUuaGVpZ2h0OwoKCiAg
aWYgKGVDb21wYXRpYmlsaXR5X1N0YW5kYXJkID09IHFNb2RlKSB7CiAgICBuc0hUTUxWYWx1ZSBy
b3dBdHRyOwogICAgbnNyZXN1bHQgcm93U3RhdHVzID0gKChuc3Jlc3VsdCkgKCgoUFJVaW50MzIp
KDApPDwzMSkgfCAoKFBSVWludDMyKSg4ICsweDQ1KTw8MTYpIHwgKChQUlVpbnQzMikoMSkpKSAp
OwogICAgaWYgKDAgIT0gYVNwZWMubVJvd1NpemVBdHRyKSB7CiAgICAgIHJvd1N0YXR1cyA9IGhD
b250ZW50LT5HZXRIVE1MQXR0cmlidXRlKGFTcGVjLm1Sb3dTaXplQXR0ciwgcm93QXR0cik7CiAg
ICB9CiAgICBpZiAoMCA9PSByb3dTdGF0dXMpIHsKICAgICAgUFJJbnQzMiByb3dBdHRySW50ID0g
KChyb3dBdHRyLkdldFVuaXQoKSA9PSBlSFRNTFVuaXRfUGl4ZWwpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID8gcm93QXR0ci5HZXRQaXhlbFZhbHVlKCkgOiByb3dBdHRyLkdldEludFZh
bHVlKCkpOwogICAgICBudW1Sb3dzID0gKHJvd0F0dHJJbnQgPiAwKSA/IHJvd0F0dHJJbnQgOiAx
OwogICAgICBhRGVzaXJlZFNpemUuaGVpZ2h0ID0gYURlc2lyZWRTaXplLmhlaWdodCAqIG51bVJv
d3M7CiAgICB9IGVsc2UgewogICAgICBhRGVzaXJlZFNpemUuaGVpZ2h0ID0gYURlc2lyZWRTaXpl
LmhlaWdodCAqIGFTcGVjLm1Sb3dEZWZhdWx0U2l6ZTsKICAgICAgaWYgKC0xICE9IGFDU1NTaXpl
LmhlaWdodCkgewogICAgICAgIGlmICghKGFDU1NTaXplLmhlaWdodCA+IDApKSBuc0RlYnVnOjpB
c3NlcnRpb24oImZvcm0gY29udHJvbCdzIGNvbXB1dGVkIGhlaWdodCBpcyA8PSAwIiwgImFDU1NT
aXplLmhlaWdodCA+IDAiLCAibnNGb3JtQ29udHJvbEhlbHBlci5jcHAiLCA1NTEpOwogICAgICAg
IGlmIChuc2Nvb3JkKDEgPDwgMzApICE9IGFDU1NTaXplLmhlaWdodCkgewogICAgICAgICAgYURl
c2lyZWRTaXplLmhlaWdodCA9ICgoYURlc2lyZWRTaXplLmhlaWdodCk+KGFDU1NTaXplLmhlaWdo
dCk/KGFEZXNpcmVkU2l6ZS5oZWlnaHQpOihhQ1NTU2l6ZS5oZWlnaHQpKTsKICAgICAgICAgIGFI
ZWlnaHRFeHBsaWNpdCA9IDE7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBkbyB7ICho
Q29udGVudCktPlJlbGVhc2UoKTsgKGhDb250ZW50KSA9IDA7IH0gd2hpbGUgKDApOwogIGlmICgt
MSA9PSBudW1Sb3dzKSB7CiAgICBudW1Sb3dzID0gKGFSb3dIZWlnaHQgPiAwKSA/IChhRGVzaXJl
ZFNpemUuaGVpZ2h0IC8gYVJvd0hlaWdodCkgOiAwOwogIH0KCiAgZG8geyAoaUNvbnRlbnQpLT5S
ZWxlYXNlKCk7IChpQ29udGVudCkgPSAwOyB9IHdoaWxlICgwKTsKCiAgcmV0dXJuIG51bVJvd3M7
Cn0KCgoKbnNyZXN1bHQKbnNGb3JtQ29udHJvbEhlbHBlcjo6R2V0Rm9udChuc0lGb3JtQ29udHJv
bEZyYW1lICogYUZvcm1GcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0
eWxlQ29udGV4dCAqIGFTdHlsZUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbnNGb250KiYgYUZvbnQpCnsKICBjb25zdCBuc1N0eWxlRm9udCogc3R5bGVGb250ID0g
KGNvbnN0IG5zU3R5bGVGb250KilhU3R5bGVDb250ZXh0LT5HZXRTdHlsZURhdGEoZVN0eWxlU3Ry
dWN0X0ZvbnQpOwoKICBuc1dpZGdldFJlbmRlcmluZyBtOwogIGFQcmVzQ29udGV4dC0+R2V0V2lk
Z2V0UmVuZGVyaW5nTW9kZSgmbSk7CgoKICBQUkJvb2wgcmVxdWlyZXNXaWRnZXQgPSAwOwogIGFG
b3JtRnJhbWUtPlJlcXVpcmVzV2lkZ2V0KHJlcXVpcmVzV2lkZ2V0KTsKCiAgUFJJbnQzMiB0eXBl
OwogIGFGb3JtRnJhbWUtPkdldFR5cGUoJnR5cGUpOwoKICBpZiAodHlwZSE9MTQgJiYKICAgICAg
dHlwZSE9MjAgJiYKICAgICAgdHlwZSE9MTEpIHsKICAgIGlmICgxICE9IHJlcXVpcmVzV2lkZ2V0
ICYmIGVXaWRnZXRSZW5kZXJpbmdfR2Z4ID09IG0pIHsKICAgICAgYUZvbnQgPSAmc3R5bGVGb250
LT5tRm9udDsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgfQoKICBuc0NvbXBhdGliaWxpdHkgbW9k
ZTsKICBhUHJlc0NvbnRleHQtPkdldENvbXBhdGliaWxpdHlNb2RlKCZtb2RlKTsKCiAgaWYgKGVD
b21wYXRpYmlsaXR5X1N0YW5kYXJkID09IG1vZGUpIHsKICAgIGFGb250ID0gJnN0eWxlRm9udC0+
bUZvbnQ7CiAgICByZXR1cm4gMDsKICB9CgogIHN3aXRjaCAodHlwZSkgewogICAgY2FzZSAxNDoK
ICAgIGNhc2UgMjA6CiAgICBjYXNlIDExOgogICAgICBhRm9udCA9ICZzdHlsZUZvbnQtPm1Gb250
OwogICAgICBicmVhazsKICAgIGNhc2UgNToKICAgIGNhc2UgMTM6CiAgICBjYXNlIDk6CiAgICBj
YXNlIDE5OgogICAgICBpZiAoISgwKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJnZXR0aW5nIHRoZSBm
b250IGhlcmUgaGFzIGJlZW4gcHJlZGljYXRlZCIsICIwIiwgIm5zRm9ybUNvbnRyb2xIZWxwZXIu
Y3BwIiwgNjE3KTsKIyA2NDEgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIgogICAgICBicmVhazsK
ICB9CiAgcmV0dXJuIDA7Cn0KIyA2NTMgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIgp2b2lkCm5z
Rm9ybUNvbnRyb2xIZWxwZXI6OlBhaW50TGluZShuc0lSZW5kZXJpbmdDb250ZXh0JiBhUmVuZGVy
aW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNjb29yZCBhU1gsIG5z
Y29vcmQgYVNZLCBuc2Nvb3JkIGFFWCwgbnNjb29yZCBhRVksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBSQm9vbCBhSG9yeiwgbnNjb29yZCBhV2lkdGgsIG5zY29vcmQgYU9uZVBpeGVs
KQp7CgogIG5zUG9pbnQgcFs1XTsKICBpZiAoYUhvcnopIHsKICAgIGFFWCsrOwogICAgcFswXS54
ID0gbnNjb29yZChmbG9hdChhU1gpKmFPbmVQaXhlbCk7CiAgICBwWzBdLnkgPSBuc2Nvb3JkKGZs
b2F0KGFTWSkqYU9uZVBpeGVsKTsKICAgIHBbMV0ueCA9IG5zY29vcmQoZmxvYXQoYUVYKSphT25l
UGl4ZWwpOwogICAgcFsxXS55ID0gbnNjb29yZChmbG9hdChhRVkpKmFPbmVQaXhlbCk7CiAgICBw
WzJdLnggPSBuc2Nvb3JkKGZsb2F0KGFFWCkqYU9uZVBpeGVsKTsKICAgIHBbMl0ueSA9IG5zY29v
cmQoZmxvYXQoYUVZKzEpKmFPbmVQaXhlbCk7CiAgICBwWzNdLnggPSBuc2Nvb3JkKGZsb2F0KGFT
WCkqYU9uZVBpeGVsKTsKICAgIHBbM10ueSA9IG5zY29vcmQoZmxvYXQoYVNZKzEpKmFPbmVQaXhl
bCk7CiAgICBwWzRdLnggPSBuc2Nvb3JkKGZsb2F0KGFTWCkqYU9uZVBpeGVsKTsKICAgIHBbNF0u
eSA9IG5zY29vcmQoZmxvYXQoYVNZKSphT25lUGl4ZWwpOwogIH0gZWxzZSB7CiAgICBhRVkrKzsK
ICAgIHBbMF0ueCA9IG5zY29vcmQoZmxvYXQoYVNYKSphT25lUGl4ZWwpOwogICAgcFswXS55ID0g
bnNjb29yZChmbG9hdChhU1kpKmFPbmVQaXhlbCk7CiAgICBwWzFdLnggPSBuc2Nvb3JkKGZsb2F0
KGFFWCkqYU9uZVBpeGVsKTsKICAgIHBbMV0ueSA9IG5zY29vcmQoZmxvYXQoYUVZKSphT25lUGl4
ZWwpOwogICAgcFsyXS54ID0gbnNjb29yZChmbG9hdChhRVgrMSkqYU9uZVBpeGVsKTsKICAgIHBb
Ml0ueSA9IG5zY29vcmQoZmxvYXQoYUVZKSphT25lUGl4ZWwpOwogICAgcFszXS54ID0gbnNjb29y
ZChmbG9hdChhU1grMSkqYU9uZVBpeGVsKTsKICAgIHBbM10ueSA9IG5zY29vcmQoZmxvYXQoYVNZ
KSphT25lUGl4ZWwpOwogICAgcFs0XS54ID0gbnNjb29yZChmbG9hdChhU1gpKmFPbmVQaXhlbCk7
CiAgICBwWzRdLnkgPSBuc2Nvb3JkKGZsb2F0KGFTWSkqYU9uZVBpeGVsKTsKICB9CiAgYVJlbmRl
cmluZ0NvbnRleHQuRmlsbFBvbHlnb24ocCwgNSk7Cgp9CgoKdm9pZApuc0Zvcm1Db250cm9sSGVs
cGVyOjpTZXR1cFBvaW50cyhQUlVpbnQzMiBhTnVtYmVyT2ZQb2ludHMsIG5zY29vcmQqIGFQb2lu
dHMsIG5zUG9pbnQqIGFQb2x5Z29uLCBuc2Nvb3JkIGFTY2FsZUZhY3RvciwgbnNjb29yZCBhWCwg
bnNjb29yZCBhWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFDZW50
ZXJYLCBuc2Nvb3JkIGFDZW50ZXJZKQp7CiAgY29uc3QgbnNjb29yZCBvZmZzZXRYID0gYUNlbnRl
clggKiBhU2NhbGVGYWN0b3I7CiAgY29uc3QgbnNjb29yZCBvZmZzZXRZID0gYUNlbnRlclkgKiBh
U2NhbGVGYWN0b3I7CgogIFBSVWludDMyIGkgPSAwOwogIFBSVWludDMyIGNvdW50ID0gMDsKICBm
b3IgKGkgPSAwOyBpIDwgYU51bWJlck9mUG9pbnRzOyBpKyspIHsKICAgIGFQb2x5Z29uW2ldLngg
PSAoYVBvaW50c1tjb3VudF0gKiBhU2NhbGVGYWN0b3IpICsgYVggLSBvZmZzZXRYOwogICAgY291
bnQrKzsKICAgIGFQb2x5Z29uW2ldLnkgPSAoYVBvaW50c1tjb3VudF0gKiBhU2NhbGVGYWN0b3Ip
ICsgYVkgLSBvZmZzZXRZOwogICAgY291bnQrKzsKICB9Cn0KCgp2b2lkCm5zRm9ybUNvbnRyb2xI
ZWxwZXI6OlBhaW50Rml4ZWRTaXplQ2hlY2tNYXJrKG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5k
ZXJpbmdDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYVBpeGVsc1RvVHdp
cHMpCnsKCgoKICBjb25zdCBQUlVpbnQzMiBveCA9IDM7CiAgY29uc3QgUFJVaW50MzIgb3kgPSAz
OwoKICBuc2Nvb3JkIG9uZVBpeGVsID0gTlNJbnRQaXhlbHNUb1R3aXBzKDEsIGFQaXhlbHNUb1R3
aXBzKTsKCgoKCgogIFBhaW50TGluZShhUmVuZGVyaW5nQ29udGV4dCwgMCArIG94LCAyICsgb3ks
IDAgKyBveCwgNCArIG95LCAwLCAxLCBvbmVQaXhlbCk7CiAgUGFpbnRMaW5lKGFSZW5kZXJpbmdD
b250ZXh0LCAxICsgb3gsIDMgKyBveSwgMSArIG94LCA1ICsgb3ksIDAsIDEsIG9uZVBpeGVsKTsK
ICBQYWludExpbmUoYVJlbmRlcmluZ0NvbnRleHQsIDIgKyBveCwgNCArIG95LCAyICsgb3gsIDYg
KyBveSwgMCwgMSwgb25lUGl4ZWwpOwogIFBhaW50TGluZShhUmVuZGVyaW5nQ29udGV4dCwgMyAr
IG94LCAzICsgb3ksIDMgKyBveCwgNSArIG95LCAwLCAxLCBvbmVQaXhlbCk7CiAgUGFpbnRMaW5l
KGFSZW5kZXJpbmdDb250ZXh0LCA0ICsgb3gsIDIgKyBveSwgNCArIG94LCA0ICsgb3ksIDAsIDEs
IG9uZVBpeGVsKTsKICBQYWludExpbmUoYVJlbmRlcmluZ0NvbnRleHQsIDUgKyBveCwgMSArIG95
LCA1ICsgb3gsIDMgKyBveSwgMCwgMSwgb25lUGl4ZWwpOwogIFBhaW50TGluZShhUmVuZGVyaW5n
Q29udGV4dCwgNiArIG94LCAwICsgb3ksIDYgKyBveCwgMiArIG95LCAwLCAxLCBvbmVQaXhlbCk7
Cn0KCnZvaWQKbnNGb3JtQ29udHJvbEhlbHBlcjo6UGFpbnRGaXhlZFNpemVDaGVja01hcmtCb3Jk
ZXIobnNJUmVuZGVyaW5nQ29udGV4dCYgYVJlbmRlcmluZ0NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCBhUGl4ZWxzVG9Ud2lwcywgY29uc3QgbnNTdHlsZUNvbG9yJiBhQmFj
a2dyb3VuZENvbG9yKQp7CgogIFBSVWludDMyIG94ID0gMDsKICBQUlVpbnQzMiBveSA9IDA7Cgog
IG5zY29vcmQgb25lUGl4ZWwgPSBOU0ludFBpeGVsc1RvVHdpcHMoMSwgYVBpeGVsc1RvVHdpcHMp
OwogIG5zY29vcmQgdHdlbHZlUGl4ZWxzID0gTlNJbnRQaXhlbHNUb1R3aXBzKDEyLCBhUGl4ZWxz
VG9Ud2lwcyk7CgoKICBhUmVuZGVyaW5nQ29udGV4dC5TZXRDb2xvcihhQmFja2dyb3VuZENvbG9y
Lm1Db2xvcik7CiAgbnNSZWN0IHJlY3QoMCwgMCwgdHdlbHZlUGl4ZWxzLCB0d2VsdmVQaXhlbHMp
OwogIGFSZW5kZXJpbmdDb250ZXh0LkZpbGxSZWN0KHJlY3QpOwoKCiAgYVJlbmRlcmluZ0NvbnRl
eHQuU2V0Q29sb3IoKChuc2NvbG9yKSAoKDI1NSA8PCAyNCkgfCAoKDEyOCk8PDE2KSB8ICgoMTI4
KTw8OCkgfCAoMTI4KSkpKTsKICBQYWludExpbmUoYVJlbmRlcmluZ0NvbnRleHQsIDAgKyBveCwg
MCArIG95LCAxMSArIG94LCAwICsgb3ksIDEsIDEsIG9uZVBpeGVsKTsKICBQYWludExpbmUoYVJl
bmRlcmluZ0NvbnRleHQsIDAgKyBveCwgMCArIG95LCAwICsgb3gsIDExICsgb3ksIDAsIDEsIG9u
ZVBpeGVsKTsKCiAgYVJlbmRlcmluZ0NvbnRleHQuU2V0Q29sb3IoKChuc2NvbG9yKSAoKDI1NSA8
PCAyNCkgfCAoKDE5Mik8PDE2KSB8ICgoMTkyKTw8OCkgfCAoMTkyKSkpKTsKICBQYWludExpbmUo
YVJlbmRlcmluZ0NvbnRleHQsIDEgKyBveCwgMTEgKyBveSwgMTEgKyBveCwgMTEgKyBveSwgMSwg
MSwgb25lUGl4ZWwpOwogIFBhaW50TGluZShhUmVuZGVyaW5nQ29udGV4dCwgMTEgKyBveCwgMSAr
IG95LCAxMSArIG94LCAxMSArIG95LCAwLCAxLCBvbmVQaXhlbCk7CgogIGFSZW5kZXJpbmdDb250
ZXh0LlNldENvbG9yKCgobnNjb2xvcikgKCgyNTUgPDwgMjQpIHwgKCgwKTw8MTYpIHwgKCgwKTw8
OCkgfCAoMCkpKSk7CiAgUGFpbnRMaW5lKGFSZW5kZXJpbmdDb250ZXh0LCAxICsgb3gsIDEgKyBv
eSwgMTAgKyBveCwgMSArIG95LCAxLCAxLCBvbmVQaXhlbCk7CiAgUGFpbnRMaW5lKGFSZW5kZXJp
bmdDb250ZXh0LCAxICsgb3gsIDEgKyBveSwgMSArIG94LCAxMCArIG95LCAwLCAxLCBvbmVQaXhl
bCk7Cgp9CgoKdm9pZApuc0Zvcm1Db250cm9sSGVscGVyOjpQYWludENoZWNrTWFyayhuc0lSZW5k
ZXJpbmdDb250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgYVBpeGVsc1RvVHdpcHMsIGNvbnN0IG5zUmVjdCAmIGFSZWN0KQp7
CgogIGNvbnN0IFBSSW50MzIgZml4ZWRTaXplQ2hlY2ttYXJrV2lkdGggPSAxNjU7CiAgY29uc3Qg
UFJJbnQzMiBmaXhlZFNpemVDaGVja21hcmtIZWlnaHQgPSAxNjU7CgogIGlmICgoZml4ZWRTaXpl
Q2hlY2ttYXJrV2lkdGggPT0gYVJlY3Qud2lkdGgpICYmCiAgICAgIChmaXhlZFNpemVDaGVja21h
cmtIZWlnaHQgPT0gYVJlY3QuaGVpZ2h0KSkgewoKICAgICAgUGFpbnRGaXhlZFNpemVDaGVja01h
cmsoYVJlbmRlcmluZ0NvbnRleHQsIGFQaXhlbHNUb1R3aXBzKTsKICAgIHJldHVybjsKICB9Cgog
IGNvbnN0IFBSVWludDMyIGNoZWNrcG9pbnRzID0gNzsKICBjb25zdCBQUlVpbnQzMiBjaGVja3Np
emUgPSA5OwoKCgoKCiAgbnNjb29yZCBjaGVja2VkUG9seWdvbkRlZltdID0gezAsMiwgMiw0LCA2
LDAgLCA2LDIsIDIsNiwgMCw0LCAwLDIgfTsKCiAgY29uc3QgUFJVaW50MzIgY2VudGVyeCA9IDM7
CiAgY29uc3QgUFJVaW50MzIgY2VudGVyeSA9IDM7CgogIG5zUG9pbnQgY2hlY2tlZFBvbHlnb25b
Y2hlY2twb2ludHNdOwogIFBSVWludDMyIGRlZkluZGV4ID0gMDsKICBQUlVpbnQzMiBwb2x5SW5k
ZXggPSAwOwoKCiAgUFJVaW50MzIgc2l6ZSA9IGFSZWN0LndpZHRoIC8gY2hlY2tzaXplOwogIGlm
IChhUmVjdC5oZWlnaHQgPCBhUmVjdC53aWR0aCkgewogICBzaXplID0gYVJlY3QuaGVpZ2h0IC8g
Y2hlY2tzaXplOwogIH0KCgogIGZvciAoZGVmSW5kZXggPSAwOyBkZWZJbmRleCA8IChjaGVja3Bv
aW50cyAqIDIpOyBkZWZJbmRleCsrKSB7CiAgICBjaGVja2VkUG9seWdvbltwb2x5SW5kZXhdLngg
PSBuc2Nvb3JkKCgoKGNoZWNrZWRQb2x5Z29uRGVmW2RlZkluZGV4XSkgLSBjZW50ZXJ4KSAqIChz
aXplKSkgKyAoYVJlY3Qud2lkdGggLyAyKSArIGFSZWN0LngpOwogICAgZGVmSW5kZXgrKzsKICAg
IGNoZWNrZWRQb2x5Z29uW3BvbHlJbmRleF0ueSA9IG5zY29vcmQoKCgoY2hlY2tlZFBvbHlnb25E
ZWZbZGVmSW5kZXhdKSAtIGNlbnRlcnkpICogKHNpemUpKSArIChhUmVjdC5oZWlnaHQgLyAyKSAr
IGFSZWN0LnkpOwogICAgcG9seUluZGV4Kys7CiAgfQoKICBhUmVuZGVyaW5nQ29udGV4dC5GaWxs
UG9seWdvbihjaGVja2VkUG9seWdvbiwgY2hlY2twb2ludHMpOwp9Cgpuc3Jlc3VsdApuc0Zvcm1D
b250cm9sSGVscGVyOjpHZXROYW1lKG5zSUNvbnRlbnQqIGFDb250ZW50LG5zU3RyaW5nKiBhUmVz
dWx0KQp7CiAgbnNyZXN1bHQgcmVzdWx0ID0gMHhGRkZGRkZGNzsKICBpZiAoMCAhPSBhQ29udGVu
dCkgewogICAgbnNJSFRNTENvbnRlbnQqIGZvcm1Db250cm9sID0gMDsKICAgIHJlc3VsdCA9IGFD
b250ZW50LT5RdWVyeUludGVyZmFjZShrSUhUTUxDb250ZW50SUlELCAodm9pZCoqKSZmb3JtQ29u
dHJvbCk7CiAgICBpZiAoKDAgPT0gcmVzdWx0KSAmJiBmb3JtQ29udHJvbCkgewogICAgICBuc0hU
TUxWYWx1ZSB2YWx1ZTsKICAgICAgcmVzdWx0ID0gZm9ybUNvbnRyb2wtPkdldEhUTUxBdHRyaWJ1
dGUobnNIVE1MQXRvbXM6Om5hbWUsIHZhbHVlKTsKICAgICAgaWYgKDAgPT0gcmVzdWx0KSB7CiAg
ICAgICAgaWYgKGVIVE1MVW5pdF9TdHJpbmcgPT0gdmFsdWUuR2V0VW5pdCgpKSB7CiAgICAgICAg
ICB2YWx1ZS5HZXRTdHJpbmdWYWx1ZSgqYVJlc3VsdCk7CiAgICAgICAgfQogICAgICB9CiAgICAg
IGRvIHsgKGZvcm1Db250cm9sKS0+UmVsZWFzZSgpOyAoZm9ybUNvbnRyb2wpID0gMDsgfSB3aGls
ZSAoMCk7CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCgpuc3Jlc3VsdApuc0Zvcm1Db250
cm9sSGVscGVyOjpHZXRWYWx1ZShuc0lDb250ZW50KiBhQ29udGVudCwgbnNTdHJpbmcqIGFSZXN1
bHQpCnsKICBuc3Jlc3VsdCByZXN1bHQgPSAweEZGRkZGRkY3OwogIGlmICgwICE9IGFDb250ZW50
KSB7CiAgICBuc0lIVE1MQ29udGVudCogZm9ybUNvbnRyb2wgPSAwOwogICAgcmVzdWx0ID0gYUNv
bnRlbnQtPlF1ZXJ5SW50ZXJmYWNlKGtJSFRNTENvbnRlbnRJSUQsICh2b2lkKiopJmZvcm1Db250
cm9sKTsKICAgIGlmICgoMCA9PSByZXN1bHQpICYmIGZvcm1Db250cm9sKSB7CiAgICAgIG5zSFRN
TFZhbHVlIHZhbHVlOwogICAgICByZXN1bHQgPSBmb3JtQ29udHJvbC0+R2V0SFRNTEF0dHJpYnV0
ZShuc0hUTUxBdG9tczo6dmFsdWUsIHZhbHVlKTsKICAgICAgaWYgKDAgPT0gcmVzdWx0KSB7CiAg
ICAgICAgaWYgKGVIVE1MVW5pdF9TdHJpbmcgPT0gdmFsdWUuR2V0VW5pdCgpKSB7CiAgICAgICAg
ICB2YWx1ZS5HZXRTdHJpbmdWYWx1ZSgqYVJlc3VsdCk7CiAgICAgICAgfQogICAgICB9CiAgICAg
IGRvIHsgKGZvcm1Db250cm9sKS0+UmVsZWFzZSgpOyAoZm9ybUNvbnRyb2wpID0gMDsgfSB3aGls
ZSAoMCk7CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KCm5zcmVzdWx0Cm5zRm9ybUNvbnRy
b2xIZWxwZXI6OkdldElucHV0RWxlbWVudFZhbHVlKG5zSUNvbnRlbnQqIGFDb250ZW50LCBuc1N0
cmluZyogYVRleHQsIFBSQm9vbCBhSW5pdGlhbFZhbHVlKQp7CiAgbnNyZXN1bHQgcmVzdWx0ID0g
MDsKICBuc0lET01IVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW0gPSAwOwogIHJlc3VsdCA9IGFD
b250ZW50LT5RdWVyeUludGVyZmFjZShuc0NPTVR5cGVJbmZvPG5zSURPTUhUTUxJbnB1dEVsZW1l
bnQ+OjpHZXRJSUQoKSwgKHZvaWQqKikmaW5wdXRFbGVtKTsKICBpZiAoKDAgPT0gcmVzdWx0KSAm
JiBpbnB1dEVsZW0pIHsKICAgIGlmICgxID09IGFJbml0aWFsVmFsdWUpIHsKICAgICAgcmVzdWx0
ID0gaW5wdXRFbGVtLT5HZXREZWZhdWx0VmFsdWUoKmFUZXh0KTsKICAgIH0KICAgIGVsc2Ugewog
ICAgICByZXN1bHQgPSBpbnB1dEVsZW0tPkdldFZhbHVlKCphVGV4dCk7CiAgICB9CgogICAgZG8g
eyAoaW5wdXRFbGVtKS0+UmVsZWFzZSgpOyAoaW5wdXRFbGVtKSA9IDA7IH0gd2hpbGUgKDApOwog
IH0KICByZXR1cm4gcmVzdWx0Owp9CgoKCgpuc3Jlc3VsdApuc0Zvcm1Db250cm9sSGVscGVyOjpH
ZXRMb2NhbGl6ZWRTdHJpbmcoY29uc3QgY2hhciAqIGFQcm9wRmlsZU5hbWUsIGNvbnN0IGNoYXIq
IGFLZXksIG5zU3RyaW5nJiBvVmFsKQp7CiAgbnNyZXN1bHQgcnY7CiAgbnNDT01QdHI8bnNJU3Ry
aW5nQnVuZGxlPiBidW5kbGU7CgoKCiAgbnNDT01QdHI8bnNJSU9TZXJ2aWNlPiBwTmV0U2Vydmlj
ZSA9IGRvX0dldFNlcnZpY2Uoa0lPU2VydmljZUNJRCwgJnJ2KTs7CiAgaWYgKCghKChydikgJiAw
eDgwMDAwMDAwKSkgJiYgcE5ldFNlcnZpY2UpIHsKICAgIG5zQ09NUHRyPG5zSVVSST4gdXJpOwog
ICAgcnYgPSBwTmV0U2VydmljZS0+TmV3VVJJKGFQcm9wRmlsZU5hbWUsIDAsIGdldHRlcl9BZGRS
ZWZzKHVyaSkpOwogICAgaWYgKCghKChydikgJiAweDgwMDAwMDAwKSkgJiYgdXJpKSB7CgoKICAg
ICAgbnNDT01QdHI8bnNJU3RyaW5nQnVuZGxlU2VydmljZT4gc3RyaW5nU2VydmljZSA9IGRvX0dl
dFNlcnZpY2Uoa1N0cmluZ0J1bmRsZVNlcnZpY2VDSUQsICZydik7OwogICAgICBpZiAoKCEoKHJ2
KSAmIDB4ODAwMDAwMDApKSAmJiBzdHJpbmdTZXJ2aWNlKSB7CiAgICAgICAgbnNYUElETENTdHJp
bmcgc3BlYzsKICAgICAgICBydiA9IHVyaS0+R2V0U3BlYyhnZXR0ZXJfQ29waWVzKHNwZWMpKTsK
ICAgICAgICBpZiAoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSAmJiBzcGVjKSB7CiAgICAgICAgICBu
c0NPTVB0cjxuc0lMb2NhbGU+IGxvY2FsZSA9IDA7CiAgICAgICAgICBydiA9IHN0cmluZ1NlcnZp
Y2UtPkNyZWF0ZUJ1bmRsZShzcGVjLCBsb2NhbGUsIGdldHRlcl9BZGRSZWZzKGJ1bmRsZSkpOwog
ICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCgogIGlmICgoISgocnYpICYgMHg4MDAwMDAwMCkp
ICYmIGJ1bmRsZSAmJiBhS2V5KSB7CiAgICBuc1hQSURMU3RyaW5nIHZhbFVuaTsKICAgIG5zQXV0
b1N0cmluZyBrZXk7IGtleS5Bc3NpZ25XaXRoQ29udmVyc2lvbihhS2V5KTsKICAgIHJ2ID0gYnVu
ZGxlLT5HZXRTdHJpbmdGcm9tTmFtZShrZXkuR2V0VW5pY29kZSgpLCBnZXR0ZXJfQ29waWVzKHZh
bFVuaSkpOwogICAgaWYgKCghKChydikgJiAweDgwMDAwMDAwKSkgJiYgdmFsVW5pKSB7CiAgICAg
IG9WYWwuQXNzaWduKHZhbFVuaSk7CiAgICB9IGVsc2UgewogICAgICBvVmFsLlRydW5jYXRlKCk7
CiAgICB9CiAgfQogIHJldHVybiBydjsKfQoKCm5zcmVzdWx0Cm5zRm9ybUNvbnRyb2xIZWxwZXI6
OkdldERpc2FibGVkKG5zSUNvbnRlbnQqIGFDb250ZW50LCBQUkJvb2wqIG9Jc0Rpc2FibGVkKQp7
CiAgbnNDT01QdHI8bnNJSFRNTENvbnRlbnQ+IGZvcm1Db250cm9sID0gZG9fUXVlcnlJbnRlcmZh
Y2UoYUNvbnRlbnQpOwogIG5zSFRNTFZhbHVlIHZhbHVlOwogIG5zcmVzdWx0IHJlc3VsdCA9IGZv
cm1Db250cm9sLT5HZXRIVE1MQXR0cmlidXRlKG5zSFRNTEF0b21zOjpkaXNhYmxlZCwgdmFsdWUp
OwogIGlmICgwID09IHJlc3VsdCkgewogICAgaWYgKGVIVE1MVW5pdF9FbXB0eSA9PSB2YWx1ZS5H
ZXRVbml0KCkpIHsKICAgICAgKm9Jc0Rpc2FibGVkID0gMTsKICAgIH0gZWxzZSB7CiAgICAgICpv
SXNEaXNhYmxlZCA9IDA7CiAgICB9CiAgfSBlbHNlIHsKICAgICpvSXNEaXNhYmxlZCA9IDA7CiAg
fQogIHJldHVybiAwOwp9CiMgOTQ2ICJuc0Zvcm1Db250cm9sSGVscGVyLmNwcCIKbnNyZXN1bHQK
bnNGb3JtQ29udHJvbEhlbHBlcjo6RG9NYW51YWxTdWJtaXRPclJlc2V0KG5zSVByZXNDb250ZXh0
KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lGcmFtZSogYUZvcm1GcmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRm9ybUNvbnRyb2xGcmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhRG9TdWJtaXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYURvRE9NRXZl
bnQpCnsKICBkbyB7IGlmKCghKGFQcmVzQ29udGV4dCkgPyBuc0RlYnVnOjpXYXJuSWZGYWxzZSgi
TlNfRU5TVVJFX1RSVUUoIiAiYVByZXNDb250ZXh0IiAiKSBmYWlsZWQiLCAiYVByZXNDb250ZXh0
IiwgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiwgOTU0KSA6IDApKSByZXR1cm4gKChuc3Jlc3Vs
dCkgMHg4MDAwNDAwM0wpOyB9IHdoaWxlICgwKTsKICBkbyB7IGlmKCghKGFGb3JtRnJhbWUpID8g
bnNEZWJ1Zzo6V2FybklmRmFsc2UoIk5TX0VOU1VSRV9UUlVFKCIgImFGb3JtRnJhbWUiICIpIGZh
aWxlZCIsICJhRm9ybUZyYW1lIiwgIm5zRm9ybUNvbnRyb2xIZWxwZXIuY3BwIiwgOTU1KSA6IDAp
KSByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwNDAwM0wpOyB9IHdoaWxlICgwKTsKCiAgbnNyZXN1
bHQgcmVzdWx0ID0gMDsKCiAgbnNDT01QdHI8bnNJQ29udGVudD4gZm9ybUNvbnRlbnQ7CiAgYUZv
cm1GcmFtZS0+R2V0Q29udGVudChnZXR0ZXJfQWRkUmVmcyhmb3JtQ29udGVudCkpOwojIDk2OSAi
bnNGb3JtQ29udHJvbEhlbHBlci5jcHAiCiAgbnNDT01QdHI8bnNJQ29udGVudD4gY29udHJvbENv
bnRlbnQ7CiAgaWYgKGFEb1N1Ym1pdCAmJiBhRm9ybUNvbnRyb2xGcmFtZSAhPSAwKSB7CiAgICBh
Rm9ybUNvbnRyb2xGcmFtZS0+R2V0Q29udGVudChnZXR0ZXJfQWRkUmVmcyhjb250cm9sQ29udGVu
dCkpOwogIH0KCiAgaWYgKGZvcm1Db250ZW50KSB7CgogICAgbnNDT01QdHI8bnNJUHJlc1NoZWxs
PiBzaGVsbDsKICAgIGlmIChhUHJlc1NoZWxsID09IDApIHsKICAgICAgcmVzdWx0ID0gYVByZXND
b250ZXh0LT5HZXRTaGVsbChnZXR0ZXJfQWRkUmVmcyhzaGVsbCkpOwogICAgICBhUHJlc1NoZWxs
ID0gc2hlbGwuZ2V0KCk7CiAgICB9CgoKICAgIGlmICgoISgocmVzdWx0KSAmIDB4ODAwMDAwMDAp
KSAmJiAwICE9IGFQcmVzU2hlbGwpIHsKCgogICAgICBuc0NPTVB0cjxuc0lDb250ZW50PiBmb3Jt
Q29udHJvbDsKICAgICAgYUZvcm1Db250cm9sRnJhbWUtPkdldENvbnRlbnQoZ2V0dGVyX0FkZFJl
ZnMoZm9ybUNvbnRyb2wpKTsKCiAgICAgIG5zRm9ybUV2ZW50IGV2ZW50OwogICAgICBldmVudC5l
dmVudFN0cnVjdFR5cGUgPSAyMTsKICAgICAgZXZlbnQubWVzc2FnZSA9IGFEb1N1Ym1pdD8oMTIw
MCk6KDEyMDAgKyAxKTsKICAgICAgZXZlbnQub3JpZ2luYXRvciA9IGZvcm1Db250cm9sOwogICAg
ICBuc0V2ZW50U3RhdHVzIHN0YXR1cyA9IG5zRXZlbnRTdGF0dXNfZUlnbm9yZTsKICAgICAgaWYg
KGFEb0RPTUV2ZW50KSB7CiAgICAgICAgYVByZXNTaGVsbC0+SGFuZGxlRE9NRXZlbnRXaXRoVGFy
Z2V0KGZvcm1Db250ZW50LCAmZXZlbnQsICZzdGF0dXMpOwogICAgICB9IGVsc2UgewogICAgICAg
IGFQcmVzU2hlbGwtPkhhbmRsZUV2ZW50V2l0aFRhcmdldCgmZXZlbnQsIDAsIGZvcm1Db250ZW50
LCAweDAwMDEsICZzdGF0dXMpOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0K


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

end of thread, other threads:[~2001-12-08  1:06 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-12-07 16:58 c++/2876: Internal error: Segmentation fault rodrigc
  -- strict thread matches above, loose matches on Subject: below --
2001-12-07 17:06 rodrigc
2001-05-20  0:46 gilles.rajaobelina

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).