c++/4968: Internal compiler error; reason unclear (templates, typing?)

kuchen@uni-muenster.de kuchen@uni-muenster.de
Sun Nov 18 20:05:00 GMT 2001


>Number:         4968
>Category:       c++
>Synopsis:       Internal compiler error; reason unclear (templates, typing?)
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Nov 29 05:46:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Uni Muenster
>Release:        gcc version 2.95.2 19991024 (release)
>Organization:
>Environment:
sparc-sun-solaris2.7/2.95.2 (from gcc -v)
>Description:
The compiler reports an internal error. The reason is
not clear to me. It probably has to do with a typing
problem in my C++ program and with the use of templates.

command line and compiler output:
laokoon:Skeletons 224) g++ -save-temps gauss.cpp
gauss.cpp: In function `class DistributedArray<int,20> gauss<int, 20>(DistributedMatrix<int,20,21> &)':
gauss.cpp:47:   instantiated from here
gauss.cpp:30: Internal compiler error.
gauss.cpp:30: Please submit a full bug report.
gauss.cpp:30: See <URL:http://www.gnu.org/software/gcc/faq.html#bugreport> for instructions.


As indicated on page
http://www.gnu.org/software/gcc/bugs.html#unknown
I have only attached the preprocessed file gauss.ii
and omitted the files gauss.cpp, Skeleton.h, and mpi.h.
In case some of the latter is needed, I am ready to
supply it.

>How-To-Repeat:
g++ gauss.cpp
>Fix:
unknown
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="gauss.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="gauss.ii"

IyAxICJnYXVzcy5jcHAiCiMgMSAiU2tlbGV0b24uaCIgMQogCiMgMSAiL3Vzci9pbmNsdWRlL3N0
ZGlvLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCiAKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgj
KXN0ZGlvLmgJMS42OQk5OC8wNy8xMyBTTUkiCQoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1
cmVfdGVzdHMuaCIgMSAzIDQKIAoKCgoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylmZWF0
dXJlX3Rlc3RzLmgJMS4xNwk5Ny8xMi8wNCBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvaXNh
X2RlZnMuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWlzYV9kZWZzLmgJMS4x
NQk5Ny8xMS8yMiBTTUkiCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKIAoKCgoK
CgojIDIxMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAzIDQKCgogCgoKCgoKCiAKCgoK
CgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgogCgoKCgoKCgog
CgoKCgoKCgoKIAoKCgojIDMwOSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAzIDQKCgog
CgoKCgoKCgoKCgoKfQoKCgojIDE1ICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIg
MiAzIDQKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCn0KCgoKIyAyMiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CgojIDEg
Ii91c3IvaW5jbHVkZS9zeXMvdmFfbGlzdC5oIiAxIDMgNAogCgoKCgoKCgojcHJhZ21hIGlkZW50
CSJAKCMpdmFfbGlzdC5oCTEuMTEJOTcvMTEvMjIgU01JIgoKIAoKCgoKCgoKCgoKZXh0ZXJuICJD
IiB7CgoKCnR5cGVkZWYgdm9pZCAqX192YV9saXN0OwoKCgoKCn0KCgoKIyAyMyAiL3Vzci9pbmNs
dWRlL3N0ZGlvLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9zdGRpb190YWcuaCIgMSAzIDQK
IAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0ZGlvX3RhZy5oCTEuMwk5OC8wNC8yMCBTTUki
CgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgRklMRSAgX19GSUxFOwoKCgp9
CgoKCiMgMjQgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUv
c3RkaW9faW1wbC5oIiAxIDMgNAogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc3RkaW9faW1w
bC5oCTEuNwk5OC8wNC8xNyBTTUkiCgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCnR5cGVkZWYgaW50
CXNzaXplX3Q7CQkgCgoKCiMgMzYgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgiIDMgNAoKCnN0
cnVjdCBGSUxFIAkgCnsKCgoKCglzc2l6ZV90CQlfY250OwkgCgl1bnNpZ25lZCBjaGFyCSpfcHRy
OwkgCgoJdW5zaWduZWQgY2hhcgkqX2Jhc2U7CSAKCXVuc2lnbmVkIGNoYXIJX2ZsYWc7CSAKCXVu
c2lnbmVkIGNoYXIJX2ZpbGU7CSAKCXVuc2lnbmVkCV9fb3JpZW50YXRpb246MjsgIAoJdW5zaWdu
ZWQJX19maWxsZXI6NjsKfTsKCgoKCn0KCgoKIyAyNSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIg
MyA0CgoKIAoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKdHlwZWRlZglfX0ZJTEUgRklMRTsKCgoK
CgoKCnR5cGVkZWYgdW5zaWduZWQgaW50CXNpemVfdDsJCSAKCgoKCiAKCgoKCgp0eXBlZGVmCWxv
bmcgbG9uZwlfX2xvbmdsb25nX3Q7CgoKCgoKCgoKCgoKCgp0eXBlZGVmIGxvbmcJCW9mZl90OwoK
CgoKCgoKdHlwZWRlZiBfX2xvbmdsb25nX3QJb2ZmNjRfdDsKCgoKCgoKdHlwZWRlZiBsb25nCQlm
cG9zX3Q7CgoKCgoKCgp0eXBlZGVmIF9fbG9uZ2xvbmdfdAlmcG9zNjRfdDsKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIEZJTEUJX19pb2JbMjAgXTsKCgoKCgoKCgoK
CgpleHRlcm4gdW5zaWduZWQgY2hhcgkgX3NpYnVmW10sIF9zb2J1ZltdOwoKCiAKIyAyMjcgIi91
c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIJKl9idWZlbmR0
YWJbXTsKZXh0ZXJuIEZJTEUJCSpfbGFzdGJ1ZjsKCgogCiMgMjU3ICIvdXNyL2luY2x1ZGUvc3Rk
aW8uaCIgMyA0CgoKCgpleHRlcm4gaW50CXJlbW92ZShjb25zdCBjaGFyICopOwpleHRlcm4gaW50
CXJlbmFtZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFCSp0bXBmaWxl
KHZvaWQpOwpleHRlcm4gY2hhcgkqdG1wbmFtKGNoYXIgKik7CgoKCmV4dGVybiBpbnQJZmNsb3Nl
KEZJTEUgKik7CmV4dGVybiBpbnQJZmZsdXNoKEZJTEUgKik7CmV4dGVybiBGSUxFCSpmb3Blbihj
b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFCSpmcmVvcGVuKGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqLCBGSUxFICopOwpleHRlcm4gdm9pZAlzZXRidWYoRklMRSAqLCBj
aGFyICopOwoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlcihGSUxFICosIGNoYXIgKiwgc2l6ZV90KTsK
ZXh0ZXJuIGludCBzZXRsaW5lYnVmKEZJTEUgKik7CgpleHRlcm4gaW50CXNldHZidWYoRklMRSAq
LCBjaGFyICosIGludCwgc2l6ZV90KTsKIApleHRlcm4gaW50CWZwcmludGYoRklMRSAqLCBjb25z
dCBjaGFyICosIC4uLik7CiAKZXh0ZXJuIGludAlmc2NhbmYoRklMRSAqLCBjb25zdCBjaGFyICos
IC4uLik7CiAKZXh0ZXJuIGludAlwcmludGYoY29uc3QgY2hhciAqLCAuLi4pOwogCmV4dGVybiBp
bnQJc2NhbmYoY29uc3QgY2hhciAqLCAuLi4pOwoKCgogCmV4dGVybiBpbnQJc25wcmludGYoY2hh
ciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKCiAKZXh0ZXJuIGludAlzcHJpbnRmKGNo
YXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogCmV4dGVybiBpbnQJc3NjYW5mKGNvbnN0IGNoYXIg
KiwgY29uc3QgY2hhciAqLCAuLi4pOwpleHRlcm4gaW50CXZmcHJpbnRmKEZJTEUgKiwgY29uc3Qg
Y2hhciAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gaW50CXZwcmludGYoY29uc3QgY2hhciAqLCBfX3Zh
X2xpc3QpOwoKCgpleHRlcm4gaW50CXZzbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hh
ciAqLCBfX3ZhX2xpc3QpOwoKZXh0ZXJuIGludAl2c3ByaW50ZihjaGFyICosIGNvbnN0IGNoYXIg
KiwgX192YV9saXN0KTsKZXh0ZXJuIGludAlmZ2V0YyhGSUxFICopOwpleHRlcm4gY2hhcgkqZmdl
dHMoY2hhciAqLCBpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQJZnB1dGMoaW50LCBGSUxFICopOwpl
eHRlcm4gaW50CWZwdXRzKGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIGludAlnZXRjKEZJ
TEUgKik7CmV4dGVybiBpbnQJZ2V0Y2hhcih2b2lkKTsKZXh0ZXJuIGNoYXIJKmdldHMoY2hhciAq
KTsKZXh0ZXJuIGludAlwdXRjKGludCwgRklMRSAqKTsKZXh0ZXJuIGludAlwdXRjaGFyKGludCk7
CmV4dGVybiBpbnQJcHV0cyhjb25zdCBjaGFyICopOwpleHRlcm4gaW50CXVuZ2V0YyhpbnQsIEZJ
TEUgKik7CmV4dGVybiBzaXplX3QJZnJlYWQodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklMRSAq
KTsKZXh0ZXJuIHNpemVfdAlmd3JpdGUoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgRklM
RSAqKTsKZXh0ZXJuIGludAlmZ2V0cG9zKEZJTEUgKiwgZnBvc190ICopOwpleHRlcm4gaW50CWZz
ZWVrKEZJTEUgKiwgbG9uZywgaW50KTsKZXh0ZXJuIGludAlmc2V0cG9zKEZJTEUgKiwgY29uc3Qg
ZnBvc190ICopOwpleHRlcm4gbG9uZwlmdGVsbChGSUxFICopOwpleHRlcm4gdm9pZAlyZXdpbmQo
RklMRSAqKTsKZXh0ZXJuIHZvaWQJY2xlYXJlcnIoRklMRSAqKTsKZXh0ZXJuIGludAlmZW9mKEZJ
TEUgKik7CmV4dGVybiBpbnQJZmVycm9yKEZJTEUgKik7CmV4dGVybiB2b2lkCXBlcnJvcihjb25z
dCBjaGFyICopOwoKCmV4dGVybiBpbnQJX19maWxidWYoRklMRSAqKTsKZXh0ZXJuIGludAlfX2Zs
c2J1ZihpbnQsIEZJTEUgKik7CgoKIAoKCgoKCmV4dGVybiBGSUxFCSpmZG9wZW4oaW50LCBjb25z
dCBjaGFyICopOwpleHRlcm4gY2hhcgkqY3Rlcm1pZChjaGFyICopOwpleHRlcm4gaW50CWZpbGVu
byhGSUxFICopOwoKCgogCgoKIyAzNTggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgogCgoK
CgpleHRlcm4gRklMRQkqcG9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4g
Y2hhcgkqY3VzZXJpZChjaGFyICopOwpleHRlcm4gY2hhcgkqdGVtcG5hbShjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQJZ2V0b3B0KGludCwgY2hhciAqY29uc3QgKiwgY29u
c3QgY2hhciAqKTsKCmV4dGVybiBpbnQJZ2V0c3Vib3B0KGNoYXIgKiosIGNoYXIgKmNvbnN0ICos
IGNoYXIgKiopOwoKZXh0ZXJuIGNoYXIJKm9wdGFyZzsKZXh0ZXJuIGludAlvcHRpbmQsIG9wdGVy
ciwgb3B0b3B0OwpleHRlcm4gaW50CWdldHcoRklMRSAqKTsKZXh0ZXJuIGludAlwdXR3KGludCwg
RklMRSAqKTsKZXh0ZXJuIGludAlwY2xvc2UoRklMRSAqKTsKCgoKIAoKCgpleHRlcm4gaW50CWZz
ZWVrbyhGSUxFICosIG9mZl90LCBpbnQpOwpleHRlcm4gb2ZmX3QJZnRlbGxvKEZJTEUgKik7CgoK
IAoKCgoKCmV4dGVybiBGSUxFCSpmb3BlbjY0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK
ZXh0ZXJuIEZJTEUJKmZyZW9wZW42NChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgRklMRSAq
KTsKZXh0ZXJuIEZJTEUJKnRtcGZpbGU2NCh2b2lkKTsKZXh0ZXJuIGludAlmZ2V0cG9zNjQoRklM
RSAqLCBmcG9zNjRfdCAqKTsKZXh0ZXJuIGludAlmc2V0cG9zNjQoRklMRSAqLCBjb25zdCBmcG9z
NjRfdCAqKTsKZXh0ZXJuIGludAlmc2Vla282NChGSUxFICosIG9mZjY0X3QsIGludCk7CmV4dGVy
biBvZmY2NF90CWZ0ZWxsbzY0KEZJTEUgKik7CgoKIyA1MTUgIi91c3IvaW5jbHVkZS9zdGRpby5o
IiAzIDQKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDU2NyAiL3Vzci9pbmNsdWRlL3N0
ZGlvLmgiIDMgNAoKCgoKCn0KCgoKIyAyICJTa2VsZXRvbi5oIiAyCgojIDEgIi91c3IvbG9jYWwv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvaW9zdHJlYW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFn
bWEgaW50ZXJmYWNlCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuNy8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCiAgIAoKCgpl
eHRlcm4gIkMiIHsKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi43LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2xpYmlvLmgiIDEgMwogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjcvMi45NS4yLy4uLy4uLy4uLy4uL3NwYXJjLXN1bi1zb2xhcmlzMi43L2lu
Y2x1ZGUvX0dfY29uZmlnLmgiIDEgMyA0CiAgCgoKCgoKCgoKCnR5cGVkZWYgICAgICAgICAgaW50
ICAgX0dfaW50OF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fUUlfXykpKTsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgIF9HX3VpbnQ4X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkp
Owp0eXBlZGVmICAgICAgICAgIGludCAgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVf
XyhfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRl
X18oKF9fbW9kZV9fKF9fSElfXykpKTsKdHlwZWRlZiAgICAgICAgICBpbnQgIF9HX2ludDMyX3Qg
X19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBf
R191aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CnR5cGVkZWYgICAg
ICAgICAgaW50ICBfR19pbnQ2NF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDY0X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18o
X19ESV9fKSkpOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBfR19sbG9uZzsKX19l
eHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfR191bGxvbmc7CgoKCgoKCgoK
dHlwZWRlZiBsb25nIF9HX2Nsb2NrX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19kZXZfdDsK
dHlwZWRlZiBsb25nIF9HX2Zwb3NfdDsKdHlwZWRlZiBsb25nIF9HX2dpZF90Owp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgX0dfaW5vX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19tb2RlX3Q7CnR5
cGVkZWYgdW5zaWduZWQgbG9uZyBfR19ubGlua190Owp0eXBlZGVmIGxvbmcgX0dfb2ZmX3Q7CnR5
cGVkZWYgbG9uZyBfR19waWRfdDsKCgoKdHlwZWRlZiBpbnQgX0dfcHRyZGlmZl90Owp0eXBlZGVm
IGludCAgIF9HX3NpZ3NldF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBfR19zaXplX3Q7CnR5
cGVkZWYgbG9uZyBfR190aW1lX3Q7CnR5cGVkZWYgbG9uZyBfR191aWRfdDsKdHlwZWRlZiBsb25n
IGludCBfR193Y2hhcl90OwoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGludCBfR19zc2l6ZV90Owp0
eXBlZGVmIHVuc2lnbmVkIGludCBfR193aW50X3Q7CnR5cGVkZWYgdm9pZCAqIF9HX3ZhX2xpc3Q7
CgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi43LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAoKCgoKCgogCgoKIyAxOSAi
L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1LjIvaW5jbHVk
ZS9zdGRkZWYuaCIgMyA0CgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoK
CiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu
aCIgMyA0CgoKIAoKIAoKIyAxOTAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjcvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCgogCgoKCgogCgojIDI3MSAi
L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1LjIvaW5jbHVk
ZS9zdGRkZWYuaCIgMyA0CgoKIyAyODMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjcvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCiAKCiAKCiMgMzE3ICIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzIuOTUuMi9pbmNsdWRl
L3N0ZGRlZi5oIiAzIDQKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA4NiAiL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1LjIvLi4vLi4vLi4vLi4vc3Bh
cmMtc3VuLXNvbGFyaXMyLjcvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzIDQKCgojIDMwICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzIuOTUuMi8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL2xpYmlvLmgiIDIgMwoKCgoKCgoKCgoKCgoKCgoKCiMgNTUgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMi45NS4yLy4uLy4uLy4uLy4u
L2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgoKCgojIDEwNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
Ny8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9saWJpby5oIiAzCgoKCgoKCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX0lP
X2p1bXBfdDsgIHN0cnVjdCBfSU9fRklMRTsKCiAKIyAxNzQgIi91c3IvbG9jYWwvbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
bGliaW8uaCIgMwoKCgoKCgoKCgogICAgdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKIAoK
c3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3Qg
X0lPX0ZJTEUgKl9zYnVmOwogICAKCiAgIAogIGludCBfcG9zOwojIDIwNyAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9saWJpby5oIiAzCgp9OwoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwkJ
IAoKCiAgIAogICAKICBjaGFyKiBfSU9fcmVhZF9wdHI7CSAKICBjaGFyKiBfSU9fcmVhZF9lbmQ7
CSAKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CSAKICBj
aGFyKiBfSU9fd3JpdGVfcHRyOwkgCiAgY2hhciogX0lPX3dyaXRlX2VuZDsJIAogIGNoYXIqIF9J
T19idWZfYmFzZTsJIAogIGNoYXIqIF9JT19idWZfZW5kOwkgCiAgIAogIGNoYXIgKl9JT19zYXZl
X2Jhc2U7ICAKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7ICAgCiAgY2hhciAqX0lPX3NhdmVfZW5k
OyAgCgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpf
Y2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKCgoKICBfR19vZmZfdCAgX29m
ZnNldDsKCgoKICAgCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgY2hhciBfdW51c2Vk
OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKICAgCgoKCgoKCgoKfTsKCgoKCgoKCgoKCgpzdHJ1Y3Qg
X0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT19zdGRpbl8sIF9J
T19zdGRvdXRfLCBfSU9fc3RkZXJyXzsKCgoKCgogCnR5cGVkZWYgc3RydWN0CnsKICBfR19zc2l6
ZV90ICAoKnJlYWQpICAoc3RydWN0IF9JT19GSUxFICosIHZvaWQgKiwgX0dfc3NpemVfdCApICA7
CiAgX0dfc3NpemVfdCAgKCp3cml0ZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgY29uc3Qgdm9pZCAq
LCBfR19zc2l6ZV90ICkgIDsKICBfR19mcG9zX3QgICgqc2VlaykgIChzdHJ1Y3QgX0lPX0ZJTEUg
KiwgX0dfb2ZmX3QgLCBpbnQpICA7CiAgaW50ICgqY2xvc2UpICAoc3RydWN0IF9JT19GSUxFICop
ICA7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKCiAKc3RydWN0IF9JT19jb29raWVfZmls
ZQp7CiAgc3RydWN0IF9JT19GSUxFIGZpbGU7CiAgY29uc3Qgdm9pZCAqdnRhYmxlOwogIHZvaWQg
KmNvb2tpZTsKICBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGlvX2Z1bmN0aW9uczsKfTsKCgoK
ZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAgKF9JT19GSUxFICopICA7CmV4
dGVybiBpbnQgX191ZmxvdyAgKF9JT19GSUxFICopICA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAg
KF9JT19GSUxFICosIGludCkgIDsKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT19nZXRj
ICAoX0lPX0ZJTEUgKl9fZnApICA7CmV4dGVybiBpbnQgX0lPX3B1dGMgIChpbnQgX19jLCBfSU9f
RklMRSAqX19mcCkgIDsKZXh0ZXJuIGludCBfSU9fZmVvZiAgKF9JT19GSUxFICpfX2ZwKSAgOwpl
eHRlcm4gaW50IF9JT19mZXJyb3IgIChfSU9fRklMRSAqX19mcCkgIDsKCmV4dGVybiBpbnQgX0lP
X3BlZWtjX2xvY2tlZCAgKF9JT19GSUxFICpfX2ZwKSAgOwoKIAoKCgpleHRlcm4gdm9pZCBfSU9f
ZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlICAo
X0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlICAoX0lPX0ZJTEUgKikg
IDsKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgIChfSU9fRklMRSAqLCBjb25z
dCBjaGFyICosIF9HX3ZhX2xpc3QgLCBpbnQgKikgIDsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYg
IChfSU9fRklMRSAqLCBjb25zdCBjaGFyICosIF9HX3ZhX2xpc3QgKSAgOwpleHRlcm4gX0dfc3Np
emVfdCAgX0lPX3BhZG4gIChfSU9fRklMRSAqLCBpbnQsIF9HX3NzaXplX3QgKSAgOwpleHRlcm4g
X0dfc2l6ZV90ICBfSU9fc2dldG4gIChfSU9fRklMRSAqLCB2b2lkICosIF9HX3NpemVfdCApICA7
CgoKCgoKZXh0ZXJuIF9HX2Zwb3NfdCAgX0lPX3NlZWtvZmYgIChfSU9fRklMRSAqLCBfR19vZmZf
dCAsIGludCwgaW50KSAgOwpleHRlcm4gX0dfZnBvc190ICBfSU9fc2Vla3BvcyAgKF9JT19GSUxF
ICosIF9HX2Zwb3NfdCAsIGludCkgIDsKCgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJl
YSAgKF9JT19GSUxFICopICA7CgoKfQoKCgojIDM2ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi43LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmVh
bWJ1Zi5oIiAyIDMKCn0KIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQysrIiB7
CmNsYXNzIGlzdHJlYW07ICAKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoKIAoKCgoK
CgoKdHlwZWRlZiBfR19vZmZfdCAgc3RyZWFtb2ZmOwp0eXBlZGVmIF9HX2Zwb3NfdCAgc3RyZWFt
cG9zOwoKdHlwZWRlZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOwoKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIF9fZm10ZmxhZ3M7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX2lvc3RhdGU7CgpzdHJ1Y3Qg
X2lvc19maWVsZHMKeyAgCiAgICBzdHJlYW1idWYgKl9zdHJidWY7CiAgICBvc3RyZWFtKiBfdGll
OwogICAgaW50IF93aWR0aDsKICAgIF9fZm10ZmxhZ3MgX2ZsYWdzOwogICAgc2hvcnQgIF9maWxs
OwogICAgX19pb3N0YXRlIF9zdGF0ZTsKICAgIF9faW9zdGF0ZSBfZXhjZXB0aW9uczsKICAgIGlu
dCBfcHJlY2lzaW9uOwoKICAgIHZvaWQgKl9hcnJheXM7ICAKfTsKCgoKCgoKCgoKCgoKCgoKIyAx
MjQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMi45NS4yLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKCgpjbGFzcyBpb3MgOiBwdWJs
aWMgX2lvc19maWVsZHMgewogIGlvcyYgb3BlcmF0b3I9KGlvcyYpOyAgIAogIGlvcyAoY29uc3Qg
aW9zJik7ICAKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9fZm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICB0
eXBlZGVmIGludCBpb3N0YXRlOwogICAgdHlwZWRlZiBpbnQgb3Blbm1vZGU7CiAgICB0eXBlZGVm
IF9HX3NzaXplX3QgIHN0cmVhbXNpemU7CiAgICBlbnVtIGlvX3N0YXRlIHsKCWdvb2RiaXQgPSAw
ICwKCWVvZmJpdCA9IDEgLAoJZmFpbGJpdCA9IDIgLAoJYmFkYml0ID0gNCAgfTsKICAgIGVudW0g
b3Blbl9tb2RlIHsKCWluID0gMSAsCglvdXQgPSAyICwKCWF0ZSA9IDQgLAoJYXBwID0gOCAsCgl0
cnVuYyA9IDE2ICwKCW5vY3JlYXRlID0gMzIgLAoJbm9yZXBsYWNlID0gNjQgLAoJYmluID0gMTI4
ICwgIAoJYmluYXJ5ID0gMTI4ICB9OwogICAgZW51bSBzZWVrX2RpciB7IGJlZywgY3VyLCBlbmR9
OwogICAgdHlwZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7CiAgICAgCiAgICBlbnVtIHsgc2tp
cHdzPSAwMSAsCgkgICBsZWZ0PSAwMiAsIHJpZ2h0PSAwNCAsIGludGVybmFsPSAwMTAgLAoJICAg
ZGVjPSAwMjAgLCBvY3Q9IDA0MCAsIGhleD0gMDEwMCAsCgkgICBzaG93YmFzZT0gMDIwMCAsIHNo
b3dwb2ludD0gMDQwMCAsCgkgICB1cHBlcmNhc2U9IDAxMDAwICwgc2hvd3Bvcz0gMDIwMDAgLAoJ
ICAgc2NpZW50aWZpYz0gMDQwMDAgLCBmaXhlZD0gMDEwMDAwICwKCSAgIHVuaXRidWY9IDAyMDAw
MCAsIHN0ZGlvPSAwNDAwMDAgCgoKCgkgICB9OwogICAgZW51bSB7ICAKCWJhc2VmaWVsZD1kZWMr
b2N0K2hleCwKCWZsb2F0ZmllbGQgPSBzY2llbnRpZmljK2ZpeGVkLAoJYWRqdXN0ZmllbGQgPSBs
ZWZ0K3JpZ2h0K2ludGVybmFsCiAgICB9OwoKIyAxNzcgIi91c3IvbG9jYWwvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjcvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Ry
ZWFtYnVmLmgiIDMKCgogICAgb3N0cmVhbSogdGllKCkgY29uc3QgeyByZXR1cm4gX3RpZTsgfQog
ICAgb3N0cmVhbSogdGllKG9zdHJlYW0qIHZhbCkgeyBvc3RyZWFtKiBzYXZlPV90aWU7IF90aWU9
dmFsOyByZXR1cm4gc2F2ZTsgfQoKICAgICAKICAgIHNob3J0ICBmaWxsKCkgY29uc3QgeyByZXR1
cm4gX2ZpbGw7IH0KICAgIHNob3J0ICBmaWxsKHNob3J0ICBuZXdmKQoJe3Nob3J0ICBvbGRmID0g
X2ZpbGw7IF9maWxsID0gbmV3ZjsgcmV0dXJuIG9sZGY7fQogICAgZm10ZmxhZ3MgZmxhZ3MoKSBj
b25zdCB7IHJldHVybiBfZmxhZ3M7IH0KICAgIGZtdGZsYWdzIGZsYWdzKGZtdGZsYWdzIG5ld192
YWwpIHsKCWZtdGZsYWdzIG9sZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5ld192YWw7IHJldHVy
biBvbGRfdmFsOyB9CiAgICBpbnQgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX3ByZWNpc2lv
bjsgfQogICAgaW50IHByZWNpc2lvbihpbnQgbmV3cCkgewoJdW5zaWduZWQgc2hvcnQgb2xkcCA9
IF9wcmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsKCXJldHVybiBv
bGRwOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCkgewoJZm10ZmxhZ3Mgb2xkYml0
cyA9IF9mbGFnczsKCV9mbGFncyB8PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFn
cyBzZXRmKGZtdGZsYWdzIHZhbCwgZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xkYml0cyA9
IF9mbGFnczsKCV9mbGFncyA9IChfZmxhZ3MgJiB+bWFzaykgfCAodmFsICYgbWFzayk7IHJldHVy
biBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyB1bnNldGYoZm10ZmxhZ3MgbWFzaykgewoJZm10Zmxh
Z3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyAmPSB+bWFzazsgcmV0dXJuIG9sZGJpdHM7IH0K
ICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF93aWR0aDsgfQogICAgaW50IHdpZHRoKGlu
dCB2YWwpIHsgaW50IHNhdmUgPSBfd2lkdGg7IF93aWR0aCA9IHZhbDsgcmV0dXJuIHNhdmU7IH0K
CgoKCiAgICB2b2lkIF90aHJvd19mYWlsdXJlKCkgY29uc3QgeyB9CgogICAgdm9pZCBjbGVhcihp
b3N0YXRlIHN0YXRlID0gMCkgewoJX3N0YXRlID0gX3N0cmJ1ZiA/IHN0YXRlIDogc3RhdGV8YmFk
Yml0OwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2
b2lkIHNldChpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7CglpZiAoX3N0YXRlICYgX2V4
Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0c3RhdGUoaW9zdGF0ZSBm
bGFnKSB7IF9zdGF0ZSB8PSBmbGFnOyAgCglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJv
d19mYWlsdXJlKCk7IH0KICAgIGludCBnb29kKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlID09IDA7
IH0KICAgIGludCBlb2YoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmVvZmJpdDsgfQog
ICAgaW50IGZhaWwoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiAoaW9zOjpiYWRiaXR8aW9zOjpm
YWlsYml0KTsgfQogICAgaW50IGJhZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6YmFk
Yml0OyB9CiAgICBpb3N0YXRlIHJkc3RhdGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7IH0KICAg
IG9wZXJhdG9yIHZvaWQqKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpID8gKHZvaWQqKTAgOiAodm9p
ZCopKC0xKTsgfQogICAgaW50IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKTsgfQog
ICAgaW9zdGF0ZSBleGNlcHRpb25zKCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7IH0KICAg
IHZvaWQgZXhjZXB0aW9ucyhpb3N0YXRlIGVuYWJsZSkgewoJX2V4Y2VwdGlvbnMgPSBlbmFibGU7
CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KCiAgICBzdHJl
YW1idWYqIHJkYnVmKCkgY29uc3QgeyByZXR1cm4gX3N0cmJ1ZjsgfQogICAgc3RyZWFtYnVmKiBy
ZGJ1ZihzdHJlYW1idWYgKl9zKSB7CiAgICAgIHN0cmVhbWJ1ZiAqX29sZCA9IF9zdHJidWY7IF9z
dHJidWYgPSBfczsgY2xlYXIgKCk7IHJldHVybiBfb2xkOyB9CgogICAgc3RhdGljIGludCBzeW5j
X3dpdGhfc3RkaW8oaW50IG9uKTsKICAgIHN0YXRpYyB2b2lkIHN5bmNfd2l0aF9zdGRpbygpIHsg
c3luY193aXRoX3N0ZGlvKDEpOyB9CiAgICBzdGF0aWMgZm10ZmxhZ3MgYml0YWxsb2MoKTsKICAg
IHN0YXRpYyBpbnQgeGFsbG9jKCk7CiAgICB2b2lkKiYgcHdvcmQoaW50KTsKICAgIHZvaWQqIHB3
b3JkKGludCkgY29uc3Q7CiAgICBsb25nJiBpd29yZChpbnQpOwogICAgbG9uZyBpd29yZChpbnQp
IGNvbnN0OwoKCgoKCgoKCgogICAgIAogICAgY2xhc3MgSW5pdCB7CiAgICBwdWJsaWM6CiAgICAg
IEluaXQgKCkgeyB9CiAgICB9OwoKICBwcm90ZWN0ZWQ6CiAgICBpbmxpbmUgaW9zKHN0cmVhbWJ1
Ziogc2IgPSAwLCBvc3RyZWFtKiB0aWVfdG8gPSAwKTsKICAgIGlubGluZSB2aXJ0dWFsIH5pb3Mo
KTsKICAgIGlubGluZSB2b2lkIGluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllID0gMCk7
Cn07CgoKCgp0eXBlZGVmIGlvczo6c2Vla19kaXIgX3NlZWtfZGlyOwoKCiAKIAogCiAKIAoKIAog
CmNsYXNzIHN0cmVhbW1hcmtlciA6IHByaXZhdGUgX0lPX21hcmtlciB7CiAgICBmcmllbmQgY2xh
c3Mgc3RyZWFtYnVmOwogICAgdm9pZCBzZXRfb2Zmc2V0KGludCBvZmZzZXQpIHsgX3BvcyA9IG9m
ZnNldDsgfQogIHB1YmxpYzoKICAgIHN0cmVhbW1hcmtlcihzdHJlYW1idWYgKnNiKTsKICAgIH5z
dHJlYW1tYXJrZXIoKTsKICAgIGludCBzYXZpbmcoKSB7IHJldHVybiAgMTsgfQogICAgaW50IGRl
bHRhKHN0cmVhbW1hcmtlciYpOwogICAgaW50IGRlbHRhKCk7Cn07CgpzdHJ1Y3Qgc3RyZWFtYnVm
IDogcHVibGljIF9JT19GSUxFIHsgIAogICAgZnJpZW5kIGNsYXNzIGlvczsKICAgIGZyaWVuZCBj
bGFzcyBpc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIG9zdHJlYW07CiAgICBmcmllbmQgY2xhc3Mg
c3RyZWFtbWFya2VyOwogICAgY29uc3Qgdm9pZCAqJl92dGFibGUoKSB7IHJldHVybiAqKGNvbnN0
IHZvaWQqKikoKF9JT19GSUxFKil0aGlzICsgMSk7IH0KICBwcm90ZWN0ZWQ6CiAgICBzdGF0aWMg
c3RyZWFtYnVmKiBfbGlzdF9hbGw7ICAKICAgIF9JT19GSUxFKiYgeGNoYWluKCkgeyByZXR1cm4g
X2NoYWluOyB9CiAgICB2b2lkIF91bl9saW5rKCk7CiAgICB2b2lkIF9saW5rX2luKCk7CiAgICBj
aGFyKiBncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19z
YXZlX2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0KICAgIGNoYXIqIHBwdHIoKSBjb25zdCB7IHJldHVy
biBfSU9fd3JpdGVfcHRyOyB9CiAgICBjaGFyKiBlZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgIGNo
YXIqIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRlX2VuZDsgfQogICAgY2hhciogcGJh
c2UoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfYmFzZTsgfQogICAgY2hhciogZWJhY2soKSBj
b25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9J
T19yZWFkX2Jhc2U7fQogICAgY2hhciogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfYmFz
ZTsgfQogICAgY2hhciogZWJ1ZigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kOyB9CiAgICBp
bnQgYmxlbigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kIC0gX0lPX2J1Zl9iYXNlOyB9CiAg
ICB2b2lkIHhwdXRfY2hhcihjaGFyIGMpIHsgKl9JT193cml0ZV9wdHIrKyA9IGM7IH0KICAgIGlu
dCB4ZmxhZ3MoKSB7IHJldHVybiBfZmxhZ3MgOyB9CiAgICBpbnQgeGZsYWdzKGludCBmKSB7aW50
IGZsID0gX2ZsYWdzIDsgX2ZsYWdzICA9IGY7IHJldHVybiBmbDt9CiAgICB2b2lkIHhzZXRmbGFn
cyhpbnQgZikgeyBfZmxhZ3MgIHw9IGY7IH0KICAgIHZvaWQgeHNldGZsYWdzKGludCBmLCBpbnQg
bWFzaykKICAgICAgeyBfZmxhZ3MgID0gKF9mbGFncyAgJiB+bWFzaykgfCAoZiAmIG1hc2spOyB9
CiAgICB2b2lkIGdidW1wKGludCBuKQogICAgICB7IF9mbGFncyAgJiAweDEwMCAgPyAoX0lPX3Nh
dmVfYmFzZSs9bik6KF9JT19yZWFkX3B0cis9bik7fQogICAgdm9pZCBwYnVtcChpbnQgbikgeyBf
SU9fd3JpdGVfcHRyICs9IG47IH0KICAgIHZvaWQgc2V0YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50
IGE9MCk7CiAgICB2b2lkIHNldHAoY2hhciogcCwgY2hhciogZXApCiAgICAgIHsgX0lPX3dyaXRl
X2Jhc2U9X0lPX3dyaXRlX3B0cj1wOyBfSU9fd3JpdGVfZW5kPWVwOyB9CiAgICB2b2lkIHNldGco
Y2hhciogZWIsIGNoYXIqIGcsIGNoYXIgKmVnKSB7CiAgICAgIGlmIChfZmxhZ3MgICYgMHgxMDAg
KSBfSU9fZnJlZV9iYWNrdXBfYXJlYSh0aGlzKTsgCiAgICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsg
X0lPX3JlYWRfcHRyID0gZzsgX0lPX3JlYWRfZW5kID0gZWc7IH0KICAgIGNoYXIgKnNob3J0YnVm
KCkgeyByZXR1cm4gX3Nob3J0YnVmOyB9CgogICAgaW50IGluX2JhY2t1cCgpIHsgcmV0dXJuIF9m
bGFncyAmIDB4MTAwIDsgfQogICAgIAogICAgY2hhciAqR2Jhc2UoKSB7IHJldHVybiBpbl9iYWNr
dXAoKSA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9iYXNlOyB9CiAgICAgCiAgICBjaGFyICpl
R3B0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5k
OyB9CiAgICAgCiAgICBjaGFyICpCYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3Jl
YWRfYmFzZSA6IF9JT19zYXZlX2Jhc2U7IH0KICAgIGNoYXIgKkJwdHIoKSB7IHJldHVybiBfSU9f
YmFja3VwX2Jhc2U7IH0KICAgICAKICAgIGNoYXIgKmVCcHRyKCkgeyByZXR1cm4gaW5fYmFja3Vw
KCkgPyBfSU9fcmVhZF9lbmQgOiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGNoYXIgKk5iYXNlKCkgeyBy
ZXR1cm4gX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqZU5wdHIoKSB7IHJldHVybiBfSU9fc2F2
ZV9lbmQ7IH0KICAgIGludCBoYXZlX2JhY2t1cCgpIHsgcmV0dXJuIF9JT19zYXZlX2Jhc2UgIT0g
X19udWxsIDsgfQogICAgaW50IGhhdmVfbWFya2VycygpIHsgcmV0dXJuIF9tYXJrZXJzICE9IF9f
bnVsbCA7IH0KICAgIHZvaWQgZnJlZV9iYWNrdXBfYXJlYSgpOwogICAgdm9pZCB1bnNhdmVfbWFy
a2VycygpOyAgCiAgICBpbnQgcHV0X21vZGUoKSB7IHJldHVybiBfZmxhZ3MgJiAweDgwMCA7IH0K
ICAgIGludCBzd2l0Y2hfdG9fZ2V0X21vZGUoKTsKICAgIAogICAgc3RyZWFtYnVmKGludCBmbGFn
cz0wKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgaW50IGZsdXNoX2FsbCgpOwogICAgc3RhdGljIHZv
aWQgZmx1c2hfYWxsX2xpbmVidWZmZXJlZCgpOyAgCiAgICB2aXJ0dWFsIH5zdHJlYW1idWYoKTsK
ICAgIHZpcnR1YWwgaW50IG92ZXJmbG93KGludCBjID0gKC0xKSApOyAgCiAgICB2aXJ0dWFsIGlu
dCB1bmRlcmZsb3coKTsgIAogICAgdmlydHVhbCBpbnQgdWZsb3coKTsgIAogICAgdmlydHVhbCBp
bnQgcGJhY2tmYWlsKGludCBjKTsKIAogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzcHV0bihjb25z
dCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzZ2V0bihj
aGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJl
YW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFs
IHN0cmVhbXBvcyBzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6
Om91dCk7CgogICAgc3RyZWFtcG9zIHB1YnNlZWtvZmYoc3RyZWFtb2ZmIG8sIF9zZWVrX2RpciBk
LCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla29mZiAo
dGhpcywgbywgZCwgbW9kZSk7IH0KICAgIHN0cmVhbXBvcyBwdWJzZWVrcG9zKHN0cmVhbXBvcyBw
b3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtw
b3MgKHRoaXMsIHBvcywgbW9kZSk7IH0KICAgIHN0cmVhbXBvcyBzc2Vla29mZihzdHJlYW1vZmYs
IF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICBzdHJlYW1wb3Mgc3Nl
ZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKICAgIHZp
cnR1YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICB2aXJ0dWFsIGlu
dCBzeW5jKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7CgogICAgaW50IHNlZWttYXJr
KHN0cmVhbW1hcmtlciYgbWFyaywgaW50IGRlbHRhID0gMCk7CiAgICBpbnQgc3B1dGJhY2tjKGNo
YXIgYyk7CiAgICBpbnQgc3VuZ2V0YygpOwogICAgaW50IHVuYnVmZmVyZWQoKSB7IHJldHVybiBf
ZmxhZ3MgJiAyICA/IDEgOiAwOyB9CiAgICBpbnQgbGluZWJ1ZmZlcmVkKCkgeyByZXR1cm4gX2Zs
YWdzICYgMHgyMDAgID8gMSA6IDA7IH0KICAgIHZvaWQgdW5idWZmZXJlZChpbnQgaSkKCXsgaWYg
KGkpIF9mbGFncyB8PSAyIDsgZWxzZSBfZmxhZ3MgJj0gfjIgOyB9CiAgICB2b2lkIGxpbmVidWZm
ZXJlZChpbnQgaSkKCXsgaWYgKGkpIF9mbGFncyB8PSAweDIwMCA7IGVsc2UgX2ZsYWdzICY9IH4w
eDIwMCA7IH0KICAgIGludCBhbGxvY2F0ZSgpIHsgIAoJaWYgKGJhc2UoKSB8fCB1bmJ1ZmZlcmVk
KCkpIHJldHVybiAwOwoJZWxzZSByZXR1cm4gZG9hbGxvY2F0ZSgpOyB9CiAgICAgCiAgICB2b2lk
IGFsbG9jYnVmKCkgeyBpZiAoYmFzZSgpID09IF9fbnVsbCApIGRvYWxsb2NidWYoKTsgfQogICAg
dm9pZCBkb2FsbG9jYnVmKCk7CiAgICBpbnQgaW5fYXZhaWwoKSB7IHJldHVybiBfSU9fcmVhZF9l
bmQgLSBfSU9fcmVhZF9wdHI7IH0KICAgIGludCBvdXRfd2FpdGluZygpIHsgcmV0dXJuIF9JT193
cml0ZV9wdHIgLSBfSU9fd3JpdGVfYmFzZTsgfQogICAgc3RyZWFtc2l6ZSBzcHV0bihjb25zdCBj
aGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIHhzcHV0bihzLCBuKTsgfQogICAgc3RyZWFt
c2l6ZSBwYWRuKGNoYXIgcGFkLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19wYWRuKHRoaXMs
IHBhZCwgbik7IH0KICAgIHN0cmVhbXNpemUgc2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKSB7
IHJldHVybiBfSU9fc2dldG4odGhpcywgcywgbik7IH0KICAgIGludCBpZ25vcmUoaW50KTsKICAg
IGludCBnZXRfY29sdW1uKCk7CiAgICBpbnQgc2V0X2NvbHVtbihpbnQpOwogICAgbG9uZyBzZ2V0
bGluZShjaGFyKiBidWYsIF9HX3NpemVfdCAgbiwgY2hhciBkZWxpbSwgaW50IHB1dGJhY2tfZGVs
aW0pOwogICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVybiBfSU9fcHV0YyhjLCB0aGlzKTsgfQog
ICAgaW50IHNidW1wYygpIHsgcmV0dXJuIF9JT19nZXRjKHRoaXMpOyB9CiAgICBpbnQgc2dldGMo
KSB7IHJldHVybiAoKCAgdGhpcyAgKS0+X0lPX3JlYWRfcHRyID49ICggIHRoaXMgICktPl9JT19y
ZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyAoICB0aGlzICApID09ICgtMSkgID8gKC0xKSAgOiAqKHVu
c2lnbmVkIGNoYXIgKikgKCAgdGhpcyAgKS0+X0lPX3JlYWRfcHRyKSAgOyB9CiAgICBpbnQgc25l
eHRjKCkgewoJaWYgKF9JT19yZWFkX3B0ciA+PSBfSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3co
dGhpcykgPT0gKC0xKSApCgkgIHJldHVybiAoLTEpIDsKCWVsc2UgcmV0dXJuIF9JT19yZWFkX3B0
cisrLCBzZ2V0YygpOyB9CiAgICB2b2lkIHN0b3NzYygpIHsgaWYgKF9JT19yZWFkX3B0ciA8IF9J
T19yZWFkX2VuZCkgX0lPX3JlYWRfcHRyKys7IH0KICAgIGludCB2c2NhbihjaGFyIGNvbnN0ICpm
bXQwLCBfR192YV9saXN0ICBhcCwgaW9zKiBzdHJlYW0gPSBfX251bGwgKTsKICAgIGludCBzY2Fu
KGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKICAgIGludCB2Zm9ybShjaGFyIGNvbnN0ICpmbXQwLCBf
R192YV9saXN0ICBhcCk7CiAgICBpbnQgZm9ybShjaGFyIGNvbnN0ICpmbXQwIC4uLik7CgoKCgog
ICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFtc2l6ZSBzaXpl
KTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0cmVhbXNp
emUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIp
OwogICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2
b2lkKik7ICAKCgoKCn07CgogCiAKCmNsYXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFtYnVmIHsK
ICBwcm90ZWN0ZWQ6CiAgICB2b2lkIGluaXQoKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgY29uc3Qg
aW50IG9wZW5wcm90OyAgCiAgICBmaWxlYnVmKCk7CiAgICBmaWxlYnVmKGludCBmZCk7CiAgICBm
aWxlYnVmKGludCBmZCwgY2hhciogcCwgaW50IGxlbik7CgoKCiAgICB+ZmlsZWJ1ZigpOwogICAg
ZmlsZWJ1ZiogYXR0YWNoKGludCBmZCk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZp
bGVuYW1lLCBjb25zdCBjaGFyICptb2RlKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAq
ZmlsZW5hbWUsIGlvczo6b3Blbm1vZGUgbW9kZSwgaW50IHByb3QgPSAwNjY0KTsKICAgIHZpcnR1
YWwgaW50IHVuZGVyZmxvdygpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEp
ICk7CiAgICBpbnQgaXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsgfQogICAg
aW50IGZkKCkgY29uc3QgeyByZXR1cm4gaXNfb3BlbigpID8gX2ZpbGVubyA6ICgtMSkgOyB9CiAg
ICBmaWxlYnVmKiBjbG9zZSgpOwogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwogICAgdmly
dHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9z
Ojppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGlu
dCBsZW4pOwogICAgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBu
KTsKICAgIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0
dWFsIGludCBzeW5jKCk7CiAgcHJvdGVjdGVkOiAgCiAKICAgIGludCBpc19yZWFkaW5nKCkgeyBy
ZXR1cm4gZWJhY2soKSAhPSBlZ3B0cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyByZXR1cm4g
aXNfcmVhZGluZygpID8gIGdwdHIoKSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciogZmlsZV9w
dHIoKSB7IHJldHVybiBlR3B0cigpOyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lz
X3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mg
c3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5
c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3Rh
dCh2b2lkKik7ICAKICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwoKCgoKfTsKCmlubGluZSB2
b2lkIGlvczo6aW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsKCQlfc3RhdGUg
PSBzYiA/IGlvczo6Z29vZGJpdCA6IGlvczo6YmFkYml0OyBfZXhjZXB0aW9ucz0wOwoJCV9zdHJi
dWY9c2I7IF90aWUgPSB0aWVfdG87IF93aWR0aD0wOyBfZmlsbD0nICc7CgoJCV9mbGFncz1pb3M6
OnNraXB3c3xpb3M6OmRlYzsKCgoKCQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9Cgppbmxp
bmUgaW9zOjppb3Moc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7IGluaXQoc2IsIHRp
ZV90byk7IH0KCmlubGluZSBpb3M6On5pb3MoKSB7CgoKCiAgICAgCiAgICAgCiAgICBvcGVyYXRv
ciBkZWxldGVbXSAoX2FycmF5cyk7Cn0KfSAgCgojIDMxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi43LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lv
c3RyZWFtLmgiIDIgMwoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJl
YW07CnR5cGVkZWYgaW9zJiAoKl9fbWFuaXApKGlvcyYpOwp0eXBlZGVmIGlzdHJlYW0mICgqX19p
bWFuaXApKGlzdHJlYW0mKTsKdHlwZWRlZiBvc3RyZWFtJiAoKl9fb21hbmlwKShvc3RyZWFtJik7
CgpleHRlcm4gaXN0cmVhbSYgd3MoaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNo
KG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0
ZXJuIG9zdHJlYW0mIGVuZHMob3N0cmVhbSYgb3V0cyk7CgpjbGFzcyBvc3RyZWFtIDogdmlydHVh
bCBwdWJsaWMgaW9zCnsKICAgICAKICAgIHZvaWQgZG9fb3NmeCgpOwogIHB1YmxpYzoKICAgIG9z
dHJlYW0oKSB7IH0KICAgIG9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllZD0gX19u
dWxsICk7CiAgICBpbnQgb3BmeCgpIHsKCWlmICghZ29vZCgpKSByZXR1cm4gMDsKCWVsc2UgeyBp
ZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsgIDsgcmV0dXJuIDE7fSB9CiAgICB2b2lkIG9zZngoKSB7
ICA7CgkJICBpZiAoZmxhZ3MoKSAmIChpb3M6OnVuaXRidWZ8aW9zOjpzdGRpbykpCgkJICAgICAg
ZG9fb3NmeCgpOyB9CiAgICBvc3RyZWFtJiBmbHVzaCgpOwogICAgb3N0cmVhbSYgcHV0KGNoYXIg
YykgeyBfc3RyYnVmLT5zcHV0YyhjKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoKICAgIG9zdHJlYW0m
IHdyaXRlKGNvbnN0IGNoYXIgKnMsIHN0cmVhbXNpemUgbik7CiAgICBvc3RyZWFtJiB3cml0ZShj
b25zdCB1bnNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRl
KChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hh
ciAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywg
bik7fQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3Qgdm9pZCAqcywgc3RyZWFtc2l6ZSBuKQogICAg
ICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgc2Vla3Ao
c3RyZWFtcG9zKTsKICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAg
IHN0cmVhbXBvcyB0ZWxscCgpOwogICAgb3N0cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3JtYXQg
Li4uKTsKICAgIG9zdHJlYW0mIHZmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCwgX0dfdmFfbGlzdCAg
YXJncyk7CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjaGFyIGMpOwogICAgb3N0cmVhbSYgb3Bl
cmF0b3I8PCh1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8
IChjaGFyKWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgY2hhciAqcyk7CiAgICBv
c3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMpCgl7IHJldHVybiAoKnRo
aXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHNp
Z25lZCBjaGFyICpzKQoJeyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAg
b3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB2b2lkICpwKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9y
PDwoaW50IG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgbik7CiAgICBv
c3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2ln
bmVkIGxvbmcgbik7CgogICAgX19leHRlbnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcg
bG9uZyBuKTsKICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBs
b25nIGxvbmcgbik7CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9w
ZXJhdG9yPDwoKGludCluKTt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0
IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgodW5zaWduZWQgaW50KW4pO30KCiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KGJvb2wgYikgeyByZXR1cm4gb3BlcmF0b3I8PCgoaW50KWIpOyB9CgogICAgb3N0
cmVhbSYgb3BlcmF0b3I8PChkb3VibGUgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGZsb2F0
IG4pIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKCgogICAgb3N0cmVhbSYgb3Bl
cmF0b3I8PChsb25nIGRvdWJsZSBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0K
CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fb21hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYyko
KnRoaXMpOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fbWFuaXAgZnVuYykgeygqZnVuYyko
KnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzdHJlYW1idWYq
KTsKCgoKfTsKCmNsYXNzIGlzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIApwcm90
ZWN0ZWQ6CiAgICBfR19zaXplX3QgIF9nY291bnQ7CgogICAgaW50IF9za2lwX3dzKCk7CiAgcHVi
bGljOgogICAgaXN0cmVhbSgpOiBfZ2NvdW50ICgwKSB7IH0KICAgIGlzdHJlYW0oc3RyZWFtYnVm
KiBzYiwgb3N0cmVhbSp0aWVkPSBfX251bGwgKTsKICAgIGlzdHJlYW0mIGdldChjaGFyKiBwdHIs
IGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBj
aGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0KChjaGFy
KilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoY2hhciYgYyk7CiAgICBpc3Ry
ZWFtJiBnZXQodW5zaWduZWQgY2hhciYgYykgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAg
aXN0cmVhbSYgZ2V0bGluZShjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsK
ICAgIGlzdHJlYW0mIGdldGxpbmUodW5zaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRl
bGltID0gJ1xuJykKCXsgcmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0K
ICAgIGlzdHJlYW0mIGdldChzaWduZWQgY2hhciYgYykgIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7
IH0KICAgIGlzdHJlYW0mIGdldChzaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGlt
ID0gJ1xuJykKCXsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0
cmVhbSYgZ2V0bGluZShzaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xu
JykKCXsgcmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJl
YW0mIHJlYWQoY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pOwogICAgaXN0cmVhbSYgcmVhZCh1bnNp
Z25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciop
cHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZChzaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXpl
IG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJl
YWQodm9pZCAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0
ciwgbik7IH0KICAgIGlzdHJlYW0mIGdldChzdHJlYW1idWYmIHNiLCBjaGFyIGRlbGltID0gJ1xu
Jyk7CiAgICBpc3RyZWFtJiBnZXRzKGNoYXIgKipzLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBp
bnQgaXBmeChpbnQgbmVlZCA9IDApIHsKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQp
OyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllICYmIChuZWVkID09IDAgfHwg
cmRidWYoKS0+aW5fYXZhaWwoKSA8IG5lZWQpKSBfdGllLT5mbHVzaCgpOwoJICBpZiAoIW5lZWQg
JiYgKGZsYWdzKCkgJiBpb3M6OnNraXB3cykpIHJldHVybiBfc2tpcF93cygpOwoJICBlbHNlIHJl
dHVybiAxOwoJfQogICAgfQogICAgaW50IGlwZngwKCkgeyAgCglpZiAoIWdvb2QoKSkgeyBzZXQo
aW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSkgX3Rp
ZS0+Zmx1c2goKTsKCSAgaWYgKGZsYWdzKCkgJiBpb3M6OnNraXB3cykgcmV0dXJuIF9za2lwX3dz
KCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICBpbnQgaXBmeDEoKSB7ICAKCWlmICgh
Z29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7Cgkg
IGlmIChfdGllICYmIHJkYnVmKCktPmluX2F2YWlsKCkgPT0gMCkgX3RpZS0+Zmx1c2goKTsKCSAg
cmV0dXJuIDE7Cgl9CiAgICB9CiAgICB2b2lkIGlzZngoKSB7ICA7IH0KICAgIGludCBnZXQoKSB7
IGlmICghaXBmeDEoKSkgcmV0dXJuICgtMSkgOwoJCWVsc2UgeyBpbnQgY2ggPSBfc3RyYnVmLT5z
YnVtcGMoKTsKCQkgICAgICAgaWYgKGNoID09ICgtMSkgKSBzZXQoaW9zOjplb2ZiaXQpOwoJCSAg
ICAgICBpc2Z4KCk7CgkJICAgICAgIHJldHVybiBjaDsKCQkgICAgIH0gfQogICAgaW50IHBlZWso
KTsKICAgIF9HX3NpemVfdCAgZ2NvdW50KCkgeyByZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVh
bSYgaWdub3JlKGludCBuPTEsIGludCBkZWxpbSA9ICgtMSkgKTsKICAgIGludCBzeW5jICgpOwog
ICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtcG9zKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbW9m
ZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxsZygpOwogICAgaXN0cmVhbSYgcHV0YmFj
ayhjaGFyIGNoKSB7CglpZiAoZ29vZCgpICYmIF9zdHJidWYtPnNwdXRiYWNrYyhjaCkgPT0gKC0x
KSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiB1bmdl
dCgpIHsKCWlmIChnb29kKCkgJiYgX3N0cmJ1Zi0+c3VuZ2V0YygpID09ICgtMSkgKSBjbGVhcihp
b3M6OmJhZGJpdCk7CglyZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgc2Nhbihjb25zdCBjaGFy
ICpmb3JtYXQgLi4uKTsKICAgIGlzdHJlYW0mIHZzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCwgX0df
dmFfbGlzdCAgYXJncyk7CgoKCgoKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXIqKTsKICAg
IGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hhciogcCkgeyByZXR1cm4gb3BlcmF0b3I+
PigoY2hhciopcCk7IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXIqcCkgeyBy
ZXR1cm4gb3BlcmF0b3I+PigoY2hhciopcCk7IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hh
ciYgYyk7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4g
b3BlcmF0b3I+PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hh
ciYgYykge3JldHVybiBvcGVyYXRvcj4+KChjaGFyJiljKTt9CiAgICBpc3RyZWFtJiBvcGVyYXRv
cj4+KGludCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nJik7CgogICAgX19leHRlbnNp
b25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgbG9uZyYpOwogICAgX19leHRlbnNpb25fXyBp
c3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYpOwoKICAgIGlzdHJlYW0mIG9w
ZXJhdG9yPj4oc2hvcnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgaW50Jik7
CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmKTsKICAgIGlzdHJlYW0mIG9w
ZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGJvb2wm
KTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGZsb2F0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRv
cj4+KGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYpOwogICAg
aXN0cmVhbSYgb3BlcmF0b3I+PiggX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVy
biAqdGhpczt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KF9faW1hbmlwIGZ1bmMpIHsgcmV0dXJu
ICgqZnVuYykoKnRoaXMpOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHN0cmVhbWJ1ZiopOwp9
OwoKY2xhc3MgaW9zdHJlYW0gOiBwdWJsaWMgaXN0cmVhbSwgcHVibGljIG9zdHJlYW0KewogIHB1
YmxpYzoKICAgIGlvc3RyZWFtKCkgeyB9CiAgICBpb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3Ry
ZWFtKnRpZWQ9IF9fbnVsbCApOwp9OwoKY2xhc3MgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiA6IHB1
YmxpYyBpc3RyZWFtIHsKcHVibGljOgogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9y
PShpc3RyZWFtJik7CiAgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19pc3Ry
ZWFtX3dpdGhhc3NpZ24mIHJocykKICAgIHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8
aXN0cmVhbSY+IChyaHMpKTsgfQp9OwoKY2xhc3MgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiA6IHB1
YmxpYyBvc3RyZWFtIHsKcHVibGljOgogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9y
PShvc3RyZWFtJik7CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19vc3Ry
ZWFtX3dpdGhhc3NpZ24mIHJocykKICAgIHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8
b3N0cmVhbSY+IChyaHMpKTsgfQp9OwoKZXh0ZXJuIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gY2lu
OwogCmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNvdXQsIGNlcnI7CgpleHRlcm4gX0lP
X29zdHJlYW1fd2l0aGFzc2lnbiBjbG9nCgoKCjsKCmV4dGVybiBpc3RyZWFtJiBsb2NrKGlzdHJl
YW0mIGlucyk7CmV4dGVybiBpc3RyZWFtJiB1bmxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9z
dHJlYW0mIGxvY2sob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiB1bmxvY2sob3N0cmVh
bSYgb3V0cyk7CgpzdHJ1Y3QgSW9zdHJlYW1faW5pdCB7IH0gOyAgIAoKaW5saW5lIGlvcyYgZGVj
KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpkZWMsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsg
cmV0dXJuIGk7IH0KaW5saW5lIGlvcyYgaGV4KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpoZXgsIGlv
czo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KaW5saW5lIGlvcyYgb2N0KGlv
cyYgaSkKeyBpLnNldGYoaW9zOjpvY3QsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0
dXJuIGk7IH0KfSAgCgoKIyAzICJTa2VsZXRvbi5oIiAyCgojIDEgIi91c3IvbG9jYWwvTVBJL21w
aWNoLTEuMi4yLjEvaW5jbHVkZS9tcGkuaCIgMQogCgoKCgoKCiAKCgoKCiAKCgogCgoKCgoKCgoK
CgoKIAoKZXh0ZXJuICJDIiB7CgoKIAogCgoKCgoKIAoKCgoKCgoKCgp0eXBlZGVmIGludCBNUElf
RGF0YXR5cGU7CgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgoKIAp0eXBlZGVmIGludCBNUElfQ29tbTsKCgoKIAp0eXBlZGVmIGludCBNUElfR3JvdXA7
CgoKIAp0eXBlZGVmIGludCBNUElfT3A7CgoKCgoKCgoKCgoKCgoKIAogCgoKCgogCgoKCgoKIAoK
CgoKCgoKIAoKCgoKIAoKCgoKIAoKCiAKCgoKCgoKCgoKCiAKCgoKCgp0eXBlZGVmIHZvaWQgKE1Q
SV9IYW5kbGVyX2Z1bmN0aW9uKSAoKTsKCgoKCgp0eXBlZGVmIGludCBNUElfRXJyaGFuZGxlcjsK
IAoKCiAKCgoKIAoKCgoKIAp0eXBlZGVmIHVuaW9uIE1QSVJfSEFORExFICpNUElfUmVxdWVzdDsK
CiAKdHlwZWRlZiB2b2lkIChNUElfVXNlcl9mdW5jdGlvbikgKCB2b2lkICosIHZvaWQgKiwgaW50
ICosIE1QSV9EYXRhdHlwZSAqICk7IAoKIAp0eXBlZGVmIGludCAoTVBJX0NvcHlfZnVuY3Rpb24p
ICggTVBJX0NvbW0sIGludCwgdm9pZCAqLCB2b2lkICosIHZvaWQgKiwgaW50ICogKTsKdHlwZWRl
ZiBpbnQgKE1QSV9EZWxldGVfZnVuY3Rpb24pICggTVBJX0NvbW0sIGludCwgdm9pZCAqLCB2b2lk
ICogKTsKCgoKCgogCgoKIAoKCgoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QgTVBJUl9JbmZvICpNUElf
SW5mbzsKCgoKCiAKCgoKCgoKCiAKCgojIDEgIi91c3IvbG9jYWwvTVBJL21waWNoLTEuMi4yLjEv
aW5jbHVkZS9tcGlkZWZzLmgiIDEKIAoKCgogCgojIDEgIi91c3IvbG9jYWwvTVBJL21waWNoLTEu
Mi4yLjEvaW5jbHVkZS9tcGlfZm9ydGRlZnMuaCIgMQogCgoKCnR5cGVkZWYgaW50IE1QSV9GaW50
OwoKCgoKCgojIDcgIi91c3IvbG9jYWwvTVBJL21waWNoLTEuMi4yLjEvaW5jbHVkZS9tcGlkZWZz
LmgiIDIKCgoKCnR5cGVkZWYgaW50IE1QSV9BaW50OwoKIAoKCgogCgoKCnR5cGVkZWYgc3RydWN0
IHsgCiAgICBpbnQgY291bnQ7CiAgICBpbnQgTVBJX1NPVVJDRTsKICAgIGludCBNUElfVEFHOwog
ICAgaW50IE1QSV9FUlJPUjsKCgoKfSBNUElfU3RhdHVzOwoKIAoKIAoKCgoKIAoKCgoKCgoKCgoK
IyAxICIvdXNyL2xvY2FsL01QSS9tcGljaC0xLjIuMi4xL2luY2x1ZGUvbXBpby5oIiAxCiAKCgoK
CgoKIAoKCgoKIyAxICIvdXNyL2xvY2FsL01QSS9tcGljaC0xLjIuMi4xL2luY2x1ZGUvbXBpLmgi
IDEKIAoKCgoKCgogCgojIDY4MSAiL3Vzci9sb2NhbC9NUEkvbXBpY2gtMS4yLjIuMS9pbmNsdWRl
L21waS5oIgoKCiMgMTMgIi91c3IvbG9jYWwvTVBJL21waWNoLTEuMi4yLjEvaW5jbHVkZS9tcGlv
LmgiIDIKCgoKZXh0ZXJuICJDIiB7CgoKCgogCgp0eXBlZGVmIHN0cnVjdCBBRElPSV9GaWxlRCAq
TVBJX0ZpbGU7CgogCnR5cGVkZWYgc3RydWN0IEFESU9JX1JlcXVlc3REICpNUElPX1JlcXVlc3Q7
ICAKCnR5cGVkZWYgbG9uZyBsb25nIE1QSV9PZmZzZXQ7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKCgoKIAppbnQgTVBJX0ZpbGVfb3Bl
bihNUElfQ29tbSBjb21tLCBjaGFyICpmaWxlbmFtZSwgaW50IGFtb2RlLCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICBNUElfSW5mbyBpbmZvLCBNUElfRmlsZSAqZmgpOwppbnQgTVBJX0ZpbGVf
Y2xvc2UoTVBJX0ZpbGUgKmZoKTsKaW50IE1QSV9GaWxlX2RlbGV0ZShjaGFyICpmaWxlbmFtZSwg
TVBJX0luZm8gaW5mbyk7CmludCBNUElfRmlsZV9zZXRfc2l6ZShNUElfRmlsZSBmaCwgTVBJX09m
ZnNldCBzaXplKTsKaW50IE1QSV9GaWxlX3ByZWFsbG9jYXRlKE1QSV9GaWxlIGZoLCBNUElfT2Zm
c2V0IHNpemUpOwppbnQgTVBJX0ZpbGVfZ2V0X3NpemUoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQg
KnNpemUpOwppbnQgTVBJX0ZpbGVfZ2V0X2dyb3VwKE1QSV9GaWxlIGZoLCBNUElfR3JvdXAgKmdy
b3VwKTsKaW50IE1QSV9GaWxlX2dldF9hbW9kZShNUElfRmlsZSBmaCwgaW50ICphbW9kZSk7Cmlu
dCBNUElfRmlsZV9zZXRfaW5mbyhNUElfRmlsZSBmaCwgTVBJX0luZm8gaW5mbyk7CmludCBNUElf
RmlsZV9nZXRfaW5mbyhNUElfRmlsZSBmaCwgTVBJX0luZm8gKmluZm9fdXNlZCk7CgogCmludCBN
UElfRmlsZV9zZXRfdmlldyhNUElfRmlsZSBmaCwgTVBJX09mZnNldCBkaXNwLCBNUElfRGF0YXR5
cGUgZXR5cGUsCgkgICAgICAgICBNUElfRGF0YXR5cGUgZmlsZXR5cGUsIGNoYXIgKmRhdGFyZXAs
IE1QSV9JbmZvIGluZm8pOwppbnQgTVBJX0ZpbGVfZ2V0X3ZpZXcoTVBJX0ZpbGUgZmgsIE1QSV9P
ZmZzZXQgKmRpc3AsIAogICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSAqZXR5cGUsIE1QSV9E
YXRhdHlwZSAqZmlsZXR5cGUsIGNoYXIgKmRhdGFyZXApOwoKIAppbnQgTVBJX0ZpbGVfcmVhZF9h
dChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQsIHZvaWQgKmJ1ZiwKCSAgICAgIGludCBj
b3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwppbnQgTVBJ
X0ZpbGVfcmVhZF9hdF9hbGwoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpi
dWYsCgkgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAq
c3RhdHVzKTsKaW50IE1QSV9GaWxlX3dyaXRlX2F0KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9m
ZnNldCwgdm9pZCAqYnVmLAoJICAgICAgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUs
IE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBNUElfRmlsZV93cml0ZV9hdF9hbGwoTVBJX0ZpbGUg
ZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCgkgICAgICBpbnQgY291bnQsIE1QSV9E
YXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKCiAKCiAKCmludCBNUElfRmls
ZV9pcmVhZF9hdChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQsIHZvaWQgKmJ1ZiwKCSAg
ICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElPX1JlcXVlc3QgKnJlcXVl
c3QpOwppbnQgTVBJX0ZpbGVfaXdyaXRlX2F0KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNl
dCwgdm9pZCAqYnVmLAoJICAgICAgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1Q
SU9fUmVxdWVzdCAqcmVxdWVzdCk7CgogCmludCBNUElfRmlsZV9yZWFkKE1QSV9GaWxlIGZoLCB2
b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlCgkgICAgIGRhdGF0eXBlLCBNUElfU3Rh
dHVzICpzdGF0dXMpOyAKaW50IE1QSV9GaWxlX3JlYWRfYWxsKE1QSV9GaWxlIGZoLCB2b2lkICpi
dWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlCgkgICAgIGRhdGF0eXBlLCBNUElfU3RhdHVzICpz
dGF0dXMpOyAKaW50IE1QSV9GaWxlX3dyaXRlKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBj
b3VudCwgTVBJX0RhdGF0eXBlCgkgICAgICBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsK
aW50IE1QSV9GaWxlX3dyaXRlX2FsbChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQs
IE1QSV9EYXRhdHlwZQoJICAgICAgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CgogCgog
CgppbnQgTVBJX0ZpbGVfaXJlYWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBN
UElfRGF0YXR5cGUKCSAgICAgZGF0YXR5cGUsIE1QSU9fUmVxdWVzdCAqcmVxdWVzdCk7IAppbnQg
TVBJX0ZpbGVfaXdyaXRlKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0Rh
dGF0eXBlCgkgICAgICBkYXRhdHlwZSwgTVBJT19SZXF1ZXN0ICpyZXF1ZXN0KTsKCmludCBNUElf
RmlsZV9zZWVrKE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgaW50IHdoZW5jZSk7Cmlu
dCBNUElfRmlsZV9nZXRfcG9zaXRpb24oTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgKm9mZnNldCk7
CmludCBNUElfRmlsZV9nZXRfYnl0ZV9vZmZzZXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zm
c2V0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9PZmZzZXQgKmRp
c3ApOwoKIAppbnQgTVBJX0ZpbGVfcmVhZF9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1Ziwg
aW50IGNvdW50LCAKICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlw
ZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IE1QSV9GaWxlX3dyaXRlX3NoYXJlZChNUElfRmls
ZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgIE1Q
SV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IE1QSV9GaWxlX2ly
ZWFkX3NoYXJlZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIAogICAgICAgICAg
ICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJT19SZXF1ZXN0ICpyZXF1
ZXN0KTsKaW50IE1QSV9GaWxlX2l3cml0ZV9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1Ziwg
aW50IGNvdW50LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0
eXBlLCBNUElPX1JlcXVlc3QgKnJlcXVlc3QpOwppbnQgTVBJX0ZpbGVfcmVhZF9vcmRlcmVkKE1Q
SV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwppbnQgTVBJX0Zp
bGVfd3JpdGVfb3JkZXJlZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMg
KnN0YXR1cyk7CmludCBNUElfRmlsZV9zZWVrX3NoYXJlZChNUElfRmlsZSBmaCwgTVBJX09mZnNl
dCBvZmZzZXQsIGludCB3aGVuY2UpOwppbnQgTVBJX0ZpbGVfZ2V0X3Bvc2l0aW9uX3NoYXJlZChN
UElfRmlsZSBmaCwgTVBJX09mZnNldCAqb2Zmc2V0KTsKCiAKaW50IE1QSV9GaWxlX3JlYWRfYXRf
YWxsX2JlZ2luKE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5
cGUpOwppbnQgTVBJX0ZpbGVfcmVhZF9hdF9hbGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYs
IE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBNUElfRmlsZV93cml0ZV9hdF9hbGxfYmVnaW4oTVBJ
X0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUpOwppbnQgTVBJ
X0ZpbGVfd3JpdGVfYXRfYWxsX2VuZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBNUElfU3RhdHVz
ICpzdGF0dXMpOwppbnQgTVBJX0ZpbGVfcmVhZF9hbGxfYmVnaW4oTVBJX0ZpbGUgZmgsIHZvaWQg
KmJ1ZiwgaW50IGNvdW50LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlw
ZSBkYXRhdHlwZSk7CmludCBNUElfRmlsZV9yZWFkX2FsbF9lbmQoTVBJX0ZpbGUgZmgsIHZvaWQg
KmJ1ZiwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IE1QSV9GaWxlX3dyaXRlX2FsbF9iZWdpbihN
UElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7CmludCBNUElfRmlsZV93cml0ZV9hbGxfZW5k
KE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBNUElfRmls
ZV9yZWFkX29yZGVyZWRfYmVnaW4oTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUpOwpp
bnQgTVBJX0ZpbGVfcmVhZF9vcmRlcmVkX2VuZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBNUElf
U3RhdHVzICpzdGF0dXMpOwppbnQgTVBJX0ZpbGVfd3JpdGVfb3JkZXJlZF9iZWdpbihNUElfRmls
ZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUpOwppbnQgTVBJX0ZpbGVfd3JpdGVfb3JkZXJlZF9l
bmQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKCiAKaW50IE1Q
SV9GaWxlX2dldF90eXBlX2V4dGVudChNUElfRmlsZSBmaCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBl
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9BaW50ICpleHRlbnQp
OwoKIAppbnQgTVBJX0ZpbGVfc2V0X2F0b21pY2l0eShNUElfRmlsZSBmaCwgaW50IGZsYWcpOwpp
bnQgTVBJX0ZpbGVfZ2V0X2F0b21pY2l0eShNUElfRmlsZSBmaCwgaW50ICpmbGFnKTsKaW50IE1Q
SV9GaWxlX3N5bmMoTVBJX0ZpbGUgZmgpOwoKIAppbnQgTVBJX0ZpbGVfc2V0X2VycmhhbmRsZXIo
IE1QSV9GaWxlLCBNUElfRXJyaGFuZGxlciApOwppbnQgTVBJX0ZpbGVfZ2V0X2VycmhhbmRsZXIo
IE1QSV9GaWxlLCBNUElfRXJyaGFuZGxlciAqICk7CgojIDIxMCAiL3Vzci9sb2NhbC9NUEkvbXBp
Y2gtMS4yLjIuMS9pbmNsdWRlL21waW8uaCIKCgogCgoKIAoKCgoKCgoKCiAKTVBJX0ZpbGUgTVBJ
X0ZpbGVfZjJjKE1QSV9GaW50IGZoKTsKTVBJX0ZpbnQgTVBJX0ZpbGVfYzJmKE1QSV9GaWxlIGZo
KTsKCgogCgoKaW50IE1QSU9fVGVzdChNUElPX1JlcXVlc3QgKnJlcXVlc3QsIGludCAqZmxhZywg
TVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IE1QSU9fV2FpdChNUElPX1JlcXVlc3QgKnJlcXVlc3Qs
IE1QSV9TdGF0dXMgKnN0YXR1cyk7Ck1QSV9GaW50IE1QSU9fUmVxdWVzdF9jMmYoTVBJT19SZXF1
ZXN0IHJlcXVlc3QpOwpNUElPX1JlcXVlc3QgTVBJT19SZXF1ZXN0X2YyYyhNUElfRmludCByZXF1
ZXN0KTsKCgogCiMgMjY3ICIvdXNyL2xvY2FsL01QSS9tcGljaC0xLjIuMi4xL2luY2x1ZGUvbXBp
by5oIgoKCgoKCiAKCgogCmludCBQTVBJX0ZpbGVfb3BlbihNUElfQ29tbSBjb21tLCBjaGFyICpm
aWxlbmFtZSwgaW50IGFtb2RlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0luZm8g
aW5mbywgTVBJX0ZpbGUgKmZoKTsKaW50IFBNUElfRmlsZV9jbG9zZShNUElfRmlsZSAqZmgpOwpp
bnQgUE1QSV9GaWxlX2RlbGV0ZShjaGFyICpmaWxlbmFtZSwgTVBJX0luZm8gaW5mbyk7CmludCBQ
TVBJX0ZpbGVfc2V0X3NpemUoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgc2l6ZSk7CmludCBQTVBJ
X0ZpbGVfcHJlYWxsb2NhdGUoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgc2l6ZSk7CmludCBQTVBJ
X0ZpbGVfZ2V0X3NpemUoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgKnNpemUpOwppbnQgUE1QSV9G
aWxlX2dldF9ncm91cChNUElfRmlsZSBmaCwgTVBJX0dyb3VwICpncm91cCk7CmludCBQTVBJX0Zp
bGVfZ2V0X2Ftb2RlKE1QSV9GaWxlIGZoLCBpbnQgKmFtb2RlKTsKaW50IFBNUElfRmlsZV9zZXRf
aW5mbyhNUElfRmlsZSBmaCwgTVBJX0luZm8gaW5mbyk7CmludCBQTVBJX0ZpbGVfZ2V0X2luZm8o
TVBJX0ZpbGUgZmgsIE1QSV9JbmZvICppbmZvX3VzZWQpOwoKIAppbnQgUE1QSV9GaWxlX3NldF92
aWV3KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IGRpc3AsIAogICAgTVBJX0RhdGF0eXBlIGV0eXBl
LCBNUElfRGF0YXR5cGUgZmlsZXR5cGUsIGNoYXIgKmRhdGFyZXAsIE1QSV9JbmZvIGluZm8pOwpp
bnQgUE1QSV9GaWxlX2dldF92aWV3KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0ICpkaXNwLCAKICAg
ICAgTVBJX0RhdGF0eXBlICpldHlwZSwgTVBJX0RhdGF0eXBlICpmaWxldHlwZSwgY2hhciAqZGF0
YXJlcCk7CgogCmludCBQTVBJX0ZpbGVfcmVhZF9hdChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBv
ZmZzZXQsIHZvaWQgKmJ1ZiwKCSAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBl
LCBNUElfU3RhdHVzICpzdGF0dXMpOwppbnQgUE1QSV9GaWxlX3JlYWRfYXRfYWxsKE1QSV9GaWxl
IGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAoJICAgICAgaW50IGNvdW50LCBNUElf
RGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfd3Jp
dGVfYXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCgkgICAgICBp
bnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50
IFBNUElfRmlsZV93cml0ZV9hdF9hbGwoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2
b2lkICpidWYsCgkgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0
YXR1cyAqc3RhdHVzKTsKCiAKCiAKCmludCBQTVBJX0ZpbGVfaXJlYWRfYXQoTVBJX0ZpbGUgZmgs
IE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCgkgICAgICBpbnQgY291bnQsIE1QSV9EYXRh
dHlwZSBkYXRhdHlwZSwgTVBJT19SZXF1ZXN0ICpyZXF1ZXN0KTsKaW50IFBNUElfRmlsZV9pd3Jp
dGVfYXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCgkgICAgICBp
bnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJT19SZXF1ZXN0ICpyZXF1ZXN0KTsK
CiAKaW50IFBNUElfRmlsZV9yZWFkKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwg
TVBJX0RhdGF0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGF0eXBlLCBNUElfU3Rh
dHVzICpzdGF0dXMpOyAKaW50IFBNUElfRmlsZV9yZWFkX2FsbChNUElfRmlsZSBmaCwgdm9pZCAq
YnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZQoJICAgICAgICAgICAgICAgICAgICAgICBkYXRh
dHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsgCmludCBQTVBJX0ZpbGVfd3JpdGUoTVBJX0ZpbGUg
ZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUKCSAgICAgICAgICAgICAgICAg
ICAgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfd3JpdGVfYWxs
KE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlCgkgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKCiAKCiAKCmlu
dCBQTVBJX0ZpbGVfaXJlYWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElf
RGF0YXR5cGUKCSAgICAgICAgICAgICAgICAgICAgZGF0YXR5cGUsIE1QSU9fUmVxdWVzdCAqcmVx
dWVzdCk7IAppbnQgUE1QSV9GaWxlX2l3cml0ZShNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQg
Y291bnQsIE1QSV9EYXRhdHlwZQoJICAgICAgICAgICAgICAgICAgICAgZGF0YXR5cGUsIE1QSU9f
UmVxdWVzdCAqcmVxdWVzdCk7CgppbnQgUE1QSV9GaWxlX3NlZWsoTVBJX0ZpbGUgZmgsIE1QSV9P
ZmZzZXQgb2Zmc2V0LCBpbnQgd2hlbmNlKTsKaW50IFBNUElfRmlsZV9nZXRfcG9zaXRpb24oTVBJ
X0ZpbGUgZmgsIE1QSV9PZmZzZXQgKm9mZnNldCk7CmludCBQTVBJX0ZpbGVfZ2V0X2J5dGVfb2Zm
c2V0KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTVBJX09mZnNldCAqZGlzcCk7CgogCmludCBQTVBJX0ZpbGVfcmVh
ZF9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCAKICAgICAgICAgICAg
ICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsK
aW50IFBNUElfRmlsZV93cml0ZV9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNv
dW50LCAKICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1Q
SV9TdGF0dXMgKnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfaXJlYWRfc2hhcmVkKE1QSV9GaWxlIGZo
LCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0Rh
dGF0eXBlIGRhdGF0eXBlLCBNUElPX1JlcXVlc3QgKnJlcXVlc3QpOwppbnQgUE1QSV9GaWxlX2l3
cml0ZV9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElPX1JlcXVlc3QgKnJl
cXVlc3QpOwppbnQgUE1QSV9GaWxlX3JlYWRfb3JkZXJlZChNUElfRmlsZSBmaCwgdm9pZCAqYnVm
LCBpbnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRh
dHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IFBNUElfRmlsZV93cml0ZV9vcmRlcmVkKE1Q
SV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IFBNUElf
RmlsZV9zZWVrX3NoYXJlZChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQsIGludCB3aGVu
Y2UpOwppbnQgUE1QSV9GaWxlX2dldF9wb3NpdGlvbl9zaGFyZWQoTVBJX0ZpbGUgZmgsIE1QSV9P
ZmZzZXQgKm9mZnNldCk7CgogCmludCBQTVBJX0ZpbGVfcmVhZF9hdF9hbGxfYmVnaW4oTVBJX0Zp
bGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7CmludCBQTVBJX0Zp
bGVfcmVhZF9hdF9hbGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0
YXR1cyk7CmludCBQTVBJX0ZpbGVfd3JpdGVfYXRfYWxsX2JlZ2luKE1QSV9GaWxlIGZoLCBNUElf
T2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlKTsKaW50IFBNUElfRmlsZV93cml0ZV9h
dF9hbGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Cmlu
dCBQTVBJX0ZpbGVfcmVhZF9hbGxfYmVnaW4oTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNv
dW50LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7
CmludCBQTVBJX0ZpbGVfcmVhZF9hbGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9T
dGF0dXMgKnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfd3JpdGVfYWxsX2JlZ2luKE1QSV9GaWxlIGZo
LCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJ
X0RhdGF0eXBlIGRhdGF0eXBlKTsKaW50IFBNUElfRmlsZV93cml0ZV9hbGxfZW5kKE1QSV9GaWxl
IGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfcmVhZF9v
cmRlcmVkX2JlZ2luKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlKTsKaW50IFBNUElf
RmlsZV9yZWFkX29yZGVyZWRfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMg
KnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfd3JpdGVfb3JkZXJlZF9iZWdpbihNUElfRmlsZSBmaCwg
dm9pZCAqYnVmLCBpbnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN
UElfRGF0YXR5cGUgZGF0YXR5cGUpOwppbnQgUE1QSV9GaWxlX3dyaXRlX29yZGVyZWRfZW5kKE1Q
SV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CgogCmludCBQTVBJX0Zp
bGVfZ2V0X3R5cGVfZXh0ZW50KE1QSV9GaWxlIGZoLCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9BaW50ICpleHRlbnQpOwoK
IAppbnQgUE1QSV9GaWxlX3NldF9hdG9taWNpdHkoTVBJX0ZpbGUgZmgsIGludCBmbGFnKTsKaW50
IFBNUElfRmlsZV9nZXRfYXRvbWljaXR5KE1QSV9GaWxlIGZoLCBpbnQgKmZsYWcpOwppbnQgUE1Q
SV9GaWxlX3N5bmMoTVBJX0ZpbGUgZmgpOwoKIAppbnQgUE1QSV9GaWxlX3NldF9lcnJoYW5kbGVy
KCBNUElfRmlsZSwgTVBJX0VycmhhbmRsZXIgKTsKaW50IFBNUElfRmlsZV9nZXRfZXJyaGFuZGxl
ciggTVBJX0ZpbGUsIE1QSV9FcnJoYW5kbGVyICogKTsKCiMgMzk3ICIvdXNyL2xvY2FsL01QSS9t
cGljaC0xLjIuMi4xL2luY2x1ZGUvbXBpby5oIgoKCiAKTVBJX0ZpbGUgUE1QSV9GaWxlX2YyYyhN
UElfRmludCBmaCk7Ck1QSV9GaW50IFBNUElfRmlsZV9jMmYoTVBJX0ZpbGUgZmgpOwoKIAppbnQg
TVBJX0ZpbGVfc2V0X2VycmhhbmRsZXIoTVBJX0ZpbGUgZmgsIE1QSV9FcnJoYW5kbGVyIGVycmhh
bmRsZXIpOwppbnQgTVBJX0ZpbGVfZ2V0X2VycmhhbmRsZXIoTVBJX0ZpbGUgZmgsIE1QSV9FcnJo
YW5kbGVyICplcnJoYW5kbGVyKTsKCgogCgoKaW50IFBNUElPX1Rlc3QoTVBJT19SZXF1ZXN0ICpy
ZXF1ZXN0LCBpbnQgKmZsYWcsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBQTVBJT19XYWl0KE1Q
SU9fUmVxdWVzdCAqcmVxdWVzdCwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKTVBJX0ZpbnQgUE1QSU9f
UmVxdWVzdF9jMmYoTVBJT19SZXF1ZXN0IHJlcXVlc3QpOwpNUElPX1JlcXVlc3QgUE1QSU9fUmVx
dWVzdF9mMmMoTVBJX0ZpbnQgcmVxdWVzdCk7CgoKIAojIDQzNCAiL3Vzci9sb2NhbC9NUEkvbXBp
Y2gtMS4yLjIuMS9pbmNsdWRlL21waW8uaCIKCgoKfQoKCgojIDQ5ICIvdXNyL2xvY2FsL01QSS9t
cGljaC0xLjIuMi4xL2luY2x1ZGUvbXBpZGVmcy5oIiAyCgoKCgojIDIzOCAiL3Vzci9sb2NhbC9N
UEkvbXBpY2gtMS4yLjIuMS9pbmNsdWRlL21waS5oIiAyCgoKIAoKIAoKCgoKCgogCgoKCgoKCiAK
CgoKCgoKIAoKCgoKCiAKCiAKIApleHRlcm4gaW50IE1QSUNIWF9RT1NfQkFORFdJRFRIOwpleHRl
cm4gaW50IE1QSUNIWF9RT1NfUEFSQU1FVEVSUzsKIAoKIAogCmV4dGVybiBpbnQgTVBJQ0hYX1RP
UE9MT0dZX0RFUFRIUzsKZXh0ZXJuIGludCBNUElDSFhfVE9QT0xPR1lfQ09MT1JTOwogCgogCiMg
MSAiL3Vzci9sb2NhbC9NUEkvbXBpY2gtMS4yLjIuMS9pbmNsdWRlL21waV9lcnJuby5oIiAxCgog
CgoKCgoKCiAKCgoKCiAKCgoKCgoKIAoKIAoKCgoKCgoKCgogCgoKCgogCgoKCiAKCgogCgoKCgoK
IAoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI4NCAiL3Vz
ci9sb2NhbC9NUEkvbXBpY2gtMS4yLjIuMS9pbmNsdWRlL21waS5oIiAyCgogCgogCgoKCgoKCgoK
CgoKCiAKCgoKCiAKICBpbnQgTVBJX1NlbmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQs
IGludCwgTVBJX0NvbW0pOwogIGludCBNUElfUmVjdih2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUs
IGludCwgaW50LCBNUElfQ29tbSwgTVBJX1N0YXR1cyAqKTsKICBpbnQgTVBJX0dldF9jb3VudChN
UElfU3RhdHVzICosIE1QSV9EYXRhdHlwZSwgaW50ICopOwogIGludCBNUElfQnNlbmQodm9pZCos
IGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0pOwogIGludCBNUElfU3NlbmQo
dm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0pOwogIGludCBNUElf
UnNlbmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0pOwogIGlu
dCBNUElfQnVmZmVyX2F0dGFjaCggdm9pZCosIGludCk7CiAgaW50IE1QSV9CdWZmZXJfZGV0YWNo
KCB2b2lkKiwgaW50Kik7CiAgaW50IE1QSV9Jc2VuZCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUs
IGludCwgaW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IE1QSV9JYnNlbmQodm9p
ZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0sIE1QSV9SZXF1ZXN0ICop
OwogIGludCBNUElfSXNzZW5kKHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1Q
SV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgTVBJX0lyc2VuZCh2b2lkKiwgaW50LCBNUElf
RGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IE1QSV9J
cmVjdih2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1Jl
cXVlc3QgKik7CiAgaW50IE1QSV9XYWl0KE1QSV9SZXF1ZXN0ICosIE1QSV9TdGF0dXMgKik7CiAg
aW50IE1QSV9UZXN0KE1QSV9SZXF1ZXN0ICosIGludCAqLCBNUElfU3RhdHVzICopOwogIGludCBN
UElfUmVxdWVzdF9mcmVlKE1QSV9SZXF1ZXN0ICopOwogIGludCBNUElfV2FpdGFueShpbnQsIE1Q
SV9SZXF1ZXN0ICosIGludCAqLCBNUElfU3RhdHVzICopOwogIGludCBNUElfVGVzdGFueShpbnQs
IE1QSV9SZXF1ZXN0ICosIGludCAqLCBpbnQgKiwgTVBJX1N0YXR1cyAqKTsKICBpbnQgTVBJX1dh
aXRhbGwoaW50LCBNUElfUmVxdWVzdCAqLCBNUElfU3RhdHVzICopOwogIGludCBNUElfVGVzdGFs
bChpbnQsIE1QSV9SZXF1ZXN0ICosIGludCAqLCBNUElfU3RhdHVzICopOwogIGludCBNUElfV2Fp
dHNvbWUoaW50LCBNUElfUmVxdWVzdCAqLCBpbnQgKiwgaW50ICosIE1QSV9TdGF0dXMgKik7CiAg
aW50IE1QSV9UZXN0c29tZShpbnQsIE1QSV9SZXF1ZXN0ICosIGludCAqLCBpbnQgKiwgTVBJX1N0
YXR1cyAqKTsKICBpbnQgTVBJX0lwcm9iZShpbnQsIGludCwgTVBJX0NvbW0sIGludCAqZmxhZywg
TVBJX1N0YXR1cyAqKTsKICBpbnQgTVBJX1Byb2JlKGludCwgaW50LCBNUElfQ29tbSwgTVBJX1N0
YXR1cyAqKTsKICBpbnQgTVBJX0NhbmNlbChNUElfUmVxdWVzdCAqKTsKICBpbnQgTVBJX1Rlc3Rf
Y2FuY2VsbGVkKE1QSV9TdGF0dXMgKiwgaW50ICopOwogIGludCBNUElfU2VuZF9pbml0KHZvaWQq
LCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsK
ICBpbnQgTVBJX0JzZW5kX2luaXQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsaW50LCBN
UElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IE1QSV9Tc2VuZF9pbml0KHZvaWQqLCBpbnQs
IE1QSV9EYXRhdHlwZSwgaW50LGludCwgTVBJX0NvbW0sIE1QSV9SZXF1ZXN0ICopOwogIGludCBN
UElfUnNlbmRfaW5pdCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCxpbnQsIE1QSV9Db21t
LCBNUElfUmVxdWVzdCAqKTsKICBpbnQgTVBJX1JlY3ZfaW5pdCh2b2lkKiwgaW50LCBNUElfRGF0
YXR5cGUsIGludCxpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgTVBJX1N0YXJ0
KE1QSV9SZXF1ZXN0ICopOwogIGludCBNUElfU3RhcnRhbGwoaW50LCBNUElfUmVxdWVzdCAqKTsK
ICBpbnQgTVBJX1NlbmRyZWN2KHZvaWQgKiwgaW50LCBNUElfRGF0YXR5cGUsaW50LCBpbnQsIHZv
aWQgKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1N0YXR1cyAq
KTsKICBpbnQgTVBJX1NlbmRyZWN2X3JlcGxhY2Uodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBp
bnQsIGludCwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfU3RhdHVzICopOwogIGludCBNUElfVHlw
ZV9jb250aWd1b3VzKGludCwgTVBJX0RhdGF0eXBlLCBNUElfRGF0YXR5cGUgKik7CiAgaW50IE1Q
SV9UeXBlX3ZlY3RvcihpbnQsIGludCwgaW50LCBNUElfRGF0YXR5cGUsIE1QSV9EYXRhdHlwZSAq
KTsKICBpbnQgTVBJX1R5cGVfaHZlY3RvcihpbnQsIGludCwgTVBJX0FpbnQsIE1QSV9EYXRhdHlw
ZSwgTVBJX0RhdGF0eXBlICopOwogIGludCBNUElfVHlwZV9pbmRleGVkKGludCwgaW50ICosIGlu
dCAqLCBNUElfRGF0YXR5cGUsIE1QSV9EYXRhdHlwZSAqKTsKICBpbnQgTVBJX1R5cGVfaGluZGV4
ZWQoaW50LCBpbnQgKiwgTVBJX0FpbnQgKiwgTVBJX0RhdGF0eXBlLCBNUElfRGF0YXR5cGUgKik7
CiAgaW50IE1QSV9UeXBlX3N0cnVjdChpbnQsIGludCAqLCBNUElfQWludCAqLCBNUElfRGF0YXR5
cGUgKiwgTVBJX0RhdGF0eXBlICopOwogIGludCBNUElfQWRkcmVzcyh2b2lkKiwgTVBJX0FpbnQg
Kik7CiAgaW50IE1QSV9UeXBlX2V4dGVudChNUElfRGF0YXR5cGUsIE1QSV9BaW50ICopOwogCgog
CiAgaW50IE1QSV9UeXBlX3NpemUoTVBJX0RhdGF0eXBlLCBpbnQgKik7CiAgaW50IE1QSV9UeXBl
X2NvdW50KE1QSV9EYXRhdHlwZSwgaW50ICopOwogIGludCBNUElfVHlwZV9sYihNUElfRGF0YXR5
cGUsIE1QSV9BaW50Kik7CiAgaW50IE1QSV9UeXBlX3ViKE1QSV9EYXRhdHlwZSwgTVBJX0FpbnQq
KTsKICBpbnQgTVBJX1R5cGVfY29tbWl0KE1QSV9EYXRhdHlwZSAqKTsKICBpbnQgTVBJX1R5cGVf
ZnJlZShNUElfRGF0YXR5cGUgKik7CiAgaW50IE1QSV9HZXRfZWxlbWVudHMoTVBJX1N0YXR1cyAq
LCBNUElfRGF0YXR5cGUsIGludCAqKTsKICBpbnQgTVBJX1BhY2sodm9pZCosIGludCwgTVBJX0Rh
dGF0eXBlLCB2b2lkICosIGludCwgaW50ICosICBNUElfQ29tbSk7CiAgaW50IE1QSV9VbnBhY2so
dm9pZCosIGludCwgaW50ICosIHZvaWQgKiwgaW50LCBNUElfRGF0YXR5cGUsIE1QSV9Db21tKTsK
ICBpbnQgTVBJX1BhY2tfc2l6ZShpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX0NvbW0sIGludCAqKTsK
ICBpbnQgTVBJX0JhcnJpZXIoTVBJX0NvbW0gKTsKICBpbnQgTVBJX0JjYXN0KHZvaWQqLCBpbnQs
IE1QSV9EYXRhdHlwZSwgaW50LCBNUElfQ29tbSApOwogIGludCBNUElfR2F0aGVyKHZvaWQqICwg
aW50LCBNUElfRGF0YXR5cGUsIHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBNUElfQ29t
bSk7IAogIGludCBNUElfR2F0aGVydih2b2lkKiAsIGludCwgTVBJX0RhdGF0eXBlLCB2b2lkKiwg
aW50ICosIGludCAqLCBNUElfRGF0YXR5cGUsIGludCwgTVBJX0NvbW0pOyAKICBpbnQgTVBJX1Nj
YXR0ZXIodm9pZCogLCBpbnQsIE1QSV9EYXRhdHlwZSwgdm9pZCosIGludCwgTVBJX0RhdGF0eXBl
LCBpbnQsIE1QSV9Db21tKTsKICBpbnQgTVBJX1NjYXR0ZXJ2KHZvaWQqICwgaW50ICosIGludCAq
LCAgTVBJX0RhdGF0eXBlLCB2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgTVBJX0NvbW0p
OwogIGludCBNUElfQWxsZ2F0aGVyKHZvaWQqICwgaW50LCBNUElfRGF0YXR5cGUsIHZvaWQqLCBp
bnQsIE1QSV9EYXRhdHlwZSwgTVBJX0NvbW0pOwogIGludCBNUElfQWxsZ2F0aGVydih2b2lkKiAs
IGludCwgTVBJX0RhdGF0eXBlLCB2b2lkKiwgaW50ICosIGludCAqLCBNUElfRGF0YXR5cGUsIE1Q
SV9Db21tKTsKICBpbnQgTVBJX0FsbHRvYWxsKHZvaWQqICwgaW50LCBNUElfRGF0YXR5cGUsIHZv
aWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX0NvbW0pOwogIGludCBNUElfQWxsdG9hbGx2KHZv
aWQqICwgaW50ICosIGludCAqLCBNUElfRGF0YXR5cGUsIHZvaWQqLCBpbnQgKiwgaW50ICosIE1Q
SV9EYXRhdHlwZSwgTVBJX0NvbW0pOwogIGludCBNUElfUmVkdWNlKHZvaWQqICwgdm9pZCosIGlu
dCwgTVBJX0RhdGF0eXBlLCBNUElfT3AsIGludCwgTVBJX0NvbW0pOwogIGludCBNUElfT3BfY3Jl
YXRlKE1QSV9Vc2VyX2Z1bmN0aW9uICosIGludCwgTVBJX09wICopOwogIGludCBNUElfT3BfZnJl
ZSggTVBJX09wICopOwogIGludCBNUElfQWxscmVkdWNlKHZvaWQqICwgdm9pZCosIGludCwgTVBJ
X0RhdGF0eXBlLCBNUElfT3AsIE1QSV9Db21tKTsKICBpbnQgTVBJX1JlZHVjZV9zY2F0dGVyKHZv
aWQqICwgdm9pZCosIGludCAqLCBNUElfRGF0YXR5cGUsIE1QSV9PcCwgTVBJX0NvbW0pOwogIGlu
dCBNUElfU2Nhbih2b2lkKiAsIHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX09wLCBNUElf
Q29tbSApOwogIGludCBNUElfR3JvdXBfc2l6ZShNUElfR3JvdXAgZ3JvdXAsIGludCAqKTsKICBp
bnQgTVBJX0dyb3VwX3JhbmsoTVBJX0dyb3VwIGdyb3VwLCBpbnQgKik7CiAgaW50IE1QSV9Hcm91
cF90cmFuc2xhdGVfcmFua3MgKE1QSV9Hcm91cCwgaW50LCBpbnQgKiwgTVBJX0dyb3VwLCBpbnQg
Kik7CiAgaW50IE1QSV9Hcm91cF9jb21wYXJlKE1QSV9Hcm91cCwgTVBJX0dyb3VwLCBpbnQgKik7
CiAgaW50IE1QSV9Db21tX2dyb3VwKE1QSV9Db21tLCBNUElfR3JvdXAgKik7CiAgaW50IE1QSV9H
cm91cF91bmlvbihNUElfR3JvdXAsIE1QSV9Hcm91cCwgTVBJX0dyb3VwICopOwogIGludCBNUElf
R3JvdXBfaW50ZXJzZWN0aW9uKE1QSV9Hcm91cCwgTVBJX0dyb3VwLCBNUElfR3JvdXAgKik7CiAg
aW50IE1QSV9Hcm91cF9kaWZmZXJlbmNlKE1QSV9Hcm91cCwgTVBJX0dyb3VwLCBNUElfR3JvdXAg
Kik7CiAgaW50IE1QSV9Hcm91cF9pbmNsKE1QSV9Hcm91cCBncm91cCwgaW50LCBpbnQgKiwgTVBJ
X0dyb3VwICopOwogIGludCBNUElfR3JvdXBfZXhjbChNUElfR3JvdXAgZ3JvdXAsIGludCwgaW50
ICosIE1QSV9Hcm91cCAqKTsKICBpbnQgTVBJX0dyb3VwX3JhbmdlX2luY2woTVBJX0dyb3VwIGdy
b3VwLCBpbnQsIGludCBbXVszXSwgTVBJX0dyb3VwICopOwogIGludCBNUElfR3JvdXBfcmFuZ2Vf
ZXhjbChNUElfR3JvdXAgZ3JvdXAsIGludCwgaW50IFtdWzNdLCBNUElfR3JvdXAgKik7CiAgaW50
IE1QSV9Hcm91cF9mcmVlKE1QSV9Hcm91cCAqKTsKICBpbnQgTVBJX0NvbW1fc2l6ZShNUElfQ29t
bSwgaW50ICopOwogIGludCBNUElfQ29tbV9yYW5rKE1QSV9Db21tLCBpbnQgKik7CiAgaW50IE1Q
SV9Db21tX2NvbXBhcmUoTVBJX0NvbW0sIE1QSV9Db21tLCBpbnQgKik7CiAgaW50IE1QSV9Db21t
X2R1cChNUElfQ29tbSwgTVBJX0NvbW0gKik7CiAgaW50IE1QSV9Db21tX2NyZWF0ZShNUElfQ29t
bSwgTVBJX0dyb3VwLCBNUElfQ29tbSAqKTsKICBpbnQgTVBJX0NvbW1fc3BsaXQoTVBJX0NvbW0s
IGludCwgaW50LCBNUElfQ29tbSAqKTsKICBpbnQgTVBJX0NvbW1fZnJlZShNUElfQ29tbSAqKTsK
ICBpbnQgTVBJX0NvbW1fdGVzdF9pbnRlcihNUElfQ29tbSwgaW50ICopOwogIGludCBNUElfQ29t
bV9yZW1vdGVfc2l6ZShNUElfQ29tbSwgaW50ICopOwogIGludCBNUElfQ29tbV9yZW1vdGVfZ3Jv
dXAoTVBJX0NvbW0sIE1QSV9Hcm91cCAqKTsKICBpbnQgTVBJX0ludGVyY29tbV9jcmVhdGUoTVBJ
X0NvbW0sIGludCwgTVBJX0NvbW0sIGludCwgaW50LCBNUElfQ29tbSAqICk7CiAgaW50IE1QSV9J
bnRlcmNvbW1fbWVyZ2UoTVBJX0NvbW0sIGludCwgTVBJX0NvbW0gKik7CiAgaW50IE1QSV9LZXl2
YWxfY3JlYXRlKE1QSV9Db3B5X2Z1bmN0aW9uICosIE1QSV9EZWxldGVfZnVuY3Rpb24gKiwgaW50
ICosIHZvaWQqKTsKICBpbnQgTVBJX0tleXZhbF9mcmVlKGludCAqKTsKICBpbnQgTVBJX0F0dHJf
cHV0KE1QSV9Db21tLCBpbnQsIHZvaWQqKTsKICBpbnQgTVBJX0F0dHJfZ2V0KE1QSV9Db21tLCBp
bnQsIHZvaWQgKiwgaW50ICopOwogIGludCBNUElfQXR0cl9kZWxldGUoTVBJX0NvbW0sIGludCk7
CiAgaW50IE1QSV9Ub3BvX3Rlc3QoTVBJX0NvbW0sIGludCAqKTsKICBpbnQgTVBJX0NhcnRfY3Jl
YXRlKE1QSV9Db21tLCBpbnQsIGludCAqLCBpbnQgKiwgaW50LCBNUElfQ29tbSAqKTsKICBpbnQg
TVBJX0RpbXNfY3JlYXRlKGludCwgaW50LCBpbnQgKik7CiAgaW50IE1QSV9HcmFwaF9jcmVhdGUo
TVBJX0NvbW0sIGludCwgaW50ICosIGludCAqLCBpbnQsIE1QSV9Db21tICopOwogIGludCBNUElf
R3JhcGhkaW1zX2dldChNUElfQ29tbSwgaW50ICosIGludCAqKTsKICBpbnQgTVBJX0dyYXBoX2dl
dChNUElfQ29tbSwgaW50LCBpbnQsIGludCAqLCBpbnQgKik7CiAgaW50IE1QSV9DYXJ0ZGltX2dl
dChNUElfQ29tbSwgaW50ICopOwogIGludCBNUElfQ2FydF9nZXQoTVBJX0NvbW0sIGludCwgaW50
ICosIGludCAqLCBpbnQgKik7CiAgaW50IE1QSV9DYXJ0X3JhbmsoTVBJX0NvbW0sIGludCAqLCBp
bnQgKik7CiAgaW50IE1QSV9DYXJ0X2Nvb3JkcyhNUElfQ29tbSwgaW50LCBpbnQsIGludCAqKTsK
ICBpbnQgTVBJX0dyYXBoX25laWdoYm9yc19jb3VudChNUElfQ29tbSwgaW50LCBpbnQgKik7CiAg
aW50IE1QSV9HcmFwaF9uZWlnaGJvcnMoTVBJX0NvbW0sIGludCwgaW50LCBpbnQgKik7CiAgaW50
IE1QSV9DYXJ0X3NoaWZ0KE1QSV9Db21tLCBpbnQsIGludCwgaW50ICosIGludCAqKTsKICBpbnQg
TVBJX0NhcnRfc3ViKE1QSV9Db21tLCBpbnQgKiwgTVBJX0NvbW0gKik7CiAgaW50IE1QSV9DYXJ0
X21hcChNUElfQ29tbSwgaW50LCBpbnQgKiwgaW50ICosIGludCAqKTsKICBpbnQgTVBJX0dyYXBo
X21hcChNUElfQ29tbSwgaW50LCBpbnQgKiwgaW50ICosIGludCAqKTsKICBpbnQgTVBJX0dldF9w
cm9jZXNzb3JfbmFtZShjaGFyICosIGludCAqKTsKICBpbnQgTVBJX0dldF92ZXJzaW9uKGludCAq
LCBpbnQgKik7CiAgaW50IE1QSV9FcnJoYW5kbGVyX2NyZWF0ZShNUElfSGFuZGxlcl9mdW5jdGlv
biAqLCBNUElfRXJyaGFuZGxlciAqKTsKICBpbnQgTVBJX0VycmhhbmRsZXJfc2V0KE1QSV9Db21t
LCBNUElfRXJyaGFuZGxlcik7CiAgaW50IE1QSV9FcnJoYW5kbGVyX2dldChNUElfQ29tbSwgTVBJ
X0VycmhhbmRsZXIgKik7CiAgaW50IE1QSV9FcnJoYW5kbGVyX2ZyZWUoTVBJX0VycmhhbmRsZXIg
Kik7CiAgaW50IE1QSV9FcnJvcl9zdHJpbmcoaW50LCBjaGFyICosIGludCAqKTsKICBpbnQgTVBJ
X0Vycm9yX2NsYXNzKGludCwgaW50ICopOwogIGRvdWJsZSBNUElfV3RpbWUodm9pZCk7CiAgZG91
YmxlIE1QSV9XdGljayh2b2lkKTsKCiAgZG91YmxlIFBNUElfV3RpbWUodm9pZCk7CiAgZG91Ymxl
IFBNUElfV3RpY2sodm9pZCk7CgogIGludCBNUElfSW5pdChpbnQgKiwgY2hhciAqKiopOwogIGlu
dCBNUElfSW5pdF90aHJlYWQoIGludCAqLCBjaGFyICoqKiwgaW50LCBpbnQgKiApOwogIGludCBN
UElfRmluYWxpemUodm9pZCk7CiAgaW50IE1QSV9Jbml0aWFsaXplZChpbnQgKik7CiAgaW50IE1Q
SV9BYm9ydChNUElfQ29tbSwgaW50KTsKCiAKICBpbnQgTVBJX0NvbW1fc2V0X25hbWUoTVBJX0Nv
bW0sIGNoYXIgKik7CiAgaW50IE1QSV9Db21tX2dldF9uYW1lKE1QSV9Db21tLCBjaGFyICosIGlu
dCAqKTsKCgoKCgoKCgoKICBpbnQgTVBJX1Bjb250cm9sKGNvbnN0IGludCwgLi4uKTsKCgogIGlu
dCBNUElSX251bGxfY29weV9mbiAgKCBNUElfQ29tbSwgaW50LCB2b2lkICosIHZvaWQgKiwgdm9p
ZCAqLCBpbnQgKiApOwogIGludCBNUElSX251bGxfZGVsZXRlX2ZuICAoIE1QSV9Db21tLCBpbnQs
IHZvaWQgKiwgdm9pZCAqICk7CiAgaW50IE1QSVJfZHVwX2ZuICAoIE1QSV9Db21tLCBpbnQsIHZv
aWQgKiwgdm9pZCAqLCB2b2lkICosIGludCAqICk7CgogCiAgaW50IE1QSV9TdGF0dXNfZjJjKCBN
UElfRmludCAqLCBNUElfU3RhdHVzICogKTsKICBpbnQgTVBJX1N0YXR1c19jMmYoIE1QSV9TdGF0
dXMgKiwgTVBJX0ZpbnQgKiApOwogIGludCBNUElfRmluYWxpemVkKCBpbnQgKiApOwogIGludCBN
UElfVHlwZV9jcmVhdGVfaW5kZXhlZF9ibG9jayhpbnQsIGludCwgaW50ICosIE1QSV9EYXRhdHlw
ZSwgTVBJX0RhdGF0eXBlICopOwogIGludCBNUElfVHlwZV9nZXRfZW52ZWxvcGUoTVBJX0RhdGF0
eXBlLCBpbnQgKiwgaW50ICosIGludCAqLCBpbnQgKik7IAogIGludCBNUElfVHlwZV9nZXRfY29u
dGVudHMoTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgaW50LCBpbnQgKiwgTVBJX0FpbnQgKiwgTVBJ
X0RhdGF0eXBlICopOwogIGludCBNUElfVHlwZV9jcmVhdGVfc3ViYXJyYXkoaW50LCBpbnQgKiwg
aW50ICosIGludCAqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX0RhdGF0eXBlICopOwogIGludCBN
UElfVHlwZV9jcmVhdGVfZGFycmF5KGludCwgaW50LCBpbnQsIGludCAqLCBpbnQgKiwgaW50ICos
IGludCAqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX0RhdGF0eXBlICopOwogIGludCBNUElfSW5m
b19jcmVhdGUoTVBJX0luZm8gKik7CiAgaW50IE1QSV9JbmZvX3NldChNUElfSW5mbywgY2hhciAq
LCBjaGFyICopOwogIGludCBNUElfSW5mb19kZWxldGUoTVBJX0luZm8sIGNoYXIgKik7CiAgaW50
IE1QSV9JbmZvX2dldChNUElfSW5mbywgY2hhciAqLCBpbnQsIGNoYXIgKiwgaW50ICopOwogIGlu
dCBNUElfSW5mb19nZXRfdmFsdWVsZW4oTVBJX0luZm8sIGNoYXIgKiwgaW50ICosIGludCAqKTsK
ICBpbnQgTVBJX0luZm9fZ2V0X25rZXlzKE1QSV9JbmZvLCBpbnQgKik7CiAgaW50IE1QSV9JbmZv
X2dldF9udGhrZXkoTVBJX0luZm8sIGludCwgY2hhciAqKTsKICBpbnQgTVBJX0luZm9fZHVwKE1Q
SV9JbmZvLCBNUElfSW5mbyAqKTsKICBpbnQgTVBJX0luZm9fZnJlZShNUElfSW5mbyAqaW5mbyk7
CgpNUElfRmludCBNUElfSW5mb19jMmYoTVBJX0luZm8pOwpNUElfSW5mbyBNUElfSW5mb19mMmMo
TVBJX0ZpbnQpOwpNUElfRmludCBNUElfUmVxdWVzdF9jMmYoIE1QSV9SZXF1ZXN0ICk7CgogCiAg
aW50IE1QSV9TdGF0dXNfc2V0X2NhbmNlbGxlZCggTVBJX1N0YXR1cyAqLCBpbnQgKTsKICBpbnQg
TVBJX1N0YXR1c19zZXRfZWxlbWVudHMoIE1QSV9TdGF0dXMgKiwgTVBJX0RhdGF0eXBlLCBpbnQg
KTsKCgoKCgogCgogIGludCBQTVBJX1NlbmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQs
IGludCwgTVBJX0NvbW0pOwogIGludCBQTVBJX1JlY3Yodm9pZCosIGludCwgTVBJX0RhdGF0eXBl
LCBpbnQsIGludCwgTVBJX0NvbW0sIE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElfR2V0X2NvdW50
KE1QSV9TdGF0dXMgKiwgTVBJX0RhdGF0eXBlLCBpbnQgKik7CiAgaW50IFBNUElfQnNlbmQodm9p
ZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0pOwogIGludCBQTVBJX1Nz
ZW5kKHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tKTsKICBpbnQg
UE1QSV9Sc2VuZCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSk7
CiAgaW50IFBNUElfQnVmZmVyX2F0dGFjaCggdm9pZCogYnVmZmVyLCBpbnQpOwogIGludCBQTVBJ
X0J1ZmZlcl9kZXRhY2goIHZvaWQqIGJ1ZmZlciwgaW50Kik7CiAgaW50IFBNUElfSXNlbmQodm9p
ZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0sIE1QSV9SZXF1ZXN0ICop
OwogIGludCBQTVBJX0lic2VuZCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBN
UElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IFBNUElfSXNzZW5kKHZvaWQqLCBpbnQsIE1Q
SV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgUE1Q
SV9JcnNlbmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0sIE1Q
SV9SZXF1ZXN0ICopOwogIGludCBQTVBJX0lyZWN2KHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwg
aW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgUE1QSV9XYWl0KE1QSV9S
ZXF1ZXN0ICosIE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElfVGVzdChNUElfUmVxdWVzdCAqLCBp
bnQgKmZsYWcsIE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElfUmVxdWVzdF9mcmVlKE1QSV9SZXF1
ZXN0ICopOwogIGludCBQTVBJX1dhaXRhbnkoaW50LCBNUElfUmVxdWVzdCAqLCBpbnQgKiwgTVBJ
X1N0YXR1cyAqKTsKICBpbnQgUE1QSV9UZXN0YW55KGludCwgTVBJX1JlcXVlc3QgKiwgaW50ICos
IGludCAqLCBNUElfU3RhdHVzICopOwogIGludCBQTVBJX1dhaXRhbGwoaW50LCBNUElfUmVxdWVz
dCAqLCBNUElfU3RhdHVzICopOwogIGludCBQTVBJX1Rlc3RhbGwoaW50LCBNUElfUmVxdWVzdCAq
LCBpbnQgKmZsYWcsIE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElfV2FpdHNvbWUoaW50LCBNUElf
UmVxdWVzdCAqLCBpbnQgKiwgaW50ICosIE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElfVGVzdHNv
bWUoaW50LCBNUElfUmVxdWVzdCAqLCBpbnQgKiwgaW50ICosIE1QSV9TdGF0dXMgKik7CiAgaW50
IFBNUElfSXByb2JlKGludCwgaW50LCBNUElfQ29tbSwgaW50ICpmbGFnLCBNUElfU3RhdHVzICop
OwogIGludCBQTVBJX1Byb2JlKGludCwgaW50LCBNUElfQ29tbSwgTVBJX1N0YXR1cyAqKTsKICBp
bnQgUE1QSV9DYW5jZWwoTVBJX1JlcXVlc3QgKik7CiAgaW50IFBNUElfVGVzdF9jYW5jZWxsZWQo
TVBJX1N0YXR1cyAqLCBpbnQgKmZsYWcpOwogIGludCBQTVBJX1NlbmRfaW5pdCh2b2lkKiwgaW50
LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50
IFBNUElfQnNlbmRfaW5pdCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElf
Q29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IFBNUElfU3NlbmRfaW5pdCh2b2lkKiwgaW50LCBN
UElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IFBN
UElfUnNlbmRfaW5pdCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29t
bSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IFBNUElfUmVjdl9pbml0KHZvaWQqLCBpbnQsIE1QSV9E
YXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgUE1QSV9T
dGFydChNUElfUmVxdWVzdCAqKTsKICBpbnQgUE1QSV9TdGFydGFsbChpbnQsIE1QSV9SZXF1ZXN0
ICopOwogIGludCBQTVBJX1NlbmRyZWN2KHZvaWQgKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwg
aW50LCB2b2lkICosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0sIE1QSV9T
dGF0dXMgKik7CiAgaW50IFBNUElfU2VuZHJlY3ZfcmVwbGFjZSh2b2lkKiwgaW50LCBNUElfRGF0
YXR5cGUsIGludCwgaW50LCBpbnQsIGludCwgTVBJX0NvbW0sIE1QSV9TdGF0dXMgKik7CiAgaW50
IFBNUElfVHlwZV9jb250aWd1b3VzKGludCwgTVBJX0RhdGF0eXBlLCBNUElfRGF0YXR5cGUgKik7
CiAgaW50IFBNUElfVHlwZV92ZWN0b3IoaW50LCBpbnQsIGludCwgTVBJX0RhdGF0eXBlLCBNUElf
RGF0YXR5cGUgKik7CiAgaW50IFBNUElfVHlwZV9odmVjdG9yKGludCwgaW50LCBNUElfQWludCwg
TVBJX0RhdGF0eXBlLCBNUElfRGF0YXR5cGUgKik7CiAgaW50IFBNUElfVHlwZV9pbmRleGVkKGlu
dCwgaW50ICosIGludCAqLCBNUElfRGF0YXR5cGUsIE1QSV9EYXRhdHlwZSAqKTsKICBpbnQgUE1Q
SV9UeXBlX2hpbmRleGVkKGludCwgaW50ICosIE1QSV9BaW50ICosIE1QSV9EYXRhdHlwZSwgTVBJ
X0RhdGF0eXBlICopOwogIGludCBQTVBJX1R5cGVfc3RydWN0KGludCwgaW50ICosIE1QSV9BaW50
ICosIE1QSV9EYXRhdHlwZSAqLCBNUElfRGF0YXR5cGUgKik7CiAgaW50IFBNUElfQWRkcmVzcyh2
b2lkKiwgTVBJX0FpbnQgKik7CiAgaW50IFBNUElfVHlwZV9leHRlbnQoTVBJX0RhdGF0eXBlLCBN
UElfQWludCAqKTsKIAoKIAogIGludCBQTVBJX1R5cGVfc2l6ZShNUElfRGF0YXR5cGUsIGludCAq
KTsKICBpbnQgUE1QSV9UeXBlX2NvdW50KE1QSV9EYXRhdHlwZSwgaW50ICopOwogIGludCBQTVBJ
X1R5cGVfbGIoTVBJX0RhdGF0eXBlLCBNUElfQWludCopOwogIGludCBQTVBJX1R5cGVfdWIoTVBJ
X0RhdGF0eXBlLCBNUElfQWludCopOwogIGludCBQTVBJX1R5cGVfY29tbWl0KE1QSV9EYXRhdHlw
ZSAqKTsKICBpbnQgUE1QSV9UeXBlX2ZyZWUoTVBJX0RhdGF0eXBlICopOwogIGludCBQTVBJX0dl
dF9lbGVtZW50cyhNUElfU3RhdHVzICosIE1QSV9EYXRhdHlwZSwgaW50ICopOwogIGludCBQTVBJ
X1BhY2sodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCB2b2lkICosIGludCwgaW50ICosICBNUElf
Q29tbSk7CiAgaW50IFBNUElfVW5wYWNrKHZvaWQqLCBpbnQsIGludCAqLCB2b2lkICosIGludCwg
TVBJX0RhdGF0eXBlLCBNUElfQ29tbSk7CiAgaW50IFBNUElfUGFja19zaXplKGludCwgTVBJX0Rh
dGF0eXBlLCBNUElfQ29tbSwgaW50ICopOwogIGludCBQTVBJX0JhcnJpZXIoTVBJX0NvbW0gKTsK
ICBpbnQgUE1QSV9CY2FzdCh2b2lkKiBidWZmZXIsIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIE1Q
SV9Db21tICk7CiAgaW50IFBNUElfR2F0aGVyKHZvaWQqICwgaW50LCBNUElfRGF0YXR5cGUsIHZv
aWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBNUElfQ29tbSk7IAogIGludCBQTVBJX0dhdGhl
cnYodm9pZCogLCBpbnQsIE1QSV9EYXRhdHlwZSwgdm9pZCosIGludCAqLCBpbnQgKiwgTVBJX0Rh
dGF0eXBlLCBpbnQsIE1QSV9Db21tKTsgCiAgaW50IFBNUElfU2NhdHRlcih2b2lkKiAsIGludCwg
TVBJX0RhdGF0eXBlLCB2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgTVBJX0NvbW0pOwog
IGludCBQTVBJX1NjYXR0ZXJ2KHZvaWQqICwgaW50ICosIGludCAqZGlzcGxzLCBNUElfRGF0YXR5
cGUsIHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBNUElfQ29tbSk7CiAgaW50IFBNUElf
QWxsZ2F0aGVyKHZvaWQqICwgaW50LCBNUElfRGF0YXR5cGUsIHZvaWQqLCBpbnQsIE1QSV9EYXRh
dHlwZSwgTVBJX0NvbW0pOwogIGludCBQTVBJX0FsbGdhdGhlcnYodm9pZCogLCBpbnQsIE1QSV9E
YXRhdHlwZSwgdm9pZCosIGludCAqLCBpbnQgKiwgTVBJX0RhdGF0eXBlLCBNUElfQ29tbSk7CiAg
aW50IFBNUElfQWxsdG9hbGwodm9pZCogLCBpbnQsIE1QSV9EYXRhdHlwZSwgdm9pZCosIGludCwg
TVBJX0RhdGF0eXBlLCBNUElfQ29tbSk7CiAgaW50IFBNUElfQWxsdG9hbGx2KHZvaWQqICwgaW50
ICosIGludCAqLCBNUElfRGF0YXR5cGUsIHZvaWQqLCBpbnQgKiwgaW50ICosIE1QSV9EYXRhdHlw
ZSwgTVBJX0NvbW0pOwogIGludCBQTVBJX1JlZHVjZSh2b2lkKiAsIHZvaWQqLCBpbnQsIE1QSV9E
YXRhdHlwZSwgTVBJX09wLCBpbnQsIE1QSV9Db21tKTsKICBpbnQgUE1QSV9PcF9jcmVhdGUoTVBJ
X1VzZXJfZnVuY3Rpb24gKiwgaW50LCBNUElfT3AgKik7CiAgaW50IFBNUElfT3BfZnJlZSggTVBJ
X09wICopOwogIGludCBQTVBJX0FsbHJlZHVjZSh2b2lkKiAsIHZvaWQqLCBpbnQsIE1QSV9EYXRh
dHlwZSwgTVBJX09wLCBNUElfQ29tbSk7CiAgaW50IFBNUElfUmVkdWNlX3NjYXR0ZXIodm9pZCog
LCB2b2lkKiwgaW50ICosIE1QSV9EYXRhdHlwZSwgTVBJX09wLCBNUElfQ29tbSk7CiAgaW50IFBN
UElfU2Nhbih2b2lkKiAsIHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX09wLCBNUElfQ29t
bSApOwogIGludCBQTVBJX0dyb3VwX3NpemUoTVBJX0dyb3VwIGdyb3VwLCBpbnQgKik7CiAgaW50
IFBNUElfR3JvdXBfcmFuayhNUElfR3JvdXAgZ3JvdXAsIGludCAqKTsKICBpbnQgUE1QSV9Hcm91
cF90cmFuc2xhdGVfcmFua3MgKE1QSV9Hcm91cCwgaW50LCBpbnQgKiwgTVBJX0dyb3VwLCBpbnQg
Kik7CiAgaW50IFBNUElfR3JvdXBfY29tcGFyZShNUElfR3JvdXAsIE1QSV9Hcm91cCwgaW50ICop
OwogIGludCBQTVBJX0NvbW1fZ3JvdXAoTVBJX0NvbW0sIE1QSV9Hcm91cCAqKTsKICBpbnQgUE1Q
SV9Hcm91cF91bmlvbihNUElfR3JvdXAsIE1QSV9Hcm91cCwgTVBJX0dyb3VwICopOwogIGludCBQ
TVBJX0dyb3VwX2ludGVyc2VjdGlvbihNUElfR3JvdXAsIE1QSV9Hcm91cCwgTVBJX0dyb3VwICop
OwogIGludCBQTVBJX0dyb3VwX2RpZmZlcmVuY2UoTVBJX0dyb3VwLCBNUElfR3JvdXAsIE1QSV9H
cm91cCAqKTsKICBpbnQgUE1QSV9Hcm91cF9pbmNsKE1QSV9Hcm91cCBncm91cCwgaW50LCBpbnQg
KiwgTVBJX0dyb3VwICopOwogIGludCBQTVBJX0dyb3VwX2V4Y2woTVBJX0dyb3VwIGdyb3VwLCBp
bnQsIGludCAqLCBNUElfR3JvdXAgKik7CiAgaW50IFBNUElfR3JvdXBfcmFuZ2VfaW5jbChNUElf
R3JvdXAgZ3JvdXAsIGludCwgaW50IFtdWzNdLCBNUElfR3JvdXAgKik7CiAgaW50IFBNUElfR3Jv
dXBfcmFuZ2VfZXhjbChNUElfR3JvdXAgZ3JvdXAsIGludCwgaW50IFtdWzNdLCBNUElfR3JvdXAg
Kik7CiAgaW50IFBNUElfR3JvdXBfZnJlZShNUElfR3JvdXAgKik7CiAgaW50IFBNUElfQ29tbV9z
aXplKE1QSV9Db21tLCBpbnQgKik7CiAgaW50IFBNUElfQ29tbV9yYW5rKE1QSV9Db21tLCBpbnQg
Kik7CiAgaW50IFBNUElfQ29tbV9jb21wYXJlKE1QSV9Db21tLCBNUElfQ29tbSwgaW50ICopOwog
IGludCBQTVBJX0NvbW1fZHVwKE1QSV9Db21tLCBNUElfQ29tbSAqKTsKICBpbnQgUE1QSV9Db21t
X2NyZWF0ZShNUElfQ29tbSwgTVBJX0dyb3VwLCBNUElfQ29tbSAqKTsKICBpbnQgUE1QSV9Db21t
X3NwbGl0KE1QSV9Db21tLCBpbnQsIGludCwgTVBJX0NvbW0gKik7CiAgaW50IFBNUElfQ29tbV9m
cmVlKE1QSV9Db21tICopOwogIGludCBQTVBJX0NvbW1fdGVzdF9pbnRlcihNUElfQ29tbSwgaW50
ICopOwogIGludCBQTVBJX0NvbW1fcmVtb3RlX3NpemUoTVBJX0NvbW0sIGludCAqKTsKICBpbnQg
UE1QSV9Db21tX3JlbW90ZV9ncm91cChNUElfQ29tbSwgTVBJX0dyb3VwICopOwogIGludCBQTVBJ
X0ludGVyY29tbV9jcmVhdGUoTVBJX0NvbW0sIGludCwgTVBJX0NvbW0sIGludCwgaW50LCBNUElf
Q29tbSAqKTsKICBpbnQgUE1QSV9JbnRlcmNvbW1fbWVyZ2UoTVBJX0NvbW0sIGludCwgTVBJX0Nv
bW0gKik7CiAgaW50IFBNUElfS2V5dmFsX2NyZWF0ZShNUElfQ29weV9mdW5jdGlvbiAqLCBNUElf
RGVsZXRlX2Z1bmN0aW9uICosIGludCAqLCB2b2lkKik7CiAgaW50IFBNUElfS2V5dmFsX2ZyZWUo
aW50ICopOwogIGludCBQTVBJX0F0dHJfcHV0KE1QSV9Db21tLCBpbnQsIHZvaWQqKTsKICBpbnQg
UE1QSV9BdHRyX2dldChNUElfQ29tbSwgaW50LCB2b2lkICosIGludCAqKTsKICBpbnQgUE1QSV9B
dHRyX2RlbGV0ZShNUElfQ29tbSwgaW50KTsKICBpbnQgUE1QSV9Ub3BvX3Rlc3QoTVBJX0NvbW0s
IGludCAqKTsKICBpbnQgUE1QSV9DYXJ0X2NyZWF0ZShNUElfQ29tbSwgaW50LCBpbnQgKiwgaW50
ICosIGludCwgTVBJX0NvbW0gKik7CiAgaW50IFBNUElfRGltc19jcmVhdGUoaW50LCBpbnQsIGlu
dCAqKTsKICBpbnQgUE1QSV9HcmFwaF9jcmVhdGUoTVBJX0NvbW0sIGludCwgaW50ICosIGludCAq
LCBpbnQsIE1QSV9Db21tICopOwogIGludCBQTVBJX0dyYXBoZGltc19nZXQoTVBJX0NvbW0sIGlu
dCAqLCBpbnQgKik7CiAgaW50IFBNUElfR3JhcGhfZ2V0KE1QSV9Db21tLCBpbnQsIGludCwgaW50
ICosIGludCAqKTsKICBpbnQgUE1QSV9DYXJ0ZGltX2dldChNUElfQ29tbSwgaW50ICopOwogIGlu
dCBQTVBJX0NhcnRfZ2V0KE1QSV9Db21tLCBpbnQsIGludCAqLCBpbnQgKiwgaW50ICopOwogIGlu
dCBQTVBJX0NhcnRfcmFuayhNUElfQ29tbSwgaW50ICosIGludCAqKTsKICBpbnQgUE1QSV9DYXJ0
X2Nvb3JkcyhNUElfQ29tbSwgaW50LCBpbnQsIGludCAqKTsKICBpbnQgUE1QSV9HcmFwaF9uZWln
aGJvcnNfY291bnQoTVBJX0NvbW0sIGludCwgaW50ICopOwogIGludCBQTVBJX0dyYXBoX25laWdo
Ym9ycyhNUElfQ29tbSwgaW50LCBpbnQsIGludCAqKTsKICBpbnQgUE1QSV9DYXJ0X3NoaWZ0KE1Q
SV9Db21tLCBpbnQsIGludCwgaW50ICosIGludCAqKTsKICBpbnQgUE1QSV9DYXJ0X3N1YihNUElf
Q29tbSwgaW50ICosIE1QSV9Db21tICopOwogIGludCBQTVBJX0NhcnRfbWFwKE1QSV9Db21tLCBp
bnQsIGludCAqLCBpbnQgKiwgaW50ICopOwogIGludCBQTVBJX0dyYXBoX21hcChNUElfQ29tbSwg
aW50LCBpbnQgKiwgaW50ICosIGludCAqKTsKICBpbnQgUE1QSV9HZXRfcHJvY2Vzc29yX25hbWUo
Y2hhciAqLCBpbnQgKik7CiAgaW50IFBNUElfR2V0X3ZlcnNpb24oaW50ICosIGludCAqKTsKICBp
bnQgUE1QSV9FcnJoYW5kbGVyX2NyZWF0ZShNUElfSGFuZGxlcl9mdW5jdGlvbiAqLCBNUElfRXJy
aGFuZGxlciAqKTsKICBpbnQgUE1QSV9FcnJoYW5kbGVyX3NldChNUElfQ29tbSwgTVBJX0Vycmhh
bmRsZXIpOwogIGludCBQTVBJX0VycmhhbmRsZXJfZ2V0KE1QSV9Db21tLCBNUElfRXJyaGFuZGxl
ciAqKTsKICBpbnQgUE1QSV9FcnJoYW5kbGVyX2ZyZWUoTVBJX0VycmhhbmRsZXIgKik7CiAgaW50
IFBNUElfRXJyb3Jfc3RyaW5nKGludCwgY2hhciAqLCBpbnQgKik7CiAgaW50IFBNUElfRXJyb3Jf
Y2xhc3MoaW50LCBpbnQgKik7CgogIGludCBQTVBJX1R5cGVfZ2V0X2VudmVsb3BlKE1QSV9EYXRh
dHlwZSwgaW50ICosIGludCAqLCBpbnQgKiwgaW50ICopOyAKICBpbnQgUE1QSV9UeXBlX2dldF9j
b250ZW50cyhNUElfRGF0YXR5cGUsIGludCwgaW50LCBpbnQsIGludCAqLCBNUElfQWludCAqLCBN
UElfRGF0YXR5cGUgKik7CiAgaW50IFBNUElfVHlwZV9jcmVhdGVfc3ViYXJyYXkoaW50LCBpbnQg
KiwgaW50ICosIGludCAqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX0RhdGF0eXBlICopOwogIGlu
dCBQTVBJX1R5cGVfY3JlYXRlX2RhcnJheShpbnQsIGludCwgaW50LCBpbnQgKiwgaW50ICosIGlu
dCAqLCBpbnQgKiwgaW50LCBNUElfRGF0YXR5cGUsIE1QSV9EYXRhdHlwZSAqKTsKICBpbnQgUE1Q
SV9JbmZvX2NyZWF0ZShNUElfSW5mbyAqKTsKICBpbnQgUE1QSV9JbmZvX3NldChNUElfSW5mbywg
Y2hhciAqLCBjaGFyICopOwogIGludCBQTVBJX0luZm9fZGVsZXRlKE1QSV9JbmZvLCBjaGFyICop
OwogIGludCBQTVBJX0luZm9fZ2V0KE1QSV9JbmZvLCBjaGFyICosIGludCwgY2hhciAqLCBpbnQg
Kik7CiAgaW50IFBNUElfSW5mb19nZXRfdmFsdWVsZW4oTVBJX0luZm8sIGNoYXIgKiwgaW50ICos
IGludCAqKTsKICBpbnQgUE1QSV9JbmZvX2dldF9ua2V5cyhNUElfSW5mbywgaW50ICopOwogIGlu
dCBQTVBJX0luZm9fZ2V0X250aGtleShNUElfSW5mbywgaW50LCBjaGFyICopOwogIGludCBQTVBJ
X0luZm9fZHVwKE1QSV9JbmZvLCBNUElfSW5mbyAqKTsKICBpbnQgUE1QSV9JbmZvX2ZyZWUoTVBJ
X0luZm8gKik7CgpNUElfRmludCBQTVBJX0luZm9fYzJmKE1QSV9JbmZvKTsKTVBJX0luZm8gUE1Q
SV9JbmZvX2YyYyhNUElfRmludCk7CgogCiAgaW50IFBNUElfSW5pdChpbnQgKiwgY2hhciAqKiop
OwogIGludCBQTVBJX0luaXRfdGhyZWFkKCBpbnQgKiwgY2hhciAqKiosIGludCwgaW50ICogKTsK
ICBpbnQgUE1QSV9GaW5hbGl6ZSh2b2lkKTsKICBpbnQgUE1QSV9Jbml0aWFsaXplZChpbnQgKik7
CiAgaW50IFBNUElfQWJvcnQoTVBJX0NvbW0sIGludCk7CiAKICBpbnQgUE1QSV9Db21tX3NldF9u
YW1lKE1QSV9Db21tLCBjaGFyICopOwogIGludCBQTVBJX0NvbW1fZ2V0X25hbWUoTVBJX0NvbW0s
IGNoYXIgKiwgaW50ICopOyAKCgoKCgoKCgogIGludCBQTVBJX1Bjb250cm9sKGNvbnN0IGludCwg
Li4uKTsKCgogCiAgaW50IFBNUElfU3RhdHVzX3NldF9jYW5jZWxsZWQoIE1QSV9TdGF0dXMgKiwg
aW50ICk7CiAgaW50IFBNUElfU3RhdHVzX3NldF9lbGVtZW50cyggTVBJX1N0YXR1cyAqLCBNUElf
RGF0YXR5cGUsIGludCApOwoKCiAKCgp9CiAKIAoKCgoKCgoKCgoKCgojIDQgIlNrZWxldG9uLmgi
IDIKCgogCiAKIAogCiAKIAogCgogCiAKIApjbGFzcyBFeGNlcHRpb257fTsKY2xhc3MgVW5kZWZp
bmVkU291cmNlRXhjZXB0aW9uOiBFeGNlcHRpb257fTsKY2xhc3MgVW5kZWZpbmVkRGVzdGluYXRp
b25FeGNlcHRpb246IEV4Y2VwdGlvbnt9OwpjbGFzcyBOb25Mb2NhbEFjY2Vzc0V4Y2VwdGlvbjog
RXhjZXB0aW9ue307CmNsYXNzIE1pc3NpbmdJbml0aWFsaXphdGlvbkV4Y2VwdGlvbjogRXhjZXB0
aW9ue307CmNsYXNzIElsbGVnYWxHZXRFeGNlcHRpb246IEV4Y2VwdGlvbnt9OwpjbGFzcyBJbGxl
Z2FsUHV0RXhjZXB0aW9uOiBFeGNlcHRpb257fTsKY2xhc3MgSWxsZWdhbFBhcnRpdGlvbkV4Y2Vw
dGlvbjogRXhjZXB0aW9ue307CmNsYXNzIFBhcnRpdGlvbmluZ0ltcG9zc2libGVFeGNlcHRpb246
IEV4Y2VwdGlvbnt9OwpjbGFzcyBJbGxlZ2FsUGVybXV0ZUV4Y2VwdGlvbjogRXhjZXB0aW9ue307
Cgpjb25zdCBzdGF0aWMgaW50IHVuZGVmaW5lZCA9IC0xOwpzdGF0aWMgaW50IERlYnVnID0gMDsK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCgogCgppbmxpbmUgaW50IGxvZzIo
aW50IG4pe2ludCBpOyBmb3IoaT0wOyBuPjA7IGkrKykgbiAvPSAyOyByZXR1cm4gaS0xO30gIAoK
dGVtcGxhdGUgPGNsYXNzIEMxLCBjbGFzcyBDMj4KQzEgcHJvajFfMihDMSBhLCBDMiBiKXtyZXR1
cm4gYTt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQzEsIGNsYXNzIEMyPgpDMiBwcm9qMl8yKEMxIGEsIEMy
IGIpe3JldHVybiBiO30KCiAKIAogCgogCiAKCiAKIAogCgp0eXBlZGVmIGludCBQcm9jZXNzb3JO
bzsKCnN0YXRpYyBQcm9jZXNzb3JObyBydW5uaW5nUHJvY2Vzc29yTm8gPSAwOwpzdGF0aWMgUHJv
Y2Vzc29yTm8gbXlpZCA9IHVuZGVmaW5lZDsgIApzdGF0aWMgUHJvY2Vzc29yTm8gbXlFbnRyYW5j
ZSA9IHVuZGVmaW5lZDsKc3RhdGljIFByb2Nlc3Nvck5vIG15RXhpdCA9IHVuZGVmaW5lZDsgCnN0
YXRpYyBpbnQgbnVtcHJvY3M7CmNsYXNzIFByb2Nlc3M7CnN0YXRpYyBQcm9jZXNzKiBteVByb2Nl
c3MgPSBfX251bGwgOwoKIAogCiAKIAogCnN0cnVjdCBFbXB0eXsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBDPgpDIGV4dGVuZChDICgqZikoKSwgRW1wdHkgZHVtbXkpe3JldHVybiAoKmYpKCk7fQoKIAp0
ZW1wbGF0ZTxjbGFzcyBDPgp2b2lkIHJlY2VpdmUoUHJvY2Vzc29yTm8gc291cmNlLCBDKiB2YWxy
ZWYsIGludCBzaXplLCBNUElfU3RhdHVzKiBzdGF0KXsKICAgaWYgKHNvdXJjZSA9PSB1bmRlZmlu
ZWQpIHRocm93IFVuZGVmaW5lZFNvdXJjZUV4Y2VwdGlvbigpOwogICBpZiAoRGVidWcpIHtwcmlu
dGYoIiVkIHdhaXRpbmcgZm9yIG1lc3NhZ2Ugb2Ygc2l6ZSAlZCBmcm9tICVkXG4iLAogICAgICAg
ICAgICAgICAgICAgICAgbXlpZCxzaXplLHNvdXJjZSk7IGZmbHVzaCgoJl9faW9iWzFdKSApO30K
ICAgTVBJX1JlY3YodmFscmVmLCBzaXplLCAoKE1QSV9EYXRhdHlwZSkzKSAsIHNvdXJjZSwgKC0x
KSAsIDkxICwgc3RhdCk7IAogICBpZiAoRGVidWcpIHtwcmludGYoInJlY2VpdmVkIG1lc3NhZ2Ug
b2Ygc2l6ZSAlZCB3aXRoIHRhZyAlZCBmcm9tICVkIGJ5ICVkXG4iLAogICAgICAgICAgICAgICAg
ICAgICAgc2l6ZSwoKnN0YXQpLk1QSV9UQUcsc291cmNlLG15aWQpOyAKICAgICBmb3IoaW50IGk9
MDsgaTxzaXplL3NpemVvZihDKTsgaSsrKSBwcmludGYoIiVkLCIsKih2YWxyZWYraSkpOyBwcmlu
dGYoIlxuIik7CiAgICAgZmZsdXNoKCgmX19pb2JbMV0pICk7fX0KCnRlbXBsYXRlPGNsYXNzIEM+
CnZvaWQgbm9uYmxvY2tpbmdSZWNlaXZlKFByb2Nlc3Nvck5vIHNvdXJjZSwgQyogdmFscmVmLCBp
bnQgc2l6ZSwgTVBJX1JlcXVlc3QqIHJlcSl7CiAgIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSB0
aHJvdyBVbmRlZmluZWRTb3VyY2VFeGNlcHRpb24oKTsKICAgTVBJX0lyZWN2KHZhbHJlZiwgc2l6
ZSwgKChNUElfRGF0YXR5cGUpMykgLCBzb3VyY2UsICgtMSkgLCA5MSAsIHJlcSk7fQoKdGVtcGxh
dGU8Y2xhc3MgQz4Kdm9pZCBzZW5kKFByb2Nlc3Nvck5vIGRlc3RpbmF0aW9uLCBDKiB2YWxyZWYs
IGludCBzaXplKXsKICAgaWYgKGRlc3RpbmF0aW9uID09IHVuZGVmaW5lZCkgdGhyb3cgVW5kZWZp
bmVkRGVzdGluYXRpb25FeGNlcHRpb24oKTsKICAgaWYgKERlYnVnKSB7cHJpbnRmKCJzZW5kaW5n
IG1lc3NhZ2Ugb2Ygc2l6ZSAlZCBmcm9tICVkIHRvICVkXG4iLAogICAgICAgICAgICAgICAgICAg
ICAgIHNpemUsbXlpZCxkZXN0aW5hdGlvbik7IGZmbHVzaCgoJl9faW9iWzFdKSApO30KICAgaWYg
KERlYnVnKSB7Zm9yKGludCBpPTA7IGk8c2l6ZS9zaXplb2YoQyk7IGkrKykgcHJpbnRmKCIlZCwi
LCoodmFscmVmK2kpKTsgcHJpbnRmKCJcbiIpO2ZmbHVzaCgoJl9faW9iWzFdKSApO30KICAgTVBJ
X1NlbmQodmFscmVmLCBzaXplLCAoKE1QSV9EYXRhdHlwZSkzKSAsIGRlc3RpbmF0aW9uLCAxICwg
OTEgKTt9Cgp0ZW1wbGF0ZTxjbGFzcyBDPgp2b2lkIHN5bmNTZW5kKFByb2Nlc3Nvck5vIGRlc3Rp
bmF0aW9uLCBDKiB2YWxyZWYsIGludCBzaXplKXsKICAgaWYgKGRlc3RpbmF0aW9uID09IHVuZGVm
aW5lZCkgdGhyb3cgVW5kZWZpbmVkRGVzdGluYXRpb25FeGNlcHRpb24oKTsKICAgaWYgKERlYnVn
KSB7cHJpbnRmKCJzZW5kaW5nIG1lc3NhZ2Ugb2Ygc2l6ZSAlZCBzeW5jaHJvbm91c2x5IGZyb20g
JWQgdG8gJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSxteWlkLGRlc3RpbmF0aW9u
KTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICBpZiAoRGVidWcpIHtmb3IoaW50IGk9MDsgaTxz
aXplL3NpemVvZihDKTsgaSsrKSBwcmludGYoIiVkLCIsKih2YWxyZWYraSkpOyBwcmludGYoIlxu
Iik7ZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICBNUElfU3NlbmQodmFscmVmLCBzaXplLCAoKE1Q
SV9EYXRhdHlwZSkzKSAsIGRlc3RpbmF0aW9uLCAxICwgOTEgKTt9Cgp0ZW1wbGF0ZTxjbGFzcyBD
Pgp2b2lkICBub25ibG9ja2luZ1NlbmQoUHJvY2Vzc29yTm8gZGVzdGluYXRpb24sIEMqIHZhbHJl
ZiwgaW50IHNpemUsIE1QSV9SZXF1ZXN0KiByZXEpewogICBpZiAoZGVzdGluYXRpb24gPT0gdW5k
ZWZpbmVkKSB0aHJvdyBVbmRlZmluZWREZXN0aW5hdGlvbkV4Y2VwdGlvbigpOwogICBpZiAoRGVi
dWcpIHtwcmludGYoInNlbmRpbmcgbWVzc2FnZSBvZiBzaXplICVkIGZyb20gJWQgdG8gJWRcbiIs
CiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSxteWlkLGRlc3RpbmF0aW9uKTsgZmZsdXNoKCgm
X19pb2JbMV0pICk7fQogICBpZiAoRGVidWcpIHtmb3IoaW50IGk9MDsgaTxzaXplL3NpemVvZihD
KTsgaSsrKSBwcmludGYoIiVkLCIsKih2YWxyZWYraSkpOyBwcmludGYoIlxuIik7ZmZsdXNoKCgm
X19pb2JbMV0pICk7fQogICBNUElfSXNlbmQodmFscmVmLCBzaXplLCAoKE1QSV9EYXRhdHlwZSkz
KSAsIGRlc3RpbmF0aW9uLCAxICwgOTEgLCByZXEpO30KCnZvaWQgc2VuZFN0b3AoUHJvY2Vzc29y
Tm8gZGVzdGluYXRpb24pewogICBpZiAoZGVzdGluYXRpb24gPT0gdW5kZWZpbmVkKSB0aHJvdyBV
bmRlZmluZWREZXN0aW5hdGlvbkV4Y2VwdGlvbigpOwogICBpZiAoRGVidWcpIHtwcmludGYoInNl
bmRpbmcgc3RvcCBtZXNzYWdlIGZyb20gJWQgdG8gJWRcbiIsbXlpZCxkZXN0aW5hdGlvbik7IGZm
bHVzaCgoJl9faW9iWzFdKSApO30KICAgaW50IGR1bW15OwogICBNUElfU2VuZCgmZHVtbXksIHNp
emVvZihkdW1teSksICgoTVBJX0RhdGF0eXBlKTMpICwgZGVzdGluYXRpb24sIDIgLCA5MSApO30K
CnZvaWQgc2VuZFRlcm1pbmF0aW9uVGVzdChQcm9jZXNzb3JObyBkZXN0aW5hdGlvbil7CiAgIGlm
IChkZXN0aW5hdGlvbiA9PSB1bmRlZmluZWQpIHRocm93IFVuZGVmaW5lZERlc3RpbmF0aW9uRXhj
ZXB0aW9uKCk7CiAgIGlmIChEZWJ1Zykge3ByaW50Zigic2VuZGluZyB0ZXJtaW5hdGlvbiB0ZXN0
IGZyb20gJWQgdG8gJWRcbiIsbXlpZCxkZXN0aW5hdGlvbik7IGZmbHVzaCgoJl9faW9iWzFdKSAp
O30KICAgaW50IGR1bW15OwogICBNUElfU2VuZCgmZHVtbXksIHNpemVvZihkdW1teSksICgoTVBJ
X0RhdGF0eXBlKTMpICwgZGVzdGluYXRpb24sIDMgLCA5MSApO30KIAp0ZW1wbGF0ZTxjbGFzcyBD
Pgp2b2lkIHNlbmRSZWNlaXZlKFByb2Nlc3Nvck5vIGRlc3RpbmF0aW9uLCBDKiB2YWxyZWYxLCBD
KiB2YWxyZWYyLCBpbnQgc2l6ZSl7ICAgCiAgIGlmIChkZXN0aW5hdGlvbiA9PSB1bmRlZmluZWQp
IHRocm93IFVuZGVmaW5lZERlc3RpbmF0aW9uRXhjZXB0aW9uKCk7CiAgIE1QSV9TdGF0dXMgc3Rh
dDsKICAgIAogICAgCiAgICAKICAgIAogICBpZiAoZGVzdGluYXRpb24gPiBteWlkKSB7c3luY1Nl
bmQoZGVzdGluYXRpb24sdmFscmVmMSxzaXplKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWNlaXZlKGRlc3RpbmF0aW9uLHZhbHJlZjIsc2l6ZSwmc3RhdCk7fQogICBlbHNlICB7cmVj
ZWl2ZShkZXN0aW5hdGlvbix2YWxyZWYyLHNpemUsJnN0YXQpOyBzeW5jU2VuZChkZXN0aW5hdGlv
bix2YWxyZWYxLHNpemUpO319CiAKCiAKIAogCgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgQSwgY2xhc3Mg
Uj4KY2xhc3MgRmN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoK
cHVibGljOgogIHZpcnR1YWwgaW5saW5lIFIgb3BlcmF0b3IoKShjb25zdCBBIGEpIGNvbnN0ID0g
MDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgQSwgY2xhc3MgUiwgY2xhc3MgRj4gCmNsYXNzIEZjdDE6
IHB1YmxpYyBGY3Q8QSxSPnsKICBjb25zdCBGICBmOwoKcHVibGljOgogIEZjdDEoY29uc3QgRiAg
X2YpOiBmKF9mKSB7fSAgCiAgaW5saW5lIFIgb3BlcmF0b3IoKShjb25zdCBBIGEpIGNvbnN0IHsg
cmV0dXJuIGYoYSk7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIEEsIGNsYXNzIFIsIGNsYXNzIEY+IApv
c3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBGY3QxPEEsUixGPiYgZil7CiAg
b3MgPDwgInVuYXJ5IGZ1bmN0aW9uIjsKICByZXR1cm4gb3M7fQoKIAp0ZW1wbGF0ZSA8Y2xhc3Mg
QTEsIGNsYXNzIEEyLCBjbGFzcyBSLCBjbGFzcyBGPgpjbGFzcyBGY3QyIHsKICBjb25zdCBGICBm
OwoKICBzdHJ1Y3QgUGFydGlhbEFwcGwgewogICAgY29uc3QgRmN0MjxBMSxBMixSLEY+ICBmOwog
ICAgY29uc3QgQTEgYTE7CiAgICBQYXJ0aWFsQXBwbChjb25zdCBGY3QyPEExLEEyLFIsRj4gIGYy
LCBBMSBhKTogZihmMiksIGExKGEpIHt9CiAgICBpbmxpbmUgUiBvcGVyYXRvcigpKEEyIGIpIGNv
bnN0IHsgcmV0dXJuIGYoYTEsYik7fQogIH07CgpwdWJsaWM6CiAgRmN0Mihjb25zdCBGICBfZik6
IGYoX2YpIHt9ICAKICBpbmxpbmUgY29uc3QgRmN0MTxBMixSLFBhcnRpYWxBcHBsPiBvcGVyYXRv
cigpKGNvbnN0IEExIGEpIGNvbnN0IHsKICAgICByZXR1cm4gRmN0MTxBMixSLFBhcnRpYWxBcHBs
PihQYXJ0aWFsQXBwbCgqdGhpcyxhKSk7fQoKICAgCiAgaW5saW5lIFIgb3BlcmF0b3IoKShjb25z
dCBBMSBhMSwgQTIgYTIpIGNvbnN0IHsgcmV0dXJuIGYoYTEsYTIpO30KfTsKCnRlbXBsYXRlIDxj
bGFzcyBBMSwgY2xhc3MgQTIsIGNsYXNzIFIsIGNsYXNzIEY+IApvc3RyZWFtJiBvcGVyYXRvcjw8
KG9zdHJlYW0mIG9zLCBjb25zdCBGY3QyPEExLEEyLFIsRj4mIGYpewogIG9zIDw8ICJiaW5hcnkg
ZnVuY3Rpb24iOwogIHJldHVybiBvczt9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgQTEsIGNsYXNzIEEy
LCBjbGFzcyBBMywgY2xhc3MgUiwgY2xhc3MgRj4KY2xhc3MgRmN0MyB7CiAgY29uc3QgRiAgZjsK
CiAgc3RydWN0IFBhcnRpYWxBcHBsMSB7CiAgICBjb25zdCBGY3QzPEExLEEyLEEzLFIsRj4gIGY7
CiAgICBjb25zdCBBMSBhMTsKICAgIGNvbnN0IEEyIGEyOwogICAgUGFydGlhbEFwcGwxKGNvbnN0
IEZjdDM8QTEsQTIsQTMsUixGPiBmMiwgQTEgYSwgQTIgYik6IGYoZjIpLCBhMShhKSwgYTIoYikg
e30KICAgIGlubGluZSBSIG9wZXJhdG9yKCkoQTMgYTMpIGNvbnN0IHtyZXR1cm4gZihhMSxhMixh
Myk7fQogIH07CgogIHN0cnVjdCBQYXJ0aWFsQXBwbDIgewogICAgY29uc3QgRmN0MzxBMSxBMixB
MyxSLEY+IGY7CiAgICBjb25zdCBBMSBhMTsKICAgIFBhcnRpYWxBcHBsMihjb25zdCBGY3QzPEEx
LEEyLEEzLFIsRj4gZjMsIEExIGEpOiBmKGYzKSwgYTEoYSkge30KICAgIGlubGluZSBSIG9wZXJh
dG9yKCkoQTIgYTIpIGNvbnN0IHtyZXR1cm4gUGFydGlhbEFwcGwxKGYsYTEsYTIpO30KICAgIGlu
bGluZSBSIG9wZXJhdG9yKCkoQTIgYTIsIEEzIGEzKSBjb25zdCB7cmV0dXJuIGYoYTEsYTIsYTMp
O30KICB9OwoKcHVibGljOgogIEZjdDMoY29uc3QgRiAgX2YpOiBmKF9mKSB7fSAgCiAgaW5saW5l
IGNvbnN0IEZjdDI8QTIsQTMsUixQYXJ0aWFsQXBwbDI+IG9wZXJhdG9yKCkoY29uc3QgQTEgYSkg
Y29uc3QgewogICAgIHJldHVybiBGY3QyPEEyLEEzLFIsUGFydGlhbEFwcGwyPihQYXJ0aWFsQXBw
bDIoKnRoaXMsYSkpO30KCiAgIAogIGlubGluZSBSIG9wZXJhdG9yKCkoY29uc3QgQTEgYTEsIEEy
IGEyLCBBMyBhMykgY29uc3Qge3JldHVybiBmKGExLGEyLGEzKTt9IAogIAogIGlubGluZSBSIG9w
ZXJhdG9yKCkoY29uc3QgQTEgYTEsIEEyIGEyKSBjb25zdCB7cmV0dXJuIFBhcnRpYWxBcHBsMShm
LGExLGEyKTt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQTEsIGNsYXNzIEEyLCBjbGFzcyBBMywgY2xh
c3MgUiwgY2xhc3MgRj4gCm9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNvbnN0IEZj
dDM8QTEsQTIsQTMsUixGPiYgZil7CiAgb3MgPDwgIjMtYXJ5IGZ1bmN0aW9uIjsKICByZXR1cm4g
b3M7fQoKIAoKdGVtcGxhdGUgPGNsYXNzIEExLCBjbGFzcyBBMiwgY2xhc3MgQTMsIGNsYXNzIEE0
LCBjbGFzcyBSLCBjbGFzcyBGPgpjbGFzcyBGY3Q0IHsKICBjb25zdCBGICBmOwoKICBzdHJ1Y3Qg
UGFydGlhbEFwcGwxIHsKICAgIGNvbnN0IEZjdDQ8QTEsQTIsQTMsQTQsUixGPiAgZjsKICAgIGNv
bnN0IEExIGExOwogICAgY29uc3QgQTIgYTI7ICAKICAgIGNvbnN0IEEzIGEzOwogICAgUGFydGlh
bEFwcGwxKGNvbnN0IEZjdDQ8QTEsQTIsQTMsQTQsUixGPiBmNCwgQTEgYSwgQTIgYiwgQTMgYyk6
IGYoZjQpLCBhMShhKSwgYTIoYiksIGEzKGMpe30KICAgIGlubGluZSBSIG9wZXJhdG9yKCkoQTQg
YTQpIGNvbnN0IHtyZXR1cm4gZihhMSxhMixhMyxhNCk7fQogIH07CgogIHN0cnVjdCBQYXJ0aWFs
QXBwbDIgewogICAgY29uc3QgRmN0NDxBMSxBMixBMyxBNCxSLEY+IGY7CiAgICBjb25zdCBBMSBh
MTsgCiAgICBjb25zdCBBMiBhMjsgIAogICAgUGFydGlhbEFwcGwyKGNvbnN0IEZjdDQ8QTEsQTIs
QTMsQTQsUixGPiBmNCwgQTEgYSwgQTIgYik6IGYoZjQpLCBhMShhKSwgYTIoYikge30KICAgIGlu
bGluZSBSIG9wZXJhdG9yKCkoQTMgYTMpIGNvbnN0IHtyZXR1cm4gUGFydGlhbEFwcGwxKGYsYTEs
YTIsYTMpO30KICAgIGlubGluZSBSIG9wZXJhdG9yKCkoQTMgYTMsIEE0IGE0KSBjb25zdCB7cmV0
dXJuIGYoYTEsYTIsYTMsYTQpO30KICB9OwoKICBzdHJ1Y3QgUGFydGlhbEFwcGwzIHsKICAgIGNv
bnN0IEZjdDQ8QTEsQTIsQTMsQTQsUixGPiBmOwogICAgY29uc3QgQTEgYTE7CiAgICBQYXJ0aWFs
QXBwbDMoY29uc3QgRmN0NDxBMSxBMixBMyxBNCxSLEY+IGY0LCBBMSBhKTogZihmNCksIGExKGEp
IHt9CiAgICBpbmxpbmUgUiBvcGVyYXRvcigpKEEyIGEyKSBjb25zdCB7cmV0dXJuIFBhcnRpYWxB
cHBsMihmLGExLGEyKTt9CiAgICBpbmxpbmUgUiBvcGVyYXRvcigpKEEyIGEyLCBBMyBhMykgY29u
c3Qge3JldHVybiBQYXJ0aWFsQXBwbDEoZixhMSxhMixhMyk7fSAKICAgIGlubGluZSBSIG9wZXJh
dG9yKCkoQTIgYTIsIEEzIGEzLCBBNCBhNCkgY29uc3Qge3JldHVybiBmKGExLGEyLGEzLGE0KTt9
CiAgfTsKCnB1YmxpYzoKICBGY3Q0KGNvbnN0IEYgIF9mKTogZihfZikge30gIAogIGlubGluZSBj
b25zdCBGY3QzPEEyLEEzLEE0LFIsUGFydGlhbEFwcGwzPiBvcGVyYXRvcigpKGNvbnN0IEExIGEp
IGNvbnN0IHsKICAgICByZXR1cm4gRmN0MzxBMixBMyxBNCxSLFBhcnRpYWxBcHBsMz4oUGFydGlh
bEFwcGwzKCp0aGlzLGEpKTt9CgogICAKICBpbmxpbmUgUiBvcGVyYXRvcigpKGNvbnN0IEExIGEx
LCBBMiBhMiwgQTMgYTMsIEE0IGE0KSBjb25zdCB7cmV0dXJuIGYoYTEsYTIsYTMsYTQpO30KIAog
IGlubGluZSBSIG9wZXJhdG9yKCkoY29uc3QgQTEgYTEsIEEyIGEyLCBBMyBhMykgY29uc3Qge3Jl
dHVybiBQYXJ0aWFsQXBwbDEoZixhMSxhMixhMyk7fSAKCiAgaW5saW5lIFIgb3BlcmF0b3IoKShj
b25zdCBBMSBhMSwgQTIgYTIpIGNvbnN0IHtyZXR1cm4gUGFydGlhbEFwcGwyKGYsYTEsYTIpO30K
fTsKCnRlbXBsYXRlIDxjbGFzcyBBMSwgY2xhc3MgQTIsIGNsYXNzIEEzLCBjbGFzcyBBNCwgY2xh
c3MgUiwgY2xhc3MgRj4gCm9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNvbnN0IEZj
dDQ8QTEsQTIsQTMsQTQsUixGPiYgZil7CiAgb3MgPDwgIjQtYXJ5IGZ1bmN0aW9uIjsKICByZXR1
cm4gb3M7fQogCgp0ZW1wbGF0ZSA8Y2xhc3MgQTEsIGNsYXNzIEEyLCBjbGFzcyBBMywgY2xhc3Mg
QTQsIGNsYXNzIEE1LCBjbGFzcyBSLCBjbGFzcyBGPgpjbGFzcyBGY3Q1IHsKICBjb25zdCBGICBm
OwoKICBzdHJ1Y3QgUGFydGlhbEFwcGwxIHsKICAgIGNvbnN0IEZjdDU8QTEsQTIsQTMsQTQsQTUs
UixGPiAgZjsKICAgIGNvbnN0IEExIGExOwogICAgY29uc3QgQTIgYTI7ICAKICAgIGNvbnN0IEEz
IGEzOwogICAgY29uc3QgQTQgYTQ7CiAgICBQYXJ0aWFsQXBwbDEoY29uc3QgRmN0NTxBMSxBMixB
MyxBNCxBNSxSLEY+IGY0LCBBMSBhLCBBMiBiLCBBMyBjLCBBNCBkKTogCiAgICAgICBmKGY0KSwg
YTEoYSksIGEyKGIpLCBhMyhjKSwgYTQoZCl7fQogICAgaW5saW5lIFIgb3BlcmF0b3IoKShBNSBh
NSkgY29uc3Qge3JldHVybiBmKGExLGEyLGEzLGE0LGE1KTt9CiAgfTsKCiAgc3RydWN0IFBhcnRp
YWxBcHBsMiB7CiAgICBjb25zdCBGY3Q1PEExLEEyLEEzLEE0LEE1LFIsRj4gZjsKICAgIGNvbnN0
IEExIGExOyAKICAgIGNvbnN0IEEyIGEyOwogICAgY29uc3QgQTMgYTM7ICAKICAgIFBhcnRpYWxB
cHBsMihjb25zdCBGY3Q1PEExLEEyLEEzLEE0LEE1LFIsRj4gZjQsIEExIGEsIEEyIGIsIEEzIGMp
OiBmKGY0KSwgYTEoYSksIGEyKGIpLCBhMyhjKSB7fQogICAgaW5saW5lIFIgb3BlcmF0b3IoKShB
NCBhNCkgY29uc3Qge3JldHVybiBQYXJ0aWFsQXBwbDEoZixhMSxhMixhMyxhNCk7fQogICAgaW5s
aW5lIFIgb3BlcmF0b3IoKShBNCBhNCwgQTUgYTUpIGNvbnN0IHtyZXR1cm4gZihhMSxhMixhMyxh
NCxhNSk7fQogIH07CgogIHN0cnVjdCBQYXJ0aWFsQXBwbDMgewogICAgY29uc3QgRmN0NTxBMSxB
MixBMyxBNCxBNSxSLEY+IGY7CiAgICBjb25zdCBBMSBhMTsKICAgIGNvbnN0IEEyIGEyOwogICAg
UGFydGlhbEFwcGwzKGNvbnN0IEZjdDU8QTEsQTIsQTMsQTQsQTUsUixGPiBmNCwgQTEgYSwgQTIg
Yik6IGYoZjQpLCBhMShhKSwgYTIoYikge30KICAgIGlubGluZSBSIG9wZXJhdG9yKCkoQTMgYTMp
IGNvbnN0IHtyZXR1cm4gUGFydGlhbEFwcGwyKGYsYTEsYTIsYTMpO30KICAgIGlubGluZSBSIG9w
ZXJhdG9yKCkoQTMgYTMsIEE0IGE0KSBjb25zdCB7cmV0dXJuIFBhcnRpYWxBcHBsMShmLGExLGEy
LGEzLGE0KTt9IAogICAgaW5saW5lIFIgb3BlcmF0b3IoKShBMyBhMywgQTQgYTQsIEE1IGE1KSBj
b25zdCB7cmV0dXJuIGYoYTEsYTIsYTMsYTQsYTUpO30KICB9OwoKICBzdHJ1Y3QgUGFydGlhbEFw
cGw0IHsKICAgIGNvbnN0IEZjdDU8QTEsQTIsQTMsQTQsQTUsUixGPiBmOwogICAgY29uc3QgQTEg
YTE7CiAgICBQYXJ0aWFsQXBwbDQoY29uc3QgRmN0NTxBMSxBMixBMyxBNCxBNSxSLEY+IGY0LCBB
MSBhKTogZihmNCksIGExKGEpIHt9CiAgICBpbmxpbmUgUiBvcGVyYXRvcigpKEEyIGEyKSBjb25z
dCB7cmV0dXJuIFBhcnRpYWxBcHBsMyhmLGExLGEyKTt9CiAgICBpbmxpbmUgUiBvcGVyYXRvcigp
KEEyIGEyLCBBMyBhMykgY29uc3Qge3JldHVybiBQYXJ0aWFsQXBwbDIoZixhMSxhMixhMyk7fSAK
ICAgIGlubGluZSBSIG9wZXJhdG9yKCkoQTIgYTIsIEEzIGEzLCBBNCBhNCkgY29uc3Qge3JldHVy
biBQYXJ0aWFsQXBwbDEoZixhMSxhMixhMyxhNCk7fSAKICAgIGlubGluZSBSIG9wZXJhdG9yKCko
QTIgYTIsIEEzIGEzLCBBNCBhNCwgQTUgYTUpIGNvbnN0IHtyZXR1cm4gZihhMSxhMixhMyxhNCxh
NSk7fQogIH07CgpwdWJsaWM6CiAgRmN0NShjb25zdCBGICBfZik6IGYoX2YpIHt9ICAKICBpbmxp
bmUgY29uc3QgRmN0NDxBMixBMyxBNCxBNSxSLFBhcnRpYWxBcHBsND4gb3BlcmF0b3IoKShjb25z
dCBBMSBhKSBjb25zdCB7CiAgICAgcmV0dXJuIEZjdDQ8QTIsQTMsQTQsQTUsUixQYXJ0aWFsQXBw
bDQ+KFBhcnRpYWxBcHBsNCgqdGhpcyxhKSk7fQoKICAgCiAgaW5saW5lIFIgb3BlcmF0b3IoKShj
b25zdCBBMSBhMSwgQTIgYTIsIEEzIGEzLCBBNCBhNCwgQTUgYTUpIGNvbnN0IHtyZXR1cm4gZihh
MSxhMixhMyxhNCxhNSk7fQogIAogIGlubGluZSBSIG9wZXJhdG9yKCkoY29uc3QgQTEgYTEsIEEy
IGEyLCBBMyBhMywgQTQgYTQpIGNvbnN0IHtyZXR1cm4gUGFydGlhbEFwcGwxKGYsYTEsYTIsYTMs
YTQpO30gCgogIGlubGluZSBSIG9wZXJhdG9yKCkoY29uc3QgQTEgYTEsIEEyIGEyLCBBMyBhMykg
Y29uc3Qge3JldHVybiBQYXJ0aWFsQXBwbDIoZixhMSxhMixhMyk7fSAKCiAgaW5saW5lIFIgb3Bl
cmF0b3IoKShjb25zdCBBMSBhMSwgQTIgYTIpIGNvbnN0IHtyZXR1cm4gUGFydGlhbEFwcGwzKGYs
YTEsYTIpO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBBMSwgY2xhc3MgQTIsIGNsYXNzIEEzLCBjbGFz
cyBBNCwgY2xhc3MgQTUsIGNsYXNzIFIsIGNsYXNzIEY+IApvc3RyZWFtJiBvcGVyYXRvcjw8KG9z
dHJlYW0mIG9zLCBjb25zdCBGY3Q1PEExLEEyLEEzLEE0LEE1LFIsRj4mIGYpewogIG9zIDw8ICI1
LWFyeSBmdW5jdGlvbiI7CiAgcmV0dXJuIG9zO30KCiAKCgogCnRlbXBsYXRlIDxjbGFzcyBBMSwg
Y2xhc3MgUj4Kc3RydWN0IE1rT3AxewogIHR5cGVkZWYgUiAoKmZ1bmNfcHRyX3QpKEExKTsKICBj
b25zdCBmdW5jX3B0cl90IGY7CiAgTWtPcDEoY29uc3QgZnVuY19wdHJfdCBfZikgOiBmKF9mKSB7
fQogIGlubGluZSBSIG9wZXJhdG9yKCkoQTEgYTEpIGNvbnN0IHsKICAgIHJldHVybiBmKGExKTt9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQTEsIGNsYXNzIFI+CmlubGluZSBGY3QxPEExLFIsTWtPcDE8
QTEsUj4gPiBjdXJyeShSICgqZikoQTEpKXsKICByZXR1cm4gRmN0MTxBMSxSLE1rT3AxPEExLFI+
ID4gKCBNa09wMTxBMSxSPihmKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBMSwgY2xhc3MgQTIsIGNs
YXNzIFI+CnN0cnVjdCBNa09wMnsKICB0eXBlZGVmIFIgKCpmdW5jX3B0cl90KShBMSxBMik7CiAg
Y29uc3QgZnVuY19wdHJfdCBmOwogIE1rT3AyKGNvbnN0IGZ1bmNfcHRyX3QgX2YpIDogZihfZikg
e30KICBpbmxpbmUgUiBvcGVyYXRvcigpKEExIGExLCBBMiBhMikgY29uc3QgewogICAgcmV0dXJu
IGYoYTEsYTIpO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBBMSwgY2xhc3MgQTIsIGNsYXNzIFI+Cmlu
bGluZSBjb25zdCBGY3QyPEExLEEyLFIsTWtPcDI8QTEsQTIsUj4gPiBjdXJyeShSICgqIGYpKEEx
LEEyKSl7CiAgcmV0dXJuIEZjdDI8QTEsQTIsUixNa09wMjxBMSxBMixSPiA+ICggTWtPcDI8QTEs
QTIsUj4oZikpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIEExLCBjbGFzcyBBMiwgY2xhc3MgQTMsIGNs
YXNzIFI+CnN0cnVjdCBNa09wM3sKICB0eXBlZGVmIFIgKCpmdW5jX3B0cl90KShBMSxBMixBMyk7
CiAgY29uc3QgZnVuY19wdHJfdCBmOwogIE1rT3AzKGNvbnN0IGZ1bmNfcHRyX3QgX2YpIDogZihf
Zikge30KICBpbmxpbmUgUiBvcGVyYXRvcigpKEExIGExLCBBMiBhMiwgQTMgYTMpIGNvbnN0IHsK
ICAgIHJldHVybiBmKGExLGEyLGEzKTt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQTEsIGNsYXNzIEEy
LCBjbGFzcyBBMywgY2xhc3MgUj4KaW5saW5lIGNvbnN0IEZjdDM8QTEsQTIsQTMsUixNa09wMzxB
MSxBMixBMyxSPiA+IGN1cnJ5KFIgKCogZikoQTEsQTIsQTMpKXsKICByZXR1cm4gRmN0MzxBMSxB
MixBMyxSLE1rT3AzPEExLEEyLEEzLFI+ID4gKCBNa09wMzxBMSxBMixBMyxSPihmKSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBBMSwgY2xhc3MgQTIsIGNsYXNzIEEzLCBjbGFzcyBBNCwgY2xhc3MgUj4K
c3RydWN0IE1rT3A0ewogIHR5cGVkZWYgUiAoKmZ1bmNfcHRyX3QpKEExLEEyLEEzLEE0KTsKICBj
b25zdCBmdW5jX3B0cl90IGY7CiAgTWtPcDQoY29uc3QgZnVuY19wdHJfdCBfZikgOiBmKF9mKSB7
fQogIGlubGluZSBSIG9wZXJhdG9yKCkoQTEgYTEsIEEyIGEyLCBBMyBhMywgQTQgYTQpIGNvbnN0
IHsKICAgIHJldHVybiBmKGExLGEyLGEzLGE0KTt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQTEsIGNs
YXNzIEEyLCBjbGFzcyBBMywgY2xhc3MgQTQsIGNsYXNzIFI+CmlubGluZSBjb25zdCBGY3Q0PEEx
LEEyLEEzLEE0LFIsTWtPcDQ8QTEsQTIsQTMsQTQsUj4gPiBjdXJyeShSICgqIGYpKEExLEEyLEEz
LEE0KSl7CiAgcmV0dXJuIEZjdDQ8QTEsQTIsQTMsQTQsUixNa09wNDxBMSxBMixBMyxBNCxSPiA+
ICggTWtPcDQ8QTEsQTIsQTMsQTQsUj4oZikpOwp9CnRlbXBsYXRlIDxjbGFzcyBBMSwgY2xhc3Mg
QTIsIGNsYXNzIEEzLCBjbGFzcyBBNCwgY2xhc3MgQTUsIGNsYXNzIFI+CnN0cnVjdCBNa09wNXsK
ICB0eXBlZGVmIFIgKCpmdW5jX3B0cl90KShBMSxBMixBMyxBNCxBNSk7CiAgY29uc3QgZnVuY19w
dHJfdCBmOwogIE1rT3A1KGNvbnN0IGZ1bmNfcHRyX3QgX2YpIDogZihfZikge30KICBpbmxpbmUg
UiBvcGVyYXRvcigpKEExIGExLCBBMiBhMiwgQTMgYTMsIEE0IGE0LCBBNSBhNSkgY29uc3Qgewog
ICAgcmV0dXJuIGYoYTEsYTIsYTMsYTQsYTUpO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBBMSwgY2xh
c3MgQTIsIGNsYXNzIEEzLCBjbGFzcyBBNCwgY2xhc3MgQTUsIGNsYXNzIFI+CmlubGluZSBjb25z
dCBGY3Q1PEExLEEyLEEzLEE0LEE1LFIsTWtPcDU8QTEsQTIsQTMsQTQsQTUsUj4gPiBjdXJyeShS
ICgqIGYpKEExLEEyLEEzLEE0LEE1KSl7CiAgcmV0dXJuIEZjdDU8QTEsQTIsQTMsQTQsQTUsUixN
a09wNTxBMSxBMixBMyxBNCxBNSxSPiA+ICggTWtPcDU8QTEsQTIsQTMsQTQsQTUsUj4oZikpOwp9
CgogCgogCiAgdGVtcGxhdGUgPGNsYXNzIEY+CiAgc3RhdGljIGludCBhdXhSb3RhdGVSb3dzKEZj
dDE8aW50LGludCxGPiBmLCBpbnQgYmxvY2tzLCBpbnQgcm93LCBpbnQgY29sKXsKICAgIHJldHVy
biAoY29sICsgZihyb3cpKyBibG9ja3MpICUgYmxvY2tzO30KCiAgdGVtcGxhdGUgPGNsYXNzIEY+
CiAgc3RhdGljIGludCBhdXhSb3RhdGVDb2xzKEZjdDE8aW50LGludCxGPiBmLCBpbnQgYmxvY2tz
LCBpbnQgcm93LCBpbnQgY29sKXsKICAgIHJldHVybiAocm93ICsgZihjb2wpICsgYmxvY2tzKSAl
IGJsb2Nrczt9CgogCiAKIApjbGFzcyBQcm9jZXNzOyAgCgp0ZW1wbGF0ZSA8Y2xhc3MgRSwgaW50
IG4+CmNsYXNzIERpc3RyaWJ1dGVkQXJyYXkgewogIEUqIGE7ICAgICAgICAgCiAgaW50IGxvY2Fs
c2l6ZTsKICBpbnQgbm9wcm9jczsgICAgICAgIAogICAKICBpbnQgbG9jYWxwb3NpdGlvbjsgIAog
IGludCBmaXJzdDsgICAgICAgICAgCiAgaW50IG5leHRmaXJzdDsgICAgICAKCnByaXZhdGU6CiAg
dm9pZCBpbml0KCl7CiAgICBpZiAoKG15RXhpdCA9PSB1bmRlZmluZWQpIHx8IChteUVudHJhbmNl
ID09IHVuZGVmaW5lZCkpIHRocm93IE1pc3NpbmdJbml0aWFsaXphdGlvbkV4Y2VwdGlvbigpOwog
ICAgICBub3Byb2NzID0gbXlFeGl0IC0gbXlFbnRyYW5jZSArIDE7ICAKICAgICAgbG9jYWxzaXpl
ID0gbi9ub3Byb2NzOyAgICAgICAgICAgICAgCiAgICAgIGxvY2FscG9zaXRpb24gPSBteWlkIC0g
bXlFbnRyYW5jZTsgCiAgICAgIGZpcnN0ID0gbG9jYWxwb3NpdGlvbiAqIGxvY2Fsc2l6ZTsgIAog
ICAgICBuZXh0Zmlyc3QgPSBmaXJzdCArIGxvY2Fsc2l6ZTsgICAgIAogICAgICBhID0gbmV3IEVb
bG9jYWxzaXplXTt9CnB1YmxpYzoKICB0ZW1wbGF0ZSA8Y2xhc3MgRj4KICBEaXN0cmlidXRlZEFy
cmF5KEZjdDE8aW50LEUsRj4gZil7ICAgCiAgICBpbml0KCk7CiAgICBmb3IoaW50IGkgPSAwOyBp
PGxvY2Fsc2l6ZTsgaSsrKSBhW2ldID0gZihpK2ZpcnN0KTt9CgogIERpc3RyaWJ1dGVkQXJyYXko
RSAoKmYpKGludCkpeyAKICAgIGluaXQoKTsKICAgIGZvcihpbnQgaSA9IDA7IGk8bG9jYWxzaXpl
OyBpKyspIGFbaV0gPSBmKGkrZmlyc3QpO30KCiAgRGlzdHJpYnV0ZWRBcnJheShFIGluaXRpYWwp
eyAKICAgIGluaXQoKTsKICAgIGZvcihpbnQgaSA9IDA7IGk8bG9jYWxzaXplOyBpKyspIGFbaV0g
PSBpbml0aWFsO30KCiAKIAogIERpc3RyaWJ1dGVkQXJyYXkoRSBiW25dKXsgCiAgICBpbml0KCk7
CiAgICBmb3IoaW50IGkgPSAwOyBpPGxvY2Fsc2l6ZTsgaSsrKSBhW2ldID0gYltpK2ZpcnN0XTt9
CgogIERpc3RyaWJ1dGVkQXJyYXkoKSB7ICAgCiAgICBpbml0KCk7fQoKICBpbmxpbmUgaW50IGdl
dEZpcnN0KCl7cmV0dXJuIGZpcnN0O30KCiAgaW5saW5lIGludCBnZXRMb2NhbHNpemUoKXtyZXR1
cm4gbG9jYWxzaXplO30KCiAgaW5saW5lIHZvaWQgc2V0TG9jYWwoaW50IGksIEUgdil7ICAgCiAg
ICBhW2ldID0gdjt9ICAKCiAgaW5saW5lIGJvb2wgaXNMb2NhbChpbnQgaSl7cmV0dXJuIChpPj0g
Zmlyc3QpICYmIChpPG5leHRmaXJzdCk7fQoKICBpbmxpbmUgRSBnZXQoaW50IGkpeyAgCiAgICAg
aWYgKGlzTG9jYWwoaSkpIHJldHVybiBhW2ktZmlyc3RdOwogICAgIGVsc2UgdGhyb3cgTm9uTG9j
YWxBY2Nlc3NFeGNlcHRpb24oKTt9CgogIGlubGluZSBFIGdldExvY2FsKGludCBpKXsgICAKICAg
ICAgcmV0dXJuIGFbaV07fSAgICAgICAgICAgCgogCiAgdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz
IEY+CiAgRGlzdHJpYnV0ZWRBcnJheTxSLG4+IG1hcChjb25zdCBGY3QxPEUsUixGPiBmKXsgIAog
ICAgRGlzdHJpYnV0ZWRBcnJheTxSLG4+IGI7ICAgCiAgICBmb3IoaW50IGkgPSAwOyBpPGxvY2Fs
c2l6ZTsgaSsrKSBiLnNldExvY2FsKGksIGYoYVtpXSkpOwogICAgcmV0dXJuIGI7fSAKCiAgdGVt
cGxhdGUgPGNsYXNzIFI+CiAgRGlzdHJpYnV0ZWRBcnJheTxSLG4+IG1hcChSICgqZikoRSkpe3Jl
dHVybiBtYXAoY3VycnkoZikpO30KCiAgdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIEY+CiAgRGlz
dHJpYnV0ZWRBcnJheTxSLG4+IG1hcEluZGV4KGNvbnN0IEZjdDI8aW50LEUsUixGPiBmKXsgIAog
ICAgRGlzdHJpYnV0ZWRBcnJheTxSLG4+IGI7ICAgCiAgICBmb3IoaW50IGkgPSAwOyBpPGxvY2Fs
c2l6ZTsgaSsrKSBiLnNldExvY2FsKGksIGYoaStmaXJzdCxhW2ldKSk7CiAgICByZXR1cm4gYjt9
IAoKICB0ZW1wbGF0ZSA8Y2xhc3MgUj4KICBEaXN0cmlidXRlZEFycmF5PFIsbj4gbWFwSW5kZXgo
UiAoKmYpKGludCxFKSl7cmV0dXJuIG1hcEluZGV4KGN1cnJ5KGYpKTt9CgogIHRlbXBsYXRlIDxj
bGFzcyBGPgogIHZvaWQgbWFwSW5QbGFjZShjb25zdCBGY3QxPEUsRSxGPiBmKXsgIAogICAgZm9y
KGludCBpID0gMDsgaTxsb2NhbHNpemU7IGkrKykgYVtpXSA9IGYoYVtpXSk7fQoKICB2b2lkIG1h
cEluUGxhY2UoRSAoKmYpKEUpKXttYXBJblBsYWNlKGN1cnJ5KGYpKTt9CgogIHRlbXBsYXRlIDxj
bGFzcyBGPgogIHZvaWQgbWFwSW5kZXhJblBsYWNlKGNvbnN0IEZjdDI8aW50LEUsRSxGPiBmKXsg
IAogICAgZm9yKGludCBpID0gMDsgaTxsb2NhbHNpemU7IGkrKykgYVtpXSA9IGYoaStmaXJzdCxh
W2ldKTt9IAoKICB2b2lkIG1hcEluZGV4SW5QbGFjZShFICgqZikoaW50LEUpKXttYXBJbmRleElu
UGxhY2UoY3VycnkoZikpO30KCiAKICB0ZW1wbGF0ZSA8Y2xhc3MgRTIsIGNsYXNzIFIsIGNsYXNz
IEY+ICAgICAgICAgCiAgRGlzdHJpYnV0ZWRBcnJheTxSLG4+IHppcFdpdGgoRGlzdHJpYnV0ZWRB
cnJheTxFMixuPiYgYiwgY29uc3QgRmN0MjxFLEUyLFIsRj4gZil7IAogICAgRGlzdHJpYnV0ZWRB
cnJheTxSLG4+IGM7IAogICAgZm9yKGludCBpPTA7IGk8bG9jYWxzaXplOyBpKyspIGMuc2V0TG9j
YWwoaSwgZihhW2ldLGIuZ2V0TG9jYWwoaSkpKTsKICAgIHJldHVybiBjO30gCgogIHRlbXBsYXRl
IDxjbGFzcyBFMiwgY2xhc3MgUj4KICBEaXN0cmlidXRlZEFycmF5PFIsbj4gemlwV2l0aChEaXN0
cmlidXRlZEFycmF5PEUyLG4+JiBiLFIgKCpmKShFLEUyKSl7CiAgICByZXR1cm4gemlwV2l0aChi
LGN1cnJ5KGYpKTt9IAoKICB0ZW1wbGF0ZSA8Y2xhc3MgRTIsIGNsYXNzIEY+ICAgICAgICAgICAg
ICAgICAgCiAgdm9pZCAgemlwV2l0aEluUGxhY2UoRGlzdHJpYnV0ZWRBcnJheTxFMixuPiYgYiwg
Y29uc3QgRmN0MjxFLEUyLEUsRj4gZil7IAogICAgZm9yKGludCBpPTA7IGk8bG9jYWxzaXplOyBp
KyspIGFbaV0gPSBmKGFbaV0sYi5nZXRMb2NhbChpKSk7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgRTI+
CiAgdm9pZCB6aXBXaXRoSW5QbGFjZShEaXN0cmlidXRlZEFycmF5PEUyLG4+JiBiLEUgKCpmKShF
LEUyKSl7CiAgICB6aXBXaXRoSW5QbGFjZShiLGN1cnJ5KGYpKTt9CgogIHRlbXBsYXRlIDxjbGFz
cyBFMiwgY2xhc3MgUiwgY2xhc3MgRj4gICAgICAgCiAgRGlzdHJpYnV0ZWRBcnJheTxSLG4+IHpp
cFdpdGhJbmRleChEaXN0cmlidXRlZEFycmF5PEUyLG4+JiBiLCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZjdDM8aW50LEUsRTIsUixGPiBmKXsgCiAgICBEaXN0
cmlidXRlZEFycmF5PFIsbj4gYzsgCiAgICBmb3IoaW50IGk9MDsgaTxsb2NhbHNpemU7IGkrKykg
Yy5zZXRMb2NhbChpLCBmKGkrZmlyc3QsYVtpXSxiLmdldExvY2FsKGkpKSk7CiAgICByZXR1cm4g
Yzt9IAoKICB0ZW1wbGF0ZSA8Y2xhc3MgRTIsIGNsYXNzIFI+CiAgRGlzdHJpYnV0ZWRBcnJheTxS
LG4+IHppcFdpdGhJbmRleChEaXN0cmlidXRlZEFycmF5PEUyLG4+JiBiLFIgKCpmKShpbnQsRSxF
MikpewogICAgcmV0dXJuIHppcFdpdGhJbmRleChiLGN1cnJ5KGYpKTt9IAoKICB0ZW1wbGF0ZSA8
Y2xhc3MgRTIsIGNsYXNzIEY+ICAgICAgICAgICAgICAgIAogIHZvaWQgemlwV2l0aEluZGV4SW5Q
bGFjZShEaXN0cmlidXRlZEFycmF5PEUyLG4+JiBiLCBjb25zdCBGY3QzPGludCxFLEUyLEUsRj4g
Zil7IAogICAgZm9yKGludCBpPTA7IGk8bG9jYWxzaXplOyBpKyspIGFbaV0gPSBmKGkrZmlyc3Qs
YVtpXSxiLmdldExvY2FsKGkpKTt9IAoKICB0ZW1wbGF0ZSA8Y2xhc3MgRTI+CiAgdm9pZCB6aXBX
aXRoSW5kZXhJblBsYWNlKERpc3RyaWJ1dGVkQXJyYXk8RTIsbj4mIGIsRSAoKmYpKGludCxFLEUy
KSl7CiAgICB6aXBXaXRoSW5kZXhJblBsYWNlKGIsY3VycnkoZikpO30gCgogCiAgdm9pZCBnYXRo
ZXIoRSBiW25dKXsKICAgIGZvciAoaW50IGk9MDsgaTxsb2NhbHNpemU7IGkrKykgYltpK2ZpcnN0
XSA9IGFbaV07CiAgICBpbnQgcG93ZXIgPSAxOwogICAgaW50IG5laWdoYm9yOwogICAgaW50IGxv
ZzJub3Byb2NzID0gbG9nMihub3Byb2NzKTsKICAgIGludCBpbmRleHN0YWNrW25dOyAgICAgICAg
ICAgICAgIAogICAgaW5kZXhzdGFja1swXSA9IGZpcnN0OyAKICAgIGludCB0b3AgPSAwOwogICAg
aW50IG9sZHRvcDsKICAgIGZvcihpbnQgaT0wOyBpPGxvZzJub3Byb2NzOyBpKyspewogICAgICBu
ZWlnaGJvciA9IG15RW50cmFuY2UgKyAobG9jYWxwb3NpdGlvbiBeIHBvd2VyKTsKICAgICAgcG93
ZXIgKj0gMjsKICAgICAgb2xkdG9wID0gdG9wOyAgICAgCiAgICAgIGZvciAoaW50IGo9MDsgajw9
b2xkdG9wOyBqKyspeyAgICAgCiAgICAgICAgc2VuZFJlY2VpdmUobmVpZ2hib3IsJmluZGV4c3Rh
Y2tbal0sJmluZGV4c3RhY2tbKyt0b3BdLHNpemVvZihpbnQpKTsKICAgICAgICBzZW5kUmVjZWl2
ZShuZWlnaGJvciwmYltpbmRleHN0YWNrW2pdXSwmYltpbmRleHN0YWNrW3RvcF1dLHNpemVvZihF
KSpsb2NhbHNpemUpO319fQoKIAogIHRlbXBsYXRlIDxjbGFzcyBGPgogIEUgZm9sZChjb25zdCBG
Y3QyPEUsRSxFLEY+IGYpeyAgCiAgICAgCiAgICAgCiAgICAgCiAgICBFIHJlc3VsdCA9IGFbMF07
CiAgICBmb3IoaW50IGk9MTsgaTxsb2NhbHNpemU7IGkrKykgCiAgICAgIHJlc3VsdCA9IGYocmVz
dWx0LCBhW2ldKTsKICAgIGlmIChEZWJ1Zykge3ByaW50ZigicmVzdWx0IG9mIGxvY2FsIGZvbGQg
b24gJWQ6ICVkXG4iLG15aWQscmVzdWx0KTtmZmx1c2goKCZfX2lvYlsxXSkgKTt9CiAgICAgCiAg
ICBpbnQgcG93ZXIgPSAxOwogICAgaW50IG5laWdoYm9yOwogICAgRSByZXN1bHQyOwogICAgZm9y
KGludCBpPTA7IGk8bG9nMihub3Byb2NzKTsgaSsrKXsKICAgICAgbmVpZ2hib3IgPSBteUVudHJh
bmNlICsgKGxvY2FscG9zaXRpb24gXiBwb3dlcik7CiAgICAgIHBvd2VyICo9IDI7CiAgICAgIHNl
bmRSZWNlaXZlKG5laWdoYm9yLCZyZXN1bHQsJnJlc3VsdDIsc2l6ZW9mKEUpKTsgIAogICAgICBy
ZXN1bHQgPSBmKHJlc3VsdCxyZXN1bHQyKTt9CiAgICByZXR1cm4gcmVzdWx0O30KCiAgRSBmb2xk
KEUgKCpmKShFLEUpKXsgcmV0dXJuIGZvbGQoY3VycnkoZikpO30KCiAKICB0ZW1wbGF0ZSA8Y2xh
c3MgRj4KICB2b2lkIHNjYW4oY29uc3QgRmN0MjxFLEUsRSxGPiBmKXsgIAogICAgIAogICAgIAog
ICAgZm9yKGludCBpPTE7IGk8bG9jYWxzaXplOyBpKyspCiAgICAgIGFbaV0gID0gZihhW2ktMV0s
IGFbaV0pOwogICAgRSBzdW0gPSBhW2xvY2Fsc2l6ZS0xXTsKICAgIGlmIChEZWJ1Zykge3ByaW50
ZigibG9jYWwgc3VtIG9uICVkOiAlZFxuIixteWlkLHN1bSk7ZmZsdXNoKCgmX19pb2JbMV0pICk7
fQogICAgIAogICAgaW50IHBvd2VyID0gMTsKICAgIGludCBuZWlnaGJvcjsKICAgIEUgbmVpZ2hi
b3JTdW07CiAgICBmb3IoaW50IGk9MDsgaTxsb2cyKG5vcHJvY3MpOyBpKyspewogICAgICBuZWln
aGJvciA9IG15RW50cmFuY2UgKyAobG9jYWxwb3NpdGlvbiBeIHBvd2VyKTsKICAgICAgcG93ZXIg
Kj0gMjsKICAgICAgc2VuZFJlY2VpdmUobmVpZ2hib3IsJnN1bSwmbmVpZ2hib3JTdW0sc2l6ZW9m
KEUpKTsgCiAgICAgIGlmIChteWlkID4gbmVpZ2hib3IpIAogICAgICAgIGZvcihpbnQgaj0wOyBq
PGxvY2Fsc2l6ZTsgaisrKSBhW2pdID0gZihhW2pdLG5laWdoYm9yU3VtKTsKICAgICAgc3VtID0g
ZihzdW0sbmVpZ2hib3JTdW0pO319CgogIEUgc2NhbihFICgqZikoRSxFKSl7c2NhbihjdXJyeShm
KSk7fQogCiAgdGVtcGxhdGUgPGNsYXNzIEY+CiAgdm9pZCBwZXJtdXRlKGNvbnN0IEZjdDE8aW50
LGludCxGPiBmKXsKICAgIGludCByZWNlaXZlcjsKICAgIHJlY2VpdmVyID0gbXlFbnRyYW5jZSAr
IGYobG9jYWxwb3NpdGlvbik7CiAgICBpZiAoKHJlY2VpdmVyIDwgbXlFbnRyYW5jZSkgfHwgKHJl
Y2VpdmVyID4gbXlFeGl0KSkgdGhyb3cgSWxsZWdhbFBhcnRpdGlvbkV4Y2VwdGlvbigpOwogICAg
aW50IHNlbmRlciA9IHVuZGVmaW5lZDsKICAgIGZvciAoaW50IGk9MDsgaTwgbm9wcm9jczsgaSsr
KSAgCiAgICAgICBpZiAoZihpKStteUVudHJhbmNlID09IG15aWQpIAogICAgICAgICBpZiAoc2Vu
ZGVyID09IHVuZGVmaW5lZCkgc2VuZGVyID0gbXlFbnRyYW5jZSArIGk7CiAgICAgICAgIGVsc2Ug
dGhyb3cgSWxsZWdhbFBlcm11dGVFeGNlcHRpb24oKTsgIAogICAgaWYgIChzZW5kZXIgPT0gdW5k
ZWZpbmVkKSB0aHJvdyBJbGxlZ2FsUGVybXV0ZUV4Y2VwdGlvbigpOyAgCiAgICBpZiAocmVjZWl2
ZXIgIT0gbXlpZCl7IAogICAgICBNUElfU3RhdHVzIHN0YXQ7CiAgICAgIEUgYltsb2NhbHNpemVd
OwogICAgICBmb3IgKGludCBpPTA7IGk8bG9jYWxzaXplOyBpKyspIGJbaV0gPSBhW2ldOwogICAg
ICBzZW5kKHJlY2VpdmVyLGIsc2l6ZW9mKEUpKmxvY2Fsc2l6ZSk7ICAgICAKICAgICAgcmVjZWl2
ZShzZW5kZXIsYSxzaXplb2YoRSkqbG9jYWxzaXplLCZzdGF0KTt9fSAgCgogIHZvaWQgcGVybXV0
ZShpbnQgKCpmKShpbnQpKXsgcmV0dXJuIHBlcm11dGUoY3VycnkoZikpO30KCiAKICB2b2lkIGJy
b2FkY2FzdFBhcnRpdGlvbihpbnQgYmxvY2speyAgCiAgICAgaWYgKChibG9jayA8IDApIHx8IChi
bG9jayA+PSBuL2xvY2Fsc2l6ZSkpIHRocm93IElsbGVnYWxQYXJ0aXRpb25FeGNlcHRpb24oKTsK
ICAgICB1bnNpZ25lZCBpbnQgbmVpZ2hib3I7CiAgICAgdW5zaWduZWQgaW50IHBvd2VyID0gMTsK
ICAgICB1bnNpZ25lZCBpbnQgbWFzayA9IDEwNzM3NDE4MjI7ICAKICAgICBNUElfU3RhdHVzIHN0
YXQ7CiAgICAgZm9yKGludCBpPTA7IGk8bG9nMihub3Byb2NzKTsgaSsrKXsgCiAgICAgIGlmICgo
bG9jYWxwb3NpdGlvbiAmIG1hc2spID09IChibG9jayAmIG1hc2spKXsKICAgICAgICBuZWlnaGJv
ciA9IG15RW50cmFuY2UgKyAobG9jYWxwb3NpdGlvbiBeIHBvd2VyKTsKICAgICAgICBpZiAoKGxv
Y2FscG9zaXRpb24gJiBwb3dlcikgPT0gKGJsb2NrICYgcG93ZXIpKQogICAgICAgICAgc3luY1Nl
bmQobmVpZ2hib3IsYSxzaXplb2YoRSkqbG9jYWxzaXplKTsKICAgICAgICBlbHNlIHJlY2VpdmUo
bmVpZ2hib3IsYSxzaXplb2YoRSkqbG9jYWxzaXplLCZzdGF0KTt9CiAgICAgIHBvd2VyICo9IDI7
CiAgICAgIG1hc2sgJj0gfnBvd2VyO319CgogIHZvaWQgYnJvYWRjYXN0KGludCBpbmRleCl7ICAK
ICAgICBpbnQgYmxvY2sgPSBpbmRleCAvIGxvY2Fsc2l6ZTsKICAgICBpbnQgbG9jYWxpbmRleCA9
IGluZGV4ICUgbG9jYWxzaXplOyAgCiAgICAgaWYgKChibG9jayA8IDApIHx8IChibG9jayA+IG4v
bG9jYWxzaXplKSkgdGhyb3cgSWxsZWdhbFBhcnRpdGlvbkV4Y2VwdGlvbigpOwogICAgIHVuc2ln
bmVkIGludCBuZWlnaGJvcjsKICAgICB1bnNpZ25lZCBpbnQgcG93ZXIgPSAxOwogICAgIHVuc2ln
bmVkIGludCBtYXNrID0gMTA3Mzc0MTgyMjsgIAogICAgIE1QSV9TdGF0dXMgc3RhdDsKICAgICBm
b3IoaW50IGk9MDsgaTxsb2cyKG5vcHJvY3MpOyBpKyspeyAKICAgICAgaWYgKChsb2NhbHBvc2l0
aW9uICYgbWFzaykgPT0gKGJsb2NrICYgbWFzaykpewogICAgICAgIG5laWdoYm9yID0gbXlFbnRy
YW5jZSArIChsb2NhbHBvc2l0aW9uIF4gcG93ZXIpOwogICAgICAgIGlmICgobG9jYWxwb3NpdGlv
biAmIHBvd2VyKSA9PSAoYmxvY2sgJiBwb3dlcikpCiAgICAgICAgICBzeW5jU2VuZChuZWlnaGJv
ciwmYVtsb2NhbGluZGV4XSxzaXplb2YoRSkpOwogICAgICAgIGVsc2UgcmVjZWl2ZShuZWlnaGJv
ciwmYVtsb2NhbGluZGV4XSxzaXplb2YoRSksJnN0YXQpO30KICAgICAgcG93ZXIgKj0gMjsKICAg
ICAgbWFzayAmPSB+cG93ZXI7fQogICAgIGZvciAoaW50IGk9MDsgaTxsb2NhbHNpemU7IGkrKykg
YVtpXSA9IGFbbG9jYWxpbmRleF07fSAKCiAKICB2b2lkIHNob3coKXsgIAogICAgRSogYiA9ICBu
ZXcgRVtuXTsKICAgIGdhdGhlcihiKTsgCiAgICBpZiAobXlpZCA9PSBteUVudHJhbmNlKXsKICAg
ICAgcHJpbnRmKCJ7Iik7CiAgICAgIGZvcihpbnQgaT0wOyBpPG4tMTsgaSsrKSBwcmludGYoIiVk
LCIsYltpXSk7CiAgICAgIHByaW50ZigiJWR9XG4iLGJbbi0xXSk7IGZmbHVzaCgoJl9faW9iWzFd
KSApO319Cn07CiAgCnRlbXBsYXRlIDxjbGFzcyBFLCBpbnQgbj4Kb3N0cmVhbSYgb3BlcmF0b3I8
PChvc3RyZWFtJiBvcywgRGlzdHJpYnV0ZWRBcnJheTxFLG4+JiBhKXsKICBFIGJbbl07CiAgZ2F0
aGVyKGIpOyAKICBpZiAobXlpZCA9PSBteUVudHJhbmNlKXsKICAgIG9zIDw8ICJ7IjsKICAgIGZv
cihpbnQgaT0wOyBpPG4tMTsgaSsrKSBvcyA8PCBiW2ldIDw8ICIsIjsKICAgIG9zIDw8IGJbbi0x
XSA8PCAifSIgPDwgZW5kbDt9CiAgcmV0dXJuIG9zO30KCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3Mg
RSwgaW50IG4sIGludCBtPgpjbGFzcyBEaXN0cmlidXRlZE1hdHJpeCB7CiAgRSoqIGE7ICAgICAg
ICAgICAgICAgICAKICBpbnQgbG9jYWxSb3dzOyAgICAgICAgIAogIGludCBsb2NhbENvbHM7ICAg
ICAgICAgCiAgaW50IGxvY2Fsc2l6ZTsgICAgICAgICAKICBpbnQgYmxvY2tzSW5Sb3c7ICAgICAg
IAogIGludCBibG9ja3NJbkNvbDsgICAgICAgCiAgaW50IG5vcHJvY3M7ICAgICAgICAgICAKICAg
CiAgaW50IGxvY2FsQ29sUG9zaXRpb247ICAKICBpbnQgbG9jYWxSb3dQb3NpdGlvbjsgIAogIGlu
dCBsb2NhbFBvc2l0aW9uOyAgICAgCiAgaW50IGZpcnN0Um93OyAgICAgICAgICAKICBpbnQgZmly
c3RDb2w7ICAgICAgICAgIAogIGludCBuZXh0Um93OyAgICAgICAgICAgCiAgaW50IG5leHRDb2w7
ICAgICAgICAgICAKCnByaXZhdGU6CiAgdm9pZCBpbml0KGludCByb3dzLCBpbnQgY29scyl7ICAg
CiAgICBpZiAoKG15RXhpdCA9PSB1bmRlZmluZWQpIHx8IChteUVudHJhbmNlID09IHVuZGVmaW5l
ZCkpIHRocm93IE1pc3NpbmdJbml0aWFsaXphdGlvbkV4Y2VwdGlvbigpOwogICAgYmxvY2tzSW5S
b3cgPSByb3dzOyBibG9ja3NJbkNvbCA9IGNvbHM7CiAgICBub3Byb2NzID0gbXlFeGl0IC0gbXlF
bnRyYW5jZSArIDE7ICAKICAgIGlmIChjb2xzKnJvd3MgIT0gbm9wcm9jcykgdGhyb3cgUGFydGl0
aW9uaW5nSW1wb3NzaWJsZUV4Y2VwdGlvbigpOwogICAgbG9jYWxSb3dzID0gbiAvIHJvd3M7ICAg
CiAgICBsb2NhbENvbHMgPSBtIC8gY29sczsgICAKICAgIGxvY2Fsc2l6ZSA9ICBsb2NhbFJvd3Mq
bG9jYWxDb2xzOyAgIAogICAgbG9jYWxDb2xQb3NpdGlvbiA9IChteWlkIC0gbXlFbnRyYW5jZSkg
JSBjb2xzOyAgCiAgICBsb2NhbFJvd1Bvc2l0aW9uID0gKG15aWQgLSBteUVudHJhbmNlKSAvIGNv
bHM7CiAgICBsb2NhbFBvc2l0aW9uID0gbG9jYWxSb3dQb3NpdGlvbiAqIGNvbHMgKyBsb2NhbENv
bFBvc2l0aW9uOwogICAgZmlyc3RSb3cgPSBsb2NhbFJvd1Bvc2l0aW9uICogbG9jYWxSb3dzOwog
ICAgZmlyc3RDb2wgPSBsb2NhbENvbFBvc2l0aW9uICogbG9jYWxDb2xzOwogICAgbmV4dFJvdyA9
IGZpcnN0Um93ICsgbG9jYWxSb3dzOwogICAgbmV4dENvbCA9IGZpcnN0Q29sICsgbG9jYWxDb2xz
OyAgIAogICAgYSA9IG5ldyBFKltsb2NhbFJvd3NdOwogICAgZm9yIChpbnQgaT0wOyBpPGxvY2Fs
Um93czsgaSsrKSBhW2ldID0gbmV3IEVbbG9jYWxDb2xzXTt9CgpwdWJsaWM6CiAgdGVtcGxhdGUg
PGNsYXNzIEY+CiAgRGlzdHJpYnV0ZWRNYXRyaXgoRmN0MjxpbnQsaW50LEUsRj4gZiwgaW50IHJv
d3MsIGludCBjb2xzKXsKICAgIGluaXQocm93cywgY29scyk7CiAgICBmb3IoaW50IGkgPSAwOyBp
PGxvY2FsUm93czsgaSsrKQogICAgICBmb3IoaW50IGogPSAwOyBqPGxvY2FsQ29sczsgaisrKSBh
W2ldW2pdID0gZihpK2ZpcnN0Um93LGorZmlyc3RDb2wpO30KCiAgRGlzdHJpYnV0ZWRNYXRyaXgo
RSAoKmYpKGludCxpbnQpLCBpbnQgcm93cywgaW50IGNvbHMpeyAKICAgIGluaXQocm93cywgY29s
cyk7ICAKICAgIGZvcihpbnQgaSA9IDA7IGk8bG9jYWxSb3dzOyBpKyspCiAgICAgIGZvcihpbnQg
aiA9IDA7IGo8bG9jYWxDb2xzOyBqKyspIGFbaV1bal0gPSBmKGkrZmlyc3RSb3csaitmaXJzdENv
bCk7fQoKICBEaXN0cmlidXRlZE1hdHJpeChFIGluaXRpYWwsIGludCByb3dzLCBpbnQgY29scyl7
IAogICAgaW5pdChyb3dzLCBjb2xzKTsgIAogICAgZm9yKGludCBpID0gMDsgaTxsb2NhbFJvd3M7
IGkrKykKICAgICAgZm9yKGludCBqID0gMDsgajxsb2NhbENvbHM7IGorKykgYVtpXVtqXSA9IGlu
aXRpYWw7fQoKIAogCiAgRGlzdHJpYnV0ZWRNYXRyaXgoRSBiW25dW21dLCBpbnQgcm93cywgaW50
IGNvbHMpewogICAgaW5pdChyb3dzLCBjb2xzKTsgCiAgICBmb3IoaW50IGkgPSAwOyBpPGxvY2Fs
Um93czsgaSsrKQogICAgICBmb3IoaW50IGogPSAwOyBqPGxvY2FsQ29sczsgaisrKSBhW2ldW2pd
ID0gYltpK2ZpcnN0Um93XVtqK2ZpcnN0Q29sXTt9CgoKICBEaXN0cmlidXRlZE1hdHJpeChpbnQg
cm93cywgaW50IGNvbHMpe2luaXQocm93cywgY29scyk7fQoKICBpbmxpbmUgaW50IGdldEZpcnN0
Um93KCl7cmV0dXJuIGZpcnN0Um93O30KCiAgaW5saW5lIGludCBnZXRGaXJzdENvbCgpe3JldHVy
biBmaXJzdENvbDt9CgogIGlubGluZSBpbnQgZ2V0TG9jYWxSb3dzKCl7cmV0dXJuIGxvY2FsUm93
czt9CiAKICBpbmxpbmUgaW50IGdldExvY2FsQ29scygpe3JldHVybiBsb2NhbENvbHM7fQoKICBp
bmxpbmUgaW50IGdldEJsb2Nrc0luUm93KCl7IHJldHVybiBibG9ja3NJblJvdzt9CgogIGlubGlu
ZSBpbnQgZ2V0QmxvY2tzSW5Db2woKXtyZXR1cm4gYmxvY2tzSW5Db2w7fQoKICBpbmxpbmUgdm9p
ZCBzZXRMb2NhbChpbnQgaSwgaW50IGosIEUgdil7ICAgCiAgICBhW2ldW2pdID0gdjt9ICAKCiAg
aW5saW5lIGJvb2wgaXNMb2NhbChpbnQgaSwgaW50IGopewogICAgcmV0dXJuIChpPj0gZmlyc3RS
b3cpICYmIChpPG5leHRSb3cpICYmIChqPj0gZmlyc3RDb2wpICYmIChqPG5leHRDb2wpO30KCiAg
aW5saW5lIEUgZ2V0KGludCBpLCBpbnQgail7ICAKICAgIGlmIChpc0xvY2FsKGksaikpIHJldHVy
biBhW2ktZmlyc3RSb3ddW2otZmlyc3RDb2xdOwogICAgZWxzZSB0aHJvdyBOb25Mb2NhbEFjY2Vz
c0V4Y2VwdGlvbigpO30KCiAgaW5saW5lIEUgZ2V0TG9jYWwoaW50IGksIGludCBqKXsgICAKICAg
IHJldHVybiBhW2ldW2pdO30gICAgICAKCiAgaW5saW5lIEUgZ2V0TG9jYWxHbG9iYWwoaW50IGks
IGludCBqKXsgICAKICAgIGlmICgoaj49IGZpcnN0Q29sKSAmJiAoajxuZXh0Q29sKSkgcmV0dXJu
IGFbaV1bai1maXJzdENvbF07ICAKICAgIGVsc2UgdGhyb3cgTm9uTG9jYWxBY2Nlc3NFeGNlcHRp
b24oKTt9CgogIGlubGluZSBFIGdldEdsb2JhbExvY2FsKGludCBpLCBpbnQgail7ICAgCiAgICBp
ZiAoKGk+PSBmaXJzdFJvdykgJiYgKGk8bmV4dFJvdykpIHJldHVybiBhW2ktZmlyc3RSb3ddW2pd
OyAgCiAgICBlbHNlIHRocm93IE5vbkxvY2FsQWNjZXNzRXhjZXB0aW9uKCk7fQoKIAogIHRlbXBs
YXRlIDxjbGFzcyBSLCBjbGFzcyBGPgogIERpc3RyaWJ1dGVkTWF0cml4PFIsbixtPiBtYXAoY29u
c3QgRmN0MTxFLFIsRj4gZil7ICAKICAgIERpc3RyaWJ1dGVkTWF0cml4PFIsbixtPiBiKGJsb2Nr
c0luUm93LGJsb2Nrc0luQ29sKTsgICAKICAgIGZvcihpbnQgaSA9IDA7IGk8bG9jYWxSb3dzOyBp
KyspCiAgICAgIGZvcihpbnQgaiA9IDA7IGo8bG9jYWxDb2xzOyBqKyspIGIuc2V0TG9jYWwoaSxq
LCBmKGFbaV1bal0pKTsKICAgIHJldHVybiBiO30gCgogIHRlbXBsYXRlIDxjbGFzcyBSPgogIERp
c3RyaWJ1dGVkTWF0cml4PFIsbixtPiBtYXAoUiAoKmYpKEUpKXtyZXR1cm4gbWFwKGN1cnJ5KGYp
KTt9CgogIHRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBGPgogIERpc3RyaWJ1dGVkTWF0cml4PFIs
bixtPiBtYXBJbmRleChjb25zdCBGY3QzPGludCxpbnQsRSxSLEY+IGYpeyAgCiAgICBEaXN0cmli
dXRlZE1hdHJpeDxSLG4sbT4gYihibG9ja3NJblJvdyxibG9ja3NJbkNvbCk7ICAKICAgIGZvcihp
bnQgaSA9IDA7IGk8bG9jYWxSb3dzOyBpKyspCiAgICAgIGZvcihpbnQgaiA9IDA7IGo8bG9jYWxD
b2xzOyBqKyspIGIuc2V0TG9jYWwoaSxqLCBmKGkrZmlyc3RSb3csaitmaXJzdENvbCxhW2ldW2pd
KSk7CiAgICByZXR1cm4gYjt9IAoKICB0ZW1wbGF0ZSA8Y2xhc3MgUj4KICBEaXN0cmlidXRlZE1h
dHJpeDxSLG4sbT4gbWFwSW5kZXgoUiAoKmYpKGludCxpbnQsRSkpe3JldHVybiBtYXBJbmRleChj
dXJyeShmKSk7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgRj4KICB2b2lkIG1hcEluUGxhY2UoY29uc3Qg
RmN0MTxFLEUsRj4gZil7ICAKICAgIGZvcihpbnQgaSA9IDA7IGk8bG9jYWxSb3dzOyBpKyspCiAg
ICAgIGZvcihpbnQgaiA9IDA7IGo8bG9jYWxDb2xzOyBqKyspIGFbaV1bal0gPSBmKGFbaV1bal0p
O30gCgogIHZvaWQgbWFwSW5QbGFjZShFICgqZikoRSkpe21hcEluUGxhY2UoY3VycnkoZikpO30K
CgogIHRlbXBsYXRlIDxjbGFzcyBGPgogIHZvaWQgbWFwSW5kZXhJblBsYWNlKGNvbnN0IEZjdDM8
aW50LGludCxFLEUsRj4gZil7ICAKICAgIGZvcihpbnQgaSA9IDA7IGk8bG9jYWxSb3dzOyBpKysp
CiAgICAgIGZvcihpbnQgaiA9IDA7IGo8bG9jYWxDb2xzOyBqKyspIGFbaV1bal0gPSBmKGkrZmly
c3RSb3csaitmaXJzdENvbCxhW2ldW2pdKTt9IAoKICB2b2lkIG1hcEluZGV4SW5QbGFjZShFICgq
ZikoaW50LGludCxFKSl7bWFwSW5kZXhJblBsYWNlKGN1cnJ5KGYpKTt9CgogCiAgdGVtcGxhdGUg
PGNsYXNzIEUyLCBjbGFzcyBSLCBjbGFzcyBGPiAgICAgICAgIAogIERpc3RyaWJ1dGVkTWF0cml4
PFIsbixtPiB6aXBXaXRoKERpc3RyaWJ1dGVkTWF0cml4PEUyLG4sbT4mIGIsIGNvbnN0IEZjdDI8
RSxFMixSLEY+IGYpeyAKICAgIERpc3RyaWJ1dGVkTWF0cml4PFIsbixtPiBjKGJsb2Nrc0luUm93
LGJsb2Nrc0luQ29sKTsgCiAgICBmb3IoaW50IGkgPSAwOyBpPGxvY2FsUm93czsgaSsrKQogICAg
ICBmb3IoaW50IGogPSAwOyBqPGxvY2FsQ29sczsgaisrKSBjLnNldExvY2FsKGksIGosIGYoYVtp
XVtqXSxiLmdldExvY2FsKGksaikpKTsKICAgIHJldHVybiBjO30gCgogIHRlbXBsYXRlIDxjbGFz
cyBFMiwgY2xhc3MgUj4KICBEaXN0cmlidXRlZE1hdHJpeDxSLG4sbT4gemlwV2l0aChEaXN0cmli
dXRlZE1hdHJpeDxFMixuLG0+JiBiLFIgKCpmKShFLEUyKSl7CiAgICByZXR1cm4gemlwV2l0aChi
LGN1cnJ5KGYpKTt9IAoKICB0ZW1wbGF0ZSA8Y2xhc3MgRTIsIGNsYXNzIEY+ICAgICAgICAgICAg
ICAgICAgCiAgdm9pZCAgemlwV2l0aEluUGxhY2UoRGlzdHJpYnV0ZWRNYXRyaXg8RTIsbixtPiYg
YiwgY29uc3QgRmN0MjxFLEUyLEUsRj4gZil7IAogICAgZm9yKGludCBpID0gMDsgaTxsb2NhbFJv
d3M7IGkrKykKICAgICAgZm9yKGludCBqID0gMDsgajxsb2NhbENvbHM7IGorKykgYVtpXVtqXSA9
IGYoYVtpXVtqXSxiLmdldExvY2FsKGksaikpO30KCiAgdGVtcGxhdGUgPGNsYXNzIEUyPgogIHZv
aWQgemlwV2l0aEluUGxhY2UoRGlzdHJpYnV0ZWRNYXRyaXg8RTIsbixtPiYgYixFICgqZikoRSxF
MikpewogICAgemlwV2l0aEluUGxhY2UoYixjdXJyeShmKSk7fQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
RTIsIGNsYXNzIFIsIGNsYXNzIEY+ICAgICAgIAogIERpc3RyaWJ1dGVkTWF0cml4PFIsbixtPiB6
aXBXaXRoSW5kZXgoRGlzdHJpYnV0ZWRNYXRyaXg8RTIsbixtPiYgYiwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGY3Q0PGludCxpbnQsRSxFMixSLEY+IGYp
eyAKICAgIERpc3RyaWJ1dGVkTWF0cml4PFIsbixtPiBjKGJsb2Nrc0luUm93LGJsb2Nrc0luQ29s
KTsgIAogICAgZm9yKGludCBpID0gMDsgaTxsb2NhbFJvd3M7IGkrKykKICAgICAgZm9yKGludCBq
ID0gMDsgajxsb2NhbENvbHM7IGorKykgCiAgICAgICAgYy5zZXRMb2NhbChpLGosIGYoaStmaXJz
dFJvdyxqK2ZpcnN0Q29sLGFbaV1bal0sYi5nZXRMb2NhbChpLGopKSk7CiAgICByZXR1cm4gYzt9
IAoKICB0ZW1wbGF0ZSA8Y2xhc3MgRTIsIGNsYXNzIFI+CiAgRGlzdHJpYnV0ZWRNYXRyaXg8Uixu
LG0+IHppcFdpdGhJbmRleChEaXN0cmlidXRlZE1hdHJpeDxFMixuLG0+JiBiLFIgKCpmKShpbnQs
aW50LEUsRTIpKXsKICAgIHJldHVybiB6aXBXaXRoSW5kZXgoYixjdXJyeShmKSk7fSAKCiAgdGVt
cGxhdGUgPGNsYXNzIEUyLCBjbGFzcyBGPiAgICAgICAgICAgICAgICAKICB2b2lkIHppcFdpdGhJ
bmRleEluUGxhY2UoRGlzdHJpYnV0ZWRNYXRyaXg8RTIsbixtPiYgYiwgY29uc3QgRmN0NDxpbnQs
aW50LEUsRTIsRSxGPiBmKXsgIAogICAgZm9yKGludCBpID0gMDsgaTxsb2NhbFJvd3M7IGkrKykK
ICAgICAgZm9yKGludCBqID0gMDsgajxsb2NhbENvbHM7IGorKykgCiAgICAgICAgYVtpXVtqXSA9
IGYoaStmaXJzdFJvdyxqK2ZpcnN0Q29sLGFbaV1bal0sYi5nZXRMb2NhbChpLGopKTt9CgogIHRl
bXBsYXRlIDxjbGFzcyBFMj4KICB2b2lkIHppcFdpdGhJbmRleEluUGxhY2UoRGlzdHJpYnV0ZWRN
YXRyaXg8RTIsbixtPiYgYixFICgqZikoaW50LGludCxFLEUyKSl7CiAgICB6aXBXaXRoSW5kZXhJ
blBsYWNlKGIsY3VycnkoZikpO30gCgoKIAogIHN0cnVjdCBCdWZmZXJ7CiAgICAgIGludCByb3c7
CiAgICAgIGludCBjb2w7CiAgICAgIEUgbWF0cml4W24qbV07fTsKCiAgdm9pZCBnYXRoZXIoRSBi
W25dW21dKXsgCiAgICBmb3IoaW50IGkgPSAwOyBpPGxvY2FsUm93czsgaSsrKQogICAgICBmb3Io
aW50IGogPSAwOyBqPGxvY2FsQ29sczsgaisrKSBiW2krZmlyc3RSb3ddW2orZmlyc3RDb2xdID0g
YVtpXVtqXTsKICAgICAKICAgIEJ1ZmZlciBpbmJ1ZjsKICAgIEJ1ZmZlciBvdXRidWY7CiAgICBp
bnQgYnVmQ291bnRlcjsKCiAgICBpbnQgcG93ZXIgPSAxOwogICAgaW50IG5laWdoYm9yOwogICAg
aW50IGxvZzJub3Byb2NzID0gbG9nMihub3Byb2NzKTsKICAgIGludCBpbmRleFN0YWNrWzIqbl07
ICAgICAgICAgICAgICAgCiAgICBpbmRleFN0YWNrWzBdID0gZmlyc3RSb3c7ICBpbmRleFN0YWNr
WzFdID0gZmlyc3RDb2w7IAogICAgaW50IHRvcCA9IDE7CiAgICBpbnQgb2xkdG9wOwogICAgZm9y
KGludCBpPTA7IGk8bG9nMm5vcHJvY3M7IGkrKyl7CiAgICAgIG5laWdoYm9yID0gbXlFbnRyYW5j
ZSArIChsb2NhbFBvc2l0aW9uIF4gcG93ZXIpOwogICAgICBwb3dlciAqPSAyOwogICAgICBvbGR0
b3AgPSB0b3A7ICAgICAKICAgICAgZm9yIChpbnQgaj0wOyBqPD1vbGR0b3A7IGorPTIpeyAgICAg
CiAgICAgICAgIAogICAgICAgIG91dGJ1Zi5yb3cgPSBpbmRleFN0YWNrW2pdOwogICAgICAgIG91
dGJ1Zi5jb2wgPSBpbmRleFN0YWNrW2orMV07CiAgICAgICAgYnVmQ291bnRlciA9IDA7CiAgICAg
ICAgZm9yIChpbnQgaz0wOyBrPGxvY2FsUm93czsgaysrKQogICAgICAgICAgIGZvciAoaW50IGw9
MDsgbDxsb2NhbENvbHM7IGwrKykgCiAgICAgICAgICAgICBvdXRidWYubWF0cml4W2J1ZkNvdW50
ZXIrK10gPSBiW291dGJ1Zi5yb3cra11bb3V0YnVmLmNvbCtsXTsKCXNlbmRSZWNlaXZlKG5laWdo
Ym9yLCZvdXRidWYsJmluYnVmLDIqc2l6ZW9mKGludCkrbG9jYWxzaXplKnNpemVvZihFKSk7CiAg
ICAgICAgIAogICAgICAgIGluZGV4U3RhY2tbKyt0b3BdID0gaW5idWYucm93OwogICAgICAgIGlu
ZGV4U3RhY2tbKyt0b3BdID0gaW5idWYuY29sOwogICAgICAgIGJ1ZkNvdW50ZXIgPSAwOwogICAg
ICAgIGZvciAoaW50IGs9MDsgazxsb2NhbFJvd3M7IGsrKykKICAgICAgICAgICBmb3IgKGludCBs
PTA7IGw8bG9jYWxDb2xzOyBsKyspIAogICAgICAgICAgICAgYltpbmJ1Zi5yb3cra11baW5idWYu
Y29sK2xdID0gaW5idWYubWF0cml4W2J1ZkNvdW50ZXIrK107fX19CgogCiAgdGVtcGxhdGUgPGNs
YXNzIEY+CiAgRSBmb2xkKGNvbnN0IEZjdDI8RSxFLEUsRj4gZil7ICAKICAgICAKICAgICAKICAg
ICAKICAgIEUgcmVzdWx0ID0gYVswXVswXTsKICAgIGZvcihpbnQgaSA9IDA7IGk8bG9jYWxSb3dz
OyBpKyspCiAgICAgIGZvcihpbnQgaiA9IDA7IGo8bG9jYWxDb2xzOyBqKyspIAogICAgICAgIGlm
ICgoaSAhPSAwKSB8fCAoaiAhPSAwKSkKICAgICAgICAgIHJlc3VsdCA9IGYocmVzdWx0LCBhW2ld
W2pdKTsKICAgIGlmIChEZWJ1Zykge3ByaW50ZigicmVzdWx0IG9mIGxvY2FsIGZvbGQgb24gJWQ6
ICVkXG4iLG15aWQscmVzdWx0KTtmZmx1c2goKCZfX2lvYlsxXSkgKTt9CiAgICAgCiAgICBpbnQg
cG93ZXIgPSAxOwogICAgaW50IG5laWdoYm9yOwogICAgRSByZXN1bHQyOwogICAgZm9yKGludCBp
PTA7IGk8bG9nMihub3Byb2NzKTsgaSsrKXsKICAgICAgbmVpZ2hib3IgPSBteUVudHJhbmNlICsg
KGxvY2FsUG9zaXRpb24gXiBwb3dlcik7CiAgICAgIHBvd2VyICo9IDI7CiAgICAgIHNlbmRSZWNl
aXZlKG5laWdoYm9yLCZyZXN1bHQsJnJlc3VsdDIsc2l6ZW9mKEUpKTsgIAogICAgICByZXN1bHQg
PSBmKHJlc3VsdCxyZXN1bHQyKTt9CiAgICByZXR1cm4gcmVzdWx0O30KCiAgRSBmb2xkKEUgKCpm
KShFLEUpKXsgcmV0dXJuIGZvbGQoY3VycnkoZikpO30KCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCgogCgogCiAgdGVtcGxhdGUgPGNsYXNzIEYxLCBjbGFzcyBGMj4K
ICB2b2lkIHBlcm11dGUoY29uc3QgRmN0MjxpbnQsaW50LGludCxGMT4gbmV3Um93LCBjb25zdCBG
Y3QyPGludCxpbnQsaW50LEYyPiBuZXdDb2wpewogICAgaW50IHJlY2VpdmVyOwogICAgcmVjZWl2
ZXIgPSBteUVudHJhbmNlICsgbmV3Um93KGxvY2FsUm93UG9zaXRpb24sbG9jYWxDb2xQb3NpdGlv
bikgKiBibG9ja3NJblJvdyArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29sKGxv
Y2FsUm93UG9zaXRpb24sbG9jYWxDb2xQb3NpdGlvbik7CiAgICBpZiAoKHJlY2VpdmVyIDwgbXlF
bnRyYW5jZSkgfHwgKHJlY2VpdmVyID4gbXlFeGl0KSkgdGhyb3cgSWxsZWdhbFBhcnRpdGlvbkV4
Y2VwdGlvbigpOwogICAgaW50IHNlbmRlciA9IHVuZGVmaW5lZDsKICAgIGZvciAoaW50IGk9MDsg
aTxibG9ja3NJblJvdzsgaSsrKSAgCiAgICAgIGZvciAoaW50IGo9MDsgajxibG9ja3NJbkNvbDsg
aisrKXsgCiAgICAgICAgIGlmIChEZWJ1ZyAmJiAobXlpZCA9PSBteUVudHJhbmNlKSkgCiAgICAg
ICAgICAge3ByaW50ZigiJWQgcGVybXV0YXRpb24gdGFibGU6IHJvdyAlZCBjb2wgJWQgbmV3cm93
ICVkIG5ld2NvbCAlZFxuIiwKICAgICAgICAgICAgICAgICAgIG15aWQsIGksaixuZXdSb3coaSxq
KSxuZXdDb2woaSxqKSk7CiAgICAgICAgICAgIGZmbHVzaCgoJl9faW9iWzFdKSApO30KICAgICAg
ICBpZiAobXlFbnRyYW5jZSArIG5ld1JvdyhpLGopICogYmxvY2tzSW5Sb3cgKyBuZXdDb2woaSxq
KSA9PSBteWlkKSAKICAgICAgICAgIGlmIChzZW5kZXIgPT0gdW5kZWZpbmVkKSBzZW5kZXIgPSBt
eUVudHJhbmNlICsgaSpibG9ja3NJblJvdyArIGo7CiAgICAgICAgICBlbHNlIHRocm93IElsbGVn
YWxQZXJtdXRlRXhjZXB0aW9uKCk7fSAgCiAgICBpZiAoc2VuZGVyID09IHVuZGVmaW5lZCkKICAg
ICAgdGhyb3cgSWxsZWdhbFBlcm11dGVFeGNlcHRpb24oKTsgIAogICAgaWYgKHJlY2VpdmVyICE9
IG15aWQpewogICAgICBFIGIxW2xvY2FsUm93cypsb2NhbENvbHNdOwogICAgICBFIGIyW2xvY2Fs
Um93cypsb2NhbENvbHNdOyAKICAgICAgTVBJX1N0YXR1cyBzdGF0OwogICAgICBpbnQgYnVmQ291
bnQgPSAwOwogICAgICBmb3IgKGludCBpPTA7IGk8bG9jYWxSb3dzOyBpKyspCiAgICAgICAgZm9y
KGludCBqPTA7IGo8bG9jYWxDb2xzOyBqKyspICBiMVtidWZDb3VudCsrXSA9IGFbaV1bal07CiAg
ICAgIHNlbmQocmVjZWl2ZXIsJmIxWzBdLHNpemVvZihFKSpsb2NhbFJvd3MqbG9jYWxDb2xzKTsg
ICAgICAKICAgICAgcmVjZWl2ZShzZW5kZXIsJmIyWzBdLHNpemVvZihFKSpsb2NhbFJvd3MqbG9j
YWxDb2xzLCZzdGF0KTsgIAogICAgICBidWZDb3VudCA9IDA7CiAgICAgIGZvciAoaW50IGk9MDsg
aTxsb2NhbFJvd3M7IGkrKykKICAgICAgICBmb3IoaW50IGo9MDsgajxsb2NhbENvbHM7IGorKykg
YVtpXVtqXSA9IGIyW2J1ZkNvdW50KytdO319CgogIHZvaWQgcGVybXV0ZShpbnQgKCpmKShpbnQs
aW50KSwgaW50ICgqZykoaW50LGludCkpe3Blcm11dGUoY3VycnkoZiksY3VycnkoZykpO30KIAog
CgogIHRlbXBsYXRlIDxjbGFzcyBGPgogIHZvaWQgcm90YXRlUm93cyhjb25zdCBGY3QxPGludCxp
bnQsRj4gZil7CiAgIHBlcm11dGUoY3VycnkocHJvajFfMjxpbnQsaW50PiksCiAgICAgICAgICAg
Y3VycnkoYXV4Um90YXRlUm93czxGPikoZikoYmxvY2tzSW5Sb3cpKTt9CgogIHZvaWQgcm90YXRl
Um93cyhpbnQgKCpmKShpbnQpKXtyb3RhdGVSb3dzKGN1cnJ5KGYpKTt9CgogIHZvaWQgcm90YXRl
Um93cyhpbnQgY29scyl7cm90YXRlUm93cyhjdXJyeShwcm9qMV8yPGludCxpbnQ+KShjb2xzKSk7
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgRj4KICB2b2lkIHJvdGF0ZUNvbHMoY29uc3QgRmN0MTxpbnQs
aW50LEY+IGYpewogICBwZXJtdXRlKGN1cnJ5KGF1eFJvdGF0ZUNvbHM8Rj4pKGYpKGJsb2Nrc0lu
Q29sKSwKICAgICAgICAgICBjdXJyeShwcm9qMl8yPGludCxpbnQ+KSk7fQoKICB2b2lkIHJvdGF0
ZUNvbHMoaW50ICgqZikoaW50KSl7cm90YXRlQ29scyhjdXJyeShmKSk7fSAKCiAgdm9pZCByb3Rh
dGVDb2xzKGludCByb3dzKXtyb3RhdGVDb2xzKGN1cnJ5KHByb2oxXzI8aW50LGludD4pKHJvd3Mp
KTt9CgogCiAgdm9pZCBicm9hZGNhc3RQYXJ0aXRpb24oaW50IGJsb2NrUm93LCBpbnQgYmxvY2tD
b2wpeyAgCiAgICAgaWYgKChibG9ja1JvdyA8IDApIHx8IChibG9ja1JvdyA+PSBibG9ja3NJblJv
dykgfHwKICAgICAgICAgKGJsb2NrQ29sIDwgMCkgfHwgKGJsb2NrQ29sID49IGJsb2Nrc0luQ29s
KSkgdGhyb3cgSWxsZWdhbFBhcnRpdGlvbkV4Y2VwdGlvbigpOwogICAgIGludCBibG9jayA9IGJs
b2NrUm93ICogKGJsb2Nrc0luUm93KSArIGJsb2NrQ29sOwogICAgIHVuc2lnbmVkIGludCBuZWln
aGJvcjsKICAgICB1bnNpZ25lZCBpbnQgcG93ZXIgPSAxOwogICAgIHVuc2lnbmVkIGludCBtYXNr
ID0gMTA3Mzc0MTgyMjsgIAogICAgIE1QSV9TdGF0dXMgc3RhdDsgRSBiMVtsb2NhbFJvd3MqbG9j
YWxDb2xzXTsKICAgICBFIGJ1Zltsb2NhbFJvd3MqbG9jYWxDb2xzXTsKICAgICBpbnQgYnVmQ291
bnQgPSAwOwogICAgIGZvcihpbnQgaT0wOyBpPGxvZzIobm9wcm9jcyk7IGkrKyl7IAogICAgICBp
ZiAoKGxvY2FsUG9zaXRpb24gJiBtYXNrKSA9PSAoYmxvY2sgJiBtYXNrKSl7CiAgICAgICAgbmVp
Z2hib3IgPSBteUVudHJhbmNlICsgKGxvY2FsUG9zaXRpb24gXiBwb3dlcik7CiAgICAgICAgaWYg
KChsb2NhbFBvc2l0aW9uICYgcG93ZXIpID09IChibG9jayAmIHBvd2VyKSl7CiAgICAgICAgICBm
b3IgKGludCBrPTA7IGs8bG9jYWxSb3dzOyBrKyspCiAgICAgICAgICAgIGZvcihpbnQgbD0wOyBs
PGxvY2FsQ29sczsgbCsrKSAgYnVmW2J1ZkNvdW50KytdID0gYVtrXVtsXTsKICAgICAgICAgIHN5
bmNTZW5kKG5laWdoYm9yLGJ1ZixzaXplb2YoRSkqbG9jYWxzaXplKTt9CiAgICAgICAgZWxzZSB7
cmVjZWl2ZShuZWlnaGJvcixidWYsc2l6ZW9mKEUpKmxvY2Fsc2l6ZSwmc3RhdCk7CiAgICAgICAg
ICAgICAgYnVmQ291bnQgPSAwOwogICAgICAgICAgICAgIGZvciAoaW50IGs9MDsgazxsb2NhbFJv
d3M7IGsrKykKICAgICAgICAgICAgICAgIGZvcihpbnQgbD0wOyBsPGxvY2FsQ29sczsgbCsrKSAg
YVtrXVtsXT0gIGJ1ZltidWZDb3VudCsrXTt9fQogICAgICBwb3dlciAqPSAyOwogICAgICBtYXNr
ICY9IH5wb3dlcjt9fQoKICAgdm9pZCBicm9hZGNhc3QoaW50IHJvdywgaW50IGNvbCl7ICAKICAg
ICBpbnQgYmxvY2sgPSByb3cvbG9jYWxSb3dzICogKG0vbG9jYWxDb2xzKSArIGNvbC9sb2NhbENv
bHM7ICAKICAgICBpZiAoKGJsb2NrIDwgMCkgfHwgKGJsb2NrID4gbXlFeGl0LW15RW50cmFuY2Up
KSB0aHJvdyBJbGxlZ2FsUGFydGl0aW9uRXhjZXB0aW9uKCk7IAogICAgIHVuc2lnbmVkIGludCBu
ZWlnaGJvcjsKICAgICB1bnNpZ25lZCBpbnQgcG93ZXIgPSAxOwogICAgIHVuc2lnbmVkIGludCBt
YXNrID0gMTA3Mzc0MTgyMjsgIAogICAgIE1QSV9TdGF0dXMgc3RhdDsKICAgICBpZiAoYmxvY2sg
PT0gbG9jYWxQb3NpdGlvbikgYVswXVswXSA9IGFbcm93LWZpcnN0Um93XVtjb2wtZmlyc3RDb2xd
OwogICAgIGZvcihpbnQgaT0wOyBpPGxvZzIobm9wcm9jcyk7IGkrKyl7IAogICAgICAgaWYgKChs
b2NhbFBvc2l0aW9uICYgbWFzaykgPT0gKGJsb2NrICYgbWFzaykpewogICAgICAgICBuZWlnaGJv
ciA9IG15RW50cmFuY2UgKyAobG9jYWxQb3NpdGlvbiBeIHBvd2VyKTsKICAgICAgICAgaWYgKChs
b2NhbFBvc2l0aW9uICYgcG93ZXIpID09IChibG9jayAmIHBvd2VyKSkKIAkgICBzeW5jU2VuZChu
ZWlnaGJvciwmYVswXVswXSxzaXplb2YoRSkpOwogICAgICAgICBlbHNlIHJlY2VpdmUobmVpZ2hi
b3IsJmFbMF1bMF0sc2l6ZW9mKEUpLCZzdGF0KTt9CiAgICAgICBwb3dlciAqPSAyOwogICAgICAg
bWFzayAmPSB+cG93ZXI7fQogICAgIGZvciAoaW50IGk9MDsgaTxsb2NhbFJvd3M7IGkrKykKICAg
ICAgIGZvciAoaW50IGo9MDsgajxsb2NhbENvbHM7IGorKykgYVtpXVtqXSA9IGFbMF1bMF07fSAK
CiAgICAKCiAKICB2b2lkIHNob3coKXsgIAogICAgRSBiW25dW21dOyAKICAgIGdhdGhlcihiKTsg
CiAgICBpZiAobXlpZCA9PSBteUVudHJhbmNlKXsgIAogICAgICBmb3IoaW50IGk9MDsgaTxuOyBp
KyspewogICAgICAgIHByaW50ZigiKCIpOwogICAgICAgIGZvcihpbnQgaj0wOyBqPG07IGorKykg
cHJpbnRmKCIlZCAiLGJbaV1bal0pOwogICAgICAgIHByaW50ZigiKVxuIik7fQogICAgICBmZmx1
c2goKCZfX2lvYlsxXSkgKTt9fQp9OwogIAp0ZW1wbGF0ZSA8Y2xhc3MgRSwgaW50IG4+Cm9zdHJl
YW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIERpc3RyaWJ1dGVkTWF0cml4PEUsbixtPiYgYSl7
CiAgRSBiW25dW21dOwogIGdhdGhlcihiKTsgCiAgaWYgKG15aWQgPT0gbXlFbnRyYW5jZSl7ICAK
ICAgIGZvcihpbnQgaT0wOyBpPG47IGkrKyl7IAogICAgICBvcyA8PCAiKCI7CiAgICAgIGZvcihp
bnQgaj0wOyBqPG07IGorKykgb3MgPDwgYltpXVtqXSA8PCAiICI7CiAgICAgIG9zIDw8ICIpIiA8
PCBlbmRsO30KICAgIHJldHVybiBvczt9fQoKCiAKdm9pZCBJbml0U2tlbGV0b25zKGludCBhcmdj
LCBjaGFyICoqYXJndil7CiAgIAogICAKICBNUElfQ29tbV9zaXplKDkxICwmbnVtcHJvY3MpOwog
IE1QSV9Db21tX3JhbmsoOTEgLCZteWlkKTsKICBteUVudHJhbmNlID0gMDsgbXlFeGl0ID0gbnVt
cHJvY3MgLSAxO30KCnZvaWQgVGVybWluYXRlU2tlbGV0b25zKCl7IAp9CgoKIAogCiAKICAKY2xh
c3MgUHJvY2Vzc3sgIAoKICBwcm90ZWN0ZWQ6CiAgICBQcm9jZXNzb3JObyBpbjsKICAgIFByb2Nl
c3Nvck5vIG91dDsKICAgIFByb2Nlc3Nvck5vIGVudHJhbmNlOwogICAgUHJvY2Vzc29yTm8gZXhp
dDsgCiAgICBib29sIGZpbmlzaGVkOwoKCiAgcHVibGljOiAgICAKICAgIFByb2Nlc3MoKTogaW4o
dW5kZWZpbmVkKSwgb3V0KHVuZGVmaW5lZCl7fTsKICAgIHZpcnR1YWwgflByb2Nlc3MoKXt9Owog
ICAgdmlydHVhbCB2b2lkIHN0YXJ0KCkgPSAwOwogICAgdmlydHVhbCB2b2lkIHNldEluKFByb2Nl
c3Nvck5vIG4pe2luID0gbjt9CiAgICB2aXJ0dWFsIHZvaWQgc2V0T3V0KFByb2Nlc3Nvck5vIG4p
e291dCA9IG47fQogICAgUHJvY2Vzc29yTm8gZ2V0SW4oKXtyZXR1cm4gaW47fQogICAgUHJvY2Vz
c29yTm8gZ2V0T3V0KCl7cmV0dXJuIG91dDt9CiAgICBQcm9jZXNzb3JObyBnZXRFbnRyYW5jZSgp
e3JldHVybiBlbnRyYW5jZTt9CiAgICBQcm9jZXNzb3JObyBnZXRFeGl0KCl7cmV0dXJuIGV4aXQ7
fSAgCiAgICB2aXJ0dWFsIHZvaWQgc2hvdygpID0gMDsKfTsKCiAKdGVtcGxhdGUgPGNsYXNzIEks
IGNsYXNzIE8+CmNsYXNzIEF0b21pYzogcHVibGljIFByb2Nlc3N7CiAKICAgIEZjdDxJLE8+KiBm
Y3Q7IAogICAgaW50IG5vcHJvY3M7ICAKCiAgcHVibGljOgogICAgQXRvbWljKE8gKCogZikoSSks
IGludCBuKTogIG5vcHJvY3MobiksIFByb2Nlc3MoKXsKICAgICAgZmN0ID0gbmV3ICBGY3QxPEks
TyxNa09wMTxJLE8+ID4oTWtPcDE8SSxPPihmKSk7CiAgICAgIGVudHJhbmNlID0gcnVubmluZ1By
b2Nlc3Nvck5vOyBleGl0ID0gZW50cmFuY2U7CiAgICAgIHJ1bm5pbmdQcm9jZXNzb3JObyArPSBu
O30gICAgCiAgICAKICAgIHRlbXBsYXRlIDxjbGFzcyBGPgogICAgQXRvbWljKEZjdDE8SSxPLEY+
IGYsIGludCBuKTogbm9wcm9jcyhuKSwgUHJvY2VzcygpeyAKICAgICAgZmN0ID0gbmV3IEZjdDE8
SSxPLEY+KGYpOwogICAgICBlbnRyYW5jZSA9IHJ1bm5pbmdQcm9jZXNzb3JObzsgZXhpdCA9IGVu
dHJhbmNlOyAKICAgICAgcnVubmluZ1Byb2Nlc3Nvck5vICs9IG47fSAgICAgICAgCgogICAgdm9p
ZCBzdGFydCgpewogICAgICBpZiAoRGVidWcpIHtwcmludGYoIiVkIGluIEF0b21pYzo6c3RhcnQo
KVxuIixteWlkKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICAgICBJIHZhbHVlOwogICAgICBN
UElfU3RhdHVzIHN0YXQ7CiAgICAgIGJvb2wgdGVzdGluZyA9IGZhbHNlOwogICAgICBmaW5pc2hl
ZCA9ICgobXlpZCA8IGVudHJhbmNlKSB8fCAobXlpZCA+IGV4aXQpKTsgICAgIAogICAgICBpZiAo
IWZpbmlzaGVkKSB7bXlFbnRyYW5jZSA9IGVudHJhbmNlOyBteUV4aXQgPSBleGl0O30KICAgICAg
aWYgKERlYnVnICYmIGZpbmlzaGVkKSB7cHJpbnRmKCIlZCBub3QgY29uY2VybmVkOyBsZWF2aW5n
XG4iLG15aWQpO2ZmbHVzaCgoJl9faW9iWzFdKSApO30KICAgICAgaWYgKGZpbmlzaGVkKSByZXR1
cm47CiAgICAgIHdoaWxlICghZmluaXNoZWQpeyAgCiAgICAgICAgaWYgKG15aWQgPT0gbXlFbnRy
YW5jZSl7CiAgICAgICAgICBpZiAoRGVidWcpIHtwcmludGYoIiVkIHdhaXRpbmcgZm9yIG1lc3Nh
Z2UgZnJvbSAlZFxuIixteWlkLGluKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICAgICAgICAg
cmVjZWl2ZShpbiwmdmFsdWUsc2l6ZW9mKEkpLCZzdGF0KTsKICAgICAgICAgIGlmIChzdGF0Lk1Q
SV9UQUcgPT0gMyApIHsKICAgICAgICAgICAgdGVzdGluZyA9IHRydWU7IHNlbmRUZXJtaW5hdGlv
blRlc3Qob3V0KTt9CiAgICAgICAgICBlbHNlIGlmIChzdGF0Lk1QSV9UQUcgPT0gMiApIHsgIAog
ICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7CiAgICAgICAgICAgIGZvciAoaW50IGk9bXlFbnRy
YW5jZSsxOyBpPD0gbXlFeGl0OyBpKyspIHNlbmRTdG9wKGkpO30KICAgICAgICAgIGVsc2UgIAog
ICAgICAgICAgICBmb3IgKGludCBpPW15RW50cmFuY2UrMTsgaTw9IG15RXhpdDsgaSsrKQoJICAg
ICAgc2VuZChpLCZ2YWx1ZSxzaXplb2YoSSkpO30KICAgICAgICBlbHNlIHsKICAgICAgICAgIHJl
Y2VpdmUobXlFbnRyYW5jZSwmdmFsdWUsc2l6ZW9mKEkpLCZzdGF0KTsKICAgICAgICAgIGlmIChz
dGF0Lk1QSV9UQUcgPT0gMiApIGZpbmlzaGVkID0gdHJ1ZTt9ICAgICAgCiAgICAgICAgaWYgKCgh
ZmluaXNoZWQpICYmICghdGVzdGluZykpewogICAgICAgICAgTyByZXN1bHQgPSAoKmZjdCkodmFs
dWUpOwogICAgICAgICAgaWYgKERlYnVnKSB7cHJpbnRmKCIlZDogSW50ZXJtZWRpYXRlIHJlc3Vs
dDogJWRcbiIsbXlpZCxyZXN1bHQpO2ZmbHVzaCgoJl9faW9iWzFdKSApO30KICAgICAgICAgIHNl
bmQob3V0LCZyZXN1bHQsc2l6ZW9mKE8pKTt9IAogICAgICAgIHRlc3RpbmcgPSBmYWxzZTt9CiAg
ICAgIHNlbmRTdG9wKG91dCk7fQoKICAgIHZvaWQgc2hvdygpe3ByaW50ZigiQXRvbWljICVkXG4i
LGVudHJhbmNlKTtmZmx1c2goKCZfX2lvYlsxXSkgKTt9Cn07CgogCnRlbXBsYXRlIDxjbGFzcyBJ
LCBjbGFzcyBPPgpjbGFzcyBGaWx0ZXI6IHB1YmxpYyBQcm9jZXNzewoKICAgIEZjdDxFbXB0eSx2
b2lkPiogZmN0OwogICAgIAogICAgIAogICAgaW50IG5vcHJvY3M7ICAKCiAgcHVibGljOgogICAg
RmlsdGVyKHZvaWQgKCogZikoKSwgaW50IG4pOiBub3Byb2NzKG4pLCBQcm9jZXNzKCl7CiAgICAg
IGZjdCA9IG5ldyBGY3QxPEVtcHR5LHZvaWQsCiAgICAgICAgICAgICAgICAgICAgIEZjdDI8dm9p
ZCAoKikoKSxFbXB0eSx2b2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgIE1rT3AyPHZvaWQg
KCopKCksRW1wdHksdm9pZD4gPjo6UGFydGlhbEFwcGw+KGN1cnJ5KGV4dGVuZDx2b2lkPikoZikp
OwogICAgICBlbnRyYW5jZSA9IHJ1bm5pbmdQcm9jZXNzb3JObzsgZXhpdCA9IGVudHJhbmNlOwog
ICAgICBydW5uaW5nUHJvY2Vzc29yTm8gKz0gbjt9IAoKICAgIHRlbXBsYXRlIDxjbGFzcyBGPgog
ICAgRmlsdGVyKEZjdDE8RW1wdHksdm9pZCxGPiBmLCBpbnQgbik6IG5vcHJvY3MobiksIFByb2Nl
c3MoKXsKICAgICAgZmN0ID0gbmV3IEZjdDE8RW1wdHksdm9pZCxGPihmKTsKICAgICAgZW50cmFu
Y2UgPSBydW5uaW5nUHJvY2Vzc29yTm87IGV4aXQgPSBlbnRyYW5jZTsKICAgICAgcnVubmluZ1By
b2Nlc3Nvck5vICs9IG47fSAKCiAgICB2b2lkIHN0YXJ0KCl7CiAgICAgIGlmIChEZWJ1Zykge3By
aW50ZigiJWQgaW4gRmlsdGVyOjpzdGFydCgpXG4iLG15aWQpOyBmZmx1c2goKCZfX2lvYlsxXSkg
KTt9CiAgICAgIGZpbmlzaGVkID0gKChteWlkIDwgZW50cmFuY2UpIHx8IChteWlkID4gZXhpdCkp
OwogICAgICBpZiAoIWZpbmlzaGVkKSB7bXlFbnRyYW5jZSA9IGVudHJhbmNlOyBteUV4aXQgPSBl
eGl0OyBteVByb2Nlc3MgPSB0aGlzO30KICAgICAgaWYgKERlYnVnICYmIGZpbmlzaGVkKSB7cHJp
bnRmKCIlZCBub3QgY29uY2VybmVkOyBsZWF2aW5nXG4iLG15aWQpO2ZmbHVzaCgoJl9faW9iWzFd
KSApO30KICAgICAgaWYgKGZpbmlzaGVkKSByZXR1cm47CiAgICAgICgqZmN0KShFbXB0eSgpKTt9
CgogICAgdm9pZCBzaG93KCl7cHJpbnRmKCJGaWx0ZXIgJWRcbiIsZW50cmFuY2UpO2ZmbHVzaCgo
Jl9faW9iWzFdKSApO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBJPgpJKiBnZXQoKXsgIAogIGlmICht
eVByb2Nlc3MgPT0gX19udWxsICkgdGhyb3cgSWxsZWdhbEdldEV4Y2VwdGlvbigpOwogIEkqIHZh
bHJlZiA9IG5ldyBJOwogIE1QSV9TdGF0dXMgc3RhdDsKICBib29sIGZpbmlzaGVkID0gZmFsc2U7
CgogIGlmIChteWlkID09IG15RW50cmFuY2UpewogICAgaWYgKERlYnVnKSB7cHJpbnRmKCIlZCB3
YWl0aW5nIGZvciBtZXNzYWdlIGZyb20gJWRcbiIsbXlpZCwoKm15UHJvY2VzcykuZ2V0SW4oKSk7
IAogICAgICAgICAgICAgICAgZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICAgcmVjZWl2ZSgoKm15
UHJvY2VzcykuZ2V0SW4oKSx2YWxyZWYsc2l6ZW9mKEkpLCZzdGF0KTsKICAgIGlmIChzdGF0Lk1Q
SV9UQUcgPT0gMyApewogICAgICBzZW5kVGVybWluYXRpb25UZXN0KCgqbXlQcm9jZXNzKS5nZXRP
dXQoKSk7IHJldHVybiBnZXQ8ST4oKTt9CiAgICBpZiAoc3RhdC5NUElfVEFHID09IDIgKSB7ICAK
ICAgICAgZmluaXNoZWQgPSB0cnVlOwogICAgICBmb3IgKGludCBpPW15RW50cmFuY2UrMTsgaTw9
IG15RXhpdDsgaSsrKSBzZW5kU3RvcChpKTt9CiAgICBlbHNlICAKICAgICAgZm9yIChpbnQgaT1t
eUVudHJhbmNlKzE7IGk8PSBteUV4aXQ7IGkrKykJCiAgICAgICAgc2VuZChpLHZhbHJlZixzaXpl
b2YoSSkpO30KICBlbHNlIHsKICAgIHJlY2VpdmUobXlFbnRyYW5jZSx2YWxyZWYsc2l6ZW9mKEkp
LCZzdGF0KTsKICAgIGlmIChzdGF0Lk1QSV9UQUcgPT0gMiApIGZpbmlzaGVkID0gdHJ1ZTt9CiAg
aWYgKGZpbmlzaGVkKSB7CiAgICBpZiAobXlpZCA9PSBteUVudHJhbmNlKSBzZW5kU3RvcCgoKm15
UHJvY2VzcykuZ2V0T3V0KCkpOyAKICAgIHJldHVybiBfX251bGwgO30KICBlbHNlIHJldHVybiB2
YWxyZWY7fQoKdGVtcGxhdGUgPGNsYXNzIE8+CnZvaWQgcHV0KE8gdmFsdWUpeyAgCiAgaWYgKG15
UHJvY2VzcyA9PSBfX251bGwgKSB0aHJvdyBJbGxlZ2FsUHV0RXhjZXB0aW9uKCk7CiAgTVBJX1N0
YXR1cyBzdGF0OwogIHNlbmQoKCpteVByb2Nlc3MpLmdldE91dCgpLCZ2YWx1ZSxzaXplb2YoTykp
O30KCgogCnRlbXBsYXRlIDxjbGFzcyBPPgpjbGFzcyBJbml0aWFsOiBwdWJsaWMgUHJvY2Vzc3sK
CiAgICBGY3Q8RW1wdHksTyo+KiBmY3Q7CiAgICAgCgogIHB1YmxpYzoKICAgIEluaXRpYWwoTyog
KCogZikoKSk6IFByb2Nlc3MoKXsKICAgICAgZmN0ID0gbmV3IEZjdDE8RW1wdHksTyosCiAgICAg
ICAgICAgICAgICAgICAgIEZjdDI8TyogKCopKCksRW1wdHksTyosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgTWtPcDI8TyogKCopKCksRW1wdHksTyo+ID46OlBhcnRpYWxBcHBsPihjdXJyeShl
eHRlbmQ8Tyo+KShmKSk7CiAgICAgIGVudHJhbmNlID0gcnVubmluZ1Byb2Nlc3Nvck5vKys7IGV4
aXQgPSBlbnRyYW5jZTt9ICAKICAgICAgIAogICAgdGVtcGxhdGUgPGNsYXNzIEY+CiAgICBJbml0
aWFsKEZjdDE8RW1wdHksTyosRj4gZik6IFByb2Nlc3MoKXsKICAgICAgZmN0ID0gbmV3IEZjdDE8
RW1wdHksTyosRj4oZik7CiAgICAgIGVudHJhbmNlID0gcnVubmluZ1Byb2Nlc3Nvck5vKys7IGV4
aXQgPSBlbnRyYW5jZTt9ICAgICAgICAgCgogICAgdm9pZCBzdGFydCgpewogICAgICBmaW5pc2hl
ZCA9ICEobXlpZCA9PSBlbnRyYW5jZSk7ICAgCiAgICAgIGlmICghZmluaXNoZWQpIHtteUVudHJh
bmNlID0gZW50cmFuY2U7IG15RXhpdCA9IGV4aXQ7fQogICAgICBpZiAoRGVidWcpIHtwcmludGYo
IiVkIGluIEluaXRpYWw6OnN0YXJ0KClcbiIsbXlpZCk7ICAgZmZsdXNoKCgmX19pb2JbMV0pICk7
fSAgCiAgICAgIGlmIChEZWJ1ZyAmJiBmaW5pc2hlZCkge3ByaW50ZigiJWQgbm90IGNvbmNlcm5l
ZDsgbGVhdmluZ1xuIixteWlkKTtmZmx1c2goKCZfX2lvYlsxXSkgKTt9CiAgICAgIHdoaWxlICgh
ZmluaXNoZWQpIHsgIAogICAgICAgIE8qIHJlc3VsdCA9ICgqZmN0KShFbXB0eSgpKTsKICAgICAg
ICBpZiAocmVzdWx0ID09IF9fbnVsbCApIHtmaW5pc2hlZCA9IHRydWU7IHNlbmRTdG9wKG91dCk7
fQogICAgICAgIGVsc2Ugc2VuZChvdXQscmVzdWx0LHNpemVvZihPKSk7fQogICAgfSAgIAoKICAg
IHZvaWQgc2hvdygpe3ByaW50ZigiSW5pdGlhbCAlZFxuIixlbnRyYW5jZSk7ZmZsdXNoKCgmX19p
b2JbMV0pICk7fQp9OwoKIAp0ZW1wbGF0ZSA8Y2xhc3MgST4KY2xhc3MgRmluYWw6ICBwdWJsaWMg
UHJvY2Vzc3sKCiAgICAgCiAgICBGY3Q8SSx2b2lkPiogZmN0OyAKCiAgcHVibGljOgogICAgRmlu
YWwodm9pZCAoKiBmKShJKSk6IFByb2Nlc3MoKXsKICAgICAgZmN0ID0gbmV3IEZjdDE8SSx2b2lk
LE1rT3AxPEksdm9pZD4gPihNa09wMTxJLHZvaWQ+KGYpKTsKICAgICAgZW50cmFuY2UgPSBydW5u
aW5nUHJvY2Vzc29yTm8rKzsgZXhpdCA9IGVudHJhbmNlO30gICAgICAgCgogICAgdGVtcGxhdGUg
PGNsYXNzIEY+CiAgICBGaW5hbChGY3QxPEksdm9pZCxGPiBmKTogUHJvY2VzcygpewogICAgICBm
Y3QgPSBuZXcgRmN0MTxJLHZvaWQsRj4oZik7IAogICAgICBlbnRyYW5jZSA9IHJ1bm5pbmdQcm9j
ZXNzb3JObysrOyBleGl0ID0gZW50cmFuY2U7fSAgICAgICAKCiAgICB2b2lkIHN0YXJ0KCl7IAog
ICAgICBpZiAoRGVidWcpIHtwcmludGYoIiVkIGluIEZpbmFsOjpzdGFydCgpXG4iLG15aWQpOyBm
Zmx1c2goKCZfX2lvYlsxXSkgKTt9CiAgICAgIEkgdmFsdWU7CiAgICAgIE1QSV9TdGF0dXMgc3Rh
dDsKICAgICAgZmluaXNoZWQgPSAhKG15aWQgPT0gZW50cmFuY2UpOyAgICAgICAgCiAgICAgIGlm
ICghZmluaXNoZWQpIHtteUVudHJhbmNlID0gZW50cmFuY2U7IG15RXhpdCA9IGV4aXQ7fQogICAg
ICBpZiAoRGVidWcgJiYgZmluaXNoZWQpIHtwcmludGYoIiVkIG5vdCBjb25jZXJuZWQ7IGxlYXZp
bmdcbiIsbXlpZCk7IGZmbHVzaCgoJl9faW9iWzFdKSApO30KICAgICAgd2hpbGUgKCFmaW5pc2hl
ZCkgewogICAgICAgIGlmIChEZWJ1Zykge3ByaW50ZigiJWQgd2FpdGluZyBmb3IgbWVzc2FnZSBm
cm9tICVkXG4iLG15aWQsaW4pOyBmZmx1c2goKCZfX2lvYlsxXSkgKTt9CiAgICAgICAgcmVjZWl2
ZShpbiwmdmFsdWUsc2l6ZW9mKEkpLCZzdGF0KTsKICAgICAgICBpZiAoc3RhdC5NUElfVEFHID09
IDMgKTsKICAgICAgICBlbHNlIGlmIChzdGF0Lk1QSV9UQUcgPT0gMiApIGZpbmlzaGVkID0gdHJ1
ZTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGlmIChEZWJ1Zykge3ByaW50ZigiZmluYWwgcHJv
Y2VzcyByZWNlaXZlZDogJWRcbiIsIHZhbHVlKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fSAKICAg
ICAgICAgICgqZmN0KSh2YWx1ZSk7fX0gICAgCiAgICAgIHJ1bm5pbmdQcm9jZXNzb3JObyA9IDA7
CiAgICAgIGlmIChEZWJ1Zykge3ByaW50ZigiJWQgcmVhY2hlcyBiYXJyaWVyXG4iLCBteWlkKTsg
ZmZsdXNoKCgmX19pb2JbMV0pICk7fSAKICAgICAgTVBJX0JhcnJpZXIoOTEgKTsKICAgICAgaWYg
KERlYnVnKSB7cHJpbnRmKCIlZCBoYXMgcGFzc2VkIGJhcnJpZXJcbiIsIG15aWQpOyBmZmx1c2go
KCZfX2lvYlsxXSkgKTt9IAogICAgICB9CgogICAgdm9pZCBzaG93KCl7cHJpbnRmKCJGaW5hbCAl
ZFxuIixlbnRyYW5jZSk7ZmZsdXNoKCgmX19pb2JbMV0pICk7fQp9OwogICAgICAKIApjbGFzcyBQ
aXBlOiBwdWJsaWMgUHJvY2Vzc3sKICAgIFByb2Nlc3MqKiBwOwogICAgaW50IGxlbmd0aDsKCiAg
cHVibGljOgoKICAgIFBpcGUoUHJvY2VzcyYgcDEsIFByb2Nlc3MmIHAyKTogUHJvY2Vzcygpewog
ICAgICBsZW5ndGggPSAyOwogICAgICBwID0gbmV3IFByb2Nlc3MqIFtsZW5ndGhdOwogICAgICBw
MS5zZXRPdXQocDIuZ2V0RW50cmFuY2UoKSk7CiAgICAgIHAyLnNldEluKHAxLmdldEV4aXQoKSk7
CiAgICAgIGVudHJhbmNlID0gcDEuZ2V0RW50cmFuY2UoKTsKICAgICAgZXhpdCA9IHAyLmdldEV4
aXQoKTsKICAgICAgcFswXSA9ICZwMTsgcFsxXSA9ICZwMjt9CiAgICAgCgogICAgdm9pZCBzZXRP
dXQoUHJvY2Vzc29yTm8gbil7b3V0PW47ICgqKHBbbGVuZ3RoLTFdKSkuc2V0T3V0KG4pO30KCiAg
ICB2b2lkIHNldEluKFByb2Nlc3Nvck5vIG4pe2luPW47ICAoKihwWzBdKSkuc2V0SW4obik7fQog
ICAKICAgIHZvaWQgc3RhcnQoKXsgCiAgICAgIGlmIChEZWJ1Zykge3ByaW50ZigiJWQgaW4gUGlw
ZTo6c3RhcnQoKVxuIixteWlkKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fSAgIAogICAgICBmb3Io
aW50IGkgPSAwOyBpPGxlbmd0aDsgaSsrKSAKICAgICAgICAoKihwW2ldKSkuc3RhcnQoKTt9ICAg
CiAgIAogICAgdm9pZCBzaG93KCl7IAogICAgICBwcmludGYoIlBpcGUgJWQsIGNoaWxkcmVuOiAl
ZFxuIixlbnRyYW5jZSxsZW5ndGgpOwogICAgICBmb3IoaW50IGkgPSAwOyBpPGxlbmd0aDsgaSsr
KXsKICAgICAgICBwcmludGYoImNoaWxkICVkOiAlZFxuIixpLCgqKHBbaV0pKS5nZXRFbnRyYW5j
ZSgpKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7CiAgICAgICAgKCoocFtpXSkpLnNob3coKTt9fQoK
fTsKIAogCnRlbXBsYXRlPGNsYXNzIEksIGNsYXNzIE8+IApjbGFzcyBGYXJtZXI6ICBwdWJsaWMg
UHJvY2Vzc3sKICAgIFByb2Nlc3Nvck5vKiB3b3JrZXJJbjsKICAgIFByb2Nlc3Nvck5vKiB3b3Jr
ZXJPdXQ7CiAgICBpbnQgbGVuZ3RoOwogICAgYm9vbCogaWRsZTsKCiAgcHVibGljOgogICAgRmFy
bWVyKGludCBsKTogbGVuZ3RoKGwpewogICAgICB3b3JrZXJJbiAgPSBuZXcgUHJvY2Vzc29yTm9b
bGVuZ3RoXTsKICAgICAgd29ya2VyT3V0ID0gbmV3IFByb2Nlc3Nvck5vW2xlbmd0aF07CiAgICAg
IGVudHJhbmNlID0gcnVubmluZ1Byb2Nlc3Nvck5vKys7IGV4aXQgPSBlbnRyYW5jZTt9CgogICAg
RmFybWVyKCl7fQoKICAgIHZvaWQgc3RhcnQoKXsKICAgICAgSSB2YWx1ZTsgTyByZXN1bHRbbGVu
Z3RoXTsKICAgICAgTVBJX1N0YXR1cyBzdGF0OwogICAgICBNUElfUmVxdWVzdCByZXFbbGVuZ3Ro
KzJdOwogICAgICAgCiAgICAgICAKICAgICAgIAogICAgICBpbnQgY3VycmVudFdvcmtlciA9IDA7
CiAgICAgIGJvb2wgdGVzdGluZyA9IGZhbHNlOwogICAgICBib29sIGFjdGl2ZVtsZW5ndGgrMl07
CiAgICAgIGJvb2wgc2VuZGluZ1RvV29ya2VyID0gZmFsc2U7CiAgICAgIGludCBzZW5kRmluaXNo
ZWRGbGFnOwogICAgICBpbnQgd2hvSXNSZWFkeTsKICAgICAgaW50IHRlcm1pbmF0aW9uVGVzdENv
dW50ZXIgPSAwOwogICAgICBpbnQgdGVybWluYXRpb25Db3VudGVyID0gMDsKCiAgICAgIGlmIChE
ZWJ1Zykge3ByaW50ZigiJWQgaW4gRmFybWVyOjpzdGFydCgpXG4iLG15aWQpOyBmZmx1c2goKCZf
X2lvYlsxXSkgKTt9CiAgICAgIGZpbmlzaGVkID0gIShteWlkID09IGVudHJhbmNlKTsgCiAgICAg
IGlmIChEZWJ1ZyAmJiBmaW5pc2hlZCkge3ByaW50ZigiJWQgbm90IGNvbmNlcm5lZDsgbGVhdmlu
Z1xuIixteWlkKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICAgICBpZiAoZmluaXNoZWQpIHJl
dHVybjsgCiAgICAgIGZvcihpbnQgaT0wOyBpPD1sZW5ndGgrMTsgaSsrKSBhY3RpdmVbaV0gPSBm
YWxzZTsKICAgICAgd2hpbGUgKCFmaW5pc2hlZCkgeyAgICAKICAgICAgICAgCiAgICAgICAgZm9y
KGludCBpPTA7IGk8bGVuZ3RoOyBpKyspeyAgCiAgICAgICAgICBpZiAoIWFjdGl2ZVtpKzFdKSB7
CiAgICAgICAgICAgIGlmKERlYnVnKXtwcmludGYoImZhcm1lciAlZCB3YWl0aW5nIGZvciBtZXNz
YWdlIGZyb20gJWRcbiIsbXlpZCx3b3JrZXJJbltpXSk7ZmZsdXNoKCgmX19pb2JbMV0pICk7fQog
ICAgICAgICAgICBub25ibG9ja2luZ1JlY2VpdmUod29ya2VySW5baV0sJnJlc3VsdFtpXSxzaXpl
b2YoTyksJnJlcVtpKzFdKTsKICAJICAgIGFjdGl2ZVtpKzFdID0gdHJ1ZTt9fQogIAogICAgICAg
IGlmICghYWN0aXZlW2xlbmd0aCsxXSkgeyAKICAgICAgICAgIGlmIChEZWJ1Zykge3ByaW50Zigi
ZmFybWVyICVkIHdhaXRpbmcgZm9yIG1lc3NhZ2UgZnJvbSAlZFxuIixteWlkLGluKTsgZmZsdXNo
KCgmX19pb2JbMV0pICk7fQogICAgICAgICAgbm9uYmxvY2tpbmdSZWNlaXZlKGluLCZ2YWx1ZSxz
aXplb2YoSSksJnJlcVtsZW5ndGgrMV0pOyAKICAgICAgICAgIGFjdGl2ZVtsZW5ndGgrMV0gPSB0
cnVlO30gCiAgICAgICAgaWYgKHNlbmRpbmdUb1dvcmtlcikgIAogICAgICAgICAgTVBJX1dhaXRh
bnkobGVuZ3RoKzEsJnJlcVswXSwmd2hvSXNSZWFkeSwmc3RhdCk7CiAgICAgICAgZWxzZXsgIAog
ICAgICAgICAgTVBJX1dhaXRhbnkobGVuZ3RoKzEsJnJlcVsxXSwmd2hvSXNSZWFkeSwmc3RhdCk7
IHdob0lzUmVhZHkrKzt9CiAgICAgICAgIAoJYWN0aXZlW3dob0lzUmVhZHldID0gZmFsc2U7CiAg
ICAgICAgaWYgKHdob0lzUmVhZHkgPT0gMCl7ICAgICAgIAogICAgICAgICAgc2VuZGluZ1RvV29y
a2VyID0gZmFsc2U7ICAKICAgICAgICAgIG5vbmJsb2NraW5nUmVjZWl2ZShpbiwmdmFsdWUsc2l6
ZW9mKEkpLCZyZXFbbGVuZ3RoKzFdKTt9CiAgICAgICAgZWxzZSBpZiAod2hvSXNSZWFkeSA9PSBs
ZW5ndGgrMSkgIAogICAgICAgICAgaWYgKHN0YXQuTVBJX1RBRyA9PSAzICl7IAogICAgICAgICAg
ICBpZiAgKCh0ZXJtaW5hdGlvblRlc3RDb3VudGVyID4gMCkgfHwgKHRlcm1pbmF0aW9uQ291bnRl
ciA+IDApKXsKICAgICAgICAgICAgICBwcmludGYoImVycm9yIGluIHNrZWxldG9uIGxpYnJhcnk6
IHJlcXVlc3QgZm9yIHRlcm1pbmF0aW9uIHRlc3QiKTsKICAgICAgICAgICAgICBwcmludGYoIiB3
aGlsZSBvdGhlciB0ZXN0IGlzIGluIHByb2dyZXNzIVxuIixteWlkKTsgZmZsdXNoKCgmX19pb2Jb
MV0pICk7fQogICAgICAgICAgICAgdGVybWluYXRpb25UZXN0Q291bnRlciA9IGxlbmd0aDsKICAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGZvcihpbnQgaT0wOyBpPGxlbmd0aDsgaSsrKSBzZW5k
VGVybWluYXRpb25UZXN0KHdvcmtlck91dFtpXSk7fQogICAgICAgICAgZWxzZSBpZiAoc3RhdC5N
UElfVEFHID09IDIgKSB7CgkgICAgICAgICBpZiAoKHRlcm1pbmF0aW9uVGVzdENvdW50ZXIgPiAw
KSB8fCAodGVybWluYXRpb25Db3VudGVyID4gMCkpewogICAgICAgICAgICAgICAgICAgcHJpbnRm
KCJlcnJvciBpbiBza2VsZXRvbiBsaWJyYXJ5OiByZXF1ZXN0IGZvciB0ZXJtaW5hdGlvbiB0ZXN0
Iik7CiAgICAgICAgICAgICAgICAgICBwcmludGYoIiB3aGlsZSBvdGhlciB0ZXN0IGlzIGluIHBy
b2dyZXNzIVxuIixteWlkKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICAgICAgICAgICAgICAg
IHRlcm1pbmF0aW9uQ291bnRlciA9IGxlbmd0aDsgIAogICAgICAgICAgICAgICAgIGFjdGl2ZVt3
aG9Jc1JlYWR5XSA9IHRydWU7ICAKICAgICAgICAgICAgICAgICBmb3IoaW50IGk9MDsgaTxsZW5n
dGg7IGkrKykgc2VuZFN0b3Aod29ya2VyT3V0W2ldKTt9CiAgICAgICAgICBlbHNleyAgIAogICAg
ICAgICAgICBpZiAoRGVidWcpICB7cHJpbnRmKCIgZmFybWVyICVkIHByb3BhdGVzIG1lc3NhZ2Ug
ZnJvbSAlZCB0byAlZCFcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlpZCxp
bix3b3JrZXJPdXRbY3VycmVudFdvcmtlcl0pOyBmZmx1c2goKCZfX2lvYlsxXSkgKTt9CiAgICAg
ICAgICAgIHNlbmRpbmdUb1dvcmtlciA9IHRydWU7CiAgICAgICAgICAgIGFjdGl2ZVt3aG9Jc1Jl
YWR5XSA9IHRydWU7ICAKICAgICAgICAgICAgbm9uYmxvY2tpbmdTZW5kKHdvcmtlck91dFtjdXJy
ZW50V29ya2VyXSwmdmFsdWUsc2l6ZW9mKEkpLCZyZXFbMF0pOwogICAgICAgICAgICBjdXJyZW50
V29ya2VyID0gKGN1cnJlbnRXb3JrZXIgKzEpICUgbGVuZ3RoO30KICAgICAgICBlbHNlICAKICAg
ICAgICAgIGlmIChzdGF0Lk1QSV9UQUcgPT0gMyApewogICAgICAgICAgICBpZiAoLS10ZXJtaW5h
dGlvblRlc3RDb3VudGVyID09IDApCgkgICAgICBzZW5kVGVybWluYXRpb25UZXN0KG91dCk7fSAK
ICAgICAgICAgIGVsc2UgaWYgKHN0YXQuTVBJX1RBRyA9PSAyICkgeyAKCSAgICAgICAgIGFjdGl2
ZVt3aG9Jc1JlYWR5XSA9IHRydWU7ICAKICAgICAgICAgICAgICAgICBpZiAoRGVidWcpIHtwcmlu
dGYoIiVkOiBzdG9wIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSAlZDsgd2FpdGluZyBmb3IgJWQgc3Rv
cCBtZXNzYWdlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlpZCx3
b3JrZXJJblt3aG9Jc1JlYWR5LTFdLHRlcm1pbmF0aW9uQ291bnRlcik7IGZmbHVzaCgoJl9faW9i
WzFdKSApO30KICAgICAgICAgICAgICAgICBpZiAoLS10ZXJtaW5hdGlvbkNvdW50ZXIgPT0gMCl7
CiAgICAgICAgICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7CgkJICAgc2VuZFN0b3Aob3V0KTt9
CiAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSB7cHJpbnRmKCIlZDogd2FpdGluZyBmb3IgJWQg
c3RvcCBtZXNzYWdlc1xuIixteWlkLHRlcm1pbmF0aW9uQ291bnRlcik7IAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZmbHVzaCgoJl9faW9iWzFdKSApO319CiAgICAgICAgICBlbHNlIHtp
ZiAoRGVidWcpIHtwcmludGYoImZhcm1lciAlZCBwcm9wYXRlcyBtZXNzYWdlIGZyb20gJWQgdG8g
JWQhXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15aWQsd29ya2VySW5b
d2hvSXNSZWFkeS0xXSxvdXQpOyBmZmx1c2goKCZfX2lvYlsxXSkgKTt9CiAgICAgICAgICAgICAg
ICBzZW5kKG91dCwmcmVzdWx0W3dob0lzUmVhZHktMV0sc2l6ZW9mKE8pKTt9fX0KCiAgIHZvaWQg
c2V0V29ya2VySW4oUHJvY2Vzc29yTm8qIHApewogICAgIGZvcihpbnQgaT0wOyBpPGxlbmd0aDsg
aSsrKQogICAgICAgd29ya2VySW5baV0gPSBwW2ldO30KCiAgIHZvaWQgc2V0V29ya2VyT3V0KFBy
b2Nlc3Nvck5vKiBwKXsKICAgICBmb3IoaW50IGk9MDsgaTxsZW5ndGg7IGkrKykKICAgICAgIHdv
cmtlck91dFtpXSA9IHBbaV07fSAgCgogICB2b2lkIHNob3coKXsgIAogICAgIHByaW50ZigiRmFy
bWVyIChpbnRlcm5hbCklZFxuIixlbnRyYW5jZSk7ICBmZmx1c2goKCZfX2lvYlsxXSkgKTt9CiAg
ICAgCn07ICAgICAgCgogCnRlbXBsYXRlPGNsYXNzIEksIGNsYXNzIE8+IApjbGFzcyBGYXJtOiBw
dWJsaWMgUHJvY2Vzc3sKICAgIFByb2Nlc3MgKiogcDsgCiAgICBpbnQgbGVuZ3RoOwogICAgRmFy
bWVyPEksTz4qIGZhcm1lcjsKCiAgcHVibGljOgogICAgRmFybShQcm9jZXNzKiAocHNbXSksIGlu
dCBsKTogbGVuZ3RoKGwpLCBwKHBzKSwgUHJvY2VzcygpIHsKICAgICAgZmFybWVyID0gbmV3IEZh
cm1lcjxJLE8+KGxlbmd0aCk7ICAKICAgICAgZW50cmFuY2UgPSAoKmZhcm1lcikuZ2V0RW50cmFu
Y2UoKTsKICAgICAgZXhpdCA9ICgqZmFybWVyKS5nZXRFeGl0KCk7CiAgICAgIFByb2Nlc3Nvck5v
IHBubzFbbGVuZ3RoXTsKICAgICAgUHJvY2Vzc29yTm8gcG5vMltsZW5ndGhdOwogICAgICBmb3Io
aW50IGk9MDsgaTxsZW5ndGg7IGkrKyl7CiAgICAgICAgcG5vMVtpXSA9ICgqKHBbaV0pKS5nZXRF
bnRyYW5jZSgpOwogICAgICAgIHBubzJbaV0gPSAoKihwW2ldKSkuZ2V0RXhpdCgpOyAgCiAgICAg
ICAgKCoocFtpXSkpLnNldEluKGVudHJhbmNlKTsKICAgICAgICAoKihwW2ldKSkuc2V0T3V0KGV4
aXQpO30KICAgICAgKCpmYXJtZXIpLnNldFdvcmtlck91dChwbm8xKTsgICAgICAKICAgICAgKCpm
YXJtZXIpLnNldFdvcmtlckluKHBubzIpO30KCiAgICB2b2lkIHNldE91dChQcm9jZXNzb3JObyBu
KXtvdXQ9bjsgKCpmYXJtZXIpLnNldE91dChuKTt9CgogICAgdm9pZCBzZXRJbihQcm9jZXNzb3JO
byBuKXtpbj1uOyAgKCpmYXJtZXIpLnNldEluKG4pO30KIAogICAgdm9pZCBzdGFydCgpewogICAg
ICAoKmZhcm1lcikuc3RhcnQoKTsKICAgICAgZm9yKGludCBpID0gMDsgaTxsZW5ndGg7IGkrKykg
CiAgICAgICAgKCoocFtpXSkpLnN0YXJ0KCk7fSAKCiAgICB2b2lkIHNob3coKXsgCiAgICAgIHBy
aW50ZigiRmFybSAlZFxuIixlbnRyYW5jZSk7ICBmZmx1c2goKCZfX2lvYlsxXSkgKTsKICAgICAg
Zm9yKGludCBpID0gMDsgaTxsZW5ndGg7IGkrKykgCiAgICAgICAgKCoocFtpXSkpLnNob3coKTt9
Cn07CgogCnRlbXBsYXRlPGNsYXNzIEM+IApjbGFzcyBMb29wR3VhcmQ6ICBwdWJsaWMgUHJvY2Vz
c3sKICAgIFByb2Nlc3Nvck5vIGJvZHlJbjsKICAgIFByb2Nlc3Nvck5vIGJvZHlPdXQ7CiAgICBG
Y3Q8Qyxib29sPiogcHJlZGljYXRlOyAgCgogIHB1YmxpYzoKICAgIHRlbXBsYXRlIDxjbGFzcyBG
PgogICAgTG9vcEd1YXJkKEZjdDE8Qyxib29sLEY+IGYsIFByb2Nlc3Nvck5vIHBubzEsIFByb2Nl
c3Nvck5vIHBubzIpOiBib2R5SW4ocG5vMiksIGJvZHlPdXQocG5vMikgewogICAgICBwcmVkaWNh
dGUgPSBuZXcgRmN0MTxDLGJvb2wsRj4oZik7CiAgICAgIGVudHJhbmNlID0gcnVubmluZ1Byb2Nl
c3Nvck5vKys7IGV4aXQgPSBlbnRyYW5jZTt9CgogICAgdm9pZCBzdGFydCgpewogICAgICBDIHZh
bHVlOyBDIHJlc3VsdDsKICAgICAgTVBJX1N0YXR1cyBzdGF0OwogICAgICBNUElfUmVxdWVzdCBy
ZXFbMl07CiAgICAgIGludCB3aG9GaW5pc2hlZDsKICAgICAgYm9vbCBub25hY3RpdmVbMl07CiAg
ICAgIGJvb2wgZmluaXNoaW5nID0gZmFsc2U7CiAgICAgIGJvb2wgZmluaXNoaW5nRmFpbGVkID0g
ZmFsc2U7CgogICAgICBpZiAoRGVidWcpIHtwcmludGYoIiVkIGluIExvb3BHdWFyZDo6c3RhcnQo
KVxuIixteWlkKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICAgICBmaW5pc2hlZCA9ICEobXlp
ZCA9PSBlbnRyYW5jZSk7IAogICAgICBpZiAoRGVidWcgJiYgZmluaXNoZWQpIHtwcmludGYoIiVk
IG5vdCBjb25jZXJuZWQ7IGxlYXZpbmdcbiIsbXlpZCk7IGZmbHVzaCgoJl9faW9iWzFdKSApO30K
ICAgICAgaWYgKGZpbmlzaGVkKSByZXR1cm47CiAgICAgIG5vbmFjdGl2ZVswXSA9IHRydWU7IG5v
bmFjdGl2ZVsxXSA9IHRydWU7CiAgICAgIHdoaWxlICghZmluaXNoZWQpIHsgICAgICAgIAogICAg
ICAgIGlmIChEZWJ1Zykge3ByaW50ZigiJWQgd2FpdGluZyBmb3IgbWVzc2FnZXMgZnJvbSAlZCBh
bmQgJWRcbiIsbXlpZCxib2R5SW4saW4pOyAKICAgICAgICAgICAgICAgICAgICBmZmx1c2goKCZf
X2lvYlsxXSkgKTt9CiAgICAgICAgaWYgKG5vbmFjdGl2ZVswXSkge25vbmJsb2NraW5nUmVjZWl2
ZShib2R5SW4sJnJlc3VsdCxzaXplb2YoQyksJnJlcVswXSk7IAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBub25hY3RpdmVbMF0gPSBmYWxzZTt9CiAgICAgICAgaWYgKG5vbmFjdGl2ZVsxXSkg
e25vbmJsb2NraW5nUmVjZWl2ZShpbiwmdmFsdWUsc2l6ZW9mKEMpLCZyZXFbMV0pOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICBub25hY3RpdmVbMV0gPSBmYWxzZTt9CiAgICAgICAgTVBJX1dh
aXRhbnkoMixyZXEsJndob0ZpbmlzaGVkLCZzdGF0KTsKICAgICAgICBpZiAoRGVidWcpIHtwcmlu
dGYoIiVkIFdhaXRfQW55IHNlbGVjdGVkOiAlZFxuIixteWlkLHdob0ZpbmlzaGVkKTsgZmZsdXNo
KCgmX19pb2JbMV0pICk7fQogICAgICAgIGlmICh3aG9GaW5pc2hlZCA9PSAxKXsgIAogICAgICAg
ICAgbm9uYWN0aXZlWzFdID0gdHJ1ZTsKICAgICAgICAgIGlmIChzdGF0Lk1QSV9UQUcgPT0gMyAp
CiAgICAgICAgICAgIGlmIChmaW5pc2hpbmcpICAKICAgICAgICAgICAgICB7cHJpbnRmKCJlcnJv
ciBpbiBza2VsZXRvbiBsaWJyYXJ5OiB0ZXJtaW5hdGlvbiB0ZXN0IHdoaWxlIHN0b3BwaW5nIHRo
ZSBzeXN0ZW1cbiIpOyAKICAgICAgICAgICAgICAgZmZsdXNoKCgmX19pb2JbMV0pICk7fQoJICAg
IGVsc2UgIAogICAgICAgICAgICAgIHNlbmRUZXJtaW5hdGlvblRlc3QoYm9keU91dCk7CiAgICAg
ICAgICBlbHNlIGlmIChzdGF0Lk1QSV9UQUcgPT0gMiApeyAKICAgICAgICAgICAgIAogCSAgICBm
aW5pc2hpbmcgPSB0cnVlOwogICAgICAgICAgICBzZW5kVGVybWluYXRpb25UZXN0KGJvZHlPdXQp
O30KICAgICAgICAgIGVsc2Ugc2VuZChib2R5T3V0LCZ2YWx1ZSxzaXplb2YoQykpO30KICAgICAg
ICBlbHNlIHsgCiAgICAgICAgICBub25hY3RpdmVbMF0gPSB0cnVlOwogICAgICAgICAgaWYgKHN0
YXQuTVBJX1RBRyA9PSAzICkgCiAgICAgICAgICAgIGlmIChmaW5pc2hpbmcpIAogICAgICAgICAg
ICAgIGlmIChmaW5pc2hpbmdGYWlsZWQpIHsKICAgICAgICAgICAgICAgIGZpbmlzaGluZ0ZhaWxl
ZCA9IGZhbHNlOyBzZW5kVGVybWluYXRpb25UZXN0KGJvZHlPdXQpO30KICAgICAgICAgICAgICBl
bHNlIHNlbmRTdG9wKGJvZHlPdXQpOwogICAgICAgICAgICBlbHNlICBzZW5kVGVybWluYXRpb25U
ZXN0KG91dCk7CiAgICAgICAgICBlbHNlIGlmIChzdGF0Lk1QSV9UQUcgPT0gMiApIHtmaW5pc2hl
ZCA9IHRydWU7IHNlbmRTdG9wKG91dCk7fQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlm
ICgoKnByZWRpY2F0ZSkocmVzdWx0KSkgc2VuZChib2R5T3V0LCZyZXN1bHQsc2l6ZW9mKEMpKTsK
ICAgCSAgICBlbHNlIHNlbmQob3V0LCZyZXN1bHQsc2l6ZW9mKEMpKTsKICAgICAgICAgICAgaWYg
KGZpbmlzaGluZykgZmluaXNoaW5nRmFpbGVkID0gdHJ1ZTt9fX19CiAgIAogICB2b2lkIHNob3co
KXsgIAogICAgIHByaW50ZigiTG9vcEd1YXJkIChpbnRlcm5hbCklZFxuIixlbnRyYW5jZSk7ICBm
Zmx1c2goKCZfX2lvYlsxXSkgKTt9CiAgICAgCn07ICAgICAgCgogCiAKIAogCiAKIAogCnRlbXBs
YXRlPGNsYXNzIEM+IApjbGFzcyBMb29wOiBwdWJsaWMgUHJvY2Vzc3sKICAgIFByb2Nlc3MgKiBi
b2R5OyAKICAgIExvb3BHdWFyZDxDPiogZ3VhcmQ7CgogIHB1YmxpYzoKICAgIExvb3AoUHJvY2Vz
cyYgcCwgYm9vbCAoKiBmKShDKSk6IGJvZHkoJnApLCBQcm9jZXNzKCkgewogICAgICAKICAgICAg
Z3VhcmQgPSBuZXcgTG9vcEd1YXJkPEM+KEZjdDE8Qyxib29sLE1rT3AxPEMsYm9vbD4gPihNa09w
MTxDLGJvb2w+KGYpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqYm9keSkuZ2V0
RW50cmFuY2UoKSwoKmJvZHkpLmdldEV4aXQoKSk7ICAKICAgICAgZW50cmFuY2UgPSAoKmd1YXJk
KS5nZXRFbnRyYW5jZSgpOwogICAgICBleGl0ID0gKCpndWFyZCkuZ2V0RXhpdCgpOwogICAgICAo
KmJvZHkpLnNldEluKGVudHJhbmNlKTsKICAgICAgKCpib2R5KS5zZXRPdXQoZXhpdCk7fQoKICAg
IHRlbXBsYXRlIDxjbGFzcyBGPgogICAgTG9vcChQcm9jZXNzJiBwLCAgRmN0MTxDLGJvb2wsRj4g
Zik6IGJvZHkoJnApLCBQcm9jZXNzKCkgewogICAgICBndWFyZCA9IG5ldyBMb29wR3VhcmQ8Qz4o
ZiwoKmJvZHkpLmdldEVudHJhbmNlKCksKCpib2R5KS5nZXRFeGl0KCkpOyAgCiAgICAgIGVudHJh
bmNlID0gKCpndWFyZCkuZ2V0RW50cmFuY2UoKTsKICAgICAgZXhpdCA9ICgqZ3VhcmQpLmdldEV4
aXQoKTsKICAgICAgKCpib2R5KS5zZXRJbihlbnRyYW5jZSk7CiAgICAgICgqYm9keSkuc2V0T3V0
KGV4aXQpO30KCiAgICB2b2lkIHNldE91dChQcm9jZXNzb3JObyBuKXtvdXQ9bjsgKCpndWFyZCku
c2V0T3V0KG4pO30KCiAgICB2b2lkIHNldEluKFByb2Nlc3Nvck5vIG4pe2luPW47ICAoKmd1YXJk
KS5zZXRJbihuKTt9CiAKICAgIHZvaWQgc3RhcnQoKXsKICAgICAgKCpndWFyZCkuc3RhcnQoKTsg
KCpib2R5KS5zdGFydCgpO30gCgogICAgdm9pZCBzaG93KCl7IAogICAgICBwcmludGYoIkxvb3Ag
JWRcbiIsZW50cmFuY2UpOyAgZmZsdXNoKCgmX19pb2JbMV0pICk7CiAgICAgICgqYm9keSkuc2hv
dygpO30KfTsKCiAKIAogCiAKIAogCiAKIAogCiAKCnRlbXBsYXRlPGNsYXNzIEk+CnZvaWQgZHVw
bGljYXRlKGludCBsZW5ndGgsIEVtcHR5IGR1bW15KXsKICBpbnQqIHZhbHJlZjsKICB3aGlsZSAo
KHZhbHJlZiA9IGdldDxJPigpKSAhPSBfX251bGwgKQogICAgZm9yKGludCBpPTA7IGk8bGVuZ3Ro
OyBpKyspCiAgICAgIHB1dDxJPigqdmFscmVmKTt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSSwgY2xhc3Mg
Tz4gClByb2Nlc3MqIFBhcihQcm9jZXNzKiAocHNbXSksIGludCBsZW5ndGgpewogIEZpbHRlcjxJ
LEk+KiBwMSA9IG5ldyBGaWx0ZXI8SSxJPihjdXJyeShkdXBsaWNhdGU8ST4pKGxlbmd0aCksMSk7
CiAgRmFybTxJLE8+KiAgIHAyID0gbmV3IEZhcm08SSxPPihwcyxsZW5ndGgpOwogIHJldHVybiBu
ZXcgUGlwZSgqcDEsKnAyKTt9CiMgMSAiZ2F1c3MuY3BwIiAyCgoKY29uc3QgaW50IHNpemUgPSAy
MDsKY29uc3QgaW50IHByb2Nlc3NvcnMgPSA0OwoKaW5saW5lIGludCBhZGRpbmMoY29uc3QgaW50
IGEsIGNvbnN0IGludCBiKXtyZXR1cm4gYStiKzE7fQoKdGVtcGxhdGUgPGNsYXNzIEMsIGludCBu
PgppbnQgY29weVBpdm90KERpc3RyaWJ1dGVkTWF0cml4PEMsbixuKzE+JiBBLCBpbnQgaywgaW50
IGksIGludCBqLCBpbnQgUGlqKXsKICByZXR1cm4gQS5pc0xvY2FsKGssaykgPyBBLmdldChrLGop
L0EuZ2V0KGssaykgOiAwO30KCnRlbXBsYXRlIDxjbGFzcyBDLCBpbnQgbj4KaW50IHBpdm90T3Ao
RGlzdHJpYnV0ZWRNYXRyaXg8QyxuLG4rMT4mIEEsICBEaXN0cmlidXRlZE1hdHJpeDxDLHByb2Nl
c3NvcnMsbisxPiYgUGl2b3QsIAogICAgICAgICAgICBpbnQgaywgaW50IGksIGludCBqLCBpbnQg
UGlqKXsKICByZXR1cm4gKGkgPT0gaykgPyBBLmdldChpLGopIDogQS5nZXQoaSxqKSAtIEEuZ2V0
KGksaykqUGl2b3QuZ2V0TG9jYWxHb2JhbCgwLGopO30KCnRlbXBsYXRlIDxjbGFzcyBDLCBpbnQg
bj4KaW50IGNvbXB1dGVSZXN1bHQoRGlzdHJpYnV0ZWRNYXRyaXg8QyxuLG4rMT4mIEEsIGludCBp
KXsKICByZXR1cm4gQS5nZXQoaSxuKS9BLmdldChpLGkpO30KCiAKIAogCnRlbXBsYXRlIDxjbGFz
cyBDLCBpbnQgbj4gIApEaXN0cmlidXRlZEFycmF5PEMsbj4gZ2F1c3MoRGlzdHJpYnV0ZWRNYXRy
aXg8QyxuLG4rMT4mIEEpewogICAKICBEaXN0cmlidXRlZE1hdHJpeDxDLG4sbisxPiBCKEEpOwog
IERpc3RyaWJ1dGVkTWF0cml4PEMscHJvY2Vzc29ycyxuKzE+IFBpdm90KHByb2Nlc3NvcnMsMSk7
CiAgZm9yIChpbnQgaz0wOyBrPG47IGsrKyl7CiAgICBQaXZvdC5tYXBJbmRleEluUGxhY2UoY3Vy
cnkoY29weVBpdm90KShBKShrKSk7CiAgICBQaXZvdC5icm9hZGNhc3RQYXJ0aXRpb24oaywxKTsK
ICAgIEIubWFwSW5kZXhJblBsYWNlKGN1cnJ5KHBpdm90T3ApKEEpKFBpdm90KShrKSk7CiAgICBB
ID0gQjt9CiAgRGlzdHJpYnV0ZWRBcnJheTxDLG4+IFJlc3VsdChjdXJyeShjb21wdXRlUmVzdWx0
KShCKSk7CiAgcmV0dXJuIFJlc3VsdDt9IAoKCmludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn
dil7CiAKIAogCiAgdHJ5ewogICAgSW5pdFNrZWxldG9ucyhhcmdjLGFyZ3YpOwogICAKICAgIERp
c3RyaWJ1dGVkTWF0cml4PGludCxzaXplLHNpemUrMT4gQSgmIGFkZGluYyxwcm9jZXNzb3JzLDEp
OwogICAgICBpZiAobXlpZCA9PSAwKSB7cHJpbnRmKCJBOlxuIik7IGZmbHVzaCgoJl9faW9iWzFd
KSApO30gQS5zaG93KCk7CiAgICBEaXN0cmlidXRlZEFycmF5PGludCxzaXplPiBSID0gZ2F1c3Mo
QSk7CiAgICAgICBpZiAobXlpZCA9PSAwKSB7cHJpbnRmKCJSZXN1bHQgb2YgR2F1c3NpYW4gRWxp
bWluYXRpb246XG4iKTsgZmZsdXNoKCgmX19pb2JbMV0pICk7fQogICAgUi5zaG93KCk7CgogICAg
VGVybWluYXRlU2tlbGV0b25zKCk7fQogIGNhdGNoKEV4Y2VwdGlvbil7cHJpbnRmKCJFeGNlcHRp
b25cbiIpOyBmZmx1c2goKCZfX2lvYlsxXSkgKTt9OyAgICAgICAgICAgICAgICAgIAp9Cg==



More information about the Gcc-bugs mailing list