gnats-prs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

gnats/84: g++ has ICE on code with errors


From: jfrey
Subject: gnats/84: g++ has ICE on code with errors
Date: 26 Jun 2000 23:40:41 -0000

>Number:         84
>Category:       gnats
>Synopsis:       g++ has ICE on code with errors
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Jun 26 16:44:01 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     Jaime Frey
>Release:        2.95.2
>Organization:
>Environment:
Solaris 2.6, Pentium Pro 200Mhz, MACHTYPE=i386, CPUTYPE=i86pc
>Description:
g++ exits with an internal compiler error after reporting
several errors in the code being compiled. .ii file is
attached to report. compiler output follows:

In file included from gridmanager.C:7:
gridmanager.h:12: parse error before `{'
gridmanager.h:16: destructors must be member functions
gridmanager.h:40: parse error before `private'
gridmanager.h:47: parse error before `}'
gridmanager.C:16: invalid use of undefined type `class GridManager'
gridmanager.h:11: forward declaration of `class GridManager'
gridmanager.C: In method `GridManager::GridManager()':
gridmanager.C:17: `Owner' undeclared (first use this function)
gridmanager.C:17: (Each undeclared identifier is reported only once
gridmanager.C:17: for each function it appears in.)
gridmanager.C:22: Internal compiler error in `scope_die_for', at 
dwarf2out.c:7797
Please submit a full bug report.
See <URL:http://www.gnu.org/software/gcc/faq.html#bugreport> for instructions.
>How-To-Repeat:
.ii file attached to report.
>Fix:

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

IyAxICJncmlkbWFuYWdlci5DIgoKCiMgMSAiLi4vY29uZG9yX2luY2x1ZGVzL2NvbmRvcl9jb21t
b24uaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgojIDEgIi4uL2NvbmRvcl9pbmNs
dWRlcy9jb25kb3JfaGVhZGVyX2ZlYXR1cmVzLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojIDI5ICIuLi9jb25kb3JfaW5jbHVkZXMvY29uZG9yX2NvbW1vbi5oIiAyCgoK
IAoKCiMgMSAiLi4vY29uZG9yX2luY2x1ZGVzL2NvbmRvcl9zeXN0ZW0uaCIgMQogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCiAKCgoJCgoKCgoKCgoKIyAxICIuLi9j
b25kb3JfaW5jbHVkZXMvY29uZG9yX3N5c19zb2xhcmlzLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgojIDEgIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25kb3JfZml4X3N5c191dHNu
YW1lLmgiIDEKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdXRzbmFtZS5oIiAxIDMg
NAogCiAKCiAKIAogCgogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpdXRzbmFtZS5oCTEuMjUJ
OTYvMDkvMDUgU01JIgkKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEg
MyA0CiAKIAoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylmZWF0dXJlX3Rlc3RzLmgJMS4x
Mwk5Ny8wNi8yNiBTTUkiCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKfQoKCgojIDE4ICIvdXNyL2luY2x1ZGUv
c3lzL3V0c25hbWUuaCIgMiAzIDQKCgoKZXh0ZXJuICJDIiB7CgoKCgkJCQkgCgkJCQkgCgoKCgoK
CgoKc3RydWN0IHV0c25hbWUgewoJY2hhcglzeXNuYW1lWzI1NyBdOwoJY2hhcglub2RlbmFtZVsy
NTcgXTsKCWNoYXIJcmVsZWFzZVsyNTcgXTsKCWNoYXIJdmVyc2lvblsyNTcgXTsKCWNoYXIJbWFj
aGluZVsyNTcgXTsKfTsKCgoKZXh0ZXJuIHN0cnVjdCB1dHNuYW1lIHV0c25hbWU7CgoKCgoKCgoK
c3RhdGljIGludCB1bmFtZShzdHJ1Y3QgdXRzbmFtZSAqKTsKc3RhdGljIGludCBfdW5hbWUoc3Ry
dWN0IHV0c25hbWUgKik7CgoKZXh0ZXJuIGludCBudW5hbWUoc3RydWN0IHV0c25hbWUgKik7Cgpl
eHRlcm4gaW50IF9udW5hbWUoc3RydWN0IHV0c25hbWUgKik7CgojIDcyICIvdXNyL2luY2x1ZGUv
c3lzL3V0c25hbWUuaCIgMyA0CgoKc3RhdGljIGludAoKX3VuYW1lKHN0cnVjdCB1dHNuYW1lICpf
YnVmKQoKCgoKewoJcmV0dXJuIChfbnVuYW1lKF9idWYpKTsKfQoKc3RhdGljIGludAoKdW5hbWUo
c3RydWN0IHV0c25hbWUgKl9idWYpCgoKCgp7CglyZXR1cm4gKF9udW5hbWUoX2J1ZikpOwp9Cgoj
IDEwNCAiL3Vzci9pbmNsdWRlL3N5cy91dHNuYW1lLmgiIDMgNAoKCgoKCn0KCgoKIyAxMiAiLi4v
Y29uZG9yX2luY2x1ZGVzL2NvbmRvcl9maXhfc3lzX3V0c25hbWUuaCIgMgoKCiMgMjQgIi4uL2Nv
bmRvcl9pbmNsdWRlcy9jb25kb3JfZml4X3N5c191dHNuYW1lLmgiCgoKCiMgMzIgIi4uL2NvbmRv
cl9pbmNsdWRlcy9jb25kb3Jfc3lzX3NvbGFyaXMuaCIgMgoKIyAxICIuLi9jb25kb3JfaW5jbHVk
ZXMvY29uZG9yX2ZpeF9zeXNfc3RhdC5oIiAxCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAz
NSAiLi4vY29uZG9yX2luY2x1ZGVzL2NvbmRvcl9maXhfc3lzX3N0YXQuaCIKCgojIDEgIi91c3Iv
aW5jbHVkZS9zeXMvc3RhdC5oIiAxIDMgNAogCiAKIAoKIAogCiAKIAogCgoKCgoKCgojcHJhZ21h
IGlkZW50CSJAKCMpc3RhdC5oCTEuMjEJOTYvMDYvMDMgU01JIgoKCgoKIyAxICIvdXNyL2luY2x1
ZGUvc3lzL3RpbWUuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCiAKCgoKCgoKCiNwcmFnbWEg
aWRlbnQJIkAoIyl0aW1lLmgJMi41Mgk5Ni8xMS8xNSBTTUkiCQoKCgogCgoKCgoKZXh0ZXJuICJD
IiB7CgoKCgoKCgoKdHlwZWRlZglsb25nCXRpbWVfdDsJCSAKCgpzdHJ1Y3QgdGltZXZhbCB7Cgl0
aW1lX3QJdHZfc2VjOwkJIAoJbG9uZwl0dl91c2VjOwkgCn07CgoKCgoKCnN0cnVjdCB0aW1lem9u
ZSB7CglpbnQJdHpfbWludXRlc3dlc3Q7CSAKCWludAl0el9kc3R0aW1lOwkgCn07CgoKCgoKfQoK
CiAKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMgNAogCiAKCiAKIAogCgog
CgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpdHlwZXMuaAkxLjUxCTk3LzA1LzA2IFNNSSIKCgoj
IDEgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBp
ZGVudAkiQCgjKWlzYV9kZWZzLmgJMS4xMQk5Ny8wMy8yMSBTTUkiCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4
dGVybiAiQyIgewoKCgogCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgoKIAoKCgoKCgojIDM0MSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAzIDQKCgoK
fQoKCgojIDE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKIAoKCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy9tYWNodHlwZXMuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCgoKI3By
YWdtYSBpZGVudAkiQCgjKW1hY2h0eXBlcy5oCTEuNwk5Ni8wNS8yMyBTTUkiCgoKCgpleHRlcm4g
IkMiIHsKCgogCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgIF9waHlzYWRyX3QgeyBpbnQgclsxXTsg
fSAqcGh5c2Fkcl90OwoKdHlwZWRlZglzdHJ1Y3QJX2xhYmVsX3QgeyBpbnQJdmFsWzZdOyB9IGxh
YmVsX3Q7CgoKCnR5cGVkZWYJdW5zaWduZWQgY2hhcglsb2NrX3Q7CQkgCgoKfQoKCgojIDI0ICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKIAoKCgoKCgojIDEgIi91c3IvaW5jbHVk
ZS9zeXMvaW50X3R5cGVzLmgiIDEgMyA0CiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylpbnRf
dHlwZXMuaAkxLjQJOTYvMDkvMjUgU01JIgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGNoYXIJCQlpbnQ4X3Q7
CgoKCgoKdHlwZWRlZiBzaG9ydAkJCWludDE2X3Q7CnR5cGVkZWYgaW50CQkJaW50MzJfdDsKCgoK
CnR5cGVkZWYJbG9uZyBsb25nCQlpbnQ2NF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCXVp
bnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJCXVpbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVk
IGludAkJdWludDMyX3Q7CgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZwl1aW50NjRfdDsK
CgoKIAoKCgoKdHlwZWRlZiBpbnQ2NF90CQkJaW50bWF4X3Q7CnR5cGVkZWYgdWludDY0X3QJCXVp
bnRtYXhfdDsKCgoKCgogCgoKCgoKCgoKdHlwZWRlZiBpbnQJCQlpbnRwdHJfdDsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQJCXVpbnRwdHJfdDsKCgogCgoKCgp0eXBlZGVmIGNoYXIJCQlpbnRfbGVhc3Q4
X3Q7CgoKCgoKdHlwZWRlZiBzaG9ydAkJCWludF9sZWFzdDE2X3Q7CnR5cGVkZWYgaW50CQkJaW50
X2xlYXN0MzJfdDsKCgoKCnR5cGVkZWYgbG9uZyBsb25nCQlpbnRfbGVhc3Q2NF90OwoKCgp0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIJCXVpbnRfbGVhc3Q4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJ
CXVpbnRfbGVhc3QxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludAkJdWludF9sZWFzdDMyX3Q7CgoK
Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZwl1aW50X2xlYXN0NjRfdDsKCgoKCn0KCgoKIyAz
MyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKCgogCgoK
CgoKdHlwZWRlZglsb25nIGxvbmcJCWxvbmdsb25nX3Q7CnR5cGVkZWYJdW5zaWduZWQgbG9uZyBs
b25nCXVfbG9uZ2xvbmdfdDsKIyA1NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKCgog
CgoKdHlwZWRlZgl1bnNpZ25lZCBjaGFyCXVjaGFyX3Q7CnR5cGVkZWYJdW5zaWduZWQgc2hvcnQJ
dXNob3J0X3Q7CnR5cGVkZWYJdW5zaWduZWQgaW50CXVpbnRfdDsKdHlwZWRlZgl1bnNpZ25lZCBs
b25nCXVsb25nX3Q7Cgp0eXBlZGVmCWNoYXIgKgkJY2FkZHJfdDsJIAp0eXBlZGVmCWxvbmcJCWRh
ZGRyX3Q7CSAKdHlwZWRlZglzaG9ydAkJY250X3Q7CQkgCgp0eXBlZGVmCXVsb25nX3QJCXBhZGRy
X3Q7CSAKdHlwZWRlZgl1Y2hhcl90CQl1c2VfdDsJCSAKdHlwZWRlZglzaG9ydAkJc3lzaWRfdDsK
dHlwZWRlZglzaG9ydAkJaW5kZXhfdDsKCiAKCgoKCgoKCgoKCnR5cGVkZWYgbG9uZwkJb2ZmX3Q7
CQkgCgoKCgp0eXBlZGVmIGxvbmdsb25nX3QJb2ZmNjRfdDsJIAoKCgoKdHlwZWRlZiB1bG9uZ190
CQlpbm9fdDsJCSAKdHlwZWRlZiBsb25nCQlibGtjbnRfdDsJIAp0eXBlZGVmIHVsb25nX3QJCWZz
YmxrY250X3Q7CSAKdHlwZWRlZiB1bG9uZ190CQlmc2ZpbGNudF90OwkgCgoKCgoKCgp0eXBlZGVm
IHVfbG9uZ2xvbmdfdAlpbm82NF90OwkgCnR5cGVkZWYgbG9uZ2xvbmdfdAlibGtjbnQ2NF90Owkg
CnR5cGVkZWYgdV9sb25nbG9uZ190CWZzYmxrY250NjRfdDsJIAp0eXBlZGVmIHVfbG9uZ2xvbmdf
dAlmc2ZpbGNudDY0X3Q7CSAKCgoKdHlwZWRlZiBlbnVtIHsgX0JfRkFMU0UsIF9CX1RSVUUgfSBi
b29sZWFuX3Q7CgoKCgogCgoKCgoKCgp0eXBlZGVmIGludDY0X3QJCXBhZDY0X3Q7CnR5cGVkZWYJ
dWludDY0X3QJdXBhZDY0X3Q7CiMgMTM5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAoK
CnR5cGVkZWYJbG9uZ2xvbmdfdAlvZmZzZXRfdDsKdHlwZWRlZgl1X2xvbmdsb25nX3QJdV9vZmZz
ZXRfdDsKdHlwZWRlZiB1X2xvbmdsb25nX3QJbGVuX3Q7CnR5cGVkZWYJbG9uZ2xvbmdfdAlkaXNr
YWRkcl90OwoKIAoKCgoKCnR5cGVkZWYgdW5pb24gewoJb2Zmc2V0X3QJX2Y7CSAKCXN0cnVjdCB7
CgkJb2ZmX3QgX2w7CSAKCQlsb25nIF91OwkgCgl9IF9wOwp9IGxsb2ZmX3Q7CgoKIyAxNjkgIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CgoKCnR5cGVkZWYgdW5pb24gewoJZGlza2FkZHJf
dAlfZjsJIAoJc3RydWN0IHsKCQlkYWRkcl90IF9sOwkgCgkJbG9uZyBfdTsJIAoJfSBfcDsKfSBs
bGRhZGRyX3Q7CgoKIyAxODkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CgoKdHlwZWRl
ZiB1bG9uZ190IGtfZmx0c2V0X3Q7CSAKCiAKCgoKCgoKdHlwZWRlZiBsb25nCQlpZF90OwkJIAoJ
CQkJCSAKCQkJCQkgCgkJCQkJIAoJCQkJCSAKIAoKCgp0eXBlZGVmIHVpbnRfdCAJCXVzZWNvbmRz
X3Q7CSAKCiAKCgp0eXBlZGVmIHVsb25nX3QJbWFqb3JfdDsJIAp0eXBlZGVmIHVsb25nX3QJbWlu
b3JfdDsJIAoKIAoKCnR5cGVkZWYgc2hvcnQJcHJpX3Q7CgogCgoKCgoKCgoKCgp0eXBlZGVmCXVz
aG9ydF90IG9fbW9kZV90OwkJIAp0eXBlZGVmIHNob3J0CW9fZGV2X3Q7CQkgCnR5cGVkZWYJdXNo
b3J0X3Qgb191aWRfdDsJCSAKdHlwZWRlZglvX3VpZF90CW9fZ2lkX3Q7CQkgCnR5cGVkZWYJc2hv
cnQJb19ubGlua190OwkJIAp0eXBlZGVmIHNob3J0CW9fcGlkX3Q7CQkgCnR5cGVkZWYgdXNob3J0
X3Qgb19pbm9fdDsJCSAKCgogCgoKdHlwZWRlZglpbnQJa2V5X3Q7CQkJIAp0eXBlZGVmCXVsb25n
X3QJbW9kZV90OwkJCSAKCgoKdHlwZWRlZglsb25nCXVpZF90OwkJCSAKCgp0eXBlZGVmCXVpZF90
CWdpZF90OwkJCSAKdHlwZWRlZgl1bG9uZ190IG5saW5rX3Q7CQkgCnR5cGVkZWYgdWxvbmdfdAlk
ZXZfdDsJCQkgCnR5cGVkZWYgbG9uZwlwaWRfdDsJCQkgCgogCgoKCgp0eXBlZGVmCXVuc2lnbmVk
IGludAlwdGhyZWFkX3Q7CSAKdHlwZWRlZgl1bnNpZ25lZCBpbnQJcHRocmVhZF9rZXlfdDsJIAoK
dHlwZWRlZglzdHJ1Y3QJX3B0aHJlYWRfbXV0ZXggewkJIAoJc3RydWN0IHsKCQl1aW50OF90CQlf
X3B0aHJlYWRfbXV0ZXhfZmxhZ1s0XTsKCQl1aW50MzJfdCAJX19wdGhyZWFkX211dGV4X3R5cGU7
Cgl9IF9fcHRocmVhZF9tdXRleF9mbGFnczsKCXVuaW9uIHsKCQlzdHJ1Y3QgewoJCQl1aW50OF90
CV9fcHRocmVhZF9tdXRleF9wYWRbOF07CgkJfSBfX3B0aHJlYWRfbXV0ZXhfbG9jazY0OwoJCXVw
YWQ2NF90IF9fcHRocmVhZF9tdXRleF9vd25lcjY0OwoJfSBfX3B0aHJlYWRfbXV0ZXhfbG9jazsK
CXVwYWQ2NF90IF9fcHRocmVhZF9tdXRleF9kYXRhOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCnR5cGVk
ZWYJc3RydWN0CV9wdGhyZWFkX2NvbmQgewkJIAoJc3RydWN0IHsKCQl1aW50OF90CQlfX3B0aHJl
YWRfY29uZF9mbGFnWzRdOwoJCXVpbnQzMl90IAlfX3B0aHJlYWRfY29uZF90eXBlOwoJfSBfX3B0
aHJlYWRfY29uZF9mbGFnczsKCXVwYWQ2NF90IF9fcHRocmVhZF9jb25kX2RhdGE7Cn0gcHRocmVh
ZF9jb25kX3Q7CgogCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfYXR0ciB7Cgl2b2lkCSpfX3B0
aHJlYWRfYXR0cnA7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKIAoKCnR5cGVkZWYgc3RydWN0IF9wdGhy
ZWFkX211dGV4YXR0ciB7Cgl2b2lkCSpfX3B0aHJlYWRfbXV0ZXhhdHRycDsKfSBwdGhyZWFkX211
dGV4YXR0cl90OwoKCiAKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9jb25kYXR0ciB7Cgl2b2lk
CSpfX3B0aHJlYWRfY29uZGF0dHJwOwp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCiAKCgp0eXBlZGVm
CXN0cnVjdAlfb25jZSB7Cgl1cGFkNjRfdAlfX3B0aHJlYWRfb25jZV9wYWRbNF07Cn0gcHRocmVh
ZF9vbmNlX3Q7CgoKCnR5cGVkZWYJdWludF90CXNpemVfdDsJCSAKCgoKCnR5cGVkZWYgaW50CXNz
aXplX3Q7CSAKCQkJCSAKCgoKCgoKCgoKdHlwZWRlZglsb25nCQljbG9ja190OyAgCgoKCgp0eXBl
ZGVmCWludAljbG9ja2lkX3Q7CSAKCgoKCnR5cGVkZWYJaW50CXRpbWVyX3Q7CSAKCgoKCgp0eXBl
ZGVmCXVuc2lnbmVkIGNoYXIJdW5jaGFyOwp0eXBlZGVmCXVuc2lnbmVkIHNob3J0CXVzaG9ydDsK
dHlwZWRlZgl1bnNpZ25lZCBpbnQJdWludDsKdHlwZWRlZgl1bnNpZ25lZCBsb25nCXVsb25nOwoK
IyAzNzkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CgoKCgogCgoKCgoKCgoKCgoKIAoK
Cgp0eXBlZGVmCWxvbmcJaG9zdGlkX3Q7CgogCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhcgl1
X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQJdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZwl1X2xvbmc7CnR5cGVkZWYgc3RydWN0IF9x
dWFkIHsgbG9uZyB2YWxbMl07IH0gcXVhZDsJCSAKCiAKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAxIDMgNAogCiAKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc2VsZWN0
LmgJMS4xMQk5Ni8wNi8yMCBTTUkiCQoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg
MSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCiAKCgoKCiMgNDE0ICIvdXNyL2luY2x1ZGUvc3lzL3Rp
bWUuaCIgMyA0CgojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMgNAoKCgoKZXh0
ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoKdHlwZWRlZglsb25nCWZkX21hc2s7Cgp0eXBlZGVmCWxv
bmcJZmRzX21hc2s7CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZglzdHJ1Y3QgZmRf
c2V0IHsKCgoKCWxvbmcJZmRzX2JpdHNbKCgoIDEwMjQgICkrKCggIChzaXplb2YgKGZkc19tYXNr
KSAqIDggKSAgKS0xKSkvKCAgKHNpemVvZiAoZmRzX21hc2spICogOCApICApKSBdOwp9IGZkX3Nl
dDsKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3QoaW50LCBmZF9zZXQgKiwgZmRf
c2V0ICosIGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsKCgoKCgoKfQoKCgojIDQxOCAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgoKIAoKCgoKCgoKCiAKCgoKfQoKCgojIDcx
ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzIDQKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoJCQkJIAoJCQkJIAoKCQkJCSAK
CQkJCSAKCgpzdHJ1Y3QJaXRpbWVydmFsIHsKCXN0cnVjdAl0aW1ldmFsIGl0X2ludGVydmFsOwkg
CglzdHJ1Y3QJdGltZXZhbCBpdF92YWx1ZTsJIAp9OwoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgIHRpbWVzcGVjIHsJCSAK
CXRpbWVfdAkJdHZfc2VjOwkJIAoJbG9uZwkJdHZfbnNlYzsJIAp9IHRpbWVzcGVjX3Q7CgoKCgp0
eXBlZGVmIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3RydWNfdDsJIAoKCiMgMjA0ICIvdXNyL2luY2x1
ZGUvc3lzL3RpbWUuaCIgMyA0CgoKIAoKCgoKCgoKCgogCgoKCgp0eXBlZGVmIHN0cnVjdCBpdGlt
ZXJzcGVjIHsJCSAKCXN0cnVjdCB0aW1lc3BlYwlpdF9pbnRlcnZhbDsJIAoJc3RydWN0IHRpbWVz
cGVjCWl0X3ZhbHVlOwkgCn0gaXRpbWVyc3BlY190OwoKCiAKCgp0eXBlZGVmCWxvbmdsb25nX3QJ
aHJ0aW1lX3Q7CgojIDMxOCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAoKCgoKCmludCBh
ZGp0aW1lKHN0cnVjdCB0aW1ldmFsICosIHN0cnVjdCB0aW1ldmFsICopOwoKCgoKCgoKCmludCBn
ZXRpdGltZXIoaW50LCBzdHJ1Y3QgaXRpbWVydmFsICopOwoKCgoKCmludCBzZXRpdGltZXIoaW50
LCBzdHJ1Y3QgaXRpbWVydmFsICosIHN0cnVjdCBpdGltZXJ2YWwgKik7CgoKCgoKCgoKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgppbnQgc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICosIHZvaWQg
Kik7CgpocnRpbWVfdAlnZXRocnRpbWUodm9pZCk7CmhydGltZV90CWdldGhydnRpbWUodm9pZCk7
CgoKCgoKCgoKCgoKCgoKCgppbnQgZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICosIHZvaWQg
Kik7CgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQKIAogCgogCgoKCgog
CiAKIAoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpdGltZS5oCTEuMjUJOTYvMDMvMTIgU01JIgkK
CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdAl0bSB7
CSAKCWludAl0bV9zZWM7CglpbnQJdG1fbWluOwoJaW50CXRtX2hvdXI7CglpbnQJdG1fbWRheTsK
CWludAl0bV9tb247CglpbnQJdG1feWVhcjsKCWludAl0bV93ZGF5OwoJaW50CXRtX3lkYXk7Cglp
bnQJdG1faXNkc3Q7Cn07CgoKCmV4dGVybiBjbG9ja190IGNsb2NrKHZvaWQpOwpleHRlcm4gZG91
YmxlIGRpZmZ0aW1lKHRpbWVfdCwgdGltZV90KTsKZXh0ZXJuIHRpbWVfdCBta3RpbWUoc3RydWN0
IHRtICopOwpleHRlcm4gdGltZV90IHRpbWUodGltZV90ICopOwpleHRlcm4gY2hhciAqYXNjdGlt
ZShjb25zdCBzdHJ1Y3QgdG0gKik7CmV4dGVybiBjaGFyICpjdGltZShjb25zdCB0aW1lX3QgKik7
CmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZShjb25zdCB0aW1lX3QgKik7CmV4dGVybiBzdHJ1Y3Qg
dG0gKmxvY2FsdGltZShjb25zdCB0aW1lX3QgKik7CmV4dGVybiBzaXplX3Qgc3RyZnRpbWUoY2hh
ciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRtICopOwoKCgpleHRlcm4g
c3RydWN0IHRtICpnbXRpbWVfcihjb25zdCB0aW1lX3QgKiwgc3RydWN0IHRtICopOwpleHRlcm4g
c3RydWN0IHRtICpsb2NhbHRpbWVfcihjb25zdCB0aW1lX3QgKiwgc3RydWN0IHRtICopOwoKCgoK
CmV4dGVybiBjaGFyICpzdHJwdGltZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc3RydWN0
IHRtICopOwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAxIDMgNAogCiAKCiAK
IAogCgogCgoKCgoKIAoKCgoKIyA0MTQgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKCiMg
OTMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2ln
aW5mby5oIiAxIDMgNAogCiAKIAoKCgoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzaWdp
bmZvLmgJMS4zOQk5Ni8wNi8yOCBTTUkiCQoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKdW5pb24gc2ln
dmFsIHsKCWludAlzaXZhbF9pbnQ7CSAKCXZvaWQJKnNpdmFsX3B0cjsJIAp9OwoKCgoKCgoKCgoK
CgoKc3RydWN0IHNpZ2V2ZW50IHsKCWludAkJc2lnZXZfbm90aWZ5OwkgCgl1bmlvbiB7CgkJaW50
CV9zaWdldl9zaWdubzsJIAoJCXZvaWQJKCpfc2lnZXZfbm90aWZ5X2Z1bmN0aW9uKSh1bmlvbiBz
aWd2YWwpOwoJfSBfc2lnZXZfdW47Cgl1bmlvbiBzaWd2YWwJc2lnZXZfdmFsdWU7CSAKCWludAkJ
X3NpZ2V2X3BhZDE7Cgl2b2lkCQkqX3NpZ2V2X25vdGlmeV9hdHRyaWJ1dGVzOwoJaW50CQlfc2ln
ZXZfcGFkMjsKfTsKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy9tYWNoc2lnLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCgoKCiNwcmFn
bWEgaWRlbnQJIkAoIyltYWNoc2lnLmgJMS42CTk2LzA0LzI5IFNNSSIKCgoKCmV4dGVybiAiQyIg
ewoKCiAKCgoKIAoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvdm0vZmF1bHRjb2RlLmgiIDEg
MyA0CiAKIAoKIAogCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaWRlbnQJ
IkAoIylmYXVsdGNvZGUuaAkxLjE1CTkyLzA3LzE0IFNNSSIJCgoKZXh0ZXJuICJDIiB7CgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZglpbnQJZmF1bHRjb2RlX3Q7CSAKCgoKfQoKCgojIDM5
ICIvdXNyL2luY2x1ZGUvc3lzL21hY2hzaWcuaCIgMiAzIDQKCgoKIAoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgp9CgoKCiMgODggIi91c3Iv
aW5jbHVkZS9zeXMvc2lnaW5mby5oIiAyIDMgNAoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCgogCgoKCgojIDQx
NCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAoKIyAxNjAgIi91c3IvaW5jbHVkZS9zeXMv
c2lnaW5mby5oIiAyIDMgNAoKIyAxODEgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQK
CgoKdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7IAkJIAoKCgoJaW50CXNpX3NpZ25vOwkJCSAKCWlu
dCAJc2lfY29kZTsJCQkgCglpbnQJc2lfZXJybm87CQkJIAoKCXVuaW9uIHsKCgkJaW50CV9fcGFk
WygoMTI4ICAvIHNpemVvZiAoaW50KSkgLSAzKSBdOwkJIAoKCQlzdHJ1Y3QgewkJCSAKCQkJcGlk
X3QJX19waWQ7CQkgCgkJCXVuaW9uIHsKCQkJCXN0cnVjdCB7CgkJCQkJdWlkX3QJX191aWQ7CgoJ
CQkJCXVuaW9uIHNpZ3ZhbAlfX3ZhbHVlOwoKCgoJCQkJfSBfX2tpbGw7CgkJCQlzdHJ1Y3QgewoJ
CQkJCWNsb2NrX3QgX191dGltZTsKCQkJCQlpbnQJX19zdGF0dXM7CgkJCQkJY2xvY2tfdCBfX3N0
aW1lOwoJCQkJfSBfX2NsZDsKCQkJfSBfX3BkYXRhOwoJCX0gX19wcm9jOwoKCQlzdHJ1Y3Qgewkg
CgkJCXZvaWQgCSpfX2FkZHI7CSAKCQkJaW50CV9fdHJhcG5vOwkgCgkJCWNhZGRyX3QJX19wYzsJ
CSAKCQl9IF9fZmF1bHQ7CgoJCXN0cnVjdCB7CQkJIAoJCSAKCQkJaW50CV9fZmQ7CQkgCgkJCWxv
bmcJX19iYW5kOwoJCX0gX19maWxlOwoKCQlzdHJ1Y3QgewkJCSAKCQkJY2FkZHJfdAlfX2ZhZGRy
OwkgCgkJCXRpbWVzdHJ1Y190IF9fdHN0YW1wOwkgCgkJCXNob3J0CV9fc3lzY2FsbDsJIAoJCQlj
aGFyCV9fbnN5c2FyZzsJIAoJCQljaGFyCV9fZmF1bHQ7CSAKCQkJbG9uZwlfX3N5c2FyZ1s4XTsJ
IAoJCQlsb25nCV9fbXN0YXRlWzE3XTsJIAoJCX0gX19wcm9mOwoKCX0gX19kYXRhOwoKfSBzaWdp
bmZvX3Q7CgogCgoKCgoKCnR5cGVkZWYgc3RydWN0IGtfc2lnaW5mbyB7CgoJaW50CXNpX3NpZ25v
OwkJCSAKCWludCAJc2lfY29kZTsJCQkgCglpbnQJc2lfZXJybm87CQkJIAoKCXVuaW9uIHsKCQlz
dHJ1Y3QgewkJCSAKCQkJcGlkX3QJX19waWQ7CQkgCgkJCXVuaW9uIHsKCQkJCXN0cnVjdCB7CgkJ
CQkJdWlkX3QJX191aWQ7CgkJCQkJdW5pb24gc2lndmFsCV9fdmFsdWU7CgkJCQl9IF9fa2lsbDsK
CQkJCXN0cnVjdCB7CgkJCQkJY2xvY2tfdCBfX3V0aW1lOwoJCQkJCWludAlfX3N0YXR1czsKCQkJ
CQljbG9ja190IF9fc3RpbWU7CgkJCQl9IF9fY2xkOwoJCQl9IF9fcGRhdGE7CgkJfSBfX3Byb2M7
CgoJCXN0cnVjdCB7CSAKCQkJdm9pZCAJKl9fYWRkcjsJIAoJCQlpbnQJX190cmFwbm87CSAKCQkJ
Y2FkZHJfdAlfX3BjOwkJIAoJCX0gX19mYXVsdDsKCgkJc3RydWN0IHsJCQkgCgkJIAoJCQlpbnQJ
X19mZDsJCSAKCQkJbG9uZwlfX2JhbmQ7CgkJfSBfX2ZpbGU7CgoJCXN0cnVjdCB7CQkJIAoJCQlj
YWRkcl90CV9fZmFkZHI7CSAKCQkJdGltZXN0cnVjX3QgX190c3RhbXA7CSAKCQkJc2hvcnQJX19z
eXNjYWxsOwkgCgkJCWNoYXIJX19uc3lzYXJnOwkgCgkJCWNoYXIJX19mYXVsdDsJIAoJCQkgCgkJ
CSAKCQkJIAoJCX0gX19wcm9mOwoKCX0gX19kYXRhOwoKfSBrX3NpZ2luZm9fdDsKCnR5cGVkZWYg
c3RydWN0IHNpZ3F1ZXVlIHsKCXN0cnVjdCBzaWdxdWV1ZQkqc3FfbmV4dDsKCWtfc2lnaW5mb190
CXNxX2luZm87Cgl2b2lkCQkoKnNxX2Z1bmMpKHN0cnVjdCBzaWdxdWV1ZSAqKTsgIAoJdm9pZAkJ
KnNxX2JhY2twdHI7CSAKCQkJCQkgCn0gc2lncXVldWVfdDsKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKfQoKCgojIDk0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMgNAoKZXh0ZXJuIGlu
dCBjbG9ja19nZXRyZXMoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQg
Y2xvY2tfZ2V0dGltZShjbG9ja2lkX3QsIHN0cnVjdCB0aW1lc3BlYyAqKTsKZXh0ZXJuIGludCBj
bG9ja19zZXR0aW1lKGNsb2NraWRfdCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICopOwoKZXh0ZXJu
IGludCB0aW1lcl9jcmVhdGUoY2xvY2tpZF90LCBzdHJ1Y3Qgc2lnZXZlbnQgKiwgdGltZXJfdCAq
KTsKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUodGltZXJfdCk7CmV4dGVybiBpbnQgdGltZXJfZ2V0
b3ZlcnJ1bih0aW1lcl90KTsKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lKHRpbWVyX3QsIHN0cnVj
dCBpdGltZXJzcGVjICopOwpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUodGltZXJfdCwgaW50LCBj
b25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqLAoJCXN0cnVjdCBpdGltZXJzcGVjICopOwpleHRlcm4g
aW50IG5hbm9zbGVlcChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICop
OwoKCgoKCmV4dGVybiB2b2lkIHR6c2V0KHZvaWQpOwoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsK
CgpleHRlcm4gbG9uZyBfc3lzY29uZihpbnQpOwkgCgoJCQkJIAoKCgoKZXh0ZXJuIGxvbmcgdGlt
ZXpvbmU7CmV4dGVybiBpbnQgZGF5bGlnaHQ7CgoKCgoKCgoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0g
KmdldGRhdGUoY29uc3QgY2hhciAqKTsKCgoKCgoKZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCgoK
IyAxODMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIyAyNDcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAoKCmV4dGVy
biBjaGFyICphc2N0aW1lX3IoY29uc3Qgc3RydWN0IHRtICosIGNoYXIgKiwgaW50KTsKZXh0ZXJu
IGNoYXIgKmN0aW1lX3IoY29uc3QgdGltZV90ICosIGNoYXIgKiwgaW50KTsKCgoKIyAyOTAgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDMgNAoKCgoKCn0KCgoKIyAzOTkgIi91c3IvaW5jbHVkZS9zeXMv
dGltZS5oIiAyIDMgNAoKCgoKCgoKCgoKCgp9CgoKCiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvc3Rh
dC5oIiAyIDMgNAoKCgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgojIDU3ICIvdXNyL2luY2x1
ZGUvc3lzL3N0YXQuaCIgMyA0CgoKCgogCgoKCiMgMTI3ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQu
aCIgMyA0CgoKIAoKCgoKCgoKCgogCiMgMTU2ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMyA0
CgoKIAoKCgogCnN0cnVjdAlzdGF0IHsKCWRldl90CXN0X2RldjsKCWxvbmcJc3RfcGFkMVszXTsJ
IAoJaW5vX3QJc3RfaW5vOwoJbW9kZV90CXN0X21vZGU7CglubGlua190IHN0X25saW5rOwoJdWlk
X3QgCXN0X3VpZDsKCWdpZF90IAlzdF9naWQ7CglkZXZfdAlzdF9yZGV2OwoJbG9uZwlzdF9wYWQy
WzJdOwoJb2ZmX3QJc3Rfc2l6ZTsKCglsb25nCXN0X3BhZDM7CSAKCgl0aW1lc3RydWNfdCBzdF9h
dGltOwoJdGltZXN0cnVjX3Qgc3RfbXRpbTsKCXRpbWVzdHJ1Y190IHN0X2N0aW07Cglsb25nCXN0
X2Jsa3NpemU7CglibGtjbnRfdCBzdF9ibG9ja3M7CgljaGFyCXN0X2ZzdHlwZVsxNiBdOwoJbG9u
ZwlzdF9wYWQ0WzhdOwkgCn07CiAKCgpzdHJ1Y3QJc3RhdDY0IHsKCWRldl90CXN0X2RldjsKCWxv
bmcJc3RfcGFkMVszXTsJIAoJaW5vNjRfdAlzdF9pbm87Cgltb2RlX3QJc3RfbW9kZTsKCW5saW5r
X3Qgc3Rfbmxpbms7Cgl1aWRfdCAJc3RfdWlkOwoJZ2lkX3QgCXN0X2dpZDsKCWRldl90CXN0X3Jk
ZXY7Cglsb25nCXN0X3BhZDJbMl07CglvZmY2NF90CXN0X3NpemU7Cgl0aW1lc3RydWNfdCBzdF9h
dGltOwoJdGltZXN0cnVjX3Qgc3RfbXRpbTsKCXRpbWVzdHJ1Y190IHN0X2N0aW07Cglsb25nCXN0
X2Jsa3NpemU7CglibGtjbnQ2NF90IHN0X2Jsb2NrczsKCWNoYXIJc3RfZnN0eXBlWzE2IF07Cgls
b25nCXN0X3BhZDRbOF07CSAKfTsKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoK
c3RhdGljIGludCBmc3RhdChpbnQsIHN0cnVjdCBzdGF0ICopOwpzdGF0aWMgaW50IHN0YXQoY29u
c3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKCgoKCgoKCgpzdGF0aWMgaW50IGxzdGF0KGNvbnN0
IGNoYXIgKiwgc3RydWN0IHN0YXQgKik7CgoKCnN0YXRpYyBpbnQgbWtub2QoY29uc3QgY2hhciAq
LCBtb2RlX3QsIGRldl90KTsKCgoKCgpleHRlcm4gaW50IGZjaG1vZChpbnQsIG1vZGVfdCk7CgoK
CmludCBfZnhzdGF0KGNvbnN0IGludCwgaW50LCBzdHJ1Y3Qgc3RhdCAqKTsKaW50IF94c3RhdChj
b25zdCBpbnQsIGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQgKik7CgoKCgppbnQgX2x4c3RhdChj
b25zdCBpbnQsIGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQgKik7CgppbnQgX3hta25vZChjb25z
dCBpbnQsIGNvbnN0IGNoYXIgKiwgbW9kZV90LCBkZXZfdCk7CgpleHRlcm4gaW50IGNobW9kKGNv
bnN0IGNoYXIgKiwgbW9kZV90KTsKZXh0ZXJuIGludCBta2Rpcihjb25zdCBjaGFyICosIG1vZGVf
dCk7CmV4dGVybiBpbnQgbWtmaWZvKGNvbnN0IGNoYXIgKiwgbW9kZV90KTsKZXh0ZXJuIG1vZGVf
dCB1bWFzayhtb2RlX3QpOwoKIAoKCmV4dGVybiBpbnQgZnN0YXQ2NChpbnQsIHN0cnVjdCBzdGF0
NjQgKik7CmV4dGVybiBpbnQgc3RhdDY0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQ2NCAqKTsK
ZXh0ZXJuIGludCBsc3RhdDY0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQ2NCAqKTsKCgojIDM4
OCAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMgNAoKCgogCgoKCgoKCgoKc3RhdGljIGludAoK
c3RhdChjb25zdCBjaGFyICpfcGF0aCwgc3RydWN0IHN0YXQgKl9idWYpCgoKCgoKewoJcmV0dXJu
IChfeHN0YXQoMiAsIF9wYXRoLCBfYnVmKSk7Cn0KCgoKc3RhdGljIGludAoKbHN0YXQoY29uc3Qg
Y2hhciAqX3BhdGgsIHN0cnVjdCBzdGF0ICpfYnVmKQoKCgoKCnsKCXJldHVybiAoX2x4c3RhdCgy
ICwgX3BhdGgsIF9idWYpKTsKfQoKCnN0YXRpYyBpbnQKCmZzdGF0KGludCBfZmQsIHN0cnVjdCBz
dGF0ICpfYnVmKQoKCgoKCnsKCXJldHVybiAoX2Z4c3RhdCgyICwgX2ZkLCBfYnVmKSk7Cn0KCgoK
CgpzdGF0aWMgaW50Cgpta25vZChjb25zdCBjaGFyICpfcGF0aCwgbW9kZV90IF9tb2RlLCBkZXZf
dCBfZGV2KQoKCgoKCgp7CglyZXR1cm4gKF94bWtub2QoMiAsIF9wYXRoLCBfbW9kZSwgX2Rldikp
Owp9CgoKCgp9CgoKCiMgMzcgIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25kb3JfZml4X3N5c19zdGF0
LmgiIDIKCgojIDU3ICIuLi9jb25kb3JfaW5jbHVkZXMvY29uZG9yX2ZpeF9zeXNfc3RhdC5oIgoK
CgojIDMzICIuLi9jb25kb3JfaW5jbHVkZXMvY29uZG9yX3N5c19zb2xhcmlzLmgiIDIKCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgojcHJh
Z21hIGlkZW50CSJAKCMpdW5pc3RkLmgJMS40NQk5Ny8wNi8wNiBTTUkiCQoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAxIDMgNAogCgoKCgoKCgoKIAoKCgogCgoKCgoKCgoKI3By
YWdtYSBpZGVudAkiQCgjKXVuaXN0ZC5oCTEuMjkJOTYvMDYvMDUgU01JIgkKCgoKCmV4dGVybiAi
QyIgewoKCiAKCiAKCgoKCgoKCgogCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCgogCgoKIAoKCgoKIAoKCgoKCiAKCgoK
CgoKCgkgCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoK
CgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCn0KCgoK
IyAyMSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKCgogCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgogCiMgMTQ1ICIvdXNyL2luY2x1ZGUvdW5p
c3RkLmgiIDMgNAoKCgoKCmV4dGVybiBpbnQgYWNjZXNzKGNvbnN0IGNoYXIgKiwgaW50KTsKCgpl
eHRlcm4gaW50IGFjY3QoY29uc3QgY2hhciAqKTsKCmV4dGVybiB1bnNpZ25lZCBhbGFybSh1bnNp
Z25lZCk7CgoKZXh0ZXJuIGludCBicmsodm9pZCAqKTsKCmV4dGVybiBpbnQgY2hkaXIoY29uc3Qg
Y2hhciAqKTsKZXh0ZXJuIGludCBjaG93bihjb25zdCBjaGFyICosIHVpZF90LCBnaWRfdCk7Cgpl
eHRlcm4gaW50IGNocm9vdChjb25zdCBjaGFyICopOwoKZXh0ZXJuIGludCBjbG9zZShpbnQpOwoK
CmV4dGVybiBzaXplX3QgY29uZnN0cihpbnQsIGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIg
KmNyeXB0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJt
aWQoY2hhciAqKTsKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkKGNoYXIgKik7CmV4dGVybiBpbnQg
ZHVwKGludCk7CmV4dGVybiBpbnQgZHVwMihpbnQsIGludCk7CgoKZXh0ZXJuIHZvaWQgZW5jcnlw
dChjaGFyICosIGludCk7CgpleHRlcm4gaW50IGV4ZWNsKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh
ciAqLCAuLi4pOwpleHRlcm4gaW50IGV4ZWNsZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg
Li4uKTsKZXh0ZXJuIGludCBleGVjbHAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7
CmV4dGVybiBpbnQgZXhlY3YoY29uc3QgY2hhciAqLCBjaGFyICpjb25zdCAqKTsKZXh0ZXJuIGlu
dCBleGVjdmUoY29uc3QgY2hhciAqLCBjaGFyICpjb25zdCAqLCBjaGFyICpjb25zdCAqKTsKZXh0
ZXJuIGludCBleGVjdnAoY29uc3QgY2hhciAqLCBjaGFyICpjb25zdCAqKTsKZXh0ZXJuIHZvaWQg
X2V4aXQoaW50KTsKIAoKCgoKCgpleHRlcm4gaW50IGZhdHRhY2goaW50LCBjb25zdCBjaGFyICop
OwoKCgpleHRlcm4gaW50IGZjaGRpcihpbnQpOwpleHRlcm4gaW50IGZjaG93bihpbnQsIHVpZF90
LCBnaWRfdCk7CgoKCmV4dGVybiBpbnQgZmNocm9vdChpbnQpOwoKCgpleHRlcm4gaW50IGZkYXRh
c3luYyhpbnQpOwoKIAoKCgoKCgpleHRlcm4gaW50IGZkZXRhY2goY29uc3QgY2hhciAqKTsKCmV4
dGVybiBwaWRfdCBmb3JrKHZvaWQpOwoKCmV4dGVybiBwaWRfdCBmb3JrMSh2b2lkKTsKCmV4dGVy
biBsb25nIGZwYXRoY29uZihpbnQsIGludCk7CgoKZXh0ZXJuIGludCBmc3luYyhpbnQpOwoKCgpl
eHRlcm4gaW50IGZ0cnVuY2F0ZShpbnQsIG9mZl90KTsKCmV4dGVybiBjaGFyICpnZXRjd2QoY2hh
ciAqLCBzaXplX3QpOwoKCmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSh2b2lkKTsKCmV4dGVybiBn
aWRfdCBnZXRlZ2lkKHZvaWQpOwpleHRlcm4gdWlkX3QgZ2V0ZXVpZCh2b2lkKTsKZXh0ZXJuIGdp
ZF90IGdldGdpZCh2b2lkKTsKZXh0ZXJuIGludCBnZXRncm91cHMoaW50LCBnaWRfdCAqKTsKCgpl
eHRlcm4gbG9uZyBnZXRob3N0aWQodm9pZCk7CgoKCgoKZXh0ZXJuIGludCBnZXRob3N0bmFtZShj
aGFyICosIGludCk7CgpleHRlcm4gY2hhciAqZ2V0bG9naW4odm9pZCk7CgoKZXh0ZXJuIGludCAg
Z2V0b3B0KGludCwgY2hhciAqY29uc3QgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKm9w
dGFyZzsKZXh0ZXJuIGludCAgb3B0ZXJyLCBvcHRpbmQsIG9wdG9wdDsKZXh0ZXJuIGNoYXIgKmdl
dHBhc3MoY29uc3QgY2hhciAqKTsKCgoKZXh0ZXJuIGludCBnZXRwYWdlc2l6ZSh2b2lkKTsKZXh0
ZXJuIHBpZF90IGdldHBnaWQocGlkX3QpOwoKZXh0ZXJuIHBpZF90IGdldHBpZCh2b2lkKTsKZXh0
ZXJuIHBpZF90IGdldHBwaWQodm9pZCk7CmV4dGVybiBwaWRfdCBnZXRwZ3JwKHZvaWQpOwoKCmNo
YXIgKmdldHR4dChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKCmV4dGVybiBwaWRfdCBn
ZXRzaWQocGlkX3QpOwoKZXh0ZXJuIHVpZF90IGdldHVpZCh2b2lkKTsKCgpleHRlcm4gY2hhciAq
Z2V0d2QoY2hhciAqKTsKCiAKCgoKCgoKZXh0ZXJuIGludCBpb2N0bChpbnQsIGludCwgLi4uKTsK
CmV4dGVybiBpbnQgaXNhdHR5KGludCk7CmV4dGVybiBpbnQgbGluayhjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKik7CgoKZXh0ZXJuIGludCBsY2hvd24oY29uc3QgY2hhciAqLCB1aWRfdCwgZ2lk
X3QpOwoKCgpleHRlcm4gb2Zmc2V0X3QgbGxzZWVrKGludCwgb2Zmc2V0X3QsIGludCk7CgoKCmV4
dGVybiBpbnQgbG9ja2YoaW50LCBpbnQsIG9mZl90KTsKCmV4dGVybiBvZmZfdCBsc2VlayhpbnQs
IG9mZl90LCBpbnQpOwoKCmV4dGVybiBpbnQgbWluY29yZShjYWRkcl90LCBzaXplX3QsIGNoYXIg
Kik7CgoKZXh0ZXJuIGludCBuaWNlKGludCk7CgpleHRlcm4gbG9uZyBwYXRoY29uZihjb25zdCBj
aGFyICosIGludCk7CmV4dGVybiBpbnQgcGF1c2Uodm9pZCk7CmV4dGVybiBpbnQgcGlwZShpbnQg
Kik7CgoKZXh0ZXJuIHNzaXplX3QgcHJlYWQoaW50LCB2b2lkICosIHNpemVfdCwgb2ZmX3QpOwpl
eHRlcm4gdm9pZCBwcm9maWwodW5zaWduZWQgc2hvcnQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25l
ZCBpbnQsIHVuc2lnbmVkIGludCk7CmV4dGVybiBpbnQgcHRyYWNlKGludCwgcGlkX3QsIGludCwg
aW50KTsKZXh0ZXJuIHNzaXplX3QgcHdyaXRlKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIG9m
Zl90KTsKCmV4dGVybiBzc2l6ZV90IHJlYWQoaW50LCB2b2lkICosIHNpemVfdCk7CgoKZXh0ZXJu
IGludCByZWFkbGluayhjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKCgoKZXh0ZXJuIGlu
dCByZW5hbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwoKCgpleHRlcm4gaW50IHJlc29s
dmVwYXRoKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpOwoKZXh0ZXJuIGludCBybWRpcihj
b25zdCBjaGFyICopOwoKCmV4dGVybiB2b2lkICpzYnJrKGludCk7CgpleHRlcm4gaW50IHNldGdp
ZChnaWRfdCk7CgoKZXh0ZXJuIGludCBzZXRlZ2lkKGdpZF90KTsKCgoKZXh0ZXJuIGludCBzZXRn
cm91cHMoaW50LCBjb25zdCBnaWRfdCAqKTsKCmV4dGVybiBpbnQgc2V0cGdpZChwaWRfdCwgcGlk
X3QpOwoKCmV4dGVybiBwaWRfdCBzZXRwZ3JwKHZvaWQpOwpleHRlcm4gaW50IHNldHJlZ2lkKGdp
ZF90LCBnaWRfdCk7CmV4dGVybiBpbnQgc2V0cmV1aWQodWlkX3QsIHVpZF90KTsKCmV4dGVybiBw
aWRfdCBzZXRzaWQodm9pZCk7CmV4dGVybiBpbnQgc2V0dWlkKHVpZF90KTsKCgpleHRlcm4gaW50
IHNldGV1aWQodWlkX3QpOwoKZXh0ZXJuIHVuc2lnbmVkIHNsZWVwKHVuc2lnbmVkKTsKCgpleHRl
cm4gaW50IHN0aW1lKGNvbnN0IHRpbWVfdCAqKTsKCgoKCgoKCmV4dGVybiBpbnQgc3ltbGluayhj
b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lkIHN5bmModm9pZCk7CgpleHRl
cm4gbG9uZyBzeXNjb25mKGludCk7CmV4dGVybiBwaWRfdCB0Y2dldHBncnAoaW50KTsKZXh0ZXJu
IGludCB0Y3NldHBncnAoaW50LCBwaWRfdCk7CgoKZXh0ZXJuIG9mZl90IHRlbGwoaW50KTsKCgoK
ZXh0ZXJuIGludCB0cnVuY2F0ZShjb25zdCBjaGFyICosIG9mZl90KTsKCmV4dGVybiBjaGFyICp0
dHluYW1lKGludCk7CgoKZXh0ZXJuIHVzZWNvbmRzX3QgdWFsYXJtKHVzZWNvbmRzX3QsIHVzZWNv
bmRzX3QpOwoKZXh0ZXJuIGludCB1bmxpbmsoY29uc3QgY2hhciAqKTsKCgpleHRlcm4gaW50IHVz
bGVlcCh1c2Vjb25kc190KTsKCgoKZXh0ZXJuIHBpZF90IHZmb3JrKHZvaWQpOwoKCgpleHRlcm4g
dm9pZCB2aGFuZ3VwKHZvaWQpOwoKZXh0ZXJuIHNzaXplX3Qgd3JpdGUoaW50LCBjb25zdCB2b2lk
ICosIHNpemVfdCk7CgoKZXh0ZXJuIHZvaWQgeWllbGQodm9pZCk7CgoKIAoKCgoKZXh0ZXJuIGlu
dCBmdHJ1bmNhdGU2NChpbnQsIG9mZjY0X3QpOwoKZXh0ZXJuIG9mZjY0X3QgbHNlZWs2NChpbnQs
IG9mZjY0X3QsIGludCk7CgoKZXh0ZXJuIHNzaXplX3QgcHJlYWQ2NChpbnQsIHZvaWQgKiwgc2l6
ZV90LCBvZmY2NF90KTsKZXh0ZXJuIHNzaXplX3QgcHdyaXRlNjQoaW50LCBjb25zdCB2b2lkICos
IHNpemVfdCwgb2ZmNjRfdCk7CmV4dGVybiBvZmY2NF90IHRlbGw2NChpbnQpOwpleHRlcm4gaW50
IHRydW5jYXRlNjQoY29uc3QgY2hhciAqLCBvZmY2NF90KTsKZXh0ZXJuIGludCBsb2NrZjY0KGlu
dCwgaW50LCBvZmY2NF90KTsKCgoKIyA2OTYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CgoK
IAoKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA3
NzIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CgoKZXh0ZXJuIGNoYXIgKmdldGxvZ2luX3Io
Y2hhciAqLCBpbnQpOwpleHRlcm4gY2hhciAqdHR5bmFtZV9yKGludCwgY2hhciAqLCBpbnQpOwoK
CgojIDgxNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKCgoKCgp9CgoKCiMgMzcgIi4uL2Nv
bmRvcl9pbmNsdWRlcy9jb25kb3Jfc3lzX3NvbGFyaXMuaCIgMgoKIAoKZXh0ZXJuICJDIiB7IApp
bnQgZ2V0aG9zdG5hbWUoIGNoYXIgKiwgaW50ICk7CmxvbmcgZ2V0aG9zdGlkKCk7CmludCBnZXRw
YWdlc2l6ZSgpOwppbnQgZ2V0ZHRhYmxlc2l6ZSgpOwppbnQgZ2V0cHJpb3JpdHkoIGludCwgaWRf
dCApOwppbnQgc2V0cHJpb3JpdHkoIGludCwgaWRfdCwgaW50ICk7CmludCB1dGltZXMoIGNvbnN0
IGNoYXIqLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCogKTsKaW50IGdldGRvbWFpbm5hbWUoIGNoYXIq
LCBzaXplX3QgKTsKfSAKCiAKIyAxICIvcy9nY2MtMi45NS4yL3N1bng4Nl81Ni9saWIvZ2NjLWxp
Yi9pMzg2LXBjLXNvbGFyaXMyLjYvMi45NS4yL2luY2x1ZGUvc3RkYXJnLmgiIDEgMyA0CiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCnR5cGVkZWYgY2hhciAqX19nbnVjX3ZhX2xpc3Q7CgoKCgoKIAoKCgogCgoKCgoK
CgoKCgoKCgoKCgoKdm9pZCB2YV9lbmQgKF9fZ251Y192YV9saXN0KTsJCSAKCgogCgoKCiAKCgoK
CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKCgoKCiMgMjA3ICIvcy9nY2Mt
Mi45NS4yL3N1bng4Nl81Ni9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjYvMi45NS4yL2lu
Y2x1ZGUvc3RkYXJnLmgiIDMgNAoKCgoKCgojIDUyICIuLi9jb25kb3JfaW5jbHVkZXMvY29uZG9y
X3N5c19zb2xhcmlzLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMyA0CiAKIAoK
IAogCiAKCiAKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0ZGlvLmgJMS40OQk5Ny8wNS8wOSBT
TUkiCQoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92YV9saXN0LmgiIDEgMyA0CiAKCgoKCgoKCiNw
cmFnbWEgaWRlbnQJIkAoIyl2YV9saXN0LmgJMS42CTk2LzAxLzI2IFNNSSIKCiAKCgoKCgoKCgoK
CmV4dGVybiAiQyIgewoKCiMgNDEgIi91c3IvaW5jbHVkZS9zeXMvdmFfbGlzdC5oIiAzIDQKCgoK
dHlwZWRlZiB2b2lkICpfX3ZhX2xpc3Q7CgoKCgoKCgp9CgoKCiMgMTggIi91c3IvaW5jbHVkZS9z
dGRpby5oIiAyIDMgNAoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgogCgoKCgoKdHlw
ZWRlZglsb25nIGxvbmcJX19sb25nbG9uZ190OwoKCgoKCgoKCgojIDY2ICIvdXNyL2luY2x1ZGUv
c3RkaW8uaCIgMyA0CgoKCnR5cGVkZWYgbG9uZwkJZnBvc190OwoKCgoKdHlwZWRlZiBfX2xvbmds
b25nX3QJZnBvczY0X3Q7CgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
IyAxMjIgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0CSAKewoKCgoKCWludAkJ
X2NudDsJIAoJdW5zaWduZWQgY2hhcgkqX3B0cjsJIAoKCXVuc2lnbmVkIGNoYXIJKl9iYXNlOwkg
Cgl1bnNpZ25lZCBjaGFyCV9mbGFnOwkgCgl1bnNpZ25lZCBjaGFyCV9maWxlOwkgCn0gRklMRTsK
CgpleHRlcm4gRklMRQkJX19pb2JbNjAgXTsKCgoKZXh0ZXJuIEZJTEUJCSpfbGFzdGJ1ZjsKZXh0
ZXJuIHVuc2lnbmVkIGNoYXIJKl9idWZlbmR0YWJbXTsKCmV4dGVybiB1bnNpZ25lZCBjaGFyCSBf
c2lidWZbXSwgX3NvYnVmW107CgoKIAojIDIyMiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoK
CgoKZXh0ZXJuIGludAlyZW1vdmUoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludAlyZW5hbWUoY29u
c3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRQkqdG1wZmlsZSh2b2lkKTsKZXh0
ZXJuIGNoYXIJKnRtcG5hbShjaGFyICopOwoKZXh0ZXJuIGNoYXIJKnRtcG5hbV9yKGNoYXIgKik7
CgpleHRlcm4gaW50CWZjbG9zZShGSUxFICopOwpleHRlcm4gaW50CWZmbHVzaChGSUxFICopOwpl
eHRlcm4gRklMRQkqZm9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklM
RQkqZnJlb3Blbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIHZv
aWQJc2V0YnVmKEZJTEUgKiwgY2hhciAqKTsKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIoRklMRSAq
LCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBpbnQgc2V0bGluZWJ1ZihGSUxFICopOwoKZXh0ZXJu
IGludAlzZXR2YnVmKEZJTEUgKiwgY2hhciAqLCBpbnQsIHNpemVfdCk7CiAKZXh0ZXJuIGludAlm
cHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogCmV4dGVybiBpbnQJZnNjYW5mKEZJ
TEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogCmV4dGVybiBpbnQJcHJpbnRmKGNvbnN0IGNoYXIg
KiwgLi4uKTsKIApleHRlcm4gaW50CXNjYW5mKGNvbnN0IGNoYXIgKiwgLi4uKTsKCgogCmV4dGVy
biBpbnQJc25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKCiAKZXh0
ZXJuIGludAlzcHJpbnRmKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogCmV4dGVybiBpbnQJ
c3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwpleHRlcm4gaW50CXZmcHJp
bnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gaW50CXZwcmludGYo
Y29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOwoKCmV4dGVybiBpbnQJdnNucHJpbnRmKGNoYXIgKiwg
c2l6ZV90LCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCk7CgpleHRlcm4gaW50CXZzcHJpbnRmKGNo
YXIgKiwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gaW50CWZnZXRjKEZJTEUgKik7
CmV4dGVybiBjaGFyCSpmZ2V0cyhjaGFyICosIGludCwgRklMRSAqKTsKZXh0ZXJuIGludAlmcHV0
YyhpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQJZnB1dHMoY29uc3QgY2hhciAqLCBGSUxFICopOwpl
eHRlcm4gaW50CWdldGMoRklMRSAqKTsKZXh0ZXJuIGludAlnZXRjaGFyKHZvaWQpOwpleHRlcm4g
Y2hhcgkqZ2V0cyhjaGFyICopOwpleHRlcm4gaW50CXB1dGMoaW50LCBGSUxFICopOwpleHRlcm4g
aW50CXB1dGNoYXIoaW50KTsKZXh0ZXJuIGludAlwdXRzKGNvbnN0IGNoYXIgKik7CmV4dGVybiBp
bnQJdW5nZXRjKGludCwgRklMRSAqKTsKZXh0ZXJuIHNpemVfdAlmcmVhZCh2b2lkICosIHNpemVf
dCwgc2l6ZV90LCBGSUxFICopOwpleHRlcm4gc2l6ZV90CWZ3cml0ZShjb25zdCB2b2lkICosIHNp
emVfdCwgc2l6ZV90LCBGSUxFICopOwpleHRlcm4gaW50CWZnZXRwb3MoRklMRSAqLCBmcG9zX3Qg
Kik7CmV4dGVybiBpbnQJZnNlZWsoRklMRSAqLCBsb25nLCBpbnQpOwpleHRlcm4gaW50CWZzZXRw
b3MoRklMRSAqLCBjb25zdCBmcG9zX3QgKik7CmV4dGVybiBsb25nCWZ0ZWxsKEZJTEUgKik7CmV4
dGVybiB2b2lkCXJld2luZChGSUxFICopOwpleHRlcm4gdm9pZAljbGVhcmVycihGSUxFICopOwpl
eHRlcm4gaW50CWZlb2YoRklMRSAqKTsKZXh0ZXJuIGludAlmZXJyb3IoRklMRSAqKTsKZXh0ZXJu
IHZvaWQJcGVycm9yKGNvbnN0IGNoYXIgKik7CgpleHRlcm4gaW50CV9fZmlsYnVmKEZJTEUgKik7
CmV4dGVybiBpbnQJX19mbHNidWYoaW50LCBGSUxFICopOwoKIAoKCgoKCmV4dGVybiBGSUxFCSpm
ZG9wZW4oaW50LCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhcgkqY3Rlcm1pZChjaGFyICopOwpl
eHRlcm4gaW50CWZpbGVubyhGSUxFICopOwoKCgogCgoKCgpleHRlcm4gdm9pZAlmbG9ja2ZpbGUo
RklMRSAqKTsKZXh0ZXJuIGludAlmdHJ5bG9ja2ZpbGUoRklMRSAqKTsKZXh0ZXJuIHZvaWQJZnVu
bG9ja2ZpbGUoRklMRSAqKTsKZXh0ZXJuIGludAlnZXRjX3VubG9ja2VkKEZJTEUgKik7CmV4dGVy
biBpbnQJZ2V0Y2hhcl91bmxvY2tlZCh2b2lkKTsKZXh0ZXJuIGludAlwdXRjX3VubG9ja2VkKGlu
dCwgRklMRSAqKTsKZXh0ZXJuIGludAlwdXRjaGFyX3VubG9ja2VkKGludCk7CgoKCiAKCgoKCmV4
dGVybiBGSUxFCSpwb3Blbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFy
CSpjdXNlcmlkKGNoYXIgKik7CmV4dGVybiBjaGFyCSp0ZW1wbmFtKGNvbnN0IGNoYXIgKiwgY29u
c3QgY2hhciAqKTsKZXh0ZXJuIGludAlnZXRvcHQoaW50LCBjaGFyICpjb25zdCAqLCBjb25zdCBj
aGFyICopOwoKZXh0ZXJuIGludAlnZXRzdWJvcHQoY2hhciAqKiwgY2hhciAqY29uc3QgKiwgY2hh
ciAqKik7CgpleHRlcm4gY2hhcgkqb3B0YXJnOwpleHRlcm4gaW50CW9wdGluZCwgb3B0ZXJyLCBv
cHRvcHQ7CmV4dGVybiBpbnQJZ2V0dyhGSUxFICopOwpleHRlcm4gaW50CXB1dHcoaW50LCBGSUxF
ICopOwpleHRlcm4gaW50CXBjbG9zZShGSUxFICopOwoKCgogCgoKCgoKCgogCgoKCgoKZXh0ZXJu
IEZJTEUJKmZvcGVuNjQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRQkq
ZnJlb3BlbjY0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBGSUxFICopOwpleHRlcm4gRklM
RQkqdG1wZmlsZTY0KHZvaWQpOwpleHRlcm4gaW50CWZnZXRwb3M2NChGSUxFICosIGZwb3M2NF90
ICopOwpleHRlcm4gaW50CWZzZXRwb3M2NChGSUxFICosIGNvbnN0IGZwb3M2NF90ICopOwpleHRl
cm4gaW50CWZzZWVrbzY0KEZJTEUgKiwgb2ZmNjRfdCwgaW50KTsKZXh0ZXJuIG9mZjY0X3QJZnRl
bGxvNjQoRklMRSAqKTsKCgojIDQ2NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA1MTIgIi91c3IvaW5jbHVkZS9zdGRpby5o
IiAzIDQKCgoKCgoKCgp9CgoKCiMgNTMgIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25kb3Jfc3lzX3Nv
bGFyaXMuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDEgMyA0CiAKIAoKIAogCiAK
CgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzaWduYWwuaAkxLjMxCTk2LzA1LzIwIFNNSSIJCgoKCgoK
CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoK
CgoKI3ByYWdtYSBpZGVudAkiQCgjKXNpZ25hbC5oCTEuNTAJOTcvMDQvMTYgU01JIgkKCgoKCgoK
CmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCmV4dGVybiBsb25nIF9zeXNjb25mKGludCk7CSAKCgoKCgp0eXBlZGVmCXZvaWQgU0lHX0ZV
TkNfVFlQKGludCk7CnR5cGVkZWYJU0lHX0ZVTkNfVFlQICpTSUdfVFlQOwoKCgoKCgoKIyAxMDAg
Ii91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMgNAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKIAoKCnR5cGVkZWYgc3RydWN0IHsJCSAKCXVuc2lnbmVkIGxvbmcJX19zaWdiaXRzWzRdOwp9
IHNpZ3NldF90OwoKCnR5cGVkZWYJc3RydWN0IHsKCXVuc2lnbmVkIGxvbmcJX19zaWdiaXRzWzJd
Owp9IGtfc2lnc2V0X3Q7CgogCgoKCgoKCgoKCgogCgoKc3RydWN0IHNpZ2FjdGlvbiB7CglpbnQg
c2FfZmxhZ3M7Cgl1bmlvbiB7CgoJCXZvaWQgKCpfaGFuZGxlcikoaW50KTsKCgoKCgoKCQl2b2lk
ICgqX3NpZ2FjdGlvbikoaW50LCBzaWdpbmZvX3QgKiwgdm9pZCAqKTsKCgl9CV9mdW5jcHRyOwoJ
c2lnc2V0X3Qgc2FfbWFzazsKCWludCBzYV9yZXN2WzJdOwp9OwoKCgogCgoKCgoKCgoJCQkgCgog
CgoKCgoKCgoKCgoKCgoKCiAKCgogCgoKCiAKCgoKCgoJCQkgCgkJCSAKCQkJIAoKCgoKCgoKCgoK
CgoKIAoKCgp0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7CgoKCgl2b2lkCSpzc19zcDsKCXNp
emVfdAlzc19zaXplOwoJaW50CXNzX2ZsYWdzOwp9IHN0YWNrX3Q7CgoKCgoKCgogCnR5cGVkZWYg
c3RydWN0IHNpZ25vdGlmeV9pZCB7CQkgCglwaWRfdAlzbl9waWQ7CQkJIAoJaW50CXNuX2luZGV4
OwkJIAoJaW50CXNuX3BhZDsJCQkgCn0gc2lnbm90aWZ5X2lkX3Q7CgogCgoKCgoKCgogCgoKCnN0
cnVjdCBzaWdzdGFjayB7Cgl2b2lkCSpzc19zcDsKCWludAlzc19vbnN0YWNrOwp9OwoKCiAKCgoK
CgoKCiMgMzUzICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKCgoKfQoKCgojIDE4ICIv
dXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewoKCnR5cGVkZWYgaW50
CXNpZ19hdG9taWNfdDsKCgoKZXh0ZXJuIGNvbnN0IGNoYXIJKipfc3lzX3NpZ2xpc3RwOwkgCmV4
dGVybiBjb25zdCBpbnQJX3N5c19zaWdsaXN0bjsJCSAKCgoKCgoKCgpleHRlcm4gIkMiIFNJR19U
WVAgIHNpZ25hbChpbnQsIFNJR19UWVAgKTsKCgoKZXh0ZXJuIGludCByYWlzZShpbnQpOwoKCgpl
eHRlcm4gaW50IGtpbGwocGlkX3QsIGludCk7CmV4dGVybiBpbnQgc2lnYWN0aW9uKGludCwgY29u
c3Qgc3RydWN0IHNpZ2FjdGlvbiAqLCBzdHJ1Y3Qgc2lnYWN0aW9uICopOwoKZXh0ZXJuIGludCBz
aWdhZGRzZXQoc2lnc2V0X3QgKiwgaW50KTsKCgpleHRlcm4gaW50IHNpZ2RlbHNldChzaWdzZXRf
dCAqLCBpbnQpOwoKCmV4dGVybiBpbnQgc2lnZW1wdHlzZXQoc2lnc2V0X3QgKik7CgoKZXh0ZXJu
IGludCBzaWdmaWxsc2V0KHNpZ3NldF90ICopOwoKCmV4dGVybiBpbnQgc2lnaXNtZW1iZXIoY29u
c3Qgc2lnc2V0X3QgKiwgaW50KTsKCmV4dGVybiBpbnQgc2lncGVuZGluZyhzaWdzZXRfdCAqKTsK
ZXh0ZXJuIGludCBzaWdwcm9jbWFzayhpbnQsIGNvbnN0IHNpZ3NldF90ICosIHNpZ3NldF90ICop
OwpleHRlcm4gaW50IHNpZ3N1c3BlbmQoY29uc3Qgc2lnc2V0X3QgKik7CgoKCgojIDEgIi91c3Iv
aW5jbHVkZS9zeXMvcHJvY3NldC5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgojcHJhZ21h
IGlkZW50CSJAKCMpcHJvY3NldC5oCTEuMTcJOTYvMDQvMjQgU01JIgkKCgpleHRlcm4gIkMiIHsK
CgoKCiAKCgoKCgoKCgoKCiAKCgoKCnR5cGVkZWYgZW51bQoKCWlkdHlwZQkJIAoKCQl7CglQX1BJ
RCwJCSAKCVBfUFBJRCwJCSAKCVBfUEdJRCwJCSAKCQkJIAoJUF9TSUQsCQkgCglQX0NJRCwJCSAK
CVBfVUlELAkJIAoJUF9HSUQsCQkgCglQX0FMTCwJCSAKCVBfTFdQSUQJCSAKfSBpZHR5cGVfdDsK
CgogCgoKCgoKdHlwZWRlZiBlbnVtIGlkb3AgewoJUE9QX0RJRkYsCSAKCQkJIAoJCQkgCglQT1Bf
QU5ELAkgCgkJCSAKCQkJIAoJUE9QX09SLAkJIAoJCQkgCgkJCSAKCVBPUF9YT1IJCSAKCQkJIAoJ
CQkgCn0gaWRvcF90OwoKCiAKCgoKCnR5cGVkZWYgc3RydWN0IHByb2NzZXQgewoJaWRvcF90CQlw
X29wOwkgCgkJCQkgCgkJCQkgCgkJCQkgCgoJaWR0eXBlX3QJcF9saWR0eXBlOwoJCQkJIAoJCQkJ
IAoJaWRfdAkJcF9saWQ7CSAKCglpZHR5cGVfdAlwX3JpZHR5cGU7CgkJCQkgCgkJCQkgCglpZF90
CQlwX3JpZDsJIAp9IHByb2NzZXRfdDsKCiAKCgoKCgoKCgoKCgoKIyAxNDAgIi91c3IvaW5jbHVk
ZS9zeXMvcHJvY3NldC5oIiAzIDQKCgoKfQoKCgojIDcwICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgi
IDIgMyA0CgpleHRlcm4gaW50IGdzaWduYWwoaW50KTsKZXh0ZXJuIGludCAoKnNzaWduYWwoaW50
LCBpbnQgKCopKGludCkpKShpbnQpOwpleHRlcm4gaW50IHNpZ3NlbmQoaWR0eXBlX3QsIGlkX3Qs
IGludCk7CmV4dGVybiBpbnQgc2lnc2VuZHNldChjb25zdCBwcm9jc2V0X3QgKiwgaW50KTsKZXh0
ZXJuIGludCBzaWcyc3RyKGludCwgY2hhciAqKTsKZXh0ZXJuIGludCBzdHIyc2lnKGNvbnN0IGNo
YXIgKiwgaW50ICopOwoKCgoKCgpleHRlcm4gdm9pZCAoKmJzZF9zaWduYWwoaW50LCB2b2lkICgq
KShpbnQpKSkoaW50KTsKZXh0ZXJuIGludCBraWxscGcocGlkX3QsIGludCk7CmV4dGVybiBpbnQg
c2lnaW50ZXJydXB0KGludCwgaW50KTsKZXh0ZXJuIGludCBzaWdhbHRzdGFjayhjb25zdCBzdGFj
a190ICosIHN0YWNrX3QgKik7CmV4dGVybiBpbnQgc2lnaG9sZChpbnQpOwpleHRlcm4gaW50IHNp
Z2lnbm9yZShpbnQpOwpleHRlcm4gaW50IHNpZ3BhdXNlKGludCk7CmV4dGVybiBpbnQgc2lncmVs
c2UoaW50KTsKZXh0ZXJuIHZvaWQgKCpzaWdzZXQoaW50LCB2b2lkICgqKShpbnQpKSkoaW50KTsK
ZXh0ZXJuIGludCBzaWdzdGFjayhzdHJ1Y3Qgc2lnc3RhY2sgKiwgc3RydWN0IHNpZ3N0YWNrICop
OwoKCgoKCgoKZXh0ZXJuIGludCBzaWd3YWl0aW5mbyhjb25zdCBzaWdzZXRfdCAqLCBzaWdpbmZv
X3QgKik7CmV4dGVybiBpbnQgc2lndGltZWR3YWl0KGNvbnN0IHNpZ3NldF90ICosIHNpZ2luZm9f
dCAqLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgc2lncXVldWUocGlkX3Qs
IGludCwgY29uc3QgdW5pb24gc2lndmFsKTsKCgojIDE3OCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5o
IiAzIDQKCgogCgoKCgoKCgoKCiMgMjA1ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMgNAoKCmV4
dGVybiBpbnQgc2lnd2FpdChzaWdzZXRfdCAqKTsKCgoKCiMgMjM4ICIvdXNyL2luY2x1ZGUvc2ln
bmFsLmgiIDMgNAoKCgoKCn0KCgoKIyA1NCAiLi4vY29uZG9yX2luY2x1ZGVzL2NvbmRvcl9zeXNf
c29sYXJpcy5oIiAyCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvaW9jdGwuaCIgMSAzIDQKIAog
CgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWlvY3RsLmgJMS45CTkyLzA3LzE0IFNNSSIJ
CgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKfQoKCiAK
CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R0eWNoYXJzLmgiIDEgMyA0CiAKIAoKIAogCiAKCgoK
CiNwcmFnbWEgaWRlbnQJIkAoIyl0dHljaGFycy5oCTEuNgk5Mi8wNy8xNCBTTUkiCQogCgoKZXh0
ZXJuICJDIiB7CgoKIAoKCgoKc3RydWN0IHR0eWNoYXJzIHsKCWNoYXIJdGNfZXJhc2U7CSAKCWNo
YXIJdGNfa2lsbDsJIAoJY2hhcgl0Y19pbnRyYzsJIAoJY2hhcgl0Y19xdWl0YzsJIAoJY2hhcgl0
Y19zdGFydGM7CSAKCWNoYXIJdGNfc3RvcGM7CSAKCWNoYXIJdGNfZW9mYzsJIAoJY2hhcgl0Y19i
cmtjOwkgCgljaGFyCXRjX3N1c3BjOwkgCgljaGFyCXRjX2RzdXNwYzsJIAoJY2hhcgl0Y19ycHJu
dGM7CSAKCWNoYXIJdGNfZmx1c2hjOwkgCgljaGFyCXRjX3dlcmFzYzsJIAoJY2hhcgl0Y19sbmV4
dGM7CSAKfTsKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgp9CgoKCiMgNTYgIi91c3IvaW5jbHVk
ZS9zeXMvaW9jdGwuaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90dHlkZXYuaCIgMSAz
IDQKIAogCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXR0eWRldi5oCTEuNwk5Mi8wNy8x
NCBTTUkiCQoKCmV4dGVybiAiQyIgewoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKfQoK
CgojIDU3ICIvdXNyL2luY2x1ZGUvc3lzL2lvY3RsLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVk
ZS9zeXMvdHRvbGQuaCIgMSAzIDQKIAogCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXR0
b2xkLmgJMS4xMQk5My8xMi8xNSBTTUkiCQoKCmV4dGVybiAiQyIgewoKCiAKIAoKIApzdHJ1Y3Qg
dGNoYXJzIHsKCWNoYXIJdF9pbnRyYzsJIAoJY2hhcgl0X3F1aXRjOwkgCgljaGFyCXRfc3RhcnRj
OwkgCgljaGFyCXRfc3RvcGM7CSAKCWNoYXIJdF9lb2ZjOwkJIAoJY2hhcgl0X2Jya2M7CQkgCn07
CgogCnN0cnVjdCB0YyB7CgljaGFyCXRfaW50cmM7CSAKCWNoYXIJdF9xdWl0YzsJIAoJY2hhcgl0
X3N0YXJ0YzsJIAoJY2hhcgl0X3N0b3BjOwkgCgljaGFyCXRfZW9mYzsJCSAKCWNoYXIJdF9icmtj
OwkJIAp9OwoKCiAKCgoKIAogCnN0cnVjdAlzZ3R0eWIgewoJY2hhcglzZ19pc3BlZWQ7CQkgCglj
aGFyCXNnX29zcGVlZDsJCSAKCWNoYXIJc2dfZXJhc2U7CQkgCgljaGFyCXNnX2tpbGw7CQkgCglp
bnQJc2dfZmxhZ3M7CQkgCn07CgogCnN0cnVjdCBsdGNoYXJzIHsKCWNoYXIJdF9zdXNwYzsJIAoJ
Y2hhcgl0X2RzdXNwYzsJIAoJY2hhcgl0X3Jwcm50YzsJIAoJY2hhcgl0X2ZsdXNoYzsJIAoJY2hh
cgl0X3dlcmFzYzsJIAoJY2hhcgl0X2xuZXh0YzsJIAp9OwoKCiAKCgoKCgoKIAoKCgoKCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCnN0cnVjdCB3
aW5zaXplIHsKCXVuc2lnbmVkIHNob3J0IHdzX3JvdzsJCSAKCXVuc2lnbmVkIHNob3J0IHdzX2Nv
bDsJCSAKCXVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsJIAoJdW5zaWduZWQgc2hvcnQgd3NfeXBp
eGVsOwkgCn07CgoKCgogCiAKCiMgMTYzICIvdXNyL2luY2x1ZGUvc3lzL3R0b2xkLmgiIDMgNAoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCQkJCQkJIAoKCgkJ
CQkJCSAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCQkJCQkgCgoJCQkJCSAKCgoKCgoK
CgoKCgp9CgoKCiMgNTggIi91c3IvaW5jbHVkZS9zeXMvaW9jdGwuaCIgMiAzIDQKCgoKZXh0ZXJu
ICJDIiB7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKfQoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9maWxpby5oIiAxIDMgNAogCiAKCiAKIAogCgoK
CgojcHJhZ21hIGlkZW50CSJAKCMpZmlsaW8uaAkxLjIxCTk3LzAzLzI3IFNNSSIJCgogCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvaW9jY29tLmgiIDEg
MyA0CiAKIAoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylpb2Njb20uaAkxLjEwCTkyLzA3
LzE0IFNNSSIJCgogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCiAKCgoK
CgoKCgoKCgogCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKc3RydWN0IGJzZF9jb21wYXRfaW9j
dGx0YWIgewoJaW50CWNtZDsJIAoJaW50CWZsYWc7CSAKCXVuc2lnbmVkIGludAlzaXplOwkgCn07
CgoKfQoKCgojIDQwICIvdXNyL2luY2x1ZGUvc3lzL2ZpbGlvLmgiIDIgMyA0CgoKCmV4dGVybiAi
QyIgewoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKfQoKCgojIDExOCAi
L3Vzci9pbmNsdWRlL3N5cy9pb2N0bC5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Nv
Y2tpby5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKI3ByYWdt
YSBpZGVudAkiQCgjKXNvY2tpby5oCTEuMTUJOTYvMTEvMTEgU01JIgkKCiAKCgoKCgoKZXh0ZXJu
ICJDIiB7CgoKIAoKCgoKCgoKCgoKIAoKCQkJCQkJIAoKCQkJCQkJIAoKCgoKCgoKCgoKCgoKCSAK
CgoKCgoKCgoKCgoKCgoKCgoKCQkJCQkJCSAKCgoKIAoKCgogCgoKCgoKCgoKCgkJCQkJCQkgCgoJ
CQkJCQkJIAoKCQkJCQkJCSAKCgkJCQkJCQkgCgoJCQkJCQkJIAoKCgoKCgoKCgoKCn0KCgoKIyAx
MTkgIi91c3IvaW5jbHVkZS9zeXMvaW9jdGwuaCIgMiAzIDQKCgoKCgojIDU4ICIuLi9jb25kb3Jf
aW5jbHVkZXMvY29uZG9yX3N5c19zb2xhcmlzLmgiIDIKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5
cy9zdGF0ZnMuaCIgMSAzIDQKIAogCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0YXRm
cy5oCTEuOAk5Mi8wNy8xNCBTTUkiCQoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKc3RydWN0CXN0
YXRmcyB7CglzaG9ydAlmX2ZzdHlwOwkgCglsb25nCWZfYnNpemU7CSAKCWxvbmcJZl9mcnNpemU7
CSAKCWxvbmcJZl9ibG9ja3M7CSAKCWxvbmcJZl9iZnJlZTsJIAoJaW5vX3QJZl9maWxlczsJIAoJ
aW5vX3QJZl9mZnJlZTsJIAoJY2hhcglmX2ZuYW1lWzZdOwkgCgljaGFyCWZfZnBhY2tbNl07CSAK
fTsKCgppbnQgc3RhdGZzKGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXRmcyAqLCBpbnQsIGludCk7
CmludCBmc3RhdGZzKGludCwgc3RydWN0IHN0YXRmcyAqLCBpbnQsIGludCk7CgoKCn0KCgoKIyA2
MiAiLi4vY29uZG9yX2luY2x1ZGVzL2NvbmRvcl9zeXNfc29sYXJpcy5oIiAyCgoKCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCgoKCiNwcmFn
bWEgaWRlbnQJIkAoIyl3YWl0LmgJMS4yMAk5Ny8wMy8wMiBTTUkiCQoKCgoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDEgMyA0CiAKIAoKIAogCiAKIAoKCgoKCgoKI3ByYWdt
YSBpZGVudAkiQCgjKXJlc291cmNlLmgJMS4yMQk5Ni8wNi8wMyBTTUkiCQoKCgoKCgpleHRlcm4g
IkMiIHsKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcJcmxpbV90OwoKCgoKCiMgNjkgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0
CgoKc3RydWN0IHJsaW1pdCB7CglybGltX3QJcmxpbV9jdXI7CQkgCglybGltX3QJcmxpbV9tYXg7
CQkgCn07CgogCgoKdHlwZWRlZiB1X2xvbmdsb25nX3QJcmxpbTY0X3Q7CgoKCgoKc3RydWN0IHJs
aW1pdDY0IHsKCXJsaW02NF90CXJsaW1fY3VyOwkgCglybGltNjRfdAlybGltX21heDsJIAp9OwoK
CgojIDEwNyAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQKCgoKCgoKCnN0cnVjdAly
dXNhZ2UgewoJc3RydWN0IHRpbWV2YWwgcnVfdXRpbWU7CSAKCXN0cnVjdCB0aW1ldmFsIHJ1X3N0
aW1lOwkgCglsb25nCXJ1X21heHJzczsJCSAKCWxvbmcJcnVfaXhyc3M7CQkgCglsb25nCXJ1X2lk
cnNzOwkJIAoJbG9uZwlydV9pc3JzczsJCSAKCWxvbmcJcnVfbWluZmx0OwkJIAoJbG9uZwlydV9t
YWpmbHQ7CQkgCglsb25nCXJ1X25zd2FwOwkJIAoJbG9uZwlydV9pbmJsb2NrOwkJIAoJbG9uZwly
dV9vdWJsb2NrOwkJIAoJbG9uZwlydV9tc2dzbmQ7CQkgCglsb25nCXJ1X21zZ3JjdjsJCSAKCWxv
bmcJcnVfbnNpZ25hbHM7CQkgCglsb25nCXJ1X252Y3N3OwkJIAoJbG9uZwlydV9uaXZjc3c7CQkg
Cn07CgogCiMgMTQ0ICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNAoKCgoKZXh0ZXJu
IGludCBzZXRybGltaXQoaW50LCBjb25zdCBzdHJ1Y3QgcmxpbWl0ICopOwpleHRlcm4gaW50IGdl
dHJsaW1pdChpbnQsIHN0cnVjdCBybGltaXQgKik7CgogCgoKZXh0ZXJuIGludCBzZXRybGltaXQ2
NChpbnQsIGNvbnN0IHN0cnVjdCBybGltaXQ2NCAqKTsKZXh0ZXJuIGludCBnZXRybGltaXQ2NChp
bnQsIHN0cnVjdCBybGltaXQ2NCAqKTsKCgpleHRlcm4gaW50IGdldHByaW9yaXR5KGludCwgaWRf
dCk7CmV4dGVybiBpbnQgc2V0cHJpb3JpdHkoaW50LCBpZF90LCBpbnQpOwpleHRlcm4gaW50IGdl
dHJ1c2FnZShpbnQsIHN0cnVjdCBydXNhZ2UgKik7CgojIDE3OCAiL3Vzci9pbmNsdWRlL3N5cy9y
ZXNvdXJjZS5oIiAzIDQKCgoKCgp9CgoKCiMgMjQgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAy
IDMgNAoKCgoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIHBpZF90IHdhaXQoaW50ICopOwpleHRlcm4g
cGlkX3Qgd2FpdHBpZChwaWRfdCwgaW50ICosIGludCk7CgoKZXh0ZXJuIGludCB3YWl0aWQoaWR0
eXBlX3QsIGlkX3QsIHNpZ2luZm9fdCAqLCBpbnQpOwpleHRlcm4gcGlkX3Qgd2FpdDMoaW50ICos
IGludCwgc3RydWN0IHJ1c2FnZSAqKTsKCgojIDEwNCAiL3Vzci9pbmNsdWRlL3N5cy93YWl0Lmgi
IDMgNAoKCgoKfQoKCgojIDY4ICIuLi9jb25kb3JfaW5jbHVkZXMvY29uZG9yX3N5c19zb2xhcmlz
LmgiIDIKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAxIDMgNAogCiAKCiAKIAog
CgogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpdWlvLmgJMS4yOAk5Ny8wNi8yNyBTTUkiCQoK
CgoKZXh0ZXJuICJDIiB7CgoKCgogCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IGlvdmVjIHsK
CWNhZGRyX3QJaW92X2Jhc2U7CglpbnQJaW92X2xlbjsKfSBpb3ZlY190OwoKCgogCgoKdHlwZWRl
ZiBlbnVtIHVpb19zZWcgeyBVSU9fVVNFUlNQQUNFLCBVSU9fU1lTU1BBQ0UsIFVJT19VU0VSSVNQ
QUNFIH0gdWlvX3NlZ190OwoKdHlwZWRlZiBzdHJ1Y3QgdWlvIHsKCWlvdmVjX3QJKnVpb19pb3Y7
CSAKCWludAl1aW9faW92Y250OwkgCglsbG9mZl90CV91aW9fb2Zmc2V0OwkgCgl1aW9fc2VnX3Qg
dWlvX3NlZ2ZsZzsJIAoJc2hvcnQJdWlvX2Ztb2RlOwkgCglsbGRhZGRyX3QgX3Vpb19saW1pdDsJ
IAoJaW50CXVpb19yZXNpZDsJIAp9IHVpb190OwoKCgoKCgoKIAoKCnR5cGVkZWYgZW51bSB1aW9f
cncgeyBVSU9fUkVBRCwgVUlPX1dSSVRFIH0gdWlvX3J3X3Q7CgoKIyA5OCAiL3Vzci9pbmNsdWRl
L3N5cy91aW8uaCIgMyA0CgoKCgpleHRlcm4gc3NpemVfdCByZWFkdihpbnQsIGNvbnN0IHN0cnVj
dCBpb3ZlYyAqLCBpbnQpOwpleHRlcm4gc3NpemVfdCB3cml0ZXYoaW50LCBjb25zdCBzdHJ1Y3Qg
aW92ZWMgKiwgaW50KTsKCgoKCgoKCgoKCgp9CgoKCiMgNzQgIi4uL2NvbmRvcl9pbmNsdWRlcy9j
b25kb3Jfc3lzX3NvbGFyaXMuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAx
IDMgNAogCiAKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc29ja2V0LmgJMS4zMAk5Ny8w
MS8yMCBTTUkiCQoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVk
ZS9zeXMvbmV0Y29uZmlnLmgiIDEgMyA0CiAKIAoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAo
IyluZXRjb25maWcuaAkxLjEzCTk1LzAyLzI0IFNNSSIJCgoKZXh0ZXJuICJDIiB7CgoKCgoKc3Ry
dWN0ICBuZXRjb25maWcgewoJY2hhcgkJKm5jX25ldGlkOwkgCgl1bnNpZ25lZCBsb25nCW5jX3Nl
bWFudGljczsJIAoJdW5zaWduZWQgbG9uZwluY19mbGFnOwkgCgljaGFyCQkqbmNfcHJvdG9mbWx5
OwkgCgljaGFyCQkqbmNfcHJvdG87CSAKCWNoYXIJCSpuY19kZXZpY2U7CSAKCXVuc2lnbmVkIGxv
bmcJbmNfbmxvb2t1cHM7CSAKCWNoYXIJCSoqbmNfbG9va3VwczsJIAoJdW5zaWduZWQgbG9uZwlu
Y191bnVzZWRbOF07Cn07Cgp0eXBlZGVmIHN0cnVjdCB7CglzdHJ1Y3QgbmV0Y29uZmlnICoqbmNf
aGVhZDsKCXN0cnVjdCBuZXRjb25maWcgKipuY19jdXJyOwp9IE5DT05GX0hBTkRMRTsKCiAKCgoK
CgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCmV4
dGVybiB2b2lkCQkqc2V0bmV0Y29uZmlnKHZvaWQpOwpleHRlcm4gaW50CQllbmRuZXRjb25maWco
dm9pZCAqKTsKZXh0ZXJuIHN0cnVjdCBuZXRjb25maWcJKmdldG5ldGNvbmZpZyh2b2lkICopOwpl
eHRlcm4gc3RydWN0IG5ldGNvbmZpZwkqZ2V0bmV0Y29uZmlnZW50KGNoYXIgKik7CmV4dGVybiB2
b2lkCQlmcmVlbmV0Y29uZmlnZW50KHN0cnVjdCBuZXRjb25maWcgKik7CmV4dGVybiB2b2lkCQkq
c2V0bmV0cGF0aCh2b2lkKTsKZXh0ZXJuIGludAkJZW5kbmV0cGF0aCh2b2lkICopOwpleHRlcm4g
c3RydWN0IG5ldGNvbmZpZyAqZ2V0bmV0cGF0aCh2b2lkICopOwoKIyAxMTMgIi91c3IvaW5jbHVk
ZS9zeXMvbmV0Y29uZmlnLmgiIDMgNAoKCgp9CgoKCiMgNDEgIi91c3IvaW5jbHVkZS9zeXMvc29j
a2V0LmgiIDIgMyA0CgoKCgoKZXh0ZXJuICJDIiB7CgoKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
CXNhX2ZhbWlseV90OwoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK
CgoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCnN0cnVjdAlsaW5nZXIgewoJ
aW50CWxfb25vZmY7CQkgCglpbnQJbF9saW5nZXI7CQkgCn07CgogCgoKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCnN0cnVjdCBzb2NrYWRkciB7CglzYV9mYW1pbHlfdAlz
YV9mYW1pbHk7CSAKCWNoYXIJCXNhX2RhdGFbMTRdOwkgCn07CgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCnN0cnVjdCBtc2doZHIgewoJY2FkZHJfdAltc2dfbmFt
ZTsJCSAKCWludAltc2dfbmFtZWxlbjsJCSAKCXN0cnVjdAlpb3ZlYyAqbXNnX2lvdjsJCSAKCWlu
dAltc2dfaW92bGVuOwkJIAoJY2FkZHJfdAltc2dfYWNjcmlnaHRzOwkJIAoJaW50CW1zZ19hY2Ny
aWdodHNsZW47Cn07CiMgMjM4ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAzIDQKCgojIDI2
NCAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMyA0CgoKCgoKIAoKCgoKIAoKCgoKCiAKCgoK
CnN0cnVjdCBjbXNnaGRyIHsKCXNpemVfdAljbXNnX2xlbjsJIAoJaW50CWNtc2dfbGV2ZWw7CSAK
CWludAljbXNnX3R5cGU7CSAKfTsKIyAzMDMgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDMg
NAoKCiAKCgoKCgoKCnN0cnVjdCBvcHRoZHIgewoJbG9uZwlsZXZlbDsJCSAKCWxvbmcJbmFtZTsJ
CSAKCWxvbmcJbGVuOwkJIAp9OwoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IGFjY2VwdChpbnQs
IHN0cnVjdCBzb2NrYWRkciAqLCBpbnQgKik7CmV4dGVybiBpbnQgYmluZChpbnQsIGNvbnN0IHN0
cnVjdCBzb2NrYWRkciAqLCBpbnQpOwpleHRlcm4gaW50IGNvbm5lY3QoaW50LCBzdHJ1Y3Qgc29j
a2FkZHIgKiwgaW50KTsKZXh0ZXJuIGludCBnZXRwZWVybmFtZShpbnQsIHN0cnVjdCBzb2NrYWRk
ciAqLCBpbnQgKik7CmV4dGVybiBpbnQgZ2V0c29ja25hbWUoaW50LCBzdHJ1Y3Qgc29ja2FkZHIg
KiwgaW50ICopOwpleHRlcm4gaW50IGdldHNvY2tvcHQoaW50LCBpbnQsIGludCwgY2hhciAqLCBp
bnQgKik7CgpleHRlcm4gaW50IGxpc3RlbihpbnQsIGludCk7CiMgMzUxICIvdXNyL2luY2x1ZGUv
c3lzL3NvY2tldC5oIiAzIDQKCmV4dGVybiBpbnQgcmVjdihpbnQsIGNoYXIgKiwgaW50LCBpbnQp
OwpleHRlcm4gaW50IHJlY3Zmcm9tKGludCwgY2hhciAqLCBpbnQsIGludCwgc3RydWN0IHNvY2th
ZGRyICosIGludCAqKTsKZXh0ZXJuIGludCByZWN2bXNnKGludCwgc3RydWN0IG1zZ2hkciAqLCBp
bnQpOwpleHRlcm4gaW50IHNlbmQoaW50LCBjb25zdCBjaGFyICosIGludCwgaW50KTsKZXh0ZXJu
IGludCBzZW5kbXNnKGludCwgY29uc3Qgc3RydWN0IG1zZ2hkciAqLCBpbnQpOwpleHRlcm4gaW50
IHNlbmR0byhpbnQsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRk
ciAqLCBpbnQpOwpleHRlcm4gaW50IHNldHNvY2tvcHQoaW50LCBpbnQsIGludCwgY29uc3QgY2hh
ciAqLCBpbnQpOwpleHRlcm4gaW50IHNvY2tldHBhaXIoaW50LCBpbnQsIGludCwgaW50ICopOwoK
ZXh0ZXJuIGludCBzaHV0ZG93bihpbnQsIGludCk7CmV4dGVybiBpbnQgc29ja2V0KGludCwgaW50
LCBpbnQpOwojIDM4MSAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMyA0CgoKCiMgNDA3ICIv
dXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAzIDQKCgoKfQoKCgojIDc1ICIuLi9jb25kb3JfaW5j
bHVkZXMvY29uZG9yX3N5c19zb2xhcmlzLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9kaXJl
bnQuaCIgMSAzIDQKIAogCgogCiAKIAogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpZGlyZW50
LmgJMS4yNQk5Ni8wOC8wNiBTTUkiCQoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCnR5cGVkZWYgc3Ry
dWN0IGRpcmVudCB7Cglpbm9fdAkJZF9pbm87CQkgCglvZmZfdAkJZF9vZmY7CQkgCgl1bnNpZ25l
ZCBzaG9ydAlkX3JlY2xlbjsJIAoJY2hhcgkJZF9uYW1lWzFdOwkgCn0gZGlyZW50X3Q7CgogCgp0
eXBlZGVmIHN0cnVjdCBkaXJlbnQ2NCB7Cglpbm82NF90CQlkX2lubzsJCSAKCW9mZjY0X3QJCWRf
b2ZmOwkJIAoJdW5zaWduZWQgc2hvcnQJZF9yZWNsZW47CSAKCWNoYXIJCWRfbmFtZVsxXTsJIAp9
IGRpcmVudDY0X3Q7CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgppbnQgZ2V0ZGVudHMoaW50LCBz
dHJ1Y3QgZGlyZW50ICosIHVuc2lnbmVkKTsKCgoKCiAKCgoKCgp9CgoKCiMgNzYgIi4uL2NvbmRv
cl9pbmNsdWRlcy9jb25kb3Jfc3lzX3NvbGFyaXMuaCIgMgoKCmV4dGVybiAiQyIgeyAKIApleHRl
cm4gaW50IGZkc3luYyggaW50IGZkLGludCBmbGFncyApOwogCmV4dGVybiBpbnQgZ2V0ZGVudHMo
aW50LCBzdHJ1Y3QgZGlyZW50ICosIHVuc2lnbmVkIGludCk7Cn0gCgogCgoKCgoKCgoKCQoJCgkK
CgoKCnR5cGVkZWYgdm9pZCogTU1BUF9UOwoKCiMgNTQgIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25k
b3Jfc3lzdGVtLmgiIDIKCgoKCgogCgoKIyAxICIuLi9jb25kb3JfaW5jbHVkZXMvY29uZG9yX2Zp
bGVfbG9jay5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIyAxICIuLi9oL2Zha2VfZmxvY2suaCIgMQogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgogCgoKCmV4dGVybiAiQyIgeyAKZXh0ZXJuIGludCBmbG9j
ayhpbnQgZmQsIGludCBvcCk7Cn0gCiMgNjEgIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25kb3JfZmls
ZV9sb2NrLmgiIDIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiMgMSAiLi4vaC9maWxlX2xvY2su
aCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiLi4vY29uZG9yX2luY2x1ZGVzL2Nv
bmRvcl9jb25zdGFudHMuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CgoKCnR5cGVkZWYgaW50IEJPT0xFQU47CnR5cGVkZWYgaW50IEJPT0xfVDsKCgoKCgoKCgoKc3Rh
dGljIGNvbnN0IGludAlUUlVFID0gMTsKc3RhdGljIGNvbnN0IGludAlGQUxTRSA9IDA7CgogCgoK
CgoKc3RhdGljIGNvbnN0IGludAlNSU5VVEUgPSA2MDsKc3RhdGljIGNvbnN0IGludAlIT1VSID0g
NjAgKiA2MDsKc3RhdGljIGNvbnN0IGludAlEQVkgPSAyNCAqIDYwICogNjA7CgoKIAoKCgoKc3Rh
dGljIGNvbnN0IGludAlNQVRDSCA9IDA7CgoKIAoKCgoKc3RhdGljIGNvbnN0IGludCBDTElFTlRf
TE9HID0gMTg7CnN0YXRpYyBjb25zdCBpbnQgUlNDX1NPQ0sgPSAxNzsKCnN0YXRpYyBjb25zdCBp
bnQgUkVRX1NPQ0sgPSAxNjsKc3RhdGljIGNvbnN0IGludCBSUExfU09DSyA9IDE3OwoKCgoKCgoK
c3RhdGljIGNvbnN0IGNoYXIgRElSX0RFTElNX0NIQVIgPSAnLyc7CnN0YXRpYyBjb25zdCBjaGFy
IE5VTExfRklMRVtdID0gIi9kZXYvbnVsbCI7CnN0YXRpYyBjb25zdCBjaGFyIENPTkRPUl9FWEVD
W10gPSAiY29uZG9yX2V4ZWMuZXhlIjsKCgogCnN0YXRpYyBjb25zdCBjaGFyIE5pY2VVc2VyTmFt
ZVtdID0gIm5pY2UtdXNlciI7CgogCgoKCgoKCgoKCgojIDI2ICIuLi9oL2ZpbGVfbG9jay5oIiAy
CgoKdHlwZWRlZiBlbnVtIHsgUkVBRF9MT0NLLCBXUklURV9MT0NLLCBVTl9MT0NLIH0gTE9DS19U
WVBFOwoKCgpjbGFzcyBGaWxlTG9jayB7CnB1YmxpYzoKCUZpbGVMb2NrKCBpbnQgZmQgKTsKCX5G
aWxlTG9jaygpOwoKCQkgCglCT09MRUFOCQlpc19ibG9ja2luZygpOwkJIAoJTE9DS19UWVBFCWdl
dF9zdGF0ZSgpOwkJIAoJdm9pZAkJZGlzcGxheSgpOwoKCQkgCgl2b2lkCQlzZXRfYmxvY2tpbmco
IEJPT0xFQU4gKTsJIAoJQk9PTEVBTgkJb2J0YWluKCBMT0NLX1RZUEUgdCApOwkJIAoJQk9PTEVB
TgkJcmVsZWFzZSgpOwkJCQkJIAoKcHJpdmF0ZToKCWludAkJCWZkOwkJCSAKCUJPT0xFQU4JCWJs
b2NraW5nOwkgCglMT0NLX1RZUEUJc3RhdGU7CQkgCn07CgoKCgojIDg1ICIuLi9jb25kb3JfaW5j
bHVkZXMvY29uZG9yX2ZpbGVfbG9jay5oIiAyCgoKCgojIDYyICIuLi9jb25kb3JfaW5jbHVkZXMv
Y29uZG9yX3N5c3RlbS5oIiAyCgojIDEgIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25kb3JfZml4X2Fz
c2VydC5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiMgMSAiL3MvZ2NjLTIuOTUuMi9zdW54ODZfNTYvbGliL2djYy1saWIvaTM4
Ni1wYy1zb2xhcmlzMi42LzIuOTUuMi8uLi8uLi8uLi8uLi9pMzg2LXBjLXNvbGFyaXMyLjYvaW5j
bHVkZS9hc3NlcnQuaCIgMSAzIDQKIAoKCgoKCgoKCgoKCgoKCgoKCiMgNTMgIi9zL2djYy0yLjk1
LjIvc3VueDg2XzU2L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNi8yLjk1LjIvLi4vLi4v
Li4vLi4vaTM4Ni1wYy1zb2xhcmlzMi42L2luY2x1ZGUvYXNzZXJ0LmgiIDMgNAoKCiMgNTkgIi4u
L2NvbmRvcl9pbmNsdWRlcy9jb25kb3JfZml4X2Fzc2VydC5oIiAyCgoKCgoKCgoKCgoKCgojIDYz
ICIuLi9jb25kb3JfaW5jbHVkZXMvY29uZG9yX3N5c3RlbS5oIiAyCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgp0eXBlZGVmIGZkX3NldCAqU0VMRUNUX0ZEU0VUX1BUUjsK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAxIDMgNAogCgoKCgogCiAKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc3RkbGliLmgJ
MS40MAk5Ny8wNi8zMCBTTUkiCQoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgp0eXBlZGVmCXN0cnVj
dCB7CglpbnQJcXVvdDsKCWludAlyZW07Cn0gZGl2X3Q7Cgp0eXBlZGVmIHN0cnVjdCB7Cglsb25n
CXF1b3Q7Cglsb25nCXJlbTsKfSBsZGl2X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewoJbG9uZyBsb25n
CXF1b3Q7Cglsb25nIGxvbmcJcmVtOwp9IGxsZGl2X3Q7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0
eXBlZGVmIGxvbmcgd2NoYXJfdDsKCgoKCiAKIyA4NiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
IDQKCgpleHRlcm4gdW5zaWduZWQgY2hhcglfX2N0eXBlW107CgoKCmV4dGVybiBkb3VibGUgYXRv
Zihjb25zdCBjaGFyICopOwpleHRlcm4gaW50IGF0b2koY29uc3QgY2hhciAqKTsKZXh0ZXJuIGxv
bmcgaW50IGF0b2woY29uc3QgY2hhciAqKTsKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QoY29uc3QgY2hh
ciAqLCBjaGFyICoqKTsKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbChjb25zdCBjaGFyICosIGNoYXIg
KiosIGludCk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsKGNvbnN0IGNoYXIgKiwg
Y2hhciAqKiwgaW50KTsKCmV4dGVybiBpbnQgcmFuZCh2b2lkKTsKZXh0ZXJuIHZvaWQgc3JhbmQo
dW5zaWduZWQgaW50KTsKCgpleHRlcm4gaW50IHJhbmRfcih1bnNpZ25lZCBpbnQgKik7CgoKZXh0
ZXJuIHZvaWQgKmNhbGxvYyhzaXplX3QsIHNpemVfdCk7CmV4dGVybiB2b2lkIGZyZWUodm9pZCAq
KTsKZXh0ZXJuIHZvaWQgKm1hbGxvYyhzaXplX3QpOwpleHRlcm4gdm9pZCAqcmVhbGxvYyh2b2lk
ICosIHNpemVfdCk7CgpleHRlcm4gdm9pZCBhYm9ydCh2b2lkKTsKZXh0ZXJuIGludCBhdGV4aXQo
dm9pZCAoKikodm9pZCkpOwpleHRlcm4gdm9pZCBleGl0KGludCk7CmV4dGVybiB2b2lkIF9leGl0
aGFuZGxlKHZvaWQpOwpleHRlcm4gY2hhciAqZ2V0ZW52KGNvbnN0IGNoYXIgKik7CmV4dGVybiBp
bnQgc3lzdGVtKGNvbnN0IGNoYXIgKik7CgpleHRlcm4gdm9pZCAqYnNlYXJjaChjb25zdCB2b2lk
ICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsCglpbnQgKCopKGNvbnN0IHZvaWQgKiwg
Y29uc3Qgdm9pZCAqKSk7CmV4dGVybiB2b2lkIHFzb3J0KHZvaWQgKiwgc2l6ZV90LCBzaXplX3Qs
CglpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CgpleHRlcm4gaW50IGFicyhp
bnQpOwpleHRlcm4gZGl2X3QgZGl2KGludCwgaW50KTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMobG9u
Zyk7CmV4dGVybiBsZGl2X3QgbGRpdihsb25nLCBsb25nKTsKCmV4dGVybiBpbnQgbWJ0b3djKHdj
aGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gaW50IG1ibGVuKGNvbnN0IGNo
YXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCB3Y3RvbWIoY2hhciAqLCB3Y2hhcl90KTsKCmV4dGVy
biBzaXplX3QgbWJzdG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVy
biBzaXplX3Qgd2NzdG9tYnMoY2hhciAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CgoKCgpl
eHRlcm4gZG91YmxlIGRyYW5kNDgodm9pZCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCh1bnNpZ25l
ZCBzaG9ydCAqKTsKZXh0ZXJuIGxvbmcganJhbmQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJu
IHZvaWQgbGNvbmc0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJuIGxvbmcgbHJhbmQ0OCh2b2lk
KTsKZXh0ZXJuIGxvbmcgbXJhbmQ0OCh2b2lkKTsKZXh0ZXJuIGxvbmcgbnJhbmQ0OCh1bnNpZ25l
ZCBzaG9ydCAqKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0ICpzZWVkNDgodW5zaWduZWQgc2hvcnQg
Kik7CmV4dGVybiB2b2lkIHNyYW5kNDgobG9uZyk7CmV4dGVybiBpbnQgcHV0ZW52KGNvbnN0IGNo
YXIgKik7CmV4dGVybiB2b2lkIHNldGtleShjb25zdCBjaGFyICopOwoKCgoKCmV4dGVybiB2b2lk
IHN3YWIoY29uc3QgY2hhciAqLCBjaGFyICosIGludCk7CgoKCgpleHRlcm4gaW50CW1rc3RlbXAo
Y2hhciAqKTsKCgpleHRlcm4gaW50CW1rc3RlbXA2NChjaGFyICopOwoKCgoKCgpleHRlcm4gbG9u
ZyBhNjRsKGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICplY3Z0KGRvdWJsZSwgaW50LCBpbnQg
KiwgaW50ICopOwpleHRlcm4gY2hhciAqZmN2dChkb3VibGUsIGludCwgaW50ICosIGludCAqKTsK
ZXh0ZXJuIGNoYXIgKmdjdnQoZG91YmxlLCBpbnQsIGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0c3Vi
b3B0KGNoYXIgKiosIGNoYXIgKmNvbnN0ICosIGNoYXIgKiopOwpleHRlcm4gaW50ICBncmFudHB0
KGludCk7CmV4dGVybiBjaGFyICppbml0c3RhdGUodW5zaWduZWQsIGNoYXIgKiwgc2l6ZV90KTsK
ZXh0ZXJuIGNoYXIgKmw2NGEobG9uZyk7CmV4dGVybiBjaGFyICpta3RlbXAoY2hhciAqKTsKZXh0
ZXJuIGNoYXIgKnB0c25hbWUoaW50KTsKZXh0ZXJuIGxvbmcgcmFuZG9tKHZvaWQpOwpleHRlcm4g
Y2hhciAqcmVhbHBhdGgoY29uc3QgY2hhciAqLCBjaGFyICopOwpleHRlcm4gY2hhciAqc2V0c3Rh
dGUoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgc3JhbmRvbSh1bnNpZ25lZCk7CmV4dGVybiBp
bnQgdHR5c2xvdCh2b2lkKTsKZXh0ZXJuIGludCAgdW5sb2NrcHQoaW50KTsKZXh0ZXJuIHZvaWQg
KnZhbGxvYyhzaXplX3QpOwoKCgoKZXh0ZXJuIGludCBkdXAyKGludCwgaW50KTsKZXh0ZXJuIGNo
YXIgKnFlY3Z0KGxvbmcgZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpx
ZmN2dChsb25nIGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqcWdjdnQo
bG9uZyBkb3VibGUsIGludCwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmdldGN3ZChjaGFyICosIHNp
emVfdCk7CmV4dGVybiBjb25zdCBjaGFyICpnZXRleGVjbmFtZSh2b2lkKTsKZXh0ZXJuIGNoYXIg
KmdldGxvZ2luKHZvaWQpOwpleHRlcm4gaW50IGdldG9wdChpbnQsIGNoYXIgKmNvbnN0ICosIGNv
bnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpvcHRhcmc7CmV4dGVybiBpbnQgb3B0aW5kLCBvcHRl
cnIsIG9wdG9wdDsKZXh0ZXJuIGNoYXIgKmdldHBhc3MoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNo
YXIgKmdldHBhc3NwaHJhc2UoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBnZXRwdyh1aWRfdCwg
Y2hhciAqKTsKZXh0ZXJuIGludCBpc2F0dHkoaW50KTsKZXh0ZXJuIHZvaWQgKm1lbWFsaWduKHNp
emVfdCwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnR0eW5hbWUoaW50KTsKCgpleHRlcm4gbG9uZyBs
b25nIGF0b2xsKGNvbnN0IGNoYXIgKik7CmV4dGVybiBsb25nIGxvbmcgbGxhYnMobG9uZyBsb25n
KTsKZXh0ZXJuIGxsZGl2X3QgbGxkaXYobG9uZyBsb25nLCBsb25nIGxvbmcpOwpleHRlcm4gY2hh
ciAqbGx0b3N0cihsb25nIGxvbmcsIGNoYXIgKik7CmV4dGVybiBsb25nIGxvbmcgc3RydG9sbChj
b25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgc3Ry
dG91bGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4gY2hhciAqdWxsdG9zdHIo
dW5zaWduZWQgbG9uZyBsb25nLCBjaGFyICopOwoKCgoKIyAzNDkgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMyA0CgoKCn0KCgoKIyAxMzEgIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25kb3Jfc3lzdGVt
LmgiIDIKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMgNAogCiAKCiAKIAogCgog
CgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0cmluZy5oCTEuMTkJOTYvMDMvMTIgU01JIgkK
CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lkICos
IGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1lbW1vdmUodm9pZCAqLCBjb25z
dCB2b2lkICosIHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJjcHkoY2hhciAqLCBjb25zdCBjaGFy
ICopOwpleHRlcm4gY2hhciAqc3RybmNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsK
CmV4dGVybiBjaGFyICpzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAq
c3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKCmV4dGVybiBpbnQgbWVtY21w
KGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gaW50IHN0cmNtcChj
b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgc3RyY29sbChjb25zdCBjaGFy
ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgc3RybmNtcChjb25zdCBjaGFyICosIGNvbnN0
IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtKGNoYXIgKiwgY29uc3QgY2hh
ciAqLCBzaXplX3QpOwoKZXh0ZXJuIHZvaWQgKm1lbWNocihjb25zdCB2b2lkICosIGludCwgc2l6
ZV90KTsKZXh0ZXJuIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICosIGludCk7CmV4dGVybiBzaXpl
X3Qgc3RyY3Nwbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJw
YnJrKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cnJjaHIoY29u
c3QgY2hhciAqLCBpbnQpOwpleHRlcm4gc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosIGNvbnN0
IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJzdHIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICop
OwpleHRlcm4gY2hhciAqc3RydG9rKGNoYXIgKiwgY29uc3QgY2hhciAqKTsKCgpleHRlcm4gY2hh
ciAqc3RydG9rX3IoY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiopOwoKZXh0ZXJuIHZvaWQg
Km1lbXNldCh2b2lkICosIGludCwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnN0cmVycm9yKGludCk7
CmV4dGVybiBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7CgoKCmV4dGVybiB2b2lkICptZW1j
Y3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBpbnQsIHNpemVfdCk7CgoKCgpleHRlcm4gY2hhciAq
c3Ryc2lnbmFsKGludCk7CmV4dGVybiBpbnQgZmZzKGludCk7CmV4dGVybiBpbnQgc3RyY2FzZWNt
cChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgc3RybmNhc2VjbXAoY29u
c3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1
cChjb25zdCBjaGFyICopOwoKCiMgMTM2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNAoKCgp9
CgoKCiMgMTM1ICIuLi9jb25kb3JfaW5jbHVkZXMvY29uZG9yX3N5c3RlbS5oIiAyCgojIDEgIi91
c3IvaW5jbHVkZS9zdHJpbmdzLmgiIDEgMyA0CiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylz
dHJpbmdzLmgJMS4zCTk2LzAzLzEyIFNNSSIKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKCgpleHRl
cm4gaW50IGJjbXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiB2
b2lkIGJjb3B5KGNvbnN0IHZvaWQgKiwgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCBiemVy
byh2b2lkICosIHNpemVfdCk7CgpleHRlcm4gY2hhciAqaW5kZXgoY29uc3QgY2hhciAqLCBpbnQp
OwpleHRlcm4gY2hhciAqcmluZGV4KGNvbnN0IGNoYXIgKiwgaW50KTsKCiAKCgoKCgoKCgoKCgoK
CgoKIyA2MiAiL3Vzci9pbmNsdWRlL3N0cmluZ3MuaCIgMyA0CgoKCn0KCgoKIyAxMzYgIi4uL2Nv
bmRvcl9pbmNsdWRlcy9jb25kb3Jfc3lzdGVtLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9w
YXJhbS5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJh
Z21hIGlkZW50CSJAKCMpcGFyYW0uaAkxLjQ4CTk3LzA2LzI2IFNNSSIKCgoKCgoKCgpleHRlcm4g
IkMiIHsKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCQkJCSAKCQkJCSAKCQkJCSAK
CiAKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCiAKCgoK
CgoKIAoKCgoKIyAyNTggIi91c3IvaW5jbHVkZS9zeXMvcGFyYW0uaCIgMyA0CgoKCn0KCgogCgoK
CgojIDM4OCAiL3Vzci9pbmNsdWRlL3N5cy9wYXJhbS5oIiAzIDQKCgogCgoKCgoKCgoKCgpleHRl
cm4gIkMiIHsKCgoKZXh0ZXJuIGxvbmcgX3N5c2NvbmYoaW50KTsJIAoKCgoKCgoKCgp9CgoKCgoK
IyAxMzcgIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25kb3Jfc3lzdGVtLmgiIDIKCiMgMSAiL3Vzci9p
bmNsdWRlL3N5cy9maWxlLmgiIDEgMyA0CiAKIAoKIAogCiAKIAoKCgoKCgoKI3ByYWdtYSBpZGVu
dAkiQCgjKWZpbGUuaAkxLjQ5CTk3LzAzLzE0IFNNSSIJCgojIDEgIi91c3IvaW5jbHVkZS9zeXMv
dF9sb2NrLmgiIDEgMyA0CiAKCgoKCiAKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpdF9sb2Nr
LmgJMS40Mwk5Ny8wNC8wNCBTTUkiCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL21hY2hsb2NrLmgi
IDEgMyA0CiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIyltYWNobG9jay5oCTEuMTYJOTcvMDQv
MDQgU01JIgoKCgoKCmV4dGVybiAiQyIgewoKCgoKIyAzMCAiL3Vzci9pbmNsdWRlL3N5cy9tYWNo
bG9jay5oIiAzIDQKCgoKCgoKCnR5cGVkZWYJbG9ja190CWRpc3BfbG9ja190OwkJIAoKIAoKCgoK
CiAKCgoKCgoKCiAKCgoKZXh0ZXJuIHZvbGF0aWxlIGludCBocmVzX2xvY2s7CgoKCmV4dGVybiBo
cnRpbWVfdCBocnRpbWVfYmFzZTsKZXh0ZXJuIGhydGltZV90IGhyZXN0aW1lX2FkajsKZXh0ZXJu
IGludCBjbG9ja19yZXM7CgoKCgoKCiAKCgoKCgoKCgoKCgoKCgp9CgoKCiMgMTggIi91c3IvaW5j
bHVkZS9zeXMvdF9sb2NrLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2xlZXBxLmgi
IDEgMyA0CiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzbGVlcHEuaAkxLjE5CTk3LzA0LzA0
IFNNSSIKCgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgp0eXBlZGVmIHN0cnVjdCBzbGVlcHEgewoJ
c3RydWN0IF9rdGhyZWFkICpzcV9maXJzdDsKfSBzbGVlcHFfdDsKCiAKCgp0eXBlZGVmIHN0cnVj
dCBfc2xlZXBxX2hlYWQgewoJc2xlZXBxX3QJc3FfcXVldWU7CglkaXNwX2xvY2tfdAlzcV9sb2Nr
Owp9IHNsZWVwcV9oZWFkX3Q7CgojIDY5ICIvdXNyL2luY2x1ZGUvc3lzL3NsZWVwcS5oIiAzIDQK
CgoKfQoKCgoKIyAxOSAiL3Vzci9pbmNsdWRlL3N5cy90X2xvY2suaCIgMiAzIDQKCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy90dXJuc3RpbGUuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAki
QCgjKXR1cm5zdGlsZS5oCTEuMzAJOTcvMDQvMjMgU01JIgoKCgojIDEgIi91c3IvaW5jbHVkZS9z
eXMvcGlyZWMuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXBpcmVjLmgJMS4x
Mgk5Ny8wMy8xNCBTTUkiCgoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCgoKCgoKdHlw
ZWRlZiBzdHJ1Y3QgcGlyZWMKewoJc3RydWN0IHBpcmVjCSpwaV9mb3J3OwkgCglzdHJ1Y3QgcGly
ZWMJKnBpX2JhY2s7CSAKCXN0cnVjdCBfa3RocmVhZCAqcGlfYmVuZWY7CSAKCXVpbnRfdAkJcGlf
ZXByaV9oaTsJIAp9IHBpcmVjX3Q7CgojIDYwICIvdXNyL2luY2x1ZGUvc3lzL3BpcmVjLmgiIDMg
NAoKCgp9CgoKCiMgMTMgIi91c3IvaW5jbHVkZS9zeXMvdHVybnN0aWxlLmgiIDIgMyA0CgoKCgpl
eHRlcm4gIkMiIHsKCgoKCiAKCgoKCnR5cGVkZWYgZW51bSB7CglRT0JKX1VORAk9IC0xLAkgCglR
T0JKX0RFRgk9IDAsCSAKCVFPQkpfUkVBREVSCT0gMCwJIAoJUU9CSl9XUklURVIJPSAxLAkgCglR
T0JKX0NWCQk9IDAsCSAKCVFPQkpfTVVURVgJPSAwLAkgCglRT0JKX1NFTUEJPSAwCSAKfSBxb2Jq
X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgdHVybnN0aWxlCXR1cm5zdGlsZV90OwoKdHlwZWRlZiB1
c2hvcnRfdAkJdHVybnN0aWxlX2lkX3Q7CgpzdHJ1Y3QgdHVybnN0aWxlIHsKCXVuaW9uIHRzdGls
ZV91biB7CgkJIAoKCgoJCXR1cm5zdGlsZV90CSp0c19mb3J3OwoKCQkgCgoKCgoJCXBpcmVjX3QJ
CXRzX3ByaW9pbnY7Cgl9IHRzdW47CgoJIAoKCgoJc2xlZXBxX3QJdHNfc2xlZXBxWzIgXTsKCSAK
CgoKCgoJdHVybnN0aWxlX2lkX3QJdHNfaWQ7Cgl1Y2hhcl90CQl0c19mbGFnczsKCWRpc3BfbG9j
a190CXRzX3dsb2NrOwkgCgoJIAoKCgoKCXZvaWQJCSp0c19zb2JqX3ByaXZfZGF0YTsJIAp9OwoK
IyAxNTcgIi91c3IvaW5jbHVkZS9zeXMvdHVybnN0aWxlLmgiIDMgNAoKCgp9CgoKCiMgMjAgIi91
c3IvaW5jbHVkZS9zeXMvdF9sb2NrLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvbXV0
ZXguaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKW11dGV4LmgJMS4xNwk5Ny8w
NC8wNCBTTUkiCgoKCgoKCmV4dGVybiAiQyIgewoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
dHlwZWRlZiBlbnVtIHsKCU1VVEVYX0FEQVBUSVZFID0gMCwJIAoJTVVURVhfU1BJTiwJCSAKCU1V
VEVYX0FEQVBUSVZFX1NUQVQsCSAKCU1VVEVYX1NQSU5fU1RBVCwJIAoJTVVURVhfRFJJVkVSX05P
U1RBVCA9IDQsICAKCU1VVEVYX0RSSVZFUl9TVEFUID0gNSwJIAoJTVVURVhfQURBUFRJVkVfREVG
CSAKfSBrbXV0ZXhfdHlwZV90OwoKCgoKCiAKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBtdXRleCB7
Cgl2b2lkCSpfb3BhcXVlWzJdOwp9IGttdXRleF90OwoKCiMgMTI0ICIvdXNyL2luY2x1ZGUvc3lz
L211dGV4LmgiIDMgNAoKCgoKCn0KCgoKIyAyMSAiL3Vzci9pbmNsdWRlL3N5cy90X2xvY2suaCIg
MiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9yd2xvY2suaCIgMSAzIDQKIAoKCgoKIAoKCgoK
CgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXJ3bG9jay5oCTEuNQk5Ny8wNC8wNCBTTUkiCgoKCgpl
eHRlcm4gIkMiIHsKCgoKCnR5cGVkZWYgZW51bSB7CglSV19TTEVFUCwJCQkgCglSV19TTEVFUF9T
VEFULAkJCSAKCVJXX0RSSVZFUl9OT1NUQVQgPSAyLAkJIAoJUldfRFJJVkVSX1NUQVQgPSAzLAkJ
IAoJUldfREVGQVVMVAkJCSAKfSBrcndfdHlwZV90OwoKdHlwZWRlZiBlbnVtIHsKCVJXX1dSSVRF
UiwKCVJXX1JFQURFUgp9IGtyd190OwoKCgp0eXBlZGVmIHN0cnVjdCBfa3J3bG9jayB7Cgl2b2lk
CSpfb3BhcXVlWzNdOwp9IGtyd2xvY2tfdDsKCgojIDEwMiAiL3Vzci9pbmNsdWRlL3N5cy9yd2xv
Y2suaCIgMyA0CgoKCgoKfQoKCgojIDIyICIvdXNyL2luY2x1ZGUvc3lzL3RfbG9jay5oIiAyIDMg
NAoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbWFwaG9yZS5oIiAxIDMgNAogCgoKCiAKCgoKCgoK
CgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc2VtYXBob3JlLmgJMS40CTk0LzA3LzI5IFNNSSIKCgoK
CgoKCgoKZXh0ZXJuICJDIiB7CgoKCgogCgoKdHlwZWRlZiBlbnVtIHsKCVNFTUFfREVGQVVMVCwK
CVNFTUFfRFJJVkVSCn0ga3NlbWFfdHlwZV90OwoKdHlwZWRlZiBzdHJ1Y3QgX2tzZW1hIHsKCXZv
aWQJKiBfb3BhcXVlWzJdOwkgCn0ga3NlbWFfdDsKCiMgNTggIi91c3IvaW5jbHVkZS9zeXMvc2Vt
YXBob3JlLmgiIDMgNAoKCgoKfQoKCgojIDIzICIvdXNyL2luY2x1ZGUvc3lzL3RfbG9jay5oIiAy
IDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NvbmR2YXIuaCIgMSAzIDQKIAoKCgoKIAoKCgoK
CgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWNvbmR2YXIuaAkxLjgJOTcvMDMvMTQgU01JIgoKCgoK
CgoKCgpleHRlcm4gIkMiIHsKCgoKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgX2tjb25kdmFyIHsKCXVz
aG9ydF90CV9vcGFxdWU7Cn0ga2NvbmR2YXJfdDsKCnR5cGVkZWYJZW51bSB7CglDVl9ERUZBVUxU
LAoJQ1ZfRFJJVkVSCn0ga2N2X3R5cGVfdDsKCgojIDY0ICIvdXNyL2luY2x1ZGUvc3lzL2NvbmR2
YXIuaCIgMyA0CgoKCgoKfQoKCgojIDI0ICIvdXNyL2luY2x1ZGUvc3lzL3RfbG9jay5oIiAyIDMg
NAoKCgoKZXh0ZXJuICJDIiB7CgoKCgogCgoKCgoKCgoKCiMgODMgIi91c3IvaW5jbHVkZS9zeXMv
dF9sb2NrLmgiIDMgNAoKCgoKCn0KCgoKIyAxNyAiL3Vzci9pbmNsdWRlL3N5cy9maWxlLmgiIDIg
MyA0CgoKCgoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgogCgoKCgp0eXBlZGVmIHN0cnVj
dCBmaWxlIHsKCWttdXRleF90CWZfdGxvY2s7CSAKCXVzaG9ydF90CWZfZmxhZzsKCXVzaG9ydF90
CWZfcGFkOwkJIAoJc3RydWN0IHZub2RlCSpmX3Zub2RlOwkgCglvZmZzZXRfdAlmX29mZnNldDsJ
IAoJc3RydWN0IGNyZWQJKmZfY3JlZDsJIAoJY2FkZHJfdAkJZl9hdWRpdF9kYXRhOwkgCglpbnQJ
CWZfY291bnQ7CSAKfSBmaWxlX3Q7CgogCgoKCgoKCgoKCgoKCgkJCQkgCgkJCQkgCgkJCQkgCgkJ
CQkgCiAKCgkJCQkgCgkJCQkgCgoKCgkJCQkgCgogCgoKCgoKCgogCgoKCiAKCgoKCgojIDE0NCAi
L3Vzci9pbmNsdWRlL3N5cy9maWxlLmgiIDMgNAoKCiAKCgoKCgoKCiMgMTg0ICIvdXNyL2luY2x1
ZGUvc3lzL2ZpbGUuaCIgMyA0CgoKCn0KCgoKIyAxMzggIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25k
b3Jfc3lzdGVtLmgiIDIKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMSAzIDQKIAog
CgogCiAKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgj
KW5ldGRiLmgJMS4xOAk5Ni8wOS8yNCBTTUkiCgoKIyAxICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9p
bi5oIiAxIDMgNAogCgoKCiAKCgoKCgoKCgoKCgogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMp
aW4uaAkxLjEzCTk2LzExLzAxIFNNSSIKCiAKCgoKCgoKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Mv
Z2NjLTIuOTUuMi9zdW54ODZfNTYvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi42LzIuOTUu
Mi9pbmNsdWRlL3N5cy9zdHJlYW0uaCIgMSAzIDQKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9z
dHJlYW0uaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0
cmVhbS5oCTEuNzMJOTcvMDUvMjkgU01JIgkKCiAKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdm5v
ZGUuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKI3ByYWdt
YSBpZGVudAkiQCgjKXZub2RlLmgJMS43MAk5OC8wOC8xMyBTTUkiCgoKCgojIDEgIi91c3IvaW5j
bHVkZS9zeXMvY3JlZC5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgojcHJhZ21hIGlkZW50CSJAKCMpY3JlZC5oCTEuMjAJOTYvMTIvMDYgU01JIgkKCgoKCgoK
ZXh0ZXJuICJDIiB7CgoKIAoKCgoKCnR5cGVkZWYgc3RydWN0IGNyZWQgewoJdWludF90CWNyX3Jl
ZjsJCQkgCgl1aWRfdAljcl91aWQ7CQkJIAoJZ2lkX3QJY3JfZ2lkOwkJCSAKCXVpZF90CWNyX3J1
aWQ7CQkgCglnaWRfdAljcl9yZ2lkOwkJIAoJdWlkX3QJY3Jfc3VpZDsJCSAKCWdpZF90CWNyX3Nn
aWQ7CQkgCgl1bG9uZ190CWNyX25ncm91cHM7CQkgCglnaWRfdAljcl9ncm91cHNbMV07CQkgCn0g
Y3JlZF90OwoKIyA4OSAiL3Vzci9pbmNsdWRlL3N5cy9jcmVkLmgiIDMgNAoKCgp9CgoKCiMgMzkg
Ii91c3IvaW5jbHVkZS9zeXMvdm5vZGUuaCIgMiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvdm0v
c2VnX2VudW0uaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
I3ByYWdtYSBpZGVudAkiQCgjKXNlZ19lbnVtLmgJMS4zCTk1LzEyLzIyIFNNSSIKCgpleHRlcm4g
IkMiIHsKCgogCgoKCgogCgoKCgplbnVtIGZhdWx0X3R5cGUgewoJRl9JTlZBTCwJCSAKCUZfUFJP
VCwJCQkgCglGX1NPRlRMT0NLLAkJIAoJRl9TT0ZUVU5MT0NLCQkgCn07CgogCgoKZW51bSBsb2Nr
X3R5cGUgewoJTF9QQUdFTE9DSywJCSAKCUxfUEFHRVVOTE9DSywJCSAKCUxfUEFHRVJFQ0xBSU0J
CSAKfTsKCiAKCgplbnVtIHNlZ19ydyB7CglTX09USEVSLAkJIAoJU19SRUFELAkJCSAKCVNfV1JJ
VEUsCQkgCglTX0VYRUMsCQkJIAoJU19DUkVBVEUJCSAKfTsKCgp9CgoKCiMgNDIgIi91c3IvaW5j
bHVkZS9zeXMvdm5vZGUuaCIgMiAzIDQKCgoKCgoKZXh0ZXJuICJDIiB7CgoKCiAKCgoKCgogCgoK
CnR5cGVkZWYgZW51bSB2dHlwZSB7CglWTk9OCT0gMCwKCVZSRUcJPSAxLAoJVkRJUgk9IDIsCglW
QkxLCT0gMywKCVZDSFIJPSA0LAoJVkxOSwk9IDUsCglWRklGTwk9IDYsCglWRE9PUgk9IDcsCglW
UFJPQwk9IDgsCglWU09DSwk9IDksCglWQkFECT0gMTAKfSB2dHlwZV90OwoKIAoKCgoKCgoKCnR5
cGVkZWYgc3RydWN0IHZub2RlIHsKCWttdXRleF90CXZfbG9jazsJCQkgCgl1X3Nob3J0CQl2X2Zs
YWc7CQkJIAoJdV9sb25nCQl2X2NvdW50OwkJIAoJc3RydWN0IHZmcwkqdl92ZnNtb3VudGVkaGVy
ZTsJIAoJc3RydWN0IHZub2Rlb3BzCSp2X29wOwkJCSAKCXN0cnVjdCB2ZnMJKnZfdmZzcDsJCSAK
CXN0cnVjdCBzdGRhdGEJKnZfc3RyZWFtOwkJIAoJc3RydWN0IHBhZ2UJKnZfcGFnZXM7CQkgCgll
bnVtIHZ0eXBlCXZfdHlwZTsJCQkgCglkZXZfdAkJdl9yZGV2OwkJCSAKCWNhZGRyX3QJCXZfZGF0
YTsJCQkgCglzdHJ1Y3QgZmlsb2NrCSp2X2ZpbG9ja3M7CQkgCglzdHJ1Y3Qgc2hybG9ja2xpc3Qg
KnZfc2hybG9ja3M7CQkgCglrY29uZHZhcl90CXZfY3Y7CQkJIAp9IHZub2RlX3Q7CgogCgoKCgoK
CgoKCgoKCgogCgoKCgoKIAoKCgoKIAoKCgoKCiAKCgoKCgoKIAoKCgoKCiAKCgoKCgoKdHlwZWRl
ZiBzdHJ1Y3QgdmF0dHIgewoJbG9uZwkJdmFfbWFzazsJIAoJdnR5cGVfdAkJdmFfdHlwZTsJIAoJ
bW9kZV90CQl2YV9tb2RlOwkgCgl1aWRfdAkJdmFfdWlkOwkJIAoJZ2lkX3QJCXZhX2dpZDsJCSAK
CWRldl90CQl2YV9mc2lkOwkgCgl1X2xvbmdsb25nX3QJdmFfbm9kZWlkOwkgCglubGlua190CQl2
YV9ubGluazsJIAoJdV9vZmZzZXRfdAl2YV9zaXplOwkgCgl0aW1lc3RydWNfdAl2YV9hdGltZTsJ
IAoJdGltZXN0cnVjX3QJdmFfbXRpbWU7CSAKCXRpbWVzdHJ1Y190CXZhX2N0aW1lOwkgCglkZXZf
dAkJdmFfcmRldjsJIAoJdV9sb25nCQl2YV9ibGtzaXplOwkgCgl1X2xvbmdsb25nX3QJdmFfbmJs
b2NrczsJIAoJdV9sb25nCQl2YV92Y29kZTsJIAp9IHZhdHRyX3Q7CgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCiAKCgplbnVtIHJtCQl7
IFJNRklMRSwgUk1ESVJFQ1RPUlkgfTsJIAplbnVtIHN5bWZvbGxvdwl7IE5PX0ZPTExPVywgRk9M
TE9XIH07CQkgCmVudW0gdmNleGNsCXsgTk9ORVhDTCwgRVhDTCB9OwkJIAplbnVtIGNyZWF0ZQl7
IENSQ1JFQVQsIENSTUtOT0QsIENSTUtESVIsIENSQ09SRSB9OyAgCgp0eXBlZGVmIGVudW0gcm0J
CXJtX3Q7CnR5cGVkZWYgZW51bSBzeW1mb2xsb3cJc3ltZm9sbG93X3Q7CnR5cGVkZWYgZW51bSB2
Y2V4Y2wJdmNleGNsX3Q7CnR5cGVkZWYgZW51bSBjcmVhdGUJY3JlYXRlX3Q7CgogCgoKCnR5cGVk
ZWYgc3RydWN0IHZzZWNhdHRyIHsKCXVfbG9uZwkJdnNhX21hc2s7CSAKCWludAkJdnNhX2FjbGNu
dDsJIAoJdm9pZAkJKnZzYV9hY2xlbnRwOwkgCglpbnQJCXZzYV9kZmFjbGNudDsJIAoJdm9pZAkJ
KnZzYV9kZmFjbGVudHA7CSAKfSB2c2VjYXR0cl90OwoKIAoKCgoKCiAKCgpzdHJ1Y3QgcGF0aG5h
bWU7CnN0cnVjdCBmaWQ7CnN0cnVjdCBmbG9jazY0OwpzdHJ1Y3Qgc2hybG9jazsKc3RydWN0IHBh
Z2U7CnN0cnVjdCBzZWc7CnN0cnVjdCBhczsKc3RydWN0IHBvbGxoZWFkOwoKIAoKCnR5cGVkZWYg
c3RydWN0IHZub2Rlb3BzIHsKCWludAkoKnZvcF9vcGVuKShzdHJ1Y3Qgdm5vZGUgKiosIGludCwg
c3RydWN0IGNyZWQgKik7CglpbnQJKCp2b3BfY2xvc2UpKHN0cnVjdCB2bm9kZSAqLCBpbnQsIGlu
dCwgb2Zmc2V0X3QsIHN0cnVjdCBjcmVkICopOwoJaW50CSgqdm9wX3JlYWQpKHN0cnVjdCB2bm9k
ZSAqLCBzdHJ1Y3QgdWlvICosIGludCwgc3RydWN0IGNyZWQgKik7CglpbnQJKCp2b3Bfd3JpdGUp
KHN0cnVjdCB2bm9kZSAqLCBzdHJ1Y3QgdWlvICosIGludCwgc3RydWN0IGNyZWQgKik7CglpbnQJ
KCp2b3BfaW9jdGwpKHN0cnVjdCB2bm9kZSAqLCBpbnQsIGludHB0cl90LCBpbnQsIHN0cnVjdCBj
cmVkICosCgkJCWludCAqKTsKCWludAkoKnZvcF9zZXRmbCkoc3RydWN0IHZub2RlICosIGludCwg
aW50LCBzdHJ1Y3QgY3JlZCAqKTsKCWludAkoKnZvcF9nZXRhdHRyKShzdHJ1Y3Qgdm5vZGUgKiwg
c3RydWN0IHZhdHRyICosIGludCwKCQkJc3RydWN0IGNyZWQgKik7CglpbnQJKCp2b3Bfc2V0YXR0
cikoc3RydWN0IHZub2RlICosIHN0cnVjdCB2YXR0ciAqLCBpbnQsCgkJCXN0cnVjdCBjcmVkICop
OwoJaW50CSgqdm9wX2FjY2Vzcykoc3RydWN0IHZub2RlICosIGludCwgaW50LCBzdHJ1Y3QgY3Jl
ZCAqKTsKCWludAkoKnZvcF9sb29rdXApKHN0cnVjdCB2bm9kZSAqLCBjaGFyICosIHN0cnVjdCB2
bm9kZSAqKiwKCQkJc3RydWN0IHBhdGhuYW1lICosIGludCwgc3RydWN0IHZub2RlICosIHN0cnVj
dCBjcmVkICopOwoJaW50CSgqdm9wX2NyZWF0ZSkoc3RydWN0IHZub2RlICosIGNoYXIgKiwgc3Ry
dWN0IHZhdHRyICosCgkJCXZjZXhjbF90LCBpbnQsIHN0cnVjdCB2bm9kZSAqKiwgc3RydWN0IGNy
ZWQgKiwgaW50KTsKCWludAkoKnZvcF9yZW1vdmUpKHN0cnVjdCB2bm9kZSAqLCBjaGFyICosIHN0
cnVjdCBjcmVkICopOwoJaW50CSgqdm9wX2xpbmspKHN0cnVjdCB2bm9kZSAqLCBzdHJ1Y3Qgdm5v
ZGUgKiwgY2hhciAqLAoJCQlzdHJ1Y3QgY3JlZCAqKTsKCWludAkoKnZvcF9yZW5hbWUpKHN0cnVj
dCB2bm9kZSAqLCBjaGFyICosIHN0cnVjdCB2bm9kZSAqLCBjaGFyICosCgkJCXN0cnVjdCBjcmVk
ICopOwoJaW50CSgqdm9wX21rZGlyKShzdHJ1Y3Qgdm5vZGUgKiwgY2hhciAqLCBzdHJ1Y3QgdmF0
dHIgKiwKCQkJc3RydWN0IHZub2RlICoqLCBzdHJ1Y3QgY3JlZCAqKTsKCWludAkoKnZvcF9ybWRp
cikoc3RydWN0IHZub2RlICosIGNoYXIgKiwgc3RydWN0IHZub2RlICosCgkJCXN0cnVjdCBjcmVk
ICopOwoJaW50CSgqdm9wX3JlYWRkaXIpKHN0cnVjdCB2bm9kZSAqLCBzdHJ1Y3QgdWlvICosIHN0
cnVjdCBjcmVkICosCgkJCWludCAqKTsKCWludAkoKnZvcF9zeW1saW5rKShzdHJ1Y3Qgdm5vZGUg
KiwgY2hhciAqLCBzdHJ1Y3QgdmF0dHIgKiwgY2hhciAqLAoJCQlzdHJ1Y3QgY3JlZCAqKTsKCWlu
dAkoKnZvcF9yZWFkbGluaykoc3RydWN0IHZub2RlICosIHN0cnVjdCB1aW8gKiwgc3RydWN0IGNy
ZWQgKik7CglpbnQJKCp2b3BfZnN5bmMpKHN0cnVjdCB2bm9kZSAqLCBpbnQsIHN0cnVjdCBjcmVk
ICopOwoJdm9pZAkoKnZvcF9pbmFjdGl2ZSkoc3RydWN0IHZub2RlICosIHN0cnVjdCBjcmVkICop
OwoJaW50CSgqdm9wX2ZpZCkoc3RydWN0IHZub2RlICosIHN0cnVjdCBmaWQgKik7Cgl2b2lkCSgq
dm9wX3J3bG9jaykoc3RydWN0IHZub2RlICosIGludCk7Cgl2b2lkCSgqdm9wX3J3dW5sb2NrKShz
dHJ1Y3Qgdm5vZGUgKiwgaW50KTsKCWludAkoKnZvcF9zZWVrKShzdHJ1Y3Qgdm5vZGUgKiwgb2Zm
c2V0X3QsIG9mZnNldF90ICopOwoJaW50CSgqdm9wX2NtcCkoc3RydWN0IHZub2RlICosIHN0cnVj
dCB2bm9kZSAqKTsKCWludAkoKnZvcF9mcmxvY2spKHN0cnVjdCB2bm9kZSAqLCBpbnQsIHN0cnVj
dCBmbG9jazY0ICosIGludCwKCQkJb2Zmc2V0X3QsIHN0cnVjdCBjcmVkICopOwoJaW50CSgqdm9w
X3NwYWNlKShzdHJ1Y3Qgdm5vZGUgKiwgaW50LCBzdHJ1Y3QgZmxvY2s2NCAqLCBpbnQsCgkJCW9m
ZnNldF90LCBzdHJ1Y3QgY3JlZCAqKTsKCWludAkoKnZvcF9yZWFsdnApKHN0cnVjdCB2bm9kZSAq
LCBzdHJ1Y3Qgdm5vZGUgKiopOwoJaW50CSgqdm9wX2dldHBhZ2UpKHN0cnVjdCB2bm9kZSAqLCBv
ZmZzZXRfdCwgdV9pbnQsIHVfaW50ICosCgkJCXN0cnVjdCBwYWdlICoqLCB1X2ludCwgc3RydWN0
IHNlZyAqLCBjYWRkcl90LAoJCQllbnVtIHNlZ19ydywgc3RydWN0IGNyZWQgKik7CglpbnQJKCp2
b3BfcHV0cGFnZSkoc3RydWN0IHZub2RlICosIG9mZnNldF90LCB1X2ludCwgaW50LAoJCQlzdHJ1
Y3QgY3JlZCAqKTsKCWludAkoKnZvcF9tYXApKHN0cnVjdCB2bm9kZSAqLCBvZmZzZXRfdCwgc3Ry
dWN0IGFzICosIGNhZGRyX3QgKiwKCQkJdV9pbnQsIHVfY2hhciwgdV9jaGFyLCB1X2ludCwgc3Ry
dWN0IGNyZWQgKik7CglpbnQJKCp2b3BfYWRkbWFwKShzdHJ1Y3Qgdm5vZGUgKiwgb2Zmc2V0X3Qs
IHN0cnVjdCBhcyAqLCBjYWRkcl90LAoJCQl1X2ludCwgdV9jaGFyLCB1X2NoYXIsIHVfaW50LCBz
dHJ1Y3QgY3JlZCAqKTsKCWludAkoKnZvcF9kZWxtYXApKHN0cnVjdCB2bm9kZSAqLCBvZmZzZXRf
dCwgc3RydWN0IGFzICosIGNhZGRyX3QsCgkJCXVfaW50LCB1X2ludCwgdV9pbnQsIHVfaW50LCBz
dHJ1Y3QgY3JlZCAqKTsKCWludAkoKnZvcF9wb2xsKShzdHJ1Y3Qgdm5vZGUgKiwgc2hvcnQsIGlu
dCwgc2hvcnQgKiwKCQkJc3RydWN0IHBvbGxoZWFkICoqKTsKCWludAkoKnZvcF9kdW1wKShzdHJ1
Y3Qgdm5vZGUgKiwgY2FkZHJfdCwgaW50LCBpbnQpOwoJaW50CSgqdm9wX3BhdGhjb25mKShzdHJ1
Y3Qgdm5vZGUgKiwgaW50LCB1X2xvbmcgKiwgc3RydWN0IGNyZWQgKik7CglpbnQJKCp2b3BfcGFn
ZWlvKShzdHJ1Y3Qgdm5vZGUgKiwgc3RydWN0IHBhZ2UgKiwgdV9vZmZzZXRfdCwKCQl1X2ludCwg
aW50LCBzdHJ1Y3QgY3JlZCAqKTsKCWludAkoKnZvcF9kdW1wY3RsKShzdHJ1Y3Qgdm5vZGUgKiwg
aW50KTsKCXZvaWQJKCp2b3BfZGlzcG9zZSkoc3RydWN0IHZub2RlICosIHN0cnVjdCBwYWdlICos
IGludCwgaW50LAoJCQlzdHJ1Y3QgY3JlZCAqKTsKCWludAkoKnZvcF9zZXRzZWNhdHRyKShzdHJ1
Y3Qgdm5vZGUgKiwgdnNlY2F0dHJfdCAqLCBpbnQsCgkJCXN0cnVjdCBjcmVkICopOwoJaW50CSgq
dm9wX2dldHNlY2F0dHIpKHN0cnVjdCB2bm9kZSAqLCB2c2VjYXR0cl90ICosIGludCwKCQkJc3Ry
dWN0IGNyZWQgKik7CglpbnQJKCp2b3Bfc2hybG9jaykoc3RydWN0IHZub2RlICosIGludCwgc3Ry
dWN0IHNocmxvY2sgKiwgaW50KTsKfSB2bm9kZW9wc190OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoK
CiMgNDM5ICIvdXNyL2luY2x1ZGUvc3lzL3Zub2RlLmgiIDMgNAoKCgoKCgoKCgoKCgoKIyA0NjEg
Ii91c3IvaW5jbHVkZS9zeXMvdm5vZGUuaCIgMyA0CgogCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoK
CgojIDUwMSAiL3Vzci9pbmNsdWRlL3N5cy92bm9kZS5oIiAzIDQKCgogCgoKCiMgNTE1ICIvdXNy
L2luY2x1ZGUvc3lzL3Zub2RlLmgiIDMgNAoKCn0KCgoKIyAyMSAiL3Vzci9pbmNsdWRlL3N5cy9z
dHJlYW0uaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9wb2xsLmgiIDEgMyA0CiAKIAoK
IAogCiAKCiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylwb2xsLmgJMS4yNAk5Ny8wNC8xOCBT
TUkiCQoKCmV4dGVybiAiQyIgewoKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgcG9sbGZkIHsKCWludCBm
ZDsJCQkJIAoJc2hvcnQgZXZlbnRzOwkJCSAKCXNob3J0IHJldmVudHM7CQkJIAp9IHBvbGxmZF90
OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nCW5mZHNfdDsKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
IyA2NCAiL3Vzci9pbmNsdWRlL3N5cy9wb2xsLmgiIDMgNAoKCiMgMTQzICIvdXNyL2luY2x1ZGUv
c3lzL3BvbGwuaCIgMyA0CgoKCmludCBwb2xsKHN0cnVjdCBwb2xsZmQgKiwgbmZkc190LCBpbnQp
OwoKCgp9CgoKCiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvc3RyZWFtLmgiIDIgMyA0CgojIDEgIi91
c3IvaW5jbHVkZS9zeXMvc3RybWRlcC5oIiAxIDMgNAogCiAKCiAKIAogCgoKCgojcHJhZ21hIGlk
ZW50CSJAKCMpc3RybWRlcC5oCTEuOAk5Mi8wNy8xNCBTTUkiCQoKCmV4dGVybiAiQyIgewoKCiAK
CgoKCiAKCgoKCgogCgoKCgoKIAoKCgoKCgp9CgoKCiMgMjMgIi91c3IvaW5jbHVkZS9zeXMvc3Ry
ZWFtLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9tb2RlbC5oIiAxIDMgNAogCgoK
CgoKCgojcHJhZ21hIGlkZW50CSJAKCMpbW9kZWwuaAkxLjEJOTYvMDkvMjQgU01JIgoKCmV4dGVy
biAiQyIgewoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgp9CgoKCiMgMjYgIi91c3IvaW5jbHVkZS9z
eXMvc3RyZWFtLmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKdHlwZWRlZiBzdHJ1Y3QJX19zdHJlYW1fcXVldWUgIHsKCXN0cnVjdAlx
aW5pdAkqcV9xaW5mbzsJIAoJc3RydWN0CW1zZ2IJKnFfZmlyc3Q7CSAKCXN0cnVjdAltc2diCSpx
X2xhc3Q7CSAKCXN0cnVjdAlfX3N0cmVhbV9xdWV1ZSAJKnFfbmV4dDsJIAoJc3RydWN0CV9fc3Ry
ZWFtX3F1ZXVlIAkqcV9saW5rOwkgCgl2b2lkCQkqcV9wdHI7CQkgCglzaXplX3QJCXFfY291bnQ7
CSAKCXVpbnQJCXFfZmxhZzsJCSAKCXNzaXplX3QJCXFfbWlucHN6OwkgCgkJCQkJIAoJc3NpemVf
dAkJcV9tYXhwc3o7CSAKCQkJCQkgCglzaXplX3QJCXFfaGl3YXQ7CSAKCXNpemVfdAkJcV9sb3dh
dDsJIAoJc3RydWN0IHFiYW5kCSpxX2JhbmRwOwkgCglrbXV0ZXhfdAlxX2xvY2s7CQkgCglzdHJ1
Y3Qgc3RkYXRhIAkqcV9zdHJlYW07CSAKCXN0cnVjdAlzeW5jcQkqcV9zeW5jcTsJIAoJdW5zaWdu
ZWQgY2hhcglxX25iYW5kOwkgCglrY29uZHZhcl90CXFfd2FpdDsJCSAKCWtjb25kdmFyX3QJcV9z
eW5jOwkJIAoJc3RydWN0CV9fc3RyZWFtX3F1ZXVlIAkqcV9uZnNydjsJIAoJc3RydWN0CV9fc3Ry
ZWFtX3F1ZXVlIAkqcV9uYnNydjsJIAoJdXNob3J0CQlxX2RyYWluaW5nOwkgCglzaG9ydAkJcV9z
dHJ1aW90OwkgCgl1aW50CQlxX3N5bmNxbXNnczsJIAp9IHF1ZXVlX3Q7CgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoJCQkJCSAKCgoKCgoKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgcWJhbmQgewoJc3RydWN0
IHFiYW5kCSpxYl9uZXh0OwkgCglzaXplX3QJCXFiX2NvdW50OwkgCglzdHJ1Y3QgbXNnYgkqcWJf
Zmlyc3Q7CSAKCXN0cnVjdCBtc2diCSpxYl9sYXN0OwkgCglzaXplX3QJCXFiX2hpd2F0OwkgCglz
aXplX3QJCXFiX2xvd2F0OwkgCgl1aW50CQlxYl9mbGFnOwkgCn0gcWJhbmRfdDsKCiAKCgoKCgoK
IAoKCgoKIAoKCnR5cGVkZWYgZW51bSBxZmllbGRzIHsKCVFISVdBVAk9IDAsCQkgCglRTE9XQVQJ
PSAxLAkJIAoJUU1BWFBTWgk9IDIsCQkgCglRTUlOUFNaCT0gMywJCSAKCVFDT1VOVAk9IDQsCQkg
CglRRklSU1QJPSA1LAkJIAoJUUxBU1QJPSA2LAkJIAoJUUZMQUcJPSA3LAkJIAoJUVNUUlVJT1Qg
PSA4LAkJIAoJUUJBRAk9IDkKfSBxZmllbGRzX3Q7CgogCgoKc3RydWN0IG1vZHVsZV9pbmZvIHsK
CXVzaG9ydAltaV9pZG51bTsJCSAKCWNoYXIgCSptaV9pZG5hbWU7CQkgCglzc2l6ZV90CW1pX21p
bnBzejsJCSAKCXNzaXplX3QJbWlfbWF4cHN6OwkJIAoJc2l6ZV90CW1pX2hpd2F0OwkJIAoJc2l6
ZV90IAltaV9sb3dhdDsJCSAKfTsKCiAKCgpzdHJ1Y3QJcWluaXQgewoJaW50CSgqcWlfcHV0cCko
KTsJCSAKCWludAkoKnFpX3NydnApKCk7CQkgCglpbnQJKCpxaV9xb3BlbikoKTsJCSAKCWludAko
KnFpX3FjbG9zZSkoKTsJCSAKCWludAkoKnFpX3FhZG1pbikoKTsJCSAKCXN0cnVjdCBtb2R1bGVf
aW5mbyAqcWlfbWluZm87CSAKCXN0cnVjdCBtb2R1bGVfc3RhdCAqcWlfbXN0YXQ7CSAKCWludAko
KnFpX3J3cCkoKTsJCSAKCWludAkoKnFpX2luZm9wKSgpOwkJIAoJaW50CXFpX3N0cnVpb3Q7CQkg
Cn07CgogCgoKCgoKCgogCgoKCnN0cnVjdCBzdHJlYW10YWIgewoJc3RydWN0IHFpbml0ICpzdF9y
ZGluaXQ7CglzdHJ1Y3QgcWluaXQgKnN0X3dyaW5pdDsKCXN0cnVjdCBxaW5pdCAqc3RfbXV4cmlu
aXQ7CglzdHJ1Y3QgcWluaXQgKnN0X211eHdpbml0Owp9OwoKIAoKCgpzdHJ1Y3QgbGlua2JsayB7
CglxdWV1ZV90ICpsX3F0b3A7CSAKCQkJCSAKCXF1ZXVlX3QgKmxfcWJvdDsJIAoJaW50CWxfaW5k
ZXg7CSAKfTsKCiAKCgp0eXBlZGVmIHN0cnVjdCBmcmVlX3J0biB7Cgl2b2lkCSgqZnJlZV9mdW5j
KSgpOwoJY2FkZHJfdAlmcmVlX2FyZzsKfSBmcnRuX3Q7CgogCgoKCgoKdHlwZWRlZiBzdHJ1Y3Qg
ZGF0YWIgewoJZnJ0bl90CQkqZGJfZnJ0bnA7Cgl1bnNpZ25lZCBjaGFyCSpkYl9iYXNlOwoJdW5z
aWduZWQgY2hhcgkqZGJfbGltOwoJdW5zaWduZWQgY2hhcglkYl9yZWY7Cgl1bnNpZ25lZCBjaGFy
CWRiX3R5cGU7Cgl1bnNpZ25lZCBjaGFyCWRiX2ZsYWdzOwoJdW5zaWduZWQgY2hhcglkYl9zdHJ1
aW9mbGFnOwoJdm9pZAkJKmRiX2NhY2hlOwkgCglzdHJ1Y3QgbXNnYgkqZGJfbWJsazsKCXZvaWQJ
CSgqZGJfZnJlZSkoc3RydWN0IG1zZ2IgKiwgc3RydWN0IGRhdGFiICopOwoJdm9pZAkJKCpkYl9s
YXN0ZnJlZSkoc3RydWN0IG1zZ2IgKiwgc3RydWN0IGRhdGFiICopOwoJdm9pZAkJKmRiX3BhZDsJ
IAoJdW5zaWduZWQgY2hhcgkqZGJfc3RydWlvYmFzZTsKCXVuc2lnbmVkIGNoYXIJKmRiX3N0cnVp
b2xpbTsKCXVuc2lnbmVkIGNoYXIJKmRiX3N0cnVpb3B0cjsKCXVuaW9uIHsKCQlkb3VibGUgZW5m
b3JjZV9hbGlnbm1lbnQ7CgkJdW5zaWduZWQgY2hhciBkYXRhWzhdOwoJCXVuc2lnbmVkIHUxNjox
NjsJIAoJCSAKCgoJfSBkYl9zdHJ1aW91bjsKfSBkYmxrX3Q7CgogCgoKdHlwZWRlZiBzdHJ1Y3QJ
bXNnYiB7CglzdHJ1Y3QJbXNnYgkqYl9uZXh0OwoJc3RydWN0ICBtc2diCSpiX3ByZXY7CglzdHJ1
Y3QJbXNnYgkqYl9jb250OwoJdW5zaWduZWQgY2hhcgkqYl9ycHRyOwoJdW5zaWduZWQgY2hhcgkq
Yl93cHRyOwoJc3RydWN0IGRhdGFiIAkqYl9kYXRhcDsKCXVuc2lnbmVkIGNoYXIJYl9iYW5kOwoJ
dW5zaWduZWQgc2hvcnQJYl9mbGFnOwoJcXVldWVfdAkJKmJfcXVldWU7CSAKfSBtYmxrX3Q7Cgog
CgoKCgoKIAoKCgoKCgoKCiAKCgoKCgkJCQkJIAoKCgoKCiAKCgoKIAoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgoKCgogCgoKIyAzNzEgIi91c3IvaW5j
bHVkZS9zeXMvc3RyZWFtLmgiIDMgNAoKc3RydWN0IGlvY2JsayB7CglpbnQgCWlvY19jbWQ7CQkg
CgljcmVkX3QJKmlvY19jcjsJCSAKCXVpbnQJaW9jX2lkOwkJCSAKCXNpemVfdAlpb2NfY291bnQ7
CQkgCglpbnQJaW9jX2Vycm9yOwkJIAoJaW50CWlvY19ydmFsOwkJIAoJaW50CWlvY19maWxsMTsK
CXVpbnQJaW9jX2ZsYWc7CQkgCglpbnQJaW9jX2ZpbGxlclsyXTsJCSAKfTsKCgp0eXBlZGVmCXN0
cnVjdCBpb2NibGsJKklPQ1A7CgoKCgogCgoKCgoKCgogCgoKCgoKIAoKCiMgNDE3ICIvdXNyL2lu
Y2x1ZGUvc3lzL3N0cmVhbS5oIiAzIDQKCnN0cnVjdCBjb3B5cmVxIHsKCWludAljcV9jbWQ7CQkJ
IAoJY3JlZF90CSpjcV9jcjsJCQkgCgl1aW50CWNxX2lkOwkJCSAKCWNhZGRyX3QJY3FfYWRkcjsJ
CSAKCXNpemVfdAljcV9zaXplOwkJIAoJdWludAljcV9mbGFnOwkJIAoJbWJsa190CSpjcV9wcml2
YXRlOwkJIAoJaW50CWNxX2ZpbGxlcls0XTsJCSAKfTsKCgoKCgogCgoKCQkJCQkgCgoJCQkJCSAK
CQkJCQkgCgogCgoKIyA0NTQgIi91c3IvaW5jbHVkZS9zeXMvc3RyZWFtLmgiIDMgNAoKc3RydWN0
IGNvcHlyZXNwIHsKCWludAljcF9jbWQ7CQkJIAoJY3JlZF90CSpjcF9jcjsJCQkgCgl1aW50CWNw
X2lkOwkJCSAKCWNhZGRyX3QJY3BfcnZhbDsJCSAKCQkJCQkgCglzaXplX3QJY3BfcGFkMTsKCXVp
bnQJY3BfcGFkMjsKCW1ibGtfdCAqY3BfcHJpdmF0ZTsJCSAKCXVpbnQJY3BfZmxhZzsJCSAKCWlu
dAljcF9maWxsZXJbM107Cn07CgoKCgoKIAoKCgoKdW5pb24gaW9jdHlwZXMgewoJc3RydWN0IGlv
Y2Jsawlpb2NibGs7CglzdHJ1Y3QgY29weXJlcQljb3B5cmVxOwoJc3RydWN0IGNvcHlyZXNwCWNv
cHlyZXNwOwp9OwoKIAoKCgoKc3RydWN0IHN0cm9wdGlvbnMgewoJdWludAlzb19mbGFnczsJCSAK
CXNob3J0CXNvX3JlYWRvcHQ7CQkgCgl1c2hvcnQJc29fd3JvZmY7CQkgCglzc2l6ZV90CXNvX21p
bnBzejsJCSAKCXNzaXplX3QJc29fbWF4cHN6OwkJIAoJc2l6ZV90CXNvX2hpd2F0OwkJIAoJc2l6
ZV90CXNvX2xvd2F0OwkJIAoJdW5zaWduZWQgY2hhciBzb19iYW5kOwkJIAoJdXNob3J0CXNvX2Vy
cm9wdDsJCSAKCXNzaXplX3QJc29fbWF4YmxrOwkJIAoJdXNob3J0CXNvX2NvcHlvcHQ7CQkgCn07
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNTYxICIvdXNyL2luY2x1ZGUvc3lzL3N0cmVh
bS5oIiAzIDQKCgogCgoKCiAKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgogCgoKCgogCgoKCgoKIAoK
CgoKIAoKCgoKCiAKCgoKCgogCgoKCgogCgoKCgoKIAoKCgogCgoKCgoKCgogCgoKCgogCgoKCgoK
CiAKCgoKCgoKCgoKIAoKCgoKIAoKCgoKIAoKCgoKIAoKCgojIDc1MyAiL3Vzci9pbmNsdWRlL3N5
cy9zdHJlYW0uaCIgMyA0CgoKIAoKCmV4dGVybiBpbnQgbnN0cnB1c2g7CQkJIAoKCn0KCgoKIyA1
ICIvcy9nY2MtMi45NS4yL3N1bng4Nl81Ni9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjYv
Mi45NS4yL2luY2x1ZGUvc3lzL3N0cmVhbS5oIiAyIDMgNAoKCgoKCgojIDM4ICIvdXNyL2luY2x1
ZGUvbmV0aW5ldC9pbi5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2J5dGVvcmRlci5o
IiAxIDMgNAogCiAKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpYnl0ZW9yZGVyLmgJMS4x
MQk5Ni8wOS8wOCBTTUkiCQoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGluX3BvcnRfdDsKCgoKCnR5
cGVkZWYgdW5zaWduZWQgbG9uZyBpbl9hZGRyX3Q7CgoKCmV4dGVybgl1aW50MzJfdCBodG9ubCh1
aW50MzJfdCk7CmV4dGVybgl1aW50MTZfdCBodG9ucyh1aW50MTZfdCk7CmV4dGVybiAJdWludDMy
X3QgbnRvaGwodWludDMyX3QpOwpleHRlcm4JdWludDE2X3QgbnRvaHModWludDE2X3QpOwoKCgoK
CgoKCgp9CgoKCiMgMzkgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMyA0CgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
CgoKCiAKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCnN0
cnVjdCBpbl9hZGRyIHsKCXVuaW9uIHsKCQlzdHJ1Y3QgeyB1Y2hhcl90IHNfYjEsIHNfYjIsIHNf
YjMsIHNfYjQ7IH0gU191bl9iIDsKCQlzdHJ1Y3QgeyB1c2hvcnRfdCBzX3cxLCBzX3cyOyB9IFNf
dW5fdyA7CgoJCXVpbnQzMl90IFNfYWRkciA7CgoKCgl9IFNfdW4gOwoKCgoKCgp9OwoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgoKc3RydWN0
IHNvY2thZGRyX2luIHsKCXNhX2ZhbWlseV90CXNpbl9mYW1pbHk7Cglpbl9wb3J0X3QJc2luX3Bv
cnQ7CglzdHJ1Y3QJaW5fYWRkciBzaW5fYWRkcjsKCgljaGFyCQlzaW5femVyb1s4XTsKCgoKfTsK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKc3Ry
dWN0IGlwX21yZXEgewoJc3RydWN0IGluX2FkZHIJaW1yX211bHRpYWRkcjsJIAoJc3RydWN0IGlu
X2FkZHIJaW1yX2ludGVyZmFjZTsJIAp9OwoKCiAKCgoKCgoKCgoKCn0KCgoKIyA5NiAiL3Vzci9p
bmNsdWRlL25ldGRiLmgiIDIgMyA0CgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgoKc3RydWN0CWhv
c3RlbnQgewoJY2hhcgkqaF9uYW1lOwkgCgljaGFyCSoqaF9hbGlhc2VzOwkgCglpbnQJaF9hZGRy
dHlwZTsJIAoJaW50CWhfbGVuZ3RoOwkgCgljaGFyCSoqaF9hZGRyX2xpc3Q7CSAKCn07CgogCgoK
CnN0cnVjdAluZXRlbnQgewoJY2hhcgkJKm5fbmFtZTsJIAoJY2hhcgkJKipuX2FsaWFzZXM7CSAK
CWludAkJbl9hZGRydHlwZTsJIAoJaW5fYWRkcl90CW5fbmV0OwkJIAp9OwoKc3RydWN0CXByb3Rv
ZW50IHsKCWNoYXIJKnBfbmFtZTsJIAoJY2hhcgkqKnBfYWxpYXNlczsJIAoJaW50CXBfcHJvdG87
CSAKfTsKCnN0cnVjdAlzZXJ2ZW50IHsKCWNoYXIJKnNfbmFtZTsJIAoJY2hhcgkqKnNfYWxpYXNl
czsJIAoJaW50CXNfcG9ydDsJCSAKCWNoYXIJKnNfcHJvdG87CSAKfTsKCgoKc3RydWN0IGhvc3Rl
bnQJKmdldGhvc3RieW5hbWVfcgoJKGNvbnN0IGNoYXIgKiwgc3RydWN0IGhvc3RlbnQgKiwgY2hh
ciAqLCBpbnQsIGludCAqaF9lcnJub3ApOwpzdHJ1Y3QgaG9zdGVudAkqZ2V0aG9zdGJ5YWRkcl9y
CgkoY29uc3QgY2hhciAqLCBpbnQsIGludCwgc3RydWN0IGhvc3RlbnQgKiwgY2hhciAqLCBpbnQs
IGludCAqaF9lcnJub3ApOwpzdHJ1Y3QgaG9zdGVudAkqZ2V0aG9zdGVudF9yKHN0cnVjdCBob3N0
ZW50ICosIGNoYXIgKiwgaW50LCBpbnQgKmhfZXJybm9wKTsKCnN0cnVjdCBzZXJ2ZW50CSpnZXRz
ZXJ2YnluYW1lX3IKCShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICosIHN0cnVjdCBzZXJ2
ZW50ICosIGNoYXIgKiwgaW50KTsKc3RydWN0IHNlcnZlbnQJKmdldHNlcnZieXBvcnRfcgoJKGlu
dCBwb3J0LCBjb25zdCBjaGFyICosIHN0cnVjdCBzZXJ2ZW50ICosIGNoYXIgKiwgaW50KTsKc3Ry
dWN0IHNlcnZlbnQJKmdldHNlcnZlbnRfcihzdHJ1Y3QJc2VydmVudCAqLCBjaGFyICosIGludCk7
CgpzdHJ1Y3QgbmV0ZW50CSpnZXRuZXRieW5hbWVfcgoJKGNvbnN0IGNoYXIgKiwgc3RydWN0IG5l
dGVudCAqLCBjaGFyICosIGludCk7CnN0cnVjdCBuZXRlbnQJKmdldG5ldGJ5YWRkcl9yKGxvbmcs
IGludCwgc3RydWN0IG5ldGVudCAqLCBjaGFyICosIGludCk7CnN0cnVjdCBuZXRlbnQJKmdldG5l
dGVudF9yKHN0cnVjdCBuZXRlbnQgKiwgY2hhciAqLCBpbnQpOwoKc3RydWN0IHByb3RvZW50CSpn
ZXRwcm90b2J5bmFtZV9yCgkoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcHJvdG9lbnQgKiwgY2hhciAq
LCBpbnQpOwpzdHJ1Y3QgcHJvdG9lbnQJKmdldHByb3RvYnludW1iZXJfcgoJKGludCwgc3RydWN0
IHByb3RvZW50ICosIGNoYXIgKiwgaW50KTsKc3RydWN0IHByb3RvZW50CSpnZXRwcm90b2VudF9y
KHN0cnVjdCBwcm90b2VudCAqLCBjaGFyICosIGludCk7CgppbnQgZ2V0bmV0Z3JlbnRfcihjaGFy
ICoqLCBjaGFyICoqLCBjaGFyICoqLCBjaGFyICosIGludCk7CmludCBpbm5ldGdyKGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKIApzdHJ1
Y3QgaG9zdGVudAkqZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICopOwpzdHJ1Y3QgaG9zdGVudAkq
Z2V0aG9zdGVudCh2b2lkKTsKCnN0cnVjdCBuZXRlbnQJKmdldG5ldGJ5YWRkcihsb25nLCBpbnQp
OwoKCgpzdHJ1Y3QgbmV0ZW50CSpnZXRuZXRieW5hbWUoY29uc3QgY2hhciAqKTsKc3RydWN0IG5l
dGVudAkqZ2V0bmV0ZW50KHZvaWQpOwpzdHJ1Y3QgcHJvdG9lbnQJKmdldHByb3RvYnluYW1lKGNv
bnN0IGNoYXIgKik7CnN0cnVjdCBwcm90b2VudAkqZ2V0cHJvdG9ieW51bWJlcihpbnQpOwpzdHJ1
Y3QgcHJvdG9lbnQJKmdldHByb3RvZW50KHZvaWQpOwpzdHJ1Y3Qgc2VydmVudAkqZ2V0c2VydmJ5
bmFtZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CnN0cnVjdCBzZXJ2ZW50CSpnZXRzZXJ2
Ynlwb3J0KGludCwgY29uc3QgY2hhciAqKTsKc3RydWN0IHNlcnZlbnQJKmdldHNlcnZlbnQodm9p
ZCk7CgppbnQJCSBnZXRuZXRncmVudChjaGFyICoqLCBjaGFyICoqLCBjaGFyICoqKTsKc3RydWN0
IGhvc3RlbnQJKmdldGhvc3RieWFkZHIoY29uc3QgY2hhciAqLCBpbnQsIGludCk7CgoKCgoKaW50
IGVuZGhvc3RlbnQodm9pZCk7CmludCBlbmRuZXRlbnQodm9pZCk7CmludCBlbmRwcm90b2VudCh2
b2lkKTsKaW50IGVuZHNlcnZlbnQodm9pZCk7CmludCBzZXRob3N0ZW50KGludCk7CmludCBzZXRu
ZXRlbnQoaW50KTsKaW50IHNldHByb3RvZW50KGludCk7CmludCBzZXRzZXJ2ZW50KGludCk7CiMg
MjEzICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMyA0CgoKCmludCBzZXRuZXRncmVudChjb25zdCBj
aGFyICopOwppbnQgZW5kbmV0Z3JlbnQodm9pZCk7CmludCByY21kKGNoYXIgKiosIHVuc2lnbmVk
IHNob3J0LAoJY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50ICop
OwppbnQgcmV4ZWMoY2hhciAqKiwgdW5zaWduZWQgc2hvcnQsCgljb25zdCBjaGFyICosIGNvbnN0
IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQgKik7CmludCBycmVzdnBvcnQoaW50ICopOwppbnQg
cnVzZXJvayhjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwog
CnN0cnVjdCBob3N0ZW50CSpnZXRob3N0YnluYW1lMihjb25zdCBjaGFyICosIGludCk7CnZvaWQJ
CWhlcnJvcihjb25zdCBjaGFyICopOwpjb25zdCBjaGFyCSpoc3RyZXJyb3IoaW50KTsKIAoKIyAy
ODAgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAzIDQKCgogCgoKCgpleHRlcm4gIGludCBoX2Vycm5v
OwoKCgoKCgoKCgogCgoKIAoKCgoKCgoKCn0KCgoKIyAxNDQgIi4uL2NvbmRvcl9pbmNsdWRlcy9j
b25kb3Jfc3lzdGVtLmgiIDIKCgojIDEgIi91c3IvaW5jbHVkZS9hcnBhL2luZXQuaCIgMSAzIDQK
IAogCgogCiAKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgj
KWluZXQuaAkxLjkJOTYvMDcvMTIgU01JIgkKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoK
ZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2FkZHIoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGluX2FkZHJf
dCBpbmV0X2xuYW9mKHN0cnVjdCBpbl9hZGRyKTsKZXh0ZXJuIHN0cnVjdCBpbl9hZGRyIGluZXRf
bWFrZWFkZHIoaW5fYWRkcl90LCBpbl9hZGRyX3QpOwpleHRlcm4gaW5fYWRkcl90IGluZXRfbmV0
b2Yoc3RydWN0IGluX2FkZHIpOwpleHRlcm4gaW5fYWRkcl90IGluZXRfbmV0d29yayhjb25zdCBj
aGFyICopOwpleHRlcm4gY2hhciAqaW5ldF9udG9hKHN0cnVjdCBpbl9hZGRyKTsKCgoKCgoKCgoK
Cn0KCgoKIyAxNDYgIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25kb3Jfc3lzdGVtLmgiIDIKCgoKIyAx
ICIvcy9nY2MtMi45NS4yL3N1bng4Nl81Ni9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjYv
Mi45NS4yL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiAKCgogCgoKCgoKIAojIDEgIi9zL2djYy0y
Ljk1LjIvc3VueDg2XzU2L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNi8yLjk1LjIvaW5j
bHVkZS9zeXNsaW1pdHMuaCIgMSAzIDQKIAoKCgoKCiMgMSAiL3MvZ2NjLTIuOTUuMi9zdW54ODZf
NTYvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi42LzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5o
IiAxIDMgNAogCgoKIAoKIyAxMTQgIi9zL2djYy0yLjk1LjIvc3VueDg2XzU2L2xpYi9nY2MtbGli
L2kzODYtcGMtc29sYXJpczIuNi8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIgMyA0CgoKCiMgMSAi
L3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgojcHJhZ21h
IGlkZW50CSJAKCMpbGltaXRzLmgJMS4zNQk5Ny8wMi8yNSBTTUkiCQoKCgoKIAoKCgoKCgoKCgoj
IDEgIi91c3IvaW5jbHVkZS9zeXMvaW50X2xpbWl0cy5oIiAxIDMgNAogCgoKCgoKCgojcHJhZ21h
IGlkZW50CSJAKCMpaW50X2xpbWl0cy5oCTEuMwk5Ni8wOS8yMyBTTUkiCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoK
CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp9CgoKCiMgMzEgIi91c3Iv
aW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKCgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgkJCQkJIAoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoJCQkJIAoKCgoKCgoKCgoKCgoKCgoKCQkJCQkJIAoK
CQkJCQkJIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgpleHRlcm4gbG9uZyBfc3lzY29uZihpbnQpOwkgCgoK
CgoKfQoKCgojIDExNyAiL3MvZ2NjLTIuOTUuMi9zdW54ODZfNTYvbGliL2djYy1saWIvaTM4Ni1w
Yy1zb2xhcmlzMi42LzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAoKCgoKIyA3ICIvcy9n
Y2MtMi45NS4yL3N1bng4Nl81Ni9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjYvMi45NS4y
L2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0CgoKIyAxMSAiL3MvZ2NjLTIuOTUuMi9zdW54ODZf
NTYvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi42LzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5o
IiAyIDMgNAoKCgoKCiAKCgoKIAoKCgogCgoKCgogCgoKCgoKIAoKCgogCgoKCgoKCgoKCgoKCiAK
CiAKCgoKCiAKCgoKIAoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoK
CiAKCgoKCgoKIAoKCgoKCgoKCgojIDE0OSAiLi4vY29uZG9yX2luY2x1ZGVzL2NvbmRvcl9zeXN0
ZW0uaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzIDQKIAogCgogCiAKIAoKCgoK
I3ByYWdtYSBpZGVudAkiQCgjKWN0eXBlLmgJMS4yOAk5Ni8wOC8yMSBTTUkiCQoKCgoKZXh0ZXJu
ICJDIiB7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBpc2FsbnVtKGludCk7
CmV4dGVybiBpbnQgaXNhbHBoYShpbnQpOwpleHRlcm4gaW50IGlzY250cmwoaW50KTsKZXh0ZXJu
IGludCBpc2RpZ2l0KGludCk7CmV4dGVybiBpbnQgaXNncmFwaChpbnQpOwpleHRlcm4gaW50IGlz
bG93ZXIoaW50KTsKZXh0ZXJuIGludCBpc3ByaW50KGludCk7CmV4dGVybiBpbnQgaXNwdW5jdChp
bnQpOwpleHRlcm4gaW50IGlzc3BhY2UoaW50KTsKZXh0ZXJuIGludCBpc3VwcGVyKGludCk7CmV4
dGVybiBpbnQgaXN4ZGlnaXQoaW50KTsKZXh0ZXJuIGludCB0b2xvd2VyKGludCk7CmV4dGVybiBp
bnQgdG91cHBlcihpbnQpOwoKCgoKZXh0ZXJuIGludCBpc2FzY2lpKGludCk7CmV4dGVybiBpbnQg
dG9hc2NpaShpbnQpOwpleHRlcm4gaW50IF90b2xvd2VyKGludCk7CmV4dGVybiBpbnQgX3RvdXBw
ZXIoaW50KTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIJX19jdHlwZVtdOwpleHRlcm4gdW5zaWdu
ZWQgaW50CSpfX2N0eXBlX21hc2s7CmV4dGVybiBsb25nCQkqX190cmFuc191cHBlcjsKZXh0ZXJu
IGxvbmcJCSpfX3RyYW5zX2xvd2VyOwoKIAoKCgoKCgoKCgoKIyA5NiAiL3Vzci9pbmNsdWRlL2N0
eXBlLmgiIDMgNAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTU1ICIvdXNy
L2luY2x1ZGUvY3R5cGUuaCIgMyA0CgoKCn0KCgoKIyAxNTAgIi4uL2NvbmRvcl9pbmNsdWRlcy9j
b25kb3Jfc3lzdGVtLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDEgMyA0CiAKIAoK
IAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylmY250bC5oCTEuMTIJOTYvMDYvMTcgU01JIgkK
CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mY250bC5oIiAxIDMgNAogCiAKCiAKIAogCgog
CgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylmY250bC5oCTEuMzcJOTYvMDcvMDcgU01JIgkKCgoK
CgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoKCgoKCgoJCQkJIAoKCgoKCgoKCgogCgoKCgoK
CgogCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgkJCQkg
CgogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCiAKdHlwZWRlZiBzdHJ1Y3QgZmxv
Y2sgewoJc2hvcnQJbF90eXBlOwoJc2hvcnQJbF93aGVuY2U7CglvZmZfdAlsX3N0YXJ0OwoJb2Zm
X3QJbF9sZW47CQkgCglsb25nCWxfc3lzaWQ7CglwaWRfdAlsX3BpZDsKCWxvbmcJbF9wYWRbNF07
CQkgCn0gZmxvY2tfdDsKCiAKCnR5cGVkZWYgc3RydWN0IGZsb2NrNjQgewoJc2hvcnQJbF90eXBl
OwoJc2hvcnQJbF93aGVuY2U7CglvZmY2NF90CWxfc3RhcnQ7CglvZmY2NF90CWxfbGVuOwkJIAoJ
bG9uZwlsX3N5c2lkOwoJcGlkX3QJbF9waWQ7Cglsb25nCWxfcGFkWzRdOwkJIAp9IGZsb2NrNjRf
dDsKCgojIDE3NCAiL3Vzci9pbmNsdWRlL3N5cy9mY250bC5oIiAzIDQKCgogCgoKCgoKCgogCgoK
CgoKCiAKCgoKCgoKCiAKCgp0eXBlZGVmIHN0cnVjdCBmc2hhcmUgewoJc2hvcnQJZl9hY2Nlc3M7
CglzaG9ydAlmX2Rlbnk7Cglsb25nCWZfaWQ7Cn0gZnNoYXJlX3Q7CgogCgoKCgoKCiAKCgoKCgoK
CgoKCn0KCgoKIyAxOSAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDIgMyA0CgoKCmV4dGVybiAiQyIg
ewoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKIAojIDUzICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMyA0
CgoKCgpleHRlcm4gaW50IGZjbnRsKGludCwgaW50LCAuLi4pOwpleHRlcm4gaW50IG9wZW4oY29u
c3QgY2hhciAqLCBpbnQsIC4uLik7CmV4dGVybiBpbnQgY3JlYXQoY29uc3QgY2hhciAqLCBtb2Rl
X3QpOwoKCmV4dGVybiBpbnQgZGlyZWN0aW8oaW50LCBpbnQpOwoKCiAKCgpleHRlcm4gaW50IG9w
ZW42NChjb25zdCBjaGFyICosIGludCwgLi4uKTsKZXh0ZXJuIGludCBjcmVhdDY0KGNvbnN0IGNo
YXIgKiwgbW9kZV90KTsKCgojIDg5ICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMyA0CgoKCn0KCgoK
IyAxNTEgIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25kb3Jfc3lzdGVtLmgiIDIKCiMgMSAiL3Vzci9p
bmNsdWRlL2Vycm5vLmgiIDEgMyA0CiAKIAoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIyll
cnJuby5oCTEuMTQJOTUvMTAvMzAgU01JIgkKCiAKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2Vy
cm5vLmgiIDEgMyA0CiAKIAoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIyllcnJuby5oCTEu
MTYJOTUvMDcvMDQgU01JIgkKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCSAK
CgoKCgoKCgoKCgkJCQkgCgoKCSAKCgoKCQkJCSAKCgoKCgogCgoKCgoKCgoKCgogCgoKCgp9CgoK
CiMgMTcgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKCgoKCgoK
CmV4dGVybiBpbnQgZXJybm87CgoKCn0KCgoKIyAxNTIgIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25k
b3Jfc3lzdGVtLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL3B3ZC5oIiAxIDMgNAogCiAKCiAKIAog
CgogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpcHdkLmgJMS4xOQk5Ni8wMy8xMiBTTUkiCQoK
CgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCnN0cnVjdCBwYXNzd2QgewoJY2hhcgkqcHdfbmFtZTsK
CWNoYXIJKnB3X3Bhc3N3ZDsKCXVpZF90CXB3X3VpZDsKCWdpZF90CXB3X2dpZDsKCWNoYXIJKnB3
X2FnZTsKCWNoYXIJKnB3X2NvbW1lbnQ7CgljaGFyCSpwd19nZWNvczsKCWNoYXIJKnB3X2RpcjsK
CWNoYXIJKnB3X3NoZWxsOwp9OwoKCgpzdHJ1Y3QgY29tbWVudCB7CgljaGFyCSpjX2RlcHQ7Cglj
aGFyCSpjX25hbWU7CgljaGFyCSpjX2FjY3Q7CgljaGFyCSpjX2JpbjsKfTsKCgoKCmV4dGVybiBz
dHJ1Y3QgcGFzc3dkICpnZXRwd3VpZCh1aWRfdCk7CQkgCmV4dGVybiBzdHJ1Y3QgcGFzc3dkICpn
ZXRwd25hbShjb25zdCBjaGFyICopOwkgCgoKCmV4dGVybiBzdHJ1Y3QgcGFzc3dkICpnZXRwd2Vu
dF9yKHN0cnVjdCBwYXNzd2QgKiwgY2hhciAqLCBpbnQpOwpleHRlcm4gc3RydWN0IHBhc3N3ZCAq
ZmdldHB3ZW50X3IoRklMRSAqLCBzdHJ1Y3QgcGFzc3dkICosIGNoYXIgKiwgaW50KTsKZXh0ZXJu
IHN0cnVjdCBwYXNzd2QgKmZnZXRwd2VudChGSUxFICopOwkgCmV4dGVybiBpbnQgcHV0cHdlbnQo
Y29uc3Qgc3RydWN0IHBhc3N3ZCAqLCBGSUxFICopOwoKCgoKCmV4dGVybiB2b2lkIGVuZHB3ZW50
KHZvaWQpOwpleHRlcm4gc3RydWN0IHBhc3N3ZCAqZ2V0cHdlbnQodm9pZCk7CQkgCmV4dGVybiB2
b2lkIHNldHB3ZW50KHZvaWQpOwoKCiMgOTYgIi91c3IvaW5jbHVkZS9wd2QuaCIgMyA0CgoKIAoK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxNjYgIi91c3IvaW5jbHVk
ZS9wd2QuaCIgMyA0CgoKZXh0ZXJuIHN0cnVjdCBwYXNzd2QgKmdldHB3dWlkX3IodWlkX3QsIHN0
cnVjdCBwYXNzd2QgKiwgY2hhciAqLCBpbnQpOwpleHRlcm4gc3RydWN0IHBhc3N3ZCAqZ2V0cHdu
YW1fcihjb25zdCBjaGFyICosIHN0cnVjdCBwYXNzd2QgKiwgY2hhciAqLCBpbnQpOwoKCgojIDIx
NSAiL3Vzci9pbmNsdWRlL3B3ZC5oIiAzIDQKCgoKCgp9CgoKCiMgMTUzICIuLi9jb25kb3JfaW5j
bHVkZXMvY29uZG9yX3N5c3RlbS5oIiAyCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lcy5o
IiAxIDMgNAogCiAKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpdGltZXMuaAkxLjkJOTIv
MDgvMTggU01JIgkKCgoKCmV4dGVybiAiQyIgewoKCiAKCgpzdHJ1Y3QgdG1zIHsKCWNsb2NrX3QJ
dG1zX3V0aW1lOwkJIAoJY2xvY2tfdAl0bXNfc3RpbWU7CQkgCgljbG9ja190CXRtc19jdXRpbWU7
CQkgCgljbG9ja190CXRtc19jc3RpbWU7CQkgCn07CgoKCmNsb2NrX3QgdGltZXMoc3RydWN0IHRt
cyAqKTsKCgoKCgoKfQoKCgojIDE1NiAiLi4vY29uZG9yX2luY2x1ZGVzL2NvbmRvcl9zeXN0ZW0u
aCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvcnBjL3R5cGVzLmgiIDEgMyA0CiAKCgoKCgoKI3ByYWdt
YSBpZGVudAkiQCgjKXR5cGVzLmgJMS4yMQk5Ny8wNC8wNyBTTUkiCgogCgogCgoKCgoKZXh0ZXJu
ICJDIiB7CgoKdHlwZWRlZiBpbnQgYm9vbF90Owp0eXBlZGVmIGludCBlbnVtX3Q7CgogCgoKCnR5
cGVkZWYgdV9sb25nbG9uZ190IHVsb25nbG9uZ190OwoKCgoKCgoKCgoKCgoKCgoKCgojIDcyICIv
dXNyL2luY2x1ZGUvcnBjL3R5cGVzLmgiIDMgNAoKCiMgODIgIi91c3IvaW5jbHVkZS9ycGMvdHlw
ZXMuaCIgMyA0CgoKIAoKCmV4dGVybiBjb25zdCBjaGFyIF9fbnNsX2RvbVtdOwoKCgoKCgp9CgoK
CgoKIyAxNTcgIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25kb3Jfc3lzdGVtLmgiIDIKCiMgMSAiL3Vz
ci9pbmNsdWRlL3ZhbHVlcy5oIiAxIDMgNAogCiAKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJA
KCMpdmFsdWVzLmgJMS4xNAk5Ny8wMi8xMyBTTUkiCQoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoK
IAoKCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCn0KCgoKIyAx
NTggIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25kb3Jfc3lzdGVtLmgiIDIKCiMgMSAiL3MvZ2NjLTIu
OTUuMi9zdW54ODZfNTYvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi42LzIuOTUuMi9pbmNs
dWRlL21hdGguaCIgMSAzIDQKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMSAzIDQKIAoK
CgoKCgoKZXh0ZXJuICJDIiB7CgoKI3ByYWdtYSBpZGVudAkiQCgjKW1hdGguaAkyLjYJOTcvMDYv
MDUiCgoKCgoKCgoKCgoKIAoKCnR5cGVkZWYgdW5pb24gX2hfdmFsIHsKICAJdW5zaWduZWQgbG9u
ZyBfaVtzaXplb2YoZG91YmxlKSAvIHNpemVvZih1bnNpZ25lZCBsb25nKV07Cglkb3VibGUgX2Q7
Cn0gX2hfdmFsOwoKCmV4dGVybiBjb25zdCBfaF92YWwgX19odWdlX3ZhbDsKCgoKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IHNpZ25nYW07CgoKCgogCgoKZW51bSB2ZXJzaW9uIHts
aWJtX2llZWUgPSAtMSwgY19pc3N1ZV80LCBhbnNpXzEsIHN0cmljdF9hbnNpfTsKCgpleHRlcm4g
Y29uc3QgZW51bSB2ZXJzaW9uIF9saWJfdmVyc2lvbjsKCgoKCnN0cnVjdCBfX21hdGhfZXhjZXB0
aW9uICB7CglpbnQgdHlwZTsKCWNoYXIgKm5hbWU7Cglkb3VibGUgYXJnMTsKCWRvdWJsZSBhcmcy
OwoJZG91YmxlIHJldHZhbDsKfTsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgpleHRl
cm4gZG91YmxlIGFjb3MgIChkb3VibGUpICA7CmV4dGVybiBkb3VibGUgYXNpbiAgKGRvdWJsZSkg
IDsKZXh0ZXJuIGRvdWJsZSBhdGFuICAoZG91YmxlKSAgOwpleHRlcm4gZG91YmxlIGF0YW4yICAo
ZG91YmxlLCBkb3VibGUpICA7CmV4dGVybiBkb3VibGUgY29zICAoZG91YmxlKSAgOwpleHRlcm4g
ZG91YmxlIHNpbiAgKGRvdWJsZSkgIDsKZXh0ZXJuIGRvdWJsZSB0YW4gIChkb3VibGUpICA7Cgpl
eHRlcm4gZG91YmxlIGNvc2ggIChkb3VibGUpICA7CmV4dGVybiBkb3VibGUgc2luaCAgKGRvdWJs
ZSkgIDsKZXh0ZXJuIGRvdWJsZSB0YW5oICAoZG91YmxlKSAgOwoKZXh0ZXJuIGRvdWJsZSBleHAg
IChkb3VibGUpICA7CmV4dGVybiBkb3VibGUgZnJleHAgIChkb3VibGUsIGludCAqKSAgOwpleHRl
cm4gZG91YmxlIGxkZXhwICAoZG91YmxlLCBpbnQpICA7CmV4dGVybiBkb3VibGUgbG9nICAoZG91
YmxlKSAgOwpleHRlcm4gZG91YmxlIGxvZzEwICAoZG91YmxlKSAgOwpleHRlcm4gZG91YmxlIG1v
ZGYgIChkb3VibGUsIGRvdWJsZSAqKSAgOwoKZXh0ZXJuIGRvdWJsZSBwb3cgIChkb3VibGUsIGRv
dWJsZSkgIDsKZXh0ZXJuIGRvdWJsZSBzcXJ0ICAoZG91YmxlKSAgOwoKZXh0ZXJuIGRvdWJsZSBj
ZWlsICAoZG91YmxlKSAgOwpleHRlcm4gZG91YmxlIGZhYnMgIChkb3VibGUpICA7CmV4dGVybiBk
b3VibGUgZmxvb3IgIChkb3VibGUpICA7CmV4dGVybiBkb3VibGUgZm1vZCAgKGRvdWJsZSwgZG91
YmxlKSAgOwoKCgogCgoKZXh0ZXJuIGRvdWJsZSBlcmYgIChkb3VibGUpICA7CmV4dGVybiBkb3Vi
bGUgZXJmYyAgKGRvdWJsZSkgIDsKZXh0ZXJuIGRvdWJsZSBnYW1tYSAgKGRvdWJsZSkgIDsKZXh0
ZXJuIGRvdWJsZSBoeXBvdCAgKGRvdWJsZSwgZG91YmxlKSAgOwpleHRlcm4gaW50IGlzbmFuICAo
ZG91YmxlKSAgOwpleHRlcm4gZG91YmxlIGowICAoZG91YmxlKSAgOwpleHRlcm4gZG91YmxlIGox
ICAoZG91YmxlKSAgOwpleHRlcm4gZG91YmxlIGpuICAoaW50LCBkb3VibGUpICA7CmV4dGVybiBk
b3VibGUgbGdhbW1hICAoZG91YmxlKSAgOwpleHRlcm4gZG91YmxlIHkwICAoZG91YmxlKSAgOwpl
eHRlcm4gZG91YmxlIHkxICAoZG91YmxlKSAgOwpleHRlcm4gZG91YmxlIHluICAoaW50LCBkb3Vi
bGUpICA7CgoKCiAKCgpleHRlcm4gZG91YmxlIGFjb3NoICAoZG91YmxlKSAgOwpleHRlcm4gZG91
YmxlIGFzaW5oICAoZG91YmxlKSAgOwpleHRlcm4gZG91YmxlIGF0YW5oICAoZG91YmxlKSAgOwpl
eHRlcm4gZG91YmxlIGNicnQgIChkb3VibGUpICA7CmV4dGVybiBkb3VibGUgbG9nYiAgKGRvdWJs
ZSkgIDsKZXh0ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIgIChkb3VibGUsIGRvdWJsZSkgIDsKZXh0ZXJu
IGRvdWJsZSByZW1haW5kZXIgIChkb3VibGUsIGRvdWJsZSkgIDsKZXh0ZXJuIGRvdWJsZSBzY2Fs
YiAgKGRvdWJsZSwgZG91YmxlKSAgOwoKIAoKCmV4dGVybiBkb3VibGUgZXhwbTEgIChkb3VibGUp
ICA7CmV4dGVybiBpbnQgaWxvZ2IgIChkb3VibGUpICA7CmV4dGVybiBkb3VibGUgbG9nMXAgIChk
b3VibGUpICA7CmV4dGVybiBkb3VibGUgcmludCAgKGRvdWJsZSkgIDsKCgoKIAoKCmV4dGVybiBp
bnQgbWF0aGVyciAgKHN0cnVjdCBfX21hdGhfZXhjZXB0aW9uICAqKSAgOwoKIAoKCmV4dGVybiBk
b3VibGUgc2lnbmlmaWNhbmQgIChkb3VibGUpICA7CgogCgoKZXh0ZXJuIGRvdWJsZSBjb3B5c2ln
biAgKGRvdWJsZSwgZG91YmxlKSAgOwpleHRlcm4gZG91YmxlIHNjYWxibiAgKGRvdWJsZSwgaW50
KSAgOwoKIAoKCgoKCgoKCiAKCgpleHRlcm4gZmxvYXQgbW9kZmYgIChmbG9hdCwgZmxvYXQgKikg
IDsKCiMgMSAiL3Vzci9pbmNsdWRlL2Zsb2F0aW5ncG9pbnQuaCIgMSAzIDQKIAogCgogCiAKIAoK
CgoKCmV4dGVybiAiQyIgewoKCiNwcmFnbWEgaWRlbnQJIkAoIylmbG9hdGluZ3BvaW50LmgJMi40
IDk0LzA2LzA5IgoKIAoKCgoKIAoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvaWVl
ZWZwLmgiIDEgMyA0CiAKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWllZWVmcC5oCTIuNyA5NC8x
MS8wOSIKCgpleHRlcm4gIkMiIHsKCgogCgoKIyA0NyAiL3Vzci9pbmNsdWRlL3N5cy9pZWVlZnAu
aCIgMyA0CgoKCmVudW0gZnBfZGlyZWN0aW9uX3R5cGUgewkgCglmcF9uZWFyZXN0CT0gMCwKCWZw
X25lZ2F0aXZlCT0gMSwKCWZwX3Bvc2l0aXZlCT0gMiwKCWZwX3RvemVybwk9IDMKfTsKCmVudW0g
ZnBfcHJlY2lzaW9uX3R5cGUgewkgCglmcF9zaW5nbGUJPSAwLAoJZnBfcHJlY2lzaW9uXzMJPSAx
LAoJZnBfZG91YmxlCT0gMiwKCWZwX2V4dGVuZGVkCT0gMwp9OwoKZW51bSBmcF9leGNlcHRpb25f
dHlwZSB7CSAKCWZwX2ludmFsaWQJPSAwLAoJZnBfZGVub3JtYWxpemVkCT0gMSwKCWZwX2Rpdmlz
aW9uCT0gMiwKCWZwX292ZXJmbG93CT0gMywKCWZwX3VuZGVyZmxvdwk9IDQsCglmcF9pbmV4YWN0
CT0gNQp9OwoKZW51bSBmcF90cmFwX2VuYWJsZV90eXBlIHsJIAoJZnBfdHJhcF9pbnZhbGlkCT0g
MCwKCWZwX3RyYXBfZGVub3JtYWxpemVkCT0gMSwKCWZwX3RyYXBfZGl2aXNpb24JPSAyLAoJZnBf
dHJhcF9vdmVyZmxvdwk9IDMsCglmcF90cmFwX3VuZGVyZmxvdwk9IDQsCglmcF90cmFwX2luZXhh
Y3QJPSA1Cn07CgoKIyAxMjIgIi91c3IvaW5jbHVkZS9zeXMvaWVlZWZwLmgiIDMgNAoKCmVudW0g
ZnBfY2xhc3NfdHlwZSB7CQkgCglmcF96ZXJvCQk9IDAsCglmcF9zdWJub3JtYWwJPSAxLAoJZnBf
bm9ybWFsCT0gMiwKCWZwX2luZmluaXR5ICAgCT0gMywKCWZwX3F1aWV0CT0gNCwKCWZwX3NpZ25h
bGluZwk9IDUKfTsKCgp9CgoKCiMgMzUgIi91c3IvaW5jbHVkZS9mbG9hdGluZ3BvaW50LmgiIDIg
MyA0CgoKCgoKCgoKCgp0eXBlZGVmIGludCBzaWdmcGVfY29kZV90eXBlOwkgCgp0eXBlZGVmIHZv
aWQgKCpzaWdmcGVfaGFuZGxlcl90eXBlKSgpOwkgCgoKCgoKZXh0ZXJuIHNpZ2ZwZV9oYW5kbGVy
X3R5cGUgc2lnZnBlICAoc2lnZnBlX2NvZGVfdHlwZSwgc2lnZnBlX2hhbmRsZXJfdHlwZSkgIDsK
CiAKCgp0eXBlZGVmIGZsb2F0IHNpbmdsZTsJCQkKCgoKdHlwZWRlZiB1bnNpZ25lZCBleHRlbmRl
ZFszXTsKCgp0eXBlZGVmIGxvbmcgZG91YmxlIHF1YWRydXBsZTsJIAoKdHlwZWRlZiB1bnNpZ25l
ZCBmcF9leGNlcHRpb25fZmllbGRfdHlwZTsKCQkJCSAKCgoKIAoKCgoKdHlwZWRlZiBjaGFyIGRl
Y2ltYWxfc3RyaW5nWzUxMiBdOwkKCQkJCSAKCnR5cGVkZWYgc3RydWN0IHsKCWVudW0gZnBfY2xh
c3NfdHlwZSBmcGNsYXNzOwoJaW50CXNpZ247CglpbnQJZXhwb25lbnQ7CglkZWNpbWFsX3N0cmlu
ZyBkczsJIAoKCglpbnQJbW9yZTsJCSAKCgoJaW50IAluZGlnaXRzOwkgCgoKfSBkZWNpbWFsX3Jl
Y29yZDsKCmVudW0gZGVjaW1hbF9mb3JtIHsKCWZpeGVkX2Zvcm0sCQkgCgoKCWZsb2F0aW5nX2Zv
cm0JCSAKCn07Cgp0eXBlZGVmIHN0cnVjdCB7CgllbnVtIGZwX2RpcmVjdGlvbl90eXBlIHJkOwkK
CQkJCSAKCWVudW0gZGVjaW1hbF9mb3JtIGRmOwkgCgoJaW50IG5kaWdpdHM7CQkgCn0gZGVjaW1h
bF9tb2RlOwoKZW51bSBkZWNpbWFsX3N0cmluZ19mb3JtIHsJIAoJaW52YWxpZF9mb3JtLAkJIAoJ
d2hpdGVzcGFjZV9mb3JtLAkgCglmaXhlZF9pbnRfZm9ybSwJCSAKCWZpeGVkX2ludGRvdF9mb3Jt
LAkgCglmaXhlZF9kb3RmcmFjX2Zvcm0sCSAKCWZpeGVkX2ludGRvdGZyYWNfZm9ybSwJIAoJZmxv
YXRpbmdfaW50X2Zvcm0sCSAJCglmbG9hdGluZ19pbnRkb3RfZm9ybSwJIAoJZmxvYXRpbmdfZG90
ZnJhY19mb3JtLAkgCglmbG9hdGluZ19pbnRkb3RmcmFjX2Zvcm0sIAoJaW5mX2Zvcm0sCQkgCglp
bmZpbml0eV9mb3JtLAkJIAoJbmFuX2Zvcm0sCQkgCgluYW5zdHJpbmdfZm9ybQkJIAp9OwoKZXh0
ZXJuIHZvaWQgc2luZ2xlX3RvX2RlY2ltYWwgIChzaW5nbGUgKiwgZGVjaW1hbF9tb2RlICosIGRl
Y2ltYWxfcmVjb3JkICosCgkJCQlmcF9leGNlcHRpb25fZmllbGRfdHlwZSAqKSAgOwpleHRlcm4g
dm9pZCBkb3VibGVfdG9fZGVjaW1hbCAgKGRvdWJsZSAqLCBkZWNpbWFsX21vZGUgKiwgZGVjaW1h
bF9yZWNvcmQgKiwKCQkJCWZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopICA7CmV4dGVybiB2b2lk
IGV4dGVuZGVkX3RvX2RlY2ltYWwgIChleHRlbmRlZCAqLCBkZWNpbWFsX21vZGUgKiwKCQkJCWRl
Y2ltYWxfcmVjb3JkICosIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopICA7CmV4dGVybiB2b2lk
IHF1YWRydXBsZV90b19kZWNpbWFsICAocXVhZHJ1cGxlICosIGRlY2ltYWxfbW9kZSAqLAoJCQkJ
ZGVjaW1hbF9yZWNvcmQgKiwgZnBfZXhjZXB0aW9uX2ZpZWxkX3R5cGUgKikgIDsKCmV4dGVybiB2
b2lkIGRlY2ltYWxfdG9fc2luZ2xlICAoc2luZ2xlICosIGRlY2ltYWxfbW9kZSAqLCBkZWNpbWFs
X3JlY29yZCAqLAoJCQkJZnBfZXhjZXB0aW9uX2ZpZWxkX3R5cGUgKikgIDsKZXh0ZXJuIHZvaWQg
ZGVjaW1hbF90b19kb3VibGUgIChkb3VibGUgKiwgZGVjaW1hbF9tb2RlICosIGRlY2ltYWxfcmVj
b3JkICosCgkJCQlmcF9leGNlcHRpb25fZmllbGRfdHlwZSAqKSAgOwpleHRlcm4gdm9pZCBkZWNp
bWFsX3RvX2V4dGVuZGVkICAoZXh0ZW5kZWQgKiwgZGVjaW1hbF9tb2RlICosCgkJCQlkZWNpbWFs
X3JlY29yZCAqLCBmcF9leGNlcHRpb25fZmllbGRfdHlwZSAqKSAgOwpleHRlcm4gdm9pZCBkZWNp
bWFsX3RvX3F1YWRydXBsZSAgKHF1YWRydXBsZSAqLCBkZWNpbWFsX21vZGUgKiwKCQkJCWRlY2lt
YWxfcmVjb3JkICosIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopICA7CgpleHRlcm4gdm9pZCBz
dHJpbmdfdG9fZGVjaW1hbCAgKGNoYXIgKiosIGludCwgaW50LCBkZWNpbWFsX3JlY29yZCAqLAoJ
CQkJZW51bSBkZWNpbWFsX3N0cmluZ19mb3JtICosIGNoYXIgKiopICA7CmV4dGVybiB2b2lkIGZ1
bmNfdG9fZGVjaW1hbCAgKGNoYXIgKiosIGludCwgaW50LCBkZWNpbWFsX3JlY29yZCAqLAoJCQkJ
ZW51bSBkZWNpbWFsX3N0cmluZ19mb3JtICosIGNoYXIgKiosCgkJCQlpbnQgKCopKHZvaWQpLCBp
bnQgKiwgaW50ICgqKShpbnQpKSAgOwpleHRlcm4gdm9pZCBmaWxlX3RvX2RlY2ltYWwgIChjaGFy
ICoqLCBpbnQsIGludCwgZGVjaW1hbF9yZWNvcmQgKiwKCQkJCWVudW0gZGVjaW1hbF9zdHJpbmdf
Zm9ybSAqLCBjaGFyICoqLAoJCQkJRklMRSAqLCBpbnQgKikgIDsKCmV4dGVybiBjaGFyICpzZWNv
bnZlcnQgIChzaW5nbGUgKiwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKikgIDsKZXh0ZXJuIGNo
YXIgKnNmY29udmVydCAgKHNpbmdsZSAqLCBpbnQsIGludCAqLCBpbnQgKiwgY2hhciAqKSAgOwpl
eHRlcm4gY2hhciAqc2djb252ZXJ0ICAoc2luZ2xlICosIGludCwgaW50LCBjaGFyICopICA7CmV4
dGVybiBjaGFyICplY29udmVydCAgKGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKikg
IDsKZXh0ZXJuIGNoYXIgKmZjb252ZXJ0ICAoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKiwgY2hh
ciAqKSAgOwpleHRlcm4gY2hhciAqZ2NvbnZlcnQgIChkb3VibGUsIGludCwgaW50LCBjaGFyICop
ICA7CmV4dGVybiBjaGFyICpxZWNvbnZlcnQgIChxdWFkcnVwbGUgKiwgaW50LCBpbnQgKiwgaW50
ICosIGNoYXIgKikgIDsKZXh0ZXJuIGNoYXIgKnFmY29udmVydCAgKHF1YWRydXBsZSAqLCBpbnQs
IGludCAqLCBpbnQgKiwgY2hhciAqKSAgOwpleHRlcm4gY2hhciAqcWdjb252ZXJ0ICAocXVhZHJ1
cGxlICosIGludCwgaW50LCBjaGFyICopICA7CgpleHRlcm4gY2hhciAqZWN2dCAgKGRvdWJsZSwg
aW50LCBpbnQgKiwgaW50ICopICA7CmV4dGVybiBjaGFyICpmY3Z0ICAoZG91YmxlLCBpbnQsIGlu
dCAqLCBpbnQgKikgIDsKZXh0ZXJuIGNoYXIgKmdjdnQgIChkb3VibGUsIGludCwgY2hhciAqKSAg
OwoKIAoKCgpleHRlcm4gZG91YmxlIGF0b2YgIChjb25zdCBjaGFyICopICA7CmV4dGVybiBkb3Vi
bGUgc3RydG9kICAoY29uc3QgY2hhciAqLCBjaGFyICoqKSAgOwoKCn0KCgoKIyAyMTIgIi91c3Iv
aW5jbHVkZS9tYXRoLmgiIDIgMyA0CgoKCgoKfQoKCgojIDUgIi9zL2djYy0yLjk1LjIvc3VueDg2
XzU2L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNi8yLjk1LjIvaW5jbHVkZS9tYXRoLmgi
IDIgMyA0CgoKCgoKCiMgMTU5ICIuLi9jb25kb3JfaW5jbHVkZXMvY29uZG9yX3N5c3RlbS5oIiAy
CgojIDEgIi91c3IvaW5jbHVkZS91dGltZS5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgojcHJh
Z21hIGlkZW50CSJAKCMpdXRpbWUuaAkxLjgJOTIvMDcvMTQgU01JIgkKCiMgMSAiL3Vzci9pbmNs
dWRlL3N5cy91dGltZS5oIiAxIDMgNAogCiAKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMp
dXRpbWUuaAkxLjgJOTIvMDcvMTQgU01JIgkKCgoKCmV4dGVybiAiQyIgewoKCiAKc3RydWN0IHV0
aW1idWYgewoJdGltZV90IGFjdGltZTsJCSAKCXRpbWVfdCBtb2R0aW1lOwkJIAp9OwoKCn0KCgoK
IyAxNSAiL3Vzci9pbmNsdWRlL3V0aW1lLmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewoKCgpleHRl
cm4gaW50IHV0aW1lKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHV0aW1idWYgKik7CgoKCgoK
fQoKCgojIDE2MCAiLi4vY29uZG9yX2luY2x1ZGVzL2NvbmRvcl9zeXN0ZW0uaCIgMgoKCgoKCgoK
CgoKIyAzNCAiLi4vY29uZG9yX2luY2x1ZGVzL2NvbmRvcl9jb21tb24uaCIgMgoKCiAKCgoKIyAx
ICIuLi9jb25kb3JfaW5jbHVkZXMvY29uZG9yX21hY3Jvcy5oIiAxCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIyA0MCAiLi4vY29uZG9yX2luY2x1ZGVzL2NvbmRvcl9jb21tb24u
aCIgMgoKCgoKCiMgMSAiL3AvY29uZG9yL3dvcmtzcGFjZXMvZ2xvYnVzL2luY2x1ZGUvZ3NzYXBp
LmgiIDEKIAoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIyAxICIvcy9nY2Mt
Mi45NS4yL3N1bng4Nl81Ni9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjYvMi45NS4yL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMyA0CgoKCgoKCiAKCgoKCgoKCiAKCiAKCgoKCiAKCgogCgoKCgoK
IAoKCiMgNjEgIi9zL2djYy0yLjk1LjIvc3VueDg2XzU2L2xpYi9nY2MtbGliL2kzODYtcGMtc29s
YXJpczIuNi8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKIAoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQgcHRy
ZGlmZl90OwoKCgoKCgoKCgogCgoKCgogCgogCgoKCiMgMTg3ICIvcy9nY2MtMi45NS4yL3N1bng4
Nl81Ni9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjYvMi45NS4yL2luY2x1ZGUvc3RkZGVm
LmgiIDMgNAoKCgoKCgogCgoKCgogCgoKCiMgMjY4ICIvcy9nY2MtMi45NS4yL3N1bng4Nl81Ni9s
aWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjYvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMg
NAoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCAgd2ludF90OwoKCgoKIAoKIAoKIyAz
MTcgIi9zL2djYy0yLjk1LjIvc3VueDg2XzU2L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIu
Ni8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoK
CgojIDM2ICIvcC9jb25kb3Ivd29ya3NwYWNlcy9nbG9idXMvaW5jbHVkZS9nc3NhcGkuaCIgMgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgogCgoKCiAKCgogCgoKCnR5cGVk
ZWYgdm9pZCAqIGdzc19uYW1lX3QgOwp0eXBlZGVmIHZvaWQgKiBnc3NfY3R4X2lkX3QgOwp0eXBl
ZGVmIHZvaWQgKiBnc3NfY3JlZF9pZF90IDsKIAoKIAoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgZ3NzX3VpbnQzMjsKCgoKCgoKIyAxMDMgIi9wL2NvbmRvci93b3Jrc3BhY2VzL2dsb2J1cy9p
bmNsdWRlL2dzc2FwaS5oIgoKCiAKCgp0eXBlZGVmIGdzc191aW50MzIgT01fdWludDMyOwp0eXBl
ZGVmIHN0cnVjdCBnc3NfT0lEX2Rlc2Nfc3RydWN0IHsKICBPTV91aW50MzIgbGVuZ3RoOwogIHZv
aWQgKmVsZW1lbnRzOwp9IGdzc19PSURfZGVzYywgKmdzc19PSUQ7CgoKCnR5cGVkZWYgc3RydWN0
IGdzc19PSURfc2V0X2Rlc2Nfc3RydWN0ICB7CiAgc2l6ZV90ICAgICBjb3VudDsKICBnc3NfT0lE
ICAgIGVsZW1lbnRzOwp9IGdzc19PSURfc2V0X2Rlc2MsICpnc3NfT0lEX3NldDsKCgogCgoKdHlw
ZWRlZiBPTV91aW50MzIgZ3NzX3FvcF90OwoKdHlwZWRlZiBpbnQgZ3NzX2NyZWRfdXNhZ2VfdDsK
Cgp0eXBlZGVmIHN0cnVjdCBnc3NfYnVmZmVyX2Rlc2Nfc3RydWN0IHsKICBzaXplX3QgbGVuZ3Ro
OwogIHZvaWQgKnZhbHVlOwp9IGdzc19idWZmZXJfZGVzYywgKmdzc19idWZmZXJfdDsKCnR5cGVk
ZWYgc3RydWN0IGdzc19jaGFubmVsX2JpbmRpbmdzX3N0cnVjdCB7CiAgT01fdWludDMyIGluaXRp
YXRvcl9hZGRydHlwZTsKICBnc3NfYnVmZmVyX2Rlc2MgaW5pdGlhdG9yX2FkZHJlc3M7CiAgT01f
dWludDMyIGFjY2VwdG9yX2FkZHJ0eXBlOwogIGdzc19idWZmZXJfZGVzYyBhY2NlcHRvcl9hZGRy
ZXNzOwogIGdzc19idWZmZXJfZGVzYyBhcHBsaWNhdGlvbl9kYXRhOwp9ICpnc3NfY2hhbm5lbF9i
aW5kaW5nc190OwoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoK
CgoKIAoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoKCmV4dGVybiBnc3NfT0lEIEdTU19DX05U
X1VTRVJfTkFNRTsKCiAKCgoKCgoKCgoKCmV4dGVybiBnc3NfT0lEIEdTU19DX05UX01BQ0hJTkVf
VUlEX05BTUU7CgogCgoKCgoKCgoKCgpleHRlcm4gZ3NzX09JRCBHU1NfQ19OVF9TVFJJTkdfVUlE
X05BTUU7CgogCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gZ3NzX09JRCBHU1NfQ19OVF9IT1NUQkFT
RURfU0VSVklDRV9YOwoKIAoKCgoKCgoKCgoKZXh0ZXJuIGdzc19PSUQgR1NTX0NfTlRfSE9TVEJB
U0VEX1NFUlZJQ0U7CgoKIAoKCgoKCgoKCgpleHRlcm4gZ3NzX09JRCBHU1NfQ19OVF9BTk9OWU1P
VVM7CgogCgoKCgoKCgoKCmV4dGVybiBnc3NfT0lEIEdTU19DX05UX0VYUE9SVF9OQU1FOwoKIAoK
CgogCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKIAoKCgogCgoKCgoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCiAKT01fdWludDMyIAogICBnc3NfYWNxdWlyZV9j
cmVkICAKKE9NX3VpbnQzMiAqLCAgICAgICAgICAgICAgCiBjb25zdCBnc3NfbmFtZV90LCAgICAg
ICAgIAogT01fdWludDMyLCAgICAgICAgICAgICAgICAKIGNvbnN0IGdzc19PSURfc2V0LCAgICAg
ICAgCiBnc3NfY3JlZF91c2FnZV90LCAgICAgICAgIAogZ3NzX2NyZWRfaWRfdCAqLCAgICAgICAg
ICAKIGdzc19PSURfc2V0ICosICAgICAgICAgICAgCiBPTV91aW50MzIgKiAgICAgICAgICAgICAg
IAogKTsKCiAKT01fdWludDMyIAogICBnc3NfcmVsZWFzZV9jcmVkICAKKE9NX3VpbnQzMiAqLCAg
ICAgICAgICAgICAgCiBnc3NfY3JlZF9pZF90ICogICAgICAgICAgIAogKTsKCiAKT01fdWludDMy
IAogICBnc3NfaW5pdF9zZWNfY29udGV4dCAgCihPTV91aW50MzIgKiwgICAgICAgICAgICAgIAog
Y29uc3QgZ3NzX2NyZWRfaWRfdCwgICAgICAKIGdzc19jdHhfaWRfdCAqLCAgICAgICAgICAgCiBj
b25zdCBnc3NfbmFtZV90LCAgICAgICAgIAogY29uc3QgZ3NzX09JRCwgICAgICAgICAgICAKIE9N
X3VpbnQzMiwgICAgICAgICAgICAgICAgCiBPTV91aW50MzIsICAgICAgICAgICAgICAgIAogY29u
c3QgZ3NzX2NoYW5uZWxfYmluZGluZ3NfdCwgIAogY29uc3QgZ3NzX2J1ZmZlcl90LCAgICAgICAK
IGdzc19PSUQgKiwgICAgICAgICAgICAgICAgCiBnc3NfYnVmZmVyX3QsICAgICAgICAgICAgIAog
T01fdWludDMyICosICAgICAgICAgICAgICAKIE9NX3VpbnQzMiAqICAgICAgICAgICAgICAgCiAp
OwoKIApPTV91aW50MzIgCiAgIGdzc19hY2NlcHRfc2VjX2NvbnRleHQgIAooT01fdWludDMyICos
ICAgICAgICAgICAgICAKIGdzc19jdHhfaWRfdCAqLCAgICAgICAgICAgCiBjb25zdCBnc3NfY3Jl
ZF9pZF90LCAgICAgIAogY29uc3QgZ3NzX2J1ZmZlcl90LCAgICAgICAKIGNvbnN0IGdzc19jaGFu
bmVsX2JpbmRpbmdzX3QsICAKIGdzc19uYW1lX3QgKiwgICAgICAgICAgICAgCiBnc3NfT0lEICos
ICAgICAgICAgICAgICAgIAogZ3NzX2J1ZmZlcl90LCAgICAgICAgICAgICAKIE9NX3VpbnQzMiAq
LCAgICAgICAgICAgICAgCiBPTV91aW50MzIgKiwgICAgICAgICAgICAgIAogZ3NzX2NyZWRfaWRf
dCAqICAgICAgICAgICAKICAgICAgICAgICAgICApOwoKIApPTV91aW50MzIgCiAgIGdzc19wcm9j
ZXNzX2NvbnRleHRfdG9rZW4gIAooT01fdWludDMyICosICAgICAgICAgICAgICAKIGNvbnN0IGdz
c19jdHhfaWRfdCwgICAgICAgCiBjb25zdCBnc3NfYnVmZmVyX3QgICAgICAgIAogKTsKCiAKT01f
dWludDMyIAogICBnc3NfZGVsZXRlX3NlY19jb250ZXh0ICAKKE9NX3VpbnQzMiAqLCAgICAgICAg
ICAgICAgCiBnc3NfY3R4X2lkX3QgKiwgICAgICAgICAgIAogZ3NzX2J1ZmZlcl90ICAgICAgICAg
ICAgICAKICk7CgogCk9NX3VpbnQzMgogICBnc3NfY29udGV4dF90aW1lICAKKE9NX3VpbnQzMiAq
LCAgICAgICAgICAgICAgCiBjb25zdCBnc3NfY3R4X2lkX3QsICAgICAgIAogT01fdWludDMyICog
ICAgICAgICAgICAgICAKICk7CgogCk9NX3VpbnQzMiAKICAgZ3NzX2dldF9taWMgIAooT01fdWlu
dDMyICosICAgICAgICAgICAgICAKIGNvbnN0IGdzc19jdHhfaWRfdCwgICAgICAgCiBnc3NfcW9w
X3QsICAgICAgICAgICAgICAgIAogY29uc3QgZ3NzX2J1ZmZlcl90LCAgICAgICAKIGdzc19idWZm
ZXJfdCAgICAgICAgICAgICAgCiApOwoKCiAKT01fdWludDMyIAogICBnc3NfdmVyaWZ5X21pYyAg
CihPTV91aW50MzIgKiwgICAgICAgICAgICAgIAogY29uc3QgZ3NzX2N0eF9pZF90LCAgICAgICAK
IGNvbnN0IGdzc19idWZmZXJfdCwgICAgICAgCiBjb25zdCBnc3NfYnVmZmVyX3QsICAgICAgIAog
Z3NzX3FvcF90ICogICAgICAgICAgICAgICAKICk7CgogCk9NX3VpbnQzMiAKICAgZ3NzX3dyYXAg
IAooT01fdWludDMyICosICAgICAgICAgICAgICAKIGNvbnN0IGdzc19jdHhfaWRfdCwgICAgICAg
CiBpbnQsICAgICAgICAgICAgICAgICAgICAgIAogZ3NzX3FvcF90LCAgICAgICAgICAgICAgICAK
IGNvbnN0IGdzc19idWZmZXJfdCwgICAgICAgCiBpbnQgKiwgICAgICAgICAgICAgICAgICAgIAog
Z3NzX2J1ZmZlcl90ICAgICAgICAgICAgICAKICk7CgoKIApPTV91aW50MzIgCiAgIGdzc191bndy
YXAgIAooT01fdWludDMyICosICAgICAgICAgICAgICAKIGNvbnN0IGdzc19jdHhfaWRfdCwgICAg
ICAgCiBjb25zdCBnc3NfYnVmZmVyX3QsICAgICAgIAogZ3NzX2J1ZmZlcl90LCAgICAgICAgICAg
ICAKIGludCAqLCAgICAgICAgICAgICAgICAgICAgCiBnc3NfcW9wX3QgKiAgICAgICAgICAgICAg
IAogKTsKCiAKT01fdWludDMyIAogICBnc3NfZGlzcGxheV9zdGF0dXMgIAooT01fdWludDMyICos
ICAgICAgICAgICAgICAKIE9NX3VpbnQzMiwgICAgICAgICAgICAgICAgCiBpbnQsICAgICAgICAg
ICAgICAgICAgICAgIAogY29uc3QgZ3NzX09JRCwgICAgICAgICAgICAKIE9NX3VpbnQzMiAqLCAg
ICAgICAgICAgICAgCiBnc3NfYnVmZmVyX3QgICAgICAgICAgICAgIAogKTsKCiAKT01fdWludDMy
IAogICBnc3NfaW5kaWNhdGVfbWVjaHMgIAooT01fdWludDMyICosICAgICAgICAgICAgICAKIGdz
c19PSURfc2V0ICogICAgICAgICAgICAgCiApOwoKIApPTV91aW50MzIgCiAgIGdzc19jb21wYXJl
X25hbWUgIAooT01fdWludDMyICosICAgICAgICAgICAgICAKIGNvbnN0IGdzc19uYW1lX3QsICAg
ICAgICAgCiBjb25zdCBnc3NfbmFtZV90LCAgICAgICAgIAogaW50ICogICAgICAgICAgICAgICAg
ICAgICAKICk7CgogCk9NX3VpbnQzMiAKICAgZ3NzX2Rpc3BsYXlfbmFtZSAgCihPTV91aW50MzIg
KiwgICAgICAgICAgICAgIAogY29uc3QgZ3NzX25hbWVfdCwgICAgICAgICAKIGdzc19idWZmZXJf
dCwgICAgICAgICAgICAgCiBnc3NfT0lEICogICAgICAgICAgICAgICAgIAogKTsKCiAKT01fdWlu
dDMyIAogICBnc3NfaW1wb3J0X25hbWUgIAooT01fdWludDMyICosICAgICAgICAgICAgICAKIGNv
bnN0IGdzc19idWZmZXJfdCwgICAgICAgCiBjb25zdCBnc3NfT0lELCAgICAgICAgICAgIAogZ3Nz
X25hbWVfdCAqICAgICAgICAgICAgICAKICk7CgogCk9NX3VpbnQzMiAKICAgZ3NzX2V4cG9ydF9u
YW1lICAKKE9NX3VpbnQzMiAgKiwgICAgICAgICAgICAgCiBjb25zdCBnc3NfbmFtZV90LCAgICAg
ICAgIAogZ3NzX2J1ZmZlcl90ICAgICAgICAgICAgICAKICk7CgogCk9NX3VpbnQzMiAKICAgZ3Nz
X3JlbGVhc2VfbmFtZSAgCihPTV91aW50MzIgKiwgICAgICAgICAgICAgIAogZ3NzX25hbWVfdCAq
ICAgICAgICAgICAgICAKICk7CgogCk9NX3VpbnQzMiAKICAgZ3NzX3JlbGVhc2VfYnVmZmVyICAK
KE9NX3VpbnQzMiAqLCAgICAgICAgICAgICAgCiBnc3NfYnVmZmVyX3QgICAgICAgICAgICAgIAog
KTsKCiAKT01fdWludDMyIAogICBnc3NfcmVsZWFzZV9vaWRfc2V0ICAKKE9NX3VpbnQzMiAqLCAg
ICAgICAgICAgICAgCiBnc3NfT0lEX3NldCAqICAgICAgICAgICAgIAogKTsKCiAKT01fdWludDMy
IAogICBnc3NfaW5xdWlyZV9jcmVkICAKKE9NX3VpbnQzMiAqLCAgICAgICAgICAgICAgCiBjb25z
dCBnc3NfY3JlZF9pZF90LCAgICAgIAogZ3NzX25hbWVfdCAqLCAgICAgICAgICAgICAKIE9NX3Vp
bnQzMiAqLCAgICAgICAgICAgICAgCiBnc3NfY3JlZF91c2FnZV90ICosICAgICAgIAogZ3NzX09J
RF9zZXQgKiAgICAgICAgICAgICAKICk7CgogCk9NX3VpbnQzMiAKICAgZ3NzX2lucXVpcmVfY29u
dGV4dCAgCihPTV91aW50MzIgKiwgICAgICAgICAgICAgIAogY29uc3QgZ3NzX2N0eF9pZF90LCAg
ICAgICAKIGdzc19uYW1lX3QgKiwgICAgICAgICAgICAgCiBnc3NfbmFtZV90ICosICAgICAgICAg
ICAgIAogT01fdWludDMyICosICAgICAgICAgICAgICAKIGdzc19PSUQgKiwgICAgICAgICAgICAg
ICAgCiBPTV91aW50MzIgKiwgICAgICAgICAgICAgIAogaW50ICosICAgICAgICAgICAgICAgICAg
ICAKIGludCAqICAgICAgICAgICAgICAgICAgICAgCiApOwoKIApPTV91aW50MzIgCiAgIGdzc193
cmFwX3NpemVfbGltaXQgICAKKE9NX3VpbnQzMiAqLCAgICAgICAgICAgICAgCiBjb25zdCBnc3Nf
Y3R4X2lkX3QsICAgICAgIAogaW50LCAgICAgICAgICAgICAgICAgICAgICAKIGdzc19xb3BfdCwg
ICAgICAgICAgICAgICAgCiBPTV91aW50MzIsICAgICAgICAgICAgICAgIAogT01fdWludDMyICog
ICAgICAgICAgICAgICAKICk7CgogCk9NX3VpbnQzMiAKICAgZ3NzX2FkZF9jcmVkICAgCihPTV91
aW50MzIgKiwgICAgICAgICAgICAgIAogY29uc3QgZ3NzX2NyZWRfaWRfdCwgICAgICAKIGNvbnN0
IGdzc19uYW1lX3QsICAgICAgICAgCiBjb25zdCBnc3NfT0lELCAgICAgICAgICAgIAogZ3NzX2Ny
ZWRfdXNhZ2VfdCwgICAgICAgICAKIE9NX3VpbnQzMiwgICAgICAgICAgICAgICAgCiBPTV91aW50
MzIsICAgICAgICAgICAgICAgIAogZ3NzX2NyZWRfaWRfdCAqLCAgICAgICAgICAKIGdzc19PSURf
c2V0ICosICAgICAgICAgICAgCiBPTV91aW50MzIgKiwgICAgICAgICAgICAgIAogT01fdWludDMy
ICogICAgICAgICAgICAgICAKICk7CgogCk9NX3VpbnQzMiAKICAgZ3NzX2lucXVpcmVfY3JlZF9i
eV9tZWNoICAgCihPTV91aW50MzIgKiwgICAgICAgICAgICAgIAogY29uc3QgZ3NzX2NyZWRfaWRf
dCwgICAgICAKIGNvbnN0IGdzc19PSUQsICAgICAgICAgICAgCiBnc3NfbmFtZV90ICosICAgICAg
ICAgICAgIAogT01fdWludDMyICosICAgICAgICAgICAgICAKIE9NX3VpbnQzMiAqLCAgICAgICAg
ICAgICAgCiBnc3NfY3JlZF91c2FnZV90ICogICAgICAgIAogKTsKCiAKT01fdWludDMyIAogICBn
c3NfZXhwb3J0X3NlY19jb250ZXh0ICAKKE9NX3VpbnQzMiAqLCAgICAgICAgICAgICAgCiBnc3Nf
Y3R4X2lkX3QgKiwgICAgICAgICAgIAogZ3NzX2J1ZmZlcl90ICAgICAgICAgICAgICAKICk7Cgog
Ck9NX3VpbnQzMiAKICAgZ3NzX2ltcG9ydF9zZWNfY29udGV4dCAgCihPTV91aW50MzIgKiwgICAg
ICAgICAgICAgIAogY29uc3QgZ3NzX2J1ZmZlcl90LCAgICAgICAKIGdzc19jdHhfaWRfdCAqICAg
ICAgICAgICAgCiApOwoKIApPTV91aW50MzIgCiAgIGdzc19jcmVhdGVfZW1wdHlfb2lkX3NldCAg
CihPTV91aW50MzIgKiwgICAgICAgICAgICAgIAogZ3NzX09JRF9zZXQgKiAgICAgICAgICAgICAK
ICk7CgogCk9NX3VpbnQzMiAKICAgZ3NzX2FkZF9vaWRfc2V0X21lbWJlciAgCihPTV91aW50MzIg
KiwgICAgICAgICAgICAgIAogY29uc3QgZ3NzX09JRCwgICAgICAgICAgICAKIGdzc19PSURfc2V0
ICogICAgICAgICAgICAgCiApOwoKIApPTV91aW50MzIgCiAgIGdzc190ZXN0X29pZF9zZXRfbWVt
YmVyICAKKE9NX3VpbnQzMiAqLCAgICAgICAgICAgICAgCiBjb25zdCBnc3NfT0lELCAgICAgICAg
ICAgIAogY29uc3QgZ3NzX09JRF9zZXQsICAgICAgICAKIGludCAqICAgICAgICAgICAgICAgICAg
ICAgCiApOwoKIApPTV91aW50MzIgCiAgIGdzc19pbnF1aXJlX25hbWVzX2Zvcl9tZWNoICAKKE9N
X3VpbnQzMiAqLCAgICAgICAgICAgICAgCiBjb25zdCBnc3NfT0lELCAgICAgICAgICAgIAogZ3Nz
X09JRF9zZXQgKiAgICAgICAgICAgICAKICk7CgogCk9NX3VpbnQzMiAKICAgZ3NzX2lucXVpcmVf
bWVjaHNfZm9yX25hbWUgIAooT01fdWludDMyICosICAgICAgICAgICAgICAKIGNvbnN0IGdzc19u
YW1lX3QsICAgICAgICAgCiBnc3NfT0lEX3NldCAqICAgICAgICAgICAgIAogKTsKCiAKT01fdWlu
dDMyIAogICBnc3NfY2Fub25pY2FsaXplX25hbWUgIAooT01fdWludDMyICosICAgICAgICAgICAg
ICAKIGNvbnN0IGdzc19uYW1lX3QsICAgICAgICAgCiBjb25zdCBnc3NfT0lELCAgICAgICAgICAg
IAogZ3NzX25hbWVfdCAqICAgICAgICAgICAgICAKICk7CgogCk9NX3VpbnQzMiAKICAgZ3NzX2R1
cGxpY2F0ZV9uYW1lICAKKE9NX3VpbnQzMiAqLCAgICAgICAgICAgICAgCiBjb25zdCBnc3NfbmFt
ZV90LCAgICAgICAgIAogZ3NzX25hbWVfdCAqICAgICAgICAgICAgICAKICk7CgogICAgCgoKCgoK
CgoKCgogICAgCiAgIE9NX3VpbnQzMiAKICAgICAgZ3NzX3NpZ24gIAogICAgICAgICAgICAgIChP
TV91aW50MzIgKiwgICAgICAgICAKICAgICAgICAgICAgICAgZ3NzX2N0eF9pZF90LCAgICAgICAg
CiAgICAgICAgICAgICAgIGludCwgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICBnc3Nf
YnVmZmVyX3QsICAgICAgICAKICAgICAgICAgICAgICAgZ3NzX2J1ZmZlcl90ICAgICAgICAgCiAg
ICAgICAgICAgICAgKTsKCgogICAgCiAgIE9NX3VpbnQzMiAKICAgICAgZ3NzX3ZlcmlmeSAgCiAg
ICAgICAgICAgICAgKE9NX3VpbnQzMiAqLCAgICAgICAgIAogICAgICAgICAgICAgICBnc3NfY3R4
X2lkX3QsICAgICAgICAKICAgICAgICAgICAgICAgZ3NzX2J1ZmZlcl90LCAgICAgICAgCiAgICAg
ICAgICAgICAgIGdzc19idWZmZXJfdCwgICAgICAgIAogICAgICAgICAgICAgICBpbnQgKiAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICApOwoKICAgIAogICBPTV91aW50MzIKICAgICAgZ3Nz
X3NlYWwgIAogICAgICAgICAgICAgIChPTV91aW50MzIgKiwgICAgICAgICAKICAgICAgICAgICAg
ICAgZ3NzX2N0eF9pZF90LCAgICAgICAgCiAgICAgICAgICAgICAgIGludCwgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICBpbnQsICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
Z3NzX2J1ZmZlcl90LCAgICAgICAgCiAgICAgICAgICAgICAgIGludCAqLCAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICBnc3NfYnVmZmVyX3QgICAgICAgICAKICAgICAgICAgICAgICApOwoK
CiAgICAKICAgT01fdWludDMyIAogICAgICBnc3NfdW5zZWFsICAKICAgICAgICAgICAgICAoT01f
dWludDMyICosICAgICAgICAgCiAgICAgICAgICAgICAgIGdzc19jdHhfaWRfdCwgICAgICAgIAog
ICAgICAgICAgICAgICBnc3NfYnVmZmVyX3QsICAgICAgICAKICAgICAgICAgICAgICAgZ3NzX2J1
ZmZlcl90LCAgICAgICAgCiAgICAgICAgICAgICAgIGludCAqLCAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICBpbnQgKiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICApOwoKCgp9IAoK
CgojIDQ1ICIuLi9jb25kb3JfaW5jbHVkZXMvY29uZG9yX2NvbW1vbi5oIiAyCgoKCgojIDEgIi4u
L2NvbmRvcl9pbmNsdWRlcy8uLi9jb25kb3Jfc3lzYXBpL3N5c2FwaS5oIiAxCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsgCgogCmludCBzeXNhcGlfcGh5c19tZW1vcnlf
cmF3KHZvaWQpOwppbnQgc3lzYXBpX3BoeXNfbWVtb3J5KHZvaWQpOwoKIAppbnQgc3lzYXBpX2Rp
c2tfc3BhY2VfcmF3KGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKaW50IHN5c2FwaV9kaXNrX3NwYWNl
KGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKCiAKaW50IHN5c2FwaV9uY3B1c19yYXcodm9pZCk7Cmlu
dCBzeXNhcGlfbmNwdXModm9pZCk7CgogCgoKCgppbnQgc3lzYXBpX21pcHNfcmF3KHZvaWQpOwpp
bnQgc3lzYXBpX21pcHModm9pZCk7CgogCmludCBzeXNhcGlfa2Zsb3BzX3Jhdyh2b2lkKTsKaW50
IHN5c2FwaV9rZmxvcHModm9pZCk7CgogCnZvaWQgc3lzYXBpX2lkbGVfdGltZV9yYXcodGltZV90
ICptX2lkbGUsIHRpbWVfdCAqbV9jb25zb2xlX2lkbGUpOwp2b2lkIHN5c2FwaV9pZGxlX3RpbWUo
dGltZV90ICptX2lkbGUsIHRpbWVfdCAqbV9jb25zb2xlX2lkbGUpOwoKIAp2b2lkIHN5c2FwaV9y
ZWNvbmZpZyh2b2lkKTsKdm9pZCBzeXNhcGlfaW50ZXJuYWxfcmVjb25maWcodm9pZCk7CgogCgp2
b2lkIHN5c2FwaV9sYXN0X3hldmVudCh2b2lkKTsKCiAKZmxvYXQgc3lzYXBpX2xvYWRfYXZnX3Jh
dyh2b2lkKTsKZmxvYXQgc3lzYXBpX2xvYWRfYXZnKHZvaWQpOwoKIAoKCmNvbnN0IGNoYXIqIHN5
c2FwaV9jb25kb3JfYXJjaCh2b2lkKTsKY29uc3QgY2hhciogc3lzYXBpX3VuYW1lX2FyY2godm9p
ZCk7CmNvbnN0IGNoYXIqIHN5c2FwaV9vcHN5cyh2b2lkKTsKY29uc3QgY2hhciogc3lzYXBpX3Vu
YW1lX29wc3lzKHZvaWQpOwoKIAoKaW50IHN5c2FwaV9zd2FwX3NwYWNlX3Jhdyh2b2lkKTsKaW50
IHN5c2FwaV9zd2FwX3NwYWNlKHZvaWQpOwoKIAoKdm9pZCBzeXNhcGlfdGVzdF9kdW1wX2FsbCh2
b2lkKTsKdm9pZCBzeXNhcGlfdGVzdF9kdW1wX2ludGVybmFsX3ZhcnModm9pZCk7CnZvaWQgc3lz
YXBpX3Rlc3RfZHVtcF9mdW5jdGlvbnModm9pZCk7CgogCmNoYXIgKiBzeXNhcGlfdHJhbnNsYXRl
X2FyY2goIGNoYXIgKm1hY2hpbmUsIGNoYXIgKnN5c25hbWUgKTsKY2hhciAqc3lzYXBpX3RyYW5z
bGF0ZV9vcHN5cyggY2hhciAqc3lzbmFtZSwgY2hhciAqcmVsZWFzZSApOwoKfSAKCgojIDQ5ICIu
Li9jb25kb3JfaW5jbHVkZXMvY29uZG9yX2NvbW1vbi5oIiAyCgoKCiAKCgoKCiMgMSAiL3MvZ2Nj
LTIuOTUuMi9zdW54ODZfNTYvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi42LzIuOTUuMi8u
Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgojIDEgIi9zL2djYy0yLjk1LjIvc3VueDg2
XzU2L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNi8yLjk1LjIvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9zdHJlYW1idWYuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoj
cHJhZ21hIGludGVyZmFjZQoKCiAgIAoKCgpleHRlcm4gIkMiIHsKIyAxICIvcy9nY2MtMi45NS4y
L3N1bng4Nl81Ni9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjYvMi45NS4yLy4uLy4uLy4u
Ly4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiMgMSAiL3MvZ2NjLTIuOTUuMi9zdW54ODZfNTYvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xh
cmlzMi42LzIuOTUuMi8uLi8uLi8uLi8uLi9pMzg2LXBjLXNvbGFyaXMyLjYvaW5jbHVkZS9fR19j
b25maWcuaCIgMSAzIDQKICAKCgoKCgoKCgoKdHlwZWRlZiAgICAgICAgICBpbnQgICBfR19pbnQ4
X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCAgX0dfdWludDhfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1FJX18pKSk7CnR5cGVkZWYg
ICAgICAgICAgaW50ICBfR19pbnQxNl90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fSElfXykp
KTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXygoX19tb2Rl
X18oX19ISV9fKSkpOwp0eXBlZGVmICAgICAgICAgIGludCAgX0dfaW50MzJfdCBfX2F0dHJpYnV0
ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90
IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKTsKdHlwZWRlZiAgICAgICAgICBpbnQg
IF9HX2ludDY0X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ESV9fKSkpOwp0eXBlZGVmIHVu
c2lnbmVkIGludCBfR191aW50NjRfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0RJX18pKSk7
CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIF9HX2xsb25nOwpfX2V4dGVuc2lvbl9f
IHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9HX3VsbG9uZzsKCgoKCgoKCgp0eXBlZGVmIGxv
bmcgX0dfY2xvY2tfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX2Rldl90Owp0eXBlZGVmIGxv
bmcgX0dfZnBvc190Owp0eXBlZGVmIGxvbmcgX0dfZ2lkX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBfR19pbm9fdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX21vZGVfdDsKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIF9HX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBfR19vZmZfdDsKdHlwZWRlZiBsb25n
IF9HX3BpZF90OwoKCgp0eXBlZGVmIGludCBfR19wdHJkaWZmX3Q7CnR5cGVkZWYgaW50ICAgX0df
c2lnc2V0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3NpemVfdDsKdHlwZWRlZiBsb25n
IF9HX3RpbWVfdDsKdHlwZWRlZiBsb25nIF9HX3VpZF90Owp0eXBlZGVmIGxvbmcgaW50IF9HX3dj
aGFyX3Q7CgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IF9HX3NzaXplX3Q7CnR5cGVkZWYgdW5z
aWduZWQgaW50IF9HX3dpbnRfdDsKdHlwZWRlZiBjaGFyICogX0dfdmFfbGlzdDsKCgoKCgoKCgoK
CgoKCgoKCgojIDEgIi9zL2djYy0yLjk1LjIvc3VueDg2XzU2L2xpYi9nY2MtbGliL2kzODYtcGMt
c29sYXJpczIuNi8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKCgoKCgoKIAoKCiMgMTkg
Ii9zL2djYy0yLjk1LjIvc3VueDg2XzU2L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNi8y
Ljk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi9zL2dj
Yy0yLjk1LjIvc3VueDg2XzU2L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNi8yLjk1LjIv
aW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CiAKCiAKCgojIDEyNiAiL3MvZ2NjLTIuOTUuMi9zdW54ODZfNTYvbGliL2djYy1saWIvaTM4Ni1w
Yy1zb2xhcmlzMi42LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgogCgoKCgogCgogCgoK
CiMgMTg3ICIvcy9nY2MtMi45NS4yL3N1bng4Nl81Ni9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFy
aXMyLjYvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCgoKCgogCgoKCgogCgoKCiMgMjY4
ICIvcy9nY2MtMi45NS4yL3N1bng4Nl81Ni9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjYv
Mi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3
ICIvcy9nY2MtMi45NS4yL3N1bng4Nl81Ni9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjYv
Mi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
IyA4NiAiL3MvZ2NjLTIuOTUuMi9zdW54ODZfNTYvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlz
Mi42LzIuOTUuMi8uLi8uLi8uLi8uLi9pMzg2LXBjLXNvbGFyaXMyLjYvaW5jbHVkZS9fR19jb25m
aWcuaCIgMiAzIDQKCgojIDMwICIvcy9nY2MtMi45NS4yL3N1bng4Nl81Ni9saWIvZ2NjLWxpYi9p
Mzg2LXBjLXNvbGFyaXMyLjYvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8u
aCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoKIyA1NSAiL3MvZ2NjLTIuOTUuMi9zdW54ODZfNTYvbGli
L2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi42LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL2xpYmlvLmgiIDMKCgojIDY3ICIvcy9nY2MtMi45NS4yL3N1bng4Nl81Ni9saWIvZ2NjLWxp
Yi9pMzg2LXBjLXNvbGFyaXMyLjYvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGli
aW8uaCIgMwoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgojIDEwNCAiL3MvZ2NjLTIuOTUuMi9z
dW54ODZfNTYvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi42LzIuOTUuMi8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL2xpYmlvLmgiIDMKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCBfSU9fanVtcF90OyAgc3RydWN0IF9J
T19GSUxFOwoKIAojIDE3NCAiL3MvZ2NjLTIuOTUuMi9zdW54ODZfNTYvbGliL2djYy1saWIvaTM4
Ni1wYy1zb2xhcmlzMi42LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2xpYmlvLmgi
IDMKCgoKCgoKCgoKICAgIHR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCiAKCnN0cnVjdCBf
SU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxF
ICpfc2J1ZjsKICAgCgogICAKICBpbnQgX3BvczsKIyAyMDcgIi9zL2djYy0yLjk1LjIvc3VueDg2
XzU2L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNi8yLjk1LjIvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9saWJpby5oIiAzCgp9OwoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdz
OwkJIAoKCiAgIAogICAKICBjaGFyKiBfSU9fcmVhZF9wdHI7CSAKICBjaGFyKiBfSU9fcmVhZF9l
bmQ7CSAKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CSAK
ICBjaGFyKiBfSU9fd3JpdGVfcHRyOwkgCiAgY2hhciogX0lPX3dyaXRlX2VuZDsJIAogIGNoYXIq
IF9JT19idWZfYmFzZTsJIAogIGNoYXIqIF9JT19idWZfZW5kOwkgCiAgIAogIGNoYXIgKl9JT19z
YXZlX2Jhc2U7ICAKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7ICAgCiAgY2hhciAqX0lPX3NhdmVf
ZW5kOyAgCgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxF
ICpfY2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKCgoKICBfR19vZmZfdCAg
X29mZnNldDsKCgoKICAgCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgY2hhciBfdW51
c2VkOwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKICAgCgoKCgoKCgoKfTsKCgoKCgoKCgoKCgpzdHJ1
Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT19zdGRpbl8s
IF9JT19zdGRvdXRfLCBfSU9fc3RkZXJyXzsKCgoKCgogCnR5cGVkZWYgc3RydWN0CnsKICBfR19z
c2l6ZV90ICAoKnJlYWQpICAoc3RydWN0IF9JT19GSUxFICosIHZvaWQgKiwgX0dfc3NpemVfdCAp
ICA7CiAgX0dfc3NpemVfdCAgKCp3cml0ZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgY29uc3Qgdm9p
ZCAqLCBfR19zc2l6ZV90ICkgIDsKICBfR19mcG9zX3QgICgqc2VlaykgIChzdHJ1Y3QgX0lPX0ZJ
TEUgKiwgX0dfb2ZmX3QgLCBpbnQpICA7CiAgaW50ICgqY2xvc2UpICAoc3RydWN0IF9JT19GSUxF
ICopICA7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKCiAKc3RydWN0IF9JT19jb29raWVf
ZmlsZQp7CiAgc3RydWN0IF9JT19GSUxFIGZpbGU7CiAgY29uc3Qgdm9pZCAqdnRhYmxlOwogIHZv
aWQgKmNvb2tpZTsKICBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGlvX2Z1bmN0aW9uczsKfTsK
CgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAgKF9JT19GSUxFICopICA7
CmV4dGVybiBpbnQgX191ZmxvdyAgKF9JT19GSUxFICopICA7CmV4dGVybiBpbnQgX19vdmVyZmxv
dyAgKF9JT19GSUxFICosIGludCkgIDsKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT19n
ZXRjICAoX0lPX0ZJTEUgKl9fZnApICA7CmV4dGVybiBpbnQgX0lPX3B1dGMgIChpbnQgX19jLCBf
SU9fRklMRSAqX19mcCkgIDsKZXh0ZXJuIGludCBfSU9fZmVvZiAgKF9JT19GSUxFICpfX2ZwKSAg
OwpleHRlcm4gaW50IF9JT19mZXJyb3IgIChfSU9fRklMRSAqX19mcCkgIDsKCmV4dGVybiBpbnQg
X0lPX3BlZWtjX2xvY2tlZCAgKF9JT19GSUxFICpfX2ZwKSAgOwoKIAoKCgpleHRlcm4gdm9pZCBf
SU9fZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxl
ICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlICAoX0lPX0ZJTEUg
KikgIDsKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgIChfSU9fRklMRSAqLCBj
b25zdCBjaGFyICosIF9HX3ZhX2xpc3QgLCBpbnQgKikgIDsKZXh0ZXJuIGludCBfSU9fdmZwcmlu
dGYgIChfSU9fRklMRSAqLCBjb25zdCBjaGFyICosIF9HX3ZhX2xpc3QgKSAgOwpleHRlcm4gX0df
c3NpemVfdCAgX0lPX3BhZG4gIChfSU9fRklMRSAqLCBpbnQsIF9HX3NzaXplX3QgKSAgOwpleHRl
cm4gX0dfc2l6ZV90ICBfSU9fc2dldG4gIChfSU9fRklMRSAqLCB2b2lkICosIF9HX3NpemVfdCAp
ICA7CgoKCgoKZXh0ZXJuIF9HX2Zwb3NfdCAgX0lPX3NlZWtvZmYgIChfSU9fRklMRSAqLCBfR19v
ZmZfdCAsIGludCwgaW50KSAgOwpleHRlcm4gX0dfZnBvc190ICBfSU9fc2Vla3BvcyAgKF9JT19G
SUxFICosIF9HX2Zwb3NfdCAsIGludCkgIDsKCgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBf
YXJlYSAgKF9JT19GSUxFICopICA7CgoKfQoKCgojIDM2ICIvcy9nY2MtMi45NS4yL3N1bng4Nl81
Ni9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjYvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDIgMwoKfQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
ZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgIApjbGFzcyBvc3RyZWFtOyBjbGFzcyBzdHJl
YW1idWY7CgogCgoKCgoKCgp0eXBlZGVmIF9HX29mZl90ICBzdHJlYW1vZmY7CnR5cGVkZWYgX0df
ZnBvc190ICBzdHJlYW1wb3M7Cgp0eXBlZGVmIF9HX3NzaXplX3QgIHN0cmVhbXNpemU7Cgp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgX19mbXRmbGFnczsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9z
dGF0ZTsKCnN0cnVjdCBfaW9zX2ZpZWxkcwp7ICAKICAgIHN0cmVhbWJ1ZiAqX3N0cmJ1ZjsKICAg
IG9zdHJlYW0qIF90aWU7CiAgICBpbnQgX3dpZHRoOwogICAgX19mbXRmbGFncyBfZmxhZ3M7CiAg
ICBzaG9ydCAgX2ZpbGw7CiAgICBfX2lvc3RhdGUgX3N0YXRlOwogICAgX19pb3N0YXRlIF9leGNl
cHRpb25zOwogICAgaW50IF9wcmVjaXNpb247CgogICAgdm9pZCAqX2FycmF5czsgIAp9OwoKCgoK
CgoKCgoKCgoKCgojIDEyNCAiL3MvZ2NjLTIuOTUuMi9zdW54ODZfNTYvbGliL2djYy1saWIvaTM4
Ni1wYy1zb2xhcmlzMi42LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1
Zi5oIiAzCgoKY2xhc3MgaW9zIDogcHVibGljIF9pb3NfZmllbGRzIHsKICBpb3MmIG9wZXJhdG9y
PShpb3MmKTsgICAKICBpb3MgKGNvbnN0IGlvcyYpOyAgCiAgcHVibGljOgogICAgdHlwZWRlZiBf
X2ZtdGZsYWdzIGZtdGZsYWdzOwogICAgdHlwZWRlZiBpbnQgaW9zdGF0ZTsKICAgIHR5cGVkZWYg
aW50IG9wZW5tb2RlOwogICAgdHlwZWRlZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOwogICAgZW51
bSBpb19zdGF0ZSB7Cglnb29kYml0ID0gMCAsCgllb2ZiaXQgPSAxICwKCWZhaWxiaXQgPSAyICwK
CWJhZGJpdCA9IDQgIH07CiAgICBlbnVtIG9wZW5fbW9kZSB7CglpbiA9IDEgLAoJb3V0ID0gMiAs
CglhdGUgPSA0ICwKCWFwcCA9IDggLAoJdHJ1bmMgPSAxNiAsCglub2NyZWF0ZSA9IDMyICwKCW5v
cmVwbGFjZSA9IDY0ICwKCWJpbiA9IDEyOCAsICAKCWJpbmFyeSA9IDEyOCAgfTsKICAgIGVudW0g
c2Vla19kaXIgeyBiZWcsIGN1ciwgZW5kfTsKICAgIHR5cGVkZWYgZW51bSBzZWVrX2RpciBzZWVr
ZGlyOwogICAgIAogICAgZW51bSB7IHNraXB3cz0gMDEgLAoJICAgbGVmdD0gMDIgLCByaWdodD0g
MDQgLCBpbnRlcm5hbD0gMDEwICwKCSAgIGRlYz0gMDIwICwgb2N0PSAwNDAgLCBoZXg9IDAxMDAg
LAoJICAgc2hvd2Jhc2U9IDAyMDAgLCBzaG93cG9pbnQ9IDA0MDAgLAoJICAgdXBwZXJjYXNlPSAw
MTAwMCAsIHNob3dwb3M9IDAyMDAwICwKCSAgIHNjaWVudGlmaWM9IDA0MDAwICwgZml4ZWQ9IDAx
MDAwMCAsCgkgICB1bml0YnVmPSAwMjAwMDAgLCBzdGRpbz0gMDQwMDAwIAoKCgoJICAgfTsKICAg
IGVudW0geyAgCgliYXNlZmllbGQ9ZGVjK29jdCtoZXgsCglmbG9hdGZpZWxkID0gc2NpZW50aWZp
YytmaXhlZCwKCWFkanVzdGZpZWxkID0gbGVmdCtyaWdodCtpbnRlcm5hbAogICAgfTsKCiMgMTc3
ICIvcy9nY2MtMi45NS4yL3N1bng4Nl81Ni9saWIvZ2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjYv
Mi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKCgogICAgb3N0
cmVhbSogdGllKCkgY29uc3QgeyByZXR1cm4gX3RpZTsgfQogICAgb3N0cmVhbSogdGllKG9zdHJl
YW0qIHZhbCkgeyBvc3RyZWFtKiBzYXZlPV90aWU7IF90aWU9dmFsOyByZXR1cm4gc2F2ZTsgfQoK
ICAgICAKICAgIHNob3J0ICBmaWxsKCkgY29uc3QgeyByZXR1cm4gX2ZpbGw7IH0KICAgIHNob3J0
ICBmaWxsKHNob3J0ICBuZXdmKQoJe3Nob3J0ICBvbGRmID0gX2ZpbGw7IF9maWxsID0gbmV3Zjsg
cmV0dXJuIG9sZGY7fQogICAgZm10ZmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfZmxhZ3M7
IH0KICAgIGZtdGZsYWdzIGZsYWdzKGZtdGZsYWdzIG5ld192YWwpIHsKCWZtdGZsYWdzIG9sZF92
YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5ld192YWw7IHJldHVybiBvbGRfdmFsOyB9CiAgICBpbnQg
cHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX3ByZWNpc2lvbjsgfQogICAgaW50IHByZWNpc2lv
bihpbnQgbmV3cCkgewoJdW5zaWduZWQgc2hvcnQgb2xkcCA9IF9wcmVjaXNpb247IF9wcmVjaXNp
b24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsKCXJldHVybiBvbGRwOyB9CiAgICBmbXRmbGFncyBz
ZXRmKGZtdGZsYWdzIHZhbCkgewoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyB8
PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCwg
Zm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyA9IChf
ZmxhZ3MgJiB+bWFzaykgfCAodmFsICYgbWFzayk7IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRm
bGFncyB1bnNldGYoZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsK
CV9mbGFncyAmPSB+bWFzazsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGludCB3aWR0aCgpIGNvbnN0
IHsgcmV0dXJuIF93aWR0aDsgfQogICAgaW50IHdpZHRoKGludCB2YWwpIHsgaW50IHNhdmUgPSBf
d2lkdGg7IF93aWR0aCA9IHZhbDsgcmV0dXJuIHNhdmU7IH0KCgoKCiAgICB2b2lkIF90aHJvd19m
YWlsdXJlKCkgY29uc3QgeyB9CgogICAgdm9pZCBjbGVhcihpb3N0YXRlIHN0YXRlID0gMCkgewoJ
X3N0YXRlID0gX3N0cmJ1ZiA/IHN0YXRlIDogc3RhdGV8YmFkYml0OwoJaWYgKF9zdGF0ZSAmIF9l
eGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldChpb3N0YXRlIGZsYWcp
IHsgX3N0YXRlIHw9IGZsYWc7CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWls
dXJlKCk7IH0KICAgIHZvaWQgc2V0c3RhdGUoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFn
OyAgCglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIGlu
dCBnb29kKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlID09IDA7IH0KICAgIGludCBlb2YoKSBjb25z
dCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmVvZmJpdDsgfQogICAgaW50IGZhaWwoKSBjb25zdCB7
IHJldHVybiBfc3RhdGUgJiAoaW9zOjpiYWRiaXR8aW9zOjpmYWlsYml0KTsgfQogICAgaW50IGJh
ZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6YmFkYml0OyB9CiAgICBpb3N0YXRlIHJk
c3RhdGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7IH0KICAgIG9wZXJhdG9yIHZvaWQqKCkgY29u
c3QgeyByZXR1cm4gZmFpbCgpID8gKHZvaWQqKTAgOiAodm9pZCopKC0xKTsgfQogICAgaW50IG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKTsgfQogICAgaW9zdGF0ZSBleGNlcHRpb25z
KCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7IH0KICAgIHZvaWQgZXhjZXB0aW9ucyhpb3N0
YXRlIGVuYWJsZSkgewoJX2V4Y2VwdGlvbnMgPSBlbmFibGU7CglpZiAoX3N0YXRlICYgX2V4Y2Vw
dGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KCiAgICBzdHJlYW1idWYqIHJkYnVmKCkgY29uc3Qg
eyByZXR1cm4gX3N0cmJ1ZjsgfQogICAgc3RyZWFtYnVmKiByZGJ1ZihzdHJlYW1idWYgKl9zKSB7
CiAgICAgIHN0cmVhbWJ1ZiAqX29sZCA9IF9zdHJidWY7IF9zdHJidWYgPSBfczsgY2xlYXIgKCk7
IHJldHVybiBfb2xkOyB9CgogICAgc3RhdGljIGludCBzeW5jX3dpdGhfc3RkaW8oaW50IG9uKTsK
ICAgIHN0YXRpYyB2b2lkIHN5bmNfd2l0aF9zdGRpbygpIHsgc3luY193aXRoX3N0ZGlvKDEpOyB9
CiAgICBzdGF0aWMgZm10ZmxhZ3MgYml0YWxsb2MoKTsKICAgIHN0YXRpYyBpbnQgeGFsbG9jKCk7
CiAgICB2b2lkKiYgcHdvcmQoaW50KTsKICAgIHZvaWQqIHB3b3JkKGludCkgY29uc3Q7CiAgICBs
b25nJiBpd29yZChpbnQpOwogICAgbG9uZyBpd29yZChpbnQpIGNvbnN0OwoKCgoKCgoKCgogICAg
IAogICAgY2xhc3MgSW5pdCB7CiAgICBwdWJsaWM6CiAgICAgIEluaXQgKCkgeyB9CiAgICB9OwoK
ICBwcm90ZWN0ZWQ6CiAgICBpbmxpbmUgaW9zKHN0cmVhbWJ1Ziogc2IgPSAwLCBvc3RyZWFtKiB0
aWVfdG8gPSAwKTsKICAgIGlubGluZSB2aXJ0dWFsIH5pb3MoKTsKICAgIGlubGluZSB2b2lkIGlu
aXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllID0gMCk7Cn07CgoKCgp0eXBlZGVmIGlvczo6
c2Vla19kaXIgX3NlZWtfZGlyOwoKCiAKIAogCiAKIAoKIAogCmNsYXNzIHN0cmVhbW1hcmtlciA6
IHByaXZhdGUgX0lPX21hcmtlciB7CiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtYnVmOwogICAgdm9p
ZCBzZXRfb2Zmc2V0KGludCBvZmZzZXQpIHsgX3BvcyA9IG9mZnNldDsgfQogIHB1YmxpYzoKICAg
IHN0cmVhbW1hcmtlcihzdHJlYW1idWYgKnNiKTsKICAgIH5zdHJlYW1tYXJrZXIoKTsKICAgIGlu
dCBzYXZpbmcoKSB7IHJldHVybiAgMTsgfQogICAgaW50IGRlbHRhKHN0cmVhbW1hcmtlciYpOwog
ICAgaW50IGRlbHRhKCk7Cn07CgpzdHJ1Y3Qgc3RyZWFtYnVmIDogcHVibGljIF9JT19GSUxFIHsg
IAogICAgZnJpZW5kIGNsYXNzIGlvczsKICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtOwogICAgZnJp
ZW5kIGNsYXNzIG9zdHJlYW07CiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtbWFya2VyOwogICAgY29u
c3Qgdm9pZCAqJl92dGFibGUoKSB7IHJldHVybiAqKGNvbnN0IHZvaWQqKikoKF9JT19GSUxFKil0
aGlzICsgMSk7IH0KICBwcm90ZWN0ZWQ6CiAgICBzdGF0aWMgc3RyZWFtYnVmKiBfbGlzdF9hbGw7
ICAKICAgIF9JT19GSUxFKiYgeGNoYWluKCkgeyByZXR1cm4gX2NoYWluOyB9CiAgICB2b2lkIF91
bl9saW5rKCk7CiAgICB2b2lkIF9saW5rX2luKCk7CiAgICBjaGFyKiBncHRyKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9w
dHI7IH0KICAgIGNoYXIqIHBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfcHRyOyB9CiAg
ICBjaGFyKiBlZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBf
SU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgIGNoYXIqIGVwcHRyKCkgY29uc3QgeyBy
ZXR1cm4gX0lPX3dyaXRlX2VuZDsgfQogICAgY2hhciogcGJhc2UoKSBjb25zdCB7IHJldHVybiBf
SU9fd3JpdGVfYmFzZTsgfQogICAgY2hhciogZWJhY2soKSBjb25zdAogICAgICB7IHJldHVybiBf
ZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7fQogICAgY2hh
ciogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfYmFzZTsgfQogICAgY2hhciogZWJ1Zigp
IGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kOyB9CiAgICBpbnQgYmxlbigpIGNvbnN0IHsgcmV0
dXJuIF9JT19idWZfZW5kIC0gX0lPX2J1Zl9iYXNlOyB9CiAgICB2b2lkIHhwdXRfY2hhcihjaGFy
IGMpIHsgKl9JT193cml0ZV9wdHIrKyA9IGM7IH0KICAgIGludCB4ZmxhZ3MoKSB7IHJldHVybiBf
ZmxhZ3MgOyB9CiAgICBpbnQgeGZsYWdzKGludCBmKSB7aW50IGZsID0gX2ZsYWdzIDsgX2ZsYWdz
ICA9IGY7IHJldHVybiBmbDt9CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZikgeyBfZmxhZ3MgIHw9
IGY7IH0KICAgIHZvaWQgeHNldGZsYWdzKGludCBmLCBpbnQgbWFzaykKICAgICAgeyBfZmxhZ3Mg
ID0gKF9mbGFncyAgJiB+bWFzaykgfCAoZiAmIG1hc2spOyB9CiAgICB2b2lkIGdidW1wKGludCBu
KQogICAgICB7IF9mbGFncyAgJiAweDEwMCAgPyAoX0lPX3NhdmVfYmFzZSs9bik6KF9JT19yZWFk
X3B0cis9bik7fQogICAgdm9pZCBwYnVtcChpbnQgbikgeyBfSU9fd3JpdGVfcHRyICs9IG47IH0K
ICAgIHZvaWQgc2V0YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50IGE9MCk7CiAgICB2b2lkIHNldHAo
Y2hhciogcCwgY2hhciogZXApCiAgICAgIHsgX0lPX3dyaXRlX2Jhc2U9X0lPX3dyaXRlX3B0cj1w
OyBfSU9fd3JpdGVfZW5kPWVwOyB9CiAgICB2b2lkIHNldGcoY2hhciogZWIsIGNoYXIqIGcsIGNo
YXIgKmVnKSB7CiAgICAgIGlmIChfZmxhZ3MgICYgMHgxMDAgKSBfSU9fZnJlZV9iYWNrdXBfYXJl
YSh0aGlzKTsgCiAgICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsgX0lPX3JlYWRfcHRyID0gZzsgX0lP
X3JlYWRfZW5kID0gZWc7IH0KICAgIGNoYXIgKnNob3J0YnVmKCkgeyByZXR1cm4gX3Nob3J0YnVm
OyB9CgogICAgaW50IGluX2JhY2t1cCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MTAwIDsgfQogICAg
IAogICAgY2hhciAqR2Jhc2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2Jhc2Ug
OiBfSU9fcmVhZF9iYXNlOyB9CiAgICAgCiAgICBjaGFyICplR3B0cigpIHsgcmV0dXJuIGluX2Jh
Y2t1cCgpID8gX0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICAgCiAgICBjaGFyICpC
YmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3JlYWRfYmFzZSA6IF9JT19zYXZlX2Jh
c2U7IH0KICAgIGNoYXIgKkJwdHIoKSB7IHJldHVybiBfSU9fYmFja3VwX2Jhc2U7IH0KICAgICAK
ICAgIGNoYXIgKmVCcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9lbmQgOiBf
SU9fc2F2ZV9lbmQ7IH0KICAgIGNoYXIgKk5iYXNlKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFzZTsg
fQogICAgY2hhciAqZU5wdHIoKSB7IHJldHVybiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGludCBoYXZl
X2JhY2t1cCgpIHsgcmV0dXJuIF9JT19zYXZlX2Jhc2UgIT0gX19udWxsIDsgfQogICAgaW50IGhh
dmVfbWFya2VycygpIHsgcmV0dXJuIF9tYXJrZXJzICE9IF9fbnVsbCA7IH0KICAgIHZvaWQgZnJl
ZV9iYWNrdXBfYXJlYSgpOwogICAgdm9pZCB1bnNhdmVfbWFya2VycygpOyAgCiAgICBpbnQgcHV0
X21vZGUoKSB7IHJldHVybiBfZmxhZ3MgJiAweDgwMCA7IH0KICAgIGludCBzd2l0Y2hfdG9fZ2V0
X21vZGUoKTsKICAgIAogICAgc3RyZWFtYnVmKGludCBmbGFncz0wKTsKICBwdWJsaWM6CiAgICBz
dGF0aWMgaW50IGZsdXNoX2FsbCgpOwogICAgc3RhdGljIHZvaWQgZmx1c2hfYWxsX2xpbmVidWZm
ZXJlZCgpOyAgCiAgICB2aXJ0dWFsIH5zdHJlYW1idWYoKTsKICAgIHZpcnR1YWwgaW50IG92ZXJm
bG93KGludCBjID0gKC0xKSApOyAgCiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3coKTsgIAogICAg
dmlydHVhbCBpbnQgdWZsb3coKTsgIAogICAgdmlydHVhbCBpbnQgcGJhY2tmYWlsKGludCBjKTsK
IAogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXpl
IG4pOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4p
OwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50
IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrcG9zKHN0
cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCk7CgogICAgc3RyZWFtcG9z
IHB1YnNlZWtvZmYoc3RyZWFtb2ZmIG8sIF9zZWVrX2RpciBkLCBpbnQgbW9kZT1pb3M6OmlufGlv
czo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla29mZiAodGhpcywgbywgZCwgbW9kZSk7IH0K
ICAgIHN0cmVhbXBvcyBwdWJzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjpp
bnxpb3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtwb3MgKHRoaXMsIHBvcywgbW9kZSk7
IH0KICAgIHN0cmVhbXBvcyBzc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9
aW9zOjppbnxpb3M6Om91dCk7CiAgICBzdHJlYW1wb3Mgc3NlZWtwb3Moc3RyZWFtcG9zIHBvcywg
aW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRi
dWYoY2hhciogcCwgaW50IGxlbik7CiAgICB2aXJ0dWFsIGludCBzeW5jKCk7CiAgICB2aXJ0dWFs
IGludCBkb2FsbG9jYXRlKCk7CgogICAgaW50IHNlZWttYXJrKHN0cmVhbW1hcmtlciYgbWFyaywg
aW50IGRlbHRhID0gMCk7CiAgICBpbnQgc3B1dGJhY2tjKGNoYXIgYyk7CiAgICBpbnQgc3VuZ2V0
YygpOwogICAgaW50IHVuYnVmZmVyZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAyICA/IDEgOiAwOyB9
CiAgICBpbnQgbGluZWJ1ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgyMDAgID8gMSA6IDA7
IH0KICAgIHZvaWQgdW5idWZmZXJlZChpbnQgaSkKCXsgaWYgKGkpIF9mbGFncyB8PSAyIDsgZWxz
ZSBfZmxhZ3MgJj0gfjIgOyB9CiAgICB2b2lkIGxpbmVidWZmZXJlZChpbnQgaSkKCXsgaWYgKGkp
IF9mbGFncyB8PSAweDIwMCA7IGVsc2UgX2ZsYWdzICY9IH4weDIwMCA7IH0KICAgIGludCBhbGxv
Y2F0ZSgpIHsgIAoJaWYgKGJhc2UoKSB8fCB1bmJ1ZmZlcmVkKCkpIHJldHVybiAwOwoJZWxzZSBy
ZXR1cm4gZG9hbGxvY2F0ZSgpOyB9CiAgICAgCiAgICB2b2lkIGFsbG9jYnVmKCkgeyBpZiAoYmFz
ZSgpID09IF9fbnVsbCApIGRvYWxsb2NidWYoKTsgfQogICAgdm9pZCBkb2FsbG9jYnVmKCk7CiAg
ICBpbnQgaW5fYXZhaWwoKSB7IHJldHVybiBfSU9fcmVhZF9lbmQgLSBfSU9fcmVhZF9wdHI7IH0K
ICAgIGludCBvdXRfd2FpdGluZygpIHsgcmV0dXJuIF9JT193cml0ZV9wdHIgLSBfSU9fd3JpdGVf
YmFzZTsgfQogICAgc3RyZWFtc2l6ZSBzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4p
IHsgcmV0dXJuIHhzcHV0bihzLCBuKTsgfQogICAgc3RyZWFtc2l6ZSBwYWRuKGNoYXIgcGFkLCBz
dHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19wYWRuKHRoaXMsIHBhZCwgbik7IH0KICAgIHN0cmVh
bXNpemUgc2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiBfSU9fc2dldG4odGhp
cywgcywgbik7IH0KICAgIGludCBpZ25vcmUoaW50KTsKICAgIGludCBnZXRfY29sdW1uKCk7CiAg
ICBpbnQgc2V0X2NvbHVtbihpbnQpOwogICAgbG9uZyBzZ2V0bGluZShjaGFyKiBidWYsIF9HX3Np
emVfdCAgbiwgY2hhciBkZWxpbSwgaW50IHB1dGJhY2tfZGVsaW0pOwogICAgaW50IHNwdXRjKGlu
dCBjKSB7IHJldHVybiBfSU9fcHV0YyhjLCB0aGlzKTsgfQogICAgaW50IHNidW1wYygpIHsgcmV0
dXJuIF9JT19nZXRjKHRoaXMpOyB9CiAgICBpbnQgc2dldGMoKSB7IHJldHVybiAoKCAgdGhpcyAg
KS0+X0lPX3JlYWRfcHRyID49ICggIHRoaXMgICktPl9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxv
dyAoICB0aGlzICApID09ICgtMSkgID8gKC0xKSAgOiAqKHVuc2lnbmVkIGNoYXIgKikgKCAgdGhp
cyAgKS0+X0lPX3JlYWRfcHRyKSAgOyB9CiAgICBpbnQgc25leHRjKCkgewoJaWYgKF9JT19yZWFk
X3B0ciA+PSBfSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3codGhpcykgPT0gKC0xKSApCgkgIHJl
dHVybiAoLTEpIDsKCWVsc2UgcmV0dXJuIF9JT19yZWFkX3B0cisrLCBzZ2V0YygpOyB9CiAgICB2
b2lkIHN0b3NzYygpIHsgaWYgKF9JT19yZWFkX3B0ciA8IF9JT19yZWFkX2VuZCkgX0lPX3JlYWRf
cHRyKys7IH0KICAgIGludCB2c2NhbihjaGFyIGNvbnN0ICpmbXQwLCBfR192YV9saXN0ICBhcCwg
aW9zKiBzdHJlYW0gPSBfX251bGwgKTsKICAgIGludCBzY2FuKGNoYXIgY29uc3QgKmZtdDAgLi4u
KTsKICAgIGludCB2Zm9ybShjaGFyIGNvbnN0ICpmbXQwLCBfR192YV9saXN0ICBhcCk7CiAgICBp
bnQgZm9ybShjaGFyIGNvbnN0ICpmbXQwIC4uLik7CgoKCgogICAgdmlydHVhbCBzdHJlYW1zaXpl
IHN5c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFtc2l6ZSBzaXplKTsKICAgIHZpcnR1YWwgc3RyZWFt
c2l6ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0cmVhbXNpemUpOwogICAgdmlydHVhbCBzdHJl
YW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBpbnQgc3lz
X2Nsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICAKCgoKCn07CgogCiAK
CmNsYXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFtYnVmIHsKICBwcm90ZWN0ZWQ6CiAgICB2b2lk
IGluaXQoKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgaW50IG9wZW5wcm90OyAgCiAgICBm
aWxlYnVmKCk7CiAgICBmaWxlYnVmKGludCBmZCk7CiAgICBmaWxlYnVmKGludCBmZCwgY2hhciog
cCwgaW50IGxlbik7CgoKCiAgICB+ZmlsZWJ1ZigpOwogICAgZmlsZWJ1ZiogYXR0YWNoKGludCBm
ZCk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpt
b2RlKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGlvczo6b3Blbm1v
ZGUgbW9kZSwgaW50IHByb3QgPSAwNjY0KTsKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOwog
ICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7CiAgICBpbnQgaXNfb3Blbigp
IGNvbnN0IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsgfQogICAgaW50IGZkKCkgY29uc3QgeyByZXR1
cm4gaXNfb3BlbigpID8gX2ZpbGVubyA6ICgtMSkgOyB9CiAgICBmaWxlYnVmKiBjbG9zZSgpOwog
ICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29m
ZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICB2
aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGludCBsZW4pOwogICAgc3RyZWFtc2l6
ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHN0cmVhbXNpemUgeHNn
ZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIGludCBzeW5jKCk7CiAgcHJv
dGVjdGVkOiAgCiAKICAgIGludCBpc19yZWFkaW5nKCkgeyByZXR1cm4gZWJhY2soKSAhPSBlZ3B0
cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyByZXR1cm4gaXNfcmVhZGluZygpID8gIGdwdHIo
KSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciogZmlsZV9wdHIoKSB7IHJldHVybiBlR3B0cigp
OyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJl
YW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBf
c2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0ZShjb25zdCBjaGFyKiwg
c3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICAKICAgIHZpcnR1
YWwgaW50IHN5c19jbG9zZSgpOwoKCgoKfTsKCmlubGluZSB2b2lkIGlvczo6aW5pdChzdHJlYW1i
dWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsKCQlfc3RhdGUgPSBzYiA/IGlvczo6Z29vZGJpdCA6
IGlvczo6YmFkYml0OyBfZXhjZXB0aW9ucz0wOwoJCV9zdHJidWY9c2I7IF90aWUgPSB0aWVfdG87
IF93aWR0aD0wOyBfZmlsbD0nICc7CgoJCV9mbGFncz1pb3M6OnNraXB3c3xpb3M6OmRlYzsKCgoK
CQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9CgppbmxpbmUgaW9zOjppb3Moc3RyZWFtYnVm
KiBzYiwgb3N0cmVhbSogdGllX3RvKSB7IGluaXQoc2IsIHRpZV90byk7IH0KCmlubGluZSBpb3M6
On5pb3MoKSB7CgoKCiAgICAgCiAgICAgCiAgICBvcGVyYXRvciBkZWxldGVbXSAoX2FycmF5cyk7
Cn0KfSAgCgojIDMxICIvcy9nY2MtMi45NS4yL3N1bng4Nl81Ni9saWIvZ2NjLWxpYi9pMzg2LXBj
LXNvbGFyaXMyLjYvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIg
MiAzCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdHlwZWRl
ZiBpb3MmICgqX19tYW5pcCkoaW9zJik7CnR5cGVkZWYgaXN0cmVhbSYgKCpfX2ltYW5pcCkoaXN0
cmVhbSYpOwp0eXBlZGVmIG9zdHJlYW0mICgqX19vbWFuaXApKG9zdHJlYW0mKTsKCmV4dGVybiBp
c3RyZWFtJiB3cyhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYg
b3V0cyk7CmV4dGVybiBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVh
bSYgZW5kcyhvc3RyZWFtJiBvdXRzKTsKCmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBp
b3MKewogICAgIAogICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgogICAgb3N0cmVhbSgpIHsg
fQogICAgb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVkPSBfX251bGwgKTsKICAg
IGludCBvcGZ4KCkgewoJaWYgKCFnb29kKCkpIHJldHVybiAwOwoJZWxzZSB7IGlmIChfdGllKSBf
dGllLT5mbHVzaCgpOyAgOyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgIDsKCQkgIGlm
IChmbGFncygpICYgKGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkgICAgICBkb19vc2Z4KCk7
IH0KICAgIG9zdHJlYW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9zdHJi
dWYtPnNwdXRjKGMpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgogICAgb3N0cmVhbSYgd3JpdGUoY29u
c3QgY2hhciAqcywgc3RyZWFtc2l6ZSBuKTsKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHVuc2ln
bmVkIGNoYXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNo
YXIqKXMsIG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHNpZ25lZCBjaGFyICpzLCBzdHJl
YW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBv
c3RyZWFtJiB3cml0ZShjb25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJu
IHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1wb3Mp
OwogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9z
IHRlbGxwKCk7CiAgICBvc3RyZWFtJiBmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAg
b3N0cmVhbSYgdmZvcm0oY29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsKCiAg
ICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVu
c2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFt
JiBvcGVyYXRvcjw8KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsg
fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJlYW0mIG9w
ZXJhdG9yPDwoY29uc3QgdW5zaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNv
bnN0IGNoYXIqKXM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIg
KnMpCgl7IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KGNvbnN0IHZvaWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7
CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9w
ZXJhdG9yPDwobG9uZyBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBu
KTsKCiAgICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBsb25nIG4pOwog
ICAgX19leHRlbnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBu
KTsKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgo
aW50KW4pO30KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgbikge3JldHVy
biBvcGVyYXRvcjw8KCh1bnNpZ25lZCBpbnQpbik7fQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwo
Ym9vbCBiKSB7IHJldHVybiBvcGVyYXRvcjw8KChpbnQpYik7IH0KCiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KGRvdWJsZSBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZmxvYXQgbikgeyByZXR1
cm4gb3BlcmF0b3I8PCgoZG91YmxlKW4pOyB9CgoKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxv
bmcgZG91YmxlIG4pIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwoX19vbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7IH0K
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJl
dHVybiAqdGhpczt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHN0cmVhbWJ1ZiopOwoKCgp9OwoK
Y2xhc3MgaXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGlvcwp7CiAgICAgCnByb3RlY3RlZDoKICAg
IF9HX3NpemVfdCAgX2djb3VudDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBwdWJsaWM6CiAgICBp
c3RyZWFtKCk6IF9nY291bnQgKDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3Ry
ZWFtKnRpZWQ9IF9fbnVsbCApOwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50IGxlbiwg
Y2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwg
aW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVu
LCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldChjaGFyJiBjKTsKICAgIGlzdHJlYW0mIGdldCh1
bnNpZ25lZCBjaGFyJiBjKSB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBn
ZXRsaW5lKGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVh
bSYgZ2V0bGluZSh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4n
KQoJeyByZXR1cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVh
bSYgZ2V0KHNpZ25lZCBjaGFyJiBjKSAgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0
cmVhbSYgZ2V0KHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJ
eyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXRs
aW5lKHNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1
cm4gZ2V0bGluZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChj
aGFyICpwdHIsIHN0cmVhbXNpemUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIg
KnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9
CiAgICBpc3RyZWFtJiByZWFkKHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAg
eyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpw
dHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQog
ICAgaXN0cmVhbSYgZ2V0KHN0cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlz
dHJlYW0mIGdldHMoY2hhciAqKnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGlu
dCBuZWVkID0gMCkgewoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAw
OyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1ZigpLT5p
bl9hdmFpbCgpIDwgbmVlZCkpIF90aWUtPmZsdXNoKCk7CgkgIGlmICghbmVlZCAmJiAoZmxhZ3Mo
KSAmIGlvczo6c2tpcHdzKSkgcmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9
CiAgICB9CiAgICBpbnQgaXBmeDAoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxi
aXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllKSBfdGllLT5mbHVzaCgp
OwoJICBpZiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxz
ZSByZXR1cm4gMTsKCX0KICAgIH0KICAgIGludCBpcGZ4MSgpIHsgIAoJaWYgKCFnb29kKCkpIHsg
c2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUg
JiYgcmRidWYoKS0+aW5fYXZhaWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwoJICByZXR1cm4gMTsK
CX0KICAgIH0KICAgIHZvaWQgaXNmeCgpIHsgIDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4
MSgpKSByZXR1cm4gKC0xKSA7CgkJZWxzZSB7IGludCBjaCA9IF9zdHJidWYtPnNidW1wYygpOwoJ
CSAgICAgICBpZiAoY2ggPT0gKC0xKSApIHNldChpb3M6OmVvZmJpdCk7CgkJICAgICAgIGlzZngo
KTsKCQkgICAgICAgcmV0dXJuIGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVlaygpOwogICAgX0df
c2l6ZV90ICBnY291bnQoKSB7IHJldHVybiBfZ2NvdW50OyB9CiAgICBpc3RyZWFtJiBpZ25vcmUo
aW50IG49MSwgaW50IGRlbGltID0gKC0xKSApOwogICAgaW50IHN5bmMgKCk7CiAgICBpc3RyZWFt
JiBzZWVrZyhzdHJlYW1wb3MpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtb2ZmLCBfc2Vla19k
aXIpOwogICAgc3RyZWFtcG9zIHRlbGxnKCk7CiAgICBpc3RyZWFtJiBwdXRiYWNrKGNoYXIgY2gp
IHsKCWlmIChnb29kKCkgJiYgX3N0cmJ1Zi0+c3B1dGJhY2tjKGNoKSA9PSAoLTEpICkgY2xlYXIo
aW9zOjpiYWRiaXQpOwoJcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHVuZ2V0KCkgewoJaWYg
KGdvb2QoKSAmJiBfc3RyYnVmLT5zdW5nZXRjKCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0
KTsKCXJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCAu
Li4pOwogICAgaXN0cmVhbSYgdnNjYW4oY29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBh
cmdzKTsKCgoKCgoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciopOwogICAgaXN0cmVhbSYg
b3BlcmF0b3I+Pih1bnNpZ25lZCBjaGFyKiBwKSB7IHJldHVybiBvcGVyYXRvcj4+KChjaGFyKilw
KTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hhcipwKSB7IHJldHVybiBvcGVy
YXRvcj4+KChjaGFyKilwKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyJiBjKTsKICAg
IGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgY2hhciYgYykge3JldHVybiBvcGVyYXRvcj4+
KChjaGFyJiljKTt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyJiBjKSB7cmV0
dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oaW50Jik7
CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcmKTsKCiAgICBfX2V4dGVuc2lvbl9fIGlzdHJl
YW0mIG9wZXJhdG9yPj4obG9uZyBsb25nJik7CiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9w
ZXJhdG9yPj4odW5zaWduZWQgbG9uZyBsb25nJik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihz
aG9ydCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmKTsKICAgIGlzdHJl
YW0mIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1
bnNpZ25lZCBzaG9ydCYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oYm9vbCYpOwoKICAgIGlz
dHJlYW0mIG9wZXJhdG9yPj4oZmxvYXQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oZG91Ymxl
Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJik7CiAgICBpc3RyZWFtJiBv
cGVyYXRvcj4+KCBfX21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30K
ICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oX19pbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgq
dGhpcyk7IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc3RyZWFtYnVmKik7Cn07CgpjbGFzcyBp
b3N0cmVhbSA6IHB1YmxpYyBpc3RyZWFtLCBwdWJsaWMgb3N0cmVhbQp7CiAgcHVibGljOgogICAg
aW9zdHJlYW0oKSB7IH0KICAgIGlvc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0g
X19udWxsICk7Cn07CgpjbGFzcyBfSU9faXN0cmVhbV93aXRoYXNzaWduIDogcHVibGljIGlzdHJl
YW0gewpwdWJsaWM6CiAgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KGlzdHJlYW0m
KTsKICBfSU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1fd2l0aGFz
c2lnbiYgcmhzKQogICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3RyZWFtJj4g
KHJocykpOyB9Cn07CgpjbGFzcyBfSU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGljIG9zdHJl
YW0gewpwdWJsaWM6CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9zdHJlYW0m
KTsKICBfSU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1fd2l0aGFz
c2lnbiYgcmhzKQogICAgeyByZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxvc3RyZWFtJj4g
KHJocykpOyB9Cn07CgpleHRlcm4gX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBjaW47CiAKZXh0ZXJu
IF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gY291dCwgY2VycjsKCmV4dGVybiBfSU9fb3N0cmVhbV93
aXRoYXNzaWduIGNsb2cKCgoKOwoKZXh0ZXJuIGlzdHJlYW0mIGxvY2soaXN0cmVhbSYgaW5zKTsK
ZXh0ZXJuIGlzdHJlYW0mIHVubG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgbG9j
ayhvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIHVubG9jayhvc3RyZWFtJiBvdXRzKTsK
CnN0cnVjdCBJb3N0cmVhbV9pbml0IHsgfSA7ICAgCgppbmxpbmUgaW9zJiBkZWMoaW9zJiBpKQp7
IGkuc2V0Zihpb3M6OmRlYywgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsg
fQppbmxpbmUgaW9zJiBoZXgoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmhleCwgaW9zOjpkZWN8aW9z
OjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBvY3QoaW9zJiBpKQp7IGku
c2V0Zihpb3M6Om9jdCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQp9
ICAKCgojIDU3ICIuLi9jb25kb3JfaW5jbHVkZXMvY29uZG9yX2NvbW1vbi5oIiAyCgojIDEgIi9z
L2djYy0yLjk1LjIvc3VueDg2XzU2L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNi8yLjk1
LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pb21hbmlwLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCgoKCmV4dGVybiAiQysrIiB7CiAKIAog
CgogCiAKIAogCnRlbXBsYXRlPGNsYXNzIFRQPiBjbGFzcyBzbWFuaXA7ICAKCnRlbXBsYXRlPGNs
YXNzIFRQPiBjbGFzcyBzYXBwIHsKICAgIGlvcyYgKCpfZikoaW9zJiwgVFApOwpwdWJsaWM6IAog
ICAgc2FwcChpb3MmICgqZikoaW9zJiwgVFApKSA6IF9mKGYpIHt9CiAgICAgCiAgICBzbWFuaXA8
VFA+IG9wZXJhdG9yKCkoVFAgYSkgCiAgICAgIHsgcmV0dXJuIHNtYW5pcDxUUD4oX2YsIGEpOyB9
Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUUD4KaW5saW5lIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVh
bSYgaSwgY29uc3Qgc21hbmlwPFRQPiYgbSk7CnRlbXBsYXRlPGNsYXNzIFRQPgppbmxpbmUgb3N0
cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvLCBjb25zdCBzbWFuaXA8VFA+JiBtKTsKCnRlbXBs
YXRlIDxjbGFzcyBUUD4gY2xhc3Mgc21hbmlwIHsKICAgIGlvcyYgKCpfZikoaW9zJiwgVFApOwog
ICAgVFAgX2E7CnB1YmxpYzoKICAgIHNtYW5pcChpb3MmICgqZikoaW9zJiwgVFApLCBUUCBhKSA6
IF9mKGYpLCBfYShhKSB7fQogICAgIAogICAgZnJpZW5kIAogICAgICBpc3RyZWFtJiBvcGVyYXRv
cj4+IDw+KGlzdHJlYW0mIGksIGNvbnN0IHNtYW5pcDxUUD4mIG0pOwogICAgZnJpZW5kCiAgICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwgPD4ob3N0cmVhbSYgbywgY29uc3Qgc21hbmlwPFRQPiYgbSk7
Cn07CgoKX19leHRlbnNpb25fXyBleHRlcm4gdGVtcGxhdGUgY2xhc3Mgc21hbmlwPGludD47Cl9f
ZXh0ZW5zaW9uX18gZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHNtYW5pcDxpb3M6OmZtdGZsYWdzPjsK
Cgp0ZW1wbGF0ZTxjbGFzcyBUUD4KaW5saW5lIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYg
aSwgY29uc3Qgc21hbmlwPFRQPiYgbSkKeyAoKm0uX2YpKGksIG0uX2EpOyByZXR1cm4gaTsgfQoK
dGVtcGxhdGU8Y2xhc3MgVFA+CmlubGluZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG8s
IGNvbnN0IHNtYW5pcDxUUD4mIG0pCnsgKCptLl9mKShvLCBtLl9hKTsgcmV0dXJuIG87fQoKCl9f
ZXh0ZW5zaW9uX18gZXh0ZXJuIAp0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0m
LCBjb25zdCBzbWFuaXA8aW50PiYpOwpfX2V4dGVuc2lvbl9fIGV4dGVybiAKdGVtcGxhdGUgaXN0
cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY29uc3Qgc21hbmlwPGlvczo6Zm10ZmxhZ3M+Jik7
Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIAp0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJl
YW0mLCBjb25zdCBzbWFuaXA8aW50PiYpOwpfX2V4dGVuc2lvbl9fIGV4dGVybiAKdGVtcGxhdGUg
b3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3Qgc21hbmlwPGlvczo6Zm10ZmxhZ3M+
Jik7CgoKIAogCiAKIAp0ZW1wbGF0ZTxjbGFzcyBUUD4gY2xhc3MgaW1hbmlwOyAKCnRlbXBsYXRl
PGNsYXNzIFRQPiBjbGFzcyBpYXBwIHsKICAgIGlzdHJlYW0mICgqX2YpKGlzdHJlYW0mLCBUUCk7
CnB1YmxpYzogCiAgICBpYXBwKGlzdHJlYW0mICgqZikoaXN0cmVhbSYsVFApKSA6IF9mKGYpIHt9
CiAgICAgCiAgICBpbWFuaXA8VFA+IG9wZXJhdG9yKCkoVFAgYSkKICAgICAgIHsgcmV0dXJuIGlt
YW5pcDxUUD4oX2YsIGEpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVFA+CmlubGluZSBpc3RyZWFt
JiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjb25zdCBpbWFuaXA8VFA+Jik7Cgp0ZW1wbGF0ZSA8Y2xh
c3MgVFA+IGNsYXNzIGltYW5pcCB7CiAgICBpc3RyZWFtJiAoKl9mKShpc3RyZWFtJiwgVFApOwog
ICAgVFAgX2E7CnB1YmxpYzoKICAgIGltYW5pcChpc3RyZWFtJiAoKmYpKGlzdHJlYW0mLCBUUCks
IFRQIGEpIDogX2YoZiksIF9hKGEpIHt9CiAgICAgCiAgICBmcmllbmQKICAgICAgaXN0cmVhbSYg
b3BlcmF0b3I+PiA8Pihpc3RyZWFtJiBpLCBjb25zdCBpbWFuaXA8VFA+JiBtKTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBUUD4KaW5saW5lIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYgaSwgY29u
c3QgaW1hbmlwPFRQPiYgbSkKeyByZXR1cm4gKCptLl9mKSggaSwgbS5fYSk7IH0KCiAKIAogCiAK
dGVtcGxhdGU8Y2xhc3MgVFA+IGNsYXNzIG9tYW5pcDsgCgp0ZW1wbGF0ZTxjbGFzcyBUUD4gY2xh
c3Mgb2FwcCB7CiAgICBvc3RyZWFtJiAoKl9mKShvc3RyZWFtJiwgVFApOwpwdWJsaWM6IAogICAg
b2FwcChvc3RyZWFtJiAoKmYpKG9zdHJlYW0mLFRQKSkgOiBfZihmKSB7fQogICAgIAogICAgb21h
bmlwPFRQPiBvcGVyYXRvcigpKFRQIGEpCiAgICAgIHsgcmV0dXJuIG9tYW5pcDxUUD4oX2YsIGEp
OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVFA+CmlubGluZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9z
dHJlYW0mLCBjb25zdCBvbWFuaXA8VFA+Jik7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVFA+IGNsYXNzIG9t
YW5pcCB7CiAgICBvc3RyZWFtJiAoKl9mKShvc3RyZWFtJiwgVFApOwogICAgVFAgX2E7CnB1Ymxp
YzoKICAgIG9tYW5pcChvc3RyZWFtJiAoKmYpKG9zdHJlYW0mLCBUUCksIFRQIGEpIDogX2YoZiks
IF9hKGEpIHt9CiAgICAgCiAgICBmcmllbmQKICAgICAgb3N0cmVhbSYgb3BlcmF0b3I8PCA8Pihv
c3RyZWFtJiBvLCBjb25zdCBvbWFuaXA8VFA+JiBtKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBUUD4K
aW5saW5lIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgbywgY29uc3Qgb21hbmlwPFRQPiYg
bSkKeyByZXR1cm4gKCptLl9mKShvLCBtLl9hKTsgfQoKIAogCiAKCiAKIAogCiAKCgoKCgpleHRl
cm4gaW9zJiBfX2lvbWFuaXBfc2V0YmFzZSAgKGlvcyYsICAgaW50ICk7IGlubGluZSAgIHNtYW5p
cCA8ICBpbnQgPiAgIHNldGJhc2UgICggIGludCAgbikgeyByZXR1cm4gICBzbWFuaXAgPCAgaW50
ID4gKF9faW9tYW5pcF9zZXRiYXNlICwgbik7IH0gCmV4dGVybiBpb3MmIF9faW9tYW5pcF9zZXRm
aWxsICAoaW9zJiwgICBpbnQgKTsgaW5saW5lICAgc21hbmlwIDwgIGludCA+ICAgc2V0ZmlsbCAg
KCAgaW50ICBuKSB7IHJldHVybiAgIHNtYW5pcCA8ICBpbnQgPiAoX19pb21hbmlwX3NldGZpbGwg
LCBuKTsgfSAKZXh0ZXJuIGlvcyYgX19pb21hbmlwX3NldHByZWNpc2lvbiAgKGlvcyYsICAgaW50
ICk7IGlubGluZSAgIHNtYW5pcCA8ICBpbnQgPiAgIHNldHByZWNpc2lvbiAgKCAgaW50ICBuKSB7
IHJldHVybiAgIHNtYW5pcCA8ICBpbnQgPiAoX19pb21hbmlwX3NldHByZWNpc2lvbiAsIG4pOyB9
IApleHRlcm4gaW9zJiBfX2lvbWFuaXBfc2V0dyAgKGlvcyYsICAgaW50ICk7IGlubGluZSAgIHNt
YW5pcCA8ICBpbnQgPiAgIHNldHcgICggIGludCAgbikgeyByZXR1cm4gICBzbWFuaXAgPCAgaW50
ID4gKF9faW9tYW5pcF9zZXR3ICwgbik7IH0gCgpleHRlcm4gaW9zJiBfX2lvbWFuaXBfcmVzZXRp
b3NmbGFncyAgKGlvcyYsICAgaW9zOjpmbXRmbGFncyApOyBpbmxpbmUgICBzbWFuaXAgPCAgaW9z
OjpmbXRmbGFncyA+ICAgcmVzZXRpb3NmbGFncyAgKCAgaW9zOjpmbXRmbGFncyAgbikgeyByZXR1
cm4gICBzbWFuaXAgPCAgaW9zOjpmbXRmbGFncyA+IChfX2lvbWFuaXBfcmVzZXRpb3NmbGFncyAs
IG4pOyB9IApleHRlcm4gaW9zJiBfX2lvbWFuaXBfc2V0aW9zZmxhZ3MgIChpb3MmLCAgIGlvczo6
Zm10ZmxhZ3MgKTsgaW5saW5lICAgc21hbmlwIDwgIGlvczo6Zm10ZmxhZ3MgPiAgIHNldGlvc2Zs
YWdzICAoICBpb3M6OmZtdGZsYWdzICBuKSB7IHJldHVybiAgIHNtYW5pcCA8ICBpb3M6OmZtdGZs
YWdzID4gKF9faW9tYW5pcF9zZXRpb3NmbGFncyAsIG4pOyB9IAp9ICAKCgojIDU4ICIuLi9jb25k
b3JfaW5jbHVkZXMvY29uZG9yX2NvbW1vbi5oIiAyCgojIDEgIi9zL2djYy0yLjk1LjIvc3VueDg2
XzU2L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNi8yLjk1LjIvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9mc3RyZWFtLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKI3By
YWdtYSBpbnRlcmZhY2UKCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgZnN0cmVhbWJhc2UgOiB2aXJ0
dWFsIHB1YmxpYyBpb3MgewoKICAgIG11dGFibGUgZmlsZWJ1ZiBfX215X2ZiOyAgCgogICAgdm9p
ZCBfX2ZiX2luaXQgKCk7CiAgcHVibGljOgogICAgZnN0cmVhbWJhc2UoKTsKICAgIGZzdHJlYW1i
YXNlKGludCBmZCk7CiAgICBmc3RyZWFtYmFzZShpbnQgZmQsIGNoYXIgKnAsIGludCBsKTsgIAog
ICAgZnN0cmVhbWJhc2UoY29uc3QgY2hhciAqbmFtZSwgaW50IG1vZGUsIGludCBwcm90PTA2NjQp
OwogICAgdm9pZCBjbG9zZSgpOwoKICAgIGZpbGVidWYqIHJkYnVmKCkgY29uc3QgeyByZXR1cm4g
Jl9fbXlfZmI7IH0KCgoKICAgIHZvaWQgb3Blbihjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZSwg
aW50IHByb3Q9MDY2NCk7CiAgICBpbnQgaXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIHJkYnVmKCkt
PmlzX29wZW4oKTsgfQogICAgdm9pZCBzZXRidWYoY2hhciAqcHRyLCBpbnQgbGVuKSB7IHJkYnVm
KCktPnNldGJ1ZihwdHIsIGxlbik7IH0KICAgIHZvaWQgYXR0YWNoKGludCBmZCk7CgoKCgp9OwoK
Y2xhc3MgaWZzdHJlYW0gOiBwdWJsaWMgZnN0cmVhbWJhc2UsIHB1YmxpYyBpc3RyZWFtIHsKICBw
dWJsaWM6CiAgICBpZnN0cmVhbSgpIDogZnN0cmVhbWJhc2UoKSB7IH0KICAgIGlmc3RyZWFtKGlu
dCBmZCkgOiBmc3RyZWFtYmFzZShmZCkgeyB9CiAgICBpZnN0cmVhbShpbnQgZmQsIGNoYXIgKnAs
IGludCBsKSA6IGZzdHJlYW1iYXNlKGZkLCBwLCBsKSB7IH0gIAogICAgaWZzdHJlYW0oY29uc3Qg
Y2hhciAqbmFtZSwgaW50IG1vZGU9aW9zOjppbiwgaW50IHByb3Q9MDY2NCkKCTogZnN0cmVhbWJh
c2UobmFtZSwgbW9kZSwgcHJvdCkgeyB9CiAgICB2b2lkIG9wZW4oY29uc3QgY2hhciAqbmFtZSwg
aW50IG1vZGU9aW9zOjppbiwgaW50IHByb3Q9MDY2NCkKCXsgZnN0cmVhbWJhc2U6Om9wZW4obmFt
ZSwgbW9kZSwgcHJvdCk7IH0KfTsKCmNsYXNzIG9mc3RyZWFtIDogcHVibGljIGZzdHJlYW1iYXNl
LCBwdWJsaWMgb3N0cmVhbSB7CiAgcHVibGljOgogICAgb2ZzdHJlYW0oKSA6IGZzdHJlYW1iYXNl
KCkgeyB9CiAgICBvZnN0cmVhbShpbnQgZmQpIDogZnN0cmVhbWJhc2UoZmQpIHsgfQogICAgb2Zz
dHJlYW0oaW50IGZkLCBjaGFyICpwLCBpbnQgbCkgOiBmc3RyZWFtYmFzZShmZCwgcCwgbCkgeyB9
ICAKICAgIG9mc3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlPWlvczo6b3V0LCBpbnQg
cHJvdD0wNjY0KQoJOiBmc3RyZWFtYmFzZShuYW1lLCBtb2RlLCBwcm90KSB7IH0KICAgIHZvaWQg
b3Blbihjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZT1pb3M6Om91dCwgaW50IHByb3Q9MDY2NCkK
CXsgZnN0cmVhbWJhc2U6Om9wZW4obmFtZSwgbW9kZSwgcHJvdCk7IH0KfTsKCmNsYXNzIGZzdHJl
YW0gOiBwdWJsaWMgZnN0cmVhbWJhc2UsIHB1YmxpYyBpb3N0cmVhbSB7CiAgcHVibGljOgogICAg
ZnN0cmVhbSgpIDogZnN0cmVhbWJhc2UoKSB7IH0KICAgIGZzdHJlYW0oaW50IGZkKSA6IGZzdHJl
YW1iYXNlKGZkKSB7IH0KICAgIGZzdHJlYW0oY29uc3QgY2hhciAqbmFtZSwgaW50IG1vZGUsIGlu
dCBwcm90PTA2NjQpCgk6IGZzdHJlYW1iYXNlKG5hbWUsIG1vZGUsIHByb3QpIHsgfQogICAgZnN0
cmVhbShpbnQgZmQsIGNoYXIgKnAsIGludCBsKSA6IGZzdHJlYW1iYXNlKGZkLCBwLCBsKSB7IH0g
IAogICAgdm9pZCBvcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlLCBpbnQgcHJvdD0wNjY0
KQoJeyBmc3RyZWFtYmFzZTo6b3BlbihuYW1lLCBtb2RlLCBwcm90KTsgfQp9Owp9ICAKCiMgNTkg
Ii4uL2NvbmRvcl9pbmNsdWRlcy9jb25kb3JfY29tbW9uLmgiIDIKCgoKCgoKIyAzICJncmlkbWFu
YWdlci5DIiAyCgojIDEgIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25kb3JfY2xhc3NhZC5oIiAxCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCgoKCgoKCiMgMSAiLi4vY29uZG9yX2luY2x1
ZGVzL2NvbmRvcl9leHBydHlwZS5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAog
CiAKIAogCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGVudW0KewogICAKICBMWF9WQVJJQUJMRSwKICBM
WF9JTlRFR0VSLAogIExYX0ZMT0FULAogIExYX1NUUklORywKICBMWF9CT09MLAogIExYX05VTEws
CiAgTFhfVU5ERUZJTkVELAogIExYX0VSUk9SLAoKICAgCiAgTFhfQVNTSUdOLAogIExYX0FHR0FE
RCwKICBMWF9BR0dFUSwKICBMWF9BTkQsCiAgTFhfT1IsCiAgTFhfTFBBUkVOLAogIExYX1JQQVJF
TiwKICBMWF9NQUNSTywKICBMWF9NRVRBX0VRLAogIExYX01FVEFfTkVRLAogIExYX0VRLAogIExY
X05FUSwKICBMWF9MVCwKICBMWF9MRSwKICBMWF9HVCwKICBMWF9HRSwKICBMWF9BREQsCiAgTFhf
U1VCLAogIExYX01VTFQsCiAgTFhfRElWLAogIExYX0VPRiwKCiAgTFhfRVhQUiwKCiAgTk9UX0tF
WVdPUkQKfSBMZXhlbWVUeXBlOwoKCiMgMzQgIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25kb3JfY2xh
c3NhZC5oIiAyCgojIDEgIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25kb3JfYXN0LmgiIDEKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgoKCgoKIyAxICIuLi9j
b25kb3JfaW5jbHVkZXMvY29uZG9yX2FzdGJhc2UuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgpj
bGFzcyBBdHRyTGlzdDsKY2xhc3MgRXZhbFJlc3VsdDsKCmNsYXNzIEV4cHJUcmVlCnsKICAgIHB1
YmxpYyA6CgogICAgICAgIHZvaWQgICAgICAgICAgICAJb3BlcmF0b3IgZGVsZXRlKHZvaWQqKTsK
CQl2aXJ0dWFsIGludAkgICAgCW9wZXJhdG9yID09KEV4cHJUcmVlJik7CgkJdmlydHVhbCBpbnQJ
ICAgIAlvcGVyYXRvciA+KEV4cHJUcmVlJik7CgkJdmlydHVhbCBpbnQJICAgIAlvcGVyYXRvciA+
PShFeHByVHJlZSYpOwoJCXZpcnR1YWwgaW50CSAgICAJb3BlcmF0b3IgPChFeHByVHJlZSYpOwoJ
CXZpcnR1YWwgaW50CSAgICAJb3BlcmF0b3IgPD0oRXhwclRyZWUmKTsKCiAgICAgICAgTGV4ZW1l
VHlwZQkJCU15VHlwZSgpIHsgcmV0dXJuIHR5cGU7IH0KCQlpbnQJCQkJCU15UmVmKCkJIHsgcmV0
dXJuIHJlZjsgfQoJCXZpcnR1YWwgRXhwclRyZWUqICAgTEFyZygpICAgeyByZXR1cm4gX19udWxs
IDsgfQoJCXZpcnR1YWwgRXhwclRyZWUqICAgUkFyZygpICAgeyByZXR1cm4gX19udWxsIDsgfQog
ICAgICAgIEV4cHJUcmVlKiAgICAgICAgICAgQ29weSgpOyAgICAgICAgCiAgICAgICAgdmlydHVh
bCB2b2lkICAgICAgICBEaXNwbGF5KCk7ICAgICAKCQl2aXJ0dWFsIHZvaWQgICAgICAgIFByaW50
VG9TdHIoY2hhciopIHt9ICAKCgkJaW50ICAgICAgICAgCQlFdmFsVHJlZShBdHRyTGlzdCosIEV2
YWxSZXN1bHQqKTsKCQlpbnQgICAgICAgICAJCUV2YWxUcmVlKEF0dHJMaXN0KiwgQXR0ckxpc3Qq
LCBFdmFsUmVzdWx0Kik7CgoJCWNoYXIgICAgICAgICAgICAgICAgdW5pdDsgICAgICAgICAgCgoJ
CSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCUV4cHJUcmVlOjpFeHByVHJlZSgp
OnVuaXQoJ1wwJyksIHN1bUZsYWcoKDApICksIGV2YWxGbGFnKCgwKSApIHt9OwoKCiAgICBwcm90
ZWN0ZWQgOgoJCXZpcnR1YWwgaW50ICAgICAgICAgX0V2YWxUcmVlKGNsYXNzIEF0dHJMaXN0Kiwg
RXZhbFJlc3VsdCopID0gMDsKCQl2aXJ0dWFsIGludCAgICAgICAgIF9FdmFsVHJlZShBdHRyTGlz
dCosIEF0dHJMaXN0KiwgRXZhbFJlc3VsdCopID0gMDsKCgkJaW50ICAgICAgICAgICAgICAgICBy
ZWY7ICAgICAgICAgICAKCQlMZXhlbWVUeXBlCSAgICAJdHlwZTsgICAgICAgICAgCgkJaW50ICAg
ICAgICAgICAgICAgICBjYXJkaW5hbGl0eTsgICAKCQlpbnQJCSAgICAJCXN1bUZsYWc7ICAgICAg
IAoJCWJvb2wJCQkJZXZhbEZsYWc7CSAgIAp9OwoKY2xhc3MgVmFyaWFibGVCYXNlIDogcHVibGlj
IEV4cHJUcmVlCnsKICAgIHB1YmxpYyA6CiAgCgkgIAlWYXJpYWJsZUJhc2UoY2hhciopOwoKCQl2
aXJ0dWFsIGludAkgICAgb3BlcmF0b3IgPT0oRXhwclRyZWUmKTsKCgkJdmlydHVhbCB2b2lkCURp
c3BsYXkoKTsKCQljaGFyKgljb25zdAlOYW1lKCkgeyByZXR1cm4gbmFtZTsgfQoKCQlmcmllbmQJ
Y2xhc3MJRXhwclRyZWU7CgogICAgcHJvdGVjdGVkIDoKCQl2aXJ0dWFsIGludCAgICAgICAgIF9F
dmFsVHJlZShjbGFzcyBBdHRyTGlzdCosIEV2YWxSZXN1bHQqKSA9IDA7CgkJdmlydHVhbCBpbnQg
ICAgICAgICBfRXZhbFRyZWUoQXR0ckxpc3QqLCBBdHRyTGlzdCosIEV2YWxSZXN1bHQqKSA9IDA7
CgogIAkJY2hhciogICAgICAgICAgICAgICBuYW1lOwp9OwoKY2xhc3MgSW50ZWdlckJhc2UgOiBw
dWJsaWMgRXhwclRyZWUKewogICAgcHVibGljIDoKCiAgCQlJbnRlZ2VyQmFzZShpbnQpOwoKCQl2
aXJ0dWFsIGludAkgICAgb3BlcmF0b3IgPT0oRXhwclRyZWUmKTsKCQl2aXJ0dWFsIGludAkgICAg
b3BlcmF0b3IgPihFeHByVHJlZSYpOwoJCXZpcnR1YWwgaW50CSAgICBvcGVyYXRvciA+PShFeHBy
VHJlZSYpOwoJCXZpcnR1YWwgaW50CSAgICBvcGVyYXRvciA8KEV4cHJUcmVlJik7CgkJdmlydHVh
bCBpbnQJICAgIG9wZXJhdG9yIDw9KEV4cHJUcmVlJik7CgoJCXZpcnR1YWwgdm9pZAlEaXNwbGF5
KCk7CgkJaW50CQkgICAgCVZhbHVlKCk7CgogICAgcHJvdGVjdGVkIDoKCQl2aXJ0dWFsIGludCAg
ICAgICAgIF9FdmFsVHJlZShjbGFzcyBBdHRyTGlzdCosIEV2YWxSZXN1bHQqKSA9IDA7CgkJdmly
dHVhbCBpbnQgICAgICAgICBfRXZhbFRyZWUoQXR0ckxpc3QqLCBBdHRyTGlzdCosIEV2YWxSZXN1
bHQqKSA9IDA7CgogIAkJaW50CSAJICAgIHZhbHVlOwp9OwoKY2xhc3MgRmxvYXRCYXNlIDogcHVi
bGljIEV4cHJUcmVlCnsKICAgIHB1YmxpYyA6CgogIAlGbG9hdEJhc2UoZmxvYXQpOwoKCXZpcnR1
YWwgaW50CSAgICBvcGVyYXRvciA9PShFeHByVHJlZSYpOwoJdmlydHVhbCBpbnQJICAgIG9wZXJh
dG9yID4oRXhwclRyZWUmKTsKCXZpcnR1YWwgaW50CSAgICBvcGVyYXRvciA+PShFeHByVHJlZSYp
OwoJdmlydHVhbCBpbnQJICAgIG9wZXJhdG9yIDwoRXhwclRyZWUmKTsKCXZpcnR1YWwgaW50CSAg
ICBvcGVyYXRvciA8PShFeHByVHJlZSYpOwoJCgl2aXJ0dWFsIHZvaWQgICAgRGlzcGxheSgpOwoJ
ZmxvYXQJCSAgICBWYWx1ZSgpOwoKICAgIHByb3RlY3RlZCA6CgkJdmlydHVhbCBpbnQgICAgICAg
ICBfRXZhbFRyZWUoY2xhc3MgQXR0ckxpc3QqLCBFdmFsUmVzdWx0KikgPSAwOwoJCXZpcnR1YWwg
aW50ICAgICAgICAgX0V2YWxUcmVlKEF0dHJMaXN0KiwgQXR0ckxpc3QqLCBFdmFsUmVzdWx0Kikg
PSAwOwoKICAJZmxvYXQJIAkgICAgdmFsdWU7Cn07CgpjbGFzcyBTdHJpbmdCYXNlIDogcHVibGlj
IEV4cHJUcmVlCnsKICAgIHB1YmxpYyA6CgoJU3RyaW5nQmFzZShjaGFyKik7CgoJdmlydHVhbCBp
bnQJICAgIG9wZXJhdG9yID09KEV4cHJUcmVlJik7CgoJdmlydHVhbCB2b2lkCURpc3BsYXkoKTsK
CWNoYXIqCWNvbnN0CVZhbHVlKCk7CgoJZnJpZW5kCWNsYXNzCUV4cHJUcmVlOwoKICAgIHByb3Rl
Y3RlZCA6CgkJdmlydHVhbCBpbnQgICAgICAgICBfRXZhbFRyZWUoY2xhc3MgQXR0ckxpc3QqLCBF
dmFsUmVzdWx0KikgPSAwOwoJCXZpcnR1YWwgaW50ICAgICAgICAgX0V2YWxUcmVlKEF0dHJMaXN0
KiwgQXR0ckxpc3QqLCBFdmFsUmVzdWx0KikgPSAwOwoKICAgCWNoYXIqICAgICAgICAgICB2YWx1
ZTsKfTsKCmNsYXNzIEJvb2xlYW5CYXNlIDogcHVibGljIEV4cHJUcmVlCnsKICAgIHB1YmxpYyA6
CgogIAlCb29sZWFuQmFzZShpbnQpOwoJdmlydHVhbCBpbnQJICAgIG9wZXJhdG9yID09KEV4cHJU
cmVlJik7CgoJdmlydHVhbCB2b2lkICAgICAgICBEaXNwbGF5KCk7CglpbnQgICAgICAgICAgICAg
ICAgIFZhbHVlKCk7CgogICAgcHJvdGVjdGVkIDoKCQl2aXJ0dWFsIGludCAgICAgICAgIF9FdmFs
VHJlZShjbGFzcyBBdHRyTGlzdCosIEV2YWxSZXN1bHQqKSA9IDA7CgkJdmlydHVhbCBpbnQgICAg
ICAgICBfRXZhbFRyZWUoQXR0ckxpc3QqLCBBdHRyTGlzdCosIEV2YWxSZXN1bHQqKSA9IDA7Cgog
ICAJaW50ICAgICAgICAgICAgICAgICB2YWx1ZTsKfTsKCgpjbGFzcyBVbmRlZmluZWRCYXNlIDog
cHVibGljIEV4cHJUcmVlCnsKICAgIHB1YmxpYyA6CgogIAlVbmRlZmluZWRCYXNlKCk7CgoJdmly
dHVhbCB2b2lkICAgICAgICBEaXNwbGF5KCk7CgogICAgcHJvdGVjdGVkIDoKCQl2aXJ0dWFsIGlu
dCAgICAgICAgIF9FdmFsVHJlZShjbGFzcyBBdHRyTGlzdCosIEV2YWxSZXN1bHQqKSA9IDA7CgkJ
dmlydHVhbCBpbnQgICAgICAgICBfRXZhbFRyZWUoQXR0ckxpc3QqLCBBdHRyTGlzdCosIEV2YWxS
ZXN1bHQqKSA9IDA7Cn07CgpjbGFzcyBFcnJvckJhc2UgOiBwdWJsaWMgRXhwclRyZWUKewogICAg
cHVibGljIDoKCiAgCUVycm9yQmFzZSgpOwoKCXZpcnR1YWwgdm9pZCAgICAgICAgRGlzcGxheSgp
OwoKICAgIHByb3RlY3RlZCA6CgkJdmlydHVhbCBpbnQgICAgICAgICBfRXZhbFRyZWUoY2xhc3Mg
QXR0ckxpc3QqLCBFdmFsUmVzdWx0KikgPSAwOwoJCXZpcnR1YWwgaW50ICAgICAgICAgX0V2YWxU
cmVlKEF0dHJMaXN0KiwgQXR0ckxpc3QqLCBFdmFsUmVzdWx0KikgPSAwOwp9OwoKY2xhc3MgQmlu
YXJ5T3BCYXNlIDogcHVibGljIEV4cHJUcmVlCnsKICAgIHB1YmxpYyA6CgoJCXZpcnR1YWwgaW50
CQkgICAgICBvcGVyYXRvciA9PShFeHByVHJlZSYpOwoJCQoJCXZpcnR1YWwgRXhwclRyZWUqICAg
ICBMQXJnKCkgICB7IHJldHVybiBsQXJnOyB9CgkJdmlydHVhbCBFeHByVHJlZSogICAgIFJBcmco
KSAgIHsgcmV0dXJuIHJBcmc7IH0KCgkJdmlydHVhbCBFeHByVHJlZSoJCUNvcHkoKTsKCgkJZnJp
ZW5kICBFeHByVHJlZTsKCQlmcmllbmQJY2xhc3MJICAgICAgQXR0ckxpc3Q7CgkJZnJpZW5kCWNs
YXNzCSAgICAgIEFnZ09wOwoKICAgIHByb3RlY3RlZCA6CgkJdmlydHVhbCBpbnQgICAgICAgICBf
RXZhbFRyZWUoY2xhc3MgQXR0ckxpc3QqLCBFdmFsUmVzdWx0Kik7CgkJdmlydHVhbCBpbnQgICAg
ICAgICBfRXZhbFRyZWUoQXR0ckxpc3QqLCBBdHRyTGlzdCosIEV2YWxSZXN1bHQqKTsKCgkJRXhw
clRyZWUqIAkgICAgICBsQXJnOwogICAgICAgIEV4cHJUcmVlKiAJICAgICAgckFyZzsKfTsKCmNs
YXNzIEFkZE9wQmFzZSA6IHB1YmxpYyBCaW5hcnlPcEJhc2UKewogICAgcHVibGljIDoKICAJQWRk
T3BCYXNlKEV4cHJUcmVlKiwgRXhwclRyZWUqKTsKICAJdmlydHVhbCB2b2lkICAgICAgICBEaXNw
bGF5KCk7Cn07CgpjbGFzcyBTdWJPcEJhc2UgOiBwdWJsaWMgQmluYXJ5T3BCYXNlCnsKICAgIHB1
YmxpYyA6CiAgCVN1Yk9wQmFzZShFeHByVHJlZSosIEV4cHJUcmVlKik7CiAgCXZpcnR1YWwgdm9p
ZCAgICAgICAgRGlzcGxheSgpOwp9OwoKY2xhc3MgTXVsdE9wQmFzZSA6IHB1YmxpYyBCaW5hcnlP
cEJhc2UKewogICAgcHVibGljIDoKICAJTXVsdE9wQmFzZShFeHByVHJlZSosIEV4cHJUcmVlKik7
CiAgCXZpcnR1YWwgdm9pZCAgICAgICAgRGlzcGxheSgpOwp9OwoKY2xhc3MgRGl2T3BCYXNlIDog
cHVibGljIEJpbmFyeU9wQmFzZQp7CiAgICBwdWJsaWMgOgogIAlEaXZPcEJhc2UoRXhwclRyZWUq
LCBFeHByVHJlZSopOwogIAl2aXJ0dWFsIHZvaWQgICAgICAgIERpc3BsYXkoKTsKfTsKCmNsYXNz
IE1ldGFFcU9wQmFzZSA6IHB1YmxpYyBCaW5hcnlPcEJhc2UKewogICAgcHVibGljIDoKICAJTWV0
YUVxT3BCYXNlKEV4cHJUcmVlKiwgRXhwclRyZWUqKTsKICAJdmlydHVhbCB2b2lkICAgICAgICBE
aXNwbGF5KCk7Cn07CgpjbGFzcyBNZXRhTmVxT3BCYXNlIDogcHVibGljIEJpbmFyeU9wQmFzZQp7
CiAgICBwdWJsaWMgOgogIAlNZXRhTmVxT3BCYXNlKEV4cHJUcmVlKiwgRXhwclRyZWUqKTsKICAJ
dmlydHVhbCB2b2lkICAgICAgICBEaXNwbGF5KCk7Cn07CgpjbGFzcyBFcU9wQmFzZSA6IHB1Ymxp
YyBCaW5hcnlPcEJhc2UKewogICAgcHVibGljIDoKICAJRXFPcEJhc2UoRXhwclRyZWUqLCBFeHBy
VHJlZSopOwogIAl2aXJ0dWFsIHZvaWQgICAgICAgIERpc3BsYXkoKTsKfTsKCmNsYXNzIE5lcU9w
QmFzZSA6IHB1YmxpYyBCaW5hcnlPcEJhc2UKewogICAgcHVibGljIDoKICAJTmVxT3BCYXNlKEV4
cHJUcmVlKiwgRXhwclRyZWUqKTsKICAJdmlydHVhbCB2b2lkICAgICAgICBEaXNwbGF5KCk7Cn07
CgpjbGFzcyBHdE9wQmFzZSA6IHB1YmxpYyBCaW5hcnlPcEJhc2UKewogICAgcHVibGljIDoKICAJ
R3RPcEJhc2UoRXhwclRyZWUqLCBFeHByVHJlZSopOwogIAl2aXJ0dWFsIHZvaWQgICAgICAgIERp
c3BsYXkoKTsKfTsKCmNsYXNzIEdlT3BCYXNlIDogcHVibGljIEJpbmFyeU9wQmFzZQp7CiAgICBw
dWJsaWMgOgogIAlHZU9wQmFzZShFeHByVHJlZSosIEV4cHJUcmVlKik7CiAgCXZpcnR1YWwgdm9p
ZCAgICAgICAgRGlzcGxheSgpOwp9OwoKY2xhc3MgTHRPcEJhc2UgOiBwdWJsaWMgQmluYXJ5T3BC
YXNlCnsKICAgIHB1YmxpYyA6CiAgCUx0T3BCYXNlKEV4cHJUcmVlKiwgRXhwclRyZWUqKTsKICAJ
dmlydHVhbCB2b2lkICAgICAgICBEaXNwbGF5KCk7Cn07CgpjbGFzcyBMZU9wQmFzZSA6IHB1Ymxp
YyBCaW5hcnlPcEJhc2UKewogICAgcHVibGljIDoKICAJTGVPcEJhc2UoRXhwclRyZWUqLCBFeHBy
VHJlZSopOwogIAl2aXJ0dWFsIHZvaWQgICAgICAgIERpc3BsYXkoKTsKfTsKCmNsYXNzIEFuZE9w
QmFzZSA6IHB1YmxpYyBCaW5hcnlPcEJhc2UKewogICAgcHVibGljIDoKICAJQW5kT3BCYXNlKEV4
cHJUcmVlKiwgRXhwclRyZWUqKTsKICAJdmlydHVhbCB2b2lkICAgICAgICBEaXNwbGF5KCk7Cn07
CgpjbGFzcyBPck9wQmFzZSA6IHB1YmxpYyBCaW5hcnlPcEJhc2UKewogICAgcHVibGljIDoKICAJ
T3JPcEJhc2UoRXhwclRyZWUqLCBFeHByVHJlZSopOwogIAl2aXJ0dWFsIHZvaWQgICAgICAgIERp
c3BsYXkoKTsKfTsKCmNsYXNzIEFzc2lnbk9wQmFzZSA6IHB1YmxpYyBCaW5hcnlPcEJhc2UKewog
ICAgcHVibGljIDoKICAJQXNzaWduT3BCYXNlKEV4cHJUcmVlKiwgRXhwclRyZWUqKTsKICAJdmly
dHVhbCB2b2lkICAgICAgICBEaXNwbGF5KCk7Cn07CgoKIyA3MCAiLi4vY29uZG9yX2luY2x1ZGVz
L2NvbmRvcl9hc3QuaCIgMgoKCiAKIAogCiAKIApjbGFzcyBFdmFsUmVzdWx0CnsKICAgIHB1Ymxp
YyA6CgogICAgCUV2YWxSZXN1bHQoKSB7IHR5cGUgPSBMWF9VTkRFRklORUQ7IH0KICAJfkV2YWxS
ZXN1bHQoKSB7IGlmKHR5cGUgPT0gTFhfU1RSSU5HKSBkZWxldGUgW10gczsgfQoKCXZvaWQgZlBy
aW50UmVzdWx0KEZJTEUgKik7ICAKCiAgIAl1bmlvbgogICAgCXsKICAgCSAgICBpbnQgaTsKICAg
CSAgICBmbG9hdCBmOwogICAJICAgIGNoYXIqIHM7CiAgICAgICAgfTsKICAJTGV4ZW1lVHlwZSB0
eXBlOwp9OwoKY2xhc3MgVmFyaWFibGUgOiBwdWJsaWMgVmFyaWFibGVCYXNlCnsKICAgIHB1Ymxp
YyA6CiAgCiAgCVZhcmlhYmxlKGNoYXIqbmFtZSkgOiBWYXJpYWJsZUJhc2UobmFtZSkge30KICAg
IHZpcnR1YWwgdm9pZCAgICAgICAgUHJpbnRUb1N0cihjaGFyKik7CgoJcHJvdGVjdGVkOgoKICAJ
dmlydHVhbCBpbnQgICAgICAgICBfRXZhbFRyZWUoY2xhc3MgQXR0ckxpc3QqLCBFdmFsUmVzdWx0
Kik7CiAgICB2aXJ0dWFsIGludCAgICAgICAgIF9FdmFsVHJlZShBdHRyTGlzdCosIEF0dHJMaXN0
KiwgRXZhbFJlc3VsdCopOwp9OwoKY2xhc3MgSW50ZWdlciA6IHB1YmxpYyBJbnRlZ2VyQmFzZQp7
CiAgICBwdWJsaWMgOgoKICAJSW50ZWdlcihpbnQgaSkgOiBJbnRlZ2VyQmFzZShpKSB7fQoKCXZp
cnR1YWwJaW50CSAgICBvcGVyYXRvciA+KEV4cHJUcmVlJik7Cgl2aXJ0dWFsCWludAkgICAgb3Bl
cmF0b3IgPj0oRXhwclRyZWUmKTsKCXZpcnR1YWwJaW50CSAgICBvcGVyYXRvciA8KEV4cHJUcmVl
Jik7Cgl2aXJ0dWFsCWludAkgICAgb3BlcmF0b3IgPD0oRXhwclRyZWUmKTsKIAogICAgdmlydHVh
bCB2b2lkICAgIFByaW50VG9TdHIoY2hhciopOwoKCXByb3RlY3RlZDoKCiAgCXZpcnR1YWwgaW50
ICAgICBfRXZhbFRyZWUoQXR0ckxpc3QqLCBFdmFsUmVzdWx0Kik7CiAgICB2aXJ0dWFsIGludCAg
ICAgX0V2YWxUcmVlKEF0dHJMaXN0KixBdHRyTGlzdCosIEV2YWxSZXN1bHQqKTsKfTsKCgpjbGFz
cyBGbG9hdDogcHVibGljIEZsb2F0QmFzZQp7CiAgICBwdWJsaWMgOgoKICAJRmxvYXQoZmxvYXQg
ZikgOiBGbG9hdEJhc2UoZikge30KCgl2aXJ0dWFsCWludAkgICAgb3BlcmF0b3IgPihFeHByVHJl
ZSYpOwoJdmlydHVhbAlpbnQJICAgIG9wZXJhdG9yID49KEV4cHJUcmVlJik7Cgl2aXJ0dWFsCWlu
dAkgICAgb3BlcmF0b3IgPChFeHByVHJlZSYpOwoJdmlydHVhbAlpbnQJICAgIG9wZXJhdG9yIDw9
KEV4cHJUcmVlJik7CiAgICB2aXJ0dWFsIHZvaWQgICAgUHJpbnRUb1N0cihjaGFyKik7CgoJcHJv
dGVjdGVkOgoKICAJdmlydHVhbCBpbnQgICAgIF9FdmFsVHJlZShBdHRyTGlzdCosIEV2YWxSZXN1
bHQqKTsKICAgIHZpcnR1YWwgaW50ICAgICBfRXZhbFRyZWUoQXR0ckxpc3QqLEF0dHJMaXN0Kiwg
RXZhbFJlc3VsdCopOwp9OwoKCmNsYXNzIFN0cmluZyA6IHB1YmxpYyBTdHJpbmdCYXNlCnsKICAg
IHB1YmxpYyA6CgogIAlTdHJpbmcoY2hhciogcykgOiBTdHJpbmdCYXNlKHMpIHt9CiAgICB2aXJ0
dWFsIHZvaWQgICAgICAgIFByaW50VG9TdHIoY2hhciopOwoKCXByb3RlY3RlZDoKCiAgCXZpcnR1
YWwgaW50ICAgICAgICAgX0V2YWxUcmVlKEF0dHJMaXN0KiwgRXZhbFJlc3VsdCopOwogICAgdmly
dHVhbCBpbnQgICAgICAgICBfRXZhbFRyZWUoQXR0ckxpc3QqLEF0dHJMaXN0KiwgRXZhbFJlc3Vs
dCopOwp9OwoKCmNsYXNzIEJvb2xlYW4gOiBwdWJsaWMgQm9vbGVhbkJhc2UKewogICAgcHVibGlj
IDoKCiAgCUJvb2xlYW4oaW50IGIpIDogQm9vbGVhbkJhc2UoYikge30KICAgIHZpcnR1YWwgdm9p
ZCAgICAgICAgUHJpbnRUb1N0cihjaGFyKik7CgoJcHJvdGVjdGVkOgoKICAJdmlydHVhbCBpbnQg
ICAgICAgICBfRXZhbFRyZWUoQXR0ckxpc3QqLCBFdmFsUmVzdWx0Kik7CiAgICB2aXJ0dWFsIGlu
dCAgICAgICAgIF9FdmFsVHJlZShBdHRyTGlzdCosQXR0ckxpc3QqLCBFdmFsUmVzdWx0Kik7Cn07
CgoKY2xhc3MgVW5kZWZpbmVkIDogcHVibGljIFVuZGVmaW5lZEJhc2UKewogICAgcHVibGljIDoK
CglVbmRlZmluZWQoKSA6IFVuZGVmaW5lZEJhc2UoKSB7fQogICAgdmlydHVhbCB2b2lkICAgICAg
ICBQcmludFRvU3RyKGNoYXIqKTsKCglwcm90ZWN0ZWQ6CgogIAl2aXJ0dWFsIGludCAgICAgICAg
IF9FdmFsVHJlZShBdHRyTGlzdCosIEV2YWxSZXN1bHQqKTsKICAgIHZpcnR1YWwgaW50ICAgICAg
ICAgX0V2YWxUcmVlKEF0dHJMaXN0KixBdHRyTGlzdCosIEV2YWxSZXN1bHQqKTsKfTsKCmNsYXNz
IEVycm9yIDogcHVibGljIEVycm9yQmFzZQp7CiAgICBwdWJsaWMgOgoKCUVycm9yKCkgOiBFcnJv
ckJhc2UoKSB7fQogICAgdmlydHVhbCB2b2lkICAgICAgICBQcmludFRvU3RyKGNoYXIqKTsKCglw
cm90ZWN0ZWQ6CgogIAl2aXJ0dWFsIGludCAgICAgICAgIF9FdmFsVHJlZShBdHRyTGlzdCosIEV2
YWxSZXN1bHQqKTsKICAgIHZpcnR1YWwgaW50ICAgICAgICAgX0V2YWxUcmVlKEF0dHJMaXN0KixB
dHRyTGlzdCosIEV2YWxSZXN1bHQqKTsKfTsKCmNsYXNzIEJpbmFyeU9wOiBwdWJsaWMgQmluYXJ5
T3BCYXNlCnsKICAgIHB1YmxpYyA6Cn07CgpjbGFzcyBBZGRPcDogcHVibGljIEFkZE9wQmFzZQp7
CiAgICBwdWJsaWMgOgogIAlBZGRPcChFeHByVHJlZSogbCwgRXhwclRyZWUqIHIpIDogQWRkT3BC
YXNlKGwsIHIpIHt9CiAgICB2aXJ0dWFsIHZvaWQgICAgICAgIFByaW50VG9TdHIoY2hhciopOwp9
OwoKCmNsYXNzIFN1Yk9wOiBwdWJsaWMgU3ViT3BCYXNlCnsKICAgIHB1YmxpYyA6CiAgCVN1Yk9w
KEV4cHJUcmVlKiBsLCBFeHByVHJlZSogcikgOiBTdWJPcEJhc2UobCwgcikge30KICAgIHZpcnR1
YWwgdm9pZCAgICAgICAgUHJpbnRUb1N0cihjaGFyKik7Cn07CgoKY2xhc3MgTXVsdE9wOiBwdWJs
aWMgTXVsdE9wQmFzZQp7CiAgICBwdWJsaWMgOgogIAlNdWx0T3AoRXhwclRyZWUqIGwsIEV4cHJU
cmVlKiByKSA6IE11bHRPcEJhc2UobCwgcikge30KICAgIHZpcnR1YWwgdm9pZCAgICAgICAgUHJp
bnRUb1N0cihjaGFyKik7Cn07CgoKY2xhc3MgRGl2T3A6IHB1YmxpYyBEaXZPcEJhc2UKewogICAg
cHVibGljIDoKICAJRGl2T3AoRXhwclRyZWUqIGwsIEV4cHJUcmVlKiByKSA6IERpdk9wQmFzZShs
LCByKSB7fQogICAgdmlydHVhbCB2b2lkICAgICAgICBQcmludFRvU3RyKGNoYXIqKTsKfTsKCgpj
bGFzcyBNZXRhRXFPcDogcHVibGljIE1ldGFFcU9wQmFzZQp7CiAgICBwdWJsaWMgOgogIAlNZXRh
RXFPcChFeHByVHJlZSogbCwgRXhwclRyZWUqIHIpIDogTWV0YUVxT3BCYXNlKGwsIHIpIHt9CiAg
ICB2aXJ0dWFsIHZvaWQgICAgICAgIFByaW50VG9TdHIoY2hhciopOwp9OwoKCmNsYXNzIE1ldGFO
ZXFPcDogcHVibGljIE1ldGFOZXFPcEJhc2UKewogICAgcHVibGljIDoKICAJTWV0YU5lcU9wKEV4
cHJUcmVlKiBsLCBFeHByVHJlZSogcikgOiBNZXRhTmVxT3BCYXNlKGwsIHIpIHt9CiAgICB2aXJ0
dWFsIHZvaWQgICAgICAgIFByaW50VG9TdHIoY2hhciopOwp9OwoKY2xhc3MgRXFPcDogcHVibGlj
IEVxT3BCYXNlCnsKICAgIHB1YmxpYyA6CiAgCUVxT3AoRXhwclRyZWUqIGwsIEV4cHJUcmVlKiBy
KSA6IEVxT3BCYXNlKGwsIHIpIHt9CiAgICB2aXJ0dWFsIHZvaWQgICAgICAgIFByaW50VG9TdHIo
Y2hhciopOwp9OwoKCmNsYXNzIE5lcU9wOiBwdWJsaWMgTmVxT3BCYXNlCnsKICAgIHB1YmxpYyA6
CiAgCU5lcU9wKEV4cHJUcmVlKiBsLCBFeHByVHJlZSogcikgOiBOZXFPcEJhc2UobCwgcikge30K
ICAgIHZpcnR1YWwgdm9pZCAgICAgICAgUHJpbnRUb1N0cihjaGFyKik7Cn07CgoKY2xhc3MgR3RP
cDogcHVibGljIEd0T3BCYXNlCnsKICAgIHB1YmxpYyA6CiAgCUd0T3AoRXhwclRyZWUqIGwsIEV4
cHJUcmVlKiByKSA6IEd0T3BCYXNlKGwsIHIpIHt9CiAgICB2aXJ0dWFsIHZvaWQgICAgICAgIFBy
aW50VG9TdHIoY2hhciopOwp9OwoKCmNsYXNzIEdlT3A6IHB1YmxpYyBHZU9wQmFzZQp7CiAgICBw
dWJsaWMgOgogIAlHZU9wKEV4cHJUcmVlKiBsLCBFeHByVHJlZSogcikgOiBHZU9wQmFzZShsLCBy
KSB7fQogICAgdmlydHVhbCB2b2lkICAgICAgICBQcmludFRvU3RyKGNoYXIqKTsKfTsKCgpjbGFz
cyBMdE9wOiBwdWJsaWMgTHRPcEJhc2UKewogICAgcHVibGljIDoKICAJTHRPcChFeHByVHJlZSog
bCwgRXhwclRyZWUqIHIpIDogTHRPcEJhc2UobCwgcikge30KICAgIHZpcnR1YWwgdm9pZCAgICAg
ICAgUHJpbnRUb1N0cihjaGFyKik7Cn07CgoKY2xhc3MgTGVPcDogcHVibGljIExlT3BCYXNlCnsK
ICAgIHB1YmxpYyA6CiAgCUxlT3AoRXhwclRyZWUqIGwsIEV4cHJUcmVlKiByKSA6IExlT3BCYXNl
KGwsIHIpIHt9CiAgICB2aXJ0dWFsIHZvaWQgICAgICAgIFByaW50VG9TdHIoY2hhciopOwp9OwoK
Y2xhc3MgQW5kT3A6IHB1YmxpYyBBbmRPcEJhc2UKewogICAgcHVibGljIDoKICAJQW5kT3AoRXhw
clRyZWUqIGwsIEV4cHJUcmVlKiByKSA6IEFuZE9wQmFzZShsLCByKSB7fQogICAgdmlydHVhbCB2
b2lkICAgICAgICBQcmludFRvU3RyKGNoYXIqKTsKfTsKCgpjbGFzcyBPck9wIDogcHVibGljIE9y
T3BCYXNlCnsKICAgIHB1YmxpYyA6CiAgCU9yT3AoRXhwclRyZWUqIGwsIEV4cHJUcmVlKiByKSA6
IE9yT3BCYXNlKGwsIHIpIHt9CiAgICB2aXJ0dWFsIHZvaWQgICAgICAgIFByaW50VG9TdHIoY2hh
ciopOwp9OwoKY2xhc3MgQXNzaWduT3A6IHB1YmxpYyBBc3NpZ25PcEJhc2UKewogICAgcHVibGlj
IDoKICAJQXNzaWduT3AoRXhwclRyZWUqIGwsIEV4cHJUcmVlKiByKSA6IEFzc2lnbk9wQmFzZShs
LCByKSB7fQogICAgdmlydHVhbCB2b2lkICAgICAgICBQcmludFRvU3RyKGNoYXIqKTsKCglmcmll
bmQJCSAgICBjbGFzcyBBdHRyTGlzdDsKfTsKCmV4dGVybglpbnQJCVBhcnNlKGNvbnN0IGNoYXIq
LCBFeHByVHJlZSomKTsKCgojIDM1ICIuLi9jb25kb3JfaW5jbHVkZXMvY29uZG9yX2NsYXNzYWQu
aCIgMgoKIyAxICIuLi9jb25kb3JfaW5jbHVkZXMvY29uZG9yX2F0dHJsaXN0LmgiIDEKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoKCgoKCgoKCgojIDEgIi4uL2NvbmRvcl9pbmNs
dWRlcy9zdHJlYW0uaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAogCgoKIyAx
ICIuLi9oL3Byb2MuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3Ry
dWN0IHsKCWludAkJY2x1c3RlcjsKCWludAkJcHJvYzsKfSBQUk9DX0lEOwoKdHlwZWRlZiBzdHJ1
Y3QgewoJaW50CQl3cml0ZXI7CSAKCWludAkJcmVhZGVyOwkgCgljaGFyCSpuYW1lOwkgCn0gUF9E
RVNDOwoKCSAKCiAKCgoKCgoKCgoKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50CQkJCXZlcnNp
b25fbnVtOwkJIAoJUFJPQ19JRAkJCWlkOwkJCQkJIAoJaW50CQkJCXVuaXZlcnNlOwkJCSAKCWlu
dAkJCQljaGVja3BvaW50OwkJCSAKCWludAkJCQlyZW1vdGVfc3lzY2FsbHM7CSAKCWNoYXIJCQkq
b3duZXI7CQkJCSAKCWludAkJCQlxX2RhdGU7CQkJCSAKCWludAkJCQljb21wbGV0aW9uX2RhdGU7
CSAKCWludAkJCQlzdGF0dXM7CQkJCSAKCWludAkJCQlwcmlvOwkJCQkgCglpbnQJCQkJbm90aWZp
Y2F0aW9uOwkJIAoJaW50CQkJCWltYWdlX3NpemU7CQkJIAoJY2hhcgkJCSplbnY7CQkJCSAKCgkJ
IAoKCgoJaW50CQkJCW5fY21kczsJCQkJIAoJY2hhcgkJCSoqY21kOwkJCQkgCgljaGFyCQkJKiph
cmdzOwkJCQkgCgljaGFyCQkJKippbjsJCQkJIAoJY2hhcgkJCSoqb3V0OwkJCQkgCgljaGFyCQkJ
KiplcnI7CQkJCSAKCXN0cnVjdCBydXNhZ2UJKnJlbW90ZV91c2FnZTsJCSAKCWludAkJCQkqZXhp
dF9zdGF0dXM7CQkgCgoJCSAKCgoKCWludAkJCQluX3BpcGVzOwkJCSAKCVBfREVTQwkJCSpwaXBl
OwkJCQkgCgoJIAoKCglpbnQJCQkJbWluX25lZWRlZDsKCWludAkJCQltYXhfbmVlZGVkOwoKCWNo
YXIJCQkqcm9vdGRpcjsJCQkgCgljaGFyCQkJKml3ZDsJCQkJIAoJY2hhcgkJCSpyZXF1aXJlbWVu
dHM7CQkgCgljaGFyCQkJKnByZWZlcmVuY2VzOwkJIAoJc3RydWN0IHJ1c2FnZQlsb2NhbF91c2Fn
ZTsJCSAKCWNoYXIJCQlwYWRbNjZdOwkJCSAKCn0gUFJPQzsKCgoKCiAKCgp0eXBlZGVmIHN0cnVj
dCB7CglpbnQJCQkJdmVyc2lvbl9udW07CQkgCglQUk9DX0lECQkJaWQ7CQkJCQkgCgljaGFyCQkJ
Km93bmVyOwkJCQkgCglpbnQJCQkJcV9kYXRlOwkJCQkgCglpbnQJCQkJY29tcGxldGlvbl9kYXRl
OwkgCglpbnQJCQkJc3RhdHVzOwkJCQkgCglpbnQJCQkJcHJpbzsJCQkJIAoJaW50CQkJCW5vdGlm
aWNhdGlvbjsJCSAKCWludAkJCQlpbWFnZV9zaXplOwkJCSAKCWNoYXIJCQkqY21kOwkJCQkgCglj
aGFyCQkJKmFyZ3M7CQkJCSAKCWNoYXIJCQkqZW52OwkJCQkgCgljaGFyCQkJKmluOwkJCQkgCglj
aGFyCQkJKm91dDsJCQkJIAoJY2hhcgkJCSplcnI7CQkJCSAKCWNoYXIJCQkqcm9vdGRpcjsJCQkg
CgljaGFyCQkJKml3ZDsJCQkJIAoJY2hhcgkJCSpyZXF1aXJlbWVudHM7CQkgCgljaGFyCQkJKnBy
ZWZlcmVuY2VzOwkJIAoJc3RydWN0IHJ1c2FnZQlsb2NhbF91c2FnZTsJCSAKCXN0cnVjdCBydXNh
Z2UJcmVtb3RlX3VzYWdlOwkJIAoKfSBWMl9QUk9DOwoKCgoKCgp0eXBlZGVmIFBST0MgVjNfUFJP
QzsKdHlwZWRlZiB1bmlvbiB7CglWMl9QUk9DIHYyX3Byb2M7CglWM19QUk9DIHYzX3Byb2M7Cn0g
R0VORVJJQ19QUk9DOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJUFJPQ19JRAkJCWlkOwkJCgljaGFy
CQkJKm93bmVyOwoJaW50CQkJCXFfZGF0ZTsKCWludAkJCQlzdGF0dXM7CglpbnQJCQkJcHJpbzsK
CWludAkJCQlub3RpZmljYXRpb247CQkgCgljaGFyCQkJKmNtZDsKCWNoYXIJCQkqYXJnczsKCWNo
YXIJCQkqZW52OwoJY2hhcgkJCSppbjsKCWNoYXIJCQkqb3V0OwoJY2hhcgkJCSplcnI7CgljaGFy
CQkJKnJvb3RkaXI7CQkJIAoJY2hhcgkJCSppd2Q7CQkJCSAKCWNoYXIJCQkqcmVxdWlyZW1lbnRz
OwoJY2hhcgkJCSpwcmVmZXJlbmNlczsKCXN0cnVjdCBydXNhZ2UJbG9jYWxfdXNhZ2U7CglzdHJ1
Y3QgcnVzYWdlCXJlbW90ZV91c2FnZTsKfSBPTERfUFJPQzsKCgoKIAoKCgoKCgoKdHlwZWRlZiBz
dHJ1Y3QgewoJaW50CQluX2lkczsKCWludAkJYXJyYXlfbGVuOwoJaW50CQluZXh0X2lkOwoJaW50
CQlpZFsxXTsJIAp9IENMVVNURVJfTElTVDsKCgoKCgogCgoKCgoKCgoKCgoKIyAyMTYgIi4uL2gv
cHJvYy5oIgoKZXh0ZXJuIGNoYXIgKkpvYlN0YXR1c05hbWVzW107CgoKCgoKCiMgMzQgIi4uL2Nv
bmRvcl9pbmNsdWRlcy9zdHJlYW0uaCIgMgoKCiAKCgoKCgoKIyAxICIuLi9oL3NjaGVkLmgiIDEK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKCWludAkJ
cF9kaXNrX2F2YWlsOwoJY2hhcgkqcF9ob3N0Owp9IFBFUk07Cgp0eXBlZGVmIHN0cnVjdCB7Cglp
bnQJCXNfdXNlcnM7CglpbnQJCXNfd2FudGluZzsKCWludAkJc19ydW5uaW5nOwoJaW50CQlzX3N0
YXRlOwoJaW50CQlzX2Rpc2tfYXZhaWw7CglpbnQJCXNfZGlza193YW50ZWQ7Cn0gU1RBVFVTOwoK
dHlwZWRlZiBzdHJ1Y3QgewoJaW50CQlwb3J0MTsKCWludAkJcG9ydDI7Cn0gUE9SVFM7CgojIDc1
ICIuLi9oL3NjaGVkLmgiCgoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50CQlwaWQ7CglpbnQJCWpvYl9p
ZDsKCWludAkJdW1iaWxpY2FsOwp9IFNIQURPV19SRUM7CgoKCnR5cGVkZWYgc3RydWN0IHsKCWlu
dAkJY2x1c3RlcklkOwoJaW50CQlwcm9jSWQ7CgljaGFyKglob3N0OwoJY2hhciogIAlvd25lcjsK
CWludAkJcV9kYXRlOwoJdGltZV90CWZpbmlzaFRpbWU7Cgl0aW1lX3QJY3B1VGltZTsKfSBDT01Q
TEVURURfSk9CX0lORk87Cgp0eXBlZGVmIHN0cnVjdCB7CgljaGFyKiAgICAgICBjYXBhYmlsaXR5
OwoJY2hhciogICAgICAgc2VydmVyOwp9IEZJTl9NQVRDSEVTOwoKdHlwZWRlZiBzdHJ1Y3QgewoJ
aW50CQljbHVzdGVySUQ7CglpbnQJCXByb2NJRDsKCXRpbWVfdAlzdGFydFRpbWU7CgljaGFyKglo
b3N0Owp9IFJVTk5JTkdfSk9CX0lORk87CgoKCnR5cGVkZWYgc3RydWN0IHsgICAgICAgICAKCWlu
dAkJdmVyc2lvbl9udW07IAoJUE9SVFMJcG9ydHM7CglpbnQgICAgIGlwX2FkZHI7ICAgICAKCWNo
YXIqICAgc2VydmVyX25hbWU7IAp9IFN0YXJ0ZFJlYzsKCSAKCgojIDEgIi4uL2NvbmRvcl9pbmNs
dWRlcy9jb25kb3JfY29tbWFuZHMuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKIAogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCmNvbnN0
IGludCBVUERBVEVfU1RBUlREX0FECQk9IDA7CmNvbnN0IGludCBVUERBVEVfU0NIRUREX0FECQk9
IDE7CmNvbnN0IGludCBVUERBVEVfTUFTVEVSX0FECQk9IDI7CmNvbnN0IGludCBVUERBVEVfR0FU
RVdBWV9BRAkJPSAzOwpjb25zdCBpbnQgVVBEQVRFX0NLUFRfU1JWUl9BRAk9IDQ7Cgpjb25zdCBp
bnQgUVVFUllfU1RBUlREX0FEUwkJPSA1Owpjb25zdCBpbnQgUVVFUllfU0NIRUREX0FEUwkJPSA2
Owpjb25zdCBpbnQgUVVFUllfTUFTVEVSX0FEUwkJPSA3Owpjb25zdCBpbnQgUVVFUllfR0FURVdB
WV9BRFMJCT0gODsKY29uc3QgaW50IFFVRVJZX0NLUFRfU1JWUl9BRFMJPSA5Owpjb25zdCBpbnQg
UVVFUllfU1RBUlREX1BWVF9BRFMJPSAxMDsKCmNvbnN0IGludCBVUERBVEVfU1VCTUlUVE9SX0FE
CT0gMTE7CmNvbnN0IGludCBRVUVSWV9TVUJNSVRUT1JfQURTCT0gMTI7Cgpjb25zdCBpbnQgSU5W
QUxJREFURV9TVEFSVERfQURTCT0gMTM7CmNvbnN0IGludCBJTlZBTElEQVRFX1NDSEVERF9BRFMJ
PSAxNDsKY29uc3QgaW50IElOVkFMSURBVEVfTUFTVEVSX0FEUwk9IDE1Owpjb25zdCBpbnQgSU5W
QUxJREFURV9HQVRFV0FZX0FEUwk9IDE2Owpjb25zdCBpbnQgSU5WQUxJREFURV9DS1BUX1NSVlJf
QURTCT0gMTc7CmNvbnN0IGludCBJTlZBTElEQVRFX1NVQk1JVFRPUl9BRFMJPSAxODsKCmNvbnN0
IGludCBVUERBVEVfQ09MTEVDVE9SX0FECT0gMTk7CmNvbnN0IGludCBRVUVSWV9DT0xMRUNUT1Jf
QURTCT0gMjA7CmNvbnN0IGludCBJTlZBTElEQVRFX0NPTExFQ1RPUl9BRFMJPSAyMTsKCmNvbnN0
IGludCBRVUVSWV9ISVNUX1NUQVJURCA9IDIyOwpjb25zdCBpbnQgUVVFUllfSElTVF9TVEFSVERf
TElTVCA9IDIzOwpjb25zdCBpbnQgUVVFUllfSElTVF9TVUJNSVRUT1IgPSAyNDsKY29uc3QgaW50
IFFVRVJZX0hJU1RfU1VCTUlUVE9SX0xJU1QgPSAyNTsKY29uc3QgaW50IFFVRVJZX0hJU1RfR1JP
VVBTID0gMjY7CmNvbnN0IGludCBRVUVSWV9ISVNUX0dST1VQU19MSVNUID0gMjc7CmNvbnN0IGlu
dCBRVUVSWV9ISVNUX1NVQk1JVFRPUkdST1VQUyA9IDI4Owpjb25zdCBpbnQgUVVFUllfSElTVF9T
VUJNSVRUT1JHUk9VUFNfTElTVCA9IDI5Owpjb25zdCBpbnQgUVVFUllfSElTVF9DS1BUU1JWUiA9
IDMwOwpjb25zdCBpbnQgUVVFUllfSElTVF9DS1BUU1JWUl9MSVNUID0gMzE7Cgpjb25zdCBpbnQg
VVBEQVRFX0xJQ0VOU0VfQUQJCQk9IDQyOwpjb25zdCBpbnQgUVVFUllfTElDRU5TRV9BRFMJCQk9
IDQzOwpjb25zdCBpbnQgSU5WQUxJREFURV9MSUNFTlNFX0FEUwk9IDQ0OwoKIAoKCiAKIAogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
IAoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgogCgoKCgogCgoKCiAKCgoKCgoKCiAKCgoKCgoKCiAK
CgoKCiMgMTE4ICIuLi9oL3NjaGVkLmgiIDIKCgojIDEgIi4uL2NvbmRvcl9pbmNsdWRlcy9jb25k
b3JfbmV0d29yay5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCmV4dGVybiAiQyIgewoKCgppbnQgZG9fY29ubmVjdCAoIGNvbnN0IGNoYXIgKmhvc3QsIGNv
bnN0IGNoYXIgKnNlcnZpY2UsIHVuc2lnbmVkIGludCBwb3J0ICk7CgoKCgoKfQoKCgojIDEyMCAi
Li4vaC9zY2hlZC5oIiAyCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCgoKCiMgNDMgIi4uL2NvbmRvcl9pbmNsdWRlcy9zdHJlYW0uaCIgMgoKCgoKCgoKIyAxICIu
Li9oL3N0YXJ0dXAuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0
IHsKCWludAkJdmVyc2lvbl9udW07CQkJIAoJaW50CQljbHVzdGVyOwkJCQkgCglpbnQJCXByb2M7
CQkJCQkgCglpbnQJCWpvYl9jbGFzczsJCQkJIAoKCXVpZF90CXVpZDsJCQkJCSAgCglnaWRfdAln
aWQ7CQkJCQkgCglwaWRfdAl2aXJ0X3BpZDsJCQkJIAoKCWludAkJc29mdF9raWxsX3NpZzsJCQkg
CgljaGFyCSpjbWQ7CQkJCQkgCgljaGFyCSphcmdzOwkJCQkJIAoJY2hhcgkqZW52OwkJCQkJIAoJ
Y2hhcgkqaXdkOwkJCQkJIAoJQk9PTEVBTglja3B0X3dhbnRlZDsJCQkgCglCT09MRUFOCWlzX3Jl
c3RhcnQ7CQkJCSAKCUJPT0xFQU4JY29yZWR1bXBfbGltaXRfZXhpc3RzOwkgCglpbnQJCWNvcmVk
dW1wX2xpbWl0OwkJCSAKfSBTVEFSVFVQX0lORk87CgoKCiAKCgoKCgoKIyA1MCAiLi4vY29uZG9y
X2luY2x1ZGVzL3N0cmVhbS5oIiAyCgoKIAoKCgoKCgoKIAoKIAplbnVtIHNpZ25hbF90IHsgX19z
aWduYWxfdF9kdW1teV92YWx1ZSA9IDIxNDc0ODM2NDcgICB9OwogCmVudW0gb3Blbl9mbGFnc190
IHsgX19vcGVuX2ZsYWdzX3RfZHVtbXlfdmFsdWUgPSAyMTQ3NDgzNjQ3ICAgfTsKIAplbnVtIGZj
bnRsX2NtZF90IHsgX19mY250bF9jbWRfdF9kdW1teV92YWx1ZSA9IDIxNDc0ODM2NDcgICB9OwoK
IAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgU3Ry
ZWFtIHsKCnB1YmxpYzoKCglmcmllbmQgY2xhc3MgRGFlbW9uQ29yZTsKCiAgICAgCgllbnVtIHN0
cmVhbV90eXBlIHsKICAgICAgICAgIGZpbGUsCiAgICAgICAgICBpbmNvcmUsCiAgICAgICAgICBz
YWZlX3NvY2ssCiAgICAgICAgICByZWxpX3NvY2sKICAgIH07CgogICAgIAoJZW51bSBzdHJlYW1f
Y29kZSB7CiAgICAgICAgICBpbnRlcm5hbCwKICAgICAgICAgIGV4dGVybmFsLAogICAgICAgICAg
YXNjaWkKICAgIH07CgogICAgIAoJaW5saW5lIHN0cmVhbV9jb2RlIHJlcHJlc2VudGF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gX2NvZGU7IH0KICAgICAKCWlubGluZSB2b2lkIHNldF9yZXByZXNlbnRh
dGlvbihzdHJlYW1fY29kZSBjKSB7IF9jb2RlID0gYzsgfQoKICAgICAKCWlubGluZSB2b2lkIGVu
Y29kZSgpIHsgX2NvZGluZyA9IHN0cmVhbV9lbmNvZGU7IH0KICAgICAKCWlubGluZSB2b2lkIGRl
Y29kZSgpIHsgX2NvZGluZyA9IHN0cmVhbV9kZWNvZGU7IH0KICAgICAKCWlubGluZSBpbnQgaXNf
ZW5jb2RlKCkgY29uc3QgeyByZXR1cm4gX2NvZGluZyA9PSBzdHJlYW1fZW5jb2RlOyB9CiAgICAg
CglpbmxpbmUgaW50IGlzX2RlY29kZSgpIGNvbnN0IHsgcmV0dXJuIF9jb2RpbmcgPT0gc3RyZWFt
X2RlY29kZTsgfQoKCgoJIAoKCgkgCgogICAgIAoKICAgICAKCiAgICAgCglpbnQgY29kZShjaGFy
ICYpOwogICAgIAoJaW50IGNvZGUodW5zaWduZWQgY2hhciAmKTsKICAgICAKCWludCBjb2RlKGlu
dCAmKTsKICAgICAKCWludCBjb2RlKHVuc2lnbmVkIGludCAmKTsKICAgICAKCWludCBjb2RlKGxv
bmcgJik7CiAgICAgCglpbnQgY29kZSh1bnNpZ25lZCBsb25nICYpOwoKICAgICAKCWludCBjb2Rl
KGxvbmcgbG9uZyAmKTsKICAgICAKCWludCBjb2RlKHVuc2lnbmVkIGxvbmcgbG9uZyAmKTsKCiAg
ICAgCglpbnQgY29kZShzaG9ydCAmKTsKICAgICAKCWludCBjb2RlKHVuc2lnbmVkIHNob3J0ICYp
OwogICAgIAoJaW50IGNvZGUoZmxvYXQgJik7CiAgICAgCglpbnQgY29kZShkb3VibGUgJik7CiAg
ICAgCglpbnQgY29kZShjaGFyIComKTsKICAgICAKCWludCBjb2RlKGNoYXIgKiYsIGludCAmKTsK
ICAgICAKCWludCBjb2RlX2J5dGVzKHZvaWQgKiwgaW50KTsKICAgICAKCWludCBjb2RlX2J5dGVz
X2Jvb2wodm9pZCAqLCBpbnQpOwoKICAgICAKCgkgCgogICAgIAogICAgIAoJaW50IGNvZGUoUFJP
Q19JRCAmKTsKICAgICAKCWludCBjb2RlKFNUQVJUVVBfSU5GTyAmKTsKICAgICAKCWludCBjb2Rl
KFBPUlRTICYpOwogICAgIAoJaW50IGNvZGUoU3RhcnRkUmVjICYpOwogICAgIAoKCSAKCiAgICAg
CgogICAgIAoJaW50IGNvZGUob3Blbl9mbGFnc190ICYpOwogICAgIAoJaW50IGNvZGUoc3RydWN0
IHN0YXQgJik7CgogICAgIAoJaW50IGNvZGUoc2lnbmFsX3QgJik7CiAgICAgCglpbnQgY29kZShm
Y250bF9jbWRfdCAmKTsKICAgICAKCWludCBjb2RlKHN0cnVjdCBydXNhZ2UgJik7CiAgICAgCglp
bnQgY29kZShzdHJ1Y3Qgc3RhdGZzICYpOwogICAgIAoJaW50IGNvZGUoc3RydWN0IHRpbWV6b25l
ICYpOwogICAgIAoJaW50IGNvZGUoc3RydWN0IHRpbWV2YWwgJik7CiAgICAgCglpbnQgY29kZShz
dHJ1Y3QgdXRpbWJ1ZiAmKTsKICAgICAKCWludCBjb2RlKHN0cnVjdCBybGltaXQgJik7CiAgICAg
CglpbnQgY29kZV9hcnJheShnaWRfdCAqJmFycmF5LCBpbnQgJmxlbik7CiAgICAgCglpbnQgY29k
ZShzdHJ1Y3QgdXRzbmFtZSAmKTsKCgoKICAgICAKCWludCBjb2RlKHN0cnVjdCBzdGF0NjQgJik7
CiAgICAgCglpbnQgY29kZShzdHJ1Y3QgcmxpbWl0NjQgJik7CgogICAgIAoKCSAKCgogICAgIAoK
ICAgICAKCWludCBjb2RlKHVuc2lnbmVkIGNoYXIgKngpCQl7IHJldHVybiBjb2RlKCp4KTsgfQog
ICAgIAoJaW50IGNvZGUoaW50ICp4KSAJCQkJeyByZXR1cm4gY29kZSgqeCk7IH0KICAgICAKCWlu
dCBjb2RlKHVuc2lnbmVkIGludCAqeCkgCQl7IHJldHVybiBjb2RlKCp4KTsgfQogICAgIAoJaW50
IGNvZGUobG9uZyAqeCkgCQkJCXsgcmV0dXJuIGNvZGUoKngpOyB9CiAgICAgCglpbnQgY29kZSh1
bnNpZ25lZCBsb25nICp4KSAJCXsgcmV0dXJuIGNvZGUoKngpOyB9CiAgICAgCglpbnQgY29kZShz
aG9ydCAqeCkgCQkJCXsgcmV0dXJuIGNvZGUoKngpOyB9CiAgICAgCglpbnQgY29kZSh1bnNpZ25l
ZCBzaG9ydCAqeCkgCXsgcmV0dXJuIGNvZGUoKngpOyB9CiAgICAgCglpbnQgY29kZShmbG9hdCAq
eCkgCQkJCXsgcmV0dXJuIGNvZGUoKngpOyB9CiAgICAgCglpbnQgY29kZShkb3VibGUgKngpIAkJ
CXsgcmV0dXJuIGNvZGUoKngpOyB9CiAgICAgCglpbnQgY29kZShQUk9DX0lEICp4KQkJCXsgcmV0
dXJuIGNvZGUoKngpOyB9CiAgICAgCglpbnQgY29kZShTVEFSVFVQX0lORk8gKngpCQl7IHJldHVy
biBjb2RlKCp4KTsgfQogICAgIAoJaW50IGNvZGUoUE9SVFMgKngpCQkJCXsgcmV0dXJuIGNvZGUo
KngpOyB9CiAgICAgCglpbnQgY29kZShTdGFydGRSZWMgKngpCQkJeyByZXR1cm4gY29kZSgqeCk7
IH0KCiAgICAgCglpbnQgY29kZShzdHJ1Y3Qgc3RhdCAqeCkJCXsgcmV0dXJuIGNvZGUoKngpOyB9
CiAgICAgCglpbnQgY29kZShvcGVuX2ZsYWdzX3QgKngpCQl7IHJldHVybiBjb2RlKCp4KTsgfQoK
ICAgICAKCWludCBjb2RlKHNpZ25hbF90ICp4KQkJCXsgcmV0dXJuIGNvZGUoKngpOyB9CiAgICAg
CglpbnQgY29kZShmY250bF9jbWRfdCAqeCkgCQl7IHJldHVybiBjb2RlKCp4KTsgfQogICAgIAoJ
aW50IGNvZGUoc3RydWN0IHJ1c2FnZSAqeCkJCXsgcmV0dXJuIGNvZGUoKngpOyB9CiAgICAgCglp
bnQgY29kZShzdHJ1Y3Qgc3RhdGZzICp4KQkJeyByZXR1cm4gY29kZSgqeCk7IH0KICAgICAKCWlu
dCBjb2RlKHN0cnVjdCB0aW1lem9uZSAqeCkJeyByZXR1cm4gY29kZSgqeCk7IH0KICAgICAKCWlu
dCBjb2RlKHN0cnVjdCB0aW1ldmFsICp4KQkJeyByZXR1cm4gY29kZSgqeCk7IH0KICAgICAKCWlu
dCBjb2RlKHN0cnVjdCB1dGltYnVmICp4KQkJeyByZXR1cm4gY29kZSgqeCk7IH0KICAgICAKCWlu
dCBjb2RlKHN0cnVjdCBybGltaXQgKngpCQl7IHJldHVybiBjb2RlKCp4KTsgfQoJaW50IGNvZGUo
c3RydWN0IHV0c25hbWUgKngpCQl7IHJldHVybiBjb2RlKCp4KTsgfQoKCgogICAgIAoJaW50IGNv
ZGUoc3RydWN0IHN0YXQ2NCAqeCkJCXsgcmV0dXJuIGNvZGUoKngpOyB9CiAgICAgCglpbnQgY29k
ZShzdHJ1Y3QgcmxpbWl0NjQgKngpCXsgcmV0dXJuIGNvZGUoKngpOyB9CgogICAgIAoKICAgICAK
CgkgCgkgCgoJaW50IHB1dChjaGFyKTsKCWludCBwdXQodW5zaWduZWQgY2hhcik7CglpbnQgcHV0
KGludCk7CglpbnQgcHV0KHVuc2lnbmVkIGludCk7CglpbnQgcHV0KGxvbmcpOwoJaW50IHB1dCh1
bnNpZ25lZCBsb25nKTsKCglpbnQgcHV0KGxvbmcgbG9uZyk7CglpbnQgcHV0KHVuc2lnbmVkIGxv
bmcgbG9uZyk7CgoJaW50IHB1dChzaG9ydCk7CglpbnQgcHV0KHVuc2lnbmVkIHNob3J0KTsKCWlu
dCBwdXQoZmxvYXQpOwoJaW50IHB1dChkb3VibGUpOwoJaW50IHB1dChjaGFyICopOwoJaW50IHB1
dChjaGFyICosIGludCk7CgoKCSAKCSAKCglpbnQgZ2V0KGNoYXIgJik7CglpbnQgZ2V0KHVuc2ln
bmVkIGNoYXIgJik7CglpbnQgZ2V0KGludCAmKTsKCWludCBnZXQodW5zaWduZWQgaW50ICYpOwoJ
aW50IGdldChsb25nICYpOwoJaW50IGdldCh1bnNpZ25lZCBsb25nICYpOwoKCWludCBnZXQobG9u
ZyBsb25nICYpOwoJaW50IGdldCh1bnNpZ25lZCBsb25nIGxvbmcgJik7CgoJaW50IGdldChzaG9y
dCAmKTsKCWludCBnZXQodW5zaWduZWQgc2hvcnQgJik7CglpbnQgZ2V0KGZsb2F0ICYpOwoJaW50
IGdldChkb3VibGUgJik7CglpbnQgZ2V0KGNoYXIgKiYpOwoJaW50IGdldChjaGFyIComLCBpbnQg
Jik7CgoJIAoKCgogICAgIAoJdmlydHVhbCB+U3RyZWFtKCkge30gCgoJIAoKCSAKCiAgICAgCgoK
CgoJdmlydHVhbCBpbnQgcHV0X2J5dGVzKGNvbnN0IHZvaWQgKmRhdGEsIGludCBuKSA9IDA7Cgog
ICAgIAoKCgoKCXZpcnR1YWwgaW50IGdldF9ieXRlcyh2b2lkICpkYXRhLCBpbnQgbWF4bikgPSAw
OwoKICAgICAKCiAgICAgCgoKCgoKCgl2aXJ0dWFsIGludCBnZXRfcHRyKHZvaWQgKiYgcHRyLCBj
aGFyIGQpID0gMDsKCiAgICAgCgoKCgl2aXJ0dWFsIGludCBwZWVrKGNoYXIgJmMpID0gMDsKCiAg
ICAgCgoKCgoJdmlydHVhbCBpbnQgZW5kX29mX21lc3NhZ2UoKSA9IDA7CiAKCgkgCgl2aXJ0dWFs
IGludCB0aW1lb3V0KGludCkgPSAwOwoKCSAKCgoJdmlydHVhbCBzdHJlYW1fdHlwZSB0eXBlKCkg
PSAwOwoKCSAKCiAgICAgCgkgCiAgICBpbnQgc25kX2ludChpbnQgdmFsLCBpbnQgZW5kX29mX3Jl
Y29yZCk7CiAgICAgCglpbnQgcmN2X2ludChpbnQgJnZhbCwgaW50IGVuZF9vZl9yZWNvcmQpOwog
ICAgIAoKIAoKCnByb3RlY3RlZDoKCgkgCgkgCgl2aXJ0dWFsIGNoYXIgKiBzZXJpYWxpemUoY2hh
ciAqKSA9IDA7Cgl2aXJ0dWFsIGNoYXIgKiBzZXJpYWxpemUoKSBjb25zdCA9IDA7CgoJIAoKCgoJ
ZW51bSBzdHJlYW1fY29kaW5nIHsgc3RyZWFtX2RlY29kZSwgc3RyZWFtX2VuY29kZSwgc3RyZWFt
X3Vua25vd24gfTsKCgoJIAoKCgoJIAoJIAoJU3RyZWFtKHN0cmVhbV9jb2RlIGM9ZXh0ZXJuYWwp
CgkJOiBfY29kZShjKSwgX2NvZGluZyhzdHJlYW1fZW5jb2RlKQoJCXt9CgoKCSAKCgoKCXN0cmVh
bV9jb2RlCQlfY29kZTsKCXN0cmVhbV9jb2RpbmcJX2NvZGluZzsKfTsKCgoKCiMgMzggIi4uL2Nv
bmRvcl9pbmNsdWRlcy9jb25kb3JfYXR0cmxpc3QuaCIgMgoKCgoKZW51bQkJCQkJCQkgCnsKICAg
IEFUVFJMSVNURU5USVRZLAogICAgQVRUUkxJU1RSRVAKfTsKZW51bSB7QUdHX0lOU0VSVCwgQUdH
X1JFTU9WRX07CSAKCmNsYXNzIEF0dHJMaXN0RWxlbQp7CiAgICBwdWJsaWMgOgoKICAgICAgICBB
dHRyTGlzdEVsZW0oRXhwclRyZWUqKTsJCQkgCiAgICAgICAgQXR0ckxpc3RFbGVtKEF0dHJMaXN0
RWxlbSYpOwkJIAogICAgICAgIH5BdHRyTGlzdEVsZW0oKSB7IGRlbGV0ZSB0cmVlOyB9CSAKCiAg
ICAgICAgZnJpZW5kIGNsYXNzIEF0dHJMaXN0OwogICAgICAgIGZyaWVuZCBjbGFzcyBDbGFzc0Fk
OwogICAgICAgIGZyaWVuZCBjbGFzcyBBdHRyTGlzdExpc3Q7CiAgCiAgICBwcml2YXRlIDoKCiAg
ICAgICAgRXhwclRyZWUqCQl0cmVlOwkgCgkJaW50CQkJCWRpcnR5OwkgCgkJY2hhcioJCQluYW1l
OwkgCiAgICAgICAgY2xhc3MgQXR0ckxpc3RFbGVtKgluZXh0OwkgCn07CgpjbGFzcyBBdHRyTGlz
dEFic3RyYWN0CnsKICAgIHB1YmxpYyA6CgoJCWludAkJVHlwZSgpIHsgcmV0dXJuIHR5cGU7IH0J
CSAKCgkJZnJpZW5kCWNsYXNzCQlBdHRyTGlzdDsKCQlmcmllbmQJY2xhc3MJCUF0dHJMaXN0TGlz
dDsKCQlmcmllbmQJY2xhc3MJCUNsYXNzQWQ7CgkJZnJpZW5kCWNsYXNzCQlDbGFzc0FkTGlzdDsK
CiAgICBwcm90ZWN0ZWQgOgoKCQlBdHRyTGlzdEFic3RyYWN0KGludCk7CgkJdmlydHVhbCB+QXR0
ckxpc3RBYnN0cmFjdCgpIHt9CgoJCWludAkJCQkJdHlwZTsJCSAKCQljbGFzcyBBdHRyTGlzdExp
c3QqCWluTGlzdDsJCSAKCQljbGFzcyBBdHRyTGlzdEFic3RyYWN0KgluZXh0OwkJIAoJCWNsYXNz
IEF0dHJMaXN0QWJzdHJhY3QqCXByZXY7CQkgCn07CgpjbGFzcyBBdHRyTGlzdFJlcDogcHVibGlj
IEF0dHJMaXN0QWJzdHJhY3QKewogICAgcHVibGljOgoKICAgICAgICBBdHRyTGlzdFJlcChBdHRy
TGlzdCosIEF0dHJMaXN0TGlzdCopOwkgCgoJCWZyaWVuZAkJCUF0dHJMaXN0OwoJCWZyaWVuZAkJ
CUF0dHJMaXN0TGlzdDsKCiAgICBwcml2YXRlOgoKICAgICAgICBBdHRyTGlzdCoJCWF0dHJMaXN0
OwkJIAogICAgICAgIEF0dHJMaXN0UmVwKgluZXh0UmVwOwkJIAp9OwoKY2xhc3MgQXR0ckxpc3Qg
OiBwdWJsaWMgQXR0ckxpc3RBYnN0cmFjdAp7CiAgICBwdWJsaWMgOgoJICAgIHZvaWQgQ2hhaW5U
b0FkKCBBdHRyTGlzdCAqICk7CgoJCSAKCQlBdHRyTGlzdCgpOwkJCQkJCQkgCiAgICAgICAgQXR0
ckxpc3QoQXR0ckxpc3RMaXN0Kik7CQkJIAogICAgICAgIEF0dHJMaXN0KEZJTEUqLGNoYXIqLGlu
dCYsaW50JixpbnQmKTsgCiAKIAogICAgICAgIEF0dHJMaXN0KGNoYXIgKiwgY2hhcik7CQkJCSAK
ICAgICAgICBBdHRyTGlzdChBdHRyTGlzdCYpOwkJCQkgCiAgICAgICAgdmlydHVhbCB+QXR0ckxp
c3QoKTsJCQkJIAoKCQkgCiAgICAgICAgaW50ICAgICAgICAJSW5zZXJ0KGNoYXIqKTsJCQkgCiAg
ICAgICAgaW50ICAgICAgICAJSW5zZXJ0KEV4cHJUcmVlKik7CQkgCgkJaW50CQkJSW5zZXJ0T3JV
cGRhdGUoY2hhcipleHByKSB7IHJldHVybiBJbnNlcnQoZXhwcik7IH0KCgkJIAogICAgICAgIGlu
dAkJCURlbGV0ZShjb25zdCBjaGFyKik7IAkgCgoJCSAKCQl2b2lkCQlSZXNldEZsYWdzKCk7CQkJ
IAoKCgoKCgkJIAoJCXZvaWQJCVJlc2V0RXhwcigpIHsgdGhpcy0+cHRyRXhwciA9IGV4cHJMaXN0
OyB9CgkJRXhwclRyZWUqCU5leHRFeHByKCk7CQkJCQkgCgoJCSAKCQl2b2lkCQlSZXNldE5hbWUo
KSB7IHRoaXMtPnB0ck5hbWUgPSBleHByTGlzdDsgfQoJCWNoYXIqCQlOZXh0TmFtZSgpOwkJCQkJ
IAoKCQkgCgkJRXhwclRyZWUqICAgTG9va3VwKGNoYXIgKik7ICAJCSAKICAgICAgICBFeHByVHJl
ZSoJTG9va3VwKGNvbnN0IGNoYXIqKTsJIAoJCUV4cHJUcmVlKglMb29rdXAoY29uc3QgRXhwclRy
ZWUqKTsKCQlpbnQgICAgICAgICBMb29rdXBTdHJpbmcoY29uc3QgY2hhciAqLCBjaGFyICopOyAK
ICAgICAgICBpbnQgICAgICAgICBMb29rdXBJbnRlZ2VyKGNvbnN0IGNoYXIgKiwgaW50ICYpOwog
ICAgICAgIGludCAgICAgICAgIExvb2t1cEZsb2F0KGNvbnN0IGNoYXIgKiwgZmxvYXQgJik7CiAg
ICAgICAgaW50ICAgICAgICAgTG9va3VwQm9vbChjb25zdCBjaGFyICosIGludCAmKTsKCgkJIAoJ
CWludCAgICAgICAgIEV2YWxTdHJpbmcgKGNvbnN0IGNoYXIgKiwgY2xhc3MgQXR0ckxpc3QgKiwg
Y2hhciAqKTsKCQlpbnQgICAgICAgICBFdmFsSW50ZWdlciAoY29uc3QgY2hhciAqLCBjbGFzcyBB
dHRyTGlzdCAqLCBpbnQgJik7CgkJaW50ICAgICAgICAgRXZhbEZsb2F0IChjb25zdCBjaGFyICos
IGNsYXNzIEF0dHJMaXN0ICosIGZsb2F0ICYpOwoJCWludCAgICAgICAgIEV2YWxCb29sICAoY29u
c3QgY2hhciAqLCBjbGFzcyBBdHRyTGlzdCAqLCBpbnQgJik7CgoJCWludAkJCUlzSW5MaXN0KEF0
dHJMaXN0TGlzdCopOwkgCgoJCSAKCQlpbnQJCQlmUHJpbnRFeHByKEZJTEUqLCBjaGFyKik7CSAK
ICAgICAgICB2aXJ0dWFsIGludAlmUHJpbnQoRklMRSopOwkJCQkgCgoJCSAKIAoKICAgICAgICAg
CiAgICAgICAgaW50IHB1dChTdHJlYW0mIHMpOwogICAgICAgIGludCBnZXQoU3RyZWFtJiBzKTsK
ICAgICAgICBpbnQgY29kZShTdHJlYW0mIHMpOwoKCgoKCgoJCWZyaWVuZAljbGFzcwlBdHRyTGlz
dFJlcDsJCQkgCgkJZnJpZW5kCWNsYXNzCUF0dHJMaXN0TGlzdDsJCQkgCgkJZnJpZW5kCWNsYXNz
CUNsYXNzQWQ7CgogICAgcHJvdGVjdGVkIDoKCSAgICBBdHRyTGlzdEVsZW0qKgljaGFpbmVkQXR0
cnM7CgoJCSAKCQkgCiAgICAgIAlpbnQJCQkJVXBkYXRlQWdnKEV4cHJUcmVlKiwgaW50KTsKCQkg
CgkJIAoJCUV4cHJUcmVlKgkJUHJvY1RvVHJlZShjaGFyKiwgTGV4ZW1lVHlwZSwgaW50LCBmbG9h
dCwgY2hhciopOwogICAgICAgIEF0dHJMaXN0RWxlbSoJZXhwckxpc3Q7CQkgCgkJQXR0ckxpc3RM
aXN0Kglhc3NvY2lhdGVkTGlzdDsJIAoJCUF0dHJMaXN0RWxlbSoJdGFpbDsJCQkgCgkJQXR0ckxp
c3RFbGVtKglwdHJFeHByOwkJIAoJCUF0dHJMaXN0RWxlbSoJcHRyTmFtZTsJCSAKCQlpbnQJCQkJ
c2VxOwkJCSAKcHJpdmF0ZToKCWJvb2wgaW5zaWRlX2luc2VydDsKfTsKCmNsYXNzIEF0dHJMaXN0
TGlzdAp7CiAgICBwdWJsaWM6CiAgICAKICAgICAgICBBdHRyTGlzdExpc3QoKTsJCQkJCSAKICAg
ICAgICBBdHRyTGlzdExpc3QoQXR0ckxpc3RMaXN0Jik7CSAKICAgICAgICB2aXJ0dWFsIH5BdHRy
TGlzdExpc3QoKTsJCSAKCiAgICAgICAgdm9pZCAJICAJT3BlbigpOwkJCQkgCiAgICAgICAgdm9p
ZCAJICAJQ2xvc2UoKTsJCQkgCiAgICAgICAgQXR0ckxpc3QqIAlOZXh0KCk7CQkJCSAKICAgICAg
ICBFeHByVHJlZSogCUxvb2t1cChjb25zdCBjaGFyKiwgQXR0ckxpc3QqJik7CSAKICAgICAgCUV4
cHJUcmVlKiAJTG9va3VwKGNvbnN0IGNoYXIqKTsKCiAgICAgIAl2b2lkIAkgIAlJbnNlcnQoQXR0
ckxpc3QqKTsJIAogICAgICAJaW50CQkJRGVsZXRlKEF0dHJMaXN0Kik7IAkgCgogICAgICAJdm9p
ZCAgCSAgCWZQcmludEF0dHJMaXN0TGlzdChGSUxFICopOyAJIAogICAgICAJaW50IAkgIAlNeUxl
bmd0aCgpIHsgcmV0dXJuIGxlbmd0aDsgfSAJIAogICAgICAJRXhwclRyZWUqIAlCdWlsZEFnZyhj
aGFyKiwgTGV4ZW1lVHlwZSk7CSAKCiAgICAgIAlmcmllbmQJICAJY2xhc3MJCUF0dHJMaXN0Owog
ICAgICAJZnJpZW5kCSAgCWNsYXNzCQlDbGFzc0FkOwogIAogICAgcHJvdGVjdGVkOgoKICAgICAg
ICAgCgkJdm9pZAkJCQlVcGRhdGVBZ2coRXhwclRyZWUqLCBpbnQpOwoKICAgICAgICBBdHRyTGlz
dEFic3RyYWN0KgloZWFkOwkJCSAKICAgICAgICBBdHRyTGlzdEFic3RyYWN0Kgl0YWlsOwkJCSAK
ICAgICAgICBBdHRyTGlzdEFic3RyYWN0KglwdHI7CQkJIAogICAgICAgIGNsYXNzIEF0dHJMaXN0
TGlzdCoJCWFzc29jaWF0ZWRBdHRyTGlzdHM7CSAKICAgICAgICBpbnQJCQkJCWxlbmd0aDsJCQkg
Cn07CgoKIyAzNiAiLi4vY29uZG9yX2luY2x1ZGVzL2NvbmRvcl9jbGFzc2FkLmgiIDIKCgoKCiAK
CgpzdHJ1Y3QgQWRUeXBlICAgICAgICAgICAgICAgICAgICAKewogICAgaW50CQludW1iZXI7ICAg
ICAgICAgICAgICAKICAgIGNoYXIqCW5hbWU7ICAgICAgICAgICAgICAgIAogICAgCiAgICBBZFR5
cGUoY2hhciAqID0gX19udWxsICk7ICAgICAgIAogICAgfkFkVHlwZSgpOyAgICAgICAgICAgICAg
ICAgICAKfTsKCgpjbGFzcyBDbGFzc0FkIDogcHVibGljIEF0dHJMaXN0CnsKICAgIHB1YmxpYyA6
CgoJCUNsYXNzQWQoKTsJCQkJCQkJCSAKIAogCiAgICAgICAgQ2xhc3NBZChGSUxFKixjaGFyKixp
bnQmLGludCYsaW50Jik7CSAKICAgICAgICBDbGFzc0FkKGNoYXIgKiwgY2hhcik7CQkJCQkgCgkJ
Q2xhc3NBZChjb25zdCBDbGFzc0FkJik7CQkJCSAKICAgICAgICB2aXJ0dWFsIH5DbGFzc0FkKCk7
CQkJCQkJIAoKCQkgCiAgICAgICAgdm9pZAkJU2V0TXlUeXBlTmFtZShjaGFyICopOwkJIAogICAg
ICAgIGNoYXIqCQlHZXRNeVR5cGVOYW1lKCk7CQkJIAogICAgICAgIHZvaWQgCQlTZXRUYXJnZXRU
eXBlTmFtZShjaGFyICopOwkgCiAgICAgICAgY2hhcioJCUdldFRhcmdldFR5cGVOYW1lKCk7CQkg
CiAgICAgICAgaW50CQkJR2V0TXlUeXBlTnVtYmVyKCk7CQkJIAogICAgICAgIGludAkJCUdldFRh
cmdldFR5cGVOdW1iZXIoKTsJCSAKCgkJIAoKCgoKCQlFeHByVHJlZQkqR2V0UmVxdWlyZW1lbnRz
KHZvaWQpOwoKCQkgCgoKCgoJCUV4cHJUcmVlCSpHZXRSYW5rRXhwcih2b2lkKTsKCgkJIAoJCXZv
aWQJCVNldFNlcXVlbmNlTnVtYmVyKGludCk7CgkJaW50CQkJR2V0U2VxdWVuY2VOdW1iZXIodm9p
ZCk7CgoJCSAKICAgICAgICBpbnQJCQlJc0FNYXRjaChjbGFzcyBDbGFzc0FkKik7CQkJICAgCgkJ
ZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjbGFzcyBDbGFzc0FkJixjbGFzcyBDbGFzc0FkJik7IAoJ
CWZyaWVuZCBib29sIG9wZXJhdG9yPj0oY2xhc3MgQ2xhc3NBZCYsY2xhc3MgQ2xhc3NBZCYpOyAK
CQlmcmllbmQgYm9vbCBvcGVyYXRvcjw9KGNsYXNzIENsYXNzQWQmLGNsYXNzIENsYXNzQWQmKTsg
CgogICAgICAgICAKICAgICAgICBpbnQgcHV0KFN0cmVhbSYgcyk7CiAgICAgICAgaW50IGdldChT
dHJlYW0mIHMpOwogICAgICAgIGludCBjb2RlKFN0cmVhbSYgcyk7CgoKCgoKCgoJCSAKCQljbGFz
cyBDbGFzc0FkKglGaW5kTmV4dCgpOwogICAgICAgIHZpcnR1YWwgaW50CWZQcmludChGSUxFKik7
CQkJCSAKCgkJIAoJCSB2b2lkIEV4Y2hhbmdlRXhwcmVzc2lvbnMgKGNsYXNzIENsYXNzQWQgKik7
CgogICAgcHJpdmF0ZSA6CgoJCUFkVHlwZSoJCW15VHlwZTsJCQkJCQkgCiAgICAgICAgQWRUeXBl
KgkJdGFyZ2V0VHlwZTsJCQkJCSAKCQkgCn07Cgp0eXBlZGVmIGludCAoKlNvcnRGdW5jdGlvblR5
cGUpKEF0dHJMaXN0QWJzdHJhY3QqLEF0dHJMaXN0QWJzdHJhY3QqLHZvaWQqKTsKCmNsYXNzIENs
YXNzQWRMaXN0IDogcHVibGljIEF0dHJMaXN0TGlzdAp7CiAgcHVibGljOgoJQ2xhc3NBZExpc3Qo
KSA6IEF0dHJMaXN0TGlzdCgpIHt9CgoJQ2xhc3NBZCoJTmV4dCgpIHsgcmV0dXJuIChDbGFzc0Fk
KilBdHRyTGlzdExpc3Q6Ok5leHQoKTsgfQoJdm9pZAkJSW5zZXJ0KENsYXNzQWQqIGNhKSB7IEF0
dHJMaXN0TGlzdDo6SW5zZXJ0KChBdHRyTGlzdCopY2EpOyB9CglpbnQJCQlEZWxldGUoQ2xhc3NB
ZCogY2Epe3JldHVybiBBdHRyTGlzdExpc3Q6OkRlbGV0ZSgoQXR0ckxpc3QqKWNhKTt9CglDbGFz
c0FkKglMb29rdXAoY29uc3QgY2hhciogbmFtZSk7CgoJIAoJIAoJIAoJIAoJdm9pZCAgIFNvcnQo
U29ydEZ1bmN0aW9uVHlwZSx2b2lkKiA9IF9fbnVsbCApOwoKICBwcml2YXRlOgoJdm9pZAlTb3J0
KFNvcnRGdW5jdGlvblR5cGUsdm9pZCosQXR0ckxpc3RBYnN0cmFjdComKTsKCXN0YXRpYyBpbnQg
U29ydENvbXBhcmUoY29uc3Qgdm9pZCosIGNvbnN0IHZvaWQqKTsKfTsKCgojIDQgImdyaWRtYW5h
Z2VyLkMiIDIKCiMgMSAiLi4vY29uZG9yX2luY2x1ZGVzL2NvbmRvcl9xbWdyLmgiIDEKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgQ2xhc3NBZDsKCgp0eXBlZGVmIHN0cnVjdCB7Cgli
b29sIGR1bW15Owp9IFFtZ3JfY29ubmVjdGlvbjsKCnR5cGVkZWYgaW50ICgqc2Nhbl9mdW5jKShD
bGFzc0FkICphZCk7CgoKCmV4dGVybiAiQyIgewoKCmludCBJbml0aWFsaXplQ29ubmVjdGlvbihj
b25zdCBjaGFyICogKTsKaW50IEluaXRpYWxpemVSZWFkT25seUNvbm5lY3Rpb24oY29uc3QgY2hh
ciAqICk7CgogCgoKCgoKCgoJCSAKUW1ncl9jb25uZWN0aW9uICpDb25uZWN0UShjaGFyICpxbWdy
X2xvY2F0aW9uLCBpbnQgdGltZW91dD0wLCAKCQkJCWJvb2wgcmVhZF9vbmx5PWZhbHNlICk7CiAK
CgoKCmJvb2wgRGlzY29ubmVjdFEoUW1ncl9jb25uZWN0aW9uICpxbWdyKTsKCiAKCgoKaW50IE5l
d0NsdXN0ZXIodm9pZCk7CiAKCgoKaW50IE5ld1Byb2MoIGludCBjbHVzdGVyX2lkKTsKIAoKCgoK
aW50IERlc3Ryb3lQcm9jKGludCBjbHVzdGVyX2lkLCBpbnQgcHJvY19pZCk7CiAKCmludCBEZXN0
cm95Q2x1c3RlcihpbnQgY2x1c3Rlcl9pZCk7CiAKCgoKCmludCBTZXRBdHRyaWJ1dGVCeUNvbnN0
cmFpbnQoY29uc3QgY2hhciAqY29uc3RyYWludCwgY29uc3QgY2hhciAqYXR0ciwKCQkJCQkJCSBj
aGFyICp2YWx1ZSk7CiAKCgoKCmludCBTZXRBdHRyaWJ1dGVJbnRCeUNvbnN0cmFpbnQoY29uc3Qg
Y2hhciAqY29uc3RyYWludCwgY29uc3QgY2hhciAqYXR0ciwKCQkJCQkJCQlpbnQgdmFsdWUpOwog
CgoKCgppbnQgU2V0QXR0cmlidXRlRmxvYXRCeUNvbnN0cmFpbnQoY29uc3QgY2hhciAqY29uc3Ry
YWluZywgY29uc3QgY2hhciAqYXR0ciwKCQkJCQkJCQkgIGZsb2F0IHZhbHVlKTsKIAoKCgoKaW50
IFNldEF0dHJpYnV0ZVN0cmluZ0J5Q29uc3RyYWludChjb25zdCBjaGFyICpjb25zdHJhaW50LCBj
b25zdCBjaGFyICphdHRyLAoJCQkJCQkJCSAgIGNoYXIgKnZhbHVlKTsKIAoKCgoKaW50IFNldEF0
dHJpYnV0ZShpbnQgY2x1c3RlciwgaW50IHByb2MsIGNvbnN0IGNoYXIgKmF0dHIsIGNoYXIgKnZh
bHVlKTsKIAoKCgoKaW50IFNldEF0dHJpYnV0ZUludChpbnQgY2x1c3RlciwgaW50IHByb2MsIGNv
bnN0IGNoYXIgKmF0dHIsIGludCB2YWx1ZSk7CiAKCgoKCmludCBTZXRBdHRyaWJ1dGVGbG9hdChp
bnQgY2x1c3RlciwgaW50IHByb2MsIGNvbnN0IGNoYXIgKmF0dHIsIGZsb2F0IHZhbHVlKTsKIAoK
CgoKaW50IFNldEF0dHJpYnV0ZVN0cmluZyhpbnQgY2x1c3RlciwgaW50IHByb2MsIGNvbnN0IGNo
YXIgKmF0dHIsIGNoYXIgKnZhbHVlKTsKCmludCBDbG9zZUNvbm5lY3Rpb24oKTsKCiAKCgppbnQg
R2V0QXR0cmlidXRlRmxvYXQoaW50IGNsdXN0ZXIsIGludCBwcm9jLCBjb25zdCBjaGFyICphdHRy
LCBmbG9hdCAqdmFsdWUpOwogCgoKaW50IEdldEF0dHJpYnV0ZUludChpbnQgY2x1c3RlciwgaW50
IHByb2MsIGNvbnN0IGNoYXIgKmF0dHIsIGludCAqdmFsdWUpOwogCgoKaW50IEdldEF0dHJpYnV0
ZVN0cmluZyhpbnQgY2x1c3RlciwgaW50IHByb2MsIGNvbnN0IGNoYXIgKmF0dHIsIGNoYXIgKnZh
bHVlKTsKIAoKCmludCBHZXRBdHRyaWJ1dGVFeHByKGludCBjbHVzdGVyLCBpbnQgcHJvYywgY29u
c3QgY2hhciAqYXR0ciwgY2hhciAqdmFsdWUpOwogCgoKaW50IERlbGV0ZUF0dHJpYnV0ZShpbnQg
Y2x1c3RlciwgaW50IHByb2MsIGNvbnN0IGNoYXIgKmF0dHIpOwoKIAoKCgpDbGFzc0FkICpHZXRK
b2JBZChpbnQgY2x1c3Rlcl9pZCwgaW50IHByb2NfaWQpOwogCgoKQ2xhc3NBZCAqR2V0Sm9iQnlD
b25zdHJhaW50KGNvbnN0IGNoYXIgKmNvbnN0cmFpbnQpOwogCgoKCgpDbGFzc0FkICpHZXROZXh0
Sm9iKGludCBpbml0U2Nhbik7CiAKCgpDbGFzc0FkICpHZXROZXh0Sm9iQnlDb25zdHJhaW50KGNv
bnN0IGNoYXIgKmNvbnN0cmFpbnQsIGludCBpbml0U2Nhbik7CiAKCgp2b2lkIEZyZWVKb2JBZChD
bGFzc0FkIComYWQpOwoKIAoKCgoKaW50IFNlbmRTcG9vbEZpbGUoY2hhciAqZmlsZW5hbWUpOwog
CgoKaW50IFNlbmRTcG9vbEZpbGVCeXRlcyhjaGFyICpmaWxlbmFtZSk7Cgp2b2lkIFdhbGtKb2JR
dWV1ZShzY2FuX2Z1bmMpOwoKdm9pZCBJbml0UW1nbXQoKTsKdm9pZCBJbml0Sm9iUXVldWUoY29u
c3QgY2hhciAqam9iX3F1ZXVlX25hbWUpOwp2b2lkIENsZWFuSm9iUXVldWUoKTsKCmludCBydXNh
Z2VfdG9fZmxvYXQoc3RydWN0IHJ1c2FnZSwgZmxvYXQgKiwgZmxvYXQgKik7CmludCBmbG9hdF90
b19ydXNhZ2UoZmxvYXQsIGZsb2F0LCBzdHJ1Y3QgcnVzYWdlICopOwoKIAoKCmludCBHZXRQcm9j
KGludCwgaW50LCBQUk9DICopOwoKCgp9CgoKCgoKCiMgNSAiZ3JpZG1hbmFnZXIuQyIgMgoKCiMg
MSAiZ3JpZG1hbmFnZXIuaCIgMQoKCgoKCiMgMSAiLi4vY29uZG9yX2MrK191dGlsL3VzZXJfbG9n
LmMrKy5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKdHlwZWRlZiBpbnQg
Qk9PTEVBTjsKdHlwZWRlZiBpbnQgQk9PTF9UOwoKCgoKCgoKCgoKCgoKIyAxICIuLi9jb25kb3Jf
YysrX3V0aWwvY29uZG9yX2V2ZW50LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDM2
ICIuLi9jb25kb3JfYysrX3V0aWwvY29uZG9yX2V2ZW50LmgiCgoKCgogCgoKCgoKCiMgMSAiL3Mv
Z2NjLTIuOTUuMi9zdW54ODZfNTYvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi42LzIuOTUu
Mi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAogCgoKIAoKIyAxMTQgIi9zL2djYy0yLjk1LjIvc3Vu
eDg2XzU2L2xpYi9nY2MtbGliL2kzODYtcGMtc29sYXJpczIuNi8yLjk1LjIvaW5jbHVkZS9saW1p
dHMuaCIgMyA0CgoKCgoKCgojIDQ3ICIuLi9jb25kb3JfYysrX3V0aWwvY29uZG9yX2V2ZW50Lmgi
IDIKCgogCiAKCgplbnVtIFVMb2dFdmVudE51bWJlciB7CiAgICAgICBVTE9HX1NVQk1JVCwKICAg
ICAgIFVMT0dfRVhFQ1VURSwKICAgICAgIFVMT0dfRVhFQ1VUQUJMRV9FUlJPUiwKICAgICAgIFVM
T0dfQ0hFQ0tQT0lOVEVELAogICAgICAgVUxPR19KT0JfRVZJQ1RFRCwKICAgICAgIFVMT0dfSk9C
X1RFUk1JTkFURUQsCiAgICAgICBVTE9HX0lNQUdFX1NJWkUsCiAgICAgICBVTE9HX1NIQURPV19F
WENFUFRJT04sCgogICAgICAgVUxPR19HRU5FUklDLAoKICAgICAgIFVMT0dfSk9CX0FCT1JURUQK
fTsKCiAKZXh0ZXJuIGNvbnN0IGNoYXIgKiBVTG9nRXZlbnROdW1iZXJOYW1lc1tdOwoKIAogCgoK
ZW51bSBVTG9nRXZlbnRPdXRjb21lCnsKICAgICAgVUxPR19PSywKICAgICAgVUxPR19OT19FVkVO
VCwKICAgICAgVUxPR19SRF9FUlJPUiwKICAgICAgVUxPR19VTktfRVJST1IKfTsKCiAKZXh0ZXJu
IGNvbnN0IGNoYXIgKiBVTG9nRXZlbnRPdXRjb21lTmFtZXNbXTsKCiAKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpjbGFzcyBVTG9nRXZlbnQgewogIHB1YmxpYzoKICAg
ICAKCgoKICAgIFVMb2dFdmVudCgpOwogICAgCiAgICAgCiAgICB2aXJ0dWFsIH5VTG9nRXZlbnQo
KTsKICAgIAogICAgIAoKCgogICAgaW50IGdldEV2ZW50IChGSUxFICpmaWxlKTsKICAgIAogICAg
IAoKCgoKICAgIGludCBwdXRFdmVudCAoRklMRSAqZmlsZSk7CiAgICAKICAgICAKICAgIFVMb2dF
dmVudE51bWJlciAgICBldmVudE51bWJlcjsKCiAgICAgCiAgICBzdHJ1Y3QgdG0gICAgICAgICAg
ZXZlbnRUaW1lOwoKICAgICAKICAgIGludCAgICAgICAgICAgICAgICBjbHVzdGVyOwogICAgIAog
ICAgaW50ICAgICAgICAgICAgICAgIHByb2M7ICAgICAgICAgICAgCiAgICAgCiAgICBpbnQgICAg
ICAgICAgICAgICAgc3VicHJvYzsKICAgIAogIHByb3RlY3RlZDoKCiAgICAgCgoKCgogICAgaW50
IHJlYWRSdXNhZ2UgKEZJTEUgKiBmaWxlLCBydXNhZ2UgJiB1c2FnZSk7CgogICAgIAoKCgoKICAg
IGludCB3cml0ZVJ1c2FnZSAoRklMRSAqLCBydXNhZ2UgJik7CgogICAgIAoKCgoKICAgIHZpcnR1
YWwgaW50IHJlYWRFdmVudCAoRklMRSAqZmlsZSkgPSAwOwoKICAgICAKCgoKCiAgICB2aXJ0dWFs
IGludCB3cml0ZUV2ZW50IChGSUxFICpmaWxlKSA9IDA7CiAgICAKICAgICAKCgoKICAgIGludCBy
ZWFkSGVhZGVyIChGSUxFICpmaWxlKTsKCiAgICAgCgoKCiAgICBpbnQgd3JpdGVIZWFkZXIgKEZJ
TEUgKmZpbGUpOwp9OwoKIAogCgoKClVMb2dFdmVudCAqaW5zdGFudGlhdGVFdmVudCAoVUxvZ0V2
ZW50TnVtYmVyIGV2ZW50KTsKCiAKIAoKCgoKCgoKY2xhc3MgU3VibWl0RXZlbnQgOiBwdWJsaWMg
VUxvZ0V2ZW50CnsKICBwdWJsaWM6CiAgICAgCiAgICBTdWJtaXRFdmVudCgpOwogICAgIAogICAg
flN1Ym1pdEV2ZW50KCk7CgogICAgIAoKCgogICAgdmlydHVhbCBpbnQgcmVhZEV2ZW50IChGSUxF
ICopOwoKICAgICAKCgoKICAgIHZpcnR1YWwgaW50IHdyaXRlRXZlbnQgKEZJTEUgKik7CgogICAg
IAogICAgY2hhciBzdWJtaXRIb3N0WzEyOF07Cn07CgoKCgogCiAKCgoKCgoKCgoKCmNsYXNzIEdl
bmVyaWNFdmVudCA6IHB1YmxpYyBVTG9nRXZlbnQKewogIHB1YmxpYzoKICAgICAKICAgIEdlbmVy
aWNFdmVudCgpOwogICAgIAogICAgfkdlbmVyaWNFdmVudCgpOwoKICAgICAKCgoKICAgIHZpcnR1
YWwgaW50IHJlYWRFdmVudCAoRklMRSAqKTsKCiAgICAgCgoKCiAgICB2aXJ0dWFsIGludCB3cml0
ZUV2ZW50IChGSUxFICopOwoKICAgICAKICAgIGNoYXIgaW5mb1sxMjhdOwp9OwoKCiAKIAoKCgoK
CgoKY2xhc3MgRXhlY3V0ZUV2ZW50IDogcHVibGljIFVMb2dFdmVudAp7CiAgcHVibGljOgogICAg
IAogICAgRXhlY3V0ZUV2ZW50KCk7CiAgICAgCiAgICB+RXhlY3V0ZUV2ZW50KCk7CgogICAgIAoK
CgogICAgdmlydHVhbCBpbnQgcmVhZEV2ZW50IChGSUxFICopOwoKICAgICAKCgoKICAgIHZpcnR1
YWwgaW50IHdyaXRlRXZlbnQgKEZJTEUgKik7CgogICAgIAogICAgY2hhciBleGVjdXRlSG9zdFsx
MjhdOwp9OwoKIAogCmVudW0gRXhlY0Vycm9yVHlwZSB7CiAgICAgIENPTkRPUl9FVkVOVF9OT1Rf
RVhFQ1VUQUJMRSwKICAgICAgQ09ORE9SX0VWRU5UX0JBRF9MSU5LCn07CgogCiAKY2xhc3MgRXhl
Y3V0YWJsZUVycm9yRXZlbnQgOiBwdWJsaWMgVUxvZ0V2ZW50CnsKICBwdWJsaWM6CiAgICAgCiAg
ICBFeGVjdXRhYmxlRXJyb3JFdmVudCgpOwogICAgIAogICAgfkV4ZWN1dGFibGVFcnJvckV2ZW50
KCk7CgogICAgIAoKCgogICAgdmlydHVhbCBpbnQgcmVhZEV2ZW50IChGSUxFICopOwoKICAgICAK
CgoKICAgIHZpcnR1YWwgaW50IHdyaXRlRXZlbnQgKEZJTEUgKik7CgogICAgIAogICAgRXhlY0Vy
cm9yVHlwZSAgIGVyclR5cGU7Cn07CiAgICAKIAogCgoKY2xhc3MgQ2hlY2twb2ludGVkRXZlbnQg
OiBwdWJsaWMgVUxvZ0V2ZW50CnsKICBwdWJsaWM6CiAgICAgCiAgICBDaGVja3BvaW50ZWRFdmVu
dCgpOwogICAgIAogICAgfkNoZWNrcG9pbnRlZEV2ZW50KCk7CgogICAgIAoKCgogICAgdmlydHVh
bCBpbnQgcmVhZEV2ZW50IChGSUxFICopOwoKICAgICAKCgoKICAgIHZpcnR1YWwgaW50IHdyaXRl
RXZlbnQgKEZJTEUgKik7CgogICAgICAgcnVzYWdlICBydW5fbG9jYWxfcnVzYWdlOwogICAgICAg
cnVzYWdlICBydW5fcmVtb3RlX3J1c2FnZTsKfTsKCgogCiAKCgpjbGFzcyBKb2JBYm9ydGVkRXZl
bnQgOiBwdWJsaWMgVUxvZ0V2ZW50CnsKICBwdWJsaWM6CiAgICAgCiAgICBKb2JBYm9ydGVkRXZl
bnQoKTsKICAgICAKICAgIH5Kb2JBYm9ydGVkRXZlbnQoKTsKCiAgICAgCgoKCiAgICB2aXJ0dWFs
IGludCByZWFkRXZlbnQgKEZJTEUgKik7CgogICAgIAoKCgogICAgdmlydHVhbCBpbnQgd3JpdGVF
dmVudCAoRklMRSAqKTsKfTsKCgogCiAKCgoKCgoKCgoKCgpjbGFzcyBKb2JFdmljdGVkRXZlbnQg
OiBwdWJsaWMgVUxvZ0V2ZW50CnsKICBwdWJsaWM6CiAgICAgCiAgICBKb2JFdmljdGVkRXZlbnQo
KTsKICAgICAKICAgIH5Kb2JFdmljdGVkRXZlbnQoKTsKCiAgICAgCgoKCiAgICB2aXJ0dWFsIGlu
dCByZWFkRXZlbnQgKEZJTEUgKik7CgogICAgIAoKCgogICAgdmlydHVhbCBpbnQgd3JpdGVFdmVu
dCAoRklMRSAqKTsKCiAgICAgCiAgICBib29sICAgIGNoZWNrcG9pbnRlZDsKCiAgICAgIHJ1c2Fn
ZSAgcnVuX2xvY2FsX3J1c2FnZTsKICAgICAgcnVzYWdlICBydW5fcmVtb3RlX3J1c2FnZTsKCgkg
CglmbG9hdCBzZW50X2J5dGVzOwoJIAoJZmxvYXQgcmVjdmRfYnl0ZXM7Cn07CgoKIAogCgoKCgoK
CgoKCgoKCmNsYXNzIEpvYlRlcm1pbmF0ZWRFdmVudCA6IHB1YmxpYyBVTG9nRXZlbnQKewogIHB1
YmxpYzoKICAgICAKICAgIEpvYlRlcm1pbmF0ZWRFdmVudCgpOwogICAgIAogICAgfkpvYlRlcm1p
bmF0ZWRFdmVudCgpOwoKICAgICAKCgoKICAgIHZpcnR1YWwgaW50IHJlYWRFdmVudCAoRklMRSAq
KTsKCiAgICAgCgoKCiAgICB2aXJ0dWFsIGludCB3cml0ZUV2ZW50IChGSUxFICopOwoKCiAgICAg
CiAgICBib29sICAgIG5vcm1hbDsKCiAgICAgCiAgICBpbnQgICAgIHJldHVyblZhbHVlOwoKICAg
ICAKICAgIGludCAgICAgc2lnbmFsTnVtYmVyOwoKICAgICAKICAgIGNoYXIgICAgY29yZUZpbGVb
MjU1IF07CgogICAgICAgICBydXNhZ2UgIHJ1bl9sb2NhbF9ydXNhZ2U7CiAgICAgICAgIHJ1c2Fn
ZSAgcnVuX3JlbW90ZV9ydXNhZ2U7CiAgICAgICAgIHJ1c2FnZSAgdG90YWxfbG9jYWxfcnVzYWdl
OwogICAgICAgICBydXNhZ2UgIHRvdGFsX3JlbW90ZV9ydXNhZ2U7CgoJIAoJZmxvYXQgc2VudF9i
eXRlczsKCSAKCWZsb2F0IHJlY3ZkX2J5dGVzOwoJIAoJZmxvYXQgdG90YWxfc2VudF9ieXRlczsK
CSAKCSAKCWZsb2F0IHRvdGFsX3JlY3ZkX2J5dGVzOwp9OwoKCiAKIAoKCmNsYXNzIEpvYkltYWdl
U2l6ZUV2ZW50IDogcHVibGljIFVMb2dFdmVudAp7CiAgcHVibGljOgogICAgIAogICAgSm9iSW1h
Z2VTaXplRXZlbnQoKTsKICAgICAKICAgIH5Kb2JJbWFnZVNpemVFdmVudCgpOwoKICAgICAKCgoK
ICAgIHZpcnR1YWwgaW50IHJlYWRFdmVudCAoRklMRSAqKTsKCiAgICAgCgoKCiAgICB2aXJ0dWFs
IGludCB3cml0ZUV2ZW50IChGSUxFICopOwoKICAgICAKICAgIGludCBzaXplOwp9OwoKIAogCgoK
Y2xhc3MgU2hhZG93RXhjZXB0aW9uRXZlbnQgOiBwdWJsaWMgVUxvZ0V2ZW50CnsKICBwdWJsaWM6
CiAgICAgCiAgICBTaGFkb3dFeGNlcHRpb25FdmVudCAoKTsKICAgICAKICAgIH5TaGFkb3dFeGNl
cHRpb25FdmVudCAoKTsKCiAgICAgCgoKCiAgICB2aXJ0dWFsIGludCByZWFkRXZlbnQgKEZJTEUg
Kik7CgogICAgIAoKCgogICAgdmlydHVhbCBpbnQgd3JpdGVFdmVudCAoRklMRSAqKTsKCgkgCglj
aGFyCW1lc3NhZ2VbMTAyNCBdOwoJIAoJZmxvYXQgc2VudF9ieXRlczsKCSAKCWZsb2F0IHJlY3Zk
X2J5dGVzOwp9OwogICAgCgoKIyA0OSAiLi4vY29uZG9yX2MrK191dGlsL3VzZXJfbG9nLmMrKy5o
IiAyCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIFVzZXJMb2cgewogIHB1YmxpYzoK
ICAgICAKICAgIFVzZXJMb2coKSA6IGNsdXN0ZXIoLTEpLCBwcm9jKC0xKSwgc3VicHJvYygtMSks
CiAgICAgICAgaW5fYmxvY2soKDApICksIHBhdGgoMCksIGZwKDApLCBsb2NrKF9fbnVsbCApIHt9
CiAgICAKICAgICAKCgoKCgoKICAgIFVzZXJMb2coY29uc3QgY2hhciAqb3duZXIsIGNvbnN0IGNo
YXIgKmZpbGUsIGludCBjbHUsIGludCBwcm9jLCBpbnQgc3VicCk7CiAgICAKICAgICAKICAgIH5V
c2VyTG9nKCk7CiAgICAKICAgICAKCgoKCgogICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IGNoYXIg
Km93bmVyLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgYywgaW50IHAsIGludCBzKTsKICAgIAogICAg
IAoKCgoKCiAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgY2hhciAqZmlsZSwgaW50IGMsIGludCBw
LCBpbnQgcyk7CiAgICAKICAgICAKCgoKCgoKICAgIHZvaWQgaW5pdGlhbGl6ZShpbnQgYywgaW50
IHAsIGludCBzKTsKCiAgICAgCgoKCgoKCiAgICBpbnQgd3JpdGVFdmVudCAoVUxvZ0V2ZW50ICpl
dmVudCk7CiAgICAKICAgICAgIHZvaWQgcHV0KCBjb25zdCBjaGFyICpmbXQsIC4uLiApOwogICAg
ICAgdm9pZCBkaXNwbGF5KCk7CiAgICAgICB2b2lkIGJlZ2luX2Jsb2NrKCk7CiAgICAgICB2b2lk
IGVuZF9ibG9jaygpOwogIHByaXZhdGU6CiAgICAgCiAgICB2b2lkICAgICAgICBvdXRwdXRfaGVh
ZGVyKCk7CiAgICAKICAgICAKICAgIGludCAgICAgICAgIGNsdXN0ZXI7CgogICAgIAogICAgaW50
ICAgICAgICAgcHJvYzsKCiAgICAgCiAgICBpbnQgICAgICAgICBzdWJwcm9jOwoKICAgICAKICAg
IGludCAgICAgICAgIGluX2Jsb2NrOwoKICAgICAgIGNoYXIgICAgICogcGF0aDsKICAgICAgIEZJ
TEUgICAgICogZnA7CiAgICAgICBGaWxlTG9jayAqIGxvY2s7Cn07CgoKIAoKCgoKCmNsYXNzIFJl
YWRVc2VyTG9nCnsKICBwdWJsaWM6CgogICAgIAogICAgaW5saW5lIFJlYWRVc2VyTG9nKCkgOiBf
ZmQoLTEpLCBfZnAoMCkge30KCiAgICAgCiAgICBSZWFkVXNlckxvZyAoY29uc3QgY2hhciAqIGZp
bGVuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAKICAg
IGlubGluZSB+UmVhZFVzZXJMb2coKSB7IGlmIChfZnApIGZjbG9zZShfZnApOyB9CgogICAgIAoK
CgoKICAgIGJvb2wgaW5pdGlhbGl6ZSAoY29uc3QgY2hhciAqZmlsZW5hbWUpOwoKICAgICAKCgoK
CiAgICBVTG9nRXZlbnRPdXRjb21lIHJlYWRFdmVudCAoVUxvZ0V2ZW50ICogJiBldmVudCk7Cgog
ICAgIAoKCgoKCgoKICAgIGJvb2wgc3luY2hyb25pemUgKCk7CgogICAgIAogICAgaW5saW5lIGlu
dCBnZXRmZCgpIGNvbnN0IHsgcmV0dXJuIF9mZDsgfQoKICAgIHByaXZhdGU6CgogICAgICAgaW50
ICAgIF9mZDsKICAgICAgIEZJTEUgKiBfZnA7Cn07CgoKCnR5cGVkZWYgdm9pZCBMUDsKCgpleHRl
cm4gIkMiIHsKCiAgICAgCiAgICBMUCAqSW5pdFVzZXJMb2coIGNvbnN0IGNoYXIgKm93biwgY29u
c3QgY2hhciAqZmlsZSwgaW50IGMsIGludCBwLCBpbnQgcyApOwoKICAgICAKICAgIHZvaWQgQ2xv
c2VVc2VyTG9nKCBMUCAqIGxwICk7CgogICAgIAogICAgdm9pZCBQdXRVc2VyTG9nKCBMUCAqbHAs
ICBjb25zdCBjaGFyICpmbXQsIC4uLiApOwoKICAgICAKICAgIHZvaWQgQmVnaW5Vc2VyTG9nQmxv
Y2soIExQICpscCApOwoKICAgICAKICAgIHZvaWQgRW5kVXNlckxvZ0Jsb2NrKCBMUCAqbHAgKTsK
Cn0KCgoKIyA2ICJncmlkbWFuYWdlci5oIiAyCgojIDEgIi4uL2NvbmRvcl9jKytfdXRpbC9jbGFz
c2FkX2hhc2h0YWJsZS5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIyAxICIu
Li9jb25kb3JfYysrX3V0aWwvSGFzaFRhYmxlLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgSW5kZXgsIGNsYXNzIFZhbHVlPgpjbGFzcyBIYXNoQnVj
a2V0IHsKIHB1YmxpYzoKICBJbmRleCAgICAgICBpbmRleDsgICAgICAgICAgICAgICAgICAgICAg
ICAgIAogIFZhbHVlICAgICAgdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgSGFz
aEJ1Y2tldDxJbmRleCwgVmFsdWU+ICpuZXh0OyAgICAgICAgICAgICAKfTsKCiAKCnRlbXBsYXRl
IDxjbGFzcyBJbmRleCwgY2xhc3MgVmFsdWU+CmNsYXNzIEhhc2hUYWJsZSB7CiBwdWJsaWM6CiAg
SGFzaFRhYmxlKGludCB0YWJsZVNpemUsCgkgICAgaW50ICgqaGFzaGZjbikoY29uc3QgSW5kZXgg
JmluZGV4LAoJCQkgICBpbnQgbnVtQnVja2V0cykpOyAgCiAgfkhhc2hUYWJsZSgpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKCiAgaW50IGluc2VydChjb25zdCBJbmRleCAmaW5kZXgs
IGNvbnN0IFZhbHVlICZ2YWx1ZSk7CiAgaW50IGxvb2t1cChjb25zdCBJbmRleCAmaW5kZXgsIFZh
bHVlICZ2YWx1ZSk7CiAgaW50IGxvb2t1cChjb25zdCBJbmRleCAmaW5kZXgsIFZhbHVlKiAmdmFs
dWUpOwogIGludCBnZXROZXh0KEluZGV4ICZpbmRleCwgdm9pZCAqY3VycmVudCwgVmFsdWUgJnZh
bHVlLAoJICAgICAgdm9pZCAqJm5leHQpOwogIGludCByZW1vdmUoY29uc3QgSW5kZXggJmluZGV4
KTsgIAogIGludCBnZXROdW1FbGVtZW50cyggKSB7IHJldHVybiBudW1FbGVtczsgfQogIGludCBj
bGVhcigpOwoKICB2b2lkIHN0YXJ0SXRlcmF0aW9ucyAodm9pZCk7CiAgaW50ICBpdGVyYXRlIChW
YWx1ZSAmdmFsdWUpOwogIGludCAgZ2V0Q3VycmVudEtleSAoSW5kZXggJmluZGV4KTsKICBpbnQg
IGl0ZXJhdGUgKEluZGV4ICZpbmRleCwgVmFsdWUgJnZhbHVlKTsKICAgIAogcHJpdmF0ZToKCgoK
CiAgaW50IHRhYmxlU2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBIYXNo
QnVja2V0PEluZGV4LCBWYWx1ZT4gKipodDsgICAgICAgICAgICAgICAgIAogIGludCAoKmhhc2hm
Y24pKGNvbnN0IEluZGV4ICZpbmRleCwgaW50IG51bUJ1Y2tldHMpOyAgCiAgaW50IGN1cnJlbnRC
dWNrZXQ7CiAgSGFzaEJ1Y2tldDxJbmRleCwgVmFsdWU+ICpjdXJyZW50SXRlbTsKICBpbnQgKmNo
YWluc1VzZWQ7CSAKICBpbnQgY2hhaW5zVXNlZExlbjsJIAogIGludCBudW1FbGVtczsgIAogIGlu
dCBjaGFpbnNVc2VkRnJlZUxpc3Q7CSAKICBpbnQgZW5kT2ZGcmVlTGlzdDsKfTsKCiAKIAoKdGVt
cGxhdGUgPGNsYXNzIEluZGV4LCBjbGFzcyBWYWx1ZT4KSGFzaFRhYmxlPEluZGV4LFZhbHVlPjo6
SGFzaFRhYmxlKGludCB0YWJsZVN6LAoJCQkJICBpbnQgKCpoYXNoRikoY29uc3QgSW5kZXggJmlu
ZGV4LAoJCQkJCSAgICAgICBpbnQgbnVtQnVja2V0cykpIDoKCXRhYmxlU2l6ZSh0YWJsZVN6KSwg
aGFzaGZjbihoYXNoRikKewogIGludCBpLGosazsKCiAgIAogICAKICAgCiAgIAogICAKICBpZiAo
IHRhYmxlU2l6ZSA+IDUgKSB7CgkgIGZvciAoaT10YWJsZVNpemU7aTx0YWJsZVNpemUrMzU7aSsr
KSB7CgkJCWsgPSBpIC8gMjsJIAoJCQlqID0gMTsKCQkJd2hpbGUgKCArK2ogPCBrICkgewoJCQkJ
IAoJCQkJaWYgKCAoaSAlIGopID09IDAgKSB7CgkJCQkJaiA9IDA7CgkJCQkJYnJlYWs7CgkJCQl9
CgkJCX0KCQkJaWYgKCBqICkgewoJCQkJIAoJCQkJdGFibGVTaXplID0gaTsKCQkJCWJyZWFrOwoJ
CQl9CgkgIH0KICB9CgogIGlmICghKGh0ID0gbmV3IEhhc2hCdWNrZXQ8SW5kZXgsIFZhbHVlPiog
W3RhYmxlU2l6ZV0pKSB7CiAgICBjZXJyIDw8ICJJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBoYXNo
IHRhYmxlIiA8PCBlbmRsOwogICAgZXhpdCgxKTsKICB9CiAgaWYgKCEoY2hhaW5zVXNlZCA9IG5l
dyBpbnRbdGFibGVTaXplXSkpIHsKICAgIGNlcnIgPDwgIkluc3VmZmljaWVudCBtZW1vcnkgZm9y
IGhhc2ggdGFibGUgKGNoYWluc1VzZWQgYXJyYXkpIiA8PCBlbmRsOwogICAgZXhpdCgxKTsKICB9
CiAgZm9yKGkgPSAwOyBpIDwgdGFibGVTaXplOyBpKyspIHsKICAgIGh0W2ldID0gX19udWxsIDsK
CWNoYWluc1VzZWRbaV0gPSAtMTsKICB9CiAgY3VycmVudEJ1Y2tldCA9IC0xOwogIGN1cnJlbnRJ
dGVtID0gMDsKICBjaGFpbnNVc2VkTGVuID0gMDsKICBudW1FbGVtcyA9IDA7CiAgZW5kT2ZGcmVl
TGlzdCA9IDAgLSB0YWJsZVNpemUgLSAxMDsKICBjaGFpbnNVc2VkRnJlZUxpc3QgPSBlbmRPZkZy
ZWVMaXN0Owp9CgogCiAKCnRlbXBsYXRlIDxjbGFzcyBJbmRleCwgY2xhc3MgVmFsdWU+CmludCBI
YXNoVGFibGU8SW5kZXgsVmFsdWU+OjppbnNlcnQoY29uc3QgSW5kZXggJmluZGV4LGNvbnN0ICBW
YWx1ZSAmdmFsdWUpCnsKICBpbnQgdGVtcDsKICBpbnQgaWR4ID0gaGFzaGZjbihpbmRleCwgdGFi
bGVTaXplKTsKICAgCiAgaWYgKCAoaWR4IDwgMCkgfHwgKGlkeCA+PSB0YWJsZVNpemUpICkgewog
ICAgcmV0dXJuIC0xOwogIH0KCiAgSGFzaEJ1Y2tldDxJbmRleCwgVmFsdWU+ICpidWNrZXQ7CiAg
aWYgKCEoYnVja2V0ID0gbmV3IEhhc2hCdWNrZXQ8SW5kZXgsIFZhbHVlPikpIHsKICAgIGNlcnIg
PDwgIkluc3VmZmljaWVudCBtZW1vcnkiIDw8IGVuZGw7CiAgICByZXR1cm4gLTE7CiAgfQoKICBi
dWNrZXQtPmluZGV4ID0gaW5kZXg7CiAgYnVja2V0LT52YWx1ZSA9IHZhbHVlOwogIGJ1Y2tldC0+
bmV4dCA9IGh0W2lkeF07CiAgaWYgKCAhaHRbaWR4XSApIHsKCSAKCWlmICggY2hhaW5zVXNlZEZy
ZWVMaXN0ID09IGVuZE9mRnJlZUxpc3QgKSB7CgkJY2hhaW5zVXNlZFtjaGFpbnNVc2VkTGVuKytd
ID0gaWR4OwoJfSBlbHNlIHsKCQl0ZW1wID0gY2hhaW5zVXNlZEZyZWVMaXN0ICsgdGFibGVTaXpl
OwoJCWNoYWluc1VzZWRGcmVlTGlzdCA9IGNoYWluc1VzZWRbdGVtcF07CgkJY2hhaW5zVXNlZFt0
ZW1wXSA9IGlkeDsKCX0KICB9CiAgaHRbaWR4XSA9IGJ1Y2tldDsKCgoKCgogIG51bUVsZW1zKys7
CiAgcmV0dXJuIDA7Cn0KCiAKIAoKdGVtcGxhdGUgPGNsYXNzIEluZGV4LCBjbGFzcyBWYWx1ZT4K
aW50IEhhc2hUYWJsZTxJbmRleCxWYWx1ZT46Omxvb2t1cChjb25zdCBJbmRleCAmaW5kZXgsIFZh
bHVlICZ2YWx1ZSkKewogIGludCBpZHggPSBoYXNoZmNuKGluZGV4LCB0YWJsZVNpemUpOwogICAK
ICBpZiAoIChpZHggPCAwKSB8fCAoaWR4ID49IHRhYmxlU2l6ZSkgKSB7CiAgICByZXR1cm4gLTE7
CiAgfQoKICBIYXNoQnVja2V0PEluZGV4LCBWYWx1ZT4gKmJ1Y2tldCA9IGh0W2lkeF07CiAgd2hp
bGUoYnVja2V0KSB7CgoKCgogICAgaWYgKGJ1Y2tldC0+aW5kZXggPT0gaW5kZXgpIHsKICAgICAg
dmFsdWUgPSBidWNrZXQtPnZhbHVlOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGJ1Y2tldCA9
IGJ1Y2tldC0+bmV4dDsKICB9CgoKCgoKICByZXR1cm4gLTE7Cn0KCiAKIAoKdGVtcGxhdGUgPGNs
YXNzIEluZGV4LCBjbGFzcyBWYWx1ZT4KaW50IEhhc2hUYWJsZTxJbmRleCxWYWx1ZT46Omxvb2t1
cChjb25zdCBJbmRleCAmaW5kZXgsIFZhbHVlKiAmdmFsdWUgKQp7CiAgaW50IGlkeCA9IGhhc2hm
Y24oaW5kZXgsIHRhYmxlU2l6ZSk7CiAgIAogIGlmICggKGlkeCA8IDApIHx8IChpZHggPj0gdGFi
bGVTaXplKSApIHsKICAgIHJldHVybiAtMTsKICB9CgogIEhhc2hCdWNrZXQ8SW5kZXgsIFZhbHVl
PiAqYnVja2V0ID0gaHRbaWR4XTsKICB3aGlsZShidWNrZXQpIHsKCgoKCiAgICBpZiAoYnVja2V0
LT5pbmRleCA9PSBpbmRleCkgewogICAgICB2YWx1ZSA9IChWYWx1ZSAqKSAmKGJ1Y2tldC0+dmFs
dWUpOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGJ1Y2tldCA9IGJ1Y2tldC0+bmV4dDsKICB9
CgoKCgoKICByZXR1cm4gLTE7Cn0KCiAKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIEluZGV4LCBj
bGFzcyBWYWx1ZT4KaW50IEhhc2hUYWJsZTxJbmRleCxWYWx1ZT46OmdldE5leHQoSW5kZXggJmlu
ZGV4LCB2b2lkICpjdXJyZW50LAoJCQkJICAgIFZhbHVlICZ2YWx1ZSwgdm9pZCAqJm5leHQpCnsK
ICBIYXNoQnVja2V0PEluZGV4LCBWYWx1ZT4gKmJ1Y2tldDsKCiAgaWYgKCFjdXJyZW50KSB7CiAg
ICBpbnQgaWR4ID0gaGFzaGZjbihpbmRleCwgdGFibGVTaXplKTsKICAJIAogIAlpZiAoIChpZHgg
PCAwKSB8fCAoaWR4ID49IHRhYmxlU2l6ZSkgKSB7CiAgIAkJcmV0dXJuIC0xOwogIAl9CiAgICBi
dWNrZXQgPSBodFtpZHhdOwogIH0gZWxzZSB7CiAgICBidWNrZXQgPSAoSGFzaEJ1Y2tldDxJbmRl
eCwgVmFsdWU+ICopY3VycmVudDsKICAgIGJ1Y2tldCA9IGJ1Y2tldC0+bmV4dDsKICB9CgogIHdo
aWxlKGJ1Y2tldCkgewogICAgaWYgKGJ1Y2tldC0+aW5kZXggPT0gaW5kZXgpIHsKICAgICAgdmFs
dWUgPSBidWNrZXQtPnZhbHVlOwogICAgICBuZXh0ID0gYnVja2V0OwogICAgICByZXR1cm4gMDsK
ICAgIH0KICAgIGJ1Y2tldCA9IGJ1Y2tldC0+bmV4dDsKICB9CgoKCgoKICByZXR1cm4gLTE7Cn0K
CiAKIAoKdGVtcGxhdGUgPGNsYXNzIEluZGV4LCBjbGFzcyBWYWx1ZT4KaW50IEhhc2hUYWJsZTxJ
bmRleCxWYWx1ZT46OnJlbW92ZShjb25zdCBJbmRleCAmaW5kZXgpCnsKICAJaW50IGlkeCA9IGhh
c2hmY24oaW5kZXgsIHRhYmxlU2l6ZSk7CglpbnQgaTsKCiAgCSAKICAJaWYgKCAoaWR4IDwgMCkg
fHwgKGlkeCA+PSB0YWJsZVNpemUpICkgewogICAJCXJldHVybiAtMTsKICAJfQoKICAJSGFzaEJ1
Y2tldDxJbmRleCwgVmFsdWU+ICpidWNrZXQgPSBodFtpZHhdOwogIAlIYXNoQnVja2V0PEluZGV4
LCBWYWx1ZT4gKnByZXZCdWMgPSBodFtpZHhdOwoKICAJd2hpbGUoYnVja2V0KSAKCXsKICAgIAlp
ZiAoYnVja2V0LT5pbmRleCA9PSBpbmRleCkgCgkJewogICAgICAJCWlmIChidWNrZXQgPT0gaHRb
aWR4XSkgCgkJCXsKCQkJCWh0W2lkeF0gPSBidWNrZXQtPm5leHQ7CgoJCQkJIAoJCQkJIAoJCQkJ
aWYgKGJ1Y2tldCA9PSBjdXJyZW50SXRlbSkKCQkJCXsKCQkJCQljdXJyZW50SXRlbSA9IDA7CgkJ
CQkJY3VycmVudEJ1Y2tldCAtLTsKCQkJCX0KCQkJfQogICAgICAJCWVsc2UKCQkJewoJCQkJcHJl
dkJ1Yy0+bmV4dCA9IGJ1Y2tldC0+bmV4dDsKCgkJCQkgCgkJCQlpZiAoYnVja2V0ID09IGN1cnJl
bnRJdGVtKQoJCQkJewoJCQkJCWN1cnJlbnRJdGVtID0gcHJldkJ1YzsKCQkJCX0KCQkJfQoKICAg
ICAgCQlkZWxldGUgYnVja2V0OwoKCQkJaWYgKCAhaHRbaWR4XSApIHsKCQkJCSAKCQkJCSAKCQkJ
CWZvciAoaT0wO2k8Y2hhaW5zVXNlZExlbjtpKyspIHsKCQkJCQlpZiAoIGNoYWluc1VzZWRbaV0g
PT0gaWR4ICkgewoJCQkJCQkgCgkJCQkJCWNoYWluc1VzZWRbaV0gPSBjaGFpbnNVc2VkRnJlZUxp
c3Q7CgkJCQkJCWNoYWluc1VzZWRGcmVlTGlzdCA9IGkgLSB0YWJsZVNpemU7CgkJCQkJCWJyZWFr
OwoJCQkJCX0KCQkJCX0KCQkJfQoKCgoKCgkJCW51bUVsZW1zLS07CiAgICAgIAkJcmV0dXJuIDA7
CiAgICAJfQoKICAgIAlwcmV2QnVjID0gYnVja2V0OwogICAgCWJ1Y2tldCA9IGJ1Y2tldC0+bmV4
dDsKICAJfQoKICAJcmV0dXJuIC0xOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgSW5kZXgsIGNsYXNz
IFZhbHVlPgppbnQgSGFzaFRhYmxlPEluZGV4LFZhbHVlPjo6Y2xlYXIoKQp7CiAgZm9yKGludCBp
ID0gMDsgaSA8IHRhYmxlU2l6ZTsgaSsrKSB7CiAgICBIYXNoQnVja2V0PEluZGV4LCBWYWx1ZT4g
KnRtcEJ1ZiA9IGh0W2ldOwogICAgd2hpbGUoaHRbaV0pIHsKICAgICAgdG1wQnVmID0gaHRbaV07
CiAgICAgIGh0W2ldID0gaHRbaV0tPm5leHQ7CiAgICAgIGRlbGV0ZSB0bXBCdWY7CiAgICB9CiAg
fQoKICBjaGFpbnNVc2VkTGVuID0gMDsKICBjaGFpbnNVc2VkRnJlZUxpc3QgPSBlbmRPZkZyZWVM
aXN0OwoKICByZXR1cm4gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIEluZGV4LCBjbGFzcyBWYWx1ZT4K
dm9pZCBIYXNoVGFibGU8SW5kZXgsVmFsdWU+OjoKc3RhcnRJdGVyYXRpb25zICh2b2lkKQp7Cglp
bnQgdGVtcCwgdGVtcDE7CgogICAgY3VycmVudEJ1Y2tldCA9IC0xOwoJY3VycmVudEl0ZW0gPSAw
OwoJCQkJCQkKCSAKCXdoaWxlICggY2hhaW5zVXNlZEZyZWVMaXN0ICE9IGVuZE9mRnJlZUxpc3Qg
KSB7CgkJdGVtcCA9IGNoYWluc1VzZWRGcmVlTGlzdCArIHRhYmxlU2l6ZTsKCQljaGFpbnNVc2Vk
RnJlZUxpc3QgPSBjaGFpbnNVc2VkW3RlbXBdOwoJCXRlbXAxID0gLTE7CgkJd2hpbGUgKCB0ZW1w
IDwgY2hhaW5zVXNlZExlbiAmJiB0ZW1wMSA8IDAgKSB7CgkJCXRlbXAxID0gY2hhaW5zVXNlZFst
LWNoYWluc1VzZWRMZW5dOwoJCX0KCQljaGFpbnNVc2VkW3RlbXBdID0gdGVtcDE7Cgl9Cgp9CgoK
dGVtcGxhdGUgPGNsYXNzIEluZGV4LCBjbGFzcyBWYWx1ZT4KaW50IEhhc2hUYWJsZTxJbmRleCxW
YWx1ZT46OgppdGVyYXRlIChWYWx1ZSAmdikKewogICAgIAogICAgaWYgKGN1cnJlbnRJdGVtKQog
ICAgewogICAgICAgIGN1cnJlbnRJdGVtID0gY3VycmVudEl0ZW0tPm5leHQ7CiAgICAKICAgICAg
ICAgCiAgICAgICAgaWYgKGN1cnJlbnRJdGVtKQogICAgICAgIHsKICAgICAgICAgICAgdiA9IGN1
cnJlbnRJdGVtLT52YWx1ZTsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICB9CiAgICB9CgoJ
IAoJZG8gewoJCWN1cnJlbnRCdWNrZXQgKys7Cgl9IHdoaWxlICggKGN1cnJlbnRCdWNrZXQgPCBj
aGFpbnNVc2VkTGVuKSAmJiAKCQkJICAoY2hhaW5zVXNlZFtjdXJyZW50QnVja2V0XSA8IDApICk7
CgoJIAoJIAoJaWYgKGN1cnJlbnRCdWNrZXQgPj0gY2hhaW5zVXNlZExlbikKCXsKICAgIAkgCiAg
ICAJY3VycmVudEJ1Y2tldCA9IC0xOwogICAgCWN1cnJlbnRJdGVtID0gMDsKCiAgICAJcmV0dXJu
IDA7Cgl9CgllbHNlCgl7CgkJY3VycmVudEl0ZW0gPSBodFsgY2hhaW5zVXNlZFtjdXJyZW50QnVj
a2V0XSBdOwoJCXYgPSBjdXJyZW50SXRlbS0+dmFsdWU7CgkJcmV0dXJuIDE7Cgl9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBJbmRleCwgY2xhc3MgVmFsdWU+CmludCBIYXNoVGFibGU8SW5kZXgsVmFsdWU+
OjoKZ2V0Q3VycmVudEtleSAoSW5kZXggJmluZGV4KQp7CiAgICBpZiAoIWN1cnJlbnRJdGVtKSBy
ZXR1cm4gLTE7CiAgICBpbmRleCA9IGN1cnJlbnRJdGVtLT5pbmRleDsKICAgIHJldHVybiAwOwp9
CgoKdGVtcGxhdGUgPGNsYXNzIEluZGV4LCBjbGFzcyBWYWx1ZT4KaW50IEhhc2hUYWJsZTxJbmRl
eCxWYWx1ZT46OgppdGVyYXRlIChJbmRleCAmaW5kZXgsIFZhbHVlICZ2KQp7CiAgICAgCiAgICBp
ZiAoY3VycmVudEl0ZW0pCiAgICB7CiAgICAgICAgY3VycmVudEl0ZW0gPSBjdXJyZW50SXRlbS0+
bmV4dDsKICAgIAogICAgICAgICAKICAgICAgICBpZiAoY3VycmVudEl0ZW0pCiAgICAgICAgewog
ICAgICAgICAgICBpbmRleCA9IGN1cnJlbnRJdGVtLT5pbmRleDsKICAgICAgICAgICAgdiA9IGN1
cnJlbnRJdGVtLT52YWx1ZTsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICB9CiAgICB9CgoJ
IAoJZG8gewoJCWN1cnJlbnRCdWNrZXQgKys7Cgl9IHdoaWxlICggKGN1cnJlbnRCdWNrZXQgPCBj
aGFpbnNVc2VkTGVuKSAmJiAKCQkJICAoY2hhaW5zVXNlZFtjdXJyZW50QnVja2V0XSA8IDApICk7
CgoKCSAKCSAKCWlmIChjdXJyZW50QnVja2V0ID49IGNoYWluc1VzZWRMZW4pCgl7CiAgICAJIAog
ICAgCWN1cnJlbnRCdWNrZXQgPSAtMTsKICAgIAljdXJyZW50SXRlbSA9IDA7CgogICAgCXJldHVy
biAwOwoJfQoJZWxzZQoJewoJCWN1cnJlbnRJdGVtID0gaHRbIGNoYWluc1VzZWRbY3VycmVudEJ1
Y2tldF0gXTsKCQlpbmRleCA9IGN1cnJlbnRJdGVtLT5pbmRleDsKCQl2ID0gY3VycmVudEl0ZW0t
PnZhbHVlOwoJCXJldHVybiAxOwoJfQp9CgogCiAKCnRlbXBsYXRlIDxjbGFzcyBJbmRleCwgY2xh
c3MgVmFsdWU+Ckhhc2hUYWJsZTxJbmRleCxWYWx1ZT46On5IYXNoVGFibGUoKQp7CiAgY2xlYXIo
KTsKICBkZWxldGUgW10gaHQ7CiAgZGVsZXRlIFtdIGNoYWluc1VzZWQ7Cn0KCiMgNTIzICIuLi9j
b25kb3JfYysrX3V0aWwvSGFzaFRhYmxlLmgiCgoKCiMgMzEgIi4uL2NvbmRvcl9jKytfdXRpbC9j
bGFzc2FkX2hhc2h0YWJsZS5oIiAyCgoKIyAxICIvcy9nY2MtMi45NS4yL3N1bng4Nl81Ni9saWIv
Z2NjLWxpYi9pMzg2LXBjLXNvbGFyaXMyLjYvMi45NS4yLy4uLy4uLy4uLy4uL2kzODYtcGMtc29s
YXJpczIuNi9pbmNsdWRlL2Fzc2VydC5oIiAxIDMgNAogCgoKCgoKCgoKIyAxOSAiL3MvZ2NjLTIu
OTUuMi9zdW54ODZfNTYvbGliL2djYy1saWIvaTM4Ni1wYy1zb2xhcmlzMi42LzIuOTUuMi8uLi8u
Li8uLi8uLi9pMzg2LXBjLXNvbGFyaXMyLjYvaW5jbHVkZS9hc3NlcnQuaCIgMyA0CgoKCgogCgpl
eHRlcm4gIkMiIHsKZXh0ZXJuIHZvaWQgX19lcHJpbnRmIChjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKiwgdW5zaWduZWQsIGNvbnN0IGNoYXIgKikKICAgIF9fYXR0cmlidXRlX18gKChub3JldHVy
bikpOwp9CgoKCgoKCgoKCgoKCiMgNTIgIi9zL2djYy0yLjk1LjIvc3VueDg2XzU2L2xpYi9nY2Mt
bGliL2kzODYtcGMtc29sYXJpczIuNi8yLjk1LjIvLi4vLi4vLi4vLi4vaTM4Ni1wYy1zb2xhcmlz
Mi42L2luY2x1ZGUvYXNzZXJ0LmgiIDMgNAoKCgojIDMzICIuLi9jb25kb3JfYysrX3V0aWwvY2xh
c3NhZF9oYXNodGFibGUuaCIgMgoKCmNsYXNzIEhhc2hLZXkKewpwdWJsaWM6CglIYXNoS2V5KCkg
eyBrZXkgPSBfX251bGwgOyB9CglIYXNoS2V5KGNvbnN0IGNoYXIgKmspIHsga2V5ID0gc3RyZHVw
KGspOyB9CglIYXNoS2V5KGNvbnN0IEhhc2hLZXkgJmhrKSB7IGtleSA9IHN0cmR1cChoay5rZXkp
OyB9Cgl+SGFzaEtleSgpIHsgaWYgKGtleSkgZnJlZShrZXkpOyB9Cgl2b2lkIHNwcmludChjaGFy
ICopOwoJSGFzaEtleSYgb3BlcmF0b3I9IChjb25zdCBIYXNoS2V5JiBmcm9tKTsKCWNvbnN0IGNo
YXIqIHZhbHVlKCkgeyBpZiAoa2V5KSByZXR1cm4ga2V5OyBlbHNlIHJldHVybiAiXDAiOyB9OwoJ
ZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwgKG9zdHJlYW0gJm91dCwgY29uc3QgSGFzaEtleSAm
KTsgCiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBIYXNoS2V5ICYsIGNvbnN0IEhh
c2hLZXkgJik7CglmcmllbmQgaW50IGhhc2hGdW5jdGlvbihjb25zdCBIYXNoS2V5ICZrZXksIGlu
dCBudW1CdWNrZXRzKTsKcHJpdmF0ZToKCWNoYXIgKmtleTsKfTsKCmludCBoYXNoRnVuY3Rpb24o
Y29uc3QgSGFzaEtleSAmLCBpbnQpOwoKCiMgNyAiZ3JpZG1hbmFnZXIuaCIgMgoKCiMgMSAiZ2xv
YnVzam9iLmgiIDEKCgoKCgoKCgoKCgoKCmNsYXNzIEdsb2J1c0pvYgp7CiBwdWJsaWM6CgoJR2xv
YnVzSm9iKCBHbG9idXNKb2ImIGNvcHkgKTsKCUdsb2J1c0pvYiggQ2xhc3NBZCAqY2xhc3NhZCAp
OwoKCX5HbG9idXNKb2IoKTsKCglib29sIHN1Ym1pdCggY29uc3QgY2hhciAqY2FsbGJhY2tfY29u
dGFjdCApOwoJYm9vbCBjYW5jZWwoKTsKCWJvb2wgcHJvYmUoKTsKCgljb25zdCBjaGFyICplcnJv
clN0cmluZygpOwoKCWludCBjbHVzdGVySUQ7CglpbnQgcHJvY0lEOwoJY2hhciAqam9iQ29udGFj
dDsKCWludCBqb2JTdGF0ZTsKCWNoYXIgKlJTTDsKCWNoYXIgKnJtQ29udGFjdDsKCWludCBlcnJv
ckNvZGU7CgljaGFyICp1c2VyTG9nRmlsZTsKfTsKCgojIDkgImdyaWRtYW5hZ2VyLmgiIDIKCgpj
bGFzcyBHcmlkTWFuYWdlciA6IHB1YmxpYyBTZXJ2aWNlCnsKIHB1YmxpYzoKCglHcmlkTWFuYWdl
cigpOwoJfkdyaWRNYW5hZ2VyKCk7CgoJIAoJdm9pZCBJbml0KCk7Cgl2b2lkIFJlZ2lzdGVyKCk7
CgoJIAoJdm9pZCByZWNvbmZpZygpOwoJCgkgCglpbnQgQUREX0pPQlNfc2lnbmFsSGFuZGxlcigg
aW50ICk7CglpbnQgUkVNT1ZFX0pPQlNfc2lnbmFsSGFuZGxlciggaW50ICk7CglpbnQgZ2xvYnVz
UG9sbCgpOwoJaW50IGpvYlByb2JlKCk7CgoJc3RhdGljIHZvaWQgZ3JhbUNhbGxiYWNrSGFuZGxl
ciggdm9pZCAqLCBjaGFyICosIGludCwgaW50ICk7CgoJVXNlckxvZyAqSW5pdGlhbGl6ZVVzZXJM
b2coIEdsb2J1c0pvYiAqICk7Cglib29sIFdyaXRlRXhlY3V0ZVRvVXNlckxvZyggR2xvYnVzSm9i
ICogKTsKCWJvb2wgV3JpdGVUZXJtaW5hdGVUb1VzZXJMb2coIEdsb2J1c0pvYiAqICk7CgoJIAoJ
Y2hhciAqZ3JhbUNhbGxiYWNrQ29udGFjdDsKCiBwcml2YXRlOgoKCWNoYXIgKk93bmVyOwoJY2hh
ciAqU2NoZWRkQWRkcjsKCglIYXNoVGFibGUgPEhhc2hLZXksIEdsb2J1c0pvYiAqPiAqSm9iczsK
Cn07CgoKIyA3ICJncmlkbWFuYWdlci5DIiAyCgoKCgoKCgoKR3JpZE1hbmFnZXI6OkdyaWRNYW5h
Z2VyKCkKewoJT3duZXIgPSBfX251bGwgOwoJU2NoZWRkQWRkciA9IF9fbnVsbCA7CglncmFtQ2Fs
bGJhY2tDb250YWN0ID0gX19udWxsIDsKCglKb2JzID0gbmV3IEhhc2hUYWJsZSA8SGFzaEtleSwg
R2xvYnVzSm9iICo+KCA1MDAsIGhhc2hGdW5jdGlvbiApOwp9CgpHcmlkTWFuYWdlcjo6fkdyaWRN
YW5hZ2VyKCkKewoJaWYgKCBPd25lciApCgkJZnJlZSggT3duZXIgKTsKCWlmICggU2NoZWRkQWRk
ciApCgkJZnJlZSggU2NoZWRkQWRkciApOwoJaWYgKCBncmFtQ2FsbGJhY2tDb250YWN0ICkKCQlm
cmVlKCBncmFtQ2FsbGJhY2tDb250YWN0ICk7CgoJaWYgKCBKb2JzICE9IF9fbnVsbCAgKSB7CgkJ
R2xvYnVzSm9iICp0bXA7CgkJSm9icy0+c3RhcnRJdGVyYXRpb25zKCk7CgkJd2hpbGUoIEpvYnMt
Pml0ZXJhdGUoIHRtcCApICkKCQkJZGVsZXRlIHRtcDsKCQlkZWxldGUgSm9iczsKCX0KfQoKCnZv
aWQKR3JpZE1hbmFnZXI6OkluaXQoKQp7CglpbnQgcmM7CglwaWRfdCBzY2hlZGRfcGlkOwoKCXNj
aGVkZF9waWQgPSBkYWVtb25Db3JlLT5nZXRwcGlkKCk7CglzY2hlZGRBZGRyID0gSW5mb0NvbW1h
bmRTaW5mdWxTdHJpbmcoIHNjaGVkZF9waWQgKTsKCWlmICggc2NoZWRkQWRkciA9PSBfX251bGwg
ICkgewoJCUVYQ0VQVCggIkZhaWxlZCB0byBkZXRlcm1pbmUgc2NoZWRkJ3MgYWRkcmVzcyIgKTsK
CX0gZWxzZSB7CgkJc2NoZWRkQWRkciA9IHN0cmR1cCggc2NoZWRkQWRkciApOwoJfQoKCSAKCSAK
CgkgCgkgCgkgCglPd25lciA9IG15X3VzZXJuYW1lKCk7CglpZiAoIE93bmVyID09IF9fbnVsbCAg
KSB7CgkJRVhDRVBUKCAiQ2FuJ3QgZGV0ZXJtaW5lIHVzZXJuYW1lIiApOwoJfQoKCXJjID0gZ2xv
YnVzX21vZHVsZV9hY3RpdmF0ZSggR0xPQlVTX0dSQU1fQ0xJRU5UX01PRFVMRSApOwoJaWYgKCBy
YyAhPSBHTE9CVVNfU1VDQ0VTUyApIHsKCQlFWENFUFQoICJGYWlsZWQgdG8gYWN0aXZhdGUgZ2xv
YnVzIiApOwoJfQoKCXJjID0gZ2xvYnVzX2dyYW1fY2xpZW50X2NhbGxiYWNrX2FsbG93KCBHcmlk
TWFuYWdlcjo6Z3JhbUNhbGxiYWNrSGFuZGxlciwKCQkJCQkJCQkJCQl0aGlzLCAmZ3JhbUNhbGxi
YWNrQ29udGFjdCApOwoJaWYgKCByYyAhPSBHTE9CVVNfU1VDQ0VTUyApIHsKCQlFWENFUFQoICJG
YWlsZWQgdG8gYWN0aXZhdGUgZ2xvYnVzIGNhbGxiYWNrcyIgKTsKCX0KfQoKdm9pZApHcmlkTWFu
YWdlcjo6UmVnaXN0ZXIoKQp7CglkYWVtb25Db3JlLT5SZWdpc3Rlcl9TaWduYWwoIEFERF9KT0JT
LCAiQWRkSm9icyIsCgkJKFNpZ25hbEhhbmRsZXJjcHApJkdyaWRNYW5hZ2VyOjpBRERfSk9CU19z
aWduYWxIYW5kbGVyLAoJCSJBRERfSk9CU19zaWduYWxIYW5kbGVyIiwgKFNlcnZpY2UqKXRoaXMs
IFdSSVRFICk7CgoJZGFlbW9uQ29yZS0+UmVnaXN0ZXJfU2lnbmFsKCBSRU1PVkVfSk9CUywgIlJl
bW92ZUpvYnMiLAoJCShTaWduYWxIYW5kbGVyY3BwKSZHcmlkTWFuYWdlcjo6UkVNT1ZFX0pPQlNf
c2lnbmFsSGFuZGxlciwKCQkiUkVNT1ZFX0pPQlNfc2lnbmFsSGFuZGxlciIsIChTZXJ2aWNlKil0
aGlzLCBXUklURSApOwoKCWRhZW1vbkNvcmUtPlJlZ2lzdGVyX1RpbWVyKCAwLCA1ICwKCQkoVGlt
ZXJIYW5kbGVyY3BwKSZHcmlkTWFuYWdlcjo6Z2xvYnVzUG9sbCwKCQkiZ2xvYnVzUG9sbCIsIChT
ZXJ2aWNlKil0aGlzICk7CgoJZGFlbW9uQ29yZS0+UmVnaXN0ZXJfVGltZXIoIDAsIDMwMCAsCgkJ
KFRpbWVySGFuZGxlcmNwcCkmR3JpZE1hbmFnZXI6OmpvYlByb2JlLAoJCSJqb2JQcm9iZSIsIChT
ZXJ2aWNlKil0aGlzICk7Cn0KCnZvaWQKR3JpZE1hbmFnZXI6OnJlY29uZmlnKCkKewp9CgoKaW50
CkdyaWRNYW5hZ2VyOjpBRERfSk9CU19zaWduYWxIYW5kbGVyKCBpbnQgc2lnbmFsICkKewoJQ2xh
c3NBZExpc3QgbmV3X2FkczsKCUNsYXNzQWQgKm5leHRfYWQ7CgljaGFyIGV4cHJfYnVmWzEwMjRd
OwoKCXNucHJpbnRmKCBleHByX2J1ZiwgMTAyNCwgIiVzID09IFwiJXNcIiAmJiAlcyA9PSAlZCAm
JiAlcyA9Pz0gVU5ERUZJTkVEIiwKCQkJICBBVFRSX09XTkVSLCBPd25lciwgQVRUUl9KT0JfVU5J
VkVSU0UsIDkgLAoJCQkgIEFUVFJfR0xPQlVTX1NUQVRVUyApOwoKCSAKCVFtZ3JfY29ubmVjdGlv
biAqc2NoZWRkID0gQ29ubmVjdFEoIFNjaGVkZEFkZHIsIDMwMCAsIHRydWUgKTsKCWlmICggIXNj
aGVkZCApIHsKCQlkcHJpbnRmKCBEX0FMV0FZUywgIkZhaWxlZCB0byBjb25uZWN0IHRvIHNjaGVk
ZCFcbiIpOwoJCXJldHVybiAoMCkgOwoJfQoKCW5leHRfYWQgPSBHZXROZXh0Sm9iQnlDb25zdHJh
aW50KCBleHByX2J1ZiwgMSApOwoJd2hpbGUgKCBuZXh0X2FkICE9IF9fbnVsbCAgKSB7CgkJbmV3
X2Fkcy5JbnNlcnQoIG5leHRfYWQgKTsKCQluZXh0X2FkID0gR2V0TmV4dEpvYkJ5Q29uc3RyYWlu
dCggZXhwcl9idWYsIDAgKTsKCX0KCglEaXNjb25uZWN0USggc2NoZWRkICk7CgoJIAoJbmV3X2Fk
cy5PcGVuKCk7CgoJd2hpbGUgKCAoIG5leHRfYWQgPSBuZXdfYWRzLk5leHQoKSApICE9IF9fbnVs
bCAgKSB7CgoJCUdsb2J1c0pvYiAqbmV3X2pvYiA9IG5ldyBHbG9idXNKb2IoIG5leHRfYWQgKTsK
CgkJaWYgKCBuZXdfam9iLT5zdWJtaXQoIGdyYW1DYWxsYmFja0NvbnRhY3QgKSA9PSB0cnVlICkg
ewoKCQkJSm9icy0+aW5zZXJ0KCBIYXNoa2V5KCBuZXdfam9iLT5qb2JDb250YWN0ICksIG5ld19q
b2IgKTsKCgkJCXNucHJpbnRmKCBleHByX2J1ZiwgMTAyNCwgIiVzID0gJWQiLCBBVFRSX0dMT0JV
U19TVEFUVVMsCgkJCQkJICBuZXdfam9iLT5qb2JTdGF0ZSApOwoJCQluZXh0X2FkLT5JbnNlcnQo
IGV4cHJfYnVmICk7CgoJCQlzbnByaW50ZiggZXhwcl9idWYsIDEwMjQsICIlcyA9IFwiJXNcIiIs
CgkJCQkJICBBVFRSX0dMT0JVU19DT05UQUNUX1NUUklORywgbmV3X2pvYi0+am9iQ29udGFjdCAp
OwoJCQluZXh0X2FkLT5JbnNlcnQoIGV4cHJfYnVmICk7CgoJCX0gZWxzZSB7CgoJCQlzbnByaW50
ZiggZXhwcl9idWYsIDEwMjQsICIlcyA9ICVkIiwgQVRUUl9HTE9CVVNfU1RBVFVTLAoJCQkJCSAg
MyAgKTsKCQkJbmV4dF9hZC0+SW5zZXJ0KCBleHByX2J1ZiApOwoKCQl9CgoJfQoKCSAKCW5ld19h
ZHMuT3BlbigpOwoKCXNjaGVkZCA9IENvbm5lY3RRKCBTY2hlZGRBZGRyLCAzMDAgLCBmYWxzZSAp
OwoJaWYgKCAhc2NoZWRkICkgewoJCWRwcmludGYoIERfQUxXQVlTLCAiRmFpbGVkIHRvIGNvbm5l
Y3QgdG8gc2NoZWRkIVxuIik7CgkJcmV0dXJuICgwKSA7Cgl9CgoJd2hpbGUgKCAoIG5leHRfYWQg
PSBuZXdfYWRzLk5leHQoKSApICE9IF9fbnVsbCAgKSB7CgkJaW50IGNsdXN0ZXJfaWQ7CgkJaW50
IHByb2NfaWQ7CgoJCWlmICggIW5leHRfYWQtPkxvb2t1cEludGVnZXIoIEFUVFJfQ0xVU1RFUl9J
RCwgY2x1c3Rlcl9pZCApIHx8CgkJCSAhbmV4dF9hZC0+TG9va3VwSW50ZWdlciggQVRUUl9QUk9D
X0lELCBwcm9jX2lkICkgKSB7CgkJCWRwcmludGYoIERfQUxXQVlTLCAiQ2xhc3NhZCBkb2Vzbid0
IGhhdmUgY2x1c3RlciBvciBwcm9jIElEIVxuIiApOwoJCQluZXdfYWRzLkRlbGV0ZSggbmV4dF9h
ZCApOwoJCQlGcmVlSm9iQWQoIG5leHRfYWQgKTsKCQkJY29udGludWU7CgkJfQoKCQkgCgkJIAoJ
CWlmICggbmV4dF9hZC0+TG9va3VwU3RyaW5nKCBBVFRSX0dMT0JVU19TVEFUVVMsIGV4cHJfYnVm
ICkgKQoJCQlzY2hlZGQtPlNldEF0dHJpYnV0ZVN0cmluZyggY2x1c3Rlcl9pZCwgcHJvY19pZCwK
CQkJCQkJCQkJCUFUVFJfR0xPQlVTX1NUQVRVUywKCQkJCQkJCQkJCWV4cHJfYnVmICk7CgoJCWlm
ICggbmV4dF9hZC0+TG9va3VwU3RyaW5nKCBBVFRSX0dMT0JVU19DT05UQUNUX1NUUklORywgZXhw
cl9idWYgKSApCgkJCXNjaGVkZC0+U2V0QXR0cmlidXRlU3RyaW5nKCBjbHVzdGVyX2lkLCBwcm9j
X2lkLAoJCQkJCQkJCQkJQVRUUl9HTE9CVVNfQ09OVEFDVF9TVFJJTkcsCgkJCQkJCQkJCQlleHBy
X2J1ZiApOwoKCQluZXdfYWRzLkRlbGV0ZSggbmV4dF9hZCApOwoJCUZyZWVKb2JBZCggbmV4dF9h
ZCApOwoJfQoKCURpc2Nvbm5lY3RRKCBzY2hlZGQgKTsKCglyZXR1cm4gKDEpIDsKfQoKaW50Ckdy
aWRNYW5hZ2VyOjpSRU1PVkVfSk9CU19zaWduYWxIYW5kbGVyKCBpbnQgc2lnbmFsICkKewoJcmV0
dXJuICgxKSA7Cn0KCmludApHcmlkTWFuYWdlcjo6Z2xvYnVzUG9sbCgpCnsKCWdsb2J1c19wb2xs
KCk7CglyZXR1cm4gKDEpIDsKfQoKaW50CkdyaWRNYW5hZ2VyOjpqb2JQcm9iZSgpCnsKCUdsb2J1
c0pvYiAqbmV4dF9qb2I7CgoJSm9icy0+c3RhcnRJdGVyYXRpb25zKCk7CglKb2JzLT5pdGVyYXRl
KCBuZXh0X2pvYiApOwoKCXdoaWxlICggbmV4dF9qb2IgIT0gX19udWxsICApIHsKCgkJaWYgKCBu
ZXh0X2pvYi0+am9iQ29udGFjdCAhPSBfX251bGwgICkgewoKCQkJaWYgKCBuZXh0X2pvYi0+cHJv
YmUoKSA9PSBmYWxzZSApIHsKCQkJCWRwcmludGYoIERfQUxXQVlTLCAiR2xvYnVzIGpvYm1hbmFn
ZXIgdW5yZWFjaGFibGUgZm9yIGpvYiAlZC4lZFxuIiwKCQkJCQkJIG5leHRfam9iLT5jbHVzdGVy
SUQsIG5leHRfam9iLT5wcm9jSUQgKTsKCQkJCSAKCQkJCSAKCQkJCSAKCQkJfQoKCQl9CgoJfQoK
CXJldHVybiAoMSkgOwp9CgpzdGF0aWMKdm9pZApHcmlkTWFuYWdlcjo6Z3JhbUNhbGxiYWNrSGFu
ZGxlciggdm9pZCAqdXNlcl9hcmcsIGNoYXIgKmpvYl9jb250YWN0LAoJCQkJCQkJCSAgaW50IHN0
YXRlLCBpbnQgZXJyb3Jjb2RlICkKewoJaW50IHJjOwoJaW50IG5ld19zdGF0ZTsKCWludCBjbHVz
dGVyX2lkOwoJaW50IHByb2NfaWQ7CgljaGFyIGJ1ZlsxMDI0XTsKCVFtZ3JfY29ubmVjdGlvbiAq
c2NoZWRkOwoJR2xvYnVzSm9iICp0aGlzX2pvYjsKCUdyaWRNYW5nYWVyICp0aGlzXyA9IChHcmlk
TWFuZ2VyICopdXNlcl9hcmc7CgoJIAoJcmMgPSB0aGlzXy0+Sm9icy0+bG9va3VwKCBIYXNoS2V5
KCBqb2JfY29udGFjdCApLCB0aGlzX2pvYiApOwoJaWYgKCByYyAhPSAwIHx8IHRoaXNfam9iID09
IF9fbnVsbCAgKSB7CgkJZHByaW50ZiggRF9BTFdBWVMsICJDYW4ndCBmaW5kIHJlY29yZCBmb3Ig
Z2xvYnVzIGpvYiB3aXRoIGNvbnRhY3QgJXMgb24gZ2xvYnVzIGV2ZW50ICVkXG4iLAoJCQkJIGpv
Yl9jb250YWN0LCBzdGF0ZSApOwoJCXJldHVybjsKCX0KCglpZiAoIHN0YXRlID09IEdMT0JVU19H
UkFNX0NMSUVOVF9KT0JfU1RBVEVfUEVORElORyApIHsKCQlpZiAoIHRoaXNfam9iLT5qb2JTdGF0
ZSAhPSAxICApIHsKCQkJdGhpc19qb2ItPmpvYlN0YXRlID0gMSA7CgoJCQlzY2hlZGQgPSBDb25u
ZWN0USggdGhpc18tPlNjaGVkZEFkZHIsIDMwMCAsIHRydWUgKTsKCQkJaWYgKCAhc2NoZWRkICkg
ewoJCQkJZHByaW50ZiggRF9BTFdBWVMsICJGYWlsZWQgdG8gY29ubmVjdCB0byBzY2hlZGQhXG4i
KTsKCQkJfSBlbHNlIHsKCQkJCXNjaGVkZC0+U2V0QXR0cmlidXRlSW50KCB0aGlzX2pvYi0+Y2x1
c3Rlcl9pZCwKCQkJCQkJCQkJCSB0aGlzX2pvYi0+cHJvY19pZCwKCQkJCQkJCQkJCSBBVFRSX0pP
Ql9TVEFUVVMsIDEgICk7CgkJCQlzY2hlZGQtPlNldEF0dHJpYnV0ZUludCggdGhpc19qb2ItPmNs
dXN0ZXJfaWQsCgkJCQkJCQkJCQkgdGhpc19qb2ItPnByb2NfaWQsCgkJCQkJCQkJCQkgQVRUUl9H
TE9CVVNfU1RBVFVTLCAxICApOwoKCQkJCURpc2Nvbm5lY3RRKCBzY2hlZGQgKTsKCQkJfQoJCX0K
CX0gZWxzZSBpZiAoIHN0YXRlID09IEdMT0JVU19HUkFNX0NMSUVOVF9KT0JfU1RBVEVfQUNUSVZF
ICkgewoJCWlmICggdGhpc19qb2ItPmpvYlN0YXRlICE9IDIgICkgewoJCQl0aGlzX2pvYi0+am9i
U3RhdGUgPSAyIDsKCgkJCXNjaGVkZCA9IENvbm5lY3RRKCB0aGlzXy0+U2NoZWRkQWRkciwgMzAw
ICwgdHJ1ZSApOwoJCQlpZiAoICFzY2hlZGQgKSB7CgkJCQlkcHJpbnRmKCBEX0FMV0FZUywgIkZh
aWxlZCB0byBjb25uZWN0IHRvIHNjaGVkZCFcbiIpOwoJCQl9IGVsc2UgewoJCQkJc2NoZWRkLT5T
ZXRBdHRyaWJ1dGVJbnQoIHRoaXNfam9iLT5jbHVzdGVyX2lkLAoJCQkJCQkJCQkJIHRoaXNfam9i
LT5wcm9jX2lkLAoJCQkJCQkJCQkJIEFUVFJfSk9CX1NUQVRVUywgMiAgKTsKCQkJCXNjaGVkZC0+
U2V0QXR0cmlidXRlSW50KCB0aGlzX2pvYi0+Y2x1c3Rlcl9pZCwKCQkJCQkJCQkJCSB0aGlzX2pv
Yi0+cHJvY19pZCwKCQkJCQkJCQkJCSBBVFRSX0dMT0JVU19TVEFUVVMsIDIgICk7CgkJCQkgCgoJ
CQkJRGlzY29ubmVjdFEoIHNjaGVkZCApOwoKCQkJCSAKCQkJfQoKCQkJV3JpdGVFeGVjdXRlVG9V
c2VyTG9nKCB0aGlzX2pvYiApOwoJCX0KCX0gZWxzZSBpZiAoIHN0YXRlID09IEdMT0JVU19HUkFN
X0NMSUVOVF9KT0JfU1RBVEVfRkFJTEVEICkgewoJCSAKCQkgCgoJCSAKCQkgCgkJaWYgKCB0aGlz
X2pvYi0+am9iU3RhdGUgIT0gMyAgKSB7CgkJCXRoaXNfam9iLT5qb2JTdGF0ZSA9IDMgOwoKCQkJ
c2NoZWRkID0gQ29ubmVjdFEoIHRoaXNfLT5TY2hlZGRBZGRyLCAzMDAgLCB0cnVlICk7CgkJCWlm
ICggIXNjaGVkZCApIHsKCQkJCWRwcmludGYoIERfQUxXQVlTLCAiRmFpbGVkIHRvIGNvbm5lY3Qg
dG8gc2NoZWRkIVxuIik7CgkJCX0gZWxzZSB7CgkJCQlzY2hlZGQtPlNldEF0dHJpYnV0ZUludCgg
dGhpc19qb2ItPmNsdXN0ZXJfaWQsCgkJCQkJCQkJCQkgdGhpc19qb2ItPnByb2NfaWQsCgkJCQkJ
CQkJCQkgQVRUUl9KT0JfU1RBVFVTLCA0ICApOwoJCQkJc2NoZWRkLT5TZXRBdHRyaWJ1dGVJbnQo
IHRoaXNfam9iLT5jbHVzdGVyX2lkLAoJCQkJCQkJCQkJIHRoaXNfam9iLT5wcm9jX2lkLAoJCQkJ
CQkJCQkJIEFUVFJfR0xPQlVTX1NUQVRVUywgMyAgKTsKCQkJCSAKCgkJCQlEaXNjb25uZWN0USgg
c2NoZWRkICk7CgoJCQkJIAoJCQl9CgoJCQkgCgoJCQkgCgoJCQlKb2JzLT5yZW1vdmUoIEhhc2hL
ZXkoIHRoaXNfam9iLT5qb2JDb250YWN0ICkgKTsKCQl9Cgl9IGVsc2UgaWYgKCBzdGF0ZSA9PSBH
TE9CVVNfR1JBTV9DTElFTlRfSk9CX1NUQVRFX0RPTkUgKSB7CgkJIAoJCSAKCQlpZiAoIHRoaXNf
am9iLT5qb2JTdGF0ZSAhPSA0ICApIHsKCQkJdGhpc19qb2ItPmpvYlN0YXRlID0gNCA7CgoJCQlz
Y2hlZGQgPSBDb25uZWN0USggdGhpc18tPlNjaGVkZEFkZHIsIDMwMCAsIHRydWUgKTsKCQkJaWYg
KCAhc2NoZWRkICkgewoJCQkJZHByaW50ZiggRF9BTFdBWVMsICJGYWlsZWQgdG8gY29ubmVjdCB0
byBzY2hlZGQhXG4iKTsKCQkJfSBlbHNlIHsKCQkJCXNjaGVkZC0+U2V0QXR0cmlidXRlSW50KCB0
aGlzX2pvYi0+Y2x1c3Rlcl9pZCwKCQkJCQkJCQkJCSB0aGlzX2pvYi0+cHJvY19pZCwKCQkJCQkJ
CQkJCSBBVFRSX0pPQl9TVEFUVVMsIDQgICk7CgkJCQlzY2hlZGQtPlNldEF0dHJpYnV0ZUludCgg
dGhpc19qb2ItPmNsdXN0ZXJfaWQsCgkJCQkJCQkJCQkgdGhpc19qb2ItPnByb2NfaWQsCgkJCQkJ
CQkJCQkgQVRUUl9HTE9CVVNfU1RBVFVTLCA0ICApOwoJCQkJIAoKCQkJCURpc2Nvbm5lY3RRKCBz
Y2hlZGQgKTsKCgkJCQkgCgkJCX0KCgkJCVdyaXRlVGVybWluYXRlVG9Vc2VyTG9nKCB0aGlzX2pv
YiApOwoKCQkJIAoKCQkJSm9icy0+cmVtb3ZlKCBIYXNoS2V5KCB0aGlzX2pvYi0+am9iQ29udGFj
dCApICk7CgkJfQoJfSBlbHNlIGlmICggc3RhdGUgPT0gR0xPQlVTX0dSQU1fQ0xJRU5UX0pPQl9T
VEFURV9TVVNQRU5ERUQgKSB7CgkJaWYgKCB0aGlzX2pvYi0+am9iU3RhdGUgIT0gNSAgKSB7CgkJ
CXRoaXNfam9iLT5qb2JTdGF0ZSA9IDUgOwoKCQkJc2NoZWRkID0gQ29ubmVjdFEoIHRoaXNfLT5T
Y2hlZGRBZGRyLCAzMDAgLCB0cnVlICk7CgkJCWlmICggIXNjaGVkZCApIHsKCQkJCWRwcmludGYo
IERfQUxXQVlTLCAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gc2NoZWRkIVxuIik7CgkJCX0gZWxzZSB7
CgkJCQlzY2hlZGQtPlNldEF0dHJpYnV0ZUludCggdGhpc19qb2ItPmNsdXN0ZXJfaWQsCgkJCQkJ
CQkJCQkgdGhpc19qb2ItPnByb2NfaWQsCgkJCQkJCQkJCQkgQVRUUl9KT0JfU1RBVFVTLCAxICAp
OwoJCQkJc2NoZWRkLT5TZXRBdHRyaWJ1dGVJbnQoIHRoaXNfam9iLT5jbHVzdGVyX2lkLAoJCQkJ
CQkJCQkJIHRoaXNfam9iLT5wcm9jX2lkLAoJCQkJCQkJCQkJIEFUVFJfR0xPQlVTX1NUQVRVUywg
NSAgKTsKCgkJCQlEaXNjb25uZWN0USggc2NoZWRkICk7CgkJCX0KCQl9Cgl9IGVsc2UgewoJCWRw
cmludGYoIERfQUxXQVlTLCAiVW5rbm93biBnbG9idXMgam9iIHN0YXRlICVkIGZvciBqb2IgJWQu
JWRcbiIsCgkJCQkgc3RhdGUsIHRoaXNfam9iLT5jbHVzdGVyX2lkLCB0aGlzX2pvYi0+cHJvY19p
ZCApOwoJfQoKfQoKIAogCiAKIAogClVzZXJMb2cqCkdyaWRNYW5hZ2VyOjpJbml0aWFsaXplVXNl
ckxvZyggR2xvYnVzSm9iICpqb2IgKQp7CglpZiggam9iLT51c2VyTG9nRmlsZSA9PSBfX251bGwg
ICkgewoJCSAKCQlyZXR1cm4gX19udWxsIDsKCX0KCgkgCgkgCgkgCgkgCgoJZHByaW50ZiggRF9G
VUxMREVCVUcsICJXcml0aW5nIHJlY29yZCB0byB1c2VyIGxvZ2ZpbGU9JXMgb3duZXI9JXNcbiIs
CgkJCSBqb2ItPnVzZXJMb2dGaWxlLCBPd25lciApOwoKCVVzZXJMb2cgKlVMb2cgPSBuZXcgVXNl
ckxvZygpOwoJVUxvZy0+aW5pdGlhbGl6ZShPd25lciwgam9iLT51c2VyTG9nRmlsZSwgam9iLT5j
bHVzdGVySUQsIGpvYi0+cHJvY0lELCAwKTsKCXJldHVybiBVTG9nOwp9Cgpib29sCkdyaWRNYW5h
Z2VyOjpXcml0ZUV4ZWN1dGVUb1VzZXJMb2coIEdsb2J1c0pvYiAqam9iICkKewoJVXNlckxvZyAq
dWxvZyA9IEluaXRpYWxpemVVc2VyTG9nKCBqb2IgKTsKCWlmICggdWxvZyA9PSBfX251bGwgICkg
ewoJCSAKCQlyZXR1cm4gdHJ1ZTsKCX0KCglpbnQgaG9zdG5hbWVfbGVuID0gc3RyY3Nwbiggam9i
LT5ybUNvbnRhY3QsICI6LyIgKTsKCglFeGVjdXRlRXZlbnQgZXZlbnQ7CglzdHJuY3B5KCBldmVu
dC5leGVjdXRlSG9zdCwgam9iLT5ybUNvbnRhY3QsIGhvc3RuYW1lX2xlbiApOwoJaW50IHRjID0g
dWxvZy0+d3JpdGVFdmVudCgmZXZlbnQpOwoJZGVsZXRlIHVsb2c7CgoJaWYgKCFyYykgewoJCWRw
cmludGYoIERfQUxXQVlTLCAiVW5hYmxlIHRvIGxvZyBVTE9HX0VYRUNVVEUgZXZlbnRcbiIgKTsK
CQlyZXR1cm4gZmFsc2U7Cgl9CgoJcmV0dXJuIHRydWU7Cn0KCmJvb2wKR3JpZE1hbmFnZXI6Oldy
aXRlVGVybWluYXRlVG9Vc2VyTG9nKCBHbG9idXNKb2IgKmpvYiApCnsKCVVzZXJMb2cgKnVsb2cg
PSBJbml0aWFsaXplVXNlckxvZyggam9iICk7CglpZiAoIHVsb2cgPT0gX19udWxsICApIHsKCQkg
CgkJcmV0dXJuIHRydWU7Cgl9CgoJSm9iVGVybWluYXRlZEV2ZW50IGV2ZW50OwoJZXZlbnQuY29y
ZUZpbGVbMF0gPSAnXDAnOwoJc3RydWN0IHJ1c2FnZSByOwoJbWVtc2V0KCAmciwgMCwgc2l6ZW9m
KCBzdHJ1Y3QgcnVzYWdlICkgKTsKCgoJZXZlbnQucnVuX2xvY2FsX3J1c2FnZSA9IHI7CglldmVu
dC5ydW5fcmVtb3RlX3J1c2FnZSA9IHI7CglldmVudC50b3RhbF9sb2NhbF9ydXNhZ2UgPSByOwoJ
ZXZlbnQudG90YWxfcmVtb3RlX3J1c2FnZSA9IHI7CgoJZXZlbnQuc2VudF9ieXRlcyA9IDA7Cgll
dmVudC5yZWN2ZF9ieXRlcyA9IDA7CglldmVudC50b3RhbF9zZW50X2J5dGVzID0gMDsKCWV2ZW50
LnRvdGFsX3JlY3ZkX2J5dGVzID0gMDsKCgkgCgkgCglldmVudC5ub3JtYWwgPSB0cnVlOwoJZXZl
bnQucmV0dXJuVmFsdWUgPSAwOwoKCWludCByYyA9IHVsb2ctPndyaXRlRXZlbnQoJmV2ZW50KTsK
CWRlbGV0ZSB1bG9nOwoKCWlmICghcmMpIHsKCQlkcHJpbnRmKCBEX0FMV0FZUywgIlVuYWJsZSB0
byBsb2cgVUxPR19KT0JfVEVSTUlOQVRFRCBldmVudFxuIiApOwoJCXJldHVybiBmYWxzZTsKCX0K
CglyZXR1cm4gdHJ1ZTsKfQo=


reply via email to

[Prev in Thread] Current Thread [Next in Thread]