c++/8472: Internal compiler error

sblack@stanford.edu sblack@stanford.edu
Tue Nov 5 17:16:00 GMT 2002


>Number:         8472
>Category:       c++
>Synopsis:       Internal compiler error
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Nov 05 17:16:00 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Stanley Black
>Release:        2.95.3
>Organization:
>Environment:
Sun Blade 2000 Solaris 8
>Description:
elaine23:~/cs140/base/vm> gmake
gmake -C SUN
gmake[1]: Entering directory `/afs/ir.stanford.edu/users/s/b/sblack/cs140/base/vm/SUN'
gcc -g -Wall -Wno-pmf-conversions -fwritable-strings -I../../bin -I../../filesys -I../../userprog -I../../threads -I../../vm -I../../lib -I../.. -I/usr/class/cs140/nachos/machine -DTHREADS -DUSER_PROGRAM -DVM -DUSE_TLB -DFILESYS_NEEDED -DFILESYS_STUB -D_REENTRANT -DSPARC -DSOLARIS -DHOST_IS_BIG_ENDIAN -DHOST_SVR4 -DCHANGED -save-temps -c /usr/class/cs140/nachos/machine/interrupt.cc
In file included from ../../threads/main.h:21,
                 from /usr/class/cs140/nachos/machine/interrupt.cc:25:
../../userprog/userkernel.h:56: Internal compiler error 19970302.
../../userprog/userkernel.h:56: Please submit a full bug report.
../../userprog/userkernel.h:56: See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
gmake[1]: *** [interrupt.o] Error 1
gmake[1]: Leaving directory `/afs/ir.stanford.edu/users/s/b/sblack/cs140/base/vm/SUN'
gmake: *** [sun] Error 2
elaine23:~/cs140/base/vm> 
>How-To-Repeat:

>Fix:

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

IyAxICIvdXNyL2NsYXNzL2NzMTQwL25hY2hvcy9tYWNoaW5lL2ludGVycnVwdC5jYyIKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiMgMSAiLi4vLi4vbGliL2NvcHly
aWdodC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDIzICIvdXNyL2NsYXNzL2NzMTQw
L25hY2hvcy9tYWNoaW5lL2ludGVycnVwdC5jYyIgMgoKIyAxICIvdXNyL2NsYXNzL2NzMTQwL25h
Y2hvcy9tYWNoaW5lL2ludGVycnVwdC5oIiAxCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCgojIDEgIi4uLy4uL2xpYi9j
b3B5cmlnaHQuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzOCAiL3Vzci9jbGFzcy9j
czE0MC9uYWNob3MvbWFjaGluZS9pbnRlcnJ1cHQuaCIgMgoKIyAxICIuLi8uLi9saWIvbGlzdC5o
IiAxCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKIyAxICIuLi8uLi9saWIvY29weXJpZ2h0Lmgi
IDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTYgIi4uLy4uL2xpYi9saXN0LmgiIDIKCiMg
MSAiLi4vLi4vbGliL2RlYnVnLmgiIDEKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCgojIDEgIi4u
Ly4uL2xpYi9jb3B5cmlnaHQuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxNiAiLi4v
Li4vbGliL2RlYnVnLmgiIDIKCiMgMSAiLi4vLi4vbGliL3V0aWxpdHkuaCIgMQogCiAKIAogCiAK
IAoKCgoKIyAxICIuLi8uLi9saWIvY29weXJpZ2h0LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiMgMTEgIi4uLy4uL2xpYi91dGlsaXR5LmgiIDIKCgogCgoKCgogCgoKCgogCgoKCiAKIAog
CiAKIAogCiAKCnR5cGVkZWYgdm9pZCAoKlZvaWRGdW5jdGlvblB0cikodm9pZCAqYXJnKTsgCnR5
cGVkZWYgdm9pZCAoKlZvaWROb0FyZ0Z1bmN0aW9uUHRyKSgpOyAKCgojIDE3ICIuLi8uLi9saWIv
ZGVidWcuaCIgMgoKIyAxICIuLi8uLi9saWIvc3lzZGVwLmgiIDEKIAogCiAKIAogCiAKIAogCiAK
CgoKCiMgMSAiLi4vLi4vbGliL2NvcHlyaWdodC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgojIDE0ICIuLi8uLi9saWIvc3lzZGVwLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAxIDMgNAogCgoKCgogCiAKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc3RkbGliLmgJ
MS40Nwk5OS8xMS8wMyBTTUkiCQoKIyAxICIvdXNyL2luY2x1ZGUvaXNvL3N0ZGxpYl9pc28uaCIg
MSAzIDQKIAoKCgoKIAogCgogCiAKIAoKIAoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAo
IylzdGRsaWJfaXNvLmgJMS4yCTk5LzEyLzIxIFNNSSIgCgojIDEgIi91c3IvaW5jbHVkZS9zeXMv
ZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAogCgoKCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgj
KWZlYXR1cmVfdGVzdHMuaAkxLjE4CTk5LzA3LzI2IFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5
cy9pc2FfZGVmcy5oIiAxIDMgNAogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpaXNhX2RlZnMu
aAkxLjIwCTk5LzA1LzA0IFNNSSIKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpl
eHRlcm4gIkMiIHsKCgoKIAoKCgoKCiMgMjY3ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgi
IDMgNAoKCiAKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCiAKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKIAoKCgojIDM2NiAiL3Vzci9pbmNsdWRlL3N5
cy9pc2FfZGVmcy5oIiAzIDQKCgogCgoKCgoKCgoKCgoKfQoKCgojIDE1ICIvdXNyL2luY2x1ZGUv
c3lzL2ZlYXR1cmVfdGVzdHMuaCIgMiAzIDQKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgp9CgoKCiMgMzAgIi91c3Iv
aW5jbHVkZS9pc28vc3RkbGliX2lzby5oIiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJu
IHVuc2lnbmVkIGNoYXIJX19jdHlwZVtdOwoKCgoKCgoKCgoKdHlwZWRlZglzdHJ1Y3QgewoJaW50
CXF1b3Q7CglpbnQJcmVtOwp9IGRpdl90OwoKdHlwZWRlZiBzdHJ1Y3QgewoJbG9uZwlxdW90OwoJ
bG9uZwlyZW07Cn0gbGRpdl90OwoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCAgICBzaXplX3Q7
CQkgCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBsb25nCXdjaGFyX3Q7CgoKCgoKZXh0ZXJu
IHZvaWQgYWJvcnQodm9pZCk7CmV4dGVybiBpbnQgYWJzKGludCk7CmV4dGVybiBpbnQgYXRleGl0
KHZvaWQgKCopKHZvaWQpKTsKZXh0ZXJuIGRvdWJsZSBhdG9mKGNvbnN0IGNoYXIgKik7CmV4dGVy
biBpbnQgYXRvaShjb25zdCBjaGFyICopOwpleHRlcm4gbG9uZyBpbnQgYXRvbChjb25zdCBjaGFy
ICopOwpleHRlcm4gdm9pZCAqYnNlYXJjaChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6
ZV90LCBzaXplX3QsCglpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CmV4dGVy
biB2b2lkICpjYWxsb2Moc2l6ZV90LCBzaXplX3QpOwpleHRlcm4gZGl2X3QgZGl2KGludCwgaW50
KTsKZXh0ZXJuIHZvaWQgZXhpdChpbnQpOwpleHRlcm4gdm9pZCBmcmVlKHZvaWQgKik7CmV4dGVy
biBjaGFyICpnZXRlbnYoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMobG9uZyk7
CmV4dGVybiBsZGl2X3QgbGRpdihsb25nLCBsb25nKTsKZXh0ZXJuIHZvaWQgKm1hbGxvYyhzaXpl
X3QpOwpleHRlcm4gaW50IG1ibGVuKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHNpemVf
dCBtYnN0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBt
YnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiB2b2lkIHFzb3J0
KHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsCglpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9p
ZCAqKSk7CmV4dGVybiBpbnQgcmFuZCh2b2lkKTsKZXh0ZXJuIHZvaWQgKnJlYWxsb2Modm9pZCAq
LCBzaXplX3QpOwpleHRlcm4gdm9pZCBzcmFuZCh1bnNpZ25lZCBpbnQpOwpleHRlcm4gZG91Ymxl
IHN0cnRvZChjb25zdCBjaGFyICosIGNoYXIgKiopOwpleHRlcm4gbG9uZyBpbnQgc3RydG9sKGNv
bnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRv
dWwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4gaW50IHN5c3RlbShjb25zdCBj
aGFyICopOwpleHRlcm4gaW50IHdjdG9tYihjaGFyICosIHdjaGFyX3QpOwpleHRlcm4gc2l6ZV90
IHdjc3RvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwoKIyAxNTIgIi91c3Iv
aW5jbHVkZS9pc28vc3RkbGliX2lzby5oIiAzIDQKCgoKCgoKCn0KCgoKIyAxOCAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgoKCgoKIAoKCgojIDYxICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDMgNAoKCgpleHRlcm4gIkMiIHsKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJbG9uZyBsb25nCXF1
b3Q7Cglsb25nIGxvbmcJcmVtOwp9IGxsZGl2X3Q7CgoKCgoKCgp0eXBlZGVmIGxvbmcJdWlkX3Q7
CQkJIAoKCgoKCiAKIyA5NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKCgogCiMgMTA1ICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoKCgoKZXh0ZXJuIGludCByYW5kX3IodW5zaWduZWQg
aW50ICopOwoKCmV4dGVybiB2b2lkIF9leGl0aGFuZGxlKHZvaWQpOwoKCgoKZXh0ZXJuIGRvdWJs
ZSBkcmFuZDQ4KHZvaWQpOwpleHRlcm4gZG91YmxlIGVyYW5kNDgodW5zaWduZWQgc2hvcnQgKik7
CmV4dGVybiBsb25nIGpyYW5kNDgodW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiB2b2lkIGxjb25n
NDgodW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiBsb25nIGxyYW5kNDgodm9pZCk7CmV4dGVybiBs
b25nIG1yYW5kNDgodm9pZCk7CmV4dGVybiBsb25nIG5yYW5kNDgodW5zaWduZWQgc2hvcnQgKik7
CmV4dGVybiB1bnNpZ25lZCBzaG9ydCAqc2VlZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4g
dm9pZCBzcmFuZDQ4KGxvbmcpOwpleHRlcm4gaW50IHB1dGVudihjaGFyICopOwpleHRlcm4gdm9p
ZCBzZXRrZXkoY29uc3QgY2hhciAqKTsKCgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQJc3NpemVfdDsJ
IAoKCgpleHRlcm4gdm9pZCBzd2FiKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzc2l6ZV90KTsKCgoK
CgpleHRlcm4gaW50CW1rc3RlbXAoY2hhciAqKTsKCgoKCmV4dGVybiBpbnQJbWtzdGVtcDY0KGNo
YXIgKik7CgoKCgoKZXh0ZXJuIGxvbmcgYTY0bChjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAq
ZWN2dChkb3VibGUsIGludCwgaW50ICosIGludCAqKTsKZXh0ZXJuIGNoYXIgKmZjdnQoZG91Ymxl
LCBpbnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpnY3Z0KGRvdWJsZSwgaW50LCBjaGFy
ICopOwpleHRlcm4gaW50IGdldHN1Ym9wdChjaGFyICoqLCBjaGFyICpjb25zdCAqLCBjaGFyICoq
KTsKZXh0ZXJuIGludCAgZ3JhbnRwdChpbnQpOwpleHRlcm4gY2hhciAqaW5pdHN0YXRlKHVuc2ln
bmVkLCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBjaGFyICpsNjRhKGxvbmcpOwpleHRlcm4gY2hh
ciAqbWt0ZW1wKGNoYXIgKik7CmV4dGVybiBjaGFyICpwdHNuYW1lKGludCk7CmV4dGVybiBsb25n
IHJhbmRvbSh2b2lkKTsKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoKGNvbnN0IGNoYXIgKiwgY2hhciAq
KTsKZXh0ZXJuIGNoYXIgKnNldHN0YXRlKGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lkIHNyYW5k
b20odW5zaWduZWQpOwpleHRlcm4gaW50IHR0eXNsb3Qodm9pZCk7CmV4dGVybiBpbnQgIHVubG9j
a3B0KGludCk7CmV4dGVybiB2b2lkICp2YWxsb2Moc2l6ZV90KTsKCgoKCmV4dGVybiBpbnQgZHVw
MihpbnQsIGludCk7CmV4dGVybiBjaGFyICpxZWN2dChsb25nIGRvdWJsZSwgaW50LCBpbnQgKiwg
aW50ICopOwpleHRlcm4gY2hhciAqcWZjdnQobG9uZyBkb3VibGUsIGludCwgaW50ICosIGludCAq
KTsKZXh0ZXJuIGNoYXIgKnFnY3Z0KGxvbmcgZG91YmxlLCBpbnQsIGNoYXIgKik7CmV4dGVybiBj
aGFyICpnZXRjd2QoY2hhciAqLCBzaXplX3QpOwpleHRlcm4gY29uc3QgY2hhciAqZ2V0ZXhlY25h
bWUodm9pZCk7CmV4dGVybiBjaGFyICpnZXRsb2dpbih2b2lkKTsKZXh0ZXJuIGludCBnZXRvcHQo
aW50LCBjaGFyICpjb25zdCAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqb3B0YXJnOwpl
eHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CmV4dGVybiBjaGFyICpnZXRwYXNzKGNv
bnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpnZXRwYXNzcGhyYXNlKGNvbnN0IGNoYXIgKik7CmV4
dGVybiBpbnQgZ2V0cHcodWlkX3QsIGNoYXIgKik7CmV4dGVybiBpbnQgaXNhdHR5KGludCk7CmV4
dGVybiB2b2lkICptZW1hbGlnbihzaXplX3QsIHNpemVfdCk7CmV4dGVybiBjaGFyICp0dHluYW1l
KGludCk7CgoKZXh0ZXJuIGxvbmcgbG9uZyBhdG9sbChjb25zdCBjaGFyICopOwpleHRlcm4gbG9u
ZyBsb25nIGxsYWJzKGxvbmcgbG9uZyk7CmV4dGVybiBsbGRpdl90IGxsZGl2KGxvbmcgbG9uZywg
bG9uZyBsb25nKTsKZXh0ZXJuIGNoYXIgKmxsdG9zdHIobG9uZyBsb25nLCBjaGFyICopOwpleHRl
cm4gbG9uZyBsb25nIHN0cnRvbGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4g
dW5zaWduZWQgbG9uZyBsb25nIHN0cnRvdWxsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsK
ZXh0ZXJuIGNoYXIgKnVsbHRvc3RyKHVuc2lnbmVkIGxvbmcgbG9uZywgY2hhciAqKTsKCgoKCiMg
MzA1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoKCgp9CgoKCiMgMTUgIi4uLy4uL2xpYi9z
eXNkZXAuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMSAzIDQKIAogCgogCiAKIAoK
IAoKCgoKIAoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc3RkaW8uaAkxLjc4CTk5LzEyLzA4IFNN
SSIJCgojIDEgIi91c3IvaW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDEgMyA0CiAKIAoKIAogCiAK
CiAKCgoKCiAKCgoKCgoKCgoKCgogCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdGRpb19pc28u
aAkxLjIJOTkvMTAvMjUgU01JIgogCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3ZhX2xpc3QuaCIg
MSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXZhX2xpc3QuaAkxLjEyCTk5LzA1LzA0
IFNNSSIKCiAKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgp0eXBlZGVmIHZvaWQgKl9fdmFfbGlz
dDsKCgoKCgp9CgoKCiMgMzYgIi91c3IvaW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDIgMyA0Cgoj
IDEgIi91c3IvaW5jbHVkZS9zdGRpb190YWcuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVu
dAkiQCgjKXN0ZGlvX3RhZy5oCTEuMwk5OC8wNC8yMCBTTUkiCgoKZXh0ZXJuICJDIiB7CgoKCgoK
CgoKdHlwZWRlZiBzdHJ1Y3QgRklMRSAgX19GSUxFOwoKCgp9CgoKCiMgMzcgIi91c3IvaW5jbHVk
ZS9pc28vc3RkaW9faXNvLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgi
IDEgMyA0CiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdGRpb19pbXBsLmgJMS44CTk5LzA2
LzEwIFNNSSIKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCiMgMzYgIi91c3IvaW5jbHVkZS9z
dGRpb19pbXBsLmgiIDMgNAoKCnN0cnVjdCBGSUxFIAkgCnsKCgoKCglzc2l6ZV90CQlfY250Owkg
Cgl1bnNpZ25lZCBjaGFyCSpfcHRyOwkgCgoJdW5zaWduZWQgY2hhcgkqX2Jhc2U7CSAKCXVuc2ln
bmVkIGNoYXIJX2ZsYWc7CSAKCXVuc2lnbmVkIGNoYXIJX2ZpbGU7CSAKCXVuc2lnbmVkCV9fb3Jp
ZW50YXRpb246MjsgIAoJdW5zaWduZWQJX19pb25vbG9jazoxOwkgCgl1bnNpZ25lZAlfX2ZpbGxl
cjo1Owp9OwoKCgoKfQoKCgojIDM4ICIvdXNyL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAyIDMg
NAoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKIAoKCgoKCnR5cGVkZWYJbG9uZyBsb25nCV9f
bG9uZ2xvbmdfdDsKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZglfX0ZJTEUgRklMRTsKCgoKCgoKCgoK
CgoKdHlwZWRlZiBsb25nCQlmcG9zX3Q7CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIF9fRklMRQlfX2lvYlsyMCBdOwoKCgoK
CgoKCgoKCgoKCgoKZXh0ZXJuIGludAlyZW1vdmUoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludAly
ZW5hbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRQkqdG1wZmlsZSh2
b2lkKTsKZXh0ZXJuIGNoYXIJKnRtcG5hbShjaGFyICopOwpleHRlcm4gaW50CWZjbG9zZShGSUxF
ICopOwpleHRlcm4gaW50CWZmbHVzaChGSUxFICopOwpleHRlcm4gRklMRQkqZm9wZW4oY29uc3Qg
Y2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRQkqZnJlb3Blbihjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIHZvaWQJc2V0YnVmKEZJTEUgKiwgY2hhciAq
KTsKZXh0ZXJuIGludAlzZXR2YnVmKEZJTEUgKiwgY2hhciAqLCBpbnQsIHNpemVfdCk7CiAKZXh0
ZXJuIGludAlmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogCmV4dGVybiBpbnQJ
ZnNjYW5mKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogCmV4dGVybiBpbnQJcHJpbnRmKGNv
bnN0IGNoYXIgKiwgLi4uKTsKIApleHRlcm4gaW50CXNjYW5mKGNvbnN0IGNoYXIgKiwgLi4uKTsK
IApleHRlcm4gaW50CXNwcmludGYoY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CiAKZXh0ZXJu
IGludAlzc2NhbmYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQJ
dmZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQJdnBy
aW50Zihjb25zdCBjaGFyICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQJdnNwcmludGYoY2hhciAq
LCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQJZmdldGMoRklMRSAqKTsKZXh0
ZXJuIGNoYXIJKmZnZXRzKGNoYXIgKiwgaW50LCBGSUxFICopOwpleHRlcm4gaW50CWZwdXRjKGlu
dCwgRklMRSAqKTsKZXh0ZXJuIGludAlmcHV0cyhjb25zdCBjaGFyICosIEZJTEUgKik7CgoKZXh0
ZXJuIGludAlnZXRjKEZJTEUgKik7CmV4dGVybiBpbnQJcHV0YyhpbnQsIEZJTEUgKik7CgoKCmV4
dGVybiBpbnQJZ2V0Y2hhcih2b2lkKTsKZXh0ZXJuIGludAlwdXRjaGFyKGludCk7CgpleHRlcm4g
Y2hhcgkqZ2V0cyhjaGFyICopOwpleHRlcm4gaW50CXB1dHMoY29uc3QgY2hhciAqKTsKZXh0ZXJu
IGludAl1bmdldGMoaW50LCBGSUxFICopOwpleHRlcm4gc2l6ZV90CWZyZWFkKHZvaWQgKiwgc2l6
ZV90LCBzaXplX3QsIEZJTEUgKik7CmV4dGVybiBzaXplX3QJZndyaXRlKGNvbnN0IHZvaWQgKiwg
c2l6ZV90LCBzaXplX3QsIEZJTEUgKik7CmV4dGVybiBpbnQJZmdldHBvcyhGSUxFICosIGZwb3Nf
dCAqKTsKZXh0ZXJuIGludAlmc2VlayhGSUxFICosIGxvbmcsIGludCk7CmV4dGVybiBpbnQJZnNl
dHBvcyhGSUxFICosIGNvbnN0IGZwb3NfdCAqKTsKZXh0ZXJuIGxvbmcJZnRlbGwoRklMRSAqKTsK
ZXh0ZXJuIHZvaWQJcmV3aW5kKEZJTEUgKik7CgoKZXh0ZXJuIHZvaWQJY2xlYXJlcnIoRklMRSAq
KTsKZXh0ZXJuIGludAlmZW9mKEZJTEUgKik7CmV4dGVybiBpbnQJZmVycm9yKEZJTEUgKik7Cgpl
eHRlcm4gdm9pZAlwZXJyb3IoY29uc3QgY2hhciAqKTsKCgpleHRlcm4gaW50CV9fZmlsYnVmKEZJ
TEUgKik7CmV4dGVybiBpbnQJX19mbHNidWYoaW50LCBGSUxFICopOwoKCiMgMjc1ICIvdXNyL2lu
Y2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAzIDQKCgoKCgoKCgojIDMzMSAiL3Vzci9pbmNsdWRlL2lz
by9zdGRpb19pc28uaCIgMyA0CgoKCgoKfQoKCgojIDIyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg
MiAzIDQKCgogCgoKCgoKCgogCgoKCiMgODEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgoK
ZXh0ZXJuICJDIiB7CgoKCgoKCnR5cGVkZWYgbG9uZwkJb2ZmX3Q7CgoKCgoKCgp0eXBlZGVmIF9f
bG9uZ2xvbmdfdAlvZmY2NF90OwoKCgoKCgoKCgp0eXBlZGVmIF9fbG9uZ2xvbmdfdAlmcG9zNjRf
dDsKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiB1bnNpZ25lZCBjaGFyCSBfc2li
dWZbXSwgX3NvYnVmW107CgoKIAojIDE3NiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoKCgpl
eHRlcm4gdW5zaWduZWQgY2hhcgkqX2J1ZmVuZHRhYltdOwpleHRlcm4gRklMRQkJKl9sYXN0YnVm
OwoKCiAKIyAyMDYgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgoKCgpleHRlcm4gY2hhcgkq
dG1wbmFtX3IoY2hhciAqKTsKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyKEZJTEUgKiwgY2hhciAq
LCBzaXplX3QpOwpleHRlcm4gaW50IHNldGxpbmVidWYoRklMRSAqKTsKCgoKCiAKZXh0ZXJuIGlu
dAlzbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOwoKCgoKZXh0ZXJu
IGludAl2c25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KTsK
CgogCgoKCgoKZXh0ZXJuIEZJTEUJKmZkb3BlbihpbnQsIGNvbnN0IGNoYXIgKik7CmV4dGVybiBj
aGFyCSpjdGVybWlkKGNoYXIgKik7CmV4dGVybiBpbnQJZmlsZW5vKEZJTEUgKik7CgoKCiAKCgoK
CmV4dGVybiB2b2lkCWZsb2NrZmlsZShGSUxFICopOwpleHRlcm4gaW50CWZ0cnlsb2NrZmlsZShG
SUxFICopOwpleHRlcm4gdm9pZAlmdW5sb2NrZmlsZShGSUxFICopOwpleHRlcm4gaW50CWdldGNf
dW5sb2NrZWQoRklMRSAqKTsKZXh0ZXJuIGludAlnZXRjaGFyX3VubG9ja2VkKHZvaWQpOwpleHRl
cm4gaW50CXB1dGNfdW5sb2NrZWQoaW50LCBGSUxFICopOwpleHRlcm4gaW50CXB1dGNoYXJfdW5s
b2NrZWQoaW50KTsKCgoKIAoKCgoKZXh0ZXJuIEZJTEUJKnBvcGVuKGNvbnN0IGNoYXIgKiwgY29u
c3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIJKmN1c2VyaWQoY2hhciAqKTsKZXh0ZXJuIGNoYXIJKnRl
bXBuYW0oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50CWdldG9wdChpbnQs
IGNoYXIgKmNvbnN0ICosIGNvbnN0IGNoYXIgKik7CgpleHRlcm4gaW50CWdldHN1Ym9wdChjaGFy
ICoqLCBjaGFyICpjb25zdCAqLCBjaGFyICoqKTsKCmV4dGVybiBjaGFyCSpvcHRhcmc7CmV4dGVy
biBpbnQJb3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsKZXh0ZXJuIGludAlnZXR3KEZJTEUgKik7CmV4
dGVybiBpbnQJcHV0dyhpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQJcGNsb3NlKEZJTEUgKik7CgoK
CiAKCgoKZXh0ZXJuIGludAlmc2Vla28oRklMRSAqLCBvZmZfdCwgaW50KTsKZXh0ZXJuIG9mZl90
CWZ0ZWxsbyhGSUxFICopOwoKCiAKCgoKCgpleHRlcm4gRklMRQkqZm9wZW42NChjb25zdCBjaGFy
ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFCSpmcmVvcGVuNjQoY29uc3QgY2hhciAqLCBj
b25zdCBjaGFyICosIEZJTEUgKik7CmV4dGVybiBGSUxFCSp0bXBmaWxlNjQodm9pZCk7CmV4dGVy
biBpbnQJZmdldHBvczY0KEZJTEUgKiwgZnBvczY0X3QgKik7CmV4dGVybiBpbnQJZnNldHBvczY0
KEZJTEUgKiwgY29uc3QgZnBvczY0X3QgKik7CmV4dGVybiBpbnQJZnNlZWtvNjQoRklMRSAqLCBv
ZmY2NF90LCBpbnQpOwpleHRlcm4gb2ZmNjRfdAlmdGVsbG82NChGSUxFICopOwoKCiMgMzY2ICIv
dXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CgoKCgoKCgoKCgoKCgoKCiMgMzg5ICIvdXNyL2luY2x1
ZGUvc3RkaW8uaCIgMyA0CgoKCgoKCgoKCn0KCgoKIyAxNiAiLi4vLi4vbGliL3N5c2RlcC5oIiAy
CgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCgoK
I3ByYWdtYSBpZGVudAkiQCgjKXN0cmluZy5oCTEuMjQJOTkvMDgvMTAgU01JIgkKCiMgMSAiL3Vz
ci9pbmNsdWRlL2lzby9zdHJpbmdfaXNvLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCiAKCgoK
CgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc3RyaW5nX2lzby5oCTEuMgk5OS8xMS8wOSBT
TUkiCiAKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGlu
dCBtZW1jbXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiB2b2lk
ICptZW1jcHkodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiB2b2lkICptZW1t
b3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCAqbWVtc2V0KHZv
aWQgKiwgaW50LCBzaXplX3QpOwpleHRlcm4gY2hhciAqc3RyY2F0KGNoYXIgKiwgY29uc3QgY2hh
ciAqKTsKZXh0ZXJuIGludCBzdHJjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRl
cm4gY2hhciAqc3RyY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBzdHJjb2xs
KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIHNpemVfdCBzdHJjc3BuKGNvbnN0
IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cmVycm9yKGludCk7CmV4dGVy
biBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJuY2F0KGNoYXIg
KiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gaW50IHN0cm5jbXAoY29uc3QgY2hhciAq
LCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJuY3B5KGNoYXIgKiwgY29u
c3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJ0b2soY2hhciAqLCBjb25zdCBjaGFyICopOwpl
eHRlcm4gc2l6ZV90IHN0cnhmcm0oY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiMgMTEx
ICIvdXNyL2luY2x1ZGUvaXNvL3N0cmluZ19pc28uaCIgMyA0CgpleHRlcm4gdm9pZCAqbWVtY2hy
KGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwpleHRlcm4gY2hhciAqc3RyY2hyKGNvbnN0IGNo
YXIgKiwgaW50KTsKZXh0ZXJuIGNoYXIgKnN0cnBicmsoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICopOwpleHRlcm4gY2hhciAqc3RycmNocihjb25zdCBjaGFyICosIGludCk7CmV4dGVybiBjaGFy
ICpzdHJzdHIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwoKCiMgMTQ0ICIvdXNyL2luY2x1
ZGUvaXNvL3N0cmluZ19pc28uaCIgMyA0CgoKCgoKCgp9CgoKCiMgMTggIi91c3IvaW5jbHVkZS9z
dHJpbmcuaCIgMiAzIDQKCgogCgoKCiMgNDggIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CgoK
CmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gY2hhciAqc3RydG9rX3IoY2hhciAqLCBjb25zdCBj
aGFyICosIGNoYXIgKiopOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkodm9pZCAqLCBjb25zdCB2
b2lkICosIGludCwgc2l6ZV90KTsKCgoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwoaW50KTsKZXh0
ZXJuIGludCBmZnMoaW50KTsKZXh0ZXJuIGludCBzdHJjYXNlY21wKGNvbnN0IGNoYXIgKiwgY29u
c3QgY2hhciAqKTsKZXh0ZXJuIGludCBzdHJuY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHNpemVfdCBzdHJsY3B5KGNoYXIgKiwgY29uc3QgY2hhciAq
LCBzaXplX3QpOwpleHRlcm4gc2l6ZV90IHN0cmxjYXQoY2hhciAqLCBjb25zdCBjaGFyICosIHNp
emVfdCk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1cChjb25zdCBjaGFyICopOwoKCiMgMTEwICIv
dXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNAoKCgp9CgoKCiMgMTcgIi4uLy4uL2xpYi9zeXNkZXAu
aCIgMgoKCiAKZXh0ZXJuIHZvaWQgQWJvcnQoKTsKZXh0ZXJuIHZvaWQgRXhpdChpbnQgZXhpdENv
ZGUpOwpleHRlcm4gdm9pZCBEZWxheShpbnQgc2Vjb25kcyk7CgogCmV4dGVybiB2b2lkIENhbGxP
blVzZXJBYm9ydCh2b2lkICgqY2xlYW51cCkoaW50KSk7CgogCmV4dGVybiB2b2lkIFJhbmRvbUlu
aXQodW5zaWduZWQgc2VlZCk7CmV4dGVybiB1bnNpZ25lZCBpbnQgUmFuZG9tTnVtYmVyKCk7Cgog
CiAKZXh0ZXJuIGNoYXIgKkFsbG9jQm91bmRlZEFycmF5KGludCBzaXplKTsKZXh0ZXJuIHZvaWQg
RGVhbGxvY0JvdW5kZWRBcnJheShjaGFyICpwLCBpbnQgc2l6ZSk7CgogCiAKZXh0ZXJuIGJvb2wg
UG9sbEZpbGUoaW50IGZkKTsKCiAKIApleHRlcm4gaW50IE9wZW5Gb3JXcml0ZShjaGFyICpuYW1l
KTsKZXh0ZXJuIGludCBPcGVuRm9yUmVhZFdyaXRlKGNoYXIgKm5hbWUsIGJvb2wgY3Jhc2hPbkVy
cm9yKTsKZXh0ZXJuIHZvaWQgUmVhZChpbnQgZmQsIGNoYXIgKmJ1ZmZlciwgaW50IG5CeXRlcyk7
CmV4dGVybiBpbnQgUmVhZFBhcnRpYWwoaW50IGZkLCBjaGFyICpidWZmZXIsIGludCBuQnl0ZXMp
OwpleHRlcm4gdm9pZCBXcml0ZUZpbGUoaW50IGZkLCBjaGFyICpidWZmZXIsIGludCBuQnl0ZXMp
OwpleHRlcm4gdm9pZCBMc2VlayhpbnQgZmQsIGludCBvZmZzZXQsIGludCB3aGVuY2UpOwpleHRl
cm4gaW50IFRlbGwoaW50IGZkKTsKZXh0ZXJuIHZvaWQgQ2xvc2UoaW50IGZkKTsKZXh0ZXJuIGJv
b2wgVW5saW5rKGNoYXIgKm5hbWUpOwoKIAogCmV4dGVybiAiQyIgewppbnQgYXRvaShjb25zdCBj
aGFyICpzdHIpOwpkb3VibGUgYXRvZihjb25zdCBjaGFyICpzdHIpOwppbnQgYWJzKGludCBpKTsK
fQoKIyA2OSAiLi4vLi4vbGliL3N5c2RlcC5oIgoKCgoKCgoKCiMgMTggIi4uLy4uL2xpYi9kZWJ1
Zy5oIiAyCgoKIAoKY29uc3QgY2hhciBkYmdBbGwgPSAnKyc7CQkgCmNvbnN0IGNoYXIgZGJnVGhy
ZWFkID0gJ3QnOwkJIApjb25zdCBjaGFyIGRiZ1N5bmNoID0gJ3MnOwkJIApjb25zdCBjaGFyIGRi
Z0ludCA9ICdpJzsgCQkgCmNvbnN0IGNoYXIgZGJnTWFjaCA9ICdtJzsgCQkgCmNvbnN0IGNoYXIg
ZGJnRGlzayA9ICdkJzsgCQkgCmNvbnN0IGNoYXIgZGJnRmlsZSA9ICdmJzsgCQkgCmNvbnN0IGNo
YXIgZGJnQWRkciA9ICdhJzsgCQkgCmNvbnN0IGNoYXIgZGJnTmV0ID0gJ24nOyAJCSAKCmNsYXNz
IERlYnVnIHsKICBwdWJsaWM6CiAgICBEZWJ1ZyhjaGFyICpmbGFnTGlzdCk7CgogICAgYm9vbCBJ
c0VuYWJsZWQoY2hhciBmbGFnKTsKCiAgcHJpdmF0ZToKICAgIGNoYXIgKmVuYWJsZUZsYWdzOwkJ
IAp9OwoKZXh0ZXJuIERlYnVnICpkZWJ1ZzsKCgogCiAKIAogCgoKCgogCiAKIAogCiAKIAogCiAK
CgoKCgoKIAogCiAKIAogCiAKIAogCiAKCgoKCgoKCgojIDE3ICIuLi8uLi9saWIvbGlzdC5oIiAy
CgoKIAogCiAKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIExpc3RFbGVtZW50IHsK
ICBwdWJsaWM6CiAgICBMaXN0RWxlbWVudChUIGl0bSk7IAkgCiAgICBMaXN0RWxlbWVudCAqbmV4
dDsJICAgICAJIAogICAgVCBpdGVtOyAJICAgCSAgICAgCSAKfTsKCiAKIAogCiAKIAoKdGVtcGxh
dGUgPGNsYXNzIFQ+CmNsYXNzIExpc3RJdGVyYXRvcjsKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFz
cyBMaXN0IHsKICBwdWJsaWM6CiAgICBMaXN0KCk7CQkJIAogICAgdmlydHVhbCB+TGlzdCgpOwkJ
IAoKICAgIHZpcnR1YWwgdm9pZCBQcmVwZW5kKFQgaXRlbSk7IAogICAgdmlydHVhbCB2b2lkIEFw
cGVuZChUIGl0ZW0pOyAgCgogICAgVCBGcm9udCgpIHsgcmV0dXJuIGZpcnN0LT5pdGVtOyB9CiAg
ICAJCQkJIAoJCQkJIAogICAgVCBSZW1vdmVGcm9udCgpOyAJCSAKICAgIHZvaWQgUmVtb3ZlKFQg
aXRlbSk7IAkgCgogICAgYm9vbCBJc0luTGlzdChUIGl0ZW0pIGNvbnN0OyAKCiAgICB1bnNpZ25l
ZCBpbnQgTnVtSW5MaXN0KCkgeyByZXR1cm4gbnVtSW5MaXN0O307CiAgICAJCQkJIAogICAgYm9v
bCBJc0VtcHR5KCkgeyByZXR1cm4gKG51bUluTGlzdCA9PSAwKTsgfTsKICAgIAkJCQkgCgogICAg
dm9pZCBBcHBseSh2b2lkICgqZikoVCkpIGNvbnN0OyAKICAgIAkJCQkgCgogICAgdmlydHVhbCB2
b2lkIFNhbml0eUNoZWNrKCkgY29uc3Q7CQoJCQkJIAogICAgdm9pZCBTZWxmVGVzdChUICpwLCBp
bnQgbnVtRW50cmllcyk7CgkJCQkgCgogIHByb3RlY3RlZDoKICAgIExpc3RFbGVtZW50PFQ+ICpm
aXJzdDsgIAkgCiAgICBMaXN0RWxlbWVudDxUPiAqbGFzdDsJIAogICAgaW50IG51bUluTGlzdDsJ
CSAKCmZyaWVuZCBMaXN0SXRlcmF0b3I8VD47Cn07CgogCiAKIAogCiAKIAogCiAKIAoKdGVtcGxh
dGUgPGNsYXNzIFQ+CmNsYXNzIFNvcnRlZExpc3QgOiBwdWJsaWMgTGlzdDxUPiB7CiAgcHVibGlj
OgogICAgU29ydGVkTGlzdChpbnQgKCpjb21wKShUIHgsIFQgeSkpIDogTGlzdDxUPigpIHsgY29t
cGFyZSA9IGNvbXA7fTsKICAgIH5Tb3J0ZWRMaXN0KCkge307CQkgCgogICAgdm9pZCBJbnNlcnQo
VCBpdGVtKTsgCSAKCiAgICB2b2lkIFNhbml0eUNoZWNrKCkgY29uc3Q7CSAKICAgIHZvaWQgU2Vs
ZlRlc3QoVCAqcCwgaW50IG51bUVudHJpZXMpOwoJCQkJIAoKICBwcml2YXRlOgogICAgaW50ICgq
Y29tcGFyZSkoVCB4LCBUIHkpOwkgCgogICAgdm9pZCBQcmVwZW5kKFQgaXRlbSkgeyBJbnNlcnQo
aXRlbSk7IH0gICAKCQkJCSAgICAgICAgICAgICAgCiAgICB2b2lkIEFwcGVuZChUIGl0ZW0pIHsg
SW5zZXJ0KGl0ZW0pOyB9ICAgIAoKfTsKCiAKIAogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBU
PgpjbGFzcyBMaXN0SXRlcmF0b3IgewogIHB1YmxpYzoKICAgIExpc3RJdGVyYXRvcihMaXN0PFQ+
ICpsaXN0KSB7IGN1cnJlbnQgPSBsaXN0LT5maXJzdDsgfSAKCQkJCSAKCiAgICBib29sIElzRG9u
ZSgpIHsgcmV0dXJuIGN1cnJlbnQgPT0gMCA7IH07CgkJCQkgCgogICAgVCBJdGVtKCkgeyBpZiAo
ICFJc0RvbmUoKSApIHt9IGVsc2UgeyBwcmludGYoIkFzc2VydGlvbiBmYWlsZWQ6IGxpbmUgJWQg
ZmlsZSAlc1xuIiwgMTMwLCAiLi4vLi4vbGliL2xpc3QuaCIpOyBBYm9ydCgpOyB9IDsgcmV0dXJu
IGN1cnJlbnQtPml0ZW07IH07CgkJCQkgCgogICAgdm9pZCBOZXh0KCkgeyBjdXJyZW50ID0gY3Vy
cmVudC0+bmV4dDsgfTsJCQoJCQkJIAoKICBwcml2YXRlOgogICAgTGlzdEVsZW1lbnQ8VD4gKmN1
cnJlbnQ7CSAKfTsKCiMgMSAiLi4vLi4vbGliL2xpc3QuY2MiIDEKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCgojIDEgIi4uLy4uL2xpYi9jb3B5cmlnaHQuaCIgMQogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIyAxOSAiLi4vLi4vbGliL2xpc3QuY2MiIDIKCgogCiAKIAogCiAKIAoK
dGVtcGxhdGUgPGNsYXNzIFQ+Ckxpc3RFbGVtZW50PFQ+OjpMaXN0RWxlbWVudChUIGl0bSkKewog
ICAgIGl0ZW0gPSBpdG07CiAgICAgbmV4dCA9IDAgOwkgCn0KCgogCiAKIAogCiAKCnRlbXBsYXRl
IDxjbGFzcyBUPgpMaXN0PFQ+OjpMaXN0KCkKeyAKICAgIGZpcnN0ID0gbGFzdCA9IDAgOyAKICAg
IG51bUluTGlzdCA9IDA7Cn0KCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBUPgpMaXN0PFQ+Ojp+
TGlzdCgpCnsgCiAgICBpZiAoIElzRW1wdHkoKSApIHt9IGVsc2UgeyBwcmludGYoIkFzc2VydGlv
biBmYWlsZWQ6IGxpbmUgJWQgZmlsZSAlc1xuIiwgNTcsICIuLi8uLi9saWIvbGlzdC5jYyIpOyBB
Ym9ydCgpOyB9IDsJCSAKfQoKIAogCiAKIAogCiAKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIFQ+
CnZvaWQKTGlzdDxUPjo6QXBwZW5kKFQgaXRlbSkKewogICAgTGlzdEVsZW1lbnQ8VD4gKmVsZW1l
bnQgPSBuZXcgTGlzdEVsZW1lbnQ8VD4oaXRlbSk7CgogICAgaWYgKCAhSXNJbkxpc3QoaXRlbSkg
KSB7fSBlbHNlIHsgcHJpbnRmKCJBc3NlcnRpb24gZmFpbGVkOiBsaW5lICVkIGZpbGUgJXNcbiIs
IDc3LCAiLi4vLi4vbGliL2xpc3QuY2MiKTsgQWJvcnQoKTsgfSA7CiAgICBpZiAoSXNFbXB0eSgp
KSB7CQkgCglmaXJzdCA9IGVsZW1lbnQ7CglsYXN0ID0gZWxlbWVudDsKICAgIH0gZWxzZSB7CQkJ
IAoJbGFzdC0+bmV4dCA9IGVsZW1lbnQ7CglsYXN0ID0gZWxlbWVudDsKICAgIH0KICAgIG51bUlu
TGlzdCsrOwogICAgaWYgKCBJc0luTGlzdChpdGVtKSApIHt9IGVsc2UgeyBwcmludGYoIkFzc2Vy
dGlvbiBmYWlsZWQ6IGxpbmUgJWQgZmlsZSAlc1xuIiwgODYsICIuLi8uLi9saWIvbGlzdC5jYyIp
OyBBYm9ydCgpOyB9IDsKfQoKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIFQ+CnZvaWQKTGlzdDxU
Pjo6UHJlcGVuZChUIGl0ZW0pCnsKICAgIExpc3RFbGVtZW50PFQ+ICplbGVtZW50ID0gbmV3IExp
c3RFbGVtZW50PFQ+KGl0ZW0pOwoKICAgIGlmICggIUlzSW5MaXN0KGl0ZW0pICkge30gZWxzZSB7
IHByaW50ZigiQXNzZXJ0aW9uIGZhaWxlZDogbGluZSAlZCBmaWxlICVzXG4iLCAxMDAsICIuLi8u
Li9saWIvbGlzdC5jYyIpOyBBYm9ydCgpOyB9IDsKICAgIGlmIChJc0VtcHR5KCkpIHsJCSAKCWZp
cnN0ID0gZWxlbWVudDsKCWxhc3QgPSBlbGVtZW50OwogICAgfSBlbHNlIHsJCQkgCgllbGVtZW50
LT5uZXh0ID0gZmlyc3Q7CglmaXJzdCA9IGVsZW1lbnQ7CiAgICB9CiAgICBudW1Jbkxpc3QrKzsK
ICAgIGlmICggSXNJbkxpc3QoaXRlbSkgKSB7fSBlbHNlIHsgcHJpbnRmKCJBc3NlcnRpb24gZmFp
bGVkOiBsaW5lICVkIGZpbGUgJXNcbiIsIDEwOSwgIi4uLy4uL2xpYi9saXN0LmNjIik7IEFib3J0
KCk7IH0gOwp9CgogCiAKIAogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBUPgpUCkxpc3Q8VD46
OlJlbW92ZUZyb250KCkKewogICAgTGlzdEVsZW1lbnQ8VD4gKmVsZW1lbnQgPSBmaXJzdDsKICAg
IFQgdGhpbmc7CgogICAgaWYgKCAhSXNFbXB0eSgpICkge30gZWxzZSB7IHByaW50ZigiQXNzZXJ0
aW9uIGZhaWxlZDogbGluZSAlZCBmaWxlICVzXG4iLCAxMjgsICIuLi8uLi9saWIvbGlzdC5jYyIp
OyBBYm9ydCgpOyB9IDsKCiAgICB0aGluZyA9IGZpcnN0LT5pdGVtOwogICAgaWYgKGZpcnN0ID09
IGxhc3QpIHsJIAogICAgICAgIGZpcnN0ID0gMCA7CglsYXN0ID0gMCA7CiAgICB9IGVsc2Ugewog
ICAgICAgIGZpcnN0ID0gZWxlbWVudC0+bmV4dDsKICAgIH0KICAgIG51bUluTGlzdC0tOwogICAg
ZGVsZXRlIGVsZW1lbnQ7CiAgICByZXR1cm4gdGhpbmc7Cn0KCiAKIAogCiAKCnRlbXBsYXRlIDxj
bGFzcyBUPgp2b2lkCkxpc3Q8VD46OlJlbW92ZShUIGl0ZW0pCnsKICAgIExpc3RFbGVtZW50PFQ+
ICpwcmV2LCAqcHRyOwogICAgVCByZW1vdmVkOwoKICAgIGlmICggSXNJbkxpc3QoaXRlbSkgKSB7
fSBlbHNlIHsgcHJpbnRmKCJBc3NlcnRpb24gZmFpbGVkOiBsaW5lICVkIGZpbGUgJXNcbiIsIDE1
NCwgIi4uLy4uL2xpYi9saXN0LmNjIik7IEFib3J0KCk7IH0gOwoKICAgICAKICAgIGlmIChpdGVt
ID09IGZpcnN0LT5pdGVtKSB7CQogICAgICAgIHJlbW92ZWQgPSBSZW1vdmVGcm9udCgpOwogICAg
ICAgIGlmICggaXRlbSA9PSByZW1vdmVkICkge30gZWxzZSB7IHByaW50ZigiQXNzZXJ0aW9uIGZh
aWxlZDogbGluZSAlZCBmaWxlICVzXG4iLCAxNTksICIuLi8uLi9saWIvbGlzdC5jYyIpOyBBYm9y
dCgpOyB9IDsKICAgIH0gZWxzZSB7CglwcmV2ID0gZmlyc3Q7CiAgICAgICAgZm9yIChwdHIgPSBm
aXJzdC0+bmV4dDsgcHRyICE9IDAgOyBwcmV2ID0gcHRyLCBwdHIgPSBwdHItPm5leHQpIHsKICAg
ICAgICAgICAgaWYgKGl0ZW0gPT0gcHRyLT5pdGVtKSB7CgkJcHJldi0+bmV4dCA9IHB0ci0+bmV4
dDsKCQlpZiAocHJldi0+bmV4dCA9PSAwICkgewoJCSAgICBsYXN0ID0gcHJldjsKCQl9CgkJZGVs
ZXRlIHB0cjsKCQludW1Jbkxpc3QtLTsKCQlicmVhazsKCSAgICB9CiAgICAgICAgfQoJaWYgKCBw
dHIgIT0gMCAgKSB7fSBlbHNlIHsgcHJpbnRmKCJBc3NlcnRpb24gZmFpbGVkOiBsaW5lICVkIGZp
bGUgJXNcbiIsIDE3MywgIi4uLy4uL2xpYi9saXN0LmNjIik7IEFib3J0KCk7IH0gOwkgCiAgICB9
CiAgIGlmICggIUlzSW5MaXN0KGl0ZW0pICkge30gZWxzZSB7IHByaW50ZigiQXNzZXJ0aW9uIGZh
aWxlZDogbGluZSAlZCBmaWxlICVzXG4iLCAxNzUsICIuLi8uLi9saWIvbGlzdC5jYyIpOyBBYm9y
dCgpOyB9IDsKfQoKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIFQ+CmJvb2wKTGlzdDxUPjo6SXNJ
bkxpc3QoVCBpdGVtKSBjb25zdAp7IAogICAgTGlzdEVsZW1lbnQ8VD4gKnB0cjsKCiAgICBmb3Ig
KHB0ciA9IGZpcnN0OyBwdHIgIT0gMCA7IHB0ciA9IHB0ci0+bmV4dCkgewogICAgICAgIGlmIChp
dGVtID09IHB0ci0+aXRlbSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZSA7CiAgICAgICAgfQog
ICAgfQogICAgcmV0dXJuIGZhbHNlIDsKfQoKCiAKIAogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3Mg
VD4Kdm9pZApMaXN0PFQ+OjpBcHBseSh2b2lkICgqZnVuYykoVCkpIGNvbnN0CnsgCiAgICBMaXN0
RWxlbWVudDxUPiAqcHRyOwoKICAgIGZvciAocHRyID0gZmlyc3Q7IHB0ciAhPSAwIDsgcHRyID0g
cHRyLT5uZXh0KSB7CiAgICAgICAgKCpmdW5jKShwdHItPml0ZW0pOwogICAgfQp9CgoKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkClNvcnRlZExpc3Q8VD46
Okluc2VydChUIGl0ZW0pCnsKICAgIExpc3RFbGVtZW50PFQ+ICplbGVtZW50ID0gbmV3IExpc3RF
bGVtZW50PFQ+KGl0ZW0pOwogICAgTGlzdEVsZW1lbnQ8VD4gKnB0cjsJCSAKCiAgICBpZiAoICFJ
c0luTGlzdChpdGVtKSApIHt9IGVsc2UgeyBwcmludGYoIkFzc2VydGlvbiBmYWlsZWQ6IGxpbmUg
JWQgZmlsZSAlc1xuIiwgMjM3LCAiLi4vLi4vbGliL2xpc3QuY2MiKTsgQWJvcnQoKTsgfSA7CiAg
ICBpZiAoSXNFbXB0eSgpKSB7CQkJIAogICAgICAgIGZpcnN0ID0gZWxlbWVudDsKICAgICAgICBs
YXN0ID0gZWxlbWVudDsKICAgIH0gZWxzZSBpZiAoY29tcGFyZShpdGVtLCBmaXJzdC0+aXRlbSkg
PCAwKSB7ICAgCgllbGVtZW50LT5uZXh0ID0gZmlyc3Q7CglmaXJzdCA9IGVsZW1lbnQ7CiAgICB9
IGVsc2UgewkJIAogICAgICAgIGZvciAocHRyID0gZmlyc3Q7IHB0ci0+bmV4dCAhPSAwIDsgcHRy
ID0gcHRyLT5uZXh0KSB7CiAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIHB0ci0+bmV4dC0+
aXRlbSkgPCAwKSB7CgkJZWxlbWVudC0+bmV4dCA9IHB0ci0+bmV4dDsKCSAgICAgICAgcHRyLT5u
ZXh0ID0gZWxlbWVudDsKCQludW1Jbkxpc3QrKzsKCQlyZXR1cm47CgkgICAgfQoJfQoJbGFzdC0+
bmV4dCA9IGVsZW1lbnQ7CQkgCglsYXN0ID0gZWxlbWVudDsKICAgIH0KICAgIG51bUluTGlzdCsr
OwogICAgaWYgKCBJc0luTGlzdChpdGVtKSApIHt9IGVsc2UgeyBwcmludGYoIkFzc2VydGlvbiBm
YWlsZWQ6IGxpbmUgJWQgZmlsZSAlc1xuIiwgMjU3LCAiLi4vLi4vbGliL2xpc3QuY2MiKTsgQWJv
cnQoKTsgfSA7Cn0KCiAKIAogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkIApMaXN0
PFQ+OjpTYW5pdHlDaGVjaygpIGNvbnN0CnsKICAgIExpc3RFbGVtZW50PFQ+ICpwdHI7CiAgICBp
bnQgbnVtRm91bmQ7CgogICAgaWYgKGZpcnN0ID09IDAgKSB7CglpZiAoIChudW1Jbkxpc3QgPT0g
MCkgJiYgKGxhc3QgPT0gMCApICkge30gZWxzZSB7IHByaW50ZigiQXNzZXJ0aW9uIGZhaWxlZDog
bGluZSAlZCBmaWxlICVzXG4iLCAyNzYsICIuLi8uLi9saWIvbGlzdC5jYyIpOyBBYm9ydCgpOyB9
IDsKICAgIH0gZWxzZSBpZiAoZmlyc3QgPT0gbGFzdCkgewoJaWYgKCAobnVtSW5MaXN0ID09IDEp
ICYmIChsYXN0LT5uZXh0ID09IDAgKSApIHt9IGVsc2UgeyBwcmludGYoIkFzc2VydGlvbiBmYWls
ZWQ6IGxpbmUgJWQgZmlsZSAlc1xuIiwgMjc4LCAiLi4vLi4vbGliL2xpc3QuY2MiKTsgQWJvcnQo
KTsgfSA7CiAgICB9IGVsc2UgewogICAgICAgIGZvciAobnVtRm91bmQgPSAxLCBwdHIgPSBmaXJz
dDsgcHRyICE9IGxhc3Q7IHB0ciA9IHB0ci0+bmV4dCkgewoJICAgIG51bUZvdW5kKys7CiAgICAg
ICAgICAgIGlmICggbnVtRm91bmQgPD0gbnVtSW5MaXN0ICkge30gZWxzZSB7IHByaW50ZigiQXNz
ZXJ0aW9uIGZhaWxlZDogbGluZSAlZCBmaWxlICVzXG4iLCAyODIsICIuLi8uLi9saWIvbGlzdC5j
YyIpOyBBYm9ydCgpOyB9IDsJIAogICAgICAgIH0KICAgICAgICBpZiAoIG51bUZvdW5kID09IG51
bUluTGlzdCApIHt9IGVsc2UgeyBwcmludGYoIkFzc2VydGlvbiBmYWlsZWQ6IGxpbmUgJWQgZmls
ZSAlc1xuIiwgMjg0LCAiLi4vLi4vbGliL2xpc3QuY2MiKTsgQWJvcnQoKTsgfSA7CiAgICAgICAg
aWYgKCBsYXN0LT5uZXh0ID09IDAgICkge30gZWxzZSB7IHByaW50ZigiQXNzZXJ0aW9uIGZhaWxl
ZDogbGluZSAlZCBmaWxlICVzXG4iLCAyODUsICIuLi8uLi9saWIvbGlzdC5jYyIpOyBBYm9ydCgp
OyB9IDsKICAgIH0KfQoKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIFQ+CnZvaWQgCkxpc3Q8VD46
OlNlbGZUZXN0KFQgKnAsIGludCBudW1FbnRyaWVzKQp7CiAgICBpbnQgaTsKICAgIExpc3RJdGVy
YXRvcjxUPiAqaXRlcmF0b3IgPSBuZXcgTGlzdEl0ZXJhdG9yPFQ+KHRoaXMpOwoKICAgIFNhbml0
eUNoZWNrKCk7CiAgICAgCiAgICBpZiAoIElzRW1wdHkoKSAmJiAoZmlyc3QgPT0gMCApICkge30g
ZWxzZSB7IHByaW50ZigiQXNzZXJ0aW9uIGZhaWxlZDogbGluZSAlZCBmaWxlICVzXG4iLCAzMDMs
ICIuLi8uLi9saWIvbGlzdC5jYyIpOyBBYm9ydCgpOyB9IDsKICAgIGZvciAoOyAhaXRlcmF0b3It
PklzRG9uZSgpOyBpdGVyYXRvci0+TmV4dCgpKSB7Cgl7IHByaW50ZigiQXNzZXJ0aW9uIGZhaWxl
ZDogbGluZSAlZCBmaWxlICVzXG4iLCAzMDUsICIuLi8uLi9saWIvbGlzdC5jYyIpOyBBYm9ydCgp
OyB9IDsJIAogICAgfQoKICAgIGZvciAoaSA9IDA7IGkgPCBudW1FbnRyaWVzOyBpKyspIHsKCSBB
cHBlbmQocFtpXSk7CgkgaWYgKCBJc0luTGlzdChwW2ldKSApIHt9IGVsc2UgeyBwcmludGYoIkFz
c2VydGlvbiBmYWlsZWQ6IGxpbmUgJWQgZmlsZSAlc1xuIiwgMzEwLCAiLi4vLi4vbGliL2xpc3Qu
Y2MiKTsgQWJvcnQoKTsgfSA7CgkgaWYgKCAhSXNFbXB0eSgpICkge30gZWxzZSB7IHByaW50Zigi
QXNzZXJ0aW9uIGZhaWxlZDogbGluZSAlZCBmaWxlICVzXG4iLCAzMTEsICIuLi8uLi9saWIvbGlz
dC5jYyIpOyBBYm9ydCgpOyB9IDsKICAgICB9CiAgICAgU2FuaXR5Q2hlY2soKTsKCiAgICAgIAog
ICAgIGZvciAoaSA9IDA7IGkgPCBudW1FbnRyaWVzOyBpKyspIHsKCSBSZW1vdmUocFtpXSk7CiAg
ICAgICAgIGlmICggIUlzSW5MaXN0KHBbaV0pICkge30gZWxzZSB7IHByaW50ZigiQXNzZXJ0aW9u
IGZhaWxlZDogbGluZSAlZCBmaWxlICVzXG4iLCAzMTgsICIuLi8uLi9saWIvbGlzdC5jYyIpOyBB
Ym9ydCgpOyB9IDsKICAgICB9CiAgICAgaWYgKCBJc0VtcHR5KCkgKSB7fSBlbHNlIHsgcHJpbnRm
KCJBc3NlcnRpb24gZmFpbGVkOiBsaW5lICVkIGZpbGUgJXNcbiIsIDMyMCwgIi4uLy4uL2xpYi9s
aXN0LmNjIik7IEFib3J0KCk7IH0gOwogICAgIFNhbml0eUNoZWNrKCk7CiAgICAgZGVsZXRlIGl0
ZXJhdG9yOwp9CgogCiAKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIFQ+CnZvaWQgClNvcnRlZExp
c3Q8VD46OlNhbml0eUNoZWNrKCkgY29uc3QKewogICAgTGlzdEVsZW1lbnQ8VD4gKnByZXYsICpw
dHI7CgogICAgTGlzdDxUPjo6U2FuaXR5Q2hlY2soKTsKICAgIGlmIChmaXJzdCAhPSBsYXN0KSB7
CiAgICAgICAgZm9yIChwcmV2ID0gZmlyc3QsIHB0ciA9IGZpcnN0LT5uZXh0OyBwdHIgIT0gMCA7
IAoJCQkJCQlwcmV2ID0gcHRyLCBwdHIgPSBwdHItPm5leHQpIHsKICAgICAgICAgICAgaWYgKCBj
b21wYXJlKHByZXYtPml0ZW0sIHB0ci0+aXRlbSkgPD0gMCApIHt9IGVsc2UgeyBwcmludGYoIkFz
c2VydGlvbiBmYWlsZWQ6IGxpbmUgJWQgZmlsZSAlc1xuIiwgMzQyLCAiLi4vLi4vbGliL2xpc3Qu
Y2MiKTsgQWJvcnQoKTsgfSA7CiAgICAgICAgfQogICAgfQp9CgogCiAKIAogCgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4Kdm9pZCAKU29ydGVkTGlzdDxUPjo6U2VsZlRlc3QoVCAqcCwgaW50IG51bUVudHJp
ZXMpCnsKICAgIGludCBpOwogICAgVCAqcSA9IG5ldyBUW251bUVudHJpZXNdOwoKICAgIExpc3Q8
VD46OlNlbGZUZXN0KHAsIG51bUVudHJpZXMpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBudW1FbnRy
aWVzOyBpKyspIHsKCSBJbnNlcnQocFtpXSk7CgkgaWYgKCBJc0luTGlzdChwW2ldKSApIHt9IGVs
c2UgeyBwcmludGYoIkFzc2VydGlvbiBmYWlsZWQ6IGxpbmUgJWQgZmlsZSAlc1xuIiwgMzYzLCAi
Li4vLi4vbGliL2xpc3QuY2MiKTsgQWJvcnQoKTsgfSA7CiAgICAgfQogICAgIFNhbml0eUNoZWNr
KCk7CgogICAgICAKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtRW50cmllczsgaSsrKSB7CgkgcVtp
XSA9IFJlbW92ZUZyb250KCk7CiAgICAgICAgIGlmICggIUlzSW5MaXN0KHFbaV0pICkge30gZWxz
ZSB7IHByaW50ZigiQXNzZXJ0aW9uIGZhaWxlZDogbGluZSAlZCBmaWxlICVzXG4iLCAzNzAsICIu
Li8uLi9saWIvbGlzdC5jYyIpOyBBYm9ydCgpOyB9IDsKICAgICB9CiAgICAgaWYgKCBJc0VtcHR5
KCkgKSB7fSBlbHNlIHsgcHJpbnRmKCJBc3NlcnRpb24gZmFpbGVkOiBsaW5lICVkIGZpbGUgJXNc
biIsIDM3MiwgIi4uLy4uL2xpYi9saXN0LmNjIik7IEFib3J0KCk7IH0gOwoKICAgICAgCiAgICAg
Zm9yIChpID0gMDsgaSA8IChudW1FbnRyaWVzIC0gMSk7IGkrKykgewoJIGlmICggY29tcGFyZShx
W2ldLCBxW2kgKyAxXSkgPD0gMCApIHt9IGVsc2UgeyBwcmludGYoIkFzc2VydGlvbiBmYWlsZWQ6
IGxpbmUgJWQgZmlsZSAlc1xuIiwgMzc2LCAiLi4vLi4vbGliL2xpc3QuY2MiKTsgQWJvcnQoKTsg
fSA7CiAgICAgfQogICAgIFNhbml0eUNoZWNrKCk7CgogICAgIGRlbGV0ZSBxOwp9CiMgMTQwICIu
Li8uLi9saWIvbGlzdC5oIiAyCgoJCQkJIAoJCQkJIAoKIyAzOSAiL3Vzci9jbGFzcy9jczE0MC9u
YWNob3MvbWFjaGluZS9pbnRlcnJ1cHQuaCIgMgoKIyAxICIvdXNyL2NsYXNzL2NzMTQwL25hY2hv
cy9tYWNoaW5lL2NhbGxiYWNrLmgiIDEKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKCgoKCiMgMSAiLi4vLi4vbGliL2NvcHlyaWdodC5oIiAxCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgojIDI5ICIvdXNyL2NsYXNzL2NzMTQwL25hY2hvcy9tYWNoaW5lL2Nh
bGxiYWNrLmgiIDIKCgogCgpjbGFzcyBDYWxsQmFja09iaiB7CiAgIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgQ2FsbEJhY2soKSA9IDA7CiAgIHByb3RlY3RlZDoKICAgICBDYWxsQmFja09iaigp
IHt9OwkgCgkJCQkgCgkJCQkgCgkJCQkgCiAgICAgdmlydHVhbCB+Q2FsbEJhY2tPYmooKSB7fTsK
fTsKCgojIDQwICIvdXNyL2NsYXNzL2NzMTQwL25hY2hvcy9tYWNoaW5lL2ludGVycnVwdC5oIiAy
CgoKIAplbnVtIEludFN0YXR1cyB7IEludE9mZiwgSW50T24gfTsKCiAKIAogCmVudW0gTWFjaGlu
ZVN0YXR1cyB7SWRsZU1vZGUsIFN5c3RlbU1vZGUsIFVzZXJNb2RlfTsKCiAKIAogCmVudW0gSW50
VHlwZSB7IFRpbWVySW50LCBEaXNrSW50LCBDb25zb2xlV3JpdGVJbnQsIENvbnNvbGVSZWFkSW50
LCAKCQkJRWxldmF0b3JJbnQsIE5ldHdvcmtTZW5kSW50LCBOZXR3b3JrUmVjdkludH07CgogCiAK
IAoKY2xhc3MgUGVuZGluZ0ludGVycnVwdCB7CiAgcHVibGljOgogICAgUGVuZGluZ0ludGVycnVw
dChDYWxsQmFja09iaiAqY2FsbE9uSW50LCBpbnQgdGltZSwgSW50VHlwZSBraW5kKTsKCQkJCSAK
CQkJCSAKCiAgICBDYWxsQmFja09iaiAqY2FsbE9uSW50ZXJydXB0OyAKCQkJCSAKICAgIAogICAg
aW50IHdoZW47CQkJIAogICAgSW50VHlwZSB0eXBlOwkJIAp9OwoKIAogCiAKIAoKY2xhc3MgSW50
ZXJydXB0IHsKICBwdWJsaWM6CiAgICBJbnRlcnJ1cHQoKTsJCSAKICAgIH5JbnRlcnJ1cHQoKTsJ
CSAKICAgIAogICAgSW50U3RhdHVzIFNldExldmVsKEludFN0YXR1cyBsZXZlbCk7CiAgICAJCQkJ
IAoJCQkJIAoKICAgIHZvaWQgRW5hYmxlKCkgeyAodm9pZCkgU2V0TGV2ZWwoSW50T24pOyB9CgkJ
CQkgCiAgICBJbnRTdGF0dXMgZ2V0TGV2ZWwoKSB7cmV0dXJuIGxldmVsO30KICAgIAkJCQkgCgkJ
CQkgCiAgICAKICAgIHZvaWQgSWRsZSgpOyAJCSAKCQkJCSAKCQkJCSAKCiAgICB2b2lkIEhhbHQo
KTsgCQkgCiAgICAKICAgIHZvaWQgWWllbGRPblJldHVybigpOwkgCgkJCQkgCgogICAgTWFjaGlu
ZVN0YXR1cyBnZXRTdGF0dXMoKSB7IHJldHVybiBzdGF0dXM7IH0gCiAgICB2b2lkIHNldFN0YXR1
cyhNYWNoaW5lU3RhdHVzIHN0KSB7IHN0YXR1cyA9IHN0OyB9CiAgICAgICAgCQkJIAoKICAgIGJv
b2wgQW55RnV0dXJlSW50ZXJydXB0cygpIHsgcmV0dXJuICFwZW5kaW5nLT5Jc0VtcHR5KCk7IH0K
ICAgIAkJCQkgCgogICAgdm9pZCBEdW1wU3RhdGUoKTsJCSAKICAgIAoKICAgICAKICAgICAKICAg
ICAKICAgICAKCiAgICB2b2lkIFNjaGVkdWxlKENhbGxCYWNrT2JqICpjYWxsVG8sIGludCB3aGVu
LCBJbnRUeXBlIHR5cGUpOwogICAgCQkJCSAKCQkJCSAKICAgIAkJCQkgCiAgICAKICAgIHZvaWQg
T25lVGljaygpOyAgICAgICAJIAoKICAgIGJvb2wgSW5IYW5kbGVyKCkge3JldHVybiBpbkhhbmRs
ZXI7fQoKICBwcml2YXRlOgogICAgSW50U3RhdHVzIGxldmVsOwkJIAogICAgU29ydGVkTGlzdDxQ
ZW5kaW5nSW50ZXJydXB0ICo+ICpwZW5kaW5nOwkJCiAgICAJCQkJIAoJCQkJIAogICAgYm9vbCBp
bkhhbmRsZXI7CQkgCiAgICBib29sIHlpZWxkT25SZXR1cm47IAkgCgkJCQkgCiAgICBNYWNoaW5l
U3RhdHVzIHN0YXR1czsJIAoKICAgICAKCiAgICBib29sIENoZWNrSWZEdWUoYm9vbCBhZHZhbmNl
Q2xvY2spOyAKICAgIAkJCQkgCgkJCQkgCgogICAgdm9pZCBDaGFuZ2VMZXZlbChJbnRTdGF0dXMg
b2xkLCAJIAoJCQlJbnRTdGF0dXMgbm93KTsgIAp9OwoKCiMgMjQgIi91c3IvY2xhc3MvY3MxNDAv
bmFjaG9zL21hY2hpbmUvaW50ZXJydXB0LmNjIiAyCgojIDEgIi4uLy4uL3RocmVhZHMvbWFpbi5o
IiAxCiAKIAogCiAKIAogCiAKIAoKCgoKIyAxICIuLi8uLi9saWIvY29weXJpZ2h0LmgiIDEKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTMgIi4uLy4uL3RocmVhZHMvbWFpbi5oIiAyCgoKCgoK
CgoKIyAxICIuLi8uLi91c2VycHJvZy91c2Vya2VybmVsLmgiIDEKIAogCiAKIAogCiAKIAogCiAK
IAogCgoKCgpjbGFzcyBVc2VyUHJvZ0tlcm5lbDsKCiMgMSAiLi4vLi4vdGhyZWFkcy9rZXJuZWwu
aCIgMQogCiAKIAogCiAKIAogCgoKCgojIDEgIi4uLy4uL2xpYi9jb3B5cmlnaHQuaCIgMQogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxMiAiLi4vLi4vdGhyZWFkcy9rZXJuZWwuaCIgMgoKCgoj
IDEgIi4uLy4uL3RocmVhZHMvdGhyZWFkLmgiIDEKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgoKCmNsYXNzIFRo
cmVhZDsKIyAxICIuLi8uLi9jb25zdGFudHMuaCIgMQoKCgoKCgogCiAKCgogCiAKCgoKCgoKCgoj
IDQyICIuLi8uLi90aHJlYWRzL3RocmVhZC5oIiAyCgoKCmNsYXNzIFNlbWFwaG9yZTsgICAgCgoK
IyAxICIuLi8uLi9saWIvaGFzaC5oIiAxCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCgoKCgojIDEgIi4uLy4uL2xpYi9jb3B5cmlnaHQuaCIgMQog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzMiAiLi4vLi4vbGliL2hhc2guaCIgMgoKCgogCiAK
IAoKdGVtcGxhdGUgPGNsYXNzIEtleSxjbGFzcyBUPgpjbGFzcyBIYXNoSXRlcmF0b3I7Cgp0ZW1w
bGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPiAKY2xhc3MgSGFzaFRhYmxlIHsKICBwdWJsaWM6CiAg
ICBIYXNoVGFibGUoS2V5ICgqZ2V0KShUIHgpLCB1bnNpZ25lZCAoKmhGdW5jKShLZXkgeCkpOwkK
ICAgIAkJCQkgCiAgICB+SGFzaFRhYmxlKCk7CQkgCgogICAgdm9pZCBJbnNlcnQoVCBpdGVtKTsJ
IAogICAgVCBSZW1vdmUoS2V5IGtleSk7CQkgCgogICAgYm9vbCBGaW5kKEtleSBrZXksIFQgKml0
ZW1QdHIpIGNvbnN0OyAKICAgIAkJCQkgCiAgICBib29sIElzSW5UYWJsZShLZXkga2V5KSB7IFQg
ZHVtbXk7IHJldHVybiBGaW5kKGtleSwgJmR1bW15KTsgfSAJCgkJCQkgCgogICAgYm9vbCBJc0Vt
cHR5KCkgeyByZXR1cm4gbnVtSXRlbXMgPT0gMDsgfQkKCQkJCSAKCiAgICB2b2lkIEFwcGx5KHZv
aWQgKCpmKShUKSkgY29uc3Q7CiAgICAJCQkJIAoKICAgIHZvaWQgU2FuaXR5Q2hlY2soKSBjb25z
dDsgCiAgICB2b2lkIFNlbGZUZXN0KFQgKnAsIGludCBudW1JdGVtcyk7CQogICAgCQkJCSAKCiAg
cHJpdmF0ZToKdHlwZWRlZiBMaXN0PFQ+ICpCdWNrZXQ7CgogICAgQnVja2V0ICpidWNrZXRzOwkJ
IAogICAgaW50IG51bUJ1Y2tldHM7CQkgCiAgICBpbnQgbnVtSXRlbXM7CQkgCiAgICAKICAgIEtl
eSAoKmdldEtleSkoVCB4KTsJCSAKICAgIHVuc2lnbmVkICgqaGFzaCkoS2V5IHgpOwkgCgogICAg
dm9pZCBJbml0QnVja2V0cyhpbnQgc2l6ZSk7IAogICAgdm9pZCBEZWxldGVCdWNrZXRzKEJ1Y2tl
dCAqdGFibGUsIGludCBzaXplKTsKICAgIAkJCQkgCgkJCQkKICAgIGludCBIYXNoVmFsdWUoS2V5
IGtleSkgY29uc3Q7CiAgICAJCQkJIAoKICAgIHZvaWQgUmVIYXNoKCk7CQkgCiAgICAKICAgIGJv
b2wgRmluZEluQnVja2V0KGludCBidWNrZXQsIEtleSBrZXksIFQgKml0ZW1QdHIpIGNvbnN0OyAK
ICAgIAkJCQkgCiAgICBpbnQgRmluZE5leHRGdWxsQnVja2V0KGludCBzdGFydCkgY29uc3Q7CiAg
ICAJCQkJIAoKZnJpZW5kIEhhc2hJdGVyYXRvcjxLZXksVD47Cn07CgogCiAKIAogCiAKIAogCgp0
ZW1wbGF0ZSA8Y2xhc3MgS2V5LGNsYXNzIFQ+CmNsYXNzIEhhc2hJdGVyYXRvciB7CiAgcHVibGlj
OgogICAgSGFzaEl0ZXJhdG9yKEhhc2hUYWJsZTxLZXksVD4gKnRhYmxlKTsgIAogICAgfkhhc2hJ
dGVyYXRvcigpIHsgaWYgKGJ1Y2tldEl0ZXIgIT0gMCApIGRlbGV0ZSBidWNrZXRJdGVyO307IAoJ
CQkJIAoKICAgIGJvb2wgSXNEb25lKCkgeyByZXR1cm4gKGJ1Y2tldCA9PSB0YWJsZS0+bnVtQnVj
a2V0cyk7IH07CgkJCQkgCiAgICBUIEl0ZW0oKSB7IGlmICggIUlzRG9uZSgpICkge30gZWxzZSB7
IHByaW50ZigiQXNzZXJ0aW9uIGZhaWxlZDogbGluZSAlZCBmaWxlICVzXG4iLCAxMTEsICIuLi8u
Li9saWIvaGFzaC5oIik7IEFib3J0KCk7IH0gOyByZXR1cm4gYnVja2V0SXRlci0+SXRlbSgpOyB9
OyAKCQkJCSAKICAgIHZvaWQgTmV4dCgpOyAJCSAKCiAgcHJpdmF0ZTogICAKICAgIEhhc2hUYWJs
ZTxLZXksVD4gKnRhYmxlOwkgCiAgICBpbnQgYnVja2V0OwkJCSAKICAgIExpc3RJdGVyYXRvcjxU
PiAqYnVja2V0SXRlcjsgIAp9OwoKIyAxICIuLi8uLi9saWIvaGFzaC5jYyIgMQogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKCmNvbnN0IGludCBJbml0aWFsQnVja2V0cyA9IDQ7CSAKY29uc3Qg
aW50IFJlc2l6ZVJhdGlvID0gMzsJIApjb25zdCBpbnQgSW5jcmVhc2VTaXplQnkgPSA0OwkgCgoj
IDEgIi4uLy4uL2xpYi9jb3B5cmlnaHQuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAy
MCAiLi4vLi4vbGliL2hhc2guY2MiIDIKCgogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBLZXks
IGNsYXNzIFQ+Ckhhc2hUYWJsZTxLZXksVD46Okhhc2hUYWJsZShLZXkgKCpnZXQpKFQgeCksIHVu
c2lnbmVkICgqaEZ1bmMpKEtleSB4KSkKeyAKICAgIG51bUl0ZW1zID0gMDsKICAgIEluaXRCdWNr
ZXRzKEluaXRpYWxCdWNrZXRzKTsKICAgIGdldEtleSA9IGdldDsKICAgIGhhc2ggPSBoRnVuYzsK
fQoKIAogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPgp2b2lkCkhhc2hUYWJs
ZTxLZXksVD46OkluaXRCdWNrZXRzKGludCBzeikKeyAKICAgIG51bUJ1Y2tldHMgPSBzejsKICAg
IGJ1Y2tldHMgPSBuZXcgQnVja2V0W251bUJ1Y2tldHNdOwogICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBzejsgaSsrKSB7CiAgICAJYnVja2V0c1tpXSA9IG5ldyBMaXN0PFQ+OwogICAgfQp9CgogCiAK
IAogCgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPgpIYXNoVGFibGU8S2V5LFQ+Ojp+SGFz
aFRhYmxlKCkKeyAKICAgIGlmICggSXNFbXB0eSgpICkge30gZWxzZSB7IHByaW50ZigiQXNzZXJ0
aW9uIGZhaWxlZDogbGluZSAlZCBmaWxlICVzXG4iLCA2MiwgIi4uLy4uL2xpYi9oYXNoLmNjIik7
IEFib3J0KCk7IH0gOwkJIAogICAgRGVsZXRlQnVja2V0cyhidWNrZXRzLCBudW1CdWNrZXRzKTsK
fQoKIAogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPgp2b2lkCkhhc2hUYWJs
ZTxLZXksVD46OkRlbGV0ZUJ1Y2tldHMoTGlzdDxUPiAqKnRhYmxlLCBpbnQgc3opCnsgCiAgICBm
b3IgKGludCBpID0gMDsgaSA8IHN6OyBpKyspIHsKICAgIAlkZWxldGUgdGFibGVbaV07CiAgICB9
CiAgICBkZWxldGUgW10gdGFibGU7Cn0KCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNs
YXNzIFQ+CmludApIYXNoVGFibGU8S2V5LCBUPjo6SGFzaFZhbHVlKEtleSBrZXkpIGNvbnN0IAp7
CiAgICBpbnQgcmVzdWx0ID0gKCpoYXNoKShrZXkpICUgbnVtQnVja2V0czsKICAgIGlmICggcmVz
dWx0ID49IDAgJiYgcmVzdWx0IDwgbnVtQnVja2V0cyApIHt9IGVsc2UgeyBwcmludGYoIkFzc2Vy
dGlvbiBmYWlsZWQ6IGxpbmUgJWQgZmlsZSAlc1xuIiwgOTIsICIuLi8uLi9saWIvaGFzaC5jYyIp
OyBBYm9ydCgpOyB9IDsKICAgIHJldHVybiByZXN1bHQ7Cn0KCiAKIAogCiAKIAogCiAKIAogCiAK
IAoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4Kdm9pZApIYXNoVGFibGU8S2V5LFQ+OjpJ
bnNlcnQoVCBpdGVtKQp7CiAgICBLZXkga2V5ID0gZ2V0S2V5KGl0ZW0pOwoKICAgIGlmICggIUlz
SW5UYWJsZShrZXkpICkge30gZWxzZSB7IHByaW50ZigiQXNzZXJ0aW9uIGZhaWxlZDogbGluZSAl
ZCBmaWxlICVzXG4iLCAxMTQsICIuLi8uLi9saWIvaGFzaC5jYyIpOyBBYm9ydCgpOyB9IDsKCiAg
ICBpZiAoKG51bUl0ZW1zIC8gbnVtQnVja2V0cykgPj0gUmVzaXplUmF0aW8pIHsKCVJlSGFzaCgp
OwogICAgfQoKICAgIGJ1Y2tldHNbSGFzaFZhbHVlKGtleSldLT5BcHBlbmQoaXRlbSk7CiAgICBu
dW1JdGVtcysrOwoKICAgIGlmICggSXNJblRhYmxlKGtleSkgKSB7fSBlbHNlIHsgcHJpbnRmKCJB
c3NlcnRpb24gZmFpbGVkOiBsaW5lICVkIGZpbGUgJXNcbiIsIDEyMywgIi4uLy4uL2xpYi9oYXNo
LmNjIik7IEFib3J0KCk7IH0gOwp9CgogCiAKIAogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5
LCBjbGFzcyBUPgp2b2lkCkhhc2hUYWJsZTxLZXksVD46OlJlSGFzaCgpCnsKICAgIEJ1Y2tldCAq
b2xkVGFibGUgPSBidWNrZXRzOwogICAgaW50IG9sZFNpemUgPSBudW1CdWNrZXRzOwogICAgVCBp
dGVtOwoKICAgIFNhbml0eUNoZWNrKCk7CiAgICBJbml0QnVja2V0cyhudW1CdWNrZXRzICogSW5j
cmVhc2VTaXplQnkpOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2xkU2l6ZTsgaSsrKSB7Cgl3
aGlsZSAoIW9sZFRhYmxlW2ldLT5Jc0VtcHR5KCkpIHsKCSAgICBpdGVtID0gb2xkVGFibGVbaV0t
PlJlbW92ZUZyb250KCk7CgkgICAgYnVja2V0c1tIYXNoVmFsdWUoZ2V0S2V5KGl0ZW0pKV0tPkFw
cGVuZChpdGVtKTsKICAgICAgICB9CiAgICB9CiAgICBEZWxldGVCdWNrZXRzKG9sZFRhYmxlLCBv
bGRTaXplKTsKICAgIFNhbml0eUNoZWNrKCk7Cn0KCiAKIAogCiAKIAogCiAKIAogCiAKCnRlbXBs
YXRlIDxjbGFzcyBLZXksIGNsYXNzIFQ+CmJvb2wKSGFzaFRhYmxlPEtleSxUPjo6RmluZEluQnVj
a2V0KGludCBidWNrZXQsIAoJCQkJS2V5IGtleSwgVCAqaXRlbVB0cikgY29uc3QKewogICAgTGlz
dEl0ZXJhdG9yPFQ+IGl0ZXJhdG9yKGJ1Y2tldHNbYnVja2V0XSk7CgogICAgZm9yICg7ICFpdGVy
YXRvci5Jc0RvbmUoKTsgaXRlcmF0b3IuTmV4dCgpKSB7CglpZiAoa2V5ID09IGdldEtleShpdGVy
YXRvci5JdGVtKCkpKSB7ICAKCSAgICAqaXRlbVB0ciA9IGl0ZXJhdG9yLkl0ZW0oKTsKCSAgICBy
ZXR1cm4gdHJ1ZSA7CiAgICAgICAgfQogICAgfQogICAgKml0ZW1QdHIgPSAwIDsKICAgIHJldHVy
biBmYWxzZSA7Cn0KCiAKIAogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFQ+
CmJvb2wKSGFzaFRhYmxlPEtleSxUPjo6RmluZChLZXkga2V5LCBUICppdGVtUHRyKSBjb25zdAp7
CiAgICBpbnQgYnVja2V0ID0gSGFzaFZhbHVlKGtleSk7CiAgICAKICAgIHJldHVybiBGaW5kSW5C
dWNrZXQoYnVja2V0LCBrZXksIGl0ZW1QdHIpOyAKfQoKIAogCiAKIAogCiAKIAoKdGVtcGxhdGUg
PGNsYXNzIEtleSwgY2xhc3MgVD4KVApIYXNoVGFibGU8S2V5LFQ+OjpSZW1vdmUoS2V5IGtleSkK
ewogICAgaW50IGJ1Y2tldCA9IEhhc2hWYWx1ZShrZXkpOwogICAgVCBpdGVtOwogICAgYm9vbCBm
b3VuZCA9IEZpbmRJbkJ1Y2tldChidWNrZXQsIGtleSwgJml0ZW0pOyAKCiAgICBpZiAoIGZvdW5k
ICkge30gZWxzZSB7IHByaW50ZigiQXNzZXJ0aW9uIGZhaWxlZDogbGluZSAlZCBmaWxlICVzXG4i
LCAyMTYsICIuLi8uLi9saWIvaGFzaC5jYyIpOyBBYm9ydCgpOyB9IDsJIAoKICAgIGJ1Y2tldHNb
YnVja2V0XS0+UmVtb3ZlKGl0ZW0pOwogICAgbnVtSXRlbXMtLTsKCiAgICBpZiAoICFJc0luVGFi
bGUoa2V5KSApIHt9IGVsc2UgeyBwcmludGYoIkFzc2VydGlvbiBmYWlsZWQ6IGxpbmUgJWQgZmls
ZSAlc1xuIiwgMjIxLCAiLi4vLi4vbGliL2hhc2guY2MiKTsgQWJvcnQoKTsgfSA7CiAgICByZXR1
cm4gaXRlbTsKfQoKCiAKIAogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LGNsYXNzIFQ+CnZv
aWQKSGFzaFRhYmxlPEtleSxUPjo6QXBwbHkodm9pZCAoKmZ1bmMpKFQpKSBjb25zdAp7CiAgICBm
b3IgKGludCBidWNrZXQgPSAwOyBidWNrZXQgPCBudW1CdWNrZXRzOyBidWNrZXQrKykgewogICAg
ICAgIGJ1Y2tldHNbYnVja2V0XS0+QXBwbHkoZnVuYyk7CiAgICB9Cn0KCiAKIAogCiAKIAogCgp0
ZW1wbGF0ZSA8Y2xhc3MgS2V5LGNsYXNzIFQ+CmludApIYXNoVGFibGU8S2V5LFQ+OjpGaW5kTmV4
dEZ1bGxCdWNrZXQoaW50IGJ1Y2tldCkgY29uc3QKeyAKICAgIGZvciAoOyBidWNrZXQgPCBudW1C
dWNrZXRzOyBidWNrZXQrKykgewoJaWYgKCFidWNrZXRzW2J1Y2tldF0tPklzRW1wdHkoKSkgewoJ
ICAgICBicmVhazsKCX0KICAgIH0KICAgIHJldHVybiBidWNrZXQ7Cn0KCiAKIAogCiAKIAogCiAK
IAoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4Kdm9pZCAKSGFzaFRhYmxlPEtleSxUPjo6
U2FuaXR5Q2hlY2soKSBjb25zdAp7CiAgICBpbnQgbnVtRm91bmQgPSAwOwogICAgTGlzdEl0ZXJh
dG9yPFQ+ICppdGVyYXRvcjsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUJ1Y2tldHM7IGkr
KykgewoJYnVja2V0c1tpXS0+U2FuaXR5Q2hlY2soKTsKCW51bUZvdW5kICs9IGJ1Y2tldHNbaV0t
Pk51bUluTGlzdCgpOwoJaXRlcmF0b3IgPSBuZXcgTGlzdEl0ZXJhdG9yPFQ+KGJ1Y2tldHNbaV0p
OwogICAgICAgIGZvciAoOyAhaXRlcmF0b3ItPklzRG9uZSgpOyBpdGVyYXRvci0+TmV4dCgpKSB7
CgkgICAgaWYgKCBpID09IEhhc2hWYWx1ZShnZXRLZXkoaXRlcmF0b3ItPkl0ZW0oKSkpICkge30g
ZWxzZSB7IHByaW50ZigiQXNzZXJ0aW9uIGZhaWxlZDogbGluZSAlZCBmaWxlICVzXG4iLCAyODIs
ICIuLi8uLi9saWIvaGFzaC5jYyIpOyBBYm9ydCgpOyB9IDsKICAgICAgICB9CiAgICAgICAgZGVs
ZXRlIGl0ZXJhdG9yOwogICAgfQogICAgaWYgKCBudW1JdGVtcyA9PSBudW1Gb3VuZCApIHt9IGVs
c2UgeyBwcmludGYoIkFzc2VydGlvbiBmYWlsZWQ6IGxpbmUgJWQgZmlsZSAlc1xuIiwgMjg2LCAi
Li4vLi4vbGliL2hhc2guY2MiKTsgQWJvcnQoKTsgfSA7Cgp9CgogCiAKIAogCgp0ZW1wbGF0ZSA8
Y2xhc3MgS2V5LCBjbGFzcyBUPgp2b2lkIApIYXNoVGFibGU8S2V5LFQ+OjpTZWxmVGVzdChUICpw
LCBpbnQgbnVtRW50cmllcykKewogICAgaW50IGk7CiAgICBIYXNoSXRlcmF0b3I8S2V5LCBUPiAq
aXRlcmF0b3IgPSBuZXcgSGFzaEl0ZXJhdG9yPEtleSxUPih0aGlzKTsKICAgIAogICAgU2FuaXR5
Q2hlY2soKTsKICAgIGlmICggSXNFbXB0eSgpICkge30gZWxzZSB7IHByaW50ZigiQXNzZXJ0aW9u
IGZhaWxlZDogbGluZSAlZCBmaWxlICVzXG4iLCAzMDMsICIuLi8uLi9saWIvaGFzaC5jYyIpOyBB
Ym9ydCgpOyB9IDsJIAogICAgZm9yICg7ICFpdGVyYXRvci0+SXNEb25lKCk7IGl0ZXJhdG9yLT5O
ZXh0KCkpIHsKCXsgcHJpbnRmKCJBc3NlcnRpb24gZmFpbGVkOiBsaW5lICVkIGZpbGUgJXNcbiIs
IDMwNSwgIi4uLy4uL2xpYi9oYXNoLmNjIik7IEFib3J0KCk7IH0gOwogICAgfQogICAgZGVsZXRl
IGl0ZXJhdG9yOwoKICAgIGZvciAoaSA9IDA7IGkgPCBudW1FbnRyaWVzOyBpKyspIHsKICAgICAg
ICBJbnNlcnQocFtpXSk7CiAgICAgICAgaWYgKCBJc0luVGFibGUoZ2V0S2V5KHBbaV0pKSApIHt9
IGVsc2UgeyBwcmludGYoIkFzc2VydGlvbiBmYWlsZWQ6IGxpbmUgJWQgZmlsZSAlc1xuIiwgMzEx
LCAiLi4vLi4vbGliL2hhc2guY2MiKTsgQWJvcnQoKTsgfSA7CiAgICAgICAgaWYgKCAhSXNFbXB0
eSgpICkge30gZWxzZSB7IHByaW50ZigiQXNzZXJ0aW9uIGZhaWxlZDogbGluZSAlZCBmaWxlICVz
XG4iLCAzMTIsICIuLi8uLi9saWIvaGFzaC5jYyIpOyBBYm9ydCgpOyB9IDsKICAgIH0KICAgIAog
ICAgIAogICAgZm9yIChpID0gMDsgaSA8IG51bUVudHJpZXM7IGkrKykgeyAgCiAgICAgICAgaWYg
KCBSZW1vdmUoZ2V0S2V5KHBbaV0pKSA9PSBwW2ldICkge30gZWxzZSB7IHByaW50ZigiQXNzZXJ0
aW9uIGZhaWxlZDogbGluZSAlZCBmaWxlICVzXG4iLCAzMTcsICIuLi8uLi9saWIvaGFzaC5jYyIp
OyBBYm9ydCgpOyB9IDsKICAgIH0KCiAgICBpZiAoIElzRW1wdHkoKSApIHt9IGVsc2UgeyBwcmlu
dGYoIkFzc2VydGlvbiBmYWlsZWQ6IGxpbmUgJWQgZmlsZSAlc1xuIiwgMzIwLCAiLi4vLi4vbGli
L2hhc2guY2MiKTsgQWJvcnQoKTsgfSA7CiAgICBTYW5pdHlDaGVjaygpOwp9CgoKIAogCiAKIAog
Cgp0ZW1wbGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPgpIYXNoSXRlcmF0b3I8S2V5LFQ+OjpIYXNo
SXRlcmF0b3IoSGFzaFRhYmxlPEtleSxUPiAqdGJsKSAKeyAKICAgIHRhYmxlID0gdGJsOwogICAg
YnVja2V0ID0gdGFibGUtPkZpbmROZXh0RnVsbEJ1Y2tldCgwKTsKICAgIGJ1Y2tldEl0ZXIgPSAw
IDsKICAgIGlmIChidWNrZXQgPCB0YWJsZS0+bnVtQnVja2V0cykgewoJYnVja2V0SXRlciA9IG5l
dyBMaXN0SXRlcmF0b3I8VD4odGFibGUtPmJ1Y2tldHNbYnVja2V0XSk7CiAgICB9Cn0KCiAKIAog
CiAKCnRlbXBsYXRlIDxjbGFzcyBLZXksY2xhc3MgVD4Kdm9pZApIYXNoSXRlcmF0b3I8S2V5LFQ+
OjpOZXh0KCkgCnsgCiAgICBidWNrZXRJdGVyLT5OZXh0KCk7CiAgICBpZiAoYnVja2V0SXRlci0+
SXNEb25lKCkpIHsKCWRlbGV0ZSBidWNrZXRJdGVyOwoJYnVja2V0SXRlciA9IDAgOwogICAgICAg
IGJ1Y2tldCA9IHRhYmxlLT5GaW5kTmV4dEZ1bGxCdWNrZXQoKytidWNrZXQpOwogICAgICAgIGlm
IChidWNrZXQgPCB0YWJsZS0+bnVtQnVja2V0cykgewoJICAgIGJ1Y2tldEl0ZXIgPSBuZXcgTGlz
dEl0ZXJhdG9yPFQ+KHRhYmxlLT5idWNrZXRzW2J1Y2tldF0pOwogICAgICAgIH0KICAgIH0KfQoj
IDEyMSAiLi4vLi4vbGliL2hhc2guaCIgMgoKCQkJCSAKCQkJCSAKCiMgNDggIi4uLy4uL3RocmVh
ZHMvdGhyZWFkLmgiIDIKCgojIDEgIi4uLy4uL2xpYi9jb3B5cmlnaHQuaCIgMQogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIyA1MCAiLi4vLi4vdGhyZWFkcy90aHJlYWQuaCIgMgoKCgoKCgojIDEg
Ii91c3IvY2xhc3MvY3MxNDAvbmFjaG9zL21hY2hpbmUvbWFjaGluZS5oIiAxCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgoKCiMgMSAiLi4vLi4vbGliL2NvcHlyaWdodC5o
IiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI0ICIvdXNyL2NsYXNzL2NzMTQwL25hY2hv
cy9tYWNoaW5lL21hY2hpbmUuaCIgMgoKCiMgMSAiL3Vzci9jbGFzcy9jczE0MC9uYWNob3MvbWFj
aGluZS90cmFuc2xhdGUuaCIgMQogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCgoj
IDEgIi4uLy4uL2xpYi9jb3B5cmlnaHQuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAy
MSAiL3Vzci9jbGFzcy9jczE0MC9uYWNob3MvbWFjaGluZS90cmFuc2xhdGUuaCIgMgoKCgogCiAK
IAogCiAKCmNsYXNzIFRyYW5zbGF0aW9uRW50cnkgewogIHB1YmxpYzoKICAgIGludCB2aXJ0dWFs
UGFnZTsgIAkgCiAgICBpbnQgcGh5c2ljYWxQYWdlOyAgCSAKCQkJIAogICAgYm9vbCB2YWxpZDsg
ICAgICAgICAgCgkJCSAKICAgIGJvb2wgcmVhZE9ubHk7CSAKCQkJIAogICAgYm9vbCB1c2U7ICAg
ICAgICAgICAgCgkJCSAKICAgIGJvb2wgZGlydHk7ICAgICAgICAgIAoJCQkgCn07CgoKIyAyNiAi
L3Vzci9jbGFzcy9jczE0MC9uYWNob3MvbWFjaGluZS9tYWNoaW5lLmgiIDIKCgojIDEgIi91c3Iv
Y2xhc3MvY3MxNDAvbmFjaG9zL21hY2hpbmUvcmVnaXN0ZXJzLmgiIDEKCgoKIAogCiAKIAoKCgoK
CgoKCgoKCgoKCgoKIyAyOCAiL3Vzci9jbGFzcy9jczE0MC9uYWNob3MvbWFjaGluZS9tYWNoaW5l
LmgiIDIKCgogCiAKIAogCgogCmV4dGVybiBpbnQgTnVtUGh5c1BhZ2VzOwpleHRlcm4gaW50IFBh
Z2VTaXplOwpleHRlcm4gaW50IE1lbW9yeVNpemU7CmV4dGVybiBpbnQgVExCU2l6ZTsJCQkgCgpl
bnVtIEV4Y2VwdGlvblR5cGUgeyBOb0V4Y2VwdGlvbiwgICAgICAgICAgICAKCQkgICAgIFN5c2Nh
bGxFeGNlcHRpb24sICAgICAgIAoJCSAgICAgUGFnZUZhdWx0RXhjZXB0aW9uLCAgICAgCgkJICAg
ICBSZWFkT25seUV4Y2VwdGlvbiwgICAgICAKCQkJCQkgICAgIAoJCSAgICAgQnVzRXJyb3JFeGNl
cHRpb24sICAgICAgCgkJCQkJICAgICAKCQkgICAgIEFkZHJlc3NFcnJvckV4Y2VwdGlvbiwgIAoJ
CQkJCSAgICAgCgkJCQkJICAgICAKCQkgICAgIE92ZXJmbG93RXhjZXB0aW9uLCAgICAgIAoJCSAg
ICAgSWxsZWdhbEluc3RyRXhjZXB0aW9uLCAgCgkJICAgICAKCQkgICAgIE51bUV4Y2VwdGlvblR5
cGVzCn07CgogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKY2xhc3MgSW5zdHJ1Y3Rpb247CmNsYXNz
IEludGVycnVwdDsKCmNsYXNzIE1hY2hpbmUgewogIHB1YmxpYzoKICAgIE1hY2hpbmUoYm9vbCBk
ZWJ1Zyk7CSAKCQkJCSAKICAgIH5NYWNoaW5lKCk7CQkJIAoKIAogICAgdm9pZCBSdW4oKTsJIAkJ
IAoKICAgIGludCBSZWFkUmVnaXN0ZXIoaW50IG51bSk7CSAKCiAgICB2b2lkIFdyaXRlUmVnaXN0
ZXIoaW50IG51bSwgaW50IHZhbHVlKTsKCQkJCSAKCiAKIAogCiAKIAoKICAgIGNoYXIgKm1haW5N
ZW1vcnk7CQkgCgkJCQkgCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAgICBU
cmFuc2xhdGlvbkVudHJ5ICp0bGI7CQkgCgkJCQkJIAoKICAgIFRyYW5zbGF0aW9uRW50cnkgKnBh
Z2VUYWJsZTsKICAgIHVuc2lnbmVkIGludCBwYWdlVGFibGVTaXplOwoKICBwcml2YXRlOgoKIAog
ICAgdm9pZCBEZWxheWVkTG9hZChpbnQgbmV4dFJlZywgaW50IG5leHRWYWwpOyAgCQoJCQkJIAog
ICAgdm9pZCBPbmVJbnN0cnVjdGlvbihJbnN0cnVjdGlvbiAqaW5zdHIpOyAJCiAgICAJCQkJIAog
ICAgCiAgICBib29sIFJlYWRNZW0oaW50IGFkZHIsIGludCBzaXplLCBpbnQqIHZhbHVlKTsKICAg
IGJvb2wgV3JpdGVNZW0oaW50IGFkZHIsIGludCBzaXplLCBpbnQgdmFsdWUpOwogICAgCQkJCSAK
CQkJCSAKCQkJCSAKCiAgICBFeGNlcHRpb25UeXBlIFRyYW5zbGF0ZShpbnQgdmlydEFkZHIsIGlu
dCogcGh5c0FkZHIsIGludCBzaXplLGJvb2wgd3JpdGluZyk7CiAgICAJCQkJIAoJCQkJIAoJCQkJ
IAogICAgCQkJCSAKCQkJCSAKCiAgICB2b2lkIFJhaXNlRXhjZXB0aW9uKEV4Y2VwdGlvblR5cGUg
d2hpY2gsIGludCBiYWRWQWRkcik7CgkJCQkgCgkJCQkgCgogICAgdm9pZCBEZWJ1Z2dlcigpOwkJ
IAogICAgdm9pZCBEdW1wU3RhdGUoKTsJCSAKCgogCgogICAgaW50IHJlZ2lzdGVyc1s0MCBdOyAg
CgogICAgYm9vbCBzaW5nbGVTdGVwOwkJIAoJCQkJIAogICAgaW50IHJ1blVudGlsVGltZTsJCSAK
CQkJCSAKCiBmcmllbmQgSW50ZXJydXB0OwkJIAp9OwoKZXh0ZXJuIHZvaWQgRXhjZXB0aW9uSGFu
ZGxlcihFeGNlcHRpb25UeXBlIHdoaWNoKTsKCQkJCSAKCQkJCSAKCQkJCSAKCgogCiAKIAogCiAK
IAogCiAKIAogCgp1bnNpZ25lZCBpbnQgV29yZFRvSG9zdCh1bnNpZ25lZCBpbnQgd29yZCk7CnVu
c2lnbmVkIHNob3J0IFNob3J0VG9Ib3N0KHVuc2lnbmVkIHNob3J0IHNob3J0d29yZCk7CnVuc2ln
bmVkIGludCBXb3JkVG9NYWNoaW5lKHVuc2lnbmVkIGludCB3b3JkKTsKdW5zaWduZWQgc2hvcnQg
U2hvcnRUb01hY2hpbmUodW5zaWduZWQgc2hvcnQgc2hvcnR3b3JkKTsKCgojIDU2ICIuLi8uLi90
aHJlYWRzL3RocmVhZC5oIiAyCgojIDEgIi4uLy4uL3VzZXJwcm9nL2FkZHJzcGFjZS5oIiAxCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCgoKCgojIDEgIi4uLy4uL2xpYi9jb3B5cmlnaHQuaCIgMQog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxNyAiLi4vLi4vdXNlcnByb2cvYWRkcnNwYWNlLmgi
IDIKCiMgMSAiLi4vLi4vZmlsZXN5cy9maWxlc3lzLmgiIDEKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKIyAxICIu
Li8uLi9saWIvY29weXJpZ2h0LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzkgIi4u
Ly4uL2ZpbGVzeXMvZmlsZXN5cy5oIiAyCgojIDEgIi4uLy4uL2ZpbGVzeXMvb3BlbmZpbGUuaCIg
MQogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCgojIDEgIi4uLy4uL2xp
Yi9jb3B5cmlnaHQuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyNCAiLi4vLi4vZmls
ZXN5cy9vcGVuZmlsZS5oIiAyCgoKCgoKCQkJCQkgCgkJCQkJIAoKY2xhc3MgT3BlbkZpbGUgewog
IHB1YmxpYzoKICAgIE9wZW5GaWxlKGludCBmKSB7IGZpbGUgPSBmOyBjdXJyZW50T2Zmc2V0ID0g
MDsgfQkgCiAgICB+T3BlbkZpbGUoKSB7IENsb3NlKGZpbGUpOyB9CQkJIAoKICAgIGludCBSZWFk
QXQoY2hhciAqaW50bywgaW50IG51bUJ5dGVzLCBpbnQgcG9zaXRpb24pIHsgCiAgICAJCUxzZWVr
KGZpbGUsIHBvc2l0aW9uLCAwKTsgCgkJcmV0dXJuIFJlYWRQYXJ0aWFsKGZpbGUsIGludG8sIG51
bUJ5dGVzKTsgCgkJfQkKICAgIGludCBXcml0ZUF0KGNoYXIgKmZyb20sIGludCBudW1CeXRlcywg
aW50IHBvc2l0aW9uKSB7IAogICAgCQlMc2VlayhmaWxlLCBwb3NpdGlvbiwgMCk7IAoJCVdyaXRl
RmlsZShmaWxlLCBmcm9tLCBudW1CeXRlcyk7IAoJCXJldHVybiBudW1CeXRlczsKCQl9CQogICAg
aW50IFJlYWQoY2hhciAqaW50bywgaW50IG51bUJ5dGVzKSB7CgkJaW50IG51bVJlYWQgPSBSZWFk
QXQoaW50bywgbnVtQnl0ZXMsIGN1cnJlbnRPZmZzZXQpOyAKCQljdXJyZW50T2Zmc2V0ICs9IG51
bVJlYWQ7CgkJcmV0dXJuIG51bVJlYWQ7CiAgICAJCX0KICAgIGludCBXcml0ZShjaGFyICpmcm9t
LCBpbnQgbnVtQnl0ZXMpIHsKCQlpbnQgbnVtV3JpdHRlbiA9IFdyaXRlQXQoZnJvbSwgbnVtQnl0
ZXMsIGN1cnJlbnRPZmZzZXQpOyAKCQljdXJyZW50T2Zmc2V0ICs9IG51bVdyaXR0ZW47CgkJcmV0
dXJuIG51bVdyaXR0ZW47CgkJfQoKICAgIGludCBMZW5ndGgoKSB7IExzZWVrKGZpbGUsIDAsIDIp
OyByZXR1cm4gVGVsbChmaWxlKTsgfQogICAgCiAgcHJpdmF0ZToKICAgIGludCBmaWxlOwogICAg
aW50IGN1cnJlbnRPZmZzZXQ7Cn07CgojIDk3ICIuLi8uLi9maWxlc3lzL29wZW5maWxlLmgiCgoK
CiMgNDAgIi4uLy4uL2ZpbGVzeXMvZmlsZXN5cy5oIiAyCgoKCgkJCQkgCgkJCQkgCmNsYXNzIEZp
bGVTeXN0ZW0gewogIHB1YmxpYzoKICAgIEZpbGVTeXN0ZW0oYm9vbCkge30KCiAgICBib29sIENy
ZWF0ZShjaGFyICpuYW1lKSB7IAoJaW50IGZpbGVEZXNjcmlwdG9yID0gT3BlbkZvcldyaXRlKG5h
bWUpOwoKCWlmIChmaWxlRGVzY3JpcHRvciA9PSAtMSkgcmV0dXJuIGZhbHNlIDsKCUNsb3NlKGZp
bGVEZXNjcmlwdG9yKTsgCglyZXR1cm4gdHJ1ZSA7IAoJfQoKICAgIE9wZW5GaWxlKiBPcGVuKGNo
YXIgKm5hbWUpIHsKCSAgaW50IGZpbGVEZXNjcmlwdG9yID0gT3BlbkZvclJlYWRXcml0ZShuYW1l
LCBmYWxzZSApOwoKCSAgaWYgKGZpbGVEZXNjcmlwdG9yID09IC0xKSByZXR1cm4gMCA7CgkgIHJl
dHVybiBuZXcgT3BlbkZpbGUoZmlsZURlc2NyaXB0b3IpOwogICAgICB9CgogICAgYm9vbCBSZW1v
dmUoY2hhciAqbmFtZSkgeyByZXR1cm4gVW5saW5rKG5hbWUpID09IDA7IH0KCn07CgojIDk2ICIu
Li8uLi9maWxlc3lzL2ZpbGVzeXMuaCIKCgoKIyAxOCAiLi4vLi4vdXNlcnByb2cvYWRkcnNwYWNl
LmgiIDIKCgojIDEgIi4uLy4uL3VzZXJwcm9nL3N5c2NhbGwuaCIgMQogCgoKCgoKCgoKCgoKCgoK
IyAxICIuLi8uLi9saWIvY29weXJpZ2h0LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMg
MTYgIi4uLy4uL3VzZXJwcm9nL3N5c2NhbGwuaCIgMgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCgoKCgogCnZvaWQgSGFsdCgpOwkJCiAKCiAKCiAKdm9pZCBFeGl0KGludCBzdGF0
dXMpOwkKCiAKdHlwZWRlZiBpbnQgU3BhY2VJZDsJCiAKIAoKClNwYWNlSWQgRXhlYyhjaGFyICpu
YW1lKTsKIAogCgoKaW50IEpvaW4oU3BhY2VJZCBpZCk7IAkKIAoKIAoKCgoKCgoKIAogCnR5cGVk
ZWYgaW50IE9wZW5GaWxlSWQ7CQoKIAoKCgoKCgoKCiAKCgp0eXBlZGVmIGludCBTZWdtZW50SWQ7
CgogCgoKCiAKIAppbnQgQ3JlYXRlKGNoYXIgKm5hbWUpOwoKIAppbnQgUmVtb3ZlKGNoYXIgKm5h
bWUpOwoKIAoKCk9wZW5GaWxlSWQgT3BlbihjaGFyICpuYW1lKTsKCiAKaW50IFdyaXRlKGNoYXIg
KmJ1ZmZlciwgaW50IHNpemUsIE9wZW5GaWxlSWQgaWQpOwoKIAoKCgoKCmludCBSZWFkKGNoYXIg
KmJ1ZmZlciwgaW50IHNpemUsIE9wZW5GaWxlSWQgaWQpOwoKIAp2b2lkIENsb3NlKE9wZW5GaWxl
SWQgaWQpOwoKCgogCgoKCgoKIAoKCnZvaWQgVGhyZWFkRm9yayh2b2lkICgqZnVuYykoKSk7Cgog
CgoKdm9pZCBUaHJlYWRZaWVsZCgpOwkJCgogCmludCBMZW5ndGgoT3BlbkZpbGVJZCBpZCk7Cgog
CgoKU2VnbWVudElkIE1tYXAoT3BlbkZpbGVJZCBpZCwgY2hhciAqYWRkciwgaW50IGxlbmd0aCk7
CgogCgoKCmludCBNdW5tYXAoU2VnbWVudElkIHNlZ21lbnQpOwoKIAoKCgppbnQgU2JyayhTZWdt
ZW50SWQgc2VnbWVudCwgaW50IGluY3IpOwoKCgogCgoKCiAKaW50IENoZGlyKGNoYXIgKmRpcm5h
bWUpOwoKIAp2b2lkIExzZGlyKHZvaWQpOwoKIAppbnQgTWtkaXIoY2hhciAqZGlybmFtZSk7CgoK
CgojIDIwICIuLi8uLi91c2VycHJvZy9hZGRyc3BhY2UuaCIgMgoKIyAxICIuLi8uLi91c2VycHJv
Zy9wdGVudHJ5LmgiIDEKIAoKCmNsYXNzIFRyYW5zbGF0aW9uRW50cnk7CgogCmNsYXNzIFBhZ2VU
YWJsZUVudHJ5CnsKICBwdWJsaWM6CiAgICBQYWdlVGFibGVFbnRyeSgpOwogICAgVHJhbnNsYXRp
b25FbnRyeSB0ZTsgIAogICAgU3BhY2VJZCBwaWQ7Cn07CgojIDIxICIuLi8uLi91c2VycHJvZy9h
ZGRyc3BhY2UuaCIgMgoKCgoKY2xhc3MgQWRkclNwYWNlIHsKICBwdWJsaWM6CiAgICBBZGRyU3Bh
Y2UoKTsJCQkgCiAgICB+QWRkclNwYWNlKCk7CQkJIAoKICAgIHZvaWQgRXhlY3V0ZShjaGFyICpm
aWxlTmFtZSk7CSAKCQkJCQkgCgogICAgdm9pZCBTYXZlU3RhdGUoKTsJCQkgCiAgICB2b2lkIFJl
c3RvcmVTdGF0ZSgpOwkJIAogICAgdW5zaWduZWQgaW50IEFTSUQoKSB7IHJldHVybiBhc2lkOyB9
CgogICAgIAogICAgZnJpZW5kIHZvaWQgRXhjZXB0aW9uSGFuZGxlcihFeGNlcHRpb25UeXBlIHdo
aWNoKTsKCgogICAgRXhjZXB0aW9uVHlwZSB2aXJ0VG9QaHlzKGludCB2aXJ0QWRkciwgaW50ICpw
aHlzQWRkciwgaW50IHNpemUsIAoJCQkgICAgIGJvb2wgd3JpdGluZyk7CiAgICBib29sIFJlYWRN
ZW1vcnkoaW50IHZpcnRBZGRyLCBpbnQgc2l6ZSwgaW50ICp2YWx1ZSk7CiAgICBib29sIFdyaXRl
TWVtb3J5KGludCB2aXJ0QWRkciwgaW50IHNpemUsIGludCB2YWx1ZSk7CgoKCgogICAgY2hhciAq
cHJvZ3JhbU5hbWU7ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAoKCiAgcHJpdmF0ZToKICAgIFRyYW5zbGF0aW9uRW50cnkgKnBhZ2VU
YWJsZTsJIAoJCQkJCSAKICAgIHVuc2lnbmVkIGludCBudW1QYWdlczsJCSAKCQkJCQkgCgogICAg
Ym9vbCBMb2FkKGNoYXIgKmZpbGVOYW1lKTsJCSAKCQkJCQkgCgogICAgdm9pZCBJbml0UmVnaXN0
ZXJzKCk7CQkgCgkJCQkJIAoKICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmV4dEFzaWQ7ICAgICAg
ICAKICAgIHVuc2lnbmVkIGludCBhc2lkOwoKCiAgICB2b2lkIENvcHlJbih2b2lkICprZXJuZWxT
cmMsIGludCB2aXJ0QWRkciwgaW50IGxlbmd0aCk7CiAgICB2b2lkIFRva2VuaXplKGNoYXIgKnMp
OwogICAgdm9pZCBNYWluU3RhY2soY2hhciAqcyk7CiAgICBjaGFyICoqYXJnQXJyOwogICAgaW50
IG51bUFyZ3M7CgoKCiAgICBib29sIHBhZ2VUYWJsZUFsbG9jYXRlZDsgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgoKCiAgICBI
YXNoVGFibGU8aW50LCBQYWdlVGFibGVFbnRyeSAqPiAqSGFzaFBUOyAgCiAgICB2b2lkIExvYWRO
ZXdQYWdlRnJvbUZpbGUoaW50IHZpcnR1YWxQYWdlLCBpbnQgc2l6ZSwgaW50IG9mZnNldCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuRmlsZSAqZXhlY3V0YWJsZSk7Cn07CgppbnQg
SGFzaEZuKFBhZ2VUYWJsZUVudHJ5ICpwdGUpIHtyZXR1cm4gcHRlLT50ZS52aXJ0dWFsUGFnZTt9
CmludCBFeHRyYWN0S2V5RnJvbVBhZ2VUYWJsZUVudHJ5KFBhZ2VUYWJsZUVudHJ5ICpwdGUpCiAg
ICAgICAgICAge3JldHVybiBwdGUtPnRlLnZpcnR1YWxQYWdlO30KCgoKCgoKIyA1NyAiLi4vLi4v
dGhyZWFkcy90aHJlYWQuaCIgMgoKCgogCiAKIAogCiAKIAoKCgoKIAogCmNvbnN0IGludCBTdGFj
a1NpemUgPSAoNCAqIDEwMjQpOwkgCgoKIAplbnVtIFRocmVhZFN0YXR1cyB7IEpVU1RfQ1JFQVRF
RCwgUlVOTklORywgUkVBRFksIEJMT0NLRUQgfTsKCgogCiAKIAogCiAKIAogCiAKIAogCgpjbGFz
cyBUaHJlYWQgewogIHByaXZhdGU6CiAgICAgCiAgICAgCiAgICBpbnQgKnN0YWNrVG9wOwkJCSAg
CiAgICB2b2lkICptYWNoaW5lU3RhdGVbNzUgXTsgICAKCiAgcHVibGljOgogICAgVGhyZWFkKGNo
YXIqIGRlYnVnTmFtZSk7CQkgCgoKICAgIFRocmVhZChjaGFyKiBkZWJ1Z05hbWUsIGJvb2wgam9p
bmFibGUpOwoKCiAgICB+VGhyZWFkKCk7IAkJCQkgCgkJCQkJIAoJCQkJCSAKCQkJCQkgCgogICAg
IAoKICAgIHZvaWQgRm9yayhWb2lkRnVuY3Rpb25QdHIgZnVuYywgdm9pZCAqYXJnKTsgCiAgICAJ
CQkJIAogICAgdm9pZCBZaWVsZCgpOyAgCQkgCgkJCQkgCiAgICB2b2lkIFNsZWVwKGJvb2wgZmlu
aXNoaW5nKTsgIAoJCQkJIAogICAgdm9pZCBCZWdpbigpOwkJIAogICAgdm9pZCBGaW5pc2goKTsg
IAkJIAogICAgCiAgICB2b2lkIENoZWNrT3ZlcmZsb3coKTsgICAJIAogICAgdm9pZCBzZXRTdGF0
dXMoVGhyZWFkU3RhdHVzIHN0KSB7IHN0YXR1cyA9IHN0OyB9CiAgICBjaGFyKiBnZXROYW1lKCkg
eyByZXR1cm4gKG5hbWUpOyB9CiAgICB2b2lkIFByaW50KCkgeyBwcmludGYoIiVzIixuYW1lKTsg
fQogICAgdm9pZCBTZWxmVGVzdCgpOwkJIAoKCiAgICB2b2lkIEpvaW4oKTsJCQoKCiAgcHJpdmF0
ZToKICAgICAKICAgIAogICAgaW50ICpzdGFjazsgCSAJIAoJCQkJIAoJCQkJIAogICAgVGhyZWFk
U3RhdHVzIHN0YXR1czsJIAogICAgY2hhciogbmFtZTsKCiAgICB2b2lkIFN0YWNrQWxsb2NhdGUo
Vm9pZEZ1bmN0aW9uUHRyIGZ1bmMsIHZvaWQgKmFyZyk7CiAgICAJCQkJIAoJCQkJIAoKCgogIHBy
aXZhdGU6CiAgICBMaXN0PFRocmVhZCAqPiAqam9pbmFibGVDaGlsZHJlbkxpc3Q7CiAgICAJCQkJ
IAogICAgCQkJCSAKICAgIAoKICBwdWJsaWM6CgogICAgVGhyZWFkICpwYXJlbnQ7CQkgCiAgICAJ
CQkJIAoKICBwcml2YXRlOgoKICAgIAogICAgU2VtYXBob3JlICpqb2luU2VtOwkJIAogICAgCQkJ
CSAKICAgIAkJCQkgCgogICAgYm9vbCBhbHJlYWR5Sm9pbmVkOwkJIAogICAgCQkJCSAKICAgIAkJ
CQkgCgogICAgYm9vbCBqb2luYWJsZTsJCSAKICAgIAkJCQkgCgogICAgYm9vbCBmaW5pc2hpbmc7
CgoKICBwdWJsaWM6CiAgICB2b2lkIEFkZEpvaW5hYmxlQ2hpbGQoVGhyZWFkICp0KSB7IGpvaW5h
YmxlQ2hpbGRyZW5MaXN0LT5BcHBlbmQodCk7IH0JCgogICAgdm9pZCBSZW1vdmVKb2luYWJsZUNo
aWxkKFRocmVhZCAqdCkgeyBqb2luYWJsZUNoaWxkcmVuTGlzdC0+UmVtb3ZlKHQpOyB9CgogICAg
Ym9vbCBIYXNDaGlsZFRocmVhZChUaHJlYWQgKnQpIHsgcmV0dXJuIGpvaW5hYmxlQ2hpbGRyZW5M
aXN0LT5Jc0luTGlzdCh0KTsgfQoKICAgIGJvb2wgSGFzQWxyZWFkeUpvaW5lZCgpIHsgcmV0dXJu
IGFscmVhZHlKb2luZWQ7IH0JCgogICAgYm9vbCBJc0pvaW5hYmxlKCkgeyByZXR1cm4gam9pbmFi
bGU7IH0KCgogICAgYm9vbCBjaGlsZEF0dGVtcHRlZExvYWQ7CgogICAgCiAgcHJpdmF0ZToJCgoK
CgoKCiAKIAogCgogICAgaW50IHVzZXJSZWdpc3RlcnNbNDAgXTsJIAoKICBwdWJsaWM6CiAgICB2
b2lkIFNhdmVVc2VyU3RhdGUoKTsJCSAKICAgIHZvaWQgUmVzdG9yZVVzZXJTdGF0ZSgpOwkJIAoK
ICAgIEFkZHJTcGFjZSAqc3BhY2U7CQkJIAoKCgogICAgaW50IGV4aXRTdGF0dXM7CQkgCiAgICAJ
CQkJIAoKICAgIE9wZW5GaWxlICoqb3BlbkZpbGVJZFRhYmxlOwkKICAgIAkJCQkgCiAgICAJCQkJ
IAoKfTsKCiAKZXh0ZXJuIHZvaWQgVGhyZWFkUHJpbnQoVGhyZWFkICp0aHJlYWQpOwkgCgogCgpl
eHRlcm4gIkMiIHsKIAogCiAKIAp2b2lkIFRocmVhZFJvb3QoKTsKCiAKdm9pZCBTV0lUQ0goVGhy
ZWFkICpvbGRUaHJlYWQsIFRocmVhZCAqbmV3VGhyZWFkKTsKfQoKCiMgMTUgIi4uLy4uL3RocmVh
ZHMva2VybmVsLmgiIDIKCiMgMSAiLi4vLi4vdGhyZWFkcy9zY2hlZHVsZXIuaCIgMQogCiAKIAog
CiAKIAogCiAKCgoKCiMgMSAiLi4vLi4vbGliL2NvcHlyaWdodC5oIiAxCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDEzICIuLi8uLi90aHJlYWRzL3NjaGVkdWxlci5oIiAyCgoKCgogCiAKIAoK
Y2xhc3MgU2NoZWR1bGVyIHsKICBwdWJsaWM6CiAgICBTY2hlZHVsZXIoKTsJCSAKICAgIH5TY2hl
ZHVsZXIoKTsJCSAKCiAgICB2b2lkIFJlYWR5VG9SdW4oVGhyZWFkKiB0aHJlYWQpOwkKICAgIAkJ
CQkgCiAgICBUaHJlYWQqIEZpbmROZXh0VG9SdW4oKTsJIAoJCQkJIAogICAgdm9pZCBSdW4oVGhy
ZWFkKiBuZXh0VGhyZWFkLCBib29sIGZpbmlzaGluZyk7CiAgICAJCQkJIAogICAgdm9pZCBDaGVj
a1RvQmVEZXN0cm95ZWQoKTsgCiAgICAJCQkJIAogICAgdm9pZCBQcmludCgpOwkJIAogICAgCiAg
ICAgCiAgICAKICBwcml2YXRlOgogICAgTGlzdDxUaHJlYWQgKj4gKnJlYWR5TGlzdDsgICAKCQkJ
CSAKICAgIFRocmVhZCAqdG9CZURlc3Ryb3llZDsJIAogICAgCQkJCSAKfTsKCgojIDE2ICIuLi8u
Li90aHJlYWRzL2tlcm5lbC5oIiAyCgoKIyAxICIvdXNyL2NsYXNzL2NzMTQwL25hY2hvcy9tYWNo
aW5lL3N0YXRzLmgiIDEKIAogCiAKIAogCiAKIAogCiAKCgoKCiMgMSAiLi4vLi4vbGliL2NvcHly
aWdodC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDE0ICIvdXNyL2NsYXNzL2NzMTQw
L25hY2hvcy9tYWNoaW5lL3N0YXRzLmgiIDIKCgogCiAKIAogCiAKCmNsYXNzIFN0YXRpc3RpY3Mg
ewogIHB1YmxpYzoKICAgIGludCB0b3RhbFRpY2tzOyAgICAgIAkgCiAgICBpbnQgaWRsZVRpY2tz
OyAgICAgICAJIAogICAgaW50IHN5c3RlbVRpY2tzOwkgCSAKICAgIGludCB1c2VyVGlja3M7ICAg
ICAgIAkgCgkJCQkgCgkJCQkgCgogICAgaW50IG51bURpc2tSZWFkczsJCSAKICAgIGludCBudW1E
aXNrV3JpdGVzOwkJIAogICAgaW50IG51bUNvbnNvbGVDaGFyc1JlYWQ7CSAKICAgIGludCBudW1D
b25zb2xlQ2hhcnNXcml0dGVuOyAgCiAgICBpbnQgbnVtUGFnZUZhdWx0czsJCSAKICAgIGludCBu
dW1QYWNrZXRzU2VudDsJCSAKICAgIGludCBudW1QYWNrZXRzUmVjdmQ7CSAKCiAgICBTdGF0aXN0
aWNzKCk7IAkJIAoKICAgIHZvaWQgUHJpbnQoKTsJCSAKfTsKCiAKIAogCiAKIAogCiAKCmNvbnN0
IGludCBVc2VyVGljayA9IAkgICAxOwkgCmNvbnN0IGludCBTeXN0ZW1UaWNrID0JICAxMDsgCSAK
Y29uc3QgaW50IFJvdGF0aW9uVGltZSA9IDUwMDsgCSAKY29uc3QgaW50IFNlZWtUaW1lID0JIDUw
MDsgIAkgCmNvbnN0IGludCBDb25zb2xlVGltZSA9CSAxMDA7CSAKY29uc3QgaW50IE5ldHdvcmtU
aW1lID0JIDEwMDsgIAkgCgogCmV4dGVybiBpbnQgVGltZXJUaWNrczsgIAkgCgoKIyAxOCAiLi4v
Li4vdGhyZWFkcy9rZXJuZWwuaCIgMgoKIyAxICIuLi8uLi90aHJlYWRzL2FsYXJtLmgiIDEKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKIyAxICIuLi8uLi9saWIvY29weXJpZ2h0
LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjEgIi4uLy4uL3RocmVhZHMvYWxhcm0u
aCIgMgoKCgojIDEgIi91c3IvY2xhc3MvY3MxNDAvbmFjaG9zL21hY2hpbmUvdGltZXIuaCIgMQog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKIyAxICIuLi8uLi9saWIvY29w
eXJpZ2h0LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjMgIi91c3IvY2xhc3MvY3Mx
NDAvbmFjaG9zL21hY2hpbmUvdGltZXIuaCIgMgoKCgoKIApjbGFzcyBUaW1lciA6IHB1YmxpYyBD
YWxsQmFja09iaiB7CiAgcHVibGljOgogICAgVGltZXIoYm9vbCBkb1JhbmRvbSwgQ2FsbEJhY2tP
YmogKnRvQ2FsbCk7CgkJCQkgCgkJCQkgCiAgICB2aXJ0dWFsIH5UaW1lcigpIHt9CiAgICAKICAg
IHZvaWQgRGlzYWJsZSgpIHsgZGlzYWJsZSA9IHRydWUgOyB9CiAgICAJCQkJIAoJCQkJIAoKICBw
cml2YXRlOgogICAgYm9vbCByYW5kb21pemU7CQkgCiAgICBDYWxsQmFja09iaiAqY2FsbFBlcmlv
ZGljYWxseTsgIAogICAgYm9vbCBkaXNhYmxlOwkJIAogICAgCQkJCSAKICAgIAogICAgdm9pZCBD
YWxsQmFjaygpOwkJIAoJCQkJIAoKICAgIHZvaWQgU2V0SW50ZXJydXB0KCk7ICAJIAogICAgCQkJ
CSAKCQkJCSAKfTsKCgojIDI0ICIuLi8uLi90aHJlYWRzL2FsYXJtLmgiIDIKCgogCmNsYXNzIEFs
YXJtIDogcHVibGljIENhbGxCYWNrT2JqIHsKICBwdWJsaWM6CiAgICBBbGFybShib29sIGRvUmFu
ZG9tWWllbGQpOwkgCgkJCQkgCiAgICB+QWxhcm0oKSB7IGRlbGV0ZSB0aW1lcjsgfQogICAgCiAg
ICB2b2lkIFdhaXRVbnRpbChpbnQgeCk7CSAKCiAgICBpbnQgbnVtSm9pbldhaXRpbmc7CiAgICAK
ICBwcml2YXRlOgogICAgVGltZXIgKnRpbWVyOwkJIAoKICAgIHZvaWQgQ2FsbEJhY2soKTsJCSAK
CQkJCSAKCgp9OwoKCiMgMTkgIi4uLy4uL3RocmVhZHMva2VybmVsLmgiIDIKCgoKCgoKCmNsYXNz
IFRocmVhZGVkS2VybmVsIHsKICBwdWJsaWM6CiAgICBUaHJlYWRlZEtlcm5lbChpbnQgYXJnYywg
Y2hhciAqKmFyZ3YpOwogICAgCQkJCSAKICAgIH5UaHJlYWRlZEtlcm5lbCgpOwkJIAogICAgCiAg
ICB2b2lkIEluaXRpYWxpemUoKTsgCQkgCgkJCQkgCgkJCQkgCgogICAgdm9pZCBSdW4oKTsJCQkg
CgkJCQkgICAgCiAgICB2b2lkIFNlbGZUZXN0KCk7CQkgCiAgICAKIAogCiAKIAoKIAogICAgVGhy
ZWFkICpjdXJyZW50VGhyZWFkOwkgCiAgICBTY2hlZHVsZXIgKnNjaGVkdWxlcjsJIAogICAgSW50
ZXJydXB0ICppbnRlcnJ1cHQ7CSAKICAgIFN0YXRpc3RpY3MgKnN0YXRzOwkJIAogICAgQWxhcm0g
KmFsYXJtOwkJIAoKCiAgICBGaWxlU3lzdGVtICpmaWxlU3lzdGVtOwoKCgoKCiAgICBpbnQgbnVt
VGhyZWFkczsgICAgICAgICAgICAgIAoKICBwcml2YXRlOgogICAgYm9vbCByYW5kb21TbGljZTsJ
CSAKICAgIGJvb2wgZm9ybWF0OyAgICAgICAgICAgICAgICAgCn07CgoKIyAxOCAiLi4vLi4vdXNl
cnByb2cvdXNlcmtlcm5lbC5oIiAyCgoKIyAxICIuLi8uLi91c2VycHJvZy9zeW5jaGNvbnNvbGUu
aCIgMQogCiAKIAogCiAKIAogCiAKIAogCgoKCgpjbGFzcyBTeW5jaENvbnNvbGVJbnB1dDsKY2xh
c3MgU3luY2hDb25zb2xlT3V0cHV0OwoKIyAxICIuLi8uLi9saWIvY29weXJpZ2h0LmgiIDEKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTggIi4uLy4uL3VzZXJwcm9nL3N5bmNoY29uc29sZS5o
IiAyCgoKCiMgMSAiL3Vzci9jbGFzcy9jczE0MC9uYWNob3MvbWFjaGluZS9jb25zb2xlLmgiIDEK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKIyAx
ICIuLi8uLi9saWIvY29weXJpZ2h0LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzAg
Ii91c3IvY2xhc3MvY3MxNDAvbmFjaG9zL21hY2hpbmUvY29uc29sZS5oIiAyCgoKCgogCiAKIAog
CiAKIAogCiAKIAogCiAKIAoKY2xhc3MgQ29uc29sZUlucHV0IDogcHVibGljIENhbGxCYWNrT2Jq
IHsKICBwdWJsaWM6CiAgICBDb25zb2xlSW5wdXQoY2hhciAqcmVhZEZpbGUsIENhbGxCYWNrT2Jq
ICp0b0NhbGwpOwoJCQkJIAogICAgfkNvbnNvbGVJbnB1dCgpOwkJIAoKICAgIGNoYXIgR2V0Q2hh
cigpOwkgICAJIAoJCQkJIAogICAgCQkJCSAKCQkJCSAKCiAgICB2b2lkIENhbGxCYWNrKCk7CQkg
CgkJCQkgCgogIHByaXZhdGU6CiAgICBpbnQgcmVhZEZpbGVObzsJCQkgCiAgICBDYWxsQmFja09i
aiAqY2FsbFdoZW5BdmFpbDsJCSAKCQkJCQkgCiAgICBjaGFyIGluY29taW5nOyAgICAJCQkgCgkJ
CQkJIAoJCQkJCSAKfTsKCmNsYXNzIENvbnNvbGVPdXRwdXQgOiBwdWJsaWMgQ2FsbEJhY2tPYmog
ewogIHB1YmxpYzoKICAgIENvbnNvbGVPdXRwdXQoY2hhciAqd3JpdGVGaWxlLCBDYWxsQmFja09i
aiAqdG9DYWxsKTsKCQkJCSAKICAgIH5Db25zb2xlT3V0cHV0KCk7CQkgCgogICAgdm9pZCBQdXRD
aGFyKGNoYXIgY2gpOwkgCgkJCQkgCgkJCQkgCgogICAgdm9pZCBDYWxsQmFjaygpOwkJIAoJCQkJ
IAoKICBwcml2YXRlOgogICAgaW50IHdyaXRlRmlsZU5vOwkJCSAKICAgIENhbGxCYWNrT2JqICpj
YWxsV2hlbkRvbmU7CQkgCgkJCQkJIAogICAgYm9vbCBwdXRCdXN5OyAgICAJCQkgCgkJCQkJIAp9
OwoKCiMgMjEgIi4uLy4uL3VzZXJwcm9nL3N5bmNoY29uc29sZS5oIiAyCgojIDEgIi4uLy4uL3Ro
cmVhZHMvc3luY2guaCIgMQogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCgpjbGFz
cyBMb2NrOwpjbGFzcyBTZW1hcGhvcmU7CmNsYXNzIENvbmRpdGlvbjsKCiMgMSAiLi4vLi4vbGli
L2NvcHlyaWdodC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI1ICIuLi8uLi90aHJl
YWRzL3N5bmNoLmgiIDIKCiMgMSAiLi4vLi4vdGhyZWFkcy9tYWluLmgiIDEKIAogCiAKIAogCiAK
IAogCgojIDMyICIuLi8uLi90aHJlYWRzL21haW4uaCIKCgojIDI2ICIuLi8uLi90aHJlYWRzL3N5
bmNoLmgiIDIKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKY2xhc3MgU2VtYXBob3Jl
IHsKICBwdWJsaWM6CiAgICBTZW1hcGhvcmUoY2hhciogZGVidWdOYW1lLCBpbnQgaW5pdGlhbFZh
bHVlKTsJIAogICAgflNlbWFwaG9yZSgpOyAgIAkJCQkJIAogICAgY2hhciogZ2V0TmFtZSgpIHsg
cmV0dXJuIG5hbWU7fQkJCSAKICAgIAogICAgdm9pZCBQKCk7CSAJIAogICAgdm9pZCBWKCk7CSAJ
IAogICAgdm9pZCBTZWxmVGVzdCgpOwkgCiAgICAKICBwcml2YXRlOgogICAgY2hhciogbmFtZTsg
ICAgICAgICAKICAgIGludCB2YWx1ZTsgICAgICAgICAgCiAgICBMaXN0PFRocmVhZCAqPiAqcXVl
dWU7ICAgICAKCQkgIAkgCiAgIH07CgogCiAKIAogCiAKIAogCiAKIAogCiAKCmNsYXNzIExvY2sg
ewogIHB1YmxpYzoKICAgIExvY2soY2hhciogZGVidWdOYW1lKTsgIAkgCiAgICB+TG9jaygpOwkJ
CSAKICAgIGNoYXIqIGdldE5hbWUoKSB7IHJldHVybiBuYW1lOyB9CSAKCiAgICB2b2lkIEFjcXVp
cmUoKTsgCQkgCiAgICB2b2lkIFJlbGVhc2UoKTsgCQkgCgogICAgYm9vbCBJc0hlbGRCeUN1cnJl
bnRUaHJlYWQoKTsgCiAgICAJCQkJIAoJCQkJIAogICAgCiAgICAgCiAgICAKICBwcml2YXRlOgog
ICAgY2hhciAqbmFtZTsJCQkgCiAgICBUaHJlYWQgKmxvY2tIb2xkZXI7CQkgCiAgICBTZW1hcGhv
cmUgKnNlbWFwaG9yZTsJIAp9OwoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgpjbGFzcyBDb25kaXRpb24gewogIHB1YmxpYzoK
ICAgIENvbmRpdGlvbihjaGFyKiBkZWJ1Z05hbWUpOwkgCgkJCQkJIAogICAgfkNvbmRpdGlvbigp
OwkJCSAKICAgIGNoYXIqIGdldE5hbWUoKSB7IHJldHVybiAobmFtZSk7IH0KICAgIAogICAgdm9p
ZCBXYWl0KExvY2sgKmNvbmRpdGlvbkxvY2spOyAJIAoJCQkJCSAKCQkJCQkgCgkJCQkJIAogICAg
dm9pZCBTaWduYWwoTG9jayAqY29uZGl0aW9uTG9jayk7ICAgIAogICAgdm9pZCBCcm9hZGNhc3Qo
TG9jayAqY29uZGl0aW9uTG9jayk7IAoJCQkJCSAKICAgICAKCiAgcHJpdmF0ZToKICAgIGNoYXIq
IG5hbWU7CiAgICBMaXN0PFNlbWFwaG9yZSAqPiAqd2FpdFF1ZXVlOwkgCn07CgojIDIyICIuLi8u
Li91c2VycHJvZy9zeW5jaGNvbnNvbGUuaCIgMgoKCiAKIAoKY2xhc3MgU3luY2hDb25zb2xlSW5w
dXQgOiBwdWJsaWMgQ2FsbEJhY2tPYmogewogIHB1YmxpYzoKICAgIFN5bmNoQ29uc29sZUlucHV0
KGNoYXIgKmlucHV0RmlsZSk7ICAKICAgIH5TeW5jaENvbnNvbGVJbnB1dCgpOwkJIAoKICAgIGNo
YXIgR2V0Q2hhcigpOwkJIAogICAgCiAgcHJpdmF0ZToKICAgIENvbnNvbGVJbnB1dCAqY29uc29s
ZUlucHV0OwkgCiAgICBMb2NrICpsb2NrOwkJCSAKICAgIFNlbWFwaG9yZSAqd2FpdEZvcjsJCSAK
CiAgICB2b2lkIENhbGxCYWNrKCk7CQkgCn07CgpjbGFzcyBTeW5jaENvbnNvbGVPdXRwdXQgOiBw
dWJsaWMgQ2FsbEJhY2tPYmogewogIHB1YmxpYzoKICAgIFN5bmNoQ29uc29sZU91dHB1dChjaGFy
ICpvdXRwdXRGaWxlKTsgIAogICAgflN5bmNoQ29uc29sZU91dHB1dCgpOwoKICAgIHZvaWQgUHV0
Q2hhcihjaGFyIGNoKTsJIAogICAgCiAgcHJpdmF0ZToKICAgIENvbnNvbGVPdXRwdXQgKmNvbnNv
bGVPdXRwdXQ7IAogICAgTG9jayAqbG9jazsJCQkgCiAgICBTZW1hcGhvcmUgKndhaXRGb3I7CQkg
CgogICAgdm9pZCBDYWxsQmFjaygpOwkJIAp9OwoKCiMgMjAgIi4uLy4uL3VzZXJwcm9nL3VzZXJr
ZXJuZWwuaCIgMgoKCiMgMSAiLi4vLi4vbGliL2JpdG1hcC5oIiAxCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKCgoKCiMgMSAiLi4vLi4vbGliL2NvcHlyaWdodC5oIiAxCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDE4ICIuLi8uLi9saWIvYml0bWFwLmgiIDIKCgoKIApjb25zdCBpbnQgQml0
c0luQnl0ZSA9CTg7CmNvbnN0IGludCBCaXRzSW5Xb3JkID0gc2l6ZW9mKHVuc2lnbmVkIGludCkg
KiBCaXRzSW5CeXRlOwoKIAogCiAKIAogCiAKIAoKY2xhc3MgQml0bWFwIHsKICBwdWJsaWM6CiAg
ICBCaXRtYXAoaW50IG51bUl0ZW1zKTsJIAoJCQkJIAogICAgfkJpdG1hcCgpOwkJCSAKICAgIAog
ICAgdm9pZCBNYXJrKGludCB3aGljaCk7ICAgCSAKICAgIHZvaWQgQ2xlYXIoaW50IHdoaWNoKTsg
IAkgCiAgICBib29sIFRlc3QoaW50IHdoaWNoKSBjb25zdDsJIAogICAgaW50IEZpbmRBbmRTZXQo
KTsgICAgICAgICAgCgkJCQkgCgkJCQkgCiAgICBpbnQgTnVtQ2xlYXIoKSBjb25zdDsJIAoKICAg
IHZvaWQgUHJpbnQoKSBjb25zdDsJCSAKICAgIHZvaWQgU2VsZlRlc3QoKTsJCSAKICAgIAogIHBy
b3RlY3RlZDoKICAgIGludCBudW1CaXRzOwkJIAogICAgaW50IG51bVdvcmRzOwkJIAoJCQkJIAoJ
CQkJIAoJCQkJIAogICAgdW5zaWduZWQgaW50ICptYXA7CQkgCn07CgoKIyAyMiAiLi4vLi4vdXNl
cnByb2cvdXNlcmtlcm5lbC5oIiAyCgoKCmNsYXNzIFVzZXJQcm9nS2VybmVsIDogcHVibGljIFRo
cmVhZGVkS2VybmVsIHsKICBwdWJsaWM6CiAgICBVc2VyUHJvZ0tlcm5lbChpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpOwoJCQkJIAogICAgflVzZXJQcm9nS2VybmVsKCk7CQkgCgogICAgdm9pZCBJbml0
aWFsaXplKCk7CQkgCgogICAgdm9pZCBSdW4oKTsJCQkgCgogICAgdm9pZCBTZWxmVGVzdCgpOwkJ
IAoKIAogICAgTWFjaGluZSAqbWFjaGluZTsKICAgIFN5bmNoQ29uc29sZU91dHB1dCAqY29uc29s
ZU91dHB1dDsKICAgIFN5bmNoQ29uc29sZUlucHV0ICpjb25zb2xlSW5wdXQ7CgoKICAgIEJpdG1h
cCAqcGh5c2ljYWxNZW1vcnk7CiAgICBMb2NrICpwaHlzTWVtTG9jazsKCgoKICAgIFBhZ2VUYWJs
ZUVudHJ5ICpJbnZlcnRlZFBUW051bVBoeXNQYWdlc107ICAKICAgIGJvb2wgQWxsb2NQaHlzUGFn
ZShQYWdlVGFibGVFbnRyeSAqcHRlKTsgIAogICAgCgogICAgCiAgICAKICBwcml2YXRlOgogICAg
Ym9vbCBkZWJ1Z1VzZXJQcm9nOwkJIAp9OwoKCgojIDIxICIuLi8uLi90aHJlYWRzL21haW4uaCIg
MgoKCgoKCgoKCmV4dGVybiBVc2VyUHJvZ0tlcm5lbCAgKmtlcm5lbDsKZXh0ZXJuIERlYnVnICpk
ZWJ1ZzsKCgoKIyAyNSAiL3Vzci9jbGFzcy9jczE0MC9uYWNob3MvbWFjaGluZS9pbnRlcnJ1cHQu
Y2MiIDIKCgogCgpzdGF0aWMgY2hhciAqaW50TGV2ZWxOYW1lc1tdID0geyAib2ZmIiwgIm9uIn07
CnN0YXRpYyBjaGFyICppbnRUeXBlTmFtZXNbXSA9IHsgInRpbWVyIiwgImRpc2siLCAiY29uc29s
ZSB3cml0ZSIsIAoJCQkiY29uc29sZSByZWFkIiwgImVsZXZhdG9yIiwgIm5ldHdvcmsgc2VuZCIs
IAoJCQkibmV0d29yayByZWN2In07CgogCiAKIAogCiAKIAogCiAKIAoKUGVuZGluZ0ludGVycnVw
dDo6UGVuZGluZ0ludGVycnVwdChDYWxsQmFja09iaiAqY2FsbE9uSW50LCAKCQkJCQlpbnQgdGlt
ZSwgSW50VHlwZSBraW5kKQp7CiAgICBjYWxsT25JbnRlcnJ1cHQgPSBjYWxsT25JbnQ7CiAgICB3
aGVuID0gdGltZTsKICAgIHR5cGUgPSBraW5kOwp9CgogCiAKIAogCgpzdGF0aWMgaW50ClBlbmRp
bmdDb21wYXJlIChQZW5kaW5nSW50ZXJydXB0ICp4LCBQZW5kaW5nSW50ZXJydXB0ICp5KQp7CiAg
ICBpZiAoeC0+d2hlbiA8IHktPndoZW4pIHsgcmV0dXJuIC0xOyB9CiAgICBlbHNlIGlmICh4LT53
aGVuID4geS0+d2hlbikgeyByZXR1cm4gMTsgfQogICAgZWxzZSB7IHJldHVybiAwOyB9Cn0KCiAK
IAogCiAKIAogCgpJbnRlcnJ1cHQ6OkludGVycnVwdCgpCnsKICAgIGxldmVsID0gSW50T2ZmOwog
ICAgcGVuZGluZyA9IG5ldyBTb3J0ZWRMaXN0PFBlbmRpbmdJbnRlcnJ1cHQgKj4oUGVuZGluZ0Nv
bXBhcmUpOwogICAgaW5IYW5kbGVyID0gZmFsc2UgOwogICAgeWllbGRPblJldHVybiA9IGZhbHNl
IDsKICAgIHN0YXR1cyA9IFN5c3RlbU1vZGU7Cn0KCiAKIAogCiAKCkludGVycnVwdDo6fkludGVy
cnVwdCgpCnsKICAgIHdoaWxlICghcGVuZGluZy0+SXNFbXB0eSgpKSB7CglkZWxldGUgcGVuZGlu
Zy0+UmVtb3ZlRnJvbnQoKTsKICAgIH0KICAgIGRlbGV0ZSBwZW5kaW5nOwp9CgogCiAKIAogCiAK
IAogCiAKIAogCgp2b2lkCkludGVycnVwdDo6Q2hhbmdlTGV2ZWwoSW50U3RhdHVzIG9sZCwgSW50
U3RhdHVzIG5vdykKewogICAgbGV2ZWwgPSBub3c7CiAgICBpZiAoIWRlYnVnLT5Jc0VuYWJsZWQo
IGRiZ0ludCApKSB7fSBlbHNlIHsgcHJpbnRmICAoIlx0aW50ZXJydXB0czogJXMgLT4gJXNcbiIs
IGludExldmVsTmFtZXNbb2xkXSwgaW50TGV2ZWxOYW1lc1tub3ddKSA7IH0gOwp9CgogCiAKIAog
CiAKIAogCiAKIAogCgpJbnRTdGF0dXMKSW50ZXJydXB0OjpTZXRMZXZlbChJbnRTdGF0dXMgbm93
KQp7CiAgICBJbnRTdGF0dXMgb2xkID0gbGV2ZWw7CiAgICAKICAgICAKICAgIGlmICggKG5vdyA9
PSBJbnRPZmYpIHx8IChpbkhhbmRsZXIgPT0gZmFsc2UgKSApIHt9IGVsc2UgeyBwcmludGYoIkFz
c2VydGlvbiBmYWlsZWQ6IGxpbmUgJWQgZmlsZSAlc1xuIiwgMTI5LCAiL3Vzci9jbGFzcy9jczE0
MC9uYWNob3MvbWFjaGluZS9pbnRlcnJ1cHQuY2MiKTsgQWJvcnQoKTsgfSA7CgogICAgQ2hhbmdl
TGV2ZWwob2xkLCBub3cpOwkJCSAKICAgIGlmICgobm93ID09IEludE9uKSAmJiAob2xkID09IElu
dE9mZikpIHsKCU9uZVRpY2soKTsJCQkJIAogICAgfQogICAgcmV0dXJuIG9sZDsKfQoKIAogCiAK
IAogCiAKIAogCiAKdm9pZApJbnRlcnJ1cHQ6Ok9uZVRpY2soKQp7CiAgICBNYWNoaW5lU3RhdHVz
IG9sZFN0YXR1cyA9IHN0YXR1czsKICAgIFN0YXRpc3RpY3MgKnN0YXRzID0ga2VybmVsLT5zdGF0
czsKCiAKICAgIGlmIChzdGF0dXMgPT0gU3lzdGVtTW9kZSkgewogICAgICAgIHN0YXRzLT50b3Rh
bFRpY2tzICs9IFN5c3RlbVRpY2s7CglzdGF0cy0+c3lzdGVtVGlja3MgKz0gU3lzdGVtVGljazsK
ICAgIH0gZWxzZSB7CQkJCQkgCglzdGF0cy0+dG90YWxUaWNrcyArPSBVc2VyVGljazsKCXN0YXRz
LT51c2VyVGlja3MgKz0gVXNlclRpY2s7CiAgICB9CiAgICBpZiAoIWRlYnVnLT5Jc0VuYWJsZWQo
IGRiZ0ludCApKSB7fSBlbHNlIHsgcHJpbnRmICAoIj09IFRpY2sgJWQgPT1cbiIsIHN0YXRzLT50
b3RhbFRpY2tzKSA7IH0gOwoKIAogICAgQ2hhbmdlTGV2ZWwoSW50T24sIEludE9mZik7CSAKCQkJ
CSAKCQkJCSAKICAgIENoZWNrSWZEdWUoZmFsc2UgKTsJCSAKICAgIENoYW5nZUxldmVsKEludE9m
ZiwgSW50T24pOwkgCiAgICBpZiAoeWllbGRPblJldHVybikgewkgCiAgICAJCQkJIAoJeWllbGRP
blJldHVybiA9IGZhbHNlIDsKIAlzdGF0dXMgPSBTeXN0ZW1Nb2RlOwkJIAoJa2VybmVsLT5jdXJy
ZW50VGhyZWFkLT5ZaWVsZCgpOwoJc3RhdHVzID0gb2xkU3RhdHVzOwogICAgfQp9CgogCiAKIAog
CiAKIAogCiAKIAogCgp2b2lkCkludGVycnVwdDo6WWllbGRPblJldHVybigpCnsgCiAgICBpZiAo
IGluSGFuZGxlciA9PSB0cnVlICApIHt9IGVsc2UgeyBwcmludGYoIkFzc2VydGlvbiBmYWlsZWQ6
IGxpbmUgJWQgZmlsZSAlc1xuIiwgMTkyLCAiL3Vzci9jbGFzcy9jczE0MC9uYWNob3MvbWFjaGlu
ZS9pbnRlcnJ1cHQuY2MiKTsgQWJvcnQoKTsgfSA7ICAKICAgIHlpZWxkT25SZXR1cm4gPSB0cnVl
IDsgCn0KCiAKIAogCiAKIAogCiAKIAogCiAKIAp2b2lkCkludGVycnVwdDo6SWRsZSgpCnsKICAg
IGlmICghZGVidWctPklzRW5hYmxlZCggZGJnSW50ICkpIHt9IGVsc2UgeyBwcmludGYgICgiTWFj
aGluZSBpZGxpbmc7IGNoZWNraW5nIGZvciBpbnRlcnJ1cHRzLlxuIikgOyB9IDsKICAgIHN0YXR1
cyA9IElkbGVNb2RlOwogICAgaWYgKENoZWNrSWZEdWUodHJ1ZSApKSB7CSAKCXN0YXR1cyA9IFN5
c3RlbU1vZGU7CglyZXR1cm47CQkJIAoJCQkJIAogICAgfQoKICAgICAKICAgICAKICAgICAKICAg
ICAKCiAgICBpZiAoIWRlYnVnLT5Jc0VuYWJsZWQoIGRiZ0ludCApKSB7fSBlbHNlIHsgcHJpbnRm
ICAoIk1hY2hpbmUgaWRsZS4gIE5vIGludGVycnVwdHMgdG8gZG8uXG4iKSA7IH0gOwogICAgcHJp
bnRmKCJObyB0aHJlYWRzIHJlYWR5IG9yIHJ1bm5hYmxlLCBhbmQgbm8gcGVuZGluZyBpbnRlcnJ1
cHRzLlxuIik7CiAgICBwcmludGYoIkFzc3VtaW5nIHRoZSBwcm9ncmFtIGNvbXBsZXRlZC5cbiIp
OwogICAgSGFsdCgpOwp9CgogCiAKIAogCnZvaWQKSW50ZXJydXB0OjpIYWx0KCkKewogICAgcHJp
bnRmKCJNYWNoaW5lIGhhbHRpbmchXG5cbiIpOwogICAga2VybmVsLT5zdGF0cy0+UHJpbnQoKTsK
ICAgIGRlbGV0ZSBrZXJuZWw7CSAKfQoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKdm9p
ZApJbnRlcnJ1cHQ6OlNjaGVkdWxlKENhbGxCYWNrT2JqICp0b0NhbGwsIGludCBmcm9tTm93LCBJ
bnRUeXBlIHR5cGUpCnsKICAgIGludCB3aGVuID0ga2VybmVsLT5zdGF0cy0+dG90YWxUaWNrcyAr
IGZyb21Ob3c7CiAgICBQZW5kaW5nSW50ZXJydXB0ICp0b09jY3VyID0gbmV3IFBlbmRpbmdJbnRl
cnJ1cHQodG9DYWxsLCB3aGVuLCB0eXBlKTsKCiAgICBpZiAoIWRlYnVnLT5Jc0VuYWJsZWQoIGRi
Z0ludCApKSB7fSBlbHNlIHsgcHJpbnRmICAoIlNjaGVkdWxpbmcgaW50ZXJydXB0IGhhbmRsZXIg
dGhlICVzIGF0IHRpbWUgPSAlZFxuIiwgaW50VHlwZU5hbWVzW3R5cGVdLCB3aGVuKSA7IH0gOwog
ICAgaWYgKCBmcm9tTm93ID4gMCApIHt9IGVsc2UgeyBwcmludGYoIkFzc2VydGlvbiBmYWlsZWQ6
IGxpbmUgJWQgZmlsZSAlc1xuIiwgMjYzLCAiL3Vzci9jbGFzcy9jczE0MC9uYWNob3MvbWFjaGlu
ZS9pbnRlcnJ1cHQuY2MiKTsgQWJvcnQoKTsgfSA7CgogICAgcGVuZGluZy0+SW5zZXJ0KHRvT2Nj
dXIpOwp9CgogCiAKIAogCiAKIAogCiAKIAogCiAKIApib29sCkludGVycnVwdDo6Q2hlY2tJZkR1
ZShib29sIGFkdmFuY2VDbG9jaykKewogICAgUGVuZGluZ0ludGVycnVwdCAqbmV4dDsKICAgIFN0
YXRpc3RpY3MgKnN0YXRzID0ga2VybmVsLT5zdGF0czsKCiAgICBpZiAoIGxldmVsID09IEludE9m
ZiApIHt9IGVsc2UgeyBwcmludGYoIkFzc2VydGlvbiBmYWlsZWQ6IGxpbmUgJWQgZmlsZSAlc1xu
IiwgMjg2LCAiL3Vzci9jbGFzcy9jczE0MC9uYWNob3MvbWFjaGluZS9pbnRlcnJ1cHQuY2MiKTsg
QWJvcnQoKTsgfSA7CQkgCgkJCQkJIAogICAgaWYgKGRlYnVnLT5Jc0VuYWJsZWQoZGJnSW50KSkg
ewoJRHVtcFN0YXRlKCk7CiAgICB9CiAgICBpZiAocGVuZGluZy0+SXNFbXB0eSgpKSB7ICAgCSAK
CXJldHVybiBmYWxzZSA7CQogICAgfQkJCiAgICBuZXh0ID0gcGVuZGluZy0+RnJvbnQoKTsKICAg
IGlmIChuZXh0LT53aGVuID4gc3RhdHMtPnRvdGFsVGlja3MpIHsKICAgICAgICBpZiAoIWFkdmFu
Y2VDbG9jaykgewkJIAogICAgICAgICAgICByZXR1cm4gZmFsc2UgOwogICAgICAgIH0KICAgICAg
ICBlbHNlIHsgICAgICAJCSAKCSAgICBzdGF0cy0+aWRsZVRpY2tzICs9IChuZXh0LT53aGVuIC0g
c3RhdHMtPnRvdGFsVGlja3MpOwoJICAgIHN0YXRzLT50b3RhbFRpY2tzID0gbmV4dC0+d2hlbjsK
CX0KICAgIH0KCiAgICBpZiAoIWRlYnVnLT5Jc0VuYWJsZWQoIGRiZ0ludCApKSB7fSBlbHNlIHsg
cHJpbnRmICAoIkludm9raW5nIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgJXMgYXQgdGltZSAl
ZFxuIiwKCSAgaW50VHlwZU5hbWVzW25leHQtPnR5cGVdLCBuZXh0LT53aGVuKSA7IH0gOwoKICAg
IGlmIChrZXJuZWwtPm1hY2hpbmUgIT0gMCApIHsKICAgIAlrZXJuZWwtPm1hY2hpbmUtPkRlbGF5
ZWRMb2FkKDAsIDApOwogICAgfQoKICAgIGluSGFuZGxlciA9IHRydWUgOwogICAgZG8gewogICAg
ICAgIG5leHQgPSBwZW5kaW5nLT5SZW1vdmVGcm9udCgpOyAgICAgCiAgICAgICAgbmV4dC0+Y2Fs
bE9uSW50ZXJydXB0LT5DYWxsQmFjaygpOyAKCWRlbGV0ZSBuZXh0OwogICAgfSB3aGlsZSAoIXBl
bmRpbmctPklzRW1wdHkoKSAKICAgIAkJJiYgKHBlbmRpbmctPkZyb250KCktPndoZW4gPD0gc3Rh
dHMtPnRvdGFsVGlja3MpKTsKICAgIGluSGFuZGxlciA9IGZhbHNlIDsKICAgIHJldHVybiB0cnVl
IDsKfQoKIAogCiAKIAogCgpzdGF0aWMgdm9pZApQcmludFBlbmRpbmcgKFBlbmRpbmdJbnRlcnJ1
cHQgKnBlbmRpbmcpCnsKICAgIHByaW50ZigiSW50ZXJydXB0IGhhbmRsZXIgJXMiLGludFR5cGVO
YW1lc1twZW5kaW5nLT50eXBlXSk7CiAgICBwcmludGYoIiwgc2NoZWR1bGVkIGF0ICVkXG4iLCBw
ZW5kaW5nLT53aGVuKTsKfQoKIAogCiAKIAogCgp2b2lkCkludGVycnVwdDo6RHVtcFN0YXRlKCkK
ewogICAgcHJpbnRmKCJUaW1lOiAlZCIsIGtlcm5lbC0+c3RhdHMtPnRvdGFsVGlja3MpOwogICAg
cHJpbnRmKCIsIGludGVycnVwdHMgJXNcbiIsIGludExldmVsTmFtZXNbbGV2ZWxdKTsKICAgIHBy
aW50ZigiUGVuZGluZyBpbnRlcnJ1cHRzOlxuIik7CiAgICBwZW5kaW5nLT5BcHBseShQcmludFBl
bmRpbmcpOwogICAgcHJpbnRmKCJcbkVuZCBvZiBwZW5kaW5nIGludGVycnVwdHNcbiIpOwp9Cg==



More information about the Gcc-bugs mailing list