target/6369: mips-irix6 gcc-3.1 bootstrap failure in stage2 compiling genrecog.c

ghazi@caip.rutgers.edu ghazi@caip.rutgers.edu
Thu Apr 18 21:02:00 GMT 2002


>Number:         6369
>Category:       target
>Synopsis:       mips-irix6 gcc-3.1 bootstrap failure in stage2 compiling genrecog.c
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Thu Apr 18 18:26:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Kaveh Ghazi
>Release:        gcc version 3.1 20020418 (prerelease)
>Organization:
>Environment:
mips-sgi-irix6.2 native as/ld
or sparc-sun-solaris2.7 cross to mips-sgi-irix6.5
>Description:
While bootstrapping the gcc-3.1 branch today on mips-irix6.2, I get this failure in stage2 compiling genrecog.c:

genrecog.c: In function `make_insn_sequence':
genrecog.c:2609: Internal compiler error in ?, at simplify-rtx.c:2711
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
make[2]: *** [genrecog.o] Error 1

I was able to replicate it using a cross compiler from sparc-sun-solaris2.7 to mips-sgi-irix6.5.  If you do that, use the attached .i file and these flags:

cc1 -fpreprocessed genrecog.i -quiet -dumpbase genrecog.c -g -O2 -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wtraditional -Wno-long-long -pedantic -version -o genrecog.s

Bootstrap worked as recently as yesterday:
http://gcc.gnu.org/ml/gcc-testresults/2002-04/msg00671.html
http://gcc.gnu.org/ml/gcc-testresults/2002-04/msg00679.html
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/x-gzip; name="genrecog.i.gz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="genrecog.i.gz"

IyAxICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIKIyAxICI8YnVp
bHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIw
NDE4L2djYy9nZW5yZWNvZy5jIgojIDUzICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2Mv
Z2VucmVjb2cuYyIKIyAxICJoY29uZmlnLmgiIDEKIyAxICJhdXRvLWhvc3QuaCIgMQojIDIgImhj
b25maWcuaCIgMgoKCgoKCnN0cnVjdCBydHhfZGVmOwp0eXBlZGVmIHN0cnVjdCBydHhfZGVmICpy
dHg7CnN0cnVjdCBydHZlY19kZWY7CnR5cGVkZWYgc3RydWN0IHJ0dmVjX2RlZiAqcnR2ZWM7CnVu
aW9uIHRyZWVfbm9kZTsKdHlwZWRlZiB1bmlvbiB0cmVlX25vZGUgKnRyZWU7CgoKIyAxICIuLi8u
Li9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9pbmNsdWRlL2Fuc2lkZWNsLmgiIDEKIyAxNiAiaGNvbmZp
Zy5oIiAyCiMgMSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZpZy9taXBzL2ly
aXM2LmgiIDEKIyAzMyAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZpZy9taXBz
L2lyaXM2LmgiCiMgMSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZpZy9taXBz
L2lyaXM1LmgiIDEKIyAyOSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZpZy9t
aXBzL2lyaXM1LmgiCiMgMSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZpZy9t
aXBzL2lyaXMzLmgiIDEKIyAzMCAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZp
Zy9taXBzL2lyaXM1LmgiIDIKIyAxICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvY29u
ZmlnL21pcHMvbWlwcy5oIiAxCiMgMjkgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9j
b25maWcvbWlwcy9taXBzLmgiCmV4dGVybiBjaGFyICphc21fZmlsZV9uYW1lOwpleHRlcm4gY2hh
ciBjYWxsX3VzZWRfcmVnc1tdOwpleHRlcm4gaW50IG1heV9jYWxsX2FsbG9jYTsKZXh0ZXJuIGNo
YXIgKipzYXZlX2FyZ3Y7CmV4dGVybiBpbnQgdGFyZ2V0X2ZsYWdzOwoKCgoKZW51bSBjbXBfdHlw
ZSB7CiAgQ01QX1NJLAogIENNUF9ESSwKICBDTVBfU0YsCiAgQ01QX0RGLAogIENNUF9NQVgKfTsK
CgplbnVtIGRlbGF5X3R5cGUgewogIERFTEFZX05PTkUsCiAgREVMQVlfTE9BRCwKICBERUxBWV9I
SUxPLAogIERFTEFZX0ZDTVAKfTsKCgoKCgoKZW51bSBwcm9jZXNzb3JfdHlwZSB7CiAgUFJPQ0VT
U09SX0RFRkFVTFQsCiAgUFJPQ0VTU09SX1IzMDAwLAogIFBST0NFU1NPUl9SMzkwMCwKICBQUk9D
RVNTT1JfUjYwMDAsCiAgUFJPQ0VTU09SX1I0MDAwLAogIFBST0NFU1NPUl9SNDEwMCwKICBQUk9D
RVNTT1JfUjQzMDAsCiAgUFJPQ0VTU09SX1I0NjAwLAogIFBST0NFU1NPUl9SNDY1MCwKICBQUk9D
RVNTT1JfUjUwMDAsCiAgUFJPQ0VTU09SX1I4MDAwLAogIFBST0NFU1NPUl9SNEtDLAogIFBST0NF
U1NPUl9SNUtDLAogIFBST0NFU1NPUl9SMjBLQwp9OwojIDEwNCAiLi4vLi4vZWdjYy0zLjEtQ1ZT
MjAwMjA0MTgvZ2NjL2NvbmZpZy9taXBzL21pcHMuaCIKZW51bSBtaXBzX2FiaWNhbGxzX3R5cGUg
ewogIE1JUFNfQUJJQ0FMTFNfTk8sCiAgTUlQU19BQklDQUxMU19ZRVMKfTsKCgoKCgoKCmVudW0g
YmxvY2tfbW92ZV90eXBlIHsKICBCTE9DS19NT1ZFX05PUk1BTCwKICBCTE9DS19NT1ZFX05PVF9M
QVNULAogIEJMT0NLX01PVkVfTEFTVAp9OwoKZXh0ZXJuIGNoYXIgbWlwc19yZWdfbmFtZXNbXVs4
XTsKZXh0ZXJuIGNoYXIgbWlwc19wcmludF9vcGVyYW5kX3B1bmN0WzI1Nl07CmV4dGVybiBjb25z
dCBjaGFyICpjdXJyZW50X2Z1bmN0aW9uX2ZpbGU7CmV4dGVybiBpbnQgbnVtX3NvdXJjZV9maWxl
bmFtZXM7CmV4dGVybiBpbnQgaW5zaWRlX2Z1bmN0aW9uOwpleHRlcm4gaW50IGlnbm9yZV9saW5l
X251bWJlcjsKZXh0ZXJuIGludCBmaWxlX2luX2Z1bmN0aW9uX3dhcm5pbmc7CmV4dGVybiBpbnQg
c2RiX2xhYmVsX2NvdW50OwpleHRlcm4gaW50IHNkYl9iZWdpbl9mdW5jdGlvbl9saW5lOwpleHRl
cm4gaW50IG1pcHNfc2VjdGlvbl90aHJlc2hvbGQ7CmV4dGVybiBpbnQgZ19zd2l0Y2hfdmFsdWU7
CmV4dGVybiBpbnQgZ19zd2l0Y2hfc2V0OwpleHRlcm4gaW50IHN5bV9saW5lbm87CmV4dGVybiBp
bnQgc2V0X25vcmVvcmRlcjsKZXh0ZXJuIGludCBzZXRfbm9tYWNybzsKZXh0ZXJuIGludCBzZXRf
bm9hdDsKZXh0ZXJuIGludCBzZXRfdm9sYXRpbGU7CmV4dGVybiBpbnQgbWlwc19icmFuY2hfbGlr
ZWx5OwpleHRlcm4gaW50IG1pcHNfZGJ4X3JlZ25vW107CmV4dGVybiBzdHJ1Y3QgcnR4X2RlZiAq
YnJhbmNoX2NtcFsyXTsKZXh0ZXJuIGVudW0gY21wX3R5cGUgYnJhbmNoX3R5cGU7CmV4dGVybiBl
bnVtIHByb2Nlc3Nvcl90eXBlIG1pcHNfYXJjaDsKZXh0ZXJuIGVudW0gcHJvY2Vzc29yX3R5cGUg
bWlwc190dW5lOwpleHRlcm4gZW51bSBtaXBzX2FiaWNhbGxzX3R5cGUgbWlwc19hYmljYWxsczsK
ZXh0ZXJuIGludCBtaXBzX2lzYTsKZXh0ZXJuIGludCBtaXBzMTY7CmV4dGVybiBpbnQgbWlwczE2
X2hhcmRfZmxvYXQ7CmV4dGVybiBpbnQgbWlwc19lbnRyeTsKZXh0ZXJuIGNvbnN0IGNoYXIgKm1p
cHNfY3B1X3N0cmluZzsKZXh0ZXJuIGNvbnN0IGNoYXIgKm1pcHNfYXJjaF9zdHJpbmc7CmV4dGVy
biBjb25zdCBjaGFyICptaXBzX3R1bmVfc3RyaW5nOwpleHRlcm4gY29uc3QgY2hhciAqbWlwc19p
c2Ffc3RyaW5nOwpleHRlcm4gY29uc3QgY2hhciAqbWlwc19hYmlfc3RyaW5nOwpleHRlcm4gY29u
c3QgY2hhciAqbWlwc19lbnRyeV9zdHJpbmc7CmV4dGVybiBjb25zdCBjaGFyICptaXBzX25vX21p
cHMxNl9zdHJpbmc7CmV4dGVybiBjb25zdCBjaGFyICptaXBzX2V4cGxpY2l0X3R5cGVfc2l6ZV9z
dHJpbmc7CmV4dGVybiBjb25zdCBjaGFyICptaXBzX2NhY2hlX2ZsdXNoX2Z1bmM7CmV4dGVybiBp
bnQgbWlwc19zcGxpdF9hZGRyZXNzZXM7CmV4dGVybiBpbnQgZHNsb3RzX2xvYWRfdG90YWw7CmV4
dGVybiBpbnQgZHNsb3RzX2xvYWRfZmlsbGVkOwpleHRlcm4gaW50IGRzbG90c19qdW1wX3RvdGFs
OwpleHRlcm4gaW50IGRzbG90c19qdW1wX2ZpbGxlZDsKZXh0ZXJuIGludCBkc2xvdHNfbnVtYmVy
X25vcHM7CmV4dGVybiBpbnQgbnVtX3JlZnNbM107CmV4dGVybiBzdHJ1Y3QgcnR4X2RlZiAqbWlw
c19sb2FkX3JlZzsKZXh0ZXJuIHN0cnVjdCBydHhfZGVmICptaXBzX2xvYWRfcmVnMjsKZXh0ZXJu
IHN0cnVjdCBydHhfZGVmICptaXBzX2xvYWRfcmVnMzsKZXh0ZXJuIHN0cnVjdCBydHhfZGVmICpt
aXBzX2xvYWRfcmVnNDsKZXh0ZXJuIHN0cnVjdCBydHhfZGVmICplbWJlZGRlZF9waWNfZm5hZGRy
X3J0eDsKZXh0ZXJuIGludCBtaXBzX3N0cmluZ19sZW5ndGg7CmV4dGVybiBzdHJ1Y3QgcnR4X2Rl
ZiAqbWlwczE2X2dwX3BzZXVkb19ydHg7CgoKZXh0ZXJuIHZvaWQgcmRhdGFfc2VjdGlvbiAodm9p
ZCk7CmV4dGVybiB2b2lkIHNkYXRhX3NlY3Rpb24gKHZvaWQpOwpleHRlcm4gdm9pZCBzYnNzX3Nl
Y3Rpb24gKHZvaWQpOwojIDg1MyAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZp
Zy9taXBzL21pcHMuaCIKZXh0ZXJuIGludCBtaXBzX2FiaTsKIyAxOTE5ICIuLi8uLi9lZ2NjLTMu
MS1DVlMyMDAyMDQxOC9nY2MvY29uZmlnL21pcHMvbWlwcy5oIgpleHRlcm4gY2hhciBtaXBzX2hh
cmRfcmVnbm9fbW9kZV9va1tdWzc2XTsKIyAyMDQzICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQx
OC9nY2MvY29uZmlnL21pcHMvbWlwcy5oIgplbnVtIHJlZ19jbGFzcwp7CiAgTk9fUkVHUywKICBN
MTZfTkFfUkVHUywKICBNMTZfUkVHUywKICBUX1JFRywKICBNMTZfVF9SRUdTLAogIEdSX1JFR1Ms
CiAgRlBfUkVHUywKICBISV9SRUcsCiAgTE9fUkVHLAogIEhJTE9fUkVHLAogIE1EX1JFR1MsCiAg
SElfQU5EX0dSX1JFR1MsCiAgTE9fQU5EX0dSX1JFR1MsCiAgSElMT19BTkRfR1JfUkVHUywKICBI
SV9BTkRfRlBfUkVHUywKICBTVF9SRUdTLAogIEFMTF9SRUdTLAogIExJTV9SRUdfQ0xBU1NFUwp9
OwojIDIxMzIgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9jb25maWcvbWlwcy9taXBz
LmgiCmV4dGVybiBjb25zdCBlbnVtIHJlZ19jbGFzcyBtaXBzX3JlZ25vX3RvX2NsYXNzW107CiMg
MjIwMiAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZpZy9taXBzL21pcHMuaCIK
ZXh0ZXJuIGVudW0gcmVnX2NsYXNzIG1pcHNfY2hhcl90b19jbGFzc1syNTZdOwojIDI0NDMgIi4u
Ly4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9jb25maWcvbWlwcy9taXBzLmgiCnN0cnVjdCBt
aXBzX2ZyYW1lX2luZm8KewogIGxvbmcgdG90YWxfc2l6ZTsKICBsb25nIHZhcl9zaXplOwogIGxv
bmcgYXJnc19zaXplOwogIGxvbmcgZXh0cmFfc2l6ZTsKICBpbnQgZ3BfcmVnX3NpemU7CiAgaW50
IGZwX3JlZ19zaXplOwogIGxvbmcgbWFzazsKICBsb25nIGZtYXNrOwogIGxvbmcgZ3Bfc2F2ZV9v
ZmZzZXQ7CiAgbG9uZyBmcF9zYXZlX29mZnNldDsKICBsb25nIGdwX3NwX29mZnNldDsKICBsb25n
IGZwX3NwX29mZnNldDsKICBpbnQgaW5pdGlhbGl6ZWQ7CiAgaW50IG51bV9ncDsKICBpbnQgbnVt
X2ZwOwogIGxvbmcgaW5zbnNfbGVuOwp9OwoKZXh0ZXJuIHN0cnVjdCBtaXBzX2ZyYW1lX2luZm8g
Y3VycmVudF9mcmFtZV9pbmZvOwojIDI3NzMgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2dj
Yy9jb25maWcvbWlwcy9taXBzLmgiCnR5cGVkZWYgc3RydWN0IG1pcHNfYXJncyB7CiAgaW50IGdw
X3JlZ19mb3VuZDsKICB1bnNpZ25lZCBpbnQgYXJnX251bWJlcjsKICB1bnNpZ25lZCBpbnQgYXJn
X3dvcmRzOwogIHVuc2lnbmVkIGludCBmcF9hcmdfd29yZHM7CiAgaW50IGxhc3RfYXJnX2ZwOwog
IGludCBmcF9jb2RlOwogIHVuc2lnbmVkIGludCBudW1fYWRqdXN0czsKCgoKCiAgaW50IHByb3Rv
dHlwZTsKICBzdHJ1Y3QgcnR4X2RlZiAqYWRqdXN0WzQqMl07Cn0gQ1VNVUxBVElWRV9BUkdTOwoj
IDMxICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvY29uZmlnL21pcHMvaXJpczUuaCIg
MgojIDEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9jb25maWcvbWlwcy9pcmlzNC5o
IiAxCiMgMzIgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9jb25maWcvbWlwcy9pcmlz
NS5oIiAyCiMgMzQgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9jb25maWcvbWlwcy9p
cmlzNi5oIiAyCiMgMSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZpZy9taXBz
L2FiaTY0LmgiIDEKIyAzNSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2NvbmZpZy9t
aXBzL2lyaXM2LmgiIDIKIyAxNyAiaGNvbmZpZy5oIiAyCiMgMSAiLi4vLi4vZWdjYy0zLjEtQ1ZT
MjAwMjA0MTgvZ2NjL2RlZmF1bHRzLmgiIDEKIyAxOCAiaGNvbmZpZy5oIiAyCiMgNTQgIi4uLy4u
L2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9nZW5yZWNvZy5jIiAyCiMgMSAiLi4vLi4vZWdjYy0z
LjEtQ1ZTMjAwMjA0MTgvZ2NjL3N5c3RlbS5oIiAxCiMgMzMgIi4uLy4uL2VnY2MtMy4xLUNWUzIw
MDIwNDE4L2djYy9zeXN0ZW0uaCIKIyAxICJpbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiaW5j
bHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0
OwojIDExMCAiaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xp
c3Q7CiMgMzQgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIgMgojIDQ3
ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2Mvc3lzdGVtLmgiCiMgMSAiaW5jbHVkZS9z
dGRkZWYuaCIgMSAzCiMgMTQ3ICJpbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0cmRp
ZmZfdDsKIyAyMDEgImluY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6
ZV90OwojIDI5NCAiaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGxvbmcgaW50IHdjaGFyX3Q7
CiMgNDggIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIgMgoKCiMgMSAi
aW5jbHVkZS9zdGRpby5oIiAxIDMKIyAyMCAiaW5jbHVkZS9zdGRpby5oIiAzCiNpZGVudCAiJFJl
dmlzaW9uOiAxLjY1ICQiCiMgNTAgImluY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9zdGFuZGFyZHMuaCIgMSAzCiMgMTkgIi91c3IvaW5jbHVkZS9zdGFuZGFyZHMuaCIgMwojaWRl
bnQgIiRJZDogc3RhbmRhcmRzLmgsdiAxLjcgMTk5NS8xMi8zMCAwMjo0OToxOCBqd2FnIEV4cCAk
IgojIDUxICJpbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9zZ2lkZWZzLmgi
IDEgMwojIDE5ICIvdXNyL2luY2x1ZGUvc2dpZGVmcy5oIiAzCiNpZGVudCAiJFJldmlzaW9uOiAx
LjExICQiCiMgMTM2ICIvdXNyL2luY2x1ZGUvc2dpZGVmcy5oIiAzCnR5cGVkZWYgaW50IF9faW50
MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBfX3VpbnQzMl90OwojIDE4MyAiL3Vzci9pbmNsdWRlL3Nn
aWRlZnMuaCIgMwp0eXBlZGVmIGxvbmcgbG9uZyBfX2ludDY0X3Q7CnR5cGVkZWYgdW5zaWduZWQg
bG9uZyBsb25nIF9fdWludDY0X3Q7CiMgMjE5ICIvdXNyL2luY2x1ZGUvc2dpZGVmcy5oIiAzCnR5
cGVkZWYgX19pbnQzMl90IF9fcHNpbnRfdDsKdHlwZWRlZiBfX3VpbnQzMl90IF9fcHN1bnNpZ25l
ZF90OwojIDI0MSAiL3Vzci9pbmNsdWRlL3NnaWRlZnMuaCIgMwp0eXBlZGVmIF9faW50MzJfdCBf
X3NjaW50X3Q7CnR5cGVkZWYgX191aW50MzJfdCBfX3NjdW5zaWduZWRfdDsKIyA1MiAiaW5jbHVk
ZS9zdGRpby5oIiAyIDMKIyA2NSAiaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgX19pbnQ2NF90
IGZwb3NfdDsKIyA3NCAiaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgX19pbnQ2NF90IGZwb3M2
NF90OwojIDgzICJpbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBjaGFyICpfX25vdF92YV9saXN0
X187CiMgMTUzICJpbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKIyAxNjMgImluY2x1
ZGUvc3RkaW8uaCIgMwpfX2ZpbGVfcwoKewoKICAgICAgICBpbnQgX2NudDsKCgoKCiAgICAgICAg
dW5zaWduZWQgY2hhciAqX3B0cjsKICAgICAgICB1bnNpZ25lZCBjaGFyICpfYmFzZTsKCgoKCiAg
ICAgICAgdW5zaWduZWQgY2hhciBfZmxhZzsKICAgICAgICB1bnNpZ25lZCBjaGFyIF9vX2ZpbGU7
CiAgICAgICAgdW5zaWduZWQgc2hvcnQgX2ZpbGU7CgoKCgp9IEZJTEU7CgpleHRlcm4gRklMRSBf
X2lvYlsxMDBdOwpleHRlcm4gRklMRSAqX2xhc3RidWY7CmV4dGVybiB1bnNpZ25lZCBjaGFyICpf
YnVmZW5kdGFiW107CmV4dGVybiB1bnNpZ25lZCBjaGFyIF9zaWJ1ZltdLCBfc29idWZbXTsKCmV4
dGVybiBpbnQgcmVtb3ZlKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgcmVuYW1lKGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIEZJTEUgKnRtcGZpbGUodm9pZCk7CmV4dGVybiBj
aGFyICp0bXBuYW0oY2hhciAqKTsKZXh0ZXJuIGludCBmY2xvc2UoRklMRSAqKTsKZXh0ZXJuIGlu
dCBmZmx1c2goRklMRSAqKTsKZXh0ZXJuIEZJTEUgKmZvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqKTsKZXh0ZXJuIEZJTEUgKmZyZW9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICos
IEZJTEUgKik7CmV4dGVybiB2b2lkIHNldGJ1ZihGSUxFICosIGNoYXIgKik7CmV4dGVybiBpbnQg
c2V0dmJ1ZihGSUxFICosIGNoYXIgKiwgaW50LCBzaXplX3QpOwoKZXh0ZXJuIGludCBmcHJpbnRm
KEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOwoKZXh0ZXJuIGludCBmc2NhbmYoRklMRSAqLCBj
b25zdCBjaGFyICosIC4uLik7CgpleHRlcm4gaW50IHByaW50Zihjb25zdCBjaGFyICosIC4uLik7
CgpleHRlcm4gaW50IHNjYW5mKGNvbnN0IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc3ByaW50
ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc3NjYW5mKGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwpleHRlcm4gaW50IHZmcHJpbnRmKEZJTEUgKiwgY29u
c3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmV4dGVybiBpbnQgdnByaW50Zihjb25zdCBjaGFy
ICosIF9fZ251Y192YV9saXN0KTsKZXh0ZXJuIGludCB2c3ByaW50ZihjaGFyICosIGNvbnN0IGNo
YXIgKiwgX19nbnVjX3ZhX2xpc3QpOwojIDIyNyAiaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBp
bnQgZmdldGMoRklMRSAqKTsKZXh0ZXJuIGNoYXIgKmZnZXRzKGNoYXIgKiwgaW50LCBGSUxFICop
OwpleHRlcm4gaW50IGZwdXRjKGludCwgRklMRSAqKTsKZXh0ZXJuIGludCBmcHV0cyhjb25zdCBj
aGFyICosIEZJTEUgKik7CmV4dGVybiBpbnQgZ2V0YyhGSUxFICopOwpleHRlcm4gaW50IGdldGNo
YXIodm9pZCk7CmV4dGVybiBjaGFyICpnZXRzKGNoYXIgKik7CmV4dGVybiBpbnQgcHV0YyhpbnQs
IEZJTEUgKik7CmV4dGVybiBpbnQgcHV0Y2hhcihpbnQpOwpleHRlcm4gaW50IHB1dHMoY29uc3Qg
Y2hhciAqKTsKZXh0ZXJuIGludCB1bmdldGMoaW50LCBGSUxFICopOwpleHRlcm4gc2l6ZV90IGZy
ZWFkKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7CiNwcmFnbWEgaW50X3RvX3Vuc2ln
bmVkIGZyZWFkCmV4dGVybiBzaXplX3QgZndyaXRlKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXpl
X3QsIEZJTEUgKik7CiNwcmFnbWEgaW50X3RvX3Vuc2lnbmVkIGZ3cml0ZQpleHRlcm4gaW50IGZn
ZXRwb3MoRklMRSAqLCBmcG9zX3QgKik7CmV4dGVybiBpbnQgZnNlZWsoRklMRSAqLCBsb25nLCBp
bnQpOwpleHRlcm4gaW50IGZzZXRwb3MoRklMRSAqLCBjb25zdCBmcG9zX3QgKik7CmV4dGVybiBs
b25nIGZ0ZWxsKEZJTEUgKik7CmV4dGVybiB2b2lkIHJld2luZChGSUxFICopOwpleHRlcm4gdm9p
ZCBjbGVhcmVycihGSUxFICopOwpleHRlcm4gaW50IGZlb2YoRklMRSAqKTsKZXh0ZXJuIGludCBm
ZXJyb3IoRklMRSAqKTsKZXh0ZXJuIHZvaWQgcGVycm9yKGNvbnN0IGNoYXIgKik7CgpleHRlcm4g
aW50IF9fZmlsYnVmKEZJTEUgKik7CmV4dGVybiBpbnQgX19mbHNidWYoaW50LCBGSUxFICopOwoK
CgpleHRlcm4gRklMRSAqZmRvcGVuKGludCwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBmaWxl
bm8oRklMRSAqKTsKCgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZShGSUxFICopOwpleHRlcm4gaW50
IGZ0cnlsb2NrZmlsZShGSUxFICopOwpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZShGSUxFICopOwpl
eHRlcm4gaW50IGdldGNfdW5sb2NrZWQoRklMRSAqKTsKZXh0ZXJuIGludCBwdXRjX3VubG9ja2Vk
KGludCwgRklMRSAqKTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkKHZvaWQpOwpleHRlcm4g
aW50IHB1dGNoYXJfdW5sb2NrZWQoaW50KTsKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuKGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBwY2xvc2UoRklMRSAqKTsKCgoKIyAxICIu
Li8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9pbmNsdWRlL2dldG9wdC5oIiAxIDMKIyAzNiAiLi4v
Li4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRlcm4gY2hhciAq
b3B0YXJnOwojIDUwICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9pbmNsdWRlL2dldG9wdC5o
IiAzCmV4dGVybiBpbnQgb3B0aW5kOwoKCgoKZXh0ZXJuIGludCBvcHRlcnI7CgoKCmV4dGVybiBp
bnQgb3B0b3B0OwojIDgyICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9pbmNsdWRlL2dldG9w
dC5oIiAzCnN0cnVjdCBvcHRpb24KewoKICBjb25zdCBjaGFyICpuYW1lOwoKCgoKCiAgaW50IGhh
c19hcmc7CiAgaW50ICpmbGFnOwogIGludCB2YWw7Cn07CiMgMTEyICIuLi8uLi9lZ2NjLTMuMS1D
VlMyMDAyMDQxOC9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBpbnQgZ2V0b3B0IChpbnQgYXJn
YywgY2hhciAqY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKnNob3J0b3B0cyk7CgoKCgoKZXh0ZXJu
IGludCBnZXRvcHRfbG9uZyAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LCBjb25zdCBjaGFy
ICpzaG9ydG9wdHMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24g
KmxvbmdvcHRzLCBpbnQgKmxvbmdpbmQpOwpleHRlcm4gaW50IGdldG9wdF9sb25nX29ubHkgKGlu
dCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpzaG9ydG9wdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RydWN0IG9wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZCk7CgoKZXh0ZXJuIGludCBfZ2V0
b3B0X2ludGVybmFsIChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2hvcnRvcHRzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdpbmQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxvbmdfb25seSk7CiMgMjc5ICJpbmNsdWRl
L3N0ZGlvLmgiIDIgMwpleHRlcm4gY2hhciAqY3Rlcm1pZChjaGFyICopOwpleHRlcm4gY2hhciAq
Y3VzZXJpZChjaGFyICopOwpleHRlcm4gY2hhciAqdGVtcG5hbShjb25zdCBjaGFyICosIGNvbnN0
IGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0dyhGSUxFICopOwpleHRlcm4gaW50IHB1dHcoaW50LCBG
SUxFICopOwoKCgoKCmV4dGVybiBjaGFyICpta3RlbXAoY2hhciAqKTsKZXh0ZXJuIGludCBta3N0
ZW1wKGNoYXIgKik7CmV4dGVybiBpbnQgc2V0YnVmZmVyKEZJTEUgKiwgY2hhciAqLCBpbnQpOwpl
eHRlcm4gaW50IHNldGxpbmVidWYoRklMRSAqKTsKZXh0ZXJuIGludCBzeXN0ZW0oY29uc3QgY2hh
ciAqKTsKCgpleHRlcm4gaW50IGZnZXRwb3M2NChGSUxFICosIGZwb3M2NF90ICopOwoKZXh0ZXJu
IGludCBmc2VlazY0KEZJTEUgKiwgX19pbnQ2NF90LCBpbnQpOwpleHRlcm4gaW50IGZzZXRwb3M2
NChGSUxFICosIGNvbnN0IGZwb3M2NF90ICopOwoKZXh0ZXJuIF9faW50NjRfdCBmdGVsbDY0KEZJ
TEUgKik7CgoKCmV4dGVybiBpbnQgX19zZW1wdXRjKGludCwgRklMRSAqKTsKZXh0ZXJuIGludCBf
X3NlbWdldGMoRklMRSAqKTsKZXh0ZXJuIGludCBfX3VzX3JzdGhyZWFkX3N0ZGlvOwoKCgpleHRl
cm4gY2hhciAqY3Rlcm1pZF9yKGNoYXIgKik7CiMgNTEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIw
NDE4L2djYy9zeXN0ZW0uaCIgMgojIDExMCAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2Nj
L3N5c3RlbS5oIgojIDEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2luY2x1ZGUvc2FmZS1j
dHlwZS5oIiAxCiMgNDQgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2luY2x1ZGUvc2FmZS1j
dHlwZS5oIgplbnVtIHsKCiAgX3NjaF9pc2JsYW5rID0gMHgwMDAxLAogIF9zY2hfaXNjbnRybCA9
IDB4MDAwMiwKICBfc2NoX2lzZGlnaXQgPSAweDAwMDQsCiAgX3NjaF9pc2xvd2VyID0gMHgwMDA4
LAogIF9zY2hfaXNwcmludCA9IDB4MDAxMCwKICBfc2NoX2lzcHVuY3QgPSAweDAwMjAsCiAgX3Nj
aF9pc3NwYWNlID0gMHgwMDQwLAogIF9zY2hfaXN1cHBlciA9IDB4MDA4MCwKICBfc2NoX2lzeGRp
Z2l0ID0gMHgwMTAwLAoKCiAgX3NjaF9pc2lkc3QgPSAweDAyMDAsCiAgX3NjaF9pc3ZzcCA9IDB4
MDQwMCwKICBfc2NoX2lzbnZzcCA9IDB4MDgwMCwKCgogIF9zY2hfaXNhbHBoYSA9IF9zY2hfaXN1
cHBlcnxfc2NoX2lzbG93ZXIsCiAgX3NjaF9pc2FsbnVtID0gX3NjaF9pc2FscGhhfF9zY2hfaXNk
aWdpdCwKICBfc2NoX2lzaWRudW0gPSBfc2NoX2lzaWRzdHxfc2NoX2lzZGlnaXQsCiAgX3NjaF9p
c2dyYXBoID0gX3NjaF9pc2FsbnVtfF9zY2hfaXNwdW5jdCwKICBfc2NoX2lzY3Bwc3AgPSBfc2No
X2lzdnNwfF9zY2hfaXNudnNwLAogIF9zY2hfaXNiYXNpYyA9IF9zY2hfaXNwcmludHxfc2NoX2lz
Y3Bwc3AKCn07CgoKZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IF9zY2hfaXN0YWJsZVsyNTZd
OwojIDk3ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9pbmNsdWRlL3NhZmUtY3R5cGUuaCIK
ZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgX3NjaF90b3VwcGVyWzI1Nl07CmV4dGVybiBjb25z
dCB1bnNpZ25lZCBjaGFyIF9zY2hfdG9sb3dlclsyNTZdOwojIDExMSAiLi4vLi4vZWdjYy0zLjEt
Q1ZTMjAwMjA0MTgvZ2NjL3N5c3RlbS5oIiAyCgojIDEgImluY2x1ZGUvc3lzL3R5cGVzLmgiIDEg
MwojIDM2ICJpbmNsdWRlL3N5cy90eXBlcy5oIiAzCiNpZGVudCAiJFJldmlzaW9uOiAzLjEwMSAk
IgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1Y2hhcl90Owp0eXBlZGVmIHVuc2lnbmVkIHNo
b3J0IHVzaG9ydF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X3Q7CnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyB1bG9uZ190OwoKCnR5cGVkZWYgY2hhciAqIGFkZHJfdDsKdHlwZWRlZiBjaGFyICog
Y2FkZHJfdDsKCnR5cGVkZWYgX19pbnQ2NF90IGRhZGRyX3Q7CgoKCnR5cGVkZWYgbG9uZyBwZ25v
X3Q7CnR5cGVkZWYgX191aW50MzJfdCBwZm5fdDsKdHlwZWRlZiBzaG9ydCBjbnRfdDsKCgoKCnR5
cGVkZWYgX19pbnQzMl90IHBnY250X3Q7Cgp0eXBlZGVmIGVudW0geyBCX0ZBTFNFLCBCX1RSVUUg
fSBib29sZWFuX3Q7CiMgNzYgImluY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBsb25nIGlk
X3Q7CiMgODkgImluY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiB1bG9uZ190IG1ham9yX3Q7
CnR5cGVkZWYgdWxvbmdfdCBtaW5vcl90OwojIDEwOCAiaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0
eXBlZGVmIHVzaG9ydF90IG9fbW9kZV90Owp0eXBlZGVmIHNob3J0IG9fZGV2X3Q7CnR5cGVkZWYg
dXNob3J0X3Qgb191aWRfdDsKdHlwZWRlZiBvX3VpZF90IG9fZ2lkX3Q7CnR5cGVkZWYgc2hvcnQg
b19ubGlua190Owp0eXBlZGVmIHNob3J0IG9fcGlkX3Q7CnR5cGVkZWYgX191aW50MzJfdCBvX2lu
b190OwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBtb2RlX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBkZXZfdDsKdHlwZWRlZiBsb25nIHVpZF90Owp0eXBlZGVmIGxvbmcgZ2lkX3Q7CnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBubGlua190Owp0eXBlZGVmIGxvbmcgcGlkX3Q7CiMgMTM0ICJpbmNsdWRl
L3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX191aW50NjRfdCBpbm9fdDsKCgoKdHlwZWRlZiBfX3Vp
bnQ2NF90IGlubzY0X3Q7CgoKCgoKCnR5cGVkZWYgX19pbnQ2NF90IG9mZl90OwoKCgp0eXBlZGVm
IF9faW50NjRfdCBvZmY2NF90OwoKdHlwZWRlZiBfX3NjaW50X3QgX19zY29mZl90OwoKdHlwZWRl
ZiBfX3Njb2ZmX3Qgc2NvZmZfdDsKCgoKdHlwZWRlZiBfX2ludDY0X3QgYmxrY250X3Q7CnR5cGVk
ZWYgX191aW50NjRfdCBmc2Jsa2NudF90Owp0eXBlZGVmIF9fdWludDY0X3QgZnNmaWxjbnRfdDsK
CgoKCgoKdHlwZWRlZiBsb25nIHN3YmxrX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBwYWRkcl90
Owp0eXBlZGVmIGludCBrZXlfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVzZV90Owp0eXBlZGVm
IHNob3J0IHN5c2lkX3Q7CnR5cGVkZWYgc2hvcnQgaW5kZXhfdDsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgbG9ja190Owp0eXBlZGVmIHNpZ25lZCBjaGFyIGNwdWlkX3Q7CnR5cGVkZWYgdW5zaWduZWQg
Y2hhciBwcmlfdDsKdHlwZWRlZiBfX3VpbnQ2NF90IGFjY3VtX3Q7CnR5cGVkZWYgX19pbnQ2NF90
IHByaWRfdDsKdHlwZWRlZiBfX2ludDY0X3QgYXNoX3Q7CiMgMjAwICJpbmNsdWRlL3N5cy90eXBl
cy5oIiAzCnR5cGVkZWYgaW50IHNzaXplX3Q7CiMgMjEwICJpbmNsdWRlL3N5cy90eXBlcy5oIiAz
CnR5cGVkZWYgbG9uZyB0aW1lX3Q7CiMgMjIwICJpbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVk
ZWYgbG9uZyBjbG9ja190OwojIDI1MSAiaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIGlu
dCBjbG9ja2lkX3Q7CgoKCnR5cGVkZWYgaW50IHRpbWVyX3Q7CiMgMjY0ICJpbmNsdWRlL3N5cy90
eXBlcy5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHVzZWNvbmRzX3Q7CgoKCgoKCnR5cGVkZWYg
X19zY3Vuc2lnbmVkX3QgYml0bnVtX3Q7CnR5cGVkZWYgX19zY3Vuc2lnbmVkX3QgYml0bGVuX3Q7
CgoKdHlwZWRlZiBpbnQgcHJvY2Vzc29yaWRfdDsKdHlwZWRlZiBpbnQgdG9pZF90Owp0eXBlZGVm
IGxvbmcgKnFhZGRyX3Q7CnR5cGVkZWYgX191aW50MzJfdCBpbnN0X3Q7CiMgMjg3ICJpbmNsdWRl
L3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX191aW50NjRfdCBtYWNocmVnX3Q7CiMgMjk3ICJpbmNs
dWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX191aW50NjRfdCBmcHJlZ190OwojIDMwOCAiaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIGludDhfdDsKdHlwZWRlZiB1
bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludDE2X3Q7CnR5cGVk
ZWYgdW5zaWduZWQgc2hvcnQgdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBpbnQzMl90Owp0
eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKdHlwZWRlZiBfX2ludDY0X3QgaW50NjRfdDsK
dHlwZWRlZiBfX3VpbnQ2NF90IHVpbnQ2NF90Owp0eXBlZGVmIF9faW50NjRfdCBpbnRtYXhfdDsK
dHlwZWRlZiBfX3VpbnQ2NF90IHVpbnRtYXhfdDsKdHlwZWRlZiBzaWduZWQgbG9uZyBpbnQgaW50
cHRyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWludHB0cl90OwoKCgoKCgp0eXBlZGVm
IHVuc2lnbmVkIGNoYXIgdV9pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9pbnQxNl90
Owp0eXBlZGVmIF9fdWludDMyX3QgdV9pbnQzMl90OwojIDM0OSAiaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMwp0eXBlZGVmIGxvbmcgaG9zdGlkX3Q7CiMgMzY0ICJpbmNsdWRlL3N5cy90eXBlcy5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9ic2RfdHlwZXMuaCIgMSAzCiMgMjEgIi91c3IvaW5jbHVk
ZS9zeXMvYnNkX3R5cGVzLmgiIDMKI2lkZW50ICIkUmV2aXNpb246IDEuMiAkIgoKCgoKCgp0eXBl
ZGVmIHN0cnVjdCB7IGludCByWzFdOyB9ICogcGh5c2FkcjsKdHlwZWRlZiB1bnNpZ25lZCBjaGFy
IHVuY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgdWludDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ7CnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVfbG9uZzsKdHlwZWRlZiBzdHJ1
Y3QgX3F1YWQgeyBsb25nIHZhbFsyXTsgfSBxdWFkOwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiNpZGVu
dCAiJFJldmlzaW9uOiAxLjEwICQiCiMgNTEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMK
dHlwZWRlZiBsb25nIGZkX21hc2tfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVmZF9tYXNrX3Q7
CiMgNjIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKdHlwZWRlZiBzdHJ1Y3QgZmRfc2V0
IHsKICAgICAgICBmZF9tYXNrX3QgZmRzX2JpdHNbKCgoMTAyNCkrKCgoaW50KShzaXplb2YoZmRf
bWFza190KSAqIDgpKS0xKSkvKChpbnQpKHNpemVvZihmZF9tYXNrX3QpICogOCkpKV07Cn0gZmRf
c2V0OwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKCgoKCgojaWRlbnQgIiRS
ZXZpc2lvbjogMS4zNiAkIgojIDU3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIHZv
aWQgKm1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1l
bW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJjcHko
Y2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RybmNweShjaGFyICosIGNvbnN0
IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnN0cmNhdChjaGFyICosIGNvbnN0IGNoYXIg
Kik7CmV4dGVybiBjaGFyICpzdHJuY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpl
eHRlcm4gdm9pZCAqbWVtY2NweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwpl
eHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKZXh0
ZXJuIGludCBzdHJjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0
cmNvbGwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0cm5jbXAoY29u
c3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBzaXplX3Qgc3RyeGZybShj
aGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1lbWNocihjb25zdCB2
b2lkICosIGludCwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICosIGlu
dCk7CmV4dGVybiBzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiNw
cmFnbWEgaW50X3RvX3Vuc2lnbmVkIHN0cmNzcG4KZXh0ZXJuIGNoYXIgKnN0cnBicmsoY29uc3Qg
Y2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RycmNocihjb25zdCBjaGFyICos
IGludCk7CmV4dGVybiBzaXplX3Qgc3Ryc3BuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK
I3ByYWdtYSBpbnRfdG9fdW5zaWduZWQgc3Ryc3BuCmV4dGVybiBjaGFyICpzdHJzdHIoY29uc3Qg
Y2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RydG9rKGNoYXIgKiwgY29uc3Qg
Y2hhciAqKTsKZXh0ZXJuIHZvaWQgKm1lbXNldCh2b2lkICosIGludCwgc2l6ZV90KTsKZXh0ZXJu
IGNoYXIgKnN0cmVycm9yKGludCk7CmV4dGVybiBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7
CiNwcmFnbWEgaW50X3RvX3Vuc2lnbmVkIHN0cmxlbgoKCmV4dGVybiBpbnQgZmZzKGludCk7Cgpl
eHRlcm4gaW50IHN0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4g
aW50IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwoKCgpl
eHRlcm4gY2hhciAqc3RyZHVwKGNvbnN0IGNoYXIgKik7CgoKCmV4dGVybiBjaGFyICpzdHJ0b2tf
cihjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7CiMgNzEgIi91c3IvaW5jbHVkZS9zeXMv
c2VsZWN0LmgiIDIgMwojIDkxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCnR5cGVkZWYg
bG9uZyBmZF9tYXNrOwojIDQ1ICIvdXNyL2luY2x1ZGUvc3lzL2JzZF90eXBlcy5oIiAyIDMKIyAz
NjUgImluY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKCnR5cGVkZWYgX191aW50NjRfdCBrX3Np
Z3NldF90OwojIDExMyAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3N5c3RlbS5oIiAy
CgojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAxIDMKCgoKCgojaWRlbnQgIiRSZXZpc2lvbjog
MS4yNCAkIgojIDM3ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9z
eXMvZXJybm8uaCIgMSAzCiMgMTMgIi91c3IvaW5jbHVkZS9zeXMvZXJybm8uaCIgMwojaWRlbnQg
IiRSZXZpc2lvbjogMy4zNCAkIgojIDM4ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAzCgoKCgpl
eHRlcm4gY2hhciAqIHN5c19lcnJsaXN0W107CmV4dGVybiBpbnQgc3lzX25lcnI7CgpleHRlcm4g
aW50IG9zZXJyb3Iodm9pZCk7CmV4dGVybiBpbnQgc2V0b3NlcnJvcihpbnQpOwpleHRlcm4gaW50
IGdvc2Vycm9yKHZvaWQpOwojIDU5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gaW50
IGVycm5vOwojIDExNSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3N5c3RlbS5oIiAy
CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmdzLmgiIDEgMwojIDkgIi91c3IvaW5jbHVk
ZS9zdHJpbmdzLmgiIDMKI2lkZW50ICIkUmV2aXNpb246IDEuMTEgJCIKIyAyOCAiL3Vzci9pbmNs
dWRlL3N0cmluZ3MuaCIgMwpleHRlcm4gaW50IGJjbXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lk
ICosIHNpemVfdCk7CmV4dGVybiB2b2lkIGJjb3B5KGNvbnN0IHZvaWQgKiwgdm9pZCAqLCBzaXpl
X3QpOwpleHRlcm4gdm9pZCBiemVybyh2b2lkICosIHNpemVfdCk7CmV4dGVybiBjaGFyICppbmRl
eChjb25zdCBjaGFyICosIGludCk7CmV4dGVybiBjaGFyICpyaW5kZXgoY29uc3QgY2hhciAqLCBp
bnQpOwojIDEyMyAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3N5c3RlbS5oIiAyCiMg
MTM0ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2Mvc3lzdGVtLmgiCiMgMSAiaW5jbHVk
ZS9zdGRsaWIuaCIgMSAzCiMgMTUgImluY2x1ZGUvc3RkbGliLmgiIDMKI2lkZW50ICIkUmV2aXNp
b246IDEuNTcgJCIKIyA5OSAiaW5jbHVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIHN0cnVjdCB7CiAg
ICAgICAgIGludCBxdW90OwogICAgICAgICBpbnQgcmVtOwogICAgICAgIH0gZGl2X3Q7Cgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICAgICAgIGxvbmcgcXVvdDsKICAgICAgICAgbG9uZyByZW07CiAgICAg
ICAgfSBsZGl2X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgICBsb25nIGxvbmcgcXVvdDsK
ICAgICAgICAgbG9uZyBsb25nIHJlbTsKICAgICAgICB9IGxsZGl2X3Q7CiMgMTY4ICJpbmNsdWRl
L3N0ZGxpYi5oIiAzCmV4dGVybiB1bnNpZ25lZCBjaGFyIF9fY3R5cGVbXTsKCgoKCmV4dGVybiBk
b3VibGUgYXRvZihjb25zdCBjaGFyICopOwpleHRlcm4gaW50IGF0b2koY29uc3QgY2hhciAqKTsK
ZXh0ZXJuIGxvbmcgaW50IGF0b2woY29uc3QgY2hhciAqKTsKZXh0ZXJuIGRvdWJsZSBzdHJ0b2Qo
Y29uc3QgY2hhciAqLCBjaGFyICoqKTsKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbChjb25zdCBjaGFy
ICosIGNoYXIgKiosIGludCk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsKGNvbnN0
IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0ZXJuIGludCByYW5kKHZvaWQpOwpleHRlcm4gdm9p
ZCBzcmFuZCh1bnNpZ25lZCBpbnQpOwpleHRlcm4gdm9pZCAqY2FsbG9jKHNpemVfdCwgc2l6ZV90
KTsKZXh0ZXJuIHZvaWQgZnJlZSh2b2lkICopOwpleHRlcm4gdm9pZCAqbWFsbG9jKHNpemVfdCk7
CmV4dGVybiB2b2lkICpyZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgYWJvcnQo
dm9pZCk7CmV4dGVybiBpbnQgYXRleGl0KHZvaWQgKCopKHZvaWQpKTsKZXh0ZXJuIHZvaWQgZXhp
dChpbnQpOwpleHRlcm4gY2hhciAqZ2V0ZW52KGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgc3lz
dGVtKGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lkICpic2VhcmNoKGNvbnN0IHZvaWQgKiwgY29u
c3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwKICAgICAgICBpbnQgKCopKGNvbnN0IHZvaWQgKiwg
Y29uc3Qgdm9pZCAqKSk7CmV4dGVybiB2b2lkIHFzb3J0KHZvaWQgKiwgc2l6ZV90LCBzaXplX3Qs
CiAgICAgICAgaW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwoKCgoKCgoKZXh0
ZXJuIGludCBhYnMoaW50KTsKCgpleHRlcm4gZGl2X3QgZGl2KGludCwgaW50KTsKZXh0ZXJuIGxv
bmcgaW50IGxhYnMobG9uZyk7CmV4dGVybiBsZGl2X3QgbGRpdihsb25nLCBsb25nKTsKZXh0ZXJu
IGludCBtYnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBpbnQg
bWJsZW4oY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gaW50IHdjdG9tYihjaGFyICosIHdj
aGFyX3QpOwpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBz
aXplX3QpOwpleHRlcm4gc2l6ZV90IHdjc3RvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBz
aXplX3QpOwoKCgpleHRlcm4gaW50IHB1dGVudihjb25zdCBjaGFyICopOwpleHRlcm4gZG91Ymxl
IGRyYW5kNDgodm9pZCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCh1bnNpZ25lZCBzaG9ydCBbM10p
OwpleHRlcm4gbG9uZyBscmFuZDQ4KHZvaWQpOwpleHRlcm4gbG9uZyBucmFuZDQ4KHVuc2lnbmVk
IHNob3J0IFszXSk7CmV4dGVybiBsb25nIG1yYW5kNDgodm9pZCk7CmV4dGVybiBsb25nIGpyYW5k
NDgodW5zaWduZWQgc2hvcnQgWzNdKTsKZXh0ZXJuIHZvaWQgc3JhbmQ0OChsb25nKTsKZXh0ZXJu
IHZvaWQgbGNvbmc0OCh1bnNpZ25lZCBzaG9ydCBpbnQgWzddKTsKZXh0ZXJuIHZvaWQgc2V0a2V5
KGNvbnN0IGNoYXIgKik7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCAqIHNlZWQ0OCh1bnNpZ25lZCBz
aG9ydCBpbnQgWzNdKTsKCgoKCmV4dGVybiBsb25nIGE2NGwoY29uc3QgY2hhciAqKTsKZXh0ZXJu
IGNoYXIgKmVjdnQoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpmY3Z0
KGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqZ2N2dChkb3VibGUsIGlu
dCwgY2hhciAqKTsKZXh0ZXJuIGludCBnZXRzdWJvcHQoY2hhciAqKiwgY2hhciAqIGNvbnN0ICos
IGNoYXIgKiopOwpleHRlcm4gaW50IGdyYW50cHQoaW50KTsKZXh0ZXJuIGNoYXIgKmluaXRzdGF0
ZSh1bnNpZ25lZCBpbnQsIGNoYXIgKiwgaW50KTsKZXh0ZXJuIGNoYXIgKmw2NGEobG9uZyk7CmV4
dGVybiBjaGFyICpta3RlbXAoY2hhciAqKTsKZXh0ZXJuIGludCBta3N0ZW1wKGNoYXIgKik7CmV4
dGVybiBjaGFyICpwdHNuYW1lKGludCk7CmV4dGVybiBsb25nIHJhbmRvbSh2b2lkKTsKZXh0ZXJu
IGNoYXIgKnJlYWxwYXRoKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKZXh0ZXJuIGludCB0dHlzbG90
KHZvaWQpOwpleHRlcm4gaW50IHVubG9ja3B0KGludCk7CmV4dGVybiB2b2lkICp2YWxsb2Moc2l6
ZV90KTsKCgoKZXh0ZXJuIGludCByYW5kX3IodW5zaWduZWQgaW50ICopOwoKCgoKZXh0ZXJuIGlu
dCBkdXAyKGludCwgaW50KTsKZXh0ZXJuIGNoYXIgKmdldGN3ZChjaGFyICosIHNpemVfdCk7CmV4
dGVybiBjaGFyICpnZXRsb2dpbih2b2lkKTsKCmV4dGVybiBjaGFyICpnZXRwYXNzKGNvbnN0IGNo
YXIgKik7CmV4dGVybiBpbnQgZ2V0cHcoaW50LCBjaGFyICopOwpleHRlcm4gaW50IGlzYXR0eShp
bnQpOwpleHRlcm4gdm9pZCBsM3RvbChsb25nICosIGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJu
IHZvaWQgbHRvbDMoY2hhciAqLCBjb25zdCBsb25nICosIGludCk7CmV4dGVybiB2b2lkICptZW1h
bGlnbihzaXplX3QsIHNpemVfdCk7CmV4dGVybiB2b2lkIHN3YWIoY29uc3Qgdm9pZCAqLCB2b2lk
ICosIHNzaXplX3QpOwpleHRlcm4gY2hhciAqdHR5bmFtZShpbnQpOwoKCgpleHRlcm4gbG9uZyBk
b3VibGUgYXRvbGQoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQoY29u
c3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cik7CmV4dGVybiBjaGFyICpxZWN2dChsb25nIGRv
dWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqcWZjdnQobG9uZyBkb3VibGUs
IGludCwgaW50ICosIGludCAqKTsKZXh0ZXJuIGNoYXIgKnFnY3Z0KGxvbmcgZG91YmxlLCBpbnQs
IGNoYXIgKik7CgpleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbChjb25zdCBjaGFyICopOwpleHRl
cm4gbG9uZyBsb25nIGludCBzdHJ0b2xsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwoY29uc3QgY2hhciAqLCBjaGFyICoq
LCBpbnQpOwpleHRlcm4gbG9uZyBsb25nIGxsYWJzKGxvbmcgbG9uZyk7CmV4dGVybiBsbGRpdl90
IGxsZGl2KGxvbmcgbG9uZywgbG9uZyBsb25nKTsKCgoKZXh0ZXJuIGNoYXIgKmVjdnRfcihkb3Vi
bGUsIGludCwgaW50ICosIGludCAqLCBjaGFyICopOwpleHRlcm4gY2hhciAqZmN2dF9yKGRvdWJs
ZSwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKik7CgpleHRlcm4gY2hhciAqcWVjdnRfcihsb25n
IGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpxZmN2dF9y
KGxvbmcgZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKiwgY2hhciAqKTsKIyAxMzUgIi4uLy4uL2Vn
Y2MtMy4xLUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIgMgojIDE1NyAiLi4vLi4vZWdjYy0zLjEt
Q1ZTMjAwMjA0MTgvZ2NjL3N5c3RlbS5oIgojIDEgImluY2x1ZGUvdW5pc3RkLmgiIDEgMwojIDE1
ICJpbmNsdWRlL3VuaXN0ZC5oIiAzCiNpZGVudCAiJFJldmlzaW9uOiAxLjEwNiAkIgojIDIxMyAi
aW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDEgMwoj
IDIxNCAiaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKCgpleHRlcm4gaW50IGFjY2Vzcyhjb25zdCBj
aGFyICosIGludCk7CmV4dGVybiB1bnNpZ25lZCBhbGFybSh1bnNpZ25lZCk7CmV4dGVybiBpbnQg
Y2hkaXIoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBjaG93bihjb25zdCBjaGFyICosIHVpZF90
LCBnaWRfdCk7CmV4dGVybiBpbnQgY2xvc2UoaW50KTsKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQoY2hh
ciAqKTsKZXh0ZXJuIGNoYXIgKmN1c2VyaWQoY2hhciAqKTsKZXh0ZXJuIGludCBkdXAoaW50KTsK
ZXh0ZXJuIGludCBkdXAyKGludCwgaW50KTsKZXh0ZXJuIGludCBleGVjbChjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludCBleGVjbGUoY29uc3QgY2hhciAqLCBjb25z
dCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQgZXhlY2xwKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh
ciAqLCAuLi4pOwpleHRlcm4gaW50IGV4ZWN2KGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKik7
CmV4dGVybiBpbnQgZXhlY3ZlKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKiwgY2hhciAqY29u
c3QgKik7CmV4dGVybiBpbnQgZXhlY3ZwKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKik7CmV4
dGVybiB2b2lkIF9leGl0KGludCk7CmV4dGVybiBwaWRfdCBmb3JrKHZvaWQpOwpleHRlcm4gbG9u
ZyBmcGF0aGNvbmYoaW50LCBpbnQpOwoKZXh0ZXJuIGNoYXIgKmdldGN3ZChjaGFyICosIHNpemVf
dCk7CmV4dGVybiBnaWRfdCBnZXRlZ2lkKHZvaWQpOwpleHRlcm4gdWlkX3QgZ2V0ZXVpZCh2b2lk
KTsKZXh0ZXJuIGdpZF90IGdldGdpZCh2b2lkKTsKCgoKZXh0ZXJuIGludCBnZXRncm91cHMoaW50
LCBnaWRfdCAqKTsKCmV4dGVybiBjaGFyICpnZXRsb2dpbih2b2lkKTsKCgoKZXh0ZXJuIHBpZF90
IGdldHBncnAodm9pZCk7CgpleHRlcm4gcGlkX3QgZ2V0cGlkKHZvaWQpOwpleHRlcm4gcGlkX3Qg
Z2V0cHBpZCh2b2lkKTsKZXh0ZXJuIHVpZF90IGdldHVpZCh2b2lkKTsKZXh0ZXJuIGludCBpc2F0
dHkoaW50KTsKZXh0ZXJuIGludCBsaW5rKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0
ZXJuIG9mZl90IGxzZWVrKGludCwgb2ZmX3QsIGludCk7CmV4dGVybiBsb25nIHBhdGhjb25mKGNv
bnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJuIGludCBwYXVzZSh2b2lkKTsKZXh0ZXJuIGludCBwaXBl
KGludCAqKTsKZXh0ZXJuIHNzaXplX3QgcmVhZChpbnQsIHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJu
IGludCBybWRpcihjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHNldGdpZChnaWRfdCk7CmV4dGVy
biBpbnQgc2V0cGdpZChwaWRfdCwgcGlkX3QpOwpleHRlcm4gcGlkX3Qgc2V0c2lkKHZvaWQpOwpl
eHRlcm4gaW50IHNldHVpZCh1aWRfdCk7CmV4dGVybiB1bnNpZ25lZCBzbGVlcCh1bnNpZ25lZCk7
CmV4dGVybiBsb25nIHN5c2NvbmYoaW50KTsKZXh0ZXJuIHBpZF90IHRjZ2V0cGdycChpbnQpOwpl
eHRlcm4gaW50IHRjc2V0cGdycChpbnQsIHBpZF90KTsKZXh0ZXJuIGNoYXIgKnR0eW5hbWUoaW50
KTsKZXh0ZXJuIGludCB1bmxpbmsoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHNzaXplX3Qgd3JpdGUo
aW50LCBjb25zdCB2b2lkICosIHNpemVfdCk7CgoKCgoKZXh0ZXJuIGludCBmZGF0YXN5bmMoaW50
KTsKCgoKCgoKZXh0ZXJuIGludCBmc3luYyhpbnQpOwoKCgoKCgpleHRlcm4gaW50IGZ0cnVuY2F0
ZShpbnQsIG9mZl90KTsKCgoKCgoKZXh0ZXJuIGludCBnZXRsb2dpbl9yKGNoYXIgKiwgc2l6ZV90
KTsKZXh0ZXJuIGludCB0dHluYW1lX3IoaW50LCBjaGFyICosIHNpemVfdCk7CgoKCgoKCgpleHRl
cm4gc2l6ZV90IGNvbmZzdHIoaW50LCBjaGFyICosIHNpemVfdCk7CgoKCgoKCmV4dGVybiBpbnQg
Y2hyb290KGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgbmljZShpbnQpOwpleHRlcm4gY2hhciAq
Y3J5cHQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBlbmNyeXB0KGNo
YXIgKiwgaW50KTsKZXh0ZXJuIGNoYXIgKmdldHBhc3MoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZv
aWQgc3dhYihjb25zdCB2b2lkICosIHZvaWQgKiwgc3NpemVfdCk7CgoKCgoKCmV4dGVybiBpbnQg
YnJrKHZvaWQgKik7CmV4dGVybiBpbnQgZmNob3duKGludCwgdWlkX3QsIGdpZF90KTsKZXh0ZXJu
IGludCBmY2hkaXIoaW50KTsKZXh0ZXJuIGludCBnZXRkdGFibGVzaXplKHZvaWQpOwpleHRlcm4g
bG9uZyBnZXRob3N0aWQodm9pZCk7CmV4dGVybiBpbnQgZ2V0cGFnZXNpemUodm9pZCk7CmV4dGVy
biBwaWRfdCBnZXRwZ2lkKHBpZF90KTsKZXh0ZXJuIHBpZF90IGdldHNpZChwaWRfdCk7CmV4dGVy
biBjaGFyICpnZXR3ZChjaGFyICopOwpleHRlcm4gaW50IGxjaG93bihjb25zdCBjaGFyICosIHVp
ZF90LCBnaWRfdCk7CmV4dGVybiBpbnQgbG9ja2YoaW50LCBpbnQsIG9mZl90KTsKZXh0ZXJuIGlu
dCByZWFkbGluayhjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKnNi
cmsoc3NpemVfdCk7CgoKCmV4dGVybiBwaWRfdCBzZXRwZ3JwKHZvaWQpOwoKZXh0ZXJuIGludCBz
ZXRyZWdpZChnaWRfdCwgZ2lkX3QpOwpleHRlcm4gaW50IHNldHJldWlkKHVpZF90LCB1aWRfdCk7
CmV4dGVybiBpbnQgc3ltbGluayhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiB2
b2lkIHN5bmModm9pZCk7CmV4dGVybiBpbnQgdHJ1bmNhdGUoY29uc3QgY2hhciAqLCBvZmZfdCk7
CmV4dGVybiB1c2Vjb25kc190IHVhbGFybSh1c2Vjb25kc190LCB1c2Vjb25kc190KTsKZXh0ZXJu
IGludCB1c2xlZXAodXNlY29uZHNfdCk7CiMgMzYyICJpbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVy
biBpbnQgZmF0dGFjaChpbnQsIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgZmRldGFjaChjb25z
dCBjaGFyICopOwpleHRlcm4gaW50IGlvY3RsKGludCwgaW50LCAuLi4pOwojIDM3NiAiaW5jbHVk
ZS91bmlzdGQuaCIgMwpzdHJ1Y3QgdGltZXZhbDsKZXh0ZXJuIGludCBzZWxlY3QoaW50LCBmZF9z
ZXQgKiwgZmRfc2V0ICosIGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsKCgoKCgoKIyAxICIv
dXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAxIDMKIyAxMiAiL3Vzci9pbmNsdWRlL3N5cy91aW8uaCIg
MwojaWRlbnQgIkAoIyl1dHMtM2IyOmlvL3Vpby5oCTEuMiIKI2lkZW50ICIkUmV2aXNpb246IDEu
OSAkIgojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAzCnR5cGVkZWYgc3RydWN0IGlvdmVj
IHsKICAgICAgICB2b2lkICppb3ZfYmFzZTsKICAgICAgICBzaXplX3QgaW92X2xlbjsKfSBpb3Zl
Y190OwoKCmV4dGVybiBzc2l6ZV90IHJlYWR2KGludCwgY29uc3Qgc3RydWN0IGlvdmVjICosIGlu
dCk7CmV4dGVybiBzc2l6ZV90IHdyaXRldihpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQp
OwojIDM4NSAiaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3V0aW1lLmgi
IDEgMwoKCgoKCiNpZGVudCAiJFJldmlzaW9uOiAxLjkgJCIKIyAzNCAiL3Vzci9pbmNsdWRlL3V0
aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3V0aW1lLmgiIDEgMwojIDE3ICIvdXNyL2lu
Y2x1ZGUvc3lzL3V0aW1lLmgiIDMKc3RydWN0IHV0aW1idWYgewogICAgICAgIHRpbWVfdCBhY3Rp
bWU7CiAgICAgICAgdGltZV90IG1vZHRpbWU7Cn07CiMgMzUgIi91c3IvaW5jbHVkZS91dGltZS5o
IiAyIDMKCmV4dGVybiBpbnQgdXRpbWUoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdXRpbWJ1
ZiAqKTsKIyAzODYgImluY2x1ZGUvdW5pc3RkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9yZV9j
b21wLmgiIDEgMwoKCgoKCiNpZGVudCAiJFJldmlzaW9uOiAxLjEgJCIKIyAyNSAiL3Vzci9pbmNs
dWRlL3JlX2NvbXAuaCIgMwpleHRlcm4gY2hhciAqcmVfY29tcChjb25zdCBjaGFyICopOwpleHRl
cm4gaW50IHJlX2V4ZWMoY29uc3QgY2hhciAqKTsKIyAzODcgImluY2x1ZGUvdW5pc3RkLmgiIDIg
MwpzdHJ1Y3QgYWNjdF9zcGk7CmV4dGVybiBpbnQgYWNjdChjb25zdCBjaGFyICopOwpleHRlcm4g
aW50IEJTRGNob3duKGNvbnN0IGNoYXIgKiwgdWlkX3QsIGdpZF90KTsKZXh0ZXJuIGludCBCU0Rk
dXAyKGludCwgaW50KTsKZXh0ZXJuIGludCBCU0RmY2hvd24oaW50LCB1aWRfdCwgZ2lkX3QpOwpl
eHRlcm4gaW50IEJTRGdldHBncnAoaW50KTsKZXh0ZXJuIGludCBCU0RzZXRwZ3JwKGludCwgaW50
KTsKZXh0ZXJuIGludCBCU0RzZXRncm91cHMoaW50LCBpbnQgKik7CmV4dGVybiBpbnQgQlNEZ2V0
Z3JvdXBzKGludCwgaW50ICopOwoKZXh0ZXJuIHZvaWQgYnNldChjaGFyICosIGJpdG51bV90KTsK
ZXh0ZXJuIHZvaWQgYmNscihjaGFyICosIGJpdG51bV90KTsKZXh0ZXJuIGludCBidHN0KGNoYXIg
KiwgYml0bnVtX3QpOwpleHRlcm4gdm9pZCBiZnNldChjaGFyICosIGJpdG51bV90LCBiaXRsZW5f
dCk7CmV4dGVybiB2b2lkIGJmY2xyKGNoYXIgKiwgYml0bnVtX3QsIGJpdGxlbl90KTsKZXh0ZXJu
IGJpdGxlbl90IGJmdHN0c2V0KGNoYXIgKiwgYml0bnVtX3QsIGJpdGxlbl90KTsKZXh0ZXJuIGJp
dGxlbl90IGJmdHN0Y2xyKGNoYXIgKiwgYml0bnVtX3QsIGJpdGxlbl90KTsKCmV4dGVybiBpbnQg
X2RhZW1vbml6ZShpbnQsIGludCwgaW50LCBpbnQpOwpleHRlcm4gdm9pZCBleGl0KGludCk7CmV4
dGVybiBpbnQgZnRydW5jYXRlNjQoaW50LCBvZmY2NF90KTsKZXh0ZXJuIGFzaF90IGdldGFzaCh2
b2lkKTsKZXh0ZXJuIGludCBnZXRkdGFibGVoaSh2b2lkKTsKZXh0ZXJuIGludCBnZXRkb21haW5u
YW1lKGNoYXIgKiwgaW50KTsKZXh0ZXJuIGludCBnZXRob3N0bmFtZShjaGFyICosIGludCk7CmV4
dGVybiBwcmlkX3QgZ2V0cHJpZCh2b2lkKTsKZXh0ZXJuIGNoYXIgKl9nZXRwdHkoaW50ICosIGlu
dCwgbW9kZV90LCBpbnQpOwpleHRlcm4gaW50IGdldHNwaW5mbyhzdHJ1Y3QgYWNjdF9zcGkgKik7
CmV4dGVybiBjaGFyICpnZXR0eHQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4g
b2ZmNjRfdCBsc2VlazY0KGludCwgb2ZmNjRfdCwgaW50KTsKZXh0ZXJuIGludCBtaW5jb3JlKGNh
ZGRyX3QsIHNpemVfdCwgY2hhciAqKTsKZXh0ZXJuIGludCBtcGluKHZvaWQgKiwgc2l6ZV90KTsK
ZXh0ZXJuIGludCBtdW5waW4odm9pZCAqLCBzaXplX3QpOwpleHRlcm4gaW50IG5ld2FycmF5c2Vz
cyh2b2lkKTsKZXh0ZXJuIHBpZF90IHBjcmVhdGVsKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
LCAuLi4pOwpleHRlcm4gcGlkX3QgcGNyZWF0ZWxwKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
LCAuLi4pOwpleHRlcm4gcGlkX3QgcGNyZWF0ZXYoY29uc3QgY2hhciAqLCBjaGFyICpjb25zdCAq
KTsKZXh0ZXJuIHBpZF90IHBjcmVhdGV2ZShjb25zdCBjaGFyICosIGNoYXIgKmNvbnN0ICosIGNo
YXIgKmNvbnN0ICopOwpleHRlcm4gcGlkX3QgcGNyZWF0ZXZwKGNvbnN0IGNoYXIgKiwgY2hhciAq
Y29uc3QgKik7CmV4dGVybiBzc2l6ZV90IHByZWFkKGludCwgdm9pZCAqLCBzaXplX3QsIG9mZjY0
X3QpOwpleHRlcm4gaW50IHByb2ZpbCh1bnNpZ25lZCBzaG9ydCAqLCBzaXplX3QsIGludCwgdW5z
aWduZWQgaW50KTsKZXh0ZXJuIGludCBwdHJhY2UoaW50LCBwaWRfdCwgaW50LCBpbnQpOwpleHRl
cm4gc3NpemVfdCBwd3JpdGUoaW50LCBjb25zdCB2b2lkICosIHNpemVfdCwgb2ZmNjRfdCk7CmV4
dGVybiBpbnQgcmVuYW1lKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGZsb2F0
IF9zcXJ0X3MoZmxvYXQpOwpleHRlcm4gZG91YmxlIF9zcXJ0X2QoZG91YmxlKTsKZXh0ZXJuIGlu
dCBzZXRhc2goYXNoX3QpOwpleHRlcm4gaW50IHNldHNwaW5mbyhzdHJ1Y3QgYWNjdF9zcGkgKik7
CmV4dGVybiBpbnQgc2V0ZG9tYWlubmFtZShjb25zdCBjaGFyICosIGludCk7CgoKCmV4dGVybiBp
bnQgc2V0Z3JvdXBzKGludCwgY29uc3QgZ2lkX3QgKik7CgpleHRlcm4gaW50IHNldGhvc3RpZChp
bnQpOwpleHRlcm4gaW50IHNldGhvc3RuYW1lKGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJuIGlu
dCBzZXRldWlkKHVpZF90KTsKZXh0ZXJuIGludCBzZXRydWlkKHVpZF90KTsKZXh0ZXJuIGludCBz
ZXRlZ2lkKGdpZF90KTsKZXh0ZXJuIGludCBzZXRyZ2lkKGdpZF90KTsKZXh0ZXJuIGludCBzZXRw
cmlkKHByaWRfdCk7CmV4dGVybiBpbnQgc2dpa29wdChjb25zdCBjaGFyICosIGNoYXIgKiwgaW50
KTsKZXh0ZXJuIGxvbmcgc2dpbmFwKGxvbmcpOwpleHRlcm4gaW50IHN0aW1lKGNvbnN0IHRpbWVf
dCAqKTsKZXh0ZXJuIG9mZl90IHRlbGwoaW50KTsKZXh0ZXJuIG9mZjY0X3QgdGVsbDY0KGludCk7
CmV4dGVybiBpbnQgdHJ1bmNhdGU2NChjb25zdCBjaGFyICosIG9mZjY0X3QpOwpleHRlcm4gaW50
IHZoYW5ndXAodm9pZCk7CiMgMTU4ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2Mvc3lz
dGVtLmgiIDIKCgoKIyAxICJpbmNsdWRlL3N5cy9wYXJhbS5oIiAxIDMKIyA0NyAiaW5jbHVkZS9z
eXMvcGFyYW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDEgMwojIDE2ICIv
dXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzCiNpZGVudCAiJFJldmlzaW9uOiAzLjEzMCAkIgoj
IDEyMCAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMwp0eXBlZGVmIHZvaWQgKCpTSUdfUEYp
ICgpOwojIDEzOSAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMwp0eXBlZGVmIHVuaW9uIHNp
Z3ZhbCB7CiAgICAgICAgaW50IHNpdmFsX2ludDsKICAgICAgICB2b2lkICpzaXZhbF9wdHI7Cn0g
c2lndmFsX3Q7CiMgMTUyICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzCnR5cGVkZWYgdW5p
b24gbm90aWZ5aW5mbyB7CiAgICAgICAgaW50IG5pc2lnbm87CiAgICAgICAgdm9pZCAoKm5pZnVu
YykgKHNpZ3ZhbF90KTsKfSBub3RpZnlpbmZvX3Q7Cgp0eXBlZGVmIHN0cnVjdCBzaWdldmVudCB7
CiAgICAgICAgaW50IHNpZ2V2X25vdGlmeTsKICAgICAgICBub3RpZnlpbmZvX3Qgc2lnZXZfbm90
aWZ5aW5mbzsKICAgICAgICBzaWd2YWxfdCBzaWdldl92YWx1ZTsKICAgICAgICB1bnNpZ25lZCBs
b25nIHNpZ2V2X3Jlc2VydmVkWzEzXTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNpZ2V2X3BhZFs2
XTsKfSBzaWdldmVudF90OwojIDE4MCAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAxIDMKIyAxMyAiL3Vzci9pbmNsdWRlL3N5cy9z
aWdpbmZvLmgiIDMKI2lkZW50ICIkUmV2aXNpb246IDEuMjAgJCIKCgoKCgojIDEgIi91c3IvaW5j
bHVkZS9zeXMvc2lnbmFsLmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIg
MiAzCiMgMTgxICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAyIDMKIyAxODkgIi91c3IvaW5j
bHVkZS9zeXMvc2lnbmFsLmgiIDMKdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7CiAgICAgICAgaW50
IHNpX3NpZ25vOwogICAgICAgIGludCBzaV9jb2RlOwogICAgICAgIGludCBzaV9lcnJubzsKICAg
ICAgICB1bmlvbiB7CgogICAgICAgICAgICAgICAgaW50IHNpX3BhZFsoKDEyOCAvIHNpemVvZihf
X2ludDMyX3QpKSAtIDMpXTsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg
ICAgICAgICAgICBwaWRfdCBfX3BpZDsKICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBfX3VpZDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IF9fa2lsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tfdCBfX3V0
aW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fc3RhdHVz
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tfdCBfX3N0aW1l
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gX19jbGQ7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0gX19wZGF0YTsKICAgICAgICAgICAgICAgIH0gX19wcm9jOwoKICAgICAgICAg
ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYWRkcjsKICAg
ICAgICAgICAgICAgIH0gX19mYXVsdDsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewoKICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IF9fZmQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcg
X19iYW5kOwogICAgICAgICAgICAgICAgfSBfX2ZpbGU7CgogICAgICAgICAgICAgICAgdW5pb24g
c2lndmFsIF9fdmFsdWU7CgoKCiAgICAgICAgfSBfX2RhdGE7Cgp9IHNpZ2luZm9fdDsKIyAyNTIg
Ii91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIF9f
dWludDMyX3QgX19zaWdiaXRzWzRdOwp9IHNpZ3NldF90OwoKCnR5cGVkZWYgdW5pb24gX19zaWdo
YW5kbGVyIHsKICAgICAgICB2b2lkICgqX19zYV9oYW5kbGVyKSgpOwoKICAgICAgICB2b2lkICgq
X19zYV9zaWdhY3Rpb24pKGludCwgc2lnaW5mb190ICosIHZvaWQgKik7Cgp9IF9fc2lnaGFuZGxl
cl90OwoKdHlwZWRlZiBzdHJ1Y3Qgc2lnYWN0aW9uIHsKICAgICAgICBpbnQgc2FfZmxhZ3M7CiAg
ICAgICAgX19zaWdoYW5kbGVyX3Qgc2Ffc2lnaGFuZGxlcjsKICAgICAgICBzaWdzZXRfdCBzYV9t
YXNrOwoKICAgICAgICBpbnQgc2FfcmVzdlsyXTsKfSBzaWdhY3Rpb25fdDsKIyAzMTggIi91c3Iv
aW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMKc3RydWN0IHNpZ3N0YWNrIHsKICAgICAgICBjaGFyICpz
c19zcDsKICAgICAgICBpbnQgc3Nfb25zdGFjazsKfTsKCgoKCgp0eXBlZGVmIHN0cnVjdCBzaWdh
bHRzdGFjayB7CiAgICAgICAgY2hhciAqc3Nfc3A7CiAgICAgICAgaW50IHNzX3NpemU7CiAgICAg
ICAgaW50IHNzX2ZsYWdzOwp9IHN0YWNrX3Q7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Vj
b250ZXh0LmgiIDEgMwojIDE3ICIvdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0LmgiIDMKI2lkZW50
ICIkUmV2aXNpb246IDEuMjMgJCIKIyA4MyAiL3Vzci9pbmNsdWRlL3N5cy91Y29udGV4dC5oIiAz
CnR5cGVkZWYgbWFjaHJlZ190IGdyZWdfdDsKCnR5cGVkZWYgZ3JlZ190IGdyZWdzZXRfdFszN107
Cgp0eXBlZGVmIHN0cnVjdCBmcHJlZ3NldCB7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAg
ICAgZG91YmxlIGZwX2RyZWdzWzMyXTsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAg
ICAgICAgICAgICAgICAgICBfX3VpbnQzMl90IF9mcF9maWxsOwogICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBfZnBfZnJlZ3M7CiAgICAgICAgICAgICAgICB9IGZwX2ZyZWdzWzMyXTsKCgoK
CgoKICAgICAgICAgICAgICAgIG1hY2hyZWdfdCBmcF9yZWdzWzMyXTsKICAgICAgICB9IGZwX3I7
CgoKCiAgICAgICAgX191aW50MzJfdCBmcF9jc3I7CgogICAgICAgIF9fdWludDMyX3QgZnBfcGFk
Owp9IGZwcmVnc2V0X3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgZ3JlZ3NldF90IGdyZWdz
OwogICAgICAgIGZwcmVnc2V0X3QgZnByZWdzOwp9IG1jb250ZXh0X3Q7Cgp0eXBlZGVmIHN0cnVj
dCB1Y29udGV4dCB7CiAgICAgICAgdW5zaWduZWQgbG9uZyB1Y19mbGFnczsKICAgICAgICBzdHJ1
Y3QgdWNvbnRleHQgKnVjX2xpbms7CiAgICAgICAgc2lnc2V0X3QgdWNfc2lnbWFzazsKICAgICAg
ICBzdGFja190IHVjX3N0YWNrOwogICAgICAgIG1jb250ZXh0X3QgdWNfbWNvbnRleHQ7CiAgICAg
ICAgX19pbnQ2NF90IHVjX3BhbmNha2VbNV07CiAgICAgICAgbG9uZyB1Y19maWxsZXJbNDRdOwp9
IHVjb250ZXh0X3Q7CiMgMzM4ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAyIDMKIyAzOTQg
Ii91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMKZXh0ZXJuIHZvaWQgKCpic2Rfc2lnbmFsKGlu
dCwgdm9pZCAoKikoaW50KSkpKGludCk7CmV4dGVybiBpbnQga2lsbHBnKHBpZF90LCBpbnQpOwpl
eHRlcm4gaW50IHNpZ3N0YWNrKHN0cnVjdCBzaWdzdGFjayAqLCBzdHJ1Y3Qgc2lnc3RhY2sgKik7
CgoKCgoKZXh0ZXJuIHZvaWQgKCpzaWduYWwoaW50LHZvaWQgKCopKCkpKSgpOwojIDQyNiAiL3Vz
ci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMwp0eXBlZGVmIHN0cnVjdCBzaWdjb250ZXh0IHsKICAg
ICAgICBfX3VpbnQzMl90IHNjX3JlZ21hc2s7CiAgICAgICAgX191aW50MzJfdCBzY19zdGF0dXM7
CiAgICAgICAgX191aW50NjRfdCBzY19wYzsKCgoKICAgICAgICBfX3VpbnQ2NF90IHNjX3JlZ3Nb
MzJdOwoKCgogICAgICAgIF9fdWludDY0X3Qgc2NfZnByZWdzWzMyXTsKICAgICAgICBfX3VpbnQz
Ml90IHNjX293bmVkZnA7CiAgICAgICAgX191aW50MzJfdCBzY19mcGNfY3NyOwogICAgICAgIF9f
dWludDMyX3Qgc2NfZnBjX2VpcjsKCiAgICAgICAgX191aW50MzJfdCBzY19zc2ZsYWdzOwogICAg
ICAgIF9fdWludDY0X3Qgc2NfbWRoaTsKICAgICAgICBfX3VpbnQ2NF90IHNjX21kbG87CgoKCiAg
ICAgICAgX191aW50NjRfdCBzY19jYXVzZTsKICAgICAgICBfX3VpbnQ2NF90IHNjX2JhZHZhZGRy
OwogICAgICAgIF9fdWludDY0X3Qgc2NfdHJpZ2dlcnNhdmU7CiAgICAgICAgc2lnc2V0X3Qgc2Nf
c2lnc2V0OwogICAgICAgIF9fdWludDY0X3Qgc2NfZnBfcm91bmRlZF9yZXN1bHQ7CiAgICAgICAg
X191aW50NjRfdCBzY19wYW5jYWtlWzVdOwogICAgICAgIF9fdWludDY0X3Qgc2NfcGFkWzI2XTsK
fSBzaWdjb250ZXh0X3Q7CiMgNDggImluY2x1ZGUvc3lzL3BhcmFtLmgiIDIgMwojIDIzMyAiaW5j
bHVkZS9zeXMvcGFyYW0uaCIgMwpzdHJ1Y3QgcGFyYW1jb25zdCB7CiAgICAgICAgaW50IHBfdXNp
emU7CiAgICAgICAgaW50IHBfZXh0dXNpemU7Cn07CiMgMTYyICIuLi8uLi9lZ2NjLTMuMS1DVlMy
MDAyMDQxOC9nY2Mvc3lzdGVtLmgiIDIKCgoKCgojIDEgImluY2x1ZGUvbGltaXRzLmgiIDEgMwoj
IDExICJpbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzCiMg
MzYgImluY2x1ZGUvc3lzbGltaXRzLmgiIDMKI2lkZW50ICIkUmV2aXNpb246IDcuMzYgJCIKIyAz
MjAgImluY2x1ZGUvc3lzbGltaXRzLmgiIDMKdHlwZWRlZiB1bmlvbiBfaF92YWwgewoKICAgICAg
ICB1bnNpZ25lZCBsb25nIGlbMl07CgoKCgogICAgICAgIGRvdWJsZSBkOwp9IF9oX3ZhbDsKCmV4
dGVybiBfX2NvbnN0IF9oX3ZhbCBfX2h1Z2VfdmFsOwojIDEyICJpbmNsdWRlL2xpbWl0cy5oIiAy
IDMKIyAxNjggIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIgMgoKCgoj
IDEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9od2ludC5oIiAxCiMgMTcyICIuLi8u
Li9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2Mvc3lzdGVtLmgiIDIKIyAyMDAgIi4uLy4uL2VnY2Mt
My4xLUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUu
aCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCiNpZGVudCAiJFJldmlzaW9u
OiAzLjQ0ICQiCiMgNjkgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCnN0cnVjdCB0aW1ldmFs
IHsKCgoKICAgICAgICB0aW1lX3QgdHZfc2VjOwogICAgICAgIGxvbmcgdHZfdXNlYzsKfTsKCgoK
CgoKc3RydWN0IF9faXJpeDVfdGltZXZhbCB7CiAgICAgICAgX19pbnQzMl90IHR2X3NlYzsKICAg
ICAgICBfX2ludDMyX3QgdHZfdXNlYzsKfTsKIyA5NiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgi
IDMKc3RydWN0IGl0aW1lcnZhbCB7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgaXRfaW50ZXJ2YWw7
CiAgICAgICAgc3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7Cn07CiMgMTE4ICIvdXNyL2luY2x1ZGUv
c3lzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXpvbmUgewogICAgICAgIGludCB0el9taW51dGVzd2Vz
dDsKICAgICAgICBpbnQgdHpfZHN0dGltZTsKfTsKIyAxNDggIi91c3IvaW5jbHVkZS9zeXMvdGlt
ZS5oIiAzCnR5cGVkZWYgc3RydWN0IHRpbWVzdHJ1YyB7CiAgICAgICAgdGltZV90IHR2X3NlYzsK
ICAgICAgICBsb25nIHR2X25zZWM7Cn0gdGltZXN0cnVjX3Q7CgoKCgoKCgpleHRlcm4gaW50IGdl
dGl0aW1lcihpbnQsIHN0cnVjdCBpdGltZXJ2YWwgKik7CmV4dGVybiBpbnQgc2V0aXRpbWVyKGlu
dCwgc3RydWN0IGl0aW1lcnZhbCAqLCBzdHJ1Y3QgaXRpbWVydmFsICopOwpleHRlcm4gaW50IHV0
aW1lcyhjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB0aW1ldmFsIFsyXSk7CgoKCgpleHRlcm4g
aW50IHNlbGVjdChpbnQsIGZkX3NldCAqLCBmZF9zZXQgKiwgZmRfc2V0ICosIHN0cnVjdCB0aW1l
dmFsICopOwoKCgoKCmV4dGVybiBpbnQgYWRqdGltZShzdHJ1Y3QgdGltZXZhbCAqLCBzdHJ1Y3Qg
dGltZXZhbCAqKTsKZXh0ZXJuIGludCBCU0RnZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKiwg
c3RydWN0IHRpbWV6b25lICopOwpleHRlcm4gaW50IEJTRHNldHRpbWVvZmRheShzdHJ1Y3QgdGlt
ZXZhbCAqLCBzdHJ1Y3QgdGltZXpvbmUgKik7CmV4dGVybiBpbnQgZ2V0dGltZW9mZGF5KHN0cnVj
dCB0aW1ldmFsICosLi4uKTsKZXh0ZXJuIGludCBzZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwg
KiwuLi4pOwojIDIwMCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAxIDMKCgoKCgojaWRlbnQgIiRSZXZpc2lvbjogMS40NCAkIgojIDc2ICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9wdGltZXJzLmgiIDEgMwoj
IDExICIvdXNyL2luY2x1ZGUvc3lzL3B0aW1lcnMuaCIgMwp0eXBlZGVmIHN0cnVjdCB0aW1lc3Bl
YyB7CiAgICAgICAgdGltZV90IHR2X3NlYzsKICAgICAgICBsb25nIHR2X25zZWM7Cn0gdGltZXNw
ZWNfdDsKCgp0eXBlZGVmIHN0cnVjdCBpdGltZXJzcGVjIHsKICAgICAgICBzdHJ1Y3QgdGltZXNw
ZWMgaXRfaW50ZXJ2YWw7CiAgICAgICAgc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOwp9IGl0aW1l
cnNwZWNfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBwdGltZXJfaW5mbyB7CiAgICAgICAgX19pbnQ2
NF90IG5leHRfdGltZW91dDsKICAgICAgICBfX2ludDY0X3QgaW50ZXJ2YWxfdGljazsKICAgICAg
ICBpbnQgc2lnbm87CiAgICAgICAgdW5pb24gc2lndmFsIHZhbHVlOwogICAgICAgIGludCBjbG9j
a190eXBlOwogICAgICAgIHRvaWRfdCBuZXh0X3RvaWQ7CiAgICAgICAgaW50IG92ZXJydW5fY250
Owp9IHB0aW1lcl9pbmZvX3Q7CiMgNzcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDEwNyAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdG0gewogICAgICAgIGludCB0bV9zZWM7CiAg
ICAgICAgaW50IHRtX21pbjsKICAgICAgICBpbnQgdG1faG91cjsKICAgICAgICBpbnQgdG1fbWRh
eTsKICAgICAgICBpbnQgdG1fbW9uOwogICAgICAgIGludCB0bV95ZWFyOwogICAgICAgIGludCB0
bV93ZGF5OwogICAgICAgIGludCB0bV95ZGF5OwogICAgICAgIGludCB0bV9pc2RzdDsKfTsKCgoK
CmV4dGVybiBjbG9ja190IGNsb2NrKHZvaWQpOwpleHRlcm4gZG91YmxlIGRpZmZ0aW1lKHRpbWVf
dCwgdGltZV90KTsKZXh0ZXJuIHRpbWVfdCBta3RpbWUoc3RydWN0IHRtICopOwpleHRlcm4gdGlt
ZV90IHRpbWUodGltZV90ICopOwpleHRlcm4gY2hhciAqYXNjdGltZShjb25zdCBzdHJ1Y3QgdG0g
Kik7CmV4dGVybiBjaGFyICpjdGltZSAoY29uc3QgdGltZV90ICopOwpleHRlcm4gc3RydWN0IHRt
ICpnbXRpbWUoY29uc3QgdGltZV90ICopOwpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUoY29u
c3QgdGltZV90ICopOwpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lKGNoYXIgKiwgc2l6ZV90LCBjb25z
dCBjaGFyICosIGNvbnN0IHN0cnVjdCB0bSAqKTsKCgoKCgpleHRlcm4gdm9pZCB0enNldCh2b2lk
KTsKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKIyAxNDkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK
c3RydWN0IHNpZ2V2ZW50OwpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUoY2xvY2tpZF90LCBjb25z
dCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZShjbG9ja2lkX3Qs
IHN0cnVjdCB0aW1lc3BlYyAqKTsKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMoY2xvY2tpZF90LCBz
dHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgbmFub3NsZWVwKGNvbnN0IHN0cnVjdCB0aW1l
c3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgdGltZXJfY3JlYXRlKGNsb2Nr
aWRfdCwgc3RydWN0IHNpZ2V2ZW50ICosIHRpbWVyX3QgKik7CmV4dGVybiBpbnQgdGltZXJfZGVs
ZXRlKHRpbWVyX3QpOwpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUodGltZXJfdCwgaW50LCBjb25z
dCBzdHJ1Y3QgaXRpbWVyc3BlYyAqLCBzdHJ1Y3QgaXRpbWVyc3BlYyAqKTsKZXh0ZXJuIGludCB0
aW1lcl9nZXR0aW1lKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjICopOwpleHRlcm4gaW50IHRp
bWVyX2dldG92ZXJydW4odGltZXJfdCk7CgoKCgoKCmV4dGVybiB0aW1lX3QgdGltZXpvbmU7CmV4
dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBjaGFyICpzdHJwdGltZShjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKiwgc3RydWN0IHRtICopOwoKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRl
KGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCmV4dGVybiBpbnQgY2Z0
aW1lKGNoYXIgKiwgY2hhciAqLCBjb25zdCB0aW1lX3QgKik7CmV4dGVybiBpbnQgYXNjZnRpbWUo
Y2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB0bSAqKTsKZXh0ZXJuIHRpbWVfdCBh
bHR6b25lOwoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9yKGNvbnN0IHN0cnVjdCB0bSAqLCBj
aGFyICopOwpleHRlcm4gY2hhciAqY3RpbWVfcihjb25zdCB0aW1lX3QgKiwgY2hhciAqKTsKZXh0
ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IoY29uc3QgdGltZV90ICosIHN0cnVjdCB0bSAqKTsKZXh0
ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IoY29uc3QgdGltZV90ICosIHN0cnVjdCB0bSAqKTsK
IyAyMDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKIyAyMDEgIi4uLy4uL2VnY2MtMy4x
LUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIgMgojIDIxMyAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAw
MjA0MTgvZ2NjL3N5c3RlbS5oIgojIDEgIi91c3IvaW5jbHVkZS9mY250bC5oIiAxIDMKCgoKCgoj
aWRlbnQgIiRSZXZpc2lvbjogMS4yMCAkIgojIDMzICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9zeXMvZmNudGwuaCIgMSAzCiMgMTMgIi91c3IvaW5jbHVkZS9zeXMv
ZmNudGwuaCIgMwojaWRlbnQgIiRSZXZpc2lvbjogMy41NSAkIgojIDEzMSAiL3Vzci9pbmNsdWRl
L3N5cy9mY250bC5oIiAzCnR5cGVkZWYgc3RydWN0IGZsb2NrIHsKICAgICAgICBzaG9ydCBsX3R5
cGU7CiAgICAgICAgc2hvcnQgbF93aGVuY2U7CiAgICAgICAgb2ZmX3QgbF9zdGFydDsKICAgICAg
ICBvZmZfdCBsX2xlbjsKICAgICAgICBsb25nIGxfc3lzaWQ7CiAgICAgICAgcGlkX3QgbF9waWQ7
CiAgICAgICAgbG9uZyBsX3BhZFs0XTsKfSBmbG9ja190OwoKCgoKCnR5cGVkZWYgc3RydWN0IGZs
b2NrNjQgewogICAgICAgIHNob3J0IGxfdHlwZTsKICAgICAgICBzaG9ydCBsX3doZW5jZTsKICAg
ICAgICBvZmY2NF90IGxfc3RhcnQ7CiAgICAgICAgb2ZmNjRfdCBsX2xlbjsKICAgICAgICBsb25n
IGxfc3lzaWQ7CiAgICAgICAgcGlkX3QgbF9waWQ7CiAgICAgICAgbG9uZyBsX3BhZFs0XTsKfSBm
bG9jazY0X3Q7CiMgMTk2ICIvdXNyL2luY2x1ZGUvc3lzL2ZjbnRsLmgiIDMKc3RydWN0IGRpb2F0
dHIgewogICAgICAgIHVuc2lnbmVkIGRfbWVtOwogICAgICAgIHVuc2lnbmVkIGRfbWluaW9zejsK
ICAgICAgICB1bnNpZ25lZCBkX21heGlvc3o7Cn07CgoKCgpzdHJ1Y3QgZnN4YXR0ciB7CiAgICAg
ICAgX191aW50MzJfdCBmc3hfeGZsYWdzOwogICAgICAgIF9fdWludDMyX3QgZnN4X2V4dHNpemU7
CiAgICAgICAgX191aW50MzJfdCBmc3hfbmV4dGVudHM7CiAgICAgICAgY2hhciBmc3hfcGFkWzE2
XTsKfTsKIyAyMTkgIi91c3IvaW5jbHVkZS9zeXMvZmNudGwuaCIgMwpzdHJ1Y3QgZ2V0Ym1hcCB7
CiAgICAgICAgX19pbnQ2NF90IGJtdl9vZmZzZXQ7CiAgICAgICAgX19pbnQ2NF90IGJtdl9ibG9j
azsKICAgICAgICBfX2ludDY0X3QgYm12X2xlbmd0aDsKICAgICAgICBfX2ludDMyX3QgYm12X2Nv
dW50OwogICAgICAgIF9faW50MzJfdCBibXZfZW50cmllczsKfTsKIyAyMzUgIi91c3IvaW5jbHVk
ZS9zeXMvZmNudGwuaCIgMwpzdHJ1Y3QgZ2V0Ym1hcHggewogICAgICAgIF9faW50NjRfdCBibXZf
b2Zmc2V0OwogICAgICAgIF9faW50NjRfdCBibXZfYmxvY2s7CiAgICAgICAgX19pbnQ2NF90IGJt
dl9sZW5ndGg7CiAgICAgICAgX19pbnQzMl90IGJtdl9jb3VudDsKICAgICAgICBfX2ludDMyX3Qg
Ym12X2VudHJpZXM7CiAgICAgICAgX19pbnQzMl90IGJtdl9pZmxhZ3M7CiAgICAgICAgX19pbnQz
Ml90IGJtdl9vZmxhZ3M7CiAgICAgICAgX19pbnQzMl90IGJtdl91bnVzZWQxOwogICAgICAgIF9f
aW50MzJfdCBibXZfdW51c2VkMjsKfTsKIyAyODEgIi91c3IvaW5jbHVkZS9zeXMvZmNudGwuaCIg
MwpzdHJ1Y3QgZnNkbWlkYXRhIHsKICAgICAgICBfX2ludDMyX3QgZnNkX2RtZXZtYXNrOwogICAg
ICAgIHVuc2lnbmVkIHNob3J0IGZzZF9wYWRkaW5nOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGZz
ZF9kbXN0YXRlOwp9OwojIDM0ICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMiAzCiMgNTggIi91c3Iv
aW5jbHVkZS9mY250bC5oIiAzCmV4dGVybiBpbnQgZmNudGwoaW50LCBpbnQsIC4uLik7CmV4dGVy
biBpbnQgb3Blbihjb25zdCBjaGFyICosIGludCwgLi4uKTsKZXh0ZXJuIGludCBjcmVhdChjb25z
dCBjaGFyICosIG1vZGVfdCk7CgoKZXh0ZXJuIGludCBvcGVuNjQoY29uc3QgY2hhciAqLCBpbnQs
IC4uLik7CmV4dGVybiBpbnQgY3JlYXQ2NChjb25zdCBjaGFyICosIG1vZGVfdCk7CiMgMjE0ICIu
Li8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2Mvc3lzdGVtLmgiIDIKIyAyNTEgIi4uLy4uL2Vn
Y2MtMy4xLUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3dh
aXQuaCIgMSAzCiMgMjEgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzCiNpZGVudCAiJFJldmlz
aW9uOiAxLjQ1ICQiCiMgNDcgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzCnR5cGVkZWYgdW5p
b24gd2FpdCB7CiAgICAgICAgaW50IHdfc3RhdHVzOwoKCgogICAgICAgIHN0cnVjdCB7CgoKCgoK
CgogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdfRmlsbGVyOjE2LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdfUmV0Y29kZTo4LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdfQ29yZWR1bXA6MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3X1Rl
cm1zaWc6NzsKCiAgICAgICAgfSB3X1Q7CgoKCgoKICAgICAgICBzdHJ1Y3QgewoKCgoKCgogICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHdfRmlsbGVyOjE2LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdfU3RvcHNpZzo4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdfU3RvcHZhbDo4OwoKICAgICAgICB9IHdfUzsKfSB3YWl0X3Q7CiMgMTQ5ICIvdXNyL2luY2x1
ZGUvc3lzL3dhaXQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAxIDMKIyAx
MSAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMKI2lkZW50ICIkUmV2aXNpb246IDEuNiAk
IgojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMwp0eXBlZGVmIGVudW0gaWR0eXBl
IHsKICAgICAgICBQX1BJRCwKICAgICAgICBQX1BQSUQsCiAgICAgICAgUF9QR0lELAoKICAgICAg
ICBQX1NJRCwKICAgICAgICBQX0NJRCwKICAgICAgICBQX1VJRCwKICAgICAgICBQX0dJRCwKICAg
ICAgICBQX0FMTAp9IGlkdHlwZV90OwoKCgoKCgoKdHlwZWRlZiBlbnVtIGlkb3AgewogICAgICAg
IFBPUF9ESUZGLAoKCiAgICAgICAgUE9QX0FORCwKCgogICAgICAgIFBPUF9PUiwKCgogICAgICAg
IFBPUF9YT1IKCgp9IGlkb3BfdDsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHByb2NzZXQgewogICAg
ICAgIGlkb3BfdCBwX29wOwoKCgoKICAgICAgICBpZHR5cGVfdCBwX2xpZHR5cGU7CgoKICAgICAg
ICBpZF90IHBfbGlkOwoKICAgICAgICBpZHR5cGVfdCBwX3JpZHR5cGU7CgoKICAgICAgICBpZF90
IHBfcmlkOwp9IHByb2NzZXRfdDsKIyAxNTAgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAyIDMK
CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMSAzCiMgNjAgIi91c3IvaW5jbHVk
ZS9zeXMvcmVzb3VyY2UuaCIgMwpzdHJ1Y3QgcnVzYWdlIHsKICAgICAgICBzdHJ1Y3QgdGltZXZh
bCBydV91dGltZTsKICAgICAgICBzdHJ1Y3QgdGltZXZhbCBydV9zdGltZTsKICAgICAgICBsb25n
IHJ1X21heHJzczsKCiAgICAgICAgbG9uZyBydV9peHJzczsKICAgICAgICBsb25nIHJ1X2lkcnNz
OwogICAgICAgIGxvbmcgcnVfaXNyc3M7CiAgICAgICAgbG9uZyBydV9taW5mbHQ7CiAgICAgICAg
bG9uZyBydV9tYWpmbHQ7CiAgICAgICAgbG9uZyBydV9uc3dhcDsKICAgICAgICBsb25nIHJ1X2lu
YmxvY2s7CiAgICAgICAgbG9uZyBydV9vdWJsb2NrOwogICAgICAgIGxvbmcgcnVfbXNnc25kOwog
ICAgICAgIGxvbmcgcnVfbXNncmN2OwogICAgICAgIGxvbmcgcnVfbnNpZ25hbHM7CiAgICAgICAg
bG9uZyBydV9udmNzdzsKICAgICAgICBsb25nIHJ1X25pdmNzdzsKCn07CiMgMTEyICIvdXNyL2lu
Y2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMKdHlwZWRlZiBfX3VpbnQ2NF90IHJsaW1fdDsKCgoKCnN0
cnVjdCBybGltaXQgewogICAgICAgIHJsaW1fdCBybGltX2N1cjsKICAgICAgICBybGltX3Qgcmxp
bV9tYXg7Cn07CgoKdHlwZWRlZiBfX3VpbnQ2NF90IHJsaW02NF90OwoKc3RydWN0IHJsaW1pdDY0
IHsKICAgICAgICBybGltNjRfdCBybGltX2N1cjsKICAgICAgICBybGltNjRfdCBybGltX21heDsK
fTsKIyAxNTEgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMwpleHRlcm4gaW50IGdldHJs
aW1pdChpbnQsIHN0cnVjdCBybGltaXQgKik7CmV4dGVybiBpbnQgc2V0cmxpbWl0KGludCwgY29u
c3Qgc3RydWN0IHJsaW1pdCAqKTsKZXh0ZXJuIGludCBnZXRwcmlvcml0eShpbnQsIGlkX3QpOwpl
eHRlcm4gaW50IHNldHByaW9yaXR5KGludCwgaWRfdCwgaW50KTsKZXh0ZXJuIGludCBnZXRydXNh
Z2UoaW50LCBzdHJ1Y3QgcnVzYWdlICopOwoKCmV4dGVybiBpbnQgZ2V0cmxpbWl0NjQoaW50LCBz
dHJ1Y3QgcmxpbWl0NjQgKik7CmV4dGVybiBpbnQgc2V0cmxpbWl0NjQoaW50LCBjb25zdCBzdHJ1
Y3QgcmxpbWl0NjQgKik7CiMgMTUzICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzCiMgMTYx
ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMwpleHRlcm4gcGlkX3Qgd2FpdHBpZChwaWRfdCwg
aW50ICosIGludCk7CgoKCgoKZXh0ZXJuIHBpZF90IHdhaXQoaW50ICopOwoKCgoKCgpleHRlcm4g
cGlkX3Qgd2FpdDMoaW50ICosIGludCwgc3RydWN0IHJ1c2FnZSAqKTsKCgoKCgpleHRlcm4gaW50
IHdhaXRpZChpZHR5cGVfdCwgaWRfdCwgc2lnaW5mb190ICosIGludCk7CiMgMjUyICIuLi8uLi9l
Z2NjLTMuMS1DVlMyMDAyMDQxOC9nY2Mvc3lzdGVtLmgiIDIKIyAyOTYgIi4uLy4uL2VnY2MtMy4x
LUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIKZXh0ZXJuIGludCBnZXRvcHQgKGludCwgY2hhciAq
IGNvbnN0ICosIGNvbnN0IGNoYXIgKik7CiMgMzEyICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQx
OC9nY2Mvc3lzdGVtLmgiCiMgMSAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIiAxIDMKIyAyNSAiL3Vz
ci9pbmNsdWRlL21hbGxvYy5oIiAzCiNpZGVudCAiJFJldmlzaW9uOiAxLjQxICQiCiMgNjEgIi91
c3IvaW5jbHVkZS9tYWxsb2MuaCIgMwojIDEgImluY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDYyICIv
dXNyL2luY2x1ZGUvbWFsbG9jLmgiIDIgMwoKCnN0cnVjdCBtYWxsaW5mbyB7CiAgICAgICAgX19z
Y2ludF90IGFyZW5hOwogICAgICAgIF9fc2NpbnRfdCBvcmRibGtzOwogICAgICAgIF9fc2NpbnRf
dCBzbWJsa3M7CiAgICAgICAgX19zY2ludF90IGhibGtzOwogICAgICAgIF9fc2NpbnRfdCBoYmxr
aGQ7CiAgICAgICAgX19zY2ludF90IHVzbWJsa3M7CiAgICAgICAgX19zY2ludF90IGZzbWJsa3M7
CiAgICAgICAgX19zY2ludF90IHVvcmRibGtzOwogICAgICAgIF9fc2NpbnRfdCBmb3JkYmxrczsK
ICAgICAgICBfX3NjaW50X3Qga2VlcGNvc3Q7Cn07CiMgODUgIi91c3IvaW5jbHVkZS9tYWxsb2Mu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS91bG9ja3MuaCIgMSAzCiMgMTkgIi91c3IvaW5jbHVkZS91
bG9ja3MuaCIgMwojaWRlbnQgIiRSZXZpc2lvbjogMy41MyAkICRBdXRob3I6IGxlZWRvbSAkIgoK
CgojIDEgImluY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvdWxvY2tzLmgi
IDIgMwoKCiMgMSAiaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS91bG9j
a3MuaCIgMiAzCiMgMTA5ICIvdXNyL2luY2x1ZGUvdWxvY2tzLmgiIDMKZXh0ZXJuIGludCBfdXRy
YWNlOwpleHRlcm4gaW50IF91ZXJyb3I7CgoKCgp0eXBlZGVmIHZvaWQgdXNwdHJfdDsKCgoKCnR5
cGVkZWYgc3RydWN0IGxvY2ttZXRlcl9zIHsKICAgICAgICBpbnQgbG1fc3BpbnM7CiAgICAgICAg
aW50IGxtX3RyaWVzOwogICAgICAgIGludCBsbV9oaXRzOwp9IGxvY2ttZXRlcl90OwoKdHlwZWRl
ZiBzdHJ1Y3QgbG9ja2RlYnVnX3MgewogICAgICAgIHBpZF90IGxkX293bmVyX3BpZDsKfSBsb2Nr
ZGVidWdfdDsKCnR5cGVkZWYgdm9pZCAqdWxvY2tfdDsKCgoKCnR5cGVkZWYgdm9pZCB1c2VtYV90
OwoKCnR5cGVkZWYgc3RydWN0IGhpc3RfcyB7CiAgICAgICAgdXNlbWFfdCAqaF9zZW07CiAgICAg
ICAgaW50IGhfb3A7CiAgICAgICAgcGlkX3QgaF9waWQ7CiAgICAgICAgaW50IGhfc2NudDsKICAg
ICAgICBwaWRfdCBoX3dwaWQ7CiAgICAgICAgY2hhciAqaF9jcGM7CiAgICAgICAgc3RydWN0IGhp
c3RfcyAqaF9uZXh0OwogICAgICAgIHN0cnVjdCBoaXN0X3MgKmhfbGFzdDsKfSBoaXN0X3Q7Cgp0
eXBlZGVmIHN0cnVjdCBoaXN0cHRyX3MgewogICAgICAgIGhpc3RfdCAqaHBfY3VycmVudDsKICAg
ICAgICBpbnQgaHBfZW50cmllczsKICAgICAgICBpbnQgaHBfZXJyb3JzOwp9IGhpc3RwdHJfdDsK
CnR5cGVkZWYgc3RydWN0IHNlbWFtZXRlcl9zIHsKICAgICAgICBpbnQgc21fcGhpdHM7CiAgICAg
ICAgaW50IHNtX3BzZW1hczsKICAgICAgICBpbnQgc21fdnNlbWFzOwogICAgICAgIGludCBzbV92
bm93YWl0OwogICAgICAgIGludCBzbV9ud2FpdDsKICAgICAgICBpbnQgc21fbWF4bndhaXQ7Cn0g
c2VtYW1ldGVyX3Q7Cgp0eXBlZGVmIHN0cnVjdCBzZW1hZGVidWdfcyB7CiAgICAgICAgcGlkX3Qg
c2Rfb3duZXJfcGlkOwogICAgICAgIGNoYXIgKnNkX293bmVyX3BjOwogICAgICAgIHBpZF90IHNk
X2xhc3RfcGlkOwogICAgICAgIGNoYXIgKnNkX2xhc3RfcGM7Cn0gc2VtYWRlYnVnX3Q7CgoKCgp0
eXBlZGVmIHN0cnVjdCBiYXJyaWVyIHsKICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIGJf
aW51c2U7CiAgICAgICAgdW5zaWduZWQgY2hhciBiX2NvdW50OwogICAgICAgIHVuc2lnbmVkIGNo
YXIgYl93YWl0Y250OwogICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgYl9zcGluOwogICAg
ICAgIHVsb2NrX3QgYl9wbG9jazsKICAgICAgICB1c3B0cl90ICpiX3VzcHRyOwp9IGJhcnJpZXJf
dDsKCmV4dGVybiBiYXJyaWVyX3QgKm5ld19iYXJyaWVyKHVzcHRyX3QgKik7CmV4dGVybiB2b2lk
IGluaXRfYmFycmllcihiYXJyaWVyX3QgKik7CmV4dGVybiB2b2lkIGZyZWVfYmFycmllcihiYXJy
aWVyX3QgKik7CmV4dGVybiB2b2lkIGJhcnJpZXIoYmFycmllcl90ICosIHVuc2lnbmVkKTsKIyAy
MTAgIi91c3IvaW5jbHVkZS91bG9ja3MuaCIgMwpleHRlcm4gcHRyZGlmZl90IHVzY29uZmlnKGlu
dCwgLi4uKTsKZXh0ZXJuIHVzcHRyX3QgKnVzaW5pdChjb25zdCBjaGFyICopOwpleHRlcm4gdm9p
ZCB1c2RldGFjaCh1c3B0cl90ICopOwpleHRlcm4gaW50IHVzYWRkKHVzcHRyX3QgKik7CmV4dGVy
biB2b2lkIHVzcHV0aW5mbyh1c3B0cl90ICosIHZvaWQgKik7CmV4dGVybiB2b2lkICp1c2dldGlu
Zm8odXNwdHJfdCAqKTsKZXh0ZXJuIGludCB1c2Nhc2luZm8odXNwdHJfdCAqLCB2b2lkICosIHZv
aWQgKik7CgoKZXh0ZXJuIHZvaWQgKnVzbWFsbG9jKHNpemVfdCwgdXNwdHJfdCAqKTsKZXh0ZXJu
IHZvaWQgdXNmcmVlKHZvaWQgKiwgdXNwdHJfdCAqKTsKZXh0ZXJuIHZvaWQgKnVzcmVhbGxvYyh2
b2lkICosIHNpemVfdCwgdXNwdHJfdCAqKTsKZXh0ZXJuIHZvaWQgKnVzcmVjYWxsb2Modm9pZCAq
LCBzaXplX3QsIHNpemVfdCwgdXNwdHJfdCAqKTsKZXh0ZXJuIHZvaWQgKnVzY2FsbG9jKHNpemVf
dCwgc2l6ZV90LCB1c3B0cl90ICopOwpleHRlcm4gc3RydWN0IG1hbGxpbmZvIHVzbWFsbGluZm8o
dXNwdHJfdCAqKTsKZXh0ZXJuIGludCB1c21hbGxvcHQoaW50LCBpbnQsIHVzcHRyX3QgKik7CmV4
dGVybiBzaXplX3QgdXNtYWxsb2NibGtzaXplKHZvaWQgKiwgdXNwdHJfdCAqKTsKZXh0ZXJuIHZv
aWQgKnVzbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QsIHVzcHRyX3QgKik7CgoKZXh0ZXJuIHVsb2Nr
X3QgKCpfbmxvY2spKHVzcHRyX3QgKik7CmV4dGVybiBpbnQgKCpfaWxvY2spKHVsb2NrX3QpOwpl
eHRlcm4gdm9pZCAoKl9mcmVlbG9jaykodWxvY2tfdCwgdXNwdHJfdCAqKTsKZXh0ZXJuIGludCAo
Kl93bG9jaykodWxvY2tfdCwgdW5zaWduZWQpOwpleHRlcm4gaW50ICgqX2Nsb2NrKSh1bG9ja190
LCB1bnNpZ25lZCk7CmV4dGVybiBpbnQgKCpfbG9jaykodWxvY2tfdCk7CmV4dGVybiBpbnQgKCpf
dWxvY2spKHVsb2NrX3QpOwpleHRlcm4gaW50ICgqX3Rsb2NrKSh1bG9ja190KTsKZXh0ZXJuIGlu
dCAoKl9jdGxvY2spKHVsb2NrX3QsIGludCwgLi4uKTsKZXh0ZXJuIGludCAoKl9kbG9jaykodWxv
Y2tfdCwgRklMRSAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50ICgqX2Nhcykodm9pZCAqLCBw
dHJkaWZmX3QsIHB0cmRpZmZfdCwgdXNwdHJfdCAqKTsKZXh0ZXJuIGludCAoKl9jYXMzMikodm9p
ZCAqLCBpbnQzMl90LCBpbnQzMl90LCB1c3B0cl90ICopOwoKCmV4dGVybiB1c2VtYV90ICp1c25l
d3NlbWEodXNwdHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHVzaW5pdHNlbWEodXNlbWFfdCAqLCBp
bnQpOwpleHRlcm4gaW50IHVzcHNlbWEodXNlbWFfdCAqKTsKZXh0ZXJuIGludCB1c3ZzZW1hKHVz
ZW1hX3QgKik7CmV4dGVybiBpbnQgdXNjcHNlbWEodXNlbWFfdCAqKTsKZXh0ZXJuIHZvaWQgdXNm
cmVlc2VtYSh1c2VtYV90ICosIHVzcHRyX3QgKik7CmV4dGVybiBpbnQgdXN0ZXN0c2VtYSh1c2Vt
YV90ICopOwpleHRlcm4gaW50IHVzY3Rsc2VtYSh1c2VtYV90ICosIGludCwgLi4uKTsKZXh0ZXJu
IGludCB1c2R1bXBzZW1hKHVzZW1hX3QgKiwgRklMRSAqLCBjb25zdCBjaGFyICopOwpleHRlcm4g
dXNlbWFfdCAqdXNuZXdwb2xsc2VtYSh1c3B0cl90ICosIGludCk7CmV4dGVybiBpbnQgdXNmcmVl
cG9sbHNlbWEodXNlbWFfdCAqLCB1c3B0cl90ICopOwpleHRlcm4gaW50IHVzb3BlbnBvbGxzZW1h
KHVzZW1hX3QgKiwgbW9kZV90KTsKZXh0ZXJuIGludCB1c2Nsb3NlcG9sbHNlbWEodXNlbWFfdCAq
KTsKIyAyOTIgIi91c3IvaW5jbHVkZS91bG9ja3MuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90YXNr
LmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvdGFzay5oIiAzCiNpZGVudCAiJFJldmlzaW9uOiAz
LjM3ICQiCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3Vsb2Nrcy5oIiAxIDMKIyAyOCAiL3Vzci9p
bmNsdWRlL3Rhc2suaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9wcmN0bC5oIiAxIDMKIyAy
MyAiL3Vzci9pbmNsdWRlL3N5cy9wcmN0bC5oIiAzCiNpZGVudCAiJFJldmlzaW9uOiAzLjUxICQi
CiMgNDEgIi91c3IvaW5jbHVkZS9zeXMvcHJjdGwuaCIgMwpzdHJ1Y3QgcHJkYV9zeXMgewogICAg
ICAgIHBpZF90IHRfcGlkOwogICAgICAgIF9fdWludDMyX3QgdF9oaW50OwogICAgICAgIF9fdWlu
dDMyX3QgdF9kbGFjdHNlcTsKICAgICAgICBfX3VpbnQzMl90IHRfZnBmbGFnczsKICAgICAgICBf
X3VpbnQzMl90IHRfcHJpZDsKICAgICAgICBfX3VpbnQzMl90IHRfZGxlbmRzZXE7CiAgICAgICAg
X191aW50NjRfdCB0X3BhbmNha2VbNV07CiAgICAgICAgcGlkX3QgdF9ycGlkOwogICAgICAgIF9f
aW50MzJfdCB0X3Jlc2NoZWQ7CiAgICAgICAgX191aW50MzJfdCB0X3VudXNlZFs4XTsKCgoKCgog
ICAgICAgIF9fdWludDMyX3QgdF9jcHU7CgoKCgoKICAgICAgICBfX3VpbnQzMl90IHRfZmxhZ3M7
CiAgICAgICAga19zaWdzZXRfdCB0X2hvbGQ7Cn07CgpzdHJ1Y3QgcHJkYSB7CiAgICAgICAgY2hh
ciB1bnVzZWRbMjA0OF07CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgY2hhciBmaWxs
WzUxMl07CiAgICAgICAgfSBzeXMyX3ByZGE7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAg
ICAgY2hhciBmaWxsWzUxMl07CiAgICAgICAgfSBsaWIyX3ByZGE7CiAgICAgICAgdW5pb24gewog
ICAgICAgICAgICAgICAgY2hhciBmaWxsWzUxMl07CiAgICAgICAgfSB1c3IyX3ByZGE7CgogICAg
ICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIGNoYXIgZmlsbFsxMjhdOwogICAgICAgICAgICAg
ICAgc3RydWN0IHByZGFfc3lzIHByZGFfc3lzOwogICAgICAgIH0gc3lzX3ByZGE7CiAgICAgICAg
dW5pb24gewogICAgICAgICAgICAgICAgY2hhciBmaWxsWzI1Nl07CiAgICAgICAgfSBsaWJfcHJk
YTsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBjaGFyIGZpbGxbMTI4XTsKICAgICAg
ICB9IHVzcl9wcmRhOwp9OwojIDk5ICIvdXNyL2luY2x1ZGUvc3lzL3ByY3RsLmgiIDMKc3RydWN0
IHByYXR0YWNoX2FyZ3NfdCB7CiAgICAgICAgX19pbnQ2NF90IGxvY2FsX3ZhZGRyOwogICAgICAg
IF9faW50NjRfdCB2YWRkcjsKICAgICAgICBwaWRfdCBwaWQ7CiAgICAgICAgX191aW50MzJfdCBw
cm90czsKICAgICAgICBfX3VpbnQzMl90IGZsYWdzOwp9OwoKc3RydWN0IHByYXR0YWNoX3Jlc3Vs
dHNfdCB7CiAgICAgICAgX19pbnQ2NF90IGxvY2FsX3ZhZGRyOwogICAgICAgIF9faW50NjRfdCBy
ZWdpb25fYmFzZTsKICAgICAgICBfX2ludDY0X3QgcmVnaW9uX3NpemU7CiAgICAgICAgX191aW50
MzJfdCBwcm90czsKfTsKIyAxMjUgIi91c3IvaW5jbHVkZS9zeXMvcHJjdGwuaCIgMwojIDEgImlu
Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDEyNiAiL3Vzci9pbmNsdWRlL3N5cy9wcmN0bC5oIiAyIDMK
CmludCBibG9ja3Byb2MocGlkX3QpOwppbnQgdW5ibG9ja3Byb2MocGlkX3QpOwppbnQgc2V0Ymxv
Y2twcm9jY250KHBpZF90LCBpbnQpOwppbnQgYmxvY2twcm9jYWxsKHBpZF90KTsKaW50IHVuYmxv
Y2twcm9jYWxsKHBpZF90KTsKaW50IHNldGJsb2NrcHJvY2NudGFsbChwaWRfdCwgaW50KTsKcHRy
ZGlmZl90IHByY3RsKHVuc2lnbmVkLCAuLi4pOwppbnQgc3Byb2Modm9pZCAoKikodm9pZCAqKSwg
dW5zaWduZWQsIC4uLik7CmludCBzcHJvY3NwKHZvaWQgKCopKHZvaWQgKiwgc2l6ZV90KSwgdW5z
aWduZWQsIHZvaWQgKiwgY2FkZHJfdCwgc2l6ZV90KTsKaW50IG5zcHJvYyh2b2lkICgqKSh2b2lk
ICosIHNpemVfdCksIHVuc2lnbmVkLCB2b2lkICosIGNhZGRyX3QsIHNpemVfdCk7CiMgMjkgIi91
c3IvaW5jbHVkZS90YXNrLmgiIDIgMwoKCgoKCgp0eXBlZGVmIGludCB0aWRfdDsKc3RydWN0IHBy
ZGFfbGliIHsKICAgICAgICB0aWRfdCB0X3RpZDsKICAgICAgICBpbnQgdF9lcnJubzsKCgogICAg
ICAgIGludCBhdXRvX21wX2lkOwogICAgICAgIGNoYXIgKmZwZV9kYXRhX3B0cjsKICAgICAgICBj
aGFyICpwaXhpZV9kYXRhX3B0cjsKICAgICAgICBpbnQgY29tcGlsZXJfZXh0cmFbMV07CgoKICAg
ICAgICB2b2lkICpnbHhfY2xpZW50OwogICAgICAgIHZvaWQgKm9nbF9jb250ZXh0OwogICAgICAg
IHZvaWQgKm9nbF9kaXNwYXRjaFs3XTsKCgogICAgICAgIHZvaWQgKnNwZWVkc2hvcF9kYXRhX3B0
cls1XTsKCgogICAgICAgIGludCBwdGhyZWFkX2lkOwogICAgICAgIGludCBwdGhyZWFkX2NhbmNl
bDsKICAgICAgICB2b2lkICpwdGhyZWFkX2RhdGFbNl07Cn07CgoKZXh0ZXJuIGNoYXIgX19wcmRh
X2xpYl9zelsyNTcgLSBzaXplb2Yoc3RydWN0IHByZGFfbGliKV07CiMgNzIgIi91c3IvaW5jbHVk
ZS90YXNrLmgiIDMKdHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QgdHNrYmxrIHsKICAgICAgICB2b2lk
ICgqdF9lbnRyeSkodm9pZCAqKTsKICAgICAgICB2b2lkICp0X2FyZzsKICAgICAgICB0aWRfdCB0
X3RpZDsKICAgICAgICBwaWRfdCB0X3BpZDsKICAgICAgICB1bnNpZ25lZCB0X29wdGlvbnM7CiAg
ICAgICAgdW5zaWduZWQgdF9mbGFnczsKICAgICAgICBjaGFyICp0X25hbWU7CiAgICAgICAgc3Ry
dWN0IHRza2JsayAqdF9saW5rOwp9IHRza2Jsa190OwoKCgoKCgpleHRlcm4gdHNrYmxrX3QgKl9m
aW5kdGFzayh0aWRfdCwgdHNrYmxrX3QgKiopOwoKCgoKZXh0ZXJuIHRpZF90IHRhc2tjcmVhdGUo
Y2hhciAqLCB2b2lkICgqKSh2b2lkICopLCB2b2lkICosIGludCk7CmV4dGVybiBpbnQgdGFza2Rl
c3Ryb3kodGlkX3QpOwpleHRlcm4gaW50IHRhc2tjdGwodGlkX3QsIHVuc2lnbmVkLCAuLi4pOwpl
eHRlcm4gaW50IHRhc2tibG9jayh0aWRfdCk7CmV4dGVybiBpbnQgdGFza3VuYmxvY2sodGlkX3Qp
OwpleHRlcm4gaW50IHRhc2tzZXRibG9ja2NudCh0aWRfdCwgaW50KTsKCgp0eXBlZGVmIHN0cnVj
dCB0c2toZHIgewogICAgICAgIHVzcHRyX3QgKnRfdXNwdHI7CiAgICAgICAgdWxvY2tfdCB0X2xp
c3Rsb2NrOwogICAgICAgIHRza2Jsa190ICp0X2xpc3Q7Cn0gdHNraGRyX3Q7CmV4dGVybiB0c2to
ZHJfdCBfdGFza2hlYWRlcjsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgbWxpYmhkciB7CiAgICAgICAg
dWxvY2tfdCAqbV9saXN0bG9jazsKICAgICAgICB0aWRfdCBtX2xpc3RbMjU2XTsKICAgICAgICBz
dHJ1Y3QgYmFycmllciAqbV9zYmFyOwogICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IG1f
bGNvdW50OwogICAgICAgIHVuc2lnbmVkIHNob3J0IG1fcGNvdW50OwogICAgICAgIHVsb2NrX3Qg
bV9nbG9jazsKICAgICAgICB1bnNpZ25lZCBtX2djb3VudDsKICAgICAgICB1bG9ja190IG1fZ2Nv
dW50bG9jazsKfSBtbGliaGRyX3Q7CgpleHRlcm4gaW50IG1fZm9yayh2b2lkICgqKSgpLCAuLi4p
OwpleHRlcm4gaW50IG1fcGFya19wcm9jcyh2b2lkKTsKZXh0ZXJuIGludCBtX3JlbGVfcHJvY3Mo
dm9pZCk7CmV4dGVybiB2b2lkIG1fc3luYyh2b2lkKTsKZXh0ZXJuIGludCBtX2tpbGxfcHJvY3Mo
dm9pZCk7CmV4dGVybiBpbnQgbV9nZXRfbXlpZCh2b2lkKTsKZXh0ZXJuIGludCBtX3NldF9wcm9j
cyhpbnQpOwpleHRlcm4gaW50IG1fZ2V0X251bXByb2NzKHZvaWQpOwpleHRlcm4gdW5zaWduZWQg
bV9uZXh0KHZvaWQpOwpleHRlcm4gdm9pZCBtX2xvY2sodm9pZCk7CmV4dGVybiB2b2lkIG1fdW5s
b2NrKHZvaWQpOwojIDI5MyAiL3Vzci9pbmNsdWRlL3Vsb2Nrcy5oIiAyIDMKIyA4NiAiL3Vzci9p
bmNsdWRlL21hbGxvYy5oIiAyIDMKCmV4dGVybiBpbnQgX191c19yc3RocmVhZF9tYWxsb2M7CgoK
CgpleHRlcm4gaW50IF9fbGliY19sb2NrbWFsbG9jKHZvaWQpOwpleHRlcm4gaW50IF9fbGliY191
bmxvY2ttYWxsb2Modm9pZCk7CgoKCgoKCmV4dGVybiB2b2lkICogY2FsbG9jKHNpemVfdCwgc2l6
ZV90KTsKZXh0ZXJuIHZvaWQgKiBtYWxsb2Moc2l6ZV90KTsKZXh0ZXJuIHZvaWQgZnJlZSh2b2lk
ICopOwpleHRlcm4gdm9pZCAqIHJlYWxsb2Modm9pZCAqLCBzaXplX3QpOwpleHRlcm4gaW50IG1h
bGxvcHQoaW50LCBpbnQpOwpleHRlcm4gc3RydWN0IG1hbGxpbmZvIG1hbGxpbmZvKHZvaWQpOwoK
CmV4dGVybiB2b2lkICpyZWNhbGxvYyh2b2lkICosIHNpemVfdCwgc2l6ZV90KTsKZXh0ZXJuIHNp
emVfdCBtYWxsb2NibGtzaXplKHZvaWQgKik7CmV4dGVybiB2b2lkICptZW1hbGlnbihzaXplX3Qs
IHNpemVfdCk7CgoKZXh0ZXJuIHZvaWQgKiBhY3JlYXRlKHZvaWQgKiwgc2l6ZV90LCBpbnQsIHZv
aWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiAoKiko
c2l6ZV90LCB2b2lkICopKTsKZXh0ZXJuIHZvaWQgYWZyZWUodm9pZCAqLCB2b2lkICopOwpleHRl
cm4gdm9pZCAqYXJlYWxsb2Modm9pZCAqLCBzaXplX3QsIHZvaWQgKik7CmV4dGVybiB2b2lkICph
cmVjYWxsb2Modm9pZCAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCAqKTsKZXh0ZXJuIHZvaWQgKmFt
YWxsb2Moc2l6ZV90LCB2b2lkICopOwpleHRlcm4gdm9pZCAqYWNhbGxvYyhzaXplX3QsIHNpemVf
dCwgdm9pZCAqKTsKZXh0ZXJuIHN0cnVjdCBtYWxsaW5mbyBhbWFsbGluZm8odm9pZCAqKTsKZXh0
ZXJuIGludCBhbWFsbG9wdChpbnQsIGludCwgdm9pZCAqKTsKZXh0ZXJuIHZvaWQgYWRlbGV0ZSh2
b2lkICopOwpleHRlcm4gc2l6ZV90IGFtYWxsb2NibGtzaXplKHZvaWQgKiwgdm9pZCAqKTsKZXh0
ZXJuIHZvaWQgKmFtZW1hbGlnbihzaXplX3QsIHNpemVfdCwgdm9pZCAqKTsKIyAzMTMgIi4uLy4u
L2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0uaCIgMgojIDMzMSAiLi4vLi4vZWdjYy0z
LjEtQ1ZTMjAwMjA0MTgvZ2NjL3N5c3RlbS5oIgpleHRlcm4gY29uc3QgY2hhciAqc3Ryc2lnbmFs
IChpbnQpOwojIDM4MSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3N5c3RlbS5oIgoj
IDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAxIDMKIyAxMCAiL3Vzci9pbmNsdWRlL3N5cy9z
dGF0LmgiIDMKI2lkZW50ICIkUmV2aXNpb246IDMuNDkgJCIKIyAyNCAiL3Vzci9pbmNsdWRlL3N5
cy9zdGF0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMSAzCiMgMjkgIi91c3Iv
aW5jbHVkZS9zeXMvdGltZS5oIiAzCiNpZGVudCAiJFJldmlzaW9uOiAzLjQ0ICQiCiMgMjUgIi91
c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0Lmgi
IDMKc3RydWN0IHN0YXQgewogICAgICAgIGRldl90IHN0X2RldjsKICAgICAgICBsb25nIHN0X3Bh
ZDFbM107CiAgICAgICAgaW5vX3Qgc3RfaW5vOwogICAgICAgIG1vZGVfdCBzdF9tb2RlOwogICAg
ICAgIG5saW5rX3Qgc3Rfbmxpbms7CiAgICAgICAgdWlkX3Qgc3RfdWlkOwogICAgICAgIGdpZF90
IHN0X2dpZDsKICAgICAgICBkZXZfdCBzdF9yZGV2OwogICAgICAgIGxvbmcgc3RfcGFkMlsyXTsK
ICAgICAgICBvZmZfdCBzdF9zaXplOwogICAgICAgIGxvbmcgc3RfcGFkMzsKICAgICAgICB0aW1l
c3RydWNfdCBzdF9hdGltOwogICAgICAgIHRpbWVzdHJ1Y190IHN0X210aW07CiAgICAgICAgdGlt
ZXN0cnVjX3Qgc3RfY3RpbTsKICAgICAgICBsb25nIHN0X2Jsa3NpemU7CiAgICAgICAgYmxrY250
X3Qgc3RfYmxvY2tzOwogICAgICAgIGNoYXIgc3RfZnN0eXBlWzE2XTsKICAgICAgICBsb25nIHN0
X3BhZDRbOF07Cn07CgoKCgoKCnN0cnVjdCBzdGF0NjQgewogICAgICAgIGRldl90IHN0X2RldjsK
ICAgICAgICBsb25nIHN0X3BhZDFbM107CiAgICAgICAgaW5vNjRfdCBzdF9pbm87CiAgICAgICAg
bW9kZV90IHN0X21vZGU7CiAgICAgICAgbmxpbmtfdCBzdF9ubGluazsKICAgICAgICB1aWRfdCBz
dF91aWQ7CiAgICAgICAgZ2lkX3Qgc3RfZ2lkOwogICAgICAgIGRldl90IHN0X3JkZXY7CiAgICAg
ICAgbG9uZyBzdF9wYWQyWzJdOwogICAgICAgIG9mZjY0X3Qgc3Rfc2l6ZTsKICAgICAgICBsb25n
IHN0X3BhZDM7CiAgICAgICAgdGltZXN0cnVjX3Qgc3RfYXRpbTsKICAgICAgICB0aW1lc3RydWNf
dCBzdF9tdGltOwogICAgICAgIHRpbWVzdHJ1Y190IHN0X2N0aW07CiAgICAgICAgbG9uZyBzdF9i
bGtzaXplOwogICAgICAgIF9faW50NjRfdCBzdF9ibG9ja3M7CiAgICAgICAgY2hhciBzdF9mc3R5
cGVbMTZdOwogICAgICAgIGxvbmcgc3RfcGFkNFs4XTsKfTsKIyAxODYgIi91c3IvaW5jbHVkZS9z
eXMvc3RhdC5oIiAzCmludCBfZnhzdGF0KGNvbnN0IGludCwgaW50LCBzdHJ1Y3Qgc3RhdCAqKTsK
aW50IF94c3RhdChjb25zdCBpbnQsIGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQgKik7CmludCBf
bHhzdGF0KGNvbnN0IGludCwgY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKaW50IF94bWtu
b2QoY29uc3QgaW50LCBjb25zdCBjaGFyICosIG1vZGVfdCwgZGV2X3QpOwoKCmludCBmY2htb2Qo
aW50LCBtb2RlX3QpOwoKCmV4dGVybiBpbnQgY2htb2QoY29uc3QgY2hhciAqLCBtb2RlX3QpOwpl
eHRlcm4gaW50IG1rZGlyKGNvbnN0IGNoYXIgKiwgbW9kZV90KTsKZXh0ZXJuIGludCBta2ZpZm8o
Y29uc3QgY2hhciAqLCBtb2RlX3QpOwpleHRlcm4gbW9kZV90IHVtYXNrKG1vZGVfdCk7CiMgMjM2
ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwppbnQgZnN0YXQoaW50LCBzdHJ1Y3Qgc3RhdCAq
KTsKaW50IHN0YXQoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKCmludCBsc3RhdChjb25z
dCBjaGFyICosIHN0cnVjdCBzdGF0ICopOwppbnQgbWtub2QoY29uc3QgY2hhciAqLCBtb2RlX3Qs
IGRldl90KTsKCgoKaW50IGZzdGF0NjQoaW50LCBzdHJ1Y3Qgc3RhdDY0ICopOwppbnQgbHN0YXQ2
NChjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0NjQgKik7CmludCBzdGF0NjQoY29uc3QgY2hhciAq
LCBzdHJ1Y3Qgc3RhdDY0ICopOwojIDM4MiAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2Nj
L3N5c3RlbS5oIiAyCiMgNDkwICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2Mvc3lzdGVt
LmgiCiMgMSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvaW5jbHVkZS9saWJpYmVydHkuaCIg
MQojIDQ2ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9pbmNsdWRlL2xpYmliZXJ0eS5oIgoj
IDEgImluY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ3ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQx
OC9pbmNsdWRlL2xpYmliZXJ0eS5oIiAyCgoKCgoKCgpleHRlcm4gY2hhciAqKmJ1aWxkYXJndiAo
Y29uc3QgY2hhciAqKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gdm9p
ZCBmcmVlYXJndiAoY2hhciAqKik7CgoKCgpleHRlcm4gY2hhciAqKmR1cGFyZ3YgKGNoYXIgKiop
IF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgNzcgIi4uLy4uL2VnY2MtMy4xLUNWUzIw
MDIwNDE4L2luY2x1ZGUvbGliaWJlcnR5LmgiCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoY29uc3Qg
Y2hhciAqKTsKIyA4NiAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvaW5jbHVkZS9saWJpYmVy
dHkuaCIKZXh0ZXJuIGNvbnN0IGNoYXIgKmxiYXNlbmFtZSAoY29uc3QgY2hhciAqKTsKCgoKCgpl
eHRlcm4gY2hhciAqY29uY2F0IChjb25zdCBjaGFyICosIC4uLikgX19hdHRyaWJ1dGVfXyAoKF9f
bWFsbG9jX18pKTsKIyAxMDEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2luY2x1ZGUvbGli
aWJlcnR5LmgiCmV4dGVybiBjaGFyICpyZWNvbmNhdCAoY2hhciAqLCBjb25zdCBjaGFyICosIC4u
LikgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gdW5zaWduZWQgbG9u
ZyBjb25jYXRfbGVuZ3RoIChjb25zdCBjaGFyICosIC4uLik7CgoKCgoKCmV4dGVybiBjaGFyICpj
b25jYXRfY29weSAoY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CgoKCgoKCmV4dGVybiBjaGFy
ICpjb25jYXRfY29weTIgKGNvbnN0IGNoYXIgKiwgLi4uKTsKCgoKZXh0ZXJuIGNoYXIgKmxpYmli
ZXJ0eV9jb25jYXRfcHRyOwojIDEzNyAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvaW5jbHVk
ZS9saWJpYmVydHkuaCIKZXh0ZXJuIGludCBmZG1hdGNoIChpbnQgZmQxLCBpbnQgZmQyKTsKCgoK
CmV4dGVybiBjaGFyICogZ2V0cHdkICh2b2lkKTsKCgoKZXh0ZXJuIGxvbmcgZ2V0X3J1bl90aW1l
ICh2b2lkKTsKCgoKZXh0ZXJuIGNoYXIgKmNob29zZV90ZW1wX2Jhc2UgKHZvaWQpIF9fYXR0cmli
dXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiBjaGFyICptYWtlX3RlbXBfZmlsZSAoY29u
c3QgY2hhciAqKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gY29uc3Qg
Y2hhciAqc3BhY2VzIChpbnQgY291bnQpOwoKCgoKZXh0ZXJuIGludCBlcnJub19tYXggKHZvaWQp
OwoKCgoKZXh0ZXJuIGNvbnN0IGNoYXIgKnN0cmVycm5vIChpbnQpOwoKCgpleHRlcm4gaW50IHN0
cnRvZXJybm8gKGNvbnN0IGNoYXIgKik7CgoKCmV4dGVybiBjaGFyICp4c3RyZXJyb3IgKGludCk7
CgoKCgpleHRlcm4gaW50IHNpZ25vX21heCAodm9pZCk7CiMgMTkzICIuLi8uLi9lZ2NjLTMuMS1D
VlMyMDAyMDQxOC9pbmNsdWRlL2xpYmliZXJ0eS5oIgpleHRlcm4gY29uc3QgY2hhciAqc3Ryc2ln
bm8gKGludCk7CgoKCmV4dGVybiBpbnQgc3RydG9zaWdubyAoY29uc3QgY2hhciAqKTsKCgoKZXh0
ZXJuIGludCB4YXRleGl0ICh2b2lkICgqZm4pICh2b2lkKSk7CgoKCmV4dGVybiB2b2lkIHhleGl0
IChpbnQgc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiB2
b2lkIHhtYWxsb2Nfc2V0X3Byb2dyYW1fbmFtZSAoY29uc3QgY2hhciAqKTsKCgpleHRlcm4gdm9p
ZCB4bWFsbG9jX2ZhaWxlZCAoc2l6ZV90KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7
CgoKCgoKZXh0ZXJuIHZvaWQgKiB4bWFsbG9jIChzaXplX3QpIF9fYXR0cmlidXRlX18gKChfX21h
bGxvY19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKiB4cmVhbGxvYyAodm9pZCAqLCBzaXplX3QpOwoK
CgoKZXh0ZXJuIHZvaWQgKiB4Y2FsbG9jIChzaXplX3QsIHNpemVfdCkgX19hdHRyaWJ1dGVfXyAo
KF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnhzdHJkdXAgKGNvbnN0IGNoYXIgKikgX19h
dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIHZvaWQgKiB4bWVtZHVwIChjb25z
dCB2b2lkICosIHNpemVfdCwgc2l6ZV90KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK
CgoKCmV4dGVybiBjb25zdCBjaGFyIF9oZXhfdmFsdWVbMjU2XTsKZXh0ZXJuIHZvaWQgaGV4X2lu
aXQgKHZvaWQpOwojIDI2MCAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvaW5jbHVkZS9saWJp
YmVydHkuaCIKZXh0ZXJuIGludCBwZXhlY3V0ZSAoY29uc3QgY2hhciAqLCBjaGFyICogY29uc3Qg
KiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiosIGNoYXIgKiosIGludCk7CgoK
CgpleHRlcm4gaW50IHB3YWl0IChpbnQsIGludCAqLCBpbnQpOwoKCgoKZXh0ZXJuIGludCBhc3By
aW50ZiAoY2hhciAqKiwgY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h
dF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIg
KiosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCkKICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAo
X19wcmludGZfXywgMiwgMCkpKTsKIyAyODYgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2lu
Y2x1ZGUvbGliaWJlcnR5LmgiCmV4dGVybiB2b2lkICogQ19hbGxvY2EgKHNpemVfdCkgX19hdHRy
aWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyA0OTEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4
L2djYy9zeXN0ZW0uaCIgMgojIDEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2luY2x1ZGUv
c3ltY2F0LmgiIDEKIyA0OTIgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9zeXN0ZW0u
aCIgMgojIDU1ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIgMgoj
IDEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuaCIgMQojIDI1ICIuLi8uLi9l
Z2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmgiCnN0cnVjdCBmdW5jdGlvbjsKCiMgMSAiLi4v
Li4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL21hY2htb2RlLmgiIDEKIyAyOSAiLi4vLi4vZWdj
Yy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL21hY2htb2RlLmgiCmVudW0gbWFjaGluZV9tb2RlIHsKIyAx
ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvbWFjaG1vZGUuZGVmIiAxCiMgNzQgIi4u
Ly4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9tYWNobW9kZS5kZWYiClZPSURtb2RlLAoKQklt
b2RlLApRSW1vZGUsCkhJbW9kZSwKU0ltb2RlLApESW1vZGUsClRJbW9kZSwKT0ltb2RlLAoKCgoK
UFFJbW9kZSwKUEhJbW9kZSwKUFNJbW9kZSwKUERJbW9kZSwKClFGbW9kZSwKSEZtb2RlLApUUUZt
b2RlLApTRm1vZGUsCkRGbW9kZSwKWEZtb2RlLApURm1vZGUsCgoKUUNtb2RlLApIQ21vZGUsClND
bW9kZSwKRENtb2RlLApYQ21vZGUsClRDbW9kZSwKCkNRSW1vZGUsCkNISW1vZGUsCkNTSW1vZGUs
CkNESW1vZGUsCkNUSW1vZGUsCkNPSW1vZGUsCgoKCgoKCgpWMlFJbW9kZSwKVjJISW1vZGUsClYy
U0ltb2RlLApWMkRJbW9kZSwKClY0UUltb2RlLApWNEhJbW9kZSwKVjRTSW1vZGUsClY0REltb2Rl
LAoKVjhRSW1vZGUsClY4SEltb2RlLApWOFNJbW9kZSwKVjhESW1vZGUsCgpWMTZRSW1vZGUsCgpW
MlNGbW9kZSwKVjJERm1vZGUsCgpWNFNGbW9kZSwKVjRERm1vZGUsCgpWOFNGbW9kZSwKVjhERm1v
ZGUsClYxNlNGbW9kZSwKCgoKQkxLbW9kZSwKIyAxNTkgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIw
NDE4L2djYy9tYWNobW9kZS5kZWYiCkNDbW9kZSwKIyAzMSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAw
MjA0MTgvZ2NjL21hY2htb2RlLmgiIDIKTUFYX01BQ0hJTkVfTU9ERSB9OwojIDQxICIuLi8uLi9l
Z2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvbWFjaG1vZGUuaCIKZXh0ZXJuIGNvbnN0IGNoYXIgKiBj
b25zdCBtb2RlX25hbWVbKGludCkgTUFYX01BQ0hJTkVfTU9ERV07CgoKZW51bSBtb2RlX2NsYXNz
IHsgTU9ERV9SQU5ET00sIE1PREVfSU5ULCBNT0RFX0ZMT0FULCBNT0RFX1BBUlRJQUxfSU5ULCBN
T0RFX0NDLAogICAgICAgICAgICAgICAgICBNT0RFX0NPTVBMRVhfSU5ULCBNT0RFX0NPTVBMRVhf
RkxPQVQsCiAgICAgICAgICAgICAgICAgIE1PREVfVkVDVE9SX0lOVCwgTU9ERV9WRUNUT1JfRkxP
QVQsCiAgICAgICAgICAgICAgICAgIE1BWF9NT0RFX0NMQVNTfTsKCgoKCmV4dGVybiBjb25zdCBl
bnVtIG1vZGVfY2xhc3MgbW9kZV9jbGFzc1soaW50KSBNQVhfTUFDSElORV9NT0RFXTsKIyA4MCAi
Li4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL21hY2htb2RlLmgiCmV4dGVybiBjb25zdCB1
bnNpZ25lZCBjaGFyIG1vZGVfc2l6ZVsoaW50KSBNQVhfTUFDSElORV9NT0RFXTsKCgoKCmV4dGVy
biBjb25zdCB1bnNpZ25lZCBjaGFyIG1vZGVfdW5pdF9zaXplWyhpbnQpIE1BWF9NQUNISU5FX01P
REVdOwojIDk2ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvbWFjaG1vZGUuaCIKZXh0
ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1vZGVfYml0c2l6ZVsoaW50KSBNQVhfTUFDSElORV9N
T0RFXTsKIyAxMDYgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9tYWNobW9kZS5oIgpl
eHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBsb25nIG1vZGVfbWFza19hcnJheVsoaW50KSBNQVhf
TUFDSElORV9NT0RFXTsKCgoKZXh0ZXJuIGNvbnN0IGVudW0gbWFjaGluZV9tb2RlIGlubmVyX21v
ZGVfYXJyYXlbKGludCkgTUFYX01BQ0hJTkVfTU9ERV07CiMgMTIzICIuLi8uLi9lZ2NjLTMuMS1D
VlMyMDAyMDQxOC9nY2MvbWFjaG1vZGUuaCIKZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgbW9k
ZV93aWRlcl9tb2RlWyhpbnQpIE1BWF9NQUNISU5FX01PREVdOwoKCgoKCgpleHRlcm4gZW51bSBt
YWNoaW5lX21vZGUgbW9kZV9mb3Jfc2l6ZSAodW5zaWduZWQgaW50LCBlbnVtIG1vZGVfY2xhc3Ms
IGludCk7CgoKCgpleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgc21hbGxlc3RfbW9kZV9mb3Jfc2l6
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQsIGVudW0gbW9k
ZV9jbGFzcyk7CgoKCgoKZXh0ZXJuIGVudW0gbWFjaGluZV9tb2RlIGludF9tb2RlX2Zvcl9tb2Rl
IChlbnVtIG1hY2hpbmVfbW9kZSk7CgoKCmV4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBnZXRfYmVz
dF9tb2RlIChpbnQsIGludCwgdW5zaWduZWQgaW50LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50KTsK
CgoKCmV4dGVybiB1bnNpZ25lZCBnZXRfbW9kZV9hbGlnbm1lbnQgKGVudW0gbWFjaGluZV9tb2Rl
KTsKCgoKCgpleHRlcm4gY29uc3QgZW51bSBtYWNoaW5lX21vZGUgY2xhc3NfbmFycm93ZXN0X21v
ZGVbKGludCkgTUFYX01PREVfQ0xBU1NdOwoKCgoKCmV4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBi
eXRlX21vZGU7CmV4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSB3b3JkX21vZGU7CmV4dGVybiBlbnVt
IG1hY2hpbmVfbW9kZSBwdHJfbW9kZTsKIyAyOCAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgv
Z2NjL3J0bC5oIiAyCiMgNDEgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuaCIK
ZW51bSBydHhfY29kZSB7CgoKIyAxICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRs
LmRlZiIgMQojIDcwICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKVU5L
Tk9XTiAsCgoKCk5JTCAsCgoKCgpJTkNMVURFICwKCgoKCgoKRVhQUl9MSVNUICwKCgoKSU5TTl9M
SVNUICwKIyAxMjkgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuZGVmIgpNQVRD
SF9PUEVSQU5EICwKCgoKCgoKTUFUQ0hfU0NSQVRDSCAsCgoKCgpNQVRDSF9EVVAgLAoKCgoKCgoK
TUFUQ0hfT1BFUkFUT1IgLAojIDE1OCAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0
bC5kZWYiCk1BVENIX1BBUkFMTEVMICwKCgoKCk1BVENIX09QX0RVUCAsCgoKCgpNQVRDSF9QQVJf
RFVQICwKCgoKCk1BVENIX0lOU04gLAojIDE5MiAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgv
Z2NjL3J0bC5kZWYiCkRFRklORV9JTlNOICwKCgoKCgoKCkRFRklORV9QRUVQSE9MRSAsCiMgMjEx
ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKREVGSU5FX1NQTElUICwK
IyAyMzkgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuZGVmIgpERUZJTkVfSU5T
Tl9BTkRfU1BMSVQgLAoKCgpERUZJTkVfUEVFUEhPTEUyICwKCgoKREVGSU5FX0NPTUJJTkUgLAoj
IDI2MCAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5kZWYiCkRFRklORV9FWFBB
TkQgLAojIDI3NiAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5kZWYiCkRFRklO
RV9ERUxBWSAsCiMgMzE3ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIK
REVGSU5FX0ZVTkNUSU9OX1VOSVQgLAoKCkRFRklORV9BU01fQVRUUklCVVRFUyAsCiMgMzMzICIu
Li8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKREVGSU5FX0NPTkRfRVhFQyAs
CgoKCgoKU0VRVUVOQ0UgLAoKCkFERFJFU1MgLAojIDM1MyAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAw
MjA0MTgvZ2NjL3J0bC5kZWYiCkRFRklORV9BVFRSICwKCgpBVFRSICwKCgoKCgoKClNFVF9BVFRS
ICwKIyAzNzkgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuZGVmIgpTRVRfQVRU
Ul9BTFRFUk5BVElWRSAsCgoKCgpFUV9BVFRSICwKIyAzOTQgIi4uLy4uL2VnY2MtMy4xLUNWUzIw
MDIwNDE4L2djYy9ydGwuZGVmIgpBVFRSX0ZMQUcgLAojIDQwNyAiLi4vLi4vZWdjYy0zLjEtQ1ZT
MjAwMjA0MTgvZ2NjL3J0bC5kZWYiCklOU04gLAoKCgpKVU1QX0lOU04gLAoKCgoKCgpDQUxMX0lO
U04gLAoKCkJBUlJJRVIgLAojIDQzMCAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0
bC5kZWYiCkNPREVfTEFCRUwgLAoKCgoKCgpOT1RFICwKIyA0NTAgIi4uLy4uL2VnY2MtMy4xLUNW
UzIwMDIwNDE4L2djYy9ydGwuZGVmIgpDT05EX0VYRUMgLAoKClBBUkFMTEVMICwKCgoKCgoKCkFT
TV9JTlBVVCAsCiMgNDc1ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIK
QVNNX09QRVJBTkRTICwKIyA0ODYgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwu
ZGVmIgpVTlNQRUMgLAoKClVOU1BFQ19WT0xBVElMRSAsCgoKCkFERFJfVkVDICwKIyA1MTggIi4u
Ly4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuZGVmIgpBRERSX0RJRkZfVkVDICwKIyA1
MjkgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuZGVmIgpQUkVGRVRDSCAsCiMg
NTQxICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKU0VUICwKCgoKClVT
RSAsCgoKCgpDTE9CQkVSICwKCgoKCgpDQUxMICwKCgoKUkVUVVJOICwKCgoKCgpUUkFQX0lGICwK
CgoKClJFU1ggLAoKCgoKCgpDT05TVF9JTlQgLAoKCgoKCgpDT05TVF9ET1VCTEUgLAoKCkNPTlNU
X1ZFQ1RPUiAsCgoKQ09OU1RfU1RSSU5HICwKCgoKCgpDT05TVCAsCgoKClBDICwKCgpWQUxVRSAs
CiMgNjE0ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKUkVHICwKCgoK
CgoKU0NSQVRDSCAsCiMgNjMxICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRl
ZiIKU1VCUkVHICwKIyA2NDQgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuZGVm
IgpTVFJJQ1RfTE9XX1BBUlQgLAoKCgoKCkNPTkNBVCAsCgoKCgpNRU0gLAoKCgoKCkxBQkVMX1JF
RiAsCgoKCgoKU1lNQk9MX1JFRiAsCgoKCgoKCkNDMCAsCiMgNjgzICIuLi8uLi9lZ2NjLTMuMS1D
VlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKQUREUkVTU09GICwKIyA3MDEgIi4uLy4uL2VnY2MtMy4x
LUNWUzIwMDIwNDE4L2djYy9ydGwuZGVmIgpRVUVVRUQgLAojIDcxMyAiLi4vLi4vZWdjYy0zLjEt
Q1ZTMjAwMjA0MTgvZ2NjL3J0bC5kZWYiCklGX1RIRU5fRUxTRSAsCiMgNzIyICIuLi8uLi9lZ2Nj
LTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKQ09ORCAsCgoKQ09NUEFSRSAsCgoKUExVUyAs
CgoKTUlOVVMgLAoKCk5FRyAsCgpNVUxUICwKCgpESVYgLAoKTU9EICwKCgpVRElWICwKVU1PRCAs
CgoKQU5EICwKCklPUiAsCgpYT1IgLAoKTk9UICwKCgoKCkFTSElGVCAsClJPVEFURSAsCkFTSElG
VFJUICwKTFNISUZUUlQgLApST1RBVEVSVCAsCgoKCgoKU01JTiAsClNNQVggLApVTUlOICwKVU1B
WCAsCiMgNzgxICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKUFJFX0RF
QyAsClBSRV9JTkMgLApQT1NUX0RFQyAsClBPU1RfSU5DICwKIyA3OTggIi4uLy4uL2VnY2MtMy4x
LUNWUzIwMDIwNDE4L2djYy9ydGwuZGVmIgpQUkVfTU9ESUZZICwKUE9TVF9NT0RJRlkgLAoKCgpO
RSAsCkVRICwKR0UgLApHVCAsCkxFICwKTFQgLApHRVUgLApHVFUgLApMRVUgLApMVFUgLAoKClVO
T1JERVJFRCAsCk9SREVSRUQgLAoKClVORVEgLApVTkdFICwKVU5HVCAsClVOTEUgLApVTkxUICwK
CgpMVEdUICwKCgoKClNJR05fRVhURU5EICwKCgpaRVJPX0VYVEVORCAsCgoKVFJVTkNBVEUgLAoK
CkZMT0FUX0VYVEVORCAsCkZMT0FUX1RSVU5DQVRFICwKCgpGTE9BVCAsCgoKCgoKCgpGSVggLAoK
ClVOU0lHTkVEX0ZMT0FUICwKCgoKClVOU0lHTkVEX0ZJWCAsCgoKQUJTICwKCgpTUVJUICwKCgoK
CkZGUyAsCiMgODgyICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKU0lH
Tl9FWFRSQUNUICwKCgpaRVJPX0VYVFJBQ1QgLAoKCgoKSElHSCAsCgoKCkxPX1NVTSAsCiMgOTA3
ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKUkFOR0VfSU5GTyAsCiMg
OTIyICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKUkFOR0VfUkVHICwK
CgoKCgpSQU5HRV9WQVIgLAoKCgpSQU5HRV9MSVZFICwKCgoKCkNPTlNUQU5UX1BfUlRYICwKIyA5
NTggIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuZGVmIgpDQUxMX1BMQUNFSE9M
REVSICwKCgoKCgoKVkVDX01FUkdFICwKCgoKCgpWRUNfU0VMRUNUICwKCgoKClZFQ19DT05DQVQg
LAoKCgoKClZFQ19EVVBMSUNBVEUgLAoKClNTX1BMVVMgLAoKClVTX1BMVVMgLAoKClNTX01JTlVT
ICwKCgpVU19NSU5VUyAsCgoKU1NfVFJVTkNBVEUgLAoKClVTX1RSVU5DQVRFICwKIyAxMDE0ICIu
Li8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmRlZiIKUEhJICwKIyA0NSAiLi4vLi4v
ZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5oIiAyCgoKICBMQVNUX0FORF9VTlVTRURfUlRY
X0NPREV9OwoKCgoKCgpleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBydHhfbGVuZ3RoWygoaW50
KSBMQVNUX0FORF9VTlVTRURfUlRYX0NPREUpXTsKCgpleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0
IHJ0eF9uYW1lWygoaW50KSBMQVNUX0FORF9VTlVTRURfUlRYX0NPREUpXTsKCgpleHRlcm4gY29u
c3QgY2hhciAqIGNvbnN0IHJ0eF9mb3JtYXRbKChpbnQpIExBU1RfQU5EX1VOVVNFRF9SVFhfQ09E
RSldOwoKCmV4dGVybiBjb25zdCBjaGFyIHJ0eF9jbGFzc1soKGludCkgTEFTVF9BTkRfVU5VU0VE
X1JUWF9DT0RFKV07CgoKCgp0eXBlZGVmIHN0cnVjdAp7CgogIHVuc2lnbmVkIG1pbl9hbGlnbjog
ODsKCiAgdW5zaWduZWQgYmFzZV9hZnRlcl92ZWM6IDE7CiAgdW5zaWduZWQgbWluX2FmdGVyX3Zl
YzogMTsKCiAgdW5zaWduZWQgbWF4X2FmdGVyX3ZlYzogMTsKCiAgdW5zaWduZWQgbWluX2FmdGVy
X2Jhc2U6IDE7CgogIHVuc2lnbmVkIG1heF9hZnRlcl9iYXNlOiAxOwoKCiAgdW5zaWduZWQgb2Zm
c2V0X3Vuc2lnbmVkOiAxOwogIHVuc2lnbmVkIDogMjsKICB1bnNpZ25lZCBzY2FsZSA6IDg7Cn0g
YWRkcl9kaWZmX3ZlY19mbGFnczsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgbG9uZyBsb25nIGFs
aWFzOwogIHRyZWUgZXhwcjsKICBydHggb2Zmc2V0OwogIHJ0eCBzaXplOwogIHVuc2lnbmVkIGlu
dCBhbGlnbjsKfSBtZW1fYXR0cnM7CgoKCnR5cGVkZWYgdW5pb24gcnR1bmlvbl9kZWYKewogIGxv
bmcgbG9uZyBydHdpbnQ7CiAgaW50IHJ0aW50OwogIHVuc2lnbmVkIGludCBydHVpbnQ7CiAgY29u
c3QgY2hhciAqcnRzdHI7CiAgcnR4IHJ0eDsKICBydHZlYyBydHZlYzsKICBlbnVtIG1hY2hpbmVf
bW9kZSBydHR5cGU7CiAgYWRkcl9kaWZmX3ZlY19mbGFncyBydF9hZGRyX2RpZmZfdmVjX2ZsYWdz
OwogIHN0cnVjdCBjc2VsaWJfdmFsX3N0cnVjdCAqcnRfY3NlbGliOwogIHN0cnVjdCBiaXRtYXBf
aGVhZF9kZWYgKnJ0Yml0OwogIHRyZWUgcnR0cmVlOwogIHN0cnVjdCBiYXNpY19ibG9ja19kZWYg
KmJiOwogIG1lbV9hdHRycyAqcnRtZW07Cn0gcnR1bmlvbjsKCgoKc3RydWN0IHJ0eF9kZWYKewoK
ICBlbnVtIHJ0eF9jb2RlIGNvZGU6IDE2OwoKCiAgZW51bSBtYWNoaW5lX21vZGUgbW9kZSA6IDg7
CgoKCgoKCiAgdW5zaWduZWQgaW50IGp1bXAgOiAxOwoKCiAgdW5zaWduZWQgaW50IGNhbGwgOiAx
OwojIDE0OSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5oIgogIHVuc2lnbmVk
IGludCB1bmNoYW5naW5nIDogMTsKCgoKCgoKCiAgdW5zaWduZWQgaW50IHZvbGF0aWwgOiAxOwoj
IDE3NSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5oIgogIHVuc2lnbmVkIGlu
dCBpbl9zdHJ1Y3QgOiAxOwoKCgoKCgogIHVuc2lnbmVkIGludCB1c2VkIDogMTsKCgoKCiAgdW5z
aWduZWQgaW50ZWdyYXRlZCA6IDE7CiMgMTk2ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9n
Y2MvcnRsLmgiCiAgdW5zaWduZWQgZnJhbWVfcmVsYXRlZCA6IDE7CgoKCgogIHJ0dW5pb24gZmxk
WzFdOwp9OwojIDIyMiAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5oIgpzdHJ1
Y3QgcnR2ZWNfZGVmIHsKICBpbnQgbnVtX2VsZW07CiAgcnR4IGVsZW1bMV07Cn07CiMgNDUxICIu
Li8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmgiCmVudW0gcmVnX25vdGUKewoKCgog
IFJFR19ERUFEID0gMSwKCgogIFJFR19JTkMsCiMgNDcwICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAy
MDQxOC9nY2MvcnRsLmgiCiAgUkVHX0VRVUlWLAoKCgoKICBSRUdfRVFVQUwsCgoKCgoKICBSRUdf
V0FTXzAsCgoKCgoKICBSRUdfUkVUVkFMLAoKCgoKICBSRUdfTElCQ0FMTCwKCgoKCgoKICBSRUdf
Tk9OTkVHLAoKCgogIFJFR19OT19DT05GTElDVCwKCgogIFJFR19VTlVTRUQsCiMgNTE1ICIuLi8u
Li9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmgiCiAgUkVHX0NDX1NFVFRFUiwgUkVHX0ND
X1VTRVIsCgoKCgogIFJFR19MQUJFTCwKCgoKCgogIFJFR19ERVBfQU5USSwgUkVHX0RFUF9PVVRQ
VVQsCgoKCgoKICBSRUdfQlJfUFJPQiwKCgoKCiAgUkVHX0VYRUNfQ09VTlQsCgoKCiAgUkVHX05P
QUxJQVMsCgoKCiAgUkVHX1NBVkVfQVJFQSwKCgoKCgogIFJFR19CUl9QUkVELAoKCgoKICBSRUdf
RlJBTUVfUkVMQVRFRF9FWFBSLAoKCgoKICBSRUdfRUhfQ09OVEVYVCwKCgoKCgogIFJFR19FSF9S
RUdJT04sCgoKICBSRUdfU0FWRV9OT1RFLAoKCgoKCiAgUkVHX01BWUJFX0RFQUQsCgoKICBSRUdf
Tk9SRVRVUk4sCgoKCiAgUkVHX05PTl9MT0NBTF9HT1RPLAoKCgogIFJFR19TRVRKTVAsCgoKICBS
RUdfQUxXQVlTX1JFVFVSTiwKCgoKICBSRUdfVlRBQkxFX1JFRgp9OwojIDYwNyAiLi4vLi4vZWdj
Yy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5oIgpleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IHJl
Z19ub3RlX25hbWVbXTsKIyA2NjMgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwu
aCIKZW51bSBpbnNuX25vdGUKewoKICBOT1RFX0lOU05fQklBUyA9IC0xMDAsCgoKCiAgTk9URV9J
TlNOX0RFTEVURUQsCgoKCiAgTk9URV9JTlNOX0JMT0NLX0JFRywKICBOT1RFX0lOU05fQkxPQ0tf
RU5ELAoKCiAgTk9URV9JTlNOX0xPT1BfQkVHLAogIE5PVEVfSU5TTl9MT09QX0VORCwKCgogIE5P
VEVfSU5TTl9MT09QX0NPTlQsCgogIE5PVEVfSU5TTl9MT09QX1ZUT1AsCgoKCgoKICBOT1RFX0lO
U05fTE9PUF9FTkRfVE9QX0NPTkQsCgoKCgoKCiAgTk9URV9JTlNOX0ZVTkNUSU9OX0VORCwKCgog
IE5PVEVfSU5TTl9QUk9MT0dVRV9FTkQsCgoKICBOT1RFX0lOU05fRVBJTE9HVUVfQkVHLAoKCiAg
Tk9URV9JTlNOX0RFTEVURURfTEFCRUwsCgoKCgogIE5PVEVfSU5TTl9GVU5DVElPTl9CRUcsCgoK
CiAgTk9URV9JTlNOX0VIX1JFR0lPTl9CRUcsCiAgTk9URV9JTlNOX0VIX1JFR0lPTl9FTkQsCgoK
CgogIE5PVEVfSU5TTl9SRVBFQVRFRF9MSU5FX05VTUJFUiwKCgoKICBOT1RFX0lOU05fUkFOR0Vf
QkVHLAogIE5PVEVfSU5TTl9SQU5HRV9FTkQsCgoKICBOT1RFX0lOU05fTElWRSwKCgogIE5PVEVf
SU5TTl9CQVNJQ19CTE9DSywKCgoKICBOT1RFX0lOU05fRVhQRUNURURfVkFMVUUsCgogIE5PVEVf
SU5TTl9NQVgKfTsKCgoKZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBub3RlX2luc25fbmFtZVtO
T1RFX0lOU05fTUFYIC0gTk9URV9JTlNOX0JJQVNdOwojIDg0MCAiLi4vLi4vZWdjYy0zLjEtQ1ZT
MjAwMjA0MTgvZ2NjL3J0bC5oIgpleHRlcm4gdW5zaWduZWQgaW50IHN1YnJlZ19sc2IgKHJ0eCk7
CmV4dGVybiB1bnNpZ25lZCBpbnQgc3VicmVnX3JlZ25vX29mZnNldCAodW5zaWduZWQgaW50LCBl
bnVtIG1hY2hpbmVfbW9kZSwgdW5zaWduZWQgaW50LCBlbnVtIG1hY2hpbmVfbW9kZSk7CgoKCmV4
dGVybiB1bnNpZ25lZCBpbnQgc3VicmVnX3JlZ25vIChydHgpOwojIDEyMTEgIi4uLy4uL2VnY2Mt
My4xLUNWUzIwMDIwNDE4L2djYy9ydGwuaCIKZXh0ZXJuIGludCBydHhfZXF1YWxfZnVuY3Rpb25f
dmFsdWVfbWF0dGVyczsKCgpleHRlcm4gaW50IGdlbmVyYXRpbmdfY29uY2F0X3A7CgoKCgpleHRl
cm4gaW50IGNlaWxfbG9nMiAodW5zaWduZWQgbG9uZyBsb25nKTsKCgoKCmV4dGVybiBydHggZXhw
YW5kX2J1aWx0aW5fZXhwZWN0X2p1bXAgKHRyZWUsIHJ0eCwgcnR4KTsKCgpleHRlcm4gdm9pZCBz
ZXRfc3RhY2tfY2hlY2tfbGliZnVuYyAocnR4KTsKZXh0ZXJuIGxvbmcgbG9uZyB0cnVuY19pbnRf
Zm9yX21vZGUgKGxvbmcgbG9uZywgZW51bSBtYWNoaW5lX21vZGUpOwoKZXh0ZXJuIHJ0eCBwbHVz
X2NvbnN0YW50X3dpZGUgKHJ0eCwgbG9uZyBsb25nKTsKZXh0ZXJuIHJ0eCBwbHVzX2NvbnN0YW50
X2Zvcl9vdXRwdXRfd2lkZSAocnR4LCBsb25nIGxvbmcpOwpleHRlcm4gdm9pZCBvcHRpbWl6ZV9z
YXZlX2FyZWFfYWxsb2NhIChydHgpOwoKCmV4dGVybiBydHggZ2VuX3J0eCAoZW51bSBydHhfY29k
ZSwgZW51bSBtYWNoaW5lX21vZGUsIC4uLik7CgpleHRlcm4gcnR2ZWMgZ2VuX3J0dmVjIChpbnQs
IC4uLik7CmV4dGVybiBydHggY29weV9pbnNuXzEgKHJ0eCk7CmV4dGVybiBydHggY29weV9pbnNu
IChydHgpOwoKCmV4dGVybiBydHggcnR4X2FsbG9jIChlbnVtIHJ0eF9jb2RlKTsKZXh0ZXJuIHJ0
dmVjIHJ0dmVjX2FsbG9jIChpbnQpOwpleHRlcm4gcnR4IGNvcHlfcnR4IChydHgpOwoKCmV4dGVy
biBydHggY29weV9ydHhfaWZfc2hhcmVkIChydHgpOwoKCmV4dGVybiBydHggY29weV9tb3N0X3J0
eCAocnR4LCBydHgpOwpleHRlcm4gcnR4IHNoYWxsb3dfY29weV9ydHggKHJ0eCk7CmV4dGVybiBp
bnQgcnR4X2VxdWFsX3AgKHJ0eCwgcnR4KTsKCgpleHRlcm4gcnR2ZWMgZ2VuX3J0dmVjX3YgKGlu
dCwgcnR4ICopOwpleHRlcm4gcnR4IGdlbl9yZWdfcnR4IChlbnVtIG1hY2hpbmVfbW9kZSk7CmV4
dGVybiBydHggZ2VuX2xhYmVsX3J0eCAodm9pZCk7CmV4dGVybiBpbnQgc3VicmVnX2hhcmRfcmVn
bm8gKHJ0eCwgaW50KTsKZXh0ZXJuIHJ0eCBnZW5fbG93cGFydF9jb21tb24gKGVudW0gbWFjaGlu
ZV9tb2RlLCBydHgpOwpleHRlcm4gcnR4IGdlbl9sb3dwYXJ0IChlbnVtIG1hY2hpbmVfbW9kZSwg
cnR4KTsKCgpleHRlcm4gcnR4IGdlbl9sb3dwYXJ0X2lmX3Bvc3NpYmxlIChlbnVtIG1hY2hpbmVf
bW9kZSwgcnR4KTsKCgpleHRlcm4gcnR4IGdlbl9oaWdocGFydCAoZW51bSBtYWNoaW5lX21vZGUs
IHJ0eCk7CmV4dGVybiBydHggZ2VuX2hpZ2hwYXJ0X21vZGUgKGVudW0gbWFjaGluZV9tb2RlLCBl
bnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsKCmV4dGVybiBydHggZ2VuX3JlYWxwYXJ0IChlbnVtIG1h
Y2hpbmVfbW9kZSwgcnR4KTsKZXh0ZXJuIHJ0eCBnZW5faW1hZ3BhcnQgKGVudW0gbWFjaGluZV9t
b2RlLCBydHgpOwpleHRlcm4gcnR4IG9wZXJhbmRfc3Vid29yZCAocnR4LCB1bnNpZ25lZCBpbnQs
IGludCwgZW51bSBtYWNoaW5lX21vZGUpOwoKZXh0ZXJuIHJ0eCBjb25zdGFudF9zdWJ3b3JkIChy
dHgsIGludCwgZW51bSBtYWNoaW5lX21vZGUpOwoKCgpleHRlcm4gcnR4IG9wZXJhbmRfc3Vid29y
ZF9mb3JjZSAocnR4LCB1bnNpZ25lZCBpbnQsIGVudW0gbWFjaGluZV9tb2RlKTsKCmV4dGVybiBp
bnQgc3VicmVnX2xvd3BhcnRfcCAocnR4KTsKZXh0ZXJuIHVuc2lnbmVkIGludCBzdWJyZWdfbG93
cGFydF9vZmZzZXQgKGVudW0gbWFjaGluZV9tb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSk7CgpleHRl
cm4gdW5zaWduZWQgaW50IHN1YnJlZ19oaWdocGFydF9vZmZzZXQgKGVudW0gbWFjaGluZV9tb2Rl
LCBlbnVtIG1hY2hpbmVfbW9kZSk7CgpleHRlcm4gcnR4IG1ha2Vfc2FmZV9mcm9tIChydHgsIHJ0
eCk7CmV4dGVybiBydHggY29udmVydF9tZW1vcnlfYWRkcmVzcyAoZW51bSBtYWNoaW5lX21vZGUs
IHJ0eCk7CmV4dGVybiBydHggZ2V0X2luc25zICh2b2lkKTsKZXh0ZXJuIGNvbnN0IGNoYXIgKmdl
dF9pbnNuX25hbWUgKGludCk7CmV4dGVybiBydHggZ2V0X2xhc3RfaW5zbiAodm9pZCk7CmV4dGVy
biBydHggZ2V0X2xhc3RfaW5zbl9hbnl3aGVyZSAodm9pZCk7CmV4dGVybiB2b2lkIHN0YXJ0X3Nl
cXVlbmNlICh2b2lkKTsKZXh0ZXJuIHZvaWQgcHVzaF90b19zZXF1ZW5jZSAocnR4KTsKZXh0ZXJu
IHZvaWQgZW5kX3NlcXVlbmNlICh2b2lkKTsKZXh0ZXJuIHZvaWQgcHVzaF90b19mdWxsX3NlcXVl
bmNlIChydHgsIHJ0eCk7CmV4dGVybiB2b2lkIGVuZF9mdWxsX3NlcXVlbmNlIChydHgqLCBydHgq
KTsKZXh0ZXJuIHJ0eCBnZW5fc2VxdWVuY2UgKHZvaWQpOwoKCmV4dGVybiBydHggaW1tZWRfZG91
YmxlX2NvbnN0IChsb25nIGxvbmcsIGxvbmcgbG9uZywgZW51bSBtYWNoaW5lX21vZGUpOwpleHRl
cm4gcnR4IG1lbV9mb3JfY29uc3RfZG91YmxlIChydHgpOwpleHRlcm4gcnR4IGZvcmNlX2NvbnN0
X21lbSAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CgoKZXh0ZXJuIHJ0eCBnZXRfcG9vbF9jb25z
dGFudCAocnR4KTsKZXh0ZXJuIHJ0eCBnZXRfcG9vbF9jb25zdGFudF9tYXJrIChydHgsIF9Cb29s
ICopOwpleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgZ2V0X3Bvb2xfbW9kZSAocnR4KTsKZXh0ZXJu
IHJ0eCBnZXRfcG9vbF9jb25zdGFudF9mb3JfZnVuY3Rpb24gKHN0cnVjdCBmdW5jdGlvbiAqLCBy
dHgpOwpleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgZ2V0X3Bvb2xfbW9kZV9mb3JfZnVuY3Rpb24g
KHN0cnVjdCBmdW5jdGlvbiAqLCBydHgpOwpleHRlcm4gaW50IGdldF9wb29sX29mZnNldCAocnR4
KTsKZXh0ZXJuIHJ0eCBzaW1wbGlmeV9zdWJ0cmFjdGlvbiAocnR4KTsKCgpleHRlcm4gcnR4IGFz
c2lnbl9zdGFja19sb2NhbCAoZW51bSBtYWNoaW5lX21vZGUsIGxvbmcgbG9uZywgaW50KTsKCmV4
dGVybiBydHggYXNzaWduX3N0YWNrX3RlbXAgKGVudW0gbWFjaGluZV9tb2RlLCBsb25nIGxvbmcs
IGludCk7CgpleHRlcm4gcnR4IGFzc2lnbl9zdGFja190ZW1wX2Zvcl90eXBlIChlbnVtIG1hY2hp
bmVfbW9kZSwgbG9uZyBsb25nLCBpbnQsIHRyZWUpOwoKZXh0ZXJuIHJ0eCBhc3NpZ25fdGVtcCAo
dHJlZSwgaW50LCBpbnQsIGludCk7CgpleHRlcm4gcnR4IGVtaXRfaW5zbl9iZWZvcmUgKHJ0eCwg
cnR4KTsKZXh0ZXJuIHJ0eCBlbWl0X2p1bXBfaW5zbl9iZWZvcmUgKHJ0eCwgcnR4KTsKZXh0ZXJu
IHJ0eCBlbWl0X2NhbGxfaW5zbl9iZWZvcmUgKHJ0eCwgcnR4KTsKZXh0ZXJuIHJ0eCBlbWl0X2Jh
cnJpZXJfYmVmb3JlIChydHgpOwpleHRlcm4gcnR4IGVtaXRfbGFiZWxfYmVmb3JlIChydHgsIHJ0
eCk7CmV4dGVybiBydHggZW1pdF9ub3RlX2JlZm9yZSAoaW50LCBydHgpOwpleHRlcm4gcnR4IGVt
aXRfaW5zbl9hZnRlciAocnR4LCBydHgpOwpleHRlcm4gcnR4IGVtaXRfanVtcF9pbnNuX2FmdGVy
IChydHgsIHJ0eCk7CmV4dGVybiBydHggZW1pdF9iYXJyaWVyX2FmdGVyIChydHgpOwpleHRlcm4g
cnR4IGVtaXRfbGFiZWxfYWZ0ZXIgKHJ0eCwgcnR4KTsKZXh0ZXJuIHJ0eCBlbWl0X25vdGVfYWZ0
ZXIgKGludCwgcnR4KTsKZXh0ZXJuIHJ0eCBlbWl0X2xpbmVfbm90ZV9hZnRlciAoY29uc3QgY2hh
ciAqLCBpbnQsIHJ0eCk7CmV4dGVybiBydHggZW1pdF9pbnNuIChydHgpOwpleHRlcm4gcnR4IGVt
aXRfaW5zbnMgKHJ0eCk7CmV4dGVybiBydHggZW1pdF9pbnNuc19iZWZvcmUgKHJ0eCwgcnR4KTsK
ZXh0ZXJuIHJ0eCBlbWl0X2luc25zX2FmdGVyIChydHgsIHJ0eCk7CmV4dGVybiBydHggZW1pdF9q
dW1wX2luc24gKHJ0eCk7CmV4dGVybiBydHggZW1pdF9jYWxsX2luc24gKHJ0eCk7CmV4dGVybiBy
dHggZW1pdF9sYWJlbCAocnR4KTsKZXh0ZXJuIHJ0eCBlbWl0X2JhcnJpZXIgKHZvaWQpOwpleHRl
cm4gcnR4IGVtaXRfbGluZV9ub3RlIChjb25zdCBjaGFyICosIGludCk7CmV4dGVybiBydHggZW1p
dF9ub3RlIChjb25zdCBjaGFyICosIGludCk7CmV4dGVybiBydHggZW1pdF9saW5lX25vdGVfZm9y
Y2UgKGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJuIHJ0eCBtYWtlX2luc25fcmF3IChydHgpOwpl
eHRlcm4gcnR4IHByZXZpb3VzX2luc24gKHJ0eCk7CmV4dGVybiBydHggbmV4dF9pbnNuIChydHgp
OwpleHRlcm4gcnR4IHByZXZfbm9ubm90ZV9pbnNuIChydHgpOwpleHRlcm4gcnR4IG5leHRfbm9u
bm90ZV9pbnNuIChydHgpOwpleHRlcm4gcnR4IHByZXZfcmVhbF9pbnNuIChydHgpOwpleHRlcm4g
cnR4IG5leHRfcmVhbF9pbnNuIChydHgpOwpleHRlcm4gcnR4IHByZXZfYWN0aXZlX2luc24gKHJ0
eCk7CmV4dGVybiBydHggbmV4dF9hY3RpdmVfaW5zbiAocnR4KTsKZXh0ZXJuIGludCBhY3RpdmVf
aW5zbl9wIChydHgpOwpleHRlcm4gcnR4IHByZXZfbGFiZWwgKHJ0eCk7CmV4dGVybiBydHggbmV4
dF9sYWJlbCAocnR4KTsKZXh0ZXJuIHJ0eCBuZXh0X2NjMF91c2VyIChydHgpOwpleHRlcm4gcnR4
IHByZXZfY2MwX3NldHRlciAocnR4KTsKCgpleHRlcm4gcnR4IG5leHRfbm9uZGVsZXRlZF9pbnNu
IChydHgpOwpleHRlcm4gZW51bSBydHhfY29kZSByZXZlcnNlX2NvbmRpdGlvbiAoZW51bSBydHhf
Y29kZSk7CmV4dGVybiBlbnVtIHJ0eF9jb2RlIHJldmVyc2VfY29uZGl0aW9uX21heWJlX3Vub3Jk
ZXJlZCAoZW51bSBydHhfY29kZSk7CmV4dGVybiBlbnVtIHJ0eF9jb2RlIHN3YXBfY29uZGl0aW9u
IChlbnVtIHJ0eF9jb2RlKTsKZXh0ZXJuIGVudW0gcnR4X2NvZGUgdW5zaWduZWRfY29uZGl0aW9u
IChlbnVtIHJ0eF9jb2RlKTsKZXh0ZXJuIGVudW0gcnR4X2NvZGUgc2lnbmVkX2NvbmRpdGlvbiAo
ZW51bSBydHhfY29kZSk7CmV4dGVybiB2b2lkIG1hcmtfanVtcF9sYWJlbCAocnR4LCBydHgsIGlu
dCk7CmV4dGVybiB2b2lkIGNsZWFudXBfYmFycmllcnMgKHZvaWQpOwoKCmV4dGVybiBfQm9vbCBz
cXVlZXplX25vdGVzIChydHggKiwgcnR4ICopOwpleHRlcm4gcnR4IGRlbGV0ZV9yZWxhdGVkX2lu
c25zIChydHgpOwpleHRlcm4gdm9pZCBkZWxldGVfanVtcCAocnR4KTsKZXh0ZXJuIHZvaWQgZGVs
ZXRlX2JhcnJpZXIgKHJ0eCk7CmV4dGVybiBydHggZ2V0X2xhYmVsX2JlZm9yZSAocnR4KTsKZXh0
ZXJuIHJ0eCBnZXRfbGFiZWxfYWZ0ZXIgKHJ0eCk7CmV4dGVybiBydHggZm9sbG93X2p1bXBzIChy
dHgpOwoKCmV4dGVybiBydHggKmZpbmRfY29uc3RhbnRfdGVybV9sb2MgKHJ0eCAqKTsKCgpleHRl
cm4gcnR4IHRyeV9zcGxpdCAocnR4LCBydHgsIGludCk7CmV4dGVybiBpbnQgc3BsaXRfYnJhbmNo
X3Byb2JhYmlsaXR5OwoKCmV4dGVybiBydHggc3BsaXRfaW5zbnMgKHJ0eCwgcnR4KTsKCgpleHRl
cm4gcnR4IHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbiAoZW51bSBydHhfY29kZSwgZW51bSBtYWNo
aW5lX21vZGUsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOwoKCmV4dGVybiBydHggc2ltcGxpZnlf
YmluYXJ5X29wZXJhdGlvbiAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwg
cnR4KTsKCgpleHRlcm4gcnR4IHNpbXBsaWZ5X3Rlcm5hcnlfb3BlcmF0aW9uIChlbnVtIHJ0eF9j
b2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwgZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgcnR4LCBydHgp
OwoKCgpleHRlcm4gcnR4IHNpbXBsaWZ5X3JlbGF0aW9uYWxfb3BlcmF0aW9uIChlbnVtIHJ0eF9j
b2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBydHgpOwoKCmV4dGVybiBydHggc2ltcGxpZnlf
Z2VuX2JpbmFyeSAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgcnR4KTsK
CgpleHRlcm4gcnR4IHNpbXBsaWZ5X2dlbl91bmFyeSAoZW51bSBydHhfY29kZSwgZW51bSBtYWNo
aW5lX21vZGUsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOwoKCmV4dGVybiBydHggc2ltcGxpZnlf
Z2VuX3Rlcm5hcnkgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLCBlbnVtIG1hY2hp
bmVfbW9kZSwgcnR4LCBydHgsIHJ0eCk7CgoKCmV4dGVybiBydHggc2ltcGxpZnlfZ2VuX3JlbGF0
aW9uYWwgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLCBlbnVtIG1hY2hpbmVfbW9k
ZSwgcnR4LCBydHgpOwoKCgpleHRlcm4gcnR4IHNpbXBsaWZ5X3N1YnJlZyAoZW51bSBtYWNoaW5l
X21vZGUsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIHVuc2lnbmVkIGludCk7CgoKCmV4dGVybiBy
dHggc2ltcGxpZnlfZ2VuX3N1YnJlZyAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgZW51bSBtYWNo
aW5lX21vZGUsIHVuc2lnbmVkIGludCk7CgoKCmV4dGVybiBydHggc2ltcGxpZnlfcmVwbGFjZV9y
dHggKHJ0eCwgcnR4LCBydHgpOwpleHRlcm4gcnR4IHNpbXBsaWZ5X3J0eCAocnR4KTsKZXh0ZXJu
IHJ0eCBhdm9pZF9jb25zdGFudF9wb29sX3JlZmVyZW5jZSAocnR4KTsKCgpleHRlcm4gcnR4IGdl
bl9tZW1fYWRkcmVzc29mIChydHgsIHRyZWUpOwoKCmV4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBj
aG9vc2VfaGFyZF9yZWdfbW9kZSAodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwoKCgpleHRl
cm4gcnR4IHNldF91bmlxdWVfcmVnX25vdGUgKHJ0eCwgZW51bSByZWdfbm90ZSwgcnR4KTsKIyAx
NDQ2ICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmgiCmV4dGVybiBpbnQgcnR4
X2FkZHJfY2FuX3RyYXBfcCAocnR4KTsKZXh0ZXJuIGludCBydHhfdW5zdGFibGVfcCAocnR4KTsK
ZXh0ZXJuIGludCBydHhfdmFyaWVzX3AgKHJ0eCwgaW50KTsKZXh0ZXJuIGludCBydHhfYWRkcl92
YXJpZXNfcCAocnR4LCBpbnQpOwpleHRlcm4gbG9uZyBsb25nIGdldF9pbnRlZ2VyX3Rlcm0gKHJ0
eCk7CmV4dGVybiBydHggZ2V0X3JlbGF0ZWRfdmFsdWUgKHJ0eCk7CmV4dGVybiBydHggZ2V0X2p1
bXBfdGFibGVfb2Zmc2V0IChydHgsIHJ0eCAqKTsKZXh0ZXJuIGludCByZWdfbWVudGlvbmVkX3Ag
KHJ0eCwgcnR4KTsKZXh0ZXJuIGludCBjb3VudF9vY2N1cnJlbmNlcyAocnR4LCBydHgsIGludCk7
CmV4dGVybiBpbnQgcmVnX3JlZmVyZW5jZWRfcCAocnR4LCBydHgpOwpleHRlcm4gaW50IHJlZ191
c2VkX2JldHdlZW5fcCAocnR4LCBydHgsIHJ0eCk7CmV4dGVybiBpbnQgcmVnX3JlZmVyZW5jZWRf
YmV0d2Vlbl9wIChydHgsIHJ0eCwgcnR4KTsKZXh0ZXJuIGludCByZWdfc2V0X2JldHdlZW5fcCAo
cnR4LCBydHgsIHJ0eCk7CmV4dGVybiBpbnQgcmVnc19zZXRfYmV0d2Vlbl9wIChydHgsIHJ0eCwg
cnR4KTsKZXh0ZXJuIGludCBjb21tdXRhdGl2ZV9vcGVyYW5kX3ByZWNlZGVuY2UgKHJ0eCk7CmV4
dGVybiBpbnQgc3dhcF9jb21tdXRhdGl2ZV9vcGVyYW5kc19wIChydHgsIHJ0eCk7CmV4dGVybiBp
bnQgbW9kaWZpZWRfYmV0d2Vlbl9wIChydHgsIHJ0eCwgcnR4KTsKZXh0ZXJuIGludCBub19sYWJl
bHNfYmV0d2Vlbl9wIChydHgsIHJ0eCk7CmV4dGVybiBpbnQgbm9fanVtcHNfYmV0d2Vlbl9wIChy
dHgsIHJ0eCk7CmV4dGVybiBpbnQgbW9kaWZpZWRfaW5fcCAocnR4LCBydHgpOwpleHRlcm4gaW50
IGluc25fZGVwZW5kZW50X3AgKHJ0eCwgcnR4KTsKZXh0ZXJuIGludCByZWdfc2V0X3AgKHJ0eCwg
cnR4KTsKZXh0ZXJuIHJ0eCBzaW5nbGVfc2V0XzIgKHJ0eCwgcnR4KTsKZXh0ZXJuIGludCBtdWx0
aXBsZV9zZXRzIChydHgpOwpleHRlcm4gaW50IHNldF9ub29wX3AgKHJ0eCk7CmV4dGVybiBpbnQg
bm9vcF9tb3ZlX3AgKHJ0eCk7CmV4dGVybiBydHggZmluZF9sYXN0X3ZhbHVlIChydHgsIHJ0eCAq
LCBydHgsIGludCk7CmV4dGVybiBpbnQgcmVmZXJzX3RvX3JlZ25vX3AgKHVuc2lnbmVkIGludCwg
dW5zaWduZWQgaW50LCBydHgsIHJ0eCAqKTsKCmV4dGVybiBpbnQgcmVnX292ZXJsYXBfbWVudGlv
bmVkX3AgKHJ0eCwgcnR4KTsKZXh0ZXJuIHJ0eCBzZXRfb2YgKHJ0eCwgcnR4KTsKZXh0ZXJuIHZv
aWQgbm90ZV9zdG9yZXMgKHJ0eCwgdm9pZCAoKikgKHJ0eCwgcnR4LCB2b2lkICopLCB2b2lkICop
OwoKCmV4dGVybiB2b2lkIG5vdGVfdXNlcyAocnR4ICosIHZvaWQgKCopIChydHggKiwgdm9pZCAq
KSwgdm9pZCAqKTsKCgpleHRlcm4gcnR4IHJlZ19zZXRfbGFzdCAocnR4LCBydHgpOwpleHRlcm4g
aW50IGRlYWRfb3Jfc2V0X3AgKHJ0eCwgcnR4KTsKZXh0ZXJuIGludCBkZWFkX29yX3NldF9yZWdu
b19wIChydHgsIHVuc2lnbmVkIGludCk7CmV4dGVybiBydHggZmluZF9yZWdfbm90ZSAocnR4LCBl
bnVtIHJlZ19ub3RlLCBydHgpOwpleHRlcm4gcnR4IGZpbmRfcmVnbm9fbm90ZSAocnR4LCBlbnVt
IHJlZ19ub3RlLCB1bnNpZ25lZCBpbnQpOwoKZXh0ZXJuIHJ0eCBmaW5kX3JlZ19lcXVhbF9lcXVp
dl9ub3RlIChydHgpOwpleHRlcm4gaW50IGZpbmRfcmVnX2Z1c2FnZSAocnR4LCBlbnVtIHJ0eF9j
b2RlLCBydHgpOwpleHRlcm4gaW50IGZpbmRfcmVnbm9fZnVzYWdlIChydHgsIGVudW0gcnR4X2Nv
ZGUsIHVuc2lnbmVkIGludCk7CgpleHRlcm4gaW50IHB1cmVfY2FsbF9wIChydHgpOwpleHRlcm4g
dm9pZCByZW1vdmVfbm90ZSAocnR4LCBydHgpOwpleHRlcm4gaW50IHNpZGVfZWZmZWN0c19wIChy
dHgpOwpleHRlcm4gaW50IHZvbGF0aWxlX3JlZnNfcCAocnR4KTsKZXh0ZXJuIGludCB2b2xhdGls
ZV9pbnNuX3AgKHJ0eCk7CmV4dGVybiBpbnQgbWF5X3RyYXBfcCAocnR4KTsKZXh0ZXJuIGludCBp
bmVxdWFsaXR5X2NvbXBhcmlzb25zX3AgKHJ0eCk7CmV4dGVybiBydHggcmVwbGFjZV9ydHggKHJ0
eCwgcnR4LCBydHgpOwpleHRlcm4gcnR4IHJlcGxhY2VfcmVncyAocnR4LCBydHggKiwgdW5zaWdu
ZWQgaW50LCBpbnQpOwoKZXh0ZXJuIGludCBjb21wdXRlZF9qdW1wX3AgKHJ0eCk7CnR5cGVkZWYg
aW50ICgqcnR4X2Z1bmN0aW9uKSAocnR4ICosIHZvaWQgKik7CmV4dGVybiBpbnQgZm9yX2VhY2hf
cnR4IChydHggKiwgcnR4X2Z1bmN0aW9uLCB2b2lkICopOwpleHRlcm4gcnR4IHJlZ25vX3VzZV9p
biAodW5zaWduZWQgaW50LCBydHgpOwpleHRlcm4gaW50IGF1dG9faW5jX3AgKHJ0eCk7CmV4dGVy
biBpbnQgaW5fZXhwcl9saXN0X3AgKHJ0eCwgcnR4KTsKZXh0ZXJuIHZvaWQgcmVtb3ZlX25vZGVf
ZnJvbV9leHByX2xpc3QgKHJ0eCwgcnR4ICopOwpleHRlcm4gaW50IGluc25zX3NhZmVfdG9fbW92
ZV9wIChydHgsIHJ0eCwgcnR4ICopOwpleHRlcm4gaW50IGxvY19tZW50aW9uZWRfaW5fcCAocnR4
ICosIHJ0eCk7CmV4dGVybiBydHggZmluZF9maXJzdF9wYXJhbWV0ZXJfbG9hZCAocnR4LCBydHgp
OwoKCgpleHRlcm4gcnR4IGZpbmRfdXNlX2FzX2FkZHJlc3MgKHJ0eCwgcnR4LCBsb25nIGxvbmcp
Owp2b2lkIGluaXRfRVhQUl9JTlNOX0xJU1RfY2FjaGUgKHZvaWQpOwp2b2lkIGZyZWVfRVhQUl9M
SVNUX2xpc3QgKHJ0eCAqKTsKdm9pZCBmcmVlX0lOU05fTElTVF9saXN0IChydHggKik7CnZvaWQg
ZnJlZV9FWFBSX0xJU1Rfbm9kZSAocnR4KTsKdm9pZCBmcmVlX0lOU05fTElTVF9ub2RlIChydHgp
OwpydHggYWxsb2NfSU5TTl9MSVNUIChydHgsIHJ0eCk7CnJ0eCBhbGxvY19FWFBSX0xJU1QgKGlu
dCwgcnR4LCBydHgpOwoKCgoKCgoKZXh0ZXJuIGludCBtYXhfcGFyYWxsZWw7CgoKZXh0ZXJuIHZv
aWQgZnJlZV9yZWdfaW5mbyAodm9pZCk7CgoKZXh0ZXJuIGludCBhc21fbm9wZXJhbmRzIChydHgp
OwpleHRlcm4gY29uc3QgY2hhciAqZGVjb2RlX2FzbV9vcGVyYW5kcyAocnR4LCBydHggKiwgcnR4
ICoqLCBjb25zdCBjaGFyICoqLCBlbnVtIG1hY2hpbmVfbW9kZSAqKTsKCgoKZXh0ZXJuIGVudW0g
cmVnX2NsYXNzIHJlZ19wcmVmZXJyZWRfY2xhc3MgKGludCk7CmV4dGVybiBlbnVtIHJlZ19jbGFz
cyByZWdfYWx0ZXJuYXRlX2NsYXNzIChpbnQpOwoKZXh0ZXJuIHJ0eCBnZXRfZmlyc3Rfbm9ucGFy
bV9pbnNuICh2b2lkKTsKCmV4dGVybiB2b2lkIHNwbGl0X2FsbF9pbnNucyAoaW50KTsKZXh0ZXJu
IHZvaWQgc3BsaXRfYWxsX2luc25zX25vZmxvdyAodm9pZCk7CgoKZXh0ZXJuIHJ0eCBjb25zdF9p
bnRfcnR4WzY0ICogMiArIDFdOwoKCgoKCmV4dGVybiBydHggY29uc3RfdHJ1ZV9ydHg7CgpleHRl
cm4gcnR4IGNvbnN0X3RpbnlfcnR4WzNdWyhpbnQpIE1BWF9NQUNISU5FX01PREVdOwojIDE1ODIg
Ii4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuaCIKZW51bSBnbG9iYWxfcnRsX2lu
ZGV4CnsKICBHUl9QQywKICBHUl9DQzAsCiAgR1JfU1RBQ0tfUE9JTlRFUiwKICBHUl9GUkFNRV9Q
T0lOVEVSLAojIDE1OTcgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9ydGwuaCIKICBH
Ul9IQVJEX0ZSQU1FX1BPSU5URVIsCgoKCgoKICBHUl9BUkdfUE9JTlRFUiwKCgogIEdSX1ZJUlRV
QUxfSU5DT01JTkdfQVJHUywKICBHUl9WSVJUVUFMX1NUQUNLX0FSR1MsCiAgR1JfVklSVFVBTF9T
VEFDS19EWU5BTUlDLAogIEdSX1ZJUlRVQUxfT1VUR09JTkdfQVJHUywKICBHUl9WSVJUVUFMX0NG
QSwKCiAgR1JfTUFYCn07CgoKZXh0ZXJuIHJ0eCBnbG9iYWxfcnRsW0dSX01BWF07CiMgMTYzMCAi
Li4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5oIgpleHRlcm4gcnR4IHBpY19vZmZz
ZXRfdGFibGVfcnR4OwpleHRlcm4gcnR4IHN0cnVjdF92YWx1ZV9ydHg7CmV4dGVybiBydHggc3Ry
dWN0X3ZhbHVlX2luY29taW5nX3J0eDsKZXh0ZXJuIHJ0eCBzdGF0aWNfY2hhaW5fcnR4OwpleHRl
cm4gcnR4IHN0YXRpY19jaGFpbl9pbmNvbWluZ19ydHg7CmV4dGVybiBydHggcmV0dXJuX2FkZHJl
c3NfcG9pbnRlcl9ydHg7CgoKCgojIDEgImdlbnJ0bC5oIiAxCgoKCgoKZXh0ZXJuIHJ0eCBnZW5f
cnR4X2ZtdF9zIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBjb25zdCBj
aGFyICphcmcwKTsKCmV4dGVybiBydHggZ2VuX3J0eF9mbXRfZWUgKGVudW0gcnR4X2NvZGUsIGVu
dW0gbWFjaGluZV9tb2RlIG1vZGUsIHJ0eCBhcmcwLCBydHggYXJnMSk7CgpleHRlcm4gcnR4IGdl
bl9ydHhfZm10X3VlIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBydHgg
YXJnMCwgcnR4IGFyZzEpOwoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9pc3MgKGVudW0gcnR4X2Nv
ZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIGludCBhcmcwLCBjb25zdCBjaGFyICphcmcxLCBj
b25zdCBjaGFyICphcmcyKTsKCgpleHRlcm4gcnR4IGdlbl9ydHhfZm10X2lzIChlbnVtIHJ0eF9j
b2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBpbnQgYXJnMCwgY29uc3QgY2hhciAqYXJnMSk7
CgpleHRlcm4gcnR4IGdlbl9ydHhfZm10X2kgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9t
b2RlIG1vZGUsIGludCBhcmcwKTsKCmV4dGVybiBydHggZ2VuX3J0eF9mbXRfaXNFIChlbnVtIHJ0
eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBpbnQgYXJnMCwgY29uc3QgY2hhciAqYXJn
MSwgcnR2ZWMgYXJnMik7CgoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9pRSAoZW51bSBydHhfY29k
ZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgaW50IGFyZzAsIHJ0dmVjIGFyZzEpOwoKZXh0ZXJu
IHJ0eCBnZW5fcnR4X2ZtdF9Fc3MgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1v
ZGUsIHJ0dmVjIGFyZzAsIGNvbnN0IGNoYXIgKmFyZzEsIGNvbnN0IGNoYXIgKmFyZzIpOwoKCmV4
dGVybiBydHggZ2VuX3J0eF9mbXRfc0VzcyAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21v
ZGUgbW9kZSwgY29uc3QgY2hhciAqYXJnMCwgcnR2ZWMgYXJnMSwgY29uc3QgY2hhciAqYXJnMiwg
Y29uc3QgY2hhciAqYXJnMyk7CgoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9lRSAoZW51bSBydHhf
Y29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR4IGFyZzAsIHJ0dmVjIGFyZzEpOwoKZXh0
ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9FIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBt
b2RlLCBydHZlYyBhcmcwKTsKCmV4dGVybiBydHggZ2VuX3J0eF9mbXRfZSAoZW51bSBydHhfY29k
ZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR4IGFyZzApOwoKZXh0ZXJuIHJ0eCBnZW5fcnR4
X2ZtdF9zc2UgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIGNvbnN0IGNo
YXIgKmFyZzAsIGNvbnN0IGNoYXIgKmFyZzEsIHJ0eCBhcmcyKTsKCgpleHRlcm4gcnR4IGdlbl9y
dHhfZm10X3NzIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBjb25zdCBj
aGFyICphcmcwLCBjb25zdCBjaGFyICphcmcxKTsKCmV4dGVybiBydHggZ2VuX3J0eF9mbXRfc0Ug
KGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIGNvbnN0IGNoYXIgKmFyZzAs
IHJ0dmVjIGFyZzEpOwoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9pdXVlaWVlIChlbnVtIHJ0eF9j
b2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBpbnQgYXJnMCwgcnR4IGFyZzEsIHJ0eCBhcmcy
LCBydHggYXJnMywgaW50IGFyZzQsIHJ0eCBhcmc1LCBydHggYXJnNik7CgoKCmV4dGVybiBydHgg
Z2VuX3J0eF9mbXRfaXV1ZWllZTAgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1v
ZGUsIGludCBhcmcwLCBydHggYXJnMSwgcnR4IGFyZzIsIHJ0eCBhcmczLCBpbnQgYXJnNCwgcnR4
IGFyZzUsIHJ0eCBhcmc2KTsKCgoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9pdXVlaWVlZSAoZW51
bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgaW50IGFyZzAsIHJ0eCBhcmcxLCBy
dHggYXJnMiwgcnR4IGFyZzMsIGludCBhcmc0LCBydHggYXJnNSwgcnR4IGFyZzYsIHJ0eCBhcmc3
KTsKCgoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9pdXUgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFj
aGluZV9tb2RlIG1vZGUsIGludCBhcmcwLCBydHggYXJnMSwgcnR4IGFyZzIpOwoKZXh0ZXJuIHJ0
eCBnZW5fcnR4X2ZtdF9pdXUwMGlzcyAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUg
bW9kZSwgaW50IGFyZzAsIHJ0eCBhcmcxLCBydHggYXJnMiwgaW50IGFyZzMsIGNvbnN0IGNoYXIg
KmFyZzQsIGNvbnN0IGNoYXIgKmFyZzUpOwoKCgpleHRlcm4gcnR4IGdlbl9ydHhfZm10X3NzaUVF
c2kgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIGNvbnN0IGNoYXIgKmFy
ZzAsIGNvbnN0IGNoYXIgKmFyZzEsIGludCBhcmcyLCBydHZlYyBhcmczLCBydHZlYyBhcmc0LCBj
b25zdCBjaGFyICphcmc1LCBpbnQgYXJnNik7CgoKCmV4dGVybiBydHggZ2VuX3J0eF9mbXRfRWkg
KGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHJ0dmVjIGFyZzAsIGludCBh
cmcxKTsKCmV4dGVybiBydHggZ2VuX3J0eF9mbXRfZUVlZTAgKGVudW0gcnR4X2NvZGUsIGVudW0g
bWFjaGluZV9tb2RlIG1vZGUsIHJ0eCBhcmcwLCBydHZlYyBhcmcxLCBydHggYXJnMiwgcnR4IGFy
ZzMpOwoKCmV4dGVybiBydHggZ2VuX3J0eF9mbXRfZWVlIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1h
Y2hpbmVfbW9kZSBtb2RlLCBydHggYXJnMCwgcnR4IGFyZzEsIHJ0eCBhcmcyKTsKCmV4dGVybiBy
dHggZ2VuX3J0eF9mbXRfIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKTsK
ZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF93IChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9k
ZSBtb2RlLCBsb25nIGxvbmcgYXJnMCk7CgpleHRlcm4gcnR4IGdlbl9ydHhfZm10XzB3dyAoZW51
bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgbG9uZyBsb25nIGFyZzAsIGxvbmcg
bG9uZyBhcmcxKTsKCgpleHRlcm4gcnR4IGdlbl9ydHhfZm10XzAgKGVudW0gcnR4X2NvZGUsIGVu
dW0gbWFjaGluZV9tb2RlIG1vZGUpOwpleHRlcm4gcnR4IGdlbl9ydHhfZm10X2kwIChlbnVtIHJ0
eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBpbnQgYXJnMCk7CgpleHRlcm4gcnR4IGdl
bl9ydHhfZm10X2VpIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBydHgg
YXJnMCwgaW50IGFyZzEpOwoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9lMCAoZW51bSBydHhfY29k
ZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR4IGFyZzApOwoKZXh0ZXJuIHJ0eCBnZW5fcnR4
X2ZtdF91MDAgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHJ0eCBhcmcw
KTsKCmV4dGVybiBydHggZ2VuX3J0eF9mbXRfZWl0IChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hp
bmVfbW9kZSBtb2RlLCBydHggYXJnMCwgaW50IGFyZzEsIHVuaW9uIHRyZWVfbm9kZSAqYXJnMik7
CgoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9lZWVlZSAoZW51bSBydHhfY29kZSwgZW51bSBtYWNo
aW5lX21vZGUgbW9kZSwgcnR4IGFyZzAsIHJ0eCBhcmcxLCBydHggYXJnMiwgcnR4IGFyZzMsIHJ0
eCBhcmc0KTsKCgpleHRlcm4gcnR4IGdlbl9ydHhfZm10X0VlIChlbnVtIHJ0eF9jb2RlLCBlbnVt
IG1hY2hpbmVfbW9kZSBtb2RlLCBydHZlYyBhcmcwLCBydHggYXJnMSk7CgpleHRlcm4gcnR4IGdl
bl9ydHhfZm10X3V1RWlpaWlpaWJiaWkgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2Rl
IG1vZGUsIHJ0eCBhcmcwLCBydHggYXJnMSwgcnR2ZWMgYXJnMiwgaW50IGFyZzMsIGludCBhcmc0
LCBpbnQgYXJnNSwgaW50IGFyZzYsIGludCBhcmc3LCBpbnQgYXJnOCwgc3RydWN0IGJpdG1hcF9o
ZWFkX2RlZiAqYXJnOSwgc3RydWN0IGJpdG1hcF9oZWFkX2RlZiAqYXJnMTAsIGludCBhcmcxMSwg
aW50IGFyZzEyKTsKCgoKCgoKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9paWlpaWlpaXR0IChlbnVt
IHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBpbnQgYXJnMCwgaW50IGFyZzEsIGlu
dCBhcmcyLCBpbnQgYXJnMywgaW50IGFyZzQsIGludCBhcmc1LCBpbnQgYXJnNiwgaW50IGFyZzcs
IHVuaW9uIHRyZWVfbm9kZSAqYXJnOCwgdW5pb24gdHJlZV9ub2RlICphcmc5KTsKCgoKCgpleHRl
cm4gcnR4IGdlbl9ydHhfZm10X2V0aSAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUg
bW9kZSwgcnR4IGFyZzAsIHVuaW9uIHRyZWVfbm9kZSAqYXJnMSwgaW50IGFyZzIpOwoKCmV4dGVy
biBydHggZ2VuX3J0eF9mbXRfYmkgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1v
ZGUsIHN0cnVjdCBiaXRtYXBfaGVhZF9kZWYgKmFyZzAsIGludCBhcmcxKTsKCgpleHRlcm4gcnR4
IGdlbl9ydHhfZm10X3V1dXUgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUs
IHJ0eCBhcmcwLCBydHggYXJnMSwgcnR4IGFyZzIsIHJ0eCBhcmczKTsKIyAxNjQxICIuLi8uLi9l
Z2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmgiIDIKCgoKCgoKCmV4dGVybiBydHggZ2VuX3J0
eF9DT05TVF9ET1VCTEUgKGVudW0gbWFjaGluZV9tb2RlLCBsb25nIGxvbmcsIGxvbmcgbG9uZyk7
CgpleHRlcm4gcnR4IGdlbl9ydHhfQ09OU1RfSU5UIChlbnVtIG1hY2hpbmVfbW9kZSwgbG9uZyBs
b25nKTsKZXh0ZXJuIHJ0eCBnZW5fcmF3X1JFRyAoZW51bSBtYWNoaW5lX21vZGUsIGludCk7CmV4
dGVybiBydHggZ2VuX3J0eF9SRUcgKGVudW0gbWFjaGluZV9tb2RlLCBpbnQpOwpleHRlcm4gcnR4
IGdlbl9ydHhfU1VCUkVHIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBpbnQpOwpleHRlcm4gcnR4
IGdlbl9ydHhfTUVNIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsKCmV4dGVybiBydHggZ2VuX2xv
d3BhcnRfU1VCUkVHIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsKIyAxNzI2ICIuLi8uLi9lZ2Nj
LTMuMS1DVlMyMDAyMDQxOC9nY2MvcnRsLmgiCmV4dGVybiBydHggZmluZF9uZXh0X3JlZiAocnR4
LCBydHgpOwoKZXh0ZXJuIHJ0eCBvdXRwdXRfY29uc3RhbnRfZGVmICh0cmVlLCBpbnQpOwpleHRl
cm4gcnR4IGltbWVkX3JlYWxfY29uc3QgKHRyZWUpOwojIDE3MzkgIi4uLy4uL2VnY2MtMy4xLUNW
UzIwMDIwNDE4L2djYy9ydGwuaCIKZXh0ZXJuIGludCBmbG93Ml9jb21wbGV0ZWQ7CgoKCgpleHRl
cm4gaW50IHJlbG9hZF9jb21wbGV0ZWQ7CgoKCgpleHRlcm4gaW50IHJlbG9hZF9pbl9wcm9ncmVz
czsKCgoKCgoKCmV4dGVybiBpbnQgY3NlX25vdF9leHBlY3RlZDsKCgoKZXh0ZXJuIGludCBub19u
ZXdfcHNldWRvczsKCgoKCgpleHRlcm4gaW50IHJ0eF90b190cmVlX2NvZGUgKGVudW0gcnR4X2Nv
ZGUpOwoKCnN0cnVjdCBvYnN0YWNrOwpleHRlcm4gdm9pZCBnY2Nfb2JzdGFja19pbml0IChzdHJ1
Y3Qgb2JzdGFjayAqKTsKCgpzdHJ1Y3QgY3NlX2Jhc2ljX2Jsb2NrX2RhdGE7CiMgMTc4NSAiLi4v
Li4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL3J0bC5oIgpleHRlcm4gaW50IHJ0eF9jb3N0IChy
dHgsIGVudW0gcnR4X2NvZGUpOwpleHRlcm4gaW50IGFkZHJlc3NfY29zdCAocnR4LCBlbnVtIG1h
Y2hpbmVfbW9kZSk7CmV4dGVybiB2b2lkIGRlbGV0ZV90cml2aWFsbHlfZGVhZF9pbnNucyAocnR4
LCBpbnQsIGludCk7CgpleHRlcm4gaW50IGNzZV9tYWluIChydHgsIGludCwgaW50LCBGSUxFICop
OwoKZXh0ZXJuIHZvaWQgY3NlX2VuZF9vZl9iYXNpY19ibG9jayAocnR4LCBzdHJ1Y3QgY3NlX2Jh
c2ljX2Jsb2NrX2RhdGEgKiwgaW50LCBpbnQsIGludCk7CgoKCgpleHRlcm4gaW50IGNvbXBhcmlz
b25fZG9taW5hdGVzX3AgKGVudW0gcnR4X2NvZGUsIGVudW0gcnR4X2NvZGUpOwpleHRlcm4gaW50
IGNvbmRqdW1wX3AgKHJ0eCk7CmV4dGVybiBpbnQgYW55X2NvbmRqdW1wX3AgKHJ0eCk7CmV4dGVy
biBpbnQgYW55X3VuY29uZGp1bXBfcCAocnR4KTsKZXh0ZXJuIGludCBzYWZlX3RvX3JlbW92ZV9q
dW1wX3AgKHJ0eCk7CmV4dGVybiBydHggcGNfc2V0IChydHgpOwpleHRlcm4gcnR4IGNvbmRqdW1w
X2xhYmVsIChydHgpOwpleHRlcm4gaW50IHNpbXBsZWp1bXBfcCAocnR4KTsKZXh0ZXJuIGludCBy
ZXR1cm5qdW1wX3AgKHJ0eCk7CmV4dGVybiBpbnQgb25seWp1bXBfcCAocnR4KTsKZXh0ZXJuIGlu
dCBvbmx5X3NldHNfY2MwX3AgKHJ0eCk7CmV4dGVybiBpbnQgc2V0c19jYzBfcCAocnR4KTsKZXh0
ZXJuIGludCBpbnZlcnRfanVtcF8xIChydHgsIHJ0eCk7CmV4dGVybiBpbnQgaW52ZXJ0X2p1bXAg
KHJ0eCwgcnR4LCBpbnQpOwpleHRlcm4gaW50IHJ0eF9yZW51bWJlcmVkX2VxdWFsX3AgKHJ0eCwg
cnR4KTsKZXh0ZXJuIGludCB0cnVlX3JlZ251bSAocnR4KTsKZXh0ZXJuIGludCByZWRpcmVjdF9q
dW1wXzEgKHJ0eCwgcnR4KTsKZXh0ZXJuIGludCByZWRpcmVjdF9qdW1wIChydHgsIHJ0eCwgaW50
KTsKZXh0ZXJuIHZvaWQgcmVidWlsZF9qdW1wX2xhYmVscyAocnR4KTsKZXh0ZXJuIGVudW0gcnR4
X2NvZGUgcmV2ZXJzZWRfY29tcGFyaXNvbl9jb2RlIChydHgsIHJ0eCk7CmV4dGVybiBlbnVtIHJ0
eF9jb2RlIHJldmVyc2VkX2NvbXBhcmlzb25fY29kZV9wYXJ0cyAoZW51bSBydHhfY29kZSwgcnR4
LCBydHgsIHJ0eCk7CgpleHRlcm4gdm9pZCBkZWxldGVfZm9yX3BlZXBob2xlIChydHgsIHJ0eCk7
CmV4dGVybiBpbnQgY29uZGp1bXBfaW5fcGFyYWxsZWxfcCAocnR4KTsKZXh0ZXJuIHZvaWQgbmV2
ZXJfcmVhY2hlZF93YXJuaW5nIChydHgsIHJ0eCk7CmV4dGVybiB2b2lkIHB1cmdlX2xpbmVfbnVt
YmVyX25vdGVzIChydHgpOwpleHRlcm4gdm9pZCBjb3B5X2xvb3BfaGVhZGVycyAocnR4KTsKCgpl
eHRlcm4gaW50IG1heF9yZWdfbnVtICh2b2lkKTsKZXh0ZXJuIGludCBtYXhfbGFiZWxfbnVtICh2
b2lkKTsKZXh0ZXJuIGludCBnZXRfZmlyc3RfbGFiZWxfbnVtICh2b2lkKTsKZXh0ZXJuIHZvaWQg
ZGVsZXRlX2luc25zX3NpbmNlIChydHgpOwpleHRlcm4gdm9pZCBtYXJrX3JlZ19wb2ludGVyIChy
dHgsIGludCk7CmV4dGVybiB2b2lkIG1hcmtfdXNlcl9yZWcgKHJ0eCk7CmV4dGVybiB2b2lkIHJl
c2V0X3VzZWRfZmxhZ3MgKHJ0eCk7CmV4dGVybiB2b2lkIHJlb3JkZXJfaW5zbnMgKHJ0eCwgcnR4
LCBydHgpOwpleHRlcm4gdm9pZCByZW9yZGVyX2luc25zX25vYmIgKHJ0eCwgcnR4LCBydHgpOwpl
eHRlcm4gaW50IGdldF9tYXhfdWlkICh2b2lkKTsKZXh0ZXJuIGludCBpbl9zZXF1ZW5jZV9wICh2
b2lkKTsKZXh0ZXJuIHZvaWQgZm9yY2VfbmV4dF9saW5lX25vdGUgKHZvaWQpOwpleHRlcm4gdm9p
ZCBjbGVhcl9lbWl0X2NhY2hlcyAodm9pZCk7CmV4dGVybiB2b2lkIGluaXRfZW1pdCAodm9pZCk7
CmV4dGVybiB2b2lkIGluaXRfZW1pdF9vbmNlIChpbnQpOwpleHRlcm4gdm9pZCBwdXNoX3RvcG1v
c3Rfc2VxdWVuY2UgKHZvaWQpOwpleHRlcm4gdm9pZCBwb3BfdG9wbW9zdF9zZXF1ZW5jZSAodm9p
ZCk7CmV4dGVybiBpbnQgc3VicmVnX3JlYWxwYXJ0X3AgKHJ0eCk7CmV4dGVybiB2b2lkIHJldmVy
c2VfY29tcGFyaXNvbiAocnR4KTsKZXh0ZXJuIHZvaWQgc2V0X25ld19maXJzdF9hbmRfbGFzdF9p
bnNuIChydHgsIHJ0eCk7CmV4dGVybiB2b2lkIHNldF9uZXdfZmlyc3RfYW5kX2xhc3RfbGFiZWxf
bnVtIChpbnQsIGludCk7CmV4dGVybiB2b2lkIHNldF9uZXdfbGFzdF9sYWJlbF9udW0gKGludCk7
CmV4dGVybiB2b2lkIHVuc2hhcmVfYWxsX3J0bF9hZ2FpbiAocnR4KTsKZXh0ZXJuIHZvaWQgc2V0
X2xhc3RfaW5zbiAocnR4KTsKZXh0ZXJuIHZvaWQgbGlua19jYzBfaW5zbnMgKHJ0eCk7CmV4dGVy
biB2b2lkIGFkZF9pbnNuIChydHgpOwpleHRlcm4gdm9pZCBhZGRfaW5zbl9iZWZvcmUgKHJ0eCwg
cnR4KTsKZXh0ZXJuIHZvaWQgYWRkX2luc25fYWZ0ZXIgKHJ0eCwgcnR4KTsKZXh0ZXJuIHZvaWQg
cmVtb3ZlX2luc24gKHJ0eCk7CmV4dGVybiB2b2lkIHJlb3JkZXJfaW5zbnNfd2l0aF9saW5lX25v
dGVzIChydHgsIHJ0eCwgcnR4KTsKZXh0ZXJuIHZvaWQgZW1pdF9pbnNuX2FmdGVyX3dpdGhfbGlu
ZV9ub3RlcyAocnR4LCBydHgsIHJ0eCk7CmV4dGVybiBlbnVtIHJ0eF9jb2RlIGNsYXNzaWZ5X2lu
c24gKHJ0eCk7CmV4dGVybiBydHggZW1pdCAocnR4KTsKCgoKaW50IGZvcmNlX2xpbmVfbnVtYmVy
cyAodm9pZCk7CnZvaWQgcmVzdG9yZV9saW5lX251bWJlcl9zdGF0dXMgKGludCBvbGRfdmFsdWUp
OwpleHRlcm4gdm9pZCByZW51bWJlcl9pbnNucyAoRklMRSAqKTsKZXh0ZXJuIHZvaWQgcmVtb3Zl
X3VubmVjZXNzYXJ5X25vdGVzICh2b2lkKTsKZXh0ZXJuIHJ0eCBkZWxldGVfaW5zbiAocnR4KTsK
ZXh0ZXJuIHZvaWQgZGVsZXRlX2luc25fY2hhaW4gKHJ0eCwgcnR4KTsKCgpleHRlcm4gaW50IGNv
bWJpbmVfaW5zdHJ1Y3Rpb25zIChydHgsIHVuc2lnbmVkIGludCk7CmV4dGVybiB1bnNpZ25lZCBp
bnQgZXh0ZW5kZWRfY291bnQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIGludCk7CmV4dGVybiBy
dHggcmVtb3ZlX2RlYXRoICh1bnNpZ25lZCBpbnQsIHJ0eCk7CgpleHRlcm4gdm9pZCBkdW1wX2Nv
bWJpbmVfc3RhdHMgKEZJTEUgKik7CmV4dGVybiB2b2lkIGR1bXBfY29tYmluZV90b3RhbF9zdGF0
cyAoRklMRSAqKTsKCgoKCmV4dGVybiB2b2lkIHNjaGVkdWxlX2luc25zIChGSUxFICopOwpleHRl
cm4gdm9pZCBzY2hlZHVsZV9lYmJzIChGSUxFICopOwoKZXh0ZXJuIHZvaWQgZml4X3NjaGVkX3Bh
cmFtIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKZXh0ZXJuIGNvbnN0IGNoYXIgKnBy
aW50X3J0eF9oZWFkOwpleHRlcm4gdm9pZCBkZWJ1Z19ydHggKHJ0eCk7CmV4dGVybiB2b2lkIGRl
YnVnX3J0eF9saXN0IChydHgsIGludCk7CmV4dGVybiB2b2lkIGRlYnVnX3J0eF9yYW5nZSAocnR4
LCBydHgpOwpleHRlcm4gcnR4IGRlYnVnX3J0eF9maW5kIChydHgsIGludCk7CgpleHRlcm4gdm9p
ZCBwcmludF9tZW1fZXhwciAoRklMRSAqLCB0cmVlKTsKZXh0ZXJuIHZvaWQgcHJpbnRfcnRsIChG
SUxFICosIHJ0eCk7CmV4dGVybiB2b2lkIHByaW50X3NpbXBsZV9ydGwgKEZJTEUgKiwgcnR4KTsK
ZXh0ZXJuIGludCBwcmludF9ydGxfc2luZ2xlIChGSUxFICosIHJ0eCk7CmV4dGVybiB2b2lkIHBy
aW50X2lubGluZV9ydHggKEZJTEUgKiwgcnR4LCBpbnQpOwoKCgpleHRlcm4gdm9pZCBpbml0X2xv
b3AgKHZvaWQpOwpleHRlcm4gcnR4IGxpYmNhbGxfb3RoZXJfcmVnIChydHgsIHJ0eCk7CgpleHRl
cm4gdm9pZCBsb29wX29wdGltaXplIChydHgsIEZJTEUgKiwgaW50KTsKCmV4dGVybiB2b2lkIHJl
Y29yZF9leGNlc3NfcmVncyAocnR4LCBydHgsIHJ0eCAqKTsKCgpleHRlcm4gdm9pZCByZXBvc2l0
aW9uX3Byb2xvZ3VlX2FuZF9lcGlsb2d1ZV9ub3RlcyAocnR4KTsKZXh0ZXJuIHZvaWQgdGhyZWFk
X3Byb2xvZ3VlX2FuZF9lcGlsb2d1ZV9pbnNucyAocnR4KTsKZXh0ZXJuIGludCBwcm9sb2d1ZV9l
cGlsb2d1ZV9jb250YWlucyAocnR4KTsKZXh0ZXJuIGludCBzaWJjYWxsX2VwaWxvZ3VlX2NvbnRh
aW5zIChydHgpOwpleHRlcm4gdm9pZCBwcmVzZXJ2ZV9ydGxfZXhwcl9yZXN1bHQgKHJ0eCk7CmV4
dGVybiB2b2lkIG1hcmtfdGVtcF9hZGRyX3Rha2VuIChydHgpOwpleHRlcm4gdm9pZCB1cGRhdGVf
dGVtcF9zbG90X2FkZHJlc3MgKHJ0eCwgcnR4KTsKZXh0ZXJuIHZvaWQgcHVyZ2VfYWRkcmVzc29m
IChydHgpOwpleHRlcm4gdm9pZCBwdXJnZV9oYXJkX3N1YnJlZ19zZXRzIChydHgpOwoKCmV4dGVy
biB2b2lkIHNldF9maWxlX2FuZF9saW5lX2Zvcl9zdG10IChjb25zdCBjaGFyICosIGludCk7CmV4
dGVybiB2b2lkIGV4cGFuZF9udWxsX3JldHVybiAodm9pZCk7CmV4dGVybiB2b2lkIGVtaXRfanVt
cCAocnR4KTsKZXh0ZXJuIGludCBwcmVzZXJ2ZV9zdWJleHByZXNzaW9uc19wICh2b2lkKTsKCgpl
eHRlcm4gdm9pZCBtb3ZlX2J5X3BpZWNlcyAocnR4LCBydHgsIHVuc2lnbmVkIGxvbmcgbG9uZywg
dW5zaWduZWQgaW50KTsKCgoKCmV4dGVybiB2b2lkIHJlY29tcHV0ZV9yZWdfdXNhZ2UgKHJ0eCwg
aW50KTsKZXh0ZXJuIGludCBpbml0aWFsaXplX3VuaW5pdGlhbGl6ZWRfc3VicmVncyAodm9pZCk7
CgpleHRlcm4gdm9pZCBwcmludF9ydGxfd2l0aF9iYiAoRklMRSAqLCBydHgpOwpleHRlcm4gdm9p
ZCBkdW1wX2Zsb3dfaW5mbyAoRklMRSAqKTsKCgoKZXh0ZXJuIHZvaWQgaW5pdF9leHBtZWQgKHZv
aWQpOwpleHRlcm4gdm9pZCBleHBhbmRfaW5jIChydHgsIHJ0eCk7CmV4dGVybiB2b2lkIGV4cGFu
ZF9kZWMgKHJ0eCwgcnR4KTsKZXh0ZXJuIHJ0eCBleHBhbmRfbXVsdF9oaWdocGFydCAoZW51bSBt
YWNoaW5lX21vZGUsIHJ0eCwgdW5zaWduZWQgbG9uZyBsb25nLCBydHgsIGludCwgaW50KTsKCgoK
CgpleHRlcm4gaW50IGdjc2VfbWFpbiAocnR4LCBGSUxFICopOwoKCgpleHRlcm4gdm9pZCBtYXJr
X2VsaW1pbmF0aW9uIChpbnQsIGludCk7CgpleHRlcm4gaW50IGdsb2JhbF9hbGxvYyAoRklMRSAq
KTsKZXh0ZXJuIHZvaWQgZHVtcF9nbG9iYWxfcmVncyAoRklMRSAqKTsKCgoKCmV4dGVybiB2b2lk
IGJ1aWxkX2luc25fY2hhaW4gKHJ0eCk7CgoKZXh0ZXJuIGludCByZWdfY2xhc3Nlc19pbnRlcnNl
Y3RfcCAoZW51bSByZWdfY2xhc3MsIGVudW0gcmVnX2NsYXNzKTsKZXh0ZXJuIGludCByZWdfY2xh
c3Nfc3Vic2V0X3AgKGVudW0gcmVnX2NsYXNzLCBlbnVtIHJlZ19jbGFzcyk7CmV4dGVybiB2b2lk
IGdsb2JhbGl6ZV9yZWcgKGludCk7CmV4dGVybiB2b2lkIGluaXRfcmVncyAodm9pZCk7CmV4dGVy
biB2b2lkIGluaXRfcmVnX3NldHMgKHZvaWQpOwpleHRlcm4gdm9pZCByZWdzZXRfcmVsZWFzZV9t
ZW1vcnkgKHZvaWQpOwpleHRlcm4gdm9pZCByZWdjbGFzc19pbml0ICh2b2lkKTsKZXh0ZXJuIHZv
aWQgcmVnY2xhc3MgKHJ0eCwgaW50LCBGSUxFICopOwpleHRlcm4gdm9pZCByZWdfc2NhbiAocnR4
LCB1bnNpZ25lZCBpbnQsIGludCk7CmV4dGVybiB2b2lkIHJlZ19zY2FuX3VwZGF0ZSAocnR4LCBy
dHgsIHVuc2lnbmVkIGludCk7CmV4dGVybiB2b2lkIGZpeF9yZWdpc3RlciAoY29uc3QgY2hhciAq
LCBpbnQsIGludCk7CgpleHRlcm4gdm9pZCBkZWxldGVfbnVsbF9wb2ludGVyX2NoZWNrcyAocnR4
KTsKCgoKZXh0ZXJuIHZvaWQgcmVnbW92ZV9vcHRpbWl6ZSAocnR4LCBpbnQsIEZJTEUgKik7Cgpl
eHRlcm4gdm9pZCBjb21iaW5lX3N0YWNrX2FkanVzdG1lbnRzICh2b2lkKTsKCgoKZXh0ZXJuIHZv
aWQgZGJyX3NjaGVkdWxlIChydHgsIEZJTEUgKik7CgoKCgpleHRlcm4gdm9pZCBkdW1wX2xvY2Fs
X2FsbG9jIChGSUxFICopOwoKZXh0ZXJuIGludCBsb2NhbF9hbGxvYyAodm9pZCk7CmV4dGVybiBp
bnQgZnVuY3Rpb25faW52YXJpYW50X3AgKHJ0eCk7CgoKZXh0ZXJuIHZvaWQgaW5pdF9icmFuY2hf
cHJvYiAoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgYnJhbmNoX3Byb2IgKHZvaWQpOwpleHRl
cm4gdm9pZCBlbmRfYnJhbmNoX3Byb2IgKHZvaWQpOwpleHRlcm4gdm9pZCBvdXRwdXRfZnVuY19z
dGFydF9wcm9maWxlciAodm9pZCk7CgoKCmV4dGVybiB2b2lkIHJlZ190b19zdGFjayAocnR4LCBG
SUxFICopOwoKCgpleHRlcm4gaW50IGFkZF9kb3VibGUgKHVuc2lnbmVkIGxvbmcgbG9uZywgbG9u
ZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25n
ICosIGxvbmcgbG9uZyAqKTsKCgoKZXh0ZXJuIGludCBuZWdfZG91YmxlICh1bnNpZ25lZCBsb25n
IGxvbmcsIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nICosIGxvbmcgbG9uZyAqKTsKCgpl
eHRlcm4gaW50IG11bF9kb3VibGUgKHVuc2lnbmVkIGxvbmcgbG9uZywgbG9uZyBsb25nLCB1bnNp
Z25lZCBsb25nIGxvbmcsIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nICosIGxvbmcgbG9u
ZyAqKTsKCgoKCmV4dGVybiB2b2lkIGxzaGlmdF9kb3VibGUgKHVuc2lnbmVkIGxvbmcgbG9uZywg
bG9uZyBsb25nLCBsb25nIGxvbmcsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyBsb25nICos
IGxvbmcgbG9uZyAqLCBpbnQpOwoKCgpleHRlcm4gdm9pZCByc2hpZnRfZG91YmxlICh1bnNpZ25l
ZCBsb25nIGxvbmcsIGxvbmcgbG9uZywgbG9uZyBsb25nLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVk
IGxvbmcgbG9uZyAqLCBsb25nIGxvbmcgKiwgaW50KTsKCgoKZXh0ZXJuIHZvaWQgbHJvdGF0ZV9k
b3VibGUgKHVuc2lnbmVkIGxvbmcgbG9uZywgbG9uZyBsb25nLCBsb25nIGxvbmcsIHVuc2lnbmVk
IGludCwgdW5zaWduZWQgbG9uZyBsb25nICosIGxvbmcgbG9uZyAqKTsKCgoKZXh0ZXJuIHZvaWQg
cnJvdGF0ZV9kb3VibGUgKHVuc2lnbmVkIGxvbmcgbG9uZywgbG9uZyBsb25nLCBsb25nIGxvbmcs
IHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyBsb25nICosIGxvbmcgbG9uZyAqKTsKCgoKCgpl
bnVtIGxpYmNhbGxfdHlwZQp7CiAgTENUX05PUk1BTCA9IDAsCiAgTENUX0NPTlNUID0gMSwKICBM
Q1RfUFVSRSA9IDIsCiAgTENUX0NPTlNUX01BS0VfQkxPQ0sgPSAzLAogIExDVF9QVVJFX01BS0Vf
QkxPQ0sgPSA0LAogIExDVF9OT1JFVFVSTiA9IDUsCiAgTENUX1RIUk9XID0gNiwKICBMQ1RfQUxX
QVlTX1JFVFVSTiA9IDcsCiAgTENUX1JFVFVSTlNfVFdJQ0UgPSA4Cn07CgpleHRlcm4gdm9pZCBl
bWl0X2xpYnJhcnlfY2FsbCAocnR4LCBlbnVtIGxpYmNhbGxfdHlwZSwgZW51bSBtYWNoaW5lX21v
ZGUsIGludCwgLi4uKTsKCgpleHRlcm4gcnR4IGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlIChydHgs
IHJ0eCwgZW51bSBsaWJjYWxsX3R5cGUsIGVudW0gbWFjaGluZV9tb2RlLCBpbnQsIC4uLik7CgoK
CgpleHRlcm4gaW50IHNldF9kb21pbmF0ZXNfdXNlIChpbnQsIGludCwgaW50LCBydHgsIHJ0eCk7
CgoKZXh0ZXJuIGludCBpbl9kYXRhX3NlY3Rpb24gKHZvaWQpOwpleHRlcm4gdm9pZCBpbml0X3Zh
cmFzbV9vbmNlICh2b2lkKTsKCgpleHRlcm4gdm9pZCBpbml0X3J0bCAodm9pZCk7CmV4dGVybiB2
b2lkIHRyYXZlcnNlX21kX2NvbnN0YW50cyAoaW50ICgqKSAodm9pZCAqKiwgdm9pZCAqKSwgdm9p
ZCAqKTsKCnN0cnVjdCBtZF9jb25zdGFudCB7IGNoYXIgKm5hbWUsICp2YWx1ZTsgfTsKCgpleHRl
cm4gaW50IHJlYWRfc2tpcF9zcGFjZXMgKEZJTEUgKik7CmV4dGVybiBydHggcmVhZF9ydHggKEZJ
TEUgKik7CgoKZXh0ZXJuIGNvbnN0IGNoYXIgKnJlYWRfcnR4X2ZpbGVuYW1lOwpleHRlcm4gaW50
IHJlYWRfcnR4X2xpbmVubzsKCgoKCgoKCmV4dGVybiB2b2lkIGZhbmN5X2Fib3J0IChjb25zdCBj
aGFyICosIGludCwgY29uc3QgY2hhciAqKQogICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f
XykpOwoKCgpleHRlcm4gdm9pZCBjbGVhcl9yZWdfYWxpYXNfaW5mbyAocnR4KTsKZXh0ZXJuIHJ0
eCBjYW5vbl9ydHggKHJ0eCk7CmV4dGVybiBpbnQgdHJ1ZV9kZXBlbmRlbmNlIChydHgsIGVudW0g
bWFjaGluZV9tb2RlLCBydHgsIGludCAoKikocnR4LCBpbnQpKTsKCmV4dGVybiBydHggZ2V0X2Fk
ZHIgKHJ0eCk7CmV4dGVybiBpbnQgY2Fub25fdHJ1ZV9kZXBlbmRlbmNlIChydHgsIGVudW0gbWFj
aGluZV9tb2RlLCBydHgsIHJ0eCwgaW50ICgqKShydHgsIGludCkpOwoKZXh0ZXJuIGludCByZWFk
X2RlcGVuZGVuY2UgKHJ0eCwgcnR4KTsKZXh0ZXJuIGludCBhbnRpX2RlcGVuZGVuY2UgKHJ0eCwg
cnR4KTsKZXh0ZXJuIGludCBvdXRwdXRfZGVwZW5kZW5jZSAocnR4LCBydHgpOwpleHRlcm4gdm9p
ZCBtYXJrX2NvbnN0YW50X2Z1bmN0aW9uICh2b2lkKTsKZXh0ZXJuIHZvaWQgaW5pdF9hbGlhc19v
bmNlICh2b2lkKTsKZXh0ZXJuIHZvaWQgaW5pdF9hbGlhc19hbmFseXNpcyAodm9pZCk7CmV4dGVy
biB2b2lkIGVuZF9hbGlhc19hbmFseXNpcyAodm9pZCk7CmV4dGVybiBydHggYWRkcl9zaWRlX2Vm
ZmVjdF9ldmFsIChydHgsIGludCwgaW50KTsKCgp0eXBlZGVmIGVudW0gewogIHNpYmNhbGxfdXNl
X25vcm1hbCA9IDEsCiAgc2liY2FsbF91c2VfdGFpbF9yZWN1cnNpb24sCiAgc2liY2FsbF91c2Vf
c2liY2FsbAp9IHNpYmNhbGxfdXNlX3Q7CgpleHRlcm4gdm9pZCBvcHRpbWl6ZV9zaWJsaW5nX2Fu
ZF90YWlsX3JlY3Vyc2l2ZV9jYWxscyAodm9pZCk7CmV4dGVybiB2b2lkIHJlcGxhY2VfY2FsbF9w
bGFjZWhvbGRlciAocnR4LCBzaWJjYWxsX3VzZV90KTsKCgoKCgoKZXh0ZXJuIHJ0eCBzdGFja19s
aW1pdF9ydHg7CgoKZXh0ZXJuIHZvaWQgcmVncmVuYW1lX29wdGltaXplICh2b2lkKTsKZXh0ZXJu
IHZvaWQgY29weXByb3BfaGFyZHJlZ19mb3J3YXJkICh2b2lkKTsKCgpleHRlcm4gdm9pZCBpZl9j
b252ZXJ0IChpbnQpOwoKCmV4dGVybiB2b2lkIGludmVydF9icl9wcm9iYWJpbGl0aWVzIChydHgp
OwpleHRlcm4gX0Jvb2wgZXhwZW5zaXZlX2Z1bmN0aW9uX3AgKGludCk7CiMgNTYgIi4uLy4uL2Vn
Y2MtMy4xLUNWUzIwMDIwNDE4L2djYy9nZW5yZWNvZy5jIiAyCiMgMSAiLi4vLi4vZWdjYy0zLjEt
Q1ZTMjAwMjA0MTgvZ2NjL2Vycm9ycy5oIiAxCiMgMzIgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIw
NDE4L2djYy9lcnJvcnMuaCIKZXh0ZXJuIHZvaWQgd2FybmluZyAoY29uc3QgY2hhciAqLCAuLi4p
OwpleHRlcm4gdm9pZCBlcnJvciAoY29uc3QgY2hhciAqLCAuLi4pOwpleHRlcm4gdm9pZCBmYXRh
bCAoY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKZXh0
ZXJuIHZvaWQgaW50ZXJuYWxfZXJyb3IgKGNvbnN0IGNoYXIgKiwgLi4uKSBfX2F0dHJpYnV0ZV9f
ICgoX19ub3JldHVybl9fKSk7CmV4dGVybiBjb25zdCBjaGFyICp0cmltX2ZpbGVuYW1lIChjb25z
dCBjaGFyICopOwpleHRlcm4gdm9pZCBmYW5jeV9hYm9ydCAoY29uc3QgY2hhciAqLCBpbnQsIGNv
bnN0IGNoYXIgKikKICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCmV4dGVybiBp
bnQgaGF2ZV9lcnJvcjsKZXh0ZXJuIGNvbnN0IGNoYXIgKnByb2duYW1lOwojIDU3ICIuLi8uLi9l
Z2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIgMgojIDEgIi4uLy4uL2VnY2MtMy4x
LUNWUzIwMDIwNDE4L2djYy9nZW5zdXBwb3J0LmgiIDEKIyAyMSAiLi4vLi4vZWdjYy0zLjEtQ1ZT
MjAwMjA0MTgvZ2NjL2dlbnN1cHBvcnQuaCIKc3RydWN0IG9ic3RhY2s7CmV4dGVybiBzdHJ1Y3Qg
b2JzdGFjayAqcnRsX29ic3RhY2s7CgpleHRlcm4gaW50IGluaXRfbWRfcmVhZGVyX2FyZ3MgKGlu
dCwgY2hhciAqKik7CmV4dGVybiBpbnQgaW5pdF9tZF9yZWFkZXIgKGNvbnN0IGNoYXIgKik7CmV4
dGVybiBydHggcmVhZF9tZF9ydHggKGludCAqLCBpbnQgKik7CgpleHRlcm4gdm9pZCBtZXNzYWdl
X3dpdGhfbGluZSAoaW50LCBjb25zdCBjaGFyICosIC4uLikKICAgICBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKIyA1OCAiLi4vLi4vZWdjYy0zLjEtQ1ZT
MjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiIDIKCgoKCgoKc3RhdGljIGNoYXIgKippbnNuX25hbWVf
cHRyID0gMDsKc3RhdGljIGludCBpbnNuX25hbWVfcHRyX3NpemUgPSAwOwoKCgoKCnN0cnVjdCBk
ZWNpc2lvbl9oZWFkCnsKICBzdHJ1Y3QgZGVjaXNpb24gKmZpcnN0OwogIHN0cnVjdCBkZWNpc2lv
biAqbGFzdDsKfTsKCgoKCgpzdHJ1Y3QgZGVjaXNpb25fdGVzdAp7CgogIHN0cnVjdCBkZWNpc2lv
bl90ZXN0ICpuZXh0OwoKCiAgZW51bSBkZWNpc2lvbl90eXBlCiAgICB7CiAgICAgIERUX21vZGUs
IERUX2NvZGUsIERUX3ZlY2xlbiwKICAgICAgRFRfZWx0X3plcm9faW50LCBEVF9lbHRfb25lX2lu
dCwgRFRfZWx0X3plcm9fd2lkZSwgRFRfZWx0X3plcm9fd2lkZV9zYWZlLAogICAgICBEVF92ZWNs
ZW5fZ2UsIERUX2R1cCwgRFRfcHJlZCwgRFRfY190ZXN0LAogICAgICBEVF9hY2NlcHRfb3AsIERU
X2FjY2VwdF9pbnNuCiAgICB9IHR5cGU7CgogIHVuaW9uCiAgewogICAgZW51bSBtYWNoaW5lX21v
ZGUgbW9kZTsKICAgIGVudW0gcnR4X2NvZGUgY29kZTsKCiAgICBzdHJ1Y3QKICAgIHsKICAgICAg
Y29uc3QgY2hhciAqbmFtZTsKICAgICAgaW50IGluZGV4OwogICAgICBlbnVtIG1hY2hpbmVfbW9k
ZSBtb2RlOwogICAgfSBwcmVkOwoKICAgIGNvbnN0IGNoYXIgKmNfdGVzdDsKICAgIGludCB2ZWNs
ZW47CiAgICBpbnQgZHVwOwogICAgbG9uZyBsb25nIGludHZhbDsKICAgIGludCBvcG5vOwoKICAg
IHN0cnVjdCB7CiAgICAgIGludCBjb2RlX251bWJlcjsKICAgICAgaW50IGxpbmVubzsKICAgICAg
aW50IG51bV9jbG9iYmVyc190b19hZGQ7CiAgICB9IGluc247CiAgfSB1Owp9OwoKCgpzdHJ1Y3Qg
ZGVjaXNpb24KewogIHN0cnVjdCBkZWNpc2lvbl9oZWFkIHN1Y2Nlc3M7CiAgc3RydWN0IGRlY2lz
aW9uICpuZXh0OwogIHN0cnVjdCBkZWNpc2lvbiAqcHJldjsKICBzdHJ1Y3QgZGVjaXNpb24gKmFm
dGVyd2FyZDsKCgogIGNvbnN0IGNoYXIgKnBvc2l0aW9uOwoKICBzdHJ1Y3QgZGVjaXNpb25fdGVz
dCAqdGVzdHM7CgogIGludCBudW1iZXI7CiAgaW50IHN1YnJvdXRpbmVfbnVtYmVyOwogIGludCBu
ZWVkX2xhYmVsOwp9OwoKCgpzdGF0aWMgaW50IG5leHRfc3Vicm91dGluZV9udW1iZXI7CgoKCgoK
ZW51bSByb3V0aW5lX3R5cGUgewogIFJFQ09HLCBTUExJVCwgUEVFUEhPTEUyCn07CgoKCgoKc3Rh
dGljIGludCBuZXh0X251bWJlcjsKCgoKc3RhdGljIGludCBuZXh0X2luc25fY29kZTsKCgoKCnN0
YXRpYyBpbnQgbmV4dF9pbmRleDsKCgoKCnN0YXRpYyBpbnQgbWF4X2RlcHRoOwoKCnN0YXRpYyBp
bnQgcGF0dGVybl9saW5lbm87CgoKc3RhdGljIGludCBlcnJvcl9jb3VudDsKCgoKCgoKCnN0YXRp
YyBjb25zdCBzdHJ1Y3QgcHJlZF90YWJsZQp7CiAgY29uc3QgY2hhciAqY29uc3QgbmFtZTsKICBj
b25zdCBlbnVtIHJ0eF9jb2RlIGNvZGVzWygoaW50KSBMQVNUX0FORF9VTlVTRURfUlRYX0NPREUp
XTsKfSBwcmVkc1tdID0gewogIHsiZ2VuZXJhbF9vcGVyYW5kIiwge0NPTlNUX0lOVCwgQ09OU1Rf
RE9VQkxFLCBDT05TVCwgU1lNQk9MX1JFRiwKICAgICAgICAgICAgICAgICAgICAgICBMQUJFTF9S
RUYsIFNVQlJFRywgUkVHLCBNRU19fSwKCiAgeyJ1bnNfYXJpdGhfb3BlcmFuZCIsIHsgUkVHLCBD
T05TVF9JTlQsIFNVQlJFRyB9fSwgeyJhcml0aF9vcGVyYW5kIiwgeyBSRUcsIENPTlNUX0lOVCwg
U1VCUkVHIH19LCB7ImFyaXRoMzJfb3BlcmFuZCIsIHsgUkVHLCBDT05TVF9JTlQsIFNVQlJFRyB9
fSwgeyJyZWdfb3JfMF9vcGVyYW5kIiwgeyBSRUcsIENPTlNUX0lOVCwgQ09OU1RfRE9VQkxFLCBT
VUJSRUcgfX0sIHsidHJ1ZV9yZWdfb3JfMF9vcGVyYW5kIiwgeyBSRUcsIENPTlNUX0lOVCwgQ09O
U1RfRE9VQkxFLCBTVUJSRUcgfX0sIHsic21hbGxfaW50IiwgeyBDT05TVF9JTlQgfX0sIHsibGFy
Z2VfaW50IiwgeyBDT05TVF9JTlQgfX0sIHsibWlwc19jb25zdF9kb3VibGVfb2siLCB7IENPTlNU
X0RPVUJMRSB9fSwgeyJjb25zdF9mbG9hdF8xX29wZXJhbmQiLCB7IENPTlNUX0RPVUJMRSB9fSwg
eyJzaW1wbGVfbWVtb3J5X29wZXJhbmQiLCB7IE1FTSwgU1VCUkVHIH19LCB7ImVxdWFsaXR5X29w
IiwgeyBFUSwgTkUgfX0sIHsiY21wX29wIiwgeyBFUSwgTkUsIEdULCBHRSwgR1RVLCBHRVUsIExU
LCBMRSwgTFRVLCBMRVUgfX0sIHsidHJhcF9jbXBfb3AiLCB7IEVRLCBORSwgR0UsIEdFVSwgTFQs
IExUVSB9fSwgeyJwY19vcl9sYWJlbF9vcGVyYW5kIiwgeyBQQywgTEFCRUxfUkVGIH19LCB7ImNh
bGxfaW5zbl9vcGVyYW5kIiwgeyBDT05TVF9JTlQsIENPTlNULCBTWU1CT0xfUkVGLCBSRUd9fSwg
eyJtb3ZlX29wZXJhbmQiLCB7IENPTlNUX0lOVCwgQ09OU1RfRE9VQkxFLCBDT05TVCwgU1lNQk9M
X1JFRiwgTEFCRUxfUkVGLCBTVUJSRUcsIFJFRywgTUVNfX0sIHsibW92ZGlfb3BlcmFuZCIsIHsg
Q09OU1RfSU5ULCBDT05TVF9ET1VCTEUsIENPTlNULCBTWU1CT0xfUkVGLCBMQUJFTF9SRUYsIFNV
QlJFRywgUkVHLCBNRU0sIFNJR05fRVhURU5EIH19LCB7InNlX3JlZ2lzdGVyX29wZXJhbmQiLCB7
IFNVQlJFRywgUkVHLCBTSUdOX0VYVEVORCB9fSwgeyJzZV9yZWdfb3JfMF9vcGVyYW5kIiwgeyBS
RUcsIENPTlNUX0lOVCwgQ09OU1RfRE9VQkxFLCBTVUJSRUcsIFNJR05fRVhURU5EIH19LCB7InNl
X3Vuc19hcml0aF9vcGVyYW5kIiwgeyBSRUcsIENPTlNUX0lOVCwgU1VCUkVHLCBTSUdOX0VYVEVO
RCB9fSwgeyJzZV9hcml0aF9vcGVyYW5kIiwgeyBSRUcsIENPTlNUX0lOVCwgU1VCUkVHLCBTSUdO
X0VYVEVORCB9fSwgeyJzZV9ub25tZW1vcnlfb3BlcmFuZCIsIHsgQ09OU1RfSU5ULCBDT05TVF9E
T1VCTEUsIENPTlNULCBTWU1CT0xfUkVGLCBMQUJFTF9SRUYsIFNVQlJFRywgUkVHLCBTSUdOX0VY
VEVORCB9fSwgeyJzZV9ub25pbW1lZGlhdGVfb3BlcmFuZCIsIHsgU1VCUkVHLCBSRUcsIE1FTSwg
U0lHTl9FWFRFTkQgfX0sIHsiY29uc3R0YWJsZV9vcGVyYW5kIiwgeyBMQUJFTF9SRUYsIFNZTUJP
TF9SRUYsIENPTlNUX0lOVCwgQ09OU1RfRE9VQkxFLCBDT05TVCB9fSwgeyJleHRlbmRfb3BlcmF0
b3IiLCB7IFNJR05fRVhURU5ELCBaRVJPX0VYVEVORCB9fSwgeyJoaWdocGFydF9zaGlmdF9vcGVy
YXRvciIsIHsgQVNISUZUUlQsIExTSElGVFJULCBST1RBVEVSVCwgUk9UQVRFIH19LAoKICB7ImFk
ZHJlc3Nfb3BlcmFuZCIsIHtDT05TVF9JTlQsIENPTlNUX0RPVUJMRSwgQ09OU1QsIFNZTUJPTF9S
RUYsCiAgICAgICAgICAgICAgICAgICAgICAgTEFCRUxfUkVGLCBTVUJSRUcsIFJFRywgTUVNLCBQ
TFVTLCBNSU5VUywgTVVMVH19LAogIHsicmVnaXN0ZXJfb3BlcmFuZCIsIHtTVUJSRUcsIFJFR319
LAogIHsicG1vZGVfcmVnaXN0ZXJfb3BlcmFuZCIsIHtTVUJSRUcsIFJFR319LAogIHsic2NyYXRj
aF9vcGVyYW5kIiwge1NDUkFUQ0gsIFJFR319LAogIHsiaW1tZWRpYXRlX29wZXJhbmQiLCB7Q09O
U1RfSU5ULCBDT05TVF9ET1VCTEUsIENPTlNULCBTWU1CT0xfUkVGLAogICAgICAgICAgICAgICAg
ICAgICAgICAgTEFCRUxfUkVGfX0sCiAgeyJjb25zdF9pbnRfb3BlcmFuZCIsIHtDT05TVF9JTlR9
fSwKICB7ImNvbnN0X2RvdWJsZV9vcGVyYW5kIiwge0NPTlNUX0lOVCwgQ09OU1RfRE9VQkxFfX0s
CiAgeyJub25pbW1lZGlhdGVfb3BlcmFuZCIsIHtTVUJSRUcsIFJFRywgTUVNfX0sCiAgeyJub25t
ZW1vcnlfb3BlcmFuZCIsIHtDT05TVF9JTlQsIENPTlNUX0RPVUJMRSwgQ09OU1QsIFNZTUJPTF9S
RUYsCiAgICAgICAgICAgICAgICAgICAgICAgICBMQUJFTF9SRUYsIFNVQlJFRywgUkVHfX0sCiAg
eyJwdXNoX29wZXJhbmQiLCB7TUVNfX0sCiAgeyJwb3Bfb3BlcmFuZCIsIHtNRU19fSwKICB7Im1l
bW9yeV9vcGVyYW5kIiwge1NVQlJFRywgTUVNfX0sCiAgeyJpbmRpcmVjdF9vcGVyYW5kIiwge1NV
QlJFRywgTUVNfX0sCiAgeyJjb21wYXJpc29uX29wZXJhdG9yIiwge0VRLCBORSwgTEUsIExULCBH
RSwgR1QsIExFVSwgTFRVLCBHRVUsIEdUVSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5P
UkRFUkVELCBPUkRFUkVELCBVTkVRLCBVTkdFLCBVTkdULCBVTkxFLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBVTkxULCBMVEdUfX0sCiAgeyJtb2RlX2luZGVwZW5kZW50X29wZXJhbmQiLCB7
Q09OU1RfSU5ULCBDT05TVF9ET1VCTEUsIENPTlNULCBTWU1CT0xfUkVGLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIExBQkVMX1JFRiwgU1VCUkVHLCBSRUcsIE1FTX19Cn07CgoKCnN0
YXRpYyBjb25zdCBjaGFyICpjb25zdCBzcGVjaWFsX21vZGVfcHJlZF90YWJsZVtdID0gewoKICAi
cGNfb3JfbGFiZWxfb3BlcmFuZCIsCgogICJwbW9kZV9yZWdpc3Rlcl9vcGVyYW5kIgp9OwoKCgpz
dGF0aWMgc3RydWN0IGRlY2lzaW9uICpuZXdfZGVjaXNpb24KICAoY29uc3QgY2hhciAqLCBzdHJ1
Y3QgZGVjaXNpb25faGVhZCAqKTsKc3RhdGljIHN0cnVjdCBkZWNpc2lvbl90ZXN0ICpuZXdfZGVj
aXNpb25fdGVzdAogIChlbnVtIGRlY2lzaW9uX3R5cGUsIHN0cnVjdCBkZWNpc2lvbl90ZXN0ICoq
Kik7CnN0YXRpYyBydHggZmluZF9vcGVyYW5kCiAgKHJ0eCwgaW50KTsKc3RhdGljIHJ0eCBmaW5k
X21hdGNoaW5nX29wZXJhbmQKICAocnR4LCBpbnQpOwpzdGF0aWMgdm9pZCB2YWxpZGF0ZV9wYXR0
ZXJuCiAgKHJ0eCwgcnR4LCBydHgsIGludCk7CnN0YXRpYyBzdHJ1Y3QgZGVjaXNpb24gKmFkZF90
b19zZXF1ZW5jZQogIChydHgsIHN0cnVjdCBkZWNpc2lvbl9oZWFkICosIGNvbnN0IGNoYXIgKiwg
ZW51bSByb3V0aW5lX3R5cGUsIGludCk7CgpzdGF0aWMgaW50IG1heWJlX2JvdGhfdHJ1ZV8yCiAg
KHN0cnVjdCBkZWNpc2lvbl90ZXN0ICosIHN0cnVjdCBkZWNpc2lvbl90ZXN0ICopOwpzdGF0aWMg
aW50IG1heWJlX2JvdGhfdHJ1ZV8xCiAgKHN0cnVjdCBkZWNpc2lvbl90ZXN0ICosIHN0cnVjdCBk
ZWNpc2lvbl90ZXN0ICopOwpzdGF0aWMgaW50IG1heWJlX2JvdGhfdHJ1ZQogIChzdHJ1Y3QgZGVj
aXNpb24gKiwgc3RydWN0IGRlY2lzaW9uICosIGludCk7CgpzdGF0aWMgaW50IG5vZGVzX2lkZW50
aWNhbF8xCiAgKHN0cnVjdCBkZWNpc2lvbl90ZXN0ICosIHN0cnVjdCBkZWNpc2lvbl90ZXN0ICop
OwpzdGF0aWMgaW50IG5vZGVzX2lkZW50aWNhbAogIChzdHJ1Y3QgZGVjaXNpb24gKiwgc3RydWN0
IGRlY2lzaW9uICopOwpzdGF0aWMgdm9pZCBtZXJnZV9hY2NlcHRfaW5zbgogIChzdHJ1Y3QgZGVj
aXNpb24gKiwgc3RydWN0IGRlY2lzaW9uICopOwpzdGF0aWMgdm9pZCBtZXJnZV90cmVlcwogIChz
dHJ1Y3QgZGVjaXNpb25faGVhZCAqLCBzdHJ1Y3QgZGVjaXNpb25faGVhZCAqKTsKCnN0YXRpYyB2
b2lkIGZhY3Rvcl90ZXN0cwogIChzdHJ1Y3QgZGVjaXNpb25faGVhZCAqKTsKc3RhdGljIHZvaWQg
c2ltcGxpZnlfdGVzdHMKICAoc3RydWN0IGRlY2lzaW9uX2hlYWQgKik7CnN0YXRpYyBpbnQgYnJl
YWtfb3V0X3N1YnJvdXRpbmVzCiAgKHN0cnVjdCBkZWNpc2lvbl9oZWFkICosIGludCk7CnN0YXRp
YyB2b2lkIGZpbmRfYWZ0ZXJ3YXJkCiAgKHN0cnVjdCBkZWNpc2lvbl9oZWFkICosIHN0cnVjdCBk
ZWNpc2lvbiAqKTsKCnN0YXRpYyB2b2lkIGNoYW5nZV9zdGF0ZQogIChjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKiwgc3RydWN0IGRlY2lzaW9uICosIGNvbnN0IGNoYXIgKik7CnN0YXRpYyB2b2lk
IHByaW50X2NvZGUKICAoZW51bSBydHhfY29kZSk7CnN0YXRpYyB2b2lkIHdyaXRlX2FmdGVyd2Fy
ZAogIChzdHJ1Y3QgZGVjaXNpb24gKiwgc3RydWN0IGRlY2lzaW9uICosIGNvbnN0IGNoYXIgKik7
CnN0YXRpYyBzdHJ1Y3QgZGVjaXNpb24gKndyaXRlX3N3aXRjaAogIChzdHJ1Y3QgZGVjaXNpb24g
KiwgaW50KTsKc3RhdGljIHZvaWQgd3JpdGVfY29uZAogIChzdHJ1Y3QgZGVjaXNpb25fdGVzdCAq
LCBpbnQsIGVudW0gcm91dGluZV90eXBlKTsKc3RhdGljIHZvaWQgd3JpdGVfYWN0aW9uCiAgKHN0
cnVjdCBkZWNpc2lvbiAqLCBzdHJ1Y3QgZGVjaXNpb25fdGVzdCAqLCBpbnQsIGludCwgc3RydWN0
IGRlY2lzaW9uICosIGVudW0gcm91dGluZV90eXBlKTsKCnN0YXRpYyBpbnQgaXNfdW5jb25kaXRp
b25hbAogIChzdHJ1Y3QgZGVjaXNpb25fdGVzdCAqLCBlbnVtIHJvdXRpbmVfdHlwZSk7CnN0YXRp
YyBpbnQgd3JpdGVfbm9kZQogIChzdHJ1Y3QgZGVjaXNpb24gKiwgaW50LCBlbnVtIHJvdXRpbmVf
dHlwZSk7CnN0YXRpYyB2b2lkIHdyaXRlX3RyZWVfMQogIChzdHJ1Y3QgZGVjaXNpb25faGVhZCAq
LCBpbnQsIGVudW0gcm91dGluZV90eXBlKTsKc3RhdGljIHZvaWQgd3JpdGVfdHJlZQogIChzdHJ1
Y3QgZGVjaXNpb25faGVhZCAqLCBjb25zdCBjaGFyICosIGVudW0gcm91dGluZV90eXBlLCBpbnQp
OwpzdGF0aWMgdm9pZCB3cml0ZV9zdWJyb3V0aW5lCiAgKHN0cnVjdCBkZWNpc2lvbl9oZWFkICos
IGVudW0gcm91dGluZV90eXBlKTsKc3RhdGljIHZvaWQgd3JpdGVfc3Vicm91dGluZXMKICAoc3Ry
dWN0IGRlY2lzaW9uX2hlYWQgKiwgZW51bSByb3V0aW5lX3R5cGUpOwpzdGF0aWMgdm9pZCB3cml0
ZV9oZWFkZXIKICAodm9pZCk7CgpzdGF0aWMgc3RydWN0IGRlY2lzaW9uX2hlYWQgbWFrZV9pbnNu
X3NlcXVlbmNlCiAgKHJ0eCwgZW51bSByb3V0aW5lX3R5cGUpOwpzdGF0aWMgdm9pZCBwcm9jZXNz
X3RyZWUKICAoc3RydWN0IGRlY2lzaW9uX2hlYWQgKiwgZW51bSByb3V0aW5lX3R5cGUpOwoKc3Rh
dGljIHZvaWQgcmVjb3JkX2luc25fbmFtZQogIChpbnQsIGNvbnN0IGNoYXIgKik7CgpzdGF0aWMg
dm9pZCBkZWJ1Z19kZWNpc2lvbl8wCiAgKHN0cnVjdCBkZWNpc2lvbiAqLCBpbnQsIGludCk7CnN0
YXRpYyB2b2lkIGRlYnVnX2RlY2lzaW9uXzEKICAoc3RydWN0IGRlY2lzaW9uICosIGludCk7CnN0
YXRpYyB2b2lkIGRlYnVnX2RlY2lzaW9uXzIKICAoc3RydWN0IGRlY2lzaW9uX3Rlc3QgKik7CmV4
dGVybiB2b2lkIGRlYnVnX2RlY2lzaW9uCiAgKHN0cnVjdCBkZWNpc2lvbiAqKTsKZXh0ZXJuIHZv
aWQgZGVidWdfZGVjaXNpb25fbGlzdAogIChzdHJ1Y3QgZGVjaXNpb24gKik7CgoKCnN0YXRpYyBz
dHJ1Y3QgZGVjaXNpb24gKgpuZXdfZGVjaXNpb24gKHBvc2l0aW9uLCBsYXN0KQogICAgIGNvbnN0
IGNoYXIgKnBvc2l0aW9uOwogICAgIHN0cnVjdCBkZWNpc2lvbl9oZWFkICpsYXN0Owp7CiAgc3Ry
dWN0IGRlY2lzaW9uICpuZXcKICAgID0gKHN0cnVjdCBkZWNpc2lvbiAqKSB4bWFsbG9jIChzaXpl
b2YgKHN0cnVjdCBkZWNpc2lvbikpOwoKICBtZW1zZXQgKG5ldywgMCwgc2l6ZW9mICgqbmV3KSk7
CiAgbmV3LT5zdWNjZXNzID0gKmxhc3Q7CiAgbmV3LT5wb3NpdGlvbiA9IHhzdHJkdXAgKHBvc2l0
aW9uKTsKICBuZXctPm51bWJlciA9IG5leHRfbnVtYmVyKys7CgogIGxhc3QtPmZpcnN0ID0gbGFz
dC0+bGFzdCA9IG5ldzsKICByZXR1cm4gbmV3Owp9CgoKCnN0YXRpYyBzdHJ1Y3QgZGVjaXNpb25f
dGVzdCAqCm5ld19kZWNpc2lvbl90ZXN0ICh0eXBlLCBwcGxhY2UpCiAgICAgZW51bSBkZWNpc2lv
bl90eXBlIHR5cGU7CiAgICAgc3RydWN0IGRlY2lzaW9uX3Rlc3QgKioqcHBsYWNlOwp7CiAgc3Ry
dWN0IGRlY2lzaW9uX3Rlc3QgKipwbGFjZSA9ICpwcGxhY2U7CiAgc3RydWN0IGRlY2lzaW9uX3Rl
c3QgKnRlc3Q7CgogIHRlc3QgPSAoc3RydWN0IGRlY2lzaW9uX3Rlc3QgKikgeG1hbGxvYyAoc2l6
ZW9mICgqdGVzdCkpOwogIHRlc3QtPm5leHQgPSAqcGxhY2U7CiAgdGVzdC0+dHlwZSA9IHR5cGU7
CiAgKnBsYWNlID0gdGVzdDsKCiAgcGxhY2UgPSAmdGVzdC0+bmV4dDsKICAqcHBsYWNlID0gcGxh
Y2U7CgogIHJldHVybiB0ZXN0Owp9CgoKCnN0YXRpYyBydHgKZmluZF9vcGVyYW5kIChwYXR0ZXJu
LCBuKQogICAgIHJ0eCBwYXR0ZXJuOwogICAgIGludCBuOwp7CiAgY29uc3QgY2hhciAqZm10Owog
IGVudW0gcnR4X2NvZGUgY29kZTsKICBpbnQgaSwgaiwgbGVuOwogIHJ0eCByOwoKICBjb2RlID0g
KChlbnVtIHJ0eF9jb2RlKSAocGF0dGVybiktPmNvZGUpOwogIGlmICgoY29kZSA9PSBNQVRDSF9T
Q1JBVENICiAgICAgICB8fCBjb2RlID09IE1BVENIX0lOU04KICAgICAgIHx8IGNvZGUgPT0gTUFU
Q0hfT1BFUkFORAogICAgICAgfHwgY29kZSA9PSBNQVRDSF9PUEVSQVRPUgogICAgICAgfHwgY29k
ZSA9PSBNQVRDSF9QQVJBTExFTCkKICAgICAgJiYgKCgocGF0dGVybiktPmZsZFswXSkucnRpbnQp
ID09IG4pCiAgICByZXR1cm4gcGF0dGVybjsKCiAgZm10ID0gKHJ0eF9mb3JtYXRbKGludCkgKGNv
ZGUpXSk7CiAgbGVuID0gKHJ0eF9sZW5ndGhbKGludCkgKGNvZGUpXSk7CiAgZm9yIChpID0gMDsg
aSA8IGxlbjsgaSsrKQogICAgewogICAgICBzd2l0Y2ggKGZtdFtpXSkKICAgICAgICB7CiAgICAg
ICAgY2FzZSAnZSc6IGNhc2UgJ3UnOgogICAgICAgICAgaWYgKChyID0gZmluZF9vcGVyYW5kICgo
KChwYXR0ZXJuKS0+ZmxkW2ldKS5ydHgpLCBuKSkgIT0gKHJ0eCkgMCkKICAgICAgICAgICAgcmV0
dXJuIHI7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnVic6CiAgICAgICAgICBpZiAo
ISAoKChwYXR0ZXJuKS0+ZmxkW2ldKS5ydHZlYykpCiAgICAgICAgICAgIGJyZWFrOwoKCiAgICAg
ICAgY2FzZSAnRSc6CiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgKCgoKChwYXR0ZXJuKS0+Zmxk
W2ldKS5ydHZlYykpLT5udW1fZWxlbSk7IGorKykKICAgICAgICAgICAgaWYgKChyID0gZmluZF9v
cGVyYW5kICgoKCgoKHBhdHRlcm4pLT5mbGRbaV0pLnJ0dmVjKSktPmVsZW1bal0pLCBuKSkgIT0g
KHJ0eCkgMCkKICAgICAgICAgICAgICByZXR1cm4gcjsKICAgICAgICAgIGJyZWFrOwoKICAgICAg
ICBjYXNlICdpJzogY2FzZSAndyc6IGNhc2UgJzAnOiBjYXNlICdzJzoKICAgICAgICAgIGJyZWFr
OwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgZmFuY3lfYWJvcnQgKCIuLi8uLi9lZ2NjLTMu
MS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIsIDQwMCwgX19GVU5DVElPTl9fKTsKICAgICAg
ICB9CiAgICB9CgogIHJldHVybiAoKHZvaWQgKikwKTsKfQoKCgoKc3RhdGljIHJ0eApmaW5kX21h
dGNoaW5nX29wZXJhbmQgKHBhdHRlcm4sIG4pCiAgICAgcnR4IHBhdHRlcm47CiAgICAgaW50IG47
CnsKICBjb25zdCBjaGFyICpmbXQ7CiAgZW51bSBydHhfY29kZSBjb2RlOwogIGludCBpLCBqLCBs
ZW47CiAgcnR4IHI7CgogIGNvZGUgPSAoKGVudW0gcnR4X2NvZGUpIChwYXR0ZXJuKS0+Y29kZSk7
CiAgaWYgKGNvZGUgPT0gTUFUQ0hfT1BFUkFORAogICAgICAmJiAoKCgocGF0dGVybiktPmZsZFsy
XSkucnRzdHIpWzBdID09ICcwJyArIG4KICAgICAgICAgIHx8ICgoKChwYXR0ZXJuKS0+ZmxkWzJd
KS5ydHN0cilbMF0gPT0gJyUnCiAgICAgICAgICAgICAgJiYgKCgocGF0dGVybiktPmZsZFsyXSku
cnRzdHIpWzFdID09ICcwJyArIG4pKSkKICAgIHJldHVybiBwYXR0ZXJuOwoKICBmbXQgPSAocnR4
X2Zvcm1hdFsoaW50KSAoY29kZSldKTsKICBsZW4gPSAocnR4X2xlbmd0aFsoaW50KSAoY29kZSld
KTsKICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICB7CiAgICAgIHN3aXRjaCAoZm10W2ld
KQogICAgICAgIHsKICAgICAgICBjYXNlICdlJzogY2FzZSAndSc6CiAgICAgICAgICBpZiAoKHIg
PSBmaW5kX21hdGNoaW5nX29wZXJhbmQgKCgoKHBhdHRlcm4pLT5mbGRbaV0pLnJ0eCksIG4pKSkK
ICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnVic6
CiAgICAgICAgICBpZiAoISAoKChwYXR0ZXJuKS0+ZmxkW2ldKS5ydHZlYykpCiAgICAgICAgICAg
IGJyZWFrOwoKCiAgICAgICAgY2FzZSAnRSc6CiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgKCgo
KChwYXR0ZXJuKS0+ZmxkW2ldKS5ydHZlYykpLT5udW1fZWxlbSk7IGorKykKICAgICAgICAgICAg
aWYgKChyID0gZmluZF9tYXRjaGluZ19vcGVyYW5kICgoKCgoKHBhdHRlcm4pLT5mbGRbaV0pLnJ0
dmVjKSktPmVsZW1bal0pLCBuKSkpCiAgICAgICAgICAgICAgcmV0dXJuIHI7CiAgICAgICAgICBi
cmVhazsKCiAgICAgICAgY2FzZSAnaSc6IGNhc2UgJ3cnOiBjYXNlICcwJzogY2FzZSAncyc6CiAg
ICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGZhbmN5X2Fib3J0ICgi
Li4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiLCA0NTMsIF9fRlVOQ1RJ
T05fXyk7CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gKCh2b2lkICopMCk7Cn0KCgoKCgoKc3Rh
dGljIHZvaWQKdmFsaWRhdGVfcGF0dGVybiAocGF0dGVybiwgaW5zbiwgc2V0LCBzZXRfY29kZSkK
ICAgICBydHggcGF0dGVybjsKICAgICBydHggaW5zbjsKICAgICBydHggc2V0OwogICAgIGludCBz
ZXRfY29kZTsKewogIGNvbnN0IGNoYXIgKmZtdDsKICBlbnVtIHJ0eF9jb2RlIGNvZGU7CiAgc2l6
ZV90IGksIGxlbjsKICBpbnQgajsKCiAgY29kZSA9ICgoZW51bSBydHhfY29kZSkgKHBhdHRlcm4p
LT5jb2RlKTsKICBzd2l0Y2ggKGNvZGUpCiAgICB7CiAgICBjYXNlIE1BVENIX1NDUkFUQ0g6CiAg
ICAgIHJldHVybjsKCiAgICBjYXNlIE1BVENIX0lOU046CiAgICBjYXNlIE1BVENIX09QRVJBTkQ6
CiAgICBjYXNlIE1BVENIX09QRVJBVE9SOgogICAgICB7CiAgICAgICAgY29uc3QgY2hhciAqcHJl
ZF9uYW1lID0gKCgocGF0dGVybiktPmZsZFsxXSkucnRzdHIpOwogICAgICAgIGludCBhbGxvd3Nf
bm9uX2x2YWx1ZSA9IDEsIGFsbG93c19ub25fY29uc3QgPSAxOwogICAgICAgIGludCBzcGVjaWFs
X21vZGVfcHJlZCA9IDA7CiAgICAgICAgY29uc3QgY2hhciAqY190ZXN0OwoKICAgICAgICBpZiAo
KChlbnVtIHJ0eF9jb2RlKSAoaW5zbiktPmNvZGUpID09IERFRklORV9JTlNOKQogICAgICAgICAg
Y190ZXN0ID0gKCgoaW5zbiktPmZsZFsyXSkucnRzdHIpOwogICAgICAgIGVsc2UKICAgICAgICAg
IGNfdGVzdCA9ICgoKGluc24pLT5mbGRbMV0pLnJ0c3RyKTsKCiAgICAgICAgaWYgKHByZWRfbmFt
ZVswXSAhPSAwKQogICAgICAgICAgewogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKHNpemVv
ZiAocHJlZHMpIC8gc2l6ZW9mICgocHJlZHMpWzBdKSk7IGkrKykKICAgICAgICAgICAgICBpZiAo
ISBzdHJjbXAgKHByZWRzW2ldLm5hbWUsIHByZWRfbmFtZSkpCiAgICAgICAgICAgICAgICBicmVh
azsKCiAgICAgICAgICAgIGlmIChpIDwgKHNpemVvZiAocHJlZHMpIC8gc2l6ZW9mICgocHJlZHMp
WzBdKSkpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50IGo7CgogICAgICAgICAg
ICAgICAgYWxsb3dzX25vbl9sdmFsdWUgPSBhbGxvd3Nfbm9uX2NvbnN0ID0gMDsKICAgICAgICAg
ICAgICAgIGZvciAoaiA9IDA7IHByZWRzW2ldLmNvZGVzW2pdICE9IDA7IGorKykKICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVudW0gcnR4X2NvZGUgYyA9IHByZWRzW2ld
LmNvZGVzW2pdOwogICAgICAgICAgICAgICAgICAgIGlmIChjICE9IExBQkVMX1JFRgogICAgICAg
ICAgICAgICAgICAgICAgICAmJiBjICE9IFNZTUJPTF9SRUYKICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgYyAhPSBDT05TVF9JTlQKICAgICAgICAgICAgICAgICAgICAgICAgJiYgYyAhPSBDT05T
VF9ET1VCTEUKICAgICAgICAgICAgICAgICAgICAgICAgJiYgYyAhPSBDT05TVAogICAgICAgICAg
ICAgICAgICAgICAgICAmJiBjICE9IEhJR0gKICAgICAgICAgICAgICAgICAgICAgICAgJiYgYyAh
PSBDT05TVEFOVF9QX1JUWCkKICAgICAgICAgICAgICAgICAgICAgIGFsbG93c19ub25fY29uc3Qg
PSAxOwoKICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPSBSRUcKICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgYyAhPSBTVUJSRUcKICAgICAgICAgICAgICAgICAgICAgICAgJiYgYyAhPSBNRU0K
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgYyAhPSBDT05DQVQKICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgYyAhPSBQQVJBTExFTAogICAgICAgICAgICAgICAgICAgICAgICAmJiBjICE9IFNU
UklDVF9MT1dfUEFSVCkKICAgICAgICAgICAgICAgICAgICAgIGFsbG93c19ub25fbHZhbHVlID0g
MTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgIHsKCgoKICAgICAgICAgICAgICAgIG1lc3NhZ2Vfd2l0aF9saW5lIChwYXR0
ZXJuX2xpbmVubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2FybmluZzog
YCVzJyBub3QgaW4gUFJFRElDQVRFX0NPREVTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcmVkX25hbWUpOwoKICAgICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgKHNpemVvZiAoc3BlY2lhbF9tb2RlX3ByZWRfdGFibGUpIC8gc2l6ZW9mICgoc3Bl
Y2lhbF9tb2RlX3ByZWRfdGFibGUpWzBdKSk7ICsraSkKICAgICAgICAgICAgICBpZiAoc3RyY21w
IChwcmVkX25hbWUsIHNwZWNpYWxfbW9kZV9wcmVkX3RhYmxlW2ldKSA9PSAwKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBzcGVjaWFsX21vZGVfcHJlZCA9IDE7CiAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICBp
ZiAoY29kZSA9PSBNQVRDSF9PUEVSQU5EKQogICAgICAgICAgewogICAgICAgICAgICBjb25zdCBj
aGFyIGNvbnN0cmFpbnRzMCA9ICgoKHBhdHRlcm4pLT5mbGRbMl0pLnJ0c3RyKVswXTsKCgoKCgog
ICAgICAgICAgICBpZiAoKChlbnVtIHJ0eF9jb2RlKSAoaW5zbiktPmNvZGUpID09IERFRklORV9F
WFBBTkQKICAgICAgICAgICAgICAgIHx8ICgoZW51bSBydHhfY29kZSkgKGluc24pLT5jb2RlKSA9
PSBERUZJTkVfU1BMSVQKICAgICAgICAgICAgICAgIHx8ICgoZW51bSBydHhfY29kZSkgKGluc24p
LT5jb2RlKSA9PSBERUZJTkVfUEVFUEhPTEUyKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIGlmIChjb25zdHJhaW50czApCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfd2l0aF9saW5l
IChwYXR0ZXJuX2xpbmVubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3
YXJuaW5nOiBjb25zdHJhaW50cyBub3Qgc3VwcG9ydGVkIGluICVzIiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJ0eF9uYW1lWygoZW51bSBydHhfY29kZSkgKGluc24pLT5j
b2RlKV0pOwogICAgICAgICAgICAgIH0KCgogICAgICAgICAgICBlbHNlIGlmIChzZXQgJiYgY29u
c3RyYWludHMwKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChzZXRfY29kZSA9
PSAnKycpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3Ry
YWludHMwID09ICcrJykKICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGNvbnN0cmFpbnRzMCA9PSAnPScKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiBmaW5kX21hdGNoaW5nX29wZXJhbmQgKGluc24sICgoKHBhdHRlcm4pLT5mbGRbMF0p
LnJ0aW50KSkpCiAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdl
X3dpdGhfbGluZSAocGF0dGVybl9saW5lbm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAib3BlcmFuZCAlZCBtaXNzaW5nIGluLW91dCByZWxvYWQiLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgocGF0dGVybiktPmZsZFswXSku
cnRpbnQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY291bnQrKzsKICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBp
ZiAoY29uc3RyYWludHMwICE9ICc9JyAmJiBjb25zdHJhaW50czAgIT0gJysnKQogICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV93aXRoX2xpbmUgKHBhdHRlcm5f
bGluZW5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCAl
ZCBtaXNzaW5nIG91dHB1dCByZWxvYWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoKChwYXR0ZXJuKS0+ZmxkWzBdKS5ydGludCkpOwogICAgICAgICAgICAgICAgICAg
IGVycm9yX2NvdW50Kys7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAg
ICAgICB9CgoKCgogICAgICAgIGlmIChzZXQKICAgICAgICAgICAgJiYgcHJlZF9uYW1lWzBdICE9
ICdcMCcKICAgICAgICAgICAgJiYgYWxsb3dzX25vbl9sdmFsdWUpCiAgICAgICAgICB7CiAgICAg
ICAgICAgIG1lc3NhZ2Vfd2l0aF9saW5lIChwYXR0ZXJuX2xpbmVubywKICAgICAgICAgICAgICAg
ICAgICAgICAgIndhcm5pbmc6IGRlc3RpbmF0aW9uIG9wZXJhbmQgJWQgYWxsb3dzIG5vbi1sdmFs
dWUiLAogICAgICAgICAgICAgICAgICAgICAgICAoKChwYXR0ZXJuKS0+ZmxkWzBdKS5ydGludCkp
OwogICAgICAgICAgfQojIDYxNiAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJl
Y29nLmMiCiAgICAgICAgaWYgKCgoZW51bSBtYWNoaW5lX21vZGUpIChwYXR0ZXJuKS0+bW9kZSkg
PT0gVk9JRG1vZGUKICAgICAgICAgICAgJiYgY29kZSA9PSBNQVRDSF9PUEVSQU5ECiAgICAgICAg
ICAgICYmICgoZW51bSBydHhfY29kZSkgKGluc24pLT5jb2RlKSA9PSBERUZJTkVfSU5TTgogICAg
ICAgICAgICAmJiBhbGxvd3Nfbm9uX2NvbnN0CiAgICAgICAgICAgICYmICEgc3BlY2lhbF9tb2Rl
X3ByZWQKICAgICAgICAgICAgJiYgcHJlZF9uYW1lWzBdICE9ICdcMCcKICAgICAgICAgICAgJiYg
c3RyY21wIChwcmVkX25hbWUsICJhZGRyZXNzX29wZXJhbmQiKSAhPSAwCiAgICAgICAgICAgICYm
IHN0cnN0ciAoY190ZXN0LCAib3BlcmFuZHMiKSA9PSAoKHZvaWQgKikwKQogICAgICAgICAgICAm
JiAhIChzZXQKICAgICAgICAgICAgICAgICAgJiYgKChlbnVtIHJ0eF9jb2RlKSAoc2V0KS0+Y29k
ZSkgPT0gU0VUCiAgICAgICAgICAgICAgICAgICYmICgoZW51bSBydHhfY29kZSkgKCgoKHNldCkt
PmZsZFsxXSkucnR4KSktPmNvZGUpID09IENBTEwpKQogICAgICAgICAgewogICAgICAgICAgICBt
ZXNzYWdlX3dpdGhfbGluZSAocGF0dGVybl9saW5lbm8sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAid2FybmluZzogb3BlcmFuZCAlZCBtaXNzaW5nIG1vZGU/IiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICgoKHBhdHRlcm4pLT5mbGRbMF0pLnJ0aW50KSk7CiAgICAgICAg
ICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgY2FzZSBTRVQ6CiAgICAgIHsKICAgICAg
ICBlbnVtIG1hY2hpbmVfbW9kZSBkbW9kZSwgc21vZGU7CiAgICAgICAgcnR4IGRlc3QsIHNyYzsK
CiAgICAgICAgZGVzdCA9ICgoKHBhdHRlcm4pLT5mbGRbMF0pLnJ0eCk7CiAgICAgICAgc3JjID0g
KCgocGF0dGVybiktPmZsZFsxXSkucnR4KTsKCgoKICAgICAgICBpZiAoKChlbnVtIHJ0eF9jb2Rl
KSAoZGVzdCktPmNvZGUpID09IFNUUklDVF9MT1dfUEFSVCkKICAgICAgICAgIGRlc3QgPSAoKChk
ZXN0KS0+ZmxkWzBdKS5ydHgpOwoKCgogICAgICAgIGlmICgoKGVudW0gcnR4X2NvZGUpIChkZXN0
KS0+Y29kZSkgPT0gTUFUQ0hfRFVQCiAgICAgICAgICAgIHx8ICgoZW51bSBydHhfY29kZSkgKGRl
c3QpLT5jb2RlKSA9PSBNQVRDSF9PUF9EVVAKICAgICAgICAgICAgfHwgKChlbnVtIHJ0eF9jb2Rl
KSAoZGVzdCktPmNvZGUpID09IE1BVENIX1BBUl9EVVApCiAgICAgICAgICBkZXN0ID0gZmluZF9v
cGVyYW5kIChpbnNuLCAoKChkZXN0KS0+ZmxkWzBdKS5ydGludCkpOwoKICAgICAgICBpZiAoKChl
bnVtIHJ0eF9jb2RlKSAoc3JjKS0+Y29kZSkgPT0gTUFUQ0hfRFVQCiAgICAgICAgICAgIHx8ICgo
ZW51bSBydHhfY29kZSkgKHNyYyktPmNvZGUpID09IE1BVENIX09QX0RVUAogICAgICAgICAgICB8
fCAoKGVudW0gcnR4X2NvZGUpIChzcmMpLT5jb2RlKSA9PSBNQVRDSF9QQVJfRFVQKQogICAgICAg
ICAgc3JjID0gZmluZF9vcGVyYW5kIChpbnNuLCAoKChzcmMpLT5mbGRbMF0pLnJ0aW50KSk7Cgog
ICAgICAgIGRtb2RlID0gKChlbnVtIG1hY2hpbmVfbW9kZSkgKGRlc3QpLT5tb2RlKTsKICAgICAg
ICBzbW9kZSA9ICgoZW51bSBtYWNoaW5lX21vZGUpIChzcmMpLT5tb2RlKTsKCgoKICAgICAgICBp
ZiAoKChlbnVtIHJ0eF9jb2RlKSAoc3JjKS0+Y29kZSkgPT0gTUFUQ0hfT1BFUkFORAogICAgICAg
ICAgICAmJiAhIHN0cmNtcCAoKCgoc3JjKS0+ZmxkWzFdKS5ydHN0ciksICJhZGRyZXNzX29wZXJh
bmQiKSkKICAgICAgICAgIDsKCgoKICAgICAgICBlbHNlIGlmIChkbW9kZSAhPSBWT0lEbW9kZSAm
JiBzbW9kZSAhPSBWT0lEbW9kZSAmJiBkbW9kZSAhPSBzbW9kZSkKICAgICAgICAgIHsKICAgICAg
ICAgICAgbWVzc2FnZV93aXRoX2xpbmUgKHBhdHRlcm5fbGluZW5vLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIm1vZGUgbWlzbWF0Y2ggaW4gc2V0OiAlc21vZGUgdnMgJXNtb2RlIiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlX25hbWVbKGludCkgKGRtb2RlKV0p
LCAobW9kZV9uYW1lWyhpbnQpIChzbW9kZSldKSk7CiAgICAgICAgICAgIGVycm9yX2NvdW50Kys7
CiAgICAgICAgICB9CgoKCiAgICAgICAgZWxzZSBpZiAoZG1vZGUgIT0gc21vZGUKICAgICAgICAg
ICAgICAgICAmJiAoKGVudW0gcnR4X2NvZGUpIChkZXN0KS0+Y29kZSkgIT0gUEMKICAgICAgICAg
ICAgICAgICAmJiAoKGVudW0gcnR4X2NvZGUpIChkZXN0KS0+Y29kZSkgIT0gQ0MwCiAgICAgICAg
ICAgICAgICAgJiYgKChlbnVtIHJ0eF9jb2RlKSAoc3JjKS0+Y29kZSkgIT0gUEMKICAgICAgICAg
ICAgICAgICAmJiAoKGVudW0gcnR4X2NvZGUpIChzcmMpLT5jb2RlKSAhPSBDQzAKICAgICAgICAg
ICAgICAgICAmJiAoKGVudW0gcnR4X2NvZGUpIChzcmMpLT5jb2RlKSAhPSBDT05TVF9JTlQpCiAg
ICAgICAgICB7CiAgICAgICAgICAgIGNvbnN0IGNoYXIgKndoaWNoOwogICAgICAgICAgICB3aGlj
aCA9IChkbW9kZSA9PSBWT0lEbW9kZSA/ICJkZXN0aW5hdGlvbiIgOiAic291cmNlIik7CiAgICAg
ICAgICAgIG1lc3NhZ2Vfd2l0aF9saW5lIChwYXR0ZXJuX2xpbmVubywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJ3YXJuaW5nOiAlcyBtaXNzaW5nIGEgbW9kZT8iLCB3aGljaCk7CiAg
ICAgICAgICB9CgogICAgICAgIGlmIChkZXN0ICE9ICgoKHBhdHRlcm4pLT5mbGRbMF0pLnJ0eCkp
CiAgICAgICAgICB2YWxpZGF0ZV9wYXR0ZXJuIChkZXN0LCBpbnNuLCBwYXR0ZXJuLCAnPScpOwog
ICAgICAgIHZhbGlkYXRlX3BhdHRlcm4gKCgoKHBhdHRlcm4pLT5mbGRbMF0pLnJ0eCksIGluc24s
IHBhdHRlcm4sICc9Jyk7CiAgICAgICAgdmFsaWRhdGVfcGF0dGVybiAoKCgocGF0dGVybiktPmZs
ZFsxXSkucnR4KSwgaW5zbiwgKHJ0eCkgMCwgMCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9Cgog
ICAgY2FzZSBDTE9CQkVSOgogICAgICB2YWxpZGF0ZV9wYXR0ZXJuICgoKChwYXR0ZXJuKS0+Zmxk
WzBdKS5ydHgpLCBpbnNuLCBwYXR0ZXJuLCAnPScpOwogICAgICByZXR1cm47CgogICAgY2FzZSBa
RVJPX0VYVFJBQ1Q6CiAgICAgIHZhbGlkYXRlX3BhdHRlcm4gKCgoKHBhdHRlcm4pLT5mbGRbMF0p
LnJ0eCksIGluc24sIHNldCwgc2V0ID8gJysnIDogMCk7CiAgICAgIHZhbGlkYXRlX3BhdHRlcm4g
KCgoKHBhdHRlcm4pLT5mbGRbMV0pLnJ0eCksIGluc24sIChydHgpIDAsIDApOwogICAgICB2YWxp
ZGF0ZV9wYXR0ZXJuICgoKChwYXR0ZXJuKS0+ZmxkWzJdKS5ydHgpLCBpbnNuLCAocnR4KSAwLCAw
KTsKICAgICAgcmV0dXJuOwoKICAgIGNhc2UgU1RSSUNUX0xPV19QQVJUOgogICAgICB2YWxpZGF0
ZV9wYXR0ZXJuICgoKChwYXR0ZXJuKS0+ZmxkWzBdKS5ydHgpLCBpbnNuLCBzZXQsIHNldCA/ICcr
JyA6IDApOwogICAgICByZXR1cm47CgogICAgY2FzZSBMQUJFTF9SRUY6CiAgICAgIGlmICgoKGVu
dW0gbWFjaGluZV9tb2RlKSAoKCgocGF0dGVybiktPmZsZFswXSkucnR4KSktPm1vZGUpICE9IFZP
SURtb2RlKQogICAgICAgIHsKICAgICAgICAgIG1lc3NhZ2Vfd2l0aF9saW5lIChwYXR0ZXJuX2xp
bmVubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmFuZCB0byBsYWJlbF9yZWYg
JXNtb2RlIG5vdCBWT0lEbW9kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVf
bmFtZVsoaW50KSAoKChlbnVtIG1hY2hpbmVfbW9kZSkgKCgoKHBhdHRlcm4pLT5mbGRbMF0pLnJ0
eCkpLT5tb2RlKSldKSk7CiAgICAgICAgICBlcnJvcl9jb3VudCsrOwogICAgICAgIH0KICAgICAg
YnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgYnJlYWs7CiAgICB9CgogIGZtdCA9IChydHhfZm9y
bWF0WyhpbnQpIChjb2RlKV0pOwogIGxlbiA9IChydHhfbGVuZ3RoWyhpbnQpIChjb2RlKV0pOwog
IGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKICAgIHsKICAgICAgc3dpdGNoIChmbXRbaV0pCiAg
ICAgICAgewogICAgICAgIGNhc2UgJ2UnOiBjYXNlICd1JzoKICAgICAgICAgIHZhbGlkYXRlX3Bh
dHRlcm4gKCgoKHBhdHRlcm4pLT5mbGRbaV0pLnJ0eCksIGluc24sIChydHgpIDAsIDApOwogICAg
ICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ0UnOgogICAgICAgICAgZm9yIChqID0gMDsgaiA8
ICgoKCgocGF0dGVybiktPmZsZFtpXSkucnR2ZWMpKS0+bnVtX2VsZW0pOyBqKyspCiAgICAgICAg
ICAgIHZhbGlkYXRlX3BhdHRlcm4gKCgoKCgocGF0dGVybiktPmZsZFtpXSkucnR2ZWMpKS0+ZWxl
bVtqXSksIGluc24sIChydHgpIDAsIDApOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2Ug
J2knOiBjYXNlICd3JzogY2FzZSAnMCc6IGNhc2UgJ3MnOgogICAgICAgICAgYnJlYWs7CgogICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICBmYW5jeV9hYm9ydCAoIi4uLy4uL2VnY2MtMy4xLUNWUzIw
MDIwNDE4L2djYy9nZW5yZWNvZy5jIiwgNzQ4LCBfX0ZVTkNUSU9OX18pOwogICAgICAgIH0KICAg
IH0KfQojIDc2NSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiCnN0
YXRpYyBzdHJ1Y3QgZGVjaXNpb24gKgphZGRfdG9fc2VxdWVuY2UgKHBhdHRlcm4sIGxhc3QsIHBv
c2l0aW9uLCBpbnNuX3R5cGUsIHRvcCkKICAgICBydHggcGF0dGVybjsKICAgICBzdHJ1Y3QgZGVj
aXNpb25faGVhZCAqbGFzdDsKICAgICBjb25zdCBjaGFyICpwb3NpdGlvbjsKICAgICBlbnVtIHJv
dXRpbmVfdHlwZSBpbnNuX3R5cGU7CiAgICAgaW50IHRvcDsKewogIGVudW0gcnR4X2NvZGUgY29k
ZTsKICBzdHJ1Y3QgZGVjaXNpb24gKnRoaXMsICpzdWI7CiAgc3RydWN0IGRlY2lzaW9uX3Rlc3Qg
KnRlc3Q7CiAgc3RydWN0IGRlY2lzaW9uX3Rlc3QgKipwbGFjZTsKICBjaGFyICpzdWJwb3M7CiAg
c2l6ZV90IGk7CiAgY29uc3QgY2hhciAqZm10OwogIGludCBkZXB0aCA9IHN0cmxlbiAocG9zaXRp
b24pOwogIGludCBsZW47CiAgZW51bSBtYWNoaW5lX21vZGUgbW9kZTsKCiAgaWYgKGRlcHRoID4g
bWF4X2RlcHRoKQogICAgbWF4X2RlcHRoID0gZGVwdGg7CgogIHN1YnBvcyA9IChjaGFyICopIHht
YWxsb2MgKGRlcHRoICsgMik7CiAgc3RyY3B5IChzdWJwb3MsIHBvc2l0aW9uKTsKICBzdWJwb3Nb
ZGVwdGggKyAxXSA9IDA7CgogIHN1YiA9IHRoaXMgPSBuZXdfZGVjaXNpb24gKHBvc2l0aW9uLCBs
YXN0KTsKICBwbGFjZSA9ICZ0aGlzLT50ZXN0czsKCiByZXN0YXJ0OgogIG1vZGUgPSAoKGVudW0g
bWFjaGluZV9tb2RlKSAocGF0dGVybiktPm1vZGUpOwogIGNvZGUgPSAoKGVudW0gcnR4X2NvZGUp
IChwYXR0ZXJuKS0+Y29kZSk7CgogIHN3aXRjaCAoY29kZSkKICAgIHsKICAgIGNhc2UgUEFSQUxM
RUw6CgogICAgICBpZiAoaW5zbl90eXBlID09IFBFRVBIT0xFMiAmJiB0b3ApCiAgICAgICAgewoK
ICAgICAgICAgIGxhc3QtPmZpcnN0ID0gbGFzdC0+bGFzdCA9ICgodm9pZCAqKTApOwoKICAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCAoc2l6ZV90KSAoKCgoKHBhdHRlcm4pLT5mbGRbMF0pLnJ0dmVj
KSktPm51bV9lbGVtKTsgaSsrKQogICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgc3VicG9z
W2RlcHRoXSA9IChpID4gMCA/ICdBJyArIGkgOiAwKTsKICAgICAgICAgICAgICBzdWIgPSBhZGRf
dG9fc2VxdWVuY2UgKCgoKCgocGF0dGVybiktPmZsZFswXSkucnR2ZWMpKS0+ZWxlbVtpXSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0LCBzdWJwb3MsIGluc25fdHlw
ZSwgMCk7CiAgICAgICAgICAgICAgbGFzdCA9ICZzdWItPnN1Y2Nlc3M7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGdvdG8gcmV0OwogICAgICAgIH0KCgogICAgICBicmVhazsKCiAgICBjYXNlIE1B
VENIX1BBUkFMTEVMOgoKCgoKCiAgICAgIHRlc3QgPSBuZXdfZGVjaXNpb25fdGVzdCAoRFRfdmVj
bGVuX2dlLCAmcGxhY2UpOwogICAgICB0ZXN0LT51LnZlY2xlbiA9ICgoKCgocGF0dGVybiktPmZs
ZFsyXSkucnR2ZWMpKS0+bnVtX2VsZW0pOwoKCiAgICBjYXNlIE1BVENIX09QRVJBTkQ6CiAgICBj
YXNlIE1BVENIX1NDUkFUQ0g6CiAgICBjYXNlIE1BVENIX09QRVJBVE9SOgogICAgY2FzZSBNQVRD
SF9JTlNOOgogICAgICB7CiAgICAgICAgY29uc3QgY2hhciAqcHJlZF9uYW1lOwogICAgICAgIGVu
dW0gcnR4X2NvZGUgd2FzX2NvZGUgPSBjb2RlOwogICAgICAgIGludCBhbGxvd3NfY29uc3RfaW50
ID0gMTsKCiAgICAgICAgaWYgKGNvZGUgPT0gTUFUQ0hfU0NSQVRDSCkKICAgICAgICAgIHsKICAg
ICAgICAgICAgcHJlZF9uYW1lID0gInNjcmF0Y2hfb3BlcmFuZCI7CiAgICAgICAgICAgIGNvZGUg
PSBVTktOT1dOOwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAg
ICAgcHJlZF9uYW1lID0gKCgocGF0dGVybiktPmZsZFsxXSkucnRzdHIpOwogICAgICAgICAgICBp
ZiAoY29kZSA9PSBNQVRDSF9QQVJBTExFTCkKICAgICAgICAgICAgICBjb2RlID0gUEFSQUxMRUw7
CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBjb2RlID0gVU5LTk9XTjsKICAgICAgICAg
IH0KCiAgICAgICAgaWYgKHByZWRfbmFtZVswXSAhPSAwKQogICAgICAgICAgewogICAgICAgICAg
ICB0ZXN0ID0gbmV3X2RlY2lzaW9uX3Rlc3QgKERUX3ByZWQsICZwbGFjZSk7CiAgICAgICAgICAg
IHRlc3QtPnUucHJlZC5uYW1lID0gcHJlZF9uYW1lOwogICAgICAgICAgICB0ZXN0LT51LnByZWQu
bW9kZSA9IG1vZGU7CiMgODczICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVj
b2cuYyIKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IChzaXplb2YgKHByZWRzKSAvIHNpemVv
ZiAoKHByZWRzKVswXSkpOyBpKyspCiAgICAgICAgICAgICAgaWYgKCEgc3RyY21wIChwcmVkc1tp
XS5uYW1lLCBwcmVkX25hbWUpKQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBp
ZiAoaSA8IChzaXplb2YgKHByZWRzKSAvIHNpemVvZiAoKHByZWRzKVswXSkpKQogICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIGludCBqOwoKICAgICAgICAgICAgICAgIHRlc3QtPnUucHJl
ZC5pbmRleCA9IGk7CgogICAgICAgICAgICAgICAgaWYgKHByZWRzW2ldLmNvZGVzWzFdID09IDAg
JiYgY29kZSA9PSBVTktOT1dOKQogICAgICAgICAgICAgICAgICBjb2RlID0gcHJlZHNbaV0uY29k
ZXNbMF07CgogICAgICAgICAgICAgICAgYWxsb3dzX2NvbnN0X2ludCA9IDA7CiAgICAgICAgICAg
ICAgICBmb3IgKGogPSAwOyBwcmVkc1tpXS5jb2Rlc1tqXSAhPSAwOyBqKyspCiAgICAgICAgICAg
ICAgICAgIGlmIChwcmVkc1tpXS5jb2Rlc1tqXSA9PSBDT05TVF9JTlQpCiAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgYWxsb3dzX2NvbnN0X2ludCA9IDE7CiAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgdGVzdC0+dS5wcmVkLmluZGV4ID0g
LTE7CiAgICAgICAgICB9CgoKICAgICAgICBpZiAoYWxsb3dzX2NvbnN0X2ludCkKICAgICAgICAg
IG1vZGUgPSBWT0lEbW9kZTsKCgogICAgICAgIHRlc3QgPSBuZXdfZGVjaXNpb25fdGVzdCAoRFRf
YWNjZXB0X29wLCAmcGxhY2UpOwogICAgICAgIHRlc3QtPnUub3BubyA9ICgoKHBhdHRlcm4pLT5m
bGRbMF0pLnJ0aW50KTsKCiAgICAgICAgaWYgKHdhc19jb2RlID09IE1BVENIX09QRVJBVE9SIHx8
IHdhc19jb2RlID09IE1BVENIX1BBUkFMTEVMKQogICAgICAgICAgewogICAgICAgICAgICBjaGFy
IGJhc2UgPSAod2FzX2NvZGUgPT0gTUFUQ0hfT1BFUkFUT1IgPyAnMCcgOiAnYScpOwogICAgICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgKHNpemVfdCkgKCgoKChwYXR0ZXJuKS0+ZmxkWzJdKS5ydHZl
YykpLT5udW1fZWxlbSk7IGkrKykKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdWJw
b3NbZGVwdGhdID0gaSArIGJhc2U7CiAgICAgICAgICAgICAgICBzdWIgPSBhZGRfdG9fc2VxdWVu
Y2UgKCgoKCgocGF0dGVybiktPmZsZFsyXSkucnR2ZWMpKS0+ZWxlbVtpXSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdWItPnN1Y2Nlc3MsIHN1YnBvcywgaW5zbl90
eXBlLCAwKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgZ290byBmaW5pOwog
ICAgICB9CgogICAgY2FzZSBNQVRDSF9PUF9EVVA6CiAgICAgIGNvZGUgPSBVTktOT1dOOwoKICAg
ICAgdGVzdCA9IG5ld19kZWNpc2lvbl90ZXN0IChEVF9kdXAsICZwbGFjZSk7CiAgICAgIHRlc3Qt
PnUuZHVwID0gKCgocGF0dGVybiktPmZsZFswXSkucnRpbnQpOwoKICAgICAgdGVzdCA9IG5ld19k
ZWNpc2lvbl90ZXN0IChEVF9hY2NlcHRfb3AsICZwbGFjZSk7CiAgICAgIHRlc3QtPnUub3BubyA9
ICgoKHBhdHRlcm4pLT5mbGRbMF0pLnJ0aW50KTsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCAoc2l6
ZV90KSAoKCgoKHBhdHRlcm4pLT5mbGRbMV0pLnJ0dmVjKSktPm51bV9lbGVtKTsgaSsrKQogICAg
ICAgIHsKICAgICAgICAgIHN1YnBvc1tkZXB0aF0gPSBpICsgJzAnOwogICAgICAgICAgc3ViID0g
YWRkX3RvX3NlcXVlbmNlICgoKCgoKHBhdHRlcm4pLT5mbGRbMV0pLnJ0dmVjKSktPmVsZW1baV0p
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3ViLT5zdWNjZXNzLCBzdWJwb3Ms
IGluc25fdHlwZSwgMCk7CiAgICAgICAgfQogICAgICBnb3RvIGZpbmk7CgogICAgY2FzZSBNQVRD
SF9EVVA6CiAgICBjYXNlIE1BVENIX1BBUl9EVVA6CiAgICAgIGNvZGUgPSBVTktOT1dOOwoKICAg
ICAgdGVzdCA9IG5ld19kZWNpc2lvbl90ZXN0IChEVF9kdXAsICZwbGFjZSk7CiAgICAgIHRlc3Qt
PnUuZHVwID0gKCgocGF0dGVybiktPmZsZFswXSkucnRpbnQpOwogICAgICBnb3RvIGZpbmk7Cgog
ICAgY2FzZSBBRERSRVNTOgogICAgICBwYXR0ZXJuID0gKCgocGF0dGVybiktPmZsZFswXSkucnR4
KTsKICAgICAgZ290byByZXN0YXJ0OwoKICAgIGRlZmF1bHQ6CiAgICAgIGJyZWFrOwogICAgfQoK
ICBmbXQgPSAocnR4X2Zvcm1hdFsoaW50KSAoY29kZSldKTsKICBsZW4gPSAocnR4X2xlbmd0aFso
aW50KSAoY29kZSldKTsKCgogIGZvciAoaSA9IDA7IGkgPCAoc2l6ZV90KSBsZW47IGkrKykKICAg
IHsKICAgICAgaWYgKGZtdFtpXSA9PSAnaScpCiAgICAgICAgewogICAgICAgICAgaWYgKGkgPT0g
MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHRlc3QgPSBuZXdfZGVjaXNpb25fdGVzdCAo
RFRfZWx0X3plcm9faW50LCAmcGxhY2UpOwogICAgICAgICAgICAgIHRlc3QtPnUuaW50dmFsID0g
KCgocGF0dGVybiktPmZsZFtpXSkucnRpbnQpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNl
IGlmIChpID09IDEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0ZXN0ID0gbmV3X2RlY2lz
aW9uX3Rlc3QgKERUX2VsdF9vbmVfaW50LCAmcGxhY2UpOwogICAgICAgICAgICAgIHRlc3QtPnUu
aW50dmFsID0gKCgocGF0dGVybiktPmZsZFtpXSkucnRpbnQpOwogICAgICAgICAgICB9CiAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgIGZhbmN5X2Fib3J0ICgiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAw
MjA0MTgvZ2NjL2dlbnJlY29nLmMiLCA5NzEsIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgfQogICAg
ICBlbHNlIGlmIChmbXRbaV0gPT0gJ3cnKQogICAgICAgIHsKCgogICAgICAgICAgZW51bSBkZWNp
c2lvbl90eXBlIHR5cGUKICAgICAgICAgICAgPSAoKGludCkgKCgocGF0dGVybiktPmZsZFtpXSku
cnR3aW50KSA9PSAoKChwYXR0ZXJuKS0+ZmxkW2ldKS5ydHdpbnQpKQogICAgICAgICAgICAgID8g
RFRfZWx0X3plcm9fd2lkZV9zYWZlIDogRFRfZWx0X3plcm9fd2lkZTsKCiAgICAgICAgICBpZiAo
aSAhPSAwKQogICAgICAgICAgICBmYW5jeV9hYm9ydCAoIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIw
NDE4L2djYy9nZW5yZWNvZy5jIiwgOTgyLCBfX0ZVTkNUSU9OX18pOwoKICAgICAgICAgIHRlc3Qg
PSBuZXdfZGVjaXNpb25fdGVzdCAodHlwZSwgJnBsYWNlKTsKICAgICAgICAgIHRlc3QtPnUuaW50
dmFsID0gKCgocGF0dGVybiktPmZsZFtpXSkucnR3aW50KTsKICAgICAgICB9CiAgICAgIGVsc2Ug
aWYgKGZtdFtpXSA9PSAnRScpCiAgICAgICAgewogICAgICAgICAgaWYgKGkgIT0gMCkKICAgICAg
ICAgICAgZmFuY3lfYWJvcnQgKCIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVj
b2cuYyIsIDk5MCwgX19GVU5DVElPTl9fKTsKCiAgICAgICAgICB0ZXN0ID0gbmV3X2RlY2lzaW9u
X3Rlc3QgKERUX3ZlY2xlbiwgJnBsYWNlKTsKICAgICAgICAgIHRlc3QtPnUudmVjbGVuID0gKCgo
KChwYXR0ZXJuKS0+ZmxkW2ldKS5ydHZlYykpLT5udW1fZWxlbSk7CiAgICAgICAgfQogICAgfQoK
CiAgZm9yIChpID0gMDsgaSA8IChzaXplX3QpIGxlbjsgaSsrKQogICAgewogICAgICBzd2l0Y2gg
KGZtdFtpXSkKICAgICAgICB7CiAgICAgICAgY2FzZSAnZSc6IGNhc2UgJ3UnOgogICAgICAgICAg
c3VicG9zW2RlcHRoXSA9ICcwJyArIGk7CiAgICAgICAgICBzdWIgPSBhZGRfdG9fc2VxdWVuY2Ug
KCgoKHBhdHRlcm4pLT5mbGRbaV0pLnJ0eCksICZzdWItPnN1Y2Nlc3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN1YnBvcywgaW5zbl90eXBlLCAwKTsKICAgICAgICAgIGJyZWFr
OwoKICAgICAgICBjYXNlICdFJzoKICAgICAgICAgIHsKICAgICAgICAgICAgaW50IGo7CiAgICAg
ICAgICAgIGZvciAoaiA9IDA7IGogPCAoKCgoKHBhdHRlcm4pLT5mbGRbaV0pLnJ0dmVjKSktPm51
bV9lbGVtKTsgaisrKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN1YnBvc1tkZXB0
aF0gPSAnYScgKyBqOwogICAgICAgICAgICAgICAgc3ViID0gYWRkX3RvX3NlcXVlbmNlICgoKCgo
KHBhdHRlcm4pLT5mbGRbaV0pLnJ0dmVjKSktPmVsZW1bal0pLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmc3ViLT5zdWNjZXNzLCBzdWJwb3MsIGluc25fdHlwZSwgMCk7
CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KCiAgICAgICAg
Y2FzZSAnaSc6IGNhc2UgJ3cnOgoKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJzAnOgog
ICAgICAgICAgYnJlYWs7CgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBmYW5jeV9hYm9ydCAo
Ii4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9nZW5yZWNvZy5jIiwgMTAyNywgX19GVU5D
VElPTl9fKTsKICAgICAgICB9CiAgICB9CgogZmluaToKCgogIGlmIChjb2RlICE9IFVOS05PV04p
CiAgICB7CiAgICAgIHBsYWNlID0gJnRoaXMtPnRlc3RzOwogICAgICB0ZXN0ID0gbmV3X2RlY2lz
aW9uX3Rlc3QgKERUX2NvZGUsICZwbGFjZSk7CiAgICAgIHRlc3QtPnUuY29kZSA9IGNvZGU7CiAg
ICB9CgogIGlmIChtb2RlICE9IFZPSURtb2RlKQogICAgewogICAgICBwbGFjZSA9ICZ0aGlzLT50
ZXN0czsKICAgICAgdGVzdCA9IG5ld19kZWNpc2lvbl90ZXN0IChEVF9tb2RlLCAmcGxhY2UpOwog
ICAgICB0ZXN0LT51Lm1vZGUgPSBtb2RlOwogICAgfQoKCiAgaWYgKHRoaXMtPnRlc3RzID09ICgo
dm9pZCAqKTApKQogICAgZmFuY3lfYWJvcnQgKCIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9n
Y2MvZ2VucmVjb2cuYyIsIDEwNTAsIF9fRlVOQ1RJT05fXyk7CgogcmV0OgogIGZyZWUgKHN1YnBv
cyk7CiAgcmV0dXJuIHN1YjsKfQoKCgoKc3RhdGljIGludAptYXliZV9ib3RoX3RydWVfMiAoZDEs
IGQyKQogICAgIHN0cnVjdCBkZWNpc2lvbl90ZXN0ICpkMSwgKmQyOwp7CiAgaWYgKGQxLT50eXBl
ID09IGQyLT50eXBlKQogICAgewogICAgICBzd2l0Y2ggKGQxLT50eXBlKQogICAgICAgIHsKICAg
ICAgICBjYXNlIERUX21vZGU6CiAgICAgICAgICByZXR1cm4gZDEtPnUubW9kZSA9PSBkMi0+dS5t
b2RlOwoKICAgICAgICBjYXNlIERUX2NvZGU6CiAgICAgICAgICByZXR1cm4gZDEtPnUuY29kZSA9
PSBkMi0+dS5jb2RlOwoKICAgICAgICBjYXNlIERUX3ZlY2xlbjoKICAgICAgICAgIHJldHVybiBk
MS0+dS52ZWNsZW4gPT0gZDItPnUudmVjbGVuOwoKICAgICAgICBjYXNlIERUX2VsdF96ZXJvX2lu
dDoKICAgICAgICBjYXNlIERUX2VsdF9vbmVfaW50OgogICAgICAgIGNhc2UgRFRfZWx0X3plcm9f
d2lkZToKICAgICAgICBjYXNlIERUX2VsdF96ZXJvX3dpZGVfc2FmZToKICAgICAgICAgIHJldHVy
biBkMS0+dS5pbnR2YWwgPT0gZDItPnUuaW50dmFsOwoKICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKCgoKCiAgaWYgKGQxLT50eXBlID09IERUX3ByZWQg
fHwgZDItPnR5cGUgPT0gRFRfcHJlZCkKICAgIHsKICAgICAgaWYgKGQyLT50eXBlID09IERUX3By
ZWQpCiAgICAgICAgewogICAgICAgICAgc3RydWN0IGRlY2lzaW9uX3Rlc3QgKnRtcDsKICAgICAg
ICAgIHRtcCA9IGQxLCBkMSA9IGQyLCBkMiA9IHRtcDsKICAgICAgICB9CgoKICAgICAgaWYgKGQx
LT51LnByZWQubW9kZSAhPSBWT0lEbW9kZSkKICAgICAgICB7CiAgICAgICAgICBpZiAoZDItPnR5
cGUgPT0gRFRfbW9kZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChkMS0+dS5wcmVk
Lm1vZGUgIT0gZDItPnUubW9kZQoKCgoKICAgICAgICAgICAgICAgICAgJiYgc3RyY21wIChkMS0+
dS5wcmVkLm5hbWUsICJhZGRyZXNzX29wZXJhbmQiKSAhPSAwKQogICAgICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgICAgIH0KCgoKCiAgICAgICAgfQoKICAgICAgaWYgKGQxLT51LnByZWQu
aW5kZXggPj0gMCkKICAgICAgICB7CgoKICAgICAgICAgIGlmIChkMi0+dHlwZSA9PSBEVF9jb2Rl
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgZW51bSBydHhfY29kZSAqYyA9ICZw
cmVkc1tkMS0+dS5wcmVkLmluZGV4XS5jb2Rlc1swXTsKICAgICAgICAgICAgICB3aGlsZSAoKmMg
IT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKCpjID09IGQyLT51
LmNvZGUpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICsrYzsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoKmMgPT0gMCkKICAgICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICAgICB9CgoKICAgICAgICAgIGVsc2UgaWYgKGQyLT50eXBl
ID09IERUX3ByZWQgJiYgZDItPnUucHJlZC5pbmRleCA+PSAwKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgY29uc3QgZW51bSBydHhfY29kZSAqYzEgPSAmcHJlZHNbZDEtPnUucHJlZC5pbmRl
eF0uY29kZXNbMF07CiAgICAgICAgICAgICAgaW50IGNvbW1vbiA9IDA7CgogICAgICAgICAgICAg
IHdoaWxlICgqYzEgIT0gMCAmJiAhY29tbW9uKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBjb25zdCBlbnVtIHJ0eF9jb2RlICpjMiA9ICZwcmVkc1tkMi0+dS5wcmVkLmluZGV4
XS5jb2Rlc1swXTsKICAgICAgICAgICAgICAgICAgd2hpbGUgKCpjMiAhPSAwICYmICFjb21tb24p
CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgY29tbW9uID0gKCpj
MSA9PSAqYzIpOwogICAgICAgICAgICAgICAgICAgICAgKytjMjsKICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICsrYzE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg
ICAgIGlmICghY29tbW9uKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICB9CgoKICBpZiAoZDEtPnR5cGUgPT0gRFRfdmVjbGVuICYmIGQyLT50eXBl
ID09IERUX3ZlY2xlbl9nZSkKICAgIHJldHVybiBkMS0+dS52ZWNsZW4gPj0gZDItPnUudmVjbGVu
OwogIGlmIChkMS0+dHlwZSA9PSBEVF92ZWNsZW5fZ2UgJiYgZDItPnR5cGUgPT0gRFRfdmVjbGVu
KQogICAgcmV0dXJuIGQyLT51LnZlY2xlbiA+PSBkMS0+dS52ZWNsZW47CgogIHJldHVybiAtMTsK
fQoKCgoKc3RhdGljIGludAptYXliZV9ib3RoX3RydWVfMSAoZDEsIGQyKQogICAgIHN0cnVjdCBk
ZWNpc2lvbl90ZXN0ICpkMSwgKmQyOwp7CiAgc3RydWN0IGRlY2lzaW9uX3Rlc3QgKnQxLCAqdDI7
CgoKCiAgaWYgKGQxLT50eXBlID09IERUX2FjY2VwdF9vcCB8fCBkMi0+dHlwZSA9PSBEVF9hY2Nl
cHRfb3ApCiAgICByZXR1cm4gMTsKCgogIHdoaWxlIChkMSAmJiBkMiAmJiBkMS0+dHlwZSA9PSBk
Mi0+dHlwZSkKICAgIHsKICAgICAgaWYgKG1heWJlX2JvdGhfdHJ1ZV8yIChkMSwgZDIpID09IDAp
CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIGQxID0gZDEtPm5leHQsIGQyID0gZDItPm5leHQ7CiAg
ICB9CgoKICBmb3IgKHQxID0gZDE7IHQxIDsgdDEgPSB0MS0+bmV4dCkKICAgIGZvciAodDIgPSBk
MjsgdDIgOyB0MiA9IHQyLT5uZXh0KQogICAgICBpZiAobWF5YmVfYm90aF90cnVlXzIgKHQxLCB0
MikgPT0gMCkKICAgICAgICByZXR1cm4gMDsKCiAgcmV0dXJuIC0xOwp9CiMgMTIwNiAiLi4vLi4v
ZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiCnN0YXRpYyBpbnQKbWF5YmVfYm90
aF90cnVlIChkMSwgZDIsIHRvcGxldmVsKQogICAgIHN0cnVjdCBkZWNpc2lvbiAqZDEsICpkMjsK
ICAgICBpbnQgdG9wbGV2ZWw7CnsKICBzdHJ1Y3QgZGVjaXNpb24gKnAxLCAqcDI7CiAgaW50IGNt
cDsKIyAxMjMyICIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIKICBj
bXAgPSBzdHJjbXAgKGQxLT5wb3NpdGlvbiwgZDItPnBvc2l0aW9uKTsKICBpZiAoY21wICE9IDAp
CiAgICB7CiAgICAgIGlmICh0b3BsZXZlbCkKICAgICAgICBmYW5jeV9hYm9ydCAoIi4uLy4uL2Vn
Y2MtMy4xLUNWUzIwMDIwNDE4L2djYy9nZW5yZWNvZy5jIiwgMTIzNiwgX19GVU5DVElPTl9fKTsK
CgogICAgICBpZiAoY21wID4gMCkKICAgICAgICBwMSA9IGQxLCBkMSA9IGQyLCBkMiA9IHAxOwoK
ICAgICAgaWYgKGQxLT5zdWNjZXNzLmZpcnN0ID09IDApCiAgICAgICAgcmV0dXJuIDE7CiAgICAg
IGZvciAocDEgPSBkMS0+c3VjY2Vzcy5maXJzdDsgcDE7IHAxID0gcDEtPm5leHQpCiAgICAgICAg
aWYgKG1heWJlX2JvdGhfdHJ1ZSAocDEsIGQyLCAwKSkKICAgICAgICAgIHJldHVybiAxOwoKICAg
ICAgcmV0dXJuIDA7CiAgICB9CgoKICBjbXAgPSBtYXliZV9ib3RoX3RydWVfMSAoZDEtPnRlc3Rz
LCBkMi0+dGVzdHMpOwogIGlmIChjbXAgPj0gMCkKICAgIHJldHVybiBjbXA7CgoKCgoKCgogIGlm
ICh0b3BsZXZlbCB8fCBkMS0+c3VjY2Vzcy5maXJzdCA9PSAwIHx8IGQyLT5zdWNjZXNzLmZpcnN0
ID09IDApCiAgICByZXR1cm4gMTsKCiAgZm9yIChwMSA9IGQxLT5zdWNjZXNzLmZpcnN0OyBwMTsg
cDEgPSBwMS0+bmV4dCkKICAgIGZvciAocDIgPSBkMi0+c3VjY2Vzcy5maXJzdDsgcDI7IHAyID0g
cDItPm5leHQpCiAgICAgIGlmIChtYXliZV9ib3RoX3RydWUgKHAxLCBwMiwgMCkpCiAgICAgICAg
cmV0dXJuIDE7CgogIHJldHVybiAwOwp9CgoKCnN0YXRpYyBpbnQKbm9kZXNfaWRlbnRpY2FsXzEg
KGQxLCBkMikKICAgICBzdHJ1Y3QgZGVjaXNpb25fdGVzdCAqZDEsICpkMjsKewogIHN3aXRjaCAo
ZDEtPnR5cGUpCiAgICB7CiAgICBjYXNlIERUX21vZGU6CiAgICAgIHJldHVybiBkMS0+dS5tb2Rl
ID09IGQyLT51Lm1vZGU7CgogICAgY2FzZSBEVF9jb2RlOgogICAgICByZXR1cm4gZDEtPnUuY29k
ZSA9PSBkMi0+dS5jb2RlOwoKICAgIGNhc2UgRFRfcHJlZDoKICAgICAgcmV0dXJuIChkMS0+dS5w
cmVkLm1vZGUgPT0gZDItPnUucHJlZC5tb2RlCiAgICAgICAgICAgICAgJiYgc3RyY21wIChkMS0+
dS5wcmVkLm5hbWUsIGQyLT51LnByZWQubmFtZSkgPT0gMCk7CgogICAgY2FzZSBEVF9jX3Rlc3Q6
CiAgICAgIHJldHVybiBzdHJjbXAgKGQxLT51LmNfdGVzdCwgZDItPnUuY190ZXN0KSA9PSAwOwoK
ICAgIGNhc2UgRFRfdmVjbGVuOgogICAgY2FzZSBEVF92ZWNsZW5fZ2U6CiAgICAgIHJldHVybiBk
MS0+dS52ZWNsZW4gPT0gZDItPnUudmVjbGVuOwoKICAgIGNhc2UgRFRfZHVwOgogICAgICByZXR1
cm4gZDEtPnUuZHVwID09IGQyLT51LmR1cDsKCiAgICBjYXNlIERUX2VsdF96ZXJvX2ludDoKICAg
IGNhc2UgRFRfZWx0X29uZV9pbnQ6CiAgICBjYXNlIERUX2VsdF96ZXJvX3dpZGU6CiAgICBjYXNl
IERUX2VsdF96ZXJvX3dpZGVfc2FmZToKICAgICAgcmV0dXJuIGQxLT51LmludHZhbCA9PSBkMi0+
dS5pbnR2YWw7CgogICAgY2FzZSBEVF9hY2NlcHRfb3A6CiAgICAgIHJldHVybiBkMS0+dS5vcG5v
ID09IGQyLT51Lm9wbm87CgogICAgY2FzZSBEVF9hY2NlcHRfaW5zbjoKCiAgICAgIHJldHVybiAx
OwoKICAgIGRlZmF1bHQ6CiAgICAgIGZhbmN5X2Fib3J0ICgiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAw
MjA0MTgvZ2NjL2dlbnJlY29nLmMiLCAxMzE1LCBfX0ZVTkNUSU9OX18pOwogICAgfQp9CgoKCgoK
c3RhdGljIGludApub2Rlc19pZGVudGljYWwgKGQxLCBkMikKICAgICBzdHJ1Y3QgZGVjaXNpb24g
KmQxLCAqZDI7CnsKICBzdHJ1Y3QgZGVjaXNpb25fdGVzdCAqdDEsICp0MjsKCiAgZm9yICh0MSA9
IGQxLT50ZXN0cywgdDIgPSBkMi0+dGVzdHM7IHQxICYmIHQyOyB0MSA9IHQxLT5uZXh0LCB0MiA9
IHQyLT5uZXh0KQogICAgewogICAgICBpZiAodDEtPnR5cGUgIT0gdDItPnR5cGUpCiAgICAgICAg
cmV0dXJuIDA7CiAgICAgIGlmICghIG5vZGVzX2lkZW50aWNhbF8xICh0MSwgdDIpKQogICAgICAg
IHJldHVybiAwOwogICAgfQoKCiAgaWYgKHQxICE9IHQyKQogICAgcmV0dXJuIDA7CgoKCgoKICBp
ZiAoZDEtPnN1Y2Nlc3MuZmlyc3QKICAgICAgJiYgZDItPnN1Y2Nlc3MuZmlyc3QKICAgICAgJiYg
c3RyY21wIChkMS0+c3VjY2Vzcy5maXJzdC0+cG9zaXRpb24sIGQyLT5zdWNjZXNzLmZpcnN0LT5w
b3NpdGlvbikpCiAgICByZXR1cm4gMDsKCiAgcmV0dXJuIDE7Cn0KIyAxMzYwICIuLi8uLi9lZ2Nj
LTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIKc3RhdGljIHZvaWQKbWVyZ2VfYWNjZXB0
X2luc24gKG9sZGQsIGFkZGQpCiAgICAgc3RydWN0IGRlY2lzaW9uICpvbGRkLCAqYWRkZDsKewog
IHN0cnVjdCBkZWNpc2lvbl90ZXN0ICpvbGQsICphZGQ7CgogIGZvciAob2xkID0gb2xkZC0+dGVz
dHM7IG9sZDsgb2xkID0gb2xkLT5uZXh0KQogICAgaWYgKG9sZC0+dHlwZSA9PSBEVF9hY2NlcHRf
aW5zbikKICAgICAgYnJlYWs7CiAgaWYgKG9sZCA9PSAoKHZvaWQgKikwKSkKICAgIHJldHVybjsK
CiAgZm9yIChhZGQgPSBhZGRkLT50ZXN0czsgYWRkOyBhZGQgPSBhZGQtPm5leHQpCiAgICBpZiAo
YWRkLT50eXBlID09IERUX2FjY2VwdF9pbnNuKQogICAgICBicmVhazsKICBpZiAoYWRkID09ICgo
dm9pZCAqKTApKQogICAgcmV0dXJuOwoKCgoKICBpZiAob2xkLT51Lmluc24ubnVtX2Nsb2JiZXJz
X3RvX2FkZCA9PSAwCiAgICAgICYmIGFkZC0+dS5pbnNuLm51bV9jbG9iYmVyc190b19hZGQgPiAw
KQogICAgewoKICAgIH0KICBlbHNlIGlmIChvbGQtPnUuaW5zbi5udW1fY2xvYmJlcnNfdG9fYWRk
ID4gMAogICAgICAgICAgICYmIGFkZC0+dS5pbnNuLm51bV9jbG9iYmVyc190b19hZGQgPT0gMCkK
ICAgIHsKCiAgICAgIG9sZC0+dS5pbnNuID0gYWRkLT51Lmluc247CiAgICB9CiAgZWxzZQogICAg
ewogICAgICBtZXNzYWdlX3dpdGhfbGluZSAoYWRkLT51Lmluc24ubGluZW5vLCAiYCVzJyBtYXRj
aGVzIGAlcyciLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2luc25fbmFtZSAoYWRkLT51
Lmluc24uY29kZV9udW1iZXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2luc25fbmFt
ZSAob2xkLT51Lmluc24uY29kZV9udW1iZXIpKTsKICAgICAgbWVzc2FnZV93aXRoX2xpbmUgKG9s
ZC0+dS5pbnNuLmxpbmVubywgInByZXZpb3VzIGRlZmluaXRpb24gb2YgYCVzJyIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBnZXRfaW5zbl9uYW1lIChvbGQtPnUuaW5zbi5jb2RlX251bWJlcikp
OwogICAgICBlcnJvcl9jb3VudCsrOwogICAgfQp9CgoKCnN0YXRpYyB2b2lkCm1lcmdlX3RyZWVz
IChvbGRoLCBhZGRoKQogICAgIHN0cnVjdCBkZWNpc2lvbl9oZWFkICpvbGRoLCAqYWRkaDsKewog
IHN0cnVjdCBkZWNpc2lvbiAqbmV4dCwgKmFkZDsKCiAgaWYgKGFkZGgtPmZpcnN0ID09IDApCiAg
ICByZXR1cm47CiAgaWYgKG9sZGgtPmZpcnN0ID09IDApCiAgICB7CiAgICAgICpvbGRoID0gKmFk
ZGg7CiAgICAgIHJldHVybjsKICAgIH0KCgogIGlmIChzdHJjbXAgKG9sZGgtPmZpcnN0LT5wb3Np
dGlvbiwgYWRkaC0+Zmlyc3QtPnBvc2l0aW9uKSkKICAgIGZhbmN5X2Fib3J0ICgiLi4vLi4vZWdj
Yy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiLCAxNDIxLCBfX0ZVTkNUSU9OX18pOwoK
ICBmb3IgKGFkZCA9IGFkZGgtPmZpcnN0OyBhZGQgOyBhZGQgPSBuZXh0KQogICAgewogICAgICBz
dHJ1Y3QgZGVjaXNpb24gKm9sZCwgKmluc2VydF9iZWZvcmUgPSAoKHZvaWQgKikwKTsKCiAgICAg
IG5leHQgPSBhZGQtPm5leHQ7CiMgMTQ0NSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2Nj
L2dlbnJlY29nLmMiCiAgICAgIGZvciAob2xkID0gb2xkaC0+bGFzdDsgb2xkOyBvbGQgPSBvbGQt
PnByZXYpCiAgICAgICAgewogICAgICAgICAgaWYgKG5vZGVzX2lkZW50aWNhbCAob2xkLCBhZGQp
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbWVyZ2VfYWNjZXB0X2luc24gKG9sZCwgYWRk
KTsKICAgICAgICAgICAgICBtZXJnZV90cmVlcyAoJm9sZC0+c3VjY2VzcywgJmFkZC0+c3VjY2Vz
cyk7CiAgICAgICAgICAgICAgZ290byBtZXJnZWRfbm9kZXM7CiAgICAgICAgICAgIH0KCiAgICAg
ICAgICBpZiAobWF5YmVfYm90aF90cnVlIChvbGQsIGFkZCwgMCkpCiAgICAgICAgICAgIGJyZWFr
OwoKCgoKCiAgICAgICAgICBpZiAoKGludCkgYWRkLT50ZXN0cy0+dHlwZSA8IChpbnQpIG9sZC0+
dGVzdHMtPnR5cGUpCiAgICAgICAgICAgIGluc2VydF9iZWZvcmUgPSBvbGQ7CiAgICAgICAgfQoK
ICAgICAgaWYgKGluc2VydF9iZWZvcmUgPT0gKCh2b2lkICopMCkpCiAgICAgICAgewogICAgICAg
ICAgYWRkLT5uZXh0ID0gKCh2b2lkICopMCk7CiAgICAgICAgICBhZGQtPnByZXYgPSBvbGRoLT5s
YXN0OwogICAgICAgICAgb2xkaC0+bGFzdC0+bmV4dCA9IGFkZDsKICAgICAgICAgIG9sZGgtPmxh
c3QgPSBhZGQ7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgaWYgKChh
ZGQtPnByZXYgPSBpbnNlcnRfYmVmb3JlLT5wcmV2KSAhPSAoKHZvaWQgKikwKSkKICAgICAgICAg
ICAgYWRkLT5wcmV2LT5uZXh0ID0gYWRkOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBvbGRo
LT5maXJzdCA9IGFkZDsKICAgICAgICAgIGFkZC0+bmV4dCA9IGluc2VydF9iZWZvcmU7CiAgICAg
ICAgICBpbnNlcnRfYmVmb3JlLT5wcmV2ID0gYWRkOwogICAgICAgIH0KCiAgICBtZXJnZWRfbm9k
ZXM6OwogICAgfQp9CgoKCgoKc3RhdGljIHZvaWQKZmFjdG9yX3Rlc3RzIChoZWFkKQogICAgIHN0
cnVjdCBkZWNpc2lvbl9oZWFkICpoZWFkOwp7CiAgc3RydWN0IGRlY2lzaW9uICpmaXJzdCwgKm5l
eHQ7CgogIGZvciAoZmlyc3QgPSBoZWFkLT5maXJzdDsgZmlyc3QgJiYgZmlyc3QtPm5leHQ7IGZp
cnN0ID0gbmV4dCkKICAgIHsKICAgICAgZW51bSBkZWNpc2lvbl90eXBlIHR5cGU7CiAgICAgIHN0
cnVjdCBkZWNpc2lvbiAqbmV3LCAqb2xkX2xhc3Q7CgogICAgICB0eXBlID0gZmlyc3QtPnRlc3Rz
LT50eXBlOwogICAgICBuZXh0ID0gZmlyc3QtPm5leHQ7CgoKICAgICAgaWYgKG5leHQtPnRlc3Rz
LT50eXBlICE9IHR5cGUpCiAgICAgICAgY29udGludWU7CgoKCiAgICAgIGlmICh0eXBlICE9IERU
X21vZGUKICAgICAgICAgICYmIHR5cGUgIT0gRFRfY29kZQogICAgICAgICAgJiYgdHlwZSAhPSBE
VF92ZWNsZW4KICAgICAgICAgICYmIHR5cGUgIT0gRFRfZWx0X3plcm9faW50CiAgICAgICAgICAm
JiB0eXBlICE9IERUX2VsdF9vbmVfaW50CiAgICAgICAgICAmJiB0eXBlICE9IERUX2VsdF96ZXJv
X3dpZGVfc2FmZSkKICAgICAgICBjb250aW51ZTsKCgoKICAgICAgaWYgKGZpcnN0LT50ZXN0cy0+
bmV4dCAhPSAoKHZvaWQgKikwKSkKICAgICAgICB7CiAgICAgICAgICBuZXcgPSBuZXdfZGVjaXNp
b24gKGZpcnN0LT5wb3NpdGlvbiwgJmZpcnN0LT5zdWNjZXNzKTsKICAgICAgICAgIG5ldy0+dGVz
dHMgPSBmaXJzdC0+dGVzdHMtPm5leHQ7CiAgICAgICAgICBmaXJzdC0+dGVzdHMtPm5leHQgPSAo
KHZvaWQgKikwKTsKICAgICAgICB9CgoKICAgICAgZmlyc3QtPm5leHQgPSAoKHZvaWQgKikwKTsK
ICAgICAgb2xkX2xhc3QgPSBoZWFkLT5sYXN0OwogICAgICBoZWFkLT5sYXN0ID0gZmlyc3Q7CgoK
CiAgICAgIGRvCiAgICAgICAgewogICAgICAgICAgc3RydWN0IGRlY2lzaW9uX2hlYWQgaDsKCiAg
ICAgICAgICBpZiAobmV4dC0+dGVzdHMtPm5leHQgIT0gKCh2b2lkICopMCkpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBuZXcgPSBuZXdfZGVjaXNpb24gKG5leHQtPnBvc2l0aW9uLCAmbmV4
dC0+c3VjY2Vzcyk7CiAgICAgICAgICAgICAgbmV3LT50ZXN0cyA9IG5leHQtPnRlc3RzLT5uZXh0
OwogICAgICAgICAgICAgIG5leHQtPnRlc3RzLT5uZXh0ID0gKCh2b2lkICopMCk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIG5ldyA9IG5leHQ7CiAgICAgICAgICBuZXh0ID0gbmV4dC0+bmV4dDsK
ICAgICAgICAgIG5ldy0+bmV4dCA9ICgodm9pZCAqKTApOwogICAgICAgICAgaC5maXJzdCA9IGgu
bGFzdCA9IG5ldzsKCiAgICAgICAgICBtZXJnZV90cmVlcyAoaGVhZCwgJmgpOwogICAgICAgIH0K
ICAgICAgd2hpbGUgKG5leHQgJiYgbmV4dC0+dGVzdHMtPnR5cGUgPT0gdHlwZSk7CgoKCiAgICAg
IGlmIChuZXh0KQogICAgICAgIHsKICAgICAgICAgIG5leHQtPnByZXYgPSBoZWFkLT5sYXN0Owog
ICAgICAgICAgaGVhZC0+bGFzdC0+bmV4dCA9IG5leHQ7CiAgICAgICAgICBoZWFkLT5sYXN0ID0g
b2xkX2xhc3Q7CiAgICAgICAgfQogICAgfQoKCiAgZm9yIChmaXJzdCA9IGhlYWQtPmZpcnN0OyBm
aXJzdDsgZmlyc3QgPSBmaXJzdC0+bmV4dCkKICAgIGZhY3Rvcl90ZXN0cyAoJmZpcnN0LT5zdWNj
ZXNzKTsKfQojIDE1NzYgIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9nZW5yZWNvZy5j
IgpzdGF0aWMgdm9pZApzaW1wbGlmeV90ZXN0cyAoaGVhZCkKICAgICBzdHJ1Y3QgZGVjaXNpb25f
aGVhZCAqaGVhZDsKewogIHN0cnVjdCBkZWNpc2lvbiAqdHJlZTsKCiAgZm9yICh0cmVlID0gaGVh
ZC0+Zmlyc3Q7IHRyZWU7IHRyZWUgPSB0cmVlLT5uZXh0KQogICAgewogICAgICBzdHJ1Y3QgZGVj
aXNpb25fdGVzdCAqYSwgKmI7CgogICAgICBhID0gdHJlZS0+dGVzdHM7CiAgICAgIGIgPSBhLT5u
ZXh0OwogICAgICBpZiAoYiA9PSAoKHZvaWQgKikwKSkKICAgICAgICBjb250aW51ZTsKCgogICAg
ICB3aGlsZSAoYiAmJiBiLT50eXBlICE9IERUX3ByZWQpCiAgICAgICAgYiA9IGItPm5leHQ7CiAg
ICAgIGlmIChiKQogICAgICAgIHsKCgoKICAgICAgICAgIHdoaWxlIChhLT50eXBlID09IERUX21v
ZGUgfHwgYS0+dHlwZSA9PSBEVF9jb2RlKQogICAgICAgICAgICBhID0gYS0+bmV4dDsKICAgICAg
ICAgIHRyZWUtPnRlc3RzID0gYTsKICAgICAgICB9CiAgICB9CgoKICBmb3IgKHRyZWUgPSBoZWFk
LT5maXJzdDsgdHJlZTsgdHJlZSA9IHRyZWUtPm5leHQpCiAgICBzaW1wbGlmeV90ZXN0cyAoJnRy
ZWUtPnN1Y2Nlc3MpOwp9CgoKCgoKc3RhdGljIGludApicmVha19vdXRfc3Vicm91dGluZXMgKGhl
YWQsIGluaXRpYWwpCiAgICAgc3RydWN0IGRlY2lzaW9uX2hlYWQgKmhlYWQ7CiAgICAgaW50IGlu
aXRpYWw7CnsKICBpbnQgc2l6ZSA9IDA7CiAgc3RydWN0IGRlY2lzaW9uICpzdWI7CgogIGZvciAo
c3ViID0gaGVhZC0+Zmlyc3Q7IHN1Yjsgc3ViID0gc3ViLT5uZXh0KQogICAgc2l6ZSArPSAxICsg
YnJlYWtfb3V0X3N1YnJvdXRpbmVzICgmc3ViLT5zdWNjZXNzLCAwKTsKCiAgaWYgKHNpemUgPiAx
MDAgJiYgISBpbml0aWFsKQogICAgewogICAgICBoZWFkLT5maXJzdC0+c3Vicm91dGluZV9udW1i
ZXIgPSArK25leHRfc3Vicm91dGluZV9udW1iZXI7CiAgICAgIHNpemUgPSAxOwogICAgfQogIHJl
dHVybiBzaXplOwp9CgoKCgpzdGF0aWMgdm9pZApmaW5kX2FmdGVyd2FyZCAoaGVhZCwgcmVhbF9h
ZnRlcndhcmQpCiAgICAgc3RydWN0IGRlY2lzaW9uX2hlYWQgKmhlYWQ7CiAgICAgc3RydWN0IGRl
Y2lzaW9uICpyZWFsX2FmdGVyd2FyZDsKewogIHN0cnVjdCBkZWNpc2lvbiAqcCwgKnEsICphZnRl
cndhcmQ7CgoKCgogIHAgPSBoZWFkLT5maXJzdDsKICBhZnRlcndhcmQgPSAocC0+c3Vicm91dGlu
ZV9udW1iZXIgPiAwID8gKCh2b2lkICopMCkgOiByZWFsX2FmdGVyd2FyZCk7CgogIGZvciAoIDsg
cCA7IHAgPSBwLT5uZXh0KQogICAgewoKICAgICAgZm9yIChxID0gcC0+bmV4dDsgcSA7IHEgPSBx
LT5uZXh0KQogICAgICAgIGlmIChtYXliZV9ib3RoX3RydWUgKHAsIHEsIDEpKQogICAgICAgICAg
YnJlYWs7CgoKCiAgICAgIGlmICghcSkKICAgICAgICBxID0gYWZ0ZXJ3YXJkOwogICAgICBwLT5h
ZnRlcndhcmQgPSBxOwogICAgICBpZiAocSkKICAgICAgICBxLT5uZWVkX2xhYmVsID0gMTsKICAg
IH0KCgogIGZvciAocCA9IGhlYWQtPmZpcnN0OyBwIDsgcCA9IHAtPm5leHQpCiAgICBpZiAocC0+
c3VjY2Vzcy5maXJzdCkKICAgICAgZmluZF9hZnRlcndhcmQgKCZwLT5zdWNjZXNzLCBwLT5hZnRl
cndhcmQpOwoKCgoKICBwID0gaGVhZC0+Zmlyc3Q7CiAgaWYgKHAtPnN1YnJvdXRpbmVfbnVtYmVy
ID4gMCkKICAgIHAtPmFmdGVyd2FyZCA9IHJlYWxfYWZ0ZXJ3YXJkOwp9CiMgMTY4NSAiLi4vLi4v
ZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiCnN0YXRpYyB2b2lkCmNoYW5nZV9z
dGF0ZSAob2xkcG9zLCBuZXdwb3MsIGFmdGVyd2FyZCwgaW5kZW50KQogICAgIGNvbnN0IGNoYXIg
Km9sZHBvczsKICAgICBjb25zdCBjaGFyICpuZXdwb3M7CiAgICAgc3RydWN0IGRlY2lzaW9uICph
ZnRlcndhcmQ7CiAgICAgY29uc3QgY2hhciAqaW5kZW50Owp7CiAgaW50IG9kZXB0aCA9IHN0cmxl
biAob2xkcG9zKTsKICBpbnQgbmRlcHRoID0gc3RybGVuIChuZXdwb3MpOwogIGludCBkZXB0aDsK
ICBpbnQgb2xkX2hhc19pbnNuLCBuZXdfaGFzX2luc247CgoKICBmb3IgKGRlcHRoID0gb2RlcHRo
OyBzdHJuY21wIChvbGRwb3MsIG5ld3BvcywgZGVwdGgpICE9IDA7IC0tZGVwdGgpCiAgICBjb250
aW51ZTsKCgogIGZvciAob2xkX2hhc19pbnNuID0gb2RlcHRoIC0gMTsgb2xkX2hhc19pbnNuID49
IDA7IC0tb2xkX2hhc19pbnNuKQogICAgaWYgKChfc2NoX2lzdGFibGVbKG9sZHBvc1tvbGRfaGFz
X2luc25dKSAmIDB4ZmZdICYgKHVuc2lnbmVkIHNob3J0KShfc2NoX2lzdXBwZXIpKSkKICAgICAg
YnJlYWs7CiAgZm9yIChuZXdfaGFzX2luc24gPSBuZGVwdGggLSAxOyBuZXdfaGFzX2luc24gPj0g
MDsgLS1uZXdfaGFzX2luc24pCiAgICBpZiAoKF9zY2hfaXN0YWJsZVsobmV3cG9zW25ld19oYXNf
aW5zbl0pICYgMHhmZl0gJiAodW5zaWduZWQgc2hvcnQpKF9zY2hfaXN1cHBlcikpKQogICAgICBi
cmVhazsKCgogIHdoaWxlIChkZXB0aCA8IG5kZXB0aCkKICAgIHsKCiAgICAgIGlmICgoX3NjaF9p
c3RhYmxlWyhuZXdwb3NbZGVwdGhdKSAmIDB4ZmZdICYgKHVuc2lnbmVkIHNob3J0KShfc2NoX2lz
dXBwZXIpKSkKICAgICAgICB7CgogICAgICAgICAgaWYgKG9sZF9oYXNfaW5zbiA+PSAwICYmIG9s
ZHBvc1tvbGRfaGFzX2luc25dID49IG5ld3Bvc1tkZXB0aF0pCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBwcmludGYgKCIlc3RlbSA9IHBlZXAyX25leHRfaW5zbiAoJWQpO1xuIiwKICAgICAg
ICAgICAgICAgICAgICAgIGluZGVudCwgbmV3cG9zW2RlcHRoXSAtICdBJyk7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIHByaW50ZiAoIiVz
dGVtID0gcGVlcDJfbmV4dF9pbnNuICglZCk7XG4iLAogICAgICAgICAgICAgICAgICAgICAgaW5k
ZW50LCBuZXdwb3NbZGVwdGhdIC0gJ0EnKTsKICAgICAgICAgICAgICBwcmludGYgKCIlc2lmICh0
ZW0gPT0gTlVMTF9SVFgpXG4iLCBpbmRlbnQpOwogICAgICAgICAgICAgIGlmIChhZnRlcndhcmQp
CiAgICAgICAgICAgICAgICBwcmludGYgKCIlcyAgZ290byBMJWQ7XG4iLCBpbmRlbnQsIGFmdGVy
d2FyZC0+bnVtYmVyKTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBwcmludGYg
KCIlcyAgZ290byByZXQwO1xuIiwgaW5kZW50KTsKICAgICAgICAgICAgfQogICAgICAgICAgcHJp
bnRmICgiJXN4JWQgPSBQQVRURVJOICh0ZW0pO1xuIiwgaW5kZW50LCBkZXB0aCArIDEpOwogICAg
ICAgIH0KICAgICAgZWxzZSBpZiAoKF9zY2hfaXN0YWJsZVsobmV3cG9zW2RlcHRoXSkgJiAweGZm
XSAmICh1bnNpZ25lZCBzaG9ydCkoX3NjaF9pc2xvd2VyKSkpCiAgICAgICAgcHJpbnRmICgiJXN4
JWQgPSBYVkVDRVhQICh4JWQsIDAsICVkKTtcbiIsCiAgICAgICAgICAgICAgICBpbmRlbnQsIGRl
cHRoICsgMSwgZGVwdGgsIG5ld3Bvc1tkZXB0aF0gLSAnYScpOwogICAgICBlbHNlCiAgICAgICAg
cHJpbnRmICgiJXN4JWQgPSBYRVhQICh4JWQsICVjKTtcbiIsCiAgICAgICAgICAgICAgICBpbmRl
bnQsIGRlcHRoICsgMSwgZGVwdGgsIG5ld3Bvc1tkZXB0aF0pOwogICAgICArK2RlcHRoOwogICAg
fQp9CgoKCgpzdGF0aWMgdm9pZApwcmludF9jb2RlIChjb2RlKQogICAgIGVudW0gcnR4X2NvZGUg
Y29kZTsKewogIGNvbnN0IGNoYXIgKnA7CiAgZm9yIChwID0gKHJ0eF9uYW1lWyhpbnQpIChjb2Rl
KV0pOyAqcDsgcCsrKQogICAgKF9fdXNfcnN0aHJlYWRfc3RkaW8gPyBfX3NlbXB1dGMoKF9zY2hf
dG91cHBlclsoKnApICYgMHhmZl0pLCgmX19pb2JbMV0pKSA6ICgtLSgoJl9faW9iWzFdKSktPl9j
bnQgPCAwID8gX19mbHNidWYoKChfc2NoX3RvdXBwZXJbKCpwKSAmIDB4ZmZdKSksICgoJl9faW9i
WzFdKSkpIDogKGludCkoKigoJl9faW9iWzFdKSktPl9wdHIrKyA9ICh1bnNpZ25lZCBjaGFyKSgo
X3NjaF90b3VwcGVyWygqcCkgJiAweGZmXSkpKSkpOwp9CgoKCnN0YXRpYyB2b2lkCndyaXRlX2Fm
dGVyd2FyZCAoc3RhcnQsIGFmdGVyd2FyZCwgaW5kZW50KQogICAgIHN0cnVjdCBkZWNpc2lvbiAq
c3RhcnQ7CiAgICAgc3RydWN0IGRlY2lzaW9uICphZnRlcndhcmQ7CiAgICAgY29uc3QgY2hhciAq
aW5kZW50Owp7CiAgaWYgKCFhZnRlcndhcmQgfHwgc3RhcnQtPnN1YnJvdXRpbmVfbnVtYmVyID4g
MCkKICAgIHByaW50ZigiJXNnb3RvIHJldDA7XG4iLCBpbmRlbnQpOwogIGVsc2UKICAgIHsKICAg
ICAgY2hhbmdlX3N0YXRlIChzdGFydC0+cG9zaXRpb24sIGFmdGVyd2FyZC0+cG9zaXRpb24sICgo
dm9pZCAqKTApLCBpbmRlbnQpOwogICAgICBwcmludGYgKCIlc2dvdG8gTCVkO1xuIiwgaW5kZW50
LCBhZnRlcndhcmQtPm51bWJlcik7CiAgICB9Cn0KCgoKCnN0YXRpYyBzdHJ1Y3QgZGVjaXNpb24g
Kgp3cml0ZV9zd2l0Y2ggKHN0YXJ0LCBkZXB0aCkKICAgICBzdHJ1Y3QgZGVjaXNpb24gKnN0YXJ0
OwogICAgIGludCBkZXB0aDsKewogIHN0cnVjdCBkZWNpc2lvbiAqcCA9IHN0YXJ0OwogIGVudW0g
ZGVjaXNpb25fdHlwZSB0eXBlID0gcC0+dGVzdHMtPnR5cGU7CiAgc3RydWN0IGRlY2lzaW9uICpu
ZWVkc19sYWJlbCA9ICgodm9pZCAqKTApOwoKCgoKICBpZiAoIXAtPm5leHQKICAgICAgfHwgcC0+
dGVzdHMtPm5leHQKICAgICAgfHwgcC0+bmV4dC0+dGVzdHMtPnR5cGUgIT0gdHlwZQogICAgICB8
fCBwLT5uZXh0LT50ZXN0cy0+bmV4dAogICAgICB8fCBub2Rlc19pZGVudGljYWxfMSAocC0+dGVz
dHMsIHAtPm5leHQtPnRlc3RzKSkKICAgIHJldHVybiBwOwoKCgogIGlmICh0eXBlID09IERUX2Nv
ZGUpCiAgICB7CiAgICAgIGNoYXIgY29kZW1hcFsoKGludCkgTEFTVF9BTkRfVU5VU0VEX1JUWF9D
T0RFKV07CiAgICAgIHN0cnVjdCBkZWNpc2lvbiAqcmV0OwogICAgICBlbnVtIHJ0eF9jb2RlIGNv
ZGU7CgogICAgICBtZW1zZXQgKGNvZGVtYXAsIDAsIHNpemVvZihjb2RlbWFwKSk7CgogICAgICBw
cmludGYgKCIgIHN3aXRjaCAoR0VUX0NPREUgKHglZCkpXG4gICAge1xuIiwgZGVwdGgpOwogICAg
ICBjb2RlID0gcC0+dGVzdHMtPnUuY29kZTsKICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICBp
ZiAocCAhPSBzdGFydCAmJiBwLT5uZWVkX2xhYmVsICYmIG5lZWRzX2xhYmVsID09ICgodm9pZCAq
KTApKQogICAgICAgICAgICBuZWVkc19sYWJlbCA9IHA7CgogICAgICAgICAgcHJpbnRmICgiICAg
IGNhc2UgIik7CiAgICAgICAgICBwcmludF9jb2RlIChjb2RlKTsKICAgICAgICAgIHByaW50ZiAo
IjpcbiAgICAgIGdvdG8gTCVkO1xuIiwgcC0+c3VjY2Vzcy5maXJzdC0+bnVtYmVyKTsKICAgICAg
ICAgIHAtPnN1Y2Nlc3MuZmlyc3QtPm5lZWRfbGFiZWwgPSAxOwoKICAgICAgICAgIGNvZGVtYXBb
Y29kZV0gPSAxOwogICAgICAgICAgcCA9IHAtPm5leHQ7CiAgICAgICAgfQogICAgICB3aGlsZSAo
cAogICAgICAgICAgICAgJiYgISBwLT50ZXN0cy0+bmV4dAogICAgICAgICAgICAgJiYgcC0+dGVz
dHMtPnR5cGUgPT0gRFRfY29kZQogICAgICAgICAgICAgJiYgISBjb2RlbWFwW2NvZGUgPSBwLT50
ZXN0cy0+dS5jb2RlXSk7CiMgMTgzNCAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dl
bnJlY29nLmMiCiAgICAgIGlmIChuZWVkc19sYWJlbCAhPSAoKHZvaWQgKikwKSkKICAgICAgICBy
ZXQgPSBuZWVkc19sYWJlbDsKICAgICAgZWxzZQogICAgICAgIHJldCA9IHA7CgogICAgICB3aGls
ZSAocCAmJiBwLT50ZXN0cy0+dHlwZSA9PSBEVF9wcmVkCiAgICAgICAgICAgICAmJiBwLT50ZXN0
cy0+dS5wcmVkLmluZGV4ID49IDApCiAgICAgICAgewogICAgICAgICAgY29uc3QgZW51bSBydHhf
Y29kZSAqYzsKCiAgICAgICAgICBmb3IgKGMgPSAmcHJlZHNbcC0+dGVzdHMtPnUucHJlZC5pbmRl
eF0uY29kZXNbMF07ICpjIDsgKytjKQogICAgICAgICAgICBpZiAoY29kZW1hcFsoaW50KSAqY10g
IT0gMCkKICAgICAgICAgICAgICBnb3RvIHByZWRfZG9uZTsKCiAgICAgICAgICBmb3IgKGMgPSAm
cHJlZHNbcC0+dGVzdHMtPnUucHJlZC5pbmRleF0uY29kZXNbMF07ICpjIDsgKytjKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgcHJpbnRmICgiICAgIGNhc2UgIik7CiAgICAgICAgICAgICAg
cHJpbnRfY29kZSAoKmMpOwogICAgICAgICAgICAgIHByaW50ZiAoIjpcbiIpOwogICAgICAgICAg
ICAgIGNvZGVtYXBbKGludCkgKmNdID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgIHByaW50
ZiAoIiAgICAgIGdvdG8gTCVkO1xuIiwgcC0+bnVtYmVyKTsKICAgICAgICAgIHAtPm5lZWRfbGFi
ZWwgPSAxOwogICAgICAgICAgcCA9IHAtPm5leHQ7CiAgICAgICAgfQoKICAgIHByZWRfZG9uZToK
CgogICAgICBwcmludGYgKCIgICAgZGVmYXVsdDpcbiIpOwogICAgICBpZiAocCAhPSByZXQpCiAg
ICAgICAgewogICAgICAgICAgaWYgKHApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBwcmlu
dGYgKCIgICAgICBnb3RvIEwlZDtcbiIsIHAtPm51bWJlcik7CiAgICAgICAgICAgICAgcC0+bmVl
ZF9sYWJlbCA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgd3Jp
dGVfYWZ0ZXJ3YXJkIChzdGFydCwgc3RhcnQtPmFmdGVyd2FyZCwgIiAgICAgICIpOwogICAgICAg
IH0KICAgICAgZWxzZQogICAgICAgIHByaW50ZiAoIiAgICAgYnJlYWs7XG4iKTsKICAgICAgcHJp
bnRmICgiICAgfVxuIik7CgogICAgICByZXR1cm4gcmV0OwogICAgfQogIGVsc2UgaWYgKHR5cGUg
PT0gRFRfbW9kZQogICAgICAgICAgIHx8IHR5cGUgPT0gRFRfdmVjbGVuCiAgICAgICAgICAgfHwg
dHlwZSA9PSBEVF9lbHRfemVyb19pbnQKICAgICAgICAgICB8fCB0eXBlID09IERUX2VsdF9vbmVf
aW50CiAgICAgICAgICAgfHwgdHlwZSA9PSBEVF9lbHRfemVyb193aWRlX3NhZmUpCiAgICB7CiAg
ICAgIGNvbnN0IGNoYXIgKmluZGVudCA9ICIiOwoKCgogICAgICBpZiAodHlwZSA9PSBEVF9lbHRf
emVyb193aWRlX3NhZmUpCiAgICAgICAgewogICAgICAgICAgaW5kZW50ID0gIiAgIjsKICAgICAg
ICAgIHByaW50ZigiICBpZiAoKGludCkgWFdJTlQgKHglZCwgMCkgPT0gWFdJTlQgKHglZCwgMCkp
XG4iLCBkZXB0aCwgZGVwdGgpOwogICAgICAgIH0KICAgICAgcHJpbnRmICgiJXMgIHN3aXRjaCAo
IiwgaW5kZW50KTsKICAgICAgc3dpdGNoICh0eXBlKQogICAgICAgIHsKICAgICAgICBjYXNlIERU
X21vZGU6CiAgICAgICAgICBwcmludGYgKCJHRVRfTU9ERSAoeCVkKSIsIGRlcHRoKTsKICAgICAg
ICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFRfdmVjbGVuOgogICAgICAgICAgcHJpbnRmICgiWFZF
Q0xFTiAoeCVkLCAwKSIsIGRlcHRoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFRf
ZWx0X3plcm9faW50OgogICAgICAgICAgcHJpbnRmICgiWElOVCAoeCVkLCAwKSIsIGRlcHRoKTsK
ICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFRfZWx0X29uZV9pbnQ6CiAgICAgICAgICBw
cmludGYgKCJYSU5UICh4JWQsIDEpIiwgZGVwdGgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAg
Y2FzZSBEVF9lbHRfemVyb193aWRlX3NhZmU6CgoKICAgICAgICAgIHByaW50ZiAoIihpbnQpIFhX
SU5UICh4JWQsIDApIiwgZGVwdGgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgIGZhbmN5X2Fib3J0ICgiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dl
bnJlY29nLmMiLCAxOTE3LCBfX0ZVTkNUSU9OX18pOwogICAgICAgIH0KICAgICAgcHJpbnRmICgi
KVxuJXMgICAge1xuIiwgaW5kZW50KTsKCiAgICAgIGRvCiAgICAgICAgewoKCgogICAgICAgICAg
c3RydWN0IGRlY2lzaW9uICpxOwogICAgICAgICAgZm9yIChxID0gc3RhcnQ7IHEgIT0gcDsgcSA9
IHEtPm5leHQpCiAgICAgICAgICAgIGlmIChub2Rlc19pZGVudGljYWxfMSAocC0+dGVzdHMsIHEt
PnRlc3RzKSkKICAgICAgICAgICAgICBnb3RvIGNhc2VfZG9uZTsKCiAgICAgICAgICBpZiAocCAh
PSBzdGFydCAmJiBwLT5uZWVkX2xhYmVsICYmIG5lZWRzX2xhYmVsID09ICgodm9pZCAqKTApKQog
ICAgICAgICAgICBuZWVkc19sYWJlbCA9IHA7CgogICAgICAgICAgcHJpbnRmICgiJXMgICAgY2Fz
ZSAiLCBpbmRlbnQpOwogICAgICAgICAgc3dpdGNoICh0eXBlKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgIGNhc2UgRFRfbW9kZToKICAgICAgICAgICAgICBwcmludGYgKCIlc21vZGUiLCAobW9k
ZV9uYW1lWyhpbnQpIChwLT50ZXN0cy0+dS5tb2RlKV0pKTsKICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgY2FzZSBEVF92ZWNsZW46CiAgICAgICAgICAgICAgcHJpbnRmICgiJWQiLCBw
LT50ZXN0cy0+dS52ZWNsZW4pOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNl
IERUX2VsdF96ZXJvX2ludDoKICAgICAgICAgICAgY2FzZSBEVF9lbHRfb25lX2ludDoKICAgICAg
ICAgICAgY2FzZSBEVF9lbHRfemVyb193aWRlOgogICAgICAgICAgICBjYXNlIERUX2VsdF96ZXJv
X3dpZGVfc2FmZToKICAgICAgICAgICAgICBwcmludGYgKCIlbGxkIiwgcC0+dGVzdHMtPnUuaW50
dmFsKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICBmYW5jeV9hYm9ydCAoIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9nZW5yZWNv
Zy5jIiwgMTk1MCwgX19GVU5DVElPTl9fKTsKICAgICAgICAgICAgfQogICAgICAgICAgcHJpbnRm
ICgiOlxuJXMgICAgICBnb3RvIEwlZDtcbiIsIGluZGVudCwgcC0+c3VjY2Vzcy5maXJzdC0+bnVt
YmVyKTsKICAgICAgICAgIHAtPnN1Y2Nlc3MuZmlyc3QtPm5lZWRfbGFiZWwgPSAxOwoKICAgICAg
ICAgIHAgPSBwLT5uZXh0OwogICAgICAgIH0KICAgICAgd2hpbGUgKHAgJiYgcC0+dGVzdHMtPnR5
cGUgPT0gdHlwZSAmJiAhcC0+dGVzdHMtPm5leHQpOwoKICAgIGNhc2VfZG9uZToKICAgICAgcHJp
bnRmICgiJXMgICAgZGVmYXVsdDpcbiVzICAgICAgYnJlYWs7XG4lcyAgICB9XG4iLAogICAgICAg
ICAgICAgIGluZGVudCwgaW5kZW50LCBpbmRlbnQpOwoKICAgICAgcmV0dXJuIG5lZWRzX2xhYmVs
ICE9ICgodm9pZCAqKTApID8gbmVlZHNfbGFiZWwgOiBwOwogICAgfQogIGVsc2UKICAgIHsKCiAg
ICAgIHJldHVybiBwOwogICAgfQp9CgoKCnN0YXRpYyB2b2lkCndyaXRlX2NvbmQgKHAsIGRlcHRo
LCBzdWJyb3V0aW5lX3R5cGUpCiAgICAgc3RydWN0IGRlY2lzaW9uX3Rlc3QgKnA7CiAgICAgaW50
IGRlcHRoOwogICAgIGVudW0gcm91dGluZV90eXBlIHN1YnJvdXRpbmVfdHlwZTsKewogIHN3aXRj
aCAocC0+dHlwZSkKICAgIHsKICAgIGNhc2UgRFRfbW9kZToKICAgICAgcHJpbnRmICgiR0VUX01P
REUgKHglZCkgPT0gJXNtb2RlIiwgZGVwdGgsIChtb2RlX25hbWVbKGludCkgKHAtPnUubW9kZSld
KSk7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgRFRfY29kZToKICAgICAgcHJpbnRmICgiR0VUX0NP
REUgKHglZCkgPT0gIiwgZGVwdGgpOwogICAgICBwcmludF9jb2RlIChwLT51LmNvZGUpOwogICAg
ICBicmVhazsKCiAgICBjYXNlIERUX3ZlY2xlbjoKICAgICAgcHJpbnRmICgiWFZFQ0xFTiAoeCVk
LCAwKSA9PSAlZCIsIGRlcHRoLCBwLT51LnZlY2xlbik7CiAgICAgIGJyZWFrOwoKICAgIGNhc2Ug
RFRfZWx0X3plcm9faW50OgogICAgICBwcmludGYgKCJYSU5UICh4JWQsIDApID09ICVkIiwgZGVw
dGgsIChpbnQpIHAtPnUuaW50dmFsKTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBEVF9lbHRfb25l
X2ludDoKICAgICAgcHJpbnRmICgiWElOVCAoeCVkLCAxKSA9PSAlZCIsIGRlcHRoLCAoaW50KSBw
LT51LmludHZhbCk7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgRFRfZWx0X3plcm9fd2lkZToKICAg
IGNhc2UgRFRfZWx0X3plcm9fd2lkZV9zYWZlOgogICAgICBwcmludGYgKCJYV0lOVCAoeCVkLCAw
KSA9PSAiLCBkZXB0aCk7CiAgICAgIHByaW50ZiAoIiVsbGQiLCBwLT51LmludHZhbCk7CiAgICAg
IGJyZWFrOwoKICAgIGNhc2UgRFRfdmVjbGVuX2dlOgogICAgICBwcmludGYgKCJYVkVDTEVOICh4
JWQsIDApID49ICVkIiwgZGVwdGgsIHAtPnUudmVjbGVuKTsKICAgICAgYnJlYWs7CgogICAgY2Fz
ZSBEVF9kdXA6CiAgICAgIHByaW50ZiAoInJ0eF9lcXVhbF9wICh4JWQsIG9wZXJhbmRzWyVkXSki
LCBkZXB0aCwgcC0+dS5kdXApOwogICAgICBicmVhazsKCiAgICBjYXNlIERUX3ByZWQ6CiAgICAg
IHByaW50ZiAoIiVzICh4JWQsICVzbW9kZSkiLCBwLT51LnByZWQubmFtZSwgZGVwdGgsCiAgICAg
ICAgICAgICAgKG1vZGVfbmFtZVsoaW50KSAocC0+dS5wcmVkLm1vZGUpXSkpOwogICAgICBicmVh
azsKCiAgICBjYXNlIERUX2NfdGVzdDoKICAgICAgcHJpbnRmICgiKCVzKSIsIHAtPnUuY190ZXN0
KTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBEVF9hY2NlcHRfaW5zbjoKICAgICAgc3dpdGNoIChz
dWJyb3V0aW5lX3R5cGUpCiAgICAgICAgewogICAgICAgIGNhc2UgUkVDT0c6CiAgICAgICAgICBp
ZiAocC0+dS5pbnNuLm51bV9jbG9iYmVyc190b19hZGQgPT0gMCkKICAgICAgICAgICAgZmFuY3lf
YWJvcnQgKCIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIsIDIwMzEs
IF9fRlVOQ1RJT05fXyk7CiAgICAgICAgICBwcmludGYgKCJwbnVtX2Nsb2JiZXJzICE9IE5VTEwi
KTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgZmFuY3lfYWJv
cnQgKCIuLi8uLi9lZ2NjLTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIsIDIwMzYsIF9f
RlVOQ1RJT05fXyk7CiAgICAgICAgfQogICAgICBicmVhazsKCiAgICBkZWZhdWx0OgogICAgICBm
YW5jeV9hYm9ydCAoIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIwNDE4L2djYy9nZW5yZWNvZy5jIiwg
MjA0MSwgX19GVU5DVElPTl9fKTsKICAgIH0KfQoKCgoKCnN0YXRpYyB2b2lkCndyaXRlX2FjdGlv
biAocCwgdGVzdCwgZGVwdGgsIHVuY29uZCwgc3VjY2Vzcywgc3Vicm91dGluZV90eXBlKQogICAg
IHN0cnVjdCBkZWNpc2lvbiAqcDsKICAgICBzdHJ1Y3QgZGVjaXNpb25fdGVzdCAqdGVzdDsKICAg
ICBpbnQgZGVwdGgsIHVuY29uZDsKICAgICBzdHJ1Y3QgZGVjaXNpb24gKnN1Y2Nlc3M7CiAgICAg
ZW51bSByb3V0aW5lX3R5cGUgc3Vicm91dGluZV90eXBlOwp7CiAgY29uc3QgY2hhciAqaW5kZW50
OwogIGludCB3YW50X2Nsb3NlID0gMDsKCiAgaWYgKHVuY29uZCkKICAgIGluZGVudCA9ICIgICI7
CiAgZWxzZSBpZiAodGVzdC0+dHlwZSA9PSBEVF9hY2NlcHRfb3AgfHwgdGVzdC0+dHlwZSA9PSBE
VF9hY2NlcHRfaW5zbikKICAgIHsKICAgICAgZnB1dHMgKCIgICAge1xuIiwgKCZfX2lvYlsxXSkp
OwogICAgICBpbmRlbnQgPSAiICAgICAgIjsKICAgICAgd2FudF9jbG9zZSA9IDE7CiAgICB9CiAg
ZWxzZQogICAgaW5kZW50ID0gIiAgICAiOwoKICBpZiAodGVzdC0+dHlwZSA9PSBEVF9hY2NlcHRf
b3ApCiAgICB7CiAgICAgIHByaW50ZigiJXNvcGVyYW5kc1slZF0gPSB4JWQ7XG4iLCBpbmRlbnQs
IHRlc3QtPnUub3BubywgZGVwdGgpOwoKCiAgICAgIGlmICh0ZXN0LT5uZXh0KQogICAgICAgIHsK
ICAgICAgICAgIHRlc3QgPSB0ZXN0LT5uZXh0OwogICAgICAgICAgaWYgKHRlc3QtPnR5cGUgIT0g
RFRfYWNjZXB0X2luc24pCiAgICAgICAgICAgIGZhbmN5X2Fib3J0ICgiLi4vLi4vZWdjYy0zLjEt
Q1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiLCAyMDgwLCBfX0ZVTkNUSU9OX18pOwogICAgICAg
IH0KICAgIH0KCgogIGlmICh0ZXN0LT5uZXh0KQogICAgZmFuY3lfYWJvcnQgKCIuLi8uLi9lZ2Nj
LTMuMS1DVlMyMDAyMDQxOC9nY2MvZ2VucmVjb2cuYyIsIDIwODYsIF9fRlVOQ1RJT05fXyk7Cgog
IGlmICh0ZXN0LT50eXBlID09IERUX2FjY2VwdF9pbnNuKQogICAgewogICAgICBzd2l0Y2ggKHN1
YnJvdXRpbmVfdHlwZSkKICAgICAgICB7CiAgICAgICAgY2FzZSBSRUNPRzoKICAgICAgICAgIGlm
ICh0ZXN0LT51Lmluc24ubnVtX2Nsb2JiZXJzX3RvX2FkZCAhPSAwKQogICAgICAgICAgICBwcmlu
dGYgKCIlcypwbnVtX2Nsb2JiZXJzID0gJWQ7XG4iLAogICAgICAgICAgICAgICAgICAgIGluZGVu
dCwgdGVzdC0+dS5pbnNuLm51bV9jbG9iYmVyc190b19hZGQpOwogICAgICAgICAgcHJpbnRmICgi
JXNyZXR1cm4gJWQ7XG4iLCBpbmRlbnQsIHRlc3QtPnUuaW5zbi5jb2RlX251bWJlcik7CiAgICAg
ICAgICBicmVhazsKCiAgICAgICAgY2FzZSBTUExJVDoKICAgICAgICAgIHByaW50ZiAoIiVzcmV0
dXJuIGdlbl9zcGxpdF8lZCAob3BlcmFuZHMpO1xuIiwKICAgICAgICAgICAgICAgICAgaW5kZW50
LCB0ZXN0LT51Lmluc24uY29kZV9udW1iZXIpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNh
c2UgUEVFUEhPTEUyOgogICAgICAgICAgewogICAgICAgICAgICBpbnQgbWF0Y2hfbGVuID0gMCwg
aTsKCiAgICAgICAgICAgIGZvciAoaSA9IHN0cmxlbiAocC0+cG9zaXRpb24pIC0gMTsgaSA+PSAw
OyAtLWkpCiAgICAgICAgICAgICAgaWYgKChfc2NoX2lzdGFibGVbKHAtPnBvc2l0aW9uW2ldKSAm
IDB4ZmZdICYgKHVuc2lnbmVkIHNob3J0KShfc2NoX2lzdXBwZXIpKSkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgbWF0Y2hfbGVuID0gcC0+cG9zaXRpb25baV0gLSAnQSc7CiAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBwcmlu
dGYgKCIlcypfcG1hdGNoX2xlbiA9ICVkO1xuIiwgaW5kZW50LCBtYXRjaF9sZW4pOwogICAgICAg
ICAgICBwcmludGYgKCIlc3RlbSA9IGdlbl9wZWVwaG9sZTJfJWQgKGluc24sIG9wZXJhbmRzKTtc
biIsCiAgICAgICAgICAgICAgICAgICAgaW5kZW50LCB0ZXN0LT51Lmluc24uY29kZV9udW1iZXIp
OwogICAgICAgICAgICBwcmludGYgKCIlc2lmICh0ZW0gIT0gMClcbiVzICByZXR1cm4gdGVtO1xu
IiwgaW5kZW50LCBpbmRlbnQpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICBmYW5jeV9hYm9ydCAoIi4uLy4uL2VnY2MtMy4xLUNWUzIwMDIw
NDE4L2djYy9nZW5yZWNvZy5jIiwgMjEyMiwgX19GVU5DVElPTl9fKTsKICAgICAgICB9CiAgICB9
CiAgZWxzZQogICAgewogICAgICBwcmludGYoIiVzZ290byBMJWQ7XG4iLCBpbmRlbnQsIHN1Y2Nl
c3MtPm51bWJlcik7CiAgICAgIHN1Y2Nlc3MtPm5lZWRfbGFiZWwgPSAxOwogICAgfQoKICBpZiAo
d2FudF9jbG9zZSkKICAgIGZwdXRzICgiICAgIH1cbiIsICgmX19pb2JbMV0pKTsKfQoKCgoKCgpz
dGF0aWMgaW50CmlzX3VuY29uZGl0aW9uYWwgKHQsIHN1YnJvdXRpbmVfdHlwZSkKICAgICBzdHJ1
Y3QgZGVjaXNpb25fdGVzdCAqdDsKICAgICBlbnVtIHJvdXRpbmVfdHlwZSBzdWJyb3V0aW5lX3R5
cGU7CnsKICBpZiAodC0+dHlwZSA9PSBEVF9hY2NlcHRfb3ApCiAgICByZXR1cm4gMTsKCiAgaWYg
KHQtPnR5cGUgPT0gRFRfYWNjZXB0X2luc24pCiAgICB7CiAgICAgIHN3aXRjaCAoc3Vicm91dGlu
ZV90eXBlKQogICAgICAgIHsKICAgICAgICBjYXNlIFJFQ09HOgogICAgICAgICAgcmV0dXJuICh0
LT51Lmluc24ubnVtX2Nsb2JiZXJzX3RvX2FkZCA9PSAwKTsKICAgICAgICBjYXNlIFNQTElUOgog
ICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgY2FzZSBQRUVQSE9MRTI6CiAgICAgICAgICByZXR1
cm4gLTE7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGZhbmN5X2Fib3J0ICgiLi4vLi4vZWdj
Yy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiLCAyMTU5LCBfX0ZVTkNUSU9OX18pOwog
ICAgICAgIH0KICAgIH0KCiAgcmV0dXJuIDA7Cn0KCgoKCnN0YXRpYyBpbnQKd3JpdGVfbm9kZSAo
cCwgZGVwdGgsIHN1YnJvdXRpbmVfdHlwZSkKICAgICBzdHJ1Y3QgZGVjaXNpb24gKnA7CiAgICAg
aW50IGRlcHRoOwogICAgIGVudW0gcm91dGluZV90eXBlIHN1YnJvdXRpbmVfdHlwZTsKewogIHN0
cnVjdCBkZWNpc2lvbl90ZXN0ICp0ZXN0LCAqbGFzdF90ZXN0OwogIGludCB1bmNvbmQ7CgogIGxh
c3RfdGVzdCA9IHRlc3QgPSBwLT50ZXN0czsKICB1bmNvbmQgPSBpc191bmNvbmRpdGlvbmFsICh0
ZXN0LCBzdWJyb3V0aW5lX3R5cGUpOwogIGlmICh1bmNvbmQgPT0gMCkKICAgIHsKICAgICAgcHJp
bnRmICgiICBpZiAoIik7CiAgICAgIHdyaXRlX2NvbmQgKHRlc3QsIGRlcHRoLCBzdWJyb3V0aW5l
X3R5cGUpOwoKICAgICAgd2hpbGUgKCh0ZXN0ID0gdGVzdC0+bmV4dCkgIT0gKCh2b2lkICopMCkp
CiAgICAgICAgewogICAgICAgICAgaW50IHVuY29uZDI7CgogICAgICAgICAgbGFzdF90ZXN0ID0g
dGVzdDsKICAgICAgICAgIHVuY29uZDIgPSBpc191bmNvbmRpdGlvbmFsICh0ZXN0LCBzdWJyb3V0
aW5lX3R5cGUpOwogICAgICAgICAgaWYgKHVuY29uZDIgIT0gMCkKICAgICAgICAgICAgYnJlYWs7
CgogICAgICAgICAgcHJpbnRmICgiXG4gICAgICAmJiAiKTsKICAgICAgICAgIHdyaXRlX2NvbmQg
KHRlc3QsIGRlcHRoLCBzdWJyb3V0aW5lX3R5cGUpOwogICAgICAgIH0KCiAgICAgIHByaW50ZiAo
IilcbiIpOwogICAgfQoKICB3cml0ZV9hY3Rpb24gKHAsIGxhc3RfdGVzdCwgZGVwdGgsIHVuY29u
ZCwgcC0+c3VjY2Vzcy5maXJzdCwgc3Vicm91dGluZV90eXBlKTsKCiAgcmV0dXJuIHVuY29uZCA+
IDA7Cn0KCgoKc3RhdGljIHZvaWQKd3JpdGVfdHJlZV8xIChoZWFkLCBkZXB0aCwgc3Vicm91dGlu
ZV90eXBlKQogICAgIHN0cnVjdCBkZWNpc2lvbl9oZWFkICpoZWFkOwogICAgIGludCBkZXB0aDsK
ICAgICBlbnVtIHJvdXRpbmVfdHlwZSBzdWJyb3V0aW5lX3R5cGU7CnsKICBzdHJ1Y3QgZGVjaXNp
b24gKnAsICpuZXh0OwogIGludCB1bmNvbmQgPSAwOwoKICBmb3IgKHAgPSBoZWFkLT5maXJzdDsg
cCA7IHAgPSBuZXh0KQogICAgewoKICAgICAgaWYgKHAgIT0gaGVhZC0+Zmlyc3QgJiYgcC0+bmVl
ZF9sYWJlbCkKICAgICAgICBwcmludGYoIiVzTCVkOiBBVFRSSUJVVEVfVU5VU0VEX0xBQkVMXG4i
LCAoIiAiKSwgKHAtPm51bWJlcikpOwoKCiAgICAgIG5leHQgPSB3cml0ZV9zd2l0Y2ggKHAsIGRl
cHRoKTsKICAgICAgaWYgKHAgIT0gbmV4dCkKICAgICAgICB1bmNvbmQgPSAwOwogICAgICBlbHNl
CiAgICAgICAgewoKICAgICAgICAgIHVuY29uZCA9IHdyaXRlX25vZGUgKHAsIGRlcHRoLCBzdWJy
b3V0aW5lX3R5cGUpOwogICAgICAgICAgbmV4dCA9IHAtPm5leHQ7CiAgICAgICAgfQogICAgfQoK
CgogIGlmICghIHVuY29uZCkKICAgIHdyaXRlX2FmdGVyd2FyZCAoaGVhZC0+bGFzdCwgaGVhZC0+
bGFzdC0+YWZ0ZXJ3YXJkLCAiICAiKTsKfQoKCgoKc3RhdGljIHZvaWQKd3JpdGVfdHJlZSAoaGVh
ZCwgcHJldnBvcywgdHlwZSwgaW5pdGlhbCkKICAgICBzdHJ1Y3QgZGVjaXNpb25faGVhZCAqaGVh
ZDsKICAgICBjb25zdCBjaGFyICpwcmV2cG9zOwogICAgIGVudW0gcm91dGluZV90eXBlIHR5cGU7
CiAgICAgaW50IGluaXRpYWw7CnsKICBzdHJ1Y3QgZGVjaXNpb24gKnAgPSBoZWFkLT5maXJzdDsK
CiAgKF9fdXNfcnN0aHJlYWRfc3RkaW8gPyBfX3NlbXB1dGMoKCdcbicpLCgmX19pb2JbMV0pKSA6
ICgtLSgoJl9faW9iWzFdKSktPl9jbnQgPCAwID8gX19mbHNidWYoKCgnXG4nKSksICgoJl9faW9i
WzFdKSkpIDogKGludCkoKigoJl9faW9iWzFdKSktPl9wdHIrKyA9ICh1bnNpZ25lZCBjaGFyKSgo
J1xuJykpKSkpOwogIGlmIChwLT5uZWVkX2xhYmVsKQogICAgcHJpbnRmKCIlc0wlZDogQVRUUklC
VVRFX1VOVVNFRF9MQUJFTFxuIiwgKCIgIiksIChwLT5udW1iZXIpKTsKCiAgaWYgKCEgaW5pdGlh
bCAmJiBwLT5zdWJyb3V0aW5lX251bWJlciA+IDApCiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBj
aGFyICogY29uc3QgbmFtZV9wcmVmaXhbXSA9IHsKICAgICAgICAgICJyZWNvZyIsICJzcGxpdCIs
ICJwZWVwaG9sZTIiCiAgICAgIH07CgogICAgICBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNh
bGxfc3VmZml4W10gPSB7CiAgICAgICAgICAiLCBwbnVtX2Nsb2JiZXJzIiwgIiIsICIsIF9wbWF0
Y2hfbGVuIgogICAgICB9OwoKCgoKICAgICAgaWYgKHAtPmFmdGVyd2FyZCkKICAgICAgICB7CiAg
ICAgICAgICBwcmludGYgKCIgIHRlbSA9ICVzXyVkICh4MCwgaW5zbiVzKTtcbiIsCiAgICAgICAg
ICAgICAgICAgIG5hbWVfcHJlZml4W3R5cGVdLCBwLT5zdWJyb3V0aW5lX251bWJlciwgY2FsbF9z
dWZmaXhbdHlwZV0pOwogICAgICAgICAgaWYgKCgodHlwZSkgIT0gUkVDT0cpKQogICAgICAgICAg
ICBwcmludGYgKCIgIGlmICh0ZW0gIT0gMClcbiAgICByZXR1cm4gdGVtO1xuIik7CiAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgIHByaW50ZiAoIiAgaWYgKHRlbSA+PSAwKVxuICAgIHJldHVybiB0
ZW07XG4iKTsKCiAgICAgICAgICBjaGFuZ2Vfc3RhdGUgKHAtPnBvc2l0aW9uLCBwLT5hZnRlcndh
cmQtPnBvc2l0aW9uLCAoKHZvaWQgKikwKSwgIiAgIik7CiAgICAgICAgICBwcmludGYgKCIgIGdv
dG8gTCVkO1xuIiwgcC0+YWZ0ZXJ3YXJkLT5udW1iZXIpOwogICAgICAgIH0KICAgICAgZWxzZQog
ICAgICAgIHsKICAgICAgICAgIHByaW50ZiAoIiAgcmV0dXJuICVzXyVkICh4MCwgaW5zbiVzKTtc
biIsCiAgICAgICAgICAgICAgICAgIG5hbWVfcHJlZml4W3R5cGVdLCBwLT5zdWJyb3V0aW5lX251
bWJlciwgY2FsbF9zdWZmaXhbdHlwZV0pOwogICAgICAgIH0KICAgIH0KICBlbHNlCiAgICB7CiAg
ICAgIGludCBkZXB0aCA9IHN0cmxlbiAocC0+cG9zaXRpb24pOwoKICAgICAgY2hhbmdlX3N0YXRl
IChwcmV2cG9zLCBwLT5wb3NpdGlvbiwgaGVhZC0+bGFzdC0+YWZ0ZXJ3YXJkLCAiICAiKTsKICAg
ICAgd3JpdGVfdHJlZV8xIChoZWFkLCBkZXB0aCwgdHlwZSk7CgogICAgICBmb3IgKHAgPSBoZWFk
LT5maXJzdDsgcDsgcCA9IHAtPm5leHQpCiAgICAgICAgaWYgKHAtPnN1Y2Nlc3MuZmlyc3QpCiAg
ICAgICAgICB3cml0ZV90cmVlICgmcC0+c3VjY2VzcywgcC0+cG9zaXRpb24sIHR5cGUsIDApOwog
ICAgfQp9CgoKCgpzdGF0aWMgdm9pZAp3cml0ZV9zdWJyb3V0aW5lIChoZWFkLCB0eXBlKQogICAg
IHN0cnVjdCBkZWNpc2lvbl9oZWFkICpoZWFkOwogICAgIGVudW0gcm91dGluZV90eXBlIHR5cGU7
CnsKICBpbnQgc3ViZnVuY3Rpb24gPSBoZWFkLT5maXJzdCA/IGhlYWQtPmZpcnN0LT5zdWJyb3V0
aW5lX251bWJlciA6IDA7CiAgY29uc3QgY2hhciAqc19vcl9lOwogIGNoYXIgZXh0ZW5zaW9uWzMy
XTsKICBpbnQgaTsKCiAgc19vcl9lID0gc3ViZnVuY3Rpb24gPyAic3RhdGljICIgOiAiIjsKCiAg
aWYgKHN1YmZ1bmN0aW9uKQogICAgc3ByaW50ZiAoZXh0ZW5zaW9uLCAiXyVkIiwgc3ViZnVuY3Rp
b24pOwogIGVsc2UgaWYgKHR5cGUgPT0gUkVDT0cpCiAgICBleHRlbnNpb25bMF0gPSAnXDAnOwog
IGVsc2UKICAgIHN0cmNweSAoZXh0ZW5zaW9uLCAiX2luc25zIik7CgogIHN3aXRjaCAodHlwZSkK
ICAgIHsKICAgIGNhc2UgUkVDT0c6CiAgICAgIHByaW50ZiAoIiVzaW50IHJlY29nJXMgUEFSQU1T
ICgocnR4LCBydHgsIGludCAqKSk7XG4iLCBzX29yX2UsIGV4dGVuc2lvbik7CiAgICAgIHByaW50
ZiAoIiVzaW50XG5yZWNvZyVzICh4MCwgaW5zbiwgcG51bV9jbG9iYmVycylcbiAgICAgcnR4IHgw
IEFUVFJJQlVURV9VTlVTRUQ7XG4gICAgIHJ0eCBpbnNuIEFUVFJJQlVURV9VTlVTRUQ7XG4gICAg
IGludCAqcG51bV9jbG9iYmVycyBBVFRSSUJVVEVfVU5VU0VEO1xuIiwgc19vcl9lLCBleHRlbnNp
b24pOwoKCgoKICAgICAgYnJlYWs7CiAgICBjYXNlIFNQTElUOgogICAgICBwcmludGYgKCIlc3J0
eCBzcGxpdCVzIFBBUkFNUyAoKHJ0eCwgcnR4KSk7XG4iLCBzX29yX2UsIGV4dGVuc2lvbik7CiAg
ICAgIHByaW50ZiAoIiVzcnR4XG5zcGxpdCVzICh4MCwgaW5zbilcbiAgICAgcnR4IHgwIEFUVFJJ
QlVURV9VTlVTRUQ7XG4gICAgIHJ0eCBpbnNuIEFUVFJJQlVURV9VTlVTRUQ7XG4iLCBzX29yX2Us
IGV4dGVuc2lvbik7CgoKCiAgICAgIGJyZWFrOwogICAgY2FzZSBQRUVQSE9MRTI6CiAgICAgIHBy
aW50ZiAoIiVzcnR4IHBlZXBob2xlMiVzIFBBUkFNUyAoKHJ0eCwgcnR4LCBpbnQgKikpO1xuIiwK
ICAgICAgICAgICAgICBzX29yX2UsIGV4dGVuc2lvbik7CiAgICAgIHByaW50ZiAoIiVzcnR4XG5w
ZWVwaG9sZTIlcyAoeDAsIGluc24sIF9wbWF0Y2hfbGVuKVxuICAgICBydHggeDAgQVRUUklCVVRF
X1VOVVNFRDtcbiAgICAgcnR4IGluc24gQVRUUklCVVRFX1VOVVNFRDtcbiAgICAgaW50ICpfcG1h
dGNoX2xlbiBBVFRSSUJVVEVfVU5VU0VEO1xuIiwgc19vcl9lLCBleHRlbnNpb24pOwoKCgoKICAg
ICAgYnJlYWs7CiAgICB9CgogIHByaW50ZiAoIntcbiAgcnR4ICogY29uc3Qgb3BlcmFuZHMgQVRU
UklCVVRFX1VOVVNFRCA9ICZyZWNvZ19kYXRhLm9wZXJhbmRbMF07XG4iKTsKICBmb3IgKGkgPSAx
OyBpIDw9IG1heF9kZXB0aDsgaSsrKQogICAgcHJpbnRmICgiICBydHggeCVkIEFUVFJJQlVURV9V
TlVTRUQ7XG4iLCBpKTsKCiAgcHJpbnRmICgiICAlcyB0ZW0gQVRUUklCVVRFX1VOVVNFRDtcbiIs
ICgodHlwZSkgIT0gUkVDT0cpID8gInJ0eCIgOiAiaW50Iik7CgogIGlmICghc3ViZnVuY3Rpb24p
CiAgICBwcmludGYgKCIgIHJlY29nX2RhdGEuaW5zbiA9IE5VTExfUlRYO1xuIik7CgogIGlmICho
ZWFkLT5maXJzdCkKICAgIHdyaXRlX3RyZWUgKGhlYWQsICIiLCB0eXBlLCAxKTsKICBlbHNlCiAg
ICBwcmludGYgKCIgIGdvdG8gcmV0MDtcbiIpOwoKICBwcmludGYgKCIgcmV0MDpcbiAgcmV0dXJu
ICVkO1xufVxuXG4iLCAoKHR5cGUpICE9IFJFQ09HKSA/IDAgOiAtMSk7Cn0KCgoKCnN0YXRpYyB2
b2lkCndyaXRlX3N1YnJvdXRpbmVzIChoZWFkLCB0eXBlKQogICAgIHN0cnVjdCBkZWNpc2lvbl9o
ZWFkICpoZWFkOwogICAgIGVudW0gcm91dGluZV90eXBlIHR5cGU7CnsKICBzdHJ1Y3QgZGVjaXNp
b24gKnA7CgogIGZvciAocCA9IGhlYWQtPmZpcnN0OyBwIDsgcCA9IHAtPm5leHQpCiAgICBpZiAo
cC0+c3VjY2Vzcy5maXJzdCkKICAgICAgd3JpdGVfc3Vicm91dGluZXMgKCZwLT5zdWNjZXNzLCB0
eXBlKTsKCiAgaWYgKGhlYWQtPmZpcnN0LT5zdWJyb3V0aW5lX251bWJlciA+IDApCiAgICB3cml0
ZV9zdWJyb3V0aW5lIChoZWFkLCB0eXBlKTsKfQoKCgpzdGF0aWMgdm9pZAp3cml0ZV9oZWFkZXIg
KCkKewogIHB1dHMgKCIvKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgcHJvZ3JhbSBg
Z2VucmVjb2cnIGZyb20gdGhlIHRhcmdldFxuICAgbWFjaGluZSBkZXNjcmlwdGlvbiBmaWxlLiAg
Ki9cblxuI2luY2x1ZGUgXCJjb25maWcuaFwiXG4jaW5jbHVkZSBcInN5c3RlbS5oXCJcbiNpbmNs
dWRlIFwicnRsLmhcIlxuI2luY2x1ZGUgXCJ0bV9wLmhcIlxuI2luY2x1ZGUgXCJmdW5jdGlvbi5o
XCJcbiNpbmNsdWRlIFwiaW5zbi1jb25maWcuaFwiXG4jaW5jbHVkZSBcInJlY29nLmhcIlxuI2lu
Y2x1ZGUgXCJyZWFsLmhcIlxuI2luY2x1ZGUgXCJvdXRwdXQuaFwiXG4jaW5jbHVkZSBcImZsYWdz
LmhcIlxuI2luY2x1ZGUgXCJoYXJkLXJlZy1zZXQuaFwiXG4jaW5jbHVkZSBcInJlc291cmNlLmhc
IlxuI2luY2x1ZGUgXCJ0b3BsZXYuaFwiXG4jaW5jbHVkZSBcInJlbG9hZC5oXCJcblxuIik7CiMg
MjQxMSAiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiCiAgcHV0cyAo
IlxuLyogYHJlY29nJyBjb250YWlucyBhIGRlY2lzaW9uIHRyZWUgdGhhdCByZWNvZ25pemVzIHdo
ZXRoZXIgdGhlIHJ0eFxuICAgWDAgaXMgYSB2YWxpZCBpbnN0cnVjdGlvbi5cblxuICAgcmVjb2cg
cmV0dXJucyAtMSBpZiB0aGUgcnR4IGlzIG5vdCB2YWxpZC4gIElmIHRoZSBydHggaXMgdmFsaWQs
IHJlY29nXG4gICByZXR1cm5zIGEgbm9ubmVnYXRpdmUgbnVtYmVyIHdoaWNoIGlzIHRoZSBpbnNu
IGNvZGUgbnVtYmVyIGZvciB0aGVcbiAgIHBhdHRlcm4gdGhhdCBtYXRjaGVkLiAgVGhpcyBpcyB0
aGUgc2FtZSBhcyB0aGUgb3JkZXIgaW4gdGhlIG1hY2hpbmVcbiAgIGRlc2NyaXB0aW9uIG9mIHRo
ZSBlbnRyeSB0aGF0IG1hdGNoZWQuICBUaGlzIG51bWJlciBjYW4gYmUgdXNlZCBhcyBhblxuICAg
aW5kZXggaW50byBgaW5zbl9kYXRhJyBhbmQgb3RoZXIgdGFibGVzLlxuIik7CiMgMjQyMCAiLi4v
Li4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiCiAgcHV0cyAoIiAgIFRoZSB0
aGlyZCBhcmd1bWVudCB0byByZWNvZyBpcyBhbiBvcHRpb25hbCBwb2ludGVyIHRvIGFuIGludC4g
IElmXG4gICBwcmVzZW50LCByZWNvZyB3aWxsIGFjY2VwdCBhIHBhdHRlcm4gaWYgaXQgbWF0Y2hl
cyBleGNlcHQgZm9yIG1pc3NpbmdcbiAgIENMT0JCRVIgZXhwcmVzc2lvbnMgYXQgdGhlIGVuZC4g
IEluIHRoYXQgY2FzZSwgdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnlcbiAgIHRoZSBvcHRpb25hbCBw
b2ludGVyIHdpbGwgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgQ0xPQkJFUnMgdGhhdCBuZWVkXG4g
ICB0byBiZSBhZGRlZCAoaXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvIHplcm8gYnkgdGhlIGNh
bGxlcikuICBJZiBpdCIpOwoKCgoKCiAgcHV0cyAoIiAgIGlzIHNldCBub256ZXJvLCB0aGUgY2Fs
bGVyIHNob3VsZCBhbGxvY2F0ZSBhIFBBUkFMTEVMIG9mIHRoZVxuICAgYXBwcm9wcmlhdGUgc2l6
ZSwgY29weSB0aGUgaW5pdGlhbCBlbnRyaWVzLCBhbmQgY2FsbCBhZGRfY2xvYmJlcnNcbiAgIChm
b3VuZCBpbiBpbnNuLWVtaXQuYykgdG8gZmlsbCBpbiB0aGUgQ0xPQkJFUnMuXG4iKTsKCgoKCgog
IHB1dHMgKCJcbiAgIFRoZSBmdW5jdGlvbiBzcGxpdF9pbnNucyByZXR1cm5zIDAgaWYgdGhlIHJ0
bCBjb3VsZCBub3RcbiAgIGJlIHNwbGl0IG9yIHRoZSBzcGxpdCBydGwgaW4gYSBTRVFVRU5DRSBp
ZiBpdCBjYW4gYmUuXG5cbiAgIFRoZSBmdW5jdGlvbiBwZWVwaG9sZTJfaW5zbnMgcmV0dXJucyAw
IGlmIHRoZSBydGwgY291bGQgbm90XG4gICBiZSBtYXRjaGVkLiBJZiB0aGVyZSB3YXMgYSBtYXRj
aCwgdGhlIG5ldyBydGwgaXMgcmV0dXJuZWQgaW4gYSBTRVFVRU5DRSxcbiAgIGFuZCBMQVNUX0lO
U04gd2lsbCBwb2ludCB0byB0aGUgbGFzdCByZWNvZ25pemVkIGluc24gaW4gdGhlIG9sZCBzZXF1
ZW5jZS5cbiovXG5cbiIpOwoKCgoKCgoKfQoKCgoKCgoKc3RhdGljIHN0cnVjdCBkZWNpc2lvbl9o
ZWFkCm1ha2VfaW5zbl9zZXF1ZW5jZSAoaW5zbiwgdHlwZSkKICAgICBydHggaW5zbjsKICAgICBl
bnVtIHJvdXRpbmVfdHlwZSB0eXBlOwp7CiAgcnR4IHg7CiAgY29uc3QgY2hhciAqY190ZXN0ID0g
KCgoaW5zbiktPmZsZFt0eXBlID09IFJFQ09HID8gMiA6IDFdKS5ydHN0cik7CiAgc3RydWN0IGRl
Y2lzaW9uICpsYXN0OwogIHN0cnVjdCBkZWNpc2lvbl90ZXN0ICp0ZXN0LCAqKnBsYWNlOwogIHN0
cnVjdCBkZWNpc2lvbl9oZWFkIGhlYWQ7CiAgY2hhciBjX3Rlc3RfcG9zWzJdOwoKICByZWNvcmRf
aW5zbl9uYW1lIChuZXh0X2luc25fY29kZSwgKHR5cGUgPT0gUkVDT0cgPyAoKChpbnNuKS0+Zmxk
WzBdKS5ydHN0cikgOiAoKHZvaWQgKikwKSkpOwoKICBjX3Rlc3RfcG9zWzBdID0gJ1wwJzsKICBp
ZiAodHlwZSA9PSBQRUVQSE9MRTIpCiAgICB7CiAgICAgIGludCBpLCBqOwoKCgoKCiAgICAgIHgg
PSBydHhfYWxsb2MgKFBBUkFMTEVMKTsKICAgICAgKCh4KS0+bW9kZSA9IChlbnVtIG1hY2hpbmVf
bW9kZSkgKFZPSURtb2RlKSk7CiAgICAgICgoKHgpLT5mbGRbMF0pLnJ0dmVjKSA9IHJ0dmVjX2Fs
bG9jICgoKCgoKGluc24pLT5mbGRbMF0pLnJ0dmVjKSktPm51bV9lbGVtKSk7CiAgICAgIGZvciAo
aSA9IGogPSAwOyBpIDwgKCgoKChpbnNuKS0+ZmxkWzBdKS5ydHZlYykpLT5udW1fZWxlbSk7IGkr
KykKICAgICAgICB7CiAgICAgICAgICBydHggdG1wID0gKCgoKChpbnNuKS0+ZmxkWzBdKS5ydHZl
YykpLT5lbGVtW2ldKTsKICAgICAgICAgIGlmICgoKGVudW0gcnR4X2NvZGUpICh0bXApLT5jb2Rl
KSAhPSBNQVRDSF9TQ1JBVENIICYmICgoZW51bSBydHhfY29kZSkgKHRtcCktPmNvZGUpICE9IE1B
VENIX0RVUCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICgoKCgoeCktPmZsZFswXSkucnR2
ZWMpKS0+ZWxlbVtqXSkgPSB0bXA7CiAgICAgICAgICAgICAgaisrOwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICAoKCgoKHgpLT5mbGRbMF0pLnJ0dmVjKSktPm51bV9lbGVtKSA9IGo7Cgog
ICAgICBjX3Rlc3RfcG9zWzBdID0gJ0EnICsgaiAtIDE7CiAgICAgIGNfdGVzdF9wb3NbMV0gPSAn
XDAnOwogICAgfQogIGVsc2UgaWYgKCgoKCgoaW5zbiktPmZsZFt0eXBlID09IFJFQ09HXSkucnR2
ZWMpKS0+bnVtX2VsZW0pID09IDEpCiAgICB4ID0gKCgoKChpbnNuKS0+ZmxkW3R5cGUgPT0gUkVD
T0ddKS5ydHZlYykpLT5lbGVtWzBdKTsKICBlbHNlCiAgICB7CiAgICAgIHggPSBydHhfYWxsb2Mg
KFBBUkFMTEVMKTsKICAgICAgKCgoeCktPmZsZFswXSkucnR2ZWMpID0gKCgoaW5zbiktPmZsZFt0
eXBlID09IFJFQ09HXSkucnR2ZWMpOwogICAgICAoKHgpLT5tb2RlID0gKGVudW0gbWFjaGluZV9t
b2RlKSAoVk9JRG1vZGUpKTsKICAgIH0KCiAgdmFsaWRhdGVfcGF0dGVybiAoeCwgaW5zbiwgKHJ0
eCkgMCwgMCk7CgogIG1lbXNldCgmaGVhZCwgMCwgc2l6ZW9mKGhlYWQpKTsKICBsYXN0ID0gYWRk
X3RvX3NlcXVlbmNlICh4LCAmaGVhZCwgIiIsIHR5cGUsIDEpOwoKCiAgZm9yICh0ZXN0ID0gbGFz
dC0+dGVzdHM7IHRlc3QtPm5leHQ7IHRlc3QgPSB0ZXN0LT5uZXh0KQogICAgY29udGludWU7CiAg
cGxhY2UgPSAmdGVzdC0+bmV4dDsKCiAgaWYgKGNfdGVzdFswXSkKICAgIHsKCiAgICAgIGlmICh0
ZXN0LT50eXBlID09IERUX2FjY2VwdF9vcCkKICAgICAgICB7CiAgICAgICAgICBsYXN0ID0gbmV3
X2RlY2lzaW9uIChjX3Rlc3RfcG9zLCAmbGFzdC0+c3VjY2Vzcyk7CiAgICAgICAgICBwbGFjZSA9
ICZsYXN0LT50ZXN0czsKICAgICAgICB9CiAgICAgIHRlc3QgPSBuZXdfZGVjaXNpb25fdGVzdCAo
RFRfY190ZXN0LCAmcGxhY2UpOwogICAgICB0ZXN0LT51LmNfdGVzdCA9IGNfdGVzdDsKICAgIH0K
CiAgdGVzdCA9IG5ld19kZWNpc2lvbl90ZXN0IChEVF9hY2NlcHRfaW5zbiwgJnBsYWNlKTsKICB0
ZXN0LT51Lmluc24uY29kZV9udW1iZXIgPSBuZXh0X2luc25fY29kZTsKICB0ZXN0LT51Lmluc24u
bGluZW5vID0gcGF0dGVybl9saW5lbm87CiAgdGVzdC0+dS5pbnNuLm51bV9jbG9iYmVyc190b19h
ZGQgPSAwOwoKICBzd2l0Y2ggKHR5cGUpCiAgICB7CiAgICBjYXNlIFJFQ09HOgoKCgoKICAgICAg
aWYgKCgoZW51bSBydHhfY29kZSkgKHgpLT5jb2RlKSA9PSBQQVJBTExFTCkKICAgICAgICB7CiAg
ICAgICAgICBpbnQgaTsKCgogICAgICAgICAgZm9yIChpID0gKCgoKCh4KS0+ZmxkWzBdKS5ydHZl
YykpLT5udW1fZWxlbSk7IGkgPiAwOyBpLS0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBy
dHggeSA9ICgoKCgoeCktPmZsZFswXSkucnR2ZWMpKS0+ZWxlbVtpIC0gMV0pOwogICAgICAgICAg
ICAgIGlmICgoKGVudW0gcnR4X2NvZGUpICh5KS0+Y29kZSkgIT0gQ0xPQkJFUgogICAgICAgICAg
ICAgICAgICB8fCAoKChlbnVtIHJ0eF9jb2RlKSAoKCgoeSktPmZsZFswXSkucnR4KSktPmNvZGUp
ICE9IFJFRwogICAgICAgICAgICAgICAgICAgICAgJiYgKChlbnVtIHJ0eF9jb2RlKSAoKCgoeSkt
PmZsZFswXSkucnR4KSktPmNvZGUpICE9IE1BVENIX1NDUkFUQ0gpKQogICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoaSAhPSAoKCgoKHgpLT5mbGRbMF0p
LnJ0dmVjKSktPm51bV9lbGVtKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHJ0eCBuZXc7
CiAgICAgICAgICAgICAgc3RydWN0IGRlY2lzaW9uX2hlYWQgY2xvYmJlcl9oZWFkOwoKCiAgICAg
ICAgICAgICAgaWYgKGkgPT0gMSkKICAgICAgICAgICAgICAgIG5ldyA9ICgoKCgoeCktPmZsZFsw
XSkucnR2ZWMpKS0+ZWxlbVswXSk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICBpbnQgajsKCiAgICAgICAgICAgICAgICAgIG5ldyA9IHJ0eF9h
bGxvYyAoUEFSQUxMRUwpOwogICAgICAgICAgICAgICAgICAoKChuZXcpLT5mbGRbMF0pLnJ0dmVj
KSA9IHJ0dmVjX2FsbG9jIChpKTsKICAgICAgICAgICAgICAgICAgZm9yIChqID0gaSAtIDE7IGog
Pj0gMDsgai0tKQogICAgICAgICAgICAgICAgICAgICgoKCgobmV3KS0+ZmxkWzBdKS5ydHZlYykp
LT5lbGVtW2pdKSA9ICgoKCgoeCktPmZsZFswXSkucnR2ZWMpKS0+ZWxlbVtqXSk7CiAgICAgICAg
ICAgICAgICB9CgoKICAgICAgICAgICAgICBtZW1zZXQgKCZjbG9iYmVyX2hlYWQsIDAsIHNpemVv
ZihjbG9iYmVyX2hlYWQpKTsKICAgICAgICAgICAgICBsYXN0ID0gYWRkX3RvX3NlcXVlbmNlIChu
ZXcsICZjbG9iYmVyX2hlYWQsICIiLCB0eXBlLCAxKTsKCgogICAgICAgICAgICAgIGZvciAodGVz
dCA9IGxhc3QtPnRlc3RzOyB0ZXN0LT5uZXh0OyB0ZXN0ID0gdGVzdC0+bmV4dCkKICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwoKCgogICAgICAgICAgICAgIHBsYWNlID0gJnRlc3QtPm5leHQ7CiAg
ICAgICAgICAgICAgaWYgKHRlc3QtPnR5cGUgPT0gRFRfYWNjZXB0X29wKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICBsYXN0ID0gbmV3X2RlY2lzaW9uICgiIiwgJmxhc3QtPnN1
Y2Nlc3MpOwogICAgICAgICAgICAgICAgICBwbGFjZSA9ICZsYXN0LT50ZXN0czsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgaWYgKGNfdGVzdFswXSkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgdGVzdCA9IG5ld19kZWNpc2lvbl90ZXN0IChEVF9jX3Rlc3QsICZw
bGFjZSk7CiAgICAgICAgICAgICAgICAgIHRlc3QtPnUuY190ZXN0ID0gY190ZXN0OwogICAgICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgICB0ZXN0ID0gbmV3X2RlY2lzaW9uX3Rlc3QgKERUX2Fj
Y2VwdF9pbnNuLCAmcGxhY2UpOwogICAgICAgICAgICAgIHRlc3QtPnUuaW5zbi5jb2RlX251bWJl
ciA9IG5leHRfaW5zbl9jb2RlOwogICAgICAgICAgICAgIHRlc3QtPnUuaW5zbi5saW5lbm8gPSBw
YXR0ZXJuX2xpbmVubzsKICAgICAgICAgICAgICB0ZXN0LT51Lmluc24ubnVtX2Nsb2JiZXJzX3Rv
X2FkZCA9ICgoKCgoeCktPmZsZFswXSkucnR2ZWMpKS0+bnVtX2VsZW0pIC0gaTsKCiAgICAgICAg
ICAgICAgbWVyZ2VfdHJlZXMgKCZoZWFkLCAmY2xvYmJlcl9oZWFkKTsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgYnJlYWs7CgogICAgY2FzZSBTUExJVDoKCiAgICAgIHByaW50ZiAoImV4
dGVybiBydHggZ2VuX3NwbGl0XyVkIFBBUkFNUyAoKHJ0eCAqKSk7XG4iLCBuZXh0X2luc25fY29k
ZSk7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgUEVFUEhPTEUyOgoKICAgICAgcHJpbnRmICgiZXh0
ZXJuIHJ0eCBnZW5fcGVlcGhvbGUyXyVkIFBBUkFNUyAoKHJ0eCwgcnR4ICopKTtcbiIsCiAgICAg
ICAgICAgICAgbmV4dF9pbnNuX2NvZGUpOwogICAgICBicmVhazsKICAgIH0KCiAgcmV0dXJuIGhl
YWQ7Cn0KCnN0YXRpYyB2b2lkCnByb2Nlc3NfdHJlZSAoaGVhZCwgc3Vicm91dGluZV90eXBlKQog
ICAgIHN0cnVjdCBkZWNpc2lvbl9oZWFkICpoZWFkOwogICAgIGVudW0gcm91dGluZV90eXBlIHN1
YnJvdXRpbmVfdHlwZTsKewogIGlmIChoZWFkLT5maXJzdCA9PSAoKHZvaWQgKikwKSkKICAgIHsK
CiAgICAgIGlmIChzdWJyb3V0aW5lX3R5cGUgPT0gUEVFUEhPTEUyKQogICAgICAgIHJldHVybjsK
ICAgIH0KICBlbHNlCiAgICB7CiAgICAgIGZhY3Rvcl90ZXN0cyAoaGVhZCk7CgogICAgICBuZXh0
X3N1YnJvdXRpbmVfbnVtYmVyID0gMDsKICAgICAgYnJlYWtfb3V0X3N1YnJvdXRpbmVzIChoZWFk
LCAxKTsKICAgICAgZmluZF9hZnRlcndhcmQgKGhlYWQsICgodm9pZCAqKTApKTsKCgoKCiAgICAg
IHNpbXBsaWZ5X3Rlc3RzKGhlYWQpOwoKICAgICAgd3JpdGVfc3Vicm91dGluZXMgKGhlYWQsIHN1
YnJvdXRpbmVfdHlwZSk7CiAgICB9CgogIHdyaXRlX3N1YnJvdXRpbmUgKGhlYWQsIHN1YnJvdXRp
bmVfdHlwZSk7Cn0KCmV4dGVybiBpbnQgbWFpbiAoaW50LCBjaGFyICoqKTsKCmludAptYWluIChh
cmdjLCBhcmd2KQogICAgIGludCBhcmdjOwogICAgIGNoYXIgKiphcmd2Owp7CiAgcnR4IGRlc2M7
CiAgc3RydWN0IGRlY2lzaW9uX2hlYWQgcmVjb2dfdHJlZSwgc3BsaXRfdHJlZSwgcGVlcGhvbGUy
X3RyZWUsIGg7CgogIHByb2duYW1lID0gImdlbnJlY29nIjsKCiAgbWVtc2V0ICgmcmVjb2dfdHJl
ZSwgMCwgc2l6ZW9mIHJlY29nX3RyZWUpOwogIG1lbXNldCAoJnNwbGl0X3RyZWUsIDAsIHNpemVv
ZiBzcGxpdF90cmVlKTsKICBtZW1zZXQgKCZwZWVwaG9sZTJfdHJlZSwgMCwgc2l6ZW9mIHBlZXBo
b2xlMl90cmVlKTsKCiAgaWYgKGFyZ2MgPD0gMSkKICAgIGZhdGFsICgibm8gaW5wdXQgZmlsZSBu
YW1lIik7CgogIGlmIChpbml0X21kX3JlYWRlcl9hcmdzIChhcmdjLCBhcmd2KSAhPSAwKQogICAg
cmV0dXJuICgxKTsKCiAgbmV4dF9pbnNuX2NvZGUgPSAwOwogIG5leHRfaW5kZXggPSAwOwoKICB3
cml0ZV9oZWFkZXIgKCk7CgoKCiAgd2hpbGUgKDEpCiAgICB7CiAgICAgIGRlc2MgPSByZWFkX21k
X3J0eCAoJnBhdHRlcm5fbGluZW5vLCAmbmV4dF9pbnNuX2NvZGUpOwogICAgICBpZiAoZGVzYyA9
PSAoKHZvaWQgKikwKSkKICAgICAgICBicmVhazsKCiAgICAgIGlmICgoKGVudW0gcnR4X2NvZGUp
IChkZXNjKS0+Y29kZSkgPT0gREVGSU5FX0lOU04pCiAgICAgICAgewogICAgICAgICAgaCA9IG1h
a2VfaW5zbl9zZXF1ZW5jZSAoZGVzYywgUkVDT0cpOwogICAgICAgICAgbWVyZ2VfdHJlZXMgKCZy
ZWNvZ190cmVlLCAmaCk7CiAgICAgICAgfQogICAgICBlbHNlIGlmICgoKGVudW0gcnR4X2NvZGUp
IChkZXNjKS0+Y29kZSkgPT0gREVGSU5FX1NQTElUKQogICAgICAgIHsKICAgICAgICAgIGggPSBt
YWtlX2luc25fc2VxdWVuY2UgKGRlc2MsIFNQTElUKTsKICAgICAgICAgIG1lcmdlX3RyZWVzICgm
c3BsaXRfdHJlZSwgJmgpOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoKChlbnVtIHJ0eF9jb2Rl
KSAoZGVzYyktPmNvZGUpID09IERFRklORV9QRUVQSE9MRTIpCiAgICAgICAgewogICAgICAgICAg
aCA9IG1ha2VfaW5zbl9zZXF1ZW5jZSAoZGVzYywgUEVFUEhPTEUyKTsKICAgICAgICAgIG1lcmdl
X3RyZWVzICgmcGVlcGhvbGUyX3RyZWUsICZoKTsKICAgICAgICB9CgogICAgICBuZXh0X2luZGV4
Kys7CiAgICB9CgogIGlmIChlcnJvcl9jb3VudCkKICAgIHJldHVybiAxOwoKICBwdXRzICgiXG5c
biIpOwoKICBwcm9jZXNzX3RyZWUgKCZyZWNvZ190cmVlLCBSRUNPRyk7CiAgcHJvY2Vzc190cmVl
ICgmc3BsaXRfdHJlZSwgU1BMSVQpOwogIHByb2Nlc3NfdHJlZSAoJnBlZXBob2xlMl90cmVlLCBQ
RUVQSE9MRTIpOwoKICBmZmx1c2ggKCgmX19pb2JbMV0pKTsKICByZXR1cm4gKCgoKGludCkoKCZf
X2lvYlsxXSkpLT5fZmxhZykgJiAwMDQwKSAhPSAwID8gMSA6IDApOwp9CgoKY29uc3QgY2hhciAq
CmdldF9pbnNuX25hbWUgKGNvZGUpCiAgICAgaW50IGNvZGU7CnsKICBpZiAoY29kZSA8IGluc25f
bmFtZV9wdHJfc2l6ZSkKICAgIHJldHVybiBpbnNuX25hbWVfcHRyW2NvZGVdOwogIGVsc2UKICAg
IHJldHVybiAoKHZvaWQgKikwKTsKfQoKc3RhdGljIHZvaWQKcmVjb3JkX2luc25fbmFtZSAoY29k
ZSwgbmFtZSkKICAgICBpbnQgY29kZTsKICAgICBjb25zdCBjaGFyICpuYW1lOwp7CiAgc3RhdGlj
IGNvbnN0IGNoYXIgKmxhc3RfcmVhbF9uYW1lID0gImluc24iOwogIHN0YXRpYyBpbnQgbGFzdF9y
ZWFsX2NvZGUgPSAwOwogIGNoYXIgKm5ldzsKCiAgaWYgKGluc25fbmFtZV9wdHJfc2l6ZSA8PSBj
b2RlKQogICAgewogICAgICBpbnQgbmV3X3NpemU7CiAgICAgIG5ld19zaXplID0gKGluc25fbmFt
ZV9wdHJfc2l6ZSA/IGluc25fbmFtZV9wdHJfc2l6ZSAqIDIgOiA1MTIpOwogICAgICBpbnNuX25h
bWVfcHRyID0KICAgICAgICAoY2hhciAqKikgeHJlYWxsb2MgKGluc25fbmFtZV9wdHIsIHNpemVv
ZihjaGFyICopICogbmV3X3NpemUpOwogICAgICBtZW1zZXQgKGluc25fbmFtZV9wdHIgKyBpbnNu
X25hbWVfcHRyX3NpemUsIDAsCiAgICAgICAgICAgICAgc2l6ZW9mKGNoYXIgKikgKiAobmV3X3Np
emUgLSBpbnNuX25hbWVfcHRyX3NpemUpKTsKICAgICAgaW5zbl9uYW1lX3B0cl9zaXplID0gbmV3
X3NpemU7CiAgICB9CgogIGlmICghbmFtZSB8fCBuYW1lWzBdID09ICdcMCcpCiAgICB7CiAgICAg
IG5ldyA9IHhtYWxsb2MgKHN0cmxlbiAobGFzdF9yZWFsX25hbWUpICsgMTApOwogICAgICBzcHJp
bnRmIChuZXcsICIlcyslZCIsIGxhc3RfcmVhbF9uYW1lLCBjb2RlIC0gbGFzdF9yZWFsX2NvZGUp
OwogICAgfQogIGVsc2UKICAgIHsKICAgICAgbGFzdF9yZWFsX25hbWUgPSBuZXcgPSB4c3RyZHVw
IChuYW1lKTsKICAgICAgbGFzdF9yZWFsX2NvZGUgPSBjb2RlOwogICAgfQoKICBpbnNuX25hbWVf
cHRyW2NvZGVdID0gbmV3Owp9CgpzdGF0aWMgdm9pZApkZWJ1Z19kZWNpc2lvbl8yICh0ZXN0KQog
ICAgIHN0cnVjdCBkZWNpc2lvbl90ZXN0ICp0ZXN0Owp7CiAgc3dpdGNoICh0ZXN0LT50eXBlKQog
ICAgewogICAgY2FzZSBEVF9tb2RlOgogICAgICBmcHJpbnRmICgoJl9faW9iWzJdKSwgIm1vZGU9
JXMiLCAobW9kZV9uYW1lWyhpbnQpICh0ZXN0LT51Lm1vZGUpXSkpOwogICAgICBicmVhazsKICAg
IGNhc2UgRFRfY29kZToKICAgICAgZnByaW50ZiAoKCZfX2lvYlsyXSksICJjb2RlPSVzIiwgKHJ0
eF9uYW1lWyhpbnQpICh0ZXN0LT51LmNvZGUpXSkpOwogICAgICBicmVhazsKICAgIGNhc2UgRFRf
dmVjbGVuOgogICAgICBmcHJpbnRmICgoJl9faW9iWzJdKSwgInZlY2xlbj0lZCIsIHRlc3QtPnUu
dmVjbGVuKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIERUX2VsdF96ZXJvX2ludDoKICAgICAgZnBy
aW50ZiAoKCZfX2lvYlsyXSksICJlbHQwX2k9JWQiLCAoaW50KSB0ZXN0LT51LmludHZhbCk7CiAg
ICAgIGJyZWFrOwogICAgY2FzZSBEVF9lbHRfb25lX2ludDoKICAgICAgZnByaW50ZiAoKCZfX2lv
YlsyXSksICJlbHQxX2k9JWQiLCAoaW50KSB0ZXN0LT51LmludHZhbCk7CiAgICAgIGJyZWFrOwog
ICAgY2FzZSBEVF9lbHRfemVyb193aWRlOgogICAgICBmcHJpbnRmICgoJl9faW9iWzJdKSwgImVs
dDBfdz0iKTsKICAgICAgZnByaW50ZiAoKCZfX2lvYlsyXSksICIlbGxkIiwgdGVzdC0+dS5pbnR2
YWwpOwogICAgICBicmVhazsKICAgIGNhc2UgRFRfZWx0X3plcm9fd2lkZV9zYWZlOgogICAgICBm
cHJpbnRmICgoJl9faW9iWzJdKSwgImVsdDBfd3M9Iik7CiAgICAgIGZwcmludGYgKCgmX19pb2Jb
Ml0pLCAiJWxsZCIsIHRlc3QtPnUuaW50dmFsKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIERUX3Zl
Y2xlbl9nZToKICAgICAgZnByaW50ZiAoKCZfX2lvYlsyXSksICJ2ZWNsZW4+PSVkIiwgdGVzdC0+
dS52ZWNsZW4pOwogICAgICBicmVhazsKICAgIGNhc2UgRFRfZHVwOgogICAgICBmcHJpbnRmICgo
Jl9faW9iWzJdKSwgImR1cD0lZCIsIHRlc3QtPnUuZHVwKTsKICAgICAgYnJlYWs7CiAgICBjYXNl
IERUX3ByZWQ6CiAgICAgIGZwcmludGYgKCgmX19pb2JbMl0pLCAicHJlZD0oJXMsJXMpIiwKICAg
ICAgICAgICAgICAgdGVzdC0+dS5wcmVkLm5hbWUsIChtb2RlX25hbWVbKGludCkgKHRlc3QtPnUu
cHJlZC5tb2RlKV0pKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIERUX2NfdGVzdDoKICAgICAgewog
ICAgICAgIGNoYXIgc3ViWzE2KzRdOwogICAgICAgIHN0cm5jcHkgKHN1YiwgdGVzdC0+dS5jX3Rl
c3QsIHNpemVvZihzdWIpKTsKICAgICAgICBtZW1jcHkgKHN1YisxNiwgIi4uLiIsIDQpOwogICAg
ICAgIGZwcmludGYgKCgmX19pb2JbMl0pLCAiY190ZXN0PVwiJXNcIiIsIHN1Yik7CiAgICAgIH0K
ICAgICAgYnJlYWs7CiAgICBjYXNlIERUX2FjY2VwdF9vcDoKICAgICAgZnByaW50ZiAoKCZfX2lv
YlsyXSksICJBX29wPSVkIiwgdGVzdC0+dS5vcG5vKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIERU
X2FjY2VwdF9pbnNuOgogICAgICBmcHJpbnRmICgoJl9faW9iWzJdKSwgIkFfaW5zbj0oJWQsJWQp
IiwKICAgICAgICAgICAgICAgdGVzdC0+dS5pbnNuLmNvZGVfbnVtYmVyLCB0ZXN0LT51Lmluc24u
bnVtX2Nsb2JiZXJzX3RvX2FkZCk7CiAgICAgIGJyZWFrOwoKICAgIGRlZmF1bHQ6CiAgICAgIGZh
bmN5X2Fib3J0ICgiLi4vLi4vZWdjYy0zLjEtQ1ZTMjAwMjA0MTgvZ2NjL2dlbnJlY29nLmMiLCAy
ODA5LCBfX0ZVTkNUSU9OX18pOwogICAgfQp9CgpzdGF0aWMgdm9pZApkZWJ1Z19kZWNpc2lvbl8x
IChkLCBpbmRlbnQpCiAgICAgc3RydWN0IGRlY2lzaW9uICpkOwogICAgIGludCBpbmRlbnQ7CnsK
ICBpbnQgaTsKICBzdHJ1Y3QgZGVjaXNpb25fdGVzdCAqdGVzdDsKCiAgaWYgKGQgPT0gKCh2b2lk
ICopMCkpCiAgICB7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBpbmRlbnQ7ICsraSkKICAgICAgICAo
LS0oKCZfX2lvYlsyXSkpLT5fY250IDwgMCA/IF9fZmxzYnVmKCgnICcpLCAoKCZfX2lvYlsyXSkp
KSA6IChpbnQpKCooKCZfX2lvYlsyXSkpLT5fcHRyKysgPSAodW5zaWduZWQgY2hhcikoJyAnKSkp
OwogICAgICBmcHV0cyAoIihuaWwpXG4iLCAoJl9faW9iWzJdKSk7CiAgICAgIHJldHVybjsKICAg
IH0KCiAgZm9yIChpID0gMDsgaSA8IGluZGVudDsgKytpKQogICAgKC0tKCgmX19pb2JbMl0pKS0+
X2NudCA8IDAgPyBfX2Zsc2J1ZigoJyAnKSwgKCgmX19pb2JbMl0pKSkgOiAoaW50KSgqKCgmX19p
b2JbMl0pKS0+X3B0cisrID0gKHVuc2lnbmVkIGNoYXIpKCcgJykpKTsKCiAgKC0tKCgmX19pb2Jb
Ml0pKS0+X2NudCA8IDAgPyBfX2Zsc2J1ZigoJ3snKSwgKCgmX19pb2JbMl0pKSkgOiAoaW50KSgq
KCgmX19pb2JbMl0pKS0+X3B0cisrID0gKHVuc2lnbmVkIGNoYXIpKCd7JykpKTsKICB0ZXN0ID0g
ZC0+dGVzdHM7CiAgaWYgKHRlc3QpCiAgICB7CiAgICAgIGRlYnVnX2RlY2lzaW9uXzIgKHRlc3Qp
OwogICAgICB3aGlsZSAoKHRlc3QgPSB0ZXN0LT5uZXh0KSAhPSAoKHZvaWQgKikwKSkKICAgICAg
ICB7CiAgICAgICAgICBmcHV0cyAoIiArICIsICgmX19pb2JbMl0pKTsKICAgICAgICAgIGRlYnVn
X2RlY2lzaW9uXzIgKHRlc3QpOwogICAgICAgIH0KICAgIH0KICBmcHJpbnRmICgoJl9faW9iWzJd
KSwgIn0gJWQgbiAlZCBhICVkXG4iLCBkLT5udW1iZXIsCiAgICAgICAgICAgKGQtPm5leHQgPyBk
LT5uZXh0LT5udW1iZXIgOiAtMSksCiAgICAgICAgICAgKGQtPmFmdGVyd2FyZCA/IGQtPmFmdGVy
d2FyZC0+bnVtYmVyIDogLTEpKTsKfQoKc3RhdGljIHZvaWQKZGVidWdfZGVjaXNpb25fMCAoZCwg
aW5kZW50LCBtYXhkZXB0aCkKICAgICBzdHJ1Y3QgZGVjaXNpb24gKmQ7CiAgICAgaW50IGluZGVu
dCwgbWF4ZGVwdGg7CnsKICBzdHJ1Y3QgZGVjaXNpb24gKm47CiAgaW50IGk7CgogIGlmIChtYXhk
ZXB0aCA8IDApCiAgICByZXR1cm47CiAgaWYgKGQgPT0gKCh2b2lkICopMCkpCiAgICB7CiAgICAg
IGZvciAoaSA9IDA7IGkgPCBpbmRlbnQ7ICsraSkKICAgICAgICAoLS0oKCZfX2lvYlsyXSkpLT5f
Y250IDwgMCA/IF9fZmxzYnVmKCgnICcpLCAoKCZfX2lvYlsyXSkpKSA6IChpbnQpKCooKCZfX2lv
YlsyXSkpLT5fcHRyKysgPSAodW5zaWduZWQgY2hhcikoJyAnKSkpOwogICAgICBmcHV0cyAoIihu
aWwpXG4iLCAoJl9faW9iWzJdKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgZGVidWdfZGVjaXNp
b25fMSAoZCwgaW5kZW50KTsKICBmb3IgKG4gPSBkLT5zdWNjZXNzLmZpcnN0OyBuIDsgbiA9IG4t
Pm5leHQpCiAgICBkZWJ1Z19kZWNpc2lvbl8wIChuLCBpbmRlbnQgKyAyLCBtYXhkZXB0aCAtIDEp
Owp9Cgp2b2lkCmRlYnVnX2RlY2lzaW9uIChkKQogICAgIHN0cnVjdCBkZWNpc2lvbiAqZDsKewog
IGRlYnVnX2RlY2lzaW9uXzAgKGQsIDAsIDEwMDAwMDApOwp9Cgp2b2lkCmRlYnVnX2RlY2lzaW9u
X2xpc3QgKGQpCiAgICAgc3RydWN0IGRlY2lzaW9uICpkOwp7CiAgd2hpbGUgKGQpCiAgICB7CiAg
ICAgIGRlYnVnX2RlY2lzaW9uXzAgKGQsIDAsIDApOwogICAgICBkID0gZC0+bmV4dDsKICAgIH0K
fQo=



More information about the Gcc-bugs mailing list