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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

target/10851: [m32r] ICE in extract_insn, at recog.c:2175


>Number:         10851
>Category:       target
>Synopsis:       [m32r] ICE in extract_insn, at recog.c:2175
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Mon May 19 05:56:03 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Kazuhiro Inaoka
>Release:        gcc version 3.3
>Organization:
>Environment:
Linux t1pc-m32rsvr 2.4.18-24.7.x #1 Fri Jan 31 07:06:03 EST 2003 i686 unknown
>Description:
ice20030519.c: In function `FontSize':
ice20030519.c:17370: error: unrecognizable insn:
(insn 595 604 596 11 (nil) (set (reg:SI 17 cbit)
        (const_int 0 [0x0])) -1 (nil)
    (expr_list:REG_EQUAL (const_int 0 [0x0])
        (nil)))
ice20030519.c:17370: internal compiler error: in extract_insn, at recog.c:2175
Please submit a full bug report,
with preprocessed source if appropriate.

following is one of the bug patterns.
void func()
{
  int i;
  for (i=0; i<5; i++)
    if (i=0)
      break;
}
>How-To-Repeat:
compile with Optimize options (-O, -O2, -O3)
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/x-csrc; name="ice20030519.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="ice20030519.c"

c3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICIkSGVhZGVyOiAvcHJvamVjdC9tMzJyLWxpbnV4
L3RhcmdldF9zcmMvcmVwb3NpdG9yeS9sZXNzdGlmMS9zcmMvbGliL1htL1RleHRGLmMsdiAxLjEu
MS4xIDIwMDMvMDUvMTYgMDM6NTY6MDMgdGFrYXRhIEV4cCAkIjsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgc2l6ZV90Owp0eXBlZGVmIGxvbmcgaW50IHdjaGFyX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsK
ICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAog
IHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CmV4dGVy
biBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkgOwoKCgpleHRlcm4gZG91Ymxl
IGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBs
b25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAgICAgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIpIDsKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UpIDsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgOwoKCgpf
X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5z
aWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0
ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UpIDsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwgaW50IF9fYmFzZSkKICAgICA7CmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICA7CmV4
dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xk
X2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIDsKCmV4dGVy
biBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl
LCBpbnQgX19ncm91cCkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2lu
dGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg
aW50IF9fZ3JvdXApIDsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19z
dHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2Us
IGludCBfX2dyb3VwKSA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICA7CgoKCgoKCgpleHRl
cm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJu
YWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0
b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwg
KF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVk
IGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9f
c3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVu
c2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg
aW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw
dHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQg
bG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVy
biBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoK
Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
CiAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25w
dHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5l
IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJp
Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgIGludCBfX2Jh
c2UpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19i
YXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpf
X25wdHIpCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSk7
Cn0KZXh0ZXJuIF9faW5saW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJl
dHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0K
ZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAg
cmV0dXJuIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQoKCl9f
ZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3Qg
Y2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopICgodm9p
ZCAqKTApLCAxMCk7Cn0KZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgOwoKCmV4dGVy
biBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7Cgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGlu
dCBfX3F1YWRfdDsKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9f
aW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18g
dHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90
ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50
IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5v
X3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsK
dHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBl
ZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgX191X2xvbmcg
X19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9pbnQg
X19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRf
dDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBl
ZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7
CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3Ymxr
X3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVmIGludCBfX2Nsb2NraWRf
dDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoK
dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCnR5cGVkZWYgbG9uZyBp
bnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVkZWYg
X19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0
eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2Zz
ZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCgp0eXBlZGVmIF9f
dV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKCnR5cGVk
ZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91
c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBfX3NvY2tsZW5fdDsKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9w
cmlvcml0eTsKICB9OwoKCgp0eXBlZGVmIGludCBfX2F0b21pY19sb2NrX3Q7CgoKc3RydWN0IF9w
dGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBfX2F0b21pY19sb2NrX3Qg
X19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAq
X3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAg
aW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRf
cGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsK
ICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0
YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVk
ZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJl
YWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0
CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNl
cnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQg
X19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRf
bXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFk
X211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIGludCBwdGhyZWFkX3Q7CnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVm
IF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xv
bmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVf
cXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19sb2ZmX3QgbG9m
Zl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoK
CnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoK
dHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoK
Cgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVk
ZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKCnR5cGVk
ZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCgoKdHlw
ZWRlZiBfX2tleV90IGtleV90Owp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKdHlwZWRlZiBfX2Ns
b2NraWRfdCBjbG9ja2lkX3Q7CnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CnR5cGVkZWYgdW5z
aWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYg
dW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp
KTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fd29yZF9fKSkpOwp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVk
ZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNp
emVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsKdHlwZWRlZiBfX3Np
Z3NldF90IHNpZ3NldF90OwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7
CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CnN0cnVjdCB0aW1ldmFsCiAgewogICAgX190aW1l
X3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CgoKCgp0eXBlZGVmIF9f
c3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKdHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7
CgoKCgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKCgoKCgoKICAgIF9fZmRfbWFzayBfX2Zkc19iaXRz
WzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5
cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9f
bmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgIGZk
X3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpf
X3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwg
Kl9fcmVzdHJpY3QgX190aW1lb3V0KSA7Cgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoK
CnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90
IGZzZmlsY250X3Q7CgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSA7CgoKZXh0ZXJuIHZv
aWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgoKCmV4dGVybiBjaGFyICppbml0
c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSA7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0
ZSAoY2hhciAqX19zdGF0ZWJ1ZikgOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAg
aW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAg
IGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBp
bnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9t
X2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9f
cmVzdHJpY3QgX19yZXN1bHQpIDsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQg
X19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSA7CgpleHRlcm4gaW50IGluaXRzdGF0
ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIDsKCmV4dGVybiBp
bnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgoKCmV4
dGVybiBpbnQgcmFuZCAodm9pZCkgOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBf
X3NlZWQpIDsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSA7CgoK
CgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4
ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBscmFu
ZDQ4ICh2b2lkKSA7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg
X194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBs
b25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVy
biB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgOwpleHRlcm4gdW5zaWduZWQgc2hv
cnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIDsKZXh0ZXJu
IHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIDsKCgoKCgpzdHJ1
Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVu
c2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsK
ICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50
IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3Ry
aWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQg
X194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f
cmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJp
Y3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0
YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpf
X3Jlc3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9y
dCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2Rh
dGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAq
X19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJh
bmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9u
ZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2ln
bmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy
YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxv
bmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxv
bmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgOwoK
ZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwKICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIDsKCmV4dGVy
biBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CmV4dGVybiB2b2lk
ICptYWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7Cgpl
eHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICBf
X2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2
b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsK
CmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSA7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2
b2lkICpfX3B0cikgOwoKCgoKCgpleHRlcm4gdm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSA7
CgoKCgoKCgoKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmli
dXRlX18gKChfX21hbGxvY19fKSk7CmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSBfX2F0dHJpYnV0
ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5j
KSAodm9pZCkpIDsKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBf
X3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICA7CgoKCgoKZXh0ZXJuIHZv
aWQgZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CmV4
dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCmV4dGVybiBjaGFy
ICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCgoKZXh0ZXJuIGlu
dCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSA7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29u
c3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCiAg
ICAgOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCgoK
CmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIDsKZXh0ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAq
X190ZW1wbGF0ZSkgOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRl
KSA7CmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSA7CgoKCgpleHRlcm4g
aW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpIDsKZXh0ZXJuIGNoYXIgKnJlYWxw
YXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgOwoKCgoKCgp0eXBlZGVmIGludCAoKl9f
Y29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwpleHRlcm4gdm9p
ZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21w
YXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNp
emVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wYXJf
Zm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGlu
dCBfX2Rlbm9tKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZf
dCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBp
bnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAg
aW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAg
ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQg
KGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSA7CgoKCgpleHRlcm4g
Y2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAg
ICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2ln
bikgOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jl
c3RyaWN0IF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUs
IGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3Vi
bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAg
ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19i
dWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBmY3Z0X3Ig
KGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAog
ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmlj
dCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgOwoKZXh0ZXJuIGludCBx
ZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAg
ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAg
ICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7
CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAog
ICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJp
Y3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNp
emVfdCBfX2xlbikgOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywg
c2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
cHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6
ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hh
cikgOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdj
cywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywg
c2l6ZV90IF9fbikgOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBf
X3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X3B3Y3MsIHNpemVfdCBfX24pCiAgICAgOwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2Nv
bnN0IGNoYXIgKl9fcmVzcG9uc2UpIDsKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUgX19s
b2FkYXZnW10sIGludCBfX25lbGVtKSA7CgoKCgoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lk
ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpf
X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZv
aWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICA7CgoKCgoK
ZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZv
aWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXpl
X3QgX19uKQogICAgIDsKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9f
Yywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEs
IF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9f
Yywgc2l6ZV90IF9fbikKICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CmV4dGVybiBj
aGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zcmMpCiAgICAgOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJp
Y3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0
cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgpleHRl
cm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIDsKCgpl
eHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIp
CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9f
Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBj
aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAog
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbikgOwpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRy
aWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFy
ICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIg
KnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25z
dCBjaGFyICpfX3JlamVjdCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRl
cm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2Nl
cHQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJy
ayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIg
Kl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICA7CgoKCmV4dGVybiBjaGFyICpf
X3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19y
IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0s
CiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOwpl
eHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgOwoKCgpleHRl
cm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f
YnVmbGVuKSA7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24p
IDsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVz
dCwgc2l6ZV90IF9fbikgOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBf
X24pIDsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lk
ICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4
dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19z
LCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMg
KGludCBfX2kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGludCBzdHJjYXNl
Y21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNo
YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3Qg
X19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19kZWxpbSkgOwp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGNoYXIgX19hcnJbMl07IH0gX19T
VFJJTkcyX0NPUFlfQVJSMiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CnR5cGVkZWYgc3RydWN0
IHsgdW5zaWduZWQgY2hhciBfX2FyclszXTsgfSBfX1NUUklORzJfQ09QWV9BUlIzIF9fYXR0cmli
dXRlX18gKChwYWNrZWQpKTsKdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBjaGFyIF9fYXJyWzRd
OyB9IF9fU1RSSU5HMl9DT1BZX0FSUjQgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwp0eXBlZGVm
IHN0cnVjdCB7IHVuc2lnbmVkIGNoYXIgX19hcnJbNV07IH0gX19TVFJJTkcyX0NPUFlfQVJSNSBf
X2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBf
X2Fycls2XTsgfSBfX1NUUklORzJfQ09QWV9BUlI2IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsK
dHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBjaGFyIF9fYXJyWzddOyB9IF9fU1RSSU5HMl9DT1BZ
X0FSUjcgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVk
IGNoYXIgX19hcnJbOF07IH0gX19TVFJJTkcyX0NPUFlfQVJSOCBfX2F0dHJpYnV0ZV9fICgocGFj
a2VkKSk7CmV4dGVybiB2b2lkICpfX3Jhd21lbWNociAoY29uc3Qgdm9pZCAqX19zLCBpbnQgX19j
KTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAqX19z
LCBpbnQgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMSAoX19j
b25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdCkKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3Vs
dCA9IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9
IF9fcmVqZWN0KQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBf
X2lubGluZSBzaXplX3QgX19zdHJjc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVq
ZWN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3JlamVjdDIp
OwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpfX3Ms
IGludCBfX3JlamVjdDEsIGludCBfX3JlamVjdDIpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1
bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAh
PSBfX3JlamVjdDEKICAgICAgICAgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDIpCiAgICAr
K19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBf
X3N0cmNzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcmVqZWN0MiwgaW50IF9fcmVqZWN0Myk7
CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywg
aW50IF9fcmVqZWN0MSwgaW50IF9fcmVqZWN0MiwKICAgICAgICAgICAgICBpbnQgX19yZWplY3Qz
KQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3aGlsZSAoX19zW19fcmVzdWx0
XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QxCiAgICAgICAgICYmIF9fc1tf
X3Jlc3VsdF0gIT0gX19yZWplY3QyICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QzKQogICAg
KytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KZXh0ZXJuIF9faW5saW5lIHNpemVfdCBf
X3N0cnNwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdCk7CmV4dGVybiBfX2lu
bGluZSBzaXplX3QKX19zdHJzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQp
CnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVzdWx0
XSA9PSBfX2FjY2VwdCkKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRl
cm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f
YWNjZXB0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0
Mik7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJzcG5fYzIgKF9fY29uc3QgY2hhciAqX19z
LCBpbnQgX19hY2NlcHQxLCBpbnQgX19hY2NlcHQyKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVz
dWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQxIHx8IF9fc1tfX3Jl
c3VsdF0gPT0gX19hY2NlcHQyKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0K
CmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBp
bnQgX19hY2NlcHQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19h
Y2NlcHQyLCBpbnQgX19hY2NlcHQzKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9j
MyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIsIGludCBf
X2FjY2VwdDMpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19z
W19fcmVzdWx0XSA9PSBfX2FjY2VwdDEgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDIKICAg
ICAgICAgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDMpCiAgICArK19fcmVzdWx0OwogIHJl
dHVybiBfX3Jlc3VsdDsKfQpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJwYnJrX2MyIChfX2Nv
bnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2FjY2VwdDIpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RycGJy
a19jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIpCnsK
CiAgd2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19zICE9IF9fYWNjZXB0MSAmJiAqX19zICE9IF9f
YWNjZXB0MikKICAgICsrX19zOwogIHJldHVybiAqX19zID09ICdcMCcgPyAoKHZvaWQgKikwKSA6
IChjaGFyICopIChzaXplX3QpIF9fczsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RycGJy
a19jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyLCBpbnQgX19hY2NlcHQzKTsKZXh0ZXJu
IF9faW5saW5lIGNoYXIgKgpfX3N0cnBicmtfYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19h
Y2NlcHQxLCBpbnQgX19hY2NlcHQyLAogICAgICAgICAgICAgIGludCBfX2FjY2VwdDMpCnsKCiAg
d2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19zICE9IF9fYWNjZXB0MSAmJiAqX19zICE9IF9fYWNj
ZXB0MgogICAgICAgICAmJiAqX19zICE9IF9fYWNjZXB0MykKICAgICsrX19zOwogIHJldHVybiAq
X19zID09ICdcMCcgPyAoKHZvaWQgKikwKSA6IChjaGFyICopIChzaXplX3QpIF9fczsKfQpleHRl
cm4gX19pbmxpbmUgY2hhciAqX19zdHJ0b2tfcl8xYyAoY2hhciAqX19zLCBjaGFyIF9fc2VwLCBj
aGFyICoqX19uZXh0cCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJ0b2tfcl8xYyAoY2hh
ciAqX19zLCBjaGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCkKewogIGNoYXIgKl9fcmVzdWx0Owog
IGlmIChfX3MgPT0gKCh2b2lkICopMCkpCiAgICBfX3MgPSAqX19uZXh0cDsKICB3aGlsZSAoKl9f
cyA9PSBfX3NlcCkKICAgICsrX19zOwogIF9fcmVzdWx0ID0gKCh2b2lkICopMCk7CiAgaWYgKCpf
X3MgIT0gJ1wwJykKICAgIHsKICAgICAgX19yZXN1bHQgPSBfX3MrKzsKICAgICAgd2hpbGUgKCpf
X3MgIT0gJ1wwJykKICAgICAgICBpZiAoKl9fcysrID09IF9fc2VwKQogICAgICAgICAgewogICAg
ICAgICAgICBfX3NbLTFdID0gJ1wwJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAg
ICAgICpfX25leHRwID0gX19zOwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQpleHRlcm4gY2hh
ciAqX19zdHJzZXBfZyAoY2hhciAqKl9fc3RyaW5ncCwgX19jb25zdCBjaGFyICpfX2RlbGltKTsK
ZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ryc2VwXzFjIChjaGFyICoqX19zLCBjaGFyIF9fcmVq
ZWN0KTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF8xYyAoY2hhciAqKl9fcywgY2hh
ciBfX3JlamVjdCkKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19y
ZXR2YWwgIT0gKCh2b2lkICopMCkgJiYgKCpfX3MgPSAoX19leHRlbnNpb25fXyAoX19idWlsdGlu
X2NvbnN0YW50X3AgKF9fcmVqZWN0KSAmJiAoX19yZWplY3QpID09ICdcMCcgPyAoY2hhciAqKSBf
X3Jhd21lbWNociAoX19yZXR2YWwsIF9fcmVqZWN0KSA6IHN0cmNociAoX19yZXR2YWwsIF9fcmVq
ZWN0KSkpKSAhPSAoKHZvaWQgKikwKSkKICAgICooKl9fcykrKyA9ICdcMCc7CiAgcmV0dXJuIF9f
cmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfMmMgKGNoYXIgKipfX3Ms
IGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0Mik7CmV4dGVybiBfX2lubGluZSBjaGFyICoK
X19zdHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MikK
ewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19yZXR2YWwgIT0gKCh2
b2lkICopMCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAg
ICAgd2hpbGUgKDEpCiAgICAgICAgewogICAgICAgICAgaWYgKCpfX2NwID09ICdcMCcpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBfX2NwID0gKCh2b2lkICopMCk7CiAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCpfX2NwID09IF9fcmVqZWN0MSB8fCAqX19j
cCA9PSBfX3JlamVjdDIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAqX19jcCsrID0gJ1ww
JzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgKytfX2NwOwog
ICAgICAgIH0KICAgICAgKl9fcyA9IF9fY3A7CiAgICB9CiAgcmV0dXJuIF9fcmV0dmFsOwp9Cgpl
eHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWpl
Y3QxLCBjaGFyIF9fcmVqZWN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyIF9fcmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJzZXBfM2MgKGNoYXIg
KipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwgY2hhciBfX3JlamVjdDMpCnsK
ICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsICE9ICgodm9p
ZCAqKTApKQogICAgewogICAgICByZWdpc3RlciBjaGFyICpfX2NwID0gX19yZXR2YWw7CiAgICAg
IHdoaWxlICgxKQogICAgICAgIHsKICAgICAgICAgIGlmICgqX19jcCA9PSAnXDAnKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgX19jcCA9ICgodm9pZCAqKTApOwogICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICgqX19jcCA9PSBfX3JlamVjdDEgfHwgKl9fY3Ag
PT0gX19yZWplY3QyIHx8ICpfX2NwID09IF9fcmVqZWN0MykKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICpfX2NwKysgPSAnXDAnOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9
CiAgICAgICAgICArK19fY3A7CiAgICAgICAgfQogICAgICAqX19zID0gX19jcDsKICAgIH0KICBy
ZXR1cm4gX19yZXR2YWw7Cn0KZXh0ZXJuIGNoYXIgKl9fc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9f
c3RyaW5nKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwpleHRlcm4gY2hhciAqX19zdHJu
ZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRl
X18gKChfX21hbGxvY19fKSk7Cgp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CnR5cGVkZWYgc3RydWN0
IF9JT19GSUxFIF9fRklMRTsKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlz
dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90Owp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9f
Y291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsK
ICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90
OwpzdHJ1Y3QgdG07CgoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSAod2NoYXJfdCAqX19yZXN0
cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19y
ZXN0cmljdCBfX3NyYykgOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIDsKCgpleHRlcm4gd2NoYXJfdCAqd2Nz
Y2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSA7CgpleHRlcm4gd2NoYXJfdCAqd2Nz
bmNhdCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAgICAgOwoK
CmV4dGVybiBpbnQgd2NzY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJf
dCAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2Nz
bmNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVf
dCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CmV4dGVybiBpbnQgd2NzY29s
bCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIDsKCgoKZXh0
ZXJuIHNpemVfdCB3Y3N4ZnJtICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24p
IDsKZXh0ZXJuIHdjaGFyX3QgKndjc2NociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJf
dCBfX3djKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3Qg
Kndjc3JjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0IHdj
aGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9fY29uc3Qgd2NoYXJfdCAqX193
Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nzc3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3Rh
Y2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CmV4dGVybiB3Y2hhcl90ICp3Y3N0b2sgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAog
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZWxp
bSwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19wdHIpIDsK
CgpleHRlcm4gc2l6ZV90IHdjc2xlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwpleHRlcm4gd2NoYXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hhcl90
ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fczEsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
czIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu
IHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19u
KSA7CgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3
Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKQogICAgIDsKCgpleHRlcm4gd2NoYXJfdCAqd21lbXNl
dCAod2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikgOwpleHRlcm4gd2ludF90
IGJ0b3djIChpbnQgX19jKSA7CgoKCmV4dGVybiBpbnQgd2N0b2IgKHdpbnRfdCBfX2MpIDsKCgoK
ZXh0ZXJuIGludCBtYnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0
cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19w
KSA7CgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJf
dCBfX3djLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3Bz
KSA7CgoKZXh0ZXJuIHNpemVfdCBfX21icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
cywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3Ry
aWN0IF9fcHMpIDsKZXh0ZXJuIHNpemVfdCBtYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVz
dHJpY3QgX19wcykgOwoKCgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IG1icmxlbiAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKQp7IHJldHVybiAoX19wcyAhPSAoKHZv
aWQgKikwKQogICAgICAgICAgPyBtYnJ0b3djICgoKHZvaWQgKikwKSwgX19zLCBfX24sIF9fcHMp
IDogX19tYnJsZW4gKF9fcywgX19uLCAoKHZvaWQgKikwKSkpOyB9CgoKCgpleHRlcm4gc2l6ZV90
IG1ic3J0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSA7CgoKCmV4
dGVybiBzaXplX3Qgd2NzcnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90
IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9f
cHMpIDsKZXh0ZXJuIGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0
cikgOwpleHRlcm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQog
ICAgIDsKZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJf
dCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIDsKZXh0ZXJuIGZsb2F0
IF9fd2NzdG9mX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLCBpbnQgX19ncm91cCkKICAgICA7CmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfaW50
ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgOwoKCmV4
dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoq
X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193
Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25n
IGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVy
biB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwgKF9fY29uc3Qgd2No
YXJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3Y2hhcl90ICoqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSA7CgoK
CgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyKQp7IHJldHVybiBfX3djc3RvZF9pbnRlcm5hbCAoX19ucHRyLCBf
X2VuZHB0ciwgMCk7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50IHdjc3RvbCAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2Jhc2UpCnsgcmV0dXJuIF9fd2NzdG9sX2ludGVybmFsIChfX25wdHIs
IF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGlu
dCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i
YXNlKQp7IHJldHVybiBfX3djc3RvdWxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFz
ZSwgMCk7IH0KZXh0ZXJuIHdpbnRfdCBmZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJu
IHdpbnRfdCBnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiB3aW50X3QgZ2V0d2No
YXIgKHZvaWQpIDsKCgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2MgKHdjaGFyX3QgX193YywgX19GSUxF
ICpfX3N0cmVhbSkgOwpleHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAq
X19zdHJlYW0pIDsKCgpleHRlcm4gd2ludF90IHB1dHdjaGFyICh3Y2hhcl90IF9fd2MpIDsKCgoK
CmV4dGVybiB3Y2hhcl90ICpmZ2V0d3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9f
biwKICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7
CgoKZXh0ZXJuIGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAog
ICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKCmV4dGVy
biB3aW50X3QgdW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJu
IHNpemVfdCB3Y3NmdGltZSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNp
emUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVz
dHJpY3QgX190cCkgOwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJRDsKCgoKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIE1hc2s7CgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBBdG9tOwoKdHlwZWRlZiB1
bnNpZ25lZCBsb25nIFZpc3VhbElEOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVGltZTsKdHlwZWRl
ZiBYSUQgV2luZG93Owp0eXBlZGVmIFhJRCBEcmF3YWJsZTsKCgp0eXBlZGVmIFhJRCBGb250OwoK
dHlwZWRlZiBYSUQgUGl4bWFwOwp0eXBlZGVmIFhJRCBDdXJzb3I7CnR5cGVkZWYgWElEIENvbG9y
bWFwOwp0eXBlZGVmIFhJRCBHQ29udGV4dDsKdHlwZWRlZiBYSUQgS2V5U3ltOwoKdHlwZWRlZiB1
bnNpZ25lZCBjaGFyIEtleUNvZGU7CnR5cGVkZWYgY2hhciAqWFBvaW50ZXI7CnR5cGVkZWYgc3Ry
dWN0IF9YRXh0RGF0YSB7CiAgICAgICAgaW50IG51bWJlcjsKICAgICAgICBzdHJ1Y3QgX1hFeHRE
YXRhICpuZXh0OwogICAgICAgIGludCAoKmZyZWVfcHJpdmF0ZSkoCgogICAgICAgIHN0cnVjdCBf
WEV4dERhdGEgKmV4dGVuc2lvbgoKICAgICAgICApOwogICAgICAgIFhQb2ludGVyIHByaXZhdGVf
ZGF0YTsKfSBYRXh0RGF0YTsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgZXh0ZW5z
aW9uOwogICAgICAgIGludCBtYWpvcl9vcGNvZGU7CiAgICAgICAgaW50IGZpcnN0X2V2ZW50Owog
ICAgICAgIGludCBmaXJzdF9lcnJvcjsKfSBYRXh0Q29kZXM7CgoKCgoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgaW50IGRlcHRoOwogICAgaW50IGJpdHNfcGVyX3BpeGVsOwogICAgaW50IHNjYW5saW5l
X3BhZDsKfSBYUGl4bWFwRm9ybWF0VmFsdWVzOwoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAg
ICBpbnQgZnVuY3Rpb247CiAgICAgICAgdW5zaWduZWQgbG9uZyBwbGFuZV9tYXNrOwogICAgICAg
IHVuc2lnbmVkIGxvbmcgZm9yZWdyb3VuZDsKICAgICAgICB1bnNpZ25lZCBsb25nIGJhY2tncm91
bmQ7CiAgICAgICAgaW50IGxpbmVfd2lkdGg7CiAgICAgICAgaW50IGxpbmVfc3R5bGU7CiAgICAg
ICAgaW50IGNhcF9zdHlsZTsKCiAgICAgICAgaW50IGpvaW5fc3R5bGU7CiAgICAgICAgaW50IGZp
bGxfc3R5bGU7CgogICAgICAgIGludCBmaWxsX3J1bGU7CiAgICAgICAgaW50IGFyY19tb2RlOwog
ICAgICAgIFBpeG1hcCB0aWxlOwogICAgICAgIFBpeG1hcCBzdGlwcGxlOwogICAgICAgIGludCB0
c194X29yaWdpbjsKICAgICAgICBpbnQgdHNfeV9vcmlnaW47CiAgICAgICAgRm9udCBmb250Owog
ICAgICAgIGludCBzdWJ3aW5kb3dfbW9kZTsKICAgICAgICBpbnQgZ3JhcGhpY3NfZXhwb3N1cmVz
OwogICAgICAgIGludCBjbGlwX3hfb3JpZ2luOwogICAgICAgIGludCBjbGlwX3lfb3JpZ2luOwog
ICAgICAgIFBpeG1hcCBjbGlwX21hc2s7CiAgICAgICAgaW50IGRhc2hfb2Zmc2V0OwogICAgICAg
IGNoYXIgZGFzaGVzOwp9IFhHQ1ZhbHVlczsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1hHQwoKCgoK
CgoKKkdDOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIFhFeHREYXRhICpleHRfZGF0YTsK
ICAgICAgICBWaXN1YWxJRCB2aXN1YWxpZDsKCgoKICAgICAgICBpbnQgY2xhc3M7CgogICAgICAg
IHVuc2lnbmVkIGxvbmcgcmVkX21hc2ssIGdyZWVuX21hc2ssIGJsdWVfbWFzazsKICAgICAgICBp
bnQgYml0c19wZXJfcmdiOwogICAgICAgIGludCBtYXBfZW50cmllczsKfSBWaXN1YWw7CgoKCgp0
eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IGRlcHRoOwogICAgICAgIGludCBudmlzdWFsczsK
ICAgICAgICBWaXN1YWwgKnZpc3VhbHM7Cn0gRGVwdGg7CgoKCgoKCgpzdHJ1Y3QgX1hEaXNwbGF5
OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIFhFeHREYXRhICpleHRfZGF0YTsKICAgICAgICBz
dHJ1Y3QgX1hEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyByb290OwogICAgICAgIGlu
dCB3aWR0aCwgaGVpZ2h0OwogICAgICAgIGludCBtd2lkdGgsIG1oZWlnaHQ7CiAgICAgICAgaW50
IG5kZXB0aHM7CiAgICAgICAgRGVwdGggKmRlcHRoczsKICAgICAgICBpbnQgcm9vdF9kZXB0aDsK
ICAgICAgICBWaXN1YWwgKnJvb3RfdmlzdWFsOwogICAgICAgIEdDIGRlZmF1bHRfZ2M7CiAgICAg
ICAgQ29sb3JtYXAgY21hcDsKICAgICAgICB1bnNpZ25lZCBsb25nIHdoaXRlX3BpeGVsOwogICAg
ICAgIHVuc2lnbmVkIGxvbmcgYmxhY2tfcGl4ZWw7CiAgICAgICAgaW50IG1heF9tYXBzLCBtaW5f
bWFwczsKICAgICAgICBpbnQgYmFja2luZ19zdG9yZTsKICAgICAgICBpbnQgc2F2ZV91bmRlcnM7
CiAgICAgICAgbG9uZyByb290X2lucHV0X21hc2s7Cn0gU2NyZWVuOwoKCgoKdHlwZWRlZiBzdHJ1
Y3QgewogICAgICAgIFhFeHREYXRhICpleHRfZGF0YTsKICAgICAgICBpbnQgZGVwdGg7CiAgICAg
ICAgaW50IGJpdHNfcGVyX3BpeGVsOwogICAgICAgIGludCBzY2FubGluZV9wYWQ7Cn0gU2NyZWVu
Rm9ybWF0OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgUGl4bWFwIGJhY2tncm91bmRfcGl4bWFw
OwogICAgdW5zaWduZWQgbG9uZyBiYWNrZ3JvdW5kX3BpeGVsOwogICAgUGl4bWFwIGJvcmRlcl9w
aXhtYXA7CiAgICB1bnNpZ25lZCBsb25nIGJvcmRlcl9waXhlbDsKICAgIGludCBiaXRfZ3Jhdml0
eTsKICAgIGludCB3aW5fZ3Jhdml0eTsKICAgIGludCBiYWNraW5nX3N0b3JlOwogICAgdW5zaWdu
ZWQgbG9uZyBiYWNraW5nX3BsYW5lczsKICAgIHVuc2lnbmVkIGxvbmcgYmFja2luZ19waXhlbDsK
ICAgIGludCBzYXZlX3VuZGVyOwogICAgbG9uZyBldmVudF9tYXNrOwogICAgbG9uZyBkb19ub3Rf
cHJvcGFnYXRlX21hc2s7CiAgICBpbnQgb3ZlcnJpZGVfcmVkaXJlY3Q7CiAgICBDb2xvcm1hcCBj
b2xvcm1hcDsKICAgIEN1cnNvciBjdXJzb3I7Cn0gWFNldFdpbmRvd0F0dHJpYnV0ZXM7Cgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBpbnQgeCwgeTsKICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgaW50
IGJvcmRlcl93aWR0aDsKICAgIGludCBkZXB0aDsKICAgIFZpc3VhbCAqdmlzdWFsOwogICAgV2lu
ZG93IHJvb3Q7CgoKCiAgICBpbnQgY2xhc3M7CgogICAgaW50IGJpdF9ncmF2aXR5OwogICAgaW50
IHdpbl9ncmF2aXR5OwogICAgaW50IGJhY2tpbmdfc3RvcmU7CiAgICB1bnNpZ25lZCBsb25nIGJh
Y2tpbmdfcGxhbmVzOwogICAgdW5zaWduZWQgbG9uZyBiYWNraW5nX3BpeGVsOwogICAgaW50IHNh
dmVfdW5kZXI7CiAgICBDb2xvcm1hcCBjb2xvcm1hcDsKICAgIGludCBtYXBfaW5zdGFsbGVkOwog
ICAgaW50IG1hcF9zdGF0ZTsKICAgIGxvbmcgYWxsX2V2ZW50X21hc2tzOwogICAgbG9uZyB5b3Vy
X2V2ZW50X21hc2s7CiAgICBsb25nIGRvX25vdF9wcm9wYWdhdGVfbWFzazsKICAgIGludCBvdmVy
cmlkZV9yZWRpcmVjdDsKICAgIFNjcmVlbiAqc2NyZWVuOwp9IFhXaW5kb3dBdHRyaWJ1dGVzOwoK
CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IGZhbWlseTsKICAgICAgICBpbnQgbGVu
Z3RoOwogICAgICAgIGNoYXIgKmFkZHJlc3M7Cn0gWEhvc3RBZGRyZXNzOwoKCgoKdHlwZWRlZiBz
dHJ1Y3QgX1hJbWFnZSB7CiAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgIGludCB4b2Zmc2V0Owog
ICAgaW50IGZvcm1hdDsKICAgIGNoYXIgKmRhdGE7CiAgICBpbnQgYnl0ZV9vcmRlcjsKICAgIGlu
dCBiaXRtYXBfdW5pdDsKICAgIGludCBiaXRtYXBfYml0X29yZGVyOwogICAgaW50IGJpdG1hcF9w
YWQ7CiAgICBpbnQgZGVwdGg7CiAgICBpbnQgYnl0ZXNfcGVyX2xpbmU7CiAgICBpbnQgYml0c19w
ZXJfcGl4ZWw7CiAgICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwogICAgdW5zaWduZWQgbG9uZyBn
cmVlbl9tYXNrOwogICAgdW5zaWduZWQgbG9uZyBibHVlX21hc2s7CiAgICBYUG9pbnRlciBvYmRh
dGE7CiAgICBzdHJ1Y3QgZnVuY3MgewoKICAgICAgICBzdHJ1Y3QgX1hJbWFnZSAqKCpjcmVhdGVf
aW1hZ2UpKAogICAgICAgICAgICAgICAgc3RydWN0IF9YRGlzcGxheSogLAogICAgICAgICAgICAg
ICAgVmlzdWFsKiAsCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgLAogICAgICAgICAgICAg
ICAgaW50ICwKICAgICAgICAgICAgICAgIGludCAsCiAgICAgICAgICAgICAgICBjaGFyKiAsCiAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgLAogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
ICwKICAgICAgICAgICAgICAgIGludCAsCiAgICAgICAgICAgICAgICBpbnQgKTsKICAgICAgICBp
bnQgKCpkZXN0cm95X2ltYWdlKSAoc3RydWN0IF9YSW1hZ2UgKik7CiAgICAgICAgdW5zaWduZWQg
bG9uZyAoKmdldF9waXhlbCkgKHN0cnVjdCBfWEltYWdlICosIGludCwgaW50KTsKICAgICAgICBp
bnQgKCpwdXRfcGl4ZWwpIChzdHJ1Y3QgX1hJbWFnZSAqLCBpbnQsIGludCwgdW5zaWduZWQgbG9u
Zyk7CiAgICAgICAgc3RydWN0IF9YSW1hZ2UgKigqc3ViX2ltYWdlKShzdHJ1Y3QgX1hJbWFnZSAq
LCBpbnQsIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogICAgICAgIGludCAoKmFk
ZF9waXhlbCkgKHN0cnVjdCBfWEltYWdlICosIGxvbmcpOwogICAgICAgIH0gZjsKfSBYSW1hZ2U7
CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgeCwgeTsKICAgIGludCB3aWR0aCwgaGVpZ2h0
OwogICAgaW50IGJvcmRlcl93aWR0aDsKICAgIFdpbmRvdyBzaWJsaW5nOwogICAgaW50IHN0YWNr
X21vZGU7Cn0gWFdpbmRvd0NoYW5nZXM7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgdW5z
aWduZWQgbG9uZyBwaXhlbDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCByZWQsIGdyZWVuLCBibHVl
OwogICAgICAgIGNoYXIgZmxhZ3M7CiAgICAgICAgY2hhciBwYWQ7Cn0gWENvbG9yOwoKCgoKCgp0
eXBlZGVmIHN0cnVjdCB7CiAgICBzaG9ydCB4MSwgeTEsIHgyLCB5MjsKfSBYU2VnbWVudDsKCnR5
cGVkZWYgc3RydWN0IHsKICAgIHNob3J0IHgsIHk7Cn0gWFBvaW50OwoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgc2hvcnQgeCwgeTsKICAgIHVuc2lnbmVkIHNob3J0IHdpZHRoLCBoZWlnaHQ7Cn0gWFJl
Y3RhbmdsZTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIHNob3J0IHgsIHk7CiAgICB1bnNpZ25lZCBz
aG9ydCB3aWR0aCwgaGVpZ2h0OwogICAgc2hvcnQgYW5nbGUxLCBhbmdsZTI7Cn0gWEFyYzsKCgoK
CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQga2V5X2NsaWNrX3BlcmNlbnQ7CiAgICAgICAg
aW50IGJlbGxfcGVyY2VudDsKICAgICAgICBpbnQgYmVsbF9waXRjaDsKICAgICAgICBpbnQgYmVs
bF9kdXJhdGlvbjsKICAgICAgICBpbnQgbGVkOwogICAgICAgIGludCBsZWRfbW9kZTsKICAgICAg
ICBpbnQga2V5OwogICAgICAgIGludCBhdXRvX3JlcGVhdF9tb2RlOwp9IFhLZXlib2FyZENvbnRy
b2w7CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQga2V5X2NsaWNrX3BlcmNlbnQ7CiAg
ICAgICAgaW50IGJlbGxfcGVyY2VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgYmVsbF9waXRjaCwg
YmVsbF9kdXJhdGlvbjsKICAgICAgICB1bnNpZ25lZCBsb25nIGxlZF9tYXNrOwogICAgICAgIGlu
dCBnbG9iYWxfYXV0b19yZXBlYXQ7CiAgICAgICAgY2hhciBhdXRvX3JlcGVhdHNbMzJdOwp9IFhL
ZXlib2FyZFN0YXRlOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgVGltZSB0aW1lOwogICAg
ICAgIHNob3J0IHgsIHk7Cn0gWFRpbWVDb29yZDsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg
IGludCBtYXhfa2V5cGVybW9kOwogICAgICAgIEtleUNvZGUgKm1vZGlmaWVybWFwOwp9IFhNb2Rp
ZmllcktleW1hcDsKdHlwZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CgoKc3RydWN0IF9Y
UHJpdmF0ZTsKc3RydWN0IF9Ycm1IYXNoQnVja2V0UmVjOwoKdHlwZWRlZiBzdHJ1Y3QKCgoKewog
ICAgICAgIFhFeHREYXRhICpleHRfZGF0YTsKICAgICAgICBzdHJ1Y3QgX1hQcml2YXRlICpwcml2
YXRlMTsKICAgICAgICBpbnQgZmQ7CiAgICAgICAgaW50IHByaXZhdGUyOwogICAgICAgIGludCBw
cm90b19tYWpvcl92ZXJzaW9uOwogICAgICAgIGludCBwcm90b19taW5vcl92ZXJzaW9uOwogICAg
ICAgIGNoYXIgKnZlbmRvcjsKICAgICAgICBYSUQgcHJpdmF0ZTM7CiAgICAgICAgWElEIHByaXZh
dGU0OwogICAgICAgIFhJRCBwcml2YXRlNTsKICAgICAgICBpbnQgcHJpdmF0ZTY7CiAgICAgICAg
WElEICgqcmVzb3VyY2VfYWxsb2MpKAoKICAgICAgICAgICAgICAgIHN0cnVjdCBfWERpc3BsYXkq
CgogICAgICAgICk7CiAgICAgICAgaW50IGJ5dGVfb3JkZXI7CiAgICAgICAgaW50IGJpdG1hcF91
bml0OwogICAgICAgIGludCBiaXRtYXBfcGFkOwogICAgICAgIGludCBiaXRtYXBfYml0X29yZGVy
OwogICAgICAgIGludCBuZm9ybWF0czsKICAgICAgICBTY3JlZW5Gb3JtYXQgKnBpeG1hcF9mb3Jt
YXQ7CiAgICAgICAgaW50IHByaXZhdGU4OwogICAgICAgIGludCByZWxlYXNlOwogICAgICAgIHN0
cnVjdCBfWFByaXZhdGUgKnByaXZhdGU5LCAqcHJpdmF0ZTEwOwogICAgICAgIGludCBxbGVuOwog
ICAgICAgIHVuc2lnbmVkIGxvbmcgbGFzdF9yZXF1ZXN0X3JlYWQ7CiAgICAgICAgdW5zaWduZWQg
bG9uZyByZXF1ZXN0OwogICAgICAgIFhQb2ludGVyIHByaXZhdGUxMTsKICAgICAgICBYUG9pbnRl
ciBwcml2YXRlMTI7CiAgICAgICAgWFBvaW50ZXIgcHJpdmF0ZTEzOwogICAgICAgIFhQb2ludGVy
IHByaXZhdGUxNDsKICAgICAgICB1bnNpZ25lZCBtYXhfcmVxdWVzdF9zaXplOwogICAgICAgIHN0
cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyAqZGI7CiAgICAgICAgaW50ICgqcHJpdmF0ZTE1KSgKCiAg
ICAgICAgICAgICAgICBzdHJ1Y3QgX1hEaXNwbGF5KgoKICAgICAgICAgICAgICAgICk7CiAgICAg
ICAgY2hhciAqZGlzcGxheV9uYW1lOwogICAgICAgIGludCBkZWZhdWx0X3NjcmVlbjsKICAgICAg
ICBpbnQgbnNjcmVlbnM7CiAgICAgICAgU2NyZWVuICpzY3JlZW5zOwogICAgICAgIHVuc2lnbmVk
IGxvbmcgbW90aW9uX2J1ZmZlcjsKICAgICAgICB1bnNpZ25lZCBsb25nIHByaXZhdGUxNjsKICAg
ICAgICBpbnQgbWluX2tleWNvZGU7CiAgICAgICAgaW50IG1heF9rZXljb2RlOwogICAgICAgIFhQ
b2ludGVyIHByaXZhdGUxNzsKICAgICAgICBYUG9pbnRlciBwcml2YXRlMTg7CiAgICAgICAgaW50
IHByaXZhdGUxOTsKICAgICAgICBjaGFyICp4ZGVmYXVsdHM7Cgp9CgoKCipfWFByaXZEaXNwbGF5
Owp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9u
ZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxh
eTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIFdpbmRvdyByb290OwogICAgICAgIFdp
bmRvdyBzdWJ3aW5kb3c7CiAgICAgICAgVGltZSB0aW1lOwogICAgICAgIGludCB4LCB5OwogICAg
ICAgIGludCB4X3Jvb3QsIHlfcm9vdDsKICAgICAgICB1bnNpZ25lZCBpbnQgc3RhdGU7CiAgICAg
ICAgdW5zaWduZWQgaW50IGtleWNvZGU7CiAgICAgICAgaW50IHNhbWVfc2NyZWVuOwp9IFhLZXlF
dmVudDsKdHlwZWRlZiBYS2V5RXZlbnQgWEtleVByZXNzZWRFdmVudDsKdHlwZWRlZiBYS2V5RXZl
bnQgWEtleVJlbGVhc2VkRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7
CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAg
ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIFdp
bmRvdyByb290OwogICAgICAgIFdpbmRvdyBzdWJ3aW5kb3c7CiAgICAgICAgVGltZSB0aW1lOwog
ICAgICAgIGludCB4LCB5OwogICAgICAgIGludCB4X3Jvb3QsIHlfcm9vdDsKICAgICAgICB1bnNp
Z25lZCBpbnQgc3RhdGU7CiAgICAgICAgdW5zaWduZWQgaW50IGJ1dHRvbjsKICAgICAgICBpbnQg
c2FtZV9zY3JlZW47Cn0gWEJ1dHRvbkV2ZW50Owp0eXBlZGVmIFhCdXR0b25FdmVudCBYQnV0dG9u
UHJlc3NlZEV2ZW50Owp0eXBlZGVmIFhCdXR0b25FdmVudCBYQnV0dG9uUmVsZWFzZWRFdmVudDsK
CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25n
IHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5
OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgV2luZG93IHJvb3Q7CiAgICAgICAgV2lu
ZG93IHN1YndpbmRvdzsKICAgICAgICBUaW1lIHRpbWU7CiAgICAgICAgaW50IHgsIHk7CiAgICAg
ICAgaW50IHhfcm9vdCwgeV9yb290OwogICAgICAgIHVuc2lnbmVkIGludCBzdGF0ZTsKICAgICAg
ICBjaGFyIGlzX2hpbnQ7CiAgICAgICAgaW50IHNhbWVfc2NyZWVuOwp9IFhNb3Rpb25FdmVudDsK
dHlwZWRlZiBYTW90aW9uRXZlbnQgWFBvaW50ZXJNb3ZlZEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAg
IGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93
IHdpbmRvdzsKICAgICAgICBXaW5kb3cgcm9vdDsKICAgICAgICBXaW5kb3cgc3Vid2luZG93Owog
ICAgICAgIFRpbWUgdGltZTsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBpbnQgeF9yb290LCB5
X3Jvb3Q7CiAgICAgICAgaW50IG1vZGU7CiAgICAgICAgaW50IGRldGFpbDsKCgoKCiAgICAgICAg
aW50IHNhbWVfc2NyZWVuOwogICAgICAgIGludCBmb2N1czsKICAgICAgICB1bnNpZ25lZCBpbnQg
c3RhdGU7Cn0gWENyb3NzaW5nRXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5nRXZlbnQgWEVudGVyV2lu
ZG93RXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5nRXZlbnQgWExlYXZlV2luZG93RXZlbnQ7Cgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJp
YWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAg
ICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBtb2RlOwogICAgICAgIGludCBkZXRhaWw7
CgoKCgoKfSBYRm9jdXNDaGFuZ2VFdmVudDsKdHlwZWRlZiBYRm9jdXNDaGFuZ2VFdmVudCBYRm9j
dXNJbkV2ZW50Owp0eXBlZGVmIFhGb2N1c0NoYW5nZUV2ZW50IFhGb2N1c091dEV2ZW50OwoKCnR5
cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNl
cmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5Owog
ICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgY2hhciBrZXlfdmVjdG9yWzMyXTsKfSBYS2V5
bWFwRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5z
aWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxh
eSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCB4LCB5OwogICAg
ICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgICAgIGludCBjb3VudDsKfSBYRXhwb3NlRXZlbnQ7
Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9u
ZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxh
eTsKICAgICAgICBEcmF3YWJsZSBkcmF3YWJsZTsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBp
bnQgd2lkdGgsIGhlaWdodDsKICAgICAgICBpbnQgY291bnQ7CiAgICAgICAgaW50IG1ham9yX2Nv
ZGU7CiAgICAgICAgaW50IG1pbm9yX2NvZGU7Cn0gWEdyYXBoaWNzRXhwb3NlRXZlbnQ7Cgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJp
YWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAg
ICAgICBEcmF3YWJsZSBkcmF3YWJsZTsKICAgICAgICBpbnQgbWFqb3JfY29kZTsKICAgICAgICBp
bnQgbWlub3JfY29kZTsKfSBYTm9FeHBvc2VFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAg
ICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2Vu
ZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7
CiAgICAgICAgaW50IHN0YXRlOwp9IFhWaXNpYmlsaXR5RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7
CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAg
aW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cg
cGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAg
aW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93aWR0aDsKICAgICAgICBpbnQg
b3ZlcnJpZGVfcmVkaXJlY3Q7Cn0gWENyZWF0ZVdpbmRvd0V2ZW50OwoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAg
IGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93
IGV2ZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7Cn0gWERlc3Ryb3lXaW5kb3dFdmVudDsKCnR5
cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNl
cmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5Owog
ICAgICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBm
cm9tX2NvbmZpZ3VyZTsKfSBYVW5tYXBFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBp
bnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9l
dmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAg
ICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBvdmVycmlkZV9yZWRpcmVjdDsKfSBYTWFw
RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWdu
ZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAq
ZGlzcGxheTsKICAgICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7Cn0g
WE1hcFJlcXVlc3RFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAg
ICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAg
ICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cg
d2luZG93OwogICAgICAgIFdpbmRvdyBwYXJlbnQ7CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAg
aW50IG92ZXJyaWRlX3JlZGlyZWN0Owp9IFhSZXBhcmVudEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAg
IGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93
IGV2ZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAg
aW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93aWR0aDsKICAgICAgICBXaW5k
b3cgYWJvdmU7CiAgICAgICAgaW50IG92ZXJyaWRlX3JlZGlyZWN0Owp9IFhDb25maWd1cmVFdmVu
dDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBs
b25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNw
bGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAg
IGludCB4LCB5Owp9IFhHcmF2aXR5RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50
IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZl
bnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAg
ICAgIGludCB3aWR0aCwgaGVpZ2h0Owp9IFhSZXNpemVSZXF1ZXN0RXZlbnQ7Cgp0eXBlZGVmIHN0
cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAg
ICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBX
aW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHgsIHk7CiAg
ICAgICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93aWR0aDsKICAgICAg
ICBXaW5kb3cgYWJvdmU7CiAgICAgICAgaW50IGRldGFpbDsKICAgICAgICB1bnNpZ25lZCBsb25n
IHZhbHVlX21hc2s7Cn0gWENvbmZpZ3VyZVJlcXVlc3RFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsK
ICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBp
bnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBl
dmVudDsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBwbGFjZTsKfSBYQ2lyY3Vs
YXRlRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5z
aWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxh
eSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7
CiAgICAgICAgaW50IHBsYWNlOwp9IFhDaXJjdWxhdGVSZXF1ZXN0RXZlbnQ7Cgp0eXBlZGVmIHN0
cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAg
ICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBX
aW5kb3cgd2luZG93OwogICAgICAgIEF0b20gYXRvbTsKICAgICAgICBUaW1lIHRpbWU7CiAgICAg
ICAgaW50IHN0YXRlOwp9IFhQcm9wZXJ0eUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg
IGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAgIGludCBzZW5k
X2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93IHdpbmRvdzsK
ICAgICAgICBBdG9tIHNlbGVjdGlvbjsKICAgICAgICBUaW1lIHRpbWU7Cn0gWFNlbGVjdGlvbkNs
ZWFyRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5z
aWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxh
eSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgb3duZXI7CiAgICAgICAgV2luZG93IHJlcXVlc3Rv
cjsKICAgICAgICBBdG9tIHNlbGVjdGlvbjsKICAgICAgICBBdG9tIHRhcmdldDsKICAgICAgICBB
dG9tIHByb3BlcnR5OwogICAgICAgIFRpbWUgdGltZTsKfSBYU2VsZWN0aW9uUmVxdWVzdEV2ZW50
OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxv
bmcgc2VyaWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3Bs
YXk7CiAgICAgICAgV2luZG93IHJlcXVlc3RvcjsKICAgICAgICBBdG9tIHNlbGVjdGlvbjsKICAg
ICAgICBBdG9tIHRhcmdldDsKICAgICAgICBBdG9tIHByb3BlcnR5OwogICAgICAgIFRpbWUgdGlt
ZTsKfSBYU2VsZWN0aW9uRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7
CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAg
ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIENv
bG9ybWFwIGNvbG9ybWFwOwoKCgogICAgICAgIGludCBuZXc7CgogICAgICAgIGludCBzdGF0ZTsK
fSBYQ29sb3JtYXBFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAg
ICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAg
ICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgQXRvbSBt
ZXNzYWdlX3R5cGU7CiAgICAgICAgaW50IGZvcm1hdDsKICAgICAgICB1bmlvbiB7CiAgICAgICAg
ICAgICAgICBjaGFyIGJbMjBdOwogICAgICAgICAgICAgICAgc2hvcnQgc1sxMF07CiAgICAgICAg
ICAgICAgICBsb25nIGxbNV07CiAgICAgICAgICAgICAgICB9IGRhdGE7Cn0gWENsaWVudE1lc3Nh
Z2VFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNp
Z25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5
ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHJlcXVlc3Q7Cgog
ICAgICAgIGludCBmaXJzdF9rZXljb2RlOwogICAgICAgIGludCBjb3VudDsKfSBYTWFwcGluZ0V2
ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIERpc3BsYXkg
KmRpc3BsYXk7CiAgICAgICAgWElEIHJlc291cmNlaWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBz
ZXJpYWw7CiAgICAgICAgdW5zaWduZWQgY2hhciBlcnJvcl9jb2RlOwogICAgICAgIHVuc2lnbmVk
IGNoYXIgcmVxdWVzdF9jb2RlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbWlub3JfY29kZTsKfSBY
RXJyb3JFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1
bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNw
bGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7Cn0gWEFueUV2ZW50OwoKCgoKCnR5
cGVkZWYgdW5pb24gX1hFdmVudCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgWEFueUV2ZW50
IHhhbnk7CiAgICAgICAgWEtleUV2ZW50IHhrZXk7CiAgICAgICAgWEJ1dHRvbkV2ZW50IHhidXR0
b247CiAgICAgICAgWE1vdGlvbkV2ZW50IHhtb3Rpb247CiAgICAgICAgWENyb3NzaW5nRXZlbnQg
eGNyb3NzaW5nOwogICAgICAgIFhGb2N1c0NoYW5nZUV2ZW50IHhmb2N1czsKICAgICAgICBYRXhw
b3NlRXZlbnQgeGV4cG9zZTsKICAgICAgICBYR3JhcGhpY3NFeHBvc2VFdmVudCB4Z3JhcGhpY3Nl
eHBvc2U7CiAgICAgICAgWE5vRXhwb3NlRXZlbnQgeG5vZXhwb3NlOwogICAgICAgIFhWaXNpYmls
aXR5RXZlbnQgeHZpc2liaWxpdHk7CiAgICAgICAgWENyZWF0ZVdpbmRvd0V2ZW50IHhjcmVhdGV3
aW5kb3c7CiAgICAgICAgWERlc3Ryb3lXaW5kb3dFdmVudCB4ZGVzdHJveXdpbmRvdzsKICAgICAg
ICBYVW5tYXBFdmVudCB4dW5tYXA7CiAgICAgICAgWE1hcEV2ZW50IHhtYXA7CiAgICAgICAgWE1h
cFJlcXVlc3RFdmVudCB4bWFwcmVxdWVzdDsKICAgICAgICBYUmVwYXJlbnRFdmVudCB4cmVwYXJl
bnQ7CiAgICAgICAgWENvbmZpZ3VyZUV2ZW50IHhjb25maWd1cmU7CiAgICAgICAgWEdyYXZpdHlF
dmVudCB4Z3Jhdml0eTsKICAgICAgICBYUmVzaXplUmVxdWVzdEV2ZW50IHhyZXNpemVyZXF1ZXN0
OwogICAgICAgIFhDb25maWd1cmVSZXF1ZXN0RXZlbnQgeGNvbmZpZ3VyZXJlcXVlc3Q7CiAgICAg
ICAgWENpcmN1bGF0ZUV2ZW50IHhjaXJjdWxhdGU7CiAgICAgICAgWENpcmN1bGF0ZVJlcXVlc3RF
dmVudCB4Y2lyY3VsYXRlcmVxdWVzdDsKICAgICAgICBYUHJvcGVydHlFdmVudCB4cHJvcGVydHk7
CiAgICAgICAgWFNlbGVjdGlvbkNsZWFyRXZlbnQgeHNlbGVjdGlvbmNsZWFyOwogICAgICAgIFhT
ZWxlY3Rpb25SZXF1ZXN0RXZlbnQgeHNlbGVjdGlvbnJlcXVlc3Q7CiAgICAgICAgWFNlbGVjdGlv
bkV2ZW50IHhzZWxlY3Rpb247CiAgICAgICAgWENvbG9ybWFwRXZlbnQgeGNvbG9ybWFwOwogICAg
ICAgIFhDbGllbnRNZXNzYWdlRXZlbnQgeGNsaWVudDsKICAgICAgICBYTWFwcGluZ0V2ZW50IHht
YXBwaW5nOwogICAgICAgIFhFcnJvckV2ZW50IHhlcnJvcjsKICAgICAgICBYS2V5bWFwRXZlbnQg
eGtleW1hcDsKICAgICAgICBsb25nIHBhZFsyNF07Cn0gWEV2ZW50OwoKCgoKCgoKdHlwZWRlZiBz
dHJ1Y3QgewogICAgc2hvcnQgbGJlYXJpbmc7CiAgICBzaG9ydCByYmVhcmluZzsKICAgIHNob3J0
IHdpZHRoOwogICAgc2hvcnQgYXNjZW50OwogICAgc2hvcnQgZGVzY2VudDsKICAgIHVuc2lnbmVk
IHNob3J0IGF0dHJpYnV0ZXM7Cn0gWENoYXJTdHJ1Y3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3Qgewog
ICAgQXRvbSBuYW1lOwogICAgdW5zaWduZWQgbG9uZyBjYXJkMzI7Cn0gWEZvbnRQcm9wOwoKdHlw
ZWRlZiBzdHJ1Y3QgewogICAgWEV4dERhdGEgKmV4dF9kYXRhOwogICAgRm9udCBmaWQ7CiAgICB1
bnNpZ25lZCBkaXJlY3Rpb247CiAgICB1bnNpZ25lZCBtaW5fY2hhcl9vcl9ieXRlMjsKICAgIHVu
c2lnbmVkIG1heF9jaGFyX29yX2J5dGUyOwogICAgdW5zaWduZWQgbWluX2J5dGUxOwogICAgdW5z
aWduZWQgbWF4X2J5dGUxOwogICAgaW50IGFsbF9jaGFyc19leGlzdDsKICAgIHVuc2lnbmVkIGRl
ZmF1bHRfY2hhcjsKICAgIGludCBuX3Byb3BlcnRpZXM7CiAgICBYRm9udFByb3AgKnByb3BlcnRp
ZXM7CiAgICBYQ2hhclN0cnVjdCBtaW5fYm91bmRzOwogICAgWENoYXJTdHJ1Y3QgbWF4X2JvdW5k
czsKICAgIFhDaGFyU3RydWN0ICpwZXJfY2hhcjsKICAgIGludCBhc2NlbnQ7CiAgICBpbnQgZGVz
Y2VudDsKfSBYRm9udFN0cnVjdDsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIGNoYXIgKmNoYXJz
OwogICAgaW50IG5jaGFyczsKICAgIGludCBkZWx0YTsKICAgIEZvbnQgZm9udDsKfSBYVGV4dEl0
ZW07Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25lZCBjaGFyIGJ5dGUxOwogICAgdW5zaWdu
ZWQgY2hhciBieXRlMjsKfSBYQ2hhcjJiOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWENoYXIyYiAq
Y2hhcnM7CiAgICBpbnQgbmNoYXJzOwogICAgaW50IGRlbHRhOwogICAgRm9udCBmb250Owp9IFhU
ZXh0SXRlbTE2OwoKCnR5cGVkZWYgdW5pb24geyBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgICAg
ICAgICAgR0MgZ2M7CiAgICAgICAgICAgICAgICBWaXN1YWwgKnZpc3VhbDsKICAgICAgICAgICAg
ICAgIFNjcmVlbiAqc2NyZWVuOwogICAgICAgICAgICAgICAgU2NyZWVuRm9ybWF0ICpwaXhtYXBf
Zm9ybWF0OwogICAgICAgICAgICAgICAgWEZvbnRTdHJ1Y3QgKmZvbnQ7IH0gWEVEYXRhT2JqZWN0
OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWFJlY3RhbmdsZSBtYXhfaW5rX2V4dGVudDsKICAgIFhS
ZWN0YW5nbGUgbWF4X2xvZ2ljYWxfZXh0ZW50Owp9IFhGb250U2V0RXh0ZW50czsKCgoKCgp0eXBl
ZGVmIHN0cnVjdCBfWE9NICpYT007CnR5cGVkZWYgc3RydWN0IF9YT0MgKlhPQywgKlhGb250U2V0
OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqY2hhcnM7CiAgICBpbnQgbmNoYXJzOwogICAg
aW50IGRlbHRhOwogICAgWEZvbnRTZXQgZm9udF9zZXQ7Cn0gWG1iVGV4dEl0ZW07Cgp0eXBlZGVm
IHN0cnVjdCB7CiAgICB3Y2hhcl90ICpjaGFyczsKICAgIGludCBuY2hhcnM7CiAgICBpbnQgZGVs
dGE7CiAgICBYRm9udFNldCBmb250X3NldDsKfSBYd2NUZXh0SXRlbTsKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgaW50IGNoYXJzZXRfY291bnQ7CiAgICBjaGFyICoqY2hhcnNldF9saXN0Owp9IFhPTUNo
YXJTZXRMaXN0OwoKdHlwZWRlZiBlbnVtIHsKICAgIFhPTU9yaWVudGF0aW9uX0xUUl9UVEIsCiAg
ICBYT01PcmllbnRhdGlvbl9SVExfVFRCLAogICAgWE9NT3JpZW50YXRpb25fVFRCX0xUUiwKICAg
IFhPTU9yaWVudGF0aW9uX1RUQl9SVEwsCiAgICBYT01PcmllbnRhdGlvbl9Db250ZXh0Cn0gWE9y
aWVudGF0aW9uOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IG51bV9vcmllbnRhdGlvbjsKICAg
IFhPcmllbnRhdGlvbiAqb3JpZW50YXRpb247Cn0gWE9NT3JpZW50YXRpb247Cgp0eXBlZGVmIHN0
cnVjdCB7CiAgICBpbnQgbnVtX2ZvbnQ7CiAgICBYRm9udFN0cnVjdCAqKmZvbnRfc3RydWN0X2xp
c3Q7CiAgICBjaGFyICoqZm9udF9uYW1lX2xpc3Q7Cn0gWE9NRm9udEluZm87Cgp0eXBlZGVmIHN0
cnVjdCBfWElNICpYSU07CnR5cGVkZWYgc3RydWN0IF9YSUMgKlhJQzsKCnR5cGVkZWYgdm9pZCAo
KlhJTVByb2MpKAoKICAgIFhJTSwKICAgIFhQb2ludGVyLAogICAgWFBvaW50ZXIKCik7Cgp0eXBl
ZGVmIGludCAoKlhJQ1Byb2MpKAoKICAgIFhJQywKICAgIFhQb2ludGVyLAogICAgWFBvaW50ZXIK
Cik7Cgp0eXBlZGVmIHZvaWQgKCpYSURQcm9jKSgKCiAgICBEaXNwbGF5KiwKICAgIFhQb2ludGVy
LAogICAgWFBvaW50ZXIKCik7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgWElNU3R5bGU7Cgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25lZCBzaG9ydCBjb3VudF9zdHlsZXM7CiAgICBYSU1TdHls
ZSAqc3VwcG9ydGVkX3N0eWxlczsKfSBYSU1TdHlsZXM7CnR5cGVkZWYgdm9pZCAqWFZhTmVzdGVk
TGlzdDsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIFhQb2ludGVyIGNsaWVudF9kYXRhOwogICAg
WElNUHJvYyBjYWxsYmFjazsKfSBYSU1DYWxsYmFjazsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFhQ
b2ludGVyIGNsaWVudF9kYXRhOwogICAgWElDUHJvYyBjYWxsYmFjazsKfSBYSUNDYWxsYmFjazsK
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1GZWVkYmFjazsKdHlwZWRlZiBzdHJ1Y3QgX1hJTVRl
eHQgewogICAgdW5zaWduZWQgc2hvcnQgbGVuZ3RoOwogICAgWElNRmVlZGJhY2sgKmZlZWRiYWNr
OwogICAgaW50IGVuY29kaW5nX2lzX3djaGFyOwogICAgdW5pb24gewogICAgICAgIGNoYXIgKm11
bHRpX2J5dGU7CiAgICAgICAgd2NoYXJfdCAqd2lkZV9jaGFyOwogICAgfSBzdHJpbmc7Cn0gWElN
VGV4dDsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1QcmVlZGl0U3RhdGU7CgoKCgoKdHlwZWRl
ZiBzdHJ1Y3QgX1hJTVByZWVkaXRTdGF0ZU5vdGlmeUNhbGxiYWNrU3RydWN0IHsKICAgIFhJTVBy
ZWVkaXRTdGF0ZSBzdGF0ZTsKfSBYSU1QcmVlZGl0U3RhdGVOb3RpZnlDYWxsYmFja1N0cnVjdDsK
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1SZXNldFN0YXRlOwoKCgoKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIFhJTVN0cmluZ0NvbnZlcnNpb25GZWVkYmFjazsKdHlwZWRlZiBzdHJ1Y3QgX1hJTVN0
cmluZ0NvbnZlcnNpb25UZXh0IHsKICAgIHVuc2lnbmVkIHNob3J0IGxlbmd0aDsKICAgIFhJTVN0
cmluZ0NvbnZlcnNpb25GZWVkYmFjayAqZmVlZGJhY2s7CiAgICBpbnQgZW5jb2RpbmdfaXNfd2No
YXI7CiAgICB1bmlvbiB7CiAgICAgICAgY2hhciAqbWJzOwogICAgICAgIHdjaGFyX3QgKndjczsK
ICAgIH0gc3RyaW5nOwp9IFhJTVN0cmluZ0NvbnZlcnNpb25UZXh0OwoKdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCBYSU1TdHJpbmdDb252ZXJzaW9uUG9zaXRpb247Cgp0eXBlZGVmIHVuc2lnbmVkIHNo
b3J0IFhJTVN0cmluZ0NvbnZlcnNpb25UeXBlOwoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IFhJTVN0cmluZ0NvbnZlcnNpb25PcGVyYXRpb247CgoKCgp0eXBlZGVmIGVudW0gewogICAgWElN
Rm9yd2FyZENoYXIsIFhJTUJhY2t3YXJkQ2hhciwKICAgIFhJTUZvcndhcmRXb3JkLCBYSU1CYWNr
d2FyZFdvcmQsCiAgICBYSU1DYXJldFVwLCBYSU1DYXJldERvd24sCiAgICBYSU1OZXh0TGluZSwg
WElNUHJldmlvdXNMaW5lLAogICAgWElNTGluZVN0YXJ0LCBYSU1MaW5lRW5kLAogICAgWElNQWJz
b2x1dGVQb3NpdGlvbiwKICAgIFhJTURvbnRDaGFuZ2UKfSBYSU1DYXJldERpcmVjdGlvbjsKCnR5
cGVkZWYgc3RydWN0IF9YSU1TdHJpbmdDb252ZXJzaW9uQ2FsbGJhY2tTdHJ1Y3QgewogICAgWElN
U3RyaW5nQ29udmVyc2lvblBvc2l0aW9uIHBvc2l0aW9uOwogICAgWElNQ2FyZXREaXJlY3Rpb24g
ZGlyZWN0aW9uOwogICAgWElNU3RyaW5nQ29udmVyc2lvbk9wZXJhdGlvbiBvcGVyYXRpb247CiAg
ICB1bnNpZ25lZCBzaG9ydCBmYWN0b3I7CiAgICBYSU1TdHJpbmdDb252ZXJzaW9uVGV4dCAqdGV4
dDsKfSBYSU1TdHJpbmdDb252ZXJzaW9uQ2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdCBf
WElNUHJlZWRpdERyYXdDYWxsYmFja1N0cnVjdCB7CiAgICBpbnQgY2FyZXQ7CiAgICBpbnQgY2hn
X2ZpcnN0OwogICAgaW50IGNoZ19sZW5ndGg7CiAgICBYSU1UZXh0ICp0ZXh0Owp9IFhJTVByZWVk
aXREcmF3Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIGVudW0gewogICAgWElNSXNJbnZpc2libGUs
CiAgICBYSU1Jc1ByaW1hcnksCiAgICBYSU1Jc1NlY29uZGFyeQp9IFhJTUNhcmV0U3R5bGU7Cgp0
eXBlZGVmIHN0cnVjdCBfWElNUHJlZWRpdENhcmV0Q2FsbGJhY2tTdHJ1Y3QgewogICAgaW50IHBv
c2l0aW9uOwogICAgWElNQ2FyZXREaXJlY3Rpb24gZGlyZWN0aW9uOwogICAgWElNQ2FyZXRTdHls
ZSBzdHlsZTsKfSBYSU1QcmVlZGl0Q2FyZXRDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgZW51bSB7
CiAgICBYSU1UZXh0VHlwZSwKICAgIFhJTUJpdG1hcFR5cGUKfSBYSU1TdGF0dXNEYXRhVHlwZTsK
CnR5cGVkZWYgc3RydWN0IF9YSU1TdGF0dXNEcmF3Q2FsbGJhY2tTdHJ1Y3QgewogICAgWElNU3Rh
dHVzRGF0YVR5cGUgdHlwZTsKICAgIHVuaW9uIHsKICAgICAgICBYSU1UZXh0ICp0ZXh0OwogICAg
ICAgIFBpeG1hcCBiaXRtYXA7CiAgICB9IGRhdGE7Cn0gWElNU3RhdHVzRHJhd0NhbGxiYWNrU3Ry
dWN0OwoKdHlwZWRlZiBzdHJ1Y3QgX1hJTUhvdEtleVRyaWdnZXIgewogICAgS2V5U3ltIGtleXN5
bTsKICAgIGludCBtb2RpZmllcjsKICAgIGludCBtb2RpZmllcl9tYXNrOwp9IFhJTUhvdEtleVRy
aWdnZXI7Cgp0eXBlZGVmIHN0cnVjdCBfWElNSG90S2V5VHJpZ2dlcnMgewogICAgaW50IG51bV9o
b3Rfa2V5OwogICAgWElNSG90S2V5VHJpZ2dlciAqa2V5Owp9IFhJTUhvdEtleVRyaWdnZXJzOwoK
dHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJTUhvdEtleVN0YXRlOwoKCgoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgdW5zaWduZWQgc2hvcnQgY291bnRfdmFsdWVzOwogICAgY2hhciAqKnN1cHBvcnRlZF92
YWx1ZXM7Cn0gWElNVmFsdWVzTGlzdDsKCgoKCgoKCmV4dGVybiBpbnQgX1hkZWJ1ZzsKCmV4dGVy
biBYRm9udFN0cnVjdCAqWExvYWRRdWVyeUZvbnQoCgogICAgRGlzcGxheSogLAogICAgY29uc3Qg
Y2hhcioKCik7CgpleHRlcm4gWEZvbnRTdHJ1Y3QgKlhRdWVyeUZvbnQoCgogICAgRGlzcGxheSog
LAogICAgWElECgopOwoKCmV4dGVybiBYVGltZUNvb3JkICpYR2V0TW90aW9uRXZlbnRzKAoKICAg
IERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBUaW1lICwKICAgIFRpbWUgLAogICAgaW50KgoK
KTsKCmV4dGVybiBYTW9kaWZpZXJLZXltYXAgKlhEZWxldGVNb2RpZmllcm1hcEVudHJ5KAoKICAg
IFhNb2RpZmllcktleW1hcCogLAoKICAgIHVuc2lnbmVkIGludCAsCgoKCiAgICBpbnQKCik7Cgpl
eHRlcm4gWE1vZGlmaWVyS2V5bWFwICpYR2V0TW9kaWZpZXJNYXBwaW5nKAoKICAgIERpc3BsYXkq
CgopOwoKZXh0ZXJuIFhNb2RpZmllcktleW1hcCAqWEluc2VydE1vZGlmaWVybWFwRW50cnkoCgog
ICAgWE1vZGlmaWVyS2V5bWFwKiAsCgogICAgdW5zaWduZWQgaW50ICwKCgoKICAgIGludAoKKTsK
CmV4dGVybiBYTW9kaWZpZXJLZXltYXAgKlhOZXdNb2RpZmllcm1hcCgKCiAgICBpbnQKCik7Cgpl
eHRlcm4gWEltYWdlICpYQ3JlYXRlSW1hZ2UoCgogICAgRGlzcGxheSogLAogICAgVmlzdWFsKiAs
CiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjaGFyKiAsCiAgICB1
bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQKCik7CmV4
dGVybiBpbnQgWEluaXRJbWFnZSgKCiAgICBYSW1hZ2UqCgopOwpleHRlcm4gWEltYWdlICpYR2V0
SW1hZ2UoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgaW50ICwKICAgIGludCAs
CiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGxvbmcg
LAogICAgaW50CgopOwpleHRlcm4gWEltYWdlICpYR2V0U3ViSW1hZ2UoCgogICAgRGlzcGxheSog
LAogICAgRHJhd2FibGUgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAog
ICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgaW50ICwKICAgIFhJbWFn
ZSogLAogICAgaW50ICwKICAgIGludAoKKTsKCgoKCmV4dGVybiBEaXNwbGF5ICpYT3BlbkRpc3Bs
YXkoCgogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gdm9pZCBYcm1Jbml0aWFsaXplKAoKICAg
IHZvaWQKCik7CgpleHRlcm4gY2hhciAqWEZldGNoQnl0ZXMoCgogICAgRGlzcGxheSogLAogICAg
aW50KgoKKTsKZXh0ZXJuIGNoYXIgKlhGZXRjaEJ1ZmZlcigKCiAgICBEaXNwbGF5KiAsCiAgICBp
bnQqICwKICAgIGludAoKKTsKZXh0ZXJuIGNoYXIgKlhHZXRBdG9tTmFtZSgKCiAgICBEaXNwbGF5
KiAsCiAgICBBdG9tCgopOwpleHRlcm4gaW50IFhHZXRBdG9tTmFtZXMoCgogICAgRGlzcGxheSog
LAogICAgQXRvbSogLAogICAgaW50ICwKICAgIGNoYXIqKgoKKTsKZXh0ZXJuIGNoYXIgKlhHZXRE
ZWZhdWx0KAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIq
CgopOwpleHRlcm4gY2hhciAqWERpc3BsYXlOYW1lKAoKICAgIGNvbnN0IGNoYXIqCgopOwpleHRl
cm4gY2hhciAqWEtleXN5bVRvU3RyaW5nKAoKICAgIEtleVN5bQoKKTsKCmV4dGVybiBpbnQgKCpY
U3luY2hyb25pemUoCgogICAgRGlzcGxheSogLAogICAgaW50CgopKSgKCiAgICBEaXNwbGF5KgoK
KTsKZXh0ZXJuIGludCAoKlhTZXRBZnRlckZ1bmN0aW9uKAoKICAgIERpc3BsYXkqICwKICAgIGlu
dCAoKikgKAoKICAgICAgICAgICAgIERpc3BsYXkqCgogICAgICAgICAgICApCgopKSgKCiAgICBE
aXNwbGF5KgoKKTsKZXh0ZXJuIEF0b20gWEludGVybkF0b20oCgogICAgRGlzcGxheSogLAogICAg
Y29uc3QgY2hhciogLAogICAgaW50CgopOwpleHRlcm4gaW50IFhJbnRlcm5BdG9tcygKCiAgICBE
aXNwbGF5KiAsCiAgICBjaGFyKiogLAogICAgaW50ICwKICAgIGludCAsCiAgICBBdG9tKgoKKTsK
ZXh0ZXJuIENvbG9ybWFwIFhDb3B5Q29sb3JtYXBBbmRGcmVlKAoKICAgIERpc3BsYXkqICwKICAg
IENvbG9ybWFwCgopOwpleHRlcm4gQ29sb3JtYXAgWENyZWF0ZUNvbG9ybWFwKAoKICAgIERpc3Bs
YXkqICwKICAgIFdpbmRvdyAsCiAgICBWaXN1YWwqICwKICAgIGludAoKKTsKZXh0ZXJuIEN1cnNv
ciBYQ3JlYXRlUGl4bWFwQ3Vyc29yKAoKICAgIERpc3BsYXkqICwKICAgIFBpeG1hcCAsCiAgICBQ
aXhtYXAgLAogICAgWENvbG9yKiAsCiAgICBYQ29sb3IqICwKICAgIHVuc2lnbmVkIGludCAsCiAg
ICB1bnNpZ25lZCBpbnQKCik7CmV4dGVybiBDdXJzb3IgWENyZWF0ZUdseXBoQ3Vyc29yKAoKICAg
IERpc3BsYXkqICwKICAgIEZvbnQgLAogICAgRm9udCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAg
dW5zaWduZWQgaW50ICwKICAgIFhDb2xvciBjb25zdCAqICwKICAgIFhDb2xvciBjb25zdCAqCgop
OwpleHRlcm4gQ3Vyc29yIFhDcmVhdGVGb250Q3Vyc29yKAoKICAgIERpc3BsYXkqICwKICAgIHVu
c2lnbmVkIGludAoKKTsKZXh0ZXJuIEZvbnQgWExvYWRGb250KAoKICAgIERpc3BsYXkqICwKICAg
IGNvbnN0IGNoYXIqCgopOwpleHRlcm4gR0MgWENyZWF0ZUdDKAoKICAgIERpc3BsYXkqICwKICAg
IERyYXdhYmxlICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgWEdDVmFsdWVzKgoKKTsKZXh0ZXJu
IEdDb250ZXh0IFhHQ29udGV4dEZyb21HQygKCiAgICBHQwoKKTsKZXh0ZXJuIHZvaWQgWEZsdXNo
R0MoCgogICAgRGlzcGxheSogLAogICAgR0MKCik7CmV4dGVybiBQaXhtYXAgWENyZWF0ZVBpeG1h
cCgKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAg
dW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKZXh0ZXJuIFBpeG1hcCBYQ3JlYXRl
Qml0bWFwRnJvbURhdGEoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgY29uc3Qg
Y2hhciogLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKZXh0ZXJuIFBp
eG1hcCBYQ3JlYXRlUGl4bWFwRnJvbUJpdG1hcERhdGEoCgogICAgRGlzcGxheSogLAogICAgRHJh
d2FibGUgLAogICAgY2hhciogLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAs
CiAgICB1bnNpZ25lZCBsb25nICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgdW5zaWduZWQgaW50
CgopOwpleHRlcm4gV2luZG93IFhDcmVhdGVTaW1wbGVXaW5kb3coCgogICAgRGlzcGxheSogLAog
ICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVu
c2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICB1
bnNpZ25lZCBsb25nCgopOwpleHRlcm4gV2luZG93IFhHZXRTZWxlY3Rpb25Pd25lcigKCiAgICBE
aXNwbGF5KiAsCiAgICBBdG9tCgopOwpleHRlcm4gV2luZG93IFhDcmVhdGVXaW5kb3coCgogICAg
RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQg
aW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAg
IHVuc2lnbmVkIGludCAsCiAgICBWaXN1YWwqICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgWFNl
dFdpbmRvd0F0dHJpYnV0ZXMqCgopOwpleHRlcm4gQ29sb3JtYXAgKlhMaXN0SW5zdGFsbGVkQ29s
b3JtYXBzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQqCgopOwpleHRlcm4g
Y2hhciAqKlhMaXN0Rm9udHMoCgogICAgRGlzcGxheSogLAogICAgY29uc3QgY2hhciogLAogICAg
aW50ICwKICAgIGludCoKCik7CmV4dGVybiBjaGFyICoqWExpc3RGb250c1dpdGhJbmZvKAoKICAg
IERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBpbnQqICwKICAgIFhG
b250U3RydWN0KioKCik7CmV4dGVybiBjaGFyICoqWEdldEZvbnRQYXRoKAoKICAgIERpc3BsYXkq
ICwKICAgIGludCoKCik7CmV4dGVybiBjaGFyICoqWExpc3RFeHRlbnNpb25zKAoKICAgIERpc3Bs
YXkqICwKICAgIGludCoKCik7CmV4dGVybiBBdG9tICpYTGlzdFByb3BlcnRpZXMoCgogICAgRGlz
cGxheSogLAogICAgV2luZG93ICwKICAgIGludCoKCik7CmV4dGVybiBYSG9zdEFkZHJlc3MgKlhM
aXN0SG9zdHMoCgogICAgRGlzcGxheSogLAogICAgaW50KiAsCiAgICBpbnQqCgopOwpleHRlcm4g
S2V5U3ltIFhLZXljb2RlVG9LZXlzeW0oCgogICAgRGlzcGxheSogLAoKICAgIHVuc2lnbmVkIGlu
dCAsCgoKCiAgICBpbnQKCik7CmV4dGVybiBLZXlTeW0gWExvb2t1cEtleXN5bSgKCiAgICBYS2V5
RXZlbnQqICwKICAgIGludAoKKTsKZXh0ZXJuIEtleVN5bSAqWEdldEtleWJvYXJkTWFwcGluZygK
CiAgICBEaXNwbGF5KiAsCgogICAgdW5zaWduZWQgaW50ICwKCgoKICAgIGludCAsCiAgICBpbnQq
CgopOwpleHRlcm4gS2V5U3ltIFhTdHJpbmdUb0tleXN5bSgKCiAgICBjb25zdCBjaGFyKgoKKTsK
ZXh0ZXJuIGxvbmcgWE1heFJlcXVlc3RTaXplKAoKICAgIERpc3BsYXkqCgopOwpleHRlcm4gbG9u
ZyBYRXh0ZW5kZWRNYXhSZXF1ZXN0U2l6ZSgKCiAgICBEaXNwbGF5KgoKKTsKZXh0ZXJuIGNoYXIg
KlhSZXNvdXJjZU1hbmFnZXJTdHJpbmcoCgogICAgRGlzcGxheSoKCik7CmV4dGVybiBjaGFyICpY
U2NyZWVuUmVzb3VyY2VTdHJpbmcoCgogICAgICAgIFNjcmVlbioKCik7CmV4dGVybiB1bnNpZ25l
ZCBsb25nIFhEaXNwbGF5TW90aW9uQnVmZmVyU2l6ZSgKCiAgICBEaXNwbGF5KgoKKTsKZXh0ZXJu
IFZpc3VhbElEIFhWaXN1YWxJREZyb21WaXN1YWwoCgogICAgVmlzdWFsKgoKKTsKCgoKZXh0ZXJu
IGludCBYSW5pdFRocmVhZHMoCgogICAgdm9pZAoKKTsKCmV4dGVybiB2b2lkIFhMb2NrRGlzcGxh
eSgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiB2b2lkIFhVbmxvY2tEaXNwbGF5KAoKICAgIERp
c3BsYXkqCgopOwoKCgpleHRlcm4gWEV4dENvZGVzICpYSW5pdEV4dGVuc2lvbigKCiAgICBEaXNw
bGF5KiAsCiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiBYRXh0Q29kZXMgKlhBZGRFeHRlbnNp
b24oCgogICAgRGlzcGxheSoKCik7CmV4dGVybiBYRXh0RGF0YSAqWEZpbmRPbkV4dGVuc2lvbkxp
c3QoCgogICAgWEV4dERhdGEqKiAsCiAgICBpbnQKCik7CmV4dGVybiBYRXh0RGF0YSAqKlhFSGVh
ZE9mRXh0ZW5zaW9uTGlzdCgKCiAgICBYRURhdGFPYmplY3QKCik7CgoKZXh0ZXJuIFdpbmRvdyBY
Um9vdFdpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7CmV4dGVybiBXaW5kb3cgWERl
ZmF1bHRSb290V2luZG93KAoKICAgIERpc3BsYXkqCgopOwpleHRlcm4gV2luZG93IFhSb290V2lu
ZG93T2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKZXh0ZXJuIFZpc3VhbCAqWERlZmF1bHRWaXN1
YWwoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwpleHRlcm4gVmlzdWFsICpYRGVmYXVsdFZp
c3VhbE9mU2NyZWVuKAoKICAgIFNjcmVlbioKCik7CmV4dGVybiBHQyBYRGVmYXVsdEdDKAoKICAg
IERpc3BsYXkqICwKICAgIGludAoKKTsKZXh0ZXJuIEdDIFhEZWZhdWx0R0NPZlNjcmVlbigKCiAg
ICBTY3JlZW4qCgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBYQmxhY2tQaXhlbCgKCiAgICBEaXNw
bGF5KiAsCiAgICBpbnQKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhXaGl0ZVBpeGVsKAoKICAg
IERpc3BsYXkqICwKICAgIGludAoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWEFsbFBsYW5lcygK
CiAgICB2b2lkCgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBYQmxhY2tQaXhlbE9mU2NyZWVuKAoK
ICAgIFNjcmVlbioKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhXaGl0ZVBpeGVsT2ZTY3JlZW4o
CgogICAgU2NyZWVuKgoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWE5leHRSZXF1ZXN0KAoKICAg
IERpc3BsYXkqCgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBYTGFzdEtub3duUmVxdWVzdFByb2Nl
c3NlZCgKCiAgICBEaXNwbGF5KgoKKTsKZXh0ZXJuIGNoYXIgKlhTZXJ2ZXJWZW5kb3IoCgogICAg
RGlzcGxheSoKCik7CmV4dGVybiBjaGFyICpYRGlzcGxheVN0cmluZygKCiAgICBEaXNwbGF5KgoK
KTsKZXh0ZXJuIENvbG9ybWFwIFhEZWZhdWx0Q29sb3JtYXAoCgogICAgRGlzcGxheSogLAogICAg
aW50CgopOwpleHRlcm4gQ29sb3JtYXAgWERlZmF1bHRDb2xvcm1hcE9mU2NyZWVuKAoKICAgIFNj
cmVlbioKCik7CmV4dGVybiBEaXNwbGF5ICpYRGlzcGxheU9mU2NyZWVuKAoKICAgIFNjcmVlbioK
Cik7CmV4dGVybiBTY3JlZW4gKlhTY3JlZW5PZkRpc3BsYXkoCgogICAgRGlzcGxheSogLAogICAg
aW50CgopOwpleHRlcm4gU2NyZWVuICpYRGVmYXVsdFNjcmVlbk9mRGlzcGxheSgKCiAgICBEaXNw
bGF5KgoKKTsKZXh0ZXJuIGxvbmcgWEV2ZW50TWFza09mU2NyZWVuKAoKICAgIFNjcmVlbioKCik7
CgpleHRlcm4gaW50IFhTY3JlZW5OdW1iZXJPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKdHlw
ZWRlZiBpbnQgKCpYRXJyb3JIYW5kbGVyKSAoCgogICAgRGlzcGxheSogLAogICAgWEVycm9yRXZl
bnQqCgopOwoKZXh0ZXJuIFhFcnJvckhhbmRsZXIgWFNldEVycm9ySGFuZGxlciAoCgogICAgWEVy
cm9ySGFuZGxlcgoKKTsKCgp0eXBlZGVmIGludCAoKlhJT0Vycm9ySGFuZGxlcikgKAoKICAgIERp
c3BsYXkqCgopOwoKZXh0ZXJuIFhJT0Vycm9ySGFuZGxlciBYU2V0SU9FcnJvckhhbmRsZXIgKAoK
ICAgIFhJT0Vycm9ySGFuZGxlcgoKKTsKCgpleHRlcm4gWFBpeG1hcEZvcm1hdFZhbHVlcyAqWExp
c3RQaXhtYXBGb3JtYXRzKAoKICAgIERpc3BsYXkqICwKICAgIGludCoKCik7CmV4dGVybiBpbnQg
KlhMaXN0RGVwdGhzKAoKICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBpbnQqCgopOwoKCgpl
eHRlcm4gaW50IFhSZWNvbmZpZ3VyZVdNV2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRv
dyAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIFhXaW5kb3dDaGFuZ2VzKgoKKTsK
CmV4dGVybiBpbnQgWEdldFdNUHJvdG9jb2xzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAs
CiAgICBBdG9tKiogLAogICAgaW50KgoKKTsKZXh0ZXJuIGludCBYU2V0V01Qcm90b2NvbHMoCgog
ICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIEF0b20qICwKICAgIGludAoKKTsKZXh0ZXJu
IGludCBYSWNvbmlmeVdpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50
CgopOwpleHRlcm4gaW50IFhXaXRoZHJhd1dpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5k
b3cgLAogICAgaW50CgopOwpleHRlcm4gaW50IFhHZXRDb21tYW5kKAoKICAgIERpc3BsYXkqICwK
ICAgIFdpbmRvdyAsCiAgICBjaGFyKioqICwKICAgIGludCoKCik7CmV4dGVybiBpbnQgWEdldFdN
Q29sb3JtYXBXaW5kb3dzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBXaW5kb3cq
KiAsCiAgICBpbnQqCgopOwpleHRlcm4gaW50IFhTZXRXTUNvbG9ybWFwV2luZG93cygKCiAgICBE
aXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgV2luZG93KiAsCiAgICBpbnQKCik7CmV4dGVybiB2
b2lkIFhGcmVlU3RyaW5nTGlzdCgKCiAgICBjaGFyKioKCik7CmV4dGVybiBpbnQgWFNldFRyYW5z
aWVudEZvckhpbnQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFdpbmRvdwoKKTsK
CgoKZXh0ZXJuIGludCBYQWN0aXZhdGVTY3JlZW5TYXZlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4
dGVybiBpbnQgWEFkZEhvc3QoCgogICAgRGlzcGxheSogLAogICAgWEhvc3RBZGRyZXNzKgoKKTsK
CmV4dGVybiBpbnQgWEFkZEhvc3RzKAoKICAgIERpc3BsYXkqICwKICAgIFhIb3N0QWRkcmVzcyog
LAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQWRkVG9FeHRlbnNpb25MaXN0KAoKICAgIHN0cnVj
dCBfWEV4dERhdGEqKiAsCiAgICBYRXh0RGF0YSoKCik7CgpleHRlcm4gaW50IFhBZGRUb1NhdmVT
ZXQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYQWxsb2NDb2xv
cigKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcCAsCiAgICBYQ29sb3IqCgopOwoKZXh0ZXJu
IGludCBYQWxsb2NDb2xvckNlbGxzKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwICwKICAg
IGludCAsCiAgICB1bnNpZ25lZCBsb25nKiAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWdu
ZWQgbG9uZyogLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYQWxsb2NDb2xvclBs
YW5lcygKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcCAsCiAgICBpbnQgLAogICAgdW5zaWdu
ZWQgbG9uZyogLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVu
c2lnbmVkIGxvbmcqICwKICAgIHVuc2lnbmVkIGxvbmcqICwKICAgIHVuc2lnbmVkIGxvbmcqCgop
OwoKZXh0ZXJuIGludCBYQWxsb2NOYW1lZENvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9y
bWFwICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFhDb2xvciogLAogICAgWENvbG9yKgoKKTsKCmV4
dGVybiBpbnQgWEFsbG93RXZlbnRzKAoKICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBUaW1l
CgopOwoKZXh0ZXJuIGludCBYQXV0b1JlcGVhdE9mZigKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVy
biBpbnQgWEF1dG9SZXBlYXRPbigKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWEJlbGwo
CgogICAgRGlzcGxheSogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQml0bWFwQml0T3JkZXIo
CgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhCaXRtYXBQYWQoCgogICAgRGlzcGxheSoK
Cik7CgpleHRlcm4gaW50IFhCaXRtYXBVbml0KAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGlu
dCBYQ2VsbHNPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlQWN0
aXZlUG9pbnRlckdyYWIoCgogICAgRGlzcGxheSogLAogICAgdW5zaWduZWQgaW50ICwKICAgIEN1
cnNvciAsCiAgICBUaW1lCgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlR0MoCgogICAgRGlzcGxheSog
LAogICAgR0MgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBYR0NWYWx1ZXMqCgopOwoKZXh0ZXJu
IGludCBYQ2hhbmdlS2V5Ym9hcmRDb250cm9sKAoKICAgIERpc3BsYXkqICwKICAgIHVuc2lnbmVk
IGxvbmcgLAogICAgWEtleWJvYXJkQ29udHJvbCoKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VLZXli
b2FyZE1hcHBpbmcoCgogICAgRGlzcGxheSogLAogICAgaW50ICwKICAgIGludCAsCiAgICBLZXlT
eW0qICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWENoYW5nZVBvaW50ZXJDb250cm9sKAoKICAg
IERpc3BsYXkqICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBp
bnQKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VQcm9wZXJ0eSgKCiAgICBEaXNwbGF5KiAsCiAgICBX
aW5kb3cgLAogICAgQXRvbSAsCiAgICBBdG9tICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29u
c3QgdW5zaWduZWQgY2hhciogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlU2F2ZVNl
dCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBY
Q2hhbmdlV2luZG93QXR0cmlidXRlcygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg
dW5zaWduZWQgbG9uZyAsCiAgICBYU2V0V2luZG93QXR0cmlidXRlcyoKCik7CgpleHRlcm4gaW50
IFhDaGVja0lmRXZlbnQoCgogICAgRGlzcGxheSogLAogICAgWEV2ZW50KiAsCiAgICBpbnQgKCop
ICgKCiAgICAgICAgICAgICAgIERpc3BsYXkqICwKICAgICAgICAgICAgICAgWEV2ZW50KiAsCiAg
ICAgICAgICAgICAgIFhQb2ludGVyCgogICAgICAgICAgICAgKSAsCiAgICBYUG9pbnRlcgoKKTsK
CmV4dGVybiBpbnQgWENoZWNrTWFza0V2ZW50KAoKICAgIERpc3BsYXkqICwKICAgIGxvbmcgLAog
ICAgWEV2ZW50KgoKKTsKCmV4dGVybiBpbnQgWENoZWNrVHlwZWRFdmVudCgKCiAgICBEaXNwbGF5
KiAsCiAgICBpbnQgLAogICAgWEV2ZW50KgoKKTsKCmV4dGVybiBpbnQgWENoZWNrVHlwZWRXaW5k
b3dFdmVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIFhFdmVu
dCoKCik7CgpleHRlcm4gaW50IFhDaGVja1dpbmRvd0V2ZW50KAoKICAgIERpc3BsYXkqICwKICAg
IFdpbmRvdyAsCiAgICBsb25nICwKICAgIFhFdmVudCoKCik7CgpleHRlcm4gaW50IFhDaXJjdWxh
dGVTdWJ3aW5kb3dzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQKCik7Cgpl
eHRlcm4gaW50IFhDaXJjdWxhdGVTdWJ3aW5kb3dzRG93bigKCiAgICBEaXNwbGF5KiAsCiAgICBX
aW5kb3cKCik7CgpleHRlcm4gaW50IFhDaXJjdWxhdGVTdWJ3aW5kb3dzVXAoCgogICAgRGlzcGxh
eSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYQ2xlYXJBcmVhKAoKICAgIERpc3BsYXkq
ICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAg
ICB1bnNpZ25lZCBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQ2xlYXJXaW5kb3coCgog
ICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYQ2xvc2VEaXNwbGF5KAoK
ICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGludCBYQ29uZmlndXJlV2luZG93KAoKICAgIERpc3Bs
YXkqICwKICAgIFdpbmRvdyAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgWFdpbmRvd0NoYW5nZXMq
CgopOwoKZXh0ZXJuIGludCBYQ29ubmVjdGlvbk51bWJlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4
dGVybiBpbnQgWENvbnZlcnRTZWxlY3Rpb24oCgogICAgRGlzcGxheSogLAogICAgQXRvbSAsCiAg
ICBBdG9tICwKICAgIEF0b20gLAogICAgV2luZG93ICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50
IFhDb3B5QXJlYSgKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBEcmF3YWJsZSAs
CiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNp
Z25lZCBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWENvcHlHQygKCiAg
ICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICB1bnNpZ25lZCBsb25nICwKICAgIEdDCgopOwoKZXh0
ZXJuIGludCBYQ29weVBsYW5lKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIERy
YXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwK
ICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGxvbmcK
Cik7CgpleHRlcm4gaW50IFhEZWZhdWx0RGVwdGgoCgogICAgRGlzcGxheSogLAogICAgaW50Cgop
OwoKZXh0ZXJuIGludCBYRGVmYXVsdERlcHRoT2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKCmV4
dGVybiBpbnQgWERlZmF1bHRTY3JlZW4oCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhE
ZWZpbmVDdXJzb3IoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIEN1cnNvcgoKKTsK
CmV4dGVybiBpbnQgWERlbGV0ZVByb3BlcnR5KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAs
CiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYRGVzdHJveVdpbmRvdygKCiAgICBEaXNwbGF5KiAs
CiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhEZXN0cm95U3Vid2luZG93cygKCiAgICBEaXNw
bGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhEb2VzQmFja2luZ1N0b3JlKAoKICAg
IFNjcmVlbioKCik7CgpleHRlcm4gaW50IFhEb2VzU2F2ZVVuZGVycygKCiAgICBTY3JlZW4qCgop
OwoKZXh0ZXJuIGludCBYRGlzYWJsZUFjY2Vzc0NvbnRyb2woCgogICAgRGlzcGxheSoKCik7CgoK
ZXh0ZXJuIGludCBYRGlzcGxheUNlbGxzKAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKCmV4
dGVybiBpbnQgWERpc3BsYXlIZWlnaHQoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwoKZXh0
ZXJuIGludCBYRGlzcGxheUhlaWdodE1NKAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKCmV4
dGVybiBpbnQgWERpc3BsYXlLZXljb2RlcygKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQqICwKICAg
IGludCoKCik7CgpleHRlcm4gaW50IFhEaXNwbGF5UGxhbmVzKAoKICAgIERpc3BsYXkqICwKICAg
IGludAoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlXaWR0aCgKCiAgICBEaXNwbGF5KiAsCiAgICBp
bnQKCik7CgpleHRlcm4gaW50IFhEaXNwbGF5V2lkdGhNTSgKCiAgICBEaXNwbGF5KiAsCiAgICBp
bnQKCik7CgpleHRlcm4gaW50IFhEcmF3QXJjKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxl
ICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVu
c2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd0FyY3Mo
CgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWEFyYyogLAogICAg
aW50CgopOwoKZXh0ZXJuIGludCBYRHJhd0ltYWdlU3RyaW5nKAoKICAgIERpc3BsYXkqICwKICAg
IERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciog
LAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd0ltYWdlU3RyaW5nMTYoCgogICAgRGlzcGxh
eSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25z
dCBYQ2hhcjJiKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3TGluZSgKCiAgICBEaXNw
bGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGlu
dCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3TGluZXMoCgogICAgRGlzcGxheSogLAog
ICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWFBvaW50KiAsCiAgICBpbnQgLAogICAgaW50Cgop
OwoKZXh0ZXJuIGludCBYRHJhd1BvaW50KAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwK
ICAgIEdDICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3UG9pbnRzKAoK
ICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIFhQb2ludCogLAogICAg
aW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERyYXdSZWN0YW5nbGUoCgogICAgRGlzcGxh
eSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNp
Z25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd1JlY3Rhbmds
ZXMoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWFJlY3Rhbmds
ZSogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd1NlZ21lbnRzKAoKICAgIERpc3BsYXkq
ICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIFhTZWdtZW50KiAsCiAgICBpbnQKCik7Cgpl
eHRlcm4gaW50IFhEcmF3U3RyaW5nKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAg
IEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50CgopOwoK
ZXh0ZXJuIGludCBYRHJhd1N0cmluZzE2KAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwK
ICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29uc3QgWENoYXIyYiogLAogICAgaW50
CgopOwoKZXh0ZXJuIGludCBYRHJhd1RleHQoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUg
LAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBYVGV4dEl0ZW0qICwKICAgIGludAoK
KTsKCmV4dGVybiBpbnQgWERyYXdUZXh0MTYoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUg
LAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBYVGV4dEl0ZW0xNiogLAogICAgaW50
CgopOwoKZXh0ZXJuIGludCBYRW5hYmxlQWNjZXNzQ29udHJvbCgKCiAgICBEaXNwbGF5KgoKKTsK
CmV4dGVybiBpbnQgWEV2ZW50c1F1ZXVlZCgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7Cgpl
eHRlcm4gaW50IFhGZXRjaE5hbWUoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGNo
YXIqKgoKKTsKCmV4dGVybiBpbnQgWEZpbGxBcmMoCgogICAgRGlzcGxheSogLAogICAgRHJhd2Fi
bGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAg
dW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhGaWxsQXJj
cygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBYQXJjKiAsCiAg
ICBpbnQKCik7CgpleHRlcm4gaW50IFhGaWxsUG9seWdvbigKCiAgICBEaXNwbGF5KiAsCiAgICBE
cmF3YWJsZSAsCiAgICBHQyAsCiAgICBYUG9pbnQqICwKICAgIGludCAsCiAgICBpbnQgLAogICAg
aW50CgopOwoKZXh0ZXJuIGludCBYRmlsbFJlY3RhbmdsZSgKCiAgICBEaXNwbGF5KiAsCiAgICBE
cmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAs
CiAgICB1bnNpZ25lZCBpbnQKCik7CgpleHRlcm4gaW50IFhGaWxsUmVjdGFuZ2xlcygKCiAgICBE
aXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBp
bnQKCik7CgpleHRlcm4gaW50IFhGbHVzaCgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQg
WEZvcmNlU2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwoKZXh0ZXJuIGlu
dCBYRnJlZSgKCiAgICB2b2lkKgoKKTsKCmV4dGVybiBpbnQgWEZyZWVDb2xvcm1hcCgKCiAgICBE
aXNwbGF5KiAsCiAgICBDb2xvcm1hcAoKKTsKCmV4dGVybiBpbnQgWEZyZWVDb2xvcnMoCgogICAg
RGlzcGxheSogLAogICAgQ29sb3JtYXAgLAogICAgdW5zaWduZWQgbG9uZyogLAogICAgaW50ICwK
ICAgIHVuc2lnbmVkIGxvbmcKCik7CgpleHRlcm4gaW50IFhGcmVlQ3Vyc29yKAoKICAgIERpc3Bs
YXkqICwKICAgIEN1cnNvcgoKKTsKCmV4dGVybiBpbnQgWEZyZWVFeHRlbnNpb25MaXN0KAoKICAg
IGNoYXIqKgoKKTsKCmV4dGVybiBpbnQgWEZyZWVGb250KAoKICAgIERpc3BsYXkqICwKICAgIFhG
b250U3RydWN0KgoKKTsKCmV4dGVybiBpbnQgWEZyZWVGb250SW5mbygKCiAgICBjaGFyKiogLAog
ICAgWEZvbnRTdHJ1Y3QqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWEZyZWVGb250TmFtZXMo
CgogICAgY2hhcioqCgopOwoKZXh0ZXJuIGludCBYRnJlZUZvbnRQYXRoKAoKICAgIGNoYXIqKgoK
KTsKCmV4dGVybiBpbnQgWEZyZWVHQygKCiAgICBEaXNwbGF5KiAsCiAgICBHQwoKKTsKCmV4dGVy
biBpbnQgWEZyZWVNb2RpZmllcm1hcCgKCiAgICBYTW9kaWZpZXJLZXltYXAqCgopOwoKZXh0ZXJu
IGludCBYRnJlZVBpeG1hcCgKCiAgICBEaXNwbGF5KiAsCiAgICBQaXhtYXAKCik7CgpleHRlcm4g
aW50IFhHZW9tZXRyeSgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciog
LAogICAgY29uc3QgY2hhciogLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAs
CiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQqICwKICAgIGlu
dCogLAogICAgaW50KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYR2V0RXJyb3JEYXRhYmFz
ZVRleHQoCgogICAgRGlzcGxheSogLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciog
LAogICAgY29uc3QgY2hhciogLAogICAgY2hhciogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBY
R2V0RXJyb3JUZXh0KAoKICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBjaGFyKiAsCiAgICBp
bnQKCik7CgpleHRlcm4gaW50IFhHZXRGb250UHJvcGVydHkoCgogICAgWEZvbnRTdHJ1Y3QqICwK
ICAgIEF0b20gLAogICAgdW5zaWduZWQgbG9uZyoKCik7CgpleHRlcm4gaW50IFhHZXRHQ1ZhbHVl
cygKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICB1bnNpZ25lZCBsb25nICwKICAgIFhHQ1Zh
bHVlcyoKCik7CgpleHRlcm4gaW50IFhHZXRHZW9tZXRyeSgKCiAgICBEaXNwbGF5KiAsCiAgICBE
cmF3YWJsZSAsCiAgICBXaW5kb3cqICwKICAgIGludCogLAogICAgaW50KiAsCiAgICB1bnNpZ25l
ZCBpbnQqICwKICAgIHVuc2lnbmVkIGludCogLAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNp
Z25lZCBpbnQqCgopOwoKZXh0ZXJuIGludCBYR2V0SWNvbk5hbWUoCgogICAgRGlzcGxheSogLAog
ICAgV2luZG93ICwKICAgIGNoYXIqKgoKKTsKCmV4dGVybiBpbnQgWEdldElucHV0Rm9jdXMoCgog
ICAgRGlzcGxheSogLAogICAgV2luZG93KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYR2V0
S2V5Ym9hcmRDb250cm9sKAoKICAgIERpc3BsYXkqICwKICAgIFhLZXlib2FyZFN0YXRlKgoKKTsK
CmV4dGVybiBpbnQgWEdldFBvaW50ZXJDb250cm9sKAoKICAgIERpc3BsYXkqICwKICAgIGludCog
LAogICAgaW50KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYR2V0UG9pbnRlck1hcHBpbmco
CgogICAgRGlzcGxheSogLAogICAgdW5zaWduZWQgY2hhciogLAogICAgaW50CgopOwoKZXh0ZXJu
IGludCBYR2V0U2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSogLAogICAgaW50KiAsCiAgICBpbnQq
ICwKICAgIGludCogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWEdldFRyYW5zaWVudEZvckhp
bnQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFdpbmRvdyoKCik7CgpleHRlcm4g
aW50IFhHZXRXaW5kb3dQcm9wZXJ0eSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg
QXRvbSAsCiAgICBsb25nICwKICAgIGxvbmcgLAogICAgaW50ICwKICAgIEF0b20gLAogICAgQXRv
bSogLAogICAgaW50KiAsCiAgICB1bnNpZ25lZCBsb25nKiAsCiAgICB1bnNpZ25lZCBsb25nKiAs
CiAgICB1bnNpZ25lZCBjaGFyKioKCik7CgpleHRlcm4gaW50IFhHZXRXaW5kb3dBdHRyaWJ1dGVz
KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYV2luZG93QXR0cmlidXRlcyoKCik7
CgpleHRlcm4gaW50IFhHcmFiQnV0dG9uKAoKICAgIERpc3BsYXkqICwKICAgIHVuc2lnbmVkIGlu
dCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICB1bnNpZ25l
ZCBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBXaW5kb3cgLAogICAgQ3Vyc29yCgopOwoK
ZXh0ZXJuIGludCBYR3JhYktleSgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgdW5zaWdu
ZWQgaW50ICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4
dGVybiBpbnQgWEdyYWJLZXlib2FyZCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg
aW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgVGltZQoKKTsKCmV4dGVybiBpbnQgWEdyYWJQ
b2ludGVyKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgdW5zaWdu
ZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgV2luZG93ICwKICAgIEN1cnNvciAsCiAg
ICBUaW1lCgopOwoKZXh0ZXJuIGludCBYR3JhYlNlcnZlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4
dGVybiBpbnQgWEhlaWdodE1NT2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiBpbnQg
WEhlaWdodE9mU2NyZWVuKAoKICAgIFNjcmVlbioKCik7CgpleHRlcm4gaW50IFhJZkV2ZW50KAoK
ICAgIERpc3BsYXkqICwKICAgIFhFdmVudCogLAogICAgaW50ICgqKSAoCgogICAgICAgICAgICAg
ICBEaXNwbGF5KiAsCiAgICAgICAgICAgICAgIFhFdmVudCogLAogICAgICAgICAgICAgICBYUG9p
bnRlcgoKICAgICAgICAgICAgICkgLAogICAgWFBvaW50ZXIKCik7CgpleHRlcm4gaW50IFhJbWFn
ZUJ5dGVPcmRlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWEluc3RhbGxDb2xvcm1h
cCgKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcAoKKTsKCmV4dGVybiBLZXlDb2RlIFhLZXlz
eW1Ub0tleWNvZGUoCgogICAgRGlzcGxheSogLAogICAgS2V5U3ltCgopOwoKZXh0ZXJuIGludCBY
S2lsbENsaWVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBYSUQKCik7CgpleHRlcm4gaW50IFhMb29r
dXBDb2xvcigKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcCAsCiAgICBjb25zdCBjaGFyKiAs
CiAgICBYQ29sb3IqICwKICAgIFhDb2xvcioKCik7CgpleHRlcm4gaW50IFhMb3dlcldpbmRvdygK
CiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhNYXBSYWlzZWQoCgog
ICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYTWFwU3Vid2luZG93cygK
CiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhNYXBXaW5kb3coCgog
ICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYTWFza0V2ZW50KAoKICAg
IERpc3BsYXkqICwKICAgIGxvbmcgLAogICAgWEV2ZW50KgoKKTsKCmV4dGVybiBpbnQgWE1heENt
YXBzT2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiBpbnQgWE1pbkNtYXBzT2ZTY3Jl
ZW4oCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiBpbnQgWE1vdmVSZXNpemVXaW5kb3coCgogICAg
RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQg
aW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKCmV4dGVybiBpbnQgWE1vdmVXaW5kb3coCgogICAg
RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50
IFhOZXh0RXZlbnQoCgogICAgRGlzcGxheSogLAogICAgWEV2ZW50KgoKKTsKCmV4dGVybiBpbnQg
WE5vT3AoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhQYXJzZUNvbG9yKAoKICAgIERp
c3BsYXkqICwKICAgIENvbG9ybWFwICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFhDb2xvcioKCik7
CgpleHRlcm4gaW50IFhQYXJzZUdlb21ldHJ5KAoKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCog
LAogICAgaW50KiAsCiAgICB1bnNpZ25lZCBpbnQqICwKICAgIHVuc2lnbmVkIGludCoKCik7Cgpl
eHRlcm4gaW50IFhQZWVrRXZlbnQoCgogICAgRGlzcGxheSogLAogICAgWEV2ZW50KgoKKTsKCmV4
dGVybiBpbnQgWFBlZWtJZkV2ZW50KAoKICAgIERpc3BsYXkqICwKICAgIFhFdmVudCogLAogICAg
aW50ICgqKSAoCgogICAgICAgICAgICAgICBEaXNwbGF5KiAsCiAgICAgICAgICAgICAgIFhFdmVu
dCogLAogICAgICAgICAgICAgICBYUG9pbnRlcgoKICAgICAgICAgICAgICkgLAogICAgWFBvaW50
ZXIKCik7CgpleHRlcm4gaW50IFhQZW5kaW5nKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGlu
dCBYUGxhbmVzT2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKCik7CgpleHRlcm4gaW50IFhQcm90b2Nv
bFJldmlzaW9uKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGludCBYUHJvdG9jb2xWZXJzaW9u
KAoKICAgIERpc3BsYXkqCgopOwoKCmV4dGVybiBpbnQgWFB1dEJhY2tFdmVudCgKCiAgICBEaXNw
bGF5KiAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIGludCBYUHV0SW1hZ2UoCgogICAgRGlzcGxh
eSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWEltYWdlKiAsCiAgICBpbnQgLAogICAg
aW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVk
IGludAoKKTsKCmV4dGVybiBpbnQgWFFMZW5ndGgoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4g
aW50IFhRdWVyeUJlc3RDdXJzb3IoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAg
dW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQqICwKICAg
IHVuc2lnbmVkIGludCoKCik7CgpleHRlcm4gaW50IFhRdWVyeUJlc3RTaXplKAoKICAgIERpc3Bs
YXkqICwKICAgIGludCAsCiAgICBEcmF3YWJsZSAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5z
aWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCogLAogICAgdW5zaWduZWQgaW50KgoKKTsKCmV4
dGVybiBpbnQgWFF1ZXJ5QmVzdFN0aXBwbGUoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUg
LAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQq
ICwKICAgIHVuc2lnbmVkIGludCoKCik7CgpleHRlcm4gaW50IFhRdWVyeUJlc3RUaWxlKAoKICAg
IERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25l
ZCBpbnQgLAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBpbnQqCgopOwoKZXh0ZXJu
IGludCBYUXVlcnlDb2xvcigKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcCAsCiAgICBYQ29s
b3IqCgopOwoKZXh0ZXJuIGludCBYUXVlcnlDb2xvcnMoCgogICAgRGlzcGxheSogLAogICAgQ29s
b3JtYXAgLAogICAgWENvbG9yKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhRdWVyeUV4dGVu
c2lvbigKCiAgICBEaXNwbGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQqICwKICAgIGlu
dCogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5S2V5bWFwKAoKICAgIERpc3BsYXkq
ICwKICAgIGNoYXIgWzMyXQoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5UG9pbnRlcigKCiAgICBEaXNw
bGF5KiAsCiAgICBXaW5kb3cgLAogICAgV2luZG93KiAsCiAgICBXaW5kb3cqICwKICAgIGludCog
LAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgdW5zaWduZWQgaW50KgoKKTsK
CmV4dGVybiBpbnQgWFF1ZXJ5VGV4dEV4dGVudHMoCgogICAgRGlzcGxheSogLAogICAgWElEICwK
ICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgaW50
KiAsCiAgICBYQ2hhclN0cnVjdCoKCik7CgpleHRlcm4gaW50IFhRdWVyeVRleHRFeHRlbnRzMTYo
CgogICAgRGlzcGxheSogLAogICAgWElEICwKICAgIGNvbnN0IFhDaGFyMmIqICwKICAgIGludCAs
CiAgICBpbnQqICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBYQ2hhclN0cnVjdCoKCik7Cgpl
eHRlcm4gaW50IFhRdWVyeVRyZWUoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFdp
bmRvdyogLAogICAgV2luZG93KiAsCiAgICBXaW5kb3cqKiAsCiAgICB1bnNpZ25lZCBpbnQqCgop
OwoKZXh0ZXJuIGludCBYUmFpc2VXaW5kb3coCgogICAgRGlzcGxheSogLAogICAgV2luZG93Cgop
OwoKZXh0ZXJuIGludCBYUmVhZEJpdG1hcEZpbGUoCgogICAgRGlzcGxheSogLAogICAgRHJhd2Fi
bGUgLAogICAgY29uc3QgY2hhciogLAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBp
bnQqICwKICAgIFBpeG1hcCogLAogICAgaW50KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBY
UmVhZEJpdG1hcEZpbGVEYXRhKAoKICAgIGNvbnN0IGNoYXIqICwKICAgIHVuc2lnbmVkIGludCog
LAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBjaGFyKiogLAogICAgaW50KiAsCiAg
ICBpbnQqCgopOwoKZXh0ZXJuIGludCBYUmViaW5kS2V5c3ltKAoKICAgIERpc3BsYXkqICwKICAg
IEtleVN5bSAsCiAgICBLZXlTeW0qICwKICAgIGludCAsCiAgICBjb25zdCB1bnNpZ25lZCBjaGFy
KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhSZWNvbG9yQ3Vyc29yKAoKICAgIERpc3BsYXkq
ICwKICAgIEN1cnNvciAsCiAgICBYQ29sb3IqICwKICAgIFhDb2xvcioKCik7CgpleHRlcm4gaW50
IFhSZWZyZXNoS2V5Ym9hcmRNYXBwaW5nKAoKICAgIFhNYXBwaW5nRXZlbnQqCgopOwoKZXh0ZXJu
IGludCBYUmVtb3ZlRnJvbVNhdmVTZXQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoK
ZXh0ZXJuIGludCBYUmVtb3ZlSG9zdCgKCiAgICBEaXNwbGF5KiAsCiAgICBYSG9zdEFkZHJlc3Mq
CgopOwoKZXh0ZXJuIGludCBYUmVtb3ZlSG9zdHMoCgogICAgRGlzcGxheSogLAogICAgWEhvc3RB
ZGRyZXNzKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhSZXBhcmVudFdpbmRvdygKCiAgICBE
aXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQKCik7
CgpleHRlcm4gaW50IFhSZXNldFNjcmVlblNhdmVyKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJu
IGludCBYUmVzaXplV2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICB1bnNp
Z25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYUmVzdGFja1dpbmRv
d3MoCgogICAgRGlzcGxheSogLAogICAgV2luZG93KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50
IFhSb3RhdGVCdWZmZXJzKAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQg
WFJvdGF0ZVdpbmRvd1Byb3BlcnRpZXMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAg
IEF0b20qICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTY3JlZW5Db3VudCgK
CiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWFNlbGVjdElucHV0KAoKICAgIERpc3BsYXkq
ICwKICAgIFdpbmRvdyAsCiAgICBsb25nCgopOwoKZXh0ZXJuIGludCBYU2VuZEV2ZW50KAoKICAg
IERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgbG9uZyAsCiAgICBYRXZlbnQq
CgopOwoKZXh0ZXJuIGludCBYU2V0QWNjZXNzQ29udHJvbCgKCiAgICBEaXNwbGF5KiAsCiAgICBp
bnQKCik7CgpleHRlcm4gaW50IFhTZXRBcmNNb2RlKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwK
ICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldEJhY2tncm91bmQoCgogICAgRGlzcGxheSogLAog
ICAgR0MgLAogICAgdW5zaWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWFNldENsaXBNYXNrKAoK
ICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIFBpeG1hcAoKKTsKCmV4dGVybiBpbnQgWFNldENs
aXBPcmlnaW4oCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgaW50ICwKICAgIGludAoKKTsK
CmV4dGVybiBpbnQgWFNldENsaXBSZWN0YW5nbGVzKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwK
ICAgIGludCAsCiAgICBpbnQgLAogICAgWFJlY3RhbmdsZSogLAogICAgaW50ICwKICAgIGludAoK
KTsKCmV4dGVybiBpbnQgWFNldENsb3NlRG93bk1vZGUoCgogICAgRGlzcGxheSogLAogICAgaW50
CgopOwoKZXh0ZXJuIGludCBYU2V0Q29tbWFuZCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cg
LAogICAgY2hhcioqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldERhc2hlcygKCiAgICBE
aXNwbGF5KiAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50Cgop
OwoKZXh0ZXJuIGludCBYU2V0RmlsbFJ1bGUoCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAg
aW50CgopOwoKZXh0ZXJuIGludCBYU2V0RmlsbFN0eWxlKAoKICAgIERpc3BsYXkqICwKICAgIEdD
ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldEZvbnQoCgogICAgRGlzcGxheSogLAogICAg
R0MgLAogICAgRm9udAoKKTsKCmV4dGVybiBpbnQgWFNldEZvbnRQYXRoKAoKICAgIERpc3BsYXkq
ICwKICAgIGNoYXIqKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRGb3JlZ3JvdW5kKAoK
ICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIHVuc2lnbmVkIGxvbmcKCik7CgpleHRlcm4gaW50
IFhTZXRGdW5jdGlvbigKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICBpbnQKCik7CgpleHRl
cm4gaW50IFhTZXRHcmFwaGljc0V4cG9zdXJlcygKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAg
ICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRJY29uTmFtZSgKCiAgICBEaXNwbGF5KiAsCiAgICBX
aW5kb3cgLAogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gaW50IFhTZXRJbnB1dEZvY3VzKAoK
ICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgVGltZQoKKTsKCmV4dGVy
biBpbnQgWFNldExpbmVBdHRyaWJ1dGVzKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIHVu
c2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQg
WFNldE1vZGlmaWVyTWFwcGluZygKCiAgICBEaXNwbGF5KiAsCiAgICBYTW9kaWZpZXJLZXltYXAq
CgopOwoKZXh0ZXJuIGludCBYU2V0UGxhbmVNYXNrKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwK
ICAgIHVuc2lnbmVkIGxvbmcKCik7CgpleHRlcm4gaW50IFhTZXRQb2ludGVyTWFwcGluZygKCiAg
ICBEaXNwbGF5KiAsCiAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRl
cm4gaW50IFhTZXRTY3JlZW5TYXZlcigKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgaW50
ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRTZWxlY3Rpb25Pd25lcigK
CiAgICBEaXNwbGF5KiAsCiAgICBBdG9tICwKICAgIFdpbmRvdyAsCiAgICBUaW1lCgopOwoKZXh0
ZXJuIGludCBYU2V0U3RhdGUoCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgdW5zaWduZWQg
bG9uZyAsCiAgICB1bnNpZ25lZCBsb25nICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBsb25nCgop
OwoKZXh0ZXJuIGludCBYU2V0U3RpcHBsZSgKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICBQ
aXhtYXAKCik7CgpleHRlcm4gaW50IFhTZXRTdWJ3aW5kb3dNb2RlKAoKICAgIERpc3BsYXkqICwK
ICAgIEdDICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldFRTT3JpZ2luKAoKICAgIERpc3Bs
YXkqICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRUaWxl
KAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIFBpeG1hcAoKKTsKCmV4dGVybiBpbnQgWFNl
dFdpbmRvd0JhY2tncm91bmQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIHVuc2ln
bmVkIGxvbmcKCik7CgpleHRlcm4gaW50IFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKAoKICAg
IERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBQaXhtYXAKCik7CgpleHRlcm4gaW50IFhTZXRX
aW5kb3dCb3JkZXIoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIHVuc2lnbmVkIGxv
bmcKCik7CgpleHRlcm4gaW50IFhTZXRXaW5kb3dCb3JkZXJQaXhtYXAoCgogICAgRGlzcGxheSog
LAogICAgV2luZG93ICwKICAgIFBpeG1hcAoKKTsKCmV4dGVybiBpbnQgWFNldFdpbmRvd0JvcmRl
cldpZHRoKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICB1bnNpZ25lZCBpbnQKCik7
CgpleHRlcm4gaW50IFhTZXRXaW5kb3dDb2xvcm1hcCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5k
b3cgLAogICAgQ29sb3JtYXAKCik7CgpleHRlcm4gaW50IFhTdG9yZUJ1ZmZlcigKCiAgICBEaXNw
bGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGlu
dCBYU3RvcmVCeXRlcygKCiAgICBEaXNwbGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQK
Cik7CgpleHRlcm4gaW50IFhTdG9yZUNvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFw
ICwKICAgIFhDb2xvcioKCik7CgpleHRlcm4gaW50IFhTdG9yZUNvbG9ycygKCiAgICBEaXNwbGF5
KiAsCiAgICBDb2xvcm1hcCAsCiAgICBYQ29sb3IqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQg
WFN0b3JlTmFtZSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgY29uc3QgY2hhcioK
Cik7CgpleHRlcm4gaW50IFhTdG9yZU5hbWVkQ29sb3IoCgogICAgRGlzcGxheSogLAogICAgQ29s
b3JtYXAgLAogICAgY29uc3QgY2hhciogLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBpbnQKCik7
CgpleHRlcm4gaW50IFhTeW5jKAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKCmV4dGVybiBp
bnQgWFRleHRFeHRlbnRzKAoKICAgIFhGb250U3RydWN0KiAsCiAgICBjb25zdCBjaGFyKiAsCiAg
ICBpbnQgLAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgWENoYXJTdHJ1Y3Qq
CgopOwoKZXh0ZXJuIGludCBYVGV4dEV4dGVudHMxNigKCiAgICBYRm9udFN0cnVjdCogLAogICAg
Y29uc3QgWENoYXIyYiogLAogICAgaW50ICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBpbnQq
ICwKICAgIFhDaGFyU3RydWN0KgoKKTsKCmV4dGVybiBpbnQgWFRleHRXaWR0aCgKCiAgICBYRm9u
dFN0cnVjdCogLAogICAgY29uc3QgY2hhciogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYVGV4
dFdpZHRoMTYoCgogICAgWEZvbnRTdHJ1Y3QqICwKICAgIGNvbnN0IFhDaGFyMmIqICwKICAgIGlu
dAoKKTsKCmV4dGVybiBpbnQgWFRyYW5zbGF0ZUNvb3JkaW5hdGVzKAoKICAgIERpc3BsYXkqICwK
ICAgIFdpbmRvdyAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQqICwK
ICAgIGludCogLAogICAgV2luZG93KgoKKTsKCmV4dGVybiBpbnQgWFVuZGVmaW5lQ3Vyc29yKAoK
ICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWFVuZ3JhYkJ1dHRvbigK
CiAgICBEaXNwbGF5KiAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAg
IFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWFVuZ3JhYktleSgKCiAgICBEaXNwbGF5KiAsCiAgICBp
bnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWFVuZ3Jh
YktleWJvYXJkKAoKICAgIERpc3BsYXkqICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50IFhVbmdy
YWJQb2ludGVyKAoKICAgIERpc3BsYXkqICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50IFhVbmdy
YWJTZXJ2ZXIoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhVbmluc3RhbGxDb2xvcm1h
cCgKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcAoKKTsKCmV4dGVybiBpbnQgWFVubG9hZEZv
bnQoCgogICAgRGlzcGxheSogLAogICAgRm9udAoKKTsKCmV4dGVybiBpbnQgWFVubWFwU3Vid2lu
ZG93cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhVbm1hcFdp
bmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhWZW5kb3JS
ZWxlYXNlKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGludCBYV2FycFBvaW50ZXIoCgogICAg
RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgaW50ICwK
ICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAgIGludAoK
KTsKCmV4dGVybiBpbnQgWFdpZHRoTU1PZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKZXh0ZXJu
IGludCBYV2lkdGhPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKZXh0ZXJuIGludCBYV2luZG93
RXZlbnQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGxvbmcgLAogICAgWEV2ZW50
KgoKKTsKCmV4dGVybiBpbnQgWFdyaXRlQml0bWFwRmlsZSgKCiAgICBEaXNwbGF5KiAsCiAgICBj
b25zdCBjaGFyKiAsCiAgICBQaXhtYXAgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVk
IGludCAsCiAgICBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU3VwcG9ydHNMb2NhbGUg
KHZvaWQpOwoKZXh0ZXJuIGNoYXIgKlhTZXRMb2NhbGVNb2RpZmllcnMoCiAgICBjb25zdCBjaGFy
KgopOwoKZXh0ZXJuIFhPTSBYT3Blbk9NKAoKICAgIERpc3BsYXkqICwKICAgIHN0cnVjdCBfWHJt
SGFzaEJ1Y2tldFJlYyogLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhcioKCik7Cgpl
eHRlcm4gaW50IFhDbG9zZU9NKAoKICAgIFhPTQoKKTsKCmV4dGVybiBjaGFyICpYU2V0T01WYWx1
ZXMoCgogICAgWE9NICwKICAgIC4uLgoKKTsKCmV4dGVybiBjaGFyICpYR2V0T01WYWx1ZXMoCgog
ICAgWE9NICwKICAgIC4uLgoKKTsKCmV4dGVybiBEaXNwbGF5ICpYRGlzcGxheU9mT00oCgogICAg
WE9NCgopOwoKZXh0ZXJuIGNoYXIgKlhMb2NhbGVPZk9NKAoKICAgIFhPTQoKKTsKCmV4dGVybiBY
T0MgWENyZWF0ZU9DKAoKICAgIFhPTSAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBYRGVzdHJv
eU9DKAoKICAgIFhPQwoKKTsKCmV4dGVybiBYT00gWE9NT2ZPQygKCiAgICBYT0MKCik7CgpleHRl
cm4gY2hhciAqWFNldE9DVmFsdWVzKAoKICAgIFhPQyAsCiAgICAuLi4KCik7CgpleHRlcm4gY2hh
ciAqWEdldE9DVmFsdWVzKAoKICAgIFhPQyAsCiAgICAuLi4KCik7CgpleHRlcm4gWEZvbnRTZXQg
WENyZWF0ZUZvbnRTZXQoCgogICAgRGlzcGxheSogLAogICAgY29uc3QgY2hhciogLAogICAgY2hh
cioqKiAsCiAgICBpbnQqICwKICAgIGNoYXIqKgoKKTsKCmV4dGVybiB2b2lkIFhGcmVlRm9udFNl
dCgKCiAgICBEaXNwbGF5KiAsCiAgICBYRm9udFNldAoKKTsKCmV4dGVybiBpbnQgWEZvbnRzT2ZG
b250U2V0KAoKICAgIFhGb250U2V0ICwKICAgIFhGb250U3RydWN0KioqICwKICAgIGNoYXIqKioK
Cik7CgpleHRlcm4gY2hhciAqWEJhc2VGb250TmFtZUxpc3RPZkZvbnRTZXQoCgogICAgWEZvbnRT
ZXQKCik7CgpleHRlcm4gY2hhciAqWExvY2FsZU9mRm9udFNldCgKCiAgICBYRm9udFNldAoKKTsK
CmV4dGVybiBpbnQgWENvbnRleHREZXBlbmRlbnREcmF3aW5nKAoKICAgIFhGb250U2V0CgopOwoK
ZXh0ZXJuIGludCBYRGlyZWN0aW9uYWxEZXBlbmRlbnREcmF3aW5nKAoKICAgIFhGb250U2V0Cgop
OwoKZXh0ZXJuIGludCBYQ29udGV4dHVhbERyYXdpbmcoCgogICAgWEZvbnRTZXQKCik7CgpleHRl
cm4gWEZvbnRTZXRFeHRlbnRzICpYRXh0ZW50c09mRm9udFNldCgKCiAgICBYRm9udFNldAoKKTsK
CmV4dGVybiBpbnQgWG1iVGV4dEVzY2FwZW1lbnQoCgogICAgWEZvbnRTZXQgLAogICAgY29uc3Qg
Y2hhciogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYd2NUZXh0RXNjYXBlbWVudCgKCiAgICBY
Rm9udFNldCAsCiAgICBjb25zdCB3Y2hhcl90KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFh1
dGY4VGV4dEVzY2FwZW1lbnQoCgogICAgWEZvbnRTZXQgLAogICAgY29uc3QgY2hhciogLAogICAg
aW50CgopOwoKZXh0ZXJuIGludCBYbWJUZXh0RXh0ZW50cygKCiAgICBYRm9udFNldCAsCiAgICBj
b25zdCBjaGFyKiAsCiAgICBpbnQgLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3RhbmdsZSoK
Cik7CgpleHRlcm4gaW50IFh3Y1RleHRFeHRlbnRzKAoKICAgIFhGb250U2V0ICwKICAgIGNvbnN0
IHdjaGFyX3QqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBYUmVjdGFuZ2xlKgoK
KTsKCmV4dGVybiBpbnQgWHV0ZjhUZXh0RXh0ZW50cygKCiAgICBYRm9udFNldCAsCiAgICBjb25z
dCBjaGFyKiAsCiAgICBpbnQgLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3RhbmdsZSoKCik7
CgpleHRlcm4gaW50IFhtYlRleHRQZXJDaGFyRXh0ZW50cygKCiAgICBYRm9udFNldCAsCiAgICBj
b25zdCBjaGFyKiAsCiAgICBpbnQgLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3RhbmdsZSog
LAogICAgaW50ICwKICAgIGludCogLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3RhbmdsZSoK
Cik7CgpleHRlcm4gaW50IFh3Y1RleHRQZXJDaGFyRXh0ZW50cygKCiAgICBYRm9udFNldCAsCiAg
ICBjb25zdCB3Y2hhcl90KiAsCiAgICBpbnQgLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3Rh
bmdsZSogLAogICAgaW50ICwKICAgIGludCogLAogICAgWFJlY3RhbmdsZSogLAogICAgWFJlY3Rh
bmdsZSoKCik7CgpleHRlcm4gaW50IFh1dGY4VGV4dFBlckNoYXJFeHRlbnRzKAoKICAgIFhGb250
U2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBY
UmVjdGFuZ2xlKiAsCiAgICBpbnQgLAogICAgaW50KiAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBY
UmVjdGFuZ2xlKgoKKTsKCmV4dGVybiB2b2lkIFhtYkRyYXdUZXh0KAoKICAgIERpc3BsYXkqICwK
ICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgWG1iVGV4dEl0
ZW0qICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFh3Y0RyYXdUZXh0KAoKICAgIERpc3BsYXkq
ICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgWHdjVGV4
dEl0ZW0qICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFh1dGY4RHJhd1RleHQoCgogICAgRGlz
cGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBY
bWJUZXh0SXRlbSogLAogICAgaW50CgopOwoKZXh0ZXJuIHZvaWQgWG1iRHJhd1N0cmluZygKCiAg
ICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBYRm9udFNldCAsCiAgICBHQyAsCiAgICBp
bnQgLAogICAgaW50ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lk
IFh3Y0RyYXdTdHJpbmcoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgWEZvbnRT
ZXQgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25zdCB3Y2hhcl90KiAsCiAg
ICBpbnQKCik7CgpleHRlcm4gdm9pZCBYdXRmOERyYXdTdHJpbmcoCgogICAgRGlzcGxheSogLAog
ICAgRHJhd2FibGUgLAogICAgWEZvbnRTZXQgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAs
CiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRlcm4gdm9pZCBYbWJEcmF3SW1hZ2VT
dHJpbmcoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgWEZvbnRTZXQgLAogICAg
R0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQKCik7Cgpl
eHRlcm4gdm9pZCBYd2NEcmF3SW1hZ2VTdHJpbmcoCgogICAgRGlzcGxheSogLAogICAgRHJhd2Fi
bGUgLAogICAgWEZvbnRTZXQgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25z
dCB3Y2hhcl90KiAsCiAgICBpbnQKCik7CgpleHRlcm4gdm9pZCBYdXRmOERyYXdJbWFnZVN0cmlu
ZygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBYRm9udFNldCAsCiAgICBHQyAs
CiAgICBpbnQgLAogICAgaW50ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludAoKKTsKCmV4dGVy
biBYSU0gWE9wZW5JTSgKCiAgICBEaXNwbGF5KiAsCiAgICBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRS
ZWMqICwKICAgIGNoYXIqICwKICAgIGNoYXIqCgopOwoKZXh0ZXJuIGludCBYQ2xvc2VJTSgKCiAg
ICBYSU0KCik7CgpleHRlcm4gY2hhciAqWEdldElNVmFsdWVzKAoKICAgIFhJTSAsIC4uLgoKKTsK
CmV4dGVybiBEaXNwbGF5ICpYRGlzcGxheU9mSU0oCgogICAgWElNCgopOwoKZXh0ZXJuIGNoYXIg
KlhMb2NhbGVPZklNKAoKICAgIFhJTQoKKTsKCmV4dGVybiBYSUMgWENyZWF0ZUlDKAoKICAgIFhJ
TSAsIC4uLgoKKTsKCmV4dGVybiB2b2lkIFhEZXN0cm95SUMoCgogICAgWElDCgopOwoKZXh0ZXJu
IHZvaWQgWFNldElDRm9jdXMoCgogICAgWElDCgopOwoKZXh0ZXJuIHZvaWQgWFVuc2V0SUNGb2N1
cygKCiAgICBYSUMKCik7CgpleHRlcm4gd2NoYXJfdCAqWHdjUmVzZXRJQygKCiAgICBYSUMKCik7
CgpleHRlcm4gY2hhciAqWG1iUmVzZXRJQygKCiAgICBYSUMKCik7CgpleHRlcm4gY2hhciAqWHV0
ZjhSZXNldElDKAoKICAgIFhJQwoKKTsKCmV4dGVybiBjaGFyICpYU2V0SUNWYWx1ZXMoCgogICAg
WElDICwgLi4uCgopOwoKZXh0ZXJuIGNoYXIgKlhHZXRJQ1ZhbHVlcygKCiAgICBYSUMgLCAuLi4K
Cik7CgpleHRlcm4gWElNIFhJTU9mSUMoCgogICAgWElDCgopOwoKZXh0ZXJuIGludCBYRmlsdGVy
RXZlbnQoCgogICAgWEV2ZW50KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhtYkxvb2t1
cFN0cmluZygKCiAgICBYSUMgLAogICAgWEtleVByZXNzZWRFdmVudCogLAogICAgY2hhciogLAog
ICAgaW50ICwKICAgIEtleVN5bSogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWHdjTG9va3Vw
U3RyaW5nKAoKICAgIFhJQyAsCiAgICBYS2V5UHJlc3NlZEV2ZW50KiAsCiAgICB3Y2hhcl90KiAs
CiAgICBpbnQgLAogICAgS2V5U3ltKiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYdXRmOExv
b2t1cFN0cmluZygKCiAgICBYSUMgLAogICAgWEtleVByZXNzZWRFdmVudCogLAogICAgY2hhciog
LAogICAgaW50ICwKICAgIEtleVN5bSogLAogICAgaW50KgoKKTsKCmV4dGVybiBYVmFOZXN0ZWRM
aXN0IFhWYUNyZWF0ZU5lc3RlZExpc3QoCgogICAgaW50ICwgLi4uCgopOwoKCgpleHRlcm4gaW50
IFhSZWdpc3RlcklNSW5zdGFudGlhdGVDYWxsYmFjaygKCiAgICBEaXNwbGF5KiAsCiAgICBzdHJ1
Y3QgX1hybUhhc2hCdWNrZXRSZWMqICwKICAgIGNoYXIqICwKICAgIGNoYXIqICwKICAgIFhJRFBy
b2MgLAogICAgWFBvaW50ZXIKCik7CgpleHRlcm4gaW50IFhVbnJlZ2lzdGVySU1JbnN0YW50aWF0
ZUNhbGxiYWNrKAoKICAgIERpc3BsYXkqICwKICAgIHN0cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyog
LAogICAgY2hhciogLAogICAgY2hhciogLAogICAgWElEUHJvYyAsCiAgICBYUG9pbnRlcgoKKTsK
CnR5cGVkZWYgdm9pZCAoKlhDb25uZWN0aW9uV2F0Y2hQcm9jKSgKCiAgICBEaXNwbGF5KiAsCiAg
ICBYUG9pbnRlciAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFhQb2ludGVyKgoKKTsKCgpleHRl
cm4gaW50IFhJbnRlcm5hbENvbm5lY3Rpb25OdW1iZXJzKAoKICAgIERpc3BsYXkqICwKICAgIGlu
dCoqICwKICAgIGludCoKCik7CgpleHRlcm4gdm9pZCBYUHJvY2Vzc0ludGVybmFsQ29ubmVjdGlv
bigKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhBZGRDb25uZWN0aW9u
V2F0Y2goCgogICAgRGlzcGxheSogLAogICAgWENvbm5lY3Rpb25XYXRjaFByb2MgLAogICAgWFBv
aW50ZXIKCik7CgpleHRlcm4gdm9pZCBYUmVtb3ZlQ29ubmVjdGlvbldhdGNoKAoKICAgIERpc3Bs
YXkqICwKICAgIFhDb25uZWN0aW9uV2F0Y2hQcm9jICwKICAgIFhQb2ludGVyCgopOwoKZXh0ZXJu
IHZvaWQgWFNldEF1dGhvcml6YXRpb24oCgogICAgY2hhciAqICwKICAgIGludCAsCiAgICBjaGFy
ICogLAogICAgaW50CgopOwoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBsb25nIGZsYWdzOwog
ICAgICAgIGludCB4LCB5OwogICAgICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgICAgIGludCBt
aW5fd2lkdGgsIG1pbl9oZWlnaHQ7CiAgICAgICAgaW50IG1heF93aWR0aCwgbWF4X2hlaWdodDsK
ICAgICAgICBpbnQgd2lkdGhfaW5jLCBoZWlnaHRfaW5jOwogICAgICAgIHN0cnVjdCB7CiAgICAg
ICAgICAgICAgICBpbnQgeDsKICAgICAgICAgICAgICAgIGludCB5OwogICAgICAgIH0gbWluX2Fz
cGVjdCwgbWF4X2FzcGVjdDsKICAgICAgICBpbnQgYmFzZV93aWR0aCwgYmFzZV9oZWlnaHQ7CiAg
ICAgICAgaW50IHdpbl9ncmF2aXR5Owp9IFhTaXplSGludHM7CnR5cGVkZWYgc3RydWN0IHsKICAg
ICAgICBsb25nIGZsYWdzOwogICAgICAgIGludCBpbnB1dDsKCiAgICAgICAgaW50IGluaXRpYWxf
c3RhdGU7CiAgICAgICAgUGl4bWFwIGljb25fcGl4bWFwOwogICAgICAgIFdpbmRvdyBpY29uX3dp
bmRvdzsKICAgICAgICBpbnQgaWNvbl94LCBpY29uX3k7CiAgICAgICAgUGl4bWFwIGljb25fbWFz
azsKICAgICAgICBYSUQgd2luZG93X2dyb3VwOwoKfSBYV01IaW50czsKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgdW5zaWduZWQgY2hhciAqdmFsdWU7CiAgICBBdG9tIGVuY29kaW5nOwogICAgaW50IGZv
cm1hdDsKICAgIHVuc2lnbmVkIGxvbmcgbml0ZW1zOwp9IFhUZXh0UHJvcGVydHk7CgoKCgoKdHlw
ZWRlZiBlbnVtIHsKICAgIFhTdHJpbmdTdHlsZSwKICAgIFhDb21wb3VuZFRleHRTdHlsZSwKICAg
IFhUZXh0U3R5bGUsCiAgICBYU3RkSUNDVGV4dFN0eWxlLAoKICAgIFhVVEY4U3RyaW5nU3R5bGUK
fSBYSUNDRW5jb2RpbmdTdHlsZTsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgbWluX3dp
ZHRoLCBtaW5faGVpZ2h0OwogICAgICAgIGludCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7CiAgICAg
ICAgaW50IHdpZHRoX2luYywgaGVpZ2h0X2luYzsKfSBYSWNvblNpemU7Cgp0eXBlZGVmIHN0cnVj
dCB7CiAgICAgICAgY2hhciAqcmVzX25hbWU7CiAgICAgICAgY2hhciAqcmVzX2NsYXNzOwp9IFhD
bGFzc0hpbnQ7CnR5cGVkZWYgc3RydWN0IF9YQ29tcG9zZVN0YXR1cyB7CiAgICBYUG9pbnRlciBj
b21wb3NlX3B0cjsKICAgIGludCBjaGFyc19tYXRjaGVkOwp9IFhDb21wb3NlU3RhdHVzOwp0eXBl
ZGVmIHN0cnVjdCBfWFJlZ2lvbiAqUmVnaW9uOwp0eXBlZGVmIHN0cnVjdCB7CiAgVmlzdWFsICp2
aXN1YWw7CiAgVmlzdWFsSUQgdmlzdWFsaWQ7CiAgaW50IHNjcmVlbjsKICBpbnQgZGVwdGg7CgoK
CiAgaW50IGNsYXNzOwoKICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwogIHVuc2lnbmVkIGxvbmcg
Z3JlZW5fbWFzazsKICB1bnNpZ25lZCBsb25nIGJsdWVfbWFzazsKICBpbnQgY29sb3JtYXBfc2l6
ZTsKICBpbnQgYml0c19wZXJfcmdiOwp9IFhWaXN1YWxJbmZvOwp0eXBlZGVmIHN0cnVjdCB7CiAg
ICAgICAgQ29sb3JtYXAgY29sb3JtYXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyByZWRfbWF4Owog
ICAgICAgIHVuc2lnbmVkIGxvbmcgcmVkX211bHQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBncmVl
bl9tYXg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBncmVlbl9tdWx0OwogICAgICAgIHVuc2lnbmVk
IGxvbmcgYmx1ZV9tYXg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBibHVlX211bHQ7CiAgICAgICAg
dW5zaWduZWQgbG9uZyBiYXNlX3BpeGVsOwogICAgICAgIFZpc3VhbElEIHZpc3VhbGlkOwogICAg
ICAgIFhJRCBraWxsaWQ7Cn0gWFN0YW5kYXJkQ29sb3JtYXA7CnR5cGVkZWYgaW50IFhDb250ZXh0
OwoKCgoKCgoKCmV4dGVybiBYQ2xhc3NIaW50ICpYQWxsb2NDbGFzc0hpbnQgKAoKICAgIHZvaWQK
Cik7CgpleHRlcm4gWEljb25TaXplICpYQWxsb2NJY29uU2l6ZSAoCgogICAgdm9pZAoKKTsKCmV4
dGVybiBYU2l6ZUhpbnRzICpYQWxsb2NTaXplSGludHMgKAoKICAgIHZvaWQKCik7CgpleHRlcm4g
WFN0YW5kYXJkQ29sb3JtYXAgKlhBbGxvY1N0YW5kYXJkQ29sb3JtYXAgKAoKICAgIHZvaWQKCik7
CgpleHRlcm4gWFdNSGludHMgKlhBbGxvY1dNSGludHMgKAoKICAgIHZvaWQKCik7CgpleHRlcm4g
aW50IFhDbGlwQm94KAoKICAgIFJlZ2lvbiAsCiAgICBYUmVjdGFuZ2xlKgoKKTsKCmV4dGVybiBS
ZWdpb24gWENyZWF0ZVJlZ2lvbigKCiAgICB2b2lkCgopOwoKZXh0ZXJuIGNvbnN0IGNoYXIgKlhE
ZWZhdWx0U3RyaW5nICh2b2lkKTsKCmV4dGVybiBpbnQgWERlbGV0ZUNvbnRleHQoCgogICAgRGlz
cGxheSogLAogICAgWElEICwKICAgIFhDb250ZXh0CgopOwoKZXh0ZXJuIGludCBYRGVzdHJveVJl
Z2lvbigKCiAgICBSZWdpb24KCik7CgpleHRlcm4gaW50IFhFbXB0eVJlZ2lvbigKCiAgICBSZWdp
b24KCik7CgpleHRlcm4gaW50IFhFcXVhbFJlZ2lvbigKCiAgICBSZWdpb24gLAogICAgUmVnaW9u
CgopOwoKZXh0ZXJuIGludCBYRmluZENvbnRleHQoCgogICAgRGlzcGxheSogLAogICAgWElEICwK
ICAgIFhDb250ZXh0ICwKICAgIFhQb2ludGVyKgoKKTsKCmV4dGVybiBpbnQgWEdldENsYXNzSGlu
dCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWENsYXNzSGludCoKCik7CgpleHRl
cm4gaW50IFhHZXRJY29uU2l6ZXMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhJ
Y29uU2l6ZSoqICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhHZXROb3JtYWxIaW50cygKCiAg
ICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFNpemVIaW50cyoKCik7CgpleHRlcm4gaW50
IFhHZXRSR0JDb2xvcm1hcHMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhTdGFu
ZGFyZENvbG9ybWFwKiogLAogICAgaW50KiAsCiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYR2V0
U2l6ZUhpbnRzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKiAs
CiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYR2V0U3RhbmRhcmRDb2xvcm1hcCgKCiAgICBEaXNw
bGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFN0YW5kYXJkQ29sb3JtYXAqICwKICAgIEF0b20KCik7
CgpleHRlcm4gaW50IFhHZXRUZXh0UHJvcGVydHkoCgogICAgRGlzcGxheSogLAogICAgV2luZG93
ICwKICAgIFhUZXh0UHJvcGVydHkqICwKICAgIEF0b20KCik7CgpleHRlcm4gWFZpc3VhbEluZm8g
KlhHZXRWaXN1YWxJbmZvKAoKICAgIERpc3BsYXkqICwKICAgIGxvbmcgLAogICAgWFZpc3VhbElu
Zm8qICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhHZXRXTUNsaWVudE1hY2hpbmUoCgogICAg
RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIFhX
TUhpbnRzICpYR2V0V01IaW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRl
cm4gaW50IFhHZXRXTUljb25OYW1lKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBY
VGV4dFByb3BlcnR5KgoKKTsKCmV4dGVybiBpbnQgWEdldFdNTmFtZSgKCiAgICBEaXNwbGF5KiAs
CiAgICBXaW5kb3cgLAogICAgWFRleHRQcm9wZXJ0eSoKCik7CgpleHRlcm4gaW50IFhHZXRXTU5v
cm1hbEhpbnRzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKiAs
CiAgICBsb25nKgoKKTsKCmV4dGVybiBpbnQgWEdldFdNU2l6ZUhpbnRzKAoKICAgIERpc3BsYXkq
ICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKiAsCiAgICBsb25nKiAsCiAgICBBdG9tCgop
OwoKZXh0ZXJuIGludCBYR2V0Wm9vbUhpbnRzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAs
CiAgICBYU2l6ZUhpbnRzKgoKKTsKCmV4dGVybiBpbnQgWEludGVyc2VjdFJlZ2lvbigKCiAgICBS
ZWdpb24gLAogICAgUmVnaW9uICwKICAgIFJlZ2lvbgoKKTsKCmV4dGVybiB2b2lkIFhDb252ZXJ0
Q2FzZSgKCiAgICBLZXlTeW0gLAogICAgS2V5U3ltKiAsCiAgICBLZXlTeW0qCgopOwoKZXh0ZXJu
IGludCBYTG9va3VwU3RyaW5nKAoKICAgIFhLZXlFdmVudCogLAogICAgY2hhciogLAogICAgaW50
ICwKICAgIEtleVN5bSogLAogICAgWENvbXBvc2VTdGF0dXMqCgopOwoKZXh0ZXJuIGludCBYTWF0
Y2hWaXN1YWxJbmZvKAoKICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50
ICwKICAgIFhWaXN1YWxJbmZvKgoKKTsKCmV4dGVybiBpbnQgWE9mZnNldFJlZ2lvbigKCiAgICBS
ZWdpb24gLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFBvaW50SW5SZWdpb24o
CgogICAgUmVnaW9uICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gUmVnaW9uIFhQb2x5
Z29uUmVnaW9uKAoKICAgIFhQb2ludCogLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBp
bnQgWFJlY3RJblJlZ2lvbigKCiAgICBSZWdpb24gLAogICAgaW50ICwKICAgIGludCAsCiAgICB1
bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYU2F2ZUNvbnRl
eHQoCgogICAgRGlzcGxheSogLAogICAgWElEICwKICAgIFhDb250ZXh0ICwKICAgIGNvbnN0IGNo
YXIqCgopOwoKZXh0ZXJuIGludCBYU2V0Q2xhc3NIaW50KAoKICAgIERpc3BsYXkqICwKICAgIFdp
bmRvdyAsCiAgICBYQ2xhc3NIaW50KgoKKTsKCmV4dGVybiBpbnQgWFNldEljb25TaXplcygKCiAg
ICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWEljb25TaXplKiAsCiAgICBpbnQKCik7Cgpl
eHRlcm4gaW50IFhTZXROb3JtYWxIaW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAog
ICAgWFNpemVIaW50cyoKCik7CgpleHRlcm4gdm9pZCBYU2V0UkdCQ29sb3JtYXBzKAoKICAgIERp
c3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU3RhbmRhcmRDb2xvcm1hcCogLAogICAgaW50ICwK
ICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhTZXRTaXplSGludHMoCgogICAgRGlzcGxheSogLAog
ICAgV2luZG93ICwKICAgIFhTaXplSGludHMqICwKICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhT
ZXRTdGFuZGFyZFByb3BlcnRpZXMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGNv
bnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFBpeG1hcCAsCiAgICBjaGFyKiogLAog
ICAgaW50ICwKICAgIFhTaXplSGludHMqCgopOwoKZXh0ZXJuIHZvaWQgWFNldFRleHRQcm9wZXJ0
eSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFRleHRQcm9wZXJ0eSogLAogICAg
QXRvbQoKKTsKCmV4dGVybiB2b2lkIFhTZXRXTUNsaWVudE1hY2hpbmUoCgogICAgRGlzcGxheSog
LAogICAgV2luZG93ICwKICAgIFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIGludCBYU2V0V01I
aW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFdNSGludHMqCgopOwoKZXh0
ZXJuIHZvaWQgWFNldFdNSWNvbk5hbWUoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAg
IFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIHZvaWQgWFNldFdNTmFtZSgKCiAgICBEaXNwbGF5
KiAsCiAgICBXaW5kb3cgLAogICAgWFRleHRQcm9wZXJ0eSoKCik7CgpleHRlcm4gdm9pZCBYU2V0
V01Ob3JtYWxIaW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFNpemVIaW50
cyoKCik7CgpleHRlcm4gdm9pZCBYU2V0V01Qcm9wZXJ0aWVzKAoKICAgIERpc3BsYXkqICwKICAg
IFdpbmRvdyAsCiAgICBYVGV4dFByb3BlcnR5KiAsCiAgICBYVGV4dFByb3BlcnR5KiAsCiAgICBj
aGFyKiogLAogICAgaW50ICwKICAgIFhTaXplSGludHMqICwKICAgIFhXTUhpbnRzKiAsCiAgICBY
Q2xhc3NIaW50KgoKKTsKCmV4dGVybiB2b2lkIFhtYlNldFdNUHJvcGVydGllcygKCiAgICBEaXNw
bGF5KiAsCiAgICBXaW5kb3cgLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAog
ICAgY2hhcioqICwKICAgIGludCAsCiAgICBYU2l6ZUhpbnRzKiAsCiAgICBYV01IaW50cyogLAog
ICAgWENsYXNzSGludCoKCik7CgpleHRlcm4gdm9pZCBYdXRmOFNldFdNUHJvcGVydGllcygKCiAg
ICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hh
ciogLAogICAgY2hhcioqICwKICAgIGludCAsCiAgICBYU2l6ZUhpbnRzKiAsCiAgICBYV01IaW50
cyogLAogICAgWENsYXNzSGludCoKCik7CgpleHRlcm4gdm9pZCBYU2V0V01TaXplSGludHMoCgog
ICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhTaXplSGludHMqICwKICAgIEF0b20KCik7
CgpleHRlcm4gaW50IFhTZXRSZWdpb24oCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgUmVn
aW9uCgopOwoKZXh0ZXJuIHZvaWQgWFNldFN0YW5kYXJkQ29sb3JtYXAoCgogICAgRGlzcGxheSog
LAogICAgV2luZG93ICwKICAgIFhTdGFuZGFyZENvbG9ybWFwKiAsCiAgICBBdG9tCgopOwoKZXh0
ZXJuIGludCBYU2V0Wm9vbUhpbnRzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBY
U2l6ZUhpbnRzKgoKKTsKCmV4dGVybiBpbnQgWFNocmlua1JlZ2lvbigKCiAgICBSZWdpb24gLAog
ICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFN0cmluZ0xpc3RUb1RleHRQcm9wZXJ0
eSgKCiAgICBjaGFyKiogLAogICAgaW50ICwKICAgIFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJu
IGludCBYU3VidHJhY3RSZWdpb24oCgogICAgUmVnaW9uICwKICAgIFJlZ2lvbiAsCiAgICBSZWdp
b24KCik7CgpleHRlcm4gaW50IFhtYlRleHRMaXN0VG9UZXh0UHJvcGVydHkoCiAgICBEaXNwbGF5
KiBkaXNwbGF5LAogICAgY2hhcioqIGxpc3QsCiAgICBpbnQgY291bnQsCiAgICBYSUNDRW5jb2Rp
bmdTdHlsZSBzdHlsZSwKICAgIFhUZXh0UHJvcGVydHkqIHRleHRfcHJvcF9yZXR1cm4KKTsKCmV4
dGVybiBpbnQgWHdjVGV4dExpc3RUb1RleHRQcm9wZXJ0eSgKICAgIERpc3BsYXkqIGRpc3BsYXks
CiAgICB3Y2hhcl90KiogbGlzdCwKICAgIGludCBjb3VudCwKICAgIFhJQ0NFbmNvZGluZ1N0eWxl
IHN0eWxlLAogICAgWFRleHRQcm9wZXJ0eSogdGV4dF9wcm9wX3JldHVybgopOwoKZXh0ZXJuIGlu
dCBYdXRmOFRleHRMaXN0VG9UZXh0UHJvcGVydHkoCiAgICBEaXNwbGF5KiBkaXNwbGF5LAogICAg
Y2hhcioqIGxpc3QsCiAgICBpbnQgY291bnQsCiAgICBYSUNDRW5jb2RpbmdTdHlsZSBzdHlsZSwK
ICAgIFhUZXh0UHJvcGVydHkqIHRleHRfcHJvcF9yZXR1cm4KKTsKCmV4dGVybiB2b2lkIFh3Y0Zy
ZWVTdHJpbmdMaXN0KAogICAgd2NoYXJfdCoqIGxpc3QKKTsKCmV4dGVybiBpbnQgWFRleHRQcm9w
ZXJ0eVRvU3RyaW5nTGlzdCgKCiAgICBYVGV4dFByb3BlcnR5KiAsCiAgICBjaGFyKioqICwKICAg
IGludCoKCik7CgpleHRlcm4gaW50IFhtYlRleHRQcm9wZXJ0eVRvVGV4dExpc3QoCiAgICBEaXNw
bGF5KiBkaXNwbGF5LAogICAgY29uc3QgWFRleHRQcm9wZXJ0eSogdGV4dF9wcm9wLAogICAgY2hh
cioqKiBsaXN0X3JldHVybiwKICAgIGludCogY291bnRfcmV0dXJuCik7CgpleHRlcm4gaW50IFh3
Y1RleHRQcm9wZXJ0eVRvVGV4dExpc3QoCiAgICBEaXNwbGF5KiBkaXNwbGF5LAogICAgY29uc3Qg
WFRleHRQcm9wZXJ0eSogdGV4dF9wcm9wLAogICAgd2NoYXJfdCoqKiBsaXN0X3JldHVybiwKICAg
IGludCogY291bnRfcmV0dXJuCik7CgpleHRlcm4gaW50IFh1dGY4VGV4dFByb3BlcnR5VG9UZXh0
TGlzdCgKICAgIERpc3BsYXkqIGRpc3BsYXksCiAgICBjb25zdCBYVGV4dFByb3BlcnR5KiB0ZXh0
X3Byb3AsCiAgICBjaGFyKioqIGxpc3RfcmV0dXJuLAogICAgaW50KiBjb3VudF9yZXR1cm4KKTsK
CmV4dGVybiBpbnQgWFVuaW9uUmVjdFdpdGhSZWdpb24oCgogICAgWFJlY3RhbmdsZSogLAogICAg
UmVnaW9uICwKICAgIFJlZ2lvbgoKKTsKCmV4dGVybiBpbnQgWFVuaW9uUmVnaW9uKAoKICAgIFJl
Z2lvbiAsCiAgICBSZWdpb24gLAogICAgUmVnaW9uCgopOwoKZXh0ZXJuIGludCBYV01HZW9tZXRy
eSgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3Qg
Y2hhciogLAogICAgdW5zaWduZWQgaW50ICwKICAgIFhTaXplSGludHMqICwKICAgIGludCogLAog
ICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQg
WFhvclJlZ2lvbigKCiAgICBSZWdpb24gLAogICAgUmVnaW9uICwKICAgIFJlZ2lvbgoKKTsKCgoK
CgoKCgoKCmV4dGVybiBjaGFyICpYcGVybWFsbG9jKAoKICAgIHVuc2lnbmVkIGludAoKKTsKCgoK
CgoKCnR5cGVkZWYgaW50IFhybVF1YXJrLCAqWHJtUXVhcmtMaXN0OwoKCnR5cGVkZWYgY2hhciAq
WHJtU3RyaW5nOwoKCgpleHRlcm4gWHJtUXVhcmsgWHJtU3RyaW5nVG9RdWFyaygKCiAgICBjb25z
dCBjaGFyKgoKKTsKCmV4dGVybiBYcm1RdWFyayBYcm1QZXJtU3RyaW5nVG9RdWFyaygKCiAgICBj
b25zdCBjaGFyKgoKKTsKCgpleHRlcm4gWHJtU3RyaW5nIFhybVF1YXJrVG9TdHJpbmcoCgogICAg
WHJtUXVhcmsKCik7CgpleHRlcm4gWHJtUXVhcmsgWHJtVW5pcXVlUXVhcmsoCgogICAgdm9pZAoK
KTsKdHlwZWRlZiBlbnVtIHtYcm1CaW5kVGlnaHRseSwgWHJtQmluZExvb3NlbHl9IFhybUJpbmRp
bmcsICpYcm1CaW5kaW5nTGlzdDsKCmV4dGVybiB2b2lkIFhybVN0cmluZ1RvUXVhcmtMaXN0KAoK
ICAgIGNvbnN0IGNoYXIqICwKICAgIFhybVF1YXJrTGlzdAoKKTsKCmV4dGVybiB2b2lkIFhybVN0
cmluZ1RvQmluZGluZ1F1YXJrTGlzdCgKCiAgICBjb25zdCBjaGFyKiAsCiAgICBYcm1CaW5kaW5n
TGlzdCAsCiAgICBYcm1RdWFya0xpc3QKCik7CgoKCgoKCgp0eXBlZGVmIFhybVF1YXJrIFhybU5h
bWU7CnR5cGVkZWYgWHJtUXVhcmtMaXN0IFhybU5hbWVMaXN0OwoKCgoKdHlwZWRlZiBYcm1RdWFy
ayBYcm1DbGFzczsKdHlwZWRlZiBYcm1RdWFya0xpc3QgWHJtQ2xhc3NMaXN0Owp0eXBlZGVmIFhy
bVF1YXJrIFhybVJlcHJlc2VudGF0aW9uOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25l
ZCBpbnQgc2l6ZTsKICAgIFhQb2ludGVyIGFkZHI7Cn0gWHJtVmFsdWUsICpYcm1WYWx1ZVB0cjsK
dHlwZWRlZiBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMgKlhybUhhc2hCdWNrZXQ7CnR5cGVkZWYg
WHJtSGFzaEJ1Y2tldCAqWHJtSGFzaFRhYmxlOwp0eXBlZGVmIFhybUhhc2hUYWJsZSBYcm1TZWFy
Y2hMaXN0W107CnR5cGVkZWYgc3RydWN0IF9Ycm1IYXNoQnVja2V0UmVjICpYcm1EYXRhYmFzZTsK
CgpleHRlcm4gdm9pZCBYcm1EZXN0cm95RGF0YWJhc2UoCgogICAgWHJtRGF0YWJhc2UKCik7Cgpl
eHRlcm4gdm9pZCBYcm1RUHV0UmVzb3VyY2UoCgogICAgWHJtRGF0YWJhc2UqICwKICAgIFhybUJp
bmRpbmdMaXN0ICwKICAgIFhybVF1YXJrTGlzdCAsCiAgICBYcm1SZXByZXNlbnRhdGlvbiAsCiAg
ICBYcm1WYWx1ZSoKCik7CgpleHRlcm4gdm9pZCBYcm1QdXRSZXNvdXJjZSgKCiAgICBYcm1EYXRh
YmFzZSogLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgWHJtVmFsdWUq
CgopOwoKZXh0ZXJuIHZvaWQgWHJtUVB1dFN0cmluZ1Jlc291cmNlKAoKICAgIFhybURhdGFiYXNl
KiAsCiAgICBYcm1CaW5kaW5nTGlzdCAsCiAgICBYcm1RdWFya0xpc3QgLAogICAgY29uc3QgY2hh
cioKCik7CgpleHRlcm4gdm9pZCBYcm1QdXRTdHJpbmdSZXNvdXJjZSgKCiAgICBYcm1EYXRhYmFz
ZSogLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gdm9pZCBY
cm1QdXRMaW5lUmVzb3VyY2UoCgogICAgWHJtRGF0YWJhc2UqICwKICAgIGNvbnN0IGNoYXIqCgop
OwoKZXh0ZXJuIGludCBYcm1RR2V0UmVzb3VyY2UoCgogICAgWHJtRGF0YWJhc2UgLAogICAgWHJt
TmFtZUxpc3QgLAogICAgWHJtQ2xhc3NMaXN0ICwKICAgIFhybVJlcHJlc2VudGF0aW9uKiAsCiAg
ICBYcm1WYWx1ZSoKCik7CgpleHRlcm4gaW50IFhybUdldFJlc291cmNlKAoKICAgIFhybURhdGFi
YXNlICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNoYXIqKiAsCiAg
ICBYcm1WYWx1ZSoKCik7CgpleHRlcm4gaW50IFhybVFHZXRTZWFyY2hMaXN0KAoKICAgIFhybURh
dGFiYXNlICwKICAgIFhybU5hbWVMaXN0ICwKICAgIFhybUNsYXNzTGlzdCAsCiAgICBYcm1TZWFy
Y2hMaXN0ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWHJtUUdldFNlYXJjaFJlc291cmNlKAoK
ICAgIFhybVNlYXJjaExpc3QgLAogICAgWHJtTmFtZSAsCiAgICBYcm1DbGFzcyAsCiAgICBYcm1S
ZXByZXNlbnRhdGlvbiogLAogICAgWHJtVmFsdWUqCgopOwoKCgoKCgoKZXh0ZXJuIHZvaWQgWHJt
U2V0RGF0YWJhc2UoCgogICAgRGlzcGxheSogLAogICAgWHJtRGF0YWJhc2UKCik7CgpleHRlcm4g
WHJtRGF0YWJhc2UgWHJtR2V0RGF0YWJhc2UoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gWHJt
RGF0YWJhc2UgWHJtR2V0RmlsZURhdGFiYXNlKAoKICAgIGNvbnN0IGNoYXIqCgopOwoKZXh0ZXJu
IGludCBYcm1Db21iaW5lRmlsZURhdGFiYXNlKAoKICAgIGNvbnN0IGNoYXIqICwKICAgIFhybURh
dGFiYXNlKiAsCiAgICBpbnQKCik7CgpleHRlcm4gWHJtRGF0YWJhc2UgWHJtR2V0U3RyaW5nRGF0
YWJhc2UoCgogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gdm9pZCBYcm1QdXRGaWxlRGF0YWJh
c2UoCgogICAgWHJtRGF0YWJhc2UgLAogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gdm9pZCBY
cm1NZXJnZURhdGFiYXNlcygKCiAgICBYcm1EYXRhYmFzZSAsCiAgICBYcm1EYXRhYmFzZSoKCik7
CgpleHRlcm4gdm9pZCBYcm1Db21iaW5lRGF0YWJhc2UoCgogICAgWHJtRGF0YWJhc2UgLAogICAg
WHJtRGF0YWJhc2UqICwKICAgIGludAoKKTsKCgoKCmV4dGVybiBpbnQgWHJtRW51bWVyYXRlRGF0
YWJhc2UoCgogICAgWHJtRGF0YWJhc2UgLAogICAgWHJtTmFtZUxpc3QgLAogICAgWHJtQ2xhc3NM
aXN0ICwKICAgIGludCAsCiAgICBpbnQgKCopKAoKICAgICAgICAgICAgIFhybURhdGFiYXNlKiAs
CiAgICAgICAgICAgICBYcm1CaW5kaW5nTGlzdCAsCiAgICAgICAgICAgICBYcm1RdWFya0xpc3Qg
LAogICAgICAgICAgICAgWHJtUmVwcmVzZW50YXRpb24qICwKICAgICAgICAgICAgIFhybVZhbHVl
KiAsCiAgICAgICAgICAgICBYUG9pbnRlcgoKICAgICAgICAgICAgICkgLAogICAgWFBvaW50ZXIK
Cik7CgpleHRlcm4gY29uc3QgY2hhciAqWHJtTG9jYWxlT2ZEYXRhYmFzZSgKCiAgICBYcm1EYXRh
YmFzZQoKKTsKdHlwZWRlZiBlbnVtIHsKICAgIFhybW9wdGlvbk5vQXJnLAogICAgWHJtb3B0aW9u
SXNBcmcsCiAgICBYcm1vcHRpb25TdGlja3lBcmcsCiAgICBYcm1vcHRpb25TZXBBcmcsCiAgICBY
cm1vcHRpb25SZXNBcmcsCiAgICBYcm1vcHRpb25Ta2lwQXJnLAogICAgWHJtb3B0aW9uU2tpcExp
bmUsCiAgICBYcm1vcHRpb25Ta2lwTkFyZ3MKCn0gWHJtT3B0aW9uS2luZDsKCnR5cGVkZWYgc3Ry
dWN0IHsKICAgIGNoYXIgKm9wdGlvbjsKICAgIGNoYXIgKnNwZWNpZmllcjsKICAgIFhybU9wdGlv
bktpbmQgYXJnS2luZDsKICAgIFhQb2ludGVyIHZhbHVlOwp9IFhybU9wdGlvbkRlc2NSZWMsICpY
cm1PcHRpb25EZXNjTGlzdDsKCgpleHRlcm4gdm9pZCBYcm1QYXJzZUNvbW1hbmQoCgogICAgWHJt
RGF0YWJhc2UqICwKICAgIFhybU9wdGlvbkRlc2NMaXN0ICwKICAgIGludCAsCiAgICBjb25zdCBj
aGFyKiAsCiAgICBpbnQqICwKICAgIGNoYXIqKgoKKTsKCgp0eXBlZGVmIGNoYXIgKlN0cmluZzsK
dHlwZWRlZiBzdHJ1Y3QgX1dpZGdldFJlYyAqV2lkZ2V0Owp0eXBlZGVmIFdpZGdldCAqV2lkZ2V0
TGlzdDsKdHlwZWRlZiBzdHJ1Y3QgX1dpZGdldENsYXNzUmVjICpXaWRnZXRDbGFzczsKdHlwZWRl
ZiBzdHJ1Y3QgX0NvbXBvc2l0ZVJlYyAqQ29tcG9zaXRlV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBf
WHRBY3Rpb25zUmVjICpYdEFjdGlvbkxpc3Q7CnR5cGVkZWYgc3RydWN0IF9YdEV2ZW50UmVjICpY
dEV2ZW50VGFibGU7Cgp0eXBlZGVmIHN0cnVjdCBfWHRBcHBTdHJ1Y3QgKlh0QXBwQ29udGV4dDsK
dHlwZWRlZiB1bnNpZ25lZCBsb25nIFh0VmFsdWVNYXNrOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
WHRJbnRlcnZhbElkOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgWHRJbnB1dElkOwp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgWHRXb3JrUHJvY0lkOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgWHRTaWduYWxJ
ZDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgWHRHZW9tZXRyeU1hc2s7CnR5cGVkZWYgdW5zaWduZWQg
bG9uZyBYdEdDTWFzazsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFBpeGVsOwp0eXBlZGVmIGludCBY
dENhY2hlVHlwZTsKdHlwZWRlZiBjaGFyIEJvb2xlYW47CnR5cGVkZWYgbG9uZyBYdEFyZ1ZhbDsK
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIFh0RW51bTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBDYXJk
aW5hbDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBEaW1lbnNpb247CnR5cGVkZWYgc2hvcnQgUG9z
aXRpb247CgoKdHlwZWRlZiB2b2lkKiBYdFBvaW50ZXI7CgoKCgoKCnR5cGVkZWYgWHRQb2ludGVy
IE9wYXF1ZTsKdHlwZWRlZiBzdHJ1Y3QgX1dpZGdldENsYXNzUmVjICpDb3JlV2lkZ2V0Q2xhc3M7
CnR5cGVkZWYgc3RydWN0IF9XaWRnZXRSZWMgKkNvcmVXaWRnZXQ7CmV4dGVybiBXaWRnZXRDbGFz
cyBjb3JlV2lkZ2V0Q2xhc3M7CgoKZXh0ZXJuIFdpZGdldENsYXNzIHdpZGdldENsYXNzOwp0eXBl
ZGVmIHN0cnVjdCBfQ29tcG9zaXRlQ2xhc3NSZWMgKkNvbXBvc2l0ZVdpZGdldENsYXNzOwoKdHlw
ZWRlZiBDYXJkaW5hbCAoKlh0T3JkZXJQcm9jKSgKCiAgICBXaWRnZXQKCik7CgoKCmV4dGVybiB2
b2lkIFh0TWFuYWdlQ2hpbGRyZW4oCgogICAgV2lkZ2V0TGlzdCAsCiAgICBDYXJkaW5hbAoKKTsK
CmV4dGVybiB2b2lkIFh0TWFuYWdlQ2hpbGQoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIHZvaWQg
WHRVbm1hbmFnZUNoaWxkcmVuKAoKICAgIFdpZGdldExpc3QgLAogICAgQ2FyZGluYWwKCik7Cgpl
eHRlcm4gdm9pZCBYdFVubWFuYWdlQ2hpbGQoCgogICAgV2lkZ2V0CgopOwoKdHlwZWRlZiB2b2lk
ICgqWHREb0NoYW5nZVByb2MpKAoKICAgIFdpZGdldCAsCiAgICBXaWRnZXRMaXN0ICwKICAgIENh
cmRpbmFsICogLAogICAgV2lkZ2V0TGlzdCAsCiAgICBDYXJkaW5hbCAqICwKICAgIFh0UG9pbnRl
cgoKKTsKCmV4dGVybiB2b2lkIFh0Q2hhbmdlTWFuYWdlZFNldCgKCiAgICBXaWRnZXRMaXN0ICwK
ICAgIENhcmRpbmFsICwKICAgIFh0RG9DaGFuZ2VQcm9jICwKICAgIFh0UG9pbnRlciAsCiAgICBX
aWRnZXRMaXN0ICwKICAgIENhcmRpbmFsCgopOwoKCgoKZXh0ZXJuIFdpZGdldENsYXNzIGNvbXBv
c2l0ZVdpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfQ29uc3RyYWludENsYXNzUmVjICpDb25z
dHJhaW50V2lkZ2V0Q2xhc3M7CgoKZXh0ZXJuIFdpZGdldENsYXNzIGNvbnN0cmFpbnRXaWRnZXRD
bGFzczsKdHlwZWRlZiBzdHJ1Y3QgX09iamVjdFJlYyAqT2JqZWN0Owp0eXBlZGVmIHN0cnVjdCBf
T2JqZWN0Q2xhc3NSZWMgKk9iamVjdENsYXNzOwoKCmV4dGVybiBXaWRnZXRDbGFzcyBvYmplY3RD
bGFzczsKdHlwZWRlZiBzdHJ1Y3QgX1JlY3RPYmpSZWMgKlJlY3RPYmo7CnR5cGVkZWYgc3RydWN0
IF9SZWN0T2JqQ2xhc3NSZWMgKlJlY3RPYmpDbGFzczsKCgpleHRlcm4gV2lkZ2V0Q2xhc3MgcmVj
dE9iakNsYXNzOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1RyYW5zbGF0aW9uRGF0YSAqWHRUcmFuc2xh
dGlvbnM7CnR5cGVkZWYgc3RydWN0IF9UcmFuc2xhdGlvbkRhdGEgKlh0QWNjZWxlcmF0b3JzOwp0
eXBlZGVmIHVuc2lnbmVkIGludCBNb2RpZmllcnM7Cgp0eXBlZGVmIHZvaWQgKCpYdEFjdGlvblBy
b2MpKAoKICAgIFdpZGdldCAsCiAgICBYRXZlbnQqICwKICAgIFN0cmluZyogLAogICAgQ2FyZGlu
YWwqCgopOwoKdHlwZWRlZiBYdEFjdGlvblByb2MqIFh0Qm91bmRBY3Rpb25zOwoKdHlwZWRlZiBz
dHJ1Y3QgX1h0QWN0aW9uc1JlY3sKICAgIFN0cmluZyBzdHJpbmc7CiAgICBYdEFjdGlvblByb2Mg
cHJvYzsKfSBYdEFjdGlvbnNSZWM7Cgp0eXBlZGVmIGVudW0gewoKCiAgICBYdEFkZHJlc3MsCiAg
ICBYdEJhc2VPZmZzZXQsCiAgICBYdEltbWVkaWF0ZSwKICAgIFh0UmVzb3VyY2VTdHJpbmcsCiAg
ICBYdFJlc291cmNlUXVhcmssCiAgICBYdFdpZGdldEJhc2VPZmZzZXQsCiAgICBYdFByb2NlZHVy
ZUFyZwp9IFh0QWRkcmVzc01vZGU7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYdEFkZHJlc3NNb2Rl
IGFkZHJlc3NfbW9kZTsKICAgIFh0UG9pbnRlciBhZGRyZXNzX2lkOwogICAgQ2FyZGluYWwgc2l6
ZTsKfSBYdENvbnZlcnRBcmdSZWMsICpYdENvbnZlcnRBcmdMaXN0OwoKdHlwZWRlZiB2b2lkICgq
WHRDb252ZXJ0QXJnUHJvYykoCgogICAgV2lkZ2V0ICwKICAgIENhcmRpbmFsKiAsCiAgICBYcm1W
YWx1ZSoKCik7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYdEdlb21ldHJ5TWFzayByZXF1ZXN0X21v
ZGU7CiAgICBQb3NpdGlvbiB4LCB5OwogICAgRGltZW5zaW9uIHdpZHRoLCBoZWlnaHQsIGJvcmRl
cl93aWR0aDsKICAgIFdpZGdldCBzaWJsaW5nOwogICAgaW50IHN0YWNrX21vZGU7Cn0gWHRXaWRn
ZXRHZW9tZXRyeTsKCgoKCgoKCnR5cGVkZWYgdm9pZCAoKlh0Q29udmVydGVyKSgKCiAgICBYcm1W
YWx1ZSogLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlKiAsCiAgICBYcm1WYWx1ZSoKCik7
Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdFR5cGVDb252ZXJ0ZXIpKAoKICAgIERpc3BsYXkqICwKICAg
IFhybVZhbHVlKiAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWUqICwKICAgIFhybVZhbHVl
KiAsCiAgICBYdFBvaW50ZXIqCgopOwoKdHlwZWRlZiB2b2lkICgqWHREZXN0cnVjdG9yKSgKCiAg
ICBYdEFwcENvbnRleHQgLAogICAgWHJtVmFsdWUqICwKICAgIFh0UG9pbnRlciAsCiAgICBYcm1W
YWx1ZSogLAogICAgQ2FyZGluYWwqCgopOwoKdHlwZWRlZiBPcGFxdWUgWHRDYWNoZVJlZjsKCnR5
cGVkZWYgT3BhcXVlIFh0QWN0aW9uSG9va0lkOwoKdHlwZWRlZiB2b2lkICgqWHRBY3Rpb25Ib29r
UHJvYykoCgogICAgV2lkZ2V0ICwKICAgIFh0UG9pbnRlciAsCiAgICBTdHJpbmcgLAogICAgWEV2
ZW50KiAsCiAgICBTdHJpbmcqICwKICAgIENhcmRpbmFsKgoKKTsKCnR5cGVkZWYgdW5zaWduZWQg
bG9uZyBYdEJsb2NrSG9va0lkOwoKdHlwZWRlZiB2b2lkICgqWHRCbG9ja0hvb2tQcm9jKSgKCiAg
ICBYdFBvaW50ZXIKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdEtleVByb2MpKAoKICAgIERpc3BsYXkq
ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBNb2RpZmllcnMgLAogICAgTW9kaWZpZXJzKiAsCiAg
ICBLZXlTeW0qCgopOwoKdHlwZWRlZiB2b2lkICgqWHRDYXNlUHJvYykoCgogICAgRGlzcGxheSog
LAogICAgS2V5U3ltICwKICAgIEtleVN5bSogLAogICAgS2V5U3ltKgoKKTsKCnR5cGVkZWYgdm9p
ZCAoKlh0RXZlbnRIYW5kbGVyKSgKCiAgICBXaWRnZXQgLAogICAgWHRQb2ludGVyICwKICAgIFhF
dmVudCogLAogICAgQm9vbGVhbioKCik7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBFdmVudE1hc2s7
Cgp0eXBlZGVmIGVudW0ge1h0TGlzdEhlYWQsIFh0TGlzdFRhaWwgfSBYdExpc3RQb3NpdGlvbjsK
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYdElucHV0TWFzazsKCgoKCgp0eXBlZGVmIHZvaWQgKCpY
dFRpbWVyQ2FsbGJhY2tQcm9jKSgKCiAgICBYdFBvaW50ZXIgLAogICAgWHRJbnRlcnZhbElkKgoK
KTsKCnR5cGVkZWYgdm9pZCAoKlh0SW5wdXRDYWxsYmFja1Byb2MpKAoKICAgIFh0UG9pbnRlciAs
CiAgICBpbnQqICwKICAgIFh0SW5wdXRJZCoKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdFNpZ25hbENh
bGxiYWNrUHJvYykoCgogICAgWHRQb2ludGVyICwKICAgIFh0U2lnbmFsSWQqCgopOwoKdHlwZWRl
ZiBzdHJ1Y3QgewogICAgU3RyaW5nIG5hbWU7CiAgICBYdEFyZ1ZhbCB2YWx1ZTsKfSBBcmcsICpB
cmdMaXN0OwoKdHlwZWRlZiBYdFBvaW50ZXIgWHRWYXJBcmdzTGlzdDsKCnR5cGVkZWYgdm9pZCAo
Klh0Q2FsbGJhY2tQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgWHRQb2ludGVyICwKICAgIFh0UG9p
bnRlcgoKKTsKCnR5cGVkZWYgc3RydWN0IF9YdENhbGxiYWNrUmVjIHsKICAgIFh0Q2FsbGJhY2tQ
cm9jIGNhbGxiYWNrOwogICAgWHRQb2ludGVyIGNsb3N1cmU7Cn0gWHRDYWxsYmFja1JlYywgKlh0
Q2FsbGJhY2tMaXN0OwoKdHlwZWRlZiBlbnVtIHsKICAgICAgICBYdENhbGxiYWNrTm9MaXN0LAog
ICAgICAgIFh0Q2FsbGJhY2tIYXNOb25lLAogICAgICAgIFh0Q2FsbGJhY2tIYXNTb21lCn0gWHRD
YWxsYmFja1N0YXR1czsKCnR5cGVkZWYgZW51bSB7CiAgICBYdEdlb21ldHJ5WWVzLAogICAgWHRH
ZW9tZXRyeU5vLAogICAgWHRHZW9tZXRyeUFsbW9zdCwKICAgIFh0R2VvbWV0cnlEb25lCn0gWHRH
ZW9tZXRyeVJlc3VsdDsKCnR5cGVkZWYgZW51bSB7WHRHcmFiTm9uZSwgWHRHcmFiTm9uZXhjbHVz
aXZlLCBYdEdyYWJFeGNsdXNpdmV9IFh0R3JhYktpbmQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBX
aWRnZXQgc2hlbGxfd2lkZ2V0OwogICAgV2lkZ2V0IGVuYWJsZV93aWRnZXQ7Cn0gWHRQb3Bkb3du
SURSZWMsICpYdFBvcGRvd25JRDsKCnR5cGVkZWYgc3RydWN0IF9YdFJlc291cmNlIHsKICAgIFN0
cmluZyByZXNvdXJjZV9uYW1lOwogICAgU3RyaW5nIHJlc291cmNlX2NsYXNzOwogICAgU3RyaW5n
IHJlc291cmNlX3R5cGU7CiAgICBDYXJkaW5hbCByZXNvdXJjZV9zaXplOwogICAgQ2FyZGluYWwg
cmVzb3VyY2Vfb2Zmc2V0OwogICAgU3RyaW5nIGRlZmF1bHRfdHlwZTsKICAgIFh0UG9pbnRlciBk
ZWZhdWx0X2FkZHI7Cn0gWHRSZXNvdXJjZSwgKlh0UmVzb3VyY2VMaXN0OwoKdHlwZWRlZiB2b2lk
ICgqWHRSZXNvdXJjZURlZmF1bHRQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgaW50ICwKICAgIFhy
bVZhbHVlKgoKKTsKCnR5cGVkZWYgU3RyaW5nICgqWHRMYW5ndWFnZVByb2MpKAoKICAgIERpc3Bs
YXkqICwKICAgIFN0cmluZyAsCiAgICBYdFBvaW50ZXIKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdEVy
cm9yTXNnSGFuZGxlcikoCgogICAgU3RyaW5nICwKICAgIFN0cmluZyAsCiAgICBTdHJpbmcgLAog
ICAgU3RyaW5nICwKICAgIFN0cmluZyogLAogICAgQ2FyZGluYWwqCgopOwoKdHlwZWRlZiB2b2lk
ICgqWHRFcnJvckhhbmRsZXIpKAoKICBTdHJpbmcKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdENyZWF0
ZVBvcHVwQ2hpbGRQcm9jKSgKCiAgICBXaWRnZXQKCik7Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdFdv
cmtQcm9jKSgKCiAgICBYdFBvaW50ZXIKCik7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyIG1h
dGNoOwogICAgU3RyaW5nIHN1YnN0aXR1dGlvbjsKfSBTdWJzdGl0dXRpb25SZWMsICpTdWJzdGl0
dXRpb247Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdEZpbGVQcmVkaWNhdGUpKAoKICAgU3RyaW5nCgop
OwoKdHlwZWRlZiBYdFBvaW50ZXIgWHRSZXF1ZXN0SWQ7Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdENv
bnZlcnRTZWxlY3Rpb25Qcm9jKSgKCiAgICBXaWRnZXQgLAogICAgQXRvbSogLAogICAgQXRvbSog
LAogICAgQXRvbSogLAogICAgWHRQb2ludGVyKiAsCiAgICB1bnNpZ25lZCBsb25nKiAsCiAgICBp
bnQqCgopOwoKdHlwZWRlZiB2b2lkICgqWHRMb3NlU2VsZWN0aW9uUHJvYykoCgogICAgV2lkZ2V0
ICwKICAgIEF0b20qCgopOwoKdHlwZWRlZiB2b2lkICgqWHRTZWxlY3Rpb25Eb25lUHJvYykoCgog
ICAgV2lkZ2V0ICwKICAgIEF0b20qICwKICAgIEF0b20qCgopOwoKdHlwZWRlZiB2b2lkICgqWHRT
ZWxlY3Rpb25DYWxsYmFja1Byb2MpKAoKICAgIFdpZGdldCAsCiAgICBYdFBvaW50ZXIgLAogICAg
QXRvbSogLAogICAgQXRvbSogLAogICAgWHRQb2ludGVyICwKICAgIHVuc2lnbmVkIGxvbmcqICwK
ICAgIGludCoKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdExvc2VTZWxlY3Rpb25JbmNyUHJvYykoCgog
ICAgV2lkZ2V0ICwKICAgIEF0b20qICwKICAgIFh0UG9pbnRlcgoKKTsKCnR5cGVkZWYgdm9pZCAo
Klh0U2VsZWN0aW9uRG9uZUluY3JQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgQXRvbSogLAogICAg
QXRvbSogLAogICAgWHRSZXF1ZXN0SWQqICwKICAgIFh0UG9pbnRlcgoKKTsKCnR5cGVkZWYgQm9v
bGVhbiAoKlh0Q29udmVydFNlbGVjdGlvbkluY3JQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgQXRv
bSogLAogICAgQXRvbSogLAogICAgQXRvbSogLAogICAgWHRQb2ludGVyKiAsCiAgICB1bnNpZ25l
ZCBsb25nKiAsCiAgICBpbnQqICwKICAgIHVuc2lnbmVkIGxvbmcqICwKICAgIFh0UG9pbnRlciAs
CiAgICBYdFJlcXVlc3RJZCoKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdENhbmNlbENvbnZlcnRTZWxl
Y3Rpb25Qcm9jKSgKCiAgICBXaWRnZXQgLAogICAgQXRvbSogLAogICAgQXRvbSogLAogICAgWHRS
ZXF1ZXN0SWQqICwKICAgIFh0UG9pbnRlcgoKKTsKCnR5cGVkZWYgQm9vbGVhbiAoKlh0RXZlbnRE
aXNwYXRjaFByb2MpKAoKICAgIFhFdmVudCoKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdEV4dGVuc2lv
blNlbGVjdFByb2MpKAoKICAgIFdpZGdldCAsCiAgICBpbnQqICwKICAgIFh0UG9pbnRlciogLAog
ICAgaW50ICwKICAgIFh0UG9pbnRlcgoKKTsKCgoKCgoKCgoKZXh0ZXJuIEJvb2xlYW4gWHRDb252
ZXJ0QW5kU3RvcmUoCgogICAgV2lkZ2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFhybVZhbHVl
KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBYcm1WYWx1ZSoKCik7CgpleHRlcm4gQm9vbGVhbiBY
dENhbGxDb252ZXJ0ZXIoCgogICAgRGlzcGxheSogLAogICAgWHRUeXBlQ29udmVydGVyICwKICAg
IFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFsICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZh
bHVlKiAsCiAgICBYdENhY2hlUmVmKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0RGlzcGF0Y2hFdmVu
dCgKCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDYWxsQWNjZXB0Rm9jdXMoCgog
ICAgV2lkZ2V0ICwKICAgIFRpbWUqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRQZWVrRXZlbnQoCgog
ICAgWEV2ZW50KgoKKTsKCmV4dGVybiBCb29sZWFuIFh0QXBwUGVla0V2ZW50KAoKICAgIFh0QXBw
Q29udGV4dCAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc1N1YmNsYXNzKAoK
ICAgIFdpZGdldCAsCiAgICBXaWRnZXRDbGFzcwoKKTsKCmV4dGVybiBCb29sZWFuIFh0SXNPYmpl
Y3QoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIEJvb2xlYW4gX1h0Q2hlY2tTdWJjbGFzc0ZsYWco
CgogICAgV2lkZ2V0ICwKICAgIHVuc2lnbmVkIGludAoKKTsKCmV4dGVybiBCb29sZWFuIF9YdElz
U3ViY2xhc3NPZigKCiAgICBXaWRnZXQgLAogICAgV2lkZ2V0Q2xhc3MgLAogICAgV2lkZ2V0Q2xh
c3MgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc01hbmFnZWQoCgog
ICAgV2lkZ2V0CgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc1JlYWxpemVkKAoKICAgIFdpZGdldAoK
KTsKCmV4dGVybiBCb29sZWFuIFh0SXNTZW5zaXRpdmUoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJu
IEJvb2xlYW4gWHRPd25TZWxlY3Rpb24oCgogICAgV2lkZ2V0ICwKICAgIEF0b20gLAogICAgVGlt
ZSAsCiAgICBYdENvbnZlcnRTZWxlY3Rpb25Qcm9jICwKICAgIFh0TG9zZVNlbGVjdGlvblByb2Mg
LAogICAgWHRTZWxlY3Rpb25Eb25lUHJvYwoKKTsKCmV4dGVybiBCb29sZWFuIFh0T3duU2VsZWN0
aW9uSW5jcmVtZW50YWwoCgogICAgV2lkZ2V0ICwKICAgIEF0b20gLAogICAgVGltZSAsCiAgICBY
dENvbnZlcnRTZWxlY3Rpb25JbmNyUHJvYyAsCiAgICBYdExvc2VTZWxlY3Rpb25JbmNyUHJvYyAs
CiAgICBYdFNlbGVjdGlvbkRvbmVJbmNyUHJvYyAsCiAgICBYdENhbmNlbENvbnZlcnRTZWxlY3Rp
b25Qcm9jICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiBYdEdlb21ldHJ5UmVzdWx0IFh0TWFr
ZVJlc2l6ZVJlcXVlc3QoCgogICAgV2lkZ2V0ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNp
Z25lZCBpbnQgLAogICAgRGltZW5zaW9uKiAsCiAgICBEaW1lbnNpb24qCgopOwoKZXh0ZXJuIHZv
aWQgWHRUcmFuc2xhdGVDb29yZHMoCgogICAgV2lkZ2V0ICwKICAgIGludCAsCiAgICBpbnQgLAog
ICAgUG9zaXRpb24qICwKICAgIFBvc2l0aW9uKgoKKTsKCmV4dGVybiBLZXlTeW0qIFh0R2V0S2V5
c3ltVGFibGUoCgogICAgRGlzcGxheSogLAogICAgS2V5Q29kZSogLAogICAgaW50KgoKKTsKCmV4
dGVybiB2b2lkIFh0S2V5c3ltVG9LZXljb2RlTGlzdCgKCiAgICBEaXNwbGF5KiAsCiAgICBLZXlT
eW0gLAogICAgS2V5Q29kZSoqICwKICAgIENhcmRpbmFsKgoKKTsKCmV4dGVybiB2b2lkIFh0U3Ry
aW5nQ29udmVyc2lvbldhcm5pbmcoCgogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhcioK
Cik7CgpleHRlcm4gdm9pZCBYdERpc3BsYXlTdHJpbmdDb252ZXJzaW9uV2FybmluZygKCiAgICBE
aXNwbGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKgoKKTsKCgpleHRlcm4g
WHRDb252ZXJ0QXJnUmVjIGNvbnN0IGNvbG9yQ29udmVydEFyZ3NbXTsKZXh0ZXJuIFh0Q29udmVy
dEFyZ1JlYyBjb25zdCBzY3JlZW5Db252ZXJ0QXJnW107CgoKCgoKZXh0ZXJuIHZvaWQgWHRBcHBB
ZGRDb252ZXJ0ZXIoCgogICAgWHRBcHBDb250ZXh0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNv
bnN0IGNoYXIqICwKICAgIFh0Q29udmVydGVyICwKICAgIFh0Q29udmVydEFyZ0xpc3QgLAogICAg
Q2FyZGluYWwKCik7CgpleHRlcm4gdm9pZCBYdEFkZENvbnZlcnRlcigKCiAgICBjb25zdCBjaGFy
KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBYdENvbnZlcnRlciAsCiAgICBYdENvbnZlcnRBcmdM
aXN0ICwKICAgIENhcmRpbmFsCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRUeXBlQ29udmVydGVyKAoK
ICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFh0VHlwZUNvbnZlcnRlciAs
CiAgICBYdENvbnZlcnRBcmdMaXN0ICwKICAgIENhcmRpbmFsICwKICAgIFh0Q2FjaGVUeXBlICwK
ICAgIFh0RGVzdHJ1Y3RvcgoKKTsKCmV4dGVybiB2b2lkIFh0QXBwU2V0VHlwZUNvbnZlcnRlcigK
CiAgICBYdEFwcENvbnRleHQgLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAog
ICAgWHRUeXBlQ29udmVydGVyICwKICAgIFh0Q29udmVydEFyZ0xpc3QgLAogICAgQ2FyZGluYWwg
LAogICAgWHRDYWNoZVR5cGUgLAogICAgWHREZXN0cnVjdG9yCgopOwoKZXh0ZXJuIHZvaWQgWHRD
b252ZXJ0KAoKICAgIFdpZGdldCAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBYcm1WYWx1ZSogLAog
ICAgY29uc3QgY2hhciogLAogICAgWHJtVmFsdWUqCgopOwoKZXh0ZXJuIHZvaWQgWHREaXJlY3RD
b252ZXJ0KAoKICAgIFh0Q29udmVydGVyICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFs
ICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlKgoKKTsKCgoKCgoKCmV4dGVybiBYdFRy
YW5zbGF0aW9ucyBYdFBhcnNlVHJhbnNsYXRpb25UYWJsZSgKCiAgICBjb25zdCBjaGFyKgoKKTsK
CmV4dGVybiBYdEFjY2VsZXJhdG9ycyBYdFBhcnNlQWNjZWxlcmF0b3JUYWJsZSgKCiAgICBjb25z
dCBjaGFyKgoKKTsKCmV4dGVybiB2b2lkIFh0T3ZlcnJpZGVUcmFuc2xhdGlvbnMoCgogICAgV2lk
Z2V0ICwKICAgIFh0VHJhbnNsYXRpb25zCgopOwoKZXh0ZXJuIHZvaWQgWHRBdWdtZW50VHJhbnNs
YXRpb25zKAoKICAgIFdpZGdldCAsCiAgICBYdFRyYW5zbGF0aW9ucwoKKTsKCmV4dGVybiB2b2lk
IFh0SW5zdGFsbEFjY2VsZXJhdG9ycygKCiAgICBXaWRnZXQgLAogICAgV2lkZ2V0CgopOwoKZXh0
ZXJuIHZvaWQgWHRJbnN0YWxsQWxsQWNjZWxlcmF0b3JzKAoKICAgIFdpZGdldCAsCiAgICBXaWRn
ZXQKCik7CgpleHRlcm4gdm9pZCBYdFVuaW5zdGFsbFRyYW5zbGF0aW9ucygKCiAgICBXaWRnZXQK
Cik7CgpleHRlcm4gdm9pZCBYdEFwcEFkZEFjdGlvbnMoCgogICAgWHRBcHBDb250ZXh0ICwKICAg
IFh0QWN0aW9uTGlzdCAsCiAgICBDYXJkaW5hbAoKKTsKCmV4dGVybiB2b2lkIFh0QWRkQWN0aW9u
cygKCiAgICBYdEFjdGlvbkxpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4gWHRBY3Rpb25I
b29rSWQgWHRBcHBBZGRBY3Rpb25Ib29rKAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBYdEFjdGlv
bkhvb2tQcm9jICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlQWN0aW9u
SG9vaygKCiAgICBYdEFjdGlvbkhvb2tJZAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0QWN0aW9uTGlz
dCgKCiAgICBXaWRnZXRDbGFzcyAsCiAgICBYdEFjdGlvbkxpc3QqICwKICAgIENhcmRpbmFsKgoK
KTsKCmV4dGVybiB2b2lkIFh0Q2FsbEFjdGlvblByb2MoCgogICAgV2lkZ2V0ICwKICAgIGNvbnN0
IGNoYXIqICwKICAgIFhFdmVudCogLAogICAgU3RyaW5nKiAsCiAgICBDYXJkaW5hbAoKKTsKCmV4
dGVybiB2b2lkIFh0UmVnaXN0ZXJHcmFiQWN0aW9uKAoKICAgIFh0QWN0aW9uUHJvYyAsCiAgICBp
bnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gdm9p
ZCBYdFNldE11bHRpQ2xpY2tUaW1lKAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKCmV4dGVy
biBpbnQgWHRHZXRNdWx0aUNsaWNrVGltZSgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBLZXlT
eW0gWHRHZXRBY3Rpb25LZXlzeW0oCgogICAgWEV2ZW50KiAsCiAgICBNb2RpZmllcnMqCgopOwoK
CgoKCgoKZXh0ZXJuIHZvaWQgWHRUcmFuc2xhdGVLZXljb2RlKAoKICAgIERpc3BsYXkqICwKICAg
IHVuc2lnbmVkIGludCAsCiAgICBNb2RpZmllcnMgLAogICAgTW9kaWZpZXJzKiAsCiAgICBLZXlT
eW0qCgopOwoKZXh0ZXJuIHZvaWQgWHRUcmFuc2xhdGVLZXkoCgogICAgRGlzcGxheSogLAogICAg
dW5zaWduZWQgaW50ICwKICAgIE1vZGlmaWVycyAsCiAgICBNb2RpZmllcnMqICwKICAgIEtleVN5
bSoKCik7CgpleHRlcm4gdm9pZCBYdFNldEtleVRyYW5zbGF0b3IoCgogICAgRGlzcGxheSogLAog
ICAgWHRLZXlQcm9jCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWdpc3RlckNhc2VDb252ZXJ0ZXIoCgog
ICAgRGlzcGxheSogLAogICAgWHRDYXNlUHJvYyAsCiAgICBLZXlTeW0gLAogICAgS2V5U3ltCgop
OwoKZXh0ZXJuIHZvaWQgWHRDb252ZXJ0Q2FzZSgKCiAgICBEaXNwbGF5KiAsCiAgICBLZXlTeW0g
LAogICAgS2V5U3ltKiAsCiAgICBLZXlTeW0qCgopOwpleHRlcm4gdm9pZCBYdEFkZEV2ZW50SGFu
ZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRNYXNrICwKICAgIGludCAsCiAgICBYdEV2ZW50
SGFuZGxlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gdm9pZCBYdFJlbW92ZUV2ZW50SGFu
ZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRNYXNrICwKICAgIGludCAsCiAgICBYdEV2ZW50
SGFuZGxlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gdm9pZCBYdEFkZFJhd0V2ZW50SGFu
ZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRNYXNrICwKICAgIGludCAsCiAgICBYdEV2ZW50
SGFuZGxlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gdm9pZCBYdFJlbW92ZVJhd0V2ZW50
SGFuZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRNYXNrICwKICAgIGludCAsCiAgICBYdEV2
ZW50SGFuZGxlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gdm9pZCBYdEluc2VydEV2ZW50
SGFuZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRNYXNrICwKICAgIGludCAsCiAgICBYdEV2
ZW50SGFuZGxlciAsCiAgICBYdFBvaW50ZXIgLAogICAgWHRMaXN0UG9zaXRpb24KCik7CgpleHRl
cm4gdm9pZCBYdEluc2VydFJhd0V2ZW50SGFuZGxlcigKCiAgICBXaWRnZXQgLAogICAgRXZlbnRN
YXNrICwKICAgIGludCAsCiAgICBYdEV2ZW50SGFuZGxlciAsCiAgICBYdFBvaW50ZXIgLAogICAg
WHRMaXN0UG9zaXRpb24KCik7CgpleHRlcm4gWHRFdmVudERpc3BhdGNoUHJvYyBYdFNldEV2ZW50
RGlzcGF0Y2hlcigKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgWHRFdmVudERpc3BhdGNo
UHJvYwoKKTsKCmV4dGVybiBCb29sZWFuIFh0RGlzcGF0Y2hFdmVudFRvV2lkZ2V0KAoKICAgIFdp
ZGdldCAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIHZvaWQgWHRJbnNlcnRFdmVudFR5cGVIYW5k
bGVyKAoKICAgIFdpZGdldCAsCiAgICBpbnQgLAogICAgWHRQb2ludGVyICwKICAgIFh0RXZlbnRI
YW5kbGVyICwKICAgIFh0UG9pbnRlciAsCiAgICBYdExpc3RQb3NpdGlvbgoKKTsKCmV4dGVybiB2
b2lkIFh0UmVtb3ZlRXZlbnRUeXBlSGFuZGxlcigKCiAgICBXaWRnZXQgLAogICAgaW50ICwKICAg
IFh0UG9pbnRlciAsCiAgICBYdEV2ZW50SGFuZGxlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRl
cm4gRXZlbnRNYXNrIFh0QnVpbGRFdmVudE1hc2soCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIHZv
aWQgWHRSZWdpc3RlckV4dGVuc2lvblNlbGVjdG9yKAoKICAgIERpc3BsYXkqICwKICAgIGludCAs
CiAgICBpbnQgLAogICAgWHRFeHRlbnNpb25TZWxlY3RQcm9jICwKICAgIFh0UG9pbnRlcgoKKTsK
CmV4dGVybiB2b2lkIFh0QWRkR3JhYigKCiAgICBXaWRnZXQgLAogICAgaW50ICwKICAgIGludAoK
KTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlR3JhYigKCiAgICBXaWRnZXQKCik7CgpleHRlcm4gdm9p
ZCBYdFByb2Nlc3NFdmVudCgKCiAgICBYdElucHV0TWFzawoKKTsKCmV4dGVybiB2b2lkIFh0QXBw
UHJvY2Vzc0V2ZW50KAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBYdElucHV0TWFzawoKKTsKCmV4
dGVybiB2b2lkIFh0TWFpbkxvb3AoCgogICAgdm9pZAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwTWFp
bkxvb3AoCgogICAgWHRBcHBDb250ZXh0CgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRFeHBvc3VyZVRv
UmVnaW9uKAoKICAgIFhFdmVudCogLAogICAgUmVnaW9uCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRL
ZXlib2FyZEZvY3VzKAoKICAgIFdpZGdldCAsCiAgICBXaWRnZXQKCik7CgpleHRlcm4gV2lkZ2V0
IFh0R2V0S2V5Ym9hcmRGb2N1c1dpZGdldCgKCiAgICBXaWRnZXQKCik7CgpleHRlcm4gWEV2ZW50
KiBYdExhc3RFdmVudFByb2Nlc3NlZCgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBUaW1lIFh0
TGFzdFRpbWVzdGFtcFByb2Nlc3NlZCgKCiAgICBEaXNwbGF5KgoKKTsKCgoKCgoKCmV4dGVybiBY
dEludGVydmFsSWQgWHRBZGRUaW1lT3V0KAoKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgWHRUaW1l
ckNhbGxiYWNrUHJvYyAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gWHRJbnRlcnZhbElkIFh0
QXBwQWRkVGltZU91dCgKCiAgICBYdEFwcENvbnRleHQgLAogICAgdW5zaWduZWQgbG9uZyAsCiAg
ICBYdFRpbWVyQ2FsbGJhY2tQcm9jICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiB2b2lkIFh0
UmVtb3ZlVGltZU91dCgKCiAgICBYdEludGVydmFsSWQKCik7CgpleHRlcm4gWHRJbnB1dElkIFh0
QWRkSW5wdXQoCgogICAgaW50ICwKICAgIFh0UG9pbnRlciAsCiAgICBYdElucHV0Q2FsbGJhY2tQ
cm9jICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiBYdElucHV0SWQgWHRBcHBBZGRJbnB1dCgK
CiAgICBYdEFwcENvbnRleHQgLAogICAgaW50ICwKICAgIFh0UG9pbnRlciAsCiAgICBYdElucHV0
Q2FsbGJhY2tQcm9jICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlSW5w
dXQoCgogICAgWHRJbnB1dElkCgopOwoKZXh0ZXJuIFh0U2lnbmFsSWQgWHRBcHBBZGRTaWduYWwo
CgogICAgWHRBcHBDb250ZXh0ICwKICAgIFh0U2lnbmFsQ2FsbGJhY2tQcm9jICwKICAgIFh0UG9p
bnRlcgoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlU2lnbmFsKAoKICAgIFh0U2lnbmFsSWQKCik7
CgpleHRlcm4gdm9pZCBYdE5vdGljZVNpZ25hbCgKCiAgICBYdFNpZ25hbElkCgopOwoKZXh0ZXJu
IHZvaWQgWHROZXh0RXZlbnQoCgogICAgWEV2ZW50KgoKKTsKCmV4dGVybiB2b2lkIFh0QXBwTmV4
dEV2ZW50KAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBYRXZlbnQqCgopOwoKCgoKCgoKZXh0ZXJu
IEJvb2xlYW4gWHRQZW5kaW5nKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWHRJbnB1dE1hc2sgWHRB
cHBQZW5kaW5nKAoKICAgIFh0QXBwQ29udGV4dAoKKTsKCmV4dGVybiBYdEJsb2NrSG9va0lkIFh0
QXBwQWRkQmxvY2tIb29rKAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBYdEJsb2NrSG9va1Byb2Mg
LAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVCbG9ja0hvb2soCgogICAg
WHRCbG9ja0hvb2tJZAoKKTsKZXh0ZXJuIHZvaWQgWHRSZWFsaXplV2lkZ2V0KAoKICAgIFdpZGdl
dAoKKTsKCnZvaWQgWHRVbnJlYWxpemVXaWRnZXQoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIHZv
aWQgWHREZXN0cm95V2lkZ2V0KAoKICAgIFdpZGdldAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0U2Vu
c2l0aXZlKAoKICAgIFdpZGdldCAsCiAgICBpbnQKCik7CgpleHRlcm4gdm9pZCBYdFNldE1hcHBl
ZFdoZW5NYW5hZ2VkKAoKICAgIFdpZGdldCAsCiAgICBpbnQKCik7CgpleHRlcm4gV2lkZ2V0IFh0
TmFtZVRvV2lkZ2V0KAoKICAgIFdpZGdldCAsCiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiBX
aWRnZXQgWHRXaW5kb3dUb1dpZGdldCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7Cgpl
eHRlcm4gWHRQb2ludGVyIFh0R2V0Q2xhc3NFeHRlbnNpb24oCgogICAgV2lkZ2V0Q2xhc3MgLAog
ICAgQ2FyZGluYWwgLAogICAgWHJtUXVhcmsgLAogICAgbG9uZyAsCiAgICBDYXJkaW5hbAoKKTsK
ZXh0ZXJuIEFyZ0xpc3QgWHRNZXJnZUFyZ0xpc3RzKAoKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGlu
YWwgLAogICAgQXJnTGlzdCAsCiAgICBDYXJkaW5hbAoKKTsKZXh0ZXJuIFh0VmFyQXJnc0xpc3Qg
WHRWYUNyZWF0ZUFyZ3NMaXN0KAoKICAgIFh0UG9pbnRlciAsIC4uLgoKKTsKZXh0ZXJuIERpc3Bs
YXkgKlh0RGlzcGxheSgKCiAgICBXaWRnZXQKCik7CgpleHRlcm4gRGlzcGxheSAqWHREaXNwbGF5
T2ZPYmplY3QoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIFNjcmVlbiAqWHRTY3JlZW4oCgogICAg
V2lkZ2V0CgopOwoKZXh0ZXJuIFNjcmVlbiAqWHRTY3JlZW5PZk9iamVjdCgKCiAgICBXaWRnZXQK
Cik7CgpleHRlcm4gV2luZG93IFh0V2luZG93KAoKICAgIFdpZGdldAoKKTsKCmV4dGVybiBXaW5k
b3cgWHRXaW5kb3dPZk9iamVjdCgKCiAgICBXaWRnZXQKCik7CgpleHRlcm4gU3RyaW5nIFh0TmFt
ZSgKCiAgICBXaWRnZXQKCik7CgpleHRlcm4gV2lkZ2V0Q2xhc3MgWHRTdXBlcmNsYXNzKAoKICAg
IFdpZGdldAoKKTsKCmV4dGVybiBXaWRnZXRDbGFzcyBYdENsYXNzKAoKICAgIFdpZGdldAoKKTsK
CmV4dGVybiBXaWRnZXQgWHRQYXJlbnQoCgogICAgV2lkZ2V0CgopOwoKCgoKCgoKZXh0ZXJuIHZv
aWQgWHRBZGRDYWxsYmFjaygKCiAgICBXaWRnZXQgLAogICAgY29uc3QgY2hhciogLAogICAgWHRD
YWxsYmFja1Byb2MgLAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVDYWxs
YmFjaygKCiAgICBXaWRnZXQgLAogICAgY29uc3QgY2hhciogLAogICAgWHRDYWxsYmFja1Byb2Mg
LAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRDYWxsYmFja3MoCgogICAgV2lk
Z2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFh0Q2FsbGJhY2tMaXN0CgopOwoKZXh0ZXJuIHZv
aWQgWHRSZW1vdmVDYWxsYmFja3MoCgogICAgV2lkZ2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAg
IFh0Q2FsbGJhY2tMaXN0CgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVBbGxDYWxsYmFja3MoCgog
ICAgV2lkZ2V0ICwKICAgIGNvbnN0IGNoYXIqCgopOwoKCmV4dGVybiB2b2lkIFh0Q2FsbENhbGxi
YWNrcygKCiAgICBXaWRnZXQgLAogICAgY29uc3QgY2hhciogLAogICAgWHRQb2ludGVyCgopOwoK
ZXh0ZXJuIHZvaWQgWHRDYWxsQ2FsbGJhY2tMaXN0KAoKICAgIFdpZGdldCAsCiAgICBYdENhbGxi
YWNrTGlzdCAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gWHRDYWxsYmFja1N0YXR1cyBYdEhh
c0NhbGxiYWNrcygKCiAgICBXaWRnZXQgLAogICAgY29uc3QgY2hhcioKCik7CmV4dGVybiBYdEdl
b21ldHJ5UmVzdWx0IFh0TWFrZUdlb21ldHJ5UmVxdWVzdCgKCiAgICBXaWRnZXQgLAogICAgWHRX
aWRnZXRHZW9tZXRyeSogLAogICAgWHRXaWRnZXRHZW9tZXRyeSoKCik7CgpleHRlcm4gWHRHZW9t
ZXRyeVJlc3VsdCBYdFF1ZXJ5R2VvbWV0cnkoCgogICAgV2lkZ2V0ICwKICAgIFh0V2lkZ2V0R2Vv
bWV0cnkqICwKICAgIFh0V2lkZ2V0R2VvbWV0cnkqCgopOwoKZXh0ZXJuIFdpZGdldCBYdENyZWF0
ZVBvcHVwU2hlbGwoCgogICAgY29uc3QgY2hhciogLAogICAgV2lkZ2V0Q2xhc3MgLAogICAgV2lk
Z2V0ICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4gV2lkZ2V0IFh0VmFD
cmVhdGVQb3B1cFNoZWxsKAoKICAgIGNvbnN0IGNoYXIqICwKICAgIFdpZGdldENsYXNzICwKICAg
IFdpZGdldCAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBYdFBvcHVwKAoKICAgIFdpZGdldCAs
CiAgICBYdEdyYWJLaW5kCgopOwoKZXh0ZXJuIHZvaWQgWHRQb3B1cFNwcmluZ0xvYWRlZCgKCiAg
ICBXaWRnZXQKCik7CgpleHRlcm4gdm9pZCBYdENhbGxiYWNrTm9uZSgKCiAgICBXaWRnZXQgLAog
ICAgWHRQb2ludGVyICwKICAgIFh0UG9pbnRlcgoKKTsKCmV4dGVybiB2b2lkIFh0Q2FsbGJhY2tO
b25leGNsdXNpdmUoCgogICAgV2lkZ2V0ICwKICAgIFh0UG9pbnRlciAsCiAgICBYdFBvaW50ZXIK
Cik7CgpleHRlcm4gdm9pZCBYdENhbGxiYWNrRXhjbHVzaXZlKAoKICAgIFdpZGdldCAsCiAgICBY
dFBvaW50ZXIgLAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRQb3Bkb3duKAoKICAg
IFdpZGdldAoKKTsKCmV4dGVybiB2b2lkIFh0Q2FsbGJhY2tQb3Bkb3duKAoKICAgIFdpZGdldCAs
CiAgICBYdFBvaW50ZXIgLAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRNZW51UG9w
dXBBY3Rpb24oCgogICAgV2lkZ2V0ICwKICAgIFhFdmVudCogLAogICAgU3RyaW5nKiAsCiAgICBD
YXJkaW5hbCoKCik7CgpleHRlcm4gV2lkZ2V0IFh0Q3JlYXRlV2lkZ2V0KAoKICAgIGNvbnN0IGNo
YXIqICwKICAgIFdpZGdldENsYXNzICwKICAgIFdpZGdldCAsCiAgICBBcmdMaXN0ICwKICAgIENh
cmRpbmFsCgopOwoKZXh0ZXJuIFdpZGdldCBYdENyZWF0ZU1hbmFnZWRXaWRnZXQoCgogICAgY29u
c3QgY2hhciogLAogICAgV2lkZ2V0Q2xhc3MgLAogICAgV2lkZ2V0ICwKICAgIEFyZ0xpc3QgLAog
ICAgQ2FyZGluYWwKCik7CgpleHRlcm4gV2lkZ2V0IFh0VmFDcmVhdGVXaWRnZXQoCgogICAgY29u
c3QgY2hhciogLAogICAgV2lkZ2V0Q2xhc3MgLAogICAgV2lkZ2V0ICwKICAgIC4uLgoKKTsKCmV4
dGVybiBXaWRnZXQgWHRWYUNyZWF0ZU1hbmFnZWRXaWRnZXQoCgogICAgY29uc3QgY2hhciogLAog
ICAgV2lkZ2V0Q2xhc3MgLAogICAgV2lkZ2V0ICwKICAgIC4uLgoKKTsKCmV4dGVybiBXaWRnZXQg
WHRDcmVhdGVBcHBsaWNhdGlvblNoZWxsKAoKICAgIGNvbnN0IGNoYXIqICwKICAgIFdpZGdldENs
YXNzICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4gV2lkZ2V0IFh0QXBw
Q3JlYXRlU2hlbGwoCgogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgV2lk
Z2V0Q2xhc3MgLAogICAgRGlzcGxheSogLAogICAgQXJnTGlzdCAsCiAgICBDYXJkaW5hbAoKKTsK
CmV4dGVybiBXaWRnZXQgWHRWYUFwcENyZWF0ZVNoZWxsKAoKICAgIGNvbnN0IGNoYXIqICwKICAg
IGNvbnN0IGNoYXIqICwKICAgIFdpZGdldENsYXNzICwKICAgIERpc3BsYXkqICwKICAgIC4uLgoK
KTsKCgoKCgoKCmV4dGVybiB2b2lkIFh0VG9vbGtpdEluaXRpYWxpemUoCgogICAgdm9pZAoKKTsK
CmV4dGVybiBYdExhbmd1YWdlUHJvYyBYdFNldExhbmd1YWdlUHJvYygKCiAgICBYdEFwcENvbnRl
eHQgLAogICAgWHRMYW5ndWFnZVByb2MgLAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQg
WHREaXNwbGF5SW5pdGlhbGl6ZSgKCiAgICBYdEFwcENvbnRleHQgLAogICAgRGlzcGxheSogLAog
ICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgWHJtT3B0aW9uRGVzY1JlYyog
LAogICAgQ2FyZGluYWwgLAogICAgaW50KiAsCiAgICBjaGFyKioKCik7CgpleHRlcm4gV2lkZ2V0
IFh0T3BlbkFwcGxpY2F0aW9uKAoKICAgIFh0QXBwQ29udGV4dCogLAogICAgY29uc3QgY2hhciog
LAogICAgWHJtT3B0aW9uRGVzY0xpc3QgLAogICAgQ2FyZGluYWwgLAogICAgaW50KiAsCiAgICBT
dHJpbmcqICwKICAgIFN0cmluZyogLAogICAgV2lkZ2V0Q2xhc3MgLAogICAgQXJnTGlzdCAsCiAg
ICBDYXJkaW5hbAoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYU9wZW5BcHBsaWNhdGlvbigKCiAgICBY
dEFwcENvbnRleHQqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFhybU9wdGlvbkRlc2NMaXN0ICwK
ICAgIENhcmRpbmFsICwKICAgIGludCogLAogICAgU3RyaW5nKiAsCiAgICBTdHJpbmcqICwKICAg
IFdpZGdldENsYXNzICwKICAgIC4uLgoKKTsKCmV4dGVybiBXaWRnZXQgWHRBcHBJbml0aWFsaXpl
KAoKICAgIFh0QXBwQ29udGV4dCogLAogICAgY29uc3QgY2hhciogLAogICAgWHJtT3B0aW9uRGVz
Y0xpc3QgLAogICAgQ2FyZGluYWwgLAogICAgaW50KiAsCiAgICBTdHJpbmcqICwKICAgIFN0cmlu
ZyogLAogICAgQXJnTGlzdCAsCiAgICBDYXJkaW5hbAoKKTsKCmV4dGVybiBXaWRnZXQgWHRWYUFw
cEluaXRpYWxpemUoCgogICAgWHRBcHBDb250ZXh0KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBY
cm1PcHRpb25EZXNjTGlzdCAsCiAgICBDYXJkaW5hbCAsCiAgICBpbnQqICwKICAgIFN0cmluZyog
LAogICAgU3RyaW5nKiAsCiAgICAuLi4KCik7CgpleHRlcm4gV2lkZ2V0IFh0SW5pdGlhbGl6ZSgK
CiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBYcm1PcHRpb25EZXNjUmVj
KiAsCiAgICBDYXJkaW5hbCAsCiAgICBpbnQqICwKICAgIGNoYXIqKgoKKTsKCmV4dGVybiBEaXNw
bGF5ICpYdE9wZW5EaXNwbGF5KAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBjb25zdCBjaGFyKiAs
CiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBYcm1PcHRpb25EZXNjUmVj
KiAsCiAgICBDYXJkaW5hbCAsCiAgICBpbnQqICwKICAgIGNoYXIqKgoKKTsKCmV4dGVybiBYdEFw
cENvbnRleHQgWHRDcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoCgogICAgdm9pZAoKKTsKCmV4dGVy
biB2b2lkIFh0QXBwU2V0RmFsbGJhY2tSZXNvdXJjZXMoCgogICAgWHRBcHBDb250ZXh0ICwKICAg
IFN0cmluZyoKCik7CgpleHRlcm4gdm9pZCBYdERlc3Ryb3lBcHBsaWNhdGlvbkNvbnRleHQoCgog
ICAgWHRBcHBDb250ZXh0CgopOwoKZXh0ZXJuIHZvaWQgWHRJbml0aWFsaXplV2lkZ2V0Q2xhc3Mo
CgogICAgV2lkZ2V0Q2xhc3MKCik7CgpleHRlcm4gWHRBcHBDb250ZXh0IFh0V2lkZ2V0VG9BcHBs
aWNhdGlvbkNvbnRleHQoCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIFh0QXBwQ29udGV4dCBYdERp
c3BsYXlUb0FwcGxpY2F0aW9uQ29udGV4dCgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBYcm1E
YXRhYmFzZSBYdERhdGFiYXNlKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIFhybURhdGFiYXNl
IFh0U2NyZWVuRGF0YWJhc2UoCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiB2b2lkIFh0Q2xvc2VE
aXNwbGF5KAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRBcHBsaWNhdGlvblJl
c291cmNlcygKCiAgICBXaWRnZXQgLAogICAgWHRQb2ludGVyICwKICAgIFh0UmVzb3VyY2VMaXN0
ICwKICAgIENhcmRpbmFsICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4g
dm9pZCBYdFZhR2V0QXBwbGljYXRpb25SZXNvdXJjZXMoCgogICAgV2lkZ2V0ICwKICAgIFh0UG9p
bnRlciAsCiAgICBYdFJlc291cmNlTGlzdCAsCiAgICBDYXJkaW5hbCAsCiAgICAuLi4KCik7Cgpl
eHRlcm4gdm9pZCBYdEdldFN1YnJlc291cmNlcygKCiAgICBXaWRnZXQgLAogICAgWHRQb2ludGVy
ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFh0UmVzb3VyY2VMaXN0
ICwKICAgIENhcmRpbmFsICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4g
dm9pZCBYdFZhR2V0U3VicmVzb3VyY2VzKAoKICAgIFdpZGdldCAsCiAgICBYdFBvaW50ZXIgLAog
ICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgWHRSZXNvdXJjZUxpc3QgLAog
ICAgQ2FyZGluYWwgLAogICAgLi4uCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRWYWx1ZXMoCgogICAg
V2lkZ2V0ICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4gdm9pZCBYdFZh
U2V0VmFsdWVzKAoKICAgIFdpZGdldCAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBYdEdldFZh
bHVlcygKCiAgICBXaWRnZXQgLAogICAgQXJnTGlzdCAsCiAgICBDYXJkaW5hbAoKKTsKCmV4dGVy
biB2b2lkIFh0VmFHZXRWYWx1ZXMoCgogICAgV2lkZ2V0ICwKICAgIC4uLgoKKTsKCmV4dGVybiB2
b2lkIFh0U2V0U3VidmFsdWVzKAoKICAgIFh0UG9pbnRlciAsCiAgICBYdFJlc291cmNlTGlzdCAs
CiAgICBDYXJkaW5hbCAsCiAgICBBcmdMaXN0ICwKICAgIENhcmRpbmFsCgopOwoKZXh0ZXJuIHZv
aWQgWHRWYVNldFN1YnZhbHVlcygKCiAgICBYdFBvaW50ZXIgLAogICAgWHRSZXNvdXJjZUxpc3Qg
LAogICAgQ2FyZGluYWwgLAogICAgLi4uCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRTdWJ2YWx1ZXMo
CgogICAgWHRQb2ludGVyICwKICAgIFh0UmVzb3VyY2VMaXN0ICwKICAgIENhcmRpbmFsICwKICAg
IEFyZ0xpc3QgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4gdm9pZCBYdFZhR2V0U3VidmFsdWVz
KAoKICAgIFh0UG9pbnRlciAsCiAgICBYdFJlc291cmNlTGlzdCAsCiAgICBDYXJkaW5hbCAsCiAg
ICAuLi4KCik7CgpleHRlcm4gdm9pZCBYdEdldFJlc291cmNlTGlzdCgKCiAgICBXaWRnZXRDbGFz
cyAsCiAgICBYdFJlc291cmNlTGlzdCogLAogICAgQ2FyZGluYWwqCgopOwoKZXh0ZXJuIHZvaWQg
WHRHZXRDb25zdHJhaW50UmVzb3VyY2VMaXN0KAoKICAgIFdpZGdldENsYXNzICwKICAgIFh0UmVz
b3VyY2VMaXN0KiAsCiAgICBDYXJkaW5hbCoKCik7CnR5cGVkZWYgc3RydWN0IF9YdENoZWNrcG9p
bnRUb2tlblJlYyB7CiAgICBpbnQgc2F2ZV90eXBlOwogICAgaW50IGludGVyYWN0X3N0eWxlOwog
ICAgQm9vbGVhbiBzaHV0ZG93bjsKICAgIEJvb2xlYW4gZmFzdDsKICAgIEJvb2xlYW4gY2FuY2Vs
X3NodXRkb3duOwogICAgaW50IHBoYXNlOwogICAgaW50IGludGVyYWN0X2RpYWxvZ190eXBlOwog
ICAgQm9vbGVhbiByZXF1ZXN0X2NhbmNlbDsKICAgIEJvb2xlYW4gcmVxdWVzdF9uZXh0X3BoYXNl
OwogICAgQm9vbGVhbiBzYXZlX3N1Y2Nlc3M7CiAgICBpbnQgdHlwZTsKICAgIFdpZGdldCB3aWRn
ZXQ7Cn0gWHRDaGVja3BvaW50VG9rZW5SZWMsICpYdENoZWNrcG9pbnRUb2tlbjsKClh0Q2hlY2tw
b2ludFRva2VuIFh0U2Vzc2lvbkdldFRva2VuKAoKICAgIFdpZGdldAoKKTsKCnZvaWQgWHRTZXNz
aW9uUmV0dXJuVG9rZW4oCgogICAgWHRDaGVja3BvaW50VG9rZW4KCik7CgoKCgoKCgpleHRlcm4g
WHRFcnJvck1zZ0hhbmRsZXIgWHRBcHBTZXRFcnJvck1zZ0hhbmRsZXIoCgogICAgWHRBcHBDb250
ZXh0ICwKICAgIFh0RXJyb3JNc2dIYW5kbGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRFcnJvck1z
Z0hhbmRsZXIoCgogICAgWHRFcnJvck1zZ0hhbmRsZXIKCik7CgpleHRlcm4gWHRFcnJvck1zZ0hh
bmRsZXIgWHRBcHBTZXRXYXJuaW5nTXNnSGFuZGxlcigKCiAgICBYdEFwcENvbnRleHQgLAogICAg
WHRFcnJvck1zZ0hhbmRsZXIKCik7CgpleHRlcm4gdm9pZCBYdFNldFdhcm5pbmdNc2dIYW5kbGVy
KAoKICAgIFh0RXJyb3JNc2dIYW5kbGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBFcnJvck1zZygK
CiAgICBYdEFwcENvbnRleHQgLAogICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAog
ICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgU3RyaW5nKiAsCiAgICBDYXJk
aW5hbCoKCik7CgpleHRlcm4gdm9pZCBYdEVycm9yTXNnKAoKICAgIGNvbnN0IGNoYXIqICwKICAg
IGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFN0
cmluZyogLAogICAgQ2FyZGluYWwqCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBXYXJuaW5nTXNnKAoK
ICAgIFh0QXBwQ29udGV4dCAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAg
ICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBTdHJpbmcqICwKICAgIENhcmRp
bmFsKgoKKTsKCmV4dGVybiB2b2lkIFh0V2FybmluZ01zZygKCiAgICBjb25zdCBjaGFyKiAsCiAg
ICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBT
dHJpbmcqICwKICAgIENhcmRpbmFsKgoKKTsKCmV4dGVybiBYdEVycm9ySGFuZGxlciBYdEFwcFNl
dEVycm9ySGFuZGxlcigKCiAgICBYdEFwcENvbnRleHQgLAogICAgWHRFcnJvckhhbmRsZXIKCik7
CgpleHRlcm4gdm9pZCBYdFNldEVycm9ySGFuZGxlcigKCiAgICBYdEVycm9ySGFuZGxlcgoKKTsK
CmV4dGVybiBYdEVycm9ySGFuZGxlciBYdEFwcFNldFdhcm5pbmdIYW5kbGVyKAoKICAgIFh0QXBw
Q29udGV4dCAsCiAgICBYdEVycm9ySGFuZGxlcgoKKTsKCmV4dGVybiB2b2lkIFh0U2V0V2Fybmlu
Z0hhbmRsZXIoCgogICAgWHRFcnJvckhhbmRsZXIKCik7CgpleHRlcm4gdm9pZCBYdEFwcEVycm9y
KAoKICAgIFh0QXBwQ29udGV4dCAsCiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiB2b2lkIFh0
RXJyb3IoCgogICAgY29uc3QgY2hhcioKCik7CgpleHRlcm4gdm9pZCBYdEFwcFdhcm5pbmcoCgog
ICAgWHRBcHBDb250ZXh0ICwKICAgIGNvbnN0IGNoYXIqCgopOwoKZXh0ZXJuIHZvaWQgWHRXYXJu
aW5nKAoKICAgIGNvbnN0IGNoYXIqCgopOwoKZXh0ZXJuIFhybURhdGFiYXNlICpYdEFwcEdldEVy
cm9yRGF0YWJhc2UoCgogICAgWHRBcHBDb250ZXh0CgopOwoKZXh0ZXJuIFhybURhdGFiYXNlICpY
dEdldEVycm9yRGF0YWJhc2UoCgogICAgdm9pZAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwR2V0RXJy
b3JEYXRhYmFzZVRleHQoCgogICAgWHRBcHBDb250ZXh0ICwKICAgIGNvbnN0IGNoYXIqICwKICAg
IGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFN0
cmluZyAsCiAgICBpbnQgLAogICAgWHJtRGF0YWJhc2UKCik7CgpleHRlcm4gdm9pZCBYdEdldEVy
cm9yRGF0YWJhc2VUZXh0KAoKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAg
IGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFN0cmluZyAsCiAgICBpbnQKCik7
CgoKCgoKCgpleHRlcm4gY2hhciAqWHRNYWxsb2MoCgogICAgQ2FyZGluYWwKCik7CgpleHRlcm4g
Y2hhciAqWHRDYWxsb2MoCgogICAgQ2FyZGluYWwgLAogICAgQ2FyZGluYWwKCik7CgpleHRlcm4g
Y2hhciAqWHRSZWFsbG9jKAoKICAgIGNoYXIqICwKICAgIENhcmRpbmFsCgopOwoKZXh0ZXJuIHZv
aWQgWHRGcmVlKAoKICAgIGNoYXIqCgopOwpleHRlcm4gWHRXb3JrUHJvY0lkIFh0QWRkV29ya1By
b2MoCgogICAgWHRXb3JrUHJvYyAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gWHRXb3JrUHJv
Y0lkIFh0QXBwQWRkV29ya1Byb2MoCgogICAgWHRBcHBDb250ZXh0ICwKICAgIFh0V29ya1Byb2Mg
LAogICAgWHRQb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVXb3JrUHJvYygKCiAgICBY
dFdvcmtQcm9jSWQKCik7CgoKCgoKCgpleHRlcm4gR0MgWHRHZXRHQygKCiAgICBXaWRnZXQgLAog
ICAgWHRHQ01hc2sgLAogICAgWEdDVmFsdWVzKgoKKTsKCmV4dGVybiBHQyBYdEFsbG9jYXRlR0Mo
CgogICAgV2lkZ2V0ICwKICAgIENhcmRpbmFsICwKICAgIFh0R0NNYXNrICwKICAgIFhHQ1ZhbHVl
cyogLAogICAgWHRHQ01hc2sgLAogICAgWHRHQ01hc2sKCik7CgoKCgoKZXh0ZXJuIHZvaWQgWHRE
ZXN0cm95R0MoCgogICAgR0MKCik7CgpleHRlcm4gdm9pZCBYdFJlbGVhc2VHQygKCiAgICBXaWRn
ZXQgLAogICAgR0MKCik7CgoKCmV4dGVybiB2b2lkIFh0QXBwUmVsZWFzZUNhY2hlUmVmcygKCiAg
ICBYdEFwcENvbnRleHQgLAogICAgWHRDYWNoZVJlZioKCik7CgpleHRlcm4gdm9pZCBYdENhbGxi
YWNrUmVsZWFzZUNhY2hlUmVmKAoKICAgIFdpZGdldCAsCiAgICBYdFBvaW50ZXIgLAogICAgWHRQ
b2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWHRDYWxsYmFja1JlbGVhc2VDYWNoZVJlZkxpc3QoCgog
ICAgV2lkZ2V0ICwKICAgIFh0UG9pbnRlciAsCiAgICBYdFBvaW50ZXIKCik7CgpleHRlcm4gdm9p
ZCBYdFNldFdNQ29sb3JtYXBXaW5kb3dzKAoKICAgIFdpZGdldCAsCiAgICBXaWRnZXQqICwKICAg
IENhcmRpbmFsCgopOwoKZXh0ZXJuIFN0cmluZyBYdEZpbmRGaWxlKAoKICAgIGNvbnN0IGNoYXIq
ICwKICAgIFN1YnN0aXR1dGlvbiAsCiAgICBDYXJkaW5hbCAsCiAgICBYdEZpbGVQcmVkaWNhdGUK
Cik7CgpleHRlcm4gU3RyaW5nIFh0UmVzb2x2ZVBhdGhuYW1lKAoKICAgIERpc3BsYXkqICwKICAg
IGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNv
bnN0IGNoYXIqICwKICAgIFN1YnN0aXR1dGlvbiAsCiAgICBDYXJkaW5hbCAsCiAgICBYdEZpbGVQ
cmVkaWNhdGUKCik7CmV4dGVybiB2b2lkIFh0RGlzb3duU2VsZWN0aW9uKAoKICAgIFdpZGdldCAs
CiAgICBBdG9tICwKICAgIFRpbWUKCik7CgpleHRlcm4gdm9pZCBYdEdldFNlbGVjdGlvblZhbHVl
KAoKICAgIFdpZGdldCAsCiAgICBBdG9tICwKICAgIEF0b20gLAogICAgWHRTZWxlY3Rpb25DYWxs
YmFja1Byb2MgLAogICAgWHRQb2ludGVyICwKICAgIFRpbWUKCik7CgpleHRlcm4gdm9pZCBYdEdl
dFNlbGVjdGlvblZhbHVlcygKCiAgICBXaWRnZXQgLAogICAgQXRvbSAsCiAgICBBdG9tKiAsCiAg
ICBpbnQgLAogICAgWHRTZWxlY3Rpb25DYWxsYmFja1Byb2MgLAogICAgWHRQb2ludGVyKiAsCiAg
ICBUaW1lCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBTZXRTZWxlY3Rpb25UaW1lb3V0KAoKICAgIFh0
QXBwQ29udGV4dCAsCiAgICB1bnNpZ25lZCBsb25nCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRTZWxl
Y3Rpb25UaW1lb3V0KAoKICAgIHVuc2lnbmVkIGxvbmcKCik7CgpleHRlcm4gdW5zaWduZWQgbG9u
ZyBYdEFwcEdldFNlbGVjdGlvblRpbWVvdXQoCgogICAgWHRBcHBDb250ZXh0CgopOwoKZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgWHRHZXRTZWxlY3Rpb25UaW1lb3V0KAoKICAgIHZvaWQKCik7CgpleHRl
cm4gWFNlbGVjdGlvblJlcXVlc3RFdmVudCAqWHRHZXRTZWxlY3Rpb25SZXF1ZXN0KAoKICAgIFdp
ZGdldCAsCiAgICBBdG9tICwKICAgIFh0UmVxdWVzdElkCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRT
ZWxlY3Rpb25WYWx1ZUluY3JlbWVudGFsKAoKICAgIFdpZGdldCAsCiAgICBBdG9tICwKICAgIEF0
b20gLAogICAgWHRTZWxlY3Rpb25DYWxsYmFja1Byb2MgLAogICAgWHRQb2ludGVyICwKICAgIFRp
bWUKCik7CgpleHRlcm4gdm9pZCBYdEdldFNlbGVjdGlvblZhbHVlc0luY3JlbWVudGFsKAoKICAg
IFdpZGdldCAsCiAgICBBdG9tICwKICAgIEF0b20qICwKICAgIGludCAsCiAgICBYdFNlbGVjdGlv
bkNhbGxiYWNrUHJvYyAsCiAgICBYdFBvaW50ZXIqICwKICAgIFRpbWUKCik7CgpleHRlcm4gdm9p
ZCBYdFNldFNlbGVjdGlvblBhcmFtZXRlcnMoCgogICAgV2lkZ2V0ICwKICAgIEF0b20gLAogICAg
QXRvbSAsCiAgICBYdFBvaW50ZXIgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBpbnQKCik7Cgpl
eHRlcm4gdm9pZCBYdEdldFNlbGVjdGlvblBhcmFtZXRlcnMoCgogICAgV2lkZ2V0ICwKICAgIEF0
b20gLAogICAgWHRSZXF1ZXN0SWQgLAogICAgQXRvbSogLAogICAgWHRQb2ludGVyKiAsCiAgICB1
bnNpZ25lZCBsb25nKiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIHZvaWQgWHRDcmVhdGVTZWxlY3Rp
b25SZXF1ZXN0KAoKICAgIFdpZGdldCAsCiAgICBBdG9tCgopOwoKZXh0ZXJuIHZvaWQgWHRTZW5k
U2VsZWN0aW9uUmVxdWVzdCgKCiAgICBXaWRnZXQgLAogICAgQXRvbSAsCiAgICBUaW1lCgopOwoK
ZXh0ZXJuIHZvaWQgWHRDYW5jZWxTZWxlY3Rpb25SZXF1ZXN0KAoKICAgIFdpZGdldCAsCiAgICBB
dG9tCgopOwoKZXh0ZXJuIEF0b20gWHRSZXNlcnZlUHJvcGVydHlBdG9tKAoKICAgIFdpZGdldAoK
KTsKCmV4dGVybiB2b2lkIFh0UmVsZWFzZVByb3BlcnR5QXRvbSgKCiAgICBXaWRnZXQgLAogICAg
QXRvbQoKKTsKCmV4dGVybiB2b2lkIFh0R3JhYktleSgKCiAgICBXaWRnZXQgLAogICAgdW5zaWdu
ZWQgaW50ICwKICAgIE1vZGlmaWVycyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsK
CmV4dGVybiB2b2lkIFh0VW5ncmFiS2V5KAoKICAgIFdpZGdldCAsCiAgICB1bnNpZ25lZCBpbnQg
LAogICAgTW9kaWZpZXJzCgopOwoKZXh0ZXJuIGludCBYdEdyYWJLZXlib2FyZCgKCiAgICBXaWRn
ZXQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgVGltZQoKKTsKCmV4dGVybiB2
b2lkIFh0VW5ncmFiS2V5Ym9hcmQoCgogICAgV2lkZ2V0ICwKICAgIFRpbWUKCik7CgpleHRlcm4g
dm9pZCBYdEdyYWJCdXR0b24oCgogICAgV2lkZ2V0ICwKICAgIGludCAsCiAgICBNb2RpZmllcnMg
LAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFdp
bmRvdyAsCiAgICBDdXJzb3IKCik7CgpleHRlcm4gdm9pZCBYdFVuZ3JhYkJ1dHRvbigKCiAgICBX
aWRnZXQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIE1vZGlmaWVycwoKKTsKCmV4dGVybiBpbnQg
WHRHcmFiUG9pbnRlcigKCiAgICBXaWRnZXQgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAs
CiAgICBpbnQgLAogICAgaW50ICwKICAgIFdpbmRvdyAsCiAgICBDdXJzb3IgLAogICAgVGltZQoK
KTsKCmV4dGVybiB2b2lkIFh0VW5ncmFiUG9pbnRlcigKCiAgICBXaWRnZXQgLAogICAgVGltZQoK
KTsKCmV4dGVybiB2b2lkIFh0R2V0QXBwbGljYXRpb25OYW1lQW5kQ2xhc3MoCgogICAgRGlzcGxh
eSogLAogICAgU3RyaW5nKiAsCiAgICBTdHJpbmcqCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWdpc3Rl
ckRyYXdhYmxlKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIFdpZGdldAoKKTsK
CmV4dGVybiB2b2lkIFh0VW5yZWdpc3RlckRyYXdhYmxlKAoKICAgIERpc3BsYXkqICwKICAgIERy
YXdhYmxlCgopOwoKZXh0ZXJuIFdpZGdldCBYdEhvb2tzT2ZEaXNwbGF5KAoKICAgIERpc3BsYXkq
CgopOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgU3RyaW5nIHR5cGU7CiAgICBXaWRnZXQgd2lkZ2V0
OwogICAgQXJnTGlzdCBhcmdzOwogICAgQ2FyZGluYWwgbnVtX2FyZ3M7Cn0gWHRDcmVhdGVIb29r
RGF0YVJlYywgKlh0Q3JlYXRlSG9va0RhdGE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBTdHJpbmcg
dHlwZTsKICAgIFdpZGdldCB3aWRnZXQ7CiAgICBYdFBvaW50ZXIgZXZlbnRfZGF0YTsKICAgIENh
cmRpbmFsIG51bV9ldmVudF9kYXRhOwp9IFh0Q2hhbmdlSG9va0RhdGFSZWMsICpYdENoYW5nZUhv
b2tEYXRhOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgV2lkZ2V0IG9sZCwgcmVxOwogICAgQXJnTGlz
dCBhcmdzOwogICAgQ2FyZGluYWwgbnVtX2FyZ3M7Cn0gWHRDaGFuZ2VIb29rU2V0VmFsdWVzRGF0
YVJlYywgKlh0Q2hhbmdlSG9va1NldFZhbHVlc0RhdGE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBT
dHJpbmcgdHlwZTsKICAgIFdpZGdldCB3aWRnZXQ7CiAgICBYdEdlb21ldHJ5TWFzayBjaGFuZ2VN
YXNrOwogICAgWFdpbmRvd0NoYW5nZXMgY2hhbmdlczsKfSBYdENvbmZpZ3VyZUhvb2tEYXRhUmVj
LCAqWHRDb25maWd1cmVIb29rRGF0YTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFN0cmluZyB0eXBl
OwogICAgV2lkZ2V0IHdpZGdldDsKICAgIFh0V2lkZ2V0R2VvbWV0cnkqIHJlcXVlc3Q7CiAgICBY
dFdpZGdldEdlb21ldHJ5KiByZXBseTsKICAgIFh0R2VvbWV0cnlSZXN1bHQgcmVzdWx0Owp9IFh0
R2VvbWV0cnlIb29rRGF0YVJlYywgKlh0R2VvbWV0cnlIb29rRGF0YTsKCnR5cGVkZWYgc3RydWN0
IHsKICAgIFN0cmluZyB0eXBlOwogICAgV2lkZ2V0IHdpZGdldDsKfSBYdERlc3Ryb3lIb29rRGF0
YVJlYywgKlh0RGVzdHJveUhvb2tEYXRhOwoKZXh0ZXJuIHZvaWQgWHRHZXREaXNwbGF5cygKCiAg
ICBYdEFwcENvbnRleHQgLAogICAgRGlzcGxheSoqKiAsCiAgICBDYXJkaW5hbCoKCik7CgpleHRl
cm4gQm9vbGVhbiBYdFRvb2xraXRUaHJlYWRJbml0aWFsaXplKAoKICAgIHZvaWQKCik7CgpleHRl
cm4gdm9pZCBYdEFwcFNldEV4aXRGbGFnKAoKICAgIFh0QXBwQ29udGV4dAoKKTsKCmV4dGVybiBC
b29sZWFuIFh0QXBwR2V0RXhpdEZsYWcoCgogICAgWHRBcHBDb250ZXh0CgopOwoKZXh0ZXJuIHZv
aWQgWHRBcHBMb2NrKAoKICAgIFh0QXBwQ29udGV4dAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwVW5s
b2NrKAoKICAgIFh0QXBwQ29udGV4dAoKKTsKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0Fj
Y2VsZXJhdG9yVGFibGUoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAogICAgQ2Fy
ZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0UG9pbnRl
cioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvQXRvbSgKCiAgICBEaXNwbGF5KiAs
CiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAogICAg
WHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3Ry
aW5nVG9Cb29sKAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFs
KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgop
OwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0Jvb2xlYW4oCgogICAgRGlzcGxheSogLAog
ICAgWHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhy
bVZhbHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmlu
Z1RvQ29tbWFuZEFyZ0FycmF5KAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAg
IENhcmRpbmFsKiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBv
aW50ZXIqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0N1cnNvcigKCiAgICBEaXNw
bGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIg
LAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0
Q3Z0U3RyaW5nVG9EaW1lbnNpb24oCgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAog
ICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0
UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRGlyZWN0b3J5U3RyaW5n
KAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFsKiAsCiAgICBY
cm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgopOwoKZXh0ZXJu
IEJvb2xlYW4gWHRDdnRTdHJpbmdUb0Rpc3BsYXkoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFs
dWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRy
ICwKICAgIFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRmlsZSgK
CiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJt
VmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBC
b29sZWFuIFh0Q3Z0U3RyaW5nVG9GbG9hdCgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0
ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAog
ICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9Gb250KAoKICAg
IERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFsKiAsCiAgICBYcm1WYWx1
ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgopOwoKZXh0ZXJuIEJvb2xl
YW4gWHRDdnRTdHJpbmdUb0ZvbnRTZXQoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIg
LAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAg
IFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRm9udFN0cnVjdCgK
CiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJt
VmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBC
b29sZWFuIFh0Q3Z0U3RyaW5nVG9HcmF2aXR5KAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVl
UHRyICwKICAgIENhcmRpbmFsKiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAs
CiAgICBYdFBvaW50ZXIqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0luaXRpYWxT
dGF0ZSgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAog
ICAgWHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4
dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9JbnQoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFs
dWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRy
ICwKICAgIFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvUGl4ZWwo
CgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhy
bVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgoKCmV4dGVy
biBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9SZXN0YXJ0U3R5bGUoCgogICAgRGlzcGxheSogLAogICAg
WHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZh
bHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1Rv
U2hvcnQoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwK
ICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7Cgpl
eHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvVHJhbnNsYXRpb25UYWJsZSgKCiAgICBEaXNwbGF5
KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAog
ICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0
U3RyaW5nVG9VbnNpZ25lZENoYXIoCgogICAgRGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAog
ICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0
UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvVmlzdWFsKAoKICAgIERp
c3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFsKiAsCiAgICBYcm1WYWx1ZVB0
ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgopOwoKCgpleHRlcm4gQm9vbGVh
biBYdEN2dEludFRvQm9vbCgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBD
YXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2lu
dGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9Cb29sZWFuKAoKICAgIERpc3BsYXkq
ICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFsKiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAg
ICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRJ
bnRUb0NvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwKICAgIENhcmRpbmFs
KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYdFBvaW50ZXIqCgop
OwoKCgpleHRlcm4gQm9vbGVhbiBYdEN2dEludFRvRmxvYXQoCgogICAgRGlzcGxheSogLAogICAg
WHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVlUHRyICwKICAgIFhybVZh
bHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dEludFRvRm9u
dCgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBDYXJkaW5hbCogLAogICAg
WHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQb2ludGVyKgoKKTsKCmV4dGVy
biBCb29sZWFuIFh0Q3Z0SW50VG9QaXhlbCgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0
ciAsCiAgICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAog
ICAgWHRQb2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9QaXhtYXAoCgogICAg
RGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVl
UHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgoKCmV4dGVybiBCb29s
ZWFuIFh0Q3Z0SW50VG9TaG9ydCgKCiAgICBEaXNwbGF5KiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAg
ICBDYXJkaW5hbCogLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHJtVmFsdWVQdHIgLAogICAgWHRQ
b2ludGVyKgoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9VbnNpZ25lZENoYXIoCgogICAg
RGlzcGxheSogLAogICAgWHJtVmFsdWVQdHIgLAogICAgQ2FyZGluYWwqICwKICAgIFhybVZhbHVl
UHRyICwKICAgIFhybVZhbHVlUHRyICwKICAgIFh0UG9pbnRlcioKCik7CgoKCmV4dGVybiBCb29s
ZWFuIFh0Q3Z0Q29sb3JUb1BpeGVsKAoKICAgIERpc3BsYXkqICwKICAgIFhybVZhbHVlUHRyICwK
ICAgIENhcmRpbmFsKiAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBYcm1WYWx1ZVB0ciAsCiAgICBY
dFBvaW50ZXIqCgopOwoKCgoKCgoKdHlwZWRlZiB2b2lkICpJY2VQb2ludGVyOwoKCgoKdHlwZWRl
ZiBlbnVtIHsKICAgIEljZVBvQXV0aEhhdmVSZXBseSwKICAgIEljZVBvQXV0aFJlamVjdGVkLAog
ICAgSWNlUG9BdXRoRmFpbGVkLAogICAgSWNlUG9BdXRoRG9uZUNsZWFudXAKfSBJY2VQb0F1dGhT
dGF0dXM7Cgp0eXBlZGVmIGVudW0gewogICAgSWNlUGFBdXRoQ29udGludWUsCiAgICBJY2VQYUF1
dGhBY2NlcHRlZCwKICAgIEljZVBhQXV0aFJlamVjdGVkLAogICAgSWNlUGFBdXRoRmFpbGVkCn0g
SWNlUGFBdXRoU3RhdHVzOwoKdHlwZWRlZiBlbnVtIHsKICAgIEljZUNvbm5lY3RQZW5kaW5nLAog
ICAgSWNlQ29ubmVjdEFjY2VwdGVkLAogICAgSWNlQ29ubmVjdFJlamVjdGVkLAogICAgSWNlQ29u
bmVjdElPRXJyb3IKfSBJY2VDb25uZWN0U3RhdHVzOwoKdHlwZWRlZiBlbnVtIHsKICAgIEljZVBy
b3RvY29sU2V0dXBTdWNjZXNzLAogICAgSWNlUHJvdG9jb2xTZXR1cEZhaWx1cmUsCiAgICBJY2VQ
cm90b2NvbFNldHVwSU9FcnJvciwKICAgIEljZVByb3RvY29sQWxyZWFkeUFjdGl2ZQp9IEljZVBy
b3RvY29sU2V0dXBTdGF0dXM7Cgp0eXBlZGVmIGVudW0gewogICAgSWNlQWNjZXB0U3VjY2VzcywK
ICAgIEljZUFjY2VwdEZhaWx1cmUsCiAgICBJY2VBY2NlcHRCYWRNYWxsb2MKfSBJY2VBY2NlcHRT
dGF0dXM7Cgp0eXBlZGVmIGVudW0gewogICAgSWNlQ2xvc2VkTm93LAogICAgSWNlQ2xvc2VkQVNB
UCwKICAgIEljZUNvbm5lY3Rpb25JblVzZSwKICAgIEljZVN0YXJ0ZWRTaHV0ZG93bk5lZ290aWF0
aW9uCn0gSWNlQ2xvc2VTdGF0dXM7Cgp0eXBlZGVmIGVudW0gewogICAgSWNlUHJvY2Vzc01lc3Nh
Z2VzU3VjY2VzcywKICAgIEljZVByb2Nlc3NNZXNzYWdlc0lPRXJyb3IsCiAgICBJY2VQcm9jZXNz
TWVzc2FnZXNDb25uZWN0aW9uQ2xvc2VkCn0gSWNlUHJvY2Vzc01lc3NhZ2VzU3RhdHVzOwoKdHlw
ZWRlZiBzdHJ1Y3QgewogICAgdW5zaWduZWQgbG9uZyBzZXF1ZW5jZV9vZl9yZXF1ZXN0OwogICAg
aW50IG1ham9yX29wY29kZV9vZl9yZXF1ZXN0OwogICAgaW50IG1pbm9yX29wY29kZV9vZl9yZXF1
ZXN0OwogICAgSWNlUG9pbnRlciByZXBseTsKfSBJY2VSZXBseVdhaXRJbmZvOwoKdHlwZWRlZiBz
dHJ1Y3QgX0ljZUNvbm4gKkljZUNvbm47CnR5cGVkZWYgc3RydWN0IF9JY2VMaXN0ZW5PYmogKklj
ZUxpc3Rlbk9iajsKCnR5cGVkZWYgdm9pZCAoKkljZVdhdGNoUHJvYykgKAoKICAgIEljZUNvbm4g
LAogICAgSWNlUG9pbnRlciAsCiAgICBpbnQgLAogICAgSWNlUG9pbnRlciAqCgopOwoKdHlwZWRl
ZiB2b2lkICgqSWNlUG9Qcm9jZXNzTXNnUHJvYykgKAoKICAgIEljZUNvbm4gLAogICAgSWNlUG9p
bnRlciAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBpbnQgLAogICAgSWNlUmVw
bHlXYWl0SW5mbyAqICwKICAgIGludCAqCgopOwoKdHlwZWRlZiB2b2lkICgqSWNlUGFQcm9jZXNz
TXNnUHJvYykgKAoKICAgIEljZUNvbm4gLAogICAgSWNlUG9pbnRlciAsCiAgICBpbnQgLAogICAg
dW5zaWduZWQgbG9uZyAsCiAgICBpbnQKCik7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgbWFq
b3JfdmVyc2lvbjsKICAgIGludCBtaW5vcl92ZXJzaW9uOwogICAgSWNlUG9Qcm9jZXNzTXNnUHJv
YyBwcm9jZXNzX21zZ19wcm9jOwp9IEljZVBvVmVyc2lvblJlYzsKCnR5cGVkZWYgc3RydWN0IHsK
ICAgIGludCBtYWpvcl92ZXJzaW9uOwogICAgaW50IG1pbm9yX3ZlcnNpb247CiAgICBJY2VQYVBy
b2Nlc3NNc2dQcm9jIHByb2Nlc3NfbXNnX3Byb2M7Cn0gSWNlUGFWZXJzaW9uUmVjOwoKdHlwZWRl
ZiBJY2VQb0F1dGhTdGF0dXMgKCpJY2VQb0F1dGhQcm9jKSAoCgogICAgSWNlQ29ubiAsCiAgICBJ
Y2VQb2ludGVyICogLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgSWNlUG9pbnRl
ciAsCiAgICBpbnQgKiAsCiAgICBJY2VQb2ludGVyICogLAogICAgY2hhciAqKgoKKTsKCnR5cGVk
ZWYgSWNlUGFBdXRoU3RhdHVzICgqSWNlUGFBdXRoUHJvYykgKAoKICAgIEljZUNvbm4gLAogICAg
SWNlUG9pbnRlciAqICwKICAgIGludCAsCiAgICBpbnQgLAogICAgSWNlUG9pbnRlciAsCiAgICBp
bnQgKiAsCiAgICBJY2VQb2ludGVyICogLAogICAgY2hhciAqKgoKKTsKCnR5cGVkZWYgaW50ICgq
SWNlSG9zdEJhc2VkQXV0aFByb2MpICgKCiAgICBjaGFyICoKCik7Cgp0eXBlZGVmIGludCAoKklj
ZVByb3RvY29sU2V0dXBQcm9jKSAoCgogICAgSWNlQ29ubiAsCiAgICBpbnQgLAogICAgaW50ICwK
ICAgIGNoYXIgKiAsCiAgICBjaGFyICogLAogICAgSWNlUG9pbnRlciAqICwKICAgIGNoYXIgKioK
Cik7Cgp0eXBlZGVmIHZvaWQgKCpJY2VQcm90b2NvbEFjdGl2YXRlUHJvYykgKAoKICAgIEljZUNv
bm4gLAogICAgSWNlUG9pbnRlcgoKKTsKCnR5cGVkZWYgdm9pZCAoKkljZUlPRXJyb3JQcm9jKSAo
CgogICAgSWNlQ29ubgoKKTsKCnR5cGVkZWYgdm9pZCAoKkljZVBpbmdSZXBseVByb2MpICgKCiAg
ICBJY2VDb25uICwKICAgIEljZVBvaW50ZXIKCik7Cgp0eXBlZGVmIHZvaWQgKCpJY2VFcnJvckhh
bmRsZXIpICgKCiAgICBJY2VDb25uICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQg
bG9uZyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIEljZVBvaW50ZXIKCik7Cgp0eXBlZGVmIHZv
aWQgKCpJY2VJT0Vycm9ySGFuZGxlcikgKAoKICAgIEljZUNvbm4KCik7CgoKCgoKCgoKZXh0ZXJu
IGludCBJY2VSZWdpc3RlckZvclByb3RvY29sU2V0dXAgKAoKICAgIGNoYXIgKiAsCiAgICBjaGFy
ICogLAogICAgY2hhciAqICwKICAgIGludCAsCiAgICBJY2VQb1ZlcnNpb25SZWMgKiAsCiAgICBp
bnQgLAogICAgY2hhciAqKiAsCiAgICBJY2VQb0F1dGhQcm9jICogLAogICAgSWNlSU9FcnJvclBy
b2MKCik7CgpleHRlcm4gaW50IEljZVJlZ2lzdGVyRm9yUHJvdG9jb2xSZXBseSAoCgogICAgY2hh
ciAqICwKICAgIGNoYXIgKiAsCiAgICBjaGFyICogLAogICAgaW50ICwKICAgIEljZVBhVmVyc2lv
blJlYyAqICwKICAgIGludCAsCiAgICBjaGFyICoqICwKICAgIEljZVBhQXV0aFByb2MgKiAsCiAg
ICBJY2VIb3N0QmFzZWRBdXRoUHJvYyAsCiAgICBJY2VQcm90b2NvbFNldHVwUHJvYyAsCiAgICBJ
Y2VQcm90b2NvbEFjdGl2YXRlUHJvYyAsCiAgICBJY2VJT0Vycm9yUHJvYwoKKTsKCmV4dGVybiBJ
Y2VDb25uIEljZU9wZW5Db25uZWN0aW9uICgKCiAgICBjaGFyICogLAogICAgSWNlUG9pbnRlciAs
CiAgICBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjaGFyICoKCik7CgpleHRlcm4gSWNl
UG9pbnRlciBJY2VHZXRDb25uZWN0aW9uQ29udGV4dCAoCgogICAgSWNlQ29ubgoKKTsKCmV4dGVy
biBpbnQgSWNlTGlzdGVuRm9yQ29ubmVjdGlvbnMgKAoKICAgIGludCAqICwKICAgIEljZUxpc3Rl
bk9iaiAqKiAsCiAgICBpbnQgLAogICAgY2hhciAqCgopOwoKZXh0ZXJuIGludCBJY2VMaXN0ZW5G
b3JXZWxsS25vd25Db25uZWN0aW9ucyAoCgogICAgY2hhciAqICwKICAgIGludCAqICwKICAgIElj
ZUxpc3Rlbk9iaiAqKiAsCiAgICBpbnQgLAogICAgY2hhciAqCgopOwoKZXh0ZXJuIGludCBJY2VH
ZXRMaXN0ZW5Db25uZWN0aW9uTnVtYmVyICgKCiAgICBJY2VMaXN0ZW5PYmoKCik7CgpleHRlcm4g
Y2hhciAqSWNlR2V0TGlzdGVuQ29ubmVjdGlvblN0cmluZyAoCgogICAgSWNlTGlzdGVuT2JqCgop
OwoKZXh0ZXJuIGNoYXIgKkljZUNvbXBvc2VOZXR3b3JrSWRMaXN0ICgKCiAgICBpbnQgLAogICAg
SWNlTGlzdGVuT2JqICoKCik7CgpleHRlcm4gdm9pZCBJY2VGcmVlTGlzdGVuT2JqcyAoCgogICAg
aW50ICwKICAgIEljZUxpc3Rlbk9iaiAqCgopOwoKZXh0ZXJuIHZvaWQgSWNlU2V0SG9zdEJhc2Vk
QXV0aFByb2MgKAoKICAgIEljZUxpc3Rlbk9iaiAsCiAgICBJY2VIb3N0QmFzZWRBdXRoUHJvYwoK
KTsKCmV4dGVybiBJY2VDb25uIEljZUFjY2VwdENvbm5lY3Rpb24gKAoKICAgIEljZUxpc3Rlbk9i
aiAsCiAgICBJY2VBY2NlcHRTdGF0dXMgKgoKKTsKCmV4dGVybiB2b2lkIEljZVNldFNodXRkb3du
TmVnb3RpYXRpb24gKAoKICAgIEljZUNvbm4gLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBJY2VD
aGVja1NodXRkb3duTmVnb3RpYXRpb24gKAoKICAgIEljZUNvbm4KCik7CgpleHRlcm4gSWNlQ2xv
c2VTdGF0dXMgSWNlQ2xvc2VDb25uZWN0aW9uICgKCiAgICBJY2VDb25uCgopOwoKZXh0ZXJuIGlu
dCBJY2VBZGRDb25uZWN0aW9uV2F0Y2ggKAoKICAgIEljZVdhdGNoUHJvYyAsCiAgICBJY2VQb2lu
dGVyCgopOwoKZXh0ZXJuIHZvaWQgSWNlUmVtb3ZlQ29ubmVjdGlvbldhdGNoICgKCiAgICBJY2VX
YXRjaFByb2MgLAogICAgSWNlUG9pbnRlcgoKKTsKCmV4dGVybiBJY2VQcm90b2NvbFNldHVwU3Rh
dHVzIEljZVByb3RvY29sU2V0dXAgKAoKICAgIEljZUNvbm4gLAogICAgaW50ICwKICAgIEljZVBv
aW50ZXIgLAogICAgaW50ICwKICAgIGludCAqICwKICAgIGludCAqICwKICAgIGNoYXIgKiogLAog
ICAgY2hhciAqKiAsCiAgICBpbnQgLAogICAgY2hhciAqCgopOwoKZXh0ZXJuIGludCBJY2VQcm90
b2NvbFNodXRkb3duICgKCiAgICBJY2VDb25uICwKICAgIGludAoKKTsKCmV4dGVybiBJY2VQcm9j
ZXNzTWVzc2FnZXNTdGF0dXMgSWNlUHJvY2Vzc01lc3NhZ2VzICgKCiAgICBJY2VDb25uICwKICAg
IEljZVJlcGx5V2FpdEluZm8gKiAsCiAgICBpbnQgKgoKKTsKCmV4dGVybiBpbnQgSWNlUGluZyAo
CgogICBJY2VDb25uICwKICAgSWNlUGluZ1JlcGx5UHJvYyAsCiAgIEljZVBvaW50ZXIKCik7Cgpl
eHRlcm4gY2hhciAqSWNlQWxsb2NTY3JhdGNoICgKCiAgIEljZUNvbm4gLAogICB1bnNpZ25lZCBs
b25nCgopOwoKZXh0ZXJuIGludCBJY2VGbHVzaCAoCgogICBJY2VDb25uCgopOwoKZXh0ZXJuIGlu
dCBJY2VHZXRPdXRCdWZTaXplICgKCiAgIEljZUNvbm4KCik7CgpleHRlcm4gaW50IEljZUdldElu
QnVmU2l6ZSAoCgogICBJY2VDb25uCgopOwoKZXh0ZXJuIEljZUNvbm5lY3RTdGF0dXMgSWNlQ29u
bmVjdGlvblN0YXR1cyAoCgogICAgSWNlQ29ubgoKKTsKCmV4dGVybiBjaGFyICpJY2VWZW5kb3Ig
KAoKICAgIEljZUNvbm4KCik7CgpleHRlcm4gY2hhciAqSWNlUmVsZWFzZSAoCgogICAgSWNlQ29u
bgoKKTsKCmV4dGVybiBpbnQgSWNlUHJvdG9jb2xWZXJzaW9uICgKCiAgICBJY2VDb25uCgopOwoK
ZXh0ZXJuIGludCBJY2VQcm90b2NvbFJldmlzaW9uICgKCiAgICBJY2VDb25uCgopOwoKZXh0ZXJu
IGludCBJY2VDb25uZWN0aW9uTnVtYmVyICgKCiAgICBJY2VDb25uCgopOwoKZXh0ZXJuIGNoYXIg
KkljZUNvbm5lY3Rpb25TdHJpbmcgKAoKICAgIEljZUNvbm4KCik7CgpleHRlcm4gdW5zaWduZWQg
bG9uZyBJY2VMYXN0U2VudFNlcXVlbmNlTnVtYmVyICgKCiAgICBJY2VDb25uCgopOwoKZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgSWNlTGFzdFJlY2VpdmVkU2VxdWVuY2VOdW1iZXIgKAoKICAgIEljZUNv
bm4KCik7CgpleHRlcm4gaW50IEljZVN3YXBwaW5nICgKCiAgICBJY2VDb25uCgopOwoKZXh0ZXJu
IEljZUVycm9ySGFuZGxlciBJY2VTZXRFcnJvckhhbmRsZXIgKAoKICAgIEljZUVycm9ySGFuZGxl
cgoKKTsKCmV4dGVybiBJY2VJT0Vycm9ySGFuZGxlciBJY2VTZXRJT0Vycm9ySGFuZGxlciAoCgog
ICAgSWNlSU9FcnJvckhhbmRsZXIKCik7CgoKCgoKCmV4dGVybiBpbnQgSWNlSW5pdFRocmVhZHMg
KAoKICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBJY2VBcHBMb2NrQ29ubiAoCgogICAgSWNlQ29u
bgoKKTsKCmV4dGVybiB2b2lkIEljZUFwcFVubG9ja0Nvbm4gKAoKICAgIEljZUNvbm4KCik7CgoK
dHlwZWRlZiBJY2VQb2ludGVyIFNtUG9pbnRlcjsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1NtY0Nv
bm4gKlNtY0Nvbm47CnR5cGVkZWYgc3RydWN0IF9TbXNDb25uICpTbXNDb25uOwoKCgoKCgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBpbnQgbGVuZ3RoOwogICAgU21Qb2ludGVyIHZhbHVlOwp9IFNtUHJv
cFZhbHVlOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqbmFtZTsKICAgIGNoYXIgKnR5cGU7
CiAgICBpbnQgbnVtX3ZhbHM7CiAgICBTbVByb3BWYWx1ZSAqdmFsczsKfSBTbVByb3A7CgoKCgoK
Cgp0eXBlZGVmIGVudW0gewogICAgU21jQ2xvc2VkTm93LAogICAgU21jQ2xvc2VkQVNBUCwKICAg
IFNtY0Nvbm5lY3Rpb25JblVzZQp9IFNtY0Nsb3NlU3RhdHVzOwoKCgoKCgoKdHlwZWRlZiB2b2lk
ICgqU21jU2F2ZVlvdXJzZWxmUHJvYykgKAoKICAgIFNtY0Nvbm4gLAogICAgU21Qb2ludGVyICwK
ICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCnR5cGVkZWYgdm9pZCAo
KlNtY1NhdmVZb3Vyc2VsZlBoYXNlMlByb2MpICgKCiAgICBTbWNDb25uICwKICAgIFNtUG9pbnRl
cgoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtY0ludGVyYWN0UHJvYykgKAoKICAgIFNtY0Nvbm4gLAog
ICAgU21Qb2ludGVyCgopOwoKdHlwZWRlZiB2b2lkICgqU21jRGllUHJvYykgKAoKICAgIFNtY0Nv
bm4gLAogICAgU21Qb2ludGVyCgopOwoKdHlwZWRlZiB2b2lkICgqU21jU2h1dGRvd25DYW5jZWxs
ZWRQcm9jKSAoCgogICAgU21jQ29ubiAsCiAgICBTbVBvaW50ZXIKCik7Cgp0eXBlZGVmIHZvaWQg
KCpTbWNTYXZlQ29tcGxldGVQcm9jKSAoCgogICAgU21jQ29ubiAsCiAgICBTbVBvaW50ZXIKCik7
Cgp0eXBlZGVmIHZvaWQgKCpTbWNQcm9wUmVwbHlQcm9jKSAoCgogICAgU21jQ29ubiAsCiAgICBT
bVBvaW50ZXIgLAogICAgaW50ICwKICAgIFNtUHJvcCAqKgoKKTsKCgoKCgoKdHlwZWRlZiBzdHJ1
Y3QgewoKICAgIHN0cnVjdCB7CiAgICAgICAgU21jU2F2ZVlvdXJzZWxmUHJvYyBjYWxsYmFjazsK
ICAgICAgICBTbVBvaW50ZXIgY2xpZW50X2RhdGE7CiAgICB9IHNhdmVfeW91cnNlbGY7CgogICAg
c3RydWN0IHsKICAgICAgICBTbWNEaWVQcm9jIGNhbGxiYWNrOwogICAgICAgIFNtUG9pbnRlciBj
bGllbnRfZGF0YTsKICAgIH0gZGllOwoKICAgIHN0cnVjdCB7CiAgICAgICAgU21jU2F2ZUNvbXBs
ZXRlUHJvYyBjYWxsYmFjazsKICAgICAgICBTbVBvaW50ZXIgY2xpZW50X2RhdGE7CiAgICB9IHNh
dmVfY29tcGxldGU7CgogICAgc3RydWN0IHsKICAgICAgICBTbWNTaHV0ZG93bkNhbmNlbGxlZFBy
b2MgY2FsbGJhY2s7CiAgICAgICAgU21Qb2ludGVyIGNsaWVudF9kYXRhOwogICAgfSBzaHV0ZG93
bl9jYW5jZWxsZWQ7Cgp9IFNtY0NhbGxiYWNrczsKdHlwZWRlZiBpbnQgKCpTbXNSZWdpc3RlckNs
aWVudFByb2MpICgKCiAgICBTbXNDb25uICwKICAgIFNtUG9pbnRlciAsCiAgICBjaGFyICoKCik7
Cgp0eXBlZGVmIHZvaWQgKCpTbXNJbnRlcmFjdFJlcXVlc3RQcm9jKSAoCgogICAgU21zQ29ubiAs
CiAgICBTbVBvaW50ZXIgLAogICAgaW50CgopOwoKdHlwZWRlZiB2b2lkICgqU21zSW50ZXJhY3RE
b25lUHJvYykgKAoKICAgIFNtc0Nvbm4gLAogICAgU21Qb2ludGVyICwKICAgIGludAoKKTsKCnR5
cGVkZWYgdm9pZCAoKlNtc1NhdmVZb3Vyc2VsZlJlcXVlc3RQcm9jKSAoCgogICAgU21zQ29ubiAs
CiAgICBTbVBvaW50ZXIgLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwK
ICAgIGludAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtc1NhdmVZb3Vyc2VsZlBoYXNlMlJlcXVlc3RQ
cm9jKSAoCgogICAgU21zQ29ubiAsCiAgICBTbVBvaW50ZXIKCik7Cgp0eXBlZGVmIHZvaWQgKCpT
bXNTYXZlWW91cnNlbGZEb25lUHJvYykgKAoKICAgIFNtc0Nvbm4gLAogICAgU21Qb2ludGVyICwK
ICAgIGludAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtc0Nsb3NlQ29ubmVjdGlvblByb2MpICgKCiAg
ICBTbXNDb25uICwKICAgIFNtUG9pbnRlciAsCiAgICBpbnQgLAogICAgY2hhciAqKgoKKTsKCnR5
cGVkZWYgdm9pZCAoKlNtc1NldFByb3BlcnRpZXNQcm9jKSAoCgogICAgU21zQ29ubiAsCiAgICBT
bVBvaW50ZXIgLAogICAgaW50ICwKICAgIFNtUHJvcCAqKgoKKTsKCnR5cGVkZWYgdm9pZCAoKlNt
c0RlbGV0ZVByb3BlcnRpZXNQcm9jKSAoCgogICAgU21zQ29ubiAsCiAgICBTbVBvaW50ZXIgLAog
ICAgaW50ICwKICAgIGNoYXIgKioKCik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNHZXRQcm9wZXJ0aWVz
UHJvYykgKAoKICAgIFNtc0Nvbm4gLAogICAgU21Qb2ludGVyCgopOwoKCgoKCgp0eXBlZGVmIHN0
cnVjdCB7CgogICAgc3RydWN0IHsKICAgICAgICBTbXNSZWdpc3RlckNsaWVudFByb2MgY2FsbGJh
Y2s7CiAgICAgICAgU21Qb2ludGVyIG1hbmFnZXJfZGF0YTsKICAgIH0gcmVnaXN0ZXJfY2xpZW50
OwoKICAgIHN0cnVjdCB7CiAgICAgICAgU21zSW50ZXJhY3RSZXF1ZXN0UHJvYyBjYWxsYmFjazsK
ICAgICAgICBTbVBvaW50ZXIgbWFuYWdlcl9kYXRhOwogICAgfSBpbnRlcmFjdF9yZXF1ZXN0OwoK
ICAgIHN0cnVjdCB7CiAgICAgICAgU21zSW50ZXJhY3REb25lUHJvYyBjYWxsYmFjazsKICAgICAg
ICBTbVBvaW50ZXIgbWFuYWdlcl9kYXRhOwogICAgfSBpbnRlcmFjdF9kb25lOwoKICAgIHN0cnVj
dCB7CiAgICAgICAgU21zU2F2ZVlvdXJzZWxmUmVxdWVzdFByb2MgY2FsbGJhY2s7CiAgICAgICAg
U21Qb2ludGVyIG1hbmFnZXJfZGF0YTsKICAgIH0gc2F2ZV95b3Vyc2VsZl9yZXF1ZXN0OwoKICAg
IHN0cnVjdCB7CiAgICAgICAgU21zU2F2ZVlvdXJzZWxmUGhhc2UyUmVxdWVzdFByb2MgY2FsbGJh
Y2s7CiAgICAgICAgU21Qb2ludGVyIG1hbmFnZXJfZGF0YTsKICAgIH0gc2F2ZV95b3Vyc2VsZl9w
aGFzZTJfcmVxdWVzdDsKCiAgICBzdHJ1Y3QgewogICAgICAgIFNtc1NhdmVZb3Vyc2VsZkRvbmVQ
cm9jIGNhbGxiYWNrOwogICAgICAgIFNtUG9pbnRlciBtYW5hZ2VyX2RhdGE7CiAgICB9IHNhdmVf
eW91cnNlbGZfZG9uZTsKCiAgICBzdHJ1Y3QgewogICAgICAgIFNtc0Nsb3NlQ29ubmVjdGlvblBy
b2MgY2FsbGJhY2s7CiAgICAgICAgU21Qb2ludGVyIG1hbmFnZXJfZGF0YTsKICAgIH0gY2xvc2Vf
Y29ubmVjdGlvbjsKCiAgICBzdHJ1Y3QgewogICAgICAgIFNtc1NldFByb3BlcnRpZXNQcm9jIGNh
bGxiYWNrOwogICAgICAgIFNtUG9pbnRlciBtYW5hZ2VyX2RhdGE7CiAgICB9IHNldF9wcm9wZXJ0
aWVzOwoKICAgIHN0cnVjdCB7CiAgICAgICAgU21zRGVsZXRlUHJvcGVydGllc1Byb2MgY2FsbGJh
Y2s7CiAgICAgICAgU21Qb2ludGVyIG1hbmFnZXJfZGF0YTsKICAgIH0gZGVsZXRlX3Byb3BlcnRp
ZXM7CgogICAgc3RydWN0IHsKICAgICAgICBTbXNHZXRQcm9wZXJ0aWVzUHJvYyBjYWxsYmFjazsK
ICAgICAgICBTbVBvaW50ZXIgbWFuYWdlcl9kYXRhOwogICAgfSBnZXRfcHJvcGVydGllczsKCn0g
U21zQ2FsbGJhY2tzOwp0eXBlZGVmIGludCAoKlNtc05ld0NsaWVudFByb2MpICgKCiAgICBTbXND
b25uICwKICAgIFNtUG9pbnRlciAsCiAgICB1bnNpZ25lZCBsb25nICogLAogICAgU21zQ2FsbGJh
Y2tzICogLAogICAgY2hhciAqKgoKKTsKCgoKCgoKCnR5cGVkZWYgdm9pZCAoKlNtY0Vycm9ySGFu
ZGxlcikgKAoKICAgIFNtY0Nvbm4gLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBs
b25nICwKICAgIGludCAsCiAgICBpbnQgLAogICAgU21Qb2ludGVyCgopOwoKdHlwZWRlZiB2b2lk
ICgqU21zRXJyb3JIYW5kbGVyKSAoCgogICAgU21zQ29ubiAsCiAgICBpbnQgLAogICAgaW50ICwK
ICAgIHVuc2lnbmVkIGxvbmcgLAogICAgaW50ICwKICAgIGludCAsCiAgICBTbVBvaW50ZXIKCik7
CgoKCgoKCgoKCmV4dGVybiBTbWNDb25uIFNtY09wZW5Db25uZWN0aW9uICgKCiAgICBjaGFyICog
LAogICAgU21Qb2ludGVyICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgbG9uZyAs
CiAgICBTbWNDYWxsYmFja3MgKiAsCiAgICBjaGFyICogLAogICAgY2hhciAqKiAsCiAgICBpbnQg
LAogICAgY2hhciAqCgopOwoKZXh0ZXJuIFNtY0Nsb3NlU3RhdHVzIFNtY0Nsb3NlQ29ubmVjdGlv
biAoCgogICAgU21jQ29ubiAsCiAgICBpbnQgLAogICAgY2hhciAqKgoKKTsKCmV4dGVybiB2b2lk
IFNtY01vZGlmeUNhbGxiYWNrcyAoCgogICAgU21jQ29ubiAsCiAgICB1bnNpZ25lZCBsb25nICwK
ICAgIFNtY0NhbGxiYWNrcyAqCgopOwoKZXh0ZXJuIHZvaWQgU21jU2V0UHJvcGVydGllcyAoCgog
ICAgU21jQ29ubiAsCiAgICBpbnQgLAogICAgU21Qcm9wICoqCgopOwoKZXh0ZXJuIHZvaWQgU21j
RGVsZXRlUHJvcGVydGllcyAoCgogICAgU21jQ29ubiAsCiAgICBpbnQgLAogICAgY2hhciAqKgoK
KTsKCmV4dGVybiBpbnQgU21jR2V0UHJvcGVydGllcyAoCgogICAgU21jQ29ubiAsCiAgICBTbWNQ
cm9wUmVwbHlQcm9jICwKICAgIFNtUG9pbnRlcgoKKTsKCmV4dGVybiBpbnQgU21jSW50ZXJhY3RS
ZXF1ZXN0ICgKCiAgICBTbWNDb25uICwKICAgIGludCAsCiAgICBTbWNJbnRlcmFjdFByb2MgLAog
ICAgU21Qb2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgU21jSW50ZXJhY3REb25lICgKCiAgICBTbWND
b25uICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFNtY1JlcXVlc3RTYXZlWW91cnNlbGYgKAoK
ICAgIFNtY0Nvbm4gLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAg
IGludAoKKTsKCmV4dGVybiBpbnQgU21jUmVxdWVzdFNhdmVZb3Vyc2VsZlBoYXNlMiAoCgogICAg
U21jQ29ubiAsCiAgICBTbWNTYXZlWW91cnNlbGZQaGFzZTJQcm9jICwKICAgIFNtUG9pbnRlcgoK
KTsKCmV4dGVybiB2b2lkIFNtY1NhdmVZb3Vyc2VsZkRvbmUgKAoKICAgIFNtY0Nvbm4gLAogICAg
aW50CgopOwoKZXh0ZXJuIGludCBTbWNQcm90b2NvbFZlcnNpb24gKAoKICAgIFNtY0Nvbm4KCik7
CgpleHRlcm4gaW50IFNtY1Byb3RvY29sUmV2aXNpb24gKAoKICAgIFNtY0Nvbm4KCik7CgpleHRl
cm4gY2hhciAqU21jVmVuZG9yICgKCiAgICBTbWNDb25uCgopOwoKZXh0ZXJuIGNoYXIgKlNtY1Jl
bGVhc2UgKAoKICAgIFNtY0Nvbm4KCik7CgpleHRlcm4gY2hhciAqU21jQ2xpZW50SUQgKAoKICAg
IFNtY0Nvbm4KCik7CgpleHRlcm4gSWNlQ29ubiBTbWNHZXRJY2VDb25uZWN0aW9uICgKCiAgICBT
bWNDb25uCgopOwoKZXh0ZXJuIGludCBTbXNJbml0aWFsaXplICgKCiAgICBjaGFyICogLAogICAg
Y2hhciAqICwKICAgIFNtc05ld0NsaWVudFByb2MgLAogICAgU21Qb2ludGVyICwKICAgIEljZUhv
c3RCYXNlZEF1dGhQcm9jICwKICAgIGludCAsCiAgICBjaGFyICoKCik7CgpleHRlcm4gY2hhciAq
U21zQ2xpZW50SG9zdE5hbWUgKAoKICAgIFNtc0Nvbm4KCik7CgpleHRlcm4gY2hhciAqU21zR2Vu
ZXJhdGVDbGllbnRJRCAoCgogICAgU21zQ29ubgoKKTsKCmV4dGVybiBpbnQgU21zUmVnaXN0ZXJD
bGllbnRSZXBseSAoCgogICAgU21zQ29ubiAsCiAgICBjaGFyICoKCik7CgpleHRlcm4gdm9pZCBT
bXNTYXZlWW91cnNlbGYgKAoKICAgIFNtc0Nvbm4gLAogICAgaW50ICwKICAgIGludCAsCiAgICBp
bnQgLAogICAgaW50CgopOwoKZXh0ZXJuIHZvaWQgU21zU2F2ZVlvdXJzZWxmUGhhc2UyICgKCiAg
ICBTbXNDb25uCgopOwoKZXh0ZXJuIHZvaWQgU21zSW50ZXJhY3QgKAoKICAgIFNtc0Nvbm4KCik7
CgpleHRlcm4gdm9pZCBTbXNEaWUgKAoKICAgIFNtc0Nvbm4KCik7CgpleHRlcm4gdm9pZCBTbXNT
YXZlQ29tcGxldGUgKAoKICAgIFNtc0Nvbm4KCik7CgpleHRlcm4gdm9pZCBTbXNTaHV0ZG93bkNh
bmNlbGxlZCAoCgogICAgU21zQ29ubgoKKTsKCmV4dGVybiB2b2lkIFNtc1JldHVyblByb3BlcnRp
ZXMgKAoKICAgIFNtc0Nvbm4gLAogICAgaW50ICwKICAgIFNtUHJvcCAqKgoKKTsKCmV4dGVybiB2
b2lkIFNtc0NsZWFuVXAgKAoKICAgIFNtc0Nvbm4KCik7CgpleHRlcm4gaW50IFNtc1Byb3RvY29s
VmVyc2lvbiAoCgogICAgU21zQ29ubgoKKTsKCmV4dGVybiBpbnQgU21zUHJvdG9jb2xSZXZpc2lv
biAoCgogICAgU21zQ29ubgoKKTsKCmV4dGVybiBjaGFyICpTbXNDbGllbnRJRCAoCgogICAgU21z
Q29ubgoKKTsKCmV4dGVybiBJY2VDb25uIFNtc0dldEljZUNvbm5lY3Rpb24gKAoKICAgIFNtc0Nv
bm4KCik7CgpleHRlcm4gU21jRXJyb3JIYW5kbGVyIFNtY1NldEVycm9ySGFuZGxlciAoCgogICAg
U21jRXJyb3JIYW5kbGVyCgopOwoKZXh0ZXJuIFNtc0Vycm9ySGFuZGxlciBTbXNTZXRFcnJvckhh
bmRsZXIgKAoKICAgIFNtc0Vycm9ySGFuZGxlcgoKKTsKCmV4dGVybiB2b2lkIFNtRnJlZVByb3Bl
cnR5ICgKCiAgICBTbVByb3AgKgoKKTsKCmV4dGVybiB2b2lkIFNtRnJlZVJlYXNvbnMgKAoKICAg
IGludCAsCiAgICBjaGFyICoqCgopOwoKCmV4dGVybiBjb25zdCBjaGFyIFh0U2hlbGxTdHJpbmdz
W107CnR5cGVkZWYgc3RydWN0IF9TaGVsbENsYXNzUmVjICpTaGVsbFdpZGdldENsYXNzOwp0eXBl
ZGVmIHN0cnVjdCBfT3ZlcnJpZGVTaGVsbENsYXNzUmVjICpPdmVycmlkZVNoZWxsV2lkZ2V0Q2xh
c3M7CnR5cGVkZWYgc3RydWN0IF9XTVNoZWxsQ2xhc3NSZWMgKldNU2hlbGxXaWRnZXRDbGFzczsK
dHlwZWRlZiBzdHJ1Y3QgX1RyYW5zaWVudFNoZWxsQ2xhc3NSZWMgKlRyYW5zaWVudFNoZWxsV2lk
Z2V0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9Ub3BMZXZlbFNoZWxsQ2xhc3NSZWMgKlRvcExldmVs
U2hlbGxXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX0FwcGxpY2F0aW9uU2hlbGxDbGFzc1Jl
YyAqQXBwbGljYXRpb25TaGVsbFdpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfU2Vzc2lvblNo
ZWxsQ2xhc3NSZWMgKlNlc3Npb25TaGVsbFdpZGdldENsYXNzOwoKCmV4dGVybiBXaWRnZXRDbGFz
cyBzaGVsbFdpZGdldENsYXNzOwpleHRlcm4gV2lkZ2V0Q2xhc3Mgb3ZlcnJpZGVTaGVsbFdpZGdl
dENsYXNzOwpleHRlcm4gV2lkZ2V0Q2xhc3Mgd21TaGVsbFdpZGdldENsYXNzOwpleHRlcm4gV2lk
Z2V0Q2xhc3MgdHJhbnNpZW50U2hlbGxXaWRnZXRDbGFzczsKZXh0ZXJuIFdpZGdldENsYXNzIHRv
cExldmVsU2hlbGxXaWRnZXRDbGFzczsKZXh0ZXJuIFdpZGdldENsYXNzIGFwcGxpY2F0aW9uU2hl
bGxXaWRnZXRDbGFzczsKZXh0ZXJuIFdpZGdldENsYXNzIHNlc3Npb25TaGVsbFdpZGdldENsYXNz
OwpleHRlcm4gY29uc3QgY2hhciBYdFN0cmluZ3NbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htU3Ry
aW5nc1tdOwpleHRlcm4gV2lkZ2V0Q2xhc3MgdmVuZG9yU2hlbGxXaWRnZXRDbGFzczsKCnR5cGVk
ZWYgc3RydWN0IF9YbVZlbmRvclNoZWxsUmVjICogWG1WZW5kb3JTaGVsbFdpZGdldDsKdHlwZWRl
ZiBzdHJ1Y3QgX1htVmVuZG9yU2hlbGxDbGFzc1JlYyAqIFhtVmVuZG9yU2hlbGxXaWRnZXRDbGFz
czsKCgoKCgoKCkJvb2xlYW4gWG1Jc01vdGlmV01SdW5uaW5nKFdpZGdldCBzaGVsbCk7CmV4dGVy
biB2b2lkIFhtVHJhbnNsYXRlS2V5KERpc3BsYXkgKkRzcCwgS2V5Q29kZSBLZXljb2RlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBNb2RpZmllcnMgbW9kaWZpZXJzLCBNb2RpZmllcnMgKm1v
ZGlmaWVyc19yZXR1cm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleVN5bSAqS2V5c3lt
X3JldHVybik7CmV4dGVybiBpbnQgeG1Vc2VWZXJzaW9uOwpleHRlcm4gY2hhciBfWG1TREVGQVVM
VF9GT05UW107CmV4dGVybiBjaGFyIF9YbVNERUZBVUxUX0JBQ0tHUk9VTkRbXTsKCgoKCgp0eXBl
ZGVmIGVudW0gewogICAgWG1GT05UX0lTX0ZPTlQsCiAgICBYbUZPTlRfSVNfRk9OVFNFVCwKICAg
IFhtRk9OVF9JU19YT0MsCiAgICBYbUZPTlRfSVNfWEZUCn0gWG1Gb250VHlwZTsKCmVudW0gewog
ICAgWG1TVFJJTkdfRElSRUNUSU9OX0xfVE9fUiwKICAgIFhtU1RSSU5HX0RJUkVDVElPTl9SX1RP
X0wsCiAgICBYbVNUUklOR19ESVJFQ1RJT05fREVGQVVMVCA9IDI1NQp9OwoKZW51bSB7CiAgICBY
bVNUUklOR19DT01QT05FTlRfVU5LTk9XTiwKICAgIFhtU1RSSU5HX0NPTVBPTkVOVF9DSEFSU0VU
LAogICAgWG1TVFJJTkdfQ09NUE9ORU5UX1RFWFQsCiAgICBYbVNUUklOR19DT01QT05FTlRfRElS
RUNUSU9OLAogICAgWG1TVFJJTkdfQ09NUE9ORU5UX1NFUEFSQVRPUiwKICAgIFhtU1RSSU5HX0NP
TVBPTkVOVF9MT0NBTEVfVEVYVAoKfTsKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBYbVN0
cmluZ0RpcmVjdGlvbjsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyICpYbVN0cmluZzsKdHlwZWRlZiBY
bVN0cmluZyAqWG1TdHJpbmdUYWJsZTsKdHlwZWRlZiBjaGFyICpYbVN0cmluZ0NoYXJTZXQ7CnR5
cGVkZWYgdW5zaWduZWQgY2hhciBYbVN0cmluZ0NvbXBvbmVudFR5cGU7Cgp0eXBlZGVmIHN0cnVj
dCBfX1htU3RyaW5nQ29udGV4dFJlYyAqX1htU3RyaW5nQ29udGV4dDsKdHlwZWRlZiBzdHJ1Y3Qg
X19YbVN0cmluZ1JlYyAqX1htU3RyaW5nOwp0eXBlZGVmIHN0cnVjdCBfWG10U3RyaW5nQ29udGV4
dFJlYyAqWG1TdHJpbmdDb250ZXh0Owp0eXBlZGVmIHN0cnVjdCBfWG1Gb250TGlzdENvbnRleHRS
ZWMgKlhtRm9udENvbnRleHQ7CnR5cGVkZWYgc3RydWN0IF9fWG1SZW5kaXRpb25SZWMgKlhtRm9u
dExpc3RFbnRyeTsKdHlwZWRlZiBzdHJ1Y3QgX19YbVJlbmRlclRhYmxlUmVjICpYbUZvbnRMaXN0
OwoKCgoKCmV4dGVybiBXaWRnZXRDbGFzcyB4bVByaW1pdGl2ZVdpZGdldENsYXNzOwoKdHlwZWRl
ZiBzdHJ1Y3QgX1htUHJpbWl0aXZlQ2xhc3NSZWMgKlhtUHJpbWl0aXZlV2lkZ2V0Q2xhc3M7CnR5
cGVkZWYgc3RydWN0IF9YbVByaW1pdGl2ZVJlYyAqWG1QcmltaXRpdmVXaWRnZXQ7CgpleHRlcm4g
V2lkZ2V0Q2xhc3MgeG1HYWRnZXRDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbUdhZGdldENsYXNz
UmVjICpYbUdhZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfWG1HYWRnZXRSZWMgKlhtR2FkZ2V0
OwoKZXh0ZXJuIFdpZGdldENsYXNzIHhtTWFuYWdlcldpZGdldENsYXNzOwoKdHlwZWRlZiBzdHJ1
Y3QgX1htTWFuYWdlckNsYXNzUmVjICpYbU1hbmFnZXJXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1
Y3QgX1htTWFuYWdlclJlYyAqWG1NYW5hZ2VyV2lkZ2V0OwplbnVtIHsKICAgIFhtUElYRUxTLAog
ICAgWG0xMDBUSF9NSUxMSU1FVEVSUywKICAgIFhtMTAwMFRIX0lOQ0hFUywKICAgIFhtMTAwVEhf
UE9JTlRTLAogICAgWG0xMDBUSF9GT05UX1VOSVRTCn07CgoKCmVudW0gewogICAgWG1ERVNUUk9Z
LAogICAgWG1VTk1BUCwKICAgIFhtRE9fTk9USElORwp9OwoKCgplbnVtIHsKICAgIFhtRVhQTElD
SVQsCiAgICBYbVBPSU5URVIKfTsKCgoKZW51bSB7CiAgICBYbU5PTkUsCiAgICBYbVRBQl9HUk9V
UCwKICAgIFhtU1RJQ0tZX1RBQl9HUk9VUCwKICAgIFhtRVhDTFVTSVZFX1RBQl9HUk9VUAp9OwoK
CgplbnVtIHsKCgoKICAgIFhtQkVMTCA9IDEKfTsKCgoKZW51bSB7CiAgICBYbU5PX09SSUVOVEFU
SU9OLAogICAgWG1WRVJUSUNBTCwKICAgIFhtSE9SSVpPTlRBTAp9OwoKCgplbnVtIHsKICAgIFht
V09SS19BUkVBLAogICAgWG1NRU5VX0JBUiwKICAgIFhtTUVOVV9QVUxMRE9XTiwKICAgIFhtTUVO
VV9QT1BVUCwKICAgIFhtTUVOVV9PUFRJT04KfTsKCgoKZW51bSB7CiAgICBYbU5PX1BBQ0tJTkcs
CiAgICBYbVBBQ0tfVElHSFQsCiAgICBYbVBBQ0tfQ09MVU1OLAogICAgWG1QQUNLX05PTkUKfTsK
CmVudW0gewoKCgoKCiAgICBYbUFMSUdOTUVOVF9DT05URU5UU19UT1AgPSAzLAogICAgWG1BTElH
Tk1FTlRfQ09OVEVOVFNfQk9UVE9NCn07CgplbnVtIHsKICAgIFhtVEVBUl9PRkZfRU5BQkxFRCwK
ICAgIFhtVEVBUl9PRkZfRElTQUJMRUQKfTsKCmVudW0gewogICAgWG1VTlBPU1QsCiAgICBYbVVO
UE9TVF9BTkRfUkVQTEFZCn07CgoKZW51bSB7CiAgICAgICAgWG1MQVNUX1BPU0lUSU9OID0gLTEs
CiAgICAgICAgWG1GSVJTVF9QT1NJVElPTgp9OwoKCgplbnVtIHsKICAgIFhtQUxJR05NRU5UX0JF
R0lOTklORywKICAgIFhtQUxJR05NRU5UX0NFTlRFUiwKICAgIFhtQUxJR05NRU5UX0VORAp9OwoK
ZW51bSB7CiAgICBYbUFMSUdOTUVOVF9CQVNFTElORV9UT1AsCgoKCiAgICBYbUFMSUdOTUVOVF9C
QVNFTElORV9CT1RUT00gPSAyLAogICAgWG1BTElHTk1FTlRfV0lER0VUX1RPUCwKICAgIFhtQUxJ
R05NRU5UX1dJREdFVF9CT1RUT00KfTsKCgoKZW51bSB7CiAgICBYbUZSQU1FX0dFTkVSSUNfQ0hJ
TEQsCiAgICBYbUZSQU1FX1dPUktBUkVBX0NISUxELAogICAgWG1GUkFNRV9USVRMRV9DSElMRAp9
OwoKCmVudW0gewogICAgWG1OX09GX01BTlkgPSAxLAogICAgWG1PTkVfT0ZfTUFOWQp9OwoKCgpl
bnVtIHsKICAgIFhtQVRUQUNIX05PTkUsCiAgICBYbUFUVEFDSF9GT1JNLAogICAgWG1BVFRBQ0hf
T1BQT1NJVEVfRk9STSwKICAgIFhtQVRUQUNIX1dJREdFVCwKICAgIFhtQVRUQUNIX09QUE9TSVRF
X1dJREdFVCwKICAgIFhtQVRUQUNIX1BPU0lUSU9OLAogICAgWG1BVFRBQ0hfU0VMRgp9OwoKCgpl
bnVtIHsKICAgIFhtUkVTSVpFX05PTkUsCiAgICBYbVJFU0laRV9HUk9XLAogICAgWG1SRVNJWkVf
QU5ZCn07CgoKCmVudW0gewogICAgWG1DUl9OT05FLAogICAgWG1DUl9IRUxQLAogICAgWG1DUl9W
QUxVRV9DSEFOR0VELAogICAgWG1DUl9JTkNSRU1FTlQsCiAgICBYbUNSX0RFQ1JFTUVOVCwKICAg
IFhtQ1JfUEFHRV9JTkNSRU1FTlQsCiAgICBYbUNSX1BBR0VfREVDUkVNRU5ULAogICAgWG1DUl9U
T19UT1AsCiAgICBYbUNSX1RPX0JPVFRPTSwKICAgIFhtQ1JfRFJBRywKICAgIFhtQ1JfQUNUSVZB
VEUsCiAgICBYbUNSX0FSTSwKICAgIFhtQ1JfRElTQVJNLAogICAgWG1DUl9EVU1NWTEzLAogICAg
WG1DUl9EVU1NWTE0LAogICAgWG1DUl9EVU1NWTE1LAogICAgWG1DUl9NQVAsCiAgICBYbUNSX1VO
TUFQLAogICAgWG1DUl9GT0NVUywKICAgIFhtQ1JfTE9TSU5HX0ZPQ1VTLAogICAgWG1DUl9NT0RJ
RllJTkdfVEVYVF9WQUxVRSwKICAgIFhtQ1JfTU9WSU5HX0lOU0VSVF9DVVJTT1IsCiAgICBYbUNS
X0VYRUNVVEUsCiAgICBYbUNSX1NJTkdMRV9TRUxFQ1QsCiAgICBYbUNSX01VTFRJUExFX1NFTEVD
VCwKICAgIFhtQ1JfRVhURU5ERURfU0VMRUNULAogICAgWG1DUl9CUk9XU0VfU0VMRUNULAogICAg
WG1DUl9ERUZBVUxUX0FDVElPTiwKICAgIFhtQ1JfQ0xJUEJPQVJEX0RBVEFfUkVRVUVTVCwKICAg
IFhtQ1JfQ0xJUEJPQVJEX0RBVEFfREVMRVRFLAogICAgWG1DUl9DQVNDQURJTkcsCiAgICBYbUNS
X09LLAogICAgWG1DUl9DQU5DRUwsCiAgICBYbUNSX0RVTU1ZMzMsCiAgICBYbUNSX0FQUExZLAog
ICAgWG1DUl9OT19NQVRDSCwKICAgIFhtQ1JfQ09NTUFORF9FTlRFUkVELAogICAgWG1DUl9DT01N
QU5EX0NIQU5HRUQsCiAgICBYbUNSX0VYUE9TRSwKICAgIFhtQ1JfUkVTSVpFLAogICAgWG1DUl9J
TlBVVCwKICAgIFhtQ1JfR0FJTl9QUklNQVJZLAogICAgWG1DUl9MT1NFX1BSSU1BUlksCiAgICBY
bUNSX0NSRUFURSwKICAgIFhtQ1JfVEVBUl9PRkZfQUNUSVZBVEUsCiAgICBYbUNSX1RFQVJfT0ZG
X0RFQUNUSVZBVEUsCiAgICBYbUNSX09CU0NVUkVEX1RSQVZFUlNBTCwKICAgIFhtQ1JfUFJPVE9D
T0xTCn07CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVudCAq
ZXZlbnQ7Cn0gWG1BbnlDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCBy
ZWFzb247CiAgICBYRXZlbnQgKmV2ZW50OwogICAgaW50IGNsaWNrX2NvdW50Owp9IFhtQXJyb3dC
dXR0b25DYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCByZWFzb247CiAg
ICBYRXZlbnQgKmV2ZW50OwogICAgWG1TdHJpbmcgdmFsdWU7CiAgICBpbnQgbGVuZ3RoOwp9IFht
Q29tbWFuZENhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IHJlYXNvbjsK
ICAgIFhFdmVudCAqZXZlbnQ7CiAgICBXaW5kb3cgd2luZG93Owp9IFhtRHJhd2luZ0FyZWFDYWxs
YmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0CnsKICAgIGludCByZWFzb247CiAgICBYRXZlbnQg
KmV2ZW50OwogICAgV2luZG93IHdpbmRvdzsKICAgIGludCBjbGlja19jb3VudDsKfSBYbURyYXdu
QnV0dG9uQ2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgcmVhc29uOwog
ICAgWEV2ZW50ICpldmVudDsKICAgIFhtU3RyaW5nIHZhbHVlOwogICAgaW50IGxlbmd0aDsKICAg
IFhtU3RyaW5nIG1hc2s7CiAgICBpbnQgbWFza19sZW5ndGg7CiAgICBYbVN0cmluZyBkaXI7CiAg
ICBpbnQgZGlyX2xlbmd0aDsKICAgIFhtU3RyaW5nIHBhdHRlcm47CiAgICBpbnQgcGF0dGVybl9s
ZW5ndGg7Cn0gWG1GaWxlU2VsZWN0aW9uQm94Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVj
dCB7CiAgICBpbnQgcmVhc29uOwogICAgWEV2ZW50ICpldmVudDsKICAgIFhtU3RyaW5nIGl0ZW07
CiAgICBpbnQgaXRlbV9sZW5ndGg7CiAgICBpbnQgaXRlbV9wb3NpdGlvbjsKICAgIFhtU3RyaW5n
ICpzZWxlY3RlZF9pdGVtczsKICAgIGludCBzZWxlY3RlZF9pdGVtX2NvdW50OwogICAgaW50ICpz
ZWxlY3RlZF9pdGVtX3Bvc2l0aW9uczsKICAgIGludCBzZWxlY3Rpb25fdHlwZTsKfSBYbUxpc3RD
YWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCByZWFzb247CiAgICBYRXZl
bnQgKmV2ZW50OwogICAgaW50IGNsaWNrX2NvdW50Owp9IFhtUHVzaEJ1dHRvbkNhbGxiYWNrU3Ry
dWN0OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVudCAqZXZlbnQ7
CiAgICBXaWRnZXQgd2lkZ2V0OwogICAgY2hhciAqZGF0YTsKICAgIGNoYXIgKmNhbGxiYWNrc3Ry
dWN0Owp9IFhtUm93Q29sdW1uQ2FsbGJhY2tTdHJ1Y3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogICAg
aW50IHJlYXNvbjsKICAgIFhFdmVudCAqZXZlbnQ7CiAgICBpbnQgdmFsdWU7Cn0gWG1TY2FsZUNh
bGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVu
dCAqZXZlbnQ7CiAgICBpbnQgdmFsdWU7CiAgICBpbnQgcGl4ZWw7Cn0gWG1TY3JvbGxCYXJDYWxs
YmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCByZWFzb247CiAgICBYRXZlbnQg
KmV2ZW50OwogICAgWG1TdHJpbmcgdmFsdWU7CiAgICBpbnQgbGVuZ3RoOwp9IFhtU2VsZWN0aW9u
Qm94Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgcmVhc29uOwogICAg
WEV2ZW50ICpldmVudDsKICAgIGludCBzZXQ7Cn0gWG1Ub2dnbGVCdXR0b25DYWxsYmFja1N0cnVj
dDsKCgoKZW51bSB7CiAgICBYbU1VTFRJQ0xJQ0tfRElTQ0FSRCwKICAgIFhtTVVMVElDTElDS19L
RUVQCn07CgoKZW51bSB7CiAgICBYbVNIQURPV19JTiA9IDcsCiAgICBYbVNIQURPV19PVVQKfTsK
CgplbnVtIHsKICAgIFhtQVJST1dfVVAsCiAgICBYbUFSUk9XX0RPV04sCiAgICBYbUFSUk9XX0xF
RlQsCiAgICBYbUFSUk9XX1JJR0hUCn07CgoKCmVudW0gewogICAgWG1OT19MSU5FLAogICAgWG1T
SU5HTEVfTElORSwKICAgIFhtRE9VQkxFX0xJTkUsCiAgICBYbVNJTkdMRV9EQVNIRURfTElORSwK
ICAgIFhtRE9VQkxFX0RBU0hFRF9MSU5FLAogICAgWG1TSEFET1dfRVRDSEVEX0lOLAogICAgWG1T
SEFET1dfRVRDSEVEX09VVCwKICAgIFhtU0hBRE9XX0VUQ0hFRF9JTl9EQVNILAogICAgWG1TSEFE
T1dfRVRDSEVEX09VVF9EQVNILAogICAgWG1JTlZBTElEX1NFUEFSQVRPUl9UWVBFCn07CgoKCmVu
dW0gewogICAgWG1QSVhNQVAgPSAxLAogICAgWG1TVFJJTkcKfTsKCgplbnVtIHsKICAgIFhtV0lO
RE9XLAoKCgogICAgWG1DVVJTT1IgPSAyCn07CgoKCmVudW0gewogICAgWG1NQVhfT05fVE9QLAog
ICAgWG1NQVhfT05fQk9UVE9NLAogICAgWG1NQVhfT05fTEVGVCwKICAgIFhtTUFYX09OX1JJR0hU
Cn07CgoKCmVudW0gewogICAgWG1TSU5HTEVfU0VMRUNULAogICAgWG1NVUxUSVBMRV9TRUxFQ1Qs
CiAgICBYbUVYVEVOREVEX1NFTEVDVCwKICAgIFhtQlJPV1NFX1NFTEVDVAp9OwoKZW51bSB7CiAg
ICBYbVNUQVRJQywKICAgIFhtRFlOQU1JQwp9OwoKCgplbnVtIHsKICAgIFhtVkFSSUFCTEUsCiAg
ICBYbUNPTlNUQU5ULAogICAgWG1SRVNJWkVfSUZfUE9TU0lCTEUKfTsKCmVudW0gewogICAgWG1B
VVRPTUFUSUMsCiAgICBYbUFQUExJQ0FUSU9OX0RFRklORUQKfTsKCmVudW0gewoKCgogICAgWG1B
U19ORUVERUQgPSAxCn07CgplbnVtIHsKICAgIFhtQk9UVE9NX1JJR0hULAogICAgWG1UT1BfUklH
SFQsCiAgICBYbUJPVFRPTV9MRUZULAogICAgWG1UT1BfTEVGVAp9OwoKCgplbnVtIHsKICAgIFht
Q09NTUFORF9BQk9WRV9XT1JLU1BBQ0UsCiAgICBYbUNPTU1BTkRfQkVMT1dfV09SS1NQQUNFCn07
CgoKCmVudW0gewogICAgWG1NVUxUSV9MSU5FX0VESVQsCiAgICBYbVNJTkdMRV9MSU5FX0VESVQK
fTsKCgoKdHlwZWRlZiBlbnVtIHsKICAgIFhtVEVYVF9GT1JXQVJELAogICAgWG1URVhUX0JBQ0tX
QVJECn0gWG1UZXh0RGlyZWN0aW9uOwoKdHlwZWRlZiBsb25nIFhtVGV4dFBvc2l0aW9uOwp0eXBl
ZGVmIEF0b20gWG1UZXh0Rm9ybWF0Owp0eXBlZGVmIGVudW0gewogICAgWG1TRUxFQ1RfUE9TSVRJ
T04sCiAgICBYbVNFTEVDVF9XSElURVNQQUNFLAogICAgWG1TRUxFQ1RfV09SRCwKICAgIFhtU0VM
RUNUX0xJTkUsCiAgICBYbVNFTEVDVF9BTEwsCiAgICBYbVNFTEVDVF9QQVJBR1JBUEgKfSBYbVRl
eHRTY2FuVHlwZTsKCgoKdHlwZWRlZiBlbnVtIHsKICAgIFhtSElHSExJR0hUX05PUk1BTCwKICAg
IFhtSElHSExJR0hUX1NFTEVDVEVELAogICAgWG1ISUdITElHSFRfU0VDT05EQVJZX1NFTEVDVEVE
Cn0gWG1IaWdobGlnaHRNb2RlOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciAqcHRyOwogICAg
aW50IGxlbmd0aDsKICAgIFhtVGV4dEZvcm1hdCBmb3JtYXQ7Cn0gWG1UZXh0QmxvY2tSZWMsICpY
bVRleHRCbG9jazsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgcmVhc29uOwogICAgWEV2ZW50
ICpldmVudDsKICAgIEJvb2xlYW4gZG9pdDsKICAgIFhtVGV4dFBvc2l0aW9uIGN1cnJJbnNlcnQs
IG5ld0luc2VydDsKICAgIFhtVGV4dFBvc2l0aW9uIHN0YXJ0UG9zLCBlbmRQb3M7CiAgICBYbVRl
eHRCbG9jayB0ZXh0Owp9IFhtVGV4dFZlcmlmeUNhbGxiYWNrU3RydWN0LCAqWG1UZXh0VmVyaWZ5
UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgd2NoYXJfdCAqd2NzcHRyOwogICAgaW50IGxlbmd0
aDsKfSBYbVRleHRCbG9ja1JlY1djcywgKlhtVGV4dEJsb2NrV2NzOwoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVudCAqZXZlbnQ7CiAgICBCb29sZWFuIGRvaXQ7CiAg
ICBYbVRleHRQb3NpdGlvbiBjdXJySW5zZXJ0LCBuZXdJbnNlcnQ7CiAgICBYbVRleHRQb3NpdGlv
biBzdGFydFBvcywgZW5kUG9zOwogICAgWG1UZXh0QmxvY2tXY3MgdGV4dDsKfSBYbVRleHRWZXJp
ZnlDYWxsYmFja1N0cnVjdFdjcywgKlhtVGV4dFZlcmlmeVB0cldjczsKCgoKCgoKCmVudW0gewog
ICAgWG1ESUFMT0dfTk9ORSwKICAgIFhtRElBTE9HX0FQUExZX0JVVFRPTiwKICAgIFhtRElBTE9H
X0NBTkNFTF9CVVRUT04sCiAgICBYbURJQUxPR19ERUZBVUxUX0JVVFRPTiwKICAgIFhtRElBTE9H
X09LX0JVVFRPTiwKICAgIFhtRElBTE9HX0ZJTFRFUl9MQUJFTCwKICAgIFhtRElBTE9HX0ZJTFRF
Ul9URVhULAogICAgWG1ESUFMT0dfSEVMUF9CVVRUT04sCiAgICBYbURJQUxPR19MSVNULAogICAg
WG1ESUFMT0dfTElTVF9MQUJFTCwKICAgIFhtRElBTE9HX01FU1NBR0VfTEFCRUwsCiAgICBYbURJ
QUxPR19TRUxFQ1RJT05fTEFCRUwsCiAgICBYbURJQUxPR19TWU1CT0xfTEFCRUwsCiAgICBYbURJ
QUxPR19URVhULAogICAgWG1ESUFMT0dfU0VQQVJBVE9SLAogICAgWG1ESUFMT0dfRElSX0xJU1Qs
CiAgICBYbURJQUxPR19ESVJfTElTVF9MQUJFTAp9OwplbnVtIHsKICAgIFhtRElBTE9HX01PREVM
RVNTLAogICAgWG1ESUFMT0dfUFJJTUFSWV9BUFBMSUNBVElPTl9NT0RBTCwKICAgIFhtRElBTE9H
X0ZVTExfQVBQTElDQVRJT05fTU9EQUwsCiAgICBYbURJQUxPR19TWVNURU1fTU9EQUwKfTsKCgoK
CgoKZW51bSB7CiAgICBYbVBMQUNFX1RPUCwKICAgIFhtUExBQ0VfQUJPVkVfU0VMRUNUSU9OLAog
ICAgWG1QTEFDRV9CRUxPV19TRUxFQ1RJT04KfTsKZW51bSB7CiAgICBYbURJQUxPR19XT1JLX0FS
RUEsCiAgICBYbURJQUxPR19QUk9NUFQsCiAgICBYbURJQUxPR19TRUxFQ1RJT04sCiAgICBYbURJ
QUxPR19DT01NQU5ELAogICAgWG1ESUFMT0dfRklMRV9TRUxFQ1RJT04KfTsKCgplbnVtIHsKICAg
IFhtRElBTE9HX1RFTVBMQVRFLAogICAgWG1ESUFMT0dfRVJST1IsCiAgICBYbURJQUxPR19JTkZP
Uk1BVElPTiwKICAgIFhtRElBTE9HX01FU1NBR0UsCiAgICBYbURJQUxPR19RVUVTVElPTiwKICAg
IFhtRElBTE9HX1dBUk5JTkcsCiAgICBYbURJQUxPR19XT1JLSU5HCn07CgoKCnR5cGVkZWYgZW51
bSB7CiAgICBYbVZJU0lCSUxJVFlfVU5PQlNDVVJFRCwKICAgIFhtVklTSUJJTElUWV9QQVJUSUFM
TFlfT0JTQ1VSRUQsCiAgICBYbVZJU0lCSUxJVFlfRlVMTFlfT0JTQ1VSRUQKfSBYbVZpc2liaWxp
dHk7Cgp0eXBlZGVmIGVudW0gewogICAgWG1UUkFWRVJTRV9DVVJSRU5ULAogICAgWG1UUkFWRVJT
RV9ORVhULAogICAgWG1UUkFWRVJTRV9QUkVWLAogICAgWG1UUkFWRVJTRV9IT01FLAogICAgWG1U
UkFWRVJTRV9ORVhUX1RBQl9HUk9VUCwKICAgIFhtVFJBVkVSU0VfUFJFVl9UQUJfR1JPVVAsCiAg
ICBYbVRSQVZFUlNFX1VQLAogICAgWG1UUkFWRVJTRV9ET1dOLAogICAgWG1UUkFWRVJTRV9MRUZU
LAogICAgWG1UUkFWRVJTRV9SSUdIVAp9IFhtVHJhdmVyc2FsRGlyZWN0aW9uOwoKdHlwZWRlZiBz
dHJ1Y3QgewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVudCAqZXZlbnQ7CiAgICBXaWRnZXQgdHJh
dmVyc2FsX2Rlc3RpbmF0aW9uOwogICAgWG1UcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uOwp9
IFhtVHJhdmVyc2VPYnNjdXJlZENhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiB1bnNpZ25lZCBjaGFy
IFhtTmF2aWdhdGlvblR5cGU7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBYbUJ1dHRvblR5cGU7
CnR5cGVkZWYgWG1CdXR0b25UeXBlICogWG1CdXR0b25UeXBlVGFibGU7CnR5cGVkZWYgS2V5U3lt
ICogWG1LZXlTeW1UYWJsZTsKdHlwZWRlZiBYbVN0cmluZ0NoYXJTZXQgKiBYbVN0cmluZ0NoYXJT
ZXRUYWJsZTsKCmVudW0gewogICAgWG1QVVNIQlVUVE9OID0gMSwKICAgIFhtVE9HR0xFQlVUVE9O
LAogICAgWG1SQURJT0JVVFRPTiwKICAgIFhtQ0FTQ0FERUJVVFRPTiwKICAgIFhtU0VQQVJBVE9S
LAogICAgWG1ET1VCTEVfU0VQQVJBVE9SLAogICAgWG1USVRMRQp9OwoKCgoKCnR5cGVkZWYgWHRQ
b2ludGVyICgqWG1SZXNvdXJjZUJhc2VQcm9jKShXaWRnZXQgdywgWHRQb2ludGVyKTsKCnR5cGVk
ZWYgc3RydWN0IF9YbVNlY29uZGFyeVJlc291cmNlRGF0YVJlYyB7CiAgICBYbVJlc291cmNlQmFz
ZVByb2MgYmFzZV9wcm9jOwogICAgWHRQb2ludGVyIGNsaWVudF9kYXRhOwogICAgU3RyaW5nIG5h
bWU7CiAgICBTdHJpbmcgcmVzX2NsYXNzOwogICAgWHRSZXNvdXJjZUxpc3QgcmVzb3VyY2VzOwog
ICAgQ2FyZGluYWwgbnVtX3Jlc291cmNlczsKfSBYbVNlY29uZGFyeVJlc291cmNlRGF0YVJlYywg
KlhtU2Vjb25kYXJ5UmVzb3VyY2VEYXRhOwoKQ2FyZGluYWwgWG1HZXRTZWNvbmRhcnlSZXNvdXJj
ZURhdGEoV2lkZ2V0Q2xhc3Mgd2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFhtU2Vjb25kYXJ5UmVzb3VyY2VEYXRhICoqcmVzRGF0YSk7CgoKUGl4bWFwIFhtR2V0UGl4bWFw
KFNjcmVlbiAqc2NyZWVuLCBjaGFyICppbWFnZV9uYW1lLCBQaXhlbCBmb3JlZ3JvdW5kLCBQaXhl
bCBiYWNrZ3JvdW5kKTsKUGl4bWFwIFhtR2V0UGl4bWFwQnlEZXB0aChTY3JlZW4gKnNjcmVlbiwg
Y2hhciAqaW1hZ2VfbmFtZSwgUGl4ZWwgZm9yZWdyb3VuZCwgUGl4ZWwgYmFja2dyb3VuZCwgaW50
IGRlcHRoKTsKQm9vbGVhbiBYbURlc3Ryb3lQaXhtYXAoU2NyZWVuICpzY3JlZW4sIFBpeG1hcCBw
aXhtYXApOwpCb29sZWFuIFhtSW5zdGFsbEltYWdlKFhJbWFnZSAqaW1hZ2UsIGNoYXIgKmltYWdl
X25hbWUpOwpCb29sZWFuIFhtVW5pbnN0YWxsSW1hZ2UoWEltYWdlICppbWFnZSk7CgoKCnZvaWQg
WG1VcGRhdGVEaXNwbGF5KFdpZGdldCB3KTsKCgoKdHlwZWRlZiBsb25nIFhtT2Zmc2V0Owp0eXBl
ZGVmIFhtT2Zmc2V0ICpYbU9mZnNldFB0cjsKCnZvaWQgWG1SZXNvbHZlUGFydE9mZnNldHMoV2lk
Z2V0Q2xhc3Mgd19jbGFzcywgWG1PZmZzZXRQdHIgKm9mZnNldCk7CnZvaWQgWG1SZXNvbHZlQWxs
UGFydE9mZnNldHMoV2lkZ2V0Q2xhc3Mgd19jbGFzcywgWG1PZmZzZXRQdHIgKm9mZnNldCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYbU9mZnNldFB0ciAqY29uc3RyYWludF9vZmZzZXQp
OwpCb29sZWFuIFhtV2lkZ2V0R2V0QmFzZWxpbmVzKFdpZGdldCB3aWQsIERpbWVuc2lvbiAqKmJh
c2VsaW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmxpbmVfY291bnQpOwpC
b29sZWFuIFhtV2lkZ2V0R2V0RGlzcGxheVJlY3QoV2lkZ2V0IHdpZCwgWFJlY3RhbmdsZSAqZGlz
cGxheXJlY3QpOwoKCgp2b2lkIFhtUmVnaXN0ZXJDb252ZXJ0ZXJzKHZvaWQpOwp2b2lkIFhtQ3Z0
U3RyaW5nVG9Vbml0VHlwZShYcm1WYWx1ZVB0ciBhcmdzLCBDYXJkaW5hbCAqbnVtX2FyZ3MsIFhy
bVZhbHVlICpmcm9tX3ZhbCwgWHJtVmFsdWUgKnRvX3ZhbCk7CmNoYXIgKlhtUmVnaXN0ZXJTZWdt
ZW50RW5jb2RpbmcoY2hhciAqZm9udGxpc3RfdGFnLCBjaGFyICpjdF9lbmNvZGluZyk7CmNoYXIg
KlhtTWFwU2VnbWVudEVuY29kaW5nKGNoYXIgKmZvbnRsaXN0X3RhZyk7ClhtU3RyaW5nIFhtQ3Z0
Q1RUb1htU3RyaW5nKGNoYXIgKnRleHQpOwpCb29sZWFuIFhtQ3Z0VGV4dFRvWG1TdHJpbmcoRGlz
cGxheSAqZGlzcGxheSwgWHJtVmFsdWVQdHIgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENhcmRpbmFsICpudW1fYXJncywgWHJtVmFsdWUgKmZyb21fdmFsLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWHJtVmFsdWUgKnRvX3ZhbCwgWHRQb2ludGVyICpjb252ZXJ0ZXJfZGF0
YSk7CmNoYXIgKlhtQ3Z0WG1TdHJpbmdUb0NUKFhtU3RyaW5nIHN0cmluZyk7CkJvb2xlYW4gWG1D
dnRYbVN0cmluZ1RvVGV4dChEaXNwbGF5ICpkaXNwbGF5LCBYcm1WYWx1ZVB0ciBhcmdzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzLCBYcm1WYWx1ZSAqZnJv
bV92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBYcm1WYWx1ZSAqdG9fdmFsLCBYdFBv
aW50ZXIgKmNvbnZlcnRlcl9kYXRhKTsKCgoKaW50IFhtQ29udmVydFVuaXRzKFdpZGdldCB3aWRn
ZXQsIGludCBvcmllbnRhdGlvbiwKICAgICAgICAgICAgICAgICAgIGludCBmcm9tX3VuaXRfdHlw
ZSwgaW50IGZyb21fdmFsdWUsIGludCB0b191bml0X3R5cGUpOwppbnQgWG1DdnRUb0hvcml6b250
YWxQaXhlbHMoU2NyZWVuICpzY3JlZW4sIGludCBmcm9tX3ZhbCwgaW50IGZyb21fdHlwZSk7Cmlu
dCBYbUN2dFRvVmVydGljYWxQaXhlbHMoU2NyZWVuICpzY3JlZW4sIGludCBmcm9tX3ZhbCwgaW50
IGZyb21fdHlwZSk7CmludCBYbUN2dEZyb21Ib3Jpem9udGFsUGl4ZWxzKFNjcmVlbiAqc2NyZWVu
LCBpbnQgZnJvbV92YWwsIGludCB0b190eXBlKTsKaW50IFhtQ3Z0RnJvbVZlcnRpY2FsUGl4ZWxz
KFNjcmVlbiAqc2NyZWVuLCBpbnQgZnJvbV92YWwsIGludCB0b190eXBlKTsKdm9pZCBYbVNldEZv
bnRVbml0cyhEaXNwbGF5ICpkaXNwbGF5LCBpbnQgaF92YWx1ZSwgaW50IHZfdmFsdWUpOwp2b2lk
IFhtU2V0Rm9udFVuaXQoRGlzcGxheSAqZGlzcGxheSwgaW50IHZhbHVlKTsKCgoKdm9pZCBYbVNl
dE1lbnVDdXJzb3IoRGlzcGxheSAqZGlzcGxheSwgQ3Vyc29yIGN1cnNvcklkKTsKQ3Vyc29yIFht
R2V0TWVudUN1cnNvcihEaXNwbGF5ICpkaXNwbGF5KTsKCgoKV2lkZ2V0IFhtQ3JlYXRlU2ltcGxl
Q2hlY2tCb3goV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXJnICphcmdsaXN0LCBDYXJkaW5hbCBhcmdjb3VudCk7CldpZGdldCBYbUNyZWF0
ZVNpbXBsZU1lbnVCYXIoV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBcmcgKmFyZ2xpc3QsIENhcmRpbmFsIGFyZ2NvdW50KTsKV2lkZ2V0IFht
Q3JlYXRlU2ltcGxlT3B0aW9uTWVudShXaWRnZXQgcGFyZW50LCBjaGFyICpuYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZyAqYXJnbGlzdCwgQ2FyZGluYWwgYXJnY291bnQp
OwpXaWRnZXQgWG1DcmVhdGVTaW1wbGVQb3B1cE1lbnUoV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZyAqYXJnbGlzdCwgQ2FyZGluYWwg
YXJnY291bnQpOwpXaWRnZXQgWG1DcmVhdGVTaW1wbGVQdWxsZG93bk1lbnUoV2lkZ2V0IHBhcmVu
dCwgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZyAqYXJn
bGlzdCwgQ2FyZGluYWwgYXJnY291bnQpOwpXaWRnZXQgWG1DcmVhdGVTaW1wbGVSYWRpb0JveChX
aWRnZXQgcGFyZW50LCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
cmcgKmFyZ2xpc3QsIENhcmRpbmFsIGFyZ2NvdW50KTsKCgoKV2lkZ2V0IFhtVmFDcmVhdGVTaW1w
bGVDaGVja0JveChXaWRnZXQgcGFyZW50LCBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYdENhbGxiYWNrUHJvYyBjYWxsYmFjaywgLi4uKTsKV2lkZ2V0IFhtVmFD
cmVhdGVTaW1wbGVNZW51QmFyKFdpZGdldCBwYXJlbnQsIFN0cmluZyBuYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLi4uKTsKV2lkZ2V0IFhtVmFDcmVhdGVTaW1wbGVPcHRpb25N
ZW51KFdpZGdldCBwYXJlbnQsIFN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWG1TdHJpbmcgb3B0aW9uX2xhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgS2V5U3ltIG9wdGlvbl9tbmVtb25pYywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBidXR0b25fc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWHRDYWxsYmFja1Byb2MgY2FsbGJhY2ssIC4uLik7CldpZGdldCBYbVZhQ3JlYXRlU2ltcGxl
UG9wdXBNZW51KFdpZGdldCBwYXJlbnQsIFN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYdENhbGxiYWNrUHJvYyBjYWxsYmFjaywgLi4uKTsKV2lkZ2V0IFhtVmFD
cmVhdGVTaW1wbGVQdWxsZG93bk1lbnUoV2lkZ2V0IHBhcmVudCwgU3RyaW5nIG5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3N0X2Zyb21fYnV0dG9uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdENhbGxiYWNrUHJvYyBjYWxsYmFjaywg
Li4uKTsKV2lkZ2V0IFhtVmFDcmVhdGVTaW1wbGVSYWRpb0JveChXaWRnZXQgcGFyZW50LCBTdHJp
bmcgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnV0dG9uX3NldCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdENhbGxiYWNrUHJvYyBjYWxsYmFjaywg
Li4uKTsKCgoKV2lkZ2V0IFhtVHJhY2tpbmdFdmVudChXaWRnZXQgd2lkZ2V0LCBDdXJzb3IgY3Vy
c29yLCBCb29sZWFuIGNvbmZpbmVfdG8sCiAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpl
dmVudF9yZXR1cm4pOwpXaWRnZXQgWG1UcmFja2luZ0xvY2F0ZShXaWRnZXQgd2lkZ2V0LCBDdXJz
b3IgY3Vyc29yLCBCb29sZWFuIGNvbmZpbmVfdG8pOwoKCgp0eXBlZGVmIHZvaWQgKCpYbUNvbG9y
UHJvYykoWENvbG9yICpiZ19jb2xvciwgWENvbG9yICpmZ19jb2xvciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFhDb2xvciAqc2VsX2NvbG9yLCBYQ29sb3IgKnRzX2NvbG9yLCBYQ29sb3Ig
KmJzX2NvbG9yKTsKCgpleHRlcm4gWG1Db2xvclByb2MgWG1TZXRDb2xvckNhbGN1bGF0aW9uKFht
Q29sb3JQcm9jIHByb2MpOwpleHRlcm4gWG1Db2xvclByb2MgWG1HZXRDb2xvckNhbGN1bGF0aW9u
KHZvaWQpOwpleHRlcm4gdm9pZCBYbUdldENvbG9ycyhTY3JlZW4gKnNjcmVlbiwgQ29sb3JtYXAg
Y29sb3JfbWFwLAogICAgICAgICAgICAgICAgICAgICAgICBQaXhlbCBiYWNrZ3JvdW5kLCBQaXhl
bCAqZm9yZWdyb3VuZF9yZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsICp0b3Bfc2hh
ZG93X3JldCwgUGl4ZWwgKmJvdHRvbV9zaGFkb3dfcmV0LAogICAgICAgICAgICAgICAgICAgICAg
ICBQaXhlbCAqc2VsZWN0X3JldCk7CmV4dGVybiB2b2lkIFhtQ2hhbmdlQ29sb3IoV2lkZ2V0IHdp
ZGdldCwgUGl4ZWwgYmFja2dyb3VuZCk7CgoKCkRpbWVuc2lvbiBYbVN0cmluZ0Jhc2VsaW5lKFht
Rm9udExpc3QgZm9udGxpc3QsIFhtU3RyaW5nIHN0cmluZyk7CkJvb2xlYW4gWG1TdHJpbmdCeXRl
Q29tcGFyZShYbVN0cmluZyBzMSwgWG1TdHJpbmcgczIpOwpCb29sZWFuIFhtU3RyaW5nQ29tcGFy
ZShYbVN0cmluZyBzMSwgWG1TdHJpbmcgczIpOwpYbVN0cmluZyBYbVN0cmluZ0NvbmNhdChYbVN0
cmluZyBzMSwgWG1TdHJpbmcgczIpOwpYbVN0cmluZyBYbVN0cmluZ0NyZWF0ZShjaGFyICp0ZXh0
LCBjaGFyICp0YWcpOwpYbVN0cmluZyBYbVN0cmluZ0NyZWF0ZUx0b1IoY2hhciAqdGV4dCwgY2hh
ciAqdGFnKTsKWG1TdHJpbmcgWG1TdHJpbmdMdG9SQ3JlYXRlKGNoYXIgKnRleHQsIGNoYXIgKnRh
Zyk7ClhtU3RyaW5nIFhtU3RyaW5nQ3JlYXRlTG9jYWxpemVkKGNoYXIgKnRleHQpOwpYbVN0cmlu
ZyBYbVN0cmluZ0NyZWF0ZVNpbXBsZShjaGFyICp0ZXh0KTsKWG1TdHJpbmcgWG1TdHJpbmdEaXJl
Y3Rpb25DcmVhdGUoWG1TdHJpbmdEaXJlY3Rpb24gZGlyZWN0aW9uKTsKdm9pZCBYbVN0cmluZ0Ry
YXcoRGlzcGxheSAqZCwKICAgICAgICAgICAgICAgICAgV2luZG93IHcsCiAgICAgICAgICAgICAg
ICAgIFhtRm9udExpc3QgZm9udGxpc3QsCiAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmlu
ZywKICAgICAgICAgICAgICAgICAgR0MgZ2MsCiAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHgs
CiAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHksCiAgICAgICAgICAgICAgICAgIERpbWVuc2lv
biB3aWR0aCwKICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhbGlnbm1lbnQsCiAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGF5b3V0X2RpcmVjdGlvbiwKICAgICAgICAgICAg
ICAgICAgWFJlY3RhbmdsZSAqY2xpcCk7CnZvaWQgWG1TdHJpbmdEcmF3SW1hZ2UoRGlzcGxheSAq
ZCwgV2luZG93IHcsCiAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250TGlzdCBmb250bGlzdCwK
ICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcsCiAgICAgICAgICAgICAgICAg
ICAgICAgR0MgZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24geCwKICAgICAgICAg
ICAgICAgICAgICAgICBQb3NpdGlvbiB5LAogICAgICAgICAgICAgICAgICAgICAgIERpbWVuc2lv
biB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFsaWdubWVudCwK
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxheW91dF9kaXJlY3Rpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCk7CnZvaWQgWG1TdHJpbmdEcmF3
VW5kZXJsaW5lKERpc3BsYXkgKmQsIFdpbmRvdyB3LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBYbUZvbnRMaXN0IGZvbnRsaXN0LCBYbVN0cmluZyBzdHJpbmcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDIGdjLCBQb3NpdGlvbiB4LCBQb3NpdGlvbiB5LCBEaW1lbnNpb24gd2lkdGgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxpZ25tZW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGxheW91dF9kaXJlY3Rpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFhSZWN0YW5nbGUgKmNsaXAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFhtU3RyaW5nIHVuZGVybGluZSk7CkJvb2xlYW4gWG1TdHJpbmdFbXB0eShY
bVN0cmluZyBzMSk7CnZvaWQgWG1TdHJpbmdFeHRlbnQoWG1Gb250TGlzdCBmb250bGlzdCwKICAg
ICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgRGlt
ZW5zaW9uICp3aWR0aCwKICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gKmhlaWdodCk7CnZv
aWQgWG1TdHJpbmdGcmVlKFhtU3RyaW5nIHN0cmluZyk7CnZvaWQgWG1TdHJpbmdGcmVlQ29udGV4
dChYbVN0cmluZ0NvbnRleHQgY29udGV4dCk7CkJvb2xlYW4gWG1TdHJpbmdHZXRMdG9SKFhtU3Ry
aW5nIHN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDaGFyU2V0IHRhZywK
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnRleHQpOwpYbVN0cmluZ0NvbXBvbmVudFR5
cGUgWG1TdHJpbmdHZXROZXh0Q29tcG9uZW50KFhtU3RyaW5nQ29udGV4dCBjb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip0ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ2hh
clNldCAqdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFhtU3RyaW5nRGlyZWN0aW9uICpkaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDb21wb25lbnRUeXBlICp1bmtub3duX3RhZywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBz
aG9ydCAqdW5rbm93bl9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnVua25vd25fdmFsdWUpOwpCb29sZWFuIFhtU3Ry
aW5nR2V0TmV4dFNlZ21lbnQoWG1TdHJpbmdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFhtU3RyaW5nQ2hhclNldCAqdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WG1TdHJpbmdEaXJlY3Rpb24gKmRpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEJvb2xlYW4gKnNlcGFyYXRvcik7CkJvb2xlYW4gWG1TdHJpbmdIYXNTdWJzdHJpbmcoWG1T
dHJpbmcgc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN1YnN0
cmluZyk7CkRpbWVuc2lvbiBYbVN0cmluZ0hlaWdodChYbUZvbnRMaXN0IGZvbnRsaXN0LCBYbVN0
cmluZyBzdHJpbmcpOwpCb29sZWFuIFhtU3RyaW5nSW5pdENvbnRleHQoWG1TdHJpbmdDb250ZXh0
ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nKTsK
aW50IFhtU3RyaW5nTGVuZ3RoKFhtU3RyaW5nIHMxKTsKaW50IFhtU3RyaW5nTGluZUNvdW50KFht
U3RyaW5nIHN0cmluZyk7ClhtU3RyaW5nIFhtU3RyaW5nTkNvbmNhdChYbVN0cmluZyBzMSwgWG1T
dHJpbmcgczIsIGludCBudW1fYnl0ZXMpOwpYbVN0cmluZyBYbVN0cmluZ0NvcHkoWG1TdHJpbmcg
cyk7ClhtU3RyaW5nIFhtU3RyaW5nTkNvcHkoWG1TdHJpbmcgczEsIGludCBudW1fYnl0ZXMpOwpY
bVN0cmluZ0NvbXBvbmVudFR5cGUgWG1TdHJpbmdQZWVrTmV4dENvbXBvbmVudChYbVN0cmluZ0Nv
bnRleHQgY29udGV4dCk7ClhtU3RyaW5nIFhtU3RyaW5nU2VnbWVudENyZWF0ZShjaGFyICp0ZXh0
LCBjaGFyICp0YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZ0RpcmVj
dGlvbiBkaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb29sZWFuIHNl
cGFyYXRvcik7ClhtU3RyaW5nIFhtU3RyaW5nU2VwYXJhdG9yQ3JlYXRlKHZvaWQpOwoKRGltZW5z
aW9uIFhtU3RyaW5nV2lkdGgoWG1Gb250TGlzdCBmb250TGlzdCwgWG1TdHJpbmcgc3RyaW5nKTsK
ClhtRm9udExpc3QgWG1TdHJpbmdDcmVhdGVGb250TGlzdCggWEZvbnRTdHJ1Y3QgKmZvbnQsIFht
U3RyaW5nQ2hhclNldCBjaGFyc2V0KTsKCgoKWG1Gb250TGlzdCBYbUZvbnRMaXN0QXBwZW5kRW50
cnkoWG1Gb250TGlzdCBvbGRsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY
bUZvbnRMaXN0RW50cnkgZW50cnkpOwpYbUZvbnRMaXN0IFhtRm9udExpc3RDcmVhdGUoWEZvbnRT
dHJ1Y3QgKmZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZ0NoYXJTZXQg
Y2hhcnNldCk7ClhtRm9udExpc3QgWG1Gb250TGlzdEFkZChYbUZvbnRMaXN0IG9sZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIFhGb250U3RydWN0ICpmb250LAogICAgICAgICAgICAgICAgICAg
ICAgICAgWG1TdHJpbmdDaGFyU2V0IGNoYXJzZXQpOwpYbUZvbnRMaXN0IFhtRm9udExpc3RDb3B5
KFhtRm9udExpc3QgZm9udGxpc3QpOwpYbUZvbnRMaXN0RW50cnkgWG1Gb250TGlzdEVudHJ5Q3Jl
YXRlKGNoYXIgKnRhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbUZv
bnRUeXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2lu
dGVyIGZvbnQpOwp2b2lkIFhtRm9udExpc3RFbnRyeUZyZWUoWG1Gb250TGlzdEVudHJ5ICplbnRy
eSk7Clh0UG9pbnRlciBYbUZvbnRMaXN0RW50cnlHZXRGb250KFhtRm9udExpc3RFbnRyeSBlbnRy
eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250VHlwZSAqdHlwZV9yZXR1
cm4pOwpjaGFyICpYbUZvbnRMaXN0RW50cnlHZXRUYWcoWG1Gb250TGlzdEVudHJ5IGVudHJ5KTsK
WG1Gb250TGlzdEVudHJ5IFhtRm9udExpc3RFbnRyeUxvYWQoRGlzcGxheSAqZGlzcGxheSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9udF9uYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRUeXBlIHR5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRhZyk7CnZvaWQgWG1Gb250TGlzdEZyZWUo
WG1Gb250TGlzdCBsaXN0KTsKdm9pZCBYbUZvbnRMaXN0RnJlZUZvbnRDb250ZXh0KFhtRm9udENv
bnRleHQgY29udGV4dCk7CkJvb2xlYW4gWG1Gb250TGlzdEluaXRGb250Q29udGV4dChYbUZvbnRD
b250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250
TGlzdCBmb250bGlzdCk7ClhtRm9udExpc3RFbnRyeSBYbUZvbnRMaXN0TmV4dEVudHJ5KFhtRm9u
dENvbnRleHQgY29udGV4dCk7CkJvb2xlYW4gWG1Gb250TGlzdEdldE5leHRGb250KFhtRm9udENv
bnRleHQgY29udGV4dCwgWG1TdHJpbmdDaGFyU2V0ICpjaGFyc2V0LCBYRm9udFN0cnVjdCAqKmZv
bnQpOwpYbUZvbnRMaXN0IFhtRm9udExpc3RSZW1vdmVFbnRyeShYbUZvbnRMaXN0IG9sZGxpc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3RFbnRyeSBlbnRyeSk7
CgoKCgpXaWRnZXQgWG1HZXREZXN0aW5hdGlvbihEaXNwbGF5ICpkaXNwbGF5KTsKCgoKQm9vbGVh
biBYbUlzVHJhdmVyc2FibGUoV2lkZ2V0IHdpZGdldCk7ClhtVmlzaWJpbGl0eSBYbUdldFZpc2li
aWxpdHkoV2lkZ2V0IHdpZGdldCk7CnZvaWQgWG1BZGRUYWJHcm91cChXaWRnZXQgd2lkZ2V0KTsK
dm9pZCBYbVJlbW92ZVRhYkdyb3VwKFdpZGdldCB3aWRnZXQpOwpXaWRnZXQgWG1HZXRUYWJHcm91
cChXaWRnZXQgd2lkZ2V0KTsKQm9vbGVhbiBYbVByb2Nlc3NUcmF2ZXJzYWwoV2lkZ2V0IHdpZGdl
dCwgWG1UcmF2ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uKTsKV2lkZ2V0IFhtR2V0Rm9jdXNXaWRn
ZXQoV2lkZ2V0IHdpZGdldCk7CgoKCnZvaWQgWG1JbVJlZ2lzdGVyKFdpZGdldCB3LCB1bnNpZ25l
ZCBpbnQgcmVzZXJ2ZWQpOwp2b2lkIFhtSW1VbnJlZ2lzdGVyKFdpZGdldCB3KTsKdm9pZCBYbUlt
U2V0Rm9jdXNWYWx1ZXMoV2lkZ2V0IHcsIEFyZ0xpc3QgYXJncywgQ2FyZGluYWwgbnVtX2FyZ3Mp
Owp2b2lkIFhtSW1TZXRWYWx1ZXMoV2lkZ2V0IHcsIEFyZ0xpc3QgYXJncywgQ2FyZGluYWwgbnVt
X2FyZ3MpOwp2b2lkIFhtSW1VbnNldEZvY3VzKFdpZGdldCB3KTsKWElNIFhtSW1HZXRYSU0oV2lk
Z2V0IHcpOwppbnQgWG1JbU1iTG9va3VwU3RyaW5nKFdpZGdldCB3LAogICAgICAgICAgICAgICAg
ICAgICAgIFhLZXlQcmVzc2VkRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmJ5dGVzLAogICAgICAgICAgICAg
ICAgICAgICAgIEtleVN5bSAqa2V5c3ltLAogICAgICAgICAgICAgICAgICAgICAgIGludCAqc3Rh
dHVzKTsKdm9pZCBYbUltTWJSZXNldElDKFdpZGdldCB3aWRnZXQsCiAgICAgICAgICAgICAgICAg
ICBjaGFyICoqbWIpOwpleHRlcm4gdm9pZCBYbUltVmFTZXRGb2N1c1ZhbHVlcyhXaWRnZXQgdywg
Li4uKTsKZXh0ZXJuIHZvaWQgWG1JbVZhU2V0VmFsdWVzKFdpZGdldCB3LCAuLi4pOwpleHRlcm4g
dm9pZCBfWG1EcmF3U2hhZG93cyhEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBEcmF3YWJsZSBkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBHQyB0b3BfZ2Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDIGJvdHRvbV9nYywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUG9zaXRpb24geCwgUG9zaXRpb24geSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRGltZW5zaW9uIHdpZHRoLCBEaW1lbnNpb24gaGVpZ2h0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBEaW1lbnNpb24gc2hhZG93X3RoaWNrLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgc2hhZG93X3R5cGUpOwoKZXh0ZXJuIHZvaWQgX1htRHJhd1NoYWRv
dyhEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgIERyYXdhYmxlIGQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgR0MgdG9wX2djLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDIGJvdHRvbV9nYywKICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24g
c2hhZG93X3RoaWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHgsIFBvc2l0
aW9uIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIHdpZHRoLCBEaW1lbnNp
b24gaGVpZ2h0KTsKCmV4dGVybiB2b2lkIF9YbUNsZWFyQm9yZGVyKERpc3BsYXkgKmRpc3BsYXks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyB3LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBQb3NpdGlvbiB4LCBQb3NpdGlvbiB5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBEaW1lbnNpb24gd2lkdGgsIERpbWVuc2lvbiBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERpbWVuc2lvbiBzaGFkb3dfdGhpY2spOwoKZXh0ZXJuIHZvaWQgX1htRHJhd1NlcGFy
YXRvcihEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhd2Fi
bGUgZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDIHRvcF9nYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDIGJvdHRvbV9nYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDIHNlcGFyYXRvcl9nYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uIHgs
IFBvc2l0aW9uIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gd2lkdGgs
IERpbWVuc2lvbiBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24g
c2hhZG93X3RoaWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIG1hcmdp
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb3JpZW50YXRpb24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHNlcGFyYXRvcl90eXBl
KTsKCmV4dGVybiB2b2lkIF9YbURyYXdEaWFtb25kKERpc3BsYXkgKmRpc3BsYXksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERyYXdhYmxlIGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDIHRvcF9nYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MgYm90dG9tX2djLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQyBjZW50ZXJfZ2MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBvc2l0aW9uIHgsIFBvc2l0aW9uIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IERpbWVuc2lvbiB3aWR0aCwgRGltZW5zaW9uIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRGltZW5zaW9uIHNoYWRvd190aGljaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
RGltZW5zaW9uIGZpbGwpOwoKZXh0ZXJuIHZvaWQgX1htRHJhd1NpbXBsZUhpZ2hsaWdodChEaXNw
bGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyYXdhYmxl
IGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MgZ2MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24geCwgUG9zaXRpb24geSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gd2lkdGgsIERpbWVuc2lvbiBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIGhpZ2hsaWdo
dF90aGljayk7CgpleHRlcm4gdm9pZCBfWG1EcmF3SGlnaGxpZ2h0KERpc3BsYXkgKmRpc3BsYXks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhd2FibGUgZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQyBnYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlv
biB4LCBQb3NpdGlvbiB5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpbWVuc2lvbiB3
aWR0aCwgRGltZW5zaW9uIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1l
bnNpb24gaGlnaGxpZ2h0X3RoaWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBs
aW5lX3N0eWxlKTsKCmV4dGVybiB2b2lkIF9YbURyYXdBcnJvdyhEaXNwbGF5ICpkaXNwbGF5LAog
ICAgICAgICAgICAgICAgICAgICAgICAgRHJhd2FibGUgZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDIHRvcF9nYywKICAgICAgICAgICAgICAgICAgICAgICAgIEdDIGJvdF9nYywKICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDIGNlbnRfZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICBQ
b3NpdGlvbiB4LCBQb3NpdGlvbiB5LAogICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9u
IHdpZHRoLCBEaW1lbnNpb24gaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5z
aW9uIHNoYWRvd190aGljaywKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg
ZGlyZWN0aW9uKTsKCmV4dGVybiB2b2lkIF9YbUhpZ2hsaWdodEJvcmRlcihXaWRnZXQgdyk7CmV4
dGVybiB2b2lkIF9YbVVuaGlnaGxpZ2h0Qm9yZGVyKFdpZGdldCB3KTsKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgbG9uZyB4cm1fbmFtZTsKICAgIGxvbmcgeHJtX2NsYXNzOwogICAgbG9uZyB4cm1fdHlw
ZTsKICAgIENhcmRpbmFsIHhybV9zaXplOwogICAgaW50IHhybV9vZmZzZXQ7CiAgICBsb25nIHhy
bV9kZWZhdWx0X3R5cGU7CiAgICBYdFBvaW50ZXIgeHJtX2RlZmF1bHRfYWRkcjsKfSBYcm1SZXNv
dXJjZSwgKlhybVJlc291cmNlTGlzdDsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYdFZlcnNpb25U
eXBlOwp0eXBlZGVmIHZvaWQgKCpYdFByb2MpKAoKICAgIHZvaWQKCik7Cgp0eXBlZGVmIHZvaWQg
KCpYdFdpZGdldENsYXNzUHJvYykoCgogICAgV2lkZ2V0Q2xhc3MKCik7Cgp0eXBlZGVmIHZvaWQg
KCpYdFdpZGdldFByb2MpKAoKICAgIFdpZGdldAoKKTsKCnR5cGVkZWYgQm9vbGVhbiAoKlh0QWNj
ZXB0Rm9jdXNQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgVGltZSoKCik7Cgp0eXBlZGVmIHZvaWQg
KCpYdEFyZ3NQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgQXJnTGlzdCAsCiAgICBDYXJkaW5hbCoK
Cik7Cgp0eXBlZGVmIHZvaWQgKCpYdEluaXRQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgV2lkZ2V0
ICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwqCgopOwoKdHlwZWRlZiBCb29sZWFuICgqWHRT
ZXRWYWx1ZXNGdW5jKSgKCiAgICBXaWRnZXQgLAogICAgV2lkZ2V0ICwKICAgIFdpZGdldCAsCiAg
ICBBcmdMaXN0ICwKICAgIENhcmRpbmFsKgoKKTsKCnR5cGVkZWYgQm9vbGVhbiAoKlh0QXJnc0Z1
bmMpKAoKICAgIFdpZGdldCAsCiAgICBBcmdMaXN0ICwKICAgIENhcmRpbmFsKgoKKTsKCnR5cGVk
ZWYgdm9pZCAoKlh0QWxtb3N0UHJvYykoCgogICAgV2lkZ2V0ICwKICAgIFdpZGdldCAsCiAgICBY
dFdpZGdldEdlb21ldHJ5KiAsCiAgICBYdFdpZGdldEdlb21ldHJ5KgoKKTsKCnR5cGVkZWYgdm9p
ZCAoKlh0RXhwb3NlUHJvYykoCgogICAgV2lkZ2V0ICwKICAgIFhFdmVudCogLAogICAgUmVnaW9u
CgopOwp0eXBlZGVmIHZvaWQgKCpYdFJlYWxpemVQcm9jKSgKCiAgICBXaWRnZXQgLAogICAgWHRW
YWx1ZU1hc2sqICwKICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzKgoKKTsKCnR5cGVkZWYgWHRHZW9t
ZXRyeVJlc3VsdCAoKlh0R2VvbWV0cnlIYW5kbGVyKSgKCiAgICBXaWRnZXQgLAogICAgWHRXaWRn
ZXRHZW9tZXRyeSogLAogICAgWHRXaWRnZXRHZW9tZXRyeSoKCik7Cgp0eXBlZGVmIHZvaWQgKCpY
dFN0cmluZ1Byb2MpKAoKICAgIFdpZGdldCAsCiAgICBTdHJpbmcKCik7Cgp0eXBlZGVmIHN0cnVj
dCB7CiAgICBTdHJpbmcgbmFtZTsKICAgIFN0cmluZyB0eXBlOwogICAgWHRBcmdWYWwgdmFsdWU7
CiAgICBpbnQgc2l6ZTsKfSBYdFR5cGVkQXJnLCAqWHRUeXBlZEFyZ0xpc3Q7Cgp0eXBlZGVmIHZv
aWQgKCpYdEFsbG9jYXRlUHJvYykoCgogICAgV2lkZ2V0Q2xhc3MgLAogICAgQ2FyZGluYWwgKiAs
CiAgICBDYXJkaW5hbCAqICwKICAgIEFyZ0xpc3QgLAogICAgQ2FyZGluYWwgKiAsCiAgICBYdFR5
cGVkQXJnTGlzdCAsCiAgICBDYXJkaW5hbCAqICwKICAgIFdpZGdldCAqICwKICAgIFh0UG9pbnRl
ciAqCgopOwoKdHlwZWRlZiB2b2lkICgqWHREZWFsbG9jYXRlUHJvYykoCgogICAgV2lkZ2V0ICwK
ICAgIFh0UG9pbnRlcgoKKTsKCnN0cnVjdCBfWHRTdGF0ZVJlYzsKCnR5cGVkZWYgc3RydWN0IF9Y
dFRNUmVjIHsKICAgIFh0VHJhbnNsYXRpb25zIHRyYW5zbGF0aW9uczsKICAgIFh0Qm91bmRBY3Rp
b25zIHByb2NfdGFibGU7CiAgICBzdHJ1Y3QgX1h0U3RhdGVSZWMgKmN1cnJlbnRfc3RhdGU7CiAg
ICB1bnNpZ25lZCBsb25nIGxhc3RFdmVudFRpbWU7Cn0gWHRUTVJlYywgKlh0VE07CmV4dGVybiBp
bnQgX1h0SW5oZXJpdFRyYW5zbGF0aW9uczsKdHlwZWRlZiBzdHJ1Y3QgX0NvcmVQYXJ0IHsKICAg
IFdpZGdldCBzZWxmOwogICAgV2lkZ2V0Q2xhc3Mgd2lkZ2V0X2NsYXNzOwogICAgV2lkZ2V0IHBh
cmVudDsKICAgIFhybU5hbWUgeHJtX25hbWU7CiAgICBCb29sZWFuIGJlaW5nX2Rlc3Ryb3llZDsK
ICAgIFh0Q2FsbGJhY2tMaXN0IGRlc3Ryb3lfY2FsbGJhY2tzOwogICAgWHRQb2ludGVyIGNvbnN0
cmFpbnRzOwogICAgUG9zaXRpb24geCwgeTsKICAgIERpbWVuc2lvbiB3aWR0aCwgaGVpZ2h0Owog
ICAgRGltZW5zaW9uIGJvcmRlcl93aWR0aDsKICAgIEJvb2xlYW4gbWFuYWdlZDsKICAgIEJvb2xl
YW4gc2Vuc2l0aXZlOwogICAgQm9vbGVhbiBhbmNlc3Rvcl9zZW5zaXRpdmU7CiAgICBYdEV2ZW50
VGFibGUgZXZlbnRfdGFibGU7CiAgICBYdFRNUmVjIHRtOwogICAgWHRUcmFuc2xhdGlvbnMgYWNj
ZWxlcmF0b3JzOwogICAgUGl4ZWwgYm9yZGVyX3BpeGVsOwogICAgUGl4bWFwIGJvcmRlcl9waXht
YXA7CiAgICBXaWRnZXRMaXN0IHBvcHVwX2xpc3Q7CiAgICBDYXJkaW5hbCBudW1fcG9wdXBzOwog
ICAgU3RyaW5nIG5hbWU7CiAgICBTY3JlZW4gKnNjcmVlbjsKICAgIENvbG9ybWFwIGNvbG9ybWFw
OwogICAgV2luZG93IHdpbmRvdzsKICAgIENhcmRpbmFsIGRlcHRoOwogICAgUGl4ZWwgYmFja2dy
b3VuZF9waXhlbDsKICAgIFBpeG1hcCBiYWNrZ3JvdW5kX3BpeG1hcDsKICAgIEJvb2xlYW4gdmlz
aWJsZTsKICAgIEJvb2xlYW4gbWFwcGVkX3doZW5fbWFuYWdlZDsKfSBDb3JlUGFydDsKCnR5cGVk
ZWYgc3RydWN0IF9XaWRnZXRSZWMgewogICAgQ29yZVBhcnQgY29yZTsKIH0gV2lkZ2V0UmVjLCBD
b3JlUmVjOwp0eXBlZGVmIHN0cnVjdCBfQ29yZUNsYXNzUGFydCB7CiAgICBXaWRnZXRDbGFzcyBz
dXBlcmNsYXNzOwogICAgU3RyaW5nIGNsYXNzX25hbWU7CiAgICBDYXJkaW5hbCB3aWRnZXRfc2l6
ZTsKICAgIFh0UHJvYyBjbGFzc19pbml0aWFsaXplOwogICAgWHRXaWRnZXRDbGFzc1Byb2MgY2xh
c3NfcGFydF9pbml0aWFsaXplOwogICAgWHRFbnVtIGNsYXNzX2luaXRlZDsKICAgIFh0SW5pdFBy
b2MgaW5pdGlhbGl6ZTsKICAgIFh0QXJnc1Byb2MgaW5pdGlhbGl6ZV9ob29rOwogICAgWHRSZWFs
aXplUHJvYyByZWFsaXplOwogICAgWHRBY3Rpb25MaXN0IGFjdGlvbnM7CiAgICBDYXJkaW5hbCBu
dW1fYWN0aW9uczsKICAgIFh0UmVzb3VyY2VMaXN0IHJlc291cmNlczsKICAgIENhcmRpbmFsIG51
bV9yZXNvdXJjZXM7CiAgICBYcm1DbGFzcyB4cm1fY2xhc3M7CiAgICBCb29sZWFuIGNvbXByZXNz
X21vdGlvbjsKICAgIFh0RW51bSBjb21wcmVzc19leHBvc3VyZTsKICAgIEJvb2xlYW4gY29tcHJl
c3NfZW50ZXJsZWF2ZTsKICAgIEJvb2xlYW4gdmlzaWJsZV9pbnRlcmVzdDsKICAgIFh0V2lkZ2V0
UHJvYyBkZXN0cm95OwogICAgWHRXaWRnZXRQcm9jIHJlc2l6ZTsKICAgIFh0RXhwb3NlUHJvYyBl
eHBvc2U7CiAgICBYdFNldFZhbHVlc0Z1bmMgc2V0X3ZhbHVlczsKICAgIFh0QXJnc0Z1bmMgc2V0
X3ZhbHVlc19ob29rOwogICAgWHRBbG1vc3RQcm9jIHNldF92YWx1ZXNfYWxtb3N0OwogICAgWHRB
cmdzUHJvYyBnZXRfdmFsdWVzX2hvb2s7CiAgICBYdEFjY2VwdEZvY3VzUHJvYyBhY2NlcHRfZm9j
dXM7CiAgICBYdFZlcnNpb25UeXBlIHZlcnNpb247CiAgICBYdFBvaW50ZXIgY2FsbGJhY2tfcHJp
dmF0ZTsKICAgIFN0cmluZyB0bV90YWJsZTsKICAgIFh0R2VvbWV0cnlIYW5kbGVyIHF1ZXJ5X2dl
b21ldHJ5OwogICAgWHRTdHJpbmdQcm9jIGRpc3BsYXlfYWNjZWxlcmF0b3I7CiAgICBYdFBvaW50
ZXIgZXh0ZW5zaW9uOwogfSBDb3JlQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1dpZGdldENs
YXNzUmVjIHsKICAgIENvcmVDbGFzc1BhcnQgY29yZV9jbGFzczsKfSBXaWRnZXRDbGFzc1JlYywg
Q29yZUNsYXNzUmVjOwoKZXh0ZXJuIFdpZGdldENsYXNzUmVjIHdpZGdldENsYXNzUmVjOwp0eXBl
ZGVmIHN0cnVjdCBfQ29tcG9zaXRlUGFydCB7CiAgICBXaWRnZXRMaXN0IGNoaWxkcmVuOwogICAg
Q2FyZGluYWwgbnVtX2NoaWxkcmVuOwogICAgQ2FyZGluYWwgbnVtX3Nsb3RzOwogICAgWHRPcmRl
clByb2MgaW5zZXJ0X3Bvc2l0aW9uOwp9IENvbXBvc2l0ZVBhcnQsKkNvbXBvc2l0ZVB0cjsKCnR5
cGVkZWYgc3RydWN0IF9Db21wb3NpdGVSZWMgewogICAgQ29yZVBhcnQgY29yZTsKICAgIENvbXBv
c2l0ZVBhcnQgY29tcG9zaXRlOwp9IENvbXBvc2l0ZVJlYzsKCgoKCgoKCnR5cGVkZWYgc3RydWN0
IF9Db21wb3NpdGVDbGFzc1BhcnQgewogICAgWHRHZW9tZXRyeUhhbmRsZXIgZ2VvbWV0cnlfbWFu
YWdlcjsKICAgIFh0V2lkZ2V0UHJvYyBjaGFuZ2VfbWFuYWdlZDsKICAgIFh0V2lkZ2V0UHJvYyBp
bnNlcnRfY2hpbGQ7CiAgICBYdFdpZGdldFByb2MgZGVsZXRlX2NoaWxkOwogICAgWHRQb2ludGVy
IGV4dGVuc2lvbjsKfSBDb21wb3NpdGVDbGFzc1BhcnQsKkNvbXBvc2l0ZVBhcnRQdHI7Cgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBYdFBvaW50ZXIgbmV4dF9leHRlbnNpb247CiAgICBYcm1RdWFyayBy
ZWNvcmRfdHlwZTsKICAgIGxvbmcgdmVyc2lvbjsKICAgIENhcmRpbmFsIHJlY29yZF9zaXplOwog
ICAgQm9vbGVhbiBhY2NlcHRzX29iamVjdHM7CiAgICBCb29sZWFuIGFsbG93c19jaGFuZ2VfbWFu
YWdlZF9zZXQ7Cn0gQ29tcG9zaXRlQ2xhc3NFeHRlbnNpb25SZWMsICpDb21wb3NpdGVDbGFzc0V4
dGVuc2lvbjsKCgp0eXBlZGVmIHN0cnVjdCBfQ29tcG9zaXRlQ2xhc3NSZWMgewogICAgIENvcmVD
bGFzc1BhcnQgY29yZV9jbGFzczsKICAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9zaXRlX2Ns
YXNzOwp9IENvbXBvc2l0ZUNsYXNzUmVjOwoKZXh0ZXJuIENvbXBvc2l0ZUNsYXNzUmVjIGNvbXBv
c2l0ZUNsYXNzUmVjOwp0eXBlZGVmIHN0cnVjdCBfQ29uc3RyYWludFBhcnQgewogICAgWHRQb2lu
dGVyIG11bWJsZTsKfSBDb25zdHJhaW50UGFydDsKCnR5cGVkZWYgc3RydWN0IF9Db25zdHJhaW50
UmVjIHsKICAgIENvcmVQYXJ0IGNvcmU7CiAgICBDb21wb3NpdGVQYXJ0IGNvbXBvc2l0ZTsKICAg
IENvbnN0cmFpbnRQYXJ0IGNvbnN0cmFpbnQ7Cn0gQ29uc3RyYWludFJlYywgKkNvbnN0cmFpbnRX
aWRnZXQ7Cgp0eXBlZGVmIHN0cnVjdCBfQ29uc3RyYWludENsYXNzUGFydCB7CiAgICBYdFJlc291
cmNlTGlzdCByZXNvdXJjZXM7CiAgICBDYXJkaW5hbCBudW1fcmVzb3VyY2VzOwogICAgQ2FyZGlu
YWwgY29uc3RyYWludF9zaXplOwogICAgWHRJbml0UHJvYyBpbml0aWFsaXplOwogICAgWHRXaWRn
ZXRQcm9jIGRlc3Ryb3k7CiAgICBYdFNldFZhbHVlc0Z1bmMgc2V0X3ZhbHVlczsKICAgIFh0UG9p
bnRlciBleHRlbnNpb247Cn0gQ29uc3RyYWludENsYXNzUGFydDsKCnR5cGVkZWYgc3RydWN0IHsK
ICAgIFh0UG9pbnRlciBuZXh0X2V4dGVuc2lvbjsKICAgIFhybVF1YXJrIHJlY29yZF90eXBlOwog
ICAgbG9uZyB2ZXJzaW9uOwogICAgQ2FyZGluYWwgcmVjb3JkX3NpemU7CiAgICBYdEFyZ3NQcm9j
IGdldF92YWx1ZXNfaG9vazsKfSBDb25zdHJhaW50Q2xhc3NFeHRlbnNpb25SZWMsICpDb25zdHJh
aW50Q2xhc3NFeHRlbnNpb247Cgp0eXBlZGVmIHN0cnVjdCBfQ29uc3RyYWludENsYXNzUmVjIHsK
ICAgIENvcmVDbGFzc1BhcnQgY29yZV9jbGFzczsKICAgIENvbXBvc2l0ZUNsYXNzUGFydCBjb21w
b3NpdGVfY2xhc3M7CiAgICBDb25zdHJhaW50Q2xhc3NQYXJ0IGNvbnN0cmFpbnRfY2xhc3M7Cn0g
Q29uc3RyYWludENsYXNzUmVjOwoKZXh0ZXJuIENvbnN0cmFpbnRDbGFzc1JlYyBjb25zdHJhaW50
Q2xhc3NSZWM7CnR5cGVkZWYgc3RydWN0IF9PYmplY3RQYXJ0IHsKICAgIFdpZGdldCBzZWxmOwog
ICAgV2lkZ2V0Q2xhc3Mgd2lkZ2V0X2NsYXNzOwogICAgV2lkZ2V0IHBhcmVudDsKICAgIFhybU5h
bWUgeHJtX25hbWU7CiAgICBCb29sZWFuIGJlaW5nX2Rlc3Ryb3llZDsKICAgIFh0Q2FsbGJhY2tM
aXN0IGRlc3Ryb3lfY2FsbGJhY2tzOwogICAgWHRQb2ludGVyIGNvbnN0cmFpbnRzOwp9IE9iamVj
dFBhcnQ7Cgp0eXBlZGVmIHN0cnVjdCBfT2JqZWN0UmVjIHsKICAgIE9iamVjdFBhcnQgb2JqZWN0
Owp9IE9iamVjdFJlYzsKdHlwZWRlZiBzdHJ1Y3QgX09iamVjdENsYXNzUGFydCB7CgogICAgV2lk
Z2V0Q2xhc3Mgc3VwZXJjbGFzczsKICAgIFN0cmluZyBjbGFzc19uYW1lOwogICAgQ2FyZGluYWwg
d2lkZ2V0X3NpemU7CiAgICBYdFByb2MgY2xhc3NfaW5pdGlhbGl6ZTsKICAgIFh0V2lkZ2V0Q2xh
c3NQcm9jIGNsYXNzX3BhcnRfaW5pdGlhbGl6ZTsKICAgIFh0RW51bSBjbGFzc19pbml0ZWQ7CiAg
ICBYdEluaXRQcm9jIGluaXRpYWxpemU7CiAgICBYdEFyZ3NQcm9jIGluaXRpYWxpemVfaG9vazsK
ICAgIFh0UHJvYyBvYmoxOwogICAgWHRQb2ludGVyIG9iajI7CiAgICBDYXJkaW5hbCBvYmozOwog
ICAgWHRSZXNvdXJjZUxpc3QgcmVzb3VyY2VzOwogICAgQ2FyZGluYWwgbnVtX3Jlc291cmNlczsK
ICAgIFhybUNsYXNzIHhybV9jbGFzczsKICAgIEJvb2xlYW4gb2JqNDsKICAgIFh0RW51bSBvYmo1
OwogICAgQm9vbGVhbiBvYmo2OwogICAgQm9vbGVhbiBvYmo3OwogICAgWHRXaWRnZXRQcm9jIGRl
c3Ryb3k7CiAgICBYdFByb2Mgb2JqODsKICAgIFh0UHJvYyBvYmo5OwogICAgWHRTZXRWYWx1ZXNG
dW5jIHNldF92YWx1ZXM7CiAgICBYdEFyZ3NGdW5jIHNldF92YWx1ZXNfaG9vazsKICAgIFh0UHJv
YyBvYmoxMDsKICAgIFh0QXJnc1Byb2MgZ2V0X3ZhbHVlc19ob29rOwogICAgWHRQcm9jIG9iajEx
OwogICAgWHRWZXJzaW9uVHlwZSB2ZXJzaW9uOwogICAgWHRQb2ludGVyIGNhbGxiYWNrX3ByaXZh
dGU7CiAgICBTdHJpbmcgb2JqMTI7CiAgICBYdFByb2Mgb2JqMTM7CiAgICBYdFByb2Mgb2JqMTQ7
CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9T2JqZWN0Q2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1
Y3QgewogICAgWHRQb2ludGVyIG5leHRfZXh0ZW5zaW9uOwogICAgWHJtUXVhcmsgcmVjb3JkX3R5
cGU7CiAgICBsb25nIHZlcnNpb247CiAgICBDYXJkaW5hbCByZWNvcmRfc2l6ZTsKICAgIFh0QWxs
b2NhdGVQcm9jIGFsbG9jYXRlOwogICAgWHREZWFsbG9jYXRlUHJvYyBkZWFsbG9jYXRlOwp9IE9i
amVjdENsYXNzRXh0ZW5zaW9uUmVjLCAqT2JqZWN0Q2xhc3NFeHRlbnNpb247Cgp0eXBlZGVmIHN0
cnVjdCBfT2JqZWN0Q2xhc3NSZWMgewogICAgT2JqZWN0Q2xhc3NQYXJ0IG9iamVjdF9jbGFzczsK
fSBPYmplY3RDbGFzc1JlYzsKCmV4dGVybiBPYmplY3RDbGFzc1JlYyBvYmplY3RDbGFzc1JlYzsK
dHlwZWRlZiBzdHJ1Y3QgX1JlY3RPYmpQYXJ0IHsKICAgIFBvc2l0aW9uIHgsIHk7CiAgICBEaW1l
bnNpb24gd2lkdGgsIGhlaWdodDsKICAgIERpbWVuc2lvbiBib3JkZXJfd2lkdGg7CiAgICBCb29s
ZWFuIG1hbmFnZWQ7CiAgICBCb29sZWFuIHNlbnNpdGl2ZTsKICAgIEJvb2xlYW4gYW5jZXN0b3Jf
c2Vuc2l0aXZlOwp9UmVjdE9ialBhcnQ7Cgp0eXBlZGVmIHN0cnVjdCBfUmVjdE9ialJlYyB7CiAg
ICBPYmplY3RQYXJ0IG9iamVjdDsKICAgIFJlY3RPYmpQYXJ0IHJlY3RhbmdsZTsKfSBSZWN0T2Jq
UmVjOwp0eXBlZGVmIHN0cnVjdCBfUmVjdE9iakNsYXNzUGFydCB7CgogICAgV2lkZ2V0Q2xhc3Mg
c3VwZXJjbGFzczsKICAgIFN0cmluZyBjbGFzc19uYW1lOwogICAgQ2FyZGluYWwgd2lkZ2V0X3Np
emU7CiAgICBYdFByb2MgY2xhc3NfaW5pdGlhbGl6ZTsKICAgIFh0V2lkZ2V0Q2xhc3NQcm9jIGNs
YXNzX3BhcnRfaW5pdGlhbGl6ZTsKICAgIFh0RW51bSBjbGFzc19pbml0ZWQ7CiAgICBYdEluaXRQ
cm9jIGluaXRpYWxpemU7CiAgICBYdEFyZ3NQcm9jIGluaXRpYWxpemVfaG9vazsKICAgIFh0UHJv
YyByZWN0MTsKICAgIFh0UG9pbnRlciByZWN0MjsKICAgIENhcmRpbmFsIHJlY3QzOwogICAgWHRS
ZXNvdXJjZUxpc3QgcmVzb3VyY2VzOwogICAgQ2FyZGluYWwgbnVtX3Jlc291cmNlczsKICAgIFhy
bUNsYXNzIHhybV9jbGFzczsKICAgIEJvb2xlYW4gcmVjdDQ7CiAgICBYdEVudW0gcmVjdDU7CiAg
ICBCb29sZWFuIHJlY3Q2OwogICAgQm9vbGVhbiByZWN0NzsKICAgIFh0V2lkZ2V0UHJvYyBkZXN0
cm95OwogICAgWHRXaWRnZXRQcm9jIHJlc2l6ZTsKICAgIFh0RXhwb3NlUHJvYyBleHBvc2U7CiAg
ICBYdFNldFZhbHVlc0Z1bmMgc2V0X3ZhbHVlczsKICAgIFh0QXJnc0Z1bmMgc2V0X3ZhbHVlc19o
b29rOwogICAgWHRBbG1vc3RQcm9jIHNldF92YWx1ZXNfYWxtb3N0OwogICAgWHRBcmdzUHJvYyBn
ZXRfdmFsdWVzX2hvb2s7CiAgICBYdFByb2MgcmVjdDk7CiAgICBYdFZlcnNpb25UeXBlIHZlcnNp
b247CiAgICBYdFBvaW50ZXIgY2FsbGJhY2tfcHJpdmF0ZTsKICAgIFN0cmluZyByZWN0MTA7CiAg
ICBYdEdlb21ldHJ5SGFuZGxlciBxdWVyeV9nZW9tZXRyeTsKICAgIFh0UHJvYyByZWN0MTE7CiAg
ICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFJlY3RPYmpDbGFzc1BhcnQ7Cgp0eXBlZGVmIHN0cnVj
dCBfUmVjdE9iakNsYXNzUmVjIHsKICAgIFJlY3RPYmpDbGFzc1BhcnQgcmVjdF9jbGFzczsKfSBS
ZWN0T2JqQ2xhc3NSZWM7CgpleHRlcm4gUmVjdE9iakNsYXNzUmVjIHJlY3RPYmpDbGFzc1JlYzsK
CgpleHRlcm4gV2lkZ2V0IF9YdFdpbmRvd2VkQW5jZXN0b3IoCgogICAgV2lkZ2V0CgopOwoKZXh0
ZXJuIHZvaWQgX1h0SW5oZXJpdCgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgWHRDcmVhdGVX
aW5kb3coCgogICAgV2lkZ2V0ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBWaXN1YWwqICwKICAg
IFh0VmFsdWVNYXNrICwKICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzKgoKKTsKCmV4dGVybiB2b2lk
IFh0UmVzaXplV2lkZ2V0KAoKICAgIFdpZGdldCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5z
aWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKCmV4dGVybiB2b2lkIFh0TW92ZVdpZGdl
dCgKCiAgICBXaWRnZXQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFh0Q29u
ZmlndXJlV2lkZ2V0KAoKICAgIFdpZGdldCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2ln
bmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJu
IHZvaWQgWHRSZXNpemVXaW5kb3coCgogICAgV2lkZ2V0CgopOwoKZXh0ZXJuIHZvaWQgWHRQcm9j
ZXNzTG9jaygKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgWHRQcm9jZXNzVW5sb2NrKAoKICAg
IHZvaWQKCik7CgoKZW51bSB7CiAgICBYbU1FTlVfUE9QRE9XTiwKICAgIFhtTUVOVV9QUk9DRVNT
X1RSRUUsCiAgICBYbU1FTlVfVFJBVkVSU0FMLAogICAgWG1NRU5VX1NIRUxMX1BPUERPV04sCiAg
ICBYbU1FTlVfQ0FMTEJBQ0ssCiAgICBYbU1FTlVfQlVUVE9OLAogICAgWG1NRU5VX0NBU0NBRElO
RywKICAgIFhtTUVOVV9TVUJNRU5VLAogICAgWG1NRU5VX0FSTSwKICAgIFhtTUVOVV9ESVNBUk0s
CiAgICBYbU1FTlVfQkFSX0NMRUFOVVAsCiAgICBYbU1FTlVfU1RBVFVTLAogICAgWG1NRU5VX01F
TVdJREdFVF9VUERBVEUsCiAgICBYbU1FTlVfQlVUVE9OX1BPUERPV04sCiAgICBYbU1FTlVfUkVT
VE9SRV9FWENMVURFRF9URUFST0ZGX1RPX1RPUExFVkVMX1NIRUxMLAogICAgWG1NRU5VX1JFU1RP
UkVfVEVBUk9GRl9UT19UT1BMRVZFTF9TSEVMTCwKICAgIFhtTUVOVV9SRVNUT1JFX1RFQVJPRkZf
VE9fTUVOVVNIRUxMLAogICAgWG1NRU5VX0dFVF9MQVNUX1NFTEVDVF9UT1BMRVZFTCwKICAgIFht
TUVOVV9URUFSX09GRl9BUk0KfTsKdHlwZWRlZiBzdHJ1Y3QgX1htU2ltcGxlTWVudVJlYyB7CiAg
ICBpbnQgY291bnQ7CiAgICBpbnQgcG9zdF9mcm9tX2J1dHRvbjsKICAgIFh0Q2FsbGJhY2tQcm9j
IGNhbGxiYWNrOwogICAgWG1TdHJpbmdUYWJsZSBsYWJlbF9zdHJpbmc7CiAgICBTdHJpbmcgKmFj
Y2VsZXJhdG9yOwogICAgWG1TdHJpbmdUYWJsZSBhY2NlbGVyYXRvcl90ZXh0OwogICAgWG1LZXlT
eW1UYWJsZSBtbmVtb25pYzsKICAgIFhtU3RyaW5nQ2hhclNldFRhYmxlIG1uZW1vbmljX2NoYXJz
ZXQ7CiAgICBYbUJ1dHRvblR5cGVUYWJsZSBidXR0b25fdHlwZTsKICAgIGludCBidXR0b25fc2V0
OwogICAgWG1TdHJpbmcgb3B0aW9uX2xhYmVsOwogICAgS2V5U3ltIG9wdGlvbl9tbmVtb25pYzsK
fSBYbVNpbXBsZU1lbnVSZWMsICpYbVNpbXBsZU1lbnU7CnR5cGVkZWYgZW51bSB7CiAgICBYbVNZ
TlRIRVRJQ19OT05FLAogICAgWG1TWU5USEVUSUNfTE9BRAp9IFhtSW1wb3J0T3BlcmF0b3I7Cgp0
eXBlZGVmIHZvaWQgKCpYbUV4cG9ydFByb2MpKFdpZGdldCwgaW50LCBYdEFyZ1ZhbCAqKTsKdHlw
ZWRlZiBYbUltcG9ydE9wZXJhdG9yICgqWG1JbXBvcnRQcm9jKShXaWRnZXQsIGludCwgWHRBcmdW
YWwqKTsKCnR5cGVkZWYgc3RydWN0IF9YbVN5bnRoZXRpY1Jlc291cmNlIHsKICAgIFN0cmluZyBy
ZXNvdXJjZV9uYW1lOwogICAgQ2FyZGluYWwgcmVzb3VyY2Vfc2l6ZTsKICAgIENhcmRpbmFsIHJl
c291cmNlX29mZnNldDsKICAgIFhtRXhwb3J0UHJvYyBleHBvcnRfcHJvYzsKICAgIFhtSW1wb3J0
UHJvYyBpbXBvcnRfcHJvYzsKfSBYbVN5bnRoZXRpY1Jlc291cmNlOwoKCgoKCmVudW0gewogICAg
WG1QQVJFTlRfUFJPQ0VTU19BTlksCiAgICBYbUlOUFVUX0FDVElPTgp9OwoKZW51bSB7CiAgICBY
bVBBUkVOVF9BQ1RJVkFURSwKICAgIFhtUEFSRU5UX0NBTkNFTAp9OwoKCgoKdHlwZWRlZiBzdHJ1
Y3QgewogICAgaW50IHByb2Nlc3NfdHlwZTsKfSBYbVBhcmVudFByb2Nlc3NBbnlSZWM7Cgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBpbnQgcHJvY2Vzc190eXBlOwogICAgWEV2ZW50ICpldmVudDsKICAg
IGludCBhY3Rpb247CiAgICBTdHJpbmcgKnBhcmFtczsKICAgIENhcmRpbmFsICpudW1fcGFyYW1z
Owp9IFhtUGFyZW50SW5wdXRBY3Rpb25SZWM7Cgp0eXBlZGVmIHVuaW9uIHsKICAgIFhtUGFyZW50
UHJvY2Vzc0FueVJlYyBhbnk7CiAgICBYbVBhcmVudElucHV0QWN0aW9uUmVjIGlucHV0X2FjdGlv
bjsKfSBYbVBhcmVudFByb2Nlc3NEYXRhUmVjLCAqWG1QYXJlbnRQcm9jZXNzRGF0YTsKCgoKZW51
bSB7CiAgICBYbUJBU0VMSU5FX0dFVCwKICAgIFhtQkFTRUxJTkVfU0VUCn07Cgp0eXBlZGVmIHN0
cnVjdCBfWG1CYXNlbGluZU1hcmdpbnMgewogICAgdW5zaWduZWQgY2hhciBnZXRfb3Jfc2V0Owog
ICAgRGltZW5zaW9uIG1hcmdpbl90b3A7CiAgICBEaW1lbnNpb24gbWFyZ2luX2JvdHRvbTsKICAg
IERpbWVuc2lvbiBzaGFkb3c7CiAgICBEaW1lbnNpb24gaGlnaGxpZ2h0OwogICAgRGltZW5zaW9u
IHRleHRfaGVpZ2h0OwogICAgRGltZW5zaW9uIHRleHRfd2lkdGg7CiAgICBEaW1lbnNpb24gbWFy
Z2luX2hlaWdodDsKfSBYbUJhc2VsaW5lTWFyZ2luczsKCnR5cGVkZWYgZW51bSB7CiAgICBYbUZP
Q1VTX0lOLAogICAgWG1GT0NVU19PVVQsCiAgICBYbUVOVEVSLAogICAgWG1MRUFWRQp9IFhtRm9j
dXNDaGFuZ2U7Cgp0eXBlZGVmIGVudW17CiAgICBYbU5PVF9OQVZJR0FCTEUsCiAgICBYbUNPTlRS
T0xfTkFWSUdBQkxFLAogICAgWG1UQUJfTkFWSUdBQkxFLAogICAgWG1ERVNDRU5EQU5UU19OQVZJ
R0FCTEUsCiAgICBYbURFU0NFTkRBTlRTX1RBQl9OQVZJR0FCTEUKfSBYbU5hdmlnYWJpbGl0eTsK
CgoKdHlwZWRlZiBCb29sZWFuICgqWG1QYXJlbnRQcm9jZXNzUHJvYykoV2lkZ2V0LCBYbVBhcmVu
dFByb2Nlc3NEYXRhKTsKdHlwZWRlZiB2b2lkICgqWG1XaWRnZXREaXNwYXRjaFByb2MpCiAgICAg
ICAgICAgICAgICAgICAgICAgIChXaWRnZXQgZ2FkZ2V0LCBYRXZlbnQgKmV2ZW50LCBNYXNrIGV2
ZW50X21hc2spOwp0eXBlZGVmIHZvaWQgKCpYbU1lbnVQb3B1cFByb2MpKFdpZGdldCwgV2lkZ2V0
LCBYRXZlbnQgKik7CnR5cGVkZWYgdm9pZCAoKlhtTWVudVRyYXZlcnNhbFByb2MpKCBXaWRnZXQs
IFdpZGdldCwgWG1UcmF2ZXJzYWxEaXJlY3Rpb24pOwp0eXBlZGVmIHZvaWQgKCpYbVJlc2l6ZUZs
YWdQcm9jKShXaWRnZXQsIEJvb2xlYW4pOwp0eXBlZGVmIHZvaWQgKCpYbVJlYWxpemVPdXRQcm9j
KShXaWRnZXQsIE1hc2sgKiwgWFNldFdpbmRvd0F0dHJpYnV0ZXMgKik7CnR5cGVkZWYgQm9vbGVh
biAoKlhtVmlzdWFsQ2hhbmdlUHJvYykKICAgICAgICAgICAgICAgICAgICAgICAgKFdpZGdldCBn
YWRnZXQsIFdpZGdldCBjdXJfbWdyLCBXaWRnZXQgbmV3X21ncik7CnR5cGVkZWYgdm9pZCAoKlht
VHJhdmVyc2FsUHJvYykoV2lkZ2V0LCBYdFBvaW50ZXIsIFh0UG9pbnRlciwgaW50KTsKdHlwZWRl
ZiB2b2lkICgqWG1Gb2N1c01vdmVkUHJvYykoIFdpZGdldCwgWHRQb2ludGVyLCBYdFBvaW50ZXIp
IDsKdHlwZWRlZiB2b2lkICgqWG1DYWNoZUNvcHlQcm9jKShYdFBvaW50ZXIsIFh0UG9pbnRlciwg
c2l6ZV90KTsKdHlwZWRlZiBpbnQgKCpYbUNhY2hlQ29tcGFyZVByb2MpKFh0UG9pbnRlciwgWHRQ
b2ludGVyKTsKdHlwZWRlZiBCb29sZWFuICgqWG1XaWRnZXRCYXNlbGluZVByb2MpCiAgICAgICAg
ICAgICAgICAgICAgICAgIChXaWRnZXQgdywgRGltZW5zaW9uICoqYmFzZWxpbmVzLCBpbnQgKm51
bV9iYXNlbGluZXMpOwp0eXBlZGVmIEJvb2xlYW4gKCpYbVdpZGdldERpc3BsYXlSZWN0UHJvYyko
V2lkZ2V0IHcsIFhSZWN0YW5nbGUgKnJlY3QpOwp0eXBlZGVmIHZvaWQgKCpYbVdpZGdldE1hcmdp
bnNQcm9jKShXaWRnZXQgdywgWG1CYXNlbGluZU1hcmdpbnMgKm1hcmdpbnMpOwp0eXBlZGVmIFht
TmF2aWdhYmlsaXR5ICgqWG1XaWRnZXROYXZpZ2FibGVQcm9jKShXaWRnZXQgdyk7CnR5cGVkZWYg
dm9pZCAoKlhtRm9jdXNDaGFuZ2VQcm9jKShXaWRnZXQgdywgWG1Gb2N1c0NoYW5nZSBjaGFuZ2Up
OwoKdHlwZWRlZiB2b2lkICgqWG1NZW51UHJvYykoaW50IGZ1bmN0aW9uLCBXaWRnZXQgd2lkZ2V0
LCAuLi4pOwoKdHlwZWRlZiB2b2lkICgqWG1HYWRnZXRDYWNoZVByb2MpKFh0UG9pbnRlcik7CnR5
cGVkZWYgQm9vbGVhbiAoKlhtVHJhdmVyc2FsQ2hpbGRyZW5Qcm9jKQogICAgICAgICAgICAgICAg
ICAgICAgICAoV2lkZ2V0IG13LCBXaWRnZXQgKipjaGlsZHJlbiwgQ2FyZGluYWwgKm51bV9jaGls
ZHJlbik7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgTW9kaWZpZXJzIG1vZDsKICAgIGNoYXIg
KmtleTsKICAgIGNoYXIgKmFjdGlvbjsKfSBfWG1CdWlsZFZpcnR1YWxLZXlTdHJ1Y3Q7CgoKCgoK
CnR5cGVkZWYgc3RydWN0IHsKICAgIFhtVGV4dFBvc2l0aW9uIHBvc2l0aW9uOwogICAgWG1IaWdo
bGlnaHRNb2RlIG1vZGU7Cn0gX1htSGlnaGxpZ2h0UmVjOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAg
Q2FyZGluYWwgbnVtYmVyOwogICAgQ2FyZGluYWwgbWF4aW11bTsKICAgIF9YbUhpZ2hsaWdodFJl
YyAqbGlzdDsKfSBfWG1IaWdobGlnaHREYXRhOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQXRvbSBz
ZWxlY3Rpb247CiAgICBBdG9tIHRhcmdldDsKfSBfWG1UZXh0SW5zZXJ0UGFpcjsKCnR5cGVkZWYg
ZW51bSB7CiAgICBYbURFU1RfU0VMRUNULAogICAgWG1QUklNX1NFTEVDVAp9IFhtU2VsZWN0VHlw
ZTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIEJvb2xlYW4gZG9uZV9zdGF0dXM7CiAgICBCb29sZWFu
IHN1Y2Nlc3Nfc3RhdHVzOwogICAgWG1TZWxlY3RUeXBlIHNlbGVjdF90eXBlOwogICAgWFNlbGVj
dGlvblJlcXVlc3RFdmVudCAqZXZlbnQ7Cn0gX1htSW5zZXJ0U2VsZWN0OwoKdHlwZWRlZiBzdHJ1
Y3QgewogICAgWEV2ZW50ICpldmVudDsKICAgIFN0cmluZyAqcGFyYW1zOwogICAgQ2FyZGluYWwg
Km51bV9wYXJhbXM7Cn0gX1htVGV4dEFjdGlvblJlYzsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFdp
ZGdldCB3aWRnZXQ7CiAgICBYbVRleHRQb3NpdGlvbiBpbnNlcnRfcG9zOwogICAgaW50IG51bV9j
aGFyczsKICAgIFRpbWUgdGltZXN0YW1wOwogICAgQm9vbGVhbiBtb3ZlOwp9IF9YbVRleHREcm9w
VHJhbnNmZXJSZWM7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYbVRleHRQb3NpdGlvbiBwb3NpdGlv
bjsKICAgIEF0b20gdGFyZ2V0OwogICAgVGltZSB0aW1lOwogICAgaW50IG51bV9jaGFyczsKICAg
IGludCByZWZfY291bnQ7Cn0gX1htVGV4dFByaW1TZWxlY3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAg
ICBTY3JlZW4gKnNjcmVlbjsKICAgIFhDb250ZXh0IGNvbnRleHQ7CiAgICB1bnNpZ25lZCBjaGFy
IHR5cGU7Cn0gWG1UZXh0Q29udGV4dERhdGFSZWMsICpYbVRleHRDb250ZXh0RGF0YTsKCmVudW0g
ewogICAgX1hNX0lTX0RFU1RfQ1RYLAogICAgX1hNX0lTX0dDX0RBVEFfQ1RYLAogICAgX1hNX0lT
X1BJWE1BUF9DVFgKfTsKZW51bXsKICAgIFhtR0VUX0FDVFVBTF9TSVpFID0gMSwKICAgIFhtR0VU
X1BSRUZFUlJFRF9TSVpFLAogICAgWG1HRU9fUFJFX1NFVCwKICAgIFhtR0VPX1BPU1RfU0VUCn07
CgoKZW51bSB7CiAgICBYbUdFT19FWFBBTkQsCiAgICBYbUdFT19DRU5URVIsCiAgICBYbUdFT19Q
QUNLCn07CgoKZW51bSB7CiAgICBYbUdFT19QUk9QT1JUSU9OQUwsCiAgICBYbUdFT19BVkVSQUdJ
TkcsCiAgICBYbUdFT19XUkFQCn07CgplbnVtIHsKICAgIFhtR0VPX1JPV19NQUpPUiwKICAgIFht
R0VPX0NPTFVNTl9NQUpPUgp9OwoKdHlwZWRlZiBzdHJ1Y3QgX1htR2VvTWF0cml4UmVjICpYbUdl
b01hdHJpeDsKdHlwZWRlZiB1bmlvbiBfWG1HZW9NYWpvckxheW91dFJlYyAqWG1HZW9NYWpvckxh
eW91dDsKdHlwZWRlZiBzdHJ1Y3QgX1htS2lkR2VvbWV0cnlSZWMgewogICAgV2lkZ2V0IGtpZDsK
ICAgIFh0V2lkZ2V0R2VvbWV0cnkgYm94Owp9IFhtS2lkR2VvbWV0cnlSZWMsICpYbUtpZEdlb21l
dHJ5OwoKdHlwZWRlZiB2b2lkICgqWG1HZW9BcnJhbmdlUHJvYykoWG1HZW9NYXRyaXgsIFBvc2l0
aW9uLCBQb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9u
ICosIERpbWVuc2lvbiAqKTsKdHlwZWRlZiBCb29sZWFuICgqWG1HZW9FeGNlcHRQcm9jKShYbUdl
b01hdHJpeCk7CnR5cGVkZWYgdm9pZCAoKlhtR2VvRXh0RGVzdHJ1Y3RvclByb2MpKFh0UG9pbnRl
cik7CnR5cGVkZWYgdm9pZCAoKlhtR2VvU2VnbWVudEZpeFVwUHJvYykoWG1HZW9NYXRyaXgsIGlu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbUdlb01ham9yTGF5b3V0
LCBYbUtpZEdlb21ldHJ5KTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIEJvb2xlYW4gZW5kOwogICAg
WG1HZW9TZWdtZW50Rml4VXBQcm9jIGZpeF91cDsKICAgIERpbWVuc2lvbiBldmVuX3dpZHRoOwog
ICAgRGltZW5zaW9uIGV2ZW5faGVpZ2h0OwogICAgRGltZW5zaW9uIG1pbl9oZWlnaHQ7CiAgICBC
b29sZWFuIHN0cmV0Y2hfaGVpZ2h0OwogICAgQm9vbGVhbiB1bmlmb3JtX2JvcmRlcjsKICAgIERp
bWVuc2lvbiBib3JkZXI7CiAgICB1bnNpZ25lZCBjaGFyIGZpbGxfbW9kZTsKICAgIHVuc2lnbmVk
IGNoYXIgZml0X21vZGU7CiAgICBCb29sZWFuIHN0aWNreV9lbmQ7CiAgICBEaW1lbnNpb24gc3Bh
Y2VfYWJvdmU7CiAgICBEaW1lbnNpb24gc3BhY2VfZW5kOwogICAgRGltZW5zaW9uIHNwYWNlX2Jl
dHdlZW47CiAgICBEaW1lbnNpb24gbWF4X2JveF9oZWlnaHQ7CiAgICBEaW1lbnNpb24gYm94ZXNf
d2lkdGg7CiAgICBEaW1lbnNpb24gZmlsbF93aWR0aDsKICAgIERpbWVuc2lvbiBib3hfY291bnQ7
Cn0gWG1HZW9Sb3dMYXlvdXRSZWMsICpYbUdlb1Jvd0xheW91dDsKCnR5cGVkZWYgc3RydWN0IHsK
ICAgIEJvb2xlYW4gZW5kOwogICAgWG1HZW9TZWdtZW50Rml4VXBQcm9jIGZpeF91cDsKICAgIERp
bWVuc2lvbiBldmVuX2hlaWdodDsKICAgIERpbWVuc2lvbiBldmVuX3dpZHRoOwogICAgRGltZW5z
aW9uIG1pbl93aWR0aDsKICAgIEJvb2xlYW4gc3RyZXRjaF93aWR0aDsKICAgIEJvb2xlYW4gdW5p
Zm9ybV9ib3JkZXI7CiAgICBEaW1lbnNpb24gYm9yZGVyOwogICAgdW5zaWduZWQgY2hhciBmaWxs
X21vZGU7CiAgICB1bnNpZ25lZCBjaGFyIGZpdF9tb2RlOwogICAgQm9vbGVhbiBzdGlja3lfZW5k
OwogICAgRGltZW5zaW9uIHNwYWNlX2xlZnQ7CiAgICBEaW1lbnNpb24gc3BhY2VfZW5kOwogICAg
RGltZW5zaW9uIHNwYWNlX2JldHdlZW47CiAgICBEaW1lbnNpb24gbWF4X2JveF93aWR0aDsKICAg
IERpbWVuc2lvbiBib3hlZF9oZWlnaHQ7CiAgICBEaW1lbnNpb24gZmlsbF9oZWlnaHQ7CiAgICBE
aW1lbnNpb24gYm94X2NvdW50Owp9IFhtR2VvQ29sdW1uTGF5b3V0UmVjLCAqWG1HZW9Db2x1bW5M
YXlvdXQ7Cgp0eXBlZGVmIHVuaW9uIF9YbUdlb01ham9yTGF5b3V0UmVjIHsKICAgIFhtR2VvUm93
TGF5b3V0UmVjIHJvdzsKICAgIFhtR2VvQ29sdW1uTGF5b3V0UmVjIGNvbDsKfSBYbUdlb01ham9y
TGF5b3V0UmVjOwoKdHlwZWRlZiBzdHJ1Y3QgX1htR2VvTWF0cml4UmVjIHsKICAgIFdpZGdldCBj
b21wb3NpdGU7CiAgICBXaWRnZXQgaW5zdGlnYXRvcjsKICAgIFh0V2lkZ2V0R2VvbWV0cnkgaW5z
dGlnX3JlcXVlc3Q7CiAgICBYdFdpZGdldEdlb21ldHJ5IHBhcmVudF9yZXF1ZXN0OwogICAgWHRX
aWRnZXRHZW9tZXRyeSAqaW5fbGF5b3V0OwogICAgWG1LaWRHZW9tZXRyeSBib3hlczsKICAgIFht
R2VvTWFqb3JMYXlvdXQgbGF5b3V0czsKICAgIERpbWVuc2lvbiBtYXJnaW5fdzsKICAgIERpbWVu
c2lvbiBtYXJnaW5faDsKICAgIEJvb2xlYW4gc3RyZXRjaF9ib3hlczsKICAgIEJvb2xlYW4gdW5p
Zm9ybV9ib3JkZXI7CiAgICBEaW1lbnNpb24gYm9yZGVyOwogICAgRGltZW5zaW9uIG1heF9tYWpv
cjsKICAgIERpbWVuc2lvbiBib3hlc19taW5vcjsKICAgIERpbWVuc2lvbiBmaWxsX21pbm9yOwog
ICAgRGltZW5zaW9uIHdpZHRoOwogICAgRGltZW5zaW9uIGhlaWdodDsKICAgIFhtR2VvRXhjZXB0
UHJvYyBzZXRfZXhjZXB0OwogICAgWG1HZW9FeGNlcHRQcm9jIGFsbW9zdF9leGNlcHQ7CiAgICBY
bUdlb0V4Y2VwdFByb2Mgbm9fZ2VvX3JlcXVlc3Q7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwog
ICAgWG1HZW9FeHREZXN0cnVjdG9yUHJvYyBleHRfZGVzdHJ1Y3RvcjsKICAgIFhtR2VvQXJyYW5n
ZVByb2MgYXJyYW5nZV9ib3hlczsKICAgIHVuc2lnbmVkIGNoYXIgbWFqb3Jfb3JkZXI7Cn0gWG1H
ZW9NYXRyaXhSZWM7Cgp0eXBlZGVmIFhtR2VvTWF0cml4ICgqWG1HZW9DcmVhdGVQcm9jKShXaWRn
ZXQsIFdpZGdldCwgWHRXaWRnZXRHZW9tZXRyeSAqKTsKZW51bSB7CiAgICBYbUNBU0NBREVfQlVU
VE9OX0JJVCA9IDEsCiAgICBYbUNBU0NBREVfQlVUVE9OX0dBREdFVF9CSVQsCiAgICBYbUNPTU1B
TkRfQk9YX0JJVCwKICAgIFhtRElBTE9HX1NIRUxMX0JJVCwKICAgIFhtTElTVF9CSVQsCiAgICBY
bUZPUk1fQklULAogICAgWG1URVhUX0ZJRUxEX0JJVCwKICAgIFhtR0FER0VUX0JJVCwKICAgIFht
TEFCRUxfQklULAogICAgWG1MQUJFTF9HQURHRVRfQklULAogICAgWG1NQUlOX1dJTkRPV19CSVQs
CiAgICBYbU1BTkFHRVJfQklULAogICAgWG1NRU5VX1NIRUxMX0JJVCwKICAgIFhtRFJBV05fQlVU
VE9OX0JJVCwKICAgIFhtUFJJTUlUSVZFX0JJVCwKICAgIFhtUFVTSF9CVVRUT05fQklULAogICAg
WG1QVVNIX0JVVFRPTl9HQURHRVRfQklULAogICAgWG1ST1dfQ09MVU1OX0JJVCwKICAgIFhtU0NS
T0xMX0JBUl9CSVQsCiAgICBYbVNDUk9MTEVEX1dJTkRPV19CSVQsCiAgICBYbVNFTEVDVElPTl9C
T1hfQklULAogICAgWG1TRVBBUkFUT1JfQklULAogICAgWG1TRVBBUkFUT1JfR0FER0VUX0JJVCwK
ICAgIFhtVEVYVF9CSVQsCiAgICBYbVRPR0dMRV9CVVRUT05fQklULAogICAgWG1UT0dHTEVfQlVU
VE9OX0dBREdFVF9CSVQsCiAgICBYbURST1BfVFJBTlNGRVJfQklULAogICAgWG1EUk9QX1NJVEVf
TUFOQUdFUl9CSVQsCiAgICBYbURJU1BMQVlfQklULAogICAgWG1TQ1JFRU5fQklULAogICAgWG1B
UlJPV19CVVRUT05fQklUID0gMzIsCiAgICBYbUFSUk9XX0JVVFRPTl9HQURHRVRfQklULAogICAg
WG1CVUxMRVRJTl9CT0FSRF9CSVQsCiAgICBYbURSQVdJTkdfQVJFQV9CSVQsCiAgICBYbUZJTEVf
U0VMRUNUSU9OX0JPWF9CSVQsCiAgICBYbUZSQU1FX0JJVCwKICAgIFhtTUVTU0FHRV9CT1hfQklU
LAogICAgWG1TQVNIX0JJVCwKICAgIFhtU0NBTEVfQklULAogICAgWG1QQU5FRF9XSU5ET1dfQklU
LAogICAgWG1WRU5ET1JfU0hFTExfQklULAogICAgWG1DTElQX1dJTkRPV19CSVQsCiAgICBYbURS
QUdfSUNPTl9CSVQsCiAgICBYbVRFQVJPRkZfQlVUVE9OX0JJVCwKICAgIFhtRFJBR19PVkVSX1NI
RUxMX0JJVCwKICAgIFhtRFJBR19DT05URVhUX0JJVCwKCgoKCgoKICAgIFhtRkFTVF9TVUJDTEFT
U19UQUlMX0JJVCwKCiAgICBYbUZJUlNUX0FQUExJQ0FUSU9OX1NVQkNMQVNTX0JJVCA9IDE5Mgp9
Owp0eXBlZGVmIHN0cnVjdCBfWG1QYXJ0UmVzb3VyY2UgewogICAgU3RyaW5nIHJlc291cmNlX25h
bWU7CiAgICBTdHJpbmcgcmVzb3VyY2VfY2xhc3M7CiAgICBTdHJpbmcgcmVzb3VyY2VfdHlwZTsK
ICAgIENhcmRpbmFsIHJlc291cmNlX3NpemU7CiAgICBDYXJkaW5hbCByZXNvdXJjZV9vZmZzZXQ7
CiAgICBTdHJpbmcgZGVmYXVsdF90eXBlOwogICAgWHRQb2ludGVyIGRlZmF1bHRfYWRkcjsKfSBY
bVBhcnRSZXNvdXJjZTsKdHlwZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQgeDEsIHgyLCB5MSwgeTI7
Cn0gWG1SZWdpb25Cb3g7Cgp0eXBlZGVmIHN0cnVjdCBfWG1SZWdpb24gewogICAgbG9uZyBzaXpl
OwogICAgbG9uZyBudW1SZWN0czsKICAgIFhtUmVnaW9uQm94ICpyZWN0czsKICAgIFhtUmVnaW9u
Qm94IGV4dGVudHM7Cn0gWG1SZWdpb25SZWMsICpYbVJlZ2lvbjsKCgoKWG1HYWRnZXQgX1htSW5w
dXRJbkdhZGdldChXaWRnZXQgY3csIGludCB4LCBpbnQgeSk7ClhtR2FkZ2V0IF9YbUlucHV0Rm9y
R2FkZ2V0KFdpZGdldCBjdywgaW50IHgsIGludCB5KTsKdm9pZCBfWG1Db25maWd1cmVPYmplY3Qo
V2lkZ2V0IGcsIFBvc2l0aW9uIHgsIFBvc2l0aW9uIHksCiAgICAgICAgICAgICAgICAgICAgICAg
IERpbWVuc2lvbiB3aWR0aCwgRGltZW5zaW9uIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAg
ICAgRGltZW5zaW9uIGJvcmRlcl93aWR0aCk7CnZvaWQgX1htUmVzaXplT2JqZWN0KFdpZGdldCBn
LCBEaW1lbnNpb24gd2lkdGgsIERpbWVuc2lvbiBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
IERpbWVuc2lvbiBib3JkZXJfd2lkdGgpOwp2b2lkIF9YbU1vdmVPYmplY3QoV2lkZ2V0IGcsIFBv
c2l0aW9uIHgsIFBvc2l0aW9uIHkpOwp2b2lkIF9YbVJlZGlzcGxheUdhZGdldHMoV2lkZ2V0IHcs
IFhFdmVudCAqZXZlbnQsIFJlZ2lvbiByZWdpb24pOwp2b2lkIF9YbURpc3BhdGNoR2FkZ2V0SW5w
dXQoV2lkZ2V0IGcsIFhFdmVudCAqZXZlbnQsIE1hc2sgbWFzayk7ClRpbWUgX19YbUdldERlZmF1
bHRUaW1lKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50KTsKQm9vbGVhbiBfWG1JbnN0YWxsSW1hZ2Uo
WEltYWdlICppbWFnZSwgY2hhciAqaW1hZ2VfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGhvdF94LCBpbnQgaG90X3kpOwpCb29sZWFuIF9YbUdldEltYWdlKFNjcmVlbiAqc2NyZWVu
LCBjaGFyICppbWFnZV9uYW1lLCBYSW1hZ2UgKippbWFnZSk7CkJvb2xlYW4gX1htR2V0UGl4bWFw
RGF0YShTY3JlZW4gKnNjcmVlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIFBpeG1hcCBwaXht
YXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqaW1hZ2VfbmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCAqZGVwdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBQaXhl
bCAqZm9yZWdyb3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsICpiYWNrZ3JvdW5k
LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpob3RfeCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCAqaG90X3ksCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
KndpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpoZWlnaHQpOwpQ
aXhtYXAgX1htR2V0UGl4bWFwKFNjcmVlbiAqc2NyZWVuLAogICAgICAgICAgICAgICAgICAgIGNo
YXIgKmltYWdlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgaW50IGRlcHRoLAogICAgICAgICAg
ICAgICAgICAgIFBpeGVsIGZvcmVncm91bmQsCiAgICAgICAgICAgICAgICAgICAgUGl4ZWwgYmFj
a2dyb3VuZCk7CkJvb2xlYW4gX1htSW5zdGFsbFBpeG1hcChQaXhtYXAgcGl4bWFwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgU2NyZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICppbWFnZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWwgZm9yZWdy
b3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsIGJhY2tncm91bmQpOwoKCgpCb29s
ZWFuIF9YbU1hcEJ0bkV2ZW50KFN0cmluZyBzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgaW50
ICpldmVudFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpidXR0b24s
CiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICptb2RpZmllcnMpOwpCb29sZWFu
IF9YbU1hcEtleUV2ZW50KFN0cmluZyBzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgaW50ICpl
dmVudFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKmtleXN5bSwKICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm1vZGlmaWVycyk7CkJvb2xlYW4gX1htTWF0
Y2hCdG5FdmVudChYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGV2
ZW50VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBidXR0b24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kaWZpZXJzKTsKQm9vbGVhbiBf
WG1NYXRjaEtleUV2ZW50KFhFdmVudCAqZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZXZlbnRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RpZmllcnMpOwoKCgpYSW1h
Z2UgKl9YbUdldEltYWdlRnJvbUZpbGUoY2hhciAqZmlsZW5hbWUpOwpYSW1hZ2UgKl9YbUdldElt
YWdlQW5kSG90U3BvdEZyb21GaWxlKGNoYXIgKmZpbGVuYW1lLCBpbnQgKmhvdF94LCBpbnQgKmhv
dF95KTsKCgoKZW51bSB7IFhtTEFCRUxfRk9OVExJU1QgPSAxLAogICAgICAgWG1CVVRUT05fRk9O
VExJU1QsCiAgICAgICBYbVRFWFRfRk9OVExJU1QKfTsKCnZvaWQgX1htUmVnaXN0ZXJDb252ZXJ0
ZXJzKHZvaWQpOwp2b2lkIF9YbVdhcm5pbmcoV2lkZ2V0IHcsIGNvbnN0IGNoYXIgKm1lc3NhZ2Us
IC4uLik7CkJvb2xlYW4gX1htU3RyaW5nc0FyZUVxdWFsKGNoYXIgKmluX3N0ciwgY2hhciAqdGV4
dF9zdHIpOwpYbUZvbnRMaXN0IF9YbUdldERlZmF1bHRGb250TGlzdChXaWRnZXQgdywgdW5zaWdu
ZWQgY2hhciBmb250TGlzdFR5cGUpOwpjaGFyICpfWG1Db252ZXJ0Q1NUb1N0cmluZyhYbVN0cmlu
ZyBjcyk7CkJvb2xlYW4gX1htQ3Z0WG1TdHJpbmdUb0NUKFhybVZhbHVlICpmcm9tLCBYcm1WYWx1
ZSAqdG8pOwoKCgp2b2lkIF9YbUJ1aWxkUmVzb3VyY2VzKFhtU3ludGhldGljUmVzb3VyY2UgKip3
Y19yZXNvdXJjZXNfcHRyLAogICAgICAgICAgICAgICAgICAgICAgIGludCAqd2NfbnVtX3Jlc291
cmNlc19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgWG1TeW50aGV0aWNSZXNvdXJjZSAqc2Nf
cmVzb3VyY2VzLAogICAgICAgICAgICAgICAgICAgICAgIGludCBzY19udW1fcmVzb3VyY2VzKTsK
dm9pZCBfWG1Jbml0aWFsaXplU3ludGhldGljUmVzb3VyY2VzKFhtU3ludGhldGljUmVzb3VyY2Ug
KnJlc291cmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1f
cmVzb3VyY2VzKTsKdm9pZCBfWG1QcmltaXRpdmVHZXRWYWx1ZXNIb29rKFdpZGdldCB3LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzKTsKdm9pZCBfWG1HYWRnZXRHZXRWYWx1
ZXNIb29rKFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzKTsKdm9pZCBf
WG1NYW5hZ2VyR2V0VmFsdWVzSG9vayhXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcmdMaXN0IGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwg
Km51bV9hcmdzKTsKdm9pZCBfWG1FeHRHZXRWYWx1ZXNIb29rKFdpZGdldCB3LAogICAgICAgICAg
ICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgQ2Fy
ZGluYWwgKm51bV9hcmdzKTsKdm9pZCBfWG1FeHRJbXBvcnRBcmdzKFdpZGdldCB3LAogICAgICAg
ICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgQ2FyZGlu
YWwgKm51bV9hcmdzKTsKdm9pZCBfWG1QcmltaXRpdmVJbXBvcnRBcmdzKFdpZGdldCB3LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzKTsKdm9pZCBfWG1HYWRnZXRJbXBvcnRBcmdzKFdp
ZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzKTsKdm9pZCBfWG1HYWRnZXRJbXBvcnRT
ZWNvbmRhcnlBcmdzKFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwg
Km51bV9hcmdzKTsKdm9pZCBfWG1NYW5hZ2VySW1wb3J0QXJncyhXaWRnZXQgdywKICAgICAgICAg
ICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Q2FyZGluYWwgKm51bV9hcmdzKTsKaW50IF9YbUNvbnZlcnRVbml0cyhTY3JlZW4gKnNjcmVlbiwK
ICAgICAgICAgICAgICAgICAgICBpbnQgZGltZW5zaW9uLAogICAgICAgICAgICAgICAgICAgIGlu
dCBmcm9tX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgaW50IGZyb21fdmFsLAogICAgICAgICAg
ICAgICAgICAgIGludCB0b190eXBlKTsKWG1JbXBvcnRPcGVyYXRvciBfWG1Ub0hvcml6b250YWxQ
aXhlbHMoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRB
cmdWYWwgKnZhbHVlKTsKWG1JbXBvcnRPcGVyYXRvciBfWG1Ub1ZlcnRpY2FsUGl4ZWxzKFdpZGdl
dCB3aWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRBcmdWYWwgKnZhbHVlKTsK
dm9pZCBfWG1Gcm9tSG9yaXpvbnRhbFBpeGVscyhXaWRnZXQgd2lkZ2V0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WHRBcmdWYWwgKnZhbHVlKTsKdm9pZCBfWG1Gcm9tVmVydGljYWxQaXhlbHMoV2lkZ2V0IHdpZGdl
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWHRBcmdWYWwgKnZhbHVlKTsKdm9pZCBfWG1Tb3J0UmVzb3VyY2VMaXN0KFhy
bVJlc291cmNlICpsaXN0W10sIENhcmRpbmFsIGxlbik7CnZvaWQgX1htVW5pdFR5cGVEZWZhdWx0
KFdpZGdldCB3aWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgIFhybVZhbHVlICp2YWx1ZSk7CnVuc2lnbmVkIGNoYXIgX1htR2V0
VW5pdFR5cGUoV2lkZ2V0IHdpZGdldCk7CgoKCkJvb2xlYW4gX1htSXNFdmVudFVuaXF1ZShYRXZl
bnQgKmV2ZW50KTsKdm9pZCBfWG1SZWNvcmRFdmVudChYRXZlbnQgKmV2ZW50KTsKdHlwZWRlZiBz
dHJ1Y3QgX1htQ29sb3JEYXRhIHsKICAgU2NyZWVuICogc2NyZWVuOwogICBDb2xvcm1hcCBjb2xv
cl9tYXA7CiAgIHVuc2lnbmVkIGNoYXIgYWxsb2NhdGVkOwogICBYQ29sb3IgYmFja2dyb3VuZDsK
ICAgWENvbG9yIGZvcmVncm91bmQ7CiAgIFhDb2xvciB0b3Bfc2hhZG93OwogICBYQ29sb3IgYm90
dG9tX3NoYWRvdzsKICAgWENvbG9yIHNlbGVjdDsKfSBYbUNvbG9yRGF0YTsKCnZvaWQgX1htUmVn
aXN0ZXJQaXhtYXBDb252ZXJ0ZXJzKHZvaWQpOwpjaGFyICpfWG1HZXRCR1BpeG1hcE5hbWUodm9p
ZCk7CnZvaWQgX1htQ2xlYXJCR1BpeG1hcCh2b2lkKTsKdm9pZCBfWG1Gb3JlZ3JvdW5kQ29sb3JE
ZWZhdWx0KFdpZGdldCB3aWRnZXQsIGludCBvZmZzZXQsIFhybVZhbHVlICp2YWx1ZSk7CnZvaWQg
X1htSGlnaGxpZ2h0Q29sb3JEZWZhdWx0KFdpZGdldCB3aWRnZXQsIGludCBvZmZzZXQsIFhybVZh
bHVlICp2YWx1ZSk7CnZvaWQgX1htQmFja2dyb3VuZENvbG9yRGVmYXVsdChXaWRnZXQgd2lkZ2V0
LCBpbnQgb2Zmc2V0LCBYcm1WYWx1ZSAqdmFsdWUpOwp2b2lkIF9YbVRvcFNoYWRvd0NvbG9yRGVm
YXVsdChXaWRnZXQgd2lkZ2V0LCBpbnQgb2Zmc2V0LCBYcm1WYWx1ZSAqdmFsdWUpOwp2b2lkIF9Y
bUJvdHRvbVNoYWRvd0NvbG9yRGVmYXVsdChXaWRnZXQgd2lkZ2V0LCBpbnQgb2Zmc2V0LCBYcm1W
YWx1ZSAqdmFsdWUpOwp2b2lkIF9YbVByaW1pdGl2ZVRvcFNoYWRvd1BpeG1hcERlZmF1bHQoV2lk
Z2V0IHdpZGdldCwgaW50IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFhybVZhbHVlICp2YWx1ZSk7CnZvaWQgX1htTWFuYWdlclRvcFNoYWRvd1BpeG1hcERl
ZmF1bHQoV2lkZ2V0IHdpZGdldCwgaW50IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYcm1WYWx1ZSAqdmFsdWUpOwp2b2lkIF9YbVByaW1pdGl2ZUhpZ2hsaWdo
dFBpeG1hcERlZmF1bHQoV2lkZ2V0IHdpZGdldCwgaW50IG9mZnNldCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFhybVZhbHVlICp2YWx1ZSk7CnZvaWQgX1htTWFuYWdl
ckhpZ2hsaWdodFBpeG1hcERlZmF1bHQoV2lkZ2V0IHdpZGdldCwgaW50IG9mZnNldCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYcm1WYWx1ZSAqdmFsdWUpOwp2b2lkIF9Y
bUdldERlZmF1bHRUaHJlc2hvbGRzRm9yU2NyZWVuKFNjcmVlbiAqc2NyZWVuKTsKU3RyaW5nIF9Y
bUdldERlZmF1bHRCYWNrZ3JvdW5kQ29sb3JTcGVjKFNjcmVlbiAqc2NyZWVuKTsKdm9pZCBfWG1T
ZXREZWZhdWx0QmFja2dyb3VuZENvbG9yU3BlYyhTY3JlZW4gKnNjcmVlbiwgU3RyaW5nIG5ld19j
b2xvcl9zcGVjKTsKWG1Db2xvckRhdGEgKl9YbUdldERlZmF1bHRDb2xvcnMoU2NyZWVuICpzY3Jl
ZW4sIENvbG9ybWFwIGNvbG9yX21hcCk7CkJvb2xlYW4gX1htU2VhcmNoQ29sb3JDYWNoZSh1bnNp
Z25lZCBpbnQgd2hpY2gsIFhtQ29sb3JEYXRhICp2YWx1ZXMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBYbUNvbG9yRGF0YSAqKnJldCk7ClhtQ29sb3JEYXRhICpfWG1BZGRUb0NvbG9yQ2Fj
aGUoWG1Db2xvckRhdGEgKm5ld19yZWMpOwpQaXhlbCBfWG1CbGFja1BpeGVsKFNjcmVlbiAqc2Ny
ZWVuLCBDb2xvcm1hcCBjb2xvcm1hcCwgWENvbG9yIGJsYWNrY29sb3IpOwpQaXhlbCBfWG1XaGl0
ZVBpeGVsKFNjcmVlbiAqc2NyZWVuLCBDb2xvcm1hcCBjb2xvcm1hcCwgWENvbG9yIHdoaXRlY29s
b3IpOwpQaXhlbCBfWG1BY2Nlc3NDb2xvckRhdGEoWG1Db2xvckRhdGEgKmNkLCB1bnNpZ25lZCBj
aGFyIHdoaWNoKTsKWG1Db2xvckRhdGEgKl9YbUdldENvbG9ycyhTY3JlZW4gKnNjcmVlbiwgQ29s
b3JtYXAgY29sb3JfbWFwLCBQaXhlbCBiYWNrZ3JvdW5kKTsKdm9pZCBfWG1TZWxlY3RDb2xvckRl
ZmF1bHQoV2lkZ2V0IHcsIGludCBvZmZzZXQsIFhybVZhbHVlICp2YWwpOwoKCgpYRm9udFN0cnVj
dCAqX1htR2V0Rmlyc3RGb250KFhtRm9udExpc3RFbnRyeSBlbnRyeSk7CkJvb2xlYW4gX1htRm9u
dExpc3RHZXREZWZhdWx0Rm9udChYbUZvbnRMaXN0IGZvbnRsaXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWEZvbnRTdHJ1Y3QgKipmb250X3N0cnVjdCk7CkJvb2xlYW4gX1ht
Rm9udExpc3RTZWFyY2goWG1Gb250TGlzdCBmb250bGlzdCwgWG1TdHJpbmdDaGFyU2V0IGNoYXJz
ZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKmluZHgsIFhGb250U3RydWN0ICoq
Zm9udF9zdHJ1Y3QpOwpCb29sZWFuIF9YbVN0cmluZ0lzWG1TdHJpbmcoWG1TdHJpbmcgc3RyaW5n
KTsKQm9vbGVhbiBfWG1TdHJpbmdJbml0Q29udGV4dChfWG1TdHJpbmdDb250ZXh0ICpjb250ZXh0
LCBfWG1TdHJpbmcgc3RyaW5nKTsKQm9vbGVhbiBfWG1TdHJpbmdHZXROZXh0U2VnbWVudChfWG1T
dHJpbmdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1T
dHJpbmdDaGFyU2V0ICpjaGFyc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFht
U3RyaW5nRGlyZWN0aW9uICpkaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKmNo
YXJfY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQm9vbGVhbiAqc2VwYXJh
dG9yKSA7CnZvaWQgX1htU3RyaW5nRnJlZUNvbnRleHQoX1htU3RyaW5nQ29udGV4dCBjb250ZXh0
KSA7CkRpbWVuc2lvbiBfWG1TdHJpbmdXaWR0aChYbUZvbnRMaXN0IGZvbnRsaXN0LCBfWG1TdHJp
bmcgc3RyaW5nKSA7CkRpbWVuc2lvbiBfWG1TdHJpbmdIZWlnaHQoWG1Gb250TGlzdCBmb250bGlz
dCwgX1htU3RyaW5nIHN0cmluZykgOwp2b2lkIF9YbVN0cmluZ0V4dGVudChYbUZvbnRMaXN0IGZv
bnRsaXN0LCBfWG1TdHJpbmcgc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24g
KndpZHRoLCBEaW1lbnNpb24gKmhlaWdodCkgOwpCb29sZWFuIF9YbVN0cmluZ0VtcHR5KF9YbVN0
cmluZyBzdHJpbmcpOwp2b2lkIF9YbVN0cmluZ0RyYXcoRGlzcGxheSAqZCwgV2luZG93IHcsIFht
Rm9udExpc3QgZm9udGxpc3QsIF9YbVN0cmluZyBzdHJpbmcsCiAgICAgICAgICAgICAgICAgICBH
QyBnYywgUG9zaXRpb24geCwgUG9zaXRpb24geSwgRGltZW5zaW9uIHdpZHRoLAogICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciBhbGlnbiwgdW5zaWduZWQgY2hhciBsYXlfZGlyLAogICAg
ICAgICAgICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCk7CnZvaWQgX1htU3RyaW5nRHJhd0ltYWdl
KERpc3BsYXkgKmQsIFdpbmRvdyB3LAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0
IGZvbnRsaXN0LCBfWG1TdHJpbmcgc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICBHQyBn
YywgUG9zaXRpb24geCwgUG9zaXRpb24geSwgRGltZW5zaW9uIHdpZHRoLAogICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFsaWduLCB1bnNpZ25lZCBjaGFyIGxheV9kaXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgIFhSZWN0YW5nbGUgKmNsaXApOwp2b2lkIF9YbVN0cmluZ0Ry
YXdVbmRlcmxpbmUoRGlzcGxheSAqZCwgV2luZG93IHcsIFhtRm9udExpc3QgZiwgX1htU3RyaW5n
IHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQyBnYywgUG9zaXRpb24geCwgUG9zaXRp
b24geSwgRGltZW5zaW9uIHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciBhbGlnbiwgdW5zaWduZWQgY2hhciBsYXlfZGlyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCwgX1htU3RyaW5nIHUpOwp2b2lkIF9YbVN0cmluZ0Ry
YXdNbmVtb25pYyhEaXNwbGF5ICpkLCBXaW5kb3cgdywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWG1Gb250TGlzdCBmb250bGlzdCwgX1htU3RyaW5nIHN0cmluZywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MgZ2MsIFBvc2l0aW9uIHgsIFBvc2l0aW9uIHksIERpbWVuc2lvbiB3aWR0
aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhbGlnbm1lbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGF5b3V0X2RpcmVjdGlvbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3RyaW5nIG1uZW1vbmljLCBYbVN0cmluZ0NoYXJTZXQgY2hhcnNldCk7
Cl9YbVN0cmluZyBfWG1TdHJpbmdDcmVhdGUoWG1TdHJpbmcgY3MpOwp2b2lkIF9YbVN0cmluZ0Zy
ZWUoX1htU3RyaW5nIHN0cmluZyk7CmNoYXIgKl9YbVN0cmluZ0dldEN1cnJlbnRDaGFyc2V0KHZv
aWQpIDsKY2hhciAqX1htQ2hhcnNldENhbm9uaWNhbGl6ZShTdHJpbmcgY2hhcnNldCk7Cl9YbVN0
cmluZyBfWG1TdHJpbmdDb3B5KF9YbVN0cmluZyBzdHJpbmcpOwpCb29sZWFuIF9YbVN0cmluZ0J5
dGVDb21wYXJlKF9YbVN0cmluZyBhLCBfWG1TdHJpbmcgYik7CkJvb2xlYW4gX1htU3RyaW5nSGFz
U3Vic3RyaW5nKF9YbVN0cmluZyBzdHJpbmcsIF9YbVN0cmluZyBzdWJzdHJpbmcpOwpYbVN0cmlu
ZyBfWG1TdHJpbmdDcmVhdGVFeHRlcm5hbChYbUZvbnRMaXN0IGZvbnRsaXN0LCBfWG1TdHJpbmcg
Y3MpOwpEaW1lbnNpb24gX1htU3RyaW5nQmFzZWxpbmUoWG1Gb250TGlzdCBmb250bGlzdCwgX1ht
U3RyaW5nIHN0cmluZyk7CmludCBfWG1TdHJpbmdMaW5lQ291bnQoX1htU3RyaW5nIHN0cmluZyk7
CmNoYXIgKiBfWG1TdHJpbmdHZXRUZXh0Q29uY2F0KFhtU3RyaW5nIHN0cmluZyk7CkJvb2xlYW4g
X1htU3RyaW5nSXNDdXJyZW50Q2hhcnNldChYbVN0cmluZ0NoYXJTZXQgYyk7CkJvb2xlYW4gX1ht
U3RyaW5nU2luZ2xlU2VnbWVudChYbVN0cmluZyBzdHIsIGNoYXIgKipwVGV4dE91dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ2hhclNldCAqcENoYXJzZXRPdXQpOwp2
b2lkIF9YbVN0cmluZ1VwZGF0ZVdNU2hlbGxUaXRsZShYbVN0cmluZyB4bXN0ciwgV2lkZ2V0IHNo
ZWxsKTsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1htRm9jdXNNb3ZlZENhbGxiYWNrU3RydWN0IHsK
ICAgIGludCByZWFzb247CiAgICBYRXZlbnQgKmV2ZW50OwogICAgQm9vbGVhbiBjb250OwogICAg
V2lkZ2V0IG9sZF9mb2N1czsKICAgIFdpZGdldCBuZXdfZm9jdXM7CiAgICB1bnNpZ25lZCBjaGFy
IGZvY3VzX3BvbGljeTsKfSBYbUZvY3VzTW92ZWRDYWxsYmFja1N0cnVjdCwgKlhtRm9jdXNNb3Zl
ZENhbGxiYWNrOwoKdHlwZWRlZiBzdHJ1Y3QgX1htRm9jdXNEYXRhUmVjICpYbUZvY3VzRGF0YTsK
ClhtRm9jdXNEYXRhIF9YbUNyZWF0ZUZvY3VzRGF0YSh2b2lkKTsKdm9pZCBfWG1EZXN0cm95Rm9j
dXNEYXRhKFhtRm9jdXNEYXRhIGZvY3VzRGF0YSk7CnZvaWQgX1htU2V0QWN0aXZlVGFiR3JvdXAo
WG1Gb2N1c0RhdGEgZm9jdXNEYXRhLCBXaWRnZXQgdGFiR3JvdXApOwpXaWRnZXQgX1htR2V0QWN0
aXZlSXRlbShXaWRnZXQgdyk7CnZvaWQgX1htTmF2aWdJbml0aWFsaXplKFdpZGdldCByZXF1ZXN0
LCBXaWRnZXQgbmV3X3dpZCwKICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLCBD
YXJkaW5hbCAqbnVtX2FyZ3MpOwpCb29sZWFuIF9YbU5hdmlnU2V0VmFsdWVzKFdpZGdldCBjdXJy
ZW50LCBXaWRnZXQgcmVxdWVzdCwgV2lkZ2V0IG5ld193aWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJnTGlzdCBhcmdzLCBDYXJkaW5hbCAqbnVtX2FyZ3MpOwp2b2lkIF9YbU5hdmlnQ2hh
bmdlTWFuYWdlZChXaWRnZXQgd2lkKTsKdm9pZCBfWG1OYXZpZ1Jlc2l6ZShXaWRnZXQgd2lkKTsK
dm9pZCBfWG1WYWxpZGF0ZUZvY3VzKFdpZGdldCB3aWQpOwp2b2lkIF9YbU5hdmlnRGVzdHJveShX
aWRnZXQgd2lkKTsKQm9vbGVhbiBfWG1DYWxsRm9jdXNNb3ZlZChXaWRnZXQgb2xkLCBXaWRnZXQg
bmV3X3dpZCwgWEV2ZW50ICpldmVudCk7CkJvb2xlYW4gX1htTWdyVHJhdmVyc2FsKFdpZGdldCB3
aWQsIFhtVHJhdmVyc2FsRGlyZWN0aW9uIGRpcmVjdGlvbik7CnZvaWQgX1htQ2xlYXJGb2N1c1Bh
dGgoV2lkZ2V0IHdpZCk7CkJvb2xlYW4gX1htRm9jdXNJc0hlcmUoV2lkZ2V0IHcpOwp2b2lkIF9Y
bVByb2Nlc3NUcmF2ZXJzYWwoV2lkZ2V0IHcsIFhtVHJhdmVyc2FsRGlyZWN0aW9uIGRpciwgQm9v
bGVhbiBjaGVjayk7CnVuc2lnbmVkIGNoYXIgX1htR2V0Rm9jdXNQb2xpY3koV2lkZ2V0IHcpOwpX
aWRnZXQgX1htRmluZFRvcE1vc3RTaGVsbChXaWRnZXQgdyk7CnZvaWQgX1htRm9jdXNNb2RlbENo
YW5nZWQoV2lkZ2V0IHdpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgY2xp
ZW50X2RhdGEsIFh0UG9pbnRlciBjYWxsX2RhdGEpOwpCb29sZWFuIF9YbUdyYWJUaGVGb2N1cyhX
aWRnZXQgdywgWEV2ZW50ICpldmVudCk7ClhtRm9jdXNEYXRhIF9YbUdldEZvY3VzRGF0YShXaWRn
ZXQgd2lkKTsKQm9vbGVhbiBfWG1DcmVhdGVWaXNpYmlsaXR5UmVjdChXaWRnZXQgdywgWFJlY3Rh
bmdsZSAqcmVjdFB0cik7CnZvaWQgX1htU2V0UmVjdChYUmVjdGFuZ2xlICpyZWN0LCBXaWRnZXQg
dyk7CmludCBfWG1JbnRlcnNlY3RSZWN0KFhSZWN0YW5nbGUgKnNyY1JlY3RBLCBXaWRnZXQgd2lk
Z2V0LCBYUmVjdGFuZ2xlICpkc3RSZWN0KTsKaW50IF9YbUVtcHR5UmVjdChYUmVjdGFuZ2xlICpy
KTsKdm9pZCBfWG1DbGVhclJlY3QoWFJlY3RhbmdsZSAqcik7CkJvb2xlYW4gX1htSXNOYXZpZ2Fi
bGUoV2lkZ2V0IHdpZCk7CnZvaWQgX1htV2lkZ2V0Rm9jdXNDaGFuZ2UoV2lkZ2V0IHdpZCwgWG1G
b2N1c0NoYW5nZSBjaGFuZ2UpOwpXaWRnZXQgX1htTmF2aWdhdGUoV2lkZ2V0IHdpZCwgWG1UcmF2
ZXJzYWxEaXJlY3Rpb24gZGlyZWN0aW9uKTsKV2lkZ2V0IF9YbUZpbmROZXh0VGFiR3JvdXAoV2lk
Z2V0IHdpZCk7CldpZGdldCBfWG1GaW5kUHJldlRhYkdyb3VwKFdpZGdldCB3aWQpOwp2b2lkIF9Y
bVNldEluaXRpYWxPZlRhYkdyb3VwKFdpZGdldCB0YWJfZ3JvdXAsIFdpZGdldCBpbml0X2ZvY3Vz
KTsKdm9pZCBfWG1SZXNldFRyYXZHcmFwaChXaWRnZXQgd2lkKTsKQm9vbGVhbiBfWG1Gb2N1c0lz
SW5TaGVsbChXaWRnZXQgd2lkKTsKQm9vbGVhbiBfWG1TaGVsbElzRXhjbHVzaXZlKFdpZGdldCB3
aWQpOwpXaWRnZXQgX1htR2V0Rmlyc3RGb2N1cyhXaWRnZXQgd2lkKTsKCgoKdm9pZCBfWG1UcmFj
a1NoZWxsRm9jdXMoV2lkZ2V0IHdpZCwKICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVy
IGNsaWVudF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50LAogICAg
ICAgICAgICAgICAgICAgICAgICBCb29sZWFuICpkb250U3dhbGxvdyk7Cgp2b2lkIF9YbU1hbmFn
ZXJFbnRlcihXaWRnZXQgd2lkLAogICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50X2lu
LAogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywKICAgICAgICAgICAgICAgICAg
ICAgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwoKdm9pZCBfWG1NYW5hZ2VyTGVhdmUoV2lkZ2V0IHdp
ZCwKICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudF9pbiwKICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nICpwYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsICpudW1f
cGFyYW1zKTsKCnZvaWQgX1htTWFuYWdlckZvY3VzSW5JbnRlcm5hbChXaWRnZXQgd2lkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwoKdm9pZCBfWG1NYW5hZ2VyRm9jdXNJbihXaWRn
ZXQgbXcsCiAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAg
ICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5h
bCAqbnVtX3BhcmFtcyk7Cgp2b2lkIF9YbU1hbmFnZXJGb2N1c091dChXaWRnZXQgd2lkLAogICAg
ICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAg
ICBTdHJpbmcgKnBhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9w
YXJhbXMpOwoKdm9pZCBfWG1NYW5hZ2VyVW5tYXAoV2lkZ2V0IG13LAogICAgICAgICAgICAgICAg
ICAgICBYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywK
ICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwoKdm9pZCBfWG1Qcmlt
aXRpdmVFbnRlcihXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50
LAogICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLAogICAgICAgICAgICAgICAg
ICAgICAgIENhcmRpbmFsICpudW1fcGFyYW1zKTsKCnZvaWQgX1htUHJpbWl0aXZlTGVhdmUoV2lk
Z2V0IHcsCiAgICAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAg
ICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5h
bCAqbnVtX3BhcmFtcyk7Cgp2b2lkIF9YbVByaW1pdGl2ZUZvY3VzT3V0KFdpZGdldCB3LAogICAg
ICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nICpwYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwg
Km51bV9wYXJhbXMpOwoKdm9pZCBfWG1QcmltaXRpdmVGb2N1c0luKFdpZGdldCB3LAogICAgICAg
ICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
IFN0cmluZyAqcGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9w
YXJhbXMpOwoKdm9pZCBfWG1QcmltaXRpdmVVbm1hcChXaWRnZXQgdywKICAgICAgICAgICAgICAg
ICAgICAgICBYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAqcGFy
YW1zLAogICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsICpudW1fcGFyYW1zKTsKCnZvaWQg
X1htRW50ZXJHYWRnZXQoV2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAgICAgWEV2ZW50ICpldmVu
dCwKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywKICAgICAgICAgICAgICAgICAg
ICBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7Cgp2b2lkIF9YbUxlYXZlR2FkZ2V0KFdpZGdldCB3LAog
ICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nICpwYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwoK
dm9pZCBfWG1Gb2N1c0luR2FkZ2V0KFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgWEV2
ZW50ICpldmVudCwKICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLAogICAgICAg
ICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwoKdm9pZCBfWG1Gb2N1c091dEdh
ZGdldChXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50LAogICAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLAogICAgICAgICAgICAgICAgICAgICAg
IENhcmRpbmFsICpudW1fcGFyYW1zKTsKCgoKdm9pZCBfWG1HZW9BZGp1c3RCb3hlcyhYbUdlb01h
dHJpeCBnZW9TcGVjKTsKdm9pZCBfWG1HZW9BcnJhbmdlQm94ZXMoWG1HZW9NYXRyaXggZ2VvU3Bl
YywgUG9zaXRpb24geCwgUG9zaXRpb24geSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERpbWVuc2lvbiAqcFcsIERpbWVuc2lvbiAqcEgpOwpEaW1lbnNpb24gX1htR2VvQm94ZXNTYW1l
V2lkdGgoWG1LaWRHZW9tZXRyeSByb3dQdHIsIERpbWVuc2lvbiB3aWR0aCk7CkRpbWVuc2lvbiBf
WG1HZW9Cb3hlc1NhbWVIZWlnaHQoWG1LaWRHZW9tZXRyeSByb3dQdHIsIERpbWVuc2lvbiBoZWln
aHQpOwp2b2lkIF9YbUdlb0NsZWFyUmVjdE9iakFyZWFzKFJlY3RPYmogciwgWFdpbmRvd0NoYW5n
ZXMgKm9sZCk7CmludCBfWG1HZW9Db3VudF9raWRzKENvbXBvc2l0ZVdpZGdldCBjKTsKdm9pZCBf
WG1HZW9HZXREaW1lbnNpb25zKFhtR2VvTWF0cml4IGdlb1NwZWMpOwpYbUtpZEdlb21ldHJ5IF9Y
bUdldEtpZEdlbyhXaWRnZXQgd2lkLCBXaWRnZXQgaW5zdGlnYXRvciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWHRXaWRnZXRHZW9tZXRyeSAqcmVxdWVzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHVuaWZvcm1fYm9yZGVyLCBEaW1lbnNpb24gYm9yZGVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgdW5pZm9ybV93aWR0aF9tYXJnaW5zLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdW5pZm9ybV9oZWlnaHRfbWFyZ2lucywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2lkZ2V0IGhlbHAsIGludCBnZW9fdHlwZSk7CnZvaWQgX1htR2VvTG9hZFZh
bHVlcyhXaWRnZXQgd2lkLCBpbnQgZ2VvVHlwZSwgV2lkZ2V0IGluc3RpZ2F0b3IsCiAgICAgICAg
ICAgICAgICAgICAgICBYdFdpZGdldEdlb21ldHJ5ICpyZXF1ZXN0LAogICAgICAgICAgICAgICAg
ICAgICAgWHRXaWRnZXRHZW9tZXRyeSAqZ2VvUmVzdWx0KTsKWG1HZW9NYXRyaXggX1htR2VvTWF0
cml4QWxsb2ModW5zaWduZWQgaW50IG51bVJvd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBudW1Cb3hlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGV4dFNpemUpOwp2b2lkIF9YbUdlb01hdHJpeEZyZWUoWG1HZW9NYXRyaXgg
Z2VvX3NwZWMpOwp2b2lkIF9YbUdlb01hdHJpeEdldChYbUdlb01hdHJpeCBnZW9TcGVjLCBpbnQg
Z2VvVHlwZSk7CnZvaWQgX1htR2VvTWF0cml4U2V0KFhtR2VvTWF0cml4IGdlb1NwZWMpOwpCb29s
ZWFuIF9YbUdlb1JlcGx5WWVzKFdpZGdldCB3aWQsIFh0V2lkZ2V0R2VvbWV0cnkgKmRlc2lyZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRXaWRnZXRHZW9tZXRyeSAqcmVz
cG9uc2UpOwpCb29sZWFuIF9YbUdlb1NldHVwS2lkKFhtS2lkR2VvbWV0cnkgZ2VvLCBXaWRnZXQg
a2lkV2lkKTsKQm9vbGVhbiBfWG1HZW9tZXRyeUVxdWFsKFdpZGdldCB3aWQsIFh0V2lkZ2V0R2Vv
bWV0cnkgKmdlb0EsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdl
dEdlb21ldHJ5ICpnZW9CKTsKdm9pZCBfWG1IYW5kbGVTaXplVXBkYXRlKFdpZGdldCB3aWQsIHVu
c2lnbmVkIGNoYXIgcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgWG1HZW9DcmVhdGVQ
cm9jIGNyZWF0ZU1hdHJpeCk7Clh0R2VvbWV0cnlSZXN1bHQgX1htSGFuZGxlUXVlcnlHZW9tZXRy
eShXaWRnZXQgd2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRX
aWRnZXRHZW9tZXRyeSAqaW50ZW5kZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBYdFdpZGdldEdlb21ldHJ5ICpkZXNpcmVkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBwb2xpY3ksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBYbUdlb0NyZWF0ZVByb2MgY3JlYXRlTWF0cml4KTsKWHRH
ZW9tZXRyeVJlc3VsdCBfWG1IYW5kbGVHZW9tZXRyeU1hbmFnZXIoV2lkZ2V0IHdpZCwgV2lkZ2V0
IGluc3RpZ2F0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0
V2lkZ2V0R2VvbWV0cnkgKmRlc2lyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFh0V2lkZ2V0R2VvbWV0cnkgKmFsbG93ZWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcG9saWN5LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbUdlb01hdHJpeCAqY2FjaGVQdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtR2VvQ3JlYXRlUHJvYyBjcmVh
dGVNYXRyaXgpOwpYdEdlb21ldHJ5UmVzdWx0IF9YbU1ha2VHZW9tZXRyeVJlcXVlc3QoV2lkZ2V0
IHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdldEdlb21l
dHJ5ICpnZW9tKTsKdm9pZCBfWG1NZW51QmFyRml4KFhtR2VvTWF0cml4IGdlb1NwZWMsIGludCBh
Y3Rpb24sCiAgICAgICAgICAgICAgICAgICBYbUdlb01ham9yTGF5b3V0IGxheW91dFB0ciwgWG1L
aWRHZW9tZXRyeSByb3dQdHIpOwp2b2lkIF9YbVNlcGFyYXRvckZpeChYbUdlb01hdHJpeCBnZW9T
cGVjLCBpbnQgYWN0aW9uLAogICAgICAgICAgICAgICAgICAgICBYbUdlb01ham9yTGF5b3V0IGxh
eW91dFB0ciwgWG1LaWRHZW9tZXRyeSByb3dQdHIpOwp2b2lkIF9YbVNldEtpZEdlbyhYbUtpZEdl
b21ldHJ5IGtnLCBXaWRnZXQgaW5zdGlnYXRvcik7CgoKWG1SZWdpb24gX1htUmVnaW9uQ3JlYXRl
KHZvaWQpOwpYbVJlZ2lvbiBfWG1SZWdpb25DcmVhdGVTaXplKGxvbmcgc2l6ZSk7CnZvaWQgX1ht
UmVnaW9uQ29tcHV0ZUV4dGVudHMoWG1SZWdpb24gcik7CnZvaWQgX1htUmVnaW9uR2V0RXh0ZW50
cyhYbVJlZ2lvbiByLCBYUmVjdGFuZ2xlICpyZWN0KTsKdm9pZCBfWG1SZWdpb25VbmlvblJlY3RX
aXRoUmVnaW9uKFhSZWN0YW5nbGUgKnJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYbVJlZ2lvbiBzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY
bVJlZ2lvbiBkZXN0KTsKdm9pZCBfWG1SZWdpb25JbnRlcnNlY3RSZWN0V2l0aFJlZ2lvbihYUmVj
dGFuZ2xlICpyZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtUmVn
aW9uIHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbVJlZ2lv
biBkZXN0KTsKbG9uZyBfWG1SZWdpb25HZXROdW1SZWN0YW5nbGVzKFhtUmVnaW9uIHIpOwp2b2lk
IF9YbVJlZ2lvbkdldFJlY3RhbmdsZXMoWG1SZWdpb24gciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFhSZWN0YW5nbGUgKipyZWN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
bmcgKm5yZWN0cyk7CnZvaWQgX1htUmVnaW9uU2V0R0NSZWdpb24oRGlzcGxheSAqZHB5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDIGdjLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCB4X29yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeV9vcmlnaW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgWG1SZWdpb24gcik7CnZvaWQgX1htUmVnaW9uRGVzdHJveShY
bVJlZ2lvbiByKTsKdm9pZCBfWG1SZWdpb25PZmZzZXQoWG1SZWdpb24gcFJlZ2lvbiwgaW50IHgs
IGludCB5KTsKdm9pZCBfWG1SZWdpb25JbnRlcnNlY3QoWG1SZWdpb24gcmVnMSwgWG1SZWdpb24g
cmVnMiwgWG1SZWdpb24gbmV3UmVnKTsKdm9pZCBfWG1SZWdpb25VbmlvbihYbVJlZ2lvbiByZWcx
LCBYbVJlZ2lvbiByZWcyLCBYbVJlZ2lvbiBuZXdSZWcpOwp2b2lkIF9YbVJlZ2lvblN1YnRyYWN0
KFhtUmVnaW9uIHJlZ00sIFhtUmVnaW9uIHJlZ1MsIFhtUmVnaW9uIHJlZ0QpOwpCb29sZWFuIF9Y
bVJlZ2lvbklzRW1wdHkoWG1SZWdpb24gcik7CkJvb2xlYW4gX1htUmVnaW9uRXF1YWwoWG1SZWdp
b24gcjEsIFhtUmVnaW9uIHIyKTsKQm9vbGVhbiBfWG1SZWdpb25Qb2ludEluUmVnaW9uKFhtUmVn
aW9uIHBSZWdpb24sIGludCB4LCBpbnQgeSk7CnZvaWQgX1htUmVnaW9uQ2xlYXIoWG1SZWdpb24g
ciApOwp2b2lkIF9YbVJlZ2lvblNocmluayhYbVJlZ2lvbiByLCBpbnQgZHgsIGludCBkeSk7CnZv
aWQgX1htUmVnaW9uRHJhd1NoYWRvdyhEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAg
ICAgICAgICAgRHJhd2FibGUgZCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdDIHRvcF9nYywK
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDIGJvdHRvbV9nYywKICAgICAgICAgICAgICAgICAg
ICAgICAgIFhtUmVnaW9uIHJlZ2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIERpbWVuc2lv
biBib3JkZXJfdGhpY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gc2hhZG93
X3RoaWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNoYWRvd190eXBl
KTsKCgoKdm9pZCBfWG1TZXREZXN0aW5hdGlvbihEaXNwbGF5ICpkcHksIFdpZGdldCB3KTsKCgoK
dm9pZCBfWG1JbUNoYW5nZU1hbmFnZWQoV2lkZ2V0IHZ3KTsKdm9pZCBfWG1JbVJlYWxpemUoV2lk
Z2V0IHZ3KTsKdm9pZCBfWG1JbVJlc2l6ZShXaWRnZXQgdncpOwp2b2lkIF9YbUltUmVkaXNwbGF5
KFdpZGdldCB2dyk7CgoKCnZvaWQgX1htSW5pdEF0b21QYWlycyhEaXNwbGF5ICpkaXNwbGF5KTsK
dm9pZCBfWG1Jbml0VGFyZ2V0c1RhYmxlKERpc3BsYXkgKmRpc3BsYXkpOwpDYXJkaW5hbCBfWG1J
bmRleFRvVGFyZ2V0cyhXaWRnZXQgc2hlbGwsIENhcmRpbmFsIHRfaW5kZXgsIEF0b20gKip0YXJn
ZXRzUnRuKTsKQ2FyZGluYWwgX1htVGFyZ2V0c1RvSW5kZXgoV2lkZ2V0IHNoZWxsLCBBdG9tICp0
YXJnZXRzLCBDYXJkaW5hbCBudW1UYXJnZXRzKTsKQXRvbSBfWG1BbGxvY01vdGlmQXRvbShXaWRn
ZXQgc2hlbGwsIFRpbWUgdGltZSk7CnZvaWQgX1htRnJlZU1vdGlmQXRvbShXaWRnZXQgc2hlbGws
IEF0b20gYXRvbSk7CnZvaWQgX1htRGVzdHJveU1vdGlmV2luZG93KERpc3BsYXkgKmRweSk7Cldp
bmRvdyBfWG1HZXREcmFnUHJveHlXaW5kb3coRGlzcGxheSAqZGlzcGxheSk7CgoKCnZvaWQgX1ht
RHJhZ092ZXJIaWRlKFdpZGdldCB3LCBQb3NpdGlvbiBjbGlwT3JpZ2luWCwgUG9zaXRpb24gY2xp
cE9yaWdpblksCiAgICAgICAgICAgICAgICAgICAgIFhtUmVnaW9uIGNsaXBSZWdpb24pOwp2b2lk
IF9YbURyYWdPdmVyU2hvdyhXaWRnZXQgdywgUG9zaXRpb24gY2xpcE9yaWdpblgsIFBvc2l0aW9u
IGNsaXBPcmlnaW5ZLAogICAgICAgICAgICAgICAgICAgICBYbVJlZ2lvbiBjbGlwUmVnaW9uKTsK
dm9pZCBfWG1EcmFnT3Zlck1vdmUoV2lkZ2V0IHcsIFBvc2l0aW9uIHgsIFBvc2l0aW9uIHkpOwp2
b2lkIF9YbURyYWdPdmVyQ2hhbmdlKFdpZGdldCB3LCB1bnNpZ25lZCBjaGFyIGRyb3BTaXRlU3Rh
dHVzKTsKdm9pZCBfWG1EcmFnT3ZlckZpbmlzaChXaWRnZXQgdywgdW5zaWduZWQgY2hhciBjb21w
bGV0aW9uU3RhdHVzKTsKQ3Vyc29yIF9YbURyYWdPdmVyR2V0QWN0aXZlQ3Vyc29yKCBXaWRnZXQg
dyk7CnZvaWQgX1htRHJhZ092ZXJTZXRJbml0aWFsUG9zaXRpb24oV2lkZ2V0IHcsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24gaW5pdGlhbFgsIFBvc2l0aW9uIGlu
aXRpYWxZKTsKCgoKdm9pZCBfWG1EcmFnVW5kZXJBbmltYXRpb24oV2lkZ2V0IHcsIFh0UG9pbnRl
ciBjbGllbnREYXRhLCBYdFBvaW50ZXIgY2FsbERhdGEpOwp0eXBlZGVmIHN0cnVjdCB7CiAgICBY
dFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFNoZWxsQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3Qgewog
ICAgWHRQb2ludGVyIG5leHRfZXh0ZW5zaW9uOwogICAgWHJtUXVhcmsgcmVjb3JkX3R5cGU7CiAg
ICBsb25nIHZlcnNpb247CiAgICBDYXJkaW5hbCByZWNvcmRfc2l6ZTsKICAgIFh0R2VvbWV0cnlI
YW5kbGVyIHJvb3RfZ2VvbWV0cnlfbWFuYWdlcjsKfSBTaGVsbENsYXNzRXh0ZW5zaW9uUmVjLCAq
U2hlbGxDbGFzc0V4dGVuc2lvbjsKCgoKCnR5cGVkZWYgc3RydWN0IF9TaGVsbENsYXNzUmVjIHsK
ICAgICAgICBDb3JlQ2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgICAgICAgQ29tcG9zaXRlQ2xhc3NQ
YXJ0IGNvbXBvc2l0ZV9jbGFzczsKICAgICAgICBTaGVsbENsYXNzUGFydCBzaGVsbF9jbGFzczsK
fSBTaGVsbENsYXNzUmVjOwoKZXh0ZXJuIFNoZWxsQ2xhc3NSZWMgc2hlbGxDbGFzc1JlYzsKCgoK
dHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGNoYXIgKmdlb21ldHJ5OwogICAgICAgIFh0Q3JlYXRl
UG9wdXBDaGlsZFByb2MgY3JlYXRlX3BvcHVwX2NoaWxkX3Byb2M7CiAgICAgICAgWHRHcmFiS2lu
ZCBncmFiX2tpbmQ7CiAgICAgICAgQm9vbGVhbiBzcHJpbmdfbG9hZGVkOwogICAgICAgIEJvb2xl
YW4gcG9wcGVkX3VwOwogICAgICAgIEJvb2xlYW4gYWxsb3dfc2hlbGxfcmVzaXplOwogICAgICAg
IEJvb2xlYW4gY2xpZW50X3NwZWNpZmllZDsKCgoKCiAgICAgICAgQm9vbGVhbiBzYXZlX3VuZGVy
OwogICAgICAgIEJvb2xlYW4gb3ZlcnJpZGVfcmVkaXJlY3Q7CgogICAgICAgIFh0Q2FsbGJhY2tM
aXN0IHBvcHVwX2NhbGxiYWNrOwogICAgICAgIFh0Q2FsbGJhY2tMaXN0IHBvcGRvd25fY2FsbGJh
Y2s7CiAgICAgICAgVmlzdWFsKiB2aXN1YWw7Cn0gU2hlbGxQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgICAgIENvcmVQYXJ0IGNvcmU7CiAgICAgICAgQ29tcG9zaXRlUGFydCBjb21wb3NpdGU7
CiAgICAgICAgU2hlbGxQYXJ0IHNoZWxsOwp9IFNoZWxsUmVjLCAqU2hlbGxXaWRnZXQ7CnR5cGVk
ZWYgc3RydWN0IHsKICAgIFh0UG9pbnRlciBleHRlbnNpb247Cn0gT3ZlcnJpZGVTaGVsbENsYXNz
UGFydDsKCnR5cGVkZWYgc3RydWN0IF9PdmVycmlkZVNoZWxsQ2xhc3NSZWMgewogICAgICAgIENv
cmVDbGFzc1BhcnQgY29yZV9jbGFzczsKICAgICAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9z
aXRlX2NsYXNzOwogICAgICAgIFNoZWxsQ2xhc3NQYXJ0IHNoZWxsX2NsYXNzOwogICAgICAgIE92
ZXJyaWRlU2hlbGxDbGFzc1BhcnQgb3ZlcnJpZGVfc2hlbGxfY2xhc3M7Cn0gT3ZlcnJpZGVTaGVs
bENsYXNzUmVjOwoKZXh0ZXJuIE92ZXJyaWRlU2hlbGxDbGFzc1JlYyBvdmVycmlkZVNoZWxsQ2xh
c3NSZWM7CgoKCnR5cGVkZWYgc3RydWN0IHtpbnQgZnJhYmpvdXM7fSBPdmVycmlkZVNoZWxsUGFy
dDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBDb3JlUGFydCBjb3JlOwogICAgICAgIENvbXBv
c2l0ZVBhcnQgY29tcG9zaXRlOwogICAgICAgIFNoZWxsUGFydCBzaGVsbDsKICAgICAgICBPdmVy
cmlkZVNoZWxsUGFydCBvdmVycmlkZTsKfSBPdmVycmlkZVNoZWxsUmVjLCAqT3ZlcnJpZGVTaGVs
bFdpZGdldDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBXTVNo
ZWxsQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1dNU2hlbGxDbGFzc1JlYyB7CiAgICAgICAg
Q29yZUNsYXNzUGFydCBjb3JlX2NsYXNzOwogICAgICAgIENvbXBvc2l0ZUNsYXNzUGFydCBjb21w
b3NpdGVfY2xhc3M7CiAgICAgICAgU2hlbGxDbGFzc1BhcnQgc2hlbGxfY2xhc3M7CiAgICAgICAg
V01TaGVsbENsYXNzUGFydCB3bV9zaGVsbF9jbGFzczsKfSBXTVNoZWxsQ2xhc3NSZWM7CgpleHRl
cm4gV01TaGVsbENsYXNzUmVjIHdtU2hlbGxDbGFzc1JlYzsKCgoKdHlwZWRlZiBzdHJ1Y3Qgewog
ICAgICAgIGNoYXIgKnRpdGxlOwogICAgICAgIGludCB3bV90aW1lb3V0OwogICAgICAgIEJvb2xl
YW4gd2FpdF9mb3Jfd207CiAgICAgICAgQm9vbGVhbiB0cmFuc2llbnQ7CiAgICAgICAgQm9vbGVh
biB1cmdlbmN5OwogICAgICAgIFdpZGdldCBjbGllbnRfbGVhZGVyOwogICAgICAgIFN0cmluZyB3
aW5kb3dfcm9sZTsKICAgICAgICBzdHJ1Y3QgX09sZFhTaXplSGludHMgewogICAgICAgICAgICBs
b25nIGZsYWdzOwogICAgICAgICAgICBpbnQgeCwgeTsKICAgICAgICAgICAgaW50IHdpZHRoLCBo
ZWlnaHQ7CiAgICAgICAgICAgIGludCBtaW5fd2lkdGgsIG1pbl9oZWlnaHQ7CiAgICAgICAgICAg
IGludCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7CiAgICAgICAgICAgIGludCB3aWR0aF9pbmMsIGhl
aWdodF9pbmM7CiAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgaW50IHg7
CiAgICAgICAgICAgICAgICAgICAgaW50IHk7CiAgICAgICAgICAgIH0gbWluX2FzcGVjdCwgbWF4
X2FzcGVjdDsKICAgICAgICB9IHNpemVfaGludHM7CiAgICAgICAgWFdNSGludHMgd21faGludHM7
CiAgICAgICAgaW50IGJhc2Vfd2lkdGgsIGJhc2VfaGVpZ2h0OwogICAgICAgIGludCB3aW5fZ3Jh
dml0eTsKICAgICAgICBBdG9tIHRpdGxlX2VuY29kaW5nOwp9IFdNU2hlbGxQYXJ0OwoKdHlwZWRl
ZiBzdHJ1Y3QgewogICAgICAgIENvcmVQYXJ0IGNvcmU7CiAgICAgICAgQ29tcG9zaXRlUGFydCBj
b21wb3NpdGU7CiAgICAgICAgU2hlbGxQYXJ0IHNoZWxsOwogICAgICAgIFdNU2hlbGxQYXJ0IHdt
Owp9IFdNU2hlbGxSZWMsICpXTVNoZWxsV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfVmVuZG9yU2hl
bGxDbGFzc1JlYyAqVmVuZG9yU2hlbGxXaWRnZXRDbGFzczsKCmV4dGVybiBXaWRnZXRDbGFzcyB2
ZW5kb3JTaGVsbFdpZGdldENsYXNzOwoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYdFBvaW50
ZXIgZXh0ZW5zaW9uOwp9IFZlbmRvclNoZWxsQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1Zl
bmRvclNoZWxsQ2xhc3NSZWMgewogICAgICAgIENvcmVDbGFzc1BhcnQgY29yZV9jbGFzczsKICAg
ICAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9zaXRlX2NsYXNzOwogICAgICAgIFNoZWxsQ2xh
c3NQYXJ0IHNoZWxsX2NsYXNzOwogICAgICAgIFdNU2hlbGxDbGFzc1BhcnQgd21fc2hlbGxfY2xh
c3M7CiAgICAgICAgVmVuZG9yU2hlbGxDbGFzc1BhcnQgdmVuZG9yX3NoZWxsX2NsYXNzOwp9IFZl
bmRvclNoZWxsQ2xhc3NSZWM7CgpleHRlcm4gVmVuZG9yU2hlbGxDbGFzc1JlYyB2ZW5kb3JTaGVs
bENsYXNzUmVjOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHZlbmRvcl9zcGVjaWZp
YzsKfSBWZW5kb3JTaGVsbFBhcnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgQ29yZVBhcnQg
Y29yZTsKICAgICAgICBDb21wb3NpdGVQYXJ0IGNvbXBvc2l0ZTsKICAgICAgICBTaGVsbFBhcnQg
c2hlbGw7CiAgICAgICAgV01TaGVsbFBhcnQgd207CiAgICAgICAgVmVuZG9yU2hlbGxQYXJ0IHZl
bmRvcjsKfSBWZW5kb3JTaGVsbFJlYywgKlZlbmRvclNoZWxsV2lkZ2V0Owp0eXBlZGVmIHN0cnVj
dCB7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFRyYW5zaWVudFNoZWxsQ2xhc3NQYXJ0OwoK
dHlwZWRlZiBzdHJ1Y3QgX1RyYW5zaWVudFNoZWxsQ2xhc3NSZWMgewogICAgICAgIENvcmVDbGFz
c1BhcnQgY29yZV9jbGFzczsKICAgICAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9zaXRlX2Ns
YXNzOwogICAgICAgIFNoZWxsQ2xhc3NQYXJ0IHNoZWxsX2NsYXNzOwogICAgICAgIFdNU2hlbGxD
bGFzc1BhcnQgd21fc2hlbGxfY2xhc3M7CiAgICAgICAgVmVuZG9yU2hlbGxDbGFzc1BhcnQgdmVu
ZG9yX3NoZWxsX2NsYXNzOwogICAgICAgIFRyYW5zaWVudFNoZWxsQ2xhc3NQYXJ0IHRyYW5zaWVu
dF9zaGVsbF9jbGFzczsKfSBUcmFuc2llbnRTaGVsbENsYXNzUmVjOwoKZXh0ZXJuIFRyYW5zaWVu
dFNoZWxsQ2xhc3NSZWMgdHJhbnNpZW50U2hlbGxDbGFzc1JlYzsKCgoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgICAgIFdpZGdldCB0cmFuc2llbnRfZm9yOwp9IFRyYW5zaWVudFNoZWxsUGFydDsKCnR5
cGVkZWYgc3RydWN0IHsKICAgICAgICBDb3JlUGFydCBjb3JlOwogICAgICAgIENvbXBvc2l0ZVBh
cnQgY29tcG9zaXRlOwogICAgICAgIFNoZWxsUGFydCBzaGVsbDsKICAgICAgICBXTVNoZWxsUGFy
dCB3bTsKICAgICAgICBWZW5kb3JTaGVsbFBhcnQgdmVuZG9yOwogICAgICAgIFRyYW5zaWVudFNo
ZWxsUGFydCB0cmFuc2llbnQ7Cn0gVHJhbnNpZW50U2hlbGxSZWMsICpUcmFuc2llbnRTaGVsbFdp
ZGdldDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBUb3BMZXZl
bFNoZWxsQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1RvcExldmVsU2hlbGxDbGFzc1JlYyB7
CiAgICAgICAgQ29yZUNsYXNzUGFydCBjb3JlX2NsYXNzOwogICAgICAgIENvbXBvc2l0ZUNsYXNz
UGFydCBjb21wb3NpdGVfY2xhc3M7CiAgICAgICAgU2hlbGxDbGFzc1BhcnQgc2hlbGxfY2xhc3M7
CiAgICAgICAgV01TaGVsbENsYXNzUGFydCB3bV9zaGVsbF9jbGFzczsKICAgICAgICBWZW5kb3JT
aGVsbENsYXNzUGFydCB2ZW5kb3Jfc2hlbGxfY2xhc3M7CiAgICAgICAgVG9wTGV2ZWxTaGVsbENs
YXNzUGFydCB0b3BfbGV2ZWxfc2hlbGxfY2xhc3M7Cn0gVG9wTGV2ZWxTaGVsbENsYXNzUmVjOwoK
ZXh0ZXJuIFRvcExldmVsU2hlbGxDbGFzc1JlYyB0b3BMZXZlbFNoZWxsQ2xhc3NSZWM7CgoKCnR5
cGVkZWYgc3RydWN0IHsKICAgICAgICBjaGFyICppY29uX25hbWU7CiAgICAgICAgQm9vbGVhbiBp
Y29uaWM7CiAgICAgICAgQXRvbSBpY29uX25hbWVfZW5jb2Rpbmc7Cn0gVG9wTGV2ZWxTaGVsbFBh
cnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgQ29yZVBhcnQgY29yZTsKICAgICAgICBDb21w
b3NpdGVQYXJ0IGNvbXBvc2l0ZTsKICAgICAgICBTaGVsbFBhcnQgc2hlbGw7CiAgICAgICAgV01T
aGVsbFBhcnQgd207CiAgICAgICAgVmVuZG9yU2hlbGxQYXJ0IHZlbmRvcjsKICAgICAgICBUb3BM
ZXZlbFNoZWxsUGFydCB0b3BMZXZlbDsKfSBUb3BMZXZlbFNoZWxsUmVjLCAqVG9wTGV2ZWxTaGVs
bFdpZGdldDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBBcHBs
aWNhdGlvblNoZWxsQ2xhc3NQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX0FwcGxpY2F0aW9uU2hlbGxD
bGFzc1JlYyB7CiAgICAgICAgQ29yZUNsYXNzUGFydCBjb3JlX2NsYXNzOwogICAgICAgIENvbXBv
c2l0ZUNsYXNzUGFydCBjb21wb3NpdGVfY2xhc3M7CiAgICAgICAgU2hlbGxDbGFzc1BhcnQgc2hl
bGxfY2xhc3M7CiAgICAgICAgV01TaGVsbENsYXNzUGFydCB3bV9zaGVsbF9jbGFzczsKICAgICAg
ICBWZW5kb3JTaGVsbENsYXNzUGFydCB2ZW5kb3Jfc2hlbGxfY2xhc3M7CiAgICAgICAgVG9wTGV2
ZWxTaGVsbENsYXNzUGFydCB0b3BfbGV2ZWxfc2hlbGxfY2xhc3M7CiAgICAgICAgQXBwbGljYXRp
b25TaGVsbENsYXNzUGFydCBhcHBsaWNhdGlvbl9zaGVsbF9jbGFzczsKfSBBcHBsaWNhdGlvblNo
ZWxsQ2xhc3NSZWM7CgpleHRlcm4gQXBwbGljYXRpb25TaGVsbENsYXNzUmVjIGFwcGxpY2F0aW9u
U2hlbGxDbGFzc1JlYzsKCgoKdHlwZWRlZiBzdHJ1Y3QgewoKCgogICAgY2hhciAqY2xhc3M7Cgog
ICAgWHJtQ2xhc3MgeHJtX2NsYXNzOwogICAgaW50IGFyZ2M7CiAgICBjaGFyICoqYXJndjsKfSBB
cHBsaWNhdGlvblNoZWxsUGFydDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBDb3JlUGFydCBj
b3JlOwogICAgICAgIENvbXBvc2l0ZVBhcnQgY29tcG9zaXRlOwogICAgICAgIFNoZWxsUGFydCBz
aGVsbDsKICAgICAgICBXTVNoZWxsUGFydCB3bTsKICAgICAgICBWZW5kb3JTaGVsbFBhcnQgdmVu
ZG9yOwogICAgICAgIFRvcExldmVsU2hlbGxQYXJ0IHRvcExldmVsOwogICAgICAgIEFwcGxpY2F0
aW9uU2hlbGxQYXJ0IGFwcGxpY2F0aW9uOwp9IEFwcGxpY2F0aW9uU2hlbGxSZWMsICpBcHBsaWNh
dGlvblNoZWxsV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCB7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9u
Owp9IFNlc3Npb25TaGVsbENsYXNzUGFydDsKCnR5cGVkZWYgc3RydWN0IF9TZXNzaW9uU2hlbGxD
bGFzc1JlYyB7CiAgICAgICAgQ29yZUNsYXNzUGFydCBjb3JlX2NsYXNzOwogICAgICAgIENvbXBv
c2l0ZUNsYXNzUGFydCBjb21wb3NpdGVfY2xhc3M7CiAgICAgICAgU2hlbGxDbGFzc1BhcnQgc2hl
bGxfY2xhc3M7CiAgICAgICAgV01TaGVsbENsYXNzUGFydCB3bV9zaGVsbF9jbGFzczsKICAgICAg
ICBWZW5kb3JTaGVsbENsYXNzUGFydCB2ZW5kb3Jfc2hlbGxfY2xhc3M7CiAgICAgICAgVG9wTGV2
ZWxTaGVsbENsYXNzUGFydCB0b3BfbGV2ZWxfc2hlbGxfY2xhc3M7CiAgICAgICAgQXBwbGljYXRp
b25TaGVsbENsYXNzUGFydCBhcHBsaWNhdGlvbl9zaGVsbF9jbGFzczsKICAgICAgICBTZXNzaW9u
U2hlbGxDbGFzc1BhcnQgc2Vzc2lvbl9zaGVsbF9jbGFzczsKfSBTZXNzaW9uU2hlbGxDbGFzc1Jl
YzsKCmV4dGVybiBTZXNzaW9uU2hlbGxDbGFzc1JlYyBzZXNzaW9uU2hlbGxDbGFzc1JlYzsKCnR5
cGVkZWYgc3RydWN0IF9YdFNhdmVZb3Vyc2VsZlJlYyAqWHRTYXZlWW91cnNlbGY7CgoKCnR5cGVk
ZWYgc3RydWN0IHsKICAgIFNtY0Nvbm4gY29ubmVjdGlvbjsKICAgIFN0cmluZyBzZXNzaW9uX2lk
OwogICAgU3RyaW5nKiByZXN0YXJ0X2NvbW1hbmQ7CiAgICBTdHJpbmcqIGNsb25lX2NvbW1hbmQ7
CiAgICBTdHJpbmcqIGRpc2NhcmRfY29tbWFuZDsKICAgIFN0cmluZyogcmVzaWduX2NvbW1hbmQ7
CiAgICBTdHJpbmcqIHNodXRkb3duX2NvbW1hbmQ7CiAgICBTdHJpbmcqIGVudmlyb25tZW50Owog
ICAgU3RyaW5nIGN1cnJlbnRfZGlyOwogICAgU3RyaW5nIHByb2dyYW1fcGF0aDsKICAgIHVuc2ln
bmVkIGNoYXIgcmVzdGFydF9zdHlsZTsKICAgIHVuc2lnbmVkIGNoYXIgY2hlY2twb2ludF9zdGF0
ZTsKICAgIEJvb2xlYW4gam9pbl9zZXNzaW9uOwogICAgWHRDYWxsYmFja0xpc3Qgc2F2ZV9jYWxs
YmFja3M7CiAgICBYdENhbGxiYWNrTGlzdCBpbnRlcmFjdF9jYWxsYmFja3M7CiAgICBYdENhbGxi
YWNrTGlzdCBjYW5jZWxfY2FsbGJhY2tzOwogICAgWHRDYWxsYmFja0xpc3Qgc2F2ZV9jb21wbGV0
ZV9jYWxsYmFja3M7CiAgICBYdENhbGxiYWNrTGlzdCBkaWVfY2FsbGJhY2tzOwogICAgWHRDYWxs
YmFja0xpc3QgZXJyb3JfY2FsbGJhY2tzOwogICAgWHRTYXZlWW91cnNlbGYgc2F2ZTsKICAgIFh0
SW5wdXRJZCBpbnB1dF9pZDsKICAgIFh0UG9pbnRlciBzZXMyMDsKICAgIFh0UG9pbnRlciBzZXMx
OTsKICAgIFh0UG9pbnRlciBzZXMxODsKICAgIFh0UG9pbnRlciBzZXMxNzsKICAgIFh0UG9pbnRl
ciBzZXMxNjsKICAgIFh0UG9pbnRlciBzZXMxNTsKICAgIFh0UG9pbnRlciBzZXMxNDsKICAgIFh0
UG9pbnRlciBzZXMxMzsKICAgIFh0UG9pbnRlciBzZXMxMjsKICAgIFh0UG9pbnRlciBzZXMxMTsK
ICAgIFh0UG9pbnRlciBzZXMxMDsKICAgIFh0UG9pbnRlciBzZXM5OwogICAgWHRQb2ludGVyIHNl
czg7CiAgICBYdFBvaW50ZXIgc2VzNzsKICAgIFh0UG9pbnRlciBzZXM2OwogICAgWHRQb2ludGVy
IHNlczU7CiAgICBYdFBvaW50ZXIgc2VzNDsKICAgIFh0UG9pbnRlciBzZXMzOwogICAgWHRQb2lu
dGVyIHNlczI7CiAgICBYdFBvaW50ZXIgc2VzMTsKfSBTZXNzaW9uU2hlbGxQYXJ0OwoKdHlwZWRl
ZiBzdHJ1Y3QgewogICAgICAgIENvcmVQYXJ0IGNvcmU7CiAgICAgICAgQ29tcG9zaXRlUGFydCBj
b21wb3NpdGU7CiAgICAgICAgU2hlbGxQYXJ0IHNoZWxsOwogICAgICAgIFdNU2hlbGxQYXJ0IHdt
OwogICAgICAgIFZlbmRvclNoZWxsUGFydCB2ZW5kb3I7CiAgICAgICAgVG9wTGV2ZWxTaGVsbFBh
cnQgdG9wTGV2ZWw7CiAgICAgICAgQXBwbGljYXRpb25TaGVsbFBhcnQgYXBwbGljYXRpb247CiAg
ICAgICAgU2Vzc2lvblNoZWxsUGFydCBzZXNzaW9uOwp9IFNlc3Npb25TaGVsbFJlYywgKlNlc3Np
b25TaGVsbFdpZGdldDsKCgoKCgoKCmV4dGVybiBDYXJkaW5hbCBfWG1GaWx0ZXJSZXNvdXJjZXMo
WHRSZXNvdXJjZSAqcmVzb3VyY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENhcmRpbmFsIG51bVJlc291cmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXaWRnZXRDbGFzcyBmaWx0ZXJDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBYdFJlc291cmNlICoqZmlsdGVyZWRSZXNvdXJjZXNSdG4pOwoKZXh0ZXJuIHZvaWQgX1ht
QWRkR3JhYihXaWRnZXQgd2lkLAogICAgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4gZXhjbHVz
aXZlLAogICAgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4gc3ByaW5nX2xvYWRlZCk7CgpleHRl
cm4gdm9pZCBfWG1SZW1vdmVHcmFiKFdpZGdldCB3aWQpOwoKZXh0ZXJuIFh0R2VvbWV0cnlSZXN1
bHQgX1htUm9vdEdlb21ldHJ5TWFuYWdlcihXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdldEdlb21ldHJ5ICpyZXF1ZXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0V2lkZ2V0R2VvbWV0
cnkgKnJlcGx5KTsKCmV4dGVybiB2b2lkIF9YbVZlbmRvckV4dFJlYWxpemUoV2lkZ2V0IHcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNsb3N1cmUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNhbGxfZGF0YSkgOwoKZXh0ZXJuIERp
c3BsYXkgKl9YbUdldERlZmF1bHREaXNwbGF5KHZvaWQpOwoKZXh0ZXJuIFZlbmRvclNoZWxsQ2xh
c3NSZWMgdmVuZG9yU2hlbGxDbGFzc1JlYzsKdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5zaWduZWQg
aW50IGV2ZW50VHlwZTsKICAgIEtleVN5bSBrZXlzeW07CiAgICBLZXlDb2RlIGtleTsKICAgIHVu
c2lnbmVkIGludCBtb2RpZmllcnM7CiAgICBXaWRnZXQgY29tcG9uZW50OwogICAgQm9vbGVhbiBu
ZWVkR3JhYjsKICAgIEJvb2xlYW4gaXNNbmVtb25pYzsKfSBYbUtleWJvYXJkRGF0YTsKCgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBQaXhlbCBmb3JlZ3JvdW5kOwoKICAgIERpbWVuc2lvbiBzaGFkb3df
dGhpY2tuZXNzOwogICAgUGl4ZWwgdG9wX3NoYWRvd19jb2xvcjsKICAgIFBpeG1hcCB0b3Bfc2hh
ZG93X3BpeG1hcDsKICAgIFBpeGVsIGJvdHRvbV9zaGFkb3dfY29sb3I7CiAgICBQaXhtYXAgYm90
dG9tX3NoYWRvd19waXhtYXA7CgogICAgUGl4ZWwgaGlnaGxpZ2h0X2NvbG9yOwogICAgUGl4bWFw
IGhpZ2hsaWdodF9waXhtYXA7CgogICAgWHRDYWxsYmFja0xpc3QgaGVscF9jYWxsYmFjazsKICAg
IFh0UG9pbnRlciB1c2VyX2RhdGE7CgogICAgQm9vbGVhbiB0cmF2ZXJzYWxfb247CiAgICB1bnNp
Z25lZCBjaGFyIHVuaXRfdHlwZTsKICAgIFhtTmF2aWdhdGlvblR5cGUgbmF2aWdhdGlvbl90eXBl
OwoKCiAgICBCb29sZWFuIGV2ZW50X2hhbmRsZXJfYWRkZWQ7CiAgICBXaWRnZXQgYWN0aXZlX2No
aWxkOwogICAgV2lkZ2V0IGhpZ2hsaWdodGVkX3dpZGdldDsKICAgIFdpZGdldCBhY2NlbGVyYXRv
cl93aWRnZXQ7CgogICAgQm9vbGVhbiBoYXNfZm9jdXM7CgogICAgWG1TdHJpbmdEaXJlY3Rpb24g
c3RyaW5nX2RpcmVjdGlvbjsKCiAgICBYbUtleWJvYXJkRGF0YSAqa2V5Ym9hcmRfbGlzdDsKICAg
IHNob3J0IG51bV9rZXlib2FyZF9lbnRyaWVzOwogICAgc2hvcnQgc2l6ZV9rZXlib2FyZF9saXN0
OwoKICAgIFhtR2FkZ2V0IHNlbGVjdGVkX2dhZGdldDsKICAgIFhtR2FkZ2V0IGVsaWdpYmxlX2Zv
cl9tdWx0aV9idXR0b25fZXZlbnQ7CgogICAgR0MgYmFja2dyb3VuZF9HQzsKICAgIEdDIGhpZ2hs
aWdodF9HQzsKICAgIEdDIHRvcF9zaGFkb3dfR0M7CiAgICBHQyBib3R0b21fc2hhZG93X0dDOwoK
ICAgIFdpZGdldCBpbml0aWFsX2ZvY3VzOwoKICAgIFh0Q2FsbGJhY2tMaXN0IHBvcHVwX2hhbmRs
ZXJfY2FsbGJhY2s7Cn0gWG1NYW5hZ2VyUGFydDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIFh0UG9p
bnRlciBuZXh0X2V4dGVuc2lvbjsKICAgIFhybVF1YXJrIHJlY29yZF90eXBlOwogICAgbG9uZyB2
ZXJzaW9uOwogICAgQ2FyZGluYWwgcmVjb3JkX3NpemU7CiAgICBYbVRyYXZlcnNhbENoaWxkcmVu
UHJvYyB0cmF2ZXJzYWxfY2hpbGRyZW47Cn0gWG1NYW5hZ2VyQ2xhc3NFeHRSZWMsICpYbU1hbmFn
ZXJDbGFzc0V4dDsKCgoKCnR5cGVkZWYgc3RydWN0IF9YbU1hbmFnZXJSZWMgewogICAgQ29yZVBh
cnQgY29yZTsKICAgIENvbXBvc2l0ZVBhcnQgY29tcG9zaXRlOwogICAgQ29uc3RyYWludFBhcnQg
Y29uc3RyYWludDsKICAgIFhtTWFuYWdlclBhcnQgbWFuYWdlcjsKfSBYbU1hbmFnZXJSZWM7CgoK
dHlwZWRlZiBzdHJ1Y3QgewogICAgU3RyaW5nIHRyYW5zbGF0aW9uczsKICAgIFhtU3ludGhldGlj
UmVzb3VyY2UgKnN5bl9yZXNvdXJjZXM7CiAgICBpbnQgbnVtX3N5bl9yZXNvdXJjZXM7CiAgICBY
bVN5bnRoZXRpY1Jlc291cmNlICpzeW5fY29uc3RyYWludF9yZXNvdXJjZXM7CiAgICBpbnQgbnVt
X3N5bl9jb25zdHJhaW50X3Jlc291cmNlczsKICAgIFhtUGFyZW50UHJvY2Vzc1Byb2MgcGFyZW50
X3Byb2Nlc3M7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFhtTWFuYWdlckNsYXNzUGFydDsK
CgoKCnR5cGVkZWYgc3RydWN0IF9YbU1hbmFnZXJDbGFzc1JlYyB7CiAgICBDb3JlQ2xhc3NQYXJ0
IGNvcmVfY2xhc3M7CiAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9zaXRlX2NsYXNzOwogICAg
Q29uc3RyYWludENsYXNzUGFydCBjb25zdHJhaW50X2NsYXNzOwogICAgWG1NYW5hZ2VyQ2xhc3NQ
YXJ0IG1hbmFnZXJfY2xhc3M7Cn0gWG1NYW5hZ2VyQ2xhc3NSZWM7CgoKCnR5cGVkZWYgc3RydWN0
IF9YbU1hbmFnZXJDb25zdHJhaW50UGFydCB7CiAgICBpbnQgdW51c2VkOwp9IFhtTWFuYWdlckNv
bnN0cmFpbnRQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1htTWFuYWdlckNvbnN0cmFpbnRSZWMgewog
ICAgWG1NYW5hZ2VyQ29uc3RyYWludFBhcnQgbWFuYWdlcjsKfSBYbU1hbmFnZXJDb25zdHJhaW50
UmVjLCAqWG1NYW5hZ2VyQ29uc3RyYWludFB0cjsKCmV4dGVybiBYbU1hbmFnZXJDbGFzc1JlYyB4
bU1hbmFnZXJDbGFzc1JlYzsKQm9vbGVhbiBfWG1QYXJlbnRQcm9jZXNzKFdpZGdldCB3aWRnZXQs
IFhtUGFyZW50UHJvY2Vzc0RhdGEgZGF0YSk7CnZvaWQgX1htRGVzdHJveVBhcmVudENhbGxiYWNr
ICggV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnQsIFh0UG9pbnRlciBjYWxsICk7Cgp2b2lkIF9Y
bVNvY29ycm8oV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5h
bCAqbnVtX3BhcmFtcyk7CnZvaWQgX1htQ2xlYXJTaGFkb3dUeXBlKFdpZGdldCB3LAogICAgICAg
ICAgICAgICAgICAgICAgICBEaW1lbnNpb24gb2xkX3dpZHRoLCBEaW1lbnNpb24gb2xkX2hlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIG9sZF9zaGFkb3dfdGhpY2tuZXNz
LAogICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gb2xkX2hpZ2hsaWdodF90aGlja25l
c3MpOwoKCnZvaWQgX1htR2FkZ2V0QnV0dG9uTW90aW9uKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50
LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbUdhZGdldEFy
bShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1f
cGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRBY3RpdmF0ZShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwg
U3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRNdWx0
aUFybShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpu
dW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRNdWx0aUFjdGl2YXRlKFdpZGdldCB3LCBYRXZlbnQg
KmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbUdh
ZGdldERyYWcoV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5h
bCAqbnVtX3BhcmFtcyk7CnZvaWQgX1htR2FkZ2V0U2VsZWN0KFdpZGdldCB3LCBYRXZlbnQgKmV2
ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbVBhcmVu
dEFjdGl2YXRlKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGlu
YWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbVBhcmVudENhbmNlbChXaWRnZXQgdywgWEV2ZW50ICpl
dmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRn
ZXRUcmF2ZXJzZVByZXZUYWJHcm91cChXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpw
YXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRUcmF2ZXJzZU5leHRU
YWJHcm91cChXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFs
ICpudW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRUcmF2ZXJzZVByZXYoV2lkZ2V0IHcsIFhFdmVu
dCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CnZvaWQgX1ht
R2FkZ2V0VHJhdmVyc2VOZXh0KFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFt
cywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbUdhZGdldFRyYXZlcnNlVXAoV2lkZ2V0
IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7
CnZvaWQgX1htR2FkZ2V0VHJhdmVyc2VEb3duKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJp
bmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbUdhZGdldFRyYXZlcnNl
TGVmdChXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpu
dW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRUcmF2ZXJzZVJpZ2h0KFdpZGdldCB3LCBYRXZlbnQg
KmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9YbUdh
ZGdldFRyYXZlcnNlSG9tZShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMs
IENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1HYWRnZXRIZWxwKFdpZGdldCB3LCBYRXZl
bnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwp2b2lkIF9Y
bUdhZGdldEtleUlucHV0KFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywg
Q2FyZGluYWwgKm51bV9wYXJhbXMpOwoKdm9pZCBfWG1NYW5hZ2VySGVscChXaWRnZXQgdywgWEV2
ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdHlwZWRl
ZiBzdHJ1Y3QgX1htUHJpbWl0aXZlQ2xhc3NFeHRSZWMgewogICAgWHRQb2ludGVyIG5leHRfZXh0
ZW5zaW9uOwogICAgWHJtUXVhcmsgcmVjb3JkX3R5cGU7CiAgICBsb25nIHZlcnNpb247CiAgICBD
YXJkaW5hbCByZWNvcmRfc2l6ZTsKICAgIFhtV2lkZ2V0QmFzZWxpbmVQcm9jIHdpZGdldF9iYXNl
bGluZTsKICAgIFhtV2lkZ2V0RGlzcGxheVJlY3RQcm9jIHdpZGdldF9kaXNwbGF5X3JlY3Q7CiAg
ICBYbVdpZGdldE1hcmdpbnNQcm9jIHdpZGdldF9tYXJnaW5zOwp9IFhtUHJpbWl0aXZlQ2xhc3NF
eHRSZWMsICpYbVByaW1pdGl2ZUNsYXNzRXh0OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgUGl4
ZWwgZm9yZWdyb3VuZDsKCiAgICBEaW1lbnNpb24gc2hhZG93X3RoaWNrbmVzczsKICAgIFBpeGVs
IHRvcF9zaGFkb3dfY29sb3I7CiAgICBQaXhtYXAgdG9wX3NoYWRvd19waXhtYXA7CiAgICBQaXhl
bCBib3R0b21fc2hhZG93X2NvbG9yOwogICAgUGl4bWFwIGJvdHRvbV9zaGFkb3dfcGl4bWFwOwoK
ICAgIERpbWVuc2lvbiBoaWdobGlnaHRfdGhpY2tuZXNzOwogICAgUGl4ZWwgaGlnaGxpZ2h0X2Nv
bG9yOwogICAgUGl4bWFwIGhpZ2hsaWdodF9waXhtYXA7CgogICAgWHRDYWxsYmFja0xpc3QgaGVs
cF9jYWxsYmFjazsKICAgIFh0UG9pbnRlciB1c2VyX2RhdGE7CgogICAgQm9vbGVhbiB0cmF2ZXJz
YWxfb247CiAgICBCb29sZWFuIGhpZ2hsaWdodF9vbl9lbnRlcjsKICAgIEJvb2xlYW4gaGF2ZV90
cmF2ZXJzYWw7CgogICAgdW5zaWduZWQgY2hhciB1bml0X3R5cGU7CiAgICBYbU5hdmlnYXRpb25U
eXBlIG5hdmlnYXRpb25fdHlwZTsKCiAgICBCb29sZWFuIGhpZ2hsaWdodF9kcmF3bjsKICAgIEJv
b2xlYW4gaGlnaGxpZ2h0ZWQ7CgogICAgR0MgaGlnaGxpZ2h0X0dDOwogICAgR0MgdG9wX3NoYWRv
d19HQzsKICAgIEdDIGJvdHRvbV9zaGFkb3dfR0M7Cn0gWG1QcmltaXRpdmVQYXJ0OwoKCnR5cGVk
ZWYgc3RydWN0IF9YbVByaW1pdGl2ZVJlYyB7CiAgICBDb3JlUGFydCBjb3JlOwogICAgWG1Qcmlt
aXRpdmVQYXJ0IHByaW1pdGl2ZTsKfSBYbVByaW1pdGl2ZVJlYzsKCgp0eXBlZGVmIHN0cnVjdCB7
CiAgICBYdFdpZGdldFByb2MgYm9yZGVyX2hpZ2hsaWdodDsKICAgIFh0V2lkZ2V0UHJvYyBib3Jk
ZXJfdW5oaWdobGlnaHQ7CiAgICBTdHJpbmcgdHJhbnNsYXRpb25zOwogICAgWHRBY3Rpb25Qcm9j
IGFybV9hbmRfYWN0aXZhdGU7CiAgICBYbVN5bnRoZXRpY1Jlc291cmNlICpzeW5fcmVzb3VyY2Vz
OwogICAgaW50IG51bV9zeW5fcmVzb3VyY2VzOwogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBY
bVByaW1pdGl2ZUNsYXNzUGFydDsKCgp0eXBlZGVmIHN0cnVjdCBfWG1QcmltaXRpdmVDbGFzc1Jl
YyB7CiAgICBDb3JlQ2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgICBYbVByaW1pdGl2ZUNsYXNzUGFy
dCBwcmltaXRpdmVfY2xhc3M7Cn0gWG1QcmltaXRpdmVDbGFzc1JlYzsKCgpleHRlcm4gWG1Qcmlt
aXRpdmVDbGFzc1JlYyB4bVByaW1pdGl2ZUNsYXNzUmVjOwoKCgpleHRlcm4gdm9pZCBfWG1Qcmlt
aXRpdmVFbnRlcihXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRp
bmFsICpudW1fcGFyYW1zKTsKZXh0ZXJuIHZvaWQgX1htUHJpbWl0aXZlTGVhdmUoV2lkZ2V0IHcs
IFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4
dGVybiB2b2lkIF9YbVByaW1pdGl2ZUZvY3VzSW4oV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0
cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4dGVybiB2b2lkIF9YbVByaW1p
dGl2ZUZvY3VzT3V0KFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2Fy
ZGluYWwgKm51bV9wYXJhbXMpOwpleHRlcm4gdm9pZCBfWG1UcmF2ZXJzZUxlZnQoV2lkZ2V0IHcs
IFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4
dGVybiB2b2lkIF9YbVRyYXZlcnNlUmlnaHQoV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmlu
ZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4dGVybiB2b2lkIF9YbVRyYXZlcnNl
TmV4dChXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpu
dW1fcGFyYW1zKTsKZXh0ZXJuIHZvaWQgX1htVHJhdmVyc2VQcmV2KFdpZGdldCB3LCBYRXZlbnQg
KmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwpleHRlcm4gdm9p
ZCBfWG1UcmF2ZXJzZURvd24oV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1z
LCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4dGVybiB2b2lkIF9YbVRyYXZlcnNlVXAoV2lkZ2V0
IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcyk7
CmV4dGVybiB2b2lkIF9YbVRyYXZlcnNlSG9tZShXaWRnZXQgdywgWEV2ZW50ICpldmVudCwgU3Ry
aW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKZXh0ZXJuIHZvaWQgX1htVHJhdmVy
c2VOZXh0VGFiR3JvdXAoV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBD
YXJkaW5hbCAqbnVtX3BhcmFtcyk7CmV4dGVybiB2b2lkIF9YbVRyYXZlcnNlUHJldlRhYkdyb3Vw
KFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9w
YXJhbXMpOwpleHRlcm4gdm9pZCBfWG1QcmltaXRpdmVQYXJlbnRBY3RpdmF0ZShXaWRnZXQgdywg
WEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKZXh0
ZXJuIHZvaWQgX1htUHJpbWl0aXZlUGFyZW50Q2FuY2VsKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50
LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwpleHRlcm4gdm9pZCBfWG1Q
cmltaXRpdmVIZWxwKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2Fy
ZGluYWwgKm51bV9wYXJhbXMpOwpleHRlcm4gdm9pZCBfWG1QcmltaXRpdmVVbm1hcChXaWRnZXQg
dywgWEV2ZW50ICpldmVudCwgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsK
ZXh0ZXJuIEJvb2xlYW4gX1htRGlmZmVyZW50QmFja2dyb3VuZChXaWRnZXQgdywgV2lkZ2V0IHBh
cmVudCk7CnR5cGVkZWYgc3RydWN0IF9YbUdhZGdldENhY2hlIHsKICAgIHN0cnVjdCBfWG1HYWRn
ZXRDYWNoZSAqbmV4dDsKICAgIHN0cnVjdCBfWG1HYWRnZXRDYWNoZSAqcHJldjsKICAgIGludCBy
ZWZfY291bnQ7Cn0gWG1HYWRnZXRDYWNoZSwgKlhtR2FkZ2V0Q2FjaGVQdHI7Cgp0eXBlZGVmIHN0
cnVjdCBfWG1DYWNoZUNsYXNzUGFydCB7CiAgICBYbUdhZGdldENhY2hlIGNhY2hlX2hlYWQ7CiAg
ICBYbUNhY2hlQ29weVByb2MgY2FjaGVfY29weTsKICAgIFhtR2FkZ2V0Q2FjaGVQcm9jIGNhY2hl
X2RlbGV0ZTsKICAgIFhtQ2FjaGVDb21wYXJlUHJvYyBjYWNoZV9jb21wYXJlOwp9IFhtQ2FjaGVD
bGFzc1BhcnQsICpYbUNhY2hlQ2xhc3NQYXJ0UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgX1htR2FkZ2V0
Q2FjaGVSZWYgewogICAgWG1HYWRnZXRDYWNoZSBjYWNoZTsKICAgIFh0QXJnVmFsIGRhdGE7Cn0g
WG1HYWRnZXRDYWNoZVJlZiwgKlhtR2FkZ2V0Q2FjaGVSZWZQdHI7CgoKCnR5cGVkZWYgc3RydWN0
IF9YbUdhZGdldFBhcnQgewogICAgRGltZW5zaW9uIHNoYWRvd190aGlja25lc3M7CiAgICBEaW1l
bnNpb24gaGlnaGxpZ2h0X3RoaWNrbmVzczsKCiAgICBYdENhbGxiYWNrTGlzdCBoZWxwX2NhbGxi
YWNrOwogICAgWHRQb2ludGVyIHVzZXJfZGF0YTsKCiAgICBCb29sZWFuIHRyYXZlcnNhbF9vbjsK
ICAgIEJvb2xlYW4gaGlnaGxpZ2h0X29uX2VudGVyOwogICAgQm9vbGVhbiBoYXZlX3RyYXZlcnNh
bDsKCiAgICB1bnNpZ25lZCBjaGFyIHVuaXRfdHlwZTsKICAgIFhtTmF2aWdhdGlvblR5cGUgbmF2
aWdhdGlvbl90eXBlOwoKICAgIEJvb2xlYW4gaGlnaGxpZ2h0X2RyYXduOwogICAgQm9vbGVhbiBo
aWdobGlnaHRlZDsKICAgIEJvb2xlYW4gdmlzaWJsZTsKCiAgICBNYXNrIGV2ZW50X21hc2s7Cn0g
WG1HYWRnZXRQYXJ0OwoKCnR5cGVkZWYgc3RydWN0IF9YbUdhZGdldFJlYyB7CiAgICBPYmplY3RQ
YXJ0IG9iamVjdDsKICAgIFJlY3RPYmpQYXJ0IHJlY3RhbmdsZTsKICAgIFhtR2FkZ2V0UGFydCBn
YWRnZXQ7Cn0gWG1HYWRnZXRSZWM7CgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1HYWRnZXRDbGFzc0V4
dFJlYyB7CiAgICBYdFBvaW50ZXIgbmV4dF9leHRlbnNpb247CiAgICBYcm1RdWFyayByZWNvcmRf
dHlwZTsKICAgIGxvbmcgdmVyc2lvbjsKICAgIENhcmRpbmFsIHJlY29yZF9zaXplOwogICAgWG1X
aWRnZXRCYXNlbGluZVByb2Mgd2lkZ2V0X2Jhc2VsaW5lOwogICAgWG1XaWRnZXREaXNwbGF5UmVj
dFByb2Mgd2lkZ2V0X2Rpc3BsYXlfcmVjdDsKfSBYbUdhZGdldENsYXNzRXh0UmVjLCAqWG1HYWRn
ZXRDbGFzc0V4dDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgWHRXaWRnZXRQcm9jIGJvcmRlcl9oaWdo
bGlnaHQ7CiAgICBYdFdpZGdldFByb2MgYm9yZGVyX3VuaGlnaGxpZ2h0OwogICAgWHRBY3Rpb25Q
cm9jIGFybV9hbmRfYWN0aXZhdGU7CiAgICBYbVdpZGdldERpc3BhdGNoUHJvYyBpbnB1dF9kaXNw
YXRjaDsKICAgIFhtVmlzdWFsQ2hhbmdlUHJvYyB2aXN1YWxfY2hhbmdlOwogICAgWG1TeW50aGV0
aWNSZXNvdXJjZSAqc3luX3Jlc291cmNlczsKICAgIGludCBudW1fc3luX3Jlc291cmNlczsKICAg
IFhtQ2FjaGVDbGFzc1BhcnRQdHIgY2FjaGVfcGFydDsKICAgIFh0UG9pbnRlciBleHRlbnNpb247
Cn0gWG1HYWRnZXRDbGFzc1BhcnQ7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htR2FkZ2V0Q2xhc3NSZWMg
ewogICAgUmVjdE9iakNsYXNzUGFydCByZWN0X2NsYXNzOwogICAgWG1HYWRnZXRDbGFzc1BhcnQg
Z2FkZ2V0X2NsYXNzOwp9IFhtR2FkZ2V0Q2xhc3NSZWM7CgoKZXh0ZXJuIFhtR2FkZ2V0Q2xhc3NS
ZWMgeG1HYWRnZXRDbGFzc1JlYzsKdm9pZCBfWG1CdWlsZEdhZGdldFJlc291cmNlcyhXaWRnZXRD
bGFzcyBjKTsKdHlwZWRlZiBDYXJkaW5hbCAoKlhtR2V0U2VjUmVzRGF0YUZ1bmMpKFdpZGdldENs
YXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1TZWNvbmRhcnlS
ZXNvdXJjZURhdGEgKiopOwoKdHlwZWRlZiBzdHJ1Y3QgX1htT2JqZWN0Q2xhc3NFeHRSZWMKewog
ICAgWHRQb2ludGVyIG5leHRfZXh0ZW5zaW9uOwogICAgWHJtUXVhcmsgcmVjb3JkX3R5cGU7CiAg
ICBsb25nIHZlcnNpb247CiAgICBDYXJkaW5hbCByZWNvcmRfc2l6ZTsKfSBYbU9iamVjdENsYXNz
RXh0UmVjLCAqWG1PYmplY3RDbGFzc0V4dDsKCnR5cGVkZWYgc3RydWN0IF9YbUdlbmVyaWNDbGFz
c0V4dFJlYyB7CiAgICBYdFBvaW50ZXIgbmV4dF9leHRlbnNpb247CiAgICBYcm1RdWFyayByZWNv
cmRfdHlwZTsKICAgIGxvbmcgdmVyc2lvbjsKICAgIENhcmRpbmFsIHJlY29yZF9zaXplOwp9IFht
R2VuZXJpY0NsYXNzRXh0UmVjLCAqWG1HZW5lcmljQ2xhc3NFeHQ7Cgp0eXBlZGVmIHN0cnVjdCBf
WG1XcmFwcGVyRGF0YVJlYwp7CiAgICBzdHJ1Y3QgX1htV3JhcHBlckRhdGFSZWMgKm5leHQ7CiAg
ICBXaWRnZXRDbGFzcyB3aWRnZXRDbGFzczsKICAgIFh0SW5pdFByb2MgaW5pdGlhbGl6ZUxlYWY7
CiAgICBYdFNldFZhbHVlc0Z1bmMgc2V0VmFsdWVzTGVhZjsKICAgIFh0QXJnc1Byb2MgZ2V0VmFs
dWVzTGVhZjsKICAgIFh0UmVhbGl6ZVByb2MgcmVhbGl6ZTsKICAgIFh0V2lkZ2V0Q2xhc3NQcm9j
IGNsYXNzUGFydEluaXRMZWFmOwogICAgWHRXaWRnZXRQcm9jIHJlc2l6ZTsKICAgIFh0R2VvbWV0
cnlIYW5kbGVyIGdlb21ldHJ5X21hbmFnZXI7Cn0gWG1XcmFwcGVyRGF0YVJlYywgKlhtV3JhcHBl
ckRhdGE7Cgp0eXBlZGVmIHN0cnVjdCBfWG1CYXNlQ2xhc3NFeHRSZWMKewogICAgWHRQb2ludGVy
IG5leHRfZXh0ZW5zaW9uOwogICAgWHJtUXVhcmsgcmVjb3JkX3R5cGU7CiAgICBsb25nIHZlcnNp
b247CiAgICBDYXJkaW5hbCByZWNvcmRfc2l6ZTsKICAgIFh0SW5pdFByb2MgaW5pdGlhbGl6ZVBy
ZWhvb2s7CiAgICBYdFNldFZhbHVlc0Z1bmMgc2V0VmFsdWVzUHJlaG9vazsKICAgIFh0SW5pdFBy
b2MgaW5pdGlhbGl6ZVBvc3Rob29rOwogICAgWHRTZXRWYWx1ZXNGdW5jIHNldFZhbHVlc1Bvc3Ro
b29rOwogICAgV2lkZ2V0Q2xhc3Mgc2Vjb25kYXJ5T2JqZWN0Q2xhc3M7CiAgICBYdEluaXRQcm9j
IHNlY29uZGFyeU9iamVjdENyZWF0ZTsKICAgIFhtR2V0U2VjUmVzRGF0YUZ1bmMgZ2V0U2VjUmVz
RGF0YTsKICAgIHVuc2lnbmVkIGNoYXIgZmxhZ3NbMzJdOwogICAgWHRBcmdzUHJvYyBnZXRWYWx1
ZXNQcmVob29rOwogICAgWHRBcmdzUHJvYyBnZXRWYWx1ZXNQb3N0aG9vazsKICAgIFh0V2lkZ2V0
Q2xhc3NQcm9jIGNsYXNzUGFydEluaXRQcmVob29rOwogICAgWHRXaWRnZXRDbGFzc1Byb2MgY2xh
c3NQYXJ0SW5pdFBvc3Rob29rOwogICAgWHRSZXNvdXJjZUxpc3QgZXh0X3Jlc291cmNlczsKICAg
IFh0UmVzb3VyY2VMaXN0IGNvbXBpbGVkX2V4dF9yZXNvdXJjZXM7CiAgICBDYXJkaW5hbCBudW1f
ZXh0X3Jlc291cmNlczsKICAgIEJvb2xlYW4gdXNlX3N1Yl9yZXNvdXJjZXM7CiAgICBYbVdpZGdl
dE5hdmlnYWJsZVByb2Mgd2lkZ2V0TmF2aWdhYmxlOwogICAgWG1Gb2N1c0NoYW5nZVByb2MgZm9j
dXNDaGFuZ2U7CiAgICBYbVdyYXBwZXJEYXRhIHdyYXBwZXJEYXRhOwp9IFhtQmFzZUNsYXNzRXh0
UmVjLCAqWG1CYXNlQ2xhc3NFeHQ7Cgp0eXBlZGVmIHN0cnVjdCBfWG1XaWRnZXRFeHREYXRhUmVj
CnsKICAgIFdpZGdldCB3aWRnZXQ7CiAgICBXaWRnZXQgcmVxV2lkZ2V0OwogICAgV2lkZ2V0IG9s
ZFdpZGdldDsKfSBYbVdpZGdldEV4dERhdGFSZWMsICpYbVdpZGdldEV4dERhdGE7CgpleHRlcm4g
WHJtUXVhcmsgWG1RbW90aWY7CmV4dGVybiBpbnQgX1htSW5oZXJpdENsYXNzOwpleHRlcm4gWG1C
YXNlQ2xhc3NFeHQgKl9YbV9mYXN0UHRyOwoKZXh0ZXJuIEJvb2xlYW4gX1htSXNTbG93U3ViY2xh
c3MoV2lkZ2V0Q2xhc3Mgd2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBiaXQpOwpleHRlcm4gWG1HZW5lcmljQ2xhc3NFeHQgKl9YbUdldENsYXNzRXh0ZW5z
aW9uUHRyKFhtR2VuZXJpY0NsYXNzRXh0ICpsc3RIZWFkUHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhybVF1YXJrIG93bmVyKTsKZXh0ZXJuIHZv
aWQgX1htUHVzaFdpZGdldEV4dERhdGEoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWG1XaWRnZXRFeHREYXRhIGRhdGEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZXh0VHlwZSk7CmV4dGVybiB2b2lkIF9YbVBvcFdp
ZGdldEV4dERhdGEoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYbVdpZGdldEV4dERhdGEgKmRhdGFSdG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciBleHRUeXBlKTsKZXh0ZXJuIFhtV2lkZ2V0RXh0RGF0YSBfWG1HZXRX
aWRnZXRFeHREYXRhKFdpZGdldCB3aWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGV4dFR5cGUpOwpleHRlcm4gdm9pZCBfWG1GcmVl
V2lkZ2V0RXh0RGF0YShXaWRnZXQgd2lkZ2V0KTsKZXh0ZXJuIHZvaWQgX1htQmFzZUNsYXNzUGFy
dEluaXRpYWxpemUoV2lkZ2V0Q2xhc3Mgd2MpOwpleHRlcm4gdm9pZCBfWG1Jbml0aWFsaXplRXh0
ZW5zaW9ucyh2b2lkKTsKZXh0ZXJuIEJvb2xlYW4gX1htSXNTdGFuZGFyZE1vdGlmV2lkZ2V0Q2xh
c3MoV2lkZ2V0Q2xhc3Mgd2MpOwpleHRlcm4gQ2FyZGluYWwgX1htU2Vjb25kYXJ5UmVzb3VyY2VE
YXRhKFhtQmFzZUNsYXNzRXh0IGJjZVB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBYbVNlY29uZGFyeVJlc291cmNlRGF0YSAqKnNlY1Jlc0RhdGFSdG4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNsaWVudF9kYXRh
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjbGFzc19uYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtUmVzb3VyY2VCYXNl
UHJvYyBiYXNlZnVuY3Rpb25wb2ludGVyKTsKZXh0ZXJuIHZvaWQgX1htVHJhbnNmb3JtU3ViUmVz
b3VyY2VzKFh0UmVzb3VyY2VMaXN0IGNvbXBfcmVzb3VyY2VzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgbnVtX2NvbXBfcmVzb3VyY2VzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRSZXNvdXJjZUxpc3QgKnJlc291cmNlcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsICpudW1fcmVzb3VyY2Vz
KTsKCgpleHRlcm4gQm9vbGVhbiBfWG1Jc1N1YmNsYXNzT2YoV2lkZ2V0Q2xhc3Mgd2MsIFdpZGdl
dENsYXNzIHNjbGFzcyk7CmVudW0gewogICAgWG1DQUNIRV9FWFRFTlNJT04gPSAxLAogICAgWG1E
RVNLVE9QX0VYVEVOU0lPTiwKICAgIFhtU0hFTExfRVhURU5TSU9OLAogICAgWG1QUk9UT0NPTF9F
WFRFTlNJT04sCiAgICBYbURFRkFVTFRfRVhURU5TSU9OCn07CnR5cGVkZWYgc3RydWN0IF9YbUV4
dFJlYyAqWG1FeHRPYmplY3Q7CnR5cGVkZWYgc3RydWN0IF9YbUV4dENsYXNzUmVjICpYbUV4dE9i
amVjdENsYXNzOwoKZXh0ZXJuIFdpZGdldENsYXNzIHhtRXh0T2JqZWN0Q2xhc3M7CnR5cGVkZWYg
c3RydWN0IF9YbUV4dENsYXNzUGFydCB7CiAgICBYbVN5bnRoZXRpY1Jlc291cmNlICpzeW5fcmVz
b3VyY2VzOwogICAgaW50IG51bV9zeW5fcmVzb3VyY2VzOwoKCgoKCgogICAgWHRQb2ludGVyIGV4
dGVuc2lvbjsKfSBYbUV4dENsYXNzUGFydCwgKlhtRXh0Q2xhc3NQYXJ0UHRyOwoKdHlwZWRlZiBz
dHJ1Y3QgX1htRXh0Q2xhc3NSZWMgewogICAgT2JqZWN0Q2xhc3NQYXJ0IG9iamVjdF9jbGFzczsK
ICAgIFhtRXh0Q2xhc3NQYXJ0IGV4dF9jbGFzczsKfSBYbUV4dENsYXNzUmVjOwoKdHlwZWRlZiBz
dHJ1Y3QgewogICAgV2lkZ2V0IGxvZ2ljYWxQYXJlbnQ7CiAgICB1bnNpZ25lZCBjaGFyIGV4dGVu
c2lvblR5cGU7Cn0gWG1FeHRQYXJ0LCAqWG1FeHRQYXJ0UHRyOwoKZXh0ZXJuIFhtRXh0Q2xhc3NS
ZWMgeG1FeHRDbGFzc1JlYzsKCnR5cGVkZWYgc3RydWN0IF9YbUV4dFJlYyB7CiAgICBPYmplY3RQ
YXJ0IG9iamVjdDsKICAgIFhtRXh0UGFydCBleHQ7Cn0gWG1FeHRSZWM7Cgp0eXBlZGVmIHN0cnVj
dCBfWG1FeHRDYWNoZSB7CiAgIGNoYXIgZGF0YVsoMjUgKiBzaXplb2Yodm9pZCAqKSAtIHNpemVv
ZihCb29sZWFuKSldOwogICBCb29sZWFuIGludXNlOwp9IFhtRXh0Q2FjaGU7CgpleHRlcm4gY2hh
ciAqX1htRXh0T2JqQWxsb2MoQ2FyZGluYWwgc2l6ZSk7CmV4dGVybiB2b2lkIF9YbUV4dE9iakZy
ZWUoWHRQb2ludGVyIGVsZW1lbnQpOwpleHRlcm4gdm9pZCBfWG1CdWlsZEV4dFJlc291cmNlcyhX
aWRnZXRDbGFzcyBjKTsKdHlwZWRlZiBzdHJ1Y3QgX1htRGVza3RvcFJlYyAqWG1EZXNrdG9wT2Jq
ZWN0Owp0eXBlZGVmIHN0cnVjdCBfWG1EZXNrdG9wQ2xhc3NSZWMgKlhtRGVza3RvcE9iamVjdENs
YXNzOwpleHRlcm4gV2lkZ2V0Q2xhc3MgeG1EZXNrdG9wQ2xhc3M7Cgp0eXBlZGVmIHN0cnVjdCBf
WG1EZXNrdG9wQ2xhc3NQYXJ0IHsKICAgIFdpZGdldENsYXNzIGNoaWxkX2NsYXNzOwogICAgWHRX
aWRnZXRQcm9jIGluc2VydF9jaGlsZDsKICAgIFh0V2lkZ2V0UHJvYyBkZWxldGVfY2hpbGQ7CiAg
ICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFhtRGVza3RvcENsYXNzUGFydCwgKlhtRGVza3RvcENs
YXNzUGFydFB0cjsKCnR5cGVkZWYgc3RydWN0IF9YbURlc2t0b3BDbGFzc1JlYyB7CiAgICBPYmpl
Y3RDbGFzc1BhcnQgb2JqZWN0X2NsYXNzOwogICAgWG1FeHRDbGFzc1BhcnQgZXh0X2NsYXNzOwog
ICAgWG1EZXNrdG9wQ2xhc3NQYXJ0IGRlc2t0b3BfY2xhc3M7Cn0gWG1EZXNrdG9wQ2xhc3NSZWM7
Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBXaWRnZXQgcGFyZW50OwogICAgV2lkZ2V0ICpjaGlsZHJl
bjsKICAgIENhcmRpbmFsIG51bV9jaGlsZHJlbjsKICAgIENhcmRpbmFsIG51bV9zbG90czsKfSBY
bURlc2t0b3BQYXJ0LCAqWG1EZXNrdG9wUGFydFB0cjsKCmV4dGVybiBYbURlc2t0b3BDbGFzc1Jl
YyB4bURlc2t0b3BDbGFzc1JlYzsKCnR5cGVkZWYgc3RydWN0IF9YbURlc2t0b3BSZWMgewogICAg
T2JqZWN0UGFydCBvYmplY3Q7CiAgICBYbUV4dFBhcnQgZXh0OwogICAgWG1EZXNrdG9wUGFydCBk
ZXNrdG9wOwp9IFhtRGVza3RvcFJlYzsKCgoKCmV4dGVybiBXaWRnZXRDbGFzcyBfWG1HZXRBY3R1
YWxDbGFzcyhEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2lkZ2V0Q2xhc3Mgd19jbGFzcyk7CmV4dGVybiB2b2lkIF9YbVNldEFjdHVhbENsYXNz
KERpc3BsYXkgKmRpc3BsYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldENs
YXNzIHdfY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldENsYXNzIGFj
dHVhbENsYXNzKTsKZXh0ZXJuIFdpZGdldENsYXNzIHhtU2NyZWVuQ2xhc3M7Cgp0eXBlZGVmIHN0
cnVjdCBfWG1TY3JlZW5SZWMgKlhtU2NyZWVuOwp0eXBlZGVmIHN0cnVjdCBfWG1TY3JlZW5DbGFz
c1JlYyAqWG1TY3JlZW5DbGFzczsKCmV4dGVybiBXaWRnZXQgWG1HZXRYbVNjcmVlbihTY3JlZW4g
KnNjcmVlbik7CmVudW0gewogICAgWG1BVFRBQ0hfTk9SVEhfV0VTVCwKICAgIFhtQVRUQUNIX05P
UlRILAogICAgWG1BVFRBQ0hfTk9SVEhfRUFTVCwKICAgIFhtQVRUQUNIX0VBU1QsCiAgICBYbUFU
VEFDSF9TT1VUSF9FQVNULAogICAgWG1BVFRBQ0hfU09VVEgsCiAgICBYbUFUVEFDSF9TT1VUSF9X
RVNULAogICAgWG1BVFRBQ0hfV0VTVCwKICAgIFhtQVRUQUNIX0NFTlRFUiwKICAgIFhtQVRUQUNI
X0hPVAp9OwoKCgoKCnR5cGVkZWYgc3RydWN0IF9YbURyYWdJY29uUmVjICpYbURyYWdJY29uT2Jq
ZWN0Owp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnSWNvbkNsYXNzUmVjICpYbURyYWdJY29uT2JqZWN0
Q2xhc3M7CmV4dGVybiBXaWRnZXRDbGFzcyB4bURyYWdJY29uT2JqZWN0Q2xhc3M7CgpXaWRnZXQg
WG1DcmVhdGVEcmFnSWNvbiAoV2lkZ2V0IHdpZGdldCwgU3RyaW5nIG5hbWUsIEFyZ0xpc3QgYXJn
bGlzdCwgQ2FyZGluYWwgYXJnY291bnQpOwp0eXBlZGVmIHN0cnVjdCBfWG1TY3JlZW5DbGFzc1Bh
cnQgewogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBYbVNjcmVlbkNsYXNzUGFydCwgKlhtU2Ny
ZWVuQ2xhc3NQYXJ0UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgX1htU2NyZWVuQ2xhc3NSZWMgewogICAg
Q29yZUNsYXNzUGFydCBjb3JlX2NsYXNzOwogICAgWG1EZXNrdG9wQ2xhc3NQYXJ0IGRlc2t0b3Bf
Y2xhc3M7CiAgICBYbVNjcmVlbkNsYXNzUGFydCBzY3JlZW5fY2xhc3M7Cn0gWG1TY3JlZW5DbGFz
c1JlYzsKCnR5cGVkZWYgc3RydWN0IF9YbURyYWdDdXJzb3JSZWMgewogICAgc3RydWN0IF9YbURy
YWdDdXJzb3JSZWMgKm5leHQ7CiAgICBDdXJzb3IgY3Vyc29yOwogICAgWG1EcmFnSWNvbk9iamVj
dCBzdGF0ZUljb247CiAgICBYbURyYWdJY29uT2JqZWN0IG9wSWNvbjsKICAgIFhtRHJhZ0ljb25P
YmplY3Qgc291cmNlSWNvbjsKICAgIEJvb2xlYW4gZGlydHk7Cn0gWG1EcmFnQ3Vyc29yUmVjLCAq
WG1EcmFnQ3Vyc29yQ2FjaGU7Cgp0eXBlZGVmIHN0cnVjdCBfWG1TY3JhdGNoUGl4bWFwUmVjICpY
bVNjcmF0Y2hQaXhtYXA7Cgp0eXBlZGVmIHN0cnVjdCBfWG1TY3JhdGNoUGl4bWFwUmVjIHsKICAg
IFhtU2NyYXRjaFBpeG1hcCBuZXh0OwogICAgUGl4bWFwIHBpeG1hcDsKICAgIENhcmRpbmFsIGRl
cHRoOwogICAgRGltZW5zaW9uIHdpZHRoOwogICAgRGltZW5zaW9uIGhlaWdodDsKICAgIEJvb2xl
YW4gaW5Vc2U7Cn0gWG1TY3JhdGNoUGl4bWFwUmVjOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQm9v
bGVhbiBtd21QcmVzZW50OwogICAgdW5zaWduZWQgc2hvcnQgbnVtUmVwYXJlbnRlZDsKICAgIGlu
dCBkYXJrVGhyZXNob2xkOwogICAgaW50IGZvcmVncm91bmRUaHJlc2hvbGQ7CiAgICBpbnQgbGln
aHRUaHJlc2hvbGQ7CiAgICBYbURyYWdJY29uT2JqZWN0IGRlZmF1bHROb25lQ3Vyc29ySWNvbjsK
ICAgIFhtRHJhZ0ljb25PYmplY3QgZGVmYXVsdFZhbGlkQ3Vyc29ySWNvbjsKICAgIFhtRHJhZ0lj
b25PYmplY3QgZGVmYXVsdEludmFsaWRDdXJzb3JJY29uOwogICAgWG1EcmFnSWNvbk9iamVjdCBk
ZWZhdWx0TW92ZUN1cnNvckljb247CiAgICBYbURyYWdJY29uT2JqZWN0IGRlZmF1bHRDb3B5Q3Vy
c29ySWNvbjsKICAgIFhtRHJhZ0ljb25PYmplY3QgZGVmYXVsdExpbmtDdXJzb3JJY29uOwogICAg
WG1EcmFnSWNvbk9iamVjdCBkZWZhdWx0U291cmNlQ3Vyc29ySWNvbjsKCiAgICBDdXJzb3IgbnVs
bEN1cnNvcjsKICAgIFhtRHJhZ0N1cnNvclJlYyAqY3Vyc29yQ2FjaGU7CiAgICBDYXJkaW5hbCBt
YXhDdXJzb3JXaWR0aDsKICAgIENhcmRpbmFsIG1heEN1cnNvckhlaWdodDsKCiAgICBDdXJzb3Ig
bWVudUN1cnNvcjsKICAgIHVuc2lnbmVkIGNoYXIgdW5wb3N0QmVoYXZpb3I7CiAgICBYRm9udFN0
cnVjdCAqZm9udF9zdHJ1Y3Q7CiAgICBpbnQgaF91bml0OwogICAgaW50IHZfdW5pdDsKICAgIFht
U2NyYXRjaFBpeG1hcCBzY3JhdGNoUGl4bWFwczsKICAgIHVuc2lnbmVkIGNoYXIgbW92ZU9wYXF1
ZTsKCiAgICBYbURyYWdJY29uT2JqZWN0IHhtU3RhdGVDdXJzb3JJY29uOwogICAgWG1EcmFnSWNv
bk9iamVjdCB4bU1vdmVDdXJzb3JJY29uOwogICAgWG1EcmFnSWNvbk9iamVjdCB4bUNvcHlDdXJz
b3JJY29uOwogICAgWG1EcmFnSWNvbk9iamVjdCB4bUxpbmtDdXJzb3JJY29uOwogICAgWG1EcmFn
SWNvbk9iamVjdCB4bVNvdXJjZUN1cnNvckljb247CgogICAgR0MgaW1hZ2VHQzsKICAgIGludCBp
bWFnZUdDRGVwdGg7CiAgICBQaXhlbCBpbWFnZUZvcmVncm91bmQ7CiAgICBQaXhlbCBpbWFnZUJh
Y2tncm91bmQ7CgogICAgWHRQb2ludGVyIHNjcmVlbkluZm87Cn0gWG1TY3JlZW5QYXJ0LCAqWG1T
Y3JlZW5QYXJ0UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgX1htU2NyZWVuSW5mbyB7CiAgICBYdFBvaW50
ZXIgbWVudV9zdGF0ZTsKICAgIEJvb2xlYW4gZGVzdHJveUNhbGxiYWNrQWRkZWQ7Cn0gWG1TY3Jl
ZW5JbmZvOwoKZXh0ZXJuIFhtU2NyZWVuQ2xhc3NSZWMgeG1TY3JlZW5DbGFzc1JlYzsKCnR5cGVk
ZWYgc3RydWN0IF9YbVNjcmVlblJlYyB7CiAgICBDb3JlUGFydCBjb3JlOwogICAgWG1EZXNrdG9w
UGFydCBkZXNrdG9wOwogICAgWG1TY3JlZW5QYXJ0IHNjcmVlbjsKfSBYbVNjcmVlblJlYzsKCmV4
dGVybiBYcm1RdWFyayBfWG1JbnZhbGlkQ3Vyc29ySWNvblF1YXJrOwpleHRlcm4gWHJtUXVhcmsg
X1htVmFsaWRDdXJzb3JJY29uUXVhcms7CmV4dGVybiBYcm1RdWFyayBfWG1Ob25lQ3Vyc29ySWNv
blF1YXJrOwpleHRlcm4gWHJtUXVhcmsgX1htRGVmYXVsdERyYWdJY29uUXVhcms7CmV4dGVybiBY
cm1RdWFyayBfWG1Nb3ZlQ3Vyc29ySWNvblF1YXJrOwpleHRlcm4gWHJtUXVhcmsgX1htQ29weUN1
cnNvckljb25RdWFyazsKZXh0ZXJuIFhybVF1YXJrIF9YbUxpbmtDdXJzb3JJY29uUXVhcms7CgoK
CgpleHRlcm4gWG1EcmFnSWNvbk9iamVjdCBfWG1TY3JlZW5HZXRPcGVyYXRpb25JY29uKFdpZGdl
dCB3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgb3BlcmF0aW9uKTsKZXh0ZXJuIFhtRHJhZ0ljb25PYmplY3QgX1htU2NyZWVu
R2V0U3RhdGVJY29uKFdpZGdldCB3LCB1bnNpZ25lZCBjaGFyIHN0YXRlKTsKZXh0ZXJuIFhtRHJh
Z0ljb25PYmplY3QgX1htU2NyZWVuR2V0U291cmNlSWNvbihXaWRnZXQgdyk7CmV4dGVybiBQaXht
YXAgX1htQWxsb2NTY3JhdGNoUGl4bWFwKFhtU2NyZWVuIHhtU2NyZWVuLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBkZXB0aCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEaW1lbnNpb24gaGVpZ2h0KTsKZXh0ZXJuIHZvaWQgX1htRnJlZVNjcmF0
Y2hQaXhtYXAoWG1TY3JlZW4geG1TY3JlZW4sIFBpeG1hcCBwaXhtYXApOwpleHRlcm4gWG1EcmFn
Q3Vyc29yQ2FjaGUgKiBfWG1HZXREcmFnQ3Vyc29yQ2FjaGVQdHIoWG1TY3JlZW4geG1TY3JlZW4p
OwpleHRlcm4gdm9pZCBfWG1HZXRNYXhDdXJzb3JTaXplKFdpZGdldCB3LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIERpbWVuc2lvbiAqd2lkdGgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRGltZW5zaW9uICpoZWlnaHQpOwpleHRlcm4gQ3Vyc29yIF9YbUdldE51bGxD
dXJzb3IoV2lkZ2V0IHcpOwpleHRlcm4gQ3Vyc29yIF9YbUdldE1lbnVDdXJzb3JCeVNjcmVlbihT
Y3JlZW4gKnNjcmVlbik7CmV4dGVybiBCb29sZWFuIF9YbUdldE1vdmVPcGFxdWVCeVNjcmVlbihT
Y3JlZW4gKnNjcmVlbik7CmV4dGVybiB1bnNpZ25lZCBjaGFyIF9YbUdldFVucG9zdEJlaGF2aW9y
KFdpZGdldCB3aWQpOwpleHRlcm4gaW50IF9YbUdldEZvbnRVbml0KFNjcmVlbiAqc2NyZWVuLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaW1lbnNpb24pOwpleHRlcm4gdm9pZCBfWG1T
Y3JlZW5SZW1vdmVGcm9tQ3Vyc29yQ2FjaGUoWG1EcmFnSWNvbk9iamVjdCBpY29uKTsKZXh0ZXJu
IFdpZGdldENsYXNzIHhtUm93Q29sdW1uV2lkZ2V0Q2xhc3M7Cgp0eXBlZGVmIHN0cnVjdCBfWG1S
b3dDb2x1bW5SZWMgKlhtUm93Q29sdW1uV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1Sb3dDb2x1
bW5DbGFzc1JlYyAqWG1Sb3dDb2x1bW5XaWRnZXRDbGFzczsKCgoKCgpleHRlcm4gV2lkZ2V0IFht
Q3JlYXRlTWVudUJhcihXaWRnZXQgcGFyZW50LCBjaGFyICpuYW1lLCBBcmcgKmFyZ2xpc3QsIENh
cmRpbmFsIGFyZ2NvdW50KTsKZXh0ZXJuIFdpZGdldCBYbUNyZWF0ZU9wdGlvbk1lbnUoV2lkZ2V0
IHBhcmVudCwgY2hhciAqbmFtZSwgQXJnICphcmdsaXN0LCBDYXJkaW5hbCBhcmdjb3VudCk7CmV4
dGVybiBXaWRnZXQgWG1DcmVhdGVQb3B1cE1lbnUoV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwg
QXJnICphcmdsaXN0LCBDYXJkaW5hbCBhcmdjb3VudCk7CmV4dGVybiBXaWRnZXQgWG1DcmVhdGVQ
dWxsZG93bk1lbnUoV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwgQXJnICphcmdsaXN0LCBDYXJk
aW5hbCBhcmdjb3VudCk7CmV4dGVybiBXaWRnZXQgWG1DcmVhdGVSYWRpb0JveChXaWRnZXQgcGFy
ZW50LCBjaGFyICpuYW1lLCBBcmcgKmFyZ2xpc3QsIENhcmRpbmFsIGFyZ2NvdW50KTsKZXh0ZXJu
IFdpZGdldCBYbUNyZWF0ZVJvd0NvbHVtbihXaWRnZXQgcGFyZW50LCBjaGFyICpuYW1lLCBBcmcg
KmFyZ2xpc3QsIENhcmRpbmFsIGFyZ2NvdW50KTsKZXh0ZXJuIFdpZGdldCBYbUNyZWF0ZVdvcmtB
cmVhKFdpZGdldCBwYXJlbnQsIGNoYXIgKm5hbWUsIEFyZyAqYXJnbGlzdCwgQ2FyZGluYWwgYXJn
Y291bnQpOwoKZXh0ZXJuIFdpZGdldCBYbU9wdGlvbkJ1dHRvbkdhZGdldChXaWRnZXQgb3B0aW9u
X21lbnUpOwpleHRlcm4gV2lkZ2V0IFhtT3B0aW9uTGFiZWxHYWRnZXQoV2lkZ2V0IG9wdGlvbl9t
ZW51KTsKCmV4dGVybiB2b2lkIFhtTWVudVBvc2l0aW9uKFdpZGdldCBtZW51LCBYQnV0dG9uUHJl
c3NlZEV2ZW50ICpldmVudCk7CmV4dGVybiBXaWRnZXQgWG1HZXRUZWFyT2ZmQ29udHJvbChXaWRn
ZXQgbWVudSk7CgpleHRlcm4gdm9pZCBYbUFkZFRvUG9zdEZyb21MaXN0KFdpZGdldCBtZW51X3dp
ZCwgV2lkZ2V0IHdpZGdldCk7CmV4dGVybiB2b2lkIFhtUmVtb3ZlRnJvbVBvc3RGcm9tTGlzdChX
aWRnZXQgbWVudV93aWQsIFdpZGdldCB3aWRnZXQpOwpleHRlcm4gV2lkZ2V0IFhtR2V0UG9zdGVk
RnJvbVdpZGdldChXaWRnZXQgbWVudSk7CnR5cGVkZWYgc3RydWN0IF9YbUJ1dHRvbkV2ZW50U3Rh
dHVzUmVjIHsKICAgIFRpbWUgdGltZTsKICAgIEJvb2xlYW4gdmVyaWZpZWQ7CiAgICBCb29sZWFu
IHdhaXRpbmdfdG9fYmVfbWFuYWdlZDsKICAgIFhCdXR0b25FdmVudCBldmVudDsKfSBYbUJ1dHRv
bkV2ZW50U3RhdHVzUmVjOwoKCnR5cGVkZWYgc3RydWN0IF9YbVJlcGxheUluZm9SZWMgewogICAg
VGltZSB0aW1lOwogICAgV2lkZ2V0IHRvcGxldmVsX21lbnU7Cn0gWG1SZXBsYXlJbmZvUmVjOwoK
dHlwZWRlZiBzdHJ1Y3QgX1htTWVudUZvY3VzUmVjIHsKICAgIFdpZGdldCBvbGRXaWRnZXQ7CiAg
ICBXaW5kb3cgb2xkRm9jdXM7CiAgICBpbnQgb2xkUmV2ZXJ0Owp9IFhtTWVudUZvY3VzUmVjOwoK
CnR5cGVkZWYgc3RydWN0IF9YbU1lbnVTdGF0ZVJlYyB7CiAgICBXaWRnZXQgUkNfTGFzdFNlbGVj
dFRvcGxldmVsOwogICAgWG1CdXR0b25FdmVudFN0YXR1c1JlYyBSQ19CdXR0b25FdmVudFN0YXR1
czsKICAgIFhtUmVwbGF5SW5mb1JlYyBSQ19SZXBsYXlJbmZvOwoKICAgIFdpZGdldCBSQ19hY3Rp
dmVJdGVtOwogICAgWG1NZW51Rm9jdXNSZWMgUkNfbWVudUZvY3VzOwoKICAgIEJvb2xlYW4gUkNf
YWxsb3dBY2NlbGVyYXRlZEluc2Vuc2l0aXZlVW5tYW5hZ2VkTWVudUl0ZW1zOwogICAgVGltZSBN
U19MYXN0TWFuYWdlZE1lbnVUaW1lOwogICAgQm9vbGVhbiBNVV9JbkRyYWdNb2RlOwogICAgV2lk
Z2V0IE1VX0N1cnJlbnRNZW51Q2hpbGQ7CiAgICBCb29sZWFuIE1VX0luUE1Nb2RlOwp9IFhtTWVu
dVN0YXRlUmVjLCAqWG1NZW51U3RhdGU7CgoKCnR5cGVkZWYgc3RydWN0IF9YbVJDS2lkR2VvbWV0
cnlSZWMKewogICAgV2lkZ2V0IGtpZDsKICAgIFh0V2lkZ2V0R2VvbWV0cnkgYm94OwogICAgRGlt
ZW5zaW9uIG1hcmdpbl90b3A7CiAgICBEaW1lbnNpb24gbWFyZ2luX2JvdHRvbTsKICAgIERpbWVu
c2lvbiBiYXNlbGluZTsKfSBYbVJDS2lkR2VvbWV0cnlSZWMsICpYbVJDS2lkR2VvbWV0cnk7CgoK
dHlwZWRlZiBzdHJ1Y3QgewogICAgRGltZW5zaW9uIG1hcmdpbl9oZWlnaHQ7CiAgICBEaW1lbnNp
b24gbWFyZ2luX3dpZHRoOwoKICAgIERpbWVuc2lvbiBzcGFjaW5nOwoKICAgIERpbWVuc2lvbiBl
bnRyeV9ib3JkZXI7CgogICAgV2lkZ2V0IGhlbHBfcHVzaGJ1dHRvbjsKICAgIFdpZGdldCBjYXNj
YWRlQnRuOwoKICAgIFhtU3RyaW5nIG9wdGlvbl9sYWJlbDsKICAgIFdpZGdldCBvcHRpb25fc3Vi
bWVudTsKCiAgICBYbVJDS2lkR2VvbWV0cnkgYm94ZXM7CgogICAgV2lkZ2V0Q2xhc3MgZW50cnlf
Y2xhc3M7CgogICAgWHRDYWxsYmFja0xpc3QgZW50cnlfY2FsbGJhY2s7CiAgICBYdENhbGxiYWNr
TGlzdCBtYXBfY2FsbGJhY2s7CiAgICBYdENhbGxiYWNrTGlzdCB1bm1hcF9jYWxsYmFjazsKCiAg
ICBXaWRnZXQgbWVtb3J5X3N1YndpZGdldDsKCiAgICBzaG9ydCBudW1fY29sdW1uczsKCiAgICBT
dHJpbmcgbWVudVBvc3Q7CgogICAgdW5zaWduZWQgaW50IHBvc3RCdXR0b247CiAgICBpbnQgcG9z
dEV2ZW50VHlwZTsKICAgIHVuc2lnbmVkIGludCBwb3N0TW9kaWZpZXJzOwoKICAgIFN0cmluZyBt
ZW51X2FjY2VsZXJhdG9yOwogICAgS2V5U3ltIG1uZW1vbmljOwogICAgWG1TdHJpbmdDaGFyU2V0
IG1uZW1vbmljQ2hhclNldDsKCiAgICB1bnNpZ25lZCBjaGFyIGVudHJ5X2FsaWdubWVudDsKCiAg
ICB1bnNpZ25lZCBjaGFyIHBhY2tpbmc7CgogICAgdW5zaWduZWQgY2hhciB0eXBlOwoKICAgIHVu
c2lnbmVkIGNoYXIgb3JpZW50YXRpb247CgogICAgQm9vbGVhbiBhcm1lZDsKICAgIEJvb2xlYW4g
YWRqdXN0X21hcmdpbjsKICAgIEJvb2xlYW4gYWRqdXN0X2xhc3Q7CiAgICBCb29sZWFuIGRvX2Fs
aWdubWVudDsKICAgIEJvb2xlYW4gcmFkaW87CiAgICBCb29sZWFuIHJhZGlvX29uZTsKICAgIEJv
b2xlYW4gaG9tb2dlbmVvdXM7CiAgICBCb29sZWFuIHJlc2l6ZV93aWR0aDsKICAgIEJvb2xlYW4g
cmVzaXplX2hlaWdodDsKCiAgICBCb29sZWFuIHBvcHVwX2VuYWJsZWQ7CgogICAgRGltZW5zaW9u
IG9sZF93aWR0aDsKICAgIERpbWVuc2lvbiBvbGRfaGVpZ2h0OwogICAgRGltZW5zaW9uIG9sZF9z
aGFkb3dfdGhpY2tuZXNzOwoKICAgIFdpZGdldCAqcG9zdEZyb21MaXN0OwogICAgaW50IHBvc3RG
cm9tQ291bnQ7CiAgICBpbnQgcG9zdEZyb21MaXN0U2l6ZTsKCiAgICBXaWRnZXQgbGFzdFNlbGVj
dFRvcGxldmVsOwogICAgV2lkZ2V0IHBvcHVwUG9zdGVkOwoKICAgIHVuc2lnbmVkIGNoYXIgb2xk
Rm9jdXNQb2xpY3k7CgogICAgdW5zaWduZWQgY2hhciBUZWFyT2ZmTW9kZWw7CiAgICBXaWRnZXQg
UGFyZW50U2hlbGw7CiAgICBXaWRnZXQgdGVhcl9vZmZfY29udHJvbDsKICAgIEJvb2xlYW4gdG9f
c3RhdGU7CgogICAgWHRDYWxsYmFja0xpc3QgdGVhcl9vZmZfYWN0aXZhdGVkX2NhbGxiYWNrOwog
ICAgWHRDYWxsYmFja0xpc3QgdGVhcl9vZmZfZGVhY3RpdmF0ZWRfY2FsbGJhY2s7CiAgICBXaWRn
ZXQgdGVhcl9vZmZfbGFzdFNlbGVjdFRvcGxldmVsOwogICAgV2lkZ2V0IHRlYXJfb2ZmX2ZvY3Vz
X2l0ZW07CgogICAgdW5zaWduZWQgY2hhciBlbnRyeV92ZXJ0aWNhbF9hbGlnbm1lbnQ7CiAgICB1
bnNpZ25lZCBjaGFyIHBvcHVwX21lbnVfY2xpY2s7CiAgICBYdEludGVydmFsSWQgcG9wdXBfdGlt
ZW91dF90aW1lcjsKfSBYbVJvd0NvbHVtblBhcnQ7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htUm93Q29s
dW1uUmVjIHsKICAgIENvcmVQYXJ0IGNvcmU7CiAgICBDb21wb3NpdGVQYXJ0IGNvbXBvc2l0ZTsK
ICAgIENvbnN0cmFpbnRQYXJ0IGNvbnN0cmFpbnQ7CiAgICBYbU1hbmFnZXJQYXJ0IG1hbmFnZXI7
CiAgICBYbVJvd0NvbHVtblBhcnQgcm93X2NvbHVtbjsKfSBYbVJvd0NvbHVtblJlYzsKCgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBYbU1lbnVQcm9jIG1lbnVQcm9jZWR1cmVzOwogICAgWHRBY3Rpb25Q
cm9jIGFybUFuZEFjdGl2YXRlOwogICAgWG1NZW51VHJhdmVyc2FsUHJvYyB0cmF2ZXJzYWxIYW5k
bGVyOwogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBYbVJvd0NvbHVtbkNsYXNzUGFydDsKCgp0
eXBlZGVmIHN0cnVjdCBfWG1Sb3dDb2x1bW5DbGFzc1JlYyB7CiAgICBDb3JlQ2xhc3NQYXJ0IGNv
cmVfY2xhc3M7CiAgICBDb21wb3NpdGVDbGFzc1BhcnQgY29tcG9zaXRlX2NsYXNzOwogICAgQ29u
c3RyYWludENsYXNzUGFydCBjb25zdHJhaW50X2NsYXNzOwogICAgWG1NYW5hZ2VyQ2xhc3NQYXJ0
IG1hbmFnZXJfY2xhc3M7CiAgICBYbVJvd0NvbHVtbkNsYXNzUGFydCByb3dfY29sdW1uX2NsYXNz
Owp9IFhtUm93Q29sdW1uQ2xhc3NSZWM7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htUm93Q29sdW1uQ29u
c3RyYWludFBhcnQgewogICAgQm9vbGVhbiB3YXNfbWFuYWdlZDsKICAgIERpbWVuc2lvbiBtYXJn
aW5fdG9wOwogICAgRGltZW5zaW9uIG1hcmdpbl9ib3R0b207CiAgICBEaW1lbnNpb24gYmFzZWxp
bmU7CiAgICBzaG9ydCBwb3NpdGlvbl9pbmRleDsKfSBYbVJvd0NvbHVtbkNvbnN0cmFpbnRQYXJ0
OwoKdHlwZWRlZiBzdHJ1Y3QgX1htUm93Q29sdW1uQ29uc3RyYWludFJlYyB7CiAgICBYbU1hbmFn
ZXJDb25zdHJhaW50UGFydCBtYW5hZ2VyOwogICAgWG1Sb3dDb2x1bW5Db25zdHJhaW50UGFydCBy
b3dfY29sdW1uOwp9IFhtUm93Q29sdW1uQ29uc3RyYWludFJlYywgKlhtUm93Q29sdW1uQ29uc3Ry
YWludHM7CmV4dGVybiBYbVJvd0NvbHVtbkNsYXNzUmVjIHhtUm93Q29sdW1uQ2xhc3NSZWM7CmVu
dW0gewogICAgWG1XRUFLX0NIRUNLID0gMSwKICAgIFhtTUVESVVNX0NIRUNLLAogICAgWG1TVFJP
TkdfQ0hFQ0sKfTsKCmVudW0gewogICAgWG1NRU5VX0JFR0lOLAogICAgWG1NRU5VX01JRERMRSwK
ICAgIFhtTUVOVV9FTkQKfTsKCgoKCmVudW0gewogICAgQU5ZX0NISUxELAogICAgRklSU1RfQlVU
VE9OCn07Cgp2b2lkIF9MdFJDRW50cnlDYWxsYmFjayhXaWRnZXQgdywgWHRDYWxsYmFja0xpc3Qg
Y2JfbGlzdCwgWHRQb2ludGVyIGNicyk7Cgp2b2lkIF9YbVBvc3RQb3B1cE1lbnUoV2lkZ2V0IHdp
ZCwgWEV2ZW50ICpldmVudCk7CnZvaWQgX1htU2V0UG9wdXBNZW51Q2xpY2soV2lkZ2V0IHdpZCwg
Qm9vbGVhbiBwb3B1cE1lbnVDbGljayk7CkJvb2xlYW4gX1htR2V0UG9wdXBNZW51Q2xpY2soV2lk
Z2V0IHdpZCk7CnZvaWQgX1htQWxsb3dBY2NlbGVyYXRlZEluc2Vuc2l0aXZlVW5tYW5hZ2VkTWVu
dUl0ZW1zKFdpZGdldCB3aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJvb2xlYW4gYWxsb3dlZCk7CnZvaWQgX1htU2V0U3dhbGxvd0V2ZW50
SGFuZGxlcihXaWRnZXQgd2lkZ2V0LCBCb29sZWFuIGFkZF9oYW5kbGVyKTsKdm9pZCBfWG1NZW51
Rm9jdXMoV2lkZ2V0IHcsIGludCBvcGVyYXRpb24sIFRpbWUgX3RpbWUpOwp2b2lkIF9YbUdldEFj
dGl2ZVRvcExldmVsTWVudShXaWRnZXQgd2lkLCBXaWRnZXQgKnJ3aWQpOwpCb29sZWFuIF9YbU1h
dGNoQlNlbGVjdEV2ZW50KFdpZGdldCB3aWQsIFhFdmVudCAqZXZlbnQpOwpCb29sZWFuIF9YbU1h
dGNoQkRyYWdFdmVudChXaWRnZXQgd2lkLCBYRXZlbnQgKmV2ZW50KTsKdm9pZCBfWG1IYW5kbGVN
ZW51QnV0dG9uUHJlc3MoV2lkZ2V0IHdpZCwgWEV2ZW50ICpldmVudCk7CnZvaWQgX1htTWVudUJ0
bkRvd24oV2lkZ2V0IHdpZCwgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1NZW51QnRu
VXAoV2lkZ2V0IHdpZCwgWEV2ZW50ICpldmVudCwKICAgICAgICAgICAgICAgICAgU3RyaW5nICpw
YXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKTsKdm9pZCBfWG1DYWxsUm93Q29sdW1uTWFwQ2Fs
bGJhY2soV2lkZ2V0IHdpZCwgWEV2ZW50ICpldmVudCk7CnZvaWQgX1htQ2FsbFJvd0NvbHVtblVu
bWFwQ2FsbGJhY2soV2lkZ2V0IHdpZCwgWEV2ZW50ICpldmVudCk7CnZvaWQgX1htTWVudVBvcERv
d24oV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIEJvb2xlYW4gKnBvcHBlZF91cCk7CkJvb2xlYW4g
X1htSXNBY3RpdmVUZWFyT2ZmKFdpZGdldCB3KTsKdm9pZCBfWG1NZW51SGVscChXaWRnZXQgd2lk
LCBYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5h
bCAqbnVtX3BhcmFtcyk7CldpZGdldCBfWG1NZW51TmV4dEl0ZW0oV2lkZ2V0IG1lbnUsIFdpZGdl
dCBjdXJyZW50X2l0ZW0pOwpleHRlcm4gV2lkZ2V0Q2xhc3MgeG1TZWxlY3Rpb25Cb3hXaWRnZXRD
bGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbVNlbGVjdGlvbkJveFJlYyAqWG1TZWxlY3Rpb25Cb3hX
aWRnZXQ7CnR5cGVkZWYgc3RydWN0IF9YbVNlbGVjdGlvbkJveENsYXNzUmVjICpYbVNlbGVjdGlv
bkJveFdpZGdldENsYXNzOwoKCgoKCmV4dGVybiBXaWRnZXQgWG1DcmVhdGVTZWxlY3Rpb25Cb3go
V2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwgQXJnICphcmdMaXN0LCBDYXJkaW5hbCBhcmdjb3Vu
dCk7CmV4dGVybiBXaWRnZXQgWG1DcmVhdGVTZWxlY3Rpb25EaWFsb2coV2lkZ2V0IHBhcmVudCwg
Y2hhciAqbmFtZSwgQXJnICphcmdMaXN0LCBDYXJkaW5hbCBhcmdjb3VudCk7CmV4dGVybiBXaWRn
ZXQgWG1DcmVhdGVQcm9tcHREaWFsb2coV2lkZ2V0IHBhcmVudCwgY2hhciAqbmFtZSwgQXJnICph
cmdMaXN0LCBDYXJkaW5hbCBhcmdjb3VudCk7CmV4dGVybiBXaWRnZXQgWG1TZWxlY3Rpb25Cb3hH
ZXRDaGlsZChXaWRnZXQgcGFyZW50LCB1bnNpZ25lZCBjaGFyIGNoaWxkKTsKZXh0ZXJuIFdpZGdl
dENsYXNzIHhtVGV4dFdpZGdldENsYXNzOwoKdHlwZWRlZiBzdHJ1Y3QgX1htVGV4dFJlYyAqWG1U
ZXh0V2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1UZXh0Q2xhc3NSZWMgKlhtVGV4dFdpZGdldENs
YXNzOwoKZXh0ZXJuIFdpZGdldCBYbUNyZWF0ZVRleHQoV2lkZ2V0IHBhcmVudCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBcmcgKmFyZ2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBhcmdD
b3VudCk7CgpleHRlcm4gV2lkZ2V0IFhtQ3JlYXRlU2Nyb2xsZWRUZXh0KFdpZGdldCBwYXJlbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcgKmFyZ2xpc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgYXJnY291bnQpOwoKCgoKCnR5cGVkZWYgc3RydWN0
IF9YbVRleHRTb3VyY2VSZWMgKlhtVGV4dFNvdXJjZTsKCnZvaWQgWG1UZXh0Q2xlYXJTZWxlY3Rp
b24oV2lkZ2V0IHdpZGdldCwgVGltZSB0aW1lKTsKQm9vbGVhbiBYbVRleHRDb3B5KFdpZGdldCB3
aWRnZXQsIFRpbWUgdGltZSk7CkJvb2xlYW4gWG1UZXh0Q3V0KFdpZGdldCB3aWRnZXQsIFRpbWUg
dGltZSk7CnZvaWQgWG1UZXh0RGlzYWJsZVJlZGlzcGxheShXaWRnZXQgd2lkZ2V0KTsKdm9pZCBY
bVRleHRFbmFibGVSZWRpc3BsYXkoV2lkZ2V0IHdpZGdldCk7CkJvb2xlYW4gWG1UZXh0RmluZFN0
cmluZyhXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBzdGFydCwgY2hhciAqc3RyaW5nLAog
ICAgICAgICAgICAgICAgICAgICAgICAgWG1UZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgWG1UZXh0
UG9zaXRpb24gKnBvc2l0aW9uKTsKQm9vbGVhbiBYbVRleHRGaW5kU3RyaW5nV2NzKFdpZGdldCB3
aWRnZXQsIFhtVGV4dFBvc2l0aW9uIHN0YXJ0LCB3Y2hhcl90ICp3Y3N0cmluZywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFhtVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFhtVGV4dFBvc2l0
aW9uICpwb3NpdGlvbik7CmludCBYbVRleHRHZXRCYXNlbGluZShXaWRnZXQgd2lkZ2V0KTsKWG1U
ZXh0UG9zaXRpb24gWG1UZXh0R2V0Q3Vyc29yUG9zaXRpb24oV2lkZ2V0IHdpZGdldCk7CkJvb2xl
YW4gWG1UZXh0R2V0RWRpdGFibGUoV2lkZ2V0IHdpZGdldCk7ClhtVGV4dFBvc2l0aW9uIFhtVGV4
dEdldEluc2VydGlvblBvc2l0aW9uKFdpZGdldCB3aWRnZXQpOwpYbVRleHRQb3NpdGlvbiBYbVRl
eHRHZXRMYXN0UG9zaXRpb24oV2lkZ2V0IHdpZGdldCk7CmludCBYbVRleHRHZXRNYXhMZW5ndGgo
V2lkZ2V0IHdpZGdldCk7CmNoYXIgKlhtVGV4dEdldFNlbGVjdGlvbihXaWRnZXQgd2lkZ2V0KTsK
Qm9vbGVhbiBYbVRleHRHZXRTZWxlY3Rpb25Qb3NpdGlvbihXaWRnZXQgd2lkZ2V0LCBYbVRleHRQ
b3NpdGlvbiAqbGVmdCwgWG1UZXh0UG9zaXRpb24gKnJpZ2h0KTsKd2NoYXJfdCAqWG1UZXh0R2V0
U2VsZWN0aW9uV2NzKFdpZGdldCB3aWRnZXQpOwpYbVRleHRTb3VyY2UgWG1UZXh0R2V0U291cmNl
KFdpZGdldCB3aWRnZXQpOwpjaGFyICpYbVRleHRHZXRTdHJpbmcoV2lkZ2V0IHdpZGdldCk7Cndj
aGFyX3QgKlhtVGV4dEdldFN0cmluZ1djcyhXaWRnZXQgd2lkZ2V0KTsKaW50IFhtVGV4dEdldFN1
YnN0cmluZyhXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBzdGFydCwgaW50IG51bV9jaGFy
cywgaW50IGJ1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlcik7
CmludCBYbVRleHRHZXRTdWJzdHJpbmdXY3MoV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRpb24g
c3RhcnQsIGludCBudW1fY2hhcnMsIGludCBidWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90ICpidWZmZXIpOwpYbVRleHRQb3NpdGlvbiBYbVRleHRHZXRUb3BDaGFy
YWN0ZXIoV2lkZ2V0IHdpZGdldCk7CnZvaWQgWG1UZXh0SW5zZXJ0KFdpZGdldCB3aWRnZXQsIFht
VGV4dFBvc2l0aW9uIHBvc2l0aW9uLCBjaGFyICpzdHJpbmcpOwp2b2lkIFhtVGV4dEluc2VydFdj
cyhXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBwb3NpdGlvbiwgd2NoYXJfdCAqd2NzdHJp
bmcpOwpCb29sZWFuIFhtVGV4dFBhc3RlKFdpZGdldCB3aWRnZXQpOwpCb29sZWFuIFhtVGV4dFBv
c1RvWFkoV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRpb24gcG9zaXRpb24sIFBvc2l0aW9uICp4
LCBQb3NpdGlvbiAqeSk7CkJvb2xlYW4gWG1UZXh0UmVtb3ZlKFdpZGdldCB3aWRnZXQpOwp2b2lk
IFhtVGV4dFJlcGxhY2UoV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRpb24gZnJvbV9wb3MsIFht
VGV4dFBvc2l0aW9uIHRvX3BvcywKICAgICAgICAgICAgICAgICAgIGNoYXIgKnZhbHVlKTsKdm9p
ZCBYbVRleHRSZXBsYWNlV2NzKFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIGZyb21fcG9z
LCBYbVRleHRQb3NpdGlvbiB0b19wb3MsCiAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICp3
Y3N0cmluZyk7CnZvaWQgWG1UZXh0U2Nyb2xsKFdpZGdldCB3aWRnZXQsIGludCBsaW5lcyk7CnZv
aWQgWG1UZXh0U2V0QWRkTW9kZShXaWRnZXQgd2lkZ2V0LCBCb29sZWFuIHN0YXRlKTsKdm9pZCBY
bVRleHRTZXRDdXJzb3JQb3NpdGlvbihXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBwb3Np
dGlvbik7CnZvaWQgWG1UZXh0U2V0RWRpdGFibGUoV2lkZ2V0IHdpZGdldCwgQm9vbGVhbiBlZGl0
YWJsZSk7CnZvaWQgWG1UZXh0U2V0SGlnaGxpZ2h0KFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0
aW9uIGxlZnQsIFhtVGV4dFBvc2l0aW9uIHJpZ2h0LCBYbUhpZ2hsaWdodE1vZGUgbW9kZSk7CnZv
aWQgWG1UZXh0U2V0SW5zZXJ0aW9uUG9zaXRpb24oV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRp
b24gcG9zaXRpb24pOwp2b2lkIFhtVGV4dFNldE1heExlbmd0aChXaWRnZXQgd2lkZ2V0LCBpbnQg
bWF4X2xlbmd0aCk7CnZvaWQgWG1UZXh0U2V0U2VsZWN0aW9uKFdpZGdldCB3aWRnZXQsIFhtVGV4
dFBvc2l0aW9uIGZpcnN0LCBYbVRleHRQb3NpdGlvbiBsYXN0LCBUaW1lIHRpbWUpOwp2b2lkIFht
VGV4dFNldFNvdXJjZShXaWRnZXQgd2lkZ2V0LCBYbVRleHRTb3VyY2Ugc291cmNlLCBYbVRleHRQ
b3NpdGlvbiB0b3BfY2hhcmFjdGVyLCBYbVRleHRQb3NpdGlvbiBjdXJzb3JfcG9zaXRpb24pOwp2
b2lkIFhtVGV4dFNldFN0cmluZyhXaWRnZXQgd2lkZ2V0LCBjaGFyICp2YWx1ZSk7CnZvaWQgWG1U
ZXh0U2V0U3RyaW5nV2NzKFdpZGdldCB3aWRnZXQsIHdjaGFyX3QgKndjc3RyaW5nKTsKdm9pZCBY
bVRleHRTZXRUb3BDaGFyYWN0ZXIoV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRpb24gdG9wX2No
YXJhY3Rlcik7CnZvaWQgWG1UZXh0U2hvd1Bvc2l0aW9uKFdpZGdldCB3aWRnZXQsIFhtVGV4dFBv
c2l0aW9uIHBvc2l0aW9uKTsKWG1UZXh0UG9zaXRpb24gWG1UZXh0WFlUb1BvcyhXaWRnZXQgd2lk
Z2V0LCBQb3NpdGlvbiB4LCBQb3NpdGlvbiB5KTsKZXh0ZXJuIFdpZGdldENsYXNzIHhtTGFiZWxH
YWRnZXRDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbUxhYmVsR2FkZ2V0UmVjICpYbUxhYmVsR2Fk
Z2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1MYWJlbEdhZGdldENsYXNzUmVjICpYbUxhYmVsR2FkZ2V0
Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9YbUxhYmVsR0NhY2hlT2JqUmVjICpYbUxhYmVsR0NhY2hl
T2JqZWN0OwoKCgoKCmV4dGVybiBXaWRnZXQgWG1DcmVhdGVMYWJlbEdhZGdldChXaWRnZXQgcGFy
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZyAqYXJnbGlzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIGFyZ0NvdW50KTsKCmV4dGVybiBXaWRnZXQgWG1D
cmVhdGVMYWJlbEdhZGdldChXaWRnZXQgcGFyZW50LCBjaGFyICpuYW1lLCBBcmcgKmFyZ2xpc3Qs
IENhcmRpbmFsIGFyZ2NvdW50KTsKdHlwZWRlZiBzdHJ1Y3QgX1htTGFiZWxHQ2FjaGVPYmpDbGFz
c1BhcnQgewogICAgICAgIGludCBmb287Cn0gWG1MYWJlbEdDYWNoZU9iakNsYXNzUGFydDsKCnR5
cGVkZWYgc3RydWN0IF9YbUxhYmVsR0NhY2hlT2JqQ2xhc3NSZWMgewogICAgICAgIE9iamVjdENs
YXNzUGFydCBvYmplY3RfY2xhc3M7CiAgICAgICAgWG1FeHRDbGFzc1BhcnQgZXh0X2NsYXNzOwog
ICAgICAgIFhtTGFiZWxHQ2FjaGVPYmpDbGFzc1BhcnQgbGFiZWxfY2xhc3NfY2FjaGU7Cn0gWG1M
YWJlbEdDYWNoZU9iakNsYXNzUmVjOwoKZXh0ZXJuIFhtTGFiZWxHQ2FjaGVPYmpDbGFzc1JlYyB4
bUxhYmVsR0NhY2hlT2JqQ2xhc3NSZWM7Cgp0eXBlZGVmIHN0cnVjdCBfWG1MYWJlbEdDYWNoZU9i
alBhcnQgewogICAgICAgIHVuc2lnbmVkIGNoYXIgbGFiZWxfdHlwZTsKICAgICAgICB1bnNpZ25l
ZCBjaGFyIGFsaWdubWVudDsKICAgICAgICBYbVN0cmluZ0RpcmVjdGlvbiBzdHJpbmdfZGlyZWN0
aW9uOwoKICAgICAgICBEaW1lbnNpb24gbWFyZ2luX2hlaWdodDsKICAgICAgICBEaW1lbnNpb24g
bWFyZ2luX3dpZHRoOwogICAgICAgIERpbWVuc2lvbiBtYXJnaW5fbGVmdDsKICAgICAgICBEaW1l
bnNpb24gbWFyZ2luX3JpZ2h0OwogICAgICAgIERpbWVuc2lvbiBtYXJnaW5fdG9wOwogICAgICAg
IERpbWVuc2lvbiBtYXJnaW5fYm90dG9tOwoKICAgICAgICBCb29sZWFuIHJlY29tcHV0ZV9zaXpl
OwoKICAgICAgICBCb29sZWFuIHNraXBDYWxsYmFjazsKCiAgICAgICAgdW5zaWduZWQgY2hhciBt
ZW51X3R5cGU7Cn0gWG1MYWJlbEdDYWNoZU9ialBhcnQ7Cgp0eXBlZGVmIHN0cnVjdCBfWG1MYWJl
bEdDYWNoZU9ialJlYyB7CiAgICAgICAgT2JqZWN0UGFydCBvYmplY3Q7CiAgICAgICAgWG1FeHRQ
YXJ0IGV4dDsKICAgICAgICBYbUxhYmVsR0NhY2hlT2JqUGFydCBsYWJlbF9jYWNoZTsKfSBYbUxh
YmVsR0NhY2hlT2JqUmVjOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1htTGFiZWxHYWRnZXRDbGFzc1Bh
cnQgewogICAgICAgIFh0V2lkZ2V0UHJvYyBzZXRPdmVycmlkZUNhbGxiYWNrOwogICAgICAgIFht
TWVudVByb2MgbWVudVByb2NzOwogICAgICAgIFh0UG9pbnRlciBleHRlbnNpb247Cn0gWG1MYWJl
bEdhZGdldENsYXNzUGFydDsKCgp0eXBlZGVmIHN0cnVjdCBfWG1MYWJlbEdhZGdldENsYXNzUmVj
IHsKICAgIFJlY3RPYmpDbGFzc1BhcnQgcmVjdF9jbGFzczsKICAgIFhtR2FkZ2V0Q2xhc3NQYXJ0
IGdhZGdldF9jbGFzczsKICAgIFhtTGFiZWxHYWRnZXRDbGFzc1BhcnQgbGFiZWxfY2xhc3M7Cn0g
WG1MYWJlbEdhZGdldENsYXNzUmVjOwoKZXh0ZXJuIFhtTGFiZWxHYWRnZXRDbGFzc1JlYyB4bUxh
YmVsR2FkZ2V0Q2xhc3NSZWM7Cgp0eXBlZGVmIHN0cnVjdCBfWG1MYWJlbEdhZGdldFBhcnQgewog
ICAgICAgIF9YbVN0cmluZyBfbGFiZWw7CiAgICAgICAgX1htU3RyaW5nIF9hY2NfdGV4dDsKICAg
ICAgICBLZXlTeW0gbW5lbW9uaWM7CiAgICAgICAgU3RyaW5nIG1uZW1vbmljQ2hhcnNldDsKICAg
ICAgICBTdHJpbmcgYWNjZWxlcmF0b3I7CiAgICAgICAgWG1Gb250TGlzdCBmb250OwoKICAgICAg
ICBQaXhtYXAgcGl4bWFwOwogICAgICAgIFBpeG1hcCBwaXhtYXBfaW5zZW47CgoKICAgICAgICBH
QyBub3JtYWxfR0M7CiAgICAgICAgR0MgaW5zZW5zaXRpdmVfR0M7CgogICAgICAgIFhSZWN0YW5n
bGUgVGV4dFJlY3Q7CiAgICAgICAgWFJlY3RhbmdsZSBhY2NfVGV4dFJlY3Q7CgogICAgICAgIFht
TGFiZWxHQ2FjaGVPYmpQYXJ0ICpjYWNoZTsKfSBYbUxhYmVsR2FkZ2V0UGFydDsKCnR5cGVkZWYg
c3RydWN0IF9YbUxhYmVsR2FkZ2V0UmVjIHsKICAgICAgICBPYmplY3RQYXJ0IG9iamVjdDsKICAg
ICAgICBSZWN0T2JqUGFydCByZWN0YW5nbGU7CiAgICAgICAgWG1HYWRnZXRQYXJ0IGdhZGdldDsK
ICAgICAgICBYbUxhYmVsR2FkZ2V0UGFydCBsYWJlbDsKfSBYbUxhYmVsR2FkZ2V0UmVjOwpleHRl
cm4gaW50IF9YbUxhYmVsQ2FjaGVDb21wYXJlKFh0UG9pbnRlciBBLCBYdFBvaW50ZXIgQik7CmV4
dGVybiB2b2lkIF9YbUNhbGNMYWJlbEdEaW1lbnNpb25zKFdpZGdldCB3aWQpOwpleHRlcm4gdm9p
ZCBfWG1SZUNhY2hlTGFiRyhXaWRnZXQgdyk7CmV4dGVybiB2b2lkIF9YbUFzc2lnbkxhYkdfTWFy
Z2luSGVpZ2h0KFhtTGFiZWxHYWRnZXQgbHcsIERpbWVuc2lvbiB2YWx1ZSk7CmV4dGVybiB2b2lk
IF9YbUFzc2lnbkxhYkdfTWFyZ2luV2lkdGgoWG1MYWJlbEdhZGdldCBsdywgRGltZW5zaW9uIHZh
bHVlKTsKZXh0ZXJuIHZvaWQgX1htQXNzaWduTGFiR19NYXJnaW5MZWZ0KFhtTGFiZWxHYWRnZXQg
bHcsIERpbWVuc2lvbiB2YWx1ZSk7CmV4dGVybiB2b2lkIF9YbUFzc2lnbkxhYkdfTWFyZ2luUmln
aHQoWG1MYWJlbEdhZGdldCBsdywgRGltZW5zaW9uIHZhbHVlKTsKZXh0ZXJuIHZvaWQgX1htQXNz
aWduTGFiR19NYXJnaW5Ub3AoWG1MYWJlbEdhZGdldCBsdywgRGltZW5zaW9uIHZhbHVlKTsKZXh0
ZXJuIHZvaWQgX1htQXNzaWduTGFiR19NYXJnaW5Cb3R0b20oWG1MYWJlbEdhZGdldCBsdywgRGlt
ZW5zaW9uIHZhbHVlKTsKCmV4dGVybiB2b2lkIF9YbVByb2Nlc3NEcmFnKFdpZGdldCB3LCBYRXZl
bnQgKmV2ZW50LCBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpOwpleHRlcm4g
V2lkZ2V0Q2xhc3MgeG1MYWJlbFdpZGdldENsYXNzOwoKdHlwZWRlZiBzdHJ1Y3QgX1htTGFiZWxS
ZWMgKlhtTGFiZWxXaWRnZXQ7CnR5cGVkZWYgc3RydWN0IF9YbUxhYmVsQ2xhc3NSZWMgKlhtTGFi
ZWxXaWRnZXRDbGFzczsKCmV4dGVybiBXaWRnZXQgWG1DcmVhdGVMYWJlbChXaWRnZXQgcGFyZW50
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFyZyAqYXJnbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENh
cmRpbmFsIGFyZ0NvdW50KTsKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIF9YbVN0cmluZyBfbGFi
ZWw7CiAgICAgICAgX1htU3RyaW5nIF9hY2NfdGV4dDsKICAgICAgICBLZXlTeW0gbW5lbW9uaWM7
CiAgICAgICAgWG1TdHJpbmdDaGFyU2V0IG1uZW1vbmljQ2hhcnNldDsKICAgICAgICBTdHJpbmcg
YWNjZWxlcmF0b3I7CiAgICAgICAgdW5zaWduZWQgY2hhciBsYWJlbF90eXBlOwogICAgICAgIHVu
c2lnbmVkIGNoYXIgYWxpZ25tZW50OwogICAgICAgIFhtU3RyaW5nRGlyZWN0aW9uIHN0cmluZ19k
aXJlY3Rpb247CiAgICAgICAgWG1Gb250TGlzdCBmb250OwoKICAgICAgICBEaW1lbnNpb24gbWFy
Z2luX2hlaWdodDsKICAgICAgICBEaW1lbnNpb24gbWFyZ2luX3dpZHRoOwoKICAgICAgICBEaW1l
bnNpb24gbWFyZ2luX2xlZnQ7CiAgICAgICAgRGltZW5zaW9uIG1hcmdpbl9yaWdodDsKICAgICAg
ICBEaW1lbnNpb24gbWFyZ2luX3RvcDsKICAgICAgICBEaW1lbnNpb24gbWFyZ2luX2JvdHRvbTsK
CiAgICAgICAgQm9vbGVhbiByZWNvbXB1dGVfc2l6ZTsKCiAgICAgICAgUGl4bWFwIHBpeG1hcDsK
ICAgICAgICBQaXhtYXAgcGl4bWFwX2luc2VuOwoKCiAgICAgICAgR0Mgbm9ybWFsX0dDOwogICAg
ICAgIEdDIGluc2Vuc2l0aXZlX0dDOwoKICAgICAgICBYUmVjdGFuZ2xlIFRleHRSZWN0OwogICAg
ICAgIFhSZWN0YW5nbGUgYWNjX1RleHRSZWN0OwoKICAgICAgICBCb29sZWFuIHNraXBDYWxsYmFj
azsKCiAgICAgICAgdW5zaWduZWQgY2hhciBtZW51X3R5cGU7Cn0gWG1MYWJlbFBhcnQ7CgoKdHlw
ZWRlZiBzdHJ1Y3QgX1htTGFiZWxSZWMgewogICAgICAgIENvcmVQYXJ0IGNvcmU7CiAgICAgICAg
WG1QcmltaXRpdmVQYXJ0IHByaW1pdGl2ZTsKICAgICAgICBYbUxhYmVsUGFydCBsYWJlbDsKfSBY
bUxhYmVsUmVjOwoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBYdFdpZGdldFByb2Mgc2V0T3Zl
cnJpZGVDYWxsYmFjazsKICAgICAgICBYbU1lbnVQcm9jIG1lbnVQcm9jczsKICAgICAgICBTdHJp
bmcgdHJhbnNsYXRpb25zOwogICAgICAgIFh0UG9pbnRlciBleHRlbnNpb247Cn0gWG1MYWJlbENs
YXNzUGFydDsKCgp0eXBlZGVmIHN0cnVjdCBfWG1MYWJlbENsYXNzUmVjIHsKICAgICAgICBDb3Jl
Q2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgICAgICAgWG1QcmltaXRpdmVDbGFzc1BhcnQgcHJpbWl0
aXZlX2NsYXNzOwogICAgICAgIFhtTGFiZWxDbGFzc1BhcnQgbGFiZWxfY2xhc3M7Cn0gWG1MYWJl
bENsYXNzUmVjOwoKCgpleHRlcm4gWG1MYWJlbENsYXNzUmVjIHhtTGFiZWxDbGFzc1JlYzsKCgoK
dm9pZCBfWG1DYWxjTGFiZWxEaW1lbnNpb25zKFdpZGdldCB3KTsKZXh0ZXJuIFhtRm9udExpc3Qg
X19YbUZvbnRMaXN0QWxsb2MoaW50IG51bWJlck9mRW50cmllcyk7CmV4dGVybiB2b2lkIF9YbUZv
bnRMaXN0RW50cnlGcmVlKFhtRm9udExpc3RFbnRyeSBlbnRyeSk7ClhtRm9udExpc3RFbnRyeSBf
WG1Gb250TGlzdEVudHJ5Q3JlYXRlKHZvaWQpOwoKCnZvaWQgX19YbVJlbmRlclRhYmxlRmluYWxp
c2UoV2lkZ2V0LCBYbUZvbnRMaXN0LCBfWG1TdHJpbmcpOwp2b2lkIF9YbVJlbmRlclRhYmxlRmlu
YWxpc2UoV2lkZ2V0LCBYbUZvbnRMaXN0LCBYbVN0cmluZyk7CnZvaWQgX1htUmVuZGVyVGFibGVG
aW5hbGlzZVRhZyhXaWRnZXQsIFhtRm9udExpc3QsIGNoYXIgKik7CgoKCgoKCnR5cGVkZWYgc3Ry
dWN0IF9fWG1SZW5kaXRpb25SZWMgewogICAgICAgIGNoYXIgKnRhZzsKICAgICAgICBYbUZvbnRU
eXBlIHR5cGU7CiAgICAgICAgWEZvbnRTZXQgZm9udDsKICAgICAgICBpbnQgY291bnQ7Cn0gKl9Y
bVJlbmRpdGlvbjsKCnN0cnVjdCBfX1htUmVuZGVyVGFibGVSZWMgewogICAgICAgIHVuc2lnbmVk
IGludCBjb3VudDsKICAgICAgICBEaXNwbGF5ICpkcHk7CiAgICAgICAgX1htUmVuZGl0aW9uICpy
ZW5kaXRpb25zOwp9OwoKc3RydWN0IF9YbUZvbnRMaXN0Q29udGV4dFJlYyB7CiAgICBYbUZvbnRM
aXN0IGZvbnRsaXN0OwogICAgaW50IGN1cnJlbnRfZW50cnk7Cn07CgpzdHJ1Y3QgX19YbVN0cmlu
Z0V4dFJlYyB7CiAgICB1bnNpZ25lZCBjaGFyIHRhZzsKICAgIHVuc2lnbmVkIGNoYXIgbGVuOwog
ICAgdW5zaWduZWQgY2hhciBkYXRhWzFdOwp9OwoKc3RydWN0IF9fWG1TdHJpbmdDb21wb25lbnRS
ZWMgewogICAgWG1TdHJpbmdDb21wb25lbnRUeXBlIHR5cGU7CiAgICBpbnQgbGVuZ3RoOwogICAg
Y2hhciAqZGF0YTsKICAgIHNob3J0IGZvbnQ7Cn07CnR5cGVkZWYgc3RydWN0IF9fWG1TdHJpbmdD
b21wb25lbnRSZWMgX1htU3RyaW5nQ29tcG9uZW50UmVjLCAqX1htU3RyaW5nQ29tcG9uZW50OwoK
c3RydWN0IF9fWG1TdHJpbmdSZWMgewogICAgc3RydWN0IF9fWG1TdHJpbmdDb21wb25lbnRSZWMg
Kipjb21wb25lbnRzOwogICAgaW50IG51bWJlcl9vZl9jb21wb25lbnRzOwp9OwoKc3RydWN0IF9f
WG1TdHJpbmdDb250ZXh0UmVjIHsKICAgIHN0cnVjdCBfX1htU3RyaW5nUmVjICpzdHJpbmc7CiAg
ICBpbnQgY3VycmVudF9jb21wb25lbnQ7Cn07CgoKCgoKc3RydWN0IF9YbXRTdHJpbmdDb250ZXh0
UmVjIHsKICAgIHN0cnVjdCBfX1htU3RyaW5nUmVjICpzdHJpbmc7CiAgICBpbnQgY3VycmVudF9j
b21wb25lbnQ7CiAgICBjaGFyICp0ZXh0OwogICAgc2hvcnQgdGV4dGxlbjsKICAgIGNoYXIgKmNo
YXJzZXQ7CiAgICBYbVN0cmluZ0RpcmVjdGlvbiBkaXJlY3Rpb247CiAgICBCb29sZWFuIHNlcGFy
YXRvcjsKfTsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFhtSU1JbnB1dFBvbGljeTsKCgoKCgp2b2lk
IF9YbUltU2VuZFNwb3QoV2lkZ2V0IHcpOwoKWElDIFhtSW1HZXRYSUMoV2lkZ2V0IHcsIFhtSU1J
bnB1dFBvbGljeSBpbnB1dF9wb2xpY3ksCiAgICAgICAgICAgQXJnTGlzdCBhcmdzLCBDYXJkaW5h
bCBudW1fYXJncyk7ClhJQyBYbUltU2V0WElDKFdpZGdldCB3LCBYSUMgeGljKTsKCgoKCgpYbVNj
cmVlbkluZm8gKl9YbUdldFNjcmVlbkluZm8oV2lkZ2V0IHcpOwoKU3RyaW5nIF9YbU1ha2VEaWFs
b2dOYW1lKFN0cmluZyBuYW1lKTsKdm9pZCBfWG1FcnJvcihXaWRnZXQgdywgY29uc3QgY2hhciAq
bWVzc2FnZSwgLi4uKTsKCgoKCgoKCnR5cGVkZWYgc3RydWN0CnsKCgogICAgQm9vbGVhbiBTaG93
VlNCLCBTaG93SFNCLCBIYXNIU0IsIEhhc1ZTQjsKICAgIFBvc2l0aW9uIEhzYlgsIEhzYlksIFZz
YlgsIFZzYlksIENsaXBYLCBDbGlwWSwgV29ya1gsIFdvcmtZOwogICAgaW50IEhzYlcsIEhzYkgs
IFZzYlcsIFZzYkgsIENsaXBXLCBDbGlwSCwgV29ya1csIFdvcmtIOwogICAgaW50IFN3WSwgU3dX
LCBTd0g7Cn0KWG1TV1ZhbHVlczsKCnR5cGVkZWYgc3RydWN0CnsKCgogICAgQm9vbGVhbiBTaG93
VlNCLCBTaG93SFNCLCBIYXNIU0IsIEhhc1ZTQjsKICAgIFBvc2l0aW9uIEhzYlgsIEhzYlksIFZz
YlgsIFZzYlksIENsaXBYLCBDbGlwWSwgV29ya1gsIFdvcmtZOwogICAgaW50IEhzYlcsIEhzYkgs
IFZzYlcsIFZzYkgsIENsaXBXLCBDbGlwSCwgV29ya1csIFdvcmtIOwogICAgaW50IFN3WSwgTXdX
LCBNd0g7CiAgICBpbnQgbWJ3LCBtYmgsIGN3dywgY3doLCBtd3csIG13aCwgd3d3LCB3d2g7CiAg
ICBpbnQgczF3LCBzMWgsIHMydywgczJoLCBzM3csIHMzaDsKICAgIFBvc2l0aW9uIG1ieCwgbWJ5
LCBjd3gsIGN3eSwgbXd4LCBtd3ksIHd3eCwgd3d5OwogICAgUG9zaXRpb24gczF4LCBzMXksIHMy
eCwgczJ5LCBzM3gsIHMzeTsKfQpYbU1XVmFsdWVzOwoKCnZvaWQgX1htQ2FzY2FkZVBpeG1hcERl
ZmF1bHQoV2lkZ2V0IHcsIGludCBvZmZzZXQsIFhybVZhbHVlICp2YWwpOwoKCldpZGdldCBfTHRG
aW5kVmVuZG9yRXh0KFdpZGdldCk7CgoKCgpYbUZvbnRMaXN0IF9YbUZvbnRMaXN0Q3JlYXRlRGVm
YXVsdChEaXNwbGF5ICpkaXNwKTsKWG1Gb250TGlzdEVudHJ5IF9YbUZvbnRMaXN0RW50cnlGcm9t
VGFnKFhtRm9udExpc3QgZm9udGxpc3QsIGNoYXIgKnRhZyk7CgoKdm9pZCBfWG1Jbml0UHJvdG9j
b2xzKFdpZGdldCB3KTsKdm9pZCBfWG1EZXN0cm95UHJvdG9jb2xzKFdpZGdldCB3KTsKCnZvaWQg
X1htTlNFRWRpdFJlc0NoZWNrTWVzc2FnZXMoV2lkZ2V0IHcsIFh0UG9pbnRlciBkYXRhLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFdmVudCAqZXZlbnQsIEJvb2xlYW4gKmNvbnQp
OwoKdm9pZCBfTHRWZW5kb3JVbm1hcChXaWRnZXQgY2hpbGQpOwoKCgp2b2lkIF9YbUxhYmVsR2V0
UGl4bWFwU2l6ZShXaWRnZXQgdywgUGl4bWFwIFBpeCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRGltZW5zaW9uICp3aWR0aCwgRGltZW5zaW9uICpoZWlnaHQpOwoKCgoKClh0R2VvbWV0cnlS
ZXN1bHQgX1htR01SZXBseVRvUXVlcnlHZW9tZXRyeShXaWRnZXQgdywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0V2lkZ2V0R2VvbWV0cnkgKnJlcXVlc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdldEdlb21ldHJ5
ICpyZXBseSk7Clh0R2VvbWV0cnlSZXN1bHQgX1htR01IYW5kbGVRdWVyeUdlb21ldHJ5KFdpZGdl
dCB3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdldEdl
b21ldHJ5ICpwcm9wb3NlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWHRXaWRnZXRHZW9tZXRyeSAqYW5zd2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEaW1lbnNpb24gbWFyZ2luX3dpZHRoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gbWFyZ2luX2hlaWdodCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZXNpemVfcG9s
aWN5KTsKdm9pZCBfWG1HTUVuZm9yY2VNYXJnaW4oV2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAg
ICAgICAgIERpbWVuc2lvbiBtYXJnaW5fd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgIERp
bWVuc2lvbiBtYXJnaW5faGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICBCb29sZWFuIHVz
ZVNldFZhbHVlcyk7CnZvaWQgX1htR01DYWxjU2l6ZShXaWRnZXQgdywKICAgICAgICAgICAgICAg
ICAgIERpbWVuc2lvbiBtYXJnaW5fdywgRGltZW5zaW9uIG1hcmdpbl9oLAogICAgICAgICAgICAg
ICAgICAgRGltZW5zaW9uICpyZXR3LCBEaW1lbnNpb24gKnJldGgpOwp2b2lkIF9YbUdNRG9MYXlv
dXQoV2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24gbWFyZ2luX3csIERpbWVu
c2lvbiBtYXJnaW5faCwKICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVzaXplX3Bv
bGljeSwgc2hvcnQgYWRqdXN0KTsKWHRHZW9tZXRyeVJlc3VsdCBfWG1HTUhhbmRsZUdlb21ldHJ5
TWFuYWdlcihXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXaWRnZXQgaW5zdGlnYXRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBYdFdpZGdldEdlb21ldHJ5ICpkZXNpcmVkLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFh0V2lkZ2V0R2VvbWV0cnkgKmFsbG93ZWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGltZW5zaW9uIG1hcmdpbl93
aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaW1lbnNp
b24gbWFyZ2luX2hlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyIHJlc2l6ZV9wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQm9vbGVhbiBhbGxvd19vdmVybGFwKTsKQm9vbGVhbiBfWG1H
TU92ZXJsYXAoV2lkZ2V0IHcsIFdpZGdldCBpbnN0aWdhdG9yLAogICAgICAgICAgICAgICAgICAg
ICBQb3NpdGlvbiB4LCBQb3NpdGlvbiB5LAogICAgICAgICAgICAgICAgICAgICBEaW1lbnNpb24g
d2lkdGgsIERpbWVuc2lvbiBoZWlnaHQpOwoKCnZvaWQgX1htQmJNYXAoV2lkZ2V0IHcpOwp2b2lk
IF9YbUJiVW5tYXAoV2lkZ2V0IHcpOwoKCnZvaWQgX1htU2V0dXBJbWFnZUNhY2hlKHZvaWQpOwoK
CnZvaWQgX1htRmFrZUV4cG9zZShXaWRnZXQgbWVudV9zaGVsbCk7CkJvb2xlYW4gX1htTWVudUdl
dEluUE1Nb2RlKFdpZGdldCB3KTsKCgplbnVtIHsKICBYbU1FTlVfRk9DVVNfU0FWRT0wLAogIFht
TUVOVV9GT0NVU19SRVNUT1JFLAogIFhtTUVOVV9GT0NVU19TRVQKfTsKCgp2b2lkIF9YbU1lc3Nh
Z2VCb3hJbnN0YWxsSW1hZ2VzKFdpZGdldCB3KTsKCgp2b2lkIF9YbUluc3RhbGxTdGlwcGxlSW1h
Z2VzKFdpZGdldCB3KTsKCgoKCgp2b2lkIF9YbVJDU2V0TWFyZ2lucyhXaWRnZXQgcmMpOwpYdEdl
b21ldHJ5UmVzdWx0IF9YbVJDQWRqdXN0U2l6ZShXaWRnZXQgcmMsIFdpZGdldCBpbnN0aWcsIFh0
V2lkZ2V0R2VvbWV0cnkgKmluc3RpZ19yZXF1ZXN0KTsKdm9pZCBfWG1SQ1ByZWZlcnJlZFNpemUo
V2lkZ2V0IHJjLCBYdFdpZGdldEdlb21ldHJ5ICpyY2cpOwoKCnZvaWQgX1htRXhwb3J0WG1TdHJp
bmcoV2lkZ2V0IHcsIGludCBvZmZzZXQsIFh0QXJnVmFsICp2YWx1ZSk7CnZvaWQgX1htRXhwb3J0
U3RyaW5nKFdpZGdldCB3LCBpbnQgb2Zmc2V0LCBYdEFyZ1ZhbCAqdmFsdWUpOwp2b2lkIF9YbU1h
bmFnZXJJbnN0YWxsQWNjZWxlcmF0b3IoV2lkZ2V0IG0sIFdpZGdldCB3LCBTdHJpbmcgcyk7CnZv
aWQgX1htTWFuYWdlckluc3RhbGxNbmVtb25pYyhXaWRnZXQgbSwgV2lkZ2V0IHcsIEtleVN5bSBt
bik7CnZvaWQgX1htTWFuYWdlclVuaW5zdGFsbEFjY2VsZXJhdG9yKFdpZGdldCBtLCBXaWRnZXQg
dyk7CnZvaWQgX1htTWFuYWdlclVuaW5zdGFsbE1uZW1vbmljKFdpZGdldCBtLCBXaWRnZXQgdyk7
CnZvaWQgX1htU2Nyb2xsZWRXUHJlZmVycmVkU2l6ZShXaWRnZXQgdywgV2lkZ2V0IGluc3RpZ2F0
b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRXaWRnZXRHZW9tZXRy
eSAqaW5zdGlnYXRvcl9nZW9tLCBYbVNXVmFsdWVzICogdmFscyk7CnZvaWQgX1htU2Nyb2xsZWRX
TGF5b3V0KFdpZGdldCB3LCBXaWRnZXQgaW5zdGlnYXRvciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBYdFdpZGdldEdlb21ldHJ5ICppbnN0aWdhdG9yX2dlb20sIFhtU1dW
YWx1ZXMgKiB2YWxzKTsKdm9pZCBfWG1TY3JvbGxlZFdDb25maWd1cmVDaGlsZHJlbihXaWRnZXQg
dywgV2lkZ2V0IGluc3RpZ2F0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWHRXaWRnZXRHZW9tZXRyeSAqaW5zdGlnYXRvcl9nZW9tLCBYbVNXVmFsdWVzICogdmFscyk7
CgoKQm9vbGVhbiBfWG1TZWxlY3Rpb25Cb3hNYXRjaChYbVNlbGVjdGlvbkJveFdpZGdldCB3KTsK
CgoKdm9pZCBfWG1QdXNoQnV0dG9uU2V0VHJhbnNsYXRpb24oV2lkZ2V0LCBpbnQpOwoKCnZvaWQg
X1htQ2hhbmdlVlNCKFhtVGV4dFdpZGdldCB3LCBYbVRleHRQb3NpdGlvbiBwb3MpOwp2b2lkIF9Y
bVJlZGlzcGxheUhCYXIoWG1UZXh0V2lkZ2V0IHcsIGludCBvZmZzZXQpOwppbnQgX1htRm9udENh
bGN1bGF0ZUF2ZXJhZ2VDaGFyYWN0ZXJXaWR0aChXaWRnZXQgdywgWEZvbnRTdHJ1Y3QgKmZzKTsK
CnZvaWQgX1htU2V0Rm9jdXNSZXNldEZsYWcoV2lkZ2V0IHcsIEJvb2xlYW4gdmFsdWUpOwpCb29s
ZWFuIF9YbUdldEZvY3VzUmVzZXRGbGFnKFdpZGdldCB3KTsKV2lkZ2V0IF9YbUdldEFjdGl2ZVRh
Ykdyb3VwKFdpZGdldCB3aWRnZXQpOwpXaWRnZXQgX1htRmluZFRvcE1vc3RTaGVsbChXaWRnZXQg
d2lkZ2V0KTsKdHlwZWRlZiBlbnVtIF9YbU1vZGlmaWVyTGV2ZWxzIHsKICAgIEFMVE1vZGlmaWVy
ID0gMCwKICAgIE1FVEFNb2RpZmllciwKICAgIFNVUEVSTW9kaWZpZXIsCiAgICBIWVBFUk1vZGlm
aWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX01PRElGSUVSUwp9
IFhtTW9kaWZpZXJMZXZlbHM7Cgp0eXBlZGVmIE1vZGlmaWVycyBYbU1vZGlmaWVyTWFza1NldFtN
QVhfTU9ESUZJRVJTXTsKdHlwZWRlZiBNb2RpZmllcnMgKlhtTW9kaWZpZXJNYXNrU2V0UmVmZXJl
bmNlOwoKWG1Nb2RpZmllck1hc2tTZXRSZWZlcmVuY2UgX1htR2V0TW9kaWZpZXJNYXBwaW5nc0Zv
ckRpc3BsYXkoRGlzcGxheSAqRHNwKTsKdm9pZCBfWG1JbnZhbGlkYXRlTW9kaWZpZXJNYXBwaW5n
c0ZvckRpc3BsYXkoRGlzcGxheSAqRHNwKTsKdm9pZCBfWG1SZWZyZXNoVmlydEtleXMoV2lkZ2V0
IHcpOwoKCgp2b2lkIF9YbUFkZEJhY2tncm91bmRUb0NvbG9yQ2FjaGUoU2NyZWVuICpzY3JlZW4s
IENvbG9ybWFwIGNvbG9yX21hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZyBiYWNrZ3JvdW5kX3NwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgcmdiX2ZhbGxiYWNrLCBYcm1WYWx1ZSAqdmFsKTsKdm9pZCBfWG1JbnZhbGlkYXRlQ29sb3JD
YWNoZShCb29sZWFuIGRlZmF1bHRfb25seSk7CnZvaWQgX1htUGlja3VwVW5zcGVjaWZpZWRQaXht
YXBzKERpc3BsYXkgKmRweSk7CgoKCnZvaWQgX1htU3RyaW5nQmFzZWxpbmVzKFhtRm9udExpc3Qg
Zm9udGxpc3QsIF9YbVN0cmluZyBzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0
aW9uIHksIERpbWVuc2lvbiAqYmFzZWxpbmVzKTsKdm9pZCBfWG1TdHJpbmdVcGRhdGUoWG1Gb250
TGlzdCBmb250bGlzdCwgX1htU3RyaW5nIHN0cmluZyk7ClBpeGVsIF9YbVdoaXRlUGl4ZWxPZk9i
amVjdChXaWRnZXQpOwpQaXhlbCBfWG1CbGFja1BpeGVsT2ZPYmplY3QoV2lkZ2V0KTsKCgoKCnZv
aWQgX1htQXBwTG9jayhYdEFwcENvbnRleHQgYXBwYyk7CnZvaWQgX1htQXBwVW5sb2NrKFh0QXBw
Q29udGV4dCBhcHBjKTsKdm9pZCBfWG1Qcm9jZXNzTG9jayh2b2lkKTsKdm9pZCBfWG1Qcm9jZXNz
VW5sb2NrKHZvaWQpOwp2b2lkIF9YbU9iamVjdExvY2soV2lkZ2V0IHcpOwp2b2lkIF9YbU9iamVj
dFVubG9jayhXaWRnZXQgdyk7CgoKCgoKCnZvaWQgX1htUmVnaXN0ZXJOU0VDb252ZXJ0ZXJzKHZv
aWQpOwoKCgoKCgp2b2lkIF9YbURyYXdTcXVhcmVCdXR0b24oV2lkZ2V0IHcsIGludCB4LCBpbnQg
eSwgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBHQyB0b3BfZ2MsIEdDIGJvdHRv
bV9nYywgR0Mgc2VsZWN0X2djLCBCb29sZWFuIGZpbGwpOwp2b2lkIF9YbURyYXdEaWFtb25kQnV0
dG9uKFdpZGdldCB3LCBpbnQgeCwgaW50IHksIGludCBzaXplLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDIHRvcF9nYywgR0MgYm90dG9tX2djLCBHQyBzZWxlY3RfZ2MsIEJvb2xlYW4gZmls
bCk7CmV4dGVybiBCb29sZWFuIF9MdENoZWNrQ2xhc3NPZlZlbmRvclNoZWxsKFdpZGdldCB3KTsK
ZXh0ZXJuIFdpZGdldENsYXNzIHhtVGV4dEZpZWxkV2lkZ2V0Q2xhc3M7Cgp0eXBlZGVmIHN0cnVj
dCBfWG1UZXh0RmllbGRSZWMgKlhtVGV4dEZpZWxkV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1U
ZXh0RmllbGRDbGFzc1JlYyAqWG1UZXh0RmllbGRXaWRnZXRDbGFzczsKCmV4dGVybiBXaWRnZXQg
WG1DcmVhdGVUZXh0RmllbGQoV2lkZ2V0IHBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZyAq
YXJnbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBhcmdDb3Vu
dCk7CgoKCgoKdm9pZCBYbVRleHRGaWVsZENsZWFyU2VsZWN0aW9uKFdpZGdldCB3aWRnZXQsIFRp
bWUgdGltZSk7CkJvb2xlYW4gWG1UZXh0RmllbGRDb3B5KFdpZGdldCB3aWRnZXQsIFRpbWUgdGlt
ZSk7CkJvb2xlYW4gWG1UZXh0RmllbGRDdXQoV2lkZ2V0IHdpZGdldCwgVGltZSB0aW1lKTsKaW50
IFhtVGV4dEZpZWxkR2V0QmFzZWxpbmUoV2lkZ2V0IHdpZGdldCk7ClhtVGV4dFBvc2l0aW9uIFht
VGV4dEZpZWxkR2V0Q3Vyc29yUG9zaXRpb24oV2lkZ2V0IHdpZGdldCk7CkJvb2xlYW4gWG1UZXh0
RmllbGRHZXRFZGl0YWJsZShXaWRnZXQgd2lkZ2V0KTsKWG1UZXh0UG9zaXRpb24gWG1UZXh0Rmll
bGRHZXRJbnNlcnRpb25Qb3NpdGlvbihXaWRnZXQgd2lkZ2V0KTsKWG1UZXh0UG9zaXRpb24gWG1U
ZXh0RmllbGRHZXRMYXN0UG9zaXRpb24oV2lkZ2V0IHdpZGdldCk7CmludCBYbVRleHRGaWVsZEdl
dE1heExlbmd0aChXaWRnZXQgd2lkZ2V0KTsKY2hhciAqWG1UZXh0RmllbGRHZXRTZWxlY3Rpb24o
V2lkZ2V0IHdpZGdldCk7CkJvb2xlYW4gWG1UZXh0RmllbGRHZXRTZWxlY3Rpb25Qb3NpdGlvbihX
aWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiAqbGVmdCwgWG1UZXh0UG9zaXRpb24gKnJpZ2h0
KTsKd2NoYXJfdCAqWG1UZXh0RmllbGRHZXRTZWxlY3Rpb25XY3MoV2lkZ2V0IHdpZGdldCk7CmNo
YXIgKlhtVGV4dEZpZWxkR2V0U3RyaW5nKFdpZGdldCB3aWRnZXQpOwp3Y2hhcl90ICpYbVRleHRG
aWVsZEdldFN0cmluZ1djcyhXaWRnZXQgd2lkZ2V0KTsKaW50IFhtVGV4dEZpZWxkR2V0U3Vic3Ry
aW5nKFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIHN0YXJ0LCBpbnQgbnVtX2NoYXJzLCBp
bnQgYnVmZmVyX3NpemUsIGNoYXIgKmJ1ZmZlcik7CmludCBYbVRleHRGaWVsZEdldFN1YnN0cmlu
Z1djcyhXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBzdGFydCwgaW50IG51bV9jaGFycywg
aW50IGJ1ZmZlcl9zaXplLCB3Y2hhcl90ICpidWZmZXIpOwp2b2lkIFhtVGV4dEZpZWxkSW5zZXJ0
KFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIHBvc2l0aW9uLCBjaGFyICpzdHJpbmcpOwp2
b2lkIFhtVGV4dEZpZWxkSW5zZXJ0V2NzKFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIHBv
c2l0aW9uLCB3Y2hhcl90ICp3Y3N0cmluZyk7CkJvb2xlYW4gWG1UZXh0RmllbGRQYXN0ZShXaWRn
ZXQgd2lkZ2V0KTsKQm9vbGVhbiBYbVRleHRGaWVsZFBvc1RvWFkoV2lkZ2V0IHdpZGdldCwgWG1U
ZXh0UG9zaXRpb24gcG9zaXRpb24sIFBvc2l0aW9uICp4LCBQb3NpdGlvbiAqeSk7CkJvb2xlYW4g
WG1UZXh0RmllbGRSZW1vdmUoV2lkZ2V0IHdpZGdldCk7CnZvaWQgWG1UZXh0RmllbGRSZXBsYWNl
KFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIGZyb21fcG9zLCBYbVRleHRQb3NpdGlvbiB0
b19wb3MsIGNoYXIgKnZhbHVlKTsKdm9pZCBYbVRleHRGaWVsZFJlcGxhY2VXY3MoV2lkZ2V0IHdp
ZGdldCwgWG1UZXh0UG9zaXRpb24gZnJvbV9wb3MsIFhtVGV4dFBvc2l0aW9uIHRvX3Bvcywgd2No
YXJfdCAqd2NzdHJpbmcpOwp2b2lkIFhtVGV4dEZpZWxkU2V0QWRkTW9kZShXaWRnZXQgd2lkZ2V0
LCBCb29sZWFuIHN0YXRlKTsKdm9pZCBYbVRleHRGaWVsZFNldEN1cnNvclBvc2l0aW9uKFdpZGdl
dCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIHBvc2l0aW9uKTsKdm9pZCBYbVRleHRGaWVsZFNldEVk
aXRhYmxlKFdpZGdldCB3aWRnZXQsIEJvb2xlYW4gZWRpdGFibGUpOwp2b2lkIFhtVGV4dEZpZWxk
U2V0SGlnaGxpZ2h0KFdpZGdldCB3aWRnZXQsIFhtVGV4dFBvc2l0aW9uIGxlZnQsIFhtVGV4dFBv
c2l0aW9uIHJpZ2h0LCBYbUhpZ2hsaWdodE1vZGUgbW9kZSk7CnZvaWQgWG1UZXh0RmllbGRTZXRJ
bnNlcnRpb25Qb3NpdGlvbihXaWRnZXQgd2lkZ2V0LCBYbVRleHRQb3NpdGlvbiBwb3NpdGlvbik7
CnZvaWQgWG1UZXh0RmllbGRTZXRNYXhMZW5ndGgoV2lkZ2V0IHdpZGdldCwgaW50IG1heF9sZW5n
dGgpOwp2b2lkIFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKFdpZGdldCB3aWRnZXQsIFhtVGV4dFBv
c2l0aW9uIGZpcnN0LCBYbVRleHRQb3NpdGlvbiBsYXN0LCBUaW1lIHRpbWUpOwp2b2lkIFhtVGV4
dEZpZWxkU2V0U3RyaW5nKFdpZGdldCB3aWRnZXQsIGNoYXIgKnZhbHVlKTsKdm9pZCBYbVRleHRG
aWVsZFNldFN0cmluZ1djcyhXaWRnZXQgd2lkZ2V0LCB3Y2hhcl90ICp3Y3N0cmluZyk7CnZvaWQg
WG1UZXh0RmllbGRTaG93UG9zaXRpb24oV2lkZ2V0IHdpZGdldCwgWG1UZXh0UG9zaXRpb24gcG9z
aXRpb24pOwpYbVRleHRQb3NpdGlvbiBYbVRleHRGaWVsZFhZVG9Qb3MoV2lkZ2V0IHdpZGdldCwg
UG9zaXRpb24geCwgUG9zaXRpb24geSk7CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBCb29sZWFu
IEVjaG87CiAgICAgICAgQm9vbGVhbiBBbGxvd1NlbGVjdGlvbjsKCgogICAgICAgIGNoYXIgKlNl
bGVjdGlvblRleHQ7CiAgICAgICAgaW50IFNlbGVjdGlvbkxlbjsKCiAgICAgICAgWG1UZXh0UG9z
aXRpb24gT2xkSGlnaGxpZ2h0U3RhcnQ7CiAgICAgICAgWG1UZXh0UG9zaXRpb24gT2xkSGlnaGxp
Z2h0RW5kOwogICAgICAgIFhtVGV4dFBvc2l0aW9uIE9sZEN1cnNvclBvczsKICAgICAgICBpbnQg
T2xkQ3Vyc29yWDsKCiAgICAgICAgaW50IEZhc3RJbnNlcnRDdXJzb3JTdGFydDsKICAgICAgICBp
bnQgRmFzdEluc2VydFRleHRMZW47CgogICAgICAgIERpbWVuc2lvbiBGb250SGVpZ2h0OwogICAg
ICAgIGludCBYRHJhdzsKICAgICAgICBpbnQgWURyYXc7CiAgICAgICAgaW50IFhPZmZzZXQ7CiAg
ICAgICAgaW50IE9sZFhPZmZzZXQ7CiAgICAgICAgaW50IFlPZmZzZXQ7CiAgICAgICAgaW50IFRl
eHRXaWR0aDsKICAgICAgICBpbnQgT2xkVGV4dFdpZHRoOwp9IFhtVGV4dEZpZWxkUGFydExlc3N0
aWZFeHRlbnNpb247Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgWHRDYWxsYmFja0xpc3QgYWN0
aXZhdGVfY2FsbGJhY2s7CiAgICAgICAgWHRDYWxsYmFja0xpc3QgZm9jdXNfY2FsbGJhY2s7CiAg
ICAgICAgWHRDYWxsYmFja0xpc3QgbG9zaW5nX2ZvY3VzX2NhbGxiYWNrOwogICAgICAgIFh0Q2Fs
bGJhY2tMaXN0IG1vZGlmeV92ZXJpZnlfY2FsbGJhY2s7CiAgICAgICAgWHRDYWxsYmFja0xpc3Qg
d2NzX21vZGlmeV92ZXJpZnlfY2FsbGJhY2s7CiAgICAgICAgWHRDYWxsYmFja0xpc3QgbW90aW9u
X3ZlcmlmeV9jYWxsYmFjazsKCiAgICAgICAgWHRDYWxsYmFja0xpc3QgZ2Fpbl9wcmltYXJ5X2Nh
bGxiYWNrOwogICAgICAgIFh0Q2FsbGJhY2tMaXN0IGxvc2VfcHJpbWFyeV9jYWxsYmFjazsKICAg
ICAgICBYdENhbGxiYWNrTGlzdCB2YWx1ZV9jaGFuZ2VkX2NhbGxiYWNrOwogICAgICAgIGNoYXIg
KiB2YWx1ZTsKICAgICAgICB3Y2hhcl90ICogd2NfdmFsdWU7CgogICAgICAgIFhtRm9udExpc3Qg
Zm9udF9saXN0OwogICAgICAgIFhGb250U3RydWN0ICpmb250OwogICAgICAgIFhtVGV4dFNjYW5U
eXBlICpzZWxlY3Rpb25fYXJyYXk7CgogICAgICAgIF9YbUhpZ2hsaWdodERhdGEgaGlnaGxpZ2h0
OwoKICAgICAgICBHQyBnYzsKICAgICAgICBHQyBpbWFnZV9nYzsKICAgICAgICBHQyBzYXZlX2dj
OwoKICAgICAgICBQaXhtYXAgaWJlYW1fb2ZmOwogICAgICAgIFBpeG1hcCBhZGRfbW9kZV9jdXJz
b3I7CiAgICAgICAgUGl4bWFwIGN1cnNvcjsKICAgICAgICBQaXhtYXAgcHV0YmFjazsKICAgICAg
ICBQaXhtYXAgc3RpcHBsZV90aWxlOwogICAgICAgIFBpeG1hcCBpbWFnZV9jbGlwOwoKICAgICAg
ICBYbVRleHRQb3NpdGlvbiBjdXJzb3JfcG9zaXRpb247CiAgICAgICAgWG1UZXh0UG9zaXRpb24g
bmV3X2hfb2Zmc2V0OwogICAgICAgIFhtVGV4dFBvc2l0aW9uIGhfb2Zmc2V0OwoKICAgICAgICBY
bVRleHRQb3NpdGlvbiBvcmlnX2xlZnQ7CiAgICAgICAgWG1UZXh0UG9zaXRpb24gb3JpZ19yaWdo
dDsKICAgICAgICBYbVRleHRQb3NpdGlvbiBwcmltX3Bvc19sZWZ0OwogICAgICAgIFhtVGV4dFBv
c2l0aW9uIHByaW1fcG9zX3JpZ2h0OwogICAgICAgIFhtVGV4dFBvc2l0aW9uIHByaW1fYW5jaG9y
OwoKICAgICAgICBYbVRleHRQb3NpdGlvbiBzZWNfcG9zX2xlZnQ7CiAgICAgICAgWG1UZXh0UG9z
aXRpb24gc2VjX3Bvc19yaWdodDsKICAgICAgICBYbVRleHRQb3NpdGlvbiBzZWNfYW5jaG9yOwoK
ICAgICAgICBYbVRleHRQb3NpdGlvbiBzdHVmZl9wb3M7CgogICAgICAgIFBvc2l0aW9uIHNlbGVj
dF9wb3NfeDsKCiAgICAgICAgVGltZSBwcmltX3RpbWU7CiAgICAgICAgVGltZSBkZXN0X3RpbWU7
CiAgICAgICAgVGltZSBzZWNfdGltZTsKICAgICAgICBUaW1lIGxhc3RfdGltZTsKCiAgICAgICAg
WHRJbnRlcnZhbElkIHRpbWVyX2lkOwogICAgICAgIFh0SW50ZXJ2YWxJZCBzZWxlY3RfaWQ7Cgog
ICAgICAgIGludCBibGlua19yYXRlOwogICAgICAgIGludCBzZWxlY3Rpb25fYXJyYXlfY291bnQ7
CiAgICAgICAgaW50IHRocmVzaG9sZDsKICAgICAgICBpbnQgc2l6ZV9hbGxvY2Q7CiAgICAgICAg
aW50IHN0cmluZ19sZW5ndGg7CgogICAgICAgIGludCBjdXJzb3JfaGVpZ2h0OwogICAgICAgIGlu
dCBjdXJzb3Jfd2lkdGg7CiAgICAgICAgaW50IHNhcnJheV9pbmRleDsKICAgICAgICBpbnQgbWF4
X2xlbmd0aDsKCgogICAgICAgIGludCBtYXhfY2hhcl9zaXplOwogICAgICAgIHNob3J0IGNvbHVt
bnM7CgogICAgICAgIERpbWVuc2lvbiBtYXJnaW5fd2lkdGg7CiAgICAgICAgRGltZW5zaW9uIG1h
cmdpbl9oZWlnaHQ7CiAgICAgICAgRGltZW5zaW9uIGF2ZXJhZ2VfY2hhcl93aWR0aDsKICAgICAg
ICBEaW1lbnNpb24gbWFyZ2luX3RvcDsKICAgICAgICBEaW1lbnNpb24gbWFyZ2luX2JvdHRvbTsK
ICAgICAgICBEaW1lbnNpb24gZm9udF9hc2NlbnQ7CiAgICAgICAgRGltZW5zaW9uIGZvbnRfZGVz
Y2VudDsKCiAgICAgICAgQm9vbGVhbiByZXNpemVfd2lkdGg7CgogICAgICAgIEJvb2xlYW4gcGVu
ZGluZ19kZWxldGU7CgogICAgICAgIEJvb2xlYW4gZWRpdGFibGU7CiAgICAgICAgQm9vbGVhbiB2
ZXJpZnlfYmVsbDsKCgogICAgICAgIEJvb2xlYW4gY3Vyc29yX3Bvc2l0aW9uX3Zpc2libGU7Cgog
ICAgICAgIEJvb2xlYW4gdHJhdmVyc2VkOwoKICAgICAgICBCb29sZWFuIGFkZF9tb2RlOwogICAg
ICAgIEJvb2xlYW4gaGFzX2ZvY3VzOwoKICAgICAgICBCb29sZWFuIGJsaW5rX29uOwogICAgICAg
IHNob3J0IGludCBjdXJzb3Jfb247CiAgICAgICAgQm9vbGVhbiByZWZyZXNoX2liZWFtX29mZjsK
CiAgICAgICAgQm9vbGVhbiBoYXZlX2ludmVydGVkX2ltYWdlX2djOwogICAgICAgIEJvb2xlYW4g
aGFzX3ByaW1hcnk7CgogICAgICAgIEJvb2xlYW4gaGFzX3NlY29uZGFyeTsKCiAgICAgICAgQm9v
bGVhbiBoYXNfZGVzdGluYXRpb247CgogICAgICAgIEJvb2xlYW4gc2VjX2RyYWc7CiAgICAgICAg
Qm9vbGVhbiBzZWxlY3Rpb25fbW92ZTsKCiAgICAgICAgQm9vbGVhbiBwZW5kaW5nX29mZjsKICAg
ICAgICBCb29sZWFuIGZvbnRsaXN0X2NyZWF0ZWQ7CgogICAgICAgIEJvb2xlYW4gaGFzX3JlY3Q7
CiAgICAgICAgQm9vbGVhbiBkb19kcm9wOwoKCgogICAgICAgIEJvb2xlYW4gY2FuY2VsOwogICAg
ICAgIEJvb2xlYW4gZXh0ZW5kaW5nOwogICAgICAgIEJvb2xlYW4gc2VjX2V4dGVuZGluZzsKICAg
ICAgICBCb29sZWFuIGNoYW5nZWRfdmlzaWJsZTsKCiAgICAgICAgQm9vbGVhbiBoYXZlX2ZvbnRz
ZXQ7CgogICAgICAgIEJvb2xlYW4gaW5fc2V0dmFsdWVzOwogICAgICAgIEJvb2xlYW4gZG9fcmVz
aXplOwogICAgICAgIEJvb2xlYW4gcmVkaXNwbGF5OwogICAgICAgIEJvb2xlYW4gb3ZlcnN0cmlr
ZTsKICAgICAgICBCb29sZWFuIHNlbF9zdGFydDsKICAgICAgICBYdFBvaW50ZXIgZXh0ZW5zaW9u
OwogICAgICAgIEJvb2xlYW4gY2hlY2tfc2V0X3JlbmRlcl90YWJsZTsKICAgICAgICBCb29sZWFu
IHVzZV94ZnQ7Cn0gWG1UZXh0RmllbGRQYXJ0OwoKCnR5cGVkZWYgc3RydWN0IF9YbVRleHRGaWVs
ZFJlYyB7CiAgICAgICAgQ29yZVBhcnQgY29yZTsKICAgICAgICBYbVByaW1pdGl2ZVBhcnQgcHJp
bWl0aXZlOwogICAgICAgIFhtVGV4dEZpZWxkUGFydCB0ZXh0Owp9IFhtVGV4dEZpZWxkUmVjOwoK
CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFhtVGV4dEZp
ZWxkQ2xhc3NQYXJ0OwoKCnR5cGVkZWYgc3RydWN0IF9YbVRleHRGaWVsZENsYXNzUmVjIHsKICAg
ICAgICBDb3JlQ2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgICAgICAgWG1QcmltaXRpdmVDbGFzc1Bh
cnQgcHJpbWl0aXZlX2NsYXNzOwogICAgICAgIFhtVGV4dEZpZWxkQ2xhc3NQYXJ0IHRleHRmaWVs
ZF9jbGFzczsKfSBYbVRleHRGaWVsZENsYXNzUmVjOwoKCgpleHRlcm4gWG1UZXh0RmllbGRDbGFz
c1JlYyB4bVRleHRGaWVsZENsYXNzUmVjOwpleHRlcm4gY29uc3QgY2hhciBfWG1BcnJvd0JfZGVm
YXVsdFRyYW5zbGF0aW9uc1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1CdWxsZXRpbkJfZGVmYXVs
dFRyYW5zbGF0aW9uc1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1DYXNjYWRlQl9tZW51YmFyX2V2
ZW50c1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1DYXNjYWRlQl9wX2V2ZW50c1tdOwpleHRlcm4g
Y29uc3QgY2hhciBfWG1EcmF3aW5nQV9kZWZhdWx0VHJhbnNsYXRpb25zW107CmV4dGVybiBjb25z
dCBjaGFyIF9YbURyYXdpbmdBX3RyYXZlcnNhbFRyYW5zbGF0aW9uc1tdOwpleHRlcm4gY29uc3Qg
Y2hhciBfWG1EcmF3bkJfZGVmYXVsdFRyYW5zbGF0aW9uc1tdOwpleHRlcm4gY29uc3QgY2hhciBf
WG1GcmFtZV9kZWZhdWx0VHJhbnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbUxhYmVs
X2RlZmF1bHRUcmFuc2xhdGlvbnNbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htTGFiZWxfbWVudVRy
YW5zbGF0aW9uc1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1MYWJlbF9tZW51X3RyYXZlcnNhbF9l
dmVudHNbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htTGlzdF9MaXN0WGxhdGlvbnMxW107CmV4dGVy
biBjb25zdCBjaGFyIF9YbUxpc3RfTGlzdFhsYXRpb25zMltdOwpleHRlcm4gY29uc3QgY2hhciBf
WG1NYW5hZ2VyX21hbmFnZXJUcmF2ZXJzYWxUcmFuc2xhdGlvbnNbXTsKZXh0ZXJuIGNvbnN0IGNo
YXIgX1htTWFuYWdlcl9kZWZhdWx0VHJhbnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9Y
bU1lbnVTaGVsbF90cmFuc2xhdGlvbnMgW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVByaW1pdGl2
ZV9kZWZhdWx0VHJhbnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVB1c2hCX2RlZmF1
bHRUcmFuc2xhdGlvbnNbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htUHVzaEJfbWVudVRyYW5zbGF0
aW9uc1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1Sb3dDb2x1bW5fbWVudV90cmF2ZXJzYWxfdGFi
bGVbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htUm93Q29sdW1uX2Jhcl90YWJsZVtdOwpleHRlcm4g
Y29uc3QgY2hhciBfWG1Sb3dDb2x1bW5fb3B0aW9uX3RhYmxlW107CmV4dGVybiBjb25zdCBjaGFy
IF9YbVJvd0NvbHVtbl9tZW51X3RhYmxlW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVNhc2hfZGVm
VHJhbnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVNjcm9sbEJhcl9kZWZhdWx0VHJh
bnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVNjcm9sbGVkV19TY3JvbGxlZFdpbmRv
d1hsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVNjcm9sbGVkV19DbGlwV2luZG93VHJh
bnNsYXRpb25UYWJsZVtdOwpleHRlcm4gY29uc3QgY2hhciBfWG1TY3JvbGxlZFdfV29ya1dpbmRv
d1RyYW5zbGF0aW9uVGFibGVbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htU2VsZWN0aW9CX2RlZmF1
bHRUZXh0QWNjZWxlcmF0b3JzW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVRlYXJPZmZCX292ZXJy
aWRlVHJhbnNsYXRpb25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVRleHRGX0V2ZW50QmluZGlu
Z3MxW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVRleHRGX0V2ZW50QmluZGluZ3MyW107CmV4dGVy
biBjb25zdCBjaGFyIF9YbVRleHRGX0V2ZW50QmluZGluZ3MzW107CmV4dGVybiBjb25zdCBjaGFy
IF9YbVRleHRJbl9YbVRleHRFdmVudEJpbmRpbmdzMVtdOwpleHRlcm4gY29uc3QgY2hhciBfWG1U
ZXh0SW5fWG1UZXh0RXZlbnRCaW5kaW5nczJbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htVGV4dElu
X1htVGV4dEV2ZW50QmluZGluZ3MzW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVRleHRJbl9YbVRl
eHRFdmVudEJpbmRpbmdzM1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1Ub2dnbGVCX2RlZmF1bHRU
cmFuc2xhdGlvbnNbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htVG9nZ2xlQl9tZW51VHJhbnNsYXRp
b25zW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVZpcnRLZXlzX2ZhbGxiYWNrQmluZGluZ1N0cmlu
Z1tdOwoKCgpleHRlcm4gY29uc3QgY2hhciBfWG1WaXJ0S2V5c19hY29ybkZhbGxiYWNrQmluZGlu
Z1N0cmluZ1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1WaXJ0S2V5c19hcG9sbG9GYWxsYmFja0Jp
bmRpbmdTdHJpbmdbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htVmlydEtleXNfZGdGYWxsYmFja0Jp
bmRpbmdTdHJpbmdbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htVmlydEtleXNfZGVjRmFsbGJhY2tC
aW5kaW5nU3RyaW5nW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVZpcnRLZXlzX2RibGNsa0ZhbGxi
YWNrQmluZGluZ1N0cmluZ1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1WaXJ0S2V5c19ocEZhbGxi
YWNrQmluZGluZ1N0cmluZ1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1WaXJ0S2V5c19pYm1GYWxs
YmFja0JpbmRpbmdTdHJpbmdbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgX1htVmlydEtleXNfaW5nckZh
bGxiYWNrQmluZGluZ1N0cmluZ1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1WaXJ0S2V5c19tZWdh
dGVrRmFsbGJhY2tCaW5kaW5nU3RyaW5nW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVZpcnRLZXlz
X21vdG9yb2xhRmFsbGJhY2tCaW5kaW5nU3RyaW5nW107CmV4dGVybiBjb25zdCBjaGFyIF9YbVZp
cnRLZXlzX3NnaUZhbGxiYWNrQmluZGluZ1N0cmluZ1tdOwpleHRlcm4gY29uc3QgY2hhciBfWG1W
aXJ0S2V5c19zaWVtZW5zV3gyMDBGYWxsYmFja0JpbmRpbmdTdHJpbmdbXTsKZXh0ZXJuIGNvbnN0
IGNoYXIgX1htVmlydEtleXNfc2llbWVuczk3MzNGYWxsYmFja0JpbmRpbmdTdHJpbmdbXTsKZXh0
ZXJuIGNvbnN0IGNoYXIgX1htVmlydEtleXNfc3VuRmFsbGJhY2tCaW5kaW5nU3RyaW5nW107CmV4
dGVybiBjb25zdCBjaGFyIF9YbVZpcnRLZXlzX3Rla0ZhbGxiYWNrQmluZGluZ1N0cmluZ1tdOwpl
bnVtIHsKICAgIFhtQ2xpcGJvYXJkRmFpbCwKICAgIFhtQ2xpcGJvYXJkU3VjY2VzcywKICAgIFht
Q2xpcGJvYXJkVHJ1bmNhdGUsCgogICAgWG1DbGlwYm9hcmRMb2NrZWQgPSA0LAoKICAgIFhtQ2xp
cGJvYXJkQmFkRm9ybWF0LAogICAgWG1DbGlwYm9hcmROb0RhdGEKfTsKCgplbnVtIHsKICAgIENs
aXBib2FyZEZhaWwsCiAgICBDbGlwYm9hcmRTdWNjZXNzLAogICAgQ2xpcGJvYXJkVHJ1bmNhdGUs
CgogICAgQ2xpcGJvYXJkTG9ja2VkID0gNCwKCiAgICBDbGlwYm9hcmRCYWRGb3JtYXQsCiAgICBD
bGlwYm9hcmROb0RhdGEKfTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGxvbmcgRGF0YUlkOwogICAg
bG9uZyBQcml2YXRlSWQ7Cn0gWG1DbGlwYm9hcmRQZW5kaW5nUmVjLCAqWG1DbGlwYm9hcmRQZW5k
aW5nTGlzdDsKCnR5cGVkZWYgdm9pZCAoKlhtQ3V0UGFzdGVQcm9jKShXaWRnZXQsIGludCAqLCBp
bnQgKiwgaW50ICopOwp0eXBlZGVmIHZvaWQgKCpWb2lkUHJvYykoV2lkZ2V0IHcsIGludCAqZGF0
YV9pZCwgaW50ICpwcml2YXRlX2lkLCBpbnQgKnJlYXNvbik7CgoKaW50IFhtQ2xpcGJvYXJkQmVn
aW5Db3B5KERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW5kb3csCiAgICAgICAgICAgICAgICAg
ICAgICAgICBYbVN0cmluZyBjbGlwX2xhYmVsLCBXaWRnZXQgd2lkZ2V0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgVm9pZFByb2MgY2FsbGJhY2ssIGxvbmcgKml0ZW1faWQpOwoKaW50IFhtQ2xp
cGJvYXJkQ2FuY2VsQ29weShEaXNwbGF5ICpkaXNwbGF5LCBXaW5kb3cgd2luZG93LCBsb25nIGl0
ZW1faWQpOwppbnQgWG1DbGlwYm9hcmRDb3B5KERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW5k
b3csIGxvbmcgaXRlbV9pZCwgY2hhciAqZm9ybWF0X25hbWUsCiAgICAgICAgICAgICAgICAgICAg
WHRQb2ludGVyIGJ1ZmZlciwgdW5zaWduZWQgbG9uZyBsZW5ndGgsIGxvbmcgcHJpdmF0ZV9pZCwg
bG9uZyAqZGF0YV9pZCk7CmludCBYbUNsaXBib2FyZENvcHlCeU5hbWUoRGlzcGxheSAqZGlzcGxh
eSwgV2luZG93IHdpbmRvdywgbG9uZyBkYXRhX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAg
IFh0UG9pbnRlciBidWZmZXIsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLCBsb25nIHByaXZhdGVfaWQp
OwppbnQgWG1DbGlwYm9hcmRFbmRDb3B5KERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW5kb3cs
IGxvbmcgaXRlbV9pZCk7CmludCBYbUNsaXBib2FyZEVuZFJldHJpZXZlKERpc3BsYXkgKmRpc3Bs
YXksIFdpbmRvdyB3aW5kb3cpOwppbnQgWG1DbGlwYm9hcmRJbnF1aXJlQ291bnQoRGlzcGxheSAq
ZGlzcGxheSwgV2luZG93IHdpbmRvdywgaW50ICpjb3VudCwgdW5zaWduZWQgbG9uZyAqbWF4X2xl
bmd0aCk7CmludCBYbUNsaXBib2FyZElucXVpcmVGb3JtYXQoRGlzcGxheSAqZGlzcGxheSwgV2lu
ZG93IHdpbmRvdywgaW50IGluZGV4LCBYdFBvaW50ZXIgZm9ybWF0X25hbWVfYnVmLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyX2xlbiwgdW5zaWduZWQg
bG9uZyAqY29waWVkX2xlbik7CmludCBYbUNsaXBib2FyZElucXVpcmVMZW5ndGgoRGlzcGxheSAq
ZGlzcGxheSwgV2luZG93IHdpbmRvdywgY2hhciAqZm9ybWF0X25hbWUsIHVuc2lnbmVkIGxvbmcg
Kmxlbmd0aCk7CmludCBYbUNsaXBib2FyZElucXVpcmVQZW5kaW5nSXRlbXMoRGlzcGxheSAqZGlz
cGxheSwgV2luZG93IHdpbmRvdywgY2hhciAqZm9ybWF0X25hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWG1DbGlwYm9hcmRQZW5kaW5nTGlzdCAqaXRlbV9saXN0LCB1bnNp
Z25lZCBsb25nICpjb3VudCk7CmludCBYbUNsaXBib2FyZExvY2soRGlzcGxheSAqZGlzcGxheSwg
V2luZG93IHdpbmRvdyk7CmludCBYbUNsaXBib2FyZFJlZ2lzdGVyRm9ybWF0KERpc3BsYXkgKmRp
c3BsYXksIGNoYXIgKmZvcm1hdF9uYW1lLCBpbnQgZm9ybWF0X2xlbmd0aCk7CmludCBYbUNsaXBi
b2FyZFJldHJpZXZlKERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW5kb3csIGNoYXIgKmZvcm1h
dF9uYW1lLCBYdFBvaW50ZXIgYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBsb25nIGxlbmd0aCwgdW5zaWduZWQgbG9uZyAqbnVtX2J5dGVzLCBsb25nICpwcml2YXRlX2lk
KTsKaW50IFhtQ2xpcGJvYXJkU3RhcnRDb3B5KERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW5k
b3csIFhtU3RyaW5nIGNsaXBfbGFiZWwsIFRpbWUgdGltZXN0YW1wLAogICAgICAgICAgICAgICAg
ICAgICAgICAgV2lkZ2V0IHdpZGdldCwgWG1DdXRQYXN0ZVByb2MgY2FsbGJhY2ssIGxvbmcgKml0
ZW1faWQpOwppbnQgWG1DbGlwYm9hcmRTdGFydFJldHJpZXZlKERpc3BsYXkgKmRpc3BsYXksIFdp
bmRvdyB3aW5kb3csIFRpbWUgdGltZXN0YW1wKTsKaW50IFhtQ2xpcGJvYXJkVW5kb0NvcHkoRGlz
cGxheSAqZGlzcGxheSwgV2luZG93IHdpbmRvdyk7CmludCBYbUNsaXBib2FyZFVubG9jayhEaXNw
bGF5ICpkaXNwbGF5LCBXaW5kb3cgd2luZG93LCBCb29sZWFuIHJlbW92ZV9hbGxfbG9ja3MpOwpp
bnQgWG1DbGlwYm9hcmRXaXRoZHJhd0Zvcm1hdChEaXNwbGF5ICpkaXNwbGF5LCBXaW5kb3cgd2lu
ZG93LCBpbnQgZGF0YV9pZCk7CkF0b20gWG1JbnRlcm5BdG9tKERpc3BsYXkgKmRpc3BsYXksIFN0
cmluZyBuYW1lLCBCb29sZWFuIG9ubHlfaWZfZXhpc3RzKTsKU3RyaW5nIFhtR2V0QXRvbU5hbWUo
RGlzcGxheSAqZGlzcGxheSwgQXRvbSBhdG9tKTsKZW51bSB7CiAgICBYbUNSX0RST1BfU0lURV9M
RUFWRV9NRVNTQUdFPTEsCiAgICBYbUNSX0RST1BfU0lURV9FTlRFUl9NRVNTQUdFLAogICAgWG1D
Ul9EUk9QX1NJVEVfTU9USU9OX01FU1NBR0UsCiAgICBYbUNSX0RST1BfTUVTU0FHRQp9OwoKZW51
bSB7CiAgICBYbU5PX0RST1BfU0lURT0xLAogICAgWG1JTlZBTElEX0RST1BfU0lURSwKICAgIFht
VkFMSURfRFJPUF9TSVRFCn07CmVudW0gewogICAgWG1EUkFHX1VOREVSX05PTkUsCiAgICBYbURS
QUdfVU5ERVJfUElYTUFQLAogICAgWG1EUkFHX1VOREVSX1NIQURPV19JTiwKICAgIFhtRFJBR19V
TkRFUl9TSEFET1dfT1VULAogICAgWG1EUkFHX1VOREVSX0hJR0hMSUdIVAp9OwoKZW51bSB7CiAg
ICBYbURST1BfU0lURV9TSU1QTEUsCiAgICBYbURST1BfU0lURV9DT01QT1NJVEUsCiAgICBYbURS
T1BfU0lURV9TSU1QTEVfQ0xJUF9PTkxZID0gMTI4LAogICAgWG1EUk9QX1NJVEVfQ09NUE9TSVRF
X0NMSVBfT05MWQp9OwoKZW51bSB7CiAgICBYbUFCT1ZFLAogICAgWG1CRUxPVwp9OwplbnVtIHsK
ICAgIFhtRFJPUF9TSVRFX0FDVElWRSwKICAgIFhtRFJPUF9TSVRFX0lOQUNUSVZFCn07CgoKdHlw
ZWRlZiBzdHJ1Y3QgX1htRHJhZ1Byb2NDYWxsYmFja1N0cnVjdCB7CiAgICBpbnQgcmVhc29uOwog
ICAgWEV2ZW50ICpldmVudDsKICAgIFRpbWUgdGltZVN0YW1wOwogICAgV2lkZ2V0IGRyYWdDb250
ZXh0OwogICAgUG9zaXRpb24geCwgeTsKICAgIHVuc2lnbmVkIGNoYXIgZHJvcFNpdGVTdGF0dXM7
CiAgICB1bnNpZ25lZCBjaGFyIG9wZXJhdGlvbjsKICAgIHVuc2lnbmVkIGNoYXIgb3BlcmF0aW9u
czsKICAgIEJvb2xlYW4gYW5pbWF0ZTsKfSBYbURyYWdQcm9jQ2FsbGJhY2tTdHJ1Y3QsICpYbURy
YWdQcm9jQ2FsbGJhY2s7Cgp0eXBlZGVmIHN0cnVjdCBfWG1Ecm9wUHJvY0NhbGxiYWNrU3RydWN0
IHsKICAgIGludCByZWFzb247CiAgICBYRXZlbnQgKmV2ZW50OwogICAgVGltZSB0aW1lU3RhbXA7
CiAgICBXaWRnZXQgZHJhZ0NvbnRleHQ7CiAgICBQb3NpdGlvbiB4LCB5OwogICAgdW5zaWduZWQg
Y2hhciBkcm9wU2l0ZVN0YXR1czsKICAgIHVuc2lnbmVkIGNoYXIgb3BlcmF0aW9uOwogICAgdW5z
aWduZWQgY2hhciBvcGVyYXRpb25zOwogICAgdW5zaWduZWQgY2hhciBkcm9wQWN0aW9uOwp9IFht
RHJvcFByb2NDYWxsYmFja1N0cnVjdCwgKlhtRHJvcFByb2NDYWxsYmFjazsKCnR5cGVkZWYgc3Ry
dWN0IF9YbURyb3BTaXRlVmlzdWFsc1JlYyB7CiAgICBQaXhlbCBiYWNrZ3JvdW5kOwogICAgUGl4
ZWwgZm9yZWdyb3VuZDsKICAgIFBpeGVsIHRvcFNoYWRvd0NvbG9yOwogICAgUGl4bWFwIHRvcFNo
YWRvd1BpeG1hcDsKICAgIFBpeGVsIGJvdHRvbVNoYWRvd0NvbG9yOwogICAgUGl4bWFwIGJvdHRv
bVNoYWRvd1BpeG1hcDsKICAgIERpbWVuc2lvbiBzaGFkb3dUaGlja25lc3M7CiAgICBQaXhlbCBo
aWdobGlnaHRDb2xvcjsKICAgIFBpeG1hcCBoaWdobGlnaHRQaXhtYXA7CiAgICBEaW1lbnNpb24g
aGlnaGxpZ2h0VGhpY2tuZXNzOwogICAgRGltZW5zaW9uIGJvcmRlcldpZHRoOwp9IFhtRHJvcFNp
dGVWaXN1YWxzUmVjLCAqWG1Ecm9wU2l0ZVZpc3VhbHM7CgoKZXh0ZXJuIFdpZGdldENsYXNzIHht
RHJvcFNpdGVNYW5hZ2VyT2JqZWN0Q2xhc3M7Cgp0eXBlZGVmIHN0cnVjdCBfWG1Ecm9wU2l0ZU1h
bmFnZXJDbGFzc1JlYyAqWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3RDbGFzczsKdHlwZWRlZiBzdHJ1
Y3QgX1htRHJvcFNpdGVNYW5hZ2VyUmVjICpYbURyb3BTaXRlTWFuYWdlck9iamVjdDsKCgoKCgpl
eHRlcm4gdm9pZCBYbURyb3BTaXRlUmVnaXN0ZXIoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENhcmRpbmFsIGFyZ0NvdW50KTsKZXh0ZXJuIHZvaWQgWG1Ecm9wU2l0ZVVucmVnaXN0
ZXIoV2lkZ2V0IHdpZGdldCk7CmV4dGVybiB2b2lkIFhtRHJvcFNpdGVTdGFydFVwZGF0ZShXaWRn
ZXQgcmVmV2lkZ2V0KTsKZXh0ZXJuIHZvaWQgWG1Ecm9wU2l0ZVVwZGF0ZShXaWRnZXQgZW5jbG9z
aW5nV2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJncywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBhcmdDb3VudCk7CmV4dGVybiB2b2lk
IFhtRHJvcFNpdGVFbmRVcGRhdGUoV2lkZ2V0IHJlZldpZGdldCk7CmV4dGVybiB2b2lkIFhtRHJv
cFNpdGVSZXRyaWV2ZShXaWRnZXQgZW5jbG9zaW5nV2lkZ2V0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q2FyZGluYWwgYXJnQ291bnQpOwpleHRlcm4gaW50IFhtRHJvcFNpdGVRdWVyeVN0YWNraW5nT3Jk
ZXIoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdpZGdldCAqcGFyZW50X3J0biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdpZGdldCAqKmNoaWxkcmVuX3J0biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENhcmRpbmFsICpudW1fY2hpbGRyZW5fcnRuKTsKZXh0ZXJuIHZvaWQgWG1Ecm9w
U2l0ZUNvbmZpZ3VyZVN0YWNraW5nT3JkZXIoV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHNpYmxpbmcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIHN0YWNrX21vZGUpOwpl
eHRlcm4gWG1Ecm9wU2l0ZVZpc3VhbHMgWG1Ecm9wU2l0ZUdldEFjdGl2ZVZpc3VhbHMoV2lkZ2V0
IHdpZGdldCk7CmVudW0gewogICAgWG1EUkFHX05PTkUsCiAgICBYbURSQUdfRFJPUF9PTkxZLAog
ICAgWG1EUkFHX1BSRUZFUl9QUkVSRUdJU1RFUiwKICAgIFhtRFJBR19QUkVSRUdJU1RFUiwKICAg
IFhtRFJBR19QUkVGRVJfRFlOQU1JQywKICAgIFhtRFJBR19EWU5BTUlDLAogICAgWG1EUkFHX1BS
RUZFUl9SRUNFSVZFUgp9OwoKZXh0ZXJuIFdpZGdldENsYXNzIHhtRGlzcGxheUNsYXNzOwoKdHlw
ZWRlZiBzdHJ1Y3QgX1htRGlzcGxheVJlYyAqWG1EaXNwbGF5Owp0eXBlZGVmIHN0cnVjdCBfWG1E
aXNwbGF5Q2xhc3NSZWMgKlhtRGlzcGxheUNsYXNzOwoKZXh0ZXJuIFdpZGdldCBYbUdldFhtRGlz
cGxheShEaXNwbGF5ICpEc3ApOwpleHRlcm4gV2lkZ2V0IFhtR2V0RHJhZ0NvbnRleHQoV2lkZ2V0
IHcsIFRpbWUgdGltZSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IFhtSUQ7CmVudW0gewogICAgWG1U
T1BfTEVWRUxfRU5URVIsCiAgICBYbVRPUF9MRVZFTF9MRUFWRSwKICAgIFhtRFJBR19NT1RJT04s
CiAgICBYbURST1BfU0lURV9FTlRFUiwKICAgIFhtRFJPUF9TSVRFX0xFQVZFLAogICAgWG1EUk9Q
X1NUQVJULAogICAgWG1EUk9QX0ZJTklTSCwKICAgIFhtRFJBR19EUk9QX0ZJTklTSCwKICAgIFht
T1BFUkFUSU9OX0NIQU5HRUQKfTsKCgplbnVtIHsKICAgIFhtRFJPUCwKICAgIFhtRFJPUF9IRUxQ
LAogICAgWG1EUk9QX0NBTkNFTCwKICAgIFhtRFJPUF9JTlRFUlJVUFQKfTsKZW51bSB7CiAgICBY
bURST1BfRkFJTFVSRSwKICAgIFhtRFJPUF9TVUNDRVNTCn07CgoKCmVudW0gewogICAgWG1CTEVO
RF9BTEwsCiAgICBYbUJMRU5EX1NUQVRFX1NPVVJDRSwKICAgIFhtQkxFTkRfSlVTVF9TT1VSQ0Us
CiAgICBYbUJMRU5EX05PTkUKfTsKCgoKZW51bSB7CiAgICBYbUNSX1RPUF9MRVZFTF9FTlRFUiwK
ICAgIFhtQ1JfVE9QX0xFVkVMX0xFQVZFLAogICAgWG1DUl9EUkFHX01PVElPTiwKICAgIFhtQ1Jf
RFJPUF9TSVRFX0VOVEVSLAogICAgWG1DUl9EUk9QX1NJVEVfTEVBVkUsCiAgICBYbUNSX0RST1Bf
U1RBUlQsCiAgICBYbUNSX0RST1BfRklOSVNILAogICAgWG1DUl9EUkFHX0RST1BfRklOSVNILAog
ICAgWG1DUl9PUEVSQVRJT05fQ0hBTkdFRCwKICAgIF9YbU5VTUJFUl9ETkRfQ0JfUkVBU09OUwp9
OwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJhZ0NvbnRleHRDbGFzc1JlYyAqWG1EcmFnQ29udGV4dENs
YXNzOwp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnQ29udGV4dFJlYyAqWG1EcmFnQ29udGV4dDsKZXh0
ZXJuIFdpZGdldENsYXNzIHhtRHJhZ0NvbnRleHRDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbUFu
eUlDQ0NhbGxiYWNrU3RydWN0IHsKICAgaW50IHJlYXNvbjsKICAgWEV2ZW50ICpldmVudDsKICAg
VGltZSB0aW1lU3RhbXA7Cn0gWG1BbnlJQ0NDYWxsYmFja1N0cnVjdCwgKlhtQW55SUNDQ2FsbGJh
Y2s7Cgp0eXBlZGVmIHN0cnVjdCBfWG1Ub3BMZXZlbEVudGVyQ2FsbGJhY2tTdHJ1Y3QgewogICBp
bnQgcmVhc29uOwogICBYRXZlbnQgKmV2ZW50OwogICBUaW1lIHRpbWVTdGFtcDsKICAgU2NyZWVu
ICpzY3JlZW47CgogICBXaW5kb3cgd2luZG93OwogICBQb3NpdGlvbiB4LHk7CiAgIHVuc2lnbmVk
IGNoYXIgZHJhZ1Byb3RvY29sU3R5bGU7CiAgIEF0b20gaWNjSGFuZGxlOwp9IFhtVG9wTGV2ZWxF
bnRlckNhbGxiYWNrU3RydWN0LCAqWG1Ub3BMZXZlbEVudGVyQ2FsbGJhY2s7Cgp0eXBlZGVmIHN0
cnVjdCBfWG1Ub3BMZXZlbExlYXZlQ2FsbGJhY2tTdHJ1Y3QgewogICBpbnQgcmVhc29uOwogICBY
RXZlbnQgKmV2ZW50OwogICBUaW1lIHRpbWVTdGFtcDsKICAgU2NyZWVuICpzY3JlZW47CiAgIFdp
bmRvdyB3aW5kb3c7Cn0gWG1Ub3BMZXZlbExlYXZlQ2FsbGJhY2tTdHJ1Y3QsICpYbVRvcExldmVs
TGVhdmVDYWxsYmFjazsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1Ecm9wU2l0ZUVudGVyQ2FsbGJh
Y2tTdHJ1Y3QgewogICBpbnQgcmVhc29uOwogICBYRXZlbnQgKmV2ZW50OwogICBUaW1lIHRpbWVT
dGFtcDsKICAgdW5zaWduZWQgY2hhciBvcGVyYXRpb247CiAgIHVuc2lnbmVkIGNoYXIgb3BlcmF0
aW9uczsKICAgdW5zaWduZWQgY2hhciBkcm9wU2l0ZVN0YXR1czsKICAgUG9zaXRpb24geCwgeTsK
fSBYbURyb3BTaXRlRW50ZXJDYWxsYmFja1N0cnVjdCwgKlhtRHJvcFNpdGVFbnRlckNhbGxiYWNr
OwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJvcFNpdGVMZWF2ZUNhbGxiYWNrU3RydWN0IHsKICAgaW50
IHJlYXNvbjsKICAgWEV2ZW50ICpldmVudDsKICAgVGltZSB0aW1lU3RhbXA7Cn0gWG1Ecm9wU2l0
ZUxlYXZlQ2FsbGJhY2tTdHJ1Y3QsICpYbURyb3BTaXRlTGVhdmVDYWxsYmFjazsKCnR5cGVkZWYg
c3RydWN0IF9YbURyYWdNb3Rpb25DYWxsYmFja1N0cnVjdCB7CiAgIGludCByZWFzb247CiAgIFhF
dmVudCAqZXZlbnQ7CiAgIFRpbWUgdGltZVN0YW1wOwogICB1bnNpZ25lZCBjaGFyIG9wZXJhdGlv
bjsKICAgdW5zaWduZWQgY2hhciBvcGVyYXRpb25zOwogICB1bnNpZ25lZCBjaGFyIGRyb3BTaXRl
U3RhdHVzOwogICBQb3NpdGlvbiB4LCB5Owp9IFhtRHJhZ01vdGlvbkNhbGxiYWNrU3RydWN0LCAq
WG1EcmFnTW90aW9uQ2FsbGJhY2s7Cgp0eXBlZGVmIHN0cnVjdCBfWG1PcGVyYXRpb25DaGFuZ2Vk
Q2FsbGJhY2tTdHJ1Y3QgewogICBpbnQgcmVhc29uOwogICBYRXZlbnQgKmV2ZW50OwogICBUaW1l
IHRpbWVTdGFtcDsKICAgdW5zaWduZWQgY2hhciBvcGVyYXRpb247CiAgIHVuc2lnbmVkIGNoYXIg
b3BlcmF0aW9uczsKICAgdW5zaWduZWQgY2hhciBkcm9wU2l0ZVN0YXR1czsKfSBYbU9wZXJhdGlv
bkNoYW5nZWRDYWxsYmFja1N0cnVjdCwgKlhtT3BlcmF0aW9uQ2hhbmdlZENhbGxiYWNrOwoKdHlw
ZWRlZiBzdHJ1Y3QgX1htRHJvcFN0YXJ0Q2FsbGJhY2tTdHJ1Y3QgewogICBpbnQgcmVhc29uOwog
ICBYRXZlbnQgKmV2ZW50OwogICBUaW1lIHRpbWVTdGFtcDsKICAgdW5zaWduZWQgY2hhciBvcGVy
YXRpb247CiAgIHVuc2lnbmVkIGNoYXIgb3BlcmF0aW9uczsKICAgdW5zaWduZWQgY2hhciBkcm9w
U2l0ZVN0YXR1czsKICAgdW5zaWduZWQgY2hhciBkcm9wQWN0aW9uOwogICBQb3NpdGlvbiB4LCB5
OwogICBXaW5kb3cgd2luZG93OwogICBBdG9tIGljY0hhbmRsZTsKfSBYbURyb3BTdGFydENhbGxi
YWNrU3RydWN0LCAqWG1Ecm9wU3RhcnRDYWxsYmFjazsKCnR5cGVkZWYgc3RydWN0IF9YbURyb3BG
aW5pc2hDYWxsYmFja1N0cnVjdCB7CiAgIGludCByZWFzb247CiAgIFhFdmVudCAqZXZlbnQ7CiAg
IFRpbWUgdGltZVN0YW1wOwogICB1bnNpZ25lZCBjaGFyIG9wZXJhdGlvbjsKICAgdW5zaWduZWQg
Y2hhciBvcGVyYXRpb25zOwogICB1bnNpZ25lZCBjaGFyIGRyb3BTaXRlU3RhdHVzOwogICB1bnNp
Z25lZCBjaGFyIGRyb3BBY3Rpb247CiAgIHVuc2lnbmVkIGNoYXIgY29tcGxldGlvblN0YXR1czsK
fSBYbURyb3BGaW5pc2hDYWxsYmFja1N0cnVjdCwgKlhtRHJvcEZpbmlzaENhbGxiYWNrOwoKdHlw
ZWRlZiBzdHJ1Y3QgX1htRHJhZ0Ryb3BGaW5pc2hDYWxsYmFja1N0cnVjdCB7CiAgIGludCByZWFz
b247CiAgIFhFdmVudCAqZXZlbnQ7CiAgIFRpbWUgdGltZVN0YW1wOwp9IFhtRHJhZ0Ryb3BGaW5p
c2hDYWxsYmFja1N0cnVjdCwgKlhtRHJhZ0Ryb3BGaW5pc2hDYWxsYmFjazsKCgoKZXh0ZXJuIFdp
ZGdldCBYbURyYWdTdGFydChXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICAgICBYRXZl
bnQgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJncywKICAgICAg
ICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBudW1BcmdzKTsKCmV4dGVybiB2b2lkIFhtRHJh
Z0NhbmNlbChXaWRnZXQgZHJhZ0NvbnRleHQpOwoKZXh0ZXJuIEJvb2xlYW4gWG1UYXJnZXRzQXJl
Q29tcGF0aWJsZShEaXNwbGF5ICpkcHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXRvbSAqZXhwb3J0VGFyZ2V0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDYXJkaW5hbCBudW1FeHBvcnRUYXJnZXRzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEF0b20gKmltcG9ydFRhcmdldHMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgbnVtSW1wb3J0VGFyZ2V0cyk7CmVudW0gewogICAg
WG1UUkFOU0ZFUl9GQUlMVVJFLAogICAgWG1UUkFOU0ZFUl9TVUNDRVNTCn07CgpleHRlcm4gV2lk
Z2V0Q2xhc3MgeG1Ecm9wVHJhbnNmZXJPYmplY3RDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbURy
b3BUcmFuc2ZlckNsYXNzUmVjICpYbURyb3BUcmFuc2Zlck9iamVjdENsYXNzOwp0eXBlZGVmIHN0
cnVjdCBfWG1Ecm9wVHJhbnNmZXJSZWMgKlhtRHJvcFRyYW5zZmVyT2JqZWN0OwoKCgoKCnR5cGVk
ZWYgc3RydWN0IF9YbURyb3BUcmFuc2ZlckVudHJ5UmVjIHsKICAgWHRQb2ludGVyIGNsaWVudF9k
YXRhOwogICBBdG9tIHRhcmdldDsKfSBYbURyb3BUcmFuc2ZlckVudHJ5UmVjLCAqWG1Ecm9wVHJh
bnNmZXJFbnRyeTsKCldpZGdldCBYbURyb3BUcmFuc2ZlclN0YXJ0KFdpZGdldCByZWZXaWRnZXQs
IEFyZ0xpc3QgYXJncywgQ2FyZGluYWwgYXJnQ291bnQpOwp2b2lkIFhtRHJvcFRyYW5zZmVyQWRk
KFdpZGdldCB3aWRnZXQsIFhtRHJvcFRyYW5zZmVyRW50cnkgdHJhbnNmZXJzLCBDYXJkaW5hbCBu
dW1fdHJhbnNmZXJzKTsKdHlwZWRlZiBXaWRnZXQgKCpYbURyb3BUcmFuc2ZlclN0YXJ0VHJhbnNm
ZXJQcm9jKShXaWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXJnTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDYXJkaW5hbCk7CnR5cGVkZWYgdm9pZCAoKlhtRHJvcFRyYW5zZmVyQWRkVHJh
bnNmZXJQcm9jKShXaWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBYbURyb3BUcmFuc2ZlckVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2FyZGluYWwpOwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJvcFRyYW5z
ZmVyQ2xhc3NQYXJ0IHsKICAgIFhtRHJvcFRyYW5zZmVyU3RhcnRUcmFuc2ZlclByb2Mgc3RhcnRf
ZHJvcF90cmFuc2ZlcjsKICAgIFhtRHJvcFRyYW5zZmVyQWRkVHJhbnNmZXJQcm9jIGFkZF9kcm9w
X3RyYW5zZmVyOwogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBYbURyb3BUcmFuc2ZlckNsYXNz
UGFydDsKCnR5cGVkZWYgc3RydWN0IF9YbURyb3BUcmFuc2ZlckNsYXNzUmVjIHsKICAgIE9iamVj
dENsYXNzUGFydCBvYmplY3RfY2xhc3M7CiAgICBYbURyb3BUcmFuc2ZlckNsYXNzUGFydCBkcm9w
VHJhbnNmZXJfY2xhc3M7Cn0gWG1Ecm9wVHJhbnNmZXJDbGFzc1JlYzsKCmV4dGVybiBYbURyb3BU
cmFuc2ZlckNsYXNzUmVjIHhtRHJvcFRyYW5zZmVyQ2xhc3NSZWM7Cgp0eXBlZGVmIHN0cnVjdCBf
WG1Ecm9wVHJhbnNmZXJMaXN0UmVjIHsKICAgIFhtRHJvcFRyYW5zZmVyRW50cnkgdHJhbnNmZXJf
bGlzdDsKICAgIENhcmRpbmFsIG51bV90cmFuc2ZlcnM7Cn0gWG1Ecm9wVHJhbnNmZXJMaXN0UmVj
LCAqWG1Ecm9wVHJhbnNmZXJMaXN0OwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJvcFRyYW5zZmVyUGFy
dCB7CiAgICBYbURyb3BUcmFuc2ZlckVudHJ5IGRyb3BfdHJhbnNmZXJzOwogICAgQ2FyZGluYWwg
bnVtX2Ryb3BfdHJhbnNmZXJzOwogICAgQXRvbSBzZWxlY3Rpb247CiAgICBXaWRnZXQgZHJhZ0Nv
bnRleHQ7CiAgICBUaW1lIHRpbWVzdGFtcDsKICAgIEJvb2xlYW4gaW5jcmVtZW50YWw7CiAgICBX
aW5kb3cgc291cmNlX3dpbmRvdzsKICAgIHVuc2lnbmVkIGludCB0YWc7CiAgICBYdFNlbGVjdGlv
bkNhbGxiYWNrUHJvYyB0cmFuc2Zlcl9jYWxsYmFjazsKICAgIHVuc2lnbmVkIGNoYXIgdHJhbnNm
ZXJfc3RhdHVzOwoKICAgIEF0b20gbW90aWZfZHJvcF9hdG9tOwoKICAgIFhtRHJvcFRyYW5zZmVy
TGlzdCBkcm9wX3RyYW5zZmVyX2xpc3RzOwogICAgQ2FyZGluYWwgbnVtX2Ryb3BfdHJhbnNmZXJf
bGlzdHM7CiAgICBDYXJkaW5hbCBjdXJfZHJvcF90cmFuc2Zlcl9saXN0OwogICAgQ2FyZGluYWwg
Y3VyX3hmZXI7CiAgICBBdG9tICpjdXJfdGFyZ2V0czsKICAgIFh0UG9pbnRlciAqY3VyX2NsaWVu
dF9kYXRhOwp9IFhtRHJvcFRyYW5zZmVyUGFydDsKCnR5cGVkZWYgc3RydWN0IF9YbURyb3BUcmFu
c2ZlclJlYyB7CiAgICBPYmplY3RQYXJ0IG9iamVjdDsKICAgIFhtRHJvcFRyYW5zZmVyUGFydCBk
cm9wVHJhbnNmZXI7Cn0gWG1Ecm9wVHJhbnNmZXJSZWM7CmV4dGVybiB2b2lkIF9YbUludGVybkF0
b21BbmROYW1lKERpc3BsYXkgKmRpc3BsYXksIEF0b20gYXRvbSwgU3RyaW5nIG5hbWUpOwoKCmV4
dGVybiB2b2lkIF9YbUZsdXNoQXRvbXNGb3JEaXNwbGF5KERpc3BsYXkgKkRzcCk7CnR5cGVkZWYg
bG9uZyBJTlQzMjsKCnR5cGVkZWYgc2hvcnQgSU5UMTY7CgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIg
SU5UODsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIENBUkQzMjsKCnR5cGVkZWYgdW5zaWduZWQgc2hv
cnQgQ0FSRDE2Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgQ0FSRDg7Cgp0eXBlZGVmIENBUkQzMiBC
SVRTMzI7CnR5cGVkZWYgQ0FSRDE2IEJJVFMxNjsKCgp0eXBlZGVmIENBUkQ4IEJZVEU7CnR5cGVk
ZWYgQ0FSRDggQk9PTDsKdHlwZWRlZiBzdHJ1Y3QgX1htRHJhZ092ZXJTaGVsbFJlYyAqWG1EcmFn
T3ZlclNoZWxsV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnT3ZlclNoZWxsQ2xhc3NSZWMg
KlhtRHJhZ092ZXJTaGVsbFdpZGdldENsYXNzOwoKZXh0ZXJuIFdpZGdldENsYXNzIHhtRHJhZ092
ZXJTaGVsbFdpZGdldENsYXNzOwp0eXBlZGVmIHZvaWQgKCpYbURTTUNyZWF0ZUluZm9Qcm9jKShY
bURyb3BTaXRlTWFuYWdlck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdMaXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCk7CnR5cGVkZWYgdm9p
ZCAoKlhtRFNNRGVzdHJveUluZm9Qcm9jKShYbURyb3BTaXRlTWFuYWdlck9iamVjdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCk7CnR5cGVkZWYgdm9pZCAoKlht
RFNNU3RhcnRVcGRhdGVQcm9jKShYbURyb3BTaXRlTWFuYWdlck9iamVjdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCk7CnR5cGVkZWYgdm9pZCAoKlhtRFNNUmV0
cmlldmVJbmZvUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZ0xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q2FyZGluYWwpOwp0eXBlZGVmIHZvaWQgKCpYbURTTVVwZGF0ZUluZm9Qcm9jKShYbURyb3BTaXRl
TWFuYWdlck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdMaXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCk7CnR5cGVkZWYgdm9pZCAoKlhtRFNN
RW5kVXBkYXRlUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2lkZ2V0KTsKdHlwZWRlZiB2b2lkICgqWG1EU01VcGRhdGVQcm9j
KShYbURyb3BTaXRlTWFuYWdlck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYdFBvaW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyKTsK
dHlwZWRlZiB2b2lkICgqWG1EU01Qcm9jZXNzTW90aW9uUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJP
YmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyKTsKdHlwZWRl
ZiB2b2lkICgqWG1EU01Qcm9jZXNzRHJvcFByb2MpKFhtRHJvcFNpdGVNYW5hZ2VyT2JqZWN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyKTsKdHlwZWRlZiB2b2lkICgqWG1E
U01PcGVyYXRpb25DaGFuZ2VkUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyKTsKdHlwZWRlZiB2b2lkICgq
WG1EU01DaGFuZ2VSb290UHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgWHRQb2ludGVyKTsKdHlwZWRlZiB2b2lkICgqWG1EU01JbnNlcnRJbmZv
UHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFh0UG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WHRQb2ludGVyKTsKdHlwZWRlZiB2b2lkICgqWG1EU01SZW1vdmVJbmZvUHJvYykoWG1Ecm9wU2l0
ZU1hbmFnZXJPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9p
bnRlcik7CnR5cGVkZWYgdm9pZCAoKlhtRFNNU3luY1RyZWVQcm9jKShYbURyb3BTaXRlTWFuYWdl
ck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCk7CnR5cGVk
ZWYgaW50ICgqWG1EU01HZXRUcmVlRnJvbURTTVByb2MpKFhtRHJvcFNpdGVNYW5hZ2VyT2JqZWN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyKTsKdHlwZWRlZiB2b2lk
ICgqWG1EU01DcmVhdGVEU0luZm9UYWJsZSkoWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3QpOwp0eXBl
ZGVmIHZvaWQgKCpYbURTTURlc3Ryb3lEU0luZm9UYWJsZSkoWG1Ecm9wU2l0ZU1hbmFnZXJPYmpl
Y3QpOwp0eXBlZGVmIHZvaWQgKCpYbURTTVJlZ2lzdGVySW5mb1Byb2MpKFhtRHJvcFNpdGVNYW5h
Z2VyT2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIpOwp0eXBlZGVm
IFh0UG9pbnRlciAoKlhtRFNNV2lkZ2V0VG9JbmZvUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJPYmpl
Y3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQpOwp0
eXBlZGVmIHZvaWQgKCpYbURTTVVucmVnaXN0ZXJJbmZvUHJvYykoWG1Ecm9wU2l0ZU1hbmFnZXJP
YmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFBvaW50ZXIp
OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWG1EU01DcmVhdGVJbmZvUHJvYyBjcmVhdGVJbmZvOwog
ICAgWG1EU01EZXN0cm95SW5mb1Byb2MgZGVzdHJveUluZm87CiAgICBYbURTTVN0YXJ0VXBkYXRl
UHJvYyBzdGFydFVwZGF0ZTsKICAgIFhtRFNNUmV0cmlldmVJbmZvUHJvYyByZXRyaWV2ZUluZm87
CiAgICBYbURTTVVwZGF0ZUluZm9Qcm9jIHVwZGF0ZUluZm87CiAgICBYbURTTUVuZFVwZGF0ZVBy
b2MgZW5kVXBkYXRlOwoKICAgIFhtRFNNVXBkYXRlUHJvYyB1cGRhdGVEU007CgogICAgWG1EU01Q
cm9jZXNzTW90aW9uUHJvYyBwcm9jZXNzTW90aW9uOwogICAgWG1EU01Qcm9jZXNzRHJvcFByb2Mg
cHJvY2Vzc0Ryb3A7CiAgICBYbURTTU9wZXJhdGlvbkNoYW5nZWRQcm9jIG9wZXJhdGlvbkNoYW5n
ZWQ7CiAgICBYbURTTUNoYW5nZVJvb3RQcm9jIGNoYW5nZVJvb3Q7CgogICAgWG1EU01JbnNlcnRJ
bmZvUHJvYyBpbnNlcnRJbmZvOwogICAgWG1EU01SZW1vdmVJbmZvUHJvYyByZW1vdmVJbmZvOwoK
ICAgIFhtRFNNU3luY1RyZWVQcm9jIHN5bmNUcmVlOwogICAgWG1EU01HZXRUcmVlRnJvbURTTVBy
b2MgZ2V0VHJlZUZyb21EU007CgogICAgWG1EU01DcmVhdGVEU0luZm9UYWJsZSBjcmVhdGVUYWJs
ZTsKICAgIFhtRFNNRGVzdHJveURTSW5mb1RhYmxlIGRlc3Ryb3lUYWJsZTsKICAgIFhtRFNNUmVn
aXN0ZXJJbmZvUHJvYyByZWdpc3RlckluZm87CiAgICBYbURTTVdpZGdldFRvSW5mb1Byb2Mgd2lk
Z2V0VG9JbmZvOwogICAgWG1EU01VbnJlZ2lzdGVySW5mb1Byb2MgdW5yZWdpc3RlckluZm87Cgog
ICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBYbURyb3BTaXRlTWFuYWdlckNsYXNzUGFydDsKCnR5
cGVkZWYgc3RydWN0IF9YbURyb3BTaXRlTWFuYWdlckNsYXNzUmVjIHsKICAgIE9iamVjdENsYXNz
UGFydCBvYmplY3RfY2xhc3M7CiAgICBYbURyb3BTaXRlTWFuYWdlckNsYXNzUGFydCBkcm9wTWFu
YWdlcl9jbGFzczsKfSBYbURyb3BTaXRlTWFuYWdlckNsYXNzUmVjOwoKZXh0ZXJuIFhtRHJvcFNp
dGVNYW5hZ2VyQ2xhc3NSZWMgeG1Ecm9wU2l0ZU1hbmFnZXJDbGFzc1JlYzsKdHlwZWRlZiBzdHJ1
Y3QgX19YbURyb3BTaXRlVXBkYXRlSW5mb1JlYyB7CiAgWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3Qg
ZHNtOwogIFdpZGdldCByZWZXaWRnZXQ7CiAgWHRQb2ludGVyICpuZXh0Owp9IF9YbURyb3BTaXRl
VXBkYXRlSW5mb1JlYywgKl9YbURyb3BTaXRlVXBkYXRlSW5mbzsKCnR5cGVkZWYgc3RydWN0IF9Y
bURyb3BTaXRlTWFuYWdlclBhcnQgewogICAgWHRDYWxsYmFja1Byb2Mgbm90aWZ5UHJvYzsKICAg
IFh0Q2FsbGJhY2tQcm9jIHRyZWVVcGRhdGVQcm9jOwogICAgWHRQb2ludGVyIGNsaWVudF9kYXRh
OwogICAgWHRQb2ludGVyIGRyYWdVbmRlckRhdGE7CiAgICBYdFBvaW50ZXIgY3VySW5mbzsKICAg
IFRpbWUgY3VyVGltZTsKICAgIFBvc2l0aW9uIGN1clgsIGN1clksIG9sZFgsIG9sZFk7CiAgICB1
bnNpZ25lZCBjaGFyIGN1ckRyb3BTaXRlU3RhdHVzOwogICAgV2lkZ2V0IGN1ckRyYWdDb250ZXh0
OwogICAgQm9vbGVhbiBjdXJBbmltYXRlOwogICAgdW5zaWduZWQgY2hhciBjdXJPcGVyYXRpb25z
OwogICAgdW5zaWduZWQgY2hhciBjdXJPcGVyYXRpb247CiAgICBYbVJlZ2lvbiBjdXJBbmNlc3Rv
ckNsaXBSZWdpb247CiAgICBYbVJlZ2lvbiBuZXdBbmNlc3RvckNsaXBSZWdpb247CiAgICBYdFBv
aW50ZXIgZHNUYWJsZTsKICAgIFh0UG9pbnRlciBkc1Jvb3Q7CiAgICBQb3NpdGlvbiByb290WCwg
cm9vdFk7CiAgICBEaW1lbnNpb24gcm9vdFcsIHJvb3RIOwogICAgWHRQb2ludGVyIGNsaXBwZXJM
aXN0OwogICAgX1htRHJvcFNpdGVVcGRhdGVJbmZvIHVwZGF0ZUluZm87Cn0gWG1Ecm9wU2l0ZU1h
bmFnZXJQYXJ0LCAqWG1Ecm9wU2l0ZU1hbmFnZXJQYXJ0UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgX1ht
RHJvcFNpdGVNYW5hZ2VyUmVjIHsKICAgIE9iamVjdFBhcnQgb2JqZWN0OwogICAgWG1Ecm9wU2l0
ZU1hbmFnZXJQYXJ0IGRyb3BNYW5hZ2VyOwp9IFhtRHJvcFNpdGVNYW5hZ2VyUmVjOwoKZXh0ZXJu
IHZvaWQgX1htRFNNVXBkYXRlKFhtRHJvcFNpdGVNYW5hZ2VyT2JqZWN0IGRzbSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjbGllbnREYXRhLAogICAgICAgICAgICAgICAgICAg
ICAgICAgWHRQb2ludGVyIGNhbGxEYXRhKTsKZXh0ZXJuIGludCBfWG1EU01HZXRUcmVlRnJvbURT
TShYbURyb3BTaXRlTWFuYWdlck9iamVjdCBkc20sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2lkZ2V0IHNoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9p
bnRlciBkYXRhUHRyKTsKZXh0ZXJuIEJvb2xlYW4gX1htRHJvcFNpdGVTaGVsbChXaWRnZXQgd2lk
Z2V0KTsKZXh0ZXJuIEJvb2xlYW4gX1htRHJvcFNpdGVXcmFwcGVyQ2FuZGlkYXRlKFdpZGdldCB3
aWRnZXQpOwpleHRlcm4gV2lkZ2V0IF9YbUdldEFjdGl2ZURyb3BTaXRlKFdpZGdldCB3aWRnZXQp
OwpleHRlcm4gdm9pZCBfWG1TeW5jRHJvcFNpdGVUcmVlKFdpZGdldCBzaGVsbCk7CmV4dGVybiB2
b2lkIF9YbUlFbmRVcGRhdGUoWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdEludGVydmFsSWQgKmlu
dGVydmFsX2lkKTsKdHlwZWRlZiB2b2lkICgqWG1EcmFnU3RhcnRQcm9jKShYbURyYWdDb250ZXh0
LCBXaWRnZXQsIFhFdmVudCAqKTsKdHlwZWRlZiB2b2lkICgqWG1EcmFnQ2FuY2VsUHJvYykoWG1E
cmFnQ29udGV4dCkgOwp0eXBlZGVmIHN0cnVjdCB7CiAgIFhtRHJhZ1N0YXJ0UHJvYyBzdGFydDsK
ICAgWG1EcmFnQ2FuY2VsUHJvYyBjYW5jZWw7CiAgIFh0UG9pbnRlciBleHRlbnNpb247Cn0gWG1E
cmFnQ29udGV4dENsYXNzUGFydDsKCnR5cGVkZWYgc3RydWN0IF9YbURyYWdDb250ZXh0Q2xhc3NS
ZWMgewogICBDb3JlQ2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgIFhtRHJhZ0NvbnRleHRDbGFzc1Bh
cnQgZHJhZ19jbGFzczsKfSBYbURyYWdDb250ZXh0Q2xhc3NSZWM7CgpleHRlcm4gWG1EcmFnQ29u
dGV4dENsYXNzUmVjIHhtRHJhZ0NvbnRleHRDbGFzc1JlYzsKCgoKCnR5cGVkZWYgc3RydWN0IHsK
ICAgV2luZG93IGZyYW1lOwogICBXaW5kb3cgd2luZG93OwogICBXaWRnZXQgc2hlbGw7CiAgIHVu
c2lnbmVkIGNoYXIgZmxhZ3M7CiAgIHVuc2lnbmVkIGNoYXIgZHJhZ1Byb3RvY29sU3R5bGU7CiAg
IGludCB4T3JpZ2luLCB5T3JpZ2luOwogICB1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKICAg
dW5zaWduZWQgaW50IGRlcHRoOwogICBYdFBvaW50ZXIgaWNjSW5mbzsKfSBYbURyYWdSZWNlaXZl
ckluZm9TdHJ1Y3QsICpYbURyYWdSZWNlaXZlckluZm87CgoKdHlwZWRlZiB1bmlvbiBfWG1Db252
ZXJ0U2VsZWN0aW9uUmVjIHsKICAgWHRDb252ZXJ0U2VsZWN0aW9uSW5jclByb2Mgc2VsX2luY3I7
CiAgIFh0Q29udmVydFNlbGVjdGlvblByb2Mgc2VsOwp9IFhtQ29udmVydFNlbGVjdGlvblJlYzsK
CnR5cGVkZWYgc3RydWN0IF9YbURyYWdDb250ZXh0UGFydCB7CiAgIEF0b20gKmV4cG9ydFRhcmdl
dHM7CiAgIENhcmRpbmFsIG51bUV4cG9ydFRhcmdldHM7CiAgIFhtQ29udmVydFNlbGVjdGlvblJl
YyBjb252ZXJ0UHJvYzsKICAgWHRQb2ludGVyIGNsaWVudERhdGE7CiAgIFhtRHJhZ0ljb25PYmpl
Y3Qgc291cmNlQ3Vyc29ySWNvbjsKICAgWG1EcmFnSWNvbk9iamVjdCBzdGF0ZUN1cnNvckljb247
CiAgIFhtRHJhZ0ljb25PYmplY3Qgb3BlcmF0aW9uQ3Vyc29ySWNvbjsKICAgWG1EcmFnSWNvbk9i
amVjdCBzb3VyY2VQaXhtYXBJY29uOwogICBQaXhlbCBjdXJzb3JCYWNrZ3JvdW5kOwogICBQaXhl
bCBjdXJzb3JGb3JlZ3JvdW5kOwogICBQaXhlbCB2YWxpZEN1cnNvckZvcmVncm91bmQ7CiAgIFBp
eGVsIGludmFsaWRDdXJzb3JGb3JlZ3JvdW5kOwogICBQaXhlbCBub25lQ3Vyc29yRm9yZWdyb3Vu
ZDsKICAgWHRDYWxsYmFja0xpc3QgZHJhZ01vdGlvbkNhbGxiYWNrOwogICBYdENhbGxiYWNrTGlz
dCBvcGVyYXRpb25DaGFuZ2VkQ2FsbGJhY2s7CiAgIFh0Q2FsbGJhY2tMaXN0IHNpdGVFbnRlckNh
bGxiYWNrOwogICBYdENhbGxiYWNrTGlzdCBzaXRlTGVhdmVDYWxsYmFjazsKICAgWHRDYWxsYmFj
a0xpc3QgdG9wTGV2ZWxFbnRlckNhbGxiYWNrOwogICBYdENhbGxiYWNrTGlzdCB0b3BMZXZlbExl
YXZlQ2FsbGJhY2s7CiAgIFh0Q2FsbGJhY2tMaXN0IGRyb3BTdGFydENhbGxiYWNrOwogICBYdENh
bGxiYWNrTGlzdCBkcm9wRmluaXNoQ2FsbGJhY2s7CiAgIFh0Q2FsbGJhY2tMaXN0IGRyYWdEcm9w
RmluaXNoQ2FsbGJhY2s7CiAgIHVuc2lnbmVkIGNoYXIgZHJhZ09wZXJhdGlvbnM7CiAgIEJvb2xl
YW4gaW5jcmVtZW50YWw7CiAgIHVuc2lnbmVkIGNoYXIgYmxlbmRNb2RlbDsKCiAgIFdpbmRvdyBz
cmNXaW5kb3c7CiAgIFRpbWUgZHJhZ1N0YXJ0VGltZTsKICAgQXRvbSBpY2NIYW5kbGU7CiAgIFdp
ZGdldCBzb3VyY2VXaWRnZXQ7CiAgIEJvb2xlYW4gc291cmNlSXNFeHRlcm5hbDsKCiAgIEJvb2xl
YW4gdG9wV2luZG93c0ZldGNoZWQ7CiAgIHVuc2lnbmVkIGNoYXIgY29tbVR5cGU7CiAgIHVuc2ln
bmVkIGNoYXIgYW5pbWF0aW9uVHlwZTsKCiAgIHVuc2lnbmVkIGNoYXIgb3BlcmF0aW9uOwogICB1
bnNpZ25lZCBjaGFyIG9wZXJhdGlvbnM7CiAgIHVuc2lnbmVkIGludCBsYXN0RXZlbnRTdGF0ZTsK
ICAgdW5zaWduZWQgY2hhciBkcmFnQ29tcGxldGlvblN0YXR1czsKICAgdW5zaWduZWQgY2hhciBk
cmFnRHJvcENvbXBsZXRpb25TdGF0dXM7CiAgIEJvb2xlYW4gZm9yY2VJUEM7CiAgIEJvb2xlYW4g
c2VydmVyR3JhYmJlZDsKICAgQm9vbGVhbiB1c2VMb2NhbDsKICAgQm9vbGVhbiBpbkRyb3BTaXRl
OwogICBYdEludGVydmFsSWQgZHJhZ1RpbWVySWQ7CgogICBUaW1lIHJvdW5kT2ZmVGltZTsKICAg
VGltZSBsYXN0Q2hhbmdlVGltZTsKICAgVGltZSBjcm9zc2luZ1RpbWU7CgogICBUaW1lIGRyYWdG
aW5pc2hUaW1lOwogICBUaW1lIGRyb3BGaW5pc2hUaW1lOwoKICAgQXRvbSBkcm9wU2VsZWN0aW9u
OwogICBXaWRnZXQgc3JjU2hlbGw7CiAgIFBvc2l0aW9uIHN0YXJ0WCwgc3RhcnRZOwoKICAgWG1J
RCBzaXRlSUQ7CgogICBTY3JlZW4gKmN1cnJTY3JlZW47CiAgIFdpbmRvdyBjdXJyV21Sb290Owog
ICBYbURyYWdPdmVyU2hlbGxXaWRnZXQgY3VyRHJhZ092ZXI7CiAgIFhtRHJhZ092ZXJTaGVsbFdp
ZGdldCBvcmlnRHJhZ092ZXI7CgogICBYbURyYWdSZWNlaXZlckluZm9TdHJ1Y3QgKmN1cnJSZWNl
aXZlckluZm87CiAgIFhtRHJhZ1JlY2VpdmVySW5mb1N0cnVjdCAqcm9vdFJlY2VpdmVySW5mbzsK
ICAgWG1EcmFnUmVjZWl2ZXJJbmZvU3RydWN0ICpyZWNlaXZlckluZm9zOwogICBDYXJkaW5hbCBu
dW1SZWNlaXZlckluZm9zOwogICBDYXJkaW5hbCBtYXhSZWNlaXZlckluZm9zOwoKICAgdW5zaWdu
ZWQgY2hhciB0cmFja2luZ01vZGU7CiAgIHVuc2lnbmVkIGNoYXIgYWN0aXZlUHJvdG9jb2xTdHls
ZTsKICAgdW5zaWduZWQgY2hhciBhY3RpdmVCbGVuZE1vZGVsOwogICBCb29sZWFuIGRyYWdEcm9w
Q2FuY2VsRWZmZWN0Owp9IFhtRHJhZ0NvbnRleHRQYXJ0OwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJh
Z0NvbnRleHRSZWMgewogICBDb3JlUGFydCBjb3JlOwogICBYbURyYWdDb250ZXh0UGFydCBkcmFn
Owp9IFhtRHJhZ0NvbnRleHRSZWM7CgoKCmV4dGVybiBYbURyYWdSZWNlaXZlckluZm8gX1htQWxs
b2NSZWNlaXZlckluZm8oWG1EcmFnQ29udGV4dCBkYyk7CmV4dGVybiB1bnNpZ25lZCBjaGFyIF9Y
bUdldEFjdGl2ZVByb3RvY29sU3R5bGUoV2lkZ2V0IHcpOwp0eXBlZGVmIHN0cnVjdCB7CiAgICBD
QVJEMzIgZmxhZ3M7CiAgICBDQVJEMzIgZnVuY3Rpb25zOwogICAgQ0FSRDMyIGRlY29yYXRpb25z
OwogICAgSU5UMzIgaW5wdXRfbW9kZTsKICAgIENBUkQzMiBzdGF0dXM7Cn0gTW90aWZXbUhpbnRz
LCBNd21IaW50czsKdHlwZWRlZiBzdHJ1Y3QgewogICAgbG9uZyBmbGFnczsKICAgIFdpbmRvdyB3
bV93aW5kb3c7Cn0gTW90aWZXbUluZm87Cgp0eXBlZGVmIE1vdGlmV21JbmZvIE13bUluZm87CgoK
CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEMzIgZmxhZ3M7CiAgICBDQVJEMzIgZnVuY3Rp
b25zOwogICAgQ0FSRDMyIGRlY29yYXRpb25zOwogICAgSU5UMzIgaW5wdXRNb2RlOwogICAgQ0FS
RDMyIHN0YXR1czsKfSBQcm9wTW90aWZXbUhpbnRzOwoKdHlwZWRlZiBQcm9wTW90aWZXbUhpbnRz
IFByb3BNd21IaW50czsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIENBUkQzMiBmbGFnczsK
ICAgIENBUkQzMiB3bVdpbmRvdzsKfSBQcm9wTW90aWZXbUluZm87Cgp0eXBlZGVmIFByb3BNb3Rp
ZldtSW5mbyBQcm9wTXdtSW5mbzsKdHlwZWRlZiBzdHJ1Y3QgX1htU2hlbGxFeHRSZWMgKlhtU2hl
bGxFeHRPYmplY3Q7CnR5cGVkZWYgc3RydWN0IF9YbVNoZWxsRXh0Q2xhc3NSZWMgKlhtU2hlbGxF
eHRPYmplY3RDbGFzczsKCgoKZXh0ZXJuIFdpZGdldENsYXNzIHhtU2hlbGxFeHRDbGFzczsKCgp0
eXBlZGVmIHN0cnVjdCBfWG1TaGVsbEV4dENsYXNzUGFydCB7CiAgICBYdEV2ZW50SGFuZGxlciBz
dHJ1Y3R1cmVOb3RpZnlIYW5kbGVyOwogICAgWHRQb2ludGVyIGV4dGVuc2lvbjsKfSBYbVNoZWxs
RXh0Q2xhc3NQYXJ0LCAqWG1TaGVsbEV4dENsYXNzUGFydFB0cjsKCnR5cGVkZWYgc3RydWN0IF9Y
bVNoZWxsRXh0Q2xhc3NSZWMgewogICAgT2JqZWN0Q2xhc3NQYXJ0IG9iamVjdF9jbGFzczsKICAg
IFhtRXh0Q2xhc3NQYXJ0IGV4dF9jbGFzczsKICAgIFhtRGVza3RvcENsYXNzUGFydCBkZXNrdG9w
X2NsYXNzOwogICAgWG1TaGVsbEV4dENsYXNzUGFydCBzaGVsbF9jbGFzczsKfSBYbVNoZWxsRXh0
Q2xhc3NSZWM7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25lZCBsb25nIGxhc3RDb25maWd1
cmVSZXF1ZXN0OwogICAgQm9vbGVhbiB1c2VBc3luY0dlb21ldHJ5Owp9IFhtU2hlbGxFeHRQYXJ0
LCAqWG1TaGVsbEV4dFBhcnRQdHI7CgpleHRlcm4gWG1TaGVsbEV4dENsYXNzUmVjIHhtU2hlbGxF
eHRDbGFzc1JlYzsKCnR5cGVkZWYgc3RydWN0IF9YbVNoZWxsRXh0UmVjIHsKICAgIE9iamVjdFBh
cnQgb2JqZWN0OwogICAgWG1FeHRQYXJ0IGV4dDsKICAgIFhtRGVza3RvcFBhcnQgZGVza3RvcDsK
ICAgIFhtU2hlbGxFeHRQYXJ0IHNoZWxsOwp9IFhtU2hlbGxFeHRSZWM7CnR5cGVkZWYgc3RydWN0
IF9YbVZlbmRvclNoZWxsRXh0UmVjICpYbVZlbmRvclNoZWxsRXh0T2JqZWN0Owp0eXBlZGVmIHN0
cnVjdCBfWG1WZW5kb3JTaGVsbEV4dENsYXNzUmVjICpYbVZlbmRvclNoZWxsRXh0T2JqZWN0Q2xh
c3M7CmV4dGVybiBXaWRnZXRDbGFzcyB4bVZlbmRvclNoZWxsRXh0T2JqZWN0Q2xhc3M7CgoKCnR5
cGVkZWYgc3RydWN0IF9YbVZlbmRvclNoZWxsRXh0Q2xhc3NQYXJ0ewogICAgWHRDYWxsYmFja1By
b2MgZGVsZXRlX3dpbmRvd19oYW5kbGVyOwogICAgWHRDYWxsYmFja1Byb2Mgb2Zmc2V0X2hhbmRs
ZXI7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFhtVmVuZG9yU2hlbGxFeHRDbGFzc1BhcnQs
ICpYbVZlbmRvclNoZWxsRXh0Q2xhc3NQYXJ0UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgX1htVmVuZG9y
U2hlbGxFeHRDbGFzc1JlY3sKICAgIE9iamVjdENsYXNzUGFydCBvYmplY3RfY2xhc3M7CiAgICBY
bUV4dENsYXNzUGFydCBleHRfY2xhc3M7CiAgICBYbURlc2t0b3BDbGFzc1BhcnQgZGVza3RvcF9j
bGFzczsKICAgIFhtU2hlbGxFeHRDbGFzc1BhcnQgc2hlbGxfY2xhc3M7CiAgICBYbVZlbmRvclNo
ZWxsRXh0Q2xhc3NQYXJ0IHZlbmRvcl9jbGFzczsKfSBYbVZlbmRvclNoZWxsRXh0Q2xhc3NSZWM7
Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgV2lkZ2V0IHc7CiAgICAgICAgU3RyaW5nIHM7Cn0g
X1htQWNjZWxlcmF0b3JTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYbUZvbnRMaXN0IGRl
ZmF1bHRfZm9udF9saXN0OwogICAgdW5zaWduZWQgY2hhciBmb2N1c19wb2xpY3k7CiAgICBYbUZv
Y3VzRGF0YSBmb2N1c19kYXRhOwogICAgdW5zaWduZWQgY2hhciBkZWxldGVfcmVzcG9uc2U7CiAg
ICB1bnNpZ25lZCBjaGFyIHVuaXRfdHlwZTsKICAgIE13bUhpbnRzIG13bV9oaW50czsKICAgIE13
bUluZm8gbXdtX2luZm87CiAgICBTdHJpbmcgbXdtX21lbnU7CiAgICBYdENhbGxiYWNrTGlzdCBm
b2N1c19tb3ZlZF9jYWxsYmFjazsKCiAgICBXaWRnZXQgb2xkX21hbmFnZWQ7CiAgICBQb3NpdGlv
biB4QXRNYXAsIHlBdE1hcCwgeE9mZnNldCwgeU9mZnNldDsKICAgIHVuc2lnbmVkIGxvbmcgbGFz
dE9mZnNldFNlcmlhbDsKICAgIHVuc2lnbmVkIGxvbmcgbGFzdE1hcFJlcXVlc3Q7CgogICAgQm9v
bGVhbiBleHRlcm5hbFJlcG9zaXRpb247CgogICAgdW5zaWduZWQgY2hhciBtYXBTdHlsZTsKICAg
IFh0Q2FsbGJhY2tMaXN0IHJlYWxpemVfY2FsbGJhY2s7CiAgICBYdEdyYWJLaW5kIGdyYWJfa2lu
ZDsKICAgIHVuc2lnbmVkIGNoYXIgYXVkaWJsZV93YXJuaW5nOwogICAgWG1Gb250TGlzdCBidXR0
b25fZm9udF9saXN0OwogICAgWG1Gb250TGlzdCBsYWJlbF9mb250X2xpc3Q7CiAgICBYbUZvbnRM
aXN0IHRleHRfZm9udF9saXN0OwogICAgU3RyaW5nIGlucHV0X21ldGhvZF9zdHJpbmc7CiAgICBT
dHJpbmcgcHJlZWRpdF90eXBlX3N0cmluZzsKICAgIHVuc2lnbmVkIGludCBsaWdodF90aHJlc2hv
bGQ7CiAgICB1bnNpZ25lZCBpbnQgZGFya190aHJlc2hvbGQ7CiAgICB1bnNpZ25lZCBpbnQgZm9y
ZWdyb3VuZF90aHJlc2hvbGQ7CiAgICB1bnNpZ25lZCBpbnQgaW1faGVpZ2h0OwogICAgWHRQb2lu
dGVyIGltX2luZm87CiAgICBCb29sZWFuIGltX3ZzX2hlaWdodF9zZXQ7Cgp9IFhtVmVuZG9yU2hl
bGxFeHRQYXJ0LCAqWG1WZW5kb3JTaGVsbEV4dFBhcnRQdHI7CgpleHRlcm4gWG1WZW5kb3JTaGVs
bEV4dENsYXNzUmVjIHhtVmVuZG9yU2hlbGxFeHRDbGFzc1JlYzsKCnR5cGVkZWYgc3RydWN0IF9Y
bVZlbmRvclNoZWxsRXh0UmVjIHsKICAgIE9iamVjdFBhcnQgb2JqZWN0OwogICAgWG1FeHRQYXJ0
IGV4dDsKICAgIFhtRGVza3RvcFBhcnQgZGVza3RvcDsKICAgIFhtU2hlbGxFeHRQYXJ0IHNoZWxs
OwogICAgWG1WZW5kb3JTaGVsbEV4dFBhcnQgdmVuZG9yOwp9IFhtVmVuZG9yU2hlbGxFeHRSZWM7
CgoKCgp1bnNpZ25lZCBjaGFyIF9YbUdldEF1ZGlibGVXYXJuaW5nKFdpZGdldCB3KTsKY2hhciAq
X1htR2V0SWNvblBpeG1hcE5hbWUodm9pZCk7CnZvaWQgX1htQ2xlYXJJY29uUGl4bWFwTmFtZSh2
b2lkKTsKdHlwZWRlZiB2b2lkICgqWG1DbG9uZVZpc3VhbFByb2MpKFhtRHJhZ0ljb25PYmplY3Qs
IFdpZGdldCwgV2lkZ2V0KTsKdHlwZWRlZiB2b2lkICgqWG1Nb3ZlUGl4bWFwUHJvYykoWG1EcmFn
SWNvbk9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1EcmFnSWNvbk9i
amVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1EcmFnSWNvbk9iamVjdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24sIFBvc2l0aW9uKTsKCnR5
cGVkZWYgc3RydWN0IHsKICAgIFh0UG9pbnRlciBleHRlbnNpb247Cn0gWG1EcmFnSWNvbkNsYXNz
UGFydDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnSWNvbkNsYXNzUmVjIHsKICAgIFJlY3RP
YmpDbGFzc1BhcnQgcmVjdGFuZ2xlX2NsYXNzOwogICAgWG1EcmFnSWNvbkNsYXNzUGFydCBkcmFn
SWNvbl9jbGFzczsKfSBYbURyYWdJY29uQ2xhc3NSZWM7CgpleHRlcm4gWG1EcmFnSWNvbkNsYXNz
UmVjIHhtRHJhZ0ljb25DbGFzc1JlYzsKCnR5cGVkZWYgc3RydWN0IHsKICAgIENhcmRpbmFsIGRl
cHRoOwogICAgUGl4bWFwIHBpeG1hcDsKICAgIERpbWVuc2lvbiB3aWR0aCwgaGVpZ2h0OwogICAg
UGl4bWFwIG1hc2s7CiAgICBQb3NpdGlvbiBob3RfeCwgaG90X3k7CiAgICBQb3NpdGlvbiBvZmZz
ZXRfeCwgb2Zmc2V0X3k7CiAgICB1bnNpZ25lZCBjaGFyIGF0dGFjaG1lbnQ7CiAgICBCb29sZWFu
IGlzRGlydHk7CiAgICBSZWdpb24gcmVnaW9uOwogICAgUmVnaW9uIHJlc3RvcmVfcmVnaW9uOwog
ICAgUG9zaXRpb24geF9vZmZzZXQsIHlfb2Zmc2V0Owp9IFhtRHJhZ0ljb25QYXJ0LCAqWG1EcmFn
SWNvblBhcnRQdHI7Cgp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnSWNvblJlYyB7CiAgICBPYmplY3RQ
YXJ0IG9iamVjdDsKICAgIFJlY3RPYmpQYXJ0IHJlY3RhbmdsZTsKICAgIFhtRHJhZ0ljb25QYXJ0
IGRyYWc7Cn0gWG1EcmFnSWNvblJlYzsKCmV4dGVybiBXaWRnZXQgX1htR2V0VGV4dHVhbERyYWdJ
Y29uKFdpZGdldCB3KTsKCgoKZXh0ZXJuIHZvaWQgX1htRGVzdHJveURlZmF1bHREcmFnSWNvbihY
bURyYWdJY29uT2JqZWN0IGljb24pOwpleHRlcm4gQm9vbGVhbiBfWG1EcmFnSWNvbklzRGlydHko
WG1EcmFnSWNvbk9iamVjdCBpY29uKTsKZXh0ZXJuIHZvaWQgX1htRHJhZ0ljb25DbGVhbihYbURy
YWdJY29uT2JqZWN0IGljb24xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1EcmFnSWNv
bk9iamVjdCBpY29uMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtRHJhZ0ljb25PYmpl
Y3QgaWNvbjMpOwp0eXBlZGVmIHN0cnVjdCB7CiAgICBYdFBvaW50ZXIgZXh0ZW5zaW9uOwp9IFht
RHJhZ092ZXJTaGVsbENsYXNzUGFydDsKCnR5cGVkZWYgc3RydWN0IF9YbURyYWdPdmVyU2hlbGxD
bGFzc1JlYyB7CiAgICBDb3JlQ2xhc3NQYXJ0IGNvcmVfY2xhc3M7CiAgICBDb21wb3NpdGVDbGFz
c1BhcnQgY29tcG9zaXRlX2NsYXNzOwogICAgU2hlbGxDbGFzc1BhcnQgc2hlbGxfY2xhc3M7CiAg
ICBXTVNoZWxsQ2xhc3NQYXJ0IHdtX3NoZWxsX2NsYXNzOwogICAgVmVuZG9yU2hlbGxDbGFzc1Bh
cnQgdmVuZG9yX3NoZWxsX2NsYXNzOwogICAgWG1EcmFnT3ZlclNoZWxsQ2xhc3NQYXJ0IGRyYWdP
dmVyX3NoZWxsX2NsYXNzOwp9IFhtRHJhZ092ZXJTaGVsbENsYXNzUmVjOwoKZXh0ZXJuIFhtRHJh
Z092ZXJTaGVsbENsYXNzUmVjIHhtRHJhZ092ZXJTaGVsbENsYXNzUmVjOwoKdHlwZWRlZiBzdHJ1
Y3QgX1htQmFja2luZ1JlYyB7CiAgICBQb3NpdGlvbiB4LCB5OwogICAgUGl4bWFwIHBpeG1hcDsK
fSBYbUJhY2tpbmdSZWMsICpYbUJhY2tpbmc7Cgp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnT3ZlckJs
ZW5kUmVjIHsKICAgIFhtRHJhZ0ljb25PYmplY3Qgc291cmNlSWNvbjsKICAgIFBvc2l0aW9uIHNv
dXJjZVg7CiAgICBQb3NpdGlvbiBzb3VyY2VZOwogICAgWG1EcmFnSWNvbk9iamVjdCBtaXhlZElj
b247CiAgICBHQyBnYzsKfSBYbURyYWdPdmVyQmxlbmRSZWMsICpYbURyYWdPdmVyQmxlbmQ7Cgp0
eXBlZGVmIHN0cnVjdCBfWG1EcmFnT3ZlclNoZWxsUGFydCB7CiAgICBQb3NpdGlvbiBob3RYOwog
ICAgUG9zaXRpb24gaG90WTsKICAgIHVuc2lnbmVkIGNoYXIgY3Vyc29yU3RhdGU7CiAgICB1bnNp
Z25lZCBjaGFyIG1vZGU7CiAgICB1bnNpZ25lZCBjaGFyIGFjdGl2ZU1vZGU7CgogICAgUG9zaXRp
b24gaW5pdGlhbFg7CiAgICBQb3NpdGlvbiBpbml0aWFsWTsKCiAgICBYbURyYWdJY29uT2JqZWN0
IHN0YXRlSWNvbjsKICAgIFhtRHJhZ0ljb25PYmplY3Qgb3BJY29uOwoKICAgIFhtRHJhZ092ZXJC
bGVuZFJlYyBjdXJzb3JCbGVuZDsKICAgIFhtRHJhZ092ZXJCbGVuZFJlYyByb290QmxlbmQ7CiAg
ICBQaXhlbCBjdXJzb3JGb3JlZ3JvdW5kOwogICAgUGl4ZWwgY3Vyc29yQmFja2dyb3VuZDsKICAg
IEN1cnNvciBuY0N1cnNvcjsKICAgIEN1cnNvciBhY3RpdmVDdXJzb3I7CgogICAgWG1CYWNraW5n
UmVjIGJhY2tpbmc7CiAgICBQaXhtYXAgdG1wUGl4OwogICAgUGl4bWFwIHRtcEJpdDsKICAgIEJv
b2xlYW4gaXNWaXNpYmxlOwp9IFhtRHJhZ092ZXJTaGVsbFBhcnQ7Cgp0eXBlZGVmIHN0cnVjdCBf
WG1EcmFnT3ZlclNoZWxsUmVjIHsKICAgIENvcmVQYXJ0IGNvcmU7CiAgICBDb21wb3NpdGVQYXJ0
IGNvbXBvc2l0ZTsKICAgIFNoZWxsUGFydCBzaGVsbDsKICAgIFdNU2hlbGxQYXJ0IHdtOwogICAg
VmVuZG9yU2hlbGxQYXJ0IHZlbmRvcjsKICAgIFhtRHJhZ092ZXJTaGVsbFBhcnQgZHJhZzsKfSBY
bURyYWdPdmVyU2hlbGxSZWM7CnR5cGVkZWYgc3RydWN0IF9YbURuZFNvdXJjZVByb3AgewogICAg
QllURSBieXRlX29yZGVyOwogICAgQllURSBwcm90b2NvbF92ZXJzaW9uOwogICAgQ0FSRDE2IHRh
cmdldF9pbmRleDsKICAgIENBUkQzMiBzZWxlY3Rpb247Cn0gWG1EbmRTb3VyY2VQcm9wOwoKdHlw
ZWRlZiBzdHJ1Y3QgX1htRG5kUmVjZWl2ZXJQcm9wIHsKICAgIEJZVEUgYnl0ZV9vcmRlcjsKICAg
IEJZVEUgcHJvdG9jb2xfdmVyc2lvbjsKICAgIEJZVEUgcHJvdG9jb2xfc3R5bGU7CiAgICBCWVRF
IHBhZDE7CiAgICBDQVJEMzIgcHJveHlfd2luZG93OwogICAgQ0FSRDE2IG51bV9kcm9wX3NpdGVz
OwogICAgQ0FSRDE2IHBhZDI7CiAgICBDQVJEMzIgdG90YWxfc2l6ZTsKfSBYbURuZFJlY2VpdmVy
UHJvcDsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1EbmRUb3AgewogICAgQ0FSRDMyIHNyY193aW5k
b3c7CiAgICBDQVJEMzIgcHJvcGVydHk7Cn0gWG1EbmRUb3A7Cgp0eXBlZGVmIHN0cnVjdCBfWG1E
bmRQb3QgewogICAgSU5UMTYgeDsKICAgIElOVDE2IHk7CiAgICBDQVJEMzIgcHJvcGVydHk7CiAg
ICBDQVJEMzIgc3JjX3dpbmRvdzsKfSBYbURuZFBvdDsKCnR5cGVkZWYgc3RydWN0IF9YbURuZE1l
c3NhZ2UgewogICAgQllURSByZWFzb247CiAgICBCWVRFIGJ5dGVfb3JkZXI7CiAgICBDQVJEMTYg
ZmxhZ3M7CiAgICBDQVJEMzIgdGltZTsKICAgIHVuaW9uIHsKICAgICAgICBYbURuZFRvcCB0b3A7
CiAgICAgICAgWG1EbmRQb3QgcG90OwogICAgfSBkYXRhOwp9IFhtRG5kTWVzc2FnZTsKCgoKCnR5
cGVkZWYgc3RydWN0IF9YbURuZFRhcmdldHMgewogICAgQllURSBieXRlX29yZGVyOwogICAgQllU
RSBwcm90b2NvbF92ZXJzaW9uOwogICAgQ0FSRDE2IG51bV90YXJnZXRfbGlzdHM7CiAgICBDQVJE
MzIgZGF0YV9zaXplOwoKfSBYbURuZFRhcmdldHM7Cgp0eXBlZGVmIHN0cnVjdCBfWG1EbmRBdG9t
UGFpcnMgewogICAgQllURSBieXRlX29yZGVyOwogICAgQllURSBwcm90b2NvbF92ZXJzaW9uOwog
ICAgQ0FSRDE2IG51bV9wYWlyczsKICAgIENBUkQzMiBkYXRhX3NpemU7Cn0gWG1EbmRBdG9tUGFp
cnM7Cgp0eXBlZGVmIHN0cnVjdCBfWG1EbmRBdG9tcyB7CiAgICBCWVRFIGJ5dGVfb3JkZXI7CiAg
ICBCWVRFIHByb3RvY29sX3ZlcnNpb247CiAgICBDQVJEMTYgbnVtX2F0b21zOwogICAgQ0FSRDMy
IGRhdGFfc2l6ZTsKfSBYbURuZEF0b21zOwp0eXBlZGVmIHN0cnVjdCB7CiAgICBDQVJEMzIgYXRv
bTsKICAgIENBUkQxNiBuYW1lbGVuOwogICAgQ0FSRDE2IHBhZDsKfSBYbURuZEF0b21QYWlyOwoK
dHlwZWRlZiBzdHJ1Y3QgewogICAgQXRvbSBhdG9tOwogICAgVGltZSB0aW1lOwp9IFhtRG5kQXRv
bXNUYWJsZUVudHJ5UmVjLCAqWG1EbmRBdG9tc1RhYmxlRW50cnk7Cgp0eXBlZGVmIHN0cnVjdCB7
CiAgICBpbnQgbnVtX2VudHJpZXM7CiAgICBYbURuZEF0b21zVGFibGVFbnRyeSBlbnRyaWVzOwp9
IFhtRG5kQXRvbXNUYWJsZVJlYywgKlhtRG5kQXRvbXNUYWJsZTsKCnR5cGVkZWYgc3RydWN0IHsK
ICAgIGludCBudW1fdGFyZ2V0czsKICAgIEF0b20gKnRhcmdldHM7Cn0gWG1EbmRUYXJnZXRzVGFi
bGVFbnRyeVJlYywgKlhtRG5kVGFyZ2V0c1RhYmxlRW50cnk7Cgp0eXBlZGVmIHN0cnVjdCB7CiAg
ICBpbnQgbnVtX2VudHJpZXM7CiAgICBYbURuZFRhcmdldHNUYWJsZUVudHJ5IGVudHJpZXM7Cn0g
WG1EbmRUYXJnZXRzVGFibGVSZWMsICpYbURuZFRhcmdldHNUYWJsZTsKCgoKCnR5cGVkZWYgc3Ry
dWN0IHsKICAgIGNoYXIgKmF0b21zOwogICAgY2hhciAqYXRvbV9wdHI7CiAgICBjaGFyICphdG9t
X3N0YXJ0OwogICAgaW50IGF0b21fc2l6ZTsKICAgIGludCBhdG9tX2F2YWlsOwogICAgY2hhciAq
bmFtZXM7CiAgICBjaGFyICpuYW1lX3B0cjsKICAgIGNoYXIgKm5hbWVfc3RhcnQ7CiAgICBpbnQg
bmFtZV9zaXplOwogICAgaW50IG5hbWVfYXZhaWw7Cn0gWG1EbmRCdWZNZ3JSZWMsICpYbURuZEJ1
Zk1ncjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1TaGVsbERyb3BTaXRlSW5mbyB7CiAgICBYbURu
ZEJ1Zk1nclJlYyBpbmZvOwogICAgdW5zaWduZWQgY2hhciBieXRlX29yZGVyOwogICAgaW50IG51
bV9kcm9wX3NpdGVzOwp9IFhtU2hlbGxEcm9wU2l0ZUluZm9SZWMsICpYbVNoZWxsRHJvcFNpdGVJ
bmZvOwp0eXBlZGVmIHN0cnVjdCBfWG1Ecm9wU2l0ZUluZm8gewoKICAgIHN0cnVjdCBfWG1Ecm9w
U2l0ZUluZm8gKm5leHQ7CgogICAgQm9vbGVhbiBleHRlcm5hbDsKICAgIEJvb2xlYW4gbGVhZjsK
ICAgIEJvb2xlYW4gaW1wbGljaXQ7CiAgICBCb29sZWFuIGlzU2hlbGw7CiAgICBCb29sZWFuIHVz
ZXJSZWdpb247CiAgICBCb29sZWFuIHJlZ2lzdGVyZWQ7CgogICAgc3RydWN0IF9YbURyb3BTaXRl
SW5mbyAqcGFyZW50OwogICAgc3RydWN0IF9YbURyb3BTaXRlSW5mbyAqKmNoaWxkcmVuOwoKICAg
IGludCBpblVwZGF0ZTsKICAgIHNob3J0IHRhcmdldF9pbmRleDsKICAgIHNob3J0IG51bUNoaWxk
cmVuOwogICAgc2hvcnQgbWF4Q2hpbGRyZW47CiAgICBYbVJlZ2lvbiByZWdpb247CgogICAgdW5z
aWduZWQgY2hhciBkcm9wU2l0ZU9wZXJhdGlvbnM7CiAgICBYdENhbGxiYWNrUHJvYyBkcmFnUHJv
YzsKICAgIFh0Q2FsbGJhY2tQcm9jIGRyb3BQcm9jOwogICAgV2lkZ2V0IGRyb3BTaXRlOwogICAg
dW5zaWduZWQgY2hhciBkcm9wU2l0ZVR5cGU7CiAgICB1bnNpZ25lZCBjaGFyIGFuaW1hdGlvblN0
eWxlOwogICAgdW5zaWduZWQgY2hhciBkcm9wU2l0ZUFjdGl2aXR5OwogICAgQXRvbSAqaW1wb3J0
VGFyZ2V0czsKICAgIENhcmRpbmFsIG51bUltcG9ydFRhcmdldHM7CiAgICBYUmVjdGFuZ2xlICpk
cm9wUmVjdGFuZ2xlczsKICAgIENhcmRpbmFsIG51bURyb3BSZWN0YW5nbGVzOwogICAgUGl4bWFw
IGFuaW1hdGlvblBpeG1hcDsKICAgIENhcmRpbmFsIGFuaW1hdGlvblBpeG1hcERlcHRoOwogICAg
UGl4bWFwIGFuaW1hdGlvbk1hc2s7Cgp9IFhtRHJvcFNpdGVJbmZvUmVjLCAqWG1Ecm9wU2l0ZUlu
Zm87CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgbG9uZyBudW1fYnVja2V0czsKICAgIFhtRHJv
cFNpdGVJbmZvICpidWNrZXRzOwp9IERTSW5mb1RhYmxlOwp0eXBlZGVmIHN0cnVjdCB7CiAgICBp
bnQgcmVhc29uOwogICAgWEV2ZW50ICpldmVudDsKICAgIFdpZGdldCB3aWRnZXQ7Cn0gWG1UcmVl
VXBkYXRlQ2FsbGJhY2tTdHJ1Y3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBUaW1lIHRpbWU7
CiAgICBXaW5kb3cgd2luZG93OwogICAgV2luZG93IHN1YndpbmRvdzsKICAgIFBvc2l0aW9uIHhy
b290LCB5cm9vdDsKICAgIHVuc2lnbmVkIGludCBzdGF0ZTsKfSBYbU1vdGlvblJlYzsKCnR5cGVk
ZWYgc3RydWN0IHsKICAgIFhtRHJhZ1JlY2VpdmVySW5mbyBjdXJSZWNlaXZlcjsKICAgIGludCBu
dW1fbW90aW9uczsKICAgIGludCBtYXhfbW90aW9uczsKICAgIFhtTW90aW9uUmVjICptb3Rpb25z
Owp9IFhtTW90aW9uQnVmZmVyOwoKCgoKdHlwZWRlZiB1bmlvbiB7CiAgICBYbUFueUlDQ0NhbGxi
YWNrU3RydWN0IGFueTsKICAgIFhtVG9wTGV2ZWxFbnRlckNhbGxiYWNrU3RydWN0IHRsZTsKICAg
IFhtVG9wTGV2ZWxMZWF2ZUNhbGxiYWNrU3RydWN0IHRsbDsKICAgIFhtRHJvcFNpdGVFbnRlckNh
bGxiYWNrU3RydWN0IGRzZTsKICAgIFhtRHJvcFNpdGVMZWF2ZUNhbGxiYWNrU3RydWN0IGRzbDsK
ICAgIFhtRHJhZ01vdGlvbkNhbGxiYWNrU3RydWN0IGRtOwogICAgWG1PcGVyYXRpb25DaGFuZ2Vk
Q2FsbGJhY2tTdHJ1Y3Qgb2M7CiAgICBYbURyb3BTdGFydENhbGxiYWNrU3RydWN0IGRzOwogICAg
WG1Ecm9wRmluaXNoQ2FsbGJhY2tTdHJ1Y3QgZGY7CiAgICBYbURyYWdEcm9wRmluaXNoQ2FsbGJh
Y2tTdHJ1Y3QgZGRmOwp9IFhtRHJhZ0Ryb3BDYWxsYmFja1N0cnVjdDsKCgoKCnR5cGVkZWYgc3Ry
dWN0IHsKICAgIFhtRHJhZ092ZXJTaGVsbFdpZGdldCBkb3M7CiAgICBCb29sZWFuIHNvdXJjZUlz
RXh0ZXJuYWw7CiAgICBXaW5kb3cgd2luZG93OwogICAgV2lkZ2V0IHNoZWxsOwogICAgUG9zaXRp
b24geE9yaWdpbiwgeU9yaWdpbjsKICAgIERpbWVuc2lvbiB3aWR0aCwgaGVpZ2h0OwogICAgWHRQ
b2ludGVyIGljY0luZm87Cn0gWG1EcmFnVG9wTGV2ZWxDbGllbnREYXRhU3RydWN0OwoKdHlwZWRl
ZiBzdHJ1Y3QgewogICAgWG1EcmFnT3ZlclNoZWxsV2lkZ2V0IGRvczsKICAgIFdpbmRvdyB3aW5k
b3c7Cn0gWG1EcmFnTW90aW9uQ2xpZW50RGF0YVN0cnVjdDsKQm9vbGVhbiBfWG1HZXREcmFnUmVj
ZWl2ZXJJbmZvKERpc3BsYXkgKmRpc3BsYXksIFdpbmRvdyB3aW4sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBYbURyYWdSZWNlaXZlckluZm8gcmkpOwp2b2lkIF9YbVNldERyYWdSZWNl
aXZlckluZm8oV2lkZ2V0IHcsIFdpZGdldCB3aWRnZXQpOwp2b2lkIF9YbUNsZWFyRHJhZ1JlY2Vp
dmVySW5mbyhXaWRnZXQgc2hlbGwpOwp2b2lkIF9YbUZyZWVEcmFnUmVjZWl2ZXJJbmZvKFhtU2hl
bGxEcm9wU2l0ZUluZm8gZGkpOwp1bnNpZ25lZCBjaGFyIF9YbUJ5dGVPcmRlcih2b2lkKTsKaW50
IF9YbU1lc3NhZ2VUeXBlVG9SZWFzb24oQllURSByZWFzb24pOwp2b2lkIF9YbUlDQ0V2ZW50VG9J
Q0NDYWxsYmFjayhYbURuZE1lc3NhZ2UgKm1zZywgWG1EcmFnRHJvcENhbGxiYWNrU3RydWN0ICpj
YnMpOwoKCmludCBfWG1SZWFkRHJhZ0J1ZmZlcihYbURuZEJ1Zk1nciBibWdyLCBCb29sZWFuIHJl
YWRfc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqcmV0YnVmLCBpbnQgYnVmc2l6
ZSk7CmludCBfWG1Xcml0ZURyYWdCdWZmZXIoWG1EbmRCdWZNZ3IgYm1nciwgQm9vbGVhbiB3cml0
ZV9zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGF0YSwgaW50IHNpemUpOwoK
CgoKCmV4dGVybiBYdFJlc291cmNlIF9YbURTUmVzb3VyY2VzW107CmV4dGVybiBpbnQgX1htTnVt
RFNSZXNvdXJjZXM7Cgp2b2lkIF9YbURTSUFkZENoaWxkKHZvaWQqIGEsIHZvaWQqIGIsIGludCBj
KTsKdm9pZCBfWG1EU0lSZW1vdmVDaGlsZCh2b2lkKiBhLCB2b2lkKiBiKTsKdm9pZCBfWG1EU0lE
ZXN0cm95KHZvaWQqIGEsIGludCBiKTsKaW50IF9YbURTSUdldEJvcmRlcldpZHRoKHZvaWQqIGEp
OwppbnQgX1htRFNJUmVwbGFjZUNoaWxkKHZvaWQqIGEpOwppbnQgX1htRFNJR2V0Q2hpbGRQb3Np
dGlvbih2b2lkKiBhLCB2b2lkKiBiKTsKdm9pZCBfWG1EU0lTd2FwQ2hpbGRyZW4odm9pZCogYSwg
dm9pZCogYiwgdm9pZCogYyk7CgoKdm9pZCBfTHR0ZXh0X3Byb2Nlc3NfZHJvcChXaWRnZXQgdywg
WHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgY2FsbF9kYXRhKTsKQm9vbGVhbiBfTHRE
ZWJ1Z0luaXQodm9pZCk7Cgp2b2lkIF9MdERlYnVnU2V0KEJvb2xlYW4gZmxhZyk7Cgp2b2lkIF9M
dERlYnVnVG9nZ2xlKHZvaWQpOwoKQm9vbGVhbiBfTHREZWJ1Z1F1ZXJ5U3RhdGUodm9pZCk7CgoK
CnZvaWQgX0x0RGVidWdQcmludFRyZWUoV2lkZ2V0IHcpOwp2b2lkIF9MdERlYnVnUHJpbnRDb21w
bGV0ZVRyZWUoV2lkZ2V0IHcpOwoKCgoKY29uc3QgY2hhciAqX0x0RGVidWdTdGF0ZShXaWRnZXQg
dyk7CgoKCgp2b2lkIF9MdERlYnVnUHJpbnRBcmdMaXN0KGNvbnN0IGNoYXIgKmZuLCBXaWRnZXQg
dywgQXJnTGlzdCBhbCwgaW50IG4sIEJvb2xlYW4gR2V0KTsKCgoKCmNvbnN0IGNoYXIgKl9MdERl
YnVnRm9jdXNEZXRhaWwyU3RyaW5nKGludCB0eXBlKTsKY29uc3QgY2hhciAqX0x0RGVidWdGb2N1
c01vZGUyU3RyaW5nKGludCB0eXBlKTsKY29uc3QgY2hhciAqX0x0RGVidWdFdmVudFR5cGUyU3Ry
aW5nKGludCB0eXBlKTsKCgoKY29uc3QgY2hhciAqX0x0RGVidWdHZW9BY3Rpb24yU3RyaW5nKGlu
dCBhY3Rpb24pOwpjb25zdCBjaGFyICpfTHREZWJ1Z0RlbGV0ZVJlc3BvbnNlMlN0cmluZyhpbnQg
ZCk7CmNvbnN0IGNoYXIgKl9MdERlYnVnR2VvbWV0cnlSZXN1bHQyU3RyaW5nKFh0R2VvbWV0cnlS
ZXN1bHQgcik7CmNvbnN0IGNoYXIgKl9MdERlYnVnRHJhZ0FuZERyb3BNZXNzYWdlVHlwZTJTdHJp
bmcodW5zaWduZWQgY2hhciByKTsKY29uc3QgY2hhciAqX0x0RGVidWdEcmFnVHlwZTJTdHJpbmco
dW5zaWduZWQgY2hhciByKTsKY29uc3QgY2hhciAqX0x0RGVidWdXaWRnZXRHZW9tZXRyeTJTdHJp
bmcoWHRXaWRnZXRHZW9tZXRyeSAqZyk7Cgpjb25zdCBjaGFyICpfTHREZWJ1Z0F0dGFjaG1lbnQy
U3RyaW5nKGludCBpKTsKY29uc3QgY2hhciAqX0x0RGVidWdNZW51Rm9jdXNPcDJTdHJpbmcoaW50
IGYpOwpjb25zdCBjaGFyICpfTHREZWJ1Z01lbnVFbnVtMlN0cmluZyhpbnQgZik7CmNvbnN0IGNo
YXIgKl9MdERlYnVnTXdtSW5wdXQyU3RyaW5nKGludCBhKTsKY29uc3QgY2hhciAqX0x0RGVidWdC
b29sZWFuMlN0cmluZyhCb29sZWFuIGIpOwpjb25zdCBjaGFyICpfTHREZWJ1Z1htU3RyaW5nMlN0
cmluZyhYbVN0cmluZyB4bXMpOwpjb25zdCBjaGFyICpfTHREZWJ1Z1BhY2tpbmcyU3RyaW5nKHVu
c2lnbmVkIGNoYXIgcCk7CmNvbnN0IGNoYXIgKl9MdERlYnVnUmNUeXBlMlN0cmluZyh1bnNpZ25l
ZCBjaGFyIHQpOwpjb25zdCBjaGFyICpfTHREZWJ1Z0FsaWdubWVudDJTdHJpbmcoaW50IG4pOwpj
b25zdCBjaGFyICpfTHREZWJ1Z01lbnVUeXBlMlN0cmluZyhpbnQgbik7CmNvbnN0IGNoYXIgKl9M
dERlYnVnTmF2aWdhYmlsaXR5MlN0cmluZyh1bnNpZ25lZCBjaGFyIG4pOwpjb25zdCBjaGFyICpf
THREZWJ1Z0hpZ2hsaWdodE1vZGUyU3RyaW5nKGludCBtb2RlKTsKY29uc3QgY2hhciAqX0x0RGVi
dWdTZWxlY3Rpb25Qb2xpY3kyU3RyaW5nKGludCBuKTsKY29uc3QgY2hhciAqX0x0RGVidWdSZWFz
b24yU3RyaW5nKGludCByZWFzb24pOwoKY29uc3QgY2hhciAqX0x0RGVidWdGb2N1c0NoYW5nZTJT
dHJpbmcoWG1Gb2N1c0NoYW5nZSBjKTsKCmNvbnN0IGNoYXIgKl9MdERlYnVnTmF2aWdhdGlvblR5
cGUyU3RyaW5nKFhtTmF2aWdhdGlvblR5cGUgbnQpOwpjb25zdCBjaGFyICpfTHREZWJ1Z0VkaXRN
b2RlMlN0cmluZyhpbnQgbik7CmNvbnN0IGNoYXIgKl9MdERlYnVnU0JEaXNwbGF5UG9saWN5MlN0
cmluZyhpbnQgbik7CmNvbnN0IGNoYXIgKl9MdERlYnVnU0JQbGFjZW1lbnQyU3RyaW5nKGludCBu
KTsKY29uc3QgY2hhciAqX0x0RGVidWdMaXN0U2l6ZVBvbGljeTJTdHJpbmcoaW50IG4pOwpjb25z
dCBjaGFyICpfTHREZWJ1Z1Jlc2l6ZVBvbGljeTJTdHJpbmcoaW50IG4pOwoKY29uc3QgY2hhciAq
X0x0RGVidWdTY3JvbGxpbmdQb2xpY3kyU3RyaW5nKHVuc2lnbmVkIGNoYXIgcik7CmNvbnN0IGNo
YXIgKl9MdERlYnVnRGlhbG9nU3R5bGUyU3RyaW5nKGludCBhKTsKCgoKCnZvaWQgX0x0RGVidWco
Y29uc3QgY2hhciAqZm4sIFdpZGdldCB3LCBjb25zdCBjaGFyICpmbXQsIC4uLik7CnZvaWQgX0x0
RGVidWcyKGNvbnN0IGNoYXIgKmZuLCBXaWRnZXQgdywgV2lkZ2V0IGMsIGNvbnN0IGNoYXIgKmZt
dCwgLi4uKTsKdm9pZCBfTHREZWJ1ZzAoY29uc3QgY2hhciAqZm4sIFdpZGdldCB3LCBjb25zdCBj
aGFyICpmbXQsIC4uLik7CnZvaWQgX0x0RGVidWdQcmludFN0cmluZyhjb25zdCBjaGFyICpzKTsK
dm9pZCBfTHREZWJ1Z0FjdGlvbihjb25zdCBjaGFyICpmbiwgV2lkZ2V0IHcsIGNvbnN0IFN0cmlu
ZyBhY3Rpb24sCiAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgKnBhcmFtcywgY29uc3QgQ2Fy
ZGluYWwgKm51bV9wYXJhbXMpOwpCb29sZWFuIF9MdERlYnVnSW5EZWJ1Zyhjb25zdCBjaGFyICpm
biwgV2lkZ2V0IHcpOwpzdGF0aWMgaW50IF9YbVRleHRGX0ZvbnRNYXhXaWR0aChXaWRnZXQgdyk7
CgoKCnN0YXRpYyBYdFRyYW5zbGF0aW9ucyB0Zl9ldm50Ml90cmFucyx0Zl9ldm50M190cmFuczsK
dHlwZWRlZiB2b2lkICgqUmVkcmF3UHJvYykoWG1UZXh0RmllbGRXaWRnZXQpOwoKc3RhdGljIHZv
aWQgX1htVGV4dEZpZWxkU2V0RWRpdGFibGUoV2lkZ2V0IHcsIEJvb2xlYW4gZSk7CnN0YXRpYyB2
b2lkIGNsYXNzX2luaXRpYWxpemUodm9pZCk7CnN0YXRpYyB2b2lkIGNsYXNzX3BhcnRfaW5pdGlh
bGl6ZShXaWRnZXRDbGFzcyB3X2NsYXNzKTsKc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShXaWRnZXQs
IFdpZGdldCwgQXJnTGlzdCwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGRlc3Ryb3koV2lkZ2V0
IHcpOwpzdGF0aWMgdm9pZCBleHBvc2UoV2lkZ2V0IHcsIFhFdmVudCAqZXZlbnQsIFJlZ2lvbiBy
ZWdpb24pOwpzdGF0aWMgdm9pZCByZXNpemUoV2lkZ2V0IHcpOwpzdGF0aWMgQm9vbGVhbiBzZXRf
dmFsdWVzKFdpZGdldCwgV2lkZ2V0LCBXaWRnZXQsIEFyZ0xpc3QsIENhcmRpbmFsICopOwpzdGF0
aWMgWHRHZW9tZXRyeVJlc3VsdCBxdWVyeV9nZW9tZXRyeShXaWRnZXQgdywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRXaWRnZXRHZW9tZXRyeSAqcHJvcG9zZWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0V2lkZ2V0R2VvbWV0cnkgKmFu
c3dlcik7CnN0YXRpYyB2b2lkIHJlYWxpemUoV2lkZ2V0IHcsIFh0VmFsdWVNYXNrICp2YWx1ZV9t
YXNrLAogICAgICAgICAgICAgICAgICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzICphdHRyaWJ1dGVz
KTsKc3RhdGljIHZvaWQgX1htVGV4dEZpZWxkRXhwb3J0VmFsdWUoV2lkZ2V0IHcsIGludCBvZmZz
ZXQsIFh0QXJnVmFsICp2YWx1ZSk7CnN0YXRpYyBCb29sZWFuIGRyYWdfY29udmVydF9wcm9jKFdp
ZGdldCB3LCBBdG9tICpzZWxlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEF0b20gKnRhcmdldCwgQXRvbSAqdHlwZV9yZXR1cm4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFh0UG9pbnRlciAqdmFsdWVfcmV0dXJuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsb25nICpsZW5ndGhfcmV0dXJuLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgKmZvcm1hdF9yZXR1cm4pOwpzdGF0aWMgdm9pZCBkcmFnX3Ry
YW5zZmVyX3Byb2MoV2lkZ2V0IGR3LCBYdFBvaW50ZXIgY2xpZW50LCBBdG9tICpzZWxlY3Rpb24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b20gKnR5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciB2YWx1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqbGVuZ3RoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgKmZvcm1hdCk7CnN0YXRpYyB2b2lkIGRyYWdfZHJvcF9maW5pc2go
V2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWHRQb2ludGVyIGNsaWVudF9k
YXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciBjYWxsX2RhdGEpOwpz
dGF0aWMgdm9pZCBwcm9jZXNzX2Ryb3AoV2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWHRQb2ludGVyIGNsaWVudF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFh0UG9pbnRlciBjYWxsX2RhdGEpOwoKCmludCBfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKFdpZGdl
dCB3LCBjaGFyICpzLCBpbnQgbCk7CgplbnVtIE1vZGlmeVRleHRDdXJzb3JQb3NpdGlvbiB7CiAg
Q1BfUmVzZXQsCiAgQ1BfU3RhcnRPZkluc2VydCwKICBDUF9FbmRPZkluc2VydCwKICBDUF9VbmNo
YW5nZWQKfSA7CgpzdGF0aWMgWG1UZXh0U2NhblR5cGUgZGVmYXVsdF9zZWxlY3Rpb25fYXJyYXlb
XSA9IHsKICAgICAgICBYbVNFTEVDVF9QT1NJVElPTiwKICAgICAgICBYbVNFTEVDVF9XT1JELAog
ICAgICAgIFhtU0VMRUNUX0xJTkUsCn07CnN0YXRpYyBpbnQgZGVmYXVsdF9zZWxlY3Rpb25fYXJy
YXlfY291bnQgPSAoKENhcmRpbmFsKSAoc2l6ZW9mKGRlZmF1bHRfc2VsZWN0aW9uX2FycmF5KSAv
IHNpemVvZihkZWZhdWx0X3NlbGVjdGlvbl9hcnJheVswXSkpKTsKCgoKCgpzdGF0aWMgWHRSZXNv
dXJjZSByZXNvdXJjZXNbXSA9CnsKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1s0
NjgzXSksICgoY2hhciopJlh0U3RyaW5nc1s5NTJdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE1Njld
KSwKICAgICAgICBzaXplb2YoWHRDYWxsYmFja0xpc3QpLCAoKHNpemVfdCkgJigoWG1UZXh0Rmll
bGRSZWMgKikwKS0+dGV4dC5hY3RpdmF0ZV9jYWxsYmFjayksCiAgICAgICAgKChjaGFyKikmWHRT
dHJpbmdzWzE1NjldKSwgKFh0UG9pbnRlcikoKHZvaWQgKikwKQogICAgfSwKICAgIHsKICAgICAg
ICAoKGNoYXIgKikmX1htU3RyaW5nc1s3NzY1XSksICgoY2hhciopJlh0U3RyaW5nc1s5NTJdKSwg
KChjaGFyKikmWHRTdHJpbmdzWzE1NjldKSwKICAgICAgICBzaXplb2YoWHRDYWxsYmFja0xpc3Qp
LCAoKHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC5sb3NpbmdfZm9jdXNfY2Fs
bGJhY2spLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sxNTY5XSksIChYdFBvaW50ZXIpKCh2
b2lkICopMCkKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbNjg1M10p
LCAoKGNoYXIqKSZYdFN0cmluZ3NbOTUyXSksICgoY2hhciopJlh0U3RyaW5nc1sxNTY5XSksCiAg
ICAgICAgc2l6ZW9mKFh0Q2FsbGJhY2tMaXN0KSwgKChzaXplX3QpICYoKFhtVGV4dEZpZWxkUmVj
ICopMCktPnRleHQuZm9jdXNfY2FsbGJhY2spLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sx
NTY5XSksIChYdFBvaW50ZXIpKCh2b2lkICopMCkKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFy
ICopJl9YbVN0cmluZ3NbODEzM10pLCAoKGNoYXIqKSZYdFN0cmluZ3NbOTUyXSksICgoY2hhciop
Jlh0U3RyaW5nc1sxNTY5XSksCiAgICAgICAgc2l6ZW9mKFh0Q2FsbGJhY2tMaXN0KSwgKChzaXpl
X3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCktPnRleHQubW9kaWZ5X3ZlcmlmeV9jYWxsYmFjayks
CiAgICAgICAgKChjaGFyKikmWHRTdHJpbmdzWzE1NjldKSwgKFh0UG9pbnRlcikoKHZvaWQgKikw
KQogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1s4MTU0XSksICgoY2hh
ciopJlh0U3RyaW5nc1s5NTJdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE1NjldKSwKICAgICAgICBz
aXplb2YoWHRDYWxsYmFja0xpc3QpLCAoKHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+
dGV4dC53Y3NfbW9kaWZ5X3ZlcmlmeV9jYWxsYmFjayksCiAgICAgICAgKChjaGFyKikmWHRTdHJp
bmdzWzE1NjldKSwgKFh0UG9pbnRlcikoKHZvaWQgKikwKQogICAgfSwKICAgIHsKICAgICAgICAo
KGNoYXIgKikmX1htU3RyaW5nc1s4MTc4XSksICgoY2hhciopJlh0U3RyaW5nc1s5NTJdKSwgKChj
aGFyKikmWHRTdHJpbmdzWzE1NjldKSwKICAgICAgICBzaXplb2YoWHRDYWxsYmFja0xpc3QpLCAo
KHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC5tb3Rpb25fdmVyaWZ5X2NhbGxi
YWNrKSwKICAgICAgICAoKGNoYXIqKSZYdFN0cmluZ3NbMTU2OV0pLCAoWHRQb2ludGVyKSgodm9p
ZCAqKTApCiAgICB9LAogICAgewogICAgICAgICgoY2hhciAqKSZfWG1TdHJpbmdzWzY5NDddKSwg
KChjaGFyKikmWHRTdHJpbmdzWzk1Ml0pLCAoKGNoYXIqKSZYdFN0cmluZ3NbMTU2OV0pLAogICAg
ICAgIHNpemVvZihYdENhbGxiYWNrTGlzdCksICgoc2l6ZV90KSAmKChYbVRleHRGaWVsZFJlYyAq
KTApLT50ZXh0LmdhaW5fcHJpbWFyeV9jYWxsYmFjayksCiAgICAgICAgKChjaGFyKikmWHRTdHJp
bmdzWzE1NjldKSwgKFh0UG9pbnRlcikoKHZvaWQgKikwKQogICAgfSwKICAgIHsKICAgICAgICAo
KGNoYXIgKikmX1htU3RyaW5nc1s3NzQ1XSksICgoY2hhciopJlh0U3RyaW5nc1s5NTJdKSwgKChj
aGFyKikmWHRTdHJpbmdzWzE1NjldKSwKICAgICAgICBzaXplb2YoWHRDYWxsYmFja0xpc3QpLCAo
KHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC5sb3NlX3ByaW1hcnlfY2FsbGJh
Y2spLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sxNTY5XSksIChYdFBvaW50ZXIpKCh2b2lk
ICopMCkKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbMTA1NTddKSwg
KChjaGFyKikmWHRTdHJpbmdzWzk1Ml0pLCAoKGNoYXIqKSZYdFN0cmluZ3NbMTU2OV0pLAogICAg
ICAgIHNpemVvZihYdENhbGxiYWNrTGlzdCksICgoc2l6ZV90KSAmKChYbVRleHRGaWVsZFJlYyAq
KTApLT50ZXh0LnZhbHVlX2NoYW5nZWRfY2FsbGJhY2spLAogICAgICAgICgoY2hhciopJlh0U3Ry
aW5nc1sxNTY5XSksIChYdFBvaW50ZXIpKCh2b2lkICopMCkKICAgIH0sCiAgICB7CiAgICAgICAg
KChjaGFyKikmWHRTdHJpbmdzWzg1OV0pLCAoKGNoYXIqKSZYdFN0cmluZ3NbMTQ5N10pLCAoKGNo
YXIqKSZYdFN0cmluZ3NbMTc5N10pLAogICAgICAgIHNpemVvZihTdHJpbmcpLCAoKHNpemVfdCkg
JigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC52YWx1ZSksCiAgICAgICAgKChjaGFyKikmWHRT
dHJpbmdzWzE3OTddKSwgKFh0UG9pbnRlcikiIgoKCiAgICB9LAogICAgewogICAgICAgICgoY2hh
ciAqKSZfWG1TdHJpbmdzWzEwNTc4XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzQ0OTZdKSwgKChj
aGFyICopJl9YbVN0cmluZ3NbMTIwNzldKSwKICAgICAgICBzaXplb2Yod2NoYXJfdCAqKSwgKChz
aXplX3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCktPnRleHQud2NfdmFsdWUpLAogICAgICAgICgo
Y2hhciopJlh0U3RyaW5nc1sxNzk3XSksIChYdFBvaW50ZXIpKCh2b2lkICopMCkKICAgIH0sCiAg
ICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbNzg3NV0pLCAoKGNoYXIgKikmX1htU3Ry
aW5nc1syNDMzXSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzEyMTA2XSksCiAgICAgICAgc2l6ZW9m
KERpbWVuc2lvbiksICgoc2l6ZV90KSAmKChYbVRleHRGaWVsZFJlYyAqKTApLT50ZXh0Lm1hcmdp
bl9oZWlnaHQpLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sxNjk1XSksIChYdFBvaW50ZXIp
NQogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1s3OTIxXSksICgoY2hh
ciAqKSZfWG1TdHJpbmdzWzI0NzldKSwgKChjaGFyICopJl9YbVN0cmluZ3NbMTEzMTVdKSwKICAg
ICAgICBzaXplb2YoRGltZW5zaW9uKSwgKChzaXplX3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCkt
PnRleHQubWFyZ2luX3dpZHRoKSwKICAgICAgICAoKGNoYXIqKSZYdFN0cmluZ3NbMTY5NV0pLCAo
WHRQb2ludGVyKTUKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbNTYy
Nl0pLCAoKGNoYXIgKikmX1htU3RyaW5nc1s3NDVdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE0MzVd
KSwKICAgICAgICBzaXplb2YoWG1UZXh0UG9zaXRpb24pLCAoKHNpemVfdCkgJigoWG1UZXh0Rmll
bGRSZWMgKikwKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLAogICAgICAgICgoY2hhciopJlh0U3Ry
aW5nc1sxNjk1XSksIChYdFBvaW50ZXIpMAogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikm
X1htU3RyaW5nc1s1NDgyXSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzY1NV0pLCAoKGNoYXIqKSZY
dFN0cmluZ3NbMTc5MV0pLAogICAgICAgIHNpemVvZihzaG9ydCksICgoc2l6ZV90KSAmKChYbVRl
eHRGaWVsZFJlYyAqKTApLT50ZXh0LmNvbHVtbnMpLAogICAgICAgICgoY2hhciopJlh0U3RyaW5n
c1sxNjk1XSksIChYdFBvaW50ZXIpMjAKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9Y
bVN0cmluZ3NbNzkzOF0pLCAoKGNoYXIgKikmX1htU3RyaW5nc1syNTA1XSksICgoY2hhciopJlh0
U3RyaW5nc1sxNzE4XSksCiAgICAgICAgc2l6ZW9mKGludCksICgoc2l6ZV90KSAmKChYbVRleHRG
aWVsZFJlYyAqKTApLT50ZXh0Lm1heF9sZW5ndGgpLAogICAgICAgICgoY2hhciopJlh0U3RyaW5n
c1sxNjk1XSksIChYdFBvaW50ZXIpMjE0NzQ4MzY0NwogICAgfSwKICAgIHsKICAgICAgICAoKGNo
YXIgKikmX1htU3RyaW5nc1s1MDA3XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzMyN10pLCAoKGNo
YXIqKSZYdFN0cmluZ3NbMTcxOF0pLAogICAgICAgIHNpemVvZihpbnQpLCAoKHNpemVfdCkgJigo
WG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC5ibGlua19yYXRlKSwKICAgICAgICAoKGNoYXIqKSZY
dFN0cmluZ3NbMTY5NV0pLCAoWHRQb2ludGVyKTUwMAogICAgfSwKICAgIHsKICAgICAgICAoKGNo
YXIgKikmX1htU3RyaW5nc1s2OTA1XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzE3OTldKSwgKChj
aGFyICopJl9YbVN0cmluZ3NbMTEyNzddKSwKICAgICAgICBzaXplb2YoWG1Gb250TGlzdCksICgo
c2l6ZV90KSAmKChYbVRleHRGaWVsZFJlYyAqKTApLT50ZXh0LmZvbnRfbGlzdCksCiAgICAgICAg
KChjaGFyKikmWHRTdHJpbmdzWzE3OTddKSwgKFh0UG9pbnRlcikoKHZvaWQgKikwKQoKICAgIH0s
CgogICAgewogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1s2OTZdKSwgKChjaGFyKikmWHRTdHJp
bmdzWzEzOTVdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE3NjddKSwKICAgICAgICBzaXplb2YoWHRQ
b2ludGVyKSwgKChzaXplX3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCktPnRleHQuc2VsZWN0aW9u
X2FycmF5KSwKICAgICAgICAoKGNoYXIqKSZYdFN0cmluZ3NbMTY5NV0pLCAoWHRQb2ludGVyKWRl
ZmF1bHRfc2VsZWN0aW9uX2FycmF5CgogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1ht
U3RyaW5nc1s5NTI2XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzM2OThdKSwgKChjaGFyKikmWHRT
dHJpbmdzWzE3MThdKSwKICAgICAgICBzaXplb2YoaW50KSwgKChzaXplX3QpICYoKFhtVGV4dEZp
ZWxkUmVjICopMCktPnRleHQuc2VsZWN0aW9uX2FycmF5X2NvdW50KSwKICAgICAgICAoKGNoYXIq
KSZYdFN0cmluZ3NbMTcxOF0pLCAoWHRQb2ludGVyKSZkZWZhdWx0X3NlbGVjdGlvbl9hcnJheV9j
b3VudAoKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbOTA2NV0pLCAo
KGNoYXIgKikmX1htU3RyaW5nc1szMzU0XSksICgoY2hhciopJlh0U3RyaW5nc1sxNTYxXSksCiAg
ICAgICAgc2l6ZW9mKEJvb2xlYW4pLCAoKHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+
dGV4dC5yZXNpemVfd2lkdGgpLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sxNjk1XSksIChY
dFBvaW50ZXIpMAogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1s4NzM0
XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzMwNjJdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE1NjFd
KSwKICAgICAgICBzaXplb2YoQm9vbGVhbiksICgoc2l6ZV90KSAmKChYbVRleHRGaWVsZFJlYyAq
KTApLT50ZXh0LnBlbmRpbmdfZGVsZXRlKSwKICAgICAgICAoKGNoYXIqKSZYdFN0cmluZ3NbMTY5
NV0pLCAoWHRQb2ludGVyKTEKICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmlu
Z3NbNjU3OV0pLCAoKGNoYXIgKikmX1htU3RyaW5nc1sxNjAzXSksICgoY2hhciopJlh0U3RyaW5n
c1sxNTYxXSksCiAgICAgICAgc2l6ZW9mKEJvb2xlYW4pLCAoKHNpemVfdCkgJigoWG1UZXh0Rmll
bGRSZWMgKikwKS0+dGV4dC5lZGl0YWJsZSksCiAgICAgICAgKChjaGFyKikmWHRTdHJpbmdzWzE2
OTVdKSwgKFh0UG9pbnRlcikxCiAgICB9LAogICAgewogICAgICAgICgoY2hhciAqKSZfWG1TdHJp
bmdzWzU2NDFdKSwgKChjaGFyICopJl9YbVN0cmluZ3NbNzYwXSksICgoY2hhciopJlh0U3RyaW5n
c1sxNTYxXSksCiAgICAgICAgc2l6ZW9mKEJvb2xlYW4pLCAoKHNpemVfdCkgJigoWG1UZXh0Rmll
bGRSZWMgKikwKS0+dGV4dC5jdXJzb3JfcG9zaXRpb25fdmlzaWJsZSksCiAgICAgICAgKChjaGFy
KikmWHRTdHJpbmdzWzE2OTVdKSwgKFh0UG9pbnRlcikxCiAgICB9LAogICAgewogICAgICAgICgo
Y2hhciAqKSZfWG1TdHJpbmdzWzEwNTg3XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzQ1MDVdKSwg
KChjaGFyKikmWHRTdHJpbmdzWzE1NjFdKSwKICAgICAgICBzaXplb2YoQm9vbGVhbiksICgoc2l6
ZV90KSAmKChYbVRleHRGaWVsZFJlYyAqKTApLT50ZXh0LnZlcmlmeV9iZWxsKSwKICAgICAgICAo
KGNoYXIqKSZYdFN0cmluZ3NbMTY5NV0pLCAoWHRQb2ludGVyKSgodW5zaWduZWQgY2hhcikofjAp
KQogICAgfSwKICAgIHsKICAgICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1s5NDc4XSksICgoY2hh
ciAqKSZfWG1TdHJpbmdzWzM2NTBdKSwgKChjaGFyKikmWHRTdHJpbmdzWzE3MThdKSwKICAgICAg
ICBzaXplb2YoaW50KSwgKChzaXplX3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCktPnRleHQudGhy
ZXNob2xkKSwKICAgICAgICAoKGNoYXIqKSZYdFN0cmluZ3NbMTY5NV0pLCAoWHRQb2ludGVyKTUK
ICAgIH0sCiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0cmluZ3NbODMxOF0pLCAoKGNoYXIg
KikmX1htU3RyaW5nc1syNzI4XSksICgoY2hhciAqKSZfWG1TdHJpbmdzWzExNjQ3XSksCnNpemVv
ZihYbU5hdmlnYXRpb25UeXBlKSwgKChzaXplX3QpICYoKFhtVGV4dEZpZWxkUmVjICopMCktPnBy
aW1pdGl2ZS5uYXZpZ2F0aW9uX3R5cGUpLAogICAgICAgICgoY2hhciopJlh0U3RyaW5nc1sxNjk1
XSksIChYdFBvaW50ZXIpWG1UQUJfR1JPVVAKICAgIH0sCn07CgpzdGF0aWMgWG1TeW50aGV0aWNS
ZXNvdXJjZSBzeW5fcmVzb3VyY2VzW10gPQp7CiAgICB7CiAgICAgICAgKChjaGFyICopJl9YbVN0
cmluZ3NbNzkyMV0pLAogICAgICAgIHNpemVvZihEaW1lbnNpb24pLCAoKHNpemVfdCkgJigoWG1U
ZXh0RmllbGRSZWMgKikwKS0+dGV4dC5tYXJnaW5fd2lkdGgpLAogICAgICAgIF9YbUZyb21Ib3Jp
em9udGFsUGl4ZWxzLCBfWG1Ub0hvcml6b250YWxQaXhlbHMKICAgIH0sCiAgICB7CiAgICAgICAg
KChjaGFyICopJl9YbVN0cmluZ3NbNzg3NV0pLAogICAgICAgIHNpemVvZihEaW1lbnNpb24pLCAo
KHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC5tYXJnaW5faGVpZ2h0KSwKICAg
ICAgICBfWG1Gcm9tVmVydGljYWxQaXhlbHMsIF9YbVRvVmVydGljYWxQaXhlbHMKICAgIH0sCiAg
ICB7CiAgICAgICAgKChjaGFyKikmWHRTdHJpbmdzWzg1OV0pLAogICAgICAgIHNpemVvZihTdHJp
bmcpLCAoKHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC52YWx1ZSksCiAgICAg
ICAgX1htVGV4dEZpZWxkRXhwb3J0VmFsdWUgLCAoKHZvaWQgKikwKQogICAgfSwKICAgIHsKICAg
ICAgICAoKGNoYXIgKikmX1htU3RyaW5nc1sxMDU3OF0pLAogICAgICAgIHNpemVvZih3Y2hhcl90
ICopLCAoKHNpemVfdCkgJigoWG1UZXh0RmllbGRSZWMgKikwKS0+dGV4dC53Y192YWx1ZSksCiAg
ICAgICAgKCh2b2lkICopMCkgLCAoKHZvaWQgKikwKQogICAgfSwKfTsKCgoKCnN0YXRpYyB2b2lk
IFRleHRTZXQoWG1UZXh0RmllbGRXaWRnZXQgdywgY2hhciAqcyk7CnN0YXRpYyB2b2lkIERyYXco
WG1UZXh0RmllbGRXaWRnZXQgdyk7CnN0YXRpYyB2b2lkIERyYXdBbGwoWG1UZXh0RmllbGRXaWRn
ZXQgdyk7CnN0YXRpYyB2b2lkIERyYXdJbnNlcnQoWG1UZXh0RmllbGRXaWRnZXQgdyk7CnN0YXRp
YyB2b2lkIE1hc3NpdmVDaGFuZ2VEcmF3KFhtVGV4dEZpZWxkV2lkZ2V0IHcpOwpzdGF0aWMgdm9p
ZCBEcmF3VGV4dFJlcG9zaXRpb24oWG1UZXh0RmllbGRXaWRnZXQpOwpzdGF0aWMgdm9pZCBDbGVh
ckhpZ2hsaWdodChYbVRleHRGaWVsZFdpZGdldCB3KTsKc3RhdGljIHZvaWQgRHJhd1NpbmdsZUhp
Z2hsaWdodChYbVRleHRGaWVsZFdpZGdldCB3KTsKc3RhdGljIHZvaWQgQ3Vyc29yRHJhdyhYbVRl
eHRGaWVsZFdpZGdldCB3KTsKc3RhdGljIHZvaWQgQ3Vyc29yRXJhc2UoWG1UZXh0RmllbGRXaWRn
ZXQgdyk7CnN0YXRpYyBCb29sZWFuIERvQ3Vyc29yTW92ZShYbVRleHRGaWVsZFdpZGdldCB3LCBY
RXZlbnQgKmV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1UZXh0UG9zaXRpb24gcG9z
LCBCb29sZWFuIGhpZ2hsaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvb2xlYW4g
ZHJhd2l0KSA7CnN0YXRpYyBCb29sZWFuIEN1cnNvclBvc2l0aW9uKFhtVGV4dEZpZWxkV2lkZ2V0
IHcpOwpzdGF0aWMgQm9vbGVhbiBDdXJzb3JNYXNzaXZlQWRqdXN0KFhtVGV4dEZpZWxkV2lkZ2V0
IHcpOwpzdGF0aWMgdm9pZCBDdXJzb3JTZXQoWG1UZXh0RmllbGRXaWRnZXQgdywgQm9vbGVhbiBm
b2N1cyk7CnN0YXRpYyB2b2lkIFZlcmlmeUJlbGwoWG1UZXh0RmllbGRXaWRnZXQgdyk7CnN0YXRp
YyB2b2lkIFByaW1hcnlTZWxlY3Rpb25Db21wbGV0ZShYbVRleHRGaWVsZFdpZGdldCB3LCBUaW1l
IHRpbWUpOwoKdm9pZCBfWG1UZXh0RmllbGRGb2N1c0luKFdpZGdldCwgWEV2ZW50ICosIFN0cmlu
ZyAqLCBDYXJkaW5hbCAqKTsKdm9pZCBfWG1UZXh0RmllbGRGb2N1c091dChXaWRnZXQsIFhFdmVu
dCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGFjdGl2YXRlKFdpZGdldCwg
WEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgYmFja3dhcmRfY2hh
cmFjdGVyKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZv
aWQgYmFja3dhcmRfd29yZChXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7
CnN0YXRpYyB2b2lkIGJlZXAoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICop
OwpzdGF0aWMgdm9pZCBiZWdpbm5pbmdfb2ZfbGluZShXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcg
KiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGNsZWFyX3NlbGVjdGlvbihXaWRnZXQsIFhFdmVu
dCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGNvcHlfY2xpcGJvYXJkKFdp
ZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgY29weV9w
cmltYXJ5KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZv
aWQgY29weV90byhXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRp
YyB2b2lkIGN1dF9jbGlwYm9hcmQoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFs
ICopOwpzdGF0aWMgdm9pZCBjdXRfcHJpbWFyeShXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwg
Q2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGRlbGV0ZV9uZXh0X2NoYXJhY3RlcihXaWRnZXQsIFhF
dmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGRlbGV0ZV9wcmV2aW91
c19jaGFyYWN0ZXIoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0
aWMgdm9pZCBkZWxldGVfbmV4dF93b3JkKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJk
aW5hbCAqKTsKc3RhdGljIHZvaWQgZGVsZXRlX3ByZXZpb3VzX3dvcmQoV2lkZ2V0LCBYRXZlbnQg
KiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBkZWxldGVfc2VsZWN0aW9uKFdp
ZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgZGVsZXRl
X3RvX2VuZF9vZl9saW5lKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsK
c3RhdGljIHZvaWQgZGVsZXRlX3RvX3N0YXJ0X29mX2xpbmUoV2lkZ2V0LCBYRXZlbnQgKiwgU3Ry
aW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBkZWxldGVfYWxsKFdpZGdldCwgWEV2ZW50
ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgZGVzZWxlY3RfYWxsKFdpZGdl
dCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgZG9fcXVpY2tf
YWN0aW9uKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZv
aWQgZW5kX29mX2xpbmUoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpz
dGF0aWMgdm9pZCBlbnRlcihXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7
CnN0YXRpYyB2b2lkIGV4dGVuZF9hZGp1c3QoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENh
cmRpbmFsICopOwpzdGF0aWMgdm9pZCBleHRlbmRfZW5kKFdpZGdldCwgWEV2ZW50ICosIFN0cmlu
ZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgZXh0ZW5kX3N0YXJ0KFdpZGdldCwgWEV2ZW50
ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgZm9yd2FyZF9jaGFyYWN0ZXIo
V2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBmb3J3
YXJkX3dvcmQoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMg
dm9pZCBncmFiX2ZvY3VzKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsK
CnN0YXRpYyB2b2lkIGluc2VydF9zdHJpbmcoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENh
cmRpbmFsICopOwpzdGF0aWMgdm9pZCBrZXlfc2VsZWN0KFdpZGdldCwgWEV2ZW50ICosIFN0cmlu
ZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQga2lsbF9uZXh0X2NoYXJhY3RlcihXaWRnZXQs
IFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGtpbGxfbmV4dF93
b3JkKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQg
a2lsbF9wcmV2aW91c19jaGFyYWN0ZXIoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRp
bmFsICopOwpzdGF0aWMgdm9pZCBraWxsX3ByZXZpb3VzX3dvcmQoV2lkZ2V0LCBYRXZlbnQgKiwg
U3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBraWxsX3NlbGVjdGlvbihXaWRnZXQs
IFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIGtpbGxfdG9fZW5k
X29mX2xpbmUoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMg
dm9pZCBraWxsX3RvX3N0YXJ0X29mX2xpbmUoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENh
cmRpbmFsICopOwpzdGF0aWMgdm9pZCBsZWF2ZShXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwg
Q2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIG1vdmVfZGVzdGluYXRpb24oV2lkZ2V0LCBYRXZlbnQg
KiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBtb3ZlX3RvKFdpZGdldCwgWEV2
ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgbmV4dF90YWJfZ3JvdXAo
V2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBwYWdl
X2xlZnQoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9p
ZCBwYWdlX3JpZ2h0KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3Rh
dGljIHZvaWQgcGFzdGVfY2xpcGJvYXJkKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJk
aW5hbCAqKTsKc3RhdGljIHZvaWQgcGFzdGVfcHJpbWFyeShXaWRnZXQsIFhFdmVudCAqLCBTdHJp
bmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHByZXZfdGFiX2dyb3VwKFdpZGdldCwgWEV2
ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgcHJvY2Vzc19iZHJhZyhX
aWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHByb2Nl
c3NfY2FuY2VsKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGlj
IHZvaWQgcHJvY2Vzc19ob21lKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAq
KTsKc3RhdGljIHZvaWQgcHJvY2Vzc19yZXR1cm4oV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICos
IENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBwcm9jZXNzX3RhYihXaWRnZXQsIFhFdmVudCAqLCBT
dHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHF1aWNrX2NvcHlfc2V0KFdpZGdldCwg
WEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgcXVpY2tfY3V0X3Nl
dChXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHJl
ZHJhd19kaXNwbGF5KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3Rh
dGljIHZvaWQgc2Vjb25kYXJ5X2FkanVzdChXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2Fy
ZGluYWwgKik7CnN0YXRpYyB2b2lkIHNlY29uZGFyeV9ub3RpZnkoV2lkZ2V0LCBYRXZlbnQgKiwg
U3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBzZWNvbmRhcnlfc3RhcnQoV2lkZ2V0
LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBzZWxlY3RfYWRq
dXN0KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQg
c2VsZWN0X2FsbChXaWRnZXQsIFhFdmVudCAqLCBTdHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRp
YyB2b2lkIHNlbGVjdF9lbmQoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICop
OwpzdGF0aWMgdm9pZCBzZWxlY3Rfc3RhcnQoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENh
cmRpbmFsICopOwpzdGF0aWMgdm9pZCBzZWxmX2luc2VydChXaWRnZXQsIFhFdmVudCAqLCBTdHJp
bmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHNldF9hbmNob3IoV2lkZ2V0LCBYRXZlbnQg
KiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCBzZXRfaW5zZXJ0aW9uX3BvaW50
KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgc2V0
X3NlbGVjdGlvbl9oaW50KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsK
c3RhdGljIHZvaWQgdG9nZ2xlX2FkZF9tb2RlKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBD
YXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgdHJhdmVyc2VfaG9tZShXaWRnZXQsIFhFdmVudCAqLCBT
dHJpbmcgKiwgQ2FyZGluYWwgKik7CnN0YXRpYyB2b2lkIHRyYXZlcnNlX25leHQoV2lkZ2V0LCBY
RXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwpzdGF0aWMgdm9pZCB0cmF2ZXJzZV9wcmV2
KFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQgdW5r
aWxsKFdpZGdldCwgWEV2ZW50ICosIFN0cmluZyAqLCBDYXJkaW5hbCAqKTsKc3RhdGljIHZvaWQg
dW5tYXAoV2lkZ2V0LCBYRXZlbnQgKiwgU3RyaW5nICosIENhcmRpbmFsICopOwoKc3RhdGljIHZv
aWQgU2V0U2luZ2xlSGlnaGxpZ2h0KFdpZGdldCwgaW50LCBpbnQpOwoKCgoKCnN0YXRpYyBYdEFj
dGlvbnNSZWMgYWN0aW9uc1tdID0KewogICAgeyJzZWxmLWluc2VydCIsIHNlbGZfaW5zZXJ0fSwK
ICAgIHsiZGVsZXRlLXByZXZpb3VzLWNoYXJhY3RlciIsIGRlbGV0ZV9wcmV2aW91c19jaGFyYWN0
ZXJ9LAogICAgeyJkZWxldGUtbmV4dC1jaGFyYWN0ZXIiLCBkZWxldGVfbmV4dF9jaGFyYWN0ZXJ9
LAogICAgeyJkZWxldGUtcHJldmlvdXMtd29yZCIsIGRlbGV0ZV9wcmV2aW91c193b3JkfSwKICAg
IHsiZGVsZXRlLW5leHQtd29yZCIsIGRlbGV0ZV9uZXh0X3dvcmR9LAogICAgeyJkZWxldGUtdG8t
ZW5kLW9mLWxpbmUiLCBkZWxldGVfdG9fZW5kX29mX2xpbmV9LAogICAgeyJkZWxldGUtdG8tc3Rh
cnQtb2YtbGluZSIsIGRlbGV0ZV90b19zdGFydF9vZl9saW5lfSwKICAgIHsiYWN0aXZhdGUiLCBh
Y3RpdmF0ZX0sCiAgICB7InByb2Nlc3MtY2FuY2VsIiwgcHJvY2Vzc19jYW5jZWx9LAogICAgeyJw
cm9jZXNzLWJkcmFnIiwgcHJvY2Vzc19iZHJhZ30sCiAgICB7ImJhY2t3YXJkLWNoYXJhY3RlciIs
IGJhY2t3YXJkX2NoYXJhY3Rlcn0sCiAgICB7ImZvcndhcmQtY2hhcmFjdGVyIiwgZm9yd2FyZF9j
aGFyYWN0ZXJ9LAogICAgeyJiYWNrd2FyZC13b3JkIiwgYmFja3dhcmRfd29yZH0sCiAgICB7ImZv
cndhcmQtd29yZCIsIGZvcndhcmRfd29yZH0sCiAgICB7ImVuZC1vZi1saW5lIiwgZW5kX29mX2xp
bmV9LAogICAgeyJiZWdpbm5pbmctb2YtbGluZSIsIGJlZ2lubmluZ19vZl9saW5lfSwKICAgIHsi
cGFnZS1sZWZ0IiwgcGFnZV9sZWZ0fSwKICAgIHsicGFnZS1yaWdodCIsIHBhZ2VfcmlnaHR9LAog
ICAgeyJrZXktc2VsZWN0Iiwga2V5X3NlbGVjdH0sCiAgICB7ImdyYWItZm9jdXMiLCBncmFiX2Zv
Y3VzfSwKICAgIHsibW92ZS1kZXN0aW5hdGlvbiIsIG1vdmVfZGVzdGluYXRpb259LAogICAgeyJl
eHRlbmQtc3RhcnQiLCBleHRlbmRfc3RhcnR9LAogICAgeyJleHRlbmQtYWRqdXN0IiwgZXh0ZW5k
X2FkanVzdH0sCiAgICB7ImV4dGVuZC1lbmQiLCBleHRlbmRfZW5kfSwKICAgIHsiZGVsZXRlLXNl
bGVjdGlvbiIsIGRlbGV0ZV9zZWxlY3Rpb259LAogICAgeyJjbGVhci1zZWxlY3Rpb24iLCBjbGVh
cl9zZWxlY3Rpb259LAogICAgeyJjdXQtcHJpbWFyeSIsIGN1dF9wcmltYXJ5fSwKICAgIHsiY29w
eS1wcmltYXJ5IiwgY29weV9wcmltYXJ5fSwKICAgIHsic2V0LWFuY2hvciIsIHNldF9hbmNob3J9
LAoKICAgIHsidG9nZ2xlLWFkZC1tb2RlIiwgdG9nZ2xlX2FkZF9tb2RlfSwKICAgIHsic2VsZWN0
LWFsbCIsIHNlbGVjdF9hbGx9LAogICAgeyJkZXNlbGVjdC1hbGwiLCBkZXNlbGVjdF9hbGx9LAog
ICAgeyJzZWNvbmRhcnktc3RhcnQiLCBzZWNvbmRhcnlfc3RhcnR9LAogICAgeyJzZWNvbmRhcnkt
YWRqdXN0Iiwgc2Vjb25kYXJ5X2FkanVzdH0sCiAgICB7ImNvcHktdG8iLCBjb3B5X3RvfSwKICAg
IHsibW92ZS10byIsIG1vdmVfdG99LAogICAgeyJxdWljay1jdXQtc2V0IiwgcXVpY2tfY3V0X3Nl
dH0sCiAgICB7InF1aWNrLWNvcHktc2V0IiwgcXVpY2tfY29weV9zZXR9LAogICAgeyJkby1xdWlj
ay1hY3Rpb24iLCBkb19xdWlja19hY3Rpb259LAogICAgeyJjdXQtY2xpcGJvYXJkIiwgY3V0X2Ns
aXBib2FyZH0sCiAgICB7ImNvcHktY2xpcGJvYXJkIiwgY29weV9jbGlwYm9hcmR9LAogICAgeyJw
YXN0ZS1jbGlwYm9hcmQiLCBwYXN0ZV9jbGlwYm9hcmR9LAogICAgeyJ0cmF2ZXJzZS1uZXh0Iiwg
dHJhdmVyc2VfbmV4dH0sCiAgICB7InRyYXZlcnNlLXByZXYiLCB0cmF2ZXJzZV9wcmV2fSwKICAg
IHsidHJhdmVyc2UtaG9tZSIsIHRyYXZlcnNlX2hvbWV9LAogICAgeyJuZXh0LXRhYi1ncm91cCIs
IG5leHRfdGFiX2dyb3VwfSwKICAgIHsicHJldi10YWItZ3JvdXAiLCBwcmV2X3RhYl9ncm91cH0s
CiAgICB7ImZvY3VzSW4iLCBfWG1UZXh0RmllbGRGb2N1c0lufSwKICAgIHsiZm9jdXNPdXQiLCBf
WG1UZXh0RmllbGRGb2N1c091dH0sCiAgICB7ImVudGVyIiwgZW50ZXJ9LAogICAgeyJsZWF2ZSIs
IGxlYXZlfSwKCiAgICB7ImJlZXAiLCBiZWVwfSwKICAgIHsiZGVsZXRlLWFsbCIsIGRlbGV0ZV9h
bGx9LAogICAgeyJIZWxwIiwgX1htUHJpbWl0aXZlSGVscH0sCgoKCiAgICB7Imluc2VydC1zdHJp
bmciLCBpbnNlcnRfc3RyaW5nfSwKICAgIHsia2lsbC1uZXh0LWNoYXJhY3RlciIsIGtpbGxfbmV4
dF9jaGFyYWN0ZXJ9LAogICAgeyJraWxsLW5leHQtd29yZCIsIGtpbGxfbmV4dF93b3JkfSwKICAg
IHsia2lsbC1wcmV2aW91cy1jaGFyYWN0ZXIiLCBraWxsX3ByZXZpb3VzX2NoYXJhY3Rlcn0sCiAg
ICB7ImtpbGwtcHJldmlvdXMtd29yZCIsIGtpbGxfcHJldmlvdXNfd29yZH0sCiAgICB7ImtpbGwt
c2VsZWN0aW9uIiwga2lsbF9zZWxlY3Rpb259LAogICAgeyJraWxsLXRvLWVuZC1vZi1saW5lIiwg
a2lsbF90b19lbmRfb2ZfbGluZX0sCiAgICB7ImtpbGwtdG8tc3RhcnQtb2YtbGluZSIsIGtpbGxf
dG9fc3RhcnRfb2ZfbGluZX0sCiAgICB7InBhc3RlLXByaW1hcnkiLCBwYXN0ZV9wcmltYXJ5fSwK
ICAgIHsicHJvY2Vzcy1ob21lIiwgcHJvY2Vzc19ob21lfSwKICAgIHsicHJvY2Vzcy1yZXR1cm4i
LCBwcm9jZXNzX3JldHVybn0sCiAgICB7InByb2Nlc3MtdGFiIiwgcHJvY2Vzc190YWJ9LAogICAg
eyJyZWRyYXctZGlzcGxheSIsIHJlZHJhd19kaXNwbGF5fSwKICAgIHsic2Vjb25kYXJ5LW5vdGlm
eSIsIHNlY29uZGFyeV9ub3RpZnl9LAogICAgeyJzZWxlY3QtYWRqdXN0Iiwgc2VsZWN0X2FkanVz
dH0sCiAgICB7InNlbGVjdC1lbmQiLCBzZWxlY3RfZW5kfSwKICAgIHsic2VsZWN0LXN0YXJ0Iiwg
c2VsZWN0X3N0YXJ0fSwKICAgIHsic2V0LWluc2VydGlvbi1wb2ludCIsIHNldF9pbnNlcnRpb25f
cG9pbnR9LAogICAgeyJzZXQtc2VsZWN0aW9uLWhpbnQiLCBzZXRfc2VsZWN0aW9uX2hpbnR9LAog
ICAgeyJ1bmtpbGwiLCB1bmtpbGx9LAogICAgeyJ1bm1hcCIsIHVubWFwfSwKfTsKWG1QcmltaXRp
dmVDbGFzc0V4dFJlYyBfWG1UZXh0RlByaW1DbGFzc0V4dFJlYyA9CnsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCh2b2lkICopMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICgoWHJtUXVhcmspIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoWG1QcmltaXRpdmVDbGFzc0V4dFJlYyksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKHZvaWQgKikwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCh2b2lkICopMCkKfTsKClhtVGV4dEZpZWxkQ2xhc3NSZWMgeG1UZXh0RmllbGRDbGFzc1JlYyA9
CnsKCiAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2lkZ2V0Q2xhc3Mp
ICYgeG1QcmltaXRpdmVDbGFzc1JlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIlhtVGV4dEZpZWxkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZW9mKFhtVGV4dEZpZWxkUmVjKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xhc3NfaW5pdGlhbGl6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xh
c3NfcGFydF9pbml0aWFsaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQgKikwKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVhbGl6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWN0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChD
YXJkaW5hbCkgKHNpemVvZihhY3Rpb25zKSAvIHNpemVvZihhY3Rpb25zWzBdKSkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICgoQ2FyZGluYWwpIChzaXplb2YocmVzb3VyY2VzKSAvIHNpemVv
ZihyZXNvdXJjZXNbMF0pKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo
WHJtUXVhcmspIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0cm95LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4cG9zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0
X3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkICopMCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoWHRBbG1vc3RQcm9jKSBfWHRJ
bmhlcml0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2lkICopMCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTEgKiAxMDAwICsgNiksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfWG1UZXh0Rl9FdmVudEJpbmRpbmdzMSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcXVlcnlfZ2VvbWV0cnksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICgodm9pZCAqKTApICwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKFh0UG9pbnRlcikoKHZvaWQgKikwKQogIH0sCgogIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKChYdFdpZGdldFByb2MpIF9YdEluaGVyaXQpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFh0V2lkZ2V0UHJvYykgX1h0SW5oZXJpdCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvaWQgKikwKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3luX3Jlc291cmNlcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKChDYXJkaW5hbCkgKHNpemVvZihzeW5fcmVzb3VyY2VzKSAvIHNpemVv
ZihzeW5fcmVzb3VyY2VzWzBdKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoWHRQb2ludGVyKSAmIF9YbVRleHRGUHJpbUNsYXNzRXh0UmVjLAogIH0sCgogIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgKCh2b2lkICopMCkKICB9Cn07CgoKV2lkZ2V0Q2xhc3MgeG1UZXh0
RmllbGRXaWRnZXRDbGFzcyA9IChXaWRnZXRDbGFzcykmeG1UZXh0RmllbGRDbGFzc1JlYzsKCgoK
CgoKc3RhdGljIHZvaWQKRm9udFNpemUoWG1UZXh0RmllbGRXaWRnZXQgdykKewogICAgICAgIFht
Rm9udExpc3RFbnRyeSBlbnRyeSA9ICgodm9pZCAqKTApOwogICAgICAgIFhGb250U3RydWN0ICpm
cyA9ICgodm9pZCAqKTApOwogICAgICAgIGludCBpLCBqLCBudW0sIG1heCwgbWluOwoKICAgIGZv
ciAoaSA9IDA7ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVu
ZGl0aW9uc1tpXS0+dGFnICE9ICgodm9pZCAqKTApOyBpKyspIHsKICAgICAgICBpZiAoIV9fZXh0
ZW5zaW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFu
dF9wICgoKGNoYXIgKikmX1htU3RyaW5nc1sxMjU0NF0pKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRf
cCAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25z
W2ldLT50YWcpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1
NDRdKSksIF9fczJfbGVuID0gc3RybGVuICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZyksICghKChzaXplX3QpKGNvbnN0IHZvaWQg
KikoKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSkpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2
b2lkICopKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSkpID09IDEpIHx8IF9fczFfbGVuID49
IDQpICYmICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEpIC0gKHNpemVfdCko
Y29uc3Qgdm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkt
PnJlbmRpdGlvbnNbaV0tPnRhZykgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgo
X19jb25zdCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1sxMjU0NF0pKSwgKF9fY29uc3Qg
Y2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5k
aXRpb25zW2ldLT50YWcpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDogX19zMl9s
ZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEy
NTQ0XSkpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgoKGNoYXIgKikmX1htU3RyaW5nc1sx
MjU0NF0pKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKGNoYXIgKikmX1htU3RyaW5n
c1sxMjU0NF0pKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKCgoY2hhciAqKSZfWG1TdHJp
bmdzWzEyNTQ0XSkpLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRh
ZykgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEpIC0gKHNpemVfdCkoY29u
c3Qgdm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJl
bmRpdGlvbnNbaV0tPnRhZykgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQg
X19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo
KChjaGFyICopJl9YbVN0cmluZ3NbMTI1NDRdKSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNo
YXIgKikgKF9fY29uc3QgY2hhciAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZv
bnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBf
X3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf
X2NvbnN0IGNoYXIgKikgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSkpKVsxXSAtICgoX19j
b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbMV0pOyBpZiAo
X19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu
c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1
NDRdKSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ld
LT50YWcpKVsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQg
PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICop
Jl9YbVN0cmluZ3NbMTI1NDRdKSkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f
Y29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3Qp
LT5yZW5kaXRpb25zW2ldLT50YWcpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5z
aW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZyk7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9
ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKGNoYXIgKikm
X1htU3RyaW5nc1sxMjU0NF0pKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBf
X3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf
X2NvbnN0IGNoYXIgKikgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSkpKVsxXSAtIF9fczJb
MV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0
cmluZ3NbMTI1NDRdKSkpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1
bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg
Y2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1NDRdKSkpWzNdIC0gX19zMlszXSk7IH0g
fSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpICYmICgoc2l6
ZV90KShjb25zdCB2b2lkICopKCgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRf
bGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKiko
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ld
LT50YWcpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpLCBfX3MyX2xlbiA8IDQp
ID8gKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKGNoYXIgKikmX1htU3RyaW5nc1sxMjU0NF0pKSAm
JiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1NDRdKSkg
KyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1NDRd
KSkgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0
cmluZ3NbMTI1NDRdKSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg
Y2hhciAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRp
dGlvbnNbaV0tPnRhZykpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7
IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg
KCgoY2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSkpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBj
aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
Zm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYm
IF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg
KF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1NDRdKSkpWzJdIC0gKChf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKVsyXSk7IGlm
IChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu
c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMTI1
NDRdKSkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ld
LT50YWcpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25z
dCB1bnNpZ25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z
dCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1sxMjU0NF0pKTsgcmVnaXN0ZXIgaW50IF9f
cmVzdWx0ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo
YXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0
aW9uc1tpXS0+dGFnKSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBf
X3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg
Y2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5k
aXRpb25zW2ldLT50YWcpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkg
eyBfX3Jlc3VsdCA9IChfX3MxWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u
c3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5y
ZW5kaXRpb25zW2ldLT50YWcpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0g
MCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv
bnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+
cmVuZGl0aW9uc1tpXS0+dGFnKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKCgo
Y2hhciAqKSZfWG1TdHJpbmdzWzEyNTQ0XSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSkpKTsgfSkpCiAgICAgICAgewogICAg
ICAgICAgICBlbnRyeSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0
KS0+cmVuZGl0aW9uc1tpXTsKICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9U
ZXh0Ri5jIiwgKFdpZGdldCl3LCAiRm9udFNpemU6IFhtRk9OVExJU1RfREVGQVVMVF9UQUdcbiIp
OwoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIGlmICghZW50cnkpCiAg
ICB7CgogICAgICAgIGZvciAoaSA9IDA7ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
Zm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnICE9ICgodm9pZCAqKTApOyBpKyspIHsKICAg
ICAgICAgICAgaWYgKCFfX2V4dGVuc2lvbl9fICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47
IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSAmJiBfX2J1
aWx0aW5fY29uc3RhbnRfcCAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xp
c3QpLT5yZW5kaXRpb25zW2ldLT50YWcpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoKChjaGFyICop
Jl9YbVN0cmluZ3NbMF0pKSwgX19zMl9sZW4gPSBzdHJsZW4gKCgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSwgKCEoKHNpemVfdCko
Y29uc3Qgdm9pZCAqKSgoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSArIDEpIC0gKHNpemVfdCko
Y29uc3Qgdm9pZCAqKSgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpID09IDEpIHx8IF9fczFfbGVu
ID49IDQpICYmICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEpIC0gKHNpemVf
dCkoY29uc3Qgdm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlz
dCktPnJlbmRpdGlvbnNbaV0tPnRhZykgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21w
ICgoX19jb25zdCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpLCAoX19jb25zdCBj
aGFyICopICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRp
dGlvbnNbaV0tPnRhZyksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xl
bikgKyAxKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKChjaGFyICopJl9YbVN0cmluZ3NbMF0p
KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSAr
IDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpID09
IDEpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSwgX19z
MV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpICYmICgoc2l6ZV90KShj
b25zdCB2b2lkICopKCgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkt
PnJlbmRpdGlvbnNbaV0tPnRhZykgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcp
ID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19j
b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoY2hhciAqKSZfWG1TdHJp
bmdzWzBdKSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq
KSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNb
aV0tPnRhZykpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVz
dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoY2hh
ciAqKSZfWG1TdHJpbmdzWzBdKSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f
Y29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3Qp
LT5yZW5kaXRpb25zW2ldLT50YWcpKVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQg
PT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj
aGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpKVsyXSAtICgoX19jb25zdCB1bnNpZ25l
ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAy
ICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop
IChfX2NvbnN0IGNoYXIgKikgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzBdKSkpWzNdIC0gKChfX2Nv
bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKVszXSk7IH0gfSBf
X3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpf
X3MyID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZyk7
IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j
b25zdCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpKVswXSAtIF9fczJbMF0pOyBp
ZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0
IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3Nb
MF0pKSlbMV0gLSBfX3MyWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7
IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg
KCgoY2hhciAqKSZfWG1TdHJpbmdzWzBdKSkpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+
IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg
KikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSlbM10gLSBfX3My
WzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykg
JiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEpIC0gKHNpemVfdCkoY29uc3Qg
dm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRp
dGlvbnNbaV0tPnRhZykgPT0gMSkgJiYgKF9fczJfbGVuID0gc3RybGVuICgoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZyksIF9fczJf
bGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzBd
KSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoY2hhciAqKSZfWG1TdHJpbmdzWzBdKSkg
KyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSA9
PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29u
c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5n
c1swXSkpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKiko
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ld
LT50YWcpKVswXSk7IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3Vs
dCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKGNoYXIg
KikmX1htU3RyaW5nc1swXSkpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv
bnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+
cmVuZGl0aW9uc1tpXS0+dGFnKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09
IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh
ciAqKSAoKChjaGFyICopJl9YbVN0cmluZ3NbMF0pKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAm
JiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo
X19jb25zdCBjaGFyICopICgoKGNoYXIgKikmX1htU3RyaW5nc1swXSkpKVszXSAtICgoX19jb25z
dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbM10pOyB9IH0gX19y
ZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19z
MSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChjaGFyICop
Jl9YbVN0cmluZ3NbMF0pKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19j
b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbMF07IGlmIChf
X3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKVsxXSk7IGlm
IChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzJdIC0g
KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKVsyXSk7
IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAt
ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbM10p
OyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKCgoY2hhciAqKSZfWG1TdHJpbmdzWzBdKSwg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ld
LT50YWcpKSkpOyB9KSkgewoKICAgICAgICAgICAgICAgIGVudHJ5ID0gKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldOwogICAgICAgICAgICAg
ICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiRm9udFNp
emU6IFhtU1RSSU5HX0RFRkFVTFRfQ0hBUlNFVFxuIik7CgogICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaWYgKCFlbnRyeSkKICAgIHsKCiAg
ICAgICAgZm9yIChpID0gMDsgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xp
c3QpLT5yZW5kaXRpb25zW2ldLT50YWcgIT0gKCh2b2lkICopMCk7IGkrKykgewogICAgICAgICAg
ICBpZiAoIV9fZXh0ZW5zaW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVp
bHRpbl9jb25zdGFudF9wICgiIikgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKCgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSAmJiAo
X19zMV9sZW4gPSBzdHJsZW4gKCIiKSwgX19zMl9sZW4gPSBzdHJsZW4gKCgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSwgKCEoKHNp
emVfdCkoY29uc3Qgdm9pZCAqKSgoIiIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCIi
KSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0t
PnRhZykgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpID09IDEpIHx8IF9fczJf
bGVuID49IDQpKSA/IG1lbWNtcCAoKF9fY29uc3QgY2hhciAqKSAoIiIpLCAoX19jb25zdCBjaGFy
ICopICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlv
bnNbaV0tPnRhZyksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikg
KyAxKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIiIpICYmICgoc2l6ZV90KShjb25zdCB2b2lk
ICopKCgiIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoIiIpID09IDEpICYmIChfX3Mx
X2xlbiA9IHN0cmxlbiAoIiIpLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9w
ICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNb
aV0tPnRhZykgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEpIC0gKHNpemVf
dCkoY29uc3Qgdm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlz
dCktPnJlbmRpdGlvbnNbaV0tPnRhZykgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3Rl
ciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh
ciAqKSAoIiIpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg
KikoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25z
W2ldLT50YWcpKVswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jl
c3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiIikp
WzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcp
KVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgo
KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiIikpWzJdIC0gKChf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKVsyXSk7IGlm
IChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu
c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIiIpKVszXSAtICgoX19jb25zdCB1bnNp
Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSlbM10pOyB9IH0gX19yZXN1bHQ7
IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMiA9IChf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpOyByZWdpc3Rl
ciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh
ciAqKSAoIiIpKVswXSAtIF9fczJbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09
IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh
ciAqKSAoIiIpKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09
IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh
ciAqKSAoIiIpKVsyXSAtIF9fczJbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09
IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg
KikgKCIiKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9j
b25zdGFudF9wICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJl
bmRpdGlvbnNbaV0tPnRhZykgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+dGFnKSArIDEp
IC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykgPT0gMSkgJiYgKF9fczJfbGVuID0gc3Ry
bGVuICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlv
bnNbaV0tPnRhZyksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKCIiKSAm
JiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIiIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lk
ICopKCIiKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9
ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiIikpWzBdIC0g
KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSgoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykpWzBdKTsg
aWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25z
dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIiKSlbMV0gLSAoKF9fY29uc3Qg
dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykpWzFdKTsgaWYgKF9fczJf
bGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l
ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIiKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRhZykpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAm
JiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo
X19jb25zdCBjaGFyICopICgiIikpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f
Y29uc3QgY2hhciAqKSAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3Qp
LT5yZW5kaXRpb25zW2ldLT50YWcpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5z
aW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgiIik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9IF9f
czFbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV0tPnRh
ZykpWzBdOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo
X19zMVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tpXS0+
dGFnKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQg
PSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg
KCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1tp
XS0+dGFnKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0
ID0gKF9fczFbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop
ICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNb
aV0tPnRhZykpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogc3RyY21wICgiIiwgKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zW2ldLT50YWcpKSkp
OyB9KSkgewogICAgICAgICAgICAgICAgZW50cnkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbaV07CiAgICAgICAgICAgICAgICBfTHREZWJ1
ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJGb250U2l6ZTogZW1wdHkg
dGFnXG4iKTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgIH0KCiAgICBpZiAoISBlbnRyeSkgewogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmZvbnRfbGlzdCkgJiYgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5mb250X2xpc3QpLT5yZW5kaXRpb25zKQogICAgICAgICAgICAgICAgZW50cnkgPSAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbMF07CiAgICB9
CgoKCgoKCgogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC51
c2VfeGZ0KSA9IDA7CgoKICAgIGlmICghZW50cnkpIHsKICAgICAgICBYbUZvbnRMaXN0IGZsID0g
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpOwogICAgICAgICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KSA9IF9YbUZvbnRMaXN0Q3JlYXRl
RGVmYXVsdCgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y
ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29y
ZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQt
PmNvcmUuc2NyZWVuLT5kaXNwbGF5KSk7CiAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9Y
bS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiVEYgRm9udFNpemU6IG92ZXJ3cml0aW5nIEZvbnRMaXN0
IChvbGQgJXAgbmV3ICVwKVxuIiwgZmwsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
Zm9udF9saXN0KSk7CgoKICAgICAgICBlbnRyeSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZm9udF9saXN0KS0+cmVuZGl0aW9uc1swXTsKICAgIH0KCgoKCgoKCiAgICBpZiAoZW50
cnktPnR5cGUgPT0gWG1GT05UX0lTX0ZPTlRTRVQpIHsKICAgICAgICBYRm9udFN0cnVjdCAqKmZv
bzsKICAgICAgICBjaGFyICoqYmFyOwoKICAgICAgICBpZiAoKG51bSA9IFhGb250c09mRm9udFNl
dCgoWEZvbnRTZXQpKGVudHJ5LT5mb250KSwgJmZvbywgJmJhcikpIDwgMSkgewogICAgICAgICAg
ICBmcyA9ICgodm9pZCAqKTApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZzID0gZm9v
WzBdOwogICAgICAgICAgICBtYXggPSAwOyBtaW4gPSAyMTQ3NDgzNjQ3OwogICAgICAgICAgICBm
b3IgKGo9MDsgajxudW07IGorKyl7CiAgICAgICAgICAgICAgICAgICAgaWYgKGZvb1tqXS0+bWF4
X2JvdW5kcy53aWR0aCA+IG1heCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCA9IGZv
b1tqXS0+bWF4X2JvdW5kcy53aWR0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoZm9vW2pdLT5t
aW5fYm91bmRzLndpZHRoIDwgbWluKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluID0g
Zm9vW2pdLT5taW5fYm91bmRzLndpZHRoOwogICAgICAgICAgICB9CiAgICAgICAgICAgICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuYXZlcmFnZV9jaGFyX3dpZHRoKSA9IChtYXggKyBt
aW4pIC8gMjsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGZzID0gKFhGb250U3RydWN0
ICopZW50cnktPmZvbnQ7CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5h
dmVyYWdlX2NoYXJfd2lkdGgpID0KICAgICAgICAgICAgICAgIChmcy0+bWF4X2JvdW5kcy53aWR0
aCArIGZzLT5taW5fYm91bmRzLndpZHRoKSAvIDI7CiAgICB9CiAgICAoKChYbVRleHRGaWVsZFdp
ZGdldCkodykpLT50ZXh0LmZvbnQpID0gZnM7CiAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVz
c3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lv
bikpLT5Gb250SGVpZ2h0KSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udC0+
bWF4X2JvdW5kcy5hc2NlbnQpICsgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250
LT5tYXhfYm91bmRzLmRlc2NlbnQpOwoKICAgIGlmICggKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5hdmVyYWdlX2NoYXJfd2lkdGgpIDw9IDAgKSB7CiAgICAgICAgKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5hdmVyYWdlX2NoYXJfd2lkdGgpID0gX1htRm9udENhbGN1bGF0
ZUF2ZXJhZ2VDaGFyYWN0ZXJXaWR0aCgoV2lkZ2V0KXcsIGZzKTsKICAgIH0KfQoKc3RhdGljIHZv
aWQKRm9udEluaXRpYWxpemUoWG1UZXh0RmllbGRXaWRnZXQgdykKewoKCgogICAgaWYgKCEoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkpCiAgICB7CiAgICAgICAgV2lk
Z2V0IHBhcmVudCA9ICgoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50KTsKCiAgICAgICAgd2hp
bGUgKHBhcmVudCkKICAgICAgICB7CiAgICAgICAgICAgIGlmICgoKCgoX1htX2Zhc3RQdHIgPSAo
KCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHBhcmVudCkpLT5v
YmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFht
QmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KShwYXJlbnQpKS0+b2JqZWN0
LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkg
PT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChP
YmplY3QpKHBhcmVudCkpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRl
bnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25QdHIgKChY
bUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFzcykoKCgo
KE9iamVjdCkocGFyZW50KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4
dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFz
dFB0ciktPmZsYWdzKVsoKFhtQlVMTEVUSU5fQk9BUkRfQklUKSA+PiAzKV0pICYgKDEgPDwgKChY
bUJVTExFVElOX0JPQVJEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkgfHwgWHRJc1N1YmNs
YXNzKHBhcmVudCwgdmVuZG9yU2hlbGxXaWRnZXRDbGFzcykpIHsKICAgICAgICAgICAgICAgIF9M
dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIlRGIEZvbnRJbml0
aWFsaXplOiBvdmVyd3JpdGluZyBGb250TGlzdFxuIik7CgogICAgICAgICAgICAgICAgWHRWYUdl
dFZhbHVlcyhwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhciAqKSZf
WG1TdHJpbmdzWzEwMDUyXSksICYoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRf
bGlzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9pZCAqKTApKTsKCiAgICAg
ICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkgPSBY
bUZvbnRMaXN0Q29weSgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkp
OwogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250bGlz
dF9jcmVhdGVkKSA9IDE7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgcGFyZW50ID0gKCgoT2JqZWN0KShwYXJlbnQpKS0+b2JqZWN0LnBhcmVudCk7CiAg
ICAgICAgfQoKCgogICAgICAgIGlmICghKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5m
b250X2xpc3QpKQogICAgICAgIHsKICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5mb250X2xpc3QpID0gX1htR2V0RGVmYXVsdEZvbnRMaXN0KChXaWRnZXQpdywgWG1U
RVhUX0ZPTlRMSVNUKTsKCgogICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LmZvbnRsaXN0X2NyZWF0ZWQpID0gMTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7
CgogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udGxpc3RfY3JlYXRl
ZCkgPSAxOwogICAgfQoKICAgIEZvbnRTaXplKHcpOwp9CgpzdGF0aWMgdm9pZApDaGFuZ2VEcmF3
R0MoWG1UZXh0RmllbGRXaWRnZXQgdykKewogICAgWEdDVmFsdWVzIHZhbHVlczsKICAgIFh0R0NN
YXNrIG1hc2ssIGR5bmFtaWMsIGRvbnRjYXJlOwoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmdjKSkgewoKCgogICAgICAgWEZyZWVHQygoKCgoT2JqZWN0KSh3KSktPm9i
amVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdp
ZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5w
YXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5nYykpOwoKICAgICB9CgoKCgoKICAgIG1hc2sgPSAoMUw8PDUpIHwgKDFMPDw0KSB8ICgx
TDw8OCkgfCAoMUw8PDIpIHwgKDFMPDwzKTsKICAgIGR5bmFtaWMgPSAoMUw8PDE5KSB8ICgxTDw8
MTcpIHwgKDFMPDwxOCkgfAogICAgICAgICgxTDw8MikgfCAoMUw8PDMpOwogICAgZG9udGNhcmUg
PSAwOwoKICAgIHZhbHVlcy5saW5lX3N0eWxlID0gMDsKICAgIHZhbHVlcy5saW5lX3dpZHRoID0g
MDsKICAgIHZhbHVlcy5maWxsX3N0eWxlID0gMDsKCgoKCgoKICAgIG1hc2sgfD0gKDFMPDwxNCk7
CiAgICB2YWx1ZXMuZm9udCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udCkt
PmZpZDsKCiAgICB2YWx1ZXMuZm9yZWdyb3VuZCA9ICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSkt
PnByaW1pdGl2ZS5mb3JlZ3JvdW5kKTsKICAgIHZhbHVlcy5iYWNrZ3JvdW5kID0gKCgoV2lkZ2V0
KSh3KSktPmNvcmUuYmFja2dyb3VuZF9waXhlbCk7CiAgICB2YWx1ZXMuY2xpcF94X29yaWdpbiA9
IDA7CiAgICB2YWx1ZXMuY2xpcF95X29yaWdpbiA9IDA7CgogICAgICAgIGlmICghIHctPmNvcmUu
c2Vuc2l0aXZlKSB7CiAgICAgICAgICAgICAgICBTY3JlZW4gKnMgPSAoKCgoT2JqZWN0KSgoV2lk
Z2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAw
eDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3JlZW4gOiAoKE9iamVjdCkoKFdp
ZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuKTsKCiAgICAgICAgICAgICAgICBt
YXNrIHw9ICgxTDw8MTEpOwogICAgICAgICAgICAgICAgdmFsdWVzLmZpbGxfc3R5bGUgPSAyOwog
ICAgICAgICAgICAgICAgdmFsdWVzLnN0aXBwbGUgPSBYbUdldFBpeG1hcEJ5RGVwdGgocywgIjUw
X2ZvcmVncm91bmQiLCAxLCAwLCAxKTsKICAgICAgICB9CgoKCgoKICAgICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuZ2MpID0gWENyZWF0ZUdDKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0
KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVu
dC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRf
Y2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5j
b3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93KSwg
bWFzaywgJnZhbHVlcyk7CgogICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oYXZl
X2ludmVydGVkX2ltYWdlX2djKSA9IDA7Cn0KCgpzdGF0aWMgdm9pZApHQ0luaXRpYWxpemUoWG1U
ZXh0RmllbGRXaWRnZXQgdykKewogICAgWEdDVmFsdWVzIHZhbHVlczsKICAgIFh0R0NNYXNrIG1h
c2ssIGR5bmFtaWMsIGRvbnRjYXJlOwoKICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZ2MpID0gKCh2b2lkICopMCk7CiAgICBDaGFuZ2VEcmF3R0Modyk7CgoKCgoKICAgIHZhbHVl
cy5saW5lX3N0eWxlID0gMDsKICAgIHZhbHVlcy5saW5lX3dpZHRoID0gMDsKICAgIHZhbHVlcy5m
aWxsX3N0eWxlID0gMjsKICAgIHZhbHVlcy5mb3JlZ3JvdW5kID0gKCgoWG1QcmltaXRpdmVXaWRn
ZXQpKHcpKS0+cHJpbWl0aXZlLmZvcmVncm91bmQpOwogICAgdmFsdWVzLmJhY2tncm91bmQgPSAo
KChXaWRnZXQpKHcpKS0+Y29yZS5iYWNrZ3JvdW5kX3BpeGVsKTsKICAgIG1hc2sgPSAoMUw8PDUp
IHwgKDFMPDw0KSB8ICgxTDw8OCkgfAogICAgICAgICgxTDw8MikgfCAoMUw8PDMpOwogICAgZHlu
YW1pYyA9ICgxTDw8MTIpIHwgKDFMPDwxMykgfCAoMUw8PDExKTsKICAgIGRvbnRjYXJlID0gMDsK
CgoKCiAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmltYWdlX2djKSA9IFhDcmVh
dGVHQygoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xh
c3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6
ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgKCgo
KE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRl
ZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkodykpLT5v
YmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksIG1hc2ssICZ2YWx1ZXMpOwoKCgoKCgogICAgdmFs
dWVzLmxpbmVfc3R5bGUgPSAwOwogICAgdmFsdWVzLmxpbmVfd2lkdGggPSAwOwogICAgdmFsdWVz
LmZpbGxfc3R5bGUgPSAwOwogICAgdmFsdWVzLmZvcmVncm91bmQgPSAoKChXaWRnZXQpKHcpKS0+
Y29yZS5iYWNrZ3JvdW5kX3BpeGVsKTsKICAgIHZhbHVlcy5iYWNrZ3JvdW5kID0gKCgoWG1Qcmlt
aXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLmZvcmVncm91bmQpOwogICAgbWFzayA9ICgxTDw8
NSkgfCAoMUw8PDQpIHwgKDFMPDw4KSB8CiAgICAgICAgKDFMPDwyKSB8ICgxTDw8Myk7CgogICAg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zYXZlX2djKSA9IFh0R2V0R0MoKFdpZGdl
dCl3LCBtYXNrLCAmdmFsdWVzKTsKfQoKc3RhdGljIHZvaWQKR0NQaXhtYXAoWG1UZXh0RmllbGRX
aWRnZXQgdykKewogICAgc3RhdGljIGNoYXIgZG90c1tdID0KICAgIHsyLCAxLCAxfTsKICAgIEdD
IGdjOwogICAgaW50IHdpZHRoLCB3aWR0aF9lcmFzZSwgaGVpZ2h0OwogICAgRGlzcGxheSAqZGlz
cGxheTsKICAgIFhHQ1ZhbHVlcyB2YWx1ZXM7CiAgICBYdEdDTWFzayBtYXNrOwoKICAgIHZhbHVl
cy5saW5lX3N0eWxlID0gMDsKICAgIHZhbHVlcy5saW5lX3dpZHRoID0gMDsKICAgIHZhbHVlcy5m
aWxsX3N0eWxlID0gMDsKICAgIHZhbHVlcy5mb3JlZ3JvdW5kID0gMDsKICAgIHZhbHVlcy5iYWNr
Z3JvdW5kID0gMDsKCiAgICBkaXNwbGF5ID0gKCgoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVj
dC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdl
dCkoKFdpZGdldCl3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQp
dykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSk7CiAgICB3aWR0aCA9IDU7
CiAgICB3aWR0aF9lcmFzZSA9IDIgKiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZv
bnQpLT5tYXhfYm91bmRzLndpZHRoOwogICAgaGVpZ2h0ID0gKCgoWG1UZXh0RmllbGRQYXJ0TGVz
c3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lv
bikpLT5Gb250SGVpZ2h0KTsKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5jdXJzb3IpKQogICAgewogICAgICAgIFhGcmVlUGl4bWFwKCgoKChPYmplY3QpKChXaWRnZXQp
dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQp
ID8gKChXaWRnZXQpKChXaWRnZXQpdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0
KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcikpOwogICAgfQoKICAgICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yKSA9IChQaXhtYXApKCh2b2lkICopMCk7CiAg
ICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdGlwcGxlX3RpbGUpKQogICAg
ewogICAgICAgIFhGcmVlUGl4bWFwKCgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lk
Z2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChX
aWRnZXQpdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+
b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LnN0aXBwbGVfdGlsZSkpOwogICAgfQoKICAgICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQuc3RpcHBsZV90aWxlKSA9IChQaXhtYXApKCh2b2lkICopMCk7CiAgICBp
ZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5pYmVhbV9vZmYpKQogICAgewogICAg
ICAgIFhGcmVlUGl4bWFwKCgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lkZ2V0X2Ns
YXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChXaWRnZXQp
dykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0
LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LmliZWFtX29mZikpOwogICAgfQoKICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuaWJlYW1fb2ZmKSA9IChQaXhtYXApKCh2b2lkICopMCk7CiAgICAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LnJlZnJlc2hfaWJlYW1fb2ZmKSA9IDA7CgogICAgaWYgKGhlaWdo
dCA+IDApIHsKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcikg
PQogICAgICAgICAgICBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y
ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29y
ZS5zY3JlZW4gOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2Ny
ZWVuKSktPnJvb3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIDEp
OwoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0aXBwbGVfdGlsZSkg
PQogICAgICAgICAgICBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y
ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29y
ZS5zY3JlZW4gOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2Ny
ZWVuKSktPnJvb3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIDEp
OwoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmliZWFtX29mZikgPQog
ICAgICAgICAgICBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9j
bGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5z
Y3JlZW4gOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVu
KSktPnJvb3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoX2VyYXNlLCBoZWlnaHQs
IHctPmNvcmUuZGVwdGgpOwoKICAgICAgICB2YWx1ZXMubGluZV9zdHlsZSA9IDA7CiAgICAgICAg
dmFsdWVzLmxpbmVfd2lkdGggPSAwOwogICAgICAgIHZhbHVlcy5maWxsX3N0eWxlID0gMDsKICAg
ICAgICB2YWx1ZXMuZm9yZWdyb3VuZCA9IDA7CiAgICAgICAgdmFsdWVzLmJhY2tncm91bmQgPSAw
OwogICAgICAgIG1hc2sgPSAoMUw8PDUpIHwgKDFMPDw0KSB8ICgxTDw8OCkgfAogICAgICAgICAg
ICAoMUw8PDIpIHwgKDFMPDwzKTsKICAgICAgICBnYyA9IFhDcmVhdGVHQyhkaXNwbGF5LCAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvciksIG1hc2ssICZ2YWx1ZXMpOwoKICAg
ICAgICBYRmlsbFJlY3RhbmdsZShkaXNwbGF5LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LmN1cnNvciksIGdjLAogICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHdpZHRoLCBoZWln
aHQpOwogICAgICAgIFhGaWxsUmVjdGFuZ2xlKGRpc3BsYXksICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuc3RpcHBsZV90aWxlKSwgZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgMCwg
MCwgd2lkdGgsIGhlaWdodCk7CgogICAgICAgIFhTZXRGb3JlZ3JvdW5kKGRpc3BsYXksIGdjLCAx
KTsKICAgICAgICBYRHJhd0xpbmUoZGlzcGxheSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5jdXJzb3IpLCBnYywKICAgICAgICAgICAgICAgICAgMiwgMSwgMiwgaGVpZ2h0IC0gMik7
CiAgICAgICAgWERyYXdMaW5lKGRpc3BsYXksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuY3Vyc29yKSwgZ2MsCiAgICAgICAgICAgICAgICAgIDAsIDAsIDQsIDApOwogICAgICAgIFhE
cmF3TGluZShkaXNwbGF5LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvciks
IGdjLAogICAgICAgICAgICAgICAgICAwLCBoZWlnaHQgLSAxLCA0LCBoZWlnaHQgLSAxKTsKCiAg
ICAgICAgWFNldExpbmVBdHRyaWJ1dGVzKGRpc3BsYXksIGdjLCAwLCAxLCAyLCAxKTsKICAgICAg
ICBYU2V0RGFzaGVzKGRpc3BsYXksIGdjLCAwLCAmZG90c1sxXSwgKGludClkb3RzWzBdKTsKICAg
ICAgICBYRHJhd0xpbmUoZGlzcGxheSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5z
dGlwcGxlX3RpbGUpLCBnYywKICAgICAgICAgICAgICAgICAgMiwgMSwgMiwgaGVpZ2h0IC0gMik7
CiAgICAgICAgWERyYXdMaW5lKGRpc3BsYXksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuc3RpcHBsZV90aWxlKSwgZ2MsCiAgICAgICAgICAgICAgICAgIDEsIDAsIDMsIDApOwogICAg
ICAgIFhEcmF3TGluZShkaXNwbGF5LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0
aXBwbGVfdGlsZSksIGdjLAogICAgICAgICAgICAgICAgICAxLCBoZWlnaHQgLSAxLCAzLCBoZWln
aHQgLSAxKTsKCiAgICAgICAgWEZyZWVHQyhkaXNwbGF5LCBnYyk7CiAgICB9Cn0KCnN0YXRpYyB2
b2lkCkdDQ2xpcChYbVRleHRGaWVsZFdpZGdldCB3KQp7CiAgICAgICAgWFJlY3RhbmdsZSBjbGlw
OwogICAgICAgIERpbWVuc2lvbiBidywgYmg7CgogICAgICAgIGJ3ID0gKCgoWG1QcmltaXRpdmVX
aWRnZXQpKHcpKS0+cHJpbWl0aXZlLnNoYWRvd190aGlja25lc3MpICsgKCgoWG1QcmltaXRpdmVX
aWRnZXQpKHcpKS0+cHJpbWl0aXZlLmhpZ2hsaWdodF90aGlja25lc3MpCiAgICAgICAgICAgICAg
ICArICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX3dpZHRoKTsKICAgICAg
ICBiaCA9ICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tu
ZXNzKSArICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5oaWdobGlnaHRfdGhp
Y2tuZXNzKSArCiAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
Lm1hcmdpbl9oZWlnaHQpOwogICAgICAgIGNsaXAueCA9IDA7CiAgICAgICAgY2xpcC55ID0gMDsK
ICAgICAgICBjbGlwLndpZHRoID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJn
aW5fYm90dG9tKTsKICAgICAgICBjbGlwLmhlaWdodCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQubWFyZ2luX3RvcCk7CgogICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0v
VGV4dEYuYyIsIChXaWRnZXQpdywgIkdDQ2xpcCglZCwlZClcbiIsICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQubWFyZ2luX2JvdHRvbSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQubWFyZ2luX3RvcCkpOwogICAgICAgIHsKCiAgICAgICAgICAgICAgICBYU2V0Q2xpcFJl
Y3RhbmdsZXMoKCgoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNv
cmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNv
cmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3QucGFyZW50
LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
Z2MpLAogICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhE
cmF3KSwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdyksICZjbGlwLCAxLCAwKTsKICAg
ICAgICB9CgogICAgICAgIEdDUGl4bWFwKHcpOwogICAgICAgIEN1cnNvclNldCh3LCAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lmhhc19mb2N1cykpOwp9CgpzdGF0aWMgdm9pZApTaXpl
UmVjYWxjKFhtVGV4dEZpZWxkV2lkZ2V0IHcpCnsKICAgICAgICBEaW1lbnNpb24gYncsIGJoOwoK
ICAgICAgICBidyA9ICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5zaGFkb3df
dGhpY2tuZXNzKSArICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5oaWdobGln
aHRfdGhpY2tuZXNzKQogICAgICAgICAgICAgICAgKyAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0Lm1hcmdpbl93aWR0aCk7CiAgICAgICAgYmggPSAoKChYbVByaW1pdGl2ZVdpZGdldCko
dykpLT5wcmltaXRpdmUuc2hhZG93X3RoaWNrbmVzcykgKyAoKChYbVByaW1pdGl2ZVdpZGdldCko
dykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcykgKwogICAgICAgICAgICAgICAgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5faGVpZ2h0KTsKCiAgICAgICAgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fYm90dG9tKSA9ICgoKFdpZGdldCko
dykpLT5jb3JlLndpZHRoKSAtIDIgKiBidzsKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNz
dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9u
KSktPlhEcmF3KSA9IGJ3OwogICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNp
b24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WURyYXcp
ID0gYmg7CgoKCgoKCgogICAgICAgIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkUGFy
dExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRl
bnNpb24pKS0+WU9mZnNldCkgPSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICop
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllEcmF3KSArICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udC0+bWF4X2JvdW5kcy5hc2NlbnQpOwog
ICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fdG9w
KSA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+Rm9udEhlaWdodCk7CiAgICAgICAgfQoKICAg
ICAgICBpZiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdykgKyAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl90b3ApID4gKCgoV2lkZ2V0KSh3KSktPmNvcmUuaGVp
Z2h0KQogICAgICAgICAgICAgICAgICAgICAgICAtICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSkt
PnByaW1pdGl2ZS5oaWdobGlnaHRfdGhpY2tuZXNzKSAtICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3
KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tuZXNzKSkgewogICAgICAgICAgICAgICAgKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fdG9wKSA9ICgoKFdpZGdldCkodykpLT5j
b3JlLmhlaWdodCkgLSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllEcmF3KSAtCiAgICAgICAg
ICAgICAgICAgICAgICAgICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5oaWdo
bGlnaHRfdGhpY2tuZXNzKSAtICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5z
aGFkb3dfdGhpY2tuZXNzKTsKICAgICAgICB9CiAgICAgICAgewoKCgoKCiAgICAgICAgICAgICAg
ICBpZiAoKGludClfWG1UZXh0Rl9Gb250TWF4V2lkdGgoKFdpZGdldCl3KSkKICAgICAgICAgICAg
ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jb2x1bW5zKSA9ICgo
KChXaWRnZXQpKHcpKS0+Y29yZS53aWR0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtIDIgKiAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuc2hhZG93X3RoaWNr
bmVzcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDIgKiAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl93aWR0aCkpIC8gKGludClfWG1UZXh0Rl9Gb250TWF4
V2lkdGgoKFdpZGdldCl3KTsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuYXZlcmFnZV9jaGFyX3dpZHRoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jb2x1bW5zKSA9ICgoKChXaWRn
ZXQpKHcpKS0+Y29yZS53aWR0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDIg
KiAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuc2hhZG93X3RoaWNrbmVzcykK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDIgKiAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0Lm1hcmdpbl93aWR0aCkpIC8gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5hdmVyYWdlX2NoYXJfd2lkdGgpOwoKICAgICAgICB9CgogICAgICAgIF9MdERlYnVnKCIu
Li8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIlNpemVSZWNhbGMgc2l6ZSAlZCAl
ZCAtPiBvZmZzZXQgJWQsJWQgdmlldyBkaW0gJWQgJWQgY29scyAlZFxuIiwgKCgoV2lkZ2V0KSh3
KSktPmNvcmUud2lkdGgpLCAoKChXaWRnZXQpKHcpKS0+Y29yZS5oZWlnaHQpLCAoKChYbVRleHRG
aWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5z
aW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllPZmZz
ZXQpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pLCAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl90b3ApLCAoKChYbVRleHRGaWVsZFdp
ZGdldCkodykpLT50ZXh0LmNvbHVtbnMpKTsKCgoKCgp9CgpzdGF0aWMgdm9pZApUZXh0Rl9Jbml0
aWFsaXNlSGlnaGxpZ2h0KFdpZGdldCB3KQp7CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3QgPSAoX1htSGlnaGxpZ2h0UmVjICopWHRDYWxsb2Mo
OCwgc2l6ZW9mKF9YbUhpZ2hsaWdodFJlYykpOwogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5tYXhpbXVtID0gODsKICAgICAgICAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubnVtYmVyID0gMjsKICAgICAgICAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFswXS5wb3NpdGlvbiA9IDA7
CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3Rb
MF0ubW9kZSA9IFhtSElHSExJR0hUX05PUk1BTDsKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFsxXS5wb3NpdGlvbiA9IDIxNDc0ODM2NDc7CiAg
ICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbMV0u
bW9kZSA9IFhtSElHSExJR0hUX05PUk1BTDsKCiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQucHJpbV9wb3NfcmlnaHQpID0gLTE7Cn0KCgoKCgpzdGF0aWMgdm9pZApjbGFzc19pbml0aWFs
aXplKHZvaWQpCnsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoKHZv
aWQgKikwKSwgIlhtVGV4dEZpZWxkIGNsYXNzX2luaXRpYWxpemVcbiIpOwogICAgdGZfZXZudDJf
dHJhbnM9WHRQYXJzZVRyYW5zbGF0aW9uVGFibGUoX1htVGV4dEZfRXZlbnRCaW5kaW5nczIpOwog
ICAgdGZfZXZudDNfdHJhbnM9WHRQYXJzZVRyYW5zbGF0aW9uVGFibGUoX1htVGV4dEZfRXZlbnRC
aW5kaW5nczMpOwp9CgoKc3RhdGljIHZvaWQKY2xhc3NfcGFydF9pbml0aWFsaXplKFdpZGdldENs
YXNzIHdpZGdldF9jbGFzcykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5j
IiwgKCh2b2lkICopMCksICJYbVRleHRGaWVsZCBjbGFzc19wYXJ0X2luaXRpYWxpemVcbiIpOwog
ICAgeyBpZiAoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNz
KSh3aWRnZXRfY2xhc3MpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNs
YXNzRXh0KSgoKFdpZGdldENsYXNzKSh3aWRnZXRfY2xhc3MpKS0+Y29yZV9jbGFzcy5leHRlbnNp
b24pKSktPnJlY29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYo
KChXaWRnZXRDbGFzcykod2lkZ2V0X2NsYXNzKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDog
KChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xh
c3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKHdpZGdldF9jbGFzcykp
LT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikp
ICgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3NbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0gfD0gKDEg
PDwgKChYbVRFWFRfRklFTERfQklUKSAmIDB4MDcpKSkgOyB9Owp9CgoKc3RhdGljIHZvaWQKaW5p
dGlhbGl6ZShXaWRnZXQgcmVxdWVzdCwgV2lkZ2V0IHRuZXcsIEFyZ0xpc3QgYXJncywgQ2FyZGlu
YWwgKm51bSkKewogICAgICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRn
ZXQpdG5ldzsKICAgICAgICBBdG9tIGltcG9ydF90YXJnZXRbM107CiAgICAgICAgQXJnIGRzX2Fy
Z3NbNl07CiAgICAgICAgaW50IG4gPSAwOwogICAgICAgIGNoYXIgKnRlbXA7CgogICAgICAgIF9M
dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIHRuZXcsICJpbml0aWFsaXplIDogJWkg
YXJnc1xuIiAiXHRyZXF1ZXN0IFggJTVpIFkgJTVpIFcgJTVpIEggJTVpXG4iICJcdCAgbmV3X3cg
WCAlNWkgWSAlNWkgVyAlNWkgSCAlNWlcbiIsICpudW0sICgoKFdpZGdldCkocmVxdWVzdCkpLT5j
b3JlLngpLCAoKChXaWRnZXQpKHJlcXVlc3QpKS0+Y29yZS55KSwgKCgoV2lkZ2V0KShyZXF1ZXN0
KSktPmNvcmUud2lkdGgpLCAoKChXaWRnZXQpKHJlcXVlc3QpKS0+Y29yZS5oZWlnaHQpLCAoKChX
aWRnZXQpKHRuZXcpKS0+Y29yZS54KSwgKCgoV2lkZ2V0KSh0bmV3KSktPmNvcmUueSksICgoKFdp
ZGdldCkodG5ldykpLT5jb3JlLndpZHRoKSwgKCgoV2lkZ2V0KSh0bmV3KSktPmNvcmUuaGVpZ2h0
KSk7CiAgICAgICAgX0x0RGVidWdQcmludEFyZ0xpc3QoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5j
IiwgdG5ldywgYXJncywgKm51bSwgMCk7CgoKCiAgICAgICAgWHRBdWdtZW50VHJhbnNsYXRpb25z
KChXaWRnZXQpdyx0Zl9ldm50Ml90cmFucyk7CiAgICAgICAgWHRBdWdtZW50VHJhbnNsYXRpb25z
KChXaWRnZXQpdyx0Zl9ldm50M190cmFucyk7CgoKICAgICAgICB3LT50ZXh0LmV4dGVuc2lvbiA9
CiAgICAgICAgICAgICAgICAoWHRQb2ludGVyKVh0TWFsbG9jKHNpemVvZihYbVRleHRGaWVsZFBh
cnRMZXNzdGlmRXh0ZW5zaW9uKSk7CgoKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlm
RXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSkt
PlNlbGVjdGlvblRleHQpID0gKCh2b2lkICopMCk7CiAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0
TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVu
c2lvbikpLT5UZXh0V2lkdGgpID0gKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq
KSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5PbGRUZXh0V2lk
dGgpID0gMDsKCgogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZv
bnRfbGlzdCkpIHsKICAgICAgICAgICAgICAgIFhtRm9udExpc3QgZmwgPSAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCk7CiAgICAgICAgICAgICAgICAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkgPSBYbUZvbnRMaXN0Q29weSgoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCkpOwogICAgICAgIH0KICAgICAgICBG
b250SW5pdGlhbGl6ZSh3KTsKCiAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQudmFsdWUpKQogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5zdHJpbmdfbGVuZ3RoKSA9IHN0cmxlbigoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LnZhbHVlKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSA9IDA7CgogICAgICAgICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuc2l6ZV9hbGxvY2QpID0gKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSArIDI1NjsKCiAgICAgICAgdGVtcCA9IChjaGFyICop
WHRNYWxsb2MoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zaXplX2FsbG9jZCkpOwog
ICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKSkKICAgICAg
ICAgICAgICAgIHN0cmNweSh0ZW1wLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZh
bHVlKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgc3RyY3B5KHRlbXAsICIiKTsKICAg
ICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKSA9IHRlbXA7CgogICAg
ICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+VGV4dFdpZHRoKSA9IChpbnQpX1htVGV4dEZf
Rm9udFRleHRXaWR0aCgoV2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
dmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKTsK
CgogICAgICAgIGlmICgoKChXaWRnZXQpKHJlcXVlc3QpKS0+Y29yZS53aWR0aCkgPT0gKERpbWVu
c2lvbikwKSB7CiAgICAgICAgICAgICAgICB7CgoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAg
ICgoKFdpZGdldCkodykpLT5jb3JlLndpZHRoKSA9ICgyICogKCgoWG1QcmltaXRpdmVXaWRnZXQp
KHcpKS0+cHJpbWl0aXZlLnNoYWRvd190aGlja25lc3MpICsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAyICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLmhpZ2hs
aWdodF90aGlja25lc3MpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICogKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fd2lkdGgpICsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmNvbHVt
bnMpICogKGludClfWG1UZXh0Rl9Gb250TWF4V2lkdGgoKFdpZGdldCl3KSk7CgogICAgICAgICAg
ICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB7CgoKCgoKCiAgICAgICAg
ICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY29sdW1ucykg
PSAoKCgoV2lkZ2V0KSh3KSktPmNvcmUud2lkdGgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLSAyICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLnNoYWRvd190
aGlja25lc3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAyICogKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fd2lkdGgpKSAvCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGludClfWG1UZXh0Rl9Gb250TWF4V2lkdGgoKFdpZGdldCl3KTsKCiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoKCgoV2lkZ2V0KShyZXF1ZXN0
KSktPmNvcmUuaGVpZ2h0KSA9PSAoRGltZW5zaW9uKTApIHsKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgKCgoV2lkZ2V0KSh3KSktPmNvcmUuaGVpZ2h0KSA9ICgyICog
KCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLnNoYWRvd190aGlja25lc3MpICsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICogKCgoWG1QcmltaXRpdmVXaWRnZXQp
KHcpKS0+cHJpbWl0aXZlLmhpZ2hsaWdodF90aGlja25lc3MpICsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAyICogKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5f
aGVpZ2h0KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQ
YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4
dGVuc2lvbikpLT5Gb250SGVpZ2h0KSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAg
ICAgICBTaXplUmVjYWxjKHcpOwoKCiAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA+IDApIHsKICAgICAgICAgICAgICAgIGlmICgoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPiAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA9
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA9IDA7CiAgICAgICAgfQoKICAgICAg
ICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPk9sZEN1cnNvclgpID0gLTE7CiAgICAgICAgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSA9ICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpID0gLTE7CgogICAgICAgICgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQubGlzdD0oX1htSGlnaGxpZ2h0UmVj
KilYdE1hbGxvYyhzaXplb2YoX1htSGlnaGxpZ2h0UmVjKSk7CiAgICAgICAgKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQubGlzdC0+bW9kZSkgPSBYbUhJR0hMSUdIVF9O
T1JNQUw7CiAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5PbGRIaWdobGlnaHRTdGFy
dCkgPSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPk9sZEhpZ2hsaWdodEVuZCkgPSAtMTsKICAg
ICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpID0gKCgoWG1UZXh0RmllbGRQ
YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4
dGVuc2lvbikpLT5PbGRYT2Zmc2V0KSA9IDA7CgoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LnRpbWVyX2lkKSA9IChYdEludGVydmFsSWQpMDsKICAgICAgICAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnNlbGVjdF9pZCkgPSAoWHRJbnRlcnZhbElkKTA7Cgog
ICAgICAgIHctPnRleHQubGFzdF90aW1lID0gKFRpbWUpMDsKCiAgICAgICAgdy0+dGV4dC5zYXJy
YXlfaW5kZXggPSAwOwoKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9u
ICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkVjaG8pID0g
MTsKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkFsbG93U2VsZWN0aW9uKSA9IDE7
CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oYXNfZm9jdXMpID0gMDsK
CgogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yKSA9IChQaXht
YXApKCh2b2lkICopMCk7CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5z
dGlwcGxlX3RpbGUpID0gKFBpeG1hcCkoKHZvaWQgKikwKTsKICAgICAgICAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmliZWFtX29mZikgPSAoUGl4bWFwKSgodm9pZCAqKTApOwoKCiAg
ICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5nYykgPSAoKHZvaWQgKikwKTsK
CgogICAgICAgIGltcG9ydF90YXJnZXRbMF0gPSBYbUludGVybkF0b20oKCgoKE9iamVjdCkodG5l
dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQp
ID8gKChXaWRnZXQpKHRuZXcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodG5l
dykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICJDT01QT1VORF9URVhU
IiwgMCk7CiAgICAgICAgaW1wb3J0X3RhcmdldFsxXSA9IFhtSW50ZXJuQXRvbSgoKCgoT2JqZWN0
KSh0bmV3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg
MHgwNCkgPyAoKFdpZGdldCkodG5ldykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0
KSh0bmV3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgIlRFWFQiLCAw
KTsKICAgICAgICBpbXBvcnRfdGFyZ2V0WzJdID0gKChBdG9tKSAzMSk7CiAgICAgICAgKCh2b2lk
KSggKGRzX2FyZ3Nbbl0pLm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbNzIxMF0pKSwgKGRz
X2FyZ3Nbbl0pLnZhbHVlID0gKFh0QXJnVmFsKShpbXBvcnRfdGFyZ2V0KSApKTsgbisrOwogICAg
ICAgICgodm9pZCkoIChkc19hcmdzW25dKS5uYW1lID0gKCgoY2hhciAqKSZfWG1TdHJpbmdzWzg0
NzldKSksIChkc19hcmdzW25dKS52YWx1ZSA9IChYdEFyZ1ZhbCkoMykgKSk7IG4rKzsKICAgICAg
ICAoKHZvaWQpKCAoZHNfYXJnc1tuXSkubmFtZSA9ICgoKGNoYXIgKikmX1htU3RyaW5nc1s2NDg4
XSkpLCAoZHNfYXJnc1tuXSkudmFsdWUgPSAoWHRBcmdWYWwpKCgxTCA8PCAxKXwoMUwgPDwgMCkp
ICkpOyBuKys7CiAgICAgICAgKCh2b2lkKSggKGRzX2FyZ3Nbbl0pLm5hbWUgPSAoKChjaGFyICop
Jl9YbVN0cmluZ3NbNjM4Ml0pKSwgKGRzX2FyZ3Nbbl0pLnZhbHVlID0gKFh0QXJnVmFsKShwcm9j
ZXNzX2Ryb3ApICkpOyBuKys7CgogICAgICAgIFhtRHJvcFNpdGVSZWdpc3Rlcih0bmV3LCBkc19h
cmdzLCBuKTsKCiAgICAgICAgVGV4dEZfSW5pdGlhbGlzZUhpZ2hsaWdodCh0bmV3KTsKICAgICAg
ICB3LT50ZXh0Lm1heF9jaGFyX3NpemUgPSAxOwp9CgoKc3RhdGljIHZvaWQKcmVhbGl6ZShXaWRn
ZXQgYXcsIFh0VmFsdWVNYXNrICp2YWx1ZV9tYXNrLCBYU2V0V2luZG93QXR0cmlidXRlcyAqYXR0
cmlidXRlcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClh
dzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJy
ZWFsaXplXG4iKTsKCgogICAgKCooJnhtUHJpbWl0aXZlQ2xhc3NSZWMpLT5jb3JlX2NsYXNzLnJl
YWxpemUpIChhdywgdmFsdWVfbWFzaywgYXR0cmlidXRlcyk7CgoKICAgIEdDSW5pdGlhbGl6ZSh3
KTsKICAgIEdDQ2xpcCh3KTsKICAgIEN1cnNvckRyYXcodyk7CgogICAgX1htVGV4dEZpZWxkU2V0
RWRpdGFibGUoYXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZWRpdGFibGUpKTsK
fQoKCnN0YXRpYyB2b2lkCmRlc3Ryb3koV2lkZ2V0IGF3KQp7CiAgICBYbVRleHRGaWVsZFdpZGdl
dCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIv
WG0vVGV4dEYuYyIsIGF3LCAiZGVzdHJveSIpOwoKCgoKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRX
aWRnZXQpKGF3KSktPnRleHQuc2VsZWN0X2lkKSkKICAgIHsKICAgICAgICBYdFJlbW92ZVRpbWVP
dXQoKCgoWG1UZXh0RmllbGRXaWRnZXQpKGF3KSktPnRleHQuc2VsZWN0X2lkKSk7CiAgICAgICAg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKGF3KSktPnRleHQuc2VsZWN0X2lkKSA9IDA7CiAgICB9Cgog
ICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KShhdykpLT50ZXh0LnRpbWVyX2lkKSkKICAgIHsK
ICAgICAgICBYdFJlbW92ZVRpbWVPdXQoKCgoWG1UZXh0RmllbGRXaWRnZXQpKGF3KSktPnRleHQu
dGltZXJfaWQpKTsKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkoYXcpKS0+dGV4dC50aW1l
cl9pZCkgPSAwOwogICAgfQogICAgaWYoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns
YXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29y
ZS53aW5kb3cgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpIHsK
ICAgICAgIFhGcmVlR0MoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3Jl
X2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4t
PmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlz
cGxheSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZ2MpKTsKICAgICAgIFhGcmVl
R0MoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNz
X2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAo
KE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaW1hZ2VfZ2MpKTsKICAgIH0KCiAgICBYdFJlbGVh
c2VHQygoV2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc2F2ZV9nYykp
OwoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRsaXN0X2NyZWF0
ZWQpKSB7CiAgICAgICAgWG1Gb250TGlzdEZyZWUoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5mb250X2xpc3QpKTsKICAgIH0KCiAgICBpZiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5TZWxlY3Rpb25UZXh0KSkgewogICAgICAgIFh0RnJlZSgoKChYbVRleHRGaWVsZFBhcnRMZXNz
dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9u
KSktPlNlbGVjdGlvblRleHQpKTsKICAgIH0KCiAgICBYdEZyZWUoKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC52YWx1ZSkpOwoKCgoKCiAgICBYdEZyZWUoKGNoYXIgKil3LT50ZXh0LmV4
dGVuc2lvbik7CiAgICBYdFVuaW5zdGFsbFRyYW5zbGF0aW9ucyhhdyk7CiAgICBYdEZyZWUoKGNo
YXIgKikoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0Lmxpc3QpOwoKCgoK
fQoKCnN0YXRpYyB2b2lkCmV4cG9zZShXaWRnZXQgYXcsIFhFdmVudCAqZXZlbnQsIFJlZ2lvbiBy
ZWdpb24pCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7
CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgYXcsICJleHBvc2VcbiIp
OwoKICAgIGlmICghKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9j
bGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLndpbmRvdyA6
ICgoT2JqZWN0KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpIHsKICAgICAgICBy
ZXR1cm47CiAgICB9CgoKCgogICAgaWYgKGV2ZW50LT54ZXhwb3NlLmNvdW50ICE9IDApIHJldHVy
bjsKCgogICAgQ3Vyc29yRXJhc2Uodyk7CiAgICBEcmF3QWxsKHcpOwoKICAgIF9YbURyYXdTaGFk
b3dzKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFz
c19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDog
KChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLAogICAg
ICAgICAgICAgICAgICAgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3Jl
X2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cg
OiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAgICAgICAgICAg
ICAgICAgICAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUudG9wX3NoYWRvd19H
QyksCiAgICAgICAgICAgICAgICAgICAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRp
dmUuYm90dG9tX3NoYWRvd19HQyksCiAgICAgICAgICAgICAgICAgICAoKChYbVByaW1pdGl2ZVdp
ZGdldCkodykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcyksICgoKFhtUHJpbWl0aXZl
V2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5oaWdobGlnaHRfdGhpY2tuZXNzKSwKICAgICAgICAgICAg
ICAgICAgICgoKFdpZGdldCkodykpLT5jb3JlLndpZHRoKSAtIDIgKiAoKChYbVByaW1pdGl2ZVdp
ZGdldCkodykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcyksCiAgICAgICAgICAgICAg
ICAgICAoKChXaWRnZXQpKHcpKS0+Y29yZS5oZWlnaHQpIC0gMiAqICgoKFhtUHJpbWl0aXZlV2lk
Z2V0KSh3KSktPnByaW1pdGl2ZS5oaWdobGlnaHRfdGhpY2tuZXNzKSwKICAgICAgICAgICAgICAg
ICAgICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tuZXNz
KSwKICAgICAgICAgICAgICAgICAgIFhtU0hBRE9XX0lOKTsKICAgIGlmICgoKChYbVByaW1pdGl2
ZVdpZGdldCkodykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0ZWQpKSB7CiAgICAgICAgKCooKChYbVBy
aW1pdGl2ZUNsYXNzUmVjICopKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkp
LT5wcmltaXRpdmVfY2xhc3MuYm9yZGVyX2hpZ2hsaWdodCkpIChhdyk7CiAgICB9IGVsc2Ugewog
ICAgICAgICgqKCgoWG1QcmltaXRpdmVDbGFzc1JlYyAqKSgoKChPYmplY3QpKHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcykpKS0+cHJpbWl0aXZlX2NsYXNzLmJvcmRlcl91bmhpZ2hsaWdodCkpIChh
dyk7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApyZXNpemUoV2lkZ2V0IGF3KQp7CiAgICBYbVRleHRG
aWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgIF9MdERlYnVnKCIuLi8u
Li8uLi9saWIvWG0vVGV4dEYuYyIsIGF3LCAicmVzaXplID0+IHdpZCAlZCBodCAlZFxuIiwgKCgo
V2lkZ2V0KShhdykpLT5jb3JlLndpZHRoKSwgKCgoV2lkZ2V0KShhdykpLT5jb3JlLmhlaWdodCkp
OwoKCiAgICBTaXplUmVjYWxjKHcpOwoKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5nYykpIHsKICAgICAgICBHQ0NsaXAodyk7CiAgICB9CgogICAgaWYgKCgoKChPYmpl
Y3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg
MHgwNCkgPyAoKFdpZGdldCkoYXcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkoYXcpKS0+b2Jq
ZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpKSB7CiAgICAgICAgTWFzc2l2ZUNoYW5nZURyYXcodyk7
CiAgICB9Cn0KCgpzdGF0aWMgQm9vbGVhbgpzZXRfdmFsdWVzKFdpZGdldCBjdXJyZW50LCBXaWRn
ZXQgcmVxdWVzdCwgV2lkZ2V0IHJlcGx5LAogICAgICAgICAgIEFyZ0xpc3QgYXJncywgQ2FyZGlu
YWwgKm5hcmdzKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0
KWN1cnJlbnQ7CiAgICBYbVRleHRGaWVsZFdpZGdldCBuZXdfdyA9IChYbVRleHRGaWVsZFdpZGdl
dClyZXBseTsKICAgIEJvb2xlYW4gcmVkcmF3ID0gMDsKICAgIGludCBhdmVfd2lkdGg7CgogICAg
X0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgcmVwbHksICJzZXRfdmFsdWVzOiAl
aSBhcmdzXG4iICJcdCAgICBvbGQgWCAlNWkgWSAlNWkgVyAlNWkgSCAlNWlcbiIgIlx0cmVxdWVz
dCBYICU1aSBZICU1aSBXICU1aSBIICU1aVxuIiAiXHQgIG5ld193IFggJTVpIFkgJTVpIFcgJTVp
IEggJTVpXG4iLCAqbmFyZ3MsICgoKFdpZGdldCkoY3VycmVudCkpLT5jb3JlLngpLCAoKChXaWRn
ZXQpKGN1cnJlbnQpKS0+Y29yZS55KSwgKCgoV2lkZ2V0KShjdXJyZW50KSktPmNvcmUud2lkdGgp
LCAoKChXaWRnZXQpKGN1cnJlbnQpKS0+Y29yZS5oZWlnaHQpLCAoKChXaWRnZXQpKHJlcXVlc3Qp
KS0+Y29yZS54KSwgKCgoV2lkZ2V0KShyZXF1ZXN0KSktPmNvcmUueSksICgoKFdpZGdldCkocmVx
dWVzdCkpLT5jb3JlLndpZHRoKSwgKCgoV2lkZ2V0KShyZXF1ZXN0KSktPmNvcmUuaGVpZ2h0KSwg
KCgoV2lkZ2V0KShyZXBseSkpLT5jb3JlLngpLCAoKChXaWRnZXQpKHJlcGx5KSktPmNvcmUueSks
ICgoKFdpZGdldCkocmVwbHkpKS0+Y29yZS53aWR0aCksICgoKFdpZGdldCkocmVwbHkpKS0+Y29y
ZS5oZWlnaHQpKTsKICAgIF9MdERlYnVnUHJpbnRBcmdMaXN0KCIuLi8uLi8uLi9saWIvWG0vVGV4
dEYuYyIsIHJlcGx5LCBhcmdzLCAqbmFyZ3MsIDApOwoKICAgICAgICBpZiAobmV3X3ctPmNvcmUu
c2Vuc2l0aXZlICE9IHctPmNvcmUuc2Vuc2l0aXZlKSB7CiAgICAgICAgICAgICAgICBYR0NWYWx1
ZXMgdjsKICAgICAgICAgICAgICAgIGludCBtOwoKICAgICAgICAgICAgICAgIGlmICghIG5ld193
LT5jb3JlLnNlbnNpdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICBtID0gKDFMPDw4KSB8
ICgxTDw8MTEpOwogICAgICAgICAgICAgICAgICAgICAgICB2LmZpbGxfc3R5bGUgPSAyOwogICAg
ICAgICAgICAgICAgICAgICAgICB2LnN0aXBwbGUgPSBYbUdldFBpeG1hcEJ5RGVwdGgoKCgoKE9i
amVjdCkobmV3X3cpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0
ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShuZXdfdykpLT5jb3JlLnNjcmVlbiA6ICgoT2JqZWN0KShu
ZXdfdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbiksICI1MF9mb3JlZ3JvdW5kIiwgMSwg
MCwgMSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBt
ID0gKDFMPDw4KTsKICAgICAgICAgICAgICAgICAgICAgICAgdi5maWxsX3N0eWxlID0gMDsKICAg
ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoKCgoKE9iamVjdCkobmV3X3cpKS0+
b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgo
V2lkZ2V0KShuZXdfdykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KShuZXdfdykpLT5vYmplY3Qu
cGFyZW50LT5jb3JlLndpbmRvdykpCiAgICAgICAgICAgICAgICAgICAgICAgIFhDaGFuZ2VHQygo
KCgoT2JqZWN0KShuZXdfdykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNz
X2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKG5ld193KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5
IDogKChPYmplY3QpKG5ld193KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5
KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQuZ2MpLCBtLCAmdik7CiAgICAg
ICAgICAgICAgICByZWRyYXcgPSAxOwogICAgICAgIH0KCgoKCgogICAgICAgIGlmICgoKCgoT2Jq
ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg
MHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVj
dC5wYXJlbnQtPmNvcmUud2luZG93KSAmJiAoKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJp
bWl0aXZlLmZvcmVncm91bmQpICE9ICgoKFhtUHJpbWl0aXZlV2lkZ2V0KShuZXdfdykpLT5wcmlt
aXRpdmUuZm9yZWdyb3VuZCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFdpZGdl
dCkodykpLT5jb3JlLmJhY2tncm91bmRfcGl4ZWwpICE9ICgoKFdpZGdldCkobmV3X3cpKS0+Y29y
ZS5iYWNrZ3JvdW5kX3BpeGVsKSkpIHsKCgoKCiAgICAgICAgICAgICAgICBYRnJlZUdDKCgoKChP
YmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQg
JiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3Qp
KHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmdjKSk7CiAgICAgICAgICAgICAgICBYRnJlZUdDKCgoKChPYmpl
Y3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAw
eDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcp
KS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRleHRGaWVsZFdp
ZGdldCkodykpLT50ZXh0LmltYWdlX2djKSk7CgogICAgICAgICAgICAgICAgWHRSZWxlYXNlR0Mo
KFdpZGdldCl3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnNhdmVfZ2MpKTsKCiAg
ICAgICAgICAgICAgICBHQ0luaXRpYWxpemUobmV3X3cpOwogICAgICAgICAgICAgICAgR0NDbGlw
KG5ld193KTsKCiAgICAgICAgICAgICAgICByZWRyYXcgPSAxOwogICAgICAgIH0KCiAgICAgICAg
aWYgKCgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgIT0g
KCgoWG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSkgfHwK
ICAgICAgICAgICAgICAgICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9w
b3NpdGlvbl92aXNpYmxlKSAhPSAoKChYbVRleHRGaWVsZFdpZGdldCkobmV3X3cpKS0+dGV4dC5j
dXJzb3JfcG9zaXRpb25fdmlzaWJsZSkpKSB7CiAgICAgICAgICAgICAgICByZWRyYXcgPSAxOwog
ICAgICAgIH0KICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1
ZSkgIT0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQudmFsdWUpKSB7CiAgICAg
ICAgICAgICAgICBYbUFueUNhbGxiYWNrU3RydWN0IHZjX2NiczsKICAgICAgICAgICAgICAgIGNo
YXIgKnRlbXA7CgogICAgICAgICAgICAgICAgcmVkcmF3ID0gMTsKCgogICAgICAgICAgICAgICAg
dGVtcCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KShuZXdfdykpLT50ZXh0LnZhbHVlKTsKCgogICAg
ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQudmFsdWUpID0g
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSk7CgoKICAgICAgICAgICAgICAg
IFRleHRTZXQobmV3X3csIHRlbXApOwoKICAgICAgICAgICAgICAgIFRleHRGX0luaXRpYWxpc2VI
aWdobGlnaHQoKFdpZGdldCluZXdfdyk7CgogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKG5ld193KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA9IDA7CgogICAgICAgICAgICAg
ICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KShuZXdfdykpLT50ZXh0LnZhbHVlX2NoYW5nZWRf
Y2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZjX2Nicy5yZWFzb24gPSBYbUNS
X1ZBTFVFX0NIQU5HRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHZjX2Nicy5ldmVudCA9ICgo
dm9pZCAqKTApOwogICAgICAgICAgICAgICAgICAgICAgICBYdENhbGxDYWxsYmFja3MoKFdpZGdl
dCluZXdfdywgKChjaGFyICopJl9YbVN0cmluZ3NbMTA1NTddKSwgJnZjX2Nicyk7CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0
Ri5jIiwgcmVwbHksICJzZXRfdmFsdWVzOiAlc1xuIiwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5l
d193KSktPnRleHQudmFsdWUpKTsKCiAgICAgICAgfQoKICAgICAgICBpZiAoKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5lZGl0YWJsZSkgIT0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5l
d193KSktPnRleHQuZWRpdGFibGUpKSB7CiAgICAgICAgICAgICAgICBfWG1UZXh0RmllbGRTZXRF
ZGl0YWJsZSgoV2lkZ2V0KW5ld193LCAoKChYbVRleHRGaWVsZFdpZGdldCkobmV3X3cpKS0+dGV4
dC5lZGl0YWJsZSkpOwogICAgICAgICAgICAgICAgcmVkcmF3ID0gMTsKICAgICAgICB9CgoKCgoK
CgogICAgICAgIHsKCgoKICAgICAgICAgICAgICAgIGF2ZV93aWR0aCA9IChpbnQpX1htVGV4dEZf
Rm9udE1heFdpZHRoKChXaWRnZXQpdyk7CgogICAgICAgIH0KCiAgICAgICAgaWYgKCgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udF9saXN0KSAhPSAoKChYbVRleHRGaWVsZFdpZGdl
dCkobmV3X3cpKS0+dGV4dC5mb250X2xpc3QpKSB7CgoKCiAgICAgICAgICAgICAgICBpZiAoKCgo
WG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQuZm9udF9saXN0KSA9PSAoKHZvaWQgKikw
KSkgewogICAgICAgICAgICAgICAgICAgICAgICBGb250SW5pdGlhbGl6ZShuZXdfdyk7CiAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250bGlzdF9jcmVhdGVkKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0RnJlZSgoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LmZvbnRfbGlzdCkpOwogICAgICAgICAgICAgICAgICAgICAgICBfTHREZWJ1ZygiLi4v
Li4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KW5ld193LCAiVEYgU2V0VmFsdWVzOiBjb3B5
aW5nIEZvbnRMaXN0XG4iKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KShuZXdfdykpLT50ZXh0LmZvbnRfbGlzdCkgPSBYbUZvbnRMaXN0Q29weSgoKChYbVRl
eHRGaWVsZFdpZGdldCkobmV3X3cpKS0+dGV4dC5mb250X2xpc3QpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKG5ld193KSktPnRleHQuZm9udGxpc3RfY3Jl
YXRlZCkgPSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIEZvbnRTaXplKG5l
d193KTsKCgoKCgogICAgICAgIGlmICgoKCgoT2JqZWN0KShuZXdfdykpLT5vYmplY3Qud2lkZ2V0
X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKG5ld193
KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKG5ld193KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu
d2luZG93KSkgewogICAgICAgICAgICAgICAgQ2hhbmdlRHJhd0dDKG5ld193KTsKICAgICAgICB9
CgogICAgICAgIHJlZHJhdyA9IDE7CgoKICAgICAgICAoKChXaWRnZXQpKHcpKS0+Y29yZS53aWR0
aCkgPSAoMiAqICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhp
Y2tuZXNzKSArCiAgICAgICAgICAgICAgICAyICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+
cHJpbWl0aXZlLmhpZ2hsaWdodF90aGlja25lc3MpICsKICAgICAgICAgICAgICAgIDIgKiAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl93aWR0aCkgKwogICAgICAgICAgICAg
ICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jb2x1bW5zKSAqIGF2ZV93aWR0aCk7
CiAgICAgICAgfQoKICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5j
b2x1bW5zKSAhPSAoKChYbVRleHRGaWVsZFdpZGdldCkobmV3X3cpKS0+dGV4dC5jb2x1bW5zKSkg
ewogICAgICAgICAgICAgICAgKCgoV2lkZ2V0KShuZXdfdykpLT5jb3JlLndpZHRoKSA9ICgyICog
KCgoWG1QcmltaXRpdmVXaWRnZXQpKG5ld193KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tuZXNz
KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgMiAqICgoKFhtUHJpbWl0aXZlV2lkZ2V0KShu
ZXdfdykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcykgKwogICAgICAgICAgICAgICAg
ICAgICAgICAgIDIgKiAoKChYbVRleHRGaWVsZFdpZGdldCkobmV3X3cpKS0+dGV4dC5tYXJnaW5f
d2lkdGgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko
bmV3X3cpKS0+dGV4dC5jb2x1bW5zKSAqIGF2ZV93aWR0aCk7CiAgICAgICAgICAgICAgICAoKChX
aWRnZXQpKHcpKS0+Y29yZS5oZWlnaHQpID0gKDIgKiAoKChYbVByaW1pdGl2ZVdpZGdldCkodykp
LT5wcmltaXRpdmUuc2hhZG93X3RoaWNrbmVzcykgKwogICAgICAgICAgICAgICAgICAgICAgICAy
ICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLmhpZ2hsaWdodF90aGlja25l
c3MpICsKICAgICAgICAgICAgICAgICAgICAgICAgMiAqICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQubWFyZ2luX2hlaWdodCkgKwogICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRl
eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZXh0ZW5zaW9uKSktPkZvbnRIZWlnaHQpKTsKICAgICAgICB9CgogICAgICAgIHJldHVy
biByZWRyYXc7Cn0KCgpzdGF0aWMgWHRHZW9tZXRyeVJlc3VsdApxdWVyeV9nZW9tZXRyeShXaWRn
ZXQgYXcsIFh0V2lkZ2V0R2VvbWV0cnkgKnByb3Bvc2VkLCBYdFdpZGdldEdlb21ldHJ5ICphbnN3
ZXIpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CiAg
ICBYdFdpZGdldEdlb21ldHJ5IGE7CgogICAgaWYgKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp
ZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3
KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5k
b3cpKSB7CiAgICAgICAgYS5yZXF1ZXN0X21vZGUgPSAoMTw8MikgfCAoMTw8Myk7CiAgICAgICAg
YS53aWR0aCA9ICgyICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLnNoYWRv
d190aGlja25lc3MpICsgMiAqICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5o
aWdobGlnaHRfdGhpY2tuZXNzKSArCiAgICAgICAgICAgICAgICAgICAyICogKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fd2lkdGgpICsKICAgICAgICAgICAgICAgICAgICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY29sdW1ucykgKiAoaW50KV9YbVRleHRGX0Zv
bnRNYXhXaWR0aCgoV2lkZ2V0KXcpKTsKCiAgICAgICAgYS5oZWlnaHQgPSAoMiAqICgoKFhtUHJp
bWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tuZXNzKSArIDIgKiAoKChY
bVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcykgKwog
ICAgICAgICAgICAgICAgICAgIDIgKiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1h
cmdpbl9oZWlnaHQpICsKICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmZvbnQpLT5tYXhfYm91bmRzLmFzY2VudCArCiAgICAgICAgICAgICAgICAgICAg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250KS0+bWF4X2JvdW5kcy5kZXNjZW50
KTsKCgogICAgICAgICphbnN3ZXIgPSBhOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGFu
c3dlci0+d2lkdGggPSAoKChXaWRnZXQpKGF3KSktPmNvcmUud2lkdGgpOwogICAgICAgIGFuc3dl
ci0+aGVpZ2h0ID0gKCgoV2lkZ2V0KShhdykpLT5jb3JlLmhlaWdodCk7CiAgICB9CgogICAgcmV0
dXJuIF9YbUdNUmVwbHlUb1F1ZXJ5R2VvbWV0cnkoYXcsIHByb3Bvc2VkLCBhbnN3ZXIpOwp9CgoK
CgoKc3RhdGljIHZvaWQKVGV4dFNldChYbVRleHRGaWVsZFdpZGdldCB3LCBjaGFyICpzKQp7CiAg
ICBpbnQgbGVuOwoKICAgIGlmIChzKQogICAgewogICAgICAgIGxlbiA9IHN0cmxlbihzKTsKICAg
ICAgICBpZiAobGVuID4gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zaXplX2FsbG9j
ZCkpCiAgICAgICAgewogICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LnNpemVfYWxsb2NkKSArPSBsZW47CiAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQudmFsdWUpID0gWHRSZWFsbG9jKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQudmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnNpemVfYWxsb2NkKSk7
CiAgICAgICAgfQoKICAgICAgICBzdHJjcHkoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC52YWx1ZSksIHMpOwoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0
cmluZ19sZW5ndGgpID0gbGVuOwogICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl
bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+VGV4
dFdpZHRoKSA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkVGV4dFdpZHRoKSA9CiAgICAg
ICAgICAgIChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgoV2lkZ2V0KXcsICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LnN0cmluZ19sZW5ndGgpKTsKCiAgICAgICAgaWYgKCgoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0Lm1heF9sZW5ndGgpID4gMCkgJiYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuc3RyaW5nX2xlbmd0aCkgPiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1h
eF9sZW5ndGgpKSkKICAgICAgICB7CiAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQubWF4X2xlbmd0aCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0
cmluZ19sZW5ndGgpOwogICAgICAgIH0KICAgIH0KfQoKCnN0YXRpYyB2b2lkClRleHREZWxldGUo
WG1UZXh0RmllbGRXaWRnZXQgdywgaW50IHN0YXJ0LCBpbnQgbGVuKQp7CiAgICBpbnQgaTsKCiAg
ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJUZXh0RGVs
ZXRlKGZyb20gJWQgbGVuICVkKVxuIiwgc3RhcnQsIGxlbik7CgoKICAgIGlmIChsZW4gPiAwKQog
ICAgewogICAgICAgIGZvciAoaSA9IHN0YXJ0ICsgbGVuOyBpIDwgKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSlbaSAtIGxlbl0gPSAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKVtpXTsKICAgICAgICB9CgogICAgICAgICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkgLT0gbGVuOwogICAg
ICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+VGV4dFdpZHRoKSA9IChpbnQpX1htVGV4dEZf
Rm9udFRleHRXaWR0aCgoV2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
dmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKTsK
CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSlbKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKV0gPSAwOwogICAgfQp9CgoKCgpz
dGF0aWMgQm9vbGVhbgpUZXh0SW5zZXJ0KFhtVGV4dEZpZWxkV2lkZ2V0IHcsIGNoYXIgKmJ1Ziwg
aW50IGxlbikKewogICAgaW50IGk7CiAgICBCb29sZWFuIGZhc3RfaW5zZXJ0OwoKICAgIGZhc3Rf
aW5zZXJ0ID0gMTsKICAgIGlmIChsZW4gPiAwKQogICAgewogICAgICAgIGlmICgoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpICsgbGVuID4gKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5tYXhfbGVuZ3RoKSkKICAgICAgICB7CiAgICAgICAgICAgIFZl
cmlmeUJlbGwodyk7CiAgICAgICAgICAgIGZhc3RfaW5zZXJ0ID0gMDsKICAgICAgICB9CiAgICAg
ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPj0gMCkgewogICAgICAgICAgICAgICAgZmFzdF9pbnNl
cnQgPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSArIGxlbiA+ICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuc2l6ZV9hbGxvY2QpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBp
ID0gMjU2OwogICAgICAgICAgICAgICAgaWYgKGkgPCBsZW4pCiAgICAgICAgICAgICAgICAgICAg
aSA9IGxlbjsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
c2l6ZV9hbGxvY2QpICs9IGkgKyAxOwogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC52YWx1ZSkgPSBYdFJlYWxsb2MoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC52YWx1ZSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc2l6ZV9hbGxv
Y2QpKTsKCiAgICAgICAgICAgICAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMi
LCAoV2lkZ2V0KXcsICIlczogJWRcbiIsICJUZXh0SW5zZXJ0OiBBbGxvY2VkIG5ldyBzcGFjZVxu
IiwgKGludCkoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnNpemVfYWxsb2NkKSk7CiAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAoaSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuc3RyaW5nX2xlbmd0aCkgLSAxOyBpID49ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKTsgaS0tKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKVtpICsgbGVuXSA9ICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpW2ldOwogICAgICAgICAgICB9Cgog
ICAgICAgICAgICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKGJ1ZikgJiYg
X19idWlsdGluX2NvbnN0YW50X3AgKGxlbikgPyAoc3RybGVuIChidWYpICsgMSA+PSAoKHNpemVf
dCkgKGxlbikpID8gKGNoYXIgKikgbWVtY3B5ICgmKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC52YWx1ZSlbKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRp
b24pXSwgYnVmLCBsZW4pIDogc3RybmNweSAoJigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQudmFsdWUpWygoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9u
KV0sIGJ1ZiwgbGVuKSkgOiBzdHJuY3B5ICgmKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC52YWx1ZSlbKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24p
XSwgYnVmLCBsZW4pKSk7CgogICAgICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkZh
c3RJbnNlcnRDdXJzb3JTdGFydCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1
cnNvcl9wb3NpdGlvbik7CiAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl
bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+RmFz
dEluc2VydFRleHRMZW4pID0gbGVuOwogICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LnN0cmluZ19sZW5ndGgpICs9IGxlbjsKCiAgICAgICAgICAgICgoKFhtVGV4dEZp
ZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5leHRlbnNpb24pKS0+VGV4dFdpZHRoKSA9IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgo
V2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpLCAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKTsKCiAgICAgICAgICAgICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpWygoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCldID0gMDsKICAgICAgICB9CiAgICB9CgogICAgcmV0
dXJuIGZhc3RfaW5zZXJ0Owp9CgoKCgoKCnN0YXRpYyB2b2lkCk1vZGlmeVRleHQoWG1UZXh0Rmll
bGRXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICBpbnQgc3RhcnQsIGludCBlbmQsIGNo
YXIgKnN0ciwgaW50IGxlbiwKICAgICAgICAgICBSZWRyYXdQcm9jIHJlZHJhdywgZW51bSBNb2Rp
ZnlUZXh0Q3Vyc29yUG9zaXRpb24gY3Vyc29ybW92ZSkKewogICAgWG1UZXh0VmVyaWZ5Q2FsbGJh
Y2tTdHJ1Y3QgbXZfY2JzOwogICAgWG1UZXh0QmxvY2tSZWMgdGI7CiAgICBCb29sZWFuIHRleHRf
d2FzX21vZGlmaWVkID0gMTsKICAgIFhtQW55Q2FsbGJhY2tTdHJ1Y3QgdmNfY2JzOwogICAgWG1U
ZXh0UG9zaXRpb24gY3Vyc29ycG9zID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5j
dXJzb3JfcG9zaXRpb24pOwogICAgWG1UZXh0UG9zaXRpb24gc2F2ZWRfY3Vyc29ycG9zID0gKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pOwoKICAgIG12X2Ni
cy5yZWFzb24gPSBYbUNSX01PRElGWUlOR19URVhUX1ZBTFVFOwogICAgbXZfY2JzLmRvaXQgPSAx
OwogICAgbXZfY2JzLmV2ZW50ID0gZXY7CgogICAgaWYgKHN0YXJ0IDwgZW5kKQogICAgewogICAg
ICAgIG12X2Nicy5zdGFydFBvcyA9IHN0YXJ0OwogICAgICAgIG12X2Nicy5lbmRQb3MgPSBlbmQ7
CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgbXZfY2JzLnN0YXJ0UG9zID0gZW5kOwogICAg
ICAgIG12X2Nicy5lbmRQb3MgPSBzdGFydDsKCiAgICB9CgoKCiAgICBtdl9jYnMuY3Vyckluc2Vy
dCA9IGN1cnNvcnBvczsKICAgIGlmKG12X2Nicy5zdGFydFBvcyAhPSBtdl9jYnMuZW5kUG9zKQog
ICAgewogICAgICAgIG12X2Nicy5uZXdJbnNlcnQgPSBtdl9jYnMuc3RhcnRQb3MgKyBsZW47CiAg
ICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgbXZfY2JzLm5ld0luc2VydCA9IGN1cnNvcnBvczsK
ICAgIH0KCiAgICBpZiAoc3RyKQogICAgewogICAgICAgIHRiLnB0ciA9IFh0TWFsbG9jKGxlbiAr
IDEpOwogICAgICAgIHRiLmxlbmd0aCA9IGxlbjsKICAgICAgICB0Yi5mb3JtYXQgPSAoKFhtVGV4
dEZvcm1hdCkgKChBdG9tKSAzMSkpOwogICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5f
Y29uc3RhbnRfcCAoc3RyKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAobGVuKSA/IChzdHJsZW4g
KHN0cikgKyAxID49ICgoc2l6ZV90KSAobGVuKSkgPyAoY2hhciAqKSBtZW1jcHkgKHRiLnB0ciwg
c3RyLCBsZW4pIDogc3RybmNweSAodGIucHRyLCBzdHIsIGxlbikpIDogc3RybmNweSAodGIucHRy
LCBzdHIsIGxlbikpKTsKICAgICAgICB0Yi5wdHJbbGVuXSA9ICdcMCc7CiAgICB9CiAgICBlbHNl
CiAgICB7CgogICAgICAgIHRiLnB0ciA9ICgodm9pZCAqKTApOwogICAgICAgIHRiLmxlbmd0aCA9
IDA7CiAgICAgICAgdGIuZm9ybWF0ID0gKChYbVRleHRGb3JtYXQpICgoQXRvbSkgMzEpKTsKICAg
IH0KICAgIG12X2Nicy50ZXh0ID0gJnRiOwogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQubW9kaWZ5X3ZlcmlmeV9jYWxsYmFjaykpCiAgICB7CiAgICAgICAgWHRDYWxsQ2Fs
bGJhY2tzKChXaWRnZXQpdywgKChjaGFyICopJl9YbVN0cmluZ3NbODEzM10pLCAmbXZfY2JzKTsK
ICAgIH0KICAgIGlmIChtdl9jYnMuZG9pdCkKICAgIHsKICAgICAgICBpZiAobXZfY2JzLnN0YXJ0
UG9zIDwgbXZfY2JzLmVuZFBvcykKICAgICAgICB7CiAgICAgICAgICAgIFRleHREZWxldGUodywg
bXZfY2JzLnN0YXJ0UG9zLCBtdl9jYnMuZW5kUG9zIC0gbXZfY2JzLnN0YXJ0UG9zKTsKICAgICAg
ICAgICAgY3Vyc29ycG9zID0gbXZfY2JzLnN0YXJ0UG9zOwogICAgICAgICAgICB0ZXh0X3dhc19t
b2RpZmllZCA9IDEgOwogICAgICAgIH0KICAgICAgICBpZiAobXZfY2JzLmVuZFBvcyA8IG12X2Ni
cy5zdGFydFBvcykKICAgICAgICB7CiAgICAgICAgICAgIFRleHREZWxldGUodywgbXZfY2JzLmVu
ZFBvcywgbXZfY2JzLnN0YXJ0UG9zIC0gbXZfY2JzLmVuZFBvcyk7CiAgICAgICAgICAgIGN1cnNv
cnBvcyA9IG12X2Nicy5lbmRQb3M7CiAgICAgICAgICAgIHRleHRfd2FzX21vZGlmaWVkID0gMSA7
CiAgICAgICAgfQoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNv
cl9wb3NpdGlvbikgPSBjdXJzb3Jwb3M7CgogICAgICAgIGlmICgobGVuID0gbXZfY2JzLnRleHQt
Pmxlbmd0aCkgPiAwKQogICAgICAgIHsKICAgICAgICAgICAgY2hhciAqYnVmID0gbXZfY2JzLnRl
eHQtPnB0cjsKCiAgICAgICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LnN0cmluZ19sZW5ndGgpICsgbGVuID4gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5t
YXhfbGVuZ3RoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVmVyaWZ5QmVsbCh3KTsK
ICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCgoKICAgICAgICAg
ICAgICAgIGlmIChyZWRyYXcgPT0gRHJhdyAmJiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LnByaW1fcG9zX2xlZnQpIDwgMCAmJgogICAgICAgICAgICAgICAgICAgICF0ZXh0X3dhc19t
b2RpZmllZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZWRyYXcgPSBE
cmF3SW5zZXJ0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgQ3Vyc29yRXJhc2Uo
dyk7CiAgICAgICAgICAgICAgICBUZXh0SW5zZXJ0KHcsIGJ1ZiwgbGVuKTsKICAgICAgICAgICAg
ICAgIHRleHRfd2FzX21vZGlmaWVkID0gMSA7CiAgICAgICAgICAgICAgICBpZiAoY3Vyc29ybW92
ZSA9PSBDUF9FbmRPZkluc2VydCkKICAgICAgICAgICAgICAgICAgY3Vyc29ycG9zICs9IGxlbjsK
ICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHRleHRfd2FzX21vZGlmaWVkKQog
ICAgICAgIHsKICAgICAgICAgICAgcmVkcmF3KHcpOwogICAgICAgICAgICBpZiAoKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZV9jaGFuZ2VkX2NhbGxiYWNrKSkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgdmNfY2JzLnJlYXNvbiA9IFhtQ1JfVkFMVUVfQ0hBTkdFRDsK
ICAgICAgICAgICAgICAgIHZjX2Nicy5ldmVudCA9IGV2OwogICAgICAgICAgICAgICAgWHRDYWxs
Q2FsbGJhY2tzKChXaWRnZXQpdywgKChjaGFyICopJl9YbVN0cmluZ3NbMTA1NTddKSwgJnZjX2Ni
cyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pID0gc2F2ZWRfY3Vyc29ycG9zOwogICAgICAgIGlm
IChjdXJzb3Jtb3ZlID09IENQX1Jlc2V0KQogICAgICAgICAgY3Vyc29ycG9zID0gMDsKICAgICAg
ICBpZiAoY3Vyc29ybW92ZSA9PSBDUF9VbmNoYW5nZWQpCiAgICAgICAgICBjdXJzb3Jwb3MgPSBz
YXZlZF9jdXJzb3Jwb3M7CiAgICAgICAgRG9DdXJzb3JNb3ZlKHcsIGV2LCBjdXJzb3Jwb3MsIDEs
IDEpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIFZlcmlmeUJlbGwodyk7CgogICAgfQog
ICAgaWYgKHRiLnB0cikKICAgIHsKICAgICAgICBYdEZyZWUodGIucHRyKTsKICAgIH0KfQoKCnN0
YXRpYyBYbVRleHRQb3NpdGlvbgpUZXh0UGl4ZWxUb1NlbGVjdGlvblBvcyhYbVRleHRGaWVsZFdp
ZGdldCB3LCBpbnQgeCkKewogICAgWG1UZXh0UG9zaXRpb24gcG9zOwoKICAgIHBvcyA9IDA7Cgog
ICAgeCAtPSAoaW50KSgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WERyYXcpICsgKCgoWG1UZXh0
RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KTsKCgogICAgaWYgKHggPD0gMCkKICAgIHsKICAgICAg
ICBwb3MgPSAwOwogICAgfQoKCiAgICBlbHNlIGlmICh4ID4gKGludClfWG1UZXh0Rl9Gb250VGV4
dFdpZHRoKChXaWRnZXQpdywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSks
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpKQogICAgewog
ICAgICAgIHBvcyA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0
aCk7CiAgICB9CgoKICAgIGVsc2UKICAgIHsKICAgICAgICBpbnQgcHJldlRvdCwgdG90LCBpLCBk
aWZmLCBtYjsKCiAgICAgICAgcHJldlRvdCA9IHRvdCA9IDA7CiAgICAgICAgcG9zID0gLTE7CiAg
ICAgICAgZGlmZiA9IHg7CiAgICAgICAgbWIgPSAwOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpOyBpKyspCiAgICAg
ICAgewogICAgICAgICAgICB0b3QgPSAoaW50KV9YbVRleHRGX0ZvbnRUZXh0V2lkdGgoKFdpZGdl
dCl3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKSwgaSk7CiAgICAgICAg
ICAgIGlmICh4IDwgdG90KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwb3MgPSBpOwog
ICAgICAgICAgICAgICAgaWYgKHRvdCAtIHggPiBkaWZmKQogICAgICAgICAgICAgICAgICAgIHBv
cyA9IHBvcyAtIDEgLSBtYjsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQog
ICAgICAgICAgICBpZiAoaSAmJiBwcmV2VG90ID09IHRvdCkKICAgICAgICAgICAgICAgIG1iKys7
CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIG1iID0gMDsKICAgICAgICAgICAgcHJl
dlRvdCA9IHRvdDsKICAgICAgICAgICAgZGlmZiA9IHggLSB0b3Q7CiAgICAgICAgfQoKICAgICAg
ICBpZiAocG9zIDwgMCkKICAgICAgICB7CiAgICAgICAgICAgIHBvcyA9ICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAgICAgICAgfQoKICAgIH0KICAgIHJl
dHVybiBwb3M7Cn0KCgpzdGF0aWMgWG1UZXh0UG9zaXRpb24KVGV4dFBpeGVsVG9Qb3MoWG1UZXh0
RmllbGRXaWRnZXQgdywgaW50IHgpCnsKICAgIFhtVGV4dFBvc2l0aW9uIGksIHRvdCwgY3VyLCBw
b3M7CgogICAgcG9zID0gMDsKCiAgICB4IC09IChpbnQpKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5YRHJhdykgKyAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwoKCiAgICBpZiAo
eCA8PSAwKQogICAgewogICAgICAgIHBvcyA9IDA7CiAgICB9CgoKICAgIGVsc2UgaWYgKHggPiAo
aW50KV9YbVRleHRGX0ZvbnRUZXh0V2lkdGgoKFdpZGdldCl3LCAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LnZhbHVlKSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJp
bmdfbGVuZ3RoKSkpCiAgICB7CiAgICAgICAgcG9zID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5zdHJpbmdfbGVuZ3RoKTsKICAgIH0KCiAgICBlbHNlCiAgICB7CiAgICAgICAgdG90
ID0gMDsKICAgICAgICBwb3MgPSAtMTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKTsgaSsrKQogICAgICAgIHsKICAg
ICAgICAgICAgY3VyID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywgJigo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpW2ldLCAxKTsKICAgICAgICAgICAg
aWYgKHggPCB0b3QgKyBjdXIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBvcyA9IGk7
CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICB0b3QgKz0g
Y3VyOwogICAgICAgIH0KICAgICAgICBpZiAocG9zIDwgMCkKICAgICAgICB7CiAgICAgICAgICAg
IHBvcyA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAg
ICAgICAgfQogICAgfQogICAgcmV0dXJuIHBvczsKfQoKCgoKCgpzdGF0aWMgQm9vbGVhbgpNYWtl
UG9zaXRpb25WaXNpYmxlKFhtVGV4dEZpZWxkV2lkZ2V0IHcsIFhtVGV4dFBvc2l0aW9uIHBvcykK
ewogICAgICAgIGludCB4LCBzdGFydCwgZW5kOwogICAgICAgIEJvb2xlYW4gbW92ZWQ7CgogICAg
ICAgIG1vdmVkID0gMDsKICAgICAgICB4ID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChX
aWRnZXQpdywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSksIHBvcyk7CiAg
ICAgICAgc3RhcnQgPSAtKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KTsKICAgICAg
ICBlbmQgPSBzdGFydCArICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2Jv
dHRvbSk7CgogICAgICAgIGlmICh4IDwgc3RhcnQpIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4
dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCkgPSAteDsKICAgICAgICAgICAgICAgIG1vdmVkID0g
MTsKICAgICAgICB9IGVsc2UgaWYgKHggPiBlbmQpIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4
dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0Lm1hcmdpbl9ib3R0b20pIC0geDsKICAgICAgICAgICAgICAgIG1vdmVkID0gMTsKICAgICAg
ICB9CgogICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQp
dywgIk1ha2VQb3NpdGlvblZpc2libGUocG9zICVkKSBzdGFydD0lZCBlbmQ9JWQgeD0lZCBtb3Zl
ZD0lc1xuIiwgcG9zLCBzdGFydCwgZW5kLCB4LCBfTHREZWJ1Z0Jvb2xlYW4yU3RyaW5nKG1vdmVk
KSk7CgoKCiAgICAgICAgcmV0dXJuIG1vdmVkOwp9CnN0YXRpYyB2b2lkCkRyYXdUZXh0KFhtVGV4
dEZpZWxkV2lkZ2V0IHcsIGludCBzdGFydCwgaW50IGVuZCwgWG1IaWdobGlnaHRNb2RlIGhpZ2hs
aWdodCkKewogICAgICAgIGludCB4LCBsZW47CiAgICAgICAgRGltZW5zaW9uIHdpZCwgYncsIGJo
OwogICAgICAgIFBvc2l0aW9uIGU7CgogICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0v
VGV4dEYuYyIsIChXaWRnZXQpdywgIkRyYXdUZXh0KCVkICVkICVkKVxuIiwgc3RhcnQsIGVuZCwg
aGlnaGxpZ2h0KTsKCgogICAgICAgIGlmICghKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVu
c2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5FY2hv
KSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbGVuPWVuZC1z
dGFydDsKICAgICAgICBpZiAobGVuIDw9IDApCiAgICAgICAgICAgICAgICByZXR1cm47CgoKCgoK
CgogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5n
dGgpID4gMCkgewogICAgICAgICAgICAgICAgWG1IaWdobGlnaHRNb2RlIG1vZGUgPSBoaWdobGln
aHQ7CgogICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwgMCkgewogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVuZCA8IHN0YXJ0KSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIGludCB0ZW1wOwoKICAgICAgICAgICAgICAgICAgICAgICAg
dGVtcCA9IHN0YXJ0OwogICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGVuZDsKICAgICAg
ICAgICAgICAgICAgICAgICAgZW5kID0gdGVtcDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBpZiAoc3RhcnQgPiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmlu
Z19sZW5ndGgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZW5kID4gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJp
bmdfbGVuZ3RoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIHggPSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhEcmF3KSArICgoKFht
VGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCkgKwogICAgICAgICAgICAgICAgICAgICAgICAo
aW50KV9YbVRleHRGX0ZvbnRUZXh0V2lkdGgoKFdpZGdldCl3LCAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LnZhbHVlKSwgc3RhcnQpOwogICAgICAgICAgICAgICAgd2lkID0gKGludClf
WG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC52YWx1ZSkgKyBzdGFydCwgbGVuKTsKCgogICAgICAgICAgICAgICAgYncgPSAoKChY
bVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuc2hhZG93X3RoaWNrbmVzcykgKyAoKChY
bVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcykKICAg
ICAgICAgICAgICAgICAgICAgICAgKyAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1h
cmdpbl93aWR0aCk7CiAgICAgICAgICAgICAgICBiaCA9ICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3
KSktPnByaW1pdGl2ZS5zaGFkb3dfdGhpY2tuZXNzKSArICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3
KSktPnByaW1pdGl2ZS5oaWdobGlnaHRfdGhpY2tuZXNzKQogICAgICAgICAgICAgICAgICAgICAg
ICArICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2hlaWdodCk7CgogICAg
ICAgICAgICAgICAgaWYgKHggKyB3aWQgKyBidyA+ICgoKFdpZGdldCkodykpLT5jb3JlLndpZHRo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICB3aWQgPSAoKChXaWRnZXQpKHcpKS0+Y29yZS53
aWR0aCkgLSBidyAtIHg7CiAgICAgICAgICAgICAgICAgICAgICAgIF9MdERlYnVnKCIuLi8uLi8u
Li9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIkRyYXdUZXh0OiBjbGlwICVkXG4iLCB3aWQp
OwoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGUgPSB3aWQgKyAoKChYbVRleHRG
aWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwogICAgICAgICAgICAgICAgaWYgKG1vZGU9PVhtSElH
SExJR0hUX1NFTEVDVEVEICYmICEoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhhdmVf
aW52ZXJ0ZWRfaW1hZ2VfZ2MpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBfTHREZWJ1Zygi
Li4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJEcmF3VGV4dC1hXG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgWFNldEZvcmVncm91bmQoKCgoKE9iamVjdCkodykpLT5vYmpl
Y3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRn
ZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFy
ZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZ2MpLCAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuZm9yZWdyb3VuZCkp
OwogICAgICAgICAgICAgICAgICAgICAgICBYRmlsbFJlY3RhbmdsZSgoKCgoT2JqZWN0KSgoV2lk
Z2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAw
eDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9i
amVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwg
KCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2lu
aXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkodykp
LT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5nYyksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYncsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoV2lkZ2V0KSh3KSktPmNvcmUud2lk
dGgpIC0gMiAqIGJ3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFdpZGdldCko
dykpLT5jb3JlLmhlaWdodCkgLSAyICogYmgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgWFNl
dEZvcmVncm91bmQoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2Ns
YXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRp
c3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxh
eSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZ2MpLCAoKChXaWRnZXQpKHcpKS0+
Y29yZS5iYWNrZ3JvdW5kX3BpeGVsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIFhTZXRCYWNr
Z3JvdW5kKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5j
bGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5
IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmdjKSwgKCgoWG1QcmltaXRpdmVXaWRnZXQp
KHcpKS0+cHJpbWl0aXZlLmZvcmVncm91bmQpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGF2ZV9pbnZlcnRlZF9pbWFnZV9nYykgPSAx
OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoaWdobGlnaHQgPT0gWG1ISUdITElHSFRfTk9S
TUFMICYmICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGF2ZV9pbnZlcnRlZF9pbWFn
ZV9nYykpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIv
WG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIkRyYXdUZXh0LWJcbiIpOwogICAgICAgICAgICAgICAg
ICAgICAgICBYQ2xlYXJBcmVhKCgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lkZ2V0
X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChXaWRn
ZXQpdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2Jq
ZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKCgoT2JqZWN0KSh3KSktPm9iamVj
dC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdl
dCkodykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu
d2luZG93KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidywgYmgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCgoV2lkZ2V0KSh3KSktPmNvcmUud2lkdGgpIC0gMiAq
IGJ3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFdpZGdldCkodykpLT5jb3Jl
LmhlaWdodCkgLSAyICogYmgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Cgog
ICAgICAgICAgICAgICAgICAgICAgICBYU2V0Rm9yZWdyb3VuZCgoKCgoT2JqZWN0KSh3KSktPm9i
amVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdp
ZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5w
YXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5nYyksICgoKFhtUHJpbWl0aXZlV2lkZ2V0KSh3KSktPnByaW1pdGl2ZS5mb3JlZ3JvdW5k
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgIFhTZXRCYWNrZ3JvdW5kKCgoKChPYmplY3QpKHcp
KS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/
ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2Jq
ZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmdjKSwgKCgoV2lkZ2V0KSh3KSktPmNvcmUuYmFja2dyb3VuZF9waXhlbCkpOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5o
YXZlX2ludmVydGVkX2ltYWdlX2djKSA9IDA7CiAgICAgICAgICAgICAgICB9IGVsc2UgewoKCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIs
IChXaWRnZXQpdywgIkRyYXdUZXh0LWMgeCAlZCBidyAlZCBlICVkIHdpZCAlZFxuIiwgeCwgYncs
IGUsIHdpZCk7CgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPCBidykgewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkIC0gYncgKyB4ID4gMCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENsZWFyQXJlYSgoKCgoT2JqZWN0KSgo
V2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQg
JiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAo
KE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5
KSwgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNz
X2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCko
dykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJ3LCBiaCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2lkIC0gYncgKyB4LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChXaWRnZXQpKHcpKS0+Y29yZS5oZWlnaHQp
IC0gMiAqIGJoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWENsZWFyQXJl
YSgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFz
cy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3Jl
ZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu
c2NyZWVuLT5kaXNwbGF5KSwgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5j
b3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5k
b3cgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBiaCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICgoKFdpZGdldCkodykpLT5jb3JlLmhlaWdodCkgLSAyICogYmgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgWFNldEZvcmVncm91bmQoKCgoKE9iamVjdCko
dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQp
ID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5v
YmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuZ2MpLCAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRpdmUuZm9y
ZWdyb3VuZCkpOwogICAgICAgICAgICAgICAgICAgICAgICBYU2V0QmFja2dyb3VuZCgoKCgoT2Jq
ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg
MHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3
KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5nYyksICgoKFdpZGdldCkodykpLT5jb3JlLmJhY2tncm91bmRfcGl4
ZWwpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuaGF2ZV9pbnZlcnRlZF9pbWFnZV9nYykgPSAwOwogICAgICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgICAgIGlmIChsZW4gPiAwKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zWzBd
LT50eXBlID09IFhtRk9OVF9JU19GT05UU0VUKSB7CgoKCgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFhtYkRyYXdTdHJpbmcoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns
YXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29y
ZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNj
cmVlbi0+ZGlzcGxheSksICgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y
ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUud2luZG93
IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFhGb250U2V0KSgoKChYbVRleHRGaWVsZFdp
ZGdldCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbMF0tPmZvbnQpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5nYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCAo
KChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllPZmZzZXQpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUp
W3N0YXJ0XSwgbGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKCgoKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWERyYXdTdHJpbmcoKCgoKE9iamVjdCkodykpLT5v
YmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChX
aWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3Qu
cGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp
ZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3
KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5k
b3cpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmdjKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHgsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl
bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WU9m
ZnNldCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSlbc3RhcnRdLCBsZW4pOwogICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09IFhtSElHSExJ
R0hUX1NFQ09OREFSWV9TRUxFQ1RFRCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgd2lkOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWQ9KGludClfWG1U
ZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywgJigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQudmFsdWUpW3N0YXJ0XSwgbGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBYRHJhd0xpbmUoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2Ns
YXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRp
c3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxh
eSksICgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFz
c19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUud2luZG93IDogKChPYmplY3Qp
KHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpLCAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmdjKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgs
ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WU9mZnNldCkgKyAxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeCArIHdpZCwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5ZT2Zmc2V0KSArIDEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgfQp9CgpzdGF0aWMgdm9pZApEcmF3VGV4dFJhbmdlKFhtVGV4dEZpZWxkV2lk
Z2V0IHcsIGludCBzdGFydCwgaW50IGVuZCkKewogICAgICAgIGludCBpOwogICAgICAgIFhtSGln
aGxpZ2h0TW9kZSBtb2RlOwoKICAgICAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRG
LmMiLCAoV2lkZ2V0KXcsICJEcmF3VGV4dFJhbmdlWyVkICVkXVxuIiwgc3RhcnQsIGVuZCk7CiAg
ICAgICAgaWYgKCEoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkVjaG8pKSB7CiAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgfQoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LnN0cmluZ19sZW5ndGgpID4gMCkgewogICAgICAgIGlmIChzdGFydCA8IDApIHsKICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgaWYgKGVuZCA8IHN0YXJ0KSB7CiAg
ICAgICAgICAgICAgICBpbnQgdGVtcDsKCiAgICAgICAgICAgICAgICB0ZW1wID0gc3RhcnQ7CiAg
ICAgICAgICAgICAgICBzdGFydCA9IGVuZDsKICAgICAgICAgICAgICAgIGVuZCA9IHRlbXA7CiAg
ICAgICAgfQoKICAgICAgICBtb2RlID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5o
aWdobGlnaHQpLmxpc3RbMF0ubW9kZTsKICAgICAgICBmb3IgKGk9MDsgaTwoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubnVtYmVyLTE7IGkrKykgewogICAgICAgICAg
ICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0
W2ldLnBvc2l0aW9uID09IHN0YXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLnBvc2l0aW9u
IDwgZW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhd1RleHQodywgc3Rh
cnQsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0u
cG9zaXRpb24sIG1vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIERyYXdUZXh0KHcsIHN0YXJ0LCBlbmQsIG1vZGUpOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLm1vZGU7
CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uIDwgc3RhcnQgJiYKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGFydCA8ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
aGlnaGxpZ2h0KS5saXN0W2krMV0ucG9zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBv
c2l0aW9uICE9IHN0YXJ0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyYXdUZXh0
KHcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBv
c2l0aW9uLCBzdGFydCwgbW9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLnBvc2l0aW9uIDwg
ZW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhd1RleHQodywgc3RhcnQs
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0ucG9z
aXRpb24sIG1vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERyYXdUZXh0KHcsIHN0YXJ0LCBlbmQsIG1vZGUpOwogICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLm1vZGU7CiAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0IDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbaV0ucG9zaXRpb24gJiYKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCku
bGlzdFtpKzFdLnBvc2l0aW9uIDwgZW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIERyYXdU
ZXh0KHcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ld
LnBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0ucG9zaXRpb24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5o
aWdobGlnaHQpLmxpc3RbaV0ubW9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLm1vZGU7
CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uID09IGVuZCkgewoKICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxp
c3RbaV0ucG9zaXRpb24gPCBlbmQgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bmQgPCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFd
LnBvc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIERyYXdUZXh0KHcsICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtp
XS5tb2RlKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgIH0KfQoKCnN0YXRpYyB2b2lkCkRyYXdUZXh0UmVwb3NpdGlvbihYbVRleHRGaWVs
ZFdpZGdldCB3KQp7CiAgICBpbnQgeHNyYywgeGRlc3QsIHdpZHRoLCBzdGFydCwgZW5kOwoKICAg
IGlmICghKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5FY2hvKSkKICAgIHsKICAgICAgICByZXR1
cm47CiAgICB9CiAgICBpZiAoISgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lkZ2V0
X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChXaWRn
ZXQpdykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LnBhcmVu
dC0+Y29yZS53aW5kb3cpKQogICAgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoKCgo
WG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KSA8ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0
aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p
KS0+T2xkWE9mZnNldCkpCiAgICB7CiAgICAgICAgeHNyYyA9ICgoKFhtVGV4dEZpZWxkUGFydExl
c3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNp
b24pKS0+T2xkWE9mZnNldCkgLSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICop
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwog
ICAgICAgIHhkZXN0ID0gMDsKICAgICAgICB3aWR0aCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQubWFyZ2luX2JvdHRvbSkgLSB4c3JjICsgMTsKCgogICAgICAgIGVuZCA9ICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKTsKICAgICAgICBzdGFy
dCA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkQ3Vyc29yUG9zKTsKICAgIH0KICAgIGVs
c2UgaWYgKCgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCkgPiAoKChYbVRleHRGaWVs
ZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
ZXh0ZW5zaW9uKSktPk9sZFhPZmZzZXQpKQogICAgewogICAgICAgIHhzcmMgPSAwOwogICAgICAg
IHhkZXN0ID0gKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KSAtICgoKFhtVGV4dEZp
ZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5leHRlbnNpb24pKS0+T2xkWE9mZnNldCk7CiAgICAgICAgd2lkdGggPSAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pIC0geGRlc3QgKyAxOwoKCgogICAgICAg
IHN0YXJ0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24p
OwogICAgICAgIGVuZCA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkQ3Vyc29yUG9zKTsK
ICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHdpZHRo
ID4gMCkKICAgIHsKICAgICAgICBpZiAoX0x0RGVidWdJbkRlYnVnKCIuLi8uLi8uLi9saWIvWG0v
VGV4dEYuYyIsIChXaWRnZXQpdykpCiAgICAgICAgewogICAgICAgICAgICBfTHREZWJ1ZygiLi4v
Li4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJSZXBvc2l0aW9uOiB4b2ZmPSVkIG9s
ZD0lZCBzcmM9JWQgZGVzdD0lZCIgIiB3aWR0aD0lZCByZWZyZXNoICVkLSVkXG4iLCAoKChYbVRl
eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPk9s
ZFhPZmZzZXQpLCB4c3JjLCB4ZGVzdCwgd2lkdGgsIHN0YXJ0LCBlbmQpOwoKCgoKICAgICAgICB9
CgogICAgICAgIFhDb3B5QXJlYSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3Mt
PmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNj
cmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVu
LT5kaXNwbGF5KSwgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2Ns
YXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAo
KE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksICgoKChPYmplY3QpKHcp
KS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/
ICgoV2lkZ2V0KSh3KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVu
dC0+Y29yZS53aW5kb3cpLAogICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmdjKSwKICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5YRHJhdykgKyB4c3JjLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllEcmF3KSwKICAgICAg
ICAgICAgICAgICAgKHVuc2lnbmVkIGludCl3aWR0aCwgKHVuc2lnbmVkIGludCkoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl90b3ApLAogICAgICAgICAgICAgICAgICAoKChY
bVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuZXh0ZW5zaW9uKSktPlhEcmF3KSArIHhkZXN0LCAoKChYbVRleHRGaWVsZFBhcnRM
ZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5z
aW9uKSktPllEcmF3KSk7CgoKCgoKICAgICAgICBpZiAoeGRlc3QgPCB4c3JjKQogICAgICAgIHsK
ICAgICAgICAgICAgWENsZWFyQXJlYSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xh
c3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3Jl
LnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2Ny
ZWVuLT5kaXNwbGF5KSwgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3Jl
X2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cg
OiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAgICAgICAgICAg
ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5YRHJhdykgKyB4ZGVzdCArIHdp
ZHRoLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllEcmF3KSwKICAgICAgICAgICAgICAgICAg
ICAgICB4c3JjIC0geGRlc3QsICh1bnNpZ25lZCBpbnQpKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5tYXJnaW5fdG9wKSwKICAgICAgICAgICAgICAgICAgICAgICAwKTsKCiAgICAgICAg
ICAgIGlmIChfTHREZWJ1Z0luRGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdl
dCl3KSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xp
Yi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiUmVwb3NpdGlvbjogZXJhc2luZyB4PSVkIHk9JWQg
dz0lZCBoPSVkXG4iLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhEcmF3KSArIHhkZXN0ICsg
d2lkdGgsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WURyYXcpLCB4c3JjIC0geGRlc3QsICh1
bnNpZ25lZCBpbnQpKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fdG9wKSk7
CgoKCiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKQog
ICAgICAgIHsKICAgICAgICAgICAgZW5kKys7CiAgICAgICAgfQoKICAgICAgICBEcmF3VGV4dFJh
bmdlKHcsIHN0YXJ0LCBlbmQpOwogICAgfQogICAgZWxzZQogICAgewoKICAgICAgICBzdGFydCA9
IFRleHRQaXhlbFRvUG9zKHcsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WERyYXcpKTsKICAg
ICAgICBlbmQgPSBUZXh0UGl4ZWxUb1Bvcyh3LCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhE
cmF3KSArICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2JvdHRvbSkpICsg
MTsKCiAgICAgICAgRHJhd1RleHRSYW5nZSh3LCBzdGFydCwgZW5kKTsKCiAgICAgICAgaWYgKF9M
dERlYnVnSW5EZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcpKQogICAg
ICAgIHsKICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdp
ZGdldCl3LCAiUmVwb3NpdGlvbjogeG9mZj0lZCBvbGQ9JWQgcmVmcmVzaCAlZC0lZFxuIiwgKCgo
WG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KSwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5PbGRYT2Zmc2V0KSwgc3RhcnQsIGVuZCk7CgoKICAgICAgICB9CgogICAgfQoKICAgICgoKFht
VGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5leHRlbnNpb24pKS0+T2xkWE9mZnNldCkgPSAoKChYbVRleHRGaWVsZFBhcnRMZXNz
dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9u
KSktPlhPZmZzZXQpOwp9CgoKc3RhdGljIHZvaWQKRXJhc2VYUmFuZ2UoWG1UZXh0RmllbGRXaWRn
ZXQgdywgaW50IHN0YXJ0LCBpbnQgZW5kKQp7CiAgICBpbnQgeDEsIHgyOwoKICAgIHgxID0gKCgo
WG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmV4dGVuc2lvbikpLT5YT2Zmc2V0KSArIHN0YXJ0OwogICAgeDIgPSAoKChYbVRl
eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpICsgZW5kOwogICAgaWYgKHgxIDwgMCkKICAgIHsK
ICAgICAgICB4MSA9IDA7CiAgICB9CiAgICBpZiAoeDIgPiAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pKQogICAgewogICAgICAgIHgyID0gKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fYm90dG9tKTsKICAgIH0KICAgIGlmICh4MiA+IHgx
KQogICAgewogICAgICAgIFhDbGVhckFyZWEoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0
X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+
Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3Jl
LnNjcmVlbi0+ZGlzcGxheSksICgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+
Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUud2lu
ZG93IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpLAogICAgICAg
ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5YRHJhdykgKyB4MSwgKCgoWG1U
ZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdyksCiAgICAgICAgICAgICAgICAgICB4MiAtIHgxICsg
MSwKICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFy
Z2luX3RvcCksIDApOwogICAgfQp9CgoKc3RhdGljIHZvaWQKRHJhd1RleHRXaXRoQ29weUFyZWEo
WG1UZXh0RmllbGRXaWRnZXQgdykKewogICAgaW50IHgsIGluc2VydF93aWR0aDsKICAgIGludCB4
c3JjLCB4ZGVzdCwgd2lkdGg7CgogICAgaWYgKCEoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkVj
aG8pKQogICAgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghKCgoKE9iamVjdCkoKFdp
ZGdldCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg
MHgwNCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKChX
aWRnZXQpdykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpCiAgICB7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIHggPSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICop
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwog
ICAgaW5zZXJ0X3dpZHRoID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywg
JigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpWygoKFhtVGV4dEZpZWxkUGFy
dExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRl
bnNpb24pKS0+RmFzdEluc2VydEN1cnNvclN0YXJ0KV0sICgoKFhtVGV4dEZpZWxkUGFydExlc3N0
aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p
KS0+RmFzdEluc2VydFRleHRMZW4pKTsKCgoKICAgIGlmIChDdXJzb3JQb3NpdGlvbih3KSkKICAg
IHsKCgoKCgogICAgICAgIHhzcmMgPSAwOwogICAgICAgIHdpZHRoID0gKCgoWG1UZXh0RmllbGRQ
YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4
dGVuc2lvbikpLT5PbGRDdXJzb3JYKSArIHg7CiAgICAgICAgeGRlc3QgPSAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pIC0gKHggKyAoKChYbVRleHRGaWVsZFBh
cnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0
ZW5zaW9uKSktPk9sZEN1cnNvclgpKSAtIGluc2VydF93aWR0aDsKCiAgICAgICAgWENvcHlBcmVh
KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19p
bml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChP
YmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKCgoT2Jq
ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg
MHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVj
dC5wYXJlbnQtPmNvcmUud2luZG93KSwgKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns
YXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29y
ZS53aW5kb3cgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyksCiAg
ICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZ2MpLAogICAg
ICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhEcmF3KSArIHhzcmMsICgo
KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WURyYXcpLAogICAgICAgICAgICAgICAgICAodW5zaWdu
ZWQgaW50KXdpZHRoLCAodW5zaWduZWQgaW50KSgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQubWFyZ2luX3RvcCksCiAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0
aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p
KS0+WERyYXcpICsgeGRlc3QsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WURyYXcpKTsKCiAg
ICAgICAgaWYgKF9MdERlYnVnSW5EZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lk
Z2V0KXcpKQogICAgICAgIHsKICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9U
ZXh0Ri5jIiwgKFdpZGdldCl3LCAiRHJhd1RleHRXQ0E6IHg9JWQgeHNyYz0lZCB4ZGVzdD0lZCB3
aWR0aD0lZFxuIiwgeCwgeHNyYywgeGRlc3QsIHdpZHRoKTsKCgogICAgICAgIH0KCiAgICB9CiAg
ICBlbHNlCiAgICB7CgoKCgoKICAgICAgICB4c3JjID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdp
ZHRoKChXaWRnZXQpdywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSksICgo
KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5leHRlbnNpb24pKS0+RmFzdEluc2VydEN1cnNvclN0YXJ0KSkgKyB4OwoKCgog
ICAgICAgIHdpZHRoID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fYm90
dG9tKSAtIHhzcmM7CiAgICAgICAgeGRlc3QgPSB4c3JjICsgaW5zZXJ0X3dpZHRoOwoKICAgICAg
ICBYQ29weUFyZWEoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2Ns
YXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRp
c3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxh
eSksICgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFz
c19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUud2luZG93IDogKChPYmplY3Qp
KHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpLCAoKCgoT2JqZWN0KSh3KSktPm9iamVj
dC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdl
dCkodykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu
d2luZG93KSwKICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5nYyksCiAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNp
b24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WERyYXcp
ICsgeHNyYywgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdyksCiAgICAgICAgICAgICAg
ICAgICh1bnNpZ25lZCBpbnQpd2lkdGgsICh1bnNpZ25lZCBpbnQpKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5tYXJnaW5fdG9wKSwKICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0Rmll
bGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LmV4dGVuc2lvbikpLT5YRHJhdykgKyB4ZGVzdCwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4
dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5Z
RHJhdykpOwoKICAgICAgICBpZiAoX0x0RGVidWdJbkRlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4
dEYuYyIsIChXaWRnZXQpdykpCiAgICAgICAgewogICAgICAgICAgICBfTHREZWJ1ZygiLi4vLi4v
Li4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJEcmF3VGV4dFdDQTogeD0lZCB4c3JjPSVk
IHhkZXN0PSVkIHdpZHRoPSVkXG4iLCB4LCB4c3JjLCB4ZGVzdCwgd2lkdGgpOwoKCiAgICAgICAg
fQogICAgfQoKICAgIERyYXdUZXh0UmFuZ2UodywgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4
dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5G
YXN0SW5zZXJ0Q3Vyc29yU3RhcnQpLAogICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFBh
cnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0
ZW5zaW9uKSktPkZhc3RJbnNlcnRDdXJzb3JTdGFydCkgKyAoKChYbVRleHRGaWVsZFBhcnRMZXNz
dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9u
KSktPkZhc3RJbnNlcnRUZXh0TGVuKSk7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkUGFydExlc3N0
aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p
KS0+VGV4dFdpZHRoKSA8ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkVGV4dFdpZHRoKSkK
ICAgIHsKICAgICAgICBFcmFzZVhSYW5nZSh3LCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlRl
eHRXaWR0aCksICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkVGV4dFdpZHRoKSk7CiAgICB9
CgogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5PbGRUZXh0V2lkdGgpID0gKCgoWG1UZXh0
RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LmV4dGVuc2lvbikpLT5UZXh0V2lkdGgpOwogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5PbGRYT2Zmc2V0KSA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCk7Cn0KCgpz
dGF0aWMgdm9pZApEcmF3QWxsVGV4dChYbVRleHRGaWVsZFdpZGdldCB3KQp7CiAgICBpZiAoISgo
KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5leHRlbnNpb24pKS0+RWNobykpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAg
fQoKICAgIERyYXdUZXh0UmFuZ2UodywgMCwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5zdHJpbmdfbGVuZ3RoKSk7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl
bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+VGV4
dFdpZHRoKSA8ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkVGV4dFdpZHRoKSkKICAgIHsK
ICAgICAgICBFcmFzZVhSYW5nZSh3LCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9u
ICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlRleHRXaWR0
aCksICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+T2xkVGV4dFdpZHRoKSk7CiAgICB9CgogICAg
KCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5PbGRUZXh0V2lkdGgpID0gKCgoWG1UZXh0RmllbGRQ
YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4
dGVuc2lvbikpLT5UZXh0V2lkdGgpOwogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVu
c2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5PbGRY
T2Zmc2V0KSA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCk7CiAgICAoKChYbVRl
eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZXh0ZW5zaW9uKSktPk9sZEhpZ2hsaWdodFN0YXJ0KSA9ICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCk7CiAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNz
dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9u
KSktPk9sZEhpZ2hsaWdodEVuZCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnBy
aW1fcG9zX3JpZ2h0KTsKfQoKCgoKc3RhdGljIEJvb2xlYW4KQ3Vyc29yUG9zaXRpb24oWG1UZXh0
RmllbGRXaWRnZXQgdykKewogICAgICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYu
YyIsIChXaWRnZXQpdywgIkN1cnNvclBvc2l0aW9uKCVkKVxuIiwgKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pKTsKICAgICAgICBpZiAoKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pIDwgMCkgewogICAgICAgICAgICAg
ICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pID0gMDsK
ICAgICAgICB9IGVsc2UgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29y
X3Bvc2l0aW9uKSA+ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0
aCkpIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vy
c29yX3Bvc2l0aW9uKSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xl
bmd0aCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gTWFrZVBvc2l0aW9uVmlzaWJsZSh3LCAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikpOwp9CgoKc3Rh
dGljIEJvb2xlYW4KQ3Vyc29yTWFzc2l2ZUFkanVzdChYbVRleHRGaWVsZFdpZGdldCB3KQp7CiAg
ICBpbnQgc3RhcnQsIGVuZCwgbGFzdDsKICAgIEJvb2xlYW4gbW92ZWQ7CgogICAgbW92ZWQgPSAw
OwogICAgZW5kID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywgKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSk7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPj0gMCkKICAgIHsKICAgICAgICBzdGFydCA9IChp
bnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgoV2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQudmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hs
aWdodCkubGlzdFsxXS5wb3NpdGlvbik7CgoKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBz
dGFydCA9IGVuZDsKICAgIH0KCiAgICBpZiAoZW5kIDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5tYXJnaW5fYm90dG9tKSkKICAgIHsKICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRQ
YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4
dGVuc2lvbikpLT5YT2Zmc2V0KSA8IDApCiAgICAgICAgewogICAgICAgICAgICAoKChYbVRleHRG
aWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpID0gMDsKICAgICAgICAgICAgbW92ZWQgPSAxOwogICAg
ICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHN0YXJ0ID49ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0
aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p
KS0+WE9mZnNldCkgJiYKICAgICAgICAgICAgIGVuZCA8ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0
aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24p
KS0+WE9mZnNldCkgKyAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0
b20pKQogICAgewogICAgICAgIHJldHVybiBtb3ZlZDsKICAgIH0KICAgIGVsc2UKICAgIHsKICAg
ICAgICBsYXN0ID0gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdywgKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpOwogICAgICAgIGlmIChzdGFydCAtIGVuZCA+ICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2JvdHRvbSkpCiAgICAgICAgewogICAg
ICAgICAgICBpZiAobGFzdCAtIGVuZCA+ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
bWFyZ2luX2JvdHRvbSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZp
ZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5leHRlbnNpb24pKS0+WE9mZnNldCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
Lm1hcmdpbl9ib3R0b20pIC0gbGFzdDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl
bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WE9m
ZnNldCkgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pIC0g
ZW5kOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGVuZCA+ICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2JvdHRvbSkpCiAgICAgICAgewogICAg
ICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpID0gKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fYm90dG9tKSAtIGVuZDsKICAgICAgICB9CiAgICAg
ICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4
dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5Y
T2Zmc2V0KSA9IDA7CiAgICAgICAgfQogICAgICAgIG1vdmVkID0gMTsKICAgIH0KCiAgICByZXR1
cm4gbW92ZWQ7Cn0KCgpzdGF0aWMgdm9pZApDdXJzb3JTZXQoWG1UZXh0RmllbGRXaWRnZXQgdywg
Qm9vbGVhbiBmb2N1cykKewogICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oYXNf
Zm9jdXMpID0gZm9jdXM7CgoKICAgIGlmIChmb2N1cykKICAgIHsKICAgICAgICBYU2V0U3RpcHBs
ZSgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFz
cy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3Jl
ZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu
c2NyZWVuLT5kaXNwbGF5KSwKICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmltYWdlX2djKSwKICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcikpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAg
IFhTZXRTdGlwcGxlKCgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lkZ2V0X2NsYXNz
LT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChXaWRnZXQpdykp
LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LnBh
cmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLAogICAgICAgICAgICAgICAgICAgICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaW1hZ2VfZ2MpLAogICAgICAgICAgICAgICAgICAgICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RpcHBsZV90aWxlKSk7CiAgICB9Cn0KCgpz
dGF0aWMgdm9pZApDdXJzb3JTYXZlVW5kZXJJQmVhbShYbVRleHRGaWVsZFdpZGdldCB3LCBpbnQg
eCkKewogICAgaWYgKCEoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFz
cy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcp
KS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNv
cmUud2luZG93KSkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgoKICAgIFhGbHVzaCgoKCgo
T2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFz
c19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3JlZW4tPmRp
c3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVu
LT5kaXNwbGF5KSk7CgoKICAgIFhGaWxsUmVjdGFuZ2xlKCgoKChPYmplY3QpKChXaWRnZXQpdykp
LT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8g
KChXaWRnZXQpKChXaWRnZXQpdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgo
V2lkZ2V0KXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmliZWFtX29mZiksICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuc2F2ZV9nYyksCiAgICAgICAgICAgICAgICAgICAwLCAwLCA1LCAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl90b3ApKTsKCiAgICBYQ29weUFyZWEoKCgo
KE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xh
c3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNvcmUuc2NyZWVuLT5k
aXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVl
bi0+ZGlzcGxheSksICgoKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3Qud2lkZ2V0X2NsYXNz
LT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKChXaWRnZXQpdykp
LT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LnBhcmVudC0+Y29y
ZS53aW5kb3cpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmliZWFtX29mZiksCiAg
ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5pbWFnZV9nYyksCiAg
ICAgICAgICAgICAgeCAtIDIsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WURyYXcpLAogICAg
ICAgICAgICAgIDUsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX3RvcCks
IDAsIDApOwoKICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucmVmcmVzaF9pYmVh
bV9vZmYpID0gMTsKfQoKCnN0YXRpYyB2b2lkCkN1cnNvclJlc3RvcmVVbmRlcklCZWFtKFhtVGV4
dEZpZWxkV2lkZ2V0IHcpCnsKICAgIGludCB4OwoKICAgIGlmICghKCgoKE9iamVjdCkoKFdpZGdl
dCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgw
NCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKChXaWRn
ZXQpdykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpCiAgICB7CiAgICAgICAgcmV0dXJu
OwogICAgfQoKCiAgICBYRmx1c2goKCgoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC53aWRn
ZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoKFdp
ZGdldCl3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQpdykpLT5v
YmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSkpOwoKICAgIHggPSAoKChYbVRleHRG
aWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZXh0ZW5zaW9uKSktPk9sZEN1cnNvclgpICsgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4
dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5Y
RHJhdykgKyAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwoKICAgIFhDb3B5QXJl
YSgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFz
cy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS5zY3Jl
ZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUu
c2NyZWVuLT5kaXNwbGF5KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5pYmVhbV9v
ZmYpLCAoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9j
bGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS53
aW5kb3cgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93
KSwKICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmltYWdlX2dj
KSwgMCwgMCwgNSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5tYXJnaW5fdG9wKSwK
ICAgICAgICAgICAgICB4IC0gMiwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq
KSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdykpOwoK
ICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucmVmcmVzaF9pYmVhbV9vZmYpID0g
MDsKfQoKCnN0YXRpYyB2b2lkCkN1cnNvckRyYXdJQmVhbShYbVRleHRGaWVsZFdpZGdldCB3LCBp
bnQgeCkKewoKICAgIEN1cnNvclNhdmVVbmRlcklCZWFtKHcsIHgpOwoKCiAgICBYU2V0VFNPcmln
aW4oKCgoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xh
c3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNvcmUuc2Ny
ZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3QucGFyZW50LT5jb3Jl
LnNjcmVlbi0+ZGlzcGxheSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaW1hZ2Vf
Z2MpLAogICAgICAgICAgICAgICAgIHggLSAyLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllP
ZmZzZXQpIC0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250LT5tYXhfYm91bmRz
LmFzY2VudCkpOwoKICAgIFhGaWxsUmVjdGFuZ2xlKCgoKChPYmplY3QpKChXaWRnZXQpdykpLT5v
YmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChX
aWRnZXQpKChXaWRnZXQpdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSgoV2lk
Z2V0KXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKCgoT2JqZWN0
KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0
ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVj
dCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93KSwgKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5pbWFnZV9nYyksCiAgICAgICAgICAgICAgICAgICB4IC0gMiwg
KCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5ZRHJhdyksIDUsICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQubWFyZ2luX3RvcCkpOwp9CgoKc3RhdGljIHZvaWQKQ3Vyc29yRHJhdyhYbVRl
eHRGaWVsZFdpZGdldCB3KQp7CiAgICBpbnQgeDsKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb25fdmlzaWJsZSkpCiAgICB7CiAgICAgICAgeCA9
IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgoV2lkZ2V0KXcsICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQudmFsdWUpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1
cnNvcl9wb3NpdGlvbikpOwoKICAgICAgICBDdXJzb3JFcmFzZSh3KTsKICAgICAgICAoKChYbVRl
eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZXh0ZW5zaW9uKSktPk9sZEN1cnNvclBvcykgPSAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbik7CiAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVz
c3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lv
bikpLT5PbGRDdXJzb3JYKSA9IHg7CgogICAgICAgIHggKz0gKCgoWG1UZXh0RmllbGRQYXJ0TGVz
c3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lv
bikpLT5YRHJhdykgKyAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhPZmZzZXQpOwoKICAgICAg
ICBDdXJzb3JEcmF3SUJlYW0odywgeCk7CgogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuYmxpbmtfb24pID0gMTsKICAgIH0KfQoKCnN0YXRpYyB2b2lkCkN1cnNvckVyYXNl
KFhtVGV4dEZpZWxkV2lkZ2V0IHcpCnsKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LnJlZnJlc2hfaWJlYW1fb2ZmKSkKICAgIHsKICAgICAgICBDdXJzb3JSZXN0b3JlVW5k
ZXJJQmVhbSh3KTsKICAgIH0KCiAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmJs
aW5rX29uKSA9IDA7Cn0KCgpzdGF0aWMgdm9pZApDbGVhckhpZ2hsaWdodChYbVRleHRGaWVsZFdp
ZGdldCB3KQp7CiAgICAgICAgaWYgKCEoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9u
ICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPkVjaG8pKQog
ICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSA+PSAwKSB7CiAgICAgICAgICAgICAgICBDdXJzb3JF
cmFzZSh3KTsKICAgICAgICAgICAgICAgIFRleHRGX0luaXRpYWxpc2VIaWdobGlnaHQoKFdpZGdl
dCl3KTsKCgoKCgoKICAgICAgICAgICAgICAgIERyYXdBbGxUZXh0KHcpOwoKICAgICAgICAgICAg
ICAgIEN1cnNvckRyYXcodyk7CiAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LnByaW1fcG9zX2xlZnQpID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5wcmltX3Bvc19yaWdodCkgPSAtMTsKICAgICAgICB9CgogICAgICAgICgoKFhtVGV4dEZpZWxk
UGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5l
eHRlbnNpb24pKS0+T2xkSGlnaGxpZ2h0U3RhcnQpID0gKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5PbGRIaWdobGlnaHRFbmQpID0gLTE7Cn0KCnN0YXRpYyB2b2lkClNldFNpbmdsZUhpZ2hsaWdo
dChXaWRnZXQgdywgaW50IGxlZnQsIGludCByaWdodCkKewogICAgICAgICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPSBsZWZ0OwogICAgICAgICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpID0gcmlnaHQ7CgogICAgICAg
IGlmIChsZWZ0IDwgcmlnaHQpIHsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5udW1iZXIgPSA0OwogICAgICAgICAgICAgICAgKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbMF0ucG9zaXRpb24gPSAw
OwogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGln
aHQpLmxpc3RbMF0ubW9kZSA9IFhtSElHSExJR0hUX05PUk1BTDsKICAgICAgICAgICAgICAgICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0WzFdLnBvc2l0aW9u
ID0gbGVmdDsKICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
aGlnaGxpZ2h0KS5saXN0WzFdLm1vZGUgPSBYbUhJR0hMSUdIVF9TRUxFQ1RFRDsKICAgICAgICAg
ICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0WzJd
LnBvc2l0aW9uID0gcmlnaHQ7CiAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFsyXS5tb2RlID0gWG1ISUdITElHSFRfTk9STUFMOwog
ICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQp
Lmxpc3RbM10ucG9zaXRpb24gPSAyMTQ3NDgzNjQ3OwogICAgICAgICAgICAgICAgKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbNF0ubW9kZSA9IFhtSElHSExJ
R0hUX05PUk1BTDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgVGV4dEZfSW5pdGlh
bGlzZUhpZ2hsaWdodCh3KTsKICAgICAgICB9Cn0KCnN0YXRpYyB2b2lkCkRyYXdTaW5nbGVIaWdo
bGlnaHQoWG1UZXh0RmllbGRXaWRnZXQgdykKewogICAgICAgIGludCBsLCByOwoKICAgICAgICBp
ZiAoISgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+RWNobykpIHsKICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICB9CgogICAgICAgIGlmICghKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lk
Z2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcp
KS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRv
dykpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICgoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubnVtYmVyID09IDQpIHsKICAg
ICAgICAgICAgICAgIGwgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdo
dCkubGlzdFsxXS5wb3NpdGlvbjsKICAgICAgICAgICAgICAgIHIgPSAoKChYbVRleHRGaWVsZFdp
ZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFsyXS5wb3NpdGlvbjsKCiAgICAgICAgICAg
ICAgICBEcmF3VGV4dCh3LCBsLCByLCAxKTsKICAgICAgICB9Cn0KCgoKCnN0YXRpYyB2b2lkCkRy
YXdJbnNlcnQoWG1UZXh0RmllbGRXaWRnZXQgdykKewogICAgaWYgKCEoKCgoT2JqZWN0KSh3KSkt
Pm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAo
KFdpZGdldCkodykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQt
PmNvcmUud2luZG93KSkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgoKICAgIERyYXdUZXh0
V2l0aENvcHlBcmVhKHcpOwogICAgQ3Vyc29yRHJhdyh3KTsKfQoKCgoKCnN0YXRpYyB2b2lkCkRy
YXdNb3ZlKFhtVGV4dEZpZWxkV2lkZ2V0IHcpCnsKICAgIGlmICghKCgoKE9iamVjdCkodykpLT5v
YmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChX
aWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5j
b3JlLndpbmRvdykpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIEN1cnNvckVyYXNl
KHcpOwogICAgaWYgKEN1cnNvclBvc2l0aW9uKHcpKQogICAgewogICAgICAgIERyYXdUZXh0UmVw
b3NpdGlvbih3KTsKICAgIH0KCiAgICBDdXJzb3JEcmF3KHcpOwp9CgoKCgoKc3RhdGljIHZvaWQK
RHJhdyhYbVRleHRGaWVsZFdpZGdldCB3KQp7CiAgICBpZiAoISgoKChPYmplY3QpKHcpKS0+b2Jq
ZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lk
Z2V0KSh3KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29y
ZS53aW5kb3cpKQogICAgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBDdXJzb3JFcmFzZSh3
KTsKCiAgICBDdXJzb3JQb3NpdGlvbih3KTsKCiAgICBEcmF3QWxsVGV4dCh3KTsKCiAgICBDdXJz
b3JEcmF3KHcpOwp9CgoKCgoKc3RhdGljIHZvaWQKRHJhd0FsbChYbVRleHRGaWVsZFdpZGdldCB3
KQp7CiAgICBpZiAoISgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9j
bGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUud2luZG93IDog
KChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpKQogICAgewogICAgICAg
IHJldHVybjsKICAgIH0KCiAgICBYQ2xlYXJBcmVhKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp
ZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3
KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+
Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xh
c3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3Jl
LndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93KSwKICAg
ICAgICAgICAgICAgKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLmhpZ2hsaWdo
dF90aGlja25lc3MpLAogICAgICAgICAgICAgICAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5w
cmltaXRpdmUuaGlnaGxpZ2h0X3RoaWNrbmVzcyksCiAgICAgICAgICAgICAgICgoKFdpZGdldCko
dykpLT5jb3JlLndpZHRoKSAtIDIgKiAoKChYbVByaW1pdGl2ZVdpZGdldCkodykpLT5wcmltaXRp
dmUuaGlnaGxpZ2h0X3RoaWNrbmVzcyksCiAgICAgICAgICAgICAgICgoKFdpZGdldCkodykpLT5j
b3JlLmhlaWdodCkgLSAyICogKCgoWG1QcmltaXRpdmVXaWRnZXQpKHcpKS0+cHJpbWl0aXZlLmhp
Z2hsaWdodF90aGlja25lc3MpLAogICAgICAgICAgICAgICAwKTsKCiAgICBDdXJzb3JQb3NpdGlv
bih3KTsKCiAgICBEcmF3QWxsVGV4dCh3KTsKCiAgICBDdXJzb3JEcmF3KHcpOwp9CgoKCgoKCnN0
YXRpYyB2b2lkCk1hc3NpdmVDaGFuZ2VEcmF3KFhtVGV4dEZpZWxkV2lkZ2V0IHcpCnsKICAgIGlm
ICghKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNz
X2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCko
dykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpCiAgICB7CiAgICAgICAgcmV0dXJuOwog
ICAgfQoKICAgIEN1cnNvckVyYXNlKHcpOwoKICAgIEN1cnNvck1hc3NpdmVBZGp1c3Qodyk7Cgog
ICAgRHJhd0FsbFRleHQodyk7CgogICAgQ3Vyc29yRHJhdyh3KTsKfQoKCgoKCgoKc3RhdGljIEJv
b2xlYW4KSW5Xb3JkKGNoYXIgcykKewogICAgc3dpdGNoIChzKQogICAgewogICAgY2FzZSAnICc6
CiAgICBjYXNlICdcdCc6CiAgICBjYXNlICdcbic6CiAgICBjYXNlICchJzoKICAgIGNhc2UgJz8n
OgoKCgoKCiAgICBjYXNlICcsJzoKICAgICAgICByZXR1cm4gMDsKCiAgICBkZWZhdWx0OgogICAg
ICAgIHJldHVybiAxOwogICAgfQp9CgoKc3RhdGljIFhtVGV4dFBvc2l0aW9uCldvcmRFbmQoWG1U
ZXh0RmllbGRXaWRnZXQgdywgWG1UZXh0UG9zaXRpb24gcG9zKQp7CiAgICB3aGlsZSAoKHBvcyA8
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpICYmIEluV29y
ZCgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKVtwb3NdKSkKICAgIHsKICAg
ICAgICBwb3MrKzsKICAgIH0KCiAgICByZXR1cm4gcG9zOwp9CgoKc3RhdGljIFhtVGV4dFBvc2l0
aW9uCldvcmRTdGFydChYbVRleHRGaWVsZFdpZGdldCB3LCBYbVRleHRQb3NpdGlvbiBwb3MpCnsK
ICAgIHdoaWxlICgocG9zID4gMCkgJiYgSW5Xb3JkKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQudmFsdWUpW3BvcyAtIDFdKSkKICAgIHsKICAgICAgICBwb3MtLTsKICAgIH0KCiAgICBy
ZXR1cm4gcG9zOwp9CgoKc3RhdGljIFhtVGV4dFBvc2l0aW9uClNraXBGb3J3YXJkKFhtVGV4dEZp
ZWxkV2lkZ2V0IHcsIFhtVGV4dFBvc2l0aW9uIHBvcykKewogICAgd2hpbGUgKChwb3MgPCAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKSAmJiAhSW5Xb3JkKCgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpW3Bvc10pKQogICAgewogICAgICAg
IHBvcysrOwogICAgfQoKICAgIHJldHVybiBwb3M7Cn0KCgpzdGF0aWMgWG1UZXh0UG9zaXRpb24K
U2tpcEJhY2t3YXJkKFhtVGV4dEZpZWxkV2lkZ2V0IHcsIFhtVGV4dFBvc2l0aW9uIHBvcykKewog
ICAgd2hpbGUgKChwb3MgPiAwKSAmJiAhSW5Xb3JkKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQudmFsdWUpW3BvcyAtIDFdKSkKICAgIHsKICAgICAgICBwb3MtLTsKICAgIH0KCiAgICBy
ZXR1cm4gcG9zOwp9CgoKc3RhdGljIFhtVGV4dFNjYW5UeXBlClNjYW5UeXBlKFhtVGV4dEZpZWxk
V2lkZ2V0IHcpCnsKICAgIFhtVGV4dFNjYW5UeXBlIHR5cGU7CgogICAgaWYgKCgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuc2VsZWN0aW9uX2FycmF5KSkKICAgIHsKICAgICAgICBpZiAo
dy0+dGV4dC5zYXJyYXlfaW5kZXggPj0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5z
ZWxlY3Rpb25fYXJyYXlfY291bnQpKQogICAgICAgIHsKICAgICAgICAgICAgdy0+dGV4dC5zYXJy
YXlfaW5kZXggPSAwOwogICAgICAgIH0KCiAgICAgICAgdHlwZSA9ICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQuc2VsZWN0aW9uX2FycmF5KVt3LT50ZXh0LnNhcnJheV9pbmRleF07CiAg
ICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgc3dpdGNoICh3LT50ZXh0LnNhcnJheV9pbmRleCkK
ICAgICAgICB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgICB0eXBlID0gWG1TRUxFQ1RfV09S
RDsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgdHlwZSA9
IFhtU0VMRUNUX0FMTDsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgIHR5cGUgPSBYbVNFTEVDVF9QT1NJVElPTjsKICAgICAgICAgICAgdy0+dGV4dC5zYXJy
YXlfaW5kZXggPSAwOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgcmV0
dXJuIHR5cGU7Cn0KCgpzdGF0aWMgWG1UZXh0UG9zaXRpb24KU2NhblR5cGVTdGFydChYbVRleHRG
aWVsZFdpZGdldCB3LCBYbVRleHRQb3NpdGlvbiBwb3MpCnsKICAgIHN3aXRjaCAoU2NhblR5cGUo
dykpCiAgICB7CiAgICBjYXNlIFhtU0VMRUNUX1dPUkQ6CiAgICAgICAgcG9zID0gV29yZFN0YXJ0
KHcsIHBvcyk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSBYbVNFTEVDVF9XSElURVNQQUNFOgog
ICAgICAgIHBvcyA9IFNraXBCYWNrd2FyZCh3LCBwb3MpOwogICAgICAgIGJyZWFrOwoKICAgIGNh
c2UgWG1TRUxFQ1RfTElORToKICAgIGNhc2UgWG1TRUxFQ1RfUEFSQUdSQVBIOgogICAgY2FzZSBY
bVNFTEVDVF9BTEw6CiAgICAgICAgcG9zID0gMDsKICAgICAgICBicmVhazsKCiAgICBjYXNlIFht
U0VMRUNUX1BPU0lUSU9OOgogICAgZGVmYXVsdDoKICAgICAgICBicmVhazsKICAgIH0KCiAgICBy
ZXR1cm4gcG9zOwp9CgoKc3RhdGljIFhtVGV4dFBvc2l0aW9uClNjYW5UeXBlRW5kKFhtVGV4dEZp
ZWxkV2lkZ2V0IHcsIFhtVGV4dFBvc2l0aW9uIHBvcykKewogICAgc3dpdGNoIChTY2FuVHlwZSh3
KSkKICAgIHsKICAgIGNhc2UgWG1TRUxFQ1RfV09SRDoKICAgICAgICBwb3MgPSBXb3JkRW5kKHcs
IHBvcyk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSBYbVNFTEVDVF9XSElURVNQQUNFOgogICAg
ICAgIHBvcyA9IFNraXBGb3J3YXJkKHcsIHBvcyk7CiAgICAgICAgYnJlYWs7CgogICAgY2FzZSBY
bVNFTEVDVF9MSU5FOgogICAgY2FzZSBYbVNFTEVDVF9QQVJBR1JBUEg6CiAgICBjYXNlIFhtU0VM
RUNUX0FMTDoKICAgICAgICBwb3MgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0
cmluZ19sZW5ndGgpOwogICAgICAgIGJyZWFrOwoKICAgIGNhc2UgWG1TRUxFQ1RfUE9TSVRJT046
CiAgICBkZWZhdWx0OgogICAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIHBvczsKfQoKCgoK
CgpzdGF0aWMgdm9pZApWZXJpZnlCZWxsKFhtVGV4dEZpZWxkV2lkZ2V0IHcpCnsKICAgIGlmICgo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZlcmlmeV9iZWxsKSkKICAgIHsKICAgICAg
ICBYQmVsbCgoKCgoT2JqZWN0KSgoV2lkZ2V0KXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y
ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSgoV2lkZ2V0KXcpKS0+Y29y
ZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC5wYXJlbnQt
PmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgNTApOwogICAgfQp9CgoKc3RhdGljIEJvb2xlYW4KRG9D
dXJzb3JNb3ZlKFhtVGV4dEZpZWxkV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICBY
bVRleHRQb3NpdGlvbiBwb3MsIEJvb2xlYW4gaGlnaGxpZ2h0LCBCb29sZWFuIGRyYXdpdCkKewog
ICAgWG1UZXh0VmVyaWZ5Q2FsbGJhY2tTdHJ1Y3QgY2JzOwoKICAgIGlmIChwb3MgPiAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIHBv
cyA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAgICB9
CgogICAgY2JzLmRvaXQgPSAxOwogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQubW90aW9uX3ZlcmlmeV9jYWxsYmFjaykpCiAgICB7CiAgICAgICAgY2JzLnJlYXNvbiA9IFht
Q1JfTU9WSU5HX0lOU0VSVF9DVVJTT1I7CiAgICAgICAgY2JzLmV2ZW50ID0gZXY7CiAgICAgICAg
Y2JzLmN1cnJJbnNlcnQgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9w
b3NpdGlvbik7CiAgICAgICAgY2JzLm5ld0luc2VydCA9IHBvczsKICAgICAgICBjYnMuc3RhcnRQ
b3MgPSBjYnMuZW5kUG9zID0gMDsKICAgICAgICBjYnMudGV4dCA9ICgodm9pZCAqKTApOwoKICAg
ICAgICBYdENhbGxDYWxsYmFja3MoKFdpZGdldCl3LCAoKGNoYXIgKikmX1htU3RyaW5nc1s4MTc4
XSksICZjYnMpOwoKICAgICAgICBpZiAoY2JzLmRvaXQpCiAgICAgICAgewogICAgICAgICAgICBw
b3MgPSBjYnMubmV3SW5zZXJ0OwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoY2JzLmRvaXQpCiAg
ICB7CiAgICAgICAgaWYgKGhpZ2hsaWdodCkKICAgICAgICB7CiAgICAgICAgICAgIENsZWFySGln
aGxpZ2h0KHcpOwogICAgICAgIH0KCiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5jdXJzb3JfcG9zaXRpb24pID0gcG9zOwogICAgICAgIGlmIChkcmF3aXQpCiAgICAgICAg
ewogICAgICAgICAgICBEcmF3TW92ZSh3KTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7
CiAgICAgICAgVmVyaWZ5QmVsbCh3KTsKICAgIH0KCiAgICAodm9pZClfWG1JbVNlbmRTcG90KChX
aWRnZXQpdyk7CiAgICByZXR1cm4gY2JzLmRvaXQ7Cn0KCgpzdGF0aWMgdm9pZApEb0luc2VydChY
bVRleHRGaWVsZFdpZGdldCB3LCBYRXZlbnQgKmV2LCBjaGFyICpidWYsIGludCBsZW4pCnsKICAg
IGlmIChsZW4gPD0gMCkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCEoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmVkaXRhYmxlKSkKICAgIHsKICAgICAgICBWZXJp
ZnlCZWxsKHcpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoX0x0RGVidWdJbkRlYnVn
KCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdykpCiAgICB7CiAgICBjaGFyICp0
bXA7CgoKICAgICAgICB0bXAgPSBYdE1hbGxvYyhsZW4rMSk7CiAgICAgICAgKF9fZXh0ZW5zaW9u
X18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChidWYpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChs
ZW4pID8gKHN0cmxlbiAoYnVmKSArIDEgPj0gKChzaXplX3QpIChsZW4pKSA/IChjaGFyICopIG1l
bWNweSAodG1wLCBidWYsIGxlbikgOiBzdHJuY3B5ICh0bXAsIGJ1ZiwgbGVuKSkgOiBzdHJuY3B5
ICh0bXAsIGJ1ZiwgbGVuKSkpOwogICAgICAgIHRtcFtsZW5dID0gJ1wwJzsKICAgICAgICBfTHRE
ZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICJEb0luc2VydChidWYg
JyVzJyBsZW4gJWQpXG4iLCB0bXAsIGxlbik7CgogICAgICAgIFh0RnJlZSh0bXApOwogICAgfQoK
ICAgIGlmIChsZW4gPD0gMCkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHct
PnRleHQuaGFzX3ByaW1hcnkgJiYgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wZW5k
aW5nX2RlbGV0ZSkgJiYKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1
cnNvcl9wb3NpdGlvbikgPj0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bv
c19sZWZ0KSAmJgogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29y
X3Bvc2l0aW9uKSA8PSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX3Jp
Z2h0KSkKICAgIHsKICAgICAgICBpbnQgc3RhcnQsIGVuZDsKCiAgICAgICAgc3RhcnQgPSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQpOwogICAgICAgIGVuZCA9
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpOwogICAgICAg
IFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKChXaWRnZXQpdywtMSwtMSxldj9ldi0+eGtleS50aW1l
OjBMKTsKICAgICAgICBNb2RpZnlUZXh0KHcsIGV2LAogICAgICAgICAgICAgICAgICAgc3RhcnQs
IGVuZCwKICAgICAgICAgICAgICAgICAgIGJ1ZiwgbGVuLAogICAgICAgICAgICAgICAgICAgTWFz
c2l2ZUNoYW5nZURyYXcsIENQX0VuZE9mSW5zZXJ0KTsKICAgIH0KICAgIGVsc2UgaWYgKCgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA8PSAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIFhtVGV4
dEZpZWxkU2V0U2VsZWN0aW9uKChXaWRnZXQpdywtMSwtMSxldj9ldi0+eGtleS50aW1lOjBMKTsK
ICAgICAgICBNb2RpZnlUZXh0KHcsIGV2LAogICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLCAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbiksCiAgICAgICAgICAgICAgICAgICBidWYsIGxl
biwKICAgICAgICAgICAgICAgICAgIERyYXcsIENQX0VuZE9mSW5zZXJ0KTsKICAgIH0KfQoKc3Rh
dGljIHZvaWQKRG9TY2FuVHlwZShYbVRleHRGaWVsZFdpZGdldCB3LCBYRXZlbnQgKmV2LCBYbVRl
eHRQb3NpdGlvbiBwb3MpCnsKICAgIHN3aXRjaCAoU2NhblR5cGUodykpCiAgICB7CiAgICBjYXNl
IFhtU0VMRUNUX1BPU0lUSU9OOgogICAgICAgIERvQ3Vyc29yTW92ZSh3LCBldiwgcG9zLCAxLCAx
KTsKCiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX2FuY2hvcikg
PSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbik7CiAgICAg
ICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LnByaW1fYW5jaG9yKSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJp
bV9wb3NfbGVmdCkgPQogICAgICAgICAgICBTY2FuVHlwZVN0YXJ0KHcsIHBvcyk7CiAgICAgICAg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19yaWdodCkgPSBTY2FuVHlw
ZUVuZCh3LCBwb3MpOwoKCiAgICAgICAgUHJpbWFyeVNlbGVjdGlvbkNvbXBsZXRlKHcsIGV2LT54
YnV0dG9uLnRpbWUpOwogICAgICAgIERyYXcodyk7CiAgICAgICAgYnJlYWs7CiAgICB9Cn0KCgoK
CgoKCnN0YXRpYyB2b2lkCkV4dGVuZEhpZ2hsaWdodChYbVRleHRGaWVsZFdpZGdldCB3KQp7CiAg
ICBpbnQgeCwgcG9zOwoKICAgIGlmICghKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lv
biAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5BbGxvd1Nl
bGVjdGlvbikpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHggPSB3LT50ZXh0LnNl
bGVjdF9wb3NfeDsKCiAgICBpZiAoeCA8IChpbnQpKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4
dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5Y
RHJhdykpCiAgICB7CiAgICAgICAgcG9zID0gVGV4dFBpeGVsVG9TZWxlY3Rpb25Qb3ModywgKGlu
dCkwKTsKICAgICAgICBpZiAocG9zID4gMCkKICAgICAgICB7CiAgICAgICAgICAgIHBvcy0tOwog
ICAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHggPiAoaW50KSgoKChYbVRleHRGaWVsZFBhcnRM
ZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5z
aW9uKSktPlhEcmF3KSArICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWFyZ2luX2Jv
dHRvbSkpKQogICAgewogICAgICAgIHBvcyA9IFRleHRQaXhlbFRvU2VsZWN0aW9uUG9zKHcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKCgoWG1UZXh0RmllbGRQYXJ0
TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVu
c2lvbikpLT5YRHJhdykgKyAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9i
b3R0b20pKSk7CiAgICAgICAgaWYgKHBvcyA8ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuc3RyaW5nX2xlbmd0aCkpCiAgICAgICAgewogICAgICAgICAgICBwb3MrKzsKICAgICAgICB9
CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgcG9zID0gVGV4dFBpeGVsVG9TZWxlY3Rpb25Q
b3ModywgeCk7CiAgICB9CgogICAgaWYgKHBvcyA9PSAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LmN1cnNvcl9wb3NpdGlvbikpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAg
RG9DdXJzb3JNb3ZlKHcsICgodm9pZCAqKTApLCBwb3MsIDAsIDEpOwoKICAgIGlmIChwb3MgPCAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fYW5jaG9yKSkKICAgIHsKICAgICAg
ICBwb3MgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQpID0g
U2NhblR5cGVTdGFydCh3LCBwb3MpOwoKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LnByaW1fcG9zX3JpZ2h0KSA9IFNjYW5UeXBlRW5kKHcsICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQucHJpbV9hbmNob3IpKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAg
ICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQpID0gU2NhblR5
cGVTdGFydCh3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fYW5jaG9yKSk7
CgogICAgICAgIHBvcyA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nf
cmlnaHQpID0gU2NhblR5cGVFbmQodywgcG9zKTsKICAgIH0KCiAgICBTZXRTaW5nbGVIaWdobGln
aHQoKFdpZGdldCl3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xl
ZnQpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KSk7CiAg
ICBDdXJzb3JFcmFzZSh3KTsKCiAgICBpZiAoTWFrZVBvc2l0aW9uVmlzaWJsZSh3LCBwb3MpKQog
ICAgewogICAgICAgIERyYXdUZXh0UmVwb3NpdGlvbih3KTsKICAgIH0KCiAgICAgICAgRHJhd1Np
bmdsZUhpZ2hsaWdodCh3KTsKICAgICAgICBDdXJzb3JEcmF3KHcpOwp9CgoKc3RhdGljIHZvaWQK
RXh0ZW5kVGltZXIoWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdEludGVydmFsSWQgKmlkcCkKewog
ICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldCljbGllbnRfZGF0YTsK
ICAgIGludCBoaWdobGlnaHRfdGltZTsKCiAgICBoaWdobGlnaHRfdGltZSA9IFh0R2V0TXVsdGlD
bGlja1RpbWUoKCgoKE9iamVjdCkoKFdpZGdldCl3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNv
cmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoKFdpZGdldCl3KSktPmNv
cmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKChXaWRnZXQpdykpLT5vYmplY3QucGFyZW50
LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSkpIC8gMjsKCiAgICBFeHRlbmRIaWdobGlnaHQodyk7Cgog
ICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zZWxlY3RfaWQpID0gWHRBcHBBZGRU
aW1lT3V0KFh0V2lkZ2V0VG9BcHBsaWNhdGlvbkNvbnRleHQoKFdpZGdldCl3KSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWhpZ2hsaWdodF90
aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0ZW5kVGltZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoWHRQb2ludGVyKXcpOwoK
fQoKCnN0YXRpYyBCb29sZWFuCkNvbnZlcnRTZWxlY3Rpb24oV2lkZ2V0IGF3LCBBdG9tICpzZWxl
Y3Rpb24sIEF0b20gKnRhcmdldCwgQXRvbSAqdHlwZSwKICAgICAgICAgICAgICAgICBYdFBvaW50
ZXIgKnZhbHVlLCB1bnNpZ25lZCBsb25nICpsZW5ndGgsIGludCAqZm9ybWF0KQp7CiAgICBYbVRl
eHRGaWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgQXRvbSBhdG9tX2Nv
bXBfdGV4dDsKICAgIEF0b20gYXRvbV90ZXh0OwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIv
WG0vVGV4dEYuYyIsIGF3LCAiQ29udmVydFNlbGVjdGlvblxuIik7CgogICAgYXRvbV9jb21wX3Rl
eHQgPSBYbUludGVybkF0b20oKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+
Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLnNj
cmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVl
bi0+ZGlzcGxheSksICJDT01QT1VORF9URVhUIiwgMCk7CiAgICBhdG9tX3RleHQgPSBYbUludGVy
bkF0b20oKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5j
bGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxh
eSA6ICgoT2JqZWN0KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSks
ICJURVhUIiwgMCk7CgogICAgaWYgKCp0YXJnZXQgPT0gKChBdG9tKSAzMSkpewogICAgICAgICps
ZW5ndGggPSAobG9uZykoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxlbik7CgoK
CgogICAgICAgICp2YWx1ZSA9ICgoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq
KSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25U
ZXh0KSkgIT0gKCh2b2lkICopMCkgPyAoc3RyY3B5KFh0TWFsbG9jKCh1bnNpZ25lZClzdHJsZW4o
KCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkgKyAxKSwgKCgoWG1UZXh0
RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkpIDogKCh2b2lkICopMCkpOwogICAgICAg
ICp0eXBlID0gKChBdG9tKSAzMSk7CiAgICB9CiAgICBlbHNlIGlmICgqdGFyZ2V0ID09IGF0b21f
Y29tcF90ZXh0IHx8ICp0YXJnZXQgPT0gYXRvbV90ZXh0KXsKCiAgICAgICAgICAgIFhUZXh0UHJv
cGVydHkgcHJvcDsKICAgICAgICAgICAgY2hhciAqYnVmOwogICAgICAgICAgICBpbnQgcmV0OwoK
ICAgICAgICAgICAgYnVmID0gWHRNYWxsb2MoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVu
c2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxl
Y3Rpb25MZW4pICsgMSk7CiAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29u
c3RhbnRfcCAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkgJiYgX19i
dWlsdGluX2NvbnN0YW50X3AgKCgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uTGVu
KSkgPyAoc3RybGVuICgoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvblRleHQpKSAr
IDEgPj0gKChzaXplX3QpICgoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxlbikp
KSA/IChjaGFyICopIG1lbWNweSAoYnVmLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5z
aW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVj
dGlvblRleHQpLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxlbikpIDogc3Ry
bmNweSAoYnVmLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvblRleHQpLCAoKChY
bVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxlbikpKSA6IHN0cm5jcHkgKGJ1ZiwgKCgo
WG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCko
dykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSwgKCgoWG1UZXh0RmllbGRQYXJ0
TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVu
c2lvbikpLT5TZWxlY3Rpb25MZW4pKSkpOwogICAgICAgICAgICBidWZbKCgoWG1UZXh0RmllbGRQ
YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4
dGVuc2lvbikpLT5TZWxlY3Rpb25MZW4pXSA9ICdcMCc7CgogICAgICAgICAgICByZXQgPSBYbWJU
ZXh0TGlzdFRvVGV4dFByb3BlcnR5KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFz
cy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUu
c2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3Jl
ZW4tPmRpc3BsYXkpLCAmYnVmLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhD
b21wb3VuZFRleHRTdHlsZSwgJnByb3ApOwoKICAgICAgICAgICAgWHRGcmVlKGJ1Zik7CiAgICAg
ICAgICAgIGlmIChyZXQgIT0gMCl7CiAgICAgICAgICAgICAgICAqbGVuZ3RoID0gMDsKICAgICAg
ICAgICAgICAgICp2YWx1ZSA9ICgodm9pZCAqKTApOwogICAgICAgICAgICB9CiAgICAgICAgICAg
IGVsc2V7CiAgICAgICAgICAgICAgICBidWYgPSBYdE1hbGxvYyhwcm9wLm5pdGVtcyArIDEpOwog
ICAgICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgcHJvcC52YWx1ZSwgcHJvcC5uaXRlbXMpOwogICAg
ICAgICAgICAgICAgYnVmW3Byb3Aubml0ZW1zXSA9ICdcMCc7CiAgICAgICAgICAgICAgICAqbGVu
Z3RoID0gcHJvcC5uaXRlbXM7CiAgICAgICAgICAgICAgICAqdmFsdWUgPSBidWY7CiAgICAgICAg
ICAgIH0KICAgICAgICAgICAqdHlwZSA9IGF0b21fY29tcF90ZXh0OwoKICAgIH0KICAgIGVsc2UK
ICAgICAgICByZXR1cm4gMDsKCiAgICAqZm9ybWF0ID0gODsKICAgIHJldHVybiAxOwp9CgoKCnN0
YXRpYyB2b2lkCkxvc2VTZWxlY3Rpb24oV2lkZ2V0IGF3LCBBdG9tICpzZWxlY3Rpb24pCnsKICAg
ICAgICBYbVRleHRGaWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgICAg
ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCBhdywgIkxvc2VTZWxlY3Rpb25c
biIpOwoKICAgICAgICBpZih3LT50ZXh0Lmhhc19wcmltYXJ5KSB7CiAgICAgICAgICAgICAgICB3
LT50ZXh0Lmhhc19wcmltYXJ5ID0gMDsKICAgICAgICAgICAgICAgIGlmICgoKChYbVRleHRGaWVs
ZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
ZXh0ZW5zaW9uKSktPkVjaG8pICYmICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJp
bV9wb3NfbGVmdCkgPj0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBDdXJzb3JFcmFzZSh3
KTsKICAgICAgICAgICAgICAgICAgICAgICAgRHJhd1RleHQodywgKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5wcmltX3Bvc19yaWdodCksIDApOwogICAgICAgICAgICAgICAgICAgICAgICBDdXJzb3JE
cmF3KHcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQucHJpbV9wb3NfcmlnaHQpID0gLTE7CiAgICAgICAgICAgICAgICAoKChYbVRleHRG
aWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQuZXh0ZW5zaW9uKSktPk9sZEhpZ2hsaWdodFN0YXJ0KSA9ICgoKFhtVGV4dEZpZWxkUGFydExl
c3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNp
b24pKS0+T2xkSGlnaGxpZ2h0RW5kKSA9IC0xOwogICAgICAgIH0KfQoKCgoKdHlwZWRlZiBzdHJ1
Y3QgewogICAgWEV2ZW50ICpldjsKICAgIGludCB1c2VfY3RleHQ7Cn0gU2VsZWN0aW9uQ2xpZW50
RGF0YTsKCgoKc3RhdGljIHZvaWQKUmVxdWVzdFNlbGVjdGlvbihXaWRnZXQgYXcsIFh0UG9pbnRl
ciBjbGllbnQsIEF0b20gKnNlbGVjdGlvbiwgQXRvbSAqdHlwZSwKICAgICAgICAgICAgICAgICBY
dFBvaW50ZXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgKmxlbmd0aCwgaW50ICpmb3JtYXQpCnsKICAg
IFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CiAgICBTZWxlY3Rp
b25DbGllbnREYXRhICpjbGllbnRfZGF0YSA9IChTZWxlY3Rpb25DbGllbnREYXRhKiljbGllbnQ7
CiAgICBYRXZlbnQgKmV2ID0gKFhFdmVudCopY2xpZW50X2RhdGEtPmV2OwoKICAgIF9MdERlYnVn
KCJDT1BZVE8iLCBhdywgIiVzOlJlcXVlc3RTZWxlY3Rpb24oJWQpXG5cdCVzID4lczwgbGVuZ3Ro
ICVkXG4iLCAiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAzNTg4LCAqc2VsZWN0aW9uID09ICgo
QXRvbSkgMSkgPyAiWEFfUFJJTUFSWSIgOiAiWEFfU0VDT05EQVJZIiwgIXZhbHVlID8gIk5VTEwi
IDogdmFsdWUsICpsZW5ndGgpOwoKCgoKCiAgICBpZiAoKCF2YWx1ZSkgfHwgKCpsZW5ndGggPT0g
MCkpCiAgICB7CiAgICAgICAgaWYgKCpzZWxlY3Rpb24gPT0gKChBdG9tKSAyKSkKICAgICAgICB7
CiAgICAgICAgICAgIGlmIChjbGllbnRfZGF0YS0+dXNlX2N0ZXh0ID09IDEpewogICAgICAgICAg
ICAgICAgY2xpZW50X2RhdGEtPnVzZV9jdGV4dCA9IDA7CiAgICAgICAgICAgICAgICBYdEdldFNl
bGVjdGlvblZhbHVlKGF3LCAoKEF0b20pIDIpLCAoKEF0b20pIDMxKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSZXF1ZXN0U2VsZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChYdFBvaW50ZXIpY2xpZW50X2RhdGEsIGV2LT54YnV0dG9uLnRpbWUpOwogICAg
ICAgICAgICB9CiAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICBjbGllbnRfZGF0YS0+
dXNlX2N0ZXh0ID0gMTsKICAgICAgICAgICAgICAgIFh0R2V0U2VsZWN0aW9uVmFsdWUoYXcsICgo
QXRvbSkgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1JbnRlcm5BdG9tKCgo
KChPYmplY3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5p
dGVkICYgMHgwNCkgPyAoKFdpZGdldCkoYXcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9i
amVjdCkoYXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAiQ09NUE9V
TkRfVEVYVCIsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RTZWxl
Y3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFh0UG9pbnRlciljbGllbnRf
ZGF0YSwgZXYtPnhidXR0b24udGltZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAg
ZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGNsaWVudF9kYXRhLT51c2VfY3RleHQgPT0g
MSl7CiAgICAgICAgICAgICAgICBjbGllbnRfZGF0YS0+dXNlX2N0ZXh0ID0gMDsKICAgICAgICAg
ICAgICAgIFh0R2V0U2VsZWN0aW9uVmFsdWUoYXcsICgoQXRvbSkgMSksICgoQXRvbSkgMzEpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RTZWxlY3Rpb24sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKFh0UG9pbnRlciljbGllbnRfZGF0YSwgZXYtPnhidXR0
b24udGltZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAg
IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi
UmVxdWVzdFNlbGVjdGlvbjogbm8gc2VsZWN0aW9uIGF2YWlsYWJsZSIpOwogICAgICAgICAgICAg
ICAgWHRGcmVlKChjaGFyICopY2xpZW50KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0K
ICAgIGVsc2UKICAgIHsKICAgICAgICBpZiAoKnNlbGVjdGlvbiA9PSAoKEF0b20pIDIpKQogICAg
ICAgIHsKICAgICAgICAgICAgWFRleHRQcm9wZXJ0eSBwcm9wOwogICAgICAgICAgICBpbnQgY291
bnQsIGk7CiAgICAgICAgICAgIGNoYXIgKipsaXN0OwoKICAgICAgICAgICAgaWYgKCp0eXBlID09
ICgoQXRvbSkgMzEpKXsKICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKCiAgICAgICAgICAgICAg
ICBidWYgPSBYdE1hbGxvYygqbGVuZ3RoICsgMSk7CiAgICAgICAgICAgICAgICAoX19leHRlbnNp
b25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKChjaGFyICopdmFsdWUpICYmIF9fYnVpbHRpbl9j
b25zdGFudF9wICgqbGVuZ3RoKSA/IChzdHJsZW4gKChjaGFyICopdmFsdWUpICsgMSA+PSAoKHNp
emVfdCkgKCpsZW5ndGgpKSA/IChjaGFyICopIG1lbWNweSAoYnVmLCAoY2hhciAqKXZhbHVlLCAq
bGVuZ3RoKSA6IHN0cm5jcHkgKGJ1ZiwgKGNoYXIgKil2YWx1ZSwgKmxlbmd0aCkpIDogc3RybmNw
eSAoYnVmLCAoY2hhciAqKXZhbHVlLCAqbGVuZ3RoKSkpOwogICAgICAgICAgICAgICAgYnVmWyps
ZW5ndGhdID0gJ1wwJzsKCgogICAgICAgICAgICAgICAgWG1iVGV4dExpc3RUb1RleHRQcm9wZXJ0
eSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3Nf
aW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgo
T2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgJmJ1Ziwg
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ29tcG91bmRUZXh0U3R5bGUsICZw
cm9wKTsKCiAgICAgICAgICAgICAgICAgWHRGcmVlKGJ1Zik7CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgZWxzZXsKICAgICAgICAgICAgICAgIHByb3AudmFsdWUgPSAodW5zaWduZWQgY2hhciAq
KXZhbHVlOwogICAgICAgICAgICAgICAgcHJvcC5lbmNvZGluZyA9ICp0eXBlOwogICAgICAgICAg
ICAgICAgcHJvcC5mb3JtYXQgPSAqZm9ybWF0OwogICAgICAgICAgICAgICAgcHJvcC5uaXRlbXMg
PSAqbGVuZ3RoOwogICAgICAgICAgICB9CgogICAgICAgICAgICBYbWJUZXh0UHJvcGVydHlUb1Rl
eHRMaXN0KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5j
bGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5
IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAm
cHJvcCwgJmxpc3QsICZjb3VudCk7CgogICAgICAgICAgICBmb3IoaT0wOyBpPGNvdW50OyBpKysp
ewogICAgICAgICAgICAgICAgRG9JbnNlcnQodywgZXYsIGxpc3RbaV0sIHN0cmxlbihsaXN0W2ld
KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAg
ICAgICAgWG1UZXh0UG9zaXRpb24gcG9zOwoKICAgICAgICAgICAgcG9zID0gVGV4dFBpeGVsVG9T
ZWxlY3Rpb25Qb3ModywgZXYtPnhidXR0b24ueCk7CiAgICAgICAgICAgIF9MdERlYnVnKCJDT1BZ
VE8iLCBhdywgIiVzOlJlcXVlc3RTZWxlY3Rpb24oJWQpIC0gJWQgJWRcbiIsICIuLi8uLi8uLi9s
aWIvWG0vVGV4dEYuYyIsIDM2NjIsIGV2LT54YnV0dG9uLngsIHBvcyk7CgoKICAgICAgICAgICAg
X0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXM6ICVkXG4i
LCAiZXZlbnQgcG9zIiwgKGludClwb3MpOwoKICAgICAgICAgICAgaWYgKF9MdERlYnVnSW5EZWJ1
ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcpKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0
KXcsICJSZXF1ZXN0U2VsZWN0aW9uOiBpbnNlcnRpbmcgJyVzJyBsZW5ndGg9JWQgYXQgcG9zOiAl
ZFxuIiwgKGNoYXIgKil2YWx1ZSwgKGludCkoKmxlbmd0aCksIHBvcyk7CgoKICAgICAgICAgICAg
fQoKICAgICAgICAgICAgaWYgKERvQ3Vyc29yTW92ZSh3LCBldiwgcG9zLCAxLCAxKSkKICAgICAg
ICAgICAgewoKICAgICAgICAgICAgICAgIFhUZXh0UHJvcGVydHkgcHJvcDsKICAgICAgICAgICAg
ICAgIGludCBjb3VudCwgaTsKICAgICAgICAgICAgICAgIGNoYXIgKipsaXN0OwoKICAgICAgICAg
ICAgICAgIGlmICgqdHlwZSA9PSAoKEF0b20pIDMxKSl7CiAgICAgICAgICAgICAgICAgICAgY2hh
ciAqYnVmOwoKICAgICAgICAgICAgICAgICAgICBidWYgPSBYdE1hbGxvYygqbGVuZ3RoICsgMSk7
CiAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9w
ICgoY2hhciAqKXZhbHVlKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAoKmxlbmd0aCkgPyAoc3Ry
bGVuICgoY2hhciAqKXZhbHVlKSArIDEgPj0gKChzaXplX3QpICgqbGVuZ3RoKSkgPyAoY2hhciAq
KSBtZW1jcHkgKGJ1ZiwgKGNoYXIgKil2YWx1ZSwgKmxlbmd0aCkgOiBzdHJuY3B5IChidWYsIChj
aGFyICopdmFsdWUsICpsZW5ndGgpKSA6IHN0cm5jcHkgKGJ1ZiwgKGNoYXIgKil2YWx1ZSwgKmxl
bmd0aCkpKTsKICAgICAgICAgICAgICAgICAgICBidWZbKmxlbmd0aF0gPSAnXDAnOwoKCiAgICAg
ICAgICAgICAgICAgICAgWG1iVGV4dExpc3RUb1RleHRQcm9wZXJ0eSgoKCgoT2JqZWN0KSh3KSkt
Pm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAo
KFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVj
dC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgJmJ1ZiwgMSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBYQ29tcG91bmRUZXh0U3R5bGUsICZwcm9wKTsKCiAgICAgICAgICAg
ICAgICAgICAgWHRGcmVlKGJ1Zik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBl
bHNlewogICAgICAgICAgICAgICAgICAgIHByb3AudmFsdWUgPSAodW5zaWduZWQgY2hhciAqKXZh
bHVlOwogICAgICAgICAgICAgICAgICAgIHByb3AuZW5jb2RpbmcgPSAqdHlwZTsKICAgICAgICAg
ICAgICAgICAgICBwcm9wLmZvcm1hdCA9ICpmb3JtYXQ7CiAgICAgICAgICAgICAgICAgICAgcHJv
cC5uaXRlbXMgPSAqbGVuZ3RoOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIFht
YlRleHRQcm9wZXJ0eVRvVGV4dExpc3QoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns
YXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29y
ZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNj
cmVlbi0+ZGlzcGxheSksICZwcm9wLCAmbGlzdCwgJmNvdW50KTsKCiAgICAgICAgICAgICAgICBm
b3IoaT0wOyBpPGNvdW50OyBpKyspewogICAgICAgICAgICAgICAgICAgIERvSW5zZXJ0KHcsIGV2
LCBsaXN0W2ldLCBzdHJsZW4obGlzdFtpXSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICAgIFh0RnJlZSgoY2hhciAqKWNsaWVudCk7CiAgICAgICAgWHRG
cmVlKChjaGFyICopdmFsdWUpOwogICAgfQp9CgoKc3RhdGljIHZvaWQKUHJpbWFyeVNlbGVjdGlv
bkNvbXBsZXRlKFhtVGV4dEZpZWxkV2lkZ2V0IHcsIFRpbWUgdGltZSkKewogICAgaW50IGxlbjsK
CiAgICBpZiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkKICAgIHsK
ICAgICAgICBYdEZyZWUoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSk7
CiAgICB9CgogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSA9ICgo
dm9pZCAqKTApOwogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25MZW4pID0g
MDsKICAgIGxlbiA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nfcmln
aHQpIC0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KTsKCiAg
ICAgICAgU2V0U2luZ2xlSGlnaGxpZ2h0KChXaWRnZXQpdywgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5wcmltX3Bvc19yaWdodCkpOwoKICAgIGlmIChsZW4gPiAwKQogICAgewogICAgICAgIHctPnRl
eHQuaGFzX3ByaW1hcnkgPSAxOwogICAgICAgICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl
bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2Vs
ZWN0aW9uTGVuKSA9IGxlbjsKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5z
aW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVj
dGlvblRleHQpID0gWHRNYWxsb2MobGVuKTsKICAgICAgICAoX19leHRlbnNpb25fXyAoX19idWls
dGluX2NvbnN0YW50X3AgKCYoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKVso
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQpXSkgJiYgX19idWls
dGluX2NvbnN0YW50X3AgKGxlbikgPyAoc3RybGVuICgmKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC52YWx1ZSlbKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19s
ZWZ0KV0pICsgMSA+PSAoKHNpemVfdCkgKGxlbikpID8gKGNoYXIgKikgbWVtY3B5ICgoKChYbVRl
eHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvblRleHQpLCAmKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC52YWx1ZSlbKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bv
c19sZWZ0KV0sIGxlbikgOiBzdHJuY3B5ICgoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5z
aW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVj
dGlvblRleHQpLCAmKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSlbKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KV0sIGxlbikpIDogc3RybmNw
eSAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdp
ZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSwgJigoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpWygoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQucHJpbV9wb3NfbGVmdCldLCBsZW4pKSk7CgoKCiAgICAgICAgWHRPd25TZWxlY3Rpb24oKFdp
ZGdldCl3LCAoKEF0b20pIDEpLCB0aW1lLAogICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRT
ZWxlY3Rpb24sIExvc2VTZWxlY3Rpb24sICgodm9pZCAqKTApKTsKCgoKCgoKCiAgICB9CiAgICBl
bHNlCiAgICB7CgoKCiAgICAgICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24oKFdpZGdldCl3LC0x
LC0xLHRpbWUpOwogICAgfQp9CgoKCgoKCgpzdGF0aWMgdm9pZApfQmxpbmtDdXJzb3JDYWxsYmFj
ayhYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0SW50ZXJ2YWxJZCAqaWRwKQp7CiAgICBYbVRleHRG
aWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWNsaWVudF9kYXRhOwoKCgogICAgWG1J
bVNldEZvY3VzVmFsdWVzKChXaWRnZXQpY2xpZW50X2RhdGEsICgodm9pZCAqKTApLCAwKTsKCiAg
ICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5ibGlua19vbikpCiAgICB7CiAg
ICAgICAgQ3Vyc29yRXJhc2Uodyk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgQ3Vyc29y
RHJhdyh3KTsKICAgIH0KCiAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnRpbWVy
X2lkKSA9IFh0QXBwQWRkVGltZU91dChYdFdpZGdldFRvQXBwbGljYXRpb25Db250ZXh0KChXaWRn
ZXQpdyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuYmxpbmtfcmF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CbGlua0N1cnNvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoWHRQb2ludGVyKXcpOwp9CgoKCgpleHRlcm4gdm9pZApfWG1U
ZXh0RmllbGRGb2N1c0luKFdpZGdldCB3LCBYRXZlbnQgKmV2ZW50LAogICAgICAgICAgICAgICAg
ICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0VmVy
aWZ5Q2FsbGJhY2tTdHJ1Y3QgY2JzOwogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4
dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwg
KFdpZGdldCl3LCAiJXNcbiIsICJfWG1UZXh0RmllbGRGb2N1c0luIik7CgogICAgaWYgKCBldmVu
dC0+dHlwZSA9PSA5ICYmIGV2ZW50LT54YW55LnNlbmRfZXZlbnQgJiYgISgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh0ZncpKS0+dGV4dC5oYXNfZm9jdXMpICkKICAgIHsKICAgICAgICBDdXJzb3JFcmFz
ZSh0ZncpOwogICAgICAgIEN1cnNvclNldCh0ZncsIDEpOwoKICAgICAgICBpZiAoKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmJsaW5rX3JhdGUpID4gMCAmJiAhKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHRmdykpLT50ZXh0LnRpbWVyX2lkKSkKICAgICAgICB7CiAgICAgICAgICAgICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC50aW1lcl9pZCkgPSBYdEFwcEFkZFRpbWVP
dXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYdFdpZGdldFRvQXBwbGlj
YXRpb25Db250ZXh0KChXaWRnZXQpdGZ3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5i
bGlua19yYXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CbGlua0N1cnNvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKFh0UG9pbnRlcil0ZncpOwogICAgICAgIH0KICAgICAg
ICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBDdXJzb3JEcmF3KHRmdyk7CiAgICAgICAgfQoK
ICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmZvY3VzX2NhbGxi
YWNrKSkKICAgICAgICB7CiAgICAgICAgICAgIGNicy5yZWFzb24gPSBYbUNSX0ZPQ1VTOwogICAg
ICAgICAgICBjYnMuZXZlbnQgPSBldmVudDsKICAgICAgICAgICAgY2JzLmN1cnJJbnNlcnQgPSBj
YnMubmV3SW5zZXJ0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9w
b3NpdGlvbik7CiAgICAgICAgICAgIGNicy5zdGFydFBvcyA9IGNicy5lbmRQb3MgPSAwOwogICAg
ICAgICAgICBjYnMudGV4dCA9ICgodm9pZCAqKTApOwoKICAgICAgICAgICAgWHRDYWxsQ2FsbGJh
Y2tMaXN0KChXaWRnZXQpdGZ3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZm9j
dXNfY2FsbGJhY2spLCAmY2JzKTsKICAgICAgICB9CgogICAgICAgIGlmICgoKChYbVRleHRGaWVs
ZFdpZGdldCkodGZ3KSktPnRleHQuZWRpdGFibGUpKQogICAgICAgIHsKICAgICAgICAgICAgWG1J
bVNldEZvY3VzVmFsdWVzKHcsICgodm9pZCAqKTApLCAwKTsKICAgICAgICB9CgogICAgfQogICAg
WHRDYWxsQWN0aW9uUHJvYygoV2lkZ2V0KXRmdywgIlByaW1pdGl2ZUZvY3VzSW4iLCBldmVudCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcywgKm51bV9wYXJhbXMpOwoKfQoKCgpleHRl
cm4gdm9pZApfWG1UZXh0RmllbGRGb2N1c091dChXaWRnZXQgdywgWEV2ZW50ICpldmVudCwKICAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7
CiAgICBYbVRleHRWZXJpZnlDYWxsYmFja1N0cnVjdCBjYnM7CiAgICBYbVRleHRGaWVsZFdpZGdl
dCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGli
L1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgIl9YbVRleHRGaWVsZEZvY3VzT3V0Iik7
CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5oYXNfZm9jdXMpKQog
ICAgewogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQudGltZXJf
aWQpKQogICAgICAgIHsKICAgICAgICAgICAgWHRSZW1vdmVUaW1lT3V0KCgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh0ZncpKS0+dGV4dC50aW1lcl9pZCkpOwogICAgICAgICAgICAoKChYbVRleHRGaWVs
ZFdpZGdldCkodGZ3KSktPnRleHQudGltZXJfaWQpID0gMDsKICAgICAgICB9CgogICAgICAgIEN1
cnNvckVyYXNlKHRmdyk7CiAgICAgICAgQ3Vyc29yU2V0KHRmdywgMCk7CiAgICAgICAgQ3Vyc29y
RHJhdyh0ZncpOwoKICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0
Lmxvc2luZ19mb2N1c19jYWxsYmFjaykpCiAgICAgICAgewogICAgICAgICAgICBjYnMucmVhc29u
ID0gWG1DUl9MT1NJTkdfRk9DVVM7CiAgICAgICAgICAgIGNicy5ldmVudCA9IGV2ZW50OwogICAg
ICAgICAgICBjYnMuY3Vyckluc2VydCA9IGNicy5uZXdJbnNlcnQgPSAoKChYbVRleHRGaWVsZFdp
ZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKTsKICAgICAgICAgICAgY2JzLnN0YXJ0
UG9zID0gY2JzLmVuZFBvcyA9IDA7CiAgICAgICAgICAgIGNicy50ZXh0ID0gKCh2b2lkICopMCk7
CgogICAgICAgICAgICBpZiAoKCgoWG1HYWRnZXQpKHcpKS0+cmVjdGFuZ2xlLm1hbmFnZWQpKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBYdENhbGxDYWxsYmFja0xpc3QoKFdpZGdldCl0
ZncsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5sb3NpbmdfZm9jdXNfY2FsbGJh
Y2spLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNicyk7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CgogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQu
ZWRpdGFibGUpKQogICAgICAgIHsKICAgICAgICAgICAgWG1JbVVuc2V0Rm9jdXMoKFdpZGdldCl0
ZncpOwogICAgICAgIH0KICAgIH0KCgoKCiAgICBYdENhbGxBY3Rpb25Qcm9jKChXaWRnZXQpdGZ3
LCAiUHJpbWl0aXZlRm9jdXNPdXQiLCBldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtcywgKm51bV9wYXJhbXMpOwp9CgoKc3RhdGljIHZvaWQKYWN0aXZhdGUoV2lkZ2V0IHcsIFhF
dmVudCAqZXZlbnQsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAg
WG1BbnlDYWxsYmFja1N0cnVjdCBjYnM7CiAgICBXaWRnZXQgcGFyZW50OwoKICAgIF9MdERlYnVn
KCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAiYWN0aXZhdGUi
KTsKCgogICAgY2JzLnJlYXNvbiA9IFhtQ1JfQUNUSVZBVEU7CiAgICBjYnMuZXZlbnQgPSBldmVu
dDsKCiAgICBYdENhbGxDYWxsYmFja0xpc3QodywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKChYbVRl
eHRGaWVsZFdpZGdldCl3KSktPnRleHQuYWN0aXZhdGVfY2FsbGJhY2spLCAmY2JzKTsKCgoKCgog
ICAgcGFyZW50ID0gdzsKICAgIHdoaWxlICgocGFyZW50ID0gKCgoT2JqZWN0KShwYXJlbnQpKS0+
b2JqZWN0LnBhcmVudCkpICE9ICgodm9pZCAqKTApKQogICAgewogICAgICAgIGlmICgoKCgoKF9Y
bV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0
KShwYXJlbnQpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9u
KSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkocGFy
ZW50KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+
cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdl
dENsYXNzKSgoKCgoT2JqZWN0KShwYXJlbnQpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNv
cmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0
ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lk
Z2V0Q2xhc3MpKCgoKChPYmplY3QpKHBhcmVudCkpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+
Y29yZV9jbGFzcy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/
ICgoKCgqX1htX2Zhc3RQdHIpLT5mbGFncylbKChYbVNFTEVDVElPTl9CT1hfQklUKSA+PiAzKV0p
ICYgKDEgPDwgKChYbVNFTEVDVElPTl9CT1hfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSB8
fCAoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgo
KChPYmplY3QpKHBhcmVudCkpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5l
eHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2Jq
ZWN0KShwYXJlbnQpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5z
aW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgm
KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHBhcmVudCkpLT5vYmplY3Qud2lkZ2V0X2NsYXNz
KSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0
Q2xhc3NFeHRlbnNpb25QdHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCop
KCYoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkocGFyZW50KSktPm9iamVjdC53aWRnZXRfY2xh
c3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFz
dFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtTUVTU0FHRV9CT1hfQklUKSA+
PiAzKV0pICYgKDEgPDwgKChYbU1FU1NBR0VfQk9YX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAw
KSkpICYmICgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFz
cykoKCgoKE9iamVjdCkoKCgoT2JqZWN0KShwYXJlbnQpKS0+b2JqZWN0LnBhcmVudCkpKS0+b2Jq
ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkgJiYgKCgoKChYbUJh
c2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkoKCgoT2JqZWN0KShwYXJlbnQp
KS0+b2JqZWN0LnBhcmVudCkpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3Mu
ZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NF
eHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKCgoKE9iamVjdCkocGFyZW50KSktPm9i
amVjdC5wYXJlbnQpKSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVu
c2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFht
R2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgo
T2JqZWN0KSgoKChPYmplY3QpKHBhcmVudCkpLT5vYmplY3QucGFyZW50KSkpLT5vYmplY3Qud2lk
Z2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgq
X1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zhc3RQdHIpLT5mbGFncylbKChYbURJQUxPR19TSEVM
TF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtRElBTE9HX1NIRUxMX0JJVCkgJiAweDA3KSkgPyAx
IDogMCkgOiAwKSkpCiAgICAgICAgewogICAgICAgICAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGli
L1htL1RleHRGLmMiLCBwYXJlbnQsICJNYW5hZ2VyIHBhcmVudCBhY3RpdmF0ZSBpbiBUZXh0Rlxu
Iik7CgoKICAgICAgICAgICAgWHRDYWxsQWN0aW9uUHJvYyhwYXJlbnQsICJNYW5hZ2VyUGFyZW50
QWN0aXZhdGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LCBwYXJhbXMsICpu
dW1fcGFyYW1zKTsKICAgICAgICB9CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApiYWNrd2FyZF9jaGFy
YWN0ZXIoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBh
cmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9
IChYbVRleHRGaWVsZFdpZGdldCl3OwogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0
Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJiYWNrd2FyZF9jaGFyYWN0ZXIiKTsKCiAgICBpZiAo
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPiAwKQog
ICAgewogICAgICAgIFhtVGV4dFBvc2l0aW9uIHBvczsKICAgICAgICBjaGFyICpwdHI7CiAgICAg
ICAgaW50IG5leHQsIGk7CgogICAgICAgIHB0ciA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0Zncp
KS0+dGV4dC52YWx1ZSk7CiAgICAgICAgbmV4dCA9IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0
aCgoV2lkZ2V0KXRmdywgcHRyLCAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vy
c29yX3Bvc2l0aW9uKS0xKTsKICAgICAgICBwb3MgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3
KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKS0xOwogICAgICAgIGZvcihpPSgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLTI7IGk+PTA7IGktLSl7CiAgICAg
ICAgICAgIGlmIChuZXh0ID4gKGludClfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdGZ3
LCBwdHIsIGkpKXsKICAgICAgICAgICAgICAgIHBvcyA9IGkgKyAxOwogICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG5leHQgPT0gKGludClfWG1UZXh0
Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdGZ3LCBwdHIsIGkpKXsKICAgICAgICAgICAgICAgIHBv
cyA9IGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIERvQ3Vyc29yTW92ZSh0Zncs
IGV2LCBwb3MsIDAsIDEpOwogICAgfQp9CgoKc3RhdGljIHZvaWQKYmFja3dhcmRfd29yZChXaWRn
ZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwg
Km51bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdp
ZGdldCl3OwogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3
LCAiJXNcbiIsICJiYWNrd2FyZF93b3JkIik7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pID4gMCkKICAgIHsKICAgICAgICBYbVRleHRQ
b3NpdGlvbiBwb3M7CgogICAgICAgIHBvcyA9IFdvcmRTdGFydCh0ZncsIFNraXBCYWNrd2FyZCh0
ZncsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pKSk7
CgogICAgICAgIERvQ3Vyc29yTW92ZSh0ZncsIGV2LCBwb3MsIDAsIDEpOwogICAgfQp9CgoKc3Rh
dGljIHZvaWQKYmVlcChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICBTdHJpbmcgKnBhcmFtcywg
Q2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4
dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAiYmVlcCIpOwoKICAgIFhCZWxsKCgoKChPYmplY3Qp
KHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0
KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+
b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCA1MCk7Cn0KCgpzdGF0aWMgdm9p
ZApiZWdpbm5pbmdfb2ZfbGluZShXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICAg
ICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVs
ZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1ZygiLi4vLi4v
Li4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgImJlZ2lubmluZ19vZl9saW5l
Iik7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9z
aXRpb24pID4gMCkKICAgIHsKICAgICAgICBYbVRleHRQb3NpdGlvbiBwb3M7CgogICAgICAgIHBv
cyA9IDA7CgogICAgICAgIERvQ3Vyc29yTW92ZSh0ZncsIGV2LCBwb3MsIDAsIDEpOwogICAgfQp9
CgoKc3RhdGljIHZvaWQKY2xlYXJfc2VsZWN0aW9uKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAg
ICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CmludCBw
b3M7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAg
ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwg
ImNsZWFyX3NlbGVjdGlvbiIpOwoKCgoKCgogICAgaWYgKCEoKChYbVRleHRGaWVsZFdpZGdldCko
dGZ3KSktPnRleHQuZWRpdGFibGUpIHx8ICF0ZnctPnRleHQuaGFzX3ByaW1hcnkpCiAgICB7CiAg
ICAgICAgVmVyaWZ5QmVsbCh0ZncpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBmb3IocG9z
ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnByaW1fcG9zX2xlZnQpO3Bvczwo
KChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpO3BvcysrKQog
ICAgewogICAgICAgIGlmKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC52YWx1ZSlb
cG9zXSAhPSAnXG4nKQogICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRl
eHQudmFsdWUpW3Bvc10gPSAnICc7CiAgICB9CiAgICBYbVRleHRGaWVsZENsZWFyU2VsZWN0aW9u
KHcsZXYtPnhrZXkudGltZSk7Cn0Kc3RhdGljIHZvaWQKY29weV9jbGlwYm9hcmQoV2lkZ2V0IHcs
IFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVt
X3BhcmFtcykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdl
dCl3LCAiJXNcbiIsICJjb3B5X2NsaXBib2FyZCIpOwoKICAgIFhtVGV4dEZpZWxkQ29weSh3LCBl
di0+eGtleS50aW1lKTsKfQoKCnN0YXRpYyB2b2lkCmNvcHlfcHJpbWFyeShXaWRnZXQgdywgWEV2
ZW50ICpldiwKICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFt
cykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAi
JXNcbiIsICJjb3B5X3ByaW1hcnkiKTsKCgoKfQoKCnN0YXRpYyB2b2lkCmNvcHlfdG8oV2lkZ2V0
IHcsIFhFdmVudCAqZXYsCiAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFy
YW1zKQp7CgoKCgogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0
KXc7CiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIl
c1xuIiwgImNvcHlfdG8iKTsKICAgIF9MdERlYnVnKCJDT1BZVE8iLCB3LCAiJXM6Y29weV90bygl
ZCkgLSAlZFxuIiwgIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgNDA4NCwgZXYtPnhidXR0b24u
eCk7CgoKICAgIGlmICgoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+QWxsb3dTZWxlY3Rpb24p
KQogICAgewogICAgICAgIFNlbGVjdGlvbkNsaWVudERhdGEgKmNsaWVudF9kYXRhOwoKICAgICAg
ICBjbGllbnRfZGF0YSA9ICgoU2VsZWN0aW9uQ2xpZW50RGF0YSAqKSBYdE1hbGxvYygodW5zaWdu
ZWQpIHNpemVvZihTZWxlY3Rpb25DbGllbnREYXRhKSkpOwogICAgICAgIGNsaWVudF9kYXRhLT5l
diA9ICgoWEV2ZW50ICopIFh0TWFsbG9jKCh1bnNpZ25lZCkgc2l6ZW9mKFhFdmVudCkpKTsKCiAg
ICAgICAgKmNsaWVudF9kYXRhLT5ldiA9ICpldjsKICAgICAgICBjbGllbnRfZGF0YS0+dXNlX2N0
ZXh0ID0gMTsKCiAgICAgICAgWHRHZXRTZWxlY3Rpb25WYWx1ZSh3LCAoKEF0b20pIDIpLAogICAg
ICAgICAgICAgICAgICAgICAgICBYbUludGVybkF0b20oKCgoKE9iamVjdCkodykpLT5vYmplY3Qu
d2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQp
KHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50
LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICJDT01QT1VORF9URVhUIiwgMCksCiAgICAgICAgICAg
ICAgICAgICAgICAgIFJlcXVlc3RTZWxlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIChY
dFBvaW50ZXIpY2xpZW50X2RhdGEgLCBldi0+eGJ1dHRvbi50aW1lKTsKICAgIH0KfQoKCnN0YXRp
YyB2b2lkCmN1dF9jbGlwYm9hcmQoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAg
U3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZEN1
dCh3LCBldi0+eGJ1dHRvbi50aW1lKTsKfQoKCnN0YXRpYyB2b2lkCmN1dF9wcmltYXJ5KFdpZGdl
dCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51
bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRn
ZXQpdywgIiVzXG4iLCAiY3V0X3ByaW1hcnkiKTsKfQoKCnN0YXRpYyB2b2lkCmRlbGV0ZV9uZXh0
X2NoYXJhY3RlcihXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRn
ZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xp
Yi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJkZWxldGVfbmV4dF9jaGFyYWN0ZXIi
KTsKCiAgICBpZiAoISgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5lZGl0YWJsZSkp
CiAgICB7CiAgICAgICAgVmVyaWZ5QmVsbCh0ZncpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBpZiAodGZ3LT50ZXh0Lmhhc19wcmltYXJ5ICYmICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0Zncp
KS0+dGV4dC5wZW5kaW5nX2RlbGV0ZSkgJiYKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko
dGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA+PSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3
KSktPnRleHQucHJpbV9wb3NfbGVmdCkgJiYKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCko
dGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA8PSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3
KSktPnRleHQucHJpbV9wb3NfcmlnaHQpKQogICAgewogICAgICAgIGludCBzdGFydCwgZW5kOwoK
ICAgICAgICBzdGFydCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nf
bGVmdCk7CiAgICAgICAgZW5kID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmlt
X3Bvc19yaWdodCk7CiAgICAgICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24odywtMSwtMSxldi0+
eGtleS50aW1lKTsKICAgICAgICBNb2RpZnlUZXh0KHRmdywgZXYsCiAgICAgICAgICAgICAgICAg
ICBzdGFydCwgZW5kLAogICAgICAgICAgICAgICAgICAgKGNoYXIgKikwLCAwLAogICAgICAgICAg
ICAgICAgICAgTWFzc2l2ZUNoYW5nZURyYXcsIENQX0VuZE9mSW5zZXJ0KTsKICAgIH0KICAgIGVs
c2UgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24p
IDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAg
ewogICAgICAgIFhtVGV4dFBvc2l0aW9uIHBvczsKICAgICAgICBjaGFyICpwdHI7CiAgICAgICAg
aW50IGN1cnIsIGk7CgogICAgICAgIHB0ciA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+
dGV4dC52YWx1ZSk7CiAgICAgICAgY3VyciA9IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgo
V2lkZ2V0KXRmdywgcHRyLCAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29y
X3Bvc2l0aW9uKSk7CiAgICAgICAgcG9zID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50
ZXh0LmN1cnNvcl9wb3NpdGlvbik7CiAgICAgICAgZm9yKGk9KCgoWG1UZXh0RmllbGRXaWRnZXQp
KHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikrMTsgaTw9KCgoWG1UZXh0RmllbGRXaWRnZXQp
KHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgpOyBpKyspewogICAgICAgICAgICBpZiAoY3VyciA8
IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgoV2lkZ2V0KXRmdywgcHRyLCBpKSl7CiAgICAg
ICAgICAgICAgICBwb3MgPSBpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CgogICAgICAgIE1vZGlmeVRleHQodGZ3LCBldiwKICAgICAgICAgICAgICAgICAg
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLCBwb3Ms
CiAgICAgICAgICAgICAgICAgICAoY2hhciAqKTAsIDAsCiAgICAgICAgICAgICAgICAgICBEcmF3
LCBDUF9FbmRPZkluc2VydCk7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApkZWxldGVfcHJldmlvdXNf
Y2hhcmFjdGVyKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICAgICAgICAgICAg
IFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRX
aWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4u
L2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJkZWxldGVfcHJldmlvdXNfY2hh
cmFjdGVyIik7CgogICAgaWYgKCEoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZWRp
dGFibGUpKQogICAgewogICAgICAgIFZlcmlmeUJlbGwodGZ3KTsKICAgICAgICByZXR1cm47CiAg
ICB9CgogICAgaWYgKHRmdy0+dGV4dC5oYXNfcHJpbWFyeSAmJiAoKChYbVRleHRGaWVsZFdpZGdl
dCkodGZ3KSktPnRleHQucGVuZGluZ19kZWxldGUpICYmCiAgICAgICAgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPj0gKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHRmdykpLT50ZXh0LnByaW1fcG9zX2xlZnQpICYmCiAgICAgICAgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPD0gKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHRmdykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KSkKICAgIHsKICAgICAgICBpbnQgc3RhcnQs
IGVuZDsKCiAgICAgICAgc3RhcnQgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnBy
aW1fcG9zX2xlZnQpOwogICAgICAgIGVuZCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRl
eHQucHJpbV9wb3NfcmlnaHQpOwogICAgICAgIFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKHcsLTEs
LTEsZXYtPnhrZXkudGltZSk7CiAgICAgICAgTW9kaWZ5VGV4dCh0ZncsIGV2LAogICAgICAgICAg
ICAgICAgICAgc3RhcnQsIGVuZCwKICAgICAgICAgICAgICAgICAgIChjaGFyICopMCwgMCwKICAg
ICAgICAgICAgICAgICAgIE1hc3NpdmVDaGFuZ2VEcmF3LCBDUF9FbmRPZkluc2VydCk7CiAgICB9
CiAgICBlbHNlIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bv
c2l0aW9uKSA+IDApCiAgICB7CiAgICAgICAgWG1UZXh0UG9zaXRpb24gcG9zOwogICAgICAgIGNo
YXIgKnB0cjsKICAgICAgICBpbnQgbmV4dCwgaTsKCiAgICAgICAgcHRyID0gKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHRmdykpLT50ZXh0LnZhbHVlKTsKICAgICAgICBuZXh0ID0gKGludClfWG1UZXh0
Rl9Gb250VGV4dFdpZHRoKChXaWRnZXQpdGZ3LCBwdHIsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0
ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLTEpOwogICAgICAgIHBvcyA9ICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLTE7CiAgICAgICAgZm9yKGk9
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbiktMjsgaT49
MDsgaS0tKXsKICAgICAgICAgICAgaWYgKG5leHQgPiAoaW50KV9YbVRleHRGX0ZvbnRUZXh0V2lk
dGgoKFdpZGdldCl0ZncsIHB0ciwgaSkpewogICAgICAgICAgICAgICAgcG9zID0gaSArIDE7CiAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobmV4dCA9
PSAoaW50KV9YbVRleHRGX0ZvbnRUZXh0V2lkdGgoKFdpZGdldCl0ZncsIHB0ciwgaSkpewogICAg
ICAgICAgICAgICAgcG9zID0gaTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgTW9k
aWZ5VGV4dCh0ZncsIGV2LAogICAgICAgICAgICAgICAgICAgcG9zLCAoKChYbVRleHRGaWVsZFdp
ZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSwKICAgICAgICAgICAgICAgICAgIChj
aGFyICopMCwgMCwKICAgICAgICAgICAgICAgICAgIERyYXcsIENQX0VuZE9mSW5zZXJ0KTsKICAg
IH0KfQoKCnN0YXRpYyB2b2lkCmRlbGV0ZV9uZXh0X3dvcmQoV2lkZ2V0IHcsIFhFdmVudCAqZXYs
CiAgICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7
CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAgICBf
THREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgImRl
bGV0ZV9uZXh0X3dvcmQiKTsKCiAgICBpZiAoISgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+
dGV4dC5lZGl0YWJsZSkpCiAgICB7CiAgICAgICAgVmVyaWZ5QmVsbCh0ZncpOwogICAgICAgIHJl
dHVybjsKICAgIH0KCiAgICBpZiAodGZ3LT50ZXh0Lmhhc19wcmltYXJ5ICYmICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5wZW5kaW5nX2RlbGV0ZSkgJiYKICAgICAgICAoKChYbVRl
eHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA+PSAoKChYbVRleHRG
aWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgJiYKICAgICAgICAoKChYbVRl
eHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA8PSAoKChYbVRleHRG
aWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpKQogICAgewogICAgICAgIGlu
dCBzdGFydCwgZW5kOwoKICAgICAgICBzdGFydCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQucHJpbV9wb3NfbGVmdCk7CiAgICAgICAgZW5kID0gKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5wcmltX3Bvc19yaWdodCk7CiAgICAgICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rp
b24odywtMSwtMSxldi0+eGtleS50aW1lKTsKICAgICAgICBNb2RpZnlUZXh0KHRmdywgZXYsCiAg
ICAgICAgICAgICAgICAgICBzdGFydCwgZW5kLAogICAgICAgICAgICAgICAgICAgKGNoYXIgKikw
LCAwLAogICAgICAgICAgICAgICAgICAgTWFzc2l2ZUNoYW5nZURyYXcsIENQX0VuZE9mSW5zZXJ0
KTsKICAgIH0KICAgIGVsc2UgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5j
dXJzb3JfcG9zaXRpb24pIDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnN0cmlu
Z19sZW5ndGgpKQogICAgewogICAgICAgIE1vZGlmeVRleHQodGZ3LCBldiwKICAgICAgICAgICAg
ICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24p
LAogICAgICAgICAgICAgICAgICAgU2tpcEZvcndhcmQodGZ3LCBXb3JkRW5kKHRmdywgKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikpKSwKICAgICAgICAg
ICAgICAgICAgIChjaGFyICopMCwgMCwKICAgICAgICAgICAgICAgICAgIE1hc3NpdmVDaGFuZ2VE
cmF3LCBDUF9FbmRPZkluc2VydCk7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApkZWxldGVfcHJldmlv
dXNfd29yZChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICAgICAgICAgU3RyaW5n
ICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0
ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1ht
L1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgImRlbGV0ZV9wcmV2aW91c193b3JkIik7Cgog
ICAgaWYgKCEoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZWRpdGFibGUpKQogICAg
ewogICAgICAgIFZlcmlmeUJlbGwodGZ3KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYg
KHRmdy0+dGV4dC5oYXNfcHJpbWFyeSAmJiAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRl
eHQucGVuZGluZ19kZWxldGUpICYmCiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykp
LT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPj0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50
ZXh0LnByaW1fcG9zX2xlZnQpICYmCiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykp
LT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPD0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50
ZXh0LnByaW1fcG9zX3JpZ2h0KSkKICAgIHsKICAgICAgICBpbnQgc3RhcnQsIGVuZDsKCiAgICAg
ICAgc3RhcnQgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQp
OwogICAgICAgIGVuZCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nf
cmlnaHQpOwogICAgICAgIFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKHcsLTEsLTEsZXYtPnhrZXku
dGltZSk7CiAgICAgICAgTW9kaWZ5VGV4dCh0ZncsIGV2LAogICAgICAgICAgICAgICAgICAgc3Rh
cnQsIGVuZCwKICAgICAgICAgICAgICAgICAgIChjaGFyICopMCwgMCwKICAgICAgICAgICAgICAg
ICAgIE1hc3NpdmVDaGFuZ2VEcmF3LCBDUF9FbmRPZkluc2VydCk7CiAgICB9CiAgICBlbHNlIGlm
ICgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA+IDAp
CiAgICB7CiAgICAgICAgTW9kaWZ5VGV4dCh0ZncsIGV2LAogICAgICAgICAgICAgICAgICAgV29y
ZFN0YXJ0KHRmdywgU2tpcEJhY2t3YXJkKHRmdywgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykp
LT50ZXh0LmN1cnNvcl9wb3NpdGlvbikpKSwKICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pLAogICAgICAgICAgICAgICAg
ICAgKGNoYXIgKikwLCAwLAogICAgICAgICAgICAgICAgICAgTWFzc2l2ZUNoYW5nZURyYXcsIENQ
X0VuZE9mSW5zZXJ0KTsKICAgIH0KfQoKCnN0YXRpYyB2b2lkCmRlbGV0ZV9zZWxlY3Rpb24oV2lk
Z2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRp
bmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0Rmll
bGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lk
Z2V0KXcsICIlc1xuIiwgImRlbGV0ZV9zZWxlY3Rpb24iKTsKCiAgICBpZiAoISgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5lZGl0YWJsZSkpCiAgICB7CiAgICAgICAgVmVyaWZ5QmVs
bCh0ZncpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodGZ3LT50ZXh0Lmhhc19wcmlt
YXJ5KQogICAgewogICAgICAgIGludCBzdGFydCwgZW5kOwoKICAgICAgICBzdGFydCA9ICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCk7CiAgICAgICAgZW5kID0g
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19yaWdodCk7CiAgICAgICAg
WG1UZXh0RmllbGRTZXRTZWxlY3Rpb24odywtMSwtMSxldi0+eGtleS50aW1lKTsKICAgICAgICBN
b2RpZnlUZXh0KHRmdywgZXYsCiAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5kLAogICAgICAg
ICAgICAgICAgICAgKGNoYXIgKikwLCAwLAogICAgICAgICAgICAgICAgICAgTWFzc2l2ZUNoYW5n
ZURyYXcsIENQX0VuZE9mSW5zZXJ0KTsKICAgIH0KfQoKCnN0YXRpYyB2b2lkCmRlbGV0ZV90b19l
bmRfb2ZfbGluZShXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICAgICAgICAgIFN0
cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRn
ZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xp
Yi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJkZWxldGVfdG9fZW5kX29mX2xpbmUi
KTsKCiAgICBpZiAoISgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5lZGl0YWJsZSkp
CiAgICB7CiAgICAgICAgVmVyaWZ5QmVsbCh0ZncpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikg
PCAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpCiAgICB7
CiAgICAgICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24odywtMSwtMSxldi0+eGtleS50aW1lKTsK
ICAgICAgICBNb2RpZnlUZXh0KHRmdywgZXYsCiAgICAgICAgICAgICAgICAgICAoKChYbVRleHRG
aWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSwgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgpLAogICAgICAgICAgICAgICAgICAgKGNo
YXIgKikwLCAwLAogICAgICAgICAgICAgICAgICAgTWFzc2l2ZUNoYW5nZURyYXcsIENQX0VuZE9m
SW5zZXJ0KTsKICAgIH0KfQoKCnN0YXRpYyB2b2lkCmRlbGV0ZV90b19zdGFydF9vZl9saW5lKFdp
ZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFt
cywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChY
bVRleHRGaWVsZFdpZGdldCl3OwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYu
YyIsIChXaWRnZXQpdywgIiVzXG4iLCAiZGVsZXRlX3RvX3N0YXJ0X29mX2xpbmUiKTsKCiAgICBp
ZiAoISgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5lZGl0YWJsZSkpCiAgICB7CiAg
ICAgICAgVmVyaWZ5QmVsbCh0ZncpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPiAwKQogICAg
ewogICAgICAgIFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKHcsLTEsLTEsZXYtPnhrZXkudGltZSk7
CiAgICAgICAgTW9kaWZ5VGV4dCh0ZncsIGV2LAogICAgICAgICAgICAgICAgICAgMCwgKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbiksCiAgICAgICAgICAg
ICAgICAgICAoY2hhciAqKTAsIDAsCiAgICAgICAgICAgICAgICAgICBNYXNzaXZlQ2hhbmdlRHJh
dywgQ1BfRW5kT2ZJbnNlcnQpOwogICAgfQp9CgoKc3RhdGljIHZvaWQKZGVsZXRlX2FsbChXaWRn
ZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51
bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdl
dCl3OwogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAi
JXNcbiIsICJkZWxldGVfYWxsIik7CgogICAgaWYgKCEoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3
KSktPnRleHQuZWRpdGFibGUpKQogICAgewogICAgICAgIFZlcmlmeUJlbGwodGZ3KTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24odywtMSwtMSxldi0+
eGtleS50aW1lKTsKICAgIE1vZGlmeVRleHQodGZ3LCBldiwKICAgICAgICAgICAgICAgMCwgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgpLAogICAgICAgICAg
ICAgICAoY2hhciAqKTAsIDAsCiAgICAgICAgICAgICAgIE1hc3NpdmVDaGFuZ2VEcmF3LCBDUF9S
ZXNldCk7Cn0KCgpzdGF0aWMgdm9pZApkZXNlbGVjdF9hbGwoV2lkZ2V0IHcsIFhFdmVudCAqZXYs
CiAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAg
IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi
ZGVzZWxlY3RfYWxsIik7CiAgICBYbVRleHRGaWVsZFNldFNlbGVjdGlvbih3LC0xLC0xLGV2LT54
a2V5LnRpbWUpOwp9CgoKc3RhdGljIHZvaWQKZG9fcXVpY2tfYWN0aW9uKFdpZGdldCB3LCBYRXZl
bnQgKmV2LAogICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFy
YW1zKQp7CiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcs
ICIlc1xuIiwgImRvX3F1aWNrX2FjdGlvbiIpOwp9CgoKc3RhdGljIHZvaWQKZW5kX29mX2xpbmUo
V2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5h
bCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxk
V2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdl
dCl3LCAiJXNcbiIsICJlbmRfb2ZfbGluZSIpOwoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdl
dCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSA8ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0
ZncpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSkKICAgIHsKICAgICAgICBYbVRleHRQb3NpdGlvbiBw
b3M7CgogICAgICAgIHBvcyA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5zdHJp
bmdfbGVuZ3RoKTsKCiAgICAgICAgRG9DdXJzb3JNb3ZlKHRmdywgZXYsIHBvcywgMCwgMSk7CiAg
ICB9Cn0KCgpzdGF0aWMgdm9pZAplbnRlcihXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgU3Ry
aW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CgogICAgX0x0RGVidWcoIi4uLy4u
Ly4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJlbnRlciIpOwoKCgogICAg
WHRDYWxsQWN0aW9uUHJvYyh3LCAiUHJpbWl0aXZlRW50ZXIiLCBldiwgcGFyYW1zLCAqbnVtX3Bh
cmFtcyk7Cgp9CgoKCgoKCnN0YXRpYyB2b2lkCmV4dGVuZF9hZGp1c3QoV2lkZ2V0IHcsIFhFdmVu
dCAqZXYsCiAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1z
KQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAg
ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwg
ImV4dGVuZF9hZGp1c3QiKTsKCiAgICBpZiAoISgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl
bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmV4dGVuc2lvbikpLT5B
bGxvd1NlbGVjdGlvbikpCiAgICB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHRmdy0+dGV4
dC5zZWxlY3RfcG9zX3ggPSBldi0+eGJ1dHRvbi54OwoKICAgIGlmIChldi0+eGJ1dHRvbi54IDwg
KCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdl
dCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPlhEcmF3KSB8fAogICAgICAgIGV2LT54YnV0dG9u
LnggPiAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+WERyYXcpICsgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHRmdykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pKQogICAgewogICAgICAgIGlmICgoKChY
bVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuc2VsZWN0X2lkKSkKICAgICAgICB7CiAgICAg
ICAgICAgIEV4dGVuZEhpZ2hsaWdodCh0ZncpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAg
ICAgewogICAgICAgICAgICBFeHRlbmRUaW1lcigoWHRQb2ludGVyKXRmdywgKFh0SW50ZXJ2YWxJ
ZCkwKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgaWYgKCgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5zZWxlY3RfaWQpKQogICAgICAgIHsKICAgICAgICAg
ICAgWHRSZW1vdmVUaW1lT3V0KCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5zZWxl
Y3RfaWQpKTsKICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnNl
bGVjdF9pZCkgPSAoWHRJbnRlcnZhbElkKTA7CiAgICAgICAgfQoKICAgICAgICBFeHRlbmRIaWdo
bGlnaHQodGZ3KTsKICAgIH0KfQoKCgoKCnN0YXRpYyB2b2lkCmV4dGVuZF9lbmQoV2lkZ2V0IHcs
IFhFdmVudCAqZXYsIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAg
ICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwoKICAgICAg
ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwg
ImV4dGVuZF9lbmQiKTsKCiAgICAgICAgaWYgKCEoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+
QWxsb3dTZWxlY3Rpb24pKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAg
ICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnNlbGVjdF9pZCkpIHsK
ICAgICAgICAgICAgICAgIFh0UmVtb3ZlVGltZU91dCgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3
KSktPnRleHQuc2VsZWN0X2lkKSk7CiAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdl
dCkodGZ3KSktPnRleHQuc2VsZWN0X2lkKSA9IChYdEludGVydmFsSWQpMDsKICAgICAgICB9Cgog
ICAgICAgIFByaW1hcnlTZWxlY3Rpb25Db21wbGV0ZSh0ZncsIGV2LT54YnV0dG9uLnRpbWUpOwp9
CgoKCgoKCgpzdGF0aWMgdm9pZApleHRlbmRfc3RhcnQoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAg
ICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIFht
VGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwogICAgaW50IHBvczsK
CiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xu
IiwgImV4dGVuZF9zdGFydCIpOwoKICAgIFhtUHJvY2Vzc1RyYXZlcnNhbCh3LCBYbVRSQVZFUlNF
X0NVUlJFTlQpOwoKICAgIGlmICghKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq
KSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPkFsbG93U2Vs
ZWN0aW9uKSkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcG9zID0gVGV4dFBpeGVs
VG9TZWxlY3Rpb25Qb3ModGZ3LCBldi0+eGJ1dHRvbi54KTsKICAgIERvQ3Vyc29yTW92ZSh0Zncs
IGV2LCBwb3MsIDAsIDEpOwoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRl
eHQucHJpbV9wb3NfbGVmdCkgPCAwKQogICAgewogICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh0ZncpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KSA9CiAgICAgICAgICAgICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh0ZncpKS0+dGV4dC5wcmltX3Bvc19yaWdodCkgPQogICAgICAgICAgICAoKChYbVRl
eHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9hbmNob3IpID0gKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbik7CiAgICB9CgogICAgaWYgKCgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pIDwgKCgoWG1UZXh0
RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnByaW1fYW5jaG9yKSkKICAgIHsKICAgICAgICAoKChY
bVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPSAoKChYbVRleHRG
aWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKTsKICAgIH0KICAgIGVsc2UK
ICAgIHsKICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3Nf
cmlnaHQpID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlv
bik7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApmb3J3YXJkX2NoYXJhY3RlcihXaWRnZXQgdywgWEV2
ZW50ICpldiwKICAgICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1f
cGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQp
dzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIl
c1xuIiwgImZvcndhcmRfY2hhcmFjdGVyIik7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pIDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRm
dykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIFhtVGV4dFBvc2l0aW9uIHBv
czsKICAgICAgICBjaGFyICpwdHI7CiAgICAgICAgaW50IGN1cnIsIGk7CgogICAgICAgIHB0ciA9
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC52YWx1ZSk7CiAgICAgICAgY3VyciA9
IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0aCgoV2lkZ2V0KXRmdywgcHRyLCAoKChYbVRleHRG
aWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSk7CiAgICAgICAgcG9zID0g
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbik7CiAgICAg
ICAgZm9yKGk9KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlv
bikrMTsgaTw9KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgp
OyBpKyspewogICAgICAgICAgICBpZiAoY3VyciA8IChpbnQpX1htVGV4dEZfRm9udFRleHRXaWR0
aCgoV2lkZ2V0KXRmdywgcHRyLCBpKSl7CiAgICAgICAgICAgICAgICBwb3MgPSBpOwogICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIERvQ3Vyc29y
TW92ZSh0ZncsIGV2LCBwb3MsIDAsIDEpOwogICAgfQp9CgoKc3RhdGljIHZvaWQKZm9yd2FyZF93
b3JkKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENh
cmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0
RmllbGRXaWRnZXQpdzsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChX
aWRnZXQpdywgIiVzXG4iLCAiZm9yd2FyZF93b3JkIik7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pIDwgKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHRmdykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIFhtVGV4dFBvc2l0
aW9uIHBvczsKCiAgICAgICAgcG9zID0gU2tpcEZvcndhcmQodGZ3LCBXb3JkRW5kKHRmdywgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikpKTsKCiAgICAg
ICAgRG9DdXJzb3JNb3ZlKHRmdywgZXYsIHBvcywgMCwgMSk7CiAgICB9Cn0KCgpzdGF0aWMgdm9p
ZApncmFiX2ZvY3VzKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgIFN0cmluZyAqcGFy
YW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0g
KFhtVGV4dEZpZWxkV2lkZ2V0KXc7CiAgICBYbVRleHRQb3NpdGlvbiBwb3M7CgogICAgX0x0RGVi
dWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJncmFiX2Zv
Y3VzIik7CgogICAgWG1Qcm9jZXNzVHJhdmVyc2FsKChXaWRnZXQpdGZ3LCBYbVRSQVZFUlNFX0NV
UlJFTlQpOwoKICAgIGlmICghKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAo
KChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPkFsbG93U2VsZWN0
aW9uKSkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcG9zID0gVGV4dFBpeGVsVG9T
ZWxlY3Rpb25Qb3ModGZ3LCBldi0+eGJ1dHRvbi54KTsKCiAgICBpZiAoKHRmdy0+dGV4dC5sYXN0
X3RpbWUgKyBYdEdldE11bHRpQ2xpY2tUaW1lKCgoKChPYmplY3QpKChXaWRnZXQpdGZ3KSktPm9i
amVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdp
ZGdldCkoKFdpZGdldCl0ZncpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoKFdp
ZGdldCl0ZncpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpKSkgPgogICAg
ICAgIGV2LT54YnV0dG9uLnRpbWUpCiAgICB7CiAgICAgICAgdGZ3LT50ZXh0LnNhcnJheV9pbmRl
eCsrOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIHRmdy0+dGV4dC5zYXJyYXlfaW5kZXgg
PSAwOwogICAgfQoKICAgIERvU2NhblR5cGUodGZ3LCBldiwgcG9zKTsKCiAgICB0ZnctPnRleHQu
bGFzdF90aW1lID0gZXYtPnhidXR0b24udGltZTsKfQpzdGF0aWMgdm9pZAppbnNlcnRfc3RyaW5n
KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJk
aW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5j
IiwgKFdpZGdldCl3LCAiJXNcbiIsICJpbnNlcnRfc3RyaW5nIik7Cn0KCgpzdGF0aWMgdm9pZApr
ZXlfc2VsZWN0KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgIFN0cmluZyAqcGFyYW1z
LCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFht
VGV4dEZpZWxkV2lkZ2V0KXc7CiAgICBYbVRleHRQb3NpdGlvbiBvbGQsbGVmdCxyaWdodDsKICAg
IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi
a2V5X3NlbGVjdCIpOwoKICAgIGlmKCpudW1fcGFyYW1zID09IDApCiAgICB7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIG9sZCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5j
dXJzb3JfcG9zaXRpb24pOwogICAgbGVmdCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+
dGV4dC5wcmltX3Bvc19sZWZ0KTsKICAgIHJpZ2h0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRm
dykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KTsKICAgIGlmKF9fZXh0ZW5zaW9uX18gKHsgc2l6ZV90
IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9wIChwYXJhbXNbMF0pICYm
IF9fYnVpbHRpbl9jb25zdGFudF9wICgibGVmdCIpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAocGFy
YW1zWzBdKSwgX19zMl9sZW4gPSBzdHJsZW4gKCJsZWZ0IiksICghKChzaXplX3QpKGNvbnN0IHZv
aWQgKikoKHBhcmFtc1swXSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikocGFyYW1zWzBd
KSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgi
bGVmdCIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJsZWZ0IikgPT0gMSkgfHwgX19z
Ml9sZW4gPj0gNCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pLCAoX19j
b25zdCBjaGFyICopICgibGVmdCIpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDog
X19zMl9sZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKHBhcmFtc1swXSkgJiYgKChz
aXplX3QpKGNvbnN0IHZvaWQgKikoKHBhcmFtc1swXSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZv
aWQgKikocGFyYW1zWzBdKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKHBhcmFtc1swXSks
IF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKCJsZWZ0IikgJiYgKChzaXpl
X3QpKGNvbnN0IHZvaWQgKikoKCJsZWZ0IikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKiko
ImxlZnQiKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9
ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0p
KVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoImxlZnQi
KSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo
KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBdKSlb
MV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgibGVmdCIp
KVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgo
KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pKVsy
XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJsZWZ0Iikp
WzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9f
Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pKVszXSAt
ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJsZWZ0IikpWzNd
KTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVk
IGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg
KCJsZWZ0Iik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hh
ciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pKVswXSAtIF9fczJbMF0pOyBpZiAoX19z
MV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln
bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBdKSlbMV0gLSBfX3MyWzFdKTsg
aWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25z
dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHBhcmFtc1swXSkpWzJdIC0gX19z
MlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBdKSlbM10g
LSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgi
bGVmdCIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgibGVmdCIpICsgMSkgLSAoc2l6ZV90
KShjb25zdCB2b2lkICopKCJsZWZ0IikgPT0gMSkgJiYgKF9fczJfbGVuID0gc3RybGVuICgibGVm
dCIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChwYXJhbXNbMF0pICYm
ICgoc2l6ZV90KShjb25zdCB2b2lkICopKChwYXJhbXNbMF0pICsgMSkgLSAoc2l6ZV90KShjb25z
dCB2b2lkICopKHBhcmFtc1swXSkgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBp
bnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq
KSAocGFyYW1zWzBdKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj
aGFyICopKCJsZWZ0IikpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7
IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg
KHBhcmFtc1swXSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh
ciAqKSAoImxlZnQiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsg
X19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo
cGFyYW1zWzBdKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy
ICopICgibGVmdCIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19y
ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFy
YW1zWzBdKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop
ICgibGVmdCIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19j
b25zdCB1bnNpZ25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j
b25zdCBjaGFyICopIChwYXJhbXNbMF0pOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBd
IC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImxlZnQiKSlb
MF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3Mx
WzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImxlZnQi
KSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo
X19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJs
ZWZ0IikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9
IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo
ImxlZnQiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKHBhcmFtc1swXSwgImxl
ZnQiKSkpKTsgfSkgPT0gMCkKICAgIHsKICAgICAgICBiYWNrd2FyZF9jaGFyYWN0ZXIodyxldixw
YXJhbXMsbnVtX3BhcmFtcyk7CiAgICAgICAgaWYgKG9sZCA9PSAoKChYbVRleHRGaWVsZFdpZGdl
dCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKSkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICB9CgogICAgICAgIGlmICh0ZnctPnRleHQuaGFzX3ByaW1hcnkpCiAgICAg
ICAgewogICAgICAgICAgICBpZiAob2xkID09IGxlZnQpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIGxlZnQgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vyc29yX3Bv
c2l0aW9uKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYob2xkID09IHJpZ2h0KQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICByaWdodCA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0
ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGxlZnQgPSAoKChYbVRleHRGaWVsZFdpZGdl
dCkodGZ3KSktPnRleHQuY3Vyc29yX3Bvc2l0aW9uKTsKICAgICAgICAgICAgcmlnaHQgPSBvbGQ7
CiAgICAgICAgfQoKICAgICAgICBYbVRleHRGaWVsZFNldFNlbGVjdGlvbih3LGxlZnQscmlnaHQs
ZXYtPnhrZXkudGltZSk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChfX2V4dGVuc2lv
bl9fICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo
cGFyYW1zWzBdKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAoInJpZ2h0IikgJiYgKF9fczFfbGVu
ID0gc3RybGVuIChwYXJhbXNbMF0pLCBfX3MyX2xlbiA9IHN0cmxlbiAoInJpZ2h0IiksICghKChz
aXplX3QpKGNvbnN0IHZvaWQgKikoKHBhcmFtc1swXSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZv
aWQgKikocGFyYW1zWzBdKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShj
b25zdCB2b2lkICopKCgicmlnaHQiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgicmln
aHQiKSA9PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNoYXIgKikg
KHBhcmFtc1swXSksIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpLCAoX19zMV9sZW4gPCBfX3My
X2xlbiA/IF9fczFfbGVuIDogX19zMl9sZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3Ag
KHBhcmFtc1swXSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKHBhcmFtc1swXSkgKyAxKSAt
IChzaXplX3QpKGNvbnN0IHZvaWQgKikocGFyYW1zWzBdKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBz
dHJsZW4gKHBhcmFtc1swXSksIF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3Ag
KCJyaWdodCIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgicmlnaHQiKSArIDEpIC0gKHNp
emVfdCkoY29uc3Qgdm9pZCAqKSgicmlnaHQiKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJl
Z2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z
dCBjaGFyICopIChwYXJhbXNbMF0pKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf
X2NvbnN0IGNoYXIgKikoInJpZ2h0IikpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3Vs
dCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0
IGNoYXIgKikgKHBhcmFtc1swXSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f
Y29uc3QgY2hhciAqKSAoInJpZ2h0IikpWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3Vs
dCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0
IGNoYXIgKikgKHBhcmFtc1swXSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f
Y29uc3QgY2hhciAqKSAoInJpZ2h0IikpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3Vs
dCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj
aGFyICopIChwYXJhbXNbMF0pKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv
bnN0IGNoYXIgKikgKCJyaWdodCIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5z
aW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWduZWQg
Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgicmlnaHQiKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0
ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHBhcmFtc1sw
XSkpWzBdIC0gX19zMlswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBf
X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChw
YXJhbXNbMF0pKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09
IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh
ciAqKSAocGFyYW1zWzBdKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jl
c3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z
dCBjaGFyICopIChwYXJhbXNbMF0pKVszXSAtIF9fczJbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkg
OiAoX19idWlsdGluX2NvbnN0YW50X3AgKCJyaWdodCIpICYmICgoc2l6ZV90KShjb25zdCB2b2lk
ICopKCgicmlnaHQiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgicmlnaHQiKSA9PSAx
KSAmJiAoX19zMl9sZW4gPSBzdHJsZW4gKCJyaWdodCIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVp
bHRpbl9jb25zdGFudF9wIChwYXJhbXNbMF0pICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChw
YXJhbXNbMF0pICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHBhcmFtc1swXSkgPT0gMSkg
PyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu
c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBdKSlbMF0gLSAoKF9fY29u
c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKCJyaWdodCIpKVswXSk7IGlmIChf
X3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z
aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pKVsxXSAtICgoX19jb25z
dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpKVsxXSk7IGlmIChf
X3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z
aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwYXJhbXNbMF0pKVsyXSAtICgoX19jb25z
dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpKVsyXSk7IGlmIChf
X3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln
bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBdKSlbM10gLSAoKF9fY29uc3Qg
dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgicmlnaHQiKSlbM10pOyB9IH0gX19y
ZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19z
MSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocGFyYW1zWzBd
KTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBj
aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpKVswXTsgaWYgKF9fczJfbGVuID4gMCAm
JiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5zaWdu
ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgicmlnaHQiKSlbMV0pOyBpZiAoX19zMl9sZW4g
PiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1
bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpKVsyXSk7IGlmIChfX3My
X2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25z
dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJyaWdodCIpKVszXSk7IH0gfSBf
X3Jlc3VsdDsgfSkpKSA6IHN0cmNtcCAocGFyYW1zWzBdLCAicmlnaHQiKSkpKTsgfSkgPT0gMCkK
ICAgIHsKICAgICAgICBmb3J3YXJkX2NoYXJhY3Rlcih3LGV2LHBhcmFtcyxudW1fcGFyYW1zKTsK
ICAgICAgICBpZiAob2xkID09ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJz
b3JfcG9zaXRpb24pKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAg
ICAgICAgaWYgKHRmdy0+dGV4dC5oYXNfcHJpbWFyeSkKICAgICAgICB7CiAgICAgICAgICAgIGlm
IChvbGQgPT0gbGVmdCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbGVmdCA9ICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pOwogICAgICAgICAg
ICB9CgogICAgICAgICAgICBpZihvbGQgPT0gcmlnaHQpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9w
b3NpdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK
ICAgICAgICAgICAgcmlnaHQgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuY3Vy
c29yX3Bvc2l0aW9uKTsKICAgICAgICAgICAgbGVmdCA9IG9sZDsKICAgICAgICB9CgogICAgICAg
IFhtVGV4dEZpZWxkU2V0U2VsZWN0aW9uKHcsbGVmdCxyaWdodCxldi0+eGtleS50aW1lKTsKICAg
ICAgICByZXR1cm47CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApraWxsX25leHRfY2hhcmFjdGVyKFdp
ZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBD
YXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4
dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwg
KFdpZGdldCl3LCAiJXNcbiIsICJraWxsX25leHRfY2hhcmFjdGVyIik7CgogICAgZGVsZXRlX25l
eHRfY2hhcmFjdGVyKChXaWRnZXQpdGZ3LCBldiwgcGFyYW1zLCBudW1fcGFyYW1zKTsKfQoKCnN0
YXRpYyB2b2lkCmtpbGxfbmV4dF93b3JkKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAg
ICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZp
ZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwoKICAgIF9MdERlYnVnKCIuLi8u
Li8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAia2lsbF9uZXh0X3dvcmQi
KTsKCiAgICBkZWxldGVfbmV4dF93b3JkKChXaWRnZXQpdGZ3LCBldiwgcGFyYW1zLCBudW1fcGFy
YW1zKTsKfQoKCnN0YXRpYyB2b2lkCmtpbGxfcHJldmlvdXNfY2hhcmFjdGVyKFdpZGdldCB3LCBY
RXZlbnQgKmV2LAogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGlu
YWwgKm51bV9wYXJhbXMpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVs
ZFdpZGdldCl3OwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRn
ZXQpdywgIiVzXG4iLCAia2lsbF9wcmV2aW91c19jaGFyYWN0ZXIiKTsKCiAgICBkZWxldGVfcHJl
dmlvdXNfY2hhcmFjdGVyKChXaWRnZXQpdGZ3LCBldiwgcGFyYW1zLCBudW1fcGFyYW1zKTsKfQoK
CnN0YXRpYyB2b2lkCmtpbGxfcHJldmlvdXNfd29yZChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAg
ICAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewog
ICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0
RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJraWxs
X3ByZXZpb3VzX3dvcmQiKTsKCiAgICBkZWxldGVfcHJldmlvdXNfd29yZCgoV2lkZ2V0KXRmdywg
ZXYsIHBhcmFtcywgbnVtX3BhcmFtcyk7Cn0KCgpzdGF0aWMgdm9pZApraWxsX3NlbGVjdGlvbihX
aWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRp
bmFsICpudW1fcGFyYW1zKQp7CiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMi
LCAoV2lkZ2V0KXcsICIlc1xuIiwgImtpbGxfc2VsZWN0aW9uIik7Cn0KCgpzdGF0aWMgdm9pZApr
aWxsX3RvX2VuZF9vZl9saW5lKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICAg
ICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVidWco
Ii4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJraWxsX3RvX2Vu
ZF9vZl9saW5lIik7Cn0KCgpzdGF0aWMgdm9pZApraWxsX3RvX3N0YXJ0X29mX2xpbmUoV2lkZ2V0
IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2Fy
ZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYu
YyIsIChXaWRnZXQpdywgIiVzXG4iLCAia2lsbF90b19zdGFydF9vZl9saW5lIik7Cn0KCgpzdGF0
aWMgdm9pZApsZWF2ZShXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgU3RyaW5nICpwYXJhbXMs
IENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1U
ZXh0RmllbGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMi
LCAoV2lkZ2V0KXcsICIlc1xuIiwgImxlYXZlIik7CgoKCiAgICBYdENhbGxBY3Rpb25Qcm9jKChX
aWRnZXQpdGZ3LCAiUHJpbWl0aXZlTGVhdmUiLCBldiwgcGFyYW1zLCAqbnVtX3BhcmFtcyk7Cgp9
CgoKc3RhdGljIHZvaWQKbW92ZV9kZXN0aW5hdGlvbihXaWRnZXQgdywgWEV2ZW50ICpldiwKICAg
ICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAg
IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi
bW92ZV9kZXN0aW5hdGlvbiIpOwp9CgoKc3RhdGljIHZvaWQKbW92ZV90byhXaWRnZXQgdywgWEV2
ZW50ICpldiwKICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsK
ICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4i
LCAibW92ZV90byIpOwp9CgoKc3RhdGljIHZvaWQKbmV4dF90YWJfZ3JvdXAoV2lkZ2V0IHcsIFhF
dmVudCAqZXYsCiAgICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3Bh
cmFtcykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3
LCAiJXNcbiIsICJuZXh0X3RhYl9ncm91cCIpOwoKICAgIFh0Q2FsbEFjdGlvblByb2ModywgIlBy
aW1pdGl2ZU5leHRUYWJHcm91cCIsIGV2LCBwYXJhbXMsICpudW1fcGFyYW1zKTsKfQoKCnN0YXRp
YyB2b2lkCnBhZ2VfbGVmdChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgIFN0cmluZyAq
cGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3
ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9U
ZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJwYWdlX2xlZnQiKTsKCiAgICBpZiAoKCgoWG1U
ZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPiAwKQogICAgewog
ICAgICAgIFhtVGV4dFBvc2l0aW9uIHBvczsKCiAgICAgICAgcG9zID0gVGV4dFBpeGVsVG9Qb3Mo
dGZ3LCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+WERyYXcpIC0gKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHRmdykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pKTsKCiAgICAgICAgRG9DdXJzb3JNb3Zl
KHRmdywgZXYsIHBvcywgMSwgMSk7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApwYWdlX3JpZ2h0KFdp
ZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAq
bnVtX3BhcmFtcykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lk
Z2V0KXc7CgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3
LCAiJXNcbiIsICJwYWdlX3JpZ2h0Iik7CgogICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0
ZncpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pIDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykp
LT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIFhtVGV4dFBvc2l0aW9uIHBvczsK
CiAgICAgICAgcG9zID0gVGV4dFBpeGVsVG9Qb3ModGZ3LCAoKChYbVRleHRGaWVsZFBhcnRMZXNz
dGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNp
b24pKS0+WERyYXcpICsgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0Lm1hcmdpbl9i
b3R0b20pKTsKCiAgICAgICAgRG9DdXJzb3JNb3ZlKHRmdywgZXYsIHBvcywgMSwgMSk7CiAgICB9
Cn0KCgpzdGF0aWMgdm9pZApwYXN0ZV9jbGlwYm9hcmQoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAg
ICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAg
IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi
cGFzdGVfY2xpcGJvYXJkIik7CgogICAgWG1UZXh0RmllbGRQYXN0ZSh3KTsKfQoKCnN0YXRpYyB2
b2lkCnBhc3RlX3ByaW1hcnkoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgU3Ry
aW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBfTHREZWJ1ZygiLi4vLi4v
Li4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgInBhc3RlX3ByaW1hcnkiKTsK
fQoKCnN0YXRpYyB2b2lkCnByZXZfdGFiX2dyb3VwKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAg
ICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9M
dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAicHJl
dl90YWJfZ3JvdXAiKTsKCiAgICBYdENhbGxBY3Rpb25Qcm9jKHcsICJQcmltaXRpdmVQcmV2VGFi
R3JvdXAiLCBldiwgcGFyYW1zLCAqbnVtX3BhcmFtcyk7Cn0KCgpzdGF0aWMgdm9pZApwcm9jZXNz
X2JkcmFnKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1z
LCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgQXRvbSBleHBvcnRfdGFyZ2V0WzNdOwogICAg
QXJnIGFyZ3NbMTBdOwogICAgaW50IG4gPSAwOwogICAgV2lkZ2V0IGRjOwogICAgWG1UZXh0Rmll
bGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CiAgICBYbVRleHRQb3NpdGlvbiBw
b3NpdGlvbjsKCiAgICBfWG1PYmplY3RMb2NrKHcpOwogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xp
Yi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJwcm9jZXNzX2JkcmFnIik7CgoKCiAg
ICBwb3NpdGlvbiA9IFRleHRQaXhlbFRvU2VsZWN0aW9uUG9zKHRmdywgZXYtPnhidXR0b24ueCk7
CgogICAgaWYgKCEoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCl8fAog
ICAgICAgIHBvc2l0aW9uIDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnByaW1f
cG9zX2xlZnQpIHx8CiAgICAgICAgcG9zaXRpb24gPj0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRm
dykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KSkKICAgIHsKCiAgICAgICAgX1htT2JqZWN0VW5sb2Nr
KHcpOwogICAgICAgIHJldHVybjsKICAgIH0KCgogICAgZXhwb3J0X3RhcmdldFswXSA9IFhtSW50
ZXJuQXRvbSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3Mu
Y2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxh
eSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwg
IkNPTVBPVU5EX1RFWFQiLCAwKTsKICAgIGV4cG9ydF90YXJnZXRbMV0gPSBYbUludGVybkF0b20o
KCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2lu
aXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9i
amVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICJURVhUIiwg
MCk7CiAgICBleHBvcnRfdGFyZ2V0WzJdID0gKChBdG9tKSAzMSk7CgogICAgKCh2b2lkKSggKGFy
Z3Nbbl0pLm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbNjY2M10pKSwgKGFyZ3Nbbl0pLnZh
bHVlID0gKFh0QXJnVmFsKShleHBvcnRfdGFyZ2V0KSApKTsgbisrOwogICAgKCh2b2lkKSggKGFy
Z3Nbbl0pLm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbODQ2Ml0pKSwgKGFyZ3Nbbl0pLnZh
bHVlID0gKFh0QXJnVmFsKSgzKSApKTsgbisrOwogICAgKCh2b2lkKSggKGFyZ3Nbbl0pLm5hbWUg
PSAoKChjaGFyICopJl9YbVN0cmluZ3NbNjMwMF0pKSwgKGFyZ3Nbbl0pLnZhbHVlID0gKFh0QXJn
VmFsKSgoMUwgPDwgMSl8KDFMIDw8IDApKSApKTsgbisrOwogICAgKCh2b2lkKSggKGFyZ3Nbbl0p
Lm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbNTQ2MF0pKSwgKGFyZ3Nbbl0pLnZhbHVlID0g
KFh0QXJnVmFsKSh3KSApKTsgbisrOwogICAgKCh2b2lkKSggKGFyZ3Nbbl0pLm5hbWUgPSAoKChj
aGFyICopJl9YbVN0cmluZ3NbNTU4MF0pKSwgKGFyZ3Nbbl0pLnZhbHVlID0gKFh0QXJnVmFsKShk
cmFnX2NvbnZlcnRfcHJvYykgKSk7IG4rKzsKICAgICgodm9pZCkoIChhcmdzW25dKS5uYW1lID0g
KCgoY2hhciAqKSZfWG1TdHJpbmdzWzk3ODldKSksIChhcmdzW25dKS52YWx1ZSA9IChYdEFyZ1Zh
bCkoX1htR2V0VGV4dHVhbERyYWdJY29uKHcpKSApKTsgbisrOwoKICAgIGRjID0gWG1EcmFnU3Rh
cnQodywgZXYsIGFyZ3MsIG4pOwoKICAgIGlmIChkYykKICAgIHsKICAgICAgICBYdEFkZENhbGxi
YWNrKGRjLCAoKGNoYXIgKikmX1htU3RyaW5nc1s2MjE3XSksIGRyYWdfZHJvcF9maW5pc2gsICgo
dm9pZCAqKTApKTsKICAgIH0KICAgIF9YbU9iamVjdFVubG9jayh3KTsKfQoKCnN0YXRpYyB2b2lk
CmRyYWdfZHJvcF9maW5pc2goV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2lu
dGVyIGNhbGxfZGF0YSkKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwg
dywgIiVzOmRyYWdfZHJvcF9maW5pc2goJWQpXG4iLCAiLi4vLi4vLi4vbGliL1htL1RleHRGLmMi
LCA0OTczKTsKCn0KCgpzdGF0aWMgQm9vbGVhbgpkcmFnX2NvbnZlcnRfcHJvYyhXaWRnZXQgdywg
QXRvbSAqc2VsZWN0aW9uLAogICAgICAgICAgICAgICAgICBBdG9tICp0YXJnZXQsIEF0b20gKnR5
cGVfcmV0dXJuLAogICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgKnZhbHVlX3JldHVybiwKICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqbGVuZ3RoX3JldHVybiwKICAgICAgICAgICAg
ICAgICAgaW50ICpmb3JtYXRfcmV0dXJuKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0Znc7CiAg
ICBXaWRnZXQgc3JjOwogICAgQXRvbSBhdG9tX2NvbXBfdGV4dDsKICAgIEF0b20gYXRvbV90ZXh0
OwogICAgQXRvbSBhdG9tX21vdGlmX2Ryb3A7CiAgICBBdG9tIGF0b21fZGVsZXRlOwoKICAgIGF0
b21fY29tcF90ZXh0ID0gWG1JbnRlcm5BdG9tKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdl
dF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSkt
PmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29y
ZS5zY3JlZW4tPmRpc3BsYXkpLCAiQ09NUE9VTkRfVEVYVCIsIDApOwogICAgYXRvbV90ZXh0ID0g
WG1JbnRlcm5BdG9tKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9j
bGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5k
aXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3Bs
YXkpLCAiVEVYVCIsIDApOwogICAgYXRvbV9tb3RpZl9kcm9wID0gWG1JbnRlcm5BdG9tKCgoKChP
YmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQg
JiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3Qp
KHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAiX01PVElGX0RST1Ai
LCAwKTsKICAgIGF0b21fZGVsZXRlID0gWG1JbnRlcm5BdG9tKCgoKChPYmplY3QpKHcpKS0+b2Jq
ZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lk
Z2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBh
cmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAiREVMRVRFIiwgMCk7CgogICAgaWYgKCpzZWxl
Y3Rpb24gIT0gYXRvbV9tb3RpZl9kcm9wKQogICAgewogICAgICAgIF9MdERlYnVnKCIuLi8uLi8u
Li9saWIvWG0vVGV4dEYuYyIsIHcsICJzZWxlY3Rpb24gaXMgbm90IE1PVElGX0RST1BcbiIpOwog
ICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4
dEYuYyIsIHcsICJXZSdyZSBkZWFsaW5nIHdpdGggTU9USUZfRFJPUFxuIik7CgogICAgWHRWYUdl
dFZhbHVlcyh3LCAoKGNoYXIgKikmX1htU3RyaW5nc1s1NDYwXSksICZzcmMsICgodm9pZCAqKTAp
KTsKICAgIHRmdyA9IChYbVRleHRGaWVsZFdpZGdldClzcmM7CiAgICBfWG1PYmplY3RMb2NrKHNy
Yyk7CgogICAgaWYgKCp0YXJnZXQgPT0gKChBdG9tKSAzMSkpewogICAgICAgICpsZW5ndGhfcmV0
dXJuID0gKGxvbmcpKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRl
eHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxlbik7CiAg
ICAgICAgKnZhbHVlX3JldHVybiA9ICgoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lv
biAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVj
dGlvblRleHQpKSAhPSAoKHZvaWQgKikwKSA/IChzdHJjcHkoWHRNYWxsb2MoKHVuc2lnbmVkKXN0
cmxlbigoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCkpICsgMSksICgo
KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHRmdykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkpIDogKCh2b2lkICopMCkp
OwogICAgICAgICp0eXBlX3JldHVybiA9ICgoQXRvbSkgMzEpOwogICAgfQogICAgZWxzZSBpZiAo
KnRhcmdldCA9PSBhdG9tX2NvbXBfdGV4dCB8fCAqdGFyZ2V0ID09IGF0b21fdGV4dCl7CgogICAg
ICAgICAgICBYVGV4dFByb3BlcnR5IHByb3A7CiAgICAgICAgICAgIGNoYXIgKmJ1ZjsKICAgICAg
ICAgICAgaW50IHJldDsKCiAgICAgICAgICAgIGJ1ZiA9IFh0TWFsbG9jKCgoKFhtVGV4dEZpZWxk
UGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0
LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25MZW4pICsgMSk7CiAgICAgICAgICAgIChfX2V4dGVuc2lv
bl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVu
c2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNl
bGVjdGlvblRleHQpKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAoKCgoWG1UZXh0RmllbGRQYXJ0
TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0
ZW5zaW9uKSktPlNlbGVjdGlvbkxlbikpID8gKHN0cmxlbiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVz
c3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5z
aW9uKSktPlNlbGVjdGlvblRleHQpKSArIDEgPj0gKChzaXplX3QpICgoKChYbVRleHRGaWVsZFBh
cnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5l
eHRlbnNpb24pKS0+U2VsZWN0aW9uTGVuKSkpID8gKGNoYXIgKikgbWVtY3B5IChidWYsICgoKFht
VGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRm
dykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSwgKCgoWG1UZXh0RmllbGRQYXJ0
TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0
ZW5zaW9uKSktPlNlbGVjdGlvbkxlbikpIDogc3RybmNweSAoYnVmLCAoKChYbVRleHRGaWVsZFBh
cnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5l
eHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCksICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRl
bnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmV4dGVuc2lvbikpLT5T
ZWxlY3Rpb25MZW4pKSkgOiBzdHJuY3B5IChidWYsICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZF
eHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LmV4dGVuc2lvbikp
LT5TZWxlY3Rpb25UZXh0KSwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAo
KChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvbkxl
bikpKSk7CiAgICAgICAgICAgIGJ1ZlsoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9u
ICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0
aW9uTGVuKV0gPSAnXDAnOwoKICAgICAgICAgICAgcmV0ID0gWG1iVGV4dExpc3RUb1RleHRQcm9w
ZXJ0eSgoKCgoT2JqZWN0KSh0ZncpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5j
bGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh0ZncpKS0+Y29yZS5zY3JlZW4tPmRpc3Bs
YXkgOiAoKE9iamVjdCkodGZ3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5
KSwgJmJ1ZiwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ29tcG91bmRUZXh0
U3R5bGUsICZwcm9wKTsKCiAgICAgICAgICAgIFh0RnJlZShidWYpOwogICAgICAgICAgICBpZiAo
cmV0ICE9IDApewogICAgICAgICAgICAgICAgKmxlbmd0aF9yZXR1cm4gPSAwOwogICAgICAgICAg
ICAgICAgKnZhbHVlX3JldHVybiA9ICgodm9pZCAqKTApOwogICAgICAgICAgICB9CiAgICAgICAg
ICAgIGVsc2V7CiAgICAgICAgICAgICAgICBidWYgPSBYdE1hbGxvYyhwcm9wLm5pdGVtcyArIDEp
OwogICAgICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgcHJvcC52YWx1ZSwgcHJvcC5uaXRlbXMpOwog
ICAgICAgICAgICAgICAgYnVmW3Byb3Aubml0ZW1zXSA9ICdcMCc7CiAgICAgICAgICAgICAgICAq
bGVuZ3RoX3JldHVybiA9IHByb3Aubml0ZW1zOwogICAgICAgICAgICAgICAgKnZhbHVlX3JldHVy
biA9IGJ1ZjsKICAgICAgICAgICAgfQogICAgICAgICAgICp0eXBlX3JldHVybiA9IGF0b21fY29t
cF90ZXh0OwoKICAgIH0KICAgIGVsc2UgaWYgKCp0YXJnZXQgPT0gYXRvbV9kZWxldGUpCiAgICB7
CgogICAgICAgIGludCBzdGFydCwgZW5kOwoKICAgICAgICBzdGFydCA9ICgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSgoV2lkZ2V0KXNyYykpLT50ZXh0LnByaW1fcG9zX2xlZnQpOwogICAgICAgIGVuZCA9
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSgoV2lkZ2V0KXNyYykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0
KTsKICAgICAgICBYbVRleHRGaWVsZFNldFNlbGVjdGlvbigoV2lkZ2V0KXNyYywtMSwtMSwwTCk7
CiAgICAgICAgTW9kaWZ5VGV4dCh0ZncsICgodm9pZCAqKTApLAogICAgICAgICAgICAgICAgICAg
c3RhcnQsCiAgICAgICAgICAgICAgICAgICBlbmQsCiAgICAgICAgICAgICAgICAgICAoY2hhciAq
KTAsIDAsCiAgICAgICAgICAgICAgICAgICBNYXNzaXZlQ2hhbmdlRHJhdywgQ1BfRW5kT2ZJbnNl
cnQpOwoKICAgICAgICAqdmFsdWVfcmV0dXJuID0gKCh2b2lkICopMCk7CiAgICAgICAgKnR5cGVf
cmV0dXJuID0gWG1JbnRlcm5BdG9tKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFz
cy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUu
c2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3Jl
ZW4tPmRpc3BsYXkpLCAiTlVMTCIsIDApOwogICAgICAgICpsZW5ndGhfcmV0dXJuID0gMDsKICAg
IH0KICAgIGVsc2UKICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soc3JjKTsKICAgICAgICBy
ZXR1cm4gMDsKICAgIH0KCiAgICAqZm9ybWF0X3JldHVybiA9IDg7CgogICAgX1htT2JqZWN0VW5s
b2NrKHNyYyk7CiAgICByZXR1cm4gMTsKfQoKCnN0YXRpYyB2b2lkCmRyYWdfdHJhbnNmZXJfcHJv
YyhXaWRnZXQgZHcsIFh0UG9pbnRlciBjbGllbnQsIEF0b20gKnNlbGVjdGlvbiwgQXRvbSAqdHlw
ZSwKICAgICAgICAgICAgICAgICBYdFBvaW50ZXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgKmxlbmd0
aCwgaW50ICpmb3JtYXQpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRX
aWRnZXQpY2xpZW50OwogICAgQXRvbSBhdG9tX2NvbXBfdGV4dDsKICAgIEF0b20gYXRvbV90ZXh0
OwogICAgQXRvbSBhdG9tX251bGw7CiAgICBBcmcgYXJnc1syXTsKICAgIGNoYXIgKmF0b21fbmFt
ZTsKCiAgICBhdG9tX2NvbXBfdGV4dCA9IFhtSW50ZXJuQXRvbSgoKCgoT2JqZWN0KSh3KSktPm9i
amVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdp
ZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5w
YXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgIkNPTVBPVU5EX1RFWFQiLCAwKTsKICAgIGF0
b21fdGV4dCA9IFhtSW50ZXJuQXRvbSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xh
c3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3Jl
LnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2Ny
ZWVuLT5kaXNwbGF5KSwgIlRFWFQiLCAwKTsKICAgIGF0b21fbnVsbCA9IFhtSW50ZXJuQXRvbSgo
KCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5p
dGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2Jq
ZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgIk5VTEwiLCAw
KTsKCiAgICBhdG9tX25hbWUgPSBYR2V0QXRvbU5hbWUoKCgoKE9iamVjdCkoZHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0
KShkdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KShkdykpLT5vYmplY3QucGFy
ZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICp0eXBlKTsKCiAgICBpZiAoKnR5cGUgIT0gYXRv
bV9udWxsICYmICghdmFsdWUgfHwKICAgICAgICAoKnR5cGUgIT0gYXRvbV9jb21wX3RleHQgJiYg
KnR5cGUgIT0gYXRvbV90ZXh0ICYmICp0eXBlICE9ICgoQXRvbSkgMzEpKSkpCiAgICB7CgogICAg
ICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4i
LCAiZHJhZ190cmFuc2Zlcl9wcm9jOiBEbkQgVHJhbnNmZXIgRmFpbGVkKFRleHRGaWVsZCkiKTsK
CiAgICAgICAgKCh2b2lkKSggKGFyZ3NbMF0pLm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3Nb
MTAzMjhdKSksIChhcmdzWzBdKS52YWx1ZSA9IChYdEFyZ1ZhbCkoWG1UUkFOU0ZFUl9GQUlMVVJF
KSApKTsKICAgICAgICAoKHZvaWQpKCAoYXJnc1sxXSkubmFtZSA9ICgoKGNoYXIgKikmX1htU3Ry
aW5nc1s4NDQ1XSkpLCAoYXJnc1sxXSkudmFsdWUgPSAoWHRBcmdWYWwpKDApICkpOwogICAgICAg
IFh0U2V0VmFsdWVzKGR3LCBhcmdzLCAyKTsKCiAgICB9CiAgICBlbHNlIGlmICgqdHlwZSAhPSBh
dG9tX251bGwpCiAgICB7CiAgICAgICAgWFRleHRQcm9wZXJ0eSBwcm9wOwogICAgICAgIGludCBj
b3VudCwgaTsKICAgICAgICBjaGFyICoqbGlzdDsKCiAgICAgICAgaWYgKCp0eXBlID09ICgoQXRv
bSkgMzEpKXsKICAgICAgICAgICAgY2hhciAqYnVmOwoKICAgICAgICAgICAgYnVmID0gWHRNYWxs
b2MoKmxlbmd0aCArIDEpOwogICAgICAgICAgICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2Nv
bnN0YW50X3AgKChjaGFyICopdmFsdWUpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wICgqbGVuZ3Ro
KSA/IChzdHJsZW4gKChjaGFyICopdmFsdWUpICsgMSA+PSAoKHNpemVfdCkgKCpsZW5ndGgpKSA/
IChjaGFyICopIG1lbWNweSAoYnVmLCAoY2hhciAqKXZhbHVlLCAqbGVuZ3RoKSA6IHN0cm5jcHkg
KGJ1ZiwgKGNoYXIgKil2YWx1ZSwgKmxlbmd0aCkpIDogc3RybmNweSAoYnVmLCAoY2hhciAqKXZh
bHVlLCAqbGVuZ3RoKSkpOwogICAgICAgICAgICBidWZbKmxlbmd0aF0gPSAnXDAnOwoKCiAgICAg
ICAgICAgIFhtYlRleHRMaXN0VG9UZXh0UHJvcGVydHkoKCgoKE9iamVjdCkodykpLT5vYmplY3Qu
d2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQp
KHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50
LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICZidWYsIDEsCiAgICAgICAgICAgICAgICAgICAgICAg
IFhDb21wb3VuZFRleHRTdHlsZSwgJnByb3ApOwoKICAgICAgICAgICAgWHRGcmVlKGJ1Zik7CiAg
ICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIHByb3AudmFsdWUgPSAodW5zaWduZWQg
Y2hhciAqKXZhbHVlOwogICAgICAgICAgICBwcm9wLmVuY29kaW5nID0gKnR5cGU7CiAgICAgICAg
ICAgIHByb3AuZm9ybWF0ID0gKmZvcm1hdDsKICAgICAgICAgICAgcHJvcC5uaXRlbXMgPSAqbGVu
Z3RoOwogICAgICAgIH0KCiAgICAgICAgWG1iVGV4dFByb3BlcnR5VG9UZXh0TGlzdCgoKCgoT2Jq
ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYg
MHgwNCkgPyAoKFdpZGdldCkodykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0KSh3
KSktPm9iamVjdC5wYXJlbnQtPmNvcmUuc2NyZWVuLT5kaXNwbGF5KSwgJnByb3AsICZsaXN0LCAm
Y291bnQpOwoKICAgICAgICBmb3IoaT0wOyBpPGNvdW50OyBpKyspewogICAgICAgICAgICBEb0lu
c2VydCh3LCAoKHZvaWQgKikwKSwgbGlzdFtpXSwgc3RybGVuKGxpc3RbaV0pKTsKICAgICAgICB9
CgogICAgfQoKICAgIGlmICh2YWx1ZSkKICAgICAgICBYdEZyZWUoKGNoYXIgKil2YWx1ZSk7Cn0K
CgpzdGF0aWMgdm9pZApwcm9jZXNzX2Ryb3AoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0
YSwgWHRQb2ludGVyIGNhbGxfZGF0YSkKewogICAgWG1Ecm9wUHJvY0NhbGxiYWNrU3RydWN0ICpE
cm9wSW5mbyA9CiAgICAgICAgKFhtRHJvcFByb2NDYWxsYmFja1N0cnVjdCAqKSBjYWxsX2RhdGE7
CiAgICBYbURyb3BUcmFuc2ZlckVudHJ5UmVjIGVudHJ5WzJdOwogICAgQXRvbSBhdG9tX2NvbXBf
dGV4dDsKICAgIEF0b20gYXRvbV90ZXh0OwogICAgQXRvbSBhdG9tX251bGw7CiAgICBBdG9tICpl
eHBvcnRfdGFyZ2V0czsKICAgIEF0b20gdGFyZ2V0OwogICAgQ2FyZGluYWwgbnVtX2V4cG9ydF90
YXJnZXRzOwogICAgQXJnIGFyZ3NbMTBdOwogICAgQ2FyZGluYWwgbiA9IDA7CiAgICBYbVRleHRQ
b3NpdGlvbiBwb3M7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRn
ZXQpdzsKICAgIEJvb2xlYW4gY29tcF90ZXh0LCB0ZXh0LCBzdHJpbmc7CgogICAgYXRvbV9jb21w
X3RleHQgPSBYbUludGVybkF0b20oKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNz
LT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5z
Y3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVl
bi0+ZGlzcGxheSksICJDT01QT1VORF9URVhUIiwgMCk7CiAgICBhdG9tX3RleHQgPSBYbUludGVy
bkF0b20oKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNs
YXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkg
OiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICJU
RVhUIiwgMCk7CiAgICBhdG9tX251bGwgPSBYbUludGVybkF0b20oKCgoKE9iamVjdCkodykpLT5v
YmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChX
aWRnZXQpKHcpKS0+Y29yZS5zY3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkodykpLT5vYmplY3Qu
cGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSksICJOVUxMIiwgMCk7CgogICAgaWYgKChEcm9w
SW5mby0+ZHJvcEFjdGlvbiA9PSBYbURST1ApICYmCiAgICAgICAgKChEcm9wSW5mby0+b3BlcmF0
aW9uID09ICgxTCA8PCAxKSkgfHwKICAgICAgICAgKERyb3BJbmZvLT5vcGVyYXRpb24gPT0gKDFM
IDw8IDApKSkpCiAgICB7CgoKICAgICAgICAoKHZvaWQpKCAoYXJnc1tuXSkubmFtZSA9ICgoKGNo
YXIgKikmX1htU3RyaW5nc1s2NjYzXSkpLCAoYXJnc1tuXSkudmFsdWUgPSAoWHRBcmdWYWwpKCZl
eHBvcnRfdGFyZ2V0cykgKSk7IG4rKzsKICAgICAgICAoKHZvaWQpKCAoYXJnc1tuXSkubmFtZSA9
ICgoKGNoYXIgKikmX1htU3RyaW5nc1s4NDYyXSkpLCAoYXJnc1tuXSkudmFsdWUgPSAoWHRBcmdW
YWwpKCZudW1fZXhwb3J0X3RhcmdldHMpICkpOyBuKys7CiAgICAgICAgWHRHZXRWYWx1ZXMoRHJv
cEluZm8tPmRyYWdDb250ZXh0LCBhcmdzLCBuKTsKICAgICAgICBjb21wX3RleHQgPSB0ZXh0ID0g
c3RyaW5nID0gMDsKICAgICAgICBmb3IgKG4gPSAwOyBuIDwgbnVtX2V4cG9ydF90YXJnZXRzOyBu
KyspIHsKICAgICAgICAgICAgaWYgKGV4cG9ydF90YXJnZXRzW25dID09IGF0b21fY29tcF90ZXh0
KQogICAgICAgICAgICAgICAgY29tcF90ZXh0ID0gMTsKICAgICAgICAgICAgZWxzZSBpZiAoZXhw
b3J0X3RhcmdldHNbbl0gPT0gYXRvbV90ZXh0KQogICAgICAgICAgICAgICAgdGV4dCA9IDE7CiAg
ICAgICAgICAgIGVsc2UgaWYgKGV4cG9ydF90YXJnZXRzW25dID09ICgoQXRvbSkgMzEpKQogICAg
ICAgICAgICAgICAgc3RyaW5nID0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbXBfdGV4dCkK
ICAgICAgICAgICAgdGFyZ2V0ID0gYXRvbV9jb21wX3RleHQ7CiAgICAgICAgZWxzZSBpZiAodGV4
dCkKICAgICAgICAgICAgdGFyZ2V0ID0gYXRvbV90ZXh0OwogICAgICAgIGVsc2UgaWYgKHN0cmlu
ZykKICAgICAgICAgICAgdGFyZ2V0ID0gKChBdG9tKSAzMSk7CiAgICAgICAgZWxzZQogICAgICAg
ICAgICB0YXJnZXQgPSBhdG9tX251bGw7CgogICAgICAgIGVudHJ5WzBdLnRhcmdldCA9IHRhcmdl
dDsKICAgICAgICBlbnRyeVswXS5jbGllbnRfZGF0YSA9IChYdFBvaW50ZXIpIHc7CgogICAgICAg
IG4gPSAwOwogICAgICAgIGlmICh0YXJnZXQgPT0gYXRvbV9udWxsKQogICAgICAgIHsKICAgICAg
ICAgICAgKCh2b2lkKSggKGFyZ3MgW25dKS5uYW1lID0gKCgoY2hhciAqKSZfWG1TdHJpbmdzWzEw
MzI4XSkpLCAoYXJncyBbbl0pLnZhbHVlID0gKFh0QXJnVmFsKShYbVRSQU5TRkVSX0ZBSUxVUkUp
ICkpOyBuKys7CiAgICAgICAgICAgICgodm9pZCkoIChhcmdzIFtuXSkubmFtZSA9ICgoKGNoYXIg
KikmX1htU3RyaW5nc1s4NDQ1XSkpLCAoYXJncyBbbl0pLnZhbHVlID0gKFh0QXJnVmFsKSgwKSAp
KTsgbisrOwogICAgICAgICAgICBEcm9wSW5mby0+b3BlcmF0aW9uID0gMEw7CiAgICAgICAgICAg
IERyb3BJbmZvLT5kcm9wU2l0ZVN0YXR1cyA9IFhtSU5WQUxJRF9EUk9QX1NJVEU7CiAgICAgICAg
fQogICAgICAgIGVsc2UgaWYgKERyb3BJbmZvLT5vcGVyYXRpb24gPT0gKDFMIDw8IDApKQogICAg
ICAgIHsKICAgICAgICAgICAgZW50cnlbMV0udGFyZ2V0ID0gWG1JbnRlcm5BdG9tKCgoKChPYmpl
Y3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAw
eDA0KSA/ICgoV2lkZ2V0KSh3KSktPmNvcmUuc2NyZWVuLT5kaXNwbGF5IDogKChPYmplY3QpKHcp
KS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3BsYXkpLCAiREVMRVRFIiwgMCk7CiAg
ICAgICAgICAgIGVudHJ5WzFdLmNsaWVudF9kYXRhID0gKFh0UG9pbnRlcikgdzsKICAgICAgICAg
ICAgKCh2b2lkKSggKGFyZ3MgW25dKS5uYW1lID0gKCgoY2hhciAqKSZfWG1TdHJpbmdzWzg0NDVd
KSksIChhcmdzIFtuXSkudmFsdWUgPSAoWHRBcmdWYWwpKDIpICkpOyBuKys7CiAgICAgICAgICAg
IERyb3BJbmZvLT5kcm9wU2l0ZVN0YXR1cyA9IFhtVkFMSURfRFJPUF9TSVRFOwogICAgICAgIH0K
ICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAoKHZvaWQpKCAoYXJncyBbbl0pLm5h
bWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbODQ0NV0pKSwgKGFyZ3MgW25dKS52YWx1ZSA9IChY
dEFyZ1ZhbCkoMSkgKSk7IG4rKzsKICAgICAgICAgICAgRHJvcEluZm8tPmRyb3BTaXRlU3RhdHVz
ID0gWG1WQUxJRF9EUk9QX1NJVEU7CiAgICAgICAgfQogICAgICAgICgodm9pZCkoIChhcmdzIFtu
XSkubmFtZSA9ICgoKGNoYXIgKikmX1htU3RyaW5nc1s2NTU2XSkpLCAoYXJncyBbbl0pLnZhbHVl
ID0gKFh0QXJnVmFsKShlbnRyeSkgKSk7IG4rKzsKICAgICAgICAoKHZvaWQpKCAoYXJncyBbbl0p
Lm5hbWUgPSAoKChjaGFyICopJl9YbVN0cmluZ3NbMTAzMTVdKSksIChhcmdzIFtuXSkudmFsdWUg
PSAoWHRBcmdWYWwpKGRyYWdfdHJhbnNmZXJfcHJvYykgKSk7IG4rKzsKCgogICAgICAgIHBvcyA9
IFRleHRQaXhlbFRvU2VsZWN0aW9uUG9zKHRmdywgRHJvcEluZm8tPngpOwogICAgICAgIERvQ3Vy
c29yTW92ZSh0ZncsICgodm9pZCAqKTApLCBwb3MsIDEsIDEpOwogICAgfQogICAgZWxzZQogICAg
ewogICAgICAgICgodm9pZCkoIChhcmdzIFtuXSkubmFtZSA9ICgoKGNoYXIgKikmX1htU3RyaW5n
c1sxMDMyOF0pKSwgKGFyZ3MgW25dKS52YWx1ZSA9IChYdEFyZ1ZhbCkoWG1UUkFOU0ZFUl9GQUlM
VVJFKSApKTsgbisrOwogICAgICAgICgodm9pZCkoIChhcmdzIFtuXSkubmFtZSA9ICgoKGNoYXIg
KikmX1htU3RyaW5nc1s4NDQ1XSkpLCAoYXJncyBbbl0pLnZhbHVlID0gKFh0QXJnVmFsKSgwKSAp
KTsgbisrOwogICAgICAgIERyb3BJbmZvLT5vcGVyYXRpb24gPSAwTDsKICAgICAgICBEcm9wSW5m
by0+ZHJvcFNpdGVTdGF0dXMgPSBYbUlOVkFMSURfRFJPUF9TSVRFOwogICAgfQoKICAgIFhtRHJv
cFRyYW5zZmVyU3RhcnQgKERyb3BJbmZvLT5kcmFnQ29udGV4dCwgYXJncywgbik7Cgp9CgoKc3Rh
dGljIHZvaWQKcHJvY2Vzc19jYW5jZWwoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAg
ICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVidWco
Ii4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJwcm9jZXNzX2Nh
bmNlbCIpOwoKCgoKICAgIGlmICgoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQp
KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKCgoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50
KSkpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAo
KCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSgoKChPYmplY3Qp
KHcpKS0+b2JqZWN0LnBhcmVudCkpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xh
c3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xh
c3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKCgoKE9iamVjdCkodykpLT5vYmpl
Y3QucGFyZW50KSkpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNp
b24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25QdHIgKChYbUdl
bmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFzcykoKCgoKE9i
amVjdCkoKCgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQpKSktPm9iamVjdC53aWRnZXRfY2xh
c3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFz
dFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtTUFOQUdFUl9CSVQpID4+IDMp
XSkgJiAoMSA8PCAoKFhtTUFOQUdFUl9CSVQpICYgMHgwNykpID8gMSA6IDApIDogMCkpKQogICAg
ewogICAgICAgIFh0Q2FsbEFjdGlvblByb2MoKCgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQp
LCAiTWFuYWdlclBhcmVudENhbmNlbCIsIGV2LCBwYXJhbXMsICpudW1fcGFyYW1zKTsKICAgIH0K
fQoKCnN0YXRpYyB2b2lkCnByb2Nlc3NfaG9tZShXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAg
ICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVi
dWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJwcm9jZXNz
X2hvbWUiKTsKfQoKCnN0YXRpYyB2b2lkCnByb2Nlc3NfcmV0dXJuKFdpZGdldCB3LCBYRXZlbnQg
KmV2LAogICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMp
CnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVz
XG4iLCAicHJvY2Vzc19yZXR1cm4iKTsKfQoKCnN0YXRpYyB2b2lkCnByb2Nlc3NfdGFiKFdpZGdl
dCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51
bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRn
ZXQpdywgIiVzXG4iLCAicHJvY2Vzc190YWIiKTsKfQoKCnN0YXRpYyB2b2lkCnF1aWNrX2NvcHlf
c2V0KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywg
Q2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4
dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAicXVpY2tfY29weV9zZXQiKTsKfQoKCnN0YXRpYyB2
b2lkCnF1aWNrX2N1dF9zZXQoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgU3Ry
aW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBfTHREZWJ1ZygiLi4vLi4v
Li4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgInF1aWNrX2N1dF9zZXQiKTsK
fQoKCnN0YXRpYyB2b2lkCnJlZHJhd19kaXNwbGF5KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAg
ICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9M
dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAicmVk
cmF3X2Rpc3BsYXkiKTsKICAgIERyYXcoKFhtVGV4dEZpZWxkV2lkZ2V0KXcpOwp9CgoKc3RhdGlj
IHZvaWQKc2Vjb25kYXJ5X2FkanVzdChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAg
ICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVn
KCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAic2Vjb25kYXJ5
X2FkanVzdCIpOwp9CgoKc3RhdGljIHZvaWQKc2Vjb25kYXJ5X25vdGlmeShXaWRnZXQgdywgWEV2
ZW50ICpldiwKICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9w
YXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQp
dywgIiVzXG4iLCAic2Vjb25kYXJ5X25vdGlmeSIpOwp9CgoKc3RhdGljIHZvaWQKc2Vjb25kYXJ5
X3N0YXJ0KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAgICAgU3RyaW5nICpwYXJh
bXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1ht
L1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgInNlY29uZGFyeV9zdGFydCIpOwp9CgoKc3Rh
dGljIHZvaWQKc2VsZWN0X2FkanVzdChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAgICAgICAg
ICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIu
Li8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAic2VsZWN0X2FkanVz
dCIpOwp9CgoKc3RhdGljIHZvaWQKc2VsZWN0X2FsbChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAg
ICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIFhtVGV4
dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwoKICAgIF9MdERlYnVnKCIu
Li8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAic2VsZWN0X2FsbCIp
OwoKICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5wcmltX2FuY2hvcikgPSAo
KChYbVRleHRGaWVsZFdpZGdldCkodGZ3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPSAwOwogICAg
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHRmdykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KSA9ICgoKFht
VGV4dEZpZWxkV2lkZ2V0KSh0ZncpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKTsKCgogICAgUHJpbWFy
eVNlbGVjdGlvbkNvbXBsZXRlKHRmdywgZXYtPnhidXR0b24udGltZSk7CgogICAgRHJhdyh0Zncp
Owp9CgoKc3RhdGljIHZvaWQKc2VsZWN0X2VuZChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAg
ICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVn
KCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAic2VsZWN0X2Vu
ZCIpOwp9CgoKc3RhdGljIHZvaWQKc2VsZWN0X3N0YXJ0KFdpZGdldCB3LCBYRXZlbnQgKmV2LAog
ICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBY
bVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAgICBfTHREZWJ1
ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgInNlbGVjdF9z
dGFydCIpOwoKICAgIGdyYWJfZm9jdXMoKFdpZGdldCl0ZncsIGV2LCBwYXJhbXMsIG51bV9wYXJh
bXMpOwp9CgoKc3RhdGljIHZvaWQKc2VsZl9pbnNlcnQoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAg
ICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewoKICAgIFht
VGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwogICAgY2hhciBidWZb
MTI4XSwgKmJ1ZjI7CiAgICBLZXlTeW0ga2V5c3ltOwogICAgaW50IGxlbiwgc3RhdHVzOwoKICAg
IF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAi
c2VsZl9pbnNlcnQiKTsKCiAgICBsZW4gPSBYbUltTWJMb29rdXBTdHJpbmcoKFdpZGdldCl0Zncs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFhLZXlQcmVzc2VkRXZlbnQgKilldiwgYnVm
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAma2V5c3ltLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGF0dXMpOwoK
CiAgICBidWYyID0gWHRNYWxsb2MobGVuKzEpOwogICAgaWYgKHN0YXR1cyA9PSAtMSkKICAgICAg
ICBYbUltTWJMb29rdXBTdHJpbmcoKFdpZGdldCl0ZncsIChYS2V5UHJlc3NlZEV2ZW50ICopZXYs
IGJ1ZjIsIGxlbiwgJmtleXN5bSwgJnN0YXR1cyk7CiAgICBlbHNlCiAgICAgICAgKF9fZXh0ZW5z
aW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChidWYpICYmIF9fYnVpbHRpbl9jb25zdGFudF9w
IChsZW4pID8gKHN0cmxlbiAoYnVmKSArIDEgPj0gKChzaXplX3QpIChsZW4pKSA/IChjaGFyICop
IG1lbWNweSAoYnVmMiwgYnVmLCBsZW4pIDogc3RybmNweSAoYnVmMiwgYnVmLCBsZW4pKSA6IHN0
cm5jcHkgKGJ1ZjIsIGJ1ZiwgbGVuKSkpOwoKICAgIGlmIChfTHREZWJ1Z0luRGVidWcoIi4uLy4u
Ly4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl0ZncpKQogICAgewogICAgICAgIF9MdERlYnVn
KCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdGZ3LCAiWG1JbU1iTG9va3VwU3Ry
aW5nID0+ICVkXG4iLCBsZW4pOwoKCiAgICAgICAgX0x0RGVidWcwKCIuLi8uLi8uLi9saWIvWG0v
VGV4dEYuYyIsIChXaWRnZXQpdGZ3LCAiXHRTdGF0dXMgJXNcbiIsIChzdGF0dXMgPT0gMSkgPyAi
bm9uZSIgOiAoc3RhdHVzID09IDIpID8gImNoYXJzIiA6IChzdGF0dXMgPT0gNCkgPyAiYm90aCIg
OiAoc3RhdHVzID09IDMpID8gImtleXN5bSIgOiAoc3RhdHVzID09IC0xKSA/ICJvdmVyZmxvdyIg
OiAiPz8/PyIpOwoKCgoKCgogICAgICAgIGlmIChzdGF0dXMgPT0gNCB8fCBzdGF0dXMgPT0gMykK
ICAgICAgICB7CiAgICAgICAgICAgIF9MdERlYnVnMCgiLi4vLi4vLi4vbGliL1htL1RleHRGLmMi
LCAoV2lkZ2V0KXRmdywgIlx0S2V5U3ltIDB4JVhcbiIsIGtleXN5bSk7CgogICAgICAgIH0KICAg
ICAgICBpZiAobGVuID4gMCkKICAgICAgICB7CiAgICAgICAgICAgIGludCBpOwoKICAgICAgICAg
ICAgX0x0RGVidWcwKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdGZ3LCAiXHRC
dWZmZXIgIik7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwg
KFdpZGdldCl0ZncsICIgJVgiLCAweEZGICYgYnVmW2ldKTsKICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgX0x0RGVidWcwKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdGZ3LCAi
XG4iKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKGxlbiA+IDApCiAgICB7CiAgICAgICAgaWYg
KHN0YXR1cyA9PSA0IHx8IHN0YXR1cyA9PSAyKQogICAgICAgIHsKICAgICAgICAgICAgRG9JbnNl
cnQodGZ3LCBldiwgYnVmMiwgbGVuKTsKICAgICAgICB9CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApz
ZXRfYW5jaG9yKFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgIFN0cmluZyAqcGFyYW1z
LCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9U
ZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJzZXRfYW5jaG9yIik7Cn0KCgpzdGF0aWMgdm9p
ZApzZXRfaW5zZXJ0aW9uX3BvaW50KFdpZGdldCB3LCBYRXZlbnQgKmV2LAogICAgICAgICAgICAg
ICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAgX0x0RGVi
dWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJzZXRfaW5z
ZXJ0aW9uX3BvaW50Iik7Cn0KCgpzdGF0aWMgdm9pZApzZXRfc2VsZWN0aW9uX2hpbnQoV2lkZ2V0
IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGlu
YWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIs
IChXaWRnZXQpdywgIiVzXG4iLCAic2V0X3NlbGVjdGlvbl9oaW50Iik7Cn0KCgpzdGF0aWMgdm9p
ZAp0b2dnbGVfYWRkX21vZGUoV2lkZ2V0IHcsIFhFdmVudCAqZXYsCiAgICAgICAgICAgICAgICBT
dHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9MdERlYnVnKCIuLi8u
Li8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAidG9nZ2xlX2FkZF9tb2Rl
Iik7Cn0KCgpzdGF0aWMgdm9pZAp0cmF2ZXJzZV9ob21lKFdpZGdldCB3LCBYRXZlbnQgKmV2LAog
ICAgICAgICAgICAgIFN0cmluZyAqcGFyYW1zLCBDYXJkaW5hbCAqbnVtX3BhcmFtcykKewogICAg
WG1UZXh0RmllbGRXaWRnZXQgdGZ3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KXc7CgogICAgX0x0RGVi
dWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgKFdpZGdldCl3LCAiJXNcbiIsICJ0cmF2ZXJz
ZV9ob21lIik7CgogICAgWG1Qcm9jZXNzVHJhdmVyc2FsKChXaWRnZXQpdGZ3LCBYbVRSQVZFUlNF
X0hPTUUpOwp9CgoKc3RhdGljIHZvaWQKdHJhdmVyc2VfbmV4dChXaWRnZXQgdywgWEV2ZW50ICpl
diwKICAgICAgICAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsK
ICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHRmdyA9IChYbVRleHRGaWVsZFdpZGdldCl3OwoKICAgIF9M
dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAidHJh
dmVyc2VfbmV4dCIpOwoKICAgIFhtUHJvY2Vzc1RyYXZlcnNhbCgoV2lkZ2V0KXRmdywgWG1UUkFW
RVJTRV9ORVhUKTsKfQoKCnN0YXRpYyB2b2lkCnRyYXZlcnNlX3ByZXYoV2lkZ2V0IHcsIFhFdmVu
dCAqZXYsCiAgICAgICAgICAgICAgU3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1z
KQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB0ZncgPSAoWG1UZXh0RmllbGRXaWRnZXQpdzsKCiAg
ICBfTHREZWJ1ZygiLi4vLi4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwg
InRyYXZlcnNlX3ByZXYiKTsKCiAgICBYbVByb2Nlc3NUcmF2ZXJzYWwoKFdpZGdldCl0ZncsIFht
VFJBVkVSU0VfUFJFVik7Cn0KCgpzdGF0aWMgdm9pZAp1bmtpbGwoV2lkZ2V0IHcsIFhFdmVudCAq
ZXYsCiAgICAgICBTdHJpbmcgKnBhcmFtcywgQ2FyZGluYWwgKm51bV9wYXJhbXMpCnsKICAgIF9M
dERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIChXaWRnZXQpdywgIiVzXG4iLCAidW5r
aWxsIik7Cn0KCgpzdGF0aWMgdm9pZAp1bm1hcChXaWRnZXQgdywgWEV2ZW50ICpldiwKICAgICAg
U3RyaW5nICpwYXJhbXMsIENhcmRpbmFsICpudW1fcGFyYW1zKQp7CiAgICBfTHREZWJ1ZygiLi4v
Li4vLi4vbGliL1htL1RleHRGLmMiLCAoV2lkZ2V0KXcsICIlc1xuIiwgInVubWFwIik7Cn0KCgoK
CgoKZXh0ZXJuIFdpZGdldApYbUNyZWF0ZVRleHRGaWVsZChXaWRnZXQgcGFyZW50LCBjaGFyICpu
YW1lLCBBcmcgKmFyZ2xpc3QsIENhcmRpbmFsIGFyZ0NvdW50KQp7CiAgICAgICAgV2lkZ2V0IHI7
CgogICAgICAgIF9YbU9iamVjdExvY2socGFyZW50KTsKICAgICAgICByID0gWHRDcmVhdGVXaWRn
ZXQobmFtZSwgeG1UZXh0RmllbGRXaWRnZXRDbGFzcywgcGFyZW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ2xpc3QsIGFyZ0NvdW50KTsKICAgICAgICBfWG1PYmplY3RVbmxvY2socGFy
ZW50KTsKICAgICAgICByZXR1cm4gcjsKfQoKCmV4dGVybiB2b2lkClhtVGV4dEZpZWxkQ2xlYXJT
ZWxlY3Rpb24oV2lkZ2V0IGF3LCBUaW1lIHRpbWUpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcg
PSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CgogICAgaWYg
KCEoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgo
KChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5z
aW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCko
dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSktPnJl
Y29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRD
bGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFz
cy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25Q
dHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFz
cykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5l
eHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zh
c3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChYbVRF
WFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkKICAgIHsKICAgICAgICBfWG1P
YmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIFhtVGV4dEZpZWxkU2V0
U2VsZWN0aW9uKGF3LC0xLC0xLHRpbWUpOwogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQpCb29s
ZWFuClhtVGV4dEZpZWxkQ29weShXaWRnZXQgYXcsIFRpbWUgdGltZSkKewogICAgWG1UZXh0Rmll
bGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIERpc3BsYXkgKmRweTsKICAg
IFdpbmRvdyB3aW47CiAgICBpbnQgcjsKICAgIGxvbmcgaXRlbV9pZDsKICAgIFhtU3RyaW5nIGxi
ID0gKCh2b2lkICopMCk7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1f
ZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCko
YXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkgJiYg
KCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkoYXcpKS0+b2Jq
ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlw
ZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgo
KChPYmplY3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVu
c2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFht
R2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgo
T2JqZWN0KShhdykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNp
b24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zhc3RQdHIp
LT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChYbVRFWFRfRklF
TERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkgewogICAgICAgIF9YbU9iamVjdFVubG9j
ayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBpZiAoYXcgPT0gKCh2b2lkICopMCkg
fHwgKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFz
c19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLndpbmRvdyA6ICgoT2JqZWN0
KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykgPT0gMCkgewogICAgICAgIF9YbU9i
amVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgZHB5ID0gKCgoKE9i
amVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5jbGFzc19pbml0ZWQg
JiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxheSA6ICgoT2JqZWN0
KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSk7CiAgICB3aW4gPSAo
KCgoT2JqZWN0KShhdykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3JlX2NsYXNzLmNsYXNzX2lu
aXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKGF3KSktPmNvcmUud2luZG93IDogKChPYmplY3QpKGF3
KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93KTsKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRQ
YXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4
dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSA9PSAoKHZvaWQgKikwKSkgewogICAgICAgIF9YbU9i
amVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgbGIgPSBYbVN0cmlu
Z0NyZWF0ZUxvY2FsaXplZCgiWG1UZXh0RmllbGQiKTsKCiAgICB3aGlsZSAoKHIgPSBYbUNsaXBi
b2FyZFN0YXJ0Q29weShkcHksIHdpbiwgbGIsIHRpbWUsCiAgICAgICAgICAgICAgICAoKHZvaWQg
KikwKSwgKCh2b2lkICopMCksICZpdGVtX2lkKSkgPT0gWG1DbGlwYm9hcmRMb2NrZWQpCiAgICAg
ICAgOwoKICAgIFhtU3RyaW5nRnJlZShsYik7CgogICAgaWYgKHIgIT0gWG1DbGlwYm9hcmRTdWNj
ZXNzKSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMDsKICAg
IH0KCiAgICB3aGlsZSAoKHIgPSBYbUNsaXBib2FyZENvcHkoZHB5LCB3aW4sIGl0ZW1faWQsICJT
VFJJTkciLAogICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lv
biAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rp
b25UZXh0KSwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25MZW4pLAogICAgICAg
ICAgICAgICAgMCwgKCh2b2lkICopMCkpKSA9PSBYbUNsaXBib2FyZExvY2tlZCkKICAgICAgICA7
CgogICAgaWYgKHIgIT0gWG1DbGlwYm9hcmRTdWNjZXNzKSB7CiAgICAgICAgKHZvaWQpIFhtQ2xp
cGJvYXJkRW5kQ29weShkcHksIHdpbiwgaXRlbV9pZCk7CiAgICAgICAgX1htT2JqZWN0VW5sb2Nr
KGF3KTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICB3aGlsZSAoKHIgPSBYbUNsaXBib2Fy
ZEVuZENvcHkoZHB5LCB3aW4sIGl0ZW1faWQpKSA9PSBYbUNsaXBib2FyZExvY2tlZCkKICAgICAg
ICA7CgogICAgaWYgKHIgPT0gWG1DbGlwYm9hcmRTdWNjZXNzKSB7CiAgICAgICAgX1htT2JqZWN0
VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMTsKICAgIH0gZWxzZSB7CiAgICAgICAgX1htT2Jq
ZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KfQoKCmV4dGVybiBCb29sZWFu
ClhtVGV4dEZpZWxkQ3V0KFdpZGdldCBhdywgVGltZSB0aW1lKQp7CiAgICBYbVRleHRGaWVsZFdp
ZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgaW50IGZpcnN0LGxhc3Q7CgogICAg
X1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VD
bGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns
YXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgo
KFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5j
b3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAoKFht
QmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53
aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NF
eHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFhtQmFz
ZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRn
ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpf
WG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVMRF9C
SVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6IDAp
IDogMCkpKSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMDsK
ICAgIH0KCiAgICBpZiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSA9
PSAoKHZvaWQgKikwKSB8fCAhKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5lZGl0YWJs
ZSkpIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAg
fQoKICAgIGlmIChYbVRleHRGaWVsZENvcHkoYXcsIHRpbWUpID09IDApIHsKICAgICAgICBfWG1P
YmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGxhc3QgPSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KTsKICAgIGZpcnN0ID0g
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KTsKCiAgICBYbVRl
eHRGaWVsZFNldFNlbGVjdGlvbihhdywtMSwtMSwwTCk7CiAgICBNb2RpZnlUZXh0KHcsKFhFdmVu
dCAqKTAsZmlyc3QsbGFzdCwoKHZvaWQgKikwKSwwLE1hc3NpdmVDaGFuZ2VEcmF3LENQX1VuY2hh
bmdlZCk7CgogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiAxOwp9CgoKZXh0ZXJu
IGludApYbVRleHRGaWVsZEdldEJhc2VsaW5lKFdpZGdldCBhdykKewogICAgWG1UZXh0RmllbGRX
aWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIGludCBiOwoKICAgIF9YbU9iamVj
dExvY2soYXcpOwogICAgaWYgKCEoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQp
KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSkt
PmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRD
bGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFz
cy5leHRlbnNpb24pKSktPnJlY29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFz
c0V4dCopKCYoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2Ns
YXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1ht
R2V0Q2xhc3NFeHRlbnNpb25QdHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4
dCopKCYoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNz
KSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQ
dHIpKSA/ICgoKCgqX1htX2Zhc3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAz
KV0pICYgKDEgPDwgKChYbVRFWFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkK
ICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAg
fQoKICAgIGIgPSAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPllPZmZzZXQpOwogICAgX1htT2Jq
ZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiBiOwp9CgoKZXh0ZXJuIFhtVGV4dFBvc2l0aW9uClht
VGV4dEZpZWxkR2V0Q3Vyc29yUG9zaXRpb24oV2lkZ2V0IGF3KQp7CiAgICBYbVRleHRGaWVsZFdp
ZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgWG1UZXh0UG9zaXRpb24gcDsKCiAg
ICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFz
ZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRf
Y2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQp
KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSkt
PmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgo
WG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFz
c0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1C
YXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp
ZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAo
Kl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxE
X0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDog
MCkgOiAwKSkpIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAw
OwogICAgfQoKICAgIHAgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9w
b3NpdGlvbik7CiAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgcmV0dXJuIHA7Cn0KCgpleHRl
cm4gQm9vbGVhbgpYbVRleHRGaWVsZEdldEVkaXRhYmxlKFdpZGdldCBhdykKewogICAgWG1UZXh0
RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIEJvb2xlYW4gYjsKCiAg
ICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFz
ZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRf
Y2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQp
KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSkt
PmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgo
WG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFz
c0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1C
YXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp
ZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAo
Kl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxE
X0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDog
MCkgOiAwKSkpIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAw
OwogICAgfQoKICAgIGIgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmVkaXRhYmxl
KTsKICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICByZXR1cm4gYjsKfQoKCmV4dGVybiBYbVRl
eHRQb3NpdGlvbgpYbVRleHRGaWVsZEdldEluc2VydGlvblBvc2l0aW9uKFdpZGdldCBhdykKewog
ICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIFhtVGV4
dFBvc2l0aW9uIHA7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFz
dFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykp
LT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgo
KFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53
aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09
IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2Jq
ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikp
KSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJp
Y0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0
KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxY
bVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdz
KVsoKFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQp
ICYgMHgwNykpID8gMSA6IDApIDogMCkpKSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsK
ICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBwID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pOwogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJl
dHVybiBwOwp9CgoKZXh0ZXJuIFhtVGV4dFBvc2l0aW9uClhtVGV4dEZpZWxkR2V0TGFzdFBvc2l0
aW9uKFdpZGdldCBhdykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdp
ZGdldClhdzsKICAgIFhtVGV4dFBvc2l0aW9uIHA7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAg
ICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFz
cykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5l
eHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2Jq
ZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikp
KS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdp
ZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3Jl
X2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVu
c2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdl
dENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2Ns
YXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpf
WG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAo
KFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6IDApIDogMCkpKQogICAgewogICAgICAg
IF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgcCA9ICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAgICBfWG1PYmpl
Y3RVbmxvY2soYXcpOwogICAgcmV0dXJuIHA7Cn0KCgpleHRlcm4gaW50ClhtVGV4dEZpZWxkR2V0
TWF4TGVuZ3RoKFdpZGdldCBhdykKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRG
aWVsZFdpZGdldClhdzsKICAgIGludCBsOwoKICAgIF9YbU9iamVjdExvY2soYXcpOwogICAgaWYg
KCEoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgo
KChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5z
aW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCko
dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSktPnJl
Y29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRD
bGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFz
cy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25Q
dHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFz
cykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5l
eHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zh
c3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChYbVRF
WFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkgewogICAgICAgIF9YbU9iamVj
dFVubG9jayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgbCA9ICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQubWF4X2xlbmd0aCk7CiAgICBfWG1PYmplY3RVbmxvY2soYXcp
OwogICAgcmV0dXJuIGw7Cn0KCgpleHRlcm4gY2hhciAqClhtVGV4dEZpZWxkR2V0U2VsZWN0aW9u
KFdpZGdldCBhdykKewogICAgY2hhciAqc3Vic3RyOwogICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9
IChYbVRleHRGaWVsZFdpZGdldClhdzsKCiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICgh
KCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgo
T2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lv
bikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcp
KS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNv
cmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xh
c3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3Mu
ZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRy
ICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3Mp
KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0
ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0
UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhU
X0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkpIHsKICAgICAgICBfWG1PYmplY3RV
bmxvY2soYXcpOwogICAgICAgIHJldHVybiAoKHZvaWQgKikwKTsKICAgIH0KCgoKICAgIGlmKCgo
KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCkgIT0gKCh2b2lkICopMCkpIHsK
ICAgICAgICBpbnQgbmNoYXJzID0gKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq
KSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25M
ZW4pOwoKICAgICAgICBzdWJzdHIgPSBYdE1hbGxvYyhuY2hhcnMrMSk7CiAgICAgICAgKF9fZXh0
ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlm
RXh0ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSkt
PlNlbGVjdGlvblRleHQpKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAobmNoYXJzKSA/IChzdHJs
ZW4gKCgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCkpICsgMSA+PSAoKHNp
emVfdCkgKG5jaGFycykpID8gKGNoYXIgKikgbWVtY3B5IChzdWJzdHIsICgoKFhtVGV4dEZpZWxk
UGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5l
eHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCksIG5jaGFycykgOiBzdHJuY3B5IChzdWJzdHIsICgo
KFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCksIG5jaGFycykpIDogc3RybmNw
eSAoc3Vic3RyLCAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNlbGVjdGlvblRleHQpLCBuY2hh
cnMpKSk7CiAgICAgICAgc3Vic3RyW25jaGFyc10gPSAnXDAnOwoKICAgICAgICBfWG1PYmplY3RV
bmxvY2soYXcpOwogICAgICAgIHJldHVybiBzdWJzdHI7CiAgICB9CgogICAgX1htT2JqZWN0VW5s
b2NrKGF3KTsKICAgIHJldHVybiAoKHZvaWQgKikwKTsKfQoKCmV4dGVybiBCb29sZWFuClhtVGV4
dEZpZWxkR2V0U2VsZWN0aW9uUG9zaXRpb24oV2lkZ2V0IGF3LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFhtVGV4dFBvc2l0aW9uICpsZWZ0LCBYbVRleHRQb3NpdGlvbiAqcmlnaHQp
CnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CiAgICBC
b29sZWFuIGI7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0
ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5v
YmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFht
QmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRn
ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFht
UW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0
KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6
ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0Ns
YXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3
KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFt
b3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVso
KFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYg
MHgwNykpID8gMSA6IDApIDogMCkpKSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAg
ICAgICByZXR1cm4gMDsKICAgIH0KCgoKICAgICpsZWZ0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KTsKICAgICpyaWdodCA9ICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQucHJpbV9wb3NfcmlnaHQpOwogICAgYiA9IHctPnRleHQuaGFzX3ByaW1h
cnk7CgogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiBiOwp9CgoKZXh0ZXJuIHdj
aGFyX3QgKgpYbVRleHRGaWVsZEdldFNlbGVjdGlvbldjcyhXaWRnZXQgYXcpCnsKICAgIFhtVGV4
dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CgogICAgX1htT2JqZWN0TG9j
ayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChX
aWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29y
ZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNz
KSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4
dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0
KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3Mp
KSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRD
bGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0Kiko
JigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkp
LT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikp
ID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkg
JiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6IDApIDogMCkpKSB7CiAg
ICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gKCh2b2lkICopMCk7CiAg
ICB9CgoKICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICByZXR1cm4gKCh2b2lkICopMCk7Cn0K
CgpleHRlcm4gY2hhciAqClhtVGV4dEZpZWxkR2V0U3RyaW5nKFdpZGdldCBhdykKewogICAgWG1U
ZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIGNoYXIgKnJldDsK
CiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFht
QmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRn
ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NF
eHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykp
KSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/
ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2Jq
ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VD
bGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgo
WG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAm
JiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJ
RUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAx
IDogMCkgOiAwKSkpIHsKICAgICAgICByZXQgPSBYdE1hbGxvYygxKTsKICAgICAgICAqcmV0ID0g
J1wwJzsKCiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gcmV0Owog
ICAgfQoKICAgIHJldCA9IFh0TWFsbG9jKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
c3RyaW5nX2xlbmd0aCkgKyAxKTsKICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3Rh
bnRfcCAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSkpICYmIF9fYnVpbHRp
bl9jb25zdGFudF9wICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5n
dGgpKSA/IChzdHJsZW4gKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpKSAr
IDEgPj0gKChzaXplX3QpICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19s
ZW5ndGgpKSkgPyAoY2hhciAqKSBtZW1jcHkgKHJldCwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC52YWx1ZSksICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xl
bmd0aCkpIDogc3RybmNweSAocmV0LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZh
bHVlKSwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSkpIDog
c3RybmNweSAocmV0LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKSwgKCgo
WG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSkpKTsKICAgIHJldFso
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpXSA9ICdcMCc7Cgog
ICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiByZXQ7Cn0KCgpleHRlcm4gd2NoYXJf
dCAqClhtVGV4dEZpZWxkR2V0U3RyaW5nV2NzKFdpZGdldCBhdykKewogICAgWG1UZXh0RmllbGRX
aWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKCiAgICBfWG1PYmplY3RMb2NrKGF3KTsK
ICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENs
YXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNz
LmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChP
YmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9u
KSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgo
V2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNv
cmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0
ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lk
Z2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVf
Y2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgo
Kl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxEX0JJVCkgPj4gMyldKSAmICgxIDw8
ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkpIHsKICAgICAgICBf
WG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAoKHZvaWQgKikwKTsKICAgIH0KCgog
ICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiAoKHZvaWQgKikwKTsKfQoKCmV4dGVy
biBpbnQKWG1UZXh0RmllbGRHZXRTdWJzdHJpbmcoV2lkZ2V0IGF3LCBYbVRleHRQb3NpdGlvbiBz
dGFydCwgaW50IG51bV9jaGFycywKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1ZmZlcl9z
aXplLCBjaGFyICpidWZmZXIpCnsKICAgIGludCBsZW47CiAgICBpbnQgcmV0dmFsID0gMTsKICAg
IFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CgogICAgX1htT2Jq
ZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4
dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykp
KSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRn
ZXRDbGFzcykoKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVf
Y2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNl
Q2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKGF3KSktPm9iamVjdC53aWRn
ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQg
KilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNs
YXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KShhdykpLT5vYmplY3Qud2lkZ2V0
X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1ht
X2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zhc3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklU
KSA+PiAzKV0pICYgKDEgPDwgKChYbVRFWFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6
IDApKSkKICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAw
OwogICAgfQoKICAgIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPiAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIF9YbU9iamVjdFVubG9j
ayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgoKICAgIGlmIChudW1fY2hhcnMgPiBidWZm
ZXJfc2l6ZSkKICAgIHsKICAgICAgICBsZW4gPSBudW1fY2hhcnM7CiAgICB9CiAgICBlbHNlCiAg
ICB7CiAgICAgICAgbGVuID0gYnVmZmVyX3NpemUgLSAxOwogICAgICAgIHJldHZhbCA9IDI7CiAg
ICB9CgogICAgaWYgKHN0YXJ0ICsgbGVuID4gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5zdHJpbmdfbGVuZ3RoKSkKICAgIHsKICAgICAgICBsZW4gPSAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpIC0gc3RhcnQ7CiAgICB9CgogICAgKF9fZXh0ZW5z
aW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LnZhbHVlKSArIHN0YXJ0KSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAobGVuKSA/IChzdHJs
ZW4gKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpICsgc3RhcnQpICsgMSA+
PSAoKHNpemVfdCkgKGxlbikpID8gKGNoYXIgKikgbWVtY3B5IChidWZmZXIsICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpICsgc3RhcnQsIGxlbikgOiBzdHJuY3B5IChidWZm
ZXIsICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpICsgc3RhcnQsIGxlbikp
IDogc3RybmNweSAoYnVmZmVyLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVl
KSArIHN0YXJ0LCBsZW4pKSk7CiAgICBidWZmZXJbbGVuXSA9ICdcMCc7CgogICAgX1htT2JqZWN0
VW5sb2NrKGF3KTsKICAgIHJldHVybiByZXR2YWw7Cn0KCgpleHRlcm4gaW50ClhtVGV4dEZpZWxk
R2V0U3Vic3RyaW5nV2NzKFdpZGdldCBhdywgWG1UZXh0UG9zaXRpb24gc3RhcnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBudW1fY2hhcnMsIGludCBidWZmZXJfc2l6ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqYnVmZmVyKQp7CiAgICBYbVRleHRGaWVsZFdp
ZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgIF9YbU9iamVjdExvY2soYXcpOwog
ICAgaWYgKCEoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xh
c3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3Mu
ZXh0ZW5zaW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9i
amVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24p
KSktPnJlY29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChX
aWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29y
ZV9jbGFzcy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRl
bnNpb25QdHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRn
ZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9j
bGFzcy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgq
X1htX2Zhc3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwg
KChYbVRFWFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkKICAgIHsKICAgICAg
ICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAgfQoKCiAgICBfWG1P
YmplY3RVbmxvY2soYXcpOwogICAgcmV0dXJuIDA7Cn0KCgpleHRlcm4gdm9pZApYbVRleHRGaWVs
ZEluc2VydChXaWRnZXQgYXcsIFhtVGV4dFBvc2l0aW9uIHBvcywgY2hhciAqc3RyKQp7CiAgICBY
bVRleHRGaWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgWG1UZXh0UG9z
aXRpb24gbGVuOwoKICAgIF9YbU9iamVjdExvY2soYXcpOwogICAgaWYgKCEoKCgoX1htX2Zhc3RQ
dHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+
b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkgJiYgKCgoKChY
bUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lk
Z2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSktPnJlY29yZF90eXBlKSA9PSBY
bVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFzcykoKCgoKE9iamVj
dCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSkg
OiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25QdHIgKChYbUdlbmVyaWND
bGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCko
dykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSksWG1R
bW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zhc3RQdHIpLT5mbGFncylb
KChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChYbVRFWFRfRklFTERfQklUKSAm
IDB4MDcpKSA/IDEgOiAwKSA6IDApKSkKICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcp
OwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoc3RyICYmICgobGVuID0gc3RybGVuKHN0
cikpID4gMCkgJiYgcG9zID49IDAgJiYgcG9zIDw9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuc3RyaW5nX2xlbmd0aCkpCiAgICB7CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pID0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+
dGV4dC5wcmltX3Bvc19sZWZ0KSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJp
bV9wb3NfcmlnaHQpID0gcG9zOwogICAgICAgIFRleHRJbnNlcnQodywgc3RyLCBsZW4pOwogICAg
ICAgIE1hc3NpdmVDaGFuZ2VEcmF3KHcpOwogICAgfQogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsK
fQoKCmV4dGVybiB2b2lkClhtVGV4dEZpZWxkSW5zZXJ0V2NzKFdpZGdldCBhdywgWG1UZXh0UG9z
aXRpb24gcG9zaXRpb24sIHdjaGFyX3QgKndjc3RyaW5nKQp7CiAgICBYbVRleHRGaWVsZFdpZGdl
dCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgIF9YbU9iamVjdExvY2soYXcpOwogICAg
aWYgKCEoKCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3Mp
KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0
ZW5zaW9uKSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVj
dCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSkt
PnJlY29yZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRn
ZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9j
bGFzcy5leHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNp
b25QdHIgKChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRD
bGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFz
cy5leHRlbnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1ht
X2Zhc3RQdHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChY
bVRFWFRfRklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkKICAgIHsKICAgICAgICBf
WG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBfWG1PYmplY3RV
bmxvY2soYXcpOwp9CmV4dGVybiBCb29sZWFuClhtVGV4dEZpZWxkUGFzdGUoV2lkZ2V0IGF3KQp7
CiAgICBYbVRleHRGaWVsZFdpZGdldCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgRGlz
cGxheSAqZHB5OwogICAgV2luZG93IHdpbjsKICAgIGludCByOwogICAgdW5zaWduZWQgbG9uZyBs
ZW4sIG5ieXRlczsKICAgIGxvbmcgcHJpdmF0ZV9pZDsKICAgIGNoYXIgKmJ1ZjsKICAgIFhtVGV4
dFBvc2l0aW9uIHBvczsKCiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9m
YXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3
KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgo
KCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkg
PT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChP
YmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9u
KSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5l
cmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmpl
Y3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkp
LFhtUW1vdGlmKSkpKSAmJiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+Zmxh
Z3MpWygoWG1URVhUX0ZJRUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJ
VCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkpCiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2Nr
KGF3KTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBpZiAoYXcgPT0gKCh2b2lkICopMCkp
IHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAgfQoK
ICAgIGRweSA9ICgoKChPYmplY3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xh
c3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoYXcpKS0+Y29yZS5zY3JlZW4tPmRp
c3BsYXkgOiAoKE9iamVjdCkoYXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3JlZW4tPmRpc3Bs
YXkpOwogICAgd2luID0gKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29y
ZV9jbGFzcy5jbGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLndpbmRv
dyA6ICgoT2JqZWN0KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdyk7CgogICAgaWYg
KHdpbiA9PSAwKSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4g
MDsKICAgIH0KCgogICAgX0x0RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgYXcsICJY
bVRleHRGaWVsZFBhc3RlXG4iKTsKCiAgICB3aGlsZSAoKHIgPSBYbUNsaXBib2FyZFN0YXJ0UmV0
cmlldmUoKCgoKE9iamVjdCkoYXcpKS0+b2JqZWN0LndpZGdldF9jbGFzcy0+Y29yZV9jbGFzcy5j
bGFzc19pbml0ZWQgJiAweDA0KSA/ICgoV2lkZ2V0KShhdykpLT5jb3JlLnNjcmVlbi0+ZGlzcGxh
eSA6ICgoT2JqZWN0KShhdykpLT5vYmplY3QucGFyZW50LT5jb3JlLnNjcmVlbi0+ZGlzcGxheSks
ICgoKChPYmplY3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3MtPmNvcmVfY2xhc3MuY2xhc3Nf
aW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoYXcpKS0+Y29yZS53aW5kb3cgOiAoKE9iamVjdCko
YXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS53aW5kb3cpLAogICAgICAgICAgICAgICAgWHRMYXN0
VGltZXN0YW1wUHJvY2Vzc2VkKCgoKChPYmplY3QpKGF3KSktPm9iamVjdC53aWRnZXRfY2xhc3Mt
PmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkoYXcpKS0+Y29yZS5z
Y3JlZW4tPmRpc3BsYXkgOiAoKE9iamVjdCkoYXcpKS0+b2JqZWN0LnBhcmVudC0+Y29yZS5zY3Jl
ZW4tPmRpc3BsYXkpKSkpID09IFhtQ2xpcGJvYXJkTG9ja2VkKQogICAgICAgIDsKICAgIGlmIChy
ICE9IFhtQ2xpcGJvYXJkU3VjY2VzcykgewogICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAg
ICAgICAgcmV0dXJuIDA7CiAgICB9CgoKICAgIHdoaWxlICgociA9IFhtQ2xpcGJvYXJkSW5xdWly
ZUxlbmd0aChkcHksIHdpbiwgIlNUUklORyIsICZsZW4pKQogICAgICAgICAgICAgICAgPT0gWG1D
bGlwYm9hcmRMb2NrZWQpCiAgICAgICAgOwogICAgaWYgKHIgIT0gWG1DbGlwYm9hcmRTdWNjZXNz
KSB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMDsKICAgIH0K
CiAgICBidWYgPSBYdE1hbGxvYyhsZW4gKyAxKTsKCiAgICB3aGlsZSAoKHIgPSBYbUNsaXBib2Fy
ZFJldHJpZXZlKGRweSwgd2luLCAiU1RSSU5HIiwKICAgICAgICAgICAgICAgIGJ1ZiwgbGVuLCAm
bmJ5dGVzLCAmcHJpdmF0ZV9pZCkpID09IFhtQ2xpcGJvYXJkTG9ja2VkKQogICAgICAgIDsKCiAg
ICBpZiAociAhPSBYbUNsaXBib2FyZFN1Y2Nlc3MpIHsKICAgICAgICBYdEZyZWUoYnVmKTsKICAg
ICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAgfQogICAgX0x0
RGVidWcoIi4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgYXcsICJYbVRleHRGaWVsZFBhc3RlOiBz
aG91bGQgYmUgZ2V0dGluZyAlbGQgYnl0ZXNcbiIsIG5ieXRlcyk7CgoKICAgIHdoaWxlICgociA9
IFhtQ2xpcGJvYXJkRW5kUmV0cmlldmUoZHB5LCB3aW4pKSA9PSBYbUNsaXBib2FyZExvY2tlZCkK
ICAgICAgICA7CiAgICBpZiAociAhPSBYbUNsaXBib2FyZFN1Y2Nlc3MpIHsKICAgICAgICBYdEZy
ZWUoYnVmKTsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwog
ICAgfQoKCiAgICBwb3MgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9w
b3NpdGlvbik7CgogICAgaWYgKERvQ3Vyc29yTW92ZSh3LCAoKHZvaWQgKikwKSwgcG9zLCAxLCAx
KSkKICAgIHsKICAgICAgICBEb0luc2VydCh3LCAoKHZvaWQgKikwKSwgKGNoYXIgKilidWYsIGxl
bik7CiAgICB9CiAgICBYdEZyZWUoYnVmKTsKICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICBy
ZXR1cm4gMTsKfQoKCmV4dGVybiBCb29sZWFuClhtVGV4dEZpZWxkUG9zVG9YWShXaWRnZXQgYXcs
IFhtVGV4dFBvc2l0aW9uIHBvc2l0aW9uLCBQb3NpdGlvbiAqeCwgUG9zaXRpb24gKnkpCnsKICAg
IFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CiAgICBpbnQgcGl4
ZWw7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgo
KChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qu
d2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNs
YXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xh
c3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlm
KSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSkt
Pm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1C
YXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0
KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9i
amVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikp
KSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVY
VF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykp
ID8gMSA6IDApIDogMCkpKQogICAgewogICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAg
ICAgcmV0dXJuIDA7CiAgICB9CgogICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+ICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpCiAgICB7CiAgICAg
ICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBwaXhl
bCA9ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+WE9mZnNldCkgKyAoaW50KV9YbVRleHRGX0Zv
bnRUZXh0V2lkdGgoKFdpZGdldCl3LCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZh
bHVlKSwgcG9zaXRpb24pOwogICAgaWYgKHBpeGVsIDwgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5YRHJhdykgfHwgcGl4ZWwgPiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAq
KSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5YRHJhdykgKyAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lm1hcmdpbl9ib3R0b20pKSkKICAgIHsKICAg
ICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgICp4
ID0gKFBvc2l0aW9uKXBpeGVsOwogICAgKnkgPSAoUG9zaXRpb24pKCgoWG1UZXh0RmllbGRQYXJ0
TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVu
c2lvbikpLT5ZT2Zmc2V0KTsKCiAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgcmV0dXJuIDE7
Cn0KCgpleHRlcm4gQm9vbGVhbgpYbVRleHRGaWVsZFJlbW92ZShXaWRnZXQgYXcpCnsKICAgIFht
VGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CiAgICBpbnQgZmlyc3Qs
bGFzdDsKCiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0g
KCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVj
dC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNl
Q2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9j
bGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90
aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcp
KS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChY
bUJhc2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NF
eHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+
b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlm
KSkpKSAmJiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1U
RVhUX0ZJRUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3
KSkgPyAxIDogMCkgOiAwKSkpCiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAg
ICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBpZigoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0
ZW5zaW9uICopICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPlNl
bGVjdGlvblRleHQpID09ICgodm9pZCAqKTApIHx8ICEoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LmVkaXRhYmxlKSkKICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAg
ICAgIHJldHVybiAwOwogICAgfQoKICAgIGxhc3QgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LnByaW1fcG9zX3JpZ2h0KTsKICAgIGZpcnN0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KTsKCiAgICBYbVRleHRGaWVsZFNldFNlbGVjdGlvbihh
dywtMSwtMSwwTCk7CiAgICBNb2RpZnlUZXh0KHcsKFhFdmVudCAqKTAsZmlyc3QsbGFzdCwoKHZv
aWQgKikwKSwwLE1hc3NpdmVDaGFuZ2VEcmF3LENQX0VuZE9mSW5zZXJ0KTsKCiAgICBfWG1PYmpl
Y3RVbmxvY2soYXcpOwogICAgcmV0dXJuIDE7Cn0KCgpleHRlcm4gdm9pZApYbVRleHRGaWVsZFJl
cGxhY2UoV2lkZ2V0IGF3LCBYbVRleHRQb3NpdGlvbiBmaXJzdCwKICAgICAgICAgICAgICAgICAg
IFhtVGV4dFBvc2l0aW9uIGxhc3QsIGNoYXIgKnN0cikKewogICAgWG1UZXh0RmllbGRXaWRnZXQg
dyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIFhtVGV4dFBvc2l0aW9uIGxlbjsKCiAgICBf
WG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNs
YXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xh
c3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQpKCgo
V2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNv
cmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1C
YXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0Lndp
ZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4
dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNl
Q2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdl
dF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAoKl9Y
bV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxEX0JJ
VCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkg
OiAwKSkpCiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm47
CiAgICB9CgogICAgaWYgKHN0cikKICAgIHsKICAgICAgICBsZW4gPSBzdHJsZW4oc3RyKTsKICAg
ICAgICBpZiAobGFzdCA+ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xl
bmd0aCkpCiAgICAgICAgICAgIGxhc3QgPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LnN0cmluZ19sZW5ndGgpOwogICAgICAgIGlmIChmaXJzdCA8PSBsYXN0KQogICAgICAgIHsKICAg
ICAgICAgICAgWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24oYXcsLTEsLTEsMEwpOwogICAgICAgICAg
ICBNb2RpZnlUZXh0KHcsIChYRXZlbnQgKikwLAogICAgICAgICAgICAgICAgICAgICAgIGZpcnN0
LCBsYXN0LAogICAgICAgICAgICAgICAgICAgICAgIHN0ciwgbGVuLAogICAgICAgICAgICAgICAg
ICAgICAgIE1hc3NpdmVDaGFuZ2VEcmF3LCBDUF9FbmRPZkluc2VydCk7CiAgICAgICAgfQogICAg
fQogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4dGVybiB2b2lkClhtVGV4dEZpZWxkUmVw
bGFjZVdjcyhXaWRnZXQgYXcsIFhtVGV4dFBvc2l0aW9uIGZyb21fcG9zLAogICAgICAgICAgICAg
ICAgICAgICAgWG1UZXh0UG9zaXRpb24gdG9fcG9zLCB3Y2hhcl90ICp3Y3N0cmluZykKewogICAg
WG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKCiAgICBfWG1PYmpl
Y3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0
KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkp
LT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0
Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xh
c3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xh
c3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9j
bGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9Y
bUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NF
eHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFz
cykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAoKl9YbV9mYXN0
UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxEX0JJVCkgPj4g
MyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkp
CiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm47CiAgICB9
CgogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4dGVybiB2b2lkClhtVGV4dEZpZWxkU2V0
QWRkTW9kZShXaWRnZXQgYXcsIEJvb2xlYW4gc3RhdGUpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0
IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBp
ZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcyko
KCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRl
bnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0
KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+
cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdl
dENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2Ns
YXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lv
blB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENs
YXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNz
LmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1f
ZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFht
VEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6IDApIDogMCkpKQogICAgewogICAgICAgIF9Y
bU9iamVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIF9YbU9iamVjdFVu
bG9jayhhdyk7Cn0KCgpleHRlcm4gdm9pZApYbVRleHRGaWVsZFNldEN1cnNvclBvc2l0aW9uKFdp
ZGdldCBhdywgWG1UZXh0UG9zaXRpb24gcG9zKQp7CiAgICBYbVRleHRGaWVsZFdpZGdldCB3ID0g
KFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwoKICAgIF9YbU9iamVjdExvY2soYXcpOwogICAgaWYgKCEo
KCgoX1htX2Zhc3RQdHIgPSAoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChP
YmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9u
KSkgJiYgKCgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykp
LT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSktPnJlY29y
ZF90eXBlKSA9PSBYbVFtb3RpZikpID8gKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFz
cykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5l
eHRlbnNpb24pKSkgOiAoKFhtQmFzZUNsYXNzRXh0ICopX1htR2V0Q2xhc3NFeHRlbnNpb25QdHIg
KChYbUdlbmVyaWNDbGFzc0V4dCopKChYbUJhc2VDbGFzc0V4dCopKCYoKChXaWRnZXRDbGFzcyko
KCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRl
bnNpb24pKSksWG1RbW90aWYpKSkpICYmICgqX1htX2Zhc3RQdHIpKSA/ICgoKCgqX1htX2Zhc3RQ
dHIpLT5mbGFncylbKChYbVRFWFRfRklFTERfQklUKSA+PiAzKV0pICYgKDEgPDwgKChYbVRFWFRf
RklFTERfQklUKSAmIDB4MDcpKSA/IDEgOiAwKSA6IDApKSkKICAgIHsKICAgICAgICBfWG1PYmpl
Y3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAocG9zID49IDAgJiYg
cG9zIDw9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCkpCiAg
ICB7CiAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRp
b24pID0gcG9zOwogICAgICAgICh2b2lkKV9YbUltU2VuZFNwb3QoKFdpZGdldClhdyk7CgogICAg
ICAgIE1hc3NpdmVDaGFuZ2VEcmF3KHcpOwogICAgfQogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsK
fQoKCnN0YXRpYyB2b2lkCl9YbVRleHRGaWVsZFNldEVkaXRhYmxlKFdpZGdldCB3LCBCb29sZWFu
IGUpCnsKICAgIGlmICghKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzLT5jb3Jl
X2NsYXNzLmNsYXNzX2luaXRlZCAmIDB4MDQpID8gKChXaWRnZXQpKHcpKS0+Y29yZS53aW5kb3cg
OiAoKE9iamVjdCkodykpLT5vYmplY3QucGFyZW50LT5jb3JlLndpbmRvdykpCiAgICB7CiAgICAg
ICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlKQogICAgewogICAgICAgIEFyZyBhcmdzWzEwXTsK
ICAgICAgICBpbnQgbmFyZ3M7CgogICAgICAgIFhtSW1SZWdpc3Rlcih3LCAwKTsKCiAgICAgICAg
bmFyZ3MgPSAwOwogICAgICAgICgodm9pZCkoIChhcmdzW25hcmdzXSkubmFtZSA9ICgoKGNoYXIq
KSZYdFN0cmluZ3NbNTJdKSksIChhcmdzW25hcmdzXSkudmFsdWUgPSAoWHRBcmdWYWwpKCgoKFdp
ZGdldCkodykpLT5jb3JlLmJhY2tncm91bmRfcGl4ZWwpKSApKTsKICAgICAgICBuYXJncysrOwog
ICAgICAgICgodm9pZCkoIChhcmdzW25hcmdzXSkubmFtZSA9ICgoKGNoYXIqKSZYdFN0cmluZ3Nb
MjE0XSkpLCAoYXJnc1tuYXJnc10pLnZhbHVlID0gKFh0QXJnVmFsKSgoKChYbVByaW1pdGl2ZVdp
ZGdldCkodykpLT5wcmltaXRpdmUuZm9yZWdyb3VuZCkpICkpOwogICAgICAgIG5hcmdzKys7CiAg
ICAgICAgWG1JbVNldFZhbHVlcyh3LCBhcmdzLCBuYXJncyk7CiAgICB9CiAgICBlbHNlCiAgICB7
CiAgICAgICAgWG1JbVVucmVnaXN0ZXIodyk7CiAgICB9Cn0KCgpleHRlcm4gdm9pZApYbVRleHRG
aWVsZFNldEVkaXRhYmxlKFdpZGdldCBhdywgQm9vbGVhbiBlZGl0YWJsZSkKewogICAgWG1UZXh0
RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKCiAgICBfWG1PYmplY3RMb2Nr
KGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdp
ZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3Jl
X2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NFeHQpKCgoV2lkZ2V0Q2xhc3Mp
KCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0
ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/ICgoWG1CYXNlQ2xhc3NFeHQq
KSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykp
KSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VDbGFzc0V4dCAqKV9YbUdldENs
YXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgoWG1CYXNlQ2xhc3NFeHQqKSgm
KCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykpKSkt
PmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAmJiAoKl9YbV9mYXN0UHRyKSkg
PyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJRUxEX0JJVCkgPj4gMyldKSAm
ICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAxIDogMCkgOiAwKSkpCiAgICB7
CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAg
aWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZWRpdGFibGUpICE9IGVkaXRhYmxl
KQogICAgewogICAgICAgIF9YbVRleHRGaWVsZFNldEVkaXRhYmxlKGF3LCBlZGl0YWJsZSk7CiAg
ICB9CgogICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5lZGl0YWJsZSkgPSBlZGl0
YWJsZTsKICAgIF9YbU9iamVjdFVubG9jayhhdyk7Cn0KCgpleHRlcm4gdm9pZApYbVRleHRGaWVs
ZFNldEhpZ2hsaWdodChXaWRnZXQgYXcsIFhtVGV4dFBvc2l0aW9uIGxlZnQsIFhtVGV4dFBvc2l0
aW9uIHJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICBYbUhpZ2hsaWdodE1vZGUgbW9kZSkK
ewogICAgICAgIGludCBpLCBqOwogICAgICAgIFhtSGlnaGxpZ2h0TW9kZSBlbTsKCgoKCgogICAg
ICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7CgogICAgICAg
IF9YbU9iamVjdExvY2soYXcpOwogICAgICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFht
QmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRn
ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NF
eHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykp
KSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/
ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2Jq
ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VD
bGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgo
WG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAm
JiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJ
RUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAx
IDogMCkgOiAwKSkpIHsKICAgICAgICAgICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGZvciAoaT0wOyBpPCgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5udW1iZXItMTsgaSsrKQogICAgICAg
ICAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5s
aXN0W2ldLnBvc2l0aW9uIDwgcmlnaHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiByaWdodCA8ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0
W2krMV0ucG9zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgIGVtID0gKCgoWG1UZXh0Rmll
bGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbaV0ubW9kZTsKCgogICAgICAgIGZv
ciAoaT0wOyBpPCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5udW1i
ZXI7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSkt
PnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uID09IGxlZnQpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxp
c3RbaV0ubW9kZSA9IG1vZGU7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uIDwgbGVmdAog
ICAgICAgICAgICAgICAgICAgICAgICAmJiBsZWZ0IDwgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbaSsxXS5wb3NpdGlvbikgewogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLm51
bWJlciA9PSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubWF4aW11
bSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0
KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5tYXhpbXVtICs9IDg7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxp
c3QgPSAoX1htSGlnaGxpZ2h0UmVjICopWHRSZWFsbG9jKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNoYXIgKikoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LmhpZ2hsaWdodCkubGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVvZihfWG1IaWdobGlnaHRSZWMpICogKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4
dC5oaWdobGlnaHQpLm1heGltdW0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0
KS5udW1iZXIgKys7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaj0oKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubnVtYmVyOyBqPmk7IGotLSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0Lmhp
Z2hsaWdodCkubGlzdFtqXSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxp
Z2h0KS5saXN0W2otMV07CiAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0ucG9zaXRpb24gPSBsZWZ0OwogICAg
ICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hs
aWdodCkubGlzdFtpKzFdLm1vZGUgPSBtb2RlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0K
CgogICAgICAgIGZvciAoaT0wOyBpPCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuaGln
aGxpZ2h0KS5udW1iZXI7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxk
V2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2ldLnBvc2l0aW9uID09IHJpZ2h0KSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
aGlnaGxpZ2h0KS5saXN0W2ldLm1vZGUgPSBlbTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3RbaV0ucG9zaXRp
b24gPCByaWdodAogICAgICAgICAgICAgICAgICAgICAgICAmJiByaWdodCA8ICgoKFhtVGV4dEZp
ZWxkV2lkZ2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0ucG9zaXRpb24pIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
aGlnaGxpZ2h0KS5udW1iZXIgPT0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdo
bGlnaHQpLm1heGltdW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubWF4aW11bSArPSA4OwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQu
aGlnaGxpZ2h0KS5saXN0ID0gKF9YbUhpZ2hsaWdodFJlYyAqKVh0UmVhbGxvYygKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplb2YoX1htSGlnaGxpZ2h0UmVjKSAqICgoKFhtVGV4dEZpZWxkV2lk
Z2V0KSh3KSktPnRleHQuaGlnaGxpZ2h0KS5tYXhpbXVtKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LmhpZ2hsaWdodCkubnVtYmVyICsrOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGo9
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5oaWdobGlnaHQpLm51bWJlcjsgaj5pOyBq
LS0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5oaWdobGlnaHQpLmxpc3Rbal0gPSAoKChYbVRleHRGaWVsZFdpZGdldCkodykp
LT50ZXh0LmhpZ2hsaWdodCkubGlzdFtqLTFdOwogICAgICAgICAgICAgICAgICAgICAgICAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmhpZ2hsaWdodCkubGlzdFtpKzFdLnBvc2l0aW9u
ID0gcmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQuaGlnaGxpZ2h0KS5saXN0W2krMV0ubW9kZSA9IGVtOwogICAgICAgICAgICAgICAg
fQogICAgICAgIH0KCiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4dGVybiB2b2lk
ClhtVGV4dEZpZWxkU2V0SW5zZXJ0aW9uUG9zaXRpb24oV2lkZ2V0IGF3LCBYbVRleHRQb3NpdGlv
biBwb3MpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7
CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChY
bUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lk
Z2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNz
RXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3Mp
KSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkg
PyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9i
amVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNl
Q2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0Kiko
KFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVj
dC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkg
JiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9G
SUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8g
MSA6IDApIDogMCkpKQogICAgewogICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAgICAg
cmV0dXJuOwogICAgfQoKICAgIGlmIChwb3MgPj0gMCAmJiBwb3MgPD0gKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKSkKICAgIHsKICAgICAgICAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3NpdGlvbikgPSBwb3M7CgogICAgICAgIE1h
c3NpdmVDaGFuZ2VEcmF3KHcpOwogICAgfQogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4
dGVybiB2b2lkClhtVGV4dEZpZWxkU2V0TWF4TGVuZ3RoKFdpZGdldCBhdywgaW50IG1heF9sZW5n
dGgpCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7Cgog
ICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJh
c2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0
X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0
KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkp
LT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAo
KFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVj
dC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xh
c3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFht
QmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53
aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYg
KCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVM
RF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6
IDApIDogMCkpKQogICAgewogICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQubWF4X2xlbmd0
aCkgPSBtYXhfbGVuZ3RoOwoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0
LnN0cmluZ19sZW5ndGgpID4gbWF4X2xlbmd0aCkKICAgIHsKICAgICAgICAoKChYbVRleHRGaWVs
ZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpID0gbWF4X2xlbmd0aDsKICAgICAgICAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnZhbHVlKVttYXhfbGVuZ3RoXSA9ICdcMCc7
CgogICAgICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmN1cnNvcl9wb3Np
dGlvbikgPiBtYXhfbGVuZ3RoKQogICAgICAgIHsKICAgICAgICAgICAgKCgoWG1UZXh0RmllbGRX
aWRnZXQpKHcpKS0+dGV4dC5jdXJzb3JfcG9zaXRpb24pID0gbWF4X2xlbmd0aDsKICAgICAgICB9
CgogICAgICAgIE1hc3NpdmVDaGFuZ2VEcmF3KHcpOwogICAgfQogICAgX1htT2JqZWN0VW5sb2Nr
KGF3KTsKfQoKCgpleHRlcm4gdm9pZApYbVRleHRGaWVsZFNldFNlbGVjdGlvbihXaWRnZXQgYXcs
IFhtVGV4dFBvc2l0aW9uIHN0YXJ0LCBYbVRleHRQb3NpdGlvbiBlbmQsIFRpbWUgdGltZSkKewog
ICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAgIEJvb2xl
YW4gZ2FpbiA9IDA7CiAgICBpbnQgbGVuOwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0v
VGV4dEYuYyIsICgodm9pZCAqKTApLCAiWG1UZXh0RmllbGRTZXRTZWxlY3Rpb24gJWQgJWRcbiIs
IHN0YXJ0LCBlbmQpOwoKCiAgICAgICAgU2V0U2luZ2xlSGlnaGxpZ2h0KGF3LCBzdGFydCwgZW5k
KTsKCiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgo
KFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53
aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xh
c3NFeHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFz
cykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYp
KSA/ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+
b2JqZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJh
c2VDbGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQq
KSgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2Jq
ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkp
KSAmJiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhU
X0ZJRUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkg
PyAxIDogMCkgOiAwKSkpCiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAg
ICByZXR1cm47CiAgICB9CgogICAgaWYgKCEoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRf
Y2xhc3MtPmNvcmVfY2xhc3MuY2xhc3NfaW5pdGVkICYgMHgwNCkgPyAoKFdpZGdldCkodykpLT5j
b3JlLndpbmRvdyA6ICgoT2JqZWN0KSh3KSktPm9iamVjdC5wYXJlbnQtPmNvcmUud2luZG93KSkK
ICAgIHsKICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgIHJldHVybjsKICAgIH0K
CgoKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRl
eHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSkKICAg
IHsKICAgICAgICBYdEZyZWUoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0
KSk7CiAgICB9CgogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChY
bVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSA9
ICgodm9pZCAqKTApOwogICAgKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25MZW4p
ID0gMDsKCiAgICBpZiAoc3RhcnQgPiAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnN0
cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIHN0YXJ0ID0gKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5zdHJpbmdfbGVuZ3RoKTsKICAgIH0KICAgIGlmIChlbmQgPiAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LnN0cmluZ19sZW5ndGgpKQogICAgewogICAgICAgIGVuZCA9
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCk7CiAgICB9Cgog
ICAgaWYgKHN0YXJ0ID49IGVuZCkKICAgIHsKCiAgICAgICAgaWYoIXctPnRleHQuaGFzX3ByaW1h
cnkpCiAgICAgICAgewogICAgICAgICAgICBfWG1PYmplY3RVbmxvY2soYXcpOwogICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBYdERpc293blNlbGVjdGlvbihhdywgKChBdG9t
KSAxKSwgdGltZSk7CiAgICAgICAgdy0+dGV4dC5oYXNfcHJpbWFyeSA9IDA7CiAgICAgICAgaWYo
KCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5FY2hvKSkKICAgICAgICB7CiAgICAgICAgICAgIEN1
cnNvckVyYXNlKHcpOwogICAgICAgICAgICBEcmF3VGV4dCh3LCAoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQpLCAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LnByaW1fcG9zX3JpZ2h0KSwgMCk7CiAgICAgICAgICAgIEN1cnNvckRyYXcodyk7CiAgICAg
ICAgfQoKCgoKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPk9sZEhpZ2hsaWdodFN0
YXJ0KSA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPSAt
MTsKICAgICAgICAoKChYbVRleHRGaWVsZFBhcnRMZXNzdGlmRXh0ZW5zaW9uICopICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZXh0ZW5zaW9uKSktPk9sZEhpZ2hsaWdodEVuZCkgPSAo
KChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX3JpZ2h0KSA9IC0xOwogICAg
ICAgIHctPnRleHQucHJpbV90aW1lID0gdGltZTsKICAgIH0KICAgIGVsc2UKICAgIHsKCiAgICAg
ICAgZ2FpbiA9ICh3LT50ZXh0Lmhhc19wcmltYXJ5ID09IDApOwoKCiAgICAgICAgX0x0RGVidWco
Ii4uLy4uLy4uL2xpYi9YbS9UZXh0Ri5jIiwgYXcsICJYdE93blNlbGVjdGlvbihfLCBYQV9QUklN
QVJZLCAuLi4pXG4iKTsKCgogICAgICAgIGlmIChYdE93blNlbGVjdGlvbihhdywgKChBdG9tKSAx
KSwgdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRTZWxlY3Rpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBMb3NlU2VsZWN0aW9uLCAoKHZvaWQgKikwKSkpCiAg
ICAgICAgewoKICAgICAgICAgICAgdy0+dGV4dC5oYXNfcHJpbWFyeSA9IDE7CiAgICAgICAgICAg
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCkgPSBzdGFydDsK
CgoKCiAgICAgICAgICAgICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nf
cmlnaHQpID0gZW5kOwogICAgICAgICAgICB3LT50ZXh0LnByaW1fdGltZSA9IHRpbWU7CiAgICAg
ICAgICAgIGxlbiA9ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3Nfcmln
aHQpIC0gKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KTsKICAg
ICAgICAgICAgaWYgKGxlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICgoKFht
VGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcp
KS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uTGVuKSA9IGxlbjsKICAgICAgICAgICAgICAg
ICgoKFhtVGV4dEZpZWxkUGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5leHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCkgPSBYdE1hbGxvYyhsZW4p
OwogICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wICgm
KCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC52YWx1ZSlbKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5wcmltX3Bvc19sZWZ0KV0pICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChs
ZW4pID8gKHN0cmxlbiAoJigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpWygo
KFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCldKSArIDEgPj0gKChz
aXplX3QpIChsZW4pKSA/IChjaGFyICopIG1lbWNweSAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3Rp
ZkV4dGVuc2lvbiAqKSAoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikp
LT5TZWxlY3Rpb25UZXh0KSwgJigoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUp
WygoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQucHJpbV9wb3NfbGVmdCldLCBsZW4pIDog
c3RybmNweSAoKCgoWG1UZXh0RmllbGRQYXJ0TGVzc3RpZkV4dGVuc2lvbiAqKSAoKChYbVRleHRG
aWVsZFdpZGdldCkodykpLT50ZXh0LmV4dGVuc2lvbikpLT5TZWxlY3Rpb25UZXh0KSwgJigoKFht
VGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQudmFsdWUpWygoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3
KSktPnRleHQucHJpbV9wb3NfbGVmdCldLCBsZW4pKSA6IHN0cm5jcHkgKCgoKFhtVGV4dEZpZWxk
UGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5l
eHRlbnNpb24pKS0+U2VsZWN0aW9uVGV4dCksICYoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50
ZXh0LnZhbHVlKVsoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LnByaW1fcG9zX2xlZnQp
XSwgbGVuKSkpOwoKCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKCgoKFhtVGV4dEZpZWxk
UGFydExlc3N0aWZFeHRlbnNpb24gKikgKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5l
eHRlbnNpb24pKS0+RWNobykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEN1cnNvckVy
YXNlKHcpOwogICAgICAgICAgICAgICAgRHJhd1NpbmdsZUhpZ2hsaWdodCh3KTsKICAgICAgICAg
ICAgICAgIEN1cnNvckRyYXcodyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxz
ZQogICAgICAgIHsKICAgICAgICAgICAgZ2FpbiA9IDA7CiAgICAgICAgfQoKCiAgICAgICAgaWYg
KGdhaW4pCiAgICAgICAgewogICAgICAgICAgICBYbUFueUNhbGxiYWNrU3RydWN0IGNiczsKCiAg
ICAgICAgICAgIGNicy5yZWFzb24gPSBYbUNSX0dBSU5fUFJJTUFSWTsKICAgICAgICAgICAgY2Jz
LmV2ZW50ID0gKCh2b2lkICopMCk7CgogICAgICAgICAgICBYdENhbGxDYWxsYmFja0xpc3QoYXcs
ICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZ2Fpbl9wcmltYXJ5X2NhbGxiYWNrKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChYdFBvaW50ZXIpJmNicyk7CiAgICAgICAg
fQogICAgfQogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4dGVybiB2b2lkClhtVGV4dEZp
ZWxkU2V0U3RyaW5nKFdpZGdldCBhdywgY2hhciAqc3RyKQp7CiAgICBYbVRleHRGaWVsZFdpZGdl
dCB3ID0gKFhtVGV4dEZpZWxkV2lkZ2V0KWF3OwogICAgWG1UZXh0UG9zaXRpb24gbGVuID0gMDsK
CiAgICBfWG1PYmplY3RMb2NrKGF3KTsKICAgIGlmICghKCgoKF9YbV9mYXN0UHRyID0gKCgoKFht
QmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRn
ZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpICYmICgoKCgoWG1CYXNlQ2xhc3NF
eHQpKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0LndpZGdldF9jbGFzcykp
KSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLT5yZWNvcmRfdHlwZSkgPT0gWG1RbW90aWYpKSA/
ICgoWG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2Jq
ZWN0LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpIDogKChYbUJhc2VD
bGFzc0V4dCAqKV9YbUdldENsYXNzRXh0ZW5zaW9uUHRyICgoWG1HZW5lcmljQ2xhc3NFeHQqKSgo
WG1CYXNlQ2xhc3NFeHQqKSgmKCgoV2lkZ2V0Q2xhc3MpKCgoKChPYmplY3QpKHcpKS0+b2JqZWN0
LndpZGdldF9jbGFzcykpKSktPmNvcmVfY2xhc3MuZXh0ZW5zaW9uKSkpLFhtUW1vdGlmKSkpKSAm
JiAoKl9YbV9mYXN0UHRyKSkgPyAoKCgoKl9YbV9mYXN0UHRyKS0+ZmxhZ3MpWygoWG1URVhUX0ZJ
RUxEX0JJVCkgPj4gMyldKSAmICgxIDw8ICgoWG1URVhUX0ZJRUxEX0JJVCkgJiAweDA3KSkgPyAx
IDogMCkgOiAwKSkpCiAgICB7CiAgICAgICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgICAgICBy
ZXR1cm47CiAgICB9CgogICAgaWYgKHN0cikKICAgIHsKICAgICAgICBsZW4gPSBzdHJsZW4oc3Ry
KTsKICAgICAgICBYbVRleHRGaWVsZFNldFNlbGVjdGlvbihhdywtMSwtMSwwTCk7CiAgICAgICAg
TW9kaWZ5VGV4dCh3LCAoWEV2ZW50ICopMCwKICAgICAgICAgICAgICAgICAgIDAsICgoKFhtVGV4
dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuc3RyaW5nX2xlbmd0aCksCiAgICAgICAgICAgICAgICAg
ICBzdHIsIGxlbiwKICAgICAgICAgICAgICAgICAgIE1hc3NpdmVDaGFuZ2VEcmF3LCBDUF9SZXNl
dCk7CiAgICB9CiAgICBfWG1PYmplY3RVbmxvY2soYXcpOwp9CgoKZXh0ZXJuIHZvaWQKWG1UZXh0
RmllbGRTZXRTdHJpbmdXY3MoV2lkZ2V0IGF3LCB3Y2hhcl90ICp3Y192YWx1ZSkKewogICAgX1ht
T2JqZWN0TG9jayhhdyk7CgogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKfQoKCmV4dGVybiB2b2lk
ClhtVGV4dEZpZWxkU2hvd1Bvc2l0aW9uKFdpZGdldCBhdywgWG1UZXh0UG9zaXRpb24gcG9zaXRp
b24pCnsKICAgIFhtVGV4dEZpZWxkV2lkZ2V0IHcgPSAoWG1UZXh0RmllbGRXaWRnZXQpYXc7Cgog
ICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChfWG1fZmFzdFB0ciA9ICgoKChYbUJh
c2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVjdCkodykpLT5vYmplY3Qud2lkZ2V0
X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAmJiAoKCgoKFhtQmFzZUNsYXNzRXh0
KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkp
LT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5cGUpID09IFhtUW1vdGlmKSkgPyAo
KFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVj
dC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSA6ICgoWG1CYXNlQ2xh
c3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFhtR2VuZXJpY0NsYXNzRXh0KikoKFht
QmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9iamVjdC53
aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKSxYbVFtb3RpZikpKSkgJiYg
KCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0ciktPmZsYWdzKVsoKFhtVEVYVF9GSUVM
RF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVMRF9CSVQpICYgMHgwNykpID8gMSA6
IDApIDogMCkpKQogICAgewogICAgICAgIF9YbU9iamVjdFVubG9jayhhdyk7CiAgICAgICAgcmV0
dXJuOwogICAgfQoKICAgIF9YbU9iamVjdFVubG9jayhhdyk7Cn0KCgpleHRlcm4gWG1UZXh0UG9z
aXRpb24KWG1UZXh0RmllbGRYWVRvUG9zKFdpZGdldCBhdywgUG9zaXRpb24geCwgUG9zaXRpb24g
eSkKewogICAgWG1UZXh0RmllbGRXaWRnZXQgdyA9IChYbVRleHRGaWVsZFdpZGdldClhdzsKICAg
IFhtVGV4dFBvc2l0aW9uIHI7CgogICAgX1htT2JqZWN0TG9jayhhdyk7CiAgICBpZiAoISgoKChf
WG1fZmFzdFB0ciA9ICgoKChYbUJhc2VDbGFzc0V4dCkoKChXaWRnZXRDbGFzcykoKCgoKE9iamVj
dCkodykpLT5vYmplY3Qud2lkZ2V0X2NsYXNzKSkpKS0+Y29yZV9jbGFzcy5leHRlbnNpb24pKSAm
JiAoKCgoKFhtQmFzZUNsYXNzRXh0KSgoKFdpZGdldENsYXNzKSgoKCgoT2JqZWN0KSh3KSktPm9i
amVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lvbikpKS0+cmVjb3JkX3R5
cGUpID09IFhtUW1vdGlmKSkgPyAoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgo
KCgoT2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVu
c2lvbikpKSA6ICgoWG1CYXNlQ2xhc3NFeHQgKilfWG1HZXRDbGFzc0V4dGVuc2lvblB0ciAoKFht
R2VuZXJpY0NsYXNzRXh0KikoKFhtQmFzZUNsYXNzRXh0KikoJigoKFdpZGdldENsYXNzKSgoKCgo
T2JqZWN0KSh3KSktPm9iamVjdC53aWRnZXRfY2xhc3MpKSkpLT5jb3JlX2NsYXNzLmV4dGVuc2lv
bikpKSxYbVFtb3RpZikpKSkgJiYgKCpfWG1fZmFzdFB0cikpID8gKCgoKCpfWG1fZmFzdFB0cikt
PmZsYWdzKVsoKFhtVEVYVF9GSUVMRF9CSVQpID4+IDMpXSkgJiAoMSA8PCAoKFhtVEVYVF9GSUVM
RF9CSVQpICYgMHgwNykpID8gMSA6IDApIDogMCkpKQogICAgewogICAgICAgIF9YbU9iamVjdFVu
bG9jayhhdyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgciA9IFRleHRQaXhlbFRvU2Vs
ZWN0aW9uUG9zKHcsIHgpOwogICAgX1htT2JqZWN0VW5sb2NrKGF3KTsKICAgIHJldHVybiByOwp9
CgoKc3RhdGljIHZvaWQKX1htVGV4dEZpZWxkRXhwb3J0VmFsdWUoV2lkZ2V0IHcsIGludCBvZmZz
ZXQsIFh0QXJnVmFsICp2YWx1ZSkKewogICAgKnZhbHVlID0gKFh0QXJnVmFsKVhtVGV4dEZpZWxk
R2V0U3RyaW5nKHcpOwoKICAgIF9MdERlYnVnKCIuLi8uLi8uLi9saWIvWG0vVGV4dEYuYyIsIHcs
ICJfWG1UZXh0RmllbGRFeHBvcnRWYWx1ZTogdmFsdWUgJyVzJ1xuIiwgKGNoYXIgKikqdmFsdWUp
OwoKCn0KZXh0ZXJuIGludApfWG1UZXh0Rl9Gb250VGV4dFdpZHRoKFdpZGdldCB3LCBjaGFyICpz
LCBpbnQgbCkKewoKICAgIGlmICgoKChYbVRleHRGaWVsZFdpZGdldCkodykpLT50ZXh0LmZvbnRf
bGlzdCktPnJlbmRpdGlvbnNbMF0tPnR5cGUgPT0gWG1GT05UX0lTX0ZPTlRTRVQpIHsKICAgICAg
ICByZXR1cm4gWG1iVGV4dEVzY2FwZW1lbnQoKFhGb250U2V0KSgoKChYbVRleHRGaWVsZFdpZGdl
dCkodykpLT50ZXh0LmZvbnRfbGlzdCktPnJlbmRpdGlvbnNbMF0tPmZvbnQpLCBzLCBsKTsKICAg
IH0KICAgIGVsc2UgewogICAgICAgIHJldHVybiBYVGV4dFdpZHRoKCgoWG1UZXh0RmllbGRXaWRn
ZXQpKHcpKS0+dGV4dC5mb250LCBzLCBsKTsKICAgIH0KCn0KCgoKc3RhdGljIGludApfWG1UZXh0
Rl9Gb250TWF4V2lkdGgoV2lkZ2V0IHcpCnsKCiAgICBpZiAoKCgoWG1UZXh0RmllbGRXaWRnZXQp
KHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5kaXRpb25zWzBdLT50eXBlID09IFhtRk9OVF9JU19G
T05UU0VUKSB7CiAgICAgICAgWEZvbnRTdHJ1Y3QgKipmb287CiAgICAgICAgY2hhciAqKmJhcjsK
ICAgICAgICBpbnQgaSwgbnVtLCBtYXg7CgogICAgICAgIG51bSA9IFhGb250c09mRm9udFNldCgo
WEZvbnRTZXQpKCgoWG1UZXh0RmllbGRXaWRnZXQpKHcpKS0+dGV4dC5mb250X2xpc3QpLT5yZW5k
aXRpb25zWzBdLT5mb250LCAmZm9vLCAmYmFyKTsKICAgICAgICBtYXggPSAwOwogICAgICAgIGZv
ciAoaT0wOyBpPG51bTsgaSsrKXsKICAgICAgICAgICAgaWYgKGZvb1tpXS0+bWF4X2JvdW5kcy53
aWR0aCA+IG1heCkKICAgICAgICAgICAgICAgIG1heCA9IGZvb1tpXS0+bWF4X2JvdW5kcy53aWR0
aDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1heDsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0
dXJuICgoKFhtVGV4dEZpZWxkV2lkZ2V0KSh3KSktPnRleHQuZm9udCktPm1heF9ib3VuZHMud2lk
dGg7CiAgICB9Cgp9Cg==


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