This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

c++/4805: Internal compiler error



>Number:         4805
>Category:       c++
>Synopsis:       Internal compiler error
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Nov 06 09:36:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     shawley@aei.mpg.de
>Release:        Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/specs    gcc version 2.95.4 20011006 (Debian prerelease
>Organization:
>Environment:
debian linux 2.4.9 
>Description:
The compiler said "Internal compiler error.  Please submit a full bug report."  I don't know
more than that.  Here's the way it happened:

c++ -c -O2 -w -DIO_FLEXIO -DIO_OLDNCSA -DLINUX_ABSOFT -DACE_IO -DLINUX -DPORT_GROUP -DWant_c_files -I. -I../include -INONE/include -I/usr/local/include -I/usr/include/mpi -I/home/shawley/include -DLINUX -DLINUX -DPORT_GROUP -DWant_c_files -DIO_RNPLIO -DSTDC_HEADERS=1 -DHAVE_STRDUP=1 -DHAVE_ATEXIT=1 -DLINUX -DHAVE_LIBNETCDF=1 -DHAVE_LIBDF=1 -DHAVE_HDF=1 -DHAVE_LIBVS=1 -DHAVE_LIBSV=1 -DHAVE_LIBMPI=1 -DACE_REUSE_GDB -DDEBUG_PRINT -DACE_WRITEBOXES -DDEBUG_PRINT_GD_FILL ACEDistribution.cpp
ACEDistribution.cpp: In method `ACEDistribution::ACEDistribution(int, BBoxList &)':
ACEDistribution.cpp:30: Internal compiler error.
ACEDistribution.cpp:30: Please submit a full bug report.
ACEDistribution.cpp:30: Internal compiler error:
ACEDistribution.cpp:30: See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions
>How-To-Repeat:
 c++ -c -O2 -w -DIO_FLEXIO -DIO_OLDNCSA -DLINUX_ABSOFT -DACE_IO -DLINUX -DPORT_GROUP -DWant_c_files -I. -I../include -INONE/include -I/usr/local/include -I/usr/include/mpi -I/home/shawley/include -DLINUX -DLINUX -DPORT_GROUP -DWant_c_files -DIO_RNPLIO -DSTDC_HEADERS=1 -DHAVE_STRDUP=1 -DHAVE_ATEXIT=1 -DLINUX -DHAVE_LIBNETCDF=1 -DHAVE_LIBDF=1 -DHAVE_HDF=1 -DHAVE_LIBVS=1 -DHAVE_LIBSV=1 -DHAVE_LIBMPI=1 -DACE_REUSE_GDB -DDEBUG_PRINT -DACE_WRITEBOXES -DDEBUG_PRINT_GD_FILL ACEDistribution.cpp
>Fix:

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

IyAxICJBQ0VEaXN0cmlidXRpb24uY3BwIgogCgoKCgoKCgoKIyAxICJBQ0VEaXN0cmlidXRpb24u
aCIgMQoKCgogCgoKCgoKCgoKCiMgMSAiQUNFUGFyYW1zLmgiIDEKCgoKIAoKCgoKCgoKCgoKIAoj
IDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
IyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgoKCiAKCgoKCgoKCiAKIyAxNDIg
Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDIwOCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCiAKCgoKCgoKCgogCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgogCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEg
MwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgogCgoKCgoKIAoKCgoKCgoKCiAK
CgoKIyA2NSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAzCgoKIAoKCgoKCiAKCgoKCiAKCgoK
CgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKIAoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgog
CgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjgzICIvdXNyL2luY2x1ZGUvZmVh
dHVyZXMuaCIgMiAzCgoKCiAKCgoKCgoKCgogCgoKCgoKIAoKIAoKCgoKCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzMTIgIi91c3Iv
aW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKCgoKCiMgMjUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MiAzCgoKIAoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgog
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyODMgIi91
c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAK
CiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzMyAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAyIDMKCgpleHRlcm4gIkMiIHsgCgoKCgojIDkxICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDMKCgogCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CQkJIAogICAgaW50IHJl
bTsJCQkgCiAgfSBkaXZfdDsKCiAKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVv
dDsJCSAKICAgIGxvbmcgaW50IHJlbTsJCSAKICB9IGxkaXZfdDsKCgoKIyAxMTggIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMwoKCgogCgoKCiAKCgoKCgogCgpleHRlcm4gc2l6ZV90IF9fY3R5cGVf
Z2V0X21iX2N1cl9tYXggKHZvaWQpIHRocm93ICgpIDsKCgogCmV4dGVybiBkb3VibGUgYXRvZiAo
X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpICAgOwogCmV4dGVybiBpbnQgYXRvaSAoX19j
b25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpICAgOwogCmV4dGVybiBsb25nIGludCBhdG9sIChf
X2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgICA7CgoKIApfX2V4dGVuc2lvbl9fIGV4dGVy
biBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJvdyAo
KSAgIDsKCgogCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19ucHRyLAoJCSAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKSA7CgoK
CgoKCgoKCgogCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCgkJCWNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJv
dyAoKSA7CiAKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCgkJCQkgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg
X19iYXNlKQogICAgIHRocm93ICgpIDsKCgogCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkgICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKSA7CiAKX19leHRl
bnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpIDsKCgoKIAoKIApfX2V4dGVuc2lvbl9fCmV4
dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCgkJCSAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJv
dyAoKSA7CiAKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0
b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQljaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKSA7CgoKCiMgMjQ0ICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKIAoKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJu
YWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpIDsKZXh0ZXJuIGZsb2F0IF9f
c3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpIDsKZXh0
ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKCQkJCSAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCSAg
ICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCkgOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2lu
dGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCgkJCQkgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cg
KCkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJCSAgICAgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsCgkJCQkJICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCkgOwoK
CgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLAoJCQkJCSBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCkgOwoKCgpf
X2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50
ZXJuYWwgKF9fY29uc3QgY2hhciAqCgkJCQkJCSAgIF9fcmVzdHJpY3QgX19ucHRyLAoJCQkJCQkg
ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkJICAgaW50IF9fYmFzZSwgaW50IF9f
Z3JvdXApCiAgICAgdGhyb3cgKCkgOwoKCgoKCiAKCmV4dGVybiBfX2lubGluZSBkb3VibGUKc3Ry
dG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0cikgdGhyb3cgKCkgCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwg
X19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJaW50
IF9fYmFzZSkgdGhyb3cgKCkgCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwg
X19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50
CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAoJIGludCBfX2Jhc2UpIHRocm93ICgpIAp7CiAgcmV0dXJuIF9fc3RydG91
bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKIyAzMjIgIi91c3Iv
aW5jbHVkZS9zdGRsaWIuaCIgMwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25n
IGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsCglpbnQgX19iYXNlKSB0aHJvdyAoKSAKewogIHJldHVybiBf
X3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRl
bnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VxIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKCSBpbnQgX19iYXNlKSB0aHJvdyAoKSAKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFs
IChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJu
IF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkgaW50IF9fYmFzZSkgdGhyb3cg
KCkgCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jh
c2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQKc3RydG91bGwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwKCSAgaW50IF9fYmFzZSkgdGhyb3cgKCkgCnsKICByZXR1cm4g
X19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4
dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgp
IAp7CiAgcmV0dXJuIHN0cnRvZCAoX19ucHRyLCAoY2hhciAqKikgX19udWxsICk7Cn0KZXh0ZXJu
IF9faW5saW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgCnsKICBy
ZXR1cm4gKGludCkgc3RydG9sIChfX25wdHIsIChjaGFyICoqKSBfX251bGwgLCAxMCk7Cn0KZXh0
ZXJuIF9faW5saW5lIGxvbmcgaW50CmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAo
KSAKewogIHJldHVybiBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCAsIDEwKTsKfQoK
Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29u
c3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSAKewogIHJldHVybiBzdHJ0b2xsIChfX25wdHIsIChj
aGFyICoqKSBfX251bGwgLCAxMCk7Cn0KCgoKCgogCgoKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcg
aW50IF9fbikgdGhyb3cgKCkgOwoKIApleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFy
ICpfX3MpIHRocm93ICgpICAgOwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL3R5cGVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgojIDEg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
CgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1
ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv
Mi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCiMg
MjcxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgi
IDMKCgojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1
LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI5ICIv
dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgogCnR5cGVkZWYgdW5zaWduZWQgY2hhciBf
X3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWdu
ZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5z
aW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5z
aW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ4ICIvdXNyL2luY2x1ZGUv
Yml0cy90eXBlcy5oIiAzCgp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90
Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBp
bnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNp
b25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25f
XyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19x
dWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90OwkJIAp0eXBlZGVm
IF9fdV9pbnQgX191aWRfdDsJCSAKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CQkgCnR5cGVkZWYg
X191X2xvbmcgX19pbm9fdDsJCSAKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90OwkJIAp0eXBlZGVm
IF9fdV9pbnQgX19ubGlua190OyAJCSAKdHlwZWRlZiBsb25nIGludCBfX29mZl90OwkJIAp0eXBl
ZGVmIF9fcXVhZF90IF9fbG9mZl90OwkJIAp0eXBlZGVmIGludCBfX3BpZF90OwkJCSAKdHlwZWRl
ZiBpbnQgX19zc2l6ZV90OwkJCSAKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsJCSAKdHlwZWRl
ZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX2lkX3Q7CQkJIAoK
dHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsJCQkJIAoK
IAp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CQkJIAp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlw
ZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190
Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Js
a190OwkJIAoMCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKIAp0eXBlZGVmIGludCBfX2Ns
b2NraWRfdDsKCiAKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCiAKCgoKdHlwZWRlZiBpbnQgX19r
ZXlfdDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKIAp0eXBl
ZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKIAoKIAp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250
X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKIAp0eXBlZGVmIF9fdV9sb25nIF9f
ZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKIAp0eXBlZGVm
IF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90
OwoKIAp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKIAp0eXBlZGVmIF9fbG9mZl90IF9f
b2ZmNjRfdDsKCiAKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCiAKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCiAK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKIAoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgoKCgoK
CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKIyA2MiAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwoKCgoKCiAKc3RydWN0IF9fc2No
ZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwoKCiMgMjMgIi91c3Iv
aW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgogCnN0cnVjdCBfcHRocmVhZF9mYXN0
bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7ICAgIAogIGludCBfX3NwaW5sb2NrOyAgICAgICAK
Cn07CgoKIAp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rl
c2NyOwoKCgoKIAp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRh
Y2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3Nj
aGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBf
X2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwog
IHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgogCnR5cGVkZWYgc3RydWN0
CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7ICAKICBfcHRocmVhZF9kZXNj
ciBfX2Nfd2FpdGluZzsgICAgICAgICAKfSBwdGhyZWFkX2NvbmRfdDsKCgogCnR5cGVkZWYgc3Ry
dWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgogCnR5cGVkZWYgdW5z
aWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKIAogCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9f
bV9yZXNlcnZlZDsgICAgICAgICAgICAgICAgCiAgaW50IF9fbV9jb3VudDsgICAgICAgICAgICAg
ICAgICAgCiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOyAgICAgICAgCiAgaW50IF9fbV9raW5k
OyAgICAgICAgICAgICAgICAgICAgCiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2Nr
OyAgCn0gcHRocmVhZF9tdXRleF90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4
a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCiAKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNl
X3Q7CgoKIyAxMTcgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCgoKIyAxMzYg
Ii91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCgoKCiAKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIGludCBwdGhyZWFkX3Q7CgoKIyAxNDMgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi
IDIgMwoKCgoKIyAzMCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCnR5cGVkZWYg
X191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9p
bnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRf
dDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsK
CgoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoK
CgoKCgoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90
OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlu
a190OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZf
dDsKCgoKCgoKCgoKCgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0eXBlZGVmIF9faWRfdCBp
ZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVmIF9fZGFkZHJf
dCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVkZWYgX19rZXlf
dCBrZXlfdDsKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIAoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgojIDUxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoK
IyA2MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKCgoKCiAKdHlwZWRlZiBfX3RpbWVfdCB0
aW1lX3Q7CgoKCgoKCgoKCgogCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwoKCgoKCgoK
CgoKIAp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90OwoKCgoKCiMgMTEyICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzCgoKCgojIDM2NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDEzMiAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDE0MyAiL3Vzci9pbmNsdWRlL3N5cy90eXBl
cy5oIiAzCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51
eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoK
CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4OCAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
CgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5j
bHVkZS9zdGRkZWYuaCIgMwoKCiMgMjgzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiMgMTQ2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgogCnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9y
dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKCgogCgojIDE4MCAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAzCgoKIAoKCgoKCgoKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18g
KChfX21vZGVfXyAoICBfX1FJX18gKSkpIDsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKCAgX19ISV9fICkpKSA7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fU0lfXyApKSkgOwp0eXBlZGVmIGludCBpbnQ2NF90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX0RJX18gKSkpIDsKCgp0eXBlZGVmIHVuc2lnbmVk
IGludCB1X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19RSV9fICkpKSA7CnR5
cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAg
X19ISV9fICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKCAgX19TSV9fICkpKSA7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRf
dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19ESV9fICkpKSA7Cgp0eXBlZGVmIGludCBy
ZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CgoKIAoKCgoK
CgogCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCgoKCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiAK
CgoKCgoKIyAzNyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgojIDIxMiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgogCiMgMSAiL3Vzci9p
bmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoK
IAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDMKCgoKCgoKCgoKCgoK
IyA1NiAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDMKCiMgNzIgIi91c3IvaW5jbHVkZS9i
aXRzL3NlbGVjdC5oIiAzCgojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgog
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKIAoKCnR5cGVkZWYgc3RydWN0CiAgewog
ICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQg
bG9uZyBpbnQpKSkgXTsKICB9IF9fc2lnc2V0X3Q7CgoKCgogCgoKCgoKIyAxMjUgIi91c3IvaW5j
bHVkZS9iaXRzL3NpZ3NldC5oIiAzCgojIDM0ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAy
IDMKCgoKCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgogCgoKIyAxICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgojIDUxICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKIyA2MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoj
IDcyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgODQgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDMKCgoKIyA5NiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgoKCgoKCiAKCnN0cnVjdCB0aW1l
c3BlYwogIHsKICAgIF9fdGltZV90IHR2X3NlYzsJCSAKICAgIGxvbmcgaW50IHR2X25zZWM7CQkg
CiAgfTsKCgoKCgojIDM2NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCgojIDQ0ICIvdXNyL2lu
Y2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIg
MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgojIDU3ICIvdXNyL2luY2x1ZGUvYml0cy90aW1l
LmgiIDMKCgoKCgoKCgogCgpzdHJ1Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsJ
CSAKICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsJIAogIH07CgoKIyA0NiAiL3Vzci9pbmNsdWRl
L3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsK
CgoKCiAKdHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7CgogCgoKCgogCnR5cGVkZWYgc3RydWN0
CiAgewogICAgIAoKCgoKCiAgICBfX2ZkX21hc2sgX19mZHNfYml0c1sxMDI0ICAvICg4ICogc2l6
ZW9mIChfX2ZkX21hc2spKSBdOwoKCiAgfSBmZF9zZXQ7CgogCgoKCiAKdHlwZWRlZiBfX2ZkX21h
c2sgZmRfbWFzazsKCiAKCgoKCiAKCgoKCgoKZXh0ZXJuICJDIiB7IAoKIAoKCgoKZXh0ZXJuIGlu
dCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCgkJICAg
ZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCgkJICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9f
ZXhjZXB0ZmRzLAoJCSAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhy
b3cgKCkgOwoKIyAxMTYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKCgp9IAoKCiMgMjE1
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiAKIyAxICIvdXNyL2luY2x1ZGUvc3lz
L3N5c21hY3Jvcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIyA0NyAi
L3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMwoKCgojIDIxOCAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAyIDMKCgoKCgoKCgoKIAoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsJ
ICAKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsgIAoKCgp0eXBlZGVmIF9fZnNm
aWxjbnRfdCBmc2ZpbGNudF90OyAgCgoKIyAyNTQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
MwoKCgoKCgoKCn0gCgoKIyAzOTAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKIAoKCgog
CmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIHRocm93ICgpIDsKCiAKZXh0ZXJuIHZvaWQg
c3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCkgOwoKIAoKCgpleHRlcm4gY2hh
ciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAoJCQlz
aXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCkgOwoKIAoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChj
aGFyICpfX3N0YXRlYnVmKSB0aHJvdyAoKSA7CgoKCiAKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAg
ewogICAgaW50MzJfdCAqZnB0cjsJCSAKICAgIGludDMyX3QgKnJwdHI7CQkgCiAgICBpbnQzMl90
ICpzdGF0ZTsJCSAKICAgIGludCByYW5kX3R5cGU7CQkgCiAgICBpbnQgcmFuZF9kZWc7CQkgCiAg
ICBpbnQgcmFuZF9zZXA7CQkgCiAgICBpbnQzMl90ICplbmRfcHRyOwkJIAogIH07CgpleHRlcm4g
aW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCgkJICAg
ICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHNy
YW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1Zikg
dGhyb3cgKCkgOwoKZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwg
Y2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAoJCQlzaXplX3QgX19zdGF0ZWxlbiwKCQkJc3Ry
dWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKSA7CgpleHRlcm4gaW50
IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKCQkgICAgICAgc3RydWN0
IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKSA7CgoKCgogCmV4dGVybiBp
bnQgcmFuZCAodm9pZCkgdGhyb3cgKCkgOwogCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBp
bnQgX19zZWVkKSB0aHJvdyAoKSA7CgoKIApleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50
ICpfX3NlZWQpIHRocm93ICgpIDsKCgoKCiAKCiAKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lk
KSB0aHJvdyAoKSA7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9f
eHN1YmlbM10pIHRocm93ICgpIDsKCiAKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRo
cm93ICgpIDsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hz
dWJpWzNdKSB0aHJvdyAoKSA7CgogCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJv
dyAoKSA7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi
aVszXSkgdGhyb3cgKCkgOwoKIApleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2
YWwpIHRocm93ICgpIDsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAoKSA7CmV4dGVybiB2b2lkIGxjb25nNDgg
KHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAoKSA7CgoKIAoKCnN0cnVjdCBk
cmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwkgCiAgICB1bnNp
Z25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsgIAogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsJ
IAogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsJIAogICAgdW5zaWduZWQgbG9uZyBsb25n
IGludCBfX2E7CSAKICB9OwoKIApleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhf
ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKCQkgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19y
ZXN1bHQpIHRocm93ICgpIDsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGlu
dCBfX3hzdWJpWzNdLAoJCSAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i
dWZmZXIsCgkJICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKSA7Cgog
CmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9f
YnVmZmVyLAoJCSAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKSA7
CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKCQkg
ICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCSAgICAgIGxv
bmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgbXJh
bmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCSAgICAg
IGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKSA7CmV4dGVybiBpbnQganJh
bmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKCQkgICAgICBzdHJ1Y3QgZHJh
bmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCSAgICAgIGxvbmcgaW50ICpfX3Jlc3Ry
aWN0IF9fcmVzdWx0KSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25nIGlu
dCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAgIHRocm93ICgp
IDsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10s
CgkJICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCkgOwoKZXh0ZXJu
IGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAoJCSAgICAgIHN0
cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKSA7CgoKCgoKCgogCmV4dGVybiB2
b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpICAgOwogCmV4dGVybiB2b2lkICpj
YWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpICAgOwoK
CgogCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIHRo
cm93ICgpICAgOwogCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKSA7CgoK
IApleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpIDsKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYWxsb2NhLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoK
CgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUu
NC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgojIDI3MSAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
IyAyODMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYu
aCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2lu
Y2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyNSAiL3Vzci9p
bmNsdWRlL2FsbG9jYS5oIiAyIDMKCgpleHRlcm4gIkMiIHsgCgogCgoKIApleHRlcm4gdm9pZCAq
YWxsb2NhIChzaXplX3QgX19zaXplKSB0aHJvdyAoKSA7CgoKCgoKfSAKCgojIDU0NiAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCiAKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9f
c2l6ZSkgdGhyb3cgKCkgICA7CgoKCgoKCgoKIApleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhy
b3cgKCkgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogCmV4dGVybiBpbnQgYXRl
eGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIHRocm93ICgpIDsKCgogCgpleHRlcm4gaW50IG9u
X2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAq
X19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCiAKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0
dXMpIHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKCgoKIApl
eHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCkgOwoKIAoK
ZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93
ICgpIDsKCgogCiAKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCkg
OwoKCgogCgpleHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3Qg
Y2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKSA7CgogCmV4dGVybiBp
bnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKSA7CgoKCiAKCgpleHRl
cm4gaW50IGNsZWFyZW52ICh2b2lkKSB0aHJvdyAoKSA7CgoKCgogCgoKCmV4dGVybiBjaGFyICpt
a3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpIDsKCiAKCgoKCgpleHRlcm4gaW50IG1r
c3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpIDsKCgoKCgoKCgoKCgoKCiAKCgoKCmV4
dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKSA7CgoKCiAKZXh0
ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKSA7CgoKCgoK
CgoKCgogCgoKCgoKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19uYW1lLAoJCSAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRocm93ICgp
IDsKCgoKIAoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBf
X2NvbnN0IHZvaWQgKik7CgoKCgoKCiAKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZv
aWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKCQkgICAgICBzaXplX3QgX19ubWVtYiwg
c2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgogCgpleHRlcm4gdm9pZCBx
c29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKCQkgICBf
X2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgogCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJv
dyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAo
bG9uZyBpbnQgX194KSB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK
CgogCgogCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkKICAgICB0
aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYg
KGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKCgogCgoKIAoKCmV4dGVybiBjaGFyICplY3Z0
IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwK
CQkgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKSA7CgogCgoKZXh0ZXJuIGNoYXIg
KmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2Rl
Y3B0LAoJCSAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpIDsKCiAKCgpleHRlcm4g
Y2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRo
cm93ICgpIDsKCgoKIApleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGlu
dCBfX25kaWdpdCwKCQkgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmlj
dCBfX3NpZ24pIHRocm93ICgpIDsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsCgkJICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9f
cmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKSA7CmV4dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3Vi
bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCkgOwoKCiAKCmV4
dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVz
dHJpY3QgX19kZWNwdCwKCQkgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3Ry
aWN0IF9fYnVmLAoJCSAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCkgOwpleHRlcm4gaW50IGZjdnRf
ciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQs
CgkJICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKCQkg
ICBzaXplX3QgX19sZW4pIHRocm93ICgpIDsKCmV4dGVybiBpbnQgcWVjdnRfciAobG9uZyBkb3Vi
bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAoJCSAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwg
aW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKCQkgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6
ZV90IF9fbGVuKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192
YWx1ZSwgaW50IF9fbmRpZ2l0LAoJCSAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpf
X3Jlc3RyaWN0IF9fc2lnbiwKCQkgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9f
bGVuKSB0aHJvdyAoKSA7CgoKCgogCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9f
cywgc2l6ZV90IF9fbikgdGhyb3cgKCkgOwogCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAq
X19yZXN0cmljdCBfX3B3YywKCQkgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXpl
X3QgX19uKSB0aHJvdyAoKSA7CiAKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFy
X3QgX193Y2hhcikgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJf
dCAqX19yZXN0cmljdCAgX19wd2NzLAoJCQlfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBz
aXplX3QgX19uKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19y
ZXN0cmljdCBfX3MsCgkJCV9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVf
dCBfX24pCiAgICAgdGhyb3cgKCkgOwoKCgogCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25z
dCBjaGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKSA7CgoKCiMgODExICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKCgoKCgoKCgoKIAoKCgoKCgojIDg0MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
CgoKIyA4NTIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgogCgoKZXh0ZXJuIGludCBnZXRs
b2FkYXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSB0aHJvdyAoKSA7CgoKCgoK
fSAKCgojIDE2ICJBQ0VQYXJhbXMuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgoKCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoK
CgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9z
dGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
bGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1
LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKIyAyNzEg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CiMgMjgzICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVm
LmgiIDMKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9p
bmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzQgIi91c3Iv
aW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCgoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUg
RklMRTsKCgoKCgoKCgogCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKCgoKCgoKCgoK
IyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwogCgoKCgoKIAoKCgoKCgoj
IDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIg
MSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2lu
Y2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAK
CgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgoKCgoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgIHdpbnRfdDsKCgoKCiAKCiAK
CiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVm
LmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxNCAiL3Vzci9pbmNsdWRlL19HX2Nv
bmZpZy5oIiAyIDMKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwogCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiMgNDYgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz
CgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVm
LmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUu
NC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAxOTAgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKCgog
CgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy93Y2hhci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA1MCAiL3Vzci9pbmNs
dWRlL3djaGFyLmgiIDIgMwoKCiAKCgoKCgoKCgoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGlu
dCBfX2NvdW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJb
NF07CiAgfSBfX3ZhbHVlOwkJIAp9IF9fbWJzdGF0ZV90OwoKCgoKIAoKIyA2ODIgIi91c3IvaW5j
bHVkZS93Y2hhci5oIiAzCgoKCiMgMjQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgoK
dHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsK
fSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19tYnN0
YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9n
Y29udi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVk
ZS93Y2hhci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgojIDQ2ICIvdXNy
L2luY2x1ZGUvd2NoYXIuaCIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIu
OTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAK
CgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVm
LmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91
c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAK
CiAKCiMgMTkwICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8y
Ljk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNy
L2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCgoK
IAoKCgoKCgoKCgoKCiMgNzYgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoKCgogCgojIDY4MiAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCgoKIyAyOCAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIg
MwoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRk
ZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45
NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3Iv
bGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAK
CgoKCiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRl
L3N0ZGRlZi5oIiAzCgoKCgojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUu
NC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgojIDMxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKIAoKCiAKZW51bQp7CiAgX19H
Q09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZf
Tk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBf
X0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dD
T05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoKIApl
bnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JT
ID0gMHgwMDAyCn07CgoKIApzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29udl9zdGVw
X2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252X3RyYW5z
X2RhdGE7CgoKIAp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3Rl
cCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKCQkJICAgIF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCgkJCSAgICB1bnNpZ25lZCBjaGFyICoq
LCBzaXplX3QgKiwgaW50LCBpbnQpOwoKIAp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3Qp
IChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3Qp
IChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCiAKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5z
X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwKCQkJCSAgc3RydWN0IF9fZ2NvbnZfc3RlcF9k
YXRhICosIHZvaWQgKiwKCQkJCSAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCgkJCQkgIF9fY29u
c3QgdW5zaWduZWQgY2hhciAqKiwKCQkJCSAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2ln
bmVkIGNoYXIgKiosCgkJCQkgIHNpemVfdCAqKTsKCiAKdHlwZWRlZiBpbnQgKCpfX2djb252X3Ry
YW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKCQkJCQkg
IF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAoJCQkJCSAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25l
ZCBjaGFyICopOwoKIAp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19j
b25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCgkJCQkJc2l6ZV90ICopOwoKIAp0eXBlZGVm
IGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0
eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9f
Z2NvbnZfdHJhbnNfZGF0YQp7CiAgIAogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0Owog
IF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252
X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3Qg
X19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKIApzdHJ1Y3QgX19nY29udl9zdGVwCnsK
ICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0
IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7
CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRf
ZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCiAgIAoKICBpbnQg
X19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9u
ZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCiAgIAogIGludCBfX3N0YXRlZnVsOwoK
ICB2b2lkICpfX2RhdGE7CQkgCn07CgogCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVu
c2lnbmVkIGNoYXIgKl9fb3V0YnVmOyAgICAgCiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7
ICAKCgogICAKICBpbnQgX19mbGFnczsKCiAgIAoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7
CgogICAKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAg
X19tYnN0YXRlX3QgX19zdGF0ZTsJIAoKCiAgIAogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEg
Kl9fdHJhbnM7Cn07CgoKIAp0eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVfdCBf
X25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18g
c3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbMF0gOwp9ICpfX2djb252X3Q7CgoKIyA0
NCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCnR5cGVkZWYgdW5pb24KewogIHN0cnVj
dCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZv
IF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5l
ZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3Qg
X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50
IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKIyAzMiAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDIgMwoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCiMgMSAiL3Vzci9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
Cgp0eXBlZGVmIHZvaWQgKl9fZ251Y192YV9saXN0OwoKCgogCgojIDEyMiAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIyAyMDkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9z
dGRhcmcuaCIgMwoKCgoKIyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwoKCgoKCgoKIyA3
MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCgogCgoKCgoKCgoKCgoKCgoKCgoKIyAxMDMgIi91
c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IF9JT19qdW1wX3Q7ICBzdHJ1Y3QgX0lPX0ZJ
TEU7CgogCgoKCgoKCgp0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKIAoKc3RydWN0IF9JT19t
YXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9z
YnVmOwogICAKCiAgIAogIGludCBfcG9zOwojIDE5MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK
Cn07CgogCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2
dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252Cn07CgojIDI1
OSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxh
Z3M7CQkgCgoKICAgCiAgIAogIGNoYXIqIF9JT19yZWFkX3B0cjsJIAogIGNoYXIqIF9JT19yZWFk
X2VuZDsJIAogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsJ
IAogIGNoYXIqIF9JT193cml0ZV9wdHI7CSAKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwkgCiAgY2hh
ciogX0lPX2J1Zl9iYXNlOwkgCiAgY2hhciogX0lPX2J1Zl9lbmQ7CSAKICAgCiAgY2hhciAqX0lP
X3NhdmVfYmFzZTsgIAogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsgICAKICBjaGFyICpfSU9fc2F2
ZV9lbmQ7ICAKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJ
TEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgICBf
b2xkX29mZnNldDsgIAoKCiAgIAogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25l
ZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKICAgCgogIF9JT19s
b2NrX3QgKl9sb2NrOwoKCgoKCgoKCiAgX19vZmY2NF90ICAgX29mZnNldDsKCgoKCgogIHZvaWQg
Kl9fcGFkMTsKICB2b2lkICpfX3BhZDI7CgogIGludCBfbW9kZTsKICAgCiAgY2hhciBfdW51c2Vk
MlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1
Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0
ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJu
IHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKCgoKCgoKCgoKCgogCgogCgp0
eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1
Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCiAKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRl
X2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKCQkJCSBzaXplX3QgX19u
KTsKCiAKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29m
ZjY0X3QgICAqX19wb3MsIGludCBfX3cpOwoKIAp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2
b2lkICpfX2Nvb2tpZSk7CgoKIyAzODkgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKCgpleHRl
cm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKSA7
CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9f
b3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgdGhyb3cgKCkgOwpleHRlcm4gd2ludF90ICAgX193
dW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKSA7CmV4dGVybiB3aW50X3QgICBfX3d1Zmxv
dyAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwpleHRlcm4gd2ludF90ICAgX193b3ZlcmZsb3cgKF9J
T19GSUxFICosIHdpbnRfdCAgKSB0aHJvdyAoKSA7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4
dGVybiBpbnQgX0lPX2dldGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQg
X0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQg
X0lPX2Zlb2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgX0lPX2ZlcnJv
ciAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpIDsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tl
ZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpIDsKCiAKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2Nr
ZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUg
KF9JT19GSUxFICopIHRocm93ICgpIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9f
RklMRSAqKSB0aHJvdyAoKSA7CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT192ZnNjYW5m
IChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAoJCQlfX2du
dWNfdmFfbGlzdCAsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9JT192
ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCgkJ
CSBfX2dudWNfdmFfbGlzdCApIHRocm93ICgpIDsKZXh0ZXJuIF9fc3NpemVfdCAgIF9JT19wYWRu
IChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCAgKSB0aHJvdyAoKSA7CmV4dGVybiBzaXplX3Qg
ICBfSU9fc2dldG4gKF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90ICApIHRocm93ICgpIDsKCmV4
dGVybiBfX29mZjY0X3QgICBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90ICAsIGlu
dCwgaW50KSB0aHJvdyAoKSA7CmV4dGVybiBfX29mZjY0X3QgICBfSU9fc2Vla3BvcyAoX0lPX0ZJ
TEUgKiwgX19vZmY2NF90ICAsIGludCkgdGhyb3cgKCkgOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVf
YmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpIDsKCiMgNTExICIvdXNyL2luY2x1ZGUv
bGliaW8uaCIgMwoKCgp9CgoKCiMgNjUgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgojIDc2
ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCiAKCnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsK
CgoKCgoKCiAKCgoKCgogCgoKCgoKIAoKCgoKCgogCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTI5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoK
CiAKZXh0ZXJuIEZJTEUgKnN0ZGluOwkJIApleHRlcm4gRklMRSAqc3Rkb3V0OwkJIApleHRlcm4g
RklMRSAqc3RkZXJyOwkJIAogCgoKCgogCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIg
Kl9fZmlsZW5hbWUpIHRocm93ICgpIDsKIApleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFy
ICpfX29sZCwgX19jb25zdCBjaGFyICpfX25ldykgdGhyb3cgKCkgOwoKCiAKCmV4dGVybiBGSUxF
ICp0bXBmaWxlICh2b2lkKSB0aHJvdyAoKSA7CgoKCgoKCgoKCgogCmV4dGVybiBjaGFyICp0bXBu
YW0gKGNoYXIgKl9fcykgdGhyb3cgKCkgOwoKCiAKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hh
ciAqX19zKSB0aHJvdyAoKSA7CgoKCgogCgoKCgoKCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2Nv
bnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAgIHRocm93ICgpICAgOwoK
CgogCmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwogCmV4dGVy
biBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIGludCBm
Zmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCgoKCgoKCiAKZXh0
ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKCQkg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpIDsKIApleHRlcm4g
RklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCgkJICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCgkJICAgICAgRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSkgdGhyb3cgKCkgOwojIDIyMCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMK
CgoKCgoKCgoKCiAKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAq
X19tb2RlcykgdGhyb3cgKCkgOwoKCiMgMjQ5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgog
CgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9f
cmVzdHJpY3QgX19idWYpIHRocm93ICgpIDsKIAoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKCQkgICAgaW50IF9f
bW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpIDsKCgogCgpleHRlcm4gdm9pZCBzZXRidWZmZXIg
KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCgkJICAg
ICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgpIDsKCiAKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKCgoKIApleHRlcm4gaW50IGZwcmludGYgKEZJTEUg
Kl9fcmVzdHJpY3QgX19zdHJlYW0sCgkJICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwgLi4uKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGludCBzcHJpbnRm
IChjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LCAuLi4pIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19y
ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKCQkgICAgIF9f
Z251Y192YV9saXN0ICBfX2FyZykgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQgdnByaW50ZiAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCAgX19hcmcpCiAg
ICAgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19z
LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCgkJICAgICBfX2dudWNfdmFfbGlz
dCAgX19hcmcpIHRocm93ICgpIDsKCgogCmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVz
dHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCgkJICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0
X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19y
ZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0ICBfX2FyZykKICAgICB0aHJvdyAoKSAgX19h
dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CgoKIyAzMjEgIi91
c3IvaW5jbHVkZS9zdGRpby5oIiAzCgoKCiAKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0sCgkJICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu
Li4pIHRocm93ICgpIDsKIApleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zLAoJCSAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwgLi4uKSB0aHJvdyAoKSA7CgojIDM0NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoK
IApleHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwpleHRlcm4gaW50
IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgZ2V0Y2hhciAo
dm9pZCkgdGhyb3cgKCkgOwoKIAoKCgoKIApleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkg
dGhyb3cgKCkgOwoKCgogCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKSA7CgoKCiAKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJl
YW0pIHRocm93ICgpIDsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpIDsKCiAK
CgoKCiAKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0p
IHRocm93ICgpIDsKCgoKIApleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9f
YykgdGhyb3cgKCkgOwoKCgoKIApleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKSA7CgogCmV4dGVybiBpbnQgcHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pIHRocm93
ICgpIDsKCgoKIApleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQg
X19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpIDsKCgoKCgoKCiAK
CmV4dGVybiBjaGFyICpnZXRzIChjaGFyICpfX3MpIHRocm93ICgpIDsKCgojIDQzNyAiL3Vzci9p
bmNsdWRlL3N0ZGlvLmgiIDMKCgoKIApleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpIDsK
CgoKCgoKCiAKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgOwoK
CiAKZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7
CgoKIApleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3Qg
X19zaXplLAoJCSAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhy
b3cgKCkgOwogCmV4dGVybiBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3Qg
X19wdHIsIHNpemVfdCBfX3NpemUsCgkJICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmlj
dCBfX3MpIHRocm93ICgpIDsKCgogCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQg
Kl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCgkJCSAgICAgIHNpemVfdCBfX24sIEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpIDsKZXh0ZXJuIHNpemVfdCBmd3JpdGVf
dW5sb2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwK
CQkJICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
IDsKCgoKIApleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYs
IGludCBfX3doZW5jZSkgdGhyb3cgKCkgOwogCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpIDsKIApleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKSA7CgogCgoKCgoKCgoKCgoKCiAKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cg
KCkgOwogCmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190
ICpfX3BvcykgdGhyb3cgKCkgOwojIDUyMCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKCgoK
CgoKCiAKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CiAK
ZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQg
ZmVycm9yIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIHZvaWQgY2xlYXJl
cnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgZmVvZl91
bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKZXh0ZXJuIGludCBmZXJyb3JfdW5s
b2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCiAKZXh0ZXJuIHZvaWQgcGVycm9y
IChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgOwoKIAoKCmV4dGVybiBpbnQgc3lzX25lcnI7
CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgoKCgoKCgogCmV4
dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCgogCmV4dGVybiBp
bnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCgoKCiAKZXh0
ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpf
X21vZGVzKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCkgOwoKCgoKIApleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0aHJvdyAo
KSA7CgoKCgoKCgoKCiMgNjAyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgoKIAoKIApleHRl
cm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgogCgpleHRlcm4g
aW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKCiAKZXh0ZXJuIHZv
aWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCgoKCgoKCgogCgoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCmlubGluZSAgaW50CnZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgIF9fYXJnKSB0aHJvdyAoKSAKewogIHJldHVybiB2ZnBy
aW50ZiAoc3Rkb3V0ICwgX19mbXQsIF9fYXJnKTsKfQoKIAppbmxpbmUgIGludApnZXRjaGFyICh2
b2lkKSB0aHJvdyAoKSAKewogIHJldHVybiBfSU9fZ2V0YyAoc3RkaW4gKTsKfQoKCgogCmlubGlu
ZSAgaW50CmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fZnApIHRocm93ICgpIAp7CiAgcmV0dXJuICgo
IF9fZnAgKS0+X0lPX3JlYWRfcHRyID49ICggX19mcCApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93
ICggX19mcCApIDogKih1bnNpZ25lZCBjaGFyICopICggX19mcCApLT5fSU9fcmVhZF9wdHIrKykg
Owp9CgogCmlubGluZSAgaW50CmdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpIAp7CiAg
cmV0dXJuICgoIHN0ZGluICApLT5fSU9fcmVhZF9wdHIgPj0gKCBzdGRpbiAgKS0+X0lPX3JlYWRf
ZW5kID8gX191ZmxvdyAoIHN0ZGluICApIDogKih1bnNpZ25lZCBjaGFyICopICggc3RkaW4gICkt
Pl9JT19yZWFkX3B0cisrKSA7Cn0KCgoKIAppbmxpbmUgIGludApwdXRjaGFyIChpbnQgX19jKSB0
aHJvdyAoKSAKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQgKTsKfQoKCgogCmlubGlu
ZSAgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkg
CnsKICByZXR1cm4gKCgoICBfX3N0cmVhbSApLT5fSU9fd3JpdGVfcHRyID49ICggIF9fc3RyZWFt
ICktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoICBfX3N0cmVhbSAsICh1bnNpZ25lZCBj
aGFyKSAoIF9fYyApKSA6ICh1bnNpZ25lZCBjaGFyKSAoKiggIF9fc3RyZWFtICktPl9JT193cml0
ZV9wdHIrKyA9ICggX19jICkpKSA7Cn0KCgoKCiAKaW5saW5lICBpbnQKcHV0Y191bmxvY2tlZCAo
aW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpIAp7CiAgcmV0dXJuICgoKCAgX19zdHJl
YW0gKS0+X0lPX3dyaXRlX3B0ciA+PSAoICBfX3N0cmVhbSApLT5fSU9fd3JpdGVfZW5kKSA/IF9f
b3ZlcmZsb3cgKCAgX19zdHJlYW0gLCAodW5zaWduZWQgY2hhcikgKCBfX2MgKSkgOiAodW5zaWdu
ZWQgY2hhcikgKCooICBfX3N0cmVhbSApLT5fSU9fd3JpdGVfcHRyKysgPSAoIF9fYyApKSkgOwp9
CgogCmlubGluZSAgaW50CnB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIHRocm93ICgpIAp7CiAg
cmV0dXJuICgoKCAgc3Rkb3V0ICApLT5fSU9fd3JpdGVfcHRyID49ICggIHN0ZG91dCAgKS0+X0lP
X3dyaXRlX2VuZCkgPyBfX292ZXJmbG93ICggIHN0ZG91dCAgLCAodW5zaWduZWQgY2hhcikgKCBf
X2MgKSkgOiAodW5zaWduZWQgY2hhcikgKCooICBzdGRvdXQgICktPl9JT193cml0ZV9wdHIrKyA9
ICggX19jICkpKSA7Cn0KCgoKCgoKCgoKCgoKCgogCmlubGluZSAgaW50CmZlb2ZfdW5sb2NrZWQg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSAKewogIHJldHVybiAoKCggX19zdHJlYW0gKS0+X2Zs
YWdzICYgMHgxMCApICE9IDApIDsKfQoKIAppbmxpbmUgIGludApmZXJyb3JfdW5sb2NrZWQgKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKSAKewogIHJldHVybiAoKCggX19zdHJlYW0gKS0+X2ZsYWdz
ICYgMHgyMCApICE9IDApIDsKfQoKCgoKCgogCgojIDE1MCAiL3Vzci9pbmNsdWRlL2JpdHMvc3Rk
aW8uaCIgMwoKCiMgMTY2ICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAzCgoKIAoKIyA2MzAg
Ii91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKfSAKCgoKCiMgMTcgIkFDRVBhcmFtcy5oIiAy
CgojIDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCgpleHRlcm4gIkMiIHsgCgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgi
IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKIAoKIyA4
MSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMwoKIyAzMyAiL3Vzci9pbmNsdWRlL21h
dGguaCIgMiAzCgoKIAoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDQxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgi
IDMKCiMgNDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCiAKZXh0ZXJuICAgZG91Ymxl
ICAgICAgICAgIGFjb3MgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRl
cm4gICBkb3VibGUgICAgICAgICBfX2Fjb3MgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJv
dyAoKSAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGFzaW4gICAgICAgICAgKGRvdWJs
ZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2FzaW4gICAg
ICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAg
ICAgICAgIGF0YW4gICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4g
ICBkb3VibGUgICAgICAgICBfX2F0YW4gICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAo
KSAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGF0YW4yICAgICAgICAgIChkb3VibGUg
IF9feSwgZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAg
IF9fYXRhbjIgICAgICAgICAgKGRvdWJsZSAgX195LCBkb3VibGUgIF9feCkgICAgdGhyb3cgKCkg
ICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgY29zICAgICAgICAgIChkb3VibGUgIF9f
eCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19jb3MgICAgICAgICAg
KGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg
IHNpbiAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJs
ZSAgICAgICAgIF9fc2luICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgICAgOwog
CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICB0YW4gICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0
aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3RhbiAgICAgICAgICAoZG91Ymxl
ICBfX3gpICAgIHRocm93ICgpICAgIDsKCgoKCgoKCiAKCiAKZXh0ZXJuICAgZG91YmxlICAgICAg
ICAgIGNvc2ggICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBk
b3VibGUgICAgICAgICBfX2Nvc2ggICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAg
ICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHNpbmggICAgICAgICAgKGRvdWJsZSAgX194
KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3NpbmggICAgICAgICAg
KGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg
IHRhbmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3Vi
bGUgICAgICAgICBfX3RhbmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7
CgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgYWNvc2ggICAgICAgICAgKGRvdWJsZSAgX194
KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2Fjb3NoICAgICAgICAg
IChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgICAgOwogCmV4dGVybiAgIGRvdWJsZSAgICAgICAg
ICBhc2luaCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRv
dWJsZSAgICAgICAgIF9fYXNpbmggICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAg
ICA7CiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGF0YW5oICAgICAgICAgIChkb3VibGUgIF9f
eCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19hdGFuaCAgICAgICAg
ICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKCgogCgogCmV4dGVybiAgIGRvdWJsZSAg
ICAgICAgICBleHAgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4g
ICBkb3VibGUgICAgICAgICBfX2V4cCAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgp
ICAgIDsKCgoKCgoKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBmcmV4cCAgICAgICAgICAo
ZG91YmxlICBfX3gsIGludCAqX19leHBvbmVudCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91
YmxlICAgICAgICAgX19mcmV4cCAgICAgICAgICAoZG91YmxlICBfX3gsIGludCAqX19leHBvbmVu
dCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgbGRleHAgICAg
ICAgICAgKGRvdWJsZSAgX194LCBpbnQgX19leHBvbmVudCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJu
ICAgZG91YmxlICAgICAgICAgX19sZGV4cCAgICAgICAgICAoZG91YmxlICBfX3gsIGludCBfX2V4
cG9uZW50KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBsb2cg
ICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAg
ICAgICBfX2xvZyAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKCiAKZXh0
ZXJuICAgZG91YmxlICAgICAgICAgIGxvZzEwICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhy
b3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19sb2cxMCAgICAgICAgICAoZG91Ymxl
ICBfX3gpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIG1vZGYg
ICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgICpfX2lwdHIpICAgIHRocm93ICgpICA7IGV4
dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbW9kZiAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJs
ZSAgKl9faXB0cikgICAgdGhyb3cgKCkgICAgOwoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg
IGV4cG0xICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91
YmxlICAgICAgICAgX19leHBtMSAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAg
IDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGxvZzFwICAgICAgICAgIChkb3VibGUgIF9f
eCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19sb2cxcCAgICAgICAg
ICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAg
ICAgIGxvZ2IgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBk
b3VibGUgICAgICAgICBfX2xvZ2IgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAg
ICA7CgoKCgoKCgoKCgoKIAoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgcG93ICAgICAgICAg
IChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJs
ZSAgICAgICAgIF9fcG93ICAgICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgIHRo
cm93ICgpICAgIDsKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHNxcnQgICAgICAgICAgKGRv
dWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3NxcnQg
ICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBkb3Vi
bGUgICAgICAgICAgaHlwb3QgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAg
dGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19oeXBvdCAgICAgICAgICAoZG91
YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICB0aHJvdyAoKSAgICA7CgoKCiAKZXh0ZXJuICAgZG91
YmxlICAgICAgICAgIGNicnQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBl
eHRlcm4gICBkb3VibGUgICAgICAgICBfX2NicnQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0
aHJvdyAoKSAgICA7CgoKCiAKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGNlaWwgICAgICAg
ICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBf
X2NlaWwgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAg
IGRvdWJsZSAgICAgICAgICBmYWJzICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkg
ICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7IGV4dGVybiAgIGRvdWJsZSAgICAg
ICAgIF9fZmFicyAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICAgX19hdHRyaWJ1
dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBm
bG9vciAgICAgICAgICAoZG91YmxlICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJs
ZSAgICAgICAgIF9fZmxvb3IgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7
CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBmbW9kICAgICAgICAgIChkb3VibGUgIF9feCwg
ZG91YmxlICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZm1v
ZCAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICB0aHJvdyAoKSAgICA7CgoK
IAoKZXh0ZXJuICBpbnQgICAgIF9faXNpbmYgICAgICAoZG91YmxlICBfX3ZhbHVlKSAgdGhyb3cg
KCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCmV4dGVybiAgaW50ICAgICBfX2Zp
bml0ZSAgICAgIChkb3VibGUgIF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgogCgpleHRlcm4gIGludCAgICAgaXNpbmYgICAgICAoZG91YmxlICBfX3Zh
bHVlKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCmV4dGVybiAg
aW50ICAgICBmaW5pdGUgICAgICAoZG91YmxlICBfX3ZhbHVlKSAgdGhyb3cgKCkgICBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBkcmVtICAg
ICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVybiAg
IGRvdWJsZSAgICAgICAgIF9fZHJlbSAgICAgICAgICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195
KSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBkb3VibGUgICAgICAgICAgc2lnbmlmaWNh
bmQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUg
ICAgICAgICBfX3NpZ25pZmljYW5kICAgICAgICAgIChkb3VibGUgIF9feCkgICAgdGhyb3cgKCkg
ICAgOwoKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBjb3B5c2lnbiAgICAgICAgICAoZG91
YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKCAgICAo
X19jb25zdF9fKSAgKTsgZXh0ZXJuICAgZG91YmxlICAgICAgICAgX19jb3B5c2lnbiAgICAgICAg
ICAoZG91YmxlICBfX3gsIGRvdWJsZSAgX195KSAgICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18g
KCAgICAoX19jb25zdF9fKSAgKSAgOwoKCgoKCgoKCiAKZXh0ZXJuICBpbnQgICAgIF9faXNuYW4g
ICAgICAoZG91YmxlICBfX3ZhbHVlKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKIApleHRlcm4gIGludCAgICAgaXNuYW4gICAgICAoZG91YmxlICBfX3ZhbHVlKSAg
dGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgogCmV4dGVybiAgIGRvdWJs
ZSAgICAgICAgICBqMCAgICAgICAgICAoZG91YmxlICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAg
ZG91YmxlICAgICAgICAgX19qMCAgICAgICAgICAoZG91YmxlICkgICAgdGhyb3cgKCkgICAgOwpl
eHRlcm4gICBkb3VibGUgICAgICAgICAgajEgICAgICAgICAgKGRvdWJsZSApICAgIHRocm93ICgp
ICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fajEgICAgICAgICAgKGRvdWJsZSApICAgIHRo
cm93ICgpICAgIDsKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIGpuICAgICAgICAgIChpbnQsIGRv
dWJsZSApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fam4gICAgICAg
ICAgKGludCwgZG91YmxlICkgICAgdGhyb3cgKCkgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAg
ICAgeTAgICAgICAgICAgKGRvdWJsZSApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRvdWJsZSAg
ICAgICAgIF9feTAgICAgICAgICAgKGRvdWJsZSApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAg
ZG91YmxlICAgICAgICAgIHkxICAgICAgICAgIChkb3VibGUgKSAgICB0aHJvdyAoKSAgOyBleHRl
cm4gICBkb3VibGUgICAgICAgICBfX3kxICAgICAgICAgIChkb3VibGUgKSAgICB0aHJvdyAoKSAg
ICA7CmV4dGVybiAgIGRvdWJsZSAgICAgICAgICB5biAgICAgICAgICAoaW50LCBkb3VibGUgKSAg
ICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX3luICAgICAgICAgIChpbnQs
IGRvdWJsZSApICAgIHRocm93ICgpICAgIDsKCgoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAg
IGVyZiAgICAgICAgICAoZG91YmxlICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAg
ICAgICAgX19lcmYgICAgICAgICAgKGRvdWJsZSApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAg
ZG91YmxlICAgICAgICAgIGVyZmMgICAgICAgICAgKGRvdWJsZSApICAgIHRocm93ICgpICA7IGV4
dGVybiAgIGRvdWJsZSAgICAgICAgIF9fZXJmYyAgICAgICAgICAoZG91YmxlICkgICAgdGhyb3cg
KCkgICAgOwpleHRlcm4gICBkb3VibGUgICAgICAgICAgbGdhbW1hICAgICAgICAgIChkb3VibGUg
KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAgICBfX2xnYW1tYSAgICAgICAg
ICAoZG91YmxlICkgICAgdGhyb3cgKCkgICAgOwoKCgoKCgoKIApleHRlcm4gICBkb3VibGUgICAg
ICAgICAgZ2FtbWEgICAgICAgICAgKGRvdWJsZSApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGRv
dWJsZSAgICAgICAgIF9fZ2FtbWEgICAgICAgICAgKGRvdWJsZSApICAgIHRocm93ICgpICAgIDsK
CgoKIAoKCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBsZ2FtbWFfciAgICAgICAgICAgICAgKGRv
dWJsZSAsIGludCAqX19zaWduZ2FtcCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91YmxlICAg
ICAgICAgX19sZ2FtbWFfciAgICAgICAgICAgICAgKGRvdWJsZSAsIGludCAqX19zaWduZ2FtcCkg
ICAgdGhyb3cgKCkgICAgOwoKCgoKIAoKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHJpbnQgICAg
ICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBkb3VibGUgICAgICAg
ICBfX3JpbnQgICAgICAgICAgKGRvdWJsZSAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVy
biAgIGRvdWJsZSAgICAgICAgICBuZXh0YWZ0ZXIgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3Vi
bGUgIF9feSkgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAgKF9fY29uc3RfXykgICk7
IGV4dGVybiAgIGRvdWJsZSAgICAgICAgIF9fbmV4dGFmdGVyICAgICAgICAgIChkb3VibGUgIF9f
eCwgZG91YmxlICBfX3kpICAgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0
X18pICApICA7CgoKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICByZW1haW5kZXIgICAgICAg
ICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9feSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZG91
YmxlICAgICAgICAgX19yZW1haW5kZXIgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9f
eSkgICAgdGhyb3cgKCkgICAgOwoKCiAKZXh0ZXJuICAgZG91YmxlICAgICAgICAgIHNjYWxiICAg
ICAgICAgIChkb3VibGUgIF9feCwgZG91YmxlICBfX24pICAgIHRocm93ICgpICA7IGV4dGVybiAg
IGRvdWJsZSAgICAgICAgIF9fc2NhbGIgICAgICAgICAgKGRvdWJsZSAgX194LCBkb3VibGUgIF9f
bikgICAgdGhyb3cgKCkgICAgOwoKCgogCmV4dGVybiAgIGRvdWJsZSAgICAgICAgICBzY2FsYm4g
ICAgICAgICAgKGRvdWJsZSAgX194LCBpbnQgX19uKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBk
b3VibGUgICAgICAgICBfX3NjYWxibiAgICAgICAgICAoZG91YmxlICBfX3gsIGludCBfX24pICAg
IHRocm93ICgpICAgIDsKCgogCmV4dGVybiAgIGludCAgICAgICAgaWxvZ2IgICAgICAgIChkb3Vi
bGUgIF9feCkgICB0aHJvdyAoKSAgOyBleHRlcm4gICBpbnQgICAgICAgIF9faWxvZ2IgICAgICAg
IChkb3VibGUgIF9feCkgICB0aHJvdyAoKSAgIDsKCgojIDMzMyAiL3Vzci9pbmNsdWRlL2JpdHMv
bWF0aGNhbGxzLmgiIDMKCiMgNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCgoKCgoKIAoK
CgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwogCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIApleHRlcm4g
ICBmbG9hdCAgICAgICAgICBhY29zZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkg
IDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2Fjb3NmICAgICAgICAgKGZsb2F0ICAgX194KSAg
ICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgYXNpbmYgICAgICAgICAo
ZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19hc2lu
ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwogCmV4dGVybiAgIGZsb2F0
ICAgICAgICAgIGF0YW5mICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRl
cm4gICBmbG9hdCAgICAgICAgIF9fYXRhbmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93
ICgpICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBhdGFuMmYgICAgICAgICAoZmxvYXQg
ICBfX3ksIGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAg
IF9fYXRhbjJmICAgICAgICAgKGZsb2F0ICAgX195LCBmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkg
ICAgOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBjb3NmICAgICAgICAgKGZsb2F0ICAgX194
KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fY29zZiAgICAgICAgIChm
bG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHNp
bmYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAg
ICAgICAgX19zaW5mICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0
ZXJuICAgZmxvYXQgICAgICAgICAgdGFuZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cg
KCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3RhbmYgICAgICAgICAoZmxvYXQgICBfX3gp
ICAgIHRocm93ICgpICAgIDsKCgoKCgoKCiAKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgY29z
aGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAg
ICAgICAgX19jb3NoZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwogCmV4
dGVybiAgIGZsb2F0ICAgICAgICAgIHNpbmhmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJv
dyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fc2luaGYgICAgICAgICAoZmxvYXQgICBf
X3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAgICAgICB0YW5oZiAgICAg
ICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBf
X3RhbmhmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4g
ICBmbG9hdCAgICAgICAgICBhY29zaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgp
ICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19hY29zaGYgICAgICAgICAoZmxvYXQgICBfX3gp
ICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBhc2luaGYgICAgICAg
ICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19h
c2luaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBm
bG9hdCAgICAgICAgICBhdGFuaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7
IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19hdGFuaGYgICAgICAgICAoZmxvYXQgICBfX3gpICAg
IHRocm93ICgpICAgIDsKCgogCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGV4cGYgICAgICAg
ICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19l
eHBmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgoKCgoKCgoKIApleHRl
cm4gICBmbG9hdCAgICAgICAgICBmcmV4cGYgICAgICAgICAoZmxvYXQgICBfX3gsIGludCAqX19l
eHBvbmVudCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2ZyZXhwZiAg
ICAgICAgIChmbG9hdCAgIF9feCwgaW50ICpfX2V4cG9uZW50KSAgICB0aHJvdyAoKSAgICA7Cgog
CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGxkZXhwZiAgICAgICAgIChmbG9hdCAgIF9feCwgaW50
IF9fZXhwb25lbnQpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19sZGV4
cGYgICAgICAgICAoZmxvYXQgICBfX3gsIGludCBfX2V4cG9uZW50KSAgICB0aHJvdyAoKSAgICA7
CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGxvZ2YgICAgICAgICAoZmxvYXQgICBfX3gpICAg
IHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19sb2dmICAgICAgICAgKGZsb2F0
ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGxvZzEw
ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAg
ICAgICBfX2xvZzEwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApl
eHRlcm4gICBmbG9hdCAgICAgICAgICBtb2RmZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQg
ICAqX19pcHRyKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fbW9kZmYg
ICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgKl9faXB0cikgICAgdGhyb3cgKCkgICAgOwoK
CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZXhwbTFmICAgICAgICAgKGZsb2F0ICAgX194KSAg
ICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZXhwbTFmICAgICAgICAgKGZs
b2F0ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGxv
ZzFwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQg
ICAgICAgICBfX2xvZzFwZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoK
IApleHRlcm4gICBmbG9hdCAgICAgICAgICBsb2diZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAg
dGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX2xvZ2JmICAgICAgICAgKGZsb2F0
ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgoKCgoKCgoKCgoKIAoKIApleHRlcm4gICBmbG9hdCAg
ICAgICAgICBwb3dmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgdGhyb3cg
KCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3Bvd2YgICAgICAgICAoZmxvYXQgICBfX3gs
IGZsb2F0ICAgX195KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAg
IHNxcnRmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9h
dCAgICAgICAgIF9fc3FydGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAgIDsK
CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGh5cG90ZiAgICAgICAgIChmbG9hdCAgIF9feCwg
ZmxvYXQgICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19oeXBv
dGYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICB0aHJvdyAoKSAgICA7CgoK
CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgY2JydGYgICAgICAgICAoZmxvYXQgICBfX3gpICAg
IHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19jYnJ0ZiAgICAgICAgIChmbG9h
dCAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKCgogCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAg
IGNlaWxmICAgICAgICAgKGZsb2F0ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9h
dCAgICAgICAgIF9fY2VpbGYgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAgIDsK
CiAKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZmFic2YgICAgICAgICAoZmxvYXQgICBfX3gpICAg
IHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBm
bG9hdCAgICAgICAgIF9fZmFic2YgICAgICAgICAoZmxvYXQgICBfX3gpICAgIHRocm93ICgpICAg
X19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgogCmV4dGVybiAgIGZsb2F0ICAg
ICAgICAgIGZsb29yZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJu
ICAgZmxvYXQgICAgICAgICBfX2Zsb29yZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cg
KCkgICAgOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBmbW9kZiAgICAgICAgIChmbG9hdCAg
IF9feCwgZmxvYXQgICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAg
X19mbW9kZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIHRocm93ICgpICAg
IDsKCgogCgpleHRlcm4gIGludCAgICBfX2lzaW5mZiAgICAgKGZsb2F0ICAgX192YWx1ZSkgIHRo
cm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4gIGludCAgICBf
X2Zpbml0ZWYgICAgIChmbG9hdCAgIF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgogCgpleHRlcm4gIGludCAgICBpc2luZmYgICAgIChmbG9hdCAgIF9f
dmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJu
ICBpbnQgICAgZmluaXRlZiAgICAgKGZsb2F0ICAgX192YWx1ZSkgIHRocm93ICgpICAgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBkcmVtZiAg
ICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVybiAg
IGZsb2F0ICAgICAgICAgX19kcmVtZiAgICAgICAgIChmbG9hdCAgIF9feCwgZmxvYXQgICBfX3kp
ICAgIHRocm93ICgpICAgIDsKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHNpZ25pZmljYW5k
ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAg
ICAgICBfX3NpZ25pZmljYW5kZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkgICAg
OwoKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGNvcHlzaWduZiAgICAgICAgIChmbG9hdCAg
IF9feCwgZmxvYXQgICBfX3kpICAgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2Nv
bnN0X18pICApOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fY29weXNpZ25mICAgICAgICAgKGZs
b2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAg
KF9fY29uc3RfXykgICkgIDsKCgoKCgoKCgogCmV4dGVybiAgaW50ICAgIF9faXNuYW5mICAgICAo
ZmxvYXQgICBfX3ZhbHVlKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKIApleHRlcm4gIGludCAgICBpc25hbmYgICAgIChmbG9hdCAgIF9fdmFsdWUpICB0aHJvdyAo
KSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuICAgZmxvYXQgICAgICAg
ICAgajBmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAg
ICAgICAgX19qMGYgICAgICAgICAoZmxvYXQgICkgICAgdGhyb3cgKCkgICAgOwpleHRlcm4gICBm
bG9hdCAgICAgICAgICBqMWYgICAgICAgICAoZmxvYXQgICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJu
ICAgZmxvYXQgICAgICAgICBfX2oxZiAgICAgICAgIChmbG9hdCAgKSAgICB0aHJvdyAoKSAgICA7
CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGpuZiAgICAgICAgIChpbnQsIGZsb2F0ICApICAgIHRo
cm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19qbmYgICAgICAgICAoaW50LCBmbG9h
dCAgKSAgICB0aHJvdyAoKSAgICA7CmV4dGVybiAgIGZsb2F0ICAgICAgICAgIHkwZiAgICAgICAg
IChmbG9hdCAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9feTBmICAg
ICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAg
eTFmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAg
ICAgX195MWYgICAgICAgICAoZmxvYXQgICkgICAgdGhyb3cgKCkgICAgOwpleHRlcm4gICBmbG9h
dCAgICAgICAgICB5bmYgICAgICAgICAoaW50LCBmbG9hdCAgKSAgICB0aHJvdyAoKSAgOyBleHRl
cm4gICBmbG9hdCAgICAgICAgIF9feW5mICAgICAgICAgKGludCwgZmxvYXQgICkgICAgdGhyb3cg
KCkgICAgOwoKCgoKIApleHRlcm4gICBmbG9hdCAgICAgICAgICBlcmZmICAgICAgICAgKGZsb2F0
ICApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19lcmZmICAgICAgICAg
KGZsb2F0ICApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgZmxvYXQgICAgICAgICAgZXJmY2Yg
ICAgICAgICAoZmxvYXQgICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBf
X2VyZmNmICAgICAgICAgKGZsb2F0ICApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgZmxvYXQg
ICAgICAgICAgbGdhbW1hZiAgICAgICAgIChmbG9hdCAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4g
ICBmbG9hdCAgICAgICAgIF9fbGdhbW1hZiAgICAgICAgIChmbG9hdCAgKSAgICB0aHJvdyAoKSAg
ICA7CgoKCgoKCgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIGdhbW1hZiAgICAgICAgIChmbG9h
dCAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fZ2FtbWFmICAgICAg
ICAgKGZsb2F0ICApICAgIHRocm93ICgpICAgIDsKCgoKIAoKCmV4dGVybiAgIGZsb2F0ICAgICAg
ICAgIGxnYW1tYWZfciAgICAgICAgICAgIChmbG9hdCAgLCBpbnQgKl9fc2lnbmdhbXApICAgIHRo
cm93ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19sZ2FtbWFmX3IgICAgICAgICAgICAo
ZmxvYXQgICwgaW50ICpfX3NpZ25nYW1wKSAgICB0aHJvdyAoKSAgICA7CgoKCgogCgpleHRlcm4g
ICBmbG9hdCAgICAgICAgICByaW50ZiAgICAgICAgIChmbG9hdCAgIF9feCkgICAgdGhyb3cgKCkg
IDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3JpbnRmICAgICAgICAgKGZsb2F0ICAgX194KSAg
ICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGZsb2F0ICAgICAgICAgIG5leHRhZnRlcmYgICAg
ICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICB0aHJvdyAoKSAgIF9fYXR0cmlidXRl
X18gKCAgICAoX19jb25zdF9fKSAgKTsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX25leHRhZnRl
cmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX195KSAgICB0aHJvdyAoKSAgIF9fYXR0
cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoKCgoKIApleHRlcm4gICBmbG9hdCAgICAg
ICAgICByZW1haW5kZXJmICAgICAgICAgKGZsb2F0ICAgX194LCBmbG9hdCAgIF9feSkgICAgdGhy
b3cgKCkgIDsgZXh0ZXJuICAgZmxvYXQgICAgICAgICBfX3JlbWFpbmRlcmYgICAgICAgICAoZmxv
YXQgICBfX3gsIGZsb2F0ICAgX195KSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBmbG9h
dCAgICAgICAgICBzY2FsYmYgICAgICAgICAoZmxvYXQgICBfX3gsIGZsb2F0ICAgX19uKSAgICB0
aHJvdyAoKSAgOyBleHRlcm4gICBmbG9hdCAgICAgICAgIF9fc2NhbGJmICAgICAgICAgKGZsb2F0
ICAgX194LCBmbG9hdCAgIF9fbikgICAgdGhyb3cgKCkgICAgOwoKCgogCmV4dGVybiAgIGZsb2F0
ICAgICAgICAgIHNjYWxibmYgICAgICAgICAoZmxvYXQgICBfX3gsIGludCBfX24pICAgIHRocm93
ICgpICA7IGV4dGVybiAgIGZsb2F0ICAgICAgICAgX19zY2FsYm5mICAgICAgICAgKGZsb2F0ICAg
X194LCBpbnQgX19uKSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBpbnQgICAgICAgaWxv
Z2JmICAgICAgIChmbG9hdCAgIF9feCkgICB0aHJvdyAoKSAgOyBleHRlcm4gICBpbnQgICAgICAg
X19pbG9nYmYgICAgICAgKGZsb2F0ICAgX194KSAgIHRocm93ICgpICAgOwoKCiMgMzMzICIvdXNy
L2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwoKIyA4MiAiL3Vzci9pbmNsdWRlL21hdGguaCIg
MiAzCgoKCgoKIAoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgi
IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBhY29zbCAgICAgICAgIChsb25nIGRv
dWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBf
X2Fjb3NsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0
ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgYXNpbmwgICAgICAgICAobG9uZyBkb3VibGUgICBf
X3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19hc2lubCAg
ICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwogCmV4dGVybiAgIGxv
bmcgZG91YmxlICAgICAgICAgIGF0YW5sICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0
aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fYXRhbmwgICAgICAgICAo
bG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBsb25nIGRvdWJs
ZSAgICAgICAgICBhdGFuMmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3ksIGxvbmcgZG91Ymxl
ICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fYXRh
bjJsICAgICAgICAgKGxvbmcgZG91YmxlICAgX195LCBsb25nIGRvdWJsZSAgIF9feCkgICAgdGhy
b3cgKCkgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBjb3NsICAgICAgICAg
KGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAg
ICAgICAgIF9fY29zbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAg
OwogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHNpbmwgICAgICAgICAobG9uZyBkb3Vi
bGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19z
aW5sICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7CiAKZXh0ZXJu
ICAgbG9uZyBkb3VibGUgICAgICAgICAgdGFubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkg
ICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3RhbmwgICAgICAg
ICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKCgoKCgoKCiAKCiAKZXh0ZXJu
ICAgbG9uZyBkb3VibGUgICAgICAgICAgY29zaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gp
ICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19jb3NobCAgICAg
ICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwogCmV4dGVybiAgIGxvbmcg
ZG91YmxlICAgICAgICAgIHNpbmhsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJv
dyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fc2luaGwgICAgICAgICAobG9u
ZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBsb25nIGRvdWJsZSAg
ICAgICAgICB0YW5obCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsg
ZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3RhbmhsICAgICAgICAgKGxvbmcgZG91Ymxl
ICAgX194KSAgICB0aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAg
ICBhY29zaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVy
biAgIGxvbmcgZG91YmxlICAgICAgICAgX19hY29zaGwgICAgICAgICAobG9uZyBkb3VibGUgICBf
X3gpICAgIHRocm93ICgpICAgIDsKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBhc2lu
aGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxv
bmcgZG91YmxlICAgICAgICAgX19hc2luaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAg
IHRocm93ICgpICAgIDsKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBhdGFuaGwgICAg
ICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91
YmxlICAgICAgICAgX19hdGFuaGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93
ICgpICAgIDsKCgogCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGV4cGwgICAgICAg
ICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91Ymxl
ICAgICAgICAgX19leHBsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAg
ICA7CgoKCgoKCgoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBmcmV4cGwgICAgICAg
ICAobG9uZyBkb3VibGUgICBfX3gsIGludCAqX19leHBvbmVudCkgICAgdGhyb3cgKCkgIDsgZXh0
ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2ZyZXhwbCAgICAgICAgIChsb25nIGRvdWJsZSAg
IF9feCwgaW50ICpfX2V4cG9uZW50KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGxvbmcg
ZG91YmxlICAgICAgICAgIGxkZXhwbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgaW50IF9f
ZXhwb25lbnQpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19s
ZGV4cGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGludCBfX2V4cG9uZW50KSAgICB0aHJv
dyAoKSAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGxvZ2wgICAgICAgICAo
bG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAg
ICAgICAgX19sb2dsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7
CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGxvZzEwbCAgICAgICAgIChsb25nIGRv
dWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBf
X2xvZzEwbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApl
eHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBtb2RmbCAgICAgICAgIChsb25nIGRvdWJsZSAg
IF9feCwgbG9uZyBkb3VibGUgICAqX19pcHRyKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25n
IGRvdWJsZSAgICAgICAgIF9fbW9kZmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcg
ZG91YmxlICAgKl9faXB0cikgICAgdGhyb3cgKCkgICAgOwoKCiAKZXh0ZXJuICAgbG9uZyBkb3Vi
bGUgICAgICAgICAgZXhwbTFsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAo
KSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fZXhwbTFsICAgICAgICAgKGxvbmcg
ZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAg
ICAgICAgIGxvZzFwbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsg
ZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2xvZzFwbCAgICAgICAgIChsb25nIGRvdWJs
ZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAg
ICBsb2dibCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJu
ICAgbG9uZyBkb3VibGUgICAgICAgICBfX2xvZ2JsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194
KSAgICB0aHJvdyAoKSAgICA7CgoKCgoKCgoKCgoKIAoKIApleHRlcm4gICBsb25nIGRvdWJsZSAg
ICAgICAgICBwb3dsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194LCBsb25nIGRvdWJsZSAgIF9f
eSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3Bvd2wgICAg
ICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICB0aHJvdyAoKSAg
ICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHNxcnRsICAgICAgICAgKGxvbmcg
ZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAg
IF9fc3FydGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgIDsKCgog
CmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGh5cG90bCAgICAgICAgIChsb25nIGRvdWJs
ZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcg
ZG91YmxlICAgICAgICAgX19oeXBvdGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcg
ZG91YmxlICAgX195KSAgICB0aHJvdyAoKSAgICA7CgoKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUg
ICAgICAgICAgY2JydGwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICA7
IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19jYnJ0bCAgICAgICAgIChsb25nIGRvdWJs
ZSAgIF9feCkgICAgdGhyb3cgKCkgICAgOwoKCgogCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAg
ICAgICAgIGNlaWxsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgOyBl
eHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fY2VpbGwgICAgICAgICAobG9uZyBkb3VibGUg
ICBfX3gpICAgIHRocm93ICgpICAgIDsKCiAKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAg
ZmFic2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgX19hdHRyaWJ1
dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9f
ZmFic2wgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gpICAgIHRocm93ICgpICAgX19hdHRyaWJ1
dGVfXyAoICAgIChfX2NvbnN0X18pICApICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAg
ICAgIGZsb29ybCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0
ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2Zsb29ybCAgICAgICAgIChsb25nIGRvdWJsZSAg
IF9feCkgICAgdGhyb3cgKCkgICAgOwoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBm
bW9kbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgIHRo
cm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19mbW9kbCAgICAgICAgIChs
b25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAgIHRocm93ICgpICAgIDsKCgog
CgpleHRlcm4gIGludCAgICBfX2lzaW5mbCAgICAgKGxvbmcgZG91YmxlICAgX192YWx1ZSkgIHRo
cm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4gIGludCAgICBf
X2Zpbml0ZWwgICAgIChsb25nIGRvdWJsZSAgIF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgogCgpleHRlcm4gIGludCAgICBpc2luZmwgICAgIChsb25n
IGRvdWJsZSAgIF9fdmFsdWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCiAKZXh0ZXJuICBpbnQgICAgZmluaXRlbCAgICAgKGxvbmcgZG91YmxlICAgX192YWx1ZSkg
IHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIApleHRlcm4gICBsb25n
IGRvdWJsZSAgICAgICAgICBkcmVtbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBk
b3VibGUgICBfX3kpICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAg
X19kcmVtbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kpICAg
IHRocm93ICgpICAgIDsKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIHNpZ25pZmlj
YW5kbCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAg
bG9uZyBkb3VibGUgICAgICAgICBfX3NpZ25pZmljYW5kbCAgICAgICAgIChsb25nIGRvdWJsZSAg
IF9feCkgICAgdGhyb3cgKCkgICAgOwoKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAg
IGNvcHlzaWdubCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCwgbG9uZyBkb3VibGUgICBfX3kp
ICAgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoICAgIChfX2NvbnN0X18pICApOyBleHRlcm4g
ICBsb25nIGRvdWJsZSAgICAgICAgIF9fY29weXNpZ25sICAgICAgICAgKGxvbmcgZG91YmxlICAg
X194LCBsb25nIGRvdWJsZSAgIF9feSkgICAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICggICAg
KF9fY29uc3RfXykgICkgIDsKCgoKCgoKCgogCmV4dGVybiAgaW50ICAgIF9faXNuYW5sICAgICAo
bG9uZyBkb3VibGUgICBfX3ZhbHVlKSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKIApleHRlcm4gIGludCAgICBpc25hbmwgICAgIChsb25nIGRvdWJsZSAgIF9fdmFs
dWUpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiAKZXh0ZXJuICAg
bG9uZyBkb3VibGUgICAgICAgICAgajBsICAgICAgICAgKGxvbmcgZG91YmxlICApICAgIHRocm93
ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19qMGwgICAgICAgICAobG9uZyBk
b3VibGUgICkgICAgdGhyb3cgKCkgICAgOwpleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBq
MWwgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBk
b3VibGUgICAgICAgICBfX2oxbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAg
ICA7CmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGpubCAgICAgICAgIChpbnQsIGxvbmcg
ZG91YmxlICApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19q
bmwgICAgICAgICAoaW50LCBsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgICA7CmV4dGVybiAg
IGxvbmcgZG91YmxlICAgICAgICAgIHkwbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICB0aHJv
dyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9feTBsICAgICAgICAgKGxvbmcg
ZG91YmxlICApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAg
eTFsICAgICAgICAgKGxvbmcgZG91YmxlICApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcg
ZG91YmxlICAgICAgICAgX195MWwgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgdGhyb3cgKCkg
ICAgOwpleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICB5bmwgICAgICAgICAoaW50LCBsb25n
IGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9f
eW5sICAgICAgICAgKGludCwgbG9uZyBkb3VibGUgICkgICAgdGhyb3cgKCkgICAgOwoKCgoKIApl
eHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBlcmZsICAgICAgICAgKGxvbmcgZG91YmxlICAp
ICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgX19lcmZsICAgICAg
ICAgKGxvbmcgZG91YmxlICApICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgbG9uZyBkb3VibGUg
ICAgICAgICAgZXJmY2wgICAgICAgICAobG9uZyBkb3VibGUgICkgICAgdGhyb3cgKCkgIDsgZXh0
ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX2VyZmNsICAgICAgICAgKGxvbmcgZG91YmxlICAp
ICAgIHRocm93ICgpICAgIDsKZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICAgbGdhbW1hbCAg
ICAgICAgIChsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJs
ZSAgICAgICAgIF9fbGdhbW1hbCAgICAgICAgIChsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAg
ICA7CgoKCgoKCgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGdhbW1hbCAgICAgICAg
IChsb25nIGRvdWJsZSAgKSAgICB0aHJvdyAoKSAgOyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAg
ICAgIF9fZ2FtbWFsICAgICAgICAgKGxvbmcgZG91YmxlICApICAgIHRocm93ICgpICAgIDsKCgoK
IAoKCmV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAgIGxnYW1tYWxfciAgICAgICAgICAgIChs
b25nIGRvdWJsZSAgLCBpbnQgKl9fc2lnbmdhbXApICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxv
bmcgZG91YmxlICAgICAgICAgX19sZ2FtbWFsX3IgICAgICAgICAgICAobG9uZyBkb3VibGUgICwg
aW50ICpfX3NpZ25nYW1wKSAgICB0aHJvdyAoKSAgICA7CgoKCgogCgpleHRlcm4gICBsb25nIGRv
dWJsZSAgICAgICAgICByaW50bCAgICAgICAgIChsb25nIGRvdWJsZSAgIF9feCkgICAgdGhyb3cg
KCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3JpbnRsICAgICAgICAgKGxvbmcg
ZG91YmxlICAgX194KSAgICB0aHJvdyAoKSAgICA7CgogCmV4dGVybiAgIGxvbmcgZG91YmxlICAg
ICAgICAgIG5leHRhZnRlcmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91Ymxl
ICAgX195KSAgICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKCAgICAoX19jb25zdF9fKSAgKTsg
ZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX25leHRhZnRlcmwgICAgICAgICAobG9uZyBk
b3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICB0aHJvdyAoKSAgIF9fYXR0cmlidXRl
X18gKCAgICAoX19jb25zdF9fKSAgKSAgOwoKCgoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAg
ICAgICByZW1haW5kZXJsICAgICAgICAgKGxvbmcgZG91YmxlICAgX194LCBsb25nIGRvdWJsZSAg
IF9feSkgICAgdGhyb3cgKCkgIDsgZXh0ZXJuICAgbG9uZyBkb3VibGUgICAgICAgICBfX3JlbWFp
bmRlcmwgICAgICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX195KSAgICB0
aHJvdyAoKSAgICA7CgoKIApleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgICBzY2FsYmwgICAg
ICAgICAobG9uZyBkb3VibGUgICBfX3gsIGxvbmcgZG91YmxlICAgX19uKSAgICB0aHJvdyAoKSAg
OyBleHRlcm4gICBsb25nIGRvdWJsZSAgICAgICAgIF9fc2NhbGJsICAgICAgICAgKGxvbmcgZG91
YmxlICAgX194LCBsb25nIGRvdWJsZSAgIF9fbikgICAgdGhyb3cgKCkgICAgOwoKCgogCmV4dGVy
biAgIGxvbmcgZG91YmxlICAgICAgICAgIHNjYWxibmwgICAgICAgICAobG9uZyBkb3VibGUgICBf
X3gsIGludCBfX24pICAgIHRocm93ICgpICA7IGV4dGVybiAgIGxvbmcgZG91YmxlICAgICAgICAg
X19zY2FsYm5sICAgICAgICAgKGxvbmcgZG91YmxlICAgX194LCBpbnQgX19uKSAgICB0aHJvdyAo
KSAgICA7CgoKIApleHRlcm4gICBpbnQgICAgICAgaWxvZ2JsICAgICAgIChsb25nIGRvdWJsZSAg
IF9feCkgICB0aHJvdyAoKSAgOyBleHRlcm4gICBpbnQgICAgICAgX19pbG9nYmwgICAgICAgKGxv
bmcgZG91YmxlICAgX194KSAgIHRocm93ICgpICAgOwoKCiMgMzMzICIvdXNyL2luY2x1ZGUvYml0
cy9tYXRoY2FsbHMuaCIgMwoKIyA5OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCgoKCgoK
CgoKCgogCmV4dGVybiBpbnQgc2lnbmdhbTsKCgoKIAojIDIzNiAiL3Vzci9pbmNsdWRlL21hdGgu
aCIgMwoKCgogCnR5cGVkZWYgZW51bQp7CiAgX0lFRUVfID0gLTEsCSAKICBfU1ZJRF8sCSAKICBf
WE9QRU5fLAkgCiAgX1BPU0lYXywKICBfSVNPQ18JIAp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKIAoK
CmV4dGVybiBfTElCX1ZFUlNJT05fVFlQRSBfTElCX1ZFUlNJT047CgoKCgogCgoKCgoKc3RydWN0
IF9fZXhjZXB0aW9uCgoKCiAgewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91
YmxlIGFyZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgpleHRl
cm4gaW50IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93ICgpOwoKCgoK
CgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCiAKCgojIDMzOCAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMwoKCgogCgoKCgoKCiAKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
bWF0aGlubGluZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDE0NiAi
L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIyAyNTIgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKX19pbmxpbmUgICBkb3VibGUg
ICAgIF9fc2duICAgKCBkb3VibGUgKSB0aHJvdyAoKSA7CV9faW5saW5lICAgIGRvdWJsZSAgICAg
ICAgX19zZ24gICAgKCAgZG91YmxlICAgICAgICAgX194ICAgKSB0aHJvdyAoKSAJewkgICAgICAg
IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjApICAgOwl9
ICAJX19pbmxpbmUgICBmbG9hdCAgICAgIF9fc2duZiAgICAoIGZsb2F0ICkgdGhyb3cgKCkgOwlf
X2lubGluZSAgICBmbG9hdCAgICAgICAgIF9fc2duZiAgICAgKCAgZmxvYXQgICAgICAgICBfX3gg
ICApIHRocm93ICgpIAl7CSAgICAgICAgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4g
MC4wID8gMS4wIDogLTEuMCkgICA7CX0gIAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgX19z
Z25sICAgICggbG9uZyBkb3VibGUgKSB0aHJvdyAoKSA7CV9faW5saW5lICAgIGxvbmcgZG91Ymxl
ICAgICAgICAgX19zZ25sICAgICAoICBsb25nIGRvdWJsZSAgICAgICAgIF9feCAgICkgdGhyb3cg
KCkgCXsJICAgICAgICByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAg
OiAtMS4wKSAgIDsJfSAgIAoKCiAKIyA0MTYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUu
aCIgMwoKCgoKCgoKCgpfX2lubGluZSAgIGRvdWJsZSAgICAgYXRhbjIgICAoIGRvdWJsZSAgICAg
IF9feSAgLCAgZG91YmxlICAgICAgX194ICApIHRocm93ICgpICB7CSAgICByZWdpc3RlciBsb25n
IGRvdWJsZSBfX3ZhbHVlOwlfX2FzbSBfX3ZvbGF0aWxlX18JKCJmcGF0YW4iCTogIj10IiAoX192
YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOwlyZXR1cm4gX192YWx1ZSAg
IDsJfSAJX19pbmxpbmUgICBmbG9hdCAgICAgIGF0YW4yZiAgICAoIGZsb2F0ICAgICAgX195ICAs
ICBmbG9hdCAgICAgIF9feCAgKSB0aHJvdyAoKSAgewkgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X192YWx1ZTsJX19hc20gX192b2xhdGlsZV9fCSgiZnBhdGFuIgk6ICI9dCIgKF9fdmFsdWUpIDog
IjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsJcmV0dXJuIF9fdmFsdWUgICA7CX0gCV9f
aW5saW5lICAgbG9uZyBkb3VibGUgICAgICBhdGFuMmwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9f
eSAgLCAgbG9uZyBkb3VibGUgICAgICBfX3ggICkgdGhyb3cgKCkgIHsJICAgIHJlZ2lzdGVyIGxv
bmcgZG91YmxlIF9fdmFsdWU7CV9fYXNtIF9fdm9sYXRpbGVfXwkoImZwYXRhbiIJOiAiPXQiIChf
X3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7CXJldHVybiBfX3ZhbHVl
ICAgOwl9ICAKX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICBfX2F0YW4ybCAgKCBsb25nIGRvdWJs
ZSAgICBfX3kgLCAgbG9uZyBkb3VibGUgICAgX194ICkgdGhyb3cgKCkgIHsJICByZWdpc3RlciBs
b25nIGRvdWJsZSBfX3ZhbHVlOwlfX2FzbSBfX3ZvbGF0aWxlX18JKCJmcGF0YW4iCTogIj10IiAo
X192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOwlyZXR1cm4gX192YWx1
ZSAgOwl9IAoKCl9faW5saW5lICAgZG91YmxlICAgICBmbW9kICAgKCBkb3VibGUgICAgICBfX3gg
ICwgIGRvdWJsZSAgICAgIF9feSAgKSB0aHJvdyAoKSAgewkgICAgICByZWdpc3RlciBsb25nIGRv
dWJsZSBfX3ZhbHVlOwkJCQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZV9fCQkJCQkJCSAgICAg
ICAgICAoIjE6CWZwcmVtXG5cdCIJCQkJCQkgICAgICAgICAgICJmbnN0c3cJJSVheFxuXHQiCQkJ
CQkJICAgICAgICAgICAic2FoZlxuXHQiCQkJCQkJCQkgICAgICAgICAgICJqcAkxYiIJCQkJCQkJ
ICAgICAgICAgICA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgi
LCAiY2MiKTsJCSAgICAgICAgcmV0dXJuIF9fdmFsdWUgIDsJfSAJX19pbmxpbmUgICBmbG9hdCAg
ICAgIGZtb2RmICAgICggZmxvYXQgICAgICBfX3ggICwgIGZsb2F0ICAgICAgX195ICApIHRocm93
ICgpICB7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CQkJCQkJICAgICAgICBf
X2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgiMToJZnByZW1cblx0IgkJCQkJCSAg
ICAgICAgICAgImZuc3RzdwklJWF4XG5cdCIJCQkJCQkgICAgICAgICAgICJzYWhmXG5cdCIJCQkJ
CQkJCSAgICAgICAgICAgImpwCTFiIgkJCQkJCQkgICAgICAgICAgIDogIj10IiAoX192YWx1ZSkg
OiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOwkJICAgICAgICByZXR1cm4gX192
YWx1ZSAgOwl9IAlfX2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgZm1vZGwgICAgKCBsb25nIGRv
dWJsZSAgICAgIF9feCAgLCAgbG9uZyBkb3VibGUgICAgICBfX3kgICkgdGhyb3cgKCkgIHsJICAg
ICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAgIF9fYXNtIF9fdm9s
YXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCIxOglmcHJlbVxuXHQiCQkJCQkJICAgICAgICAgICAi
Zm5zdHN3CSUlYXhcblx0IgkJCQkJCSAgICAgICAgICAgInNhaGZcblx0IgkJCQkJCQkJICAgICAg
ICAgICAianAJMWIiCQkJCQkJCSAgICAgICAgICAgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194
KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7CQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7CX0g
IAojIDQzOCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCgoKX19pbmxpbmUgICAg
ZG91YmxlICAgICAgICBzcXJ0ICAgICggIGRvdWJsZSAgIF9feCkgdGhyb3cgKCkgCXsJcmVnaXN0
ZXIgICBkb3VibGUgICBfX3Jlc3VsdDsJX19hc20gX192b2xhdGlsZV9fICggICAgICAiZnNxcnQi
ICAgIDogIj10IiAoX19yZXN1bHQpIDogICAiMCIgKF9feCkgKTsJcmV0dXJuIF9fcmVzdWx0Owl9
ICAJX19pbmxpbmUgICAgZmxvYXQgICAgICAgICBzcXJ0ZiAgICAgKCAgZmxvYXQgICBfX3gpIHRo
cm93ICgpIAl7CXJlZ2lzdGVyICAgZmxvYXQgICBfX3Jlc3VsdDsJX19hc20gX192b2xhdGlsZV9f
ICggICAgICAiZnNxcnQiICAgIDogIj10IiAoX19yZXN1bHQpIDogICAiMCIgKF9feCkgKTsJcmV0
dXJuIF9fcmVzdWx0Owl9ICAJX19pbmxpbmUgICAgbG9uZyBkb3VibGUgICAgICAgICBzcXJ0bCAg
ICAgKCAgbG9uZyBkb3VibGUgICBfX3gpIHRocm93ICgpIAl7CXJlZ2lzdGVyICAgbG9uZyBkb3Vi
bGUgICBfX3Jlc3VsdDsJX19hc20gX192b2xhdGlsZV9fICggICAgICAiZnNxcnQiICAgIDogIj10
IiAoX19yZXN1bHQpIDogICAiMCIgKF9feCkgKTsJcmV0dXJuIF9fcmVzdWx0Owl9ICAgCl9faW5s
aW5lICAgIGxvbmcgZG91YmxlICAgICAgIF9fc3FydGwgICAoICBsb25nIGRvdWJsZSAgIF9feCkg
dGhyb3cgKCkgCXsJcmVnaXN0ZXIgICBsb25nIGRvdWJsZSAgIF9fcmVzdWx0OwlfX2FzbSBfX3Zv
bGF0aWxlX18gKCAgICAiZnNxcnQiICAgOiAiPXQiIChfX3Jlc3VsdCkgOiAgICIwIiAoX194KSAp
OwlyZXR1cm4gX19yZXN1bHQ7CX0gIAoKCl9faW5saW5lICAgZG91YmxlICAgIGZhYnMgICggZG91
YmxlICAgIF9feCApIHRocm93ICgpIAl7CSAgcmV0dXJuIF9fYnVpbHRpbl9mYWJzIChfX3gpIDsJ
fSAKX19pbmxpbmUgICBmbG9hdCAgICBmYWJzZiAgKCBmbG9hdCAgICBfX3ggKSB0aHJvdyAoKSAJ
ewkgIHJldHVybiBfX2J1aWx0aW5fZmFic2YgKF9feCkgOwl9IApfX2lubGluZSAgIGxvbmcgZG91
YmxlICAgIGZhYnNsICAoIGxvbmcgZG91YmxlICAgIF9feCApIHRocm93ICgpIAl7CSAgcmV0dXJu
IF9fYnVpbHRpbl9mYWJzbCAoX194KSA7CX0gCl9faW5saW5lICAgbG9uZyBkb3VibGUgICAgX19m
YWJzbCAgKCBsb25nIGRvdWJsZSAgICBfX3ggKSB0aHJvdyAoKSAJewkgIHJldHVybiBfX2J1aWx0
aW5fZmFic2wgKF9feCkgOwl9IAoKCgoKCiMgNDY0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s
aW5lLmgiIDMKCgpfX2lubGluZSAgIGRvdWJsZSAgICAgYXRhbiAgICggZG91YmxlICBfX3gpIHRo
cm93ICgpIAl7CXJlZ2lzdGVyICBkb3VibGUgIF9fcmVzdWx0OwlfX2FzbSBfX3ZvbGF0aWxlX18g
KCAgICAiZmxkMTsgZnBhdGFuIiAgIDogIj10IiAoX19yZXN1bHQpIDogICAgICIwIiAoX194KSA6
ICJzdCgxKSIgICk7CXJldHVybiBfX3Jlc3VsdDsJfSAJX19pbmxpbmUgICBmbG9hdCAgICAgIGF0
YW5mICAgICggZmxvYXQgIF9feCkgdGhyb3cgKCkgCXsJcmVnaXN0ZXIgIGZsb2F0ICBfX3Jlc3Vs
dDsJX19hc20gX192b2xhdGlsZV9fICggICAgImZsZDE7IGZwYXRhbiIgICA6ICI9dCIgKF9fcmVz
dWx0KSA6ICAgICAiMCIgKF9feCkgOiAic3QoMSkiICApOwlyZXR1cm4gX19yZXN1bHQ7CX0gCV9f
aW5saW5lICAgbG9uZyBkb3VibGUgICAgICBhdGFubCAgICAoIGxvbmcgZG91YmxlICBfX3gpIHRo
cm93ICgpIAl7CXJlZ2lzdGVyICBsb25nIGRvdWJsZSAgX19yZXN1bHQ7CV9fYXNtIF9fdm9sYXRp
bGVfXyAoICAgICJmbGQxOyBmcGF0YW4iICAgOiAiPXQiIChfX3Jlc3VsdCkgOiAgICAgIjAiIChf
X3gpIDogInN0KDEpIiAgKTsJcmV0dXJuIF9fcmVzdWx0Owl9ICAKCl9faW5saW5lICAgbG9uZyBk
b3VibGUgICAgX19zZ24xbCAgKCBsb25nIGRvdWJsZSApIHRocm93ICgpIDsJX19pbmxpbmUgICAg
bG9uZyBkb3VibGUgICAgICAgX19zZ24xbCAgICggIGxvbmcgZG91YmxlICAgICAgIF9feCAgKSB0
aHJvdyAoKSAJewkgICAgICBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgbG9uZyBkb3VibGUgX194bGQ7
IHVuc2lnbmVkIGludCBfX3hpWzNdOyB9IF9fbiA9ICAgICAgICAgIHsgX194bGQ6IF9feCB9OwkJ
CQkJCQkgICAgICAgIF9fbi5fX3hpWzJdID0gKF9fbi5fX3hpWzJdICYgMHg4MDAwKSB8IDB4M2Zm
ZjsJCQkgICAgICAgIF9fbi5fX3hpWzFdID0gMHg4MDAwMDAwMDsJCQkJCQkgICAgICAgIF9fbi5f
X3hpWzBdID0gMDsJCQkJCQkJICAgICAgICByZXR1cm4gX19uLl9feGxkICA7CX0gIAoKCgoKCgoK
CiMgNDkwICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKCgpfX2lubGluZSAgIGRv
dWJsZSAgICAgZmxvb3IgICAoIGRvdWJsZSAgICAgIF9feCAgKSB0aHJvdyAoKSAJewkgICAgICBy
ZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJCSAgICAgICAgX192b2xhdGlsZSB1bnNp
Z25lZCBzaG9ydCBpbnQgX19jdzsJCQkJCSAgICAgICAgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9y
dCBpbnQgX19jd3RtcDsJCQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6
ICI9bSIgKF9fY3cpKTsJCQkJICAgICAgICBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgw
NDAwOyAgCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j
d3RtcCkpOwkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192
YWx1ZSkgOiAiMCIgKF9feCkpOwkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAi
IDogOiAibSIgKF9fY3cpKTsJCQkJICAgICAgICByZXR1cm4gX192YWx1ZSAgOwl9IAlfX2lubGlu
ZSAgIGZsb2F0ICAgICAgZmxvb3JmICAgICggZmxvYXQgICAgICBfX3ggICkgdGhyb3cgKCkgCXsJ
ICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAgIF9fdm9sYXRp
bGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7CQkJCQkgICAgICAgIF9fdm9sYXRpbGUgdW5zaWdu
ZWQgc2hvcnQgaW50IF9fY3d0bXA7CQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZuc3Rj
dyAlMCIgOiAiPW0iIChfX2N3KSk7CQkJCSAgICAgICAgX19jd3RtcCA9IChfX2N3ICYgMHhmM2Zm
KSB8IDB4MDQwMDsgIAkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAi
bSIgKF9fY3d0bXApKTsJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9
dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZs
ZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7CQkJCSAgICAgICAgcmV0dXJuIF9fdmFsdWUgIDsJfSAJ
X19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAgIGZsb29ybCAgICAoIGxvbmcgZG91YmxlICAgICAg
X194ICApIHRocm93ICgpIAl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CQkJ
CQkJICAgICAgICBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OwkJCQkJICAgICAg
ICBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOwkJCQkgICAgICAgIF9fYXNt
IF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOwkJCQkgICAgICAgIF9fY3d0
bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7ICAJCSAgICAgICAgX19hc20gX192b2xhdGls
ZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7CQkJICAgICAgICBfX2FzbSBfX3ZvbGF0
aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7CQkgICAgICAgIF9f
YXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOwkJCQkgICAgICAgIHJl
dHVybiBfX3ZhbHVlICA7CX0gIAojIDUwMiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5o
IiAzCgpfX2lubGluZSAgIGRvdWJsZSAgICAgY2VpbCAgICggZG91YmxlICAgICAgX194ICApIHRo
cm93ICgpIAl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CQkJCQkJICAgICAg
ICBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OwkJCQkJICAgICAgICBfX3ZvbGF0
aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOwkJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRp
bGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOwkJCQkgICAgICAgIF9fY3d0bXAgPSAoX19j
dyAmIDB4ZjNmZikgfCAweDA4MDA7ICAJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRj
dyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOwkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZy
bmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOwkJICAgICAgICBfX2FzbSBfX3Zv
bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsJCQkJICAgICAgICByZXR1cm4gX192
YWx1ZSAgOwl9IAlfX2lubGluZSAgIGZsb2F0ICAgICAgY2VpbGYgICAgKCBmbG9hdCAgICAgIF9f
eCAgKSB0aHJvdyAoKSAJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJ
CSAgICAgICAgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsJCQkJCSAgICAgICAg
X192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsJCQkJICAgICAgICBfX2FzbSBf
X3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsJCQkJICAgICAgICBfX2N3dG1w
ID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyAgCQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxl
ICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRp
bGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsJCSAgICAgICAgX19h
c20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7CQkJCSAgICAgICAgcmV0
dXJuIF9fdmFsdWUgIDsJfSAJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAgIGNlaWxsICAgICgg
bG9uZyBkb3VibGUgICAgICBfX3ggICkgdGhyb3cgKCkgCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBk
b3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAgIF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50
IF9fY3c7CQkJCQkgICAgICAgIF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7
CQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7
CQkJCSAgICAgICAgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgIAkJCSAgICAg
ICAgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7CQkJICAg
ICAgICBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAo
X194KSk7CQkgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j
dykpOwkJCQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7CX0gIAojIDUxMyAiL3Vzci9pbmNsdWRl
L2JpdHMvbWF0aGlubGluZS5oIiAzCgoKCgoKCgoKX19pbmxpbmUgIGRvdWJsZQpsZGV4cCAoZG91
YmxlIF9feCwgaW50IF9feSkgdGhyb3cgKCkgCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh
bHVlOwlfX2FzbSBfX3ZvbGF0aWxlX18JKCJmc2NhbGUiCTogIj10IiAoX192YWx1ZSkgOiAiMCIg
KF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsJcmV0dXJuIF9fdmFsdWUgOwp9CgoKIAoK
CgoKCgogCgoKCl9faW5saW5lICAgZG91YmxlICAgICBsb2cxcCAgICggZG91YmxlICAgICAgX194
ICApIHRocm93ICgpIAl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7CQkJCQkJ
ICAgICAgICBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2MjM3MzA5
NTA0ODgwTCApCQkJCSAgICAgICAgICBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsJCQkJCQkg
ICAgICAgIGVsc2UJCQkJCQkJCQkgICAgICAgICAgX19hc20gX192b2xhdGlsZV9fCQkJCQkJCSAg
ICAgICAgICAgICgiZmxkbG4yXG5cdCIJCQkJCQkJICAgICAgICAgICAgICJmeGNoXG5cdCIJCQkJ
CQkJICAgICAgICAgICAgICJmeWwyeHAxIgkJCQkJCQkgICAgICAgICAgICAgOiAiPXQiIChfX3Zh
bHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOwkJCQkgICAgICAgIHJldHVybiBfX3ZhbHVlICA7
CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBsb2cxcGYgICAgKCBmbG9hdCAgICAgIF9feCAgKSB0
aHJvdyAoKSAJewkgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJCSAgICAg
ICAgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4
MEwgKQkJCQkgICAgICAgICAgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7CQkJCQkJICAgICAg
ICBlbHNlCQkJCQkJCQkJICAgICAgICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAg
ICAgICAoImZsZGxuMlxuXHQiCQkJCQkJCSAgICAgICAgICAgICAiZnhjaFxuXHQiCQkJCQkJCSAg
ICAgICAgICAgICAiZnlsMnhwMSIJCQkJCQkJICAgICAgICAgICAgIDogIj10IiAoX192YWx1ZSkg
OiAiMCIgKF9feCkgOiAic3QoMSkiKTsJCQkJICAgICAgICByZXR1cm4gX192YWx1ZSAgOwl9IAlf
X2lubGluZSAgIGxvbmcgZG91YmxlICAgICAgbG9nMXBsICAgICggbG9uZyBkb3VibGUgICAgICBf
X3ggICkgdGhyb3cgKCkgCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJ
CQkgICAgICAgIGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAqIDEuNDE0MjEzNTYyMzcz
MDk1MDQ4ODBMICkJCQkJICAgICAgICAgIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOwkJCQkJ
CSAgICAgICAgZWxzZQkJCQkJCQkJCSAgICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJ
ICAgICAgICAgICAgKCJmbGRsbjJcblx0IgkJCQkJCQkgICAgICAgICAgICAgImZ4Y2hcblx0IgkJ
CQkJCQkgICAgICAgICAgICAgImZ5bDJ4cDEiCQkJCQkJCSAgICAgICAgICAgICA6ICI9dCIgKF9f
dmFsdWUpIDogIjAiIChfX3gpIDogInN0KDEpIik7CQkJCSAgICAgICAgcmV0dXJuIF9fdmFsdWUg
IDsJfSAgCiMgNTUwICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKCgogCl9faW5s
aW5lICAgZG91YmxlICAgICBhc2luaCAgICggZG91YmxlICAgICAgX194ICApIHRocm93ICgpIAl7
CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlICBfX3kgPSBfX2ZhYnNsIChfX3gpOwkJCQkgICAg
ICAgIHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4w
KSArIDEuMCkgKyBfX3kpCSAgICAgIAkgICogX19zZ24xbCAoX194KSkgIDsJfSAJX19pbmxpbmUg
ICBmbG9hdCAgICAgIGFzaW5oZiAgICAoIGZsb2F0ICAgICAgX194ICApIHRocm93ICgpIAl7CSAg
ICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlICBfX3kgPSBfX2ZhYnNsIChfX3gpOwkJCQkgICAgICAg
IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSAr
IDEuMCkgKyBfX3kpCSAgICAgIAkgICogX19zZ24xbCAoX194KSkgIDsJfSAJX19pbmxpbmUgICBs
b25nIGRvdWJsZSAgICAgIGFzaW5obCAgICAoIGxvbmcgZG91YmxlICAgICAgX194ICApIHRocm93
ICgpIAl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlICBfX3kgPSBfX2ZhYnNsIChfX3gpOwkJ
CQkgICAgICAgIHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195
ICsgMS4wKSArIDEuMCkgKyBfX3kpCSAgICAgIAkgICogX19zZ24xbCAoX194KSkgIDsJfSAgCgoK
CgpfX2lubGluZSAgIGRvdWJsZSAgICAgYWNvc2ggICAoIGRvdWJsZSAgICAgIF9feCAgKSB0aHJv
dyAoKSAJewkgICAgICByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9f
c3FydGwgKF9feCArIDEuMCkpICA7CX0gCV9faW5saW5lICAgZmxvYXQgICAgICBhY29zaGYgICAg
KCBmbG9hdCAgICAgIF9feCAgKSB0aHJvdyAoKSAJewkgICAgICByZXR1cm4gbG9nbCAoX194ICsg
X19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpICA7CX0gCV9faW5saW5l
ICAgbG9uZyBkb3VibGUgICAgICBhY29zaGwgICAgKCBsb25nIGRvdWJsZSAgICAgIF9feCAgKSB0
aHJvdyAoKSAJewkgICAgICByZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAq
IF9fc3FydGwgKF9feCArIDEuMCkpICA7CX0gIAoKCl9faW5saW5lICAgZG91YmxlICAgICBhdGFu
aCAgICggZG91YmxlICAgICAgX194ICApIHRocm93ICgpIAl7CSAgICAgIHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7CQkJCSAgICAgICAgcmV0dXJuIC0wLjUgKiBsb2cx
cGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCkgIDsJfSAJX19p
bmxpbmUgICBmbG9hdCAgICAgIGF0YW5oZiAgICAoIGZsb2F0ICAgICAgX194ICApIHRocm93ICgp
IAl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7CQkJCSAg
ICAgICAgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAq
IF9fc2duMWwgKF9feCkgIDsJfSAJX19pbmxpbmUgICBsb25nIGRvdWJsZSAgICAgIGF0YW5obCAg
ICAoIGxvbmcgZG91YmxlICAgICAgX194ICApIHRocm93ICgpIAl7CSAgICAgIHJlZ2lzdGVyIGxv
bmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7CQkJCSAgICAgICAgcmV0dXJuIC0wLjUgKiBs
b2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCkgIDsJfSAg
CgoKCiAKX19pbmxpbmUgICBkb3VibGUgICAgIGh5cG90ICAgKCBkb3VibGUgICAgICBfX3ggICwg
IGRvdWJsZSAgICAgIF9feSAgKSB0aHJvdyAoKSAgewkgICAgcmV0dXJuIF9fc3FydGwgKF9feCAq
IF9feCArIF9feSAqIF9feSkgIDsJfSAJX19pbmxpbmUgICBmbG9hdCAgICAgIGh5cG90ZiAgICAo
IGZsb2F0ICAgICAgX194ICAsICBmbG9hdCAgICAgIF9feSAgKSB0aHJvdyAoKSAgewkgICAgcmV0
dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSkgIDsJfSAJX19pbmxpbmUgICBsb25n
IGRvdWJsZSAgICAgIGh5cG90bCAgICAoIGxvbmcgZG91YmxlICAgICAgX194ICAsICBsb25nIGRv
dWJsZSAgICAgIF9feSAgKSB0aHJvdyAoKSAgewkgICAgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9f
eCArIF9feSAqIF9feSkgIDsJfSAgCgpfX2lubGluZSAgIGRvdWJsZSAgICAgbG9nYiAgICggZG91
YmxlICAgICAgX194ICApIHRocm93ICgpIAl7CSAgICAgIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f
dmFsdWU7CQkJCQkJICAgICAgICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7CQkJCQkJICAg
ICAgICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJICAgICAgICAgICgiZnh0cmFjdFxuXHQiCQkJ
CQkJCSAgICAgICAgICAgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194
KSk7CQkJICAgICAgICByZXR1cm4gX192YWx1ZSAgOwl9IAlfX2lubGluZSAgIGZsb2F0ICAgICAg
bG9nYmYgICAgKCBmbG9hdCAgICAgIF9feCAgKSB0aHJvdyAoKSAJewkgICAgICByZWdpc3RlciBs
b25nIGRvdWJsZSBfX3ZhbHVlOwkJCQkJCSAgICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19q
dW5rOwkJCQkJCSAgICAgICAgX19hc20gX192b2xhdGlsZV9fCQkJCQkJCSAgICAgICAgICAoImZ4
dHJhY3Rcblx0IgkJCQkJCQkgICAgICAgICAgIDogIj10IiAoX19qdW5rKSwgIj11IiAoX192YWx1
ZSkgOiAiMCIgKF9feCkpOwkJCSAgICAgICAgcmV0dXJuIF9fdmFsdWUgIDsJfSAJX19pbmxpbmUg
ICBsb25nIGRvdWJsZSAgICAgIGxvZ2JsICAgICggbG9uZyBkb3VibGUgICAgICBfX3ggICkgdGhy
b3cgKCkgCXsJICAgICAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsJCQkJCQkgICAgICAg
IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsJCQkJCQkgICAgICAgIF9fYXNtIF9fdm9sYXRp
bGVfXwkJCQkJCQkgICAgICAgICAgKCJmeHRyYWN0XG5cdCIJCQkJCQkJICAgICAgICAgICA6ICI9
dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsJCQkgICAgICAgIHJldHVy
biBfX3ZhbHVlICA7CX0gIAoKCgoKCgoKCgojIDY0NyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlu
bGluZS5oIiAzCgoKCgoKX19pbmxpbmUgICBkb3VibGUgICAgIGRyZW0gICAoIGRvdWJsZSAgICAg
IF9feCAgLCAgZG91YmxlICAgICAgX195ICApIHRocm93ICgpICB7CSAgICAgIHJlZ2lzdGVyIGRv
dWJsZSBfX3ZhbHVlOwkJCQkJCSAgICAgICAgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOwkJCQkJ
CSAgICAgICAgX19hc20gX192b2xhdGlsZV9fCQkJCQkJCSAgICAgICAgICAoIjE6CWZwcmVtMVxu
XHQiCQkJCQkJICAgICAgICAgICAiZnN0c3cJJSVheFxuXHQiCQkJCQkJICAgICAgICAgICAic2Fo
ZlxuXHQiCQkJCQkJCQkgICAgICAgICAgICJqcAkxYiIJCQkJCQkJICAgICAgICAgICA6ICI9dCIg
KF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAi
Y2MiKTsgICAgICByZXR1cm4gX192YWx1ZSAgOwl9IAlfX2lubGluZSAgIGZsb2F0ICAgICAgZHJl
bWYgICAgKCBmbG9hdCAgICAgIF9feCAgLCAgZmxvYXQgICAgICBfX3kgICkgdGhyb3cgKCkgIHsJ
ICAgICAgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7CQkJCQkJICAgICAgICByZWdpc3RlciBpbnQg
X19jbG9iYmVyZWQ7CQkJCQkJICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlX18JCQkJCQkJICAgICAg
ICAgICgiMToJZnByZW0xXG5cdCIJCQkJCQkgICAgICAgICAgICJmc3RzdwklJWF4XG5cdCIJCQkJ
CQkgICAgICAgICAgICJzYWhmXG5cdCIJCQkJCQkJCSAgICAgICAgICAgImpwCTFiIgkJCQkJCQkg
ICAgICAgICAgIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9f
eCksICJ1IiAoX195KSA6ICJjYyIpOyAgICAgIHJldHVybiBfX3ZhbHVlICA7CX0gCV9faW5saW5l
ICAgbG9uZyBkb3VibGUgICAgICBkcmVtbCAgICAoIGxvbmcgZG91YmxlICAgICAgX194ICAsICBs
b25nIGRvdWJsZSAgICAgIF9feSAgKSB0aHJvdyAoKSAgewkgICAgICByZWdpc3RlciBkb3VibGUg
X192YWx1ZTsJCQkJCQkgICAgICAgIHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsJCQkJCQkgICAg
ICAgIF9fYXNtIF9fdm9sYXRpbGVfXwkJCQkJCQkgICAgICAgICAgKCIxOglmcHJlbTFcblx0IgkJ
CQkJCSAgICAgICAgICAgImZzdHN3CSUlYXhcblx0IgkJCQkJCSAgICAgICAgICAgInNhaGZcblx0
IgkJCQkJCQkJICAgICAgICAgICAianAJMWIiCQkJCQkJCSAgICAgICAgICAgOiAiPXQiIChfX3Zh
bHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7
ICAgICAgcmV0dXJuIF9fdmFsdWUgIDsJfSAgCiMgNjYyICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo
aW5saW5lLmgiIDMKCgogCl9faW5saW5lICBpbnQKX19maW5pdGUgKGRvdWJsZSBfX3gpIHRocm93
ICgpIAp7CiAgcmV0dXJuIChfX2V4dGVuc2lvbl9fCgkgICgoKCgodW5pb24geyBkb3VibGUgX19k
OyBpbnQgX19pWzJdOyB9KSB7X19kOiBfX3h9KS5fX2lbMV0KCSAgICAgfCAweDgwMGZmZmZmdSkg
KyAxKSA+PiAzMSkpOwp9CgogCiMgNjgyICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgi
IDMKCgoKIAoKCgoKCgoKCgoKIAojIDcwNSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5o
IiAzCgoKCiMgMzUwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoKCiMgNDA5ICIvdXNyL2lu
Y2x1ZGUvbWF0aC5oIiAzCgoKfSAKCgoKIyAxOCAiQUNFUGFyYW1zLmgiIDIKCiMgMSAiL3Vzci9p
bmNsdWRlL2Fzc2VydC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIyAzMyAiL3Vzci9p
bmNsdWRlL2Fzc2VydC5oIiAzCgoKCgoKCgoKCgoKIAoKCgoKIyA2MyAiL3Vzci9pbmNsdWRlL2Fz
c2VydC5oIiAzCgoKZXh0ZXJuICJDIiB7IAoKIApleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChf
X2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKCQkJICAgdW5z
aWduZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgp
ICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgogCmV4dGVybiB2b2lkIF9fYXNzZXJ0
X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLAoJCQkJICB1
bnNpZ25lZCBpbnQgX19saW5lLAoJCQkJICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAg
dGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogCgpleHRlcm4gdm9p
ZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwg
aW50IF9fbGluZSkKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp
OwoKCn0gCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCiMgMTkgIkFDRVBhcmFtcy5oIiAy
CgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgoKZXh0ZXJuICJDIiB7IAoKIAoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoK
CiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRl
L3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiMgMjgzICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMi45NS40L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgojIDMxNyAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoK
CiAKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCgkJICAgICBf
X2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpIDsKIAoK
ZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywg
c2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSA7CgogCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2
b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAoJ
CSAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgOwoKCgogCmV4dGVybiB2
b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCkgOwoK
IApleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9f
czIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgICA7CgogCmV4dGVybiB2b2lkICptZW1jaHIg
KF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSAg
IDsKCiMgNzMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCmV4dGVybiBjaGFyICpzdHJj
cHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
cmMpCiAgICAgdGhyb3cgKCkgOwogCmV4dGVybiBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVzdCwKCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVf
dCBfX24pIHRocm93ICgpIDsKCiAKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmlj
dCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKSA7
CiAKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCgkJICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCkgOwoK
IApleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f
czIpCiAgICAgdGhyb3cgKCkgICA7CiAKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNoYXIg
Kl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSAgIDsK
CiAKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq
X19zMikKICAgICB0aHJvdyAoKSAgIDsKIApleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9f
cmVzdHJpY3QgX19kZXN0LAoJCSAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMs
IHNpemVfdCBfX24pIHRocm93ICgpIDsKCiMgMTE2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMK
CgoKIApleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgICA7
CgoKIAoKCgoKCgoKIyAxNTIgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCiAKZXh0ZXJuIGNo
YXIgKnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpICAgOwogCmV4
dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkg
ICA7CgoKCgoKCgogCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBf
X2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIHRocm93ICgpICAgOwogCgpleHRlcm4gc2l6ZV90
IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAg
dGhyb3cgKCkgICA7CiAKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBf
X2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpICAgOwogCmV4dGVybiBjaGFyICpz
dHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkK
ICAgICB0aHJvdyAoKSAgIDsKCgoKCgoKCiAKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19y
ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgIHRocm93
ICgpIDsKCiAKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywK
CQkJIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAoJCQkgY2hhciAqKl9fcmVzdHJp
Y3QgX19zYXZlX3B0cikgdGhyb3cgKCkgOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCgkJICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpIDsKCgojIDIxNCAiL3Vzci9p
bmNsdWRlL3N0cmluZy5oIiAzCgoKCiAKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hh
ciAqX19zKSB0aHJvdyAoKSAgIDsKCgoKCgoKCgoKIApleHRlcm4gY2hhciAqc3RyZXJyb3IgKGlu
dCBfX2Vycm51bSkgdGhyb3cgKCkgOwoKIAoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBf
X2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCkgOwoKCiAKCmV4
dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCkgOwoKCiAK
ZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6
ZV90IF9fbikgdGhyb3cgKCkgOwoKIApleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXpl
X3QgX19uKSB0aHJvdyAoKSA7CgogCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3Mx
LCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgICA7CgogCmV4
dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpICAg
OwoKIApleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhy
b3cgKCkgICA7CgogCgpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkgIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCiAKCgoKCgoKCgoKIApleHRlcm4gaW50IHN0cmNhc2VjbXAg
KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpICAg
OwoKIApleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3Qg
Y2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSAgIDsKCgojIDI4OSAiL3Vzci9p
bmNsdWRlL3N0cmluZy5oIiAzCgoKCiAKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jl
c3RyaWN0IF9fc3RyaW5ncCwKCQkgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGlt
KSB0aHJvdyAoKSA7CgoKIyAzMzIgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgoKIyAzNjEg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgp9IAoKCiMgMjAgIkFDRVBhcmFtcy5oIiAyCgoj
IDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9pb3N0cmVhbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKI3ByYWdt
YSBpbnRlcmZhY2UKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40Ly4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgogICAKCgoKZXh0ZXJuICJDIiB7Cgp9CiAK
CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGFyZy5o
IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgogCgoKCgoKCgoKCgoKCgoKCgoKdm9pZCB2
YV9lbmQgKF9fZ251Y192YV9saXN0KTsJCSAKCgogCgoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKCgoKIyAxNzUgIi91c3IvbGliL2djYy1saWIv
aTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCiAKCgoKCiAKCiAKCiAKCnR5
cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA0
MCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0cmVhbWJ1Zi5oIiAyIDMKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAi
QysrIiB7CmNsYXNzIGlzdHJlYW07ICAKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoK
IAoKCgoKdHlwZWRlZiBfX29mZjY0X3QgICBzdHJlYW1vZmY7CnR5cGVkZWYgX19vZmY2NF90ICAg
c3RyZWFtcG9zOwoKCgoKdHlwZWRlZiBfX3NzaXplX3QgICBzdHJlYW1zaXplOwoKdHlwZWRlZiB1
bnNpZ25lZCBsb25nIF9fZm10ZmxhZ3M7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX2lvc3RhdGU7
CgpzdHJ1Y3QgX2lvc19maWVsZHMKeyAgCiAgICBzdHJlYW1idWYgKl9zdHJidWY7CiAgICBvc3Ry
ZWFtKiBfdGllOwogICAgaW50IF93aWR0aDsKICAgIF9fZm10ZmxhZ3MgX2ZsYWdzOwogICAgd2No
YXJfdCAgIF9maWxsOwogICAgX19pb3N0YXRlIF9zdGF0ZTsKICAgIF9faW9zdGF0ZSBfZXhjZXB0
aW9uczsKICAgIGludCBfcHJlY2lzaW9uOwoKICAgIHZvaWQgKl9hcnJheXM7ICAKfTsKCgoKCgoK
CgoKCgoKCgoKIyAxMjQgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCmNsYXNzIGlvcyA6IHB1YmxpYyBf
aW9zX2ZpZWxkcyB7CiAgaW9zJiBvcGVyYXRvcj0oaW9zJik7ICAgCiAgaW9zIChjb25zdCBpb3Mm
KTsgIAogIHB1YmxpYzoKICAgIHR5cGVkZWYgX19mbXRmbGFncyBmbXRmbGFnczsKICAgIHR5cGVk
ZWYgaW50IGlvc3RhdGU7CiAgICB0eXBlZGVmIGludCBvcGVubW9kZTsKICAgIHR5cGVkZWYgX19z
c2l6ZV90ICAgc3RyZWFtc2l6ZTsKICAgIGVudW0gaW9fc3RhdGUgewoJZ29vZGJpdCA9IDAgLAoJ
ZW9mYml0ID0gMSAsCglmYWlsYml0ID0gMiAsCgliYWRiaXQgPSA0ICB9OwogICAgZW51bSBvcGVu
X21vZGUgewoJaW4gPSAxICwKCW91dCA9IDIgLAoJYXRlID0gNCAsCglhcHAgPSA4ICwKCXRydW5j
ID0gMTYgLAoJbm9jcmVhdGUgPSAzMiAsCglub3JlcGxhY2UgPSA2NCAsCgliaW4gPSAxMjggLCAg
CgliaW5hcnkgPSAxMjggIH07CiAgICBlbnVtIHNlZWtfZGlyIHsgYmVnLCBjdXIsIGVuZH07CiAg
ICB0eXBlZGVmIGVudW0gc2Vla19kaXIgc2Vla2RpcjsKICAgICAKICAgIGVudW0geyBza2lwd3M9
IDAxICwKCSAgIGxlZnQ9IDAyICwgcmlnaHQ9IDA0ICwgaW50ZXJuYWw9IDAxMCAsCgkgICBkZWM9
IDAyMCAsIG9jdD0gMDQwICwgaGV4PSAwMTAwICwKCSAgIHNob3diYXNlPSAwMjAwICwgc2hvd3Bv
aW50PSAwNDAwICwKCSAgIHVwcGVyY2FzZT0gMDEwMDAgLCBzaG93cG9zPSAwMjAwMCAsCgkgICBz
Y2llbnRpZmljPSAwNDAwMCAsIGZpeGVkPSAwMTAwMDAgLAoJICAgdW5pdGJ1Zj0gMDIwMDAwICwg
c3RkaW89IDA0MDAwMCAKCgoKCSAgIH07CiAgICBlbnVtIHsgIAoJYmFzZWZpZWxkPWRlYytvY3Qr
aGV4LAoJZmxvYXRmaWVsZCA9IHNjaWVudGlmaWMrZml4ZWQsCglhZGp1c3RmaWVsZCA9IGxlZnQr
cmlnaHQraW50ZXJuYWwKICAgIH07CgojIDE3NyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzIuOTUuNC8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAzCgoKICAgIG9z
dHJlYW0qIHRpZSgpIGNvbnN0IHsgcmV0dXJuIF90aWU7IH0KICAgIG9zdHJlYW0qIHRpZShvc3Ry
ZWFtKiB2YWwpIHsgb3N0cmVhbSogc2F2ZT1fdGllOyBfdGllPXZhbDsgcmV0dXJuIHNhdmU7IH0K
CiAgICAgCiAgICB3Y2hhcl90ICAgZmlsbCgpIGNvbnN0IHsgcmV0dXJuIF9maWxsOyB9CiAgICB3
Y2hhcl90ICAgZmlsbCh3Y2hhcl90ICAgbmV3ZikKCXt3Y2hhcl90ICAgb2xkZiA9IF9maWxsOyBf
ZmlsbCA9IG5ld2Y7IHJldHVybiBvbGRmO30KICAgIGZtdGZsYWdzIGZsYWdzKCkgY29uc3QgeyBy
ZXR1cm4gX2ZsYWdzOyB9CiAgICBmbXRmbGFncyBmbGFncyhmbXRmbGFncyBuZXdfdmFsKSB7Cglm
bXRmbGFncyBvbGRfdmFsID0gX2ZsYWdzOyBfZmxhZ3MgPSBuZXdfdmFsOyByZXR1cm4gb2xkX3Zh
bDsgfQogICAgaW50IHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9wcmVjaXNpb247IH0KICAg
IGludCBwcmVjaXNpb24oaW50IG5ld3ApIHsKCXVuc2lnbmVkIHNob3J0IG9sZHAgPSBfcHJlY2lz
aW9uOyBfcHJlY2lzaW9uID0gKHVuc2lnbmVkIHNob3J0KW5ld3A7CglyZXR1cm4gb2xkcDsgfQog
ICAgZm10ZmxhZ3Mgc2V0ZihmbXRmbGFncyB2YWwpIHsKCWZtdGZsYWdzIG9sZGJpdHMgPSBfZmxh
Z3M7CglfZmxhZ3MgfD0gdmFsOyByZXR1cm4gb2xkYml0czsgfQogICAgZm10ZmxhZ3Mgc2V0Zihm
bXRmbGFncyB2YWwsIGZtdGZsYWdzIG1hc2spIHsKCWZtdGZsYWdzIG9sZGJpdHMgPSBfZmxhZ3M7
CglfZmxhZ3MgPSAoX2ZsYWdzICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOyByZXR1cm4gb2xkYml0
czsgfQogICAgZm10ZmxhZ3MgdW5zZXRmKGZtdGZsYWdzIG1hc2spIHsKCWZtdGZsYWdzIG9sZGJp
dHMgPSBfZmxhZ3M7CglfZmxhZ3MgJj0gfm1hc2s7IHJldHVybiBvbGRiaXRzOyB9CiAgICBpbnQg
d2lkdGgoKSBjb25zdCB7IHJldHVybiBfd2lkdGg7IH0KICAgIGludCB3aWR0aChpbnQgdmFsKSB7
IGludCBzYXZlID0gX3dpZHRoOyBfd2lkdGggPSB2YWw7IHJldHVybiBzYXZlOyB9CgoKCgogICAg
dm9pZCBfdGhyb3dfZmFpbHVyZSgpIGNvbnN0IHsgfQoKICAgIHZvaWQgY2xlYXIoaW9zdGF0ZSBz
dGF0ZSA9IDApIHsKCV9zdGF0ZSA9IF9zdHJidWYgPyBzdGF0ZSA6IHN0YXRlfGJhZGJpdDsKCWlm
IChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgdm9pZCBzZXQo
aW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFnOwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25z
KSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldHN0YXRlKGlvc3RhdGUgZmxhZykgeyBf
c3RhdGUgfD0gZmxhZzsgIAoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVy
ZSgpOyB9CiAgICBpbnQgZ29vZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSA9PSAwOyB9CiAgICBp
bnQgZW9mKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjplb2ZiaXQ7IH0KICAgIGludCBm
YWlsKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgKGlvczo6YmFkYml0fGlvczo6ZmFpbGJpdCk7
IH0KICAgIGludCBiYWQoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmJhZGJpdDsgfQog
ICAgaW9zdGF0ZSByZHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlOyB9CiAgICBvcGVyYXRv
ciB2b2lkKigpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKSA/ICh2b2lkKikwIDogKHZvaWQqKSgtMSk7
IH0KICAgIGludCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBmYWlsKCk7IH0KICAgIGlvc3Rh
dGUgZXhjZXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIF9leGNlcHRpb25zOyB9CiAgICB2b2lkIGV4
Y2VwdGlvbnMoaW9zdGF0ZSBlbmFibGUpIHsKCV9leGNlcHRpb25zID0gZW5hYmxlOwoJaWYgKF9z
dGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CgogICAgc3RyZWFtYnVmKiBy
ZGJ1ZigpIGNvbnN0IHsgcmV0dXJuIF9zdHJidWY7IH0KICAgIHN0cmVhbWJ1ZiogcmRidWYoc3Ry
ZWFtYnVmICpfcykgewogICAgICBzdHJlYW1idWYgKl9vbGQgPSBfc3RyYnVmOyBfc3RyYnVmID0g
X3M7IGNsZWFyICgpOyByZXR1cm4gX29sZDsgfQoKICAgIHN0YXRpYyBpbnQgc3luY193aXRoX3N0
ZGlvKGludCBvbik7CiAgICBzdGF0aWMgdm9pZCBzeW5jX3dpdGhfc3RkaW8oKSB7IHN5bmNfd2l0
aF9zdGRpbygxKTsgfQogICAgc3RhdGljIGZtdGZsYWdzIGJpdGFsbG9jKCk7CiAgICBzdGF0aWMg
aW50IHhhbGxvYygpOwogICAgdm9pZComIHB3b3JkKGludCk7CiAgICB2b2lkKiBwd29yZChpbnQp
IGNvbnN0OwogICAgbG9uZyYgaXdvcmQoaW50KTsKICAgIGxvbmcgaXdvcmQoaW50KSBjb25zdDsK
CgoKCgoKCgoKICAgICAKICAgIGNsYXNzIEluaXQgewogICAgcHVibGljOgogICAgICBJbml0ICgp
IHsgfQogICAgfTsKCiAgcHJvdGVjdGVkOgogICAgaW5saW5lIGlvcyhzdHJlYW1idWYqIHNiID0g
MCwgb3N0cmVhbSogdGllX3RvID0gMCk7CiAgICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7CiAgICBp
bmxpbmUgdm9pZCBpbml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZSA9IDApOwp9OwoKCgoK
dHlwZWRlZiBpb3M6OnNlZWtfZGlyIF9zZWVrX2RpcjsKCgogCiAKIAogCiAKCiAKIApjbGFzcyBz
dHJlYW1tYXJrZXIgOiBwcml2YXRlIF9JT19tYXJrZXIgewogICAgZnJpZW5kIGNsYXNzIHN0cmVh
bWJ1ZjsKICAgIHZvaWQgc2V0X29mZnNldChpbnQgb2Zmc2V0KSB7IF9wb3MgPSBvZmZzZXQ7IH0K
ICBwdWJsaWM6CiAgICBzdHJlYW1tYXJrZXIoc3RyZWFtYnVmICpzYik7CiAgICB+c3RyZWFtbWFy
a2VyKCk7CiAgICBpbnQgc2F2aW5nKCkgeyByZXR1cm4gIDE7IH0KICAgIGludCBkZWx0YShzdHJl
YW1tYXJrZXImKTsKICAgIGludCBkZWx0YSgpOwp9OwoKc3RydWN0IHN0cmVhbWJ1ZiA6IHB1Ymxp
YyBfSU9fRklMRSB7ICAKICAgIGZyaWVuZCBjbGFzcyBpb3M7CiAgICBmcmllbmQgY2xhc3MgaXN0
cmVhbTsKICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIHN0cmVhbW1h
cmtlcjsKICAgIGNvbnN0IHZvaWQgKiZfdnRhYmxlKCkgeyByZXR1cm4gKihjb25zdCB2b2lkKiop
KChfSU9fRklMRSopdGhpcyArIDEpOyB9CiAgcHJvdGVjdGVkOgogICAgc3RhdGljIHN0cmVhbWJ1
ZiogX2xpc3RfYWxsOyAgCiAgICBfSU9fRklMRSomIHhjaGFpbigpIHsgcmV0dXJuIF9jaGFpbjsg
fQogICAgdm9pZCBfdW5fbGluaygpOwogICAgdm9pZCBfbGlua19pbigpOwogICAgY2hhciogZ3B0
cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9iYXNl
IDogX0lPX3JlYWRfcHRyOyB9CiAgICBjaGFyKiBwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dy
aXRlX3B0cjsgfQogICAgY2hhciogZWdwdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3Mg
ICYgMHgxMDAgID8gX0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICBjaGFyKiBlcHB0
cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9lbmQ7IH0KICAgIGNoYXIqIHBiYXNlKCkgY29u
c3QgeyByZXR1cm4gX0lPX3dyaXRlX2Jhc2U7IH0KICAgIGNoYXIqIGViYWNrKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9i
YXNlO30KICAgIGNoYXIqIGJhc2UoKSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2Jhc2U7IH0KICAg
IGNoYXIqIGVidWYoKSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2VuZDsgfQogICAgaW50IGJsZW4o
KSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2VuZCAtIF9JT19idWZfYmFzZTsgfQogICAgdm9pZCB4
cHV0X2NoYXIoY2hhciBjKSB7ICpfSU9fd3JpdGVfcHRyKysgPSBjOyB9CiAgICBpbnQgeGZsYWdz
KCkgeyByZXR1cm4gX2ZsYWdzIDsgfQogICAgaW50IHhmbGFncyhpbnQgZikge2ludCBmbCA9IF9m
bGFncyA7IF9mbGFncyAgPSBmOyByZXR1cm4gZmw7fQogICAgdm9pZCB4c2V0ZmxhZ3MoaW50IGYp
IHsgX2ZsYWdzICB8PSBmOyB9CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZiwgaW50IG1hc2spCiAg
ICAgIHsgX2ZsYWdzICA9IChfZmxhZ3MgICYgfm1hc2spIHwgKGYgJiBtYXNrKTsgfQogICAgdm9p
ZCBnYnVtcChpbnQgbikKICAgICAgeyBfZmxhZ3MgICYgMHgxMDAgID8gKF9JT19zYXZlX2Jhc2Ur
PW4pOihfSU9fcmVhZF9wdHIrPW4pO30KICAgIHZvaWQgcGJ1bXAoaW50IG4pIHsgX0lPX3dyaXRl
X3B0ciArPSBuOyB9CiAgICB2b2lkIHNldGIoY2hhciogYiwgY2hhciogZWIsIGludCBhPTApOwog
ICAgdm9pZCBzZXRwKGNoYXIqIHAsIGNoYXIqIGVwKQogICAgICB7IF9JT193cml0ZV9iYXNlPV9J
T193cml0ZV9wdHI9cDsgX0lPX3dyaXRlX2VuZD1lcDsgfQogICAgdm9pZCBzZXRnKGNoYXIqIGVi
LCBjaGFyKiBnLCBjaGFyICplZykgewogICAgICBpZiAoX2ZsYWdzICAmIDB4MTAwICkgX0lPX2Zy
ZWVfYmFja3VwX2FyZWEodGhpcyk7IAogICAgICBfSU9fcmVhZF9iYXNlID0gZWI7IF9JT19yZWFk
X3B0ciA9IGc7IF9JT19yZWFkX2VuZCA9IGVnOyB9CiAgICBjaGFyICpzaG9ydGJ1ZigpIHsgcmV0
dXJuIF9zaG9ydGJ1ZjsgfQoKICAgIGludCBpbl9iYWNrdXAoKSB7IHJldHVybiBfZmxhZ3MgJiAw
eDEwMCA7IH0KICAgICAKICAgIGNoYXIgKkdiYXNlKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBf
SU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUdwdHIoKSB7
IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2VuZCA6IF9JT19yZWFkX2VuZDsgfQogICAg
IAogICAgY2hhciAqQmJhc2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2Jhc2Ug
OiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICpCcHRyKCkgeyByZXR1cm4gX0lPX2JhY2t1cF9i
YXNlOyB9CiAgICAgCiAgICBjaGFyICplQnB0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lP
X3JlYWRfZW5kIDogX0lPX3NhdmVfZW5kOyB9CiAgICBjaGFyICpOYmFzZSgpIHsgcmV0dXJuIF9J
T19zYXZlX2Jhc2U7IH0KICAgIGNoYXIgKmVOcHRyKCkgeyByZXR1cm4gX0lPX3NhdmVfZW5kOyB9
CiAgICBpbnQgaGF2ZV9iYWNrdXAoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlICE9IF9fbnVsbCA7
IH0KICAgIGludCBoYXZlX21hcmtlcnMoKSB7IHJldHVybiBfbWFya2VycyAhPSBfX251bGwgOyB9
CiAgICB2b2lkIGZyZWVfYmFja3VwX2FyZWEoKTsKICAgIHZvaWQgdW5zYXZlX21hcmtlcnMoKTsg
IAogICAgaW50IHB1dF9tb2RlKCkgeyByZXR1cm4gX2ZsYWdzICYgMHg4MDAgOyB9CiAgICBpbnQg
c3dpdGNoX3RvX2dldF9tb2RlKCk7CiAgICAKICAgIHN0cmVhbWJ1ZihpbnQgZmxhZ3M9MCk7CiAg
cHVibGljOgogICAgc3RhdGljIGludCBmbHVzaF9hbGwoKTsKICAgIHN0YXRpYyB2b2lkIGZsdXNo
X2FsbF9saW5lYnVmZmVyZWQoKTsgIAogICAgdmlydHVhbCB+c3RyZWFtYnVmKCk7CiAgICB2aXJ0
dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkgKTsgIAogICAgdmlydHVhbCBpbnQgdW5kZXJm
bG93KCk7ICAKICAgIHZpcnR1YWwgaW50IHVmbG93KCk7ICAKICAgIHZpcnR1YWwgaW50IHBiYWNr
ZmFpbChpbnQgYyk7CiAKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciog
cywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywg
c3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBf
c2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1w
b3Mgc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwoK
ICAgIHN0cmVhbXBvcyBwdWJzZWVrb2ZmKHN0cmVhbW9mZiBvLCBfc2Vla19kaXIgZCwgaW50IG1v
ZGU9aW9zOjppbnxpb3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtvZmYgKHRoaXMsIG8s
IGQsIG1vZGUpOyB9CiAgICBzdHJlYW1wb3MgcHVic2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQg
bW9kZSA9IGlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrcG9zICh0aGlz
LCBwb3MsIG1vZGUpOyB9CiAgICBzdHJlYW1wb3Mgc3NlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19k
aXIsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgc3RyZWFtcG9zIHNzZWVrcG9zKHN0
cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0
cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGludCBsZW4pOwogICAgdmlydHVhbCBpbnQgc3luYygp
OwogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwoKICAgIGludCBzZWVrbWFyayhzdHJlYW1t
YXJrZXImIG1hcmssIGludCBkZWx0YSA9IDApOwogICAgaW50IHNwdXRiYWNrYyhjaGFyIGMpOwog
ICAgaW50IHN1bmdldGMoKTsKICAgIGludCB1bmJ1ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYg
MiAgPyAxIDogMDsgfQogICAgaW50IGxpbmVidWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4
MjAwICA/IDEgOiAwOyB9CiAgICB2b2lkIHVuYnVmZmVyZWQoaW50IGkpCgl7IGlmIChpKSBfZmxh
Z3MgfD0gMiA7IGVsc2UgX2ZsYWdzICY9IH4yIDsgfQogICAgdm9pZCBsaW5lYnVmZmVyZWQoaW50
IGkpCgl7IGlmIChpKSBfZmxhZ3MgfD0gMHgyMDAgOyBlbHNlIF9mbGFncyAmPSB+MHgyMDAgOyB9
CiAgICBpbnQgYWxsb2NhdGUoKSB7ICAKCWlmIChiYXNlKCkgfHwgdW5idWZmZXJlZCgpKSByZXR1
cm4gMDsKCWVsc2UgcmV0dXJuIGRvYWxsb2NhdGUoKTsgfQogICAgIAogICAgdm9pZCBhbGxvY2J1
ZigpIHsgaWYgKGJhc2UoKSA9PSBfX251bGwgKSBkb2FsbG9jYnVmKCk7IH0KICAgIHZvaWQgZG9h
bGxvY2J1ZigpOwogICAgaW50IGluX2F2YWlsKCkgeyByZXR1cm4gX0lPX3JlYWRfZW5kIC0gX0lP
X3JlYWRfcHRyOyB9CiAgICBpbnQgb3V0X3dhaXRpbmcoKSB7IHJldHVybiBfSU9fd3JpdGVfcHRy
IC0gX0lPX3dyaXRlX2Jhc2U7IH0KICAgIHN0cmVhbXNpemUgc3B1dG4oY29uc3QgY2hhciogcywg
c3RyZWFtc2l6ZSBuKSB7IHJldHVybiB4c3B1dG4ocywgbik7IH0KICAgIHN0cmVhbXNpemUgcGFk
bihjaGFyIHBhZCwgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiBfSU9fcGFkbih0aGlzLCBwYWQsIG4p
OyB9CiAgICBzdHJlYW1zaXplIHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4g
X0lPX3NnZXRuKHRoaXMsIHMsIG4pOyB9CiAgICBpbnQgaWdub3JlKGludCk7CiAgICBpbnQgZ2V0
X2NvbHVtbigpOwogICAgaW50IHNldF9jb2x1bW4oaW50KTsKICAgIGxvbmcgc2dldGxpbmUoY2hh
ciogYnVmLCBzaXplX3QgICBuLCBjaGFyIGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7CiAgICBp
bnQgc3B1dGMoaW50IGMpIHsgcmV0dXJuIF9JT19wdXRjKGMsIHRoaXMpOyB9CiAgICBpbnQgc2J1
bXBjKCkgeyByZXR1cm4gX0lPX2dldGModGhpcyk7IH0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJu
ICgoICB0aGlzICApLT5fSU9fcmVhZF9wdHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYm
IF9fdW5kZXJmbG93ICggIHRoaXMgICkgPT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWduZWQgY2hh
ciAqKSAoICB0aGlzICApLT5fSU9fcmVhZF9wdHIpICA7IH0KICAgIGludCBzbmV4dGMoKSB7Cglp
ZiAoX0lPX3JlYWRfcHRyID49IF9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlzKSA9PSAo
LTEpICkKCSAgcmV0dXJuICgtMSkgOwoJZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRj
KCk7IH0KICAgIHZvaWQgc3Rvc3NjKCkgeyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5k
KSBfSU9fcmVhZF9wdHIrKzsgfQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9fZ251
Y192YV9saXN0ICBhcCwgaW9zKiBzdHJlYW0gPSBfX251bGwgKTsKICAgIGludCBzY2FuKGNoYXIg
Y29uc3QgKmZtdDAgLi4uKTsKICAgIGludCB2Zm9ybShjaGFyIGNvbnN0ICpmbXQwLCBfX2dudWNf
dmFfbGlzdCAgYXApOwogICAgaW50IGZvcm0oY2hhciBjb25zdCAqZm10MCAuLi4pOwoKCgoKICAg
IHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUgc2l6ZSk7
CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXpl
KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsK
ICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwogICAgdmlydHVhbCBpbnQgc3lzX3N0YXQodm9p
ZCopOyAgCgogICAgdmlydHVhbCBpbnQgc2hvd21hbnljKCk7CiAgICB2aXJ0dWFsIHZvaWQgaW1i
dWUodm9pZCAqKTsKCn07CgogCiAKCmNsYXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFtYnVmIHsK
ICBwcm90ZWN0ZWQ6CiAgICB2b2lkIGluaXQoKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgY29uc3Qg
aW50IG9wZW5wcm90OyAgCiAgICBmaWxlYnVmKCk7CiAgICBmaWxlYnVmKGludCBmZCk7CiAgICBm
aWxlYnVmKGludCBmZCwgY2hhciogcCwgaW50IGxlbik7CgoKCiAgICB+ZmlsZWJ1ZigpOwogICAg
ZmlsZWJ1ZiogYXR0YWNoKGludCBmZCk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZp
bGVuYW1lLCBjb25zdCBjaGFyICptb2RlKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAq
ZmlsZW5hbWUsIGlvczo6b3Blbm1vZGUgbW9kZSwgaW50IHByb3QgPSAwNjY0KTsKICAgIHZpcnR1
YWwgaW50IHVuZGVyZmxvdygpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEp
ICk7CiAgICBpbnQgaXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsgfQogICAg
aW50IGZkKCkgY29uc3QgeyByZXR1cm4gaXNfb3BlbigpID8gX2ZpbGVubyA6ICgtMSkgOyB9CiAg
ICBmaWxlYnVmKiBjbG9zZSgpOwogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwogICAgdmly
dHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9z
Ojppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGlu
dCBsZW4pOwogICAgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBu
KTsKICAgIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0
dWFsIGludCBzeW5jKCk7CiAgcHJvdGVjdGVkOiAgCiAKICAgIGludCBpc19yZWFkaW5nKCkgeyBy
ZXR1cm4gZWJhY2soKSAhPSBlZ3B0cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyByZXR1cm4g
aXNfcmVhZGluZygpID8gIGdwdHIoKSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciogZmlsZV9w
dHIoKSB7IHJldHVybiBlR3B0cigpOyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lz
X3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mg
c3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5
c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3Rh
dCh2b2lkKik7ICAKICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwoKCgoKfTsKCmlubGluZSB2
b2lkIGlvczo6aW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsKCQlfc3RhdGUg
PSBzYiA/IGlvczo6Z29vZGJpdCA6IGlvczo6YmFkYml0OyBfZXhjZXB0aW9ucz0wOwoJCV9zdHJi
dWY9c2I7IF90aWUgPSB0aWVfdG87IF93aWR0aD0wOyBfZmlsbD0nICc7CgoJCV9mbGFncz1pb3M6
OnNraXB3c3xpb3M6OmRlYzsKCgoKCQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9Cgppbmxp
bmUgaW9zOjppb3Moc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7IGluaXQoc2IsIHRp
ZV90byk7IH0KCmlubGluZSBpb3M6On5pb3MoKSB7CgoKCiAgICAgCiAgICAgCiAgICBvcGVyYXRv
ciBkZWxldGVbXSAoX2FycmF5cyk7Cn0KfSAgCgojIDMxICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
bGludXgvMi45NS40Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMiAzCgoK
ZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdHlwZWRlZiBpb3Mm
ICgqX19tYW5pcCkoaW9zJik7CnR5cGVkZWYgaXN0cmVhbSYgKCpfX2ltYW5pcCkoaXN0cmVhbSYp
Owp0eXBlZGVmIG9zdHJlYW0mICgqX19vbWFuaXApKG9zdHJlYW0mKTsKCmV4dGVybiBpc3RyZWFt
JiB3cyhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7
CmV4dGVybiBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5k
cyhvc3RyZWFtJiBvdXRzKTsKCmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewog
ICAgIAogICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgogICAgb3N0cmVhbSgpIHsgfQogICAg
b3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVkPSBfX251bGwgKTsKICAgIGludCBv
cGZ4KCkgewoJaWYgKCFnb29kKCkpIHJldHVybiAwOwoJZWxzZSB7IGlmIChfdGllKSBfdGllLT5m
bHVzaCgpOyAgOyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgIDsKCQkgIGlmIChmbGFn
cygpICYgKGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkgICAgICBkb19vc2Z4KCk7IH0KICAg
IG9zdHJlYW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9zdHJidWYtPnNw
dXRjKGMpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgY2hh
ciAqcywgc3RyZWFtc2l6ZSBuKTsKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHVuc2lnbmVkIGNo
YXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMs
IG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXpl
IG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFt
JiB3cml0ZShjb25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRl
KChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1wb3MpOwogICAg
b3N0cmVhbSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxw
KCk7CiAgICBvc3RyZWFtJiBmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgb3N0cmVh
bSYgdmZvcm0oY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCAgYXJncyk7CgogICAg
b3N0cmVhbSYgb3BlcmF0b3I8PChjaGFyIGMpOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNp
Z25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAgb3N0cmVhbSYg
b3BlcmF0b3I8PChzaWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0K
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgY2hhciAqcyk7CiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMpCgl7IHJldHVybiAoKnRoaXMpIDw8IChjb25z
dCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHNpZ25lZCBjaGFyICpz
KQoJeyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVhbSYgb3Bl
cmF0b3I8PChjb25zdCB2b2lkICpwKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoaW50IG4pOwog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgbik7CiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KGxvbmcgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbik7
CgogICAgX19leHRlbnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgbG9uZyBuKTsKICAg
IF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgbik7
CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGlu
dCluKTt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4g
b3BlcmF0b3I8PCgodW5zaWduZWQgaW50KW4pO30KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGJv
b2wgYikgeyByZXR1cm4gb3BlcmF0b3I8PCgoaW50KWIpOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0
b3I8PChkb3VibGUgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGZsb2F0IG4pIHsgcmV0dXJu
IG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBk
b3VibGUgbik7CgoKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fb21hbmlwIGZ1bmMpIHsgcmV0
dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fbWFuaXAgZnVu
YykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PChzdHJlYW1idWYqKTsKCgoKfTsKCmNsYXNzIGlzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MK
ewogICAgIApwcm90ZWN0ZWQ6CiAgICBzaXplX3QgICBfZ2NvdW50OwoKICAgIGludCBfc2tpcF93
cygpOwogIHB1YmxpYzoKICAgIGlzdHJlYW0oKTogX2djb3VudCAoMCkgeyB9CiAgICBpc3RyZWFt
KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxsICk7CiAgICBpc3RyZWFtJiBnZXQo
Y2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXQo
dW5zaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJu
IGdldCgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0KGNoYXImIGMp
OwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXImIGMpIHsgcmV0dXJuIGdldCgoY2hhciYp
Yyk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGlt
ID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXRsaW5lKHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxl
biwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRsaW5lKChjaGFyKilwdHIsIGxlbiwg
ZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNoYXImIGMpICB7IHJldHVybiBnZXQo
KGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwg
Y2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7
IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBk
ZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRsaW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9
CiAgICBpc3RyZWFtJiByZWFkKGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKTsKICAgIGlzdHJlYW0m
IHJlYWQodW5zaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJl
YWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJlYWQoc2lnbmVkIGNoYXIgKnB0ciwg
c3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBp
c3RyZWFtJiByZWFkKHZvaWQgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFk
KChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiBnZXQoc3RyZWFtYnVmJiBzYiwgY2hhciBk
ZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0cyhjaGFyICoqcywgY2hhciBkZWxpbSA9ICdc
bicpOwogICAgaW50IGlwZngoaW50IG5lZWQgPSAwKSB7CglpZiAoIWdvb2QoKSkgeyBzZXQoaW9z
OjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSAmJiAobmVl
ZCA9PSAwIHx8IHJkYnVmKCktPmluX2F2YWlsKCkgPCBuZWVkKSkgX3RpZS0+Zmx1c2goKTsKCSAg
aWYgKCFuZWVkICYmIChmbGFncygpICYgaW9zOjpza2lwd3MpKSByZXR1cm4gX3NraXBfd3MoKTsK
CSAgZWxzZSByZXR1cm4gMTsKCX0KICAgIH0KICAgIGludCBpcGZ4MCgpIHsgIAoJaWYgKCFnb29k
KCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYg
KF90aWUpIF90aWUtPmZsdXNoKCk7CgkgIGlmIChmbGFncygpICYgaW9zOjpza2lwd3MpIHJldHVy
biBfc2tpcF93cygpOwoJICBlbHNlIHJldHVybiAxOwoJfQogICAgfQogICAgaW50IGlwZngxKCkg
eyAgCglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2Ug
ewoJICAgOwoJICBpZiAoX3RpZSAmJiByZGJ1ZigpLT5pbl9hdmFpbCgpID09IDApIF90aWUtPmZs
dXNoKCk7CgkgIHJldHVybiAxOwoJfQogICAgfQogICAgdm9pZCBpc2Z4KCkgeyAgOyB9CiAgICBp
bnQgZ2V0KCkgeyBpZiAoIWlwZngxKCkpIHJldHVybiAoLTEpIDsKCQllbHNlIHsgaW50IGNoID0g
X3N0cmJ1Zi0+c2J1bXBjKCk7CgkJICAgICAgIGlmIChjaCA9PSAoLTEpICkgc2V0KGlvczo6ZW9m
Yml0KTsKCQkgICAgICAgaXNmeCgpOwoJCSAgICAgICByZXR1cm4gY2g7CgkJICAgICB9IH0KICAg
IGludCBwZWVrKCk7CiAgICBzaXplX3QgICBnY291bnQoKSB7IHJldHVybiBfZ2NvdW50OyB9CiAg
ICBpc3RyZWFtJiBpZ25vcmUoaW50IG49MSwgaW50IGRlbGltID0gKC0xKSApOwogICAgaW50IHN5
bmMgKCk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1wb3MpOwogICAgaXN0cmVhbSYgc2Vla2co
c3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxnKCk7CiAgICBpc3RyZWFt
JiBwdXRiYWNrKGNoYXIgY2gpIHsKCWlmIChnb29kKCkgJiYgX3N0cmJ1Zi0+c3B1dGJhY2tjKGNo
KSA9PSAoLTEpICkgY2xlYXIoaW9zOjpiYWRiaXQpOwoJcmV0dXJuICp0aGlzO30KICAgIGlzdHJl
YW0mIHVuZ2V0KCkgewoJaWYgKGdvb2QoKSAmJiBfc3RyYnVmLT5zdW5nZXRjKCkgPT0gKC0xKSAp
IGNsZWFyKGlvczo6YmFkYml0KTsKCXJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBzY2FuKGNv
bnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgaXN0cmVhbSYgdnNjYW4oY29uc3QgY2hhciAqZm9y
bWF0LCBfX2dudWNfdmFfbGlzdCAgYXJncyk7CgoKCgoKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+
KGNoYXIqKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hhciogcCkgeyByZXR1
cm4gb3BlcmF0b3I+PigoY2hhciopcCk7IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVk
IGNoYXIqcCkgeyByZXR1cm4gb3BlcmF0b3I+PigoY2hhciopcCk7IH0KICAgIGlzdHJlYW0mIG9w
ZXJhdG9yPj4oY2hhciYgYyk7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXIm
IGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+
PihzaWduZWQgY2hhciYgYykge3JldHVybiBvcGVyYXRvcj4+KChjaGFyJiljKTt9CiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KGludCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nJik7Cgog
ICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgbG9uZyYpOwogICAgX19l
eHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYpOwoKICAg
IGlzdHJlYW0mIG9wZXJhdG9yPj4oc2hvcnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5z
aWduZWQgaW50Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmKTsKICAg
IGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmKTsKCiAgICBpc3RyZWFtJiBvcGVy
YXRvcj4+KGJvb2wmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGZsb2F0Jik7CiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nIGRv
dWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+PiggX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgq
dGhpcyk7IHJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KF9faW1hbmlwIGZ1
bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHN0
cmVhbWJ1ZiopOwp9OwoKY2xhc3MgaW9zdHJlYW0gOiBwdWJsaWMgaXN0cmVhbSwgcHVibGljIG9z
dHJlYW0KewogIHB1YmxpYzoKICAgIGlvc3RyZWFtKCkgeyB9CiAgICBpb3N0cmVhbShzdHJlYW1i
dWYqIHNiLCBvc3RyZWFtKnRpZWQ9IF9fbnVsbCApOwp9OwoKY2xhc3MgX0lPX2lzdHJlYW1fd2l0
aGFzc2lnbiA6IHB1YmxpYyBpc3RyZWFtIHsKcHVibGljOgogIF9JT19pc3RyZWFtX3dpdGhhc3Np
Z24mIG9wZXJhdG9yPShpc3RyZWFtJik7CiAgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0
b3I9KF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIHJocykKICAgIHsgcmV0dXJuIG9wZXJhdG9yPSAo
c3RhdGljX2Nhc3Q8aXN0cmVhbSY+IChyaHMpKTsgfQp9OwoKY2xhc3MgX0lPX29zdHJlYW1fd2l0
aGFzc2lnbiA6IHB1YmxpYyBvc3RyZWFtIHsKcHVibGljOgogIF9JT19vc3RyZWFtX3dpdGhhc3Np
Z24mIG9wZXJhdG9yPShvc3RyZWFtJik7CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0
b3I9KF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIHJocykKICAgIHsgcmV0dXJuIG9wZXJhdG9yPSAo
c3RhdGljX2Nhc3Q8b3N0cmVhbSY+IChyaHMpKTsgfQp9OwoKZXh0ZXJuIF9JT19pc3RyZWFtX3dp
dGhhc3NpZ24gY2luOwogCmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNvdXQsIGNlcnI7
CgpleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjbG9nCgoKCjsKCmV4dGVybiBpc3RyZWFt
JiBsb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBpc3RyZWFtJiB1bmxvY2soaXN0cmVhbSYgaW5z
KTsKZXh0ZXJuIG9zdHJlYW0mIGxvY2sob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiB1
bmxvY2sob3N0cmVhbSYgb3V0cyk7CgpzdHJ1Y3QgSW9zdHJlYW1faW5pdCB7IH0gOyAgIAoKaW5s
aW5lIGlvcyYgZGVjKGlvcyYgaSkKeyBpLnNldGYoaW9zOjpkZWMsIGlvczo6ZGVjfGlvczo6aGV4
fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KaW5saW5lIGlvcyYgaGV4KGlvcyYgaSkKeyBpLnNldGYo
aW9zOjpoZXgsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KaW5saW5l
IGlvcyYgb2N0KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpvY3QsIGlvczo6ZGVjfGlvczo6aGV4fGlv
czo6b2N0KTsgcmV0dXJuIGk7IH0KfSAgCgoKIyAyMSAiQUNFUGFyYW1zLmgiIDIKCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L2lvbWFuaXAuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJm
YWNlCgoKCgoKZXh0ZXJuICJDKysiIHsKIAogCiAKCiAKIAogCiAKdGVtcGxhdGU8Y2xhc3MgVFA+
IGNsYXNzIHNtYW5pcDsgIAoKdGVtcGxhdGU8Y2xhc3MgVFA+IGNsYXNzIHNhcHAgewogICAgaW9z
JiAoKl9mKShpb3MmLCBUUCk7CnB1YmxpYzogCiAgICBzYXBwKGlvcyYgKCpmKShpb3MmLCBUUCkp
IDogX2YoZikge30KICAgICAKICAgIHNtYW5pcDxUUD4gb3BlcmF0b3IoKShUUCBhKSAKICAgICAg
eyByZXR1cm4gc21hbmlwPFRQPihfZiwgYSk7IH0KfTsKCnRlbXBsYXRlPGNsYXNzIFRQPgppbmxp
bmUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiBpLCBjb25zdCBzbWFuaXA8VFA+JiBtKTsK
dGVtcGxhdGU8Y2xhc3MgVFA+CmlubGluZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG8s
IGNvbnN0IHNtYW5pcDxUUD4mIG0pOwoKdGVtcGxhdGUgPGNsYXNzIFRQPiBjbGFzcyBzbWFuaXAg
ewogICAgaW9zJiAoKl9mKShpb3MmLCBUUCk7CiAgICBUUCBfYTsKcHVibGljOgogICAgc21hbmlw
KGlvcyYgKCpmKShpb3MmLCBUUCksIFRQIGEpIDogX2YoZiksIF9hKGEpIHt9CiAgICAgCiAgICBm
cmllbmQgCiAgICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4gPD4oaXN0cmVhbSYgaSwgY29uc3Qgc21h
bmlwPFRQPiYgbSk7CiAgICBmcmllbmQKICAgICAgb3N0cmVhbSYgb3BlcmF0b3I8PCA8Pihvc3Ry
ZWFtJiBvLCBjb25zdCBzbWFuaXA8VFA+JiBtKTsKfTsKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBzbWFuaXA8aW50PjsKX19leHRlbnNpb25fXyBleHRlcm4gdGVtcGxhdGUg
Y2xhc3Mgc21hbmlwPGlvczo6Zm10ZmxhZ3M+OwoKCnRlbXBsYXRlPGNsYXNzIFRQPgppbmxpbmUg
aXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiBpLCBjb25zdCBzbWFuaXA8VFA+JiBtKQp7ICgq
bS5fZikoaSwgbS5fYSk7IHJldHVybiBpOyB9Cgp0ZW1wbGF0ZTxjbGFzcyBUUD4KaW5saW5lIG9z
dHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgbywgY29uc3Qgc21hbmlwPFRQPiYgbSkKeyAoKm0u
X2YpKG8sIG0uX2EpOyByZXR1cm4gbzt9CgoKX19leHRlbnNpb25fXyBleHRlcm4gCnRlbXBsYXRl
IGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNvbnN0IHNtYW5pcDxpbnQ+Jik7Cl9fZXh0
ZW5zaW9uX18gZXh0ZXJuIAp0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBj
b25zdCBzbWFuaXA8aW9zOjpmbXRmbGFncz4mKTsKX19leHRlbnNpb25fXyBleHRlcm4gCnRlbXBs
YXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHNtYW5pcDxpbnQ+Jik7Cl9f
ZXh0ZW5zaW9uX18gZXh0ZXJuIAp0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0m
LCBjb25zdCBzbWFuaXA8aW9zOjpmbXRmbGFncz4mKTsKCgogCiAKIAogCnRlbXBsYXRlPGNsYXNz
IFRQPiBjbGFzcyBpbWFuaXA7IAoKdGVtcGxhdGU8Y2xhc3MgVFA+IGNsYXNzIGlhcHAgewogICAg
aXN0cmVhbSYgKCpfZikoaXN0cmVhbSYsIFRQKTsKcHVibGljOiAKICAgIGlhcHAoaXN0cmVhbSYg
KCpmKShpc3RyZWFtJixUUCkpIDogX2YoZikge30KICAgICAKICAgIGltYW5pcDxUUD4gb3BlcmF0
b3IoKShUUCBhKQogICAgICAgeyByZXR1cm4gaW1hbmlwPFRQPihfZiwgYSk7IH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBUUD4KaW5saW5lIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNvbnN0
IGltYW5pcDxUUD4mKTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4gY2xhc3MgaW1hbmlwIHsKICAgIGlz
dHJlYW0mICgqX2YpKGlzdHJlYW0mLCBUUCk7CiAgICBUUCBfYTsKcHVibGljOgogICAgaW1hbmlw
KGlzdHJlYW0mICgqZikoaXN0cmVhbSYsIFRQKSwgVFAgYSkgOiBfZihmKSwgX2EoYSkge30KICAg
ICAKICAgIGZyaWVuZAogICAgICBpc3RyZWFtJiBvcGVyYXRvcj4+IDw+KGlzdHJlYW0mIGksIGNv
bnN0IGltYW5pcDxUUD4mIG0pOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFRQPgppbmxpbmUgaXN0cmVh
bSYgb3BlcmF0b3I+Pihpc3RyZWFtJiBpLCBjb25zdCBpbWFuaXA8VFA+JiBtKQp7IHJldHVybiAo
Km0uX2YpKCBpLCBtLl9hKTsgfQoKIAogCiAKIAp0ZW1wbGF0ZTxjbGFzcyBUUD4gY2xhc3Mgb21h
bmlwOyAKCnRlbXBsYXRlPGNsYXNzIFRQPiBjbGFzcyBvYXBwIHsKICAgIG9zdHJlYW0mICgqX2Yp
KG9zdHJlYW0mLCBUUCk7CnB1YmxpYzogCiAgICBvYXBwKG9zdHJlYW0mICgqZikob3N0cmVhbSYs
VFApKSA6IF9mKGYpIHt9CiAgICAgCiAgICBvbWFuaXA8VFA+IG9wZXJhdG9yKCkoVFAgYSkKICAg
ICAgeyByZXR1cm4gb21hbmlwPFRQPihfZiwgYSk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4K
aW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IG9tYW5pcDxUUD4mKTsK
CnRlbXBsYXRlIDxjbGFzcyBUUD4gY2xhc3Mgb21hbmlwIHsKICAgIG9zdHJlYW0mICgqX2YpKG9z
dHJlYW0mLCBUUCk7CiAgICBUUCBfYTsKcHVibGljOgogICAgb21hbmlwKG9zdHJlYW0mICgqZiko
b3N0cmVhbSYsIFRQKSwgVFAgYSkgOiBfZihmKSwgX2EoYSkge30KICAgICAKICAgIGZyaWVuZAog
ICAgICBvc3RyZWFtJiBvcGVyYXRvcjw8IDw+KG9zdHJlYW0mIG8sIGNvbnN0IG9tYW5pcDxUUD4m
IG0pOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFRQPgppbmxpbmUgb3N0cmVhbSYgb3BlcmF0b3I8PChv
c3RyZWFtJiBvLCBjb25zdCBvbWFuaXA8VFA+JiBtKQp7IHJldHVybiAoKm0uX2YpKG8sIG0uX2Ep
OyB9CgogCiAKIAoKIAogCiAKIAoKCgoKCmV4dGVybiBpb3MmIF9faW9tYW5pcF9zZXRiYXNlICAo
aW9zJiwgICBpbnQgKTsgaW5saW5lICAgc21hbmlwIDwgIGludCA+ICAgc2V0YmFzZSAgKCAgaW50
ICBuKSB7IHJldHVybiAgIHNtYW5pcCA8ICBpbnQgPiAoX19pb21hbmlwX3NldGJhc2UgLCBuKTsg
fSAKZXh0ZXJuIGlvcyYgX19pb21hbmlwX3NldGZpbGwgIChpb3MmLCAgIGludCApOyBpbmxpbmUg
ICBzbWFuaXAgPCAgaW50ID4gICBzZXRmaWxsICAoICBpbnQgIG4pIHsgcmV0dXJuICAgc21hbmlw
IDwgIGludCA+IChfX2lvbWFuaXBfc2V0ZmlsbCAsIG4pOyB9IApleHRlcm4gaW9zJiBfX2lvbWFu
aXBfc2V0cHJlY2lzaW9uICAoaW9zJiwgICBpbnQgKTsgaW5saW5lICAgc21hbmlwIDwgIGludCA+
ICAgc2V0cHJlY2lzaW9uICAoICBpbnQgIG4pIHsgcmV0dXJuICAgc21hbmlwIDwgIGludCA+IChf
X2lvbWFuaXBfc2V0cHJlY2lzaW9uICwgbik7IH0gCmV4dGVybiBpb3MmIF9faW9tYW5pcF9zZXR3
ICAoaW9zJiwgICBpbnQgKTsgaW5saW5lICAgc21hbmlwIDwgIGludCA+ICAgc2V0dyAgKCAgaW50
ICBuKSB7IHJldHVybiAgIHNtYW5pcCA8ICBpbnQgPiAoX19pb21hbmlwX3NldHcgLCBuKTsgfSAK
CmV4dGVybiBpb3MmIF9faW9tYW5pcF9yZXNldGlvc2ZsYWdzICAoaW9zJiwgICBpb3M6OmZtdGZs
YWdzICk7IGlubGluZSAgIHNtYW5pcCA8ICBpb3M6OmZtdGZsYWdzID4gICByZXNldGlvc2ZsYWdz
ICAoICBpb3M6OmZtdGZsYWdzICBuKSB7IHJldHVybiAgIHNtYW5pcCA8ICBpb3M6OmZtdGZsYWdz
ID4gKF9faW9tYW5pcF9yZXNldGlvc2ZsYWdzICwgbik7IH0gCmV4dGVybiBpb3MmIF9faW9tYW5p
cF9zZXRpb3NmbGFncyAgKGlvcyYsICAgaW9zOjpmbXRmbGFncyApOyBpbmxpbmUgICBzbWFuaXAg
PCAgaW9zOjpmbXRmbGFncyA+ICAgc2V0aW9zZmxhZ3MgICggIGlvczo6Zm10ZmxhZ3MgIG4pIHsg
cmV0dXJuICAgc21hbmlwIDwgIGlvczo6Zm10ZmxhZ3MgPiAoX19pb21hbmlwX3NldGlvc2ZsYWdz
ICwgbik7IH0gCn0gIAoKCiMgMjIgIkFDRVBhcmFtcy5oIiAyCgojIDEgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8yLjk1LjQvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9mc3RyZWFtLmgi
IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKZXh0
ZXJuICJDKysiIHsKY2xhc3MgZnN0cmVhbWJhc2UgOiB2aXJ0dWFsIHB1YmxpYyBpb3MgewoKICAg
IG11dGFibGUgZmlsZWJ1ZiBfX215X2ZiOyAgCgogICAgdm9pZCBfX2ZiX2luaXQgKCk7CiAgcHVi
bGljOgogICAgZnN0cmVhbWJhc2UoKTsKICAgIGZzdHJlYW1iYXNlKGludCBmZCk7CiAgICBmc3Ry
ZWFtYmFzZShpbnQgZmQsIGNoYXIgKnAsIGludCBsKTsgIAogICAgZnN0cmVhbWJhc2UoY29uc3Qg
Y2hhciAqbmFtZSwgaW50IG1vZGUsIGludCBwcm90PTA2NjQpOwogICAgdm9pZCBjbG9zZSgpOwoK
ICAgIGZpbGVidWYqIHJkYnVmKCkgY29uc3QgeyByZXR1cm4gJl9fbXlfZmI7IH0KCgoKICAgIHZv
aWQgb3Blbihjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZSwgaW50IHByb3Q9MDY2NCk7CiAgICBp
bnQgaXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIHJkYnVmKCktPmlzX29wZW4oKTsgfQogICAgdm9p
ZCBzZXRidWYoY2hhciAqcHRyLCBpbnQgbGVuKSB7IHJkYnVmKCktPnNldGJ1ZihwdHIsIGxlbik7
IH0KICAgIHZvaWQgYXR0YWNoKGludCBmZCk7CgoKCgp9OwoKY2xhc3MgaWZzdHJlYW0gOiBwdWJs
aWMgZnN0cmVhbWJhc2UsIHB1YmxpYyBpc3RyZWFtIHsKICBwdWJsaWM6CiAgICBpZnN0cmVhbSgp
IDogZnN0cmVhbWJhc2UoKSB7IH0KICAgIGlmc3RyZWFtKGludCBmZCkgOiBmc3RyZWFtYmFzZShm
ZCkgeyB9CiAgICBpZnN0cmVhbShpbnQgZmQsIGNoYXIgKnAsIGludCBsKSA6IGZzdHJlYW1iYXNl
KGZkLCBwLCBsKSB7IH0gIAogICAgaWZzdHJlYW0oY29uc3QgY2hhciAqbmFtZSwgaW50IG1vZGU9
aW9zOjppbiwgaW50IHByb3Q9MDY2NCkKCTogZnN0cmVhbWJhc2UobmFtZSwgbW9kZSB8IGlvczo6
aW4sIHByb3QpIHsgfQogICAgdm9pZCBvcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlPWlv
czo6aW4sIGludCBwcm90PTA2NjQpCgl7IGZzdHJlYW1iYXNlOjpvcGVuKG5hbWUsIG1vZGUgfCBp
b3M6OmluLCBwcm90KTsgfQp9OwoKY2xhc3Mgb2ZzdHJlYW0gOiBwdWJsaWMgZnN0cmVhbWJhc2Us
IHB1YmxpYyBvc3RyZWFtIHsKICBwdWJsaWM6CiAgICBvZnN0cmVhbSgpIDogZnN0cmVhbWJhc2Uo
KSB7IH0KICAgIG9mc3RyZWFtKGludCBmZCkgOiBmc3RyZWFtYmFzZShmZCkgeyB9CiAgICBvZnN0
cmVhbShpbnQgZmQsIGNoYXIgKnAsIGludCBsKSA6IGZzdHJlYW1iYXNlKGZkLCBwLCBsKSB7IH0g
IAogICAgb2ZzdHJlYW0oY29uc3QgY2hhciAqbmFtZSwgaW50IG1vZGU9aW9zOjpvdXQsIGludCBw
cm90PTA2NjQpCgk6IGZzdHJlYW1iYXNlKG5hbWUsIG1vZGUgfCBpb3M6Om91dCwgcHJvdCkgeyB9
CiAgICB2b2lkIG9wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IG1vZGU9aW9zOjpvdXQsIGludCBw
cm90PTA2NjQpCgl7IGZzdHJlYW1iYXNlOjpvcGVuKG5hbWUsIG1vZGUgfCBpb3M6Om91dCwgcHJv
dCk7IH0KfTsKCmNsYXNzIGZzdHJlYW0gOiBwdWJsaWMgZnN0cmVhbWJhc2UsIHB1YmxpYyBpb3N0
cmVhbSB7CiAgcHVibGljOgogICAgZnN0cmVhbSgpIDogZnN0cmVhbWJhc2UoKSB7IH0KICAgIGZz
dHJlYW0oaW50IGZkKSA6IGZzdHJlYW1iYXNlKGZkKSB7IH0KICAgIGZzdHJlYW0oY29uc3QgY2hh
ciAqbmFtZSwgaW50IG1vZGUsIGludCBwcm90PTA2NjQpCgk6IGZzdHJlYW1iYXNlKG5hbWUsIG1v
ZGUsIHByb3QpIHsgfQogICAgZnN0cmVhbShpbnQgZmQsIGNoYXIgKnAsIGludCBsKSA6IGZzdHJl
YW1iYXNlKGZkLCBwLCBsKSB7IH0gIAogICAgdm9pZCBvcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGlu
dCBtb2RlLCBpbnQgcHJvdD0wNjY0KQoJeyBmc3RyZWFtYmFzZTo6b3BlbihuYW1lLCBtb2RlLCBw
cm90KTsgfQp9Owp9ICAKCiMgMjMgIkFDRVBhcmFtcy5oIiAyCgoKIyAxICJnZW5lcmljLmgiIDEK
IAogCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKdHlwZWRlZiBp
bnQgKCpHUFQpKGludCxjaGFyKik7CgoKCgoKCgoKCiMgMjUgIkFDRVBhcmFtcy5oIiAyCgoKIAoK
CgogCgoKCgoKCgoKCiAKCgogCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCgoK
IAoKCgogCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCgogCgoKCgoKCgogCiAKCgoKCiAKCgoKIAoKCgogCgoKCiAKCgoKCgogCgoK
CgoKCiAKCgoKIAoKCgoKIAoKCgoKCgoKCgogCgoKCgoKIAoKCgoKCgoKCgogCgoKCgogCgoKCgoK
CgoKIAoKCgoKCiAKCgoKCgoKdHlwZWRlZiBpbnQgSU5URUdFUjsKCnR5cGVkZWYgZmxvYXQgUkVB
TDsKCnR5cGVkZWYgZG91YmxlIERPVUJMRTsKdHlwZWRlZiBjaGFyIENIQVJBQ1RFUjsKCgogCgoK
IAogCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgojIDEgIkFDRUZvcnRyYW5JbnRlcmZhY2Vz
LmgiIDEKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKIAogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiMgMjg0ICJBQ0VQYXJhbXMuaCIgMgoKCgppbmxpbmUgaW50IG1heChjb25z
dCBpbnQgYSwgY29uc3QgaW50IGIpCiAgICAgICB7IHJldHVybigoYSA+IGIpID8gYSA6IGIpOyB9
CmlubGluZSBpbnQgbWluKGNvbnN0IGludCBhLCBjb25zdCBpbnQgYikKICAgICAgIHsgcmV0dXJu
KChhIDwgYikgPyBhIDogYik7IH0KCmlubGluZSB1bnNpZ25lZCBtYXgoY29uc3QgdW5zaWduZWQg
YSwgY29uc3QgdW5zaWduZWQgYikKICAgICAgIHsgcmV0dXJuKChhID4gYikgPyBhIDogYik7IH0K
aW5saW5lIHVuc2lnbmVkIG1pbihjb25zdCB1bnNpZ25lZCBhLCBjb25zdCB1bnNpZ25lZCBiKQog
ICAgICAgeyByZXR1cm4oKGEgPCBiKSA/IGEgOiBiKTsgfQoKIAogCiAKIAoKCgoKCgogCgogCiAK
IAoKIyAxICJEQUdIUGFyYW1zLmgiIDEKCgoKIAoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAogCgog
CgogCgoKCiAKCgoKCgoKCgogCgoKIAoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKIAoKCiAKCgoKCgoK
CgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoK
CgoKCgoKIAogCgoKCgogCgoKCiAKCgoKIAoKCgogCgoKCgoKIAoKCgoKCgogCgoKCiAKCgoKCiAK
IAogCiAKIAogCiAKCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAoKIAoKCgoKIAoKCgoKCgoKCiAK
CgoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAKIAogCiAKIAogCgogCiAKIAogCiAK
CiAKIAogCiAKCiAKIAogCiAKCiAKIAogCgogCgoKCgoKCiAKIAogCiAKIAogCgogCiAKIAogCgog
CiAKIAogCgogCiAKIAogCgogCiAKIAogCiAKCiAKCiMgMSAiREFHSFBhcmFtc09sZC5oIiAxCgoK
CiAKCgoKCgoKCgoKCiAKCgoKIAoKCgogCgoKCiAKCgoKCgojIDI5MyAiREFHSFBhcmFtcy5oIiAy
CgoKCiMgMzEzICJBQ0VQYXJhbXMuaCIgMgoKCgojIDE0ICJBQ0VEaXN0cmlidXRpb24uaCIgMgoK
IyAxICJBQ0VEZWZhdWx0cy5oIiAxCgoKCiAgCgoKCgoKCgoKCgogCgoKCgoKCiAKIAogCgoKCiAK
IAogCgoKIAogCiAKCgoKIAogCiAKIAogCgoKIAogCiAKCgogCiAKIAoKCiAKIAogCgoKIAogCiAK
CgogCiAKIAoKCiAKIAogCgogCiAKIAoKCiAKIAogCgoKCgogCiAKIAoKCgoKCgoKCgoKCgoKCgoK
CgogCiAKIAoKCgoKIAogCiAKIAogCgoKCgogCiAKIAoKCgojIDE1ICJBQ0VEaXN0cmlidXRpb24u
aCIgMgoKCiMgMSAiTGlzdC5oIiAxCgoKCiAKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9t
YWxsb2MuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKCgoKCgoKIAoKCgoKCgoKIAoKIAoKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlw
ZWRlZiBpbnQgcHRyZGlmZl90OwoKCgoKCgoKCgogCgoKCgogCgogCgoKIyAxODggIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoK
CiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgojIDQ0ICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiIDIgMwoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgogCgoKCiMgOTMgIi91c3IvaW5jbHVkZS9tYWxsb2MuaCIgMwoKCgoKCgoK
CgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgpleHRlcm4gaW50IF9fbWFsbG9jX2luaXRpYWxpemVk
OwoKIAoKCgoKIApleHRlcm4gdm9pZCAqICBtYWxsb2MgIChzaXplX3QgX19zaXplKSAgdGhyb3cg
KCkgICAgOwoKIApleHRlcm4gdm9pZCAqICBjYWxsb2MgIChzaXplX3QgX19ubWVtYiwgc2l6ZV90
IF9fc2l6ZSkgIHRocm93ICgpICAKICAgICAgICA7CgogCgpleHRlcm4gdm9pZCAqICByZWFsbG9j
ICAodm9pZCAqICBfX3B0ciwKCQkJCQkgICBzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIAogICAg
ICAgIDsKCiAKZXh0ZXJuIHZvaWQgZnJlZSAgKHZvaWQgKiAgX19wdHIpICB0aHJvdyAoKSAgOwoK
IApleHRlcm4gdm9pZCBjZnJlZSAgKHZvaWQgKiAgX19wdHIpICB0aHJvdyAoKSAgOwoKIApleHRl
cm4gdm9pZCAqICBtZW1hbGlnbiAgKHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkg
IHRocm93ICgpICA7CgogCmV4dGVybiB2b2lkICogIHZhbGxvYyAgKHNpemVfdCBfX3NpemUpICB0
aHJvdyAoKSAgICA7CgogCgpleHRlcm4gdm9pZCAqICAgcHZhbGxvYyAgKHNpemVfdCBfX3NpemUp
ICB0aHJvdyAoKSAgCiAgICAgICAgOwoKIAoKZXh0ZXJuIHZvaWQgKiAgKCpfX21vcmVjb3JlKSAg
KHB0cmRpZmZfdCBfX3NpemUpICA7CgogCmV4dGVybiB2b2lkICogIF9fZGVmYXVsdF9tb3JlY29y
ZSAgKHB0cmRpZmZfdCBfX3NpemUpICB0aHJvdyAoKSAgCiAgICAgICAgOwoKIApzdHJ1Y3QgbWFs
bGluZm8gewogIGludCBhcmVuYTsgICAgIAogIGludCBvcmRibGtzOyAgIAogIGludCBzbWJsa3M7
ICAgIAogIGludCBoYmxrczsgICAgIAogIGludCBoYmxraGQ7ICAgIAogIGludCB1c21ibGtzOyAg
IAogIGludCBmc21ibGtzOyAgIAogIGludCB1b3JkYmxrczsgIAogIGludCBmb3JkYmxrczsgIAog
IGludCBrZWVwY29zdDsgIAp9OwoKIApleHRlcm4gc3RydWN0IG1hbGxpbmZvIG1hbGxpbmZvICAo
dm9pZCkgIHRocm93ICgpICA7CgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKZXh0ZXJuIGludCBt
YWxsb3B0ICAoaW50IF9fcGFyYW0sIGludCBfX3ZhbCkgIHRocm93ICgpICA7CgogCgpleHRlcm4g
aW50IG1hbGxvY190cmltICAoc2l6ZV90IF9fcGFkKSAgdGhyb3cgKCkgIDsKCiAKCmV4dGVybiBz
aXplX3QgbWFsbG9jX3VzYWJsZV9zaXplICAodm9pZCAqICBfX3B0cikgIHRocm93ICgpICA7Cgog
CmV4dGVybiB2b2lkIG1hbGxvY19zdGF0cyAgKHZvaWQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4g
dm9pZCAqICBtYWxsb2NfZ2V0X3N0YXRlICAodm9pZCkgIHRocm93ICgpICA7CgogCgpleHRlcm4g
aW50IG1hbGxvY19zZXRfc3RhdGUgICh2b2lkICogIF9fcHRyKSAgdGhyb3cgKCkgIDsKCgogCgoK
ZXh0ZXJuIHZvaWQgKCpfX21hbGxvY19pbml0aWFsaXplX2hvb2spICAodm9pZCkgIDsKIApleHRl
cm4gdm9pZCAoKl9fZnJlZV9ob29rKSAgKHZvaWQgKiAgX19wdHIsCgkJCQkJX19jb25zdCB2b2lk
ICogKSAgOwpleHRlcm4gdm9pZCAqICAoKl9fbWFsbG9jX2hvb2spICAoc2l6ZV90IF9fc2l6ZSwK
CQkJCQkJICAgIF9fY29uc3Qgdm9pZCAqICkgIDsKZXh0ZXJuIHZvaWQgKiAgKCpfX3JlYWxsb2Nf
aG9vaykgICh2b2lkICogIF9fcHRyLAoJCQkJCQkgICAgIHNpemVfdCBfX3NpemUsCgkJCQkJCSAg
ICAgX19jb25zdCB2b2lkICogKSAgOwpleHRlcm4gdm9pZCAqICAoKl9fbWVtYWxpZ25faG9vaykg
IChzaXplX3QgX19hbGlnbm1lbnQsCgkJCQkJCSAgICAgIHNpemVfdCBfX3NpemUsCgkJCQkJCSAg
ICAgIF9fY29uc3Qgdm9pZCAqICkgIDsKZXh0ZXJuIHZvaWQgKCpfX2FmdGVyX21vcmVjb3JlX2hv
b2spICAodm9pZCkgIDsKCiAKZXh0ZXJuIHZvaWQgX19tYWxsb2NfY2hlY2tfaW5pdCAgKHZvaWQp
ICB0aHJvdyAoKSAgOwoKCgp9OyAgCgoKCiMgMTYgIkxpc3QuaCIgMgoKIyAxICJmYXN0QWxsb2Mu
aCIgMQoKCgogCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIyA2MyAi
L3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCgoKZXh0ZXJuICJDIiB7IAoKIApleHRlcm4gdm9pZCBf
X2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9f
ZmlsZSwKCQkJICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9u
KQogICAgIHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgogCmV4dGVy
biB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAq
X19maWxlLAoJCQkJICB1bnNpZ25lZCBpbnQgX19saW5lLAoJCQkJICBfX2NvbnN0IGNoYXIgKl9f
ZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsK
CgogCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0
IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAo
KF9fbm9yZXR1cm5fXykpOwoKCn0gCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCiMgMjAg
ImZhc3RBbGxvYy5oIiAyCgoKY2xhc3MgZmFzdEFsbG9jIAogIHsKcHVibGljOgogICBzdHJ1Y3Qg
bGluayB7IHN0cnVjdCBsaW5rICpuZXh0OyB9OyAgIAogICBzdHJ1Y3QgbG9uZ2xpbmsgeyAKICAg
ICAgc3RydWN0IGxpbmsgKml0ZW07IHN0cnVjdCBsb25nbGluayAqbmV4dDsgIAogICAgICBpbmxp
bmUgbG9uZ2xpbmsoKSA6aXRlbSgwKSwgbmV4dCgwKSB7fSAKICAgICAgaW5saW5lIH5sb25nbGlu
aygpIHsgCiAgICAgICAgaWYgKGl0ZW0pIGRlbGV0ZSBbXSAoY2hhciopIGl0ZW07IAogICAgICAg
IGlmIChuZXh0KSBkZWxldGUgbmV4dDsgCiAgICAgIH0KICAgfTsKcHJpdmF0ZTogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgdW5zaWduZWQgaW50IGJsb2Nrc2l6ZTsg
ICAgICAgICAgICAgICAKICAgdW5zaWduZWQgaW50IG5ibG9ja3M7ICAgICAgICAgICAgICAgICAK
ICAgbGluayAqaGVhZDsgICAgICAgICAgICAgICAgICAgIAogICBsb25nbGluayAqdG9wOyAgICAg
ICAgICAgICAgICAgCiAgIGxvbmdsaW5rICpjdXI7ICAgICAgICAgICAgICAgICAKICAgZmFzdEFs
bG9jKGNvbnN0IGZhc3RBbGxvYyYpOyAgICAgICAgICAKICAgdm9pZCBvcGVyYXRvciA9IChjb25z
dCBmYXN0QWxsb2MmKTsgICAKICAgdm9pZCBtYWxsb2MoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAKcHVibGljOgogICBmYXN0QWxsb2MoY29uc3QgdW5zaWduZWQgaW50IHNpemUsIGNvbnN0IHVu
c2lnbmVkIGludCBhdGF0aW1lKTsKICAgaW5saW5lIH5mYXN0QWxsb2MoKSB7IGRlbGV0ZSB0b3A7
IH0KCiAgIGlubGluZSB2b2lkICphbGxvYygpCiAgICAgewogICAgICBpZiAoaGVhZCA9PSAoKHN0
cnVjdCBsaW5rICopIDApKSBtYWxsb2MoKTsKICAgICAgc3RydWN0IGxpbmsgKmJsb2NrID0gaGVh
ZDsKICAgICAgaGVhZCA9IGJsb2NrLT5uZXh0OwogICAgICByZXR1cm4oYmxvY2spOwogICAgIH0K
CiAgIGlubGluZSB2b2lkIGZyZWUodm9pZCAqYmxvY2spCiAgICAgewogICAgICAoKHN0cnVjdCBs
aW5rICopIGJsb2NrKS0+bmV4dCA9IGhlYWQ7CiAgICAgIGhlYWQgPSAoc3RydWN0IGxpbmsgKikg
YmxvY2s7CiAgICAgfQogIH07CgoKIyAxNyAiTGlzdC5oIiAyCgoKCgoKCgoKdGVtcGxhdGUgPGNs
YXNzIFR5cGU+IGNsYXNzIExpc3Q7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KY2xhc3MgTGlzdEl0
ZW0KICB7CiAgIFR5cGUgaXRlbTsKCgoKICAgY2xhc3MgTGlzdEl0ZW08VHlwZT4gKm5leHQ7CgoK
ICAgaW5saW5lIExpc3RJdGVtKGNvbnN0IFR5cGUmIHQpIDogaXRlbSh0KSwgbmV4dCgwKSB7IH0K
ICAgaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgdm9pZCogYnVmKSB7IHJl
dHVybiBidWY7IH0KIAoKCiAgIGlubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBidWYs
IHNpemVfdCBzaXplKSB7fQogICBpbmxpbmUgfkxpc3RJdGVtKCkge30KCiAgIGZyaWVuZCBjbGFz
cyBMaXN0PFR5cGU+OwogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KY2xhc3MgTGlzdAogIHsK
ICAgZmFzdEFsbG9jIGJsb2NrOwoKICAgaW50IG47CQkJIAogICBMaXN0SXRlbTxUeXBlPiAqaGVh
ZDsJIAogICBMaXN0SXRlbTxUeXBlPiAqdGFpbDsJIAoKcHJpdmF0ZToKICAgdm9pZCBvcGVyYXRv
ciA9IChjb25zdCBMaXN0PFR5cGU+Jik7CiAgIExpc3QoY29uc3QgTGlzdDxUeXBlPiYpOwoKcHVi
bGljOgogICBpbmxpbmUgTGlzdCgpIDogYmxvY2soc2l6ZW9mKExpc3RJdGVtPFR5cGU+KSwgKDMy
KSApLCAKCQkgICBuKDApLCBoZWFkKDApLCB0YWlsKDApIHsgfQogICBpbmxpbmUgTGlzdChjb25z
dCBpbnQgY250KSAKICAgICAgICA6IGJsb2NrKHNpemVvZihMaXN0SXRlbTxUeXBlPiksIGNudCks
IAogICAgICAgICAgbigwKSwgaGVhZCgwKSwgdGFpbCgwKSB7IH0KICAgaW5saW5lIGludCBudW1i
ZXIoKSBjb25zdCB7IHJldHVybihuKTsgfQogICBpbmxpbmUgaW50IGlzZW1wdHkoKSBjb25zdCB7
IHJldHVybihuID09IDApOyB9CiAgIH5MaXN0KCk7CgogICAgCiAgIHZvaWQgYWRkKGNvbnN0IFR5
cGUmIHQpOwogICB2b2lkIGFkZChjb25zdCBMaXN0PFR5cGU+JiBvdGhlcik7CiAgIHZvaWQgY29t
YmluZShMaXN0PFR5cGU+JiBvdGhlcik7CiAgIHZvaWQgcG9wKCk7CiAgIHZvaWQgZW1wdHkoKTsK
ICAgaW5saW5lIGNvbnN0IFR5cGUmIGZpcnN0KCkgY29uc3QgeyByZXR1cm4oaGVhZC0+aXRlbSk7
IH0KICAgdm9pZCBhcnJheShUeXBlICoqJiBhcnJheSwgaW50ICZjbnQpIGNvbnN0OwogICB2b2lk
IGFycmF5KFR5cGUgKiYgYXJyYXksIGludCAmY250KSBjb25zdDsKICAgaW5saW5lIHZvaWQgcmVz
ZXQoKSB7IG4gPSAwOyBoZWFkID0gMDsgdGFpbCA9IDA7IH0KCiAgICAKICAgaW5saW5lIExpc3RJ
dGVtPFR5cGU+ICpIZWFkKCkgY29uc3QgeyByZXR1cm4oaGVhZCk7IH0KICAgaW5saW5lIExpc3RJ
dGVtPFR5cGU+ICpUYWlsKCkgY29uc3QgeyByZXR1cm4odGFpbCk7IH0KICAgaW5saW5lIExpc3RJ
dGVtPFR5cGU+ICpOZXh0KExpc3RJdGVtPFR5cGU+ICpsaXN0aXRlbSkgIGNvbnN0Cgl7IHJldHVy
biAoIChsaXN0aXRlbSkgPyBsaXN0aXRlbS0+bmV4dCA6IGhlYWQgKTsgfQogICBpbmxpbmUgVHlw
ZSYgSXRlbShMaXN0SXRlbTxUeXBlPiAqbGlzdGl0ZW0pIGNvbnN0Cgl7IHJldHVybiAoIChsaXN0
aXRlbSkgPyBsaXN0aXRlbS0+aXRlbSA6IGhlYWQtPml0ZW0gKTsgfQoKICAgIAogICB2b2lkIHJl
bW92ZShMaXN0SXRlbTxUeXBlPiomIHBpLCBMaXN0SXRlbTxUeXBlPiomIGxpKTsKIH07CgoKIyAx
ICJMaXN0LmMiIDEKCgoKIAoKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpMaXN0PFR5cGU+
Ojp+TGlzdCgpCiAgewogICB3aGlsZSAoaGVhZCAhPSAoTGlzdEl0ZW08VHlwZT4gKikgMCkKICAg
ICB7CiAgICAgIExpc3RJdGVtPFR5cGU+ICp0bXBpdGVtID0gaGVhZDsKICAgICAgaGVhZCA9IGhl
YWQtPm5leHQ7CiAgICAgICAKICAgICAgYmxvY2suZnJlZSh0bXBpdGVtKTsKICAgICB9CiAgfQoK
dGVtcGxhdGUgPGNsYXNzIFR5cGU+CnZvaWQgTGlzdDxUeXBlPjo6ZW1wdHkoKQogIHsKICAgd2hp
bGUgKGhlYWQgIT0gKExpc3RJdGVtPFR5cGU+ICopIDApCiAgICAgewogICAgICBMaXN0SXRlbTxU
eXBlPiAqdG1waXRlbSA9IGhlYWQ7CiAgICAgIGhlYWQgPSBoZWFkLT5uZXh0OwogICAgICAgCiAg
ICAgIGJsb2NrLmZyZWUodG1waXRlbSk7CiAgICAgfQogICBuID0gMDsKICAgaGVhZCA9IDA7CiAg
IHRhaWwgPSAwOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgp2b2lkIExpc3Q8VHlwZT46OmFk
ZChjb25zdCBUeXBlJiB0KQogIHsKICAgTGlzdEl0ZW08VHlwZT4gKml0ZW0gPSBuZXcgKGJsb2Nr
LmFsbG9jKCkpIExpc3RJdGVtPFR5cGU+KHQpOwogICBpZiAoIWhlYWQpIGhlYWQgPSBpdGVtOwog
ICBpZiAodGFpbCkgdGFpbC0+bmV4dCA9IGl0ZW07CiAgIHRhaWwgPSBpdGVtOwogICBuKys7CiAg
fQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CnZvaWQgTGlzdDxUeXBlPjo6YWRkKGNvbnN0IExpc3Q8
VHlwZT4mIG90aGVyKQogIHsKICAgZm9yIChMaXN0SXRlbTxUeXBlPiAqcCA9IG90aGVyLmhlYWQ7
IHA7IHAgPSBwLT5uZXh0KQogICAgIHsKICAgICAgTGlzdEl0ZW08VHlwZT4gKml0ZW0gPSBuZXcg
KGJsb2NrLmFsbG9jKCkpIExpc3RJdGVtPFR5cGU+KHAtPml0ZW0pOwogICAgICBpZiAoIWhlYWQp
IGhlYWQgPSBpdGVtOwogICAgICBpZiAodGFpbCkgdGFpbC0+bmV4dCA9IGl0ZW07CiAgICAgIHRh
aWwgPSBpdGVtOwogICAgICBuKys7CiAgICAgfQogIH0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgp2
b2lkIExpc3Q8VHlwZT46OnBvcCggKQogIHsKICAgaWYgKG4gPiAwKQogICAgIHsKICAgICAgTGlz
dEl0ZW08VHlwZT4gKmJ5ZWJ5ZSA9IGhlYWQ7CiAgICAgIGhlYWQgPSBoZWFkLT5uZXh0OwogICAg
ICBpZiAoIWhlYWQpIHRhaWwgPSAwOwogICAgICAgCiAgICAgIGJsb2NrLmZyZWUoYnllYnllKTsK
ICAgICAgbi0tOwogICAgIH0KICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4Kdm9pZCBMaXN0PFR5
cGU+Ojpjb21iaW5lKExpc3Q8VHlwZT4mIG90aGVyKQogIHsKICAgaWYgKG90aGVyLm4gPiAwKQog
ICAgIHsKICAgICAgaWYgKG4gPT0gMCkKICAgICAgICB7CiAgICAgICAgIGhlYWQgPSBvdGhlci5o
ZWFkOwogICAgICAgICB0YWlsID0gb3RoZXIudGFpbDsKICAgICAgICAgbiAgICA9IG90aGVyLm47
CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICB0YWlsLT5uZXh0ID0gb3Ro
ZXIuaGVhZDsKICAgICAgICAgdGFpbCA9IG90aGVyLnRhaWw7CiAgICAgICAgIG4gKz0gb3RoZXIu
bjsKICAgICAgICB9CiAgICAgIG90aGVyLm4gICAgPSAwOwogICAgICBvdGhlci5oZWFkID0gMDsK
ICAgICAgb3RoZXIudGFpbCA9IDA7CiAgICAgfQogIH0KCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgp2
b2lkIExpc3Q8VHlwZT46OmFycmF5KFR5cGUgKiomIGFycmF5LCBpbnQgJmNudCkgY29uc3QKICB7
CiAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggIWFycmF5ICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwg
KCIhYXJyYXkiICwgIkxpc3QuYyIsIDEwMywgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsK
ICAgY250ID0gbjsKICAgaWYgKGNudCA+IDApIHsKICAgICBhcnJheSA9IG5ldyBUeXBlICpbY250
XTsKICAgICBpbnQgaSA9IDA7CiAgICAgTGlzdEl0ZW08VHlwZT4gKnAgPSBoZWFkOwogICAgIGZv
ciAoO2k8Y250O3A9cC0+bmV4dCxpKyspIHsKICAgICAgIGFycmF5W2ldID0gbmV3IFR5cGUocC0+
aXRlbSk7CiAgICAgfQogICB9CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFR5cGU+CnZvaWQgTGlzdDxU
eXBlPjo6YXJyYXkoVHlwZSAqJiBhcnJheSwgaW50ICZjbnQpIGNvbnN0CiAgewogICAoc3RhdGlj
X2Nhc3Q8dm9pZD4gICgoICFhcnJheSApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiIWFycmF5IiAs
ICJMaXN0LmMiLCAxMTgsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgIGNudCA9IG47
CiAgIGlmIChjbnQgPiAwKSB7CiAgICAgYXJyYXkgPSBuZXcgVHlwZSBbY250XTsKICAgICBpbnQg
aSA9IDA7CiAgICAgTGlzdEl0ZW08VHlwZT4gKnAgPSBoZWFkOwogICAgIGZvciAoO2k8Y250O3A9
cC0+bmV4dCxpKyspIHsKICAgICAgIGFycmF5W2ldID0gcC0+aXRlbTsKICAgICB9CiAgIH0KICB9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4Kdm9pZCBMaXN0PFR5cGU+OjpyZW1vdmUoTGlzdEl0ZW08
VHlwZT4qJiBwaSwgTGlzdEl0ZW08VHlwZT4qJiBsaSkKewogIGlmIChsaSA9PSBoZWFkKSBwb3Ao
KTsKICBlbHNlIHsKICAgIHBpLT5uZXh0ID0gbGktPm5leHQ7IAogICAgYmxvY2suZnJlZShsaSk7
IAogICAgaWYgKCFwaS0+bmV4dCkgdGFpbCA9IHBpOwogICAgbi0tOwogIH0KICBsaSA9IHBpOwp9
CgoKIyA5NSAiTGlzdC5oIiAyCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDE3ICJBQ0VE
aXN0cmlidXRpb24uaCIgMgoKIyAxICJHcmlkQm94LmgiIDEKCgoKICAKCgoKCgoKCgoKCiMgMSAi
QkJveC5oIiAxCgoKCiAKCgoKCgoKCgoKCgoKCiMgMSAibHBhcnhfY29weXJpZ2h0LmgiIDEKIAoK
CgoKCgoKCgoKCgoKCiMgMTggIkJCb3guaCIgMgoKIyAxICJDb29yZHMuaCIgMQoKCgogCgoKCgoK
CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKIyAxICJscGFyeF9jb3B5cmlnaHQuaCIgMQogCgoKCgoK
CgoKCgoKCgoKIyAzMyAiQ29vcmRzLmgiIDIKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0Lmgi
IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoj
IDYzICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKCgpleHRlcm4gIkMiIHsgCgogCmV4dGVybiB2
b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hh
ciAqX19maWxlLAoJCQkgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVu
Y3Rpb24pCiAgICAgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCiAK
ZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19jb25zdCBj
aGFyICpfX2ZpbGUsCgkJCQkgIHVuc2lnbmVkIGludCBfX2xpbmUsCgkJCQkgIF9fY29uc3QgY2hh
ciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f
XykpOwoKCiAKCmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICpfX2Fzc2VydGlvbiwg
Y29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQogICAgIHRocm93ICgpICBfX2F0dHJpYnV0
ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfSAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK
IyAzNiAiQ29vcmRzLmgiIDIKCgoKCgoKCgpjbGFzcyBDb29yZHNJdGVyYXRvcjsKCmNsYXNzIENv
b3JkcyAKewogIGZyaWVuZCBpc3RyZWFtJiBvcGVyYXRvciA+PiAoaXN0cmVhbSYgcywgQ29vcmRz
JiBjKTsKICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3IgPDwgKG9zdHJlYW0mIHMsIGNvbnN0IENv
b3JkcyYgYyk7CiAgZnJpZW5kIGlmc3RyZWFtJiBvcGVyYXRvciA+PiAoaWZzdHJlYW0mIHMsIENv
b3JkcyYgYyk7CiAgZnJpZW5kIG9mc3RyZWFtJiBvcGVyYXRvciA8PCAob2ZzdHJlYW0mIHMsIGNv
bnN0IENvb3JkcyYgYyk7CiAgCiAgaW50IGNbKDMpIF07CiAgCiBwdWJsaWM6CiAgc2hvcnQgcmFu
azsKICBzdGF0aWMgY2xhc3MgQ29vcmRzIF9lbXB0eV9jb29yZHM7CiAgCiBwdWJsaWM6CiAgdHlw
ZWRlZiBDb29yZHNJdGVyYXRvciBJdGVyYXRvcjsKICAKICAgCiAgaW5saW5lIENvb3Jkcyh2b2lk
KSA6IHJhbmsoMCkgCiAgICB7IGNbMF0gPSAwOyBjWzFdID0gMDsgY1syXSA9IDA7IH0KICAKICAg
CiAgIAogICAKICAgCiAgCiAgaW5saW5lIENvb3JkcyhpbnQgY29uc3QgciwgaW50IGNvbnN0IHZh
bCkgOiByYW5rKHIpCiAgICB7IGNbMF0gPSB2YWw7IGNbMV0gPSB2YWw7IGNbMl0gPSB2YWw7IH0K
ICAKICBpbmxpbmUgQ29vcmRzKGludCBjb25zdCByLCBpbnQgY29uc3QgKnZhbCkgOiByYW5rKHIp
CiAgICB7IHJlZ2lzdGVyIGludCBpOyBmb3IgKGk9MDsgaTxyYW5rOyBpKyspIGNbaV0gPSB2YWxb
aV07IAogICAgICAgICAgICAgICAgICAgICAgZm9yICg7aTwgKDMpIDsgaSsrKSBjW2ldID0gMDt9
CiAgCiAgaW5saW5lIENvb3JkcyhDb29yZHMgY29uc3QgJm90aGVyKSA6IHJhbmsob3RoZXIucmFu
aykKICAgIHsgY1swXSA9IG90aGVyLmNbMF07IGNbMV0gPSBvdGhlci5jWzFdOyBjWzJdID0gb3Ro
ZXIuY1syXTsgfQogIAogICAKICBpbmxpbmUgQ29vcmRzKGludCBjb25zdCByLCBpbnQgY29uc3Qg
aSwgaW50IGNvbnN0IGopIDogcmFuayhyKSAKICAgIHsgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBy
ID09IDIgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoInIgPT0gMiIgLCAiQ29vcmRzLmgiLCA4Mywg
X19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsgY1swXSA9IGk7IGNbMV0gPSBqOyA7IGNbMl0g
PSAwOyB9CiAgaW5saW5lIENvb3JkcyhpbnQgY29uc3QgciwgaW50IGNvbnN0IGksIGludCBjb25z
dCBqLCBpbnQgY29uc3QgaykgOiByYW5rKHIpIAogICAgeyAoc3RhdGljX2Nhc3Q8dm9pZD4gICgo
IHIgPT0gMyApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiciA9PSAzIiAsICJDb29yZHMuaCIsIDg1
LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOyBjWzBdID0gaTsgY1sxXSA9IGo7IGNbMl0g
PSBrOyB9CiAgCiAgQ29vcmRzICZvcGVyYXRvciA9IChDb29yZHMgY29uc3QgJnJocykKICAgIHsg
CiAgICAgIHJhbmsgPSByaHMucmFuazsKICAgICAgY1swXSA9IHJocy5jWzBdOyBjWzFdID0gcmhz
LmNbMV07IGNbMl0gPSByaHMuY1syXTsgCiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAKICBD
b29yZHMgJm9wZXJhdG9yID0gKGNvbnN0IGludCAmcmhzKQogICAgeyBjWzBdID0gY1sxXSA9IGNb
Ml0gPSByaHM7IHJldHVybiAqdGhpczsgfQogIAogIGlubGluZSB+Q29vcmRzKCkge30KICAKICAg
CiAgaW5saW5lIGludCYgb3BlcmF0b3IgKCkgKGludCBjb25zdCBpKSB7IHJldHVybihjW2ldKTsg
fQogIGlubGluZSBpbnQgb3BlcmF0b3IgKCkgKGludCBjb25zdCBpKSBjb25zdCB7IHJldHVybihj
W2ldKTsgfQogIAogIGlubGluZSBpbnQgKiBvcGVyYXRvciAoKSAodm9pZCkgeyByZXR1cm4oYyk7
IH0KICBpbmxpbmUgaW50IGNvbnN0ICpvcGVyYXRvciAoKSAodm9pZCkgY29uc3QgeyByZXR1cm4o
Yyk7IH0KICAKICBpbmxpbmUgb3BlcmF0b3IgaW50ICogKCkgeyByZXR1cm4oYyk7IH0KICBpbmxp
bmUgb3BlcmF0b3IgY29uc3QgaW50ICogKCkgY29uc3QgeyByZXR1cm4oYyk7IH0KICAKICAgCiAg
aW5saW5lIG9wZXJhdG9yIGxvbmcgaW50ICogKCkgeyByZXR1cm4oKGxvbmcgaW50ICopYyk7IH0K
ICBpbmxpbmUgb3BlcmF0b3IgY29uc3QgbG9uZyBpbnQgKiAoKSBjb25zdCB7IHJldHVybigobG9u
ZyBpbnQgKiljKTsgfQogIAogICAKCiMgMTI4ICJDb29yZHMuaCIKICBDb29yZHMmIG9wZXJhdG9y
ICArPSAgKENvb3JkcyBjb25zdCAmcmhzKSB7IGNbMF0gICs9ICByaHMuY1swXTsgaWYgKHJhbms+
MSkgY1sxXSAgKz0gIHJocy5jWzFdOyBpZiAocmFuaz4yKSBjWzJdICArPSAgcmhzLmNbMl07IHJl
dHVybigqdGhpcyk7IH0gQ29vcmRzIG9wZXJhdG9yICArICAoQ29vcmRzIGNvbnN0ICZyaHMpIGNv
bnN0IHsgQ29vcmRzIGNvb3JkcygqdGhpcyk7IGNvb3JkcyAgKz0gIHJoczsgcmV0dXJuKGNvb3Jk
cyk7IH0gCiAgQ29vcmRzJiBvcGVyYXRvciAgLT0gIChDb29yZHMgY29uc3QgJnJocykgeyBjWzBd
ICAtPSAgcmhzLmNbMF07IGlmIChyYW5rPjEpIGNbMV0gIC09ICByaHMuY1sxXTsgaWYgKHJhbms+
MikgY1syXSAgLT0gIHJocy5jWzJdOyByZXR1cm4oKnRoaXMpOyB9IENvb3JkcyBvcGVyYXRvciAg
LSAgKENvb3JkcyBjb25zdCAmcmhzKSBjb25zdCB7IENvb3JkcyBjb29yZHMoKnRoaXMpOyBjb29y
ZHMgIC09ICByaHM7IHJldHVybihjb29yZHMpOyB9IAogIENvb3JkcyYgb3BlcmF0b3IgICo9ICAo
Q29vcmRzIGNvbnN0ICZyaHMpIHsgY1swXSAgKj0gIHJocy5jWzBdOyBpZiAocmFuaz4xKSBjWzFd
ICAqPSAgcmhzLmNbMV07IGlmIChyYW5rPjIpIGNbMl0gICo9ICByaHMuY1syXTsgcmV0dXJuKCp0
aGlzKTsgfSBDb29yZHMgb3BlcmF0b3IgICogIChDb29yZHMgY29uc3QgJnJocykgY29uc3QgeyBD
b29yZHMgY29vcmRzKCp0aGlzKTsgY29vcmRzICAqPSAgcmhzOyByZXR1cm4oY29vcmRzKTsgfSAK
CiAgICAKICAgCgojIDE0OCAiQ29vcmRzLmgiCiAgQ29vcmRzJiBvcGVyYXRvciAgKz0gIChpbnQg
Y29uc3QgcmhzKSB7IGNbMF0gICs9ICByaHM7IGlmIChyYW5rPjEpIGNbMV0gICs9ICByaHM7IGlm
IChyYW5rPjIpIGNbMl0gICs9ICByaHM7IHJldHVybigqdGhpcyk7IH0gQ29vcmRzIG9wZXJhdG9y
ICArICAoaW50IGNvbnN0IHJocykgY29uc3QgeyBDb29yZHMgY29vcmRzKCp0aGlzKTsgY29vcmRz
ICArPSAgcmhzOyByZXR1cm4oY29vcmRzKTsgfSAKICBDb29yZHMmIG9wZXJhdG9yICAtPSAgKGlu
dCBjb25zdCByaHMpIHsgY1swXSAgLT0gIHJoczsgaWYgKHJhbms+MSkgY1sxXSAgLT0gIHJoczsg
aWYgKHJhbms+MikgY1syXSAgLT0gIHJoczsgcmV0dXJuKCp0aGlzKTsgfSBDb29yZHMgb3BlcmF0
b3IgIC0gIChpbnQgY29uc3QgcmhzKSBjb25zdCB7IENvb3JkcyBjb29yZHMoKnRoaXMpOyBjb29y
ZHMgIC09ICByaHM7IHJldHVybihjb29yZHMpOyB9IAogIENvb3JkcyYgb3BlcmF0b3IgICo9ICAo
aW50IGNvbnN0IHJocykgeyBjWzBdICAqPSAgcmhzOyBpZiAocmFuaz4xKSBjWzFdICAqPSAgcmhz
OyBpZiAocmFuaz4yKSBjWzJdICAqPSAgcmhzOyByZXR1cm4oKnRoaXMpOyB9IENvb3JkcyBvcGVy
YXRvciAgKiAgKGludCBjb25zdCByaHMpIGNvbnN0IHsgQ29vcmRzIGNvb3JkcygqdGhpcyk7IGNv
b3JkcyAgKj0gIHJoczsgcmV0dXJuKGNvb3Jkcyk7IH0gCgogICAgCiAgIAoKIyAxNjggIkNvb3Jk
cy5oIgogIENvb3JkcyYgb3BlcmF0b3IgIC89ICAoQ29vcmRzIGNvbnN0ICZyaHMpIHsgaWYgKHJo
cy5jWzBdICE9IDApIGNbMF0gIC89ICByaHMuY1swXTsgaWYgKHJhbms+MSAmJiByaHMuY1sxXSAh
PSAwKSBjWzFdICAvPSAgcmhzLmNbMV07IGlmIChyYW5rPjIgJiYgcmhzLmNbMl0gIT0gMCkgY1sy
XSAgLz0gIHJocy5jWzJdOyByZXR1cm4oKnRoaXMpOyB9IENvb3JkcyBvcGVyYXRvciAgLyAgKENv
b3JkcyBjb25zdCAmcmhzKSBjb25zdCB7IENvb3JkcyBjb29yZHMoKnRoaXMpOyBjb29yZHMgIC89
ICByaHM7IHJldHVybihjb29yZHMpOyB9IAogIENvb3JkcyYgb3BlcmF0b3IgICU9ICAoQ29vcmRz
IGNvbnN0ICZyaHMpIHsgaWYgKHJocy5jWzBdICE9IDApIGNbMF0gICU9ICByaHMuY1swXTsgaWYg
KHJhbms+MSAmJiByaHMuY1sxXSAhPSAwKSBjWzFdICAlPSAgcmhzLmNbMV07IGlmIChyYW5rPjIg
JiYgcmhzLmNbMl0gIT0gMCkgY1syXSAgJT0gIHJocy5jWzJdOyByZXR1cm4oKnRoaXMpOyB9IENv
b3JkcyBvcGVyYXRvciAgJSAgKENvb3JkcyBjb25zdCAmcmhzKSBjb25zdCB7IENvb3JkcyBjb29y
ZHMoKnRoaXMpOyBjb29yZHMgICU9ICByaHM7IHJldHVybihjb29yZHMpOyB9IAoKICAgIAogICAK
CiMgMTg3ICJDb29yZHMuaCIKICBDb29yZHMmIG9wZXJhdG9yICAvPSAgKGludCBjb25zdCByaHMp
IHsgaWYgKHJocyAhPSAwKSB7IGNbMF0gIC89ICByaHM7IGlmIChyYW5rPjEpIGNbMV0gIC89ICBy
aHM7IGlmIChyYW5rPjIpIGNbMl0gIC89ICByaHM7IH0gcmV0dXJuKCp0aGlzKTsgfSBDb29yZHMg
b3BlcmF0b3IgIC8gIChpbnQgY29uc3QgcmhzKSBjb25zdCB7IENvb3JkcyBjb29yZHMoKnRoaXMp
OyBjb29yZHMgIC89ICByaHM7IHJldHVybihjb29yZHMpOyB9IAogIENvb3JkcyYgb3BlcmF0b3Ig
ICU9ICAoaW50IGNvbnN0IHJocykgeyBpZiAocmhzICE9IDApIHsgY1swXSAgJT0gIHJoczsgaWYg
KHJhbms+MSkgY1sxXSAgJT0gIHJoczsgaWYgKHJhbms+MikgY1syXSAgJT0gIHJoczsgfSByZXR1
cm4oKnRoaXMpOyB9IENvb3JkcyBvcGVyYXRvciAgJSAgKGludCBjb25zdCByaHMpIGNvbnN0IHsg
Q29vcmRzIGNvb3JkcygqdGhpcyk7IGNvb3JkcyAgJT0gIHJoczsgcmV0dXJuKGNvb3Jkcyk7IH0g
CgogICAgICAKICAgCiAgaW5saW5lIENvb3JkcyBvcGVyYXRvciAtICgpIGNvbnN0CiAgICB7IAog
ICAgICBDb29yZHMgY29vcmRzKHJhbmssMCk7CiAgICAgIGNvb3Jkcy5jWzBdID0gLWNbMF07IGNv
b3Jkcy5jWzFdID0gLWNbMV07IGNvb3Jkcy5jWzJdID0gLWNbMl07IAogICAgICByZXR1cm4oY29v
cmRzKTsKICAgIH0KICAKICAgCiAgaW5saW5lIGludCBvcGVyYXRvciAhPSAoQ29vcmRzIGNvbnN0
ICZyaHMpIGNvbnN0CiAgICB7CiAgICAgIHJldHVybiAoIHJhbmsgIT0gcmhzLnJhbmsgfHwKCSAg
ICAgICAoKHJhbmsgPiAwKSAmJiAoY1swXSAhPSByaHMuY1swXSkpIHx8IAoJICAgICAgICgocmFu
ayA+IDEpICYmIChjWzFdICE9IHJocy5jWzFdKSkgfHwgCgkgICAgICAgKChyYW5rID4gMikgJiYg
KGNbMl0gIT0gcmhzLmNbMl0pKQoJICAgICAgICkgOwogICAgfQogIGlubGluZSBpbnQgb3BlcmF0
b3IgPT0gKENvb3JkcyBjb25zdCAmcmhzKSBjb25zdAogICAgeyByZXR1cm4oISgqdGhpcyAhPSBy
aHMpKTsgfQogIAogICAKICBpbmxpbmUgaW50IG9wZXJhdG9yID4gKENvb3JkcyBjb25zdCAmcmhz
KSBjb25zdAogICAgewogICAgICByZXR1cm4gKCEoKChyYW5rID4gMCkgJiYgKGNbMF0gPD0gcmhz
LmNbMF0pKSB8fCAKCQkoKHJhbmsgPiAxKSAmJiAoY1sxXSA8PSByaHMuY1sxXSkpIHx8IAoJCSgo
cmFuayA+IDIpICYmIChjWzJdIDw9IHJocy5jWzJdKSkpCgkgICAgICApIDsKICAgIH0KICBpbmxp
bmUgaW50IG9wZXJhdG9yIDwgKENvb3JkcyBjb25zdCAmcmhzKSBjb25zdAogICAgewogICAgICBy
ZXR1cm4gKCEoKChyYW5rID4gMCkgJiYgKGNbMF0gPj0gcmhzLmNbMF0pKSB8fCAKCQkoKHJhbmsg
PiAxKSAmJiAoY1sxXSA+PSByaHMuY1sxXSkpIHx8IAoJCSgocmFuayA+IDIpICYmIChjWzJdID49
IHJocy5jWzJdKSkpCgkgICAgICApIDsKICAgIH0KICAKICBpbmxpbmUgdm9pZCBzZXR2YWwoaW50
IGNvbnN0IHZhbCkKICAgIHsgY1swXSA9IHZhbDsgY1sxXSA9IHZhbDsgY1syXSA9IHZhbDsgfQog
IGlubGluZSB2b2lkIHNldHZhbChDb29yZHMgY29uc3QgcmhzKQogICAgeyBjWzBdID0gcmhzLmNb
MF07IGNbMV0gPSByaHMuY1sxXTsgY1syXSA9IHJocy5jWzJdOyB9CiAgCiAgaW5saW5lIGludCBn
ZXRtYXh2YWwoKQogICAgewogICAgICByZXR1cm4gKChyYW5rID4gMSkgPyAKCSAgICAgICgocmFu
ayA+IDIpID8gCgkgICAgICAgKChjWzBdID4gY1sxXSkgPyAKCQkoKGNbMF0gPiBjWzJdKSA/IGNb
MF0gOiBjWzJdKSA6IAoJCSgoY1sxXSA+IGNbMl0pID8gY1sxXSA6IGNbMl0pKSA6IAoJICAgICAg
ICgoY1swXSA+IGNbMV0pID8gY1swXSA6IGNbMV0pKSA6IAoJICAgICAgY1swXSk7CiAgICB9CiAg
aW5saW5lIGludCBnZXRtaW52YWwoKQogICAgewogICAgICByZXR1cm4gKChyYW5rID4gMSkgPyAK
CSAgICAgICgocmFuayA+IDIpID8KCSAgICAgICAoKGNbMF0gPCBjWzFdKSA/IAoJCSgoY1swXSA8
IGNbMl0pID8gY1swXSA6IGNbMl0pIDogCgkJKChjWzFdIDwgY1syXSkgPyBjWzFdIDogY1syXSkp
IDogCgkgICAgICAgKChjWzBdIDwgY1sxXSkgPyBjWzBdIDogY1sxXSkpIDogCgkgICAgICBjWzBd
KTsKICAgIH0KCiAgaW5saW5lIGludCBnZXRtYXhpbmRleCgpCiAgICB7CiAgICAgIHJldHVybiAo
KHJhbmsgPiAxKSA/IAoJICAgICAgKChyYW5rID4gMikgPyAKCSAgICAgICAoKGNbMF0gPiBjWzFd
KSA/IAoJCSgoY1swXSA+IGNbMl0pID8gMCA6IDIpIDogCgkJKChjWzFdID4gY1syXSkgPyAxIDog
MikpIDogCgkgICAgICAgKChjWzBdID4gY1sxXSkgPyAwIDogMSkpIDogCgkgICAgICAwKTsKICAg
IH0KICBpbmxpbmUgaW50IGdldG1pbmluZGV4KCkKICAgIHsKICAgICAgcmV0dXJuICgocmFuayA+
IDEpID8gCgkgICAgICAoKHJhbmsgPiAyKSA/IAoJICAgICAgICgoY1swXSA8IGNbMV0pID8gCgkJ
KChjWzBdIDwgY1syXSkgPyAwIDogMikgOiAKCQkoKGNbMV0gPCBjWzJdKSA/IDEgOiAyKSkgOiAK
CSAgICAgICAoKGNbMF0gPCBjWzFdKSA/IDAgOiAxKSkgOiAKCSAgICAgIDApOwogICAgfQoKICAg
CiAgaW5saW5lIHZvaWQgbWluKENvb3JkcyBjb25zdCAmcmhzKQogICAgewogICAgICAgCiAgICAg
IGNbMF0gPSAocmhzLmNbMF0gPCBjWzBdKSA/IHJocy5jWzBdIDogY1swXTsKICAgICAgaWYgKHJh
bmsgPiAxKSBjWzFdID0gKHJocy5jWzFdIDwgY1sxXSkgPyByaHMuY1sxXSA6IGNbMV07CiAgICAg
IGlmIChyYW5rID4gMikgY1syXSA9IChyaHMuY1syXSA8IGNbMl0pID8gcmhzLmNbMl0gOiBjWzJd
OwogICAgfQogIAogIGlubGluZSB2b2lkIG1heChDb29yZHMgY29uc3QgJnJocykKICAgIHsKICAg
ICAgIAogICAgICBjWzBdID0gKHJocy5jWzBdID4gY1swXSkgPyByaHMuY1swXSA6IGNbMF07CiAg
ICAgIGlmIChyYW5rID4gMSkgY1sxXSA9IChyaHMuY1sxXSA+IGNbMV0pID8gcmhzLmNbMV0gOiBj
WzFdOwogICAgICBpZiAocmFuayA+IDIpIGNbMl0gPSAocmhzLmNbMl0gPiBjWzJdKSA/IHJocy5j
WzJdIDogY1syXTsKICAgIH0KICAKICBpbmxpbmUgQ29vcmRzIGdldG1pbihDb29yZHMgY29uc3Qg
JnJocykgY29uc3QKICAgIHsgQ29vcmRzIG90aGVyKCp0aGlzKTsgb3RoZXIubWluKHJocyk7IHJl
dHVybiBvdGhlcjsgfQogIAogIGlubGluZSBDb29yZHMgZ2V0bWF4KENvb3JkcyBjb25zdCAmcmhz
KSBjb25zdAogICAgeyBDb29yZHMgb3RoZXIoKnRoaXMpOyBvdGhlci5tYXgocmhzKTsgcmV0dXJu
IG90aGVyOyB9CiAgCiAgaW5saW5lIHZvaWQgc2V0YWJzKCkKICAgIHsgCiAgICAgIGNbMF0gPSAo
Y1swXSA8IDApID8gLWNbMF0gOiBjWzBdOwogICAgICBpZiAocmFuayA+IDEpIGNbMV0gPSAoY1sx
XSA8IDApID8gLWNbMV0gOiBjWzFdOwogICAgICBpZiAocmFuayA+IDIpIGNbMl0gPSAoY1syXSA8
IDApID8gLWNbMl0gOiBjWzJdOwogICAgfQogIAogIGlubGluZSBDb29yZHMgZ2V0YWJzKCkKICAg
IHsgQ29vcmRzIG90aGVyKCp0aGlzKTsgb3RoZXIuc2V0YWJzKCk7IHJldHVybiBvdGhlcjsgfQog
IAogIGlubGluZSB2b2lkIGNlaWxpbmcoY29uc3QgQ29vcmRzJiBzdGVwKQogICAgeyBDb29yZHMg
bW9kKCp0aGlzJXN0ZXApOyBtb2Quc2V0YWJzKCk7ICp0aGlzICs9IG1vZDt9CiAgaW5saW5lIHZv
aWQgZmxvb3IoY29uc3QgQ29vcmRzJiBzdGVwKQogICAgeyBDb29yZHMgbW9kKCp0aGlzJXN0ZXAp
OyBtb2Quc2V0YWJzKCk7ICp0aGlzIC09IG1vZDt9Cn07CgppbmxpbmUgQ29vcmRzIG1heChjb25z
dCBDb29yZHMmIGEsIGNvbnN0IENvb3JkcyAmYikKICB7IHJldHVybihhLmdldG1heChiKSk7IH0K
aW5saW5lIENvb3JkcyBtaW4oY29uc3QgQ29vcmRzJiBhLCBjb25zdCBDb29yZHMgJmIpCiAgeyBy
ZXR1cm4oYS5nZXRtaW4oYikpOyB9CgoKb3N0cmVhbSYgb3BlcmF0b3IgPDwgKG9zdHJlYW0mIHMs
IGNvbnN0IENvb3JkcyYgYyk7CmlzdHJlYW0mIG9wZXJhdG9yID4+IChpc3RyZWFtJiBzLCBDb29y
ZHMmIGMpOwppZnN0cmVhbSYgb3BlcmF0b3I+PihpZnN0cmVhbSYgcywgQ29vcmRzJiBjKTsKb2Zz
dHJlYW0mIG9wZXJhdG9yPDwob2ZzdHJlYW0mIHMsIGNvbnN0IENvb3JkcyYgYyk7CgoKCiMgMTkg
IkJCb3guaCIgMgoKCgoKCgogCiAKCgoKCgoKCgoKCmNsYXNzIEJCb3ggIAp7CiAgZnJpZW5kIGlz
dHJlYW0mIG9wZXJhdG9yID4+IChpc3RyZWFtJiwgQkJveCAmKTsKICBmcmllbmQgb3N0cmVhbSYg
b3BlcmF0b3IgPDwgKG9zdHJlYW0mLCBCQm94IGNvbnN0ICYpOwogIGZyaWVuZCBpZnN0cmVhbSYg
b3BlcmF0b3IgPj4gKGlmc3RyZWFtJiwgQkJveCYpOwogIGZyaWVuZCBvZnN0cmVhbSYgb3BlcmF0
b3IgPDwgKG9mc3RyZWFtJiwgY29uc3QgQkJveCYpOwogIAogIENvb3JkcyBsYiwgdWI7CiAgQ29v
cmRzIHN0ZXA7CiAgCiBwdWJsaWM6CiAgc2hvcnQgcmFuazsKICBzdGF0aWMgY2xhc3MgQkJveCBf
ZW1wdHlfYmJveDsKICAKIHB1YmxpYzoKICBpbmxpbmUgQkJveCh2b2lkKQogICAgOiBsYigwLCgg
MTAwMDAwMDAwMCkgKSwgdWIoMCwoLTEwMDAwMDAwMDApICksIHN0ZXAoLTEsMSksIHJhbmsoLTEp
IHt9CiAgaW5saW5lIEJCb3goY29uc3QgaW50IHIsIGNvbnN0IGludCBzKQogICAgOiBsYihyLCgg
MTAwMDAwMDAwMCkgKSwgdWIociwoLTEwMDAwMDAwMDApICksIHN0ZXAocixzKSwgcmFuayhyKSB7
fQogIGlubGluZSBCQm94KGNvbnN0IGludCByLCBDb29yZHMgY29uc3QgJnMpCiAgICA6IGxiKHIs
KCAxMDAwMDAwMDAwKSApLCB1YihyLCgtMTAwMDAwMDAwMCkgKSwgc3RlcChzKSwgcmFuayhyKSB7
fQogIGlubGluZSBCQm94KENvb3JkcyBjb25zdCAmbCwgQ29vcmRzIGNvbnN0ICZ1LCBjb25zdCBp
bnQgcykKICAgIDogbGIobCksIHViKHUpLCBzdGVwKGwucmFuayxzKSwgcmFuayhsLnJhbmspIHt9
CiAgaW5saW5lIEJCb3goY29uc3QgaW50IHIsIGNvbnN0IGludCAqbCwgY29uc3QgaW50ICp1LCBj
b25zdCBpbnQgcykKICAgIDogbGIocixsKSwgdWIocix1KSwgc3RlcChyLHMpLCByYW5rKHIpIHt9
CiAgaW5saW5lIEJCb3goQ29vcmRzIGNvbnN0ICZsLCBDb29yZHMgY29uc3QgJnUsIENvb3JkcyBj
b25zdCAmcykKICAgIDogbGIobCksIHViKHUpLCBzdGVwKHMpLCByYW5rKGwucmFuaykge30KICBp
bmxpbmUgQkJveChjb25zdCBpbnQgciwgY29uc3QgaW50ICpsLCBjb25zdCBpbnQgKnUsIGNvbnN0
IGludCAqcykKICAgIDogbGIocixsKSwgdWIocix1KSwgc3RlcChyLHMpLCByYW5rKHIpIHt9CiAg
aW5saW5lIEJCb3goQkJveCBjb25zdCAmb3RoZXIpCiAgICA6IGxiKG90aGVyLmxiKSwgdWIob3Ro
ZXIudWIpLCBzdGVwKG90aGVyLnN0ZXApLCByYW5rKG90aGVyLnJhbmspIHt9CiAgCiAgIAogIGlu
bGluZSBCQm94KGNvbnN0IGludCByLCBjb25zdCBpbnQgaSwgCgkgICAgICBjb25zdCBpbnQgaWks
IGNvbnN0IGludCBzKQogICAgOiBsYihyLGkpLCB1YihyLGlpKSwgc3RlcChyLHMpLCByYW5rKHIp
IHt9CiAgaW5saW5lIEJCb3goY29uc3QgaW50IHIsIGNvbnN0IGludCBpLCBjb25zdCBpbnQgaiwg
CgkgICAgICBjb25zdCBpbnQgaWksIGNvbnN0IGludCBqaiwgY29uc3QgaW50IHMpCiAgICA6IGxi
KHIsaSxqKSwgdWIocixpaSxqaiksIHN0ZXAocixzKSwgcmFuayhyKSB7fQogIGlubGluZSBCQm94
KGNvbnN0IGludCByLCBjb25zdCBpbnQgaSwgY29uc3QgaW50IGosIGNvbnN0IGludCBrLAoJICAg
ICAgY29uc3QgaW50IGlpLCBjb25zdCBpbnQgamosIGNvbnN0IGludCBraywgY29uc3QgaW50IHMp
CiAgICA6IGxiKHIsaSxqLGspLCB1YihyLGlpLGpqLGtrKSwgc3RlcChyLHMpLCByYW5rKHIpIHt9
CiAgaW5saW5lIEJCb3goY29uc3QgaW50IHIsIGNvbnN0IGludCBpLCBjb25zdCBpbnQgaiwgCgkg
ICAgICBjb25zdCBpbnQgaWksIGNvbnN0IGludCBqaiwgCgkgICAgICBjb25zdCBpbnQgcywgY29u
c3QgaW50IHNzKQogICAgOiBsYihyLGksaiksIHViKHIsaWksamopLCBzdGVwKHIscyxzcyksIHJh
bmsocikge30KICBpbmxpbmUgQkJveChjb25zdCBpbnQgciwgY29uc3QgaW50IGksIGNvbnN0IGlu
dCBqLCBjb25zdCBpbnQgaywKCSAgICAgIGNvbnN0IGludCBpaSwgY29uc3QgaW50IGpqLCBjb25z
dCBpbnQga2ssIAoJICAgICAgY29uc3QgaW50IHMsIGNvbnN0IGludCBzcywgY29uc3QgaW50IHNz
cykKICAgIDogbGIocixpLGosayksIHViKHIsaWksamosa2spLCBzdGVwKHIscyxzcyxzc3MpLCBy
YW5rKHIpIHt9CiAgCiAgaW5saW5lIEJCb3gmIG9wZXJhdG9yID0gKGNvbnN0IEJCb3gmIG90aGVy
KQogICAgeyAKICAgICAgc3RlcCA9IG90aGVyLnN0ZXA7IHJhbmsgPSBvdGhlci5yYW5rOyAKICAg
ICAgbGIgPSBvdGhlci5sYjsgdWIgPSBvdGhlci51YjsgCiAgICAgIHJldHVybigqdGhpcyk7IAog
ICAgfQogIAogIGlubGluZSB+QkJveCgpIHt9CiAgCiAgIAogIGlubGluZSB2b2lkIHNldGVtcHR5
KCkKICAgIHsgbGIuc2V0dmFsKCggMTAwMDAwMDAwMCkgKTsgdWIuc2V0dmFsKCgtMTAwMDAwMDAw
MCkgKTsgfQogIAogIGlubGluZSB2b2lkIHNldGxvd2VyKENvb3JkcyBjb25zdCAmbCkgeyBsYiA9
IGw7IH0KICBpbmxpbmUgdm9pZCBzZXRsb3dlcihjb25zdCBpbnQgKmwpCiAgICB7IHJlZ2lzdGVy
IGludCBpOyBmb3IgKGk9MDtpPHJhbms7IGkrKykgbGIoaSkgPSBsW2ldOyB9CiAgCiAgaW5saW5l
IHZvaWQgc2V0dXBwZXIoQ29vcmRzIGNvbnN0ICZ1KSB7IHViID0gdTsgfQogIGlubGluZSB2b2lk
IHNldHVwcGVyKGNvbnN0IGludCAqdSkKICAgIHsgcmVnaXN0ZXIgaW50IGk7IGZvciAoaT0wO2k8
cmFuazsgaSsrKSB1YihpKSA9IHVbaV07IH0KICAKICBpbmxpbmUgdm9pZCBzZXRiYm94KGNvbnN0
IGludCAqbCwgY29uc3QgaW50ICp1KQogICAgeyBzZXRsb3dlcihsKTsgc2V0dXBwZXIodSk7IH0K
ICBpbmxpbmUgdm9pZCBzZXRiYm94KENvb3JkcyBjb25zdCAmbCwgQ29vcmRzIGNvbnN0ICZ1KSAK
ICAgIHsgbGIgPSBsOyB1YiA9IHU7IH0KICBpbmxpbmUgdm9pZCBzZXRiYm94KEJCb3ggY29uc3Qg
Jm90aGVyKSAKICAgIHsgc3RlcCA9IG90aGVyLnN0ZXA7IHJhbmsgPSBvdGhlci5yYW5rOyBsYiA9
IG90aGVyLmxiOyB1YiA9IG90aGVyLnViOyB9CiAgCiAgIAogIGlubGluZSBDb29yZHMgY29uc3Qg
Jmxvd2VyKCkgY29uc3QgeyByZXR1cm4obGIpOyB9CiAgaW5saW5lIENvb3JkcyBjb25zdCAmdXBw
ZXIoKSBjb25zdCB7IHJldHVybih1Yik7IH0KICBpbmxpbmUgaW50IGxvd2VyKGNvbnN0IGludCBp
KSBjb25zdCB7IHJldHVybihsYihpKSk7IH0KICBpbmxpbmUgaW50IHVwcGVyKGNvbnN0IGludCBp
KSBjb25zdCB7IHJldHVybih1YihpKSk7IH0KICAKICBpbmxpbmUgQ29vcmRzICZsb3dlcigpIHsg
cmV0dXJuKGxiKTsgfQogIGlubGluZSBDb29yZHMgJnVwcGVyKCkgeyByZXR1cm4odWIpOyB9CiAg
aW5saW5lIGludCAmbG93ZXIoY29uc3QgaW50IGkpIHsgcmV0dXJuKGxiKGkpKTsgfQogIGlubGlu
ZSBpbnQgJnVwcGVyKGNvbnN0IGludCBpKSB7IHJldHVybih1YihpKSk7IH0KICAKICBpbmxpbmUg
Q29vcmRzIGNvbnN0ICZzdGVwc2l6ZSh2b2lkKSBjb25zdCB7IHJldHVybiAoc3RlcCk7IH0KICBp
bmxpbmUgQ29vcmRzICZzdGVwc2l6ZSh2b2lkKSB7IHJldHVybiAoc3RlcCk7IH0KICBpbmxpbmUg
aW50IHN0ZXBzaXplKGNvbnN0IGludCBpKSBjb25zdCB7IHJldHVybiAoc3RlcChpKSk7IH0KICBp
bmxpbmUgaW50ICZzdGVwc2l6ZShjb25zdCBpbnQgaSkgeyByZXR1cm4gKHN0ZXAoaSkpOyB9CiAg
CiAgaW5saW5lIHZvaWQgc2V0c3RlcHNpemUoY29uc3QgaW50IGksIGNvbnN0IGludCBzKSB7IHN0
ZXAoaSkgPSBzOyB9CiAgaW5saW5lIHZvaWQgc2V0c3RlcHNpemUoQ29vcmRzIGNvbnN0ICZzKSB7
IHN0ZXAgPSBzOyB9CiAgaW5saW5lIHZvaWQgc2V0c3RlcHNpemUoY29uc3QgaW50IHMpIHsgc3Rl
cC5zZXR2YWwocyk7IH0KICAKICBpbmxpbmUgaW50IGV4dGVudHMoY29uc3QgaW50IGkpIGNvbnN0
IAogICAgeyByZXR1cm4oKHViKGkpLWxiKGkpK3N0ZXAoaSkpL3N0ZXAoaSkpOyB9CiAgaW5saW5l
IENvb3JkcyBleHRlbnRzKCkgY29uc3QgCiAgICB7IHJldHVybigodWItbGIrc3RlcCkvc3RlcCk7
IH0KICAKICBpbmxpbmUgaW50IGVtcHR5ICgpIGNvbnN0CiAgICB7IHJldHVybiAoIChyYW5rIDw9
IDApIHx8CgkgICAgICAgKChyYW5rID4gMCkgJiYgKHViKDApIDwgbGIoMCkpKSB8fAoJICAgICAg
ICgocmFuayA+IDEpICYmICh1YigxKSA8IGxiKDEpKSkgfHwKCSAgICAgICAoKHJhbmsgPiAyKSAm
JiAodWIoMikgPCBsYigyKSkpCgkgICAgICAgKSA7IH0KICAKICBpbmxpbmUgaW50IGJvdHRvbSh2
b2lkKSBjb25zdAogICAgewogICAgICByZWdpc3RlciBpbnQgYiA9IChyYW5rID4gMCkgPyBsYigw
KS9zdGVwKDApIDogMDsKICAgICAgcmVnaXN0ZXIgaW50IGUgPSAocmFuayA+IDEpID8gKHViKDAp
LWxiKDApK3N0ZXAoMCkpL3N0ZXAoMCkgOiAxOwogICAgICBiICs9IChyYW5rID4gMSkgPyBlKmxi
KDEpL3N0ZXAoMSkgOiAwOyAKICAgICAgZSAqPSAocmFuayA+IDIpID8gKHViKDEpLWxiKDEpK3N0
ZXAoMSkpL3N0ZXAoMSkgOiAxOwogICAgICBiICs9IChyYW5rID4gMikgPyBlKmxiKDIpL3N0ZXAo
MikgOiAwOyAKICAgICAgcmV0dXJuICgtYik7CiAgICB9CiAgCiAgaW5saW5lIGludCBzaXplKCkg
Y29uc3QKICAgIHsKICAgICAgaWYgKGVtcHR5KCkpIHJldHVybiAwOwogICAgICByZWdpc3RlciBp
bnQgcyA9IChyYW5rID4gMCkgPyAodWIoMCktbGIoMCkrc3RlcCgwKSkvc3RlcCgwKSA6IDA7CiAg
ICAgIHMgKj0gKHJhbmsgPiAxKSA/ICgodWIoMSktbGIoMSkrc3RlcCgxKSkvc3RlcCgxKSkgOiAx
OwogICAgICBzICo9IChyYW5rID4gMikgPyAoKHViKDIpLWxiKDIpK3N0ZXAoMikpL3N0ZXAoMikp
IDogMTsKICAgICAgcmV0dXJuIHM7CiAgICB9CiAgCiAgIAogIGlubGluZSBpbnQgY29tcGF0aWJs
ZShCQm94IGNvbnN0ICZyaHMsIGNvbnN0IGludCBkKSBjb25zdAogICAgeyByZXR1cm4oIGxiKGQp
ID09IHJocy5sYihkKSAmJiB1YihkKSA9PSByaHMudWIoZCkgKTsgfQogIAogICAKICAgCiAgaW5s
aW5lIGludCBtZXJnYWJsZShCQm94IGNvbnN0ICZyaHMsIGNvbnN0IGludCBkLCBjb25zdCBpbnQg
b2xhcCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuICgKCSAgICAgIChyYW5rID09IDEpID8gKGFi
cyhsYihkKSAtIHJocy51YihkKSkgPT0gKDEtb2xhcCkqc3RlcChkKSkgfHwgCgkgICAgICAoYWJz
KHViKGQpIC0gcmhzLmxiKGQpKSA9PSAoMS1vbGFwKSpzdGVwKGQpKSA6CgkgICAgICAocmFuayA9
PSAyKSA/IGNvbXBhdGlibGUocmhzLChkKzEpJTIpICYmCgkgICAgICAoKGFicyhsYihkKSAtIHJo
cy51YihkKSkgPT0gKDEtb2xhcCkqc3RlcChkKSkgfHwgCgkgICAgICAgKGFicyh1YihkKSAtIHJo
cy5sYihkKSkgPT0gKDEtb2xhcCkqc3RlcChkKSkpIDoKCSAgICAgIChyYW5rID09IDMpID8gY29t
cGF0aWJsZShyaHMsKGQrMSklMykgJiYKCSAgICAgIGNvbXBhdGlibGUocmhzLChkKzIpJTMpICYm
CgkgICAgICAoKGFicyhsYihkKSAtIHJocy51YihkKSkgPT0gKDEtb2xhcCkqc3RlcChkKSkgfHwg
CgkgICAgICAgKGFicyh1YihkKSAtIHJocy5sYihkKSkgPT0gKDEtb2xhcCkqc3RlcChkKSkpOiAw
CgkgICAgICApOwogICAgfQogIAogICAKICBpbmxpbmUgaW50IG1lcmdhYmxlKEJCb3ggY29uc3Qg
JnJocywgY29uc3Qgc2hvcnQqIG9sYXApIGNvbnN0CiAgICB7CiAgICAgIGludCBmbGFnID0gMDsK
ICAgICAgZmxhZyA9IChyYW5rID09IDMpID8gZmxhZyB8fCBtZXJnYWJsZShyaHMsIDIsIG9sYXBb
Ml0pIDogZmxhZzsgCiAgICAgIGZsYWcgPSAocmFuayA+PSAyKSA/IGZsYWcgfHwgbWVyZ2FibGUo
cmhzLCAxLCBvbGFwWzFdKSA6IGZsYWc7IAogICAgICBmbGFnID0gKHJhbmsgPj0gMSkgPyBmbGFn
IHx8IG1lcmdhYmxlKHJocywgMCwgb2xhcFswXSkgOiBmbGFnOyAKICAgICAgcmV0dXJuIGZsYWc7
CiAgICB9CiAgCiAgIAogIGlubGluZSBCQm94ICZvcGVyYXRvciArPSAoQ29vcmRzIGNvbnN0ICZy
aHMpCiAgICB7CiAgICAgIGlmIChlbXB0eSgpKSB7IGxiID0gcmhzOyB1YiA9IHJoczsgcmV0dXJu
KCp0aGlzKTsgfQogICAgICBsYi5taW4ocmhzKTsgdWIubWF4KHJocyk7IHJldHVybigqdGhpcyk7
CiAgICB9CiAgaW5saW5lIEJCb3ggb3BlcmF0b3IgKyAoQ29vcmRzIGNvbnN0ICZyaHMpIGNvbnN0
CiAgICB7IEJCb3ggYmJveCgqdGhpcyk7IGJib3ggKz0gcmhzOyByZXR1cm4oYmJveCk7IH0KICAK
ICBpbmxpbmUgQkJveCAmb3BlcmF0b3IgKz0gKEJCb3ggY29uc3QgJnJocykKICAgIHsKICAgICAg
aWYgKGVtcHR5KCkpIHJldHVybigqdGhpcyA9IHJocyk7CiAgICAgIGlmIChyaHMuZW1wdHkoKSkg
cmV0dXJuKCp0aGlzKTsKICAgICAgbGIubWluKHJocy5sYik7IHViLm1heChyaHMudWIpOyByZXR1
cm4oKnRoaXMpOwogICAgfQogIGlubGluZSBCQm94IG9wZXJhdG9yICsgKEJCb3ggY29uc3QgJnJo
cykgY29uc3QKICAgIHsgQkJveCBiYm94KCp0aGlzKTsgYmJveCArPSByaHM7IHJldHVybihiYm94
KTsgfQogIAogICAKICBpbmxpbmUgQkJveCAmb3BlcmF0b3IgKj0gKEJCb3ggY29uc3QgJnJocykK
ICAgIHsgbGIubWF4KHJocy5sYik7IHViLm1pbihyaHMudWIpOyAKICAgIGxiLmNlaWxpbmcoc3Rl
cCk7IHViLmZsb29yKHN0ZXApOwogICAgcmV0dXJuKCp0aGlzKTsgfQogIAogIGlubGluZSBCQm94
IG9wZXJhdG9yICogKEJCb3ggY29uc3QgJnJocykgY29uc3QKICAgIHsgQkJveCBib3RoKCp0aGlz
KTsgYm90aC5sYi5tYXgocmhzLmxiKTsgYm90aC51Yi5taW4ocmhzLnViKTsgCiAgICBib3RoLmxi
LmNlaWxpbmcoYm90aC5zdGVwKTsgYm90aC51Yi5mbG9vcihib3RoLnN0ZXApOwogICAgcmV0dXJu
KGJvdGgpOyB9CiAgCiAgaW5saW5lIGludCBpbnRlcnNlY3RzKEJCb3ggY29uc3QgJnJocykgY29u
c3QKICAgIHsgQkJveCBib3RoKCp0aGlzKTsgYm90aC5sYi5tYXgocmhzLmxiKTsgYm90aC51Yi5t
aW4ocmhzLnViKTsgCiAgICAgCiAgICByZXR1cm4oIWJvdGguZW1wdHkoKSk7IH0KICAKICAgIAog
IGlubGluZSBpbnQgb3BlcmF0b3IgPT0gKEJCb3ggY29uc3QgJnJocykgY29uc3QKICAgIHsgcmV0
dXJuKCgodWIgPT0gcmhzLnViKSAmJiAobGIgPT0gcmhzLmxiKSkgfHwgCgkgICAgIChlbXB0eSgp
ICYmIHJocy5lbXB0eSgpKSk7IH0KICBpbmxpbmUgaW50IG9wZXJhdG9yICE9IChCQm94IGNvbnN0
ICZyaHMpIGNvbnN0IAogICAgeyByZXR1cm4oISgqdGhpcyA9PSByaHMpKTsgfSAKICAgCiAgIAoK
ICBpbmxpbmUgaW50IGluc2lkZShjb25zdCBpbnQgaSkgY29uc3QKICAgIHsgcmV0dXJuICggKGkg
Pj0gbGIoMCkpICYmIChpIDw9IHViKDApKSApOyB9CiAgCiAgaW5saW5lIGludCBpbnNpZGUoY29u
c3QgaW50IGksIGNvbnN0IGludCBqKSBjb25zdAogICAgeyByZXR1cm4gKCAoKGkgPj0gbGIoMCkp
ICYmIChpIDw9IHViKDApKSkKCSAgICAgICAmJiAoKGogPj0gbGIoMSkpICYmIChqIDw9IHViKDEp
KSkpOyB9CiAgCiAgaW5saW5lIGludCBpbnNpZGUoY29uc3QgaW50IGksIGNvbnN0IGludCBqLCBj
b25zdCBpbnQgaykgY29uc3QKICAgIHsgcmV0dXJuICggKChpID49IGxiKDApKSAmJiAoaSA8PSB1
YigwKSkpCgkgICAgICAgJiYgKChqID49IGxiKDEpKSAmJiAoaiA8PSB1YigxKSkpCgkgICAgICAg
JiYgKChrID49IGxiKDIpKSAmJiAoayA8PSB1YigyKSkpKTsgfQogIAogIGlubGluZSBpbnQgaW5z
aWRlKGNvbnN0IGludCAqYykgY29uc3QKICAgIHsgcmV0dXJuICggISgocmFuayA8PSAwKSB8fAoJ
CSAoKHJhbmsgPiAwKSAmJiAoY1swXSA8IGxiKDApIHx8IGNbMF0gPiB1YigwKSkpIHx8CgkJICgo
cmFuayA+IDEpICYmIChjWzFdIDwgbGIoMSkgfHwgY1sxXSA+IHViKDEpKSkgfHwgICAgIAoJCSAo
KHJhbmsgPiAyKSAmJiAoY1syXSA8IGxiKDIpIHx8IGNbMl0gPiB1YigyKSkpCgkJICkpIDsgfQog
IAogIGlubGluZSBpbnQgaW5zaWRlKENvb3JkcyBjb25zdCAmYykgY29uc3QKICAgIHsgcmV0dXJu
IChCQm94OjppbnNpZGUoYygpKSk7IH0KICAKICAgCgogIGlubGluZSBpbnQgaW50ZXJpb3IoY29u
c3QgaW50IGkpIGNvbnN0CiAgICB7IHJldHVybiAoIChpID4gbGIoMCkpICYmIChpIDwgdWIoMCkp
ICk7IH0KICAKICBpbmxpbmUgaW50IGludGVyaW9yKGNvbnN0IGludCBpLCBjb25zdCBpbnQgaikg
Y29uc3QKICAgIHsgcmV0dXJuICggKChpID4gbGIoMCkpICYmIChpIDwgdWIoMCkpKQoJCSYmICgo
aiA+IGxiKDEpKSAmJiAoaiA8IHViKDEpKSkpOyB9CiAgCiAgaW5saW5lIGludCBpbnRlcmlvcihj
b25zdCBpbnQgaSwgY29uc3QgaW50IGosIGNvbnN0IGludCBrKSBjb25zdAogICAgeyByZXR1cm4g
KCAoKGkgPiBsYigwKSkgJiYgKGkgPCB1YigwKSkpCgkgICAgICAgJiYgKChqID4gbGIoMSkpICYm
IChqIDwgdWIoMSkpKQoJICAgICAgICYmICgoayA+IGxiKDIpKSAmJiAoayA8IHViKDIpKSkpOyB9
CiAgCiAgaW5saW5lIGludCBpbnRlcmlvcihjb25zdCBpbnQgKmMpIGNvbnN0CiAgICB7IHJldHVy
biAoICEoKHJhbmsgPD0gMCkgfHwKCQkgKChyYW5rID4gMCkgJiYgKGNbMF0gPD0gbGIoMCkgfHwg
Y1swXSA+PSB1YigwKSkpIHx8CgkJICgocmFuayA+IDEpICYmIChjWzFdIDw9IGxiKDEpIHx8IGNb
MV0gPj0gdWIoMSkpKSB8fCAgICAgCgkJICgocmFuayA+IDIpICYmIChjWzJdIDw9IGxiKDIpIHx8
IGNbMl0gPj0gdWIoMikpKQoJCSApKSA7IH0KICBpbmxpbmUgaW50IGludGVyaW9yKENvb3JkcyBj
b25zdCAmYykgY29uc3QKICAgIHsgcmV0dXJuIChCQm94OjppbnRlcmlvcihjKCkpKTsgfQogIAog
ICAKICAgCgoKCgoKCiAgCiAgIAogIGlubGluZSBpbnQgb3BlcmF0b3IgPiAoQkJveCBjb25zdCAm
cmhzKSBjb25zdCAKICAgIHsgcmV0dXJuKCBpbnNpZGUocmhzLnVwcGVyKCkpICYmIGluc2lkZShy
aHMubG93ZXIoKSkgKTsgfSAKICBpbmxpbmUgaW50IG9wZXJhdG9yID49IChCQm94IGNvbnN0ICZy
aHMpIGNvbnN0IAogICAgeyByZXR1cm4oICgqdGhpcyA9PSByaHMpIHx8IAoJICAgICAgKGluc2lk
ZShyaHMudXBwZXIoKSkgJiYgaW5zaWRlKHJocy5sb3dlcigpKSkgKTsgfSAKICAKICBpbmxpbmUg
aW50IG9wZXJhdG9yIDwgKEJCb3ggY29uc3QgJnJocykgY29uc3QgCiAgICB7IHJldHVybiggcmhz
Lmluc2lkZSh1YikgJiYgcmhzLmluc2lkZShsYikgKTsgfSAKICBpbmxpbmUgaW50IG9wZXJhdG9y
IDw9IChCQm94IGNvbnN0ICZyaHMpIGNvbnN0IAogICAgeyByZXR1cm4oIChyaHMgPT0gKnRoaXMp
IHx8IAoJICAgICAgKHJocy5pbnNpZGUodWIpICYmIHJocy5pbnNpZGUobGIpKSApOyB9IAogIAog
ICAKICBpbmxpbmUgdm9pZCBhY2NyZXRlKGNvbnN0IGludCBpKQogICAgeyBpZiAoIWVtcHR5KCkp
IHsgbGIgLT0gc3RlcCppOyB1YiArPSBzdGVwKmk7IH0gfQogIGlubGluZSB2b2lkIGdyb3coY29u
c3QgaW50IGkpCiAgICB7IGlmICghZW1wdHkoKSkgeyBsYiAtPSBzdGVwKmk7IHViICs9IHN0ZXAq
aTsgfSB9CiAgCiAgaW5saW5lIHZvaWQgYWNjcmV0ZShDb29yZHMgY29uc3QgJmMpCiAgICB7IGlm
ICghZW1wdHkoKSkgeyBsYiAtPSBjKnN0ZXA7IHViICs9IGMqc3RlcDsgfSB9CiAgaW5saW5lIHZv
aWQgZ3JvdyhDb29yZHMgY29uc3QgJmMpCiAgICB7IGlmICghZW1wdHkoKSkgeyBsYiAtPSBjKnN0
ZXA7IHViICs9IGMqc3RlcDsgfSB9CiAgCiAgaW5saW5lIHZvaWQgZ3Jvd2J5ZGltKGNvbnN0IHNo
b3J0KiBjKQogICAgewogICAgICBpZiAoZW1wdHkoKSkgcmV0dXJuOwogICAgICBpZiAocmFuayA+
IDApIHsgbGIoMCkgLT0gKHN0ZXAoMCkqY1swXSk7IHViKDApICs9IChzdGVwKDApKmNbMV0pOyB9
CiAgICAgIGlmIChyYW5rID4gMSkgeyBsYigxKSAtPSAoc3RlcCgxKSpjWzJdKTsgdWIoMSkgKz0g
KHN0ZXAoMSkqY1szXSk7IH0KICAgICAgaWYgKHJhbmsgPiAyKSB7IGxiKDIpIC09IChzdGVwKDIp
KmNbNF0pOyB1YigyKSArPSAoc3RlcCgyKSpjWzVdKTsgfQogICAgfQogIAogIGlubGluZSB2b2lk
IHNocmlua2J5ZGltKGNvbnN0IHNob3J0KiBjKQogICAgewogICAgICBpZiAoZW1wdHkoKSkgcmV0
dXJuOwogICAgICBpZiAocmFuayA+IDApIHsgbGIoMCkgKz0gKHN0ZXAoMCkqY1swXSk7IHViKDAp
IC09IChzdGVwKDApKmNbMV0pOyB9CiAgICAgIGlmIChyYW5rID4gMSkgeyBsYigxKSArPSAoc3Rl
cCgxKSpjWzJdKTsgdWIoMSkgLT0gKHN0ZXAoMSkqY1szXSk7IH0KICAgICAgaWYgKHJhbmsgPiAy
KSB7IGxiKDIpICs9IChzdGVwKDIpKmNbNF0pOyB1YigyKSAtPSAoc3RlcCgyKSpjWzVdKTsgfQog
ICAgfQogIAogIGlubGluZSB2b2lkIGdyb3d1cHBlcihjb25zdCBpbnQgaSkKICAgIHsgaWYgKCFl
bXB0eSgpKSB7IHViICs9IHN0ZXAqaTsgfSB9CiAgaW5saW5lIHZvaWQgZ3Jvd2xvd2VyKGNvbnN0
IGludCBpKQogICAgeyBpZiAoIWVtcHR5KCkpIHsgbGIgKz0gc3RlcCppOyB9IH0KICAKICBpbmxp
bmUgdm9pZCBncm93dXBwZXIoQ29vcmRzIGNvbnN0ICZjKQogICAgeyBpZiAoIWVtcHR5KCkpIHsg
dWIgKz0gc3RlcCpjOyB9IH0KICBpbmxpbmUgdm9pZCBncm93bG93ZXIoQ29vcmRzIGNvbnN0ICZj
KQogICAgeyBpZiAoIWVtcHR5KCkpIHsgbGIgKz0gc3RlcCpjOyB9IH0KICAKICBpbmxpbmUgdm9p
ZCBncm93dXBwZXIoY29uc3QgaW50IGQsIGNvbnN0IGludCBpKQogICAgeyBpZiAoIWVtcHR5KCkp
IHsgdWIoZCkgKz0gaSpzdGVwKGQpOyB9IH0KICBpbmxpbmUgdm9pZCBncm93bG93ZXIoY29uc3Qg
aW50IGQsIGNvbnN0IGludCBpKQogICAgeyBpZiAoIWVtcHR5KCkpIHsgbGIoZCkgKz0gaSpzdGVw
KGQpOyB9IH0KICAKICBpbmxpbmUgdm9pZCBncm93dXBwZXJieWRpbShjb25zdCBzaG9ydCogYykK
ICAgIHsKICAgICAgaWYgKGVtcHR5KCkpIHJldHVybjsKICAgICAgaWYgKHJhbmsgPiAwKSB7IHVi
KDApICs9IChzdGVwKDApKmNbMF0pOyB9CiAgICAgIGlmIChyYW5rID4gMSkgeyB1YigxKSArPSAo
c3RlcCgxKSpjWzFdKTsgfQogICAgICBpZiAocmFuayA+IDIpIHsgdWIoMikgKz0gKHN0ZXAoMikq
Y1syXSk7IH0KICAgIH0KICBpbmxpbmUgdm9pZCBncm93bG93ZXJieWRpbShjb25zdCBzaG9ydCog
YykKICAgIHsKICAgICAgaWYgKGVtcHR5KCkpIHJldHVybjsKICAgICAgaWYgKHJhbmsgPiAwKSB7
IGxiKDApICs9IChzdGVwKDApKmNbMF0pOyB9CiAgICAgIGlmIChyYW5rID4gMSkgeyBsYigxKSAr
PSAoc3RlcCgxKSpjWzFdKTsgfQogICAgICBpZiAocmFuayA+IDIpIHsgbGIoMikgKz0gKHN0ZXAo
MikqY1syXSk7IH0KICAgIH0KICAKICBpbmxpbmUgdm9pZCBzaHJpbmt1cHBlcmJ5ZGltKGNvbnN0
IHNob3J0KiBjKQogICAgewogICAgICBpZiAoZW1wdHkoKSkgcmV0dXJuOwogICAgICBpZiAocmFu
ayA+IDApIHsgdWIoMCkgLT0gKHN0ZXAoMCkqY1swXSk7IH0KICAgICAgaWYgKHJhbmsgPiAxKSB7
IHViKDEpIC09IChzdGVwKDEpKmNbMV0pOyB9CiAgICAgIGlmIChyYW5rID4gMikgeyB1YigyKSAt
PSAoc3RlcCgyKSpjWzJdKTsgfQogICAgfQogIGlubGluZSB2b2lkIHNocmlua2xvd2VyYnlkaW0o
Y29uc3Qgc2hvcnQqIGMpCiAgICB7CiAgICAgIGlmIChlbXB0eSgpKSByZXR1cm47CiAgICAgIGlm
IChyYW5rID4gMCkgeyBsYigwKSAtPSAoc3RlcCgwKSpjWzBdKTsgfQogICAgICBpZiAocmFuayA+
IDEpIHsgbGIoMSkgLT0gKHN0ZXAoMSkqY1sxXSk7IH0KICAgICAgaWYgKHJhbmsgPiAyKSB7IGxi
KDIpIC09IChzdGVwKDIpKmNbMl0pOyB9CiAgICB9CiAgCiAgaW5saW5lIHZvaWQgc2hpZnQoY29u
c3QgaW50IGMpCiAgICB7IGlmICghZW1wdHkoKSkgeyBsYis9c3RlcCpjIDsgdWIrPXN0ZXAqYzsg
fSB9CiAgaW5saW5lIHZvaWQgc2hpZnQoQ29vcmRzIGNvbnN0ICZjKQogICAgeyBpZiAoIWVtcHR5
KCkpIHsgbGIrPXN0ZXAqYyA7IHViKz1zdGVwKmM7IH0gfQogIGlubGluZSB2b2lkIHNoaWZ0KGNv
bnN0IGludCBkLCBjb25zdCBpbnQgYykKICAgIHsgaWYgKCFlbXB0eSgpKSB7IGxiKGQpKz1zdGVw
KGQpKmMgOyB1YihkKSs9c3RlcChkKSpjOyB9IH0KICAKICAgCiAgaW5saW5lIHZvaWQgY29hcnNl
bihjb25zdCBpbnQgYnkpCiAgICB7IGlmICghZW1wdHkoKSkgCiAgICAgIHsgc3RlcCAqPSBieTsg
bGIgPSAobGIvc3RlcCkqc3RlcDsgdWIgPSAodWIvc3RlcCkqc3RlcDsgfSB9CiAgaW5saW5lIHZv
aWQgY29hcnNlbihDb29yZHMgY29uc3QgJmJ5KQogICAgIHsgaWYgKCFlbXB0eSgpKSAKICAgICAg
IHsgc3RlcCAqPSBieTsgbGIgPSAobGIvc3RlcCkqc3RlcDsgdWIgPSAodWIvc3RlcCkqc3RlcDsg
fSB9CiAgaW5saW5lIHZvaWQgY29hcnNlbihjb25zdCBpbnQgZCwgY29uc3QgaW50IGJ5KQogICAg
eyBpZiAoIWVtcHR5KCkpIHsgCiAgICAgIHN0ZXAoZCkgKj0gYnk7CiAgICAgIGxiKGQpID0gKGxi
KGQpL3N0ZXAoZCkpKnN0ZXAoZCk7CiAgICAgIHViKGQpID0gKHViKGQpL3N0ZXAoZCkpKnN0ZXAo
ZCk7IH0gfSAgIAogICAKICAgCiAgaW5saW5lIHZvaWQgcmVmaW5lKGNvbnN0IGludCBieSkgeyBz
dGVwIC89IGJ5OyB9CiAgaW5saW5lIHZvaWQgcmVmaW5lKENvb3JkcyBjb25zdCAmYnkpIHsgc3Rl
cCAvPSBieTt9CgogICAKICBpbmxpbmUgdm9pZCByZWZpbmUoY29uc3QgaW50IGJ5LCBjb25zdCBp
bnQgb2xhcCkgCiAgICB7IHN0ZXAgLz0gYnk7IHViICs9IChzdGVwKihvbGFwKihieS0xKSkpOyB9
CiAgIAogICAKICBpbmxpbmUgdm9pZCByZWZpbmUoY29uc3QgaW50IGQsIGNvbnN0IGludCBieSwg
Y29uc3QgaW50IG9sYXApIAogICAgeyBzdGVwKGQpIC89IGJ5OyB1YihkKSArPSAoc3RlcChkKSoo
b2xhcCooYnktMSkpKTsgfQoKCgoKCgoKCn07Cgppc3RyZWFtJiBvcGVyYXRvciA+PiAoaXN0cmVh
bSYgcywgQkJveCAmIGJiKTsKb3N0cmVhbSYgb3BlcmF0b3IgPDwgKG9zdHJlYW0mIHMsIGNvbnN0
IEJCb3ggJmJiKTsKaWZzdHJlYW0mIG9wZXJhdG9yID4+IChpZnN0cmVhbSYgcywgQkJveCYgYmIp
OwpvZnN0cmVhbSYgb3BlcmF0b3IgPDwgKG9mc3RyZWFtJiBzLCBjb25zdCBCQm94JiBiYik7Cgoj
IDQzNCAiQkJveC5oIgoKCiAKaW5saW5lIENvb3JkcyAmdXBwZXIoQkJveCAmYmIpCnsgcmV0dXJu
IChiYi51cHBlcigpKTsgfQppbmxpbmUgaW50IHVwcGVyKEJCb3ggJmJiLCBjb25zdCBpbnQgaSkK
eyByZXR1cm4gKGJiLnVwcGVyKGkpKTsgfQoKaW5saW5lIENvb3JkcyAmbG93ZXIoQkJveCAmYmIp
CnsgcmV0dXJuIChiYi5sb3dlcigpKTsgfQppbmxpbmUgaW50IGxvd2VyKEJCb3ggJmJiLCBjb25z
dCBpbnQgaSkKeyByZXR1cm4gKGJiLmxvd2VyKGkpKTsgfQoKaW5saW5lIENvb3JkcyAmc3RlcHNp
emUoQkJveCAmYmIpCnsgcmV0dXJuIChiYi5zdGVwc2l6ZSgpKTsgfQppbmxpbmUgaW50IHN0ZXBz
aXplKEJCb3ggJmJiLCBjb25zdCBpbnQgaSkKeyByZXR1cm4gKGJiLnN0ZXBzaXplKGkpKTsgfQoK
aW5saW5lIENvb3JkcyBleHRlbnRzKEJCb3ggJmJiKQp7IHJldHVybiAoYmIuZXh0ZW50cygpKTsg
fQppbmxpbmUgaW50IGV4dGVudHMoQkJveCAmYmIsIGNvbnN0IGludCBpKQp7IHJldHVybiAoYmIu
ZXh0ZW50cyhpKSk7IH0KCmlubGluZSBpbnQgc2l6ZShCQm94ICZiYikKeyByZXR1cm4gKGJiLnNp
emUoKSk7IH0KaW5saW5lIGludCBpbnNpZGUoQkJveCAmYmIsIENvb3JkcyBjb25zdCAmYykKeyBy
ZXR1cm4gKGJiLmluc2lkZShjKSk7IH0KCiAKaW5saW5lIEJCb3ggYWNjcmV0ZShCQm94IGNvbnN0
ICZiYm94LCBDb29yZHMgY29uc3QgJmMpCnsgY29uc3QgQ29vcmRzJiB1ID0gYmJveC51cHBlcigp
OyBjb25zdCBDb29yZHMmIGwgPSBiYm94Lmxvd2VyKCk7IAogY29uc3QgQ29vcmRzJiBzID0gYmJv
eC5zdGVwc2l6ZSgpOwogcmV0dXJuICggKGJib3guZW1wdHkoKSkgPyBiYm94IDogQkJveChsLWMq
cywgdStjKnMsIHMpICk7IH0KaW5saW5lIEJCb3ggZ3JvdyhCQm94IGNvbnN0ICZiYm94LCBDb29y
ZHMgY29uc3QgJmMpCnsgY29uc3QgQ29vcmRzJiB1ID0gYmJveC51cHBlcigpOyBjb25zdCBDb29y
ZHMmIGwgPSBiYm94Lmxvd2VyKCk7IAogY29uc3QgQ29vcmRzJiBzID0gYmJveC5zdGVwc2l6ZSgp
OwogcmV0dXJuICggKGJib3guZW1wdHkoKSkgPyBiYm94IDogQkJveChsLWMqcywgdStjKnMsIHMp
ICk7IH0KCmlubGluZSBCQm94IGFjY3JldGUoQkJveCBjb25zdCAmYmJveCwgY29uc3QgaW50IGMp
CnsgY29uc3QgQ29vcmRzJiB1ID0gYmJveC51cHBlcigpOyBjb25zdCBDb29yZHMmIGwgPSBiYm94
Lmxvd2VyKCk7IAogY29uc3QgQ29vcmRzJiBzID0gYmJveC5zdGVwc2l6ZSgpOwogcmV0dXJuICgg
KGJib3guZW1wdHkoKSkgPyBiYm94IDogQkJveChsLXMqYywgdStzKmMsIHMpICk7IH0KaW5saW5l
IEJCb3ggZ3JvdyhCQm94IGNvbnN0ICZiYm94LCBjb25zdCBpbnQgYykKeyBjb25zdCBDb29yZHMm
IHUgPSBiYm94LnVwcGVyKCk7IGNvbnN0IENvb3JkcyYgbCA9IGJib3gubG93ZXIoKTsgCiBjb25z
dCBDb29yZHMmIHMgPSBiYm94LnN0ZXBzaXplKCk7CiByZXR1cm4gKCAoYmJveC5lbXB0eSgpKSA/
IGJib3ggOiBCQm94KGwtcypjLCB1K3MqYywgcykgKTsgfQoKQkJveCogYWNjcmV0ZShCQm94IGNv
bnN0ICpjb25zdCBiYm94LCBjb25zdCBpbnQgbiwgY29uc3QgaW50IGMpOwpCQm94KiBncm93KEJC
b3ggY29uc3QgKmNvbnN0IGJib3gsIGNvbnN0IGludCBuLCBjb25zdCBpbnQgYyk7CgpCQm94KiBh
Y2NyZXRlKEJCb3ggY29uc3QgKmNvbnN0IGJib3gsIGNvbnN0IGludCBuLCBDb29yZHMgY29uc3Qg
JmMpOwpCQm94KiBncm93KEJCb3ggY29uc3QgKmNvbnN0IGJib3gsIGNvbnN0IGludCBuLCBDb29y
ZHMgY29uc3QgJmMpOwoKaW5saW5lIEJCb3ggZ3Jvd3VwcGVyKEJCb3ggY29uc3QgJmJib3gsIGNv
bnN0IGludCBjKQp7IGNvbnN0IENvb3JkcyYgdSA9IGJib3gudXBwZXIoKTsgY29uc3QgQ29vcmRz
JiBsID0gYmJveC5sb3dlcigpOyAKIGNvbnN0IENvb3JkcyYgcyA9IGJib3guc3RlcHNpemUoKTsK
IHJldHVybiAoIChiYm94LmVtcHR5KCkpID8gYmJveCA6IEJCb3gobCwgdStzKmMsIHMpICk7IH0K
aW5saW5lIEJCb3ggZ3Jvd2xvd2VyKEJCb3ggY29uc3QgJmJib3gsIGNvbnN0IGludCBjKQp7IGNv
bnN0IENvb3JkcyYgdSA9IGJib3gudXBwZXIoKTsgY29uc3QgQ29vcmRzJiBsID0gYmJveC5sb3dl
cigpOyAKIGNvbnN0IENvb3JkcyYgcyA9IGJib3guc3RlcHNpemUoKTsKIHJldHVybiAoIChiYm94
LmVtcHR5KCkpID8gYmJveCA6IEJCb3gobCtzKmMsIHUsIHMpICk7IH0KCmlubGluZSBCQm94IGdy
b3d1cHBlcihCQm94IGNvbnN0ICZiYm94LCBjb25zdCBpbnQgZCwgY29uc3QgaW50IGMpCnsKICBp
ZiAoYmJveC5lbXB0eSgpKSByZXR1cm4oYmJveCk7CiAgY29uc3QgQ29vcmRzJiBsID0gYmJveC5s
b3dlcigpOyBjb25zdCBDb29yZHMmIHMgPSBiYm94LnN0ZXBzaXplKCk7CiAgQ29vcmRzIHUgPSBi
Ym94LnVwcGVyKCk7IHUoZCkgKz0gYypzKGQpOwogIHJldHVybihCQm94KGwsIHUsIHMpKTsKfQpp
bmxpbmUgQkJveCBncm93bG93ZXIoQkJveCBjb25zdCAmYmJveCwgY29uc3QgaW50IGQsIGNvbnN0
IGludCBjKQp7CiAgaWYgKGJib3guZW1wdHkoKSkgcmV0dXJuKGJib3gpOwogIGNvbnN0IENvb3Jk
cyYgdSA9IGJib3gudXBwZXIoKTsgY29uc3QgQ29vcmRzJiBzID0gYmJveC5zdGVwc2l6ZSgpOwog
IENvb3JkcyBsID0gYmJveC5sb3dlcigpOyBsKGQpICs9IGMqcyhkKTsKICByZXR1cm4oQkJveChs
LCB1LCBzKSk7Cn0KCmlubGluZSBCQm94IGdyb3dieWRpbShCQm94IGNvbnN0ICZiYm94LCBjb25z
dCBzaG9ydCogYykgICAgICAgCnsKICBCQm94IGJiKGJib3gpOwogIGlmIChiYi5lbXB0eSgpKSBy
ZXR1cm4oYmIpOwogIGlmIChiYi5yYW5rID4gMCkKICAgIHtiYi5sb3dlcigwKSAtPSAoYmIuc3Rl
cHNpemUoMCkqY1swXSk7YmIudXBwZXIoMCkgKz0gKGJiLnN0ZXBzaXplKDApKmNbMV0pO30KICBp
ZiAoYmIucmFuayA+IDEpCiAgICB7YmIubG93ZXIoMSkgLT0gKGJiLnN0ZXBzaXplKDEpKmNbMl0p
O2JiLnVwcGVyKDEpICs9IChiYi5zdGVwc2l6ZSgxKSpjWzNdKTt9CiAgaWYgKGJiLnJhbmsgPiAy
KQogICAge2JiLmxvd2VyKDIpIC09IChiYi5zdGVwc2l6ZSgyKSpjWzRdKTtiYi51cHBlcigyKSAr
PSAoYmIuc3RlcHNpemUoMikqY1s1XSk7fQogIHJldHVybiBiYjsKfQppbmxpbmUgQkJveCBncm93
dXBwZXJieWRpbShCQm94IGNvbnN0ICZiYm94LCBjb25zdCBzaG9ydCogYykgIAp7CiAgQkJveCBi
YihiYm94KTsKICBpZiAoYmIuZW1wdHkoKSkgcmV0dXJuKGJiKTsKICBpZiAoYmIucmFuayA+IDAp
CiAgICB7YmIudXBwZXIoMCkgKz0gKGJiLnN0ZXBzaXplKDApKmNbMF0pO30KICBpZiAoYmIucmFu
ayA+IDEpCiAgICB7YmIudXBwZXIoMSkgKz0gKGJiLnN0ZXBzaXplKDEpKmNbMV0pO30KICBpZiAo
YmIucmFuayA+IDIpCiAgICB7YmIudXBwZXIoMikgKz0gKGJiLnN0ZXBzaXplKDIpKmNbMl0pO30K
ICByZXR1cm4gYmI7Cn0KaW5saW5lIEJCb3ggZ3Jvd2xvd2VyYnlkaW0oQkJveCBjb25zdCAmYmJv
eCwgY29uc3Qgc2hvcnQqIGMpICAKewogIEJCb3ggYmIoYmJveCk7CiAgaWYgKGJiLmVtcHR5KCkp
IHJldHVybihiYik7CiAgaWYgKGJiLnJhbmsgPiAwKQogICAge2JiLmxvd2VyKDApICs9IChiYi5z
dGVwc2l6ZSgwKSpjWzBdKTt9CiAgaWYgKGJiLnJhbmsgPiAxKQogICAge2JiLmxvd2VyKDEpICs9
IChiYi5zdGVwc2l6ZSgxKSpjWzFdKTt9CiAgaWYgKGJiLnJhbmsgPiAyKQogICAge2JiLmxvd2Vy
KDIpICs9IChiYi5zdGVwc2l6ZSgyKSpjWzJdKTt9CiAgcmV0dXJuIGJiOwp9CgppbmxpbmUgQkJv
eCBzaHJpbmtieWRpbShCQm94IGNvbnN0ICZiYm94LCBjb25zdCBzaG9ydCogYykgICAgIAp7CiAg
QkJveCBiYihiYm94KTsKICBpZiAoYmIuZW1wdHkoKSkgcmV0dXJuKGJiKTsKICBpZiAoYmIucmFu
ayA+IDApCiAgICB7YmIubG93ZXIoMCkgKz0gKGJiLnN0ZXBzaXplKDApKmNbMF0pO2JiLnVwcGVy
KDApIC09IChiYi5zdGVwc2l6ZSgwKSpjWzFdKTt9CiAgaWYgKGJiLnJhbmsgPiAxKQogICAge2Ji
Lmxvd2VyKDEpICs9IChiYi5zdGVwc2l6ZSgxKSpjWzJdKTtiYi51cHBlcigxKSAtPSAoYmIuc3Rl
cHNpemUoMSkqY1szXSk7fQogIGlmIChiYi5yYW5rID4gMikKICAgIHtiYi5sb3dlcigyKSArPSAo
YmIuc3RlcHNpemUoMikqY1s0XSk7YmIudXBwZXIoMikgLT0gKGJiLnN0ZXBzaXplKDIpKmNbNV0p
O30KICByZXR1cm4gYmI7Cn0KaW5saW5lIEJCb3ggc2hyaW5rdXBwZXJieWRpbShCQm94IGNvbnN0
ICZiYm94LCBjb25zdCBzaG9ydCogYykgIAp7CiAgQkJveCBiYihiYm94KTsKICBpZiAoYmIuZW1w
dHkoKSkgcmV0dXJuKGJiKTsKICBpZiAoYmIucmFuayA+IDApCiAgICB7YmIudXBwZXIoMCkgLT0g
KGJiLnN0ZXBzaXplKDApKmNbMF0pO30KICBpZiAoYmIucmFuayA+IDEpCiAgICB7YmIudXBwZXIo
MSkgLT0gKGJiLnN0ZXBzaXplKDEpKmNbMV0pO30KICBpZiAoYmIucmFuayA+IDIpCiAgICB7YmIu
dXBwZXIoMikgLT0gKGJiLnN0ZXBzaXplKDIpKmNbMl0pO30KICByZXR1cm4gYmI7Cn0KaW5saW5l
IEJCb3ggc2hyaW5rbG93ZXJieWRpbShCQm94IGNvbnN0ICZiYm94LCBjb25zdCBzaG9ydCogYykg
IAp7CiAgQkJveCBiYihiYm94KTsKICBpZiAoYmIuZW1wdHkoKSkgcmV0dXJuKGJiKTsKICBpZiAo
YmIucmFuayA+IDApCiAgICB7YmIubG93ZXIoMCkgLT0gKGJiLnN0ZXBzaXplKDApKmNbMF0pO30K
ICBpZiAoYmIucmFuayA+IDEpCiAgICB7YmIubG93ZXIoMSkgLT0gKGJiLnN0ZXBzaXplKDEpKmNb
MV0pO30KICBpZiAoYmIucmFuayA+IDIpCiAgICB7YmIubG93ZXIoMikgLT0gKGJiLnN0ZXBzaXpl
KDIpKmNbMl0pO30KICByZXR1cm4gYmI7Cn0KCiAKaW5saW5lIEJCb3ggc2hpZnRhYnMoQkJveCBj
b25zdCAmYmIsIGNvbnN0IGludCBjKQp7IHJldHVybihCQm94KGJiLmxvd2VyKCkrYywgYmIudXBw
ZXIoKStjLCBiYi5zdGVwc2l6ZSgpKSk7IH0KaW5saW5lIEJCb3ggc2hpZnRhYnMoQkJveCBjb25z
dCAmYmIsIENvb3JkcyBjb25zdCAmYykKeyByZXR1cm4oQkJveChiYi5sb3dlcigpK2MsIGJiLnVw
cGVyKCkrYywgYmIuc3RlcHNpemUoKSkpOyB9CgppbmxpbmUgQkJveCBzaGlmdChCQm94IGNvbnN0
ICZiYiwgY29uc3QgaW50IGMpCnsgcmV0dXJuKEJCb3goYmIubG93ZXIoKStiYi5zdGVwc2l6ZSgp
KmMsIAoJICAgICAgYmIudXBwZXIoKStiYi5zdGVwc2l6ZSgpKmMsYmIuc3RlcHNpemUoKSkpOyB9
CmlubGluZSBCQm94IHNoaWZ0KEJCb3ggY29uc3QgJmJiLCBDb29yZHMgY29uc3QgJmMpCnsgcmV0
dXJuKEJCb3goYmIubG93ZXIoKStjKmJiLnN0ZXBzaXplKCksIAoJICAgICAgYmIudXBwZXIoKStj
KmJiLnN0ZXBzaXplKCksYmIuc3RlcHNpemUoKSkpOyB9CgppbmxpbmUgQkJveCBzaGlmdGFicyhC
Qm94IGNvbnN0ICZiYm94LCBjb25zdCBpbnQgZCwgY29uc3QgaW50IGMpCnsKICBpZiAoYmJveC5l
bXB0eSgpKSByZXR1cm4oYmJveCk7CiAgQ29vcmRzIHUgPSBiYm94LnVwcGVyKCk7IHUoZCkgKz0g
YzsKICBDb29yZHMgbCA9IGJib3gubG93ZXIoKTsgbChkKSArPSBjOwogIHJldHVybihCQm94KGws
IHUsIGJib3guc3RlcHNpemUoKSkpOwp9CmlubGluZSBCQm94IHNoaWZ0KEJCb3ggY29uc3QgJmJi
b3gsIGNvbnN0IGludCBkLCBjb25zdCBpbnQgYykKewogIGlmIChiYm94LmVtcHR5KCkpIHJldHVy
bihiYm94KTsKICBDb29yZHMgdSA9IGJib3gudXBwZXIoKTsgdShkKSArPSBjKmJib3guc3RlcHNp
emUoZCk7CiAgQ29vcmRzIGwgPSBiYm94Lmxvd2VyKCk7IGwoZCkgKz0gYypiYm94LnN0ZXBzaXpl
KGQpOwogIHJldHVybihCQm94KGwsIHUsIGJib3guc3RlcHNpemUoKSkpOwp9CgogCmlubGluZSBC
Qm94IGNvYXJzZW4oQkJveCBjb25zdCAmYmJveCwgY29uc3QgaW50IGJ5KQp7IENvb3JkcyBzID0g
YmJveC5zdGVwc2l6ZSgpICogYnk7CiBjb25zdCBDb29yZHMmIHUgPSBiYm94LnVwcGVyKCk7IGNv
bnN0IENvb3JkcyYgbCA9IGJib3gubG93ZXIoKTsKIHJldHVybiAoKGJib3guZW1wdHkoKSkgPyBi
Ym94IDogQkJveCgobC9zKSpzLCh1L3MpKnMscykpOyB9CmlubGluZSBCQm94IGNvYXJzZW4oQkJv
eCBjb25zdCAmYmJveCwgQ29vcmRzIGNvbnN0IGJ5KQp7IENvb3JkcyBzID0gYmJveC5zdGVwc2l6
ZSgpICogYnk7CiBjb25zdCBDb29yZHMmIHUgPSBiYm94LnVwcGVyKCk7IGNvbnN0IENvb3JkcyYg
bCA9IGJib3gubG93ZXIoKTsKIHJldHVybiAoKGJib3guZW1wdHkoKSkgPyBiYm94IDogQkJveCgo
bC9zKSpzLCh1L3MpKnMscykpOyB9CmlubGluZSBCQm94IGNvYXJzZW4oQkJveCBjb25zdCAmYmJv
eCwgY29uc3QgaW50IGQsIGNvbnN0IGludCBieSkKeyBDb29yZHMgcyA9IGJib3guc3RlcHNpemUo
KTsgcyhkKSAqPSBieTsKIGNvbnN0IENvb3JkcyYgdSA9IGJib3gudXBwZXIoKTsgY29uc3QgQ29v
cmRzJiBsID0gYmJveC5sb3dlcigpOwogcmV0dXJuICgoYmJveC5lbXB0eSgpKSA/IGJib3ggOiBC
Qm94KChsL3MpKnMsKHUvcykqcyxzKSk7IH0KCiAKaW5saW5lIEJCb3ggcmVmaW5lKGNvbnN0IEJC
b3gmIGJib3gsIGNvbnN0IGludCBieSkgCnsgcmV0dXJuIChCQm94KGJib3gubG93ZXIoKSxiYm94
LnVwcGVyKCksYmJveC5zdGVwc2l6ZSgpL2J5KSk7IH0KaW5saW5lIEJCb3ggcmVmaW5lKGNvbnN0
IEJCb3gmIGJib3gsIGNvbnN0IENvb3JkcyYgYnkpIAp7IHJldHVybiAoQkJveChiYm94Lmxvd2Vy
KCksYmJveC51cHBlcigpLGJib3guc3RlcHNpemUoKS9ieSkpOyB9CgogCmlubGluZSBCQm94IHJl
ZmluZShjb25zdCBCQm94JiBiYm94LCBjb25zdCBpbnQgYnksIGNvbnN0IGludCBvbGFwKSAKeyBD
b29yZHMgcyA9IGJib3guc3RlcHNpemUoKTsgcyAvPSBieTsKIHJldHVybiAoQkJveChiYm94Lmxv
d2VyKCksYmJveC51cHBlcigpKyhzKihvbGFwKihieS0xKSkpLHMpKTsgfQogCgoKaW5saW5lIEJC
b3ggcmVmaW5lKGNvbnN0IEJCb3gmIGJib3gsIGNvbnN0IGludCBkLCBjb25zdCBpbnQgYnksIAoJ
CSAgIGNvbnN0IGludCBvbGFwKSAgIAp7IENvb3JkcyBzKGJib3guc3RlcHNpemUoKSk7IHMoZCkg
Lz0gYnk7IAogQ29vcmRzIHUoYmJveC51cHBlcigpKTsgdShkKSArPSBzKGQpKihvbGFwKihieS0x
KSk7CiByZXR1cm4gKEJCb3goYmJveC5sb3dlcigpLHUscykpOyB9CgojIDEgIkNvb3Jkc0l0ZXJh
dG9yLmgiIDEKCgojIDEgIkJCb3guaCIgMQojIDY0OCAiQkJveC5oIgoKIyAzICJDb29yZHNJdGVy
YXRvci5oIiAyCgoKCmNsYXNzIENvb3Jkc0l0ZXJhdG9yIHsKICBCQm94IGI7CiAgaW50IGlbM107
CiAgaW50IHI7CiAgCiAgdm9pZCBzZXQoQkJveCYgYmkpIHsKICAgIGIgPSBiaTsKICAgIGZvcihp
bnQgbj0wO248Yi5yYW5rO24rKykKICAgICAgaVtuXT1iLmxvd2VyKG4pOwogICAgciA9IGIucmFu
ayAtIDE7CiAgfQogIHZvaWQgaW5jKGludCBuKSB7CiAgICBpW25dICs9IGIuc3RlcHNpemUobik7
CiAgICBpZihuIDwgciAmJiBpW25dID4gYi51cHBlcihuKSkgewogICAgICBpW25dID0gYi5sb3dl
cihuKTsKICAgICAgaW5jKG4rMSk7CiAgICB9CiAgfQogcHVibGljOgogIENvb3Jkc0l0ZXJhdG9y
KCkge30KICBDb29yZHNJdGVyYXRvcihCQm94IGJpKSB7IHNldChiaSk7IH0KICBDb29yZHNJdGVy
YXRvciYgb3BlcmF0b3I9KEJCb3gmIGJpKSB7CiAgICBzZXQoYmkpOwogICAgcmV0dXJuICp0aGlz
OwogIH0KICB+Q29vcmRzSXRlcmF0b3IoKSB7fQogIHZvaWQgb3BlcmF0b3IrKygpIHsgaW5jKDAp
OyB9CiAgdm9pZCBvcGVyYXRvcisrKGludCkgeyBpbmMoMCk7IH0KICBpbnQgZ29vZCgpIHsKICAg
IHJldHVybiBpW3JdIDw9IGIudXBwZXIocik7CiAgfQogIG9wZXJhdG9yIGludCgpIHsgcmV0dXJu
IGdvb2QoKTsgfQogIENvb3JkcyBvcGVyYXRvciooKSB7IHJldHVybiBDb29yZHMocisxLGkpOyB9
Cn07CgppbmxpbmUgb3N0cmVhbSYKb3BlcmF0b3I8PChvc3RyZWFtJiBvLENvb3Jkc0l0ZXJhdG9y
JiBiYmkpIHsKICByZXR1cm4gbyA8PCAqYmJpOwp9CgojIDY0NiAiQkJveC5oIiAyCgoKCiMgMTUg
IkdyaWRCb3guaCIgMgoKCgoKY2xhc3MgR3JpZEJveCAKewogIGZyaWVuZCBvc3RyZWFtJiBvcGVy
YXRvcjw8KG9zdHJlYW0mLCBjb25zdCBHcmlkQm94Jik7CiAgZnJpZW5kIG9mc3RyZWFtJiBvcGVy
YXRvcjw8KG9mc3RyZWFtJiwgY29uc3QgR3JpZEJveCYpOwogIGZyaWVuZCBpZnN0cmVhbSYgb3Bl
cmF0b3I+PihpZnN0cmVhbSYsIEdyaWRCb3gmKTsKICBmcmllbmQgY2xhc3MgR3JpZEJveExpc3Q7
CiAgCiAgc2hvcnQgaW50IG93bmVyOwkJIAogIHNob3J0IGludCBpbmRleDsJCSAKICBzaG9ydCBp
bnQgcGluZGV4OyAgICAgICAgICAgICAgCiAgc2hvcnQgaW50IGNyc2xldjsgCQkgCiAgc2hvcnQg
aW50IGZpbmVsZXY7IAkJIAogIHNob3J0IGludCBsZXZzdGVwOyAgICAgICAgICAgICAKCiAgQkJv
eCBiYm94OyAgICAgICAgICAgICAgICAgICAgIAoKcHVibGljOgogICAKICBpbmxpbmUgR3JpZEJv
eCh2b2lkKQogICAgOiBvd25lcigoKC0xKSApICksIAogICAgICBpbmRleCgoLTEpICksIAogICAg
ICBwaW5kZXgoKC0xKSApLAogICAgICBjcnNsZXYoMCksIAogICAgICBmaW5lbGV2KDApLCAKICAg
ICAgbGV2c3RlcCgwKSB7fQogIAogIGlubGluZSBHcmlkQm94KGNvbnN0IGludCBvd24sIAoJCSBj
b25zdCBpbnQgaWR4LCAKCQkgY29uc3QgaW50IHBpZHgsCgkJIGNvbnN0IGludCBjbGV2LCAKCQkg
Y29uc3QgaW50IGZsZXYsIAoJCSBjb25zdCBpbnQgbHN0ZXAsIAoJCSBjb25zdCBCQm94JiBiYikK
ICAgIDogb3duZXIob3duKSwgCiAgICAgIGluZGV4KGlkeCksCiAgICAgIHBpbmRleChwaWR4KSwK
ICAgICAgY3JzbGV2KGNsZXYpLCAKICAgICAgZmluZWxldihmbGV2KSwgCiAgICAgIGxldnN0ZXAo
bHN0ZXApLCAKICAgICAgYmJveChiYikge30KICAKICBpbmxpbmUgR3JpZEJveChHcmlkQm94IGNv
bnN0ICZvdGhlcikKICAgIDogb3duZXIob3RoZXIub3duZXIpLCAKICAgICAgaW5kZXgob3RoZXIu
aW5kZXgpLAogICAgICBwaW5kZXgob3RoZXIucGluZGV4KSwKICAgICAgY3JzbGV2KG90aGVyLmNy
c2xldiksIAogICAgICBmaW5lbGV2KG90aGVyLmZpbmVsZXYpLCAKICAgICAgbGV2c3RlcChvdGhl
ci5sZXZzdGVwKSwgCiAgICAgIGJib3gob3RoZXIuYmJveCkge30KICAKICBpbmxpbmUgfkdyaWRC
b3godm9pZCkge30KCiAgaW5saW5lIEdyaWRCb3ggY29uc3QgJm9wZXJhdG9yPSAoR3JpZEJveCBj
b25zdCAmb3RoZXIpCiAgICB7IAogICAgICBvd25lcj1vdGhlci5vd25lcjsgCiAgICAgIGluZGV4
PW90aGVyLmluZGV4OwogICAgICBwaW5kZXg9b3RoZXIucGluZGV4OwogICAgICBjcnNsZXY9b3Ro
ZXIuY3JzbGV2OyAKICAgICAgZmluZWxldj1vdGhlci5maW5lbGV2OyAKICAgICAgbGV2c3RlcD1v
dGhlci5sZXZzdGVwOwogICAgICBiYm94PW90aGVyLmJib3g7IAogICAgICByZXR1cm4gKCp0aGlz
KTsgCiAgICB9CiAgCiAgaW5saW5lIHZvaWQgU2V0R3JpZEJveChjb25zdCBpbnQgb3duLCAKCQkJ
IGNvbnN0IGludCBpZHgsIAoJCQkgY29uc3QgaW50IHBpZHgsCgkJCSBjb25zdCBpbnQgY2xldiwg
CgkJCSBjb25zdCBpbnQgZmxldiwgCgkJCSBjb25zdCBpbnQgbHN0ZXAsIAoJCQkgY29uc3QgQkJv
eCYgYmIpCiAgICB7IAogICAgICBvd25lcj1vd247IAogICAgICBpbmRleD1pZHg7IAogICAgICBw
aW5kZXg9cGlkeDsKICAgICAgY3JzbGV2PWNsZXY7IAogICAgICBmaW5lbGV2PWZsZXY7IAogICAg
ICBsZXZzdGVwPWxzdGVwOyAKICAgICAgYmJveD1iYjsgCiAgICB9CiAgCiAgaW5saW5lIGludCBH
ZXRDYXJkaW5hbGl0eShjb25zdCBpbnQgZGltLCAKCQkJICAgIGNvbnN0IGludCBsZXYpIGNvbnN0
CiAgICB7IHJldHVybiAoaW50KTE8PChsZXYqZGltKTsgfQogIAogICAKICBpbmxpbmUgaW50IG9w
ZXJhdG9yPT0gKEdyaWRCb3ggY29uc3QgJm90aGVyKSBjb25zdAogICAgewogICAgICBpZiAoKHRo
aXMgPT0gJm90aGVyKSB8fCAoY3JzbGV2ID09IG90aGVyLmNyc2xldiAmJiAKCSAgIGdiQkJveChj
cnNsZXYpID09IG90aGVyLmdiQkJveChjcnNsZXYpKSkgcmV0dXJuIDE7CiAgICAgICBlbHNlIHJl
dHVybiAwOwogICAgfQoKICAgIAogIGlubGluZSBpbnQgZ2JPd25lcih2b2lkKSBjb25zdCB7IHJl
dHVybiAob3duZXIpOyB9CiAgaW5saW5lIGludCBnYkluZGV4KHZvaWQpIGNvbnN0IHsgcmV0dXJu
IChpbmRleCk7IH0KICBpbmxpbmUgaW50IGdiUEluZGV4KHZvaWQpIGNvbnN0IHsgcmV0dXJuIChw
aW5kZXgpOyB9CiAgaW5saW5lIGludCBnYlJhbmsodm9pZCkgY29uc3QgeyByZXR1cm4gKGJib3gu
cmFuayk7IH0KICBpbmxpbmUgaW50IGdiRmluZUxldih2b2lkKSBjb25zdCB7IHJldHVybiAoZmlu
ZWxldik7IH0KICBpbmxpbmUgaW50IGdiQ3JzTGV2KHZvaWQpIGNvbnN0IHsgcmV0dXJuIChjcnNs
ZXYpOyB9CiAgaW5saW5lIGludCBnYk51bUxldih2b2lkKSBjb25zdCAKICAgIHsgcmV0dXJuICgo
ZmluZWxldi1jcnNsZXYpL2xldnN0ZXArMSk7IH0KICBpbmxpbmUgaW50IGdiTGV2U3RlcCh2b2lk
KSBjb25zdCB7IHJldHVybiAobGV2c3RlcCk7IH0KICBpbmxpbmUgaW50IGdiTGV2SW5kZXgoY29u
c3QgaW50IGxldikgY29uc3QKICAgIHsgcmV0dXJuICgobGV2LWNyc2xldikvbGV2c3RlcCk7IH0K
CiAgaW5saW5lIGludCBnYkNvbnRhaW5zKGNvbnN0IGludCBsZXYpIGNvbnN0CiAgICB7IHJldHVy
biAobGV2PD1maW5lbGV2ICYmIGxldj49Y3JzbGV2KTsgfQogIGlubGluZSBpbnQgZ2JDb250YWlu
cyhjb25zdCBpbnQgbWlubGV2LCAKCQkJY29uc3QgaW50IG1heGxldikgY29uc3QKICAgIHsgcmV0
dXJuIChtaW5sZXY8PWZpbmVsZXYgJiYgbWF4bGV2Pj1jcnNsZXYpOyB9CgogIGlubGluZSB2b2lk
IGdiU2V0SW5kZXgoY29uc3QgaW50IGlkeCkgeyBpbmRleCA9IGlkeDsgfQogIGlubGluZSB2b2lk
IGdiU2V0T3duZXIoY29uc3QgaW50IHApIHsgb3duZXIgPSBwOyB9CgogIGludCBnYk51bShjb25z
dCBpbnQgb3ZlcmxhcCkgY29uc3Q7CiAgaW50IGdiV29yayhjb25zdCBpbnQgY2xldiwKCSAgICAg
Y29uc3QgaW50IG92ZXJsYXApIGNvbnN0OwogIGludCBnYk51bShjb25zdCBpbnQgbGV2LCAKCSAg
ICBjb25zdCBpbnQgb3ZlcmxhcCkgY29uc3Q7CiAgaW50IGdiV29yayhjb25zdCBpbnQgbGV2LCAK
CSAgICAgY29uc3QgaW50IGNsZXYsCgkgICAgIGNvbnN0IGludCBvdmVybGFwKSBjb25zdDsKCiAg
aW50IGdiTnVtKGNvbnN0IHNob3J0KiBvdmVybGFwKSBjb25zdDsKICBpbnQgZ2JXb3JrKGNvbnN0
IGludCBjbGV2LAoJICAgICBjb25zdCBzaG9ydCogb3ZlcmxhcCkgY29uc3Q7CiAgaW50IGdiTnVt
KGNvbnN0IGludCBsZXYsIAoJICAgIGNvbnN0IHNob3J0KiBvdmVybGFwKSBjb25zdDsKICBpbnQg
Z2JXb3JrKGNvbnN0IGludCBsZXYsIAoJICAgICBjb25zdCBpbnQgY2xldiwKCSAgICAgY29uc3Qg
c2hvcnQqIG92ZXJsYXApIGNvbnN0OwoKICBpbmxpbmUgdm9pZCBnYlNldEJCb3goY29uc3QgQkJv
eCYgYmIpIHsgYmJveCA9IGJiOyB9CgogIGlubGluZSBjb25zdCBCQm94JiBnYkJCb3godm9pZCkg
Y29uc3QgeyByZXR1cm4gYmJveDsgfQoKICBpbmxpbmUgQkJveCBnYkJCb3goY29uc3QgaW50IGxl
dikgY29uc3QgCiAgICB7IHJldHVybiAoKGxldiA9PSBmaW5lbGV2KSA/IGJib3ggOiAobGV2IDwg
ZmluZWxldiAmJiBsZXYgPj0gY3JzbGV2KSA/CgkgICAgICBjb2Fyc2VuKGJib3gsR2V0Q2FyZGlu
YWxpdHkoMSxmaW5lbGV2LWxldikpIDoKCSAgICAgIEJCb3g6Ol9lbXB0eV9iYm94KTsgfQogIAog
IGlubGluZSBCQm94IGdiQkJveEFicyhjb25zdCBpbnQgbGV2KSBjb25zdCAKICAgIHsgcmV0dXJu
ICgobGV2ID09IGZpbmVsZXYpID8gYmJveCA6IChsZXYgPCBmaW5lbGV2KSA/CgkgICAgICBjb2Fy
c2VuKGJib3gsR2V0Q2FyZGluYWxpdHkoMSxmaW5lbGV2LWxldikpIDoKCSAgICAgIHJlZmluZShi
Ym94LEdldENhcmRpbmFsaXR5KDEsbGV2LWZpbmVsZXYpLDEpKTsgfQoJCQkJCiAgQkJveCBnYkJC
b3goY29uc3QgaW50IGxldiwgCgkgICAgICBjb25zdCBpbnQgb2xhcCwKCSAgICAgIGNvbnN0IGlu
dCBleHRnaD0wKSBjb25zdDsKICBCQm94IGdiQkJveChjb25zdCBpbnQgbGV2LCAKCSAgICAgIGNv
bnN0IHNob3J0KiBvbGFwLAoJICAgICAgY29uc3QgaW50IGV4dGdoPTApIGNvbnN0OwogIEJCb3gg
Z2JCQm94KGNvbnN0IGludCBsZXYsIAoJICAgICAgY29uc3Qgc2hvcnQqIG9sYXAsCgkgICAgICBj
b25zdCBzaG9ydCogZXh0Z2gpIGNvbnN0OwogIAogIEJCb3ggZ2JCQm94QWJzKGNvbnN0IGludCBs
ZXYsIAoJCSBjb25zdCBpbnQgb2xhcCwKCQkgY29uc3QgaW50IGV4dGdoPTApIGNvbnN0OwogIEJC
b3ggZ2JCQm94QWJzKGNvbnN0IGludCBsZXYsIAoJCSBjb25zdCBzaG9ydCogb2xhcCwKCQkgY29u
c3QgaW50IGV4dGdoPTApIGNvbnN0OwoKICBCQm94IGdiQkJveChjb25zdCBpbnQgbWlubCwgCgkg
ICAgICBjb25zdCBpbnQgbWF4bCwgCgkgICAgICBjb25zdCBzaG9ydCogb2xhcCwgCgkgICAgICBj
b25zdCBpbnQgZXh0Z2g9MCkgY29uc3Q7CiAgCiAgICAKICBpbmxpbmUgdm9pZCBnYkdldExldmVs
cyhHcmlkQm94ICZnYiwgCgkJCSAgY29uc3QgaW50IGxldikgY29uc3QKICAgIHsgCiAgICAgIGdi
Lm93bmVyPW93bmVyOyAKICAgICAgZ2IuaW5kZXg9aW5kZXg7CiAgICAgIGdiLnBpbmRleD1waW5k
ZXg7CiAgICAgIGdiLmNyc2xldj1sZXY7IAogICAgICBnYi5maW5lbGV2PWxldjsgCiAgICAgIGdi
LmxldnN0ZXA9bGV2c3RlcDsgCiAgICAgIGdiLmJib3g9Z2JCQm94QWJzKGdiLmZpbmVsZXYpOyAK
ICAgIH0KCiAgIGlubGluZSB2b2lkIGdiUmVmaW5lKEdyaWRCb3ggJmdiLCAKCQkJY29uc3QgaW50
IGxldnMpIGNvbnN0CiAgICAgeyAKICAgICAgIGdiLm93bmVyPW93bmVyOyAKICAgICAgIGdiLmlu
ZGV4PWluZGV4OwogICAgICAgZ2IucGluZGV4PXBpbmRleDsKICAgICAgIGdiLmNyc2xldj1maW5l
bGV2K2xldnN0ZXA7IAogICAgICAgZ2IuZmluZWxldj1maW5lbGV2K2xldnN0ZXAqbGV2czsgCiAg
ICAgICBnYi5sZXZzdGVwPWxldnN0ZXA7IAogICAgICAgZ2IuYmJveD1nYkJCb3hBYnMoZ2IuZmlu
ZWxldik7IAogICAgIH0KCiAgICAKICAgaW5saW5lIHZvaWQgZ2JTZXRMZXZlbHMoR3JpZEJveCAm
Z2IsIAoJCQkgICBjb25zdCBpbnQgbGV2KSBjb25zdAogICAgeyAKICAgICAgZ2IuY3JzbGV2PWxl
djsgCiAgICAgIGdiLmZpbmVsZXY9bGV2OyAKICAgICAgZ2IuYmJveD1nYkJCb3hBYnMoZ2IuZmlu
ZWxldik7IAogICAgfQoKICAgaW5saW5lIHZvaWQgZ2JTZXRSZWZpbmUoR3JpZEJveCAmZ2IsCgkJ
CSAgIGNvbnN0IGludCBsZXZzKSBjb25zdAogICAgeyAKICAgICAgZ2IuY3JzbGV2PWdiLmZpbmVs
ZXYrZ2IubGV2c3RlcDsKICAgICAgZ2IuZmluZWxldis9KGdiLmxldnN0ZXAqbGV2cyk7CiAgICAg
IGdiLmJib3g9Z2JCQm94QWJzKGdiLmZpbmVsZXYpOyAKICAgIH0KfTsKCm9zdHJlYW0mICBvcGVy
YXRvciA8PCAob3N0cmVhbSYgb3MsIGNvbnN0IEdyaWRCb3gmIGdiKTsKb2ZzdHJlYW0mIG9wZXJh
dG9yIDw8IChvZnN0cmVhbSYgb2ZzLCBjb25zdCBHcmlkQm94JiBnYik7Cmlmc3RyZWFtJiBvcGVy
YXRvciA+PiAoaWZzdHJlYW0mIGlmcywgR3JpZEJveCYgZ2IpOwoKCgoKCiMgMTggIkFDRURpc3Ry
aWJ1dGlvbi5oIiAyCgojIDEgIkdyaWRCb3hMaXN0LmgiIDEKCgoKICAKCgoKCgoKCgoKCgojIDEg
IkJCb3hMaXN0LmgiIDEKCgoKIAoKCgoKCgoKCgoKCgojIDEgIkJ1Y2tldFR5cGUuaCIgMQoKCgog
CgoKCgoKCgojIDEgIlNpbXBsZUJ1Y2tldFZvaWQuaCIgMQoKCgoKIAoKCgoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgojIDYzICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKCgpleHRlcm4g
IkMiIHsgCgogCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3Nl
cnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAoJCQkgICB1bnNpZ25lZCBpbnQgX19saW5lLCBf
X2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKCiAKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBf
X2Vycm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsCgkJCQkgIHVuc2lnbmVkIGludCBfX2xpbmUs
CgkJCQkgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSAgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAKCmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25zdCBj
aGFyICpfX2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQogICAgIHRo
cm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfSAKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKIyAxMyAiU2ltcGxlQnVja2V0Vm9pZC5oIiAyCgojIDEgIi91c3Iv
aW5jbHVkZS9tZW1vcnkuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CiMgMTQgIlNpbXBsZUJ1Y2tldFZvaWQuaCIgMgoKCgoKCgoKCiMgMSAiU3lzdGVtLmgiIDEKCgoK
IAoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcG9pbnRlcjsKCgojIDIyICJTaW1wbGVCdWNr
ZXRWb2lkLmgiIDIKCgoKCgoKCgoKCgoKCgoKc3RydWN0IHJlY2hkciAKICB7CiAgIHVuc2lnbmVk
IG15c2l6ZTsgdW5zaWduZWQgbXlvZmY7CiAgIHVuc2lnbmVkIG5vZmY7IHVuc2lnbmVkIHBvZmY7
CiAgIHBvaW50ZXIgaGVhZDsKICB9OwoKc3RydWN0IHJlY2xpbmsgCiAgewogICB1bnNpZ25lZCBt
eXNpemU7IHVuc2lnbmVkIG15b2ZmOwogICB1bnNpZ25lZCBub2ZmOyB1bnNpZ25lZCBwb2ZmOwog
ICBwb2ludGVyIGhlYWQ7CiAgIHVuc2lnbmVkIG5leHQ7CiAgfTsKCnN0cnVjdCByZWNkYXRhIAog
IHsKICAgdW5zaWduZWQgbXlzaXplOyB1bnNpZ25lZCBteW9mZjsKICAgdW5zaWduZWQgbm9mZjsg
dW5zaWduZWQgcG9mZjsKICAgcG9pbnRlciBoZWFkOwogICB1bnNpZ25lZCBkYXRhWzJdOwogIH07
CgpzdHJ1Y3QgYmt0aGRyIAogIHsKICAgdW5zaWduZWQgYmxrc2l6ZTsgdW5zaWduZWQgbmJsa3M7
CiAgIHVuc2lnbmVkIGhlYWRvZmY7IHVuc2lnbmVkIHRhaWxvZmY7CiAgIHVuc2lnbmVkIGZyZWVv
ZmY7IHVuc2lnbmVkIGNudDsKICB9OwoKdW5pb24gcmVjb3JkIAogIHsKICAgc3RydWN0IGJrdGhk
ciBiaGRyOwogICBzdHJ1Y3QgcmVjaGRyIGhkcjsKICAgc3RydWN0IHJlY2xpbmsgbGluazsKICAg
c3RydWN0IHJlY2RhdGEgcmVjOwogICB1bnNpZ25lZCBkYXRhWzFdOwogCiAgIGlubGluZSBpbnQg
aXNlbXB0eSh2b2lkKSB7IHJldHVybiAoaGRyLm15c2l6ZSA9PSAwKTsgfQogICBmcmllbmQgb3N0
cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgdW5pb24gcmVjb3JkJik7CiAgfTsKICAgCnN0cnVj
dCBia3QKICB7CiAgIHVuaW9uIHJlY29yZCAqaGVhZDsKCiAgIGlubGluZSBia3Qodm9pZCkgOiBo
ZWFkKDApIHt9CiAgIGJrdCh1bnNpZ25lZCBjb25zdCBibGtzaXplLCB1bnNpZ25lZCBjb25zdCBu
Ymxrcyk7CiAgIGJrdChzdHJ1Y3QgYmt0IGNvbnN0ICZvdGhlcik7CiAgIGJrdCh1bmlvbiByZWNv
cmQgY29uc3QgKmhkcik7CiAgIGJrdCh1bmlvbiByZWNvcmQgKmhkcik7CiAgIGlubGluZSB+Ymt0
KHZvaWQpIAogICAgIHsgCgoKCgoKICAgICAgZGVsZXRlIFtdICgoY2hhciAqKWhlYWQpOyAKICAg
ICB9CgogICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgc3RydWN0IGJrdCYp
OwogIH07CgoKCgoKCmNsYXNzIFNpbXBsZUJ1Y2tldFZvaWQgCiAgewogICBmcmllbmQgb3N0cmVh
bSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgU2ltcGxlQnVja2V0Vm9pZCYpOwoKICAgdW5zaWduZWQg
Ymxrc2l6ZTsKICAgdW5zaWduZWQgbmJsa3M7CgogICBzdHJ1Y3QgYmt0ICpia3RwdHI7CiAgIHVu
c2lnbmVkIGZyZWVvZmY7CgogICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IFNpbXBsZUJ1Y2tldFZv
aWQmKTsKCnB1YmxpYzoKICAgaW5saW5lIFNpbXBsZUJ1Y2tldFZvaWQodm9pZCkKCTogYmxrc2l6
ZSgwKSwgbmJsa3MoMCksIGJrdHB0cigwKSwgZnJlZW9mZigwKSB7fQoKICAgU2ltcGxlQnVja2V0
Vm9pZCh1bnNpZ25lZCBjb25zdCBia3RzaXplLCB1bnNpZ25lZCBjb25zdCBia3RudW0pOwogICBT
aW1wbGVCdWNrZXRWb2lkKHVuaW9uIHJlY29yZCAqaGRyKTsKICAgU2ltcGxlQnVja2V0Vm9pZCh1
bmlvbiByZWNvcmQgY29uc3QgKmhkcik7CiAgIFNpbXBsZUJ1Y2tldFZvaWQodW5pb24gcmVjb3Jk
IGNvbnN0ICpoZHIsIHVuc2lnbmVkIGNvbnN0IHNpemUsIGludCBjb25zdCBuKTsKICAgU2ltcGxl
QnVja2V0Vm9pZChjb25zdCBTaW1wbGVCdWNrZXRWb2lkJik7CQoKICAgaW5saW5lIH5TaW1wbGVC
dWNrZXRWb2lkKHZvaWQpIHsgZGVsZXRlIGJrdHB0cjsgfQoKcHJpdmF0ZToKICAgdm9pZCBhbGxv
Y2JrdChpbnQgY29uc3QgaW5jciA9ICgxMjgpICk7CiAgIAogICBpbmxpbmUgdW5pb24gcmVjb3Jk
ICpjb3B5ZGF0YSh1bmlvbiByZWNvcmQgKnRvLCBjb25zdCB1bmlvbiByZWNvcmQgKmZyb20pCgl7
CSAKICAgICAgICAgIG1lbWNweSgodm9pZCAqKSgoKGNoYXIgKil0bykrc2l6ZW9mKHN0cnVjdCBy
ZWNoZHIpKSwKICAgICAgICAgICAgICAgICAodm9pZCAqKSgoKGNoYXIgY29uc3QgKilmcm9tKStz
aXplb2Yoc3RydWN0IHJlY2hkcikpLAoJICAgICAgICAgYmxrc2l6ZS1zaXplb2Yoc3RydWN0IHJl
Y2hkcikpOwoJICAgCgkgICAKICAgICAgICAgIHJldHVybiAodG8pOwoJfQoKICAgIAoKICAgaW5s
aW5lIHVuaW9uIHJlY29yZCAqYmt0R2V0SGVhZFJlYyh1bmlvbiByZWNvcmQgY29uc3QgKmJoZWFk
KSBjb25zdAoJeyByZXR1cm4gKCh1bmlvbiByZWNvcmQgKikKCQkoKGNoYXIgY29uc3QgKikoYmhl
YWQpKyhibGtzaXplKmJoZWFkLT5iaGRyLmhlYWRvZmYpKSk7IH0KCiAgIGlubGluZSB1bmlvbiBy
ZWNvcmQgKmJrdEdldFRhaWxSZWModW5pb24gcmVjb3JkIGNvbnN0ICpiaGVhZCkgY29uc3QKCXsg
cmV0dXJuICgodW5pb24gcmVjb3JkICopCgkJKChjaGFyIGNvbnN0ICopKGJoZWFkKSsoYmxrc2l6
ZSpiaGVhZC0+Ymhkci50YWlsb2ZmKSkpOyB9CgogICBpbmxpbmUgdW5pb24gcmVjb3JkICpia3RH
ZXRGcmVlUmVjKHVuaW9uIHJlY29yZCBjb25zdCAqYmhlYWQpIGNvbnN0Cgl7IHJldHVybiAoKHVu
aW9uIHJlY29yZCAqKQoJCSgoY2hhciBjb25zdCAqKShiaGVhZCkrKGJsa3NpemUqYmhlYWQtPmJo
ZHIuZnJlZW9mZikpKTsgfQoKICAgaW5saW5lIHVuaW9uIHJlY29yZCAqYmt0R2V0QXRSZWModW5p
b24gcmVjb3JkIGNvbnN0ICpiaGVhZCwKCQl1bnNpZ25lZCBjb25zdCBvZmYpIGNvbnN0Cgl7IHJl
dHVybiAoKHVuaW9uIHJlY29yZCAqKQoJCSgoY2hhciBjb25zdCAqKShiaGVhZCkrKGJsa3NpemUq
b2ZmKSkpOyB9CiAgCiAgIGlubGluZSB1bnNpZ25lZCBia3RHZXRoZWFkb2ZmKHVuaW9uIHJlY29y
ZCBjb25zdCAqYmhlYWQpIGNvbnN0Cgl7IHJldHVybiAoYmhlYWQtPmJoZHIuaGVhZG9mZik7IH0K
ICAgaW5saW5lIHZvaWQgYmt0U2V0aGVhZG9mZih1bmlvbiByZWNvcmQgKmJoZWFkLCB1bnNpZ25l
ZCBjb25zdCBvZmYpIAoJeyBiaGVhZC0+Ymhkci5oZWFkb2ZmID0gb2ZmOyB9CgogICBpbmxpbmUg
dW5zaWduZWQgYmt0R2V0dGFpbG9mZih1bmlvbiByZWNvcmQgY29uc3QgKmJoZWFkKSBjb25zdAoJ
eyByZXR1cm4gKGJoZWFkLT5iaGRyLnRhaWxvZmYpOyB9CiAgIGlubGluZSB2b2lkIGJrdFNldHRh
aWxvZmYodW5pb24gcmVjb3JkICpiaGVhZCwgdW5zaWduZWQgY29uc3Qgb2ZmKSAKCXsgYmhlYWQt
PmJoZHIudGFpbG9mZiA9IG9mZjsgfQoKICAgaW5saW5lIHVuc2lnbmVkIGJrdEdldGZyZWVvZmYo
dW5pb24gcmVjb3JkIGNvbnN0ICpiaGVhZCkgY29uc3QKCXsgcmV0dXJuIChiaGVhZC0+Ymhkci5m
cmVlb2ZmKTsgfQogICBpbmxpbmUgdm9pZCBia3RTZXRmcmVlb2ZmKHVuaW9uIHJlY29yZCAqYmhl
YWQsIHVuc2lnbmVkIGNvbnN0IG9mZikgCgl7IGJoZWFkLT5iaGRyLmZyZWVvZmYgPSBvZmY7IH0K
CiAgIGlubGluZSB1bnNpZ25lZCBia3RHZXRjbnQodW5pb24gcmVjb3JkIGNvbnN0ICpiaGVhZCkg
Y29uc3QKCXsgcmV0dXJuIChiaGVhZC0+Ymhkci5jbnQpOyB9CiAgIGlubGluZSB2b2lkIGJrdFNl
dGNudCh1bmlvbiByZWNvcmQgKmJoZWFkLCB1bnNpZ25lZCBjb25zdCBjbnQpIAoJeyBiaGVhZC0+
Ymhkci5jbnQgPSBjbnQ7IH0KICAgaW5saW5lIHZvaWQgYmt0SW5jcmNudCh1bmlvbiByZWNvcmQg
KmJoZWFkKQoJeyBiaGVhZC0+Ymhkci5jbnQrKzsgfQogICBpbmxpbmUgdm9pZCBia3REZWNyY250
KHVuaW9uIHJlY29yZCAqYmhlYWQpCgl7IGJoZWFkLT5iaGRyLmNudC0tOyB9CgogICAgCiAgCiAg
IGlubGluZSB1bmlvbiByZWNvcmQgKnJlY1ByZXZSZWModW5pb24gcmVjb3JkIGNvbnN0ICpyZWMp
IGNvbnN0CiAgICAgICAgewogCSByZXR1cm4gKCAocmVjLT5oZHIucG9mZiAhPSAoKHVuc2lnbmVk
KSAoMCkpICkgPwogICAgICAgICAodW5pb24gcmVjb3JkICopICgoY2hhciAqKShyZWMtPmhkci5o
ZWFkKSsoYmxrc2l6ZSpyZWMtPmhkci5wb2ZmKSkgOgogICAgICAgICAodW5pb24gcmVjb3JkICop
ICgwKSApOwogICAgICAgIH0KCiAgIGlubGluZSB1bmlvbiByZWNvcmQgKnJlY05leHRSZWModW5p
b24gcmVjb3JkIGNvbnN0ICpyZWMpIGNvbnN0CiAgICAgICAgewogCSByZXR1cm4gKCAocmVjLT5o
ZHIubm9mZiAhPSAoKHVuc2lnbmVkKSAoMCkpICkgPwogICAgICAgICAodW5pb24gcmVjb3JkICop
ICgoY2hhciAqKShyZWMtPmhkci5oZWFkKSsoYmxrc2l6ZSpyZWMtPmhkci5ub2ZmKSkgOgogICAg
ICAgICAodW5pb24gcmVjb3JkICopICgwKSApOwogICAgICAgIH0KICAKICAgaW5saW5lIHVuaW9u
IHJlY29yZCAqcmVjQXRSZWModW5pb24gcmVjb3JkIGNvbnN0ICpyZWMsCgkJdW5zaWduZWQgY29u
c3Qgb2ZmKSBjb25zdAogICAgICAgIHsKIAkgcmV0dXJuICggKG9mZiAhPSAoKHVuc2lnbmVkKSAo
MCkpICkgPwogICAgICAgICAodW5pb24gcmVjb3JkICopICgoY2hhciAqKShyZWMtPmhkci5oZWFk
KSsoYmxrc2l6ZSpvZmYpKSA6CiAgICAgICAgICh1bmlvbiByZWNvcmQgKikgKDApICk7CiAgICAg
ICAgfQoKICAgdW5pb24gcmVjb3JkICpia3RhZGRyZWModW5pb24gcmVjb3JkICpiaGVhZCk7CiAg
IGlubGluZSB1bmlvbiByZWNvcmQgKmJrdGFkZHJlYyh1bmlvbiByZWNvcmQgKmJoZWFkLCBjb25z
dCB1bmlvbiByZWNvcmQgKnJlYykKCXsKCSAgCgkgIAoJICAKCSByZXR1cm4gKCBjb3B5ZGF0YShi
a3RhZGRyZWMoYmhlYWQpLHJlYykgKTsKCX0KCiAgIHZvaWQgYmt0YWRkZnJlZSh1bmlvbiByZWNv
cmQgKmJoZWFkLCB1bmlvbiByZWNvcmQgKnJlYyk7Cgpwcm90ZWN0ZWQ6CiAgIGlubGluZSBpbnQg
Ymxrcyh2b2lkKSB7IHJldHVybiAobmJsa3MtMSk7fQogICBpbmxpbmUgaW50IGJzaXplKHZvaWQp
IHsgcmV0dXJuIChibGtzaXplKTt9CgogICB1bmlvbiByZWNvcmQgKmFkZHJlYyh2b2lkKTsKcHJp
dmF0ZToKICAgaW5saW5lIHVuaW9uIHJlY29yZCAqYWRkcmVjKGNvbnN0IHVuaW9uIHJlY29yZCog
cmVjKQogICAgICAgIHsKCSAgCgkgIAoJICAKCiMgMjQxICJTaW1wbGVCdWNrZXRWb2lkLmgiCgoJ
IHJldHVybiAoIGNvcHlkYXRhKGFkZHJlYygpLHJlYykgKTsKCgl9Cgpwcm90ZWN0ZWQ6CiAgIHVu
aW9uIHJlY29yZCAqaW5zZXJ0cmVjKHVuaW9uIHJlY29yZComIGFmdGVyKTsKcHJpdmF0ZToKIAog
CiAKIAogCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKcHJvdGVjdGVkOgogICB2b2lkIHJlbW92
ZXJlYyh1bmlvbiByZWNvcmQgKnJlYyk7CgogICAgCiAgIGlubGluZSB1bmlvbiByZWNvcmQgKm5l
eHRyZWModW5pb24gcmVjb3JkIGNvbnN0ICpyZWMpIGNvbnN0Cgl7IAogICAgICAgICByZXR1cm4g
KCAKIAkgKHJlYy0+aGRyLm15b2ZmICE9IGJrdEdldHRhaWxvZmYoKHVuaW9uIHJlY29yZCAqKXJl
Yy0+aGRyLmhlYWQpKSA/CiAgICAgICAgICh1bmlvbiByZWNvcmQgKikgKChjaGFyICopKHJlYy0+
aGRyLmhlYWQpKyhibGtzaXplKnJlYy0+aGRyLm5vZmYpKSA6CiAgICAgICAgICh1bmlvbiByZWNv
cmQgKikgKDApICk7Cgl9IAoKICAgaW5saW5lIHVuaW9uIHJlY29yZCAqcHJldnJlYyh1bmlvbiBy
ZWNvcmQgY29uc3QgKnJlYykgY29uc3QKCXsgCgkgcmV0dXJuICgKICAgICAgICAgKHJlYy0+aGRy
Lm15b2ZmICE9IGJrdEdldGhlYWRvZmYoKHVuaW9uIHJlY29yZCAqKXJlYy0+aGRyLmhlYWQpKSA/
CiAgICAgICAgICh1bmlvbiByZWNvcmQgKikgKChjaGFyICopKHJlYy0+aGRyLmhlYWQpKyhibGtz
aXplKnJlYy0+aGRyLnBvZmYpKSA6CiAgICAgICAgICh1bmlvbiByZWNvcmQgKikgKDApICk7Cgl9
IAoKICAgaW5saW5lIHVuaW9uIHJlY29yZCAqaGVhZHJlYyh2b2lkKSBjb25zdAoJewogICAgICAg
ICByZXR1cm4gKCAoYmt0cHRyLT5oZWFkLT5iaGRyLmNudCA+IDApID8KCSBia3RHZXRIZWFkUmVj
KGJrdHB0ci0+aGVhZCkgOiAoKHVuaW9uIHJlY29yZCAqKSAwKSAgKTsKCX0gCgogICBpbmxpbmUg
dW5pb24gcmVjb3JkICp0YWlscmVjKHZvaWQpIGNvbnN0Cgl7CiAgICAgICAgIHJldHVybiAoIChi
a3RwdHItPmhlYWQtPmJoZHIuY250ID4gMCkgPwoJIGJrdEdldFRhaWxSZWMoYmt0cHRyLT5oZWFk
KSA6ICgodW5pb24gcmVjb3JkICopIDApICApOwoJfSAKCiAgIGlubGluZSB1bnNpZ25lZCBjb3Vu
dCh2b2lkKSBjb25zdAoJeyByZXR1cm4gKGJrdEdldGNudChia3RwdHItPmhlYWQpKTsgfQoKcHVi
bGljOgogICAgCiAgIGlubGluZSBpbnQgaXNlbXB0eWJrdCh2b2lkKSB7IHJldHVybiAoYmt0cHRy
LT5oZWFkLT5iaGRyLmNudCA9PSAwKTsgfQogICB2b2lkIGVtcHR5Ymt0KHZvaWQpOwoKICAgdm9p
ZCBzcGxpdGJrdChTaW1wbGVCdWNrZXRWb2lkICZzYnYsIHVuaW9uIHJlY29yZCAqYXRyZWMpOwoK
ICAgdm9pZCAqcGFjayh1bnNpZ25lZCAmc2l6ZSk7CiAgIHZvaWQgcGFjayh2b2lkIComcGFja2Fn
ZSwgdW5zaWduZWQgJnNpemUpOwogICB2b2lkICpwYWNrKGludCAmc2l6ZSk7CiAgIHZvaWQgcGFj
ayh2b2lkIComcGFja2FnZSwgaW50ICZzaXplKTsKICB9OwoKCiMgMTIgIkJ1Y2tldFR5cGUuaCIg
MgoKCnRlbXBsYXRlIDxjbGFzcyBUeXBlPgpjbGFzcyBCdWNrZXQgOiBwdWJsaWMgU2ltcGxlQnVj
a2V0Vm9pZAogIHsKICAgdW5pb24gcmVjb3JkICpjdXI7CgogICBzdGF0aWMgaW5saW5lIHZvaWQg
Y29weXR5cGVkYXRhKGNoYXIgKnRvLCBjaGFyIGNvbnN0ICpmcm9tKQoJeyAKICAgICAgICAgIG1l
bWNweSgodm9pZCAqKXRvLCAodm9pZCAqKWZyb20sIHNpemVvZihUeXBlKSk7CiAgICAgICAgICAg
CiAgICAgICAgfQoKcHVibGljOgogICBpbmxpbmUgQnVja2V0KGNvbnN0IHVuc2lnbmVkIGJrdG51
bSkKCTpTaW1wbGVCdWNrZXRWb2lkKHNpemVvZihUeXBlKSxia3RudW0pLCBjdXIoMCkge30KCiAg
IGlubGluZSBCdWNrZXQodm9pZCBjb25zdCAqcGFja2FnZSkKCTpTaW1wbGVCdWNrZXRWb2lkKCh1
bmlvbiByZWNvcmQgY29uc3QgKikgcGFja2FnZSksIGN1cigwKSB7fQoKICAgaW5saW5lIEJ1Y2tl
dCh2b2lkICpwYWNrYWdlKQoJOlNpbXBsZUJ1Y2tldFZvaWQoKHVuaW9uIHJlY29yZCAqKSBwYWNr
YWdlKSwgY3VyKDApIHt9CgogICBpbmxpbmUgQnVja2V0KHZvaWQgY29uc3QgKnBhY2thZ2UsdW5z
aWduZWQgY29uc3Qgc2l6ZSwgaW50IGNvbnN0IG4pCgk6U2ltcGxlQnVja2V0Vm9pZCgodW5pb24g
cmVjb3JkIGNvbnN0ICopIHBhY2thZ2UsIHNpemUsIG4pLCBjdXIoMCkge30KCiAgIGlubGluZSBC
dWNrZXQoQnVja2V0PFR5cGU+IGNvbnN0ICZvdGhlcikKCTpTaW1wbGVCdWNrZXRWb2lkKG90aGVy
KSwgY3VyKDApIHt9CgogICBpbmxpbmUgVHlwZSogYWRkKHZvaWQpCgl7IGN1ciA9IGFkZHJlYygp
OyByZXR1cm4gKCAoKFR5cGUgKikgY3VyLT5yZWMuZGF0YSkgKTsgfQogICBpbmxpbmUgVHlwZSog
YWRkKFR5cGUgY29uc3QgJnQpCgl7IAoKCgoKCSBjdXIgPSBhZGRyZWMoKTsgCgoKCgkgY29weXR5
cGVkYXRhKChjaGFyICopIGN1ci0+cmVjLmRhdGEsIChjaGFyICopICZ0KTsKCgkgcmV0dXJuICgg
KChUeXBlICopIGN1ci0+cmVjLmRhdGEpICk7CiAgICAgICAgfQoKICAgaW5saW5lIFR5cGUqIGlu
c2VydCh2b2lkKQoJeyBjdXIgPSBpbnNlcnRyZWMoY3VyKTsgcmV0dXJuICggKChUeXBlICopIGN1
ci0+cmVjLmRhdGEpICk7IH0KICAgaW5saW5lIFR5cGUqIGluc2VydChUeXBlIGNvbnN0ICZ0KQoJ
ewoKCgoKIAkgY3VyID0gaW5zZXJ0cmVjKGN1cik7IAoKCgoJIGNvcHl0eXBlZGF0YSgoY2hhciAq
KSBjdXItPnJlYy5kYXRhLCAoY2hhciAqKSAmdCk7CgoJIHJldHVybiAoICgoVHlwZSAqKSBjdXIt
PnJlYy5kYXRhKSApOwogICAgICAgIH0KCiAgIGlubGluZSBUeXBlKiBmaXJzdCh2b2lkKQoJeyAK
CSBjdXIgPSBoZWFkcmVjKCk7IAogICAgICAgICByZXR1cm4gKCAoY3VyICE9ICgodW5pb24gcmVj
b3JkICopIDApICAmJiAhY3VyLT5pc2VtcHR5KCkpID8gCSAgIChUeXBlICopIGN1ci0+cmVjLmRh
dGEgOiAoVHlwZSAqKSBfX251bGwgICk7CgoJfQoKICAgaW5saW5lIFR5cGUqIGxhc3Qodm9pZCkg
Cgl7IAoJIGN1ciA9IHRhaWxyZWMoKTsgCiAgICAgICAgIHJldHVybiAoIChjdXIgIT0gKCh1bmlv
biByZWNvcmQgKikgMCkgICYmICFjdXItPmlzZW1wdHkoKSkgPyAJICAgKFR5cGUgKikgY3VyLT5y
ZWMuZGF0YSA6IChUeXBlICopIF9fbnVsbCAgKTsKCgl9CgogICBpbmxpbmUgVHlwZSogY3VycmVu
dCh2b2lkKSBjb25zdAoJeyAKICAgICAgICAgcmV0dXJuICggKGN1ciAhPSAoKHVuaW9uIHJlY29y
ZCAqKSAwKSAgJiYgIWN1ci0+aXNlbXB0eSgpKSA/IAkgICAoVHlwZSAqKSBjdXItPnJlYy5kYXRh
IDogKFR5cGUgKikgX19udWxsICApOwoKCX0KCiAgIFR5cGUgKnJlbW92ZSh2b2lkKTsKICAgVHlw
ZSAqcHJldih2b2lkKTsKICAgVHlwZSAqbmV4dCh2b2lkKTsKCiAgIGlubGluZSB1bmlvbiByZWNv
cmQgKmN1cnJlYyh2b2lkKQogICAgICAgIHsgcmV0dXJuIChjdXIpOyB9CgogICBpbmxpbmUgdm9p
ZCBzZXRjdXJyZWModW5pb24gcmVjb3JkICpjKQogICAgICAgIHsgY3VyID0gYzsgfQoKICAgaW5s
aW5lIHZvaWQgZW1wdHkodm9pZCkKCXsgU2ltcGxlQnVja2V0Vm9pZDo6ZW1wdHlia3QoKTsgY3Vy
ID0gKCh1bmlvbiByZWNvcmQgKikgMCkgOyB9CgogICBpbmxpbmUgdm9pZCBzcGxpdChCdWNrZXQ8
VHlwZT4mIGJ0KQoJewogICAgICAgICB1bmlvbiByZWNvcmQgKnIgPSBwcmV2cmVjKGN1cik7IAog
ICAgICAgICBTaW1wbGVCdWNrZXRWb2lkOjpzcGxpdGJrdCgoU2ltcGxlQnVja2V0Vm9pZCAmKWJ0
LCBjdXIpOwogCSBidC5jdXIgPSAoKHVuaW9uIHJlY29yZCAqKSAwKSA7CiAgICAgICAgIGN1ciA9
IHI7Cgl9CiAgfTsKCgojIDEgIkJ1Y2tldFR5cGUuYyIgMQoKCgogCgoKCgoKCnRlbXBsYXRlIDxj
bGFzcyBUeXBlPgpUeXBlICpCdWNrZXQ8VHlwZT46OnJlbW92ZSh2b2lkKQogeyAKICBpZiAoY3Vy
ID09ICgodW5pb24gcmVjb3JkICopIDApICkgcmV0dXJuICggKFR5cGUgKikgX19udWxsICApOwog
IHVuaW9uIHJlY29yZCAqciA9IHByZXZyZWMoY3VyKTsgCiAgcmVtb3ZlcmVjKGN1cik7IGN1ciA9
IHI7CiAgcmV0dXJuICggKGN1ciAhPSAoKHVuaW9uIHJlY29yZCAqKSAwKSAgJiYgIWN1ci0+aXNl
bXB0eSgpKSA/ICAgICAgICAgICAgKFR5cGUgKikgY3VyLT5yZWMuZGF0YSA6IChUeXBlICopIF9f
bnVsbCAgKTsKCiB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KVHlwZSAqQnVja2V0PFR5cGU+Ojpw
cmV2KHZvaWQpCiB7IAogIGlmIChjdXIgPT0gKCh1bmlvbiByZWNvcmQgKikgMCkgKSByZXR1cm4g
KCBsYXN0KCkgKTsKICBjdXIgPSBwcmV2cmVjKGN1cik7CiAgcmV0dXJuICggKGN1ciAhPSAoKHVu
aW9uIHJlY29yZCAqKSAwKSAgJiYgIWN1ci0+aXNlbXB0eSgpKSA/ICAgICAgICAgICAgKFR5cGUg
KikgY3VyLT5yZWMuZGF0YSA6IChUeXBlICopIF9fbnVsbCAgKTsKCn0KCnRlbXBsYXRlIDxjbGFz
cyBUeXBlPgpUeXBlICpCdWNrZXQ8VHlwZT46Om5leHQodm9pZCkKIHsgCiAgaWYgKGN1ciA9PSAo
KHVuaW9uIHJlY29yZCAqKSAwKSApIHJldHVybiAoIGZpcnN0KCkgKTsKICBjdXIgPSBuZXh0cmVj
KGN1cik7CiAgcmV0dXJuICggKGN1ciAhPSAoKHVuaW9uIHJlY29yZCAqKSAwKSAgJiYgIWN1ci0+
aXNlbXB0eSgpKSA/ICAgICAgICAgICAgKFR5cGUgKikgY3VyLT5yZWMuZGF0YSA6IChUeXBlICop
IF9fbnVsbCAgKTsKCiB9CgoKIyAxMTggIkJ1Y2tldFR5cGUuaCIgMgoKCgoKIyAxNyAiQkJveExp
c3QuaCIgMgoKCgoKCgoKCgoKCgoKY2xhc3MgQkJveExpc3QgOiBwdWJsaWMgQnVja2V0PEJCb3g+
CnsKICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3IgPDwgKG9zdHJlYW0mIHMsIGNvbnN0IEJCb3hM
aXN0JiBiYmwpOwogIGZyaWVuZCBvZnN0cmVhbSYgb3BlcmF0b3IgPDwgKG9mc3RyZWFtJiBzLCBj
b25zdCBCQm94TGlzdCYgYmJsKTsKICBmcmllbmQgaWZzdHJlYW0mIG9wZXJhdG9yID4+IChpZnN0
cmVhbSYgcywgQkJveExpc3QmIGJibCk7CiAgCiAgZnJpZW5kIGNsYXNzIEJCb3g7CiAgCiAgaW50
IG51bTsKICAKIHByaXZhdGU6CiAgIAogICAKICAgCiAgaW5saW5lIGludCBzZXRzdGF0cyh2b2lk
KQogICAgewogICAgICBudW0gPSAwOwogICAgICBmb3IgKCBCQm94ICpiPWZpcnN0KCk7YiE9ICgo
QkJveCAqKSBfX251bGwgKSA7Yj1uZXh0KCkgKSBudW0rKzsKICAgICAgcmV0dXJuIG51bTsKICAg
IH0KICAKIHB1YmxpYzoKICAgCiAgIAogICAKICBpbmxpbmUgQkJveExpc3QoKQogICAgOiBCdWNr
ZXQ8QkJveD4oKDEyOCkgKSwgbnVtKDApIHt9CiAgCiAgIAogICAKICBpbmxpbmUgQkJveExpc3Qo
dW5zaWduZWQgY29uc3QgbWF4bnVtLCBjb25zdCBpbnQgZHVtYXJnKSAKICAgIDogQnVja2V0PEJC
b3g+KG1heG51bSksIG51bSgwKSB7fQogIAogIGlubGluZSBCQm94TGlzdCh2b2lkIGNvbnN0ICpw
YWNrYWdlLCB1bnNpZ25lZCBjb25zdCBzaXplLCBjb25zdCBpbnQgbikKICAgIDogQnVja2V0PEJC
b3g+KHBhY2thZ2UsIHNpemUsIG4pLCBudW0oMCkKICAgIHsgc2V0c3RhdHMoKTsgfQogIAogICAK
CgoKCgoKCiAgaW5saW5lIEJCb3hMaXN0KEJCb3hMaXN0IGNvbnN0ICZvdGhlcikKICAgIDogQnVj
a2V0PEJCb3g+KG90aGVyKSwgbnVtKG90aGVyLm51bSkge30KICAKICBCQm94TGlzdCAmb3BlcmF0
b3IgPSAoY29uc3QgQkJveExpc3QmKTsKICAKICAgCiAgIAogICAKICBpbmxpbmUgfkJCb3hMaXN0
KHZvaWQpIHt9CiAgCiAgIAogICAKICAgCiAgaW5saW5lIGludCBudW1iZXIoKSBjb25zdCB7IHJl
dHVybihudW0pOyB9CiAgaW5saW5lIGludCBpc2VtcHR5KCkgY29uc3QgeyByZXR1cm4obnVtID09
IDApOyB9CiAgCiAgIAogICAKICAgCiAgaW5saW5lIHZvaWQgZW1wdHkodm9pZCkKICAgIHsgQnVj
a2V0PEJCb3g+OjplbXB0eSgpOyBudW0gPSAwOyB9CiAgCiAgIAogICAKICAgCiAgIAogICAKICAg
CiAgIAogIHZvaWQgb3BlcmF0b3IgLT0gKEJCb3hMaXN0IGNvbnN0ICZyaHMpOyAgCiAgIAoKICB2
b2lkIGludGVyc2VjdChjb25zdCBCQm94JiBiYm94LCBCQm94TGlzdCYgYmJsKTsKICB2b2lkIGlu
dGVyc2VjdChCQm94TGlzdCYgaW5iYmwsIEJCb3hMaXN0JiBiYmwpOwoKICB2b2lkIGNjbGV2ZWxp
bnRlcnNlY3QoY29uc3QgQkJveCYgYmJveCwgQkJveExpc3QmIGJibCk7CiAgdm9pZCBjY2xldmVs
aW50ZXJzZWN0KEJCb3hMaXN0JiBpbmJibCwgQkJveExpc3QmIGJibCk7CiAgdm9pZCB2Y2xldmVs
aW50ZXJzZWN0KGNvbnN0IEJCb3gmIGJib3gsIEJCb3hMaXN0JiBiYmwpOwogIHZvaWQgdmNsZXZl
bGludGVyc2VjdChCQm94TGlzdCYgaW5iYmwsIEJCb3hMaXN0JiBiYmwpOwogcHJpdmF0ZToKICAg
CiAgIAogICAKICB2b2lkIG5lc3QoY29uc3QgQkJveExpc3QgJnJocyk7CiAgCiBwdWJsaWM6CiAg
IAogICAKICAgCiAgdm9pZCBtZXJnZWJveGVzKGNvbnN0IHNob3J0KiBvbGFwKTsKCiAgIAogICAK
ICAgCiAgdm9pZCBwcnVuZShjb25zdCBpbnQgbWludywgCgkgICAgIGNvbnN0IGludCBtYXh3KTsK
ICB2b2lkIHBydW5lX2JveChjb25zdCBCQm94JiB3aG9sZWJib3gsIAoJCSBCQm94TGlzdCYgYm94
ZXMsCgkJIGNvbnN0IGludCBtaW53LCAKCQkgY29uc3QgaW50IG1heHcpOwoKICAgCiAgIAogICAK
ICB2b2lkIGNvbWJpbmUoY29uc3QgQkJveExpc3QgJnJocyk7CiAgCiAgIAogICAKICAgCiAgdm9p
ZCByZWZpbmUoY29uc3QgaW50IGZhY3RvciwgY29uc3QgaW50IG9sYXApOwogIAogICAKICAgCiAg
IAogIEJCb3ggcmVkdWNlKCk7CiAgCiAgIAogICAKICAgCiAgaW50IGRpZmZlcmVuY2UoQkJveExp
c3QmIGJibCwgCgkJIGNvbnN0IEJCb3ggbGhzLAoJCSBjb25zdCBCQm94IHJocyk7CiAgCiAgIAog
ICAKICAgCiAgaW5saW5lIEJCb3ggKmFkZCgpCiAgICB7IG51bSsrOyByZXR1cm4gKEJ1Y2tldDxC
Qm94Pjo6YWRkKCkpOyB9CiAgaW5saW5lIEJCb3ggKmFkZChCQm94IGNvbnN0ICZiYikKICAgIHsg
bnVtKys7IHJldHVybiAoQnVja2V0PEJCb3g+OjphZGQoYmIpKTsgfQogIGlubGluZSBCQm94ICpp
bnNlcnQoQkJveCBjb25zdCAmYmIpCiAgICB7IG51bSsrOyByZXR1cm4gKEJ1Y2tldDxCQm94Pjo6
aW5zZXJ0KGJiKSk7IH0KICBpbmxpbmUgdm9pZCByZW1vdmUodm9pZCkKICAgIHsgCiAgICAgIEJC
b3ggKmJiID0gY3VycmVudCgpOwogICAgICBpZiAoYmIpIHsgbnVtLS07IEJ1Y2tldDxCQm94Pjo6
cmVtb3ZlKCk7IH0KICAgIH0KICAKICAgCiAgIAogICAKICBpbmxpbmUgdm9pZCBzcGxpdChCQm94
TGlzdCAmYmJsKQogICAgewogICAgICBCdWNrZXQ8QkJveD46OnNwbGl0KChCdWNrZXQ8QkJveD4g
JikgYmJsKTsKICAgICAgYmJsLnNldHN0YXRzKCk7IG51bSAtPSBiYmwubnVtOwogICAgfQoKCiAg
dm9pZCBjaGVja292ZXJsYXAoKTsKCn07Cgpvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBj
b25zdCBCQm94TGlzdCYpOwpvZnN0cmVhbSYgb3BlcmF0b3I8PChvZnN0cmVhbSYsIGNvbnN0IEJC
b3hMaXN0Jik7Cmlmc3RyZWFtJiBvcGVyYXRvcj4+KGlmc3RyZWFtJiwgQkJveExpc3QmKTsKCiAK
IAogCmlubGluZSBCQm94ICpmaXJzdChCQm94TGlzdCAmYmJsKQp7IHJldHVybiAoYmJsLmZpcnN0
KCkpOyB9CmlubGluZSBCQm94ICpuZXh0KEJCb3hMaXN0ICZiYmwpCnsgcmV0dXJuIChiYmwubmV4
dCgpKTsgfQppbmxpbmUgQkJveCAqcHJldihCQm94TGlzdCAmYmJsKQp7IHJldHVybiAoYmJsLnBy
ZXYoKSk7IH0KaW5saW5lIEJCb3ggKmN1cnJlbnQoQkJveExpc3QgJmJibCkKeyByZXR1cm4gKGJi
bC5jdXJyZW50KCkpOyB9CmlubGluZSBCQm94ICpsYXN0KEJCb3hMaXN0ICZiYmwpCnsgcmV0dXJu
IChiYmwubGFzdCgpKTsgfQoKaW5saW5lIHZvaWQgYWRkKEJCb3hMaXN0ICZiYmwsIEJCb3ggY29u
c3QgJmJiKQp7IGJibC5hZGQoYmIpOyB9CmlubGluZSB2b2lkIGluc2VydChCQm94TGlzdCAmYmJs
LCBCQm94IGNvbnN0ICZiYikKeyBiYmwuaW5zZXJ0KGJiKTsgfQppbmxpbmUgdm9pZCByZW1vdmUo
QkJveExpc3QgJmJibCkKeyBiYmwucmVtb3ZlKCk7IH0KCmlubGluZSBpbnQgbnVtYmVyKEJCb3hM
aXN0IGNvbnN0ICZiYmwpCnsgcmV0dXJuIChiYmwubnVtYmVyKCkpOyB9CmlubGluZSBpbnQgaXNl
bXB0eShCQm94TGlzdCBjb25zdCAmYmJsKQp7IHJldHVybiAoYmJsLmlzZW1wdHkoKSk7IH0KCmlu
bGluZSB2b2lkIGVtcHR5KEJCb3hMaXN0ICZiYmwpCnsgYmJsLmVtcHR5KCk7IH0KCiMgMTYgIkdy
aWRCb3hMaXN0LmgiIDIKCgoKIyAxICJPYmplY3RDb3VudGVyLmgiIDEKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgpjbGFzcyBPYmplY3RDb3VudGVyCiAgewogICBpbnQgcmVmZXJlbmNlczsK
cHVibGljOgogICBpbmxpbmUgT2JqZWN0Q291bnRlcigpIDogcmVmZXJlbmNlcygxKSB7IH0KICAg
aW5saW5lIE9iamVjdENvdW50ZXIgKmFsaWFzKCkgeyByZWZlcmVuY2VzKys7IHJldHVybih0aGlz
KTsgfQogICBpbmxpbmUgdm9pZCBmcmVlKCkgeyBpZiAoLS1yZWZlcmVuY2VzID09IDApIGRlbGV0
ZSB0aGlzOyB9CiAgICAKICAgaW5saW5lIHZpcnR1YWwgfk9iamVjdENvdW50ZXIoKSB7IH0KICB9
OwoKCiMgMTkgIkdyaWRCb3hMaXN0LmgiIDIKCgoKCgoKCgogCgoKCmNsYXNzIEdyaWRCb3hMaXN0
IDogcHVibGljIEJ1Y2tldDxHcmlkQm94PiwgcHVibGljIE9iamVjdENvdW50ZXIKICB7CiAgIGZy
aWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBHcmlkQm94TGlzdCYpOwog
ICBmcmllbmQgb2ZzdHJlYW0mIG9wZXJhdG9yPDwob2ZzdHJlYW0mLCBjb25zdCBHcmlkQm94TGlz
dCYpOwogICBmcmllbmQgaWZzdHJlYW0mIG9wZXJhdG9yPj4oaWZzdHJlYW0mLCBHcmlkQm94TGlz
dCYpOwoKICAgaW50IG51bTsKCnByaXZhdGU6CiAgIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5dHlw
ZWRhdGEoR3JpZEJveCogdG8sIGNvbnN0IEdyaWRCb3gqIGZyb20pCiAgICAgeyBtZW1jcHkoKHZv
aWQgKikgdG8sICh2b2lkICopIGZyb20sIHNpemVvZihHcmlkQm94KSk7IH0KCiAgICAKICAgIAog
ICAgCiAgIGlubGluZSB2b2lkIHNldHN0YXRzKHZvaWQpCiAgICAge251bT0wO2ZvciAocmVnaXN0
ZXIgR3JpZEJveCAqZz1maXJzdCgpO2c7Zz1uZXh0KCkpbnVtKys7fQoKcHVibGljOgogICAgCiAg
ICAKICAgIAogICBpbmxpbmUgR3JpZEJveExpc3QoKQogICAgIDogQnVja2V0PEdyaWRCb3g+KCgz
MikgKSwgbnVtKDApIHt9CgogICAgCiAgICAKICAgaW5saW5lIEdyaWRCb3hMaXN0KGNvbnN0IGlu
dCBtYXhudW0sIGNvbnN0IGludCBkdW1hcmcpCiAgICAgOiBCdWNrZXQ8R3JpZEJveD4obWF4bnVt
KSwgbnVtKDApIHt9CgogICBpbmxpbmUgR3JpZEJveExpc3QoY29uc3Qgdm9pZCogcGFja2FnZSwg
Y29uc3QgaW50IHNpemUsIAoJICAgICAgIGNvbnN0IGludCBuKQogICAgIDogQnVja2V0PEdyaWRC
b3g+KHBhY2thZ2UsIHNpemUsIG4pLCBudW0oMCkgeyBzZXRzdGF0cygpOyB9CgogICBpbmxpbmUg
R3JpZEJveExpc3QoY29uc3QgR3JpZEJveExpc3QmIG90aGVyKQogICAgIDogQnVja2V0PEdyaWRC
b3g+KG90aGVyKSwgbnVtKG90aGVyLm51bSkge30KCiAgICAKICAgIAogICAgCiAgIEdyaWRCb3hM
aXN0JiBvcGVyYXRvciA9IChjb25zdCBHcmlkQm94TGlzdCYpOwoKICAgIAogICAgCiAgICAKICAg
aW5saW5lIH5HcmlkQm94TGlzdCh2b2lkKSB7fQoKICAgIAogICAgCiAgICAKICAgaW5saW5lIEdy
aWRCb3hMaXN0ICphbGlhcygpCgl7IHJldHVybigoR3JpZEJveExpc3QgKikgT2JqZWN0Q291bnRl
cjo6YWxpYXMoKSk7IH0KCiAgICAKICAgIAogICAgCiAgIGludCBkaWZmZXJlbmNlKEdyaWRCb3hM
aXN0JiBnYmwsIAoJCSAgY29uc3QgR3JpZEJveCBsaHMsIAoJCSAgY29uc3QgR3JpZEJveCByaHMp
OwogICBpbnQgaW50ZXJzZWN0aW9uKEdyaWRCb3hMaXN0JiBnYmwsIAoJCSAgICBjb25zdCBHcmlk
Qm94IGxocywgCgkJICAgIGNvbnN0IEdyaWRCb3ggcmhzKTsKICAgdm9pZCBvcGVyYXRvciAtPSAo
Y29uc3QgR3JpZEJveExpc3QmIHJocyk7ICAKICAgdm9pZCBvcGVyYXRvciAqPSAoY29uc3QgR3Jp
ZEJveExpc3QmIHJocyk7ICAKICAgIAogICAgCiAgICAKCiAgICAKICAgIAogICAgCnByaXZhdGU6
IAogICAgCiAgICAKICAgIAogCiAgICAKICAgIAogICAgCnB1YmxpYzoKICAgdm9pZCBpbnRlcnNl
Y3QoY29uc3QgQkJveCYgcmhzLCBjb25zdCBpbnQgbGV2LCBHcmlkQm94TGlzdCYgZ2JsKTsKICAg
dm9pZCBpbnRlcnNlY3QoY29uc3QgQkJveCYgcmhzLCBjb25zdCBpbnQgbGV2LCBHcmlkQm94TGlz
dCYgZ2JsLCAKICAgICAgICAgICAgICAgICAgY29uc3QgaW50IG9sYXAsIGNvbnN0IGludCBleHRn
aD0wKTsKICAgdm9pZCBpbnRlcnNlY3QoY29uc3QgQkJveExpc3QmIHJocywgY29uc3QgaW50IGxl
diwgR3JpZEJveExpc3QmIGdibCwgCiAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBvbGFwLCBj
b25zdCBpbnQgZXh0Z2g9MCk7CiAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IEJCb3gmIHJocywgY29u
c3QgaW50IGxldiwgR3JpZEJveExpc3QmIGdibCwgCiAgICAgICAgICAgICAgICAgIGNvbnN0IHNo
b3J0KiBvbGFwLCBjb25zdCBpbnQgZXh0Z2g9MCk7CiAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IEJC
b3hMaXN0JiByaHMsIGNvbnN0IGludCBsZXYsIEdyaWRCb3hMaXN0JiBnYmwsCiAgICAgICAgICAg
ICAgICAgIGNvbnN0IHNob3J0KiBvbGFwLCBjb25zdCBpbnQgZXh0Z2g9MCk7CgogICAgCiAgICAK
ICAgIApwdWJsaWM6CiAgIGlubGluZSBpbnQgaXNlbXB0eSgpIGNvbnN0IHsgcmV0dXJuKG51bSA9
PSAwKTsgfQogICBpbmxpbmUgaW50IG51bWJlcigpIGNvbnN0IHsgcmV0dXJuKG51bSk7IH0KCiAg
IGludCBsb2FkKGNvbnN0IGludCBjbGV2LCAKCSAgICBjb25zdCBpbnQgb2xhcCwKCSAgICBjb25z
dCBpbnQgcGlkKTsKICAgaW50IGxvYWQoY29uc3QgaW50IGxldiwgCgkgICAgY29uc3QgaW50IGNs
ZXYsCgkgICAgY29uc3QgaW50IG9sYXAsCgkgICAgY29uc3QgaW50IHBpZCk7CiAgIGludCBudW1l
bGVtcyhjb25zdCBpbnQgb2xhcCwKCQljb25zdCBpbnQgcGlkKTsKICAgaW50IG51bWVsZW1zKGNv
bnN0IGludCBsZXYsIAoJCWNvbnN0IGludCBvbGFwLAoJCWNvbnN0IGludCBwaWQpOwogIAogICBp
bnQgbG9hZChjb25zdCBpbnQgY2xldiwKCSAgICBjb25zdCBzaG9ydCogb2xhcCwKCSAgICBjb25z
dCBpbnQgcGlkKTsKICAgaW50IGxvYWQoY29uc3QgaW50IGxldiwgCgkgICAgY29uc3QgaW50IGNs
ZXYsCgkgICAgY29uc3Qgc2hvcnQqIG9sYXAsCgkgICAgY29uc3QgaW50IHBpZCk7CiAgIGludCBu
dW1lbGVtcyhjb25zdCBzaG9ydCogb2xhcCwKCQljb25zdCBpbnQgcGlkKTsKICAgaW50IG51bWVs
ZW1zKGNvbnN0IGludCBsZXYsIAoJCWNvbnN0IHNob3J0KiBvbGFwLAoJCWNvbnN0IGludCBwaWQp
OwoKICAgaW50IG51bXByb2NzKHZvaWQpOwoKICAgaW50IGNvYXJzZXN0KHZvaWQpOwogICBpbnQg
ZmluZXN0KHZvaWQpOwogICBpbnQgc21hbGxlc3QoY29uc3QgaW50IGxldmVsKTsKICAgaW50IG1h
eGluZGV4KHZvaWQpOwoKICAgaW50IG1hdGNoZXMoY29uc3QgQkJveCYgYmIsIGNvbnN0IGludCBs
ZXYpOwogICBpbnQgYWJzbWF0Y2hlcyhjb25zdCBCQm94JiBiYiwgY29uc3QgaW50IGxldik7Cgog
ICBpbnQgaW5kZXgoY29uc3QgQkJveCYgYmIsIGNvbnN0IGludCBsZXYpOwogICBpbnQgYWJzaW5k
ZXgoY29uc3QgQkJveCYgYmIsIGNvbnN0IGludCBsZXYpOwogICBjb25zdCBHcmlkQm94JiBmaW5k
KGNvbnN0IEJCb3gmIGJiLCBjb25zdCBpbnQgbGV2KTsKCiAgICAKICAgIAogICAgCnB1YmxpYzoK
ICAgaW5saW5lIHZvaWQgc2V0aW5kZXgodm9pZCkKICAgICB7IHJlZ2lzdGVyIGludCBpZHg9MDsg
CiAgICAgICBmb3IgKHJlZ2lzdGVyIEdyaWRCb3ggKmc9Zmlyc3QoKTtnO2c9bmV4dCgpKSBnLT5p
bmRleD1pZHgrKzsgfQogICBpbmxpbmUgdm9pZCBzZXRvd25lcihjb25zdCBpbnQgcCkKICAgICB7
IGZvciAocmVnaXN0ZXIgR3JpZEJveCAqZz1maXJzdCgpO2c7Zz1uZXh0KCkpIGctPm93bmVyPXA7
IH0KICAgaW5saW5lIHZvaWQgc2V0cGFyZW50KGNvbnN0IGludCBwKQogICAgIHsgZm9yIChyZWdp
c3RlciBHcmlkQm94ICpnPWZpcnN0KCk7ZztnPW5leHQoKSkgZy0+cGluZGV4PXA7IH0KICAgCiAg
ICAKICAgIAogICAgCiAgIGlubGluZSB2b2lkIGVtcHR5KHZvaWQpCiAgICAgeyBCdWNrZXQ8R3Jp
ZEJveD46OmVtcHR5KCk7IG51bSA9IDA7IH0KCiAgICAKICAgIAogICAgCiAgIGlubGluZSBHcmlk
Qm94ICphZGQoKSAKICAgICB7IG51bSsrOyByZXR1cm4gKEJ1Y2tldDxHcmlkQm94Pjo6YWRkKCkp
OyB9CiAgIGlubGluZSBHcmlkQm94ICphZGQoY29uc3QgR3JpZEJveCYgZ2IpIAogICAgIHsgbnVt
Kys7IHJldHVybiAoQnVja2V0PEdyaWRCb3g+OjphZGQoZ2IpKTsgfQogICBpbmxpbmUgR3JpZEJv
eCAqaW5zZXJ0KGNvbnN0IEdyaWRCb3gmIGdiKQogICAgIHsgbnVtKys7ICByZXR1cm4gKEJ1Y2tl
dDxHcmlkQm94Pjo6aW5zZXJ0KGdiKSk7IH0KICAgaW5saW5lIHZvaWQgcmVtb3ZlKHZvaWQpCiAg
ICAgeyBpZiAoY3VycmVudCgpKSB7IG51bS0tOyBCdWNrZXQ8R3JpZEJveD46OnJlbW92ZSgpOyB9
fQoKICAgIAogICAgCiAgICAKICAgdm9pZCBsZXZlbGxpc3QoR3JpZEJveExpc3QmIGdibCwgY29u
c3QgaW50IGxldik7CiAgIHZvaWQgbGV2ZWxsaXN0KEdyaWRCb3hMaXN0JiBnYmwsIGNvbnN0IGlu
dCBtaW5sZXYsIAoJCSAgY29uc3QgaW50IG1heGxldik7CgogICAgCiAgICAKICAgIAogICBHcmlk
Qm94TGlzdCogcmVmaW5lbGlzdChjb25zdCBpbnQgYXRsZXYsIGNvbnN0IGludCBsZXZzKTsKCiAg
ICAKICAgIAogICAgCnB1YmxpYzoKICAgdm9pZCBiYm94bGlzdChCQm94TGlzdCYgYmJsLCBjb25z
dCBpbnQgbGV2LCBjb25zdCBpbnQgb2xhcCk7CiAgIHZvaWQgYmJveGxpc3QoQkJveExpc3QmIGJi
bCwgY29uc3QgaW50IGxldiwgY29uc3QgaW50IG9sYXAsIAogICAgICAgICAgICAgICAgIGNvbnN0
IGludCBsZXZpZCk7CiAgIHZvaWQgYmJveGxpc3QoQkJveExpc3QmIGJibCwgY29uc3QgaW50IGxl
diwgY29uc3Qgc2hvcnQqIG9sYXAsCiAgICAgICAgICAgICAgICAgY29uc3QgaW50IGV4dGdoKTsK
ICAgdm9pZCBiYm94bGlzdChCQm94TGlzdCYgYmJsLCBjb25zdCBpbnQgbGV2LCBjb25zdCBzaG9y
dCogb2xhcCwgCiAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxldmlkLCBjb25zdCBpbnQgZXh0
Z2gpOwogIH07Cgpvc3RyZWFtJiAgb3BlcmF0b3IgPDwgKG9zdHJlYW0mIG9zLCBjb25zdCBHcmlk
Qm94TGlzdCYgZ2JsKTsKb2ZzdHJlYW0mIG9wZXJhdG9yIDw8IChvZnN0cmVhbSYgb2ZzLCBjb25z
dCBHcmlkQm94TGlzdCYgZ2JsKTsKaWZzdHJlYW0mIG9wZXJhdG9yID4+IChpZnN0cmVhbSYgaWZz
LCBHcmlkQm94TGlzdCYgZ2JsKTsKCgojIDE5ICJBQ0VEaXN0cmlidXRpb24uaCIgMgoKIyAxICJH
cmlkVW5pdC5oIiAxCgoKCiAgCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IyAxICJBQ0VTZmMuaCIgMQoKCgogCgoKCgoKCgoKCgoKCgojIDEgIlBlYW5vSGlsYmVydC5oIiAx
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCiMgMSAic2ZjSW5kZXguaCIgMQoKCgogCgoKCgoKCgoKCgoK
CgoKCgojIDEgIkJpdFZlYy5oIiAxCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgojIDEg
Ii91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5jbHVkZS9saW1pdHMuaCIgMSAz
CiAKCgogCgoKCgoKIAojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8yLjk1LjQvaW5j
bHVkZS9zeXNsaW1pdHMuaCIgMSAzCiAKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8yLjk1LjQvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiAKCgogCgojIDExNCAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL2xpbWl0cy5oIiAzCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoK
CgoKCiAKCiMgMTEzICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMKCgoKCiAgCgoKCgojIDE0MCAi
L3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3Np
eDFfbGltLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgogCgogCgoKIAoKCiAK
CgogCgoKIAoKCiAKCgogCgoKIAoKCgogCgoKIAoKCiAKCgogCgoKIAoKCgogCgoKIAoKCiAKCgog
CgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoKIAoKCiAKCgogCgoKIAoKCiAKCgoK
IAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKCgoKCgoKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaCIg
MSAzCgoKCgoKCgoKCgoKCgoKCgoKCgojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0u
aCIgMiAzCgoKIAoKCgoKIAoKCgoKIAoKCgoKCiAKCiAKCgogCgogCgoKIAoKIAoKCiAKCgoKIAoK
CiAKCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwoKCgoKCgoKCiAK
CgoKCgoKCiMgMTQ0ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
IAoKCiAKCgogCgoKIAoKCiAKCgoKIAoKCgogCgoKIAoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCiMgMTQ4ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoK
CgojIDExNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNsdWRlL2xpbWl0
cy5oIiAyIDMKCgoKCiMgNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNs
dWRlL3N5c2xpbWl0cy5oIiAyIDMKCgojIDExICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgv
Mi45NS40L2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKCiAKCgoKIAoKCgogCgoKCgogCgoKCgoK
IAoKCgogCgoKCgoKCgoKCgoKCiAKCiAKCgoKCiAKCgoKIAoKCgoKCgoKCiAKCgoKIAoKCgoKCgoK
CgoKCgoKIAoKCgojIDEwNyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC9pbmNs
dWRlL2xpbWl0cy5oIiAzCgoKCgogCgoKCgoKCgoKCiMgMzAgIkJpdFZlYy5oIiAyCgoKIyAxICIv
dXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgojIDYzICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKCgpleHRl
cm4gIkMiIHsgCgogCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19h
c3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxlLAoJCQkgICB1bnNpZ25lZCBpbnQgX19saW5l
LCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18g
KChfX25vcmV0dXJuX18pKTsKCiAKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGlu
dCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsCgkJCQkgIHVuc2lnbmVkIGludCBfX2xp
bmUsCgkJCQkgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSAgX19hdHRy
aWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAKCmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25z
dCBjaGFyICpfX2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQogICAg
IHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfSAKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKIyAzMiAiQml0VmVjLmgiIDIKCgoKCgoKCgoKCiAKdHlwZWRl
ZiBpbnQgQml0VmVjVHlwZTsKCgoKCgpjbGFzcyBCaXRWZWMKICB7CiAgIGludCBsZW5ndGg7CiAg
IHNob3J0IGludCBzbG90czsKICAgc2hvcnQgaW50IHNsb3Rfd2lkdGg7CiAgIEJpdFZlY1R5cGUg
YnZlY1soNCkgXTsKCnByaXZhdGU6CgogICBpbmxpbmUgaW50IEdldFNsb3QoY29uc3QgaW50IGxv
YykgY29uc3QKCXtyZXR1cm4gbG9jL3Nsb3Rfd2lkdGg7fQogICBpbmxpbmUgaW50IE1hc2tCaXQo
Y29uc3QgaW50IGxvYykgY29uc3QKCXtyZXR1cm4gKGludCkxIDw8IChzbG90X3dpZHRoLShsb2Ml
c2xvdF93aWR0aCktMSk7fQoKcHVibGljOgoKICAgaW5saW5lIEJpdFZlYygpCgk6IGxlbmd0aCgw
KSwgc2xvdHMoMCkKCXtzbG90X3dpZHRoID0gKHNpemVvZihCaXRWZWNUeXBlKSogKDgpICk7fQoK
ICAgQml0VmVjKGNvbnN0IGludCBsZW4pOwogICBCaXRWZWMoQml0VmVjIGNvbnN0ICZvdGhlcikK
ICAgICA6IGxlbmd0aChvdGhlci5sZW5ndGgpLAogICAgIHNsb3RzKG90aGVyLnNsb3RzKSwgCiAg
ICAgc2xvdF93aWR0aChvdGhlci5zbG90X3dpZHRoKQoKICB7IGZvcihyZWdpc3RlciBpbnQgaT0w
O2k8c2xvdHM7aSsrKSBidmVjW2ldID0gb3RoZXIuYnZlY1tpXTsgfQoKICAgaW5saW5lIH5CaXRW
ZWMoKSB7fQoKICAgQml0VmVjIGNvbnN0ICZvcGVyYXRvcj0gKEJpdFZlYyBjb25zdCAmb3RoZXIp
OwoKICAgaW50IG9wZXJhdG9yPT0oQml0VmVjIGNvbnN0ICZvdGhlcikgY29uc3Q7CiAgIGludCBv
cGVyYXRvciE9KEJpdFZlYyBjb25zdCAmb3RoZXIpIGNvbnN0OwogICBpbnQgb3BlcmF0b3I+KEJp
dFZlYyBjb25zdCAmb3RoZXIpIGNvbnN0OwogICBpbnQgb3BlcmF0b3I8KEJpdFZlYyBjb25zdCAm
b3RoZXIpIGNvbnN0OwogICBpbnQgb3BlcmF0b3I+PShCaXRWZWMgY29uc3QgJm90aGVyKSBjb25z
dDsKICAgaW50IG9wZXJhdG9yPD0oQml0VmVjIGNvbnN0ICZvdGhlcikgY29uc3Q7CgogICBpbmxp
bmUgaW50IFRlc3RCaXQoY29uc3QgaW50IGxvYykgY29uc3QKICAgICB7CiAgICAgICAoc3RhdGlj
X2Nhc3Q8dm9pZD4gICgoIGxvYyA+PSAwICYmIGxvYyA8IGxlbmd0aCApID8gMCA6CShfX2Fzc2Vy
dF9mYWlsICgibG9jID49IDAgJiYgbG9jIDwgbGVuZ3RoIiAsICJCaXRWZWMuaCIsIDkwLCBfX1BS
RVRUWV9GVU5DVElPTl9fICksIDApKSkgOwogICAgICAgcmV0dXJuKGJ2ZWNbR2V0U2xvdChsb2Mp
XSAmIE1hc2tCaXQobG9jKSk7CiAgICAgfQogICBpbmxpbmUgdm9pZCBTZXRCaXQoY29uc3QgaW50
IGxvYykKICAgICB7CiAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIGxvYyA+PSAwICYmIGxv
YyA8IGxlbmd0aCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgibG9jID49IDAgJiYgbG9jIDwgbGVu
Z3RoIiAsICJCaXRWZWMuaCIsIDk1LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwogICAg
ICAgYnZlY1tHZXRTbG90KGxvYyldIHw9IE1hc2tCaXQobG9jKTsKICAgICB9CiAgIGlubGluZSB2
b2lkIFVuc2V0Qml0KGNvbnN0IGludCBsb2MpCiAgICAgewogICAgICAgKHN0YXRpY19jYXN0PHZv
aWQ+ICAoKCBsb2MgPj0gMCAmJiBsb2MgPCBsZW5ndGggKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAo
ImxvYyA+PSAwICYmIGxvYyA8IGxlbmd0aCIgLCAiQml0VmVjLmgiLCAxMDAsIF9fUFJFVFRZX0ZV
TkNUSU9OX18gKSwgMCkpKSA7CiAgICAgICBidmVjW0dldFNsb3QobG9jKV0gJj0gfk1hc2tCaXQo
bG9jKTsKICAgICB9CiAgIGlubGluZSB2b2lkIFRvZ2dsZUJpdChjb25zdCBpbnQgbG9jKQogICAg
IHsKICAgICAgIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggbG9jID49IDAgJiYgbG9jIDwgbGVuZ3Ro
ICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJsb2MgPj0gMCAmJiBsb2MgPCBsZW5ndGgiICwgIkJp
dFZlYy5oIiwgMTA1LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwogICAgICAgYnZlY1tH
ZXRTbG90KGxvYyldIF49IE1hc2tCaXQobG9jKTsKICAgICB9CiAgIHZvaWQgU3dhcEJpdChjb25z
dCBpbnQgbG9jMSwgY29uc3QgaW50IGxvYzIpOwoKICAgaW50IElzb2xhdGVCaXQoY29uc3QgaW50
IGxvYywgY29uc3QgaW50IG51bT0xKSBjb25zdDsKCiAgIGlubGluZSB2b2lkIFJlc2V0VmVjKHZv
aWQpCiAgICAgeyByZWdpc3RlciBpbnQgaTsgZm9yKGk9MDtpPHNsb3RzO2krKykgYnZlY1tpXSA9
IDA7fQoKICAgaW5saW5lIHZvaWQgU2V0VmVjKHZvaWQpICAgICAgICAKICAgICB7IHJlZ2lzdGVy
IGludCBpOyBmb3IoaT0wO2k8c2xvdHM7aSsrKSBidmVjW2ldID0gKDI8PHNsb3Rfd2lkdGgpIC0g
MTsgfQoKCgogICBpbmxpbmUgaW50IEdldExlbmd0aCh2b2lkKSBjb25zdAoJe3JldHVybiBsZW5n
dGg7fQogICBpbmxpbmUgaW50IEdldFNsb3RXaWR0aCh2b2lkKSBjb25zdAoJe3JldHVybiBzbG90
X3dpZHRoO30KICAgaW5saW5lIGludCBHZXRTbG90cyh2b2lkKSBjb25zdAoJe3JldHVybiBzbG90
czt9CgogIH07CgoKIyAyMSAic2ZjSW5kZXguaCIgMgoKCgoKCgoKCgoKCgoKCgpjbGFzcyBzZmNJ
bmRleCA6IHB1YmxpYyBCaXRWZWMKICB7CiAgIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8KG9z
dHJlYW0mLCBzZmNJbmRleCBjb25zdCAmKTsKCiAgIHNob3J0IGludCBzZmNiYXNldzsKICAgc2hv
cnQgaW50IHNmY2RpZ2l0dzsKCnByb3RlY3RlZDoKICAgc2hvcnQgaW50IHNmY2Jhc2U7CiAgIHNo
b3J0IGludCBzZmNkaW07CiAgIHNob3J0IGludCBzZmNsZXZzOwoKcHVibGljOgogICBpbmxpbmUg
c2ZjSW5kZXgoKQoJOiBCaXRWZWMoKSwKICAgICAgICAgIHNmY2Jhc2V3KDApLCBzZmNkaWdpdHco
MCksCiAgICAgICAgICBzZmNiYXNlKDApLCBzZmNkaW0oMCksIHNmY2xldnMoMCkge30gCgogICBp
bmxpbmUgc2ZjSW5kZXgoY29uc3QgaW50IGRpbSwgY29uc3QgaW50IGxldnMsIAoJCSAgIGNvbnN0
IGludCBiYXNlID0gKDIpICkKCTogQml0VmVjKGxldnMqZGltKihpbnQpY2VpbCgobG9nKCAoZG91
YmxlKWJhc2UgKSkvKGxvZygyLjApKSApKSwKCSAgc2ZjYmFzZShiYXNlKSwgc2ZjZGltKGRpbSks
IHNmY2xldnMobGV2cykKICAgICB7IHNmY2Jhc2V3ID0gKGludCljZWlsKChsb2coIChkb3VibGUp
YmFzZSApKS8obG9nKDIuMCkpICk7IAogICAgICAgc2ZjZGlnaXR3ID0gc2ZjZGltKnNmY2Jhc2V3
OyB9CgogICBpbmxpbmUgc2ZjSW5kZXgoc2ZjSW5kZXggY29uc3QgJm90aGVyKQoJOiBCaXRWZWMo
KEJpdFZlYyBjb25zdCAmKW90aGVyKSwKICAgICAgICAgIHNmY2Jhc2V3KG90aGVyLnNmY2Jhc2V3
KSwKICAgICAgICAgIHNmY2RpZ2l0dyhvdGhlci5zZmNkaWdpdHcpLAogICAgICAgICAgc2ZjYmFz
ZShvdGhlci5zZmNiYXNlKSwgc2ZjZGltKG90aGVyLnNmY2RpbSksIAogICAgICAgICAgc2ZjbGV2
cyhvdGhlci5zZmNsZXZzKSB7fQoKICAgc2ZjSW5kZXggY29uc3QgJm9wZXJhdG9yPSAoc2ZjSW5k
ZXggY29uc3QgJm90aGVyKTsKCiAgIGludCBvcGVyYXRvcj09IChzZmNJbmRleCBjb25zdCAmb3Ro
ZXIpIGNvbnN0OwogICBpbnQgb3BlcmF0b3IhPSAoc2ZjSW5kZXggY29uc3QgJm90aGVyKSBjb25z
dDsKICAgaW50IG9wZXJhdG9yPiAoc2ZjSW5kZXggY29uc3QgJm90aGVyKSBjb25zdDsKICAgaW50
IG9wZXJhdG9yPCAoc2ZjSW5kZXggY29uc3QgJm90aGVyKSBjb25zdDsKICAgaW50IG9wZXJhdG9y
Pj0gKHNmY0luZGV4IGNvbnN0ICZvdGhlcikgY29uc3Q7CiAgIGludCBvcGVyYXRvcjw9IChzZmNJ
bmRleCBjb25zdCAmb3RoZXIpIGNvbnN0OwoKICAgIAogICBpbnQgc2ZjR2V0RGlnaXQoY29uc3Qg
aW50IGxldmVsKSBjb25zdDsKICAgdm9pZCBzZmNTZXREaWdpdChjb25zdCBpbnQgbGV2ZWwsIGNv
bnN0IGludCBkaWdpdCk7CiAgIHZvaWQgc2ZjVW5zZXREaWdpdChjb25zdCBpbnQgbGV2ZWwpOwog
ICB2b2lkIHNmY01heERpZ2l0KGNvbnN0IGludCBsZXZlbCk7CgogICAgCiAgIHZvaWQgc2ZjU3dh
cERpZ2l0V2QoY29uc3QgaW50IGxldmVsLCBjb25zdCBpbnQgcG9zMSwgY29uc3QgaW50IHBvczIp
OwogICB2b2lkIHNmY1RvZ2dsZURpZ2l0V2QoY29uc3QgaW50IGxldmVsLCBjb25zdCBpbnQgcG9z
KTsKCiAgICAKICAgaW50IHNmY0dldEluZGV4KCkgY29uc3Q7CiAgIGludCBzZmNHZXRJbmRleChj
b25zdCBpbnQgbGV2KSBjb25zdDsKICAgaW50IHNmY0dldEluZGV4KGNvbnN0IGludCBsZXYsIGNv
bnN0IGludCBubGV2KSBjb25zdDsKCiAgIHZvaWQgc2ZjU2V0SW5kZXgoY29uc3QgaW50IGluZGV4
KTsKICAgdm9pZCBzZmNTZXRJbmRleChjb25zdCBpbnQgaW5kZXgsIGNvbnN0IGludCBsZXYpOwog
ICB2b2lkIHNmY1NldEluZGV4KGNvbnN0IGludCBpbmRleCwgY29uc3QgaW50IGxldiwgY29uc3Qg
aW50IG5sZXYpOwogICB2b2lkIHNmY01heEluZGV4KGNvbnN0IGludCBsZXYpOwoKICAgIAogICB2
b2lkIHNmY0NyZWF0ZUxvY051bShjb25zdCBpbnQgKmNvb3Jkcyk7CiAgIHZvaWQgc2ZjR2V0Q29v
cmRzKGludCAqY29vcmRzKSBjb25zdDsKICAgdm9pZCBzZmNHZXREaWdpdEFycmF5KGludCAqZGln
aXRzKSBjb25zdDsKCiAgICAKICAgaW5saW5lIGludCBzZmNHZXRCYXNlVyh2b2lkKSBjb25zdAoJ
e3JldHVybiBzZmNiYXNldzt9CiAgIGlubGluZSBpbnQgc2ZjR2V0RGlnaXRXKHZvaWQpIGNvbnN0
Cgl7cmV0dXJuIHNmY2RpZ2l0dzt9Cgpwcml2YXRlOgogICBpbmxpbmUgdm9pZCBzZmNTZXREaWdp
dEJpdChjb25zdCBpbnQgbGV2ZWwsIGNvbnN0IGludCBwb3MpCgl7IFNldEJpdCgobGV2ZWwtMSkq
c2ZjZGlnaXR3ICsgcG9zKTsgfQogICBpbmxpbmUgdm9pZCBzZmNVbnNldERpZ2l0Qml0KGNvbnN0
IGludCBsZXZlbCwgY29uc3QgaW50IHBvcykKCXsgVW5zZXRCaXQoKGxldmVsLTEpKnNmY2RpZ2l0
dyArIHBvcyk7IH0KICAgaW5saW5lIHZvaWQgc2ZjVG9nZ2xlRGlnaXRCaXQoY29uc3QgaW50IGxl
dmVsLCBjb25zdCBpbnQgcG9zKQoJeyBUb2dnbGVCaXQoKGxldmVsLTEpKnNmY2RpZ2l0dyArIHBv
cyk7IH0KCiAgfTsKIApleHRlcm4gb3N0cmVhbSYgIG9wZXJhdG9yIDw8IChvc3RyZWFtJiBvcywg
c2ZjSW5kZXggY29uc3QgJnNpKTsKCgojIDIxICJQZWFub0hpbGJlcnQuaCIgMgoKCgoKCgpjbGFz
cyBQZWFub0hpbGJlcnQgOiBwdWJsaWMgc2ZjSW5kZXgKICB7CgpwdWJsaWM6CgogICAgCiAgIGlu
bGluZSBQZWFub0hpbGJlcnQoKQoJOiBzZmNJbmRleCgpIHt9CgogICAgCiAgIGlubGluZSBQZWFu
b0hpbGJlcnQoY29uc3QgaW50IGRpbSwgY29uc3QgaW50IGxldnMpCgk6IHNmY0luZGV4KGRpbSxs
ZXZzLCgyKSApCgl7KHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBkaW08PTMgKSA/IDAgOgkoX19hc3Nl
cnRfZmFpbCAoImRpbTw9MyIgLCAiUGVhbm9IaWxiZXJ0LmgiLCAzOSwgX19QUkVUVFlfRlVOQ1RJ
T05fXyApLCAwKSkpIDt9CgogICAgCiAgIGlubGluZSBQZWFub0hpbGJlcnQoUGVhbm9IaWxiZXJ0
IGNvbnN0ICZvdGhlcikKICAJOiBzZmNJbmRleCgoc2ZjSW5kZXggY29uc3QgJilvdGhlcikge30K
CiAgICAKcHJpdmF0ZToKICAgdm9pZCBJbnZlcnQoaW50ICpjb29yZHMpIGNvbnN0OwoKcHVibGlj
OgogICBpbmxpbmUgdm9pZCBTZXRJbmRleChjb25zdCBpbnQgaW5kZXgsIGNvbnN0IGludCBpZHhs
ZXYpCiAgICAgeyBzZmNTZXRJbmRleChpbmRleCxpZHhsZXYpOyB9CiAgIGlubGluZSB2b2lkIFNl
dEluZGV4KGNvbnN0IGludCBpbmRleCwgY29uc3QgaW50IGlkeGxldiwgCgkJCWNvbnN0IGludCBu
bGV2KQogICAgIHsgc2ZjU2V0SW5kZXgoaW5kZXgsaWR4bGV2LG5sZXYpOyB9CgogICB2b2lkIE1h
cChjb25zdCBpbnQgKmNvb3Jkcyk7CiAgIHZvaWQgSW52ZXJ0KGludCAqY29vcmRzLCBjb25zdCBp
bnQgaW5kZXgpOwogICB2b2lkIEludmVydChpbnQgKmNvb3JkcywgY29uc3QgaW50IGluZGV4LCBj
b25zdCBpbnQgaWR4bGV2KTsKICAgdm9pZCBJbnZlcnQoaW50ICpjb29yZHMsIGNvbnN0IGludCBp
bmRleCwgCgkgICAgICAgY29uc3QgaW50IGlkeGxldiwgY29uc3QgaW50IG5sZXYpOwoKICAgIAoK
ICAgUGVhbm9IaWxiZXJ0ICpHZXRCb3goY29uc3QgaW50IGxldiwgY29uc3QgaW50IG5sZXYpIGNv
bnN0OwogICB2b2lkIFNldEJveChjb25zdCBpbnQgbGV2LCBjb25zdCBpbnQgbmxldik7CgogICAg
CgogICBQZWFub0hpbGJlcnQgKkdldE1heChjb25zdCBpbnQgbGV2LCBjb25zdCBpbnQgbmxldikg
Y29uc3Q7CiAgIHZvaWQgU2V0TWF4KGNvbnN0IGludCBsZXYsIGNvbnN0IGludCBubGV2KTsKCiAg
ICAKICAgdm9pZCBSZXNldEJhc2UoY29uc3QgaW50IGxldiwgY29uc3QgaW50IG5sZXYpOwogICAK
ICAgIAogICB2b2lkIEdldENvb3JkcyhpbnQgKmNvb3JkcywgY29uc3QgaW50IGxldiA9IDEpIGNv
bnN0OwogICBpbnQgKkdldENvb3Jkcyhjb25zdCBpbnQgbGV2ID0gMSkgY29uc3Q7CgogICAgCiAg
IGlubGluZSBpbnQgR2V0Q2FyZGluYWxpdHkoY29uc3QgaW50IGRpbSwgY29uc3QgaW50IGxldikg
Y29uc3QKICAgICB7cmV0dXJuIChpbnQpMTw8KGxldipkaW0pO30KICAgaW5saW5lIGludCBHZXRD
YXJkaW5hbGl0eShjb25zdCBpbnQgbGV2KSBjb25zdAogICAgIHtyZXR1cm4gKGludCkxPDwobGV2
KnNmY2RpbSk7fQoKICAgIAogICBpbmxpbmUgaW50IEdldERpbUNhcmRpbmFsaXR5KGNvbnN0IGlu
dCBsZXYpIGNvbnN0CiAgICAge3JldHVybiAoaW50KTE8PChzZmNsZXZzLWxldik7fQoKICAgIAog
ICBpbmxpbmUgaW50IEdldERpbU1heChjb25zdCBpbnQgbGV2KSBjb25zdAogICAgIHtyZXR1cm4g
KCgoaW50KTE8PGxldiktMSkqKChpbnQpMTw8KHNmY2xldnMtbGV2KSk7fQogICAKcHJpdmF0ZToK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKICAgaW5saW5lIHZvaWQgcGhTd2FwRGlyKGNvbnN0
IGludCBsZXZlbCwgY29uc3QgaW50IGF4aXMpCiAgICAge3NmY1RvZ2dsZURpZ2l0V2QobGV2ZWws
YXhpcy0xKTt9CiAgIGlubGluZSB2b2lkIHBoVHJhbnNsYXRlKGNvbnN0IGludCBsZXZlbCwgY29u
c3QgaW50IGF4aXMpCiAgICAge3NmY1RvZ2dsZURpZ2l0V2QobGV2ZWwsYXhpcy0xKTt9CiAgIGlu
bGluZSB2b2lkIHBoUm90YXRlKGNvbnN0IGludCBsZXZlbCwgY29uc3QgaW50IGZyb21fYXhpcywg
CgkJCWNvbnN0IGludCB0b19heGlzKQogICAgIHtzZmNTd2FwRGlnaXRXZChsZXZlbCxmcm9tX2F4
aXMtMSx0b19heGlzLTEpO30KCiAgIHZvaWQgcGhPcmllbnQoY29uc3QgaW50IGxldmVsLCBjb25z
dCBpbnQgcG9zKTsKICAgaW50IHBoR3JheShjb25zdCBpbnQgbGV2ZWwpOwogICBpbnQgcGhHaW52
KGNvbnN0IGludCBsZXZlbCk7CgogIH07CgoKIyAxOCAiQUNFU2ZjLmgiIDIKCnR5cGVkZWYgY2xh
c3MgUGVhbm9IaWxiZXJ0IGRNYXBJbmRleDsKCgoKCiMgNDIgIkdyaWRVbml0LmgiIDIKCgoKCgpj
bGFzcyBHcmlkVW5pdCAKICB7CiAgIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0m
LCBjb25zdCBHcmlkVW5pdCYpOwogICBmcmllbmQgb2ZzdHJlYW0mIG9wZXJhdG9yPDwob2ZzdHJl
YW0mLCBjb25zdCBHcmlkVW5pdCYpOwogICBmcmllbmQgaWZzdHJlYW0mIG9wZXJhdG9yPj4oaWZz
dHJlYW0mLCBHcmlkVW5pdCYpOwogICBmcmllbmQgY2xhc3MgR3JpZFVuaXRMaXN0OwoKICAgc2hv
cnQgaW50IG93bmVyOwkJICAgIAoKCgogICBzaG9ydCBpbnQgaW5kZXg7CQkgCiAgIHNob3J0IGlu
dCByYW5rOwkJIAogICBzaG9ydCBpbnQgYmFzZWxldjsgCQkgCgogICBzaG9ydCBpbnQgY3JzbGV2
OyAJCSAKICAgc2hvcnQgaW50IGZpbmVsZXY7IAkJIAogICBzaG9ydCBpbnQgbWF4bGV2OwkJICAK
ICAgc2hvcnQgaW50IG1pbmxldjsJCSAgCiAgIHNob3J0IGludCBsZXZzdGVwOwkJIAoKICAgc2hv
cnQgaW50IGV4dGVudDsJCSAKCQkJCSAKCiAgIGRNYXBJbmRleCBiYXNlaW5kZXg7IAkgCgoKICAg
QkJveCBmYmI7ICAgICAgICAgICAgICAgICAgICAgCgpwdWJsaWM6CiAgICAKICAgaW5saW5lIEdy
aWRVbml0KHZvaWQpCiAgICAgICAgOiBvd25lcigoKC0xKSApICksIGluZGV4KCgtMSkgKSwgcmFu
aygwKSwgCiAgICAgICAgICBiYXNlbGV2KDApLCBjcnNsZXYoMCksIGZpbmVsZXYoMCksIAogICAg
ICAgICAgbWF4bGV2KDApLCBtaW5sZXYoMCksIGxldnN0ZXAoMCksCiAgICAgICAgICBleHRlbnQo
MCkgeyB9CgogICBHcmlkVW5pdChjb25zdCBpbnQgbnJhbmssIGNvbnN0IGludCBjbGV2LCBjb25z
dCBpbnQqIGJjb29yZHMsCgkgICAgY29uc3QgaW50IGV4dCwgY29uc3QgaW50IG1sZXYsIGNvbnN0
IGludCBsc3RlcCwgCgkgICAgY29uc3QgaW50IHJlZmxldik7CgogICBHcmlkVW5pdChjb25zdCBp
bnQgbnJhbmssIGNvbnN0IGludCBjbGV2LCBjb25zdCBpbnQgYmluZGV4LCAKCSAgICBjb25zdCBp
bnQgZXh0LCBjb25zdCBpbnQgbWxldiwgY29uc3QgaW50IGxzdGVwLCAKCSAgICBjb25zdCBpbnQg
cmVmbGV2KTsKCiAgIGlubGluZSBHcmlkVW5pdChHcmlkVW5pdCBjb25zdCAmb3RoZXIpCiAgICAg
ICAgOiBvd25lcihvdGhlci5vd25lciksIGluZGV4KG90aGVyLmluZGV4KSwKICAgICAgICAgIHJh
bmsob3RoZXIucmFuayksIGJhc2VsZXYob3RoZXIuYmFzZWxldiksCiAgICAgICAgICBjcnNsZXYo
b3RoZXIuY3JzbGV2KSwgZmluZWxldihvdGhlci5maW5lbGV2KSwKICAgICAgICAgIG1heGxldihv
dGhlci5tYXhsZXYpLCBtaW5sZXYob3RoZXIubWlubGV2KSwgCiAgICAgICAgICBsZXZzdGVwKG90
aGVyLmxldnN0ZXApLAogICAgICAgICAgZXh0ZW50KG90aGVyLmV4dGVudCksIGJhc2VpbmRleChv
dGhlci5iYXNlaW5kZXgpLAogICAgICAgICAgZmJiKG90aGVyLmZiYikgCiAgICAgeyB9CgogICBp
bmxpbmUgfkdyaWRVbml0KHZvaWQpIHt9CgogICBHcmlkVW5pdCBjb25zdCAmb3BlcmF0b3I9IChH
cmlkVW5pdCBjb25zdCAmb3RoZXIpOwoKICAgIApwcml2YXRlOgogICAgCiAgICAKcHVibGljOgog
ICBpbmxpbmUgaW50IGd1UmFuayh2b2lkKSBjb25zdCB7IHJldHVybiAocmFuayk7IH0KICAgaW5s
aW5lIGludCBndUJhc2VMZXYodm9pZCkgY29uc3QgeyByZXR1cm4gKGJhc2VsZXYpOyB9CiAgIGlu
bGluZSBpbnQgZ3VGaW5lTGV2KHZvaWQpIGNvbnN0IHsgcmV0dXJuIChmaW5lbGV2KTsgfQogICBp
bmxpbmUgaW50IGd1Q3JzTGV2KHZvaWQpIGNvbnN0IHsgcmV0dXJuIChjcnNsZXYpOyB9CiAgIGlu
bGluZSBpbnQgZ3VOdW1MZXYodm9pZCkgY29uc3QgeyByZXR1cm4gKChmaW5lbGV2LWNyc2xldikv
bGV2c3RlcCsxKTsgfQogICBpbmxpbmUgaW50IGd1TWF4TGV2KHZvaWQpIGNvbnN0IHsgcmV0dXJu
IChtYXhsZXYpOyB9CiAgIGlubGluZSBpbnQgZ3VNaW5MZXYodm9pZCkgY29uc3QgeyByZXR1cm4g
KG1pbmxldik7IH0KICAgaW5saW5lIGludCBndUxldlN0ZXAodm9pZCkgY29uc3QgeyByZXR1cm4g
KGxldnN0ZXApOyB9CiAgIGlubGluZSBpbnQgZ3VMZXZlbHModm9pZCkgY29uc3QgeyByZXR1cm4g
KChtYXhsZXYtbWlubGV2KS9sZXZzdGVwKzEpOyB9CgogICBpbmxpbmUgaW50IGd1RXh0ZW50KGNv
bnN0IGludCBsZXYpIGNvbnN0CiAgIHsgcmV0dXJuICgobGV2PD1maW5lbGV2ICYmIGxldj49Y3Jz
bGV2ICYmIGV4dGVudD49KGZpbmVsZXYtbGV2KSkgCiAgICAgICAgICAgID8gZXh0ZW50LShmaW5l
bGV2LWxldikgOiAwKTsgfQogICBpbmxpbmUgaW50IGd1RXh0ZW50QWJzKGNvbnN0IGludCBsZXYp
IGNvbnN0CiAgIHsgcmV0dXJuICgoZXh0ZW50Pj0oZmluZWxldi1sZXYpKSA/IGV4dGVudC0oZmlu
ZWxldi1sZXYpIDogMCk7IH0KCiAgIGlubGluZSBpbnQgZ3VFeHRlbnRWYWx1ZShjb25zdCBpbnQg
bGV2KSBjb25zdAogICB7IHJldHVybiAoKGxldjw9ZmluZWxldiAmJiBsZXY+PWNyc2xldiAmJiBl
eHRlbnQ+PShmaW5lbGV2LWxldikpIAogICAgICAgICAgICA/IDEgPDwgKGV4dGVudC0oZmluZWxl
di1sZXYpKSA6IDEpOyB9CiAgIGlubGluZSBpbnQgZ3VFeHRlbnRBYnNWYWx1ZShjb25zdCBpbnQg
bGV2KSBjb25zdAogICB7IHJldHVybiAoKGV4dGVudD49KGZpbmVsZXYtbGV2KSkgPyAxIDw8IChl
eHRlbnQtKGZpbmVsZXYtbGV2KSkgOiAxKTsgfQoKICAgdW5zaWduZWQgbG9uZyBndU51bShjb25z
dCBpbnQgb3ZlcmxhcCkgY29uc3Q7CiAgIHVuc2lnbmVkIGxvbmcgZ3VXb3JrKGNvbnN0IGludCBv
dmVybGFwKSBjb25zdDsKICAgdW5zaWduZWQgbG9uZyBndU51bShjb25zdCBpbnQgbGV2LCBjb25z
dCBpbnQgb3ZlcmxhcCkgY29uc3Q7CiAgIHVuc2lnbmVkIGxvbmcgZ3VXb3JrKGNvbnN0IGludCBs
ZXYsIGNvbnN0IGludCBvdmVybGFwKSBjb25zdDsKCiAgIHVuc2lnbmVkIGxvbmcgZ3VOdW0oY29u
c3Qgc2hvcnQqIG92ZXJsYXApIGNvbnN0OwogICB1bnNpZ25lZCBsb25nIGd1V29yayhjb25zdCBz
aG9ydCogb3ZlcmxhcCkgY29uc3Q7CiAgIHVuc2lnbmVkIGxvbmcgZ3VOdW0oY29uc3QgaW50IGxl
diwgY29uc3Qgc2hvcnQqIG92ZXJsYXApIGNvbnN0OwogICB1bnNpZ25lZCBsb25nIGd1V29yayhj
b25zdCBpbnQgbGV2LCBjb25zdCBzaG9ydCogb3ZlcmxhcCkgY29uc3Q7CgogICBpbmxpbmUgaW50
IGd1Q29udGFpbnMoY29uc3QgaW50IGxldikgY29uc3QKICAgICAgICB7IHJldHVybiAobGV2PD1m
aW5lbGV2ICYmIGxldj49Y3JzbGV2KTsgfQogICBpbmxpbmUgaW50IGd1Q29udGFpbnMoY29uc3Qg
aW50IG1pbmxldmVsLCBjb25zdCBpbnQgbWF4bGV2ZWwpIGNvbnN0CiAgICAgICAgeyByZXR1cm4g
KG1pbmxldmVsPD1maW5lbGV2ICYmIG1heGxldmVsPj1jcnNsZXYpOyB9CgogICBpbmxpbmUgaW50
IGd1TGV2SW5kZXgoY29uc3QgaW50IGxldikgY29uc3QKICAgICAgICB7IHJldHVybiAoKGxldi1t
aW5sZXYpL2xldnN0ZXApOyB9CgogICAgCiAgIGlubGluZSB2b2lkIGd1U2V0T3duZXIoY29uc3Qg
aW50IHApIHsgb3duZXIgPSBwOyB9CgoKCgoKCiAgIGlubGluZSBjb25zdCBkTWFwSW5kZXgmIGd1
QmFzZUluZGV4KHZvaWQpIGNvbnN0IHsgcmV0dXJuIChiYXNlaW5kZXgpOyB9CgogICBkTWFwSW5k
ZXggZ3VUb3BJbmRleChjb25zdCBpbnQgbGV2KSBjb25zdDsKICAgZE1hcEluZGV4IGd1TWF4SW5k
ZXgoY29uc3QgaW50IGxldikgY29uc3Q7Cgpwcml2YXRlOgogICB2b2lkIGd1TENvb3JkcyhpbnQg
KmMsIGNvbnN0IGludCBsZXYpIGNvbnN0OwogICBDb29yZHMgZ3VMQ29vcmRzKGNvbnN0IGludCBs
ZXYpIGNvbnN0OwoKICAgdm9pZCBndVVDb29yZHMoaW50ICpjLCBjb25zdCBpbnQgbGV2KSBjb25z
dDsKICAgQ29vcmRzIGd1VUNvb3Jkcyhjb25zdCBpbnQgbGV2KSBjb25zdDsKCiAgIHZvaWQgZ3VT
ZXRCQm94KCk7IAoKcHVibGljOgogICBjb25zdCBCQm94JiBndUJCb3goKSBjb25zdCB7IHJldHVy
biAoZmJiKTsgfQoKICAgQkJveCBndUJCb3goY29uc3QgaW50IGxldiwgY29uc3QgaW50IG9sYXA9
MCwgY29uc3QgaW50IGV4dGdoPTApIGNvbnN0OwogICBCQm94IGd1QkJveEFicyhjb25zdCBpbnQg
bGV2LCBjb25zdCBpbnQgb2xhcD0wLCBjb25zdCBpbnQgZXh0Z2g9MCkgY29uc3Q7CgogICBCQm94
IGd1QkJveChjb25zdCBpbnQgbGV2LCBjb25zdCBzaG9ydCogb2xhcCwgY29uc3QgaW50IGV4dGdo
PTApIGNvbnN0OwogICBCQm94IGd1QkJveEFicyhjb25zdCBpbnQgbGV2LCBjb25zdCBzaG9ydCog
b2xhcCwgY29uc3QgaW50IGV4dGdoPTApIGNvbnN0OwoKICAgQkJveCBndUJCb3goY29uc3QgaW50
IG1pbmwsIGNvbnN0IGludCBtYXhsLAoJICAgICAgIGNvbnN0IHNob3J0KiBvbGFwLCBjb25zdCBp
bnQgZXh0Z2g9MCkgY29uc3Q7CgogICBpbnQgZ3VJbnNpZGUoY29uc3QgQkJveCYgYmJveCwgY29u
c3QgaW50IGxldikgY29uc3Q7CgogICAgCiAgIGludCBvcGVyYXRvcj09IChHcmlkVW5pdCBjb25z
dCAmb3RoZXIpIGNvbnN0OwogICBpbnQgb3BlcmF0b3I+PSAoR3JpZFVuaXQgY29uc3QgJm90aGVy
KSBjb25zdDsKICAgaW50IG9wZXJhdG9yPD0gKEdyaWRVbml0IGNvbnN0ICZvdGhlcikgY29uc3Q7
CgogICAgCiAgIHZvaWQgZ3VSZWZpbmUoY29uc3QgaW50IGxldnMgPSAxKTsKICAgdm9pZCBndVJl
ZmluZShHcmlkVW5pdCAmZ3UsIGNvbnN0IGludCBsZXZzID0gMSk7CgogICB2b2lkIGd1Q29hcnNl
bihjb25zdCBpbnQgbGV2cyA9IDEpOwogICB2b2lkIGd1Q29hcnNlbihHcmlkVW5pdCAmZ3UsIGNv
bnN0IGludCBsZXZzID0gMSk7CgogICB2b2lkIGd1RGVjb21wb3NlKEdyaWRVbml0KiomIGd1LCBp
bnQmIGNudCwgY29uc3QgaW50IGxldnMgPSAxKSBjb25zdDsKICAgdm9pZCBndURlY29tcG9zZVJl
cGxpY2F0ZShHcmlkVW5pdCoqJiBndSwgaW50JiBjbnQsIGNvbnN0IGludCBtaW5leHQsIAoJCQkJ
CWNvbnN0IGludCBsZXZzID0gMSkgY29uc3Q7CiAgIAogICAgCiAgICAKCiAgIHZvaWQgZ3VHZXRM
ZXZlbHMoR3JpZFVuaXQqKiAmZ3UpIGNvbnN0OwogICB2b2lkIGd1R2V0TGV2ZWxzKEdyaWRVbml0
ICZndSwgY29uc3QgaW50IGxldikgY29uc3Q7CgogICAgCiAgIGlubGluZSBzdGF0aWMgdm9pZCBn
dVNldERlY29tcG9zZShHcmlkVW5pdCYgZ3UsCgkJCSAgICAgIGNvbnN0IGludCBsZXYsCgkJCSAg
ICAgIGNvbnN0IGludCBjbnQpCiAgICAgeyBndS5iYXNlbGV2Kz1sZXY7IGd1LmV4dGVudC09bGV2
OyAKICAgICAgIGd1LmJhc2VpbmRleC5TZXRJbmRleChjbnQsZ3UuYmFzZWxldixsZXYpOyBndS5n
dVNldEJCb3goKTsgfQoKICAgaW5saW5lIHN0YXRpYyB2b2lkIGd1U2V0TGV2ZWxzKEdyaWRVbml0
JiBndSwKCQkJICAgY29uc3QgaW50IGxldikKICAgICB7IGd1LmV4dGVudC09KGd1LmZpbmVsZXYt
bGV2KTsKICAgICAgIGd1LmNyc2xldj1sZXY7IGd1LmZpbmVsZXY9bGV2OyAKICAgICAgIGd1LmJh
c2VsZXYgPSBndS5maW5lbGV2LWd1LmV4dGVudDsgZ3UuZ3VTZXRCQm94KCk7IH0KCiAgIGlubGlu
ZSBzdGF0aWMgdm9pZCBndVNldFJlZmluZUxldmVsKEdyaWRVbml0JiBndSwKCQkJCWNvbnN0IGlu
dCBsZXZzPTEpCiAgICAgeyBndS5jcnNsZXY9Z3UuZmluZWxlditndS5sZXZzdGVwOyBndS5maW5l
bGV2Kz0obGV2cypndS5sZXZzdGVwKTsKICAgICAgIGd1LmV4dGVudCs9bGV2cypndS5sZXZzdGVw
OyBndS5iYXNlbGV2PWd1LmZpbmVsZXYtZ3UuZXh0ZW50OyAKICAgICAgIGd1Lmd1U2V0QkJveCgp
OyB9CgogICBpbmxpbmUgc3RhdGljIHZvaWQgZ3VTZXRDb2Fyc2VuKEdyaWRVbml0JiBndSwKCQkJ
ICAgIGNvbnN0IGludCBsZXZzPTEpCiAgICAgeyBndS5maW5lbGV2LT0obGV2cypndS5sZXZzdGVw
KTsgZ3UuZXh0ZW50LT1sZXZzKmd1LmxldnN0ZXA7IAogICAgICAgZ3UuYmFzZWxldj1ndS5maW5l
bGV2LWd1LmV4dGVudDsgZ3UuZ3VTZXRCQm94KCk7IH0KCiAgIGlubGluZSBzdGF0aWMgdm9pZCBn
dVNldFJlZmluZShHcmlkVW5pdCYgZ3UsCgkJCSAgIGNvbnN0IGludCBsZXZzPTEpCiAgICAgeyBn
dS5maW5lbGV2Kz0obGV2cypndS5sZXZzdGVwKTsgZ3UuZXh0ZW50Kz1sZXZzKmd1LmxldnN0ZXA7
IAogICAgICAgZ3UuYmFzZWxldj1ndS5maW5lbGV2LWd1LmV4dGVudDsgZ3UuZ3VTZXRCQm94KCk7
IH0KICB9OyAgIAoKb3N0cmVhbSYgIG9wZXJhdG9yIDw8IChvc3RyZWFtJiBvcywgY29uc3QgR3Jp
ZFVuaXQmIGd1KTsKb2ZzdHJlYW0mIG9wZXJhdG9yIDw8IChvZnN0cmVhbSYgb2ZzLCBjb25zdCBH
cmlkVW5pdCYgZ3UpOwppZnN0cmVhbSYgb3BlcmF0b3IgPj4gKGlmc3RyZWFtJiBpZnMsIEdyaWRV
bml0JiBndSk7CgoKIyAyMCAiQUNFRGlzdHJpYnV0aW9uLmgiIDIKCiMgMSAiR3JpZFVuaXRMaXN0
LmgiIDEKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKY2xhc3Mg
R3JpZFVuaXRMaXN0IDogcHVibGljIEJ1Y2tldDxHcmlkVW5pdD4sIHB1YmxpYyBPYmplY3RDb3Vu
dGVyCiAgewogICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgR3Jp
ZFVuaXRMaXN0Jik7CiAgIGZyaWVuZCBvZnN0cmVhbSYgb3BlcmF0b3I8PChvZnN0cmVhbSYsIGNv
bnN0IEdyaWRVbml0TGlzdCYpOwogICBmcmllbmQgaWZzdHJlYW0mIG9wZXJhdG9yPj4oaWZzdHJl
YW0mLCBHcmlkVW5pdExpc3QmKTsKCiAgIGludCBudW07Cgpwcml2YXRlOgogICBzdGF0aWMgaW5s
aW5lIHZvaWQgY29weXR5cGVkYXRhKEdyaWRVbml0ICp0bywgR3JpZFVuaXQgY29uc3QgKmZyb20p
Cgl7ICp0byA9ICpmcm9tOyB9CgogICAgCiAgICAKICAgIAogICBpbmxpbmUgdm9pZCBzZXRzdGF0
cyh2b2lkKQogICAgIHsKICAgICAgbnVtID0gMDsKICAgICAgZm9yIChyZWdpc3RlciBHcmlkVW5p
dCAqZz1maXJzdCgpO2c7Zz1uZXh0KCkpIG51bSsrOwogICAgIH0KCnB1YmxpYzoKICAgIAogICAg
CiAgICAKICAgR3JpZFVuaXRMaXN0KCkKICAgICA6IEJ1Y2tldDxHcmlkVW5pdD4oKDI1NikgKSwg
bnVtKDApIHt9CgogICAgCiAgICAKICAgR3JpZFVuaXRMaXN0KGNvbnN0IHVuc2lnbmVkIG1heG51
bSwgY29uc3QgaW50IGR1bWFyZykKICAgICA6IEJ1Y2tldDxHcmlkVW5pdD4obWF4bnVtKSwgbnVt
KDApIHt9CgogICBHcmlkVW5pdExpc3QoY29uc3Qgdm9pZCogcGFja2FnZSwgY29uc3QgaW50IGR1
bWFyZykKICAgICA6IEJ1Y2tldDxHcmlkVW5pdD4ocGFja2FnZSksIG51bSgwKSB7IHNldHN0YXRz
KCk7IH0KCiAgIEdyaWRVbml0TGlzdCh2b2lkICpwYWNrYWdlLCBjb25zdCBpbnQgZHVtYXJnKQog
ICAgIDogQnVja2V0PEdyaWRVbml0PihwYWNrYWdlKSwgbnVtKDApIHsgc2V0c3RhdHMoKTsgfQoK
ICAgR3JpZFVuaXRMaXN0KGNvbnN0IHZvaWQqIHBhY2thZ2UsIGNvbnN0IHVuc2lnbmVkIHNpemUs
IAoJCWNvbnN0IGludCBuKQogICAgIDogQnVja2V0PEdyaWRVbml0PihwYWNrYWdlLCBzaXplLCBu
KSwgbnVtKDApIAogICAgIHsgc2V0c3RhdHMoKTsgfQoKICAgR3JpZFVuaXRMaXN0KGNvbnN0IEdy
aWRVbml0TGlzdCYgb3RoZXIpCiAgICAgOiBCdWNrZXQ8R3JpZFVuaXQ+KG90aGVyKSwgbnVtKG90
aGVyLm51bSkge30KCnByaXZhdGU6CiAgIEdyaWRVbml0TGlzdChHcmlkVW5pdExpc3QqKiYgbGV2
YXJyYXkpOwoKcHVibGljOgogICAgCiAgICAKICAgIAogICBHcmlkVW5pdExpc3QmIG9wZXJhdG9y
ID0gKGNvbnN0IEdyaWRVbml0TGlzdCYpOwoKICAgIAogICAgCiAgICAKICAgaW5saW5lIH5Hcmlk
VW5pdExpc3Qodm9pZCkge30KCiAgICAKICAgIAogICAgCiAgIGlubGluZSBHcmlkVW5pdExpc3Qg
KmFsaWFzKCkKCXsgcmV0dXJuKChHcmlkVW5pdExpc3QgKikgT2JqZWN0Q291bnRlcjo6YWxpYXMo
KSk7IH0KCiAgICAKICAgIAogICAgCnB1YmxpYzoKICAgdm9pZCBvcGVyYXRvciAtPSAoR3JpZFVu
aXRMaXN0IGNvbnN0ICZyaHMpOyAgCnByaXZhdGU6CiAgIHZvaWQgb3BlcmF0b3IgKj0gKEdyaWRV
bml0TGlzdCBjb25zdCAmcmhzKTsgIAogICBHcmlkVW5pdExpc3QgKm9wZXJhdG9yIC0gKEdyaWRV
bml0TGlzdCBjb25zdCAmcmhzKTsgIAogICBHcmlkVW5pdExpc3QgKm9wZXJhdG9yICogKEdyaWRV
bml0TGlzdCBjb25zdCAmcmhzKTsgIAogICBHcmlkVW5pdExpc3QgKm9wZXJhdG9yICsgKEdyaWRV
bml0TGlzdCBjb25zdCAmcmhzKTsgIAoKICAgIAogICAgCiAgICAKcHVibGljOiAKICAgdm9pZCBv
cGVyYXRvciAqPSAoQkJveCBjb25zdCAmcmhzKTsgIApwcml2YXRlOiAKICAgR3JpZFVuaXRMaXN0
ICpvcGVyYXRvciAqIChCQm94IGNvbnN0ICZyaHMpOyAgCiAgIEdyaWRVbml0TGlzdCAqb3BlcmF0
b3IgKiAoQkJveExpc3QgY29uc3QgJnJocyk7ICAKIAogICAgCiAgICAKICAgIApwdWJsaWM6CiAg
IHZvaWQgaW50ZXJzZWN0KEJCb3ggY29uc3QgJnJocywgY29uc3QgaW50IGxldiwgR3JpZFVuaXRM
aXN0ICZndWwsIAogICAgICAgICAgICAgICAgICBjb25zdCBpbnQgb2xhcCwgY29uc3QgaW50IGV4
dGdoPTApOwogICB2b2lkIGludGVyc2VjdChCQm94TGlzdCBjb25zdCAmcmhzLCBjb25zdCBpbnQg
bGV2LCBHcmlkVW5pdExpc3QgJmd1bCwgCiAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBvbGFw
LCBjb25zdCBpbnQgZXh0Z2g9MCk7CiAgIHZvaWQgaW50ZXJzZWN0KEJCb3ggY29uc3QgJnJocywg
Y29uc3QgaW50IGxldiwgR3JpZFVuaXRMaXN0ICZndWwsIAogICAgICAgICAgICAgICAgICBjb25z
dCBzaG9ydCogb2xhcCwgY29uc3QgaW50IGV4dGdoPTApOwogICB2b2lkIGludGVyc2VjdChCQm94
TGlzdCBjb25zdCAmcmhzLCBjb25zdCBpbnQgbGV2LCBHcmlkVW5pdExpc3QgJmd1bCwKICAgICAg
ICAgICAgICAgICAgY29uc3Qgc2hvcnQqIG9sYXAsIGNvbnN0IGludCBleHRnaD0wKTsKCiAgIHZv
aWQgaW50ZXJzZWN0X2V4YWN0KEJCb3ggY29uc3QgJnJocywgY29uc3QgaW50IGxldiwgR3JpZFVu
aXRMaXN0ICZndWwsIAoJCQljb25zdCBpbnQgb2xhcCwgY29uc3QgaW50IGV4dGdoPTApOwogICB2
b2lkIGludGVyc2VjdF9leGFjdChCQm94IGNvbnN0ICZyaHMsIGNvbnN0IGludCBsZXYsIEdyaWRV
bml0TGlzdCAmZ3VsLCAKCQkJY29uc3Qgc2hvcnQqIG9sYXAsIGNvbnN0IGludCBleHRnaD0wKTsK
CiAgICAKICAgIAogICAgCnB1YmxpYzoKICAgaW5saW5lIGludCBpc2VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4obnVtID09IDApOyB9CiAgIGlubGluZSBpbnQgbnVtYmVyKCkgY29uc3QgeyByZXR1cm4o
bnVtKTsgfQoKICAgdW5zaWduZWQgbG9uZyBsb2FkKGNvbnN0IGludCBvbGFwKTsKICAgdW5zaWdu
ZWQgbG9uZyBsb2FkKGNvbnN0IGludCBsZXYsIGNvbnN0IGludCBvbGFwKTsKICAgdW5zaWduZWQg
bG9uZyBudW1lbGVtcyhjb25zdCBpbnQgb2xhcCk7CiAgIHVuc2lnbmVkIGxvbmcgbnVtZWxlbXMo
Y29uc3QgaW50IGxldiwgY29uc3QgaW50IG9sYXApOwogIAogICB1bnNpZ25lZCBsb25nIGxvYWQo
Y29uc3Qgc2hvcnQqIG9sYXApOwogICB1bnNpZ25lZCBsb25nIGxvYWQoY29uc3QgaW50IGxldiwg
Y29uc3Qgc2hvcnQqIG9sYXApOwogICB1bnNpZ25lZCBsb25nIG51bWVsZW1zKGNvbnN0IHNob3J0
KiBvbGFwKTsKICAgdW5zaWduZWQgbG9uZyBudW1lbGVtcyhjb25zdCBpbnQgbGV2LCBjb25zdCBz
aG9ydCogb2xhcCk7CgogICBpbnQgbGV2ZWxzKHZvaWQpOwogICBpbnQgZmluZXN0KHZvaWQpOwog
ICBpbnQgc21hbGxlc3QoY29uc3QgaW50IGxldmVsKTsKICAgaW50IGhpZ2hlc3RiYXNlbGV2ZWwo
KTsKICAgZE1hcEluZGV4IGxvd2VzdCgpOwogICBkTWFwSW5kZXggbG93ZXN0KGNvbnN0IGludCBs
ZXZlbCwgY29uc3QgaW50IG93bmVyLCBjb25zdCBpbnQgaW5kZXgpOwogICBpbnQgbWF4aW5kZXgo
dm9pZCk7CgogICAgCiAgICAKICAgIApwcml2YXRlOgogICB2b2lkIHNldGluZGV4KHZvaWQpOwog
ICB2b2lkIHNldGluZGV4KGNvbnN0IGludCBpZHgpOwogICB2b2lkIHNldGluZGV4KGNvbnN0IEdy
aWRVbml0TGlzdCYgY2d1bCwgY29uc3QgaW50IGlkeCk7CiAgIHZvaWQgc2V0YmJveCgpOwpwdWJs
aWM6CiAgIHZvaWQgc2V0b3duZXIoY29uc3QgaW50IHApOwogICB2b2lkIHNldG93bmVyKGNvbnN0
IEdyaWRVbml0TGlzdCYgY2d1bCwgY29uc3QgaW50IHApOwogICAgCiAgICAKICAgIAogICBpbmxp
bmUgdm9pZCBlbXB0eSh2b2lkKQogICAgIHsgQnVja2V0PEdyaWRVbml0Pjo6ZW1wdHkoKTsgbnVt
ID0gMDsgfQoKICAgIAogICAgCiAgICAKICAgaW5saW5lIEdyaWRVbml0ICphZGQoKSAKICAgICB7
IG51bSsrOyByZXR1cm4gKEJ1Y2tldDxHcmlkVW5pdD46OmFkZCgpKTsgfQogICBpbmxpbmUgR3Jp
ZFVuaXQgKmFkZChHcmlkVW5pdCBjb25zdCAmZ3UpIAogICAgIHsgbnVtKys7IHJldHVybiAoQnVj
a2V0PEdyaWRVbml0Pjo6YWRkKGd1KSk7IH0KICAgaW5saW5lIEdyaWRVbml0ICppbnNlcnQoKQog
ICAgIHsgbnVtKys7IHJldHVybiAoQnVja2V0PEdyaWRVbml0Pjo6aW5zZXJ0KCkpOyB9CiAgIGlu
bGluZSBHcmlkVW5pdCAqaW5zZXJ0KEdyaWRVbml0IGNvbnN0ICZndSkKICAgICB7IG51bSsrOyBy
ZXR1cm4gKEJ1Y2tldDxHcmlkVW5pdD46Omluc2VydChndSkpOyB9CiAgIGlubGluZSB2b2lkIHJl
bW92ZSh2b2lkKQogICAgIHsgaWYgKGN1cnJlbnQoKSkgeyBudW0tLTsgQnVja2V0PEdyaWRVbml0
Pjo6cmVtb3ZlKCk7IH19ICAKICAgICAgICAgICAgIAogICAgCiAgICAKICAgIAogICB2b2lkIHNw
bGl0KEdyaWRVbml0TGlzdCAmZ3VsKTsKCiAgICAKICAgIAogICAgCiAgIHZvaWQgbGV2ZWxhcnJh
eShHcmlkVW5pdExpc3QgKiomIGxldmFycmF5LCBjb25zdCBpbnQgbGV2ZWxzKTsKCiAgICAKICAg
IAogICAgCiAgIHZvaWQgbGV2ZWxsaXN0KEdyaWRVbml0TGlzdCAmZ3VsLCAKCQkgIGNvbnN0IGlu
dCBsZXYpOwogICB2b2lkIGxldmVsbGlzdChHcmlkVW5pdExpc3QgJmd1bCwgCgkJICBjb25zdCBp
bnQgbWlubGV2LCAKCQkgIGNvbnN0IGludCBtYXhsZXYpOwogICB2b2lkIGxldmVsbGlzdChHcmlk
VW5pdExpc3QgJmd1bCk7CgogICAgCiAgICAKICAgIApwdWJsaWM6CiAgIHZvaWQgYmJveGxpc3Rm
aW5lc3QoQkJveExpc3QgJmJibCwgY29uc3QgaW50IGxldik7CiAgIHZvaWQgYmJveGxpc3QoQkJv
eExpc3QgJmJibCwgY29uc3QgaW50IGxldiwgY29uc3QgaW50IG9sYXApOwogICAgICAgICAgICAg
ICAgICAKICAgdm9pZCBiYm94bGlzdChCQm94TGlzdCAmYmJsLCBjb25zdCBpbnQgbGV2LCBjb25z
dCBpbnQgb2xhcCwgCiAgICAgICAgICAgICAgICAgY29uc3QgaW50IGxldmlkKTsgIAogICB2b2lk
IGJib3hsaXN0KEJCb3hMaXN0ICZiYmwsIGNvbnN0IGludCBsZXYsIGNvbnN0IHNob3J0KiBvbGFw
LAogICAgICAgICAgICAgICAgIGNvbnN0IGludCBleHRnaCk7CiAgIHZvaWQgYmJveGxpc3QoQkJv
eExpc3QgJmJibCwgY29uc3QgaW50IGxldiwgY29uc3Qgc2hvcnQqIG9sYXAsIAogICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBsZXZpZCwgY29uc3QgaW50IGV4dGdoKTsKICAgIAogICAgCiAgICAK
cHJpdmF0ZToKICAgR3JpZFVuaXRMaXN0ICpyZWZpbmVsaXN0KGNvbnN0IGludCBhdGxldiwgY29u
c3QgaW50IGxldnM9MSk7CgogICAgCiAgICAKICAgIApwcml2YXRlOgogICBHcmlkVW5pdExpc3Qg
KnJlZmluZWxpc3QoQkJveExpc3QgY29uc3QgJmJibGlzdCwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBpbnQgYXRsZXYsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgaW50IG1pbncpOwogICAKcHVibGljOgogICB2b2lkIHJlZmluZXRoaXNsaXN0KGNvbnN0IEJC
b3hMaXN0JiBiYmxpc3QsIAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBhdGxldiwg
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IG1pbncsCgkJICAgICAgIGNvbnN0IGlu
dCBvcnBoKTsKCiAgICAKICAgIAogICAgCnByaXZhdGU6CiAgIGlubGluZSB2b2lkIHJlZmluZShj
b25zdCBpbnQgbGV2ID0gMSkKCXsgKGN1cnJlbnQoKSktPmd1UmVmaW5lKGxldik7IH0KICAgaW5s
aW5lIHZvaWQgY29hcnNlbihjb25zdCBpbnQgbGV2ID0gMSkKCXsgKGN1cnJlbnQoKSktPmd1Q29h
cnNlbihsZXYpOyB9CgpwdWJsaWM6CiAgIHZvaWQgZGVjb21wb3NlKGNvbnN0IGludCBsZXYgPSAx
KTsKCiAgICAKICAgIAogICAgCiAgICAKICAgIAogICAgCiAgfTsKCm9zdHJlYW0mICBvcGVyYXRv
ciA8PCAob3N0cmVhbSYgb3MsIGNvbnN0IEdyaWRVbml0TGlzdCYgZ3VsKTsKb2ZzdHJlYW0mIG9w
ZXJhdG9yIDw8IChvZnN0cmVhbSYgb2ZzLCBjb25zdCBHcmlkVW5pdExpc3QmIGd1bCk7Cmlmc3Ry
ZWFtJiBvcGVyYXRvciA+PiAoaWZzdHJlYW0mIGlmcywgR3JpZFVuaXRMaXN0JiBndWwpOwoKCiMg
MjEgIkFDRURpc3RyaWJ1dGlvbi5oIiAyCgoKCgoKCgoKCgoKIAogCiAKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nICgqV29ya0Z1bmMpIChjb25zdCB1bnNpZ25lZCBsb25nICpudW1lbGVtcywgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpsZXZlbCk7CiAKCmNsYXNz
IEFDRVNwYW4gCnsKICBkTWFwSW5kZXggbWluOwogIGRNYXBJbmRleCBtYXg7CiAgCnB1YmxpYzog
ICAKICBpbmxpbmUgQUNFU3BhbigpIHt9CiAgCiAgaW5saW5lIEFDRVNwYW4oZE1hcEluZGV4IGNv
bnN0ICZsbWluLCBkTWFwSW5kZXggY29uc3QgJmxtYXgpCiAgICA6IG1pbihsbWluKSwgbWF4KGxt
YXgpIHsgfQogIAogIGlubGluZSBBQ0VTcGFuKGNvbnN0IEFDRVNwYW4mIG90aGVyKQogICAgOiBt
aW4ob3RoZXIubWluKSwgbWF4KG90aGVyLm1heCkgeyB9CiAgCiAgaW5saW5lIGludCBjb250YWlu
cyhkTWFwSW5kZXggY29uc3QgaW5kZXgpIGNvbnN0IAogICAgeyByZXR1cm4gKGluZGV4ID49IG1p
biAmJiBpbmRleCA8PSBtYXgpOyB9CiAgCiAgaW5saW5lIGNvbnN0IEFDRVNwYW4mIG9wZXJhdG9y
ID0gKGNvbnN0IEFDRVNwYW4mIG90aGVyKQogICAgeyBtaW4gPSBvdGhlci5taW47IG1heCA9IG90
aGVyLm1heDsgcmV0dXJuICp0aGlzOyB9Cn07CgoKCgoKY2xhc3MgQUNFRGlzdHJpYnV0aW9uCnsK
ICBmcmllbmQgY2xhc3MgR3JpZEhpZXJhcmNoeTsKICBmcmllbmQgaWZzdHJlYW0mIG9wZXJhdG9y
ID4+IChpZnN0cmVhbSYgaWZzLCBHcmlkSGllcmFyY2h5Jik7CiAgCiAgaW50IHR5cGU7IAkgICAg
ICAgICAgICAgICAgCiAgCiAgQkJveCB3Ym94OyAgICAgICAgICAgICAgICAgICAKCiAgIAogIAog
IEJCb3gqIGJveGVzOyAgICAgICAgICAgICAgICAgCiAgCiAgV29ya0Z1bmMgd2Z1bmM7ICAgICAg
ICAgICAgICAKICAKICBBQ0VEaXN0cmlidXRpb24oY29uc3QgaW50IGRpc3R0eXBlLCBCQm94TGlz
dCYgYmJsKTsKICAKcHVibGljOgogIGlubGluZSBBQ0VEaXN0cmlidXRpb24oY29uc3QgaW50IGRp
c3R0eXBlKSAKICAgIDogdHlwZShkaXN0dHlwZSkgLCBib3hlcygwKSwgd2Z1bmMoMCkgeyB9CiAg
CiAgaW5saW5lIH5BQ0VEaXN0cmlidXRpb24oKSB7IGlmIChib3hlcykgZGVsZXRlIFtdIGJveGVz
OyB9CiAgIAogIHZvaWQgaW5pdF9wYXJ0aXRpb25lcihjb25zdCBpbnQgbnAsCgkJCWNvbnN0IGlu
dCBtZSwKCQkJY29uc3QgaW50IHJhbmssCgkJCWNvbnN0IEJCb3gmIHdob2xlYmJveCk7CiAgCiAg
dm9pZCBwYXJ0aXRpb24oR3JpZFVuaXRMaXN0KiYgZ2xvYmFsbGlzdCwgCgkJIEdyaWRVbml0TGlz
dComIGxvY2FsbGlzdCwgCgkJIGNvbnN0IGludCBucCwgCgkJIGNvbnN0IGludCBtZSwgCgkJIGNv
bnN0IGludCBtaW53LCAKCQkgY29uc3QgaW50IG1heHcsIAoJCSBjb25zdCBpbnQgbWlud2ssIAoJ
CSBjb25zdCBzaG9ydCogb2xhcCwKCQkgY29uc3QgaW50IG9ycGhhbl9mbGFnKTsKICAKICB2b2lk
IHBhcnRpdGlvbihCQm94TGlzdCYgaW5iYmwsCgkJIEJCb3hMaXN0KiogYmJveGFycmF5LAoJCSBj
b25zdCBpbnQgbGV2ZWxzLAoJCSBjb25zdCBpbnQgY2xldmVscywKCQkgY29uc3QgaW50IHJlZmxl
diwKCQkgY29uc3QgaW50IHJhbmssCgkJIGNvbnN0IGludCBucCwgCgkJIGNvbnN0IGludCBtZSwK
CQkgY29uc3QgaW50IG1pbncsIAoJCSBjb25zdCBpbnQgbWF4dywgCgkJIGNvbnN0IGludCBtaW53
aywgCgkJIGNvbnN0IHNob3J0KiBvbGFwLAoJCSBjb25zdCBpbnQgb3JwaGFuX2ZsYWcpOwogIAog
IHZvaWQgcGFydGl0aW9uKGNvbnN0IEJCb3gmIHdiYm94LCAKCQkgQkJveCYgbXliYm94LCAKCQkg
Y29uc3QgaW50IG5wLCAKCQkgY29uc3QgaW50IG1lLAoJCSBjb25zdCBpbnQgb3JwaGFuX2ZsYWcp
OwogIApwcml2YXRlOgogIHZvaWQgcGFydGl0aW9uKEdyaWRCb3hMaXN0KiYgZ2xvYmFsbGlzdCwg
CgkJIEdyaWRCb3hMaXN0KiYgbG9jYWxsaXN0LCAKCQkgY29uc3QgaW50IG5wLCAKCQkgY29uc3Qg
aW50IG1lLCAKCQkgY29uc3QgaW50IG1pbncsIAoJCSBjb25zdCBpbnQgbWF4dywgCgkJIGNvbnN0
IGludCBtaW53aywgCgkJIGNvbnN0IHNob3J0KiBvbGFwLAoJCSBjb25zdCBpbnQgb3JwaGFuX2Zs
YWcpOwogIApwdWJsaWM6CiAgIAogICAKICAgCiAgaW5saW5lIGludCBkaXN0KCkgY29uc3QgCiAg
ICB7IAogICAgICBpZiAoKHR5cGUvICgxMCkgKSogKDEwKSAgPT0gCgkgICgxMCkgKSAKCXJldHVy
biAoMTApIDsKICAgICAgZWxzZQoJcmV0dXJuIHR5cGU7IAogICAgfQogIAogIGlubGluZSB2b2lk
IHNldF9kaXN0KGNvbnN0IGludCBkaXN0dHlwZSkKICAgIHsgdHlwZSA9IGRpc3R0eXBlOyB9CiAg
CiAgdm9pZCBzZXRfZGlzdChjb25zdCBpbnQgZGlzdHR5cGUsIEJCb3hMaXN0JiBiYmwpOwogIAog
IGlubGluZSB2b2lkIHNldF93b3JrZnVuYyggV29ya0Z1bmMgd29ya2Z1bmMgKQogICAgeyB3ZnVu
YyA9IChXb3JrRnVuYykgd29ya2Z1bmM7IH0KICAKICB1bnNpZ25lZCBsb25nIGdldF9sb2FkKCBH
cmlkVW5pdExpc3QgJmxpc3QsICBjb25zdCBzaG9ydCogb2xhcCApOwogIApwcml2YXRlOgogIHZv
aWQgcGFydGl0aW9uVmFtcGlyZShCQm94TGlzdCYgaW5iYmwsCgkJCUJCb3hMaXN0KiogYmJveGFy
cmF5LAoJCQljb25zdCBpbnQgbGV2ZWxzLAoJCQljb25zdCBpbnQgY2xldmVscywKCQkJY29uc3Qg
aW50IHJlZmxldiwKCQkJY29uc3QgaW50IHJhbmssCgkJCWNvbnN0IGludCBucCwgCgkJCWNvbnN0
IGludCBtZSwKCQkJY29uc3QgaW50IG1pbncsIAoJCQljb25zdCBpbnQgbWF4dywgCgkJCWNvbnN0
IGludCBtaW53aywgCgkJCWNvbnN0IHNob3J0KiBvbGFwKTsKICAKICB2b2lkIHBhcnRpdGlvblBh
ck1ldGlzKEJCb3hMaXN0JiBpbmJibCwKCQkJIEJCb3hMaXN0KiogYmJveGFycmF5LAoJCQkgY29u
c3QgaW50IGxldmVscywKCQkJIGNvbnN0IGludCBjbGV2ZWxzLAoJCQkgY29uc3QgaW50IHJlZmxl
diwKCQkJIGNvbnN0IGludCByYW5rLAoJCQkgY29uc3QgaW50IG5wLCAKCQkJIGNvbnN0IGludCBt
ZSwKCQkJIGNvbnN0IGludCBtaW53LCAKCQkJIGNvbnN0IGludCBtYXh3LCAKCQkJIGNvbnN0IGlu
dCBtaW53aywgCgkJCSBjb25zdCBzaG9ydCogb2xhcCk7CiAgCiAgdm9pZCBwYXJ0aXRpb25Db21w
b3NpdGUoR3JpZFVuaXRMaXN0KiYgZ2xvYmFsbGlzdCwgCgkJCSAgR3JpZFVuaXRMaXN0KiYgbG9j
YWxsaXN0LCAKCQkJICBjb25zdCBpbnQgbnAsIAoJCQkgIGNvbnN0IGludCBtZSwgCgkJCSAgY29u
c3QgaW50IG1pbncsCgkJCSAgY29uc3QgaW50IG1heHcsIAoJCQkgIGNvbnN0IGludCBtaW53aywg
CgkJCSAgY29uc3Qgc2hvcnQqIG9sYXAsCgkJCSAgY29uc3QgaW50IG9ycGhhbik7CiAgCiAgdm9p
ZCBwYXJ0aXRpb25CbG9ja09uZShjb25zdCBpbnQgYXhpcywKCQkJIEdyaWRVbml0TGlzdComIGds
b2JhbGxpc3QsIAoJCQkgR3JpZFVuaXRMaXN0KiYgbG9jYWxsaXN0LCAKCQkJIGNvbnN0IGludCBu
cCwgCgkJCSBjb25zdCBpbnQgbWUsIAoJCQkgY29uc3QgaW50IG1pbncsIAoJCQkgY29uc3QgaW50
IG1heHcsIAoJCQkgY29uc3QgaW50IG1pbndrLCAKCQkJIGNvbnN0IHNob3J0KiBvbGFwKTsKICAK
ICB2b2lkIHBhcnRpdGlvbkJsb2NrVHdvKGNvbnN0IGludCBheGlzMSwgCgkJCSBjb25zdCBpbnQg
YXhpczIsCgkJCSBHcmlkVW5pdExpc3QqJiBnbG9iYWxsaXN0LCAKCQkJIEdyaWRVbml0TGlzdCom
IGxvY2FsbGlzdCwgCgkJCSBjb25zdCBpbnQgbnAsIAoJCQkgY29uc3QgaW50IG1lLCAKCQkJIGNv
bnN0IGludCBtaW53LCAKCQkJIGNvbnN0IGludCBtYXh3LCAKCQkJIGNvbnN0IGludCBtaW53aywg
CgkJCSBjb25zdCBzaG9ydCogb2xhcCk7CiAgCiAgdm9pZCBwYXJ0aXRpb25CbG9ja0FsbChHcmlk
VW5pdExpc3QqJiBnbG9iYWxsaXN0LCAKCQkJIEdyaWRVbml0TGlzdComIGxvY2FsbGlzdCwgCgkJ
CSBjb25zdCBpbnQgbnAsIAoJCQkgY29uc3QgaW50IG1lLCAKCQkJIGNvbnN0IGludCBtaW53LAoJ
CQkgY29uc3QgaW50IG1heHcsIAoJCQkgY29uc3QgaW50IG1pbndrLCAKCQkJIGNvbnN0IHNob3J0
KiBvbGFwKTsKCiAgdm9pZCBwYXJ0aXRpb25Vc2VyRGVmKEdyaWRVbml0TGlzdComIGdsb2JhbGxp
c3QsIAoJCQlHcmlkVW5pdExpc3QqJiBsb2NhbGxpc3QsIAoJCQljb25zdCBpbnQgbnAsIAoJCQlj
b25zdCBpbnQgbWUsIAoJCQljb25zdCBpbnQgbWludywgCgkJCWNvbnN0IGludCBtYXh3LCAKCQkJ
Y29uc3QgaW50IG1pbndrLCAKCQkJY29uc3Qgc2hvcnQqIG9sYXApOwp9OwoKCiMgMTAgIkFDRURp
c3RyaWJ1dGlvbi5jcHAiIDIKCgogCiMgMSAiQ29tbVNlcnZlci5oIiAxCgoKCiAKCgoKCgoKCgoK
CgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMi45NS40Ly4uLy4uLy4uLy4u
L2luY2x1ZGUvZysrLTMvc3Ryc3RyZWFtLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51
eC8yLjk1LjQvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJmaWxlLmgiIDEgMwogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHZvaWQgKigqX0lPX2FsbG9j
X3R5cGUpICAoc2l6ZV90ICApICA7CnR5cGVkZWYgdm9pZCAoKl9JT19mcmVlX3R5cGUpICAodm9p
ZCopICA7CgpzdHJ1Y3QgX0lPX3N0cl9maWVsZHMKewogIF9JT19hbGxvY190eXBlIF9hbGxvY2F0
ZV9idWZmZXI7CiAgX0lPX2ZyZWVfdHlwZSBfZnJlZV9idWZmZXI7Cn07CgogCgoKCgpzdHJ1Y3Qg
X0lPX3N0cmVhbWJ1Zgp7CiAgc3RydWN0IF9JT19GSUxFIF9mOwogIGNvbnN0IHZvaWQgKl92dGFi
bGU7Cn07Cgp0eXBlZGVmIHN0cnVjdCBfSU9fc3RyZmlsZV8KewogIHN0cnVjdCBfSU9fc3RyZWFt
YnVmIF9zYmY7CiAgc3RydWN0IF9JT19zdHJfZmllbGRzIF9zOwp9IF9JT19zdHJmaWxlOwoKIAoK
CgogCgoKIyAzMyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzIuOTUuNC8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0cnN0cmVhbS5oIiAyIDMKCgpleHRlcm4gIkMrKyIgewpjbGFzcyBz
dHJzdHJlYW1idWYgOiBwdWJsaWMgc3RyZWFtYnVmCnsKICBzdHJ1Y3QgX0lPX3N0cl9maWVsZHMg
X3M7CiAgZnJpZW5kIGNsYXNzIGlzdHJzdHJlYW07CgogICAgdm9pZCBpbml0X2R5bmFtaWMoX0lP
X2FsbG9jX3R5cGUgYWxsb2MsIF9JT19mcmVlX3R5cGUgZnJlZSwKCQkgICAgICBpbnQgaW5pdGlh
bF9zaXplID0gMCk7CiAgICB2b2lkIGluaXRfc3RhdGljKGNoYXIgKnB0ciwgaW50IHNpemUsIGNo
YXIgKnBzdGFydCk7CiAgICB2b2lkIGluaXRfcmVhZG9ubHkoY29uc3QgY2hhciAqcHRyLCBpbnQg
c2l6ZSk7CiAgcHJvdGVjdGVkOgogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50ID0gKC0xKSAp
OwogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwo
aW50IGMpOwogIHB1YmxpYzoKICAgIHZpcnR1YWwgfnN0cnN0cmVhbWJ1ZigpOwogICAgc3Ryc3Ry
ZWFtYnVmKCkgeyBpbml0X2R5bmFtaWMoMCwgMCk7IH0KICAgIHN0cnN0cmVhbWJ1ZihpbnQgaW5p
dGlhbF9zaXplKSB7IGluaXRfZHluYW1pYygwLCAwLCBpbml0aWFsX3NpemUpOyB9CiAgICBzdHJz
dHJlYW1idWYodm9pZCAqKCpfX2FsbG9jKShzaXplX3QgICksIHZvaWQgKCpfX2ZyZWUpKHZvaWQq
KSkKCXsgaW5pdF9keW5hbWljKF9fYWxsb2MsIF9fZnJlZSk7IH0KICAgIHN0cnN0cmVhbWJ1Zihj
aGFyICpwdHIsIGludCBzaXplLCBjaGFyICpwc3RhcnQgPSBfX251bGwgKQoJeyBpbml0X3N0YXRp
YyhwdHIsIHNpemUsIHBzdGFydCk7IH0KICAgIHN0cnN0cmVhbWJ1Zih1bnNpZ25lZCBjaGFyICpw
dHIsIGludCBzaXplLCB1bnNpZ25lZCBjaGFyICpwc3RhcnQgPSBfX251bGwgKQoJeyBpbml0X3N0
YXRpYygoY2hhciopcHRyLCBzaXplLCAoY2hhciopcHN0YXJ0KTsgfQogICAgc3Ryc3RyZWFtYnVm
KGNvbnN0IGNoYXIgKnB0ciwgaW50IHNpemUpCgl7IGluaXRfcmVhZG9ubHkocHRyLCBzaXplKTsg
fQogICAgc3Ryc3RyZWFtYnVmKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0ciwgaW50IHNpemUpCgl7
IGluaXRfcmVhZG9ubHkoKGNvbnN0IGNoYXIqKXB0ciwgc2l6ZSk7IH0KICAgIHN0cnN0cmVhbWJ1
ZihzaWduZWQgY2hhciAqcHRyLCBpbnQgc2l6ZSwgc2lnbmVkIGNoYXIgKnBzdGFydCA9IF9fbnVs
bCApCgl7IGluaXRfc3RhdGljKChjaGFyKilwdHIsIHNpemUsIChjaGFyKilwc3RhcnQpOyB9CiAg
ICBzdHJzdHJlYW1idWYoY29uc3Qgc2lnbmVkIGNoYXIgKnB0ciwgaW50IHNpemUpCgl7IGluaXRf
cmVhZG9ubHkoKGNvbnN0IGNoYXIqKXB0ciwgc2l6ZSk7IH0KICAgICAKICAgIGludCBmcm96ZW4o
KSB7IHJldHVybiBfZmxhZ3MgJiAxICA/IDEgOiAwOyB9CiAgICB2b2lkIGZyZWV6ZShpbnQgbj0x
KQoJeyBpZiAoKCggdGhpcyApLT5fcy5fYWxsb2NhdGVfYnVmZmVyICE9IChfSU9fYWxsb2NfdHlw
ZSkwKSApCgkgICAgeyBpZiAobikgX2ZsYWdzIHw9IDEgOyBlbHNlIF9mbGFncyAmPSB+MSA7IH0g
fQogICAgX19zc2l6ZV90ICAgcGNvdW50KCk7CiAgICBjaGFyICpzdHIoKTsKICAgIHZpcnR1YWwg
c3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFtb2ZmLCBfc2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58
aW9zOjpvdXQpOwp9OwoKY2xhc3Mgc3Ryc3RyZWFtYmFzZSA6IHZpcnR1YWwgcHVibGljIGlvcyB7
CiAgcHJvdGVjdGVkOgogICAgc3Ryc3RyZWFtYnVmIF9fbXlfc2I7CiAgcHVibGljOgogICAgc3Ry
c3RyZWFtYnVmKiByZGJ1ZigpIHsgcmV0dXJuICZfX215X3NiOyB9CiAgcHJvdGVjdGVkOgogICAg
c3Ryc3RyZWFtYmFzZSgpIHsgaW5pdCAoJl9fbXlfc2IpOyB9CiAgICBzdHJzdHJlYW1iYXNlKGNo
YXIgKmNwLCBpbnQgbiwgaW50IG1vZGU9aW9zOjpvdXQpOwp9OwoKY2xhc3MgaXN0cnN0cmVhbSA6
IHB1YmxpYyBzdHJzdHJlYW1iYXNlLCBwdWJsaWMgaXN0cmVhbSB7CiAgcHVibGljOgogICAgaXN0
cnN0cmVhbShjb25zdCBjaGFyKiwgaW50PTApOwp9OwoKY2xhc3Mgb3N0cnN0cmVhbSA6IHB1Ymxp
YyBzdHJzdHJlYW1iYXNlLCBwdWJsaWMgb3N0cmVhbSB7CiAgcHVibGljOgogICAgb3N0cnN0cmVh
bSgpIHsgfQogICAgb3N0cnN0cmVhbShjaGFyICpjcCwgaW50IG4sIGludCBtb2RlPWlvczo6b3V0
KSA6c3Ryc3RyZWFtYmFzZShjcCxuLG1vZGUpe30KICAgIF9fc3NpemVfdCAgIHBjb3VudCgpIHsg
cmV0dXJuICgoc3Ryc3RyZWFtYnVmKilfc3RyYnVmKS0+cGNvdW50KCk7IH0KICAgIGNoYXIgKnN0
cigpIHsgcmV0dXJuICgoc3Ryc3RyZWFtYnVmKilfc3RyYnVmKS0+c3RyKCk7IH0KICAgIHZvaWQg
ZnJlZXplKGludCBuID0gMSkgeyAoKHN0cnN0cmVhbWJ1ZiopX3N0cmJ1ZiktPmZyZWV6ZShuKTsg
fQogICAgaW50IGZyb3plbigpIHsgcmV0dXJuICgoc3Ryc3RyZWFtYnVmKilfc3RyYnVmKS0+ZnJv
emVuKCk7IH0KfTsKCmNsYXNzIHN0cnN0cmVhbSA6IHB1YmxpYyBzdHJzdHJlYW1iYXNlLCBwdWJs
aWMgaW9zdHJlYW0gewogIHB1YmxpYzoKICBzdHJzdHJlYW0oKSB7IH0KICAgIHN0cnN0cmVhbShj
aGFyICpjcCwgaW50IG4sIGludCBtb2RlPWlvczo6b3V0KSA6c3Ryc3RyZWFtYmFzZShjcCxuLG1v
ZGUpe30KICAgIF9fc3NpemVfdCAgIHBjb3VudCgpIHsgcmV0dXJuICgoc3Ryc3RyZWFtYnVmKilf
c3RyYnVmKS0+cGNvdW50KCk7IH0KICAgIGNoYXIgKnN0cigpIHsgcmV0dXJuICgoc3Ryc3RyZWFt
YnVmKilfc3RyYnVmKS0+c3RyKCk7IH0KICAgIHZvaWQgZnJlZXplKGludCBuID0gMSkgeyAoKHN0
cnN0cmVhbWJ1ZiopX3N0cmJ1ZiktPmZyZWV6ZShuKTsgfQogICAgaW50IGZyb3plbigpIHsgcmV0
dXJuICgoc3Ryc3RyZWFtYnVmKilfc3RyYnVmKS0+ZnJvemVuKCk7IH0KfTsKfSAgCgoKIyAyMCAi
Q29tbVNlcnZlci5oIiAyCgoKCgojIDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiMgNjMgIi91c3Iv
aW5jbHVkZS9hc3NlcnQuaCIgMwoKCmV4dGVybiAiQyIgeyAKCiAKZXh0ZXJuIHZvaWQgX19hc3Nl
cnRfZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUs
CgkJCSAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAg
ICB0aHJvdyAoKSAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKIApleHRlcm4gdm9p
ZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmls
ZSwKCQkJCSAgdW5zaWduZWQgaW50IF9fbGluZSwKCQkJCSAgX19jb25zdCBjaGFyICpfX2Z1bmN0
aW9uKQogICAgIHRocm93ICgpICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKIAoK
ZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFy
ICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChfX25v
cmV0dXJuX18pKTsKCgp9IAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgojIDI0ICJDb21t
U2VydmVyLmgiIDIKCgoKICB0eXBlZGVmIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gb3N0cmVhbV93
aXRoYXNzaWduOwogIHR5cGVkZWYgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBpc3RyZWFtX3dpdGhh
c3NpZ247CgoKIAoKCgojIDU4ICJDb21tU2VydmVyLmgiCgoKCmV4dGVybiAiQyIgewoKIyAxICIv
dXNyL2luY2x1ZGUvbXBpL21waS5oIiAxIDMKIAoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKIAoK
ZXh0ZXJuICJDIiB7CgoKIAogCgoKCgoKIAoKCgoKCgoKCgp0eXBlZGVmIGludCBNUElfRGF0YXR5
cGU7CgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
IAp0eXBlZGVmIGludCBNUElfQ29tbTsKCgoKIAp0eXBlZGVmIGludCBNUElfR3JvdXA7CgoKIAp0
eXBlZGVmIGludCBNUElfT3A7CgoKCgoKCgoKCgoKCgoKIAogCgoKCgogCgoKCgoKIAoKCgoKCgoK
IAoKCgoKIAoKCgoKIAoKCiAKCgoKCgoKCgoKCiAKCgoKCgp0eXBlZGVmIHZvaWQgKE1QSV9IYW5k
bGVyX2Z1bmN0aW9uKSAoKTsKCgoKCgp0eXBlZGVmIGludCBNUElfRXJyaGFuZGxlcjsKIAoKCiAK
CgoKIAoKCgoKIAp0eXBlZGVmIHVuaW9uIE1QSVJfSEFORExFICpNUElfUmVxdWVzdDsKCiAKdHlw
ZWRlZiB2b2lkIChNUElfVXNlcl9mdW5jdGlvbikgKCB2b2lkICosIHZvaWQgKiwgaW50ICosIE1Q
SV9EYXRhdHlwZSAqICk7IAoKIAp0eXBlZGVmIGludCAoTVBJX0NvcHlfZnVuY3Rpb24pICggTVBJ
X0NvbW0sIGludCwgdm9pZCAqLCB2b2lkICosIHZvaWQgKiwgaW50ICogKTsKdHlwZWRlZiBpbnQg
KE1QSV9EZWxldGVfZnVuY3Rpb24pICggTVBJX0NvbW0sIGludCwgdm9pZCAqLCB2b2lkICogKTsK
CgoKCgogCgoKIAoKCgoKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QgTVBJUl9JbmZvICpNUElfSW5mbzsK
CgoKCiAKCgoKCgoKCiAKCgojIDEgIi91c3IvaW5jbHVkZS9tcGkvbXBpZGVmcy5oIiAxIDMKIAoK
CgogCgojIDEgIi91c3IvaW5jbHVkZS9tcGkvbXBpX2ZvcnRkZWZzLmgiIDEgMwogCgoKCnR5cGVk
ZWYgaW50IE1QSV9GaW50OwoKCgoKCgojIDcgIi91c3IvaW5jbHVkZS9tcGkvbXBpZGVmcy5oIiAy
IDMKCgoKCnR5cGVkZWYgaW50IE1QSV9BaW50OwoKIAoKCgogCgoKCnR5cGVkZWYgc3RydWN0IHsg
CiAgICBpbnQgY291bnQ7CiAgICBpbnQgTVBJX1NPVVJDRTsKICAgIGludCBNUElfVEFHOwogICAg
aW50IE1QSV9FUlJPUjsKCgoKfSBNUElfU3RhdHVzOwoKIAoKIAoKCgoKIAoKCgoKCgoKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvbXBpL21waW8uaCIgMSAzCiAKCgoKCgoKIAoKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvbXBpL21waS5oIiAxIDMKIAoKCgoKCgogCgojIDY3MSAiL3Vzci9pbmNsdWRlL21waS9t
cGkuaCIgMwoKCiMgMTMgIi91c3IvaW5jbHVkZS9tcGkvbXBpby5oIiAyIDMKCgoKZXh0ZXJuICJD
IiB7CgoKCgogCgp0eXBlZGVmIHN0cnVjdCBBRElPSV9GaWxlRCAqTVBJX0ZpbGU7CgogCnR5cGVk
ZWYgc3RydWN0IEFESU9JX1JlcXVlc3REICpNUElPX1JlcXVlc3Q7ICAKCnR5cGVkZWYgaW50IE1Q
SV9PZmZzZXQ7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKIAoKCgoKIAppbnQgTVBJX0ZpbGVfb3BlbihNUElfQ29tbSBjb21tLCBjaGFyICpm
aWxlbmFtZSwgaW50IGFtb2RlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfSW5mbyBp
bmZvLCBNUElfRmlsZSAqZmgpOwppbnQgTVBJX0ZpbGVfY2xvc2UoTVBJX0ZpbGUgKmZoKTsKaW50
IE1QSV9GaWxlX2RlbGV0ZShjaGFyICpmaWxlbmFtZSwgTVBJX0luZm8gaW5mbyk7CmludCBNUElf
RmlsZV9zZXRfc2l6ZShNUElfRmlsZSBmaCwgTVBJX09mZnNldCBzaXplKTsKaW50IE1QSV9GaWxl
X3ByZWFsbG9jYXRlKE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IHNpemUpOwppbnQgTVBJX0ZpbGVf
Z2V0X3NpemUoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgKnNpemUpOwppbnQgTVBJX0ZpbGVfZ2V0
X2dyb3VwKE1QSV9GaWxlIGZoLCBNUElfR3JvdXAgKmdyb3VwKTsKaW50IE1QSV9GaWxlX2dldF9h
bW9kZShNUElfRmlsZSBmaCwgaW50ICphbW9kZSk7CmludCBNUElfRmlsZV9zZXRfaW5mbyhNUElf
RmlsZSBmaCwgTVBJX0luZm8gaW5mbyk7CmludCBNUElfRmlsZV9nZXRfaW5mbyhNUElfRmlsZSBm
aCwgTVBJX0luZm8gKmluZm9fdXNlZCk7CgogCmludCBNUElfRmlsZV9zZXRfdmlldyhNUElfRmls
ZSBmaCwgTVBJX09mZnNldCBkaXNwLCBNUElfRGF0YXR5cGUgZXR5cGUsCgkgICAgICAgICBNUElf
RGF0YXR5cGUgZmlsZXR5cGUsIGNoYXIgKmRhdGFyZXAsIE1QSV9JbmZvIGluZm8pOwppbnQgTVBJ
X0ZpbGVfZ2V0X3ZpZXcoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgKmRpc3AsIAogICAgICAgICAg
ICAgICAgIE1QSV9EYXRhdHlwZSAqZXR5cGUsIE1QSV9EYXRhdHlwZSAqZmlsZXR5cGUsIGNoYXIg
KmRhdGFyZXApOwoKIAppbnQgTVBJX0ZpbGVfcmVhZF9hdChNUElfRmlsZSBmaCwgTVBJX09mZnNl
dCBvZmZzZXQsIHZvaWQgKmJ1ZiwKCSAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0
eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOwppbnQgTVBJX0ZpbGVfcmVhZF9hdF9hbGwoTVBJX0Zp
bGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCgkgICAgICBpbnQgY291bnQsIE1Q
SV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IE1QSV9GaWxlX3dy
aXRlX2F0KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAoJICAgICAg
aW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Cmlu
dCBNUElfRmlsZV93cml0ZV9hdF9hbGwoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2
b2lkICpidWYsCgkgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0
YXR1cyAqc3RhdHVzKTsKCiAKCiAKCmludCBNUElfRmlsZV9pcmVhZF9hdChNUElfRmlsZSBmaCwg
TVBJX09mZnNldCBvZmZzZXQsIHZvaWQgKmJ1ZiwKCSAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0
eXBlIGRhdGF0eXBlLCBNUElPX1JlcXVlc3QgKnJlcXVlc3QpOwppbnQgTVBJX0ZpbGVfaXdyaXRl
X2F0KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAoJICAgICAgaW50
IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSU9fUmVxdWVzdCAqcmVxdWVzdCk7Cgog
CmludCBNUElfRmlsZV9yZWFkKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgTVBJ
X0RhdGF0eXBlCgkgICAgIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOyAKaW50IE1QSV9G
aWxlX3JlYWRfYWxsKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0
eXBlCgkgICAgIGRhdGF0eXBlLCBNUElfU3RhdHVzICpzdGF0dXMpOyAKaW50IE1QSV9GaWxlX3dy
aXRlKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlCgkgICAg
ICBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IE1QSV9GaWxlX3dyaXRlX2FsbChN
UElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZQoJICAgICAgZGF0
YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CgogCgogCgppbnQgTVBJX0ZpbGVfaXJlYWQoTVBJ
X0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUKCSAgICAgZGF0YXR5
cGUsIE1QSU9fUmVxdWVzdCAqcmVxdWVzdCk7IAppbnQgTVBJX0ZpbGVfaXdyaXRlKE1QSV9GaWxl
IGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlCgkgICAgICBkYXRhdHlwZSwg
TVBJT19SZXF1ZXN0ICpyZXF1ZXN0KTsKCmludCBNUElfRmlsZV9zZWVrKE1QSV9GaWxlIGZoLCBN
UElfT2Zmc2V0IG9mZnNldCwgaW50IHdoZW5jZSk7CmludCBNUElfRmlsZV9nZXRfcG9zaXRpb24o
TVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgKm9mZnNldCk7CmludCBNUElfRmlsZV9nZXRfYnl0ZV9v
ZmZzZXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1QSV9PZmZzZXQgKmRpc3ApOwoKIAppbnQgTVBJX0ZpbGVfcmVh
ZF9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCAKICAgICAgICAgICAg
ICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsK
aW50IE1QSV9GaWxlX3dyaXRlX3NoYXJlZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291
bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJ
X1N0YXR1cyAqc3RhdHVzKTsKaW50IE1QSV9GaWxlX2lyZWFkX3NoYXJlZChNUElfRmlsZSBmaCwg
dm9pZCAqYnVmLCBpbnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRh
dHlwZSBkYXRhdHlwZSwgTVBJT19SZXF1ZXN0ICpyZXF1ZXN0KTsKaW50IE1QSV9GaWxlX2l3cml0
ZV9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElPX1JlcXVlc3QgKnJlcXVl
c3QpOwppbnQgTVBJX0ZpbGVfcmVhZF9vcmRlcmVkKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGlu
dCBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBl
LCBNUElfU3RhdHVzICpzdGF0dXMpOwppbnQgTVBJX0ZpbGVfd3JpdGVfb3JkZXJlZChNUElfRmls
ZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBN
UElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBNUElfRmlsZV9z
ZWVrX3NoYXJlZChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQsIGludCB3aGVuY2UpOwpp
bnQgTVBJX0ZpbGVfZ2V0X3Bvc2l0aW9uX3NoYXJlZChNUElfRmlsZSBmaCwgTVBJX09mZnNldCAq
b2Zmc2V0KTsKCiAKaW50IE1QSV9GaWxlX3JlYWRfYXRfYWxsX2JlZ2luKE1QSV9GaWxlIGZoLCBN
UElfT2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGNvdW50LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUpOwppbnQgTVBJX0ZpbGVfcmVhZF9h
dF9hbGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Cmlu
dCBNUElfRmlsZV93cml0ZV9hdF9hbGxfYmVnaW4oTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zm
c2V0LCB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50
LCBNUElfRGF0YXR5cGUgZGF0YXR5cGUpOwppbnQgTVBJX0ZpbGVfd3JpdGVfYXRfYWxsX2VuZChN
UElfRmlsZSBmaCwgdm9pZCAqYnVmLCBNUElfU3RhdHVzICpzdGF0dXMpOwppbnQgTVBJX0ZpbGVf
cmVhZF9hbGxfYmVnaW4oTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7CmludCBNUElfRmls
ZV9yZWFkX2FsbF9lbmQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgTVBJX1N0YXR1cyAqc3RhdHVz
KTsKaW50IE1QSV9GaWxlX3dyaXRlX2FsbF9iZWdpbihNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBp
bnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRh
dHlwZSk7CmludCBNUElfRmlsZV93cml0ZV9hbGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYs
IE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBNUElfRmlsZV9yZWFkX29yZGVyZWRfYmVnaW4oTVBJ
X0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUpOwppbnQgTVBJX0ZpbGVfcmVhZF9vcmRlcmVk
X2VuZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBNUElfU3RhdHVzICpzdGF0dXMpOwppbnQgTVBJ
X0ZpbGVfd3JpdGVfb3JkZXJlZF9iZWdpbihNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291
bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5
cGUpOwppbnQgTVBJX0ZpbGVfd3JpdGVfb3JkZXJlZF9lbmQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1
ZiwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKCiAKaW50IE1QSV9GaWxlX2dldF90eXBlX2V4dGVudChN
UElfRmlsZSBmaCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE1QSV9BaW50ICpleHRlbnQpOwoKIAppbnQgTVBJX0ZpbGVfc2V0X2F0
b21pY2l0eShNUElfRmlsZSBmaCwgaW50IGZsYWcpOwppbnQgTVBJX0ZpbGVfZ2V0X2F0b21pY2l0
eShNUElfRmlsZSBmaCwgaW50ICpmbGFnKTsKaW50IE1QSV9GaWxlX3N5bmMoTVBJX0ZpbGUgZmgp
OwoKIAppbnQgTVBJX0ZpbGVfc2V0X2VycmhhbmRsZXIoIE1QSV9GaWxlLCBNUElfRXJyaGFuZGxl
ciApOwppbnQgTVBJX0ZpbGVfZ2V0X2VycmhhbmRsZXIoIE1QSV9GaWxlLCBNUElfRXJyaGFuZGxl
ciAqICk7CgojIDIxMCAiL3Vzci9pbmNsdWRlL21waS9tcGlvLmgiIDMKCgogCgoKIAoKCgoKCgoK
CiAKTVBJX0ZpbGUgTVBJX0ZpbGVfZjJjKE1QSV9GaW50IGZoKTsKTVBJX0ZpbnQgTVBJX0ZpbGVf
YzJmKE1QSV9GaWxlIGZoKTsKCgogCgoKaW50IE1QSU9fVGVzdChNUElPX1JlcXVlc3QgKnJlcXVl
c3QsIGludCAqZmxhZywgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IE1QSU9fV2FpdChNUElPX1Jl
cXVlc3QgKnJlcXVlc3QsIE1QSV9TdGF0dXMgKnN0YXR1cyk7Ck1QSV9GaW50IE1QSU9fUmVxdWVz
dF9jMmYoTVBJT19SZXF1ZXN0IHJlcXVlc3QpOwpNUElPX1JlcXVlc3QgTVBJT19SZXF1ZXN0X2Yy
YyhNUElfRmludCByZXF1ZXN0KTsKCgogCiMgMjY3ICIvdXNyL2luY2x1ZGUvbXBpL21waW8uaCIg
MwoKCgoKCiAKCgogCmludCBQTVBJX0ZpbGVfb3BlbihNUElfQ29tbSBjb21tLCBjaGFyICpmaWxl
bmFtZSwgaW50IGFtb2RlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0luZm8gaW5m
bywgTVBJX0ZpbGUgKmZoKTsKaW50IFBNUElfRmlsZV9jbG9zZShNUElfRmlsZSAqZmgpOwppbnQg
UE1QSV9GaWxlX2RlbGV0ZShjaGFyICpmaWxlbmFtZSwgTVBJX0luZm8gaW5mbyk7CmludCBQTVBJ
X0ZpbGVfc2V0X3NpemUoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgc2l6ZSk7CmludCBQTVBJX0Zp
bGVfcHJlYWxsb2NhdGUoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgc2l6ZSk7CmludCBQTVBJX0Zp
bGVfZ2V0X3NpemUoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgKnNpemUpOwppbnQgUE1QSV9GaWxl
X2dldF9ncm91cChNUElfRmlsZSBmaCwgTVBJX0dyb3VwICpncm91cCk7CmludCBQTVBJX0ZpbGVf
Z2V0X2Ftb2RlKE1QSV9GaWxlIGZoLCBpbnQgKmFtb2RlKTsKaW50IFBNUElfRmlsZV9zZXRfaW5m
byhNUElfRmlsZSBmaCwgTVBJX0luZm8gaW5mbyk7CmludCBQTVBJX0ZpbGVfZ2V0X2luZm8oTVBJ
X0ZpbGUgZmgsIE1QSV9JbmZvICppbmZvX3VzZWQpOwoKIAppbnQgUE1QSV9GaWxlX3NldF92aWV3
KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IGRpc3AsIAogICAgTVBJX0RhdGF0eXBlIGV0eXBlLCBN
UElfRGF0YXR5cGUgZmlsZXR5cGUsIGNoYXIgKmRhdGFyZXAsIE1QSV9JbmZvIGluZm8pOwppbnQg
UE1QSV9GaWxlX2dldF92aWV3KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0ICpkaXNwLCAKICAgICAg
TVBJX0RhdGF0eXBlICpldHlwZSwgTVBJX0RhdGF0eXBlICpmaWxldHlwZSwgY2hhciAqZGF0YXJl
cCk7CgogCmludCBQTVBJX0ZpbGVfcmVhZF9hdChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZz
ZXQsIHZvaWQgKmJ1ZiwKCSAgICAgIGludCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBN
UElfU3RhdHVzICpzdGF0dXMpOwppbnQgUE1QSV9GaWxlX3JlYWRfYXRfYWxsKE1QSV9GaWxlIGZo
LCBNUElfT2Zmc2V0IG9mZnNldCwgdm9pZCAqYnVmLAoJICAgICAgaW50IGNvdW50LCBNUElfRGF0
YXR5cGUgZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfd3JpdGVf
YXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCgkgICAgICBpbnQg
Y291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IFBN
UElfRmlsZV93cml0ZV9hdF9hbGwoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lk
ICpidWYsCgkgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1
cyAqc3RhdHVzKTsKCiAKCiAKCmludCBQTVBJX0ZpbGVfaXJlYWRfYXQoTVBJX0ZpbGUgZmgsIE1Q
SV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCgkgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlw
ZSBkYXRhdHlwZSwgTVBJT19SZXF1ZXN0ICpyZXF1ZXN0KTsKaW50IFBNUElfRmlsZV9pd3JpdGVf
YXQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCgkgICAgICBpbnQg
Y291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJT19SZXF1ZXN0ICpyZXF1ZXN0KTsKCiAK
aW50IFBNUElfRmlsZV9yZWFkKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgTVBJ
X0RhdGF0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGF0eXBlLCBNUElfU3RhdHVz
ICpzdGF0dXMpOyAKaW50IFBNUElfRmlsZV9yZWFkX2FsbChNUElfRmlsZSBmaCwgdm9pZCAqYnVm
LCBpbnQgY291bnQsIE1QSV9EYXRhdHlwZQoJICAgICAgICAgICAgICAgICAgICAgICBkYXRhdHlw
ZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsgCmludCBQTVBJX0ZpbGVfd3JpdGUoTVBJX0ZpbGUgZmgs
IHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0YXR5cGUKCSAgICAgICAgICAgICAgICAgICAg
ZGF0YXR5cGUsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfd3JpdGVfYWxsKE1Q
SV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgTVBJX0RhdGF0eXBlCgkgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKCiAKCiAKCmludCBQ
TVBJX0ZpbGVfaXJlYWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCBNUElfRGF0
YXR5cGUKCSAgICAgICAgICAgICAgICAgICAgZGF0YXR5cGUsIE1QSU9fUmVxdWVzdCAqcmVxdWVz
dCk7IAppbnQgUE1QSV9GaWxlX2l3cml0ZShNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBpbnQgY291
bnQsIE1QSV9EYXRhdHlwZQoJICAgICAgICAgICAgICAgICAgICAgZGF0YXR5cGUsIE1QSU9fUmVx
dWVzdCAqcmVxdWVzdCk7CgppbnQgUE1QSV9GaWxlX3NlZWsoTVBJX0ZpbGUgZmgsIE1QSV9PZmZz
ZXQgb2Zmc2V0LCBpbnQgd2hlbmNlKTsKaW50IFBNUElfRmlsZV9nZXRfcG9zaXRpb24oTVBJX0Zp
bGUgZmgsIE1QSV9PZmZzZXQgKm9mZnNldCk7CmludCBQTVBJX0ZpbGVfZ2V0X2J5dGVfb2Zmc2V0
KE1QSV9GaWxlIGZoLCBNUElfT2Zmc2V0IG9mZnNldCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTVBJX09mZnNldCAqZGlzcCk7CgogCmludCBQTVBJX0ZpbGVfcmVhZF9z
aGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCAKICAgICAgICAgICAgICAg
ICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50
IFBNUElfRmlsZV93cml0ZV9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIE1QSV9T
dGF0dXMgKnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfaXJlYWRfc2hhcmVkKE1QSV9GaWxlIGZoLCB2
b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0
eXBlIGRhdGF0eXBlLCBNUElPX1JlcXVlc3QgKnJlcXVlc3QpOwppbnQgUE1QSV9GaWxlX2l3cml0
ZV9zaGFyZWQoTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50LCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlLCBNUElPX1JlcXVlc3QgKnJlcXVl
c3QpOwppbnQgUE1QSV9GaWxlX3JlYWRfb3JkZXJlZChNUElfRmlsZSBmaCwgdm9pZCAqYnVmLCBp
bnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlw
ZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IFBNUElfRmlsZV93cml0ZV9vcmRlcmVkKE1QSV9G
aWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1QSV9EYXRhdHlwZSBkYXRhdHlwZSwgTVBJX1N0YXR1cyAqc3RhdHVzKTsKaW50IFBNUElfRmls
ZV9zZWVrX3NoYXJlZChNUElfRmlsZSBmaCwgTVBJX09mZnNldCBvZmZzZXQsIGludCB3aGVuY2Up
OwppbnQgUE1QSV9GaWxlX2dldF9wb3NpdGlvbl9zaGFyZWQoTVBJX0ZpbGUgZmgsIE1QSV9PZmZz
ZXQgKm9mZnNldCk7CgogCmludCBQTVBJX0ZpbGVfcmVhZF9hdF9hbGxfYmVnaW4oTVBJX0ZpbGUg
ZmgsIE1QSV9PZmZzZXQgb2Zmc2V0LCB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgY291bnQsIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7CmludCBQTVBJX0ZpbGVf
cmVhZF9hdF9hbGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1
cyk7CmludCBQTVBJX0ZpbGVfd3JpdGVfYXRfYWxsX2JlZ2luKE1QSV9GaWxlIGZoLCBNUElfT2Zm
c2V0IG9mZnNldCwgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBjb3VudCwgTVBJX0RhdGF0eXBlIGRhdGF0eXBlKTsKaW50IFBNUElfRmlsZV93cml0ZV9hdF9h
bGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBQ
TVBJX0ZpbGVfcmVhZF9hbGxfYmVnaW4oTVBJX0ZpbGUgZmgsIHZvaWQgKmJ1ZiwgaW50IGNvdW50
LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9EYXRhdHlwZSBkYXRhdHlwZSk7Cmlu
dCBQTVBJX0ZpbGVfcmVhZF9hbGxfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0
dXMgKnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfd3JpdGVfYWxsX2JlZ2luKE1QSV9GaWxlIGZoLCB2
b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBJX0Rh
dGF0eXBlIGRhdGF0eXBlKTsKaW50IFBNUElfRmlsZV93cml0ZV9hbGxfZW5kKE1QSV9GaWxlIGZo
LCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CmludCBQTVBJX0ZpbGVfcmVhZF9vcmRl
cmVkX2JlZ2luKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIGludCBjb3VudCwgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTVBJX0RhdGF0eXBlIGRhdGF0eXBlKTsKaW50IFBNUElfRmls
ZV9yZWFkX29yZGVyZWRfZW5kKE1QSV9GaWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0
YXR1cyk7CmludCBQTVBJX0ZpbGVfd3JpdGVfb3JkZXJlZF9iZWdpbihNUElfRmlsZSBmaCwgdm9p
ZCAqYnVmLCBpbnQgY291bnQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUElf
RGF0YXR5cGUgZGF0YXR5cGUpOwppbnQgUE1QSV9GaWxlX3dyaXRlX29yZGVyZWRfZW5kKE1QSV9G
aWxlIGZoLCB2b2lkICpidWYsIE1QSV9TdGF0dXMgKnN0YXR1cyk7CgogCmludCBQTVBJX0ZpbGVf
Z2V0X3R5cGVfZXh0ZW50KE1QSV9GaWxlIGZoLCBNUElfRGF0YXR5cGUgZGF0YXR5cGUsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QSV9BaW50ICpleHRlbnQpOwoKIApp
bnQgUE1QSV9GaWxlX3NldF9hdG9taWNpdHkoTVBJX0ZpbGUgZmgsIGludCBmbGFnKTsKaW50IFBN
UElfRmlsZV9nZXRfYXRvbWljaXR5KE1QSV9GaWxlIGZoLCBpbnQgKmZsYWcpOwppbnQgUE1QSV9G
aWxlX3N5bmMoTVBJX0ZpbGUgZmgpOwoKIAppbnQgUE1QSV9GaWxlX3NldF9lcnJoYW5kbGVyKCBN
UElfRmlsZSwgTVBJX0VycmhhbmRsZXIgKTsKaW50IFBNUElfRmlsZV9nZXRfZXJyaGFuZGxlcigg
TVBJX0ZpbGUsIE1QSV9FcnJoYW5kbGVyICogKTsKCiMgMzk3ICIvdXNyL2luY2x1ZGUvbXBpL21w
aW8uaCIgMwoKCiAKTVBJX0ZpbGUgUE1QSV9GaWxlX2YyYyhNUElfRmludCBmaCk7Ck1QSV9GaW50
IFBNUElfRmlsZV9jMmYoTVBJX0ZpbGUgZmgpOwoKIAppbnQgTVBJX0ZpbGVfc2V0X2VycmhhbmRs
ZXIoTVBJX0ZpbGUgZmgsIE1QSV9FcnJoYW5kbGVyIGVycmhhbmRsZXIpOwppbnQgTVBJX0ZpbGVf
Z2V0X2VycmhhbmRsZXIoTVBJX0ZpbGUgZmgsIE1QSV9FcnJoYW5kbGVyICplcnJoYW5kbGVyKTsK
CgogCgoKaW50IFBNUElPX1Rlc3QoTVBJT19SZXF1ZXN0ICpyZXF1ZXN0LCBpbnQgKmZsYWcsIE1Q
SV9TdGF0dXMgKnN0YXR1cyk7CmludCBQTVBJT19XYWl0KE1QSU9fUmVxdWVzdCAqcmVxdWVzdCwg
TVBJX1N0YXR1cyAqc3RhdHVzKTsKTVBJX0ZpbnQgUE1QSU9fUmVxdWVzdF9jMmYoTVBJT19SZXF1
ZXN0IHJlcXVlc3QpOwpNUElPX1JlcXVlc3QgUE1QSU9fUmVxdWVzdF9mMmMoTVBJX0ZpbnQgcmVx
dWVzdCk7CgoKIAojIDQzNCAiL3Vzci9pbmNsdWRlL21waS9tcGlvLmgiIDMKCgoKfQoKCgojIDQ5
ICIvdXNyL2luY2x1ZGUvbXBpL21waWRlZnMuaCIgMiAzCgoKCgojIDIzNSAiL3Vzci9pbmNsdWRl
L21waS9tcGkuaCIgMiAzCgoKIAoKIAoKCgoKCgogCgoKCgoKCiAKCgoKCgoKIAoKCgoKCiAKCiAK
IApleHRlcm4gaW50IE1QSUNIWF9RT1NfQkFORFdJRFRIOwogCgogCiMgMSAiL3Vzci9pbmNsdWRl
L21waS9tcGlfZXJybm8uaCIgMSAzCgogCgoKCgoKCiAKCgoKCiAKCgoKCgoKIAoKIAoKCgoKCgoK
CgogCgoKCgogCgoKCiAKCgogCgoKCgoKIAoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgojIDI3NCAiL3Vzci9pbmNsdWRlL21waS9tcGkuaCIgMiAzCgogCgogCgoK
CgoKCgoKCgoKCiAKCgoKCiAKICBpbnQgTVBJX1NlbmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBl
LCBpbnQsIGludCwgTVBJX0NvbW0pOwogIGludCBNUElfUmVjdih2b2lkKiwgaW50LCBNUElfRGF0
YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1N0YXR1cyAqKTsKICBpbnQgTVBJX0dldF9j
b3VudChNUElfU3RhdHVzICosIE1QSV9EYXRhdHlwZSwgaW50ICopOwogIGludCBNUElfQnNlbmQo
dm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0pOwogIGludCBNUElf
U3NlbmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0pOwogIGlu
dCBNUElfUnNlbmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0p
OwogIGludCBNUElfQnVmZmVyX2F0dGFjaCggdm9pZCosIGludCk7CiAgaW50IE1QSV9CdWZmZXJf
ZGV0YWNoKCB2b2lkKiwgaW50Kik7CiAgaW50IE1QSV9Jc2VuZCh2b2lkKiwgaW50LCBNUElfRGF0
YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IE1QSV9JYnNl
bmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0sIE1QSV9SZXF1
ZXN0ICopOwogIGludCBNUElfSXNzZW5kKHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBp
bnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgTVBJX0lyc2VuZCh2b2lkKiwgaW50
LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50
IE1QSV9JcmVjdih2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwg
TVBJX1JlcXVlc3QgKik7CiAgaW50IE1QSV9XYWl0KE1QSV9SZXF1ZXN0ICosIE1QSV9TdGF0dXMg
Kik7CiAgaW50IE1QSV9UZXN0KE1QSV9SZXF1ZXN0ICosIGludCAqLCBNUElfU3RhdHVzICopOwog
IGludCBNUElfUmVxdWVzdF9mcmVlKE1QSV9SZXF1ZXN0ICopOwogIGludCBNUElfV2FpdGFueShp
bnQsIE1QSV9SZXF1ZXN0ICosIGludCAqLCBNUElfU3RhdHVzICopOwogIGludCBNUElfVGVzdGFu
eShpbnQsIE1QSV9SZXF1ZXN0ICosIGludCAqLCBpbnQgKiwgTVBJX1N0YXR1cyAqKTsKICBpbnQg
TVBJX1dhaXRhbGwoaW50LCBNUElfUmVxdWVzdCAqLCBNUElfU3RhdHVzICopOwogIGludCBNUElf
VGVzdGFsbChpbnQsIE1QSV9SZXF1ZXN0ICosIGludCAqLCBNUElfU3RhdHVzICopOwogIGludCBN
UElfV2FpdHNvbWUoaW50LCBNUElfUmVxdWVzdCAqLCBpbnQgKiwgaW50ICosIE1QSV9TdGF0dXMg
Kik7CiAgaW50IE1QSV9UZXN0c29tZShpbnQsIE1QSV9SZXF1ZXN0ICosIGludCAqLCBpbnQgKiwg
TVBJX1N0YXR1cyAqKTsKICBpbnQgTVBJX0lwcm9iZShpbnQsIGludCwgTVBJX0NvbW0sIGludCAq
ZmxhZywgTVBJX1N0YXR1cyAqKTsKICBpbnQgTVBJX1Byb2JlKGludCwgaW50LCBNUElfQ29tbSwg
TVBJX1N0YXR1cyAqKTsKICBpbnQgTVBJX0NhbmNlbChNUElfUmVxdWVzdCAqKTsKICBpbnQgTVBJ
X1Rlc3RfY2FuY2VsbGVkKE1QSV9TdGF0dXMgKiwgaW50ICopOwogIGludCBNUElfU2VuZF9pbml0
KHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVz
dCAqKTsKICBpbnQgTVBJX0JzZW5kX2luaXQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQs
aW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IE1QSV9Tc2VuZF9pbml0KHZvaWQq
LCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LGludCwgTVBJX0NvbW0sIE1QSV9SZXF1ZXN0ICopOwog
IGludCBNUElfUnNlbmRfaW5pdCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCxpbnQsIE1Q
SV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgTVBJX1JlY3ZfaW5pdCh2b2lkKiwgaW50LCBN
UElfRGF0YXR5cGUsIGludCxpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgTVBJ
X1N0YXJ0KE1QSV9SZXF1ZXN0ICopOwogIGludCBNUElfU3RhcnRhbGwoaW50LCBNUElfUmVxdWVz
dCAqKTsKICBpbnQgTVBJX1NlbmRyZWN2KHZvaWQgKiwgaW50LCBNUElfRGF0YXR5cGUsaW50LCBp
bnQsIHZvaWQgKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1N0
YXR1cyAqKTsKICBpbnQgTVBJX1NlbmRyZWN2X3JlcGxhY2Uodm9pZCosIGludCwgTVBJX0RhdGF0
eXBlLCBpbnQsIGludCwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfU3RhdHVzICopOwogIGludCBN
UElfVHlwZV9jb250aWd1b3VzKGludCwgTVBJX0RhdGF0eXBlLCBNUElfRGF0YXR5cGUgKik7CiAg
aW50IE1QSV9UeXBlX3ZlY3RvcihpbnQsIGludCwgaW50LCBNUElfRGF0YXR5cGUsIE1QSV9EYXRh
dHlwZSAqKTsKICBpbnQgTVBJX1R5cGVfaHZlY3RvcihpbnQsIGludCwgTVBJX0FpbnQsIE1QSV9E
YXRhdHlwZSwgTVBJX0RhdGF0eXBlICopOwogIGludCBNUElfVHlwZV9pbmRleGVkKGludCwgaW50
ICosIGludCAqLCBNUElfRGF0YXR5cGUsIE1QSV9EYXRhdHlwZSAqKTsKICBpbnQgTVBJX1R5cGVf
aGluZGV4ZWQoaW50LCBpbnQgKiwgTVBJX0FpbnQgKiwgTVBJX0RhdGF0eXBlLCBNUElfRGF0YXR5
cGUgKik7CiAgaW50IE1QSV9UeXBlX3N0cnVjdChpbnQsIGludCAqLCBNUElfQWludCAqLCBNUElf
RGF0YXR5cGUgKiwgTVBJX0RhdGF0eXBlICopOwogIGludCBNUElfQWRkcmVzcyh2b2lkKiwgTVBJ
X0FpbnQgKik7CiAgaW50IE1QSV9UeXBlX2V4dGVudChNUElfRGF0YXR5cGUsIE1QSV9BaW50ICop
OwogCgogCiAgaW50IE1QSV9UeXBlX3NpemUoTVBJX0RhdGF0eXBlLCBpbnQgKik7CiAgaW50IE1Q
SV9UeXBlX2NvdW50KE1QSV9EYXRhdHlwZSwgaW50ICopOwogIGludCBNUElfVHlwZV9sYihNUElf
RGF0YXR5cGUsIE1QSV9BaW50Kik7CiAgaW50IE1QSV9UeXBlX3ViKE1QSV9EYXRhdHlwZSwgTVBJ
X0FpbnQqKTsKICBpbnQgTVBJX1R5cGVfY29tbWl0KE1QSV9EYXRhdHlwZSAqKTsKICBpbnQgTVBJ
X1R5cGVfZnJlZShNUElfRGF0YXR5cGUgKik7CiAgaW50IE1QSV9HZXRfZWxlbWVudHMoTVBJX1N0
YXR1cyAqLCBNUElfRGF0YXR5cGUsIGludCAqKTsKICBpbnQgTVBJX1BhY2sodm9pZCosIGludCwg
TVBJX0RhdGF0eXBlLCB2b2lkICosIGludCwgaW50ICosICBNUElfQ29tbSk7CiAgaW50IE1QSV9V
bnBhY2sodm9pZCosIGludCwgaW50ICosIHZvaWQgKiwgaW50LCBNUElfRGF0YXR5cGUsIE1QSV9D
b21tKTsKICBpbnQgTVBJX1BhY2tfc2l6ZShpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX0NvbW0sIGlu
dCAqKTsKICBpbnQgTVBJX0JhcnJpZXIoTVBJX0NvbW0gKTsKICBpbnQgTVBJX0JjYXN0KHZvaWQq
LCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBNUElfQ29tbSApOwogIGludCBNUElfR2F0aGVyKHZv
aWQqICwgaW50LCBNUElfRGF0YXR5cGUsIHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBN
UElfQ29tbSk7IAogIGludCBNUElfR2F0aGVydih2b2lkKiAsIGludCwgTVBJX0RhdGF0eXBlLCB2
b2lkKiwgaW50ICosIGludCAqLCBNUElfRGF0YXR5cGUsIGludCwgTVBJX0NvbW0pOyAKICBpbnQg
TVBJX1NjYXR0ZXIodm9pZCogLCBpbnQsIE1QSV9EYXRhdHlwZSwgdm9pZCosIGludCwgTVBJX0Rh
dGF0eXBlLCBpbnQsIE1QSV9Db21tKTsKICBpbnQgTVBJX1NjYXR0ZXJ2KHZvaWQqICwgaW50ICos
IGludCAqLCAgTVBJX0RhdGF0eXBlLCB2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgTVBJ
X0NvbW0pOwogIGludCBNUElfQWxsZ2F0aGVyKHZvaWQqICwgaW50LCBNUElfRGF0YXR5cGUsIHZv
aWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX0NvbW0pOwogIGludCBNUElfQWxsZ2F0aGVydih2
b2lkKiAsIGludCwgTVBJX0RhdGF0eXBlLCB2b2lkKiwgaW50ICosIGludCAqLCBNUElfRGF0YXR5
cGUsIE1QSV9Db21tKTsKICBpbnQgTVBJX0FsbHRvYWxsKHZvaWQqICwgaW50LCBNUElfRGF0YXR5
cGUsIHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX0NvbW0pOwogIGludCBNUElfQWxsdG9h
bGx2KHZvaWQqICwgaW50ICosIGludCAqLCBNUElfRGF0YXR5cGUsIHZvaWQqLCBpbnQgKiwgaW50
ICosIE1QSV9EYXRhdHlwZSwgTVBJX0NvbW0pOwogIGludCBNUElfUmVkdWNlKHZvaWQqICwgdm9p
ZCosIGludCwgTVBJX0RhdGF0eXBlLCBNUElfT3AsIGludCwgTVBJX0NvbW0pOwogIGludCBNUElf
T3BfY3JlYXRlKE1QSV9Vc2VyX2Z1bmN0aW9uICosIGludCwgTVBJX09wICopOwogIGludCBNUElf
T3BfZnJlZSggTVBJX09wICopOwogIGludCBNUElfQWxscmVkdWNlKHZvaWQqICwgdm9pZCosIGlu
dCwgTVBJX0RhdGF0eXBlLCBNUElfT3AsIE1QSV9Db21tKTsKICBpbnQgTVBJX1JlZHVjZV9zY2F0
dGVyKHZvaWQqICwgdm9pZCosIGludCAqLCBNUElfRGF0YXR5cGUsIE1QSV9PcCwgTVBJX0NvbW0p
OwogIGludCBNUElfU2Nhbih2b2lkKiAsIHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX09w
LCBNUElfQ29tbSApOwogIGludCBNUElfR3JvdXBfc2l6ZShNUElfR3JvdXAgZ3JvdXAsIGludCAq
KTsKICBpbnQgTVBJX0dyb3VwX3JhbmsoTVBJX0dyb3VwIGdyb3VwLCBpbnQgKik7CiAgaW50IE1Q
SV9Hcm91cF90cmFuc2xhdGVfcmFua3MgKE1QSV9Hcm91cCwgaW50LCBpbnQgKiwgTVBJX0dyb3Vw
LCBpbnQgKik7CiAgaW50IE1QSV9Hcm91cF9jb21wYXJlKE1QSV9Hcm91cCwgTVBJX0dyb3VwLCBp
bnQgKik7CiAgaW50IE1QSV9Db21tX2dyb3VwKE1QSV9Db21tLCBNUElfR3JvdXAgKik7CiAgaW50
IE1QSV9Hcm91cF91bmlvbihNUElfR3JvdXAsIE1QSV9Hcm91cCwgTVBJX0dyb3VwICopOwogIGlu
dCBNUElfR3JvdXBfaW50ZXJzZWN0aW9uKE1QSV9Hcm91cCwgTVBJX0dyb3VwLCBNUElfR3JvdXAg
Kik7CiAgaW50IE1QSV9Hcm91cF9kaWZmZXJlbmNlKE1QSV9Hcm91cCwgTVBJX0dyb3VwLCBNUElf
R3JvdXAgKik7CiAgaW50IE1QSV9Hcm91cF9pbmNsKE1QSV9Hcm91cCBncm91cCwgaW50LCBpbnQg
KiwgTVBJX0dyb3VwICopOwogIGludCBNUElfR3JvdXBfZXhjbChNUElfR3JvdXAgZ3JvdXAsIGlu
dCwgaW50ICosIE1QSV9Hcm91cCAqKTsKICBpbnQgTVBJX0dyb3VwX3JhbmdlX2luY2woTVBJX0dy
b3VwIGdyb3VwLCBpbnQsIGludCBbXVszXSwgTVBJX0dyb3VwICopOwogIGludCBNUElfR3JvdXBf
cmFuZ2VfZXhjbChNUElfR3JvdXAgZ3JvdXAsIGludCwgaW50IFtdWzNdLCBNUElfR3JvdXAgKik7
CiAgaW50IE1QSV9Hcm91cF9mcmVlKE1QSV9Hcm91cCAqKTsKICBpbnQgTVBJX0NvbW1fc2l6ZShN
UElfQ29tbSwgaW50ICopOwogIGludCBNUElfQ29tbV9yYW5rKE1QSV9Db21tLCBpbnQgKik7CiAg
aW50IE1QSV9Db21tX2NvbXBhcmUoTVBJX0NvbW0sIE1QSV9Db21tLCBpbnQgKik7CiAgaW50IE1Q
SV9Db21tX2R1cChNUElfQ29tbSwgTVBJX0NvbW0gKik7CiAgaW50IE1QSV9Db21tX2NyZWF0ZShN
UElfQ29tbSwgTVBJX0dyb3VwLCBNUElfQ29tbSAqKTsKICBpbnQgTVBJX0NvbW1fc3BsaXQoTVBJ
X0NvbW0sIGludCwgaW50LCBNUElfQ29tbSAqKTsKICBpbnQgTVBJX0NvbW1fZnJlZShNUElfQ29t
bSAqKTsKICBpbnQgTVBJX0NvbW1fdGVzdF9pbnRlcihNUElfQ29tbSwgaW50ICopOwogIGludCBN
UElfQ29tbV9yZW1vdGVfc2l6ZShNUElfQ29tbSwgaW50ICopOwogIGludCBNUElfQ29tbV9yZW1v
dGVfZ3JvdXAoTVBJX0NvbW0sIE1QSV9Hcm91cCAqKTsKICBpbnQgTVBJX0ludGVyY29tbV9jcmVh
dGUoTVBJX0NvbW0sIGludCwgTVBJX0NvbW0sIGludCwgaW50LCBNUElfQ29tbSAqICk7CiAgaW50
IE1QSV9JbnRlcmNvbW1fbWVyZ2UoTVBJX0NvbW0sIGludCwgTVBJX0NvbW0gKik7CiAgaW50IE1Q
SV9LZXl2YWxfY3JlYXRlKE1QSV9Db3B5X2Z1bmN0aW9uICosIE1QSV9EZWxldGVfZnVuY3Rpb24g
KiwgaW50ICosIHZvaWQqKTsKICBpbnQgTVBJX0tleXZhbF9mcmVlKGludCAqKTsKICBpbnQgTVBJ
X0F0dHJfcHV0KE1QSV9Db21tLCBpbnQsIHZvaWQqKTsKICBpbnQgTVBJX0F0dHJfZ2V0KE1QSV9D
b21tLCBpbnQsIHZvaWQgKiwgaW50ICopOwogIGludCBNUElfQXR0cl9kZWxldGUoTVBJX0NvbW0s
IGludCk7CiAgaW50IE1QSV9Ub3BvX3Rlc3QoTVBJX0NvbW0sIGludCAqKTsKICBpbnQgTVBJX0Nh
cnRfY3JlYXRlKE1QSV9Db21tLCBpbnQsIGludCAqLCBpbnQgKiwgaW50LCBNUElfQ29tbSAqKTsK
ICBpbnQgTVBJX0RpbXNfY3JlYXRlKGludCwgaW50LCBpbnQgKik7CiAgaW50IE1QSV9HcmFwaF9j
cmVhdGUoTVBJX0NvbW0sIGludCwgaW50ICosIGludCAqLCBpbnQsIE1QSV9Db21tICopOwogIGlu
dCBNUElfR3JhcGhkaW1zX2dldChNUElfQ29tbSwgaW50ICosIGludCAqKTsKICBpbnQgTVBJX0dy
YXBoX2dldChNUElfQ29tbSwgaW50LCBpbnQsIGludCAqLCBpbnQgKik7CiAgaW50IE1QSV9DYXJ0
ZGltX2dldChNUElfQ29tbSwgaW50ICopOwogIGludCBNUElfQ2FydF9nZXQoTVBJX0NvbW0sIGlu
dCwgaW50ICosIGludCAqLCBpbnQgKik7CiAgaW50IE1QSV9DYXJ0X3JhbmsoTVBJX0NvbW0sIGlu
dCAqLCBpbnQgKik7CiAgaW50IE1QSV9DYXJ0X2Nvb3JkcyhNUElfQ29tbSwgaW50LCBpbnQsIGlu
dCAqKTsKICBpbnQgTVBJX0dyYXBoX25laWdoYm9yc19jb3VudChNUElfQ29tbSwgaW50LCBpbnQg
Kik7CiAgaW50IE1QSV9HcmFwaF9uZWlnaGJvcnMoTVBJX0NvbW0sIGludCwgaW50LCBpbnQgKik7
CiAgaW50IE1QSV9DYXJ0X3NoaWZ0KE1QSV9Db21tLCBpbnQsIGludCwgaW50ICosIGludCAqKTsK
ICBpbnQgTVBJX0NhcnRfc3ViKE1QSV9Db21tLCBpbnQgKiwgTVBJX0NvbW0gKik7CiAgaW50IE1Q
SV9DYXJ0X21hcChNUElfQ29tbSwgaW50LCBpbnQgKiwgaW50ICosIGludCAqKTsKICBpbnQgTVBJ
X0dyYXBoX21hcChNUElfQ29tbSwgaW50LCBpbnQgKiwgaW50ICosIGludCAqKTsKICBpbnQgTVBJ
X0dldF9wcm9jZXNzb3JfbmFtZShjaGFyICosIGludCAqKTsKICBpbnQgTVBJX0dldF92ZXJzaW9u
KGludCAqLCBpbnQgKik7CiAgaW50IE1QSV9FcnJoYW5kbGVyX2NyZWF0ZShNUElfSGFuZGxlcl9m
dW5jdGlvbiAqLCBNUElfRXJyaGFuZGxlciAqKTsKICBpbnQgTVBJX0VycmhhbmRsZXJfc2V0KE1Q
SV9Db21tLCBNUElfRXJyaGFuZGxlcik7CiAgaW50IE1QSV9FcnJoYW5kbGVyX2dldChNUElfQ29t
bSwgTVBJX0VycmhhbmRsZXIgKik7CiAgaW50IE1QSV9FcnJoYW5kbGVyX2ZyZWUoTVBJX0Vycmhh
bmRsZXIgKik7CiAgaW50IE1QSV9FcnJvcl9zdHJpbmcoaW50LCBjaGFyICosIGludCAqKTsKICBp
bnQgTVBJX0Vycm9yX2NsYXNzKGludCwgaW50ICopOwogIGRvdWJsZSBNUElfV3RpbWUodm9pZCk7
CiAgZG91YmxlIE1QSV9XdGljayh2b2lkKTsKCiAgZG91YmxlIFBNUElfV3RpbWUodm9pZCk7CiAg
ZG91YmxlIFBNUElfV3RpY2sodm9pZCk7CgogIGludCBNUElfSW5pdChpbnQgKiwgY2hhciAqKiop
OwogIGludCBNUElfSW5pdF90aHJlYWQoIGludCAqLCBjaGFyICoqKiwgaW50LCBpbnQgKiApOwog
IGludCBNUElfRmluYWxpemUodm9pZCk7CiAgaW50IE1QSV9Jbml0aWFsaXplZChpbnQgKik7CiAg
aW50IE1QSV9BYm9ydChNUElfQ29tbSwgaW50KTsKCiAKICBpbnQgTVBJX0NvbW1fc2V0X25hbWUo
TVBJX0NvbW0sIGNoYXIgKik7CiAgaW50IE1QSV9Db21tX2dldF9uYW1lKE1QSV9Db21tLCBjaGFy
ICosIGludCAqKTsKCgoKCgoKCgoKICBpbnQgTVBJX1Bjb250cm9sKGNvbnN0IGludCwgLi4uKTsK
CgogIGludCBNUElSX251bGxfY29weV9mbiAgKCBNUElfQ29tbSwgaW50LCB2b2lkICosIHZvaWQg
Kiwgdm9pZCAqLCBpbnQgKiApOwogIGludCBNUElSX251bGxfZGVsZXRlX2ZuICAoIE1QSV9Db21t
LCBpbnQsIHZvaWQgKiwgdm9pZCAqICk7CiAgaW50IE1QSVJfZHVwX2ZuICAoIE1QSV9Db21tLCBp
bnQsIHZvaWQgKiwgdm9pZCAqLCB2b2lkICosIGludCAqICk7CgogCiAgaW50IE1QSV9TdGF0dXNf
ZjJjKCBNUElfRmludCAqLCBNUElfU3RhdHVzICogKTsKICBpbnQgTVBJX1N0YXR1c19jMmYoIE1Q
SV9TdGF0dXMgKiwgTVBJX0ZpbnQgKiApOwogIGludCBNUElfRmluYWxpemVkKCBpbnQgKiApOwog
IGludCBNUElfVHlwZV9jcmVhdGVfaW5kZXhlZF9ibG9jayhpbnQsIGludCwgaW50ICosIE1QSV9E
YXRhdHlwZSwgTVBJX0RhdGF0eXBlICopOwogIGludCBNUElfVHlwZV9nZXRfZW52ZWxvcGUoTVBJ
X0RhdGF0eXBlLCBpbnQgKiwgaW50ICosIGludCAqLCBpbnQgKik7IAogIGludCBNUElfVHlwZV9n
ZXRfY29udGVudHMoTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgaW50LCBpbnQgKiwgTVBJX0FpbnQg
KiwgTVBJX0RhdGF0eXBlICopOwogIGludCBNUElfVHlwZV9jcmVhdGVfc3ViYXJyYXkoaW50LCBp
bnQgKiwgaW50ICosIGludCAqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX0RhdGF0eXBlICopOwog
IGludCBNUElfVHlwZV9jcmVhdGVfZGFycmF5KGludCwgaW50LCBpbnQsIGludCAqLCBpbnQgKiwg
aW50ICosIGludCAqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX0RhdGF0eXBlICopOwogIGludCBN
UElfSW5mb19jcmVhdGUoTVBJX0luZm8gKik7CiAgaW50IE1QSV9JbmZvX3NldChNUElfSW5mbywg
Y2hhciAqLCBjaGFyICopOwogIGludCBNUElfSW5mb19kZWxldGUoTVBJX0luZm8sIGNoYXIgKik7
CiAgaW50IE1QSV9JbmZvX2dldChNUElfSW5mbywgY2hhciAqLCBpbnQsIGNoYXIgKiwgaW50ICop
OwogIGludCBNUElfSW5mb19nZXRfdmFsdWVsZW4oTVBJX0luZm8sIGNoYXIgKiwgaW50ICosIGlu
dCAqKTsKICBpbnQgTVBJX0luZm9fZ2V0X25rZXlzKE1QSV9JbmZvLCBpbnQgKik7CiAgaW50IE1Q
SV9JbmZvX2dldF9udGhrZXkoTVBJX0luZm8sIGludCwgY2hhciAqKTsKICBpbnQgTVBJX0luZm9f
ZHVwKE1QSV9JbmZvLCBNUElfSW5mbyAqKTsKICBpbnQgTVBJX0luZm9fZnJlZShNUElfSW5mbyAq
aW5mbyk7CgpNUElfRmludCBNUElfSW5mb19jMmYoTVBJX0luZm8pOwpNUElfSW5mbyBNUElfSW5m
b19mMmMoTVBJX0ZpbnQpOwpNUElfRmludCBNUElfUmVxdWVzdF9jMmYoIE1QSV9SZXF1ZXN0ICk7
CgogCiAgaW50IE1QSV9TdGF0dXNfc2V0X2NhbmNlbGxlZCggTVBJX1N0YXR1cyAqLCBpbnQgKTsK
ICBpbnQgTVBJX1N0YXR1c19zZXRfZWxlbWVudHMoIE1QSV9TdGF0dXMgKiwgTVBJX0RhdGF0eXBl
LCBpbnQgKTsKCgoKCgogCgogIGludCBQTVBJX1NlbmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBl
LCBpbnQsIGludCwgTVBJX0NvbW0pOwogIGludCBQTVBJX1JlY3Yodm9pZCosIGludCwgTVBJX0Rh
dGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0sIE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElfR2V0
X2NvdW50KE1QSV9TdGF0dXMgKiwgTVBJX0RhdGF0eXBlLCBpbnQgKik7CiAgaW50IFBNUElfQnNl
bmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0pOwogIGludCBQ
TVBJX1NzZW5kKHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tKTsK
ICBpbnQgUE1QSV9Sc2VuZCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElf
Q29tbSk7CiAgaW50IFBNUElfQnVmZmVyX2F0dGFjaCggdm9pZCogYnVmZmVyLCBpbnQpOwogIGlu
dCBQTVBJX0J1ZmZlcl9kZXRhY2goIHZvaWQqIGJ1ZmZlciwgaW50Kik7CiAgaW50IFBNUElfSXNl
bmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0sIE1QSV9SZXF1
ZXN0ICopOwogIGludCBQTVBJX0lic2VuZCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwg
aW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IFBNUElfSXNzZW5kKHZvaWQqLCBp
bnQsIE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBp
bnQgUE1QSV9JcnNlbmQodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0Nv
bW0sIE1QSV9SZXF1ZXN0ICopOwogIGludCBQTVBJX0lyZWN2KHZvaWQqLCBpbnQsIE1QSV9EYXRh
dHlwZSwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQgUE1QSV9XYWl0
KE1QSV9SZXF1ZXN0ICosIE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElfVGVzdChNUElfUmVxdWVz
dCAqLCBpbnQgKmZsYWcsIE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElfUmVxdWVzdF9mcmVlKE1Q
SV9SZXF1ZXN0ICopOwogIGludCBQTVBJX1dhaXRhbnkoaW50LCBNUElfUmVxdWVzdCAqLCBpbnQg
KiwgTVBJX1N0YXR1cyAqKTsKICBpbnQgUE1QSV9UZXN0YW55KGludCwgTVBJX1JlcXVlc3QgKiwg
aW50ICosIGludCAqLCBNUElfU3RhdHVzICopOwogIGludCBQTVBJX1dhaXRhbGwoaW50LCBNUElf
UmVxdWVzdCAqLCBNUElfU3RhdHVzICopOwogIGludCBQTVBJX1Rlc3RhbGwoaW50LCBNUElfUmVx
dWVzdCAqLCBpbnQgKmZsYWcsIE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElfV2FpdHNvbWUoaW50
LCBNUElfUmVxdWVzdCAqLCBpbnQgKiwgaW50ICosIE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElf
VGVzdHNvbWUoaW50LCBNUElfUmVxdWVzdCAqLCBpbnQgKiwgaW50ICosIE1QSV9TdGF0dXMgKik7
CiAgaW50IFBNUElfSXByb2JlKGludCwgaW50LCBNUElfQ29tbSwgaW50ICpmbGFnLCBNUElfU3Rh
dHVzICopOwogIGludCBQTVBJX1Byb2JlKGludCwgaW50LCBNUElfQ29tbSwgTVBJX1N0YXR1cyAq
KTsKICBpbnQgUE1QSV9DYW5jZWwoTVBJX1JlcXVlc3QgKik7CiAgaW50IFBNUElfVGVzdF9jYW5j
ZWxsZWQoTVBJX1N0YXR1cyAqLCBpbnQgKmZsYWcpOwogIGludCBQTVBJX1NlbmRfaW5pdCh2b2lk
KiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7
CiAgaW50IFBNUElfQnNlbmRfaW5pdCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50
LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IFBNUElfU3NlbmRfaW5pdCh2b2lkKiwg
aW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBNUElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAg
aW50IFBNUElfUnNlbmRfaW5pdCh2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgaW50LCBN
UElfQ29tbSwgTVBJX1JlcXVlc3QgKik7CiAgaW50IFBNUElfUmVjdl9pbml0KHZvaWQqLCBpbnQs
IE1QSV9EYXRhdHlwZSwgaW50LCBpbnQsIE1QSV9Db21tLCBNUElfUmVxdWVzdCAqKTsKICBpbnQg
UE1QSV9TdGFydChNUElfUmVxdWVzdCAqKTsKICBpbnQgUE1QSV9TdGFydGFsbChpbnQsIE1QSV9S
ZXF1ZXN0ICopOwogIGludCBQTVBJX1NlbmRyZWN2KHZvaWQgKiwgaW50LCBNUElfRGF0YXR5cGUs
IGludCwgaW50LCB2b2lkICosIGludCwgTVBJX0RhdGF0eXBlLCBpbnQsIGludCwgTVBJX0NvbW0s
IE1QSV9TdGF0dXMgKik7CiAgaW50IFBNUElfU2VuZHJlY3ZfcmVwbGFjZSh2b2lkKiwgaW50LCBN
UElfRGF0YXR5cGUsIGludCwgaW50LCBpbnQsIGludCwgTVBJX0NvbW0sIE1QSV9TdGF0dXMgKik7
CiAgaW50IFBNUElfVHlwZV9jb250aWd1b3VzKGludCwgTVBJX0RhdGF0eXBlLCBNUElfRGF0YXR5
cGUgKik7CiAgaW50IFBNUElfVHlwZV92ZWN0b3IoaW50LCBpbnQsIGludCwgTVBJX0RhdGF0eXBl
LCBNUElfRGF0YXR5cGUgKik7CiAgaW50IFBNUElfVHlwZV9odmVjdG9yKGludCwgaW50LCBNUElf
QWludCwgTVBJX0RhdGF0eXBlLCBNUElfRGF0YXR5cGUgKik7CiAgaW50IFBNUElfVHlwZV9pbmRl
eGVkKGludCwgaW50ICosIGludCAqLCBNUElfRGF0YXR5cGUsIE1QSV9EYXRhdHlwZSAqKTsKICBp
bnQgUE1QSV9UeXBlX2hpbmRleGVkKGludCwgaW50ICosIE1QSV9BaW50ICosIE1QSV9EYXRhdHlw
ZSwgTVBJX0RhdGF0eXBlICopOwogIGludCBQTVBJX1R5cGVfc3RydWN0KGludCwgaW50ICosIE1Q
SV9BaW50ICosIE1QSV9EYXRhdHlwZSAqLCBNUElfRGF0YXR5cGUgKik7CiAgaW50IFBNUElfQWRk
cmVzcyh2b2lkKiwgTVBJX0FpbnQgKik7CiAgaW50IFBNUElfVHlwZV9leHRlbnQoTVBJX0RhdGF0
eXBlLCBNUElfQWludCAqKTsKIAoKIAogIGludCBQTVBJX1R5cGVfc2l6ZShNUElfRGF0YXR5cGUs
IGludCAqKTsKICBpbnQgUE1QSV9UeXBlX2NvdW50KE1QSV9EYXRhdHlwZSwgaW50ICopOwogIGlu
dCBQTVBJX1R5cGVfbGIoTVBJX0RhdGF0eXBlLCBNUElfQWludCopOwogIGludCBQTVBJX1R5cGVf
dWIoTVBJX0RhdGF0eXBlLCBNUElfQWludCopOwogIGludCBQTVBJX1R5cGVfY29tbWl0KE1QSV9E
YXRhdHlwZSAqKTsKICBpbnQgUE1QSV9UeXBlX2ZyZWUoTVBJX0RhdGF0eXBlICopOwogIGludCBQ
TVBJX0dldF9lbGVtZW50cyhNUElfU3RhdHVzICosIE1QSV9EYXRhdHlwZSwgaW50ICopOwogIGlu
dCBQTVBJX1BhY2sodm9pZCosIGludCwgTVBJX0RhdGF0eXBlLCB2b2lkICosIGludCwgaW50ICos
ICBNUElfQ29tbSk7CiAgaW50IFBNUElfVW5wYWNrKHZvaWQqLCBpbnQsIGludCAqLCB2b2lkICos
IGludCwgTVBJX0RhdGF0eXBlLCBNUElfQ29tbSk7CiAgaW50IFBNUElfUGFja19zaXplKGludCwg
TVBJX0RhdGF0eXBlLCBNUElfQ29tbSwgaW50ICopOwogIGludCBQTVBJX0JhcnJpZXIoTVBJX0Nv
bW0gKTsKICBpbnQgUE1QSV9CY2FzdCh2b2lkKiBidWZmZXIsIGludCwgTVBJX0RhdGF0eXBlLCBp
bnQsIE1QSV9Db21tICk7CiAgaW50IFBNUElfR2F0aGVyKHZvaWQqICwgaW50LCBNUElfRGF0YXR5
cGUsIHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBNUElfQ29tbSk7IAogIGludCBQTVBJ
X0dhdGhlcnYodm9pZCogLCBpbnQsIE1QSV9EYXRhdHlwZSwgdm9pZCosIGludCAqLCBpbnQgKiwg
TVBJX0RhdGF0eXBlLCBpbnQsIE1QSV9Db21tKTsgCiAgaW50IFBNUElfU2NhdHRlcih2b2lkKiAs
IGludCwgTVBJX0RhdGF0eXBlLCB2b2lkKiwgaW50LCBNUElfRGF0YXR5cGUsIGludCwgTVBJX0Nv
bW0pOwogIGludCBQTVBJX1NjYXR0ZXJ2KHZvaWQqICwgaW50ICosIGludCAqZGlzcGxzLCBNUElf
RGF0YXR5cGUsIHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgaW50LCBNUElfQ29tbSk7CiAgaW50
IFBNUElfQWxsZ2F0aGVyKHZvaWQqICwgaW50LCBNUElfRGF0YXR5cGUsIHZvaWQqLCBpbnQsIE1Q
SV9EYXRhdHlwZSwgTVBJX0NvbW0pOwogIGludCBQTVBJX0FsbGdhdGhlcnYodm9pZCogLCBpbnQs
IE1QSV9EYXRhdHlwZSwgdm9pZCosIGludCAqLCBpbnQgKiwgTVBJX0RhdGF0eXBlLCBNUElfQ29t
bSk7CiAgaW50IFBNUElfQWxsdG9hbGwodm9pZCogLCBpbnQsIE1QSV9EYXRhdHlwZSwgdm9pZCos
IGludCwgTVBJX0RhdGF0eXBlLCBNUElfQ29tbSk7CiAgaW50IFBNUElfQWxsdG9hbGx2KHZvaWQq
ICwgaW50ICosIGludCAqLCBNUElfRGF0YXR5cGUsIHZvaWQqLCBpbnQgKiwgaW50ICosIE1QSV9E
YXRhdHlwZSwgTVBJX0NvbW0pOwogIGludCBQTVBJX1JlZHVjZSh2b2lkKiAsIHZvaWQqLCBpbnQs
IE1QSV9EYXRhdHlwZSwgTVBJX09wLCBpbnQsIE1QSV9Db21tKTsKICBpbnQgUE1QSV9PcF9jcmVh
dGUoTVBJX1VzZXJfZnVuY3Rpb24gKiwgaW50LCBNUElfT3AgKik7CiAgaW50IFBNUElfT3BfZnJl
ZSggTVBJX09wICopOwogIGludCBQTVBJX0FsbHJlZHVjZSh2b2lkKiAsIHZvaWQqLCBpbnQsIE1Q
SV9EYXRhdHlwZSwgTVBJX09wLCBNUElfQ29tbSk7CiAgaW50IFBNUElfUmVkdWNlX3NjYXR0ZXIo
dm9pZCogLCB2b2lkKiwgaW50ICosIE1QSV9EYXRhdHlwZSwgTVBJX09wLCBNUElfQ29tbSk7CiAg
aW50IFBNUElfU2Nhbih2b2lkKiAsIHZvaWQqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX09wLCBN
UElfQ29tbSApOwogIGludCBQTVBJX0dyb3VwX3NpemUoTVBJX0dyb3VwIGdyb3VwLCBpbnQgKik7
CiAgaW50IFBNUElfR3JvdXBfcmFuayhNUElfR3JvdXAgZ3JvdXAsIGludCAqKTsKICBpbnQgUE1Q
SV9Hcm91cF90cmFuc2xhdGVfcmFua3MgKE1QSV9Hcm91cCwgaW50LCBpbnQgKiwgTVBJX0dyb3Vw
LCBpbnQgKik7CiAgaW50IFBNUElfR3JvdXBfY29tcGFyZShNUElfR3JvdXAsIE1QSV9Hcm91cCwg
aW50ICopOwogIGludCBQTVBJX0NvbW1fZ3JvdXAoTVBJX0NvbW0sIE1QSV9Hcm91cCAqKTsKICBp
bnQgUE1QSV9Hcm91cF91bmlvbihNUElfR3JvdXAsIE1QSV9Hcm91cCwgTVBJX0dyb3VwICopOwog
IGludCBQTVBJX0dyb3VwX2ludGVyc2VjdGlvbihNUElfR3JvdXAsIE1QSV9Hcm91cCwgTVBJX0dy
b3VwICopOwogIGludCBQTVBJX0dyb3VwX2RpZmZlcmVuY2UoTVBJX0dyb3VwLCBNUElfR3JvdXAs
IE1QSV9Hcm91cCAqKTsKICBpbnQgUE1QSV9Hcm91cF9pbmNsKE1QSV9Hcm91cCBncm91cCwgaW50
LCBpbnQgKiwgTVBJX0dyb3VwICopOwogIGludCBQTVBJX0dyb3VwX2V4Y2woTVBJX0dyb3VwIGdy
b3VwLCBpbnQsIGludCAqLCBNUElfR3JvdXAgKik7CiAgaW50IFBNUElfR3JvdXBfcmFuZ2VfaW5j
bChNUElfR3JvdXAgZ3JvdXAsIGludCwgaW50IFtdWzNdLCBNUElfR3JvdXAgKik7CiAgaW50IFBN
UElfR3JvdXBfcmFuZ2VfZXhjbChNUElfR3JvdXAgZ3JvdXAsIGludCwgaW50IFtdWzNdLCBNUElf
R3JvdXAgKik7CiAgaW50IFBNUElfR3JvdXBfZnJlZShNUElfR3JvdXAgKik7CiAgaW50IFBNUElf
Q29tbV9zaXplKE1QSV9Db21tLCBpbnQgKik7CiAgaW50IFBNUElfQ29tbV9yYW5rKE1QSV9Db21t
LCBpbnQgKik7CiAgaW50IFBNUElfQ29tbV9jb21wYXJlKE1QSV9Db21tLCBNUElfQ29tbSwgaW50
ICopOwogIGludCBQTVBJX0NvbW1fZHVwKE1QSV9Db21tLCBNUElfQ29tbSAqKTsKICBpbnQgUE1Q
SV9Db21tX2NyZWF0ZShNUElfQ29tbSwgTVBJX0dyb3VwLCBNUElfQ29tbSAqKTsKICBpbnQgUE1Q
SV9Db21tX3NwbGl0KE1QSV9Db21tLCBpbnQsIGludCwgTVBJX0NvbW0gKik7CiAgaW50IFBNUElf
Q29tbV9mcmVlKE1QSV9Db21tICopOwogIGludCBQTVBJX0NvbW1fdGVzdF9pbnRlcihNUElfQ29t
bSwgaW50ICopOwogIGludCBQTVBJX0NvbW1fcmVtb3RlX3NpemUoTVBJX0NvbW0sIGludCAqKTsK
ICBpbnQgUE1QSV9Db21tX3JlbW90ZV9ncm91cChNUElfQ29tbSwgTVBJX0dyb3VwICopOwogIGlu
dCBQTVBJX0ludGVyY29tbV9jcmVhdGUoTVBJX0NvbW0sIGludCwgTVBJX0NvbW0sIGludCwgaW50
LCBNUElfQ29tbSAqKTsKICBpbnQgUE1QSV9JbnRlcmNvbW1fbWVyZ2UoTVBJX0NvbW0sIGludCwg
TVBJX0NvbW0gKik7CiAgaW50IFBNUElfS2V5dmFsX2NyZWF0ZShNUElfQ29weV9mdW5jdGlvbiAq
LCBNUElfRGVsZXRlX2Z1bmN0aW9uICosIGludCAqLCB2b2lkKik7CiAgaW50IFBNUElfS2V5dmFs
X2ZyZWUoaW50ICopOwogIGludCBQTVBJX0F0dHJfcHV0KE1QSV9Db21tLCBpbnQsIHZvaWQqKTsK
ICBpbnQgUE1QSV9BdHRyX2dldChNUElfQ29tbSwgaW50LCB2b2lkICosIGludCAqKTsKICBpbnQg
UE1QSV9BdHRyX2RlbGV0ZShNUElfQ29tbSwgaW50KTsKICBpbnQgUE1QSV9Ub3BvX3Rlc3QoTVBJ
X0NvbW0sIGludCAqKTsKICBpbnQgUE1QSV9DYXJ0X2NyZWF0ZShNUElfQ29tbSwgaW50LCBpbnQg
KiwgaW50ICosIGludCwgTVBJX0NvbW0gKik7CiAgaW50IFBNUElfRGltc19jcmVhdGUoaW50LCBp
bnQsIGludCAqKTsKICBpbnQgUE1QSV9HcmFwaF9jcmVhdGUoTVBJX0NvbW0sIGludCwgaW50ICos
IGludCAqLCBpbnQsIE1QSV9Db21tICopOwogIGludCBQTVBJX0dyYXBoZGltc19nZXQoTVBJX0Nv
bW0sIGludCAqLCBpbnQgKik7CiAgaW50IFBNUElfR3JhcGhfZ2V0KE1QSV9Db21tLCBpbnQsIGlu
dCwgaW50ICosIGludCAqKTsKICBpbnQgUE1QSV9DYXJ0ZGltX2dldChNUElfQ29tbSwgaW50ICop
OwogIGludCBQTVBJX0NhcnRfZ2V0KE1QSV9Db21tLCBpbnQsIGludCAqLCBpbnQgKiwgaW50ICop
OwogIGludCBQTVBJX0NhcnRfcmFuayhNUElfQ29tbSwgaW50ICosIGludCAqKTsKICBpbnQgUE1Q
SV9DYXJ0X2Nvb3JkcyhNUElfQ29tbSwgaW50LCBpbnQsIGludCAqKTsKICBpbnQgUE1QSV9HcmFw
aF9uZWlnaGJvcnNfY291bnQoTVBJX0NvbW0sIGludCwgaW50ICopOwogIGludCBQTVBJX0dyYXBo
X25laWdoYm9ycyhNUElfQ29tbSwgaW50LCBpbnQsIGludCAqKTsKICBpbnQgUE1QSV9DYXJ0X3No
aWZ0KE1QSV9Db21tLCBpbnQsIGludCwgaW50ICosIGludCAqKTsKICBpbnQgUE1QSV9DYXJ0X3N1
YihNUElfQ29tbSwgaW50ICosIE1QSV9Db21tICopOwogIGludCBQTVBJX0NhcnRfbWFwKE1QSV9D
b21tLCBpbnQsIGludCAqLCBpbnQgKiwgaW50ICopOwogIGludCBQTVBJX0dyYXBoX21hcChNUElf
Q29tbSwgaW50LCBpbnQgKiwgaW50ICosIGludCAqKTsKICBpbnQgUE1QSV9HZXRfcHJvY2Vzc29y
X25hbWUoY2hhciAqLCBpbnQgKik7CiAgaW50IFBNUElfR2V0X3ZlcnNpb24oaW50ICosIGludCAq
KTsKICBpbnQgUE1QSV9FcnJoYW5kbGVyX2NyZWF0ZShNUElfSGFuZGxlcl9mdW5jdGlvbiAqLCBN
UElfRXJyaGFuZGxlciAqKTsKICBpbnQgUE1QSV9FcnJoYW5kbGVyX3NldChNUElfQ29tbSwgTVBJ
X0VycmhhbmRsZXIpOwogIGludCBQTVBJX0VycmhhbmRsZXJfZ2V0KE1QSV9Db21tLCBNUElfRXJy
aGFuZGxlciAqKTsKICBpbnQgUE1QSV9FcnJoYW5kbGVyX2ZyZWUoTVBJX0VycmhhbmRsZXIgKik7
CiAgaW50IFBNUElfRXJyb3Jfc3RyaW5nKGludCwgY2hhciAqLCBpbnQgKik7CiAgaW50IFBNUElf
RXJyb3JfY2xhc3MoaW50LCBpbnQgKik7CgogIGludCBQTVBJX1R5cGVfZ2V0X2VudmVsb3BlKE1Q
SV9EYXRhdHlwZSwgaW50ICosIGludCAqLCBpbnQgKiwgaW50ICopOyAKICBpbnQgUE1QSV9UeXBl
X2dldF9jb250ZW50cyhNUElfRGF0YXR5cGUsIGludCwgaW50LCBpbnQsIGludCAqLCBNUElfQWlu
dCAqLCBNUElfRGF0YXR5cGUgKik7CiAgaW50IFBNUElfVHlwZV9jcmVhdGVfc3ViYXJyYXkoaW50
LCBpbnQgKiwgaW50ICosIGludCAqLCBpbnQsIE1QSV9EYXRhdHlwZSwgTVBJX0RhdGF0eXBlICop
OwogIGludCBQTVBJX1R5cGVfY3JlYXRlX2RhcnJheShpbnQsIGludCwgaW50LCBpbnQgKiwgaW50
ICosIGludCAqLCBpbnQgKiwgaW50LCBNUElfRGF0YXR5cGUsIE1QSV9EYXRhdHlwZSAqKTsKICBp
bnQgUE1QSV9JbmZvX2NyZWF0ZShNUElfSW5mbyAqKTsKICBpbnQgUE1QSV9JbmZvX3NldChNUElf
SW5mbywgY2hhciAqLCBjaGFyICopOwogIGludCBQTVBJX0luZm9fZGVsZXRlKE1QSV9JbmZvLCBj
aGFyICopOwogIGludCBQTVBJX0luZm9fZ2V0KE1QSV9JbmZvLCBjaGFyICosIGludCwgY2hhciAq
LCBpbnQgKik7CiAgaW50IFBNUElfSW5mb19nZXRfdmFsdWVsZW4oTVBJX0luZm8sIGNoYXIgKiwg
aW50ICosIGludCAqKTsKICBpbnQgUE1QSV9JbmZvX2dldF9ua2V5cyhNUElfSW5mbywgaW50ICop
OwogIGludCBQTVBJX0luZm9fZ2V0X250aGtleShNUElfSW5mbywgaW50LCBjaGFyICopOwogIGlu
dCBQTVBJX0luZm9fZHVwKE1QSV9JbmZvLCBNUElfSW5mbyAqKTsKICBpbnQgUE1QSV9JbmZvX2Zy
ZWUoTVBJX0luZm8gKik7CgpNUElfRmludCBQTVBJX0luZm9fYzJmKE1QSV9JbmZvKTsKTVBJX0lu
Zm8gUE1QSV9JbmZvX2YyYyhNUElfRmludCk7CgogCiAgaW50IFBNUElfSW5pdChpbnQgKiwgY2hh
ciAqKiopOwogIGludCBQTVBJX0luaXRfdGhyZWFkKCBpbnQgKiwgY2hhciAqKiosIGludCwgaW50
ICogKTsKICBpbnQgUE1QSV9GaW5hbGl6ZSh2b2lkKTsKICBpbnQgUE1QSV9Jbml0aWFsaXplZChp
bnQgKik7CiAgaW50IFBNUElfQWJvcnQoTVBJX0NvbW0sIGludCk7CiAKIAogCgoKCgoKCgoKICBp
bnQgUE1QSV9QY29udHJvbChjb25zdCBpbnQsIC4uLik7CgoKIAogIGludCBQTVBJX1N0YXR1c19z
ZXRfY2FuY2VsbGVkKCBNUElfU3RhdHVzICosIGludCApOwogIGludCBQTVBJX1N0YXR1c19zZXRf
ZWxlbWVudHMoIE1QSV9TdGF0dXMgKiwgTVBJX0RhdGF0eXBlLCBpbnQgKTsKCgogCgoKfQogCiAK
CgoKCgoKCgoKCgoKIyA2MyAiQ29tbVNlcnZlci5oIiAyCgoKfQoKCgoKIAogCgoKCgoKCgoKCgoK
CmNsYXNzIGNvbW1fYmFycmllciA7CgpjbGFzcyBjb21tX3NlcnZpY2Ugewpwcml2YXRlOiAgCiAg
IAoKICBzdGF0aWMgaW50ICAgICAgICAgICAgIGluaXRfZmxhZyA7CiAgc3RhdGljIGludCAgICAg
ICAgICAgICBkY2VfZmxhZyA7CgogIHN0YXRpYyBpbnQgICAgICAgICAgICAgUE1lIDsKCiAgc3Rh
dGljIGludCAgICAgICAgICAgICBOTGlzdCA7CiAgc3RhdGljIE1QSV9SZXF1ZXN0ICAgKiBSTGlz
dCA7CiAgc3RhdGljIGNvbW1fc2VydmljZSAqKiBTTGlzdCA7CiAgc3RhdGljIGNvbW1fYmFycmll
ciAqKiBCYXJyaWVyIDsKICBzdGF0aWMgY29tbV9iYXJyaWVyICoqIEJhcnJpZXJXb3JsZCA7Cgog
IHN0YXRpYyBvZnN0cmVhbSAgICAgICAgb2Zsb2cgOwoKCgoKICAgCiAgc3RhdGljIGludCAgICAg
ICAgICAgICBQTnVtIDsKICBzdGF0aWMgTVBJX0NvbW0gICAgICAgIENvbW0gOwogIHN0YXRpYyBN
UElfR3JvdXAgICAgICAgR3JwICA7CgogICAKICBzdGF0aWMgaW50ICAgICAgICAgICAgIGlvX2Zs
YWcgOwogIHN0YXRpYyBpbnQgICAgICAgICAgICAgUElPIDsKICBzdGF0aWMgTVBJX0NvbW0gICAg
ICAgIENvbW1JTyA7CgogICAKICBzdGF0aWMgTVBJX0NvbW0gICAgICAgIENvbW1Xb3JsZCA7CiAg
c3RhdGljIGludCAgICAgICAgICAgICBQV29ybGQgOwogIHN0YXRpYyBNUElfR3JvdXAJIEdycFdv
cmxkIDsKCiAgIAogIHN0YXRpYyBpbnQJCU51bUNvbW1BcnJheSA7CiAgc3RhdGljIE1QSV9Db21t
ICAgICAqIENvbW1BcnJheSA7CgogICAKICBzdGF0aWMgZG91YmxlIElkbGVfVGltZSA7ICAKICBz
dGF0aWMgZG91YmxlIFNydmNfVGltZSA7ICAKCiAgTVBJX1JlcXVlc3QgKiBSZXEgOwoKICBzdGF0
aWMgaW50IGZpbmRUYWcoIGNvbnN0IGludCAsIGNvbnN0IGludCAsIGNvbnN0IGludCApOyAgCiAg
c3RhdGljIGludCBmaW5kU2VydmljZSggY29tbV9zZXJ2aWNlICogY29uc3QgKTsgICAKICBzdGF0
aWMgaW50IGZpbmRSZXF1ZXN0KCBjb25zdCBNUElfUmVxdWVzdCApOyAgICAgIAoKcHJvdGVjdGVk
OiAgCgogIGNvbnN0IGludCBJZCA7CiAgY29uc3QgaW50IFRhZyA7CiAgY29uc3QgaW50IFNyYyA7
CgogIGNvbW1fc2VydmljZSggY29uc3QgaW50IEkgLCBjb25zdCBpbnQgVCAsIGNvbnN0IGludCBT
PSAoLTIpICApOwoKICB2aXJ0dWFsIH5jb21tX3NlcnZpY2UoKTsKCiAgdmlydHVhbCB2b2lkIGNh
bGxyZWN2KCBjb25zdCBNUElfU3RhdHVzICYgKTsgIAogIHZpcnR1YWwgY29uc3QgY2hhciAqIG5h
bWUoIHZvaWQgKSBjb25zdCA7ICAgICAKCiAgdm9pZCBzZXRyZXEoY29uc3QgaW50LCBjb25zdCBp
bnQsIGNvbnN0IGludCk7CgpwdWJsaWM6ICAKCiAgIAoKICBzdGF0aWMgaW50ICBpbml0KCBNUElf
Q29tbSBjID0gMCApOwogIHN0YXRpYyB2b2lkIGNsZWFuKCk7CiAgc3RhdGljIHZvaWQga2lsbCgp
OwoKICAgCgogIHN0YXRpYyBpbnQgc2VydmUoIE1QSV9SZXF1ZXN0ICk7ICAKICBzdGF0aWMgaW50
IHNlcnZlKCB2b2lkICk7ICAgICAgICAgCgogIHN0YXRpYyB2b2lkIGJhcnJpZXIoIGludCBjb25z
dCB0eXBlID0gKCh1bnNpZ25lZCkgMCkgICk7CgogICAKCiAgTVBJX1JlcXVlc3QgKiByZXEodm9p
ZCkgY29uc3QgeyByZXR1cm4gUmVxIDsgfQogIGludCB0YWcodm9pZCkgY29uc3QgeyByZXR1cm4g
VGFnIDsgfQoKICBzdGF0aWMgb2ZzdHJlYW0gJiBmbG9nKHZvaWQpICB7IHJldHVybiBvZmxvZyA7
IH0KCiAgc3RhdGljIG9mc3RyZWFtJiBsb2codm9pZCkgeyByZXR1cm4gb2Zsb2c7IH0KCgoKCiAg
c3RhdGljIGludCBkY2Uodm9pZCkgICAgICAJeyByZXR1cm4gZGNlX2ZsYWcgOyB9CiAgc3RhdGlj
IGludCBwcm9jX21lKHZvaWQpICAgICAgeyByZXR1cm4gUE1lIDsgfQoKICBzdGF0aWMgaW50IHBy
b2NfbnVtKHZvaWQpICAgICB7IHJldHVybiBQTnVtIDsgfQogIHN0YXRpYyBNUElfQ29tbSBjb21t
KHZvaWQpICAgIHsgcmV0dXJuIENvbW0gOyB9CiAgc3RhdGljIE1QSV9Hcm91cCBncnAodm9pZCkg
ICAgeyByZXR1cm4gR3JwIDsgfQoKICBzdGF0aWMgaW50IG51bV9zZXJ2aWNlcyh2b2lkKSB7IHJl
dHVybiBOTGlzdCA7fQoKICBzdGF0aWMgaW50IGNvbW1pbml0KHZvaWQpICAgICB7IHJldHVybiAo
aW5pdF9mbGFnID09IDEpOyB9CiAgc3RhdGljIHZvaWQgc2V0X2NvbW1pbml0KHZvaWQpICAgICB7
IGluaXRfZmxhZyA9IDE7IH0KICBzdGF0aWMgdm9pZCByZXNldF9jb21taW5pdCh2b2lkKSAgICAg
eyBpbml0X2ZsYWcgPSAwOyB9CgogIHN0YXRpYyBpbnQgaW9fZW5hYmxlZCh2b2lkKSAgICAgeyBy
ZXR1cm4gKGlvX2ZsYWcgPT0gMSk7IH0KICBzdGF0aWMgdm9pZCBzZXRfaW9fZW5hYmxlKHZvaWQp
ICAgICB7IGlvX2ZsYWcgPSAxOyB9CiAgc3RhdGljIHZvaWQgcmVzZXRfaW9fZW5hYmxlKHZvaWQp
ICAgICB7IGlvX2ZsYWcgPSAwOyB9CiAgc3RhdGljIGludCBwcm9jX2lvKHZvaWQpICAgICB7IHJl
dHVybiBQSU8gOyB9CiAgc3RhdGljIE1QSV9Db21tIGNvbW1faW8odm9pZCkgICAgeyByZXR1cm4g
Q29tbUlPIDsgfQoKICBzdGF0aWMgTVBJX0NvbW0gY29tbV93b3JsZCh2b2lkKSAgICB7IHJldHVy
biBDb21tV29ybGQgOyB9CiAgc3RhdGljIGludCBwcm9jX3dvcmxkKHZvaWQpICAgIHsgcmV0dXJu
IFBXb3JsZDsgfQogIHN0YXRpYyBNUElfR3JvdXAgZ3JwX3dvcmxkKHZvaWQpICAgIHsgcmV0dXJu
IEdycFdvcmxkIDsgfQoKICBzdGF0aWMgTVBJX0NvbW0gY29tbShpbnQgY29uc3QgaWQpICAgIHsg
cmV0dXJuIENvbW1BcnJheVtpZF0gOyB9CiAgc3RhdGljIGludCBudW1fY29tbSh2b2lkKSAgICB7
IHJldHVybiBOdW1Db21tQXJyYXkgOyB9CgogIHN0YXRpYyB2b2lkIGFkZF9jb21tKGludCBjb25z
dCBpZCk7CiAgc3RhdGljIHZvaWQgZGVsZXRlX2NvbW0oaW50IGNvbnN0IGlkKTsKICBzdGF0aWMg
dm9pZCByZXNldF9jb21tKGludCBjb25zdCBpZCk7CgogIHN0YXRpYyB2b2lkIGluY19jb21tYXJy
YXkoaW50IGNvbnN0IGluYyk7CgogIHN0YXRpYyBkb3VibGUgaWRsZV90aW1lKHZvaWQpIHsgcmV0
dXJuIElkbGVfVGltZSA7IH0KICBzdGF0aWMgZG91YmxlIHNydmNfdGltZSh2b2lkKSB7IHJldHVy
biBTcnZjX1RpbWUgOyB9CgogICAKICBzdGF0aWMgdm9pZCBlcnJvcl9tc2coIGNvbnN0IGNoYXIg
d2hvW10gLCBjb25zdCBjaGFyIHdoYXRbXSAsIGludCBSICk7CiAgc3RhdGljIHZvaWQgZXJyb3Jf
ZGllKCBjb25zdCBjaGFyIHdob1tdICwgY29uc3QgY2hhciB3aGF0W10gLCBpbnQgUiApOwp9OwoK
CiMgMTMgIkFDRURpc3RyaWJ1dGlvbi5jcHAiIDIKCiAKCiAKIAogCnZvaWQgcGFydGl0aW9uX29u
ZShjb25zdCBCQm94JiB3aG9sZWJib3gsIEJCb3gqIGJveGVzLCBjb25zdCBpbnQgbnAsIAogICAg
ICAgICAgICAgICAgICAgY29uc3QgaW50IGRpbSk7CnZvaWQgcGFydGl0aW9uX3R3byhjb25zdCBC
Qm94JiB3aG9sZWJib3gsIEJCb3gqIGJveGVzLCBjb25zdCBpbnQgbnAsIAogICAgICAgICAgICAg
ICAgICAgY29uc3QgaW50IGRpbTEsIGNvbnN0IGludCBkaW0yKTsKdm9pZCBwYXJ0aXRpb25fYWxs
KGNvbnN0IEJCb3gmIHdob2xlYmJveCwgQkJveCogYm94ZXMsIGNvbnN0IGludCBucCk7CnZvaWQg
cHdhbGtlcl9wYXJ0aXRpb24oY29uc3QgQkJveCYgd2hvbGViYm94LCBCQm94KiBib3hlcywgY29u
c3QgaW50IG5wKTsKIAoKQUNFRGlzdHJpYnV0aW9uOjpBQ0VEaXN0cmlidXRpb24oY29uc3QgaW50
IGRpc3R0eXBlLCBCQm94TGlzdCYgYmJsKQogIDogdHlwZShkaXN0dHlwZSksIGJveGVzKDApLCB3
ZnVuYygwKQp7CiAgYm94ZXMgPSBuZXcgQkJveFtiYmwubnVtYmVyKCldOwogIHJlZ2lzdGVyIEJC
b3gqIGJiID0gMDsKICByZWdpc3RlciBpbnQgY250ID0gMDsKICBmb3IgKGJiPWJibC5maXJzdCgp
O2JiO2JiPWJibC5uZXh0KCkpIHsKICAgIGJveGVzW2NudCsrXSA9ICpiYjsgCiAgfQp9ICAgCgp2
b2lkIEFDRURpc3RyaWJ1dGlvbjo6c2V0X2Rpc3QoY29uc3QgaW50IGRpc3R0eXBlLCBCQm94TGlz
dCYgYmJsKQp7CiAgdHlwZSA9IGRpc3R0eXBlOwogIGlmIChib3hlcykgZGVsZXRlIFtdIGJveGVz
OwogIGJveGVzID0gbmV3IEJCb3hbYmJsLm51bWJlcigpXTsKICByZWdpc3RlciBCQm94KiBiYiA9
IDA7CiAgcmVnaXN0ZXIgaW50IGNudCA9IDA7CiAgZm9yIChiYj1iYmwuZmlyc3QoKTtiYjtiYj1i
YmwubmV4dCgpKSB7CiAgICBib3hlc1tjbnQrK10gPSAqYmI7IAogIH0KfQoKdW5zaWduZWQgbG9u
ZyBBQ0VEaXN0cmlidXRpb246OmdldF9sb2FkKEdyaWRVbml0TGlzdCYgZ2d1bCwgCgkJCQkJY29u
c3Qgc2hvcnQqIG9sYXApCnsKICBpZiAod2Z1bmMpIHsgCiAgICB1bnNpZ25lZCBsb25nIGxvYWQg
PSAwLCBuID0gMDsKICAgIGludCBsZXZlbHMgPSBnZ3VsLmxldmVscygpOwogICAgZm9yIChpbnQg
bD0wO2w8bGV2ZWxzO2wrKykgCiAgICAgIGxvYWQgKz0gKCp3ZnVuYykoJihuPWdndWwubnVtZWxl
bXMobCxvbGFwKSksJmwpOwogICAgcmV0dXJuIGxvYWQ7CiAgfSAKICBlbHNlIHJldHVybiggZ2d1
bC5sb2FkKG9sYXApICk7Cn0KCiAKIAogCnZvaWQgQUNFRGlzdHJpYnV0aW9uOjppbml0X3BhcnRp
dGlvbmVyKGNvbnN0IGludCBucCwKCQkJCSAgICAgICBjb25zdCBpbnQgbWUsCgkJCQkgICAgICAg
Y29uc3QgaW50IHJhbmssCgkJCQkgICAgICAgY29uc3QgQkJveCYgd2hvbGViYm94KSAKewogIHdi
b3ggPSB3aG9sZWJib3g7CiAgaWYgKCh0eXBlLyAoMTApICkqICgxMCkgID09IAogICAgICAoMTAp
ICkgewojIDg2ICJBQ0VEaXN0cmlidXRpb24uY3BwIgoKICAgIGNlcnIgPDwgIlZBTVBJUkUgbm90
IGF2YWlsYWJsZSAhIgoJIDw8ICJQbGVhc2UgcmVjb21waWxlIEdyQUNFIHdpdGggVmFtcGlyZSBs
aWJyYXJpZXMiIAoJIDw8IGVuZGwgPDwgZmx1c2g7CiAgICBleGl0ICgtMSk7CgogIH0KICBlbHNl
IGlmICh0eXBlID09ICgyMCkgKSB7CiMgMTE0ICJBQ0VEaXN0cmlidXRpb24uY3BwIgoKICAgIGNl
cnIgPDwgIlBhck1ldGlzIG5vdCBhdmFpbGFibGUgISIKCSA8PCAiUGxlYXNlIHJlY29tcGlsZSBH
ckFDRSB3aXRoIFBhck1ldGlzIGxpYnJhcmllcyIgCgkgPDwgZW5kbCA8PCBmbHVzaDsKICAgIGV4
aXQgKC0xKTsKCiAgfQogIGVsc2UgeyAKICAgICAKICB9Cn0KCnZvaWQgQUNFRGlzdHJpYnV0aW9u
OjpwYXJ0aXRpb24oR3JpZFVuaXRMaXN0KiYgZ2d1bCwKCQkJCUdyaWRVbml0TGlzdComIGxndWws
CgkJCQljb25zdCBpbnQgbnAsIAoJCQkJY29uc3QgaW50IG1lLCAKCQkJCWNvbnN0IGludCBtaW53
LCAKCQkJCWNvbnN0IGludCBtYXh3LCAKCQkJCWNvbnN0IGludCBtaW53aywgCgkJCQljb25zdCBz
aG9ydCogb2xhcCwKCQkJCWNvbnN0IGludCBvcnBoYW5fZmxhZykKewogIGlmICh0eXBlID09ICgx
KSApIAogICAgcGFydGl0aW9uQ29tcG9zaXRlKGdndWwsbGd1bCxucCxtZSxtaW53LG1heHcsbWlu
d2ssb2xhcCxvcnBoYW5fZmxhZyk7CiAgCiAgZWxzZSBpZiAodHlwZSA9PSAoMikgKSAKICAgIHBh
cnRpdGlvbkJsb2NrT25lKCgwKSAsZ2d1bCxsZ3VsLG5wLG1lLG1pbncsbWF4dyxtaW53ayxvbGFw
KTsKICBlbHNlIGlmICh0eXBlID09ICgzKSApIAogICAgcGFydGl0aW9uQmxvY2tPbmUoKDEpICxn
Z3VsLGxndWwsbnAsbWUsbWludyxtYXh3LG1pbndrLG9sYXApOwogIGVsc2UgaWYgKHR5cGUgPT0g
KDQpICkgCiAgICBwYXJ0aXRpb25CbG9ja09uZSgoMikgLGdndWwsbGd1bCxucCxtZSxtaW53LG1h
eHcsbWlud2ssb2xhcCk7CiAgCiAgZWxzZSBpZiAodHlwZSA9PSAoNSkgKSAKICAgIHBhcnRpdGlv
bkJsb2NrVHdvKCgwKSAsKDEpICxnZ3VsLGxndWwsbnAsbWUsbWludyxtYXh3LG1pbndrLG9sYXAp
OwogIGVsc2UgaWYgKHR5cGUgPT0gKDYpICkgCiAgICBwYXJ0aXRpb25CbG9ja1R3bygoMSkgLCgy
KSAsZ2d1bCxsZ3VsLG5wLG1lLG1pbncsbWF4dyxtaW53ayxvbGFwKTsKICBlbHNlIGlmICh0eXBl
ID09ICg3KSApIAogICAgcGFydGl0aW9uQmxvY2tUd28oKDApICwoMikgLGdndWwsbGd1bCxucCxt
ZSxtaW53LG1heHcsbWlud2ssb2xhcCk7CiAgCiAgZWxzZSBpZiAodHlwZSA9PSAoOCkgKSAKICAg
IHBhcnRpdGlvbkJsb2NrQWxsKGdndWwsbGd1bCxucCxtZSxtaW53LG1heHcsbWlud2ssb2xhcCk7
CiAgCiAgZWxzZSBpZiAodHlwZSA9PSAoOSkgKSAKICAgIHBhcnRpdGlvblVzZXJEZWYoZ2d1bCxs
Z3VsLG5wLG1lLG1pbncsbWF4dyxtaW53ayxvbGFwKTsKICAKICBlbHNlIHsKICAgIGNlcnIgPDwg
IlBhcnRpdGlvbmVyIE5vdCBEZWZpbmVkICEiIDw8IGVuZGwgPDwgZmx1c2g7CiAgICAoc3RhdGlj
X2Nhc3Q8dm9pZD4gICgoIDAgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoIjAiICwgIkFDRURpc3Ry
aWJ1dGlvbi5jcHAiLCAxNjEsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgfQp9Cgp2
b2lkIEFDRURpc3RyaWJ1dGlvbjo6cGFydGl0aW9uKEJCb3hMaXN0JiBpbmJibCwKCQkJCUJCb3hM
aXN0KiogYmJveGFycmF5LAoJCQkJY29uc3QgaW50IGxldmVscywKCQkJCWNvbnN0IGludCBjbGV2
ZWxzLAoJCQkJY29uc3QgaW50IHJlZmxldiwKCQkJCWNvbnN0IGludCByYW5rLAoJCQkJY29uc3Qg
aW50IG5wLCAKCQkJCWNvbnN0IGludCBtZSwKCQkJCWNvbnN0IGludCBtaW53LCAKCQkJCWNvbnN0
IGludCBtYXh3LCAKCQkJCWNvbnN0IGludCBtaW53aywgCgkJCQljb25zdCBzaG9ydCogb2xhcCwK
CQkJCWNvbnN0IGludCBvcnBoYW5fZmxhZykKewoKICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIHR5
cGUgIT0gKDEpICApID8gMCA6CShfX2Fzc2VydF9mYWlsICgidHlwZSAhPSAoMSkiICwgIkFDRURp
c3RyaWJ1dGlvbi5jcHAiLCAxODAsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgY29t
bV9zZXJ2aWNlOjpsb2coKSA8PCAiSU4gUEFSVElUSU9OIC0gVGhlIElucHV0IExpc3QgaXMgIiA8
PCBlbmRsCgkJICAgICAgPDwgaW5iYmwgPDwgZW5kbCA8PCBmbHVzaDsKCiAgaWYgKCh0eXBlLyAo
MTApICkqICgxMCkgID09IAogICAgICAoMTApICkgewogICAgcGFydGl0aW9uVmFtcGlyZShpbmJi
bCwKCQkgICAgIGJib3hhcnJheSwKCQkgICAgIGxldmVscywKCQkgICAgIGNsZXZlbHMsCgkJICAg
ICByZWZsZXYsCgkJICAgICByYW5rLAoJCSAgICAgbnAsCgkJICAgICBtZSwKCQkgICAgIG1pbncs
CgkJICAgICBtYXh3LAoJCSAgICAgbWlud2ssCgkJICAgICBvbGFwKTsKICB9CiAgZWxzZSBpZiAo
dHlwZSA9PSAoMjApICkgewogICAgcGFydGl0aW9uUGFyTWV0aXMoaW5iYmwsCgkJICAgICAgYmJv
eGFycmF5LAoJCSAgICAgIGxldmVscywKCQkgICAgICBjbGV2ZWxzLAoJCSAgICAgIHJlZmxldiwK
CQkgICAgICByYW5rLAoJCSAgICAgIG5wLAoJCSAgICAgIG1lLAoJCSAgICAgIG1pbncsCgkJICAg
ICAgbWF4dywKCQkgICAgICBtaW53aywKCQkgICAgICBvbGFwKTsKICB9CiAgZWxzZSB7CiAgICBj
ZXJyIDw8ICJQYXJ0aXRpb25lciBOb3QgRGVmaW5lZCAhIiA8PCBlbmRsIDw8IGZsdXNoOwogICAg
KHN0YXRpY19jYXN0PHZvaWQ+ICAoKCAwICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCIwIiAsICJB
Q0VEaXN0cmlidXRpb24uY3BwIiwgMjE1LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwog
IH0KCiAgICBmb3IgKGludCBsbGw9MDtsbGw8bGV2ZWxzO2xsbCsrKSB7CiAgICAgIGlmIChiYm94
YXJyYXlbbGxsXSkKCWNvbW1fc2VydmljZTo6bG9nKCkgPDwgIklOIFBBUlRJVElPTiAtIFRoZSBP
dXRwdXQgTGlzdCBhdCBsZXZlbCAiIDw8IGxsbCA8PCAiaXMgIiA8PCBlbmRsIAoJCQkgICAgPDwg
KmJib3hhcnJheVtsbGxdIAoJCQkgICAgPDwgZW5kbCA8PCBmbHVzaDsKICAgIH0KCn0KCnZvaWQg
QUNFRGlzdHJpYnV0aW9uOjpwYXJ0aXRpb24oY29uc3QgQkJveCYgd2Jib3gsCgkJCQlCQm94JiBt
eWJib3gsCgkJCQljb25zdCBpbnQgbnAsIAoJCQkJY29uc3QgaW50IG1lLAoJCQkJY29uc3QgaW50
IG9ycGhhbl9mbGFnKQp7CgogIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggdHlwZSAhPSAoMSkgICkg
PyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJ0eXBlICE9ICgxKSIgLCAiQUNFRGlzdHJpYnV0aW9uLmNw
cCIsIDIzNCwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgCiAgaWYgKHR5cGUgIT0g
KDkpICkgewogICAgaWYgKGJveGVzKSBkZWxldGUgW10gYm94ZXM7CiAgICBib3hlcyA9IG5ldyBC
Qm94W25wXTsKICAgIAogICAgaWYgKHR5cGUgPT0gKDIpICkgCiAgICAgIHBhcnRpdGlvbl9vbmUo
d2Jib3gsIGJveGVzLCBucCwgKDApICk7CiAgICBlbHNlIGlmICh0eXBlID09ICgzKSApIAogICAg
ICBwYXJ0aXRpb25fb25lKHdiYm94LCBib3hlcywgbnAsICgxKSApOwogICAgZWxzZSBpZiAodHlw
ZSA9PSAoNCkgKSAKICAgICAgcGFydGl0aW9uX29uZSh3YmJveCwgYm94ZXMsIG5wLCAoMikgKTsK
ICAgIAogICAgZWxzZSBpZiAodHlwZSA9PSAoNSkgKSAKICAgICAgcGFydGl0aW9uX3R3byh3YmJv
eCwgYm94ZXMsIG5wLCAoMCkgLCAoMSkgKTsKICAgIGVsc2UgaWYgKHR5cGUgPT0gKDYpICkgCiAg
ICAgIHBhcnRpdGlvbl90d28od2Jib3gsIGJveGVzLCBucCwgKDEpICwgKDIpICk7CiAgICBlbHNl
IGlmICh0eXBlID09ICg3KSApIAogICAgICBwYXJ0aXRpb25fdHdvKHdiYm94LCBib3hlcywgbnAs
ICgwKSAsICgyKSApOwogICAgCiAgICBlbHNlIGlmICh0eXBlID09ICg4KSApIAogICAgICBwYXJ0
aXRpb25fYWxsKHdiYm94LCBib3hlcywgbnApOwogICAgZWxzZSB7CiAgICAgIGNlcnIgPDwgIlBh
cnRpdGlvbmVyIE5vdCBEZWZpbmVkICEiIDw8IGVuZGwgPDwgZmx1c2g7CiAgICAgIChzdGF0aWNf
Y2FzdDx2b2lkPiAgKCggMCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiMCIgLCAiQUNFRGlzdHJp
YnV0aW9uLmNwcCIsIDI1OSwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKICAgIH0KICB9
CiAgaWYgKG1lIDwgbnApIG15YmJveCA9IGJveGVzW21lXTsKICBlbHNlIG15YmJveC5zZXRlbXB0
eSgpOwp9CgogCiAKIAp2b2lkIEFDRURpc3RyaWJ1dGlvbjo6cGFydGl0aW9uVmFtcGlyZShCQm94
TGlzdCYgaW5iYmwsCgkJCQkgICAgICAgQkJveExpc3QqKiBiYm94YXJyYXksCgkJCQkgICAgICAg
Y29uc3QgaW50IGxldmVscywKCQkJCSAgICAgICBjb25zdCBpbnQgY2xldmVscywKCQkJCSAgICAg
ICBjb25zdCBpbnQgcmVmbGV2LAoJCQkJICAgICAgIGNvbnN0IGludCByYW5rLAoJCQkJICAgICAg
IGNvbnN0IGludCBucCwgCgkJCQkgICAgICAgY29uc3QgaW50IG1lLAoJCQkJICAgICAgIGNvbnN0
IGludCBtaW53LCAKCQkJCSAgICAgICBjb25zdCBpbnQgbWF4dywgCgkJCQkgICAgICAgY29uc3Qg
aW50IG1pbndrLCAKCQkJCSAgICAgICBjb25zdCBzaG9ydCogb2xhcCkKewojIDQ4MCAiQUNFRGlz
dHJpYnV0aW9uLmNwcCIKCiAgY2VyciA8PCAiVkFNUElSRSBub3QgYXZhaWxhYmxlICEiCiAgICAg
ICA8PCAiUGxlYXNlIHJlY29tcGlsZSBHckFDRSB3aXRoIFZhbXBpcmUgbGlicmFyaWVzIiAKICAg
ICAgIDw8IGVuZGwgPDwgZmx1c2g7CiAgZXhpdCAoLTEpOwoKfQoKIAogCnZvaWQgQUNFRGlzdHJp
YnV0aW9uOjpwYXJ0aXRpb25QYXJNZXRpcyhCQm94TGlzdCYgaW5iYmwsCgkJCQkJQkJveExpc3Qq
KiBiYm94YXJyYXksCgkJCQkJY29uc3QgaW50IGxldmVscywKCQkJCQljb25zdCBpbnQgY2xldmVs
cywKCQkJCQljb25zdCBpbnQgcmVmbGV2LAoJCQkJCWNvbnN0IGludCByYW5rLAoJCQkJCWNvbnN0
IGludCBucCwgCgkJCQkJY29uc3QgaW50IG1lLAoJCQkJCWNvbnN0IGludCBtaW53LCAKCQkJCQlj
b25zdCBpbnQgbWF4dywgCgkJCQkJY29uc3QgaW50IG1pbndrLCAKCQkJCQljb25zdCBzaG9ydCog
b2xhcCkKewojIDYwMCAiQUNFRGlzdHJpYnV0aW9uLmNwcCIKCiAgICBjZXJyIDw8ICJQYXJNZXRp
cyBub3QgYXZhaWxhYmxlICEiCgkgPDwgIlBsZWFzZSByZWNvbXBpbGUgR3JBQ0Ugd2l0aCBQYXJN
ZXRpcyBsaWJyYXJpZXMiIAoJIDw8IGVuZGwgPDwgZmx1c2g7CiAgICBleGl0ICgtMSk7Cgp9CiAK
IAp2b2lkIEFDRURpc3RyaWJ1dGlvbjo6cGFydGl0aW9uQ29tcG9zaXRlKEdyaWRVbml0TGlzdCom
IGdndWxPLAoJCQkJCSBHcmlkVW5pdExpc3QqJiBsZ3VsLAoJCQkJCSBjb25zdCBpbnQgbnAsIAoJ
CQkJCSBjb25zdCBpbnQgbWUsIAoJCQkJCSBjb25zdCBpbnQgbWludywgCgkJCQkJIGNvbnN0IGlu
dCBtYXh3LCAKCQkJCQkgY29uc3QgaW50IG1pbndrLCAKCQkJCQkgY29uc3Qgc2hvcnQqIG9sYXAs
CgkJCQkJIGNvbnN0IGludCBvcnBoYW5fZmxhZykKewoKICAgCiAgKHN0YXRpY19jYXN0PHZvaWQ+
ICAoKCBnZ3VsTy0+bnVtYmVyKCkgPiAwICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJnZ3VsTy0+
bnVtYmVyKCkgPiAwIiAsICJBQ0VEaXN0cmlidXRpb24uY3BwIiwgNjIxLCBfX1BSRVRUWV9GVU5D
VElPTl9fICksIDApKSkgOwogIAogICAKICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIG5wID4gMCAp
ID8gMCA6CShfX2Fzc2VydF9mYWlsICgibnAgPiAwIiAsICJBQ0VEaXN0cmlidXRpb24uY3BwIiwg
NjI0LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAKICAgCiAgCiAgaWYgKG1lIDwg
bnApIHsKICAgIGlmIChsZ3VsKSBsZ3VsLT5lbXB0eSgpOwogICAgZWxzZSB7CiAgICAgIGxndWwg
PSBuZXcgR3JpZFVuaXRMaXN0OwogICAgfQogIH0KCiAgIAogICAKCiAgR3JpZFVuaXRMaXN0IHRo
ZWdndWw7CiAgR3JpZFVuaXRMaXN0KiBnZ3VsID0gMDsKICBpZiAob3JwaGFuX2ZsYWcgPT0gKDEp
ICkgewogICAgZ2d1bCA9ICZ0aGVnZ3VsOwogICAgZ2d1bE8tPmxldmVsbGlzdCgqZ2d1bCk7CiAg
fQogIGVsc2UgewogICAgZ2d1bCA9IGdndWxPOwogIH0KCiAgdW5zaWduZWQgbG9uZyB3b3JrID0g
Z2V0X2xvYWQoKmdndWwsb2xhcCk7CiAgCiAgdW5zaWduZWQgbG9uZyBtaW53b3JrID0gKHVuc2ln
bmVkKSBtaW53azsKICB1bnNpZ25lZCBsb25nIHRocmVzaCA9IG1heChtaW53b3JrLCh1bnNpZ25l
ZCkoKDEuMCood29yay9ucCkpKzAuNSkpOwogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgY3VydGhy
ZXNoID0gdGhyZXNoOwogIAogIGludCBwID0gMCwgcGNudCA9IDA7CiAgdW5zaWduZWQgdG1wdyA9
IDAsIHcgPSAwOwogIAogIHJlZ2lzdGVyIEdyaWRVbml0ICp0bXBndSA9IGdndWwtPmZpcnN0KCk7
CiAgCgoKCgoKCiAgCiAgZm9yIChpbnQgY250PTA7dG1wZ3U7Y250KyssdG1wZ3U9Z2d1bC0+bmV4
dCgpKSB7CiAgICB3ICs9ICh0bXB3ID0gdG1wZ3UtPmd1V29yayhvbGFwKSk7CiAgICAKIyA2Nzgg
IkFDRURpc3RyaWJ1dGlvbi5jcHAiCgogICAgCiAgICBpZiAodyA8PSBjdXJ0aHJlc2gpIHsKICAg
ICAgCgogICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIHA8bnAgKSA/IDAgOgkoX19hc3NlcnRf
ZmFpbCAoInA8bnAiICwgIkFDRURpc3RyaWJ1dGlvbi5jcHAiLCA2ODMsIF9fUFJFVFRZX0ZVTkNU
SU9OX18gKSwgMCkpKSA7CgoKICAgICAgdG1wZ3UtPmd1U2V0T3duZXIocCk7IHBjbnQrKzsKICAg
ICAgaWYgKHAgPT0gbWUpICBsZ3VsLT5hZGQoKnRtcGd1KTsKICAgICAgIAogICAgICAgCiAgICB9
CiAgICBlbHNlIGlmICh3LWN1cnRocmVzaCA8IHRtcHcvOCkgewogICAgICAKCiAgICAgIChzdGF0
aWNfY2FzdDx2b2lkPiAgKCggcDxucCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgicDxucCIgLCAi
QUNFRGlzdHJpYnV0aW9uLmNwcCIsIDY5NCwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsK
CiAgICAgIHRtcGd1LT5ndVNldE93bmVyKHApOyBwY250Kys7CiAgICAgIGlmIChwID09IG1lKSAg
bGd1bC0+YWRkKCp0bXBndSk7CiAgICAgICAKICAgICAgcCsrOyBwY250ID0gMDsKICAgICAgY3Vy
dGhyZXNoID0gdyArIG1heChtaW53b3JrLCh1bnNpZ25lZCkoKDEuMCooKHdvcmstdykvKG5wLXAp
KSkrMC41KSk7CiAgICB9CiAgICBlbHNlIGlmICh0bXB3ID4gdGhyZXNoICYmIHRtcGd1LT5ndUV4
dGVudFZhbHVlKHRtcGd1LT5ndUNyc0xldigpKSA+IG1pbncpIHsKICAgICAgdyAtPSB0bXB3Owog
ICAgICBjbnQtLTsKICAgICAgaW50IG9sZHdvcmsgPSB3b3JrOwogICAgICBnZ3VsLT5kZWNvbXBv
c2UoKTsKICAgICAgd29yayA9IGdldF9sb2FkKCpnZ3VsLG9sYXApOwogICAgICAKIyA3MTcgIkFD
RURpc3RyaWJ1dGlvbi5jcHAiCgogICAgICAKICAgICAgdGhyZXNoID0gbWF4KG1pbndvcmssKHVu
c2lnbmVkKSgoMS4wKih3b3JrL25wKSkrMC41KSk7CiAgICAgIGN1cnRocmVzaCA9IGN1cnRocmVz
aCttYXgobWlud29yaywodW5zaWduZWQpKCgxLjAqKCh3b3JrLW9sZHdvcmspLyhucC1wKSkpKzAu
NSkpOwogICAgfQogICAgZWxzZSBpZiAocGNudCA9PSAwKSB7CiAgICAgIAoKICAgICAgKHN0YXRp
Y19jYXN0PHZvaWQ+ICAoKCBwPG5wICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJwPG5wIiAsICJB
Q0VEaXN0cmlidXRpb24uY3BwIiwgNzI1LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoK
ICAgICAgdG1wZ3UtPmd1U2V0T3duZXIocCk7IHBjbnQrKzsKICAgICAgaWYgKHAgPT0gbWUpICBs
Z3VsLT5hZGQoKnRtcGd1KTsKICAgICAgIAogICAgICBwKys7IHBjbnQgPSAwOwogICAgICBjdXJ0
aHJlc2ggPSB3ICsgbWF4KG1pbndvcmssKHVuc2lnbmVkKSgoMS4wKigod29yay13KS8obnAtcCkp
KSswLjUpKTsKICAgIH0KICAgIGVsc2UgIHsKICAgICAgcCsrOyBwY250ID0gMDsKICAgICAgCgog
ICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gICgoIHA8bnAgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAo
InA8bnAiICwgIkFDRURpc3RyaWJ1dGlvbi5jcHAiLCA3MzcsIF9fUFJFVFRZX0ZVTkNUSU9OX18g
KSwgMCkpKSA7CgogICAgICB0bXBndS0+Z3VTZXRPd25lcihwKTsKICAgICAgaWYgKHAgPT0gbWUp
IGxndWwtPmFkZCgqdG1wZ3UpOwogICAgICAgCiAgICAgICAKICAgICAgY3VydGhyZXNoID0gKHct
dG1wdykgKyBtYXgobWlud29yaywodW5zaWduZWQpKCgxLjAqKCh3b3JrLSh3LXRtcHcpKS8obnAt
cCkpKSswLjUpKTsKICAgICAgaWYgKHcgPj0gY3VydGhyZXNoKSB7CglwKys7IHBjbnQgPSAwOwoJ
aWYgKHAgPCBucCkKCSAgY3VydGhyZXNoID0gdyArIG1heChtaW53b3JrLCh1bnNpZ25lZCkoKDEu
MCooKHdvcmstdykvKG5wLXApKSkrMC41KSk7CiAgICAgIH0KICAgIH0KICB9CiAgIAogICAKICBp
ZiAob3JwaGFuX2ZsYWcgPT0gKDEpICkgewogICAgKmdndWxPID0gKmdndWw7CiAgfQp9CiAKIAp2
b2lkIEFDRURpc3RyaWJ1dGlvbjo6cGFydGl0aW9uQmxvY2tPbmUoY29uc3QgaW50IGF4aXMsCgkJ
CQkJR3JpZFVuaXRMaXN0KiYgZ2d1bCwKCQkJCQlHcmlkVW5pdExpc3QqJiBsZ3VsLAoJCQkJCWNv
bnN0IGludCBucCwgCgkJCQkJY29uc3QgaW50IG1lLCAKCQkJCQljb25zdCBpbnQgbWludywgCgkJ
CQkJY29uc3QgaW50IG1heHcsIAoJCQkJCWNvbnN0IGludCBtaW53aywgCgkJCQkJY29uc3Qgc2hv
cnQqIG9sYXApCnsKCiAgIAogIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggZ2d1bC0+bnVtYmVyKCkg
PiAwICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJnZ3VsLT5udW1iZXIoKSA+IDAiICwgIkFDRURp
c3RyaWJ1dGlvbi5jcHAiLCA3NzEsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7CiAgCiAg
IAogIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggbnAgPiAwICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwg
KCJucCA+IDAiICwgIkFDRURpc3RyaWJ1dGlvbi5jcHAiLCA3NzQsIF9fUFJFVFRZX0ZVTkNUSU9O
X18gKSwgMCkpKSA7CgogIAogIGlmIChib3hlcykgZGVsZXRlIFtdIGJveGVzOwogIGJveGVzID0g
bmV3IEJCb3hbbnBdOwogIAogIGNvbnN0IGludCBmbGV2ID0gKGdndWwtPmZpcnN0KCkpLT5ndUZp
bmVMZXYoKTsKICBCQm94TGlzdCB0bXBiYmw7CiAgZ2d1bC0+YmJveGxpc3QodG1wYmJsLCBmbGV2
LCAwLCAwKTsKICBCQm94IHdiYm94ID0gdG1wYmJsLnJlZHVjZSgpOwogIHBhcnRpdGlvbl9vbmUo
d2Jib3gsIGJveGVzLCBucCwgYXhpcyk7CiAgCiAgR3JpZFVuaXRMaXN0IHRtcGd1bDsKICBmb3Ig
KHJlZ2lzdGVyIGludCBwPTA7cDxucDtwKyspIHsKICAgIGdndWwtPmludGVyc2VjdChib3hlc1tw
XSwgZmxldiwgdG1wZ3VsLCAwKTsKICAgIEdyaWRVbml0TGlzdCB0bXBndWwoKmdndWwpOwogICAg
dG1wZ3VsICo9IGJveGVzW3BdOwogICAgZ2d1bC0+c2V0b3duZXIodG1wZ3VsLHApOwogICAgaWYg
KHAgPT0gbWUpIHsKICAgICAgaWYgKGxndWwpIHsKCWxndWwtPmVtcHR5KCk7CgkqbGd1bCA9IHRt
cGd1bDsKICAgICAgfQogICAgICBlbHNlIHsKCWxndWwgPSBuZXcgR3JpZFVuaXRMaXN0KHRtcGd1
bCk7CiAgICAgIH0KICAgICAgbGd1bC0+c2V0b3duZXIobWUpOwogICAgfSAKICB9Cn0KIAogCnZv
aWQgQUNFRGlzdHJpYnV0aW9uOjpwYXJ0aXRpb25CbG9ja1R3byhjb25zdCBpbnQgYXhpczEsIAoJ
CQkJCWNvbnN0IGludCBheGlzMiwKCQkJCQlHcmlkVW5pdExpc3QqJiBnZ3VsLAoJCQkJCUdyaWRV
bml0TGlzdComIGxndWwsCgkJCQkJY29uc3QgaW50IG5wLCAKCQkJCQljb25zdCBpbnQgbWUsIAoJ
CQkJCWNvbnN0IGludCBtaW53LCAKCQkJCQljb25zdCBpbnQgbWF4dywgCgkJCQkJY29uc3QgaW50
IG1pbndrLCAKCQkJCQljb25zdCBzaG9ydCogb2xhcCkKewoKICAgCiAgKHN0YXRpY19jYXN0PHZv
aWQ+ICAoKCBnZ3VsLT5udW1iZXIoKSA+IDAgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoImdndWwt
Pm51bWJlcigpID4gMCIgLCAiQUNFRGlzdHJpYnV0aW9uLmNwcCIsIDgxOSwgX19QUkVUVFlfRlVO
Q1RJT05fXyApLCAwKSkpIDsKICAKICAgCiAgKHN0YXRpY19jYXN0PHZvaWQ+ICAoKCBucCA+IDAg
KSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoIm5wID4gMCIgLCAiQUNFRGlzdHJpYnV0aW9uLmNwcCIs
IDgyMiwgX19QUkVUVFlfRlVOQ1RJT05fXyApLCAwKSkpIDsKCiAgCiAgaWYgKGJveGVzKSBkZWxl
dGUgW10gYm94ZXM7CiAgYm94ZXMgPSBuZXcgQkJveFtucF07CiAgCiAgY29uc3QgaW50IGZsZXYg
PSAoZ2d1bC0+Zmlyc3QoKSktPmd1RmluZUxldigpOwogIEJCb3hMaXN0IHRtcGJibDsKICBnZ3Vs
LT5iYm94bGlzdCh0bXBiYmwsIGZsZXYsIDAsIDApOwogIEJCb3ggd2Jib3ggPSB0bXBiYmwucmVk
dWNlKCk7CiAgcGFydGl0aW9uX3R3byh3YmJveCwgYm94ZXMsIG5wLCBheGlzMSwgYXhpczIpOwog
IAogIEdyaWRVbml0TGlzdCB0bXBndWw7CiAgZm9yIChyZWdpc3RlciBpbnQgcD0wO3A8bnA7cCsr
KSB7CiAgICBnZ3VsLT5pbnRlcnNlY3QoYm94ZXNbcF0sIGZsZXYsIHRtcGd1bCwgMCk7CiAgICBH
cmlkVW5pdExpc3QgdG1wZ3VsKCpnZ3VsKTsKICAgIHRtcGd1bCAqPSBib3hlc1twXTsKICAgIGdn
dWwtPnNldG93bmVyKHRtcGd1bCxwKTsKICAgIGlmIChwID09IG1lKSB7CiAgICAgIGlmIChsZ3Vs
KSB7CglsZ3VsLT5lbXB0eSgpOwoJKmxndWwgPSB0bXBndWw7CiAgICAgIH0KICAgICAgZWxzZSB7
CglsZ3VsID0gbmV3IEdyaWRVbml0TGlzdCh0bXBndWwpOwogICAgICB9CiAgICAgIGxndWwtPnNl
dG93bmVyKG1lKTsKICAgIH0gCiAgfQp9CiAKIAp2b2lkIEFDRURpc3RyaWJ1dGlvbjo6cGFydGl0
aW9uQmxvY2tBbGwoR3JpZFVuaXRMaXN0KiYgZ2d1bCwKCQkJCQlHcmlkVW5pdExpc3QqJiBsZ3Vs
LAoJCQkJCWNvbnN0IGludCBucCwgCgkJCQkJY29uc3QgaW50IG1lLCAKCQkJCQljb25zdCBpbnQg
bWludywgCgkJCQkJY29uc3QgaW50IG1heHcsIAoJCQkJCWNvbnN0IGludCBtaW53aywgCgkJCQkJ
Y29uc3Qgc2hvcnQqIG9sYXApCnsKCiAgIAogIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggZ2d1bC0+
bnVtYmVyKCkgPiAwICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJnZ3VsLT5udW1iZXIoKSA+IDAi
ICwgIkFDRURpc3RyaWJ1dGlvbi5jcHAiLCA4NjUsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkp
KSA7CiAgCiAgIAogIChzdGF0aWNfY2FzdDx2b2lkPiAgKCggbnAgPiAwICkgPyAwIDoJKF9fYXNz
ZXJ0X2ZhaWwgKCJucCA+IDAiICwgIkFDRURpc3RyaWJ1dGlvbi5jcHAiLCA4NjgsIF9fUFJFVFRZ
X0ZVTkNUSU9OX18gKSwgMCkpKSA7CgoKICBpZiAoYm94ZXMpIGRlbGV0ZSBib3hlczsKICBib3hl
cyA9IG5ldyBCQm94W25wXTsKICAKICBjb25zdCBpbnQgZmxldiA9IChnZ3VsLT5maXJzdCgpKS0+
Z3VGaW5lTGV2KCk7CiAgQkJveExpc3QgdG1wYmJsOwogIGdndWwtPmJib3hsaXN0KHRtcGJibCwg
ZmxldiwgMCwgMCk7CiAgQkJveCB3YmJveCA9IHRtcGJibC5yZWR1Y2UoKTsKICBwYXJ0aXRpb25f
YWxsKHdiYm94LCBib3hlcywgbnApOwogIAogIEdyaWRVbml0TGlzdCB0bXBndWw7CiAgZm9yIChy
ZWdpc3RlciBpbnQgcD0wO3A8bnA7cCsrKSB7CiAgICBnZ3VsLT5pbnRlcnNlY3QoYm94ZXNbcF0s
IGZsZXYsIHRtcGd1bCwgMCk7CiAgICBHcmlkVW5pdExpc3QgdG1wZ3VsKCpnZ3VsKTsKICAgIHRt
cGd1bCAqPSBib3hlc1twXTsKICAgIGdndWwtPnNldG93bmVyKHRtcGd1bCxwKTsKICAgIGlmIChw
ID09IG1lKSB7CiAgICAgIGlmIChsZ3VsKSB7CglsZ3VsLT5lbXB0eSgpOwoJKmxndWwgPSB0bXBn
dWw7CiAgICAgIH0KICAgICAgZWxzZSB7CglsZ3VsID0gbmV3IEdyaWRVbml0TGlzdCh0bXBndWwp
OwogICAgICB9CiAgICAgIGxndWwtPnNldG93bmVyKG1lKTsKICAgIH0gCiAgfQp9CiAKIAp2b2lk
IEFDRURpc3RyaWJ1dGlvbjo6cGFydGl0aW9uVXNlckRlZihHcmlkVW5pdExpc3QqJiBnZ3VsLAoJ
CQkJICAgICAgIEdyaWRVbml0TGlzdComIGxndWwsCgkJCQkgICAgICAgY29uc3QgaW50IG5wLCAK
CQkJCSAgICAgICBjb25zdCBpbnQgbWUsIAoJCQkJICAgICAgIGNvbnN0IGludCBtaW53LCAKCQkJ
CSAgICAgICBjb25zdCBpbnQgbWF4dywgCgkJCQkgICAgICAgY29uc3QgaW50IG1pbndrLCAKCQkJ
CSAgICAgICBjb25zdCBzaG9ydCogb2xhcCkKewoKICAgCiAgKHN0YXRpY19jYXN0PHZvaWQ+ICAo
KCBib3hlcyApID8gMCA6CShfX2Fzc2VydF9mYWlsICgiYm94ZXMiICwgIkFDRURpc3RyaWJ1dGlv
bi5jcHAiLCA5MTEsIF9fUFJFVFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7IAogIAogICAKICAoc3Rh
dGljX2Nhc3Q8dm9pZD4gICgoIGdndWwtPm51bWJlcigpID4gMCApID8gMCA6CShfX2Fzc2VydF9m
YWlsICgiZ2d1bC0+bnVtYmVyKCkgPiAwIiAsICJBQ0VEaXN0cmlidXRpb24uY3BwIiwgOTE0LCBf
X1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwogIAogICAKICAoc3RhdGljX2Nhc3Q8dm9pZD4g
ICgoIG5wID4gMCApID8gMCA6CShfX2Fzc2VydF9mYWlsICgibnAgPiAwIiAsICJBQ0VEaXN0cmli
dXRpb24uY3BwIiwgOTE3LCBfX1BSRVRUWV9GVU5DVElPTl9fICksIDApKSkgOwoKICAKICBjb25z
dCBpbnQgZmxldiA9IChnZ3VsLT5maXJzdCgpKS0+Z3VGaW5lTGV2KCk7CiAgQkJveExpc3QgdG1w
YmJsOwogIGdndWwtPmJib3hsaXN0KHRtcGJibCwgZmxldiwgMCwgMCk7CiAgQkJveCB3YmJveCA9
IHRtcGJibC5yZWR1Y2UoKTsKICBwYXJ0aXRpb25fYWxsKHdiYm94LCBib3hlcywgbnApOwogIAog
IEdyaWRVbml0TGlzdCB0bXBndWw7CiAgZm9yIChyZWdpc3RlciBpbnQgcD0wO3A8bnA7cCsrKSB7
CiAgICBnZ3VsLT5pbnRlcnNlY3QoYm94ZXNbcF0sIGZsZXYsIHRtcGd1bCwgMCk7CiAgICBHcmlk
VW5pdExpc3QgdG1wZ3VsKCpnZ3VsKTsKICAgIHRtcGd1bCAqPSBib3hlc1twXTsKICAgIGdndWwt
PnNldG93bmVyKHRtcGd1bCxwKTsKICAgIGlmIChwID09IG1lKSB7CiAgICAgIGlmIChsZ3VsKSB7
CglsZ3VsLT5lbXB0eSgpOwoJKmxndWwgPSB0bXBndWw7CiAgICAgIH0KICAgICAgZWxzZSB7Cgls
Z3VsID0gbmV3IEdyaWRVbml0TGlzdCh0bXBndWwpOwogICAgICB9CiAgICAgIGxndWwtPnNldG93
bmVyKG1lKTsKICAgIH0gCiAgfQp9CiAKIAogCgoKCgoKCgoKCgp2b2lkIHBhcnRpdGlvbl9vbmUo
Y29uc3QgQkJveCYgd2hvbGViYm94LCAKCQkgICBCQm94KiBib3hlcywgCgkJICAgY29uc3QgaW50
IG5wLCAKICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBkaW0pCnsKICAgCiAgIAogICAKICAg
CiAgY29uc3QgaW50IGV4dGVudCA9IHdob2xlYmJveC5leHRlbnRzKGRpbSk7CiAgCgogIChzdGF0
aWNfY2FzdDx2b2lkPiAgKCggZXh0ZW50ID49IG5wICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJl
eHRlbnQgPj0gbnAiICwgIkFDRURpc3RyaWJ1dGlvbi5jcHAiLCA5NjksIF9fUFJFVFRZX0ZVTkNU
SU9OX18gKSwgMCkpKSA7ICAKCiAgCiAgY29uc3QgaW50IGR4ID0gZXh0ZW50L25wOwogIGNvbnN0
IGludCBYdHJhID0gZXh0ZW50JW5wOwogIAogIGZvciAocmVnaXN0ZXIgaW50IHA9MDtwPG5wO3Ar
KykgewogICAgY29uc3QgaW50IGRsb3dlciA9IHAqZHggKyBtaW4oWHRyYSxwKTsKICAgIGNvbnN0
IGludCBkdXBwZXIgPSAobnAtcC0xKSpkeCArIG1heCgoWHRyYS1wLTEpLDApOwogICAgYm94ZXNb
cF0gPSB3aG9sZWJib3g7CiAgICBib3hlc1twXS5ncm93bG93ZXIoZGltLGRsb3dlcik7CiAgICBi
b3hlc1twXS5ncm93dXBwZXIoZGltLC1kdXBwZXIpOwogIH0KfQoKIAp2b2lkIHBhcnRpdGlvbl90
d28oY29uc3QgQkJveCYgd2hvbGViYm94LCAKCQkgICBCQm94KiBib3hlcywgCgkJICAgY29uc3Qg
aW50IG5wLCAKICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBkaW0xLCAKCQkgICBjb25zdCBp
bnQgZGltMikKewogICAKICBpbnQgbjEsbjI7CiAgCiAgIAogIG4xID0gbnA7CiAgbjIgPSAxOwog
IGlmIChuMSAlIDIgPT0gMCkgewogICAgd2hpbGUgKG4xICUgMiA9PSAwICYmIG4xID4gbjIKCSAg
ICYmIChhYnMobjEtbjIpID49IGFicyhuMS8yLW4yKjIpKSkgewogICAgICBuMSAvPSAyOwogICAg
ICBuMiAqPSAyOwogICAgfQogIH0gZWxzZSB7CiAgICB3aGlsZSAobjEgJSAzID09IDAgJiYgbjEg
PiBuMgoJICAgJiYgKGFicyhuMS1uMikgPj0gYWJzKG4xLzMtbjIqMykpKSB7CiAgICAgIG4xIC89
IDM7CiAgICAgIG4yICo9IDM7CiAgICB9CiAgfQogIAogIGNvbnN0IGludCByYW5rID0gd2hvbGVi
Ym94LnJhbms7CiAgY29uc3QgQ29vcmRzJiBnbGIgPSB3aG9sZWJib3gubG93ZXIoKTsKICAgCiAg
Y29uc3QgQ29vcmRzJiBzdGVwID0gd2hvbGViYm94LnN0ZXBzaXplKCk7CiAgY29uc3QgQ29vcmRz
JiBleHQgPSB3aG9sZWJib3guZXh0ZW50cygpOwogIAogIENvb3JkcyB0bXBlKGV4dCk7CiAgY29u
c3QgaW50IGxkMSA9ICh0bXBlKGRpbTEpID49IHRtcGUoZGltMikpID8gZGltMSA6IGRpbTI7IAog
IGNvbnN0IGludCBsZDIgPSAodG1wZShkaW0xKSA8IHRtcGUoZGltMikpID8gZGltMSA6IGRpbTI7
CiAgCiAgQ29vcmRzIHRtcHAocmFuaywwKTsKICB0bXBwKGRpbTEpID0gbjE7IHRtcHAoZGltMikg
PSBuMjsKICBjb25zdCBpbnQgbm4xID0gKHRtcHAoZGltMSkgPj0gdG1wcChkaW0yKSkgPyBkaW0x
IDogZGltMjsgCiAgY29uc3QgaW50IG5uMiA9ICh0bXBwKGRpbTEpIDwgdG1wcChkaW0yKSkgPyBk
aW0xIDogZGltMjsKICAKICB0bXBlKGxkMSkgPSB0bXBwKG5uMSk7CiAgdG1wZShsZDIpID0gdG1w
cChubjIpOwogIAogIG4xID0gdG1wZShkaW0xKTsKICBuMiA9IHRtcGUoZGltMik7CiAgCiAgIAog
IENvb3JkcyBkZWx0KHJhbmssMCk7IAogIGRlbHQoZGltMSkgPSAoZXh0KGRpbTEpL24xKTsKICBk
ZWx0KGRpbTIpID0gKGV4dChkaW0yKS9uMik7CiAgIAoKICAKICAgCiAgQ29vcmRzIGNvcihyYW5r
LDApOwogIGNvcihkaW0xKSA9IGV4dChkaW0xKSVuMTsKICBjb3IoZGltMikgPSBleHQoZGltMikl
bjI7CiAgIAoKICAKICAgCiAgZm9yIChyZWdpc3RlciBpbnQgcD0wO3A8bnA7cCsrKSBib3hlc1tw
XSA9IHdob2xlYmJveDsKICAKICBmb3IgKHJlZ2lzdGVyIGludCBpaT0wO2lpPG4xO2lpKyspIHsK
ICAgIGZvciAocmVnaXN0ZXIgaW50IGpqPTA7amo8bjI7amorKykgewogICAgICAgCiAgICAgIGlu
dCB3aGljaHAgPSBpaSArIGpqKm4xOwogICAgICAKICAgICAgQ29vcmRzIGMxKHJhbmssMCksIGMy
IChyYW5rLDApOwogICAgICAKICAgICAgYzEoZGltMSkgPSAoY29yKGRpbTEpID4gaWkpID8gMSA6
IDA7CiAgICAgIGMxKGRpbTIpID0gKGNvcihkaW0yKSA+IGpqKSA/IDEgOiAwOwogICAgICAKICAg
ICAgIAoKICAgICAgCiAgICAgIGMyKGRpbTEpID0gbWluKGNvcihkaW0xKSxpaSk7CiAgICAgIGMy
KGRpbTIpID0gbWluKGNvcihkaW0yKSxqaik7CiAgICAgIAogICAgICBDb29yZHMmIGxiID0gYm94
ZXNbd2hpY2hwXS5sb3dlcigpOwogICAgICBDb29yZHMmIHViID0gYm94ZXNbd2hpY2hwXS51cHBl
cigpOwogICAgICAKICAgICAgbGIoZGltMSkgPSBnbGIoZGltMSkgKyAoaWkgKiAoZGVsdChkaW0x
KSkgKyBjMihkaW0xKSkqc3RlcChkaW0xKTsKICAgICAgbGIoZGltMikgPSBnbGIoZGltMikgKyAo
amogKiAoZGVsdChkaW0yKSkgKyBjMihkaW0yKSkqc3RlcChkaW0yKTsKICAgICAgCiAgICAgIHVi
KGRpbTEpID0gbGIoZGltMSkgKyAoZGVsdChkaW0xKSArIGMxKGRpbTEpIC0gMSkqc3RlcChkaW0x
KTsKICAgICAgdWIoZGltMikgPSBsYihkaW0yKSArIChkZWx0KGRpbTIpICsgYzEoZGltMikgLSAx
KSpzdGVwKGRpbTIpOwogICAgfQogIH0KfQoKIAp2b2lkIHBhcnRpdGlvbl9hbGwoY29uc3QgQkJv
eCYgd2hvbGViYm94LCAKCQkgICBCQm94KiBib3hlcywgCgkJICAgY29uc3QgaW50IG5wKQp7CiAg
IAogIGludCBuMSxuMixuMzsKICAKICAgCiAgbjEgPSBucDsKICBuMiA9IDE7CiAgbjMgPSAxOwog
IGZvciAocmVnaXN0ZXIgaW50IGk9MDtpPDI7aSsrKSB7CiAgICBpbnQgdHdvZiA9IDA7CiAgICBp
ZiAobjEgJSAyID09IDApIHR3b2YgPSAxOwogICAgaWYgKHR3b2YpIHsKICAgICAgd2hpbGUgKG4x
ICUgMiA9PSAwICYmIG4xID4gbjIKCSAgICAgJiYgKGFicyhuMS1uMikgPj0gYWJzKG4xLzItbjIq
MikpKSB7CgluMSAvPSAyOwoJbjIgKj0gMjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgd2hp
bGUgKG4xICUgMyA9PSAwICYmIG4xID4gbjIKCSAgICAgJiYgKGFicyhuMS1uMikgPj0gYWJzKG4x
LzMtbjIqMykpKSB7CgluMSAvPSAzOwoJbjIgKj0gMzsKICAgICAgfQogICAgfQogICAgdHdvZiA9
IDA7CiAgICBpZiAobjIgJSAyID09IDApIHR3b2YgPSAxOwogICAgaWYgKHR3b2YpIHsKICAgICAg
d2hpbGUgKG4yICUgMiA9PSAwICYmIG4yID4gbjMKCSAgICAgJiYgKGFicyhuMi1uMykgPj0gYWJz
KG4yLzItbjMqMikpKSB7CgluMiAvPSAyOwoJbjMgKj0gMjsKICAgICAgfQogICAgfSBlbHNlIHsK
ICAgICAgd2hpbGUgKG4yICUgMyA9PSAwICYmIG4yID4gbjMKCSAgICAgJiYgKGFicyhuMi1uMykg
Pj0gYWJzKG4yLzMtbjMqMykpKSB7CgluMiAvPSAzOwoJbjMgKj0gMzsKICAgICAgfQogICAgfQog
IH0KICAgIAogIAogIGNvbnN0IGludCByYW5rID0gd2hvbGViYm94LnJhbms7CiAgY29uc3QgQ29v
cmRzJiBnbGIgPSB3aG9sZWJib3gubG93ZXIoKTsKICAgCiAgY29uc3QgQ29vcmRzJiBzdGVwID0g
d2hvbGViYm94LnN0ZXBzaXplKCk7CiAgY29uc3QgQ29vcmRzJiBleHQgPSB3aG9sZWJib3guZXh0
ZW50cygpOwogIAogIENvb3JkcyB0bXBlKGV4dCk7CiAgY29uc3QgaW50IGxkMSA9ICh0bXBlKDAp
ID4gdG1wZSgxKSkgPyAKICAgICgodG1wZSgwKSA+IHRtcGUoMikpID8gMCA6IDIpIDogCiAgICAo
KHRtcGUoMSkgPiB0bXBlKDIpID8gMSA6IDIpKTsKICB0bXBlKGxkMSkgPSAwOyAKICBjb25zdCBp
bnQgbGQyID0gKHRtcGUoMCkgPiB0bXBlKDEpKSA/IAogICAgKCh0bXBlKDApID4gdG1wZSgyKSkg
PyAwIDogMikgOiAKICAgICgodG1wZSgxKSA+IHRtcGUoMikgPyAxIDogMikpOwogIHRtcGUobGQy
KSA9IDA7IAogIGNvbnN0IGludCBsZDMgPSAodG1wZSgwKSA+IHRtcGUoMSkpID8gCiAgICAoKHRt
cGUoMCkgPiB0bXBlKDIpKSA/IDAgOiAyKSA6IAogICAgKCh0bXBlKDEpID4gdG1wZSgyKSA/IDEg
OiAyKSk7CiAgCiAgQ29vcmRzIHRtcHAocmFuaywwKTsKICB0bXBwKDApID0gbjE7IHRtcHAoMSkg
PSBuMjsgdG1wcCgyKSA9IG4zOyAgICAKICBjb25zdCBpbnQgbm4xID0gKHRtcHAoMCkgPiB0bXBw
KDEpKSA/IAogICAgKCh0bXBwKDApID4gdG1wcCgyKSkgPyAwIDogMikgOiAKICAgICgodG1wcCgx
KSA+IHRtcHAoMikgPyAxIDogMikpOwogIHRtcHAobm4xKSA9IDA7IAogIGNvbnN0IGludCBubjIg
PSAodG1wcCgwKSA+IHRtcHAoMSkpID8gCiAgICAoKHRtcHAoMCkgPiB0bXBwKDIpKSA/IDAgOiAy
KSA6IAogICAgKCh0bXBwKDEpID4gdG1wcCgyKSA/IDEgOiAyKSk7CiAgdG1wcChubjIpID0gMDsg
CiAgY29uc3QgaW50IG5uMyA9ICh0bXBwKDApID4gdG1wcCgxKSkgPyAKICAgICgodG1wcCgwKSA+
IHRtcHAoMikpID8gMCA6IDIpIDogCiAgICAoKHRtcHAoMSkgPiB0bXBwKDIpID8gMSA6IDIpKTsK
ICAKICB0bXBwKDApID0gbjE7IHRtcHAoMSkgPSBuMjsgdG1wcCgyKSA9IG4zOyAgICAKICB0bXBl
KGxkMSkgPSB0bXBwKG5uMSk7CiAgdG1wZShsZDIpID0gdG1wcChubjIpOwogIHRtcGUobGQzKSA9
IHRtcHAobm4zKTsKICAKICBuMSA9IHRtcGUoMCk7CiAgbjIgPSB0bXBlKDEpOwogIG4zID0gdG1w
ZSgyKTsKICAKICAgCiAgQ29vcmRzIGRlbHQocmFuaywwKTsKICBkZWx0KDApID0gKGV4dCgwKS9u
MSk7CiAgZGVsdCgxKSA9IChleHQoMSkvbjIpOwogIGRlbHQoMikgPSAoZXh0KDIpL24zKTsKICAg
CgoKICAKICAgCiAgQ29vcmRzIGNvcihyYW5rLDApOwogIGNvcigwKSA9ICAoZXh0KDApJW4xKTsK
ICBjb3IoMSkgPSAgKGV4dCgxKSVuMik7CiAgY29yKDIpID0gIChleHQoMiklbjMpOwogICAKCgog
IAoKCgoKCgogIAogICAKICBmb3IgKHJlZ2lzdGVyIGludCBwPTA7cDxucDtwKyspIGJveGVzW3Bd
ID0gd2hvbGViYm94OwogIAogIGZvciAocmVnaXN0ZXIgaW50IGlpPTA7aWk8bjE7aWkrKykgewog
ICAgZm9yIChyZWdpc3RlciBpbnQgamo9MDtqajxuMjtqaisrKSB7CiAgICAgIGZvciAocmVnaXN0
ZXIgaW50IGtrPTA7a2s8bjM7a2srKykgewoJIAoJaW50IHdoaWNocCA9IGlpICsgamoqbjEgKyBr
aypuMSpuMjsKCQoKCgoKCgoJCglDb29yZHMgYzEocmFuaywwKSwgYzIgKHJhbmssMCk7CgkKCWMx
KDApID0gKGNvcigwKSA+IGlpKSA/IDEgOiAwOwoJYzEoMSkgPSAoY29yKDEpID4gamopID8gMSA6
IDA7CgljMSgyKSA9IChjb3IoMikgPiBraykgPyAxIDogMDsKCQoJIAoKCgkKCWMyKDApID0gbWlu
KGNvcigwKSxpaSk7CgljMigxKSA9IG1pbihjb3IoMSksamopOwoJYzIoMikgPSBtaW4oY29yKDIp
LGtrKTsKCQoJQ29vcmRzJiBsYiA9IGJveGVzW3doaWNocF0ubG93ZXIoKTsKCUNvb3JkcyYgdWIg
PSBib3hlc1t3aGljaHBdLnVwcGVyKCk7CgkKCWxiKDApID0gZ2xiKDApICsgKGlpICogKGRlbHQo
MCkpICsgYzIoMCkpKnN0ZXAoMCk7CglsYigxKSA9IGdsYigxKSArIChqaiAqIChkZWx0KDEpKSAr
IGMyKDEpKSpzdGVwKDEpOwoJbGIoMikgPSBnbGIoMikgKyAoa2sgKiAoZGVsdCgyKSkgKyBjMigy
KSkqc3RlcCgyKTsKCQoJdWIoMCkgPSBsYigwKSArIChkZWx0KDApICsgYzEoMCkgLSAxKSpzdGVw
KDApOwoJdWIoMSkgPSBsYigxKSArIChkZWx0KDEpICsgYzEoMSkgLSAxKSpzdGVwKDEpOwoJdWIo
MikgPSBsYigyKSArIChkZWx0KDIpICsgYzEoMikgLSAxKSpzdGVwKDIpOwoJCgoKCgoJCiAgICAg
IH0KICAgIH0KICB9Cn0KCnZvaWQgcHdhbGtlcl9wYXJ0aXRpb24oY29uc3QgQkJveCYgd2hvbGVi
Ym94LCAKCQkgICAgICAgQkJveCogYm94ZXMsIAoJCSAgICAgICBjb25zdCBpbnQgbnApCnsKICBD
b29yZHMgZ2xiKHdob2xlYmJveC5sb3dlcigpKTsKICBDb29yZHMgZ3ViKHdob2xlYmJveC51cHBl
cigpKTsKICAgCiAgaW50IG54LG55LG56OwogIAogICAKICBueCA9IG5wOwogIG55ID0gMTsKICBu
eiA9IDE7CiAgZm9yIChpbnQgaT0wO2k8MjtpKyspIHsKICAgIGludCB0d29mID0gMDsKICAgIGlm
IChueCAlIDIgPT0gMCkgdHdvZiA9IDE7CiAgICBpZiAodHdvZikgewogICAgICB3aGlsZSAobngg
JSAyID09IDAgJiYgbnggPiBueQoJICAgICAmJiAoYWJzKG54LW55KSA+PSBhYnMobngvMi1ueSoy
KSkpIHsKCW54IC89IDI7CglueSAqPSAyOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB3aGls
ZSAobnggJSAzID09IDAgJiYgbnggPiBueQoJICAgICAmJiAoYWJzKG54LW55KSA+PSBhYnMobngv
My1ueSozKSkpIHsKCW54IC89IDM7CglueSAqPSAzOwogICAgICB9CiAgICB9CiAgICB0d29mID0g
MDsKICAgIGlmIChueSAlIDIgPT0gMCkgdHdvZiA9IDE7CiAgICBpZiAodHdvZikgewogICAgICB3
aGlsZSAobnkgJSAyID09IDAgJiYgbnkgPiBuegoJICAgICAmJiAoYWJzKG55LW56KSA+PSBhYnMo
bnkvMi1ueioyKSkpIHsKCW55IC89IDI7CglueiAqPSAyOwogICAgICB9CiAgICB9IGVsc2Ugewog
ICAgICB3aGlsZSAobnkgJSAzID09IDAgJiYgbnkgPiBuegoJICAgICAmJiAoYWJzKG55LW56KSA+
PSBhYnMobnkvMy1ueiozKSkpIHsKCW55IC89IDM7CglueiAqPSAzOwogICAgICB9CiAgICB9CiAg
fQogICAgCiAgCiAgIAogIEJCb3ggbXQoMywwKTsKICBmb3IgKGludCBwPTA7cDxucDtwKyspIGJv
eGVzW3BdID0gbXQ7CiAgCiAgaW50IGlpLGpqLGtrOwogIGludCAqZGVsdCA9IG5ldyBpbnRbM10s
ICpsYXlvdXQgPSBuZXcgaW50WzNdOwogIAogICAKICBsYXlvdXRbMF0gPSBueDsgbGF5b3V0WzFd
ID0gbnk7IGxheW91dFsyXSA9IG56OwogIGZvciAoaW50IG1tPTA7bW08MzttbSsrKSB7CiAgICBk
ZWx0W21tXSA9ICAoZ3ViKG1tKS1nbGIobW0pKS9sYXlvdXRbbW1dOwogIH0KICAKICBDb29yZHMg
bXlsYigzLDApLG15dWIoMywwKTsKICBmb3IgKGlpPTA7aWk8bng7aWkrKykKICAgIGZvciAoamo9
MDtqajxueTtqaisrKQogICAgICBmb3IgKGtrPTA7a2s8bno7a2srKykgewoJIAoJaW50IHdoaWNo
cCA9IGlpICsgamoqbnggKyBraypueCpueTsKCW15bGIoMCkgPSBkZWx0WzBdKmlpOwoJbXlsYigx
KSA9IGRlbHRbMV0qamo7CglteWxiKDIpID0gZGVsdFsyXSprazsKCQoJbXl1YigwKSA9IAoJICAo
aWkgIT0gbngtMSA/IGRlbHRbMF0qKGlpKzEpLTEgOiBndWIoMCkpOwoJbXl1YigxKSA9IAoJICAo
amogIT0gbnktMSA/IGRlbHRbMV0qKGpqKzEpLTEgOiBndWIoMSkpOwoJbXl1YigyKSA9IAoJICAo
a2sgIT0gbnotMSA/IGRlbHRbMl0qKGtrKzEpLTEgOiBndWIoMikpOwoJCglib3hlc1t3aGljaHBd
LnNldGxvd2VyKG15bGIpOwoJYm94ZXNbd2hpY2hwXS5zZXR1cHBlcihteXViKTsKCWJveGVzW3do
aWNocF0uc2V0c3RlcHNpemUoMCwxKTsKCWJveGVzW3doaWNocF0uc2V0c3RlcHNpemUoMSwxKTsK
CWJveGVzW3doaWNocF0uc2V0c3RlcHNpemUoMiwxKTsKICAgICAgfQp9Cg==


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]