c/316: Internal compiler error when compiling Linux kernel

peterb@suse.com peterb@suse.com
Tue Jun 13 14:56:00 GMT 2000


>Number:         316
>Category:       c
>Synopsis:       Internal compiler error when compiling Linux kernel
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Jun 13 14:56:00 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     Peter C. Buechler
>Release:        CVS snapshot as of 09 June 2000
>Organization:
>Environment:
SuSE 6.4. Compiler set up as a cross-compiler from
i386-linux to mipsel-linux.
>Description:
Internal compiler error while attempting to compile Linux-VR
(a port of Linux to the NEC VR41xx procesors)

Command line and results:

CX579290-B:/opt/crossdev/mipsel-linux/src/linux/kernel # mipsel-linux-gcc -v --s
ave-temps -D__KERNEL__ -I/opt/crossdev/mipsel-linux/src/linux/include -Wall -Wst
rict-prototypes -O2 -fomit-frame-pointer -G 0 -mno-abicalls -fno-pic -mcpu=r4600
 -mips2 -Wa,-m4100 -pipe -fno-strict-aliasing   -c -o sysctl.o sysctl.c
mipsel-linux-gcc: Warning: -pipe ignored since -save-temps specified
Reading specs from /opt/crossdev/lib/gcc-lib/mipsel-linux/2.96/specs
gcc version 2.96 20000609 (experimental)
 /opt/crossdev/lib/gcc-lib/mipsel-linux/2.96/cpp -lang-c -v -I/opt/crossdev/mips
el-linux/src/linux/include -D__GNUC__=2 -D__GNUC_MINOR__=96 -D__GNUC_PATCHLEVEL_
_=0 -DMIPSEL -D_MIPSEL -Dunix -Dmips -D_mips -DR3000 -D_R3000 -Dlinux -D__ELF__-D__PIC__ -D__pic__ -D__MIPSEL__ -D_MIPSEL -D__unix__ -D__mips__ -D__mips__ -D__
R3000__ -D_R3000 -D__linux__ -D__ELF__ -D__PIC__ -D__pic__ -D__MIPSEL -D__unix -
D__mips -D__mips -D__R3000 -D__linux -Asystem(posix) -Acpu(mips) -Amachine(mips)
 -D__OPTIMIZE__ -Wall -Wstrict-prototypes -D__LANGUAGE_C -D_LANGUAGE_C -DLANGUAG
E_C -D__SIZE_TYPE__=unsigned int -D__PTRDIFF_TYPE__=int -D_MIPS_FPSET=32 -D_MIPS
_ISA=_MIPS_ISA_MIPS2 -D_ABIN32=2 -D_MIPS_SIM=_ABIN32 -D_MIPS_SZINT=32 -D_MIPS_SZ
LONG=32 -D_MIPS_SZPTR=32 -U__mips64 -U__PIC__ -U__pic__ -D__KERNEL__ sysctl.c sy
sctl.i
GNU CPP version 2.96 20000609 (experimental) (cpplib)
 (MIPSel GNU/ELF)
ignoring nonexistent directory `/opt/crossdev/mipsel-linux/sys-include'
#include "..." search starts here:
#include <...> search starts here:
 /opt/crossdev/mipsel-linux/src/linux/include
 /opt/crossdev/lib/gcc-lib/mipsel-linux/2.96/include
14,
                 from /opt/crossdev/mipsel-linux/src/linux/include/linux/malloc.h:4,
                 from sysctl.c:22:
/opt/crossdev/mipsel-linux/src/linux/include/asm/bitops.h:237:16: warning: junk
on line after #undef
/opt/crossdev/mipsel-linux/src/linux/include/asm/bitops.h:238:23: warning: junk
on line after #undef
/opt/crossdev/mipsel-linux/src/linux/include/asm/bitops.h:239:26: warning: junk
on line after #undef
 /opt/crossdev/lib/gcc-lib/mipsel-linux/2.96/cc1 sysctl.i -mfp32 -mgp32 -G 0 -quiet -dumpbase sysctl.c -mno-abicalls -mcpu=r4600 -mips2 -O2 -Wall -Wstrict-prototypes -version -fomit-frame-pointer -fno-pic -fno-strict-aliasing -o sysctl.s
GNU C version 2.96 20000609 (experimental) (mipsel-linux) compiled by GNU C version 2.95.2 19991024 (release).
sysctl.c: In function `proc_dostring':
sysctl.c:662: Unrecognizable insn:
(insn 532 86 90 (set (reg:QI 175)
        (reg/v:SI 97)) -1 (insn_list 86 (nil))
    (nil))
sysctl.c:662: Internal compiler error in `extract_insn', at recog.c:2048
Please submit a full bug report.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.           
>How-To-Repeat:
Run the command line using the file attached (output of pre-
processing)
>Fix:
Damifino
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="sysctl.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="sysctl.i"

IyAxICJzeXNjdGwuYyIKIAojIDIwICJzeXNjdGwuYyIKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBz
ZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKCgoKIyAxICIvb3B0
L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9hdXRvY29uZi5o
IiAxCiAKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCiAKCgoKCgoKIAoKCgoKCgoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKIAoK
CgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKIAoKCgoKIAoKCgoK
CgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKIAoKCgoKCgojIDQgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9p
bmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAyCgoKCiMgMjEgInN5c2N0bC5jIiAyCgojIDEgIi9vcHQv
Y3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21hbGxvYy5oIiAx
CgoKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGlu
dXgvc2xhYi5oIiAxCiAKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IGttZW1fY2FjaGVfcyBrbWVt
X2NhY2hlX3Q7CgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNs
dWRlL2xpbnV4L21tLmgiIDEKCgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMv
bGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAxCgoKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBz
ZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3BhcmFtLmgiIDEKCgoKCgoKCgojIDMwICIv
b3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vcGFyYW0uaCIK
CgoKCgoKCgoKCgoKCgoKCgoKCiMgNCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xp
bnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGV2ZW50
OwoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51
eC9iaW5mbXRzLmgiIDEKCgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGlu
dXgvaW5jbHVkZS9saW51eC9wdHJhY2UuaCIgMQoKCiAKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCiMg
MSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3B0cmFj
ZS5oIiAxCiAKIyAxMiAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1
ZGUvYXNtL3B0cmFjZS5oIgoKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9s
aW51eC9pbmNsdWRlL2FzbS9pc2FkZXAuaCIgMQogCiMgMTAgIi9vcHQvY3Jvc3NkZXYvbWlwc2Vs
LWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9pc2FkZXAuaCIKCgoKCgoKIyAyOCAiL29wdC9j
cm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2lzYWRlcC5oIgogCgoK
CgoKCgoKCiMgMTUgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRl
L2FzbS9wdHJhY2UuaCIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGlu
dXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCgoKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2Vs
LWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Bvc2l4X3R5cGVzLmgiIDEKCgoKIyAxICIv
b3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zdGRkZWYu
aCIgMQoKCgoKCgoKCgoKCgoKCiMgNCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xp
bnV4L2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCIgMgoKCiAKIyAxNiAiL29wdC9jcm9zc2Rl
di9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCIKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJdW5zaWduZWQgbG9uZyBmZHNfYml0
cyBbKDEwMjQvKDggKiBzaXplb2YodW5zaWduZWQgbG9uZykpKV07Cn0gX19rZXJuZWxfZmRfc2V0
OwoKIAp0eXBlZGVmIHZvaWQgKCpfX2tlcm5lbF9zaWdoYW5kbGVyX3QpKGludCk7CgogCnR5cGVk
ZWYgaW50IF9fa2VybmVsX2tleV90OwoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9z
cmMvbGludXgvaW5jbHVkZS9hc20vcG9zaXhfdHlwZXMuaCIgMQogCgoKCgoKCgoKCgogCgoKCgoK
dHlwZWRlZiB1bnNpZ25lZCBsb25nCV9fa2VybmVsX2Rldl90Owp0eXBlZGVmIHVuc2lnbmVkIGxv
bmcJX19rZXJuZWxfaW5vX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9tb2RlX3Q7
CnR5cGVkZWYgdW5zaWduZWQgbG9uZwlfX2tlcm5lbF9ubGlua190Owp0eXBlZGVmIGxvbmcJCV9f
a2VybmVsX29mZl90Owp0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3BpZF90Owp0eXBlZGVmIGxvbmcJ
CV9fa2VybmVsX2lwY19waWRfdDsKdHlwZWRlZiBsb25nCQlfX2tlcm5lbF91aWRfdDsKdHlwZWRl
ZiBsb25nCQlfX2tlcm5lbF9naWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQJX19rZXJuZWxfc2l6
ZV90Owp0eXBlZGVmIGludAkJX19rZXJuZWxfc3NpemVfdDsKdHlwZWRlZiBpbnQJCV9fa2VybmVs
X3B0cmRpZmZfdDsKdHlwZWRlZiBsb25nCQlfX2tlcm5lbF90aW1lX3Q7CnR5cGVkZWYgbG9uZwkJ
X19rZXJuZWxfc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZwkJX19rZXJuZWxfY2xvY2tfdDsKdHlw
ZWRlZiBsb25nCQlfX2tlcm5lbF9kYWRkcl90Owp0eXBlZGVmIGNoYXIgKgkJX19rZXJuZWxfY2Fk
ZHJfdDsKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfdWlkMTZfdDsKdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9naWQxNl90Owp0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3Vp
ZDMyX3Q7CnR5cGVkZWYgbG9uZwkJX19rZXJuZWxfZ2lkMzJfdDsKdHlwZWRlZiBfX2tlcm5lbF91
aWRfdAlfX2tlcm5lbF9vbGRfdWlkX3Q7CnR5cGVkZWYgX19rZXJuZWxfZ2lkX3QJX19rZXJuZWxf
b2xkX2dpZF90OwoKCnR5cGVkZWYgbG9uZyBsb25nICAgICAgX19rZXJuZWxfbG9mZl90OwoKCnR5
cGVkZWYgc3RydWN0IHsKICAgICAgICBsb25nICAgIHZhbFsyXTsKfSBfX2tlcm5lbF9mc2lkX3Q7
CgoKCgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fRkRfU0VUKHVuc2lnbmVkIGxvbmcgX19mZCwg
X19rZXJuZWxfZmRfc2V0ICpfX2Zkc2V0cCkKewoJdW5zaWduZWQgbG9uZyBfX3RtcCA9IF9fZmQg
LyAoOCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Cgl1bnNpZ25lZCBsb25nIF9fcmVtID0gX19m
ZCAlICg4ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKCV9fZmRzZXRwLT5mZHNfYml0c1tfX3Rt
cF0gfD0gKDFVTDw8X19yZW0pOwp9CgoKc3RhdGljIF9faW5saW5lX18gdm9pZCBfX0ZEX0NMUih1
bnNpZ25lZCBsb25nIF9fZmQsIF9fa2VybmVsX2ZkX3NldCAqX19mZHNldHApCnsKCXVuc2lnbmVk
IGxvbmcgX190bXAgPSBfX2ZkIC8gKDggKiBzaXplb2YodW5zaWduZWQgbG9uZykpOwoJdW5zaWdu
ZWQgbG9uZyBfX3JlbSA9IF9fZmQgJSAoOCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CglfX2Zk
c2V0cC0+ZmRzX2JpdHNbX190bXBdICY9IH4oMVVMPDxfX3JlbSk7Cn0KCgpzdGF0aWMgX19pbmxp
bmVfXyBpbnQgX19GRF9JU1NFVCh1bnNpZ25lZCBsb25nIF9fZmQsIGNvbnN0IF9fa2VybmVsX2Zk
X3NldCAqX19wKQp7IAoJdW5zaWduZWQgbG9uZyBfX3RtcCA9IF9fZmQgLyAoOCAqIHNpemVvZih1
bnNpZ25lZCBsb25nKSk7Cgl1bnNpZ25lZCBsb25nIF9fcmVtID0gX19mZCAlICg4ICogc2l6ZW9m
KHVuc2lnbmVkIGxvbmcpKTsKCXJldHVybiAoX19wLT5mZHNfYml0c1tfX3RtcF0gJiAoMVVMPDxf
X3JlbSkpICE9IDA7Cn0KCiAKCgoKCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19GRF9aRVJPKF9f
a2VybmVsX2ZkX3NldCAqX19wKQp7Cgl1bnNpZ25lZCBsb25nICpfX3RtcCA9IF9fcC0+ZmRzX2Jp
dHM7CglpbnQgX19pOwoKCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCgoMTAyNC8oOCAqIHNpemVv
Zih1bnNpZ25lZCBsb25nKSkpKSkgewoJCXN3aXRjaCAoKDEwMjQvKDggKiBzaXplb2YodW5zaWdu
ZWQgbG9uZykpKSkgewoJCWNhc2UgMTY6CgkJCV9fdG1wWyAwXSA9IDA7IF9fdG1wWyAxXSA9IDA7
CgkJCV9fdG1wWyAyXSA9IDA7IF9fdG1wWyAzXSA9IDA7CgkJCV9fdG1wWyA0XSA9IDA7IF9fdG1w
WyA1XSA9IDA7CgkJCV9fdG1wWyA2XSA9IDA7IF9fdG1wWyA3XSA9IDA7CgkJCV9fdG1wWyA4XSA9
IDA7IF9fdG1wWyA5XSA9IDA7CgkJCV9fdG1wWzEwXSA9IDA7IF9fdG1wWzExXSA9IDA7CgkJCV9f
dG1wWzEyXSA9IDA7IF9fdG1wWzEzXSA9IDA7CgkJCV9fdG1wWzE0XSA9IDA7IF9fdG1wWzE1XSA9
IDA7CgkJCXJldHVybjsKCgkJY2FzZSA4OgoJCQlfX3RtcFsgMF0gPSAwOyBfX3RtcFsgMV0gPSAw
OwoJCQlfX3RtcFsgMl0gPSAwOyBfX3RtcFsgM10gPSAwOwoJCQlfX3RtcFsgNF0gPSAwOyBfX3Rt
cFsgNV0gPSAwOwoJCQlfX3RtcFsgNl0gPSAwOyBfX3RtcFsgN10gPSAwOwoJCQlyZXR1cm47CgoJ
CWNhc2UgNDoKCQkJX190bXBbIDBdID0gMDsgX190bXBbIDFdID0gMDsKCQkJX190bXBbIDJdID0g
MDsgX190bXBbIDNdID0gMDsKCQkJcmV0dXJuOwoJCX0KCX0KCV9faSA9ICgxMDI0Lyg4ICogc2l6
ZW9mKHVuc2lnbmVkIGxvbmcpKSk7Cgl3aGlsZSAoX19pKSB7CgkJX19pLS07CgkJKl9fdG1wID0g
MDsKCQlfX3RtcCsrOwoJfQp9CgoKCgojIDQ2ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9z
cmMvbGludXgvaW5jbHVkZS9saW51eC9wb3NpeF90eXBlcy5oIiAyCgoKCiMgNSAiL29wdC9jcm9z
c2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMgoKIyAx
ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vdHlwZXMu
aCIgMQogCiMgMTAgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRl
L2FzbS90eXBlcy5oIgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdW1vZGVfdDsKCiAKCgoKCnR5
cGVkZWYgX19zaWduZWRfXyBjaGFyIF9fczg7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OwoK
dHlwZWRlZiBfX3NpZ25lZF9fIHNob3J0IF9fczE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9f
dTE2OwoKdHlwZWRlZiBfX3NpZ25lZF9fIGludCBfX3MzMjsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
X191MzI7CgoKCgoKCgogCgp0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBsb25nIF9fczY0Owp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3U2NDsKCiAKCgogCgoKCgp0eXBlZGVmIF9fc2lnbmVk
IGNoYXIgczg7CnR5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKCnR5cGVkZWYgX19zaWduZWQgc2hv
cnQgczE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKCnR5cGVkZWYgX19zaWduZWQgaW50
IHMzMjsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOwoKCgoKCgoKCgp0eXBlZGVmIF9fc2lnbmVk
X18gbG9uZyBsb25nIHM2NDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OwoKCgoKCgp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgZG1hX2FkZHJfdDsKCgoKCiMgNiAiL29wdC9jcm9zc2Rldi9t
aXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMgoKCgoKdHlwZWRl
ZiBfX2tlcm5lbF9mZF9zZXQJCWZkX3NldDsKdHlwZWRlZiBfX2tlcm5lbF9kZXZfdAkJZGV2X3Q7
CnR5cGVkZWYgX19rZXJuZWxfaW5vX3QJCWlub190Owp0eXBlZGVmIF9fa2VybmVsX21vZGVfdAkJ
bW9kZV90Owp0eXBlZGVmIF9fa2VybmVsX25saW5rX3QJbmxpbmtfdDsKdHlwZWRlZiBfX2tlcm5l
bF9vZmZfdAkJb2ZmX3Q7CnR5cGVkZWYgX19rZXJuZWxfcGlkX3QJCXBpZF90Owp0eXBlZGVmIF9f
a2VybmVsX2RhZGRyX3QJZGFkZHJfdDsKdHlwZWRlZiBfX2tlcm5lbF9rZXlfdAkJa2V5X3Q7CnR5
cGVkZWYgX19rZXJuZWxfc3VzZWNvbmRzX3QJc3VzZWNvbmRzX3Q7CgoKdHlwZWRlZiBfX2tlcm5l
bF91aWQzMl90CXVpZF90Owp0eXBlZGVmIF9fa2VybmVsX2dpZDMyX3QJZ2lkX3Q7CnR5cGVkZWYg
X19rZXJuZWxfdWlkMTZfdCAgICAgICAgdWlkMTZfdDsKdHlwZWRlZiBfX2tlcm5lbF9naWQxNl90
ICAgICAgICBnaWQxNl90OwoKCgoKCgoKIAoKCgoKCgoKCnR5cGVkZWYgX19rZXJuZWxfbG9mZl90
CQlsb2ZmX3Q7CgoKIAoKCgoKCnR5cGVkZWYgX19rZXJuZWxfc2l6ZV90CQlzaXplX3Q7CgoKCgp0
eXBlZGVmIF9fa2VybmVsX3NzaXplX3QJc3NpemVfdDsKCgoKCnR5cGVkZWYgX19rZXJuZWxfcHRy
ZGlmZl90CXB0cmRpZmZfdDsKCgoKCnR5cGVkZWYgX19rZXJuZWxfdGltZV90CQl0aW1lX3Q7CgoK
Cgp0eXBlZGVmIF9fa2VybmVsX2Nsb2NrX3QJY2xvY2tfdDsKCgoKCnR5cGVkZWYgX19rZXJuZWxf
Y2FkZHJfdAljYWRkcl90OwoKCiAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyCQl1X2NoYXI7CnR5cGVk
ZWYgdW5zaWduZWQgc2hvcnQJCXVfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50CQl1X2ludDsK
dHlwZWRlZiB1bnNpZ25lZCBsb25nCQl1X2xvbmc7CgogCnR5cGVkZWYgdW5zaWduZWQgY2hhcgkJ
dW5jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQl1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQg
aW50CQl1aW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJCXVsb25nOwoKCgoKdHlwZWRlZgkJX191
OAkJdV9pbnQ4X3Q7CnR5cGVkZWYJCV9fczgJCWludDhfdDsKdHlwZWRlZgkJX191MTYJCXVfaW50
MTZfdDsKdHlwZWRlZgkJX19zMTYJCWludDE2X3Q7CnR5cGVkZWYJCV9fdTMyCQl1X2ludDMyX3Q7
CnR5cGVkZWYJCV9fczMyCQlpbnQzMl90OwoKCgp0eXBlZGVmCQlfX3U4CQl1aW50OF90Owp0eXBl
ZGVmCQlfX3UxNgkJdWludDE2X3Q7CnR5cGVkZWYJCV9fdTMyCQl1aW50MzJfdDsKCgp0eXBlZGVm
CQlfX3U2NAkJdWludDY0X3Q7CnR5cGVkZWYJCV9fdTY0CQl1X2ludDY0X3Q7CnR5cGVkZWYJCV9f
czY0CQlpbnQ2NF90OwoKCgoKIAoKCgoKc3RydWN0IHVzdGF0IHsKCV9fa2VybmVsX2RhZGRyX3QJ
Zl90ZnJlZTsKCV9fa2VybmVsX2lub190CQlmX3Rpbm9kZTsKCWNoYXIJCQlmX2ZuYW1lWzZdOwoJ
Y2hhcgkJCWZfZnBhY2tbNl07Cn07CgoKIyAxNiAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgv
c3JjL2xpbnV4L2luY2x1ZGUvYXNtL3B0cmFjZS5oIiAyCgoKIAoKCgoKCgoKCgoKIAoKCgpzdHJ1
Y3QgcHRfcmVncyB7CgkgCgl1bnNpZ25lZCBsb25nIHBhZDBbNl07CgoJIAoJdW5zaWduZWQgbG9u
ZyByZWdzWzMyXTsKCgkgCgl1bnNpZ25lZCBsb25nIGxvOwoJdW5zaWduZWQgbG9uZyBoaTsKCgkg
CgoKCXVuc2lnbmVkIGxvbmcgY3AwX2VwYzsKCXVuc2lnbmVkIGxvbmcgY3AwX2JhZHZhZGRyOwoJ
dW5zaWduZWQgbG9uZyBjcDBfc3RhdHVzOwoJdW5zaWduZWQgbG9uZyBjcDBfY2F1c2U7Cn07CgoK
CiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL29m
ZnNldC5oIiAxCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoK
IyA1NSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3B0
cmFjZS5oIiAyCgoKCgoKIAoKCgoKCgpleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3Jl
Z3MgKik7CgoKCgoKIyAyNCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2lu
Y2x1ZGUvbGludXgvcHRyYWNlLmgiIDIKCgoKIyA0ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51
eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rl
di9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIiAxCiAg
CgoKCgoKCgoKCgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5j
bHVkZS9saW51eC9mcy5oIiAxCgoKCiAKCgoKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxp
bnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2xpbmthZ2UuaCIgMQoKCgoKIAogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDY2ICIvb3B0L2Nyb3Nz
ZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9saW5rYWdlLmgiCgoKIyAx
MCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMu
aCIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9s
aW51eC9saW1pdHMuaCIgMQoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxMSAiL29wdC9jcm9zc2Rldi9t
aXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvb3B0L2Ny
b3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC93YWl0LmgiIDEKCgoK
CgoKCgoKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRl
L2xpbnV4L2tlcm5lbC5oIiAxCgoKCiAKCgoKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbGliL2djYy1s
aWIvbWlwc2VsLWxpbnV4LzIuOTYvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiAKIyAxOSAiL29wdC9j
cm9zc2Rldi9saWIvZ2NjLWxpYi9taXBzZWwtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGFyZy5oIiAz
CgogCgoKCgoKCiAKCgoKCgoKCgoKCgogCgoKCnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19n
bnVjX3ZhX2xpc3Q7CgoKIAoKCgogCgoKCgoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKCgoKCiMgOTYg
Ii9vcHQvY3Jvc3NkZXYvbGliL2djYy1saWIvbWlwc2VsLWxpbnV4LzIuOTYvaW5jbHVkZS9zdGRh
cmcuaCIgMwoKIAoKCgoKIAoKIAoKIAoKIAoKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0
OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxMCAiL29wdC9jcm9zc2Rldi9taXBzZWwt
bGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgva2VybmVsLmgiIDIKCgoKIAogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIHZvaWQgbWF0aF9lcnJvcih2b2lkKTsKZXh0
ZXJuIHN0cnVjdCBub3RpZmllcl9ibG9jayAqcGFuaWNfbm90aWZpZXJfbGlzdDsKICB2b2lkIHBh
bmljKGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKCV9fYXR0cmlidXRlX18gKChub3JldHVybiwgZm9y
bWF0IChwcmludGYsIDEsIDIpKSk7CiAgdm9pZCBkb19leGl0KGxvbmcgZXJyb3JfY29kZSkKCV9f
YXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CmV4dGVybiB1bnNpZ25lZCBsb25nIHNpbXBsZV9zdHJ0
b3VsKGNvbnN0IGNoYXIgKixjaGFyICoqLHVuc2lnbmVkIGludCk7CmV4dGVybiBsb25nIHNpbXBs
ZV9zdHJ0b2woY29uc3QgY2hhciAqLGNoYXIgKiosdW5zaWduZWQgaW50KTsKZXh0ZXJuIGludCBz
cHJpbnRmKGNoYXIgKiBidWYsIGNvbnN0IGNoYXIgKiBmbXQsIC4uLik7CmV4dGVybiBpbnQgdnNw
cmludGYoY2hhciAqYnVmLCBjb25zdCBjaGFyICosIHZhX2xpc3QpOwpleHRlcm4gaW50IGdldF9v
cHRpb24oY2hhciAqKnN0ciwgaW50ICpwaW50KTsKZXh0ZXJuIGNoYXIgKmdldF9vcHRpb25zKGNo
YXIgKnN0ciwgaW50IG5pbnRzLCBpbnQgKmludHMpOwoKZXh0ZXJuIGludCBzZXNzaW9uX29mX3Bn
cnAoaW50IHBncnApOwoKICBpbnQgcHJpbnRrKGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKCV9fYXR0
cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgpzdHJ1Y3Qgc3lzaW5mbyB7Cglsb25nIHVwdGltZTsJCQkgCgl1bnNpZ25lZCBsb25nIGxv
YWRzWzNdOwkJIAoJdW5zaWduZWQgbG9uZyB0b3RhbHJhbTsJCSAKCXVuc2lnbmVkIGxvbmcgZnJl
ZXJhbTsJCSAKCXVuc2lnbmVkIGxvbmcgc2hhcmVkcmFtOwkgCgl1bnNpZ25lZCBsb25nIGJ1ZmZl
cnJhbTsJIAoJdW5zaWduZWQgbG9uZyB0b3RhbHN3YXA7CSAKCXVuc2lnbmVkIGxvbmcgZnJlZXN3
YXA7CQkgCgl1bnNpZ25lZCBzaG9ydCBwcm9jczsJCSAKCXVuc2lnbmVkIGxvbmcgdG90YWxoaWdo
OwkgCgl1bnNpZ25lZCBsb25nIGZyZWVoaWdoOwkJIAoJdW5zaWduZWQgaW50IG1lbV91bml0OwkJ
IAoJY2hhciBfZlsyMC0yKnNpemVvZihsb25nKS1zaXplb2YoaW50KV07CSAKfTsKCgojIDEyICIv
b3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC93YWl0Lmgi
IDIKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGlu
dXgvbGlzdC5oIiAxCgoKCgoKIAojIDE1ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMv
bGludXgvaW5jbHVkZS9saW51eC9saXN0LmgiCgpzdHJ1Y3QgbGlzdF9oZWFkIHsKCXN0cnVjdCBs
aXN0X2hlYWQgKm5leHQsICpwcmV2Owp9OwoKCgoKCgoKCgoKIAoKCgoKCnN0YXRpYyBfX2lubGlu
ZV9fIHZvaWQgX19saXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICogbmV3LAoJc3RydWN0IGxpc3Rf
aGVhZCAqIHByZXYsCglzdHJ1Y3QgbGlzdF9oZWFkICogbmV4dCkKewoJbmV4dC0+cHJldiA9IG5l
dzsKCW5ldy0+bmV4dCA9IG5leHQ7CgluZXctPnByZXYgPSBwcmV2OwoJcHJldi0+bmV4dCA9IG5l
dzsKfQoKIAoKCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgbGlzdF9hZGQoc3RydWN0IGxpc3RfaGVh
ZCAqbmV3LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQp7CglfX2xpc3RfYWRkKG5ldywgaGVhZCwg
aGVhZC0+bmV4dCk7Cn0KCiAKCgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxpc3RfYWRkX3RhaWwo
c3RydWN0IGxpc3RfaGVhZCAqbmV3LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQp7CglfX2xpc3Rf
YWRkKG5ldywgaGVhZC0+cHJldiwgaGVhZCk7Cn0KCiAKCgoKCgoKc3RhdGljIF9faW5saW5lX18g
dm9pZCBfX2xpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKiBwcmV2LAoJCQkJICBzdHJ1Y3QgbGlz
dF9oZWFkICogbmV4dCkKewoJbmV4dC0+cHJldiA9IHByZXY7CglwcmV2LT5uZXh0ID0gbmV4dDsK
fQoKc3RhdGljIF9faW5saW5lX18gdm9pZCBsaXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICplbnRy
eSkKewoJX19saXN0X2RlbChlbnRyeS0+cHJldiwgZW50cnktPm5leHQpOwp9CgpzdGF0aWMgX19p
bmxpbmVfXyBpbnQgbGlzdF9lbXB0eShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQp7CglyZXR1cm4g
aGVhZC0+bmV4dCA9PSBoZWFkOwp9CgogCgoKc3RhdGljIF9faW5saW5lX18gdm9pZCBsaXN0X3Nw
bGljZShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQp7Cglz
dHJ1Y3QgbGlzdF9oZWFkICpmaXJzdCA9IGxpc3QtPm5leHQ7CgoJaWYgKGZpcnN0ICE9IGxpc3Qp
IHsKCQlzdHJ1Y3QgbGlzdF9oZWFkICpsYXN0ID0gbGlzdC0+cHJldjsKCQlzdHJ1Y3QgbGlzdF9o
ZWFkICphdCA9IGhlYWQtPm5leHQ7CgoJCWZpcnN0LT5wcmV2ID0gaGVhZDsKCQloZWFkLT5uZXh0
ID0gZmlyc3Q7CgoJCWxhc3QtPm5leHQgPSBhdDsKCQlhdC0+cHJldiA9IGxhc3Q7Cgl9Cn0KCgoK
CgoKCgoKCiMgMTMgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRl
L2xpbnV4L3dhaXQuaCIgMgoKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xp
bnV4L2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCIgMQoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogIHR5cGVkZWYgc3RydWN0IHsgaW50IGdjY19pc19i
dWdneTsgfSBzcGlubG9ja190OwogIAoKCgoKCgoKCgoKIyA5NiAiL29wdC9jcm9zc2Rldi9taXBz
ZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCIKCiAKIyAxMDkgIi9v
cHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NwaW5sb2Nr
LmgiCgoKCgogIHR5cGVkZWYgc3RydWN0IHsgaW50IGdjY19pc19idWdneTsgfSByd2xvY2tfdDsK
ICAKCgoKCgoKCgoKIyAxNSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2lu
Y2x1ZGUvbGludXgvd2FpdC5oIiAyCgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9z
cmMvbGludXgvaW5jbHVkZS9hc20vcGFnZS5oIiAxCiAKIyAxMSAiL29wdC9jcm9zc2Rldi9taXBz
ZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3BhZ2UuaCIKCgoKIAoKCgoKCgoKCgoKCmV4
dGVybiB2b2lkICgqX2NsZWFyX3BhZ2UpKHZvaWQgKiBwYWdlKTsKZXh0ZXJuIHZvaWQgKCpfY29w
eV9wYWdlKSh2b2lkICogdG8sIHZvaWQgKiBmcm9tKTsKCgoKCgoKIAoKCnR5cGVkZWYgc3RydWN0
IHsgdW5zaWduZWQgbG9uZyBwdGU7IH0gcHRlX3Q7CnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQg
bG9uZyBwbWQ7IH0gcG1kX3Q7CnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ2Q7IH0g
cGdkX3Q7CnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7
CgoKCgoKCgoKCgoKIApleHRlcm4gX19pbmxpbmVfXyBpbnQgZ2V0X29yZGVyKHVuc2lnbmVkIGxv
bmcgc2l6ZSkKewoJaW50IG9yZGVyOwoKCXNpemUgPSAoc2l6ZS0xKSA+PiAoMTItMSk7CglvcmRl
ciA9IC0xOwoJZG8gewoJCXNpemUgPj49IDE7CgkJb3JkZXIrKzsKCX0gd2hpbGUgKHNpemUpOwoJ
cmV0dXJuIG9yZGVyOwp9CgoKCiAKCgogCgoKCgoKCgoKCgoKIyAxNyAiL29wdC9jcm9zc2Rldi9t
aXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvd2FpdC5oIiAyCgojIDEgIi9vcHQv
Y3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIg
MQogCiMgMTIgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2Fz
bS9wcm9jZXNzb3IuaCIKCgoKCgogCgoKCgoKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGlu
dXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdGhyZWFkcy5oIiAxCgoKCiAKCgoKIAoKCgoKCgoK
CiAKCgoKCgojIDI0ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVk
ZS9hc20vcHJvY2Vzc29yLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3Jj
L2xpbnV4L2luY2x1ZGUvYXNtL2NhY2hlY3RsLmgiIDEKIAoKCgoKCgoKIAoKCgoKCgogCgoKCgoK
CgoKIyAyNSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNt
L3Byb2Nlc3Nvci5oIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51
eC9pbmNsdWRlL2FzbS9taXBzcmVncy5oIiAxCiAKIyAxMCAiL29wdC9jcm9zc2Rldi9taXBzZWwt
bGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL21pcHNyZWdzLmgiCgoKCgoKIAoKCgoKCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgog
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgogCgoKCgog
CgoKCgoKCgoKCiMgMTQ5ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5j
bHVkZS9hc20vbWlwc3JlZ3MuaCIKCgogCgoKCgoKCgoKCgogCgoKCiMgMTc0ICIvb3B0L2Nyb3Nz
ZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaCIKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgojIDI0
MiAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL21pcHNy
ZWdzLmgiCgpleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgc2V0X2NwMF9jb25mKHVuc2ln
bmVkIGludCBjaGFuZ2UsIHVuc2lnbmVkIGludCBuZXcpIHsgdW5zaWduZWQgaW50IHJlczsgcmVz
ID0gKHsgaW50IF9fcmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIi5zZXRcdHB1c2hcblx0IiAi
LnNldFx0cmVvcmRlclxuXHQiICJtZmMwXHQlMCwiIiQzIiJcblx0IiAiLnNldFx0cG9wIiA6ICI9
ciIgKF9fcmVzKSk7IF9fcmVzO30pOyByZXMgJj0gfmNoYW5nZTsgcmVzIHw9IChuZXcgJiBjaGFu
Z2UpOyBpZihjaGFuZ2UpIF9fYXNtX18gX192b2xhdGlsZV9fKCAibXRjMFx0JTAsIiIkMyIiXG5c
dCIgIm5vcCIgOiA6ICJyIiAoIHJlcykpOzsgcmV0dXJuIHJlczsgfQpleHRlcm4gX19pbmxpbmVf
XyB1bnNpZ25lZCBpbnQgc2V0X2NwMF9zdGF0dXModW5zaWduZWQgaW50IGNoYW5nZSwgdW5zaWdu
ZWQgaW50IG5ldykgeyB1bnNpZ25lZCBpbnQgcmVzOyByZXMgPSAoeyBpbnQgX19yZXM7IF9fYXNt
X18gX192b2xhdGlsZV9fKCAiLnNldFx0cHVzaFxuXHQiICIuc2V0XHRyZW9yZGVyXG5cdCIgIm1m
YzBcdCUwLCIiJDEyIiJcblx0IiAiLnNldFx0cG9wIiA6ICI9ciIgKF9fcmVzKSk7IF9fcmVzO30p
OyByZXMgJj0gfmNoYW5nZTsgcmVzIHw9IChuZXcgJiBjaGFuZ2UpOyBpZihjaGFuZ2UpIF9fYXNt
X18gX192b2xhdGlsZV9fKCAibXRjMFx0JTAsIiIkMTIiIlxuXHQiICJub3AiIDogOiAiciIgKCBy
ZXMpKTs7IHJldHVybiByZXM7IH0KZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgaW50IHNldF9j
cDBfY2F1c2UodW5zaWduZWQgaW50IGNoYW5nZSwgdW5zaWduZWQgaW50IG5ldykgeyB1bnNpZ25l
ZCBpbnQgcmVzOyByZXMgPSAoeyBpbnQgX19yZXM7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiLnNl
dFx0cHVzaFxuXHQiICIuc2V0XHRyZW9yZGVyXG5cdCIgIm1mYzBcdCUwLCIiJDEzIiJcblx0IiAi
LnNldFx0cG9wIiA6ICI9ciIgKF9fcmVzKSk7IF9fcmVzO30pOyByZXMgJj0gfmNoYW5nZTsgcmVz
IHw9IChuZXcgJiBjaGFuZ2UpOyBpZihjaGFuZ2UpIF9fYXNtX18gX192b2xhdGlsZV9fKCAibXRj
MFx0JTAsIiIkMTMiIlxuXHQiICJub3AiIDogOiAiciIgKCByZXMpKTs7IHJldHVybiByZXM7IH0K
ZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgaW50IHNldF9jcDBfY29uZmlnKHVuc2lnbmVkIGlu
dCBjaGFuZ2UsIHVuc2lnbmVkIGludCBuZXcpIHsgdW5zaWduZWQgaW50IHJlczsgcmVzID0gKHsg
aW50IF9fcmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIi5zZXRcdHB1c2hcblx0IiAiLnNldFx0
cmVvcmRlclxuXHQiICJtZmMwXHQlMCwiIiQxNiIiXG5cdCIgIi5zZXRcdHBvcCIgOiAiPXIiIChf
X3JlcykpOyBfX3Jlczt9KTsgcmVzICY9IH5jaGFuZ2U7IHJlcyB8PSAobmV3ICYgY2hhbmdlKTsg
aWYoY2hhbmdlKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIm10YzBcdCUwLCIiJDE2IiJcblx0IiAi
bm9wIiA6IDogInIiICggcmVzKSk7OyByZXR1cm4gcmVzOyB9CgoKCiAKIyAyNjIgIi9vcHQvY3Jv
c3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9taXBzcmVncy5oIgoKIyAy
NzMgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9taXBz
cmVncy5oIgoKCiMgMjg1ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5j
bHVkZS9hc20vbWlwc3JlZ3MuaCIKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgogCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CiAKCgpleHRlcm4gICB1bnNpZ25lZCBpbnQgcmVhZF9wZXJmX2NudHIodW5zaWduZWQgaW50IGNv
dW50ZXIpOwpleHRlcm4gICB2b2lkIHdyaXRlX3BlcmZfY250cih1bnNpZ25lZCBpbnQgY291bnRl
ciwgdW5zaWduZWQgaW50IHZhbCk7CmV4dGVybiAgIHVuc2lnbmVkIGludCByZWFkX3BlcmZfY250
bCh1bnNpZ25lZCBpbnQgY291bnRlcik7CmV4dGVybiAgIHZvaWQgd3JpdGVfcGVyZl9jbnRsKHVu
c2lnbmVkIGludCBjb3VudGVyLCB1bnNpZ25lZCBpbnQgdmFsKTsKCgoKIyAyNiAiL29wdC9jcm9z
c2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIiAyCgoj
IDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9yZWcu
aCIgMQogCiMgMTEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRl
L2FzbS9yZWcuaCIKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgog
CgoKCgoKCgoKCgoKCgojIDI3ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgv
aW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGlu
dXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3N5c3RlbS5oIiAxCiAKIyAxMSAiL29wdC9jcm9zc2Rl
di9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3N5c3RlbS5oIgoKCgoKIyAxICIv
b3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vc2dpZGVmcy5o
IiAxCiAKIyAxMCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUv
YXNtL3NnaWRlZnMuaCIKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgojIDY2ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9h
c20vc2dpZGVmcy5oIgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKIyAxNSAi
L29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3N5c3RlbS5o
IiAyCgoKCgpleHRlcm4gX19pbmxpbmVfXyB2b2lkCl9fc3RpKHZvaWQpCnsKCV9fYXNtX18gX192
b2xhdGlsZV9fKAoJCSIuc2V0XHRwdXNoXG5cdCIKCQkiLnNldFx0cmVvcmRlclxuXHQiCgkJIi5z
ZXRcdG5vYXRcblx0IgoJCSJtZmMwXHQkMSwkMTJcblx0IgoJCSJvcmlcdCQxLDB4MWZcblx0IgoJ
CSJ4b3JpXHQkMSwweDFlXG5cdCIKCQkibXRjMFx0JDEsJDEyXG5cdCIKCQkiLnNldFx0cG9wXG5c
dCIKCQk6ICAKCQk6ICAKCQk6ICIkMSIsICJtZW1vcnkiKTsKfQoKIAoKCgoKCgpleHRlcm4gX19p
bmxpbmVfXyB2b2lkCl9fY2xpKHZvaWQpCnsKCV9fYXNtX18gX192b2xhdGlsZV9fKAoJCSIuc2V0
XHRwdXNoXG5cdCIKCQkiLnNldFx0cmVvcmRlclxuXHQiCgkJIi5zZXRcdG5vYXRcblx0IgoJCSJt
ZmMwXHQkMSwkMTJcblx0IgoJCSJvcmlcdCQxLDFcblx0IgoJCSJ4b3JpXHQkMSwxXG5cdCIKCQki
LnNldFx0bm9yZW9yZGVyXG5cdCIKCQkibXRjMFx0JDEsJDEyXG5cdCIKCQkibm9wXG5cdCIKCQki
bm9wXG5cdCIKCQkibm9wXG5cdCIKCQkiLnNldFx0cG9wXG5cdCIKCQk6ICAKCQk6ICAKCQk6ICIk
MSIsICJtZW1vcnkiKTsKfQoKCiMgNzMgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9s
aW51eC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIKCgojIDkxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1s
aW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vc3lzdGVtLmgiCgpleHRlcm4gdm9pZCBfX2lubGlu
ZV9fCl9fcmVzdG9yZV9mbGFncyhpbnQgZmxhZ3MpCnsKCV9fYXNtX18gX192b2xhdGlsZV9fKAoJ
CSIuc2V0XHRwdXNoXG5cdCIKCQkiLnNldFx0cmVvcmRlclxuXHQiCgkJIm1mYzBcdCQ4LCQxMlxu
XHQiCgkJImxpXHQkOSwweGZmMDBcblx0IgoJCSJhbmRcdCQ4LCQ5XG5cdCIKCQkibm9yXHQkOSwk
MCwkOVxuXHQiCgkJImFuZFx0JTAsJDlcblx0IgoJCSJvclx0JTAsJDhcblx0IgoJCSIuc2V0XHRu
b3Jlb3JkZXJcblx0IgoJCSJtdGMwXHQlMCwkMTJcblx0IgoJCSJub3Bcblx0IgoJCSJub3Bcblx0
IgoJCSJub3Bcblx0IgoJCSIuc2V0XHRwb3Bcblx0IgoJCToKCQk6ICJyIiAoZmxhZ3MpCgkJOiAi
JDgiLCAiJDkiLCAibWVtb3J5Iik7Cn0KCiAKCgoKCgoKCgogCgoKCgoKIAoKCgoKCgoKCgojIDE0
OSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3N5c3Rl
bS5oIgoKCgoKCgoKCgoKCgoKCiAKCgoKZXh0ZXJuICAgdm9pZCAqcmVzdW1lKHZvaWQgKmxhc3Qs
IHZvaWQgKm5leHQpOwoKCgoKCgoKCiAKCgoKZXh0ZXJuIF9faW5saW5lX18gdW5zaWduZWQgbG9u
ZyB4Y2hnX3UzMih2b2xhdGlsZSBpbnQgKiBtLCB1bnNpZ25lZCBsb25nIHZhbCkKewoKIyAyMDEg
Ii9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9zeXN0ZW0u
aCIKCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHJldHZhbDsKCglfX2FzbV9fIF9fdm9sYXRpbGVfXygg
Ii5zZXRcdHB1c2hcblx0IiAiLnNldFx0cmVvcmRlclxuXHQiICJtZmMwXHQlMCwkMTJcblx0IiAi
LnNldFx0cG9wXG5cdCIgOiAiPXIiIChmbGFncykgOiA6ICJtZW1vcnkiKTsKCV9fY2xpKCk7Cgly
ZXR2YWwgPSAqbTsKCSptID0gdmFsOwoJX19yZXN0b3JlX2ZsYWdzKGZsYWdzKTsKCXJldHVybiBy
ZXR2YWw7CgoKfQoKIAoKCmV4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgeGNoZ191NjQo
dm9sYXRpbGUgbG9uZyAqIG0sIHVuc2lnbmVkIGxvbmcgdmFsKQp7Cgl1bnNpZ25lZCBsb25nIGR1
bW15OwoKCV9fYXNtX18gX192b2xhdGlsZV9fKAoJCSIuc2V0XHRub3Jlb3JkZXJcblx0IgoJCSIu
c2V0XHRub2F0XG5cdCIKCQkibGxkXHQlMCwoJTEpXG4iCgkJIjE6XHRtb3ZlXHQkMSwlMlxuXHQi
CgkJInNjZFx0JDEsKCUxKVxuXHQiCgkJImJlcXpsXHQkMSwxYlxuXHQiCgkJImxsZFx0JTAsKCUx
KVxuXHQiCgkJIi5zZXRcdGF0XG5cdCIKCQkiLnNldFx0cmVvcmRlciIKCQk6ICI9ciIgKHZhbCks
ICI9ciIgKG0pLCAiPXIiIChkdW1teSkKCQk6ICIxIiAobSksICIyIiAodmFsKQoJCTogIm1lbW9y
eSIpOwoKCXJldHVybiB2YWw7Cn0KCgoKCiAKCgoKCgoKCmV4dGVybiB2b2lkIF9feGNoZ19jYWxs
ZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKCnN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxv
bmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgdm9sYXRpbGUgdm9pZCAqIHB0ciwgaW50IHNpemUp
CnsKCXN3aXRjaCAoc2l6ZSkgewoJCWNhc2UgNDoKCQkJcmV0dXJuIHhjaGdfdTMyKHB0ciwgeCk7
CgoKCgoJfQoJX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKCk7CglyZXR1cm4geDsKfQoK
ZXh0ZXJuIHZvaWQgc2V0X2V4Y2VwdF92ZWN0b3IoaW50IG4sIHZvaWQgKmFkZHIpOwoKZXh0ZXJu
IHZvaWQgX19kaWUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqLCBjb25zdCBjaGFyICp3
aGVyZSwKCXVuc2lnbmVkIGxvbmcgbGluZSkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKZXh0
ZXJuIHZvaWQgX19kaWVfaWZfa2VybmVsKGNvbnN0IGNoYXIgKiwgc3RydWN0IHB0X3JlZ3MgKiwg
Y29uc3QgY2hhciAqd2hlcmUsCgl1bnNpZ25lZCBsb25nIGxpbmUpOwoKCgoKCgoKIyAyOCAiL29w
dC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5o
IiAyCgoKc3RydWN0IG1pcHNfY3B1aW5mbyB7Cgl1bnNpZ25lZCBsb25nICpwZ2RfcXVpY2s7Cgl1
bnNpZ25lZCBsb25nICpwdGVfcXVpY2s7Cgl1bnNpZ25lZCBsb25nIHBndGFibGVfY2FjaGVfc3o7
Cn07CgogCgoKCmV4dGVybiB2b2lkICgqY3B1X3dhaXQpKHZvaWQpOwkgCmV4dGVybiB2b2lkIHIz
MDgxX3dhaXQodm9pZCk7CmV4dGVybiB2b2lkIHI0a193YWl0KHZvaWQpOwpleHRlcm4gY2hhciBj
eWNsZWNvdW50ZXJfYXZhaWxhYmxlOwkgCmV4dGVybiBjaGFyIGRlZGljYXRlZF9pdl9hdmFpbGFi
bGU7CSAKZXh0ZXJuIGNoYXIgdmNlX2F2YWlsYWJsZTsJCSAKCmV4dGVybiBzdHJ1Y3QgbWlwc19j
cHVpbmZvIGJvb3RfY3B1X2RhdGE7CmV4dGVybiB1bnNpZ25lZCBpbnQgdmNlZF9jb3VudCwgdmNl
aV9jb3VudDsKCgoKCgoKCgoKIAoKCgoKCgpleHRlcm4gaW50IEVJU0FfYnVzOwoKCgogCgoKCgoK
IApleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpsYXN0X3Rhc2tfdXNlZF9tYXRoOwoKIAoKCgoK
CgoKIAoKCgoKIAoKCgoKCgpzdHJ1Y3QgbWlwc19mcHVfaGFyZF9zdHJ1Y3QgewoJdW5zaWduZWQg
aW50IGZwX3JlZ3NbMzJdOwoJdW5zaWduZWQgaW50IGNvbnRyb2w7Cn0gX19hdHRyaWJ1dGVfXygo
YWxpZ25lZCg4KSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGZwdXJlZ190OwoKIAoK
CnN0cnVjdCBtaXBzX2ZwdV9zb2Z0X3N0cnVjdCB7CglmcHVyZWdfdCAgICAgICAgcmVnc1szMl07
Cgl1bnNpZ25lZCBpbnQgc3I7Cn07Cgp1bmlvbiBtaXBzX2ZwdV91bmlvbiB7CiAgICAgICAgc3Ry
dWN0IG1pcHNfZnB1X2hhcmRfc3RydWN0IGhhcmQ7CiAgICAgICAgc3RydWN0IG1pcHNfZnB1X3Nv
ZnRfc3RydWN0IHNvZnQ7Cn07CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJdW5zaWduZWQgbG9uZyBz
ZWc7Cn0gbW1fc2VnbWVudF90OwoKIAoKCnN0cnVjdCB0aHJlYWRfc3RydWN0IHsKICAgICAgICAg
CiAgICAgICAgdW5zaWduZWQgbG9uZyByZWcxNjsKCXVuc2lnbmVkIGxvbmcgcmVnMTcsIHJlZzE4
LCByZWcxOSwgcmVnMjAsIHJlZzIxLCByZWcyMiwgcmVnMjM7CiAgICAgICAgdW5zaWduZWQgbG9u
ZyByZWcyOSwgcmVnMzAsIHJlZzMxOwoKCSAKCXVuc2lnbmVkIGxvbmcgY3AwX3N0YXR1czsKCgkg
Cgl1bmlvbiBtaXBzX2ZwdV91bmlvbiBmcHU7CgoJIAoJdW5zaWduZWQgbG9uZyBjcDBfYmFkdmFk
ZHI7CSAKCXVuc2lnbmVkIGxvbmcgY3AwX2JhZHVhZGRyOwkgCgl1bnNpZ25lZCBsb25nIGVycm9y
X2NvZGU7Cgl1bnNpZ25lZCBsb25nIHRyYXBfbm87CgoKCgl1bnNpZ25lZCBsb25nIG1mbGFnczsK
CW1tX3NlZ21lbnRfdCBjdXJyZW50X2RzOwoJdW5zaWduZWQgbG9uZyBpcml4X3RyYW1wb2xpbmU7
ICAgCgl1bnNpZ25lZCBsb25nIGlyaXhfb2xkY3R4Owp9OwoKCgoKCgoKIyAxODQgIi9vcHQvY3Jv
c3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIKCgoK
CgoKCiAKCgpleHRlcm4gaW50IGtlcm5lbF90aHJlYWQoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQg
KiBhcmcsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwoKIAoKCgogCgoKZXh0ZXJuIGlubGluZSB1bnNp
Z25lZCBsb25nIHRocmVhZF9zYXZlZF9wYyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCkKewoJZXh0
ZXJuIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTsKCgkgCglpZiAodC0+cmVnMzEgPT0gKHVuc2ln
bmVkIGxvbmcpIHJldF9mcm9tX2ZvcmspCgkJcmV0dXJuIHQtPnJlZzMxOwoKCXJldHVybiAoKHVu
c2lnbmVkIGxvbmcgKil0LT5yZWcyOSlbMTBdOwp9CgogCgoKCgoKCgoKCgp1bnNpZ25lZCBsb25n
IGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwoKCgoKCgogCiAKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgojIDE4ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1s
aW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC93YWl0LmgiIDIKCgogCgoKCgoKCmV4dGVybiBp
bnQgcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3Qg
X193YWl0X3F1ZXVlIHsKCXVuc2lnbmVkIGludCBjb21waWxlcl93YXJuaW5nOwoJc3RydWN0IHRh
c2tfc3RydWN0ICogdGFzazsKCXN0cnVjdCBsaXN0X2hlYWQgdGFza19saXN0OwoKCWxvbmcgX19t
YWdpYzsKCWxvbmcgX193YWtlcjsKCn07CnR5cGVkZWYgc3RydWN0IF9fd2FpdF9xdWV1ZSB3YWl0
X3F1ZXVlX3Q7CgogCgoKCgoKCgoKIyA3NyAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3Jj
L2xpbnV4L2luY2x1ZGUvbGludXgvd2FpdC5oIgoKCgoKCgoKCgoKCgoKc3RydWN0IF9fd2FpdF9x
dWV1ZV9oZWFkIHsKCXNwaW5sb2NrX3QgbG9jazsKCXN0cnVjdCBsaXN0X2hlYWQgdGFza19saXN0
OwoKCWxvbmcgX19tYWdpYzsKCWxvbmcgX19jcmVhdG9yOwoKfTsKdHlwZWRlZiBzdHJ1Y3QgX193
YWl0X3F1ZXVlX2hlYWQgd2FpdF9xdWV1ZV9oZWFkX3Q7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
c3RhdGljIGlubGluZSB2b2lkIGluaXRfd2FpdHF1ZXVlX2hlYWQod2FpdF9xdWV1ZV9oZWFkX3Qg
KnEpCnsKCglpZiAoIXEpCgkJZG8geyBwcmludGsoIndxIGJ1ZywgZm9yY2luZyBvb3BzLlxuIik7
ICooaW50KikwID0gMDsgfSB3aGlsZSAoMCk7CgoJcS0+bG9jayA9IChzcGlubG9ja190KSB7IDAg
fTsKCWRvIHsgKCZxLT50YXNrX2xpc3QpLT5uZXh0ID0gKCZxLT50YXNrX2xpc3QpOyAoJnEtPnRh
c2tfbGlzdCktPnByZXYgPSAoJnEtPnRhc2tfbGlzdCk7IH0gd2hpbGUgKDApOwoKCXEtPl9fbWFn
aWMgPSAobG9uZykmcS0+X19tYWdpYzsKCXEtPl9fY3JlYXRvciA9IChsb25nKSh7IF9fbGFiZWxf
XyBfbDsgX2w6ICYmX2w7fSk7Cgp9CgpzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF93YWl0cXVldWVf
ZW50cnkod2FpdF9xdWV1ZV90ICpxLAoJCQkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKewoKCWlm
ICghcSB8fCAhcCkKCQlkbyB7IHByaW50aygid3EgYnVnLCBmb3JjaW5nIG9vcHMuXG4iKTsgKihp
bnQqKTAgPSAwOyB9IHdoaWxlICgwKTsKCglxLT50YXNrID0gcDsKCglxLT5fX21hZ2ljID0gKGxv
bmcpJnEtPl9fbWFnaWM7Cgp9CgpzdGF0aWMgaW5saW5lIGludCB3YWl0cXVldWVfYWN0aXZlKHdh
aXRfcXVldWVfaGVhZF90ICpxKQp7CgoJaWYgKCFxKQoJCWRvIHsgcHJpbnRrKCJ3cSBidWcsIGZv
cmNpbmcgb29wcy5cbiIpOyAqKGludCopMCA9IDA7IH0gd2hpbGUgKDApOwoJZG8geyBpZiAocS0+
X19tYWdpYyAhPSAobG9uZykmKHEtPl9fbWFnaWMpKSB7IHByaW50aygiYmFkIG1hZ2ljICVseCAo
c2hvdWxkIGJlICVseCwgY3JlYXRvciAlbHgpLCAiLCBxLT5fX21hZ2ljLCAobG9uZykmKHEtPl9f
bWFnaWMpLCBxLT5fX2NyZWF0b3IpOyBkbyB7IHByaW50aygid3EgYnVnLCBmb3JjaW5nIG9vcHMu
XG4iKTsgKihpbnQqKTAgPSAwOyB9IHdoaWxlICgwKTsgfSB9IHdoaWxlICgwKTsKCgoJcmV0dXJu
ICFsaXN0X2VtcHR5KCZxLT50YXNrX2xpc3QpOwp9CgpleHRlcm4gaW5saW5lIHZvaWQgX19hZGRf
d2FpdF9xdWV1ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqaGVhZCwgd2FpdF9xdWV1ZV90ICpuZXcpCnsK
CglpZiAoIWhlYWQgfHwgIW5ldykKCQlkbyB7IHByaW50aygid3EgYnVnLCBmb3JjaW5nIG9vcHMu
XG4iKTsgKihpbnQqKTAgPSAwOyB9IHdoaWxlICgwKTsKCWRvIHsgaWYgKGhlYWQtPl9fbWFnaWMg
IT0gKGxvbmcpJihoZWFkLT5fX21hZ2ljKSkgeyBwcmludGsoImJhZCBtYWdpYyAlbHggKHNob3Vs
ZCBiZSAlbHgsIGNyZWF0b3IgJWx4KSwgIiwgaGVhZC0+X19tYWdpYywgKGxvbmcpJihoZWFkLT5f
X21hZ2ljKSwgaGVhZC0+X19jcmVhdG9yKTsgZG8geyBwcmludGsoIndxIGJ1ZywgZm9yY2luZyBv
b3BzLlxuIik7ICooaW50KikwID0gMDsgfSB3aGlsZSAoMCk7IH0gfSB3aGlsZSAoMCk7CglpZiAo
bmV3LT5fX21hZ2ljICE9IChsb25nKSYobmV3LT5fX21hZ2ljKSkgeyBwcmludGsoImJhZCBtYWdp
YyAlbHggKHNob3VsZCBiZSAlbHgpLCAiLCAobG9uZyluZXctPl9fbWFnaWMsIChsb25nKSYobmV3
LT5fX21hZ2ljKSk7IGRvIHsgcHJpbnRrKCJ3cSBidWcsIGZvcmNpbmcgb29wcy5cbiIpOyAqKGlu
dCopMCA9IDA7IH0gd2hpbGUgKDApOyB9OwoJaWYgKCFoZWFkLT50YXNrX2xpc3QubmV4dCB8fCAh
aGVhZC0+dGFza19saXN0LnByZXYpCgkJZG8geyBwcmludGsoIndxIGJ1ZywgZm9yY2luZyBvb3Bz
LlxuIik7ICooaW50KikwID0gMDsgfSB3aGlsZSAoMCk7CgoJbGlzdF9hZGQoJm5ldy0+dGFza19s
aXN0LCAmaGVhZC0+dGFza19saXN0KTsKfQoKIAoKCmV4dGVybiBpbmxpbmUgdm9pZCBfX2FkZF93
YWl0X3F1ZXVlX3RhaWwod2FpdF9xdWV1ZV9oZWFkX3QgKmhlYWQsCgkJCQkJCXdhaXRfcXVldWVf
dCAqbmV3KQp7CgoJaWYgKCFoZWFkIHx8ICFuZXcpCgkJZG8geyBwcmludGsoIndxIGJ1ZywgZm9y
Y2luZyBvb3BzLlxuIik7ICooaW50KikwID0gMDsgfSB3aGlsZSAoMCk7CglkbyB7IGlmIChoZWFk
LT5fX21hZ2ljICE9IChsb25nKSYoaGVhZC0+X19tYWdpYykpIHsgcHJpbnRrKCJiYWQgbWFnaWMg
JWx4IChzaG91bGQgYmUgJWx4LCBjcmVhdG9yICVseCksICIsIGhlYWQtPl9fbWFnaWMsIChsb25n
KSYoaGVhZC0+X19tYWdpYyksIGhlYWQtPl9fY3JlYXRvcik7IGRvIHsgcHJpbnRrKCJ3cSBidWcs
IGZvcmNpbmcgb29wcy5cbiIpOyAqKGludCopMCA9IDA7IH0gd2hpbGUgKDApOyB9IH0gd2hpbGUg
KDApOwoJaWYgKG5ldy0+X19tYWdpYyAhPSAobG9uZykmKG5ldy0+X19tYWdpYykpIHsgcHJpbnRr
KCJiYWQgbWFnaWMgJWx4IChzaG91bGQgYmUgJWx4KSwgIiwgKGxvbmcpbmV3LT5fX21hZ2ljLCAo
bG9uZykmKG5ldy0+X19tYWdpYykpOyBkbyB7IHByaW50aygid3EgYnVnLCBmb3JjaW5nIG9vcHMu
XG4iKTsgKihpbnQqKTAgPSAwOyB9IHdoaWxlICgwKTsgfTsKCWlmICghaGVhZC0+dGFza19saXN0
Lm5leHQgfHwgIWhlYWQtPnRhc2tfbGlzdC5wcmV2KQoJCWRvIHsgcHJpbnRrKCJ3cSBidWcsIGZv
cmNpbmcgb29wcy5cbiIpOyAqKGludCopMCA9IDA7IH0gd2hpbGUgKDApOwoKCWxpc3RfYWRkKCZu
ZXctPnRhc2tfbGlzdCwgaGVhZC0+dGFza19saXN0LnByZXYpOwp9CgpleHRlcm4gaW5saW5lIHZv
aWQgX19yZW1vdmVfd2FpdF9xdWV1ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqaGVhZCwKCQkJCQkJCXdh
aXRfcXVldWVfdCAqb2xkKQp7CgoJaWYgKCFvbGQpCgkJZG8geyBwcmludGsoIndxIGJ1ZywgZm9y
Y2luZyBvb3BzLlxuIik7ICooaW50KikwID0gMDsgfSB3aGlsZSAoMCk7CglpZiAob2xkLT5fX21h
Z2ljICE9IChsb25nKSYob2xkLT5fX21hZ2ljKSkgeyBwcmludGsoImJhZCBtYWdpYyAlbHggKHNo
b3VsZCBiZSAlbHgpLCAiLCAobG9uZylvbGQtPl9fbWFnaWMsIChsb25nKSYob2xkLT5fX21hZ2lj
KSk7IGRvIHsgcHJpbnRrKCJ3cSBidWcsIGZvcmNpbmcgb29wcy5cbiIpOyAqKGludCopMCA9IDA7
IH0gd2hpbGUgKDApOyB9OwoKCWxpc3RfZGVsKCZvbGQtPnRhc2tfbGlzdCk7Cn0KCgoKCiMgMTIg
Ii9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgi
IDIKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xp
bnV4L3Zmcy5oIiAxCgoKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4
L2luY2x1ZGUvYXNtL3N0YXRmcy5oIiAxCiAKIyAxMCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGlu
dXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3N0YXRmcy5oIgoKCgoKCgoKCgp0eXBlZGVmIF9fa2Vy
bmVsX2ZzaWRfdCAgICAgICAgZnNpZF90OwoKCgpzdHJ1Y3Qgc3RhdGZzIHsKCWxvbmcJCWZfdHlw
ZTsKCglsb25nCQlmX2JzaXplOwoJbG9uZwkJZl9mcnNpemU7CSAKCWxvbmcJCWZfYmxvY2tzOwoJ
bG9uZwkJZl9iZnJlZTsKCWxvbmcJCWZfZmlsZXM7Cglsb25nCQlmX2ZmcmVlOwoKCSAKCWxvbmcJ
Zl9iYXZhaWw7CglfX2tlcm5lbF9mc2lkX3QJZl9mc2lkOwoJbG9uZwkJZl9uYW1lbGVuOwoJbG9u
ZwkJZl9zcGFyZVs2XTsKfTsKCgojIDQgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9s
aW51eC9pbmNsdWRlL2xpbnV4L3Zmcy5oIiAyCgoKCiMgMTQgIi9vcHQvY3Jvc3NkZXYvbWlwc2Vs
LWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rl
di9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbmV0LmgiIDEKIAojIDE4ICIv
b3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9uZXQuaCIK
CgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51
eC9zb2NrZXQuaCIgMQoKCgoKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xp
bnV4L2luY2x1ZGUvYXNtL3NvY2tldC5oIiAxCiAKCgoKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlw
c2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9zb2NraW9zLmgiIDEKIAojIDEwICIvb3B0
L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vc29ja2lvcy5oIgoK
CgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9p
b2N0bC5oIiAxCiAKIyAxMCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2lu
Y2x1ZGUvYXNtL2lvY3RsLmgiCgoKCiAKIyAyNiAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgv
c3JjL2xpbnV4L2luY2x1ZGUvYXNtL2lvY3RsLmgiCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoK
CgoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgogCgoKCgoKCgoKIyAxMyAiL29wdC9j
cm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3NvY2tpb3MuaCIgMgoK
CiAKCgoKCgoKCgoKCiMgNyAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2lu
Y2x1ZGUvYXNtL3NvY2tldC5oIiAyCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKIyA2ICIvb3B0L2Nyb3Nz
ZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zb2NrZXQuaCIgMgoKIyAx
ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zb2Nr
aW9zLmgiIDEKIAojIDE4ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5j
bHVkZS9saW51eC9zb2NraW9zLmgiCgoKCgoKIAoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgkJICAgICAKCgoKCiAKCgoKCiAKCgoKCiAKCgoK
CiAKCiAKCgoKCgogCgoKIAoKCiAKCgojIDcgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3Ny
Yy9saW51eC9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlw
c2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Vpby5oIiAxCgoKCgoKIAoKCgoKCgoK
CgogCgoKc3RydWN0IGlvdmVjCnsKCXZvaWQgKmlvdl9iYXNlOwkJIAoJX19rZXJuZWxfc2l6ZV90
IGlvdl9sZW47ICAKfTsKCiAKCgogCgoKCgoKCgoKCiMgOCAiL29wdC9jcm9zc2Rldi9taXBzZWwt
bGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc29ja2V0LmgiIDIKCgoKdHlwZWRlZiB1bnNp
Z25lZCBzaG9ydAlzYV9mYW1pbHlfdDsKCiAKCgogCnN0cnVjdCBzb2NrYWRkciB7CglzYV9mYW1p
bHlfdAlzYV9mYW1pbHk7CSAKCWNoYXIJCXNhX2RhdGFbMTRdOwkgCn07CgpzdHJ1Y3QgbGluZ2Vy
IHsKCWludAkJbF9vbm9mZjsJIAoJaW50CQlsX2xpbmdlcjsJIAp9OwoKIAoKCgoKIApzdHJ1Y3Qg
bXNnaGRyIHsKCXZvaWQJKgltc2dfbmFtZTsJIAoJaW50CQltc2dfbmFtZWxlbjsJIAoJc3RydWN0
IGlvdmVjICoJbXNnX2lvdjsJIAoJX19rZXJuZWxfc2l6ZV90CW1zZ19pb3ZsZW47CSAKCXZvaWQg
CSoJbXNnX2NvbnRyb2w7CSAKCV9fa2VybmVsX3NpemVfdAltc2dfY29udHJvbGxlbjsJIAoJdW5z
aWduZWQJbXNnX2ZsYWdzOwp9OwoKIAoKCgoKCnN0cnVjdCBjbXNnaGRyIHsKCV9fa2VybmVsX3Np
emVfdAljbXNnX2xlbjsJIAogICAgICAgIGludAkJY21zZ19sZXZlbDsJIAogICAgICAgIGludAkJ
Y21zZ190eXBlOwkgCn07CgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgogCgoKCgoKCgoKCgoKIAoj
IDEwMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv
c29ja2V0LmgiCiAKZXh0ZXJuIF9faW5saW5lX18gc3RydWN0IGNtc2doZHIgKiBfX2Ntc2dfbnh0
aGRyKHZvaWQgKl9fY3RsLCBfX2tlcm5lbF9zaXplX3QgX19zaXplLAoJCQkJCSAgICAgICBzdHJ1
Y3QgY21zZ2hkciAqX19jbXNnKQp7CglzdHJ1Y3QgY21zZ2hkciAqIF9fcHRyOwoKCV9fcHRyID0g
KHN0cnVjdCBjbXNnaGRyKikoKCh1bnNpZ25lZCBjaGFyICopIF9fY21zZykgKyAgKCAoKF9fY21z
Zy0+Y21zZ19sZW4pK3NpemVvZihsb25nKS0xKSAmIH4oc2l6ZW9mKGxvbmcpLTEpICkpOwoJaWYg
KCh1bnNpZ25lZCBsb25nKSgoY2hhciopKF9fcHRyKzEpIC0gKGNoYXIgKikgX19jdGwpID4gX19z
aXplKQoJCXJldHVybiAoc3RydWN0IGNtc2doZHIgKikwOwoKCXJldHVybiBfX3B0cjsKfQoKZXh0
ZXJuIF9faW5saW5lX18gc3RydWN0IGNtc2doZHIgKiBjbXNnX254dGhkciAoc3RydWN0IG1zZ2hk
ciAqX19tc2csIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2cpCnsKCXJldHVybiBfX2Ntc2dfbnh0aGRy
KF9fbXNnLT5tc2dfY29udHJvbCwgX19tc2ctPm1zZ19jb250cm9sbGVuLCBfX2Ntc2cpOwp9Cgog
CgoKCgoKc3RydWN0IHVjcmVkIHsKCV9fdTMyCXBpZDsKCV9fdTMyCXVpZDsKCV9fdTMyCWdpZDsK
fTsKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKZXh0ZXJuIGludCBtZW1jcHlfZnJvbWlvdmVjKHVuc2lnbmVkIGNoYXIgKmtkYXRhLCBz
dHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGxlbik7CmV4dGVybiBpbnQgbWVtY3B5X2Zyb21pb3ZlY2Vu
ZCh1bnNpZ25lZCBjaGFyICprZGF0YSwgc3RydWN0IGlvdmVjICppb3YsIAoJCQkJaW50IG9mZnNl
dCwgaW50IGxlbik7CmV4dGVybiBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbWlvdmVjZW5kKHVu
c2lnbmVkIGNoYXIgKmtkYXRhLCAKCQkJCQkgIHN0cnVjdCBpb3ZlYyAqaW92LCAKCQkJCQkgIGlu
dCBvZmZzZXQsIAoJCQkJCSAgdW5zaWduZWQgaW50IGxlbiwgaW50ICpjc3VtcCk7CgpleHRlcm4g
aW50IHZlcmlmeV9pb3ZlYyhzdHJ1Y3QgbXNnaGRyICptLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgY2hh
ciAqYWRkcmVzcywgaW50IG1vZGUpOwpleHRlcm4gaW50IG1lbWNweV90b2lvdmVjKHN0cnVjdCBp
b3ZlYyAqdiwgdW5zaWduZWQgY2hhciAqa2RhdGEsIGludCBsZW4pOwpleHRlcm4gdm9pZCBtZW1j
cHlfdG9rZXJuZWxpb3ZlYyhzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgY2hhciAqa2RhdGEs
IGludCBsZW4pOwpleHRlcm4gaW50IG1vdmVfYWRkcl90b191c2VyKHZvaWQgKmthZGRyLCBpbnQg
a2xlbiwgdm9pZCAqdWFkZHIsIGludCAqdWxlbik7CmV4dGVybiBpbnQgbW92ZV9hZGRyX3RvX2tl
cm5lbCh2b2lkICp1YWRkciwgaW50IHVsZW4sIHZvaWQgKmthZGRyKTsKZXh0ZXJuIGludCBwdXRf
Y21zZyhzdHJ1Y3QgbXNnaGRyKiwgaW50IGxldmVsLCBpbnQgdHlwZSwgaW50IGxlbiwgdm9pZCAq
ZGF0YSk7CgoKCiMgMjEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNs
dWRlL2xpbnV4L25ldC5oIiAyCgoKCnN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdDsKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgp0eXBlZGVmIGVudW0gewogIFNTX0ZSRUUgPSAwLAkJCQkgCiAgU1NfVU5D
T05ORUNURUQsCQkJIAogIFNTX0NPTk5FQ1RJTkcsCQkJIAogIFNTX0NPTk5FQ1RFRCwJCQkJIAog
IFNTX0RJU0NPTk5FQ1RJTkcJCQkgCn0gc29ja2V0X3N0YXRlOwoKCgoKCgoKc3RydWN0IHNvY2tl
dAp7Cglzb2NrZXRfc3RhdGUJCXN0YXRlOwoKCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwoJc3RydWN0
IHByb3RvX29wcwkqb3BzOwoJc3RydWN0IGlub2RlCQkqaW5vZGU7CglzdHJ1Y3QgZmFzeW5jX3N0
cnVjdAkqZmFzeW5jX2xpc3Q7CSAKCXN0cnVjdCBmaWxlCQkqZmlsZTsJCSAKCXN0cnVjdCBzb2Nr
CQkqc2s7Cgl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OwoKCXNob3J0CQkJdHlwZTsKCXVuc2lnbmVk
IGNoYXIJCXBhc3NjcmVkOwp9OwoKCgpzdHJ1Y3Qgc2NtX2Nvb2tpZTsKc3RydWN0IHZtX2FyZWFf
c3RydWN0OwoKc3RydWN0IHByb3RvX29wcyB7CiAgaW50CWZhbWlseTsKCiAgaW50CSgqcmVsZWFz
ZSkJKHN0cnVjdCBzb2NrZXQgKnNvY2spOwogIGludAkoKmJpbmQpCQkoc3RydWN0IHNvY2tldCAq
c29jaywgc3RydWN0IHNvY2thZGRyICp1bXlhZGRyLAoJCQkgaW50IHNvY2thZGRyX2xlbik7CiAg
aW50CSgqY29ubmVjdCkJKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdXNl
cnZhZGRyLAoJCQkgaW50IHNvY2thZGRyX2xlbiwgaW50IGZsYWdzKTsKICBpbnQJKCpzb2NrZXRw
YWlyKQkoc3RydWN0IHNvY2tldCAqc29jazEsIHN0cnVjdCBzb2NrZXQgKnNvY2syKTsKICBpbnQJ
KCphY2NlcHQpCShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLAoJ
CQkgaW50IGZsYWdzKTsKICBpbnQJKCpnZXRuYW1lKQkoc3RydWN0IHNvY2tldCAqc29jaywgc3Ry
dWN0IHNvY2thZGRyICp1YWRkciwKCQkJIGludCAqdXNvY2thZGRyX2xlbiwgaW50IHBlZXIpOwog
IHVuc2lnbmVkIGludCAoKnBvbGwpCShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAq
c29jaywgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KTsKICBpbnQJKCppb2N0bCkJKHN0
cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsCgkJCSB1bnNpZ25lZCBsb25nIGFy
Zyk7CiAgaW50CSgqbGlzdGVuKQkoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxlbik7CiAgaW50
CSgqc2h1dGRvd24pCShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgZmxhZ3MpOwogIGludAkoKnNl
dHNvY2tvcHQpCShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAoJ
CQkgY2hhciAqb3B0dmFsLCBpbnQgb3B0bGVuKTsKICBpbnQJKCpnZXRzb2Nrb3B0KQkoc3RydWN0
IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKCQkJIGNoYXIgKm9wdHZhbCwg
aW50ICpvcHRsZW4pOwogIGludAkoKmZjbnRsKQkoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWdu
ZWQgaW50IGNtZCwKCQkJIHVuc2lnbmVkIGxvbmcgYXJnKTsJCiAgaW50ICAgKCpzZW5kbXNnKQko
c3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgaW50IHRvdGFsX2xlbiwgc3Ry
dWN0IHNjbV9jb29raWUgKnNjbSk7CiAgaW50ICAgKCpyZWN2bXNnKQkoc3RydWN0IHNvY2tldCAq
c29jaywgc3RydWN0IG1zZ2hkciAqbSwgaW50IHRvdGFsX2xlbiwgaW50IGZsYWdzLCBzdHJ1Y3Qg
c2NtX2Nvb2tpZSAqc2NtKTsKICBpbnQJKCptbWFwKQkJKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1
Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpOwp9OwoKc3RydWN0
IG5ldF9wcm90b19mYW1pbHkgCnsKCWludAlmYW1pbHk7CglpbnQJKCpjcmVhdGUpKHN0cnVjdCBz
b2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCk7CgkgCgoJc2hvcnQJYXV0aGVudGljYXRpb247Cglz
aG9ydAllbmNyeXB0aW9uOwoJc2hvcnQJZW5jcnlwdF9uZXQ7Cn07CgpzdHJ1Y3QgbmV0X3Byb3Rv
IAp7Cgljb25zdCBjaGFyICpuYW1lOwkJIAoJdm9pZCAoKmluaXRfZnVuYykoc3RydWN0IG5ldF9w
cm90byAqKTsJIAp9OwoKZXh0ZXJuIGludAlzb2NrX3dha2VfYXN5bmMoc3RydWN0IHNvY2tldCAq
c2ssIGludCBob3csIGludCBiYW5kKTsKZXh0ZXJuIGludAlzb2NrX3JlZ2lzdGVyKHN0cnVjdCBu
ZXRfcHJvdG9fZmFtaWx5ICpmYW0pOwpleHRlcm4gaW50CXNvY2tfdW5yZWdpc3RlcihpbnQgZmFt
aWx5KTsKZXh0ZXJuIHN0cnVjdCBzb2NrZXQgKnNvY2tfYWxsb2Modm9pZCk7CmV4dGVybiBpbnQJ
c29ja19jcmVhdGUoaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90bywgc3RydWN0IHNvY2tl
dCAqKik7CmV4dGVybiB2b2lkCXNvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICopOwpleHRlcm4g
aW50ICAgCXNvY2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBtc2doZHIgKm0sIGlu
dCBsZW4pOwpleHRlcm4gaW50CXNvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBt
c2doZHIgKm0sIGludCBsZW4sIGludCBmbGFncyk7CmV4dGVybiBpbnQJc29ja19yZWFkdl93cml0
ZXYoaW50IHR5cGUsIHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCgkJ
CQkgIGNvbnN0IHN0cnVjdCBpb3ZlYyAqIGlvdiwgbG9uZyBjb3VudCwgbG9uZyBzaXplKTsKCmV4
dGVybiBpbnQJbmV0X3JhdGVsaW1pdCh2b2lkKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmV0X3Jh
bmRvbSh2b2lkKTsKZXh0ZXJuIHZvaWQgbmV0X3NyYW5kb20odW5zaWduZWQgbG9uZyk7CgoKCgoK
IyAyMjUgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4
L25ldC5oIgoKCgoKIyAxNSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2lu
Y2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMv
bGludXgvaW5jbHVkZS9saW51eC9rZGV2X3QuaCIgMQoKCgogCiMgNTkgIi9vcHQvY3Jvc3NkZXYv
bWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2tkZXZfdC5oIgoKIAoKCgoKCgp0
eXBlZGVmIHVuc2lnbmVkIHNob3J0IGtkZXZfdDsKCgoKCgoKCgpleHRlcm4gY29uc3QgY2hhciAq
IGtkZXZuYW1lKGtkZXZfdCk7CSAKCiAKCgoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtk
ZXZfdF90b19ucihrZGV2X3QgZGV2KSB7CglyZXR1cm4gKCgodW5zaWduZWQgaW50KSAoKGRldikg
Pj4gOCkpPDw4KSB8ICgodW5zaWduZWQgaW50KSAoKGRldikgJiAoKDFVIDw8IDgpIC0gMSkpKTsK
fQoKc3RhdGljIGlubGluZSBrZGV2X3QgdG9fa2Rldl90KGludCBkZXYpCnsKCWludCBtYWpvciwg
bWlub3I7CgoKCgoKCgoKCW1ham9yID0gKGRldiA+PiA4KTsKCW1pbm9yID0gKGRldiAmIDB4ZmYp
OwoKCXJldHVybiAoKChtYWpvcikgPDwgOCkgfCAoIG1pbm9yKSk7Cn0KCgojIDExNCAiL29wdC9j
cm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgva2Rldl90LmgiCgoj
IDE2ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9m
cy5oIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRl
L2xpbnV4L2lvY3RsLmgiIDEKCgoKCgoKCiMgMTcgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4
L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlw
c2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIiAxCgoKCgoKIAoKCgoK
CgoKCgoKIAoKCgpzdHJ1Y3QgcXN0ciB7Cgljb25zdCB1bnNpZ25lZCBjaGFyICogbmFtZTsKCXVu
c2lnbmVkIGludCBsZW47Cgl1bnNpZ25lZCBpbnQgaGFzaDsKfTsKCiAKCgogCnN0YXRpYyBfX2lu
bGluZV9fIHVuc2lnbmVkIGxvbmcgcGFydGlhbF9uYW1lX2hhc2godW5zaWduZWQgbG9uZyBjLCB1
bnNpZ25lZCBsb25nIHByZXZoYXNoKQp7CglwcmV2aGFzaCA9IChwcmV2aGFzaCA8PCA0KSB8IChw
cmV2aGFzaCA+PiAoOCpzaXplb2YodW5zaWduZWQgbG9uZyktNCkpOwoJcmV0dXJuIHByZXZoYXNo
IF4gYzsKfQoKIApzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGVuZF9uYW1lX2hhc2go
dW5zaWduZWQgbG9uZyBoYXNoKQp7CglpZiAoc2l6ZW9mKGhhc2gpID4gc2l6ZW9mKHVuc2lnbmVk
IGludCkpCgkJaGFzaCArPSBoYXNoID4+IDQqc2l6ZW9mKGhhc2gpOwoJcmV0dXJuICh1bnNpZ25l
ZCBpbnQpIGhhc2g7Cn0KCiAKc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGZ1bGxfbmFt
ZV9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBuYW1lLCB1bnNpZ25lZCBpbnQgbGVuKQp7Cgl1
bnNpZ25lZCBsb25nIGhhc2ggPSAwOwoJd2hpbGUgKGxlbi0tKQoJCWhhc2ggPSBwYXJ0aWFsX25h
bWVfaGFzaCgqbmFtZSsrLCBoYXNoKTsKCXJldHVybiBlbmRfbmFtZV9oYXNoKGhhc2gpOwp9CgoK
CnN0cnVjdCBkZW50cnkgewoJaW50IGRfY291bnQ7Cgl1bnNpZ25lZCBpbnQgZF9mbGFnczsKCXN0
cnVjdCBpbm9kZSAgKiBkX2lub2RlOwkgCglzdHJ1Y3QgZGVudHJ5ICogZF9wYXJlbnQ7CSAKCXN0
cnVjdCBkZW50cnkgKiBkX21vdW50czsJIAoJc3RydWN0IGRlbnRyeSAqIGRfY292ZXJzOwoJc3Ry
dWN0IGxpc3RfaGVhZCBkX2hhc2g7CSAKCXN0cnVjdCBsaXN0X2hlYWQgZF9scnU7CQkgCglzdHJ1
Y3QgbGlzdF9oZWFkIGRfY2hpbGQ7CSAKCXN0cnVjdCBsaXN0X2hlYWQgZF9zdWJkaXJzOwkgCglz
dHJ1Y3QgbGlzdF9oZWFkIGRfYWxpYXM7CSAKCXN0cnVjdCBxc3RyIGRfbmFtZTsKCXVuc2lnbmVk
IGxvbmcgZF90aW1lOwkJIAoJc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICAqZF9vcDsKCXN0cnVj
dCBzdXBlcl9ibG9jayAqIGRfc2I7CSAKCXVuc2lnbmVkIGxvbmcgZF9yZWZ0aW1lOwkgCgl2b2lk
ICogZF9mc2RhdGE7CQkgCgl1bnNpZ25lZCBjaGFyIGRfaW5hbWVbMTZdOyAgCn07CgpzdHJ1Y3Qg
ZGVudHJ5X29wZXJhdGlvbnMgewoJaW50ICgqZF9yZXZhbGlkYXRlKShzdHJ1Y3QgZGVudHJ5ICos
IGludCk7CglpbnQgKCpkX2hhc2gpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOwoJ
aW50ICgqZF9jb21wYXJlKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3Qg
cXN0ciAqKTsKCXZvaWQgKCpkX2RlbGV0ZSkoc3RydWN0IGRlbnRyeSAqKTsKCXZvaWQgKCpkX3Jl
bGVhc2UpKHN0cnVjdCBkZW50cnkgKik7Cgl2b2lkICgqZF9pcHV0KShzdHJ1Y3QgZGVudHJ5ICos
IHN0cnVjdCBpbm9kZSAqKTsKfTsKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCiAKIyAxMjEgIi9v
cHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2RjYWNoZS5o
IgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRfZHJvcChzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KQp7
CglsaXN0X2RlbCgmZGVudHJ5LT5kX2hhc2gpOwoJZG8geyAoJmRlbnRyeS0+ZF9oYXNoKS0+bmV4
dCA9ICgmZGVudHJ5LT5kX2hhc2gpOyAoJmRlbnRyeS0+ZF9oYXNoKS0+cHJldiA9ICgmZGVudHJ5
LT5kX2hhc2gpOyB9IHdoaWxlICgwKTsKfQoKc3RhdGljIF9faW5saW5lX18gaW50IGRuYW1lX2V4
dGVybmFsKHN0cnVjdCBkZW50cnkgKmQpCnsKCXJldHVybiBkLT5kX25hbWUubmFtZSAhPSBkLT5k
X2luYW1lOyAKfQoKIAoKCmV4dGVybiB2b2lkIGRfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAq
LCBzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIGRfZGVsZXRlKHN0cnVjdCBkZW50cnkgKik7
CgogCmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvYyhzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0
IHN0cnVjdCBxc3RyICopOwpleHRlcm4gdm9pZCBzaHJpbmtfZGNhY2hlX3NiKHN0cnVjdCBzdXBl
cl9ibG9jayAqKTsKZXh0ZXJuIHZvaWQgc2hyaW5rX2RjYWNoZV9wYXJlbnQoc3RydWN0IGRlbnRy
eSAqKTsKZXh0ZXJuIGludCBkX2ludmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqKTsKCgpzdHJ1Y3Qg
em9uZV9zdHJ1Y3Q7CiAKZXh0ZXJuIGludCBzaHJpbmtfZGNhY2hlX21lbW9yeShpbnQsIHVuc2ln
bmVkIGludCwgc3RydWN0IHpvbmVfc3RydWN0ICopOwpleHRlcm4gdm9pZCBwcnVuZV9kY2FjaGUo
aW50KTsKCiAKZXh0ZXJuIGludCBzaHJpbmtfaWNhY2hlX21lbW9yeShpbnQsIGludCwgc3RydWN0
IHpvbmVfc3RydWN0ICopOwpleHRlcm4gdm9pZCBwcnVuZV9pY2FjaGUoaW50KTsKCiAKZXh0ZXJu
IHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jX3Jvb3Qoc3RydWN0IGlub2RlICopOwoKIApleHRlcm4g
aW50IGlzX3Jvb3RfYnVzeShzdHJ1Y3QgZGVudHJ5ICopOwoKIApleHRlcm4gaW50IGhhdmVfc3Vi
bW91bnRzKHN0cnVjdCBkZW50cnkgKik7CgogCgoKZXh0ZXJuIHZvaWQgZF9yZWhhc2goc3RydWN0
IGRlbnRyeSAqKTsKIAoKCgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRfYWRkKHN0cnVjdCBkZW50
cnkgKiBlbnRyeSwgc3RydWN0IGlub2RlICogaW5vZGUpCnsKCWRfcmVoYXNoKGVudHJ5KTsKCWRf
aW5zdGFudGlhdGUoZW50cnksIGlub2RlKTsKfQoKIApleHRlcm4gdm9pZCBkX21vdmUoc3RydWN0
IGRlbnRyeSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwoKIApleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRf
bG9va3VwKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CgogCmV4dGVybiBpbnQgZF92
YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBkZW50cnkgKiwgdW5zaWduZWQgaW50LCB1
bnNpZ25lZCBpbnQpOwoKIApleHRlcm4gY2hhciAqIGRfcGF0aChzdHJ1Y3QgZGVudHJ5ICosIGNo
YXIgKiwgaW50KTsKCiAKc3RhdGljIF9faW5saW5lX18gc3RydWN0IGRlbnRyeSAqIGRnZXQoc3Ry
dWN0IGRlbnRyeSAqZGVudHJ5KQp7CglpZiAoZGVudHJ5KQoJCWRlbnRyeS0+ZF9jb3VudCsrOwoJ
cmV0dXJuIGRlbnRyeTsKfQoKc3RhdGljIF9faW5saW5lX18gaW50IGRfdW5oYXNoZWQoc3RydWN0
IGRlbnRyeSAqZGVudHJ5KQp7CglyZXR1cm4gbGlzdF9lbXB0eSgmZGVudHJ5LT5kX2hhc2gpOwp9
CgpleHRlcm4gdm9pZCBkcHV0KHN0cnVjdCBkZW50cnkgKik7CgoKCgojIDE5ICIvb3B0L2Nyb3Nz
ZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9v
cHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3N0YXQuaCIg
MQoKCgoKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUv
YXNtL3N0YXQuaCIgMQoKCgoKCnN0cnVjdCBfX29sZF9rZXJuZWxfc3RhdCB7Cgl1bnNpZ25lZCBp
bnQJc3RfZGV2OwoJdW5zaWduZWQgaW50CXN0X2lubzsKCXVuc2lnbmVkIGludAlzdF9tb2RlOwoJ
dW5zaWduZWQgaW50CXN0X25saW5rOwoJdW5zaWduZWQgaW50CXN0X3VpZDsKCXVuc2lnbmVkIGlu
dAlzdF9naWQ7Cgl1bnNpZ25lZCBpbnQJc3RfcmRldjsKCWxvbmcJCXN0X3NpemU7Cgl1bnNpZ25l
ZCBpbnQJc3RfYXRpbWUsIHN0X3JlczE7Cgl1bnNpZ25lZCBpbnQJc3RfbXRpbWUsIHN0X3JlczI7
Cgl1bnNpZ25lZCBpbnQJc3RfY3RpbWUsIHN0X3JlczM7Cgl1bnNpZ25lZCBpbnQJc3RfYmxrc2l6
ZTsKCWludAkJc3RfYmxvY2tzOwoJdW5zaWduZWQgaW50CXN0X2ZsYWdzOwoJdW5zaWduZWQgaW50
CXN0X2dlbjsKfTsKCnN0cnVjdCBzdGF0IHsKCWRldl90CQlzdF9kZXY7Cglsb25nCQlzdF9wYWQx
WzNdOwkJIAoJaW5vX3QJCXN0X2lubzsKCW1vZGVfdAkJc3RfbW9kZTsKCW5saW5rX3QJCXN0X25s
aW5rOwoJdWlkX3QJCXN0X3VpZDsKCWdpZF90CQlzdF9naWQ7CglkZXZfdAkJc3RfcmRldjsKCWxv
bmcJCXN0X3BhZDJbMl07CglvZmZfdAkJc3Rfc2l6ZTsKCWxvbmcJCXN0X3BhZDM7CgkgCgoKCgl0
aW1lX3QJCXN0X2F0aW1lOwoJbG9uZwkJcmVzZXJ2ZWQwOwoJdGltZV90CQlzdF9tdGltZTsKCWxv
bmcJCXJlc2VydmVkMTsKCXRpbWVfdAkJc3RfY3RpbWU7Cglsb25nCQlyZXNlcnZlZDI7Cglsb25n
CQlzdF9ibGtzaXplOwoJbG9uZwkJc3RfYmxvY2tzOwoJY2hhcgkJc3RfZnN0eXBlWzE2XTsJIAoJ
bG9uZwkJc3RfcGFkNFs4XTsKCSAKCXVuc2lnbmVkIGludAlzdF9mbGFnczsKCXVuc2lnbmVkIGlu
dAlzdF9nZW47Cn07CgogCgoKCgpzdHJ1Y3Qgc3RhdDY0IHsKCXVuc2lnbmVkIGxvbmcJc3RfZGV2
OwoJdW5zaWduZWQgY2hhcglfX3BhZDBbOF07CgoJdW5zaWduZWQgbG9uZwlzdF9pbm87Cgl1bnNp
Z25lZCBpbnQJc3RfbW9kZTsKCXVuc2lnbmVkIGludAlzdF9ubGluazsKCgl1bnNpZ25lZCBsb25n
CXN0X3VpZDsKCXVuc2lnbmVkIGxvbmcJc3RfZ2lkOwoKCXVuc2lnbmVkIHNob3J0CXN0X3JkZXY7
Cgl1bnNpZ25lZCBjaGFyCV9fcGFkM1sxMF07CgoJbG9uZyBsb25nCXN0X3NpemU7Cgl1bnNpZ25l
ZCBsb25nCXN0X2Jsa3NpemU7CgoJdW5zaWduZWQgbG9uZwlzdF9ibG9ja3M7CSAKCXVuc2lnbmVk
IGxvbmcJX19wYWQ0OwkJIAoKCXVuc2lnbmVkIGxvbmcJc3RfYXRpbWU7Cgl1bnNpZ25lZCBsb25n
CV9fcGFkNTsKCgl1bnNpZ25lZCBsb25nCXN0X210aW1lOwoJdW5zaWduZWQgbG9uZwlfX3BhZDY7
CgoJdW5zaWduZWQgbG9uZwlzdF9jdGltZTsKCXVuc2lnbmVkIGxvbmcJX19wYWQ3OwkJIAoKCXVu
c2lnbmVkIGxvbmcJX191bnVzZWQxOwoJdW5zaWduZWQgbG9uZwlfX3VudXNlZDI7Cn07CgojIDYg
Ii9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3N0YXQu
aCIgMgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IyAyMCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv
ZnMuaCIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVk
ZS9saW51eC9jYWNoZS5oIiAxCgoKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3Jj
L2xpbnV4L2luY2x1ZGUvYXNtL2NhY2hlLmgiIDEKIAojIDEwICIvb3B0L2Nyb3NzZGV2L21pcHNl
bC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vY2FjaGUuaCIKCgoKCgoKCgoKCgoKCgojIDQg
Ii9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NhY2hl
LmgiIDIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjEgIi9vcHQvY3Jvc3NkZXYvbWlwc2Vs
LWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCgojIDEgIi9vcHQvY3Jvc3Nk
ZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIiAxCgoKCgoK
CgoKCgpleHRlcm4gY2hhciAqIF9fX3N0cnRvazsKZXh0ZXJuIGNoYXIgKiBzdHJjcHkoY2hhciAq
LGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICogc3RybmNweShjaGFyICosY29uc3QgY2hhciAq
LCBfX2tlcm5lbF9zaXplX3QpOwpleHRlcm4gY2hhciAqIHN0cmNhdChjaGFyICosIGNvbnN0IGNo
YXIgKik7CmV4dGVybiBjaGFyICogc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgX19rZXJu
ZWxfc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKiBzdHJjaHIoY29uc3QgY2hhciAqLGludCk7CmV4dGVy
biBjaGFyICogc3RycmNocihjb25zdCBjaGFyICosaW50KTsKZXh0ZXJuIGNoYXIgKiBzdHJwYnJr
KGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqIHN0cnRvayhjaGFyICos
Y29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKiBzdHJzZXAoY2hhciAqKixjb25zdCBjaGFyICop
OwpleHRlcm4gY2hhciAqIHN0cnN0cihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKZXh0ZXJu
IF9fa2VybmVsX3NpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqKTsKZXh0ZXJuIF9fa2VybmVsX3Np
emVfdCBzdHJubGVuKGNvbnN0IGNoYXIgKixfX2tlcm5lbF9zaXplX3QpOwpleHRlcm4gX19rZXJu
ZWxfc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBz
dHJjbXAoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgc3RybmNtcChjb25z
dCBjaGFyICosY29uc3QgY2hhciAqLF9fa2VybmVsX3NpemVfdCk7CmV4dGVybiBpbnQgc3Rybmlj
bXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIF9fa2VybmVsX3NpemVfdCk7CgpleHRlcm4g
dm9pZCAqIG1lbXNldCh2b2lkICosaW50LF9fa2VybmVsX3NpemVfdCk7CmV4dGVybiB2b2lkICog
bWVtY3B5KHZvaWQgKixjb25zdCB2b2lkICosX19rZXJuZWxfc2l6ZV90KTsKZXh0ZXJuIHZvaWQg
KiBtZW1tb3ZlKHZvaWQgKixjb25zdCB2b2lkICosX19rZXJuZWxfc2l6ZV90KTsKZXh0ZXJuIHZv
aWQgKiBtZW1zY2FuKHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKZXh0ZXJuIGludCBtZW1j
bXAoY29uc3Qgdm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOwoKIAoKCiMgMSAi
L29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3N0cmluZy5o
IiAxCiAKCgoKCgoKCgoKCgoKCmV4dGVybiBfX2lubGluZV9fIGNoYXIgKnN0cmNweShjaGFyICpf
X2Rlc3QsIF9fY29uc3RfXyBjaGFyICpfX3NyYykKewogIGNoYXIgKl9feGRlc3QgPSBfX2Rlc3Q7
CgogIF9fYXNtX18gX192b2xhdGlsZV9fKAoJIi5zZXRcdG5vcmVvcmRlclxuXHQiCgkiLnNldFx0
bm9hdFxuIgoJIjE6XHRsYnVcdCQxLCglMSlcblx0IgoJImFkZGl1XHQlMSwxXG5cdCIKCSJzYlx0
JDEsKCUwKVxuXHQiCgkiYm5lelx0JDEsMWJcblx0IgoJImFkZGl1XHQlMCwxXG5cdCIKCSIuc2V0
XHRhdFxuXHQiCgkiLnNldFx0cmVvcmRlciIKCTogIj1yIiAoX19kZXN0KSwgIj1yIiAoX19zcmMp
CiAgICAgICAgOiAiMCIgKF9fZGVzdCksICIxIiAoX19zcmMpCgk6ICIkMSIsIm1lbW9yeSIpOwoK
ICByZXR1cm4gX194ZGVzdDsKfQoKCmV4dGVybiBfX2lubGluZV9fIGNoYXIgKnN0cm5jcHkoY2hh
ciAqX19kZXN0LCBfX2NvbnN0X18gY2hhciAqX19zcmMsIHNpemVfdCBfX24pCnsKICBjaGFyICpf
X3hkZXN0ID0gX19kZXN0OwoKICBpZiAoX19uID09IDApCiAgICByZXR1cm4gX194ZGVzdDsKCiAg
X19hc21fXyBfX3ZvbGF0aWxlX18oCgkiLnNldFx0bm9yZW9yZGVyXG5cdCIKCSIuc2V0XHRub2F0
XG4iCgkiMTpcdGxidVx0JDEsKCUxKVxuXHQiCgkic3VidVx0JTIsMVxuXHQiCgkic2JcdCQxLCgl
MClcblx0IgoJImJlcXpcdCQxLDJmXG5cdCIKCSJhZGRpdVx0JTAsMVxuXHQiCgkiYm5lelx0JTIs
MWJcblx0IgoJImFkZGl1XHQlMSwxXG4iCgkiMjpcblx0IgoJIi5zZXRcdGF0XG5cdCIKCSIuc2V0
XHRyZW9yZGVyIgogICAgICAgIDogIj1yIiAoX19kZXN0KSwgIj1yIiAoX19zcmMpLCAiPXIiIChf
X24pCiAgICAgICAgOiAiMCIgKF9fZGVzdCksICIxIiAoX19zcmMpLCAiMiIgKF9fbikKICAgICAg
ICA6ICIkMSIsIm1lbW9yeSIpOwoKICByZXR1cm4gX19kZXN0Owp9CgoKZXh0ZXJuIF9faW5saW5l
X18gaW50IHN0cmNtcChfX2NvbnN0X18gY2hhciAqX19jcywgX19jb25zdF9fIGNoYXIgKl9fY3Qp
CnsKICBpbnQgX19yZXM7CgogIF9fYXNtX18gX192b2xhdGlsZV9fKAoJIi5zZXRcdG5vcmVvcmRl
clxuXHQiCgkiLnNldFx0bm9hdFxuXHQiCgkibGJ1XHQlMiwoJTApXG4iCgkiMTpcdGxidVx0JDEs
KCUxKVxuXHQiCgkiYWRkaXVcdCUwLDFcblx0IgoJImJuZVx0JDEsJTIsMmZcblx0IgoJImFkZGl1
XHQlMSwxXG5cdCIKCSJibmV6XHQlMiwxYlxuXHQiCgkibGJ1XHQlMiwoJTApXG5cdCIKCgoKCSJt
b3ZlXHQlMiwkMVxuIgoJIjI6XHRzdWJ1XHQlMiwkMVxuIgoJIjM6XHQuc2V0XHRhdFxuXHQiCgki
LnNldFx0cmVvcmRlciIKCTogIj1yIiAoX19jcyksICI9ciIgKF9fY3QpLCAiPXIiIChfX3JlcykK
CTogIjAiIChfX2NzKSwgIjEiIChfX2N0KQoJOiAiJDEiKTsKCiAgcmV0dXJuIF9fcmVzOwp9CgoK
ZXh0ZXJuIF9faW5saW5lX18gaW50CnN0cm5jbXAoX19jb25zdF9fIGNoYXIgKl9fY3MsIF9fY29u
c3RfXyBjaGFyICpfX2N0LCBzaXplX3QgX19jb3VudCkKewoJaW50IF9fcmVzOwoKCV9fYXNtX18g
X192b2xhdGlsZV9fKAoJIi5zZXRcdG5vcmVvcmRlclxuXHQiCgkiLnNldFx0bm9hdFxuIgoJIjE6
XHRsYnVcdCUzLCglMClcblx0IgoJImJlcXpcdCUyLDJmXG5cdCIKCSJsYnVcdCQxLCglMSlcblx0
IgoJInN1YnVcdCUyLDFcblx0IgoJImJuZVx0JDEsJTMsM2Zcblx0IgoJImFkZGl1XHQlMCwxXG5c
dCIKCSJibmV6XHQlMywxYlxuXHQiCgkiYWRkaXVcdCUxLDFcbiIKCSIyOlxuXHQiCgoKCgkibW92
ZVx0JTMsJDFcbiIKCSIzOlx0c3VidVx0JTMsJDFcblx0IgoJIi5zZXRcdGF0XG5cdCIKCSIuc2V0
XHRyZW9yZGVyIgoJOiAiPXIiIChfX2NzKSwgIj1yIiAoX19jdCksICI9ciIgKF9fY291bnQpLCAi
PXIiIChfX3JlcykKCTogIjAiIChfX2NzKSwgIjEiIChfX2N0KSwgIjIiIChfX2NvdW50KQoJOiAi
JDEiKTsKCglyZXR1cm4gX19yZXM7Cn0KCgpleHRlcm4gdm9pZCAqbWVtc2V0KHZvaWQgKl9fcywg
aW50IF9fYywgc2l6ZV90IF9fY291bnQpOwoKCmV4dGVybiB2b2lkICptZW1jcHkodm9pZCAqX190
bywgX19jb25zdF9fIHZvaWQgKl9fZnJvbSwgc2l6ZV90IF9fbik7CgoKZXh0ZXJuIHZvaWQgKm1l
bW1vdmUodm9pZCAqX19kZXN0LCBfX2NvbnN0X18gdm9pZCAqX19zcmMsIHNpemVfdCBfX24pOwoK
IAoKCgpleHRlcm4gX19pbmxpbmVfXyB2b2lkICptZW1zY2FuKHZvaWQgKl9fYWRkciwgaW50IF9f
Yywgc2l6ZV90IF9fc2l6ZSkKewoJY2hhciAqX19lbmQgPSAoY2hhciAqKV9fYWRkciArIF9fc2l6
ZTsKCglfX2FzbV9fKCIuc2V0XHRwdXNoXG5cdCIKCQkiLnNldFx0bm9hdFxuXHQiCgkJIi5zZXRc
dHJlb3JkZXJcblx0IgoJCSIxOlx0YmVxXHQlMCwlMSwyZlxuXHQiCgkJImFkZGl1XHQlMCwxXG5c
dCIKCQkibGJcdCQxLC0xKCUwKVxuXHQiCgkJImJuZVx0JDEsJTQsMWJcbiIKCQkiMjpcdC5zZXRc
dHBvcCIKCQk6ICI9ciIgKF9fYWRkciksICI9ciIgKF9fZW5kKQoJCTogIjAiIChfX2FkZHIpLCAi
MSIgKF9fZW5kKSwgInIiIChfX2MpCgkJOiAiJDEiKTsKCglyZXR1cm4gX19hZGRyOwp9CgoKIyAz
OCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc3Ry
aW5nLmgiIDIKCgoKCgoKCiMgMjMgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51
eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4
L3NyYy9saW51eC9pbmNsdWRlL2FzbS9hdG9taWMuaCIgMQogCiMgMTYgIi9vcHQvY3Jvc3NkZXYv
bWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9hdG9taWMuaCIKCgoKCgoKCgp0eXBl
ZGVmIHN0cnVjdCB7IGludCBjb3VudGVyOyB9IGF0b21pY190OwoKCgoKCgoKCgoKCgogCgoKCmV4
dGVybiBfX2lubGluZV9fIHZvaWQgYXRvbWljX2FkZChpbnQgaSwgdm9sYXRpbGUgYXRvbWljX3Qg
KiB2KQp7CglpbnQJZmxhZ3M7CgoJX19hc21fXyBfX3ZvbGF0aWxlX18oICIuc2V0XHRwdXNoXG5c
dCIgIi5zZXRcdHJlb3JkZXJcblx0IiAibWZjMFx0JTAsJDEyXG5cdCIgIi5zZXRcdHBvcFxuXHQi
IDogIj1yIiAoZmxhZ3MpIDogOiAibWVtb3J5Iik7CglfX2NsaSgpOwoJdi0+Y291bnRlciArPSBp
OwoJX19yZXN0b3JlX2ZsYWdzKGZsYWdzKTsKfQoKZXh0ZXJuIF9faW5saW5lX18gdm9pZCBhdG9t
aWNfc3ViKGludCBpLCB2b2xhdGlsZSBhdG9taWNfdCAqIHYpCnsKCWludAlmbGFnczsKCglfX2Fz
bV9fIF9fdm9sYXRpbGVfXyggIi5zZXRcdHB1c2hcblx0IiAiLnNldFx0cmVvcmRlclxuXHQiICJt
ZmMwXHQlMCwkMTJcblx0IiAiLnNldFx0cG9wXG5cdCIgOiAiPXIiIChmbGFncykgOiA6ICJtZW1v
cnkiKTsKCV9fY2xpKCk7Cgl2LT5jb3VudGVyIC09IGk7CglfX3Jlc3RvcmVfZmxhZ3MoZmxhZ3Mp
Owp9CgpleHRlcm4gX19pbmxpbmVfXyBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21p
Y190ICogdikKewoJaW50CXRlbXAsIGZsYWdzOwoKCV9fYXNtX18gX192b2xhdGlsZV9fKCAiLnNl
dFx0cHVzaFxuXHQiICIuc2V0XHRyZW9yZGVyXG5cdCIgIm1mYzBcdCUwLCQxMlxuXHQiICIuc2V0
XHRwb3Bcblx0IiA6ICI9ciIgKGZsYWdzKSA6IDogIm1lbW9yeSIpOwoJX19jbGkoKTsKCXRlbXAg
PSB2LT5jb3VudGVyOwoJdGVtcCArPSBpOwoJdi0+Y291bnRlciA9IHRlbXA7CglfX3Jlc3RvcmVf
ZmxhZ3MoZmxhZ3MpOwoKCXJldHVybiB0ZW1wOwp9CgpleHRlcm4gX19pbmxpbmVfXyBpbnQgYXRv
bWljX3N1Yl9yZXR1cm4oaW50IGksIGF0b21pY190ICogdikKewoJaW50CXRlbXAsIGZsYWdzOwoK
CV9fYXNtX18gX192b2xhdGlsZV9fKCAiLnNldFx0cHVzaFxuXHQiICIuc2V0XHRyZW9yZGVyXG5c
dCIgIm1mYzBcdCUwLCQxMlxuXHQiICIuc2V0XHRwb3Bcblx0IiA6ICI9ciIgKGZsYWdzKSA6IDog
Im1lbW9yeSIpOwoJX19jbGkoKTsKCXRlbXAgPSB2LT5jb3VudGVyOwoJdGVtcCAtPSBpOwoJdi0+
Y291bnRlciA9IHRlbXA7CglfX3Jlc3RvcmVfZmxhZ3MoZmxhZ3MpOwoKCXJldHVybiB0ZW1wOwp9
CgpleHRlcm4gX19pbmxpbmVfXyB2b2lkIGF0b21pY19jbGVhcl9tYXNrKHVuc2lnbmVkIGxvbmcg
bWFzaywgdW5zaWduZWQgbG9uZyAqIHYpCnsKICAgICAgICB1bnNpZ25lZCBsb25nIHRlbXA7CiAg
ICAgICAgaW50ICAgICBmbGFnczsKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICIuc2V0
XHRwdXNoXG5cdCIgIi5zZXRcdHJlb3JkZXJcblx0IiAibWZjMFx0JTAsJDEyXG5cdCIgIi5zZXRc
dHBvcFxuXHQiIDogIj1yIiAoZmxhZ3MpIDogOiAibWVtb3J5Iik7CiAgICAgICAgX19jbGkoKTsK
ICAgICAgICB0ZW1wID0gKnY7CiAgICAgICAgdGVtcCAmPSB+bWFzazsKICAgICAgICAqdiA9IHRl
bXA7CiAgICAgICAgX19yZXN0b3JlX2ZsYWdzKGZsYWdzKTsKCiAgICAgICAgcmV0dXJuOwp9CgoK
IyAxOTMgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9h
dG9taWMuaCIKCgoKCgoKCgoKCgoKIyAyNSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3Jj
L2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1s
aW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vYml0b3BzLmgiIDEKIAoKCgoKCgoKCgoKCiMgMSAi
L29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2J5dGVvcmRl
ci5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNl
bC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5o
IiAxCgoKCgoKCgoKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9p
bmNsdWRlL2xpbnV4L2J5dGVvcmRlci9zd2FiLmgiIDEKCgoKIAojIDE3ICIvb3B0L2Nyb3NzZGV2
L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oIgoK
IAoKCgoKCgoKCgoKCgoKIyA0MSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4
L2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaCIKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIF9faW5saW5lX18gX19j
b25zdF9fIF9fdTE2IF9fZnN3YWIxNihfX3UxNiB4KQp7CglyZXR1cm4gKChfX3UxNikoICgoKF9f
dTE2KSh4KSAmIChfX3UxNikweDAwZmZVKSA8PCA4KSB8ICgoKF9fdTE2KSh4KSAmIChfX3UxNikw
eGZmMDBVKSA+PiA4KSApKTsKfQpleHRlcm4gX19pbmxpbmVfXyBfX3UxNiBfX3N3YWIxNnAoX191
MTYgKngpCnsKCXJldHVybiAoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTE2KSgqKHgpKSkgPyAo
KF9fdTE2KSggKCgoX191MTYpKCgqKHgpKSkgJiAoX191MTYpMHgwMGZmVSkgPDwgOCkgfCAoKChf
X3UxNikoKCooeCkpKSAmIChfX3UxNikweGZmMDBVKSA+PiA4KSApKSA6IF9fZnN3YWIxNigoKih4
KSkpKTsKfQpleHRlcm4gX19pbmxpbmVfXyB2b2lkIF9fc3dhYjE2cyhfX3UxNiAqYWRkcikKewoJ
ZG8geyAqKGFkZHIpID0gX19zd2FiMTZwKChhZGRyKSk7IH0gd2hpbGUgKDApOwp9CgpleHRlcm4g
X19pbmxpbmVfXyBfX2NvbnN0X18gX191MzIgX19mc3dhYjMyKF9fdTMyIHgpCnsKCXJldHVybiAo
KF9fdTMyKSggKCgoX191MzIpKHgpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwgKCgo
X191MzIpKHgpICYgKF9fdTMyKTB4MDAwMGZmMDBVTCkgPDwgOCkgfCAoKChfX3UzMikoeCkgJiAo
X191MzIpMHgwMGZmMDAwMFVMKSA+PiA4KSB8ICgoKF9fdTMyKSh4KSAmIChfX3UzMikweGZmMDAw
MDAwVUwpID4+IDI0KSApKTsKfQpleHRlcm4gX19pbmxpbmVfXyBfX3UzMiBfX3N3YWIzMnAoX191
MzIgKngpCnsKCXJldHVybiAoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMyKSgqKHgpKSkgPyAo
KF9fdTMyKSggKCgoX191MzIpKCgqKHgpKSkgJiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAyNCkg
fCAoKChfX3UzMikoKCooeCkpKSAmIChfX3UzMikweDAwMDBmZjAwVUwpIDw8IDgpIHwgKCgoX191
MzIpKCgqKHgpKSkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+PiA4KSB8ICgoKF9fdTMyKSgoKih4
KSkpICYgKF9fdTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQpICkpIDogX19mc3dhYjMyKCgqKHgpKSkp
Owp9CmV4dGVybiBfX2lubGluZV9fIHZvaWQgX19zd2FiMzJzKF9fdTMyICphZGRyKQp7CglkbyB7
ICooYWRkcikgPSBfX3N3YWIzMnAoKGFkZHIpKTsgfSB3aGlsZSAoMCk7Cn0KCgpleHRlcm4gX19p
bmxpbmVfXyBfX2NvbnN0X18gX191NjQgX19mc3dhYjY0KF9fdTY0IHgpCnsKCglfX3UzMiBoID0g
eCA+PiAzMjsKICAgICAgICBfX3UzMiBsID0geCAmICgoMVVMTDw8MzIpLTEpOwogICAgICAgIHJl
dHVybiAoKChfX3U2NCkoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMyKShsKSkgPyAoKF9fdTMy
KSggKCgoX191MzIpKChsKSkgJiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAyNCkgfCAoKChfX3Uz
MikoKGwpKSAmIChfX3UzMikweDAwMDBmZjAwVUwpIDw8IDgpIHwgKCgoX191MzIpKChsKSkgJiAo
X191MzIpMHgwMGZmMDAwMFVMKSA+PiA4KSB8ICgoKF9fdTMyKSgobCkpICYgKF9fdTMyKTB4ZmYw
MDAwMDBVTCkgPj4gMjQpICkpIDogX19mc3dhYjMyKChsKSkpKSA8PCAzMikgfCAoKF9fdTY0KSgo
X19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMyKShoKSkgPyAoKF9fdTMyKSggKCgoX191MzIpKCho
KSkgJiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAyNCkgfCAoKChfX3UzMikoKGgpKSAmIChfX3Uz
MikweDAwMDBmZjAwVUwpIDw8IDgpIHwgKCgoX191MzIpKChoKSkgJiAoX191MzIpMHgwMGZmMDAw
MFVMKSA+PiA4KSB8ICgoKF9fdTMyKSgoaCkpICYgKF9fdTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQp
ICkpIDogX19mc3dhYjMyKChoKSkpKSk7CgoKCn0KZXh0ZXJuIF9faW5saW5lX18gX191NjQgX19z
d2FiNjRwKF9fdTY0ICp4KQp7CglyZXR1cm4gKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3U2NCko
Kih4KSkpID8gKChfX3U2NCkoIChfX3U2NCkoKChfX3U2NCkoKCooeCkpKSAmIChfX3U2NCkweDAw
MDAwMDAwMDAwMDAwZmZVTEwpIDw8IDU2KSB8IChfX3U2NCkoKChfX3U2NCkoKCooeCkpKSAmIChf
X3U2NCkweDAwMDAwMDAwMDAwMGZmMDBVTEwpIDw8IDQwKSB8IChfX3U2NCkoKChfX3U2NCkoKCoo
eCkpKSAmIChfX3U2NCkweDAwMDAwMDAwMDBmZjAwMDBVTEwpIDw8IDI0KSB8IChfX3U2NCkoKChf
X3U2NCkoKCooeCkpKSAmIChfX3U2NCkweDAwMDAwMDAwZmYwMDAwMDBVTEwpIDw8IDgpIHwgKF9f
dTY0KSgoKF9fdTY0KSgoKih4KSkpICYgKF9fdTY0KTB4MDAwMDAwZmYwMDAwMDAwMFVMTCkgPj4g
OCkgfCAoX191NjQpKCgoX191NjQpKCgqKHgpKSkgJiAoX191NjQpMHgwMDAwZmYwMDAwMDAwMDAw
VUxMKSA+PiAyNCkgfCAoX191NjQpKCgoX191NjQpKCgqKHgpKSkgJiAoX191NjQpMHgwMGZmMDAw
MDAwMDAwMDAwVUxMKSA+PiA0MCkgfCAoX191NjQpKCgoX191NjQpKCgqKHgpKSkgJiAoX191NjQp
MHhmZjAwMDAwMDAwMDAwMDAwVUxMKSA+PiA1NikgKSkgOiBfX2Zzd2FiNjQoKCooeCkpKSk7Cn0K
ZXh0ZXJuIF9faW5saW5lX18gdm9pZCBfX3N3YWI2NHMoX191NjQgKmFkZHIpCnsKCWRvIHsgKihh
ZGRyKSA9IF9fc3dhYjY0cCgoYWRkcikpOyB9IHdoaWxlICgwKTsKfQoKCgoKCgoKCgoKCgoKCgoj
IDExICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9i
eXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oIiAyCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4
L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9nZW5lcmljLmgiIDEKCgoKIAojIDQw
ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9ieXRl
b3JkZXIvZ2VuZXJpYy5oIgoKIAojIDgwICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMv
bGludXgvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oIgoKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIyAxMzkgIi9vcHQvY3Jvc3NkZXYvbWlw
c2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9nZW5lcmljLmgiCgoK
CgoKCiAKCgoKCmV4dGVybiBfX3UzMgkJCW50b2hsKF9fdTMyKTsKZXh0ZXJuIF9fdTMyCQkJaHRv
bmwoX191MzIpOwoKCgoKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludAludG9ocyh1bnNpZ25lZCBz
aG9ydCBpbnQpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50CWh0b25zKHVuc2lnbmVkIHNob3J0
IGludCk7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA2NiAiL29wdC9jcm9zc2Rldi9taXBzZWwt
bGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaCIg
MgoKCgojIDI2ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9h
c20vYnl0ZW9yZGVyLmgiIDIKCgoKCgoKIyAxMyAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgv
c3JjL2xpbnV4L2luY2x1ZGUvYXNtL2JpdG9wcy5oIiAyCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKZXh0ZXJuIF9faW5saW5lX18gdm9pZCBzZXRfYml0KGludCBuciwgdm9pZCAqYWRk
cik7CmV4dGVybiBfX2lubGluZV9fIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9pZCAqYWRkcik7
CmV4dGVybiBfX2lubGluZV9fIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvaWQgKmFkZHIpOwpl
eHRlcm4gX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvaWQgKmFkZHIp
OwpleHRlcm4gX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdm9pZCAq
YWRkcik7CmV4dGVybiBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwg
dm9pZCAqYWRkcik7CgpleHRlcm4gX19pbmxpbmVfXyBpbnQgdGVzdF9iaXQoaW50IG5yLCBjb25z
dCB2b2lkICphZGRyKTsKCmV4dGVybiBfX2lubGluZV9fIGludCBmaW5kX2ZpcnN0X3plcm9fYml0
ICh2b2lkICphZGRyLCB1bnNpZ25lZCBzaXplKTsKCmV4dGVybiBfX2lubGluZV9fIGludCBmaW5k
X25leHRfemVyb19iaXQgKHZvaWQgKiBhZGRyLCBpbnQgc2l6ZSwgaW50IG9mZnNldCk7CmV4dGVy
biBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZmZ6KHVuc2lnbmVkIGxvbmcgd29yZCk7CgoKIyAx
NDggIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9iaXRv
cHMuaCIKCmV4dGVybiBfX2lubGluZV9fIHZvaWQgc2V0X2JpdChpbnQgbnIsIHZvaWQgKiBhZGRy
KQp7CglpbnQJbWFzazsKCWludAkqYSA9IGFkZHI7Cgl1bnNpZ25lZCBsb25nIGZsYWdzOwoKCWEg
Kz0gbnIgPj4gNTsKCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOwoJX19hc21fXyBfX3ZvbGF0aWxl
X18oICIuc2V0XHRwdXNoXG5cdCIgIi5zZXRcdHJlb3JkZXJcblx0IiAiLnNldFx0bm9hdFxuXHQi
ICJtZmMwXHQlMCwkMTJcblx0IiAib3JpXHQkMSwlMCwxXG5cdCIgInhvcmlcdCQxLDFcblx0IiAi
LnNldFx0bm9yZW9yZGVyXG5cdCIgIm10YzBcdCQxLCQxMlxuXHQiICJub3Bcblx0IiAibm9wXG5c
dCIgIm5vcFxuXHQiICIuc2V0XHRwb3Bcblx0IiA6ICI9ciIgKGZsYWdzKSA6IDogIiQxIiwgIm1l
bW9yeSIpOwoJKmEgfD0gbWFzazsKCV9fcmVzdG9yZV9mbGFncyhmbGFncyk7Cn0KCmV4dGVybiBf
X2lubGluZV9fIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9pZCAqIGFkZHIpCnsKCWludAltYXNr
OwoJaW50CSphID0gYWRkcjsKCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CgoJYSArPSBuciA+PiA1OwoJ
bWFzayA9IDEgPDwgKG5yICYgMHgxZik7CglfX2FzbV9fIF9fdm9sYXRpbGVfXyggIi5zZXRcdHB1
c2hcblx0IiAiLnNldFx0cmVvcmRlclxuXHQiICIuc2V0XHRub2F0XG5cdCIgIm1mYzBcdCUwLCQx
MlxuXHQiICJvcmlcdCQxLCUwLDFcblx0IiAieG9yaVx0JDEsMVxuXHQiICIuc2V0XHRub3Jlb3Jk
ZXJcblx0IiAibXRjMFx0JDEsJDEyXG5cdCIgIm5vcFxuXHQiICJub3Bcblx0IiAibm9wXG5cdCIg
Ii5zZXRcdHBvcFxuXHQiIDogIj1yIiAoZmxhZ3MpIDogOiAiJDEiLCAibWVtb3J5Iik7CgkqYSAm
PSB+bWFzazsKCV9fcmVzdG9yZV9mbGFncyhmbGFncyk7Cn0KCmV4dGVybiBfX2lubGluZV9fIHZv
aWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvaWQgKiBhZGRyKQp7CglpbnQJbWFzazsKCWludAkqYSA9
IGFkZHI7Cgl1bnNpZ25lZCBsb25nIGZsYWdzOwoKCWEgKz0gbnIgPj4gNTsKCW1hc2sgPSAxIDw8
IChuciAmIDB4MWYpOwoJX19hc21fXyBfX3ZvbGF0aWxlX18oICIuc2V0XHRwdXNoXG5cdCIgIi5z
ZXRcdHJlb3JkZXJcblx0IiAiLnNldFx0bm9hdFxuXHQiICJtZmMwXHQlMCwkMTJcblx0IiAib3Jp
XHQkMSwlMCwxXG5cdCIgInhvcmlcdCQxLDFcblx0IiAiLnNldFx0bm9yZW9yZGVyXG5cdCIgIm10
YzBcdCQxLCQxMlxuXHQiICJub3Bcblx0IiAibm9wXG5cdCIgIm5vcFxuXHQiICIuc2V0XHRwb3Bc
blx0IiA6ICI9ciIgKGZsYWdzKSA6IDogIiQxIiwgIm1lbW9yeSIpOwoJKmEgXj0gbWFzazsKCV9f
cmVzdG9yZV9mbGFncyhmbGFncyk7Cn0KCmV4dGVybiBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9z
ZXRfYml0KGludCBuciwgdm9pZCAqIGFkZHIpCnsKCWludAltYXNrLCByZXR2YWw7CglpbnQJKmEg
PSBhZGRyOwoJdW5zaWduZWQgbG9uZyBmbGFnczsKCglhICs9IG5yID4+IDU7CgltYXNrID0gMSA8
PCAobnIgJiAweDFmKTsKCV9fYXNtX18gX192b2xhdGlsZV9fKCAiLnNldFx0cHVzaFxuXHQiICIu
c2V0XHRyZW9yZGVyXG5cdCIgIi5zZXRcdG5vYXRcblx0IiAibWZjMFx0JTAsJDEyXG5cdCIgIm9y
aVx0JDEsJTAsMVxuXHQiICJ4b3JpXHQkMSwxXG5cdCIgIi5zZXRcdG5vcmVvcmRlclxuXHQiICJt
dGMwXHQkMSwkMTJcblx0IiAibm9wXG5cdCIgIm5vcFxuXHQiICJub3Bcblx0IiAiLnNldFx0cG9w
XG5cdCIgOiAiPXIiIChmbGFncykgOiA6ICIkMSIsICJtZW1vcnkiKTsKCXJldHZhbCA9IChtYXNr
ICYgKmEpICE9IDA7CgkqYSB8PSBtYXNrOwoJX19yZXN0b3JlX2ZsYWdzKGZsYWdzKTsKCglyZXR1
cm4gcmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KGlu
dCBuciwgdm9pZCAqIGFkZHIpCnsKCWludAltYXNrLCByZXR2YWw7CglpbnQJKmEgPSBhZGRyOwoJ
dW5zaWduZWQgbG9uZyBmbGFnczsKCglhICs9IG5yID4+IDU7CgltYXNrID0gMSA8PCAobnIgJiAw
eDFmKTsKCV9fYXNtX18gX192b2xhdGlsZV9fKCAiLnNldFx0cHVzaFxuXHQiICIuc2V0XHRyZW9y
ZGVyXG5cdCIgIi5zZXRcdG5vYXRcblx0IiAibWZjMFx0JTAsJDEyXG5cdCIgIm9yaVx0JDEsJTAs
MVxuXHQiICJ4b3JpXHQkMSwxXG5cdCIgIi5zZXRcdG5vcmVvcmRlclxuXHQiICJtdGMwXHQkMSwk
MTJcblx0IiAibm9wXG5cdCIgIm5vcFxuXHQiICJub3Bcblx0IiAiLnNldFx0cG9wXG5cdCIgOiAi
PXIiIChmbGFncykgOiA6ICIkMSIsICJtZW1vcnkiKTsKCXJldHZhbCA9IChtYXNrICYgKmEpICE9
IDA7CgkqYSAmPSB+bWFzazsKCV9fcmVzdG9yZV9mbGFncyhmbGFncyk7CgoJcmV0dXJuIHJldHZh
bDsKfQoKZXh0ZXJuIF9faW5saW5lX18gaW50IHRlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2
b2lkICogYWRkcikKewoJaW50CW1hc2ssIHJldHZhbDsKCWludAkqYSA9IGFkZHI7Cgl1bnNpZ25l
ZCBsb25nIGZsYWdzOwoKCWEgKz0gbnIgPj4gNTsKCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOwoJ
X19hc21fXyBfX3ZvbGF0aWxlX18oICIuc2V0XHRwdXNoXG5cdCIgIi5zZXRcdHJlb3JkZXJcblx0
IiAiLnNldFx0bm9hdFxuXHQiICJtZmMwXHQlMCwkMTJcblx0IiAib3JpXHQkMSwlMCwxXG5cdCIg
InhvcmlcdCQxLDFcblx0IiAiLnNldFx0bm9yZW9yZGVyXG5cdCIgIm10YzBcdCQxLCQxMlxuXHQi
ICJub3Bcblx0IiAibm9wXG5cdCIgIm5vcFxuXHQiICIuc2V0XHRwb3Bcblx0IiA6ICI9ciIgKGZs
YWdzKSA6IDogIiQxIiwgIm1lbW9yeSIpOwoJcmV0dmFsID0gKG1hc2sgJiAqYSkgIT0gMDsKCSph
IF49IG1hc2s7CglfX3Jlc3RvcmVfZmxhZ3MoZmxhZ3MpOwoKCXJldHVybiByZXR2YWw7Cn0KCgoK
CgoKCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgdGVzdF9iaXQoaW50IG5yLCBjb25zdCB2b2lkICph
ZGRyKQp7CglyZXR1cm4gKCgxVUwgPDwgKG5yICYgMzEpKSAmICgoKGNvbnN0IHVuc2lnbmVkIGlu
dCAqKSBhZGRyKVtuciA+PiA1XSkpICE9IDA7Cn0KCgoKIAoKZXh0ZXJuIF9faW5saW5lX18gaW50
IGZpbmRfZmlyc3RfemVyb19iaXQgKHZvaWQgKmFkZHIsIHVuc2lnbmVkIHNpemUpCnsKCXVuc2ln
bmVkIGxvbmcgZHVtbXk7CglpbnQgcmVzOwoKCWlmICghc2l6ZSkKCQlyZXR1cm4gMDsKCglfX2Fz
bV9fICgiLnNldFx0bm9yZW9yZGVyXG5cdCIKCQkiLnNldFx0bm9hdFxuIgoJCSIxOlx0c3VidVx0
JDEsJTYsJTBcblx0IgoJCSJibGV6XHQkMSwyZlxuXHQiCgkJImx3XHQkMSwoJTUpXG5cdCIKCQki
YWRkaXVcdCU1LDRcblx0IgoKCgkJImJlcWxcdCUxLCQxLDFiXG5cdCIKCQkiYWRkaXVcdCUwLDMy
XG5cdCIKCgoKCgoKCgoKCQkibGlcdCUxLDFcbiIKCQkiMTpcdGFuZFx0JTIsJDEsJTFcblx0IgoJ
CSJiZXF6XHQlMiwyZlxuXHQiCgkJInNsbFx0JTEsJTEsMVxuXHQiCgkJImJuZXpcdCUxLDFiXG5c
dCIKCQkiYWRkXHQlMCwlMCwxXG5cdCIKCQkiLnNldFx0YXRcblx0IgoJCSIuc2V0XHRyZW9yZGVy
XG4iCgkJIjI6IgoJCTogIj1yIiAocmVzKSwKCQkgICI9ciIgKGR1bW15KSwKCQkgICI9ciIgKGFk
ZHIpCgkJOiAiMCIgKChzaWduZWQgaW50KSAwKSwKCQkgICIxIiAoKHVuc2lnbmVkIGludCkgMHhm
ZmZmZmZmZiksCgkJICAiMiIgKGFkZHIpLAoJCSAgInIiIChzaXplKQoJCTogIiQxIik7CgoJcmV0
dXJuIHJlczsKfQoKZXh0ZXJuIF9faW5saW5lX18gaW50IGZpbmRfbmV4dF96ZXJvX2JpdCAodm9p
ZCAqIGFkZHIsIGludCBzaXplLCBpbnQgb2Zmc2V0KQp7Cgl1bnNpZ25lZCBpbnQgKnAgPSAoKHVu
c2lnbmVkIGludCAqKSBhZGRyKSArIChvZmZzZXQgPj4gNSk7CglpbnQgc2V0ID0gMCwgYml0ID0g
b2Zmc2V0ICYgMzEsIHJlczsKCXVuc2lnbmVkIGxvbmcgZHVtbXk7CgkKCWlmIChiaXQpIHsKCQkg
CgoKCgoKCQlfX2FzbV9fKCIuc2V0XHRub3Jlb3JkZXJcblx0IgoJCQkiLnNldFx0bm9hdFxuIgoJ
CQkiMTpcdGFuZFx0JDEsJTQsJTFcblx0IgoJCQkiYmVxelx0JDEsMWZcblx0IgoJCQkic2xsXHQl
MSwlMSwxXG5cdCIKCQkJImJuZXpcdCUxLDFiXG5cdCIKCQkJImFkZGl1XHQlMCwxXG5cdCIKCQkJ
Ii5zZXRcdGF0XG5cdCIKCQkJIi5zZXRcdHJlb3JkZXJcbiIKCQkJIjE6IgoJCQk6ICI9ciIgKHNl
dCksCgkJCSAgIj1yIiAoZHVtbXkpCgkJCTogIjAiICgwKSwKCQkJICAiMSIgKDEgPDwgYml0KSwK
CQkJICAiciIgKCpwKQoJCQk6ICIkMSIpOwoJCWlmIChzZXQgPCAoMzIgLSBiaXQpKQoJCQlyZXR1
cm4gc2V0ICsgb2Zmc2V0OwoJCXNldCA9IDMyIC0gYml0OwoJCXArKzsKCX0KCSAKCgoJcmVzID0g
ZmluZF9maXJzdF96ZXJvX2JpdChwLCBzaXplIC0gMzIgKiAocCAtICh1bnNpZ25lZCBpbnQgKikg
YWRkcikpOwoJcmV0dXJuIG9mZnNldCArIHNldCArIHJlczsKfQoKCgogCgoKCmV4dGVybiBfX2lu
bGluZV9fIHVuc2lnbmVkIGxvbmcgZmZ6KHVuc2lnbmVkIGxvbmcgd29yZCkKewoJdW5zaWduZWQg
aW50CV9fcmVzOwoJdW5zaWduZWQgaW50CW1hc2sgPSAxOwoKCV9fYXNtX18gKAoJCSIuc2V0XHRu
b3Jlb3JkZXJcblx0IgoJCSIuc2V0XHRub2F0XG5cdCIKCQkibW92ZVx0JTAsJDBcbiIKCQkiMTpc
dGFuZFx0JDEsJTIsJTFcblx0IgoJCSJiZXF6XHQkMSwyZlxuXHQiCgkJInNsbFx0JTEsMVxuXHQi
CgkJImJuZXpcdCUxLDFiXG5cdCIKCQkiYWRkaXVcdCUwLDFcblx0IgoJCSIuc2V0XHRhdFxuXHQi
CgkJIi5zZXRcdHJlb3JkZXJcbiIKCQkiMjpcblx0IgoJCTogIj0mciIgKF9fcmVzKSwgIj1yIiAo
bWFzaykKCQk6ICJyIiAod29yZCksICIxIiAobWFzaykKCQk6ICIkMSIpOwoKCXJldHVybiBfX3Jl
czsKfQoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKIyA0NDUgIi9vcHQvY3Jvc3NkZXYvbWlwc2Vs
LWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKCiAKCgojIDU0MCAiL29wdC9j
cm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL2JpdG9wcy5oIgoKIAoK
CgoKCgogCgoKIAoKCgoKCgoKCgoKIyAyNiAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3Jj
L2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKCnN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdDsK
CgogCiMgNDAgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xp
bnV4L2ZzLmgiCgogCgoKCgoKCgogCmV4dGVybiBpbnQgbWF4X2ZpbGVzLCBucl9maWxlcywgbnJf
ZnJlZV9maWxlczsKZXh0ZXJuIGludCBtYXhfc3VwZXJfYmxvY2tzLCBucl9zdXBlcl9ibG9ja3M7
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgogCgoKCgoKIAojIDEyOSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4
L2luY2x1ZGUvbGludXgvZnMuaCIKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5j
bHVkZS9hc20vc2VtYXBob3JlLmgiIDEKIAojIDEzICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51
eC9zcmMvbGludXgvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiCgoKCgoKCgoKCnN0cnVjdCBzZW1h
cGhvcmUgewoKCgoKCWF0b21pY190IHdha2luZzsKCWF0b21pY190IGNvdW50OwoKCXdhaXRfcXVl
dWVfaGVhZF90IHdhaXQ7CgoJbG9uZyBfX21hZ2ljOwoKfTsKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKZXh0ZXJuIGlubGluZSB2b2lkIHNlbWFfaW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2Vt
LCBpbnQgdmFsKQp7CgkoKCZzZW0tPmNvdW50KS0+Y291bnRlciA9ICggdmFsKSk7CgkoKCZzZW0t
Pndha2luZyktPmNvdW50ZXIgPSAoIDApKTsKCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlbS0+d2Fp
dCk7CgoJc2VtLT5fX21hZ2ljID0gKGxvbmcpJnNlbS0+X19tYWdpYzsKCn0KCnN0YXRpYyBpbmxp
bmUgdm9pZCBpbml0X01VVEVYIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCnsKCXNlbWFfaW5pdChz
ZW0sIDEpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWF9MT0NLRUQgKHN0cnVjdCBz
ZW1hcGhvcmUgKnNlbSkKewoJc2VtYV9pbml0KHNlbSwgMCk7Cn0KCiAgdm9pZCBfX2Rvd24oc3Ry
dWN0IHNlbWFwaG9yZSAqIHNlbSk7CiAgaW50ICBfX2Rvd25faW50ZXJydXB0aWJsZShzdHJ1Y3Qg
c2VtYXBob3JlICogc2VtKTsKICBpbnQgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAq
IHNlbSk7CiAgdm9pZCBfX3VwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwoKZXh0ZXJuIGlubGlu
ZSB2b2lkIGRvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKewoKCWlmIChzZW0tPl9fbWFnaWMg
IT0gKGxvbmcpJihzZW0tPl9fbWFnaWMpKSB7IHByaW50aygiYmFkIG1hZ2ljICVseCAoc2hvdWxk
IGJlICVseCksICIsIChsb25nKXNlbS0+X19tYWdpYywgKGxvbmcpJihzZW0tPl9fbWFnaWMpKTsg
ZG8geyBwcmludGsoIndxIGJ1ZywgZm9yY2luZyBvb3BzLlxuIik7ICooaW50KikwID0gMDsgfSB3
aGlsZSAoMCk7IH07CgoJaWYgKGF0b21pY19zdWJfcmV0dXJuKDEsKCZzZW0tPmNvdW50KSkgPCAw
KQoJCV9fZG93bihzZW0pOwp9CgpleHRlcm4gaW5saW5lIGludCBkb3duX2ludGVycnVwdGlibGUo
c3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKewoJaW50IHJldCA9IDA7CgoKCWlmIChzZW0tPl9fbWFn
aWMgIT0gKGxvbmcpJihzZW0tPl9fbWFnaWMpKSB7IHByaW50aygiYmFkIG1hZ2ljICVseCAoc2hv
dWxkIGJlICVseCksICIsIChsb25nKXNlbS0+X19tYWdpYywgKGxvbmcpJihzZW0tPl9fbWFnaWMp
KTsgZG8geyBwcmludGsoIndxIGJ1ZywgZm9yY2luZyBvb3BzLlxuIik7ICooaW50KikwID0gMDsg
fSB3aGlsZSAoMCk7IH07CgoJaWYgKGF0b21pY19zdWJfcmV0dXJuKDEsKCZzZW0tPmNvdW50KSkg
PCAwKQoJCXJldCA9IF9fZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSk7CglyZXR1cm4gcmV0Owp9CgoK
CmV4dGVybiBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQp7
CglpbnQgcmV0ID0gMDsKCWlmIChhdG9taWNfc3ViX3JldHVybigxLCgmc2VtLT5jb3VudCkpIDwg
MCkKCQlyZXQgPSBfX2Rvd25fdHJ5bG9jayhzZW0pOwoJcmV0dXJuIHJldDsKfQoKCiMgMTc4ICIv
b3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vc2VtYXBob3Jl
LmgiCgogCgoKCmV4dGVybiBpbmxpbmUgdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQp7
CgoJaWYgKHNlbS0+X19tYWdpYyAhPSAobG9uZykmKHNlbS0+X19tYWdpYykpIHsgcHJpbnRrKCJi
YWQgbWFnaWMgJWx4IChzaG91bGQgYmUgJWx4KSwgIiwgKGxvbmcpc2VtLT5fX21hZ2ljLCAobG9u
ZykmKHNlbS0+X19tYWdpYykpOyBkbyB7IHByaW50aygid3EgYnVnLCBmb3JjaW5nIG9vcHMuXG4i
KTsgKihpbnQqKTAgPSAwOyB9IHdoaWxlICgwKTsgfTsKCglpZiAoYXRvbWljX2FkZF9yZXR1cm4o
MSwoJnNlbS0+Y291bnQpKSA8PSAwKQoJCV9fdXAoc2VtKTsKfQoKIAojIDIxMSAiL29wdC9jcm9z
c2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3NlbWFwaG9yZS5oIgoKCgpz
dHJ1Y3Qgcndfc2VtYXBob3JlIHsKCWF0b21pY190CQljb3VudDsKCSAKCgl1bnNpZ25lZAkJZ3Jh
bnRlZDsKCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7Cgl3YWl0X3F1ZXVlX2hlYWRfdAl3cml0ZV9i
aWFzX3dhaXQ7CgoJbG9uZwkJCV9fbWFnaWM7CglhdG9taWNfdAkJcmVhZGVyczsKCWF0b21pY190
CQl3cml0ZXJzOwoKfTsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW5saW5lIHZvaWQg
aW5pdF9yd3NlbShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKCSgoJnNlbS0+Y291bnQpLT5j
b3VudGVyID0gKCAweDAxMDAwMDAwKSk7CglzZW0tPmdyYW50ZWQgPSAwOwoJaW5pdF93YWl0cXVl
dWVfaGVhZCgmc2VtLT53YWl0KTsKCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlbS0+d3JpdGVfYmlh
c193YWl0KTsKCglzZW0tPl9fbWFnaWMgPSAobG9uZykmc2VtLT5fX21hZ2ljOwoJKCgmc2VtLT5y
ZWFkZXJzKS0+Y291bnRlciA9ICggMCkpOwoJKCgmc2VtLT53cml0ZXJzKS0+Y291bnRlciA9ICgg
MCkpOwoKfQoKIApleHRlcm4gdm9pZCBfX2Rvd25fcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpz
ZW0sIGludCBjb3VudCk7CmV4dGVybiB2b2lkIF9fZG93bl93cml0ZShzdHJ1Y3Qgcndfc2VtYXBo
b3JlICpzZW0sIGludCBjb3VudCk7CmV4dGVybiB2b2lkIF9fcndzZW1fd2FrZShzdHJ1Y3Qgcndf
c2VtYXBob3JlICpzZW0sIHVuc2lnbmVkIGxvbmcgcmVhZGVycyk7CgpleHRlcm4gaW5saW5lIHZv
aWQgZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewoJaW50IGNvdW50OwoKCglp
ZiAoc2VtLT5fX21hZ2ljICE9IChsb25nKSYoc2VtLT5fX21hZ2ljKSkgeyBwcmludGsoImJhZCBt
YWdpYyAlbHggKHNob3VsZCBiZSAlbHgpLCAiLCAobG9uZylzZW0tPl9fbWFnaWMsIChsb25nKSYo
c2VtLT5fX21hZ2ljKSk7IGRvIHsgcHJpbnRrKCJ3cSBidWcsIGZvcmNpbmcgb29wcy5cbiIpOyAq
KGludCopMCA9IDA7IH0gd2hpbGUgKDApOyB9OwoKCgljb3VudCA9IGF0b21pY19zdWJfcmV0dXJu
KDEsKCZzZW0tPmNvdW50KSk7CglpZiAoY291bnQgPCAwKSB7CgkJX19kb3duX3JlYWQoc2VtLCBj
b3VudCk7Cgl9CglfX2FzbV9fIF9fdm9sYXRpbGVfXyggIiMgcHJldmVudCBpbnN0cnVjdGlvbnMg
YmVpbmcgbW92ZWQgYXJvdW5kXG5cdCIgIi5zZXRcdG5vcmVvcmRlclxuXHQiICIjIDggbm9wcyB0
byBmb29sIHRoZSBSNDQwMCBwaXBlbGluZVxuXHQiICJub3A7bm9wO25vcDtub3A7bm9wO25vcDtu
b3A7bm9wXG5cdCIgIi5zZXRcdHJlb3JkZXIiIDogOiA6ICJtZW1vcnkiKTsKCgoJaWYgKHNlbS0+
Z3JhbnRlZCAmIDIpCgkJZG8geyBwcmludGsoImtlcm5lbCBCVUcgYXQgJXM6JWQhXG4iLCAiL29w
dC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3NlbWFwaG9yZS5o
IiwgMjg0KTsgKihpbnQgKikwPTA7IH0gd2hpbGUgKDApOwoJaWYgKCgoJnNlbS0+d3JpdGVycykt
PmNvdW50ZXIpKQoJCWRvIHsgcHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgIi9vcHQv
Y3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9zZW1hcGhvcmUuaCIs
IDI4Nik7ICooaW50ICopMD0wOyB9IHdoaWxlICgwKTsKCWF0b21pY19hZGQoMSwoJnNlbS0+cmVh
ZGVycykpOwoKfQoKZXh0ZXJuIGlubGluZSB2b2lkIGRvd25fd3JpdGUoc3RydWN0IHJ3X3NlbWFw
aG9yZSAqc2VtKQp7CglpbnQgY291bnQ7CgoKCWlmIChzZW0tPl9fbWFnaWMgIT0gKGxvbmcpJihz
ZW0tPl9fbWFnaWMpKSB7IHByaW50aygiYmFkIG1hZ2ljICVseCAoc2hvdWxkIGJlICVseCksICIs
IChsb25nKXNlbS0+X19tYWdpYywgKGxvbmcpJihzZW0tPl9fbWFnaWMpKTsgZG8geyBwcmludGso
IndxIGJ1ZywgZm9yY2luZyBvb3BzLlxuIik7ICooaW50KikwID0gMDsgfSB3aGlsZSAoMCk7IH07
CgoKCWNvdW50ID0gYXRvbWljX3N1Yl9yZXR1cm4oMHgwMTAwMDAwMCwgJnNlbS0+Y291bnQpOwoJ
aWYgKGNvdW50KSB7CgkJX19kb3duX3dyaXRlKHNlbSwgY291bnQpOwoJfQoJX19hc21fXyBfX3Zv
bGF0aWxlX18oICIjIHByZXZlbnQgaW5zdHJ1Y3Rpb25zIGJlaW5nIG1vdmVkIGFyb3VuZFxuXHQi
ICIuc2V0XHRub3Jlb3JkZXJcblx0IiAiIyA4IG5vcHMgdG8gZm9vbCB0aGUgUjQ0MDAgcGlwZWxp
bmVcblx0IiAibm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcFxuXHQiICIuc2V0XHRyZW9y
ZGVyIiA6IDogOiAibWVtb3J5Iik7CgoKCWlmICgoKCZzZW0tPndyaXRlcnMpLT5jb3VudGVyKSkK
CQlkbyB7IHByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsICIvb3B0L2Nyb3NzZGV2L21p
cHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiLCAzMDcpOyAqKGlu
dCAqKTA9MDsgfSB3aGlsZSAoMCk7CglpZiAoKCgmc2VtLT5yZWFkZXJzKS0+Y291bnRlcikpCgkJ
ZG8geyBwcmludGsoImtlcm5lbCBCVUcgYXQgJXM6JWQhXG4iLCAiL29wdC9jcm9zc2Rldi9taXBz
ZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3NlbWFwaG9yZS5oIiwgMzA5KTsgKihpbnQg
KikwPTA7IH0gd2hpbGUgKDApOwoJaWYgKHNlbS0+Z3JhbnRlZCAmIDMpCgkJZG8geyBwcmludGso
Imtlcm5lbCBCVUcgYXQgJXM6JWQhXG4iLCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3Jj
L2xpbnV4L2luY2x1ZGUvYXNtL3NlbWFwaG9yZS5oIiwgMzExKTsgKihpbnQgKikwPTA7IH0gd2hp
bGUgKDApOwoJYXRvbWljX2FkZCgxLCgmc2VtLT53cml0ZXJzKSk7Cgp9CgogCgoKCmV4dGVybiBp
bmxpbmUgdm9pZCB1cF9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewoKCWlmIChzZW0t
Pl9fbWFnaWMgIT0gKGxvbmcpJihzZW0tPl9fbWFnaWMpKSB7IHByaW50aygiYmFkIG1hZ2ljICVs
eCAoc2hvdWxkIGJlICVseCksICIsIChsb25nKXNlbS0+X19tYWdpYywgKGxvbmcpJihzZW0tPl9f
bWFnaWMpKTsgZG8geyBwcmludGsoIndxIGJ1ZywgZm9yY2luZyBvb3BzLlxuIik7ICooaW50Kikw
ID0gMDsgfSB3aGlsZSAoMCk7IH07CglpZiAoc2VtLT5ncmFudGVkICYgMikKCQlkbyB7IHByaW50
aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9z
cmMvbGludXgvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiLCAzMjUpOyAqKGludCAqKTA9MDsgfSB3
aGlsZSAoMCk7CglpZiAoKCgmc2VtLT53cml0ZXJzKS0+Y291bnRlcikpCgkJZG8geyBwcmludGso
Imtlcm5lbCBCVUcgYXQgJXM6JWQhXG4iLCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3Jj
L2xpbnV4L2luY2x1ZGUvYXNtL3NlbWFwaG9yZS5oIiwgMzI3KTsgKihpbnQgKikwPTA7IH0gd2hp
bGUgKDApOwoJYXRvbWljX3N1YigxLCgmc2VtLT5yZWFkZXJzKSk7CgoKCV9fYXNtX18gX192b2xh
dGlsZV9fKCAiIyBwcmV2ZW50IGluc3RydWN0aW9ucyBiZWluZyBtb3ZlZCBhcm91bmRcblx0IiAi
LnNldFx0bm9yZW9yZGVyXG5cdCIgIiMgOCBub3BzIHRvIGZvb2wgdGhlIFI0NDAwIHBpcGVsaW5l
XG5cdCIgIm5vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3Bcblx0IiAiLnNldFx0cmVvcmRl
ciIgOiA6IDogIm1lbW9yeSIpOwoJaWYgKGF0b21pY19hZGRfcmV0dXJuKDEsKCZzZW0tPmNvdW50
KSkgPT0gMCkKCQlfX3J3c2VtX3dha2Uoc2VtLCAwKTsKfQoKIAoKCmV4dGVybiBpbmxpbmUgdm9p
ZCB1cF93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKCWludCBjb3VudDsKCgoJaWYg
KHNlbS0+X19tYWdpYyAhPSAobG9uZykmKHNlbS0+X19tYWdpYykpIHsgcHJpbnRrKCJiYWQgbWFn
aWMgJWx4IChzaG91bGQgYmUgJWx4KSwgIiwgKGxvbmcpc2VtLT5fX21hZ2ljLCAobG9uZykmKHNl
bS0+X19tYWdpYykpOyBkbyB7IHByaW50aygid3EgYnVnLCBmb3JjaW5nIG9vcHMuXG4iKTsgKihp
bnQqKTAgPSAwOyB9IHdoaWxlICgwKTsgfTsKCWlmIChzZW0tPmdyYW50ZWQgJiAzKQoJCWRvIHsg
cHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxp
bnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9zZW1hcGhvcmUuaCIsIDM0Nik7ICooaW50ICopMD0w
OyB9IHdoaWxlICgwKTsKCWlmICgoKCZzZW0tPnJlYWRlcnMpLT5jb3VudGVyKSkKCQlkbyB7IHBy
aW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51
eC9zcmMvbGludXgvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiLCAzNDgpOyAqKGludCAqKTA9MDsg
fSB3aGlsZSAoMCk7CglpZiAoKCgmc2VtLT53cml0ZXJzKS0+Y291bnRlcikgIT0gMSkKCQlkbyB7
IHByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1s
aW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiLCAzNTApOyAqKGludCAqKTA9
MDsgfSB3aGlsZSAoMCk7CglhdG9taWNfc3ViKDEsKCZzZW0tPndyaXRlcnMpKTsKCgoJX19hc21f
XyBfX3ZvbGF0aWxlX18oICIjIHByZXZlbnQgaW5zdHJ1Y3Rpb25zIGJlaW5nIG1vdmVkIGFyb3Vu
ZFxuXHQiICIuc2V0XHRub3Jlb3JkZXJcblx0IiAiIyA4IG5vcHMgdG8gZm9vbCB0aGUgUjQ0MDAg
cGlwZWxpbmVcblx0IiAibm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcFxuXHQiICIuc2V0
XHRyZW9yZGVyIiA6IDogOiAibWVtb3J5Iik7Cgljb3VudCA9IGF0b21pY19hZGRfcmV0dXJuKDB4
MDEwMDAwMDAsICZzZW0tPmNvdW50KTsKCWlmIChjb3VudCAtIDB4MDEwMDAwMDAgPCAwICYmIGNv
dW50ID49IDApIHsKCQkgCgkJX19yd3NlbV93YWtlKHNlbSwgY291bnQpOwoJfQp9CgoKIyAxNzYg
Ii9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgi
IDIKCgoKZXh0ZXJuIHZvaWQgdXBkYXRlX2F0aW1lIChzdHJ1Y3QgaW5vZGUgKik7CgoKZXh0ZXJu
IHZvaWQgYnVmZmVyX2luaXQodW5zaWduZWQgbG9uZyk7CmV4dGVybiB2b2lkIGlub2RlX2luaXQo
dm9pZCk7CmV4dGVybiB2b2lkIGZpbGVfdGFibGVfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgZGNh
Y2hlX2luaXQodm9pZCk7CgogCgoKCgoKCgoKIAojIDIwNyAiL29wdC9jcm9zc2Rldi9taXBzZWwt
bGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIKc3RydWN0IGJ1ZmZlcl9oZWFkIHsK
CSAKCXN0cnVjdCBidWZmZXJfaGVhZCAqYl9uZXh0OwkgCgl1bnNpZ25lZCBsb25nIGJfYmxvY2tu
cjsJIAoJdW5zaWduZWQgc2hvcnQgYl9zaXplOwkJIAoJdW5zaWduZWQgc2hvcnQgYl9saXN0OwkJ
IAoJa2Rldl90IGJfZGV2OwkJCSAKCglhdG9taWNfdCBiX2NvdW50OwkJIAoJa2Rldl90IGJfcmRl
djsJCQkgCgl1bnNpZ25lZCBsb25nIGJfc3RhdGU7CQkgCgl1bnNpZ25lZCBsb25nIGJfZmx1c2h0
aW1lOwkgCgoJc3RydWN0IGJ1ZmZlcl9oZWFkICpiX25leHRfZnJlZTsgCglzdHJ1Y3QgYnVmZmVy
X2hlYWQgKmJfcHJldl9mcmVlOyAKCXN0cnVjdCBidWZmZXJfaGVhZCAqYl90aGlzX3BhZ2U7IAoJ
c3RydWN0IGJ1ZmZlcl9oZWFkICpiX3JlcW5leHQ7CSAKCglzdHJ1Y3QgYnVmZmVyX2hlYWQgKipi
X3BwcmV2OwkgCgljaGFyICogYl9kYXRhOwkJCSAKCXN0cnVjdCBwYWdlICpiX3BhZ2U7CQkgCgl2
b2lkICgqYl9lbmRfaW8pKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB1cHRvZGF0ZSk7ICAK
CXZvaWQgKmJfZGV2X2lkOwoKCXVuc2lnbmVkIGxvbmcgYl9yc2VjdG9yOwkgCgl3YWl0X3F1ZXVl
X2hlYWRfdCBiX3dhaXQ7CglzdHJ1Y3Qga2lvYnVmICogYl9raW9idWY7CSAKfTsKCnR5cGVkZWYg
dm9pZCAoYmhfZW5kX2lvX3QpKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB1cHRvZGF0ZSk7
CnZvaWQgaW5pdF9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICosIGJoX2VuZF9pb190ICosIHZv
aWQgKik7CgoKCgoKCgoKCgoKCgpleHRlcm4gdm9pZCBzZXRfYmhfcGFnZShzdHJ1Y3QgYnVmZmVy
X2hlYWQgKmJoLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwoKCgoK
IyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9w
aXBlX2ZzX2kuaCIgMQoKCgpzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvIHsKCXdhaXRfcXVldWVfaGVh
ZF90IHdhaXQ7CgljaGFyICpiYXNlOwoJdW5zaWduZWQgaW50IHN0YXJ0OwoJdW5zaWduZWQgaW50
IHJlYWRlcnM7Cgl1bnNpZ25lZCBpbnQgd3JpdGVyczsKCXVuc2lnbmVkIGludCB3YWl0aW5nX3Jl
YWRlcnM7Cgl1bnNpZ25lZCBpbnQgd2FpdGluZ193cml0ZXJzOwoJdW5zaWduZWQgaW50IHJfY291
bnRlcjsKCXVuc2lnbmVkIGludCB3X2NvdW50ZXI7Cn07CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgogCnZvaWQgcGlwZV93YWl0KHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKCnN0cnVjdCBpbm9kZSog
cGlwZV9uZXcoc3RydWN0IGlub2RlKiBpbm9kZSk7CgoKIyAyNTYgIi9vcHQvY3Jvc3NkZXYvbWlw
c2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL29wdC9jcm9z
c2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbWluaXhfZnNfaS5oIiAx
CgoKCiAKCgpzdHJ1Y3QgbWluaXhfaW5vZGVfaW5mbyB7Cgl1bmlvbiB7CgkJX191MTYgaTFfZGF0
YVsxNl07CgkJX191MzIgaTJfZGF0YVsxNl07Cgl9IHU7Cn07CgoKIyAyNTcgIi9vcHQvY3Jvc3Nk
ZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL29w
dC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZXh0Ml9mc19p
LmgiIDEKIAojIDE1ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVk
ZS9saW51eC9leHQyX2ZzX2kuaCIKCgoKCiAKCgpzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvIHsKCV9f
dTMyCWlfZGF0YVsxNV07CglfX3UzMglpX2ZsYWdzOwoJX191MzIJaV9mYWRkcjsKCV9fdTgJaV9m
cmFnX25vOwoJX191OAlpX2ZyYWdfc2l6ZTsKCV9fdTE2CWlfb3N5bmM7CglfX3UzMglpX2ZpbGVf
YWNsOwoJX191MzIJaV9kaXJfYWNsOwoJX191MzIJaV9kdGltZTsKCV9fdTMyCW5vdF91c2VkXzE7
CSAKCV9fdTMyCWlfYmxvY2tfZ3JvdXA7CglfX3UzMglpX25leHRfYWxsb2NfYmxvY2s7CglfX3Uz
MglpX25leHRfYWxsb2NfZ29hbDsKCV9fdTMyCWlfcHJlYWxsb2NfYmxvY2s7CglfX3UzMglpX3By
ZWFsbG9jX2NvdW50OwoJX191MzIJaV9oaWdoX3NpemU7CglpbnQJaV9uZXdfaW5vZGU6MTsJIAp9
OwoKCiMgMjU4ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9s
aW51eC9mcy5oIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9p
bmNsdWRlL2xpbnV4L2hwZnNfZnNfaS5oIiAxCgoKCnN0cnVjdCBocGZzX2lub2RlX2luZm8gewoJ
dW5zaWduZWQgbG9uZyBtbXVfcHJpdmF0ZTsKCWlub190IGlfcGFyZW50X2RpcjsJIAoJdW5zaWdu
ZWQgaV9kbm87CQkgCgl1bnNpZ25lZCBpX2Rwb3M7CSAKCXVuc2lnbmVkIGlfZHN1YmRubzsJIAoJ
dW5zaWduZWQgaV9maWxlX3NlYzsJIAoJdW5zaWduZWQgaV9kaXNrX3NlYzsJIAoJdW5zaWduZWQg
aV9uX3NlY3M7CSAKCXVuc2lnbmVkIGlfZWFfc2l6ZTsJIAoJdW5zaWduZWQgaV9jb252IDogMjsJ
IAoJdW5zaWduZWQgaV9lYV9tb2RlIDogMTsJIAoJdW5zaWduZWQgaV9lYV91aWQgOiAxOwkgCgl1
bnNpZ25lZCBpX2VhX2dpZCA6IDE7CSAKCXVuc2lnbmVkIGlfZGlydHkgOiAxOwoJc3RydWN0IHNl
bWFwaG9yZSBpX3NlbTsJIAoJbG9mZl90ICoqaV9yZGRpcl9vZmY7Cn07CgoKCgoKCgoKCgoKCgog
CiAKCgoKCgojIDI1OSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1
ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGlu
dXgvaW5jbHVkZS9saW51eC9udGZzX2ZzX2kuaCIgMQoKCgogCnN0cnVjdCBudGZzX2F0dHJpYnV0
ZTsKc3RydWN0IG50ZnNfc2JfaW5mbzsKCiAKCgp0eXBlZGVmIHU4ICBudGZzX3U4Owp0eXBlZGVm
IHUxNiBudGZzX3UxNjsKdHlwZWRlZiB1MzIgbnRmc191MzI7CnR5cGVkZWYgdTY0IG50ZnNfdTY0
Owp0eXBlZGVmIHM4ICBudGZzX3M4Owp0eXBlZGVmIHMxNiBudGZzX3MxNjsKdHlwZWRlZiBzMzIg
bnRmc19zMzI7CnR5cGVkZWYgczY0IG50ZnNfczY0OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF9tb2Rl
X3QgbnRtb2RlX3Q7CgoKCnR5cGVkZWYgdWlkX3QgbnRmc191aWRfdDsKCgoKdHlwZWRlZiBnaWRf
dCBudGZzX2dpZF90OwoKCgp0eXBlZGVmIF9fa2VybmVsX3NpemVfdCBudGZzX3NpemVfdDsKCgoK
dHlwZWRlZiBfX2tlcm5lbF90aW1lX3QgbnRmc190aW1lX3Q7CgoKIAoKCnR5cGVkZWYgdW5zaWdu
ZWQgc2hvcnQgICAgIG50ZnNfd2NoYXJfdDsKCiAKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9u
ZyBudGZzX29mZnNldF90OwoKIAoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIG50ZnNfdGlt
ZTY0X3Q7CgogCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgbnRmc19jbHVzdGVyX3Q7CgoKIApzdHJ1
Y3QgbnRmc19pbm9kZV9pbmZvewoJdW5zaWduZWQgbG9uZyBtbXVfcHJpdmF0ZTsKCXN0cnVjdCBu
dGZzX3NiX2luZm8gKnZvbDsKCWludCBpX251bWJlcjsgICAgICAgICAgICAgICAgIAoJdW5zaWdu
ZWQgc2VxdWVuY2VfbnVtYmVyOwoJdW5zaWduZWQgY2hhciogYXR0cjsgICAgICAgICAgCglpbnQg
YXR0cl9jb3VudDsgICAgICAgICAgICAgICAKCXN0cnVjdCBudGZzX2F0dHJpYnV0ZSAqYXR0cnM7
CglpbnQgcmVjb3JkX2NvdW50OyAgICAgICAgICAgICAKCSAKCglpbnQgKnJlY29yZHM7Cgl1bmlv
bnsKCQlzdHJ1Y3R7CgkJCWludCByZWNvcmRzaXplOwoJCQlpbnQgY2x1c3RlcnNfcGVyX3JlY29y
ZDsKCQl9aW5kZXg7Cgl9IHU7CQp9OwoKCiMgMjYwICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51
eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlw
c2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21zZG9zX2ZzX2kuaCIgMQoKCgogCgoK
CnN0cnVjdCBtc2Rvc19pbm9kZV9pbmZvIHsKCXVuc2lnbmVkIGxvbmcgbW11X3ByaXZhdGU7Cglp
bnQgaV9zdGFydDsJIAoJaW50IGlfbG9nc3RhcnQ7CSAKCWludCBpX2F0dHJzOwkgCglpbnQgaV9j
dGltZV9tczsJIAoJaW50IGlfbG9jYXRpb247CSAKCXN0cnVjdCBpbm9kZSAqaV9mYXRfaW5vZGU7
CSAKCXN0cnVjdCBsaXN0X2hlYWQgaV9mYXRfaGFzaDsJIAp9OwoKCiMgMjYxICIvb3B0L2Nyb3Nz
ZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9v
cHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Vtc2Rvc19m
c19pLmgiIDEKCgoKCgoKCgoKCiAKIyA0MiAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3Jj
L2xpbnV4L2luY2x1ZGUvbGludXgvdW1zZG9zX2ZzX2kuaCIKCnN0cnVjdCBkaXJfbG9ja2luZ19p
bmZvIHsKCXdhaXRfcXVldWVfaGVhZF90IHA7CglzaG9ydCBpbnQgbG9va2luZzsJIAoJc2hvcnQg
aW50IGNyZWF0aW5nOwkgCgoKCglsb25nIHBpZDsJCSAKCn07CgpzdHJ1Y3QgdW1zZG9zX2lub2Rl
X2luZm8gewoJc3RydWN0IG1zZG9zX2lub2RlX2luZm8gbXNkb3NfaW5mbzsKCXN0cnVjdCBkaXJf
bG9ja2luZ19pbmZvIGRpcl9pbmZvOwoJaW50IGlfcGF0Y2hlZDsJCQkgCglpbnQgaV9pc19obGlu
azsJCQkgCgl1bnNpZ25lZCBsb25nIGlfZW1kX293bmVyOwkgCglvZmZfdCBwb3M7CQkJIAoJIAoJ
c3RydWN0IGRlbnRyeSAqaV9lbWRfZGVudHJ5OwkgCgl1bnNpZ25lZCBsb25nIGlfZW1kX2RpcjsJ
IAp9OwoKCiMgMjYyICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVk
ZS9saW51eC9mcy5oIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51
eC9pbmNsdWRlL2xpbnV4L2lzb19mc19pLmgiIDEKCgoKIAoKCnN0cnVjdCBpc29faW5vZGVfaW5m
byB7Cgl1bnNpZ25lZCBpbnQgaV9maXJzdF9leHRlbnQ7Cgl1bnNpZ25lZCBjaGFyIGlfZmlsZV9m
b3JtYXQ7Cgl1bnNpZ25lZCBsb25nIGlfbmV4dF9zZWN0aW9uX2lubzsKCW9mZl90IGlfc2VjdGlv
bl9zaXplOwp9OwoKCiMgMjYzICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgv
aW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3Ny
Yy9saW51eC9pbmNsdWRlL2xpbnV4L25mc19mc19pLmgiIDEKCgoKIyAxICIvb3B0L2Nyb3NzZGV2
L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9uZnMuaCIgMQogCgoKCgoKCgoK
IyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9z
dW5ycGMvbXNnX3Byb3QuaCIgMQogCgoKCgoKCgoKCgoKCmVudW0gcnBjX2F1dGhfZmxhdm9yIHsK
CVJQQ19BVVRIX05VTEwgID0gMCwKCVJQQ19BVVRIX1VOSVggID0gMSwKCVJQQ19BVVRIX1NIT1JU
ID0gMiwKCVJQQ19BVVRIX0RFUyAgID0gMywKCVJQQ19BVVRIX0tSQiAgID0gNCwKfTsKCmVudW0g
cnBjX21zZ190eXBlIHsKCVJQQ19DQUxMID0gMCwKCVJQQ19SRVBMWSA9IDEKfTsKCmVudW0gcnBj
X3JlcGx5X3N0YXQgewoJUlBDX01TR19BQ0NFUFRFRCA9IDAsCglSUENfTVNHX0RFTklFRCA9IDEK
fTsKCmVudW0gcnBjX2FjY2VwdF9zdGF0IHsKCVJQQ19TVUNDRVNTID0gMCwKCVJQQ19QUk9HX1VO
QVZBSUwgPSAxLAoJUlBDX1BST0dfTUlTTUFUQ0ggPSAyLAoJUlBDX1BST0NfVU5BVkFJTCA9IDMs
CglSUENfR0FSQkFHRV9BUkdTID0gNCwKCVJQQ19TWVNURU1fRVJSID0gNQp9OwoKZW51bSBycGNf
cmVqZWN0X3N0YXQgewoJUlBDX01JU01BVENIID0gMCwKCVJQQ19BVVRIX0VSUk9SID0gMQp9OwoK
ZW51bSBycGNfYXV0aF9zdGF0IHsKCVJQQ19BVVRIX09LID0gMCwKCVJQQ19BVVRIX0JBRENSRUQg
PSAxLAoJUlBDX0FVVEhfUkVKRUNURURDUkVEID0gMiwKCVJQQ19BVVRIX0JBRFZFUkYgPSAzLAoJ
UlBDX0FVVEhfUkVKRUNURURWRVJGID0gNCwKCVJQQ19BVVRIX1RPT1dFQUsgPSA1Cn07CgoKCgoK
CgoKCiMgMTAgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xp
bnV4L25mcy5oIiAyCgoKCgoKCgoKCgoKCgoKCgoKCgoJCiAKCgoKCgoKCiBlbnVtIG5mc19zdGF0
IHsKCU5GU19PSyA9IDAsCQkJIAoJTkZTRVJSX1BFUk0gPSAxLAkJIAoJTkZTRVJSX05PRU5UID0g
MiwJCSAKCU5GU0VSUl9JTyA9IDUsCQkJIAoJTkZTRVJSX05YSU8gPSA2LAkJIAoJTkZTRVJSX0VB
R0FJTiA9IDExLAkJIAoJTkZTRVJSX0FDQ0VTID0gMTMsCQkgCglORlNFUlJfRVhJU1QgPSAxNywJ
CSAKCU5GU0VSUl9YREVWID0gMTgsCQkgCglORlNFUlJfTk9ERVYgPSAxOSwJCSAKCU5GU0VSUl9O
T1RESVIgPSAyMCwJCSAKCU5GU0VSUl9JU0RJUiA9IDIxLAkJIAoJTkZTRVJSX0lOVkFMID0gMjIs
CQkgCglORlNFUlJfRkJJRyA9IDI3LAkJIAoJTkZTRVJSX05PU1BDID0gMjgsCQkgCglORlNFUlJf
Uk9GUyA9IDMwLAkJIAoJTkZTRVJSX01MSU5LID0gMzEsCQkgCglORlNFUlJfT1BOT1RTVVBQID0g
NDUsCQkgCglORlNFUlJfTkFNRVRPT0xPTkcgPSA2MywJIAoJTkZTRVJSX05PVEVNUFRZID0gNjYs
CQkgCglORlNFUlJfRFFVT1QgPSA2OSwJCSAKCU5GU0VSUl9TVEFMRSA9IDcwLAkJIAoJTkZTRVJS
X1JFTU9URSA9IDcxLAkJIAoJTkZTRVJSX1dGTFVTSCA9IDk5LAkJIAoJTkZTRVJSX0JBREhBTkRM
RSA9IDEwMDAxLAkgCglORlNFUlJfTk9UX1NZTkMgPSAxMDAwMiwJIAoJTkZTRVJSX0JBRF9DT09L
SUUgPSAxMDAwMywJIAoJTkZTRVJSX05PVFNVUFAgPSAxMDAwNCwJCSAKCU5GU0VSUl9UT09TTUFM
TCA9IDEwMDA1LAkgCglORlNFUlJfU0VSVkVSRkFVTFQgPSAxMDAwNiwJIAoJTkZTRVJSX0JBRFRZ
UEUgPSAxMDAwNywJCSAKCU5GU0VSUl9KVUtFQk9YID0gMTAwMDgJCSAKIH07CiAKIAoKZW51bSBu
ZnNfZnR5cGUgewoJTkZOT04gPSAwLAoJTkZSRUcgPSAxLAoJTkZESVIgPSAyLAoJTkZCTEsgPSAz
LAoJTkZDSFIgPSA0LAoJTkZMTksgPSA1LAoJTkZTT0NLID0gNiwKCU5GQkFEID0gNywKCU5GRklG
TyA9IDgKfTsKCnN0cnVjdCBuZnNfZmggewoJY2hhcgkJCWRhdGFbMzJdOwp9OwoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgpleHRlcm4gc3RydWN0IHJwY19wcm9ncmFt
CW5mc19wcm9ncmFtOwpleHRlcm4gc3RydWN0IHJwY19zdGF0CQluZnNfcnBjc3RhdDsKCnN0cnVj
dCBuZnNfdGltZSB7CglfX3UzMgkJCXNlY29uZHM7CglfX3UzMgkJCXVzZWNvbmRzOwp9OwoKc3Ry
dWN0IG5mc19mYXR0ciB7CgllbnVtIG5mc19mdHlwZQkJdHlwZTsKCV9fdTMyCQkJbW9kZTsKCV9f
dTMyCQkJbmxpbms7CglfX3UzMgkJCXVpZDsKCV9fdTMyCQkJZ2lkOwoJX191MzIJCQlzaXplOwoJ
X191MzIJCQlibG9ja3NpemU7CglfX3UzMgkJCXJkZXY7CglfX3UzMgkJCWJsb2NrczsKCV9fdTMy
CQkJZnNpZDsKCV9fdTMyCQkJZmlsZWlkOwoJc3RydWN0IG5mc190aW1lCQlhdGltZTsKCXN0cnVj
dCBuZnNfdGltZQkJbXRpbWU7CglzdHJ1Y3QgbmZzX3RpbWUJCWN0aW1lOwp9OwoKc3RydWN0IG5m
c19mc2luZm8gewoJX191MzIJCQl0c2l6ZTsKCV9fdTMyCQkJYnNpemU7CglfX3UzMgkJCWJsb2Nr
czsKCV9fdTMyCQkJYmZyZWU7CglfX3UzMgkJCWJhdmFpbDsKfTsKCiAKCgoKCmVudW0gbmZzM19z
dGFibGVfaG93IHsKCU5GU19VTlNUQUJMRSA9IDAsCglORlNfREFUQV9TWU5DID0gMSwKCU5GU19G
SUxFX1NZTkMgPSAyCn07CgpzdHJ1Y3QgbmZzX3dyaXRlYXJncyB7CglzdHJ1Y3QgbmZzX2ZoICoJ
CWZoOwoJX191MzIJCQlvZmZzZXQ7CglfX3UzMgkJCWNvdW50OwoJZW51bSBuZnMzX3N0YWJsZV9o
b3cJc3RhYmxlOwoJdW5zaWduZWQgaW50CQlucmlvdjsKCXN0cnVjdCBpb3ZlYwkJaW92WzhdOwp9
OwoKc3RydWN0IG5mc193cml0ZXZlcmYgewoJZW51bSBuZnMzX3N0YWJsZV9ob3cJY29tbWl0dGVk
OwoJX191MzIJCQl2ZXJpZmllclsyXTsKfTsKCnN0cnVjdCBuZnNfd3JpdGVyZXMgewoJc3RydWN0
IG5mc19mYXR0ciAqCWZhdHRyOwoJc3RydWN0IG5mc193cml0ZXZlcmYgKgl2ZXJmOwoJX191MzIJ
CQljb3VudDsKfTsKCgojIDI2OCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4
L2luY2x1ZGUvbGludXgvbmZzLmgiCgoKCiMgNCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgv
c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbmZzX2ZzX2kuaCIgMgoKCgogCgoKc3RydWN0IG5mc19p
bm9kZV9pbmZvIHsKCSAKCgoJX191MzIgZnNpZDsKCV9fdTMyIGZpbGVpZDsKCgkgCgoKCXVuc2ln
bmVkIHNob3J0CQlmbGFnczsKCgkgCiMgMzkgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3Ny
Yy9saW51eC9pbmNsdWRlL2xpbnV4L25mc19mc19pLmgiCgl1bnNpZ25lZCBsb25nCQlyZWFkX2Nh
Y2hlX2ppZmZpZXM7Cgl1bnNpZ25lZCBsb25nCQlyZWFkX2NhY2hlX210aW1lOwoJdW5zaWduZWQg
bG9uZwkJYXR0cnRpbWVvOwoKCSAKCgoJc3RydWN0IGxpc3RfaGVhZAlkaXJ0eTsKCXN0cnVjdCBs
aXN0X2hlYWQJY29tbWl0OwoJc3RydWN0IGxpc3RfaGVhZAl3cml0ZWJhY2s7CgoJdW5zaWduZWQg
aW50CQluZGlydHksCgkJCQluY29tbWl0LAoJCQkJbnBhZ2VzOwoKCSAKCXN0cnVjdCBpbm9kZQkJ
Kmhhc2hfbmV4dCwKCQkJCSpoYXNoX3ByZXY7Cgl1bnNpZ25lZCBsb25nCQluZXh0c2NhbjsKCgkg
Cgl2b2lkICpjb29raWVzOwoJdTMyIGRpcmVvZjsKfTsKCiAKCgoKCgoKIAoKCnN0cnVjdCBuZnNf
bG9ja19pbmZvIHsKCXUzMgkJc3RhdGU7Cgl1MzIJCWZsYWdzOwp9OwoKIAoKCgoKCiMgMjY0ICIv
b3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAy
CgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4
L3N5c3ZfZnNfaS5oIiAxCgoKCiAKCgpzdHJ1Y3Qgc3lzdl9pbm9kZV9pbmZvIHsKCXUzMiBpX2Rh
dGFbMTArMSsxKzFdOwkgCgoKCgp9OwoKCgojIDI2NSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGlu
dXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21p
cHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9hZmZzX2ZzX2kuaCIgMQoKCgojIDEg
Ii9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2Eub3V0
LmgiIDEKCgoKCgoKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2lu
Y2x1ZGUvYXNtL2Eub3V0LmgiIDEKCgoKc3RydWN0IGV4ZWMKewogIHVuc2lnbmVkIGxvbmcgYV9p
bmZvOwkJIAogIHVuc2lnbmVkIGFfdGV4dDsJCSAKICB1bnNpZ25lZCBhX2RhdGE7CQkgCiAgdW5z
aWduZWQgYV9ic3M7CQkgCiAgdW5zaWduZWQgYV9zeW1zOwkJIAogIHVuc2lnbmVkIGFfZW50cnk7
CQkgCiAgdW5zaWduZWQgYV90cnNpemU7CQkgCiAgdW5zaWduZWQgYV9kcnNpemU7CQkgCn07CgoK
CgoKCgoKCgoKCiMgOCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1
ZGUvbGludXgvYS5vdXQuaCIgMgoKCgoKIAplbnVtIG1hY2hpbmVfdHlwZSB7CgoKCiAgTV9PTERT
VU4yID0gMCwKCgoKCiAgTV82ODAxMCA9IDEsCgoKCgogIE1fNjgwMjAgPSAyLAoKCgoKICBNX1NQ
QVJDID0gMywKCiAgIAogIE1fMzg2ID0gMTAwLAogIE1fTUlQUzEgPSAxNTEsCSAKICBNX01JUFMy
ID0gMTUyCQkgCn07CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiAKCiAKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoMCgpzdHJ1Y3Qgbmxpc3QgewogIHVuaW9uIHsKICAgIGNo
YXIgKm5fbmFtZTsKICAgIHN0cnVjdCBubGlzdCAqbl9uZXh0OwogICAgbG9uZyBuX3N0cng7CiAg
fSBuX3VuOwogIHVuc2lnbmVkIGNoYXIgbl90eXBlOwogIGNoYXIgbl9vdGhlcjsKICBzaG9ydCBu
X2Rlc2M7CiAgdW5zaWduZWQgbG9uZyBuX3ZhbHVlOwp9OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCgoKCgogCiMgMjE5ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9z
cmMvbGludXgvaW5jbHVkZS9saW51eC9hLm91dC5oIgoKIAoKCgoKCiAKCgwKCiAKCgoKCnN0cnVj
dCByZWxvY2F0aW9uX2luZm8KewogICAKICBpbnQgcl9hZGRyZXNzOwogICAKICB1bnNpZ25lZCBp
bnQgcl9zeW1ib2xudW06MjQ7CiAgIAoKCiAgdW5zaWduZWQgaW50IHJfcGNyZWw6MTsKICAgCgog
IHVuc2lnbmVkIGludCByX2xlbmd0aDoyOwogICAKCgoKCgogIHVuc2lnbmVkIGludCByX2V4dGVy
bjoxOwogICAKCgoKCgoKICB1bnNpZ25lZCBpbnQgcl9wYWQ6NDsKCn07CgoKCgojIDQgIi9vcHQv
Y3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2FmZnNfZnNfaS5o
IiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xp
bnV4L3RpbWUuaCIgMQoKCgoKCgoKCnN0cnVjdCB0aW1lc3BlYyB7Cgl0aW1lX3QJdHZfc2VjOwkJ
IAoJbG9uZwl0dl9uc2VjOwkgCn07CgoKIAojIDI3ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51
eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC90aW1lLmgiCgoKc3RhdGljIF9faW5saW5lX18gdW5z
aWduZWQgbG9uZwp0aW1lc3BlY190b19qaWZmaWVzKHN0cnVjdCB0aW1lc3BlYyAqdmFsdWUpCnsK
CXVuc2lnbmVkIGxvbmcgc2VjID0gdmFsdWUtPnR2X3NlYzsKCWxvbmcgbnNlYyA9IHZhbHVlLT50
dl9uc2VjOwoKCWlmIChzZWMgPj0gKCgofjBVTCA+PiAxKS0xKSAvIDEwMCkpCgkJcmV0dXJuICgo
fjBVTCA+PiAxKS0xKTsKCW5zZWMgKz0gMTAwMDAwMDAwMEwgLyAxMDAgLSAxOwoJbnNlYyAvPSAx
MDAwMDAwMDAwTCAvIDEwMDsKCXJldHVybiAxMDAgKiBzZWMgKyBuc2VjOwp9CgpzdGF0aWMgX19p
bmxpbmVfXyB2b2lkCmppZmZpZXNfdG9fdGltZXNwZWModW5zaWduZWQgbG9uZyBqaWZmaWVzLCBz
dHJ1Y3QgdGltZXNwZWMgKnZhbHVlKQp7Cgl2YWx1ZS0+dHZfbnNlYyA9IChqaWZmaWVzICUgMTAw
KSAqICgxMDAwMDAwMDAwTCAvIDEwMCk7Cgl2YWx1ZS0+dHZfc2VjID0gamlmZmllcyAvIDEwMDsK
fQogCnN0cnVjdCB0aW1ldmFsIHsKCXRpbWVfdAkJdHZfc2VjOwkJIAoJc3VzZWNvbmRzX3QJdHZf
dXNlYzsJIAp9OwoKc3RydWN0IHRpbWV6b25lIHsKCWludAl0el9taW51dGVzd2VzdDsJIAoJaW50
CXR6X2RzdHRpbWU7CSAKfTsKCgoKCmV4dGVybiB2b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3Qg
dGltZXZhbCAqdHYpOwpleHRlcm4gdm9pZCBkb19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwg
KnR2KTsKZXh0ZXJuIHZvaWQgZ2V0X2Zhc3RfdGltZShzdHJ1Y3QgdGltZXZhbCAqdHYpOwpleHRl
cm4gdm9pZCAoKmRvX2dldF9mYXN0X3RpbWUpKHN0cnVjdCB0aW1ldmFsICopOwoKCgoKCgoKCiAK
CgoKCgoKCnN0cnVjdCAgaXRpbWVyc3BlYyB7CiAgICAgICAgc3RydWN0ICB0aW1lc3BlYyBpdF9p
bnRlcnZhbDsgICAgIAogICAgICAgIHN0cnVjdCAgdGltZXNwZWMgaXRfdmFsdWU7ICAgICAgICAK
fTsKCnN0cnVjdAlpdGltZXJ2YWwgewoJc3RydWN0CXRpbWV2YWwgaXRfaW50ZXJ2YWw7CSAKCXN0
cnVjdAl0aW1ldmFsIGl0X3ZhbHVlOwkgCn07CgoKIyA1ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1s
aW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9hZmZzX2ZzX2kuaCIgMgoKCgoKCnN0cnVjdCBr
ZXlfY2FjaGUgewoJc3RydWN0IHRpbWV2YWwJIGtjX2xydV90aW1lOwkgCglzMzIJIGtjX2ZpcnN0
OwkJIAoJczMyCSBrY19sYXN0OwkJIAoJczMyCSBrY190aGlzX2tleTsJCSAKCWludAkga2NfdGhp
c19zZXE7CQkgCglzMzIJIGtjX25leHRfa2V5OwkJIAoJczMyCSBrY19rZXlzWzczXTsJIAp9OwoK
CgpzdHJ1Y3QgZXh0X2NhY2hlIHsKCXN0cnVjdCBrZXlfY2FjaGUgIGtjWzRdOwkgCglzMzIJIGVj
WygoMVVMIDw8IDEyKSAtIDQgKiBzaXplb2Yoc3RydWN0IGtleV9jYWNoZSkgLSA0KSAvIDRdOwkJ
IAoJaW50CSBtYXhfZXh0OwkJIAp9OwoKIAoKCnN0cnVjdCBhZmZzX2lub2RlX2luZm8gewoJdW5z
aWduZWQgbG9uZyBtbXVfcHJpdmF0ZTsKCXUzMgkgaV9wcm90ZWN0OwkJCSAKCXMzMgkgaV9wYXJl
bnQ7CQkJIAoJczMyCSBpX29yaWdpbmFsOwkJCSAKCXMzMgkgaV9kYXRhWzE2XTsJIAoJc3RydWN0
IGV4dF9jYWNoZSAqaV9lYzsJCQkgCglpbnQJIGlfY2FjaGVfdXNlcnM7CQkJIAoJaW50CSBpX2xh
c3RibG9jazsJCQkgCglzaG9ydAkgaV9wYV9jbnQ7CQkJIAoJc2hvcnQJIGlfcGFfbmV4dDsJCQkg
CglzaG9ydAkgaV9wYV9sYXN0OwkJCSAKCXNob3J0CSBpX3pvbmU7CQkJIAoJdW5zaWduZWQgY2hh
ciBpX2hsaW5rOwkJCSAKCXVuc2lnbmVkIGNoYXIgaV9wYWQ7Cn07CgoKIyAyNjYgIi9vcHQvY3Jv
c3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAi
L29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdWZzX2Zz
X2kuaCIgMQogCiMgMTIgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNs
dWRlL2xpbnV4L3Vmc19mc19pLmgiCgoKCgpzdHJ1Y3QgdWZzX2lub2RlX2luZm8gewoJdW5pb24g
ewoJCV9fdTMyCWlfZGF0YVsxNV07CgkJX191OAlpX3N5bWxpbmtbNCoxNV07Cgl9IGlfdTE7Cglf
X3U2NAlpX3NpemU7CglfX3UzMglpX2ZsYWdzOwoJX191MzIJaV9nZW47CglfX3UzMglpX3NoYWRv
dzsKCV9fdTMyCWlfdW51c2VkMTsKCV9fdTMyCWlfdW51c2VkMjsKCV9fdTMyCWlfb2VmdGZsYWc7
CglfX3UxNglpX29zeW5jOwoJX191MzIJaV9sYXN0ZnJhZzsKfTsKCgojIDI2NyAiL29wdC9jcm9z
c2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIv
b3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9lZnNfZnNf
aS5oIiAxCiAKCgoKCgoKCgoKCnR5cGVkZWYJaW50MzJfdAkJZWZzX2Jsb2NrX3Q7CnR5cGVkZWYg
dWludDMyX3QJZWZzX2lub190OwoKCgogCgoKdHlwZWRlZiB1bmlvbiBleHRlbnRfdSB7Cgl1bnNp
Z25lZCBjaGFyIHJhd1s4XTsKCXN0cnVjdCBleHRlbnRfcyB7CgkJdW5zaWduZWQgaW50CWV4X21h
Z2ljOjg7CSAKCQl1bnNpZ25lZCBpbnQJZXhfYm46MjQ7CSAKCQl1bnNpZ25lZCBpbnQJZXhfbGVu
Z3RoOjg7CSAKCQl1bnNpZ25lZCBpbnQJZXhfb2Zmc2V0OjI0OwkgCgl9IGNvb2tlZDsKfSBlZnNf
ZXh0ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgZWRldnMgewoJc2hvcnQJCW9kZXY7Cgl1bnNpZ25lZCBp
bnQJbmRldjsKfSBlZnNfZGV2czsKCiAKCgoKc3RydWN0CWVmc19kaW5vZGUgewoJdV9zaG9ydAkJ
ZGlfbW9kZTsJIAoJc2hvcnQJCWRpX25saW5rOwkgCgl1X3Nob3J0CQlkaV91aWQ7CQkgCgl1X3No
b3J0CQlkaV9naWQ7CQkgCglpbnQzMl90CQlkaV9zaXplOwkgCglpbnQzMl90CQlkaV9hdGltZTsJ
IAoJaW50MzJfdAkJZGlfbXRpbWU7CSAKCWludDMyX3QJCWRpX2N0aW1lOwkgCgl1aW50MzJfdAlk
aV9nZW47CQkgCglzaG9ydAkJZGlfbnVtZXh0ZW50czsJIAoJdV9jaGFyCQlkaV92ZXJzaW9uOwkg
Cgl1X2NoYXIJCWRpX3NwYXJlOwkgCgl1bmlvbiBkaV9hZGRyIHsKCQllZnNfZXh0ZW50CWRpX2V4
dGVudHNbMTJdOwoJCWVmc19kZXZzCWRpX2RldjsJIAoJfSBkaV91Owp9OwoKIApzdHJ1Y3QgZWZz
X2lub2RlX2luZm8gewoJaW50CQludW1leHRlbnRzOwoJaW50CQlsYXN0ZXh0ZW50OwoKCWVmc19l
eHRlbnQJZXh0ZW50c1sxMl07Cn07CgoKCiMgMjY4ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51
eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlw
c2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NvZGFfZnNfaS5oIiAxCiAKCgoKCgoK
CgoKCgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9s
aW51eC9jb2RhLmgiIDEKIAoKCgoKIAojIDIyICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9z
cmMvbGludXgvaW5jbHVkZS9saW51eC9jb2RhLmgiCgogCiMgNTEgIi9vcHQvY3Jvc3NkZXYvbWlw
c2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2NvZGEuaCIKCiAKCgoKCgoKCgoKCgog
CgoKCgoKCgoKCiMgOTkgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNs
dWRlL2xpbnV4L2NvZGEuaCIKCgoKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVf
cXVhZF90OwoKCgoKCgoKCgoKCgoKIyAxMzEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3Ny
Yy9saW51eC9pbmNsdWRlL2xpbnV4L2NvZGEuaCIKCgogCgoKCgoKCiAKCgoKCgoKCgogIAoKCgog
CgoKCgoKCgoKCgpzdHJ1Y3QgdmVudXNfZGlyZW50IHsKICAgICAgICB1bnNpZ25lZCBsb25nCWRf
ZmlsZW5vOwkJIAogICAgICAgIHVuc2lnbmVkIHNob3J0CWRfcmVjbGVuOwkJIAogICAgICAgIHVu
c2lnbmVkIGNoYXIgCWRfdHlwZTsJCQkgCiAgICAgICAgdW5zaWduZWQgY2hhcglkX25hbWxlbjsJ
CSAKICAgICAgICBjaGFyCQlkX25hbWVbMjU1ICsgMV07IAp9OwoKCgoKIAoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKCnR5cGVkZWYgdV9sb25nIFZvbHVtZUlkOwp0eXBlZGVmIHVfbG9uZyBWbm9kZUlk
Owp0eXBlZGVmIHVfbG9uZyBVbmlxdWVfdDsKdHlwZWRlZiB1X2xvbmcgRmlsZVZlcnNpb247CgoK
Cgp0eXBlZGVmIHN0cnVjdCBWaWNlRmlkIHsKICAgIFZvbHVtZUlkIFZvbHVtZTsKICAgIFZub2Rl
SWQgVm5vZGU7CiAgICBVbmlxdWVfdCBVbmlxdWU7Cn0gVmljZUZpZDsKCgoKCnN0YXRpYyBfX2lu
bGluZV9fIGlub190ICBjb2RhX2YyaShzdHJ1Y3QgVmljZUZpZCAqZmlkKQp7CglpZiAoICEgZmlk
ICkgCgkJcmV0dXJuIDA7IAoJaWYgKGZpZC0+Vm5vZGUgPT0gMHhmZmZmZmZmZSB8fCBmaWQtPlZu
b2RlID09IDB4ZmZmZmZmZmYpCgkJcmV0dXJuICgoZmlkLT5Wb2x1bWUgPDwgMjApIHwgKGZpZC0+
VW5pcXVlICYgMHhmZmZmZikpOwoJZWxzZQoJCXJldHVybiAoZmlkLT5VbmlxdWUgKyAoZmlkLT5W
bm9kZTw8MTApICsgKGZpZC0+Vm9sdW1lPDwyMCkpOwp9CgkKCgoKCgoKCgp0eXBlZGVmIHVfaW50
MzJfdCB2dWlkX3Q7CnR5cGVkZWYgdV9pbnQzMl90IHZnaWRfdDsKCgoKCnN0cnVjdCBjb2RhX2Ny
ZWQgewogICAgdnVpZF90IGNyX3VpZCwgY3JfZXVpZCwgY3Jfc3VpZCwgY3JfZnN1aWQ7ICAKICAg
IHZnaWRfdCBjcl9ncm91cGlkLCAgICAgY3JfZWdpZCwgY3Jfc2dpZCwgY3JfZnNnaWQ7ICAKfTsK
CgoKCiAKCgplbnVtIGNvZGFfdnR5cGUJeyBDX1ZOT04sIENfVlJFRywgQ19WRElSLCBDX1ZCTEss
IENfVkNIUiwgQ19WTE5LLCBDX1ZTT0NLLCBDX1ZGSUZPLCBDX1ZCQUQgfTsKCnN0cnVjdCBjb2Rh
X3ZhdHRyIHsKCWxvbmcgICAgIAl2YV90eXBlOwkgCgl1X3Nob3J0CQl2YV9tb2RlOwkgCglzaG9y
dAkJdmFfbmxpbms7CSAKCXZ1aWRfdAkJdmFfdWlkOwkJIAoJdmdpZF90CQl2YV9naWQ7CQkgCgls
b25nCQl2YV9maWxlaWQ7CSAKCXVfcXVhZF90CXZhX3NpemU7CSAKCWxvbmcJCXZhX2Jsb2Nrc2l6
ZTsJIAoJc3RydWN0IHRpbWVzcGVjCXZhX2F0aW1lOwkgCglzdHJ1Y3QgdGltZXNwZWMJdmFfbXRp
bWU7CSAKCXN0cnVjdCB0aW1lc3BlYwl2YV9jdGltZTsJIAoJdV9sb25nCQl2YV9nZW47CQkgCgl1
X2xvbmcJCXZhX2ZsYWdzOwkgCgl1X3F1YWRfdAkgICAgICAgIHZhX3JkZXY7CSAKCXVfcXVhZF90
CXZhX2J5dGVzOwkgCgl1X3F1YWRfdAl2YV9maWxlcmV2OwkgCn07CgoKCiAKc3RydWN0IGNvZGFf
c3RhdGZzIHsKICAgIGludDMyX3QgZl9ibG9ja3M7CiAgICBpbnQzMl90IGZfYmZyZWU7CiAgICBp
bnQzMl90IGZfYmF2YWlsOwogICAgaW50MzJfdCBmX2ZpbGVzOwogICAgaW50MzJfdCBmX2ZmcmVl
Owp9OwoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCnN0cnVjdCBjb2RhX2luX2hkciB7CiAgICB1bnNpZ25lZCBsb25nIG9wY29kZTsK
ICAgIHVuc2lnbmVkIGxvbmcgdW5pcXVlOwkgICAgIAogICAgdV9zaG9ydCBwaWQ7CQkgICAgIAog
ICAgdV9zaG9ydCBwZ2lkOwkJICAgICAKICAgIHVfc2hvcnQgc2lkOyAgICAgICAgICAgICAgICAg
ICAgIAogICAgc3RydWN0IGNvZGFfY3JlZCBjcmVkOwkgICAgIAp9OwoKIApzdHJ1Y3QgY29kYV9v
dXRfaGRyIHsKICAgIHVuc2lnbmVkIGxvbmcgb3Bjb2RlOwogICAgdW5zaWduZWQgbG9uZyB1bmlx
dWU7CQogICAgdW5zaWduZWQgbG9uZyByZXN1bHQ7Cn07CgogCnN0cnVjdCBjb2RhX3Jvb3Rfb3V0
IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBWaWNlRmlkIFZGaWQ7Cn07CgpzdHJ1
Y3QgY29kYV9yb290X2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpbjsKfTsKCiAKIAoKIApz
dHJ1Y3QgY29kYV9vcGVuX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VG
aWQJVkZpZDsKICAgIGludAlmbGFnczsKfTsKCnN0cnVjdCBjb2RhX29wZW5fb3V0IHsKICAgIHN0
cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICB1X3F1YWRfdAlkZXY7CiAgICBpbm9fdAlpbm9kZTsK
fTsKCgogCnN0cnVjdCBjb2RhX2Nsb3NlX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsK
ICAgIFZpY2VGaWQJVkZpZDsKICAgIGludAlmbGFnczsKfTsKCnN0cnVjdCBjb2RhX2Nsb3NlX291
dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCiAKc3RydWN0IGNvZGFfaW9jdGxf
aW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50
CWNtZDsKICAgIGludAlsZW47CiAgICBpbnQJcndmbGFnOwogICAgY2hhciAqZGF0YTsJCQkgCn07
CgpzdHJ1Y3QgY29kYV9pb2N0bF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAg
IGludAlsZW47CiAgICBjYWRkcl90CWRhdGE7CQkgCn07CgoKIApzdHJ1Y3QgY29kYV9nZXRhdHRy
X2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgVkZpZDsKfTsKCnN0
cnVjdCBjb2RhX2dldGF0dHJfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBz
dHJ1Y3QgY29kYV92YXR0ciBhdHRyOwp9OwoKCiAKc3RydWN0IGNvZGFfc2V0YXR0cl9pbiB7CiAg
ICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBzdHJ1Y3QgY29k
YV92YXR0ciBhdHRyOwp9OwoKc3RydWN0IGNvZGFfc2V0YXR0cl9vdXQgewogICAgc3RydWN0IGNv
ZGFfb3V0X2hkciBvdXQ7Cn07CgogCnN0cnVjdCBjb2RhX2FjY2Vzc19pbiB7CiAgICBzdHJ1Y3Qg
Y29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkCVZGaWQ7CiAgICBpbnQJZmxhZ3M7Cn07CgpzdHJ1
Y3QgY29kYV9hY2Nlc3Nfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0Owp9OwoKCiAK
CgoKIApzdHJ1Y3QgIGNvZGFfbG9va3VwX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsK
ICAgIFZpY2VGaWQJVkZpZDsKICAgIGludCAgICAgICAgIG5hbWU7CQkgCiAgICBpbnQgICAgICAg
ICBmbGFnczsJCn07CgpzdHJ1Y3QgY29kYV9sb29rdXBfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291
dF9oZHIgb2g7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQJdnR5cGU7Cn07CgoKIApzdHJ1Y3Qg
Y29kYV9jcmVhdGVfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBW
RmlkOwogICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKICAgIGludCBleGNsOwogICAgaW50IG1v
ZGU7CiAgICBpbnQgCW5hbWU7CQkgCn07CgpzdHJ1Y3QgY29kYV9jcmVhdGVfb3V0IHsKICAgIHN0
cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBzdHJ1Y3QgY29kYV92
YXR0ciBhdHRyOwp9OwoKCiAKc3RydWN0IGNvZGFfcmVtb3ZlX2luIHsKICAgIHN0cnVjdCBjb2Rh
X2luX2hkciBpaDsKICAgIFZpY2VGaWQJVkZpZDsKICAgIGludCBuYW1lOwkJIAp9OwoKc3RydWN0
IGNvZGFfcmVtb3ZlX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCiAKc3Ry
dWN0IGNvZGFfbGlua19pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlk
IHNvdXJjZUZpZDsgICAgICAgICAgIAogICAgVmljZUZpZCBkZXN0RmlkOyAgICAgICAgICAgICAK
ICAgIGludCB0bmFtZTsJCSAKfTsKCnN0cnVjdCBjb2RhX2xpbmtfb3V0IHsKICAgIHN0cnVjdCBj
b2RhX291dF9oZHIgb3V0Owp9OwoKCiAKc3RydWN0IGNvZGFfcmVuYW1lX2luIHsKICAgIHN0cnVj
dCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQJc291cmNlRmlkOwogICAgaW50IAlzcmNuYW1l
OwogICAgVmljZUZpZCBkZXN0RmlkOwogICAgaW50IAlkZXN0bmFtZTsKfTsKCnN0cnVjdCBjb2Rh
X3JlbmFtZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgogCnN0cnVjdCBj
b2RhX21rZGlyX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQJVkZp
ZDsKICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CiAgICBpbnQJICAgbmFtZTsJCSAKfTsKCnN0
cnVjdCBjb2RhX21rZGlyX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgVmlj
ZUZpZCBWRmlkOwogICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKfTsKCgogCnN0cnVjdCBjb2Rh
X3JtZGlyX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQJVkZpZDsK
ICAgIGludCBuYW1lOwkJIAp9OwoKc3RydWN0IGNvZGFfcm1kaXJfb3V0IHsKICAgIHN0cnVjdCBj
b2RhX291dF9oZHIgb3V0Owp9OwoKIApzdHJ1Y3QgY29kYV9yZWFkZGlyX2luIHsKICAgIHN0cnVj
dCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQJVkZpZDsKICAgIGludAljb3VudDsKICAgIGlu
dAlvZmZzZXQ7Cn07CgpzdHJ1Y3QgY29kYV9yZWFkZGlyX291dCB7CiAgICBzdHJ1Y3QgY29kYV9v
dXRfaGRyIG9oOwogICAgaW50CXNpemU7CiAgICBjYWRkcl90CWRhdGE7CQkgCn07CgogCnN0cnVj
dCBjb2RhX3N5bWxpbmtfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZp
ZAlWRmlkOyAgICAgICAgICAgCiAgICBpbnQgc3JjbmFtZTsKICAgIHN0cnVjdCBjb2RhX3ZhdHRy
IGF0dHI7CiAgICBpbnQgdG5hbWU7Cn07CgpzdHJ1Y3QgY29kYV9zeW1saW5rX291dCB7CiAgICBz
dHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCiAKc3RydWN0IGNvZGFfcmVhZGxpbmtfaW4gewog
ICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwp9OwoKc3RydWN0IGNv
ZGFfcmVhZGxpbmtfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBpbnQJY291
bnQ7CiAgICBjYWRkcl90CWRhdGE7CQkgCn07CgoKIApzdHJ1Y3QgY29kYV9mc3luY19pbiB7CiAg
ICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7Cn07CgpzdHJ1Y3QgY29k
YV9mc3luY19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgogCnN0cnVjdCBj
b2RhX2luYWN0aXZlX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQg
VkZpZDsKfTsKCiAKc3RydWN0IGNvZGFfdmdldF9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIg
aWg7CiAgICBWaWNlRmlkIFZGaWQ7Cn07CgpzdHJ1Y3QgY29kYV92Z2V0X291dCB7CiAgICBzdHJ1
Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50CXZ0eXBlOwp9OwoK
CiAKIAogCgogCiAKc3RydWN0IGNvZGFfcHVyZ2V1c2VyX291dCB7CiAgICBzdHJ1Y3QgY29kYV9v
dXRfaGRyIG9oOwogICAgc3RydWN0IGNvZGFfY3JlZCBjcmVkOwp9OwoKIAogCnN0cnVjdCBjb2Rh
X3phcGZpbGVfb3V0IHsgIAogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQg
Q29kYUZpZDsKfTsKCiAKIAkKc3RydWN0IGNvZGFfemFwZGlyX291dCB7CSAgCiAgICBzdHJ1Y3Qg
Y29kYV9vdXRfaGRyIG9oOwogICAgVmljZUZpZCBDb2RhRmlkOwp9OwoKIAogCQpzdHJ1Y3QgY29k
YV96YXB2bm9kZV9vdXQgeyAKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBzdHJ1Y3Qg
Y29kYV9jcmVkIGNyZWQ7CiAgICBWaWNlRmlkIFZGaWQ7Cn07CgogCiAJCnN0cnVjdCBjb2RhX3B1
cmdlZmlkX291dCB7IAogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQgQ29k
YUZpZDsKfTsKCnN0cnVjdCBjb2RhX21ha2VfY2lub2RlX291dCB7CiAgICBzdHJ1Y3QgY29kYV9v
dXRfaGRyIG9oOwogICAgVmljZUZpZCBDb2RhRmlkOwogICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0
cjsKICAgIGludCBmZDsKfTsKCiAKc3RydWN0IGNvZGFfcmR3cl9pbiB7CiAgICBzdHJ1Y3QgY29k
YV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkCVZGaWQ7CiAgICBpbnQJcndmbGFnOwogICAgaW50CWNv
dW50OwogICAgaW50CW9mZnNldDsKICAgIGludAlpb2ZsYWc7CiAgICBjYWRkcl90CWRhdGE7CQkg
CQp9OwoKc3RydWN0IGNvZGFfcmR3cl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsK
ICAgIGludAlyd2ZsYWc7CiAgICBpbnQJY291bnQ7CiAgICBjYWRkcl90CWRhdGE7CSAKfTsKCgog
CiAJCnN0cnVjdCBjb2RhX3JlcGxhY2Vfb3V0IHsgIAogICAgc3RydWN0IGNvZGFfb3V0X2hkciBv
aDsKICAgIFZpY2VGaWQgTmV3RmlkOwogICAgVmljZUZpZCBPbGRGaWQ7Cn07CgogCnN0cnVjdCBj
b2RhX29wZW5fYnlfcGF0aF9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNl
RmlkCVZGaWQ7CiAgICBpbnQJZmxhZ3M7Cn07CgpzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfb3V0
IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CglpbnQgcGF0aDsKfTsKCiAKc3RydWN0IGNv
ZGFfc3RhdGZzX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpbjsKfTsKCnN0cnVjdCBjb2Rh
X3N0YXRmc19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIHN0cnVjdCBjb2Rh
X3N0YXRmcyBzdGF0Owp9OwoKIAoKCgoKCgp1bmlvbiBpbnB1dEFyZ3MgewogICAgc3RydWN0IGNv
ZGFfaW5faGRyIGloOwkJIAogICAgc3RydWN0IGNvZGFfb3Blbl9pbiBjb2RhX29wZW47CiAgICBz
dHJ1Y3QgY29kYV9jbG9zZV9pbiBjb2RhX2Nsb3NlOwogICAgc3RydWN0IGNvZGFfaW9jdGxfaW4g
Y29kYV9pb2N0bDsKICAgIHN0cnVjdCBjb2RhX2dldGF0dHJfaW4gY29kYV9nZXRhdHRyOwogICAg
c3RydWN0IGNvZGFfc2V0YXR0cl9pbiBjb2RhX3NldGF0dHI7CiAgICBzdHJ1Y3QgY29kYV9hY2Nl
c3NfaW4gY29kYV9hY2Nlc3M7CiAgICBzdHJ1Y3QgY29kYV9sb29rdXBfaW4gY29kYV9sb29rdXA7
CiAgICBzdHJ1Y3QgY29kYV9jcmVhdGVfaW4gY29kYV9jcmVhdGU7CiAgICBzdHJ1Y3QgY29kYV9y
ZW1vdmVfaW4gY29kYV9yZW1vdmU7CiAgICBzdHJ1Y3QgY29kYV9saW5rX2luIGNvZGFfbGluazsK
ICAgIHN0cnVjdCBjb2RhX3JlbmFtZV9pbiBjb2RhX3JlbmFtZTsKICAgIHN0cnVjdCBjb2RhX21r
ZGlyX2luIGNvZGFfbWtkaXI7CiAgICBzdHJ1Y3QgY29kYV9ybWRpcl9pbiBjb2RhX3JtZGlyOwog
ICAgc3RydWN0IGNvZGFfcmVhZGRpcl9pbiBjb2RhX3JlYWRkaXI7CiAgICBzdHJ1Y3QgY29kYV9z
eW1saW5rX2luIGNvZGFfc3ltbGluazsKICAgIHN0cnVjdCBjb2RhX3JlYWRsaW5rX2luIGNvZGFf
cmVhZGxpbms7CiAgICBzdHJ1Y3QgY29kYV9mc3luY19pbiBjb2RhX2ZzeW5jOwogICAgc3RydWN0
IGNvZGFfaW5hY3RpdmVfaW4gY29kYV9pbmFjdGl2ZTsKICAgIHN0cnVjdCBjb2RhX3ZnZXRfaW4g
Y29kYV92Z2V0OwogICAgc3RydWN0IGNvZGFfcmR3cl9pbiBjb2RhX3Jkd3I7CiAgICBzdHJ1Y3Qg
Y29kYV9vcGVuX2J5X3BhdGhfaW4gY29kYV9vcGVuX2J5X3BhdGg7CiAgICBzdHJ1Y3QgY29kYV9z
dGF0ZnNfaW4gY29kYV9zdGF0ZnM7Cn07Cgp1bmlvbiBvdXRwdXRBcmdzIHsKICAgIHN0cnVjdCBj
b2RhX291dF9oZHIgb2g7CQkgCiAgICBzdHJ1Y3QgY29kYV9yb290X291dCBjb2RhX3Jvb3Q7CiAg
ICBzdHJ1Y3QgY29kYV9vcGVuX291dCBjb2RhX29wZW47CiAgICBzdHJ1Y3QgY29kYV9pb2N0bF9v
dXQgY29kYV9pb2N0bDsKICAgIHN0cnVjdCBjb2RhX2dldGF0dHJfb3V0IGNvZGFfZ2V0YXR0cjsK
ICAgIHN0cnVjdCBjb2RhX2xvb2t1cF9vdXQgY29kYV9sb29rdXA7CiAgICBzdHJ1Y3QgY29kYV9j
cmVhdGVfb3V0IGNvZGFfY3JlYXRlOwogICAgc3RydWN0IGNvZGFfbWtkaXJfb3V0IGNvZGFfbWtk
aXI7CiAgICBzdHJ1Y3QgY29kYV9yZWFkZGlyX291dCBjb2RhX3JlYWRkaXI7CiAgICBzdHJ1Y3Qg
Y29kYV9yZWFkbGlua19vdXQgY29kYV9yZWFkbGluazsKICAgIHN0cnVjdCBjb2RhX3ZnZXRfb3V0
IGNvZGFfdmdldDsKICAgIHN0cnVjdCBjb2RhX3B1cmdldXNlcl9vdXQgY29kYV9wdXJnZXVzZXI7
CiAgICBzdHJ1Y3QgY29kYV96YXBmaWxlX291dCBjb2RhX3phcGZpbGU7CiAgICBzdHJ1Y3QgY29k
YV96YXBkaXJfb3V0IGNvZGFfemFwZGlyOwogICAgc3RydWN0IGNvZGFfemFwdm5vZGVfb3V0IGNv
ZGFfemFwdm5vZGU7CiAgICBzdHJ1Y3QgY29kYV9wdXJnZWZpZF9vdXQgY29kYV9wdXJnZWZpZDsK
ICAgIHN0cnVjdCBjb2RhX3Jkd3Jfb3V0IGNvZGFfcmR3cjsKICAgIHN0cnVjdCBjb2RhX3JlcGxh
Y2Vfb3V0IGNvZGFfcmVwbGFjZTsKICAgIHN0cnVjdCBjb2RhX21ha2VfY2lub2RlX291dCBjb2Rh
X21ha2VfY2lub2RlOwogICAgc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRoX291dCBjb2RhX29wZW5f
YnlfcGF0aDsKICAgIHN0cnVjdCBjb2RhX3N0YXRmc19vdXQgY29kYV9zdGF0ZnM7Cn07ICAgIAoK
dW5pb24gY29kYV9kb3duY2FsbHMgewogICAgIAogICAgIAogICAgc3RydWN0IGNvZGFfcHVyZ2V1
c2VyX291dCBwdXJnZXVzZXI7CiAgICBzdHJ1Y3QgY29kYV96YXBmaWxlX291dCB6YXBmaWxlOwog
ICAgc3RydWN0IGNvZGFfemFwZGlyX291dCB6YXBkaXI7CiAgICBzdHJ1Y3QgY29kYV96YXB2bm9k
ZV9vdXQgemFwdm5vZGU7CiAgICBzdHJ1Y3QgY29kYV9wdXJnZWZpZF9vdXQgcHVyZ2VmaWQ7CiAg
ICBzdHJ1Y3QgY29kYV9yZXBsYWNlX291dCByZXBsYWNlOwp9OwoKCiAKCgoKCnN0cnVjdCBWaWNl
SW9jdGwgewogICAgICAgIGNhZGRyX3QgaW4sIG91dDsgICAgICAgICAKICAgICAgICBzaG9ydCBp
bl9zaXplOyAgICAgICAgICAgCiAgICAgICAgc2hvcnQgb3V0X3NpemU7ICAgICAgICAgIAp9OwoK
c3RydWN0IFBpb2N0bERhdGEgewogICAgICAgIGNvbnN0IGNoYXIgKnBhdGg7CiAgICAgICAgaW50
IGZvbGxvdzsKICAgICAgICBzdHJ1Y3QgVmljZUlvY3RsIHZpOwp9OwoKCgoKCgoKCgoKCgoKCgoj
IDE0ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9j
b2RhX2ZzX2kuaCIgMgoKCgoKCiAKCgpzdHJ1Y3QgY29kYV9pbm9kZV9pbmZvIHsKICAgICAgICBz
dHJ1Y3QgVmljZUZpZCAgICAgY19maWQ7CSAKICAgICAgICB1X3Nob3J0CSAgICAgICAgICAgY19m
bGFnczsgICAgICAKICAgICAgICB1X3Nob3J0CSAgICAgICAgICAgY19vY291bnQ7ICAgICAKICAg
ICAgICB1X3Nob3J0ICAgICAgICAgICAgY19vd3JpdGU7ICAgICAKICAgICAgICB1X3Nob3J0ICAg
ICAgICAgICAgY19tbWNvdW50OyAgICAKICAgICAgICBzdHJ1Y3QgaW5vZGUgICAgICAqY19vdnA7
ICAgICAgICAKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICAgY19jbmhlYWQ7ICAgICAKCXN0cnVj
dCBsaXN0X2hlYWQgICBjX3ZvbHJvb3RsaXN0OyAgCiAgICAgICAgc3RydWN0IGlub2RlICAgICAg
KmNfdm5vZGU7ICAgICAgCiAgICAgICAgaW50ICAgICAgICAgICAgICAgIGNfbWFnaWM7ICAgICAg
Cn07CgogCgoKCgoKCgpzdHJ1Y3QgaW5vZGUgKmNvZGFfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sg
KiBzYiwgVmljZUZpZCAqIGZpZCwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvZGFf
dmF0dHIgKiBhdHRyKTsKaW50IGNvZGFfY25vZGVfbWFrZShzdHJ1Y3QgaW5vZGUgKiosIHN0cnVj
dCBWaWNlRmlkICosIHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKaW50IGNvZGFfY25vZGVfbWFrZWN0
bChzdHJ1Y3QgaW5vZGUgKippbm9kZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CnN0cnVjdCBp
bm9kZSAqY29kYV9maWRfdG9faW5vZGUoVmljZUZpZCAqZmlkLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sg
KnNiKTsKdm9pZCBjb2RhX3JlcGxhY2VfZmlkKHN0cnVjdCBpbm9kZSAqLCBWaWNlRmlkICosIFZp
Y2VGaWQgKik7CgoKCiMgMjY5ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgv
aW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3Ny
Yy9saW51eC9pbmNsdWRlL2xpbnV4L3JvbWZzX2ZzX2kuaCIgMQoKCgogCgpzdHJ1Y3Qgcm9tZnNf
aW5vZGVfaW5mbyB7Cgl1bnNpZ25lZCBsb25nIGlfbWV0YXNpemU7CSAKCXVuc2lnbmVkIGxvbmcg
aV9kYXRhb2Zmc2V0OwkgCn07CgoKIyAyNzAgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3Ny
Yy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwt
bGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc21iX2ZzX2kuaCIgMQogCgoKCgoKCgoKCgoK
CgogCgoKc3RydWN0IHNtYl9pbm9kZV9pbmZvIHsKCgkgCgoKCiAgICAgICAgdW5zaWduZWQgaW50
IG9wZW47CSAKCV9fdTE2IGZpbGVpZDsJCSAKCV9fdTE2IGF0dHI7CQkgCgoJX191MTYgYWNjZXNz
OwkJIAoJX191MTYgY2FjaGVfdmFsaWQ7CSAKCXVuc2lnbmVkIGxvbmcgb2xkbXRpbWU7CSAKCXVu
c2lnbmVkIGxvbmcgY2xvc2VkOwkgCn07CgoKCiMgMjcxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1s
aW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYv
bWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2hmc19mc19pLmgiIDEKIAojIDEw
ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9oZnNf
ZnNfaS5oIgoKCgoKIAoKCgoKc3RydWN0IGhmc19pbm9kZV9pbmZvIHsKCWludAkJCQltYWdpYzsg
ICAgICAKCgl1bnNpZ25lZCBsb25nCQkJbW11X3ByaXZhdGU7CglzdHJ1Y3QgaGZzX2NhdF9lbnRy
eQkJKmVudHJ5OwoKCSAKCXN0cnVjdCBoZnNfZm9yayAJCSpmb3JrOwoJaW50CQkJCWNvbnZlcnQ7
CgoJIAoJaW5vX3QJCQkJZmlsZV90eXBlOwoJY2hhcgkJCQlkaXJfc2l6ZTsKCgkgCgljb25zdCBz
dHJ1Y3QgaGZzX2hkcl9sYXlvdXQJKmRlZmF1bHRfbGF5b3V0OwoJc3RydWN0IGhmc19oZHJfbGF5
b3V0CQkqbGF5b3V0OwoKCSAKCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHpfc2Vj
b25kc3dlc3Q7CgogICAgICAgICAKICAgICAgICB2b2lkICgqZF9kcm9wX29wKShzdHJ1Y3QgZGVu
dHJ5ICosIGNvbnN0IGlub190KTsKfTsKCgojIDI3MiAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGlu
dXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21p
cHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9hZGZzX2ZzX2kuaCIgMQogCgoKCgoK
CgoKIAoKCnN0cnVjdCBhZGZzX2lub2RlX2luZm8gewoJdW5zaWduZWQgbG9uZwltbXVfcHJpdmF0
ZTsKCXVuc2lnbmVkIGxvbmcJcGFyZW50X2lkOwkgCglfX3UzMgkJbG9hZGFkZHI7CSAKCV9fdTMy
CQlleGVjYWRkcjsJIAoJdW5zaWduZWQgaW50CWZpbGV0eXBlOwkgCgl1bnNpZ25lZCBpbnQJYXR0
cjsJCSAKCWludAkJc3RhbXBlZDoxOwkgCn07CgoKIyAyNzMgIi9vcHQvY3Jvc3NkZXYvbWlwc2Vs
LWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rl
di9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcW54NF9mc19pLmgiIDEKIAoj
IDExICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9x
bng0X2ZzX2kuaCIKCgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgv
aW5jbHVkZS9saW51eC9xbnh0eXBlcy5oIiAxCiAKIyAxMSAiL29wdC9jcm9zc2Rldi9taXBzZWwt
bGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcW54dHlwZXMuaCIKCgoKCnR5cGVkZWYgX191
MTYgcW54NF9ueHRudF90Owp0eXBlZGVmIF9fdTggIHFueDRfZnR5cGVfdDsKCnR5cGVkZWYgc3Ry
dWN0IHsKCV9fdTMyIHh0bnRfYmxrOwoJX191MzIgeHRudF9zaXplOwp9IHFueDRfeHRudF90OwoK
dHlwZWRlZiBfX3UxNiBxbng0X21vZGVfdDsKdHlwZWRlZiBfX3UxNiBxbng0X211aWRfdDsKdHlw
ZWRlZiBfX3UxNiBxbng0X21naWRfdDsKdHlwZWRlZiBfX3UzMiBxbng0X29mZl90Owp0eXBlZGVm
IF9fdTE2IHFueDRfbmxpbmtfdDsKCgojIDE0ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9z
cmMvbGludXgvaW5jbHVkZS9saW51eC9xbng0X2ZzX2kuaCIgMgoKCiAKCgpzdHJ1Y3QgcW54NF9p
bm9kZV9pbmZvIHsKCWNoYXIJCWlfcmVzZXJ2ZWRbMTZdOwkgCglxbng0X29mZl90CWlfc2l6ZTsJ
CSAKCXFueDRfeHRudF90CWlfZmlyc3RfeHRudDsJIAoJX191MzIJCWlfeGJsazsJCSAKCV9fczMy
CQlpX2Z0aW1lOwkgCglfX3MzMgkJaV9tdGltZTsJIAoJX19zMzIJCWlfYXRpbWU7CSAKCV9fczMy
CQlpX2N0aW1lOwkgCglxbng0X254dG50X3QJaV9udW1feHRudHM7CSAKCXFueDRfbW9kZV90CWlf
bW9kZTsJCSAKCXFueDRfbXVpZF90CWlfdWlkOwkJIAoJcW54NF9tZ2lkX3QJaV9naWQ7CQkgCglx
bng0X25saW5rX3QJaV9ubGluazsJIAoJX191OAkJaV96ZXJvWzRdOwkgCglxbng0X2Z0eXBlX3QJ
aV90eXBlOwkJIAoJX191OAkJaV9zdGF0dXM7CSAKCXVuc2lnbmVkIGxvbmcJbW11X3ByaXZhdGU7
Cn07CgoKIyAyNzQgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRl
L2xpbnV4L2ZzLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4
L2luY2x1ZGUvbGludXgvYmZzX2ZzX2kuaCIgMQogCgoKCgoKCgogCgoKc3RydWN0IGJmc19pbm9k
ZV9pbmZvIHsKCXVuc2lnbmVkIGxvbmcgaV9kc2tfaW5vOyAgCgl1bnNpZ25lZCBsb25nIGlfc2Js
b2NrOwoJdW5zaWduZWQgbG9uZyBpX2VibG9jazsKfTsKCgojIDI3NSAiL29wdC9jcm9zc2Rldi9t
aXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvb3B0L2Ny
b3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC91ZGZfZnNfaS5oIiAx
CiAKIyAxNyAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGlu
dXgvdWRmX2ZzX2kuaCIKCgoKCgoKCnR5cGVkZWYgc3RydWN0CnsKCV9fdTMyIGxvZ2ljYWxCbG9j
a051bTsKCV9fdTE2IHBhcnRpdGlvblJlZmVyZW5jZU51bTsKfSBsYl9hZGRyOwoKCnN0cnVjdCB1
ZGZfaW5vZGVfaW5mbwp7Cglsb25nIGlfdWF0aW1lOwoJbG9uZyBpX3VtdGltZTsKCWxvbmcgaV91
Y3RpbWU7CgkgCglsYl9hZGRyIGlfbG9jYXRpb247CglfX3U2NCBpX3VuaXF1ZTsKCV9fdTMyIGlf
bGVuRUF0dHI7CglfX3UzMiBpX2xlbkFsbG9jOwoJX191MzIgaV9uZXh0X2FsbG9jX2Jsb2NrOwoJ
X191MzIgaV9uZXh0X2FsbG9jX2dvYWw7Cgl1bnNpZ25lZCBpX2FsbG9jX3R5cGUgOiAzOwoJdW5z
aWduZWQgaV9leHRlbmRlZF9mZSA6IDE7Cgl1bnNpZ25lZCBpX3N0cmF0XzQwOTYgOiAxOwoJdW5z
aWduZWQgaV9uZXdfaW5vZGUgOiAxOwoJdW5zaWduZWQgcmVzZXJ2ZWQgOiAyNjsKfTsKCgoKIAoK
CgoKCgojIDI3NiAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUv
bGludXgvZnMuaCIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgv
aW5jbHVkZS9saW51eC9uY3BfZnNfaS5oIiAxCiAKCgoKCgoKCgoKCgogCgoKCnN0cnVjdCBuY3Bf
aW5vZGVfaW5mbyB7CglfX3UzMglkaXJFbnROdW0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cglf
X3UzMglEb3NEaXJOdW0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UzMgl2b2xOdW1iZXIg
X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UzMglud2F0dHI7CglpbnQJb3BlbmVkOwoJaW50
CWFjY2VzczsKCV9fdTMyCXNlcnZlcl9maWxlX2hhbmRsZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQp
KTsKCV9fdTgJb3Blbl9jcmVhdGVfYWN0aW9uIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191
OAlmaWxlX2hhbmRsZVs2XSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKfTsKCgoKCiMgMjc3ICIv
b3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAy
CgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4
L3Byb2NfZnNfaS5oIiAxCnN0cnVjdCBwcm9jX2lub2RlX2luZm8gewoJc3RydWN0IHRhc2tfc3Ry
dWN0ICp0YXNrOwoJaW50IHR5cGU7Cgl1bmlvbiB7CgkJc3RydWN0IGRlbnRyeSAqKCpwcm9jX2dl
dF9saW5rKShzdHJ1Y3QgaW5vZGUgKik7CgkJaW50ICgqcHJvY19yZWFkKShzdHJ1Y3QgdGFza19z
dHJ1Y3QgKnRhc2ssIGNoYXIgKnBhZ2UpOwoJfSBvcDsKCXN0cnVjdCBmaWxlICpmaWxlOwp9Owoj
IDI3OCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv
ZnMuaCIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVk
ZS9saW51eC91c2JkZXZfZnNfaS5oIiAxCnN0cnVjdCB1c2JfZGV2aWNlOwpzdHJ1Y3QgdXNiX2J1
czsKCnN0cnVjdCB1c2JkZXZfaW5vZGVfaW5mbyB7CglzdHJ1Y3QgbGlzdF9oZWFkIGRsaXN0OwoJ
c3RydWN0IGxpc3RfaGVhZCBzbGlzdDsKCXVuaW9uIHsKCQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2
OwoJCXN0cnVjdCB1c2JfYnVzICpidXM7Cgl9IHA7Cn07CiMgMjc5ICIvb3B0L2Nyb3NzZGV2L21p
cHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCgoKIAoKCgoKCgoKCgoK
CgoKCgogCiMgMzA2ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVk
ZS9saW51eC9mcy5oIgpzdHJ1Y3QgaWF0dHIgewoJdW5zaWduZWQgaW50CWlhX3ZhbGlkOwoJdW1v
ZGVfdAkJaWFfbW9kZTsKCXVpZF90CQlpYV91aWQ7CglnaWRfdAkJaWFfZ2lkOwoJbG9mZl90CQlp
YV9zaXplOwoJdGltZV90CQlpYV9hdGltZTsKCXRpbWVfdAkJaWFfbXRpbWU7Cgl0aW1lX3QJCWlh
X2N0aW1lOwoJdW5zaWduZWQgaW50CWlhX2F0dHJfZmxhZ3M7Cn07CgogCgoKCgoKCgoKIAoKCiMg
MSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcXVv
dGEuaCIgMQogCiMgMzggIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNs
dWRlL2xpbnV4L3F1b3RhLmgiCgoKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3Ny
Yy9saW51eC9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDEKCgoKIyAxICIvb3B0L2Nyb3NzZGV2L21p
cHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vZXJybm8uaCIgMQogCiMgMTAgIi9vcHQv
Y3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9lcnJuby5oIgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCgojIDQgIi9vcHQvY3Jvc3NkZXYvbWlwc2Vs
LWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIKCgoKCiAKCgoKCgoKCgoj
IDQyICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9x
dW90YS5oIiAyCgoKIAoKCgoKCiAKCgoKCgogCiMgNjUgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxp
bnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3F1b3RhLmgiCgoKCgoKCgogCgoKCgoKCgoKCgoK
ZXh0ZXJuIGludCBucl9kcXVvdHMsIG5yX2ZyZWVfZHF1b3RzOwpleHRlcm4gaW50IG1heF9kcXVv
dHM7CmV4dGVybiBpbnQgZHF1b3Rfcm9vdF9zcXVhc2g7CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgpzdHJ1Y3QgZHFibGsgewoJX191MzIgZHFiX2JoYXJkbGltaXQ7CSAKCV9fdTMyIGRx
Yl9ic29mdGxpbWl0OwkgCglfX3UzMiBkcWJfY3VyYmxvY2tzOwkgCglfX3UzMiBkcWJfaWhhcmRs
aW1pdDsJIAoJX191MzIgZHFiX2lzb2Z0bGltaXQ7CSAKCV9fdTMyIGRxYl9jdXJpbm9kZXM7CSAK
CXRpbWVfdCBkcWJfYnRpbWU7CQkgCgl0aW1lX3QgZHFiX2l0aW1lOwkJIAp9OwoKIAoKCgoKCgoK
CgoKCgoKc3RydWN0IGRxc3RhdHMgewoJX191MzIgbG9va3VwczsKCV9fdTMyIGRyb3BzOwoJX191
MzIgcmVhZHM7CglfX3UzMiB3cml0ZXM7CglfX3UzMiBjYWNoZV9oaXRzOwoJX191MzIgYWxsb2Nh
dGVkX2RxdW90czsKCV9fdTMyIGZyZWVfZHF1b3RzOwoJX191MzIgc3luY3M7Cn07CgoKCiAKCgoK
CgoKCgoKCgoKc3RydWN0IGRxdW90IHsKCXN0cnVjdCBkcXVvdCAqZHFfbmV4dDsJCSAKCXN0cnVj
dCBkcXVvdCAqKmRxX3BwcmV2OwoJc3RydWN0IGxpc3RfaGVhZCBkcV9mcmVlOwkgCglzdHJ1Y3Qg
ZHF1b3QgKmRxX2hhc2hfbmV4dDsJIAoJc3RydWN0IGRxdW90ICoqZHFfaGFzaF9wcHJldjsJIAoJ
d2FpdF9xdWV1ZV9oZWFkX3QgZHFfd2FpdDsJIAoJaW50IGRxX2NvdW50OwkJCSAKCgkgCglzdHJ1
Y3Qgc3VwZXJfYmxvY2sgKmRxX3NiOwkgCgl1bnNpZ25lZCBpbnQgZHFfaWQ7CQkgCglrZGV2X3Qg
ZHFfZGV2OwkJCSAKCXNob3J0IGRxX3R5cGU7CQkJIAoJc2hvcnQgZHFfZmxhZ3M7CQkJIAoJdW5z
aWduZWQgbG9uZyBkcV9yZWZlcmVuY2VkOwkgCgoJc3RydWN0IGRxYmxrIGRxX2RxYjsJCSAKfTsK
CgoKIAoKCgoKCgoKCgoKCiMgMjA5ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGlu
dXgvaW5jbHVkZS9saW51eC9xdW90YS5oIgoKIyAzMzAgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxp
bnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rldi9t
aXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbW91bnQuaCIgMQogCiMgMTEgIi9v
cHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21vdW50Lmgi
CgoKCgoKCnN0cnVjdCBxdW90YV9tb3VudF9vcHRpb25zCnsKCXVuc2lnbmVkIGludCBmbGFnczsJ
CQkgCglzdHJ1Y3Qgc2VtYXBob3JlIGRxaW9fc2VtOwkJIAoJc3RydWN0IHNlbWFwaG9yZSBkcW9m
Zl9zZW07CQkgCglzdHJ1Y3QgZmlsZSAqZmlsZXNbMl07CQkgCgl0aW1lX3QgaW5vZGVfZXhwaXJl
WzJdOwkJIAoJdGltZV90IGJsb2NrX2V4cGlyZVsyXTsJCSAKCWNoYXIgcnNxdWFzaFsyXTsJCSAK
fTsKCnN0cnVjdCB2ZnNtb3VudAp7CiAga2Rldl90IG1udF9kZXY7CQkJIAogIGNoYXIgKm1udF9k
ZXZuYW1lOwkJCSAKICBjaGFyICptbnRfZGlybmFtZTsJCQkgCiAgc3RydWN0IHN1cGVyX2Jsb2Nr
ICptbnRfc2I7CQkgCiAgc3RydWN0IHZmc21vdW50ICptbnRfbmV4dDsJCSAKfTsKCiAKCgogCgoK
CiMgMzMxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51
eC9mcy5oIiAyCgoKIAoKCnN0cnVjdCBwYWdlOwpzdHJ1Y3QgYWRkcmVzc19zcGFjZTsKCnN0cnVj
dCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgewoJaW50ICgqd3JpdGVwYWdlKSAoc3RydWN0IGRl
bnRyeSAqLCBzdHJ1Y3QgcGFnZSAqKTsKCWludCAoKnJlYWRwYWdlKShzdHJ1Y3QgZGVudHJ5ICos
IHN0cnVjdCBwYWdlICopOwoJaW50ICgqcHJlcGFyZV93cml0ZSkoc3RydWN0IGZpbGUgKiwgc3Ry
dWN0IHBhZ2UgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKCWludCAoKmNvbW1pdF93cml0ZSkoc3Ry
dWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKCSAKCWludCAo
KmJtYXApKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIGxvbmcpOwp9OwoKc3RydWN0IGFkZHJlc3Nf
c3BhY2UgewoJc3RydWN0IGxpc3RfaGVhZAlwYWdlczsJCSAKCXVuc2lnbmVkIGxvbmcJCW5ycGFn
ZXM7CSAKCXN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgKmFfb3BzOwkgCgl2b2lkCQkJ
Kmhvc3Q7CQkgCglzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QJKmlfbW1hcDsJIAoJc3BpbmxvY2tfdAkJ
aV9zaGFyZWRfbG9jazsgICAKfTsKCnN0cnVjdCBibG9ja19kZXZpY2UgewoJc3RydWN0IGxpc3Rf
aGVhZAliZF9oYXNoOwoJYXRvbWljX3QJCWJkX2NvdW50OwogCglkZXZfdAkJCWJkX2RldjsgICAK
CWF0b21pY190CQliZF9vcGVuZXJzOwoJY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRp
b25zICpiZF9vcDsKCXN0cnVjdCBzZW1hcGhvcmUJYmRfc2VtOwkgCn07CgpzdHJ1Y3QgaW5vZGUg
ewoJc3RydWN0IGxpc3RfaGVhZAlpX2hhc2g7CglzdHJ1Y3QgbGlzdF9oZWFkCWlfbGlzdDsKCXN0
cnVjdCBsaXN0X2hlYWQJaV9kZW50cnk7CgoJdW5zaWduZWQgbG9uZwkJaV9pbm87Cgl1bnNpZ25l
ZCBpbnQJCWlfY291bnQ7CglrZGV2X3QJCQlpX2RldjsKCXVtb2RlX3QJCQlpX21vZGU7CglubGlu
a190CQkJaV9ubGluazsKCXVpZF90CQkJaV91aWQ7CglnaWRfdAkJCWlfZ2lkOwoJa2Rldl90CQkJ
aV9yZGV2OwoJbG9mZl90CQkJaV9zaXplOwoJdGltZV90CQkJaV9hdGltZTsKCXRpbWVfdAkJCWlf
bXRpbWU7Cgl0aW1lX3QJCQlpX2N0aW1lOwoJdW5zaWduZWQgbG9uZwkJaV9ibGtzaXplOwoJdW5z
aWduZWQgbG9uZwkJaV9ibG9ja3M7Cgl1bnNpZ25lZCBsb25nCQlpX3ZlcnNpb247CglzdHJ1Y3Qg
c2VtYXBob3JlCWlfc2VtOwoJc3RydWN0IHNlbWFwaG9yZQlpX3pvbWJpZTsKCXN0cnVjdCBpbm9k
ZV9vcGVyYXRpb25zCSppX29wOwoJc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkqaV9mb3A7CSAKCXN0
cnVjdCBzdXBlcl9ibG9jawkqaV9zYjsKCXdhaXRfcXVldWVfaGVhZF90CWlfd2FpdDsKCXN0cnVj
dCBmaWxlX2xvY2sJKmlfZmxvY2s7CglzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqaV9tYXBwaW5nOwoJ
c3RydWN0IGFkZHJlc3Nfc3BhY2UJaV9kYXRhOwkKCXN0cnVjdCBkcXVvdAkJKmlfZHF1b3RbMl07
CglzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvCSppX3BpcGU7CglzdHJ1Y3QgYmxvY2tfZGV2aWNlCSpp
X2JkZXY7CgoJdW5zaWduZWQgbG9uZwkJaV9zdGF0ZTsKCgl1bnNpZ25lZCBpbnQJCWlfZmxhZ3M7
Cgl1bnNpZ25lZCBjaGFyCQlpX3NvY2s7CgoJYXRvbWljX3QJCWlfd3JpdGVjb3VudDsKCXVuc2ln
bmVkIGludAkJaV9hdHRyX2ZsYWdzOwoJX191MzIJCQlpX2dlbmVyYXRpb247Cgl1bmlvbiB7CgkJ
c3RydWN0IG1pbml4X2lub2RlX2luZm8JCW1pbml4X2k7CgkJc3RydWN0IGV4dDJfaW5vZGVfaW5m
bwkJZXh0Ml9pOwoJCXN0cnVjdCBocGZzX2lub2RlX2luZm8JCWhwZnNfaTsKCQlzdHJ1Y3QgbnRm
c19pbm9kZV9pbmZvCQludGZzX2k7CgkJc3RydWN0IG1zZG9zX2lub2RlX2luZm8JCW1zZG9zX2k7
CgkJc3RydWN0IHVtc2Rvc19pbm9kZV9pbmZvCXVtc2Rvc19pOwoJCXN0cnVjdCBpc29faW5vZGVf
aW5mbwkJaXNvZnNfaTsKCQlzdHJ1Y3QgbmZzX2lub2RlX2luZm8JCW5mc19pOwoJCXN0cnVjdCBz
eXN2X2lub2RlX2luZm8JCXN5c3ZfaTsKCQlzdHJ1Y3QgYWZmc19pbm9kZV9pbmZvCQlhZmZzX2k7
CgkJc3RydWN0IHVmc19pbm9kZV9pbmZvCQl1ZnNfaTsKCQlzdHJ1Y3QgZWZzX2lub2RlX2luZm8J
CWVmc19pOwoJCXN0cnVjdCByb21mc19pbm9kZV9pbmZvCQlyb21mc19pOwoJCXN0cnVjdCBjb2Rh
X2lub2RlX2luZm8JCWNvZGFfaTsKCQlzdHJ1Y3Qgc21iX2lub2RlX2luZm8JCXNtYmZzX2k7CgkJ
c3RydWN0IGhmc19pbm9kZV9pbmZvCQloZnNfaTsKCQlzdHJ1Y3QgYWRmc19pbm9kZV9pbmZvCQlh
ZGZzX2k7CgkJc3RydWN0IHFueDRfaW5vZGVfaW5mbwkJcW54NF9pOwoJCXN0cnVjdCBiZnNfaW5v
ZGVfaW5mbwkJYmZzX2k7CgkJc3RydWN0IHVkZl9pbm9kZV9pbmZvCQl1ZGZfaTsKCQlzdHJ1Y3Qg
bmNwX2lub2RlX2luZm8JCW5jcGZzX2k7CgkJc3RydWN0IHByb2NfaW5vZGVfaW5mbwkJcHJvY19p
OwoJCXN0cnVjdCBzb2NrZXQJCQlzb2NrZXRfaTsKCQlzdHJ1Y3QgdXNiZGV2X2lub2RlX2luZm8g
ICAgICAgIHVzYmRldl9pOwoJCXZvaWQJCQkJKmdlbmVyaWNfaXA7Cgl9IHU7Cn07CgogCgoKCgoK
ZXh0ZXJuIHZvaWQgX19tYXJrX2lub2RlX2RpcnR5KHN0cnVjdCBpbm9kZSAqKTsKc3RhdGljIGlu
bGluZSB2b2lkIG1hcmtfaW5vZGVfZGlydHkoc3RydWN0IGlub2RlICppbm9kZSkKewoJaWYgKCEo
aW5vZGUtPmlfc3RhdGUgJiAxKSkKCQlfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwp9CgpzdHJ1
Y3QgZm93bl9zdHJ1Y3QgewoJaW50IHBpZDsJCSAKCXVpZF90IHVpZCwgZXVpZDsJIAoJaW50IHNp
Z251bTsJCSAKfTsKCnN0cnVjdCBmaWxlIHsKCXN0cnVjdCBsaXN0X2hlYWQJZl9saXN0OwoJc3Ry
dWN0IGRlbnRyeQkJKmZfZGVudHJ5OwoJc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkqZl9vcDsKCWF0
b21pY190CQlmX2NvdW50OwoJdW5zaWduZWQgaW50IAkJZl9mbGFnczsKCW1vZGVfdAkJCWZfbW9k
ZTsKCWxvZmZfdAkJCWZfcG9zOwoJdW5zaWduZWQgbG9uZyAJCWZfcmVhZGEsIGZfcmFtYXgsIGZf
cmFlbmQsIGZfcmFsZW4sIGZfcmF3aW47CglzdHJ1Y3QgZm93bl9zdHJ1Y3QJZl9vd25lcjsKCXVu
c2lnbmVkIGludAkJZl91aWQsIGZfZ2lkOwoJaW50CQkJZl9lcnJvcjsKCgl1bnNpZ25lZCBsb25n
CQlmX3ZlcnNpb247CgoJIAoJdm9pZAkJCSpwcml2YXRlX2RhdGE7Cn07CmV4dGVybiBzcGlubG9j
a190IGZpbGVzX2xvY2s7CgoKCgoKCmV4dGVybiBpbnQgaW5pdF9wcml2YXRlX2ZpbGUoc3RydWN0
IGZpbGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwoKCgoKCgoKIAoKCgoKCgp0eXBlZGVmIHN0
cnVjdCBmaWxlc19zdHJ1Y3QgKmZsX293bmVyX3Q7CgpzdHJ1Y3QgZmlsZV9sb2NrIHsKCXN0cnVj
dCBmaWxlX2xvY2sgKmZsX25leHQ7CSAKCXN0cnVjdCBmaWxlX2xvY2sgKmZsX25leHRsaW5rOwkg
CglzdHJ1Y3QgZmlsZV9sb2NrICpmbF9wcmV2bGluazsJIAoJc3RydWN0IGZpbGVfbG9jayAqZmxf
bmV4dGJsb2NrOyAgCglzdHJ1Y3QgZmlsZV9sb2NrICpmbF9wcmV2YmxvY2s7CglmbF9vd25lcl90
IGZsX293bmVyOwoJdW5zaWduZWQgaW50IGZsX3BpZDsKCXdhaXRfcXVldWVfaGVhZF90IGZsX3dh
aXQ7CglzdHJ1Y3QgZmlsZSAqZmxfZmlsZTsKCXVuc2lnbmVkIGNoYXIgZmxfZmxhZ3M7Cgl1bnNp
Z25lZCBjaGFyIGZsX3R5cGU7CglvZmZfdCBmbF9zdGFydDsKCW9mZl90IGZsX2VuZDsKCgl2b2lk
ICgqZmxfbm90aWZ5KShzdHJ1Y3QgZmlsZV9sb2NrICopOwkgCgoJdW5pb24gewoJCXN0cnVjdCBu
ZnNfbG9ja19pbmZvCW5mc19mbDsKCX0gZmxfdTsKfTsKCmV4dGVybiBzdHJ1Y3QgZmlsZV9sb2Nr
CQkJKmZpbGVfbG9ja190YWJsZTsKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3Jj
L2xpbnV4L2luY2x1ZGUvbGludXgvZmNudGwuaCIgMQoKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlw
c2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9mY250bC5oIiAxCiAKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgogCgoKCgogCgoKCiAKCgoKCgoK
dHlwZWRlZiBzdHJ1Y3QgZmxvY2sgewoJc2hvcnQgbF90eXBlOwoJc2hvcnQgbF93aGVuY2U7Cglf
X2tlcm5lbF9vZmZfdCBsX3N0YXJ0OwoJX19rZXJuZWxfb2ZmX3QgbF9sZW47Cglsb25nICBsX3N5
c2lkOwkJCSAKCV9fa2VybmVsX3BpZF90IGxfcGlkOwoJbG9uZyAgcGFkWzRdOwkJCSAKfSBmbG9j
a190OwoKCiMgNCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUv
bGludXgvZmNudGwuaCIgMgoKCgojIDUyMiAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3Jj
L2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKCmV4dGVybiBpbnQgZmNudGxfZ2V0bGsodW5z
aWduZWQgaW50LCBzdHJ1Y3QgZmxvY2sgKik7CmV4dGVybiBpbnQgZmNudGxfc2V0bGsodW5zaWdu
ZWQgaW50LCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBmbG9jayAqKTsKCiAKZXh0ZXJuIHZvaWQgbG9j
a3NfcmVtb3ZlX3Bvc2l4KHN0cnVjdCBmaWxlICosIGZsX293bmVyX3QpOwpleHRlcm4gdm9pZCBs
b2Nrc19yZW1vdmVfZmxvY2soc3RydWN0IGZpbGUgKik7CmV4dGVybiBzdHJ1Y3QgZmlsZV9sb2Nr
ICpwb3NpeF90ZXN0X2xvY2soc3RydWN0IGZpbGUgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKZXh0
ZXJuIGludCBwb3NpeF9sb2NrX2ZpbGUoc3RydWN0IGZpbGUgKiwgc3RydWN0IGZpbGVfbG9jayAq
LCB1bnNpZ25lZCBpbnQpOwpleHRlcm4gdm9pZCBwb3NpeF9ibG9ja19sb2NrKHN0cnVjdCBmaWxl
X2xvY2sgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKZXh0ZXJuIHZvaWQgcG9zaXhfdW5ibG9ja19s
b2NrKHN0cnVjdCBmaWxlX2xvY2sgKik7CgpzdHJ1Y3QgZmFzeW5jX3N0cnVjdCB7CglpbnQJbWFn
aWM7CglpbnQJZmFfZmQ7CglzdHJ1Y3QJZmFzeW5jX3N0cnVjdAkqZmFfbmV4dDsgIAoJc3RydWN0
CWZpbGUgCQkqZmFfZmlsZTsKfTsKCgoKZXh0ZXJuIGludCBmYXN5bmNfaGVscGVyKGludCwgc3Ry
dWN0IGZpbGUgKiwgaW50LCBzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqKik7CgojIDEgIi9vcHQvY3Jv
c3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21pbml4X2ZzX3NiLmgi
IDEKCgoKIAoKCnN0cnVjdCBtaW5peF9zYl9pbmZvIHsKCQkJdW5zaWduZWQgbG9uZyBzX25pbm9k
ZXM7CgkJCXVuc2lnbmVkIGxvbmcgc19uem9uZXM7CgkJCXVuc2lnbmVkIGxvbmcgc19pbWFwX2Js
b2NrczsKCQkJdW5zaWduZWQgbG9uZyBzX3ptYXBfYmxvY2tzOwoJCQl1bnNpZ25lZCBsb25nIHNf
Zmlyc3RkYXRhem9uZTsKCQkJdW5zaWduZWQgbG9uZyBzX2xvZ196b25lX3NpemU7CgkJCXVuc2ln
bmVkIGxvbmcgc19tYXhfc2l6ZTsKCQkJaW50IHNfZGlyc2l6ZTsKCQkJaW50IHNfbmFtZWxlbjsK
CQkJaW50IHNfbGlua19tYXg7CgkJCXN0cnVjdCBidWZmZXJfaGVhZCAqKiBzX2ltYXA7CgkJCXN0
cnVjdCBidWZmZXJfaGVhZCAqKiBzX3ptYXA7CgkJCXN0cnVjdCBidWZmZXJfaGVhZCAqIHNfc2Jo
OwoJCQlzdHJ1Y3QgbWluaXhfc3VwZXJfYmxvY2sgKiBzX21zOwoJCQl1bnNpZ25lZCBzaG9ydCBz
X21vdW50X3N0YXRlOwoJCQl1bnNpZ25lZCBzaG9ydCBzX3ZlcnNpb247Cn07CgoKIyA1NDYgIi9v
cHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIK
CiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv
ZXh0Ml9mc19zYi5oIiAxCiAKIyAxNSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xp
bnV4L2luY2x1ZGUvbGludXgvZXh0Ml9mc19zYi5oIgoKCgoKIyAxICIvb3B0L2Nyb3NzZGV2L21p
cHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9leHQyX2ZzLmgiIDEKIAojIDE1ICIv
b3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9leHQyX2Zz
LmgiCgoKCgoKCiAKCgoKIAoKCgoKIAoKCgoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoK
CgoKIAoKCiAKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCgoKCgoKIAoKCnN0cnVjdCBleHQyX2FjbF9oZWFkZXIJIAp7CglfX3UzMglhY2xoX3NpemU7
CglfX3UzMglhY2xoX2ZpbGVfY291bnQ7CglfX3UzMglhY2xoX2FjbGVfY291bnQ7CglfX3UzMglh
Y2xoX2ZpcnN0X2FjbGU7Cn07CgpzdHJ1Y3QgZXh0Ml9hY2xfZW50cnkJIAp7CglfX3UzMglhY2xl
X3NpemU7CglfX3UxNglhY2xlX3Blcm1zOwkgCglfX3UxNglhY2xlX3R5cGU7CSAKCV9fdTE2CWFj
bGVfdGFnOwkgCglfX3UxNglhY2xlX3BhZDE7CglfX3UzMglhY2xlX25leHQ7CSAKCQkJCQkgCn07
CgogCgoKc3RydWN0IGV4dDJfZ3JvdXBfZGVzYwp7CglfX3UzMgliZ19ibG9ja19iaXRtYXA7CQkg
CglfX3UzMgliZ19pbm9kZV9iaXRtYXA7CQkgCglfX3UzMgliZ19pbm9kZV90YWJsZTsJCSAKCV9f
dTE2CWJnX2ZyZWVfYmxvY2tzX2NvdW50OwkgCglfX3UxNgliZ19mcmVlX2lub2Rlc19jb3VudDsJ
IAoJX191MTYJYmdfdXNlZF9kaXJzX2NvdW50OwkgCglfX3UxNgliZ19wYWQ7CglfX3UzMgliZ19y
ZXNlcnZlZFszXTsKfTsKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoK
CgogCQoKCgoKCgogCgoKCgoKCgogCgoKc3RydWN0IGV4dDJfaW5vZGUgewoJX191MTYJaV9tb2Rl
OwkJIAoJX191MTYJaV91aWQ7CQkgCglfX3UzMglpX3NpemU7CQkgCglfX3UzMglpX2F0aW1lOwkg
CglfX3UzMglpX2N0aW1lOwkgCglfX3UzMglpX210aW1lOwkgCglfX3UzMglpX2R0aW1lOwkgCglf
X3UxNglpX2dpZDsJCSAKCV9fdTE2CWlfbGlua3NfY291bnQ7CSAKCV9fdTMyCWlfYmxvY2tzOwkg
CglfX3UzMglpX2ZsYWdzOwkgCgl1bmlvbiB7CgkJc3RydWN0IHsKCQkJX191MzIgIGxfaV9yZXNl
cnZlZDE7CgkJfSBsaW51eDE7CgkJc3RydWN0IHsKCQkJX191MzIgIGhfaV90cmFuc2xhdG9yOwoJ
CX0gaHVyZDE7CgkJc3RydWN0IHsKCQkJX191MzIgIG1faV9yZXNlcnZlZDE7CgkJfSBtYXNpeDE7
Cgl9IG9zZDE7CQkJCSAKCV9fdTMyCWlfYmxvY2tbKCgoMTIgKyAxKSArIDEpICsgMSldOyAKCV9f
dTMyCWlfZ2VuZXJhdGlvbjsJIAoJX191MzIJaV9maWxlX2FjbDsJIAoJX191MzIJaV9kaXJfYWNs
OwkgCglfX3UzMglpX2ZhZGRyOwkgCgl1bmlvbiB7CgkJc3RydWN0IHsKCQkJX191OAlsX2lfZnJh
ZzsJIAoJCQlfX3U4CWxfaV9mc2l6ZTsJIAoJCQlfX3UxNglpX3BhZDE7CgkJCV9fdTE2CWxfaV91
aWRfaGlnaDsJIAoJCQlfX3UxNglsX2lfZ2lkX2hpZ2g7CSAKCQkJX191MzIJbF9pX3Jlc2VydmVk
MjsKCQl9IGxpbnV4MjsKCQlzdHJ1Y3QgewoJCQlfX3U4CWhfaV9mcmFnOwkgCgkJCV9fdTgJaF9p
X2ZzaXplOwkgCgkJCV9fdTE2CWhfaV9tb2RlX2hpZ2g7CgkJCV9fdTE2CWhfaV91aWRfaGlnaDsK
CQkJX191MTYJaF9pX2dpZF9oaWdoOwoJCQlfX3UzMgloX2lfYXV0aG9yOwoJCX0gaHVyZDI7CgkJ
c3RydWN0IHsKCQkJX191OAltX2lfZnJhZzsJIAoJCQlfX3U4CW1faV9mc2l6ZTsJIAoJCQlfX3Ux
NgltX3BhZDE7CgkJCV9fdTMyCW1faV9yZXNlcnZlZDJbMl07CgkJfSBtYXNpeDI7Cgl9IG9zZDI7
CQkJCSAKfTsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCiAKCgoKCgoKCiAKCgpzdHJ1Y3QgZXh0Ml9zdXBlcl9ibG9jayB7CglfX3Uz
MglzX2lub2Rlc19jb3VudDsJCSAKCV9fdTMyCXNfYmxvY2tzX2NvdW50OwkJIAoJX191MzIJc19y
X2Jsb2Nrc19jb3VudDsJIAoJX191MzIJc19mcmVlX2Jsb2Nrc19jb3VudDsJIAoJX191MzIJc19m
cmVlX2lub2Rlc19jb3VudDsJIAoJX191MzIJc19maXJzdF9kYXRhX2Jsb2NrOwkgCglfX3UzMglz
X2xvZ19ibG9ja19zaXplOwkgCglfX3MzMglzX2xvZ19mcmFnX3NpemU7CSAKCV9fdTMyCXNfYmxv
Y2tzX3Blcl9ncm91cDsJIAoJX191MzIJc19mcmFnc19wZXJfZ3JvdXA7CSAKCV9fdTMyCXNfaW5v
ZGVzX3Blcl9ncm91cDsJIAoJX191MzIJc19tdGltZTsJCSAKCV9fdTMyCXNfd3RpbWU7CQkgCglf
X3UxNglzX21udF9jb3VudDsJCSAKCV9fczE2CXNfbWF4X21udF9jb3VudDsJIAoJX191MTYJc19t
YWdpYzsJCSAKCV9fdTE2CXNfc3RhdGU7CQkgCglfX3UxNglzX2Vycm9yczsJCSAKCV9fdTE2CXNf
bWlub3JfcmV2X2xldmVsOyAJIAoJX191MzIJc19sYXN0Y2hlY2s7CQkgCglfX3UzMglzX2NoZWNr
aW50ZXJ2YWw7CSAKCV9fdTMyCXNfY3JlYXRvcl9vczsJCSAKCV9fdTMyCXNfcmV2X2xldmVsOwkJ
IAoJX191MTYJc19kZWZfcmVzdWlkOwkJIAoJX191MTYJc19kZWZfcmVzZ2lkOwkJIAoJIAojIDM3
OCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZXh0
Ml9mcy5oIgoJX191MzIJc19maXJzdF9pbm87IAkJIAoJX191MTYgICBzX2lub2RlX3NpemU7IAkJ
IAoJX191MTYJc19ibG9ja19ncm91cF9ucjsgCSAKCV9fdTMyCXNfZmVhdHVyZV9jb21wYXQ7IAkg
CglfX3UzMglzX2ZlYXR1cmVfaW5jb21wYXQ7IAkgCglfX3UzMglzX2ZlYXR1cmVfcm9fY29tcGF0
OyAJIAoJX191OAlzX3V1aWRbMTZdOwkJIAoJY2hhcglzX3ZvbHVtZV9uYW1lWzE2XTsgCSAKCWNo
YXIJc19sYXN0X21vdW50ZWRbNjRdOyAJIAoJX191MzIJc19hbGdvcml0aG1fdXNhZ2VfYml0bWFw
OyAgCgkgCgoKCglfX3U4CXNfcHJlYWxsb2NfYmxvY2tzOwkgCglfX3U4CXNfcHJlYWxsb2NfZGly
X2Jsb2NrczsJIAoJX191MTYJc19wYWRkaW5nMTsKCV9fdTMyCXNfcmVzZXJ2ZWRbMjA0XTsJIAp9
OwoKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgogCgoKCgpzdHJ1Y3QgZXh0Ml9kaXJfZW50cnkgewoJX191MzIJaW5vZGU7CQkJ
IAoJX191MTYJcmVjX2xlbjsJCSAKCV9fdTE2CW5hbWVfbGVuOwkJIAoJY2hhcgluYW1lWzI1NV07
CSAKfTsKCiAKCgoKCgpzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiB7CglfX3UzMglpbm9kZTsJCQkg
CglfX3UxNglyZWNfbGVuOwkJIAoJX191OAluYW1lX2xlbjsJCSAKCV9fdTgJZmlsZV90eXBlOwoJ
Y2hhcgluYW1lWzI1NV07CSAKfTsKCiAKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCiAK
CgoKCgoKCiAKZXh0ZXJuIGludCBleHQyX3Blcm1pc3Npb24gKHN0cnVjdCBpbm9kZSAqLCBpbnQp
OwoKIApleHRlcm4gaW50IGV4dDJfZ3JvdXBfc3BhcnNlKGludCBncm91cCk7CmV4dGVybiBpbnQg
ZXh0Ml9uZXdfYmxvY2sgKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nLAoJCQkg
ICBfX3UzMiAqLCBfX3UzMiAqLCBpbnQgKik7CmV4dGVybiB2b2lkIGV4dDJfZnJlZV9ibG9ja3Mg
KGNvbnN0IHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nLAoJCQkgICAgICB1bnNpZ25lZCBs
b25nKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZXh0Ml9jb3VudF9mcmVlX2Jsb2NrcyAoc3RydWN0
IHN1cGVyX2Jsb2NrICopOwpleHRlcm4gdm9pZCBleHQyX2NoZWNrX2Jsb2Nrc19iaXRtYXAgKHN0
cnVjdCBzdXBlcl9ibG9jayAqKTsKZXh0ZXJuIHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MgKiBleHQy
X2dldF9ncm91cF9kZXNjKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLAoJCQkJCQkgICAgdW5zaWdu
ZWQgaW50IGJsb2NrX2dyb3VwLAoJCQkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqIGJoKTsK
CiAKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZXh0Ml9jb3VudF9mcmVlIChzdHJ1Y3QgYnVmZmVyX2hl
YWQgKiwgdW5zaWduZWQpOwoKIApleHRlcm4gaW50IGV4dDJfY2hlY2tfZGlyX2VudHJ5IChjb25z
dCBjaGFyICosIHN0cnVjdCBpbm9kZSAqLAoJCQkJIHN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yICos
IHN0cnVjdCBidWZmZXJfaGVhZCAqLAoJCQkJIHVuc2lnbmVkIGxvbmcpOwoKIApleHRlcm4gaW50
IGV4dDJfcmVhZCAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIGNoYXIgKiwgaW50KTsK
ZXh0ZXJuIGludCBleHQyX3dyaXRlIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgY2hh
ciAqLCBpbnQpOwoKIApleHRlcm4gaW50IGV4dDJfc3luY19maWxlIChzdHJ1Y3QgZmlsZSAqLCBz
dHJ1Y3QgZGVudHJ5ICopOwoKIApleHRlcm4gc3RydWN0IGlub2RlICogZXh0Ml9uZXdfaW5vZGUg
KGNvbnN0IHN0cnVjdCBpbm9kZSAqLCBpbnQsIGludCAqKTsKZXh0ZXJuIHZvaWQgZXh0Ml9mcmVl
X2lub2RlIChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB1bnNpZ25lZCBsb25nIGV4dDJfY291bnRf
ZnJlZV9pbm9kZXMgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKZXh0ZXJuIHZvaWQgZXh0Ml9jaGVj
a19pbm9kZXNfYml0bWFwIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CgogCgpleHRlcm4gc3RydWN0
IGJ1ZmZlcl9oZWFkICogZXh0Ml9nZXRibGsgKHN0cnVjdCBpbm9kZSAqLCBsb25nLCBpbnQsIGlu
dCAqKTsKZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIGV4dDJfYnJlYWQgKHN0cnVjdCBpbm9k
ZSAqLCBpbnQsIGludCwgaW50ICopOwoKZXh0ZXJuIHZvaWQgZXh0Ml9yZWFkX2lub2RlIChzdHJ1
Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIGV4dDJfd3JpdGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAq
KTsKZXh0ZXJuIHZvaWQgZXh0Ml9wdXRfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZv
aWQgZXh0Ml9kZWxldGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIGludCBleHQyX3N5
bmNfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgZXh0Ml9kaXNjYXJkX3ByZWFs
bG9jIChzdHJ1Y3QgaW5vZGUgKik7CgogCmV4dGVybiBpbnQgZXh0Ml9pb2N0bCAoc3RydWN0IGlu
b2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKCQkgICAgICAgdW5zaWduZWQgbG9u
Zyk7CgogCmV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleHQyX2Rpcl9pbm9kZV9vcGVy
YXRpb25zOwoKIApleHRlcm4gdm9pZCBleHQyX2Vycm9yIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwg
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKCV9fYXR0cmlidXRlX18gKChmb3JtYXQg
KHByaW50ZiwgMywgNCkpKTsKZXh0ZXJuICAgdm9pZCBleHQyX3BhbmljIChzdHJ1Y3Qgc3VwZXJf
YmxvY2sgKiwgY29uc3QgY2hhciAqLAoJCQkJICAgY29uc3QgY2hhciAqLCAuLi4pCglfX2F0dHJp
YnV0ZV9fICgobm9yZXR1cm4sIGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwpleHRlcm4gdm9pZCBl
eHQyX3dhcm5pbmcgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKiwgLi4uKQoJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwpleHRl
cm4gdm9pZCBleHQyX3B1dF9zdXBlciAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwpleHRlcm4gdm9p
ZCBleHQyX3dyaXRlX3N1cGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CmV4dGVybiBpbnQgZXh0
Ml9yZW1vdW50IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50ICosIGNoYXIgKik7CmV4dGVybiBz
dHJ1Y3Qgc3VwZXJfYmxvY2sgKiBleHQyX3JlYWRfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAq
LHZvaWQgKixpbnQpOwpleHRlcm4gaW50IGV4dDJfc3RhdGZzIChzdHJ1Y3Qgc3VwZXJfYmxvY2sg
Kiwgc3RydWN0IHN0YXRmcyAqKTsKCiAKZXh0ZXJuIHZvaWQgZXh0Ml90cnVuY2F0ZSAoc3RydWN0
IGlub2RlICopOwoKIAoKCgogCmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDJfZGly
X29wZXJhdGlvbnM7CgogCmV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVf
aW5vZGVfb3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0Ml9maWxl
X29wZXJhdGlvbnM7CgogCmV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleHQyX2Zhc3Rf
c3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwoKZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29w
ZXJhdGlvbnMgZXh0Ml9hb3BzOwoKCgoKIyAxOSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgv
c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZXh0Ml9mc19zYi5oIiAyCgoKIAoKCgogCgoKCiAKCgpz
dHJ1Y3QgZXh0Ml9zYl9pbmZvIHsKCXVuc2lnbmVkIGxvbmcgc19mcmFnX3NpemU7CSAKCXVuc2ln
bmVkIGxvbmcgc19mcmFnc19wZXJfYmxvY2s7IAoJdW5zaWduZWQgbG9uZyBzX2lub2Rlc19wZXJf
YmxvY2s7IAoJdW5zaWduZWQgbG9uZyBzX2ZyYWdzX3Blcl9ncm91cDsgCgl1bnNpZ25lZCBsb25n
IHNfYmxvY2tzX3Blcl9ncm91cDsgCgl1bnNpZ25lZCBsb25nIHNfaW5vZGVzX3Blcl9ncm91cDsg
Cgl1bnNpZ25lZCBsb25nIHNfaXRiX3Blcl9ncm91cDsJIAoJdW5zaWduZWQgbG9uZyBzX2RiX3Bl
cl9ncm91cDsJIAoJdW5zaWduZWQgbG9uZyBzX2Rlc2NfcGVyX2Jsb2NrOwkgCgl1bnNpZ25lZCBs
b25nIHNfZ3JvdXBzX2NvdW50OwkgCglzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzX3NiaDsJIAoJc3Ry
dWN0IGV4dDJfc3VwZXJfYmxvY2sgKiBzX2VzOwkgCglzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogc19n
cm91cF9kZXNjOwoJdW5zaWduZWQgc2hvcnQgc19sb2FkZWRfaW5vZGVfYml0bWFwczsKCXVuc2ln
bmVkIHNob3J0IHNfbG9hZGVkX2Jsb2NrX2JpdG1hcHM7Cgl1bnNpZ25lZCBsb25nIHNfaW5vZGVf
Yml0bWFwX251bWJlcls4XTsKCXN0cnVjdCBidWZmZXJfaGVhZCAqIHNfaW5vZGVfYml0bWFwWzhd
OwoJdW5zaWduZWQgbG9uZyBzX2Jsb2NrX2JpdG1hcF9udW1iZXJbOF07CglzdHJ1Y3QgYnVmZmVy
X2hlYWQgKiBzX2Jsb2NrX2JpdG1hcFs4XTsKCXVuc2lnbmVkIGxvbmcgIHNfbW91bnRfb3B0OwoJ
dWlkX3Qgc19yZXN1aWQ7CglnaWRfdCBzX3Jlc2dpZDsKCXVuc2lnbmVkIHNob3J0IHNfbW91bnRf
c3RhdGU7Cgl1bnNpZ25lZCBzaG9ydCBzX3BhZDsKCWludCBzX2FkZHJfcGVyX2Jsb2NrX2JpdHM7
CglpbnQgc19kZXNjX3Blcl9ibG9ja19iaXRzOwoJaW50IHNfaW5vZGVfc2l6ZTsKCWludCBzX2Zp
cnN0X2lubzsKCWludCBzX2ZlYXR1cmVfY29tcGF0OwoJaW50IHNfZmVhdHVyZV9pbmNvbXBhdDsK
CWludCBzX2ZlYXR1cmVfcm9fY29tcGF0Owp9OwoKCiMgNTQ3ICIvb3B0L2Nyb3NzZGV2L21pcHNl
bC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9vcHQvY3Jvc3Nk
ZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2hwZnNfZnNfc2IuaCIgMQoK
CgpzdHJ1Y3QgaHBmc19zYl9pbmZvIHsKCWlub190IHNiX3Jvb3Q7CQkJIAoJdW5zaWduZWQgc2Jf
ZnNfc2l6ZTsJCSAKCXVuc2lnbmVkIHNiX2JpdG1hcHM7CQkgCgl1bnNpZ25lZCBzYl9kaXJiYW5k
X3N0YXJ0OwkgCgl1bnNpZ25lZCBzYl9kaXJiYW5kX3NpemU7CSAKCXVuc2lnbmVkIHNiX2RtYXA7
CQkgCgl1bnNpZ25lZCBzYl9uX2ZyZWU7CQkgCgl1bnNpZ25lZCBzYl9uX2ZyZWVfZG5vZGVzOwkg
Cgl1aWRfdCBzYl91aWQ7CQkJIAoJZ2lkX3Qgc2JfZ2lkOwkJCSAKCXVtb2RlX3Qgc2JfbW9kZTsJ
CSAKCXVuc2lnbmVkIHNiX2NvbnYgOiAyOwkJIAoJdW5zaWduZWQgc2JfZWFzIDogMjsJCSAKCXVu
c2lnbmVkIHNiX2VyciA6IDI7CQkgCgl1bnNpZ25lZCBzYl9jaGsgOiAyOwkJIAoJdW5zaWduZWQg
c2JfbG93ZXJjYXNlIDogMTsJIAoJdW5zaWduZWQgc2Jfd2FzX2Vycm9yIDogMTsJIAoJdW5zaWdu
ZWQgc2JfY2hrZHNrIDogMjsJCSAKCXVuc2lnbmVkIHNiX3JkX2Zub2RlIDogMjsJIAoJdW5zaWdu
ZWQgc2JfcmRfaW5vZGUgOiAyOwkgCgoKCXdhaXRfcXVldWVfaGVhZF90IHNiX2lnZXRfcTsKCXVu
c2lnbmVkIGNoYXIgKnNiX2NwX3RhYmxlOwkgCgkJCQkJIAoJCQkJCSAKCXVuc2lnbmVkICpzYl9i
bXBfZGlyOwkJIAoJdW5zaWduZWQgc2JfY19iaXRtYXA7CQkgCgl3YWl0X3F1ZXVlX2hlYWRfdCBz
Yl9jcmVhdGlvbl9kZTsgCgoJdW5zaWduZWQgc2JfY3JlYXRpb25fZGVfbG9jayA6IDE7CgkgCglp
bnQgc2JfdGltZXNoaWZ0Owp9OwoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgojIDU0
OCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMu
aCIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9s
aW51eC9udGZzX2ZzX3NiLmgiIDEKCgoKc3RydWN0IG50ZnNfc2JfaW5mb3sKCSAKCW50ZnNfdWlk
X3QgdWlkOwoJbnRmc19naWRfdCBnaWQ7CgludG1vZGVfdCB1bWFzazsKICAgICAgICB1bnNpZ25l
ZCBpbnQgbmN0OwoJdm9pZCAqbmxzX21hcDsKCXVuc2lnbmVkIGludCBuZ3Q7CgkgCgludGZzX3Np
emVfdCBwYXJ0aXRpb25fYmlhczsJIAoJIAoJbnRmc191MzIgYXRfc3RhbmRhcmRfaW5mb3JtYXRp
b247CgludGZzX3UzMiBhdF9hdHRyaWJ1dGVfbGlzdDsKCW50ZnNfdTMyIGF0X2ZpbGVfbmFtZTsK
CW50ZnNfdTMyIGF0X3NlY3VyaXR5X2Rlc2NyaXB0b3I7CgludGZzX3UzMiBhdF9kYXRhOwoJbnRm
c191MzIgYXRfaW5kZXhfcm9vdDsKCW50ZnNfdTMyIGF0X2luZGV4X2FsbG9jYXRpb247CgludGZz
X3UzMiBhdF9iaXRtYXA7CgludGZzX3UzMiBhdF9zeW1saW5rOyAgCgkgCglpbnQgYmxvY2tzaXpl
OwoJaW50IGNsdXN0ZXJmYWN0b3I7CglpbnQgY2x1c3RlcnNpemU7CglpbnQgbWZ0X3JlY29yZHNp
emU7CglpbnQgbWZ0X2NsdXN0ZXJzX3Blcl9yZWNvcmQ7CglpbnQgaW5kZXhfcmVjb3Jkc2l6ZTsK
CWludCBpbmRleF9jbHVzdGVyc19wZXJfcmVjb3JkOwoJaW50IG1mdF9jbHVzdGVyOwoJIAoJdW5z
aWduZWQgY2hhciAqbWZ0OwoJdW5zaWduZWQgc2hvcnQgKnVwY2FzZTsKCXVuc2lnbmVkIGludCB1
cGNhc2VfbGVuZ3RoOwoJIAoJc3RydWN0IG50ZnNfaW5vZGVfaW5mbyAqbWZ0X2lubzsKCXN0cnVj
dCBudGZzX2lub2RlX2luZm8gKm1mdG1pcnI7CglzdHJ1Y3QgbnRmc19pbm9kZV9pbmZvICpiaXRt
YXA7CglzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwp9OwoKCiMgNTQ5ICIvb3B0L2Nyb3NzZGV2L21p
cHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9vcHQvY3Jv
c3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L21zZG9zX2ZzX3NiLmgi
IDEKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xp
bnV4L2ZhdF9jdmYuaCIgMQoKCgoKCnN0cnVjdCBjdmZfZm9ybWF0CnsgaW50IGN2Zl92ZXJzaW9u
OwogIGNoYXIqIGN2Zl92ZXJzaW9uX3RleHQ7CiAgdW5zaWduZWQgbG9uZyBmbGFnczsKICBpbnQg
KCpkZXRlY3RfY3ZmKSAoc3RydWN0IHN1cGVyX2Jsb2NrKnNiKTsKICBpbnQgKCptb3VudF9jdmYp
IChzdHJ1Y3Qgc3VwZXJfYmxvY2sqc2IsY2hhcipvcHRpb25zKTsKICBpbnQgKCp1bm1vdW50X2N2
ZikgKHN0cnVjdCBzdXBlcl9ibG9jaypzYik7CiAgc3RydWN0IGJ1ZmZlcl9oZWFkKiAoKmN2Zl9i
cmVhZCkgKHN0cnVjdCBzdXBlcl9ibG9jaypzYixpbnQgYmxvY2spOwogIHN0cnVjdCBidWZmZXJf
aGVhZCogKCpjdmZfZ2V0YmxrKSAoc3RydWN0IHN1cGVyX2Jsb2NrKnNiLGludCBibG9jayk7CiAg
dm9pZCAoKmN2Zl9icmVsc2UpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLHN0cnVjdCBidWZmZXJf
aGVhZCAqYmgpOwogIHZvaWQgKCpjdmZfbWFya19idWZmZXJfZGlydHkpIChzdHJ1Y3Qgc3VwZXJf
YmxvY2sgKnNiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hl
YWQgKmJoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlydHlfdmFsKTsKICB2
b2lkICgqY3ZmX3NldF91cHRvZGF0ZSkgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHZhbCk7CiAgaW50ICgqY3ZmX2lzX3VwdG9kYXRlKSAoc3RydWN0IHN1cGVy
X2Jsb2NrICpzYixzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKICB2b2lkICgqY3ZmX2xsX3J3X2Js
b2NrKSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG9wciwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5icmVxLAogICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoWzMyXSk7CiAgaW50ICgqZmF0X2FjY2Vzcykg
KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsaW50IG5yLGludCBuZXdfdmFsdWUpOwogIGludCAoKmN2
Zl9zdGF0ZnMpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLHN0cnVjdCBzdGF0ZnMgKmJ1ZiwgaW50
IGJ1ZnNpeik7CiAgaW50ICgqY3ZmX2JtYXApIChzdHJ1Y3QgaW5vZGUgKmlub2RlLGludCBibG9j
ayk7CiAgc3NpemVfdCAoKmN2Zl9maWxlX3JlYWQpICggc3RydWN0IGZpbGUgKiwgY2hhciAqLCBz
aXplX3QsIGxvZmZfdCAqKTsKICBzc2l6ZV90ICgqY3ZmX2ZpbGVfd3JpdGUpICggc3RydWN0IGZp
bGUgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKICBpbnQgKCpjdmZfbW1hcCkg
KHN0cnVjdCBmaWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKICBpbnQgKCpjdmZfcmVh
ZHBhZ2UpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHBhZ2UgKik7CiAgaW50ICgqY3ZmX3dyaXRl
cGFnZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKICBpbnQgKCpjdmZfZGlyX2lv
Y3RsKSAoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCwKICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogIHZv
aWQgKCp6ZXJvX291dF9jbHVzdGVyKSAoc3RydWN0IGlub2RlKiwgaW50IGNsdXN0ZXJucik7Cn07
CgppbnQgcmVnaXN0ZXJfY3ZmX2Zvcm1hdChzdHJ1Y3QgY3ZmX2Zvcm1hdCpjdmZfZm9ybWF0KTsK
aW50IHVucmVnaXN0ZXJfY3ZmX2Zvcm1hdChzdHJ1Y3QgY3ZmX2Zvcm1hdCpjdmZfZm9ybWF0KTsK
dm9pZCBkZWNfY3ZmX2Zvcm1hdF91c2VfY291bnRfYnlfdmVyc2lvbihpbnQgdmVyc2lvbik7Cmlu
dCBkZXRlY3RfY3ZmKHN0cnVjdCBzdXBlcl9ibG9jaypzYixjaGFyKmZvcmNlKTsKCmV4dGVybiBz
dHJ1Y3QgY3ZmX2Zvcm1hdCAqY3ZmX2Zvcm1hdHNbXTsKZXh0ZXJuIGludCBjdmZfZm9ybWF0X3Vz
ZV9jb3VudFtdOwoKCiMgMyAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2lu
Y2x1ZGUvbGludXgvbXNkb3NfZnNfc2IuaCIgMgoKCiAKCgoKc3RydWN0IGZhdF9tb3VudF9vcHRp
b25zIHsKCXVpZF90IGZzX3VpZDsKCWdpZF90IGZzX2dpZDsKCXVuc2lnbmVkIHNob3J0IGZzX3Vt
YXNrOwoJdW5zaWduZWQgc2hvcnQgY29kZXBhZ2U7ICAgCgljaGFyICppb2NoYXJzZXQ7ICAgICAg
ICAgICAKCXVuc2lnbmVkIGNoYXIgbmFtZV9jaGVjazsgIAoJdW5zaWduZWQgY2hhciBjb252ZXJz
aW9uOyAgCgl1bnNpZ25lZCBxdWlldDoxLCAgICAgICAgICAKCQkgc2hvd2V4ZWM6MSwgICAgICAg
CgkJIHN5c19pbW11dGFibGU6MSwgIAoJCSBkb3RzT0s6MSwgICAgICAgICAKCQkgaXN2ZmF0OjEs
ICAgICAgICAgCgkJIHV0Zjg6MSwJICAgCgkJIHVuaWNvZGVfeGxhdGU6MSwgIAoJCSBwb3NpeGZz
OjEsICAgICAgICAKCQkgbnVtdGFpbDoxLCAgICAgICAgCgkJIGF0YXJpOjEsICAgICAgICAgIAoJ
CSBmYXQzMjoxOwkgICAKfTsKCnN0cnVjdCB2ZmF0X3VuaWNvZGUgewoJdW5zaWduZWQgY2hhciB1
bmkxOwoJdW5zaWduZWQgY2hhciB1bmkyOwp9OwoKc3RydWN0IG1zZG9zX3NiX2luZm8gewoJdW5z
aWduZWQgc2hvcnQgY2x1c3Rlcl9zaXplOyAgCgl1bnNpZ25lZCBzaG9ydCBjbHVzdGVyX2JpdHM7
ICAKCXVuc2lnbmVkIGNoYXIgZmF0cyxmYXRfYml0czsgIAoJdW5zaWduZWQgc2hvcnQgZmF0X3N0
YXJ0OwoJdW5zaWduZWQgbG9uZyBmYXRfbGVuZ3RoOyAgICAgCgl1bnNpZ25lZCBsb25nIGRpcl9z
dGFydDsKCXVuc2lnbmVkIHNob3J0IGRpcl9lbnRyaWVzOyAgIAoJdW5zaWduZWQgbG9uZyBkYXRh
X3N0YXJ0OyAgICAgCgl1bnNpZ25lZCBsb25nIGNsdXN0ZXJzOyAgICAgICAKCXVuc2lnbmVkIGxv
bmcgcm9vdF9jbHVzdGVyOyAgIAoJdW5zaWduZWQgbG9uZyBmc2luZm9fb2Zmc2V0OyAgCgl3YWl0
X3F1ZXVlX2hlYWRfdCBmYXRfd2FpdDsKCXN0cnVjdCBzZW1hcGhvcmUgZmF0X2xvY2s7CglpbnQg
cHJldl9mcmVlOyAgICAgICAgICAgICAgICAKCWludCBmcmVlX2NsdXN0ZXJzOyAgICAgICAgICAg
IAoJc3RydWN0IGZhdF9tb3VudF9vcHRpb25zIG9wdGlvbnM7CglzdHJ1Y3QgbmxzX3RhYmxlICpu
bHNfZGlzazsgICAKCXN0cnVjdCBubHNfdGFibGUgKm5sc19pbzsgICAgIAoJc3RydWN0IGN2Zl9m
b3JtYXQqIGN2Zl9mb3JtYXQ7Cgl2b2lkICpkaXJfb3BzOwkJICAgICAgCgl2b2lkICpwcml2YXRl
X2RhdGE7CQp9OwoKCiMgNTUwICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgv
aW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3Ny
Yy9saW51eC9pbmNsdWRlL2xpbnV4L2lzb19mc19zYi5oIiAxCgoKCiAKCgpzdHJ1Y3QgaXNvZnNf
c2JfaW5mbyB7Cgl1bnNpZ25lZCBsb25nIHNfbmlub2RlczsKCXVuc2lnbmVkIGxvbmcgc19uem9u
ZXM7Cgl1bnNpZ25lZCBsb25nIHNfZmlyc3RkYXRhem9uZTsKCXVuc2lnbmVkIGxvbmcgc19sb2df
em9uZV9zaXplOwoJdW5zaWduZWQgbG9uZyBzX21heF9zaXplOwoJCgl1bnNpZ25lZCBjaGFyIHNf
aGlnaF9zaWVycmE7ICAKCXVuc2lnbmVkIGNoYXIgc19tYXBwaW5nOwoJdW5zaWduZWQgY2hhciBz
X3JvY2s7Cgl1bnNpZ25lZCBjaGFyIHNfam9saWV0X2xldmVsOwoJdW5zaWduZWQgY2hhciBzX3V0
Zjg7Cgl1bnNpZ25lZCBjaGFyIHNfY3J1ZnQ7ICAKCgoJdW5zaWduZWQgY2hhciBzX3VuaGlkZTsK
CXVuc2lnbmVkIGNoYXIgc19ub3N1aWQ7Cgl1bnNpZ25lZCBjaGFyIHNfbm9kZXY7Cgltb2RlX3Qg
c19tb2RlOwoJZ2lkX3Qgc19naWQ7Cgl1aWRfdCBzX3VpZDsKCXN0cnVjdCBubHNfdGFibGUgKnNf
bmxzX2lvY2hhcnNldDsgIAp9OwoKCiMgNTUxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9z
cmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2Vs
LWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIiAxCgoKCgojIDEgIi9v
cHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2luLmgiIDEK
IAojIDE4ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51
eC9pbi5oIgoKCgoKCiAKZW51bSB7CiAgSVBQUk9UT19JUCA9IDAsCQkgCiAgSVBQUk9UT19JQ01Q
ID0gMSwJCSAKICBJUFBST1RPX0lHTVAgPSAyLAkJIAogIElQUFJPVE9fSVBJUCA9IDQsCQkgCiAg
SVBQUk9UT19UQ1AgPSA2LAkJIAogIElQUFJPVE9fRUdQID0gOCwJCSAKICBJUFBST1RPX1BVUCA9
IDEyLAkJIAogIElQUFJPVE9fVURQID0gMTcsCQkgCiAgSVBQUk9UT19JRFAgPSAyMiwJCSAKICBJ
UFBST1RPX1JTVlAgPSA0NiwJCSAKICBJUFBST1RPX0dSRSA9IDQ3LAkJIAoKICBJUFBST1RPX0lQ
VjYJID0gNDEsCQkgCgogIElQUFJPVE9fUElNICAgID0gMTAzLAkJIAoKICBJUFBST1RPX0VTUCA9
IDUwLCAgICAgICAgICAgICAKICBJUFBST1RPX0FIID0gNTEsICAgICAgICAgICAgICAKICBJUFBS
T1RPX0NPTVAgICA9IDEwOCwgICAgICAgICAgICAgICAgIAoKICBJUFBST1RPX1JBVwkgPSAyNTUs
CQkgCiAgSVBQUk9UT19NQVgKfTsKCgogCnN0cnVjdCBpbl9hZGRyIHsKCV9fdTMyCXNfYWRkcjsK
fTsKCgoKCgoKCgoKCgoKCgoKCiAKCgogCgoKCgoKCgoKCgogCgoKCiAKCnN0cnVjdCBpcF9tcmVx
IAp7CglzdHJ1Y3QgaW5fYWRkciBpbXJfbXVsdGlhZGRyOwkgCglzdHJ1Y3QgaW5fYWRkciBpbXJf
aW50ZXJmYWNlOwkgCn07CgpzdHJ1Y3QgaXBfbXJlcW4KewoJc3RydWN0IGluX2FkZHIJaW1yX211
bHRpYWRkcjsJCSAKCXN0cnVjdCBpbl9hZGRyCWltcl9hZGRyZXNzOwkJIAoJaW50CQlpbXJfaWZp
bmRleDsJCSAKfTsKCnN0cnVjdCBpbl9wa3RpbmZvCnsKCWludAkJaXBpX2lmaW5kZXg7CglzdHJ1
Y3QgaW5fYWRkcglpcGlfc3BlY19kc3Q7CglzdHJ1Y3QgaW5fYWRkcglpcGlfYWRkcjsKfTsKCiAK
CnN0cnVjdCBzb2NrYWRkcl9pbiB7CiAgc2FfZmFtaWx5X3QJCXNpbl9mYW1pbHk7CSAKICB1bnNp
Z25lZCBzaG9ydCBpbnQJc2luX3BvcnQ7CSAKICBzdHJ1Y3QgaW5fYWRkcglzaW5fYWRkcjsJIAoK
ICAgCiAgdW5zaWduZWQgY2hhcgkJX19wYWRbMTYgLSBzaXplb2Yoc2hvcnQgaW50KSAtCgkJCXNp
emVvZih1bnNpZ25lZCBzaG9ydCBpbnQpIC0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKV07Cn07CgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKCiAKCgoK
CgoKIAoKCgogCgoKCgoKCgoKCiMgNSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xp
bnV4L2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgiIDIKCgogCgoKc3RydWN0IG5mc19zZXJ2ZXIg
ewoJc3RydWN0IHJwY19jbG50ICoJY2xpZW50OwkJIAoJaW50CQkJZmxhZ3M7CQkgCglpbnQJCQly
c2l6ZTsJCSAKCWludAkJCXdzaXplOwkJIAoJdW5zaWduZWQgaW50CQlic2l6ZTsJCSAKCXVuc2ln
bmVkIGludAkJYWNyZWdtaW47CSAKCXVuc2lnbmVkIGludAkJYWNyZWdtYXg7Cgl1bnNpZ25lZCBp
bnQJCWFjZGlybWluOwoJdW5zaWduZWQgaW50CQlhY2Rpcm1heDsKCWNoYXIgKgkJCWhvc3RuYW1l
OwkgCglzdHJ1Y3QgbmZzX3JlcWxpc3QgKglyd19yZXF1ZXN0czsJIAp9OwoKIAoKCnN0cnVjdCBu
ZnNfc2JfaW5mbyB7CglzdHJ1Y3QgbmZzX3NlcnZlcglzX3NlcnZlcjsKCXN0cnVjdCBuZnNfZmgJ
CXNfcm9vdDsKfTsKCgojIDU1MiAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4
L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9z
cmMvbGludXgvaW5jbHVkZS9saW51eC9zeXN2X2ZzX3NiLmgiIDEKCgoKIAoKCgoKCgoKCnN0cnVj
dCBzeXN2X3NiX2luZm8gewoJaW50CSAgICAgICBzX3R5cGU7CQkgCgl1bnNpZ25lZCBpbnQgICBz
X2Jsb2NrX3NpemU7CSAKCXVuc2lnbmVkIGludCAgIHNfYmxvY2tfc2l6ZV8xOwkgCgl1bnNpZ25l
ZCBpbnQgICBzX2Jsb2NrX3NpemVfYml0czsJIAoJdW5zaWduZWQgaW50ICAgc19ibG9ja19zaXpl
X2luY19iaXRzOwkgCgl1bnNpZ25lZCBpbnQgICBzX2Jsb2NrX3NpemVfZGVjX2JpdHM7CSAKCWNo
YXIJICAgICAgIHNfY29udmVydDsJIAoJY2hhcgkgICAgICAgc19rbHVkZ2Vfc3ltbGlua3M7ICAK
CWNoYXIJICAgICAgIHNfdHJ1bmNhdGU7CSAKCQkJCQkgCglubGlua190ICAgICAgICBzX2xpbmtf
bWF4OwkgCgl1bnNpZ25lZCBpbnQgICBzX2lub2Rlc19wZXJfYmxvY2s7CSAKCXVuc2lnbmVkIGlu
dCAgIHNfaW5vZGVzX3Blcl9ibG9ja18xOwkgCgl1bnNpZ25lZCBpbnQgICBzX2lub2Rlc19wZXJf
YmxvY2tfYml0czsJIAoJdW5zaWduZWQgaW50ICAgc19pbmRfcGVyX2Jsb2NrOwkJIAoJdW5zaWdu
ZWQgaW50ICAgc19pbmRfcGVyX2Jsb2NrXzE7CSAKCXVuc2lnbmVkIGludCAgIHNfaW5kX3Blcl9i
bG9ja19iaXRzOwkgCgl1bnNpZ25lZCBpbnQgICBzX2luZF9wZXJfYmxvY2tfMjsJIAoJdW5zaWdu
ZWQgaW50ICAgc19pbmRfcGVyX2Jsb2NrXzJfMTsJIAoJdW5zaWduZWQgaW50ICAgc19pbmRfcGVy
X2Jsb2NrXzJfYml0czsJIAoJdW5zaWduZWQgaW50ICAgc19pbmRfcGVyX2Jsb2NrXzM7CSAKCXVu
c2lnbmVkIGludCAgIHNfaW5kX3Blcl9ibG9ja19ibG9ja19zaXplXzE7CSAKCXVuc2lnbmVkIGlu
dCAgIHNfaW5kX3Blcl9ibG9ja19ibG9ja19zaXplX2JpdHM7CSAKCXVuc2lnbmVkIGludCAgIHNf
aW5kX3Blcl9ibG9ja18yX2Jsb2NrX3NpemVfMTsJIAoJdW5zaWduZWQgaW50ICAgc19pbmRfcGVy
X2Jsb2NrXzJfYmxvY2tfc2l6ZV9iaXRzOyAgCgl1bnNpZ25lZCBpbnQgICBzX2luZDBfc2l6ZTsJ
CSAKCXVuc2lnbmVkIGludCAgIHNfaW5kMV9zaXplOwkJIAoJdW5zaWduZWQgaW50ICAgc19pbmQy
X3NpemU7CQkgCgl1bnNpZ25lZCBpbnQgICBzX3Rvb2JpZ19ibG9jazsJCSAKCXVuc2lnbmVkIGlu
dCAgIHNfYmxvY2tfYmFzZTsJIAoJdW5zaWduZWQgc2hvcnQgc19maWNfc2l6ZTsJIAoJdW5zaWdu
ZWQgc2hvcnQgc19mbGNfc2l6ZTsJIAoJIAoJc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoMTsKCXN0
cnVjdCBidWZmZXJfaGVhZCAqc19iaDI7CgkgCgoJY2hhciAqICAgICAgICAgc19zYmQxOwkJIAoJ
Y2hhciAqICAgICAgICAgc19zYmQyOwkJIAoJdTE2ICAgICAgICAgICAgKnNfc2JfZmljX2NvdW50
OwkgCiAgICAgICAgdTE2ICAgICAgICAgICAgKnNfc2JfZmljX2lub2RlczsgIAoJdTE2ICAgICAg
ICAgICAgKnNfc2JfdG90YWxfZnJlZV9pbm9kZXM7ICAKCXUxNiAgICAgICAgICAgICpzX3NiX2Zs
Y19jb3VudDsJIAoJdTMyCSAgICAgICAqc19zYl9mbGNfYmxvY2tzOyAgCgl1MzIgICAgICAgICAg
ICAqc19zYl90b3RhbF9mcmVlX2Jsb2NrczsgCgl1MzIgICAgICAgICAgICAqc19zYl90aW1lOwkg
Cgl1MzIgICAgICAgICAgICAqc19zYl9zdGF0ZTsJIAoJIAoKCXUzMiAgICAgICAgICAgIHNfZmly
c3Rpbm9kZXpvbmU7ICAKCXUzMiAgICAgICAgICAgIHNfZmlyc3RkYXRhem9uZTsJIAoJdTMyICAg
ICAgICAgICAgc19uaW5vZGVzOwkgCgl1MzIgICAgICAgICAgICBzX25kYXRhem9uZXM7CSAKCXUz
MiAgICAgICAgICAgIHNfbnpvbmVzOwkgCn07CiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA1NTMgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxp
bnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rldi9t
aXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvYWZmc19mc19zYi5oIiAxCgoKCiAK
CgoKCgoKCgoKCgpzdHJ1Y3QgYWZmc19ibV9pbmZvIHsKCXN0cnVjdCBidWZmZXJfaGVhZCAqYm1f
Ymg7CSAKCXMzMiBibV9maXJzdGJsazsJCSAKCXMzMiBibV9rZXk7CQkJIAoJaW50IGJtX2NvdW50
OwkJCSAKfTsKCnN0cnVjdCBhZmZzX2FsbG9jX3pvbmUgewoJc2hvcnQgYXpfc2l6ZTsJCQkgCglz
aG9ydCBhel9jb3VudDsJCQkgCglpbnQgYXpfZnJlZTsJCQkgCn07CgpzdHJ1Y3QgYWZmc196b25l
IHsKCXVuc2lnbmVkIGxvbmcgel9pbm87CQkgCglzdHJ1Y3QgYWZmc19ibV9pbmZvICp6X2JtOwkg
CglpbnQgel9zdGFydDsJCQkgCglpbnQgel9lbmQ7CQkJIAoJaW50IHpfYXpfbm87CQkJIAoJdW5z
aWduZWQgbG9uZyB6X2xydV90aW1lOwkgCn07CgpzdHJ1Y3QgYWZmc19zYl9pbmZvIHsKCWludCBz
X3BhcnRpdGlvbl9zaXplOwkJIAoJaW50IHNfYmxrc2l6ZTsJCQkgCglzMzIgc19yb290X2Jsb2Nr
OwkJIAoJaW50IHNfaGFzaHNpemU7CQkJIAoJdW5zaWduZWQgbG9uZyBzX2ZsYWdzOwkJIAoJczE2
IHNfdWlkOwkJCSAKCXMxNiBzX2dpZDsJCQkgCgl1bW9kZV90IHNfbW9kZTsJCQkgCglpbnQgc19y
ZXNlcnZlZDsJCQkgCglzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfcm9vdF9iaDsJIAoJc3RydWN0IGFm
ZnNfYm1faW5mbyAqc19iaXRtYXA7CSAKCWludCBzX2JtX2NvdW50OwkJCSAKCWludCBzX25leHR6
b25lOwkJCSAKCWludCBzX251bV9hejsJCQkgCglzdHJ1Y3QgYWZmc196b25lICpzX3pvbmVzOwkg
CglzdHJ1Y3QgYWZmc19hbGxvY196b25lICpzX2FsbG9jOyAKCWNoYXIgKnNfem9uZW1hcDsJCSAK
CWNoYXIgKnNfcHJlZml4OwkJCSAKCWludCBzX3ByZWZpeF9sZW47CQkgCgljaGFyIHNfdm9sdW1l
WzMyXTsJCSAKfTsKCgoKCgoKCgoKCgoKCgoKIyA1NTQgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxp
bnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rldi9t
aXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdWZzX2ZzX3NiLmgiIDEKIAojIDEz
ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC91ZnNf
ZnNfc2IuaCIKCgoKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2lu
Y2x1ZGUvbGludXgvdWZzX2ZzLmgiIDEKIAojIDIyICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51
eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC91ZnNfZnMuaCIKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCgoKIAoKCgoKCgoKIAoKCgogCgoKCgogCgoK
CgoKIAoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAojIDEzOSAiL29wdC9jcm9zc2Rl
di9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdWZzX2ZzLmgiCgoKICAgICAg
ICAgICAgCiAKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCnN0cnVjdCB1ZnNfdGltZXZhbCB7Cglf
X3MzMgl0dl9zZWM7CglfX3MzMgl0dl91c2VjOwp9OwoKIAoKCgoKCgoKCgoKCiAgIApzdHJ1Y3Qg
dWZzX2Rpcl9lbnRyeSB7CglfX3UzMiAgZF9pbm87CQkJIAoJX191MTYgIGRfcmVjbGVuOwkJIAoJ
dW5pb24gewoJCV9fdTE2CWRfbmFtbGVuOwkJIAoJCXN0cnVjdCB7CgkJCV9fdTgJZF90eXBlOwkJ
IAoJCQlfX3U4CWRfbmFtbGVuOwkgCgkJfSBkXzQ0OwoJfSBkX3U7CglfX3U4CWRfbmFtZVsyNTUg
KyAxXTsJIAp9OwoKc3RydWN0IHVmc19jc3VtIHsKCV9fdTMyCWNzX25kaXI7CSAKCV9fdTMyCWNz
X25iZnJlZTsJIAoJX191MzIJY3NfbmlmcmVlOwkgCglfX3UzMgljc19uZmZyZWU7CSAKfTsKCiAK
CgpzdHJ1Y3QgdWZzX3N1cGVyX2Jsb2NrIHsKCV9fdTMyCWZzX2xpbms7CSAKCV9fdTMyCWZzX3Js
aW5rOwkgCglfX3UzMglmc19zYmxrbm87CSAKCV9fdTMyCWZzX2NibGtubzsJIAoJX191MzIJZnNf
aWJsa25vOwkgCglfX3UzMglmc19kYmxrbm87CSAKCV9fdTMyCWZzX2Nnb2Zmc2V0OwkgCglfX3Uz
Mglmc19jZ21hc2s7CSAKCV9fdTMyCWZzX3RpbWU7CSAKCV9fdTMyCWZzX3NpemU7CSAKCV9fdTMy
CWZzX2RzaXplOwkgCglfX3UzMglmc19uY2c7CQkgCglfX3UzMglmc19ic2l6ZTsJIAoJX191MzIJ
ZnNfZnNpemU7CSAKCV9fdTMyCWZzX2ZyYWc7CSAKIAoJX191MzIJZnNfbWluZnJlZTsJIAoJX191
MzIJZnNfcm90ZGVsYXk7CSAKCV9fdTMyCWZzX3JwczsJCSAKIAoJX191MzIJZnNfYm1hc2s7CSAK
CV9fdTMyCWZzX2ZtYXNrOwkgCglfX3UzMglmc19ic2hpZnQ7CSAKCV9fdTMyCWZzX2ZzaGlmdDsJ
IAogCglfX3UzMglmc19tYXhjb250aWc7CSAKCV9fdTMyCWZzX21heGJwZzsJIAogCglfX3UzMglm
c19mcmFnc2hpZnQ7CSAKCV9fdTMyCWZzX2ZzYnRvZGI7CSAKCV9fdTMyCWZzX3Nic2l6ZTsJIAoJ
X191MzIJZnNfY3NtYXNrOwkgCglfX3UzMglmc19jc3NoaWZ0OwkgCglfX3UzMglmc19uaW5kaXI7
CSAKCV9fdTMyCWZzX2lub3BiOwkgCglfX3UzMglmc19uc3BmOwkgCiAKCV9fdTMyCWZzX29wdGlt
OwkgCiAKCXVuaW9uIHsKCQlzdHJ1Y3QgewoJCQlfX3UzMglmc19ucHNlY3Q7CSAKCQl9IGZzX3N1
bjsKCQlzdHJ1Y3QgewoJCQlfX3MzMglmc19zdGF0ZTsJIAoJCX0gZnNfc3VueDg2OwoJfSBmc191
MTsKCV9fdTMyCWZzX2ludGVybGVhdmU7CSAKCV9fdTMyCWZzX3RyYWNrc2tldzsJIAogCiAKIAog
CglfX3UzMglmc19pZFsyXTsJIAogCglfX3UzMglmc19jc2FkZHI7CSAKCV9fdTMyCWZzX2Nzc2l6
ZTsJIAoJX191MzIJZnNfY2dzaXplOwkgCiAKCV9fdTMyCWZzX250cmFrOwkgCglfX3UzMglmc19u
c2VjdDsJIAoJX191MzIJZnNfc3BjOwkJIAogCglfX3UzMglmc19uY3lsOwkgCiAKCV9fdTMyCWZz
X2NwZzsJCSAKCV9fdTMyCWZzX2lwZzsJCSAKCV9fdTMyCWZzX2ZwZzsJCSAKIAoJc3RydWN0IHVm
c19jc3VtIGZzX2NzdG90YWw7CSAKIAoJX19zOAlmc19mbW9kOwkgCglfX3M4CWZzX2NsZWFuOwkg
CglfX3M4CWZzX3Jvbmx5OwkgCglfX3M4CWZzX2ZsYWdzOwkgCglfX3M4CWZzX2ZzbW50WzUxMl07
CSAKIAoJX191MzIJZnNfY2dyb3RvcjsJIAoJX191MzIJZnNfY3NwWzMxXTsJIAoJX191MzIJZnNf
bWF4Y2x1c3RlcjsKCV9fdTMyCWZzX2NwYzsJCSAKCV9fdTE2CWZzX29wb3N0YmxbMTZdWzhdOwkg
CQoJdW5pb24gewoJCXN0cnVjdCB7CgkJCV9fczMyCWZzX3NwYXJlY29uWzUzXTsgCgkJCV9fczMy
CWZzX3JlY2xhaW07CgkJCV9fczMyCWZzX3NwYXJlY29uMlsxXTsKCQkJX19zMzIJZnNfc3RhdGU7
CSAKCQkJX191MzIJZnNfcWJtYXNrWzJdOwkgCgkJCV9fdTMyCWZzX3FmbWFza1syXTsJIAoJCX0g
ZnNfc3VuOwoJCXN0cnVjdCB7CgkJCV9fczMyCWZzX3NwYXJlY29uWzUzXTsgCgkJCV9fczMyCWZz
X3JlY2xhaW07CgkJCV9fczMyCWZzX3NwYXJlY29uMlsxXTsKCQkJX191MzIJZnNfbnBzZWN0Owkg
CgkJCV9fdTMyCWZzX3FibWFza1syXTsJIAoJCQlfX3UzMglmc19xZm1hc2tbMl07CSAKCQl9IGZz
X3N1bng4NjsKCQlzdHJ1Y3QgewoJCQlfX3MzMglmc19zcGFyZWNvbls1MF07IAoJCQlfX3MzMglm
c19jb250aWdzdW1zaXplOyAKCQkJX19zMzIJZnNfbWF4c3ltbGlua2xlbjsgCgkJCV9fczMyCWZz
X2lub2RlZm10OwkgCgkJCV9fdTMyCWZzX21heGZpbGVzaXplWzJdOwkgCgkJCV9fdTMyCWZzX3Fi
bWFza1syXTsJIAoJCQlfX3UzMglmc19xZm1hc2tbMl07CSAKCQkJX19zMzIJZnNfc3RhdGU7CSAK
CQl9IGZzXzQ0OwoJfSBmc191MjsKCV9fczMyCWZzX3Bvc3RibGZvcm1hdDsJIAoJX19zMzIJZnNf
bnJwb3M7CQkgCglfX3MzMglmc19wb3N0YmxvZmY7CQkgCglfX3MzMglmc19yb3RibG9mZjsJCSAK
CV9fczMyCWZzX21hZ2ljOwkJIAoJX191OAlmc19zcGFjZVsxXTsJCSAKfTsKCiAKCgoKCgogCgoK
CgoKIAoKCgoKCiAKCgoKCgoKCgogCgoKc3RydWN0CXVmc19jeWxpbmRlcl9ncm91cCB7CglfX3Uz
MgljZ19saW5rOwkJIAoJX191MzIJY2dfbWFnaWM7CQkgCglfX3UzMgljZ190aW1lOwkJIAoJX191
MzIJY2dfY2d4OwkJCSAKCV9fdTE2CWNnX25jeWw7CQkgCglfX3UxNgljZ19uaWJsazsJCSAKCV9f
dTMyCWNnX25kYmxrOwkJIAoJc3RydWN0CXVmc19jc3VtIGNnX2NzOwkJIAoJX191MzIJY2dfcm90
b3I7CQkgCglfX3UzMgljZ19mcm90b3I7CQkgCglfX3UzMgljZ19pcm90b3I7CQkgCglfX3UzMglj
Z19mcnN1bVsoODE5MiAvIDEwMjQpXTsJIAoJX191MzIJY2dfYnRvdG9mZjsJCSAKCV9fdTMyCWNn
X2JvZmY7CQkgCglfX3UzMgljZ19pdXNlZG9mZjsJCSAKCV9fdTMyCWNnX2ZyZWVvZmY7CQkgCglf
X3UzMgljZ19uZXh0ZnJlZW9mZjsJCSAKCXVuaW9uIHsKCQlzdHJ1Y3QgewoJCQlfX3UzMgljZ19j
bHVzdGVyc3Vtb2ZmOwkgCgkJCV9fdTMyCWNnX2NsdXN0ZXJvZmY7CQkgCgkJCV9fdTMyCWNnX25j
bHVzdGVyYmxrczsJIAoJCQlfX3UzMgljZ19zcGFyZWNvblsxM107CSAKCQl9IGNnXzQ0OwoJCV9f
dTMyCWNnX3NwYXJlY29uWzE2XTsJIAoJfSBjZ191OwoJX191OAljZ19zcGFjZVsxXTsJCSAKIAp9
OwoKIAoKCnN0cnVjdCB1ZnNfaW5vZGUgewoJX191MTYJdWlfbW9kZTsJCSAKCV9fdTE2CXVpX25s
aW5rOwkJIAoJdW5pb24gewoJCXN0cnVjdCB7CgkJCV9fdTE2CXVpX3N1aWQ7CSAKCQkJX191MTYJ
dWlfc2dpZDsJIAoJCX0gb2xkaWRzOwoJCV9fdTMyCXVpX2ludW1iZXI7CQkgCgkJX191MzIJdWlf
YXV0aG9yOwkJIAoJfSB1aV91MTsKCV9fdTY0CXVpX3NpemU7CQkgCglzdHJ1Y3QgdWZzX3RpbWV2
YWwgdWlfYXRpbWU7CSAKCXN0cnVjdCB1ZnNfdGltZXZhbCB1aV9tdGltZTsJIAoJc3RydWN0IHVm
c190aW1ldmFsIHVpX2N0aW1lOwkgCgl1bmlvbiB7CgkJc3RydWN0IHsKCQkJX191MzIJdWlfZGJb
MTJdOyAKCQkJX191MzIJdWlfaWJbM107IAoJCX0gdWlfYWRkcjsKCQlfX3U4CXVpX3N5bWxpbmtb
NCooMTIrMyldOyAKCX0gdWlfdTI7CglfX3UzMgl1aV9mbGFnczsJCSAKCV9fdTMyCXVpX2Jsb2Nr
czsJCSAKCV9fdTMyCXVpX2dlbjsJCQkgCgl1bmlvbiB7CgkJc3RydWN0IHsKCQkJX191MzIJdWlf
c2hhZG93OwkgCgkJCV9fdTMyCXVpX3VpZDsJCSAKCQkJX191MzIJdWlfZ2lkOwkJIAoJCQlfX3Uz
Mgl1aV9vZWZ0ZmxhZzsJIAoJCX0gdWlfc3VuOwoJCXN0cnVjdCB7CgkJCV9fdTMyCXVpX3VpZDsJ
CSAKCQkJX191MzIJdWlfZ2lkOwkJIAoJCQlfX3MzMgl1aV9zcGFyZVsyXTsJIAoJCX0gdWlfNDQ7
CgkJc3RydWN0IHsKCQkJX191MzIJdWlfdWlkOwkJIAoJCQlfX3UzMgl1aV9naWQ7CQkgCgkJCV9f
dTE2CXVpX21vZGVoOwkgCgkJCV9fdTE2CXVpX3NwYXJlOwkgCgkJCV9fdTMyCXVpX3RyYW5zOwkg
CgkJfSB1aV9odXJkOwoJfSB1aV91MzsKfTsKCiAKIAoKCgoKCgogCgoKCgoKCgoKIApleHRlcm4g
dm9pZCB1ZnNfZnJlZV9mcmFnbWVudHMgKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCwgdW5zaWdu
ZWQpOwpleHRlcm4gdm9pZCB1ZnNfZnJlZV9ibG9ja3MgKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25l
ZCwgdW5zaWduZWQpOwpleHRlcm4gdW5zaWduZWQgdWZzX25ld19mcmFnbWVudHMgKHN0cnVjdCBp
bm9kZSAqLCB1MzIgKiwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgaW50ICopOwoKIApl
eHRlcm4gc3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1ZnNfbG9hZF9jeWxpbmRlciAoc3Ry
dWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkKTsKZXh0ZXJuIHZvaWQgdWZzX3B1dF9jeWxpbmRl
ciAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkKTsKCiAKZXh0ZXJuIHN0cnVjdCBpbm9k
ZV9vcGVyYXRpb25zIHVmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKZXh0ZXJuIGludCB1ZnNfY2hl
Y2tfZGlyX2VudHJ5IChjb25zdCBjaGFyICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgdWZzX2Rp
cl9lbnRyeSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgdW5zaWduZWQgbG9uZyk7CgogCmV4dGVy
biBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1ZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwpleHRl
cm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZnNfZmlsZV9vcGVyYXRpb25zOwoKZXh0ZXJuIHN0
cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgdWZzX2FvcHM7CgogCmV4dGVybiB2b2lkIHVm
c19mcmVlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZXh0ZXJuIHN0cnVjdCBpbm9kZSAq
IHVmc19uZXdfaW5vZGUgKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCBpbnQsIGludCAqKTsKCiAKZXh0
ZXJuIGludCB1ZnNfZnJhZ19tYXAgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpleHRlcm4gdm9pZCB1
ZnNfcmVhZF9pbm9kZSAoc3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCB1ZnNfcHV0X2lub2Rl
IChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIHVmc193cml0ZV9pbm9kZSAoc3RydWN0IGlu
b2RlICopOwpleHRlcm4gaW50IHVmc19zeW5jX2lub2RlIChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVy
biB2b2lkIHVmc193cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCB1ZnNf
ZGVsZXRlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQg
KiB1ZnNfZ2V0ZnJhZyAoc3RydWN0IGlub2RlICosIHVuc2lnbmVkLCBpbnQsIGludCAqKTsKZXh0
ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIHVmc19icmVhZCAoc3RydWN0IGlub2RlICosIHVuc2ln
bmVkLCBpbnQsIGludCAqKTsKCiAKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWZzX2Rp
cl9vcGVyYXRpb25zOwogICAgICAgIAogCmV4dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSB1
ZnNfZnNfdHlwZTsKZXh0ZXJuIHZvaWQgdWZzX3dhcm5pbmcgKHN0cnVjdCBzdXBlcl9ibG9jayAq
LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0
IChwcmludGYsIDMsIDQpKSk7CmV4dGVybiB2b2lkIHVmc19lcnJvciAoc3RydWN0IHN1cGVyX2Js
b2NrICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRlX18gKChm
b3JtYXQgKHByaW50ZiwgMywgNCkpKTsKZXh0ZXJuIHZvaWQgdWZzX3BhbmljIChzdHJ1Y3Qgc3Vw
ZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikgX19hdHRyaWJ1dGVf
XyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwpleHRlcm4gdm9pZCB1ZnNfd3JpdGVfc3VwZXIg
KHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKCiAKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25z
IHVmc19mYXN0X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKCiAKZXh0ZXJuIHZvaWQgdWZzX3Ry
dW5jYXRlIChzdHJ1Y3QgaW5vZGUgKik7CgoKCgojIDE3ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1s
aW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC91ZnNfZnNfc2IuaCIgMgoKCiAKCgoKc3RydWN0
IHVmc19idWZmZXJfaGVhZCB7Cgl1bnNpZ25lZCBmcmFnbWVudDsJCQkgCgl1bnNpZ25lZCBjb3Vu
dDsJCQkJIAoJc3RydWN0IGJ1ZmZlcl9oZWFkICogYmhbKDgxOTIgLyAxMDI0KV07CSAKfTsKCnN0
cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvIHsKCXN0cnVjdCB1ZnNfY3lsaW5kZXJfZ3JvdXAgdWNn
OwoJX191MzIJY19jZ3g7CQkgCglfX3UxNgljX25jeWw7CQkgCglfX3UxNgljX25pYmxrOwkgCglf
X3UzMgljX25kYmxrOwkgCglfX3UzMgljX3JvdG9yOwkgCglfX3UzMgljX2Zyb3RvcjsJIAoJX191
MzIJY19pcm90b3I7CSAKCV9fdTMyCWNfYnRvdG9mZjsJIAoJX191MzIJY19ib2ZmOwkJIAoJX191
MzIJY19pdXNlZG9mZjsJIAoJX191MzIJY19mcmVlb2ZmOwkgCglfX3UzMgljX25leHRmcmVlb2Zm
OwkgCglfX3UzMgljX2NsdXN0ZXJzdW1vZmY7IAoJX191MzIJY19jbHVzdGVyb2ZmOwkgCglfX3Uz
MgljX25jbHVzdGVyYmxrczsJIAp9OwkKCnN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvIHsKCXN0
cnVjdCB1ZnNfYnVmZmVyX2hlYWQgc191Ymg7ICAKCV9fdTMyCXNfc2Jsa25vOwkgCglfX3UzMglz
X2NibGtubzsJIAoJX191MzIJc19pYmxrbm87CSAKCV9fdTMyCXNfZGJsa25vOwkgCglfX3UzMglz
X2Nnb2Zmc2V0OwkgCglfX3UzMglzX2NnbWFzazsJIAoJX191MzIJc19zaXplOwkJIAoJX191MzIJ
c19kc2l6ZTsJIAoJX191MzIJc19uY2c7CQkgCglfX3UzMglzX2JzaXplOwkgCglfX3UzMglzX2Zz
aXplOwkgCglfX3UzMglzX2ZwYjsJCSAKCV9fdTMyCXNfbWluZnJlZTsJIAoJX191MzIJc19ibWFz
azsJIAoJX191MzIJc19mbWFzazsJIAoJX191MzIJc19ic2hpZnQ7CSAKCV9fdTMyICAgc19mc2hp
ZnQ7CSAKCV9fdTMyCXNfZnBic2hpZnQ7CSAKCV9fdTMyCXNfZnNidG9kYjsJIAoJX191MzIJc19z
YnNpemU7CSAKCV9fdTMyICAgc19jc21hc2s7CSAKCV9fdTMyCXNfY3NzaGlmdDsJIAoJX191MzIJ
c19uaW5kaXI7CSAKCV9fdTMyCXNfaW5vcGI7CSAKCV9fdTMyCXNfbnNwZjsJCSAKCV9fdTMyCXNf
bnBzZWN0OwkgCglfX3UzMglzX2ludGVybGVhdmU7CSAKCV9fdTMyCXNfdHJhY2tza2V3OwkgCglf
X3UzMglzX2NzYWRkcjsJIAoJX191MzIJc19jc3NpemU7CSAKCV9fdTMyCXNfY2dzaXplOwkgCglf
X3UzMglzX250cmFrOwkgCglfX3UzMglzX25zZWN0OwkgCglfX3UzMglzX3NwYzsJCSAKCV9fdTMy
CXNfaXBnOwkJIAoJX191MzIJc19mcGc7CQkgCglfX3UzMglzX2NwYzsJCSAKCV9fczMyCXNfY29u
dGlnc3Vtc2l6ZTsgCglfX3M2NAlzX3FibWFzazsJIAoJX19zNjQJc19xZm1hc2s7CSAKCV9fczMy
CXNfcG9zdGJsZm9ybWF0OwkgCglfX3MzMglzX25ycG9zOwkgCiAgICAgICAgX19zMzIJc19wb3N0
YmxvZmY7CSAKCV9fczMyCXNfcm90YmxvZmY7CSAKCglfX3UzMglzX2ZwYm1hc2s7CSAKCV9fdTMy
CXNfYXBiOwkJIAoJX191MzIJc18yYXBiOwkJIAoJX191MzIJc18zYXBiOwkJIAoJX191MzIJc19h
cGJtYXNrOwkgCglfX3UzMglzX2FwYnNoaWZ0OwkgCglfX3UzMglzXzJhcGJzaGlmdDsJIAoJX191
MzIJc18zYXBic2hpZnQ7CSAKCV9fdTMyCXNfbnNwZnNoaWZ0OwkgCglfX3UzMglzX25zcGI7CQkg
CglfX3UzMglzX2lub3BmOwkgCglfX3UzMglzX3NiYmFzZTsJIAoJX191MzIJc19icGY7CQkgCglf
X3UzMglzX2JwZnNoaWZ0OwkgCglfX3UzMglzX2JwZm1hc2s7CSAKCglfX3UzMglzX21heHN5bWxp
bmtsZW47IAp9OwoKCgoKCnN0cnVjdCB1ZnNfc2JfaW5mbyB7CglzdHJ1Y3QgdWZzX3NiX3ByaXZh
dGVfaW5mbyAqIHNfdXNwaTsJCglzdHJ1Y3QgdWZzX2NzdW0JKiBzX2NzcFszMV07Cgl1bnNpZ25l
ZCBzX3N3YWI7Cgl1bnNpZ25lZCBzX2ZsYWdzOwoJc3RydWN0IGJ1ZmZlcl9oZWFkICoqIHNfdWNn
OwoJc3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiBzX3VjcGlbOF07IAoJdW5zaWduZWQgc19j
Z25vWzhdOwoJdW5zaWduZWQgc2hvcnQgc19jZ19sb2FkZWQ7Cgl1bnNpZ25lZCBzX21vdW50X29w
dDsKfTsKCiAKCgoKCgpzdHJ1Y3QgdWZzX3N1cGVyX2Jsb2NrX2ZpcnN0IHsKCV9fdTMyCWZzX2xp
bms7CglfX3UzMglmc19ybGluazsKCV9fdTMyCWZzX3NibGtubzsKCV9fdTMyCWZzX2NibGtubzsK
CV9fdTMyCWZzX2libGtubzsKCV9fdTMyCWZzX2RibGtubzsKCV9fdTMyCWZzX2Nnb2Zmc2V0OwoJ
X191MzIJZnNfY2dtYXNrOwoJX191MzIJZnNfdGltZTsKCV9fdTMyCWZzX3NpemU7CglfX3UzMglm
c19kc2l6ZTsKCV9fdTMyCWZzX25jZzsKCV9fdTMyCWZzX2JzaXplOwoJX191MzIJZnNfZnNpemU7
CglfX3UzMglmc19mcmFnOwoJX191MzIJZnNfbWluZnJlZTsKCV9fdTMyCWZzX3JvdGRlbGF5OwoJ
X191MzIJZnNfcnBzOwoJX191MzIJZnNfYm1hc2s7CglfX3UzMglmc19mbWFzazsKCV9fdTMyCWZz
X2JzaGlmdDsKCV9fdTMyCWZzX2ZzaGlmdDsKCV9fdTMyCWZzX21heGNvbnRpZzsKCV9fdTMyCWZz
X21heGJwZzsKCV9fdTMyCWZzX2ZyYWdzaGlmdDsKCV9fdTMyCWZzX2ZzYnRvZGI7CglfX3UzMglm
c19zYnNpemU7CglfX3UzMglmc19jc21hc2s7CglfX3UzMglmc19jc3NoaWZ0OwoJX191MzIJZnNf
bmluZGlyOwoJX191MzIJZnNfaW5vcGI7CglfX3UzMglmc19uc3BmOwoJX191MzIJZnNfb3B0aW07
Cgl1bmlvbiB7CgkJc3RydWN0IHsKCQkJX191MzIJZnNfbnBzZWN0OwoJCX0gZnNfc3VuOwoJCXN0
cnVjdCB7CgkJCV9fczMyCWZzX3N0YXRlOwoJCX0gZnNfc3VueDg2OwoJfSBmc191MTsKCV9fdTMy
CWZzX2ludGVybGVhdmU7CglfX3UzMglmc190cmFja3NrZXc7CglfX3UzMglmc19pZFsyXTsKCV9f
dTMyCWZzX2NzYWRkcjsKCV9fdTMyCWZzX2Nzc2l6ZTsKCV9fdTMyCWZzX2Nnc2l6ZTsKCV9fdTMy
CWZzX250cmFrOwoJX191MzIJZnNfbnNlY3Q7CglfX3UzMglmc19zcGM7CglfX3UzMglmc19uY3ls
OwoJX191MzIJZnNfY3BnOwoJX191MzIJZnNfaXBnOwoJX191MzIJZnNfZnBnOwoJc3RydWN0IHVm
c19jc3VtIGZzX2NzdG90YWw7CglfX3M4CWZzX2Ztb2Q7CglfX3M4CWZzX2NsZWFuOwoJX19zOAlm
c19yb25seTsKCV9fczgJZnNfZmxhZ3M7CglfX3M4CWZzX2ZzbW50WzUxMiAtIDIxMl07Cgp9OwoK
c3RydWN0IHVmc19zdXBlcl9ibG9ja19zZWNvbmQgewoJX19zOAlmc19mc21udFsyMTJdOwoJX191
MzIJZnNfY2dyb3RvcjsKCV9fdTMyCWZzX2NzcFszMV07CglfX3UzMglmc19tYXhjbHVzdGVyOwoJ
X191MzIJZnNfY3BjOwoJX191MTYJZnNfb3Bvc3RibFs4Ml07Cn07CQoKc3RydWN0IHVmc19zdXBl
cl9ibG9ja190aGlyZCB7CglfX3UxNglmc19vcG9zdGJsWzQ2XTsKCXVuaW9uIHsKCQlzdHJ1Y3Qg
ewoJCQlfX3MzMglmc19zcGFyZWNvbls1M107IAoJCQlfX3MzMglmc19yZWNsYWltOwoJCQlfX3Mz
Mglmc19zcGFyZWNvbjJbMV07CgkJCV9fczMyCWZzX3N0YXRlOwkgCgkJCV9fdTMyCWZzX3FibWFz
a1syXTsJIAoJCQlfX3UzMglmc19xZm1hc2tbMl07CSAKCQl9IGZzX3N1bjsKCQlzdHJ1Y3QgewoJ
CQlfX3MzMglmc19zcGFyZWNvbls1M107IAoJCQlfX3MzMglmc19yZWNsYWltOwoJCQlfX3MzMglm
c19zcGFyZWNvbjJbMV07CgkJCV9fdTMyCWZzX25wc2VjdDsJIAoJCQlfX3UzMglmc19xYm1hc2tb
Ml07CSAKCQkJX191MzIJZnNfcWZtYXNrWzJdOwkgCgkJfSBmc19zdW54ODY7CgkJc3RydWN0IHsK
CQkJX19zMzIJZnNfc3BhcmVjb25bNTBdOyAKCQkJX19zMzIJZnNfY29udGlnc3Vtc2l6ZTsgCgkJ
CV9fczMyCWZzX21heHN5bWxpbmtsZW47IAoJCQlfX3MzMglmc19pbm9kZWZtdDsJIAoJCQlfX3Uz
Mglmc19tYXhmaWxlc2l6ZVsyXTsJIAoJCQlfX3UzMglmc19xYm1hc2tbMl07CSAKCQkJX191MzIJ
ZnNfcWZtYXNrWzJdOwkgCgkJCV9fczMyCWZzX3N0YXRlOwkgCgkJfSBmc180NDsKCX0gZnNfdTI7
CglfX3MzMglmc19wb3N0Ymxmb3JtYXQ7CglfX3MzMglmc19ucnBvczsKCV9fczMyCWZzX3Bvc3Ri
bG9mZjsKCV9fczMyCWZzX3JvdGJsb2ZmOwoJX19zMzIJZnNfbWFnaWM7CglfX3U4CWZzX3NwYWNl
WzFdOwp9OwoKCiMgNTU1ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5j
bHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9s
aW51eC9pbmNsdWRlL2xpbnV4L2Vmc19mc19zYi5oIiAxCiAKCgoKCgoKCgoKCiAKCgogCgoKCgoK
CgoKIApzdHJ1Y3QgZWZzX3N1cGVyIHsKCWludDMyX3QJCWZzX3NpemU7ICAgICAgICAgCglpbnQz
Ml90CQlmc19maXJzdGNnOyAgICAgIAoJaW50MzJfdAkJZnNfY2dmc2l6ZTsgICAgICAKCXNob3J0
CQlmc19jZ2lzaXplOyAgICAgIAoJc2hvcnQJCWZzX3NlY3RvcnM7ICAgICAgCglzaG9ydAkJZnNf
aGVhZHM7ICAgICAgICAKCXNob3J0CQlmc19uY2c7ICAgICAgICAgIAoJc2hvcnQJCWZzX2RpcnR5
OyAgICAgICAgCglpbnQzMl90CQlmc190aW1lOyAgICAgICAgIAoJaW50MzJfdAkJZnNfbWFnaWM7
ICAgICAgICAKCWNoYXIJCWZzX2ZuYW1lWzZdOyAgICAgCgljaGFyCQlmc19mcGFja1s2XTsgICAg
IAoJaW50MzJfdAkJZnNfYm1zaXplOyAgICAgICAKCWludDMyX3QJCWZzX3RmcmVlOyAgICAgICAg
CglpbnQzMl90CQlmc190aW5vZGU7ICAgICAgIAoJaW50MzJfdAkJZnNfYm1ibG9jazsgICAgICAK
CWludDMyX3QJCWZzX3JlcGxzYjsgICAgICAgCglpbnQzMl90CQlmc19sYXN0aWFsbG9jOyAgIAoJ
Y2hhcgkJZnNfc3BhcmVbMjBdOyAgICAKCWludDMyX3QJCWZzX2NoZWNrc3VtOyAgICAgCn07Cgog
CnN0cnVjdCBlZnNfc2JfaW5mbyB7CglpbnQzMl90CWZzX21hZ2ljOwkgCglpbnQzMl90CWZzX3N0
YXJ0OwkgCglpbnQzMl90CWZpcnN0X2Jsb2NrOwkgCglpbnQzMl90CXRvdGFsX2Jsb2NrczsJIAoJ
aW50MzJfdAlncm91cF9zaXplOwkgIAoJaW50MzJfdAlkYXRhX2ZyZWU7CSAKCWludDMyX3QJaW5v
ZGVfZnJlZTsJIAoJc2hvcnQJaW5vZGVfYmxvY2tzOwkgCglzaG9ydAl0b3RhbF9ncm91cHM7CSAK
fTsKCgoKIyA1NTYgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRl
L2xpbnV4L2ZzLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4
L2luY2x1ZGUvbGludXgvcm9tZnNfZnNfc2IuaCIgMQoKCgogCgpzdHJ1Y3Qgcm9tZnNfc2JfaW5m
byB7Cgl1bnNpZ25lZCBsb25nIHNfbWF4c2l6ZTsKfTsKCgojIDU1NyAiL29wdC9jcm9zc2Rldi9t
aXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvb3B0L2Ny
b3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zbWJfZnNfc2IuaCIg
MQogCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51
eC9pbmNsdWRlL2xpbnV4L3NtYi5oIiAxCiAKCgoKCgoKCgoKCgoKZW51bSBzbWJfcHJvdG9jb2wg
eyAKCVNNQl9QUk9UT0NPTF9OT05FLCAKCVNNQl9QUk9UT0NPTF9DT1JFLCAKCVNNQl9QUk9UT0NP
TF9DT1JFUExVUywgCglTTUJfUFJPVE9DT0xfTEFOTUFOMSwgCglTTUJfUFJPVE9DT0xfTEFOTUFO
MiwgCglTTUJfUFJPVE9DT0xfTlQxIAp9OwoKZW51bSBzbWJfY2FzZV9obmRsIHsKCVNNQl9DQVNF
X0RFRkFVTFQsCglTTUJfQ0FTRV9MT1dFUiwKCVNNQl9DQVNFX1VQUEVSCn07CgpzdHJ1Y3Qgc21i
X2Rza2F0dHIgewogICAgICAgIF9fdTE2IHRvdGFsOwogICAgICAgIF9fdTE2IGFsbG9jYmxvY2tz
OwogICAgICAgIF9fdTE2IGJsb2Nrc2l6ZTsKICAgICAgICBfX3UxNiBmcmVlOwp9OwoKc3RydWN0
IHNtYl9jb25uX29wdCB7CgogICAgICAgICAKCXVuc2lnbmVkIGludCBmZDsKCgllbnVtIHNtYl9w
cm90b2NvbCBwcm90b2NvbDsKCWVudW0gc21iX2Nhc2VfaG5kbCBjYXNlX2hhbmRsaW5nOwoKCSAK
CglfX3UzMiAgICAgICAgICAgICAgbWF4X3htaXQ7CglfX3UxNiAgICAgICAgICAgICAgc2VydmVy
X3VpZDsKCV9fdTE2ICAgICAgICAgICAgICB0aWQ7CgogICAgICAgICAKICAgICAgICBfX3UxNiAg
ICAgICAgICAgICAgc2VjbW9kZTsKICAgICAgICBfX3UxNiAgICAgICAgICAgICAgbWF4bXV4Owog
ICAgICAgIF9fdTE2ICAgICAgICAgICAgICBtYXh2Y3M7CiAgICAgICAgX191MTYgICAgICAgICAg
ICAgIHJhd21vZGU7CiAgICAgICAgX191MzIgICAgICAgICAgICAgIHNlc3NrZXk7CgoJIAoJX191
MzIgICAgICAgICAgICAgIG1heHJhdzsKCV9fdTMyICAgICAgICAgICAgICBjYXBhYmlsaXRpZXM7
CglfX3MxNiAgICAgICAgICAgICAgc2VydmVyem9uZTsKfTsKCgoKCgoKIAoKCnN0cnVjdCBzbWJf
ZmF0dHIgewoKCV9fdTE2IGF0dHI7CgoJdW5zaWduZWQgbG9uZwlmX2lubzsKCXVtb2RlX3QJCWZf
bW9kZTsKCW5saW5rX3QJCWZfbmxpbms7Cgl1aWRfdAkJZl91aWQ7CglnaWRfdAkJZl9naWQ7Cglr
ZGV2X3QJCWZfcmRldjsKCW9mZl90CQlmX3NpemU7Cgl0aW1lX3QJCWZfYXRpbWU7Cgl0aW1lX3QJ
CWZfbXRpbWU7Cgl0aW1lX3QJCWZfY3RpbWU7Cgl1bnNpZ25lZCBsb25nCWZfYmxrc2l6ZTsKCXVu
c2lnbmVkIGxvbmcJZl9ibG9ja3M7Cn07CgpzdHJ1Y3Qgc21iX2RpcmVudCB7CglzdHJ1Y3Qgc21i
X2ZhdHRyIGF0dHI7CgoJaW50IGZfcG9zOwoJaW50IGxlbjsKCV9fdTggbmFtZVsyNTVdOwp9OwoK
ZW51bSBzbWJfY29ubl9zdGF0ZSB7CiAgICAgICAgQ09OTl9WQUxJRCwgICAgICAgICAgICAgIAog
ICAgICAgIENPTk5fSU5WQUxJRCwgICAgICAgICAgICAKCiAgICAgICAgQ09OTl9SRVRSSUVEICAg
ICAgICAgICAgIAp9OwoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCiMgMTUgIi9vcHQvY3Jvc3NkZXYv
bWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NtYl9mc19zYi5oIiAyCgoKIAoK
CgoKc3RydWN0IHNtYl9zYl9pbmZvIHsKICAgICAgICBlbnVtIHNtYl9jb25uX3N0YXRlIHN0YXRl
OwoJc3RydWN0IGZpbGUgKiBzb2NrX2ZpbGU7CgogICAgICAgIHN0cnVjdCBzbWJfbW91bnRfZGF0
YSAqbW50OwogICAgICAgIHVuc2lnbmVkIGNoYXIgKnRlbXBfYnVmOwoKCSAKCgoJdW5zaWduZWQg
aW50IGdlbmVyYXRpb247CglwaWRfdCBjb25uX3BpZDsKCXN0cnVjdCBzbWJfY29ubl9vcHQgb3B0
OwoKCXN0cnVjdCBzZW1hcGhvcmUgc2VtOwoJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKCglfX3Uz
MiAgICAgICAgICAgICAgcGFja2V0X3NpemU7Cgl1bnNpZ25lZCBjaGFyICogICAgcGFja2V0Owog
ICAgICAgIHVuc2lnbmVkIHNob3J0ICAgICByY2xzOyAgCiAgICAgICAgdW5zaWduZWQgc2hvcnQg
ICAgIGVycjsKCiAgICAgICAgIAogICAgICAgIHZvaWQgKmRhdGFfcmVhZHk7Cn07CgoKCgojIDU1
OCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMu
aCIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9s
aW51eC9oZnNfZnNfc2IuaCIgMQogCiMgMTAgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3Ny
Yy9saW51eC9pbmNsdWRlL2xpbnV4L2hmc19mc19zYi5oIgoKCgoKIApzdHJ1Y3QgaGZzX25hbWU7
Cgp0eXBlZGVmIGludCAoKmhmc19uYW1laW5fZm4pIChjaGFyICosIGNvbnN0IHN0cnVjdCBoZnNf
bmFtZSAqKTsKdHlwZWRlZiB2b2lkICgqaGZzX25hbWVvdXRfZm4pIChzdHJ1Y3QgaGZzX25hbWUg
KiwgY29uc3QgY2hhciAqLCBpbnQpOwp0eXBlZGVmIHZvaWQgKCpoZnNfaWZpbGxfZm4pIChzdHJ1
Y3QgaW5vZGUgKiwgaW5vX3QsIGNvbnN0IGludCk7CgogCgoKCgpzdHJ1Y3QgaGZzX3NiX2luZm8g
ewoJaW50CQkJbWFnaWM7CQkgCglzdHJ1Y3QgaGZzX21kYgkJKnNfbWRiOwkJIAoJaW50CQkJc19x
dWlldDsJIAoKCWludAkJCXNfbG93ZXJjYXNlOwkgCglpbnQJCQlzX2FmcGQ7CQkgCglpbnQgICAg
ICAgICAgICAgICAgICAgICBzX3ZlcnNpb247ICAgICAgIAoJaGZzX25hbWVpbl9mbgkJc19uYW1l
aW47CSAKCgoJaGZzX25hbWVvdXRfZm4JCXNfbmFtZW91dDsJIAoKCgloZnNfaWZpbGxfZm4JCXNf
aWZpbGw7CSAKCgljb25zdCBzdHJ1Y3QgaGZzX25hbWUJKnNfcmVzZXJ2ZWQxOwkgCgljb25zdCBz
dHJ1Y3QgaGZzX25hbWUJKnNfcmVzZXJ2ZWQyOwkgCglfX3UzMgkJCXNfdHlwZTsJCSAKCV9fdTMy
CQkJc19jcmVhdG9yOwkgCgl1bW9kZV90CQkJc191bWFzazsJIAoKCXVpZF90CQkJc191aWQ7CQkg
CglnaWRfdAkJCXNfZ2lkOwkJIAoJY2hhcgkJCXNfY29udjsJCSAKfTsKCgojIDU1OSAiL29wdC9j
cm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAx
ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9hZGZz
X2ZzX3NiLmgiIDEKIAoKCgoKCgoKCiAKCgpzdHJ1Y3QgYWRmc19kaXNjbWFwOwpzdHJ1Y3QgYWRm
c19kaXJfb3BzOwoKIAoKCnN0cnVjdCBhZGZzX3NiX2luZm8gewoJc3RydWN0IGFkZnNfZGlzY21h
cCAqc19tYXA7CSAKCXN0cnVjdCBhZGZzX2Rpcl9vcHMgKnNfZGlyOwkgCgoJdWlkX3QJCXNfdWlk
OwkJIAoJZ2lkX3QJCXNfZ2lkOwkJIAoJdW1vZGVfdAkJc19vd25lcl9tYXNrOwkgCgl1bW9kZV90
CQlzX290aGVyX21hc2s7CSAKCglfX3UzMgkJc19pZHNfcGVyX3pvbmU7CSAKCV9fdTMyCQlzX2lk
bGVuOwkgCglfX3UzMgkJc19tYXBfc2l6ZTsJIAoJdW5zaWduZWQgbG9uZwlzX3NpemU7CQkgCglz
aWduZWQgaW50CXNfbWFwMmJsazsJIAoJdW5zaWduZWQgaW50CXNfbG9nMnNoYXJlc2l6ZTsgCgl1
bnNpZ25lZCBpbnQJc192ZXJzaW9uOwkgCgl1bnNpZ25lZCBpbnQJc19uYW1lbGVuOwkgCn07CgoK
IyA1NjAgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4
L2ZzLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1
ZGUvbGludXgvcW54NF9mc19zYi5oIiAxCiAKIyAxMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGlu
dXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcW54NF9mc19zYi5oIgoKCgojIDEgIi9vcHQvY3Jv
c3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3FueDRfZnMuaCIgMQog
CiMgMTAgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4
L3FueDRfZnMuaCIKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgpzdHJ1Y3Qg
cW54NF9pbm9kZV9lbnRyeSB7CgljaGFyCQlkaV9mbmFtZVsxNl07Cglxbng0X29mZl90CWRpX3Np
emU7Cglxbng0X3h0bnRfdAlkaV9maXJzdF94dG50OwoJX191MzIJCWRpX3hibGs7CglfX3MzMgkJ
ZGlfZnRpbWU7CglfX3MzMgkJZGlfbXRpbWU7CglfX3MzMgkJZGlfYXRpbWU7CglfX3MzMgkJZGlf
Y3RpbWU7Cglxbng0X254dG50X3QJZGlfbnVtX3h0bnRzOwoJcW54NF9tb2RlX3QJZGlfbW9kZTsK
CXFueDRfbXVpZF90CWRpX3VpZDsKCXFueDRfbWdpZF90CWRpX2dpZDsKCXFueDRfbmxpbmtfdAlk
aV9ubGluazsKCV9fdTgJCWRpX3plcm9bNF07Cglxbng0X2Z0eXBlX3QJZGlfdHlwZTsKCV9fdTgJ
CWRpX3N0YXR1czsKfTsKCnN0cnVjdCBxbng0X2xpbmtfaW5mbyB7CgljaGFyCQlkbF9mbmFtZVs0
OF07CglfX3UzMgkJZGxfaW5vZGVfYmxrOwoJX191OAkJZGxfaW5vZGVfbmR4OwoJX191OAkJZGxf
c3BhcmVbMTBdOwoJX191OAkJZGxfc3RhdHVzOwp9OwoKc3RydWN0IHFueDRfeGJsayB7CglfX3Uz
MgkJeGJsa19uZXh0X3hibGs7CglfX3UzMgkJeGJsa19wcmV2X3hibGs7CglfX3U4CQl4YmxrX251
bV94dG50czsKCV9fdTgJCXhibGtfc3BhcmVbM107CglfX3MzMgkJeGJsa19udW1fYmxvY2tzOwoJ
cW54NF94dG50X3QJeGJsa194dG50c1s2MF07CgljaGFyCQl4YmxrX3NpZ25hdHVyZVs4XTsKCXFu
eDRfeHRudF90CXhibGtfZmlyc3RfeHRudDsKfTsKCnN0cnVjdCBxbng0X3N1cGVyX2Jsb2NrIHsK
CXN0cnVjdCBxbng0X2lub2RlX2VudHJ5IFJvb3REaXI7CglzdHJ1Y3QgcW54NF9pbm9kZV9lbnRy
eSBJbm9kZTsKCXN0cnVjdCBxbng0X2lub2RlX2VudHJ5IEJvb3Q7CglzdHJ1Y3QgcW54NF9pbm9k
ZV9lbnRyeSBBbHRCb290Owp9OwoKCgoKCgoKCgoKCmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICpxbng0
X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgcW54NF9jb3VudF9mcmVlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sg
KnNiKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcW54NF9ibG9ja19tYXAoc3RydWN0IGlub2RlICpp
bm9kZSwgbG9uZyBpYmxvY2spOwoKZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqcW54NF9nZXRi
bGsoc3RydWN0IGlub2RlICosIGludCwgaW50KTsKZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAq
cW54NF9icmVhZChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBpbnQpOwoKZXh0ZXJuIGludCBxbng0X2Ny
ZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSk7
CmV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBxbng0X2ZpbGVfaW5vZGVfb3BlcmF0aW9u
czsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHFueDRfZGlyX2lub2RlX29wZXJhdGlv
bnM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFueDRfZmlsZV9vcGVyYXRpb25zOwpl
eHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBxbng0X2Rpcl9vcGVyYXRpb25zOwpleHRlcm4g
aW50IHFueDRfaXNfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb25nIGJsb2NrKTsKZXh0
ZXJuIGludCBxbng0X3NldF9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgbG9uZyBibG9j
aywgaW50IGJ1c3kpOwpleHRlcm4gaW50IHFueDRfY3JlYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUs
IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpOwpleHRlcm4gdm9pZCBxbng0X3RydW5j
YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpleHRlcm4gdm9pZCBxbng0X2ZyZWVfaW5vZGUoc3Ry
dWN0IGlub2RlICppbm9kZSk7CmV4dGVybiBpbnQgcW54NF91bmxpbmsoc3RydWN0IGlub2RlICpk
aXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CmV4dGVybiBpbnQgcW54NF9ybWRpcihzdHJ1Y3Qg
aW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKZXh0ZXJuIGludCBxbng0X3N5bmNf
ZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKZXh0ZXJuIGlu
dCBxbng0X3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CmV4dGVybiBpbnQgcW54NF9n
ZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBpYmxvY2ssIHN0cnVjdCBidWZmZXJf
aGVhZCAqYmgsIGludCBjcmVhdGUpOwoKCgoKIyAxNCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGlu
dXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvcW54NF9mc19zYi5oIiAyCgoKIAoKCgpzdHJ1Y3Qg
cW54NF9zYl9pbmZvIHsKCXN0cnVjdCBidWZmZXJfaGVhZAkqc2JfYnVmOwkgCglzdHJ1Y3QgcW54
NF9zdXBlcl9ibG9jawkqc2I7CQkgCgl1bnNpZ25lZCBpbnQJCVZlcnNpb247CSAKCXN0cnVjdCBx
bng0X2lub2RlX2VudHJ5CSpCaXRNYXA7CSAKfTsKCgojIDU2MSAiL29wdC9jcm9zc2Rldi9taXBz
ZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvb3B0L2Nyb3Nz
ZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9iZnNfZnNfc2IuaCIgMQog
CgoKCgoKCgogCgoKc3RydWN0IGJmc19zYl9pbmZvIHsKCXVuc2lnbmVkIGxvbmcgc2lfYmxvY2tz
OwoJdW5zaWduZWQgbG9uZyBzaV9mcmVlYjsKCXVuc2lnbmVkIGxvbmcgc2lfZnJlZWk7Cgl1bnNp
Z25lZCBsb25nIHNpX2xmX2lvZmY7Cgl1bnNpZ25lZCBsb25nIHNpX2xmX3NibGs7Cgl1bnNpZ25l
ZCBsb25nIHNpX2xmX2VibGs7Cgl1bnNpZ25lZCBsb25nIHNpX2xhc3RpOwoJY2hhciAqIHNpX2lt
YXA7CglzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzaV9zYmg7CQkgCglzdHJ1Y3QgYmZzX3N1cGVyX2Js
b2NrICogc2lfYmZzX3NiOwkgCn07CgoKIyA1NjIgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4
L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBz
ZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdWRmX2ZzX3NiLmgiIDEKIAojIDE3ICIv
b3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC91ZGZfZnNf
c2IuaCIKCgoKCiNwcmFnbWEgcGFjayAoIDEgKSAKCgoKCgoKCgpzdHJ1Y3QgdWRmX3NwYXJpbmdf
ZGF0YQp7CglfX3UzMglzX3NwYXJfbG9jWzRdOwoJX191OAlzX3NwYXJfcHNoaWZ0OwoJX191OAlz
X3NwYXJfaW5kZXhzaXplOwoJX191MzIJKnNfc3Bhcl9tYXA7Cgl1bmlvbgoJewoJCV9fdTgJKnNf
c3Bhcl9yZW1hcDg7CgkJX191MTYJKnNfc3Bhcl9yZW1hcDE2OwoJCV9fdTMyCSpzX3NwYXJfcmVt
YXAzMjsKCX0gc19zcGFyX3JlbWFwOwp9OwoKc3RydWN0IHVkZl92aXJ0dWFsX2RhdGEKewoJX191
MzIJc19udW1fZW50cmllczsKCV9fdTE2CXNfc3RhcnRfb2Zmc2V0Owp9OwoKc3RydWN0IHVkZl9w
YXJ0X21hcAp7Cgl1bmlvbgoJewoJCV9fdTMyCQkJYml0bWFwOwoJCXN0cnVjdCBpbm9kZQkqdGFi
bGU7Cgl9CQlzX3VzcGFjZTsKCXVuaW9uCgl7CgkJX191MzIJCQliaXRtYXA7CgkJc3RydWN0IGlu
b2RlCSp0YWJsZTsKCX0JCXNfZnNwYWNlOwoJX191MzIJc19wYXJ0aXRpb25fcm9vdDsKCV9fdTMy
CXNfcGFydGl0aW9uX2xlbjsKCV9fdTE2CXNfcGFydGl0aW9uX3R5cGU7CglfX3UxNglzX3BhcnRp
dGlvbl9udW07Cgl1bmlvbgoJewoJCXN0cnVjdCB1ZGZfc3BhcmluZ19kYXRhIHNfc3BhcmluZzsK
CQlzdHJ1Y3QgdWRmX3ZpcnR1YWxfZGF0YSBzX3ZpcnR1YWw7Cgl9IHNfdHlwZV9zcGVjaWZpYzsK
CV9fdTMyCSgqc19wYXJ0aXRpb25fZnVuYykoc3RydWN0IHN1cGVyX2Jsb2NrICosIF9fdTMyLCBf
X3UxNiwgX191MzIpOwoJX191MTYJc192b2x1bWVzZXFudW07CglfX3UxNglzX3BhcnRpdGlvbl9m
bGFnczsKfTsKCiNwcmFnbWEgcGFjayAoICkgCgpzdHJ1Y3QgdWRmX3NiX2luZm8KewoJc3RydWN0
IHVkZl9wYXJ0X21hcCAqc19wYXJ0bWFwczsKCV9fdTggIHNfdm9saWRlbnRbMzJdOwoKCSAKCV9f
dTE2IHNfcGFydGl0aW9uczsKCV9fdTE2IHNfcGFydGl0aW9uOwoKCSAKCV9fdTMyIHNfc2Vzc2lv
bjsKCV9fdTMyIHNfYW5jaG9yWzRdOwoJX191MzIgc19sYXN0YmxvY2s7CgoJc3RydWN0IGJ1ZmZl
cl9oZWFkICpzX2x2aWRiaDsKCglfX3UxNiBzX2xvYWRlZF9ibG9ja19iaXRtYXBzOwoJX191MzIg
c19ibG9ja19iaXRtYXBfbnVtYmVyWzhdOwoJc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2Jsb2NrX2Jp
dG1hcFs4XTsKCgkgCgltb2RlX3Qgc191bWFzazsKCWdpZF90IHNfZ2lkOwoJdWlkX3Qgc191aWQ7
CgoJIAoJdGltZV90IHNfcmVjb3JkdGltZTsKCgkgCglfX3UxNiBzX3NlcmlhbG51bTsKCgkgCglf
X3UxNiBzX3VkZnJldjsKCgkgCglfX3UzMiBzX2ZsYWdzOwoKCSAKCXN0cnVjdCBpbm9kZSAgICAq
c192YXQ7Cn07CgoKIyA1NjMgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9p
bmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3Jj
L2xpbnV4L2luY2x1ZGUvbGludXgvbmNwX2ZzX3NiLmgiIDEKIAoKCgoKCgoKCgoKIyAxICIvb3B0
L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9uY3BfbW91bnQu
aCIgMQogCgoKCgoKCgoKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51
eC9pbmNsdWRlL2xpbnV4L25jcC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgbmNw
X3JlcXVlc3RfaGVhZGVyIHsKCV9fdTE2IHR5cGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cglf
X3U4IHNlcXVlbmNlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191OCBjb25uX2xvdyBfX2F0
dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTggdGFzayBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsK
CV9fdTggY29ubl9oaWdoIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191OCBmdW5jdGlvbiBf
X2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTggZGF0YVswXSBfX2F0dHJpYnV0ZV9fKChwYWNr
ZWQpKTsKfTsKCgoKCnN0cnVjdCBuY3BfcmVwbHlfaGVhZGVyIHsKCV9fdTE2IHR5cGUgX19hdHRy
aWJ1dGVfXygocGFja2VkKSk7CglfX3U4IHNlcXVlbmNlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkp
OwoJX191OCBjb25uX2xvdyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTggdGFzayBfX2F0
dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTggY29ubl9oaWdoIF9fYXR0cmlidXRlX18oKHBhY2tl
ZCkpOwoJX191OCBjb21wbGV0aW9uX2NvZGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3U4
IGNvbm5lY3Rpb25fc3RhdGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3U4IGRhdGFbMF0g
X19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cn07CgoKCnN0cnVjdCBuY3Bfdm9sdW1lX2luZm8gewoJ
X191MzIgdG90YWxfYmxvY2tzOwoJX191MzIgZnJlZV9ibG9ja3M7CglfX3UzMiBwdXJnZWFibGVf
YmxvY2tzOwoJX191MzIgbm90X3lldF9wdXJnZWFibGVfYmxvY2tzOwoJX191MzIgdG90YWxfZGly
X2VudHJpZXM7CglfX3UzMiBhdmFpbGFibGVfZGlyX2VudHJpZXM7CglfX3U4IHNlY3RvcnNfcGVy
X2Jsb2NrOwoJY2hhciB2b2x1bWVfbmFtZVsoMTYpICsgMV07Cn07CgoKCgoKCgogCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKc3RydWN0IG53X2luZm9f
c3RydWN0IHsKCV9fdTMyIHNwYWNlQWxsb2MgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3Uz
MiBhdHRyaWJ1dGVzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191MTYgZmxhZ3MgX19hdHRy
aWJ1dGVfXygocGFja2VkKSk7CglfX3UzMiBkYXRhU3RyZWFtU2l6ZSBfX2F0dHJpYnV0ZV9fKChw
YWNrZWQpKTsKCV9fdTMyIHRvdGFsU3RyZWFtU2l6ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsK
CV9fdTE2IG51bWJlck9mU3RyZWFtcyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTE2IGNy
ZWF0aW9uVGltZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTE2IGNyZWF0aW9uRGF0ZSBf
X2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTMyIGNyZWF0b3JJRCBfX2F0dHJpYnV0ZV9fKChw
YWNrZWQpKTsKCV9fdTE2IG1vZGlmeVRpbWUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3Ux
NiBtb2RpZnlEYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191MzIgbW9kaWZpZXJJRCBf
X2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTE2IGxhc3RBY2Nlc3NEYXRlIF9fYXR0cmlidXRl
X18oKHBhY2tlZCkpOwoJX191MTYgYXJjaGl2ZVRpbWUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7
CglfX3UxNiBhcmNoaXZlRGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTMyIGFyY2hp
dmVySUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UxNiBpbmhlcml0ZWRSaWdodHNNYXNr
IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191MzIgZGlyRW50TnVtIF9fYXR0cmlidXRlX18o
KHBhY2tlZCkpOwoJX191MzIgRG9zRGlyTnVtIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191
MzIgdm9sTnVtYmVyIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191MzIgRUFEYXRhU2l6ZSBf
X2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTMyIEVBS2V5Q291bnQgX19hdHRyaWJ1dGVfXygo
cGFja2VkKSk7CglfX3UzMiBFQUtleVNpemUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3Uz
MiBOU0NyZWF0b3IgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3U4IG5hbWVMZW4gX19hdHRy
aWJ1dGVfXygocGFja2VkKSk7CglfX3U4IGVudHJ5TmFtZVsyNTZdIF9fYXR0cmlidXRlX18oKHBh
Y2tlZCkpOwp9OwoKIAoKCgoKCgoKCgoKCgoKCnN0cnVjdCBud19tb2RpZnlfZG9zX2luZm8gewoJ
X191MzIgYXR0cmlidXRlcyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTE2IGNyZWF0aW9u
RGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTE2IGNyZWF0aW9uVGltZSBfX2F0dHJp
YnV0ZV9fKChwYWNrZWQpKTsKCV9fdTMyIGNyZWF0b3JJRCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQp
KTsKCV9fdTE2IG1vZGlmeURhdGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UxNiBtb2Rp
ZnlUaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191MzIgbW9kaWZpZXJJRCBfX2F0dHJp
YnV0ZV9fKChwYWNrZWQpKTsKCV9fdTE2IGFyY2hpdmVEYXRlIF9fYXR0cmlidXRlX18oKHBhY2tl
ZCkpOwoJX191MTYgYXJjaGl2ZVRpbWUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UzMiBh
cmNoaXZlcklEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191MTYgbGFzdEFjY2Vzc0RhdGUg
X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UxNiBpbmhlcml0YW5jZUdyYW50TWFzayBfX2F0
dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTE2IGluaGVyaXRhbmNlUmV2b2tlTWFzayBfX2F0dHJp
YnV0ZV9fKChwYWNrZWQpKTsKCV9fdTMyIG1heGltdW1TcGFjZSBfX2F0dHJpYnV0ZV9fKChwYWNr
ZWQpKTsKfTsKCnN0cnVjdCBud19zZWFyY2hfc2VxdWVuY2UgewoJX191OCB2b2xOdW1iZXIgX19h
dHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UzMiBkaXJCYXNlIF9fYXR0cmlidXRlX18oKHBhY2tl
ZCkpOwoJX191MzIgc2VxdWVuY2UgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cn07CgoKIyAxMiAi
L29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbmNwX21v
dW50LmgiIDIKCgoKCiAKCgoKCgoKCgpzdHJ1Y3QgbmNwX21vdW50X2RhdGEgewoJaW50IHZlcnNp
b247Cgl1bnNpZ25lZCBpbnQgbmNwX2ZkOwkgCglfX2tlcm5lbF91aWRfdCBtb3VudGVkX3VpZDsJ
IAoJX19rZXJuZWxfcGlkX3Qgd2RvZ19waWQ7CQkgCgoJdW5zaWduZWQgY2hhciBtb3VudGVkX3Zv
bFsoMTYpICsgMV07Cgl1bnNpZ25lZCBpbnQgdGltZV9vdXQ7CSAKCgl1bnNpZ25lZCBpbnQgcmV0
cnlfY291bnQ7CSAKCXVuc2lnbmVkIGludCBmbGFnczsKCglfX2tlcm5lbF91aWRfdCB1aWQ7Cglf
X2tlcm5lbF9naWRfdCBnaWQ7CglfX2tlcm5lbF9tb2RlX3QgZmlsZV9tb2RlOwoJX19rZXJuZWxf
bW9kZV90IGRpcl9tb2RlOwp9OwoKCgpzdHJ1Y3QgbmNwX21vdW50X2RhdGFfdjQgewoJaW50IHZl
cnNpb247Cgl1bnNpZ25lZCBsb25nIGZsYWdzOwkgCgkgCgkgCgl1bnNpZ25lZCBsb25nIG1vdW50
ZWRfdWlkOwkgCgkgCglsb25nIHdkb2dfcGlkOwkJIAoKCXVuc2lnbmVkIGludCBuY3BfZmQ7CSAK
CXVuc2lnbmVkIGludCB0aW1lX291dDsJIAoKCXVuc2lnbmVkIGludCByZXRyeV9jb3VudDsJIAoK
CSAKCSAKCXVuc2lnbmVkIGxvbmcgdWlkOwoJdW5zaWduZWQgbG9uZyBnaWQ7CgkgCgl1bnNpZ25l
ZCBsb25nIGZpbGVfbW9kZTsKCXVuc2lnbmVkIGxvbmcgZGlyX21vZGU7Cn07CgoKCnN0cnVjdCBu
Y3BfbW91bnRfZGF0YV9rZXJuZWwgewoJdW5zaWduZWQgbG9uZyAgICBmbGFnczsJCSAKCXVuc2ln
bmVkIGludAkgaW50X2ZsYWdzOwkgCgoJX19rZXJuZWxfdWlkMzJfdCBtb3VudGVkX3VpZDsJIAoJ
X19rZXJuZWxfcGlkX3QgICB3ZG9nX3BpZDsJCSAKCXVuc2lnbmVkIGludCAgICAgbmNwX2ZkOwkg
Cgl1bnNpZ25lZCBpbnQgICAgIHRpbWVfb3V0OwkgCgoJdW5zaWduZWQgaW50ICAgICByZXRyeV9j
b3VudDsJIAoJdW5zaWduZWQgY2hhcgkgbW91bnRlZF92b2xbKDE2KSArIDFdOwoJX19rZXJuZWxf
dWlkMzJfdCB1aWQ7CglfX2tlcm5lbF9naWQzMl90IGdpZDsKCV9fa2VybmVsX21vZGVfdCAgZmls
ZV9tb2RlOwoJX19rZXJuZWxfbW9kZV90ICBkaXJfbW9kZTsKfTsKCgoKCiMgMTIgIi9vcHQvY3Jv
c3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L25jcF9mc19zYi5oIiAy
CgoKCgoKCgpzdHJ1Y3QgbmNwX3NlcnZlciB7CgoJc3RydWN0IG5jcF9tb3VudF9kYXRhX2tlcm5l
bCBtOwkgCgoKCglfX3U4IG5hbWVfc3BhY2VbKDY0KSArIDJdOwoKCXN0cnVjdCBmaWxlICpuY3Bf
ZmlscDsJIAoKCXU4IHNlcXVlbmNlOwoJdTggdGFzazsKCXUxNiBjb25uZWN0aW9uOwkJIAoKCXU4
IGNvbXBsZXRpb247CQkgCgl1OCBjb25uX3N0YXR1czsJCSAKCgoKCWludCBidWZmZXJfc2l6ZTsJ
IAoKCWludCByZXBseV9zaXplOwkJIAoKCWludCBwYWNrZXRfc2l6ZTsKCXVuc2lnbmVkIGNoYXIg
KnBhY2tldDsJIAoKCglpbnQgbG9jazsJCSAKCXN0cnVjdCBzZW1hcGhvcmUgc2VtOwoKCWludCBj
dXJyZW50X3NpemU7CSAKCWludCBoYXNfc3ViZnVuY3Rpb247CglpbnQgbmNwX3JlcGx5X3NpemU7
CgoJaW50IHJvb3Rfc2V0dXBlZDsKCgkgCglpbnQgc2lnbl93YW50ZWQ7CSAKCWludCBzaWduX2Fj
dGl2ZTsJIAoJY2hhciBzaWduX3Jvb3RbOF07CSAKCWNoYXIgc2lnbl9sYXN0WzE2XTsJCgoJIAoJ
c3RydWN0IHsKCQlpbnQJYXV0aF90eXBlOwoJCXNpemVfdAlvYmplY3RfbmFtZV9sZW47CgkJdm9p
ZCoJb2JqZWN0X25hbWU7CgkJaW50CW9iamVjdF90eXBlOwoJfSBhdXRoOwoJIAoJc3RydWN0IHsK
CQlzaXplX3QJbGVuOwoJCXZvaWQqCWRhdGE7Cgl9IHByaXY7CgoJIAoJc3RydWN0IG5sc190YWJs
ZSAqbmxzX3ZvbDsKCXN0cnVjdCBubHNfdGFibGUgKm5sc19pbzsKCgkgCglpbnQgZGVudHJ5X3R0
bDsKCgkgCgl1bnNpZ25lZCBpbnQgZmxhZ3M7Cn07CgoKCgoKCgoKCnN0YXRpYyBpbmxpbmUgaW50
IG5jcF9jb25uX3ZhbGlkKHN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIpCnsKCXJldHVybiAoKHNl
cnZlci0+Y29ubl9zdGF0dXMgJiAweDExKSA9PSAwKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIG5j
cF9pbnZhbGlkYXRlX2Nvbm4oc3RydWN0IG5jcF9zZXJ2ZXIgKnNlcnZlcikKewoJc2VydmVyLT5j
b25uX3N0YXR1cyB8PSAweDAxOwp9CgoKCgogCiMgNTY0ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1s
aW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYv
bWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3VzYmRldl9mc19zYi5oIiAxCnN0
cnVjdCB1c2JkZXZfc2JfaW5mbyB7CglzdHJ1Y3QgbGlzdF9oZWFkIHNsaXN0OwoJc3RydWN0IGxp
c3RfaGVhZCBpbGlzdDsKCXVpZF90IGRldnVpZDsKCWdpZF90IGRldmdpZDsKCXVtb2RlX3QgZGV2
bW9kZTsKCXVpZF90IGJ1c3VpZDsKCWdpZF90IGJ1c2dpZDsKCXVtb2RlX3QgYnVzbW9kZTsKfTsK
IyA1NjUgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4
L2ZzLmgiIDIKCgpleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBzdXBlcl9ibG9ja3M7CgoKc3RydWN0
IHN1cGVyX2Jsb2NrIHsKCXN0cnVjdCBsaXN0X2hlYWQJc19saXN0OwkJIAoJa2Rldl90CQkJc19k
ZXY7Cgl1bnNpZ25lZCBsb25nCQlzX2Jsb2Nrc2l6ZTsKCXVuc2lnbmVkIGNoYXIJCXNfYmxvY2tz
aXplX2JpdHM7Cgl1bnNpZ25lZCBjaGFyCQlzX2xvY2s7Cgl1bnNpZ25lZCBjaGFyCQlzX2RpcnQ7
CglzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZQkqc190eXBlOwoJc3RydWN0IHN1cGVyX29wZXJhdGlv
bnMJKnNfb3A7CglzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucwkqZHFfb3A7Cgl1bnNpZ25lZCBsb25n
CQlzX2ZsYWdzOwoJdW5zaWduZWQgbG9uZwkJc19tYWdpYzsKCXN0cnVjdCBkZW50cnkJCSpzX3Jv
b3Q7Cgl3YWl0X3F1ZXVlX2hlYWRfdAlzX3dhaXQ7CgoJc3RydWN0IGlub2RlCQkqc19pYmFza2V0
OwoJc2hvcnQgaW50CQlzX2liYXNrZXRfY291bnQ7CglzaG9ydCBpbnQJCXNfaWJhc2tldF9tYXg7
CglzdHJ1Y3QgbGlzdF9oZWFkCXNfZGlydHk7CSAKCXN0cnVjdCBsaXN0X2hlYWQJc19maWxlczsK
CglzdHJ1Y3QgYmxvY2tfZGV2aWNlCSpzX2JkZXY7CglzdHJ1Y3QgcXVvdGFfbW91bnRfb3B0aW9u
cyBzX2RxdW90OwkgCgoJdW5pb24gewoJCXN0cnVjdCBtaW5peF9zYl9pbmZvCW1pbml4X3NiOwoJ
CXN0cnVjdCBleHQyX3NiX2luZm8JZXh0Ml9zYjsKCQlzdHJ1Y3QgaHBmc19zYl9pbmZvCWhwZnNf
c2I7CgkJc3RydWN0IG50ZnNfc2JfaW5mbwludGZzX3NiOwoJCXN0cnVjdCBtc2Rvc19zYl9pbmZv
CW1zZG9zX3NiOwoJCXN0cnVjdCBpc29mc19zYl9pbmZvCWlzb2ZzX3NiOwoJCXN0cnVjdCBuZnNf
c2JfaW5mbwluZnNfc2I7CgkJc3RydWN0IHN5c3Zfc2JfaW5mbwlzeXN2X3NiOwoJCXN0cnVjdCBh
ZmZzX3NiX2luZm8JYWZmc19zYjsKCQlzdHJ1Y3QgdWZzX3NiX2luZm8JdWZzX3NiOwoJCXN0cnVj
dCBlZnNfc2JfaW5mbwllZnNfc2I7CgkJc3RydWN0IHJvbWZzX3NiX2luZm8Jcm9tZnNfc2I7CgkJ
c3RydWN0IHNtYl9zYl9pbmZvCXNtYmZzX3NiOwoJCXN0cnVjdCBoZnNfc2JfaW5mbwloZnNfc2I7
CgkJc3RydWN0IGFkZnNfc2JfaW5mbwlhZGZzX3NiOwoJCXN0cnVjdCBxbng0X3NiX2luZm8JcW54
NF9zYjsKCQlzdHJ1Y3QgYmZzX3NiX2luZm8JYmZzX3NiOwoJCXN0cnVjdCB1ZGZfc2JfaW5mbwl1
ZGZfc2I7CgkJc3RydWN0IG5jcF9zZXJ2ZXIJbmNwZnNfc2I7CgkJc3RydWN0IHVzYmRldl9zYl9p
bmZvICAgdXNiZGV2ZnNfc2I7CgkJdm9pZAkJCSpnZW5lcmljX3NicDsKCX0gdTsKCSAKCgoKCXN0
cnVjdCBzZW1hcGhvcmUgc192ZnNfcmVuYW1lX3NlbTsJIAoKCSAKCgoKCgoKCXN0cnVjdCBzZW1h
cGhvcmUgc19uZnNkX2ZyZWVfcGF0aF9zZW07Cn07CgogCgoKZXh0ZXJuIGludCB2ZnNfY3JlYXRl
KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CmV4dGVybiBpbnQgdmZzX21r
ZGlyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CmV4dGVybiBpbnQgdmZz
X21rbm9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCwgZGV2X3QpOwpleHRl
cm4gaW50IHZmc19zeW1saW5rKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0
IGNoYXIgKik7CmV4dGVybiBpbnQgdmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5v
ZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJuIGludCB2ZnNfcm1kaXIoc3RydWN0IGlub2Rl
ICosIHN0cnVjdCBkZW50cnkgKik7CmV4dGVybiBpbnQgdmZzX3VubGluayhzdHJ1Y3QgaW5vZGUg
Kiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJuIGludCB2ZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAq
LCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwoKIAoK
CgoKCnR5cGVkZWYgaW50ICgqZmlsbGRpcl90KSh2b2lkICosIGNvbnN0IGNoYXIgKiwgaW50LCBv
ZmZfdCwgaW5vX3QpOwoKc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHsKCWludCAoKm9w
ZW4pIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CglpbnQgKCpyZWxlYXNlKSAoc3Ry
dWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwoJaW50ICgqaW9jdGwpIChzdHJ1Y3QgaW5vZGUg
Kiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOwoJaW50ICgqY2hlY2tf
bWVkaWFfY2hhbmdlKSAoa2Rldl90KTsKCWludCAoKnJldmFsaWRhdGUpIChrZGV2X3QpOwp9OwoK
c3RydWN0IGZpbGVfb3BlcmF0aW9ucyB7Cglsb2ZmX3QgKCpsbHNlZWspIChzdHJ1Y3QgZmlsZSAq
LCBsb2ZmX3QsIGludCk7Cglzc2l6ZV90ICgqcmVhZCkgKHN0cnVjdCBmaWxlICosIGNoYXIgKiwg
c2l6ZV90LCBsb2ZmX3QgKik7Cglzc2l6ZV90ICgqd3JpdGUpIChzdHJ1Y3QgZmlsZSAqLCBjb25z
dCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOwoJaW50ICgqcmVhZGRpcikgKHN0cnVjdCBmaWxl
ICosIHZvaWQgKiwgZmlsbGRpcl90KTsKCXVuc2lnbmVkIGludCAoKnBvbGwpIChzdHJ1Y3QgZmls
ZSAqLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKik7CglpbnQgKCppb2N0bCkgKHN0cnVjdCBp
bm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwoJaW50
ICgqbW1hcCkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKCWludCAo
Km9wZW4pIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CglpbnQgKCpmbHVzaCkgKHN0
cnVjdCBmaWxlICopOwoJaW50ICgqcmVsZWFzZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmls
ZSAqKTsKCWludCAoKmZzeW5jKSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKCWlu
dCAoKmZhc3luYykgKGludCwgc3RydWN0IGZpbGUgKiwgaW50KTsKCWludCAoKmxvY2spIChzdHJ1
Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmaWxlX2xvY2sgKik7Cglzc2l6ZV90ICgqcmVhZHYpIChz
dHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90
ICopOwoJc3NpemVfdCAoKndyaXRldikgKHN0cnVjdCBmaWxlICosIGNvbnN0IHN0cnVjdCBpb3Zl
YyAqLCB1bnNpZ25lZCBsb25nLCBsb2ZmX3QgKik7Cn07CgpzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9u
cyB7CglpbnQgKCpjcmVhdGUpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosaW50KTsK
CXN0cnVjdCBkZW50cnkgKiAoKmxvb2t1cCkgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkg
Kik7CglpbnQgKCpsaW5rKSAoc3RydWN0IGRlbnRyeSAqLHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBk
ZW50cnkgKik7CglpbnQgKCp1bmxpbmspIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICop
OwoJaW50ICgqc3ltbGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixjb25zdCBj
aGFyICopOwoJaW50ICgqbWtkaXIpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosaW50
KTsKCWludCAoKnJtZGlyKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsKCWludCAo
Km1rbm9kKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGludCxpbnQpOwoJaW50ICgq
cmVuYW1lKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwKCQkJc3RydWN0IGlub2Rl
ICosIHN0cnVjdCBkZW50cnkgKik7CglpbnQgKCpyZWFkbGluaykgKHN0cnVjdCBkZW50cnkgKiwg
Y2hhciAqLGludCk7CglzdHJ1Y3QgZGVudHJ5ICogKCpmb2xsb3dfbGluaykgKHN0cnVjdCBkZW50
cnkgKiwgc3RydWN0IGRlbnRyeSAqLCB1bnNpZ25lZCBpbnQpOwoJdm9pZCAoKnRydW5jYXRlKSAo
c3RydWN0IGlub2RlICopOwoJaW50ICgqcGVybWlzc2lvbikgKHN0cnVjdCBpbm9kZSAqLCBpbnQp
OwoJaW50ICgqcmV2YWxpZGF0ZSkgKHN0cnVjdCBkZW50cnkgKik7CglpbnQgKCpzZXRhdHRyKSAo
c3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7CglpbnQgKCpnZXRhdHRyKSAoc3RydWN0
IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7Cn07CgogCgoKCnN0cnVjdCBzdXBlcl9vcGVyYXRp
b25zIHsKCXZvaWQgKCpyZWFkX2lub2RlKSAoc3RydWN0IGlub2RlICopOwoJdm9pZCAoKndyaXRl
X2lub2RlKSAoc3RydWN0IGlub2RlICopOwoJdm9pZCAoKnB1dF9pbm9kZSkgKHN0cnVjdCBpbm9k
ZSAqKTsKCXZvaWQgKCpkZWxldGVfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7Cgl2b2lkICgqcHV0
X3N1cGVyKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwoJdm9pZCAoKndyaXRlX3N1cGVyKSAoc3Ry
dWN0IHN1cGVyX2Jsb2NrICopOwoJaW50ICgqc3RhdGZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICos
IHN0cnVjdCBzdGF0ZnMgKik7CglpbnQgKCpyZW1vdW50X2ZzKSAoc3RydWN0IHN1cGVyX2Jsb2Nr
ICosIGludCAqLCBjaGFyICopOwoJdm9pZCAoKmNsZWFyX2lub2RlKSAoc3RydWN0IGlub2RlICop
OwoJdm9pZCAoKnVtb3VudF9iZWdpbikgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKfTsKCnN0cnVj
dCBkcXVvdF9vcGVyYXRpb25zIHsKCXZvaWQgKCppbml0aWFsaXplKSAoc3RydWN0IGlub2RlICos
IHNob3J0KTsKCXZvaWQgKCpkcm9wKSAoc3RydWN0IGlub2RlICopOwoJaW50ICgqYWxsb2NfYmxv
Y2spIChjb25zdCBzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQgbG9uZywgY2hhcik7CglpbnQgKCph
bGxvY19pbm9kZSkgKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nKTsKCXZvaWQg
KCpmcmVlX2Jsb2NrKSAoY29uc3Qgc3RydWN0IGlub2RlICosIHVuc2lnbmVkIGxvbmcpOwoJdm9p
ZCAoKmZyZWVfaW5vZGUpIChjb25zdCBzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQgbG9uZyk7Cglp
bnQgKCp0cmFuc2ZlcikgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOwp9OwoKc3Ry
dWN0IGZpbGVfc3lzdGVtX3R5cGUgewoJY29uc3QgY2hhciAqbmFtZTsKCWludCBmc19mbGFnczsK
CXN0cnVjdCBzdXBlcl9ibG9jayAqKCpyZWFkX3N1cGVyKSAoc3RydWN0IHN1cGVyX2Jsb2NrICos
IHZvaWQgKiwgaW50KTsKCXN0cnVjdCBtb2R1bGUgKm93bmVyOwoJc3RydWN0IGZpbGVfc3lzdGVt
X3R5cGUgKiBuZXh0Owp9OwoKCgoKCgoKCgoKCgpleHRlcm4gaW50IHJlZ2lzdGVyX2ZpbGVzeXN0
ZW0oc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKik7CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9maWxl
c3lzdGVtKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICopOwoKc3RhdGljIGlubGluZSBpbnQgdmZz
X3N0YXRmcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qgc3RhdGZzICpidWYpCnsKCWlm
ICghc2IpCgkJcmV0dXJuIC0xOTsKCWlmICghc2ItPnNfb3AgfHwgIXNiLT5zX29wLT5zdGF0ZnMp
CgkJcmV0dXJuIC04OTsKCW1lbXNldChidWYsIDAsIHNpemVvZihzdHJ1Y3Qgc3RhdGZzKSk7Cgly
ZXR1cm4gc2ItPnNfb3AtPnN0YXRmcyhzYiwgYnVmKTsKfQoKICAKCgoKCgoKCmV4dGVybiBpbnQg
bG9ja3NfbWFuZGF0b3J5X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBpbnQgbG9ja3Nf
bWFuZGF0b3J5X2FyZWEoaW50LCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgbG9mZl90
LCBzaXplX3QpOwoKIAoKCgoKCgpzdGF0aWMgaW5saW5lIGludCBsb2Nrc192ZXJpZnlfbG9ja2Vk
KHN0cnVjdCBpbm9kZSAqaW5vZGUpCnsKCWlmICgoKCgoaW5vZGUpLT5pX3NiICYmIChpbm9kZSkt
Pmlfc2ItPnNfZmxhZ3MgJiAoIDY0KSkgfHwgKGlub2RlKS0+aV9mbGFncyAmICggNjQpKSAmJiAo
KGlub2RlKS0+aV9tb2RlICYgKDAwMDIwMDAgfCAwMDAxMCkpID09IDAwMDIwMDApKQoJCXJldHVy
biBsb2Nrc19tYW5kYXRvcnlfbG9ja2VkKGlub2RlKTsKCXJldHVybiAwOwp9CgpleHRlcm4gaW5s
aW5lIGludCBsb2Nrc192ZXJpZnlfYXJlYShpbnQgcmVhZF93cml0ZSwgc3RydWN0IGlub2RlICpp
bm9kZSwKCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IG9mZnNldCwKCQkJCSAgICBz
aXplX3QgY291bnQpCnsKCWlmIChpbm9kZS0+aV9mbG9jayAmJiAoKCgoaW5vZGUpLT5pX3NiICYm
IChpbm9kZSktPmlfc2ItPnNfZmxhZ3MgJiAoIDY0KSkgfHwgKGlub2RlKS0+aV9mbGFncyAmICgg
NjQpKSAmJiAoKGlub2RlKS0+aV9tb2RlICYgKDAwMDIwMDAgfCAwMDAxMCkpID09IDAwMDIwMDAp
KQoJCXJldHVybiBsb2Nrc19tYW5kYXRvcnlfYXJlYShyZWFkX3dyaXRlLCBpbm9kZSwgZmlscCwg
b2Zmc2V0LCBjb3VudCk7CglyZXR1cm4gMDsKfQoKZXh0ZXJuIGlubGluZSBpbnQgbG9ja3NfdmVy
aWZ5X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCgkJCQkgICAgc3RydWN0IGZpbGUgKmZp
bHAsCgkJCQkgICAgbG9mZl90IHNpemUpCnsKCWlmIChpbm9kZS0+aV9mbG9jayAmJiAoKCgoaW5v
ZGUpLT5pX3NiICYmIChpbm9kZSktPmlfc2ItPnNfZmxhZ3MgJiAoIDY0KSkgfHwgKGlub2RlKS0+
aV9mbGFncyAmICggNjQpKSAmJiAoKGlub2RlKS0+aV9tb2RlICYgKDAwMDIwMDAgfCAwMDAxMCkp
ID09IDAwMDIwMDApKQoJCXJldHVybiBsb2Nrc19tYW5kYXRvcnlfYXJlYSgKCQkJMiwgaW5vZGUs
IGZpbHAsCgkJCXNpemUgPCBpbm9kZS0+aV9zaXplID8gc2l6ZSA6IGlub2RlLT5pX3NpemUsCgkJ
CWFicyhpbm9kZS0+aV9zaXplIC0gc2l6ZSkKCQkpOwoJcmV0dXJuIDA7Cn0KCgogCgogIGxvbmcg
c3lzX29wZW4oY29uc3QgY2hhciAqLCBpbnQsIGludCk7CiAgbG9uZyBzeXNfY2xvc2UodW5zaWdu
ZWQgaW50KTsJIApleHRlcm4gaW50IGRvX2Nsb3NlKHVuc2lnbmVkIGludCwgaW50KTsJCSAKZXh0
ZXJuIGludCBkb190cnVuY2F0ZShzdHJ1Y3QgZGVudHJ5ICosIGxvZmZfdCBzdGFydCk7CmV4dGVy
biBpbnQgZ2V0X3VudXNlZF9mZCh2b2lkKTsKZXh0ZXJuIHZvaWQgcHV0X3VudXNlZF9mZCh1bnNp
Z25lZCBpbnQpOwoKZXh0ZXJuIHN0cnVjdCBmaWxlICpmaWxwX29wZW4oY29uc3QgY2hhciAqLCBp
bnQsIGludCwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJuIHN0cnVjdCBmaWxlICpkZW50cnlfb3Bl
bihzdHJ1Y3QgZGVudHJ5ICosIGludCk7CmV4dGVybiBpbnQgZmlscF9jbG9zZShzdHJ1Y3QgZmls
ZSAqLCBmbF9vd25lcl90IGlkKTsKCmV4dGVybiBjaGFyICogZ2V0bmFtZShjb25zdCBjaGFyICop
OwoKCgplbnVtIHtCREVWX0ZJTEUsIEJERVZfU1dBUCwgQkRFVl9GUywgQkRFVl9SQVd9OwpleHRl
cm4gdm9pZCBraWxsX2Zhc3luYyhzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqLCBpbnQsIGludCk7CmV4
dGVybiBpbnQgcmVnaXN0ZXJfYmxrZGV2KHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqLCBzdHJ1
Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgKik7CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9ibGtk
ZXYodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICopOwpleHRlcm4gc3RydWN0IGJsb2NrX2Rldmlj
ZSAqYmRnZXQoZGV2X3QpOwpleHRlcm4gdm9pZCBiZHB1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICop
OwpleHRlcm4gaW50IGJsa2Rldl9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsK
ZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzOwpleHRlcm4gc3RydWN0
IGZpbGVfb3BlcmF0aW9ucyBkZWZfZmlmb19mb3BzOwpleHRlcm4gaW50IGlvY3RsX2J5X2JkZXYo
c3RydWN0IGJsb2NrX2RldmljZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CmV4dGVybiBp
bnQgYmxrZGV2X2dldChzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIG1vZGVfdCwgdW5zaWduZWQsIGlu
dCk7CmV4dGVybiBpbnQgYmxrZGV2X3B1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIGludCk7Cgog
CmV4dGVybiBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgKmdldF9ibGtmb3Bz
KHVuc2lnbmVkIGludCk7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpnZXRfY2hyZm9w
cyh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CmV4dGVybiBpbnQgcmVnaXN0ZXJfY2hyZGV2
KHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICopOwpl
eHRlcm4gaW50IHVucmVnaXN0ZXJfY2hyZGV2KHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqKTsK
ZXh0ZXJuIGludCBjaHJkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CmV4
dGVybiBjb25zdCBjaGFyICogYmRldm5hbWUoa2Rldl90KTsKZXh0ZXJuIGNvbnN0IGNoYXIgKiBj
ZGV2bmFtZShrZGV2X3QpOwpleHRlcm4gY29uc3QgY2hhciAqIGtkZXZuYW1lKGtkZXZfdCk7CmV4
dGVybiB2b2lkIGluaXRfc3BlY2lhbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgdW1vZGVfdCwgaW50
KTsKCiAKZXh0ZXJuIHZvaWQgbWFrZV9iYWRfaW5vZGUoc3RydWN0IGlub2RlICopOwpleHRlcm4g
aW50IGlzX2JhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CgpleHRlcm4gc3RydWN0IGZpbGVfb3Bl
cmF0aW9ucyBjb25uZWN0aW5nX2ZpZm9fZm9wczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlv
bnMgcmVhZF9maWZvX2ZvcHM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdyaXRlX2Zp
Zm9fZm9wczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmR3cl9maWZvX2ZvcHM7CmV4
dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlYWRfcGlwZV9mb3BzOwpleHRlcm4gc3RydWN0
IGZpbGVfb3BlcmF0aW9ucyB3cml0ZV9waXBlX2ZvcHM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVy
YXRpb25zIHJkd3JfcGlwZV9mb3BzOwoKZXh0ZXJuIGludCBmc19tYXlfcmVtb3VudF9ybyhzdHJ1
Y3Qgc3VwZXJfYmxvY2sgKik7CmV4dGVybiBpbnQgZnNfbWF5X21vdW50KGtkZXZfdCk7CgpleHRl
cm4gaW50IHRyeV90b19mcmVlX2J1ZmZlcnMoc3RydWN0IHBhZ2UgKik7CmV4dGVybiB2b2lkIHJl
ZmlsZV9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICogYnVmKTsKCgoKCgoKCiAKCgpleHRlcm4g
aW5saW5lIHZvaWQgbWFya19idWZmZXJfdXB0b2RhdGUoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgs
IGludCBvbikKewoJaWYgKG9uKQoJCXNldF9iaXQoMCwgJmJoLT5iX3N0YXRlKTsKCWVsc2UKCQlj
bGVhcl9iaXQoMCwgJmJoLT5iX3N0YXRlKTsKfQoKCgpleHRlcm4gaW5saW5lIHZvaWQgX19tYXJr
X2J1ZmZlcl9jbGVhbihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQp7CglyZWZpbGVfYnVmZmVyKGJo
KTsKfQoKZXh0ZXJuIGlubGluZSB2b2lkIG1hcmtfYnVmZmVyX2NsZWFuKHN0cnVjdCBidWZmZXJf
aGVhZCAqIGJoKQp7CglpZiAodGVzdF9hbmRfY2xlYXJfYml0KDEsICYoYmgpLT5iX3N0YXRlKSkK
CQlfX21hcmtfYnVmZmVyX2NsZWFuKGJoKTsKfQoKCgpleHRlcm4gaW5saW5lIHZvaWQgX19tYXJr
X2J1ZmZlcl9wcm90ZWN0ZWQoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKewoJcmVmaWxlX2J1ZmZl
cihiaCk7Cn0KCmV4dGVybiBpbmxpbmUgdm9pZCBtYXJrX2J1ZmZlcl9wcm90ZWN0ZWQoc3RydWN0
IGJ1ZmZlcl9oZWFkICogYmgpCnsKCWlmICghdGVzdF9hbmRfc2V0X2JpdCg2LCAmKGJoKS0+Yl9z
dGF0ZSkpCgkJX19tYXJrX2J1ZmZlcl9wcm90ZWN0ZWQoYmgpOwp9CgpleHRlcm4gdm9pZCBfX21h
cmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBmbGFnKTsKZXh0ZXJu
IHZvaWQgbWFya19idWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IGZsYWcp
OwoKCgpleHRlcm4gdm9pZCBiYWxhbmNlX2RpcnR5KGtkZXZfdCk7CmV4dGVybiBpbnQgY2hlY2tf
ZGlza19jaGFuZ2Uoa2Rldl90KTsKZXh0ZXJuIGludCBpbnZhbGlkYXRlX2lub2RlcyhzdHJ1Y3Qg
c3VwZXJfYmxvY2sgKik7CmV4dGVybiB2b2lkIGludmFsaWRhdGVfaW5vZGVfcGFnZXMoc3RydWN0
IGlub2RlICopOwoKCmV4dGVybiB2b2lkIF9faW52YWxpZGF0ZV9idWZmZXJzKGtkZXZfdCBkZXYs
IGludCk7CmV4dGVybiBpbnQgZmxvcHB5X2lzX3dwKGludCk7CmV4dGVybiB2b2lkIHN5bmNfaW5v
ZGVzKGtkZXZfdCk7CmV4dGVybiB2b2lkIHdyaXRlX2lub2RlX25vdyhzdHJ1Y3QgaW5vZGUgKik7
CmV4dGVybiB2b2lkIHN5bmNfZGV2KGtkZXZfdCk7CmV4dGVybiBpbnQgZnN5bmNfZGV2KGtkZXZf
dCk7CmV4dGVybiB2b2lkIHN5bmNfc3VwZXJzKGtkZXZfdCk7CmV4dGVybiBpbnQgYm1hcChzdHJ1
Y3QgaW5vZGUgKiwgaW50KTsKZXh0ZXJuIGludCBub3RpZnlfY2hhbmdlKHN0cnVjdCBkZW50cnkg
Kiwgc3RydWN0IGlhdHRyICopOwpleHRlcm4gaW50IHBlcm1pc3Npb24oc3RydWN0IGlub2RlICos
IGludCk7CmV4dGVybiBpbnQgZ2V0X3dyaXRlX2FjY2VzcyhzdHJ1Y3QgaW5vZGUgKik7CmV4dGVy
biB2b2lkIHB1dF93cml0ZV9hY2Nlc3Moc3RydWN0IGlub2RlICopOwpleHRlcm4gc3RydWN0IGRl
bnRyeSAqIGRvX21rbm9kKGNvbnN0IGNoYXIgKiwgaW50LCBkZXZfdCk7CmV4dGVybiBpbnQgZG9f
cGlwZShpbnQgKik7CmV4dGVybiBpbnQgZG9fdW5saW5rKGNvbnN0IGNoYXIgKiBuYW1lLCBzdHJ1
Y3QgZGVudHJ5ICopOwpleHRlcm4gc3RydWN0IGRlbnRyeSAqIF9fb3Blbl9uYW1laShjb25zdCBj
aGFyICosIGludCwgaW50LCBzdHJ1Y3QgZGVudHJ5ICopOwoKc3RhdGljIGlubGluZSBzdHJ1Y3Qg
ZGVudHJ5ICogb3Blbl9uYW1laShjb25zdCBjaGFyICpwYXRobmFtZSkKewoJcmV0dXJuIF9fb3Bl
bl9uYW1laShwYXRobmFtZSwgMCwgMCwgKCh2b2lkICopMCkpOwp9CgpleHRlcm4gaW50IGtlcm5l
bF9yZWFkKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsIGNoYXIgKiwgdW5zaWduZWQgbG9u
Zyk7CmV4dGVybiBzdHJ1Y3QgZmlsZSAqIG9wZW5fZXhlYyhjb25zdCBjaGFyICopOwogCiAKZXh0
ZXJuIGludCBpc19zdWJkaXIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwpleHRl
cm4gaW5vX3QgZmluZF9pbm9kZV9udW1iZXIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAq
KTsKCiAKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKIAojIDk4MSAiL29wdC9jcm9zc2Rldi9taXBz
ZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIKdHlwZWRlZiBzdHJ1Y3QgewoJ
c2l6ZV90IHdyaXR0ZW47CglzaXplX3QgY291bnQ7CgljaGFyICogYnVmOwoJaW50IGVycm9yOwp9
IHJlYWRfZGVzY3JpcHRvcl90OwoKdHlwZWRlZiBpbnQgKCpyZWFkX2FjdG9yX3QpKHJlYWRfZGVz
Y3JpcHRvcl90ICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcp
OwoKCmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogbG9va3VwX2RlbnRyeShjb25zdCBjaGFyICosIHN0
cnVjdCBkZW50cnkgKiwgdW5zaWduZWQgaW50KTsKZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBsb29r
dXBfb25lKGNvbnN0IGNoYXIgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJuIHN0cnVjdCBkZW50
cnkgKiBfX25hbWVpKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50KTsKCgoKCmV4dGVybiB2b2lk
IGlwdXQoc3RydWN0IGlub2RlICopOwpleHRlcm4gc3RydWN0IGlub2RlICogaWdyYWIoc3RydWN0
IGlub2RlICopOwpleHRlcm4gaW5vX3QgaXVuaXF1ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW5v
X3QpOwoKdHlwZWRlZiBpbnQgKCpmaW5kX2lub2RlX3QpKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25l
ZCBsb25nLCB2b2lkICopOwpleHRlcm4gc3RydWN0IGlub2RlICogaWdldDQoc3RydWN0IHN1cGVy
X2Jsb2NrICosIHVuc2lnbmVkIGxvbmcsIGZpbmRfaW5vZGVfdCwgdm9pZCAqKTsKc3RhdGljIGlu
bGluZSBzdHJ1Y3QgaW5vZGUgKmlnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQg
bG9uZyBpbm8pCnsKCXJldHVybiBpZ2V0NChzYiwgaW5vLCAoKHZvaWQgKikwKSwgKCh2b2lkICop
MCkpOwp9CgpleHRlcm4gdm9pZCBjbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBz
dHJ1Y3QgaW5vZGUgKiBnZXRfZW1wdHlfaW5vZGUodm9pZCk7CgpleHRlcm4gdm9pZCBpbnNlcnRf
aW5vZGVfaGFzaChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIHJlbW92ZV9pbm9kZV9oYXNo
KHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHN0cnVjdCBmaWxlICogZ2V0X2VtcHR5X2ZpbHAodm9p
ZCk7CmV4dGVybiB2b2lkIGZpbGVfbW92ZShzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGxpc3RfaGVh
ZCAqbGlzdCk7CmV4dGVybiB2b2lkIGZpbGVfbW92ZXRvKHN0cnVjdCBmaWxlICpuZXcsIHN0cnVj
dCBmaWxlICpvbGQpOwpleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogZ2V0X2hhc2hfdGFibGUo
a2Rldl90LCBpbnQsIGludCk7CmV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBnZXRibGsoa2Rl
dl90LCBpbnQsIGludCk7CmV4dGVybiB2b2lkIGxsX3J3X2Jsb2NrKGludCwgaW50LCBzdHJ1Y3Qg
YnVmZmVyX2hlYWQgKiBiaFtdKTsKZXh0ZXJuIGludCBpc19yZWFkX29ubHkoa2Rldl90KTsKZXh0
ZXJuIHZvaWQgX19icmVsc2Uoc3RydWN0IGJ1ZmZlcl9oZWFkICopOwpleHRlcm4gaW5saW5lIHZv
aWQgYnJlbHNlKHN0cnVjdCBidWZmZXJfaGVhZCAqYnVmKQp7CglpZiAoYnVmKQoJCV9fYnJlbHNl
KGJ1Zik7Cn0KZXh0ZXJuIHZvaWQgX19iZm9yZ2V0KHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKZXh0
ZXJuIGlubGluZSB2b2lkIGJmb3JnZXQoc3RydWN0IGJ1ZmZlcl9oZWFkICpidWYpCnsKCWlmIChi
dWYpCgkJX19iZm9yZ2V0KGJ1Zik7Cn0KZXh0ZXJuIHZvaWQgc2V0X2Jsb2Nrc2l6ZShrZGV2X3Qs
IGludCk7CmV4dGVybiB1bnNpZ25lZCBpbnQgZ2V0X2hhcmRibG9ja3NpemUoa2Rldl90KTsKZXh0
ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIGJyZWFkKGtkZXZfdCwgaW50LCBpbnQpOwpleHRlcm4g
c3RydWN0IGJ1ZmZlcl9oZWFkICogYnJlYWRhKGtkZXZfdCwgaW50LCBpbnQsIHVuc2lnbmVkIGlu
dCwgdW5zaWduZWQgaW50KTsKZXh0ZXJuIHZvaWQgd2FrZXVwX2JkZmx1c2goaW50IHdhaXQpOwoK
ZXh0ZXJuIGludCBicndfcGFnZShpbnQsIHN0cnVjdCBwYWdlICosIGtkZXZfdCwgaW50IFtdLCBp
bnQpOwoKdHlwZWRlZiBpbnQgKCp3cml0ZXBhZ2VfdCkoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBh
Z2UgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgY29uc3QgY2hhciAqKTsKdHlwZWRl
ZiBpbnQgKGdldF9ibG9ja190KShzdHJ1Y3QgaW5vZGUqLGxvbmcsc3RydWN0IGJ1ZmZlcl9oZWFk
KixpbnQpOwoKIApleHRlcm4gaW50IGJsb2NrX2ZsdXNocGFnZShzdHJ1Y3QgcGFnZSAqLCB1bnNp
Z25lZCBsb25nKTsKZXh0ZXJuIGludCBibG9ja19zeW1saW5rKHN0cnVjdCBpbm9kZSAqLCBjb25z
dCBjaGFyICosIGludCk7CmV4dGVybiBpbnQgYmxvY2tfd3JpdGVfZnVsbF9wYWdlKHN0cnVjdCBw
YWdlKiwgZ2V0X2Jsb2NrX3QqKTsKZXh0ZXJuIGludCBibG9ja19yZWFkX2Z1bGxfcGFnZShzdHJ1
Y3QgcGFnZSosIGdldF9ibG9ja190Kik7CmV4dGVybiBpbnQgYmxvY2tfcHJlcGFyZV93cml0ZShz
dHJ1Y3QgcGFnZSosIHVuc2lnbmVkLCB1bnNpZ25lZCwgZ2V0X2Jsb2NrX3QqKTsKZXh0ZXJuIGlu
dCBjb250X3ByZXBhcmVfd3JpdGUoc3RydWN0IHBhZ2UqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGdl
dF9ibG9ja190KiwKCQkJCXVuc2lnbmVkIGxvbmcgKik7CmludCBnZW5lcmljX2Jsb2NrX2JtYXAo
c3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgbG9uZywgZ2V0X2Jsb2NrX3QgKik7CmludCBnZW5lcmlj
X2NvbW1pdF93cml0ZShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCwgdW5z
aWduZWQpOwoKZXh0ZXJuIGludCBnZW5lcmljX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqLCBzdHJ1
Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CmV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9yZWFkKHN0
cnVjdCBmaWxlICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4dGVybiBzc2l6ZV90IGdl
bmVyaWNfZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgbG9m
Zl90ICopOwpleHRlcm4gdm9pZCBkb19nZW5lcmljX2ZpbGVfcmVhZChzdHJ1Y3QgZmlsZSAqLCBs
b2ZmX3QgKiwgcmVhZF9kZXNjcmlwdG9yX3QgKiwgcmVhZF9hY3Rvcl90KTsKCmV4dGVybiBzc2l6
ZV90IGdlbmVyaWNfcmVhZF9kaXIoc3RydWN0IGZpbGUgKiwgY2hhciAqLCBzaXplX3QsIGxvZmZf
dCAqKTsKCmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdlbmVyaWNfcm9fZm9wczsKCmV4
dGVybiBpbnQgdmZzX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBpbnQsIGNvbnN0
IGNoYXIgKik7CmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICp2ZnNfZm9sbG93X2xpbmsoc3RydWN0IGRl
bnRyeSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHVuc2lnbmVkLCBjb25zdCBjaGFyICopOwpleHRlcm4g
aW50IHBhZ2VfcmVhZGxpbmsoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIGludCk7CmV4dGVybiBz
dHJ1Y3QgZGVudHJ5ICpwYWdlX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGRl
bnRyeSAqLCB1bnNpZ25lZCk7CmV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwYWdlX3N5
bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKCmV4dGVybiBpbnQgdmZzX3JlYWRkaXIoc3RydWN0IGZp
bGUgKiwgZmlsbGRpcl90LCB2b2lkICopOwoKZXh0ZXJuIHN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0
X3N1cGVyKGtkZXZfdCk7CnN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X2VtcHR5X3N1cGVyKHZvaWQp
Owp2b2lkIHJlbW92ZV92ZnNtbnQoa2Rldl90IGRldik7CmV4dGVybiB2b2lkIHB1dF9zdXBlcihr
ZGV2X3QpOwp1bnNpZ25lZCBsb25nIGdlbmVyYXRlX2NsdXN0ZXIoa2Rldl90LCBpbnQgYltdLCBp
bnQpOwp1bnNpZ25lZCBsb25nIGdlbmVyYXRlX2NsdXN0ZXJfc3dhYjMyKGtkZXZfdCwgaW50IGJb
XSwgaW50KTsKZXh0ZXJuIGtkZXZfdCBST09UX0RFVjsKZXh0ZXJuIGNoYXIgcm9vdF9kZXZpY2Vf
bmFtZVtdOwoKCmV4dGVybiB2b2lkIHNob3dfYnVmZmVycyh2b2lkKTsKZXh0ZXJuIHZvaWQgbW91
bnRfcm9vdCh2b2lkKTsKCgoKCgoKZXh0ZXJuIHNzaXplX3QgY2hhcl9yZWFkKHN0cnVjdCBmaWxl
ICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4dGVybiBzc2l6ZV90IGJsb2NrX3JlYWQo
c3RydWN0IGZpbGUgKiwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKZXh0ZXJuIGludCByZWFk
X2FoZWFkW107CgpleHRlcm4gc3NpemVfdCBjaGFyX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0
IGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4dGVybiBzc2l6ZV90IGJsb2NrX3dyaXRlKHN0
cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CgpleHRlcm4gaW50
IGZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJuIGludCBn
ZW5lcmljX2J1ZmZlcl9mZGF0YXN5bmMoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9u
ZyBzdGFydF9pZHgsIHVuc2lnbmVkIGxvbmcgZW5kX2lkeCk7CgpleHRlcm4gaW50IGlub2RlX2No
YW5nZV9vayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlhdHRyICopOwpleHRlcm4gdm9pZCBpbm9k
ZV9zZXRhdHRyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaWF0dHIgKik7CgogCgoKCgoKCiAKIyAx
MTIxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9m
cy5oIgoKCgogCiMgMTEzNiAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2lu
Y2x1ZGUvbGludXgvZnMuaCIKc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICpsb2NrX3BhcmVu
dChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCnsKCXN0cnVjdCBkZW50cnkgKmRpciA9IGRnZXQoZGVu
dHJ5LT5kX3BhcmVudCk7CgoJZG93bigmZGlyLT5kX2lub2RlLT5pX3NlbSk7CglyZXR1cm4gZGly
Owp9CgpzdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKmdldF9wYXJlbnQoc3RydWN0IGRlbnRy
eSAqZGVudHJ5KQp7CglyZXR1cm4gZGdldChkZW50cnktPmRfcGFyZW50KTsKfQoKc3RhdGljIGlu
bGluZSB2b2lkIHVubG9ja19kaXIoc3RydWN0IGRlbnRyeSAqZGlyKQp7Cgl1cCgmZGlyLT5kX2lu
b2RlLT5pX3NlbSk7CglkcHV0KGRpcik7Cn0KCiAKCgoKc3RhdGljIGlubGluZSB2b2lkIGRvdWJs
ZV9kb3duKHN0cnVjdCBzZW1hcGhvcmUgKnMxLCBzdHJ1Y3Qgc2VtYXBob3JlICpzMikKewoJaWYg
KHMxICE9IHMyKSB7CgkJaWYgKCh1bnNpZ25lZCBsb25nKSBzMSA8ICh1bnNpZ25lZCBsb25nKSBz
MikgewoJCQlzdHJ1Y3Qgc2VtYXBob3JlICp0bXAgPSBzMjsKCQkJczIgPSBzMTsgczEgPSB0bXA7
CgkJfQoJCWRvd24oczEpOwoJfQoJZG93bihzMik7Cn0KCiAKCgoKCgoKCgpzdGF0aWMgaW5saW5l
IHZvaWQgdHJpcGxlX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqczEsCgkJCSAgICAgICBzdHJ1Y3Qg
c2VtYXBob3JlICpzMiwKCQkJICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgKnMzKQp7CglpZiAoczEg
IT0gczIpIHsKCQlpZiAoKHVuc2lnbmVkIGxvbmcpIHMxIDwgKHVuc2lnbmVkIGxvbmcpIHMyKSB7
CgkJCWlmICgodW5zaWduZWQgbG9uZykgczEgPCAodW5zaWduZWQgbG9uZykgczMpIHsKCQkJCXN0
cnVjdCBzZW1hcGhvcmUgKnRtcCA9IHMzOwoJCQkJczMgPSBzMTsgczEgPSB0bXA7CgkJCX0KCQkJ
aWYgKCh1bnNpZ25lZCBsb25nKSBzMSA8ICh1bnNpZ25lZCBsb25nKSBzMikgewoJCQkJc3RydWN0
IHNlbWFwaG9yZSAqdG1wID0gczI7CgkJCQlzMiA9IHMxOyBzMSA9IHRtcDsKCQkJfQoJCX0gZWxz
ZSB7CgkJCWlmICgodW5zaWduZWQgbG9uZykgczEgPCAodW5zaWduZWQgbG9uZykgczMpIHsKCQkJ
CXN0cnVjdCBzZW1hcGhvcmUgKnRtcCA9IHMzOwoJCQkJczMgPSBzMTsgczEgPSB0bXA7CgkJCX0K
CQkJaWYgKCh1bnNpZ25lZCBsb25nKSBzMiA8ICh1bnNpZ25lZCBsb25nKSBzMykgewoJCQkJc3Ry
dWN0IHNlbWFwaG9yZSAqdG1wID0gczM7CgkJCQlzMyA9IHMyOyBzMiA9IHRtcDsKCQkJfQoJCX0K
CQlkb3duKHMxKTsKCX0gZWxzZSBpZiAoKHVuc2lnbmVkIGxvbmcpIHMyIDwgKHVuc2lnbmVkIGxv
bmcpIHMzKSB7CgkJc3RydWN0IHNlbWFwaG9yZSAqdG1wID0gczM7CgkJczMgPSBzMjsgczIgPSB0
bXA7Cgl9Cglkb3duKHMyKTsKCWRvd24oczMpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgZG91Ymxl
X3VwKHN0cnVjdCBzZW1hcGhvcmUgKnMxLCBzdHJ1Y3Qgc2VtYXBob3JlICpzMikKewoJdXAoczEp
OwoJaWYgKHMxICE9IHMyKQoJCXVwKHMyKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHRyaXBsZV91
cChzdHJ1Y3Qgc2VtYXBob3JlICpzMSwKCQkJICAgICBzdHJ1Y3Qgc2VtYXBob3JlICpzMiwKCQkJ
ICAgICBzdHJ1Y3Qgc2VtYXBob3JlICpzMykKewoJdXAoczEpOwoJaWYgKHMxICE9IHMyKQoJCXVw
KHMyKTsKCXVwKHMzKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGRvdWJsZV9sb2NrKHN0cnVjdCBk
ZW50cnkgKmQxLCBzdHJ1Y3QgZGVudHJ5ICpkMikKewoJZG91YmxlX2Rvd24oJmQxLT5kX2lub2Rl
LT5pX3NlbSwgJmQyLT5kX2lub2RlLT5pX3NlbSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBkb3Vi
bGVfdW5sb2NrKHN0cnVjdCBkZW50cnkgKmQxLCBzdHJ1Y3QgZGVudHJ5ICpkMikKewoJZG91Ymxl
X3VwKCZkMS0+ZF9pbm9kZS0+aV9zZW0sJmQyLT5kX2lub2RlLT5pX3NlbSk7CglkcHV0KGQxKTsK
CWRwdXQoZDIpOwp9CgoKCgojIDEzICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGlu
dXgvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgiIDIKCgogCgoKCgogCgoKCgogCgoKdHlwZWRl
ZiBzdHJ1Y3QgX191c2VyX2NhcF9oZWFkZXJfc3RydWN0IHsKCV9fdTMyIHZlcnNpb247CglpbnQg
cGlkOwp9ICpjYXBfdXNlcl9oZWFkZXJfdDsKIAp0eXBlZGVmIHN0cnVjdCBfX3VzZXJfY2FwX2Rh
dGFfc3RydWN0IHsKICAgICAgICBfX3UzMiBlZmZlY3RpdmU7CiAgICAgICAgX191MzIgcGVybWl0
dGVkOwogICAgICAgIF9fdTMyIGluaGVyaXRhYmxlOwp9ICpjYXBfdXNlcl9kYXRhX3Q7CiAgCgoK
IAoKCgoKCgoKCgp0eXBlZGVmIF9fdTMyIGtlcm5lbF9jYXBfdDsKCgogIAoKCgoKCgogCgoKCiAK
CgoKCgogCgoKCgoKIAoKCgoKICAgIAogCgoKCgoKIAoKCgoKCgoKCiAKCgoKIAoKCgoKCiAKIAog
CgoKCiAKIAoKCgoKIAoKCgogCgoKCgogCgoKCiAKIAoKCgogCgoKCiAKIAogCiAKIAoKIAogCiAK
IAogCiAKIAoKCgogCiAKCgoKIAogCgoKCgogCgoKCiAKCgoKIAogCgoKCiAKCgoKIAoKCgogCgoK
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKCiAKIAogCiAK
IAogCiAKIAogCgogCgoKCiAKCgoKIAoKIAoKCgoKCiAKIAogCiAKCiAKIAogCiAKCgoKIAogCiAK
CgoKIAogCgoKCiAKCgoKCiAKCgpleHRlcm4ga2VybmVsX2NhcF90IGNhcF9ic2V0OwoKIAoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0YXRpYyBpbmxpbmUga2VybmVsX2NhcF90IGNhcF9jb21i
aW5lKGtlcm5lbF9jYXBfdCBhLCBrZXJuZWxfY2FwX3QgYikKewogICAgIGtlcm5lbF9jYXBfdCBk
ZXN0OwogICAgIChkZXN0KSA9IChhKSB8IChiKTsKICAgICByZXR1cm4gZGVzdDsKfQoKc3RhdGlj
IGlubGluZSBrZXJuZWxfY2FwX3QgY2FwX2ludGVyc2VjdChrZXJuZWxfY2FwX3QgYSwga2VybmVs
X2NhcF90IGIpCnsKICAgICBrZXJuZWxfY2FwX3QgZGVzdDsKICAgICAoZGVzdCkgPSAoYSkgJiAo
Yik7CiAgICAgcmV0dXJuIGRlc3Q7Cn0KCnN0YXRpYyBpbmxpbmUga2VybmVsX2NhcF90IGNhcF9k
cm9wKGtlcm5lbF9jYXBfdCBhLCBrZXJuZWxfY2FwX3QgZHJvcCkKewogICAgIGtlcm5lbF9jYXBf
dCBkZXN0OwogICAgIChkZXN0KSA9IChhKSAmIH4oZHJvcCk7CiAgICAgcmV0dXJuIGRlc3Q7Cn0K
CnN0YXRpYyBpbmxpbmUga2VybmVsX2NhcF90IGNhcF9pbnZlcnQoa2VybmVsX2NhcF90IGMpCnsK
ICAgICBrZXJuZWxfY2FwX3QgZGVzdDsKICAgICAoZGVzdCkgPSB+KGMpOwogICAgIHJldHVybiBk
ZXN0Owp9CgoKCgoKCgoKCgoKCgojIDUgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9s
aW51eC9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaCIgMgoKCiAKCgoKCgoKCgogCgoKc3RydWN0IGxp
bnV4X2JpbnBybXsKCWNoYXIgYnVmWzEyOF07CglzdHJ1Y3QgcGFnZSAqcGFnZVszMl07Cgl1bnNp
Z25lZCBsb25nIHA7ICAKCWludCBzaF9iYW5nOwoJc3RydWN0IGZpbGUgKiBmaWxlOwoJaW50IGVf
dWlkLCBlX2dpZDsKCWtlcm5lbF9jYXBfdCBjYXBfaW5oZXJpdGFibGUsIGNhcF9wZXJtaXR0ZWQs
IGNhcF9lZmZlY3RpdmU7CglpbnQgYXJnYywgZW52YzsKCWNoYXIgKiBmaWxlbmFtZTsJIAoJdW5z
aWduZWQgbG9uZyBsb2FkZXIsIGV4ZWM7Cn07CgogCgoKCnN0cnVjdCBsaW51eF9iaW5mbXQgewoJ
c3RydWN0IGxpbnV4X2JpbmZtdCAqIG5leHQ7CglzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CglpbnQg
KCpsb2FkX2JpbmFyeSkoc3RydWN0IGxpbnV4X2JpbnBybSAqLCBzdHJ1Y3QgIHB0X3JlZ3MgKiBy
ZWdzKTsKCWludCAoKmxvYWRfc2hsaWIpKHN0cnVjdCBmaWxlICopOwoJaW50ICgqY29yZV9kdW1w
KShsb25nIHNpZ25yLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIHN0cnVjdCBmaWxlICogZmlsZSk7
Cgl1bnNpZ25lZCBsb25nIG1pbl9jb3JlZHVtcDsJIAp9OwoKZXh0ZXJuIGludCByZWdpc3Rlcl9i
aW5mbXQoc3RydWN0IGxpbnV4X2JpbmZtdCAqKTsKZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2JpbmZt
dChzdHJ1Y3QgbGludXhfYmluZm10ICopOwoKZXh0ZXJuIGludCBwcmVwYXJlX2JpbnBybShzdHJ1
Y3QgbGludXhfYmlucHJtICopOwpleHRlcm4gdm9pZCByZW1vdmVfYXJnX3plcm8oc3RydWN0IGxp
bnV4X2JpbnBybSAqKTsKZXh0ZXJuIGludCBzZWFyY2hfYmluYXJ5X2hhbmRsZXIoc3RydWN0IGxp
bnV4X2JpbnBybSAqLHN0cnVjdCBwdF9yZWdzICopOwpleHRlcm4gaW50IGZsdXNoX29sZF9leGVj
KHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKTsKZXh0ZXJuIGludCBzZXR1cF9hcmdfcGFnZXMo
c3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pOwpleHRlcm4gaW50IGNvcHlfc3RyaW5ncyhpbnQg
YXJnYyxjaGFyICoqIGFyZ3Ysc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSk7IApleHRlcm4gaW50
IGNvcHlfc3RyaW5nc19rZXJuZWwoaW50IGFyZ2MsY2hhciAqKiBhcmd2LHN0cnVjdCBsaW51eF9i
aW5wcm0gKmJwcm0pOwpleHRlcm4gdm9pZCBjb21wdXRlX2NyZWRzKHN0cnVjdCBsaW51eF9iaW5w
cm0gKmJpbnBybSk7CmV4dGVybiBpbnQgZG9fY29yZWR1bXAobG9uZyBzaWduciwgc3RydWN0IHB0
X3JlZ3MgKiByZWdzKTsKCgoKCgoKCgoKIyA4ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9z
cmMvbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlw
c2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3BlcnNvbmFsaXR5LmgiIDEKCgoKCgoK
CiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAKdHlwZWRlZiB2b2lkICgqbGNhbGw3X2Z1bmMp
KGludCwgc3RydWN0IHB0X3JlZ3MgKik7CgoKIAoKCgoKc3RydWN0IGV4ZWNfZG9tYWluIHsKCWNv
bnN0IGNoYXIgKm5hbWU7CglsY2FsbDdfZnVuYyBoYW5kbGVyOwoJdW5zaWduZWQgY2hhciBwZXJz
X2xvdywgcGVyc19oaWdoOwoJdW5zaWduZWQgbG9uZyAqIHNpZ25hbF9tYXA7Cgl1bnNpZ25lZCBs
b25nICogc2lnbmFsX2ludm1hcDsKCXN0cnVjdCBtb2R1bGUgKiBtb2R1bGU7CglzdHJ1Y3QgZXhl
Y19kb21haW4gKm5leHQ7Cn07CgpleHRlcm4gc3RydWN0IGV4ZWNfZG9tYWluIGRlZmF1bHRfZXhl
Y19kb21haW47CgpleHRlcm4gc3RydWN0IGV4ZWNfZG9tYWluICpsb29rdXBfZXhlY19kb21haW4o
dW5zaWduZWQgbG9uZyBwZXJzb25hbGl0eSk7CmV4dGVybiBpbnQgcmVnaXN0ZXJfZXhlY19kb21h
aW4oc3RydWN0IGV4ZWNfZG9tYWluICppdCk7CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9leGVjX2Rv
bWFpbihzdHJ1Y3QgZXhlY19kb21haW4gKml0KTsKCgogIGxvbmcgc3lzX3BlcnNvbmFsaXR5KHVu
c2lnbmVkIGxvbmcgcGVyc29uYWxpdHkpOwoKCiMgOSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGlu
dXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgoKCgoKIyAxICIvb3B0L2Nyb3Nz
ZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC90aW1lcy5oIiAxCgoKCnN0
cnVjdCB0bXMgewoJY2xvY2tfdCB0bXNfdXRpbWU7CgljbG9ja190IHRtc19zdGltZTsKCWNsb2Nr
X3QgdG1zX2N1dGltZTsKCWNsb2NrX3QgdG1zX2NzdGltZTsKfTsKCgojIDEzICIvb3B0L2Nyb3Nz
ZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgojIDEg
Ii9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3RpbWV4
LmgiIDEKIAojIDE2ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVk
ZS9saW51eC90aW1leC5oIgoKIAojIDUxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMv
bGludXgvaW5jbHVkZS9saW51eC90aW1leC5oIgoKCgogCgoKCgoKCgoKCgoKCiAKIyA3OCAiL29w
dC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdGltZXguaCIK
CgoKCgogCiMgOTcgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRl
L2xpbnV4L3RpbWV4LmgiCgoKCgoKCgoKCgoKCiAKIyAxMjkgIi9vcHQvY3Jvc3NkZXYvbWlwc2Vs
LWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3RpbWV4LmgiCgoKCgoKCiAKCgojIDEgIi9v
cHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS90aW1leC5oIiAx
CiAKIyAxMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNt
L3RpbWV4LmgiCgoKCgoKCgoKCiAKIyAzMCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3Jj
L2xpbnV4L2luY2x1ZGUvYXNtL3RpbWV4LmgiCgp0eXBlZGVmIHVuc2lnbmVkIGludCBjeWNsZXNf
dDsKZXh0ZXJuIGN5Y2xlc190IGNhY2hlZmx1c2hfdGltZTsKCnN0YXRpYyBpbmxpbmUgY3ljbGVz
X3QgZ2V0X2N5Y2xlcyAodm9pZCkKewoJcmV0dXJuICh7IGludCBfX3JlczsgX19hc21fXyBfX3Zv
bGF0aWxlX18oICIuc2V0XHRwdXNoXG5cdCIgIi5zZXRcdHJlb3JkZXJcblx0IiAibWZjMFx0JTAs
IiIkOSIiXG5cdCIgIi5zZXRcdHBvcCIgOiAiPXIiIChfX3JlcykpOyBfX3Jlczt9KTsKfQoKCiMg
MTM4ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC90
aW1leC5oIiAyCgoKIAoKCiAKCgoKc3RydWN0IHRpbWV4IHsKCXVuc2lnbmVkIGludCBtb2RlczsJ
IAoJbG9uZyBvZmZzZXQ7CQkgCglsb25nIGZyZXE7CQkgCglsb25nIG1heGVycm9yOwkJIAoJbG9u
ZyBlc3RlcnJvcjsJCSAKCWludCBzdGF0dXM7CQkgCglsb25nIGNvbnN0YW50OwkJIAoJbG9uZyBw
cmVjaXNpb247CQkgCglsb25nIHRvbGVyYW5jZTsJCSAKCgoJc3RydWN0IHRpbWV2YWwgdGltZTsJ
IAoJbG9uZyB0aWNrOwkJIAoKCWxvbmcgcHBzZnJlcTsgICAgICAgICAgICAKCWxvbmcgaml0dGVy
OyAgICAgICAgICAgICAKCWludCBzaGlmdDsgICAgICAgICAgICAgICAKCWxvbmcgc3RhYmlsOyAg
ICAgICAgICAgICAKCWxvbmcgaml0Y250OyAgICAgICAgICAgICAKCWxvbmcgY2FsY250OyAgICAg
ICAgICAgICAKCWxvbmcgZXJyY250OyAgICAgICAgICAgICAKCWxvbmcgc3RiY250OyAgICAgICAg
ICAgICAKCglpbnQgIDozMjsgaW50ICA6MzI7IGludCAgOjMyOyBpbnQgIDozMjsKCWludCAgOjMy
OyBpbnQgIDozMjsgaW50ICA6MzI7IGludCAgOjMyOwoJaW50ICA6MzI7IGludCAgOjMyOyBpbnQg
IDozMjsgaW50ICA6MzI7Cn07CgogCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCmV4dGVybiBsb25nIHRpY2s7ICAgICAgICAg
ICAgICAgICAgICAgICAKZXh0ZXJuIGludCB0aWNrYWRqOwkJCSAKCiAKCgpleHRlcm4gaW50IHRp
bWVfc3RhdGU7CQkgCmV4dGVybiBpbnQgdGltZV9zdGF0dXM7CQkgCmV4dGVybiBsb25nIHRpbWVf
b2Zmc2V0OwkgCmV4dGVybiBsb25nIHRpbWVfY29uc3RhbnQ7CSAKZXh0ZXJuIGxvbmcgdGltZV90
b2xlcmFuY2U7CSAKZXh0ZXJuIGxvbmcgdGltZV9wcmVjaXNpb247CSAKZXh0ZXJuIGxvbmcgdGlt
ZV9tYXhlcnJvcjsJIApleHRlcm4gbG9uZyB0aW1lX2VzdGVycm9yOwkgCgpleHRlcm4gbG9uZyB0
aW1lX3BoYXNlOwkJIApleHRlcm4gbG9uZyB0aW1lX2ZyZXE7CQkgCmV4dGVybiBsb25nIHRpbWVf
YWRqOwkJIApleHRlcm4gbG9uZyB0aW1lX3JlZnRpbWU7CSAKCmV4dGVybiBsb25nIHRpbWVfYWRq
dXN0OwkgCgogCmV4dGVybiBsb25nIHBwc19vZmZzZXQ7CQkgCmV4dGVybiBsb25nIHBwc19qaXR0
ZXI7CQkgCmV4dGVybiBsb25nIHBwc19mcmVxOwkJIApleHRlcm4gbG9uZyBwcHNfc3RhYmlsOwkJ
IApleHRlcm4gbG9uZyBwcHNfdmFsaWQ7CQkgCgogCmV4dGVybiBpbnQgcHBzX3NoaWZ0OwkJIApl
eHRlcm4gbG9uZyBwcHNfaml0Y250OwkJIApleHRlcm4gbG9uZyBwcHNfY2FsY250OwkJIApleHRl
cm4gbG9uZyBwcHNfZXJyY250OwkJIApleHRlcm4gbG9uZyBwcHNfc3RiY250OwkJIAoKCgoKIyAx
NCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2No
ZWQuaCIgMgoKCgoKCgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgv
aW5jbHVkZS9saW51eC9zbXAuaCIgMQoKCgogCgoKCgoKIyA3MiAiL29wdC9jcm9zc2Rldi9taXBz
ZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc21wLmgiCgogCgoKIAoKCgoKCgoKCgoK
CiMgMjEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4
L3NjaGVkLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2lu
Y2x1ZGUvbGludXgvdHR5LmgiIDEKCgoKIAoKCgogCgoKCgoKCgkJIAoKCgoKCiMgMSAiL29wdC9j
cm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbWFqb3IuaCIgMQoK
CgogCgoKCgogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAgCgoKCgpzdGF0aWMgX19pbmxpbmVfXyBp
bnQgc2NzaV9ibGtfbWFqb3IoaW50IG0pIHsKCXJldHVybiAoKChtKSA9PSA4IHx8ICgobSkgPj0g
NjUgJiYgKG0pIDw9IDcxKSkgfHwgKG0pID09IDExKTsKfQoKCiMgMjEgIi9vcHQvY3Jvc3NkZXYv
bWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3R0eS5oIiAyCgojIDEgIi9vcHQv
Y3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Rlcm1pb3MuaCIg
MQoKCgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9h
c20vdGVybWlvcy5oIiAxCiAKCgoKCgoKCgoKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGlu
dXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgiIDEKIAojIDEwICIvb3B0L2Nyb3Nz
ZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vdGVybWJpdHMuaCIKCgoKCgp0
eXBlZGVmIHVuc2lnbmVkIGNoYXIgY2NfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHNwZWVkX3Q7
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB0Y2ZsYWdfdDsKCiAKCgoKCnN0cnVjdCB0ZXJtaW9zIHsK
CXRjZmxhZ190IGNfaWZsYWc7CQkgCgl0Y2ZsYWdfdCBjX29mbGFnOwkJIAoJdGNmbGFnX3QgY19j
ZmxhZzsJCSAKCXRjZmxhZ190IGNfbGZsYWc7CQkgCgkgCgoKCWNjX3QgY19saW5lOwkJCSAKCWNj
X3QgY19jY1syM107CQkgCn07CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCgoKCiAKCgoKCiAKCgoKCgojIDEyICIvb3B0L2Nyb3Nz
ZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vdGVybWlvcy5oIiAyCgojIDEg
Ii9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9pb2N0bHMu
aCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIyAxMyAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2lu
Y2x1ZGUvYXNtL3Rlcm1pb3MuaCIgMgoKCnN0cnVjdCBzZ3R0eWIgewoJY2hhcglzZ19pc3BlZWQ7
CgljaGFyCXNnX29zcGVlZDsKCWNoYXIJc2dfZXJhc2U7CgljaGFyCXNnX2tpbGw7CglpbnQJc2df
ZmxhZ3M7CSAKfTsKCnN0cnVjdCB0Y2hhcnMgewoJY2hhcgl0X2ludHJjOwoJY2hhcgl0X3F1aXRj
OwoJY2hhcgl0X3N0YXJ0YzsKCWNoYXIJdF9zdG9wYzsKCWNoYXIJdF9lb2ZjOwoJY2hhcgl0X2Jy
a2M7Cn07CgpzdHJ1Y3QgbHRjaGFycyB7CiAgICAgICAgY2hhciAgICB0X3N1c3BjOyAgICAgICAg
IAogICAgICAgIGNoYXIgICAgdF9kc3VzcGM7ICAgICAgICAKICAgICAgICBjaGFyICAgIHRfcnBy
bnRjOyAgICAgICAgCiAgICAgICAgY2hhciAgICB0X2ZsdXNoYzsgICAgICAgIAogICAgICAgIGNo
YXIgICAgdF93ZXJhc2M7ICAgICAgICAKICAgICAgICBjaGFyICAgIHRfbG5leHRjOyAgICAgICAg
Cn07CgogCgoKc3RydWN0IHdpbnNpemUgewoJdW5zaWduZWQgc2hvcnQgd3Nfcm93OwoJdW5zaWdu
ZWQgc2hvcnQgd3NfY29sOwoJdW5zaWduZWQgc2hvcnQgd3NfeHBpeGVsOwoJdW5zaWduZWQgc2hv
cnQgd3NfeXBpeGVsOwp9OwoKCnN0cnVjdCB0ZXJtaW8gewoJdW5zaWduZWQgc2hvcnQgY19pZmxh
ZzsJCSAKCXVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CQkgCgl1bnNpZ25lZCBzaG9ydCBjX2NmbGFn
OwkJIAoJdW5zaWduZWQgc2hvcnQgY19sZmxhZzsJCSAKCWNoYXIgY19saW5lOwkJCSAKCXVuc2ln
bmVkIGNoYXIgY19jY1syM107CSAKfTsKCgogCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIyAxMjYgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4
L3NyYy9saW51eC9pbmNsdWRlL2FzbS90ZXJtaW9zLmgiCgogCgoKCiMgMTM5ICIvb3B0L2Nyb3Nz
ZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vdGVybWlvcy5oIgoKCgoKCgoK
IyA1ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC90
ZXJtaW9zLmgiIDIKCgoKIyAyMiAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4
L2luY2x1ZGUvbGludXgvdHR5LmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgv
c3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHF1ZXVlLmgiIDEKIAojIDEyICIvb3B0L2Nyb3NzZGV2
L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC90cXVldWUuaCIKCgoKCgoKCgog
CiMgNDIgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4
L3RxdWV1ZS5oIgoKc3RydWN0IHRxX3N0cnVjdCB7CglzdHJ1Y3QgdHFfc3RydWN0ICpuZXh0OwkJ
IAoJdW5zaWduZWQgbG9uZyBzeW5jOwkJIAoJdm9pZCAoKnJvdXRpbmUpKHZvaWQgKik7CSAKCXZv
aWQgKmRhdGE7CQkJIAp9OwoKdHlwZWRlZiBzdHJ1Y3QgdHFfc3RydWN0ICogdGFza19xdWV1ZTsK
CgoKZXh0ZXJuIHRhc2tfcXVldWUgdHFfdGltZXIsIHRxX2ltbWVkaWF0ZSwgdHFfc2NoZWR1bGVy
LCB0cV9kaXNrOwoKIAojIDc3ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgv
aW5jbHVkZS9saW51eC90cXVldWUuaCIKCmV4dGVybiBzcGlubG9ja190IHRxdWV1ZV9sb2NrOwoK
IAoKCmV4dGVybiBfX2lubGluZV9fIHZvaWQgcXVldWVfdGFzayhzdHJ1Y3QgdHFfc3RydWN0ICpi
aF9wb2ludGVyLAoJCQkgICB0YXNrX3F1ZXVlICpiaF9saXN0KQp7CglpZiAoIXRlc3RfYW5kX3Nl
dF9iaXQoMCwmYmhfcG9pbnRlci0+c3luYykpIHsKCQl1bnNpZ25lZCBsb25nIGZsYWdzOwoJCWRv
IHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIuc2V0XHRwdXNoXG5cdCIgIi5zZXRcdHJlb3JkZXJc
blx0IiAiLnNldFx0bm9hdFxuXHQiICJtZmMwXHQlMCwkMTJcblx0IiAib3JpXHQkMSwlMCwxXG5c
dCIgInhvcmlcdCQxLDFcblx0IiAiLnNldFx0bm9yZW9yZGVyXG5cdCIgIm10YzBcdCQxLCQxMlxu
XHQiICJub3Bcblx0IiAibm9wXG5cdCIgIm5vcFxuXHQiICIuc2V0XHRwb3Bcblx0IiA6ICI9ciIg
KCBmbGFncykgOiA6ICIkMSIsICJtZW1vcnkiKTs7ICh2b2lkKSgmdHF1ZXVlX2xvY2spOyB9IHdo
aWxlICgwKTsKCQliaF9wb2ludGVyLT5uZXh0ID0gKmJoX2xpc3Q7CgkJKmJoX2xpc3QgPSBiaF9w
b2ludGVyOwoJCWRvIHsgZG8geyB9IHdoaWxlKDApOyBfX3Jlc3RvcmVfZmxhZ3MoIGZsYWdzKTs7
IH0gd2hpbGUgKDApOwoJfQp9CgogCgoKZXh0ZXJuIF9faW5saW5lX18gdm9pZCBydW5fdGFza19x
dWV1ZSh0YXNrX3F1ZXVlICpsaXN0KQp7CglpZiAoKmxpc3QpIHsKCQl1bnNpZ25lZCBsb25nIGZs
YWdzOwoJCXN0cnVjdCB0cV9zdHJ1Y3QgKnA7CgoJCWRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18o
ICIuc2V0XHRwdXNoXG5cdCIgIi5zZXRcdHJlb3JkZXJcblx0IiAiLnNldFx0bm9hdFxuXHQiICJt
ZmMwXHQlMCwkMTJcblx0IiAib3JpXHQkMSwlMCwxXG5cdCIgInhvcmlcdCQxLDFcblx0IiAiLnNl
dFx0bm9yZW9yZGVyXG5cdCIgIm10YzBcdCQxLCQxMlxuXHQiICJub3Bcblx0IiAibm9wXG5cdCIg
Im5vcFxuXHQiICIuc2V0XHRwb3Bcblx0IiA6ICI9ciIgKCBmbGFncykgOiA6ICIkMSIsICJtZW1v
cnkiKTs7ICh2b2lkKSgmdHF1ZXVlX2xvY2spOyB9IHdoaWxlICgwKTsKCQlwID0gKmxpc3Q7CgkJ
Kmxpc3QgPSAoKHZvaWQgKikwKTsKCQlkbyB7IGRvIHsgfSB3aGlsZSgwKTsgX19yZXN0b3JlX2Zs
YWdzKCBmbGFncyk7OyB9IHdoaWxlICgwKTsKCQkKCQl3aGlsZSAocCkgewoJCQl2b2lkICphcmc7
CgkJCXZvaWQgKCpmKSAodm9pZCAqKTsKCQkJc3RydWN0IHRxX3N0cnVjdCAqc2F2ZV9wOwoJCQlh
cmcgICAgPSBwIC0+IGRhdGE7CgkJCWYgICAgICA9IHAgLT4gcm91dGluZTsKCQkJc2F2ZV9wID0g
cDsKCQkJcCAgICAgID0gcCAtPiBuZXh0OwoJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyggIiMgcHJl
dmVudCBpbnN0cnVjdGlvbnMgYmVpbmcgbW92ZWQgYXJvdW5kXG5cdCIgIi5zZXRcdG5vcmVvcmRl
clxuXHQiICIjIDggbm9wcyB0byBmb29sIHRoZSBSNDQwMCBwaXBlbGluZVxuXHQiICJub3A7bm9w
O25vcDtub3A7bm9wO25vcDtub3A7bm9wXG5cdCIgIi5zZXRcdHJlb3JkZXIiIDogOiA6ICJtZW1v
cnkiKTsKCQkJc2F2ZV9wIC0+IHN5bmMgPSAwOwoJCQlpZiAoZikKCQkJCSgqZikoYXJnKTsKCQl9
Cgl9Cn0KCgojIDIzICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVk
ZS9saW51eC90dHkuaCIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGlu
dXgvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgiIDEKCgoKIAojIDExNyAiL29wdC9jcm9zc2Rl
di9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oIgoKCgpz
dHJ1Y3QgdHR5X2RyaXZlciB7CglpbnQJbWFnaWM7CQkgCgljb25zdCBjaGFyCSpkcml2ZXJfbmFt
ZTsKCWNvbnN0IGNoYXIJKm5hbWU7CglpbnQJbmFtZV9iYXNlOwkgCglzaG9ydAltYWpvcjsJCSAK
CXNob3J0CW1pbm9yX3N0YXJ0OwkgCglzaG9ydAludW07CQkgCglzaG9ydAl0eXBlOwkJIAoJc2hv
cnQJc3VidHlwZTsJIAoJc3RydWN0IHRlcm1pb3MgaW5pdF90ZXJtaW9zOyAgCglpbnQJZmxhZ3M7
CQkgCglpbnQJKnJlZmNvdW50OwkgCglzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfZW50cnk7
ICAKCXN0cnVjdCB0dHlfZHJpdmVyICpvdGhlcjsgIAoKCSAKCgoJc3RydWN0IHR0eV9zdHJ1Y3Qg
Kip0YWJsZTsKCXN0cnVjdCB0ZXJtaW9zICoqdGVybWlvczsKCXN0cnVjdCB0ZXJtaW9zICoqdGVy
bWlvc19sb2NrZWQ7Cgl2b2lkICpkcml2ZXJfc3RhdGU7CSAKCQoJIAoKCgoJaW50ICAoKm9wZW4p
KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOwoJdm9pZCAoKmNs
b3NlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKTsKCWludCAg
KCp3cml0ZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIGludCBmcm9tX3VzZXIsCgkJICAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwoJdm9pZCAoKnB1dF9jaGFyKShz
dHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKTsKCXZvaWQgKCpmbHVzaF9j
aGFycykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CglpbnQgICgqd3JpdGVfcm9vbSkoc3RydWN0
IHR0eV9zdHJ1Y3QgKnR0eSk7CglpbnQgICgqY2hhcnNfaW5fYnVmZmVyKShzdHJ1Y3QgdHR5X3N0
cnVjdCAqdHR5KTsKCWludCAgKCppb2N0bCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0
IGZpbGUgKiBmaWxlLAoJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7
Cgl2b2lkICgqc2V0X3Rlcm1pb3MpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJt
aW9zICogb2xkKTsKCXZvaWQgKCp0aHJvdHRsZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwoJ
dm9pZCAoKnVudGhyb3R0bGUpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKCXZvaWQgKCpzdG9w
KShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKCXZvaWQgKCpzdGFydCkoc3RydWN0IHR0eV9zdHJ1
Y3QgKnR0eSk7Cgl2b2lkICgqaGFuZ3VwKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKCXZvaWQg
KCpicmVha19jdGwpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBzdGF0ZSk7Cgl2b2lkICgq
Zmx1c2hfYnVmZmVyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKCXZvaWQgKCpzZXRfbGRpc2Mp
KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwoJdm9pZCAoKndhaXRfdW50aWxfc2VudCkoc3RydWN0
IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHRpbWVvdXQpOwoJdm9pZCAoKnNlbmRfeGNoYXIpKHN0cnVj
dCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpOwoJaW50ICgqcmVhZF9wcm9jKShjaGFyICpwYWdl
LCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKCQkJICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lk
ICpkYXRhKTsKCWludCAoKndyaXRlX3Byb2MpKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFy
ICpidWZmZXIsCgkJCSAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSk7CgoJIAoKCglz
dHJ1Y3QgdHR5X2RyaXZlciAqbmV4dDsKCXN0cnVjdCB0dHlfZHJpdmVyICpwcmV2Owp9OwoKIAoK
CiAKIyAyMDUgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xp
bnV4L3R0eV9kcml2ZXIuaCIKCgoKCgogCgoKCgoKCgogCgoKCgoKIAoKCgogCgoKCgojIDI0ICIv
b3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC90dHkuaCIg
MgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51
eC90dHlfbGRpc2MuaCIgMQoKCgogCiMgOTkgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3Ny
Yy9saW51eC9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oIgoKCgoKc3RydWN0IHR0eV9sZGlzYyB7
CglpbnQJbWFnaWM7CgljaGFyCSpuYW1lOwoJaW50CW51bTsKCWludAlmbGFnczsKCSAKCgoJaW50
CSgqb3Blbikoc3RydWN0IHR0eV9zdHJ1Y3QgKik7Cgl2b2lkCSgqY2xvc2UpKHN0cnVjdCB0dHlf
c3RydWN0ICopOwoJdm9pZAkoKmZsdXNoX2J1ZmZlcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7
Cglzc2l6ZV90CSgqY2hhcnNfaW5fYnVmZmVyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKCXNz
aXplX3QJKCpyZWFkKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxl
LAoJCQl1bnNpZ25lZCBjaGFyICogYnVmLCBzaXplX3QgbnIpOwoJc3NpemVfdAkoKndyaXRlKShz
dHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAoJCQkgY29uc3QgdW5z
aWduZWQgY2hhciAqIGJ1Ziwgc2l6ZV90IG5yKTsJCglpbnQJKCppb2N0bCkoc3RydWN0IHR0eV9z
dHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKCQkJIHVuc2lnbmVkIGludCBjbWQsIHVu
c2lnbmVkIGxvbmcgYXJnKTsKCXZvaWQJKCpzZXRfdGVybWlvcykoc3RydWN0IHR0eV9zdHJ1Y3Qg
KnR0eSwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOwoJdW5zaWduZWQgaW50ICgqcG9sbCkoc3RydWN0
IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IGZpbGUgKiwKCQkJICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9z
dHJ1Y3QgKik7CgkKCSAKCgoJdm9pZAkoKnJlY2VpdmVfYnVmKShzdHJ1Y3QgdHR5X3N0cnVjdCAq
LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKCQkJICAgICAgIGNoYXIgKmZwLCBpbnQgY291bnQp
OwoJaW50CSgqcmVjZWl2ZV9yb29tKShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKCXZvaWQJKCp3cml0
ZV93YWtldXApKHN0cnVjdCB0dHlfc3RydWN0ICopOwp9OwoKCgoKCgojIDI1ICIvb3B0L2Nyb3Nz
ZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC90dHkuaCIgMgoKCgoKCiAK
CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCiAKCgoKc3RydWN0IHNjcmVlbl9pbmZvIHsKCXVuc2ln
bmVkIGNoYXIgIG9yaWdfeDsJCQkgCgl1bnNpZ25lZCBjaGFyICBvcmlnX3k7CQkJIAoJdW5zaWdu
ZWQgc2hvcnQgZG9udHVzZTE7CQkgCgl1bnNpZ25lZCBzaG9ydCBvcmlnX3ZpZGVvX3BhZ2U7CQkg
Cgl1bnNpZ25lZCBjaGFyICBvcmlnX3ZpZGVvX21vZGU7CQkgCgl1bnNpZ25lZCBjaGFyICBvcmln
X3ZpZGVvX2NvbHM7CQkgCgl1bnNpZ25lZCBzaG9ydCB1bnVzZWQyOwkJCSAKCXVuc2lnbmVkIHNo
b3J0IG9yaWdfdmlkZW9fZWdhX2J4OwkgCgl1bnNpZ25lZCBzaG9ydCB1bnVzZWQzOwkJCSAKCXVu
c2lnbmVkIGNoYXIgIG9yaWdfdmlkZW9fbGluZXM7CSAKCXVuc2lnbmVkIGNoYXIgIG9yaWdfdmlk
ZW9faXNWR0E7CSAKCXVuc2lnbmVkIHNob3J0IG9yaWdfdmlkZW9fcG9pbnRzOwkgCgoJIAoJdW5z
aWduZWQgc2hvcnQgbGZiX3dpZHRoOwkJIAoJdW5zaWduZWQgc2hvcnQgbGZiX2hlaWdodDsJCSAK
CXVuc2lnbmVkIHNob3J0IGxmYl9kZXB0aDsJCSAKCXVuc2lnbmVkIGxvbmcgIGxmYl9iYXNlOwkJ
IAoJdW5zaWduZWQgbG9uZyAgbGZiX3NpemU7CQkgCgl1bnNpZ25lZCBzaG9ydCBkb250dXNlMiwg
ZG9udHVzZTM7CSAKCXVuc2lnbmVkIHNob3J0IGxmYl9saW5lbGVuZ3RoOwkJIAoJdW5zaWduZWQg
Y2hhciAgcmVkX3NpemU7CQkgCgl1bnNpZ25lZCBjaGFyICByZWRfcG9zOwkJCSAKCXVuc2lnbmVk
IGNoYXIgIGdyZWVuX3NpemU7CQkgCgl1bnNpZ25lZCBjaGFyICBncmVlbl9wb3M7CQkgCgl1bnNp
Z25lZCBjaGFyICBibHVlX3NpemU7CQkgCgl1bnNpZ25lZCBjaGFyICBibHVlX3BvczsJCSAKCXVu
c2lnbmVkIGNoYXIgIHJzdmRfc2l6ZTsJCSAKCXVuc2lnbmVkIGNoYXIgIHJzdmRfcG9zOwkJIAoJ
dW5zaWduZWQgc2hvcnQgdmVzYXBtX3NlZzsJCSAKCXVuc2lnbmVkIHNob3J0IHZlc2FwbV9vZmY7
CQkgCgl1bnNpZ25lZCBzaG9ydCBwYWdlczsJCQkgCgkJCQkJCSAKfTsKCmV4dGVybiBzdHJ1Y3Qg
c2NyZWVuX2luZm8gc2NyZWVuX2luZm87CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgogCgoKCgoKCnN0cnVjdCB0dHlfZmxpcF9idWZmZXIgewoJc3RydWN0IHRxX3N0cnVjdCB0
cXVldWU7CglzdHJ1Y3Qgc2VtYXBob3JlIHB0eV9zZW07CgljaGFyCQkqY2hhcl9idWZfcHRyOwoJ
dW5zaWduZWQgY2hhcgkqZmxhZ19idWZfcHRyOwoJaW50CQljb3VudDsKCWludAkJYnVmX251bTsK
CXVuc2lnbmVkIGNoYXIJY2hhcl9idWZbMio1MTJdOwoJY2hhcgkJZmxhZ19idWZbMio1MTJdOwoJ
dW5zaWduZWQgY2hhcglzbG9wWzRdOyAgCn07CiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCiMgMjU5ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgv
aW5jbHVkZS9saW51eC90dHkuaCIKc3RydWN0IHR0eV9zdHJ1Y3QgewoJaW50CW1hZ2ljOwoJc3Ry
dWN0IHR0eV9kcml2ZXIgZHJpdmVyOwoJc3RydWN0IHR0eV9sZGlzYyBsZGlzYzsKCXN0cnVjdCB0
ZXJtaW9zICp0ZXJtaW9zLCAqdGVybWlvc19sb2NrZWQ7CglpbnQgcGdycDsKCWludCBzZXNzaW9u
OwoJa2Rldl90CWRldmljZTsKCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CglpbnQgY291bnQ7CglzdHJ1
Y3Qgd2luc2l6ZSB3aW5zaXplOwoJdW5zaWduZWQgY2hhciBzdG9wcGVkOjEsIGh3X3N0b3BwZWQ6
MSwgZmxvd19zdG9wcGVkOjEsIHBhY2tldDoxOwoJdW5zaWduZWQgY2hhciBsb3dfbGF0ZW5jeTox
LCB3YXJuZWQ6MTsKCXVuc2lnbmVkIGNoYXIgY3RybF9zdGF0dXM7CgoJc3RydWN0IHR0eV9zdHJ1
Y3QgKmxpbms7CglzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jOwoJc3RydWN0IHR0eV9mbGlw
X2J1ZmZlciBmbGlwOwoJaW50IG1heF9mbGlwX2NudDsKCWludCBhbHRfc3BlZWQ7CQkgCgl3YWl0
X3F1ZXVlX2hlYWRfdCB3cml0ZV93YWl0OwoJd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF93YWl0OwoJ
c3RydWN0IHRxX3N0cnVjdCB0cV9oYW5ndXA7Cgl2b2lkICpkaXNjX2RhdGE7Cgl2b2lkICpkcml2
ZXJfZGF0YTsKCXN0cnVjdCBsaXN0X2hlYWQgdHR5X2ZpbGVzOwoKCgkKCSAKCgoKCXVuc2lnbmVk
IGludCBjb2x1bW47Cgl1bnNpZ25lZCBjaGFyIGxuZXh0OjEsIGVyYXNpbmc6MSwgcmF3OjEsIHJl
YWxfcmF3OjEsIGljYW5vbjoxOwoJdW5zaWduZWQgY2hhciBjbG9zaW5nOjE7Cgl1bnNpZ25lZCBz
aG9ydCBtaW5pbXVtX3RvX3dha2U7Cgl1bnNpZ25lZCBvdmVycnVuX3RpbWU7CglpbnQgbnVtX292
ZXJydW47Cgl1bnNpZ25lZCBsb25nIHByb2Nlc3NfY2hhcl9tYXBbMjU2Lyg4KnNpemVvZih1bnNp
Z25lZCBsb25nKSldOwoJY2hhciAqcmVhZF9idWY7CglpbnQgcmVhZF9oZWFkOwoJaW50IHJlYWRf
dGFpbDsKCWludCByZWFkX2NudDsKCXVuc2lnbmVkIGxvbmcgcmVhZF9mbGFnc1s0MDk2Lyg4KnNp
emVvZih1bnNpZ25lZCBsb25nKSldOwoJaW50IGNhbm9uX2RhdGE7Cgl1bnNpZ25lZCBsb25nIGNh
bm9uX2hlYWQ7Cgl1bnNpZ25lZCBpbnQgY2Fub25fY29sdW1uOwoJc3RydWN0IHNlbWFwaG9yZSBh
dG9taWNfcmVhZDsKCXNwaW5sb2NrX3QgcmVhZF9sb2NrOwp9OwoKIAoKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgpleHRlcm4gdm9pZCB0dHlfd3JpdGVfZmx1c2goc3RydWN0IHR0eV9zdHJ1Y3Qg
Kik7CgpleHRlcm4gc3RydWN0IHRlcm1pb3MgdHR5X3N0ZF90ZXJtaW9zOwpleHRlcm4gc3RydWN0
IHR0eV9zdHJ1Y3QgKiByZWRpcmVjdDsKZXh0ZXJuIHN0cnVjdCB0dHlfbGRpc2MgbGRpc2NzW107
CmV4dGVybiBpbnQgZmdfY29uc29sZSwgbGFzdF9jb25zb2xlLCB3YW50X2NvbnNvbGU7CgpleHRl
cm4gaW50IGttc2dfcmVkaXJlY3Q7CgpleHRlcm4gdm9pZCBjb25faW5pdCh2b2lkKTsKZXh0ZXJu
IHZvaWQgY29uc29sZV9pbml0KHZvaWQpOwoKZXh0ZXJuIGludCByc19pbml0KHZvaWQpOwpleHRl
cm4gaW50IGxwX2luaXQodm9pZCk7CmV4dGVybiBpbnQgcHR5X2luaXQodm9pZCk7CmV4dGVybiB2
b2lkIHR0eV9pbml0KHZvaWQpOwpleHRlcm4gaW50IG14c2VyX2luaXQodm9pZCk7CmV4dGVybiBp
bnQgbW94YV9pbml0KHZvaWQpOwpleHRlcm4gaW50IGlwMl9pbml0KHZvaWQpOwpleHRlcm4gaW50
IHBjeGVfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBwY19pbml0KHZvaWQpOwpleHRlcm4gaW50IHZj
c19pbml0KHZvaWQpOwpleHRlcm4gaW50IHJwX2luaXQodm9pZCk7CmV4dGVybiBpbnQgY3lfaW5p
dCh2b2lkKTsKZXh0ZXJuIGludCBzdGxfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBzdGxpX2luaXQo
dm9pZCk7CmV4dGVybiBpbnQgcmlzY29tOF9pbml0KHZvaWQpOwpleHRlcm4gaW50IHNwZWNpYWxp
eF9pbml0KHZvaWQpOwpleHRlcm4gaW50IGVzcHNlcmlhbF9pbml0KHZvaWQpOwpleHRlcm4gaW50
IG1hY3NlcmlhbF9pbml0KHZvaWQpOwoKZXh0ZXJuIGludCB0dHlfcGFyYW5vaWFfY2hlY2soc3Ry
dWN0IHR0eV9zdHJ1Y3QgKnR0eSwga2Rldl90IGRldmljZSwKCQkJICAgICAgY29uc3QgY2hhciAq
cm91dGluZSk7CmV4dGVybiBjaGFyICp0dHlfbmFtZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBj
aGFyICpidWYpOwpleHRlcm4gdm9pZCB0dHlfd2FpdF91bnRpbF9zZW50KHN0cnVjdCB0dHlfc3Ry
dWN0ICogdHR5LCBsb25nIHRpbWVvdXQpOwpleHRlcm4gaW50IHR0eV9jaGVja19jaGFuZ2Uoc3Ry
dWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwpleHRlcm4gdm9pZCBzdG9wX3R0eShzdHJ1Y3QgdHR5X3N0
cnVjdCAqIHR0eSk7CmV4dGVybiB2b2lkIHN0YXJ0X3R0eShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0
eSk7CmV4dGVybiBpbnQgdHR5X3JlZ2lzdGVyX2xkaXNjKGludCBkaXNjLCBzdHJ1Y3QgdHR5X2xk
aXNjICpuZXdfbGRpc2MpOwpleHRlcm4gaW50IHR0eV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHR0
eV9kcml2ZXIgKmRyaXZlcik7CmV4dGVybiBpbnQgdHR5X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVj
dCB0dHlfZHJpdmVyICpkcml2ZXIpOwpleHRlcm4gaW50IHR0eV9yZWFkX3Jhd19kYXRhKHN0cnVj
dCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKmJ1ZnAsCgkJCSAgICAgaW50IGJ1Zmxl
bik7CmV4dGVybiB2b2lkIHR0eV93cml0ZV9tZXNzYWdlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHks
IGNoYXIgKm1zZyk7CgpleHRlcm4gaW50IGlzX29ycGhhbmVkX3BncnAoaW50IHBncnApOwpleHRl
cm4gaW50IGlzX2lnbm9yZWQoaW50IHNpZyk7CmV4dGVybiBpbnQgdHR5X3NpZ25hbChpbnQgc2ln
LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKZXh0ZXJuIHZvaWQgdHR5X2hhbmd1cChzdHJ1Y3Qg
dHR5X3N0cnVjdCAqIHR0eSk7CmV4dGVybiB2b2lkIHR0eV92aGFuZ3VwKHN0cnVjdCB0dHlfc3Ry
dWN0ICogdHR5KTsKZXh0ZXJuIHZvaWQgdHR5X3VuaGFuZ3VwKHN0cnVjdCBmaWxlICpmaWxwKTsK
ZXh0ZXJuIGludCB0dHlfaHVuZ191cF9wKHN0cnVjdCBmaWxlICogZmlscCk7CmV4dGVybiB2b2lk
IGRvX1NBSyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKZXh0ZXJuIHZvaWQgZGlzYXNzb2NpYXRl
X2N0dHkoaW50IHByaXYpOwpleHRlcm4gdm9pZCB0dHlfZmxpcF9idWZmZXJfcHVzaChzdHJ1Y3Qg
dHR5X3N0cnVjdCAqdHR5KTsKZXh0ZXJuIGludCB0dHlfZ2V0X2JhdWRfcmF0ZShzdHJ1Y3QgdHR5
X3N0cnVjdCAqdHR5KTsKCiAKZXh0ZXJuIHN0cnVjdCB0dHlfbGRpc2MgdHR5X2xkaXNjX05fVFRZ
OwoKIApleHRlcm4gaW50IG5fdHR5X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1
Y3QgZmlsZSAqIGZpbGUsCgkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcg
YXJnKTsKCiAKCmV4dGVybiB2b2lkIHNlcmlhbF9jb25zb2xlX2luaXQodm9pZCk7CiAKIAoKZXh0
ZXJuIGludCBwY3hlX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZp
bHApOwoKIAoKZXh0ZXJuIHZvaWQgY29uc29sZV9wcmludChjb25zdCBjaGFyICopOwoKIAoKZXh0
ZXJuIGludCB2dF9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZp
bGUsCgkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKCgoKIyAyMiAi
L29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQu
aCIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9s
aW51eC9zZW0uaCIgMQoKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51
eC9pbmNsdWRlL2xpbnV4L2lwYy5oIiAxCgoKCgoKCgogCnN0cnVjdCBpcGNfcGVybQp7CglfX2tl
cm5lbF9rZXlfdAlrZXk7CglfX2tlcm5lbF91aWRfdAl1aWQ7CglfX2tlcm5lbF9naWRfdAlnaWQ7
CglfX2tlcm5lbF91aWRfdAljdWlkOwoJX19rZXJuZWxfZ2lkX3QJY2dpZDsKCV9fa2VybmVsX21v
ZGVfdAltb2RlOyAKCXVuc2lnbmVkIHNob3J0CXNlcTsKfTsKCiAKIyAxICIvb3B0L2Nyb3NzZGV2
L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vaXBjYnVmLmgiIDEKCgoKIAojIDEz
ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vaXBjYnVm
LmgiCgpzdHJ1Y3QgaXBjNjRfcGVybQp7CglfX2tlcm5lbF9rZXlfdAlrZXk7CglfX2tlcm5lbF91
aWRfdAl1aWQ7CglfX2tlcm5lbF9naWRfdAlnaWQ7CglfX2tlcm5lbF91aWRfdAljdWlkOwoJX19r
ZXJuZWxfZ2lkX3QJY2dpZDsKCV9fa2VybmVsX21vZGVfdAltb2RlOyAKCXVuc2lnbmVkIHNob3J0
CXNlcTsKCXVuc2lnbmVkIHNob3J0CV9fcGFkMTsKCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOwoJ
dW5zaWduZWQgbG9uZwlfX3VudXNlZDI7Cn07CgoKIyAyMSAiL29wdC9jcm9zc2Rldi9taXBzZWwt
bGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvaXBjLmgiIDIKCgogCgoKCgogCgogICAKCgoK
IAoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKIApzdHJ1Y3Qga2Vybl9pcGNfcGVybQp7CglrZXlfdAkJ
a2V5OwoJdWlkX3QJCXVpZDsKCWdpZF90CQlnaWQ7Cgl1aWRfdAkJY3VpZDsKCWdpZF90CQljZ2lk
OwoJbW9kZV90CQltb2RlOyAKCXVuc2lnbmVkIGxvbmcJc2VxOwp9OwoKCgoKCgojIDQgIi9vcHQv
Y3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NlbS5oIiAyCgoK
IAoKCiAKCgoKCgoKCgogCgoKCiAKc3RydWN0IHNlbWlkX2RzIHsKCXN0cnVjdCBpcGNfcGVybQlz
ZW1fcGVybTsJCSAKCV9fa2VybmVsX3RpbWVfdAlzZW1fb3RpbWU7CQkgCglfX2tlcm5lbF90aW1l
X3QJc2VtX2N0aW1lOwkJIAoJc3RydWN0IHNlbQkqc2VtX2Jhc2U7CQkgCglzdHJ1Y3Qgc2VtX3F1
ZXVlICpzZW1fcGVuZGluZzsJCSAKCXN0cnVjdCBzZW1fcXVldWUgKipzZW1fcGVuZGluZ19sYXN0
OwkgCglzdHJ1Y3Qgc2VtX3VuZG8JKnVuZG87CQkJIAoJdW5zaWduZWQgc2hvcnQJc2VtX25zZW1z
OwkJIAp9OwoKIAojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNs
dWRlL2FzbS9zZW1idWYuaCIgMQoKCgogCgoKCgoKCgoKc3RydWN0IHNlbWlkNjRfZHMgewoJc3Ry
dWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CQkgCglfX2tlcm5lbF90aW1lX3QJc2VtX290aW1lOwkJ
IAoJX19rZXJuZWxfdGltZV90CXNlbV9jdGltZTsJCSAKCXVuc2lnbmVkIGxvbmcJc2VtX25zZW1z
OwkJIAoJdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7Cgl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsK
fTsKCgojIDM1ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9s
aW51eC9zZW0uaCIgMgoKCiAKc3RydWN0IHNlbWJ1ZiB7Cgl1bnNpZ25lZCBzaG9ydCAgc2VtX251
bTsJIAoJc2hvcnQJCXNlbV9vcDsJCSAKCXNob3J0CQlzZW1fZmxnOwkgCn07CgogCnVuaW9uIHNl
bXVuIHsKCWludCB2YWw7CQkJIAoJc3RydWN0IHNlbWlkX2RzICpidWY7CQkgCgl1bnNpZ25lZCBz
aG9ydCAqYXJyYXk7CQkgCglzdHJ1Y3Qgc2VtaW5mbyAqX19idWY7CQkgCgl2b2lkICpfX3BhZDsK
fTsKCnN0cnVjdCAgc2VtaW5mbyB7CglpbnQgc2VtbWFwOwoJaW50IHNlbW1uaTsKCWludCBzZW1t
bnM7CglpbnQgc2VtbW51OwoJaW50IHNlbW1zbDsKCWludCBzZW1vcG07CglpbnQgc2VtdW1lOwoJ
aW50IHNlbXVzejsKCWludCBzZW12bXg7CglpbnQgc2VtYWVtOwp9OwoKCgoKCgoKIAoKCgoKCgoK
CiAKc3RydWN0IHNlbSB7CglpbnQJc2VtdmFsOwkJIAoJaW50CXNlbXBpZDsJCSAKfTsKCiAKc3Ry
dWN0IHNlbV9hcnJheSB7CglzdHJ1Y3Qga2Vybl9pcGNfcGVybQlzZW1fcGVybTsJIAoJdGltZV90
CQkJc2VtX290aW1lOwkgCgl0aW1lX3QJCQlzZW1fY3RpbWU7CSAKCXN0cnVjdCBzZW0JCSpzZW1f
YmFzZTsJIAoJc3RydWN0IHNlbV9xdWV1ZQkqc2VtX3BlbmRpbmc7CSAKCXN0cnVjdCBzZW1fcXVl
dWUJKipzZW1fcGVuZGluZ19sYXN0OyAgCglzdHJ1Y3Qgc2VtX3VuZG8JCSp1bmRvOwkJIAoJdW5z
aWduZWQgbG9uZwkJc2VtX25zZW1zOwkgCn07CgogCnN0cnVjdCBzZW1fcXVldWUgewoJc3RydWN0
IHNlbV9xdWV1ZSAqCW5leHQ7CSAgCglzdHJ1Y3Qgc2VtX3F1ZXVlICoqCXByZXY7CSAgCglzdHJ1
Y3QgdGFza19zdHJ1Y3QqCXNsZWVwZXI7ICAKCXN0cnVjdCBzZW1fdW5kbyAqCXVuZG87CSAgCglp
bnQgICAgCQkJcGlkOwkgIAoJaW50ICAgIAkJCXN0YXR1czsJICAKCXN0cnVjdCBzZW1fYXJyYXkg
KglzbWE7CSAgCglpbnQJCQlpZDsJICAKCXN0cnVjdCBzZW1idWYgKgkJc29wczsJICAKCWludAkJ
CW5zb3BzOwkgIAoJaW50CQkJYWx0ZXI7CSAgCn07CgogCgoKc3RydWN0IHNlbV91bmRvIHsKCXN0
cnVjdCBzZW1fdW5kbyAqCXByb2NfbmV4dDsJIAoJc3RydWN0IHNlbV91bmRvICoJaWRfbmV4dDsJ
IAoJaW50CQkJc2VtaWQ7CQkgCglzaG9ydCAqCQkJc2VtYWRqOwkJIAp9OwoKICBsb25nIHN5c19z
ZW1nZXQgKGtleV90IGtleSwgaW50IG5zZW1zLCBpbnQgc2VtZmxnKTsKICBsb25nIHN5c19zZW1v
cCAoaW50IHNlbWlkLCBzdHJ1Y3Qgc2VtYnVmICpzb3BzLCB1bnNpZ25lZCBuc29wcyk7CiAgbG9u
ZyBzeXNfc2VtY3RsIChpbnQgc2VtaWQsIGludCBzZW1udW0sIGludCBjbWQsIHVuaW9uIHNlbXVu
IGFyZyk7CgoKCgojIDIzICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5j
bHVkZS9saW51eC9zY2hlZC5oIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3Ny
Yy9saW51eC9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIiAxCgoKCiMgMSAiL29wdC9jcm9zc2Rldi9t
aXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3NpZ25hbC5oIiAxCiAKIyAxMCAiL29w
dC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3NpZ25hbC5oIgoK
CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CglfX3UzMiBzaWdbKDEyOCAvIDMyKV07Cn0gc2lnc2V0
X3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgb2xkX3NpZ3NldF90OwkJIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKIyA3OCAiL29wdC9jcm9zc2Rldi9taXBzZWwt
bGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3NpZ25hbC5oIgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAp0eXBlZGVmIHZvaWQgKCpfX3NpZ2hhbmRsZXJf
dCkoaW50KTsKCiAKCgoKCnN0cnVjdCBzaWdhY3Rpb24gewoJdW5zaWduZWQgaW50CXNhX2ZsYWdz
OwoJX19zaWdoYW5kbGVyX3QJc2FfaGFuZGxlcjsKCXNpZ3NldF90CXNhX21hc2s7Cgl2b2lkCQko
KnNhX3Jlc3RvcmVyKSh2b2lkKTsKCWludAkJc2FfcmVzdlsxXTsJIAp9OwoKc3RydWN0IGtfc2ln
YWN0aW9uIHsKCXN0cnVjdCBzaWdhY3Rpb24gc2E7Cn07CgogCnR5cGVkZWYgc3RydWN0IHNpZ2Fs
dHN0YWNrIHsKCXZvaWQgKnNzX3NwOwoJc2l6ZV90IHNzX3NpemU7CglpbnQgc3NfZmxhZ3M7Cn0g
c3RhY2tfdDsKCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNs
dWRlL2FzbS9zaWdjb250ZXh0LmgiIDEKIAoKCgoKCgoKCgoKIAoKCgpzdHJ1Y3Qgc2lnY29udGV4
dCB7Cgl1bnNpZ25lZCBpbnQgICAgICAgc2NfcmVnbWFzazsJCSAKCXVuc2lnbmVkIGludCAgICAg
ICBzY19zdGF0dXM7Cgl1bnNpZ25lZCBsb25nIGxvbmcgc2NfcGM7Cgl1bnNpZ25lZCBsb25nIGxv
bmcgc2NfcmVnc1szMl07Cgl1bnNpZ25lZCBsb25nIGxvbmcgc2NfZnByZWdzWzMyXTsJIAoJdW5z
aWduZWQgaW50ICAgICAgIHNjX293bmVkZnA7Cgl1bnNpZ25lZCBpbnQgICAgICAgc2NfZnBjX2Nz
cjsJCSAKCXVuc2lnbmVkIGludCAgICAgICBzY19mcGNfZWlyOwkJIAoJdW5zaWduZWQgaW50ICAg
ICAgIHNjX3NzZmxhZ3M7CQkgCgl1bnNpZ25lZCBsb25nIGxvbmcgc2NfbWRoaTsKCXVuc2lnbmVk
IGxvbmcgbG9uZyBzY19tZGxvOwoKCXVuc2lnbmVkIGludCAgICAgICBzY19jYXVzZTsJCSAKCXVu
c2lnbmVkIGludCAgICAgICBzY19iYWR2YWRkcjsJCSAKCgl1bnNpZ25lZCBsb25nICAgICAgc2Nf
c2lnc2V0WzRdOwkgCn07CgoKIyAxNTAgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9s
aW51eC9pbmNsdWRlL2FzbS9zaWduYWwuaCIgMgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMg
NCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2ln
bmFsLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1
ZGUvYXNtL3NpZ2luZm8uaCIgMQogCgoKCgoKCgoKCgoKCiAKCnR5cGVkZWYgdW5pb24gc2lndmFs
IHsKCWludCBzaXZhbF9pbnQ7Cgl2b2lkICpzaXZhbF9wdHI7Cn0gc2lndmFsX3Q7CgogCgoKCgoK
dHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7CglpbnQgc2lfc2lnbm87CglpbnQgc2lfY29kZTsKCWlu
dCBzaV9lcnJubzsKCgl1bmlvbiB7CgkJaW50IF9wYWRbKCgxMjgvc2l6ZW9mKGludCkpIC0gMyld
OwoKCQkgCgkJc3RydWN0IHsKCQkJcGlkX3QgX3BpZDsJCSAKCQkJdWlkX3QgX3VpZDsJCSAKCQl9
IF9raWxsOwoKCQkgCgkJc3RydWN0IHsKCQkJcGlkX3QgX3BpZDsJCSAKCQkJdWlkX3QgX3VpZDsJ
CSAKCQkJY2xvY2tfdCBfdXRpbWU7CgkJCWludCBfc3RhdHVzOwkJIAoJCQljbG9ja190IF9zdGlt
ZTsKCQl9IF9zaWdjaGxkOwoKCQkgCgkJc3RydWN0IHsKCQkJcGlkX3QgX3BpZDsJCSAKCQkJY2xv
Y2tfdCBfdXRpbWU7CgkJCWludCBfc3RhdHVzOwkJIAoJCQljbG9ja190IF9zdGltZTsKCQl9IF9p
cml4X3NpZ2NobGQ7CgoJCSAKCQlzdHJ1Y3QgewoJCQl2b2lkICpfYWRkcjsgIAoJCX0gX3NpZ2Zh
dWx0OwoKCQkgCgkJc3RydWN0IHsKCQkJaW50IF9iYW5kOwkgCgkJCWludCBfZmQ7CgkJfSBfc2ln
cG9sbDsKCgkJIAoJCXN0cnVjdCB7CgkJCXVuc2lnbmVkIGludCBfdGltZXIxOwoJCQl1bnNpZ25l
ZCBpbnQgX3RpbWVyMjsKCQl9IF90aW1lcjsKCgkJIAoJCXN0cnVjdCB7CgkJCXBpZF90IF9waWQ7
CQkgCgkJCXVpZF90IF91aWQ7CQkgCgkJCXNpZ3ZhbF90IF9zaWd2YWw7CgkJfSBfcnQ7CgoJfSBf
c2lmaWVsZHM7Cn0gc2lnaW5mb190OwoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgogCgoKCgoKCiAKCgoK
CgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKIAp0eXBlZGVmIHN0cnVjdCBzaWdl
dmVudCB7CglpbnQgc2lnZXZfbm90aWZ5OwoJc2lndmFsX3Qgc2lnZXZfdmFsdWU7CglpbnQgc2ln
ZXZfc2lnbm87Cgl1bmlvbiB7CgkJaW50IF9wYWRbKCg2NC9zaXplb2YoaW50KSkgLSA0KV07CgoJ
CXN0cnVjdCB7CgkJCXZvaWQgKCpfZnVuY3Rpb24pKHNpZ3ZhbF90KTsKCQkJdm9pZCAqX2F0dHJp
YnV0ZTsJIAoJCX0gX3NpZ2V2X3RocmVhZDsKCX0gX3NpZ2V2X3VuOwp9IHNpZ2V2ZW50X3Q7CgoK
CgoKIyA1ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51
eC9zaWduYWwuaCIgMgoKCgogCgoKCnN0cnVjdCBzaWduYWxfcXVldWUKewoJc3RydWN0IHNpZ25h
bF9xdWV1ZSAqbmV4dDsKCXNpZ2luZm9fdCBpbmZvOwp9OwoKIAoKCgoKCgogCgpleHRlcm4gaW5s
aW5lIHZvaWQgc2lnYWRkc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQp7Cgl1bnNpZ25lZCBs
b25nIHNpZyA9IF9zaWcgLSAxOwoJaWYgKCgxMjggLyAzMikgPT0gMSkKCQlzZXQtPnNpZ1swXSB8
PSAxVUwgPDwgc2lnOwoJZWxzZQoJCXNldC0+c2lnW3NpZyAvIDMyXSB8PSAxVUwgPDwgKHNpZyAl
IDMyKTsKfQoKZXh0ZXJuIGlubGluZSB2b2lkIHNpZ2RlbHNldChzaWdzZXRfdCAqc2V0LCBpbnQg
X3NpZykKewoJdW5zaWduZWQgbG9uZyBzaWcgPSBfc2lnIC0gMTsKCWlmICgoMTI4IC8gMzIpID09
IDEpCgkJc2V0LT5zaWdbMF0gJj0gfigxVUwgPDwgc2lnKTsKCWVsc2UKCQlzZXQtPnNpZ1tzaWcg
LyAzMl0gJj0gfigxVUwgPDwgKHNpZyAlIDMyKSk7Cn0KCmV4dGVybiBpbmxpbmUgaW50IHNpZ2lz
bWVtYmVyKHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQp7Cgl1bnNpZ25lZCBsb25nIHNpZyA9IF9z
aWcgLSAxOwoJaWYgKCgxMjggLyAzMikgPT0gMSkKCQlyZXR1cm4gMSAmIChzZXQtPnNpZ1swXSA+
PiBzaWcpOwoJZWxzZQoJCXJldHVybiAxICYgKHNldC0+c2lnW3NpZyAvIDMyXSA+PiAoc2lnICUg
MzIpKTsKfQoKZXh0ZXJuIGlubGluZSBpbnQgc2lnZmluZGlud29yZCh1bnNpZ25lZCBsb25nIHdv
cmQpCnsKCXJldHVybiBmZnoofndvcmQpOwp9CgoKCgoKCgoKCiMgMTAyICIvb3B0L2Nyb3NzZGV2
L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zaWduYWwuaCIKCgpleHRlcm4g
aW5saW5lIHZvaWQgc2lnb3JzZXRzKHNpZ3NldF90ICpyLCBjb25zdCBzaWdzZXRfdCAqYSwgY29u
c3Qgc2lnc2V0X3QgKmIpIHsgdW5zaWduZWQgbG9uZyBhMCwgYTEsIGEyLCBhMywgYjAsIGIxLCBi
MiwgYjM7IHVuc2lnbmVkIGxvbmcgaTsgZm9yIChpID0gMDsgaSA8ICgxMjggLyAzMikvNDsgKytp
KSB7IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBhLT5zaWdbNCppKzFdOyBhMiA9IGEtPnNpZ1s0
KmkrMl07IGEzID0gYS0+c2lnWzQqaSszXTsgYjAgPSBiLT5zaWdbNCppKzBdOyBiMSA9IGItPnNp
Z1s0KmkrMV07IGIyID0gYi0+c2lnWzQqaSsyXTsgYjMgPSBiLT5zaWdbNCppKzNdOyByLT5zaWdb
NCppKzBdID0gICgoYTApIHwgKCBiMCkpOyByLT5zaWdbNCppKzFdID0gICgoYTEpIHwgKCBiMSkp
OyByLT5zaWdbNCppKzJdID0gICgoYTIpIHwgKCBiMikpOyByLT5zaWdbNCppKzNdID0gICgoYTMp
IHwgKCBiMykpOyB9IHN3aXRjaCAoKDEyOCAvIDMyKSAlIDQpIHsgY2FzZSAzOiBhMCA9IGEtPnNp
Z1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsgYTIgPSBhLT5zaWdbNCppKzJdOyBiMCA9IGIt
PnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgYjIgPSBiLT5zaWdbNCppKzJdOyByLT5z
aWdbNCppKzBdID0gICgoYTApIHwgKCBiMCkpOyByLT5zaWdbNCppKzFdID0gICgoYTEpIHwgKCBi
MSkpOyByLT5zaWdbNCppKzJdID0gICgoYTIpIHwgKCBiMikpOyBicmVhazsgY2FzZSAyOiBhMCA9
IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsgYjAgPSBiLT5zaWdbNCppKzBdOyBi
MSA9IGItPnNpZ1s0KmkrMV07IHItPnNpZ1s0KmkrMF0gPSAgKChhMCkgfCAoIGIwKSk7IHItPnNp
Z1s0KmkrMV0gPSAgKChhMSkgfCAoIGIxKSk7IGJyZWFrOyBjYXNlIDE6IGEwID0gYS0+c2lnWzQq
aSswXTsgYjAgPSBiLT5zaWdbNCppKzBdOyByLT5zaWdbNCppKzBdID0gICgoYTApIHwgKCBiMCkp
OyBicmVhazsgfSB9CgoKZXh0ZXJuIGlubGluZSB2b2lkIHNpZ2FuZHNldHMoc2lnc2V0X3QgKnIs
IGNvbnN0IHNpZ3NldF90ICphLCBjb25zdCBzaWdzZXRfdCAqYikgeyB1bnNpZ25lZCBsb25nIGEw
LCBhMSwgYTIsIGEzLCBiMCwgYjEsIGIyLCBiMzsgdW5zaWduZWQgbG9uZyBpOyBmb3IgKGkgPSAw
OyBpIDwgKDEyOCAvIDMyKS80OyArK2kpIHsgYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNp
Z1s0KmkrMV07IGEyID0gYS0+c2lnWzQqaSsyXTsgYTMgPSBhLT5zaWdbNCppKzNdOyBiMCA9IGIt
PnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgYjIgPSBiLT5zaWdbNCppKzJdOyBiMyA9
IGItPnNpZ1s0KmkrM107IHItPnNpZ1s0KmkrMF0gPSAgKChhMCkgJiAoIGIwKSk7IHItPnNpZ1s0
KmkrMV0gPSAgKChhMSkgJiAoIGIxKSk7IHItPnNpZ1s0KmkrMl0gPSAgKChhMikgJiAoIGIyKSk7
IHItPnNpZ1s0KmkrM10gPSAgKChhMykgJiAoIGIzKSk7IH0gc3dpdGNoICgoMTI4IC8gMzIpICUg
NCkgeyBjYXNlIDM6IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBhLT5zaWdbNCppKzFdOyBhMiA9
IGEtPnNpZ1s0KmkrMl07IGIwID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOyBi
MiA9IGItPnNpZ1s0KmkrMl07IHItPnNpZ1s0KmkrMF0gPSAgKChhMCkgJiAoIGIwKSk7IHItPnNp
Z1s0KmkrMV0gPSAgKChhMSkgJiAoIGIxKSk7IHItPnNpZ1s0KmkrMl0gPSAgKChhMikgJiAoIGIy
KSk7IGJyZWFrOyBjYXNlIDI6IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBhLT5zaWdbNCppKzFd
OyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgci0+c2lnWzQqaSswXSA9
ICAoKGEwKSAmICggYjApKTsgci0+c2lnWzQqaSsxXSA9ICAoKGExKSAmICggYjEpKTsgYnJlYWs7
IGNhc2UgMTogYTAgPSBhLT5zaWdbNCppKzBdOyBiMCA9IGItPnNpZ1s0KmkrMF07IHItPnNpZ1s0
KmkrMF0gPSAgKChhMCkgJiAoIGIwKSk7IGJyZWFrOyB9IH0KCgpleHRlcm4gaW5saW5lIHZvaWQg
c2lnbmFuZHNldHMoc2lnc2V0X3QgKnIsIGNvbnN0IHNpZ3NldF90ICphLCBjb25zdCBzaWdzZXRf
dCAqYikgeyB1bnNpZ25lZCBsb25nIGEwLCBhMSwgYTIsIGEzLCBiMCwgYjEsIGIyLCBiMzsgdW5z
aWduZWQgbG9uZyBpOyBmb3IgKGkgPSAwOyBpIDwgKDEyOCAvIDMyKS80OyArK2kpIHsgYTAgPSBh
LT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07IGEyID0gYS0+c2lnWzQqaSsyXTsgYTMg
PSBhLT5zaWdbNCppKzNdOyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsg
YjIgPSBiLT5zaWdbNCppKzJdOyBiMyA9IGItPnNpZ1s0KmkrM107IHItPnNpZ1s0KmkrMF0gPSAg
KChhMCkgJiB+KCBiMCkpOyByLT5zaWdbNCppKzFdID0gICgoYTEpICYgfiggYjEpKTsgci0+c2ln
WzQqaSsyXSA9ICAoKGEyKSAmIH4oIGIyKSk7IHItPnNpZ1s0KmkrM10gPSAgKChhMykgJiB+KCBi
MykpOyB9IHN3aXRjaCAoKDEyOCAvIDMyKSAlIDQpIHsgY2FzZSAzOiBhMCA9IGEtPnNpZ1s0Kmkr
MF07IGExID0gYS0+c2lnWzQqaSsxXTsgYTIgPSBhLT5zaWdbNCppKzJdOyBiMCA9IGItPnNpZ1s0
KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgYjIgPSBiLT5zaWdbNCppKzJdOyByLT5zaWdbNCpp
KzBdID0gICgoYTApICYgfiggYjApKTsgci0+c2lnWzQqaSsxXSA9ICAoKGExKSAmIH4oIGIxKSk7
IHItPnNpZ1s0KmkrMl0gPSAgKChhMikgJiB+KCBiMikpOyBicmVhazsgY2FzZSAyOiBhMCA9IGEt
PnNpZ1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsgYjAgPSBiLT5zaWdbNCppKzBdOyBiMSA9
IGItPnNpZ1s0KmkrMV07IHItPnNpZ1s0KmkrMF0gPSAgKChhMCkgJiB+KCBiMCkpOyByLT5zaWdb
NCppKzFdID0gICgoYTEpICYgfiggYjEpKTsgYnJlYWs7IGNhc2UgMTogYTAgPSBhLT5zaWdbNCpp
KzBdOyBiMCA9IGItPnNpZ1s0KmkrMF07IHItPnNpZ1s0KmkrMF0gPSAgKChhMCkgJiB+KCBiMCkp
OyBicmVhazsgfSB9CgoKCgoKCgojIDEzNCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3Jj
L2xpbnV4L2luY2x1ZGUvbGludXgvc2lnbmFsLmgiCgoKZXh0ZXJuIGlubGluZSB2b2lkIHNpZ25v
dHNldChzaWdzZXRfdCAqc2V0KSB7IHVuc2lnbmVkIGxvbmcgaTsgZm9yIChpID0gMDsgaSA8ICgx
MjggLyAzMikvNDsgKytpKSB7IHNldC0+c2lnWzQqaSswXSA9ICAofihzZXQtPnNpZ1s0KmkrMF0p
KTsgc2V0LT5zaWdbNCppKzFdID0gICh+KHNldC0+c2lnWzQqaSsxXSkpOyBzZXQtPnNpZ1s0Kmkr
Ml0gPSAgKH4oc2V0LT5zaWdbNCppKzJdKSk7IHNldC0+c2lnWzQqaSszXSA9ICAofihzZXQtPnNp
Z1s0KmkrM10pKTsgfSBzd2l0Y2ggKCgxMjggLyAzMikgJSA0KSB7IGNhc2UgMzogc2V0LT5zaWdb
NCppKzJdID0gICh+KHNldC0+c2lnWzQqaSsyXSkpOyBjYXNlIDI6IHNldC0+c2lnWzQqaSsxXSA9
ICAofihzZXQtPnNpZ1s0KmkrMV0pKTsgY2FzZSAxOiBzZXQtPnNpZ1s0KmkrMF0gPSAgKH4oc2V0
LT5zaWdbNCppKzBdKSk7IH0gfQoKCgoKZXh0ZXJuIGlubGluZSB2b2lkIHNpZ2VtcHR5c2V0KHNp
Z3NldF90ICpzZXQpCnsKCXN3aXRjaCAoKDEyOCAvIDMyKSkgewoJZGVmYXVsdDoKCQltZW1zZXQo
c2V0LCAwLCBzaXplb2Yoc2lnc2V0X3QpKTsKCQlicmVhazsKCWNhc2UgMjogc2V0LT5zaWdbMV0g
PSAwOwoJY2FzZSAxOglzZXQtPnNpZ1swXSA9IDA7CgkJYnJlYWs7Cgl9Cn0KCmV4dGVybiBpbmxp
bmUgdm9pZCBzaWdmaWxsc2V0KHNpZ3NldF90ICpzZXQpCnsKCXN3aXRjaCAoKDEyOCAvIDMyKSkg
ewoJZGVmYXVsdDoKCQltZW1zZXQoc2V0LCAtMSwgc2l6ZW9mKHNpZ3NldF90KSk7CgkJYnJlYWs7
CgljYXNlIDI6IHNldC0+c2lnWzFdID0gLTE7CgljYXNlIDE6CXNldC0+c2lnWzBdID0gLTE7CgkJ
YnJlYWs7Cgl9Cn0KCmV4dGVybiBjaGFyICogcmVuZGVyX3NpZ3NldF90KHNpZ3NldF90ICpzZXQs
IGNoYXIgKmJ1ZmZlcik7CgogCgpleHRlcm4gaW5saW5lIHZvaWQgc2lnYWRkc2V0bWFzayhzaWdz
ZXRfdCAqc2V0LCB1bnNpZ25lZCBsb25nIG1hc2spCnsKCXNldC0+c2lnWzBdIHw9IG1hc2s7Cn0K
CmV4dGVybiBpbmxpbmUgdm9pZCBzaWdkZWxzZXRtYXNrKHNpZ3NldF90ICpzZXQsIHVuc2lnbmVk
IGxvbmcgbWFzaykKewoJc2V0LT5zaWdbMF0gJj0gfm1hc2s7Cn0KCmV4dGVybiBpbmxpbmUgaW50
IHNpZ3Rlc3RzZXRtYXNrKHNpZ3NldF90ICpzZXQsIHVuc2lnbmVkIGxvbmcgbWFzaykKewoJcmV0
dXJuIChzZXQtPnNpZ1swXSAmIG1hc2spICE9IDA7Cn0KCmV4dGVybiBpbmxpbmUgdm9pZCBzaWdp
bml0c2V0KHNpZ3NldF90ICpzZXQsIHVuc2lnbmVkIGxvbmcgbWFzaykKewoJc2V0LT5zaWdbMF0g
PSBtYXNrOwoJc3dpdGNoICgoMTI4IC8gMzIpKSB7CglkZWZhdWx0OgoJCW1lbXNldCgmc2V0LT5z
aWdbMV0sIDAsIHNpemVvZihsb25nKSooKDEyOCAvIDMyKS0xKSk7CgkJYnJlYWs7CgljYXNlIDI6
IHNldC0+c2lnWzFdID0gMDsKCWNhc2UgMToKCX0KfQoKZXh0ZXJuIGlubGluZSB2b2lkIHNpZ2lu
aXRzZXRpbnYoc2lnc2V0X3QgKnNldCwgdW5zaWduZWQgbG9uZyBtYXNrKQp7CglzZXQtPnNpZ1sw
XSA9IH5tYXNrOwoJc3dpdGNoICgoMTI4IC8gMzIpKSB7CglkZWZhdWx0OgoJCW1lbXNldCgmc2V0
LT5zaWdbMV0sIC0xLCBzaXplb2YobG9uZykqKCgxMjggLyAzMiktMSkpOwoJCWJyZWFrOwoJY2Fz
ZSAyOiBzZXQtPnNpZ1sxXSA9IC0xOwoJY2FzZSAxOgoJfQp9CgoKCgoKCiMgMjQgIi9vcHQvY3Jv
c3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKCiMg
MSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2Vj
dXJlYml0cy5oIiAxCgoKCgoKZXh0ZXJuIHVuc2lnbmVkIHNlY3VyZWJpdHM7CgogCgoKCgoKCgog
CgoKCgogCgoKCgoKCgoKCiMgMjUgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51
eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKCgogCgoKCgoKCgoKCgoKCiAKIyA1MCAiL29wdC9j
cm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgYXZlbnJ1bltdOwkJIAoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGlu
dCBucl9ydW5uaW5nLCBucl90aHJlYWRzOwpleHRlcm4gaW50IGxhc3RfcGlkOwoKCgojIDEgIi9v
cHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3BhcmFtLmgi
IDEKCgoKCgoKIyA3MiAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1
ZGUvbGludXgvc2NoZWQuaCIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMv
bGludXgvaW5jbHVkZS9saW51eC9yZXNvdXJjZS5oIiAxCgoKCgoKIAoKCgogCgoKCgoKCgoKCgpz
dHJ1Y3QJcnVzYWdlIHsKCXN0cnVjdCB0aW1ldmFsIHJ1X3V0aW1lOwkgCglzdHJ1Y3QgdGltZXZh
bCBydV9zdGltZTsJIAoJbG9uZwlydV9tYXhyc3M7CQkgCglsb25nCXJ1X2l4cnNzOwkJIAoJbG9u
ZwlydV9pZHJzczsJCSAKCWxvbmcJcnVfaXNyc3M7CQkgCglsb25nCXJ1X21pbmZsdDsJCSAKCWxv
bmcJcnVfbWFqZmx0OwkJIAoJbG9uZwlydV9uc3dhcDsJCSAKCWxvbmcJcnVfaW5ibG9jazsJCSAK
CWxvbmcJcnVfb3VibG9jazsJCSAKCWxvbmcJcnVfbXNnc25kOwkJIAoJbG9uZwlydV9tc2dyY3Y7
CQkgCglsb25nCXJ1X25zaWduYWxzOwkJIAoJbG9uZwlydV9udmNzdzsJCSAKCWxvbmcJcnVfbml2
Y3N3OwkJIAp9OwoKc3RydWN0IHJsaW1pdCB7Cgl1bnNpZ25lZCBsb25nCXJsaW1fY3VyOwoJdW5z
aWduZWQgbG9uZwlybGltX21heDsKfTsKCgoKCgoKCgogCgoKCiMgMSAiL29wdC9jcm9zc2Rldi9t
aXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3Jlc291cmNlLmgiIDEKIAoKCgoKCgoK
CgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIyA0OSAiL29wdC9jcm9zc2Rldi9taXBzZWwt
bGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3Jlc291cmNlLmgiCgoKCgojIDU2ICIvb3B0L2Ny
b3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9yZXNvdXJjZS5oIiAy
CgoKCiMgNzMgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xp
bnV4L3NjaGVkLmgiIDIKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4
L2luY2x1ZGUvbGludXgvdGltZXIuaCIgMQoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVj
dCB0aW1lcl9zdHJ1Y3QgewoJdW5zaWduZWQgbG9uZyBleHBpcmVzOwoJdm9pZCAoKmZuKSh2b2lk
KTsKfTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIHRpbWVyX2FjdGl2ZTsKZXh0ZXJuIHN0cnVjdCB0
aW1lcl9zdHJ1Y3QgdGltZXJfdGFibGVbMzJdOwoKIAojIDQ3ICIvb3B0L2Nyb3NzZGV2L21pcHNl
bC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC90aW1lci5oIgpzdHJ1Y3QgdGltZXJfbGlz
dCB7CglzdHJ1Y3QgdGltZXJfbGlzdCAqbmV4dDsgIAoJc3RydWN0IHRpbWVyX2xpc3QgKnByZXY7
Cgl1bnNpZ25lZCBsb25nIGV4cGlyZXM7Cgl1bnNpZ25lZCBsb25nIGRhdGE7Cgl2b2lkICgqZnVu
Y3Rpb24pKHVuc2lnbmVkIGxvbmcpOwoJdm9sYXRpbGUgaW50IHJ1bm5pbmc7Cn07CgpleHRlcm4g
dm9pZCBhZGRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKiB0aW1lcik7CmV4dGVybiBpbnQgIGRl
bF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVyKTsKCiAKCgoKCmludCBtb2RfdGltZXIo
c3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpOwoKZXh0ZXJu
IHZvaWQgaXRfcmVhbF9mbih1bnNpZ25lZCBsb25nKTsKCmV4dGVybiBpbmxpbmUgdm9pZCBpbml0
X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIpCnsKCXRpbWVyLT5uZXh0ID0gKCh2b2lk
ICopMCk7Cgl0aW1lci0+cHJldiA9ICgodm9pZCAqKTApOwoKCgp9CgpleHRlcm4gaW5saW5lIGlu
dCB0aW1lcl9wZW5kaW5nKGNvbnN0IHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIpCnsKCXJldHVy
biB0aW1lci0+cHJldiAhPSAoKHZvaWQgKikwKTsKfQoKCgoKCgoKCgoKCgoKCgogCiMgMTA3ICIv
b3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC90aW1lci5o
IgoKCgoKCgoKIyA3NCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1
ZGUvbGludXgvc2NoZWQuaCIgMgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgogCgoKCgoKc3RydWN0IHNjaGVkX3BhcmFtIHsKCWludCBzY2hlZF9wcmlvcml0eTsKfTsKCgoK
CgogCgoKCgoKZXh0ZXJuIHJ3bG9ja190IHRhc2tsaXN0X2xvY2s7CmV4dGVybiBzcGlubG9ja190
IHJ1bnF1ZXVlX2xvY2s7CgpleHRlcm4gdm9pZCBzY2hlZF9pbml0KHZvaWQpOwpleHRlcm4gdm9p
ZCBpbml0X2lkbGUodm9pZCk7CmV4dGVybiB2b2lkIHNob3dfc3RhdGUodm9pZCk7CmV4dGVybiB2
b2lkIGNwdV9pbml0ICh2b2lkKTsKZXh0ZXJuIHZvaWQgdHJhcF9pbml0KHZvaWQpOwpleHRlcm4g
dm9pZCB1cGRhdGVfb25lX3Byb2Nlc3MoIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKCXVuc2lnbmVk
IGxvbmcgdGlja3MsIHVuc2lnbmVkIGxvbmcgdXNlciwgdW5zaWduZWQgbG9uZyBzeXN0ZW0sIGlu
dCBjcHUpOwoKCmV4dGVybiBzaWduZWQgbG9uZyBzY2hlZHVsZV90aW1lb3V0KHNpZ25lZCBsb25n
IHRpbWVvdXQpOwogIHZvaWQgc2NoZWR1bGUodm9pZCk7CgogCgoKCgoKIAoKCnN0cnVjdCBmaWxl
c19zdHJ1Y3QgewoJYXRvbWljX3QgY291bnQ7Cglyd2xvY2tfdCBmaWxlX2xvY2s7CglpbnQgbWF4
X2ZkczsKCWludCBtYXhfZmRzZXQ7CglpbnQgbmV4dF9mZDsKCXN0cnVjdCBmaWxlICoqIGZkOwkg
CglmZF9zZXQgKmNsb3NlX29uX2V4ZWM7CglmZF9zZXQgKm9wZW5fZmRzOwoJZmRfc2V0IGNsb3Nl
X29uX2V4ZWNfaW5pdDsKCWZkX3NldCBvcGVuX2Zkc19pbml0OwoJc3RydWN0IGZpbGUgKiBmZF9h
cnJheVszMl07Cn07CgoKIyAxODMgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51
eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCgpzdHJ1Y3QgZnNfc3RydWN0IHsKCWF0b21pY190IGNv
dW50OwoJaW50IHVtYXNrOwoJc3RydWN0IGRlbnRyeSAqIHJvb3QsICogcHdkOwp9OwoKCgoKCgoK
IAoKCiAKCgpzdHJ1Y3QgbW1fc3RydWN0IHsKCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIG1tYXA7
CQkgCglzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBtbWFwX2F2bDsJIAoJc3RydWN0IHZtX2FyZWFf
c3RydWN0ICogbW1hcF9jYWNoZTsJIAoJcGdkX3QgKiBwZ2Q7CglhdG9taWNfdCBtbV91c2VyczsJ
CQkgCglhdG9taWNfdCBtbV9jb3VudDsJCQkgCglpbnQgbWFwX2NvdW50OwkJCQkgCglzdHJ1Y3Qg
c2VtYXBob3JlIG1tYXBfc2VtOwoJc3BpbmxvY2tfdCBwYWdlX3RhYmxlX2xvY2s7Cgl1bnNpZ25l
ZCBsb25nIGNvbnRleHQ7Cgl1bnNpZ25lZCBsb25nIHN0YXJ0X2NvZGUsIGVuZF9jb2RlLCBzdGFy
dF9kYXRhLCBlbmRfZGF0YTsKCXVuc2lnbmVkIGxvbmcgc3RhcnRfYnJrLCBicmssIHN0YXJ0X3N0
YWNrOwoJdW5zaWduZWQgbG9uZyBhcmdfc3RhcnQsIGFyZ19lbmQsIGVudl9zdGFydCwgZW52X2Vu
ZDsKCXVuc2lnbmVkIGxvbmcgcnNzLCB0b3RhbF92bSwgbG9ja2VkX3ZtOwoJdW5zaWduZWQgbG9u
ZyBkZWZfZmxhZ3M7Cgl1bnNpZ25lZCBsb25nIGNwdV92bV9tYXNrOwoJdW5zaWduZWQgbG9uZyBz
d2FwX2NudDsJIAoJdW5zaWduZWQgbG9uZyBzd2FwX2FkZHJlc3M7CgkgCgoKCgl2b2lkICogc2Vn
bWVudHM7Cn07CgoKIyAyNDAgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9p
bmNsdWRlL2xpbnV4L3NjaGVkLmgiCgpzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCB7CglhdG9taWNfdAkJ
Y291bnQ7CglzdHJ1Y3Qga19zaWdhY3Rpb24JYWN0aW9uWzEyOF07CglzcGlubG9ja190CQlzaWds
b2NrOwp9OwoKCgoKCgoKIAoKCgoKc3RydWN0IHVzZXJfc3RydWN0OwoKc3RydWN0IHRhc2tfc3Ry
dWN0IHsKIAoJdm9sYXRpbGUgbG9uZyBzdGF0ZTsJIAoJdW5zaWduZWQgbG9uZyBmbGFnczsJIAoJ
aW50IHNpZ3BlbmRpbmc7CgltbV9zZWdtZW50X3QgYWRkcl9saW1pdDsJIAoKCgoJc3RydWN0IGV4
ZWNfZG9tYWluICpleGVjX2RvbWFpbjsKCXZvbGF0aWxlIGxvbmcgbmVlZF9yZXNjaGVkOwoKCWN5
Y2xlc190IGF2Z19zbGljZTsKCWludCBsb2NrX2RlcHRoOwkJIAkKIAoJbG9uZyBjb3VudGVyOwoJ
bG9uZyBwcmlvcml0eTsKCXVuc2lnbmVkIGxvbmcgcG9saWN5OwogCglzdHJ1Y3QgbW1fc3RydWN0
ICptbSwgKmFjdGl2ZV9tbTsKCWludCBoYXNfY3B1OwoJaW50IHByb2Nlc3NvcjsKCXN0cnVjdCBs
aXN0X2hlYWQgcnVuX2xpc3Q7CglzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHRfdGFzaywgKnByZXZf
dGFzazsKCWludCBsYXN0X3Byb2Nlc3NvcjsKCiAKCXN0cnVjdCBsaW51eF9iaW5mbXQgKmJpbmZt
dDsKCWludCBleGl0X2NvZGUsIGV4aXRfc2lnbmFsOwoJaW50IHBkZWF0aF9zaWduYWw7ICAgCgkg
Cgl1bnNpZ25lZCBsb25nIHBlcnNvbmFsaXR5OwoJaW50IGR1bXBhYmxlOjE7CglpbnQgZGlkX2V4
ZWM6MTsKCXBpZF90IHBpZDsKCXBpZF90IHBncnA7CglwaWRfdCB0dHlfb2xkX3BncnA7CglwaWRf
dCBzZXNzaW9uOwoJIAoJaW50IGxlYWRlcjsKCSAKCgoKCglzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBf
b3BwdHIsICpwX3BwdHIsICpwX2NwdHIsICpwX3lzcHRyLCAqcF9vc3B0cjsKCgkgCglzdHJ1Y3Qg
dGFza19zdHJ1Y3QgKnBpZGhhc2hfbmV4dDsKCXN0cnVjdCB0YXNrX3N0cnVjdCAqKnBpZGhhc2hf
cHByZXY7CgoJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9jaGxkZXhpdDsJIAoJc3RydWN0IHNlbWFw
aG9yZSAqdmZvcmtfc2VtOwkJIAoJdW5zaWduZWQgbG9uZyBydF9wcmlvcml0eTsKCXVuc2lnbmVk
IGxvbmcgaXRfcmVhbF92YWx1ZSwgaXRfcHJvZl92YWx1ZSwgaXRfdmlydF92YWx1ZTsKCXVuc2ln
bmVkIGxvbmcgaXRfcmVhbF9pbmNyLCBpdF9wcm9mX2luY3IsIGl0X3ZpcnRfaW5jcjsKCXN0cnVj
dCB0aW1lcl9saXN0IHJlYWxfdGltZXI7CglzdHJ1Y3QgdG1zIHRpbWVzOwoJdW5zaWduZWQgbG9u
ZyBzdGFydF90aW1lOwoJbG9uZyBwZXJfY3B1X3V0aW1lWzFdLCBwZXJfY3B1X3N0aW1lWzFdOwog
Cgl1bnNpZ25lZCBsb25nIG1pbl9mbHQsIG1hal9mbHQsIG5zd2FwLCBjbWluX2ZsdCwgY21hal9m
bHQsIGNuc3dhcDsKCWludCBzd2FwcGFibGU6MTsKIAoJdWlkX3QgdWlkLGV1aWQsc3VpZCxmc3Vp
ZDsKCWdpZF90IGdpZCxlZ2lkLHNnaWQsZnNnaWQ7CglpbnQgbmdyb3VwczsKCWdpZF90CWdyb3Vw
c1szMl07CglrZXJuZWxfY2FwX3QgICBjYXBfZWZmZWN0aXZlLCBjYXBfaW5oZXJpdGFibGUsIGNh
cF9wZXJtaXR0ZWQ7CglpbnQga2VlcF9jYXBhYmlsaXRpZXM6MTsKCXN0cnVjdCB1c2VyX3N0cnVj
dCAqdXNlcjsKIAoJc3RydWN0IHJsaW1pdCBybGltWzEwXTsKCXVuc2lnbmVkIHNob3J0IHVzZWRf
bWF0aDsKCWNoYXIgY29tbVsxNl07CiAKCWludCBsaW5rX2NvdW50OwoJc3RydWN0IHR0eV9zdHJ1
Y3QgKnR0eTsgIAogCglzdHJ1Y3Qgc2VtX3VuZG8gKnNlbXVuZG87CglzdHJ1Y3Qgc2VtX3F1ZXVl
ICpzZW1zbGVlcGluZzsKIAoJc3RydWN0IHRocmVhZF9zdHJ1Y3QgdGhyZWFkOwogCglzdHJ1Y3Qg
ZnNfc3RydWN0ICpmczsKIAoJc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXM7CiAKCXNwaW5sb2Nr
X3Qgc2lnbWFza19sb2NrOwkgCglzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOwoJc2lnc2V0X3Qg
c2lnbmFsLCBibG9ja2VkOwoJc3RydWN0IHNpZ25hbF9xdWV1ZSAqc2lncXVldWUsICoqc2lncXVl
dWVfdGFpbDsKCXVuc2lnbmVkIGxvbmcgc2FzX3NzX3NwOwoJc2l6ZV90IHNhc19zc19zaXplOwoJ
CiAKICAgCXUzMiBwYXJlbnRfZXhlY19pZDsKICAgCXUzMiBzZWxmX2V4ZWNfaWQ7CiAKCXN0cnVj
dCBzZW1hcGhvcmUgZXhpdF9zZW07Cn07CgogCgoKCgkJCQkJIAoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCiAKCgoKCiMgNDMyICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5j
bHVkZS9saW51eC9zY2hlZC5oIgoKCgoKCgp1bmlvbiB0YXNrX3VuaW9uIHsKCXN0cnVjdCB0YXNr
X3N0cnVjdCB0YXNrOwoJdW5zaWduZWQgbG9uZyBzdGFja1syMDQ4KnNpemVvZihsb25nKS9zaXpl
b2YobG9uZyldOwp9OwoKZXh0ZXJuIHVuaW9uIHRhc2tfdW5pb24gaW5pdF90YXNrX3VuaW9uOwoK
ZXh0ZXJuIHN0cnVjdCAgIG1tX3N0cnVjdCBpbml0X21tOwpleHRlcm4gc3RydWN0IHRhc2tfc3Ry
dWN0ICppbml0X3Rhc2tzWzFdOwoKIAoKZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlkaGFz
aFsoNDA5NiA+PiAyKV07CgoKCmV4dGVybiBfX2lubGluZV9fIHZvaWQgaGFzaF9waWQoc3RydWN0
IHRhc2tfc3RydWN0ICpwKQp7CglzdHJ1Y3QgdGFza19zdHJ1Y3QgKipodGFibGUgPSAmcGlkaGFz
aFsoKCgocC0+cGlkKSA+PiA4KSBeIChwLT5waWQpKSAmICgoNDA5NiA+PiAyKSAtIDEpKV07CgoJ
aWYoKHAtPnBpZGhhc2hfbmV4dCA9ICpodGFibGUpICE9ICgodm9pZCAqKTApKQoJCSgqaHRhYmxl
KS0+cGlkaGFzaF9wcHJldiA9ICZwLT5waWRoYXNoX25leHQ7CgkqaHRhYmxlID0gcDsKCXAtPnBp
ZGhhc2hfcHByZXYgPSBodGFibGU7Cn0KCmV4dGVybiBfX2lubGluZV9fIHZvaWQgdW5oYXNoX3Bp
ZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCnsKCWlmKHAtPnBpZGhhc2hfbmV4dCkKCQlwLT5waWRo
YXNoX25leHQtPnBpZGhhc2hfcHByZXYgPSBwLT5waWRoYXNoX3BwcmV2OwoJKnAtPnBpZGhhc2hf
cHByZXYgPSBwLT5waWRoYXNoX25leHQ7Cn0KCmV4dGVybiBfX2lubGluZV9fIHN0cnVjdCB0YXNr
X3N0cnVjdCAqZmluZF90YXNrX2J5X3BpZChpbnQgcGlkKQp7CglzdHJ1Y3QgdGFza19zdHJ1Y3Qg
KnAsICoqaHRhYmxlID0gJnBpZGhhc2hbKCgoKHBpZCkgPj4gOCkgXiAocGlkKSkgJiAoKDQwOTYg
Pj4gMikgLSAxKSldOwoKCWZvcihwID0gKmh0YWJsZTsgcCAmJiBwLT5waWQgIT0gcGlkOyBwID0g
cC0+cGlkaGFzaF9uZXh0KQoJCTsKCglyZXR1cm4gcDsKfQoKIApleHRlcm4gaW50IGFsbG9jX3Vp
ZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CnZvaWQgZnJlZV91aWQoc3RydWN0IHRhc2tfc3RydWN0
ICopOwoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9h
c20vY3VycmVudC5oIiAxCiAKIyAxMCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xp
bnV4L2luY2x1ZGUvYXNtL2N1cnJlbnQuaCIKCgoKCgogCnJlZ2lzdGVyIHN0cnVjdCB0YXNrX3N0
cnVjdCAqY3VycmVudCBhc20oIiQyOCIpOwoKCgojIDM1ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1s
aW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vY3VycmVudC5oIgoKCiMgNDg1ICIvb3B0L2Nyb3Nz
ZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgoKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgamlmZmllczsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcg
aXRpbWVyX3RpY2tzOwpleHRlcm4gdW5zaWduZWQgbG9uZyBpdGltZXJfbmV4dDsKZXh0ZXJuIHN0
cnVjdCB0aW1ldmFsIHh0aW1lOwpleHRlcm4gdm9pZCBkb190aW1lcihzdHJ1Y3QgcHRfcmVncyAq
KTsKCmV4dGVybiB1bnNpZ25lZCBpbnQgKiBwcm9mX2J1ZmZlcjsKZXh0ZXJuIHVuc2lnbmVkIGxv
bmcgcHJvZl9sZW47CmV4dGVybiB1bnNpZ25lZCBsb25nIHByb2Zfc2hpZnQ7CgoKCmV4dGVybiB2
b2lkIF9fd2FrZV91cCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUpOwpl
eHRlcm4gdm9pZCBfX3dha2VfdXBfc3luYyh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQg
aW50IG1vZGUpOwpleHRlcm4gdm9pZCBzbGVlcF9vbih3YWl0X3F1ZXVlX2hlYWRfdCAqcSk7CmV4
dGVybiBsb25nIHNsZWVwX29uX3RpbWVvdXQod2FpdF9xdWV1ZV9oZWFkX3QgKnEsCgkJCQkgICAg
ICBzaWduZWQgbG9uZyB0aW1lb3V0KTsKZXh0ZXJuIHZvaWQgaW50ZXJydXB0aWJsZV9zbGVlcF9v
bih3YWl0X3F1ZXVlX2hlYWRfdCAqcSk7CmV4dGVybiBsb25nIGludGVycnVwdGlibGVfc2xlZXBf
b25fdGltZW91dCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwKCQkJCQkJICAgIHNpZ25lZCBsb25nIHRp
bWVvdXQpOwpleHRlcm4gdm9pZCB3YWtlX3VwX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICog
dHNrKTsKCgoKCgoKCgpleHRlcm4gaW50IGluX2dyb3VwX3AoZ2lkX3QpOwpleHRlcm4gaW50IGlu
X2Vncm91cF9wKGdpZF90KTsKCmV4dGVybiB2b2lkIGZsdXNoX3NpZ25hbHMoc3RydWN0IHRhc2tf
c3RydWN0ICopOwpleHRlcm4gdm9pZCBmbHVzaF9zaWduYWxfaGFuZGxlcnMoc3RydWN0IHRhc2tf
c3RydWN0ICopOwpleHRlcm4gaW50IGRlcXVldWVfc2lnbmFsKHNpZ3NldF90ICosIHNpZ2luZm9f
dCAqKTsKZXh0ZXJuIGludCBzZW5kX3NpZ19pbmZvKGludCwgc3RydWN0IHNpZ2luZm8gKiwgc3Ry
dWN0IHRhc2tfc3RydWN0ICopOwpleHRlcm4gaW50IGZvcmNlX3NpZ19pbmZvKGludCwgc3RydWN0
IHNpZ2luZm8gKiwgc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRlcm4gaW50IGtpbGxfcGdfaW5m
byhpbnQsIHN0cnVjdCBzaWdpbmZvICosIHBpZF90KTsKZXh0ZXJuIGludCBraWxsX3NsX2luZm8o
aW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCBwaWRfdCk7CmV4dGVybiBpbnQga2lsbF9wcm9jX2luZm8o
aW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCBwaWRfdCk7CmV4dGVybiBpbnQga2lsbF9zb21ldGhpbmdf
aW5mbyhpbnQsIHN0cnVjdCBzaWdpbmZvICosIGludCk7CmV4dGVybiB2b2lkIG5vdGlmeV9wYXJl
bnQoc3RydWN0IHRhc2tfc3RydWN0ICosIGludCk7CmV4dGVybiB2b2lkIGZvcmNlX3NpZyhpbnQs
IHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZXh0ZXJuIGludCBzZW5kX3NpZyhpbnQsIHN0cnVjdCB0
YXNrX3N0cnVjdCAqLCBpbnQpOwpleHRlcm4gaW50IGtpbGxfcGcocGlkX3QsIGludCwgaW50KTsK
ZXh0ZXJuIGludCBraWxsX3NsKHBpZF90LCBpbnQsIGludCk7CmV4dGVybiBpbnQga2lsbF9wcm9j
KHBpZF90LCBpbnQsIGludCk7CmV4dGVybiBpbnQgZG9fc2lnYWN0aW9uKGludCwgY29uc3Qgc3Ry
dWN0IGtfc2lnYWN0aW9uICosIHN0cnVjdCBrX3NpZ2FjdGlvbiAqKTsKZXh0ZXJuIGludCBkb19z
aWdhbHRzdGFjayhjb25zdCBzdGFja190ICosIHN0YWNrX3QgKiwgdW5zaWduZWQgbG9uZyk7Cgpl
eHRlcm4gaW5saW5lIGludCBzaWduYWxfcGVuZGluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCnsK
CXJldHVybiAocC0+c2lncGVuZGluZyAhPSAwKTsKfQoKIAoKCgpzdGF0aWMgaW5saW5lIHZvaWQg
cmVjYWxjX3NpZ3BlbmRpbmcoc3RydWN0IHRhc2tfc3RydWN0ICp0KQp7Cgl1bnNpZ25lZCBsb25n
IHJlYWR5OwoJbG9uZyBpOwoKCXN3aXRjaCAoKDEyOCAvIDMyKSkgewoJZGVmYXVsdDoKCQlmb3Ig
KGkgPSAoMTI4IC8gMzIpLCByZWFkeSA9IDA7IC0taSA+PSAwIDspCgkJCXJlYWR5IHw9IHQtPnNp
Z25hbC5zaWdbaV0gJn4gdC0+YmxvY2tlZC5zaWdbaV07CgkJYnJlYWs7CgoJY2FzZSA0OiByZWFk
eSAgPSB0LT5zaWduYWwuc2lnWzNdICZ+IHQtPmJsb2NrZWQuc2lnWzNdOwoJCXJlYWR5IHw9IHQt
PnNpZ25hbC5zaWdbMl0gJn4gdC0+YmxvY2tlZC5zaWdbMl07CgkJcmVhZHkgfD0gdC0+c2lnbmFs
LnNpZ1sxXSAmfiB0LT5ibG9ja2VkLnNpZ1sxXTsKCQlyZWFkeSB8PSB0LT5zaWduYWwuc2lnWzBd
ICZ+IHQtPmJsb2NrZWQuc2lnWzBdOwoJCWJyZWFrOwoKCWNhc2UgMjogcmVhZHkgID0gdC0+c2ln
bmFsLnNpZ1sxXSAmfiB0LT5ibG9ja2VkLnNpZ1sxXTsKCQlyZWFkeSB8PSB0LT5zaWduYWwuc2ln
WzBdICZ+IHQtPmJsb2NrZWQuc2lnWzBdOwoJCWJyZWFrOwoKCWNhc2UgMTogcmVhZHkgID0gdC0+
c2lnbmFsLnNpZ1swXSAmfiB0LT5ibG9ja2VkLnNpZ1swXTsKCX0KCgl0LT5zaWdwZW5kaW5nID0g
KHJlYWR5ICE9IDApOwp9CgogCgpzdGF0aWMgaW5saW5lIGludCBvbl9zaWdfc3RhY2sodW5zaWdu
ZWQgbG9uZyBzcCkKewoJcmV0dXJuIChzcCAtIGN1cnJlbnQtPnNhc19zc19zcCA8IGN1cnJlbnQt
PnNhc19zc19zaXplKTsKfQoKc3RhdGljIGlubGluZSBpbnQgc2FzX3NzX2ZsYWdzKHVuc2lnbmVk
IGxvbmcgc3ApCnsKCXJldHVybiAoY3VycmVudC0+c2FzX3NzX3NpemUgPT0gMCA/IDIKCQk6IG9u
X3NpZ19zdGFjayhzcCkgPyAxIDogMCk7Cn0KCmV4dGVybiBpbnQgcmVxdWVzdF9pcnEodW5zaWdu
ZWQgaW50LAoJCSAgICAgICB2b2lkICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9y
ZWdzICopLAoJCSAgICAgICB1bnNpZ25lZCBsb25nLCBjb25zdCBjaGFyICosIHZvaWQgKik7CmV4
dGVybiB2b2lkIGZyZWVfaXJxKHVuc2lnbmVkIGludCwgdm9pZCAqKTsKCiAKIyA2MDUgIi9vcHQv
Y3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCmV4
dGVybiBpbmxpbmUgaW50IHN1c2VyKHZvaWQpCnsKCWlmICghKCAoMSA8PCAoMCsxKSkgJiAweDAw
MDAwMDAwID8gKDEgPDwgKDApKSAmIDB4MDAwMDAwMDAgOiAoMSA8PCAoMCkpICYgc2VjdXJlYml0
cyApICYmIGN1cnJlbnQtPmV1aWQgPT0gMCkgeyAKCQljdXJyZW50LT5mbGFncyB8PSAweDAwMDAw
MTAwOwoJCXJldHVybiAxOwoJfQoJcmV0dXJuIDA7Cn0KCmV4dGVybiBpbmxpbmUgaW50IGZzdXNl
cih2b2lkKQp7CglpZiAoISggKDEgPDwgKDArMSkpICYgMHgwMDAwMDAwMCA/ICgxIDw8ICgwKSkg
JiAweDAwMDAwMDAwIDogKDEgPDwgKDApKSAmIHNlY3VyZWJpdHMgKSAmJiBjdXJyZW50LT5mc3Vp
ZCA9PSAwKSB7CgkJY3VycmVudC0+ZmxhZ3MgfD0gMHgwMDAwMDEwMDsKCQlyZXR1cm4gMTsKCX0K
CXJldHVybiAwOwp9CgogCgoKCgoKZXh0ZXJuIGlubGluZSBpbnQgY2FwYWJsZShpbnQgY2FwKQp7
CgoJaWYgKCgoY3VycmVudC0+Y2FwX2VmZmVjdGl2ZSkgJiAoMSA8PCAoIGNhcCkpICYgY2FwX2Jz
ZXQpKQoKCgoJewoJCWN1cnJlbnQtPmZsYWdzIHw9IDB4MDAwMDAxMDA7CgkJcmV0dXJuIDE7Cgl9
CglyZXR1cm4gMDsKfQoKIAoKCmV4dGVybiBzdHJ1Y3QgbW1fc3RydWN0ICogbW1fYWxsb2Modm9p
ZCk7CgpleHRlcm4gc3RydWN0IG1tX3N0cnVjdCAqIHN0YXJ0X2xhenlfdGxiKHZvaWQpOwpleHRl
cm4gdm9pZCBlbmRfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwoKIApleHRlcm4gaW5s
aW5lIHZvaWQgX19tbWRyb3Aoc3RydWN0IG1tX3N0cnVjdCAqKTsKc3RhdGljIGlubGluZSB2b2lk
IG1tZHJvcChzdHJ1Y3QgbW1fc3RydWN0ICogbW0pCnsKCWlmICgoYXRvbWljX3N1Yl9yZXR1cm4o
MSwgKCZtbS0+bW1fY291bnQpKSA9PSAwKSkKCQlfX21tZHJvcChtbSk7Cn0KCiAKZXh0ZXJuIHZv
aWQgbW1wdXQoc3RydWN0IG1tX3N0cnVjdCAqKTsKIApleHRlcm4gdm9pZCBtbV9yZWxlYXNlKHZv
aWQpOwoKIAoKCmV4dGVybiBzdHJ1Y3QgZmlsZSAqKiBhbGxvY19mZF9hcnJheShpbnQpOwpleHRl
cm4gaW50IGV4cGFuZF9mZF9hcnJheShzdHJ1Y3QgZmlsZXNfc3RydWN0ICosIGludCBucik7CmV4
dGVybiB2b2lkIGZyZWVfZmRfYXJyYXkoc3RydWN0IGZpbGUgKiosIGludCk7CgpleHRlcm4gZmRf
c2V0ICphbGxvY19mZHNldChpbnQpOwpleHRlcm4gaW50IGV4cGFuZF9mZHNldChzdHJ1Y3QgZmls
ZXNfc3RydWN0ICosIGludCBucik7CmV4dGVybiB2b2lkIGZyZWVfZmRzZXQoZmRfc2V0ICosIGlu
dCk7CgogCgoKCgpzdGF0aWMgaW5saW5lIGludCBleHBhbmRfZmlsZXMoc3RydWN0IGZpbGVzX3N0
cnVjdCAqZmlsZXMsIGludCBucikKewoJaW50IGVyciwgZXhwYW5kID0gMDsKCgoKCQoJaWYgKG5y
ID49IGZpbGVzLT5tYXhfZmRzZXQpIHsKCQlleHBhbmQgPSAxOwoJCWlmICgoZXJyID0gZXhwYW5k
X2Zkc2V0KGZpbGVzLCBucikpKQoJCQlnb3RvIG91dDsKCX0KCWlmIChuciA+PSBmaWxlcy0+bWF4
X2ZkcykgewoJCWV4cGFuZCA9IDE7CgkJaWYgKChlcnIgPSBleHBhbmRfZmRfYXJyYXkoZmlsZXMs
IG5yKSkpCgkJCWdvdG8gb3V0OwoJfQoJZXJyID0gZXhwYW5kOwogb3V0OgoKCgoKCXJldHVybiBl
cnI7Cn0KCmV4dGVybiBpbnQgIGNvcHlfdGhyZWFkKGludCwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBwdF9yZWdzICopOwpleHRlcm4g
dm9pZCBmbHVzaF90aHJlYWQodm9pZCk7CmV4dGVybiB2b2lkIGV4aXRfdGhyZWFkKHZvaWQpOwoK
ZXh0ZXJuIHZvaWQgZXhpdF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmV4dGVybiB2b2lkIGV4
aXRfZnMoc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRlcm4gdm9pZCBleGl0X2ZpbGVzKHN0cnVj
dCB0YXNrX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgZXhpdF9zaWdoYW5kKHN0cnVjdCB0YXNrX3N0
cnVjdCAqKTsKCmV4dGVybiB2b2lkIGRhZW1vbml6ZSh2b2lkKTsKCmV4dGVybiBpbnQgZG9fZXhl
Y3ZlKGNoYXIgKiwgY2hhciAqKiwgY2hhciAqKiwgc3RydWN0IHB0X3JlZ3MgKik7CmV4dGVybiBp
bnQgZG9fZm9yayh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgcHRfcmVncyAq
KTsKCmV4dGVybiBpbmxpbmUgdm9pZCBhZGRfd2FpdF9xdWV1ZSh3YWl0X3F1ZXVlX2hlYWRfdCAq
cSwgd2FpdF9xdWV1ZV90ICogd2FpdCkKewoJdW5zaWduZWQgbG9uZyBmbGFnczsKCglkbyB7IF9f
YXNtX18gX192b2xhdGlsZV9fKCAiLnNldFx0cHVzaFxuXHQiICIuc2V0XHRyZW9yZGVyXG5cdCIg
Ii5zZXRcdG5vYXRcblx0IiAibWZjMFx0JTAsJDEyXG5cdCIgIm9yaVx0JDEsJTAsMVxuXHQiICJ4
b3JpXHQkMSwxXG5cdCIgIi5zZXRcdG5vcmVvcmRlclxuXHQiICJtdGMwXHQkMSwkMTJcblx0IiAi
bm9wXG5cdCIgIm5vcFxuXHQiICJub3Bcblx0IiAiLnNldFx0cG9wXG5cdCIgOiAiPXIiICggZmxh
Z3MpIDogOiAiJDEiLCAibWVtb3J5Iik7OyAodm9pZCkoJnEtPmxvY2spOyB9IHdoaWxlICgwKTsK
CV9fYWRkX3dhaXRfcXVldWUocSwgd2FpdCk7CglkbyB7IGRvIHsgfSB3aGlsZSgwKTsgX19yZXN0
b3JlX2ZsYWdzKCBmbGFncyk7OyB9IHdoaWxlICgwKTsKfQoKZXh0ZXJuIGlubGluZSB2b2lkIGFk
ZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwKCQkJCQkJCXdhaXRf
cXVldWVfdCAqIHdhaXQpCnsKCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CgoJZG8geyBfX2FzbV9fIF9f
dm9sYXRpbGVfXyggIi5zZXRcdHB1c2hcblx0IiAiLnNldFx0cmVvcmRlclxuXHQiICIuc2V0XHRu
b2F0XG5cdCIgIm1mYzBcdCUwLCQxMlxuXHQiICJvcmlcdCQxLCUwLDFcblx0IiAieG9yaVx0JDEs
MVxuXHQiICIuc2V0XHRub3Jlb3JkZXJcblx0IiAibXRjMFx0JDEsJDEyXG5cdCIgIm5vcFxuXHQi
ICJub3Bcblx0IiAibm9wXG5cdCIgIi5zZXRcdHBvcFxuXHQiIDogIj1yIiAoIGZsYWdzKSA6IDog
IiQxIiwgIm1lbW9yeSIpOzsgKHZvaWQpKCZxLT5sb2NrKTsgfSB3aGlsZSAoMCk7CglfX2FkZF93
YWl0X3F1ZXVlX3RhaWwocSwgd2FpdCk7CglkbyB7IGRvIHsgfSB3aGlsZSgwKTsgX19yZXN0b3Jl
X2ZsYWdzKCBmbGFncyk7OyB9IHdoaWxlICgwKTsKfQoKZXh0ZXJuIGlubGluZSB2b2lkIHJlbW92
ZV93YWl0X3F1ZXVlKHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKiB3YWl0KQp7
Cgl1bnNpZ25lZCBsb25nIGZsYWdzOwoKCWRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIuc2V0
XHRwdXNoXG5cdCIgIi5zZXRcdHJlb3JkZXJcblx0IiAiLnNldFx0bm9hdFxuXHQiICJtZmMwXHQl
MCwkMTJcblx0IiAib3JpXHQkMSwlMCwxXG5cdCIgInhvcmlcdCQxLDFcblx0IiAiLnNldFx0bm9y
ZW9yZGVyXG5cdCIgIm10YzBcdCQxLCQxMlxuXHQiICJub3Bcblx0IiAibm9wXG5cdCIgIm5vcFxu
XHQiICIuc2V0XHRwb3Bcblx0IiA6ICI9ciIgKCBmbGFncykgOiA6ICIkMSIsICJtZW1vcnkiKTs7
ICh2b2lkKSgmcS0+bG9jayk7IH0gd2hpbGUgKDApOwoJX19yZW1vdmVfd2FpdF9xdWV1ZShxLCB3
YWl0KTsKCWRvIHsgZG8geyB9IHdoaWxlKDApOyBfX3Jlc3RvcmVfZmxhZ3MoIGZsYWdzKTs7IH0g
d2hpbGUgKDApOwp9CgoKIyA3NjMgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51
eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCgoKCgoKCgoKCiMgNzkxICIvb3B0L2Nyb3NzZGV2L21p
cHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIgoJCgoKCgoKCgoKCiMg
ODEwICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9z
Y2hlZC5oIgoKCiMgODIxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5j
bHVkZS9saW51eC9zY2hlZC5oIgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBkZWxfZnJvbV9ydW5x
dWV1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwKQp7Cglucl9ydW5uaW5nLS07CglsaXN0X2RlbCgm
cC0+cnVuX2xpc3QpOwoJcC0+cnVuX2xpc3QubmV4dCA9ICgodm9pZCAqKTApOwp9CgpleHRlcm4g
aW5saW5lIGludCB0YXNrX29uX3J1bnF1ZXVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKewoJcmV0
dXJuIChwLT5ydW5fbGlzdC5uZXh0ICE9ICgodm9pZCAqKTApKTsKfQoKZXh0ZXJuIGlubGluZSB2
b2lkIHVuaGFzaF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKewoJaWYgKHRhc2tfb25f
cnVucXVldWUocCkpIGRvIHsgcHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgIi9vcHQv
Y3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiLCA4
NDApOyAqKGludCAqKTA9MDsgfSB3aGlsZSAoMCk7CglkbyB7IF9fY2xpKCk7OyAodm9pZCkoJnRh
c2tsaXN0X2xvY2spOyB9IHdoaWxlICgwKTsKCW5yX3RocmVhZHMtLTsKCXVuaGFzaF9waWQocCk7
CglkbyB7IChwKS0+bmV4dF90YXNrLT5wcmV2X3Rhc2sgPSAocCktPnByZXZfdGFzazsgKHApLT5w
cmV2X3Rhc2stPm5leHRfdGFzayA9IChwKS0+bmV4dF90YXNrOyBpZiAoKHApLT5wX29zcHRyKSAo
cCktPnBfb3NwdHItPnBfeXNwdHIgPSAocCktPnBfeXNwdHI7IGlmICgocCktPnBfeXNwdHIpIChw
KS0+cF95c3B0ci0+cF9vc3B0ciA9IChwKS0+cF9vc3B0cjsgZWxzZSAocCktPnBfcHB0ci0+cF9j
cHRyID0gKHApLT5wX29zcHRyOyB9IHdoaWxlICgwKTsKCWRvIHsgZG8geyB9IHdoaWxlKDApOyBf
X3N0aSgpOzsgfSB3aGlsZSAoMCk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHRhc2tfbG9jayhzdHJ1
Y3QgdGFza19zdHJ1Y3QgKnApCnsKCWRvd24oJnAtPmV4aXRfc2VtKTsKCWlmIChwLT5wX3BwdHIp
CgkJcmV0dXJuIDE7CgkgCgl1cCgmcC0+ZXhpdF9zZW0pOwoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBp
bmxpbmUgdm9pZCB0YXNrX3VubG9jayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCnsKCXVwKCZwLT5l
eGl0X3NlbSk7Cn0KCgoKCiMgNCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4
L2luY2x1ZGUvbGludXgvbW0uaCIgMgoKCgoKCgoKCiMgMSAiL29wdC9jcm9zc2Rldi9taXBzZWwt
bGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbW16b25lLmgiIDEKCgoKCgoKCgoKCiAKCgoK
Cgp0eXBlZGVmIHN0cnVjdCBmcmVlX2FyZWFfc3RydWN0IHsKCXN0cnVjdCBsaXN0X2hlYWQJZnJl
ZV9saXN0OwoJdW5zaWduZWQgaW50CQkqbWFwOwp9IGZyZWVfYXJlYV90OwoKc3RydWN0IHBnbGlz
dF9kYXRhOwoKdHlwZWRlZiBzdHJ1Y3Qgem9uZV9zdHJ1Y3QgewoJIAoKCglzcGlubG9ja190CQls
b2NrOwoJdW5zaWduZWQgbG9uZwkJb2Zmc2V0OwoJdW5zaWduZWQgbG9uZwkJZnJlZV9wYWdlczsK
CWNoYXIJCQlsb3dfb25fbWVtb3J5OwoJY2hhcgkJCXpvbmVfd2FrZV9rc3dhcGQ7Cgl1bnNpZ25l
ZCBsb25nCQlwYWdlc19taW4sIHBhZ2VzX2xvdywgcGFnZXNfaGlnaDsKCXN0cnVjdCBsaXN0X2hl
YWQJbHJ1X2NhY2hlOwoKCSAKCgoJZnJlZV9hcmVhX3QJCWZyZWVfYXJlYVsxMF07CgoJIAoKCglj
aGFyCQkJKm5hbWU7Cgl1bnNpZ25lZCBsb25nCQlzaXplOwoJIAoKCglzdHJ1Y3QgcGdsaXN0X2Rh
dGEJKnpvbmVfcGdkYXQ7Cgl1bnNpZ25lZCBsb25nCQl6b25lX3N0YXJ0X3BhZGRyOwoJdW5zaWdu
ZWQgbG9uZwkJem9uZV9zdGFydF9tYXBucjsKCXN0cnVjdCBwYWdlCQkqem9uZV9tZW1fbWFwOwp9
IHpvbmVfdDsKCgoKCgoKIAojIDcxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGlu
dXgvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIKdHlwZWRlZiBzdHJ1Y3Qgem9uZWxpc3Rfc3RydWN0
IHsKCXpvbmVfdCAqIHpvbmVzIFszKzFdOyAgCglpbnQgZ2ZwX21hc2s7Cn0gem9uZWxpc3RfdDsK
CgoKc3RydWN0IGJvb3RtZW1fZGF0YTsKdHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEgewoJem9u
ZV90IG5vZGVfem9uZXNbM107Cgl6b25lbGlzdF90IG5vZGVfem9uZWxpc3RzWzB4MTAwXTsKCXN0
cnVjdCBwYWdlICpub2RlX21lbV9tYXA7Cgl1bnNpZ25lZCBsb25nICp2YWxpZF9hZGRyX2JpdG1h
cDsKCXN0cnVjdCBib290bWVtX2RhdGEgKmJkYXRhOwoJdW5zaWduZWQgbG9uZyBub2RlX3N0YXJ0
X3BhZGRyOwoJdW5zaWduZWQgbG9uZyBub2RlX3N0YXJ0X21hcG5yOwoJdW5zaWduZWQgbG9uZyBu
b2RlX3NpemU7CglpbnQgbm9kZV9pZDsKCXN0cnVjdCBwZ2xpc3RfZGF0YSAqbm9kZV9uZXh0Owp9
IHBnX2RhdGFfdDsKCmV4dGVybiBpbnQgbnVtbm9kZXM7CmV4dGVybiBwZ19kYXRhX3QgKnBnZGF0
X2xpc3Q7CgoKCgoKIAoKCgpleHRlcm4gdm9pZCBzaG93X2ZyZWVfYXJlYXNfY29yZShpbnQpOwpl
eHRlcm4gdm9pZCBmcmVlX2FyZWFfaW5pdF9jb3JlKGludCBuaWQsIHBnX2RhdGFfdCAqcGdkYXQs
IHN0cnVjdCBwYWdlICoqZ21hcCwKCQl1bnNpZ25lZCBsb25nICp6b25lc19zaXplLCB1bnNpZ25l
ZCBsb25nIHBhZGRyKTsKCgoKZXh0ZXJuIHBnX2RhdGFfdCBjb250aWdfcGFnZV9kYXRhOwoKCgoK
CgoKCgoKCgoKCgoKIyAxMiAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2lu
Y2x1ZGUvbGludXgvbW0uaCIgMgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIG1heF9tYXBucjsKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgbnVtX3BoeXNwYWdlczsKZXh0ZXJuIHZvaWQgKiBoaWdoX21lbW9y
eTsKZXh0ZXJuIGludCBwYWdlX2NsdXN0ZXI7CgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1s
aW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vcGd0YWJsZS5oIiAxCiAKIyAxMCAiL29wdC9jcm9z
c2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3BndGFibGUuaCIKCgoKIyAx
ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vYWRkcnNw
YWNlLmgiIDEKIAojIDEwICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5j
bHVkZS9hc20vYWRkcnNwYWNlLmgiCgoKCiAKCgoKCgoKCgogCgoKCgogCgoKCgogCgoKCgoKCgog
CgoKCgoKCgoKCgoKCiMgMTMgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9p
bmNsdWRlL2FzbS9wZ3RhYmxlLmgiIDIKCgoKCgoKCgoKIAoKCgoKCgoKZXh0ZXJuIHZvaWQgKCpf
Zmx1c2hfY2FjaGVfYWxsKSh2b2lkKTsKZXh0ZXJuIHZvaWQgKCpfZmx1c2hfY2FjaGVfbW0pKHN0
cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKZXh0ZXJuIHZvaWQgKCpfZmx1c2hfY2FjaGVfcmFuZ2UpKHN0
cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAoJCQkJIHVuc2lnbmVkIGxv
bmcgZW5kKTsKZXh0ZXJuIHZvaWQgKCpfZmx1c2hfY2FjaGVfcGFnZSkoc3RydWN0IHZtX2FyZWFf
c3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgcGFnZSk7CmV4dGVybiB2b2lkICgqX2ZsdXNoX2Nh
Y2hlX3NpZ3RyYW1wKSh1bnNpZ25lZCBsb25nIGFkZHIpOwpleHRlcm4gdm9pZCAoKl9mbHVzaF9w
YWdlX3RvX3JhbSkoc3RydWN0IHBhZ2UgKiBwYWdlKTsKCgoKCgoKCgoKCgoKIAoKCmV4dGVybiB2
b2lkIGFkZF93aXJlZF9lbnRyeSh1bnNpZ25lZCBsb25nIGVudHJ5bG8wLCB1bnNpZ25lZCBsb25n
IGVudHJ5bG8xLAoJCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbnRyeWhpLCB1bnNpZ25lZCBsb25n
IHBhZ2VtYXNrKTsKCgogCgoKCgoKCgoKIAoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgogCiMgMTA4
ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vcGd0YWJs
ZS5oIgoKCgoKCgoKIyAxMjYgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9p
bmNsdWRlL2FzbS9wZ3RhYmxlLmgiCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKZXh0ZXJuIHB0ZV90
IF9fYmFkX3BhZ2Uodm9pZCk7CmV4dGVybiBwdGVfdCAqX19iYWRfcGFnZXRhYmxlKHZvaWQpOwoK
ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1wdHlfemVyb19wYWdlOwpleHRlcm4gdW5zaWduZWQgbG9u
ZyB6ZXJvX3BhZ2VfbWFzazsKCgoKCgoKIAoKCiAKCgogCgoKCgogCgoKCmV4dGVybiB2b2lkIGxv
YWRfcGdkKHVuc2lnbmVkIGxvbmcgcGdfZGlyKTsKCmV4dGVybiBwbWRfdCBpbnZhbGlkX3B0ZV90
YWJsZVsoMVVMIDw8IDEyKS9zaXplb2YocG1kX3QpXTsKCiAKCgoKZXh0ZXJuIGlubGluZSB1bnNp
Z25lZCBsb25nIHB0ZV9wYWdlKHB0ZV90IHB0ZSkKewoKCXJldHVybiAweDgwMDAwMDAwVUwgKyAo
KCgocHRlKS5wdGUpID4+IDIpICYgKH4oKDFVTCA8PCAxMiktMSkpKTsKCgoKfQoKZXh0ZXJuIGlu
bGluZSB1bnNpZ25lZCBsb25nIHBtZF9wYWdlKHBtZF90IHBtZCkKewoJcmV0dXJuICgocG1kKS5w
bWQpOwp9CgpleHRlcm4gaW5saW5lIHZvaWQgcG1kX3NldChwbWRfdCAqIHBtZHAsIHB0ZV90ICog
cHRlcCkKewoJKCgqcG1kcCkucG1kKSA9ICgoKHVuc2lnbmVkIGxvbmcpIHB0ZXApICYgKH4oKDFV
TCA8PCAxMiktMSkpKTsKfQoKZXh0ZXJuIGlubGluZSBpbnQgcHRlX25vbmUocHRlX3QgcHRlKSAg
ICB7IHJldHVybiAhKChwdGUpLnB0ZSk7IH0KZXh0ZXJuIGlubGluZSBpbnQgcHRlX3ByZXNlbnQo
cHRlX3QgcHRlKSB7IHJldHVybiAoKHB0ZSkucHRlKSAmICgxPDwwKTsgfQoKIAoKCgpleHRlcm4g
aW5saW5lIHZvaWQgc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKQp7CgkqcHRlcCA9
IHB0ZXZhbDsKfQoKZXh0ZXJuIGlubGluZSB2b2lkIHB0ZV9jbGVhcihwdGVfdCAqcHRlcCkKewoJ
c2V0X3B0ZShwdGVwLCAoKHB0ZV90KSB7ICgwKSB9ICkpOwp9CgogCgoKZXh0ZXJuIGlubGluZSBp
bnQgcG1kX25vbmUocG1kX3QgcG1kKQp7CglyZXR1cm4gKChwbWQpLnBtZCkgPT0gKHVuc2lnbmVk
IGxvbmcpIGludmFsaWRfcHRlX3RhYmxlOwp9CgpleHRlcm4gaW5saW5lIGludCBwbWRfYmFkKHBt
ZF90IHBtZCkKewoJcmV0dXJuICgocG1kX3BhZ2UocG1kKSA+ICh1bnNpZ25lZCBsb25nKSBoaWdo
X21lbW9yeSkgfHwKCSAgICAgICAgKHBtZF9wYWdlKHBtZCkgPCAweDgwMDAwMDAwVUwpKTsKfQoK
ZXh0ZXJuIGlubGluZSBpbnQgcG1kX3ByZXNlbnQocG1kX3QgcG1kKQp7CglyZXR1cm4gKChwbWQp
LnBtZCk7Cn0KCmV4dGVybiBpbmxpbmUgdm9pZCBwbWRfY2xlYXIocG1kX3QgKnBtZHApCnsKCSgo
KnBtZHApLnBtZCkgPSAoKHVuc2lnbmVkIGxvbmcpIGludmFsaWRfcHRlX3RhYmxlKTsKfQoKIAoK
CgoKZXh0ZXJuIGlubGluZSBpbnQgcGdkX25vbmUocGdkX3QgcGdkKQkJeyByZXR1cm4gMDsgfQpl
eHRlcm4gaW5saW5lIGludCBwZ2RfYmFkKHBnZF90IHBnZCkJCXsgcmV0dXJuIDA7IH0KZXh0ZXJu
IGlubGluZSBpbnQgcGdkX3ByZXNlbnQocGdkX3QgcGdkKQl7IHJldHVybiAxOyB9CmV4dGVybiBp
bmxpbmUgdm9pZCBwZ2RfY2xlYXIocGdkX3QgKnBnZHApCXsgfQoKIAoKCgoKCgoKCgoKCiAKCgoK
ZXh0ZXJuIGlubGluZSBpbnQgcHRlX3JlYWQocHRlX3QgcHRlKQl7IHJldHVybiAoKHB0ZSkucHRl
KSAmICgxPDwxKTsgfQpleHRlcm4gaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQl7IHJl
dHVybiAoKHB0ZSkucHRlKSAmICgxPDwyKTsgfQpleHRlcm4gaW5saW5lIGludCBwdGVfZGlydHko
cHRlX3QgcHRlKQl7IHJldHVybiAoKHB0ZSkucHRlKSAmICgxPDw0KTsgfQpleHRlcm4gaW5saW5l
IGludCBwdGVfeW91bmcocHRlX3QgcHRlKQl7IHJldHVybiAoKHB0ZSkucHRlKSAmICgxPDwzKTsg
fQoKZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKewoJKChwdGUp
LnB0ZSkgJj0gfigoMTw8MikgfCAoMTw8OCkpOwoJcmV0dXJuIHB0ZTsKfQoKZXh0ZXJuIGlubGlu
ZSBwdGVfdCBwdGVfcmRwcm90ZWN0KHB0ZV90IHB0ZSkKewoJKChwdGUpLnB0ZSkgJj0gfigoMTw8
MSkgfCAoMTw8NykpOwoJcmV0dXJuIHB0ZTsKfQoKZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbWtj
bGVhbihwdGVfdCBwdGUpCnsKCSgocHRlKS5wdGUpICY9IH4oKDE8PDQpfCgxPDw4KSk7CglyZXR1
cm4gcHRlOwp9CgpleHRlcm4gaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpCnsKCSgo
cHRlKS5wdGUpICY9IH4oKDE8PDMpfCgxPDw3KSk7CglyZXR1cm4gcHRlOwp9CgpleHRlcm4gaW5s
aW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkKewoJKChwdGUpLnB0ZSkgfD0gKDE8PDIp
OwoJaWYgKCgocHRlKS5wdGUpICYgKDE8PDQpKQoJCSgocHRlKS5wdGUpIHw9ICgxPDw4KTsKCXJl
dHVybiBwdGU7Cn0KCmV4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21rcmVhZChwdGVfdCBwdGUpCnsK
CSgocHRlKS5wdGUpIHw9ICgxPDwxKTsKCWlmICgoKHB0ZSkucHRlKSAmICgxPDwzKSkKCQkoKHB0
ZSkucHRlKSB8PSAoMTw8Nyk7CglyZXR1cm4gcHRlOwp9CgpleHRlcm4gaW5saW5lIHB0ZV90IHB0
ZV9ta2RpcnR5KHB0ZV90IHB0ZSkKewoJKChwdGUpLnB0ZSkgfD0gKDE8PDQpOwoJaWYgKCgocHRl
KS5wdGUpICYgKDE8PDIpKQoJCSgocHRlKS5wdGUpIHw9ICgxPDw4KTsKCXJldHVybiBwdGU7Cn0K
CmV4dGVybiBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKQp7CgkoKHB0ZSkucHRl
KSB8PSAoMTw8Myk7CglpZiAoKChwdGUpLnB0ZSkgJiAoMTw8MSkpCgkJKChwdGUpLnB0ZSkgfD0g
KDE8PDcpOwoJcmV0dXJuIHB0ZTsKfQoKIAoKCgoKCiMgMzk4ICIvb3B0L2Nyb3NzZGV2L21pcHNl
bC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vcGd0YWJsZS5oIgoKIyA0MDkgIi9vcHQvY3Jv
c3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgiCgpleHRl
cm4gaW5saW5lIHB0ZV90IG1rX3B0ZV9waHlzKHVuc2lnbmVkIGxvbmcgcGh5c3BhZ2UsIHBncHJv
dF90IHBncHJvdCkKewoKCXJldHVybiAoKHB0ZV90KSB7ICgoKChwaHlzcGFnZSAmICh+KCgxVUwg
PDwgMTIpLTEpKSkgLSAweDgwMDAwMDAwVUwpIDw8IDIpIHwgKChwZ3Byb3QpLnBncHJvdCkpIH0g
KTsKCgoKfQoKZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90
X3QgbmV3cHJvdCkKewoJcmV0dXJuICgocHRlX3QpIHsgKCgoKHB0ZSkucHRlKSAmICgofigoMVVM
IDw8IDEyKS0xKSkgfCAoMTw8MykgfCAoMTw8NCkgfCAoNzw8OSkpKSB8ICgobmV3cHJvdCkucGdw
cm90KSkgfSApOwp9CgoKCiAKCgoKCiAKZXh0ZXJuIGlubGluZSBwZ2RfdCAqcGdkX29mZnNldChz
dHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQp7CglyZXR1cm4gbW0t
PnBnZCArICgoYWRkcmVzcykgPj4gMjIpOwp9CgogCmV4dGVybiBpbmxpbmUgcG1kX3QgKnBtZF9v
ZmZzZXQocGdkX3QgKmRpciwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQp7CglyZXR1cm4gKHBtZF90
ICopIGRpcjsKfQoKICAKZXh0ZXJuIGlubGluZSBwdGVfdCAqcHRlX29mZnNldChwbWRfdCAqIGRp
ciwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQp7CglyZXR1cm4gKHB0ZV90ICopIChwbWRfcGFnZSgq
ZGlyKSkgKwoJICAgICAgICgoYWRkcmVzcyA+PiAxMikgJiAoMTAyNCAtIDEpKTsKfQoKIAoKCmV4
dGVybiB2b2lkIHBnZF9pbml0KHVuc2lnbmVkIGxvbmcgcGFnZSk7CgpleHRlcm4gdm9pZCBfX2Jh
ZF9wdGUocG1kX3QgKnBtZCk7CmV4dGVybiB2b2lkIF9fYmFkX3B0ZV9rZXJuZWwocG1kX3QgKnBt
ZCk7CgoKCgoKCmV4dGVybiBpbnQgZG9fY2hlY2tfcGd0X2NhY2hlKGludCwgaW50KTsKCmV4dGVy
biBwZ2RfdCBzd2FwcGVyX3BnX2RpclsxMDI0XTsKZXh0ZXJuIHZvaWQgcGFnaW5nX2luaXQodm9p
ZCk7CgpleHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq
dm1hLAoJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpOwoKCgoKCgoKCgoKCiAK
CgoKIApleHRlcm4gaW5saW5lIHZvaWQgdGxiX3Byb2JlKHZvaWQpCnsKCV9fYXNtX18gX192b2xh
dGlsZV9fKAoJCSIuc2V0IHB1c2hcblx0IgoJCSIuc2V0IHJlb3JkZXJcblx0IgoJCSJ0bGJwXG5c
dCIKCQkiLnNldCBwb3AiKTsKfQoKZXh0ZXJuIGlubGluZSB2b2lkIHRsYl9yZWFkKHZvaWQpCnsK
CV9fYXNtX18gX192b2xhdGlsZV9fKAoJCSIuc2V0IHB1c2hcblx0IgoJCSIuc2V0IHJlb3JkZXJc
blx0IgoJCSJ0bGJyXG5cdCIKCQkiLnNldCBwb3AiKTsKfQoKZXh0ZXJuIGlubGluZSB2b2lkIHRs
Yl93cml0ZV9pbmRleGVkKHZvaWQpCnsKCV9fYXNtX18gX192b2xhdGlsZV9fKAoJCSIuc2V0IHB1
c2hcblx0IgoJCSIuc2V0IHJlb3JkZXJcblx0IgoJCSJ0bGJ3aVxuXHQiCgkJIi5zZXQgcG9wIik7
Cn0KCmV4dGVybiBpbmxpbmUgdm9pZCB0bGJfd3JpdGVfcmFuZG9tKHZvaWQpCnsKCV9fYXNtX18g
X192b2xhdGlsZV9fKAoJCSIuc2V0IHB1c2hcblx0IgoJCSIuc2V0IHJlb3JkZXJcblx0IgoJCSJ0
bGJ3clxuXHQiCgkJIi5zZXQgcG9wIik7Cn0KCiAKCiAKZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBs
b25nIGdldF9wYWdlbWFzayh2b2lkKQp7Cgl1bnNpZ25lZCBsb25nIHZhbDsKCglfX2FzbV9fIF9f
dm9sYXRpbGVfXygKCQkiLnNldCBwdXNoXG5cdCIKCQkiLnNldCByZW9yZGVyXG5cdCIKCQkibWZj
MCAlMCwgJDVcblx0IgoJCSIuc2V0IHBvcCIKCQk6ICI9ciIgKHZhbCkpOwoJcmV0dXJuIHZhbDsK
fQoKZXh0ZXJuIGlubGluZSB2b2lkIHNldF9wYWdlbWFzayh1bnNpZ25lZCBsb25nIHZhbCkKewoJ
X19hc21fXyBfX3ZvbGF0aWxlX18oCgkJIi5zZXQgcHVzaFxuXHQiCgkJIi5zZXQgcmVvcmRlclxu
XHQiCgkJIm10YzAgJTAsICQ1XG5cdCIKCQkiLnNldCBwb3AiCgkJOiA6ICJyIiAodmFsKSk7Cn0K
CiAKZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9lbnRyeWxvMCh2b2lkKQp7Cgl1bnNp
Z25lZCBsb25nIHZhbDsKCglfX2FzbV9fIF9fdm9sYXRpbGVfXygJCgkJIi5zZXQgcHVzaFxuXHQi
CgkJIi5zZXQgcmVvcmRlclxuXHQiCgkJIm1mYzAgJTAsICQyXG5cdCIKCQkiLnNldCBwb3AiCgkJ
OiAiPXIiICh2YWwpKTsKCXJldHVybiB2YWw7Cn0KCmV4dGVybiBpbmxpbmUgdm9pZCBzZXRfZW50
cnlsbzAodW5zaWduZWQgbG9uZyB2YWwpCnsKCV9fYXNtX18gX192b2xhdGlsZV9fKAoJCSIuc2V0
IHB1c2hcblx0IgoJCSIuc2V0IHJlb3JkZXJcblx0IgoJCSJtdGMwICUwLCAkMlxuXHQiCgkJIi5z
ZXQgcG9wIgoJCTogOiAiciIgKHZhbCkpOwp9CgpleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcg
Z2V0X2VudHJ5bG8xKHZvaWQpCnsKCXVuc2lnbmVkIGxvbmcgdmFsOwoKCV9fYXNtX18gX192b2xh
dGlsZV9fKAoJCSIuc2V0IHB1c2hcblx0IgoJCSIuc2V0IHJlb3JkZXJcblx0IgoJCSJtZmMwICUw
LCAkM1xuXHQiCgkJIi5zZXQgcG9wIiA6ICI9ciIgKHZhbCkpOwoKCXJldHVybiB2YWw7Cn0KCmV4
dGVybiBpbmxpbmUgdm9pZCBzZXRfZW50cnlsbzEodW5zaWduZWQgbG9uZyB2YWwpCnsKCV9fYXNt
X18gX192b2xhdGlsZV9fKAoJCSIuc2V0IHB1c2hcblx0IgoJCSIuc2V0IHJlb3JkZXJcblx0IgoJ
CSJtdGMwICUwLCAkM1xuXHQiCgkJIi5zZXQgcG9wIgoJCTogOiAiciIgKHZhbCkpOwp9CgogCmV4
dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfZW50cnloaSh2b2lkKQp7Cgl1bnNpZ25lZCBs
b25nIHZhbDsKCglfX2FzbV9fIF9fdm9sYXRpbGVfXygKCQkiLnNldCBwdXNoXG5cdCIKCQkiLnNl
dCByZW9yZGVyXG5cdCIKCQkibWZjMCAlMCwgJDEwXG5cdCIKCQkiLnNldCBwb3AiCgkJOiAiPXIi
ICh2YWwpKTsKCglyZXR1cm4gdmFsOwp9CgpleHRlcm4gaW5saW5lIHZvaWQgc2V0X2VudHJ5aGko
dW5zaWduZWQgbG9uZyB2YWwpCnsKCV9fYXNtX18gX192b2xhdGlsZV9fKAoJCSIuc2V0IHB1c2hc
blx0IgoJCSIuc2V0IHJlb3JkZXJcblx0IgoJCSJtdGMwICUwLCAkMTBcblx0IgoJCSIuc2V0IHBv
cCIKCQk6IDogInIiICh2YWwpKTsKfQoKIApleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0
X2luZGV4KHZvaWQpCnsKCXVuc2lnbmVkIGxvbmcgdmFsOwoKCV9fYXNtX18gX192b2xhdGlsZV9f
KAoJCSIuc2V0IHB1c2hcblx0IgoJCSIuc2V0IHJlb3JkZXJcblx0IgoJCSJtZmMwICUwLCAkMFxu
XHQiCgkJIi5zZXQgcG9wIgoJCTogIj1yIiAodmFsKSk7CglyZXR1cm4gdmFsOwp9CgpleHRlcm4g
aW5saW5lIHZvaWQgc2V0X2luZGV4KHVuc2lnbmVkIGxvbmcgdmFsKQp7CglfX2FzbV9fIF9fdm9s
YXRpbGVfXygKCQkiLnNldCBwdXNoXG5cdCIKCQkiLnNldCByZW9yZGVyXG5cdCIKCQkibXRjMCAl
MCwgJDBcblx0IgoJCSIuc2V0IHBvcCIKCQk6IDogInIiICh2YWwpKTsKfQoKIApleHRlcm4gaW5s
aW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3dpcmVkKHZvaWQpCnsKCXVuc2lnbmVkIGxvbmcgdmFsOwoK
CV9fYXNtX18gX192b2xhdGlsZV9fKAoJCSIuc2V0IHB1c2hcblx0IgoJCSIuc2V0IHJlb3JkZXJc
blx0IgoJCSJtZmMwICUwLCAkNlxuXHQiCgkJIi5zZXQgcG9wIgoJCTogIj1yIiAodmFsKSk7Cgly
ZXR1cm4gdmFsOwp9CgpleHRlcm4gaW5saW5lIHZvaWQgc2V0X3dpcmVkKHVuc2lnbmVkIGxvbmcg
dmFsKQp7CglfX2FzbV9fIF9fdm9sYXRpbGVfXygKCQkiLnNldCBwdXNoXG5cdCIKCQkiLnNldCBy
ZW9yZGVyXG5cdCIKCQkibXRjMCAlMCwgJDZcblx0IgoJCSIuc2V0IHBvcCIKCQk6IDogInIiICh2
YWwpKTsKfQoKIApleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X3RhZ2xvKHZvaWQpCnsK
CXVuc2lnbmVkIGxvbmcgdmFsOwoKCV9fYXNtX18gX192b2xhdGlsZV9fKAoJCSIuc2V0IHB1c2hc
blx0IgoJCSIuc2V0IHJlb3JkZXJcblx0IgoJCSJtZmMwICUwLCAkMjhcblx0IgoJCSIuc2V0IHBv
cCIKCQk6ICI9ciIgKHZhbCkpOwoJcmV0dXJuIHZhbDsKfQoKZXh0ZXJuIGlubGluZSB2b2lkIHNl
dF90YWdsbyh1bnNpZ25lZCBsb25nIHZhbCkKewoJX19hc21fXyBfX3ZvbGF0aWxlX18oCgkJIi5z
ZXQgcHVzaFxuXHQiCgkJIi5zZXQgcmVvcmRlclxuXHQiCgkJIm10YzAgJTAsICQyOFxuXHQiCgkJ
Ii5zZXQgcG9wIgoJCTogOiAiciIgKHZhbCkpOwp9CgpleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxv
bmcgZ2V0X3RhZ2hpKHZvaWQpCnsKCXVuc2lnbmVkIGxvbmcgdmFsOwoKCV9fYXNtX18gX192b2xh
dGlsZV9fKAoJCSIuc2V0IHB1c2hcblx0IgoJCSIuc2V0IHJlb3JkZXJcblx0IgoJCSJtZmMwICUw
LCAkMjlcblx0IgoJCSIuc2V0IHBvcCIKCQk6ICI9ciIgKHZhbCkpOwoJcmV0dXJuIHZhbDsKfQoK
ZXh0ZXJuIGlubGluZSB2b2lkIHNldF90YWdoaSh1bnNpZ25lZCBsb25nIHZhbCkKewoJX19hc21f
XyBfX3ZvbGF0aWxlX18oCgkJIi5zZXQgcHVzaFxuXHQiCgkJIi5zZXQgcmVvcmRlclxuXHQiCgkJ
Im10YzAgJTAsICQyOVxuXHQiCgkJIi5zZXQgcG9wIgoJCTogOiAiciIgKHZhbCkpOwp9CgogCmV4
dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfY29udGV4dCh2b2lkKQp7Cgl1bnNpZ25lZCBs
b25nIHZhbDsKCglfX2FzbV9fIF9fdm9sYXRpbGVfXygKCQkiLnNldCBwdXNoXG5cdCIKCQkiLnNl
dCByZW9yZGVyXG5cdCIKCQkibWZjMCAlMCwgJDRcblx0IgoJCSIuc2V0IHBvcCIKCQk6ICI9ciIg
KHZhbCkpOwoKCXJldHVybiB2YWw7Cn0KCmV4dGVybiBpbmxpbmUgdm9pZCBzZXRfY29udGV4dCh1
bnNpZ25lZCBsb25nIHZhbCkKewoJX19hc21fXyBfX3ZvbGF0aWxlX18oCgkJIi5zZXQgcHVzaFxu
XHQiCgkJIi5zZXQgcmVvcmRlclxuXHQiCgkJIm10YzAgJTAsICQ0XG5cdCIKCQkiLnNldCBwb3Ai
CgkJOiA6ICJyIiAodmFsKSk7Cn0KCgoKCgoKIyAyMCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGlu
dXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbW0uaCIgMgoKCgogCgoKCgoKCgoKIAoKCgoKCnN0
cnVjdCB2bV9hcmVhX3N0cnVjdCB7CglzdHJ1Y3QgbW1fc3RydWN0ICogdm1fbW07CSAKCXVuc2ln
bmVkIGxvbmcgdm1fc3RhcnQ7Cgl1bnNpZ25lZCBsb25nIHZtX2VuZDsKCgkgCglzdHJ1Y3Qgdm1f
YXJlYV9zdHJ1Y3QgKnZtX25leHQ7CgoJcGdwcm90X3Qgdm1fcGFnZV9wcm90OwoJdW5zaWduZWQg
bG9uZyB2bV9mbGFnczsKCgkgCglzaG9ydCB2bV9hdmxfaGVpZ2h0OwoJc3RydWN0IHZtX2FyZWFf
c3RydWN0ICogdm1fYXZsX2xlZnQ7CglzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bV9hdmxfcmln
aHQ7CgoJIAoKCglzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtX25leHRfc2hhcmU7CglzdHJ1Y3Qg
dm1fYXJlYV9zdHJ1Y3QgKip2bV9wcHJldl9zaGFyZTsKCglzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19z
dHJ1Y3QgKiB2bV9vcHM7Cgl1bnNpZ25lZCBsb25nIHZtX3Bnb2ZmOwkJIAoJc3RydWN0IGZpbGUg
KiB2bV9maWxlOwoJdW5zaWduZWQgbG9uZyB2bV9yYWVuZDsKCXZvaWQgKiB2bV9wcml2YXRlX2Rh
dGE7CQkgCn07CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgpleHRlcm4g
cGdwcm90X3QgcHJvdGVjdGlvbl9tYXBbMTZdOwoKCiAKCgoKCnN0cnVjdCB2bV9vcGVyYXRpb25z
X3N0cnVjdCB7Cgl2b2lkICgqb3Blbikoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogYXJlYSk7Cgl2
b2lkICgqY2xvc2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIGFyZWEpOwoJdm9pZCAoKnVubWFw
KShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEsIHVuc2lnbmVkIGxvbmcsIHNpemVfdCk7Cgl2
b2lkICgqcHJvdGVjdCkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhLCB1bnNpZ25lZCBsb25n
LCBzaXplX3QsIHVuc2lnbmVkIGludCBuZXdwcm90KTsKCWludCAoKnN5bmMpKHN0cnVjdCB2bV9h
cmVhX3N0cnVjdCAqYXJlYSwgdW5zaWduZWQgbG9uZywgc2l6ZV90LCB1bnNpZ25lZCBpbnQgZmxh
Z3MpOwoJc3RydWN0IHBhZ2UgKiAoKm5vcGFnZSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogYXJl
YSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgd3JpdGVfYWNjZXNzKTsKCXN0cnVjdCBwYWdl
ICogKCp3cHBhZ2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIGFyZWEsIHVuc2lnbmVkIGxvbmcg
YWRkcmVzcywgc3RydWN0IHBhZ2UgKiBwYWdlKTsKCWludCAoKnN3YXBvdXQpKHN0cnVjdCBwYWdl
ICosIHN0cnVjdCBmaWxlICopOwp9OwoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJdW5zaWduZWQg
bG9uZyB2YWw7Cn0gc3dwX2VudHJ5X3Q7CgogCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBwYWdlIHsK
CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwoJ
dW5zaWduZWQgbG9uZyBpbmRleDsKCXN0cnVjdCBwYWdlICpuZXh0X2hhc2g7CglhdG9taWNfdCBj
b3VudDsKCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CSAKCXN0cnVjdCBsaXN0X2hlYWQgbHJ1OwoJd2Fp
dF9xdWV1ZV9oZWFkX3Qgd2FpdDsKCXN0cnVjdCBwYWdlICoqcHByZXZfaGFzaDsKCXN0cnVjdCBi
dWZmZXJfaGVhZCAqIGJ1ZmZlcnM7Cgl1bnNpZ25lZCBsb25nIHZpcnR1YWw7ICAKCXN0cnVjdCB6
b25lX3N0cnVjdCAqem9uZTsKfSBtZW1fbWFwX3Q7CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoJCQkJ
IAoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCiMg
Mjk0ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9t
bS5oIgoKZXh0ZXJuIG1lbV9tYXBfdCAqIG1lbV9tYXA7CgogCgoKCgoKZXh0ZXJuIHN0cnVjdCBw
YWdlICogX19hbGxvY19wYWdlcyh6b25lbGlzdF90ICp6b25lbGlzdCwgdW5zaWduZWQgbG9uZyBv
cmRlcik7CmV4dGVybiBzdHJ1Y3QgcGFnZSAqIGFsbG9jX3BhZ2VzX25vZGUoaW50IG5pZCwgaW50
IGdmcF9tYXNrLCB1bnNpZ25lZCBsb25nIG9yZGVyKTsKCgpleHRlcm4gaW5saW5lIHN0cnVjdCBw
YWdlICogYWxsb2NfcGFnZXMoaW50IGdmcF9tYXNrLCB1bnNpZ25lZCBsb25nIG9yZGVyKQp7Cgkg
CglpZiAoY29udGlnX3BhZ2VfZGF0YS5ub2RlX3pvbmVsaXN0c1tnZnBfbWFza10uZ2ZwX21hc2sg
IT0gKGdmcF9tYXNrKSkKCQlkbyB7IHByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsICIv
b3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9tbS5oIiwg
MzExKTsgKihpbnQgKikwPTA7IH0gd2hpbGUgKDApOwoJIAoKCglpZiAob3JkZXIgPj0gMTApCgkJ
cmV0dXJuICgodm9pZCAqKTApOwoJcmV0dXJuIF9fYWxsb2NfcGFnZXMoY29udGlnX3BhZ2VfZGF0
YS5ub2RlX3pvbmVsaXN0cysoZ2ZwX21hc2spLCBvcmRlcik7Cn0KCgoKCgoKCmV4dGVybiBpbmxp
bmUgdW5zaWduZWQgbG9uZyBfX2dldF9mcmVlX3BhZ2VzIChpbnQgZ2ZwX21hc2ssIHVuc2lnbmVk
IGxvbmcgb3JkZXIpCnsKCXN0cnVjdCBwYWdlICogcGFnZTsKCglwYWdlID0gYWxsb2NfcGFnZXMo
Z2ZwX21hc2ssIG9yZGVyKTsKCWlmICghcGFnZSkKCQlyZXR1cm4gMDsKCXJldHVybiAoKHBhZ2Up
LT52aXJ0dWFsKTsKfQoKCgoKCgoKZXh0ZXJuIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF96ZXJv
ZWRfcGFnZShpbnQgZ2ZwX21hc2spCnsKCXVuc2lnbmVkIGxvbmcgcGFnZTsKCglwYWdlID0gX19n
ZXRfZnJlZV9wYWdlcygoZ2ZwX21hc2spLDApOwoJaWYgKHBhZ2UpCgkJX2NsZWFyX3BhZ2UoKHZv
aWQgKilwYWdlKTsKCXJldHVybiBwYWdlOwp9CgogCgoKCgogCgoKZXh0ZXJuIHZvaWQgX19mcmVl
X3BhZ2VzX29rKHN0cnVjdCBwYWdlICogcGFnZSwgdW5zaWduZWQgbG9uZyBvcmRlcik7CgpleHRl
cm4gaW5saW5lIHZvaWQgX19mcmVlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBs
b25nIG9yZGVyKQp7CglpZiAoIShhdG9taWNfc3ViX3JldHVybigxLCAoJihwYWdlKS0+Y291bnQp
KSA9PSAwKSkKCQlyZXR1cm47CglfX2ZyZWVfcGFnZXNfb2socGFnZSwgb3JkZXIpOwp9CgoKCmV4
dGVybiBpbmxpbmUgdm9pZCBmcmVlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQg
bG9uZyBvcmRlcikKewoJdW5zaWduZWQgbG9uZyBtYXBfbnI7CgoKCgoJbWFwX25yID0gKCgodW5z
aWduZWQgbG9uZykgKGFkZHIpIC0gMHg4MDAwMDAwMFVMKSA+PiAxMik7CglpZiAobWFwX25yIDwg
bWF4X21hcG5yKQoJCV9fZnJlZV9wYWdlcyhtZW1fbWFwICsgbWFwX25yLCBvcmRlcik7Cn0KCgoK
ZXh0ZXJuIHZvaWQgc2hvd19mcmVlX2FyZWFzKHZvaWQpOwpleHRlcm4gdm9pZCBzaG93X2ZyZWVf
YXJlYXNfbm9kZShpbnQgbmlkKTsKCmV4dGVybiB2b2lkIGNsZWFyX3BhZ2VfdGFibGVzKHN0cnVj
dCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgaW50KTsKCmV4dGVybiBpbnQgbWFwX3plcm9f
c2V0dXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwoKZXh0ZXJuIHZvaWQgemFwX3BhZ2VfcmFu
Z2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQg
bG9uZyBzaXplKTsKZXh0ZXJuIGludCBjb3B5X3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAq
ZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsK
ZXh0ZXJuIGludCByZW1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQg
bG9uZyB0bywgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KTsKZXh0ZXJuIGludCB6
ZXJvbWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBmcm9tLCB1bnNpZ25lZCBsb25nIHNpemUs
IHBncHJvdF90IHByb3QpOwoKZXh0ZXJuIHZvaWQgdm10cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKiBp
bm9kZSwgbG9mZl90IG9mZnNldCk7CmV4dGVybiBpbnQgaGFuZGxlX21tX2ZhdWx0KHN0cnVjdCB0
YXNrX3N0cnVjdCAqdHNrLHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25n
IGFkZHJlc3MsIGludCB3cml0ZV9hY2Nlc3MpOwpleHRlcm4gaW50IG1ha2VfcGFnZXNfcHJlc2Vu
dCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKTsKZXh0ZXJuIGludCBhY2Nl
c3NfcHJvY2Vzc192bShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRy
LCB2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSk7CmV4dGVybiBpbnQgcHRyYWNlX3JlYWRk
YXRhKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIHNyYywgY2hhciAqZHN0
LCBpbnQgbGVuKTsKZXh0ZXJuIGludCBwdHJhY2Vfd3JpdGVkYXRhKHN0cnVjdCB0YXNrX3N0cnVj
dCAqdHNrLCBjaGFyICogc3JjLCB1bnNpZ25lZCBsb25nIGRzdCwgaW50IGxlbik7CgpleHRlcm4g
aW50IHBndF9jYWNoZV93YXRlclsyXTsKZXh0ZXJuIGludCBjaGVja19wZ3RfY2FjaGUodm9pZCk7
CgpleHRlcm4gdm9pZCBmcmVlX2FyZWFfaW5pdCh1bnNpZ25lZCBsb25nICogem9uZXNfc2l6ZSk7
CmV4dGVybiB2b2lkIGZyZWVfYXJlYV9pbml0X25vZGUoaW50IG5pZCwgcGdfZGF0YV90ICpwZ2Rh
dCwgCgkJdW5zaWduZWQgbG9uZyAqIHpvbmVzX3NpemUsIHVuc2lnbmVkIGxvbmcgem9uZV9zdGFy
dF9wYWRkcik7CmV4dGVybiB2b2lkIG1lbV9pbml0KHZvaWQpOwpleHRlcm4gdm9pZCBzaG93X21l
bSh2b2lkKTsKZXh0ZXJuIHZvaWQgc2lfbWVtaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqIHZhbCk7CmV4
dGVybiB2b2lkIHN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QpOwoKIApleHRlcm4gdm9pZCB2
bWFfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgbWVyZ2Vfc2VnbWVudHMoc3RydWN0IG1tX3N0cnVj
dCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIHZvaWQgaW5zZXJ0X3Zt
X3N0cnVjdChzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKZXh0
ZXJuIHZvaWQgYnVpbGRfbW1hcF9hdmwoc3RydWN0IG1tX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQg
ZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CmV4dGVybiB1bnNpZ25lZCBsb25nIGdldF91
bm1hcHBlZF9hcmVhKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwoKZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgZG9fbW1hcF9wZ29mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBh
ZGRyLAoJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJvdCwKCXVuc2lnbmVkIGxv
bmcgZmxhZywgdW5zaWduZWQgbG9uZyBwZ29mZik7CgpleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxv
bmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAoJdW5zaWdu
ZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJvdCwKCXVuc2lnbmVkIGxvbmcgZmxhZywgdW5z
aWduZWQgbG9uZyBvZmZzZXQpCnsKCXVuc2lnbmVkIGxvbmcgcmV0ID0gLTIyOwoJaWYgKChvZmZz
ZXQgKyAoKChsZW4pKygxVUwgPDwgMTIpLTEpJih+KCgxVUwgPDwgMTIpLTEpKSkpIDwgb2Zmc2V0
KQoJCWdvdG8gb3V0OwoJaWYgKCEob2Zmc2V0ICYgfih+KCgxVUwgPDwgMTIpLTEpKSkpCgkJcmV0
ID0gZG9fbW1hcF9wZ29mZihmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWcsIG9mZnNldCA+PiAx
Mik7Cm91dDoKCXJldHVybiByZXQ7Cn0KCmV4dGVybiBpbnQgZG9fbXVubWFwKHVuc2lnbmVkIGxv
bmcsIHNpemVfdCk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGRvX2Jyayh1bnNpZ25lZCBsb25nLCB1
bnNpZ25lZCBsb25nKTsKCnN0cnVjdCB6b25lX3Q7CiAKZXh0ZXJuIHZvaWQgcmVtb3ZlX2lub2Rl
X3BhZ2Uoc3RydWN0IHBhZ2UgKik7CmV4dGVybiB1bnNpZ25lZCBsb25nIHBhZ2VfdW51c2Uoc3Ry
dWN0IHBhZ2UgKik7CmV4dGVybiBpbnQgc2hyaW5rX21tYXAoaW50LCBpbnQsIHpvbmVfdCAqKTsK
ZXh0ZXJuIHZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwg
bG9mZl90KTsKCiAKZXh0ZXJuIGludCBmaWxlbWFwX3N3YXBvdXQoc3RydWN0IHBhZ2UgKiBwYWdl
LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CmV4dGVybiBwdGVfdCBmaWxlbWFwX3N3YXBpbihzdHJ1Y3Qg
dm1fYXJlYV9zdHJ1Y3QgKiB2bWEsCgkJCSAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWdu
ZWQgbG9uZyBlbnRyeSk7CmV4dGVybiBpbnQgZmlsZW1hcF9zeW5jKHN0cnVjdCB2bV9hcmVhX3N0
cnVjdCAqIHZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAoJCQlzaXplX3Qgc2l6ZSwgdW5zaWdu
ZWQgaW50IGZsYWdzKTsKZXh0ZXJuIHN0cnVjdCBwYWdlICpmaWxlbWFwX25vcGFnZShzdHJ1Y3Qg
dm1fYXJlYV9zdHJ1Y3QgKiBhcmVhLAoJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50
IG5vX3NoYXJlKTsKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCiAKCgoK
CiAKCnN0YXRpYyBpbmxpbmUgaW50IGV4cGFuZF9zdGFjayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg
KiB2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKewoJdW5zaWduZWQgbG9uZyBncm93OwoKCWFk
ZHJlc3MgJj0gKH4oKDFVTCA8PCAxMiktMSkpOwoJZ3JvdyA9ICh2bWEtPnZtX3N0YXJ0IC0gYWRk
cmVzcykgPj4gMTI7CglpZiAodm1hLT52bV9lbmQgLSBhZGRyZXNzID4gY3VycmVudC0+cmxpbVsz
XS5ybGltX2N1ciB8fAoJICAgICgodm1hLT52bV9tbS0+dG90YWxfdm0gKyBncm93KSA8PCAxMikg
PiBjdXJyZW50LT5ybGltWzZdLnJsaW1fY3VyKQoJCXJldHVybiAtMTI7Cgl2bWEtPnZtX3N0YXJ0
ID0gYWRkcmVzczsKCXZtYS0+dm1fcGdvZmYgLT0gZ3JvdzsKCXZtYS0+dm1fbW0tPnRvdGFsX3Zt
ICs9IGdyb3c7CglpZiAodm1hLT52bV9mbGFncyAmIDB4MDAwMDIwMDApCgkJdm1hLT52bV9tbS0+
bG9ja2VkX3ZtICs9IGdyb3c7CglyZXR1cm4gMDsKfQoKIApleHRlcm4gc3RydWN0IHZtX2FyZWFf
c3RydWN0ICogZmluZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqIG1tLCB1bnNpZ25lZCBsb25nIGFk
ZHIpOwpleHRlcm4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICogZmluZF92bWFfcHJldihzdHJ1Y3Qg
bW1fc3RydWN0ICogbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKCQkJCQkgICAgIHN0cnVjdCB2bV9h
cmVhX3N0cnVjdCAqKnBwcmV2KTsKCiAKCnN0YXRpYyBpbmxpbmUgc3RydWN0IHZtX2FyZWFfc3Ry
dWN0ICogZmluZF92bWFfaW50ZXJzZWN0aW9uKHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSwgdW5zaWdu
ZWQgbG9uZyBzdGFydF9hZGRyLCB1bnNpZ25lZCBsb25nIGVuZF9hZGRyKQp7CglzdHJ1Y3Qgdm1f
YXJlYV9zdHJ1Y3QgKiB2bWEgPSBmaW5kX3ZtYShtbSxzdGFydF9hZGRyKTsKCglpZiAodm1hICYm
IGVuZF9hZGRyIDw9IHZtYS0+dm1fc3RhcnQpCgkJdm1hID0gKCh2b2lkICopMCk7CglyZXR1cm4g
dm1hOwp9CgpleHRlcm4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX2V4dGVuZF92bWEoc3Ry
dWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkcik7CgoKCgoKCgoKCgoKCgoK
IyAxNCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgv
c2xhYi5oIiAyCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCiAKZXh0ZXJuIHZv
aWQga21lbV9jYWNoZV9pbml0KHZvaWQpOwpleHRlcm4gdm9pZCBrbWVtX2NhY2hlX3NpemVzX2lu
aXQodm9pZCk7CmV4dGVybiBrbWVtX2NhY2hlX3QgKmttZW1fZmluZF9nZW5lcmFsX2NhY2hlcChz
aXplX3QpOwpleHRlcm4ga21lbV9jYWNoZV90ICprbWVtX2NhY2hlX2NyZWF0ZShjb25zdCBjaGFy
ICosIHNpemVfdCwgc2l6ZV90LCB1bnNpZ25lZCBsb25nLAoJCQkJICAgICAgIHZvaWQgKCopKHZv
aWQgKiwga21lbV9jYWNoZV90ICosIHVuc2lnbmVkIGxvbmcpLAoJCQkJICAgICAgIHZvaWQgKCop
KHZvaWQgKiwga21lbV9jYWNoZV90ICosIHVuc2lnbmVkIGxvbmcpKTsKZXh0ZXJuIGludCBrbWVt
X2NhY2hlX2Rlc3Ryb3koa21lbV9jYWNoZV90ICopOwpleHRlcm4gaW50IGttZW1fY2FjaGVfc2hy
aW5rKGttZW1fY2FjaGVfdCAqKTsKZXh0ZXJuIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Moa21lbV9j
YWNoZV90ICosIGludCk7CmV4dGVybiB2b2lkIGttZW1fY2FjaGVfZnJlZShrbWVtX2NhY2hlX3Qg
Kiwgdm9pZCAqKTsKCmV4dGVybiB2b2lkICprbWFsbG9jKHNpemVfdCwgaW50KTsKZXh0ZXJuIHZv
aWQga2ZyZWUoY29uc3Qgdm9pZCAqKTsKZXh0ZXJuIHZvaWQga2ZyZWVfcyhjb25zdCB2b2lkICos
IHNpemVfdCk7CgpleHRlcm4gdm9pZCBrbWVtX2NhY2hlX3JlYXAoaW50KTsKZXh0ZXJuIGludCBn
ZXRfc2xhYmluZm8oY2hhciAqKTsKCiAKZXh0ZXJuIGttZW1fY2FjaGVfdAkqdm1fYXJlYV9jYWNo
ZXA7CmV4dGVybiBrbWVtX2NhY2hlX3QJKm1tX2NhY2hlcDsKCgoKCiMgNCAiL29wdC9jcm9zc2Rl
di9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvbWFsbG9jLmgiIDIKCgojIDIy
ICJzeXNjdGwuYyIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgv
aW5jbHVkZS9saW51eC9zeXNjdGwuaCIgMQogCiMgMjMgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxp
bnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oIgoKCgoKCgoKCnN0cnVjdCBfX3N5
c2N0bF9hcmdzIHsKCWludCAqbmFtZTsKCWludCBubGVuOwoJdm9pZCAqb2xkdmFsOwoJc2l6ZV90
ICpvbGRsZW5wOwoJdm9pZCAqbmV3dmFsOwoJc2l6ZV90IG5ld2xlbjsKCXVuc2lnbmVkIGxvbmcg
X191bnVzZWRbNF07Cn07CgogCgogCgogCgoKCgoKZW51bQp7CglDVExfS0VSTj0xLAkJIAoJQ1RM
X1ZNPTIsCQkgCglDVExfTkVUPTMsCQkgCglDVExfUFJPQz00LAkJIAoJQ1RMX0ZTPTUsCQkgCglD
VExfREVCVUc9NiwJCSAKCUNUTF9ERVY9NywJCSAKCUNUTF9CVVM9OAkJIAp9OwoKIAplbnVtCnsK
CUJVU19JU0E9MQkJIAp9OwoKIAplbnVtCnsKCUtFUk5fT1NUWVBFPTEsCQkgCglLRVJOX09TUkVM
RUFTRT0yLAkgCglLRVJOX09TUkVWPTMsCQkgCglLRVJOX1ZFUlNJT049NCwJCSAKCUtFUk5fU0VD
VVJFTUFTSz01LAkgCglLRVJOX1BST0Y9NiwJCSAKCUtFUk5fTk9ERU5BTUU9NywKCUtFUk5fRE9N
QUlOTkFNRT04LAoKCUtFUk5fQ0FQX0JTRVQ9MTQsCSAKCUtFUk5fUEFOSUM9MTUsCQkgCglLRVJO
X1JFQUxST09UREVWPTE2LAkgCgoJS0VSTl9TUEFSQ19SRUJPT1Q9MjEsCSAKCUtFUk5fQ1RMQUxU
REVMPTIyLAkgCglLRVJOX1BSSU5USz0yMywJCSAKCUtFUk5fTkFNRVRSQU5TPTI0LAkgCglLRVJO
X1BQQ19IVEFCUkVDTEFJTT0yNSwgIAoJS0VSTl9QUENfWkVST1BBR0VEPTI2LAkgCglLRVJOX1BQ
Q19QT1dFUlNBVkVfTkFQPTI3LCAgCglLRVJOX01PRFBST0JFPTI4LAoJS0VSTl9TR19CSUdfQlVG
Rj0yOSwKCUtFUk5fQUNDVD0zMCwJCSAKCUtFUk5fUFBDX0wyQ1I9MzEsCSAKCglLRVJOX1JUU0lH
TlI9MzIsCSAKCUtFUk5fUlRTSUdNQVg9MzMsCSAKCQoJS0VSTl9TSE1NQVg9MzQsICAgICAgICAg
IAoJS0VSTl9NU0dNQVg9MzUsICAgICAgICAgIAoJS0VSTl9NU0dNTkI9MzYsICAgICAgICAgIAoJ
S0VSTl9NU0dQT09MPTM3LCAgICAgICAgIAoJS0VSTl9TWVNSUT0zOCwJCSAKCUtFUk5fTUFYX1RI
UkVBRFM9MzksCSAKIAlLRVJOX1JBTkRPTT00MCwJCSAKIAlLRVJOX1NITUFMTD00MSwJCSAKIAlL
RVJOX01TR01OST00MiwJCSAKIAlLRVJOX1NFTT00MywJCSAKIAlLRVJOX1NQQVJDX1NUT1BfQT00
NCwJIAogCUtFUk5fU0hNTU5JPTQ1LAkJIAoJS0VSTl9PVkVSRkxPV1VJRD00NiwJIAoJS0VSTl9P
VkVSRkxPV0dJRD00NywJIAoJS0VSTl9TSE1QQVRIPTQ4LAkgCn07CgoKIAplbnVtCnsKCVZNX1NX
QVBDVEw9MSwJCSAKCVZNX1NXQVBPVVQ9MiwJCSAKCVZNX0ZSRUVQRz0zLAkJIAoJVk1fQkRGTFVT
SD00LAkJIAoJVk1fT1ZFUkNPTU1JVF9NRU1PUlk9NSwJIAoJVk1fQlVGRkVSTUVNPTYsCQkgCglW
TV9QQUdFQ0FDSEU9NywJCSAKCVZNX1BBR0VSREFFTU9OPTgsCSAKCVZNX1BHVF9DQUNIRT05LAkJ
IAoJVk1fUEFHRV9DTFVTVEVSPTEwCSAKfTsKCgogCmVudW0KewoJTkVUX0NPUkU9MSwKCU5FVF9F
VEhFUj0yLAoJTkVUXzgwMj0zLAoJTkVUX1VOSVg9NCwKCU5FVF9JUFY0PTUsCglORVRfSVBYPTYs
CglORVRfQVRBTEs9NywKCU5FVF9ORVRST009OCwKCU5FVF9BWDI1PTksCglORVRfQlJJREdFPTEw
LAoJTkVUX1JPU0U9MTEsCglORVRfSVBWNj0xMiwKCU5FVF9YMjU9MTMsCglORVRfVFI9MTQsCglO
RVRfREVDTkVUPTE1LAoJTkVUX0VDT05FVD0xNiwKCU5FVF9LSFRUUEQ9MTcKfTsKCiAKZW51bQp7
CglSQU5ET01fUE9PTFNJWkU9MSwKCVJBTkRPTV9FTlRST1BZX0NPVU5UPTIsCglSQU5ET01fUkVB
RF9USFJFU0g9MywKCVJBTkRPTV9XUklURV9USFJFU0g9NCwKCVJBTkRPTV9CT09UX0lEPTUsCglS
QU5ET01fVVVJRD02Cn07CgogCmVudW0KewoJQlVTX0lTQV9NRU1fQkFTRT0xLAoJQlVTX0lTQV9Q
T1JUX0JBU0U9MiwKCUJVU19JU0FfUE9SVF9TSElGVD0zCn07CgogCmVudW0KewoJTkVUX0NPUkVf
V01FTV9NQVg9MSwKCU5FVF9DT1JFX1JNRU1fTUFYPTIsCglORVRfQ09SRV9XTUVNX0RFRkFVTFQ9
MywKCU5FVF9DT1JFX1JNRU1fREVGQVVMVD00LAogCglORVRfQ09SRV9NQVhfQkFDS0xPRz02LAoJ
TkVUX0NPUkVfRkFTVFJPVVRFPTcsCglORVRfQ09SRV9NU0dfQ09TVD04LAoJTkVUX0NPUkVfTVNH
X0JVUlNUPTksCglORVRfQ09SRV9PUFRNRU1fTUFYPTEwLAoJTkVUX0NPUkVfSE9UX0xJU1RfTEVO
R1RIPTExCn07CgogCgogCgogCgplbnVtCnsKCU5FVF9VTklYX0RFU1RST1lfREVMQVk9MSwKCU5F
VF9VTklYX0RFTEVURV9ERUxBWT0yLAoJTkVUX1VOSVhfTUFYX0RHUkFNX1FMRU49MywKfTsKCiAK
ZW51bQp7CgkgCglORVRfSVBWNF9GT1JXQVJEPTgsCglORVRfSVBWNF9EWU5BRERSPTksCgoJTkVU
X0lQVjRfQ09ORj0xNiwKCU5FVF9JUFY0X05FSUdIPTE3LAoJTkVUX0lQVjRfUk9VVEU9MTgsCglO
RVRfSVBWNF9GSUJfSEFTSD0xOSwKCglORVRfSVBWNF9UQ1BfVElNRVNUQU1QUz0zMywKCU5FVF9J
UFY0X1RDUF9XSU5ET1dfU0NBTElORz0zNCwKCU5FVF9JUFY0X1RDUF9TQUNLPTM1LAoJTkVUX0lQ
VjRfVENQX1JFVFJBTlNfQ09MTEFQU0U9MzYsCglORVRfSVBWNF9ERUZBVUxUX1RUTD0zNywKCU5F
VF9JUFY0X0FVVE9DT05GSUc9MzgsCglORVRfSVBWNF9OT19QTVRVX0RJU0M9MzksCglORVRfSVBW
NF9UQ1BfU1lOX1JFVFJJRVM9NDAsCglORVRfSVBWNF9JUEZSQUdfSElHSF9USFJFU0g9NDEsCglO
RVRfSVBWNF9JUEZSQUdfTE9XX1RIUkVTSD00MiwKCU5FVF9JUFY0X0lQRlJBR19USU1FPTQzLAoJ
TkVUX0lQVjRfVENQX01BWF9LQV9QUk9CRVM9NDQsCglORVRfSVBWNF9UQ1BfS0VFUEFMSVZFX1RJ
TUU9NDUsCglORVRfSVBWNF9UQ1BfS0VFUEFMSVZFX1BST0JFUz00NiwKCU5FVF9JUFY0X1RDUF9S
RVRSSUVTMT00NywKCU5FVF9JUFY0X1RDUF9SRVRSSUVTMj00OCwKCU5FVF9JUFY0X1RDUF9GSU5f
VElNRU9VVD00OSwKCU5FVF9JUFY0X0lQX01BU1FfREVCVUc9NTAsCglORVRfVENQX1NZTkNPT0tJ
RVM9NTEsCglORVRfVENQX1NURFVSRz01MiwKCU5FVF9UQ1BfUkZDMTMzNz01MywKCU5FVF9UQ1Bf
U1lOX1RBSUxEUk9QPTU0LAoJTkVUX1RDUF9NQVhfU1lOX0JBQ0tMT0c9NTUsCglORVRfSVBWNF9M
T0NBTF9QT1JUX1JBTkdFPTU2LAoJTkVUX0lQVjRfSUNNUF9FQ0hPX0lHTk9SRV9BTEw9NTcsCglO
RVRfSVBWNF9JQ01QX0VDSE9fSUdOT1JFX0JST0FEQ0FTVFM9NTgsCglORVRfSVBWNF9JQ01QX1NP
VVJDRVFVRU5DSF9SQVRFPTU5LAoJTkVUX0lQVjRfSUNNUF9ERVNUVU5SRUFDSF9SQVRFPTYwLAoJ
TkVUX0lQVjRfSUNNUF9USU1FRVhDRUVEX1JBVEU9NjEsCglORVRfSVBWNF9JQ01QX1BBUkFNUFJP
Ql9SQVRFPTYyLAoJTkVUX0lQVjRfSUNNUF9FQ0hPUkVQTFlfUkFURT02MywKCU5FVF9JUFY0X0lD
TVBfSUdOT1JFX0JPR1VTX0VSUk9SX1JFU1BPTlNFUz02NCwKCU5FVF9JUFY0X0lHTVBfTUFYX01F
TUJFUlNISVBTPTY1LAoJTkVUX1RDUF9UV19SRUNZQ0xFPTY2LAoJTkVUX0lQVjRfQUxXQVlTX0RF
RlJBRz02NywKCU5FVF9JUFY0X1RDUF9LRUVQQUxJVkVfSU5UVkw9NjgsCglORVRfSVBWNF9JTkVU
X1BFRVJfVEhSRVNIT0xEPTY5LAoJTkVUX0lQVjRfSU5FVF9QRUVSX01JTlRUTD03MCwKCU5FVF9J
UFY0X0lORVRfUEVFUl9NQVhUVEw9NzEsCglORVRfSVBWNF9JTkVUX1BFRVJfR0NfTUlOVElNRT03
MiwKCU5FVF9JUFY0X0lORVRfUEVFUl9HQ19NQVhUSU1FPTczLAoJTkVUX1RDUF9PUlBIQU5fUkVU
UklFUz03NCwKCU5FVF9UQ1BfQUJPUlRfT05fT1ZFUkZMT1c9NzUsCglORVRfVENQX1NZTkFDS19S
RVRSSUVTPTc2LAoJTkVUX1RDUF9NQVhfT1JQSEFOUz03NywKCU5FVF9UQ1BfTUFYX1RXX0JVQ0tF
VFM9NzgsCn07CgplbnVtIHsKCU5FVF9JUFY0X1JPVVRFX0ZMVVNIPTEsCglORVRfSVBWNF9ST1VU
RV9NSU5fREVMQVk9MiwKCU5FVF9JUFY0X1JPVVRFX01BWF9ERUxBWT0zLAoJTkVUX0lQVjRfUk9V
VEVfR0NfVEhSRVNIPTQsCglORVRfSVBWNF9ST1VURV9NQVhfU0laRT01LAoJTkVUX0lQVjRfUk9V
VEVfR0NfTUlOX0lOVEVSVkFMPTYsCglORVRfSVBWNF9ST1VURV9HQ19USU1FT1VUPTcsCglORVRf
SVBWNF9ST1VURV9HQ19JTlRFUlZBTD04LAoJTkVUX0lQVjRfUk9VVEVfUkVESVJFQ1RfTE9BRD05
LAoJTkVUX0lQVjRfUk9VVEVfUkVESVJFQ1RfTlVNQkVSPTEwLAoJTkVUX0lQVjRfUk9VVEVfUkVE
SVJFQ1RfU0lMRU5DRT0xMSwKCU5FVF9JUFY0X1JPVVRFX0VSUk9SX0NPU1Q9MTIsCglORVRfSVBW
NF9ST1VURV9FUlJPUl9CVVJTVD0xMywKCU5FVF9JUFY0X1JPVVRFX0dDX0VMQVNUSUNJVFk9MTQs
CglORVRfSVBWNF9ST1VURV9NVFVfRVhQSVJFUz0xNSwKCU5FVF9JUFY0X1JPVVRFX01JTl9QTVRV
PTE2LAoJTkVUX0lQVjRfUk9VVEVfTUlOX0FEVk1TUz0xNwp9OwoKZW51bQp7CglORVRfUFJPVE9f
Q09ORl9BTEw9LTIsCglORVRfUFJPVE9fQ09ORl9ERUZBVUxUPS0zCgoJIAp9OwoKZW51bQp7CglO
RVRfSVBWNF9DT05GX0ZPUldBUkRJTkc9MSwKCU5FVF9JUFY0X0NPTkZfTUNfRk9SV0FSRElORz0y
LAoJTkVUX0lQVjRfQ09ORl9QUk9YWV9BUlA9MywKCU5FVF9JUFY0X0NPTkZfQUNDRVBUX1JFRElS
RUNUUz00LAoJTkVUX0lQVjRfQ09ORl9TRUNVUkVfUkVESVJFQ1RTPTUsCglORVRfSVBWNF9DT05G
X1NFTkRfUkVESVJFQ1RTPTYsCglORVRfSVBWNF9DT05GX1NIQVJFRF9NRURJQT03LAoJTkVUX0lQ
VjRfQ09ORl9SUF9GSUxURVI9OCwKCU5FVF9JUFY0X0NPTkZfQUNDRVBUX1NPVVJDRV9ST1VURT05
LAoJTkVUX0lQVjRfQ09ORl9CT09UUF9SRUxBWT0xMCwKCU5FVF9JUFY0X0NPTkZfTE9HX01BUlRJ
QU5TPTExLAoJTkVUX0lQVjRfQ09ORl9UQUc9MTIKfTsKCiAKZW51bSB7CglORVRfSVBWNl9DT05G
PTE2LAoJTkVUX0lQVjZfTkVJR0g9MTcsCglORVRfSVBWNl9ST1VURT0xOAp9OwoKZW51bSB7CglO
RVRfSVBWNl9ST1VURV9GTFVTSD0xLAoJTkVUX0lQVjZfUk9VVEVfR0NfVEhSRVNIPTIsCglORVRf
SVBWNl9ST1VURV9NQVhfU0laRT0zLAoJTkVUX0lQVjZfUk9VVEVfR0NfTUlOX0lOVEVSVkFMPTQs
CglORVRfSVBWNl9ST1VURV9HQ19USU1FT1VUPTUsCglORVRfSVBWNl9ST1VURV9HQ19JTlRFUlZB
TD02LAoJTkVUX0lQVjZfUk9VVEVfR0NfRUxBU1RJQ0lUWT03LAoJTkVUX0lQVjZfUk9VVEVfTVRV
X0VYUElSRVM9OCwKCU5FVF9JUFY2X1JPVVRFX01JTl9BRFZNU1M9OQp9OwoKZW51bSB7CglORVRf
SVBWNl9GT1JXQVJESU5HPTEsCglORVRfSVBWNl9IT1BfTElNSVQ9MiwKCU5FVF9JUFY2X01UVT0z
LAoJTkVUX0lQVjZfQUNDRVBUX1JBPTQsCglORVRfSVBWNl9BQ0NFUFRfUkVESVJFQ1RTPTUsCglO
RVRfSVBWNl9BVVRPQ09ORj02LAoJTkVUX0lQVjZfREFEX1RSQU5TTUlUUz03LAoJTkVUX0lQVjZf
UlRSX1NPTElDSVRTPTgsCglORVRfSVBWNl9SVFJfU09MSUNJVF9JTlRFUlZBTD05LAoJTkVUX0lQ
VjZfUlRSX1NPTElDSVRfREVMQVk9MTAKfTsKCiAKZW51bSB7CglORVRfTkVJR0hfTUNBU1RfU09M
SUNJVD0xLAoJTkVUX05FSUdIX1VDQVNUX1NPTElDSVQ9MiwKCU5FVF9ORUlHSF9BUFBfU09MSUNJ
VD0zLAoJTkVUX05FSUdIX1JFVFJBTlNfVElNRT00LAoJTkVUX05FSUdIX1JFQUNIQUJMRV9USU1F
PTUsCglORVRfTkVJR0hfREVMQVlfUFJPQkVfVElNRT02LAoJTkVUX05FSUdIX0dDX1NUQUxFX1RJ
TUU9NywKCU5FVF9ORUlHSF9VTlJFU19RTEVOPTgsCglORVRfTkVJR0hfUFJPWFlfUUxFTj05LAoJ
TkVUX05FSUdIX0FOWUNBU1RfREVMQVk9MTAsCglORVRfTkVJR0hfUFJPWFlfREVMQVk9MTEsCglO
RVRfTkVJR0hfTE9DS1RJTUU9MTIsCglORVRfTkVJR0hfR0NfSU5URVJWQUw9MTMsCglORVRfTkVJ
R0hfR0NfVEhSRVNIMT0xNCwKCU5FVF9ORUlHSF9HQ19USFJFU0gyPTE1LAoJTkVUX05FSUdIX0dD
X1RIUkVTSDM9MTYKfTsKCiAKCgogCmVudW0gewoJTkVUX0FUQUxLX0FBUlBfRVhQSVJZX1RJTUU9
MSwKCU5FVF9BVEFMS19BQVJQX1RJQ0tfVElNRT0yLAoJTkVUX0FUQUxLX0FBUlBfUkVUUkFOU01J
VF9MSU1JVD0zLAoJTkVUX0FUQUxLX0FBUlBfUkVTT0xWRV9USU1FPTQKfTsKCgogCmVudW0gewoJ
TkVUX05FVFJPTV9ERUZBVUxUX1BBVEhfUVVBTElUWT0xLAoJTkVUX05FVFJPTV9PQlNPTEVTQ0VO
Q0VfQ09VTlRfSU5JVElBTElTRVI9MiwKCU5FVF9ORVRST01fTkVUV09SS19UVExfSU5JVElBTElT
RVI9MywKCU5FVF9ORVRST01fVFJBTlNQT1JUX1RJTUVPVVQ9NCwKCU5FVF9ORVRST01fVFJBTlNQ
T1JUX01BWElNVU1fVFJJRVM9NSwKCU5FVF9ORVRST01fVFJBTlNQT1JUX0FDS05PV0xFREdFX0RF
TEFZPTYsCglORVRfTkVUUk9NX1RSQU5TUE9SVF9CVVNZX0RFTEFZPTcsCglORVRfTkVUUk9NX1RS
QU5TUE9SVF9SRVFVRVNURURfV0lORE9XX1NJWkU9OCwKCU5FVF9ORVRST01fVFJBTlNQT1JUX05P
X0FDVElWSVRZX1RJTUVPVVQ9OSwKCU5FVF9ORVRST01fUk9VVElOR19DT05UUk9MPTEwLAoJTkVU
X05FVFJPTV9MSU5LX0ZBSUxTX0NPVU5UPTExCn07CgogCmVudW0gewoJTkVUX0FYMjVfSVBfREVG
QVVMVF9NT0RFPTEsCglORVRfQVgyNV9ERUZBVUxUX01PREU9MiwKCU5FVF9BWDI1X0JBQ0tPRkZf
VFlQRT0zLAoJTkVUX0FYMjVfQ09OTkVDVF9NT0RFPTQsCglORVRfQVgyNV9TVEFOREFSRF9XSU5E
T1c9NSwKCU5FVF9BWDI1X0VYVEVOREVEX1dJTkRPVz02LAoJTkVUX0FYMjVfVDFfVElNRU9VVD03
LAoJTkVUX0FYMjVfVDJfVElNRU9VVD04LAoJTkVUX0FYMjVfVDNfVElNRU9VVD05LAoJTkVUX0FY
MjVfSURMRV9USU1FT1VUPTEwLAoJTkVUX0FYMjVfTjI9MTEsCglORVRfQVgyNV9QQUNMRU49MTIs
CglORVRfQVgyNV9QUk9UT0NPTD0xMywKCU5FVF9BWDI1X0RBTUFfU0xBVkVfVElNRU9VVD0xNAp9
OwoKIAplbnVtIHsKCU5FVF9ST1NFX1JFU1RBUlRfUkVRVUVTVF9USU1FT1VUPTEsCglORVRfUk9T
RV9DQUxMX1JFUVVFU1RfVElNRU9VVD0yLAoJTkVUX1JPU0VfUkVTRVRfUkVRVUVTVF9USU1FT1VU
PTMsCglORVRfUk9TRV9DTEVBUl9SRVFVRVNUX1RJTUVPVVQ9NCwKCU5FVF9ST1NFX0FDS19IT0xE
X0JBQ0tfVElNRU9VVD01LAoJTkVUX1JPU0VfUk9VVElOR19DT05UUk9MPTYsCglORVRfUk9TRV9M
SU5LX0ZBSUxfVElNRU9VVD03LAoJTkVUX1JPU0VfTUFYX1ZDUz04LAoJTkVUX1JPU0VfV0lORE9X
X1NJWkU9OSwKCU5FVF9ST1NFX05PX0FDVElWSVRZX1RJTUVPVVQ9MTAKfTsKCiAKZW51bSB7CglO
RVRfWDI1X1JFU1RBUlRfUkVRVUVTVF9USU1FT1VUPTEsCglORVRfWDI1X0NBTExfUkVRVUVTVF9U
SU1FT1VUPTIsCglORVRfWDI1X1JFU0VUX1JFUVVFU1RfVElNRU9VVD0zLAoJTkVUX1gyNV9DTEVB
Ul9SRVFVRVNUX1RJTUVPVVQ9NCwKCU5FVF9YMjVfQUNLX0hPTERfQkFDS19USU1FT1VUPTUKfTsK
CiAKZW51bQp7CglORVRfVFJfUklGX1RJTUVPVVQ9MQp9OwoKIAplbnVtIHsKCU5FVF9ERUNORVRf
Tk9ERV9UWVBFID0gMSwKCU5FVF9ERUNORVRfTk9ERV9BRERSRVNTID0gMiwKCU5FVF9ERUNORVRf
Tk9ERV9OQU1FID0gMywKCU5FVF9ERUNORVRfREVGQVVMVF9ERVZJQ0UgPSA0LAoJTkVUX0RFQ05F
VF9USU1FX1dBSVQgPSA1LAoJTkVUX0RFQ05FVF9ETl9DT1VOVCA9IDYsCglORVRfREVDTkVUX0RJ
X0NPVU5UID0gNywKCU5FVF9ERUNORVRfRFJfQ09VTlQgPSA4LAoJTkVUX0RFQ05FVF9EU1RfR0Nf
SU5URVJWQUwgPSA5LAoJTkVUX0RFQ05FVF9DT05GID0gMTAsCglORVRfREVDTkVUX0RFQlVHX0xF
VkVMID0gMjU1Cn07CgogCmVudW0gewoJTkVUX0tIVFRQRF9ET0NST09UCT0gMSwKCU5FVF9LSFRU
UERfU1RBUlQJPSAyLAoJTkVUX0tIVFRQRF9TVE9QCQk9IDMsCglORVRfS0hUVFBEX1VOTE9BRAk9
IDQsCglORVRfS0hUVFBEX0NMSUVOVFBPUlQJPSA1LAoJTkVUX0tIVFRQRF9QRVJNUkVRCT0gNiwK
CU5FVF9LSFRUUERfUEVSTUZPUkJJRAk9IDcsCglORVRfS0hUVFBEX0xPR0dJTkcJPSA4LAoJTkVU
X0tIVFRQRF9TRVJWRVJQT1JUCT0gOSwKCU5FVF9LSFRUUERfRFlOQU1JQ1NUUklORz0gMTAsCglO
RVRfS0hUVFBEX1NMT1BQWU1JTUUgICA9IDExLAoJTkVUX0tIVFRQRF9USFJFQURTCT0gMTIsCglO
RVRfS0hUVFBEX01BWENPTk5FQ1QJPSAxMwp9OwoKIAplbnVtIHsKCU5FVF9ERUNORVRfQ09ORl9M
T09QQkFDSyA9IC0yLAoJTkVUX0RFQ05FVF9DT05GX0REQ01QID0gLTMsCglORVRfREVDTkVUX0NP
TkZfUFBQID0gLTQsCglORVRfREVDTkVUX0NPTkZfWDI1ID0gLTUsCglORVRfREVDTkVUX0NPTkZf
R1JFID0gLTYsCglORVRfREVDTkVUX0NPTkZfRVRIRVIgPSAtNwoKCSAKfTsKCiAKZW51bSB7CglO
RVRfREVDTkVUX0NPTkZfREVWX1BSSU9SSVRZID0gMSwKCU5FVF9ERUNORVRfQ09ORl9ERVZfVDEg
PSAyLAoJTkVUX0RFQ05FVF9DT05GX0RFVl9UMiA9IDMsCglORVRfREVDTkVUX0NPTkZfREVWX1Qz
ID0gNCwKCU5FVF9ERUNORVRfQ09ORl9ERVZfRk9SV0FSRElORyA9IDUsCglORVRfREVDTkVUX0NP
TkZfREVWX0JMS1NJWkUgPSA2LAoJTkVUX0RFQ05FVF9DT05GX0RFVl9TVEFURSA9IDcKfTsKCiAK
CiAKZW51bQp7CglGU19OUklOT0RFPTEsCSAKCUZTX1NUQVRJTk9ERT0yLAoJRlNfTUFYSU5PREU9
MywJIAoJRlNfTlJEUVVPVD00LAkgCglGU19NQVhEUVVPVD01LAkgCglGU19OUkZJTEU9NiwJIAoJ
RlNfTUFYRklMRT03LAkgCglGU19ERU5UUlk9OCwKCUZTX05SU1VQRVI9OSwJIAoJRlNfTUFYU1VQ
RVI9MTAsCSAKCUZTX09WRVJGTE9XVUlEPTExLAkgCglGU19PVkVSRkxPV0dJRD0xMgkgCn07Cgog
CgogCmVudW0gewoJREVWX0NEUk9NPTEsCglERVZfSFdNT049MiwKCURFVl9QQVJQT1JUPTMKfTsK
CiAKZW51bSB7CglERVZfQ0RST01fSU5GTz0xLAoJREVWX0NEUk9NX0FVVE9DTE9TRT0yLAoJREVW
X0NEUk9NX0FVVE9FSkVDVD0zLAoJREVWX0NEUk9NX0RFQlVHPTQsCglERVZfQ0RST01fTE9DSz01
LAoJREVWX0NEUk9NX0NIRUNLX01FRElBPTYKfTsKCiAKZW51bSB7CglERVZfUEFSUE9SVF9ERUZB
VUxUPS0zCn07CgogCmVudW0gewoJREVWX1BBUlBPUlRfREVGQVVMVF9USU1FU0xJQ0U9MSwKCURF
Vl9QQVJQT1JUX0RFRkFVTFRfU1BJTlRJTUU9Mgp9OwoKIAplbnVtIHsKCURFVl9QQVJQT1JUX1NQ
SU5USU1FPTEsCglERVZfUEFSUE9SVF9IQVJEV0FSRT0yLAoJREVWX1BBUlBPUlRfREVWSUNFUz0z
LAoJREVWX1BBUlBPUlRfQVVUT1BST0JFPTE2Cn07CgogCmVudW0gewoJREVWX1BBUlBPUlRfREVW
SUNFU19BQ1RJVkU9LTMsCn07CgogCmVudW0gewoJREVWX1BBUlBPUlRfREVWSUNFX1RJTUVTTElD
RT0xLAp9OwoKCgpleHRlcm4gICBsb25nIHN5c19zeXNjdGwoc3RydWN0IF9fc3lzY3RsX2FyZ3Mg
Kik7CmV4dGVybiB2b2lkIHN5c2N0bF9pbml0KHZvaWQpOwoKdHlwZWRlZiBzdHJ1Y3QgY3RsX3Rh
YmxlIGN0bF90YWJsZTsKCnR5cGVkZWYgaW50IGN0bF9oYW5kbGVyIChjdGxfdGFibGUgKnRhYmxl
LCBpbnQgKm5hbWUsIGludCBubGVuLAoJCQkgdm9pZCAqb2xkdmFsLCBzaXplX3QgKm9sZGxlbnAs
CgkJCSB2b2lkICpuZXd2YWwsIHNpemVfdCBuZXdsZW4sIAoJCQkgdm9pZCAqKmNvbnRleHQpOwoK
dHlwZWRlZiBpbnQgcHJvY19oYW5kbGVyIChjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLCBzdHJ1
Y3QgZmlsZSAqIGZpbHAsCgkJCSAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnApOwoKZXh0ZXJu
IGludCBwcm9jX2Rvc3RyaW5nKGN0bF90YWJsZSAqLCBpbnQsIHN0cnVjdCBmaWxlICosCgkJCSB2
b2lkICosIHNpemVfdCAqKTsKZXh0ZXJuIGludCBwcm9jX2RvaW50dmVjKGN0bF90YWJsZSAqLCBp
bnQsIHN0cnVjdCBmaWxlICosCgkJCSB2b2lkICosIHNpemVfdCAqKTsKZXh0ZXJuIGludCBwcm9j
X2RvaW50dmVjX2JzZXQoY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKCQkJICAgICAg
dm9pZCAqLCBzaXplX3QgKik7CmV4dGVybiBpbnQgcHJvY19kb2ludHZlY19taW5tYXgoY3RsX3Rh
YmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKCQkJCXZvaWQgKiwgc2l6ZV90ICopOwpleHRlcm4g
aW50IHByb2NfZG9pbnR2ZWNfamlmZmllcyhjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAq
LAoJCQkJIHZvaWQgKiwgc2l6ZV90ICopOwpleHRlcm4gaW50IHByb2NfZG91bG9uZ3ZlY19taW5t
YXgoY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKCQkJCSAgdm9pZCAqLCBzaXplX3Qg
Kik7CmV4dGVybiBpbnQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KGN0bF90YWJs
ZSAqdGFibGUsIGludCwKCQkJCSAgICAgIHN0cnVjdCBmaWxlICosIHZvaWQgKiwgc2l6ZV90ICop
OwoKZXh0ZXJuIGludCBkb19zeXNjdGwgKGludCAqbmFtZSwgaW50IG5sZW4sCgkJICAgICAgdm9p
ZCAqb2xkdmFsLCBzaXplX3QgKm9sZGxlbnAsCgkJICAgICAgdm9pZCAqbmV3dmFsLCBzaXplX3Qg
bmV3bGVuKTsKCmV4dGVybiBpbnQgZG9fc3lzY3RsX3N0cmF0ZWd5IChjdGxfdGFibGUgKnRhYmxl
LCAKCQkJICAgICAgIGludCAqbmFtZSwgaW50IG5sZW4sCgkJCSAgICAgICB2b2lkICpvbGR2YWws
IHNpemVfdCAqb2xkbGVucCwKCQkJICAgICAgIHZvaWQgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwg
dm9pZCAqKiBjb250ZXh0KTsKCmV4dGVybiBjdGxfaGFuZGxlciBzeXNjdGxfc3RyaW5nOwpleHRl
cm4gY3RsX2hhbmRsZXIgc3lzY3RsX2ludHZlYzsKZXh0ZXJuIGN0bF9oYW5kbGVyIHN5c2N0bF9q
aWZmaWVzOwoKZXh0ZXJuIGludCBkb19zdHJpbmcgKAoJdm9pZCAqb2xkdmFsLCBzaXplX3QgKm9s
ZGxlbnAsIHZvaWQgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwKCWludCByZHdyLCBjaGFyICpkYXRh
LCBzaXplX3QgbWF4KTsKZXh0ZXJuIGludCBkb19pbnQgKAoJdm9pZCAqb2xkdmFsLCBzaXplX3Qg
Km9sZGxlbnAsIHZvaWQgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwKCWludCByZHdyLCBpbnQgKmRh
dGEpOwpleHRlcm4gaW50IGRvX3N0cnVjdCAoCgl2b2lkICpvbGR2YWwsIHNpemVfdCAqb2xkbGVu
cCwgdm9pZCAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLAoJaW50IHJkd3IsIHZvaWQgKmRhdGEsIHNp
emVfdCBsZW4pOwoKCiAKIyA2NDYgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51
eC9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oIgoKIApzdHJ1Y3QgY3RsX3RhYmxlIAp7CglpbnQgY3Rs
X25hbWU7CQkJIAoJY29uc3QgY2hhciAqcHJvY25hbWU7CQkgCgl2b2lkICpkYXRhOwoJaW50IG1h
eGxlbjsKCW1vZGVfdCBtb2RlOwoJY3RsX3RhYmxlICpjaGlsZDsKCXByb2NfaGFuZGxlciAqcHJv
Y19oYW5kbGVyOwkgCgljdGxfaGFuZGxlciAqc3RyYXRlZ3k7CQkgCglzdHJ1Y3QgcHJvY19kaXJf
ZW50cnkgKmRlOwkgCgl2b2lkICpleHRyYTE7Cgl2b2lkICpleHRyYTI7Cn07CgogCgpzdHJ1Y3Qg
Y3RsX3RhYmxlX2hlYWRlcgp7CgljdGxfdGFibGUgKmN0bF90YWJsZTsKCXN0cnVjdCBsaXN0X2hl
YWQgY3RsX2VudHJ5Owp9OwoKc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKiByZWdpc3Rlcl9zeXNj
dGxfdGFibGUoY3RsX3RhYmxlICogdGFibGUsIAoJCQkJCQlpbnQgaW5zZXJ0X2F0X2hlYWQpOwp2
b2lkIHVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICogdGFi
bGUpOwoKCgoKCgojIDIzICJzeXNjdGwuYyIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1s
aW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zd2FwY3RsLmgiIDEKCgoKCgoKdHlwZWRlZiBz
dHJ1Y3QgYnVmZmVyX21lbV92MQp7Cgl1bnNpZ25lZCBpbnQJbWluX3BlcmNlbnQ7Cgl1bnNpZ25l
ZCBpbnQJYm9ycm93X3BlcmNlbnQ7Cgl1bnNpZ25lZCBpbnQJbWF4X3BlcmNlbnQ7Cn0gYnVmZmVy
X21lbV92MTsKdHlwZWRlZiBidWZmZXJfbWVtX3YxIGJ1ZmZlcl9tZW1fdDsKZXh0ZXJuIGJ1ZmZl
cl9tZW1fdCBidWZmZXJfbWVtOwpleHRlcm4gYnVmZmVyX21lbV90IHBhZ2VfY2FjaGU7Cgp0eXBl
ZGVmIHN0cnVjdCBmcmVlcGFnZXNfdjEKewoJdW5zaWduZWQgaW50CW1pbjsKCXVuc2lnbmVkIGlu
dAlsb3c7Cgl1bnNpZ25lZCBpbnQJaGlnaDsKfSBmcmVlcGFnZXNfdjE7CnR5cGVkZWYgZnJlZXBh
Z2VzX3YxIGZyZWVwYWdlc190OwpleHRlcm4gZnJlZXBhZ2VzX3QgZnJlZXBhZ2VzOwoKdHlwZWRl
ZiBzdHJ1Y3QgcGFnZXJfZGFlbW9uX3YxCnsKCXVuc2lnbmVkIGludAl0cmllc19iYXNlOwoJdW5z
aWduZWQgaW50CXRyaWVzX21pbjsKCXVuc2lnbmVkIGludAlzd2FwX2NsdXN0ZXI7Cn0gcGFnZXJf
ZGFlbW9uX3YxOwp0eXBlZGVmIHBhZ2VyX2RhZW1vbl92MSBwYWdlcl9kYWVtb25fdDsKZXh0ZXJu
IHBhZ2VyX2RhZW1vbl90IHBhZ2VyX2RhZW1vbjsKCgojIDI0ICJzeXNjdGwuYyIgMgoKIyAxICIv
b3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9wcm9jX2Zz
LmgiIDEKCgoKCgoKIAoKCgogCgoKCgoKIAoKCgplbnVtIHsKCVBST0NfUk9PVF9JTk8gPSAxLAp9
OwoKIAoKCgoKCgogCiMgNDYgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9p
bmNsdWRlL2xpbnV4L3Byb2NfZnMuaCIKCnR5cGVkZWYJaW50IChyZWFkX3Byb2NfdCkoY2hhciAq
cGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCgkJCSAgaW50IGNvdW50LCBpbnQgKmVvZiwg
dm9pZCAqZGF0YSk7CnR5cGVkZWYJaW50ICh3cml0ZV9wcm9jX3QpKHN0cnVjdCBmaWxlICpmaWxl
LCBjb25zdCBjaGFyICpidWZmZXIsCgkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRh
dGEpOwp0eXBlZGVmIGludCAoZ2V0X2luZm9fdCkoY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50
KTsKCnN0cnVjdCBwcm9jX2Rpcl9lbnRyeSB7Cgl1bnNpZ25lZCBzaG9ydCBsb3dfaW5vOwoJdW5z
aWduZWQgc2hvcnQgbmFtZWxlbjsKCWNvbnN0IGNoYXIgKm5hbWU7Cgltb2RlX3QgbW9kZTsKCW5s
aW5rX3Qgbmxpbms7Cgl1aWRfdCB1aWQ7CglnaWRfdCBnaWQ7Cgl1bnNpZ25lZCBsb25nIHNpemU7
CglzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyAqIHByb2NfaW9wczsKCXN0cnVjdCBmaWxlX29wZXJh
dGlvbnMgKiBwcm9jX2ZvcHM7CglnZXRfaW5mb190ICpnZXRfaW5mbzsKCXN0cnVjdCBtb2R1bGUg
Km93bmVyOwoJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpuZXh0LCAqcGFyZW50LCAqc3ViZGlyOwoJ
dm9pZCAqZGF0YTsKCXJlYWRfcHJvY190ICpyZWFkX3Byb2M7Cgl3cml0ZV9wcm9jX3QgKndyaXRl
X3Byb2M7Cgl1bnNpZ25lZCBpbnQgY291bnQ7CSAKCWludCBkZWxldGVkOwkJIAoJa2Rldl90CXJk
ZXY7Cn07CgoKCgoKZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSBwcm9jX3Jvb3Q7CmV4dGVy
biBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nfcm9vdF9mczsKZXh0ZXJuIHN0cnVjdCBwcm9j
X2Rpcl9lbnRyeSAqcHJvY19uZXQ7CmV4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nf
YnVzOwpleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3Jvb3RfZHJpdmVyOwpleHRl
cm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3Jvb3Rfa2NvcmU7CgpleHRlcm4gdm9pZCBw
cm9jX3Jvb3RfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgcHJvY19taXNjX2luaXQodm9pZCk7Cgpz
dHJ1Y3QgZGVudHJ5ICpwcm9jX3BpZF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBk
ZW50cnkgKiBkZW50cnkpOwp2b2lkIHByb2NfcGlkX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUg
Kmlub2RlKTsKaW50IHByb2NfcGlkX3JlYWRkaXIoc3RydWN0IGZpbGUgKiBmaWxwLCB2b2lkICog
ZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcik7CgpleHRlcm4gaW50IHByb2NfcmVnaXN0ZXIoc3Ry
dWN0IHByb2NfZGlyX2VudHJ5ICosIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKTsKCmV4dGVybiBz
dHJ1Y3QgcHJvY19kaXJfZW50cnkgKmNyZWF0ZV9wcm9jX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUs
IG1vZGVfdCBtb2RlLAoJCQkJCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCk7CmV4dGVy
biB2b2lkIHJlbW92ZV9wcm9jX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwcm9jX2Rp
cl9lbnRyeSAqcGFyZW50KTsKCmV4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnByb2Nfc3VwZXJf
YmxvY2tzOwpleHRlcm4gc3RydWN0IHN1cGVyX2Jsb2NrICpwcm9jX3JlYWRfc3VwZXIoc3RydWN0
IHN1cGVyX2Jsb2NrICosdm9pZCAqLGludCk7CmV4dGVybiBzdHJ1Y3QgaW5vZGUgKiBwcm9jX2dl
dF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkg
Kik7CgpleHRlcm4gaW50IHByb2NfbWF0Y2goaW50LCBjb25zdCBjaGFyICosc3RydWN0IHByb2Nf
ZGlyX2VudHJ5ICopOwoKIAoKCgoKCgpleHRlcm4gaW50IHByb2NfcmVhZGRpcihzdHJ1Y3QgZmls
ZSAqLCB2b2lkICosIGZpbGxkaXJfdCk7CmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICpwcm9jX2xvb2t1
cChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKCmV4dGVybiBzdHJ1Y3QgZmlsZV9v
cGVyYXRpb25zIHByb2Nfa2NvcmVfb3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJh
dGlvbnMgcHJvY19rbXNnX29wZXJhdGlvbnM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z
IHBwY19odGFiX29wZXJhdGlvbnM7CgogCgoKZXh0ZXJuIHZvaWQgcHJvY190dHlfaW5pdCh2b2lk
KTsKZXh0ZXJuIHZvaWQgcHJvY190dHlfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB0dHlfZHJpdmVy
ICpkcml2ZXIpOwpleHRlcm4gdm9pZCBwcm9jX3R0eV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qg
dHR5X2RyaXZlciAqZHJpdmVyKTsKCiAKCgpleHRlcm4gdm9pZCBwcm9jX2RldmljZV90cmVlX2lu
aXQodm9pZCk7CgpleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3N5bWxpbmsoY29u
c3QgY2hhciAqLAoJCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqLGNoYXIgKik7CmV4dGVybiBzdHJ1
Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbWtub2QoY29uc3QgY2hhciAqLG1vZGVfdCwKCQlzdHJ1
Y3QgcHJvY19kaXJfZW50cnkgKixrZGV2X3QpOwpleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5
ICpwcm9jX21rZGlyKGNvbnN0IGNoYXIgKixzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKik7CgpleHRl
cm4gaW5saW5lIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqY3JlYXRlX3Byb2NfcmVhZF9lbnRyeShj
b25zdCBjaGFyICpuYW1lLAoJbW9kZV90IG1vZGUsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYmFz
ZSwgCglyZWFkX3Byb2NfdCAqcmVhZF9wcm9jLCB2b2lkICogZGF0YSkKewoJc3RydWN0IHByb2Nf
ZGlyX2VudHJ5ICpyZXM9Y3JlYXRlX3Byb2NfZW50cnkobmFtZSxtb2RlLGJhc2UpOwoJaWYgKHJl
cykgewoJCXJlcy0+cmVhZF9wcm9jPXJlYWRfcHJvYzsKCQlyZXMtPmRhdGE9ZGF0YTsKCX0KCXJl
dHVybiByZXM7Cn0KIApleHRlcm4gaW5saW5lIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqY3JlYXRl
X3Byb2NfaW5mb19lbnRyeShjb25zdCBjaGFyICpuYW1lLAoJbW9kZV90IG1vZGUsIHN0cnVjdCBw
cm9jX2Rpcl9lbnRyeSAqYmFzZSwgZ2V0X2luZm9fdCAqZ2V0X2luZm8pCnsKCXN0cnVjdCBwcm9j
X2Rpcl9lbnRyeSAqcmVzPWNyZWF0ZV9wcm9jX2VudHJ5KG5hbWUsbW9kZSxiYXNlKTsKCWlmIChy
ZXMpIHJlcy0+Z2V0X2luZm89Z2V0X2luZm87CglyZXR1cm4gcmVzOwp9CiAKZXh0ZXJuIGlubGlu
ZSBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbmV0X2NyZWF0ZShjb25zdCBjaGFyICpuYW1l
LAoJbW9kZV90IG1vZGUsIGdldF9pbmZvX3QgKmdldF9pbmZvKQp7CglyZXR1cm4gY3JlYXRlX3By
b2NfaW5mb19lbnRyeShuYW1lLG1vZGUscHJvY19uZXQsZ2V0X2luZm8pOwp9CgpleHRlcm4gaW5s
aW5lIHZvaWQgcHJvY19uZXRfcmVtb3ZlKGNvbnN0IGNoYXIgKm5hbWUpCnsKCXJlbW92ZV9wcm9j
X2VudHJ5KG5hbWUscHJvY19uZXQpOwp9CgoKIyAyMDAgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxp
bnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaCIKCgojIDI1ICJzeXNjdGwuYyIg
MgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51
eC9jdHlwZS5oIiAxCgoKCiAKCgoKCgoKCgoKCgoKCmV4dGVybiB1bnNpZ25lZCBjaGFyIF9jdHlw
ZVtdOwoKCgoKCgoKCgoKCgoKCgoKCgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgX190b2xv
d2VyKHVuc2lnbmVkIGNoYXIgYykKewoJaWYgKCgoKF9jdHlwZVsoaW50KSh1bnNpZ25lZCBjaGFy
KShjKV0pJigweDAxKSkgIT0gMCkpCgkJYyAtPSAnQSctJ2EnOwoJcmV0dXJuIGM7Cn0KCnN0YXRp
YyBpbmxpbmUgdW5zaWduZWQgY2hhciBfX3RvdXBwZXIodW5zaWduZWQgY2hhciBjKQp7CglpZiAo
KCgoX2N0eXBlWyhpbnQpKHVuc2lnbmVkIGNoYXIpKGMpXSkmKDB4MDIpKSAhPSAwKSkKCQljIC09
ICdhJy0nQSc7CglyZXR1cm4gYzsKfQoKCgoKCiMgMjYgInN5c2N0bC5jIiAyCgojIDEgIi9vcHQv
Y3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L3V0c25hbWUuaCIg
MQoKCgoKCnN0cnVjdCBvbGRvbGRfdXRzbmFtZSB7CgljaGFyIHN5c25hbWVbOV07CgljaGFyIG5v
ZGVuYW1lWzldOwoJY2hhciByZWxlYXNlWzldOwoJY2hhciB2ZXJzaW9uWzldOwoJY2hhciBtYWNo
aW5lWzldOwp9OwoKCgpzdHJ1Y3Qgb2xkX3V0c25hbWUgewoJY2hhciBzeXNuYW1lWzY1XTsKCWNo
YXIgbm9kZW5hbWVbNjVdOwoJY2hhciByZWxlYXNlWzY1XTsKCWNoYXIgdmVyc2lvbls2NV07Cglj
aGFyIG1hY2hpbmVbNjVdOwp9OwoKc3RydWN0IG5ld191dHNuYW1lIHsKCWNoYXIgc3lzbmFtZVs2
NV07CgljaGFyIG5vZGVuYW1lWzY1XTsKCWNoYXIgcmVsZWFzZVs2NV07CgljaGFyIHZlcnNpb25b
NjVdOwoJY2hhciBtYWNoaW5lWzY1XTsKCWNoYXIgZG9tYWlubmFtZVs2NV07Cn07CgpleHRlcm4g
c3RydWN0IG5ld191dHNuYW1lIHN5c3RlbV91dHNuYW1lOwoKZXh0ZXJuIHN0cnVjdCByd19zZW1h
cGhvcmUgdXRzX3NlbTsKCiMgMjcgInN5c2N0bC5jIiAyCgoKIyAxICIvb3B0L2Nyb3NzZGV2L21p
cHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9saW51eC9zbXBfbG9jay5oIiAxCgoKCgoKCgoK
CgoKCgoKCgoKCiMgMjkgInN5c2N0bC5jIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxp
bnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2luaXQuaCIgMQoKCgoKCiAKIyAzNyAiL29wdC9j
cm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvbGludXgvaW5pdC5oIgoKCgoK
CiAKCgp0eXBlZGVmIGludCAoKmluaXRjYWxsX3QpKHZvaWQpOwoKZXh0ZXJuIGluaXRjYWxsX3Qg
X19pbml0Y2FsbF9zdGFydCwgX19pbml0Y2FsbF9lbmQ7CgoKCgogCgoKc3RydWN0IGtlcm5lbF9w
YXJhbSB7Cgljb25zdCBjaGFyICpzdHI7CglpbnQgKCpzZXR1cF9mdW5jKShjaGFyICopOwp9OwoK
ZXh0ZXJuIHN0cnVjdCBrZXJuZWxfcGFyYW0gX19zZXR1cF9zdGFydCwgX19zZXR1cF9lbmQ7CgoK
CgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKIyAxMTEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxp
bnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2luaXQuaCIKCgoKCgoKCgoKCgoKCgoKCgoKCgoj
IDMwICJzeXNjdGwuYyIgMgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGlu
dXgvaW5jbHVkZS9saW51eC9zeXNycS5oIiAxCiAKCgoKCgoKCgoKCnN0cnVjdCBwdF9yZWdzOwpz
dHJ1Y3Qga2JkX3N0cnVjdDsKc3RydWN0IHR0eV9zdHJ1Y3Q7CgogCgoKCgp2b2lkIGhhbmRsZV9z
eXNycShpbnQsIHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCBrYmRfc3RydWN0ICosIHN0cnVjdCB0
dHlfc3RydWN0ICopOwoKIAoKZXh0ZXJuIGludCBlbWVyZ2VuY3lfc3luY19zY2hlZHVsZWQ7CgoK
Cgp2b2lkIGRvX2VtZXJnZW5jeV9zeW5jKHZvaWQpOwoKCgoKCgoKCgpleHRlcm4gaW50IHN5c3Jx
X2VuYWJsZWQ7CiMgMzEgInN5c2N0bC5jIiAyCgojIDEgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxp
bnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2hpZ2h1aWQuaCIgMQoKCgoKCgogCiMgMjMgIi9v
cHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2xpbnV4L2hpZ2h1aWQu
aCIKCgogCiMgMzQgIi9vcHQvY3Jvc3NkZXYvbWlwc2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRl
L2xpbnV4L2hpZ2h1aWQuaCIKCmV4dGVybiBpbnQgb3ZlcmZsb3d1aWQ7CmV4dGVybiBpbnQgb3Zl
cmZsb3dnaWQ7CgoKCgoKIyA2NyAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4
L2luY2x1ZGUvbGludXgvaGlnaHVpZC5oIgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKZXh0ZXJu
IGludCBmc19vdmVyZmxvd3VpZDsKZXh0ZXJuIGludCBmc19vdmVyZmxvd2dpZDsKCgoKCiAKCgoK
CgoKCgoKCiMgMzIgInN5c2N0bC5jIiAyCgoKIyAxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51
eC9zcmMvbGludXgvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIiAxCiAKIyAxMCAiL29wdC9jcm9zc2Rl
di9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKCgoKCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKIAojIDQ5ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9z
cmMvbGludXgvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgoKCgoKCgoKZXh0ZXJuIGlubGluZSBpbnQg
dmVyaWZ5X2FyZWEoaW50IHR5cGUsIGNvbnN0IHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIHNp
emUpCnsKCXJldHVybiAoKChfX3NpZ25lZF9fIGxvbmcpKCgoKGxvbmcpKChjdXJyZW50LT50aHJl
YWQuY3VycmVudF9kcykuc2VnKSkpJigoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKSB8IChzaXplKSB8
ICgoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKSsoc2l6ZSkpKSkpID49IDApID8gMCA6IC0xNDsKfQoK
IAojIDczICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20v
dWFjY2Vzcy5oIgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IF9fbGFyZ2Vf
c3RydWN0IHsgdW5zaWduZWQgbG9uZyBidWZbMTAwXTsgfTsKCgogCgoKCgoKCgoKCgojIDEyOSAi
L29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3VhY2Nlc3Mu
aCIKCgojIDE0NSAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUv
YXNtL3VhY2Nlc3MuaCIKCgojIDE2MiAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xp
bnV4L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKCiAKCgoKIyAxODUgIi9vcHQvY3Jvc3NkZXYvbWlw
c2VsLWxpbnV4L3NyYy9saW51eC9pbmNsdWRlL2FzbS91YWNjZXNzLmgiCgpleHRlcm4gdm9pZCBf
X2dldF91c2VyX3Vua25vd24odm9pZCk7CgogCgoKCgoKCgoKCgojIDIxMiAiL29wdC9jcm9zc2Rl
di9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKCgojIDIyOCAi
L29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUvYXNtL3VhY2Nlc3Mu
aCIKCgojIDI0NCAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xpbnV4L2luY2x1ZGUv
YXNtL3VhY2Nlc3MuaCIKCgojIDI2MyAiL29wdC9jcm9zc2Rldi9taXBzZWwtbGludXgvc3JjL2xp
bnV4L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKCmV4dGVybiB2b2lkIF9fcHV0X3VzZXJfdW5rbm93
bih2b2lkKTsKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIHNpemVfdCBfX2NvcHlf
dXNlcih2b2lkICpfX3RvLCBjb25zdCB2b2lkICpfX2Zyb20sIHNpemVfdCBfX24pOwoKCiMgMzEz
ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vdWFjY2Vz
cy5oIgoKCiMgMzM5ICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMvbGludXgvaW5jbHVk
ZS9hc20vdWFjY2Vzcy5oIgoKCiMgMzYxICIvb3B0L2Nyb3NzZGV2L21pcHNlbC1saW51eC9zcmMv
bGludXgvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgoKCiMgMzg4ICIvb3B0L2Nyb3NzZGV2L21pcHNl
bC1saW51eC9zcmMvbGludXgvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgoKZXh0ZXJuIGlubGluZSBf
X2tlcm5lbF9zaXplX3QKX19jbGVhcl91c2VyKHZvaWQgKmFkZHIsIF9fa2VybmVsX3NpemVfdCBz
aXplKQp7CglfX2tlcm5lbF9zaXplX3QgcmVzOwoKCV9fYXNtX18gX192b2xhdGlsZV9fKAoJCSJt
b3ZlXHQkNCwgJTFcblx0IgoJCSJtb3ZlXHQkNSwgJDBcblx0IgoJCSJtb3ZlXHQkNiwgJTJcblx0
IgoJCSJqYWxcdCIiX19iemVybyIgIlxuXHQiCgkJIm1vdmVcdCUwLCAkNiIKCQk6ICI9ciIgKHJl
cykKCQk6ICJyIiAoYWRkciksICJyIiAoc2l6ZSkKCQk6ICIkNCIsICIkNSIsICIkNiIsICIkOCIs
ICIkOSIsICIkMzEiKTsKCglyZXR1cm4gcmVzOwp9CgoKCgoKCgoKIAoKCgpleHRlcm4gaW5saW5l
IGxvbmcKX19zdHJuY3B5X2Zyb21fdXNlcihjaGFyICpfX3RvLCBjb25zdCBjaGFyICpfX2Zyb20s
IGxvbmcgX19sZW4pCnsKCWxvbmcgcmVzOwoKCV9fYXNtX18gX192b2xhdGlsZV9fKAoJCSJtb3Zl
XHQkNCwgJTFcblx0IgoJCSJtb3ZlXHQkNSwgJTJcblx0IgoJCSJtb3ZlXHQkNiwgJTNcblx0IgoJ
CSJqYWxcdCIiX19zdHJuY3B5X2Zyb21fdXNlcl9ub2NoZWNrX2FzbSIgIlxuXHQiCgkJIm1vdmVc
dCUwLCAkMiIKCQk6ICI9ciIgKHJlcykKCQk6ICJyIiAoX190byksICJyIiAoX19mcm9tKSwgInIi
IChfX2xlbikKCQk6ICIkMiIsICIkMyIsICIkNCIsICIkNSIsICIkNiIsICIkOCIsICIkMzEiLCAi
bWVtb3J5Iik7CgoJcmV0dXJuIHJlczsKfQoKZXh0ZXJuIGlubGluZSBsb25nCnN0cm5jcHlfZnJv
bV91c2VyKGNoYXIgKl9fdG8sIGNvbnN0IGNoYXIgKl9fZnJvbSwgbG9uZyBfX2xlbikKewoJbG9u
ZyByZXM7CgoJX19hc21fXyBfX3ZvbGF0aWxlX18oCgkJIm1vdmVcdCQ0LCAlMVxuXHQiCgkJIm1v
dmVcdCQ1LCAlMlxuXHQiCgkJIm1vdmVcdCQ2LCAlM1xuXHQiCgkJImphbFx0IiJfX3N0cm5jcHlf
ZnJvbV91c2VyX2FzbSIgIlxuXHQiCgkJIm1vdmVcdCUwLCAkMiIKCQk6ICI9ciIgKHJlcykKCQk6
ICJyIiAoX190byksICJyIiAoX19mcm9tKSwgInIiIChfX2xlbikKCQk6ICIkMiIsICIkMyIsICIk
NCIsICIkNSIsICIkNiIsICIkOCIsICIkMzEiLCAibWVtb3J5Iik7CgoJcmV0dXJuIHJlczsKfQoK
IApleHRlcm4gaW5saW5lIGxvbmcgX19zdHJsZW5fdXNlcihjb25zdCBjaGFyICpzKQp7Cglsb25n
IHJlczsKCglfX2FzbV9fIF9fdm9sYXRpbGVfXygKCQkibW92ZVx0JDQsICUxXG5cdCIKCQkiamFs
XHQiIl9fc3RybGVuX3VzZXJfbm9jaGVja19hc20iICJcblx0IgoJCSJtb3ZlXHQlMCwgJDIiCgkJ
OiAiPXIiIChyZXMpCgkJOiAiciIgKHMpCgkJOiAiJDIiLCAiJDQiLCAiJDgiLCAiJDMxIik7CgoJ
cmV0dXJuIHJlczsKfQoKZXh0ZXJuIGlubGluZSBsb25nIHN0cmxlbl91c2VyKGNvbnN0IGNoYXIg
KnMpCnsKCWxvbmcgcmVzOwoKCV9fYXNtX18gX192b2xhdGlsZV9fKAoJCSJtb3ZlXHQkNCwgJTFc
blx0IgoJCSJqYWxcdCIiX19zdHJsZW5fdXNlcl9hc20iICJcblx0IgoJCSJtb3ZlXHQlMCwgJDIi
CgkJOiAiPXIiIChyZXMpCgkJOiAiciIgKHMpCgkJOiAiJDIiLCAiJDQiLCAiJDgiLCAiJDMxIik7
CgoJcmV0dXJuIHJlczsKfQoKIApleHRlcm4gaW5saW5lIGxvbmcgX19zdHJubGVuX3VzZXIoY29u
c3QgY2hhciAqcywgbG9uZyBuKQp7Cglsb25nIHJlczsKCglfX2FzbV9fIF9fdm9sYXRpbGVfXygK
CQkibW92ZVx0JDQsICUxXG5cdCIKCQkibW92ZVx0JDUsICUyXG5cdCIKCQkiamFsXHQiIl9fc3Ry
bmxlbl91c2VyX25vY2hlY2tfYXNtIiAiXG5cdCIKCQkibW92ZVx0JTAsICQyIgoJCTogIj1yIiAo
cmVzKQoJCTogInIiIChzKSwgInIiIChuKQoJCTogIiQyIiwgIiQ0IiwgIiQ1IiwgIiQ4IiwgIiQz
MSIpOwoKCXJldHVybiByZXM7Cn0KCmV4dGVybiBpbmxpbmUgbG9uZyBzdHJubGVuX3VzZXIoY29u
c3QgY2hhciAqcywgbG9uZyBuKQp7Cglsb25nIHJlczsKCglfX2FzbV9fIF9fdm9sYXRpbGVfXygK
CQkibW92ZVx0JDQsICUxXG5cdCIKCQkibW92ZVx0JDUsICUyXG5cdCIKCQkiamFsXHQiIl9fc3Ry
bmxlbl91c2VyX2FzbSIgIlxuXHQiCgkJIm1vdmVcdCUwLCAkMiIKCQk6ICI9ciIgKHJlcykKCQk6
ICJyIiAocyksICJyIiAobikKCQk6ICIkMiIsICIkNCIsICIkNSIsICIkOCIsICIkMzEiKTsKCgly
ZXR1cm4gcmVzOwp9CgpzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5CnsKCXVuc2lnbmVkIGxv
bmcgaW5zbjsKCXVuc2lnbmVkIGxvbmcgbmV4dGluc247Cn07CgogCmV4dGVybiB1bnNpZ25lZCBs
b25nIHNlYXJjaF9leGNlcHRpb25fdGFibGUodW5zaWduZWQgbG9uZyBhZGRyKTsKCiAKCgoKCgoK
IyAzNCAic3lzY3RsLmMiIDIKCgoKCgoKCgogCmV4dGVybiBpbnQgcGFuaWNfdGltZW91dDsKZXh0
ZXJuIGludCBjb25zb2xlX2xvZ2xldmVsLCBDX0FfRDsKZXh0ZXJuIGludCBiZGZfcHJtW10sIGJk
Zmx1c2hfbWluW10sIGJkZmx1c2hfbWF4W107CmV4dGVybiBpbnQgc3lzY3RsX292ZXJjb21taXRf
bWVtb3J5OwpleHRlcm4gaW50IG1heF90aHJlYWRzOwpleHRlcm4gaW50IG5yX3F1ZXVlZF9zaWdu
YWxzLCBtYXhfcXVldWVkX3NpZ25hbHM7CgogCnN0YXRpYyBpbnQgbWF4b2xkdWlkID0gNjU1MzU7
CnN0YXRpYyBpbnQgbWlub2xkdWlkID0gMDsKCgoKCgoKCgpleHRlcm4gc2l6ZV90IHNobV9jdGxt
YXg7CmV4dGVybiBpbnQgbXNnX2N0bG1heDsKZXh0ZXJuIGludCBtc2dfY3RsbW5iOwpleHRlcm4g
aW50IG1zZ19jdGxtbmk7CmV4dGVybiBpbnQgc2VtX2N0bHNbXTsKCgoKCgoKCgoKCgoKCgoKCmV4
dGVybiBpbnQgcGd0X2NhY2hlX3dhdGVyW107CgpzdGF0aWMgaW50IHBhcnNlX3RhYmxlKGludCAq
LCBpbnQsIHZvaWQgKiwgc2l6ZV90ICosIHZvaWQgKiwgc2l6ZV90LAoJCSAgICAgICBjdGxfdGFi
bGUgKiwgdm9pZCAqKik7CnN0YXRpYyBpbnQgcHJvY19kb3V0c3N0cmluZyhjdGxfdGFibGUgKnRh
YmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAoJCSAgdm9pZCAqYnVmZmVyLCBzaXpl
X3QgKmxlbnApOwoKc3RhdGljIGN0bF90YWJsZSByb290X3RhYmxlW107CnN0YXRpYyBzdHJ1Y3Qg
Y3RsX3RhYmxlX2hlYWRlciByb290X3RhYmxlX2hlYWRlciA9Cgl7IHJvb3RfdGFibGUsIHsgJihy
b290X3RhYmxlX2hlYWRlci5jdGxfZW50cnkpLCAmKHJvb3RfdGFibGVfaGVhZGVyLmN0bF9lbnRy
eSkgfSB9OwoKc3RhdGljIGN0bF90YWJsZSBrZXJuX3RhYmxlW107CnN0YXRpYyBjdGxfdGFibGUg
dm1fdGFibGVbXTsKCmV4dGVybiBjdGxfdGFibGUgbmV0X3RhYmxlW107CgpzdGF0aWMgY3RsX3Rh
YmxlIHByb2NfdGFibGVbXTsKc3RhdGljIGN0bF90YWJsZSBmc190YWJsZVtdOwpzdGF0aWMgY3Rs
X3RhYmxlIGRlYnVnX3RhYmxlW107CnN0YXRpYyBjdGxfdGFibGUgZGV2X3RhYmxlW107CmV4dGVy
biBjdGxfdGFibGUgcmFuZG9tX3RhYmxlW107CgogCgoKCnN0YXRpYyBzc2l6ZV90IHByb2NfcmVh
ZHN5cyhzdHJ1Y3QgZmlsZSAqLCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOwpzdGF0aWMgc3Np
emVfdCBwcm9jX3dyaXRlc3lzKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBs
b2ZmX3QgKik7CnN0YXRpYyBpbnQgcHJvY19zeXNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKiwg
aW50KTsKCnN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19zeXNfZmlsZV9vcGVyYXRpb25zID0g
ewoJcmVhZDoJCXByb2NfcmVhZHN5cywKCXdyaXRlOgkJcHJvY193cml0ZXN5cywKfTsKCnN0YXRp
YyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwcm9jX3N5c19pbm9kZV9vcGVyYXRpb25zID0gewoJ
cGVybWlzc2lvbjoJcHJvY19zeXNfcGVybWlzc2lvbiwKfTsKCmV4dGVybiBzdHJ1Y3QgcHJvY19k
aXJfZW50cnkgKnByb2Nfc3lzX3Jvb3Q7CgpzdGF0aWMgdm9pZCByZWdpc3Rlcl9wcm9jX3RhYmxl
KGN0bF90YWJsZSAqLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKik7CnN0YXRpYyB2b2lkIHVucmVn
aXN0ZXJfcHJvY190YWJsZShjdGxfdGFibGUgKiwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICopOwoK
CmV4dGVybiBpbnQgaW5vZGVzX3N0YXRbXTsKZXh0ZXJuIGludCBkZW50cnlfc3RhdFtdOwoKIAoK
c3RhdGljIGN0bF90YWJsZSByb290X3RhYmxlW10gPSB7Cgl7Q1RMX0tFUk4sICJrZXJuZWwiLCAo
KHZvaWQgKikwKSwgMCwgMDU1NSwga2Vybl90YWJsZX0sCgl7Q1RMX1ZNLCAidm0iLCAoKHZvaWQg
KikwKSwgMCwgMDU1NSwgdm1fdGFibGV9LAoKCXtDVExfTkVULCAibmV0IiwgKCh2b2lkICopMCks
IDAsIDA1NTUsIG5ldF90YWJsZX0sCgoJe0NUTF9QUk9DLCAicHJvYyIsICgodm9pZCAqKTApLCAw
LCAwNTU1LCBwcm9jX3RhYmxlfSwKCXtDVExfRlMsICJmcyIsICgodm9pZCAqKTApLCAwLCAwNTU1
LCBmc190YWJsZX0sCgl7Q1RMX0RFQlVHLCAiZGVidWciLCAoKHZvaWQgKikwKSwgMCwgMDU1NSwg
ZGVidWdfdGFibGV9LAogICAgICAgIHtDVExfREVWLCAiZGV2IiwgKCh2b2lkICopMCksIDAsIDA1
NTUsIGRldl90YWJsZX0sCgl7MH0KfTsKCnN0YXRpYyBjdGxfdGFibGUga2Vybl90YWJsZVtdID0g
ewoJe0tFUk5fT1NUWVBFLCAib3N0eXBlIiwgc3lzdGVtX3V0c25hbWUuc3lzbmFtZSwgNjQsCgkg
MDQ0NCwgKCh2b2lkICopMCksICZwcm9jX2RvdXRzc3RyaW5nLCAmc3lzY3RsX3N0cmluZ30sCgl7
S0VSTl9PU1JFTEVBU0UsICJvc3JlbGVhc2UiLCBzeXN0ZW1fdXRzbmFtZS5yZWxlYXNlLCA2NCwK
CSAwNDQ0LCAoKHZvaWQgKikwKSwgJnByb2NfZG91dHNzdHJpbmcsICZzeXNjdGxfc3RyaW5nfSwK
CXtLRVJOX1ZFUlNJT04sICJ2ZXJzaW9uIiwgc3lzdGVtX3V0c25hbWUudmVyc2lvbiwgNjQsCgkg
MDQ0NCwgKCh2b2lkICopMCksICZwcm9jX2RvdXRzc3RyaW5nLCAmc3lzY3RsX3N0cmluZ30sCgl7
S0VSTl9OT0RFTkFNRSwgImhvc3RuYW1lIiwgc3lzdGVtX3V0c25hbWUubm9kZW5hbWUsIDY0LAoJ
IDA2NDQsICgodm9pZCAqKTApLCAmcHJvY19kb3V0c3N0cmluZywgJnN5c2N0bF9zdHJpbmd9LAoJ
e0tFUk5fRE9NQUlOTkFNRSwgImRvbWFpbm5hbWUiLCBzeXN0ZW1fdXRzbmFtZS5kb21haW5uYW1l
LCA2NCwKCSAwNjQ0LCAoKHZvaWQgKikwKSwgJnByb2NfZG91dHNzdHJpbmcsICZzeXNjdGxfc3Ry
aW5nfSwKCXtLRVJOX1BBTklDLCAicGFuaWMiLCAmcGFuaWNfdGltZW91dCwgc2l6ZW9mKGludCks
CgkgMDY0NCwgKCh2b2lkICopMCksICZwcm9jX2RvaW50dmVjfSwKCXtLRVJOX0NBUF9CU0VULCAi
Y2FwLWJvdW5kIiwgJmNhcF9ic2V0LCBzaXplb2Yoa2VybmVsX2NhcF90KSwKCSAwNjAwLCAoKHZv
aWQgKikwKSwgJnByb2NfZG9pbnR2ZWNfYnNldH0sCgoKCgoKCgoKCgoKIyAxODAgInN5c2N0bC5j
IgoJe0tFUk5fQ1RMQUxUREVMLCAiY3RybC1hbHQtZGVsIiwgJkNfQV9ELCBzaXplb2YoaW50KSwK
CSAwNjQ0LCAoKHZvaWQgKikwKSwgJnByb2NfZG9pbnR2ZWN9LAoJe0tFUk5fUFJJTlRLLCAicHJp
bnRrIiwgJmNvbnNvbGVfbG9nbGV2ZWwsIDQqc2l6ZW9mKGludCksCgkgMDY0NCwgKCh2b2lkICop
MCksICZwcm9jX2RvaW50dmVjfSwKCgoKCgoKCgoKCgoKCXtLRVJOX1JUU0lHTlIsICJydHNpZy1u
ciIsICZucl9xdWV1ZWRfc2lnbmFscywgc2l6ZW9mKGludCksCgkgMDQ0NCwgKCh2b2lkICopMCks
ICZwcm9jX2RvaW50dmVjfSwKCXtLRVJOX1JUU0lHTUFYLCAicnRzaWctbWF4IiwgJm1heF9xdWV1
ZWRfc2lnbmFscywgc2l6ZW9mKGludCksCgkgMDY0NCwgKCh2b2lkICopMCksICZwcm9jX2RvaW50
dmVjfSwKCgl7S0VSTl9TSE1NQVgsICJzaG1tYXgiLCAmc2htX2N0bG1heCwgc2l6ZW9mIChzaXpl
X3QpLAoJIDA2NDQsICgodm9pZCAqKTApLCAmcHJvY19kb3Vsb25ndmVjX21pbm1heH0sCgl7S0VS
Tl9NU0dNQVgsICJtc2dtYXgiLCAmbXNnX2N0bG1heCwgc2l6ZW9mIChpbnQpLAoJIDA2NDQsICgo
dm9pZCAqKTApLCAmcHJvY19kb2ludHZlY30sCgl7S0VSTl9NU0dNTkksICJtc2dtbmkiLCAmbXNn
X2N0bG1uaSwgc2l6ZW9mIChpbnQpLAoJIDA2NDQsICgodm9pZCAqKTApLCAmcHJvY19kb2ludHZl
Y30sCgl7S0VSTl9NU0dNTkIsICJtc2dtbmIiLCAmbXNnX2N0bG1uYiwgc2l6ZW9mIChpbnQpLAoJ
IDA2NDQsICgodm9pZCAqKTApLCAmcHJvY19kb2ludHZlY30sCgl7S0VSTl9TRU0sICJzZW0iLCAm
c2VtX2N0bHMsIDQqc2l6ZW9mIChpbnQpLAoJIDA2NDQsICgodm9pZCAqKTApLCAmcHJvY19kb2lu
dHZlY30sCgoKCgoKCXtLRVJOX01BWF9USFJFQURTLCAidGhyZWFkcy1tYXgiLCAmbWF4X3RocmVh
ZHMsIHNpemVvZihpbnQpLAoJIDA2NDQsICgodm9pZCAqKTApLCAmcHJvY19kb2ludHZlY30sCgl7
S0VSTl9SQU5ET00sICJyYW5kb20iLCAoKHZvaWQgKikwKSwgMCwgMDU1NSwgcmFuZG9tX3RhYmxl
fSwKCXtLRVJOX09WRVJGTE9XVUlELCAib3ZlcmZsb3d1aWQiLCAmb3ZlcmZsb3d1aWQsIHNpemVv
ZihpbnQpLCAwNjQ0LCAoKHZvaWQgKikwKSwKCSAmcHJvY19kb2ludHZlY19taW5tYXgsICZzeXNj
dGxfaW50dmVjLCAoKHZvaWQgKikwKSwKCSAmbWlub2xkdWlkLCAmbWF4b2xkdWlkfSwKCXtLRVJO
X09WRVJGTE9XR0lELCAib3ZlcmZsb3dnaWQiLCAmb3ZlcmZsb3dnaWQsIHNpemVvZihpbnQpLCAw
NjQ0LCAoKHZvaWQgKikwKSwKCSAmcHJvY19kb2ludHZlY19taW5tYXgsICZzeXNjdGxfaW50dmVj
LCAoKHZvaWQgKikwKSwKCSAmbWlub2xkdWlkLCAmbWF4b2xkdWlkfSwKCXswfQp9OwoKc3RhdGlj
IGN0bF90YWJsZSB2bV90YWJsZVtdID0gewoJe1ZNX0ZSRUVQRywgImZyZWVwYWdlcyIsIAoJICZm
cmVlcGFnZXMsIHNpemVvZihmcmVlcGFnZXNfdCksIDA2NDQsICgodm9pZCAqKTApLCAmcHJvY19k
b2ludHZlY30sCgl7Vk1fQkRGTFVTSCwgImJkZmx1c2giLCAmYmRmX3BybSwgOSpzaXplb2YoaW50
KSwgMDYwMCwgKCh2b2lkICopMCksCgkgJnByb2NfZG9pbnR2ZWNfbWlubWF4LCAmc3lzY3RsX2lu
dHZlYywgKCh2b2lkICopMCksCgkgJmJkZmx1c2hfbWluLCAmYmRmbHVzaF9tYXh9LAoJe1ZNX09W
RVJDT01NSVRfTUVNT1JZLCAib3ZlcmNvbW1pdF9tZW1vcnkiLCAmc3lzY3RsX292ZXJjb21taXRf
bWVtb3J5LAoJIHNpemVvZihzeXNjdGxfb3ZlcmNvbW1pdF9tZW1vcnkpLCAwNjQ0LCAoKHZvaWQg
KikwKSwgJnByb2NfZG9pbnR2ZWN9LAoJe1ZNX0JVRkZFUk1FTSwgImJ1ZmZlcm1lbSIsCgkgJmJ1
ZmZlcl9tZW0sIHNpemVvZihidWZmZXJfbWVtX3QpLCAwNjQ0LCAoKHZvaWQgKikwKSwgJnByb2Nf
ZG9pbnR2ZWN9LAoJe1ZNX1BBR0VDQUNIRSwgInBhZ2VjYWNoZSIsCgkgJnBhZ2VfY2FjaGUsIHNp
emVvZihidWZmZXJfbWVtX3QpLCAwNjQ0LCAoKHZvaWQgKikwKSwgJnByb2NfZG9pbnR2ZWN9LAoJ
e1ZNX1BBR0VSREFFTU9OLCAia3N3YXBkIiwKCSAmcGFnZXJfZGFlbW9uLCBzaXplb2YocGFnZXJf
ZGFlbW9uX3QpLCAwNjQ0LCAoKHZvaWQgKikwKSwgJnByb2NfZG9pbnR2ZWN9LAoJe1ZNX1BHVF9D
QUNIRSwgInBhZ2V0YWJsZV9jYWNoZSIsIAoJICZwZ3RfY2FjaGVfd2F0ZXIsIDIqc2l6ZW9mKGlu
dCksIDA2MDAsICgodm9pZCAqKTApLCAmcHJvY19kb2ludHZlY30sCgl7Vk1fUEFHRV9DTFVTVEVS
LCAicGFnZS1jbHVzdGVyIiwgCgkgJnBhZ2VfY2x1c3Rlciwgc2l6ZW9mKGludCksIDA2MDAsICgo
dm9pZCAqKTApLCAmcHJvY19kb2ludHZlY30sCgl7MH0KfTsKCnN0YXRpYyBjdGxfdGFibGUgcHJv
Y190YWJsZVtdID0gewoJezB9Cn07CgpzdGF0aWMgY3RsX3RhYmxlIGZzX3RhYmxlW10gPSB7Cgl7
RlNfTlJJTk9ERSwgImlub2RlLW5yIiwgJmlub2Rlc19zdGF0LCAyKnNpemVvZihpbnQpLAoJIDA0
NDQsICgodm9pZCAqKTApLCAmcHJvY19kb2ludHZlY30sCgl7RlNfU1RBVElOT0RFLCAiaW5vZGUt
c3RhdGUiLCAmaW5vZGVzX3N0YXQsIDcqc2l6ZW9mKGludCksCgkgMDQ0NCwgKCh2b2lkICopMCks
ICZwcm9jX2RvaW50dmVjfSwKCXtGU19OUkZJTEUsICJmaWxlLW5yIiwgJm5yX2ZpbGVzLCAzKnNp
emVvZihpbnQpLAoJIDA0NDQsICgodm9pZCAqKTApLCAmcHJvY19kb2ludHZlY30sCgl7RlNfTUFY
RklMRSwgImZpbGUtbWF4IiwgJm1heF9maWxlcywgc2l6ZW9mKGludCksCgkgMDY0NCwgKCh2b2lk
ICopMCksICZwcm9jX2RvaW50dmVjfSwKCXtGU19OUlNVUEVSLCAic3VwZXItbnIiLCAmbnJfc3Vw
ZXJfYmxvY2tzLCBzaXplb2YoaW50KSwKCSAwNDQ0LCAoKHZvaWQgKikwKSwgJnByb2NfZG9pbnR2
ZWN9LAoJe0ZTX01BWFNVUEVSLCAic3VwZXItbWF4IiwgJm1heF9zdXBlcl9ibG9ja3MsIHNpemVv
ZihpbnQpLAoJIDA2NDQsICgodm9pZCAqKTApLCAmcHJvY19kb2ludHZlY30sCgl7RlNfTlJEUVVP
VCwgImRxdW90LW5yIiwgJm5yX2RxdW90cywgMipzaXplb2YoaW50KSwKCSAwNDQ0LCAoKHZvaWQg
KikwKSwgJnByb2NfZG9pbnR2ZWN9LAoJe0ZTX01BWERRVU9ULCAiZHF1b3QtbWF4IiwgJm1heF9k
cXVvdHMsIHNpemVvZihpbnQpLAoJIDA2NDQsICgodm9pZCAqKTApLCAmcHJvY19kb2ludHZlY30s
Cgl7RlNfREVOVFJZLCAiZGVudHJ5LXN0YXRlIiwgJmRlbnRyeV9zdGF0LCA2KnNpemVvZihpbnQp
LAoJIDA0NDQsICgodm9pZCAqKTApLCAmcHJvY19kb2ludHZlY30sCgl7RlNfT1ZFUkZMT1dVSUQs
ICJvdmVyZmxvd3VpZCIsICZmc19vdmVyZmxvd3VpZCwgc2l6ZW9mKGludCksIDA2NDQsICgodm9p
ZCAqKTApLAoJICZwcm9jX2RvaW50dmVjX21pbm1heCwgJnN5c2N0bF9pbnR2ZWMsICgodm9pZCAq
KTApLAoJICZtaW5vbGR1aWQsICZtYXhvbGR1aWR9LAoJe0ZTX09WRVJGTE9XR0lELCAib3ZlcmZs
b3dnaWQiLCAmZnNfb3ZlcmZsb3dnaWQsIHNpemVvZihpbnQpLCAwNjQ0LCAoKHZvaWQgKikwKSwK
CSAmcHJvY19kb2ludHZlY19taW5tYXgsICZzeXNjdGxfaW50dmVjLCAoKHZvaWQgKikwKSwKCSAm
bWlub2xkdWlkLCAmbWF4b2xkdWlkfSwKCXswfQp9OwoKc3RhdGljIGN0bF90YWJsZSBkZWJ1Z190
YWJsZVtdID0gewoJezB9Cn07CgpzdGF0aWMgY3RsX3RhYmxlIGRldl90YWJsZVtdID0gewoJezB9
Cn07ICAKCmV4dGVybiB2b2lkIGluaXRfaXJxX3Byb2MgKHZvaWQpOwoKdm9pZCBfX2F0dHJpYnV0
ZV9fICgoX19zZWN0aW9uX18gKCIudGV4dC5pbml0IikpKSBzeXNjdGxfaW5pdCh2b2lkKQp7CgoJ
cmVnaXN0ZXJfcHJvY190YWJsZShyb290X3RhYmxlLCBwcm9jX3N5c19yb290KTsKCWluaXRfaXJx
X3Byb2MoKTsKCn0KCmludCBkb19zeXNjdGwoaW50ICpuYW1lLCBpbnQgbmxlbiwgdm9pZCAqb2xk
dmFsLCBzaXplX3QgKm9sZGxlbnAsCgkgICAgICAgdm9pZCAqbmV3dmFsLCBzaXplX3QgbmV3bGVu
KQp7CglzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CgoJaWYgKG5sZW4gPT0gMCB8fCBubGVuID49IDEw
KQoJCXJldHVybiAtMjA7CglpZiAob2xkdmFsKSB7CgkJaW50IG9sZF9sZW47CgkJaWYgKCFvbGRs
ZW5wIHx8ICh7IGxvbmcgX19ndV9lcnI7IF9fdHlwZW9mX18oKigoIG9sZGxlbnApKSkgX19ndV92
YWw7IGxvbmcgX19ndV9hZGRyOyBfX2FzbV9fKCIiOiI9ciIgKF9fZ3VfdmFsKSk7IF9fZ3VfYWRk
ciA9IChsb25nKSAoKCBvbGRsZW5wKSk7IF9fYXNtX18oIiI6Ij1yIiAoX19ndV9lcnIpKTsgaWYg
KCgoKF9fc2lnbmVkX18gbG9uZykoKCgobG9uZykoKGN1cnJlbnQtPnRocmVhZC5jdXJyZW50X2Rz
KS5zZWcpKSkmKF9fZ3VfYWRkciB8IHNpemVvZigqKCBvbGRsZW5wKSkgfCAoX19ndV9hZGRyKyBz
aXplb2YoKiggb2xkbGVucCkpKSkpKSA+PSAwKSkgeyBzd2l0Y2ggKHNpemVvZigqKCBvbGRsZW5w
KSkpIHsgY2FzZSAxOiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJsYiIgIlx0JTEs
JTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwi
XG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgIm1vdmVcdCUxLCQwXG5cdCIgImpcdDJiXG5cdCIgIi5w
cmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIs
M2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19ndV9lcnIpLCAiPXIiIChfX2d1X3ZhbCkgOiJv
IiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3VfYWRkcikpKSwgImkiICgtMTQpKTsg
fSk7IGJyZWFrOyBjYXNlIDI6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgImxoIiAi
XHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxc
ImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAibW92ZVx0JTEsJDBcblx0IiAialx0MmJcblx0
IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3Jk
XHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX2d1X2VyciksICI9ciIgKF9fZ3VfdmFs
KSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyKSkpLCAiaSIgKC0x
NCkpOyB9KTsgYnJlYWs7IGNhc2UgNDogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAi
bHciICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZp
eHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xuXHQiICJtb3ZlXHQlMSwkMFxuXHQiICJqXHQy
YlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAi
LndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fZ3VfZXJyKSwgIj1yIiAoX19n
dV92YWwpIDoibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIpKSksICJp
IiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSA4OiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6
XHRsd1x0JTEsJTJcbiIgIjI6XHRsd1x0JUQxLCUzXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIzOlx0
LnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjQ6XHRsaVx0JTAsJTRcblx0IiAibW92ZVx0JTEs
JDBcblx0IiAibW92ZVx0JUQxLCQwXG5cdCIgImpcdDNiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIu
c2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsNGJcblx0IiAiLndvcmRc
dDJiLDRiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fZ3VfZXJyKSwgIj0mciIgKF9fZ3VfdmFs
KSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyKSkpLCAibyIgKCgq
KHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIgKyA0KSkpLCAiaSIgKC0xNCkpOyB9
KTsgYnJlYWs7IGRlZmF1bHQ6IF9fZ2V0X3VzZXJfdW5rbm93bigpOyBicmVhazsgfSB9IChvbGRf
bGVuKSA9IChfX3R5cGVvZl9fKCooKCBvbGRsZW5wKSkpKSBfX2d1X3ZhbDsgX19ndV9lcnI7IH0p
KQoJCQlyZXR1cm4gLTE0OwoJfQoJdG1wID0gJnJvb3RfdGFibGVfaGVhZGVyLmN0bF9lbnRyeTsK
CWRvIHsKCQlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZCA9CgkJCSgoIHN0cnVjdCBjdGxf
dGFibGVfaGVhZGVyICopKChjaGFyICopKHRtcCktKHVuc2lnbmVkIGxvbmcpKCYoKCBzdHJ1Y3Qg
Y3RsX3RhYmxlX2hlYWRlciAqKTApLT4gY3RsX2VudHJ5KSkpOwoJCXZvaWQgKmNvbnRleHQgPSAo
KHZvaWQgKikwKTsKCQlpbnQgZXJyb3IgPSBwYXJzZV90YWJsZShuYW1lLCBubGVuLCBvbGR2YWws
IG9sZGxlbnAsIAoJCQkJCW5ld3ZhbCwgbmV3bGVuLCBoZWFkLT5jdGxfdGFibGUsCgkJCQkJJmNv
bnRleHQpOwoJCWlmIChjb250ZXh0KQoJCQlrZnJlZShjb250ZXh0KTsKCQlpZiAoZXJyb3IgIT0g
LTIwKQoJCQlyZXR1cm4gZXJyb3I7Cgl9IHdoaWxlICh0bXAgIT0gJnJvb3RfdGFibGVfaGVhZGVy
LmN0bF9lbnRyeSk7CglyZXR1cm4gLTIwOwp9CgpleHRlcm4gICBsb25nIHN5c19zeXNjdGwoc3Ry
dWN0IF9fc3lzY3RsX2FyZ3MgKmFyZ3MpCnsKCXN0cnVjdCBfX3N5c2N0bF9hcmdzIHRtcDsKCWlu
dCBlcnJvcjsKCglpZiAoKHsgdm9pZCAqX19jdV90bzsgY29uc3Qgdm9pZCAqX19jdV9mcm9tOyBs
b25nIF9fY3VfbGVuOyBfX2N1X3RvID0gKCZ0bXApOyBfX2N1X2Zyb20gPSAoIGFyZ3MpOyBfX2N1
X2xlbiA9ICggc2l6ZW9mKHRtcCkpOyBpZiAoKCgoX19zaWduZWRfXyBsb25nKSgoKChsb25nKSgo
Y3VycmVudC0+dGhyZWFkLmN1cnJlbnRfZHMpLnNlZykpKSYoKCh1bnNpZ25lZCBsb25nKSggX19j
dV9mcm9tKSkgfCAoIF9fY3VfbGVuKSB8ICgoKHVuc2lnbmVkIGxvbmcpKCBfX2N1X2Zyb20pKSso
IF9fY3VfbGVuKSkpKSkgPj0gMCkpIF9fYXNtX18gX192b2xhdGlsZV9fKCAibW92ZVx0JDQsICUx
XG5cdCIgIm1vdmVcdCQ1LCAlMlxuXHQiICJtb3ZlXHQkNiwgJTNcblx0IiAiLnNldFx0bm9yZW9y
ZGVyXG5cdCIgImphbFx0IiJfX2NvcHlfdXNlciIgIlxuXHQiICIuc2V0XHRub2F0XG5cdCIgImFk
ZHVcdCQxLCAlMiwgJTNcblx0IiAiLnNldFx0YXRcblx0IiAiLnNldFx0cmVvcmRlclxuXHQiICJt
b3ZlXHQlMCwgJDYiIDogIj1yIiAoX19jdV9sZW4pIDogInIiIChfX2N1X3RvKSwgInIiIChfX2N1
X2Zyb20pLCAiciIgKF9fY3VfbGVuKSA6ICIkNCIsICIkNSIsICIkNiIsICIkOCIsICIkOSIsICIk
MTAiLCAiJDExIiwgIiQxMiIsICIkMTUiLCAiJDI0IiwgIiQzMSIsIm1lbW9yeSIpOyBfX2N1X2xl
bjsgfSkpCgkJcmV0dXJuIC0xNDsKCQkKCWRvIHsgfSB3aGlsZSgwKTsKCWVycm9yID0gZG9fc3lz
Y3RsKHRtcC5uYW1lLCB0bXAubmxlbiwgdG1wLm9sZHZhbCwgdG1wLm9sZGxlbnAsCgkJCSAgdG1w
Lm5ld3ZhbCwgdG1wLm5ld2xlbik7CglkbyB7IH0gd2hpbGUoMCk7CglyZXR1cm4gZXJyb3I7Cn0K
CiAKCgoKCnN0YXRpYyBpbnQgdGVzdF9wZXJtKGludCBtb2RlLCBpbnQgb3ApCnsKCWlmICghY3Vy
cmVudC0+ZXVpZCkKCQltb2RlID4+PSA2OwoJZWxzZSBpZiAoaW5fZWdyb3VwX3AoMCkpCgkJbW9k
ZSA+Pj0gMzsKCWlmICgobW9kZSAmIG9wICYgMDAwNykgPT0gb3ApCgkJcmV0dXJuIDA7CglyZXR1
cm4gLTEzOwp9CgpzdGF0aWMgaW5saW5lIGludCBjdGxfcGVybShjdGxfdGFibGUgKnRhYmxlLCBp
bnQgb3ApCnsKCXJldHVybiB0ZXN0X3Blcm0odGFibGUtPm1vZGUsIG9wKTsKfQoKc3RhdGljIGlu
dCBwYXJzZV90YWJsZShpbnQgKm5hbWUsIGludCBubGVuLAoJCSAgICAgICB2b2lkICpvbGR2YWws
IHNpemVfdCAqb2xkbGVucCwKCQkgICAgICAgdm9pZCAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLAoJ
CSAgICAgICBjdGxfdGFibGUgKnRhYmxlLCB2b2lkICoqY29udGV4dCkKewpyZXBlYXQ6CglpZiAo
IW5sZW4pCgkJcmV0dXJuIC0yMDsKCglmb3IgKCA7IHRhYmxlLT5jdGxfbmFtZTsgdGFibGUrKykg
ewoJCWludCBuOwoJCWlmICgoeyBsb25nIF9fZ3VfZXJyOyBfX3R5cGVvZl9fKCooKCBuYW1lKSkp
IF9fZ3VfdmFsOyBsb25nIF9fZ3VfYWRkcjsgX19hc21fXygiIjoiPXIiIChfX2d1X3ZhbCkpOyBf
X2d1X2FkZHIgPSAobG9uZykgKCggbmFtZSkpOyBfX2FzbV9fKCIiOiI9ciIgKF9fZ3VfZXJyKSk7
IGlmICgoKChfX3NpZ25lZF9fIGxvbmcpKCgoKGxvbmcpKChjdXJyZW50LT50aHJlYWQuY3VycmVu
dF9kcykuc2VnKSkpJihfX2d1X2FkZHIgfCBzaXplb2YoKiggbmFtZSkpIHwgKF9fZ3VfYWRkcisg
c2l6ZW9mKCooIG5hbWUpKSkpKSkgPj0gMCkpIHsgc3dpdGNoIChzaXplb2YoKiggbmFtZSkpKSB7
IGNhc2UgMTogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAibGIiICJcdCUxLCUyXG5c
dCIgIm1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAi
MzpcdGxpXHQlMCwlM1xuXHQiICJtb3ZlXHQlMSwkMFxuXHQiICJqXHQyYlxuXHQiICIucHJldmlv
dXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5c
dCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fZ3VfZXJyKSwgIj1yIiAoX19ndV92YWwpIDoibyIgKCgq
KHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBi
cmVhazsgY2FzZSAyOiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJsaCIgIlx0JTEs
JTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwi
XG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgIm1vdmVcdCUxLCQwXG5cdCIgImpcdDJiXG5cdCIgIi5w
cmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIs
M2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19ndV9lcnIpLCAiPXIiIChfX2d1X3ZhbCkgOiJv
IiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3VfYWRkcikpKSwgImkiICgtMTQpKTsg
fSk7IGJyZWFrOyBjYXNlIDQ6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgImx3IiAi
XHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxc
ImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAibW92ZVx0JTEsJDBcblx0IiAialx0MmJcblx0
IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3Jk
XHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX2d1X2VyciksICI9ciIgKF9fZ3VfdmFs
KSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyKSkpLCAiaSIgKC0x
NCkpOyB9KTsgYnJlYWs7IGNhc2UgODogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0bHdc
dCUxLCUyXG4iICIyOlx0bHdcdCVEMSwlM1xuXHQiICJtb3ZlXHQlMCwkMFxuIiAiMzpcdC5zZWN0
aW9uXHQuZml4dXAsXCJheFwiXG4iICI0Olx0bGlcdCUwLCU0XG5cdCIgIm1vdmVcdCUxLCQwXG5c
dCIgIm1vdmVcdCVEMSwkMFxuXHQiICJqXHQzYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rp
b25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDRiXG5cdCIgIi53b3JkXHQyYiw0
YlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX2d1X2VyciksICI9JnIiIChfX2d1X3ZhbCkgOiJv
IiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3VfYWRkcikpKSwgIm8iICgoKihzdHJ1
Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyICsgNCkpKSwgImkiICgtMTQpKTsgfSk7IGJy
ZWFrOyBkZWZhdWx0OiBfX2dldF91c2VyX3Vua25vd24oKTsgYnJlYWs7IH0gfSAobikgPSAoX190
eXBlb2ZfXygqKCggbmFtZSkpKSkgX19ndV92YWw7IF9fZ3VfZXJyOyB9KSkKCQkJcmV0dXJuIC0x
NDsKCQlpZiAobiA9PSB0YWJsZS0+Y3RsX25hbWUgfHwgdGFibGUtPmN0bF9uYW1lID09ICAtMSkg
ewoJCQlpbnQgZXJyb3I7CgkJCWlmICh0YWJsZS0+Y2hpbGQpIHsKCQkJCWlmIChjdGxfcGVybSh0
YWJsZSwgMDAxKSkKCQkJCQlyZXR1cm4gLTE7CgkJCQlpZiAodGFibGUtPnN0cmF0ZWd5KSB7CgkJ
CQkJZXJyb3IgPSB0YWJsZS0+c3RyYXRlZ3koCgkJCQkJCXRhYmxlLCBuYW1lLCBubGVuLAoJCQkJ
CQlvbGR2YWwsIG9sZGxlbnAsCgkJCQkJCW5ld3ZhbCwgbmV3bGVuLCBjb250ZXh0KTsKCQkJCQlp
ZiAoZXJyb3IpCgkJCQkJCXJldHVybiBlcnJvcjsKCQkJCX0KCQkJCW5hbWUrKzsKCQkJCW5sZW4t
LTsKCQkJCXRhYmxlID0gdGFibGUtPmNoaWxkOwoJCQkJZ290byByZXBlYXQ7CgkJCX0KCQkJZXJy
b3IgPSBkb19zeXNjdGxfc3RyYXRlZ3kodGFibGUsIG5hbWUsIG5sZW4sCgkJCQkJCSAgIG9sZHZh
bCwgb2xkbGVucCwKCQkJCQkJICAgbmV3dmFsLCBuZXdsZW4sIGNvbnRleHQpOwoJCQlyZXR1cm4g
ZXJyb3I7CgkJfQoJfQoJcmV0dXJuIC0yMDsKfQoKIAppbnQgZG9fc3lzY3RsX3N0cmF0ZWd5IChj
dGxfdGFibGUgKnRhYmxlLCAKCQkJaW50ICpuYW1lLCBpbnQgbmxlbiwKCQkJdm9pZCAqb2xkdmFs
LCBzaXplX3QgKm9sZGxlbnAsCgkJCXZvaWQgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwgdm9pZCAq
KmNvbnRleHQpCnsKCWludCBvcCA9IDAsIHJjLCBsZW47CgoJaWYgKG9sZHZhbCkKCQlvcCB8PSAw
MDQ7CglpZiAobmV3dmFsKSAKCQlvcCB8PSAwMDI7CglpZiAoY3RsX3Blcm0odGFibGUsIG9wKSkK
CQlyZXR1cm4gLTE7CgoJaWYgKHRhYmxlLT5zdHJhdGVneSkgewoJCXJjID0gdGFibGUtPnN0cmF0
ZWd5KHRhYmxlLCBuYW1lLCBubGVuLCBvbGR2YWwsIG9sZGxlbnAsCgkJCQkgICAgIG5ld3ZhbCwg
bmV3bGVuLCBjb250ZXh0KTsKCQlpZiAocmMgPCAwKQoJCQlyZXR1cm4gcmM7CgkJaWYgKHJjID4g
MCkKCQkJcmV0dXJuIDA7Cgl9CgoJIAoKCWlmICh0YWJsZS0+ZGF0YSAmJiB0YWJsZS0+bWF4bGVu
KSB7CgkJaWYgKG9sZHZhbCAmJiBvbGRsZW5wKSB7CgkJCSh7IGxvbmcgX19ndV9lcnI7IF9fdHlw
ZW9mX18oKigoIG9sZGxlbnApKSkgX19ndV92YWw7IGxvbmcgX19ndV9hZGRyOyBfX2FzbV9fKCIi
OiI9ciIgKF9fZ3VfdmFsKSk7IF9fZ3VfYWRkciA9IChsb25nKSAoKCBvbGRsZW5wKSk7IF9fYXNt
X18oIiI6Ij1yIiAoX19ndV9lcnIpKTsgaWYgKCgoKF9fc2lnbmVkX18gbG9uZykoKCgobG9uZyko
KGN1cnJlbnQtPnRocmVhZC5jdXJyZW50X2RzKS5zZWcpKSkmKF9fZ3VfYWRkciB8IHNpemVvZigq
KCBvbGRsZW5wKSkgfCAoX19ndV9hZGRyKyBzaXplb2YoKiggb2xkbGVucCkpKSkpKSA+PSAwKSkg
eyBzd2l0Y2ggKHNpemVvZigqKCBvbGRsZW5wKSkpIHsgY2FzZSAxOiAoeyBfX2FzbV9fIF9fdm9s
YXRpbGVfXyggIjE6XHQiICJsYiIgIlx0JTEsJTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5c
dCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgIm1vdmVc
dCUxLCQwXG5cdCIgImpcdDJiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90
YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19n
dV9lcnIpLCAiPXIiIChfX2d1X3ZhbCkgOiJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICop
KF9fZ3VfYWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBjYXNlIDI6ICh7IF9fYXNtX18g
X192b2xhdGlsZV9fKCAiMTpcdCIgImxoIiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAi
Mjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAi
bW92ZVx0JTEsJDBcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRf
X2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIi
IChfX2d1X2VyciksICI9ciIgKF9fZ3VfdmFsKSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1
Y3QgKikoX19ndV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgNDogKHsgX19h
c21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAibHciICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQw
XG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xu
XHQiICJtb3ZlXHQlMSwkMFxuXHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rp
b25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91cyIg
OiI9ciIgKF9fZ3VfZXJyKSwgIj1yIiAoX19ndV92YWwpIDoibyIgKCgqKHN0cnVjdCBfX2xhcmdl
X3N0cnVjdCAqKShfX2d1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSA4OiAo
eyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHRsd1x0JTEsJTJcbiIgIjI6XHRsd1x0JUQxLCUz
XG5cdCIgIm1vdmVcdCUwLCQwXG4iICIzOlx0LnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjQ6
XHRsaVx0JTAsJTRcblx0IiAibW92ZVx0JTEsJDBcblx0IiAibW92ZVx0JUQxLCQwXG5cdCIgImpc
dDNiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQi
ICIud29yZFx0MWIsNGJcblx0IiAiLndvcmRcdDJiLDRiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIg
KF9fZ3VfZXJyKSwgIj0mciIgKF9fZ3VfdmFsKSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1
Y3QgKikoX19ndV9hZGRyKSkpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1
X2FkZHIgKyA0KSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGRlZmF1bHQ6IF9fZ2V0X3VzZXJf
dW5rbm93bigpOyBicmVhazsgfSB9IChsZW4pID0gKF9fdHlwZW9mX18oKigoIG9sZGxlbnApKSkp
IF9fZ3VfdmFsOyBfX2d1X2VycjsgfSk7CgkJCWlmIChsZW4pIHsKCQkJCWlmIChsZW4gPiB0YWJs
ZS0+bWF4bGVuKQoJCQkJCWxlbiA9IHRhYmxlLT5tYXhsZW47CgkJCQlpZigoeyB2b2lkICpfX2N1
X3RvOyBjb25zdCB2b2lkICpfX2N1X2Zyb207IGxvbmcgX19jdV9sZW47IF9fY3VfdG8gPSAob2xk
dmFsKTsgX19jdV9mcm9tID0gKCB0YWJsZS0+ZGF0YSk7IF9fY3VfbGVuID0gKCBsZW4pOyBpZiAo
KCgoX19zaWduZWRfXyBsb25nKSgoKChsb25nKSgoY3VycmVudC0+dGhyZWFkLmN1cnJlbnRfZHMp
LnNlZykpKSYoKCh1bnNpZ25lZCBsb25nKSggX19jdV90bykpIHwgKCBfX2N1X2xlbikgfCAoKCh1
bnNpZ25lZCBsb25nKSggX19jdV90bykpKyggX19jdV9sZW4pKSkpKSA+PSAwKSkgX19hc21fXyBf
X3ZvbGF0aWxlX18oICJtb3ZlXHQkNCwgJTFcblx0IiAibW92ZVx0JDUsICUyXG5cdCIgIm1vdmVc
dCQ2LCAlM1xuXHQiICJqYWxcdCIiX19jb3B5X3VzZXIiICJcblx0IiAibW92ZVx0JTAsICQ2IiA6
ICI9ciIgKF9fY3VfbGVuKSA6ICJyIiAoX19jdV90byksICJyIiAoX19jdV9mcm9tKSwgInIiIChf
X2N1X2xlbikgOiAiJDQiLCAiJDUiLCAiJDYiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIk
MTIiLCAiJDE1IiwgIiQyNCIsICIkMzEiLCJtZW1vcnkiKTsgX19jdV9sZW47IH0pKQoJCQkJCXJl
dHVybiAtMTQ7CgkJCQlpZigoeyBsb25nIF9fcHVfZXJyOyBfX3R5cGVvZl9fKCooKCBvbGRsZW5w
KSkpIF9fcHVfdmFsOyBsb25nIF9fcHVfYWRkcjsgX19wdV92YWwgPSAoKGxlbikpOyBfX3B1X2Fk
ZHIgPSAobG9uZykgKCggb2xkbGVucCkpOyBfX2FzbV9fKCIiOiI9ciIgKF9fcHVfZXJyKSk7IGlm
ICgoKChfX3NpZ25lZF9fIGxvbmcpKCgoKGxvbmcpKChjdXJyZW50LT50aHJlYWQuY3VycmVudF9k
cykuc2VnKSkpJihfX3B1X2FkZHIgfCBzaXplb2YoKiggb2xkbGVucCkpIHwgKF9fcHVfYWRkcisg
c2l6ZW9mKCooIG9sZGxlbnApKSkpKSkgPj0gMCkpIHsgc3dpdGNoIChzaXplb2YoKiggb2xkbGVu
cCkpKSB7IGNhc2UgMTogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAic2IiICJcdCUx
LCUyXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhc
IlxuIiAiMzpcdGxpXHQlMCwlM1xuXHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNl
Y3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91
cyIgOiI9ciIgKF9fcHVfZXJyKSA6InIiIChfX3B1X3ZhbCksICJvIiAoKCooc3RydWN0IF9fbGFy
Z2Vfc3RydWN0ICopKF9fcHVfYWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBjYXNlIDI6
ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgInNoIiAiXHQlMSwlMlxuXHQiICJtb3Zl
XHQlMCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0
JTAsJTNcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3Rh
YmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX3B1
X2VycikgOiJyIiAoX19wdV92YWwpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShf
X3B1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSA0OiAoeyBfX2FzbV9fIF9f
dm9sYXRpbGVfXyggIjE6XHQiICJzdyIgIlx0JTEsJTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6
XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgImpc
dDJiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQi
ICIud29yZFx0MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19wdV9lcnIpIDoiciIgKF9f
cHVfdmFsKSwgIm8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19wdV9hZGRyKSkpLCAi
aSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgODogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIx
Olx0c3dcdCUxLCUyXG5cdCIgIjI6XHRzd1x0JUQxLCUzXG4iICJtb3ZlXHQlMCwkMFxuIiAiMzpc
blx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjQ6XHRsaVx0JTAsJTRcblx0IiAialx0
M2Jcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIg
Ii53b3JkXHQxYiw0YlxuXHQiICIud29yZFx0MmIsNGJcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAo
X19wdV9lcnIpIDoiciIgKF9fcHVfdmFsKSwgIm8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3Qg
KikoX19wdV9hZGRyKSkpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX3B1X2Fk
ZHIgKyA0KSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGRlZmF1bHQ6IF9fcHV0X3VzZXJfdW5r
bm93bigpOyBicmVhazsgfSB9IF9fcHVfZXJyOyB9KSkKCQkJCQlyZXR1cm4gLTE0OwoJCQl9CgkJ
fQoJCWlmIChuZXd2YWwgJiYgbmV3bGVuKSB7CgkJCWxlbiA9IG5ld2xlbjsKCQkJaWYgKGxlbiA+
IHRhYmxlLT5tYXhsZW4pCgkJCQlsZW4gPSB0YWJsZS0+bWF4bGVuOwoJCQlpZigoeyB2b2lkICpf
X2N1X3RvOyBjb25zdCB2b2lkICpfX2N1X2Zyb207IGxvbmcgX19jdV9sZW47IF9fY3VfdG8gPSAo
dGFibGUtPmRhdGEpOyBfX2N1X2Zyb20gPSAoIG5ld3ZhbCk7IF9fY3VfbGVuID0gKCBsZW4pOyBp
ZiAoKCgoX19zaWduZWRfXyBsb25nKSgoKChsb25nKSgoY3VycmVudC0+dGhyZWFkLmN1cnJlbnRf
ZHMpLnNlZykpKSYoKCh1bnNpZ25lZCBsb25nKSggX19jdV9mcm9tKSkgfCAoIF9fY3VfbGVuKSB8
ICgoKHVuc2lnbmVkIGxvbmcpKCBfX2N1X2Zyb20pKSsoIF9fY3VfbGVuKSkpKSkgPj0gMCkpIF9f
YXNtX18gX192b2xhdGlsZV9fKCAibW92ZVx0JDQsICUxXG5cdCIgIm1vdmVcdCQ1LCAlMlxuXHQi
ICJtb3ZlXHQkNiwgJTNcblx0IiAiLnNldFx0bm9yZW9yZGVyXG5cdCIgImphbFx0IiJfX2NvcHlf
dXNlciIgIlxuXHQiICIuc2V0XHRub2F0XG5cdCIgImFkZHVcdCQxLCAlMiwgJTNcblx0IiAiLnNl
dFx0YXRcblx0IiAiLnNldFx0cmVvcmRlclxuXHQiICJtb3ZlXHQlMCwgJDYiIDogIj1yIiAoX19j
dV9sZW4pIDogInIiIChfX2N1X3RvKSwgInIiIChfX2N1X2Zyb20pLCAiciIgKF9fY3VfbGVuKSA6
ICIkNCIsICIkNSIsICIkNiIsICIkOCIsICIkOSIsICIkMTAiLCAiJDExIiwgIiQxMiIsICIkMTUi
LCAiJDI0IiwgIiQzMSIsIm1lbW9yeSIpOyBfX2N1X2xlbjsgfSkpCgkJCQlyZXR1cm4gLTE0OwoJ
CX0KCX0KCXJldHVybiAwOwp9CgpzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfc3lz
Y3RsX3RhYmxlKGN0bF90YWJsZSAqIHRhYmxlLCAKCQkJCQkgICAgICAgaW50IGluc2VydF9hdF9o
ZWFkKQp7CglzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqdG1wOwoJdG1wID0ga21hbGxvYyhzaXpl
b2Yoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIpLCAoMHgwMiB8IDB4MDEgfCAweDA0KSk7CglpZiAo
IXRtcCkKCQlyZXR1cm4gMDsKCXRtcC0+Y3RsX3RhYmxlID0gdGFibGU7CglkbyB7ICgmdG1wLT5j
dGxfZW50cnkpLT5uZXh0ID0gKCZ0bXAtPmN0bF9lbnRyeSk7ICgmdG1wLT5jdGxfZW50cnkpLT5w
cmV2ID0gKCZ0bXAtPmN0bF9lbnRyeSk7IH0gd2hpbGUgKDApOwoJaWYgKGluc2VydF9hdF9oZWFk
KQoJCWxpc3RfYWRkKCZ0bXAtPmN0bF9lbnRyeSwgJnJvb3RfdGFibGVfaGVhZGVyLmN0bF9lbnRy
eSk7CgllbHNlCgkJbGlzdF9hZGRfdGFpbCgmdG1wLT5jdGxfZW50cnksICZyb290X3RhYmxlX2hl
YWRlci5jdGxfZW50cnkpOwoKCXJlZ2lzdGVyX3Byb2NfdGFibGUodGFibGUsIHByb2Nfc3lzX3Jv
b3QpOwoKCXJldHVybiB0bXA7Cn0KCiAKCgp2b2lkIHVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN0
cnVjdCBjdGxfdGFibGVfaGVhZGVyICogaGVhZGVyKQp7CglsaXN0X2RlbCgmaGVhZGVyLT5jdGxf
ZW50cnkpOwoKCXVucmVnaXN0ZXJfcHJvY190YWJsZShoZWFkZXItPmN0bF90YWJsZSwgcHJvY19z
eXNfcm9vdCk7CgoJa2ZyZWUoaGVhZGVyKTsKfQoKIAoKCgoKCiAKc3RhdGljIHZvaWQgcmVnaXN0
ZXJfcHJvY190YWJsZShjdGxfdGFibGUgKiB0YWJsZSwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpy
b290KQp7CglzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlOwoJaW50IGxlbjsKCW1vZGVfdCBtb2Rl
OwoJCglmb3IgKDsgdGFibGUtPmN0bF9uYW1lOyB0YWJsZSsrKSB7CgkJIAoJCWlmICghdGFibGUt
PnByb2NuYW1lKQoJCQljb250aW51ZTsKCQkgCgkJaWYgKCF0YWJsZS0+cHJvY19oYW5kbGVyICYm
ICF0YWJsZS0+Y2hpbGQpIHsKCQkJcHJpbnRrKCI8ND4iICJTWVNDVEw6IENhbid0IHJlZ2lzdGVy
ICVzXG4iLAoJCQkJdGFibGUtPnByb2NuYW1lKTsKCQkJY29udGludWU7CgkJfQoKCQlsZW4gPSBz
dHJsZW4odGFibGUtPnByb2NuYW1lKTsKCQltb2RlID0gdGFibGUtPm1vZGU7CgoJCWRlID0gKCh2
b2lkICopMCk7CgkJaWYgKHRhYmxlLT5wcm9jX2hhbmRsZXIpCgkJCW1vZGUgfD0gMDEwMDAwMDsK
CQllbHNlIHsKCQkJbW9kZSB8PSAwMDQwMDAwOwoJCQlmb3IgKGRlID0gcm9vdC0+c3ViZGlyOyBk
ZTsgZGUgPSBkZS0+bmV4dCkgewoJCQkJaWYgKHByb2NfbWF0Y2gobGVuLCB0YWJsZS0+cHJvY25h
bWUsIGRlKSkKCQkJCQlicmVhazsKCQkJfQoJCQkgCgkJfQoKCQlpZiAoIWRlKSB7CgkJCWRlID0g
Y3JlYXRlX3Byb2NfZW50cnkodGFibGUtPnByb2NuYW1lLCBtb2RlLCByb290KTsKCQkJaWYgKCFk
ZSkKCQkJCWNvbnRpbnVlOwoJCQlkZS0+ZGF0YSA9ICh2b2lkICopIHRhYmxlOwoJCQlpZiAodGFi
bGUtPnByb2NfaGFuZGxlcikgewoJCQkJZGUtPnByb2NfZm9wcyA9ICZwcm9jX3N5c19maWxlX29w
ZXJhdGlvbnM7CgkJCQlkZS0+cHJvY19pb3BzID0gJnByb2Nfc3lzX2lub2RlX29wZXJhdGlvbnM7
CgkJCX0KCQl9CgkJdGFibGUtPmRlID0gZGU7CgkJaWYgKGRlLT5tb2RlICYgMDA0MDAwMCkKCQkJ
cmVnaXN0ZXJfcHJvY190YWJsZSh0YWJsZS0+Y2hpbGQsIGRlKTsKCX0KfQoKIAoKCnN0YXRpYyB2
b2lkIHVucmVnaXN0ZXJfcHJvY190YWJsZShjdGxfdGFibGUgKiB0YWJsZSwgc3RydWN0IHByb2Nf
ZGlyX2VudHJ5ICpyb290KQp7CglzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlOwoJZm9yICg7IHRh
YmxlLT5jdGxfbmFtZTsgdGFibGUrKykgewoJCWlmICghKGRlID0gdGFibGUtPmRlKSkKCQkJY29u
dGludWU7CgkJaWYgKGRlLT5tb2RlICYgMDA0MDAwMCkgewoJCQlpZiAoIXRhYmxlLT5jaGlsZCkg
ewoJCQkJcHJpbnRrICgiPDE+IiAiSGVscCAtIG1hbGZvcm1lZCBzeXNjdGwgdHJlZSBvbiBmcmVl
XG4iKTsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCXVucmVnaXN0ZXJfcHJvY190YWJsZSh0YWJsZS0+
Y2hpbGQsIGRlKTsKCgkJCSAKCQkJaWYgKGRlLT5zdWJkaXIpCgkJCQljb250aW51ZTsKCQl9CgoJ
CSAKCQlpZiAoZGUtPmNvdW50KQoJCQljb250aW51ZTsKCgkJdGFibGUtPmRlID0gKCh2b2lkICop
MCk7CgkJcmVtb3ZlX3Byb2NfZW50cnkodGFibGUtPnByb2NuYW1lLCByb290KTsKCX0KfQoKc3Rh
dGljIHNzaXplX3QgZG9fcndfcHJvYyhpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICogZmlsZSwgY2hh
ciAqIGJ1ZiwKCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKewoJaW50IG9wOwoJc3Ry
dWN0IHByb2NfZGlyX2VudHJ5ICpkZTsKCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwoJc2l6ZV90
IHJlczsKCXNzaXplX3QgZXJyb3I7CgkKCWRlID0gKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSopIGZp
bGUtPmZfZGVudHJ5LT5kX2lub2RlLT51LmdlbmVyaWNfaXA7CglpZiAoIWRlIHx8ICFkZS0+ZGF0
YSkKCQlyZXR1cm4gLTIwOwoJdGFibGUgPSAoc3RydWN0IGN0bF90YWJsZSAqKSBkZS0+ZGF0YTsK
CWlmICghdGFibGUgfHwgIXRhYmxlLT5wcm9jX2hhbmRsZXIpCgkJcmV0dXJuIC0yMDsKCW9wID0g
KHdyaXRlID8gMDAyIDogMDA0KTsKCWlmIChjdGxfcGVybSh0YWJsZSwgb3ApKQoJCXJldHVybiAt
MTsKCQoJcmVzID0gY291bnQ7CgoJIAoKCgoJZXJyb3IgPSAoKnRhYmxlLT5wcm9jX2hhbmRsZXIp
ICh0YWJsZSwgd3JpdGUsIGZpbGUsIGJ1ZiwgJnJlcyk7CglpZiAoZXJyb3IpCgkJcmV0dXJuIGVy
cm9yOwoJcmV0dXJuIHJlczsKfQoKc3RhdGljIHNzaXplX3QgcHJvY19yZWFkc3lzKHN0cnVjdCBm
aWxlICogZmlsZSwgY2hhciAqIGJ1ZiwKCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9z
KQp7CglyZXR1cm4gZG9fcndfcHJvYygwLCBmaWxlLCBidWYsIGNvdW50LCBwcG9zKTsKfQoKc3Rh
dGljIHNzaXplX3QgcHJvY193cml0ZXN5cyhzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNvbnN0IGNoYXIg
KiBidWYsCgkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCnsKCXJldHVybiBkb19y
d19wcm9jKDEsIGZpbGUsIChjaGFyICopIGJ1ZiwgY291bnQsIHBwb3MpOwp9CgpzdGF0aWMgaW50
IHByb2Nfc3lzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG9wKQp7CglyZXR1
cm4gdGVzdF9wZXJtKGlub2RlLT5pX21vZGUsIG9wKTsKfQoKaW50IHByb2NfZG9zdHJpbmcoY3Rs
X3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKCQkgIHZvaWQgKmJ1
ZmZlciwgc2l6ZV90ICpsZW5wKQp7CglpbnQgbGVuOwoJY2hhciAqcCwgYzsKCQoJaWYgKCF0YWJs
ZS0+ZGF0YSB8fCAhdGFibGUtPm1heGxlbiB8fCAhKmxlbnAgfHwKCSAgICAoZmlscC0+Zl9wb3Mg
JiYgIXdyaXRlKSkgewoJCSpsZW5wID0gMDsKCQlyZXR1cm4gMDsKCX0KCQoJaWYgKHdyaXRlKSB7
CgkJbGVuID0gMDsKCQlwID0gYnVmZmVyOwoJCXdoaWxlIChsZW4gPCAqbGVucCkgewoJCQlpZigo
eyBsb25nIF9fZ3VfZXJyOyBfX3R5cGVvZl9fKCooKCBwKyspKSkgX19ndV92YWw7IGxvbmcgX19n
dV9hZGRyOyBfX2FzbV9fKCIiOiI9ciIgKF9fZ3VfdmFsKSk7IF9fZ3VfYWRkciA9IChsb25nKSAo
KCBwKyspKTsgX19hc21fXygiIjoiPXIiIChfX2d1X2VycikpOyBpZiAoKCgoX19zaWduZWRfXyBs
b25nKSgoKChsb25nKSgoY3VycmVudC0+dGhyZWFkLmN1cnJlbnRfZHMpLnNlZykpKSYoX19ndV9h
ZGRyIHwgc2l6ZW9mKCooIHArKykpIHwgKF9fZ3VfYWRkcisgc2l6ZW9mKCooIHArKykpKSkpKSA+
PSAwKSkgeyBzd2l0Y2ggKHNpemVvZigqKCBwKyspKSkgeyBjYXNlIDE6ICh7IF9fYXNtX18gX192
b2xhdGlsZV9fKCAiMTpcdCIgImxiIiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAiMjpc
blx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAibW92
ZVx0JTEsJDBcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4
X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChf
X2d1X2VyciksICI9ciIgKF9fZ3VfdmFsKSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3Qg
KikoX19ndV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgMjogKHsgX19hc21f
XyBfX3ZvbGF0aWxlX18oICIxOlx0IiAibGgiICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQwXG4i
ICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xuXHQi
ICJtb3ZlXHQlMSwkMFxuXHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25c
dF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91cyIgOiI9
ciIgKF9fZ3VfZXJyKSwgIj1yIiAoX19ndV92YWwpIDoibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0
cnVjdCAqKShfX2d1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSA0OiAoeyBf
X2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJsdyIgIlx0JTEsJTJcblx0IiAibW92ZVx0JTAs
JDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICIzOlx0bGlcdCUwLCUz
XG5cdCIgIm1vdmVcdCUxLCQwXG5cdCIgImpcdDJiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2Vj
dGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsM2Jcblx0IiAiLnByZXZpb3Vz
IiA6Ij1yIiAoX19ndV9lcnIpLCAiPXIiIChfX2d1X3ZhbCkgOiJvIiAoKCooc3RydWN0IF9fbGFy
Z2Vfc3RydWN0ICopKF9fZ3VfYWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBjYXNlIDg6
ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdGx3XHQlMSwlMlxuIiAiMjpcdGx3XHQlRDEs
JTNcblx0IiAibW92ZVx0JTAsJDBcbiIgIjM6XHQuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAi
NDpcdGxpXHQlMCwlNFxuXHQiICJtb3ZlXHQlMSwkMFxuXHQiICJtb3ZlXHQlRDEsJDBcblx0IiAi
alx0M2Jcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5c
dCIgIi53b3JkXHQxYiw0YlxuXHQiICIud29yZFx0MmIsNGJcblx0IiAiLnByZXZpb3VzIiA6Ij1y
IiAoX19ndV9lcnIpLCAiPSZyIiAoX19ndV92YWwpIDoibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0
cnVjdCAqKShfX2d1X2FkZHIpKSksICJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9f
Z3VfYWRkciArIDQpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgZGVmYXVsdDogX19nZXRfdXNl
cl91bmtub3duKCk7IGJyZWFrOyB9IH0gKGMpID0gKF9fdHlwZW9mX18oKigoIHArKykpKSkgX19n
dV92YWw7IF9fZ3VfZXJyOyB9KSkKCQkJCXJldHVybiAtMTQ7CgkJCWlmIChjID09IDAgfHwgYyA9
PSAnXG4nKQoJCQkJYnJlYWs7CgkJCWxlbisrOwoJCX0KCQlpZiAobGVuID49IHRhYmxlLT5tYXhs
ZW4pCgkJCWxlbiA9IHRhYmxlLT5tYXhsZW4tMTsKCQlpZigoeyB2b2lkICpfX2N1X3RvOyBjb25z
dCB2b2lkICpfX2N1X2Zyb207IGxvbmcgX19jdV9sZW47IF9fY3VfdG8gPSAodGFibGUtPmRhdGEp
OyBfX2N1X2Zyb20gPSAoIGJ1ZmZlcik7IF9fY3VfbGVuID0gKCBsZW4pOyBpZiAoKCgoX19zaWdu
ZWRfXyBsb25nKSgoKChsb25nKSgoY3VycmVudC0+dGhyZWFkLmN1cnJlbnRfZHMpLnNlZykpKSYo
KCh1bnNpZ25lZCBsb25nKSggX19jdV9mcm9tKSkgfCAoIF9fY3VfbGVuKSB8ICgoKHVuc2lnbmVk
IGxvbmcpKCBfX2N1X2Zyb20pKSsoIF9fY3VfbGVuKSkpKSkgPj0gMCkpIF9fYXNtX18gX192b2xh
dGlsZV9fKCAibW92ZVx0JDQsICUxXG5cdCIgIm1vdmVcdCQ1LCAlMlxuXHQiICJtb3ZlXHQkNiwg
JTNcblx0IiAiLnNldFx0bm9yZW9yZGVyXG5cdCIgImphbFx0IiJfX2NvcHlfdXNlciIgIlxuXHQi
ICIuc2V0XHRub2F0XG5cdCIgImFkZHVcdCQxLCAlMiwgJTNcblx0IiAiLnNldFx0YXRcblx0IiAi
LnNldFx0cmVvcmRlclxuXHQiICJtb3ZlXHQlMCwgJDYiIDogIj1yIiAoX19jdV9sZW4pIDogInIi
IChfX2N1X3RvKSwgInIiIChfX2N1X2Zyb20pLCAiciIgKF9fY3VfbGVuKSA6ICIkNCIsICIkNSIs
ICIkNiIsICIkOCIsICIkOSIsICIkMTAiLCAiJDExIiwgIiQxMiIsICIkMTUiLCAiJDI0IiwgIiQz
MSIsIm1lbW9yeSIpOyBfX2N1X2xlbjsgfSkpCgkJCXJldHVybiAtMTQ7CgkJKChjaGFyICopIHRh
YmxlLT5kYXRhKVtsZW5dID0gMDsKCQlmaWxwLT5mX3BvcyArPSAqbGVucDsKCX0gZWxzZSB7CgkJ
bGVuID0gc3RybGVuKHRhYmxlLT5kYXRhKTsKCQlpZiAobGVuID4gdGFibGUtPm1heGxlbikKCQkJ
bGVuID0gdGFibGUtPm1heGxlbjsKCQlpZiAobGVuID4gKmxlbnApCgkJCWxlbiA9ICpsZW5wOwoJ
CWlmIChsZW4pCgkJCWlmKCh7IHZvaWQgKl9fY3VfdG87IGNvbnN0IHZvaWQgKl9fY3VfZnJvbTsg
bG9uZyBfX2N1X2xlbjsgX19jdV90byA9IChidWZmZXIpOyBfX2N1X2Zyb20gPSAoIHRhYmxlLT5k
YXRhKTsgX19jdV9sZW4gPSAoIGxlbik7IGlmICgoKChfX3NpZ25lZF9fIGxvbmcpKCgoKGxvbmcp
KChjdXJyZW50LT50aHJlYWQuY3VycmVudF9kcykuc2VnKSkpJigoKHVuc2lnbmVkIGxvbmcpKCBf
X2N1X3RvKSkgfCAoIF9fY3VfbGVuKSB8ICgoKHVuc2lnbmVkIGxvbmcpKCBfX2N1X3RvKSkrKCBf
X2N1X2xlbikpKSkpID49IDApKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIm1vdmVcdCQ0LCAlMVxu
XHQiICJtb3ZlXHQkNSwgJTJcblx0IiAibW92ZVx0JDYsICUzXG5cdCIgImphbFx0IiJfX2NvcHlf
dXNlciIgIlxuXHQiICJtb3ZlXHQlMCwgJDYiIDogIj1yIiAoX19jdV9sZW4pIDogInIiIChfX2N1
X3RvKSwgInIiIChfX2N1X2Zyb20pLCAiciIgKF9fY3VfbGVuKSA6ICIkNCIsICIkNSIsICIkNiIs
ICIkOCIsICIkOSIsICIkMTAiLCAiJDExIiwgIiQxMiIsICIkMTUiLCAiJDI0IiwgIiQzMSIsIm1l
bW9yeSIpOyBfX2N1X2xlbjsgfSkpCgkJCQlyZXR1cm4gLTE0OwoJCWlmIChsZW4gPCAqbGVucCkg
ewoJCQlpZigoeyBsb25nIF9fcHVfZXJyOyBfX3R5cGVvZl9fKCooKCAoKGNoYXIgKikgYnVmZmVy
KSArIGxlbikpKSBfX3B1X3ZhbDsgbG9uZyBfX3B1X2FkZHI7IF9fcHVfdmFsID0gKCgnXG4nKSk7
IF9fcHVfYWRkciA9IChsb25nKSAoKCAoKGNoYXIgKikgYnVmZmVyKSArIGxlbikpOyBfX2FzbV9f
KCIiOiI9ciIgKF9fcHVfZXJyKSk7IGlmICgoKChfX3NpZ25lZF9fIGxvbmcpKCgoKGxvbmcpKChj
dXJyZW50LT50aHJlYWQuY3VycmVudF9kcykuc2VnKSkpJihfX3B1X2FkZHIgfCBzaXplb2YoKigg
KChjaGFyICopIGJ1ZmZlcikgKyBsZW4pKSB8IChfX3B1X2FkZHIrIHNpemVvZigqKCAoKGNoYXIg
KikgYnVmZmVyKSArIGxlbikpKSkpKSA+PSAwKSkgeyBzd2l0Y2ggKHNpemVvZigqKCAoKGNoYXIg
KikgYnVmZmVyKSArIGxlbikpKSB7IGNhc2UgMTogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIx
Olx0IiAic2IiICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlv
blx0LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xuXHQiICJqXHQyYlxuXHQiICIucHJl
dmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNi
XG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fcHVfZXJyKSA6InIiIChfX3B1X3ZhbCksICJvIiAo
KCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fcHVfYWRkcikpKSwgImkiICgtMTQpKTsgfSk7
IGJyZWFrOyBjYXNlIDI6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgInNoIiAiXHQl
MSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4
XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5z
ZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlv
dXMiIDoiPXIiIChfX3B1X2VycikgOiJyIiAoX19wdV92YWwpLCAibyIgKCgqKHN0cnVjdCBfX2xh
cmdlX3N0cnVjdCAqKShfX3B1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSA0
OiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJzdyIgIlx0JTEsJTJcblx0IiAibW92
ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICIzOlx0bGlc
dCUwLCUzXG5cdCIgImpcdDJiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90
YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19w
dV9lcnIpIDoiciIgKF9fcHVfdmFsKSwgIm8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKiko
X19wdV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgODogKHsgX19hc21fXyBf
X3ZvbGF0aWxlX18oICIxOlx0c3dcdCUxLCUyXG5cdCIgIjI6XHRzd1x0JUQxLCUzXG4iICJtb3Zl
XHQlMCwkMFxuIiAiMzpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjQ6XHRsaVx0
JTAsJTRcblx0IiAialx0M2Jcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3Rh
YmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiw0YlxuXHQiICIud29yZFx0MmIsNGJcblx0IiAiLnBy
ZXZpb3VzIiA6Ij1yIiAoX19wdV9lcnIpIDoiciIgKF9fcHVfdmFsKSwgIm8iICgoKihzdHJ1Y3Qg
X19sYXJnZV9zdHJ1Y3QgKikoX19wdV9hZGRyKSkpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0
cnVjdCAqKShfX3B1X2FkZHIgKyA0KSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGRlZmF1bHQ6
IF9fcHV0X3VzZXJfdW5rbm93bigpOyBicmVhazsgfSB9IF9fcHVfZXJyOyB9KSkKCQkJCXJldHVy
biAtMTQ7CgkJCWxlbisrOwoJCX0KCQkqbGVucCA9IGxlbjsKCQlmaWxwLT5mX3BvcyArPSBsZW47
Cgl9CglyZXR1cm4gMDsKfQoKIAoKCgogCnN0YXRpYyBpbnQgcHJvY19kb3V0c3N0cmluZyhjdGxf
dGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAoJCSAgdm9pZCAqYnVm
ZmVyLCBzaXplX3QgKmxlbnApCnsKCWludCByOwoKCWlmICghd3JpdGUpIHsKCQlkb3duX3JlYWQo
JnV0c19zZW0pOwoJCXI9cHJvY19kb3N0cmluZyh0YWJsZSwwLGZpbHAsYnVmZmVyLGxlbnApOwoJ
CXVwX3JlYWQoJnV0c19zZW0pOwoJfSBlbHNlIHsKCQlkb3duX3dyaXRlKCZ1dHNfc2VtKTsKCQly
PXByb2NfZG9zdHJpbmcodGFibGUsMSxmaWxwLGJ1ZmZlcixsZW5wKTsKCQl1cF93cml0ZSgmdXRz
X3NlbSk7Cgl9CglyZXR1cm4gcjsKfQoKCgoKCgoKc3RhdGljIGludCBkb19wcm9jX2RvaW50dmVj
KGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCgkJICB2b2lk
ICpidWZmZXIsIHNpemVfdCAqbGVucCwgaW50IGNvbnYsIGludCBvcCkKewoJaW50ICppLCB2bGVm
dCwgZmlyc3Q9MSwgbGVuLCBsZWZ0LCBuZWcsIHZhbDsKCQoJY2hhciBidWZbMjBdLCAqcDsKCQoJ
aWYgKCF0YWJsZS0+ZGF0YSB8fCAhdGFibGUtPm1heGxlbiB8fCAhKmxlbnAgfHwKCSAgICAoZmls
cC0+Zl9wb3MgJiYgIXdyaXRlKSkgewoJCSpsZW5wID0gMDsKCQlyZXR1cm4gMDsKCX0KCQoJaSA9
IChpbnQgKikgdGFibGUtPmRhdGE7Cgl2bGVmdCA9IHRhYmxlLT5tYXhsZW4gLyBzaXplb2YoaW50
KTsKCWxlZnQgPSAqbGVucDsKCQoJZm9yICg7IGxlZnQgJiYgdmxlZnQtLTsgaSsrLCBmaXJzdD0w
KSB7CgkJaWYgKHdyaXRlKSB7CgkJCXdoaWxlIChsZWZ0KSB7CgkJCQljaGFyIGM7CgkJCQlpZigo
eyBsb25nIF9fZ3VfZXJyOyBfX3R5cGVvZl9fKCooKChjaGFyICopIGJ1ZmZlcikpKSBfX2d1X3Zh
bDsgbG9uZyBfX2d1X2FkZHI7IF9fYXNtX18oIiI6Ij1yIiAoX19ndV92YWwpKTsgX19ndV9hZGRy
ID0gKGxvbmcpICgoKGNoYXIgKikgYnVmZmVyKSk7IF9fYXNtX18oIiI6Ij1yIiAoX19ndV9lcnIp
KTsgaWYgKCgoKF9fc2lnbmVkX18gbG9uZykoKCgobG9uZykoKGN1cnJlbnQtPnRocmVhZC5jdXJy
ZW50X2RzKS5zZWcpKSkmKF9fZ3VfYWRkciB8IHNpemVvZigqKChjaGFyICopIGJ1ZmZlcikpIHwg
KF9fZ3VfYWRkcisgc2l6ZW9mKCooKGNoYXIgKikgYnVmZmVyKSkpKSkpID49IDApKSB7IHN3aXRj
aCAoc2l6ZW9mKCooKGNoYXIgKikgYnVmZmVyKSkpIHsgY2FzZSAxOiAoeyBfX2FzbV9fIF9fdm9s
YXRpbGVfXyggIjE6XHQiICJsYiIgIlx0JTEsJTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5c
dCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgIm1vdmVc
dCUxLCQwXG5cdCIgImpcdDJiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90
YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19n
dV9lcnIpLCAiPXIiIChfX2d1X3ZhbCkgOiJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICop
KF9fZ3VfYWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBjYXNlIDI6ICh7IF9fYXNtX18g
X192b2xhdGlsZV9fKCAiMTpcdCIgImxoIiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAi
Mjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAi
bW92ZVx0JTEsJDBcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRf
X2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIi
IChfX2d1X2VyciksICI9ciIgKF9fZ3VfdmFsKSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1
Y3QgKikoX19ndV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgNDogKHsgX19h
c21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAibHciICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQw
XG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xu
XHQiICJtb3ZlXHQlMSwkMFxuXHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rp
b25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91cyIg
OiI9ciIgKF9fZ3VfZXJyKSwgIj1yIiAoX19ndV92YWwpIDoibyIgKCgqKHN0cnVjdCBfX2xhcmdl
X3N0cnVjdCAqKShfX2d1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSA4OiAo
eyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHRsd1x0JTEsJTJcbiIgIjI6XHRsd1x0JUQxLCUz
XG5cdCIgIm1vdmVcdCUwLCQwXG4iICIzOlx0LnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjQ6
XHRsaVx0JTAsJTRcblx0IiAibW92ZVx0JTEsJDBcblx0IiAibW92ZVx0JUQxLCQwXG5cdCIgImpc
dDNiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQi
ICIud29yZFx0MWIsNGJcblx0IiAiLndvcmRcdDJiLDRiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIg
KF9fZ3VfZXJyKSwgIj0mciIgKF9fZ3VfdmFsKSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1
Y3QgKikoX19ndV9hZGRyKSkpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1
X2FkZHIgKyA0KSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGRlZmF1bHQ6IF9fZ2V0X3VzZXJf
dW5rbm93bigpOyBicmVhazsgfSB9IChjKSA9IChfX3R5cGVvZl9fKCooKChjaGFyICopIGJ1ZmZl
cikpKSkgX19ndV92YWw7IF9fZ3VfZXJyOyB9KSkKCQkJCQlyZXR1cm4gLTE0OwoJCQkJaWYgKCEo
KChfY3R5cGVbKGludCkodW5zaWduZWQgY2hhcikoYyldKSYoMHgyMCkpICE9IDApKQoJCQkJCWJy
ZWFrOwoJCQkJbGVmdC0tOwoJCQkJKChjaGFyICopIGJ1ZmZlcikrKzsKCQkJfQoJCQlpZiAoIWxl
ZnQpCgkJCQlicmVhazsKCQkJbmVnID0gMDsKCQkJbGVuID0gbGVmdDsKCQkJaWYgKGxlbiA+IDIw
LTEpCgkJCQlsZW4gPSAyMC0xOwoJCQlpZigoeyB2b2lkICpfX2N1X3RvOyBjb25zdCB2b2lkICpf
X2N1X2Zyb207IGxvbmcgX19jdV9sZW47IF9fY3VfdG8gPSAoYnVmKTsgX19jdV9mcm9tID0gKCBi
dWZmZXIpOyBfX2N1X2xlbiA9ICggbGVuKTsgaWYgKCgoKF9fc2lnbmVkX18gbG9uZykoKCgobG9u
ZykoKGN1cnJlbnQtPnRocmVhZC5jdXJyZW50X2RzKS5zZWcpKSkmKCgodW5zaWduZWQgbG9uZyko
IF9fY3VfZnJvbSkpIHwgKCBfX2N1X2xlbikgfCAoKCh1bnNpZ25lZCBsb25nKSggX19jdV9mcm9t
KSkrKCBfX2N1X2xlbikpKSkpID49IDApKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIm1vdmVcdCQ0
LCAlMVxuXHQiICJtb3ZlXHQkNSwgJTJcblx0IiAibW92ZVx0JDYsICUzXG5cdCIgIi5zZXRcdG5v
cmVvcmRlclxuXHQiICJqYWxcdCIiX19jb3B5X3VzZXIiICJcblx0IiAiLnNldFx0bm9hdFxuXHQi
ICJhZGR1XHQkMSwgJTIsICUzXG5cdCIgIi5zZXRcdGF0XG5cdCIgIi5zZXRcdHJlb3JkZXJcblx0
IiAibW92ZVx0JTAsICQ2IiA6ICI9ciIgKF9fY3VfbGVuKSA6ICJyIiAoX19jdV90byksICJyIiAo
X19jdV9mcm9tKSwgInIiIChfX2N1X2xlbikgOiAiJDQiLCAiJDUiLCAiJDYiLCAiJDgiLCAiJDki
LCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDE1IiwgIiQyNCIsICIkMzEiLCJtZW1vcnkiKTsgX19j
dV9sZW47IH0pKQoJCQkJcmV0dXJuIC0xNDsKCQkJYnVmW2xlbl0gPSAwOwoJCQlwID0gYnVmOwoJ
CQlpZiAoKnAgPT0gJy0nICYmIGxlZnQgPiAxKSB7CgkJCQluZWcgPSAxOwoJCQkJbGVmdC0tLCBw
Kys7CgkJCX0KCQkJaWYgKCpwIDwgJzAnIHx8ICpwID4gJzknKQoJCQkJYnJlYWs7CgkJCXZhbCA9
IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAwKSAqIGNvbnY7CgkJCWxlbiA9IHAtYnVmOwoJCQlpZiAo
KGxlbiA8IGxlZnQpICYmICpwICYmICEoKChfY3R5cGVbKGludCkodW5zaWduZWQgY2hhcikoKnAp
XSkmKDB4MjApKSAhPSAwKSkKCQkJCWJyZWFrOwoJCQlpZiAobmVnKQoJCQkJdmFsID0gLXZhbDsK
CQkJYnVmZmVyICs9IGxlbjsKCQkJbGVmdCAtPSBsZW47CgkJCXN3aXRjaChvcCkgewoJCQljYXNl
IDA6CSppID0gdmFsOyBicmVhazsKCQkJY2FzZSAxOgkqaSAmPSB2YWw7IGJyZWFrOwoJCQljYXNl
IDI6CSppIHw9IHZhbDsgYnJlYWs7CgkJCWNhc2UgMzoJaWYoKmkgPCB2YWwpCgkJCQkJCSppID0g
dmFsOwoJCQkJCWJyZWFrOwoJCQljYXNlIDQ6CWlmKCppID4gdmFsKQoJCQkJCQkqaSA9IHZhbDsK
CQkJCQlicmVhazsKCQkJfQoJCX0gZWxzZSB7CgkJCXAgPSBidWY7CgkJCWlmICghZmlyc3QpCgkJ
CQkqcCsrID0gJ1x0JzsKCQkJc3ByaW50ZihwLCAiJWQiLCAoKmkpIC8gY29udik7CgkJCWxlbiA9
IHN0cmxlbihidWYpOwoJCQlpZiAobGVuID4gbGVmdCkKCQkJCWxlbiA9IGxlZnQ7CgkJCWlmKCh7
IHZvaWQgKl9fY3VfdG87IGNvbnN0IHZvaWQgKl9fY3VfZnJvbTsgbG9uZyBfX2N1X2xlbjsgX19j
dV90byA9IChidWZmZXIpOyBfX2N1X2Zyb20gPSAoIGJ1Zik7IF9fY3VfbGVuID0gKCBsZW4pOyBp
ZiAoKCgoX19zaWduZWRfXyBsb25nKSgoKChsb25nKSgoY3VycmVudC0+dGhyZWFkLmN1cnJlbnRf
ZHMpLnNlZykpKSYoKCh1bnNpZ25lZCBsb25nKSggX19jdV90bykpIHwgKCBfX2N1X2xlbikgfCAo
KCh1bnNpZ25lZCBsb25nKSggX19jdV90bykpKyggX19jdV9sZW4pKSkpKSA+PSAwKSkgX19hc21f
XyBfX3ZvbGF0aWxlX18oICJtb3ZlXHQkNCwgJTFcblx0IiAibW92ZVx0JDUsICUyXG5cdCIgIm1v
dmVcdCQ2LCAlM1xuXHQiICJqYWxcdCIiX19jb3B5X3VzZXIiICJcblx0IiAibW92ZVx0JTAsICQ2
IiA6ICI9ciIgKF9fY3VfbGVuKSA6ICJyIiAoX19jdV90byksICJyIiAoX19jdV9mcm9tKSwgInIi
IChfX2N1X2xlbikgOiAiJDQiLCAiJDUiLCAiJDYiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIs
ICIkMTIiLCAiJDE1IiwgIiQyNCIsICIkMzEiLCJtZW1vcnkiKTsgX19jdV9sZW47IH0pKQoJCQkJ
cmV0dXJuIC0xNDsKCQkJbGVmdCAtPSBsZW47CgkJCWJ1ZmZlciArPSBsZW47CgkJfQoJfQoKCWlm
ICghd3JpdGUgJiYgIWZpcnN0ICYmIGxlZnQpIHsKCQlpZigoeyBsb25nIF9fcHVfZXJyOyBfX3R5
cGVvZl9fKCooKCAoY2hhciAqKSBidWZmZXIpKSkgX19wdV92YWw7IGxvbmcgX19wdV9hZGRyOyBf
X3B1X3ZhbCA9ICgoJ1xuJykpOyBfX3B1X2FkZHIgPSAobG9uZykgKCggKGNoYXIgKikgYnVmZmVy
KSk7IF9fYXNtX18oIiI6Ij1yIiAoX19wdV9lcnIpKTsgaWYgKCgoKF9fc2lnbmVkX18gbG9uZyko
KCgobG9uZykoKGN1cnJlbnQtPnRocmVhZC5jdXJyZW50X2RzKS5zZWcpKSkmKF9fcHVfYWRkciB8
IHNpemVvZigqKCAoY2hhciAqKSBidWZmZXIpKSB8IChfX3B1X2FkZHIrIHNpemVvZigqKCAoY2hh
ciAqKSBidWZmZXIpKSkpKSkgPj0gMCkpIHsgc3dpdGNoIChzaXplb2YoKiggKGNoYXIgKikgYnVm
ZmVyKSkpIHsgY2FzZSAxOiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJzYiIgIlx0
JTEsJTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJh
eFwiXG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgImpcdDJiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIu
c2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsM2Jcblx0IiAiLnByZXZp
b3VzIiA6Ij1yIiAoX19wdV9lcnIpIDoiciIgKF9fcHVfdmFsKSwgIm8iICgoKihzdHJ1Y3QgX19s
YXJnZV9zdHJ1Y3QgKikoX19wdV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2Ug
MjogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAic2giICJcdCUxLCUyXG5cdCIgIm1v
dmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxp
XHQlMCwlM1xuXHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhf
dGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9f
cHVfZXJyKSA6InIiIChfX3B1X3ZhbCksICJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICop
KF9fcHVfYWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBjYXNlIDQ6ICh7IF9fYXNtX18g
X192b2xhdGlsZV9fKCAiMTpcdCIgInN3IiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAi
Mjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAi
alx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5c
dCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX3B1X2VycikgOiJyIiAo
X19wdV92YWwpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX3B1X2FkZHIpKSks
ICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSA4OiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXygg
IjE6XHRzd1x0JTEsJTJcblx0IiAiMjpcdHN3XHQlRDEsJTNcbiIgIm1vdmVcdCUwLCQwXG4iICIz
OlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiNDpcdGxpXHQlMCwlNFxuXHQiICJq
XHQzYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0
IiAiLndvcmRcdDFiLDRiXG5cdCIgIi53b3JkXHQyYiw0YlxuXHQiICIucHJldmlvdXMiIDoiPXIi
IChfX3B1X2VycikgOiJyIiAoX19wdV92YWwpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVj
dCAqKShfX3B1X2FkZHIpKSksICJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fcHVf
YWRkciArIDQpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgZGVmYXVsdDogX19wdXRfdXNlcl91
bmtub3duKCk7IGJyZWFrOyB9IH0gX19wdV9lcnI7IH0pKQoJCQlyZXR1cm4gLTE0OwoJCWxlZnQt
LSwgYnVmZmVyKys7Cgl9CglpZiAod3JpdGUpIHsKCQlwID0gKGNoYXIgKikgYnVmZmVyOwoJCXdo
aWxlIChsZWZ0KSB7CgkJCWNoYXIgYzsKCQkJaWYoKHsgbG9uZyBfX2d1X2VycjsgX190eXBlb2Zf
XygqKCggcCsrKSkpIF9fZ3VfdmFsOyBsb25nIF9fZ3VfYWRkcjsgX19hc21fXygiIjoiPXIiIChf
X2d1X3ZhbCkpOyBfX2d1X2FkZHIgPSAobG9uZykgKCggcCsrKSk7IF9fYXNtX18oIiI6Ij1yIiAo
X19ndV9lcnIpKTsgaWYgKCgoKF9fc2lnbmVkX18gbG9uZykoKCgobG9uZykoKGN1cnJlbnQtPnRo
cmVhZC5jdXJyZW50X2RzKS5zZWcpKSkmKF9fZ3VfYWRkciB8IHNpemVvZigqKCBwKyspKSB8IChf
X2d1X2FkZHIrIHNpemVvZigqKCBwKyspKSkpKSkgPj0gMCkpIHsgc3dpdGNoIChzaXplb2YoKigg
cCsrKSkpIHsgY2FzZSAxOiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJsYiIgIlx0
JTEsJTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJh
eFwiXG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgIm1vdmVcdCUxLCQwXG5cdCIgImpcdDJiXG5cdCIg
Ii5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0
MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19ndV9lcnIpLCAiPXIiIChfX2d1X3ZhbCkg
OiJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3VfYWRkcikpKSwgImkiICgtMTQp
KTsgfSk7IGJyZWFrOyBjYXNlIDI6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgImxo
IiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1
cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAibW92ZVx0JTEsJDBcblx0IiAialx0MmJc
blx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53
b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX2d1X2VyciksICI9ciIgKF9fZ3Vf
dmFsKSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyKSkpLCAiaSIg
KC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgNDogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0
IiAibHciICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0
LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xuXHQiICJtb3ZlXHQlMSwkMFxuXHQiICJq
XHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0
IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fZ3VfZXJyKSwgIj1yIiAo
X19ndV92YWwpIDoibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIpKSks
ICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSA4OiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXygg
IjE6XHRsd1x0JTEsJTJcbiIgIjI6XHRsd1x0JUQxLCUzXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIz
Olx0LnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjQ6XHRsaVx0JTAsJTRcblx0IiAibW92ZVx0
JTEsJDBcblx0IiAibW92ZVx0JUQxLCQwXG5cdCIgImpcdDNiXG5cdCIgIi5wcmV2aW91c1xuXHQi
ICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsNGJcblx0IiAiLndv
cmRcdDJiLDRiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fZ3VfZXJyKSwgIj0mciIgKF9fZ3Vf
dmFsKSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyKSkpLCAibyIg
KCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIgKyA0KSkpLCAiaSIgKC0xNCkp
OyB9KTsgYnJlYWs7IGRlZmF1bHQ6IF9fZ2V0X3VzZXJfdW5rbm93bigpOyBicmVhazsgfSB9IChj
KSA9IChfX3R5cGVvZl9fKCooKCBwKyspKSkpIF9fZ3VfdmFsOyBfX2d1X2VycjsgfSkpCgkJCQly
ZXR1cm4gLTE0OwoJCQlpZiAoISgoKF9jdHlwZVsoaW50KSh1bnNpZ25lZCBjaGFyKShjKV0pJigw
eDIwKSkgIT0gMCkpCgkJCQlicmVhazsKCQkJbGVmdC0tOwoJCX0KCX0KCWlmICh3cml0ZSAmJiBm
aXJzdCkKCQlyZXR1cm4gLTIyOwoJKmxlbnAgLT0gbGVmdDsKCWZpbHAtPmZfcG9zICs9ICpsZW5w
OwoJcmV0dXJuIDA7Cn0KCmludCBwcm9jX2RvaW50dmVjKGN0bF90YWJsZSAqdGFibGUsIGludCB3
cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCgkJICAgICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVu
cCkKewogICAgcmV0dXJuIGRvX3Byb2NfZG9pbnR2ZWModGFibGUsd3JpdGUsZmlscCxidWZmZXIs
bGVucCwxLDApOwp9CgogCgoKIAppbnQgcHJvY19kb2ludHZlY19ic2V0KGN0bF90YWJsZSAqdGFi
bGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCgkJCXZvaWQgKmJ1ZmZlciwgc2l6ZV90
ICpsZW5wKQp7CglyZXR1cm4gZG9fcHJvY19kb2ludHZlYyh0YWJsZSx3cml0ZSxmaWxwLGJ1ZmZl
cixsZW5wLDEsCgkJKGN1cnJlbnQtPnBpZCA9PSAxKSA/IDAgOiAxKTsKfQoKaW50IHByb2NfZG9p
bnR2ZWNfbWlubWF4KGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZp
bHAsCgkJICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCkKewoJaW50ICppLCAqbWluLCAqbWF4
LCB2bGVmdCwgZmlyc3Q9MSwgbGVuLCBsZWZ0LCBuZWcsIHZhbDsKCQoJY2hhciBidWZbMjBdLCAq
cDsKCQoJaWYgKCF0YWJsZS0+ZGF0YSB8fCAhdGFibGUtPm1heGxlbiB8fCAhKmxlbnAgfHwKCSAg
ICAoZmlscC0+Zl9wb3MgJiYgIXdyaXRlKSkgewoJCSpsZW5wID0gMDsKCQlyZXR1cm4gMDsKCX0K
CQoJaSA9IChpbnQgKikgdGFibGUtPmRhdGE7CgltaW4gPSAoaW50ICopIHRhYmxlLT5leHRyYTE7
CgltYXggPSAoaW50ICopIHRhYmxlLT5leHRyYTI7Cgl2bGVmdCA9IHRhYmxlLT5tYXhsZW4gLyBz
aXplb2YoaW50KTsKCWxlZnQgPSAqbGVucDsKCQoJZm9yICg7IGxlZnQgJiYgdmxlZnQtLTsgaSsr
LCBmaXJzdD0wKSB7CgkJaWYgKHdyaXRlKSB7CgkJCXdoaWxlIChsZWZ0KSB7CgkJCQljaGFyIGM7
CgkJCQlpZigoeyBsb25nIF9fZ3VfZXJyOyBfX3R5cGVvZl9fKCooKCAoY2hhciAqKSBidWZmZXIp
KSkgX19ndV92YWw7IGxvbmcgX19ndV9hZGRyOyBfX2FzbV9fKCIiOiI9ciIgKF9fZ3VfdmFsKSk7
IF9fZ3VfYWRkciA9IChsb25nKSAoKCAoY2hhciAqKSBidWZmZXIpKTsgX19hc21fXygiIjoiPXIi
IChfX2d1X2VycikpOyBpZiAoKCgoX19zaWduZWRfXyBsb25nKSgoKChsb25nKSgoY3VycmVudC0+
dGhyZWFkLmN1cnJlbnRfZHMpLnNlZykpKSYoX19ndV9hZGRyIHwgc2l6ZW9mKCooIChjaGFyICop
IGJ1ZmZlcikpIHwgKF9fZ3VfYWRkcisgc2l6ZW9mKCooIChjaGFyICopIGJ1ZmZlcikpKSkpKSA+
PSAwKSkgeyBzd2l0Y2ggKHNpemVvZigqKCAoY2hhciAqKSBidWZmZXIpKSkgeyBjYXNlIDE6ICh7
IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgImxiIiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQl
MCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAs
JTNcblx0IiAibW92ZVx0JTEsJDBcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5z
ZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlv
dXMiIDoiPXIiIChfX2d1X2VyciksICI9ciIgKF9fZ3VfdmFsKSA6Im8iICgoKihzdHJ1Y3QgX19s
YXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2Ug
MjogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAibGgiICJcdCUxLCUyXG5cdCIgIm1v
dmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxp
XHQlMCwlM1xuXHQiICJtb3ZlXHQlMSwkMFxuXHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0
IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5w
cmV2aW91cyIgOiI9ciIgKF9fZ3VfZXJyKSwgIj1yIiAoX19ndV92YWwpIDoibyIgKCgqKHN0cnVj
dCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsg
Y2FzZSA0OiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJsdyIgIlx0JTEsJTJcblx0
IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICIz
Olx0bGlcdCUwLCUzXG5cdCIgIm1vdmVcdCUxLCQwXG5cdCIgImpcdDJiXG5cdCIgIi5wcmV2aW91
c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsM2Jcblx0
IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19ndV9lcnIpLCAiPXIiIChfX2d1X3ZhbCkgOiJvIiAoKCoo
c3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3VfYWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJy
ZWFrOyBjYXNlIDg6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdGx3XHQlMSwlMlxuIiAi
MjpcdGx3XHQlRDEsJTNcblx0IiAibW92ZVx0JTAsJDBcbiIgIjM6XHQuc2VjdGlvblx0LmZpeHVw
LFwiYXhcIlxuIiAiNDpcdGxpXHQlMCwlNFxuXHQiICJtb3ZlXHQlMSwkMFxuXHQiICJtb3ZlXHQl
RDEsJDBcblx0IiAialx0M2Jcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3Rh
YmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiw0YlxuXHQiICIud29yZFx0MmIsNGJcblx0IiAiLnBy
ZXZpb3VzIiA6Ij1yIiAoX19ndV9lcnIpLCAiPSZyIiAoX19ndV92YWwpIDoibyIgKCgqKHN0cnVj
dCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIpKSksICJvIiAoKCooc3RydWN0IF9fbGFyZ2Vf
c3RydWN0ICopKF9fZ3VfYWRkciArIDQpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgZGVmYXVs
dDogX19nZXRfdXNlcl91bmtub3duKCk7IGJyZWFrOyB9IH0gKGMpID0gKF9fdHlwZW9mX18oKigo
IChjaGFyICopIGJ1ZmZlcikpKSkgX19ndV92YWw7IF9fZ3VfZXJyOyB9KSkKCQkJCQlyZXR1cm4g
LTE0OwoJCQkJaWYgKCEoKChfY3R5cGVbKGludCkodW5zaWduZWQgY2hhcikoYyldKSYoMHgyMCkp
ICE9IDApKQoJCQkJCWJyZWFrOwoJCQkJbGVmdC0tOwoJCQkJKChjaGFyICopIGJ1ZmZlcikrKzsK
CQkJfQoJCQlpZiAoIWxlZnQpCgkJCQlicmVhazsKCQkJbmVnID0gMDsKCQkJbGVuID0gbGVmdDsK
CQkJaWYgKGxlbiA+IDIwLTEpCgkJCQlsZW4gPSAyMC0xOwoJCQlpZigoeyB2b2lkICpfX2N1X3Rv
OyBjb25zdCB2b2lkICpfX2N1X2Zyb207IGxvbmcgX19jdV9sZW47IF9fY3VfdG8gPSAoYnVmKTsg
X19jdV9mcm9tID0gKCBidWZmZXIpOyBfX2N1X2xlbiA9ICggbGVuKTsgaWYgKCgoKF9fc2lnbmVk
X18gbG9uZykoKCgobG9uZykoKGN1cnJlbnQtPnRocmVhZC5jdXJyZW50X2RzKS5zZWcpKSkmKCgo
dW5zaWduZWQgbG9uZykoIF9fY3VfZnJvbSkpIHwgKCBfX2N1X2xlbikgfCAoKCh1bnNpZ25lZCBs
b25nKSggX19jdV9mcm9tKSkrKCBfX2N1X2xlbikpKSkpID49IDApKSBfX2FzbV9fIF9fdm9sYXRp
bGVfXyggIm1vdmVcdCQ0LCAlMVxuXHQiICJtb3ZlXHQkNSwgJTJcblx0IiAibW92ZVx0JDYsICUz
XG5cdCIgIi5zZXRcdG5vcmVvcmRlclxuXHQiICJqYWxcdCIiX19jb3B5X3VzZXIiICJcblx0IiAi
LnNldFx0bm9hdFxuXHQiICJhZGR1XHQkMSwgJTIsICUzXG5cdCIgIi5zZXRcdGF0XG5cdCIgIi5z
ZXRcdHJlb3JkZXJcblx0IiAibW92ZVx0JTAsICQ2IiA6ICI9ciIgKF9fY3VfbGVuKSA6ICJyIiAo
X19jdV90byksICJyIiAoX19jdV9mcm9tKSwgInIiIChfX2N1X2xlbikgOiAiJDQiLCAiJDUiLCAi
JDYiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDE1IiwgIiQyNCIsICIkMzEi
LCJtZW1vcnkiKTsgX19jdV9sZW47IH0pKQoJCQkJcmV0dXJuIC0xNDsKCQkJYnVmW2xlbl0gPSAw
OwoJCQlwID0gYnVmOwoJCQlpZiAoKnAgPT0gJy0nICYmIGxlZnQgPiAxKSB7CgkJCQluZWcgPSAx
OwoJCQkJbGVmdC0tLCBwKys7CgkJCX0KCQkJaWYgKCpwIDwgJzAnIHx8ICpwID4gJzknKQoJCQkJ
YnJlYWs7CgkJCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAwKTsKCQkJbGVuID0gcC1idWY7
CgkJCWlmICgobGVuIDwgbGVmdCkgJiYgKnAgJiYgISgoKF9jdHlwZVsoaW50KSh1bnNpZ25lZCBj
aGFyKSgqcCldKSYoMHgyMCkpICE9IDApKQoJCQkJYnJlYWs7CgkJCWlmIChuZWcpCgkJCQl2YWwg
PSAtdmFsOwoJCQlidWZmZXIgKz0gbGVuOwoJCQlsZWZ0IC09IGxlbjsKCgkJCWlmIChtaW4gJiYg
dmFsIDwgKm1pbisrKQoJCQkJY29udGludWU7CgkJCWlmIChtYXggJiYgdmFsID4gKm1heCsrKQoJ
CQkJY29udGludWU7CgkJCSppID0gdmFsOwoJCX0gZWxzZSB7CgkJCXAgPSBidWY7CgkJCWlmICgh
Zmlyc3QpCgkJCQkqcCsrID0gJ1x0JzsKCQkJc3ByaW50ZihwLCAiJWQiLCAqaSk7CgkJCWxlbiA9
IHN0cmxlbihidWYpOwoJCQlpZiAobGVuID4gbGVmdCkKCQkJCWxlbiA9IGxlZnQ7CgkJCWlmKCh7
IHZvaWQgKl9fY3VfdG87IGNvbnN0IHZvaWQgKl9fY3VfZnJvbTsgbG9uZyBfX2N1X2xlbjsgX19j
dV90byA9IChidWZmZXIpOyBfX2N1X2Zyb20gPSAoIGJ1Zik7IF9fY3VfbGVuID0gKCBsZW4pOyBp
ZiAoKCgoX19zaWduZWRfXyBsb25nKSgoKChsb25nKSgoY3VycmVudC0+dGhyZWFkLmN1cnJlbnRf
ZHMpLnNlZykpKSYoKCh1bnNpZ25lZCBsb25nKSggX19jdV90bykpIHwgKCBfX2N1X2xlbikgfCAo
KCh1bnNpZ25lZCBsb25nKSggX19jdV90bykpKyggX19jdV9sZW4pKSkpKSA+PSAwKSkgX19hc21f
XyBfX3ZvbGF0aWxlX18oICJtb3ZlXHQkNCwgJTFcblx0IiAibW92ZVx0JDUsICUyXG5cdCIgIm1v
dmVcdCQ2LCAlM1xuXHQiICJqYWxcdCIiX19jb3B5X3VzZXIiICJcblx0IiAibW92ZVx0JTAsICQ2
IiA6ICI9ciIgKF9fY3VfbGVuKSA6ICJyIiAoX19jdV90byksICJyIiAoX19jdV9mcm9tKSwgInIi
IChfX2N1X2xlbikgOiAiJDQiLCAiJDUiLCAiJDYiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIs
ICIkMTIiLCAiJDE1IiwgIiQyNCIsICIkMzEiLCJtZW1vcnkiKTsgX19jdV9sZW47IH0pKQoJCQkJ
cmV0dXJuIC0xNDsKCQkJbGVmdCAtPSBsZW47CgkJCWJ1ZmZlciArPSBsZW47CgkJfQoJfQoKCWlm
ICghd3JpdGUgJiYgIWZpcnN0ICYmIGxlZnQpIHsKCQlpZigoeyBsb25nIF9fcHVfZXJyOyBfX3R5
cGVvZl9fKCooKCAoY2hhciAqKSBidWZmZXIpKSkgX19wdV92YWw7IGxvbmcgX19wdV9hZGRyOyBf
X3B1X3ZhbCA9ICgoJ1xuJykpOyBfX3B1X2FkZHIgPSAobG9uZykgKCggKGNoYXIgKikgYnVmZmVy
KSk7IF9fYXNtX18oIiI6Ij1yIiAoX19wdV9lcnIpKTsgaWYgKCgoKF9fc2lnbmVkX18gbG9uZyko
KCgobG9uZykoKGN1cnJlbnQtPnRocmVhZC5jdXJyZW50X2RzKS5zZWcpKSkmKF9fcHVfYWRkciB8
IHNpemVvZigqKCAoY2hhciAqKSBidWZmZXIpKSB8IChfX3B1X2FkZHIrIHNpemVvZigqKCAoY2hh
ciAqKSBidWZmZXIpKSkpKSkgPj0gMCkpIHsgc3dpdGNoIChzaXplb2YoKiggKGNoYXIgKikgYnVm
ZmVyKSkpIHsgY2FzZSAxOiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJzYiIgIlx0
JTEsJTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJh
eFwiXG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgImpcdDJiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIu
c2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsM2Jcblx0IiAiLnByZXZp
b3VzIiA6Ij1yIiAoX19wdV9lcnIpIDoiciIgKF9fcHVfdmFsKSwgIm8iICgoKihzdHJ1Y3QgX19s
YXJnZV9zdHJ1Y3QgKikoX19wdV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2Ug
MjogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAic2giICJcdCUxLCUyXG5cdCIgIm1v
dmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxp
XHQlMCwlM1xuXHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhf
dGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9f
cHVfZXJyKSA6InIiIChfX3B1X3ZhbCksICJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICop
KF9fcHVfYWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBjYXNlIDQ6ICh7IF9fYXNtX18g
X192b2xhdGlsZV9fKCAiMTpcdCIgInN3IiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAi
Mjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAi
alx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5c
dCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX3B1X2VycikgOiJyIiAo
X19wdV92YWwpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX3B1X2FkZHIpKSks
ICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSA4OiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXygg
IjE6XHRzd1x0JTEsJTJcblx0IiAiMjpcdHN3XHQlRDEsJTNcbiIgIm1vdmVcdCUwLCQwXG4iICIz
OlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiNDpcdGxpXHQlMCwlNFxuXHQiICJq
XHQzYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0
IiAiLndvcmRcdDFiLDRiXG5cdCIgIi53b3JkXHQyYiw0YlxuXHQiICIucHJldmlvdXMiIDoiPXIi
IChfX3B1X2VycikgOiJyIiAoX19wdV92YWwpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVj
dCAqKShfX3B1X2FkZHIpKSksICJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fcHVf
YWRkciArIDQpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgZGVmYXVsdDogX19wdXRfdXNlcl91
bmtub3duKCk7IGJyZWFrOyB9IH0gX19wdV9lcnI7IH0pKQoJCQlyZXR1cm4gLTE0OwoJCWxlZnQt
LSwgYnVmZmVyKys7Cgl9CglpZiAod3JpdGUpIHsKCQlwID0gKGNoYXIgKikgYnVmZmVyOwoJCXdo
aWxlIChsZWZ0KSB7CgkJCWNoYXIgYzsKCQkJaWYoKHsgbG9uZyBfX2d1X2VycjsgX190eXBlb2Zf
XygqKCggcCsrKSkpIF9fZ3VfdmFsOyBsb25nIF9fZ3VfYWRkcjsgX19hc21fXygiIjoiPXIiIChf
X2d1X3ZhbCkpOyBfX2d1X2FkZHIgPSAobG9uZykgKCggcCsrKSk7IF9fYXNtX18oIiI6Ij1yIiAo
X19ndV9lcnIpKTsgaWYgKCgoKF9fc2lnbmVkX18gbG9uZykoKCgobG9uZykoKGN1cnJlbnQtPnRo
cmVhZC5jdXJyZW50X2RzKS5zZWcpKSkmKF9fZ3VfYWRkciB8IHNpemVvZigqKCBwKyspKSB8IChf
X2d1X2FkZHIrIHNpemVvZigqKCBwKyspKSkpKSkgPj0gMCkpIHsgc3dpdGNoIChzaXplb2YoKigg
cCsrKSkpIHsgY2FzZSAxOiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJsYiIgIlx0
JTEsJTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJh
eFwiXG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgIm1vdmVcdCUxLCQwXG5cdCIgImpcdDJiXG5cdCIg
Ii5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0
MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19ndV9lcnIpLCAiPXIiIChfX2d1X3ZhbCkg
OiJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3VfYWRkcikpKSwgImkiICgtMTQp
KTsgfSk7IGJyZWFrOyBjYXNlIDI6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgImxo
IiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1
cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAibW92ZVx0JTEsJDBcblx0IiAialx0MmJc
blx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53
b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX2d1X2VyciksICI9ciIgKF9fZ3Vf
dmFsKSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyKSkpLCAiaSIg
KC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgNDogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0
IiAibHciICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0
LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xuXHQiICJtb3ZlXHQlMSwkMFxuXHQiICJq
XHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0
IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fZ3VfZXJyKSwgIj1yIiAo
X19ndV92YWwpIDoibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIpKSks
ICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSA4OiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXygg
IjE6XHRsd1x0JTEsJTJcbiIgIjI6XHRsd1x0JUQxLCUzXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIz
Olx0LnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjQ6XHRsaVx0JTAsJTRcblx0IiAibW92ZVx0
JTEsJDBcblx0IiAibW92ZVx0JUQxLCQwXG5cdCIgImpcdDNiXG5cdCIgIi5wcmV2aW91c1xuXHQi
ICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsNGJcblx0IiAiLndv
cmRcdDJiLDRiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fZ3VfZXJyKSwgIj0mciIgKF9fZ3Vf
dmFsKSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyKSkpLCAibyIg
KCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIgKyA0KSkpLCAiaSIgKC0xNCkp
OyB9KTsgYnJlYWs7IGRlZmF1bHQ6IF9fZ2V0X3VzZXJfdW5rbm93bigpOyBicmVhazsgfSB9IChj
KSA9IChfX3R5cGVvZl9fKCooKCBwKyspKSkpIF9fZ3VfdmFsOyBfX2d1X2VycjsgfSkpCgkJCQly
ZXR1cm4gLTE0OwoJCQlpZiAoISgoKF9jdHlwZVsoaW50KSh1bnNpZ25lZCBjaGFyKShjKV0pJigw
eDIwKSkgIT0gMCkpCgkJCQlicmVhazsKCQkJbGVmdC0tOwoJCX0KCX0KCWlmICh3cml0ZSAmJiBm
aXJzdCkKCQlyZXR1cm4gLTIyOwoJKmxlbnAgLT0gbGVmdDsKCWZpbHAtPmZfcG9zICs9ICpsZW5w
OwoJcmV0dXJuIDA7Cn0KCiAKCgoKc3RhdGljIGludCBkb19wcm9jX2RvdWxvbmd2ZWNfbWlubWF4
KGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbHAs
CgkJCQkgICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLAoJCQkJICAgICB1bnNpZ25lZCBs
b25nIGNvbnZtdWwsCgkJCQkgICAgIHVuc2lnbmVkIGxvbmcgY29udmRpdikKewoKCXVuc2lnbmVk
IGxvbmcgKmksICptaW4sICptYXgsIHZhbDsKCWludCB2bGVmdCwgZmlyc3Q9MSwgbGVuLCBsZWZ0
LCBuZWc7CgljaGFyIGJ1ZlsyMF0sICpwOwoJCglpZiAoIXRhYmxlLT5kYXRhIHx8ICF0YWJsZS0+
bWF4bGVuIHx8ICEqbGVucCB8fAoJICAgIChmaWxwLT5mX3BvcyAmJiAhd3JpdGUpKSB7CgkJKmxl
bnAgPSAwOwoJCXJldHVybiAwOwoJfQoJCglpID0gKHVuc2lnbmVkIGxvbmcgKikgdGFibGUtPmRh
dGE7CgltaW4gPSAodW5zaWduZWQgbG9uZyAqKSB0YWJsZS0+ZXh0cmExOwoJbWF4ID0gKHVuc2ln
bmVkIGxvbmcgKikgdGFibGUtPmV4dHJhMjsKCXZsZWZ0ID0gdGFibGUtPm1heGxlbiAvIHNpemVv
Zih1bnNpZ25lZCBsb25nKTsKCWxlZnQgPSAqbGVucDsKCQoJZm9yICg7IGxlZnQgJiYgdmxlZnQt
LTsgaSsrLCBmaXJzdD0wKSB7CgkJaWYgKHdyaXRlKSB7CgkJCXdoaWxlIChsZWZ0KSB7CgkJCQlj
aGFyIGM7CgkJCQlpZigoeyBsb25nIF9fZ3VfZXJyOyBfX3R5cGVvZl9fKCooKCAoY2hhciAqKSBi
dWZmZXIpKSkgX19ndV92YWw7IGxvbmcgX19ndV9hZGRyOyBfX2FzbV9fKCIiOiI9ciIgKF9fZ3Vf
dmFsKSk7IF9fZ3VfYWRkciA9IChsb25nKSAoKCAoY2hhciAqKSBidWZmZXIpKTsgX19hc21fXygi
IjoiPXIiIChfX2d1X2VycikpOyBpZiAoKCgoX19zaWduZWRfXyBsb25nKSgoKChsb25nKSgoY3Vy
cmVudC0+dGhyZWFkLmN1cnJlbnRfZHMpLnNlZykpKSYoX19ndV9hZGRyIHwgc2l6ZW9mKCooIChj
aGFyICopIGJ1ZmZlcikpIHwgKF9fZ3VfYWRkcisgc2l6ZW9mKCooIChjaGFyICopIGJ1ZmZlcikp
KSkpKSA+PSAwKSkgeyBzd2l0Y2ggKHNpemVvZigqKCAoY2hhciAqKSBidWZmZXIpKSkgeyBjYXNl
IDE6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgImxiIiAiXHQlMSwlMlxuXHQiICJt
b3ZlXHQlMCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRs
aVx0JTAsJTNcblx0IiAibW92ZVx0JTEsJDBcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5c
dCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIu
cHJldmlvdXMiIDoiPXIiIChfX2d1X2VyciksICI9ciIgKF9fZ3VfdmFsKSA6Im8iICgoKihzdHJ1
Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7
IGNhc2UgMjogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAibGgiICJcdCUxLCUyXG5c
dCIgIm1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAi
MzpcdGxpXHQlMCwlM1xuXHQiICJtb3ZlXHQlMSwkMFxuXHQiICJqXHQyYlxuXHQiICIucHJldmlv
dXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5c
dCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fZ3VfZXJyKSwgIj1yIiAoX19ndV92YWwpIDoibyIgKCgq
KHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBi
cmVhazsgY2FzZSA0OiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJsdyIgIlx0JTEs
JTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwi
XG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgIm1vdmVcdCUxLCQwXG5cdCIgImpcdDJiXG5cdCIgIi5w
cmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIs
M2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19ndV9lcnIpLCAiPXIiIChfX2d1X3ZhbCkgOiJv
IiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3VfYWRkcikpKSwgImkiICgtMTQpKTsg
fSk7IGJyZWFrOyBjYXNlIDg6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdGx3XHQlMSwl
MlxuIiAiMjpcdGx3XHQlRDEsJTNcblx0IiAibW92ZVx0JTAsJDBcbiIgIjM6XHQuc2VjdGlvblx0
LmZpeHVwLFwiYXhcIlxuIiAiNDpcdGxpXHQlMCwlNFxuXHQiICJtb3ZlXHQlMSwkMFxuXHQiICJt
b3ZlXHQlRDEsJDBcblx0IiAialx0M2Jcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRf
X2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiw0YlxuXHQiICIud29yZFx0MmIsNGJcblx0
IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19ndV9lcnIpLCAiPSZyIiAoX19ndV92YWwpIDoibyIgKCgq
KHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIpKSksICJvIiAoKCooc3RydWN0IF9f
bGFyZ2Vfc3RydWN0ICopKF9fZ3VfYWRkciArIDQpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsg
ZGVmYXVsdDogX19nZXRfdXNlcl91bmtub3duKCk7IGJyZWFrOyB9IH0gKGMpID0gKF9fdHlwZW9m
X18oKigoIChjaGFyICopIGJ1ZmZlcikpKSkgX19ndV92YWw7IF9fZ3VfZXJyOyB9KSkKCQkJCQly
ZXR1cm4gLTE0OwoJCQkJaWYgKCEoKChfY3R5cGVbKGludCkodW5zaWduZWQgY2hhcikoYyldKSYo
MHgyMCkpICE9IDApKQoJCQkJCWJyZWFrOwoJCQkJbGVmdC0tOwoJCQkJKChjaGFyICopIGJ1ZmZl
cikrKzsKCQkJfQoJCQlpZiAoIWxlZnQpCgkJCQlicmVhazsKCQkJbmVnID0gMDsKCQkJbGVuID0g
bGVmdDsKCQkJaWYgKGxlbiA+IDIwLTEpCgkJCQlsZW4gPSAyMC0xOwoJCQlpZigoeyB2b2lkICpf
X2N1X3RvOyBjb25zdCB2b2lkICpfX2N1X2Zyb207IGxvbmcgX19jdV9sZW47IF9fY3VfdG8gPSAo
YnVmKTsgX19jdV9mcm9tID0gKCBidWZmZXIpOyBfX2N1X2xlbiA9ICggbGVuKTsgaWYgKCgoKF9f
c2lnbmVkX18gbG9uZykoKCgobG9uZykoKGN1cnJlbnQtPnRocmVhZC5jdXJyZW50X2RzKS5zZWcp
KSkmKCgodW5zaWduZWQgbG9uZykoIF9fY3VfZnJvbSkpIHwgKCBfX2N1X2xlbikgfCAoKCh1bnNp
Z25lZCBsb25nKSggX19jdV9mcm9tKSkrKCBfX2N1X2xlbikpKSkpID49IDApKSBfX2FzbV9fIF9f
dm9sYXRpbGVfXyggIm1vdmVcdCQ0LCAlMVxuXHQiICJtb3ZlXHQkNSwgJTJcblx0IiAibW92ZVx0
JDYsICUzXG5cdCIgIi5zZXRcdG5vcmVvcmRlclxuXHQiICJqYWxcdCIiX19jb3B5X3VzZXIiICJc
blx0IiAiLnNldFx0bm9hdFxuXHQiICJhZGR1XHQkMSwgJTIsICUzXG5cdCIgIi5zZXRcdGF0XG5c
dCIgIi5zZXRcdHJlb3JkZXJcblx0IiAibW92ZVx0JTAsICQ2IiA6ICI9ciIgKF9fY3VfbGVuKSA6
ICJyIiAoX19jdV90byksICJyIiAoX19jdV9mcm9tKSwgInIiIChfX2N1X2xlbikgOiAiJDQiLCAi
JDUiLCAiJDYiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDE1IiwgIiQyNCIs
ICIkMzEiLCJtZW1vcnkiKTsgX19jdV9sZW47IH0pKQoJCQkJcmV0dXJuIC0xNDsKCQkJYnVmW2xl
bl0gPSAwOwoJCQlwID0gYnVmOwoJCQlpZiAoKnAgPT0gJy0nICYmIGxlZnQgPiAxKSB7CgkJCQlu
ZWcgPSAxOwoJCQkJbGVmdC0tLCBwKys7CgkJCX0KCQkJaWYgKCpwIDwgJzAnIHx8ICpwID4gJzkn
KQoJCQkJYnJlYWs7CgkJCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAwKSAqIGNvbnZtdWwg
LyBjb252ZGl2IDsKCQkJbGVuID0gcC1idWY7CgkJCWlmICgobGVuIDwgbGVmdCkgJiYgKnAgJiYg
ISgoKF9jdHlwZVsoaW50KSh1bnNpZ25lZCBjaGFyKSgqcCldKSYoMHgyMCkpICE9IDApKQoJCQkJ
YnJlYWs7CgkJCWlmIChuZWcpCgkJCQl2YWwgPSAtdmFsOwoJCQlidWZmZXIgKz0gbGVuOwoJCQls
ZWZ0IC09IGxlbjsKCgkJCWlmKG5lZykKCQkJCWNvbnRpbnVlOwoJCQlpZiAobWluICYmIHZhbCA8
ICptaW4rKykKCQkJCWNvbnRpbnVlOwoJCQlpZiAobWF4ICYmIHZhbCA+ICptYXgrKykKCQkJCWNv
bnRpbnVlOwoJCQkqaSA9IHZhbDsKCQl9IGVsc2UgewoJCQlwID0gYnVmOwoJCQlpZiAoIWZpcnN0
KQoJCQkJKnArKyA9ICdcdCc7CgkJCXNwcmludGYocCwgIiVsdSIsIGNvbnZkaXYgKiAoKmkpIC8g
Y29udm11bCk7CgkJCWxlbiA9IHN0cmxlbihidWYpOwoJCQlpZiAobGVuID4gbGVmdCkKCQkJCWxl
biA9IGxlZnQ7CgkJCWlmKCh7IHZvaWQgKl9fY3VfdG87IGNvbnN0IHZvaWQgKl9fY3VfZnJvbTsg
bG9uZyBfX2N1X2xlbjsgX19jdV90byA9IChidWZmZXIpOyBfX2N1X2Zyb20gPSAoIGJ1Zik7IF9f
Y3VfbGVuID0gKCBsZW4pOyBpZiAoKCgoX19zaWduZWRfXyBsb25nKSgoKChsb25nKSgoY3VycmVu
dC0+dGhyZWFkLmN1cnJlbnRfZHMpLnNlZykpKSYoKCh1bnNpZ25lZCBsb25nKSggX19jdV90bykp
IHwgKCBfX2N1X2xlbikgfCAoKCh1bnNpZ25lZCBsb25nKSggX19jdV90bykpKyggX19jdV9sZW4p
KSkpKSA+PSAwKSkgX19hc21fXyBfX3ZvbGF0aWxlX18oICJtb3ZlXHQkNCwgJTFcblx0IiAibW92
ZVx0JDUsICUyXG5cdCIgIm1vdmVcdCQ2LCAlM1xuXHQiICJqYWxcdCIiX19jb3B5X3VzZXIiICJc
blx0IiAibW92ZVx0JTAsICQ2IiA6ICI9ciIgKF9fY3VfbGVuKSA6ICJyIiAoX19jdV90byksICJy
IiAoX19jdV9mcm9tKSwgInIiIChfX2N1X2xlbikgOiAiJDQiLCAiJDUiLCAiJDYiLCAiJDgiLCAi
JDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDE1IiwgIiQyNCIsICIkMzEiLCJtZW1vcnkiKTsg
X19jdV9sZW47IH0pKQoJCQkJcmV0dXJuIC0xNDsKCQkJbGVmdCAtPSBsZW47CgkJCWJ1ZmZlciAr
PSBsZW47CgkJfQoJfQoKCWlmICghd3JpdGUgJiYgIWZpcnN0ICYmIGxlZnQpIHsKCQlpZigoeyBs
b25nIF9fcHVfZXJyOyBfX3R5cGVvZl9fKCooKCAoY2hhciAqKSBidWZmZXIpKSkgX19wdV92YWw7
IGxvbmcgX19wdV9hZGRyOyBfX3B1X3ZhbCA9ICgoJ1xuJykpOyBfX3B1X2FkZHIgPSAobG9uZykg
KCggKGNoYXIgKikgYnVmZmVyKSk7IF9fYXNtX18oIiI6Ij1yIiAoX19wdV9lcnIpKTsgaWYgKCgo
KF9fc2lnbmVkX18gbG9uZykoKCgobG9uZykoKGN1cnJlbnQtPnRocmVhZC5jdXJyZW50X2RzKS5z
ZWcpKSkmKF9fcHVfYWRkciB8IHNpemVvZigqKCAoY2hhciAqKSBidWZmZXIpKSB8IChfX3B1X2Fk
ZHIrIHNpemVvZigqKCAoY2hhciAqKSBidWZmZXIpKSkpKSkgPj0gMCkpIHsgc3dpdGNoIChzaXpl
b2YoKiggKGNoYXIgKikgYnVmZmVyKSkpIHsgY2FzZSAxOiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVf
XyggIjE6XHQiICJzYiIgIlx0JTEsJTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5z
ZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgImpcdDJiXG5cdCIg
Ii5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0
MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19wdV9lcnIpIDoiciIgKF9fcHVfdmFsKSwg
Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19wdV9hZGRyKSkpLCAiaSIgKC0xNCkp
OyB9KTsgYnJlYWs7IGNhc2UgMjogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAic2gi
ICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVw
LFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xuXHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0
IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5w
cmV2aW91cyIgOiI9ciIgKF9fcHVfZXJyKSA6InIiIChfX3B1X3ZhbCksICJvIiAoKCooc3RydWN0
IF9fbGFyZ2Vfc3RydWN0ICopKF9fcHVfYWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBj
YXNlIDQ6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgInN3IiAiXHQlMSwlMlxuXHQi
ICJtb3ZlXHQlMCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6
XHRsaVx0JTAsJTNcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRf
X2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIi
IChfX3B1X2VycikgOiJyIiAoX19wdV92YWwpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVj
dCAqKShfX3B1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSA4OiAoeyBfX2Fz
bV9fIF9fdm9sYXRpbGVfXyggIjE6XHRzd1x0JTEsJTJcblx0IiAiMjpcdHN3XHQlRDEsJTNcbiIg
Im1vdmVcdCUwLCQwXG4iICIzOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiNDpc
dGxpXHQlMCwlNFxuXHQiICJqXHQzYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9f
ZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDRiXG5cdCIgIi53b3JkXHQyYiw0YlxuXHQi
ICIucHJldmlvdXMiIDoiPXIiIChfX3B1X2VycikgOiJyIiAoX19wdV92YWwpLCAibyIgKCgqKHN0
cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX3B1X2FkZHIpKSksICJvIiAoKCooc3RydWN0IF9fbGFy
Z2Vfc3RydWN0ICopKF9fcHVfYWRkciArIDQpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgZGVm
YXVsdDogX19wdXRfdXNlcl91bmtub3duKCk7IGJyZWFrOyB9IH0gX19wdV9lcnI7IH0pKQoJCQly
ZXR1cm4gLTE0OwoJCWxlZnQtLSwgYnVmZmVyKys7Cgl9CglpZiAod3JpdGUpIHsKCQlwID0gKGNo
YXIgKikgYnVmZmVyOwoJCXdoaWxlIChsZWZ0KSB7CgkJCWNoYXIgYzsKCQkJaWYoKHsgbG9uZyBf
X2d1X2VycjsgX190eXBlb2ZfXygqKCggcCsrKSkpIF9fZ3VfdmFsOyBsb25nIF9fZ3VfYWRkcjsg
X19hc21fXygiIjoiPXIiIChfX2d1X3ZhbCkpOyBfX2d1X2FkZHIgPSAobG9uZykgKCggcCsrKSk7
IF9fYXNtX18oIiI6Ij1yIiAoX19ndV9lcnIpKTsgaWYgKCgoKF9fc2lnbmVkX18gbG9uZykoKCgo
bG9uZykoKGN1cnJlbnQtPnRocmVhZC5jdXJyZW50X2RzKS5zZWcpKSkmKF9fZ3VfYWRkciB8IHNp
emVvZigqKCBwKyspKSB8IChfX2d1X2FkZHIrIHNpemVvZigqKCBwKyspKSkpKSkgPj0gMCkpIHsg
c3dpdGNoIChzaXplb2YoKiggcCsrKSkpIHsgY2FzZSAxOiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVf
XyggIjE6XHQiICJsYiIgIlx0JTEsJTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5z
ZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgIm1vdmVcdCUxLCQw
XG5cdCIgImpcdDJiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxc
ImFcIlxuXHQiICIud29yZFx0MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19ndV9lcnIp
LCAiPXIiIChfX2d1X3ZhbCkgOiJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3Vf
YWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBjYXNlIDI6ICh7IF9fYXNtX18gX192b2xh
dGlsZV9fKCAiMTpcdCIgImxoIiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAiMjpcblx0
IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAibW92ZVx0
JTEsJDBcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3Rh
YmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX2d1
X2VyciksICI9ciIgKF9fZ3VfdmFsKSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKiko
X19ndV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgNDogKHsgX19hc21fXyBf
X3ZvbGF0aWxlX18oICIxOlx0IiAibHciICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIy
OlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xuXHQiICJt
b3ZlXHQlMSwkMFxuXHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9f
ZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIg
KF9fZ3VfZXJyKSwgIj1yIiAoX19ndV92YWwpIDoibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVj
dCAqKShfX2d1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSA4OiAoeyBfX2Fz
bV9fIF9fdm9sYXRpbGVfXyggIjE6XHRsd1x0JTEsJTJcbiIgIjI6XHRsd1x0JUQxLCUzXG5cdCIg
Im1vdmVcdCUwLCQwXG4iICIzOlx0LnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjQ6XHRsaVx0
JTAsJTRcblx0IiAibW92ZVx0JTEsJDBcblx0IiAibW92ZVx0JUQxLCQwXG5cdCIgImpcdDNiXG5c
dCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29y
ZFx0MWIsNGJcblx0IiAiLndvcmRcdDJiLDRiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fZ3Vf
ZXJyKSwgIj0mciIgKF9fZ3VfdmFsKSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKiko
X19ndV9hZGRyKSkpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIg
KyA0KSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGRlZmF1bHQ6IF9fZ2V0X3VzZXJfdW5rbm93
bigpOyBicmVhazsgfSB9IChjKSA9IChfX3R5cGVvZl9fKCooKCBwKyspKSkpIF9fZ3VfdmFsOyBf
X2d1X2VycjsgfSkpCgkJCQlyZXR1cm4gLTE0OwoJCQlpZiAoISgoKF9jdHlwZVsoaW50KSh1bnNp
Z25lZCBjaGFyKShjKV0pJigweDIwKSkgIT0gMCkpCgkJCQlicmVhazsKCQkJbGVmdC0tOwoJCX0K
CX0KCWlmICh3cml0ZSAmJiBmaXJzdCkKCQlyZXR1cm4gLTIyOwoJKmxlbnAgLT0gbGVmdDsKCWZp
bHAtPmZfcG9zICs9ICpsZW5wOwoJcmV0dXJuIDA7Cgp9CgppbnQgcHJvY19kb3Vsb25ndmVjX21p
bm1heChjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAoJCQkg
ICB2b2lkICpidWZmZXIsIHNpemVfdCAqbGVucCkKewogICAgcmV0dXJuIGRvX3Byb2NfZG91bG9u
Z3ZlY19taW5tYXgodGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnAsIDFsLCAxbCk7Cn0K
CmludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY3RsX3RhYmxlICp0YWJsZSwg
aW50IHdyaXRlLAoJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbHAsCgkJCQkgICAgICB2b2lkICpi
dWZmZXIsIHNpemVfdCAqbGVucCkKewogICAgcmV0dXJuIGRvX3Byb2NfZG91bG9uZ3ZlY19taW5t
YXgodGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsCgkJCQkgICAgIGxlbnAsIDEwMCwgMTAwMGwp
Owp9CgoKIAppbnQgcHJvY19kb2ludHZlY19qaWZmaWVzKGN0bF90YWJsZSAqdGFibGUsIGludCB3
cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCgkJCSAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAp
CnsKICAgIHJldHVybiBkb19wcm9jX2RvaW50dmVjKHRhYmxlLHdyaXRlLGZpbHAsYnVmZmVyLGxl
bnAsMTAwLDApOwp9CgoKIyAxMDkyICJzeXNjdGwuYyIKCgogCgoKCiAKaW50IHN5c2N0bF9zdHJp
bmcoY3RsX3RhYmxlICp0YWJsZSwgaW50ICpuYW1lLCBpbnQgbmxlbiwKCQkgIHZvaWQgKm9sZHZh
bCwgc2l6ZV90ICpvbGRsZW5wLAoJCSAgdm9pZCAqbmV3dmFsLCBzaXplX3QgbmV3bGVuLCB2b2lk
ICoqY29udGV4dCkKewoJaW50IGwsIGxlbjsKCQoJaWYgKCF0YWJsZS0+ZGF0YSB8fCAhdGFibGUt
Pm1heGxlbikgCgkJcmV0dXJuIC0yMDsKCQoJaWYgKG9sZHZhbCAmJiBvbGRsZW5wKSB7CgkJaWYo
KHsgbG9uZyBfX2d1X2VycjsgX190eXBlb2ZfXygqKCggb2xkbGVucCkpKSBfX2d1X3ZhbDsgbG9u
ZyBfX2d1X2FkZHI7IF9fYXNtX18oIiI6Ij1yIiAoX19ndV92YWwpKTsgX19ndV9hZGRyID0gKGxv
bmcpICgoIG9sZGxlbnApKTsgX19hc21fXygiIjoiPXIiIChfX2d1X2VycikpOyBpZiAoKCgoX19z
aWduZWRfXyBsb25nKSgoKChsb25nKSgoY3VycmVudC0+dGhyZWFkLmN1cnJlbnRfZHMpLnNlZykp
KSYoX19ndV9hZGRyIHwgc2l6ZW9mKCooIG9sZGxlbnApKSB8IChfX2d1X2FkZHIrIHNpemVvZigq
KCBvbGRsZW5wKSkpKSkpID49IDApKSB7IHN3aXRjaCAoc2l6ZW9mKCooIG9sZGxlbnApKSkgeyBj
YXNlIDE6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgImxiIiAiXHQlMSwlMlxuXHQi
ICJtb3ZlXHQlMCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6
XHRsaVx0JTAsJTNcblx0IiAibW92ZVx0JTEsJDBcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3Vz
XG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQi
ICIucHJldmlvdXMiIDoiPXIiIChfX2d1X2VyciksICI9ciIgKF9fZ3VfdmFsKSA6Im8iICgoKihz
dHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJl
YWs7IGNhc2UgMjogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAibGgiICJcdCUxLCUy
XG5cdCIgIm1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxu
IiAiMzpcdGxpXHQlMCwlM1xuXHQiICJtb3ZlXHQlMSwkMFxuXHQiICJqXHQyYlxuXHQiICIucHJl
dmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNi
XG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fZ3VfZXJyKSwgIj1yIiAoX19ndV92YWwpIDoibyIg
KCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0p
OyBicmVhazsgY2FzZSA0OiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJsdyIgIlx0
JTEsJTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJh
eFwiXG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgIm1vdmVcdCUxLCQwXG5cdCIgImpcdDJiXG5cdCIg
Ii5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0
MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19ndV9lcnIpLCAiPXIiIChfX2d1X3ZhbCkg
OiJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3VfYWRkcikpKSwgImkiICgtMTQp
KTsgfSk7IGJyZWFrOyBjYXNlIDg6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdGx3XHQl
MSwlMlxuIiAiMjpcdGx3XHQlRDEsJTNcblx0IiAibW92ZVx0JTAsJDBcbiIgIjM6XHQuc2VjdGlv
blx0LmZpeHVwLFwiYXhcIlxuIiAiNDpcdGxpXHQlMCwlNFxuXHQiICJtb3ZlXHQlMSwkMFxuXHQi
ICJtb3ZlXHQlRDEsJDBcblx0IiAialx0M2Jcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9u
XHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiw0YlxuXHQiICIud29yZFx0MmIsNGJc
blx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19ndV9lcnIpLCAiPSZyIiAoX19ndV92YWwpIDoibyIg
KCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIpKSksICJvIiAoKCooc3RydWN0
IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3VfYWRkciArIDQpKSksICJpIiAoLTE0KSk7IH0pOyBicmVh
azsgZGVmYXVsdDogX19nZXRfdXNlcl91bmtub3duKCk7IGJyZWFrOyB9IH0gKGxlbikgPSAoX190
eXBlb2ZfXygqKCggb2xkbGVucCkpKSkgX19ndV92YWw7IF9fZ3VfZXJyOyB9KSkKCQkJcmV0dXJu
IC0xNDsKCQlpZiAobGVuKSB7CgkJCWwgPSBzdHJsZW4odGFibGUtPmRhdGEpOwoJCQlpZiAobGVu
ID4gbCkgbGVuID0gbDsKCQkJaWYgKGxlbiA+PSB0YWJsZS0+bWF4bGVuKQoJCQkJbGVuID0gdGFi
bGUtPm1heGxlbjsKCQkJaWYoKHsgdm9pZCAqX19jdV90bzsgY29uc3Qgdm9pZCAqX19jdV9mcm9t
OyBsb25nIF9fY3VfbGVuOyBfX2N1X3RvID0gKG9sZHZhbCk7IF9fY3VfZnJvbSA9ICggdGFibGUt
PmRhdGEpOyBfX2N1X2xlbiA9ICggbGVuKTsgaWYgKCgoKF9fc2lnbmVkX18gbG9uZykoKCgobG9u
ZykoKGN1cnJlbnQtPnRocmVhZC5jdXJyZW50X2RzKS5zZWcpKSkmKCgodW5zaWduZWQgbG9uZyko
IF9fY3VfdG8pKSB8ICggX19jdV9sZW4pIHwgKCgodW5zaWduZWQgbG9uZykoIF9fY3VfdG8pKSso
IF9fY3VfbGVuKSkpKSkgPj0gMCkpIF9fYXNtX18gX192b2xhdGlsZV9fKCAibW92ZVx0JDQsICUx
XG5cdCIgIm1vdmVcdCQ1LCAlMlxuXHQiICJtb3ZlXHQkNiwgJTNcblx0IiAiamFsXHQiIl9fY29w
eV91c2VyIiAiXG5cdCIgIm1vdmVcdCUwLCAkNiIgOiAiPXIiIChfX2N1X2xlbikgOiAiciIgKF9f
Y3VfdG8pLCAiciIgKF9fY3VfZnJvbSksICJyIiAoX19jdV9sZW4pIDogIiQ0IiwgIiQ1IiwgIiQ2
IiwgIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxNSIsICIkMjQiLCAiJDMxIiwi
bWVtb3J5Iik7IF9fY3VfbGVuOyB9KSkKCQkJCXJldHVybiAtMTQ7CgkJCWlmKCh7IGxvbmcgX19w
dV9lcnI7IF9fdHlwZW9mX18oKigoICgoY2hhciAqKSBvbGR2YWwpICsgbGVuKSkpIF9fcHVfdmFs
OyBsb25nIF9fcHVfYWRkcjsgX19wdV92YWwgPSAoKDApKTsgX19wdV9hZGRyID0gKGxvbmcpICgo
ICgoY2hhciAqKSBvbGR2YWwpICsgbGVuKSk7IF9fYXNtX18oIiI6Ij1yIiAoX19wdV9lcnIpKTsg
aWYgKCgoKF9fc2lnbmVkX18gbG9uZykoKCgobG9uZykoKGN1cnJlbnQtPnRocmVhZC5jdXJyZW50
X2RzKS5zZWcpKSkmKF9fcHVfYWRkciB8IHNpemVvZigqKCAoKGNoYXIgKikgb2xkdmFsKSArIGxl
bikpIHwgKF9fcHVfYWRkcisgc2l6ZW9mKCooICgoY2hhciAqKSBvbGR2YWwpICsgbGVuKSkpKSkp
ID49IDApKSB7IHN3aXRjaCAoc2l6ZW9mKCooICgoY2hhciAqKSBvbGR2YWwpICsgbGVuKSkpIHsg
Y2FzZSAxOiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJzYiIgIlx0JTEsJTJcblx0
IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICIz
Olx0bGlcdCUwLCUzXG5cdCIgImpcdDJiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0
X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1y
IiAoX19wdV9lcnIpIDoiciIgKF9fcHVfdmFsKSwgIm8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1
Y3QgKikoX19wdV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgMjogKHsgX19h
c21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAic2giICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQw
XG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xu
XHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJh
XCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fcHVfZXJyKSA6
InIiIChfX3B1X3ZhbCksICJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fcHVfYWRk
cikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBjYXNlIDQ6ICh7IF9fYXNtX18gX192b2xhdGls
ZV9fKCAiMTpcdCIgInN3IiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAiMjpcblx0IiAi
LnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAialx0MmJcblx0
IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3Jk
XHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX3B1X2VycikgOiJyIiAoX19wdV92YWwp
LCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX3B1X2FkZHIpKSksICJpIiAoLTE0
KSk7IH0pOyBicmVhazsgY2FzZSA4OiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHRzd1x0
JTEsJTJcblx0IiAiMjpcdHN3XHQlRDEsJTNcbiIgIm1vdmVcdCUwLCQwXG4iICIzOlxuXHQiICIu
c2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiNDpcdGxpXHQlMCwlNFxuXHQiICJqXHQzYlxuXHQi
ICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRc
dDFiLDRiXG5cdCIgIi53b3JkXHQyYiw0YlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX3B1X2Vy
cikgOiJyIiAoX19wdV92YWwpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX3B1
X2FkZHIpKSksICJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fcHVfYWRkciArIDQp
KSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgZGVmYXVsdDogX19wdXRfdXNlcl91bmtub3duKCk7
IGJyZWFrOyB9IH0gX19wdV9lcnI7IH0pKQoJCQkJcmV0dXJuIC0xNDsKCQkJaWYoKHsgbG9uZyBf
X3B1X2VycjsgX190eXBlb2ZfXygqKCggb2xkbGVucCkpKSBfX3B1X3ZhbDsgbG9uZyBfX3B1X2Fk
ZHI7IF9fcHVfdmFsID0gKChsZW4pKTsgX19wdV9hZGRyID0gKGxvbmcpICgoIG9sZGxlbnApKTsg
X19hc21fXygiIjoiPXIiIChfX3B1X2VycikpOyBpZiAoKCgoX19zaWduZWRfXyBsb25nKSgoKChs
b25nKSgoY3VycmVudC0+dGhyZWFkLmN1cnJlbnRfZHMpLnNlZykpKSYoX19wdV9hZGRyIHwgc2l6
ZW9mKCooIG9sZGxlbnApKSB8IChfX3B1X2FkZHIrIHNpemVvZigqKCBvbGRsZW5wKSkpKSkpID49
IDApKSB7IHN3aXRjaCAoc2l6ZW9mKCooIG9sZGxlbnApKSkgeyBjYXNlIDE6ICh7IF9fYXNtX18g
X192b2xhdGlsZV9fKCAiMTpcdCIgInNiIiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAi
Mjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAi
alx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5c
dCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX3B1X2VycikgOiJyIiAo
X19wdV92YWwpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX3B1X2FkZHIpKSks
ICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSAyOiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXygg
IjE6XHQiICJzaCIgIlx0JTEsJTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0
aW9uXHQuZml4dXAsXCJheFwiXG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgImpcdDJiXG5cdCIgIi5w
cmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIs
M2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19wdV9lcnIpIDoiciIgKF9fcHVfdmFsKSwgIm8i
ICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19wdV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9
KTsgYnJlYWs7IGNhc2UgNDogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAic3ciICJc
dCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwi
YXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xuXHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAi
LnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2
aW91cyIgOiI9ciIgKF9fcHVfZXJyKSA6InIiIChfX3B1X3ZhbCksICJvIiAoKCooc3RydWN0IF9f
bGFyZ2Vfc3RydWN0ICopKF9fcHVfYWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBjYXNl
IDg6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdHN3XHQlMSwlMlxuXHQiICIyOlx0c3dc
dCVEMSwlM1xuIiAibW92ZVx0JTAsJDBcbiIgIjM6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJh
eFwiXG4iICI0Olx0bGlcdCUwLCU0XG5cdCIgImpcdDNiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIu
c2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsNGJcblx0IiAiLndvcmRc
dDJiLDRiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fcHVfZXJyKSA6InIiIChfX3B1X3ZhbCks
ICJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fcHVfYWRkcikpKSwgIm8iICgoKihz
dHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19wdV9hZGRyICsgNCkpKSwgImkiICgtMTQpKTsgfSk7
IGJyZWFrOyBkZWZhdWx0OiBfX3B1dF91c2VyX3Vua25vd24oKTsgYnJlYWs7IH0gfSBfX3B1X2Vy
cjsgfSkpCgkJCQlyZXR1cm4gLTE0OwoJCX0KCX0KCWlmIChuZXd2YWwgJiYgbmV3bGVuKSB7CgkJ
bGVuID0gbmV3bGVuOwoJCWlmIChsZW4gPiB0YWJsZS0+bWF4bGVuKQoJCQlsZW4gPSB0YWJsZS0+
bWF4bGVuOwoJCWlmKCh7IHZvaWQgKl9fY3VfdG87IGNvbnN0IHZvaWQgKl9fY3VfZnJvbTsgbG9u
ZyBfX2N1X2xlbjsgX19jdV90byA9ICh0YWJsZS0+ZGF0YSk7IF9fY3VfZnJvbSA9ICggbmV3dmFs
KTsgX19jdV9sZW4gPSAoIGxlbik7IGlmICgoKChfX3NpZ25lZF9fIGxvbmcpKCgoKGxvbmcpKChj
dXJyZW50LT50aHJlYWQuY3VycmVudF9kcykuc2VnKSkpJigoKHVuc2lnbmVkIGxvbmcpKCBfX2N1
X2Zyb20pKSB8ICggX19jdV9sZW4pIHwgKCgodW5zaWduZWQgbG9uZykoIF9fY3VfZnJvbSkpKygg
X19jdV9sZW4pKSkpKSA+PSAwKSkgX19hc21fXyBfX3ZvbGF0aWxlX18oICJtb3ZlXHQkNCwgJTFc
blx0IiAibW92ZVx0JDUsICUyXG5cdCIgIm1vdmVcdCQ2LCAlM1xuXHQiICIuc2V0XHRub3Jlb3Jk
ZXJcblx0IiAiamFsXHQiIl9fY29weV91c2VyIiAiXG5cdCIgIi5zZXRcdG5vYXRcblx0IiAiYWRk
dVx0JDEsICUyLCAlM1xuXHQiICIuc2V0XHRhdFxuXHQiICIuc2V0XHRyZW9yZGVyXG5cdCIgIm1v
dmVcdCUwLCAkNiIgOiAiPXIiIChfX2N1X2xlbikgOiAiciIgKF9fY3VfdG8pLCAiciIgKF9fY3Vf
ZnJvbSksICJyIiAoX19jdV9sZW4pIDogIiQ0IiwgIiQ1IiwgIiQ2IiwgIiQ4IiwgIiQ5IiwgIiQx
MCIsICIkMTEiLCAiJDEyIiwgIiQxNSIsICIkMjQiLCAiJDMxIiwibWVtb3J5Iik7IF9fY3VfbGVu
OyB9KSkKCQkJcmV0dXJuIC0xNDsKCQlpZiAobGVuID09IHRhYmxlLT5tYXhsZW4pCgkJCWxlbi0t
OwoJCSgoY2hhciAqKSB0YWJsZS0+ZGF0YSlbbGVuXSA9IDA7Cgl9CglyZXR1cm4gMDsKfQoKIAoK
CgoKaW50IHN5c2N0bF9pbnR2ZWMoY3RsX3RhYmxlICp0YWJsZSwgaW50ICpuYW1lLCBpbnQgbmxl
biwKCQl2b2lkICpvbGR2YWwsIHNpemVfdCAqb2xkbGVucCwKCQl2b2lkICpuZXd2YWwsIHNpemVf
dCBuZXdsZW4sIHZvaWQgKipjb250ZXh0KQp7CglpbnQgaSwgbGVuZ3RoLCAqdmVjLCAqbWluLCAq
bWF4OwoKCWlmIChuZXd2YWwgJiYgbmV3bGVuKSB7CgkJaWYgKG5ld2xlbiAlIHNpemVvZihpbnQp
ICE9IDApCgkJCXJldHVybiAtMjI7CgoJCWlmICghdGFibGUtPmV4dHJhMSAmJiAhdGFibGUtPmV4
dHJhMikKCQkJcmV0dXJuIDA7CgoJCWlmIChuZXdsZW4gPiB0YWJsZS0+bWF4bGVuKQoJCQluZXds
ZW4gPSB0YWJsZS0+bWF4bGVuOwoJCWxlbmd0aCA9IG5ld2xlbiAvIHNpemVvZihpbnQpOwoKCQl2
ZWMgPSAoaW50ICopIG5ld3ZhbDsKCQltaW4gPSAoaW50ICopIHRhYmxlLT5leHRyYTE7CgkJbWF4
ID0gKGludCAqKSB0YWJsZS0+ZXh0cmEyOwoKCQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKCQkJaW50IHZhbHVlOwoJCQkoeyBsb25nIF9fZ3VfZXJyOyBfX3R5cGVvZl9fKCooKCB2ZWMg
KyBpKSkpIF9fZ3VfdmFsOyBsb25nIF9fZ3VfYWRkcjsgX19hc21fXygiIjoiPXIiIChfX2d1X3Zh
bCkpOyBfX2d1X2FkZHIgPSAobG9uZykgKCggdmVjICsgaSkpOyBfX2FzbV9fKCIiOiI9ciIgKF9f
Z3VfZXJyKSk7IGlmICgoKChfX3NpZ25lZF9fIGxvbmcpKCgoKGxvbmcpKChjdXJyZW50LT50aHJl
YWQuY3VycmVudF9kcykuc2VnKSkpJihfX2d1X2FkZHIgfCBzaXplb2YoKiggdmVjICsgaSkpIHwg
KF9fZ3VfYWRkcisgc2l6ZW9mKCooIHZlYyArIGkpKSkpKSkgPj0gMCkpIHsgc3dpdGNoIChzaXpl
b2YoKiggdmVjICsgaSkpKSB7IGNhc2UgMTogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0
IiAibGIiICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0
LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xuXHQiICJtb3ZlXHQlMSwkMFxuXHQiICJq
XHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0
IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fZ3VfZXJyKSwgIj1yIiAo
X19ndV92YWwpIDoibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIpKSks
ICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSAyOiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXygg
IjE6XHQiICJsaCIgIlx0JTEsJTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0
aW9uXHQuZml4dXAsXCJheFwiXG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgIm1vdmVcdCUxLCQwXG5c
dCIgImpcdDJiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFc
IlxuXHQiICIud29yZFx0MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19ndV9lcnIpLCAi
PXIiIChfX2d1X3ZhbCkgOiJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3VfYWRk
cikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBjYXNlIDQ6ICh7IF9fYXNtX18gX192b2xhdGls
ZV9fKCAiMTpcdCIgImx3IiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAiMjpcblx0IiAi
LnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAibW92ZVx0JTEs
JDBcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxl
LFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX2d1X2Vy
ciksICI9ciIgKF9fZ3VfdmFsKSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19n
dV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgODogKHsgX19hc21fXyBfX3Zv
bGF0aWxlX18oICIxOlx0bHdcdCUxLCUyXG4iICIyOlx0bHdcdCVEMSwlM1xuXHQiICJtb3ZlXHQl
MCwkMFxuIiAiMzpcdC5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICI0Olx0bGlcdCUwLCU0XG5c
dCIgIm1vdmVcdCUxLCQwXG5cdCIgIm1vdmVcdCVEMSwkMFxuXHQiICJqXHQzYlxuXHQiICIucHJl
dmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDRi
XG5cdCIgIi53b3JkXHQyYiw0YlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX2d1X2VyciksICI9
JnIiIChfX2d1X3ZhbCkgOiJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3VfYWRk
cikpKSwgIm8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyICsgNCkpKSwg
ImkiICgtMTQpKTsgfSk7IGJyZWFrOyBkZWZhdWx0OiBfX2dldF91c2VyX3Vua25vd24oKTsgYnJl
YWs7IH0gfSAodmFsdWUpID0gKF9fdHlwZW9mX18oKigoIHZlYyArIGkpKSkpIF9fZ3VfdmFsOyBf
X2d1X2VycjsgfSk7CgkJCWlmIChtaW4gJiYgdmFsdWUgPCBtaW5baV0pCgkJCQlyZXR1cm4gLTIy
OwoJCQlpZiAobWF4ICYmIHZhbHVlID4gbWF4W2ldKQoJCQkJcmV0dXJuIC0yMjsKCQl9Cgl9Cgly
ZXR1cm4gMDsKfQoKICAKaW50IHN5c2N0bF9qaWZmaWVzKGN0bF90YWJsZSAqdGFibGUsIGludCAq
bmFtZSwgaW50IG5sZW4sCgkJdm9pZCAqb2xkdmFsLCBzaXplX3QgKm9sZGxlbnAsCgkJdm9pZCAq
bmV3dmFsLCBzaXplX3QgbmV3bGVuLCB2b2lkICoqY29udGV4dCkKewoJaWYgKG9sZHZhbCkgewoJ
CXNpemVfdCBvbGVuOwoJCWlmIChvbGRsZW5wKSB7IAoJCQlpZiAoKHsgbG9uZyBfX2d1X2Vycjsg
X190eXBlb2ZfXygqKCggb2xkbGVucCkpKSBfX2d1X3ZhbDsgbG9uZyBfX2d1X2FkZHI7IF9fYXNt
X18oIiI6Ij1yIiAoX19ndV92YWwpKTsgX19ndV9hZGRyID0gKGxvbmcpICgoIG9sZGxlbnApKTsg
X19hc21fXygiIjoiPXIiIChfX2d1X2VycikpOyBpZiAoKCgoX19zaWduZWRfXyBsb25nKSgoKChs
b25nKSgoY3VycmVudC0+dGhyZWFkLmN1cnJlbnRfZHMpLnNlZykpKSYoX19ndV9hZGRyIHwgc2l6
ZW9mKCooIG9sZGxlbnApKSB8IChfX2d1X2FkZHIrIHNpemVvZigqKCBvbGRsZW5wKSkpKSkpID49
IDApKSB7IHN3aXRjaCAoc2l6ZW9mKCooIG9sZGxlbnApKSkgeyBjYXNlIDE6ICh7IF9fYXNtX18g
X192b2xhdGlsZV9fKCAiMTpcdCIgImxiIiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAi
Mjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAi
bW92ZVx0JTEsJDBcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRf
X2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIi
IChfX2d1X2VyciksICI9ciIgKF9fZ3VfdmFsKSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1
Y3QgKikoX19ndV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgMjogKHsgX19h
c21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAibGgiICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQw
XG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xu
XHQiICJtb3ZlXHQlMSwkMFxuXHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rp
b25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91cyIg
OiI9ciIgKF9fZ3VfZXJyKSwgIj1yIiAoX19ndV92YWwpIDoibyIgKCgqKHN0cnVjdCBfX2xhcmdl
X3N0cnVjdCAqKShfX2d1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSA0OiAo
eyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJsdyIgIlx0JTEsJTJcblx0IiAibW92ZVx0
JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICIzOlx0bGlcdCUw
LCUzXG5cdCIgIm1vdmVcdCUxLCQwXG5cdCIgImpcdDJiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIu
c2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsM2Jcblx0IiAiLnByZXZp
b3VzIiA6Ij1yIiAoX19ndV9lcnIpLCAiPXIiIChfX2d1X3ZhbCkgOiJvIiAoKCooc3RydWN0IF9f
bGFyZ2Vfc3RydWN0ICopKF9fZ3VfYWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBjYXNl
IDg6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdGx3XHQlMSwlMlxuIiAiMjpcdGx3XHQl
RDEsJTNcblx0IiAibW92ZVx0JTAsJDBcbiIgIjM6XHQuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxu
IiAiNDpcdGxpXHQlMCwlNFxuXHQiICJtb3ZlXHQlMSwkMFxuXHQiICJtb3ZlXHQlRDEsJDBcblx0
IiAialx0M2Jcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwi
XG5cdCIgIi53b3JkXHQxYiw0YlxuXHQiICIud29yZFx0MmIsNGJcblx0IiAiLnByZXZpb3VzIiA6
Ij1yIiAoX19ndV9lcnIpLCAiPSZyIiAoX19ndV92YWwpIDoibyIgKCgqKHN0cnVjdCBfX2xhcmdl
X3N0cnVjdCAqKShfX2d1X2FkZHIpKSksICJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICop
KF9fZ3VfYWRkciArIDQpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgZGVmYXVsdDogX19nZXRf
dXNlcl91bmtub3duKCk7IGJyZWFrOyB9IH0gKG9sZW4pID0gKF9fdHlwZW9mX18oKigoIG9sZGxl
bnApKSkpIF9fZ3VfdmFsOyBfX2d1X2VycjsgfSkpCgkJCQlyZXR1cm4gLTE0OwoJCQlpZiAob2xl
biE9c2l6ZW9mKGludCkpCgkJCQlyZXR1cm4gLTIyOyAKCQl9CgkJaWYgKCh7IGxvbmcgX19wdV9l
cnI7IF9fdHlwZW9mX18oKigoIChpbnQgKilvbGR2YWwpKSkgX19wdV92YWw7IGxvbmcgX19wdV9h
ZGRyOyBfX3B1X3ZhbCA9ICgoKihpbnQgKikodGFibGUtPmRhdGEpIC8gMTAwKSk7IF9fcHVfYWRk
ciA9IChsb25nKSAoKCAoaW50ICopb2xkdmFsKSk7IF9fYXNtX18oIiI6Ij1yIiAoX19wdV9lcnIp
KTsgaWYgKCgoKF9fc2lnbmVkX18gbG9uZykoKCgobG9uZykoKGN1cnJlbnQtPnRocmVhZC5jdXJy
ZW50X2RzKS5zZWcpKSkmKF9fcHVfYWRkciB8IHNpemVvZigqKCAoaW50ICopb2xkdmFsKSkgfCAo
X19wdV9hZGRyKyBzaXplb2YoKiggKGludCAqKW9sZHZhbCkpKSkpKSA+PSAwKSkgeyBzd2l0Y2gg
KHNpemVvZigqKCAoaW50ICopb2xkdmFsKSkpIHsgY2FzZSAxOiAoeyBfX2FzbV9fIF9fdm9sYXRp
bGVfXyggIjE6XHQiICJzYiIgIlx0JTEsJTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIg
Ii5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgImpcdDJiXG5c
dCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29y
ZFx0MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19wdV9lcnIpIDoiciIgKF9fcHVfdmFs
KSwgIm8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19wdV9hZGRyKSkpLCAiaSIgKC0x
NCkpOyB9KTsgYnJlYWs7IGNhc2UgMjogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAi
c2giICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZp
eHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xuXHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNc
blx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIg
Ii5wcmV2aW91cyIgOiI9ciIgKF9fcHVfZXJyKSA6InIiIChfX3B1X3ZhbCksICJvIiAoKCooc3Ry
dWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fcHVfYWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFr
OyBjYXNlIDQ6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgInN3IiAiXHQlMSwlMlxu
XHQiICJtb3ZlXHQlMCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIg
IjM6XHRsaVx0JTAsJTNcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9u
XHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoi
PXIiIChfX3B1X2VycikgOiJyIiAoX19wdV92YWwpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0
cnVjdCAqKShfX3B1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSA4OiAoeyBf
X2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHRzd1x0JTEsJTJcblx0IiAiMjpcdHN3XHQlRDEsJTNc
biIgIm1vdmVcdCUwLCQwXG4iICIzOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAi
NDpcdGxpXHQlMCwlNFxuXHQiICJqXHQzYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25c
dF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDRiXG5cdCIgIi53b3JkXHQyYiw0Ylxu
XHQiICIucHJldmlvdXMiIDoiPXIiIChfX3B1X2VycikgOiJyIiAoX19wdV92YWwpLCAibyIgKCgq
KHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX3B1X2FkZHIpKSksICJvIiAoKCooc3RydWN0IF9f
bGFyZ2Vfc3RydWN0ICopKF9fcHVfYWRkciArIDQpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsg
ZGVmYXVsdDogX19wdXRfdXNlcl91bmtub3duKCk7IGJyZWFrOyB9IH0gX19wdV9lcnI7IH0pIHx8
IAoJCSAgICAob2xkbGVucCAmJiAoeyBsb25nIF9fcHVfZXJyOyBfX3R5cGVvZl9fKCooKG9sZGxl
bnApKSkgX19wdV92YWw7IGxvbmcgX19wdV9hZGRyOyBfX3B1X3ZhbCA9ICgoc2l6ZW9mKGludCkp
KTsgX19wdV9hZGRyID0gKGxvbmcpICgob2xkbGVucCkpOyBfX2FzbV9fKCIiOiI9ciIgKF9fcHVf
ZXJyKSk7IGlmICgoKChfX3NpZ25lZF9fIGxvbmcpKCgoKGxvbmcpKChjdXJyZW50LT50aHJlYWQu
Y3VycmVudF9kcykuc2VnKSkpJihfX3B1X2FkZHIgfCBzaXplb2YoKihvbGRsZW5wKSkgfCAoX19w
dV9hZGRyKyBzaXplb2YoKihvbGRsZW5wKSkpKSkpID49IDApKSB7IHN3aXRjaCAoc2l6ZW9mKCoo
b2xkbGVucCkpKSB7IGNhc2UgMTogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAic2Ii
ICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVw
LFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xuXHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0
IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5w
cmV2aW91cyIgOiI9ciIgKF9fcHVfZXJyKSA6InIiIChfX3B1X3ZhbCksICJvIiAoKCooc3RydWN0
IF9fbGFyZ2Vfc3RydWN0ICopKF9fcHVfYWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBj
YXNlIDI6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgInNoIiAiXHQlMSwlMlxuXHQi
ICJtb3ZlXHQlMCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6
XHRsaVx0JTAsJTNcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRf
X2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIi
IChfX3B1X2VycikgOiJyIiAoX19wdV92YWwpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVj
dCAqKShfX3B1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSA0OiAoeyBfX2Fz
bV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJzdyIgIlx0JTEsJTJcblx0IiAibW92ZVx0JTAsJDBc
biIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICIzOlx0bGlcdCUwLCUzXG5c
dCIgImpcdDJiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFc
IlxuXHQiICIud29yZFx0MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19wdV9lcnIpIDoi
ciIgKF9fcHVfdmFsKSwgIm8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19wdV9hZGRy
KSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgODogKHsgX19hc21fXyBfX3ZvbGF0aWxl
X18oICIxOlx0c3dcdCUxLCUyXG5cdCIgIjI6XHRzd1x0JUQxLCUzXG4iICJtb3ZlXHQlMCwkMFxu
IiAiMzpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjQ6XHRsaVx0JTAsJTRcblx0
IiAialx0M2Jcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwi
XG5cdCIgIi53b3JkXHQxYiw0YlxuXHQiICIud29yZFx0MmIsNGJcblx0IiAiLnByZXZpb3VzIiA6
Ij1yIiAoX19wdV9lcnIpIDoiciIgKF9fcHVfdmFsKSwgIm8iICgoKihzdHJ1Y3QgX19sYXJnZV9z
dHJ1Y3QgKikoX19wdV9hZGRyKSkpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShf
X3B1X2FkZHIgKyA0KSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGRlZmF1bHQ6IF9fcHV0X3Vz
ZXJfdW5rbm93bigpOyBicmVhazsgfSB9IF9fcHVfZXJyOyB9KSkpCgkJCXJldHVybiAtMTQ7Cgl9
CglpZiAobmV3dmFsICYmIG5ld2xlbikgeyAKCQlpbnQgbmV3OwoJCWlmIChuZXdsZW4gIT0gc2l6
ZW9mKGludCkpCgkJCXJldHVybiAtMjI7IAoJCWlmICgoeyBsb25nIF9fZ3VfZXJyOyBfX3R5cGVv
Zl9fKCooKCAoaW50ICopbmV3dmFsKSkpIF9fZ3VfdmFsOyBsb25nIF9fZ3VfYWRkcjsgX19hc21f
XygiIjoiPXIiIChfX2d1X3ZhbCkpOyBfX2d1X2FkZHIgPSAobG9uZykgKCggKGludCAqKW5ld3Zh
bCkpOyBfX2FzbV9fKCIiOiI9ciIgKF9fZ3VfZXJyKSk7IGlmICgoKChfX3NpZ25lZF9fIGxvbmcp
KCgoKGxvbmcpKChjdXJyZW50LT50aHJlYWQuY3VycmVudF9kcykuc2VnKSkpJihfX2d1X2FkZHIg
fCBzaXplb2YoKiggKGludCAqKW5ld3ZhbCkpIHwgKF9fZ3VfYWRkcisgc2l6ZW9mKCooIChpbnQg
KiluZXd2YWwpKSkpKSkgPj0gMCkpIHsgc3dpdGNoIChzaXplb2YoKiggKGludCAqKW5ld3ZhbCkp
KSB7IGNhc2UgMTogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAibGIiICJcdCUxLCUy
XG5cdCIgIm1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxu
IiAiMzpcdGxpXHQlMCwlM1xuXHQiICJtb3ZlXHQlMSwkMFxuXHQiICJqXHQyYlxuXHQiICIucHJl
dmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNi
XG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fZ3VfZXJyKSwgIj1yIiAoX19ndV92YWwpIDoibyIg
KCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0p
OyBicmVhazsgY2FzZSAyOiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJsaCIgIlx0
JTEsJTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJh
eFwiXG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgIm1vdmVcdCUxLCQwXG5cdCIgImpcdDJiXG5cdCIg
Ii5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0
MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19ndV9lcnIpLCAiPXIiIChfX2d1X3ZhbCkg
OiJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3VfYWRkcikpKSwgImkiICgtMTQp
KTsgfSk7IGJyZWFrOyBjYXNlIDQ6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgImx3
IiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1
cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAibW92ZVx0JTEsJDBcblx0IiAialx0MmJc
blx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53
b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX2d1X2VyciksICI9ciIgKF9fZ3Vf
dmFsKSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyKSkpLCAiaSIg
KC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgODogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0
bHdcdCUxLCUyXG4iICIyOlx0bHdcdCVEMSwlM1xuXHQiICJtb3ZlXHQlMCwkMFxuIiAiMzpcdC5z
ZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICI0Olx0bGlcdCUwLCU0XG5cdCIgIm1vdmVcdCUxLCQw
XG5cdCIgIm1vdmVcdCVEMSwkMFxuXHQiICJqXHQzYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNl
Y3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDRiXG5cdCIgIi53b3JkXHQy
Yiw0YlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX2d1X2VyciksICI9JnIiIChfX2d1X3ZhbCkg
OiJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3VfYWRkcikpKSwgIm8iICgoKihz
dHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyICsgNCkpKSwgImkiICgtMTQpKTsgfSk7
IGJyZWFrOyBkZWZhdWx0OiBfX2dldF91c2VyX3Vua25vd24oKTsgYnJlYWs7IH0gfSAobmV3KSA9
IChfX3R5cGVvZl9fKCooKCAoaW50ICopbmV3dmFsKSkpKSBfX2d1X3ZhbDsgX19ndV9lcnI7IH0p
KQoJCQlyZXR1cm4gLTE0OwoJCSooaW50ICopKHRhYmxlLT5kYXRhKSA9IG5ldyoxMDA7IAoJfQoJ
cmV0dXJuIDE7Cn0KCmludCBkb19zdHJpbmcgKAoJdm9pZCAqb2xkdmFsLCBzaXplX3QgKm9sZGxl
bnAsIHZvaWQgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwKCWludCByZHdyLCBjaGFyICpkYXRhLCBz
aXplX3QgbWF4KQp7CglpbnQgbCA9IHN0cmxlbihkYXRhKSArIDE7CglpZiAobmV3dmFsICYmICFy
ZHdyKQoJCXJldHVybiAtMTsKCWlmIChuZXd2YWwgJiYgbmV3bGVuID49IG1heCkKCQlyZXR1cm4g
LTIyOwoJaWYgKG9sZHZhbCkgewoJCWludCBvbGRfbDsKCQlpZigoeyBsb25nIF9fZ3VfZXJyOyBf
X3R5cGVvZl9fKCooKCBvbGRsZW5wKSkpIF9fZ3VfdmFsOyBsb25nIF9fZ3VfYWRkcjsgX19hc21f
XygiIjoiPXIiIChfX2d1X3ZhbCkpOyBfX2d1X2FkZHIgPSAobG9uZykgKCggb2xkbGVucCkpOyBf
X2FzbV9fKCIiOiI9ciIgKF9fZ3VfZXJyKSk7IGlmICgoKChfX3NpZ25lZF9fIGxvbmcpKCgoKGxv
bmcpKChjdXJyZW50LT50aHJlYWQuY3VycmVudF9kcykuc2VnKSkpJihfX2d1X2FkZHIgfCBzaXpl
b2YoKiggb2xkbGVucCkpIHwgKF9fZ3VfYWRkcisgc2l6ZW9mKCooIG9sZGxlbnApKSkpKSkgPj0g
MCkpIHsgc3dpdGNoIChzaXplb2YoKiggb2xkbGVucCkpKSB7IGNhc2UgMTogKHsgX19hc21fXyBf
X3ZvbGF0aWxlX18oICIxOlx0IiAibGIiICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIy
OlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xuXHQiICJt
b3ZlXHQlMSwkMFxuXHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9f
ZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIg
KF9fZ3VfZXJyKSwgIj1yIiAoX19ndV92YWwpIDoibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVj
dCAqKShfX2d1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSAyOiAoeyBfX2Fz
bV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJsaCIgIlx0JTEsJTJcblx0IiAibW92ZVx0JTAsJDBc
biIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICIzOlx0bGlcdCUwLCUzXG5c
dCIgIm1vdmVcdCUxLCQwXG5cdCIgImpcdDJiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlv
blx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6
Ij1yIiAoX19ndV9lcnIpLCAiPXIiIChfX2d1X3ZhbCkgOiJvIiAoKCooc3RydWN0IF9fbGFyZ2Vf
c3RydWN0ICopKF9fZ3VfYWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBjYXNlIDQ6ICh7
IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgImx3IiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQl
MCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAs
JTNcblx0IiAibW92ZVx0JTEsJDBcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5z
ZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlv
dXMiIDoiPXIiIChfX2d1X2VyciksICI9ciIgKF9fZ3VfdmFsKSA6Im8iICgoKihzdHJ1Y3QgX19s
YXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2Ug
ODogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0bHdcdCUxLCUyXG4iICIyOlx0bHdcdCVE
MSwlM1xuXHQiICJtb3ZlXHQlMCwkMFxuIiAiMzpcdC5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4i
ICI0Olx0bGlcdCUwLCU0XG5cdCIgIm1vdmVcdCUxLCQwXG5cdCIgIm1vdmVcdCVEMSwkMFxuXHQi
ICJqXHQzYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJc
blx0IiAiLndvcmRcdDFiLDRiXG5cdCIgIi53b3JkXHQyYiw0YlxuXHQiICIucHJldmlvdXMiIDoi
PXIiIChfX2d1X2VyciksICI9JnIiIChfX2d1X3ZhbCkgOiJvIiAoKCooc3RydWN0IF9fbGFyZ2Vf
c3RydWN0ICopKF9fZ3VfYWRkcikpKSwgIm8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKiko
X19ndV9hZGRyICsgNCkpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBkZWZhdWx0OiBfX2dldF91
c2VyX3Vua25vd24oKTsgYnJlYWs7IH0gfSAob2xkX2wpID0gKF9fdHlwZW9mX18oKigoIG9sZGxl
bnApKSkpIF9fZ3VfdmFsOyBfX2d1X2VycjsgfSkpCgkJCXJldHVybiAtMTQ7CgkJaWYgKGwgPiBv
bGRfbCkKCQkJcmV0dXJuIC0xMjsKCQlpZigoeyBsb25nIF9fcHVfZXJyOyBfX3R5cGVvZl9fKCoo
KCBvbGRsZW5wKSkpIF9fcHVfdmFsOyBsb25nIF9fcHVfYWRkcjsgX19wdV92YWwgPSAoKGwpKTsg
X19wdV9hZGRyID0gKGxvbmcpICgoIG9sZGxlbnApKTsgX19hc21fXygiIjoiPXIiIChfX3B1X2Vy
cikpOyBpZiAoKCgoX19zaWduZWRfXyBsb25nKSgoKChsb25nKSgoY3VycmVudC0+dGhyZWFkLmN1
cnJlbnRfZHMpLnNlZykpKSYoX19wdV9hZGRyIHwgc2l6ZW9mKCooIG9sZGxlbnApKSB8IChfX3B1
X2FkZHIrIHNpemVvZigqKCBvbGRsZW5wKSkpKSkpID49IDApKSB7IHN3aXRjaCAoc2l6ZW9mKCoo
IG9sZGxlbnApKSkgeyBjYXNlIDE6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgInNi
IiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1
cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5c
dCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIu
cHJldmlvdXMiIDoiPXIiIChfX3B1X2VycikgOiJyIiAoX19wdV92YWwpLCAibyIgKCgqKHN0cnVj
dCBfX2xhcmdlX3N0cnVjdCAqKShfX3B1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsg
Y2FzZSAyOiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJzaCIgIlx0JTEsJTJcblx0
IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICIz
Olx0bGlcdCUwLCUzXG5cdCIgImpcdDJiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0
X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1y
IiAoX19wdV9lcnIpIDoiciIgKF9fcHVfdmFsKSwgIm8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1
Y3QgKikoX19wdV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgNDogKHsgX19h
c21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAic3ciICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQw
XG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xu
XHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJh
XCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fcHVfZXJyKSA6
InIiIChfX3B1X3ZhbCksICJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fcHVfYWRk
cikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBjYXNlIDg6ICh7IF9fYXNtX18gX192b2xhdGls
ZV9fKCAiMTpcdHN3XHQlMSwlMlxuXHQiICIyOlx0c3dcdCVEMSwlM1xuIiAibW92ZVx0JTAsJDBc
biIgIjM6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICI0Olx0bGlcdCUwLCU0XG5c
dCIgImpcdDNiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFc
IlxuXHQiICIud29yZFx0MWIsNGJcblx0IiAiLndvcmRcdDJiLDRiXG5cdCIgIi5wcmV2aW91cyIg
OiI9ciIgKF9fcHVfZXJyKSA6InIiIChfX3B1X3ZhbCksICJvIiAoKCooc3RydWN0IF9fbGFyZ2Vf
c3RydWN0ICopKF9fcHVfYWRkcikpKSwgIm8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKiko
X19wdV9hZGRyICsgNCkpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBkZWZhdWx0OiBfX3B1dF91
c2VyX3Vua25vd24oKTsgYnJlYWs7IH0gfSBfX3B1X2VycjsgfSkgfHwgKHsgdm9pZCAqX19jdV90
bzsgY29uc3Qgdm9pZCAqX19jdV9mcm9tOyBsb25nIF9fY3VfbGVuOyBfX2N1X3RvID0gKG9sZHZh
bCk7IF9fY3VfZnJvbSA9ICggZGF0YSk7IF9fY3VfbGVuID0gKCBsKTsgaWYgKCgoKF9fc2lnbmVk
X18gbG9uZykoKCgobG9uZykoKGN1cnJlbnQtPnRocmVhZC5jdXJyZW50X2RzKS5zZWcpKSkmKCgo
dW5zaWduZWQgbG9uZykoIF9fY3VfdG8pKSB8ICggX19jdV9sZW4pIHwgKCgodW5zaWduZWQgbG9u
ZykoIF9fY3VfdG8pKSsoIF9fY3VfbGVuKSkpKSkgPj0gMCkpIF9fYXNtX18gX192b2xhdGlsZV9f
KCAibW92ZVx0JDQsICUxXG5cdCIgIm1vdmVcdCQ1LCAlMlxuXHQiICJtb3ZlXHQkNiwgJTNcblx0
IiAiamFsXHQiIl9fY29weV91c2VyIiAiXG5cdCIgIm1vdmVcdCUwLCAkNiIgOiAiPXIiIChfX2N1
X2xlbikgOiAiciIgKF9fY3VfdG8pLCAiciIgKF9fY3VfZnJvbSksICJyIiAoX19jdV9sZW4pIDog
IiQ0IiwgIiQ1IiwgIiQ2IiwgIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxNSIs
ICIkMjQiLCAiJDMxIiwibWVtb3J5Iik7IF9fY3VfbGVuOyB9KSkKCQkJcmV0dXJuIC0xNDsKCX0K
CWlmIChuZXd2YWwpIHsKCQlpZigoeyB2b2lkICpfX2N1X3RvOyBjb25zdCB2b2lkICpfX2N1X2Zy
b207IGxvbmcgX19jdV9sZW47IF9fY3VfdG8gPSAoZGF0YSk7IF9fY3VfZnJvbSA9ICggbmV3dmFs
KTsgX19jdV9sZW4gPSAoIG5ld2xlbik7IGlmICgoKChfX3NpZ25lZF9fIGxvbmcpKCgoKGxvbmcp
KChjdXJyZW50LT50aHJlYWQuY3VycmVudF9kcykuc2VnKSkpJigoKHVuc2lnbmVkIGxvbmcpKCBf
X2N1X2Zyb20pKSB8ICggX19jdV9sZW4pIHwgKCgodW5zaWduZWQgbG9uZykoIF9fY3VfZnJvbSkp
KyggX19jdV9sZW4pKSkpKSA+PSAwKSkgX19hc21fXyBfX3ZvbGF0aWxlX18oICJtb3ZlXHQkNCwg
JTFcblx0IiAibW92ZVx0JDUsICUyXG5cdCIgIm1vdmVcdCQ2LCAlM1xuXHQiICIuc2V0XHRub3Jl
b3JkZXJcblx0IiAiamFsXHQiIl9fY29weV91c2VyIiAiXG5cdCIgIi5zZXRcdG5vYXRcblx0IiAi
YWRkdVx0JDEsICUyLCAlM1xuXHQiICIuc2V0XHRhdFxuXHQiICIuc2V0XHRyZW9yZGVyXG5cdCIg
Im1vdmVcdCUwLCAkNiIgOiAiPXIiIChfX2N1X2xlbikgOiAiciIgKF9fY3VfdG8pLCAiciIgKF9f
Y3VfZnJvbSksICJyIiAoX19jdV9sZW4pIDogIiQ0IiwgIiQ1IiwgIiQ2IiwgIiQ4IiwgIiQ5Iiwg
IiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxNSIsICIkMjQiLCAiJDMxIiwibWVtb3J5Iik7IF9fY3Vf
bGVuOyB9KSkKCQkJcmV0dXJuIC0xNDsKCQlkYXRhW25ld2xlbl0gPSAwOwoJfQoJcmV0dXJuIDA7
Cn0KCmludCBkb19pbnQgKAoJdm9pZCAqb2xkdmFsLCBzaXplX3QgKm9sZGxlbnAsIHZvaWQgKm5l
d3ZhbCwgc2l6ZV90IG5ld2xlbiwKCWludCByZHdyLCBpbnQgKmRhdGEpCnsKCWlmIChuZXd2YWwg
JiYgIXJkd3IpCgkJcmV0dXJuIC0xOwoJaWYgKG5ld3ZhbCAmJiBuZXdsZW4gIT0gc2l6ZW9mKGlu
dCkpCgkJcmV0dXJuIC0yMjsKCWlmIChvbGR2YWwpIHsKCQlpbnQgb2xkX2w7CgkJaWYoKHsgbG9u
ZyBfX2d1X2VycjsgX190eXBlb2ZfXygqKCggb2xkbGVucCkpKSBfX2d1X3ZhbDsgbG9uZyBfX2d1
X2FkZHI7IF9fYXNtX18oIiI6Ij1yIiAoX19ndV92YWwpKTsgX19ndV9hZGRyID0gKGxvbmcpICgo
IG9sZGxlbnApKTsgX19hc21fXygiIjoiPXIiIChfX2d1X2VycikpOyBpZiAoKCgoX19zaWduZWRf
XyBsb25nKSgoKChsb25nKSgoY3VycmVudC0+dGhyZWFkLmN1cnJlbnRfZHMpLnNlZykpKSYoX19n
dV9hZGRyIHwgc2l6ZW9mKCooIG9sZGxlbnApKSB8IChfX2d1X2FkZHIrIHNpemVvZigqKCBvbGRs
ZW5wKSkpKSkpID49IDApKSB7IHN3aXRjaCAoc2l6ZW9mKCooIG9sZGxlbnApKSkgeyBjYXNlIDE6
ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgImxiIiAiXHQlMSwlMlxuXHQiICJtb3Zl
XHQlMCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0
JTAsJTNcblx0IiAibW92ZVx0JTEsJDBcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIg
Ii5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJl
dmlvdXMiIDoiPXIiIChfX2d1X2VyciksICI9ciIgKF9fZ3VfdmFsKSA6Im8iICgoKihzdHJ1Y3Qg
X19sYXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNh
c2UgMjogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAibGgiICJcdCUxLCUyXG5cdCIg
Im1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiMzpc
dGxpXHQlMCwlM1xuXHQiICJtb3ZlXHQlMSwkMFxuXHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNc
blx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIg
Ii5wcmV2aW91cyIgOiI9ciIgKF9fZ3VfZXJyKSwgIj1yIiAoX19ndV92YWwpIDoibyIgKCgqKHN0
cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBicmVh
azsgY2FzZSA0OiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJsdyIgIlx0JTEsJTJc
blx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4i
ICIzOlx0bGlcdCUwLCUzXG5cdCIgIm1vdmVcdCUxLCQwXG5cdCIgImpcdDJiXG5cdCIgIi5wcmV2
aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsM2Jc
blx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19ndV9lcnIpLCAiPXIiIChfX2d1X3ZhbCkgOiJvIiAo
KCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3VfYWRkcikpKSwgImkiICgtMTQpKTsgfSk7
IGJyZWFrOyBjYXNlIDg6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdGx3XHQlMSwlMlxu
IiAiMjpcdGx3XHQlRDEsJTNcblx0IiAibW92ZVx0JTAsJDBcbiIgIjM6XHQuc2VjdGlvblx0LmZp
eHVwLFwiYXhcIlxuIiAiNDpcdGxpXHQlMCwlNFxuXHQiICJtb3ZlXHQlMSwkMFxuXHQiICJtb3Zl
XHQlRDEsJDBcblx0IiAialx0M2Jcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4
X3RhYmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiw0YlxuXHQiICIud29yZFx0MmIsNGJcblx0IiAi
LnByZXZpb3VzIiA6Ij1yIiAoX19ndV9lcnIpLCAiPSZyIiAoX19ndV92YWwpIDoibyIgKCgqKHN0
cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIpKSksICJvIiAoKCooc3RydWN0IF9fbGFy
Z2Vfc3RydWN0ICopKF9fZ3VfYWRkciArIDQpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgZGVm
YXVsdDogX19nZXRfdXNlcl91bmtub3duKCk7IGJyZWFrOyB9IH0gKG9sZF9sKSA9IChfX3R5cGVv
Zl9fKCooKCBvbGRsZW5wKSkpKSBfX2d1X3ZhbDsgX19ndV9lcnI7IH0pKQoJCQlyZXR1cm4gLTE0
OwoJCWlmIChvbGRfbCA8IHNpemVvZihpbnQpKQoJCQlyZXR1cm4gLTEyOwoJCWlmKCh7IGxvbmcg
X19wdV9lcnI7IF9fdHlwZW9mX18oKigoIG9sZGxlbnApKSkgX19wdV92YWw7IGxvbmcgX19wdV9h
ZGRyOyBfX3B1X3ZhbCA9ICgoc2l6ZW9mKGludCkpKTsgX19wdV9hZGRyID0gKGxvbmcpICgoIG9s
ZGxlbnApKTsgX19hc21fXygiIjoiPXIiIChfX3B1X2VycikpOyBpZiAoKCgoX19zaWduZWRfXyBs
b25nKSgoKChsb25nKSgoY3VycmVudC0+dGhyZWFkLmN1cnJlbnRfZHMpLnNlZykpKSYoX19wdV9h
ZGRyIHwgc2l6ZW9mKCooIG9sZGxlbnApKSB8IChfX3B1X2FkZHIrIHNpemVvZigqKCBvbGRsZW5w
KSkpKSkpID49IDApKSB7IHN3aXRjaCAoc2l6ZW9mKCooIG9sZGxlbnApKSkgeyBjYXNlIDE6ICh7
IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdCIgInNiIiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQl
MCwkMFxuIiAiMjpcblx0IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAs
JTNcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxl
LFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX3B1X2Vy
cikgOiJyIiAoX19wdV92YWwpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX3B1
X2FkZHIpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSAyOiAoeyBfX2FzbV9fIF9fdm9s
YXRpbGVfXyggIjE6XHQiICJzaCIgIlx0JTEsJTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5c
dCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgImpcdDJi
XG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIu
d29yZFx0MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19wdV9lcnIpIDoiciIgKF9fcHVf
dmFsKSwgIm8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19wdV9hZGRyKSkpLCAiaSIg
KC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgNDogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0
IiAic3ciICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0
LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xuXHQiICJqXHQyYlxuXHQiICIucHJldmlv
dXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5c
dCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fcHVfZXJyKSA6InIiIChfX3B1X3ZhbCksICJvIiAoKCoo
c3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fcHVfYWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJy
ZWFrOyBjYXNlIDg6ICh7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMTpcdHN3XHQlMSwlMlxuXHQi
ICIyOlx0c3dcdCVEMSwlM1xuIiAibW92ZVx0JTAsJDBcbiIgIjM6XG5cdCIgIi5zZWN0aW9uXHQu
Zml4dXAsXCJheFwiXG4iICI0Olx0bGlcdCUwLCU0XG5cdCIgImpcdDNiXG5cdCIgIi5wcmV2aW91
c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsNGJcblx0
IiAiLndvcmRcdDJiLDRiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fcHVfZXJyKSA6InIiIChf
X3B1X3ZhbCksICJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fcHVfYWRkcikpKSwg
Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19wdV9hZGRyICsgNCkpKSwgImkiICgt
MTQpKTsgfSk7IGJyZWFrOyBkZWZhdWx0OiBfX3B1dF91c2VyX3Vua25vd24oKTsgYnJlYWs7IH0g
fSBfX3B1X2VycjsgfSl8fCh7IHZvaWQgKl9fY3VfdG87IGNvbnN0IHZvaWQgKl9fY3VfZnJvbTsg
bG9uZyBfX2N1X2xlbjsgX19jdV90byA9IChvbGR2YWwpOyBfX2N1X2Zyb20gPSAoIGRhdGEpOyBf
X2N1X2xlbiA9ICggc2l6ZW9mKGludCkpOyBpZiAoKCgoX19zaWduZWRfXyBsb25nKSgoKChsb25n
KSgoY3VycmVudC0+dGhyZWFkLmN1cnJlbnRfZHMpLnNlZykpKSYoKCh1bnNpZ25lZCBsb25nKSgg
X19jdV90bykpIHwgKCBfX2N1X2xlbikgfCAoKCh1bnNpZ25lZCBsb25nKSggX19jdV90bykpKygg
X19jdV9sZW4pKSkpKSA+PSAwKSkgX19hc21fXyBfX3ZvbGF0aWxlX18oICJtb3ZlXHQkNCwgJTFc
blx0IiAibW92ZVx0JDUsICUyXG5cdCIgIm1vdmVcdCQ2LCAlM1xuXHQiICJqYWxcdCIiX19jb3B5
X3VzZXIiICJcblx0IiAibW92ZVx0JTAsICQ2IiA6ICI9ciIgKF9fY3VfbGVuKSA6ICJyIiAoX19j
dV90byksICJyIiAoX19jdV9mcm9tKSwgInIiIChfX2N1X2xlbikgOiAiJDQiLCAiJDUiLCAiJDYi
LCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDE1IiwgIiQyNCIsICIkMzEiLCJt
ZW1vcnkiKTsgX19jdV9sZW47IH0pKQoJCQlyZXR1cm4gLTE0OwoJfQoJaWYgKG5ld3ZhbCkKCQlp
ZigoeyB2b2lkICpfX2N1X3RvOyBjb25zdCB2b2lkICpfX2N1X2Zyb207IGxvbmcgX19jdV9sZW47
IF9fY3VfdG8gPSAoZGF0YSk7IF9fY3VfZnJvbSA9ICggbmV3dmFsKTsgX19jdV9sZW4gPSAoIHNp
emVvZihpbnQpKTsgaWYgKCgoKF9fc2lnbmVkX18gbG9uZykoKCgobG9uZykoKGN1cnJlbnQtPnRo
cmVhZC5jdXJyZW50X2RzKS5zZWcpKSkmKCgodW5zaWduZWQgbG9uZykoIF9fY3VfZnJvbSkpIHwg
KCBfX2N1X2xlbikgfCAoKCh1bnNpZ25lZCBsb25nKSggX19jdV9mcm9tKSkrKCBfX2N1X2xlbikp
KSkpID49IDApKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIm1vdmVcdCQ0LCAlMVxuXHQiICJtb3Zl
XHQkNSwgJTJcblx0IiAibW92ZVx0JDYsICUzXG5cdCIgIi5zZXRcdG5vcmVvcmRlclxuXHQiICJq
YWxcdCIiX19jb3B5X3VzZXIiICJcblx0IiAiLnNldFx0bm9hdFxuXHQiICJhZGR1XHQkMSwgJTIs
ICUzXG5cdCIgIi5zZXRcdGF0XG5cdCIgIi5zZXRcdHJlb3JkZXJcblx0IiAibW92ZVx0JTAsICQ2
IiA6ICI9ciIgKF9fY3VfbGVuKSA6ICJyIiAoX19jdV90byksICJyIiAoX19jdV9mcm9tKSwgInIi
IChfX2N1X2xlbikgOiAiJDQiLCAiJDUiLCAiJDYiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIs
ICIkMTIiLCAiJDE1IiwgIiQyNCIsICIkMzEiLCJtZW1vcnkiKTsgX19jdV9sZW47IH0pKQoJCQly
ZXR1cm4gLTE0OwoJcmV0dXJuIDA7Cn0KCmludCBkb19zdHJ1Y3QgKAoJdm9pZCAqb2xkdmFsLCBz
aXplX3QgKm9sZGxlbnAsIHZvaWQgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwKCWludCByZHdyLCB2
b2lkICpkYXRhLCBzaXplX3QgbGVuKQp7CglpZiAobmV3dmFsICYmICFyZHdyKQoJCXJldHVybiAt
MTsKCWlmIChuZXd2YWwgJiYgbmV3bGVuICE9IGxlbikKCQlyZXR1cm4gLTIyOwoJaWYgKG9sZHZh
bCkgewoJCWludCBvbGRfbDsKCQlpZigoeyBsb25nIF9fZ3VfZXJyOyBfX3R5cGVvZl9fKCooKCBv
bGRsZW5wKSkpIF9fZ3VfdmFsOyBsb25nIF9fZ3VfYWRkcjsgX19hc21fXygiIjoiPXIiIChfX2d1
X3ZhbCkpOyBfX2d1X2FkZHIgPSAobG9uZykgKCggb2xkbGVucCkpOyBfX2FzbV9fKCIiOiI9ciIg
KF9fZ3VfZXJyKSk7IGlmICgoKChfX3NpZ25lZF9fIGxvbmcpKCgoKGxvbmcpKChjdXJyZW50LT50
aHJlYWQuY3VycmVudF9kcykuc2VnKSkpJihfX2d1X2FkZHIgfCBzaXplb2YoKiggb2xkbGVucCkp
IHwgKF9fZ3VfYWRkcisgc2l6ZW9mKCooIG9sZGxlbnApKSkpKSkgPj0gMCkpIHsgc3dpdGNoIChz
aXplb2YoKiggb2xkbGVucCkpKSB7IGNhc2UgMTogKHsgX19hc21fXyBfX3ZvbGF0aWxlX18oICIx
Olx0IiAibGIiICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUwLCQwXG4iICIyOlxuXHQiICIuc2VjdGlv
blx0LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwlM1xuXHQiICJtb3ZlXHQlMSwkMFxuXHQi
ICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJc
blx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fZ3VfZXJyKSwgIj1y
IiAoX19ndV92YWwpIDoibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX2d1X2FkZHIp
KSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgY2FzZSAyOiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVf
XyggIjE6XHQiICJsaCIgIlx0JTEsJTJcblx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5z
ZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICIzOlx0bGlcdCUwLCUzXG5cdCIgIm1vdmVcdCUxLCQw
XG5cdCIgImpcdDJiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlvblx0X19leF90YWJsZSxc
ImFcIlxuXHQiICIud29yZFx0MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6Ij1yIiAoX19ndV9lcnIp
LCAiPXIiIChfX2d1X3ZhbCkgOiJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3Vf
YWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBjYXNlIDQ6ICh7IF9fYXNtX18gX192b2xh
dGlsZV9fKCAiMTpcdCIgImx3IiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAiMjpcblx0
IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAibW92ZVx0
JTEsJDBcblx0IiAialx0MmJcblx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3Rh
YmxlLFwiYVwiXG5cdCIgIi53b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX2d1
X2VyciksICI9ciIgKF9fZ3VfdmFsKSA6Im8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKiko
X19ndV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgODogKHsgX19hc21fXyBf
X3ZvbGF0aWxlX18oICIxOlx0bHdcdCUxLCUyXG4iICIyOlx0bHdcdCVEMSwlM1xuXHQiICJtb3Zl
XHQlMCwkMFxuIiAiMzpcdC5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4iICI0Olx0bGlcdCUwLCU0
XG5cdCIgIm1vdmVcdCUxLCQwXG5cdCIgIm1vdmVcdCVEMSwkMFxuXHQiICJqXHQzYlxuXHQiICIu
cHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndvcmRcdDFi
LDRiXG5cdCIgIi53b3JkXHQyYiw0YlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX2d1X2Vyciks
ICI9JnIiIChfX2d1X3ZhbCkgOiJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fZ3Vf
YWRkcikpKSwgIm8iICgoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoX19ndV9hZGRyICsgNCkp
KSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBkZWZhdWx0OiBfX2dldF91c2VyX3Vua25vd24oKTsg
YnJlYWs7IH0gfSAob2xkX2wpID0gKF9fdHlwZW9mX18oKigoIG9sZGxlbnApKSkpIF9fZ3VfdmFs
OyBfX2d1X2VycjsgfSkpCgkJCXJldHVybiAtMTQ7CgkJaWYgKG9sZF9sIDwgbGVuKQoJCQlyZXR1
cm4gLTEyOwoJCWlmKCh7IGxvbmcgX19wdV9lcnI7IF9fdHlwZW9mX18oKigoIG9sZGxlbnApKSkg
X19wdV92YWw7IGxvbmcgX19wdV9hZGRyOyBfX3B1X3ZhbCA9ICgobGVuKSk7IF9fcHVfYWRkciA9
IChsb25nKSAoKCBvbGRsZW5wKSk7IF9fYXNtX18oIiI6Ij1yIiAoX19wdV9lcnIpKTsgaWYgKCgo
KF9fc2lnbmVkX18gbG9uZykoKCgobG9uZykoKGN1cnJlbnQtPnRocmVhZC5jdXJyZW50X2RzKS5z
ZWcpKSkmKF9fcHVfYWRkciB8IHNpemVvZigqKCBvbGRsZW5wKSkgfCAoX19wdV9hZGRyKyBzaXpl
b2YoKiggb2xkbGVucCkpKSkpKSA+PSAwKSkgeyBzd2l0Y2ggKHNpemVvZigqKCBvbGRsZW5wKSkp
IHsgY2FzZSAxOiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHQiICJzYiIgIlx0JTEsJTJc
blx0IiAibW92ZVx0JTAsJDBcbiIgIjI6XG5cdCIgIi5zZWN0aW9uXHQuZml4dXAsXCJheFwiXG4i
ICIzOlx0bGlcdCUwLCUzXG5cdCIgImpcdDJiXG5cdCIgIi5wcmV2aW91c1xuXHQiICIuc2VjdGlv
blx0X19leF90YWJsZSxcImFcIlxuXHQiICIud29yZFx0MWIsM2Jcblx0IiAiLnByZXZpb3VzIiA6
Ij1yIiAoX19wdV9lcnIpIDoiciIgKF9fcHVfdmFsKSwgIm8iICgoKihzdHJ1Y3QgX19sYXJnZV9z
dHJ1Y3QgKikoX19wdV9hZGRyKSkpLCAiaSIgKC0xNCkpOyB9KTsgYnJlYWs7IGNhc2UgMjogKHsg
X19hc21fXyBfX3ZvbGF0aWxlX18oICIxOlx0IiAic2giICJcdCUxLCUyXG5cdCIgIm1vdmVcdCUw
LCQwXG4iICIyOlxuXHQiICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiMzpcdGxpXHQlMCwl
M1xuXHQiICJqXHQyYlxuXHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUs
XCJhXCJcblx0IiAiLndvcmRcdDFiLDNiXG5cdCIgIi5wcmV2aW91cyIgOiI9ciIgKF9fcHVfZXJy
KSA6InIiIChfX3B1X3ZhbCksICJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fcHVf
YWRkcikpKSwgImkiICgtMTQpKTsgfSk7IGJyZWFrOyBjYXNlIDQ6ICh7IF9fYXNtX18gX192b2xh
dGlsZV9fKCAiMTpcdCIgInN3IiAiXHQlMSwlMlxuXHQiICJtb3ZlXHQlMCwkMFxuIiAiMjpcblx0
IiAiLnNlY3Rpb25cdC5maXh1cCxcImF4XCJcbiIgIjM6XHRsaVx0JTAsJTNcblx0IiAialx0MmJc
blx0IiAiLnByZXZpb3VzXG5cdCIgIi5zZWN0aW9uXHRfX2V4X3RhYmxlLFwiYVwiXG5cdCIgIi53
b3JkXHQxYiwzYlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX3B1X2VycikgOiJyIiAoX19wdV92
YWwpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShfX3B1X2FkZHIpKSksICJpIiAo
LTE0KSk7IH0pOyBicmVhazsgY2FzZSA4OiAoeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjE6XHRz
d1x0JTEsJTJcblx0IiAiMjpcdHN3XHQlRDEsJTNcbiIgIm1vdmVcdCUwLCQwXG4iICIzOlxuXHQi
ICIuc2VjdGlvblx0LmZpeHVwLFwiYXhcIlxuIiAiNDpcdGxpXHQlMCwlNFxuXHQiICJqXHQzYlxu
XHQiICIucHJldmlvdXNcblx0IiAiLnNlY3Rpb25cdF9fZXhfdGFibGUsXCJhXCJcblx0IiAiLndv
cmRcdDFiLDRiXG5cdCIgIi53b3JkXHQyYiw0YlxuXHQiICIucHJldmlvdXMiIDoiPXIiIChfX3B1
X2VycikgOiJyIiAoX19wdV92YWwpLCAibyIgKCgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCAqKShf
X3B1X2FkZHIpKSksICJvIiAoKCooc3RydWN0IF9fbGFyZ2Vfc3RydWN0ICopKF9fcHVfYWRkciAr
IDQpKSksICJpIiAoLTE0KSk7IH0pOyBicmVhazsgZGVmYXVsdDogX19wdXRfdXNlcl91bmtub3du
KCk7IGJyZWFrOyB9IH0gX19wdV9lcnI7IH0pIHx8ICh7IHZvaWQgKl9fY3VfdG87IGNvbnN0IHZv
aWQgKl9fY3VfZnJvbTsgbG9uZyBfX2N1X2xlbjsgX19jdV90byA9IChvbGR2YWwpOyBfX2N1X2Zy
b20gPSAoIGRhdGEpOyBfX2N1X2xlbiA9ICggbGVuKTsgaWYgKCgoKF9fc2lnbmVkX18gbG9uZyko
KCgobG9uZykoKGN1cnJlbnQtPnRocmVhZC5jdXJyZW50X2RzKS5zZWcpKSkmKCgodW5zaWduZWQg
bG9uZykoIF9fY3VfdG8pKSB8ICggX19jdV9sZW4pIHwgKCgodW5zaWduZWQgbG9uZykoIF9fY3Vf
dG8pKSsoIF9fY3VfbGVuKSkpKSkgPj0gMCkpIF9fYXNtX18gX192b2xhdGlsZV9fKCAibW92ZVx0
JDQsICUxXG5cdCIgIm1vdmVcdCQ1LCAlMlxuXHQiICJtb3ZlXHQkNiwgJTNcblx0IiAiamFsXHQi
Il9fY29weV91c2VyIiAiXG5cdCIgIm1vdmVcdCUwLCAkNiIgOiAiPXIiIChfX2N1X2xlbikgOiAi
ciIgKF9fY3VfdG8pLCAiciIgKF9fY3VfZnJvbSksICJyIiAoX19jdV9sZW4pIDogIiQ0IiwgIiQ1
IiwgIiQ2IiwgIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxNSIsICIkMjQiLCAi
JDMxIiwibWVtb3J5Iik7IF9fY3VfbGVuOyB9KSkKCQkJcmV0dXJuIC0xNDsKCX0KCWlmIChuZXd2
YWwpCgkJaWYoKHsgdm9pZCAqX19jdV90bzsgY29uc3Qgdm9pZCAqX19jdV9mcm9tOyBsb25nIF9f
Y3VfbGVuOyBfX2N1X3RvID0gKGRhdGEpOyBfX2N1X2Zyb20gPSAoIG5ld3ZhbCk7IF9fY3VfbGVu
ID0gKCBsZW4pOyBpZiAoKCgoX19zaWduZWRfXyBsb25nKSgoKChsb25nKSgoY3VycmVudC0+dGhy
ZWFkLmN1cnJlbnRfZHMpLnNlZykpKSYoKCh1bnNpZ25lZCBsb25nKSggX19jdV9mcm9tKSkgfCAo
IF9fY3VfbGVuKSB8ICgoKHVuc2lnbmVkIGxvbmcpKCBfX2N1X2Zyb20pKSsoIF9fY3VfbGVuKSkp
KSkgPj0gMCkpIF9fYXNtX18gX192b2xhdGlsZV9fKCAibW92ZVx0JDQsICUxXG5cdCIgIm1vdmVc
dCQ1LCAlMlxuXHQiICJtb3ZlXHQkNiwgJTNcblx0IiAiLnNldFx0bm9yZW9yZGVyXG5cdCIgImph
bFx0IiJfX2NvcHlfdXNlciIgIlxuXHQiICIuc2V0XHRub2F0XG5cdCIgImFkZHVcdCQxLCAlMiwg
JTNcblx0IiAiLnNldFx0YXRcblx0IiAiLnNldFx0cmVvcmRlclxuXHQiICJtb3ZlXHQlMCwgJDYi
IDogIj1yIiAoX19jdV9sZW4pIDogInIiIChfX2N1X3RvKSwgInIiIChfX2N1X2Zyb20pLCAiciIg
KF9fY3VfbGVuKSA6ICIkNCIsICIkNSIsICIkNiIsICIkOCIsICIkOSIsICIkMTAiLCAiJDExIiwg
IiQxMiIsICIkMTUiLCAiJDI0IiwgIiQzMSIsIm1lbW9yeSIpOyBfX2N1X2xlbjsgfSkpCgkJCXJl
dHVybiAtMTQ7CglyZXR1cm4gMDsKfQoKCgojIDEzNTIgInN5c2N0bC5jIgo=


More information about the Gcc-prs mailing list