libstdc++/6230: Using not1() from std_function.h causes ICE

rkbr@oce.nl rkbr@oce.nl
Mon Apr 8 09:23:00 GMT 2002


>Number:         6230
>Category:       libstdc++
>Synopsis:       Using not1() from std_function.h causes ICE
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Mon Apr 08 07:56:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Roel K. Brand
>Release:        gcc version 2.95.3 20010315 (release)
>Organization:
>Environment:
i386-slackware-linux
>Description:
I encountered a bug in not1() from std_function.h
Below is the full bug report.

> # GCC version, system type and build options:
> gcc -v

Reading specs from /usr/lib/gcc-lib/i386-slackware-linux/2.95.3/specs
gcc version 2.95.3 20010315 (release)

> # Command line to compile my code and generate the bug:
> # Compiler output follows below.
> gcc -o main main.cpp

/usr/lib/gcc-lib/i386-slackware-linux/2.95.3/../../../../include/g++-3/stl_function.h: In instantiation of `unary_negate<Foo::lt>':
/usr/lib/gcc-lib/i386-slackware-linux/2.95.3/../../../../include/g++-3/stl_function.h:159:   instantiated from `not1<Foo::lt>(const Foo::lt &)'
main.cpp:31:   instantiated from here
/usr/lib/gcc-lib/i386-slackware-linux/2.95.3/../../../../include/g++-3/stl_function.h:159: no type named `argument_type' in `class Foo::lt'
/usr/lib/gcc-lib/i386-slackware-linux/2.95.3/../../../../include/g++-3/stl_function.h:159: template argument 1 is invalid
/usr/lib/gcc-lib/i386-slackware-linux/2.95.3/../../../../include/g++-3/stl_function.h:151: no type named `argument_type' in `class Foo::lt'
/usr/lib/gcc-lib/i386-slackware-linux/2.95.3/../../../../include/g++-3/stl_function.h:151: no type named `argument_type' in `class Foo::lt'
/usr/lib/gcc-lib/i386-slackware-linux/2.95.3/../../../../include/g++-3/stl_function.h:151: `unary_negate<Foo::lt>::operator ()(...)' must be a nonstatic member
function
/usr/lib/gcc-lib/i386-slackware-linux/2.95.3/../../../../include/g++-3/stl_function.h: In instantiation of `unary_negate<Foo::lt>::operator ()(...)':
/usr/lib/gcc-lib/i386-slackware-linux/2.95.3/../../../../include/g++-3/stl_algo.h:104:   instantiated from `find_if<_List_iterator<Foo,Foo &,Foo *>, unary_negate<Foo::lt> >(_List_iterator<Foo,Foo &,Foo *>, _List_iterator<Foo,Foo &,Foo *>, unary_negate<Foo::lt>, input_iterator_tag)'
/usr/lib/gcc-lib/i386-slackware-linux/2.95.3/../../../../include/g++-3/stl_algo.h:199:   instantiated from `find_if<_List_iterator<Foo,Foo &,Foo *>, unary_negate<Foo::lt> >(_List_iterator<Foo,Foo &,Foo *>, _List_iterator<Foo,Foo &,Foo *>, unary_negate<Foo::lt>)'
/usr/lib/gcc-lib/i386-slackware-linux/2.95.3/../../../../include/g++-3/stl_algo.h:552:   instantiated from `remove_if<_List_iterator<Foo,Foo &,Foo *>, unary_negate<Foo::lt> >(_List_iterator<Foo,Foo &,Foo *>, _List_iterator<Foo,Foo &,Foo *>, unary_negate<Foo::lt>)'
main.cpp:31:   instantiated from here
/usr/lib/gcc-lib/i386-slackware-linux/2.95.3/../../../../include/g++-3/stl_function.h:151: no type named `argument_type' in `class Foo::lt'
/usr/lib/gcc-lib/i386-slackware-linux/2.95.3/../../../../include/g++-3/stl_function.h:151: no type named `argument_type' in `class Foo::lt'
/usr/lib/gcc-lib/i386-slackware-linux/2.95.3/../../../../include/g++-3/stl_function.h:151: `unary_negate<Foo::lt>::operator ()(...)' must be a nonstatic member function
/usr/lib/gcc-lib/i386-slackware-linux/2.95.3/../../../../include/g++-3/stl_function.h: In function `{error} unary_negate<Foo::lt>::operator ()(...)':
/usr/lib/gcc-lib/i386-slackware-linux/2.95.3/../../../../include/g++-3/stl_function.h:151: Internal compiler error in `layout_decl', at stor-layout.c:247
Please submit a full bug report.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.

> # Preprocessed file that triggers the bug:
> # Included in separate attachment main.ii
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="main.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="main.ii"

IyAxICJtYWluLmNwcCIKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4
LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2FsZ29yaXRobSIgMSAzCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2Fy
ZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgojIDEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX2NvbmZpZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgogCiAKIAogCiAKIAogCiAKIAogCiAKCgogCgog
CiAKIAogCiAKIAogCgoKCgoKCgoKIyAxNDggIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dh
cmUtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5oIiAz
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIAoKCgoKCiAKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKCgogCgoKCgoKCgogCiMgMTQyICIv
dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyMDggIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgogCgoKCgoKCgoKIAoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKIAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgogCgoK
CiMgNjUgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMwoKCiAKCgoKCgogCgoKCgogCgoKCgoK
CgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
CiAKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoK
CgoKIAoKCgoKIAoKCgoKCgojIDI4MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwoKCgog
CgoKCgoKCgoKIAoKCgoKIAoKIAoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5o
IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzMTEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o
IiAyIDMKCgoKCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCgojIDEgIi91
c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVm
LmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1s
aW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgc2l6ZV90OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKIyAyNzEg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8y
Ljk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoK
CiAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19x
dWFkX3Q7CiMgNDggIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKCnR5cGVkZWYgc2lnbmVk
IGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYg
c2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9f
dWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQg
aW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBp
bnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGlu
dCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3Vf
cXVhZF90IF9fZGV2X3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX3VpZF90OwkJIAp0eXBlZGVmIF9f
dV9pbnQgX19naWRfdDsJCSAKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190OwkJIAp0eXBlZGVmIF9f
dV9pbnQgX19tb2RlX3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7IAkJIAp0eXBlZGVm
IGxvbmcgaW50IF9fb2ZmX3Q7CQkgCnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CQkgCnR5cGVk
ZWYgaW50IF9fcGlkX3Q7CQkJIAp0eXBlZGVmIGludCBfX3NzaXplX3Q7CQkJIAp0eXBlZGVmIF9f
dV9sb25nIF9fcmxpbV90OwkJIAp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsJCSAKdHlw
ZWRlZiBfX3VfaW50IF9faWRfdDsJCQkgCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3Zh
bFsyXTsKICB9IF9fZnNpZF90OwkJCQkgCgogCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsJCQkgCnR5
cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVm
IHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNf
dDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7CQkgCgwKdHlwZWRlZiBsb25nIGludCBfX2Ns
b2NrX3Q7CgogCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKIAp0eXBlZGVmIGludCBfX3RpbWVy
X3Q7CgoKIAoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKIAp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IGludCBfX2lwY19waWRfdDsKCgogCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7CgogCgog
CnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0
X3Q7CgogCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3Qg
X19mc2Jsa2NudDY0X3Q7CgogCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVm
IF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgogCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0
X3Q7CgogCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKIAp0eXBlZGVmIGxvbmcgaW50IF9f
dF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKIAp0
eXBlZGVmIGludCBfX2ludHB0cl90OwoKIAp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5f
dDsKCgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVk
LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDYyICIvdXNyL2luY2x1ZGUvYml0cy9zY2hl
ZC5oIiAzCgoKCgoKIApzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3By
aW9yaXR5OwogIH07CgoKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIg
MwoKCiAKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsgICAg
CiAgaW50IF9fc3BpbmxvY2s7ICAgICAgIAoKfTsKCgogCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFk
X2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgogCnR5cGVkZWYgc3RydWN0IF9fcHRo
cmVhZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5Owog
IHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7
CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9z
ZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRf
YXR0cl90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBf
X2NfbG9jazsgIAogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOyAgICAgICAgIAp9IHB0aHJl
YWRfY29uZF90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRf
Y29uZGF0dHJfdDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgogCiAK
CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOyAgICAgICAgICAgICAgICAKICBp
bnQgX19tX2NvdW50OyAgICAgICAgICAgICAgICAgICAKICBfcHRocmVhZF9kZXNjciBfX21fb3du
ZXI7ICAgICAgICAKICBpbnQgX19tX2tpbmQ7ICAgICAgICAgICAgICAgICAgICAKICBzdHJ1Y3Qg
X3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7ICAKfSBwdGhyZWFkX211dGV4X3Q7CgoKIAp0eXBl
ZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoK
IAp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgojIDExNyAiL3Vzci9pbmNsdWRlL2JpdHMv
cHRocmVhZHR5cGVzLmgiIDMKCgojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz
LmgiIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKCgojIDE0MyAi
L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKCgojIDkgIi91c3IvaW5jbHVkZS9fR19j
b25maWcuaCIgMiAzCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxp
bnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMK
CgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1s
aW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1s
aW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50
ICB3aW50X3Q7CgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2Fy
ZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgojIDE0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCgoKCgoKCgoKIyAxICIv
dXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK
IyA0NiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoK
IyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVk
ZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAx
OTAgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFj
a3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgogCgog
CgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5j
bHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDQ4ICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA1MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIg
MwoKCiAKCgoKCgoKCgoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVu
aW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVl
OwkJIAp9IF9fbWJzdGF0ZV90OwoKCgoKIAoKIyA2ODMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz
CgoKCiMgMjQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgoKdHlwZWRlZiBzdHJ1Y3QK
ewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5
cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsK
fSBfR19mcG9zNjRfdDsKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgojIDQ2ICIvdXNyL2luY2x1ZGUvd2NoYXIu
aCIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMv
aW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoK
CgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4z
L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
IAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4z
L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgojIDE5MCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKCgogCgoj
IDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVk
ZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgoKCiAK
CgoKCgoKCgoKCgojIDc2ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKCgoKIAoKIyA2ODMgIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoKCiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMK
CgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNs
YWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAK
CgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNs
dWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAK
CiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNs
dWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xh
Y2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKIyAy
NzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51
eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2Mt
bGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzAgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgog
CgoKIAplbnVtCnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05W
X05PREIsCiAgX19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05W
X0ZVTExfT1VUUFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExF
VEVfSU5QVVQsCgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJO
QUxfRVJST1IKfTsKCgogCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dD
T05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsKCgogCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0
cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3Ry
dWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgogCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChz
dHJ1Y3QgX19nY29udl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAoJCQkgICAg
X19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKCQkJICAg
IHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBpbnQsIGludCk7CgogCnR5cGVkZWYgaW50ICgq
X19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAo
Kl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKIAp0eXBlZGVmIGlu
dCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAoJCQkJICBzdHJ1
Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAoJCQkJICBfX2NvbnN0IHVuc2lnbmVkIGNo
YXIgKiwKCQkJCSAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAoJCQkJICBfX2NvbnN0IHVuc2ln
bmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKCQkJCSAgc2l6ZV90ICopOwoKIAp0eXBlZGVm
IGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWdu
ZWQgY2hhciAqLAoJCQkJCSAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCgkJCQkJICB1bnNpZ25l
ZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgogCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFu
c19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKCQkJCQlzaXpl
X3QgKik7CgogCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKios
IGNvbnN0IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZv
aWQgKik7CgpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhCnsKICAgCiAgX19nY29udl90cmFuc19m
Y3QgX190cmFuc19mY3Q7CiAgX19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRl
eHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAq
X19kYXRhOwogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgogCnN0cnVj
dCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJf
aGFuZGxlOwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBj
aGFyICpfX2Zyb21fbmFtZTsKICBjaGFyICpfX3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0IF9fZmN0
OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2djb252X2VuZF9mY3QgX19lbmRf
ZmN0OwoKICAgCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zy
b207CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKICAgCiAg
aW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsJCSAKfTsKCiAKCnN0cnVjdCBfX2djb252
X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7ICAgICAKICB1bnNpZ25lZCBj
aGFyICpfX291dGJ1ZmVuZDsgIAoKCiAgIAogIGludCBfX2ZsYWdzOwoKICAgCgogIGludCBfX2lu
dm9jYXRpb25fY291bnRlcjsKCiAgIAoKICBpbnQgX19pbnRlcm5hbF91c2U7CgogIF9fbWJzdGF0
ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwkgCgoKICAgCiAgc3RydWN0IF9f
Z2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgogCnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZf
aW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3RlcHM7
CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhIFswXSA7Cn0g
Kl9fZ2NvbnZfdDsKCgojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKdHlwZWRl
ZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0
cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2Rh
dGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQz
Ml90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVk
IGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf
X1NJX18pKSk7CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoj
IDE1MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDIgMwoKCgoKCgoKCgoKCgoKCgoKCgog
ICAgICAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjM0ICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCiMgMjQ4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
c2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25m
aWcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiAKCgoKCgoK
CgoKCgoKCgoKCgoKIAogCiMgMzE2ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxp
bnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiMgMzYgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFj
a3dhcmUtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3JlbG9wcy5o
IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm
IF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpp
bmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAg
cmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I8PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3kg
PCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0K
CiAKCgoKIAogCiAKIyAzOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8y
Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMg
MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9zdGxfcGFpci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWly
IHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoK
ICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKICBwYWlyKCkgOiBmaXJzdChfVDEoKSksIHNlY29u
ZChfVDIoKSkge30KICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJz
dChfX2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1Uy
PgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBz
ZWNvbmQoX19wLnNlY29uZCkge30KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+
CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3Qg
cGFpcjxfVDEsIF9UMj4mIF9feSkKeyAKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAm
JiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7IAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFz
cyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBj
b25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7IAogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmly
c3QgfHwgCiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8
IF9feS5zZWNvbmQpOyAKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUg
cGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKGNvbnN0IF9UMSYgX194LCBjb25zdCBfVDImIF9feSkK
ewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCiAKCgoKIAogCiAKIyA0MiAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy90
eXBlX3RyYWl0cy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX190cnVlX3R5cGUgewp9OwoKc3RydWN0IF9fZmFsc2Vf
dHlwZSB7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7IAog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgICB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0
OwogICAgICAgICAgICAgICAgICAgIAoKCgoKCiAgICAKCgoKCgoKCgogCgogICB0eXBlZGVmIF9f
ZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
ZmFsc2VfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCgoKIAogCiAKCgoKdGVtcGxhdGU8PiAgc3Ry
dWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5
cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlw
ZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBl
Owp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVj
dCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90
eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190
eXBlX3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9E
X3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlw
ZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlw
ZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90
cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7
Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190
eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg
ICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
ICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlz
X1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4g
ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1
Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90
eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAqPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
ICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBp
c19QT0RfdHlwZTsKfTsKCiMgMjk1ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxp
bnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgiIDMKCgoK
IAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYg
X19mYWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRl
Z2VyPGJvb2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxh
dGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J
bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4g
ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0
IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRl
Z3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9J
c19pbnRlZ2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0
ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdl
cjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4g
IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAg
dHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lz
X2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs
Owp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2lu
dGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy
YWw7Cn07CgoKCgoKIAogCiAKIyA0NSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1s
aW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAz
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKCgpleHRlcm4gIkMiIHsgCgogCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xh
Y2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNs
YWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNs
YWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4OCAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3
YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgog
CgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMzICIvdXNy
L2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgogCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9f
cmVzdHJpY3QgX19kZXN0LAoJCSAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBz
aXplX3QgX19uKSB0aHJvdyAoKSA7CiAKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rl
c3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgOwoKIAoK
CgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg
dm9pZCAqX19yZXN0cmljdCBfX3NyYywKCQkgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAg
IHRocm93ICgpIDsKCgoKIApleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2Ms
IHNpemVfdCBfX24pIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9p
ZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpICAg
OwoKIApleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6
ZV90IF9fbikKICAgICAgdGhyb3cgKCkgICA7CgojIDczICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi
IDMKCgoKIApleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpIDsKIApleHRlcm4gY2hh
ciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCgkJICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKSA7CgogCmV4dGVybiBjaGFy
ICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zcmMpCiAgICAgdGhyb3cgKCkgOwogCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpf
X3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAoJCSAgICAg
IHNpemVfdCBfX24pIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hh
ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpICAgOwogCmV4dGVybiBp
bnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVf
dCBfX24pCiAgICAgdGhyb3cgKCkgICA7CgogCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBj
aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgICA7CiAKZXh0ZXJu
IHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKCQkgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKSA7CgojIDExNiAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoKCiAKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25z
dCBjaGFyICpfX3MpIHRocm93ICgpICAgOwoKCiAKCgoKCgoKCiMgMTUyICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDMKCgogCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBp
bnQgX19jKSB0aHJvdyAoKSAgIDsKIApleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFy
ICpfX3MsIGludCBfX2MpIHRocm93ICgpICAgOwoKCgoKCgoKIAoKZXh0ZXJuIHNpemVfdCBzdHJj
c3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkKICAgICB0aHJv
dyAoKSAgIDsKIAoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2Nv
bnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpICAgOwogCmV4dGVybiBjaGFyICpzdHJw
YnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJv
dyAoKSAgIDsKIApleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ss
IF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgICA7CgoKCgoKCgogCmV4dGVy
biBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19kZWxpbSkKICAgICB0aHJvdyAoKSA7CgogCgpleHRlcm4gY2hhciAqX19zdHJ0b2tf
ciAoY2hhciAqX19yZXN0cmljdCBfX3MsCgkJCSBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19k
ZWxpbSwKCQkJIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpIDsKCmV4dGVy
biBjaGFyICpzdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2RlbGltLAoJCSAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0
aHJvdyAoKSA7CgoKIyAyMTQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCmV4dGVybiBz
aXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgICA7CgoKCgoKCgoKCiAK
ZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpIDsKCiAKCmV4dGVy
biBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19i
dWZsZW4pIHRocm93ICgpIDsKCgogCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNp
emVfdCBfX24pIHRocm93ICgpIDsKCgogCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQg
Kl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpIDsKCiAKZXh0ZXJuIHZv
aWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50
IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19u
KQogICAgIHRocm93ICgpICAgOwoKIApleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAq
X19zLCBpbnQgX19jKSB0aHJvdyAoKSAgIDsKCiAKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25z
dCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpICAgOwoKIAoKZXh0ZXJuIGludCBmZnMgKGlu
dCBfX2kpIHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCgoKCgoKCgoK
CiAKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh
ciAqX19zMikKICAgICB0aHJvdyAoKSAgIDsKCiAKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19j
b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhy
b3cgKCkgICA7CgoKIyAyODkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCgpleHRlcm4g
Y2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCgkJICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCkgOwoKCiMgMzMyICIvdXNyL2luY2x1
ZGUvc3RyaW5nLmgiIDMKCgoKCiMgMzYwICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKfSAK
CgojIDQ4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8u
Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9saW1pdHMuaCIgMSAz
CiAKCgogCgoKCgoKIAojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgv
Mi45NS4zL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwogCgoKCgoKIyAxICIvdXNyL2xpYi9nY2Mt
bGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIAoK
CiAKCiMgMTE0ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9p
bmNsdWRlL2xpbWl0cy5oIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCiAKCiMgMTEzICIvdXNyL2luY2x1ZGUv
bGltaXRzLmgiIDMKCgoKCiAgCgoKCgojIDE0MCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCgoK
CiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCgoKCgogCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCgogCgoK
IAoKCiAKCgogCgoKIAoKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoK
IAoKCiAKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xv
Y2FsX2xpbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIAojIDEg
Ii91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaCIgMSAzCgoKCgoKCgoKCgoKCgoKCgoKCgojIDM2
ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCgoKIAoKCgoKIAoKCgoKIAoKCgoK
CiAKCiAKCgogCgogCgoKIAoKIAoKCiAKCgoKIAoKCiAKCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0
cy9wb3NpeDFfbGltLmgiIDIgMwoKCgoKCgoKCiAKCgoKCgoKCiMgMTQ0ICIvdXNyL2luY2x1ZGUv
bGltaXRzLmgiIDIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEg
MwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKIAoKCgog
CgoKIAoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiMgMTQ4ICIv
dXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKCgojIDExNyAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCgojIDcg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3lz
bGltaXRzLmgiIDIgMwoKCiMgMTEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGlu
dXgvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKCiAKCgoKIAoKCgogCgoKCgogCgoK
CgoKIAoKCgogCgoKCgoKCgoKCgoKCiAKCiAKCgoKCiAKCgoKIAoKCgoKCgoKCiAKCgoKIAoKCgoK
CgoKCgoKCgoKIAoKCgojIDEwNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51
eC8yLjk1LjMvaW5jbHVkZS9saW1pdHMuaCIgMwoKCgoKIAoKCgoKCgoKCgojIDQ5ICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgojIDEgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoK
CgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2Mt
bGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2Mt
bGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoK
IAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgojIDI4
MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9z
dGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJl
LWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiMgMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKZXh0ZXJuICJDIiB7IAoKCgoK
IyA5MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKIAp0eXBlZGVmIHN0cnVjdAogIHsKICAg
IGludCBxdW90OwkJCSAKICAgIGludCByZW07CQkJIAogIH0gZGl2X3Q7CgogCgp0eXBlZGVmIHN0
cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CQkgCiAgICBsb25nIGludCByZW07CQkgCiAgfSBs
ZGl2X3Q7CgoKCiMgMTE4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKIAoKCgogCgoKCgoK
IAoKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKSA7
CgoKIApleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSAg
IDsKIApleHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSAgIDsK
IApleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpICAg
OwoKCiAKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBj
aGFyICpfX25wdHIpCiAgICAgdGhyb3cgKCkgICA7CgoKIApleHRlcm4gZG91YmxlIHN0cnRvZCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0cikgdGhyb3cgKCkgOwoKCgoKCgoKCgoKIApleHRlcm4gbG9uZyBpbnQgc3RydG9s
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQljaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCkgOwogCmV4dGVybiB1bnNpZ25lZCBsb25nIGlu
dCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKSA7CgoKIApfX2V4
dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwKCQkJICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f
YmFzZSkgdGhyb3cgKCkgOwogCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKSA7
CgoKCiAKCiAKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCkgOwogCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCgkJCQkJY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAg
dGhyb3cgKCkgOwoKCgojIDI0NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKCiAKCgpleHRl
cm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAoJCQkJIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0
aHJvdyAoKSA7CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKCQkJCWNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19n
cm91cCkKICAgICB0aHJvdyAoKSA7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJu
YWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCgkJCQkgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpIDsKCmV4
dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKCQkJCSAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJICAgaW50IF9f
YmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpIDsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50
IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJ
CQkgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJCSAgICAgaW50IF9fYmFzZSwg
aW50IF9fZ3JvdXApIHRocm93ICgpIDsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LAoJCQkJCSBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkgaW50IF9fYmFzZSwgaW50
IF9fZ3JvdXApIHRocm93ICgpIDsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u
ZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKgoJCQkJCQkgICBf
X3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkJICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJ
CQkJCSAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpIDsKCgoKCiMgMzc4
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKCiAKCgpleHRlcm4gY2hhciAqbDY0YSAobG9u
ZyBpbnQgX19uKSB0aHJvdyAoKSA7CgogCmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNo
YXIgKl9fcykgdGhyb3cgKCkgICA7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEg
MwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCgoKCnR5cGVkZWYg
X191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9p
bnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRf
dDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsK
Cgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoK
CgoKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsK
CgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3Qgbmxpbmtf
dDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7
CgoKCgoKCgoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRf
dDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBk
YWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5
X3Q7CgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiAKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKCgoKCgoKCgoKIyA1MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCiMgNjEg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKCgoKCgogCnR5cGVkZWYgX190aW1lX3QgdGltZV90
OwoKCgoKCgoKCgoKIAp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsKCgoKCgoKCgoKCiAK
dHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKCgoKCgojIDExMiAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMwoKCgoKIyAzNjQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyAxMjYgIi91c3IvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxMzcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
MwoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoK
CiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAK
CiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
c2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoK
IyAyNzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1
ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1s
aW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTQwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDIgMwoKCgogCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWdu
ZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKCgogCgojIDE3
NCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgoKIAoKCgoKCgoKdHlwZWRlZiBpbnQgaW50
OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX1FJX18gKSkpIDsKdHlwZWRlZiBpbnQg
aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19ISV9fICkpKSA7CnR5cGVkZWYg
aW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fU0lfXyApKSkgOwp0eXBl
ZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX0RJX18gKSkpIDsK
Cgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g
KCAgX19RSV9fICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKCAgX19ISV9fICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50
MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19TSV9fICkpKSA7CnR5cGVkZWYgdW5z
aWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19ESV9fICkp
KSA7Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193
b3JkX18pKSk7CgoKIAoKCgoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9lbmRpYW4uaCIgMSAzCiAKCgoKCgoKIyAzNyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDIwNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAy
IDMKCgogCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiAKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCgogCgoKIAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0
LmgiIDMKCgoKCgoKCgoKCgoKIyA1NiAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDMKCiMg
NzIgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAzCgojIDMxICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKIAoKCnR5
cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAq
IHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSkgXTsKICB9IF9fc2lnc2V0X3Q7CgoKCgogCgoK
CgoKIyAxMjUgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCgojIDM0ICIvdXNyL2luY2x1
ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoKCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgog
CgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCgoKCgoKCiMgNTEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgojIDYxICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAzCgoKCiMgNzIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA4NCAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDk2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgoK
CgoKIAoKc3RydWN0IHRpbWVzcGVjCiAgewogICAgbG9uZyBpbnQgdHZfc2VjOwkJIAogICAgbG9u
ZyBpbnQgdHZfbnNlYzsJCSAKICB9OwoKCgoKCiMgMzY0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz
CgoKCiMgNDMgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiMgNTcgIi91c3Iv
aW5jbHVkZS9iaXRzL3RpbWUuaCIgMwoKCgoKCgoKCiAKCnN0cnVjdCB0aW1ldmFsCiAgewogICAg
X190aW1lX3QgdHZfc2VjOwkJIAogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwkgCiAgfTsKCgoj
IDQ1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoKIAp0eXBlZGVmIGxvbmcgaW50
IF9fZmRfbWFzazsKCiAKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICAgCgoKCgoKICAgIF9f
ZmRfbWFzayBfX2Zkc19iaXRzWzEwMjQgIC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpIF07CgoK
ICB9IGZkX3NldDsKCiAKCgoKIAp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoKIAoKCgoKIAoK
CgoKCgpleHRlcm4gIkMiIHsgCgogCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywg
ZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKCQkgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193
cml0ZWZkcywKCQkgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCgkJICAgc3RydWN0
IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKSA7CgojIDExMCAiL3Vzci9p
bmNsdWRlL3N5cy9zZWxlY3QuaCIgMwoKCn0gCgoKIyAyMDkgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMiAzCgoKIAojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL3N5c21h
Y3Jvcy5oIiAzCgoKCiMgMjEyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKCgoK
CgogCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwkgIAoKCgp0eXBlZGVmIF9fZnNibGtj
bnRfdCBmc2Jsa2NudF90OyAgCgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7ICAK
CgojIDI0OCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgoKCgoKCgoKfSAKCgojIDM5MSAi
L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgogCgoKCiAKZXh0ZXJuIGxvbmcgaW50IHJhbmRv
bSAodm9pZCkgdGhyb3cgKCkgOwoKIApleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQg
X19zZWVkKSB0aHJvdyAoKSA7CgogCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVk
IGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCgkJCXNpemVfdCBfX3N0YXRlbGVuKSB0aHJv
dyAoKSA7CgogCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIHRocm93
ICgpIDsKCgoKIAoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwkJ
IAogICAgaW50MzJfdCAqcnB0cjsJCSAKICAgIGludDMyX3QgKnN0YXRlOwkJIAogICAgaW50IHJh
bmRfdHlwZTsJCSAKICAgIGludCByYW5kX2RlZzsJCSAKICAgIGludCByYW5kX3NlcDsJCSAKICAg
IGludDMyX3QgKmVuZF9wdHI7CQkgCiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCBy
YW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKCQkgICAgIGludDMyX3QgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQg
X19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKSA7CgpleHRlcm4gaW50
IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Rh
dGVidWYsCgkJCXNpemVfdCBfX3N0YXRlbGVuLAoJCQlzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVz
dHJpY3QgX19idWYpIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19y
ZXN0cmljdCBfX3N0YXRlYnVmLAoJCSAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJp
Y3QgX19idWYpIHRocm93ICgpIDsKCgoKCiAKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAo
KSA7CiAKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpIDsK
CgogCmV4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCkgOwoK
CgoKIAoKIApleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIHRocm93ICgpIDsKZXh0ZXJuIGRv
dWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCkgOwoK
IApleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkgdGhyb3cgKCkgOwpleHRlcm4gbG9uZyBp
bnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpIDsKCiAK
ZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIHRocm93ICgpIDsKZXh0ZXJuIGxvbmcgaW50
IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKSA7CgogCmV4
dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgdGhyb3cgKCkgOwpleHRlcm4g
dW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZb
M10pIHRocm93ICgpIDsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9f
cGFyYW1bN10pIHRocm93ICgpIDsKCgogCgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVu
c2lnbmVkIHNob3J0IGludCBfX3hbM107CSAKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94
WzNdOyAgCiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwkgCiAgICB1bnNpZ25lZCBzaG9ydCBp
bnQgX19pbml0OwkgCiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsJIAogIH07CgogCmV4
dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm
ZmVyLAoJCSAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCkgOwpleHRl
cm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCgkJICAgICAg
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKCQkgICAgICBkb3VibGUg
Kl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBscmFuZDQ4X3Ig
KHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCgkJICAgICAgbG9uZyBp
bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpIDsKZXh0ZXJuIGludCBucmFuZDQ4X3Ig
KHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAoJCSAgICAgIHN0cnVjdCBkcmFuZDQ4X2Rh
dGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCgkJICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19y
ZXN1bHQpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4
X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCgkJICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpIHRocm93ICgpIDsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0
IGludCBfX3hzdWJpWzNdLAoJCSAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3Qg
X19idWZmZXIsCgkJICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp
IDsKCiAKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRy
YW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzZWVkNDhf
ciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwKCQkgICAgIHN0cnVjdCBkcmFuZDQ4
X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKSA7CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWdu
ZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCgkJICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19i
dWZmZXIpIHRocm93ICgpIDsKCgoKCgoKCiAKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9f
c2l6ZSkgdGhyb3cgKCkgICA7CiAKZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIs
IHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgICA7CgoKCiAKCmV4dGVybiB2b2lkICpyZWFs
bG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgICA7CiAKZXh0ZXJuIHZv
aWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpIDsKCgogCmV4dGVybiB2b2lkIGNmcmVlICh2
b2lkICpfX3B0cikgdGhyb3cgKCkgOwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFj
a3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xh
Y2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xh
Y2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgoKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dh
cmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAK
CiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjUgIi91c3Iv
aW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKZXh0ZXJuICJDIiB7IAoKIAoKCiAKZXh0ZXJuIHZvaWQg
KmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgOwoKCgoKCn0gCgoKIyA1NDcgIi91c3Iv
aW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgogCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBf
X3NpemUpIHRocm93ICgpICAgOwoKCgoKCgoKCiAKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRo
cm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKIApleHRlcm4gaW50IGF0
ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKSA7CgoKIAoKZXh0ZXJuIGludCBv
bl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQg
Kl9fYXJnKQogICAgIHRocm93ICgpIDsKCgogCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3Rh
dHVzKSB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgoKCiAK
ZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpIDsKCiAK
CmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJv
dyAoKSA7CgoKIAogCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIHRocm93ICgp
IDsKCgoKIAoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0
IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCiAgICAgdGhyb3cgKCkgOwoKIApleHRlcm4g
aW50IHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCkgOwoKCgogCgoKZXh0
ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhyb3cgKCkgOwoKCgoKIAoKCgpleHRlcm4gY2hhciAq
bWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKSA7CgogCgoKCgoKZXh0ZXJuIGludCBt
a3N0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKSA7CgoKCgoKCgoKCgoKCgogCgoKCgpl
eHRlcm4gY2hhciAqbWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCkgOwoKCgogCmV4
dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCkgOwoKCgoK
CgoKCgoKIAoKCgoKCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbmFtZSwKCQkgICAgICAgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAo
KSA7CgoKCiAKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwg
X19jb25zdCB2b2lkICopOwoKCgoKCgogCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2
b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCgkJICAgICAgc2l6ZV90IF9fbm1lbWIs
IHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKIAoKZXh0ZXJuIHZvaWQg
cXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCgkJICAg
X19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKIApleHRlcm4gaW50IGFicyAoaW50IF9feCkgdGhy
b3cgKCkgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMg
KGxvbmcgaW50IF9feCkgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
CgoKIAoKIApleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pCiAgICAg
dGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2
IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpICBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgoKIAoKCiAKCgpleHRlcm4gY2hhciAqZWN2
dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQs
CgkJICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCkgOwoKIAoKCmV4dGVybiBjaGFy
ICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19k
ZWNwdCwKCQkgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKSA7CgogCgoKZXh0ZXJu
IGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0
aHJvdyAoKSA7CgoKCiAKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBp
bnQgX19uZGlnaXQsCgkJICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJp
Y3QgX19zaWduKSB0aHJvdyAoKSA7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192
YWx1ZSwgaW50IF9fbmRpZ2l0LAoJCSAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpf
X3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCkgOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91
YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpIDsKCgogCgpl
eHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jl
c3RyaWN0IF9fZGVjcHQsCgkJICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0
cmljdCBfX2J1ZiwKCQkgICBzaXplX3QgX19sZW4pIHRocm93ICgpIDsKZXh0ZXJuIGludCBmY3Z0
X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0
LAoJCSAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCgkJ
ICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91
YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKCQkgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQs
IGludCAqX19yZXN0cmljdCBfX3NpZ24sCgkJICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNp
emVfdCBfX2xlbikgdGhyb3cgKCkgOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9f
dmFsdWUsIGludCBfX25kaWdpdCwKCQkgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAq
X19yZXN0cmljdCBfX3NpZ24sCgkJICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBf
X2xlbikgdGhyb3cgKCkgOwoKCgoKIAoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25zdCBjaGFyICpf
X3MsIHNpemVfdCBfX24pIHRocm93ICgpIDsKIAoKZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19wd2MsCgkJICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6
ZV90IF9fbikgdGhyb3cgKCkgOwogCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hh
cl90IF9fd2NoYXIpIHRocm93ICgpIDsKCgogCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdjaGFy
X3QgKl9fcmVzdHJpY3QgIF9fcHdjcywKCQkJX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywg
c2l6ZV90IF9fbikgdGhyb3cgKCkgOwogCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9f
cmVzdHJpY3QgX19zLAoJCQlfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpIDsKCgoKIAoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29u
c3QgY2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCkgOwoKCgojIDgxMiAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAzCgoKCgoKCgoKCiAKCgoKCgoKIyA4NDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MwoKCiMgODUzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKIAoKCmV4dGVybiBpbnQgZ2V0
bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCkgOwoKCgoK
Cn0gCgoKIyA1MCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3Iv
bGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMwoKCgoKCgogCgoKCgoKCgogCgogCgoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwoKCgoKCgoKCgogCgoKCgogCgogCgoKIyAxODgg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKIyAyNjkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFj
a3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAK
CiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDUxICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9uZXcuaCIgMSAzCiAKCgoKCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9uZXciIDEg
MwogCiAKCgoKCiNwcmFnbWEgaW50ZXJmYWNlICJuZXciCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQyICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgojIDggIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4z
L2luY2x1ZGUvbmV3IiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1s
aW51eC8yLjk1LjMvaW5jbHVkZS9leGNlcHRpb24iIDEgMwogCiAKCgoKCiNwcmFnbWEgaW50ZXJm
YWNlICJleGNlcHRpb24iCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgpjbGFzcyBl
eGNlcHRpb24gewpwdWJsaWM6CiAgZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmV4Y2VwdGlv
biAoKSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3Q7Cn07CgpjbGFzcyBi
YWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBiYWRfZXhjZXB0aW9u
ICgpIHsgfQogIHZpcnR1YWwgfmJhZF9leGNlcHRpb24gKCkgeyB9Cn07Cgp0eXBlZGVmIHZvaWQg
KCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7CnR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxl
cikgKCk7Cgp0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlICh0ZXJtaW5hdGVfaGFuZGxl
cik7CnZvaWQgdGVybWluYXRlICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKdW5l
eHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkICh1bmV4cGVjdGVkX2hhbmRsZXIpOwp2b2lk
IHVuZXhwZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwpib29sIHVuY2F1
Z2h0X2V4Y2VwdGlvbiAoKTsKCn0gIAoKfSAgCgoKIyA5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
c2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL25ldyIgMiAzCgoKZXh0ZXJuICJDKysiIHsK
Cm5hbWVzcGFjZSBzdGQgewoKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uIHsK
ICBwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygpIHsg
cmV0dXJuICJiYWRfYWxsb2MiOyB9CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7fTsKICBleHRl
cm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIp
KCk7CiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyIChuZXdfaGFuZGxlcik7Cgp9ICAKCiAK
dm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQg
Km9wZXJhdG9yIG5ld1tdIChzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3Bl
cmF0b3IgZGVsZXRlICh2b2lkICopIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10gKHZv
aWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3QsIGNvbnN0IHN0ZDo6bm90
aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10gKHNpemVfdCwgY29uc3Qgc3Rk
Ojpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqLCBjb25z
dCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQg
KiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKIAppbmxpbmUgdm9pZCAqb3BlcmF0
b3IgbmV3KHNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KaW5s
aW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyBy
ZXR1cm4gcGxhY2U7IH0KfSAgCgoKIyA2ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJl
LWxpbnV4LzIuOTUuMy9pbmNsdWRlL25ldy5oIiAyIDMKCgp1c2luZyBzdGQ6Om5ld19oYW5kbGVy
Owp1c2luZyBzdGQ6OnNldF9uZXdfaGFuZGxlcjsKCgojIDUyICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9h
bGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51
eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pb3N0cmVhbS5oIiAxIDMKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKIyAxICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0cmVhbWJ1Zi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEg
aW50ZXJmYWNlCgoKICAgCgoKCmV4dGVybiAiQyIgewojIDEgIi91c3IvaW5jbHVkZS9saWJpby5o
IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgog
CgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1
ZGUvc3RkYXJnLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCnR5cGVkZWYgdm9pZCAqX19nbnVjX3Zh
X2xpc3Q7CgoKCiAKCiMgMTIyICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4
LzIuOTUuMy9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyMDkgIi91
c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkYXJn
LmgiIDMKCgoKCiMgNTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKCgoKCgoKCiMgNzAgIi91
c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiMgMTAxICIvdXNyL2lu
Y2x1ZGUvbGliaW8uaCIgMwoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCBfSU9fanVtcF90OyAgc3RydWN0IF9JT19GSUxFOwoK
IAoKCgoKCgoKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCiAKCnN0cnVjdCBfSU9fbWFya2Vy
IHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsK
ICAgCgogICAKICBpbnQgX3BvczsKIyAxOTAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgp9OwoK
IAplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFy
dGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9OwoKIyAyNTcgIi91
c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwkJ
IAoKCiAgIAogICAKICBjaGFyKiBfSU9fcmVhZF9wdHI7CSAKICBjaGFyKiBfSU9fcmVhZF9lbmQ7
CSAKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CSAKICBj
aGFyKiBfSU9fd3JpdGVfcHRyOwkgCiAgY2hhciogX0lPX3dyaXRlX2VuZDsJIAogIGNoYXIqIF9J
T19idWZfYmFzZTsJIAogIGNoYXIqIF9JT19idWZfZW5kOwkgCiAgIAogIGNoYXIgKl9JT19zYXZl
X2Jhc2U7ICAKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7ICAgCiAgY2hhciAqX0lPX3NhdmVfZW5k
OyAgCgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpf
Y2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90ICAgX29sZF9v
ZmZzZXQ7ICAKCgogICAKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hh
ciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCiAgIAoKICBfSU9fbG9ja190
ICpfbG9jazsKCgoKCgoKCgogIF9fb2ZmNjRfdCAgIF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3Bh
ZDE7CiAgdm9pZCAqX19wYWQyOwoKICBpbnQgX21vZGU7CiAgIAogIGNoYXIgX3VudXNlZDJbMTUg
KiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3RydWN0IF9J
T19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87
CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBzdHJ1
Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CgoKCgoKCgoKCgoKIAoKIAoKdHlwZWRl
ZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNp
emVfdCBfX25ieXRlcyk7CgogCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAo
dm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCgkJCQkgc2l6ZV90IF9fbik7Cgog
CgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90
ICAgKl9fcG9zLCBpbnQgX193KTsKCiAKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAq
X19jb29raWUpOwoKCiMgMzg3ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoKCgoKZXh0ZXJuICJD
IiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwpleHRl
cm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpIDsKZXh0ZXJuIGludCBfX292ZXJm
bG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpIDsKZXh0ZXJuIHdpbnRfdCAgIF9fd3VuZGVy
ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwpleHRlcm4gd2ludF90ICAgX193dWZsb3cgKF9J
T19GSUxFICopIHRocm93ICgpIDsKZXh0ZXJuIHdpbnRfdCAgIF9fd292ZXJmbG93IChfSU9fRklM
RSAqLCB3aW50X3QgICkgdGhyb3cgKCkgOwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4g
aW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9JT19w
dXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9JT19m
ZW9mIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CgogCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUg
KF9JT19GSUxFICopIHRocm93ICgpIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9f
RklMRSAqKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUg
KikgdGhyb3cgKCkgOwoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lP
X0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKCQkJX19nbnVjX3Zh
X2xpc3QgLCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpIDsKZXh0ZXJuIGludCBfSU9fdmZwcmlu
dGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LAoJCQkgX19n
bnVjX3ZhX2xpc3QgKSB0aHJvdyAoKSA7CmV4dGVybiBfX3NzaXplX3QgICBfSU9fcGFkbiAoX0lP
X0ZJTEUgKiwgaW50LCBfX3NzaXplX3QgICkgdGhyb3cgKCkgOwpleHRlcm4gc2l6ZV90ICAgX0lP
X3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCAgKSB0aHJvdyAoKSA7CgpleHRlcm4g
X19vZmY2NF90ICAgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCAgLCBpbnQsIGlu
dCkgdGhyb3cgKCkgOwpleHRlcm4gX19vZmY2NF90ICAgX0lPX3NlZWtwb3MgKF9JT19GSUxFICos
IF9fb2ZmNjRfdCAgLCBpbnQpIHRocm93ICgpIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1
cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKSA7CgojIDUwNyAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMKCgoKfQoKCgojIDM2ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4
LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAyIDMKCn0KIAoK
IyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRl
L3N0ZGFyZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKdm9pZCB2YV9lbmQgKF9fZ251Y192YV9saXN0KTsJCSAKCgogCgoKCiAKCgoKCgoKCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKCgoKIyAxNzUgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDMK
CgogCgoKCgogCgogCgogCgp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiMgNDAgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGlu
dXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDIgMwoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgIApjbGFz
cyBvc3RyZWFtOyBjbGFzcyBzdHJlYW1idWY7CgogCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCAgIHN0
cmVhbW9mZjsKdHlwZWRlZiBfX29mZjY0X3QgICBzdHJlYW1wb3M7CgoKCgp0eXBlZGVmIF9fc3Np
emVfdCAgIHN0cmVhbXNpemU7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19mbXRmbGFnczsKdHlw
ZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsKCnN0cnVjdCBfaW9zX2ZpZWxkcwp7ICAKICAg
IHN0cmVhbWJ1ZiAqX3N0cmJ1ZjsKICAgIG9zdHJlYW0qIF90aWU7CiAgICBpbnQgX3dpZHRoOwog
ICAgX19mbXRmbGFncyBfZmxhZ3M7CiAgICB3Y2hhcl90ICAgX2ZpbGw7CiAgICBfX2lvc3RhdGUg
X3N0YXRlOwogICAgX19pb3N0YXRlIF9leGNlcHRpb25zOwogICAgaW50IF9wcmVjaXNpb247Cgog
ICAgdm9pZCAqX2FycmF5czsgIAp9OwoKCgoKCgoKCgoKCgoKCgojIDEyNCAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9zdHJlYW1idWYuaCIgMwoKCmNsYXNzIGlvcyA6IHB1YmxpYyBfaW9zX2ZpZWxkcyB7CiAgaW9z
JiBvcGVyYXRvcj0oaW9zJik7ICAgCiAgaW9zIChjb25zdCBpb3MmKTsgIAogIHB1YmxpYzoKICAg
IHR5cGVkZWYgX19mbXRmbGFncyBmbXRmbGFnczsKICAgIHR5cGVkZWYgaW50IGlvc3RhdGU7CiAg
ICB0eXBlZGVmIGludCBvcGVubW9kZTsKICAgIHR5cGVkZWYgX19zc2l6ZV90ICAgc3RyZWFtc2l6
ZTsKICAgIGVudW0gaW9fc3RhdGUgewoJZ29vZGJpdCA9IDAgLAoJZW9mYml0ID0gMSAsCglmYWls
Yml0ID0gMiAsCgliYWRiaXQgPSA0ICB9OwogICAgZW51bSBvcGVuX21vZGUgewoJaW4gPSAxICwK
CW91dCA9IDIgLAoJYXRlID0gNCAsCglhcHAgPSA4ICwKCXRydW5jID0gMTYgLAoJbm9jcmVhdGUg
PSAzMiAsCglub3JlcGxhY2UgPSA2NCAsCgliaW4gPSAxMjggLCAgCgliaW5hcnkgPSAxMjggIH07
CiAgICBlbnVtIHNlZWtfZGlyIHsgYmVnLCBjdXIsIGVuZH07CiAgICB0eXBlZGVmIGVudW0gc2Vl
a19kaXIgc2Vla2RpcjsKICAgICAKICAgIGVudW0geyBza2lwd3M9IDAxICwKCSAgIGxlZnQ9IDAy
ICwgcmlnaHQ9IDA0ICwgaW50ZXJuYWw9IDAxMCAsCgkgICBkZWM9IDAyMCAsIG9jdD0gMDQwICwg
aGV4PSAwMTAwICwKCSAgIHNob3diYXNlPSAwMjAwICwgc2hvd3BvaW50PSAwNDAwICwKCSAgIHVw
cGVyY2FzZT0gMDEwMDAgLCBzaG93cG9zPSAwMjAwMCAsCgkgICBzY2llbnRpZmljPSAwNDAwMCAs
IGZpeGVkPSAwMTAwMDAgLAoJICAgdW5pdGJ1Zj0gMDIwMDAwICwgc3RkaW89IDA0MDAwMCAKCgoK
CSAgIH07CiAgICBlbnVtIHsgIAoJYmFzZWZpZWxkPWRlYytvY3QraGV4LAoJZmxvYXRmaWVsZCA9
IHNjaWVudGlmaWMrZml4ZWQsCglhZGp1c3RmaWVsZCA9IGxlZnQrcmlnaHQraW50ZXJuYWwKICAg
IH07CgojIDE3NyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCiAgICBvc3RyZWFtKiB0
aWUoKSBjb25zdCB7IHJldHVybiBfdGllOyB9CiAgICBvc3RyZWFtKiB0aWUob3N0cmVhbSogdmFs
KSB7IG9zdHJlYW0qIHNhdmU9X3RpZTsgX3RpZT12YWw7IHJldHVybiBzYXZlOyB9CgogICAgIAog
ICAgd2NoYXJfdCAgIGZpbGwoKSBjb25zdCB7IHJldHVybiBfZmlsbDsgfQogICAgd2NoYXJfdCAg
IGZpbGwod2NoYXJfdCAgIG5ld2YpCgl7d2NoYXJfdCAgIG9sZGYgPSBfZmlsbDsgX2ZpbGwgPSBu
ZXdmOyByZXR1cm4gb2xkZjt9CiAgICBmbXRmbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9m
bGFnczsgfQogICAgZm10ZmxhZ3MgZmxhZ3MoZm10ZmxhZ3MgbmV3X3ZhbCkgewoJZm10ZmxhZ3Mg
b2xkX3ZhbCA9IF9mbGFnczsgX2ZsYWdzID0gbmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAg
IGludCBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJl
Y2lzaW9uKGludCBuZXdwKSB7Cgl1bnNpZ25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lvbjsgX3By
ZWNpc2lvbiA9ICh1bnNpZ25lZCBzaG9ydCluZXdwOwoJcmV0dXJuIG9sZHA7IH0KICAgIGZtdGZs
YWdzIHNldGYoZm10ZmxhZ3MgdmFsKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2Zs
YWdzIHw9IHZhbDsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3Mg
dmFsLCBmbXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdz
ID0gKF9mbGFncyAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsgcmV0dXJuIG9sZGJpdHM7IH0KICAg
IGZtdGZsYWdzIHVuc2V0ZihmbXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2Zs
YWdzOwoJX2ZsYWdzICY9IH5tYXNrOyByZXR1cm4gb2xkYml0czsgfQogICAgaW50IHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gX3dpZHRoOyB9CiAgICBpbnQgd2lkdGgoaW50IHZhbCkgeyBpbnQgc2F2
ZSA9IF93aWR0aDsgX3dpZHRoID0gdmFsOyByZXR1cm4gc2F2ZTsgfQoKCgoKICAgIHZvaWQgX3Ro
cm93X2ZhaWx1cmUoKSBjb25zdCB7IH0KCiAgICB2b2lkIGNsZWFyKGlvc3RhdGUgc3RhdGUgPSAw
KSB7Cglfc3RhdGUgPSBfc3RyYnVmID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CglpZiAoX3N0YXRl
ICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlvc3RhdGUg
ZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93
X2ZhaWx1cmUoKTsgfQogICAgdm9pZCBzZXRzdGF0ZShpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9
IGZsYWc7ICAKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQog
ICAgaW50IGdvb2QoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgPT0gMDsgfQogICAgaW50IGVvZigp
IGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6ZW9mYml0OyB9CiAgICBpbnQgZmFpbCgpIGNv
bnN0IHsgcmV0dXJuIF9zdGF0ZSAmIChpb3M6OmJhZGJpdHxpb3M6OmZhaWxiaXQpOyB9CiAgICBp
bnQgYmFkKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0KICAgIGlvc3Rh
dGUgcmRzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZTsgfQogICAgb3BlcmF0b3Igdm9pZCoo
KSBjb25zdCB7IHJldHVybiBmYWlsKCkgPyAodm9pZCopMCA6ICh2b2lkKikoLTEpOyB9CiAgICBp
bnQgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpOyB9CiAgICBpb3N0YXRlIGV4Y2Vw
dGlvbnMoKSBjb25zdCB7IHJldHVybiBfZXhjZXB0aW9uczsgfQogICAgdm9pZCBleGNlcHRpb25z
KGlvc3RhdGUgZW5hYmxlKSB7CglfZXhjZXB0aW9ucyA9IGVuYWJsZTsKCWlmIChfc3RhdGUgJiBf
ZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQoKICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBj
b25zdCB7IHJldHVybiBfc3RyYnVmOyB9CiAgICBzdHJlYW1idWYqIHJkYnVmKHN0cmVhbWJ1ZiAq
X3MpIHsKICAgICAgc3RyZWFtYnVmICpfb2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9zOyBjbGVh
ciAoKTsgcmV0dXJuIF9vbGQ7IH0KCiAgICBzdGF0aWMgaW50IHN5bmNfd2l0aF9zdGRpbyhpbnQg
b24pOwogICAgc3RhdGljIHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhfc3RkaW8o
MSk7IH0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOwogICAgc3RhdGljIGludCB4YWxs
b2MoKTsKICAgIHZvaWQqJiBwd29yZChpbnQpOwogICAgdm9pZCogcHdvcmQoaW50KSBjb25zdDsK
ICAgIGxvbmcmIGl3b3JkKGludCk7CiAgICBsb25nIGl3b3JkKGludCkgY29uc3Q7CgoKCgoKCgoK
CiAgICAgCiAgICBjbGFzcyBJbml0IHsKICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7IH0KICAg
IH07CgogIHByb3RlY3RlZDoKICAgIGlubGluZSBpb3Moc3RyZWFtYnVmKiBzYiA9IDAsIG9zdHJl
YW0qIHRpZV90byA9IDApOwogICAgaW5saW5lIHZpcnR1YWwgfmlvcygpOwogICAgaW5saW5lIHZv
aWQgaW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWUgPSAwKTsKfTsKCgoKCnR5cGVkZWYg
aW9zOjpzZWVrX2RpciBfc2Vla19kaXI7CgoKIAogCiAKIAogCgogCiAKY2xhc3Mgc3RyZWFtbWFy
a2VyIDogcHJpdmF0ZSBfSU9fbWFya2VyIHsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7CiAg
ICB2b2lkIHNldF9vZmZzZXQoaW50IG9mZnNldCkgeyBfcG9zID0gb2Zmc2V0OyB9CiAgcHVibGlj
OgogICAgc3RyZWFtbWFya2VyKHN0cmVhbWJ1ZiAqc2IpOwogICAgfnN0cmVhbW1hcmtlcigpOwog
ICAgaW50IHNhdmluZygpIHsgcmV0dXJuICAxOyB9CiAgICBpbnQgZGVsdGEoc3RyZWFtbWFya2Vy
Jik7CiAgICBpbnQgZGVsdGEoKTsKfTsKCnN0cnVjdCBzdHJlYW1idWYgOiBwdWJsaWMgX0lPX0ZJ
TEUgeyAgCiAgICBmcmllbmQgY2xhc3MgaW9zOwogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07CiAg
ICBmcmllbmQgY2xhc3Mgb3N0cmVhbTsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1tYXJrZXI7CiAg
ICBjb25zdCB2b2lkIComX3Z0YWJsZSgpIHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgoX0lPX0ZJ
TEUqKXRoaXMgKyAxKTsgfQogIHByb3RlY3RlZDoKICAgIHN0YXRpYyBzdHJlYW1idWYqIF9saXN0
X2FsbDsgIAogICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAgIHZv
aWQgX3VuX2xpbmsoKTsKICAgIHZvaWQgX2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBjb25z
dAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19y
ZWFkX3B0cjsgfQogICAgY2hhciogcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9wdHI7
IH0KICAgIGNoYXIqIGVncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAw
ICA/IF9JT19zYXZlX2VuZCA6IF9JT19yZWFkX2VuZDsgfQogICAgY2hhciogZXBwdHIoKSBjb25z
dCB7IHJldHVybiBfSU9fd3JpdGVfZW5kOyB9CiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0
dXJuIF9JT193cml0ZV9iYXNlOyB9CiAgICBjaGFyKiBlYmFjaygpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9CiAg
ICBjaGFyKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFyKiBl
YnVmKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29uc3Qg
eyByZXR1cm4gX0lPX2J1Zl9lbmQgLSBfSU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9jaGFy
KGNoYXIgYykgeyAqX0lPX3dyaXRlX3B0cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsgcmV0
dXJuIF9mbGFncyA7IH0KICAgIGludCB4ZmxhZ3MoaW50IGYpIHtpbnQgZmwgPSBfZmxhZ3MgOyBf
ZmxhZ3MgID0gZjsgcmV0dXJuIGZsO30KICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFn
cyAgfD0gZjsgfQogICAgdm9pZCB4c2V0ZmxhZ3MoaW50IGYsIGludCBtYXNrKQogICAgICB7IF9m
bGFncyAgPSAoX2ZsYWdzICAmIH5tYXNrKSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1bXAo
aW50IG4pCiAgICAgIHsgX2ZsYWdzICAmIDB4MTAwICA/IChfSU9fc2F2ZV9iYXNlKz1uKTooX0lP
X3JlYWRfcHRyKz1uKTt9CiAgICB2b2lkIHBidW1wKGludCBuKSB7IF9JT193cml0ZV9wdHIgKz0g
bjsgfQogICAgdm9pZCBzZXRiKGNoYXIqIGIsIGNoYXIqIGViLCBpbnQgYT0wKTsKICAgIHZvaWQg
c2V0cChjaGFyKiBwLCBjaGFyKiBlcCkKICAgICAgeyBfSU9fd3JpdGVfYmFzZT1fSU9fd3JpdGVf
cHRyPXA7IF9JT193cml0ZV9lbmQ9ZXA7IH0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hhciog
ZywgY2hhciAqZWcpIHsKICAgICAgaWYgKF9mbGFncyAgJiAweDEwMCApIF9JT19mcmVlX2JhY2t1
cF9hcmVhKHRoaXMpOyAKICAgICAgX0lPX3JlYWRfYmFzZSA9IGViOyBfSU9fcmVhZF9wdHIgPSBn
OyBfSU9fcmVhZF9lbmQgPSBlZzsgfQogICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBfc2hv
cnRidWY7IH0KCiAgICBpbnQgaW5fYmFja3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9
CiAgICAgCiAgICBjaGFyICpHYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVf
YmFzZSA6IF9JT19yZWFkX2Jhc2U7IH0KICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4g
aW5fYmFja3VwKCkgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNo
YXIgKkJiYXNlKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3Nh
dmVfYmFzZTsgfQogICAgY2hhciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQog
ICAgIAogICAgY2hhciAqZUJwdHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2Vu
ZCA6IF9JT19zYXZlX2VuZDsgfQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9i
YXNlOyB9CiAgICBjaGFyICplTnB0cigpIHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50
IGhhdmVfYmFja3VwKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBp
bnQgaGF2ZV9tYXJrZXJzKCkgeyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9p
ZCBmcmVlX2JhY2t1cF9hcmVhKCk7CiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGlu
dCBwdXRfbW9kZSgpIHsgcmV0dXJuIF9mbGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90
b19nZXRfbW9kZSgpOwogICAgCiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoK
ICAgIHN0YXRpYyBpbnQgZmx1c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGlu
ZWJ1ZmZlcmVkKCk7ICAKICAgIHZpcnR1YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQg
b3ZlcmZsb3coaW50IGMgPSAoLTEpICk7ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAg
CiAgICB2aXJ0dWFsIGludCB1ZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50
IGMpOwogCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVh
bXNpemUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNp
emUgbik7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGly
LCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtw
b3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKCiAgICBzdHJl
YW1wb3MgcHVic2Vla29mZihzdHJlYW1vZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6
aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2Rl
KTsgfQogICAgc3RyZWFtcG9zIHB1YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBp
b3M6OmlufGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBt
b2RlKTsgfQogICAgc3RyZWFtcG9zIHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQg
bW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3Mg
cG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYq
IHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZp
cnR1YWwgaW50IGRvYWxsb2NhdGUoKTsKCiAgICBpbnQgc2Vla21hcmsoc3RyZWFtbWFya2VyJiBt
YXJrLCBpbnQgZGVsdGEgPSAwKTsKICAgIGludCBzcHV0YmFja2MoY2hhciBjKTsKICAgIGludCBz
dW5nZXRjKCk7CiAgICBpbnQgdW5idWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDIgID8gMSA6
IDA7IH0KICAgIGludCBsaW5lYnVmZmVyZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIwMCAgPyAx
IDogMDsgfQogICAgdm9pZCB1bmJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDIg
OyBlbHNlIF9mbGFncyAmPSB+MiA7IH0KICAgIHZvaWQgbGluZWJ1ZmZlcmVkKGludCBpKQoJeyBp
ZiAoaSkgX2ZsYWdzIHw9IDB4MjAwIDsgZWxzZSBfZmxhZ3MgJj0gfjB4MjAwIDsgfQogICAgaW50
IGFsbG9jYXRlKCkgeyAgCglpZiAoYmFzZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7Cgll
bHNlIHJldHVybiBkb2FsbG9jYXRlKCk7IH0KICAgICAKICAgIHZvaWQgYWxsb2NidWYoKSB7IGlm
IChiYXNlKCkgPT0gX19udWxsICkgZG9hbGxvY2J1ZigpOyB9CiAgICB2b2lkIGRvYWxsb2NidWYo
KTsKICAgIGludCBpbl9hdmFpbCgpIHsgcmV0dXJuIF9JT19yZWFkX2VuZCAtIF9JT19yZWFkX3B0
cjsgfQogICAgaW50IG91dF93YWl0aW5nKCkgeyByZXR1cm4gX0lPX3dyaXRlX3B0ciAtIF9JT193
cml0ZV9iYXNlOyB9CiAgICBzdHJlYW1zaXplIHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNp
emUgbikgeyByZXR1cm4geHNwdXRuKHMsIG4pOyB9CiAgICBzdHJlYW1zaXplIHBhZG4oY2hhciBw
YWQsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3BhZG4odGhpcywgcGFkLCBuKTsgfQogICAg
c3RyZWFtc2l6ZSBzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19zZ2V0
bih0aGlzLCBzLCBuKTsgfQogICAgaW50IGlnbm9yZShpbnQpOwogICAgaW50IGdldF9jb2x1bW4o
KTsKICAgIGludCBzZXRfY29sdW1uKGludCk7CiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1Ziwg
c2l6ZV90ICAgbiwgY2hhciBkZWxpbSwgaW50IHB1dGJhY2tfZGVsaW0pOwogICAgaW50IHNwdXRj
KGludCBjKSB7IHJldHVybiBfSU9fcHV0YyhjLCB0aGlzKTsgfQogICAgaW50IHNidW1wYygpIHsg
cmV0dXJuIF9JT19nZXRjKHRoaXMpOyB9CiAgICBpbnQgc2dldGMoKSB7IHJldHVybiAoKCAgdGhp
cyAgKS0+X0lPX3JlYWRfcHRyID49ICggIHRoaXMgICktPl9JT19yZWFkX2VuZCAmJiBfX3VuZGVy
ZmxvdyAoICB0aGlzICApID09ICgtMSkgID8gKC0xKSAgOiAqKHVuc2lnbmVkIGNoYXIgKikgKCAg
dGhpcyAgKS0+X0lPX3JlYWRfcHRyKSAgOyB9CiAgICBpbnQgc25leHRjKCkgewoJaWYgKF9JT19y
ZWFkX3B0ciA+PSBfSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3codGhpcykgPT0gKC0xKSApCgkg
IHJldHVybiAoLTEpIDsKCWVsc2UgcmV0dXJuIF9JT19yZWFkX3B0cisrLCBzZ2V0YygpOyB9CiAg
ICB2b2lkIHN0b3NzYygpIHsgaWYgKF9JT19yZWFkX3B0ciA8IF9JT19yZWFkX2VuZCkgX0lPX3Jl
YWRfcHRyKys7IH0KICAgIGludCB2c2NhbihjaGFyIGNvbnN0ICpmbXQwLCBfX2dudWNfdmFfbGlz
dCAgYXAsIGlvcyogc3RyZWFtID0gX19udWxsICk7CiAgICBpbnQgc2NhbihjaGFyIGNvbnN0ICpm
bXQwIC4uLik7CiAgICBpbnQgdmZvcm0oY2hhciBjb25zdCAqZm10MCwgX19nbnVjX3ZhX2xpc3Qg
IGFwKTsKICAgIGludCBmb3JtKGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFs
IHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmly
dHVhbCBzdHJlYW1zaXplIHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2
aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0
dWFsIGludCBzeXNfY2xvc2UoKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAoK
ICAgIHZpcnR1YWwgaW50IHNob3dtYW55YygpOwogICAgdmlydHVhbCB2b2lkIGltYnVlKHZvaWQg
Kik7Cgp9OwoKIAogCgpjbGFzcyBmaWxlYnVmIDogcHVibGljIHN0cmVhbWJ1ZiB7CiAgcHJvdGVj
dGVkOgogICAgdm9pZCBpbml0KCk7CiAgcHVibGljOgogICAgc3RhdGljIGNvbnN0IGludCBvcGVu
cHJvdDsgIAogICAgZmlsZWJ1ZigpOwogICAgZmlsZWJ1ZihpbnQgZmQpOwogICAgZmlsZWJ1Zihp
bnQgZmQsIGNoYXIqIHAsIGludCBsZW4pOwoKCgogICAgfmZpbGVidWYoKTsKICAgIGZpbGVidWYq
IGF0dGFjaChpbnQgZmQpOwogICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwg
Y29uc3QgY2hhciAqbW9kZSk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1l
LCBpb3M6Om9wZW5tb2RlIG1vZGUsIGludCBwcm90ID0gMDY2NCk7CiAgICB2aXJ0dWFsIGludCB1
bmRlcmZsb3coKTsKICAgIHZpcnR1YWwgaW50IG92ZXJmbG93KGludCBjID0gKC0xKSApOwogICAg
aW50IGlzX29wZW4oKSBjb25zdCB7IHJldHVybiBfZmlsZW5vID49IDA7IH0KICAgIGludCBmZCgp
IGNvbnN0IHsgcmV0dXJuIGlzX29wZW4oKSA/IF9maWxlbm8gOiAoLTEpIDsgfQogICAgZmlsZWJ1
ZiogY2xvc2UoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUoKTsKICAgIHZpcnR1YWwgc3Ry
ZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58aW9z
OjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQgbGVuKTsK
ICAgIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICBz
dHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBpbnQg
c3luYygpOwogIHByb3RlY3RlZDogIAogCiAgICBpbnQgaXNfcmVhZGluZygpIHsgcmV0dXJuIGVi
YWNrKCkgIT0gZWdwdHIoKTsgfQogICAgY2hhciogY3VyX3B0cigpIHsgcmV0dXJuIGlzX3JlYWRp
bmcoKSA/ICBncHRyKCkgOiBwcHRyKCk7IH0KICAgICAKICAgIGNoYXIqIGZpbGVfcHRyKCkgeyBy
ZXR1cm4gZUdwdHIoKTsgfQogICAgIAogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNo
YXIqIGJ1Ziwgc3RyZWFtc2l6ZSBzaXplKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHN5c19zZWVr
KHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfd3JpdGUo
Y29uc3QgY2hhciosIHN0cmVhbXNpemUpOwogICAgdmlydHVhbCBpbnQgc3lzX3N0YXQodm9pZCop
OyAgCiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2UoKTsKCgoKCn07CgppbmxpbmUgdm9pZCBpb3M6
OmluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7CgkJX3N0YXRlID0gc2IgPyBp
b3M6Omdvb2RiaXQgOiBpb3M6OmJhZGJpdDsgX2V4Y2VwdGlvbnM9MDsKCQlfc3RyYnVmPXNiOyBf
dGllID0gdGllX3RvOyBfd2lkdGg9MDsgX2ZpbGw9JyAnOwoKCQlfZmxhZ3M9aW9zOjpza2lwd3N8
aW9zOjpkZWM7CgoKCgkJX3ByZWNpc2lvbj02OyBfYXJyYXlzID0gMDsgfQoKaW5saW5lIGlvczo6
aW9zKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZV90bykgeyBpbml0KHNiLCB0aWVfdG8pOyB9
CgppbmxpbmUgaW9zOjp+aW9zKCkgewoKCgogICAgIAogICAgIAogICAgb3BlcmF0b3IgZGVsZXRl
W10gKF9hcnJheXMpOwp9Cn0gIAoKIyAzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2Fy
ZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pb3N0cmVhbS5oIiAyIDMK
CgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFtOwp0eXBlZGVmIGlv
cyYgKCpfX21hbmlwKShpb3MmKTsKdHlwZWRlZiBpc3RyZWFtJiAoKl9faW1hbmlwKShpc3RyZWFt
Jik7CnR5cGVkZWYgb3N0cmVhbSYgKCpfX29tYW5pcCkob3N0cmVhbSYpOwoKZXh0ZXJuIGlzdHJl
YW0mIHdzKGlzdHJlYW0mIGlucyk7CmV4dGVybiBvc3RyZWFtJiBmbHVzaChvc3RyZWFtJiBvdXRz
KTsKZXh0ZXJuIG9zdHJlYW0mIGVuZGwob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiBl
bmRzKG9zdHJlYW0mIG91dHMpOwoKY2xhc3Mgb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGlvcwp7
CiAgICAgCiAgICB2b2lkIGRvX29zZngoKTsKICBwdWJsaWM6CiAgICBvc3RyZWFtKCkgeyB9CiAg
ICBvc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZWQ9IF9fbnVsbCApOwogICAgaW50
IG9wZngoKSB7CglpZiAoIWdvb2QoKSkgcmV0dXJuIDA7CgllbHNlIHsgaWYgKF90aWUpIF90aWUt
PmZsdXNoKCk7ICA7IHJldHVybiAxO30gfQogICAgdm9pZCBvc2Z4KCkgeyAgOwoJCSAgaWYgKGZs
YWdzKCkgJiAoaW9zOjp1bml0YnVmfGlvczo6c3RkaW8pKQoJCSAgICAgIGRvX29zZngoKTsgfQog
ICAgb3N0cmVhbSYgZmx1c2goKTsKICAgIG9zdHJlYW0mIHB1dChjaGFyIGMpIHsgX3N0cmJ1Zi0+
c3B1dGMoYyk7IHJldHVybiAqdGhpczsgfQoKCgoKCiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBj
aGFyICpzLCBzdHJlYW1zaXplIG4pOwogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgdW5zaWduZWQg
Y2hhciAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciop
cywgbik7fQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3Qgc2lnbmVkIGNoYXIgKnMsIHN0cmVhbXNp
emUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30KICAgIG9zdHJl
YW0mIHdyaXRlKGNvbnN0IHZvaWQgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3Jp
dGUoKGNvbnN0IGNoYXIqKXMsIG4pO30KICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbXBvcyk7CiAg
ICBvc3RyZWFtJiBzZWVrcChzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICBzdHJlYW1wb3MgdGVs
bHAoKTsKICAgIG9zdHJlYW0mIGZvcm0oY29uc3QgY2hhciAqZm9ybWF0IC4uLik7CiAgICBvc3Ry
ZWFtJiB2Zm9ybShjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0ICBhcmdzKTsKCiAg
ICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVu
c2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFt
JiBvcGVyYXRvcjw8KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsg
fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJlYW0mIG9w
ZXJhdG9yPDwoY29uc3QgdW5zaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNv
bnN0IGNoYXIqKXM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIg
KnMpCgl7IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KGNvbnN0IHZvaWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7
CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9w
ZXJhdG9yPDwobG9uZyBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBu
KTsKCiAgICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBsb25nIG4pOwog
ICAgX19leHRlbnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBu
KTsKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgo
aW50KW4pO30KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgbikge3JldHVy
biBvcGVyYXRvcjw8KCh1bnNpZ25lZCBpbnQpbik7fQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwo
Ym9vbCBiKSB7IHJldHVybiBvcGVyYXRvcjw8KChpbnQpYik7IH0KCiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KGRvdWJsZSBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZmxvYXQgbikgeyByZXR1
cm4gb3BlcmF0b3I8PCgoZG91YmxlKW4pOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25n
IGRvdWJsZSBuKTsKCgoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoX19vbWFuaXAgZnVuYykgeyBy
ZXR1cm4gKCpmdW5jKSgqdGhpcyk7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoX19tYW5pcCBm
dW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9CiAgICBvc3RyZWFtJiBvcGVyYXRv
cjw8KHN0cmVhbWJ1ZiopOwoKCgp9OwoKY2xhc3MgaXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGlv
cwp7CiAgICAgCnByb3RlY3RlZDoKICAgIHNpemVfdCAgIF9nY291bnQ7CgogICAgaW50IF9za2lw
X3dzKCk7CiAgcHVibGljOgogICAgaXN0cmVhbSgpOiBfZ2NvdW50ICgwKSB7IH0KICAgIGlzdHJl
YW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0aWVkPSBfX251bGwgKTsKICAgIGlzdHJlYW0mIGdl
dChjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdl
dCh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1
cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoY2hhciYg
Yyk7CiAgICBpc3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciYgYykgeyByZXR1cm4gZ2V0KChjaGFy
JiljKTsgfQogICAgaXN0cmVhbSYgZ2V0bGluZShjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVs
aW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldGxpbmUodW5zaWduZWQgY2hhciogcHRyLCBpbnQg
bGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVu
LCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldChzaWduZWQgY2hhciYgYykgIHsgcmV0dXJuIGdl
dCgoY2hhciYpYyk7IH0KICAgIGlzdHJlYW0mIGdldChzaWduZWQgY2hhciogcHRyLCBpbnQgbGVu
LCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBsZW4sIGRlbGlt
KTsgfQogICAgaXN0cmVhbSYgZ2V0bGluZShzaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFy
IGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7
IH0KICAgIGlzdHJlYW0mIHJlYWQoY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pOwogICAgaXN0cmVh
bSYgcmVhZCh1bnNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4g
cmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZChzaWduZWQgY2hhciAqcHRy
LCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAg
IGlzdHJlYW0mIHJlYWQodm9pZCAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJl
YWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIGdldChzdHJlYW1idWYmIHNiLCBjaGFy
IGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXRzKGNoYXIgKipzLCBjaGFyIGRlbGltID0g
J1xuJyk7CiAgICBpbnQgaXBmeChpbnQgbmVlZCA9IDApIHsKCWlmICghZ29vZCgpKSB7IHNldChp
b3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllICYmIChu
ZWVkID09IDAgfHwgcmRidWYoKS0+aW5fYXZhaWwoKSA8IG5lZWQpKSBfdGllLT5mbHVzaCgpOwoJ
ICBpZiAoIW5lZWQgJiYgKGZsYWdzKCkgJiBpb3M6OnNraXB3cykpIHJldHVybiBfc2tpcF93cygp
OwoJICBlbHNlIHJldHVybiAxOwoJfQogICAgfQogICAgaW50IGlwZngwKCkgeyAgCglpZiAoIWdv
b2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBp
ZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsKCSAgaWYgKGZsYWdzKCkgJiBpb3M6OnNraXB3cykgcmV0
dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICBpbnQgaXBmeDEo
KSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxz
ZSB7CgkgICA7CgkgIGlmIChfdGllICYmIHJkYnVmKCktPmluX2F2YWlsKCkgPT0gMCkgX3RpZS0+
Zmx1c2goKTsKCSAgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICB2b2lkIGlzZngoKSB7ICA7IH0KICAg
IGludCBnZXQoKSB7IGlmICghaXBmeDEoKSkgcmV0dXJuICgtMSkgOwoJCWVsc2UgeyBpbnQgY2gg
PSBfc3RyYnVmLT5zYnVtcGMoKTsKCQkgICAgICAgaWYgKGNoID09ICgtMSkgKSBzZXQoaW9zOjpl
b2ZiaXQpOwoJCSAgICAgICBpc2Z4KCk7CgkJICAgICAgIHJldHVybiBjaDsKCQkgICAgIH0gfQog
ICAgaW50IHBlZWsoKTsKICAgIHNpemVfdCAgIGdjb3VudCgpIHsgcmV0dXJuIF9nY291bnQ7IH0K
ICAgIGlzdHJlYW0mIGlnbm9yZShpbnQgbj0xLCBpbnQgZGVsaW0gPSAoLTEpICk7CiAgICBpbnQg
c3luYyAoKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbXBvcyk7CiAgICBpc3RyZWFtJiBzZWVr
ZyhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICBzdHJlYW1wb3MgdGVsbGcoKTsKICAgIGlzdHJl
YW0mIHB1dGJhY2soY2hhciBjaCkgewoJaWYgKGdvb2QoKSAmJiBfc3RyYnVmLT5zcHV0YmFja2Mo
Y2gpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7CglyZXR1cm4gKnRoaXM7fQogICAgaXN0
cmVhbSYgdW5nZXQoKSB7CglpZiAoZ29vZCgpICYmIF9zdHJidWYtPnN1bmdldGMoKSA9PSAoLTEp
ICkgY2xlYXIoaW9zOjpiYWRiaXQpOwoJcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHNjYW4o
Y29uc3QgY2hhciAqZm9ybWF0IC4uLik7CiAgICBpc3RyZWFtJiB2c2Nhbihjb25zdCBjaGFyICpm
b3JtYXQsIF9fZ251Y192YV9saXN0ICBhcmdzKTsKCgoKCgoKICAgIGlzdHJlYW0mIG9wZXJhdG9y
Pj4oY2hhciopOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBjaGFyKiBwKSB7IHJl
dHVybiBvcGVyYXRvcj4+KChjaGFyKilwKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaWdu
ZWQgY2hhcipwKSB7IHJldHVybiBvcGVyYXRvcj4+KChjaGFyKilwKTsgfQogICAgaXN0cmVhbSYg
b3BlcmF0b3I+PihjaGFyJiBjKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hh
ciYgYykge3JldHVybiBvcGVyYXRvcj4+KChjaGFyJiljKTt9CiAgICBpc3RyZWFtJiBvcGVyYXRv
cj4+KHNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlz
dHJlYW0mIG9wZXJhdG9yPj4oaW50Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcmKTsK
CiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBsb25nJik7CiAgICBf
X2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyBsb25nJik7Cgog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaG9ydCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1
bnNpZ25lZCBpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYpOwog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYpOwoKICAgIGlzdHJlYW0mIG9w
ZXJhdG9yPj4oYm9vbCYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oZmxvYXQmKTsKICAgIGlz
dHJlYW0mIG9wZXJhdG9yPj4oZG91YmxlJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcg
ZG91YmxlJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KCBfX21hbmlwIGZ1bmMpIHsoKmZ1bmMp
KCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oX19pbWFuaXAg
ZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4o
c3RyZWFtYnVmKik7Cn07CgpjbGFzcyBpb3N0cmVhbSA6IHB1YmxpYyBpc3RyZWFtLCBwdWJsaWMg
b3N0cmVhbQp7CiAgcHVibGljOgogICAgaW9zdHJlYW0oKSB7IH0KICAgIGlvc3RyZWFtKHN0cmVh
bWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxsICk7Cn07CgpjbGFzcyBfSU9faXN0cmVhbV93
aXRoYXNzaWduIDogcHVibGljIGlzdHJlYW0gewpwdWJsaWM6CiAgX0lPX2lzdHJlYW1fd2l0aGFz
c2lnbiYgb3BlcmF0b3I9KGlzdHJlYW0mKTsKICBfSU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVy
YXRvcj0oX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQogICAgeyByZXR1cm4gb3BlcmF0b3I9
IChzdGF0aWNfY2FzdDxpc3RyZWFtJj4gKHJocykpOyB9Cn07CgpjbGFzcyBfSU9fb3N0cmVhbV93
aXRoYXNzaWduIDogcHVibGljIG9zdHJlYW0gewpwdWJsaWM6CiAgX0lPX29zdHJlYW1fd2l0aGFz
c2lnbiYgb3BlcmF0b3I9KG9zdHJlYW0mKTsKICBfSU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVy
YXRvcj0oX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQogICAgeyByZXR1cm4gb3BlcmF0b3I9
IChzdGF0aWNfY2FzdDxvc3RyZWFtJj4gKHJocykpOyB9Cn07CgpleHRlcm4gX0lPX2lzdHJlYW1f
d2l0aGFzc2lnbiBjaW47CiAKZXh0ZXJuIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gY291dCwgY2Vy
cjsKCmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNsb2cKCgoKOwoKZXh0ZXJuIGlzdHJl
YW0mIGxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIGlzdHJlYW0mIHVubG9jayhpc3RyZWFtJiBp
bnMpOwpleHRlcm4gb3N0cmVhbSYgbG9jayhvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0m
IHVubG9jayhvc3RyZWFtJiBvdXRzKTsKCnN0cnVjdCBJb3N0cmVhbV9pbml0IHsgfSA7ICAgCgpp
bmxpbmUgaW9zJiBkZWMoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmRlYywgaW9zOjpkZWN8aW9zOjpo
ZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBoZXgoaW9zJiBpKQp7IGkuc2V0
Zihpb3M6OmhleCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxp
bmUgaW9zJiBvY3QoaW9zJiBpKQp7IGkuc2V0Zihpb3M6Om9jdCwgaW9zOjpkZWN8aW9zOjpoZXh8
aW9zOjpvY3QpOyByZXR1cm4gaTsgfQp9ICAKCgojIDUzICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
c2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdv
YmFzZS5oIiAyIDMKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4
LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgpzdHJ1Y3QgaW5wdXRfaXRlcmF0b3Jf
dGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGZvcndhcmRfaXRl
cmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1
Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcge307CgogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFu
Y2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcg
aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgdmFsdWVfdHlw
ZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl
ZiBfVHAqICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAg
ICByZWZlcmVuY2U7Cn07CgpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yIHsKICB0eXBlZGVmIG91dHB1
dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAg
ICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVm
IHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvciB7CiAgdHlwZWRlZiBmb3J3
YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAg
ICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICBkaWZm
ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5
cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Igewog
IHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
dHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYg
X0Rpc3RhbmNlICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1Rw
KiAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAg
ICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9E
aXN0YW5jZT4gc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3IgewogIHR5cGVkZWYgcmFuZG9t
X2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAg
ICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAg
ICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgICAgICAgIHJl
ZmVyZW5jZTsKfTsKCiMgOTggIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgv
Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgoKCnRl
bXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogIHR5cGVk
ZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29y
eTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSAgICAgICAgdmFsdWVf
dHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlICAgZGlm
ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyICAgICAg
ICAgICBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgICAg
ICAgICByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3Jf
dHJhaXRzPF9UcCo+IHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJh
dG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90
eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlw
ZWRlZiBfVHAmICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgdHlwZWRl
ZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVm
IF9UcCAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlm
Zl90ICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9U
cCogICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiAgICAgICAg
ICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCiAKIAogCiAKCiAKCnRlbXBsYXRlIDxjbGFzcyBfSXRl
cj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVn
b3J5Cl9faXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImKQp7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAg
cmV0dXJuIF9DYXRlZ29yeSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCl9fZGlzdGFuY2Vf
dHlwZShjb25zdCBfSXRlciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5
cGUqCl9fdmFsdWVfdHlwZShjb25zdCBfSXRlciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojpp
dGVyYXRvcl9jYXRlZ29yeQppdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYgX19pKSB7IHJl
dHVybiBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9faSk7IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+
CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUq
CmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19kaXN0YW5jZV90eXBl
KF9faSk7IH0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqCnZhbHVlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkg
eyByZXR1cm4gX192YWx1ZV90eXBlKF9faSk7IH0KCgoKCgojIDI1OSAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z
dGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3Mg
X0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Um
IF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7
ICsrX19maXJzdDsgKytfX247IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwg
cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGlu
ZSB2b2lkIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9EaXN0YW5jZSYgX19uKQp7CiAgX19kaXN0YW5j
ZShfX2ZpcnN0LCBfX2xhc3QsIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoK
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3Jf
dGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlIF9fbiA9IDA7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19f
Zmlyc3Q7ICsrX19uOwogIH0KICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg
IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpkaXN0YW5jZShfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5
IAogICAgX0NhdGVnb3J5OwogIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX0Nh
dGVnb3J5KCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRGlzdGFu
Y2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5jZSBfX24s
IGlucHV0X2l0ZXJhdG9yX3RhZykgewogIHdoaWxlIChfX24tLSkgKytfX2k7Cn0KCgoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxp
bmUgdm9pZCBfX2FkdmFuY2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciYgX19pLCBfRGlzdGFuY2Ug
X19uLCAKICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7
CiAgaWYgKF9fbiA+PSAwKQogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICBlbHNlCiAgICB3aGls
ZSAoX19uKyspIC0tX19pOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sIAogICAgICAgICAgICAgICAgICAgICAgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICBfX2kgKz0gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgYWR2YW5jZShf
SW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKSB7CiAgX19hZHZhbmNlKF9faSwgX19u
LCBpdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+
CmNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNv
bnRhaW5lcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJf
dHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
dHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAg
ICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAg
ICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBl
eHBsaWNpdCBiYWNrX2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVy
KCZfX3gpIHt9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9
KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsgCiAgICBj
b250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgYmFj
a19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlz
OyB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJl
dHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRv
cisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCiMgMzc4ICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9p
dGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmlubGluZSBiYWNrX2lu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBiYWNrX2luc2VydGVyKF9Db250YWluZXImIF9feCkg
ewogIHJldHVybiBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yIHsKcHJv
dGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRh
aW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90
YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0
eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAg
ICAgICAgICAgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0Nv
bnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGZyb250X2luc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFs
dWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsK
ICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0K
fTsKCiMgNDE3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNs
YXNzIF9Db250YWluZXI+CmlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4g
ZnJvbnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGZyb250X2luc2VydF9p
dGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4K
Y2xhc3MgaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5l
cjsKICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwpwdWJsaWM6CiAgdHlwZWRl
ZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0
ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAg
ICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90
eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9p
ZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVy
JiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkgCiAgICA6IGNvbnRhaW5l
cigmX194KSwgaXRlcihfX2kpIHt9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9w
ZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7
IAogICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOwogICAgKytpdGVy
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9w
ZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRh
aW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoKIyA0NTkgIi91c3Iv
bGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lciwg
Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNl
cnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1l
IF9Db250YWluZXI6Oml0ZXJhdG9yIF9faXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9D
b250YWluZXI+KF9feCwgX19pdGVyKF9faSkpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCYsIAogICAg
ICAgICAgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90PiAKCgoKCmNsYXNzIHJldmVyc2VfYmlk
aXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRl
cmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgX1RwLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+ICBfU2VsZjsKcHJvdGVj
dGVkOgogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYg
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBf
VHAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNl
ICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAg
ICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgICAgICAgICAgICAg
ICAgIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBl
eHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJdGVy
YXRvciBfX3gpCiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3Ig
YmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigp
IGNvbnN0IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAg
cmV0dXJuICotLV9fdG1wOwogIH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1
cm4gJihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJl
bnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBf
U2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0K
ICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsK
ICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAg
ICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKIyA1NTAgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpSXRlciwgY2xhc3MgX1Rw
LCBjbGFzcyBfUmVmLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVy
YXRvcj09KAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIs
IF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX194LCAKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkKewogIHJl
dHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCgoKIAogCiAKIAogCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0l0ZXJhdG9yPgpjbGFzcyByZXZlcnNlX2l0ZXJhdG9yIAp7CnByb3RlY3RlZDoKICBf
SXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1
ZV90eXBlCiAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgZGlmZmVyZW5jZV90
eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50
ZXIKICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXJhdG9yPjo6cmVmZXJlbmNlCiAgICAgICAgICByZWZlcmVuY2U7CgogIHR5cGVkZWYgX0l0
ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv
cj4gX1NlbGY7CgpwdWJsaWM6CiAgcmV2ZXJzZV9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2
ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkge30KCiAgcmV2
ZXJzZV9pdGVyYXRvcihjb25zdCBfU2VsZiYgX194KSA6IGN1cnJlbnQoX194LmN1cnJlbnQpIHt9
CgogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkge30KCiAg
ICAKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CiAgcmVm
ZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7
CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQoKICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAt
LWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7
CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1w
OwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAq
dGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRo
aXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBfU2VsZiBvcGVyYXRv
cisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQg
LSBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7CiAg
ICBjdXJyZW50IC09IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3It
KGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2VsZihjdXJyZW50ICsg
X19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9fbikgewogICAg
Y3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIHJlZmVyZW5jZSBvcGVyYXRv
cltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBfX24pOyB9
ICAKfTsgCiAKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1
cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9y
PgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3gsIAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcmF0b3I+JiBfX3gsIAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNlKCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4g
Cm9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVu
Y2VfdHlwZSBfX24sCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feCkgewogIHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJhc2UoKSAt
IF9fbik7Cn0KCiMgODA1ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIu
OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKIAogCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdCA9IHB0cmRpZmZfdD4gCmNsYXNzIGlzdHJl
YW1faXRlcmF0b3IgewogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gPD4gIChjb25zdCBpc3RyZWFt
X2l0ZXJhdG9yJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJik7CnByb3RlY3RlZDoKICBpc3RyZWFtKiBfTV9zdHJl
YW07CiAgX1RwIF9NX3ZhbHVlOwogIGJvb2wgX01fZW5kX21hcmtlcjsKICB2b2lkIF9NX3JlYWQo
KSB7CiAgICBfTV9lbmRfbWFya2VyID0gKCpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogICAg
aWYgKF9NX2VuZF9tYXJrZXIpICpfTV9zdHJlYW0gPj4gX01fdmFsdWU7CiAgICBfTV9lbmRfbWFy
a2VyID0gKCpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogIH0KcHVibGljOgogIHR5cGVkZWYg
aW5wdXRfaXRlcmF0b3JfdGFnICBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAg
ICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0ICAgICAgICAgICAgICAgZGlm
ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgY29uc3QgX1RwKiAgICAgICAgICBwb2ludGVyOwogIHR5
cGVkZWYgY29uc3QgX1RwJiAgICAgICAgICByZWZlcmVuY2U7CgogIGlzdHJlYW1faXRlcmF0b3Io
KSA6IF9NX3N0cmVhbSgmY2luKSwgX01fZW5kX21hcmtlcihmYWxzZSkge30KICBpc3RyZWFtX2l0
ZXJhdG9yKGlzdHJlYW0mIF9fcykgOiBfTV9zdHJlYW0oJl9fcykgeyBfTV9yZWFkKCk7IH0KICBy
ZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01fdmFsdWU7IH0KCiAgcG9pbnRl
ciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgaXN0cmVh
bV9pdGVyYXRvcjxfVHAsIF9EaXN0PiYgb3BlcmF0b3IrKygpIHsgCiAgICBfTV9yZWFkKCk7IAog
ICAgcmV0dXJuICp0aGlzOwogIH0KICBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+IG9wZXJh
dG9yKysoaW50KSAgewogICAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiBfX3RtcCA9ICp0
aGlzOwogICAgX01fcmVhZCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCiMgODY0ICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8
X1RwLCBfRGlzdGFuY2U+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVh
bV9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feSkgewogIHJldHVybiAoX194Ll9NX3N0cmVh
bSA9PSBfX3kuX01fc3RyZWFtICYmCiAgICAgICAgICBfX3guX01fZW5kX21hcmtlciA9PSBfX3ku
X01fZW5kX21hcmtlcikgfHwKICAgICAgICAgX194Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2UgJiYg
X195Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNz
IG9zdHJlYW1faXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgb3N0cmVhbSogX01fc3RyZWFtOwogIGNv
bnN0IGNoYXIqIF9NX3N0cmluZzsKcHVibGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVf
dHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAg
ICAgICAgICByZWZlcmVuY2U7CgogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbSYgX19zKSA6IF9N
X3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9CiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFt
JiBfX3MsIGNvbnN0IGNoYXIqIF9fYykgCiAgICA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5n
KF9fYykgIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29uc3QgX1RwJiBf
X3ZhbHVlKSB7IAogICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVlOwogICAgaWYgKF9NX3N0cmluZykg
Kl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIG9zdHJlYW1f
aXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBvc3RyZWFtX2l0
ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfSAKICBvc3RyZWFtX2l0
ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfSAKfTsKCiMgOTA3
ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKIAoKCgogCiAKIAojIDU2ICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgoKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQg
X19pdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBfVHAqKSB7
CiAgX1RwIF9fdG1wID0gKl9fYTsKICAqX19hID0gKl9fYjsKICAqX19iID0gX190bXA7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUg
dm9pZCBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKSB7CiAg
X19pdGVyX3N3YXAoX19hLCBfX2IsIF9fdmFsdWVfdHlwZSggX19hICkgKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgc3dhcChfVHAmIF9fYSwgX1RwJiBfX2IpIHsKICBfVHAg
X190bXAgPSBfX2E7CiAgX19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9CgogCiAKCgoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19hLCBj
b25zdCBfVHAmIF9fYikgewogIHJldHVybiBfX2IgPCBfX2EgPyBfX2IgOiBfX2E7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29u
c3QgX1RwJiBfX2IpIHsKICByZXR1cm4gIF9fYSA8IF9fYiA/IF9fYiA6IF9fYTsKfQoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNv
bnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJu
IF9fY29tcChfX2IsIF9fYSkgPyBfX2IgOiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0
IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19jb21wKF9fYSwgX19iKSA/
IF9fYiA6IF9fYTsKfQoKIAogCgogCiAKIAogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJ
dGVyIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1
dEl0ZXIKX19jb3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwKICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9f
Zmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsr
X19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4KaW5saW5lIF9UcCoKX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2Zp
cnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogIG1lbW1vdmUoX19yZXN1
bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4g
X19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfQm9vbFR5cGU+CnN0cnVjdCBfX2NvcHlf
ZGlzcGF0Y2ggewogIHN0YXRpYyBfT3V0cHV0SXRlciBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAg
IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0NhdGVnb3J5KCksIChf
RGlzdGFuY2UqKSAwKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5
X2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShj
b25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAg
ICByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9kaXNwYXRjaDxjb25zdCBfVHAq
LCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2Zp
cnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgcmV0dXJuIF9fY29w
eV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogIH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIGNv
cHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfVHA7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAg
ICAgICAgIF9Ucml2aWFsOwogIHJldHVybiBfX2NvcHlfZGlzcGF0Y2g8X0lucHV0SXRlciwgX091
dHB1dEl0ZXIsIF9Ucml2aWFsPgogICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQp
Owp9CgojIDIxMyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMwoKCiAKIAoKdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIs
IAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyMiBf
X2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xh
c3QpCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy
LCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3
YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
RGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19u
ID4gMDsgLS1fX24pCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1
bHQ7Cn0KCgoKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNs
YXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQm9vbFR5cGU+CnN0cnVj
dCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjppdGVyYXRvcl9jYXRlZ29yeSAKICAgICAgICAg
IF9DYXQ7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJ
dGVyMT46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwoKICBzdGF0aWMgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f
cmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19y
ZXN1bHQsIF9DYXQoKSwgKF9EaXN0YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5
cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBf
X2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVtID0gX19sYXN0
IC0gX19maXJzdDsKICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXplb2Yo
X1RwKSAqIF9OdW0pOwogICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNvbnN0IF9UcCos
IF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmly
c3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gIF9fY29w
eV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgICAgOjpjb3B5
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQkkx
LCBjbGFzcyBfQkkyPgppbmxpbmUgX0JJMiBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJ
MSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFp
dHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTI+Ojp2YWx1ZV90eXBlPgogICAgICAgICAg
ICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAg
IF9Ucml2aWFsOwogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwg
X1RyaXZpYWw+CiAgICAgICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQp
Owp9CgojIDMwMyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMwoKCiAKIAoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KcGFp
cjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBf
U2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1fX2NvdW50KSB7
CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7
CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2ZpcnN0LCBfX3Jl
c3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091
dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfUkFJ
dGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIgX19sYXN0
ID0gX19maXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+
KF9fbGFzdCwgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBw
YWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9TaXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9u
KF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y
X2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091
dHB1dEl0ZXI+CmNvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRw
dXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9f
cmVzdWx0KTsKfQoKIAogCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Rw
Pgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNv
bnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVy
LCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBmaWxsX24oX091dHB1dEl0ZXIg
X19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBmb3IgKCA7IF9fbiA+
IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fdmFsdWU7CiAgcmV0dXJuIF9f
Zmlyc3Q7Cn0KCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMj4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9f
Zmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAg
fQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmly
c3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwg
Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1p
c21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpf
X2ZpcnN0MikpIHsKICAgICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICByZXR1cm4g
cGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmlubGluZSBib29s
IGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0g
X19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICgqX19maXJzdDEgIT0gKl9f
Zmlyc3QyKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNh
dGU+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVBy
ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyAr
K19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CgogCiAKIAoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
X2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAg
ICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICgq
X19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9f
Zmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wg
bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy
ICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmIChf
X2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChf
X2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJl
dHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCmlubGlu
ZSBib29sIApsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2Zp
cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsK
ICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHNpemVf
dCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVt
Y21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9f
cmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7Cn0KCmlubGluZSBi
b29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBj
aGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKewoKICByZXR1cm4gbGV4aWNvZ3Jh
cGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3Qy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBf
X2xhc3QyKTsKCgoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5w
dXRJdGVyMj4KaW50IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewogIHdo
aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlm
ICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgqX19maXJz
dDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAgICsrX19m
aXJzdDI7CiAgfQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4gIShfX2Zp
cnN0MSA9PSBfX2xhc3QxKTsKICB9CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9Cgppbmxp
bmUgaW50Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNpZ25lZCBjaGFy
KiBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4xID0gX19s
YXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19m
aXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0Miwg
bWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCAK
ICAgICAgICAgICAgICAgICAgICAgICA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChfX2xlbjEg
PCBfX2xlbjIgPyAtMSA6IDEpKTsKfQoKaW5saW5lIGludCAKX19sZXhpY29ncmFwaGljYWxfY29t
cGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNo
YXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2Zp
cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIq
KSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQg
Y2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBz
aWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz
dDIpCnsKICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fZmlyc3QxLCBf
X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCiAKCgoKIAogCiAKIyAzMCAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9hbGdvcml0aG0iIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJl
LWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25zdHJ1Y3QuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgogCiAKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIGRlc3Ryb3koX1RwKiBfX3BvaW50ZXIpIHsKICBfX3Bv
aW50ZXItPn5fVHAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUg
dm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkgewogIG5ldyAoX19w
KSBfVDEoX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDE+CmlubGluZSB2b2lkIGNvbnN0
cnVjdChfVDEqIF9fcCkgewogIG5ldyAoX19wKSBfVDEoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkCl9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQp7CiAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgZGVzdHJveSgmKl9fZmlyc3Qp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgX19kZXN0
cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkg
e30KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CmlubGluZSB2
b2lkCl9fZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3Ig
X19sYXN0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhh
c190cml2aWFsX2Rlc3RydWN0b3IKICAgICAgICAgIF9Ucml2aWFsX2Rlc3RydWN0b3I7CiAgX19k
ZXN0cm95X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9Ucml2aWFsX2Rlc3RydWN0b3IoKSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBkZXN0cm95KF9Gb3J3
YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKICBfX2Rlc3Ry
b3koX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9CgppbmxpbmUg
dm9pZCBkZXN0cm95KGNoYXIqLCBjaGFyKikge30KaW5saW5lIHZvaWQgZGVzdHJveSh3Y2hhcl90
Kiwgd2NoYXJfdCopIHt9CgogCgoKCiAKIAogCiMgMzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1z
bGFja3dhcmUtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxnb3JpdGht
IiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgogCgogCiAKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlciAKX191bmlu
aXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJldHVybiBjb3B5KF9fZmlyc3QsIF9f
bGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Zv
cndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90
eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAgdHJ5ICB7CiAgICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgIGNvbnN0cnVj
dCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICByZXR1cm4gX19jdXI7CiAgfQogIGNhdGNoKC4uLikg
eyAgZGVzdHJveShfX3Jlc3VsdCwgX19jdXIpIDsgdGhyb3c7IH0gOwp9CgoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0Zv
cndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwg
X1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+Ojppc19QT0RfdHlw
ZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgogIHVuaW5pdGlhbGl6ZWRf
Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICByZXR1cm4gX191bmluaXRpYWxpemVk
X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX192YWx1ZV90eXBlKCBfX3Jlc3VsdCApICk7Cn0KCmlubGluZSBjaGFyKiB1bmluaXRp
YWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShf
X3Jlc3VsdCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgcmV0dXJuIF9fcmVzdWx0ICsg
KF9fbGFzdCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgd2NoYXJfdCogCnVuaW5pdGlhbGl6ZWRfY29w
eShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90KiBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmly
c3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7CiAgcmV0dXJuIF9fcmVz
dWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KcGFpcjxfSW5wdXRJdGVyLCBfRm9y
d2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6
ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBfRm9yd2FyZEl0
ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgIHsKICAgIGZvciAoIDsgX19jb3VudCA+IDAgOyAt
LV9fY291bnQsICsrX19maXJzdCwgKytfX2N1cikgCiAgICAgIGNvbnN0cnVjdCgmKl9fY3VyLCAq
X19maXJzdCk7CiAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmly
c3QsIF9fY3VyKTsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVzdWx0LCBfX2N1cikg
OyB0aHJvdzsgfSA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIs
IF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZykgewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50Owog
IHJldHVybiBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9yd2FyZEl0ZXI+KAogICAgICAgICAg
ICAgICAgIF9fbGFzdCwKICAgICAgICAgICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0Zv
cndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1Np
emUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7
CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeSgg
X19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwg
Y2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+
CnVuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwK
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9f
dW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7
Cn0KCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2
b2lkCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwg
X190cnVlX3R5cGUpCnsKICBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkCl9fdW5pbml0aWFsaXplZF9maWxs
X2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQp7CiAgX0Zvcndh
cmRJdGVyIF9fY3VyID0gX19maXJzdDsKICB0cnkgIHsKICAgIGZvciAoIDsgX19jdXIgIT0gX19s
YXN0OyArK19fY3VyKQogICAgICBjb25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICB9CiAgY2F0Y2go
Li4uKSB7ICBkZXN0cm95KF9fZmlyc3QsIF9fY3VyKSA7IHRocm93OyB9IDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgdm9pZCBf
X3VuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX194LCBf
VHAxKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6aXNfUE9EX3R5
cGUgX0lzX1BPRDsKICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJzdCwgX19sYXN0LCBf
X3gsIF9Jc19QT0QoKSk7CiAgICAgICAgICAgICAgICAgICAKfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCB1bmluaXRpYWxpemVkX2ZpbGwoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X194KQp7CiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gsIF9fdmFs
dWVfdHlwZSggX19maXJzdCApICk7Cn0KCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFs
aXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKewogIHJldHVy
biBmaWxsX24oX19maXJzdCwgX19uLCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgpfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVk
X2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3YXJk
SXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgdHJ5ICB7CiAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19u
LCArK19fY3VyKQogICAgICBjb25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgIHJldHVybiBfX2N1
cjsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fZmlyc3QsIF9fY3VyKSA7IHRocm93OyB9
IDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9U
cCwgY2xhc3MgX1RwMT4KaW5saW5lIF9Gb3J3YXJkSXRlciAKX191bmluaXRpYWxpemVkX2ZpbGxf
bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCwgX1RwMSop
CnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46OmlzX1BPRF90eXBlIF9J
c19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9fZmlyc3QsIF9fbiwg
X194LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
U2l6ZSwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyIAp1bmluaXRpYWxpemVkX2ZpbGxf
bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkKewogIHJl
dHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194LCBfX3ZhbHVlX3R5
cGUoIF9fZmlyc3QgKSApOwp9CgogCiAKCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3
YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf
SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIF9Gb3J3YXJkSXRlciBfX21pZCA9IHVuaW5pdGlh
bGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogIHRyeSAgewogICAgcmV0
dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOwogIH0KICBj
YXRjaCguLi4pIHsgIGRlc3Ryb3koX19yZXN1bHQsIF9fbWlkKSA7IHRocm93OyB9IDsKfQoKIAog
CiAKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfSW5wdXRJ
dGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyIApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5KF9Gb3J3
YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCnsKICB1bmluaXRpYWxpemVkX2ZpbGwoX19y
ZXN1bHQsIF9fbWlkLCBfX3gpOwogIHRyeSAgewogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9f
cmVzdWx0LCBfX21pZCkgOyB0aHJvdzsgfSA7Cn0KCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmlu
aXRpYWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9y
d2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f
eCkKewogIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEs
IF9fbGFzdDEsIF9fZmlyc3QyKTsKICB0cnkgIHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX21p
ZDIsIF9fbGFzdDIsIF9feCk7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX2ZpcnN0Miwg
X19taWQyKSA7IHRocm93OyB9IDsKfQoKIAoKCgogCiAKIAojIDMyICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2Fs
Z29yaXRobSIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgv
Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3RlbXBidWYuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnBh
aXI8X1RwKiwgcHRyZGlmZl90PiAKX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19s
ZW4sIF9UcCopCnsKICBpZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAgIC8gc2l6ZW9m
KF9UcCkpKQogICAgX19sZW4gPSAyMTQ3NDgzNjQ3ICAgLyBzaXplb2YoX1RwKTsKCiAgd2hpbGUg
KF9fbGVuID4gMCkgewogICAgX1RwKiBfX3RtcCA9IChfVHAqKSBtYWxsb2MoKHNpemVfdClfX2xl
biAqIHNpemVvZihfVHApKTsKICAgIGlmIChfX3RtcCAhPSAwKQogICAgICByZXR1cm4gcGFpcjxf
VHAqLCBwdHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAgICBfX2xlbiAvPSAyOwogIH0KCiAgcmV0
dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PigoX1RwKikwLCAwKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgppbmxpbmUgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IGdldF90ZW1wb3JhcnlfYnVmZmVy
KHB0cmRpZmZfdCBfX2xlbikgewogIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVu
LCAoX1RwKikgMCk7Cn0KCgoKIAogCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBw
YWlyPF9UcCosIHB0cmRpZmZfdD4gZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVu
LCBfVHAqKSB7CiAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAw
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kdm9pZCByZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihf
VHAqIF9fcCkgewogIGZyZWUoX19wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0
b3IsIGNsYXNzIF9UcD4KY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIgewpwcml2YXRlOgogIHB0cmRp
ZmZfdCAgX01fb3JpZ2luYWxfbGVuOwogIHB0cmRpZmZfdCAgX01fbGVuOwogIF9UcCogICAgICAg
X01fYnVmZmVyOwoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdpbmFs
X2xlbiA9IF9NX2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChwdHJk
aWZmX3QpKDIxNDc0ODM2NDcgICAvIHNpemVvZihfVHApKSkKICAgICAgX01fbGVuID0gMjE0NzQ4
MzY0NyAgIC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9NX2xlbiA+IDApIHsKICAgICAgX01f
YnVmZmVyID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAgIGlmIChf
TV9idWZmZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xlbiAvPSAyOwogICAgfQogIH0KCiAg
dm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlwZSkge30KICB2
b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUpIHsK
ICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwpOwogIH0KCnB1
YmxpYzoKICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQogIHB0cmRp
ZmZfdCByZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX29yaWdpbmFsX2xlbjsgfQog
IF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0KICBfVHAqIGVuZCgpIHsgcmV0dXJu
IF9NX2J1ZmZlciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJh
dG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVu
YW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rvcgog
ICAgICAgICAgICBfVHJpdmlhbDsKICAgIHRyeSAgewogICAgICBfTV9sZW4gPSAwOwogICAgICBk
aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2xlbik7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZl
cigpOwogICAgICBpZiAoX01fbGVuID4gMCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigq
X19maXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgIGZyZWUoX01fYnVm
ZmVyKTsgX01fYnVmZmVyID0gMDsgX01fbGVuID0gMCA7IHRocm93OyB9IDsKICB9CiAKICB+X1Rl
bXBvcmFyeV9idWZmZXIoKSB7ICAKICAgIGRlc3Ryb3koX01fYnVmZmVyLCBfTV9idWZmZXIgKyBf
TV9sZW4pOwogICAgZnJlZShfTV9idWZmZXIpOwogIH0KCnByaXZhdGU6CiAgIAogIF9UZW1wb3Jh
cnlfYnVmZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KICB2b2lkIG9wZXJhdG9yPShj
b25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9Cn07CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyYXRvciwgCiAgICAgICAgICBjbGFzcyBfVHAgCgogICAgICAgICAgICAgICAgICAgID0g
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCgog
ICAgICAgICA+CnN0cnVjdCB0ZW1wb3JhcnlfYnVmZmVyIDogcHVibGljIF9UZW1wb3JhcnlfYnVm
ZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4KewogIHRlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJ
dGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX1RlbXBvcmFy
eV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPihfX2ZpcnN0LCBfX2xhc3QpIHt9CiAgfnRl
bXBvcmFyeV9idWZmZXIoKSB7fQp9OwogICAgCiAKCgoKIAogCiAKIyAzMyAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9hbGdvcml0aG0iIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxp
bnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvLmgiIDEgMwogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaGVh
cC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgogCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz
IF9UcD4Kdm9pZCAKX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAg
ICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9U
cCBfX3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAy
OwogIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgKihfX2ZpcnN0ICsgX19wYXJl
bnQpIDwgX192YWx1ZSkgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0
ICsgX19wYXJlbnQpOwogICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgIF9fcGFyZW50ID0g
KF9faG9sZUluZGV4IC0gMSkgLyAyOwogIH0gICAgCiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgp
ID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xh
c3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIApfX3B1c2hfaGVhcF9hdXgoX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19sYXN0LCBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgX19wdXNoX2hlYXAoX19maXJz
dCwgX0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2UoMCksIAogICAg
ICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcmF0b3I+CmlubGluZSB2b2lkIApwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKICBfX3B1c2hfaGVh
cF9hdXgoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUo
IF9fZmlyc3QgKSAsIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwLCAKICAg
ICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkCl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgIF9EaXN0YW5j
ZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNl
IF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIHdoaWxlIChfX2hvbGVJbmRleCA+
IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFyZW50KSwgX192YWx1ZSkpIHsK
ICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAg
IF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEp
IC8gMjsKICB9CiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAg
ICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgCl9fcHVzaF9oZWFwX2F1
eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCwKICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSosIF9UcCopIAp7CiAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKChfX2xh
c3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2UoMCksIAogICAgICAgICAgICAgIF9UcCgqKF9f
bGFzdCAtIDEpKSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIApwdXNoX2hlYXAoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg
ICBfQ29tcGFyZSBfX2NvbXApCnsKICBfX3B1c2hfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBf
X2NvbXAsCiAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICwgX192
YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CnZvaWQgCl9fYWRqdXN0X2hlYXAo
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAg
ICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9f
dG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBf
X2hvbGVJbmRleCArIDI7CiAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgaWYg
KCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpIDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQg
LSAxKSkpCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4
KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29u
ZENoaWxkOwogICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogIH0K
ICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5k
ZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICBfX2hvbGVJbmRleCA9
IF9fc2Vjb25kQ2hpbGQgLSAxOwogIH0KICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRl
eCwgX190b3BJbmRleCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCAKX19wb3Bf
aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBf
X3ZhbHVlLCBfRGlzdGFuY2UqKQp7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgX19hZGp1c3Rf
aGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwg
X192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNz
IF9UcD4KaW5saW5lIHZvaWQgCl9fcG9wX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBfVHAq
KQp7CiAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCAKICAgICAg
ICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQgcG9w
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7CiAgX19wb3BfaGVhcF9hdXgoX19maXJz
dCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICBfRGlzdGFu
Y2UgX19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX190
b3BJbmRleCA9IF9faG9sZUluZGV4OwogIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9f
aG9sZUluZGV4ICsgMjsKICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICBpZiAo
X19jb21wKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpLCAqKF9fZmlyc3QgKyAoX19zZWNvbmRD
aGlsZCAtIDEpKSkpCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICooX19maXJzdCArIF9faG9s
ZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgX19ob2xlSW5kZXggPSBf
X3NlY29uZENoaWxkOwogICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEp
OwogIH0KICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgKihfX2ZpcnN0ICsgX19o
b2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICBfX2hvbGVJ
bmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogIH0KICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hv
bGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgCiAgICAg
ICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIApfX3BvcF9oZWFwKF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJl
IF9fY29tcCwKICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7
CiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3Qg
LSBfX2ZpcnN0KSwgCiAgICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
PgppbmxpbmUgdm9pZCAKX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
c3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9UcCosIF9D
b21wYXJlIF9fY29tcCkKewogIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0
IC0gMSwgX1RwKCooX19sYXN0IC0gMSkpLCBfX2NvbXAsCiAgICAgICAgICAgICBfX2Rpc3RhbmNl
X3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgCnBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBf
Q29tcGFyZSBfX2NvbXApCnsKICAgIF9fcG9wX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192
YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCAKX19tYWtl
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopCnsKICBpZiAoX19sYXN0IC0g
X19maXJzdCA8IDIpIHJldHVybjsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0
OwogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CiAgICAKICB3aGlsZSAodHJ1
ZSkgewogICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9UcCgqKF9f
Zmlyc3QgKyBfX3BhcmVudCkpKTsKICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICBf
X3BhcmVudC0tOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4K
aW5saW5lIHZvaWQgCm1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewogIF9fbWFrZV9oZWFwKF9fZmlyc3QsIF9fbGFz
dCwKICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsIF9fZGlzdGFuY2VfdHlw
ZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3Is
IGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnZv
aWQKX19tYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgX1RwKiwgX0Rp
c3RhbmNlKikKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogIF9EaXN0YW5j
ZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9fbGVu
IC0gMikvMjsKICAgIAogIHdoaWxlICh0cnVlKSB7CiAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3Qs
IF9fcGFyZW50LCBfX2xlbiwgX1RwKCooX19maXJzdCArIF9fcGFyZW50KSksCiAgICAgICAgICAg
ICAgICAgIF9fY29tcCk7CiAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgX19wYXJl
bnQtLTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNz
IF9Db21wYXJlPgppbmxpbmUgdm9pZCAKbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LCAKICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJl
IF9fY29tcCkKewogIF9fbWFrZV9oZWFwKF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLAogICAgICAg
ICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0
ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4Kdm9pZCBzb3J0
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2xhc3QpCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICBwb3BfaGVhcChf
X2ZpcnN0LCBfX2xhc3QtLSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IsIGNsYXNzIF9Db21wYXJlPgp2b2lkIApzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFy
ZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICBwb3BfaGVhcChf
X2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKfQoKCgoKCiAKCgoKIAogCiAKIyAzNCAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfYWxnby5oIiAyIDMKCgogCgoKCgoKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
aW5saW5lIGNvbnN0IF9UcCYgX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19i
LCBjb25zdCBfVHAmIF9fYykgewogIGlmIChfX2EgPCBfX2IpCiAgICBpZiAoX19iIDwgX19jKQog
ICAgICByZXR1cm4gX19iOwogICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICByZXR1cm4gX19j
OwogICAgZWxzZQogICAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgIHJl
dHVybiBfX2E7CiAgZWxzZSBpZiAoX19iIDwgX19jKQogICAgcmV0dXJuIF9fYzsKICBlbHNlCiAg
ICByZXR1cm4gX19iOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5s
aW5lIGNvbnN0IF9UcCYKX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBj
b25zdCBfVHAmIF9fYywgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fY29tcChfX2EsIF9fYikp
CiAgICBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgcmV0dXJuIF9fYjsKICAgIGVsc2UgaWYg
KF9fY29tcChfX2EsIF9fYykpCiAgICAgIHJldHVybiBfX2M7CiAgICBlbHNlCiAgICAgIHJldHVy
biBfX2E7CiAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgIHJldHVybiBfX2E7CiAgZWxz
ZSBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgIHJldHVybiBfX2M7CiAgZWxzZQogICAgcmV0dXJu
IF9fYjsKfQoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Z1bmN0aW9uPgpf
RnVuY3Rpb24gZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwg
X0Z1bmN0aW9uIF9fZikgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkK
ICAgIF9fZigqX19maXJzdCk7CiAgcmV0dXJuIF9fZjsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZChfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U
cCYgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAg
d2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICpfX2ZpcnN0ICE9IF9fdmFsKQogICAgKytfX2Zp
cnN0OwogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZF9pZihfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNh
dGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykK
ewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkKICAgICsr
X19maXJzdDsKICByZXR1cm4gX19maXJzdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgZmluZChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgID0gKF9fbGFzdCAtIF9f
Zmlyc3QpID4+IDI7CgogIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50
KSB7CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2Zp
cnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19f
Zmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsr
X19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAg
KytfX2ZpcnN0OwogIH0KCiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICBjYXNlIDM6CiAg
ICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0Owog
IGNhc2UgMjoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAr
K19fZmlyc3Q7CiAgY2FzZSAxOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19m
aXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJldHVybiBfX2xh
c3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9QcmVk
aWNhdGU+Cl9SYW5kb21BY2Nlc3NJdGVyIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Q
cmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgPSAoX19sYXN0IC0gX19maXJz
dCkgPj4gMjsKCiAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsK
ICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsK
CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7
CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0
OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJz
dDsKICB9CgogIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgY2FzZSAzOgogICAgaWYgKF9f
cHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMjoK
ICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsK
ICBjYXNlIDE6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAr
K19fZmlyc3Q7CiAgY2FzZSAwOgogIGRlZmF1bHQ6CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0lucHV0SXRl
ciBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewogIHJldHVybiBmaW5kKF9fZmlyc3QsIF9f
bGFzdCwgX192YWwsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9JbnB1dEl0ZXIg
ZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKSB7CiAgcmV0dXJuIGZpbmRfaWYoX19m
aXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9
CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRf
ZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkgewogIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2xhc3Q7CiAgX0ZvcndhcmRJdGVyIF9fbmV4
dCA9IF9fZmlyc3Q7CiAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICBpZiAoKl9fZmly
c3QgPT0gKl9fbmV4dCkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0ID0gX19uZXh0
OwogIH0KICByZXR1cm4gX19sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmluZChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJz
dDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2JpbmFyeV9wcmVkKCpf
X2ZpcnN0LCAqX19uZXh0KSkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0ID0gX19u
ZXh0OwogIH0KICByZXR1cm4gX19sYXN0Owp9CgogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9TaXplPgp2b2lkIGNvdW50KF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSwKICAgICAgICAg
ICBfU2l6ZSYgX19uKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog
ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpCiAgICAgICsrX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1NpemU+CnZvaWQgY291bnRf
aWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3By
ZWQsCiAgICAgICAgICAgICAgX1NpemUmIF9fbikgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICArK19fbjsKfQoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgp0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQpjb3VudChfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwog
IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCA9
PSBfX3ZhbHVlKQogICAgICArK19fbjsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
bnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291bnRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpIHsKICB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQog
ICAgICArK19fbjsKICByZXR1cm4gX19uOwp9CgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0ZvcndhcmRJdGVyMSBzZWFyY2goX0Zvcndh
cmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpIAp7CiAg
IAogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICBy
ZXR1cm4gX19maXJzdDE7CgogICAKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAr
K19fdG1wOwogIGlmIChfX3RtcCA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGZpbmQoX19maXJzdDEs
IF9fbGFzdDEsICpfX2ZpcnN0Mik7CgogICAKCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7Cgog
IF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9f
Zmlyc3QxOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgX19maXJzdDEgPSBm
aW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwogICAgaWYgKF9fZmlyc3QxID09IF9f
bGFzdDEpCiAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgIF9fcCA9IF9fcDE7CiAgICBfX2N1cnJl
bnQgPSBfX2ZpcnN0MTsgCiAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgcmV0
dXJuIF9fbGFzdDE7CgogICAgd2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9fcCkgewogICAgICBpZiAo
KytfX3AgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIGlmICgrK19f
Y3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgfQoKICAgICsr
X19maXJzdDE7CiAgfQogIHJldHVybiBfX2ZpcnN0MTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkPgpfRm9yd2Fy
ZEl0ZXIxIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJk
SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWQgIF9fcHJlZGlj
YXRlKSAKewogICAKICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xh
c3QyKQogICAgcmV0dXJuIF9fZmlyc3QxOwoKICAgCiAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2Zp
cnN0Mik7CiAgKytfX3RtcDsKICBpZiAoX190bXAgPT0gX19sYXN0MikKICAgIHJldHVybiBmaW5k
KF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwoKICAgCgogIF9Gb3J3YXJkSXRlcjIgX19w
MSwgX19wOwoKICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAgX0ZvcndhcmRJdGVyMSBfX2N1
cnJlbnQgPSBfX2ZpcnN0MTsKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgIHdo
aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgIGlmIChfX3ByZWRpY2F0ZSgqX19maXJz
dDEsICpfX2ZpcnN0MikpCiAgICAgICAgYnJlYWs7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAg
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAq
X19maXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEp
CiAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgIF9fcCA9IF9fcDE7CiAgICBfX2N1cnJlbnQgPSBf
X2ZpcnN0MTsgCiAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFzdDE7
CgogICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAgIGlmICgr
K19fcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgaWYgKCsrX19j
dXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogICAgKytf
X2ZpcnN0MTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyLCBjbGFzcyBfSW50ZWdlciwgY2xhc3MgX1RwPgpfRm9yd2FyZEl0ZXIgc2VhcmNo
X24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsKSB7CiAgaWYgKF9f
Y291bnQgPD0gMCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVsc2UgewogICAgX19maXJzdCA9IGZp
bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp
IHsKICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgIF9Gb3J3YXJkSXRlciBf
X2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYg
X19uICE9IDAgJiYgKl9faSA9PSBfX3ZhbCkgewogICAgICAgICsrX19pOwogICAgICAgIC0tX19u
OwogICAgICB9CiAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAg
ICAgZWxzZQogICAgICAgIF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBfX3ZhbCk7CiAgICB9
CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX0ludGVnZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRl
ciBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwsCiAg
ICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVkKSB7CiAgaWYgKF9f
Y291bnQgPD0gMCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVsc2UgewogICAgd2hpbGUgKF9fZmly
c3QgIT0gX19sYXN0KSB7CiAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCBfX3ZhbCkp
CiAgICAgICAgYnJlYWs7CiAgICAgICsrX19maXJzdDsKICAgIH0KICAgIHdoaWxlIChfX2ZpcnN0
ICE9IF9fbGFzdCkgewogICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgX0Zv
cndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICB3aGlsZSAoX19pICE9
IF9fbGFzdCAmJiBfX24gIT0gMCAmJiBfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkgewogICAg
ICAgICsrX19pOwogICAgICAgIC0tX19uOwogICAgICB9CiAgICAgIGlmIChfX24gPT0gMCkKICAg
ICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSB7CiAgICAgICAgd2hpbGUgKF9faSAhPSBf
X2xhc3QpIHsKICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICArK19faTsKICAgICAgICB9CiAgICAgICAgX19maXJzdCA9
IF9faTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0gCgogCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0ZvcndhcmRJdGVy
MiBzd2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0Mikgewog
IGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAg
IGl0ZXJfc3dhcChfX2ZpcnN0MSwgX19maXJzdDIpOwogIHJldHVybiBfX2ZpcnN0MjsKfQoKIAoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVW5h
cnlPcGVyYXRpb24+Cl9PdXRwdXRJdGVyIHRyYW5zZm9ybShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsIF9VbmFyeU9wZXJhdGlvbiBfX29wZXIpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0
OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBfX29wZXIoKl9fZmlyc3Qp
OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz
cyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5
T3BlcmF0aW9uPgpfT3V0cHV0SXRlciB0cmFuc2Zvcm0oX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MiwgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5
T3BlcmF0aW9uIF9fYmluYXJ5X29wKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyAr
K19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gX19iaW5h
cnlfb3AoKl9fZmlyc3QxLCAqX19maXJzdDIpOwogIHJldHVybiBfX3Jlc3VsdDsKfQoKIAoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIHJlcGxhY2UoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBjb25zdCBf
VHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKSB7CiAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVl
KQogICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHA+CnZvaWQgcmVwbGFjZV9pZihfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Q
cmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKSB7CiAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAg
ICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZXBsYWNlX2NvcHkoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkgewogIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0ID09IF9fb2xkX3ZhbHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICByZXR1cm4g
X19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBJdGVyYXRvciwgY2xhc3MgX091dHB1dEl0ZXIs
IGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgcmVwbGFjZV9jb3B5X2lm
KEl0ZXJhdG9yIF9fZmlyc3QsIEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpIHsKICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBf
X3ByZWQoKl9fZmlyc3QpID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICByZXR1cm4gX19yZXN1
bHQ7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9HZW5lcmF0b3I+
CnZvaWQgZ2VuZXJhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
IF9HZW5lcmF0b3IgX19nZW4pIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly
c3QpCiAgICAqX19maXJzdCA9IF9fZ2VuKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0SXRl
ciwgY2xhc3MgX1NpemUsIGNsYXNzIF9HZW5lcmF0b3I+Cl9PdXRwdXRJdGVyIGdlbmVyYXRlX24o
X091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKSB7CiAgZm9y
ICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX2dlbigpOwog
IHJldHVybiBfX2ZpcnN0Owp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgcmVtb3ZlX2NvcHkoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsgX19maXJz
dCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCAhPSBfX3ZhbHVlKSB7CiAg
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICArK19fcmVzdWx0OwogICAgfQogIHJldHVy
biBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJ
dGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfT3V0cHV0SXRlciByZW1vdmVfY29weV9pZihfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3ByZWQpIHsKICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoIV9fcHJlZCgqX19maXJzdCkpIHsK
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0
dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+
Cl9Gb3J3YXJkSXRlciByZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgX19maXJz
dCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlKTsKICBfRm9yd2FyZEl0ZXIgX19pID0g
X19maXJzdDsKICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0IAogICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9f
dmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRl
PgpfRm9yd2FyZEl0ZXIgcmVtb3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKSB7CiAg
X19maXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOwogIF9Gb3J3YXJkSXRl
ciBfX2kgPSBfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytfX2ksIF9fbGFzdCwg
X19maXJzdCwgX19wcmVkKTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1RwKikgewogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7
CiAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAg
IGlmIChfX3ZhbHVlICE9ICpfX2ZpcnN0KSB7CiAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsKICAg
ICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgfQogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0
cHV0SXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykg
ewogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fdmFs
dWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlciBfX3Jlc3VsdCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAqX19yZXN1bHQgPSAq
X19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICgqX19yZXN1bHQg
IT0gKl9fZmlyc3QpICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgcmV0dXJuICsrX19yZXN1bHQ7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5l
IF9PdXRwdXRJdGVyIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogIHJldHVybiBf
X3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeSggX19yZXN1bHQgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGUs
CiAgICAgICAgICBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJl
ZGljYXRlIF9fYmluYXJ5X3ByZWQsIF9UcCopIHsKICBfVHAgX192YWx1ZSA9ICpfX2ZpcnN0Owog
ICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBp
ZiAoIV9fYmluYXJ5X3ByZWQoX192YWx1ZSwgKl9fZmlyc3QpKSB7CiAgICAgIF9fdmFsdWUgPSAq
X19maXJzdDsKICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgfQogIHJldHVybiArK19f
cmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIs
IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBfT3V0cHV0SXRlciBfX3VuaXF1ZV9jb3B5
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9pdGVyYXRvcl90YWcpIHsKICByZXR1cm4gX191
bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLAogICAg
ICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVk
aWNhdGU+Cl9Gb3J3YXJkSXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X3Jlc3VsdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19i
aW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90
YWcpIHsKICAqX19yZXN1bHQgPSAqX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFz
dCkKICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1
bHQgPSAqX19maXJzdDsKICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxp
bmUgX091dHB1dEl0ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Jp
bmFyeV9wcmVkKSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAg
cmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19iaW5hcnlf
cHJlZCwKICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX3Jlc3Vs
dCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciB1bmlx
dWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpIHsKICBfX2ZpcnN0
ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QpOwogIHJldHVybiB1bmlxdWVfY29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9CaW5h
cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkgewogIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9f
Zmlyc3QsIF9fbGFzdCwgX19iaW5hcnlfcHJlZCk7CiAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJlZCk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXI+CnZvaWQgX19yZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBf
X2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAodHJ1ZSkKICAgIGlmIChfX2ZpcnN0ID09
IF9fbGFzdCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0KQogICAgICByZXR1cm47CiAgICBlbHNlCiAg
ICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZykgewogIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0KQogICAgaXRlcl9zd2FwKF9f
Zmlyc3QrKywgLS1fX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy
PgppbmxpbmUgdm9pZCByZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19sYXN0KSB7CiAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVy
YXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp
b25hbEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciByZXZlcnNlX2NvcHkoX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQpIHsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIC0tX19s
YXN0OwogICAgKl9fcmVzdWx0ID0gKl9fbGFzdDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVy
biBfX3Jlc3VsdDsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9FdWNsaWRlYW5SaW5nRWxlbWVudD4K
X0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fZ2NkKF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX20sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19uKQp7CiAg
d2hpbGUgKF9fbiAhPSAwKSB7CiAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX190ID0gX19tICUg
X19uOwogICAgX19tID0gX19uOwogICAgX19uID0gX190OwogIH0KICByZXR1cm4gX19tOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRl
ciBfX3JvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAg
ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkK
ICAgIHJldHVybiBfX2xhc3Q7CiAgaWYgKF9fbGFzdCAgPT0gX19taWRkbGUpCiAgICByZXR1cm4g
X19maXJzdDsKCiAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyID0gX19taWRkbGU7CiAgZG8gewogICAg
c3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICBpZiAoX19maXJzdCA9PSBfX21pZGRs
ZSkKICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xh
c3QpOwoKICBfRm9yd2FyZEl0ZXIgX19uZXdfbWlkZGxlID0gX19maXJzdDsKCiAgX19maXJzdDIg
PSBfX21pZGRsZTsKCiAgd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCkgewogICAgc3dhcCAoKl9f
Zmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAg
IF9fbWlkZGxlID0gX19maXJzdDI7CiAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAg
ICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAgfQoKICByZXR1cm4gX19uZXdfbWlkZGxlOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfQmlk
aXJlY3Rpb25hbEl0ZXIgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgaWYgKF9fZmlyc3QgPT0gX19taWRk
bGUpCiAgICByZXR1cm4gX19sYXN0OwogIGlmIChfX2xhc3QgID09IF9fbWlkZGxlKQogICAgcmV0
dXJuIF9fZmlyc3Q7CgogIF9fcmV2ZXJzZShfX2ZpcnN0LCAgX19taWRkbGUsIGJpZGlyZWN0aW9u
YWxfaXRlcmF0b3JfdGFnKCkpOwogIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCAgIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwoKICB3aGlsZSAoX19maXJzdCAhPSBfX21pZGRsZSAm
JiBfX21pZGRsZSAhPSBfX2xhc3QpCiAgICBzd2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3QpOwoK
ICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkgewogICAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xh
c3QsICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICByZXR1cm4gX19sYXN0Owog
IH0KICBlbHNlIHsKICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCAgX19taWRkbGUsIGJpZGlyZWN0aW9u
YWxfaXRlcmF0b3JfdGFnKCkpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgpfUmFu
ZG9tQWNjZXNzSXRlciBfX3JvdGF0ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UgKiwgX1RwICopIHsKCiAgX0Rpc3RhbmNlIF9fbiA9IF9f
bGFzdCAgIC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBfX2ZpcnN0Owog
IF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHQg
PSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fbWlkZGxlKTsKCiAgaWYgKF9fayA9PSBfX2wpIHsKICAg
IHN3YXBfcmFuZ2VzKF9fZmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAgICByZXR1cm4gX19y
ZXN1bHQ7CiAgfQoKICBfRGlzdGFuY2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICBmb3IgKF9E
aXN0YW5jZSBfX2kgPSAwOyBfX2kgPCBfX2Q7IF9faSsrKSB7CiAgICBfVHAgX190bXAgPSAqX19m
aXJzdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7CgogICAgaWYgKF9fayA8
IF9fbCkgewogICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19kOyBfX2or
KykgewogICAgICAgIGlmIChfX3AgPiBfX2ZpcnN0ICsgX19sKSB7CiAgICAgICAgICAqX19wID0g
KihfX3AgLSBfX2wpOwogICAgICAgICAgX19wIC09IF9fbDsKICAgICAgICB9CgogICAgICAgICpf
X3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgX19wICs9IF9fazsKICAgICAgfQogICAgfQoKICAg
IGVsc2UgewogICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2svX19kIC0gMTsg
X19qICsrKSB7CiAgICAgICAgaWYgKF9fcCA8IF9fbGFzdCAtIF9faykgewogICAgICAgICAgKl9f
cCA9ICooX19wICsgX19rKTsKICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgfQoKICAgICAg
ICAqX19wID0gKiAoX19wIC0gX19sKTsKICAgICAgICBfX3AgLT0gX19sOwogICAgICB9CiAgICB9
CgogICAgKl9fcCA9IF9fdG1wOwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fcmVzdWx0
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyIHJv
dGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0KSB7CiAgcmV0dXJuIF9fcm90
YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9fZGlzdGFu
Y2VfdHlwZSggX19maXJzdCApICwKICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29y
eSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9P
dXRwdXRJdGVyPgpfT3V0cHV0SXRlciByb3RhdGVfY29weShfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gY29weShfX2Zp
cnN0LCBfX21pZGRsZSwgY29weShfX21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9CgogCiAK
IAoKdGVtcGxhdGUgPGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9EaXN0YW5jZSBfX3JhbmRvbV9u
dW1iZXIoX0Rpc3RhbmNlIF9fbikgewoKCgogIHJldHVybiBscmFuZDQ4KCkgJSBfX247Cgp9Cgog
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHJhbmRvbV9z
aHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg
cmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAh
PSBfX2xhc3Q7ICsrX19pKQogICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZG9tX251
bWJlcigoX19pIC0gX19maXJzdCkgKyAxKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4Kdm9pZCByYW5kb21fc2h1ZmZs
ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKSB7CiAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg
PSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBpdGVyX3N3YXAoX19pLCBf
X2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKfQoKIAoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX091
dHB1dEl0ZXIgcmFuZG9tX3NhbXBsZV9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19vdXQs
IGNvbnN0IF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFuY2UgX19yZW1haW5pbmcgPSAwOwogIGRp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5pbmcpOwogIF9EaXN0YW5jZSBfX20gPSBt
aW4oX19uLCBfX3JlbWFpbmluZyk7CgogIHdoaWxlIChfX20gPiAwKSB7CiAgICBpZiAoX19yYW5k
b21fbnVtYmVyKF9fcmVtYWluaW5nKSA8IF9fbSkgewogICAgICAqX19vdXQgPSAqX19maXJzdDsK
ICAgICAgKytfX291dDsKICAgICAgLS1fX207CiAgICB9CgogICAgLS1fX3JlbWFpbmluZzsKICAg
ICsrX19maXJzdDsKICB9CiAgcmV0dXJuIF9fb3V0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xh
c3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KX091dHB1dEl0ZXIgcmFuZG9tX3NhbXBsZV9uKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19vdXQsIGNvbnN0IF9EaXN0YW5jZSBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCnsK
ICBfRGlzdGFuY2UgX19yZW1haW5pbmcgPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
X19yZW1haW5pbmcpOwogIF9EaXN0YW5jZSBfX20gPSBtaW4oX19uLCBfX3JlbWFpbmluZyk7Cgog
IHdoaWxlIChfX20gPiAwKSB7CiAgICBpZiAoX19yYW5kKF9fcmVtYWluaW5nKSA8IF9fbSkgewog
ICAgICAqX19vdXQgPSAqX19maXJzdDsKICAgICAgKytfX291dDsKICAgICAgLS1fX207CiAgICB9
CgogICAgLS1fX3JlbWFpbmluZzsKICAgICsrX19maXJzdDsKICB9CiAgcmV0dXJuIF9fb3V0Owp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9EaXN0YW5jZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19yYW5kb21fc2FtcGxlKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFuY2UgX19tID0gMDsKICBf
RGlzdGFuY2UgX190ID0gX19uOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19tIDwg
X19uOyArK19fbSwgKytfX2ZpcnN0KSAKICAgIF9fb3V0W19fbV0gPSAqX19maXJzdDsKCiAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fdDsKICAgIF9EaXN0YW5jZSBfX00gPSBf
X3JhbmRvbV9udW1iZXIoX190KTsKICAgIGlmIChfX00gPCBfX24pCiAgICAgIF9fb3V0W19fTV0g
PSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHJldHVybiBfX291dCArIF9fbTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLAogICAg
ICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgpfUmFu
ZG9tQWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbU51
bWJlckdlbmVyYXRvciYgX19yYW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX20gPSAwOwogIF9EaXN0YW5jZSBf
X3QgPSBfX247CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsrX19t
LCArK19fZmlyc3QpCiAgICBfX291dFtfX21dID0gKl9fZmlyc3Q7CgogIHdoaWxlIChfX2ZpcnN0
ICE9IF9fbGFzdCkgewogICAgKytfX3Q7CiAgICBfRGlzdGFuY2UgX19NID0gX19yYW5kKF9fdCk7
CiAgICBpZiAoX19NIDwgX19uKQogICAgICBfX291dFtfX01dID0gKl9fZmlyc3Q7CiAgICArK19f
Zmlyc3Q7CiAgfQoKICByZXR1cm4gX19vdXQgKyBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVy
CnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19vdXRfbGFzdCkgCnsKICByZXR1cm4gX19yYW5kb21fc2FtcGxlKF9fZmlyc3QsIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2ZpcnN0LCBfX291dF9sYXN0IC0gX19v
dXRfZmlyc3QpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCAKICAgICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CmlubGlu
ZSBfUmFuZG9tQWNjZXNzSXRlcgpyYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbU51
bWJlckdlbmVyYXRvciYgX19yYW5kKSAKewogIHJldHVybiBfX3JhbmRvbV9zYW1wbGUoX19maXJz
dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3QsIF9fcmFuZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2xhc3QgLSBfX291dF9maXJzdCk7Cn0KCiAK
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9Gb3J3YXJk
SXRlciBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKCQkgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAoJCQkgX1ByZWRpY2F0ZSAgIF9fcHJlZCwKCQkJIGZvcndhcmRfaXRlcmF0
b3JfdGFnKSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgd2hp
bGUgKF9fcHJlZCgqX19maXJzdCkpCiAgICBpZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJu
IF9fZmlyc3Q7CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwoKICB3aGlsZSAoKytf
X25leHQgIT0gX19sYXN0KQogICAgaWYgKF9fcHJlZCgqX19uZXh0KSkgewogICAgICBzd2FwKCpf
X2ZpcnN0LCAqX19uZXh0KTsKICAgICAgKytfX2ZpcnN0OwogICAgfQoKICByZXR1cm4gX19maXJz
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1ByZWRpY2F0
ZT4KX0JpZGlyZWN0aW9uYWxJdGVyIF9fcGFydGl0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bGFzdCwKCQkJICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAoJCQkgICAgICAgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKHRydWUpCiAgICAg
IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxz
ZSBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGVsc2UKICAg
ICAgICBicmVhazsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKHRydWUpCiAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSBpZiAoIV9f
cHJlZCgqX19sYXN0KSkKICAgICAgICAtLV9fbGFzdDsKICAgICAgZWxzZQogICAgICAgIGJyZWFr
OwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0Zv
cndhcmRJdGVyIHBhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgCQkJICAgICAgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKCQkJICAgICAgX1ByZWRpY2F0ZSAgIF9fcHJlZCkgewogIHJldHVy
biBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29y
eSggX19maXJzdCApICk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
UHJlZGljYXRlLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2lucGxhY2Vfc3RhYmxl
X3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuKSB7
CiAgaWYgKF9fbGVuID09IDEpCiAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbGFzdCA6
IF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICBhZHZhbmNlKF9f
bWlkZGxlLCBfX2xlbiAvIDIpOwogIHJldHVybiByb3RhdGUoX19pbnBsYWNlX3N0YWJsZV9wYXJ0
aXRpb24oX19maXJzdCwgX19taWRkbGUsIF9fcHJlZCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIpLAogICAgICAgICAgICAgICAgX19taWRkbGUs
CiAgICAgICAgICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19s
YXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xlbiAtIF9fbGVuIC8gMikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfUG9pbnRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+
Cl9Gb3J3YXJkSXRlciBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJl
ZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKSAKewogIGlmIChfX2xl
biA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19maXJz
dDsKICAgIF9Qb2ludGVyIF9fcmVzdWx0MiA9IF9fYnVmZmVyOwogICAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHsKICAg
ICAgICAqX19yZXN1bHQxID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDE7CiAgICAgIH0K
ICAgICAgZWxzZSB7CiAgICAgICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAgICAgICsrX19y
ZXN1bHQyOwogICAgICB9CiAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7
CiAgICByZXR1cm4gX19yZXN1bHQxOwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlciBfX21p
ZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgcmV0
dXJuIHJvdGF0ZShfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19maXJzdCwgX19taWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKSwKICAgICAgICAgICAgICAg
ICAgICBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICBfX3N0YWJsZV9wYXJ0aXRpb25fYWRh
cHRpdmUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUsIF9fbGFzdCwgX19wcmVk
LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLCBfX2J1ZmZlciwg
X19idWZmZXJfc2l6ZSkpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfRm9yd2Fy
ZEl0ZXIKX19zdGFibGVfcGFydGl0aW9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs
IF9UcCosIF9EaXN0YW5jZSopCnsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXIsIF9U
cD4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoX19idWYuc2l6ZSgpID4gMCkKICAgIHJl
dHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2J1Zi5y
ZXF1ZXN0ZWRfc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19idWYuYmVnaW4oKSwgX19idWYuc2l6ZSgpKTsKICBlbHNlCiAgICByZXR1cm4gX19pbnBsYWNl
X3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgp
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cmlu
bGluZSBfRm9yd2FyZEl0ZXIgc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQp
IHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19maXJzdDsKICBlbHNlCiAg
ICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCAp
ICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19m
aXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Rw
PgpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1RwIF9fcGl2b3QpIAp7CiAgd2hpbGUgKHRydWUpIHsKICAgIHdoaWxlICgqX19maXJz
dCA8IF9fcGl2b3QpCiAgICAgICsrX19maXJzdDsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKF9f
cGl2b3QgPCAqX19sYXN0KQogICAgICAtLV9fbGFzdDsKICAgIGlmICghKF9fZmlyc3QgPCBfX2xh
c3QpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3Qp
OwogICAgKytfX2ZpcnN0OwogIH0KfSAgICAKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgX191bmd1
YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFy
ZSBfX2NvbXApIAp7CiAgd2hpbGUgKHRydWUpIHsKICAgIHdoaWxlIChfX2NvbXAoKl9fZmlyc3Qs
IF9fcGl2b3QpKQogICAgICArK19fZmlyc3Q7CiAgICAtLV9fbGFzdDsKICAgIHdoaWxlIChfX2Nv
bXAoX19waXZvdCwgKl9fbGFzdCkpCiAgICAgIC0tX19sYXN0OwogICAgaWYgKCEoX19maXJzdCA8
IF9fbGFzdCkpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9f
bGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9Cgpjb25zdCBpbnQgX19zdGxfdGhyZXNob2xkID0g
MTY7CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9p
ZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1Rw
IF9fdmFsKSB7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogIC0tX19uZXh0
OwogIHdoaWxlIChfX3ZhbCA8ICpfX25leHQpIHsKICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAg
X19sYXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpfX2xhc3QgPSBfX3ZhbDsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlPgp2b2lkIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LCBfVHAgX192YWwsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg
X19jb21wKSB7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogIC0tX19uZXh0
OyAgCiAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICpfX2xhc3QgPSAqX19u
ZXh0OwogICAgX19sYXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpfX2xhc3QgPSBf
X3ZhbDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cmlu
bGluZSB2b2lkIF9fbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikg
ewogIF9UcCBfX3ZhbCA9ICpfX2xhc3Q7CiAgaWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsKICAgIGNv
cHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QgKyAxKTsKICAgICpfX2ZpcnN0ID0g
X192YWw7CiAgfQogIGVsc2UKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19sYXN0LCBf
X3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBj
bGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApIHsKICBfVHAgX192YWwgPSAqX19sYXN0
OwogIGlmIChfX2NvbXAoX192YWwsICpfX2ZpcnN0KSkgewogICAgY29weV9iYWNrd2FyZChfX2Zp
cnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwogICAgKl9fZmlyc3QgPSBfX3ZhbDsKICB9CiAgZWxz
ZQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19pbnNlcnRpb25fc29y
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsK
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsgCiAgZm9yIChfUmFuZG9tQWNjZXNzSXRl
ciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX2xpbmVhcl9p
bnNlcnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9faW5zZXJ0
aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2Zp
cnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX2xpbmVhcl9pbnNlcnQoX19maXJz
dCwgX19pLCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFyZGVkX2luc2Vy
dGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKSB7CiAg
Zm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19f
aSkKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVHAoKl9faSkpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2lu
c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIF9fdW5ndWFyZGVk
X2luc2VydGlvbl9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZSggX19maXJz
dCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBj
bGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1RwKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf
X2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fdW5ndWFyZGVkX2xpbmVh
cl9pbnNlcnQoX19pLCBfVHAoKl9faSksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2lu
c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIF9fdW5n
dWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZSgg
X19maXJzdCApICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9fZmluYWxfaW5zZXJ0aW9u
X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBpZiAoX19sYXN0IC0gX19maXJzdCA+
IF9fc3RsX3RocmVzaG9sZCkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0
ICsgX19zdGxfdGhyZXNob2xkKTsKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmly
c3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fbGFzdCk7CiAgfQogIGVsc2UKICAgIF9faW5zZXJ0aW9u
X3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19sYXN0IC0gX19maXJz
dCA+IF9fc3RsX3RocmVzaG9sZCkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2Zp
cnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2NvbXApOwogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9u
X3NvcnQoX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOwogIH0KICBl
bHNlCiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9TaXplPgppbmxpbmUgX1NpemUgX19sZyhfU2l6ZSBfX24pIHsKICBfU2l6
ZSBfX2s7CiAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsKICByZXR1
cm4gX19rOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwg
Y2xhc3MgX1NpemU+CnZvaWQgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAq
LAogICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKewogIHdoaWxlIChf
X2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0aF9saW1p
dCA9PSAwKSB7CiAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAg
ICAgIHJldHVybjsKICAgIH0KICAgIC0tX19kZXB0aF9saW1pdDsKICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fY3V0ID0KICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0g
X19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihf
X2xhc3QgLSAxKSkpKTsKICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCop
IDAsIF9fZGVwdGhfbGltaXQpOwogICAgX19sYXN0ID0gX19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemUsIGNsYXNzIF9D
b21wYXJlPgp2b2lkIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwKICAg
ICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29tcCkK
ewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBpZiAo
X19kZXB0aF9saW1pdCA9PSAwKSB7CiAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3Qs
IF9fbGFzdCwgX19jb21wKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLS1fX2RlcHRoX2xpbWl0
OwogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRp
b24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVk
aWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoo
X19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLCBfX2NvbXApKSwKICAgICAgIF9fY29tcCk7
CiAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xp
bWl0LCBfX2NvbXApOwogICAgX19sYXN0ID0gX19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0
KSB7CiAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgICBfX2xn
KF9fbGFzdCAtIF9fZmlyc3QpICogMik7CiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmly
c3QsIF9fbGFzdCk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2Nv
bXApIHsKICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIF9faW50cm9zb3J0X2xvb3AoX19m
aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3Qg
KSAsCiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyLAogICAg
ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2Zp
cnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgfQp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CnZvaWQgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCkgewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQo
X19maXJzdCwgX19sYXN0KTsKICAgIHJldHVybjsKICB9CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19t
aWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICBfX2lucGxhY2Vfc3Rh
YmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUpOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21p
ZGRsZSwgX19sYXN0KTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnBsYWNlX3N0
YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYg
KF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf
X2xhc3QsIF9fY29tcCk7CiAgICByZXR1cm47CiAgfQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlk
ZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgX19pbnBsYWNlX3N0YWJs
ZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogIF9faW5wbGFjZV9zdGFibGVfc29y
dChfX21pZGRsZSwgX19sYXN0LCBfX2NvbXApOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19m
aXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxl
IC0gX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyMSwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgY2xhc3Mg
X0Rpc3RhbmNlPgp2b2lkIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsIAog
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3Rh
bmNlIF9fc3RlcF9zaXplKSB7CiAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3Np
emU7CgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgIF9fcmVz
dWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAg
ICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAg
ICAgICAgICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAg
fQoKICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3Rl
cF9zaXplKTsKICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3Qg
KyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyMSwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAg
ICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX3NvcnRfbG9v
cChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlcjEgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBf
X3N0ZXBfc2l6ZTsKCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewog
ICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAg
ICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0
ZXAsCiAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICBf
X2NvbXApOwogICAgX19maXJzdCArPSBfX3R3b19zdGVwOwogIH0KICBfX3N0ZXBfc2l6ZSA9IG1p
bihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKCiAgbWVyZ2UoX19m
aXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6
ZSwgX19sYXN0LAogICAgICAgIF9fcmVzdWx0LAogICAgICAgIF9fY29tcCk7Cn0KCmNvbnN0IGlu
dCBfX3N0bF9jaHVua19zaXplID0gNzsKICAgICAgICAKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19jaHVua19pbnNlcnRpb25fc29ydChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSkKewogIHdoaWxl
IChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgX19pbnNlcnRpb25fc29y
dChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplKTsKICAgIF9fZmlyc3QgKz0gX19jaHVu
a19zaXplOwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29t
cGFyZT4Kdm9pZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0Nv
bXBhcmUgX19jb21wKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXpl
KSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUs
IF9fY29tcCk7CiAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICB9CiAgX19pbnNlcnRpb25f
c29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX21lcmdl
X3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSopIHsKICBfRGlz
dGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3Qg
PSBfX2J1ZmZlciArIF9fbGVuOwoKICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfX3N0bF9jaHVu
a19zaXplOwogIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBf
c2l6ZSk7CgogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICBfX21lcmdlX3NvcnRf
bG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSk7CiAgICBfX3N0ZXBf
c2l6ZSAqPSAyOwogICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3Qs
IF9fZmlyc3QsIF9fc3RlcF9zaXplKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgfQp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlz
dGFuY2UsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX3NvcnRfd2l0aF9i
dWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosIF9Db21wYXJlIF9fY29tcCkgewog
IF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX1BvaW50ZXIgX19idWZmZXJf
bGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3Rs
X2NodW5rX3NpemU7CiAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f
c3RlcF9zaXplLCBfX2NvbXApOwoKICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAg
X19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUs
IF9fY29tcCk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgX19tZXJnZV9zb3J0X2xvb3AoX19i
dWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAg
X19zdGVwX3NpemUgKj0gMjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX3N0YWJsZV9zb3J0X2Fk
YXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKSB7CiAgX0Rpc3Rh
bmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6
ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZm
ZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwg
X19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgfQogIGVsc2UgewogICAgX19tZXJn
ZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9EaXN0YW5j
ZSopMCk7CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19i
dWZmZXIsIChfRGlzdGFuY2UqKTApOwogIH0KICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLCAKICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZl
cl9zaXplKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9p
bnRlciwgY2xhc3MgX0Rpc3RhbmNlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9f
c3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVyIF9f
YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np
emUsIF9Db21wYXJlIF9fY29tcCkgewogIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2Zp
cnN0ICsgMSkgLyAyOwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9f
bGVuOwogIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fc3RhYmxlX3NvcnRfYWRh
cHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUo
X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBlbHNlIHsKICAgIF9fbWVyZ2Vfc29ydF93aXRo
X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIChfRGlzdGFuY2UqKTAsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19tZXJnZV9zb3J0X3dpdGhf
YnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgX19tZXJnZV9hZGFwdGl2ZShf
X2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwg
CiAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZl
ciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+Cmlu
bGluZSB2b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1Rw
KiwgX0Rpc3RhbmNlKikgewogIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBf
VHA+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgX19p
bnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgZWxzZSAKICAgIF9fc3RhYmxl
X3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0Nv
bXBhcmU+CmlubGluZSB2b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwgX1RwKiwgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKSB7CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9U
cD4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICBfX2lu
cGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogIGVsc2UgCiAgICBf
X3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyPgppbmxpbmUgdm9pZCBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBfX3N0
YWJsZV9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX192YWx1
ZV90eXBlKCBfX2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSgg
X19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X0NvbXBhcmU+CmlubGluZSB2b2lkIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0Nv
bXBhcmUgX19jb21wKSB7CiAgX19zdGFibGVfc29ydF9hdXgoX19maXJzdCwgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwKICAgICAgICAgICAgICAg
ICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSAsIAogICAgICAgICAgICAgICAgICAgIF9f
Y29tcCk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Rw
Pgp2b2lkIF9fcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwgX1RwKikgewogIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgZm9yIChf
UmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAg
IGlmICgqX19pIDwgKl9fZmlyc3QpIAogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2ksIF9UcCgqX19pKSwKICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmly
c3QgKSApOwogIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCkgewogIF9fcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fdmFs
dWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3BhcnRpYWxfc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29t
cCkgewogIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICBmb3IgKF9SYW5k
b21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgaWYg
KF9fY29tcCgqX19pLCAqX19maXJzdCkpCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRk
bGUsIF9faSwgX1RwKCpfX2kpLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90
eXBlKCBfX2ZpcnN0ICkgKTsKICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+Cmlu
bGluZSB2b2lkIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkg
ewogIF9fcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fdmFsdWVfdHlw
ZSggX19maXJzdCApICwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBf
VHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosIF9UcCopIHsKICBpZiAoX19y
ZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hp
bGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xh
c3QpIHsKICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICsrX19yZXN1bHRf
cmVhbF9sYXN0OwogICAgKytfX2ZpcnN0OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3Qs
IF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBp
ZiAoKl9fZmlyc3QgPCAqX19yZXN1bHRfZmlyc3QpIAogICAgICBfX2FkanVzdF9oZWFwKF9fcmVz
dWx0X2ZpcnN0LCBfRGlzdGFuY2UoMCksCiAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9f
cmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBf
VHAoKl9fZmlyc3QpKTsKICAgICsrX19maXJzdDsKICB9CiAgc29ydF9oZWFwKF9fcmVzdWx0X2Zp
cnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5s
aW5lIF9SYW5kb21BY2Nlc3NJdGVyCnBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jl
c3VsdF9sYXN0KSB7CiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0X2NvcHkoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19kaXN0YW5jZV90eXBlKCBfX3Jlc3VsdF9maXJzdCApICwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlLAog
ICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9f
cGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqLCBfVHAqKSB7CiAgaWYgKF9fcmVzdWx0X2Zp
cnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0OwogIF9SYW5kb21BY2Nl
c3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0OwogIHdoaWxlKF9fZmly
c3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAg
ICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7CiAgICArK19fcmVzdWx0X3JlYWxfbGFz
dDsKICAgICsrX19maXJzdDsKICB9CiAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3Vs
dF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBp
ZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQogICAgICBfX2FkanVzdF9oZWFw
KF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2UoMCksCiAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAg
ICAgICBfVHAoKl9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICArK19f
Zmlyc3Q7CiAgfQogIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0
LCBfX2NvbXApOwogIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+Cmlu
bGluZSBfUmFuZG9tQWNjZXNzSXRlcgpwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19y
ZXN1bHRfbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0X2Nv
cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19kaXN0YW5jZV90eXBlKCBfX3Jlc3VsdF9maXJzdCApICwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9CgogCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX250aF9lbGVtZW50KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKSB7CiAgd2hpbGUgKF9fbGFz
dCAtIF9fZmlyc3QgPiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9f
dW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICBp
ZiAoX19jdXQgPD0gX19udGgpCiAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgIGVsc2UgCiAgICAg
IF9fbGFzdCA9IF9fY3V0OwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgbnRoX2Vs
ZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgs
CiAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIF9f
bnRoX2VsZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0
ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNs
YXNzIF9Db21wYXJlPgp2b2lkIF9fbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29tcCkgewogIHdoaWxlIChfX2xhc3Qg
LSBfX2ZpcnN0ID4gMykgewogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3Vu
Z3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29tcCk7CiAgICBpZiAoX19jdXQgPD0gX19udGgpCiAgICAgIF9fZmly
c3QgPSBfX2N1dDsKICAgIGVsc2UgCiAgICAgIF9fbGFzdCA9IF9fY3V0OwogIH0KICBfX2luc2Vy
dGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgbnRoX2VsZW1lbnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApIHsK
ICBfX250aF9lbGVtZW50KF9fZmlyc3QsIF9fbnRoLCBfX2xhc3QsIF9fdmFsdWVfdHlwZSggX19m
aXJzdCApICwgX19jb21wKTsKfQoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19sb3dlcl9ib3VuZChfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikgCnsKICBfRGlzdGFuY2UgX19s
ZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBf
X2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAg
ICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5j
ZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICBf
X2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAt
IF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNlCiAgICAgIF9fbGVuID0gX19oYWxmOwogIH0KICBy
ZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Rw
PgppbmxpbmUgX0ZvcndhcmRJdGVyIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9UcCYgX192YWwpIHsKICByZXR1cm4gX19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3Qs
IF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCAp
ICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Nv
bXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikK
ewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xl
bik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxl
IChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9f
Zmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fY29tcCgqX19t
aWRkbGUsIF9fdmFsKSkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJz
dDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNlCiAgICAg
IF9fbGVuID0gX19oYWxmOwogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9Gb3J3YXJk
SXRlciBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29t
cGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9f
dmFsLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2Zp
cnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3VwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfVHAmIF9fdmFsLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3
YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19s
ZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9f
aGFsZik7CiAgICBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgIF9fbGVuID0gX19oYWxmOwog
ICAgZWxzZSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAg
ICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICB9CiAgcmV0dXJuIF9fZmlyc3Q7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3
YXJkSXRlciB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKSB7
CiAgcmV0dXJuIF9fdXBwZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwKICAgICAgICAg
ICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfRGlz
dGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3VwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4g
PSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hh
bGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBf
X2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShf
X21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAg
IF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAg
ICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICB9
CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0
dXJuIF9fdXBwZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAg
ICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpwYWlyPF9G
b3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgpfX2VxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAg
IF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3Qs
IF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlk
ZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9
IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxl
LCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgIF9fZmlyc3QgPSBf
X21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0g
MTsKICAgIH0KICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICBfX2xlbiA9IF9f
aGFsZjsKICAgIGVsc2UgewogICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21p
ZGRsZSwgX192YWwpOwogICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgX19yaWdo
dCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsKTsKICAgICAgcmV0dXJu
IHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICB9
CiAgfQogIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBf
X2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxp
bmUgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KZXF1YWxfcmFuZ2UoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpIHsKICBy
ZXR1cm4gX19lcXVhbF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAg
ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5j
ZT4KcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX19lcXVhbF9yYW5nZShfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19s
ZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBf
X2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogIHdoaWxl
IChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9f
Zmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fY29tcCgqX19t
aWRkbGUsIF9fdmFsKSkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJz
dDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNlIGlmIChf
X2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7
CiAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19j
b21wKTsKICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgIF9fcmlnaHQgPSB1cHBl
cl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgcmV0dXJu
IHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICB9
CiAgfQogIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBf
X2ZpcnN0KTsKfSAgICAgICAgICAgCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJk
SXRlcj4KZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIHJl
dHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCwKICAgICAg
ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwp9IAoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgpib29sIGJpbmFyeV9zZWFyY2goX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICBjb25zdCBfVHAmIF9fdmFsKSB7CiAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9f
Zmlyc3QsIF9fbGFzdCwgX192YWwpOwogIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192YWwg
PCAqX19pKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfQ29tcGFyZT4KYm9vbCBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAg
ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIF9Gb3J3YXJkSXRlciBfX2kgPSBs
b3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwogIHJldHVybiBfX2kg
IT0gX19sYXN0ICYmICFfX2NvbXAoX192YWwsICpfX2kpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1
dEl0ZXIgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
LAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHdoaWxlIChfX2Zp
cnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19maXJz
dDIgPCAqX19maXJzdDEpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19f
Zmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg
ICAgKytfX2ZpcnN0MTsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBjb3B5KF9f
Zmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0
cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBtZXJnZShfSW5w
dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApIHsKICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICBpZiAoX19jb21w
KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAg
ICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJu
IGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0
KSk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0
YW5jZT4Kdm9pZCBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlk
ZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5j
ZSBfX2xlbjIpIHsKICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICByZXR1cm47
CiAgaWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAgICBpZiAoKl9fbWlkZGxlIDwgKl9fZmly
c3QpCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICByZXR1cm47CiAgfQog
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogIF9EaXN0YW5jZSBfX2xlbjExID0gMDsK
ICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgX19s
ZW4xMSA9IF9fbGVuMSAvIDI7CiAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAg
IF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1
dCk7CiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICB9CiAg
ZWxzZSB7CiAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0
LCBfX2xlbjIyKTsKICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRk
bGUsICpfX3NlY29uZF9jdXQpOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9f
bGVuMTEpOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlCiAgICA9IHJvdGF0
ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgX19tZXJnZV93aXRob3V0
X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihf
X25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAg
ICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMik7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZv
aWQgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4y
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9f
bGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEgKyBfX2xl
bjIgPT0gMikgewogICAgaWYgKF9fY29tcCgqX19taWRkbGUsICpfX2ZpcnN0KSkKICAgICAgaXRl
cl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIHJldHVybjsKICB9CiAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNv
bmRfY3V0ID0gX19taWRkbGU7CiAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogIF9EaXN0YW5jZSBf
X2xlbjIyID0gMDsKICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICBfX2xlbjExID0gX19sZW4x
IC8gMjsKICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgX19zZWNvbmRfY3V0
ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwog
ICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgfQogIGVsc2Ug
ewogICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19s
ZW4yMik7CiAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAq
X19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQs
IF9fbGVuMTEpOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlCiAgICA9IHJv
dGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgX19tZXJnZV93aXRo
b3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLCBf
X2xlbjIyLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICBfX21lcmdlX3dpdGhv
dXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9f
bGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2NvbXAp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0
aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KX0JpZGlyZWN0aW9uYWxJdGVy
MSBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX21pZGRs
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu
Y2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpIHsKICBfQmlkaXJl
Y3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsKICBpZiAoX19sZW4xID4gX19sZW4yICYmIF9fbGVu
MiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBf
X2xhc3QsIF9fYnVmZmVyKTsKICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9f
bGFzdCk7CiAgICByZXR1cm4gY29weShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2ZpcnN0KTsK
ICB9CiAgZWxzZSBpZiAoX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fYnVmZmVyX2Vu
ZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIGNvcHkoX19taWRkbGUs
IF9fbGFzdCwgX19maXJzdCk7CiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwgX19i
dWZmZXJfZW5kLCBfX2xhc3QpOwogIH0KICBlbHNlCiAgICByZXR1cm4gcm90YXRlKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy
MSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcjM+Cl9CaWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQp
IHsKICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f
Zmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAg
ICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogIC0t
X19sYXN0MTsKICAtLV9fbGFzdDI7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlmICgqX19sYXN0MiA8
ICpfX2xhc3QxKSB7CiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgIGlmIChfX2Zp
cnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCAr
K19fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgfQogICAgZWxzZSB7CiAg
ICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3Qy
KQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVz
dWx0KTsKICAgICAgLS1fX2xhc3QyOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXIzLCBjbGFzcyBfQ29tcGFyZT4KX0JpZGlyZWN0aW9uYWxJdGVy
MyBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIy
IF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQog
ICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICBp
ZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3Qx
LCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgLS1fX2xhc3QxOwogIC0tX19sYXN0MjsKICB3aGlsZSAo
dHJ1ZSkgewogICAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7CiAgICAgICotLV9f
cmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAg
IHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAg
ICAgLS1fX2xhc3QxOwogICAgfQogICAgZWxzZSB7CiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFz
dDI7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2Jh
Y2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QyOwog
ICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rp
c3RhbmNlLCBjbGFzcyBfUG9pbnRlcj4Kdm9pZCBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbWlkZGxlLCAKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19s
ZW4yLAogICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBf
X2J1ZmZlcl9zaXplKSB7CiAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVm
ZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19t
aWRkbGUsIF9fYnVmZmVyKTsKICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlk
ZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogIH0KICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJf
c2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0
LCBfX2J1ZmZlcik7CiAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1
ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogIH0KICBlbHNlIHsKICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19z
ZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICBfRGlz
dGFuY2UgX19sZW4yMiA9IDA7CiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgIF9fbGVu
MTEgPSBfX2xlbjEgLyAyOwogICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAg
ICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3Rf
Y3V0KTsKICAgICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7IAog
ICAgfQogICAgZWxzZSB7CiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICBhZHZhbmNl
KF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQo
X19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAgICBkaXN0YW5jZShfX2ZpcnN0
LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICB9CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19u
ZXdfbWlkZGxlID0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxl
LCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAg
IF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUo
X19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAg
ICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9h
ZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xl
bjExLAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19i
dWZmZXJfc2l6ZSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBj
bGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Qb2ludGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+
CnZvaWQgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgCiAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsIAogICAgICAgICAg
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAg
ICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsCiAgICAgICAg
ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19sZW4xIDw9IF9fbGVuMiAm
JiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0g
Y29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgbWVyZ2UoX19idWZmZXIsIF9f
YnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCwgX19jb21wKTsKICB9CiAgZWxz
ZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2Vu
ZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgX19tZXJnZV9iYWNrd2Fy
ZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNv
bmRfY3V0ID0gX19taWRkbGU7CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICBfRGlzdGFu
Y2UgX19sZW4yMiA9IDA7CiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgIF9fbGVuMTEg
PSBfX2xlbjEgLyAyOwogICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAg
X19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0
LCBfX2NvbXApOwogICAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIy
KTsgICAKICAgIH0KICAgIGVsc2UgewogICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAg
YWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVy
X2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICBk
aXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICB9CiAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJz
dF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9f
bWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4x
MSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUs
IF9fY29tcCk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0
LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAt
IF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogIH0KfQoKdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+
CmlubGluZSB2b2lkIF9faW5wbGFjZV9tZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopIHsKICBfRGlzdGFuY2UgX19sZW4xID0gMDsKICBk
aXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sZW4xKTsKICBfRGlzdGFuY2UgX19sZW4yID0g
MDsKICBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0LCBfX2xlbjIpOwoKICBfVGVtcG9yYXJ5X2J1
ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9UcD4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICBp
ZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0
LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMik7CiAgZWxzZQogICAgX19tZXJnZV9h
ZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAg
ICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNpemUoKSkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsIAogICAgICAg
ICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX19pbnBsYWNl
X21lcmdlX2F1eChfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3Rh
bmNlKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsK
ICBfRGlzdGFuY2UgX19sZW4xID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSwgX19s
ZW4xKTsKICBfRGlzdGFuY2UgX19sZW4yID0gMDsKICBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0
LCBfX2xlbjIpOwoKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9UcD4g
X19idWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgX19t
ZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9f
bGVuMiwgX19jb21wKTsKICBlbHNlCiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfX2J1Zi5i
ZWdpbigpLCBfRGlzdGFuY2UoX19idWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgX19j
b21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4KaW5saW5lIHZvaWQg
aW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkgewogIGlmIChfX2ZpcnN0ID09IF9f
bWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgIHJldHVybjsKICBfX2lucGxhY2VfbWVy
Z2VfYXV4KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBf
X3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxp
bmUgdm9pZCBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2Nv
bXApIHsKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAg
ICByZXR1cm47CiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLCBfX2Rpc3Rh
bmNlX3R5cGUoIF9fZmlyc3QgKSAsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgog
CiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpi
b29sIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKSB7
CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAg
IGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGVsc2Ug
aWYoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSAKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UKICAg
ICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNz
IF9Db21wYXJlPgpib29sIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy
MiBfX2xhc3QyLCBfQ29tcGFyZSBfX2NvbXApIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2Zp
cnN0MSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGVsc2UgaWYoX19jb21wKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkgCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlCiAgICAgICsrX19maXJzdDEs
ICsrX19maXJzdDI7CgogIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4K
X091dHB1dEl0ZXIgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1
dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp
IHsKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwg
Kl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0
MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsr
X19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICBy
ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y
ZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy
MiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0
ZXIgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBh
cmUgX19jb21wKSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g
X19sYXN0MikgewogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAg
Kl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgZWxzZSBp
ZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1bHQgPSAqX19m
aXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQog
ICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHko
X19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBz
ZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5w
dXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0KSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g
X19sYXN0MikgCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSAKICAgICAgKytfX2ZpcnN0
MTsKICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgCiAgICAgICsrX19maXJzdDI7
CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3Qx
OwogICAgICArK19fZmlyc3QyOwogICAgICArK19fcmVzdWx0OwogICAgfQogIHJldHVybiBfX3Jl
c3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwg
Y2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIg
c2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19m
aXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0Miwg
Kl9fZmlyc3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICAqX19yZXN1bHQg
PSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsr
X19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0
ZXIgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5w
dXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDIpCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAg
IGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVs
c2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBj
b3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLCAKICAgICAgICAg
IGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKSB7CiAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlm
IChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2Ug
aWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICsrX19maXJzdDI7CiAgICBl
bHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4g
Y29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0
ZXIgCnNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQpIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0
MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAg
ICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgICArK19fcmVzdWx0OwogICAgfQog
ICAgZWxzZSB7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0
dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVz
dWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIs
IGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVy
IApzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7
CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAg
IGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVs
c2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAg
ZWxzZSB7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJu
IGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0
KSk7Cn0KCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIG1h
eF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KSB7CiAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19y
ZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSAKICAgIGlmICgq
X19yZXN1bHQgPCAqX19maXJzdCkKICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHJldHVybiBf
X3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0NvbXBhcmU+
Cl9Gb3J3YXJkSXRlciBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkg
ewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVy
IF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkgCiAgICBp
ZiAoX19jb21wKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0
dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0
ZXIgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qp
IHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRl
ciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpIAogICAg
aWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0KQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0
dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQ29t
cGFyZT4KX0ZvcndhcmRJdGVyIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j
b21wKSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2Fy
ZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSAK
ICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdCkpCiAgICAgIF9fcmVzdWx0ID0gX19m
aXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlcj4KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0Owog
ICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9f
bGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9
IF9faTsKICAgIC0tX19pOwogICAgaWYgKCpfX2kgPCAqX19paSkgewogICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAoISgqX19pIDwgKi0tX19qKSkKICAg
ICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9f
bGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7
CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAg
fQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBh
cmU+CmJvb2wgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFz
dCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7Oykg
ewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmIChf
X2NvbXAoKl9faSwgKl9faWkpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xh
c3Q7CiAgICAgIHdoaWxlICghX19jb21wKCpfX2ksICotLV9faikpCiAgICAgICAge30KICAgICAg
aXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICBy
ZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNl
KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkgewogIGlm
IChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVy
biBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7OykgewogICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmICgqX19paSA8ICpfX2kp
IHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCEo
Ki0tX19qIDwgKl9faSkpCiAgICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAg
ICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlm
IChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAg
IHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25h
bEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpib29sIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBy
ZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7
CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0Owog
IC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwog
ICAgLS1fX2k7CiAgICBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkgewogICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAoIV9fY29tcCgqLS1fX2osICpfX2kp
KQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19p
aSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmly
c3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7
CiAgICB9CiAgfQp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Zvcndh
cmRJdGVyPgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lu
cHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
Zmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MikKewogIGZvciAoIDsgX19maXJzdDEgIT0gX19s
YXN0MTsgKytfX2ZpcnN0MSkgCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0
MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICBpZiAoKl9fZmlyc3QxID09ICpf
X2l0ZXIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogIHJldHVybiBfX2xhc3QxOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5
UHJlZGljYXRlPgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwg
X0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
IF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx
OyArK19fZmlyc3QxKSAKICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBf
X2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAq
X19pdGVyKSkKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgcmV0dXJuIF9fbGFzdDE7Cn0KCgog
CiAKIAogCgogCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0
ZXIyPgpfRm9yd2FyZEl0ZXIxIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zv
cndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
MiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9f
Zmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9Gb3J3
YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgd2hpbGUgKDEpIHsKICAgICAgX0Zvcndh
cmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwg
X19maXJzdDIsIF9fbGFzdDIpOwogICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAg
ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICBlbHNlIHsKICAgICAgICBfX3Jlc3VsdCA9IF9f
bmV3X3Jlc3VsdDsKICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICArK19f
Zmlyc3QxOwogICAgICB9CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
MSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+
Cl9Gb3J3YXJkSXRlcjEgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2Fy
ZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9f
Zmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBm
b3J3YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKewogIGlmIChfX2ZpcnN0MiA9PSBf
X2xhc3QyKQogICAgcmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9f
cmVzdWx0ID0gX19sYXN0MTsKICAgIHdoaWxlICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19u
ZXdfcmVzdWx0CiAgICAgICAgPSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBf
X2xhc3QyLCBfX2NvbXApOwogICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAg
ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICBlbHNlIHsKICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3
X3Jlc3VsdDsKICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICArK19fZmly
c3QxOwogICAgICB9CiAgICB9CiAgfQp9CgogCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjI+Cl9CaWRpcmVjdGlvbmFsSXRlcjEK
X19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0
b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewogIHR5cGVkZWYgcmV2ZXJzZV9p
dGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgdHlwZWRlZiByZXZlcnNl
X2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgX1Jldkl0ZXIxIF9f
cmxhc3QxKF9fZmlyc3QxKTsKICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogIF9SZXZJ
dGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIp
OwoKICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgcmV0dXJuIF9fbGFzdDE7CiAgZWxz
ZSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsK
ICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAg
cmV0dXJuIF9fcmVzdWx0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl
cjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJl
ZGljYXRlPgpfQmlkaXJlY3Rpb25hbEl0ZXIxCl9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVy
MSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAg
ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcsIAogICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CiAgdHlwZWRlZiBy
ZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICB0eXBlZGVm
IHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICBfUmV2
SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7
CiAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBf
X3JsYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CgogIGlmIChf
X3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgYWR2YW5j
ZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICByZXR1cm4gX19y
ZXN1bHQ7CiAgfQp9CgoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9G
b3J3YXJkSXRlcjI+CmlubGluZSBfRm9yd2FyZEl0ZXIxIApmaW5kX2VuZChfRm9yd2FyZEl0ZXIx
IF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsIAogICAgICAgICBfRm9yd2FyZEl0ZXIy
IF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCnsKICByZXR1cm4gX19maW5kX2VuZChf
X2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg
X19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdDEgKSAsCiAgICAgICAgICAgICAgICAgICAgX19p
dGVyYXRvcl9jYXRlZ29yeSggX19maXJzdDIgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJl
ZGljYXRlPgppbmxpbmUgX0ZvcndhcmRJdGVyMSAKZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2Zp
cnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLCAKICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2Zp
cnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f
Y29tcCkKewogIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Miwg
X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0
MSApICwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0MiAp
ICwKICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgogCiAKIAoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmJvb2wgX19pc19oZWFwKF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFuY2UgX19wYXJl
bnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwgX19uOyArK19f
Y2hpbGQpIHsKICAgIGlmIChfX2ZpcnN0W19fcGFyZW50XSA8IF9fZmlyc3RbX19jaGlsZF0pIAog
ICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoKF9fY2hpbGQgJiAxKSA9PSAwKQogICAgICArK19f
cGFyZW50OwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CmJvb2wg
X19pc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9TdHJpY3RXZWFrT3JkZXJpbmcg
X19jb21wLAogICAgICAgICAgICAgICBfRGlzdGFuY2UgX19uKQp7CiAgX0Rpc3RhbmNlIF9fcGFy
ZW50ID0gMDsKICBmb3IgKF9EaXN0YW5jZSBfX2NoaWxkID0gMTsgX19jaGlsZCA8IF9fbjsgKytf
X2NoaWxkKSB7CiAgICBpZiAoX19jb21wKF9fZmlyc3RbX19wYXJlbnRdLCBfX2ZpcnN0W19fY2hp
bGRdKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKChfX2NoaWxkICYgMSkgPT0gMCkKICAg
ICAgKytfX3BhcmVudDsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlcj4KaW5saW5lIGJvb2wgaXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKICByZXR1cm4gX19pc19oZWFwKF9fZmly
c3QsIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgppbmxpbmUgYm9vbCBpc19oZWFwKF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKewogIHJldHVybiBfX2lzX2hl
YXAoX19maXJzdCwgX19jb21wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKIAogCiAKCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXI+CmJvb2wgaXNfc29ydGVkKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0
dXJuIHRydWU7CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIGZvciAoKytfX25l
eHQ7IF9fbmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7CiAgICBp
ZiAoKl9fbmV4dCA8ICpfX2ZpcnN0KQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoKICByZXR1cm4g
dHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1N0cmljdFdlYWtP
cmRlcmluZz4KYm9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CiAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIHRydWU7CgogIF9Gb3J3YXJkSXRlciBf
X25leHQgPSBfX2ZpcnN0OwogIGZvciAoKytfX25leHQ7IF9fbmV4dCAhPSBfX2xhc3Q7IF9fZmly
c3QgPSBfX25leHQsICsrX19uZXh0KSB7CiAgICBpZiAoX19jb21wKCpfX25leHQsICpfX2ZpcnN0
KSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgcmV0dXJuIHRydWU7Cn0KCgoKCgogCgoKCiAK
IAogCiMgMzQgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxnb3JpdGhtIiAyIDMKCgoKCiAKIAogCiMgMSAibWFp
bi5jcHAiIDIKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1
LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9mdW5jdGlvbmFsIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMv
aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQyICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3
YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgojIDE5ICIvdXNyL2xpYi9nY2Mt
bGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L2Z1bmN0aW9uYWwiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxp
bnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9mdW5jdGlvbi5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Fy
ZywgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9Bcmcg
YXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgYmluYXJ5
X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRl
ZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5
cGU7Cn07ICAgICAgCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm
IF9feSkgY29uc3QgeyByZXR1cm4gX194IC0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgbXVsdGlwbGllcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+
IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0
IHsgcmV0dXJuIF9feCAqIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRp
dmlkZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJh
dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg
LyBfX3k7IH0KfTsKCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IGlubGluZSBfVHAgaWRlbnRpdHlf
ZWxlbWVudChwbHVzPF9UcD4pIHsKICByZXR1cm4gX1RwKDApOwp9CnRlbXBsYXRlIDxjbGFzcyBf
VHA+IGlubGluZSBfVHAgaWRlbnRpdHlfZWxlbWVudChtdWx0aXBsaWVzPF9UcD4pIHsKICByZXR1
cm4gX1RwKDEpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IAp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJSBfX3k7IH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248X1RwLF9UcD4gCnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyBy
ZXR1cm4gLV9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigp
KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID09IF9f
eTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPiAKewogIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194
LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U
cCxib29sPiAKewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBf
X3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9v
bD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv
bnN0IHsgcmV0dXJuIF9feCA+PSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBsZXNzX2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAg
Ym9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyBy
ZXR1cm4gX194IDw9IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2lj
YWxfYW5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf
X3ggJiYgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9vciA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigp
KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8IF9f
eTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg
X194KSBjb25zdCB7IHJldHVybiAhX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0
ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUg
X1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0
ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNh
dGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5h
bWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIV9N
X3ByZWQoX194KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIHVu
YXJ5X25lZ2F0ZTxfUHJlZGljYXRlPiAKbm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsK
ICByZXR1cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUHJlZGljYXRlPiAKY2xhc3MgYmluYXJ5X25lZ2F0ZSAKICA6IHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50
X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9Q
cmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3Qg
X1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25z
dCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsIAogICAgICAg
ICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlw
ZSYgX195KSBjb25zdAogIHsKICAgIHJldHVybiAhX01fcHJlZChfX3gsIF9feSk7IAogIH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgYmluYXJ5X25lZ2F0ZTxfUHJlZGlj
YXRlPiAKbm90Mihjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5X25l
Z2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4g
CmNsYXNzIGJpbmRlcjFzdAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVy
YXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9u
IG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1
YmxpYzoKICBiaW5kZXIxc3QoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25z
dCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDog
b3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBl
CiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRf
dHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7IAogIH0KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09w
ZXJhdGlvbj4gCmJpbmQxc3QoY29uc3QgX09wZXJhdGlvbiYgX19vcGVyLCBjb25zdCBfVHAmIF9f
eCkgCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUg
X0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9PcGVyYXRpb24+KF9fb3BlciwgX0FyZzFf
dHlwZShfX3gpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+IApjbGFzcyBiaW5kZXIy
bmQKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9h
cmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRp
b246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1l
IF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVy
Mm5kKGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkgCiAgICAgIDogb3AoX194KSwgdmFs
dWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3Io
KShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNv
bnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsgCiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPiAKYmlu
ZDJuZChjb25zdCBfT3BlcmF0aW9uJiBfX29wZXIsIGNvbnN0IF9UcCYgX194KSAKewogIHR5cGVk
ZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsK
ICByZXR1cm4gYmluZGVyMm5kPF9PcGVyYXRpb24+KF9fb3BlciwgX0FyZzJfdHlwZShfX3gpKTsK
fQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KY2xh
c3MgdW5hcnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVy
YXRpb24yOjphcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1l
IF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZT4gCnsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24xIF9f
b3AxOwogIF9PcGVyYXRpb24yIF9fb3AyOwpwdWJsaWM6CiAgdW5hcnlfY29tcG9zZShjb25zdCBf
T3BlcmF0aW9uMSYgX194LCBjb25zdCBfT3BlcmF0aW9uMiYgX195KSAKICAgIDogX19vcDEoX194
KSwgX19vcDIoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQogIG9w
ZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUmIF9feCkg
Y29uc3QgewogICAgcmV0dXJuIF9fb3AxKF9fb3AyKF9feCkpOwogIH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjI+CmlubGluZSB1bmFyeV9jb21wb3Nl
PF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPiAKY29tcG9zZTEoY29uc3QgX09wZXJhdGlvbjEmIF9f
b3AxLCBjb25zdCBfT3BlcmF0aW9uMiYgX19vcDIpCnsKICByZXR1cm4gdW5hcnlfY29tcG9zZTxf
T3BlcmF0aW9uMSxfT3BlcmF0aW9uMj4oX19vcDEsIF9fb3AyKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmNsYXNz
IGJpbmFyeV9jb21wb3NlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJh
dGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUg
X09wZXJhdGlvbjE6OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uMSBfTV9v
cDE7CiAgX09wZXJhdGlvbjIgX01fb3AyOwogIF9PcGVyYXRpb24zIF9NX29wMzsKcHVibGljOgog
IGJpbmFyeV9jb21wb3NlKGNvbnN0IF9PcGVyYXRpb24xJiBfX3gsIGNvbnN0IF9PcGVyYXRpb24y
JiBfX3ksIAogICAgICAgICAgICAgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBfX3opIAogICAgOiBf
TV9vcDEoX194KSwgX01fb3AyKF9feSksIF9NX29wMyhfX3opIHsgfQogIHR5cGVuYW1lIF9PcGVy
YXRpb24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlv
bjI6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX29wMShfTV9vcDIo
X194KSwgX01fb3AzKF9feCkpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwg
Y2xhc3MgX09wZXJhdGlvbjIsIGNsYXNzIF9PcGVyYXRpb24zPgppbmxpbmUgYmluYXJ5X2NvbXBv
c2U8X09wZXJhdGlvbjEsIF9PcGVyYXRpb24yLCBfT3BlcmF0aW9uMz4gCmNvbXBvc2UyKGNvbnN0
IF9PcGVyYXRpb24xJiBfX29wMSwgY29uc3QgX09wZXJhdGlvbjImIF9fb3AyLCAKICAgICAgICAg
Y29uc3QgX09wZXJhdGlvbjMmIF9fb3AzKQp7CiAgcmV0dXJuIGJpbmFyeV9jb21wb3NlPF9PcGVy
YXRpb24xLF9PcGVyYXRpb24yLF9PcGVyYXRpb24zPgogICAgKF9fb3AxLCBfX29wMiwgX19vcDMp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90
b191bmFyeV9mdW5jdGlvbiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiB7
CnByb3RlY3RlZDoKICBfUmVzdWx0ICgqX01fcHRyKShfQXJnKTsKcHVibGljOgogIHBvaW50ZXJf
dG9fdW5hcnlfZnVuY3Rpb24oKSB7fQogIGV4cGxpY2l0IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rp
b24oX1Jlc3VsdCAoKl9feCkoX0FyZykpIDogX01fcHRyKF9feCkge30KICBfUmVzdWx0IG9wZXJh
dG9yKCkoX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3B0cihfX3gpOyB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVu
Y3Rpb248X0FyZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKewogIHJl
dHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBv
aW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uIDogCiAgcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJn
MSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9Bcmcx
LCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkge30KICAg
IGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9Bcmcx
LCBfQXJnMikpIAogICAgICA6IF9NX3B0cihfX3gpIHt9CiAgICBfUmVzdWx0IG9wZXJhdG9yKCko
X0FyZzEgX194LCBfQXJnMiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9NX3B0cihfX3gsIF9f
eSk7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBf
UmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jl
c3VsdD4gCnB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgewogIHJldHVybiBw
b2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PihfX3gpOwp9Cgog
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfSWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVu
Y3Rpb248X1RwLF9UcD4gewogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkg
Y29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgaWRl
bnRpdHkgOiBwdWJsaWMgX0lkZW50aXR5PF9UcD4ge307CgogCnRlbXBsYXRlIDxjbGFzcyBfUGFp
cj4Kc3RydWN0IF9TZWxlY3Qxc3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVu
YW1lIF9QYWlyOjpmaXJzdF90eXBlPiB7CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5
cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5m
aXJzdDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDog
cHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+
CnsKICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29uc3Qg
X1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9QYWlyPiBzdHJ1Y3Qgc2VsZWN0MXN0IDogcHVibGljIF9TZWxlY3Qxc3Q8X1Bh
aXI+IHt9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0cnVjdCBzZWxlY3QybmQgOiBwdWJsaWMg
X1NlbGVjdDJuZDxfUGFpcj4ge307CgogCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0Fy
ZzI+CnN0cnVjdCBfUHJvamVjdDFzdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsIF9B
cmcyLCBfQXJnMT4gewogIF9BcmcxIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmIF9feCwgY29uc3Qg
X0FyZzImKSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwg
Y2xhc3MgX0FyZzI+CnN0cnVjdCBfUHJvamVjdDJuZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X0FyZzEsIF9BcmcyLCBfQXJnMj4gewogIF9BcmcyIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmLCBj
b25zdCBfQXJnMiYgX195KSBjb25zdCB7IHJldHVybiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfQXJnMSwgY2xhc3MgX0FyZzI+IApzdHJ1Y3QgcHJvamVjdDFzdCA6IHB1YmxpYyBfUHJvamVj
dDFzdDxfQXJnMSwgX0FyZzI+IHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJn
Mj4Kc3RydWN0IHByb2plY3QybmQgOiBwdWJsaWMgX1Byb2plY3QybmQ8X0FyZzEsIF9BcmcyPiB7
fTsKCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgY29uc3RhbnRfdm9pZF9m
dW4KewogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKICByZXN1bHRfdHlwZSBfX3ZhbDsK
ICBjb25zdGFudF92b2lkX2Z1bihjb25zdCByZXN1bHRfdHlwZSYgX192KSA6IF9fdmFsKF9fdikg
e30KICBjb25zdCByZXN1bHRfdHlwZSYgb3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0dXJuIF9fdmFs
OyB9Cn07ICAKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwgY2xhc3MgX0FyZ3VtZW50ID0gX1Jl
c3VsdD4KCgoKc3RydWN0IGNvbnN0YW50X3VuYXJ5X2Z1biA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv
bjxfQXJndW1lbnQsIF9SZXN1bHQ+IHsKICBfUmVzdWx0IF9NX3ZhbDsKICBjb25zdGFudF91bmFy
eV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgX1Jlc3Vs
dCYgb3BlcmF0b3IoKShjb25zdCBfQXJndW1lbnQmKSBjb25zdCB7IHJldHVybiBfTV92YWw7IH0K
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwgY2xhc3MgX0FyZzEgPSBfUmVzdWx0LCBjbGFz
cyBfQXJnMiA9IF9BcmcxPgoKCgpzdHJ1Y3QgY29uc3RhbnRfYmluYXJ5X2Z1biA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X0FyZzEsIF9BcmcyLCBfUmVzdWx0PiB7CiAgX1Jlc3VsdCBfTV92YWw7
CiAgY29uc3RhbnRfYmluYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikg
e30KICBjb25zdCBfUmVzdWx0JiBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzIm
KSBjb25zdCB7CiAgICByZXR1cm4gX01fdmFsOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVz
dWx0PgppbmxpbmUgY29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4gY29uc3RhbnQwKGNvbnN0IF9S
ZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+KF9fdmFs
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF91bmFyeV9mdW48
X1Jlc3VsdCxfUmVzdWx0PiBjb25zdGFudDEoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1
cm4gY29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4oX192YWwpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCxfUmVz
dWx0LF9SZXN1bHQ+IApjb25zdGFudDIoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4g
Y29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4oX192YWwpOwp9Cgog
CiAKY2xhc3Mgc3VidHJhY3RpdmVfcm5nIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHVuc2lnbmVk
IGludCwgdW5zaWduZWQgaW50PiB7CnByaXZhdGU6CiAgdW5zaWduZWQgaW50IF9NX3RhYmxlWzU1
XTsKICBzaXplX3QgX01faW5kZXgxOwogIHNpemVfdCBfTV9pbmRleDI7CnB1YmxpYzoKICB1bnNp
Z25lZCBpbnQgb3BlcmF0b3IoKSh1bnNpZ25lZCBpbnQgX19saW1pdCkgewogICAgX01faW5kZXgx
ID0gKF9NX2luZGV4MSArIDEpICUgNTU7CiAgICBfTV9pbmRleDIgPSAoX01faW5kZXgyICsgMSkg
JSA1NTsKICAgIF9NX3RhYmxlW19NX2luZGV4MV0gPSBfTV90YWJsZVtfTV9pbmRleDFdIC0gX01f
dGFibGVbX01faW5kZXgyXTsKICAgIHJldHVybiBfTV90YWJsZVtfTV9pbmRleDFdICUgX19saW1p
dDsKICB9CgogIHZvaWQgX01faW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgX19zZWVkKQogIHsKICAg
IHVuc2lnbmVkIGludCBfX2sgPSAxOwogICAgX01fdGFibGVbNTRdID0gX19zZWVkOwogICAgc2l6
ZV90IF9faTsKICAgIGZvciAoX19pID0gMDsgX19pIDwgNTQ7IF9faSsrKSB7CiAgICAgICAgc2l6
ZV90IF9faWkgPSAoMjEgKiAoX19pICsgMSkgJSA1NSkgLSAxOwogICAgICAgIF9NX3RhYmxlW19f
aWldID0gX19rOwogICAgICAgIF9fayA9IF9fc2VlZCAtIF9fazsKICAgICAgICBfX3NlZWQgPSBf
TV90YWJsZVtfX2lpXTsKICAgIH0KICAgIGZvciAoaW50IF9fbG9vcCA9IDA7IF9fbG9vcCA8IDQ7
IF9fbG9vcCsrKSB7CiAgICAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NTsgX19pKyspCiAgICAg
ICAgICAgIF9NX3RhYmxlW19faV0gPSBfTV90YWJsZVtfX2ldIC0gX01fdGFibGVbKDEgKyBfX2kg
KyAzMCkgJSA1NV07CiAgICB9CiAgICBfTV9pbmRleDEgPSAwOwogICAgX01faW5kZXgyID0gMzE7
CiAgfQoKICBzdWJ0cmFjdGl2ZV9ybmcodW5zaWduZWQgaW50IF9fc2VlZCkgeyBfTV9pbml0aWFs
aXplKF9fc2VlZCk7IH0KICBzdWJ0cmFjdGl2ZV9ybmcoKSB7IF9NX2luaXRpYWxpemUoMTYxODAz
Mzk4dSk7IH0KfTsKCgogCgogCiAKIAogCiAKIAogCgogCiAKIAogCiAKCiAKIAogCiAKIAoKCnRl
bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdCA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdChf
UmV0IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1Rw
KiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAo
X1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNz
IGNvbnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgp
IGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3Ap
IGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoq
X01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFz
cyBtZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1Ymxp
YzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihf
X3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4q
X01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1f
ZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9S
ZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZiko
KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90IDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQg
bWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1Jl
dCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9N
X2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9m
dW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1
YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9Bcmcp
IGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3As
IF9BcmcgX194KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0
ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1f
ZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1Jl
dCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01f
ZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1
bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGlj
OgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9Bcmcp
IGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3Is
IF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAg
X1JldCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CmNsYXNzIG1lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCos
dm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkp
IDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyAoX19w
LT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0
X21lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2
b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0K
cHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9U
cDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikg
Y29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsK
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwg
X1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGlj
aXQgY29uc3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2Yo
X19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4q
X01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90PHZvaWQsIF9UcCwg
X0FyZz4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoK
ICBleHBsaWNpdCBtZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19w
Zikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3At
PipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZv
aWQsIF9UcCwgX0FyZz4gCiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0Fy
Zyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KHZvaWQgKF9UcDo6
Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29u
c3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZh
dGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxp
Y2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikg
e30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9N
X2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZv
aWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4g
ewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19w
ZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBf
VHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgog
IHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCgogCiAKIAogCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVu
KF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7
IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVu
X3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJu
IGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs
IGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9S
ZXQgKF9UcDo6Kl9fZikoKSkgCiAgeyByZXR1cm4gbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19m
KTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9m
dW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkK
ICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxf
UmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4g
bWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxf
QXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29u
c3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
dCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAs
X0FyZz4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1f
ZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxf
VHAsX0FyZz4KbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJl
dHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfdDxf
UmV0LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJu
IG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs
IGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAs
X0FyZz4gbWVtX2Z1bjEoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBj
b25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9U
cCxfQXJnPiBtZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBt
ZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
dCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1Jl
dCxfVHAsX0FyZz4KbWVtX2Z1bjFfcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAg
eyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKIAoK
CgogCiAKIAojIDIwICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUu
My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2Z1bmN0aW9uYWwiIDIgMwoKCgoKIAogCiAKIyAy
ICJtYWluLmNwcCIgMgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4
LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2xpc3QiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxp
bnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAxIDMKIAoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoKCgoKCgoKCgoKCgoK
IyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMKIyAzNDIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGlu
dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgNTMgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1zbGFja3dhcmUtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Fs
bG9jLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCiMgMzMgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCgoKCgoKCgoKCiAK
CgoKCiMgNjMgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCmV4dGVybiAiQyIgeyAKCiAKZXh0
ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25z
dCBjaGFyICpfX2ZpbGUsCgkJCSAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hhciAq
X19mdW5jdGlvbikKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp
OwoKIApleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVtLCBfX2Nv
bnN0IGNoYXIgKl9fZmlsZSwKCQkJCSAgdW5zaWduZWQgaW50IF9fbGluZSwKCQkJCSAgX19jb25z
dCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19ub3Jl
dHVybl9fKSk7CgoKIAoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0
aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkgIF9fYXR0
cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgp9IAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCgojIDU2ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKCgoKCgoKCgoKCgoKICAg
ICAKICAgICAKICAgICAKIyAxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAxIDMKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgojIDUxICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAzCgoKIyA2MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDcyICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAzCgoKCiMgODQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA5NiAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKIyAxMTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoK
CiMgMzY0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgMjkgIi91c3IvaW5jbHVkZS9zY2hl
ZC5oIiAyIDMKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCiAKc3RydWN0IHNjaGVkX3Bh
cmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKCmV4dGVybiAiQyIgeyAKCiAK
CmV4dGVybiBpbnQgY2xvbmUgKGludCAoKl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hp
bGRfc3RhY2ssCgkJICBpbnQgX19mbGFncywgdm9pZCAqX19hcmcpIHRocm93ICgpIDsKCgp9IAoK
CgojIDczICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCgojIDMyICIvdXNyL2luY2x1ZGUv
c2NoZWQuaCIgMiAzCgogCgoKCmV4dGVybiAiQyIgeyAKCiAKZXh0ZXJuIGludCBzY2hlZF9zZXRw
YXJhbSAoX19waWRfdCBfX3BpZCwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0p
CiAgICAgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9f
cGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpIDsKCiAKZXh0ZXJuIGlu
dCBzY2hlZF9zZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKCQkJICAg
ICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKSA7CgogCmV4
dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKSA7Cgog
CmV4dGVybiBpbnQgc2NoZWRfeWllbGQgKHZvaWQpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBz
Y2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpIDsKCiAKZXh0
ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdvcml0aG0pIHRocm93ICgp
IDsKCiAKZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQsIHN0
cnVjdCB0aW1lc3BlYyAqX190KSB0aHJvdyAoKSA7Cgp9IAoKCiMgMjAgIi91c3IvaW5jbHVkZS9w
dGhyZWFkLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCgoKCiAKCgojIDEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoK
CgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1
LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
IAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CiAKCgoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51
eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIg
MwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFj
a3dhcmUtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCiMgMzggIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCiAKCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoK
IAoKCgoKCiAKCgpleHRlcm4gbG9uZyBpbnQgX19zeXNjb25mIChpbnQpOwoKCgoKIAoKIAoKIAoK
CiAKCgoKCgoKIyA3MyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCgojIDQyICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAyIDMKCgogCgoKCgoKCgoKCgoKCgogCnR5cGVkZWYgX19jbG9ja190IGNs
b2NrX3Q7CgoKCgojIDcyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgODQgIi91c3IvaW5j
bHVkZS90aW1lLmgiIDMKCgoKIyA5NiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKIyAxMTIg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKCgogCnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsJ
CQkgCiAgaW50IHRtX21pbjsJCQkgCiAgaW50IHRtX2hvdXI7CQkJIAogIGludCB0bV9tZGF5OwkJ
CSAKICBpbnQgdG1fbW9uOwkJCSAKICBpbnQgdG1feWVhcjsJCQkgCiAgaW50IHRtX3dkYXk7CQkJ
IAogIGludCB0bV95ZGF5OwkJCSAKICBpbnQgdG1faXNkc3Q7CQkJIAoKCiAgbG9uZyBpbnQgdG1f
Z210b2ZmOwkJIAogIF9fY29uc3QgY2hhciAqdG1fem9uZTsJIAoKCgoKfTsKCgoKIApzdHJ1Y3Qg
aXRpbWVyc3BlYwogIHsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgIHN0cnVj
dCB0aW1lc3BlYyBpdF92YWx1ZTsKICB9OwoKIApzdHJ1Y3Qgc2lnZXZlbnQ7CgoKCgoKCgoKCgoK
IAoKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIHRocm93ICgpIDsKCiAKZXh0ZXJuIHRpbWVf
dCB0aW1lICh0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGRvdWJsZSBkaWZm
dGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQogICAgIHRocm93ICgpICBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCmV4dGVybiB0aW1lX3QgbWt0aW1lIChzdHJ1Y3Qg
dG0gKl9fdHApIHRocm93ICgpIDsKCgogCgoKZXh0ZXJuIHNpemVfdCBzdHJmdGltZSAoY2hhciAq
X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUsCgkJCV9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwKCQkJX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhy
b3cgKCkgOwoKCgoKCgoKCgoKIAoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRp
bWVfdCAqX190aW1lcikgdGhyb3cgKCkgOwoKIAoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1l
IChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCkgOwoKCiAKCmV4dGVybiBzdHJ1Y3Qg
dG0gKmdtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAoJCQkgICAg
c3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpIDsKCiAKCmV4dGVybiBzdHJ1Y3Qg
dG0gKmxvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAoJCQkg
ICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpIDsKCgogCgpleHRlcm4g
Y2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpIDsKCiAKZXh0
ZXJuIGNoYXIgKmN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCkgOwoKCiAK
CiAKCmV4dGVybiBjaGFyICphc2N0aW1lX3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0
IF9fdHAsCgkJCWNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGNo
YXIgKmN0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCgkJICAgICAg
Y2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCkgOwoKCgogCmV4dGVybiBjaGFyICpfX3R6
bmFtZVsyXTsJIApleHRlcm4gaW50IF9fZGF5bGlnaHQ7CQkgCmV4dGVybiBsb25nIGludCBfX3Rp
bWV6b25lOwkgCgoKCiAKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCiAKCmV4dGVybiB2b2lkIHR6
c2V0ICh2b2lkKSB0aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25n
IGludCB0aW1lem9uZTsKCgoKIAoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3QgKl9f
d2hlbikgdGhyb3cgKCkgOwoKCgogCgoKCgoKCiAKCgogCmV4dGVybiB0aW1lX3QgdGltZWdtIChz
dHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpIDsKCiAKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0
cnVjdCB0bSAqX190cCkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IGR5c2l6ZSAoaW50IF9feWVh
cikgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgogCmV4dGVybiBp
bnQgbmFub3NsZWVwIChfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwK
CQkgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAoKSA7CgoKIApleHRl
cm4gaW50IGNsb2NrX2dldHJlcyAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3Bl
YyAqX19yZXMpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lk
X3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3RwKSB0aHJvdyAoKSA7CgogCmV4dGVy
biBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qgc3RydWN0
IHRpbWVzcGVjICpfX3RwKQogICAgIHRocm93ICgpIDsKCiMgMzA1ICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAzCgoKCiAKZXh0ZXJuIGludCB0aW1lcl9jcmVhdGUgKGNsb2NraWRfdCBfX2Nsb2NrX2lk
LAoJCQkgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9fZXZwLAoJCQkgdGltZXJfdCAqX19y
ZXN0cmljdCBfX3RpbWVyaWQpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUg
KHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgdGltZXJfc2V0dGlt
ZSAodGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAoJCQkgIF9fY29uc3Qgc3RydWN0IGl0
aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKCQkJICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19y
ZXN0cmljdCBfX292YWx1ZSkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHRpbWVyX2dldHRpbWUg
KHRpbWVyX3QgX190aW1lcmlkLCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX192YWx1ZSkKICAgICB0aHJv
dyAoKSA7CgogCmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQp
IHRocm93ICgpIDsKCgoKIyAzNDkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgojIDM1OSAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMwoKCgp9IAoKCgoKIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQu
aCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Np
Z3NldC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgojIDMzICIvdXNyL2luY2x1ZGUvYml0cy9z
aWdzZXQuaCIgMwoKCgogCgoKCgoKIyAxMjUgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAz
CgojIDMzICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKCiAKCgoKCgoKCgoKCgoKCgoKCgoj
IDM2OSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCgoKfSAKCgojIDI0ICIvdXNyL2luY2x1ZGUv
cHRocmVhZC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEg
MwogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCgoKIyAxNDIgIi91c3IvaW5jbHVkZS9iaXRz
L3B0aHJlYWR0eXBlcy5oIiAzCgojIDI1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvaW5pdHNwaW4uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKIAoKCgojIDI2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgoKZXh0ZXJuICJD
IiB7IAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKZW51bQp7CiAgUFRIUkVBRF9DUkVB
VEVfSk9JTkFCTEUsCgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRI
UkVBRF9JTkhFUklUX1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7
CiAgUFRIUkVBRF9TQ09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVu
dW0KewogIFBUSFJFQURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVf
TlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfQURBUFRJ
VkVfTlAKCgoKCgoKCgoKCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgog
IFBUSFJFQURfUFJPQ0VTU19TSEFSRUQKCn07CgojIDExOCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQu
aCIgMwoKCgoKIAoKCgoKCgogCgpzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZv
aWQgKCpfX3JvdXRpbmUpICh2b2lkICopOwkJICAgCiAgdm9pZCAqX19hcmc7CQkJCSAgIAogIGlu
dCBfX2NhbmNlbHR5cGU7CQkJICAgCiAgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpf
X3ByZXY7ICAKfTsKCiAKCmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRIUkVB
RF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfREVGRVJSRUQsCgog
IFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoKfTsKCgoKIAoKIAoKCmV4dGVybiBpbnQgcHRo
cmVhZF9jcmVhdGUgKHB0aHJlYWRfdCAqX19yZXN0cmljdCBfX3RocmVhZCwKCQkJICAgX19jb25z
dCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCgkJCSAgIHZvaWQgKigqX19zdGFy
dF9yb3V0aW5lKSAodm9pZCAqKSwKCQkJICAgdm9pZCAqX19yZXN0cmljdCBfX2FyZykgdGhyb3cg
KCkgOwoKIApleHRlcm4gcHRocmVhZF90IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCkgOwoK
IApleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgKHB0aHJlYWRfdCBfX3RocmVhZDEsIHB0aHJlYWRf
dCBfX3RocmVhZDIpIHRocm93ICgpIDsKCiAKZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lk
ICpfX3JldHZhbCkKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp
OwoKIAoKCmV4dGVybiBpbnQgcHRocmVhZF9qb2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9f
dGhyZWFkX3JldHVybikgdGhyb3cgKCkgOwoKIAoKCgpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNo
IChwdGhyZWFkX3QgX190aCkgdGhyb3cgKCkgOwoKCiAKCiAKCgpleHRlcm4gaW50IHB0aHJlYWRf
YXR0cl9pbml0IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKSA7CgogCmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgp
IDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0
cl90ICpfX2F0dHIsCgkJCQkJaW50IF9fZGV0YWNoc3RhdGUpIHRocm93ICgpIDsKCiAKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3Qg
Kl9fYXR0ciwKCQkJCQlpbnQgKl9fZGV0YWNoc3RhdGUpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbSAocHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3Qg
X19hdHRyLAoJCQkJICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0
CgkJCQkgICAgICAgX19wYXJhbSkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0
cl9nZXRzY2hlZHBhcmFtIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CgkJCQkg
ICAgICAgX19hdHRyLAoJCQkJICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBf
X3BhcmFtKQogICAgIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2No
ZWRwb2xpY3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3BvbGljeSkKICAgICB0aHJv
dyAoKSA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5IChfX2NvbnN0
IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CgkJCQkJX19hdHRyLCBpbnQgKl9fcmVzdHJpY3Qg
X19wb2xpY3kpCiAgICAgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRp
bmhlcml0c2NoZWQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCgkJCQkJIGludCBfX2luaGVyaXQp
IHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkIChf
X2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CgkJCQkJIF9fYXR0ciwgaW50ICpfX3Jl
c3RyaWN0IF9faW5oZXJpdCkKICAgICB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9h
dHRyX3NldHNjb3BlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19zY29wZSkKICAgICB0
aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlIChfX2NvbnN0IHB0
aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKCQkJCSAgaW50ICpfX3Jlc3RyaWN0IF9f
c2NvcGUpIHRocm93ICgpIDsKCiMgMjU0ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCgoKIAoK
CgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIgKHB0aHJlYWRfYXR0cl90ICpf
X2F0dHIsCgkJCQkgICAgICB2b2lkICpfX3N0YWNrYWRkcikgdGhyb3cgKCkgOwoKIApleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9f
cmVzdHJpY3QKCQkJCSAgICAgIF9fYXR0ciwgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIp
CiAgICAgdGhyb3cgKCkgOwoKIyAyNzkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKCgogCgoK
ZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplIChwdGhyZWFkX2F0dHJfdCAqX19h
dHRyLAoJCQkJICAgICAgc2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKSA7CgogCmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19y
ZXN0cmljdAoJCQkJICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFja3NpemUp
CiAgICAgdGhyb3cgKCkgOwoKCgoKCgogCgogCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRw
YXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9fcG9saWN5LAoJCQkJICBfX2Nv
bnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJvdyAoKSA7CgogCmV4dGVy
biBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLAoJ
CQkJICBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3ksCgkJCQkgIHN0cnVjdCBzY2hlZF9wYXJhbSAq
X19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpIDsKCgoKCgoKCgoKCgoKCgoKCgogCgog
CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICpfX3Jlc3Ry
aWN0IF9fbXV0ZXgsCgkJCSAgICAgICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVz
dHJpY3QKCQkJICAgICAgIF9fbXV0ZXhfYXR0cikgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHB0
aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKSA7
CgogCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90cnlsb2NrIChwdGhyZWFkX211dGV4X3QgKl9f
bXV0ZXgpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJl
YWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCkgOwoKCgoKCgoKCiAKZXh0ZXJuIGludCBwdGhy
ZWFkX211dGV4X3VubG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKSA7CgoK
IAoKIAoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0
cl90ICpfX2F0dHIpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9k
ZXN0cm95IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgpIDsKCiAKZXh0ZXJu
IGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhh
dHRyX3QgKgoJCQkJCSBfX3Jlc3RyaWN0IF9fYXR0ciwKCQkJCQkgaW50ICpfX3Jlc3RyaWN0IF9f
cHNoYXJlZCkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBz
aGFyZWQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwKCQkJCQkgaW50IF9fcHNoYXJlZCkg
dGhyb3cgKCkgOwoKIyAzODMgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKCgoKIAoKIAoKZXh0
ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5pdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19j
b25kLAoJCQkgICAgICBfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqX19yZXN0cmljdAoJCQkg
ICAgICBfX2NvbmRfYXR0cikgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHB0aHJlYWRfY29uZF9k
ZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQg
cHRocmVhZF9jb25kX3NpZ25hbCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCkgOwoK
IApleHRlcm4gaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QgKHB0aHJlYWRfY29uZF90ICpfX2Nv
bmQpIHRocm93ICgpIDsKCiAKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRf
Y29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKCQkJICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jl
c3RyaWN0IF9fbXV0ZXgpIHRocm93ICgpIDsKCiAKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRf
dGltZWR3YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCgkJCQkgICBwdGhy
ZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKCQkJCSAgIF9fY29uc3Qgc3RydWN0IHRp
bWVzcGVjICpfX3Jlc3RyaWN0CgkJCQkgICBfX2Fic3RpbWUpIHRocm93ICgpIDsKCiAKCiAKZXh0
ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRy
KSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChwdGhy
ZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHB0aHJlYWRf
Y29uZGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKgoJCQkJCV9f
cmVzdHJpY3QgX19hdHRyLAoJCQkJCWludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgp
IDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfY29u
ZGF0dHJfdCAqX19hdHRyLAoJCQkJCWludCBfX3BzaGFyZWQpIHRocm93ICgpIDsKCgojIDUwMSAi
L3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwoKCiMgNTQ1ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5o
IiAzCgoKCiAKCiAKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZSAocHRocmVhZF9r
ZXlfdCAqX19rZXksCgkJCSAgICAgICB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikp
IHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5
X3QgX19rZXkpIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNwZWNpZmljIChw
dGhyZWFkX2tleV90IF9fa2V5LAoJCQkJX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgp
IDsKCiAKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19r
ZXkpIHRocm93ICgpIDsKCgogCgogCgoKCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFk
X29uY2VfdCAqX19vbmNlX2NvbnRyb2wsCgkJCSB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lk
KSkgdGhyb3cgKCkgOwoKCiAKCiAKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZSAo
aW50IF9fc3RhdGUsIGludCAqX19vbGRzdGF0ZSkgdGhyb3cgKCkgOwoKIAoKZXh0ZXJuIGludCBw
dGhyZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUsIGludCAqX19vbGR0eXBlKSB0aHJvdyAo
KSA7CgogCmV4dGVybiBpbnQgcHRocmVhZF9jYW5jZWwgKHB0aHJlYWRfdCBfX3RocmVhZCkgdGhy
b3cgKCkgOwoKIAoKCmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCkgdGhyb3cg
KCkgOwoKCiAKCgoKCgoKCgoKCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaCAoc3Ry
dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKCQkJCSAgIHZvaWQgKCpfX3Jv
dXRpbmUpICh2b2lkICopLAoJCQkJICAgdm9pZCAqX19hcmcpIHRocm93ICgpIDsKCiAKCgoKCgpl
eHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBf
YnVmZmVyICpfX2J1ZmZlciwKCQkJCSAgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCkgOwoKIAoKCiMg
NjQ0ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCgoKCgoKCgoKCgogCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvc2lndGhyZWFkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgog
CgpleHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayAoaW50IF9faG93LAoJCQkgICAgX19jb25zdCBf
X3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fbmV3bWFzaywKCQkJICAgIF9fc2lnc2V0X3QgKl9fcmVz
dHJpY3QgX19vbGRtYXNrKXRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBwdGhyZWFkX2tpbGwgKHB0
aHJlYWRfdCBfX3RocmVhZCwgaW50IF9fc2lnbm8pIHRocm93ICgpIDsKCgojIDY1NSAiL3Vzci9p
bmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKCiAKCiAKCgoKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKCQkJICAgdm9pZCAoKl9fcGFyZW50
KSAodm9pZCksCgkJCSAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgpIDsKCiAKCgpl
eHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAodm9pZCkgdGhyb3cgKCkg
OwoKfSAKCgojIDcxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUu
My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKCgoKCgoKCgojIDg3
ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgojIDk3ICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9h
bGxvYy5oIiAzCgojIDExNSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8y
Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwoKCgoKCgoKCgog
CgoKCgoKIAogCgoKCgoKCgoKCnRlbXBsYXRlIDxpbnQgX19pbnN0PgpjbGFzcyBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZSB7Cgpwcml2YXRlOgoKICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhz
aXplX3QpOwogIHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKCgog
IHN0YXRpYyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKCnB1YmxpYzoK
CiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgewogICAgdm9pZCogX19yZXN1
bHQgPSBtYWxsb2MoX19uKTsKICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29v
bV9tYWxsb2MoX19uKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkIGRl
YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgICkKICB7CiAgICBmcmVlKF9fcCk7CiAgfQoKICBz
dGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAgLCBzaXplX3QgX19uZXdf
c3opCiAgewogICAgdm9pZCogX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAg
aWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19z
eik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxs
b2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogIHsKICAgIHZvaWQgKCogX19vbGQpKCkgPSBf
X21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVy
ID0gX19mOwogICAgcmV0dXJuKF9fb2xkKTsKICB9Cgp9OwoKIAoKCnRlbXBsYXRlIDxpbnQgX19p
bnN0Pgp2b2lkICgqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9fbWFsbG9jX2Fs
bG9jX29vbV9oYW5kbGVyKSgpID0gMDsKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCoKX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQp7
CiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsK
CiAgICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2Fs
bG9jX29vbV9oYW5kbGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsg
Y2VyciA8PCAib3V0IG9mIG1lbW9yeSIgPDwgZW5kbDsgZXhpdCgxKSA7IH0KICAgICAgICAoKl9f
bXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAg
ICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7CiAgICB9Cn0KCnRlbXBsYXRlIDxp
bnQgX19pbnN0Pgp2b2lkKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21f
cmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2Nf
aGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzspIHsKICAgICAgICBf
X215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAg
aWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBjZXJyIDw8ICJvdXQgb2YgbWVtb3J5IiA8
PCBlbmRsOyBleGl0KDEpIDsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAg
ICAgICBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkg
cmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdHlwZWRlZiBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTwwPiBtYWxsb2NfYWxsb2M7Cgp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xh
c3Mgc2ltcGxlX2FsbG9jIHsKCnB1YmxpYzoKICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHNpemVf
dCBfX24pCiAgICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6IChfVHAqKSBfQWxsb2M6OmFsbG9j
YXRlKF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHZvaWQp
CiAgICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0K
ICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsg
aWYgKDAgIT0gX19uKSBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkp
OyB9CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgICB7IF9BbGxvYzo6
ZGVhbGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0KfTsKCiAKIAogCiAKIAp0ZW1wbGF0ZSA8
Y2xhc3MgX0FsbG9jPgpjbGFzcyBkZWJ1Z19hbGxvYyB7Cgpwcml2YXRlOgoKICBlbnVtIHtfU19l
eHRyYSA9IDh9OyAgIAogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAKCnB1YmxpYzoKCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAg
ewogICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyBfU19l
eHRyYSk7CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICByZXR1cm4gX19yZXN1bHQg
KyBfU19leHRyYTsKICB9CgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXpl
X3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIF9TX2V4dHJhOwog
ICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCAqKHNpemVfdCopX19yZWFsX3AgPT0gX19uICkgPyAw
IDoJKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19uIiAsICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF9hbGxvYy5oIiwgMjYzLCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwog
ICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24gKyBfU19leHRyYSk7CiAgfQoKICBz
dGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90
IF9fbmV3X3N6KQogIHsKICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIF9TX2V4dHJh
OwogICAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCAqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRf
c3ogKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9z
eiIgLCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIsIDI3MCwgX19QUkVUVFlfRlVOQ1RJT05f
XyApLCAwKSkpIDsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQogICAgICBfQWxsb2M6OnJl
YWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6ICsgX1NfZXh0cmEsIF9fbmV3X3N6ICsgX1NfZXh0
cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uZXdfc3o7CiAgICByZXR1cm4gX19yZXN1
bHQgKyBfU19leHRyYTsKICB9Cgp9OwoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCgogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50
IGluc3Q+CmNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZSB7Cgpwcml2YXRlOgogICAKICAg
CgogICAgZW51bSB7X0FMSUdOID0gOH07CiAgICBlbnVtIHtfTUFYX0JZVEVTID0gMTI4fTsKICAg
IGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRFUy9fQUxJR059OwoKICBzdGF0aWMgc2l6ZV90
CiAgX1Nfcm91bmRfdXAoc2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSAr
IF9BTElHTi0xKSAmIH4oX0FMSUdOIC0gMSkpOyB9Cgpwcml2YXRlIDoKICB1bmlvbiBfT2JqIHsK
ICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICBjaGFyIF9NX2Ns
aWVudF9kYXRhWzFdOyAgICAgCiAgfTsKcHJpdmF0ZToKCgoKCiAgICBzdGF0aWMgX09iaiogdm9s
YXRpbGUgIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgogIHN0YXRpYyAgc2l6ZV90IF9TX2Zy
ZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKSB7CiAgICAgICAgcmV0dXJuICgoKF9fYnl0ZXMp
ICsgX0FMSUdOLTEpL19BTElHTiAtIDEpOwogIH0KCiAgIAogIHN0YXRpYyB2b2lkKiBfU19yZWZp
bGwoc2l6ZV90IF9fbik7CiAgIAogICAKICBzdGF0aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6
ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCiAgIAogIHN0YXRpYyBjaGFyKiBfU19zdGFydF9m
cmVlOwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBf
c2l6ZTsKCgoKCgoKCgogICAgc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBfU19ub2RlX2FsbG9jYXRv
cl9sb2NrOwoKCgoKCgojIDM4OSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51
eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwoKCiAgICBj
bGFzcyBfTG9jayB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICBfTG9jaygpIHsgaWYgKHRo
cmVhZHMpIHB0aHJlYWRfbXV0ZXhfbG9jaygmX1Nfbm9kZV9hbGxvY2F0b3JfbG9jaykgOyB9CiAg
ICAgICAgICAgIH5fTG9jaygpIHsgaWYgKHRocmVhZHMpIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZf
U19ub2RlX2FsbG9jYXRvcl9sb2NrKSA7IH0KICAgIH07CiAgICBmcmllbmQgY2xhc3MgX0xvY2s7
CgpwdWJsaWM6CgogICAKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAg
ICBfT2JqKiB2b2xhdGlsZSAqIF9fbXlfZnJlZV9saXN0OwogICAgX09iaiogICBfX3Jlc3VsdDsK
CiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIHJldHVybihtYWxs
b2NfYWxsb2M6OmFsbG9jYXRlKF9fbikpOwogICAgfQogICAgX19teV9mcmVlX2xpc3QgPSBfU19m
cmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAgIAogICAgIAogICAgIAoKICAg
ICAgICAgCiAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwoKICAgIF9fcmVzdWx0ID0gKl9f
bXlfZnJlZV9saXN0OwogICAgaWYgKF9fcmVzdWx0ID09IDApIHsKICAgICAgICB2b2lkKiBfX3Ig
PSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgIH0K
ICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAg
cmV0dXJuIChfX3Jlc3VsdCk7CiAgfTsKCiAgIAogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9p
ZCogX19wLCBzaXplX3QgX19uKQogIHsKICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CiAgICBf
T2JqKiB2b2xhdGlsZSAqIF9fbXlfZnJlZV9saXN0OwoKICAgIGlmIChfX24gPiAoc2l6ZV90KSBf
TUFYX0JZVEVTKSB7CiAgICAgICAgbWFsbG9jX2FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsK
ICAgICAgICByZXR1cm47CiAgICB9CiAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCAr
IF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAgCgogICAgICAgICAKICAgICAgICBfTG9jayBf
X2xvY2tfaW5zdGFuY2U7CgogICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJl
ZV9saXN0OwogICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOwogICAgIAogIH0KCiAgc3RhdGljIHZv
aWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19z
eik7Cgp9IDsKCnR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPCB0cnVlICwgMD4gYWxs
b2M7CnR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xp
ZW50X2FsbG9jOwoKCgogCiAKIAogCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5z
dD4KY2hhcioKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nf
Y2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBfX25vYmpzKQp7CiAgICBjaGFyKiBf
X3Jlc3VsdDsKICAgIHNpemVfdCBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAg
IHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAg
aWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKSB7CiAgICAgICAgX19yZXN1bHQgPSBf
U19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAg
ICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19z
aXplKSB7CiAgICAgICAgX19ub2JqcyA9IChpbnQpKF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAg
ICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgIF9fcmVzdWx0ID0g
X1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAg
ICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgc2l6ZV90IF9fYnl0
ZXNfdG9fZ2V0ID0KCSAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3Np
emUgPj4gNCk7CiAgICAgICAgIAogICAgICAgIGlmIChfX2J5dGVzX2xlZnQgPiAwKSB7CiAgICAg
ICAgICAgIF9PYmoqIHZvbGF0aWxlICogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAg
ICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoK
ICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9
ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9T
X3N0YXJ0X2ZyZWU7CiAgICAgICAgfQogICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFs
bG9jKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9mcmVlKSB7CiAg
ICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlICogX19teV9m
cmVlX2xpc3Q7CgkgICAgX09iaiogX19wOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIAogICAgICAgICAgICBmb3IgKF9faSA9IF9fc2l6ZTsgX19pIDw9IF9NQVhfQllU
RVM7IF9faSArPSBfQUxJR04pIHsKICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1Nf
ZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsKICAgICAgICAgICAgICAgIF9fcCA9
ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAgIGlmICgwICE9IF9fcCkgewogICAgICAg
ICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGluazsK
ICAgICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fcDsKICAgICAgICAg
ICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2k7CiAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KCSAgICBfU19lbmRfZnJlZSA9IDA7CSAKICAgICAgICAgICAgX1Nfc3RhcnRf
ZnJlZSA9IChjaGFyKiltYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAg
X1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgIF9TX2VuZF9mcmVlID0gX1Nf
c3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgIHJldHVybihfU19jaHVua19hbGxv
YyhfX3NpemUsIF9fbm9ianMpKTsKICAgIH0KfQoKCiAKIAogCnRlbXBsYXRlIDxib29sIF9fdGhy
ZWFkcywgaW50IF9faW5zdD4Kdm9pZCoKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk
cywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pCnsKICAgIGludCBfX25vYmpzID0gMjA7
CiAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19uLCBfX25vYmpzKTsKICAgIF9P
YmoqIHZvbGF0aWxlICogX19teV9mcmVlX2xpc3Q7CiAgICBfT2JqKiBfX3Jlc3VsdDsKICAgIF9P
YmoqIF9fY3VycmVudF9vYmo7CiAgICBfT2JqKiBfX25leHRfb2JqOwogICAgaW50IF9faTsKCiAg
ICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4oX19jaHVuayk7CiAgICBfX215X2ZyZWVfbGlzdCA9
IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgogICAgIAogICAgICBfX3Jl
c3VsdCA9IChfT2JqKilfX2NodW5rOwogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX25leHRfb2Jq
ID0gKF9PYmoqKShfX2NodW5rICsgX19uKTsKICAgICAgZm9yIChfX2kgPSAxOyA7IF9faSsrKSB7
CiAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAgICAgICAgX19uZXh0X29iaiA9
IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmogKyBfX24pOwogICAgICAgIGlmIChfX25vYmpzIC0g
MSA9PSBfX2kpIHsKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGlu
ayA9IDA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9f
Y3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSBfX25leHRfb2JqOwogICAgICAgIH0K
ICAgICAgfQogICAgcmV0dXJuKF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywg
aW50IGluc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6
cmVhbGxvY2F0ZSh2b2lkKiBfX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uZXdfc3opCnsKICAgIHZvaWQq
IF9fcmVzdWx0OwogICAgc2l6ZV90IF9fY29weV9zejsKCiAgICBpZiAoX19vbGRfc3ogPiAoc2l6
ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3X3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAg
ICAgIHJldHVybihyZWFsbG9jKF9fcCwgX19uZXdfc3opKTsKICAgIH0KICAgIGlmIChfU19yb3Vu
ZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19uZXdfc3opKSByZXR1cm4oX19wKTsKICAg
IF9fcmVzdWx0ID0gYWxsb2NhdGUoX19uZXdfc3opOwogICAgX19jb3B5X3N6ID0gX19uZXdfc3og
PiBfX29sZF9zej8gX19vbGRfc3ogOiBfX25ld19zejsKICAgIG1lbWNweShfX3Jlc3VsdCwgX19w
LCBfX2NvcHlfc3opOwogICAgZGVhbGxvY2F0ZShfX3AsIF9fb2xkX3N6KTsKICAgIHJldHVybihf
X3Jlc3VsdCk7Cn0KCgogICAgdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgog
ICAgcHRocmVhZF9tdXRleF90CiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
LCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrCiAgICAgICAgPSB7MCwgMCwgMCwgUFRI
UkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwICB9IH0gOwoKCgoKCgoKCgojIDYwMiAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfYWxsb2MuaCIgMwoKCiMgNjg5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xh
Y2t3YXJlLWxpbnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5o
IiAzCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKiBfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19zdGFydF9mcmVlID0gMDsK
CnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhciogX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOwoKdGVtcGxh
dGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzaXplX3QgX19kZWZhdWx0X2FsbG9jX3Rl
bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKCnRlbXBsYXRlIDxi
b29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0Pjo6X09iaiogdm9sYXRpbGUgCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf
X3RocmVhZHMsIF9faW5zdD4gOjpfU19mcmVlX2xpc3RbCiAgICBfTkZSRUVMSVNUUwpdID0gezAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIH07CiAKIAogCgoK
CgoKCgoKCgogCiAKIAogCiAKIAogCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFsbG9j
YXRvciB7CiAgdHlwZWRlZiBhbGxvYyBfQWxsb2M7ICAgICAgICAgICAKcHVibGljOgogIHR5cGVk
ZWYgc2l6ZV90ICAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgIGRpZmZlcmVuY2Vf
dHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCog
Y29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgcmVmZXJlbmNlOwogIHR5cGVkZWYg
Y29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVlX3R5
cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYg
YWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFsbG9jYXRvcigpIHRocm93KCkgIHt9CiAg
YWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpIHRocm93KCkgIHt9CiAgdGVtcGxhdGUgPGNsYXNz
IF9UcDE+IGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3I8X1RwMT4mKSB0aHJvdygpICB7fQogIH5h
bGxvY2F0b3IoKSB0aHJvdygpICB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkg
Y29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZl
cmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgogICAKICAgCiAgX1RwKiBhbGxvY2F0
ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMCA/
IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQog
ICAgICAgICAgICAgICAgICAgIDogMDsKICB9CgogICAKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRl
ciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAq
IHNpemVvZihfVHApKTsgfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpIAog
ICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0
KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0K
ICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRl
PD4KY2xhc3MgYWxsb2NhdG9yPHZvaWQ+IHsKICB0eXBlZGVmIHNpemVfdCAgICAgIHNpemVfdHlw
ZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQq
ICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5
cGVkZWYgdm9pZCAgICAgICAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0
cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4g
dHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAg
cmV0dXJuIGZhbHNlOwp9CgogCiAKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgpzdHJ1Y3QgX19hbGxvY2F0b3IgewogIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7
CgogIHR5cGVkZWYgc2l6ZV90ICAgIHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZm
ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25z
dCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsKICB0
eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwICAgICAgICB2
YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0
eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19hbGxvY2F0
b3IoKSB0aHJvdygpICB7fQogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yJiBfX2EpIHRo
cm93KCkgCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7
fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9y
PF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKSAKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9f
YS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSAge30KCiAg
cG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBj
b25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4g
Jl9feDsgfQoKICAgCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9
IDApIHsKICAgIHJldHVybiBfX24gIT0gMAogICAgICAgID8gc3RhdGljX2Nhc3Q8X1RwKj4oX191
bmRlcmx5aW5nX2FsbG9jLmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSkKICAgICAgICA6IDA7
CiAgfQoKICAgCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQog
ICAgeyBfX3VuZGVybHlpbmdfYWxsb2MuZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHAp
KTsgfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpIAogICAgeyByZXR1cm4g
c2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19w
LCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ry
b3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxs
b2M+CmNsYXNzIF9fYWxsb2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6ZV90ICAg
ICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgdm9pZCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3Bv
aW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9B
bGxvYz4gb3RoZXI7CiAgfTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9f
YTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+
JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRl
cmx5aW5nX2FsbG9jOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9f
YTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5fX3VuZGVybHlp
bmdfYWxsb2M7Cn0KCgogCiAKIAoKdGVtcGxhdGUgPGludCBpbnN0PgppbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYpCnsKICByZXR1
cm4gdHJ1ZTsKfQoKCnRlbXBsYXRlIDxpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mLAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mKQp7CiAgcmV0dXJu
IGZhbHNlOwp9CgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
LCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKewogIHJldHVybiB0cnVlOwp9CgoKdGVtcGxh
dGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs
IF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+
CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4g
dHJ1ZTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KCgogCiAKIAogCiAKIAoK
IAogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBjb25z
dCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j
YXRvcjo6ICAgcmViaW5kPF9UcD46Om90aGVyCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9j
X3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgogCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9jYXRv
cjxfVHAxPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwog
IHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgYWxsb2M+IF9BbGxvY190eXBlOwogIHR5cGVkZWYg
YWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0g
dHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl
PF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxs
b2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3Ry
YWl0czxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgp7
CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNp
bXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z
dD4gPgogICAgICAgICAgX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAgICAgYWxs
b2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1
Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPgp7CiAgc3RhdGljIGNv
bnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxf
VHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2Nh
dG9yPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKIAogCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9j
X3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFs
bG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19p
bnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2Nf
YWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0
b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9f
aW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19h
bGxvY2F0b3I8X1RwMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29s
IF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2Rl
ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlw
ZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyLF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf
VHAsIF9fYWxsb2NhdG9yPF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CnsKICBzdGF0aWMg
Y29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9j
PF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxv
Y2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgoK
CgoKIAoKCgoKCiAKIAogCiMgMzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGlu
dXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGlzdCIgMiAzCgoKCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9zdGxfbGlzdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgogCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfTGlzdF9ub2RlIHsKICB0
eXBlZGVmIHZvaWQqIF9Wb2lkX3BvaW50ZXI7CiAgX1ZvaWRfcG9pbnRlciBfTV9uZXh0OwogIF9W
b2lkX3BvaW50ZXIgX01fcHJldjsKICBfVHAgX01fZGF0YTsKfTsKCnRlbXBsYXRlPGNsYXNzIF9U
cCwgY2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4Kc3RydWN0IF9MaXN0X2l0ZXJhdG9yIHsKICB0eXBl
ZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+ICAgICAgICAgICAgIGl0ZXJhdG9yOwog
IHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLGNvbnN0IF9UcCYsY29uc3QgX1RwKj4gY29uc3Rf
aXRlcmF0b3I7CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1JlZixfUHRyPiAgICAgICAg
ICAgICBfU2VsZjsKCiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRv
cl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX1B0ciBwb2lu
dGVyOwogIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgdHlwZWRlZiBfTGlzdF9ub2RlPF9UcD4g
X05vZGU7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRp
ZmZlcmVuY2VfdHlwZTsKCiAgX05vZGUqIF9NX25vZGU7CgogIF9MaXN0X2l0ZXJhdG9yKF9Ob2Rl
KiBfX3gpIDogX01fbm9kZShfX3gpIHt9CiAgX0xpc3RfaXRlcmF0b3IoKSB7fQogIF9MaXN0X2l0
ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBfX3gpIDogX01fbm9kZShfX3guX01fbm9kZSkge30KCiAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IF9TZWxmJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGUg
PT0gX194Ll9NX25vZGU7IH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgX1NlbGYmIF9feCkgY29u
c3QgeyByZXR1cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsgfQogIHJlZmVyZW5jZSBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiAoKl9NX25vZGUpLl9NX2RhdGE7IH0KCgogIHBvaW50ZXIgb3Bl
cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKICBfU2VsZiYgb3Bl
cmF0b3IrKygpIHsgCiAgICBfTV9ub2RlID0gKF9Ob2RlKikoX01fbm9kZS0+X01fbmV4dCk7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7IAogICAgX1NlbGYg
X190bXAgPSAqdGhpczsKICAgICsrKnRoaXM7CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxm
JiBvcGVyYXRvci0tKCkgeyAKICAgIF9NX25vZGUgPSAoX05vZGUqKShfTV9ub2RlLT5fTV9wcmV2
KTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsgCiAgICBf
U2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS0qdGhpczsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07
CgojIDEyMCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXNsYWNrd2FyZS1saW51eC8yLjk1LjMvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfbGlzdC5oIiAzCgoKCiAKIAogCiAKIAogCgoKCiAK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0aWM+CmNs
YXNzIF9MaXN0X2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2Nf
dHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0
b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4g
X05vZGVfYWxsb2NhdG9yOyB9CgogIF9MaXN0X2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5
cGUmIF9fYSkgOiBfTm9kZV9hbGxvY2F0b3IoX19hKSB7fQoKcHJvdGVjdGVkOgogIF9MaXN0X25v
ZGU8X1RwPiogX01fZ2V0X25vZGUoKQogICB7IHJldHVybiBfTm9kZV9hbGxvY2F0b3IuYWxsb2Nh
dGUoMSk7IH0KICB2b2lkIF9NX3B1dF9ub2RlKF9MaXN0X25vZGU8X1RwPiogX19wKQogICAgeyBf
Tm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cgpwcm90ZWN0ZWQ6CiAgdHlwZW5h
bWUgX0FsbG9jX3RyYWl0czxfTGlzdF9ub2RlPF9UcD4sIF9BbGxvY2F0b3I+OjphbGxvY2F0b3Jf
dHlwZQogICAgICAgICAgIF9Ob2RlX2FsbG9jYXRvcjsKICBfTGlzdF9ub2RlPF9UcD4qIF9NX25v
ZGU7Cn07CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBf
TGlzdF9hbGxvY19iYXNlPF9UcCwgX0FsbG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBl
CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y
KCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfTGlzdF9hbGxvY19iYXNl
KGNvbnN0IGFsbG9jYXRvcl90eXBlJikge30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1l
IF9BbGxvY190cmFpdHM8X0xpc3Rfbm9kZTxfVHA+LCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUK
ICAgICAgICAgIF9BbGxvY190eXBlOwogIF9MaXN0X25vZGU8X1RwPiogX01fZ2V0X25vZGUoKSB7
IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KICB2b2lkIF9NX3B1dF9ub2RlKF9M
aXN0X25vZGU8X1RwPiogX19wKSB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgMSk7IH0K
CnByb3RlY3RlZDoKICBfTGlzdF9ub2RlPF9UcD4qIF9NX25vZGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIF9MaXN0X2Jhc2UgCiAgOiBwdWJsaWMgX0xpc3Rf
YWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxv
Y190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CnsKcHVibGljOgogIHR5cGVk
ZWYgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAg
IF9CYXNlOyAKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0
b3JfdHlwZTsKCiAgX0xpc3RfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNl
KF9fYSkgewogICAgX01fbm9kZSA9IF9NX2dldF9ub2RlKCk7CiAgICBfTV9ub2RlLT5fTV9uZXh0
ID0gX01fbm9kZTsKICAgIF9NX25vZGUtPl9NX3ByZXYgPSBfTV9ub2RlOwogIH0KICB+X0xpc3Rf
YmFzZSgpIHsKICAgIGNsZWFyKCk7CiAgICBfTV9wdXRfbm9kZShfTV9ub2RlKTsKICB9CgogIHZv
aWQgY2xlYXIoKTsKfTsKCiMgMjI5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtc2xhY2t3YXJlLWxp
bnV4LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9saXN0LmgiIDMKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgCl9MaXN0X2Jhc2U8X1RwLF9BbGxv
Yz46OmNsZWFyKCkgCnsKICBfTGlzdF9ub2RlPF9UcD4qIF9fY3VyID0gKF9MaXN0X25vZGU8X1Rw
PiopIF9NX25vZGUtPl9NX25leHQ7CiAgd2hpbGUgKF9fY3VyICE9IF9NX25vZGUpIHsKICAgIF9M
aXN0X25vZGU8X1RwPiogX190bXAgPSBfX2N1cjsKICAgIF9fY3VyID0gKF9MaXN0X25vZGU8X1Rw
PiopIF9fY3VyLT5fTV9uZXh0OwogICAgZGVzdHJveSgmX190bXAtPl9NX2RhdGEpOwogICAgX01f
cHV0X25vZGUoX190bXApOwogIH0KICBfTV9ub2RlLT5fTV9uZXh0ID0gX01fbm9kZTsKICBfTV9u
b2RlLT5fTV9wcmV2ID0gX01fbm9kZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jID0gYWxsb2NhdG9yPCBfVHAgPiAgPgpjbGFzcyBsaXN0IDogcHJvdGVjdGVkIF9MaXN0X2Jh
c2U8X1RwLCBfQWxsb2M+IHsKICB0eXBlZGVmIF9MaXN0X2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNl
Owpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB2b2lkKiBfVm9pZF9wb2ludGVyOwoKcHVibGljOiAgICAg
IAogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVy
OwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZh
bHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3Jl
ZmVyZW5jZTsKICB0eXBlZGVmIF9MaXN0X25vZGU8X1RwPiBfTm9kZTsKICB0eXBlZGVmIHNpemVf
dCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBl
ZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxv
Y2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxv
Y2F0b3IoKTsgfQoKcHVibGljOgogIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9UcCYsX1Rw
Kj4gICAgICAgICAgICAgaXRlcmF0b3I7CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsY29u
c3QgX1RwJixjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKCgogIHR5cGVkZWYgcmV2ZXJzZV9p
dGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVm
IHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+ICAgICAgIHJldmVyc2VfaXRlcmF0b3I7CgoKCgoK
CgoKCnByb3RlY3RlZDoKCiAgdXNpbmcgX0Jhc2U6Ol9NX25vZGU7CiAgdXNpbmcgX0Jhc2U6Ol9N
X3B1dF9ub2RlOwogIHVzaW5nIF9CYXNlOjpfTV9nZXRfbm9kZTsKCgpwcm90ZWN0ZWQ6CiAgX05v
ZGUqIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IF9UcCYgX194KQogIHsKICAgIF9Ob2RlKiBfX3AgPSBf
TV9nZXRfbm9kZSgpOwogICAgdHJ5ICB7CiAgICAgIGNvbnN0cnVjdCgmX19wLT5fTV9kYXRhLCBf
X3gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7ICBfTV9wdXRfbm9kZShfX3ApIDsgdGhyb3c7IH0g
OwogICAgcmV0dXJuIF9fcDsKICB9CgogIF9Ob2RlKiBfTV9jcmVhdGVfbm9kZSgpCiAgewogICAg
X05vZGUqIF9fcCA9IF9NX2dldF9ub2RlKCk7CiAgICB0cnkgIHsKICAgICAgY29uc3RydWN0KCZf
X3AtPl9NX2RhdGEpOwogICAgfQogICAgY2F0Y2goLi4uKSB7ICBfTV9wdXRfbm9kZShfX3ApIDsg
dGhyb3c7IH0gOwogICAgcmV0dXJuIF9fcDsKICB9CgpwdWJsaWM6CiAgZXhwbGljaXQgbGlzdChj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2Ep
IHt9CgogIGl0ZXJhdG9yIGJlZ2luKCkgICAgICAgICAgICAgeyByZXR1cm4gKF9Ob2RlKikoX01f
bm9kZS0+X01fbmV4dCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IChfTm9kZSopKF9NX25vZGUtPl9NX25leHQpOyB9CgogIGl0ZXJhdG9yIGVuZCgpICAgICAgICAg
ICAgIHsgcmV0dXJuIF9NX25vZGU7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBfTV9ub2RlOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgCiAgICB7IHJldHVy
biByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJl
Z2luKCkgY29uc3QgCiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsg
fQoKICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRv
cihiZWdpbigpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7
IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogIGJvb2wgZW1wdHko
KSBjb25zdCB7IHJldHVybiBfTV9ub2RlLT5fTV9uZXh0ID09IF9NX25vZGU7IH0KICBzaXplX3R5
cGUgc2l6ZSgpIGNvbnN0IHsKICAgIHNpemVfdHlwZSBfX3Jlc3VsdCA9IDA7CiAgICBkaXN0YW5j
ZShiZWdpbigpLCBlbmQoKSwgX19yZXN1bHQpOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KICBz
aXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CgogIHJl
ZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZy
b250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0
dXJuICooLS1lbmQoKSk7IH0KICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJu
ICooLS1lbmQoKSk7IH0KCiAgdm9pZCBzd2FwKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gpIHsgIDo6
c3dhcChfTV9ub2RlLCBfX3guX01fbm9kZSk7IH0KCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9y
IF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KSB7CiAgICBfTm9kZSogX190bXAgPSBfTV9jcmVh
dGVfbm9kZShfX3gpOwogICAgX190bXAtPl9NX25leHQgPSBfX3Bvc2l0aW9uLl9NX25vZGU7CiAg
ICBfX3RtcC0+X01fcHJldiA9IF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldjsKICAgICgoX05v
ZGUqKSAoX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2KSktPl9NX25leHQgPSBfX3RtcDsKICAg
IF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAgcmV0dXJuIF9fdG1wOwog
IH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikgeyByZXR1cm4gaW5zZXJ0
KF9fcG9zaXRpb24sIF9UcCgpKTsgfQoKICAgCgogIHRlbXBsYXRlPGNsYXNzIF9JbnRlZ2VyPgog
IHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9J
bnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewogICAg
aW5zZXJ0KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9feCk7CiAgfQoKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0
b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFs
c2VfdHlwZSk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2Vy
dChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9y
Pjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19m
aXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKCgoKCgogIHZvaWQgaW5zZXJ0KGl0ZXJh
dG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7CiAKICB2b2lkIHB1c2hf
ZnJvbnQoY29uc3QgX1RwJiBfX3gpIHsgaW5zZXJ0KGJlZ2luKCksIF9feCk7IH0KICB2b2lkIHB1
c2hfZnJvbnQoKSB7aW5zZXJ0KGJlZ2luKCkpO30KICB2b2lkIHB1c2hfYmFjayhjb25zdCBfVHAm
IF9feCkgeyBpbnNlcnQoZW5kKCksIF9feCk7IH0KICB2b2lkIHB1c2hfYmFjaygpIHtpbnNlcnQo
ZW5kKCkpO30KCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgX05v
ZGUqIF9fbmV4dF9ub2RlID0gKF9Ob2RlKikgKF9fcG9zaXRpb24uX01fbm9kZS0+X01fbmV4dCk7
CiAgICBfTm9kZSogX19wcmV2X25vZGUgPSAoX05vZGUqKSAoX19wb3NpdGlvbi5fTV9ub2RlLT5f
TV9wcmV2KTsKICAgIF9fcHJldl9ub2RlLT5fTV9uZXh0ID0gX19uZXh0X25vZGU7CiAgICBfX25l
eHRfbm9kZS0+X01fcHJldiA9IF9fcHJldl9ub2RlOwogICAgZGVzdHJveSgmX19wb3NpdGlvbi5f
TV9ub2RlLT5fTV9kYXRhKTsKICAgIF9NX3B1dF9ub2RlKF9fcG9zaXRpb24uX01fbm9kZSk7CiAg
ICByZXR1cm4gaXRlcmF0b3IoX19uZXh0X25vZGUpOwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVy
YXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwogIHZvaWQgY2xlYXIoKSB7IF9CYXNlOjpj
bGVhcigpOyB9CgogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAm
IF9feCk7CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpIHsgcmVzaXplKF9fbmV3
X3NpemUsIF9UcCgpKTsgfQoKICB2b2lkIHBvcF9mcm9udCgpIHsgZXJhc2UoYmVnaW4oKSk7IH0K
ICB2b2lkIHBvcF9iYWNrKCkgeyAKICAgIGl0ZXJhdG9yIF9fdG1wID0gZW5kKCk7CiAgICBlcmFz
ZSgtLV9fdG1wKTsKICB9CiAgbGlzdChzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUs
CiAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAg
IDogX0Jhc2UoX19hKQogICAgeyBpbnNlcnQoYmVnaW4oKSwgX19uLCBfX3ZhbHVlKTsgfQogIGV4
cGxpY2l0IGxpc3Qoc2l6ZV90eXBlIF9fbikKICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSkK
ICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9fbiwgX1RwKCkpOyB9CgoKCiAgIAogICAKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbGlzdChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0g
YWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKQogICAgeyBpbnNlcnQoYmVnaW4oKSwg
X19maXJzdCwgX19sYXN0KTsgfQoKIyA0MzMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dh
cmUtbGludXgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2xpc3QuaCIgMwoK
ICBsaXN0KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gpIDogX0Jhc2UoX194LmdldF9hbGxv
Y2F0b3IoKSkKICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOyB9
CgogIH5saXN0KCkgeyB9CgogIGxpc3Q8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgbGlz
dDxfVHAsIF9BbGxvYz4mIF9feCk7CgpwdWJsaWM6CiAgIAogICAKICAgCiAgIAoKICB2b2lkIGFz
c2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKTsKCgoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2Vy
PF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2Fzc2lnbl9kaXNw
YXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW50ZWdlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRl
Z2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgIHsgYXNzaWduKChzaXplX3R5cGUpIF9fbiwgKF9U
cCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9N
X2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKTsKCgoKcHJvdGVj
dGVkOgogIHZvaWQgdHJhbnNmZXIoaXRlcmF0b3IgX19wb3NpdGlvbiwgaXRlcmF0b3IgX19maXJz
dCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBpZiAoX19wb3NpdGlvbiAhPSBfX2xhc3QpIHsKICAg
ICAgIAogICAgICAoKF9Ob2RlKikgKF9fbGFzdC5fTV9ub2RlLT5fTV9wcmV2KSktPl9NX25leHQg
ICAgID0gX19wb3NpdGlvbi5fTV9ub2RlOwogICAgICAoKF9Ob2RlKikgKF9fZmlyc3QuX01fbm9k
ZS0+X01fcHJldikpLT5fTV9uZXh0ICAgID0gX19sYXN0Ll9NX25vZGU7CiAgICAgICgoX05vZGUq
KSAoX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2KSktPl9NX25leHQgPSBfX2ZpcnN0Ll9NX25v
ZGU7IAoKICAgICAgIAogICAgICBfTm9kZSogX190bXAgPSAoX05vZGUqKSAoX19wb3NpdGlvbi5f
TV9ub2RlLT5fTV9wcmV2KTsKICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2ID0gX19s
YXN0Ll9NX25vZGUtPl9NX3ByZXY7CiAgICAgIF9fbGFzdC5fTV9ub2RlLT5fTV9wcmV2ICAgICAg
PSBfX2ZpcnN0Ll9NX25vZGUtPl9NX3ByZXY7IAogICAgICBfX2ZpcnN0Ll9NX25vZGUtPl9NX3By
ZXYgICAgPSBfX3RtcDsKICAgIH0KICB9CgpwdWJsaWM6CiAgdm9pZCBzcGxpY2UoaXRlcmF0b3Ig
X19wb3NpdGlvbiwgbGlzdCYgX194KSB7CiAgICBpZiAoIV9feC5lbXB0eSgpKSAKICAgICAgdHJh
bnNmZXIoX19wb3NpdGlvbiwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7CiAgfQogIHZvaWQgc3Bs
aWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmLCBpdGVyYXRvciBfX2kpIHsKICAgIGl0ZXJh
dG9yIF9faiA9IF9faTsKICAgICsrX19qOwogICAgaWYgKF9fcG9zaXRpb24gPT0gX19pIHx8IF9f
cG9zaXRpb24gPT0gX19qKSByZXR1cm47CiAgICB0cmFuc2ZlcihfX3Bvc2l0aW9uLCBfX2ksIF9f
aik7CiAgfQogIHZvaWQgc3BsaWNlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGxpc3QmLCBpdGVyYXRv
ciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkg
CiAgICAgIHRyYW5zZmVyKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCk7CiAgfQogIHZvaWQg
cmVtb3ZlKGNvbnN0IF9UcCYgX192YWx1ZSk7CiAgdm9pZCB1bmlxdWUoKTsKICB2b2lkIG1lcmdl
KGxpc3QmIF9feCk7CiAgdm9pZCByZXZlcnNlKCk7CiAgdm9pZCBzb3J0KCk7CgoKICB0ZW1wbGF0
ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4gdm9pZCByZW1vdmVfaWYoX1ByZWRpY2F0ZSk7CiAgdGVtcGxh
dGUgPGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+IHZvaWQgdW5pcXVlKF9CaW5hcnlQcmVkaWNhdGUp
OwogIHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPiB2b2lkIG1lcmdlKGxpc3Qm
LCBfU3RyaWN0V2Vha09yZGVyaW5nKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRl
cmluZz4gdm9pZCBzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcpOwoKCiAgZnJpZW5kIGJvb2wgb3Bl
cmF0b3I9PSA8PiAgKAogICAgY29uc3QgbGlzdCYgX194LCBjb25zdCBsaXN0JiBfX3kpOwp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGxpc3Q8X1RwLF9B
bGxvYz46Ol9Ob2RlIF9Ob2RlOwogIF9Ob2RlKiBfX2UxID0gX194Ll9NX25vZGU7CiAgX05vZGUq
IF9fZTIgPSBfX3kuX01fbm9kZTsKICBfTm9kZSogX19uMSA9IChfTm9kZSopIF9fZTEtPl9NX25l
eHQ7CiAgX05vZGUqIF9fbjIgPSAoX05vZGUqKSBfX2UyLT5fTV9uZXh0OwogIGZvciAoIDsgX19u
MSAhPSBfX2UxICYmIF9fbjIgIT0gX19lMiA7CiAgICAgICAgICBfX24xID0gKF9Ob2RlKikgX19u
MS0+X01fbmV4dCwgX19uMiA9IChfTm9kZSopIF9fbjItPl9NX25leHQpCiAgICBpZiAoX19uMS0+
X01fZGF0YSAhPSBfX24yLT5fTV9kYXRhKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIF9f
bjEgPT0gX19lMSAmJiBfX24yID09IF9fZTI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9f
eCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkKewog
IHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsK
fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIApzd2Fw
KGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gsIGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3gu
c3dhcChfX3kpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCAKbGlzdDxfVHAsIF9BbGxvYz46Ol9NX2luc2Vy
dF9kaXNwYXRjaChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQp7CiAgZm9yICgg
OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaW5zZXJ0KF9fcG9zaXRpb24sICpf
X2ZpcnN0KTsKfQoKIyA1ODIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgv
Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2xpc3QuaCIgMwoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCAKbGlzdDxfVHAsIF9BbGxvYz46Omluc2Vy
dChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKewog
IGZvciAoIDsgX19uID4gMDsgLS1fX24pCiAgICBpbnNlcnQoX19wb3NpdGlvbiwgX194KTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpsaXN0PF9UcCxfQWxsb2M+OjppdGVy
YXRvciBsaXN0PF9UcCwgX0FsbG9jPjo6ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvciBfX2xh
c3QpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICBlcmFzZShfX2ZpcnN0KyspOwog
IHJldHVybiBfX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9p
ZCBsaXN0PF9UcCwgX0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBf
VHAmIF9feCkKewogIGl0ZXJhdG9yIF9faSA9IGJlZ2luKCk7CiAgc2l6ZV90eXBlIF9fbGVuID0g
MDsKICBmb3IgKCA7IF9faSAhPSBlbmQoKSAmJiBfX2xlbiA8IF9fbmV3X3NpemU7ICsrX19pLCAr
K19fbGVuKQogICAgOwogIGlmIChfX2xlbiA9PSBfX25ld19zaXplKQogICAgZXJhc2UoX19pLCBl
bmQoKSk7CiAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgaW5zZXJ0KGVuZCgp
LCBfX25ld19zaXplIC0gX19sZW4sIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4KbGlzdDxfVHAsIF9BbGxvYz4mIGxpc3Q8X1RwLCBfQWxsb2M+OjpvcGVyYXRvcj0o
Y29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKewogIGlmICh0aGlzICE9ICZfX3gpIHsKICAg
IGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICAgIGl0ZXJhdG9yIF9fbGFzdDEgPSBlbmQo
KTsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3QyID0gX194LmJlZ2luKCk7CiAgICBjb25zdF9p
dGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgCiAgICAgICpfX2ZpcnN0MSsrID0gKl9fZmlyc3Qy
Kys7CiAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgZXJhc2UoX19maXJzdDEsIF9f
bGFzdDEpOwogICAgZWxzZQogICAgICBpbnNlcnQoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIp
OwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6YXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9U
cCYgX192YWwpIHsKICBpdGVyYXRvciBfX2kgPSBiZWdpbigpOwogIGZvciAoIDsgX19pICE9IGVu
ZCgpICYmIF9fbiA+IDA7ICsrX19pLCAtLV9fbikKICAgICpfX2kgPSBfX3ZhbDsKICBpZiAoX19u
ID4gMCkKICAgIGluc2VydChlbmQoKSwgX19uLCBfX3ZhbCk7CiAgZWxzZQogICAgZXJhc2UoX19p
LCBlbmQoKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZApsaXN0PF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2Rp
c3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdDIsIF9JbnB1dEl0ZXIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCnsKICBpdGVyYXRvciBf
X2ZpcnN0MSA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogIGZvciAoIDsg
X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOyArK19fZmlyc3QxLCAr
K19fZmlyc3QyKQogICAgKl9fZmlyc3QxID0gKl9fZmlyc3QyOwogIGlmIChfX2ZpcnN0MiA9PSBf
X2xhc3QyKQogICAgZXJhc2UoX19maXJzdDEsIF9fbGFzdDEpOwogIGVsc2UKICAgIGluc2VydChf
X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjpyZW1vdmUoY29uc3QgX1RwJiBfX3Zh
bHVlKQp7CiAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0ID0g
ZW5kKCk7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBpdGVyYXRvciBfX25leHQg
PSBfX2ZpcnN0OwogICAgKytfX25leHQ7CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkgZXJh
c2UoX19maXJzdCk7CiAgICBfX2ZpcnN0ID0gX19uZXh0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+Ojp1bmlxdWUoKQp7CiAg
aXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0ID0gZW5kKCk7CiAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJz
dDsKICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICBpZiAoKl9fZmlyc3QgPT0gKl9f
bmV4dCkKICAgICAgZXJhc2UoX19uZXh0KTsKICAgIGVsc2UKICAgICAgX19maXJzdCA9IF9fbmV4
dDsKICAgIF9fbmV4dCA9IF9fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46Om1lcmdlKGxpc3Q8X1RwLCBfQWxsb2M+
JiBfX3gpCnsKICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0
MSA9IGVuZCgpOwogIGl0ZXJhdG9yIF9fZmlyc3QyID0gX194LmJlZ2luKCk7CiAgaXRlcmF0b3Ig
X19sYXN0MiA9IF9feC5lbmQoKTsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICBp
dGVyYXRvciBfX25leHQgPSBfX2ZpcnN0MjsKICAgICAgdHJhbnNmZXIoX19maXJzdDEsIF9fZmly
c3QyLCArK19fbmV4dCk7CiAgICAgIF9fZmlyc3QyID0gX19uZXh0OwogICAgfQogICAgZWxzZQog
ICAgICArK19fZmlyc3QxOwogIGlmIChfX2ZpcnN0MiAhPSBfX2xhc3QyKSB0cmFuc2ZlcihfX2xh
c3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6cmV2ZXJzZSgpIAp7CiAgIAogIGlmIChfTV9u
b2RlLT5fTV9uZXh0ICE9IF9NX25vZGUgJiYKICAgICAgKChfTm9kZSopIChfTV9ub2RlLT5fTV9u
ZXh0KSktPl9NX25leHQgIT0gX01fbm9kZSkgewogICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2lu
KCk7CiAgICArK19fZmlyc3Q7CiAgICB3aGlsZSAoX19maXJzdCAhPSBlbmQoKSkgewogICAgICBp
dGVyYXRvciBfX29sZCA9IF9fZmlyc3Q7CiAgICAgICsrX19maXJzdDsKICAgICAgdHJhbnNmZXIo
YmVnaW4oKSwgX19vbGQsIF9fZmlyc3QpOwogICAgfQogIH0KfSAgICAKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6c29ydCgpCnsKICAg
CiAgaWYgKF9NX25vZGUtPl9NX25leHQgIT0gX01fbm9kZSAmJgogICAgICAoKF9Ob2RlKikgKF9N
X25vZGUtPl9NX25leHQpKS0+X01fbmV4dCAhPSBfTV9ub2RlKSB7CiAgICBsaXN0PF9UcCwgX0Fs
bG9jPiBfX2NhcnJ5OwogICAgbGlzdDxfVHAsIF9BbGxvYz4gX19jb3VudGVyWzY0XTsKICAgIGlu
dCBfX2ZpbGwgPSAwOwogICAgd2hpbGUgKCFlbXB0eSgpKSB7CiAgICAgIF9fY2Fycnkuc3BsaWNl
KF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJlZ2luKCkpOwogICAgICBpbnQgX19pID0gMDsKICAg
ICAgd2hpbGUoX19pIDwgX19maWxsICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAg
ICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jYXJyeSk7CiAgICAgICAgX19jYXJyeS5zd2FwKF9f
Y291bnRlcltfX2krK10pOwogICAgICB9CiAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19p
XSk7ICAgICAgICAgCiAgICAgIGlmIChfX2kgPT0gX19maWxsKSArK19fZmlsbDsKICAgIH0gCgog
ICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19maWxsOyArK19faSkKICAgICAgX19jb3VudGVy
W19faV0ubWVyZ2UoX19jb3VudGVyW19faS0xXSk7CiAgICBzd2FwKF9fY291bnRlcltfX2ZpbGwt
MV0pOwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRl
IDxjbGFzcyBfUHJlZGljYXRlPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjpyZW1vdmVfaWYoX1By
ZWRpY2F0ZSBfX3ByZWQpCnsKICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICBpdGVyYXRv
ciBfX2xhc3QgPSBlbmQoKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGl0ZXJh
dG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICArK19fbmV4dDsKICAgIGlmIChfX3ByZWQoKl9fZmly
c3QpKSBlcmFzZShfX2ZpcnN0KTsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfQmluYXJ5UHJlZGlj
YXRlPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+Ojp1bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSBfX2Jp
bmFyeV9wcmVkKQp7CiAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19s
YXN0ID0gZW5kKCk7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgaXRlcmF0b3Ig
X19uZXh0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICBpZiAo
X19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgIGVyYXNlKF9fbmV4dCk7CiAg
ICBlbHNlCiAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICBfX25leHQgPSBfX2ZpcnN0OwogIH0K
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX1N0
cmljdFdlYWtPcmRlcmluZz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6bWVyZ2UobGlzdDxfVHAs
IF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1N0cmljdFdlYWtP
cmRlcmluZyBfX2NvbXApCnsKICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgaXRlcmF0
b3IgX19sYXN0MSA9IGVuZCgpOwogIGl0ZXJhdG9yIF9fZmlyc3QyID0gX194LmJlZ2luKCk7CiAg
aXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQoKTsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2Zp
cnN0MSkpIHsKICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7CiAgICAgIHRyYW5zZmVy
KF9fZmlyc3QxLCBfX2ZpcnN0MiwgKytfX25leHQpOwogICAgICBfX2ZpcnN0MiA9IF9fbmV4dDsK
ICAgIH0KICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MTsKICBpZiAoX19maXJzdDIgIT0gX19sYXN0
MikgdHJhbnNmZXIoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5n
Pgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+Ojpzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21w
KQp7CiAgIAogIGlmIChfTV9ub2RlLT5fTV9uZXh0ICE9IF9NX25vZGUgJiYKICAgICAgKChfTm9k
ZSopIChfTV9ub2RlLT5fTV9uZXh0KSktPl9NX25leHQgIT0gX01fbm9kZSkgewogICAgbGlzdDxf
VHAsIF9BbGxvYz4gX19jYXJyeTsKICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9fY291bnRlcls2NF07
CiAgICBpbnQgX19maWxsID0gMDsKICAgIHdoaWxlICghZW1wdHkoKSkgewogICAgICBfX2NhcnJ5
LnNwbGljZShfX2NhcnJ5LmJlZ2luKCksICp0aGlzLCBiZWdpbigpKTsKICAgICAgaW50IF9faSA9
IDA7CiAgICAgIHdoaWxlKF9faSA8IF9fZmlsbCAmJiAhX19jb3VudGVyW19faV0uZW1wdHkoKSkg
ewogICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnksIF9fY29tcCk7CiAgICAgICAg
X19jYXJyeS5zd2FwKF9fY291bnRlcltfX2krK10pOwogICAgICB9CiAgICAgIF9fY2Fycnkuc3dh
cChfX2NvdW50ZXJbX19pXSk7ICAgICAgICAgCiAgICAgIGlmIChfX2kgPT0gX19maWxsKSArK19f
ZmlsbDsKICAgIH0gCgogICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19maWxsOyArK19faSkg
CiAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltfX2ktMV0sIF9fY29tcCk7CiAg
ICBzd2FwKF9fY291bnRlcltfX2ZpbGwtMV0pOwogIH0KfQoKCgoKCgoKCiAgCgoKCiAKIAogCiMg
MzQgIi91c3IvbGliL2djYy1saWIvaTM4Ni1zbGFja3dhcmUtbGludXgvMi45NS4zLy4uLy4uLy4u
Ly4uL2luY2x1ZGUvZysrLTMvbGlzdCIgMiAzCgoKCgogCiAKIAojIDMgIm1haW4uY3BwIiAyCgoK
Y2xhc3MgRm9vIHsKICAgIHB1YmxpYzoKICAgICAgICBpbnQgbXl2YXI7CiAgICBwdWJsaWM6CiAg
ICAgICAgRm9vIChpbnQgdikgeyBteXZhciA9IHY7IH0KCSAgICBjbGFzcyBsdCB7CgkgICAgICAg
IHByaXZhdGU6CgkgICAgICAgICAgICBpbnQgYm91bmQ7CgkgICAgICAgIHB1YmxpYzoKCSAgICAg
ICAgICAgIGx0KGNvbnN0IGludCBiKSA6Ym91bmQoYikgeyB9CgkgICAgICAgICAgICBib29sIG9w
ZXJhdG9yKCkgKGNvbnN0IEZvbyAmIGZvbykgewoJICAgICAgICAgICAgICAgIHJldHVybiBmb28u
bXl2YXIgPCBib3VuZDsKCSAgICAgICAgICAgIH0KCSAgICB9Owp9OwoKaW50IG1haW4gKHZvaWQp
CnsKICAgICAKICAgIGxpc3Q8Rm9vPiBsOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7IGkr
KykgCiAgICAgICAgbC5wdXNoX2JhY2soRm9vKGkpKTsKCiAgICAgCgogICAgIAogICAgcmVtb3Zl
X2lmKCBsLmJlZ2luKCksIGwuZW5kKCksIG5vdDEoIEZvbzo6bHQoNTApICkgKTsKCiAgICByZXR1
cm4gMDsKfQo=



More information about the Gcc-bugs mailing list