public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/9435: index.h:57: internal compiler error: in simplify_gen_subreg, at simplify-rtx.c
@ 2003-01-24 18:56 sbourji
  0 siblings, 0 replies; only message in thread
From: sbourji @ 2003-01-24 18:56 UTC (permalink / raw)
  To: gcc-gnats; +Cc: sbourji


>Number:         9435
>Category:       c++
>Synopsis:       index.h:57: internal compiler error: in simplify_gen_subreg, at simplify-rtx.c
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jan 24 18:56:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Salman N Bourji
>Release:        gcc version 3.3 20030113 (prerelease)
>Organization:
>Environment:
sparc-sun-solaris2.9
>Description:
the Confire Command:
 ./configure -fast -platform solaris-g++ -thread -prefix /space/opt/kde-3.1rc6/

when compiling qt-x11-free-3.1.1/tools/assistant project

g++ -c -w -O2 -D_REENTRANT  -DQT_INTERNAL_NETWORK -DQT_INTERNAL_XML -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -I/space/opt/work/qt-x11-free-3.1.1/mkspecs/solaris-g++ -I. -I../../include -I/usr/openwin/include -I/usr/openwin/include -I.moc/release-shared-mt/ -o .obj/release-shared-mt/index.o index.cpp
index.h: In member function `void Index::readDict()':
index.h:57: internal compiler error: in simplify_gen_subreg, at simplify-rtx.c:
   2673
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
gmake: *** [.obj/release-shared-mt/index.o] Error 1
>How-To-Repeat:
Just compile the qt-x11-gree-3.1 under the kdebase-3.1rc6 release
>Fix:

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

aW5kZXguY3BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDAAMDAwMDcw
NgAwMDAwMTYyADAwMDAwMDI3NDU0ADA3NTUwNDc0MjAxADAxMTcyNwAgMAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHNib3VyamkAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAbWJ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKgoqKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBUcm9sbHRlY2ggQVMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgoqKgoqKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUXQgQXNz
aXN0YW50LgoqKgoqKiBUaGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFuZC9vciBtb2RpZmll
ZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCioqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl
cnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKiogRm91bmRhdGlvbiBh
bmQgYXBwZWFyaW5nIGluIHRoZSBmaWxlIExJQ0VOU0UuR1BMIGluY2x1ZGVkIGluIHRoZQoqKiBw
YWNrYWdpbmcgb2YgdGhpcyBmaWxlLgoqKgoqKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgQVMgSVMg
d2l0aCBOTyBXQVJSQU5UWSBPRiBBTlkgS0lORCwgSU5DTFVESU5HIFRIRQoqKiBXQVJSQU5UWSBP
RiBERVNJR04sIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuCioqCioqIFNlZSBodHRwOi8vd3d3LnRyb2xsdGVjaC5jb20vZ3BsLyBmb3IgR1BMIGxp
Y2Vuc2luZyBpbmZvcm1hdGlvbi4KKioKKiogQ29udGFjdCBpbmZvQHRyb2xsdGVjaC5jb20gaWYg
YW55IGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNpbmcgYXJlCioqIG5vdCBjbGVhciB0byB5b3Uu
CioqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCgojaW5jbHVkZSAiaW5kZXguaCIKCiNpbmNsdWRlIDxxZmlsZS5o
PgojaW5jbHVkZSA8cWRpci5oPgojaW5jbHVkZSA8cXN0cmluZ2xpc3QuaD4KI2luY2x1ZGUgPHFh
c2NpaWRpY3QuaD4KI2luY2x1ZGUgPHFhcHBsaWNhdGlvbi5oPgoKI2luY2x1ZGUgPGN0eXBlLmg+
CgppbnQgVGVybUxpc3Q6OmNvbXBhcmVJdGVtcyggUVB0ckNvbGxlY3Rpb246Okl0ZW0gaTEsIFFQ
dHJDb2xsZWN0aW9uOjpJdGVtIGkyICkKewogICAgaWYoICggKFRlcm0qKWkxICktPmZyZXF1ZW5j
eSA9PSAoIChUZXJtKilpMiApLT5mcmVxdWVuY3kgKQoJcmV0dXJuIDA7CiAgICBpZiggKCAoVGVy
bSopaTEgKS0+ZnJlcXVlbmN5IDwgKCAoVGVybSopaTIgKS0+ZnJlcXVlbmN5ICkKCXJldHVybiAt
MTsKICAgIHJldHVybiAxOwp9CgpRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0g
JnMsIERvY3VtZW50ICZsICkKewogICAgcyA+PiBsLmRvY051bWJlcjsKICAgIHMgPj4gbC5mcmVx
dWVuY3k7CiAgICByZXR1cm4gczsKfQoKUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3Ry
ZWFtICZzLCBjb25zdCBEb2N1bWVudCAmbCApCnsKICAgIHMgPDwgKFFfSU5UMTYpbC5kb2NOdW1i
ZXI7CiAgICBzIDw8IChRX0lOVDE2KWwuZnJlcXVlbmN5OwogICAgcmV0dXJuIHM7Cn0KCkluZGV4
OjpJbmRleCggY29uc3QgUVN0cmluZyAmZHAsIGNvbnN0IFFTdHJpbmcgJmhwICkKICAgIDogUU9i
amVjdCggMCwgMCApLCBkaWN0KCA4OTk5ICksIGRvY1BhdGgoIGRwICksIGhvbWVQYXRoKCBocCAp
CnsKICAgIGFscmVhZHlIYXZlRG9jTGlzdCA9IEZBTFNFOwogICAgbGFzdFdpbmRvd0Nsb3NlZCA9
IEZBTFNFOwogICAgY29ubmVjdCggcUFwcCwgU0lHTkFMKCBsYXN0V2luZG93Q2xvc2VkKCkgKSwK
CSAgICAgdGhpcywgU0xPVCggc2V0TGFzdFdpbkNsb3NlZCgpICkgKTsKfQoKSW5kZXg6OkluZGV4
KCBjb25zdCBRU3RyaW5nTGlzdCAmZGwsIGNvbnN0IFFTdHJpbmcgJmhwICkKICAgIDogUU9iamVj
dCggMCwgMCApLCBkaWN0KCA4OTk5ICksIGhvbWVQYXRoKCBocCApCnsKICAgIGRvY0xpc3QgPSBk
bDsKICAgIGFscmVhZHlIYXZlRG9jTGlzdCA9IFRSVUU7CiAgICBsYXN0V2luZG93Q2xvc2VkID0g
RkFMU0U7CiAgICBjb25uZWN0KCBxQXBwLCBTSUdOQUwoIGxhc3RXaW5kb3dDbG9zZWQoKSApLAoJ
ICAgICB0aGlzLCBTTE9UKCBzZXRMYXN0V2luQ2xvc2VkKCkgKSApOwp9Cgp2b2lkIEluZGV4Ojpz
ZXRMYXN0V2luQ2xvc2VkKCkKewogICAgbGFzdFdpbmRvd0Nsb3NlZCA9IFRSVUU7Cn0KCnZvaWQg
SW5kZXg6OnNldERpY3Rpb25hcnlGaWxlKCBjb25zdCBRU3RyaW5nICZmICkKewogICAgZGljdEZp
bGUgPSBmOwp9Cgp2b2lkIEluZGV4OjpzZXREb2NMaXN0RmlsZSggY29uc3QgUVN0cmluZyAmZiAp
CnsKICAgIGRvY0xpc3RGaWxlID0gZjsKfQoKaW50IEluZGV4OjptYWtlSW5kZXgoKQp7CiAgICBp
ZiAoICFhbHJlYWR5SGF2ZURvY0xpc3QgKQoJc2V0dXBEb2N1bWVudExpc3QoKTsKICAgIGlmICgg
ZG9jTGlzdC5pc0VtcHR5KCkgKQoJcmV0dXJuIDE7CiAgICBRU3RyaW5nTGlzdDo6SXRlcmF0b3Ig
aXQgPSBkb2NMaXN0LmJlZ2luKCk7CiAgICBpbnQgc3RlcHMgPSBkb2NMaXN0LmNvdW50KCkgLyAx
MDA7CiAgICBpZiAoICFzdGVwcyApCglzdGVwcysrOwogICAgaW50IHByb2cgPSAwOwogICAgZm9y
ICggaW50IGkgPSAwOyBpdCAhPSBkb2NMaXN0LmVuZCgpOyArK2l0LCArK2kgKSB7CglpZiAoIGxh
c3RXaW5kb3dDbG9zZWQgKSB7CgkgICAgcmV0dXJuIC0xOwoJfQoJcGFyc2VEb2N1bWVudCggKml0
LCBpICk7CglpZiAoIGklc3RlcHMgPT0gMCApIHsKCSAgICBwcm9nKys7CgkgICAgZW1pdCBpbmRl
eGluZ1Byb2dyZXNzKCBwcm9nICk7Cgl9CiAgICB9CiAgICByZXR1cm4gMDsKfQoKdm9pZCBJbmRl
eDo6c2V0dXBEb2N1bWVudExpc3QoKQp7CiAgICBRRGlyIGQoIGRvY1BhdGggKTsKICAgIFFTdHJp
bmdMaXN0IGxzdCA9IGQuZW50cnlMaXN0KCAiKi5odG1sIiApOwogICAgUVN0cmluZ0xpc3Q6OkNv
bnN0SXRlcmF0b3IgaXQgPSBsc3QuYmVnaW4oKTsKICAgIGZvciAoIDsgaXQgIT0gbHN0LmVuZCgp
OyArK2l0ICkKCWRvY0xpc3QuYXBwZW5kKCBkb2NQYXRoICsgIi8iICsgKml0ICk7Cn0KCnZvaWQg
SW5kZXg6Omluc2VydEluRGljdCggY29uc3QgY2hhciAqc3RyLCBpbnQgZG9jTnVtICkKewogICAg
aWYgKCBzdHJjbXAoIHN0ciwgImFtcCIgKSA9PSAwIHx8IHN0cmNtcCggc3RyLCAibmJzcCIgKSA9
PSAwICkKCXJldHVybjsKICAgIEVudHJ5ICplID0gMDsKICAgIGlmICggZGljdC5jb3VudCgpICkK
CWUgPSBkaWN0WyBzdHIgXTsKCiAgICBpZiAoIGUgKSB7CglpZiAoIGUtPmRvY3VtZW50cy5maXJz
dCgpLmRvY051bWJlciAhPSBkb2NOdW0gKQoJICAgIGUtPmRvY3VtZW50cy5wcmVwZW5kKCBEb2N1
bWVudCggZG9jTnVtLCAxICkgKTsKCWVsc2UKCSAgICBlLT5kb2N1bWVudHMuZmlyc3QoKS5mcmVx
dWVuY3krKzsKICAgIH0gZWxzZSB7CglkaWN0Lmluc2VydCggc3RyLCBuZXcgRW50cnkoIGRvY051
bSApICk7CiAgICB9Cn0KCnZvaWQgSW5kZXg6OnBhcnNlRG9jdW1lbnQoIGNvbnN0IFFTdHJpbmcg
JmZpbGVuYW1lLCBpbnQgZG9jTnVtICkKewogICAgUUZpbGUgZmlsZSggZmlsZW5hbWUgKTsKICAg
IGlmICggIWZpbGUub3BlbiggSU9fUmVhZE9ubHkgKSApIHsKCXFXYXJuaW5nKCAiY2FuIG5vdCBv
cGVuIGZpbGUgIiArIGZpbGVuYW1lICk7CglyZXR1cm47CiAgICB9CiAgICBib29sIHZhbGlkID0g
VFJVRTsKICAgIGNoYXIgc3RyWzY0XTsKICAgIFFDaGFyIGMoIGZpbGUuZ2V0Y2goKSApOwogICAg
aW50IGkgPSAwOwogICAgd2hpbGUgKCAhZmlsZS5hdEVuZCgpICkgewoJaWYgKCBjID09ICc8JyAp
IHsKCSAgICB2YWxpZCA9IEZBTFNFOwoJICAgIHN0cltpXSA9IDA7CgkgICAgaWYgKCBpID4gMSAp
CgkJaW5zZXJ0SW5EaWN0KCBzdHIsIGRvY051bSApOwoJICAgIGkgPSAwOwoJICAgIGMgPSBmaWxl
LmdldGNoKCk7CgkgICAgY29udGludWU7Cgl9CglpZiAoIGMgPT0gJz4nICYmICF2YWxpZCApIHsK
CSAgICB2YWxpZCA9IFRSVUU7CgkgICAgYyA9IGZpbGUuZ2V0Y2goKTsKCSAgICBjb250aW51ZTsK
CX0KCWlmICggIXZhbGlkICkgewoJICAgIGMgPSBmaWxlLmdldGNoKCk7CgkgICAgY29udGludWU7
Cgl9CglpZiAoIGMuaXNMZXR0ZXJPck51bWJlcigpICYmIGkgPCA2MyApIHsKCSAgICBzdHJbaV0g
PSBjLmxvd2VyKCkubGF0aW4xKCk7CgkgICAgKytpOwoJfSBlbHNlIHsKCSAgICBzdHJbaV0gPSAw
OwoJICAgIGlmICggaSA+IDEgKQoJCWluc2VydEluRGljdCggc3RyLCBkb2NOdW0gKTsKCSAgICBp
ID0gMDsKCX0KCWMgPSBmaWxlLmdldGNoKCk7CiAgICB9CiAgICBpZiAoIGkgPiAxICkKCWluc2Vy
dEluRGljdCggc3RyLCBkb2NOdW0gKTsKICAgIGZpbGUuY2xvc2UoKTsKfQoKdm9pZCBJbmRleDo6
d3JpdGVEaWN0KCkKewogICAgUUFzY2lpRGljdEl0ZXJhdG9yPEVudHJ5PiBpdCggZGljdCApOwog
ICAgUUZpbGUgZiggZGljdEZpbGUgKTsKICAgIGlmICggIWYub3BlbiggSU9fV3JpdGVPbmx5ICkg
KQoJcmV0dXJuOwogICAgUURhdGFTdHJlYW0gcyggJmYgKTsKICAgIGZvciggOyBpdC5jdXJyZW50
KCk7ICsraXQgKSB7CiAgICAgICAgRW50cnkgKmUgPSBpdC5jdXJyZW50KCk7CglzIDw8IGl0LmN1
cnJlbnRLZXkoKTsKCXMgPDwgZS0+ZG9jdW1lbnRzOwogICAgfQogICAgZi5jbG9zZSgpOwogICAg
d3JpdGVEb2N1bWVudExpc3QoKTsKfQoKdm9pZCBJbmRleDo6d3JpdGVEb2N1bWVudExpc3QoKQp7
CiAgICBRRmlsZSBmKCBkb2NMaXN0RmlsZSApOwogICAgaWYgKCAhZi5vcGVuKCBJT19Xcml0ZU9u
bHkgKSApCglyZXR1cm47CiAgICBRRGF0YVN0cmVhbSBzKCAmZiApOwogICAgcyA8PCBkb2NMaXN0
Owp9Cgp2b2lkIEluZGV4OjpyZWFkRGljdCgpCnsKICAgIFFGaWxlIGYoIGRpY3RGaWxlICk7CiAg
ICBpZiAoICFmLm9wZW4oIElPX1JlYWRPbmx5ICkgKQoJcmV0dXJuOwoKICAgIGRpY3QuY2xlYXIo
KTsKICAgIFFEYXRhU3RyZWFtIHMoICZmICk7CiAgICBjaGFyICprZXk7CiAgICBRVmFsdWVMaXN0
PERvY3VtZW50PiBkb2NzOwogICAgd2hpbGUgKCAhcy5hdEVuZCgpICkgewoJcyA+PiBrZXk7Cglz
ID4+IGRvY3M7CglkaWN0Lmluc2VydCgga2V5LCBuZXcgRW50cnkoIGRvY3MgKSApOwogICAgfQog
ICAgZi5jbG9zZSgpOwogICAgcmVhZERvY3VtZW50TGlzdCgpOwp9Cgp2b2lkIEluZGV4OjpyZWFk
RG9jdW1lbnRMaXN0KCkKewogICAgUUZpbGUgZiggZG9jTGlzdEZpbGUgKTsKICAgIGlmICggIWYu
b3BlbiggSU9fUmVhZE9ubHkgKSApCglyZXR1cm47CiAgICBRRGF0YVN0cmVhbSBzKCAmZiApOwog
ICAgcyA+PiBkb2NMaXN0Owp9CgpRU3RyaW5nTGlzdCBJbmRleDo6cXVlcnkoIGNvbnN0IFFTdHJp
bmdMaXN0ICZ0ZXJtcywgY29uc3QgUVN0cmluZ0xpc3QgJnRlcm1TZXEsIGNvbnN0IFFTdHJpbmdM
aXN0ICZzZXFXb3JkcyApCnsKICAgIFRlcm1MaXN0IHRlcm1MaXN0OwoKICAgIFFTdHJpbmdMaXN0
OjpDb25zdEl0ZXJhdG9yIGl0ID0gdGVybXMuYmVnaW4oKTsKICAgIGZvciAoIGl0ID0gdGVybXMu
YmVnaW4oKTsgaXQgIT0gdGVybXMuZW5kKCk7ICsraXQgKSB7CglFbnRyeSAqZSA9IDA7CglpZiAo
ICgqaXQpLmNvbnRhaW5zKCAnKicgKSApIHsKCSAgICBRVmFsdWVMaXN0PERvY3VtZW50PiB3Y3Rz
ID0gc2V0dXBEdW1teVRlcm0oIGdldFdpbGRjYXJkVGVybXMoICppdCApICk7CgkgICAgdGVybUxp
c3QuYXBwZW5kKCBuZXcgVGVybSggImR1bW15Iiwgd2N0cy5jb3VudCgpLCB3Y3RzICkgKTsKCX0g
ZWxzZSBpZiAoIGRpY3RbICgqaXQpLmxhdGluMSgpIF0gKSB7CgkgICAgZSA9IGRpY3RbICgqaXQp
LmxhdGluMSgpIF07CgkgICAgdGVybUxpc3QuYXBwZW5kKCBuZXcgVGVybSggKCppdCkubGF0aW4x
KCksIGUtPmRvY3VtZW50cy5jb3VudCgpLCBlLT5kb2N1bWVudHMgKSApOwoJfSBlbHNlIHsKCSAg
ICByZXR1cm4gUVN0cmluZ0xpc3QoKTsKCX0KICAgIH0KICAgIHRlcm1MaXN0LnNvcnQoKTsKCiAg
ICBUZXJtICptaW5UZXJtID0gdGVybUxpc3QuZmlyc3QoKTsKICAgIGlmICggIXRlcm1MaXN0LmNv
dW50KCkgKQoJcmV0dXJuIFFTdHJpbmdMaXN0KCk7CiAgICB0ZXJtTGlzdC5yZW1vdmVGaXJzdCgp
OwoKICAgIFFWYWx1ZUxpc3Q8RG9jdW1lbnQ+IG1pbkRvY3MgPSBtaW5UZXJtLT5kb2N1bWVudHM7
CiAgICBRVmFsdWVMaXN0PERvY3VtZW50Pjo6aXRlcmF0b3IgQzsKICAgIFFWYWx1ZUxpc3Q8RG9j
dW1lbnQ+OjpDb25zdEl0ZXJhdG9yIEl0OwogICAgVGVybSAqdCA9IHRlcm1MaXN0LmZpcnN0KCk7
CiAgICBmb3IgKCA7IHQ7IHQgPSB0ZXJtTGlzdC5uZXh0KCkgKSB7CglRVmFsdWVMaXN0PERvY3Vt
ZW50PiBkb2NzID0gdC0+ZG9jdW1lbnRzOwoJQyA9IG1pbkRvY3MuYmVnaW4oKTsKCXdoaWxlICgg
QyAhPSBtaW5Eb2NzLmVuZCgpICkgewoJICAgIGJvb2wgZm91bmQgPSBGQUxTRTsKCSAgICBmb3Ig
KCBJdCA9IGRvY3MuYmVnaW4oKTsgSXQgIT0gZG9jcy5lbmQoKTsgKytJdCApIHsKCQlpZiAoICgq
QykuZG9jTnVtYmVyID09ICgqSXQpLmRvY051bWJlciApIHsKCQkgICAgKCpDKS5mcmVxdWVuY3kg
Kz0gKCpJdCkuZnJlcXVlbmN5OwoJCSAgICBmb3VuZCA9IFRSVUU7CgkJICAgIGJyZWFrOwoJCX0K
CSAgICB9CgkgICAgaWYgKCAhZm91bmQgKQoJCUMgPSBtaW5Eb2NzLnJlbW92ZSggQyApOwoJICAg
IGVsc2UKCQkrK0M7Cgl9CiAgICB9CgogICAgUVN0cmluZ0xpc3QgcmVzdWx0czsKICAgIHFIZWFw
U29ydCggbWluRG9jcyApOwogICAgaWYgKCB0ZXJtU2VxLmlzRW1wdHkoKSApIHsKCWZvciAoIEMg
PSBtaW5Eb2NzLmJlZ2luKCk7IEMgIT0gbWluRG9jcy5lbmQoKTsgKytDICkKCSAgICByZXN1bHRz
IDw8IGRvY0xpc3RbIChpbnQpKCpDKS5kb2NOdW1iZXIgXTsKCXJldHVybiByZXN1bHRzOwogICAg
fQoKICAgIFFTdHJpbmcgZmlsZU5hbWU7CiAgICBmb3IgKCBDID0gbWluRG9jcy5iZWdpbigpOyBD
ICE9IG1pbkRvY3MuZW5kKCk7ICsrQyApIHsKCWZpbGVOYW1lID0gIGRvY0xpc3RbIChpbnQpKCpD
KS5kb2NOdW1iZXIgXTsKCWlmICggc2VhcmNoRm9yUGF0dGVybiggdGVybVNlcSwgc2VxV29yZHMs
IGZpbGVOYW1lICkgKQoJICAgIHJlc3VsdHMgPDwgZmlsZU5hbWU7CiAgICB9CiAgICByZXR1cm4g
cmVzdWx0czsKfQoKUVN0cmluZyBJbmRleDo6Z2V0RG9jdW1lbnRUaXRsZSggY29uc3QgUVN0cmlu
ZyAmZmlsZU5hbWUgKQp7CiAgICBRRmlsZSBmaWxlKCBmaWxlTmFtZSApOwogICAgaWYgKCAhZmls
ZS5vcGVuKCBJT19SZWFkT25seSApICkgewoJcVdhcm5pbmcoICJjYW5ub3Qgb3BlbiBmaWxlICIg
KyBmaWxlTmFtZSApOwoJcmV0dXJuIGZpbGVOYW1lOwogICAgfQogICAgUUNoYXIgYyggZmlsZS5n
ZXRjaCgpICk7CiAgICBpbnQgaSA9IDA7CiAgICBjb25zdCBjaGFyICp0YWcgPSAiPHRpdGxlPiI7
CiAgICBjaGFyIHRpdGxlWzI1Nl07CiAgICBib29sIGZvdW5kID0gRkFMU0U7CiAgICB3aGlsZSAo
ICFmaWxlLmF0RW5kKCkgKSB7CglpID0gMDsKCWlmICggYy5sb3dlcigpLmxhdGluMSgpID09IHRh
Z1tpXSApIHsKCSAgICBmb3VuZCA9IFRSVUU7CgkgICAgZm9yKCBpID0gMTsgaSA8IDc7ICsraSAp
IHsKCQljID0gZmlsZS5nZXRjaCgpOwoJCWlmICggZmlsZS5hdEVuZCgpICkKCQkgICAgcmV0dXJu
IGZpbGVOYW1lOwoJCWlmICggYy5sb3dlcigpLmxhdGluMSgpICE9IHRhZ1tpXSApIHsKCQkgICAg
Zm91bmQgPSBGQUxTRTsKCQkgICAgYnJlYWs7CgkJfQoJICAgIH0KCX0KCWlmICggZm91bmQgKSB7
CgkgICAgYyA9IGZpbGUuZ2V0Y2goKTsKCSAgICBpbnQgaSA9IDA7CgkgICAgd2hpbGUgKCAoICFm
aWxlLmF0RW5kKCkgKSAmJiAoIGMgIT0gJzwnICkgKSB7CgkJdGl0bGVbIGkgXSA9IGM7CgkJKytp
OwoJCWMgPSBmaWxlLmdldGNoKCk7CgkgICAgfQoJICAgIHRpdGxlWyBpIF0gPSAwOwoJICAgIGJy
ZWFrOwoJfQoJYyA9IGZpbGUuZ2V0Y2goKTsKICAgIH0KICAgIHJldHVybiBRU3RyaW5nKCB0aXRs
ZSApOwp9CgpRU3RyaW5nTGlzdCBJbmRleDo6Z2V0V2lsZGNhcmRUZXJtcyggY29uc3QgUVN0cmlu
ZyAmdGVybSApCnsKICAgIFFTdHJpbmdMaXN0IGxzdDsKICAgIFFWYWx1ZUxpc3Q8UUNTdHJpbmc+
IHRlcm1zID0gc3BsaXQoIHRlcm0gKTsKICAgIFFWYWx1ZUxpc3Q8UUNTdHJpbmc+OjppdGVyYXRv
ciBpdGVyOwoKICAgIFFBc2NpaURpY3RJdGVyYXRvcjxFbnRyeT4gaXQoIGRpY3QgKTsKICAgIGZv
ciggOyBpdC5jdXJyZW50KCk7ICsraXQgKSB7CglpbnQgaW5kZXggPSAwOwoJYm9vbCBmb3VuZCA9
IEZBTFNFOwoJUUNTdHJpbmcgdGV4dCggaXQuY3VycmVudEtleSgpICk7Cglmb3IgKCBpdGVyID0g
dGVybXMuYmVnaW4oKTsgaXRlciAhPSB0ZXJtcy5lbmQoKTsgKytpdGVyICkgewoJICAgIGlmICgg
Kml0ZXIgPT0gIioiICkgewoJCWZvdW5kID0gVFJVRTsKCQljb250aW51ZTsKCSAgICB9CgkgICAg
aWYgKCBpdGVyID09IHRlcm1zLmJlZ2luKCkgJiYgKCppdGVyKVswXSAhPSB0ZXh0WzBdICkgewoJ
CWZvdW5kID0gRkFMU0U7CgkJYnJlYWs7CgkgICAgfQoJICAgIGluZGV4ID0gdGV4dC5maW5kKCAq
aXRlciwgaW5kZXggKTsKCSAgICBpZiAoICppdGVyID09IHRlcm1zLmxhc3QoKSAmJiBpbmRleCAh
PSAoaW50KXRleHQubGVuZ3RoKCktMSApIHsKCQlpbmRleCA9IHRleHQuZmluZFJldiggKml0ZXIg
KTsKCQlpZiAoIGluZGV4ICE9IChpbnQpdGV4dC5sZW5ndGgoKSAtIChpbnQpKCppdGVyKS5sZW5n
dGgoKSApIHsKCQkgICAgZm91bmQgPSBGQUxTRTsKCQkgICAgYnJlYWs7CgkJfQoJICAgIH0KCSAg
ICBpZiAoIGluZGV4ICE9IC0xICkgewoJCWZvdW5kID0gVFJVRTsKCQlpbmRleCArPSAoKml0ZXIp
Lmxlbmd0aCgpOwoJCWNvbnRpbnVlOwoJICAgIH0gZWxzZSB7CgkJZm91bmQgPSBGQUxTRTsKCQli
cmVhazsKCSAgICB9Cgl9CglpZiAoIGZvdW5kICkKCSAgICBsc3QgPDwgdGV4dDsKICAgIH0KCiAg
ICByZXR1cm4gbHN0Owp9CgpRVmFsdWVMaXN0PFFDU3RyaW5nPiBJbmRleDo6c3BsaXQoIGNvbnN0
IFFTdHJpbmcgJnMgKQp7CiAgICBRVmFsdWVMaXN0PFFDU3RyaW5nPiBsc3Q7CiAgICBpbnQgaiA9
IDA7CiAgICBRQ1N0cmluZyBzdHIgPSBzLmxhdGluMSgpOwogICAgaW50IGkgPSBzdHIuZmluZCgg
JyonLCBqICk7CgogICAgd2hpbGUgKCBpICE9IC0xICkgewoJaWYgKCBpID4gaiAmJiBpIDw9IChp
bnQpc3RyLmxlbmd0aCgpICkgewoJICAgIGxzdCA8PCBzdHIubWlkKCBqLCBpIC0gaiApOwoJICAg
IGxzdCA8PCAiKiI7Cgl9CglqID0gaSArIDE7CglpID0gc3RyLmZpbmQoICcqJywgaiApOwogICAg
fQoKICAgIGludCBsID0gc3RyLmxlbmd0aCgpIC0gMTsKICAgIGlmICggc3RyLm1pZCggaiwgbCAt
IGogKyAxICkubGVuZ3RoKCkgPiAwICkKCWxzdCA8PCBzdHIubWlkKCBqLCBsIC0gaiArIDEgKTsK
CiAgICByZXR1cm4gbHN0Owp9CgpRVmFsdWVMaXN0PERvY3VtZW50PiBJbmRleDo6c2V0dXBEdW1t
eVRlcm0oIGNvbnN0IFFTdHJpbmdMaXN0ICZ0ZXJtcyApCnsKICAgIFRlcm1MaXN0IHRlcm1MaXN0
OwogICAgUVN0cmluZ0xpc3Q6OkNvbnN0SXRlcmF0b3IgaXQgPSB0ZXJtcy5iZWdpbigpOwogICAg
Zm9yICggOyBpdCAhPSB0ZXJtcy5lbmQoKTsgKytpdCApIHsKCUVudHJ5ICplID0gMDsKCWlmICgg
ZGljdFsgKCppdCkubGF0aW4xKCkgXSApIHsKCSAgICBlID0gZGljdFsgKCppdCkubGF0aW4xKCkg
XTsKCSAgICB0ZXJtTGlzdC5hcHBlbmQoIG5ldyBUZXJtKCAoKml0KS5sYXRpbjEoKSwgZS0+ZG9j
dW1lbnRzLmNvdW50KCksIGUtPmRvY3VtZW50cyApICk7Cgl9CiAgICB9CiAgICB0ZXJtTGlzdC5z
b3J0KCk7CgogICAgUVZhbHVlTGlzdDxEb2N1bWVudD4gbWF4TGlzdDsKCiAgICBpZiAoICF0ZXJt
TGlzdC5jb3VudCgpICkKCXJldHVybiBtYXhMaXN0OwogICAgbWF4TGlzdCA9IHRlcm1MaXN0Lmxh
c3QoKS0+ZG9jdW1lbnRzOwogICAgdGVybUxpc3QucmVtb3ZlTGFzdCgpOwoKICAgIFFWYWx1ZUxp
c3Q8RG9jdW1lbnQ+OjppdGVyYXRvciBkb2NJdDsKICAgIFRlcm0gKnQgPSB0ZXJtTGlzdC5maXJz
dCgpOwogICAgd2hpbGUgKCB0ICkgewoJUVZhbHVlTGlzdDxEb2N1bWVudD4gZG9jcyA9IHQtPmRv
Y3VtZW50czsKCWZvciAoIGRvY0l0ID0gZG9jcy5iZWdpbigpOyBkb2NJdCAhPSBkb2NzLmVuZCgp
OyArK2RvY0l0ICkgewoJICAgIGlmICggbWF4TGlzdC5maW5kSW5kZXgoICpkb2NJdCApID09IC0x
ICkKCQltYXhMaXN0LmFwcGVuZCggKmRvY0l0ICk7Cgl9Cgl0ID0gdGVybUxpc3QubmV4dCgpOwog
ICAgfQogICAgcmV0dXJuIG1heExpc3Q7Cn0KCnZvaWQgSW5kZXg6OmJ1aWxkTWluaURpY3QoIGNv
bnN0IGNoYXIgKnN0ciApCnsKICAgIGlmICggbWluaURpY3RbIHN0ciBdICkKCW1pbmlEaWN0WyBz
dHIgXS0+cG9zaXRpb25zLmFwcGVuZCggd29yZE51bSApOwogICAgKyt3b3JkTnVtOwp9Cgpib29s
IEluZGV4OjpzZWFyY2hGb3JQYXR0ZXJuKCBjb25zdCBRU3RyaW5nTGlzdCAmcGF0dGVybnMsIGNv
bnN0IFFTdHJpbmdMaXN0ICZ3b3JkcywgY29uc3QgUVN0cmluZyAmZmlsZU5hbWUgKQp7CiAgICBR
RmlsZSBmaWxlKCBmaWxlTmFtZSApOwogICAgaWYgKCAhZmlsZS5vcGVuKCBJT19SZWFkT25seSAp
ICkgewoJcVdhcm5pbmcoICJjYW5ub3Qgb3BlbiBmaWxlICIgKyBmaWxlTmFtZSApOwoJcmV0dXJu
IEZBTFNFOwogICAgfQoKICAgIHdvcmROdW0gPSAzOwogICAgbWluaURpY3QuY2xlYXIoKTsKICAg
IFFTdHJpbmdMaXN0OjpDb25zdEl0ZXJhdG9yIGNJdCA9IHdvcmRzLmJlZ2luKCk7CiAgICBmb3Ig
KCA7IGNJdCAhPSB3b3Jkcy5lbmQoKTsgKytjSXQgKQoJbWluaURpY3QuaW5zZXJ0KCAoKmNJdCku
bGF0aW4xKCksIG5ldyBQb3NFbnRyeSggMCApICk7CgogICAgYm9vbCB2YWxpZCA9IFRSVUU7CiAg
ICBjaGFyIHN0cls2NF07CiAgICBRQ2hhciBjKCBmaWxlLmdldGNoKCkgKTsKICAgIGludCBpID0g
MDsKICAgIHdoaWxlICggIWZpbGUuYXRFbmQoKSApIHsKCWlmICggYyA9PSAnPCcgfHwgYyA9PSAn
JicgKSB7CgkgICAgdmFsaWQgPSBGQUxTRTsKCSAgICBzdHJbaV0gPSAwOwoJICAgIGlmICggaSA+
IDEgKQoJCWJ1aWxkTWluaURpY3QoIHN0ciApOwoJICAgIGkgPSAwOwoJICAgIGMgPSBmaWxlLmdl
dGNoKCk7CgkgICAgY29udGludWU7Cgl9CglpZiAoICggYyA9PSAnPicgfHwgYyA9PSAnOycgKSAm
JiAhdmFsaWQgKSB7CgkgICAgdmFsaWQgPSBUUlVFOwoJICAgIGMgPSBmaWxlLmdldGNoKCk7Cgkg
ICAgY29udGludWU7Cgl9CglpZiAoICF2YWxpZCApIHsKCSAgICBjID0gZmlsZS5nZXRjaCgpOwoJ
ICAgIGNvbnRpbnVlOwoJfQoJaWYgKCBjLmlzTGV0dGVyT3JOdW1iZXIoKSAmJiBpIDwgNjMgKSB7
CgkgICAgc3RyW2ldID0gYy5sb3dlcigpLmxhdGluMSgpOwoJICAgICsraTsKCX0gZWxzZSB7Cgkg
ICAgc3RyW2ldID0gMDsKCSAgICBpZiAoIGkgPiAxICkKCQlidWlsZE1pbmlEaWN0KCBzdHIgKTsK
CSAgICBpID0gMDsKCX0KCWMgPSBmaWxlLmdldGNoKCk7CiAgICB9CiAgICBpZiAoIGkgPiAxICkK
CWJ1aWxkTWluaURpY3QoIHN0ciApOwogICAgZmlsZS5jbG9zZSgpOwoKICAgIFFTdHJpbmdMaXN0
OjpDb25zdEl0ZXJhdG9yIHBhdEl0ID0gcGF0dGVybnMuYmVnaW4oKTsKICAgIFFTdHJpbmdMaXN0
IHdvcmRMc3Q7CiAgICBRVmFsdWVMaXN0PHVpbnQ+IGEsIGI7CiAgICBRVmFsdWVMaXN0PHVpbnQ+
OjppdGVyYXRvciBhSXQ7CiAgICBmb3IgKCA7IHBhdEl0ICE9IHBhdHRlcm5zLmVuZCgpOyArK3Bh
dEl0ICkgewoJd29yZExzdCA9IFFTdHJpbmdMaXN0OjpzcGxpdCggJyAnLCAqcGF0SXQgKTsKCWEg
PSBtaW5pRGljdFsgd29yZExzdFswXS5sYXRpbjEoKSBdLT5wb3NpdGlvbnM7Cglmb3IgKCBpbnQg
aiA9IDE7IGogPCAoaW50KXdvcmRMc3QuY291bnQoKTsgKytqICkgewoJICAgIGIgPSBtaW5pRGlj
dFsgd29yZExzdFtqXS5sYXRpbjEoKSBdLT5wb3NpdGlvbnM7CgkgICAgYUl0ID0gYS5iZWdpbigp
OwoJICAgIHdoaWxlICggYUl0ICE9IGEuZW5kKCkgKSB7CgkJaWYgKCBiLmZpbmQoICphSXQgKyAx
ICkgIT0gYi5lbmQoKSApIHsKCQkgICAgKCphSXQpKys7CgkJICAgICsrYUl0OwoJCX0gZWxzZSB7
CgkJICAgIGFJdCA9IGEucmVtb3ZlKCBhSXQgKTsKCQl9CgkgICAgfQoJfQogICAgfQogICAgaWYg
KCBhLmNvdW50KCkgKQoJcmV0dXJuIFRSVUU7CiAgICByZXR1cm4gRkFMU0U7Cn0KAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpbmRleC5oAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAMDEwMDY0MAAwMDAwNzA2ADAwMDAxNjIAMDAwMDAwMDY2NTcAMDc1
MzU2NDM2MDMAMDExNDA1ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAHVzdGFyICAAc2JvdXJqaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtYngAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqIENvcHlyaWdo
dCAoQykgMjAwMiBUcm9sbHRlY2ggQVMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgoqKgoqKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgUXQgQXNzaXN0YW50LgoqKgoqKiBUaGlzIGZpbGUgbWF5IGJl
IGRpc3RyaWJ1dGVkIGFuZC9vciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCioqIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUKKiogRm91bmRhdGlvbiBhbmQgYXBwZWFyaW5nIGluIHRoZSBmaWxlIExJQ0VO
U0UuR1BMIGluY2x1ZGVkIGluIHRoZQoqKiBwYWNrYWdpbmcgb2YgdGhpcyBmaWxlLgoqKgoqKiBU
aGlzIGZpbGUgaXMgcHJvdmlkZWQgQVMgSVMgd2l0aCBOTyBXQVJSQU5UWSBPRiBBTlkgS0lORCwg
SU5DTFVESU5HIFRIRQoqKiBXQVJSQU5UWSBPRiBERVNJR04sIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCioqCioqIFNlZSBodHRwOi8vd3d3LnRy
b2xsdGVjaC5jb20vZ3BsLyBmb3IgR1BMIGxpY2Vuc2luZyBpbmZvcm1hdGlvbi4KKioKKiogQ29u
dGFjdCBpbmZvQHRyb2xsdGVjaC5jb20gaWYgYW55IGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNp
bmcgYXJlCioqIG5vdCBjbGVhciB0byB5b3UuCioqCioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgojaWZuZGVmIElO
REVYX0gKI2RlZmluZSBJTkRFWF9ICgojaW5jbHVkZSA8cXN0cmluZ2xpc3QuaD4KI2luY2x1ZGUg
PHFhc2NpaWRpY3QuaD4KI2luY2x1ZGUgPHFkYXRhc3RyZWFtLmg+CiNpbmNsdWRlIDxxb2JqZWN0
Lmg+CgpzdHJ1Y3QgRG9jdW1lbnQgewogICAgRG9jdW1lbnQoIGludCBkLCBpbnQgZiApIDogZG9j
TnVtYmVyKCBkICksIGZyZXF1ZW5jeSggZiApIHt9CiAgICBEb2N1bWVudCgpIDogZG9jTnVtYmVy
KCAtMSApLCBmcmVxdWVuY3koIDAgKSB7fQogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBEb2N1
bWVudCAmZG9jICkgY29uc3QgewoJcmV0dXJuIGRvY051bWJlciA9PSBkb2MuZG9jTnVtYmVyOwog
ICAgfQogICAgYm9vbCBvcGVyYXRvcjwoIGNvbnN0IERvY3VtZW50ICZkb2MgKSBjb25zdCB7Cgly
ZXR1cm4gZnJlcXVlbmN5ID4gZG9jLmZyZXF1ZW5jeTsKICAgIH0KICAgIGJvb2wgb3BlcmF0b3I8
PSggY29uc3QgRG9jdW1lbnQgJmRvYyApIGNvbnN0IHsKCXJldHVybiBmcmVxdWVuY3kgPj0gZG9j
LmZyZXF1ZW5jeTsKICAgIH0KICAgIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBEb2N1bWVudCAmZG9j
ICkgY29uc3QgewoJcmV0dXJuIGZyZXF1ZW5jeSA8IGRvYy5mcmVxdWVuY3k7CiAgICB9CiAgICBR
X0lOVDE2IGRvY051bWJlcjsKICAgIFFfSU5UMTYgZnJlcXVlbmN5Owp9OwoKUURhdGFTdHJlYW0g
Jm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICZzLCBEb2N1bWVudCAmbCApOwpRRGF0YVN0cmVhbSAm
b3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJnMsIGNvbnN0IERvY3VtZW50ICZsICk7CgpjbGFzcyBJ
bmRleCA6IHB1YmxpYyBRT2JqZWN0CnsKICAgIFFfT0JKRUNUCnB1YmxpYzoKICAgIHN0cnVjdCBF
bnRyeSB7CglFbnRyeSggaW50IGQgKSB7IGRvY3VtZW50cy5hcHBlbmQoIERvY3VtZW50KCBkLCAx
ICkgKTsgfQoJRW50cnkoIFFWYWx1ZUxpc3Q8RG9jdW1lbnQ+IGwgKSA6IGRvY3VtZW50cyggbCAp
IHt9CglRVmFsdWVMaXN0PERvY3VtZW50PiBkb2N1bWVudHM7CiAgICB9OwogICAgc3RydWN0IFBv
c0VudHJ5IHsKCVBvc0VudHJ5KCBpbnQgcCApIHsgcG9zaXRpb25zLmFwcGVuZCggcCApOyB9CglR
VmFsdWVMaXN0PHVpbnQ+IHBvc2l0aW9uczsKICAgIH07CgogICAgSW5kZXgoIGNvbnN0IFFTdHJp
bmcgJmRwLCBjb25zdCBRU3RyaW5nICZocCApOwogICAgSW5kZXgoIGNvbnN0IFFTdHJpbmdMaXN0
ICZkbCwgY29uc3QgUVN0cmluZyAmaHAgKTsKICAgIHZvaWQgd3JpdGVEaWN0KCk7CiAgICB2b2lk
IHJlYWREaWN0KCk7CiAgICBpbnQgbWFrZUluZGV4KCk7CiAgICBRU3RyaW5nTGlzdCBxdWVyeSgg
Y29uc3QgUVN0cmluZ0xpc3QmLCBjb25zdCBRU3RyaW5nTGlzdCYsIGNvbnN0IFFTdHJpbmdMaXN0
JiApOwogICAgUVN0cmluZyBnZXREb2N1bWVudFRpdGxlKCBjb25zdCBRU3RyaW5nJiApOwogICAg
dm9pZCBzZXREaWN0aW9uYXJ5RmlsZSggY29uc3QgUVN0cmluZyYgKTsKICAgIHZvaWQgc2V0RG9j
TGlzdEZpbGUoIGNvbnN0IFFTdHJpbmcmICk7CgpzaWduYWxzOgogICAgdm9pZCBpbmRleGluZ1By
b2dyZXNzKCBpbnQgKTsKCnByaXZhdGUgc2xvdHM6CiAgICB2b2lkIHNldExhc3RXaW5DbG9zZWQo
KTsKCnByaXZhdGU6CiAgICB2b2lkIHNldHVwRG9jdW1lbnRMaXN0KCk7CiAgICB2b2lkIHBhcnNl
RG9jdW1lbnQoIGNvbnN0IFFTdHJpbmcmLCBpbnQgKTsKICAgIHZvaWQgaW5zZXJ0SW5EaWN0KCBj
b25zdCBjaGFyKiwgaW50ICk7CiAgICB2b2lkIHdyaXRlRG9jdW1lbnRMaXN0KCk7CiAgICB2b2lk
IHJlYWREb2N1bWVudExpc3QoKTsKICAgIFFTdHJpbmdMaXN0IGdldFdpbGRjYXJkVGVybXMoIGNv
bnN0IFFTdHJpbmcmICk7CiAgICBRVmFsdWVMaXN0PFFDU3RyaW5nPiBzcGxpdCggY29uc3QgUVN0
cmluZyYgKTsKICAgIFFWYWx1ZUxpc3Q8RG9jdW1lbnQ+IHNldHVwRHVtbXlUZXJtKCBjb25zdCBR
U3RyaW5nTGlzdCYgKTsKICAgIGJvb2wgc2VhcmNoRm9yUGF0dGVybiggY29uc3QgUVN0cmluZ0xp
c3QmLCBjb25zdCBRU3RyaW5nTGlzdCYsIGNvbnN0IFFTdHJpbmcmICk7CiAgICB2b2lkIGJ1aWxk
TWluaURpY3QoIGNvbnN0IGNoYXIqICk7CiAgICBRU3RyaW5nTGlzdCBkb2NMaXN0OwogICAgUUFz
Y2lpRGljdDxFbnRyeT4gZGljdDsKICAgIFFBc2NpaURpY3Q8UG9zRW50cnk+IG1pbmlEaWN0Owog
ICAgdWludCB3b3JkTnVtOwogICAgUVN0cmluZyBkb2NQYXRoLCBob21lUGF0aDsKICAgIFFTdHJp
bmcgZGljdEZpbGUsIGRvY0xpc3RGaWxlOwogICAgYm9vbCBhbHJlYWR5SGF2ZURvY0xpc3Q7CiAg
ICBib29sIGxhc3RXaW5kb3dDbG9zZWQ7Cn07CgpzdHJ1Y3QgVGVybSB7CiAgICBUZXJtKCBjb25z
dCBjaGFyICp0LCBpbnQgZiwgUVZhbHVlTGlzdDxEb2N1bWVudD4gbCApCgk6IHRlcm0oIHQgKSwg
ZnJlcXVlbmN5KCBmICksIGRvY3VtZW50cyggbCApIHt9CiAgICBjb25zdCBjaGFyKiB0ZXJtOwog
ICAgaW50IGZyZXF1ZW5jeTsKICAgIFFWYWx1ZUxpc3Q8RG9jdW1lbnQ+ZG9jdW1lbnRzOwp9OwoK
Y2xhc3MgVGVybUxpc3QgOiBwdWJsaWMgUVB0ckxpc3Q8VGVybT4KewpwdWJsaWM6CiAgICBUZXJt
TGlzdCgpIDogUVB0ckxpc3Q8VGVybT4oKSB7fQogICAgaW50IGNvbXBhcmVJdGVtcyggUVB0ckNv
bGxlY3Rpb246Okl0ZW0gaTEsIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGkyICk7Cn07CgojZW5kaWYK
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaW5kZXguaWkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAADAxMDA2NDAAMDAwMDcwNgAwMDAwMTYyADAwMDAzNjAwNzUyADA3NjE0MzAzNTc0
ADAxMTU1NAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3Rh
ciAgAHNib3VyamkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWJ4AAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIDEgImluZGV4LmNwcCIKIyAxICI8YnVpbHQtaW4+Igoj
IDEgIjxjb21tYW5kIGxpbmU+IgojIDEgImluZGV4LmNwcCIKIyAyMSAiaW5kZXguY3BwIgojIDEg
ImluZGV4LmgiIDEKIyAyNCAiaW5kZXguaCIKIyAxICIuLi8uLi9pbmNsdWRlL3FzdHJpbmdsaXN0
LmgiIDEKIyA0MiAiLi4vLi4vaW5jbHVkZS9xc3RyaW5nbGlzdC5oIgojIDEgIi4uLy4uL2luY2x1
ZGUvcXZhbHVlbGlzdC5oIiAxCiMgNDIgIi4uLy4uL2luY2x1ZGUvcXZhbHVlbGlzdC5oIgojIDEg
Ii4uLy4uL2luY2x1ZGUvcXRsLmgiIDEKIyA0MiAiLi4vLi4vaW5jbHVkZS9xdGwuaCIKIyAxICIu
Li8uLi9pbmNsdWRlL3FnbG9iYWwuaCIgMQojIDU3MyAiLi4vLi4vaW5jbHVkZS9xZ2xvYmFsLmgi
CnR5cGVkZWYgdW5zaWduZWQgY2hhciB1Y2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2hv
cnQ7CnR5cGVkZWYgdW5zaWduZWQgdWludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25nOwp0
eXBlZGVmIGNoYXIgKnBjaGFyOwp0eXBlZGVmIHVjaGFyICpwdWNoYXI7CnR5cGVkZWYgY29uc3Qg
Y2hhciAqcGNjaGFyOwoKCgoKCgoKY29uc3QgYm9vbCBGQUxTRSA9IDA7CmNvbnN0IGJvb2wgVFJV
RSA9ICEwOwojIDYzMCAiLi4vLi4vaW5jbHVkZS9xZ2xvYmFsLmgiCmlubGluZSBpbnQgcVJvdW5k
KCBkb3VibGUgZCApCnsKICAgIHJldHVybiBkID49IDAuMCA/IGludChkICsgMC41KSA6IGludCgg
ZCAtICgoaW50KWQtMSkgKyAwLjUgKSArICgoaW50KWQtMSk7Cn0KIyA2NDIgIi4uLy4uL2luY2x1
ZGUvcWdsb2JhbC5oIgp0eXBlZGVmIHNpZ25lZCBjaGFyIElOVDg7CnR5cGVkZWYgdW5zaWduZWQg
Y2hhciBVSU5UODsKdHlwZWRlZiBzaG9ydCBJTlQxNjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBV
SU5UMTY7CnR5cGVkZWYgaW50IElOVDMyOwp0eXBlZGVmIHVuc2lnbmVkIGludCBVSU5UMzI7CgoK
dHlwZWRlZiBzaWduZWQgY2hhciBRX0lOVDg7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBRX1VJTlQ4
Owp0eXBlZGVmIHNob3J0IFFfSU5UMTY7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgUV9VSU5UMTY7
CnR5cGVkZWYgaW50IFFfSU5UMzI7CnR5cGVkZWYgdW5zaWduZWQgaW50IFFfVUlOVDMyOwoKCgoK
Cgp0eXBlZGVmIGxvbmcgUV9MT05HOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgUV9VTE9ORzsKIyA2
NzggIi4uLy4uL2luY2x1ZGUvcWdsb2JhbC5oIgogICAgdHlwZWRlZiBRX1VMT05HIFF0T2Zmc2V0
OwoKCgoKCgoKY2xhc3MgUURhdGFTdHJlYW07CiMgNzEwICIuLi8uLi9pbmNsdWRlL3FnbG9iYWwu
aCIKIyAxICIuLi8uLi9pbmNsdWRlL3Fjb25maWcuaCIgMQojIDcxMSAiLi4vLi4vaW5jbHVkZS9x
Z2xvYmFsLmgiIDIKIyA3MjAgIi4uLy4uL2luY2x1ZGUvcWdsb2JhbC5oIgojIDEgIi4uLy4uL2lu
Y2x1ZGUvcW1vZHVsZXMuaCIgMQojIDcyMSAiLi4vLi4vaW5jbHVkZS9xZ2xvYmFsLmgiIDIKIyA3
NzMgIi4uLy4uL2luY2x1ZGUvcWdsb2JhbC5oIgojIDEgIi4uLy4uL2luY2x1ZGUvcWZlYXR1cmVz
LmgiIDEKIyA3NzQgIi4uLy4uL2luY2x1ZGUvcWdsb2JhbC5oIiAyCiMgODQwICIuLi8uLi9pbmNs
dWRlL3FnbG9iYWwuaCIKIGNvbnN0IGNoYXIgKnFWZXJzaW9uKCk7CiBib29sIHFTeXNJbmZvKCBp
bnQgKndvcmRTaXplLCBib29sICpiaWdFbmRpYW4gKTsKIyA5MDEgIi4uLy4uL2luY2x1ZGUvcWds
b2JhbC5oIgogdm9pZCBxRGVidWcoIGNvbnN0IGNoYXIgKiwgLi4uICkKCiAgICBfX2F0dHJpYnV0
ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKCjsKCiB2b2lkIHFXYXJuaW5nKCBjb25zdCBj
aGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkp
Cgo7Cgogdm9pZCBxRmF0YWwoIGNvbnN0IGNoYXIgKiwgLi4uICkKCiAgICBfX2F0dHJpYnV0ZV9f
ICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKCjsKCiB2b2lkIHFTeXN0ZW1XYXJuaW5nKCBjb25z
dCBjaGFyICosIGludCBjb2RlID0gLTEgKTsKCgoKIHZvaWQgZGVidWcoIGNvbnN0IGNoYXIgKiwg
Li4uICkKCiAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKCjsKCiB2
b2lkIHdhcm5pbmcoIGNvbnN0IGNoYXIgKiwgLi4uICkKCiAgICBfX2F0dHJpYnV0ZV9fICgoZm9y
bWF0IChwcmludGYsIDEsIDIpKSkKCjsKCiB2b2lkIGZhdGFsKCBjb25zdCBjaGFyICosIC4uLiAp
CgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7CiMgOTY1ICIu
Li8uLi9pbmNsdWRlL3FnbG9iYWwuaCIKIGJvb2wgcXRfY2hlY2tfcG9pbnRlciggYm9vbCBjLCBj
b25zdCBjaGFyICosIGludCApOwojIDk3OSAiLi4vLi4vaW5jbHVkZS9xZ2xvYmFsLmgiCmVudW0g
UXRNc2dUeXBlIHsgUXREZWJ1Z01zZywgUXRXYXJuaW5nTXNnLCBRdEZhdGFsTXNnIH07Cgp0eXBl
ZGVmIHZvaWQgKCpRdE1zZ0hhbmRsZXIpKFF0TXNnVHlwZSwgY29uc3QgY2hhciAqKTsKIFF0TXNn
SGFuZGxlciBxSW5zdGFsbE1zZ0hhbmRsZXIoIFF0TXNnSGFuZGxlciApOwoKCnR5cGVkZWYgUXRN
c2dIYW5kbGVyIG1zZ19oYW5kbGVyOwoKCiB2b2lkIHFTdXBwcmVzc09ic29sZXRlV2FybmluZ3Mo
IGJvb2wgPSBUUlVFICk7Cgogdm9pZCBxT2Jzb2xldGUoIGNvbnN0IGNoYXIgKm9iaiwgY29uc3Qg
Y2hhciAqb2xkZnVuYywKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5ld2Z1bmMgKTsK
IHZvaWQgcU9ic29sZXRlKCBjb25zdCBjaGFyICpvYmosIGNvbnN0IGNoYXIgKm9sZGZ1bmMgKTsK
IHZvaWQgcU9ic29sZXRlKCBjb25zdCBjaGFyICptZXNzYWdlICk7CgoKCgoKCiBjb25zdCBjaGFy
ICpxSW5zdGFsbFBhdGgoKTsKIGNvbnN0IGNoYXIgKnFJbnN0YWxsUGF0aERvY3MoKTsKIGNvbnN0
IGNoYXIgKnFJbnN0YWxsUGF0aEhlYWRlcnMoKTsKIGNvbnN0IGNoYXIgKnFJbnN0YWxsUGF0aExp
YnMoKTsKIGNvbnN0IGNoYXIgKnFJbnN0YWxsUGF0aEJpbnMoKTsKIGNvbnN0IGNoYXIgKnFJbnN0
YWxsUGF0aFBsdWdpbnMoKTsKIGNvbnN0IGNoYXIgKnFJbnN0YWxsUGF0aERhdGEoKTsKIyA0MyAi
Li4vLi4vaW5jbHVkZS9xdGwuaCIgMgojIDEgIi4uLy4uL2luY2x1ZGUvcXRleHRzdHJlYW0uaCIg
MQojIDQyICIuLi8uLi9pbmNsdWRlL3F0ZXh0c3RyZWFtLmgiCiMgMSAiLi4vLi4vaW5jbHVkZS9x
aW9kZXZpY2UuaCIgMQojIDQyICIuLi8uLi9pbmNsdWRlL3Fpb2RldmljZS5oIgojIDEgIi4uLy4u
L2luY2x1ZGUvcWdsb2JhbC5oIiAxCiMgNDMgIi4uLy4uL2luY2x1ZGUvcWlvZGV2aWNlLmgiIDIK
IyAxICIuLi8uLi9pbmNsdWRlL3Fjc3RyaW5nLmgiIDEKIyA0MyAiLi4vLi4vaW5jbHVkZS9xY3N0
cmluZy5oIgojIDEgIi4uLy4uL2luY2x1ZGUvcW1lbWFycmF5LmgiIDEKIyA0MiAiLi4vLi4vaW5j
bHVkZS9xbWVtYXJyYXkuaCIKIyAxICIuLi8uLi9pbmNsdWRlL3FnYXJyYXkuaCIgMQojIDQyICIu
Li8uLi9pbmNsdWRlL3FnYXJyYXkuaCIKIyAxICIuLi8uLi9pbmNsdWRlL3FzaGFyZWQuaCIgMQoj
IDQyICIuLi8uLi9pbmNsdWRlL3FzaGFyZWQuaCIKIyAxICIuLi8uLi9pbmNsdWRlL3FnbG9iYWwu
aCIgMQojIDQzICIuLi8uLi9pbmNsdWRlL3FzaGFyZWQuaCIgMgoKCgpzdHJ1Y3QgUVNoYXJlZAp7
CiAgICBRU2hhcmVkKCkgOiBjb3VudCggMSApIHsgfQogICAgdm9pZCByZWYoKSB7IGNvdW50Kys7
IH0KICAgIGJvb2wgZGVyZWYoKSB7IHJldHVybiAhLS1jb3VudDsgfQogICAgdWludCBjb3VudDsK
fTsKIyA0MyAiLi4vLi4vaW5jbHVkZS9xZ2FycmF5LmgiIDIKCgoKY2xhc3MgUUdBcnJheQp7CmZy
aWVuZCBjbGFzcyBRQnVmZmVyOwpwdWJsaWM6CgogICAgc3RydWN0IGFycmF5X2RhdGEgOiBwdWJs
aWMgUVNoYXJlZCB7CiAgICAgICAgYXJyYXlfZGF0YSgpOmRhdGEoMCksbGVuKDApCgoKCiAgICAg
ICAgICAgIHt9CiAgICAgICAgY2hhciAqZGF0YTsKICAgICAgICB1aW50IGxlbjsKCgoKICAgIH07
CiAgICBRR0FycmF5KCk7CiAgICBlbnVtIE9wdGltaXphdGlvbiB7IE1lbU9wdGltLCBTcGVlZE9w
dGltIH07CnByb3RlY3RlZDoKICAgIFFHQXJyYXkoIGludCwgaW50ICk7CiAgICBRR0FycmF5KCBp
bnQgc2l6ZSApOwogICAgUUdBcnJheSggY29uc3QgUUdBcnJheSAmYSApOwogICAgdmlydHVhbCB+
UUdBcnJheSgpOwoKICAgIFFHQXJyYXkgJm9wZXJhdG9yPSggY29uc3QgUUdBcnJheSAmYSApIHsg
cmV0dXJuIGFzc2lnbiggYSApOyB9CgogICAgdmlydHVhbCB2b2lkIGRldGFjaCgpIHsgZHVwbGlj
YXRlKCp0aGlzKTsgfQoKCiAgICBjaGFyICpkYXRhKCkgY29uc3QgeyByZXR1cm4gc2hkLT5kYXRh
OyB9CiAgICB1aW50IG5yZWZzKCkgY29uc3QgeyByZXR1cm4gc2hkLT5jb3VudDsgfQogICAgdWlu
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gc2hkLT5sZW47IH0KICAgIGJvb2wgaXNFcXVhbCggY29u
c3QgUUdBcnJheSAmYSApIGNvbnN0OwoKICAgIGJvb2wgcmVzaXplKCB1aW50IG5ld3NpemUsIE9w
dGltaXphdGlvbiBvcHRpbSApOwogICAgYm9vbCByZXNpemUoIHVpbnQgbmV3c2l6ZSApOwoKICAg
IGJvb2wgZmlsbCggY29uc3QgY2hhciAqZCwgaW50IGxlbiwgdWludCBzeiApOwoKICAgIFFHQXJy
YXkgJmFzc2lnbiggY29uc3QgUUdBcnJheSAmYSApOwogICAgUUdBcnJheSAmYXNzaWduKCBjb25z
dCBjaGFyICpkLCB1aW50IGxlbiApOwogICAgUUdBcnJheSAmZHVwbGljYXRlKCBjb25zdCBRR0Fy
cmF5ICZhICk7CiAgICBRR0FycmF5ICZkdXBsaWNhdGUoIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVu
ICk7CiAgICB2b2lkIHN0b3JlKCBjb25zdCBjaGFyICpkLCB1aW50IGxlbiApOwoKICAgIGFycmF5
X2RhdGEgKnNoYXJlZEJsb2NrKCkgY29uc3QgeyByZXR1cm4gc2hkOyB9CiAgICB2b2lkIHNldFNo
YXJlZEJsb2NrKCBhcnJheV9kYXRhICpwICkgeyBzaGQ9KGFycmF5X2RhdGEqKXA7IH0KCiAgICBR
R0FycmF5ICZzZXRSYXdEYXRhKCBjb25zdCBjaGFyICpkLCB1aW50IGxlbiApOwogICAgdm9pZCBy
ZXNldFJhd0RhdGEoIGNvbnN0IGNoYXIgKmQsIHVpbnQgbGVuICk7CgogICAgaW50IGZpbmQoIGNv
bnN0IGNoYXIgKmQsIHVpbnQgaW5kZXgsIHVpbnQgc3ogKSBjb25zdDsKICAgIGludCBjb250YWlu
cyggY29uc3QgY2hhciAqZCwgdWludCBzeiApIGNvbnN0OwoKICAgIHZvaWQgc29ydCggdWludCBz
eiApOwogICAgaW50IGJzZWFyY2goIGNvbnN0IGNoYXIgKmQsIHVpbnQgc3ogKSBjb25zdDsKCiAg
ICBjaGFyICphdCggdWludCBpbmRleCApIGNvbnN0OwoKICAgIGJvb2wgc2V0RXhwYW5kKCB1aW50
IGluZGV4LCBjb25zdCBjaGFyICpkLCB1aW50IHN6ICk7Cgpwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFs
IGFycmF5X2RhdGEgKm5ld0RhdGEoKTsKICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhKCBhcnJh
eV9kYXRhICpwICk7Cgpwcml2YXRlOgogICAgc3RhdGljIHZvaWQgbXNnX2luZGV4KCB1aW50ICk7
CiAgICBhcnJheV9kYXRhICpzaGQ7Cn07CgoKaW5saW5lIGNoYXIgKlFHQXJyYXk6OmF0KCB1aW50
IGluZGV4ICkgY29uc3QKewoKICAgIGlmICggaW5kZXggPj0gc2l6ZSgpICkgewogICAgICAgIG1z
Z19pbmRleCggaW5kZXggKTsKICAgICAgICBpbmRleCA9IDA7CiAgICB9CgogICAgcmV0dXJuICZz
aGQtPmRhdGFbaW5kZXhdOwp9CiMgNDMgIi4uLy4uL2luY2x1ZGUvcW1lbWFycmF5LmgiIDIKCgoK
dGVtcGxhdGU8Y2xhc3MgdHlwZT4KY2xhc3MgUU1lbUFycmF5IDogcHVibGljIFFHQXJyYXkKewpw
dWJsaWM6CiAgICB0eXBlZGVmIHR5cGUqIEl0ZXJhdG9yOwogICAgdHlwZWRlZiBjb25zdCB0eXBl
KiBDb25zdEl0ZXJhdG9yOwogICAgdHlwZWRlZiB0eXBlIFZhbHVlVHlwZTsKCnByb3RlY3RlZDoK
ICAgIFFNZW1BcnJheSggaW50LCBpbnQgKSA6IFFHQXJyYXkoIDAsIDAgKSB7fQoKcHVibGljOgog
ICAgUU1lbUFycmF5KCkge30KICAgIFFNZW1BcnJheSggaW50IHNpemUgKSA6IFFHQXJyYXkoc2l6
ZSpzaXplb2YodHlwZSkpIHt9CiAgICBRTWVtQXJyYXkoIGNvbnN0IFFNZW1BcnJheTx0eXBlPiAm
YSApIDogUUdBcnJheShhKSB7fQogICB+UU1lbUFycmF5KCkge30KICAgIFFNZW1BcnJheTx0eXBl
PiAmb3BlcmF0b3I9KGNvbnN0IFFNZW1BcnJheTx0eXBlPiAmYSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7IHJldHVybiAoUU1lbUFycmF5PHR5cGU+JilRR0FycmF5Ojphc3NpZ24o
YSk7IH0KICAgIHR5cGUgKmRhdGEoKSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFHQXJyYXk6OmRh
dGEoKTsgfQogICAgdWludCBucmVmcygpIGNvbnN0IHsgcmV0dXJuIFFHQXJyYXk6Om5yZWZzKCk7
IH0KICAgIHVpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIFFHQXJyYXk6OnNpemUoKS9zaXplb2Yo
dHlwZSk7IH0KICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBzaXplKCk7IH0KICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIFFHQXJyYXk6OnNpemUoKSA9PSAwOyB9CiAgICBi
b29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIFFHQXJyYXk6OmRhdGEoKSA9PSAwOyB9CiAgICBi
b29sIHJlc2l6ZSggdWludCBzaXplICkgeyByZXR1cm4gUUdBcnJheTo6cmVzaXplKHNpemUqc2l6
ZW9mKHR5cGUpKTsgfQogICAgYm9vbCByZXNpemUoIHVpbnQgc2l6ZSwgT3B0aW1pemF0aW9uIG9w
dGltICkgeyByZXR1cm4gUUdBcnJheTo6cmVzaXplKHNpemUqc2l6ZW9mKHR5cGUpLCBvcHRpbSk7
IH0KICAgIGJvb2wgdHJ1bmNhdGUoIHVpbnQgcG9zICkgeyByZXR1cm4gUUdBcnJheTo6cmVzaXpl
KHBvcypzaXplb2YodHlwZSkpOyB9CiAgICBib29sIGZpbGwoIGNvbnN0IHR5cGUgJmQsIGludCBz
aXplID0gLTEgKQogICAgICAgIHsgcmV0dXJuIFFHQXJyYXk6OmZpbGwoKGNoYXIqKSZkLHNpemUs
c2l6ZW9mKHR5cGUpICk7IH0KICAgIHZvaWQgZGV0YWNoKCkgeyBRR0FycmF5OjpkZXRhY2goKTsg
fQogICAgUU1lbUFycmF5PHR5cGU+IGNvcHkoKSBjb25zdAogICAgICAgIHsgUU1lbUFycmF5PHR5
cGU+IHRtcDsgcmV0dXJuIHRtcC5kdXBsaWNhdGUoKnRoaXMpOyB9CiAgICBRTWVtQXJyYXk8dHlw
ZT4mIGFzc2lnbiggY29uc3QgUU1lbUFycmF5PHR5cGU+JiBhICkKICAgICAgICB7IHJldHVybiAo
UU1lbUFycmF5PHR5cGU+JilRR0FycmF5Ojphc3NpZ24oYSk7IH0KICAgIFFNZW1BcnJheTx0eXBl
PiYgYXNzaWduKCBjb25zdCB0eXBlICphLCB1aW50IG4gKQogICAgICAgIHsgcmV0dXJuIChRTWVt
QXJyYXk8dHlwZT4mKVFHQXJyYXk6OmFzc2lnbigoY2hhciopYSxuKnNpemVvZih0eXBlKSk7IH0K
ICAgIFFNZW1BcnJheTx0eXBlPiYgZHVwbGljYXRlKCBjb25zdCBRTWVtQXJyYXk8dHlwZT4mIGEg
KQogICAgICAgIHsgcmV0dXJuIChRTWVtQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmR1cGxpY2F0ZShh
KTsgfQogICAgUU1lbUFycmF5PHR5cGU+JiBkdXBsaWNhdGUoIGNvbnN0IHR5cGUgKmEsIHVpbnQg
biApCiAgICAgICAgeyByZXR1cm4gKFFNZW1BcnJheTx0eXBlPiYpUUdBcnJheTo6ZHVwbGljYXRl
KChjaGFyKilhLG4qc2l6ZW9mKHR5cGUpKTsgfQogICAgUU1lbUFycmF5PHR5cGU+JiBzZXRSYXdE
YXRhKCBjb25zdCB0eXBlICphLCB1aW50IG4gKQogICAgICAgIHsgcmV0dXJuIChRTWVtQXJyYXk8
dHlwZT4mKVFHQXJyYXk6OnNldFJhd0RhdGEoKGNoYXIqKWEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbipzaXplb2YodHlwZSkpOyB9CiAgICB2
b2lkIHJlc2V0UmF3RGF0YSggY29uc3QgdHlwZSAqYSwgdWludCBuICkKICAgICAgICB7IFFHQXJy
YXk6OnJlc2V0UmF3RGF0YSgoY2hhciopYSxuKnNpemVvZih0eXBlKSk7IH0KICAgIGludCBmaW5k
KCBjb25zdCB0eXBlICZkLCB1aW50IGk9MCApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gUUdBcnJh
eTo6ZmluZCgoY2hhciopJmQsaSxzaXplb2YodHlwZSkpOyB9CiAgICBpbnQgY29udGFpbnMoIGNv
bnN0IHR5cGUgJmQgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIFFHQXJyYXk6OmNvbnRhaW5zKChj
aGFyKikmZCxzaXplb2YodHlwZSkpOyB9CiAgICB2b2lkIHNvcnQoKSB7IFFHQXJyYXk6OnNvcnQo
c2l6ZW9mKHR5cGUpKTsgfQogICAgaW50IGJzZWFyY2goIGNvbnN0IHR5cGUgJmQgKSBjb25zdAog
ICAgICAgIHsgcmV0dXJuIFFHQXJyYXk6OmJzZWFyY2goKGNvbnN0IGNoYXIqKSZkLHNpemVvZih0
eXBlKSk7IH0KCiAgICB0eXBlJiBvcGVyYXRvcltdKCBpbnQgaSApIGNvbnN0CiAgICAgICAgeyBy
ZXR1cm4gKHR5cGUgJikoKih0eXBlICopUUdBcnJheTo6YXQoaSpzaXplb2YodHlwZSkpKTsgfQog
ICAgdHlwZSYgYXQoIHVpbnQgaSApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKHR5cGUgJikoKih0
eXBlICopUUdBcnJheTo6YXQoaSpzaXplb2YodHlwZSkpKTsgfQogICAgICAgICBvcGVyYXRvciBj
b25zdCB0eXBlKigpIGNvbnN0IHsgcmV0dXJuIChjb25zdCB0eXBlICopUUdBcnJheTo6ZGF0YSgp
OyB9CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFNZW1BcnJheTx0eXBlPiAmYSApIGNvbnN0
IHsgcmV0dXJuIGlzRXF1YWwoYSk7IH0KICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUU1lbUFy
cmF5PHR5cGU+ICZhICkgY29uc3QgeyByZXR1cm4gIWlzRXF1YWwoYSk7IH0KICAgIEl0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gZGF0YSgpOyB9CiAgICBJdGVyYXRvciBlbmQoKSB7IHJldHVybiBk
YXRhKCkgKyBzaXplKCk7IH0KICAgIENvbnN0SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBkYXRhKCk7IH0KICAgIENvbnN0SXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gZGF0YSgp
ICsgc2l6ZSgpOyB9Cn07CiMgNDQgIi4uLy4uL2luY2x1ZGUvcWNzdHJpbmcuaCIgMgoKCiMgMSAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi
IDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc3RyaW5nLmgJMS4yNAk5OS8wOC8xMCBTTUkiIAoKIyAx
ICIvdXNyL2luY2x1ZGUvaXNvL3N0cmluZ19pc28uaCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRl
L2lzby9zdHJpbmdfaXNvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc3RyaW5nX2lzby5oCTEu
Mgk5OS8xMS8wOSBTTUkiCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIg
MSAzIDQKIyAxMyAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDMgNAojcHJhZ21h
IGlkZW50ICJAKCMpZmVhdHVyZV90ZXN0cy5oCTEuMTgJOTkvMDcvMjYgU01JIgoKIyAxICIvdXNy
L2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNsdWRlL3N5cy9pc2Ff
ZGVmcy5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWlzYV9kZWZzLmgJMS4yMAk5OS8wNS8wNCBT
TUkiCiMgMTU4ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNApleHRlcm4gIkMiIHsK
IyAzODAgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMyA0Cn0KIyAxNiAiL3Vzci9pbmNs
dWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgMTgxICIvdXNy
L2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMyA0Cn0KIyAzMiAiL3Vzci9pbmNsdWRlL2lz
by9zdHJpbmdfaXNvLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgNDYgIi91c3IvaW5jbHVkZS9p
c28vc3RyaW5nX2lzby5oIiAzIDQKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDYwICIv
dXNyL2luY2x1ZGUvaXNvL3N0cmluZ19pc28uaCIgMyA0CmV4dGVybiBpbnQgbWVtY21wKGNvbnN0
IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQg
KiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCAqbWVtbW92ZSh2b2lkICosIGNv
bnN0IHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1lbXNldCh2b2lkICosIGludCwgc2l6
ZV90KTsKZXh0ZXJuIGNoYXIgKnN0cmNhdChjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBp
bnQgc3RyY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cmNw
eShjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgc3RyY29sbChjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKik7CmV4dGVybiBzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyICosIGNvbnN0
IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJlcnJvcihpbnQpOwpleHRlcm4gc2l6ZV90IHN0cmxl
bihjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIg
Kiwgc2l6ZV90KTsKZXh0ZXJuIGludCBzdHJuY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
LCBzaXplX3QpOwpleHRlcm4gY2hhciAqc3RybmNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6
ZV90KTsKZXh0ZXJuIHNpemVfdCBzdHJzcG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpl
eHRlcm4gY2hhciAqc3RydG9rKGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIHNpemVfdCBz
dHJ4ZnJtKGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwojIDExMiAiL3Vzci9pbmNsdWRl
L2lzby9zdHJpbmdfaXNvLmgiIDMgNApleHRlcm4gdm9pZCAqbWVtY2hyKGNvbnN0IHZvaWQgKiwg
aW50LCBzaXplX3QpOwpleHRlcm4gY2hhciAqc3RyY2hyKGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0
ZXJuIGNoYXIgKnN0cnBicmsoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hh
ciAqc3RycmNocihjb25zdCBjaGFyICosIGludCk7CmV4dGVybiBjaGFyICpzdHJzdHIoY29uc3Qg
Y2hhciAqLCBjb25zdCBjaGFyICopOwojIDE1MSAiL3Vzci9pbmNsdWRlL2lzby9zdHJpbmdfaXNv
LmgiIDMgNAp9CiMgMTkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzIDQKIyA1MSAiL3Vzci9p
bmNsdWRlL3N0cmluZy5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVybiBjaGFyICpzdHJ0
b2tfcihjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7CgoKCgpleHRlcm4gdm9pZCAqbWVt
Y2NweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwoKCgoKZXh0ZXJuIGNoYXIg
KnN0cnNpZ25hbChpbnQpOwpleHRlcm4gaW50IGZmcyhpbnQpOwpleHRlcm4gaW50IHN0cmNhc2Vj
bXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0cm5jYXNlY21wKGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gc2l6ZV90IHN0cmxjcHko
Y2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBzaXplX3Qgc3RybGNhdChjaGFy
ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKCgoKCgpleHRlcm4gY2hhciAqc3RyZHVwKGNvbnN0
IGNoYXIgKik7CiMgMTEzICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNAp9CiMgNDcgIi4uLy4u
L2luY2x1ZGUvcWNzdHJpbmcuaCIgMgoKCgoKCgogdm9pZCAqcW1lbW1vdmUoIHZvaWQgKmRzdCwg
Y29uc3Qgdm9pZCAqc3JjLCB1aW50IGxlbiApOwoKIGNoYXIgKnFzdHJkdXAoIGNvbnN0IGNoYXIg
KiApOwoKIGlubGluZSB1aW50IHFzdHJsZW4oIGNvbnN0IGNoYXIgKnN0ciApCnsgcmV0dXJuIHN0
ciA/ICh1aW50KXN0cmxlbihzdHIpIDogMDsgfQoKIGlubGluZSBjaGFyICpxc3RyY3B5KCBjaGFy
ICpkc3QsIGNvbnN0IGNoYXIgKnNyYyApCnsgcmV0dXJuIHNyYyA/IHN0cmNweShkc3QsIHNyYykg
OiAwOyB9CgogY2hhciAqcXN0cm5jcHkoIGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCB1aW50
IGxlbiApOwoKIGlubGluZSBpbnQgcXN0cmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hh
ciAqc3RyMiApCnsKICAgIHJldHVybiAoIHN0cjEgJiYgc3RyMiApID8gc3RyY21wKCBzdHIxLCBz
dHIyICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCBzdHIxID8gMSA6ICggc3RyMiA/
IC0xIDogMCApICk7Cn0KCiBpbmxpbmUgaW50IHFzdHJuY21wKCBjb25zdCBjaGFyICpzdHIxLCBj
b25zdCBjaGFyICpzdHIyLCB1aW50IGxlbiApCnsKICAgIHJldHVybiAoIHN0cjEgJiYgc3RyMiAp
ID8gc3RybmNtcCggc3RyMSwgc3RyMiwgbGVuICkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogKCBzdHIxID8gMSA6ICggc3RyMiA/IC0xIDogMCApICk7Cn0KCiBpbnQgcXN0cmljbXAoIGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CgogaW50IHFzdHJuaWNtcCggY29uc3QgY2hhciAq
LCBjb25zdCBjaGFyICosIHVpbnQgbGVuICk7CgoKIGlubGluZSB1aW50IGNzdHJsZW4oIGNvbnN0
IGNoYXIgKnN0ciApCnsgcmV0dXJuICh1aW50KXN0cmxlbihzdHIpOyB9CgogaW5saW5lIGNoYXIg
KmNzdHJjcHkoIGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjICkKeyByZXR1cm4gc3RyY3B5KGRz
dCxzcmMpOyB9CgogaW5saW5lIGludCBjc3RyY21wKCBjb25zdCBjaGFyICpzdHIxLCBjb25zdCBj
aGFyICpzdHIyICkKeyByZXR1cm4gc3RyY21wKHN0cjEsc3RyMik7IH0KCiBpbmxpbmUgaW50IGNz
dHJuY21wKCBjb25zdCBjaGFyICpzdHIxLCBjb25zdCBjaGFyICpzdHIyLCB1aW50IGxlbiApCnsg
cmV0dXJuIHN0cm5jbXAoc3RyMSxzdHIyLGxlbik7IH0KCgoKCgogUV9VSU5UMTYgcUNoZWNrc3Vt
KCBjb25zdCBjaGFyICpzLCB1aW50IGxlbiApOwojIDEyMCAiLi4vLi4vaW5jbHVkZS9xY3N0cmlu
Zy5oIgp0eXBlZGVmIFFNZW1BcnJheTxjaGFyPiBRQnl0ZUFycmF5OwoKCgogUUJ5dGVBcnJheSBx
Q29tcHJlc3MoIGNvbnN0IHVjaGFyKiBkYXRhLCBpbnQgbmJ5dGVzICk7CiBRQnl0ZUFycmF5IHFV
bmNvbXByZXNzKCBjb25zdCB1Y2hhciogZGF0YSwgaW50IG5ieXRlcyApOwogaW5saW5lIFFCeXRl
QXJyYXkgcUNvbXByZXNzKCBjb25zdCBRQnl0ZUFycmF5JiBkYXRhKQp7IHJldHVybiBxQ29tcHJl
c3MoIChjb25zdCB1Y2hhciopZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpICk7IH0KIGlubGluZSBR
Qnl0ZUFycmF5IHFVbmNvbXByZXNzKCBjb25zdCBRQnl0ZUFycmF5JiBkYXRhICkKeyByZXR1cm4g
cVVuY29tcHJlc3MoIChjb25zdCB1Y2hhciopZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpICk7IH0K
CgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQnl0
ZUFycmF5ICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRQnl0
ZUFycmF5ICYgKTsKCgoKCgoKY2xhc3MgUVJlZ0V4cDsKCmNsYXNzIFFDU3RyaW5nIDogcHVibGlj
IFFCeXRlQXJyYXkKewpwdWJsaWM6CiAgICBRQ1N0cmluZygpIHt9CiAgICBRQ1N0cmluZyggaW50
IHNpemUgKTsKICAgIFFDU3RyaW5nKCBjb25zdCBRQ1N0cmluZyAmcyApIDogUUJ5dGVBcnJheSgg
cyApIHt9CiAgICBRQ1N0cmluZyggY29uc3QgY2hhciAqc3RyICk7CiAgICBRQ1N0cmluZyggY29u
c3QgY2hhciAqc3RyLCB1aW50IG1heGxlbiApOwogICAgflFDU3RyaW5nKCk7CgogICAgUUNTdHJp
bmcgJm9wZXJhdG9yPSggY29uc3QgUUNTdHJpbmcgJnMgKTsKICAgIFFDU3RyaW5nICZvcGVyYXRv
cj0oIGNvbnN0IGNoYXIgKnN0ciApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29s
IGlzRW1wdHkoKSBjb25zdDsKICAgIHVpbnQgbGVuZ3RoKCkgY29uc3Q7CiAgICBib29sIHJlc2l6
ZSggdWludCBuZXdsZW4gKTsKICAgIGJvb2wgdHJ1bmNhdGUoIHVpbnQgcG9zICk7CiAgICBib29s
IGZpbGwoIGNoYXIgYywgaW50IGxlbiA9IC0xICk7CgogICAgUUNTdHJpbmcgY29weSgpIGNvbnN0
OwoKICAgIFFDU3RyaW5nICZzcHJpbnRmKCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLiApOwoKICAg
IGludCBmaW5kKCBjaGFyIGMsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAg
IGludCBmaW5kKCBjb25zdCBjaGFyICpzdHIsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBj
b25zdDsKCiAgICBpbnQgZmluZCggY29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5kZXg9MCApIGNvbnN0
OwoKICAgIGludCBmaW5kUmV2KCBjaGFyIGMsIGludCBpbmRleD0tMSwgYm9vbCBjcz1UUlVFKSBj
b25zdDsKICAgIGludCBmaW5kUmV2KCBjb25zdCBjaGFyICpzdHIsIGludCBpbmRleD0tMSwgYm9v
bCBjcz1UUlVFKSBjb25zdDsKCiAgICBpbnQgZmluZFJldiggY29uc3QgUVJlZ0V4cCAmLCBpbnQg
aW5kZXg9LTEgKSBjb25zdDsKCiAgICBpbnQgY29udGFpbnMoIGNoYXIgYywgYm9vbCBjcz1UUlVF
ICkgY29uc3Q7CiAgICBpbnQgY29udGFpbnMoIGNvbnN0IGNoYXIgKnN0ciwgYm9vbCBjcz1UUlVF
ICkgY29uc3Q7CgogICAgaW50IGNvbnRhaW5zKCBjb25zdCBRUmVnRXhwICYgKSBjb25zdDsKCiAg
ICBRQ1N0cmluZyBsZWZ0KCB1aW50IGxlbiApIGNvbnN0OwogICAgUUNTdHJpbmcgcmlnaHQoIHVp
bnQgbGVuICkgY29uc3Q7CiAgICBRQ1N0cmluZyBtaWQoIHVpbnQgaW5kZXgsIHVpbnQgbGVuPTB4
ZmZmZmZmZmYpIGNvbnN0OwoKICAgIFFDU3RyaW5nIGxlZnRKdXN0aWZ5KCB1aW50IHdpZHRoLCBj
aGFyIGZpbGw9JyAnLCBib29sIHRydW5jPUZBTFNFKWNvbnN0OwogICAgUUNTdHJpbmcgcmlnaHRK
dXN0aWZ5KCB1aW50IHdpZHRoLCBjaGFyIGZpbGw9JyAnLGJvb2wgdHJ1bmM9RkFMU0UpY29uc3Q7
CgogICAgUUNTdHJpbmcgbG93ZXIoKSBjb25zdDsKICAgIFFDU3RyaW5nIHVwcGVyKCkgY29uc3Q7
CgogICAgUUNTdHJpbmcgc3RyaXBXaGl0ZVNwYWNlKCkgY29uc3Q7CiAgICBRQ1N0cmluZyBzaW1w
bGlmeVdoaXRlU3BhY2UoKSBjb25zdDsKCiAgICBRQ1N0cmluZyAmaW5zZXJ0KCB1aW50IGluZGV4
LCBjb25zdCBjaGFyICogKTsKICAgIFFDU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNoYXIg
KTsKICAgIFFDU3RyaW5nICZhcHBlbmQoIGNvbnN0IGNoYXIgKiApOwogICAgUUNTdHJpbmcgJnBy
ZXBlbmQoIGNvbnN0IGNoYXIgKiApOwogICAgUUNTdHJpbmcgJnJlbW92ZSggdWludCBpbmRleCwg
dWludCBsZW4gKTsKICAgIFFDU3RyaW5nICZyZXBsYWNlKCB1aW50IGluZGV4LCB1aW50IGxlbiwg
Y29uc3QgY2hhciAqICk7CgogICAgUUNTdHJpbmcgJnJlcGxhY2UoIGNvbnN0IFFSZWdFeHAgJiwg
Y29uc3QgY2hhciAqICk7CgogICAgUUNTdHJpbmcgJnJlcGxhY2UoIGNoYXIgYywgY29uc3QgY2hh
ciAqYWZ0ZXIgKTsKICAgIFFDU3RyaW5nICZyZXBsYWNlKCBjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKiApOwogICAgUUNTdHJpbmcgJnJlcGxhY2UoIGNoYXIsIGNoYXIgKTsKCiAgICBzaG9ydCB0
b1Nob3J0KCBib29sICpvaz0wICkgY29uc3Q7CiAgICB1c2hvcnQgdG9VU2hvcnQoIGJvb2wgKm9r
PTAgKSBjb25zdDsKICAgIGludCB0b0ludCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgdWludCB0
b1VJbnQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIGxvbmcgdG9Mb25nKCBib29sICpvaz0wICkg
Y29uc3Q7CiAgICB1bG9uZyB0b1VMb25nKCBib29sICpvaz0wICkgY29uc3Q7CiAgICBmbG9hdCB0
b0Zsb2F0KCBib29sICpvaz0wICkgY29uc3Q7CiAgICBkb3VibGUgdG9Eb3VibGUoIGJvb2wgKm9r
PTAgKSBjb25zdDsKCiAgICBRQ1N0cmluZyAmc2V0U3RyKCBjb25zdCBjaGFyICpzICk7CiAgICBR
Q1N0cmluZyAmc2V0TnVtKCBzaG9ydCApOwogICAgUUNTdHJpbmcgJnNldE51bSggdXNob3J0ICk7
CiAgICBRQ1N0cmluZyAmc2V0TnVtKCBpbnQgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIHVpbnQg
KTsKICAgIFFDU3RyaW5nICZzZXROdW0oIGxvbmcgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIHVs
b25nICk7CiAgICBRQ1N0cmluZyAmc2V0TnVtKCBmbG9hdCwgY2hhciBmPSdnJywgaW50IHByZWM9
NiApOwogICAgUUNTdHJpbmcgJnNldE51bSggZG91YmxlLCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02
ICk7CgogICAgYm9vbCBzZXRFeHBhbmQoIHVpbnQgaW5kZXgsIGNoYXIgYyApOwoKICAgICAgICAg
ICAgICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIgKigpIGNvbnN0OwogICAgUUNTdHJpbmcgJm9wZXJh
dG9yKz0oIGNvbnN0IGNoYXIgKnN0ciApOwogICAgUUNTdHJpbmcgJm9wZXJhdG9yKz0oIGNoYXIg
YyApOwpwcml2YXRlOgogICAgaW50IGZpbmQoIGNvbnN0IGNoYXIgKnN0ciwgaW50IGluZGV4LCBi
b29sIGNzLCB1aW50IGwgKSBjb25zdDsKfTsKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8
KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRQ1N0cmluZyAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0
b3I+PiggUURhdGFTdHJlYW0gJiwgUUNTdHJpbmcgJiApOwoKCgoKCgppbmxpbmUgUUNTdHJpbmcg
JlFDU3RyaW5nOjpvcGVyYXRvcj0oIGNvbnN0IFFDU3RyaW5nICZzICkKeyByZXR1cm4gKFFDU3Ry
aW5nJilhc3NpZ24oIHMgKTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6b3BlcmF0b3I9
KCBjb25zdCBjaGFyICpzdHIgKQp7IHJldHVybiAoUUNTdHJpbmcmKWR1cGxpY2F0ZSggc3RyLCBx
c3RybGVuKHN0cikrMSApOyB9CgppbmxpbmUgYm9vbCBRQ1N0cmluZzo6aXNOdWxsKCkgY29uc3QK
eyByZXR1cm4gZGF0YSgpID09IDA7IH0KCmlubGluZSBib29sIFFDU3RyaW5nOjppc0VtcHR5KCkg
Y29uc3QKeyByZXR1cm4gZGF0YSgpID09IDAgfHwgKmRhdGEoKSA9PSAnXDAnOyB9CgppbmxpbmUg
dWludCBRQ1N0cmluZzo6bGVuZ3RoKCkgY29uc3QKeyByZXR1cm4gcXN0cmxlbiggZGF0YSgpICk7
IH0KCmlubGluZSBib29sIFFDU3RyaW5nOjp0cnVuY2F0ZSggdWludCBwb3MgKQp7IHJldHVybiBy
ZXNpemUocG9zKzEpOyB9CgppbmxpbmUgUUNTdHJpbmcgUUNTdHJpbmc6OmNvcHkoKSBjb25zdAp7
IHJldHVybiBRQ1N0cmluZyggZGF0YSgpICk7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6
OnByZXBlbmQoIGNvbnN0IGNoYXIgKnMgKQp7IHJldHVybiBpbnNlcnQoMCxzKTsgfQoKaW5saW5l
IFFDU3RyaW5nICZRQ1N0cmluZzo6YXBwZW5kKCBjb25zdCBjaGFyICpzICkKeyByZXR1cm4gb3Bl
cmF0b3IrPShzKTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6c2V0TnVtKCBzaG9ydCBu
ICkKeyByZXR1cm4gc2V0TnVtKChsb25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5n
OjpzZXROdW0oIHVzaG9ydCBuICkKeyByZXR1cm4gc2V0TnVtKCh1bG9uZyluKTsgfQoKaW5saW5l
IFFDU3RyaW5nICZRQ1N0cmluZzo6c2V0TnVtKCBpbnQgbiApCnsgcmV0dXJuIHNldE51bSgobG9u
ZyluKTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6c2V0TnVtKCB1aW50IG4gKQp7IHJl
dHVybiBzZXROdW0oKHVsb25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXRO
dW0oIGZsb2F0IG4sIGNoYXIgZiwgaW50IHByZWMgKQp7IHJldHVybiBzZXROdW0oKGRvdWJsZSlu
LGYscHJlYyk7IH0KCmlubGluZSBRQ1N0cmluZzo6b3BlcmF0b3IgY29uc3QgY2hhciAqKCkgY29u
c3QKeyByZXR1cm4gKGNvbnN0IGNoYXIgKilkYXRhKCk7IH0KCgoKCgoKIGlubGluZSBib29sIG9w
ZXJhdG9yPT0oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1
cm4gcXN0cmNtcCggczEuZGF0YSgpLCBzMi5kYXRhKCkgKSA9PSAwOyB9CgogaW5saW5lIGJvb2wg
b3BlcmF0b3I9PSggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJu
IHFzdHJjbXAoIHMxLmRhdGEoKSwgczIgKSA9PSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I9
PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAo
IHMxLCBzMi5kYXRhKCkgKSA9PSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3Qg
UUNTdHJpbmcgJnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3RyY21wKCBzMS5k
YXRhKCksIHMyLmRhdGEoKSApICE9IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25z
dCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0cmNtcCggczEuZGF0
YSgpLCBzMiApICE9IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBjaGFyICpz
MSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcCggczEsIHMyLmRhdGEoKSAp
ICE9IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoIGNvbnN0IFFDU3RyaW5nICZzMSwgY29u
c3QgUUNTdHJpbmcmIHMyICkKeyByZXR1cm4gcXN0cmNtcCggczEuZGF0YSgpLCBzMi5kYXRhKCkg
KSA8IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoIGNvbnN0IFFDU3RyaW5nICZzMSwgY29u
c3QgY2hhciAqczIgKQp7IHJldHVybiBxc3RyY21wKCBzMS5kYXRhKCksIHMyICkgPCAwOyB9Cgog
aW5saW5lIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMy
ICkKeyByZXR1cm4gcXN0cmNtcCggczEsIHMyLmRhdGEoKSApIDwgMDsgfQoKIGlubGluZSBib29s
IG9wZXJhdG9yPD0oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyBy
ZXR1cm4gcXN0cmNtcCggczEuZGF0YSgpLCBzMi5kYXRhKCkgKSA8PSAwOyB9CgogaW5saW5lIGJv
b2wgb3BlcmF0b3I8PSggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0
dXJuIHFzdHJjbXAoIHMxLmRhdGEoKSwgczIgKSA8PSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0
b3I8PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJj
bXAoIHMxLCBzMi5kYXRhKCkgKSA8PSAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I+KCBjb25z
dCBRQ1N0cmluZyAmczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoIHMx
LmRhdGEoKSwgczIuZGF0YSgpICkgPiAwOyB9CgogaW5saW5lIGJvb2wgb3BlcmF0b3I+KCBjb25z
dCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0cmNtcCggczEuZGF0
YSgpLCBzMiApID4gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPiggY29uc3QgY2hhciAqczEs
IGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoIHMxLCBzMi5kYXRhKCkgKSA+
IDA7IH0KCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj49KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0
IFFDU3RyaW5nJiBzMiApCnsgcmV0dXJuIHFzdHJjbXAoIHMxLmRhdGEoKSwgczIuZGF0YSgpICkg
Pj0gMDsgfQoKIGlubGluZSBib29sIG9wZXJhdG9yPj0oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29u
c3QgY2hhciAqczIgKQp7IHJldHVybiBxc3RyY21wKCBzMS5kYXRhKCksIHMyICkgPj0gMDsgfQoK
IGlubGluZSBib29sIG9wZXJhdG9yPj0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAm
czIgKQp7IHJldHVybiBxc3RyY21wKCBzMSwgczIuZGF0YSgpICkgPj0gMDsgfQoKIGlubGluZSBj
b25zdCBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFDU3RyaW5nICZzMSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUNTdHJpbmcgJnMyICkKewogICAg
UUNTdHJpbmcgdG1wKCBzMS5kYXRhKCkgKTsKICAgIHRtcCArPSBzMjsKICAgIHJldHVybiB0bXA7
Cn0KCiBpbmxpbmUgY29uc3QgUUNTdHJpbmcgb3BlcmF0b3IrKCBjb25zdCBRQ1N0cmluZyAmczEs
IGNvbnN0IGNoYXIgKnMyICkKewogICAgUUNTdHJpbmcgdG1wKCBzMS5kYXRhKCkgKTsKICAgIHRt
cCArPSBzMjsKICAgIHJldHVybiB0bXA7Cn0KCiBpbmxpbmUgY29uc3QgUUNTdHJpbmcgb3BlcmF0
b3IrKCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKewogICAgUUNTdHJpbmcg
dG1wKCBzMSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlubGluZSBjb25z
dCBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IFFDU3RyaW5nICZzMSwgY2hhciBjMiApCnsKICAg
IFFDU3RyaW5nIHRtcCggczEuZGF0YSgpICk7CiAgICB0bXAgKz0gYzI7CiAgICByZXR1cm4gdG1w
Owp9CgogaW5saW5lIGNvbnN0IFFDU3RyaW5nIG9wZXJhdG9yKyggY2hhciBjMSwgY29uc3QgUUNT
dHJpbmcgJnMyICkKewogICAgUUNTdHJpbmcgdG1wOwogICAgdG1wICs9IGMxOwogICAgdG1wICs9
IHMyOwogICAgcmV0dXJuIHRtcDsKfQojIDQ0ICIuLi8uLi9pbmNsdWRlL3Fpb2RldmljZS5oIiAy
CiMgODggIi4uLy4uL2luY2x1ZGUvcWlvZGV2aWNlLmgiCmNsYXNzIFFJT0RldmljZQp7CnB1Ymxp
YzoKCgoKICAgIHR5cGVkZWYgUV9VTE9ORyBPZmZzZXQ7CgoKICAgIFFJT0RldmljZSgpOwogICAg
dmlydHVhbCB+UUlPRGV2aWNlKCk7CgogICAgaW50IGZsYWdzKCkgY29uc3QgeyByZXR1cm4gaW9N
b2RlOyB9CiAgICBpbnQgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIGlvTW9kZSAmIDB4MDBmZjsgfQog
ICAgaW50IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gaW9Nb2RlICYgMHhmMDAwOyB9CgogICAgYm9v
bCBpc0RpcmVjdEFjY2VzcygpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMTAwKSA9PSAw
eDAxMDApOyB9CiAgICBib29sIGlzU2VxdWVudGlhbEFjY2VzcygpIGNvbnN0IHsgcmV0dXJuICgo
aW9Nb2RlICYgMHgwMjAwKSA9PSAweDAyMDApOyB9CiAgICBib29sIGlzQ29tYmluZWRBY2Nlc3Mo
KSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDMwMCkgPT0gMHgwMzAwKTsgfQogICAgYm9v
bCBpc0J1ZmZlcmVkKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwNDApICE9IDB4MDA0
MCk7IH0KICAgIGJvb2wgaXNSYXcoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDA0MCkg
PT0gMHgwMDQwKTsgfQogICAgYm9vbCBpc1N5bmNocm9ub3VzKCkgY29uc3QgeyByZXR1cm4gKChp
b01vZGUgJiAweDAwODApICE9IDB4MDA4MCk7IH0KICAgIGJvb2wgaXNBc3luY2hyb25vdXMoKSBj
b25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDA4MCkgPT0gMHgwMDgwKTsgfQogICAgYm9vbCBp
c1RyYW5zbGF0ZWQoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDAxMCkgPT0gMHgwMDEw
KTsgfQogICAgYm9vbCBpc1JlYWRhYmxlKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAw
MDEpID09IDB4MDAwMSk7IH0KICAgIGJvb2wgaXNXcml0YWJsZSgpIGNvbnN0IHsgcmV0dXJuICgo
aW9Nb2RlICYgMHgwMDAyKSA9PSAweDAwMDIpOyB9CiAgICBib29sIGlzUmVhZFdyaXRlKCkgY29u
c3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwMDMpID09IDB4MDAwMyk7IH0KICAgIGJvb2wgaXNJ
bmFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkgPT0gMDsgfQogICAgYm9vbCBpc09wZW4o
KSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IDB4MTAwMDsgfQoKICAgIGludCBzdGF0dXMoKSBj
b25zdCB7IHJldHVybiBpb1N0OyB9CiAgICB2b2lkIHJlc2V0U3RhdHVzKCkgeyBpb1N0ID0gMDsg
fQoKICAgIHZpcnR1YWwgYm9vbCBvcGVuKCBpbnQgbW9kZSApID0gMDsKICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZSgpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpID0gMDsKCiAgICB2aXJ0dWFs
IE9mZnNldCBzaXplKCkgY29uc3QgPSAwOwogICAgdmlydHVhbCBPZmZzZXQgYXQoKSBjb25zdDsK
ICAgIHZpcnR1YWwgYm9vbCBhdCggT2Zmc2V0ICk7CiAgICB2aXJ0dWFsIGJvb2wgYXRFbmQoKSBj
b25zdDsKICAgIGJvb2wgcmVzZXQoKSB7IHJldHVybiBhdCgwKTsgfQoKICAgIHZpcnR1YWwgUV9M
T05HIHJlYWRCbG9jayggY2hhciAqZGF0YSwgUV9VTE9ORyBtYXhsZW4gKSA9IDA7CiAgICB2aXJ0
dWFsIFFfTE9ORyB3cml0ZUJsb2NrKCBjb25zdCBjaGFyICpkYXRhLCBRX1VMT05HIGxlbiApID0g
MDsKICAgIHZpcnR1YWwgUV9MT05HIHJlYWRMaW5lKCBjaGFyICpkYXRhLCBRX1VMT05HIG1heGxl
biApOwogICAgUV9MT05HIHdyaXRlQmxvY2soIGNvbnN0IFFCeXRlQXJyYXkmIGRhdGEgKTsKICAg
IHZpcnR1YWwgUUJ5dGVBcnJheSByZWFkQWxsKCk7CgogICAgdmlydHVhbCBpbnQgZ2V0Y2goKSA9
IDA7CiAgICB2aXJ0dWFsIGludCBwdXRjaCggaW50ICkgPSAwOwogICAgdmlydHVhbCBpbnQgdW5n
ZXRjaCggaW50ICkgPSAwOwoKcHJvdGVjdGVkOgogICAgdm9pZCBzZXRGbGFncyggaW50IGYgKSB7
IGlvTW9kZSA9IGY7IH0KICAgIHZvaWQgc2V0VHlwZSggaW50ICk7CiAgICB2b2lkIHNldE1vZGUo
IGludCApOwogICAgdm9pZCBzZXRTdGF0ZSggaW50ICk7CiAgICB2b2lkIHNldFN0YXR1cyggaW50
ICk7CiAgICBPZmZzZXQgaW9JbmRleDsKCnByaXZhdGU6CiAgICBpbnQgaW9Nb2RlOwogICAgaW50
IGlvU3Q7Cgpwcml2YXRlOgoKICAgIFFJT0RldmljZSggY29uc3QgUUlPRGV2aWNlICYgKTsKICAg
IFFJT0RldmljZSAmb3BlcmF0b3I9KCBjb25zdCBRSU9EZXZpY2UgJiApOwoKfTsKIyA0MyAiLi4v
Li4vaW5jbHVkZS9xdGV4dHN0cmVhbS5oIiAyCiMgMSAiLi4vLi4vaW5jbHVkZS9xc3RyaW5nLmgi
IDEKIyA0NiAiLi4vLi4vaW5jbHVkZS9xc3RyaW5nLmgiCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL3N0cmluZyIgMSAzCiMgNDQgIi9zcGFjZS9zbmIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMy9zdHJpbmciIDMKCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL3NwYXJjLXN1bi1zb2xhcmlzMi45L2JpdHMvYysrY29uZmlnLmgiIDEgMwoj
IDM0ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvc3BhcmMtc3VuLXNvbGFy
aXMyLjkvYml0cy9jKytjb25maWcuaCIgMwojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9zcGFyYy1zdW4tc29sYXJpczIuOS9iaXRzL29zX2RlZmluZXMuaCIgMSAzCiMg
MzUgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zcGFyYy1zdW4tc29sYXJp
czIuOS9iaXRzL2MrK2NvbmZpZy5oIiAyIDMKIyA0NiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL3N0cmluZyIgMiAzCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDQzICIvc3BhY2Uvc25iL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdHJpbmdmd2QuaCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBhbGxvY2F0b3I7CgogIHRlbXBs
YXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAg
ICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBi
YXNpY19zdHJpbmc7CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0
eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFyPiBzdHJpbmc7CgoKCgoKCn0KIyA0NyAiL3NwYWNlL3Nu
Yi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmluZyIgMiAzCiMgMSAiL3NwYWNlL3NuYi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvY2hhcl90cmFpdHMuaCIgMSAzCiMgNDQgIi9z
cGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2NoYXJfdHJhaXRzLmgiIDMK
CiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2NzdHJpbmciIDEgMwoj
IDQ4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY3N0cmluZyIgMwoKIyAx
ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY3N0ZGRlZiIgMSAzCiMgNDcg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jc3RkZGVmIiAzCgojIDEgIi9z
cGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDE1MSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBl
ZGVmIGludCBwdHJkaWZmX3Q7CiMgNDkgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9jc3RkZGVmIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6cHRyZGlmZl90Owog
IHVzaW5nIDo6c2l6ZV90Owp9CiMgNTAgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9jc3RyaW5nIiAyIDMKIyA3NyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2NzdHJpbmciIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptZW1jcHk7CiAgdXNpbmcg
OjptZW1tb3ZlOwogIHVzaW5nIDo6c3RyY3B5OwogIHVzaW5nIDo6c3RybmNweTsKICB1c2luZyA6
OnN0cmNhdDsKICB1c2luZyA6OnN0cm5jYXQ7CiAgdXNpbmcgOjptZW1jbXA7CiAgdXNpbmcgOjpz
dHJjbXA7CiAgdXNpbmcgOjpzdHJjb2xsOwogIHVzaW5nIDo6c3RybmNtcDsKICB1c2luZyA6OnN0
cnhmcm07CiAgdXNpbmcgOjpzdHJjc3BuOwogIHVzaW5nIDo6c3Ryc3BuOwogIHVzaW5nIDo6c3Ry
dG9rOwogIHVzaW5nIDo6bWVtc2V0OwogIHVzaW5nIDo6c3RyZXJyb3I7CiAgdXNpbmcgOjpzdHJs
ZW47CgogIHVzaW5nIDo6bWVtY2hyOwoKICBpbmxpbmUgdm9pZCoKICBtZW1jaHIodm9pZCogX19w
LCBpbnQgX19jLCBzaXplX3QgX19uKQogIHsgcmV0dXJuIG1lbWNocihjb25zdF9jYXN0PGNvbnN0
IHZvaWQqPihfX3ApLCBfX2MsIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJjaHI7CgogIGlubGluZSBj
aGFyKgogIHN0cmNocihjaGFyKiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9z
dHJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpz
dHJwYnJrOwoKICBpbmxpbmUgY2hhcioKICBzdHJwYnJrKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIq
IF9fczIpCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnBicmsoY29uc3RfY2FzdDxjb25zdCBjaGFy
Kj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6c3RycmNocjsKCiAgaW5saW5lIGNoYXIqCiAg
c3RycmNocihjaGFyKiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hy
KGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3Ryc3Ry
OwoKICBpbmxpbmUgY2hhcioKICBzdHJzdHIoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikK
ICB7IHJldHVybiBfX2J1aWx0aW5fc3Ryc3RyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEp
LCBfX3MyKTsgfQp9CiMgNDYgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9i
aXRzL2NoYXJfdHJhaXRzLmgiIDIgMwojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMy9iaXRzL2Zwb3MuaCIgMSAzCiMgNDMgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvc3BhcmMtc3VuLXNvbGFyaXMyLjkvYml0cy9jKytpby5oIiAxIDMKIyAzNSAi
L3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3NwYXJjLXN1bi1zb2xhcmlzMi45
L2JpdHMvYysraW8uaCIgMwojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9jc3RkaW8iIDEgMwojIDQ4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
Y3N0ZGlvIiAzCgoKCgojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDEgMyA0CiMgMTQgIi9zcGFjZS9z
bmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRl
L3N0ZGlvLmgiIDMgNAojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMgNAojIDQzICIvc3BhY2Uv
c25iL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVk
ZS9zdGRhcmcuaCIgMyA0CnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7
CiMgMTUgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi45LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CiMgMzQgIi9zcGFjZS9zbmIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMg
NAojcHJhZ21hIGlkZW50ICJAKCMpc3RkaW8uaAkxLjc5CTAxLzA0LzE2IFNNSSIgCgojIDEgIi91
c3IvaW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDEgMyA0CiMgMzIgIi91c3IvaW5jbHVkZS9pc28v
c3RkaW9faXNvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc3RkaW9faXNvLmgJMS4yCTk5LzEw
LzI1IFNNSSIKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3ZhX2xpc3QuaCIgMSAzIDQKIyA5ICIv
dXNyL2luY2x1ZGUvc3lzL3ZhX2xpc3QuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyl2YV9saXN0
LmgJMS4xMwkwMS8wMi8wOCBTTUkiCiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvdmFfbGlzdC5oIiAz
IDQKZXh0ZXJuICJDIiB7CgoKCnR5cGVkZWYgdm9pZCAqX192YV9saXN0OwoKCgoKCn0KIyAzNyAi
L3Vzci9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMiAzIDQKIyAxICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9zdGRpb190
YWcuaCIgMSAzIDQKIyAxOCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvc3RkaW9fdGFnLmgiIDMgNAojcHJhZ21hIGlkZW50
ICJAKCMpc3RkaW9fdGFnLmgJMS4zCTk4LzA0LzIwIFNNSSIKCgpleHRlcm4gIkMiIHsKIyAzMCAi
L3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4z
L2luY2x1ZGUvc3RkaW9fdGFnLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfX0ZJTEUgX19GSUxFOwoK
Cgp9CiMgMzggIi91c3IvaW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDIgMyA0CiMgMSAiL3Vzci9p
bmNsdWRlL3N0ZGlvX2ltcGwuaCIgMSAzIDQKIyA5ICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5o
IiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXN0ZGlvX2ltcGwuaAkxLjEzCTAxLzExLzE2IFNNSSIK
CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKdHlwZWRlZiBpbnQgc3NpemVfdDsKIyAzOCAiL3Vzci9p
bmNsdWRlL3N0ZGlvX2ltcGwuaCIgMyA0CnN0cnVjdCBfX0ZJTEUKewoKCgoKICAgICAgICBzc2l6
ZV90IF9jbnQ7CiAgICAgICAgdW5zaWduZWQgY2hhciAqX3B0cjsKCiAgICAgICAgdW5zaWduZWQg
Y2hhciAqX2Jhc2U7CiAgICAgICAgdW5zaWduZWQgY2hhciBfZmxhZzsKICAgICAgICB1bnNpZ25l
ZCBjaGFyIF9maWxlOwogICAgICAgIHVuc2lnbmVkIF9fb3JpZW50YXRpb246MjsKICAgICAgICB1
bnNpZ25lZCBfX2lvbm9sb2NrOjE7CiAgICAgICAgdW5zaWduZWQgX19zZWVrYWJsZToxOwogICAg
ICAgIHVuc2lnbmVkIF9fZmlsbGVyOjQ7Cn07CgoKCgp9CiMgMzkgIi91c3IvaW5jbHVkZS9pc28v
c3RkaW9faXNvLmgiIDIgMyA0CiMgNDkgIi91c3IvaW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDMg
NApleHRlcm4gIkMiIHsKIyA1OSAiL3Vzci9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMyA0CnR5
cGVkZWYgbG9uZyBsb25nIF9fbG9uZ2xvbmdfdDsKIyA3NSAiL3Vzci9pbmNsdWRlL2lzby9zdGRp
b19pc28uaCIgMyA0CnR5cGVkZWYgX19GSUxFIEZJTEU7CiMgODggIi91c3IvaW5jbHVkZS9pc28v
c3RkaW9faXNvLmgiIDMgNAp0eXBlZGVmIGxvbmcgZnBvc190OwojIDE0NyAiL3Vzci9pbmNsdWRl
L2lzby9zdGRpb19pc28uaCIgMyA0CmV4dGVybiBfX0ZJTEUgX19pb2JbMjBdOwojIDE2NCAiL3Vz
ci9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMyA0CmV4dGVybiBpbnQgcmVtb3ZlKGNvbnN0IGNo
YXIgKik7CmV4dGVybiBpbnQgcmVuYW1lKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0
ZXJuIEZJTEUgKnRtcGZpbGUodm9pZCk7CmV4dGVybiBjaGFyICp0bXBuYW0oY2hhciAqKTsKZXh0
ZXJuIGludCBmY2xvc2UoRklMRSAqKTsKZXh0ZXJuIGludCBmZmx1c2goRklMRSAqKTsKZXh0ZXJu
IEZJTEUgKmZvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIEZJTEUgKmZy
ZW9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKik7CmV4dGVybiB2b2lkIHNl
dGJ1ZihGSUxFICosIGNoYXIgKik7CmV4dGVybiBpbnQgc2V0dmJ1ZihGSUxFICosIGNoYXIgKiwg
aW50LCBzaXplX3QpOwoKZXh0ZXJuIGludCBmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCAu
Li4pOwoKZXh0ZXJuIGludCBmc2NhbmYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CgpleHRl
cm4gaW50IHByaW50Zihjb25zdCBjaGFyICosIC4uLik7CgpleHRlcm4gaW50IHNjYW5mKGNvbnN0
IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc3ByaW50ZihjaGFyICosIGNvbnN0IGNoYXIgKiwg
Li4uKTsKCmV4dGVybiBpbnQgc3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4p
OwpleHRlcm4gaW50IHZmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOwpl
eHRlcm4gaW50IHZwcmludGYoY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gaW50IHZz
cHJpbnRmKGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gaW50IGZnZXRj
KEZJTEUgKik7CmV4dGVybiBjaGFyICpmZ2V0cyhjaGFyICosIGludCwgRklMRSAqKTsKZXh0ZXJu
IGludCBmcHV0YyhpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQgZnB1dHMoY29uc3QgY2hhciAqLCBG
SUxFICopOwoKCmV4dGVybiBpbnQgZ2V0YyhGSUxFICopOwpleHRlcm4gaW50IHB1dGMoaW50LCBG
SUxFICopOwoKCgpleHRlcm4gaW50IGdldGNoYXIodm9pZCk7CmV4dGVybiBpbnQgcHV0Y2hhcihp
bnQpOwoKZXh0ZXJuIGNoYXIgKmdldHMoY2hhciAqKTsKZXh0ZXJuIGludCBwdXRzKGNvbnN0IGNo
YXIgKik7CmV4dGVybiBpbnQgdW5nZXRjKGludCwgRklMRSAqKTsKZXh0ZXJuIHNpemVfdCBmcmVh
ZCh2b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOwpleHRlcm4gc2l6ZV90IGZ3cml0ZShj
b25zdCB2b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOwpleHRlcm4gaW50IGZnZXRwb3Mo
RklMRSAqLCBmcG9zX3QgKik7CmV4dGVybiBpbnQgZnNlZWsoRklMRSAqLCBsb25nLCBpbnQpOwpl
eHRlcm4gaW50IGZzZXRwb3MoRklMRSAqLCBjb25zdCBmcG9zX3QgKik7CmV4dGVybiBsb25nIGZ0
ZWxsKEZJTEUgKik7CmV4dGVybiB2b2lkIHJld2luZChGSUxFICopOwoKCmV4dGVybiB2b2lkIGNs
ZWFyZXJyKEZJTEUgKik7CmV4dGVybiBpbnQgZmVvZihGSUxFICopOwpleHRlcm4gaW50IGZlcnJv
cihGSUxFICopOwoKZXh0ZXJuIHZvaWQgcGVycm9yKGNvbnN0IGNoYXIgKik7CgoKZXh0ZXJuIGlu
dCBfX2ZpbGJ1ZihGSUxFICopOwpleHRlcm4gaW50IF9fZmxzYnVmKGludCwgRklMRSAqKTsKIyAz
MzYgIi91c3IvaW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDMgNAp9CiMgMzcgIi9zcGFjZS9zbmIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL3N0
ZGlvLmgiIDIgMyA0CiMgOTggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gIkMiIHsKCgoK
CgoKdHlwZWRlZiBsb25nIG9mZl90OwoKCgoKCgoKdHlwZWRlZiBfX2xvbmdsb25nX3Qgb2ZmNjRf
dDsKIyAxMjMgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi45LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNAp0eXBlZGVmIF9fbG9uZ2xvbmdfdCBmcG9z
NjRfdDsKIyAxMzQgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi45LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNAp0eXBlZGVmIF9fdmFfbGlzdCBfX25v
dF92YV9saXN0X187CiMgMTUxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIHVuc2lnbmVk
IGNoYXIgX3NpYnVmW10sIF9zb2J1ZltdOwojIDE5MyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4
dGVybiB1bnNpZ25lZCBjaGFyICpfYnVmZW5kdGFiW107CmV4dGVybiBGSUxFICpfbGFzdGJ1ZjsK
IyAyMjUgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi45LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gY2hhciAqdG1wbmFtX3IoY2hhciAq
KTsKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyKEZJTEUgKiwgY2hhciAqLCBzaXplX3QpOwpleHRl
cm4gaW50IHNldGxpbmVidWYoRklMRSAqKTsKCgoKCgpleHRlcm4gaW50IHZmc2NhbmYoRklMRSAq
LCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKZXh0ZXJuIGludCB2c2NhbmYoY29uc3Qg
Y2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmV4dGVybiBpbnQgdnNzY2FuZihjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwoKCgoKCmV4dGVybiBpbnQgc25wcmludGYo
Y2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKCgoKCmV4dGVybiBpbnQgdnNucHJp
bnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKIyAyNTgg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMu
My9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gRklMRSAqZmRvcGVuKGludCwgY29uc3QgY2hh
ciAqKTsKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQoY2hhciAqKTsKZXh0ZXJuIGludCBmaWxlbm8oRklM
RSAqKTsKIyAyNjkgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi45LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gdm9pZCBmbG9ja2ZpbGUo
RklMRSAqKTsKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUoRklMRSAqKTsKZXh0ZXJuIHZvaWQgZnVu
bG9ja2ZpbGUoRklMRSAqKTsKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkKEZJTEUgKik7CmV4dGVy
biBpbnQgZ2V0Y2hhcl91bmxvY2tlZCh2b2lkKTsKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkKGlu
dCwgRklMRSAqKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkKGludCk7CiMgMjg0ICIvc3Bh
Y2Uvc25iL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5j
bHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIEZJTEUgKnBvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqKTsKZXh0ZXJuIGNoYXIgKmN1c2VyaWQoY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnRlbXBu
YW0oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IGdldG9wdChpbnQsIGNo
YXIgKmNvbnN0ICosIGNvbnN0IGNoYXIgKik7CgoKCmV4dGVybiBjaGFyICpvcHRhcmc7CmV4dGVy
biBpbnQgb3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsKZXh0ZXJuIGludCBnZXR3KEZJTEUgKik7CmV4
dGVybiBpbnQgcHV0dyhpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQgcGNsb3NlKEZJTEUgKik7CgoK
CgoKCgpleHRlcm4gaW50IGZzZWVrbyhGSUxFICosIG9mZl90LCBpbnQpOwpleHRlcm4gb2ZmX3Qg
ZnRlbGxvKEZJTEUgKik7CiMgMzEzICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIEZJTEUg
KmZvcGVuNjQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRSAqZnJlb3Bl
bjY0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBGSUxFICopOwpleHRlcm4gRklMRSAqdG1w
ZmlsZTY0KHZvaWQpOwpleHRlcm4gaW50IGZnZXRwb3M2NChGSUxFICosIGZwb3M2NF90ICopOwpl
eHRlcm4gaW50IGZzZXRwb3M2NChGSUxFICosIGNvbnN0IGZwb3M2NF90ICopOwpleHRlcm4gaW50
IGZzZWVrbzY0KEZJTEUgKiwgb2ZmNjRfdCwgaW50KTsKZXh0ZXJuIG9mZjY0X3QgZnRlbGxvNjQo
RklMRSAqKTsKIyA0MjMgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNAp9CiMgNTMgIi9zcGFjZS9zbmIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jc3RkaW8iIDIgMwojIDk3ICIvc3BhY2Uvc25iL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY3N0ZGlvIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5n
IDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsKCiAgdXNpbmcgOjpjbGVhcmVycjsKICB1c2luZyA6
OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAgdXNpbmcgOjpmZXJyb3I7CiAgdXNpbmcgOjpmZmx1
c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2luZyA6OmZnZXRwb3M7CiAgdXNpbmcgOjpmZ2V0czsK
ICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6ZnByaW50ZjsKICB1c2luZyA6OmZwdXRjOwogIHVz
aW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVhZDsKICB1c2luZyA6OmZyZW9wZW47CiAgdXNpbmcg
Ojpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsKICB1c2luZyA6OmZzZXRwb3M7CiAgdXNpbmcgOjpm
dGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1c2luZyA6OmdldGM7CiAgdXNpbmcgOjpnZXRjaGFy
OwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6OnBlcnJvcjsKICB1c2luZyA6OnByaW50ZjsKICB1
c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRjaGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2luZyA6
OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsKICB1c2luZyA6OnJld2luZDsKICB1c2luZyA6OnNj
YW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVzaW5nIDo6c2V0dmJ1ZjsKICB1c2luZyA6OnNwcmlu
dGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNpbmcgOjp0bXBmaWxlOwogIHVzaW5nIDo6dG1wbmFt
OwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5nIDo6dmZwcmludGY7CiAgdXNpbmcgOjp2cHJpbnRm
OwogIHVzaW5nIDo6dnNwcmludGY7Cn0KIyAzNiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL3NwYXJjLXN1bi1zb2xhcmlzMi45L2JpdHMvYysraW8uaCIgMiAzCgojIDEgIi9z
cGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zcGFyYy1zdW4tc29sYXJpczIuOS9i
aXRzL2d0aHIuaCIgMSAzCiMgOTggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9zcGFyYy1zdW4tc29sYXJpczIuOS9iaXRzL2d0aHIuaCIgMwojIDEgIi9zcGFjZS9zbmIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zcGFyYy1zdW4tc29sYXJpczIuOS9iaXRzL2d0aHItZGVm
YXVsdC5oIiAxIDMKIyAzNyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3Nw
YXJjLXN1bi1zb2xhcmlzMi45L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvcHRocmVhZC5oIiAxIDMgNAojIDkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNAojcHJh
Z21hIGlkZW50ICJAKCMpcHRocmVhZC5oCTEuMzIJMDEvMTEvMTAgU01JIgoKCiMgMSAiL3NwYWNl
L3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjUgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKI3By
YWdtYSBpZGVudCAiQCgjKXR5cGVzLmgJMS43MgkwMi8wMy8yMyBTTUkiCgoKCgoKCgojIDEgIi91
c3IvaW5jbHVkZS9zeXMvbWFjaHR5cGVzLmgiIDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS9zeXMv
bWFjaHR5cGVzLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpbWFjaHR5cGVzLmgJMS4xMwk5OS8w
NS8wNCBTTUkiCgoKCgpleHRlcm4gIkMiIHsKIyAzMyAiL3Vzci9pbmNsdWRlL3N5cy9tYWNodHlw
ZXMuaCIgMyA0CnR5cGVkZWYgc3RydWN0IF9sYWJlbF90IHsgbG9uZyB2YWxbMl07IH0gbGFiZWxf
dDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGxvY2tfdDsKCgp9CiMgMzQgIi9zcGFjZS9zbmIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL3N5
cy90eXBlcy5oIiAyIDMgNAojIDQ1ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMSAzIDQKIyA5ICIvdXNyL2luY2x1ZGUvc3lzL2lu
dF90eXBlcy5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWludF90eXBlcy5oCTEuNgk5Ny8wOC8y
MCBTTUkiCiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvaW50X3R5cGVzLmgiIDMgNApleHRlcm4gIkMi
IHsKIyA2MiAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0CnR5cGVkZWYgY2hhciBp
bnQ4X3Q7CgoKCgoKdHlwZWRlZiBzaG9ydCBpbnQxNl90Owp0eXBlZGVmIGludCBpbnQzMl90OwoK
CgoKdHlwZWRlZiBsb25nIGxvbmcgaW50NjRfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVp
bnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQg
aW50IHVpbnQzMl90OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7CiMg
OTQgIi91c3IvaW5jbHVkZS9zeXMvaW50X3R5cGVzLmgiIDMgNAp0eXBlZGVmIGludDY0X3QgaW50
bWF4X3Q7CnR5cGVkZWYgdWludDY0X3QgdWludG1heF90OwojIDExMCAiL3Vzci9pbmNsdWRlL3N5
cy9pbnRfdHlwZXMuaCIgMyA0CnR5cGVkZWYgaW50IGludHB0cl90Owp0eXBlZGVmIHVuc2lnbmVk
IGludCB1aW50cHRyX3Q7CgoKCgoKCgp0eXBlZGVmIGNoYXIgaW50X2xlYXN0OF90OwoKCgoKCnR5
cGVkZWYgc2hvcnQgaW50X2xlYXN0MTZfdDsKdHlwZWRlZiBpbnQgaW50X2xlYXN0MzJfdDsKCgoK
CnR5cGVkZWYgbG9uZyBsb25nIGludF9sZWFzdDY0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hh
ciB1aW50X2xlYXN0OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnRfbGVhc3QxNl90Owp0
eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X2xlYXN0MzJfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQg
bG9uZyBsb25nIHVpbnRfbGVhc3Q2NF90OwoKCgoKfQojIDQ2ICIvc3BhY2Uvc25iL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMiAzIDQKCgoKCgoKCmV4dGVybiAiQyIgewojIDYyICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
MyA0CnR5cGVkZWYgbG9uZyBsb25nIGxvbmdsb25nX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBs
b25nIHVfbG9uZ2xvbmdfdDsKIyA4NSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVm
IGxvbmcgdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHRfdXNjYWxhcl90OwoKCgoK
CnR5cGVkZWYgdW5zaWduZWQgY2hhciB1Y2hhcl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVz
aG9ydF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyB1bG9uZ190OwoKdHlwZWRlZiBjaGFyICpjYWRkcl90Owp0eXBlZGVmIGxvbmcgZGFkZHJfdDsK
dHlwZWRlZiBzaG9ydCBjbnRfdDsKIyAxMjEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlw
ZWRlZiB1bG9uZ190IHBmbl90Owp0eXBlZGVmIHVsb25nX3QgcGdjbnRfdDsKdHlwZWRlZiBsb25n
IHNwZ2NudF90OwoKdHlwZWRlZiB1Y2hhcl90IHVzZV90Owp0eXBlZGVmIHNob3J0IHN5c2lkX3Q7
CnR5cGVkZWYgc2hvcnQgaW5kZXhfdDsKdHlwZWRlZiB2b2lkICp0aW1lb3V0X2lkX3Q7CnR5cGVk
ZWYgdm9pZCAqYnVmY2FsbF9pZF90OwojIDE1OSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0
eXBlZGVmIHVsb25nX3QgaW5vX3Q7CnR5cGVkZWYgbG9uZyBibGtjbnRfdDsKdHlwZWRlZiB1bG9u
Z190IGZzYmxrY250X3Q7CnR5cGVkZWYgdWxvbmdfdCBmc2ZpbGNudF90OwojIDE3NyAiL3NwYWNl
L3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVfbG9uZ2xvbmdfdCBpbm82NF90Owp0eXBlZGVm
IGxvbmdsb25nX3QgYmxrY250NjRfdDsKdHlwZWRlZiB1X2xvbmdsb25nX3QgZnNibGtjbnQ2NF90
Owp0eXBlZGVmIHVfbG9uZ2xvbmdfdCBmc2ZpbGNudDY0X3Q7CgoKCgoKCnR5cGVkZWYgbG9uZyBi
bGtzaXplX3Q7CgoKCnR5cGVkZWYgZW51bSB7IF9CX0ZBTFNFLCBfQl9UUlVFIH0gYm9vbGVhbl90
OwojIDIwNCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjkvMy4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGludDY0X3QgcGFkNjRf
dDsKdHlwZWRlZiB1aW50NjRfdCB1cGFkNjRfdDsKIyAyMTcgIi9zcGFjZS9zbmIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL3N5cy90eXBlcy5o
IiAzIDQKdHlwZWRlZiBsb25nbG9uZ190IG9mZnNldF90Owp0eXBlZGVmIHVfbG9uZ2xvbmdfdCB1
X29mZnNldF90Owp0eXBlZGVmIHVfbG9uZ2xvbmdfdCBsZW5fdDsKdHlwZWRlZiBsb25nbG9uZ190
IGRpc2thZGRyX3Q7CiMgMjM4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdW5p
b24gewogICAgICAgIG9mZnNldF90IF9mOwogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAg
ICBpbnQzMl90IF91OwogICAgICAgICAgICAgICAgaW50MzJfdCBfbDsKICAgICAgICB9IF9wOwp9
IGxsb2ZmX3Q7CiMgMjU4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdW5pb24g
ewogICAgICAgIGRpc2thZGRyX3QgX2Y7CiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAg
IGludDMyX3QgX3U7CiAgICAgICAgICAgICAgICBpbnQzMl90IF9sOwogICAgICAgIH0gX3A7Cn0g
bGxkYWRkcl90OwoKCnR5cGVkZWYgdWludF90IGtfZmx0c2V0X3Q7CiMgMjgxICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgbG9uZyBpZF90OwoKCgoKCgp0eXBlZGVmIHVpbnRfdCB1
c2Vjb25kc190OwoKCgp0eXBlZGVmIGxvbmcgc3VzZWNvbmRzX3Q7CiMgMzAyICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdWxvbmdfdCBtYWpvcl90Owp0eXBlZGVmIHVsb25nX3Qg
bWlub3JfdDsKCgoKCgp0eXBlZGVmIHNob3J0IHByaV90OwojIDMyMiAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMgNAp0eXBlZGVmIHVzaG9ydF90IG9fbW9kZV90Owp0eXBlZGVmIHNob3J0IG9fZGV2
X3Q7CnR5cGVkZWYgdXNob3J0X3Qgb191aWRfdDsKdHlwZWRlZiBvX3VpZF90IG9fZ2lkX3Q7CnR5
cGVkZWYgc2hvcnQgb19ubGlua190Owp0eXBlZGVmIHNob3J0IG9fcGlkX3Q7CnR5cGVkZWYgdXNo
b3J0X3Qgb19pbm9fdDsKCgoKCgp0eXBlZGVmIGludCBrZXlfdDsKCgoKdHlwZWRlZiB1bG9uZ190
IG1vZGVfdDsKCgoKCgoKCnR5cGVkZWYgbG9uZyB1aWRfdDsKCgoKdHlwZWRlZiB1aWRfdCBnaWRf
dDsKCnR5cGVkZWYgaWRfdCB0YXNraWRfdDsKdHlwZWRlZiBpZF90IHByb2ppZF90OwoKCgoKCgp0
eXBlZGVmIHVpbnRfdCBwdGhyZWFkX3Q7CnR5cGVkZWYgdWludF90IHB0aHJlYWRfa2V5X3Q7CgoK
CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9tdXRleCB7CiAgICAgICAgc3RydWN0IHsKICAg
ICAgICAgICAgICAgIHVpbnQxNl90IF9fcHRocmVhZF9tdXRleF9mbGFnMTsKICAgICAgICAgICAg
ICAgIHVpbnQ4X3QgX19wdGhyZWFkX211dGV4X2ZsYWcyOwogICAgICAgICAgICAgICAgdWludDhf
dCBfX3B0aHJlYWRfbXV0ZXhfY2VpbGluZzsKICAgICAgICAgICAgICAgIHVpbnQxNl90IF9fcHRo
cmVhZF9tdXRleF90eXBlOwogICAgICAgICAgICAgICAgdWludDE2X3QgX19wdGhyZWFkX211dGV4
X21hZ2ljOwogICAgICAgIH0gX19wdGhyZWFkX211dGV4X2ZsYWdzOwogICAgICAgIHVuaW9uIHsK
ICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qg
X19wdGhyZWFkX211dGV4X3BhZFs4XTsKICAgICAgICAgICAgICAgIH0gX19wdGhyZWFkX211dGV4
X2xvY2s2NDsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IF9fcHRocmVhZF9vd25lcnBpZDsKICAgICAgICAgICAgICAgICAgICAgICAgdWlu
dDMyX3QgX19wdGhyZWFkX2xvY2t3b3JkOwogICAgICAgICAgICAgICAgfSBfX3B0aHJlYWRfbXV0
ZXhfbG9jazMyOwogICAgICAgICAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX211dGV4X293bmVy
NjQ7CiAgICAgICAgfSBfX3B0aHJlYWRfbXV0ZXhfbG9jazsKICAgICAgICB1cGFkNjRfdCBfX3B0
aHJlYWRfbXV0ZXhfZGF0YTsKfSBwdGhyZWFkX211dGV4X3Q7Cgp0eXBlZGVmIHN0cnVjdCBfcHRo
cmVhZF9jb25kIHsKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdWludDhfdCBfX3B0
aHJlYWRfY29uZF9mbGFnWzRdOwogICAgICAgICAgICAgICAgdWludDE2X3QgX19wdGhyZWFkX2Nv
bmRfdHlwZTsKICAgICAgICAgICAgICAgIHVpbnQxNl90IF9fcHRocmVhZF9jb25kX21hZ2ljOwog
ICAgICAgIH0gX19wdGhyZWFkX2NvbmRfZmxhZ3M7CiAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFk
X2NvbmRfZGF0YTsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFk
X3J3bG9jayB7CiAgICAgICAgaW50MzJfdCBfX3B0aHJlYWRfcndsb2NrX3JlYWRlcnM7CiAgICAg
ICAgdWludDE2X3QgX19wdGhyZWFkX3J3bG9ja190eXBlOwogICAgICAgIHVpbnQxNl90IF9fcHRo
cmVhZF9yd2xvY2tfbWFnaWM7CiAgICAgICAgcHRocmVhZF9tdXRleF90IF9fcHRocmVhZF9yd2xv
Y2tfbXV0ZXg7CiAgICAgICAgcHRocmVhZF9jb25kX3QgX19wdGhyZWFkX3J3bG9ja19yZWFkZXJj
djsKICAgICAgICBwdGhyZWFkX2NvbmRfdCBfX3B0aHJlYWRfcndsb2NrX3dyaXRlcmN2Owp9IHB0
aHJlYWRfcndsb2NrX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9hdHRyIHsKICAgICAg
ICB2b2lkICpfX3B0aHJlYWRfYXR0cnA7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCgp0eXBlZGVmIHN0
cnVjdCBfcHRocmVhZF9tdXRleGF0dHIgewogICAgICAgIHZvaWQgKl9fcHRocmVhZF9tdXRleGF0
dHJwOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9j
b25kYXR0ciB7CiAgICAgICAgdm9pZCAqX19wdGhyZWFkX2NvbmRhdHRycDsKfSBwdGhyZWFkX2Nv
bmRhdHRyX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfb25jZSB7CiAgICAgICAgdXBhZDY0X3QgX19w
dGhyZWFkX29uY2VfcGFkWzRdOwp9IHB0aHJlYWRfb25jZV90OwoKCgoKCnR5cGVkZWYgc3RydWN0
IF9wdGhyZWFkX3J3bG9ja2F0dHIgewogICAgICAgIHZvaWQgKl9fcHRocmVhZF9yd2xvY2thdHRy
cDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCnR5cGVkZWYgdWxvbmdfdCBkZXZfdDsKCgoKCgp0
eXBlZGVmIHVsb25nX3QgbmxpbmtfdDsKdHlwZWRlZiBsb25nIHBpZF90OwojIDQ4NSAiL3NwYWNl
L3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcgdGltZV90OwoKCgoKdHlwZWRlZiBsb25n
IGNsb2NrX3Q7CgoKCgp0eXBlZGVmIGludCBjbG9ja2lkX3Q7CgoKCgp0eXBlZGVmIGludCB0aW1l
cl90OwoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdW5jaGFyOwp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIHVsb25nOwojIDU2MSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVfc2hvcnQ7CnR5cGVk
ZWYgdW5zaWduZWQgaW50IHVfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdV9sb25nOwp0eXBl
ZGVmIHN0cnVjdCBfcXVhZCB7IGludCB2YWxbMl07IH0gcXVhZF90Owp0eXBlZGVmIHF1YWRfdCBx
dWFkOwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMyA0CiMgMTUgIi91
c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc2VsZWN0LmgJ
MS4xNwkwMS8wOC8xNSBTTUkiIAoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMSAz
IDQKIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMp
dGltZS5oCTIuNzAJMDIvMDEvMjggU01JIiAKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgi
IDMgNApleHRlcm4gIkMiIHsKIyA0OSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNApzdHJ1
Y3QgdGltZXZhbCB7CiAgICAgICAgdGltZV90IHR2X3NlYzsKICAgICAgICBzdXNlY29uZHNfdCB0
dl91c2VjOwp9OwojIDgyICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CnN0cnVjdCB0aW1l
em9uZSB7CiAgICAgICAgaW50IHR6X21pbnV0ZXN3ZXN0OwogICAgICAgIGludCB0el9kc3R0aW1l
Owp9OwoKCgoKCn0KIyAxMDAgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKIyAxICIvc3Bh
Y2Uvc25iL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQKIyAxMDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAy
IDMgNAoKCgpleHRlcm4gIkMiIHsKIyAxNTMgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQK
c3RydWN0IGl0aW1lcnZhbCB7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgaXRfaW50ZXJ2YWw7CiAg
ICAgICAgc3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7Cn07CiMgMjAxICIvdXNyL2luY2x1ZGUvc3lz
L3RpbWUuaCIgMyA0CnR5cGVkZWYgbG9uZ2xvbmdfdCBocnRpbWVfdDsKIyAzMTkgIi91c3IvaW5j
bHVkZS9zeXMvdGltZS5oIiAzIDQKaW50IGFkanRpbWUoc3RydWN0IHRpbWV2YWwgKiwgc3RydWN0
IHRpbWV2YWwgKik7CiMgMzI5ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CmludCBmdXRp
bWVzYXQoaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB0aW1ldmFsICopOwojIDM0MCAi
L3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAppbnQgZ2V0aXRpbWVyKGludCwgc3RydWN0IGl0
aW1lcnZhbCAqKTsKaW50IHV0aW1lcyhjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB0aW1ldmFs
ICopOwoKaW50IHNldGl0aW1lcihpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKiwgc3RydWN0
IGl0aW1lcnZhbCAqKTsKIyAzNzcgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKaW50IHNl
dHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqLCB2b2lkICopOwoKaHJ0aW1lX3QgZ2V0aHJ0aW1l
KHZvaWQpOwpocnRpbWVfdCBnZXRocnZ0aW1lKHZvaWQpOwojIDM5NyAiL3Vzci9pbmNsdWRlL3N5
cy90aW1lLmgiIDMgNAppbnQgZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICosIHZvaWQgKik7
CiMgNDE4ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CiNwcmFnbWEgaWRlbnQg
IkAoIyl0aW1lLmgJMS4zOQk5OS8wOC8xMCBTTUkiIAoKCgojIDEgIi91c3IvaW5jbHVkZS9pc28v
dGltZV9pc28uaCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRlL2lzby90aW1lX2lzby5oIiAzIDQK
I3ByYWdtYSBpZGVudCAiQCgjKXRpbWVfaXNvLmgJMS4xCTk5LzA4LzA5IFNNSSIgCgoKCgpleHRl
cm4gIkMiIHsKIyA2OSAiL3Vzci9pbmNsdWRlL2lzby90aW1lX2lzby5oIiAzIDQKc3RydWN0IHRt
IHsKICAgICAgICBpbnQgdG1fc2VjOwogICAgICAgIGludCB0bV9taW47CiAgICAgICAgaW50IHRt
X2hvdXI7CiAgICAgICAgaW50IHRtX21kYXk7CiAgICAgICAgaW50IHRtX21vbjsKICAgICAgICBp
bnQgdG1feWVhcjsKICAgICAgICBpbnQgdG1fd2RheTsKICAgICAgICBpbnQgdG1feWRheTsKICAg
ICAgICBpbnQgdG1faXNkc3Q7Cn07CgoKCgpleHRlcm4gY2hhciAqYXNjdGltZShjb25zdCBzdHJ1
Y3QgdG0gKik7CmV4dGVybiBjbG9ja190IGNsb2NrKHZvaWQpOwpleHRlcm4gY2hhciAqY3RpbWUo
Y29uc3QgdGltZV90ICopOwpleHRlcm4gZG91YmxlIGRpZmZ0aW1lKHRpbWVfdCwgdGltZV90KTsK
ZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lKGNvbnN0IHRpbWVfdCAqKTsKZXh0ZXJuIHN0cnVjdCB0
bSAqbG9jYWx0aW1lKGNvbnN0IHRpbWVfdCAqKTsKZXh0ZXJuIHRpbWVfdCBta3RpbWUoc3RydWN0
IHRtICopOwpleHRlcm4gdGltZV90IHRpbWUodGltZV90ICopOwpleHRlcm4gc2l6ZV90IHN0cmZ0
aW1lKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB0bSAqKTsKIyAx
MTMgIi91c3IvaW5jbHVkZS9pc28vdGltZV9pc28uaCIgMyA0Cn0KIyAyMSAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMiAzIDQKIyA0MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CmV4dGVybiAiQyIg
ewojIDYwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1l
X3IoY29uc3QgdGltZV90ICosIHN0cnVjdCB0bSAqKTsKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0
aW1lX3IoY29uc3QgdGltZV90ICosIHN0cnVjdCB0bSAqKTsKCgoKCgpleHRlcm4gY2hhciAqc3Ry
cHRpbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHN0cnVjdCB0bSAqKTsKIyA4MyAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIg
MSAzIDQKIyAxOSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIgMyA0CiNwcmFnbWEgaWRl
bnQgIkAoIyl0aW1lX2ltcGwuaAkxLjcJMDEvMDkvMDYgU01JIgoKCgoKZXh0ZXJuICJDIiB7CiMg
MzggIi91c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCB0aW1l
c3BlYyB7CiAgICAgICAgdGltZV90IHR2X3NlYzsKICAgICAgICBsb25nIHR2X25zZWM7Cn0gdGlt
ZXNwZWNfdDsKIyA2MiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIgMyA0CnR5cGVkZWYg
c3RydWN0IHRpbWVzcGVjIHRpbWVzdHJ1Y190OwojIDc3ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVf
aW1wbC5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgaXRpbWVyc3BlYyB7CiAgICAgICAgc3RydWN0IHRp
bWVzcGVjIGl0X2ludGVydmFsOwogICAgICAgIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKfSBp
dGltZXJzcGVjX3Q7CiMgMTE2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQKfQoj
IDg0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMgNAojIDk4ICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAzIDQKdW5pb24gc2lndmFsIHsKICAgICAgICBpbnQgc2l2YWxfaW50OwogICAgICAgIHZvaWQg
KnNpdmFsX3B0cjsKfTsKCgoKCnN0cnVjdCBzaWdldmVudCB7CiAgICAgICAgaW50IHNpZ2V2X25v
dGlmeTsKICAgICAgICBpbnQgc2lnZXZfc2lnbm87CiAgICAgICAgdW5pb24gc2lndmFsIHNpZ2V2
X3ZhbHVlOwogICAgICAgIHZvaWQgKCpzaWdldl9ub3RpZnlfZnVuY3Rpb24pKHVuaW9uIHNpZ3Zh
bCk7CiAgICAgICAgcHRocmVhZF9hdHRyX3QgKnNpZ2V2X25vdGlmeV9hdHRyaWJ1dGVzOwogICAg
ICAgIGludCBfX3NpZ2V2X3BhZDI7Cn07CgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMoY2xvY2tp
ZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZShjbG9ja2lk
X3QsIHN0cnVjdCB0aW1lc3BlYyAqKTsKZXh0ZXJuIGludCBjbG9ja19zZXR0aW1lKGNsb2NraWRf
dCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICopOwpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZShjbG9j
a2lkX3QsIHN0cnVjdCBzaWdldmVudCAqLCB0aW1lcl90ICopOwpleHRlcm4gaW50IHRpbWVyX2Rl
bGV0ZSh0aW1lcl90KTsKZXh0ZXJuIGludCB0aW1lcl9nZXRvdmVycnVuKHRpbWVyX3QpOwpleHRl
cm4gaW50IHRpbWVyX2dldHRpbWUodGltZXJfdCwgc3RydWN0IGl0aW1lcnNwZWMgKik7CmV4dGVy
biBpbnQgdGltZXJfc2V0dGltZSh0aW1lcl90LCBpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVj
ICosCiAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqKTsKZXh0ZXJuIGludCBuYW5v
c2xlZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKTsKCgoKCmV4
dGVybiB2b2lkIHR6c2V0KHZvaWQpOwoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgpleHRlcm4g
bG9uZyBfc3lzY29uZihpbnQpOwoKCgoKCgpleHRlcm4gbG9uZyB0aW1lem9uZTsKZXh0ZXJuIGlu
dCBkYXlsaWdodDsKIyAxNTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRlcm4gc3RydWN0
IHRtICpnZXRkYXRlKGNvbnN0IGNoYXIgKik7CgoKCgpleHRlcm4gaW50ICpfZ2V0ZGF0ZV9lcnJf
YWRkcih2b2lkKTsKIyAyNTAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRlcm4gY2hhciAq
YXNjdGltZV9yKGNvbnN0IHN0cnVjdCB0bSAqLCBjaGFyICopOwpleHRlcm4gY2hhciAqY3RpbWVf
cihjb25zdCB0aW1lX3QgKiwgY2hhciAqKTsKI3ByYWdtYSByZWRlZmluZV9leHRuYW1lIGN0aW1l
X3IgX19wb3NpeF9jdGltZV9yCiNwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSBhc2N0aW1lX3IgX19w
b3NpeF9hc2N0aW1lX3IKIyAzMTggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAp9CiMgNDE5ICIv
dXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzIDQKIyA0MzEgIi91c3IvaW5jbHVkZS9zeXMvdGlt
ZS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMgNAojIDQzMiAiL3Vz
ci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0CgoKCgoKfQojIDIxICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKIyA0OCAiL3Vzci9pbmNsdWRlL3N5cy9z
ZWxlY3QuaCIgMyA0CnR5cGVkZWYgbG9uZyBmZF9tYXNrOwoKdHlwZWRlZiBsb25nIGZkc19tYXNr
OwojIDc2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgZmRf
c2V0IHsKCgoKICAgICAgICBsb25nIGZkc19iaXRzWygoKDEwMjQpKygoKHNpemVvZiAoZmRzX21h
c2spICogOCkpLTEpKS8oKHNpemVvZiAoZmRzX21hc2spICogOCkpKV07Cn0gZmRfc2V0OwojIDEw
MCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CmV4dGVybiBpbnQgc2VsZWN0KGludCwg
ZmRfc2V0ICosIGZkX3NldCAqLCBmZF9zZXQgKiwgc3RydWN0IHRpbWV2YWwgKik7CgoKCgoKCn0K
IyA1NzQgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi45LzMuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAojIDU5MCAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMgNAp9CiMgMTMgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CgojIDEgIi91
c3IvaW5jbHVkZS9zY2hlZC5oIiAxIDMgNAojIDExICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMyA0
CiNwcmFnbWEgaWRlbnQgIkAoIylzY2hlZC5oCTEuOQk5OC8wMS8xNiBTTUkiCgoKCgoKZXh0ZXJu
ICJDIiB7CgoKc3RydWN0IHNjaGVkX3BhcmFtIHsKICAgICAgICBpbnQgc2NoZWRfcHJpb3JpdHk7
CiAgICAgICAgaW50IHNjaGVkX25pY2VsaW07CiAgICAgICAgaW50IHNjaGVkX25pY2U7CiAgICAg
ICAgaW50IHNjaGVkX3BhZFs2XTsKCgoKfTsKIyA0NCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDMg
NAppbnQgc2NoZWRfZ2V0cGFyYW0ocGlkX3QgcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFt
KTsKaW50IHNjaGVkX3NldHBhcmFtKHBpZF90IHBpZCwgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFt
ICpwYXJhbSk7CmludCBzY2hlZF9nZXRzY2hlZHVsZXIocGlkX3QgcGlkKTsKaW50IHNjaGVkX3Nl
dHNjaGVkdWxlcihwaWRfdCBwaWQsIGludCBwb2xpY3ksCiAgICAgICAgICAgICAgICBjb25zdCBz
dHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsKaW50IHNjaGVkX3lpZWxkKHZvaWQpOwppbnQgc2No
ZWRfZ2V0X3ByaW9yaXR5X21heChpbnQgcG9saWN5KTsKaW50IHNjaGVkX2dldF9wcmlvcml0eV9t
aW4oaW50IHBvbGljeSk7CmludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwocGlkX3QgcGlkLCBzdHJ1
Y3QgdGltZXNwZWMgKmludGVydmFsKTsKIyA2NSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDMgNAp9
CiMgMTUgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewojIDEx
MSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CnR5cGVkZWYgc3RydWN0IF9jbGVhbnVwIHsK
ICAgICAgICB1aW50cHRyX3QgcHRocmVhZF9jbGVhbnVwX3BhZFs0XTsKfSBfY2xlYW51cF90OwoK
Cgp2b2lkIF9fcHRocmVhZF9jbGVhbnVwX3B1c2godm9pZCAoKnJvdXRpbmUpKHZvaWQgKiksIHZv
aWQgKmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWRkcl90
IGZwLCBfY2xlYW51cF90ICppbmZvKTsKdm9pZCBfX3B0aHJlYWRfY2xlYW51cF9wb3AoaW50IGV4
LCBfY2xlYW51cF90ICppbmZvKTsKY2FkZHJfdCBfZ2V0ZnAodm9pZCk7CiMgMTMxICIvdXNyL2lu
Y2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZiB2b2lkICgqX1ZvaWRm
cCkodm9pZCopOwoKCn0KIyAxNTUgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNApleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9pbml0KHB0aHJlYWRfYXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9kZXN0cm95KHB0aHJlYWRfYXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0
cl9zZXRzdGFja3NpemUocHRocmVhZF9hdHRyX3QgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBwdGhy
ZWFkX2F0dHJfZ2V0c3RhY2tzaXplKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCAqKTsK
ZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyKHB0aHJlYWRfYXR0cl90ICosIHZv
aWQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkcihjb25zdCBwdGhyZWFk
X2F0dHJfdCAqLCB2b2lkICoqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3Rh
dGUocHRocmVhZF9hdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0
YWNoc3RhdGUoY29uc3QgcHRocmVhZF9hdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9zZXRzY29wZShwdGhyZWFkX2F0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9nZXRzY29wZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZChwdGhyZWFkX2F0dHJfdCAqLCBpbnQpOwpl
eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQoY29uc3QgcHRocmVhZF9hdHRy
X3QgKiwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeShwdGhy
ZWFkX2F0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGlj
eShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldHNjaGVkcGFyYW0ocHRocmVhZF9hdHRyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsKZXh0ZXJuIGludCBw
dGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICopOwpl
eHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlKHB0aHJlYWRfdCAqLCBjb25zdCBwdGhyZWFkX2F0dHJf
dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiAoKikodm9pZCAqKSwg
dm9pZCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX29uY2UocHRocmVhZF9vbmNlX3QgKiwgdm9pZCAo
Kikodm9pZCkpOwpleHRlcm4gaW50IHB0aHJlYWRfam9pbihwdGhyZWFkX3QsIHZvaWQgKiopOwpl
eHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoKHB0aHJlYWRfdCk7CmV4dGVybiB2b2lkIHB0aHJlYWRf
ZXhpdCh2b2lkICopOwpleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsKHB0aHJlYWRfdCk7CmV4dGVy
biBpbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfdCwgaW50LCBjb25zdCBzdHJ1Y3Qg
c2NoZWRfcGFyYW0gKik7CmV4dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFtKHB0aHJlYWRf
dCwgaW50ICosIHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNh
bmNlbHN0YXRlKGludCwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlwZShp
bnQsIGludCAqKTsKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsKHZvaWQpOwpleHRlcm4g
aW50IHB0aHJlYWRfZXF1YWwocHRocmVhZF90LCBwdGhyZWFkX3QpOwpleHRlcm4gaW50IHB0aHJl
YWRfa2V5X2NyZWF0ZShwdGhyZWFkX2tleV90ICosIHZvaWQgKCopKHZvaWQgKikpOwpleHRlcm4g
aW50IHB0aHJlYWRfa2V5X2RlbGV0ZShwdGhyZWFkX2tleV90KTsKZXh0ZXJuIGludCBwdGhyZWFk
X3NldHNwZWNpZmljKHB0aHJlYWRfa2V5X3QsIGNvbnN0IHZvaWQgKik7CmV4dGVybiB2b2lkICpw
dGhyZWFkX2dldHNwZWNpZmljKHB0aHJlYWRfa2V5X3QpOwpleHRlcm4gcHRocmVhZF90IHB0aHJl
YWRfc2VsZih2b2lkKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5pdChwdGhy
ZWFkX211dGV4YXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3ko
cHRocmVhZF9tdXRleGF0dHJfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXRw
c2hhcmVkKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX211
dGV4YXR0cl9nZXRwc2hhcmVkKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICopOwpl
eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHByb3RvY29sKHB0aHJlYWRfbXV0ZXhhdHRy
X3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwcm90b2NvbChjb25z
dCBwdGhyZWFkX211dGV4YXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4
YXR0cl9zZXRwcmlvY2VpbGluZyhwdGhyZWFkX211dGV4YXR0cl90ICosIGludCk7CmV4dGVybiBp
bnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHJpb2NlaWxpbmcoY29uc3QgcHRocmVhZF9tdXRleGF0
dHJfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cm9idXN0X25w
KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0
cl9nZXRyb2J1c3RfbnAoY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQgKik7CmV4dGVy
biBpbnQgcHRocmVhZF9tdXRleF9pbml0KHB0aHJlYWRfbXV0ZXhfdCAqLCBjb25zdCBwdGhyZWFk
X211dGV4YXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfY29uc2lzdGVudF9ucChw
dGhyZWFkX211dGV4X3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95KHB0aHJl
YWRfbXV0ZXhfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2socHRocmVhZF9tdXRl
eF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKHB0aHJlYWRfbXV0ZXhfdCAq
KTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2socHRocmVhZF9tdXRleF90ICopOwpl
eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfc2V0cHJpb2NlaWxpbmcocHRocmVhZF9tdXRleF90ICos
IGludCwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZ2V0cHJpb2NlaWxpbmcoY29u
c3QgcHRocmVhZF9tdXRleF90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRy
X2luaXQocHRocmVhZF9jb25kYXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJf
ZGVzdHJveShwdGhyZWFkX2NvbmRhdHRyX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0
cl9zZXRwc2hhcmVkKHB0aHJlYWRfY29uZGF0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJl
YWRfY29uZGF0dHJfZ2V0cHNoYXJlZChjb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKiwgaW50ICop
OwpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9pbml0KHB0aHJlYWRfY29uZF90ICosIGNvbnN0IHB0
aHJlYWRfY29uZGF0dHJfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfZGVzdHJveShwdGhy
ZWFkX2NvbmRfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KHB0aHJlYWRf
Y29uZF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWduYWwocHRocmVhZF9jb25kX3Qg
Kik7CmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQocHRocmVhZF9jb25kX3QgKiwgcHRocmVh
ZF9tdXRleF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQocHRocmVhZF9j
b25kX3QgKiwgcHRocmVhZF9tdXRleF90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgcHRocmVhZF9j
b25kX3JlbHRpbWVkd2FpdF9ucChwdGhyZWFkX2NvbmRfdCAqLCBwdGhyZWFkX211dGV4X3QgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1l
c3BlYyAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplKGNvbnN0IHB0aHJl
YWRfYXR0cl90ICosIHNpemVfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRz
aXplKHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCk7CmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25j
dXJyZW5jeSh2b2lkKTsKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5KGludCBuZXd2
YWwpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUocHRocmVhZF9tdXRleGF0
dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUoY29uc3Qg
cHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tf
aW5pdChwdGhyZWFkX3J3bG9ja190ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tf
ZGVzdHJveShwdGhyZWFkX3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3Jk
bG9jayhwdGhyZWFkX3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXJk
bG9jayhwdGhyZWFkX3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3dybG9j
ayhwdGhyZWFkX3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXdybG9j
ayhwdGhyZWFkX3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3VubG9jayhw
dGhyZWFkX3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0KHB0
aHJlYWRfcndsb2NrYXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0
cm95KHB0aHJlYWRfcndsb2NrYXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0
cl9nZXRwc2hhcmVkKGNvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICosIGludCAqKTsKZXh0ZXJu
IGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0cHNoYXJlZChwdGhyZWFkX3J3bG9ja2F0dHJfdCAq
LCBpbnQpOwojIDMzOSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0Cn0KIyAzOCAiL3NwYWNl
L3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3NwYXJjLXN1bi1zb2xhcmlzMi45L2JpdHMv
Z3Roci1kZWZhdWx0LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMSAzIDQKIyAx
NiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXVuaXN0ZC5o
CTEuNjAJMDEvMDcvMjkgU01JIiAKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy91bmlzdGQuaCIg
MSAzIDQKIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy91bmlzdGQuaCIgMyA0CiNwcmFnbWEgaWRlbnQg
IkAoIyl1bmlzdGQuaAkxLjM5CTAxLzA3LzI5IFNNSSIgCgoKCgpleHRlcm4gIkMiIHsKIyAyNzMg
Ii91c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDMgNAp9CiMgMjIgIi91c3IvaW5jbHVkZS91bmlz
dGQuaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKIyAxNzEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg
MyA0CmV4dGVybiBpbnQgYWNjZXNzKGNvbnN0IGNoYXIgKiwgaW50KTsKCgpleHRlcm4gaW50IGFj
Y3QoY29uc3QgY2hhciAqKTsKCmV4dGVybiB1bnNpZ25lZCBhbGFybSh1bnNpZ25lZCk7CgoKZXh0
ZXJuIGludCBicmsodm9pZCAqKTsKCmV4dGVybiBpbnQgY2hkaXIoY29uc3QgY2hhciAqKTsKZXh0
ZXJuIGludCBjaG93bihjb25zdCBjaGFyICosIHVpZF90LCBnaWRfdCk7CgoKZXh0ZXJuIGludCBj
aHJvb3QoY29uc3QgY2hhciAqKTsKCmV4dGVybiBpbnQgY2xvc2UoaW50KTsKCgpleHRlcm4gc2l6
ZV90IGNvbmZzdHIoaW50LCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBjaGFyICpjcnlwdChjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKCmV4dGVybiBjaGFyICpjdGVybWlkKGNoYXIgKik7
CgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWRfcihjaGFyICopOwoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQo
Y2hhciAqKTsKZXh0ZXJuIGludCBkdXAoaW50KTsKZXh0ZXJuIGludCBkdXAyKGludCwgaW50KTsK
CgpleHRlcm4gdm9pZCBlbmNyeXB0KGNoYXIgKiwgaW50KTsKCmV4dGVybiBpbnQgZXhlY2woY29u
c3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQgZXhlY2xlKGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwpleHRlcm4gaW50IGV4ZWNscChjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludCBleGVjdihjb25zdCBjaGFyICosIGNoYXIg
KmNvbnN0ICopOwpleHRlcm4gaW50IGV4ZWN2ZShjb25zdCBjaGFyICosIGNoYXIgKmNvbnN0ICos
IGNoYXIgKmNvbnN0ICopOwpleHRlcm4gaW50IGV4ZWN2cChjb25zdCBjaGFyICosIGNoYXIgKmNv
bnN0ICopOwpleHRlcm4gdm9pZCBfZXhpdChpbnQpOwoKCgoKCgoKZXh0ZXJuIGludCBmYXR0YWNo
KGludCwgY29uc3QgY2hhciAqKTsKCgoKZXh0ZXJuIGludCBmY2hkaXIoaW50KTsKZXh0ZXJuIGlu
dCBmY2hvd24oaW50LCB1aWRfdCwgZ2lkX3QpOwoKCmV4dGVybiBpbnQgZmNob3duYXQoaW50LCBj
b25zdCBjaGFyICosIHVpZF90LCBnaWRfdCwgaW50KTsKCgoKCmV4dGVybiBpbnQgZmNocm9vdChp
bnQpOwoKCgpleHRlcm4gaW50IGZkYXRhc3luYyhpbnQpOwojIDI0NyAiL3Vzci9pbmNsdWRlL3Vu
aXN0ZC5oIiAzIDQKZXh0ZXJuIGludCBmZGV0YWNoKGNvbnN0IGNoYXIgKik7CgpleHRlcm4gcGlk
X3QgZm9yayh2b2lkKTsKCgpleHRlcm4gcGlkX3QgZm9yazEodm9pZCk7CgpleHRlcm4gbG9uZyBm
cGF0aGNvbmYoaW50LCBpbnQpOwoKCmV4dGVybiBpbnQgZnN5bmMoaW50KTsKCgoKCmV4dGVybiBp
bnQgZnRydW5jYXRlKGludCwgb2ZmX3QpOwoKZXh0ZXJuIGNoYXIgKmdldGN3ZChjaGFyICosIHNp
emVfdCk7CgoKZXh0ZXJuIGludCBnZXRkdGFibGVzaXplKHZvaWQpOwoKZXh0ZXJuIGdpZF90IGdl
dGVnaWQodm9pZCk7CmV4dGVybiB1aWRfdCBnZXRldWlkKHZvaWQpOwpleHRlcm4gZ2lkX3QgZ2V0
Z2lkKHZvaWQpOwpleHRlcm4gaW50IGdldGdyb3VwcyhpbnQsIGdpZF90ICopOwoKCmV4dGVybiBs
b25nIGdldGhvc3RpZCh2b2lkKTsKCgpleHRlcm4gaW50IGdldGhvc3RuYW1lKGNoYXIgKiwgc2l6
ZV90KTsKCgoKCmV4dGVybiBjaGFyICpnZXRsb2dpbih2b2lkKTsKCgpleHRlcm4gaW50IGdldG9w
dChpbnQsIGNoYXIgKmNvbnN0ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpvcHRhcmc7
CmV4dGVybiBpbnQgb3B0ZXJyLCBvcHRpbmQsIG9wdG9wdDsKZXh0ZXJuIGNoYXIgKmdldHBhc3Mo
Y29uc3QgY2hhciAqKTsKCgoKZXh0ZXJuIGludCBnZXRwYWdlc2l6ZSh2b2lkKTsKZXh0ZXJuIHBp
ZF90IGdldHBnaWQocGlkX3QpOwoKZXh0ZXJuIHBpZF90IGdldHBpZCh2b2lkKTsKZXh0ZXJuIHBp
ZF90IGdldHBwaWQodm9pZCk7CmV4dGVybiBwaWRfdCBnZXRwZ3JwKHZvaWQpOwoKCmNoYXIgKmdl
dHR4dChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKCmV4dGVybiBwaWRfdCBnZXRzaWQo
cGlkX3QpOwoKZXh0ZXJuIHVpZF90IGdldHVpZCh2b2lkKTsKCgpleHRlcm4gY2hhciAqZ2V0d2Qo
Y2hhciAqKTsKIyAzMTkgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBpbnQgaW9j
dGwoaW50LCBpbnQsIC4uLik7CgoKCmV4dGVybiBpbnQgaXNhZXhlYyhjb25zdCBjaGFyICosIGNo
YXIgKmNvbnN0ICosIGNoYXIgKmNvbnN0ICopOwpleHRlcm4gaW50IGlzc2V0dWdpZCh2b2lkKTsK
CmV4dGVybiBpbnQgaXNhdHR5KGludCk7CmV4dGVybiBpbnQgbGluayhjb25zdCBjaGFyICosIGNv
bnN0IGNoYXIgKik7CgoKZXh0ZXJuIGludCBsY2hvd24oY29uc3QgY2hhciAqLCB1aWRfdCwgZ2lk
X3QpOwoKCgoKZXh0ZXJuIGludCBsb2NrZihpbnQsIGludCwgb2ZmX3QpOwoKCgpleHRlcm4gaW50
IHJlYWRsaW5rKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpOwoKZXh0ZXJuIG9mZl90IGxz
ZWVrKGludCwgb2ZmX3QsIGludCk7CgoKZXh0ZXJuIGludCBuaWNlKGludCk7CgpleHRlcm4gbG9u
ZyBwYXRoY29uZihjb25zdCBjaGFyICosIGludCk7CmV4dGVybiBpbnQgcGF1c2Uodm9pZCk7CmV4
dGVybiBpbnQgcGlwZShpbnQgKik7CgoKZXh0ZXJuIG9mZnNldF90IGxsc2VlayhpbnQsIG9mZnNl
dF90LCBpbnQpOwoKCgoKZXh0ZXJuIG9mZl90IHRlbGwoaW50KTsKCgoKZXh0ZXJuIGludCBtaW5j
b3JlKGNhZGRyX3QsIHNpemVfdCwgY2hhciAqKTsKCgoKCmV4dGVybiBzc2l6ZV90IHByZWFkKGlu
dCwgdm9pZCAqLCBzaXplX3QsIG9mZl90KTsKCgoKZXh0ZXJuIHZvaWQgcHJvZmlsKHVuc2lnbmVk
IHNob3J0ICosIHNpemVfdCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50KTsKCgoKZXh0ZXJu
IGludCBwdGhyZWFkX2F0Zm9yayh2b2lkICgqKSAodm9pZCksIHZvaWQgKCopICh2b2lkKSwgdm9p
ZCAoKikgKHZvaWQpKTsKCgoKZXh0ZXJuIGxvbmcgcHRyYWNlKGludCwgcGlkX3QsIGxvbmcsIGxv
bmcpOwoKCgoKZXh0ZXJuIHNzaXplX3QgcHdyaXRlKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3Qs
IG9mZl90KTsKCmV4dGVybiBzc2l6ZV90IHJlYWQoaW50LCB2b2lkICosIHNpemVfdCk7CgoKZXh0
ZXJuIGludCByZW5hbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwoKCmV4dGVybiBpbnQg
cmVuYW1lYXQoaW50LCBjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKTsKCgoKCmV4dGVy
biBpbnQgcmVzb2x2ZXBhdGgoY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCk7CgpleHRlcm4g
aW50IHJtZGlyKGNvbnN0IGNoYXIgKik7CgoKZXh0ZXJuIHZvaWQgKnNicmsoaW50cHRyX3QpOwoK
ZXh0ZXJuIGludCBzZXRnaWQoZ2lkX3QpOwoKCmV4dGVybiBpbnQgc2V0ZWdpZChnaWRfdCk7CgoK
CmV4dGVybiBpbnQgc2V0Z3JvdXBzKGludCwgY29uc3QgZ2lkX3QgKik7CgpleHRlcm4gaW50IHNl
dHBnaWQocGlkX3QsIHBpZF90KTsKCgpleHRlcm4gcGlkX3Qgc2V0cGdycCh2b2lkKTsKZXh0ZXJu
IGludCBzZXRyZWdpZChnaWRfdCwgZ2lkX3QpOwpleHRlcm4gaW50IHNldHJldWlkKHVpZF90LCB1
aWRfdCk7CgpleHRlcm4gcGlkX3Qgc2V0c2lkKHZvaWQpOwpleHRlcm4gaW50IHNldHVpZCh1aWRf
dCk7CgoKZXh0ZXJuIGludCBzZXRldWlkKHVpZF90KTsKCmV4dGVybiB1bnNpZ25lZCBzbGVlcCh1
bnNpZ25lZCk7CgoKZXh0ZXJuIGludCBzdGltZShjb25zdCB0aW1lX3QgKik7CgoKCmV4dGVybiB2
b2lkIHN3YWIoY29uc3Qgdm9pZCAqLCB2b2lkICosIHNzaXplX3QpOwoKCgpleHRlcm4gaW50IHN5
bWxpbmsoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBzeW5jKHZvaWQp
OwoKZXh0ZXJuIGxvbmcgc3lzY29uZihpbnQpOwoKCiNwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSBz
eXNjb25mIF9fc3lzY29uZl94cGc1CgoKCgoKZXh0ZXJuIHBpZF90IHRjZ2V0cGdycChpbnQpOwpl
eHRlcm4gaW50IHRjc2V0cGdycChpbnQsIHBpZF90KTsKCgpleHRlcm4gb2ZmX3QgdGVsbChpbnQp
OwoKCgoKZXh0ZXJuIGludCB0cnVuY2F0ZShjb25zdCBjaGFyICosIG9mZl90KTsKCmV4dGVybiBj
aGFyICp0dHluYW1lKGludCk7CgoKZXh0ZXJuIHVzZWNvbmRzX3QgdWFsYXJtKHVzZWNvbmRzX3Qs
IHVzZWNvbmRzX3QpOwoKZXh0ZXJuIGludCB1bmxpbmsoY29uc3QgY2hhciAqKTsKCgpleHRlcm4g
aW50IHVubGlua2F0KGludCwgY29uc3QgY2hhciAqLCBpbnQpOwoKCgpleHRlcm4gaW50IHVzbGVl
cCh1c2Vjb25kc190KTsKCgoKZXh0ZXJuIHBpZF90IHZmb3JrKHZvaWQpOwoKCgpleHRlcm4gdm9p
ZCB2aGFuZ3VwKHZvaWQpOwoKZXh0ZXJuIHNzaXplX3Qgd3JpdGUoaW50LCBjb25zdCB2b2lkICos
IHNpemVfdCk7CgoKZXh0ZXJuIHZvaWQgeWllbGQodm9pZCk7CgoKCgoKZXh0ZXJuIGludCBmdHJ1
bmNhdGU2NChpbnQsIG9mZjY0X3QpOwpleHRlcm4gb2ZmNjRfdCBsc2VlazY0KGludCwgb2ZmNjRf
dCwgaW50KTsKZXh0ZXJuIHNzaXplX3QgcHJlYWQ2NChpbnQsIHZvaWQgKiwgc2l6ZV90LCBvZmY2
NF90KTsKZXh0ZXJuIHNzaXplX3QgcHdyaXRlNjQoaW50LCBjb25zdCB2b2lkICosIHNpemVfdCwg
b2ZmNjRfdCk7CmV4dGVybiBvZmY2NF90IHRlbGw2NChpbnQpOwpleHRlcm4gaW50IHRydW5jYXRl
NjQoY29uc3QgY2hhciAqLCBvZmY2NF90KTsKZXh0ZXJuIGludCBsb2NrZjY0KGludCwgaW50LCBv
ZmY2NF90KTsKIyA4MDggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CiNwcmFnbWEgdW5rbm93
bl9jb250cm9sX2Zsb3codmZvcmspCiMgODU0ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApl
eHRlcm4gaW50IGdldGxvZ2luX3IoY2hhciAqLCBpbnQpOwpleHRlcm4gaW50IHR0eW5hbWVfcihp
bnQsIGNoYXIgKiwgc2l6ZV90KTsKI3ByYWdtYSByZWRlZmluZV9leHRuYW1lIGdldGxvZ2luX3Ig
X19wb3NpeF9nZXRsb2dpbl9yCiNwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSB0dHluYW1lX3IgX19w
b3NpeF90dHluYW1lX3IKIyA5MjMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0Cn0KIyAzOSAi
L3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3NwYXJjLXN1bi1zb2xhcmlzMi45
L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDIgMwoKdHlwZWRlZiBwdGhyZWFkX2tleV90IF9fZ3RocmVh
ZF9rZXlfdDsKdHlwZWRlZiBwdGhyZWFkX29uY2VfdCBfX2d0aHJlYWRfb25jZV90Owp0eXBlZGVm
IHB0aHJlYWRfbXV0ZXhfdCBfX2d0aHJlYWRfbXV0ZXhfdDsKCgoKCgoKI3ByYWdtYSB3ZWFrIHB0
aHJlYWRfb25jZQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlfY3JlYXRlCiNwcmFnbWEgd2VhayBw
dGhyZWFkX2tleV9kZWxldGUKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfZ2V0c3BlY2lmaWMKI3ByYWdt
YSB3ZWFrIHB0aHJlYWRfc2V0c3BlY2lmaWMKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfY3JlYXRlCgoj
cHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF9sb2NrCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4
X3RyeWxvY2sKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfdW5sb2NrCiMgODcgIi9zcGFjZS9z
bmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zcGFyYy1zdW4tc29sYXJpczIuOS9iaXRzL2d0
aHItZGVmYXVsdC5oIiAzCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAodm9p
ZCkKewogIHN0YXRpYyB2b2lkICpjb25zdCBfX2d0aHJlYWRfYWN0aXZlX3B0ciA9ICh2b2lkICop
ICZwdGhyZWFkX2NyZWF0ZTsKICByZXR1cm4gX19ndGhyZWFkX2FjdGl2ZV9wdHIgIT0gMDsKfQoj
IDQ0OSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3NwYXJjLXN1bi1zb2xh
cmlzMi45L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFk
X29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZvaWQgKCpmdW5jKSAodm9pZCkpCnsKICBp
ZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfb25jZSAob25jZSwg
ZnVuYyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJl
YWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpkdG9yKSAodm9pZCAq
KSkKewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVhdGUgKGtleSwgZHRvcik7Cn0KCnN0YXRpYyBp
bmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZHRvciAoX19ndGhyZWFkX2tleV90IGtleSwgdm9pZCAq
cHRyKQp7CgogIGlmIChwdHIpCiAgICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCAw
KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tl
eV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9rZXlfZGVs
ZXRlIChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgKgpfX2d0aHJlYWRfZ2V0c3BlY2lmaWMg
KF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyAoa2V5
KTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX3NldHNwZWNpZmljIChfX2d0aHJlYWRf
a2V5X3Qga2V5LCBjb25zdCB2b2lkICpwdHIpCnsKICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZp
YyAoa2V5LCBwdHIpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfbG9jayAo
X19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkK
ICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4g
MDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVh
ZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1
cm4gcHRocmVhZF9tdXRleF90cnlsb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0K
CnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9tdXRl
eF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRo
cmVhZF9tdXRleF91bmxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQojIDk5ICIv
c3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvc3BhcmMtc3VuLXNvbGFyaXMyLjkv
Yml0cy9ndGhyLmgiIDIgMwojIDM4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvc3BhcmMtc3VuLXNvbGFyaXMyLjkvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBzdGQK
ewoKICB0eXBlZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNp
emU7CgoKCiAgdHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsKCiAgdHlwZWRlZiBfX2d0aHJl
YWRfbXV0ZXhfdCBfX2NfbG9jazsKCgogIHR5cGVkZWYgRklMRSBfX2NfZmlsZTsKCgogIHN0cnVj
dCBfX2lvc19mbGFncwogIHsKICAgIHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsKCiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19ib29sYWxwaGEgPSAweDAwMDE7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19kZWMgPSAweDAwMDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19maXhlZCA9IDB4MDAwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2hleCA9
IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ludGVybmFsID0gMHgwMDEw
OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfbGVmdCA9IDB4MDAyMDsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX29jdCA9IDB4MDA0MDsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX3JpZ2h0ID0gMHgwMDgwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
c2NpZW50aWZpYyA9IDB4MDEwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3di
YXNlID0gMHgwMjAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvaW50ID0g
MHgwNDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvcyA9IDB4MDgwMDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NraXB3cyA9IDB4MTAwMDsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX3VuaXRidWYgPSAweDIwMDA7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU191cHBlcmNhc2UgPSAweDQwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf
dHlwZSBfU19hZGp1c3RmaWVsZCA9IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAxMDsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4MDAwMiB8IDB4MDA0MCB8IDB4MDAw
ODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAw
eDAwMDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7CiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19lb2ZiaXQgPSAweDAyOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfZmFpbGJpdCA9IDB4MDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX2FwcCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hdGUg
PSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmluID0gMHgwNDsKICAgIHN0
YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2luID0gMHgwODsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX291dCA9IDB4MTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU190cnVu
YyA9IDB4MjA7CiAgfTsKfQojIDQ1ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvYml0cy9mcG9zLmgiIDIgMwojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9jd2NoYXIiIDEgMwojIDQ4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvY3djaGFyIiAzCgoKCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L2N0aW1lIiAxIDMKIyA0OCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2N0
aW1lIiAzCiMgNjQgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jdGltZSIg
MwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmNsb2NrX3Q7CiAgdXNpbmcgOjp0aW1lX3Q7CiAg
dXNpbmcgOjp0bTsKCiAgdXNpbmcgOjpjbG9jazsKICB1c2luZyA6OmRpZmZ0aW1lOwogIHVzaW5n
IDo6bWt0aW1lOwogIHVzaW5nIDo6dGltZTsKICB1c2luZyA6OmFzY3RpbWU7CiAgdXNpbmcgOjpj
dGltZTsKICB1c2luZyA6OmdtdGltZTsKICB1c2luZyA6OmxvY2FsdGltZTsKICB1c2luZyA6OnN0
cmZ0aW1lOwp9CiMgNTIgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jd2No
YXIiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNs
dWRlL3djaGFyLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpd2NoYXIuaAkxLjM1CTAxLzEwLzE3
IFNNSSIKCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjkvMy4zL2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAxIDMgNAojIDMwICIvc3BhY2Uv
c25iL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVk
ZS9pc28vd2NoYXJfaXNvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpd2NoYXJfaXNvLmgJMS4y
CTk5LzExLzEwIFNNSSIKCgoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXJfaW1wbC5oIiAxIDMgNAoj
IDkgIi91c3IvaW5jbHVkZS93Y2hhcl9pbXBsLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpd2No
YXJfaW1wbC5oCTEuMwk5OS8wNy8yNiBTTUkiCgoKCgpleHRlcm4gIkMiIHsKCgoKCnR5cGVkZWYg
c3RydWN0IF9fbWJzdGF0ZV90IHsKCgoKICAgICAgICBpbnQgX19maWxsZXJbNl07Cgp9IF9fbWJz
dGF0ZV90OwoKCgp9CiMgMzUgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMiAzIDQKIyA0NCAi
L3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4z
L2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIg
MSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMp
Y3R5cGUuaAkxLjMzCTk5LzA4LzEwIFNNSSIgCgojIDEgIi91c3IvaW5jbHVkZS9pc28vY3R5cGVf
aXNvLmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS9pc28vY3R5cGVfaXNvLmgiIDMgNAojcHJh
Z21hIGlkZW50ICJAKCMpY3R5cGVfaXNvLmgJMS4xCTk5LzA4LzA5IFNNSSIgCgoKCgpleHRlcm4g
IkMiIHsKIyA2MyAiL3Vzci9pbmNsdWRlL2lzby9jdHlwZV9pc28uaCIgMyA0CmV4dGVybiBpbnQg
aXNhbG51bShpbnQpOwpleHRlcm4gaW50IGlzYWxwaGEoaW50KTsKZXh0ZXJuIGludCBpc2NudHJs
KGludCk7CmV4dGVybiBpbnQgaXNkaWdpdChpbnQpOwpleHRlcm4gaW50IGlzZ3JhcGgoaW50KTsK
ZXh0ZXJuIGludCBpc2xvd2VyKGludCk7CmV4dGVybiBpbnQgaXNwcmludChpbnQpOwpleHRlcm4g
aW50IGlzcHVuY3QoaW50KTsKZXh0ZXJuIGludCBpc3NwYWNlKGludCk7CmV4dGVybiBpbnQgaXN1
cHBlcihpbnQpOwpleHRlcm4gaW50IGlzeGRpZ2l0KGludCk7CgoKCgoKCgpleHRlcm4gaW50IHRv
bG93ZXIoaW50KTsKZXh0ZXJuIGludCB0b3VwcGVyKGludCk7CgoKCgoKZXh0ZXJuIHVuc2lnbmVk
IGNoYXIgX19jdHlwZVtdOwpleHRlcm4gdW5zaWduZWQgaW50ICpfX2N0eXBlX21hc2s7CmV4dGVy
biBpbnQgKl9fdHJhbnNfdXBwZXI7CmV4dGVybiBpbnQgKl9fdHJhbnNfbG93ZXI7CiMgMTg2ICIv
dXNyL2luY2x1ZGUvaXNvL2N0eXBlX2lzby5oIiAzIDQKfQojIDE5ICIvdXNyL2luY2x1ZGUvY3R5
cGUuaCIgMiAzIDQKIyA0MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNApleHRlcm4gIkMiIHsK
CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaShpbnQpOwpleHRlcm4gaW50IHRvYXNjaWkoaW50KTsK
ZXh0ZXJuIGludCBfdG9sb3dlcihpbnQpOwpleHRlcm4gaW50IF90b3VwcGVyKGludCk7CiMgOTAg
Ii91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKfQojIDQ1ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9pc28vd2NoYXJfaXNv
LmgiIDIgMyA0CiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNDYgIi9zcGFjZS9zbmIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL2lz
by93Y2hhcl9pc28uaCIgMiAzIDQKCgoKCgpleHRlcm4gIkMiIHsKIyA3NiAiL3NwYWNlL3NuYi91
c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvaXNv
L3djaGFyX2lzby5oIiAzIDQKdHlwZWRlZiBsb25nIHdpbnRfdDsKIyAxMTMgIi9zcGFjZS9zbmIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL2lz
by93Y2hhcl9pc28uaCIgMyA0CnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90OwojIDEyNCAi
L3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4z
L2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAzIDQKZXh0ZXJuIHdpbnRfdCBmZ2V0d2MoX19GSUxF
ICopOwpleHRlcm4gd2NoYXJfdCAqZmdldHdzKHdjaGFyX3QgKiwgaW50LCBfX0ZJTEUgKik7CmV4
dGVybiB3aW50X3QgZnB1dHdjKHdpbnRfdCwgX19GSUxFICopOwpleHRlcm4gaW50IGZwdXR3cyhj
b25zdCB3Y2hhcl90ICosIF9fRklMRSAqKTsKZXh0ZXJuIHdpbnRfdCB1bmdldHdjKHdpbnRfdCwg
X19GSUxFICopOwpleHRlcm4gd2ludF90IGdldHdjKF9fRklMRSAqKTsKZXh0ZXJuIHdpbnRfdCBn
ZXR3Y2hhcih2b2lkKTsKZXh0ZXJuIHdpbnRfdCBwdXR3Yyh3aW50X3QsIF9fRklMRSAqKTsKZXh0
ZXJuIHdpbnRfdCBwdXR3Y2hhcih3aW50X3QpOwpleHRlcm4gZG91YmxlIHdjc3RvZChjb25zdCB3
Y2hhcl90ICosIHdjaGFyX3QgKiopOwpleHRlcm4gbG9uZyB3Y3N0b2woY29uc3Qgd2NoYXJfdCAq
LCB3Y2hhcl90ICoqLCBpbnQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyB3Y3N0b3VsKGNvbnN0IHdj
aGFyX3QgKiwgd2NoYXJfdCAqKiwgaW50KTsKZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCh3Y2hhcl90
ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBpbnQgd2NzY21wKGNvbnN0IHdjaGFyX3QgKiwg
Y29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIGludCB3Y3Njb2xsKGNvbnN0IHdjaGFyX3QgKiwgY29u
c3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSh3Y2hhcl90ICosIGNvbnN0IHdj
aGFyX3QgKik7CmV4dGVybiBzaXplX3Qgd2NzY3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdj
aGFyX3QgKik7CmV4dGVybiBzaXplX3Qgd2NzbGVuKGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiB3
Y2hhcl90ICp3Y3NuY2F0KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpleHRl
cm4gaW50IHdjc25jbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7
CmV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXpl
X3QpOwpleHRlcm4gc2l6ZV90IHdjc3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3Qg
Kik7CmV4dGVybiBzaXplX3Qgd2NzeGZybSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6
ZV90KTsKIyAxNjcgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi45LzMuMy9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMyA0CmV4dGVybiB3Y2hhcl90
ICp3Y3NjaHIoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKZXh0ZXJuIHdjaGFyX3QgKndjc3Bi
cmsoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gd2NoYXJfdCAqd2Nz
cmNocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpOwojIDE3OCAiL3NwYWNlL3NuYi91c3IvbG9j
YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvaXNvL3djaGFy
X2lzby5oIiAzIDQKZXh0ZXJuIHdjaGFyX3QgKndjc3Rvayh3Y2hhcl90ICosIGNvbnN0IHdjaGFy
X3QgKiwgd2NoYXJfdCAqKik7CmV4dGVybiBzaXplX3Qgd2NzZnRpbWUod2NoYXJfdCAqLCBzaXpl
X3QsIGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgc3RydWN0IHRtICopOwojcHJhZ21hIHJlZGVmaW5l
X2V4dG5hbWUgd2NzdG9rIF9fd2NzdG9rX3hwZzUKI3ByYWdtYSByZWRlZmluZV9leHRuYW1lIHdj
c2Z0aW1lIF9fd2NzZnRpbWVfeHBnNQojIDE5NCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAz
IDQKZXh0ZXJuIHdpbnRfdCBidG93YyhpbnQpOwpleHRlcm4gaW50IGZ3cHJpbnRmKF9fRklMRSAq
LCBjb25zdCB3Y2hhcl90ICosIC4uLik7CmV4dGVybiBpbnQgZndzY2FuZihfX0ZJTEUgKiwgY29u
c3Qgd2NoYXJfdCAqLCAuLi4pOwpleHRlcm4gaW50IGZ3aWRlKF9fRklMRSAqLCBpbnQpOwpleHRl
cm4gaW50IG1ic2luaXQoY29uc3QgbWJzdGF0ZV90ICopOwpleHRlcm4gc2l6ZV90IG1icmxlbihj
b25zdCBjaGFyICosIHNpemVfdCwgbWJzdGF0ZV90ICopOwpleHRlcm4gc2l6ZV90IG1icnRvd2Mo
d2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgbWJzdGF0ZV90ICopOwpleHRlcm4gc2l6
ZV90IG1ic3J0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiosIHNpemVfdCwgbWJzdGF0ZV90
ICopOwpleHRlcm4gaW50IHN3cHJpbnRmKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90
ICosIC4uLik7CmV4dGVybiBpbnQgc3dzY2FuZihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFy
X3QgKiwgLi4uKTsKZXh0ZXJuIGludCB2ZndwcmludGYoX19GSUxFICosIGNvbnN0IHdjaGFyX3Qg
KiwgX192YV9saXN0KTsKZXh0ZXJuIGludCB2d3ByaW50Zihjb25zdCB3Y2hhcl90ICosIF9fdmFf
bGlzdCk7CmV4dGVybiBpbnQgdnN3cHJpbnRmKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hh
cl90ICosIF9fdmFfbGlzdCk7CmV4dGVybiBzaXplX3Qgd2NydG9tYihjaGFyICosIHdjaGFyX3Qs
IG1ic3RhdGVfdCAqKTsKZXh0ZXJuIHNpemVfdCB3Y3NydG9tYnMoY2hhciAqLCBjb25zdCB3Y2hh
cl90ICoqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJuIGludCB3Y3RvYih3aW50X3QpOwpl
eHRlcm4gaW50IHdtZW1jbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVf
dCk7CmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBz
aXplX3QpOwpleHRlcm4gd2NoYXJfdCAqd21lbW1vdmUod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90
ICosIHNpemVfdCk7CmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0KHdjaGFyX3QgKiwgd2NoYXJfdCwg
c2l6ZV90KTsKZXh0ZXJuIGludCB3cHJpbnRmKGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKZXh0ZXJu
IGludCB3c2NhbmYoY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwojIDIzMCAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvaXNvL3dj
aGFyX2lzby5oIiAzIDQKZXh0ZXJuIHdjaGFyX3QgKndjc3N0cihjb25zdCB3Y2hhcl90ICosIGNv
bnN0IHdjaGFyX3QgKik7CmV4dGVybiB3Y2hhcl90ICp3bWVtY2hyKGNvbnN0IHdjaGFyX3QgKiwg
d2NoYXJfdCwgc2l6ZV90KTsKIyAzMTggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMyA0CiNw
cmFnbWEgcmVkZWZpbmVfZXh0bmFtZSBmZ2V0d2MgX19mZ2V0d2NfeHBnNQojcHJhZ21hIHJlZGVm
aW5lX2V4dG5hbWUgZ2V0d2MgX19nZXR3Y194cGc1CiNwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSBn
ZXR3Y2hhciBfX2dldHdjaGFyX3hwZzUKI3ByYWdtYSByZWRlZmluZV9leHRuYW1lIGZwdXR3YyBf
X2ZwdXR3Y194cGc1CiNwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSBwdXR3YyBfX3B1dHdjX3hwZzUK
I3ByYWdtYSByZWRlZmluZV9leHRuYW1lIHB1dHdjaGFyIF9fcHV0d2NoYXJfeHBnNQojcHJhZ21h
IHJlZGVmaW5lX2V4dG5hbWUgZmdldHdzIF9fZmdldHdzX3hwZzUKI3ByYWdtYSByZWRlZmluZV9l
eHRuYW1lIGZwdXR3cyBfX2ZwdXR3c194cGc1CiNwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSB1bmdl
dHdjIF9fdW5nZXR3Y194cGc1CiMgMzY3ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDMgNAp9
CiMgMTIgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAojIDgyICIvdXNyL2luY2x1ZGUvd2No
YXIuaCIgMyA0CmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgaW50IHdjdHlwZV90OwoKCgoKCgpl
eHRlcm4gaW50IGlzd2FscGhhKHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3dXBwZXIod2ludF90KTsK
ZXh0ZXJuIGludCBpc3dsb3dlcih3aW50X3QpOwpleHRlcm4gaW50IGlzd2RpZ2l0KHdpbnRfdCk7
CmV4dGVybiBpbnQgaXN3eGRpZ2l0KHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3YWxudW0od2ludF90
KTsKZXh0ZXJuIGludCBpc3dzcGFjZSh3aW50X3QpOwpleHRlcm4gaW50IGlzd3B1bmN0KHdpbnRf
dCk7CmV4dGVybiBpbnQgaXN3cHJpbnQod2ludF90KTsKZXh0ZXJuIGludCBpc3dncmFwaCh3aW50
X3QpOwpleHRlcm4gaW50IGlzd2NudHJsKHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3Y3R5cGUod2lu
dF90LCB3Y3R5cGVfdCk7CmV4dGVybiB3aW50X3QgdG93bG93ZXIod2ludF90KTsKZXh0ZXJuIHdp
bnRfdCB0b3d1cHBlcih3aW50X3QpOwpleHRlcm4gd2NoYXJfdCAqd2Nzd2NzKGNvbnN0IHdjaGFy
X3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIGludCB3Y3N3aWR0aChjb25zdCB3Y2hhcl90
ICosIHNpemVfdCk7CmV4dGVybiBpbnQgd2N3aWR0aChjb25zdCB3Y2hhcl90KTsKZXh0ZXJuIHdj
dHlwZV90IHdjdHlwZShjb25zdCBjaGFyICopOwojIDEyMiAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDMgNApleHRlcm4gaW50IHZmd3NjYW5mKF9fRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIF9fdmFf
bGlzdCk7CmV4dGVybiBpbnQgdnN3c2NhbmYoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90
ICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQgdndzY2FuZihjb25zdCB3Y2hhcl90ICosIF9fdmFf
bGlzdCk7CiMgMTYwICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0Cn0KIyA1NSAiL3NwYWNlL3Nu
Yi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2N3Y2hhciIgMiAzCiMgNjkgIi9zcGFjZS9zbmIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNp
bmcgOjptYnN0YXRlX3Q7Cn0KIyA0NiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2JpdHMvZnBvcy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBmcG9zCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0
eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbW9m
ZiBfTV9vZmY7CiAgICAgIF9fc3RhdGVfdHlwZSBfTV9zdDsKCiAgICBwdWJsaWM6CiAgICAgIF9f
c3RhdGVfdHlwZQogICAgICBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3N0OyB9CgogICAgICB2
b2lkCiAgICAgIHN0YXRlKF9fc3RhdGVfdHlwZSBfX3N0KSB7IF9NX3N0ID0gX19zdDsgfQoKCgog
ICAgICBmcG9zKCk6IF9NX29mZihzdHJlYW1vZmYoKSksIF9NX3N0KF9fc3RhdGVfdHlwZSgpKSB7
IH0KCiAgICAgIGZwb3Moc3RyZWFtb2ZmIF9fb2ZmLCBfX3N0YXRlX3R5cGUgX19zdCA9IF9fc3Rh
dGVfdHlwZSgpKQogICAgICA6IF9NX29mZihfX29mZiksIF9NX3N0KF9fc3QpIHsgfQoKICAgICAg
b3BlcmF0b3Igc3RyZWFtb2ZmKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAgICBmcG9z
JgogICAgICBvcGVyYXRvcis9KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgKz0gX19vZmY7IHJl
dHVybiAqdGhpczsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3ItPShzdHJlYW1vZmYgX19v
ZmYpIHsgX01fb2ZmIC09IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MKICAgICAg
b3BlcmF0b3IrKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlz
KTsKICAgICAgICBfX3QgKz0gX19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAg
ICAgZnBvcwogICAgICBvcGVyYXRvci0oc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAg
ZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCAtPSBfX29mZjsKICAgICAgICByZXR1cm4gX190
OwogICAgICB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3Mp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiA9PSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIGJv
b2wKICAgICAgb3BlcmF0b3IhPShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1
cm4gX01fb2ZmICE9IF9fcG9zLl9NX29mZjsgfQoKICAgICAgc3RyZWFtb2ZmCiAgICAgIF9NX3Bv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3Bv
c2l0aW9uKHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgPSBfX29mZjsgfQogICAgfTsKCgogIHR5
cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVhbXBvczsKCgoKCn0KIyA0NyAiL3NwYWNlL3NuYi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvY2hhcl90cmFpdHMuaCIgMiAzCgpuYW1lc3Bh
Y2Ugc3RkCnsKIyA2MSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMv
Y2hhcl90cmFpdHMuaCIgMwogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVjdCBjaGFy
X3RyYWl0cwogICAgewogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICB0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190
eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0
YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5
cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAgICBzdGF0aWMgYm9vbAogICAg
ICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMik7CgogICAg
ICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJf
dHlwZSYgX19jMik7CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90
eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOwoKICAgICAgc3Rh
dGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpOwoKICAgICAgc3Rh
dGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6
ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoK
ICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90
IF9fbik7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19z
MSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAgIHN0YXRpYyBjaGFy
X3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBl
IF9fYSk7CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBp
bnRfdHlwZSYgX19jKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShj
b25zdCBjaGFyX3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlw
ZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpOwoKICAgICAgc3Rh
dGljIGludF90eXBlCiAgICAgIGVvZigpOwoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5v
dF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYyk7CiAgICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0
cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAgewogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBl
OwogICAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9z
X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIG1i
c3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJf
dHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9
CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0
IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBz
dGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlw
ZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQK
ICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19z
Miwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gbWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0K
CiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQog
ICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlw
ZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hh
cl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGNoYXJfdHlwZSo+
KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAg
IG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24p
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbW1vdmUoX19zMSwgX19z
MiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBl
KiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbWNweShfX3MxLCBfX3MyLCBfX24pKTsgfQoKICAg
ICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3Qg
X19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUq
PihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAg
IHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRv
X2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7IH0KCiAgICAgIHN0
YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBp
bnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0
aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KCgt
MSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlw
ZSYgX19jKQogICAgICB7IHJldHVybiAoX19jID09IGVvZigpKSA/IDAgOiBfX2M7IH0KICB9Owoj
IDI1MCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvY2hhcl90cmFp
dHMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IHN0cnVjdCBfQ2hhcl90cmFpdHNfbWF0Y2gKICAgIHsKICAgICAgX0NoYXJUIF9NX2M7CiAgICAg
IF9DaGFyX3RyYWl0c19tYXRjaChfQ2hhclQgY29uc3QmIF9fYykgOiBfTV9jKF9fYykgeyB9Cgog
ICAgICBib29sCiAgICAgIG9wZXJhdG9yKCkoX0NoYXJUIGNvbnN0JiBfX2EpIHsgcmV0dXJuIF9U
cmFpdHM6OmVxKF9NX2MsIF9fYSk7IH0KICAgIH07Cn0KIyA0OCAiL3NwYWNlL3NuYi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL3N0cmluZyIgMiAzCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMSAzCiMgNTMgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9tZW1vcnkiIDMKCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDY2ICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi9zcGFjZS9z
bmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jbGltaXRzIiAxIDMKIyA0OCAiL3NwYWNlL3Nu
Yi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2NsaW1pdHMiIDMKCiMgMSAiL3NwYWNlL3NuYi91
c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvbGlt
aXRzLmgiIDEgMyA0CiMgMTEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL2xpbWl0cy5oIiAzIDQKIyAxICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9z
eXNsaW1pdHMuaCIgMSAzIDQKIyAyNSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNAojcHJhZ21h
IGlkZW50ICJAKCMpbGltaXRzLmgJMS41MgkwMi8wMS8wOCBTTUkiIAoKCgojIDEgIi91c3IvaW5j
bHVkZS9pc28vbGltaXRzX2lzby5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvaXNvL2xpbWl0
c19pc28uaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylsaW1pdHNfaXNvLmgJMS4xCTk5LzA4LzA5
IFNNSSIgCgoKZXh0ZXJuICJDIiB7CiMgNzUgIi91c3IvaW5jbHVkZS9pc28vbGltaXRzX2lzby5o
IiAzIDQKfQojIDMwICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOS8zLjMvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQKIyA0MSAiL3NwYWNlL3Nu
Yi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUv
c3lzbGltaXRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvaW50X2xpbWl0cy5oIiAxIDMg
NAojIDkgIi91c3IvaW5jbHVkZS9zeXMvaW50X2xpbWl0cy5oIiAzIDQKI3ByYWdtYSBpZGVudCAi
QCgjKWludF9saW1pdHMuaAkxLjYJOTkvMDgvMDYgU01JIgojIDQ3ICIvdXNyL2luY2x1ZGUvc3lz
L2ludF9saW1pdHMuaCIgMyA0CmV4dGVybiAiQyIgewojIDE2MiAiL3Vzci9pbmNsdWRlL3N5cy9p
bnRfbGltaXRzLmgiIDMgNAp9CiMgNDIgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMgNAoKCgpl
eHRlcm4gIkMiIHsKIyAyNzggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAzIDQKZXh0ZXJuIGxvbmcg
X3N5c2NvbmYoaW50KTsKIyAyODggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAzIDQKfQojIDEyICIv
c3BhY2Uvc25iL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMv
aW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKIyA1MCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2NsaW1pdHMiIDIgMwojIDY3ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2NzdGRsaWIiIDEgMwojIDQ4ICIvc3BhY2Uvc25iL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvY3N0ZGxpYiIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CiNwcmFnbWEgaWRlbnQg
IkAoIylzdGRsaWIuaAkxLjQ4CTAwLzA0LzEzIFNNSSIgCgojIDEgIi9zcGFjZS9zbmIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL2lzby9zdGRs
aWJfaXNvLmgiIDEgMyA0CiMgMzcgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL2lzby9zdGRsaWJfaXNvLmgiIDMgNAojcHJh
Z21hIGlkZW50ICJAKCMpc3RkbGliX2lzby5oCTEuMwkwMS8wMy8wOSBTTUkiIAoKCgoKZXh0ZXJu
ICJDIiB7CgoKCmV4dGVybiB1bnNpZ25lZCBjaGFyIF9fY3R5cGVbXTsKIyA1NyAiL3NwYWNlL3Nu
Yi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUv
aXNvL3N0ZGxpYl9pc28uaCIgMyA0CnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgcXVvdDsK
ICAgICAgICBpbnQgcmVtOwp9IGRpdl90OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGxvbmcg
cXVvdDsKICAgICAgICBsb25nIHJlbTsKfSBsZGl2X3Q7CiMgMTAzICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9pc28vc3Rk
bGliX2lzby5oIiAzIDQKZXh0ZXJuIHZvaWQgYWJvcnQodm9pZCk7CmV4dGVybiBpbnQgYWJzKGlu
dCk7CmV4dGVybiBpbnQgYXRleGl0KHZvaWQgKCopKHZvaWQpKTsKZXh0ZXJuIGRvdWJsZSBhdG9m
KGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgYXRvaShjb25zdCBjaGFyICopOwpleHRlcm4gbG9u
ZyBpbnQgYXRvbChjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCAqYnNlYXJjaChjb25zdCB2b2lk
ICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsCiAgICAgICAgaW50ICgqKShjb25zdCB2
b2lkICosIGNvbnN0IHZvaWQgKikpOwpleHRlcm4gdm9pZCAqY2FsbG9jKHNpemVfdCwgc2l6ZV90
KTsKZXh0ZXJuIGRpdl90IGRpdihpbnQsIGludCk7CmV4dGVybiB2b2lkIGV4aXQoaW50KTsKZXh0
ZXJuIHZvaWQgZnJlZSh2b2lkICopOwpleHRlcm4gY2hhciAqZ2V0ZW52KGNvbnN0IGNoYXIgKik7
CmV4dGVybiBsb25nIGludCBsYWJzKGxvbmcpOwpleHRlcm4gbGRpdl90IGxkaXYobG9uZywgbG9u
Zyk7CmV4dGVybiB2b2lkICptYWxsb2Moc2l6ZV90KTsKZXh0ZXJuIGludCBtYmxlbihjb25zdCBj
aGFyICosIHNpemVfdCk7CmV4dGVybiBzaXplX3QgbWJzdG93Y3Mod2NoYXJfdCAqLCBjb25zdCBj
aGFyICosIHNpemVfdCk7CmV4dGVybiBpbnQgbWJ0b3djKHdjaGFyX3QgKiwgY29uc3QgY2hhciAq
LCBzaXplX3QpOwpleHRlcm4gdm9pZCBxc29ydCh2b2lkICosIHNpemVfdCwgc2l6ZV90LAogICAg
ICAgIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKZXh0ZXJuIGludCByYW5k
KHZvaWQpOwpleHRlcm4gdm9pZCAqcmVhbGxvYyh2b2lkICosIHNpemVfdCk7CmV4dGVybiB2b2lk
IHNyYW5kKHVuc2lnbmVkIGludCk7CmV4dGVybiBkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIgKiwg
Y2hhciAqKik7CmV4dGVybiBsb25nIGludCBzdHJ0b2woY29uc3QgY2hhciAqLCBjaGFyICoqLCBp
bnQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bChjb25zdCBjaGFyICosIGNoYXIg
KiosIGludCk7CmV4dGVybiBpbnQgc3lzdGVtKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgd2N0
b21iKGNoYXIgKiwgd2NoYXJfdCk7CmV4dGVybiBzaXplX3Qgd2NzdG9tYnMoY2hhciAqLCBjb25z
dCB3Y2hhcl90ICosIHNpemVfdCk7CiMgMTc5ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9pc28vc3RkbGliX2lzby5oIiAz
IDQKfQojIDE5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNs
dWRlL3N5cy93YWl0LmgiIDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzIDQK
I3ByYWdtYSBpZGVudCAiQCgjKXdhaXQuaAkxLjIxCTk3LzA0LzA4IFNNSSIgCgoKCgoKCgojIDEg
Ii91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL3N5
cy9yZXNvdXJjZS5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXJlc291cmNlLmgJMS4yNwkwMS8w
NC8wNSBTTUkiIAoKCgoKCgoKZXh0ZXJuICJDIiB7CiMgNjkgIi91c3IvaW5jbHVkZS9zeXMvcmVz
b3VyY2UuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBybGltX3Q7CiMgMTA0ICIvdXNyL2lu
Y2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNApzdHJ1Y3QgcmxpbWl0IHsKICAgICAgICBybGltX3Qg
cmxpbV9jdXI7CiAgICAgICAgcmxpbV90IHJsaW1fbWF4Owp9OwoKCgoKdHlwZWRlZiB1X2xvbmds
b25nX3QgcmxpbTY0X3Q7CgoKCgoKc3RydWN0IHJsaW1pdDY0IHsKICAgICAgICBybGltNjRfdCBy
bGltX2N1cjsKICAgICAgICBybGltNjRfdCBybGltX21heDsKfTsKIyAxNDEgIi91c3IvaW5jbHVk
ZS9zeXMvcmVzb3VyY2UuaCIgMyA0CnN0cnVjdCBydXNhZ2UgewogICAgICAgIHN0cnVjdCB0aW1l
dmFsIHJ1X3V0aW1lOwogICAgICAgIHN0cnVjdCB0aW1ldmFsIHJ1X3N0aW1lOwogICAgICAgIGxv
bmcgcnVfbWF4cnNzOwogICAgICAgIGxvbmcgcnVfaXhyc3M7CiAgICAgICAgbG9uZyBydV9pZHJz
czsKICAgICAgICBsb25nIHJ1X2lzcnNzOwogICAgICAgIGxvbmcgcnVfbWluZmx0OwogICAgICAg
IGxvbmcgcnVfbWFqZmx0OwogICAgICAgIGxvbmcgcnVfbnN3YXA7CiAgICAgICAgbG9uZyBydV9p
bmJsb2NrOwogICAgICAgIGxvbmcgcnVfb3VibG9jazsKICAgICAgICBsb25nIHJ1X21zZ3NuZDsK
ICAgICAgICBsb25nIHJ1X21zZ3JjdjsKICAgICAgICBsb25nIHJ1X25zaWduYWxzOwogICAgICAg
IGxvbmcgcnVfbnZjc3c7CiAgICAgICAgbG9uZyBydV9uaXZjc3c7Cn07CiMgMTkxICIvdXNyL2lu
Y2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNApleHRlcm4gaW50IHNldHJsaW1pdChpbnQsIGNvbnN0
IHN0cnVjdCBybGltaXQgKik7CmV4dGVybiBpbnQgZ2V0cmxpbWl0KGludCwgc3RydWN0IHJsaW1p
dCAqKTsKCgoKCmV4dGVybiBpbnQgc2V0cmxpbWl0NjQoaW50LCBjb25zdCBzdHJ1Y3QgcmxpbWl0
NjQgKik7CmV4dGVybiBpbnQgZ2V0cmxpbWl0NjQoaW50LCBzdHJ1Y3QgcmxpbWl0NjQgKik7CgoK
ZXh0ZXJuIGludCBnZXRwcmlvcml0eShpbnQsIGlkX3QpOwpleHRlcm4gaW50IHNldHByaW9yaXR5
KGludCwgaWRfdCwgaW50KTsKZXh0ZXJuIGludCBnZXRydXNhZ2UoaW50LCBzdHJ1Y3QgcnVzYWdl
ICopOwojIDIyNiAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQKfQojIDI1ICIvdXNy
L2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8u
aCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDMgNAojcHJhZ21hIGlk
ZW50ICJAKCMpc2lnaW5mby5oCTEuNTUJMDEvMDQvMDUgU01JIiAKCgoKCgpleHRlcm4gIkMiIHsK
IyAxMjcgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUv
c3lzL21hY2hzaWcuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9tYWNoc2lnLmgiIDMg
NAojcHJhZ21hIGlkZW50ICJAKCMpbWFjaHNpZy5oCTEuMTUJOTkvMDgvMTUgU01JIgoKCgoKZXh0
ZXJuICJDIiB7CiMgMTA3ICIvdXNyL2luY2x1ZGUvc3lzL21hY2hzaWcuaCIgMyA0Cn0KIyAxMjgg
Ii91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAyIDMgNAojIDIyMiAiL3Vzci9pbmNsdWRlL3N5
cy9zaWdpbmZvLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBzaWdpbmZvIHsKCgoKICAgICAgICBpbnQg
c2lfc2lnbm87CiAgICAgICAgaW50IHNpX2NvZGU7CiAgICAgICAgaW50IHNpX2Vycm5vOwoKCgog
ICAgICAgIHVuaW9uIHsKCiAgICAgICAgICAgICAgICBpbnQgX19wYWRbKCgxMjggLyBzaXplb2Yg
KGludCkpIC0gMyldOwoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHBpZF90IF9fcGlkOwogICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpZF90IF9fdWlkOwoKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bmlvbiBzaWd2YWwgX192YWx1ZTsKCgoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IF9fa2lsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tf
dCBfX3V0aW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
c3RhdHVzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tfdCBf
X3N0aW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gX19jbGQ7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0gX19wZGF0YTsKICAgICAgICAgICAgICAgIH0gX19wcm9jOwoKICAg
ICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYWRk
cjsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fdHJhcG5vOwogICAgICAgICAgICAgICAg
ICAgICAgICBjYWRkcl90IF9fcGM7CiAgICAgICAgICAgICAgICB9IF9fZmF1bHQ7CgogICAgICAg
ICAgICAgICAgc3RydWN0IHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2ZkOwogICAg
ICAgICAgICAgICAgICAgICAgICBsb25nIF9fYmFuZDsKICAgICAgICAgICAgICAgIH0gX19maWxl
OwoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhZGRy
X3QgX19mYWRkcjsKCgogICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RydWNfdCBfX3RzdGFt
cDsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgX19zeXNjYWxsOwogICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyIF9fbnN5c2FyZzsKICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciBfX2ZhdWx0OwogICAgICAgICAgICAgICAgICAgICAgICBsb25nIF9fc3lzYXJnWzhdOwogICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19tc3RhdGVbMTBdOwogICAgICAgICAgICAgICAgfSBf
X3Byb2Y7CgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAg
aW50MzJfdCBfX2VudGl0eTsKICAgICAgICAgICAgICAgIH0gX19yY3RsOwogICAgICAgIH0gX19k
YXRhOwoKfSBzaWdpbmZvX3Q7CiMgMzYyICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMyA0
CnR5cGVkZWYgc3RydWN0IGtfc2lnaW5mbyB7CiAgICAgICAgaW50IHNpX3NpZ25vOwogICAgICAg
IGludCBzaV9jb2RlOwogICAgICAgIGludCBzaV9lcnJubzsKCgoKICAgICAgICB1bmlvbiB7CiAg
ICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBwaWRfdCBfX3Bp
ZDsKICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aWRfdCBfX3VpZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
aW9uIHNpZ3ZhbCBfX3ZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gX19r
aWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja190IF9fdXRpbWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19zdGF0dXM7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja190IF9fc3RpbWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBfX2NsZDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBfX3Bk
YXRhOwogICAgICAgICAgICAgICAgfSBfX3Byb2M7CgogICAgICAgICAgICAgICAgc3RydWN0IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hZGRyOwogICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX190cmFwbm87CiAgICAgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgX19wYzsK
ICAgICAgICAgICAgICAgIH0gX19mYXVsdDsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewoKICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IF9fZmQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGxv
bmcgX19iYW5kOwogICAgICAgICAgICAgICAgfSBfX2ZpbGU7CgogICAgICAgICAgICAgICAgc3Ry
dWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FkZHJfdCBfX2ZhZGRyOwoKCgogICAgICAg
ICAgICAgICAgICAgICAgICB0aW1lc3RydWNfdCBfX3RzdGFtcDsKCgoKICAgICAgICAgICAgICAg
ICAgICAgICAgc2hvcnQgX19zeXNjYWxsOwogICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9f
bnN5c2FyZzsKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX2ZhdWx0OwoKCgogICAgICAg
ICAgICAgICAgfSBfX3Byb2Y7CgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAg
ICAgICAgICAgICAgaW50MzJfdCBfX2VudGl0eTsKICAgICAgICAgICAgICAgIH0gX19yY3RsOwoK
ICAgICAgICB9IF9fZGF0YTsKCn0ga19zaWdpbmZvX3Q7Cgp0eXBlZGVmIHN0cnVjdCBzaWdxdWV1
ZSB7CiAgICAgICAgc3RydWN0IHNpZ3F1ZXVlICpzcV9uZXh0OwogICAgICAgIGtfc2lnaW5mb190
IHNxX2luZm87CiAgICAgICAgdm9pZCAoKnNxX2Z1bmMpKHN0cnVjdCBzaWdxdWV1ZSAqKTsKICAg
ICAgICB2b2lkICpzcV9iYWNrcHRyOwoKfSBzaWdxdWV1ZV90OwojIDQ2NyAiL3Vzci9pbmNsdWRl
L3N5cy9zaWdpbmZvLmgiIDMgNAp9CiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAyIDMg
NAojIDEgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1
ZGUvc3lzL3Byb2NzZXQuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylwcm9jc2V0LmgJMS4yMAkw
MC8wMS8xMSBTTUkiIAoKCmV4dGVybiAiQyIgewojIDQxICIvdXNyL2luY2x1ZGUvc3lzL3Byb2Nz
ZXQuaCIgMyA0CnR5cGVkZWYgZW51bQoKICAgICAgICBpZHR5cGUKCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgUF9QSUQsCiAgICAgICAgUF9QUElELAogICAgICAgIFBfUEdJRCwKCiAgICAgICAg
UF9TSUQsCiAgICAgICAgUF9DSUQsCiAgICAgICAgUF9VSUQsCiAgICAgICAgUF9HSUQsCiAgICAg
ICAgUF9BTEwsCiAgICAgICAgUF9MV1BJRCwKICAgICAgICBQX1RBU0tJRCwKICAgICAgICBQX1BS
T0pJRAp9IGlkdHlwZV90OwojIDY3ICIvdXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMyA0CnR5
cGVkZWYgZW51bSBpZG9wIHsKICAgICAgICBQT1BfRElGRiwKCgogICAgICAgIFBPUF9BTkQsCgoK
ICAgICAgICBQT1BfT1IsCgoKICAgICAgICBQT1BfWE9SCgoKfSBpZG9wX3Q7CgoKCgoKCgp0eXBl
ZGVmIHN0cnVjdCBwcm9jc2V0IHsKICAgICAgICBpZG9wX3QgcF9vcDsKCgoKCiAgICAgICAgaWR0
eXBlX3QgcF9saWR0eXBlOwoKCiAgICAgICAgaWRfdCBwX2xpZDsKCiAgICAgICAgaWR0eXBlX3Qg
cF9yaWR0eXBlOwoKCiAgICAgICAgaWRfdCBwX3JpZDsKfSBwcm9jc2V0X3Q7CiMgMTMyICIvdXNy
L2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMyA0Cn0KIyAyNyAiL3Vzci9pbmNsdWRlL3N5cy93YWl0
LmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewojIDg2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIg
MyA0CmV4dGVybiBwaWRfdCB3YWl0KGludCAqKTsKZXh0ZXJuIHBpZF90IHdhaXRwaWQocGlkX3Qs
IGludCAqLCBpbnQpOwoKCmV4dGVybiBpbnQgd2FpdGlkKGlkdHlwZV90LCBpZF90LCBzaWdpbmZv
X3QgKiwgaW50KTsKZXh0ZXJuIHBpZF90IHdhaXQzKGludCAqLCBpbnQsIHN0cnVjdCBydXNhZ2Ug
Kik7CgoKCgpleHRlcm4gcGlkX3Qgd2FpdDQocGlkX3QsIGludCAqLCBpbnQsIHN0cnVjdCBydXNh
Z2UgKik7CiMgMTE4ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMyA0Cn0KIyAyMyAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAojIDY0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApl
eHRlcm4gIkMiIHsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGxvbmcgbG9uZyBxdW90Owog
ICAgICAgIGxvbmcgbG9uZyByZW07Cn0gbGxkaXZfdDsKIyAxMDkgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMyA0CmV4dGVybiBpbnQgcmFuZF9yKHVuc2lnbmVkIGludCAqKTsKCgpleHRlcm4gdm9p
ZCBfZXhpdGhhbmRsZSh2b2lkKTsKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCh2b2lkKTsKZXh0
ZXJuIGRvdWJsZSBlcmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gbG9uZyBqcmFuZDQ4
KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gdm9pZCBsY29uZzQ4KHVuc2lnbmVkIHNob3J0ICop
OwpleHRlcm4gbG9uZyBscmFuZDQ4KHZvaWQpOwpleHRlcm4gbG9uZyBtcmFuZDQ4KHZvaWQpOwpl
eHRlcm4gbG9uZyBucmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gdW5zaWduZWQgc2hv
cnQgKnNlZWQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJuIHZvaWQgc3JhbmQ0OChsb25nKTsK
ZXh0ZXJuIGludCBwdXRlbnYoY2hhciAqKTsKZXh0ZXJuIHZvaWQgc2V0a2V5KGNvbnN0IGNoYXIg
Kik7CiMgMTUwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gaW50IG1rc3RlbXAo
Y2hhciAqKTsKCgoKCmV4dGVybiBpbnQgbWtzdGVtcDY0KGNoYXIgKik7CgoKCgoKZXh0ZXJuIGxv
bmcgYTY0bChjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqZWN2dChkb3VibGUsIGludCwgaW50
ICosIGludCAqKTsKZXh0ZXJuIGNoYXIgKmZjdnQoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7
CmV4dGVybiBjaGFyICpnY3Z0KGRvdWJsZSwgaW50LCBjaGFyICopOwpleHRlcm4gaW50IGdldHN1
Ym9wdChjaGFyICoqLCBjaGFyICpjb25zdCAqLCBjaGFyICoqKTsKZXh0ZXJuIGludCBncmFudHB0
KGludCk7CmV4dGVybiBjaGFyICppbml0c3RhdGUodW5zaWduZWQsIGNoYXIgKiwgc2l6ZV90KTsK
ZXh0ZXJuIGNoYXIgKmw2NGEobG9uZyk7CmV4dGVybiBjaGFyICpta3RlbXAoY2hhciAqKTsKZXh0
ZXJuIGNoYXIgKnB0c25hbWUoaW50KTsKZXh0ZXJuIGxvbmcgcmFuZG9tKHZvaWQpOwpleHRlcm4g
Y2hhciAqcmVhbHBhdGgoY29uc3QgY2hhciAqLCBjaGFyICopOwpleHRlcm4gY2hhciAqc2V0c3Rh
dGUoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgc3JhbmRvbSh1bnNpZ25lZCk7CmV4dGVybiBp
bnQgdHR5c2xvdCh2b2lkKTsKZXh0ZXJuIGludCB1bmxvY2twdChpbnQpOwpleHRlcm4gdm9pZCAq
dmFsbG9jKHNpemVfdCk7CgoKCgpleHRlcm4gdm9pZCBjbG9zZWZyb20oaW50KTsKZXh0ZXJuIGlu
dCBkdXAyKGludCwgaW50KTsKZXh0ZXJuIGludCBmZHdhbGsoaW50ICgqKSh2b2lkICosIGludCks
IHZvaWQgKik7CmV4dGVybiBjaGFyICpxZWN2dChsb25nIGRvdWJsZSwgaW50LCBpbnQgKiwgaW50
ICopOwpleHRlcm4gY2hhciAqcWZjdnQobG9uZyBkb3VibGUsIGludCwgaW50ICosIGludCAqKTsK
ZXh0ZXJuIGNoYXIgKnFnY3Z0KGxvbmcgZG91YmxlLCBpbnQsIGNoYXIgKik7CmV4dGVybiBjaGFy
ICpnZXRjd2QoY2hhciAqLCBzaXplX3QpOwpleHRlcm4gY29uc3QgY2hhciAqZ2V0ZXhlY25hbWUo
dm9pZCk7CmV4dGVybiBjaGFyICpnZXRsb2dpbih2b2lkKTsKZXh0ZXJuIGludCBnZXRvcHQoaW50
LCBjaGFyICpjb25zdCAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqb3B0YXJnOwpleHRl
cm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CmV4dGVybiBjaGFyICpnZXRwYXNzKGNvbnN0
IGNoYXIgKik7CmV4dGVybiBjaGFyICpnZXRwYXNzcGhyYXNlKGNvbnN0IGNoYXIgKik7CmV4dGVy
biBpbnQgZ2V0cHcodWlkX3QsIGNoYXIgKik7CmV4dGVybiBpbnQgaXNhdHR5KGludCk7CmV4dGVy
biB2b2lkICptZW1hbGlnbihzaXplX3QsIHNpemVfdCk7CmV4dGVybiBjaGFyICp0dHluYW1lKGlu
dCk7CgoKZXh0ZXJuIGxvbmcgbG9uZyBhdG9sbChjb25zdCBjaGFyICopOwpleHRlcm4gbG9uZyBs
b25nIGxsYWJzKGxvbmcgbG9uZyk7CmV4dGVybiBsbGRpdl90IGxsZGl2KGxvbmcgbG9uZywgbG9u
ZyBsb25nKTsKZXh0ZXJuIGNoYXIgKmxsdG9zdHIobG9uZyBsb25nLCBjaGFyICopOwpleHRlcm4g
bG9uZyBsb25nIHN0cnRvbGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4gdW5z
aWduZWQgbG9uZyBsb25nIHN0cnRvdWxsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0
ZXJuIGNoYXIgKnVsbHRvc3RyKHVuc2lnbmVkIGxvbmcgbG9uZywgY2hhciAqKTsKIyAzMTIgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0Cn0KIyA1MyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2NzdGRsaWIiIDIgMwojIDg0ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvY3N0ZGxpYiIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmRpdl90Owog
IHVzaW5nIDo6bGRpdl90OwoKICB1c2luZyA6OmFib3J0OwogIHVzaW5nIDo6YWJzOwogIHVzaW5n
IDo6YXRleGl0OwogIHVzaW5nIDo6YXRvZjsKICB1c2luZyA6OmF0b2k7CiAgdXNpbmcgOjphdG9s
OwogIHVzaW5nIDo6YnNlYXJjaDsKICB1c2luZyA6OmNhbGxvYzsKICB1c2luZyA6OmRpdjsKICB1
c2luZyA6OmV4aXQ7CiAgdXNpbmcgOjpmcmVlOwogIHVzaW5nIDo6Z2V0ZW52OwogIHVzaW5nIDo6
bGFiczsKICB1c2luZyA6OmxkaXY7CiAgdXNpbmcgOjptYWxsb2M7CiAgdXNpbmcgOjptYmxlbjsK
ICB1c2luZyA6Om1ic3Rvd2NzOwogIHVzaW5nIDo6bWJ0b3djOwogIHVzaW5nIDo6cXNvcnQ7CiAg
dXNpbmcgOjpyYW5kOwogIHVzaW5nIDo6cmVhbGxvYzsKICB1c2luZyA6OnNyYW5kOwogIHVzaW5n
IDo6c3RydG9kOwogIHVzaW5nIDo6c3RydG9sOwogIHVzaW5nIDo6c3RydG91bDsKICB1c2luZyA6
OnN5c3RlbTsKICB1c2luZyA6Ondjc3RvbWJzOwogIHVzaW5nIDo6d2N0b21iOwoKICBpbmxpbmUg
bG9uZwogIGFicyhsb25nIF9faSkgeyByZXR1cm4gbGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2
X3QKICBkaXYobG9uZyBfX2ksIGxvbmcgX19qKSB7IHJldHVybiBsZGl2KF9faSwgX19qKTsgfQp9
CiMgNjggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAyIDMKCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL25l
dyIgMSAzCiMgNDIgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9uZXciIDMK
IyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvZXhjZXB0aW9uIiAxIDMK
IyA0MCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2V4Y2VwdGlvbiIgMwpl
eHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CiMgNTIgIi9zcGFjZS9zbmIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMy9leGNlcHRpb24iIDMKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVi
bGljOgogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigp
IHRocm93KCk7CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7
CiAgfTsKCgoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBw
dWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFk
X2V4Y2VwdGlvbigpIHRocm93KCk7CiAgfTsKCgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9o
YW5kbGVyKSAoKTsKCiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCgog
IHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93
KCk7CgoKICB2b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsK
CgogIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIp
IHRocm93KCk7CgoKICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy
bl9fKSk7CiMgMTAwICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvZXhjZXB0
aW9uIiAzCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9CgpuYW1lc3BhY2Ug
X19nbnVfY3h4CnsKIyAxMTMgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9l
eGNlcHRpb24iIDMKICB2b2lkIF9fdmVyYm9zZV90ZXJtaW5hdGVfaGFuZGxlciAoKTsKfQoKfQoj
IDQzICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvbmV3IiAyIDMKCmV4dGVy
biAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1Ymxp
YyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KCgog
ICAgdmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3coKTsKICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190
IHsgfTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CgoKICB0eXBlZGVmIHZvaWQg
KCpuZXdfaGFuZGxlcikoKTsKCiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyKG5ld19oYW5k
bGVyKSB0aHJvdygpOwp9CiMgODIgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9uZXciIDMKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRf
YWxsb2MpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFk
X2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCopIHRocm93KCk7CnZvaWQgb3BlcmF0
b3IgZGVsZXRlW10odm9pZCopIHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVf
dCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShz
dGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9y
IGRlbGV0ZSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJh
dG9yIGRlbGV0ZVtdKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgoKaW5s
aW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJvdygpIHsg
cmV0dXJuIF9fcDsgfQppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZv
aWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KCgppbmxpbmUgdm9pZCBvcGVyYXRvciBk
ZWxldGUgKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH07CmlubGluZSB2b2lkIG9wZXJhdG9yIGRl
bGV0ZVtdKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH07Cgp9CiMgNzAgIi9zcGFjZS9zbmIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvc3Bh
Y2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvaW9zZndkIiAxIDMKIyA0MyAiL3NwYWNl
L3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lvc2Z3ZCIgMwoKCgoKIyAxICIvc3BhY2Uv
c25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAz
NCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvZnVuY3RleGNlcHQu
aCIgMwojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9leGNlcHRpb25f
ZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhy
b3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lk
KTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19i
YWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19y
dW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19z
KTsKfQojIDQ4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvaW9zZndkIiAy
IDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf
Q2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFz
cyBiYXNpY19pc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW07Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz
PF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAg
ICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj
X3N0cmluZ2J1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
ID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxv
Y2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+
LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNs
YXNzIGJhc2ljX29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUg
X0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFt
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry
YWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAg
Y2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJl
YW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf
dHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAg
ICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIG9zdHJl
YW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7CiMgMTMzICIvc3BhY2Uvc25iL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvaW9zZndkIiAzCiAgdHlwZWRlZiBiYXNpY19pb3M8Y2hh
cj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+IHN0cmVhbWJ1ZjsKICB0eXBl
ZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08
Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXI+IGlvc3RyZWFtOwog
IHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2lj
X2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJp
bmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVh
bTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXI+IGZpbGVi
dWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBpZnN0cmVhbTsKICB0eXBlZGVmIGJh
c2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTxjaGFy
PiBmc3RyZWFtOwojIDE2MyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lv
c2Z3ZCIgMwp9CiMgNzEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9zdGxfcGFpci5oIiAxIDMKIyA2NCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2JpdHMvc3RsX3BhaXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJz
dF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNl
Y29uZDsKCgoKCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkge30KCgoKCiAgcGFpcihjb25z
dCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30K
CgogIHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8X1Ux
LCBfVTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsK
ICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNv
bmQ7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJh
dG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195
KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3kuZmly
c3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKCnRlbXBsYXRl
IDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYWly
PF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEo
X194ID09IF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBi
b29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwg
X1QyPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEs
IGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYg
X194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsK
fQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+
PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7
CiAgcmV0dXJuICEoX194IDwgX195KTsKfQojIDE0MCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2JpdHMvc3RsX3BhaXIuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFz
cyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIgX195
KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsKfQoKfQojIDcyICIvc3Bh
Y2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAz
CiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvdHlwZV90cmFp
dHMuaCIgMSAzCiMgNTMgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3R5cGVfdHJhaXRzLmgiIDMKIyA5MCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2JpdHMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1Y3QgX190cnVlX3R5cGUge307CnN0cnVjdCBf
X2ZhbHNlX3R5cGUge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0
cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJz
dDsKIyAxMTMgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3R5cGVf
dHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBj
aGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90
cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90
eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBp
bnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
YWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w
bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9u
Zz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19p
bnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy
YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxz
aWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVl
X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJf
dD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1
Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz
X2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs
Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl
cjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3Igewog
ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVzcGFjZSBfX2dudV9jeHgK
ewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xh
c3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw
ZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3I8IF9fZ251X2N4eDo6
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiA+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDczICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMg
NjggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9pdGVyYXRv
cl9iYXNlX3R5cGVzLmgiIDMKCm5hbWVzcGFjZSBzdGQKewojIDgwICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCiAg
c3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IG91dHB1dF9pdGVyYXRvcl90
YWcge307CgogIHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVy
YXRvcl90YWcge307CgogIHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1Ymxp
YyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwojIDEwMiAiL3Nw
YWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2Vf
dHlwZXMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DYXRlZ29yeSwgdHlwZW5hbWUgX1RwLCB0
eXBlbmFtZSBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICAgdHlwZW5hbWUgX1BvaW50
ZXIgPSBfVHAqLCB0eXBlbmFtZSBfUmVmZXJlbmNlID0gX1RwJj4KICAgIHN0cnVjdCBpdGVyYXRv
cgogICAgewoKICAgICAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAg
ICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVy
ZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwoKICAgICAgdHlwZWRl
ZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JdGVyYXRvcj4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5j
ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVy
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsK
ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFp
dHM8X1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJh
dG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVm
IHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwog
ICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgICAgIHR5cGVk
ZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5
cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf
dHlwZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29u
c3QgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl
cj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9j
YXRlZ29yeQogICAgX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCiAgICB7IHJldHVy
biB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpOyB9
Cgp9CiMgNzQgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9h
bGdvYmFzZS5oIiAyIDMKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA2OCAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwoj
IDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2NvbmNlcHRfY2hl
Y2suaCIgMSAzCiMgMzkgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L2NvbmNlcHRfY2hlY2suaCIgMwojIDY5ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQK
ewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgaW5saW5lIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgX19k
aXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAg
ICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgogICAgICB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19u
ID0gMDsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgKytfX2ZpcnN0
OyArK19fbjsKICAgICAgfQogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgX19kaXN0
YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7
CgogICAgIAogICAgICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKICAgIH0KIyAxMDkgIi9zcGFj
ZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1
bmNzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgIGlubGluZSB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUK
ICAgIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCkKICAgIHsKCiAgICAgIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVy
YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlubGluZSB2b2lkCiAgICBfX2FkdmFuY2Uo
X0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7
CgogICAgIAogICAgICB3aGlsZSAoX19uLS0pICsrX19pOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBpbmxp
bmUgdm9pZAogICAgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3Rh
bmNlIF9fbiwKICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsK
CiAgICAgCgogICAgICBpZiAoX19uID4gMCkKICAgICAgICB3aGlsZSAoX19uLS0pICsrX19pOwog
ICAgICBlbHNlCiAgICAgICAgd2hpbGUgKF9fbisrKSAtLV9faTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBp
bmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlz
dGFuY2UgX19uLAogICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAg
ewoKICAgICAKICAgICAgX19pICs9IF9fbjsKICAgIH0KIyAxNjIgIi9zcGFjZS9zbmIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAg
aW5saW5lIHZvaWQKICAgIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9f
bikKICAgIHsKCiAgICAgIF9fYWR2YW5jZShfX2ksIF9fbiwgX19pdGVyYXRvcl9jYXRlZ29yeShf
X2kpKTsKICAgIH0KfQojIDc1ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDY4ICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1lc3BhY2Ugc3Rk
CnsKIyA4OSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0
ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBjbGFzcyByZXZl
cnNlX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJl
bmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIF9JdGVyYXRvciBjdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfSXRlcmF0
b3IgaXRlcmF0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJl
ZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y
Pjo6cG9pbnRlciBwb2ludGVyOwoKICAgIHB1YmxpYzoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRv
cigpIHsgfQoKCgoKICAgICAgZXhwbGljaXQKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRv
cl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkgeyB9CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9y
KGNvbnN0IHJldmVyc2VfaXRlcmF0b3ImIF9feCkKICAgICAgOiBjdXJyZW50KF9feC5jdXJyZW50
KSB7IH0KCgoKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgICByZXZlcnNl
X2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICAgICAgOiBj
dXJyZW50KF9feC5iYXNlKCkpIHsgfQoKCgoKICAgICAgaXRlcmF0b3JfdHlwZQogICAgICBiYXNl
KCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAg
b3BlcmF0b3IqKCkgY29uc3QKICAgICAgewogICAgICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJl
bnQ7CiAgICAgICAgcmV0dXJuICotLV9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHBvaW50ZXIK
ICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKCgoK
CiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAg
ICAgLS1jdXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICBy
ZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgcmV2
ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgIC0tY3VycmVudDsKICAgICAgICBy
ZXR1cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAg
b3BlcmF0b3ItLSgpCiAgICAgIHsKICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQp
CiAgICAgIHsKICAgICAgICByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAg
KytjdXJyZW50OwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZl
cnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAog
ICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgLSBfX24pOyB9CgoKCgoKCiAg
ICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9f
bikKICAgICAgewogICAgICAgIGN1cnJlbnQgLT0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsK
ICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShkaWZm
ZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1
cnJlbnQgKyBfX24pOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJh
dG9yLT0oZGlmZmVyZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJlbnQgKz0gX19u
OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAg
ICAgb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlz
ICsgX19uKTsgfQogICAgfTsKIyAyNjkgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAg
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3ku
YmFzZSgpIDwgX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0
b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgcmV2ZXJz
ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0o
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICBj
b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX195
IDwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwK
ICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAg
ICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
PgogICAgaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlCiAgICBvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf
X3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
CiAgICBvcGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX194KQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9f
eC5iYXNlKCkgLSBfX24pOyB9CiMgMzI5ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWlu
ZXI+CiAgICBjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8
b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHBy
b3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdAogICAg
ICBiYWNrX2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gp
IHsgfQojIDM1NSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs
X2l0ZXJhdG9yLmgiIDMKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y
PSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewog
ICAgICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhp
czsKICAgICAgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcioo
KSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBv
cGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRv
cgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgMzg2ICIv
c3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3IuaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFja19pbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQog
ICAgeyByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDQw
MSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9y
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgZnJvbnRfaW5z
ZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2
b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFp
bmVyKiBjb250YWluZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNv
bnRhaW5lcl90eXBlOwoKCiAgICAgIGV4cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29u
dGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsgfQojIDQyNiAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgZnJvbnRf
aW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29u
c3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXItPnB1c2hfZnJv
bnQoX192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgZnJvbnRf
aW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAg
ICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0
aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50
KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA0NTcgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NvbnRhaW5lcj4KICAgIGlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4K
ICAgIGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAgIHsgcmV0dXJuIGZyb250X2lu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgNDc2ICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBpbnNlcnRfaXRlcmF0b3IKICAgIDogcHVibGlj
IGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAg
ICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKICAgICAgdHlw
ZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CgoKCgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9y
KF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pKQogICAg
ICA6IGNvbnRhaW5lcigmX194KSwgaXRlcihfX2kpIHt9CiMgNTE4ICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBpbnNlcnRf
aXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25z
dF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGl0ZXIgPSBjb250YWluZXItPmlu
c2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICAgICArK2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJl
dHVybiAqdGhpczsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygp
IHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRv
cisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNTUwICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Db250YWluZXIsIHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBpbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJh
dG9yIF9faSkKICAgIHsKICAgICAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihf
X3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX0Nv
bnRhaW5lcjo6aXRlcmF0b3IoX19pKSk7CiAgICB9Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewoK
CgoKCgoKICB1c2luZyBzdGQ6Oml0ZXJhdG9yX3RyYWl0czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9y
OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAg
IGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVl
X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgog
ICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKCiAgICBwdWJs
aWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9p
bnRlcjsKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigp
KSB7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVy
YXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSXRlcj4KICAgICAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyLCBfQ29udGFpbmVyPiYgX19pKQogICAgICAgIDogX01fY3VycmVudChfX2ku
YmFzZSgpKSB7IH0KCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyBy
ZXR1cm4gKl9NX2N1cnJlbnQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNv
bnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAg
ICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19u
b3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0
ZXJhdG9yKF9NX2N1cnJlbnQrKyk7IH0KCgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAg
b3BlcmF0b3ItLSgpIHsgLS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9y
bWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVy
YXRvcihfTV9jdXJyZW50LS0pOyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10o
Y29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJl
bnRbX19uXTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oY29u
c3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJldHVy
biAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGNvbnN0
IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVy
YXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAg
IG9wZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVu
dCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAg
b3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVy
biBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICAgICAgY29uc3QgX0l0
ZXJhdG9yJgogICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQogICAgfTsK
IyA2NTEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9pdGVy
YXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJh
dG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPT0oY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAg
ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4m
IF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBi
b29sCiAgb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250
YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBfX3Jo
cy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0
ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yIT0o
Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAog
ICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5l
cj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAhPSBfX3Jocy5iYXNlKCk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGlu
ZSBib29sCiAgb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9D
b250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAhPSBf
X3Jocy5iYXNlKCk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1l
IF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRv
cjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhz
LAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFp
bmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxp
bmUgYm9vbAogIG9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9D
b250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9f
cmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBf
SXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+
KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywK
ICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5l
cj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhzLmJhc2UoKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5l
IGJvb2wKICBvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u
dGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhz
LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRl
cmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8PShj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAg
ICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy
PiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhzLmJhc2UoKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5l
IGJvb2wKICBvcGVyYXRvcjw9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv
bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9f
cmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBf
SXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+
PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMs
CiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFp
bmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID49IF9fcmhzLmJhc2UoKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5s
aW5lIGJvb2wKICBvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwg
X0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID49
IF9fcmhzLmJhc2UoKTsgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlw
ZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgdHlwZW5hbWUg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj46OmRpZmZlcmVuY2VfdHlw
ZQogIG9wZXJhdG9yLShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFp
bmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIC0gX19yaHMu
YmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRh
aW5lcj4KICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPgog
IG9wZXJhdG9yKyh0eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu
ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2kpCiAgeyByZXR1cm4gX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPihfX2kuYmFzZSgpICsgX19uKTsgfQp9CiMgNzYg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5o
IiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKIyA5MSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y
d2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgaW5saW5lIHZvaWQKICAgIGl0
ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90
eXBlIF9WYWx1ZVR5cGUxOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKCgogICAgIAogICAgIAogICAg
IAogICAgIAoKICAgICAgX1ZhbHVlVHlwZTEgX190bXAgPSAqX19hOwogICAgICAqX19hID0gKl9f
YjsKICAgICAgKl9fYiA9IF9fdG1wOwogICAgfQojIDExOCAiL3NwYWNlL3NuYi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChfVHAmIF9fYSwgX1RwJiBfX2IpCiAgICB7
CgogICAgIAoKICAgICAgX1RwIF9fdG1wID0gX19hOwogICAgICBfX2EgPSBfX2I7CiAgICAgIF9f
YiA9IF9fdG1wOwogICAgfQojIDE0NiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bmxpbmUgY29uc3QgX1RwJgogICAgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikK
ICAgIHsKCiAgICAgCgogICAgICBpZiAoX19iIDwgX19hKSByZXR1cm4gX19iOyByZXR1cm4gX19h
OwogICAgfQojIDE2NiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMv
c3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29u
c3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAg
ICAgCgogICAgICBpZiAoX19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQoj
IDE4NiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg
aW5saW5lIGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2Is
IF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgIGlmIChfX2NvbXAoX19iLCBfX2EpKSByZXR1
cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDIwNCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1heChjb25z
dCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAg
IGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDIy
MSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl
cj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAg
ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJ
dGVyCiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAg
ICAgX0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0
OyBfX24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAg
ICsrX19maXJzdDsKICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jl
c3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAg
IF9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9U
cCogX19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVv
ZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9f
bGFzdCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0
eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1
eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHko
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+
CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1Rw
KiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAg
IHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2NvcHlfYXV4Mihj
b25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LAogICAgICAgICAgICAgICAgX1Rw
KiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
LCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5
X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAg
ICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVl
VHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFs
OwogICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQuYmFzZSgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSkpOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlu
bGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxz
ZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
dXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9fY29weV9hdXgyKF9f
Zmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVy
CiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05v
cm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdC5iYXNlKCksIF9f
bGFzdC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1
dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAg
IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVy
Pjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiMgMzM5ICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRw
dXRJdGVyCiAgICBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9P
dXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFs
OwogICAgICAgcmV0dXJuIF9fY29weV9uaTEoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19O
b3JtYWwoKSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl
cjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAgICBpbmxpbmUgX0JpZGlyZWN0aW9u
YWxJdGVyMgogICAgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwg
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyMiBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0
ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgICAg
ICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQmlkaXJlY3Rp
b25hbEl0ZXI+CiAgICBpbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyCiAgICBfX2NvcHlfYmFja3dh
cmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9f
bjsKICAgICAgZm9yIChfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikKICAg
ICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg
fQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFt
ZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9Cb29sVHlwZT4KICAg
IHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gKICAgIHsKICAgICAgc3RhdGljIF9CaWRp
cmVjdGlvbmFsSXRlcjIKICAgICAgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIF9C
aWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIg
X19yZXN1bHQpCiAgICAgIHsKICAgICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkKF9fZmlyc3Qs
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAg
ICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfX2NvcHlf
YmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICB7CiAgICAgIHN0
YXRpYyBfVHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFz
dCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVtID0g
X19sYXN0IC0gX19maXJzdDsKICAgICAgICBtZW1tb3ZlKF9fcmVzdWx0IC0gX051bSwgX19maXJz
dCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQgLSBfTnVtOwog
ICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19jb3B5
X2JhY2t3YXJkX2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgewog
ICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1Rw
KiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICByZXR1cm4gX19jb3B5X2Jh
Y2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgICAgICAgOjpjb3B5
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9i
YWNrd2FyZF9hdXgoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKICAg
IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo6
aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvciBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9f
Y29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBfQkkyLCBfVHJpdmlhbD4KICAgICAgICAgICAg
ICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2Nv
cHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jl
c3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfQkkyKF9fY29weV9iYWNrd2FyZF9hdXgo
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCkpKTsgfQoKICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dh
cmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19m
YWxzZV90eXBlKQogICAgeyByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJ
Mj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJh
dG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3Jt
YWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihf
X2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgog
ICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9C
STEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkky
IF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lz
X25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9f
Y29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19y
ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX05vcm1hbCgpKTsKICAgIH0KIyA0NzcgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEs
IHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgY29weV9iYWNrd2FyZChfQkkxIF9f
Zmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAg
ICAKCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTE+Ojpf
Tm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1h
bF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKICAgIH0KIyA1MDkg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2
b2lkCiAgICBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBj
b25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgIH0KIyA1
MzEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0
eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgZmlsbF9uKF9PdXRwdXRJdGVyIF9fZmly
c3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKCiAgICAgIGZv
ciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICAgICAqX19maXJzdCA9IF9fdmFs
dWU7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgogIGlubGluZSB2b2lkCiAgZmlsbCh1
bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QsIGNvbnN0IHVuc2ln
bmVkIGNoYXImIF9fYykKICB7CiAgICB1bnNpZ25lZCBjaGFyIF9fdG1wID0gX19jOwogICAgbWVt
c2V0KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lk
CiAgZmlsbChzaWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9fbGFzdCwgY29uc3Qg
c2lnbmVkIGNoYXImIF9fYykKICB7CiAgICBzaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1l
bXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAt
IF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKGNoYXIqIF9fZmlyc3QsIGNoYXIq
IF9fbGFzdCwgY29uc3QgY2hhciYgX19jKQogIHsKICAgIGNoYXIgX190bXAgPSBfX2M7CiAgICBt
ZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xhc3Qg
LSBfX2ZpcnN0KTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIHVu
c2lnbmVkIGNoYXIqCiAgICBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19u
LCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19m
aXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIHNpZ25lZCBjaGFyKgogICAgZmlsbF9u
KGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykKICAgIHsK
ICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAgICByZXR1cm4gX19m
aXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUg
Y2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IGNoYXImIF9f
YykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAgICBy
ZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KIyA2MDYgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgcGFpcjxfSW5wdXRJdGVyMSwg
X0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAg
ICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAg
KytfX2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0
SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjQwICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFy
eVByZWRpY2F0ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0
Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19i
aW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0g
X19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAg
ICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFp
cjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMg
NjY4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jh
c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ
dGVyMj4KICAgIGlubGluZSBib29sCiAgICBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQogICAgewoK
ICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyAr
K19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGlmICghKCpfX2ZpcnN0MSA9PSAqX19maXJz
dDIpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA2
OTkgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0
ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFs
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3By
ZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx
OyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19m
aXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0
cnVlOwogICAgfQojIDczMiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw
ZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQog
ICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAh
PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICAgICAgOyArK19fZmlyc3Qx
LCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0KIyA3NjcgIi9zcGFjZS9zbmIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQ29tcGFy
ZT4KICAgIGJvb2wKICAgIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmly
c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAgZm9y
ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICAg
ICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJz
dDEsICpfX2ZpcnN0MikpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoX19jb21w
KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQog
ICAgICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwog
ICAgfQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2ln
bmVkIGNoYXIqIF9fZmlyc3QxLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLCBjb25zdCB1
bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQogIHsKICAgIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xh
c3QxIC0gX19maXJzdDE7CiAgICBjb25zdCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmly
c3QyOwogICAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0Miwg
bWluKF9fbGVuMSwgX19sZW4yKSk7CiAgICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0
IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKICB9CgogIGlubGluZSBib29sCiAgbGV4aWNvZ3JhcGhp
Y2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIq
IF9fbGFzdDIpCiAgewoKICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qg
c2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgog
IH0KCn0KIyA1NSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIg
MiAzCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Fs
bG9jLmgiIDEgMwojIDg4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0
cy9zdGxfYWxsb2MuaCIgMwojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9jYXNzZXJ0IiAxIDMKIyA0NyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L2Nhc3NlcnQiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMgNAojIDExICIvdXNy
L2luY2x1ZGUvYXNzZXJ0LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpYXNzZXJ0LmgJMS45CTky
LzA3LzE0IFNNSSIgCgoKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0KGNvbnN0
IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwoKCgoKCn0KIyA0OSAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2Nhc3NlcnQiIDIgMwojIDg5ICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3NwYWNlL3Nu
Yi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Z1bmN0ZXhjZXB0Lmgi
IDMKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvZXhjZXB0aW9uX2Rl
ZmluZXMuaCIgMSAzCiMgMzUgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9i
aXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93
X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7
CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
ICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv
aWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVu
dGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7
Cn0KIyA5MCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Fs
bG9jLmgiIDIgMwojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF90aHJlYWRzLmgiIDEgMwojIDU0ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICBzdHJ1Y3Qg
X1JlZmNvdW50X0Jhc2UKICB7CgogICAgdHlwZWRlZiBzaXplX3QgX1JDX3Q7CgoKICAgIHZvbGF0
aWxlIF9SQ190IF9NX3JlZl9jb3VudDsKCgogICAgX19ndGhyZWFkX211dGV4X3QgX01fcmVmX2Nv
dW50X2xvY2s7CgogICAgX1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6IF9NX3JlZl9jb3VudChf
X24pCiAgICB7CgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfX3RtcCA9IHt7MCwgMCwgMCwgMCwg
MHg0ZDU4fSwge3t7MH19fSwgMH07CiAgICAgIF9NX3JlZl9jb3VudF9sb2NrID0gX190bXA7CgoK
CgoKICAgIH0KCiAgICB2b2lkCiAgICBfTV9pbmNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211
dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgKytfTV9yZWZfY291bnQ7CiAgICAg
IF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgIH0KCiAgICBf
UkNfdAogICAgX01fZGVjcigpCiAgICB7CiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9y
ZWZfY291bnRfbG9jayk7CiAgICAgIHZvbGF0aWxlIF9SQ190IF9fdG1wID0gLS1fTV9yZWZfY291
bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAg
ICAgcmV0dXJuIF9fdG1wOwogICAgfQogIH07CiMgMTA5ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgdGVtcGxhdGU8aW50IF9fZHVt
bXk+CiAgICBzdHJ1Y3QgX1N3YXBfbG9ja19zdHJ1Y3QKICAgIHsgc3RhdGljIF9fZ3RocmVhZF9t
dXRleF90IF9TX3N3YXBfbG9jazsgfTsKCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBfX2d0
aHJlYWRfbXV0ZXhfdAogICAgX1N3YXBfbG9ja19zdHJ1Y3Q8X19kdW1teT46Ol9TX3N3YXBfbG9j
ayA9IHt7MCwgMCwgMCwgMCwgMHg0ZDU4fSwge3t7MH19fSwgMH07CgoKCiAgaW5saW5lIHVuc2ln
bmVkIGxvbmcKICBfQXRvbWljX3N3YXAodW5zaWduZWQgbG9uZyAqIF9fcCwgdW5zaWduZWQgbG9u
ZyBfX3EpCiAgewogICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+
OjpfU19zd2FwX2xvY2spOwogICAgdW5zaWduZWQgbG9uZyBfX3Jlc3VsdCA9ICpfX3A7CiAgICAq
X19wID0gX19xOwogICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8
MD46Ol9TX3N3YXBfbG9jayk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKfQojIDE1NSAiL3Nw
YWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpu
YW1lc3BhY2Ugc3RkCnsKICBzdHJ1Y3QgX1NUTF9tdXRleF9sb2NrCiAgewoKCgoKCiAgICBfX2d0
aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOwoKICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemUoKQogICAg
ewojIDE5MiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3Ro
cmVhZHMuaCIgMwogICAgfQoKICAgIHZvaWQKICAgIF9NX2FjcXVpcmVfbG9jaygpCiAgICB7CgoK
CiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9sb2NrKTsKICAgIH0KCiAgICB2b2lkCiAg
ICBfTV9yZWxlYXNlX2xvY2soKQogICAgewoKCgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2Nr
KCZfTV9sb2NrKTsKICAgIH0KICB9OwojIDIyOCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX2F1dG9fbG9jawog
IHsKICAgIF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAgICBfU1RMX2F1dG9fbG9jayhfU1RM
X211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykKICAgIHsgX01fbG9jay5fTV9h
Y3F1aXJlX2xvY2soKTsgfQoKICAgIH5fU1RMX2F1dG9fbG9jaygpIHsgX01fbG9jay5fTV9yZWxl
YXNlX2xvY2soKTsgfQoKICBwcml2YXRlOgogICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9h
dXRvX2xvY2smKTsKICAgIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAg
fTsKCn0KIyA5MSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs
X2FsbG9jLmgiIDIgMwoKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
c3BhcmMtc3VuLXNvbGFyaXMyLjkvYml0cy9hdG9taWNpdHkuaCIgMSAzCiMgNzQgIi9zcGFjZS9z
bmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zcGFyYy1zdW4tc29sYXJpczIuOS9iaXRzL2F0
b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsKCnRlbXBsYXRlIDxpbnQgX19p
bnN0PgpzdHJ1Y3QgX19BdG9taWNpdHlfbG9jawp7CiAgc3RhdGljIHVuc2lnbmVkIGNoYXIgX1Nf
YXRvbWljaXR5X2xvY2s7Cn07Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KdW5zaWduZWQgY2hhciBf
X0F0b21pY2l0eV9sb2NrPF9faW5zdD46Ol9TX2F0b21pY2l0eV9sb2NrID0gMDsKCnRlbXBsYXRl
IHVuc2lnbmVkIGNoYXIgX19BdG9taWNpdHlfbG9jazwwPjo6X1NfYXRvbWljaXR5X2xvY2s7Cgpz
dGF0aWMgaW50Cl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19leGNoYW5nZV9hbmRfYWRk
ICh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsKICBfQXRvbWljX3dv
cmQgX19yZXN1bHQsIF9fdG1wOwoKICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiMToJbGRzdHViCVsl
MV0sICUwXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAiCWNtcAklMCwgMFxuXHQiCiAgICAg
ICAgICAgICAgICAgICAgICAgIglibmUJMWJcblx0IgogICAgICAgICAgICAgICAgICAgICAgICIJ
IG5vcCIKICAgICAgICAgICAgICAgICAgICAgICA6ICI9JnIiIChfX3RtcCkKICAgICAgICAgICAg
ICAgICAgICAgICA6ICJyIiAoJl9fQXRvbWljaXR5X2xvY2s8MD46Ol9TX2F0b21pY2l0eV9sb2Nr
KQogICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogIF9fcmVzdWx0ID0gKl9fbWVt
OwogICpfX21lbSArPSBfX3ZhbDsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RiCSUlZzAsIFsl
MF0iCiAgICAgICAgICAgICAgICAgICAgICAgOgogICAgICAgICAgICAgICAgICAgICAgIDogInIi
ICgmX19BdG9taWNpdHlfbG9jazwwPjo6X1NfYXRvbWljaXR5X2xvY2spCiAgICAgICAgICAgICAg
ICAgICAgICAgOiAibWVtb3J5Iik7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpzdGF0aWMgdm9pZApf
X2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fYXRvbWljX2FkZCAodm9sYXRpbGUgX0F0b21p
Y193b3JkKiBfX21lbSwgaW50IF9fdmFsKQp7CiAgX0F0b21pY193b3JkIF9fdG1wOwoKICBfX2Fz
bV9fIF9fdm9sYXRpbGVfXygiMToJbGRzdHViCVslMV0sICUwXG5cdCIKICAgICAgICAgICAgICAg
ICAgICAgICAiCWNtcAklMCwgMFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgIglibmUJMWJc
blx0IgogICAgICAgICAgICAgICAgICAgICAgICIJIG5vcCIKICAgICAgICAgICAgICAgICAgICAg
ICA6ICI9JnIiIChfX3RtcCkKICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAoJl9fQXRvbWlj
aXR5X2xvY2s8MD46Ol9TX2F0b21pY2l0eV9sb2NrKQogICAgICAgICAgICAgICAgICAgICAgIDog
Im1lbW9yeSIpOwogICpfX21lbSArPSBfX3ZhbDsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3Ri
CSUlZzAsIFslMF0iCiAgICAgICAgICAgICAgICAgICAgICAgOgogICAgICAgICAgICAgICAgICAg
ICAgIDogInIiICgmX19BdG9taWNpdHlfbG9jazwwPjo6X1NfYXRvbWljaXR5X2xvY2spCiAgICAg
ICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7Cn0KIyA5MyAiL3NwYWNlL3NuYi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7
CiMgMTA0ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxs
b2MuaCIgMwogIGNsYXNzIF9fbmV3X2FsbG9jCiAgewogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lk
KgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KF9f
bik7IH0KCiAgICBzdGF0aWMgdm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCkK
ICAgIHsgOjpvcGVyYXRvciBkZWxldGUoX19wKTsgfQogIH07CiMgMTI3ICIvc3BhY2Uvc25iL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGlu
dCBfX2luc3Q+CiAgICBjbGFzcyBfX21hbGxvY19hbGxvY190ZW1wbGF0ZQogICAgewogICAgcHJp
dmF0ZToKICAgICAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90KTsKCgoKICAgICAg
c3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7CgogICAgcHVibGlj
OgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgewog
ICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYgKF9fYnVpbHRp
bl9leHBlY3QoX19yZXN1bHQgPT0gMCwgMCkpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX29vbV9t
YWxsb2MoX19uKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KCiAgICAgIHN0YXRp
YyB2b2lkCiAgICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgKQogICAgICB7IGZyZWUo
X19wKTsgfQojIDE2MiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMv
c3RsX2FsbG9jLmgiIDMKICAgICAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIo
dm9pZCAoKl9fZikoKSkpKCkKICAgICAgewogICAgICAgIHZvaWQgKCogX19vbGQpKCkgPSBfX21h
bGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxl
ciA9IF9fZjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KICAgIH07CgoKICB0ZW1wbGF0
ZTxpbnQgX19pbnN0PgogICAgdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7CgogIHRlbXBsYXRlPGludCBfX2lu
c3Q+CiAgICB2b2lkKgogICAgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6CiAgICBf
U19vb21fbWFsbG9jKHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCogX19teV9tYWxsb2Nf
aGFuZGxlcikoKTsKICAgICAgdm9pZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7KQogICAgICAg
IHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFu
ZGxlcjsKICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fbXlfbWFsbG9jX2hhbmRsZXIg
PT0gMCwgMCkpCiAgICAgICAgICAgIF9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAgICAgICAoKl9f
bXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwog
ICAgICAgICAgaWYgKF9fcmVzdWx0KQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAg
ICAgfQogICAgfQojIDIxNyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvc3RsX2FsbG9jLmgiIDMKICB0eXBlZGVmIF9fbmV3X2FsbG9jIF9fbWVtX2ludGVyZmFjZTsK
IyAyMzAgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGxv
Yy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFz
cyBfX3NpbXBsZV9hbGxvYwogICAgewogICAgcHVibGljOgogICAgICBzdGF0aWMgX1RwKgogICAg
ICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgX1RwKiBfX3JldCA9IDA7CiAg
ICAgICAgaWYgKF9fbikKICAgICAgICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9j
OjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpOwogICAgICAgIHJldHVybiBfX3JldDsKICAg
ICAgfQoKICAgICAgc3RhdGljIF9UcCoKICAgICAgYWxsb2NhdGUoKQogICAgICB7IHJldHVybiAo
X1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9CgogICAgICBzdGF0aWMgdm9p
ZAogICAgICBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgICB7IGlmICgwICE9
IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mIChfVHApKTsgfQoKICAg
ICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgICAgeyBfQWxsb2M6
OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9CiAgICB9OwojIDI3MSAiL3NwYWNlL3Nu
Yi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBfX2RlYnVnX2FsbG9jCiAgICB7CiAgICBwcml2
YXRlOgoKCiAgICAgIGVudW0ge19TX2V4dHJhID0gOH07CgogICAgcHVibGljOgogICAgICBzdGF0
aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIGNoYXIq
IF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEp
OwogICAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgICAgICByZXR1cm4gX19yZXN1
bHQgKyAoaW50KSBfU19leHRyYTsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVh
bGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBjaGFyKiBfX3Jl
YWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICAgICAodm9pZCkoKCooc2l6
ZV90KilfX3JlYWxfcCA9PSBfX24pIHx8IChfX2Fzc2VydCgiKihzaXplX3QqKV9fcmVhbF9wID09
IF9fbiIsICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxs
b2MuaCIsIDI5MiksIDApKTsKICAgICAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19yZWFsX3AsIF9f
biArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgfQojIDMwOSAiL3NwYWNlL3NuYi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsbG9jLmgiIDMKICAgIH07CiMgMzQyICIvc3BhY2Uv
c25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBs
YXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2xhc3MgX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlCiAgICB7CiAgICBwcml2YXRlOgogICAgICBlbnVtIHtfQUxJR04gPSA4fTsKICAg
ICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01B
WF9CWVRFUyAvIF9BTElHTn07CgogICAgICB1bmlvbiBfT2JqCiAgICAgIHsKICAgICAgICB1bmlv
biBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFd
OwogICAgICB9OwoKICAgICAgc3RhdGljIF9PYmoqIHZvbGF0aWxlIF9TX2ZyZWVfbGlzdFtfTkZS
RUVMSVNUU107CgoKICAgICAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAgICAgIHN0YXRp
YyBjaGFyKiBfU19lbmRfZnJlZTsKICAgICAgc3RhdGljIHNpemVfdCBfU19oZWFwX3NpemU7Cgog
ICAgICBzdGF0aWMgX1NUTF9tdXRleF9sb2NrIF9TX25vZGVfYWxsb2NhdG9yX2xvY2s7CgogICAg
ICBzdGF0aWMgc2l6ZV90CiAgICAgIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQogICAgICB7
IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0xKSAmIH4oKHNpemVfdCkgX0FM
SUdOIC0gMSkpOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIF9TX2ZyZWVsaXN0X2luZGV4
KHNpemVfdCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpX0FM
SUdOIC0gMSkvKHNpemVfdClfQUxJR04gLSAxKTsgfQoKCgogICAgICBzdGF0aWMgdm9pZCoKICAg
ICAgX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCgogICAgICBzdGF0aWMgY2hhcioKICAgICAgX1Nf
Y2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgoKICAgICAgc3RydWN0
IF9Mb2NrCiAgICAgIHsKICAgICAgICBfTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9h
bGxvY2F0b3JfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogICAgICAgIH5fTG9jaygpIHsgaWYg
KF9fdGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQog
ICAgICB9IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CiAgICAgIGZyaWVuZCBzdHJ1Y3Qg
X0xvY2s7CgogICAgICBzdGF0aWMgX0F0b21pY193b3JkIF9TX2ZvcmNlX25ldzsKCiAgICBwdWJs
aWM6CgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAg
ewogICAgICAgIHZvaWQqIF9fcmV0ID0gMDsKCgoKCiAgICAgICAgaWYgKF9TX2ZvcmNlX25ldyA9
PSAwKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoZ2V0ZW52KCJHTElCQ1BQX0ZPUkNFX05F
VyIpKQogICAgICAgICAgICAgIF9fYXRvbWljX2FkZCgmX1NfZm9yY2VfbmV3LCAxKTsKICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgIF9fYXRvbWljX2FkZCgmX1NfZm9yY2VfbmV3LCAtMSk7
CgogICAgICAgICAgICAodm9pZCkoKF9TX2ZvcmNlX25ldyAhPSAwKSB8fCAoX19hc3NlcnQoIl9T
X2ZvcmNlX25ldyAhPSAwIiwgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9i
aXRzL3N0bF9hbGxvYy5oIiwgNDExKSwgMCkpOwogICAgICAgICAgfQoKICAgICAgICBpZiAoKF9f
biA+IChzaXplX3QpIF9NQVhfQllURVMpIHx8IChfU19mb3JjZV9uZXcgPiAwKSkKICAgICAgICAg
IF9fcmV0ID0gX19uZXdfYWxsb2M6OmFsbG9jYXRlKF9fbik7CiAgICAgICAgZWxzZQogICAgICAg
ICAgewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19mcmVl
X2xpc3QKICAgICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKCiAgICAgICAg
ICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAgICAgICAgX09iaiogX19yZXN0cmljdF9f
IF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICBpZiAoX19idWlsdGluX2V4
cGVjdChfX3Jlc3VsdCA9PSAwLCAwKSkKICAgICAgICAgICAgICBfX3JldCA9IF9TX3JlZmlsbChf
U19yb3VuZF91cChfX24pKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5r
OwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3Jlc3VsdDsKICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcmV0ID09IDAsIDApKQogICAgICAgICAgICAg
IF9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0Owog
ICAgICB9CgoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNp
emVfdCBfX24pCiAgICAgIHsKICAgICAgICBpZiAoKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMp
IHx8IChfU19mb3JjZV9uZXcgPiAwKSkKICAgICAgICAgIF9fbmV3X2FsbG9jOjpkZWFsbG9jYXRl
KF9fcCwgX19uKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIF9PYmoqIHZv
bGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdAogICAgICAgICAgICAgICsgX1Nf
ZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAgICAgICAgX09iaiogX19xID0gKF9PYmoqKV9fcDsK
CgoKCiAgICAgICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAgICAgICAgX19xIC0+
IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAqX19teV9m
cmVlX2xpc3QgPSBfX3E7CiAgICAgICAgICB9CiAgICAgIH0KCgoKCgogICAgfTsKCiAgdGVtcGxh
dGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+IF9BdG9taWNfd29yZAogIF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2ZvcmNlX25ldyA9IDA7CgogIHRl
bXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+
JiwKICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk
cyxfX2luc3Q+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVh
ZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX2Rl
ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD4mLAogICAgICAgICAgICAgICBj
b25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD4mKQogICAgeyBy
ZXR1cm4gZmFsc2U7IH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0
PgogICAgY2hhcioKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z
dD46OgogICAgX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKQogICAg
ewogICAgICBjaGFyKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3Np
emUgKiBfX25vYmpzOwogICAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2ZyZWUgLSBf
U19zdGFydF9mcmVlOwoKICAgICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKQog
ICAgICAgIHsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9T
X3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybiBfX3Jlc3VsdCA7
CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKQogICAgICAg
IHsKICAgICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsKICAgICAg
ICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgICAgX19yZXN1bHQg
PSBfU19zdGFydF9mcmVlOwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVz
OwogICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg
IHsKICAgICAgICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CiAgICAgICAgICAgIDIgKiBfX3Rv
dGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwoKICAgICAgICAgIGlm
IChfX2J5dGVzX2xlZnQgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX09iaiogdm9s
YXRpbGUqIF9fbXlfZnJlZV9saXN0ID0KICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9T
X2ZyZWVsaXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAgICgoX09iaiopX1Nf
c3RhcnRfZnJlZSkgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAg
ICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopIF9fbmV3X2FsbG9jOjphbGxv
Y2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICBpZiAoX1Nfc3RhcnRfZnJlZSA9PSAwKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgICBfT2Jq
KiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgX09iaiogX19wOwoKCgog
ICAgICAgICAgICAgIF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICBmb3IgKDsgX19pIDw9IChz
aXplX3QpIF9NQVhfQllURVM7IF9faSArPSAoc2l6ZV90KSBfQUxJR04pCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1Nf
ZnJlZWxpc3RfaW5kZXgoX19pKTsKICAgICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9s
aXN0OwogICAgICAgICAgICAgICAgICBpZiAoX19wICE9IDApCiAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVf
bGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilf
X3A7CiAgICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBf
X2k7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX1NfY2h1bmtfYWxsb2MoX19zaXplLCBf
X25vYmpzKTsKCgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChj
aGFyKilfX25ld19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwoKCiAgICAgICAgICAg
IH0KICAgICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICAgIF9T
X2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgcmV0
dXJuIF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2Jqcyk7CiAgICAgICAgfQogICAgfQoKCgoK
CiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19k
ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVf
dCBfX24pCiAgICB7CiAgICAgIGludCBfX25vYmpzID0gMjA7CiAgICAgIGNoYXIqIF9fY2h1bmsg
PSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAgICBfT2JqKiB2b2xhdGlsZSogX19t
eV9mcmVlX2xpc3Q7CiAgICAgIF9PYmoqIF9fcmVzdWx0OwogICAgICBfT2JqKiBfX2N1cnJlbnRf
b2JqOwogICAgICBfT2JqKiBfX25leHRfb2JqOwogICAgICBpbnQgX19pOwoKICAgICAgaWYgKDEg
PT0gX19ub2JqcykKICAgICAgICByZXR1cm4gX19jaHVuazsKICAgICAgX19teV9mcmVlX2xpc3Qg
PSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCiAgICAgIF9fcmVzdWx0
ID0gKF9PYmoqKV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAo
X09iaiopKF9fY2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspCiAgICAg
ICAgewogICAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAgICAgICAgICBfX25l
eHRfb2JqID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAgICAgICBpZiAo
X19ub2JqcyAtIDEgPT0gX19pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jdXJyZW50
X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9m
cmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1
bHQ7CiAgICB9CiMgNjE1ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0
cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgog
ICAgX1NUTF9tdXRleF9sb2NrCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
LF9faW5zdD46Ol9TX25vZGVfYWxsb2NhdG9yX2xvY2sKICAgID0geyB7ezAsIDAsIDAsIDAsIDB4
NGQ1OH0sIHt7ezB9fX0sIDB9IH07CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19p
bnN0PgogICAgY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+
OjpfU19zdGFydF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu
c3Q+CiAgICBjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46
Ol9TX2VuZF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+
CiAgICBzaXplX3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+Ojpf
U19oZWFwX3NpemUgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4K
ICAgIHR5cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6
X09iaiogdm9sYXRpbGUKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19p
bnN0Pjo6X1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1bHRfYWxs
b2NfdGVtcGxhdGU8dHJ1ZSwwPiBfX2FsbG9jOwogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3Rl
bXBsYXRlPGZhbHNlLDA+IF9fc2luZ2xlX2NsaWVudF9hbGxvYzsKIyA2NTEgIi9zcGFjZS9zbmIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgY2xhc3MgYWxsb2NhdG9yCiAgICB7CiAgICAgIHR5cGVkZWYgX19h
bGxvYyBfQWxsb2M7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK
ICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9U
cCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgICAg
IHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9y
ZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgYWxs
b2NhdG9yPF9UcDE+IG90aGVyOyB9OwoKICAgICAgYWxsb2NhdG9yKCkgdGhyb3coKSB7fQogICAg
ICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQogICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHAxPgogICAgICAgIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3I8X1RwMT4mKSB0
aHJvdygpIHt9CiAgICAgIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogICAgICBwb2ludGVyCiAg
ICAgIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKICAgICAg
Y29uc3RfcG9pbnRlcgogICAgICBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsg
cmV0dXJuICZfX3g7IH0KCgoKICAgICAgX1RwKgogICAgICBhbGxvY2F0ZShzaXplX3R5cGUgX19u
LCBjb25zdCB2b2lkKiA9IDApCiAgICAgIHsKICAgICAgICBfVHAqIF9fcmV0ID0gMDsKICAgICAg
ICBpZiAoX19uKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoX19uIDw9IHRoaXMtPm1heF9z
aXplKCkpCiAgICAgICAgICAgICAgX19yZXQgPSBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFs
bG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICBfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsK
ICAgICAgfQoKCiAgICAgIHZvaWQKICAgICAgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90
eXBlIF9fbikKICAgICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1Rw
KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkgeyBy
ZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogICAgICB2b2lkIGNvbnN0cnVjdChw
b2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAg
ICAgIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQogICAgfTsKCiAg
dGVtcGxhdGU8PgogICAgY2xhc3MgYWxsb2NhdG9yPHZvaWQ+CiAgICB7CiAgICBwdWJsaWM6CiAg
ICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlm
ZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYg
Y29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7
CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCByZWJpbmQKICAg
ICAgICB7IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOyB9OwogICAgfTsKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCiAgICB7
IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgog
ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25z
dCBhbGxvY2F0b3I8X1QyPiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQojIDc0NyAiL3NwYWNlL3Nu
Yi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfX2FsbG9jYXRvcgog
ICAgewogICAgICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICAgICAgdHlwZWRlZiBzaXpl
X3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg
ICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3Rf
cG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25z
dCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3RydWN0IHJlYmluZAogICAgICAg
IHsgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOyB9OwoKICAgICAgX19h
bGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgICAgIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9y
JiBfX2EpIHRocm93KCkKICAgICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWlu
Z19hbGxvYykge30KCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgX19hbGxv
Y2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiYgX19hKSB0aHJvdygpCiAgICAg
ICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KCiAgICAg
IH5fX2FsbG9jYXRvcigpIHRocm93KCkge30KCiAgICAgIHBvaW50ZXIKICAgICAgYWRkcmVzcyhy
ZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgogICAgICBjb25zdF9wb2ludGVy
CiAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsg
fQoKCgogICAgICBfVHAqCiAgICAgIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQq
ID0gMCkKICAgICAgewogICAgICAgIF9UcCogX19yZXQgPSAwOwogICAgICAgIGlmIChfX24pCiAg
ICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICog
c2l6ZW9mKF9UcCkpKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCgogICAgICB2b2lk
CiAgICAgIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICAgIHsgX191
bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAg
ICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gc2l6
ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogICAgICB2b2lkCiAgICAgIGNvbnN0cnVjdChwb2lu
dGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CgogICAg
ICB2b2lkCiAgICAgIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KICAgIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfX2FsbG9jYXRvcjx2b2lk
LCBfQWxsb2M+CiAgICB7CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlw
ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHZvaWQqIHBvaW50
ZXI7CiAgICAgIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRl
ZiB2b2lkIHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAg
IHN0cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9j
PiBvdGhlcjsgfTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19hbGxvY2F0b3I8X1Rw
LF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCxfQWxs
b2M+JiBfX2EyKQogICAgeyByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5f
X3VuZGVybHlpbmdfYWxsb2M7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxf
VHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwg
X0FsbG9jPiYgX19hMikKICAgIHsgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jICE9IF9f
YTIuX191bmRlcmx5aW5nX2FsbG9jOyB9CgoKCgoKCgogIHRlbXBsYXRlPGludCBpbnN0PgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8
aW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0
PiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu
c3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
PiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4m
LCBjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShj
b25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mLCBjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4m
KQogICAgeyByZXR1cm4gZmFsc2U7IH0KIyA5MDAgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0
eXBlbmFtZSBfQWxsb2NhdG9yPgogICAgc3RydWN0IF9BbGxvY190cmFpdHMKICAgIHsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0FsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyIGFsbG9jYXRv
cl90eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2Nh
dG9yPgogICAgY29uc3QgYm9vbCBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2lu
c3RhbmNlbGVzczsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMT4KICAg
IHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KICAgIHsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBf
X3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIGFs
bG9jYXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwLCBpbnQgX19pbnN0PgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxv
Y19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
X1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAs
IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICAgICAgdHlw
ZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBh
bGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbCBfX3Ro
cmVhZHMsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgewogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxl
X2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+
CiAgICAgIF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgIGFsbG9jYXRvcl90
eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+CiAgICB7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5
cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2Nf
dHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9j
PiA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg
dHlwZW5hbWUgX1RwMSwgaW50IF9faW5zdD4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2FsbG9j
X3RlbXBsYXRlPF9faW5zdD4gPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2lu
c3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX21h
bGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYg
X19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2Nh
dG9yX3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEs
IGJvb2wgX190aHIsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9f
YWxsb2NhdG9yPF9UcDEsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+
ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsK
ICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocixfX2luc3Q+ID4KICAgICAgX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxv
Y2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAg
IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt
ZSBfVHAxLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9f
YWxsb2NhdG9yPF9UcDEsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4KICAgIHsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3Np
bXBsZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogICAg
ICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2Nh
dG9yX3R5cGU7CiAgICB9OwoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjxj
aGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPHdjaGFyX3Q+OwogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwwPjsKfQojIDU2
ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAyIDMKIyAxICIv
c3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfY29uc3RydWN0Lmgi
IDEgMwojIDY3ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf
Y29uc3RydWN0LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9U
MSwgY2xhc3MgX1QyPgogICAgaW5saW5lIHZvaWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIGNv
bnN0IF9UMiYgX192YWx1ZSkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1Qx
KF9fdmFsdWUpOyB9CgoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVDE+CiAgICBpbmxpbmUgdm9p
ZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4o
X19wKSkgX1QxKCk7IH0KIyA5OCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0
b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQoj
IDExMiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2NvbnN0
cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUg
dm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9y
LCBfX3RydWVfdHlwZSkKICAgIHsgfQoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAgICBp
bmxpbmUgdm9pZAogICAgX0Rlc3Ryb3koX1RwKiBfX3BvaW50ZXIpCiAgICB7IF9fcG9pbnRlci0+
fl9UcCgpOyB9CiMgMTM0ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0
cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4K
ICAgIGlubGluZSB2b2lkCiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G
b3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgICAgICAg
ICAgICAgIF9WYWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8
X1ZhbHVlX3R5cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICAgICAgICAgICAg
ICAgX0hhc190cml2aWFsX2Rlc3RydWN0b3I7CgogICAgICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3Qs
IF9fbGFzdCwgX0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7CiAgICB9Cn0KIyA1NyAiL3NwYWNl
L3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMiAzCgojIDEgIi9zcGFjZS9z
bmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEg
MwojIDY2ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdW5p
bml0aWFsaXplZC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIK
ICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgIHsgcmV0
dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAg
ICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQogICAgewogICAg
ICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgICAgICBfQ29u
c3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0K
ICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBf
X2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMgMTA2ICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAg
aW5saW5lIF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVf
dHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1Zh
bHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBfX3VuaW5pdGlhbGl6
ZWRfY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKICAgIH0K
CiAgaW5saW5lIGNoYXIqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3Qs
IGNvbnN0IGNoYXIqIF9fbGFzdCwgY2hhciogX19yZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jl
c3VsdCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19yZXN1bHQgKyAo
X19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgd2NoYXJfdCoKICB1bmluaXRpYWxpemVk
X2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVz
dWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAg
cmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBf
X3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9f
dHJ1ZV90eXBlKQogICAgeyBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fdW5p
bml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxz
ZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogICAgICB0
cnkgewogICAgICAgIGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyArK19fY3VyKQogICAgICAgICAg
X0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAg
ICB7CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7CiAgICAgICAgICB0aHJvdzsK
ICAgICAgICB9CiAgICB9CiMgMTY0ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXplZF9m
aWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAm
IF9feCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIF9fdW5p
bml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKICAg
IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0
eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRf
ZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAg
ICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX0Zv
cndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw
JiBfX3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19m
aXJzdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3Vy
KQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICAgIHJldHVybiBfX2N1
cjsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3ko
X19maXJzdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDIxMCAi
L3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3VuaW5pdGlhbGl6
ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUs
IHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHVuaW5pdGlhbGl6ZWRf
ZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194KQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+
Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3Ry
YWl0czxfVmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5p
bml0aWFsaXplZF9maWxsX25fYXV4KF9fZmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOwogICAg
fQojIDIyNyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3Vu
aW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt
ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJk
SXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVy
IF9fbWlkID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7
CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0Miwg
X19sYXN0MiwgX19taWQpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAg
ICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAg
fQogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5p
bml0aWFsaXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIg
X19taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0KQogICAgewogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBf
X3gpOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJz
dCwgX19sYXN0LCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAg
ICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAgICB0aHJvdzsKICAgICAg
ICB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9G
b3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFs
aXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3
YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9feCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29w
eShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIpOwogICAgICB0cnkgewogICAgICAgIHVuaW5p
dGlhbGl6ZWRfZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2go
Li4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOwogICAg
ICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKfQojIDU5ICIvc3BhY2Uvc25iL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAyIDMKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAxIDMKIyA2NCAiL3Nw
YWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0
ZXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cmF0b3IsIGNsYXNzIF9UcD4KICBjbGFzcyByYXdfc3RvcmFnZV9pdGVyYXRvcgogICAgOiBwdWJs
aWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4K
ICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfTV9pdGVyOwoKICAg
IHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3IoX0Zvcndh
cmRJdGVyYXRvciBfX3gpIDogX01faXRlcihfX3gpIHt9CgogICAgICByYXdfc3RvcmFnZV9pdGVy
YXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIHJhd19zdG9y
YWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX2VsZW1lbnQpCiAgICAg
IHsKICAgICAgICBfQ29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50KTsKICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRl
cmF0b3IsIF9UcD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgKytfTV9pdGVy
OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0
b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewog
ICAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4gX190bXAg
PSAqdGhpczsKICAgICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9
CiAgICB9Owp9CiMgNjAgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9tZW1v
cnkiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgNzEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBwYWlyPF9U
cCosIHB0cmRpZmZfdD4KICAgIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVu
LCBfVHAqKQogICAgewogICAgICBpZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNp
emVvZihfVHApKSkKICAgICAgICBfX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAg
ICAgIHdoaWxlIChfX2xlbiA+IDApCiAgICAgICAgewogICAgICAgICAgX1RwKiBfX3RtcCA9IChf
VHAqKSBzdGQ6Om1hbGxvYygoc3RkOjpzaXplX3QpX19sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAg
ICAgICBpZiAoX190bXAgIT0gMCkKICAgICAgICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlm
Zl90PihfX3RtcCwgX19sZW4pOwogICAgICAgICAgX19sZW4gLz0gMjsKICAgICAgICB9CiAgICAg
IHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oKF9UcCopMCwgMCk7CiAgICB9CiMgMTAzICIv
c3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHBhaXI8X1RwKixwdHJkaWZmX3Q+CiAgICBnZXRfdGVt
cG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4pCiAgICB7IHJldHVybiBfX2dldF90ZW1wb3Jh
cnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7IH0KIyAxMTUgIi9zcGFjZS9zbmIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMy9tZW1vcnkiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICB2
b2lkCiAgICByZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkKICAgIHsgc3RkOjpmcmVl
KF9fcCk7IH0KIyAxMjcgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9tZW1v
cnkiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgc3RydWN0IGF1dG9fcHRyX3JlZgog
ICAgewogICAgICBfVHAxKiBfTV9wdHI7CgogICAgICBleHBsaWNpdAogICAgICBhdXRvX3B0cl9y
ZWYoX1RwMSogX19wKTogX01fcHRyKF9fcCkgeyB9CiAgICB9OwojIDE2NiAiL3NwYWNlL3NuYi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICAgIGNsYXNzIGF1dG9fcHRyCiAgICB7CiAgICBwcml2YXRlOgogICAgICBfVHAqIF9NX3B0
cjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CgoKCgoKCgog
ICAgICBleHBsaWNpdAogICAgICBhdXRvX3B0cihlbGVtZW50X3R5cGUqIF9fcCA9IDApIHRocm93
KCkgOiBfTV9wdHIoX19wKSB7IH0KIyAxOTIgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMy9tZW1vcnkiIDMKICAgICAgYXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3coKSA6
IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMDMgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9tZW1vcnkiIDMKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAg
ICAgICBhdXRvX3B0cihhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpIDogX01fcHRyKF9fYS5y
ZWxlYXNlKCkpIHsgfQojIDIxNCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L21lbW9yeSIgMwogICAgICBhdXRvX3B0ciYKICAgICAgb3BlcmF0b3I9KGF1dG9fcHRyJiBfX2Ep
IHRocm93KCkKICAgICAgewogICAgICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgICAgIHJl
dHVybiAqdGhpczsKICAgICAgfQojIDIzMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4zL21lbW9yeSIgMwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIGF1
dG9fcHRyJgogICAgICAgIG9wZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpCiAg
ICAgICAgewogICAgICAgICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgICAgfQojIDI1MSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL21lbW9yeSIgMwogICAgICB+YXV0b19wdHIoKSB7IGRlbGV0ZSBfTV9wdHI7IH0KIyAyNjEg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9tZW1vcnkiIDMKICAgICAgZWxl
bWVudF90eXBlJgogICAgICBvcGVyYXRvciooKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICpfTV9w
dHI7IH0KCgoKCgoKCiAgICAgIGVsZW1lbnRfdHlwZSoKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0
IHRocm93KCkgeyByZXR1cm4gX01fcHRyOyB9CiMgMjgzICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAzCiAgICAgIGVsZW1lbnRfdHlwZSoKICAgICAgZ2V0KCkg
Y29uc3QgdGhyb3coKSB7IHJldHVybiBfTV9wdHI7IH0KIyAyOTcgIi9zcGFjZS9zbmIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9tZW1vcnkiIDMKICAgICAgZWxlbWVudF90eXBlKgogICAgICBy
ZWxlYXNlKCkgdGhyb3coKQogICAgICB7CiAgICAgICAgZWxlbWVudF90eXBlKiBfX3RtcCA9IF9N
X3B0cjsKICAgICAgICBfTV9wdHIgPSAwOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoj
IDMxMiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMwogICAg
ICB2b2lkCiAgICAgIHJlc2V0KGVsZW1lbnRfdHlwZSogX19wID0gMCkgdGhyb3coKQogICAgICB7
CiAgICAgICAgaWYgKF9fcCAhPSBfTV9wdHIpCiAgICAgICAgICB7CiAgICAgICAgICAgIGRlbGV0
ZSBfTV9wdHI7CiAgICAgICAgICAgIF9NX3B0ciA9IF9fcDsKICAgICAgICAgIH0KICAgICAgfQoj
IDMzMyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMwogICAg
ICBhdXRvX3B0cihhdXRvX3B0cl9yZWY8ZWxlbWVudF90eXBlPiBfX3JlZikgdGhyb3coKQogICAg
ICA6IF9NX3B0cihfX3JlZi5fTV9wdHIpIHsgfQoKICAgICAgYXV0b19wdHImCiAgICAgIG9wZXJh
dG9yPShhdXRvX3B0cl9yZWY8ZWxlbWVudF90eXBlPiBfX3JlZikgdGhyb3coKQogICAgICB7CiAg
ICAgICAgaWYgKF9fcmVmLl9NX3B0ciAhPSB0aGlzLT5nZXQoKSkKICAgICAgICAgIHsKICAgICAg
ICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgICAgICAgX01fcHRyID0gX19yZWYuX01fcHRyOwog
ICAgICAgICAgfQogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwMT4KICAgICAgICBvcGVyYXRvciBhdXRvX3B0cl9yZWY8X1RwMT4oKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7
IH0KCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgb3BlcmF0b3IgYXV0b19w
dHI8X1RwMT4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+
cmVsZWFzZSgpKTsgfQoKICB9Owp9CiMgNDkgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMy9zdHJpbmciIDIgMwoKCgojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2NCAiL3NwYWNlL3NuYi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKbmFtZXNwYWNlIHN0ZAp7
CiMgMTAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfZnVu
Y3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IHVu
YXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9S
ZXN1bHQgcmVzdWx0X3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9B
cmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9B
cmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRf
dHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CiMgMTI3ICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U
cCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0
cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAg
b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu
IF9feCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtdWx0aXBsaWVz
IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigp
KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICogX195
OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMgOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf
X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7IH0KfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X1RwLF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw
JiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4KewogIF9U
cCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAtX194OyB9Cn07CiMg
MTczICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfZnVuY3Rp
b24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs
IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07CgoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U
cCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw
JiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsK
ICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7
IHJldHVybiBfX3ggPCBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3Jl
YXRlcl9lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9v
bCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1
cm4gX194ID49IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzX2Vx
dWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJh
dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg
PD0gX195OyB9Cn07CiMgMjIyICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNh
bF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3Bl
cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f
eCAmJiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9vciA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigp
KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8IF9f
eTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9feCkgY29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwojIDI3MSAiL3NwYWNlL3NuYi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNz
IF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgog
IF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25z
dCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNv
bnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAg
cmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRl
PgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYg
X19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlw
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25k
X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVj
dGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdh
dGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0
b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gs
CiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1
bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsK
ICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRl
PF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJp
bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQojIDM0OSAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNs
YXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRlcjFzdAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3Rl
ZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50
X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIxc3QoY29uc3QgX09wZXJhdGlvbiYgX194LAog
ICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBl
JiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRp
b246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpz
ZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9f
eCk7CiAgfQoKCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigp
KHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsK
ICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfT3Bl
cmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4KYmluZDFzdChj
b25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5h
bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBi
aW5kZXIxc3Q8X09wZXJhdGlvbj4oX19mbiwgX0FyZzFfdHlwZShfX3gpKTsKfQoKCnRlbXBsYXRl
IDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5j
dGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3Rl
Y3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1
bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9f
eCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50
X3R5cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRp
b246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwg
dmFsdWUpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0
b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0
IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
T3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIybmQ8X09wZXJhdGlvbj4KYmluZDJu
ZChjb25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlw
ZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJfdHlwZTsKICByZXR1
cm4gYmluZGVyMm5kPF9PcGVyYXRpb24+KF9fZm4sIF9BcmcyX3R5cGUoX194KSk7Cn0KIyA0Mzgg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9mdW5jdGlvbi5o
IiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3Rv
X3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHsK
cHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9pbnRlcl90
b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9mdW5jdGlv
bihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQgb3BlcmF0
b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVu
Y3Rpb248X0FyZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKewogIHJl
dHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7Cn0KCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBw
b2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6CiAgcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJn
MSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9Bcmcx
LCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkge30KICAg
IGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9Bcmcx
LCBfQXJnMikpCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0b3IoKShf
QXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195
KTsKICAgIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBf
UmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jl
c3VsdD4KcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0dXJuIHBv
aW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7Cn0KCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPF9UcCxfVHA+IHsKICBfVHAmIG9wZXJhdG9yKCkoX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJu
IF9feDsgfQogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyBy
ZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0
IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlw
ZT4gewogIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gp
IGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWly
OjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1Nl
bGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OnNl
Y29uZF90eXBlPgp7CiAgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKF9Q
YWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KICBjb25zdCB0eXBl
bmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29u
c3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwojIDUyOCAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNs
YXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6
Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29u
c3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9m
KSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21l
bV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGlj
OgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6
IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsg
cmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBj
b25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVu
X3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBs
aWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQog
IF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsg
fQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9S
ZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9m
dW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZf
dChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJh
dG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJp
dmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVu
MV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJh
dG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194
KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Qg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoK
ICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0
KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9Bcmcg
X194KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBf
UmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFf
cmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3Bl
cmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9f
eCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9y
ZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAg
ZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29u
c3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0Fy
ZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0
IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFz
cyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9N
X2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9N
X2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVt
X2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQg
b3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2
YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6
Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29u
c3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9U
cD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9f
cGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9N
X2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBf
QXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgog
IGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3Bm
KSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+
Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZv
aWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJn
LHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoq
X19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25z
dCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0
ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxp
Y2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikg
e30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9N
X2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2
b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9f
cGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToK
ICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQg
KF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRl
bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1Jl
dCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0
X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz
IF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9U
cDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZf
dDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0
dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFz
cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1Rw
LF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVu
MV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1l
bV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1f
ZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz
cyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBt
ZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Jl
Zl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJn
PgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNv
bnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCgoKfQojIDUzICIvc3Bh
Y2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvc3RyaW5nIiAyIDMKIyAxICIvc3BhY2Uv
c25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMSAzCiMg
NDQgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX3N0cmlu
Zy5oIiAzCgoKCm5hbWVzcGFjZSBzdGQKewojIDEwOCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2lj
X3N0cmluZwogICAgewoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBl
OwogICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0FsbG9jOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0FsbG9jOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19nbnVf
Y3h4OjpfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOwog
ICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwg
YmFzaWNfc3RyaW5nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiBzdGQ6OnJldmVy
c2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAg
IHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9y
OwoKICAgIHByaXZhdGU6CiMgMTQzICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICBzdHJ1Y3QgX1JlcAogICAgICB7CgogICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8Y2hhcj46Om90aGVy
IF9SYXdfYnl0ZXNfYWxsb2M7CiMgMTYxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5
cGUgX1NfbWF4X3NpemU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5hbDsK
CiAgICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUgX01fY2FwYWNp
dHk7CiAgICAgICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wKICAg
ICAgICBfTV9pc19sZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMg
PCAwOyB9CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAgICAg
IHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9z
ZXRfbGVha2VkKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2b2lk
CiAgICAgICAgX01fc2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAwOyB9
CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4odGhpcyArIDEpOyB9CgogICAgICAgIF9D
aGFyVCYKICAgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3MpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiBfTV9yZWZkYXRhKCkgW19fc107IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2dy
YWIoY29uc3QgX0FsbG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikKICAgICAg
ICB7CiAgICAgICAgICByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2Fs
bG9jMikKICAgICAgICAgICAgICAgICAgPyBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9j
MSk7CiAgICAgICAgfQoKCiAgICAgICAgc3RhdGljIF9SZXAqCiAgICAgICAgX1NfY3JlYXRlKHNp
emVfdCwgY29uc3QgX0FsbG9jJik7CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kaXNwb3NlKGNv
bnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9h
ZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAwKQogICAgICAgICAgICBfTV9kZXN0cm95KF9fYSk7
CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGVzdHJveShjb25zdCBfQWxsb2Mm
KSB0aHJvdygpOwoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmY29weSgpIHRocm93KCkK
ICAgICAgICB7CiAgICAgICAgICBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOwogICAg
ICAgICAgcmV0dXJuIF9NX3JlZmRhdGEoKTsKICAgICAgICB9CgogICAgICAgIF9DaGFyVCoKICAg
ICAgICBfTV9jbG9uZShjb25zdCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsKICAgICAg
fTsKCgogICAgICBzdHJ1Y3QgX0FsbG9jX2hpZGVyIDogX0FsbG9jCiAgICAgIHsKICAgICAgICBf
QWxsb2NfaGlkZXIoX0NoYXJUKiBfX2RhdCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgOiBf
QWxsb2MoX19hKSwgX01fcChfX2RhdCkgeyB9CgogICAgICAgIF9DaGFyVCogX01fcDsKICAgICAg
fTsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9IHN0
YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpOwoKICAgIHByaXZhdGU6CgogICAgICBtdXRhYmxlIF9B
bGxvY19oaWRlciBfTV9kYXRhcGx1czsKCgoKICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19lbXB0
eV9yZXBfc3RvcmFnZVsoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6
ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCiAgICAgIF9DaGFyVCoKICAgICAgX01f
ZGF0YSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0KCiAgICAgIF9D
aGFyVCoKICAgICAgX01fZGF0YShfQ2hhclQqIF9fcCkKICAgICAgeyByZXR1cm4gKF9NX2RhdGFw
bHVzLl9NX3AgPSBfX3ApOyB9CgogICAgICBfUmVwKgogICAgICBfTV9yZXAoKSBjb25zdAogICAg
ICB7IHJldHVybiAmKChyZWludGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFdKTsg
fQoKCgogICAgICBpdGVyYXRvcgogICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9pZW5kKCkgY29uc3Qg
eyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgdm9p
ZAogICAgICBfTV9sZWFrKCkKICAgICAgewogICAgICAgIGlmICghX01fcmVwKCktPl9NX2lzX2xl
YWtlZCgpKQogICAgICAgICAgX01fbGVha19oYXJkKCk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9y
CiAgICAgIF9NX2NoZWNrKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgewogICAgICAgIGlm
IChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi
YXNpY19zdHJpbmc6Ol9NX2NoZWNrIik7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19w
b3M7CiAgICAgIH0KCgogICAgICBpdGVyYXRvcgogICAgICBfTV9mb2xkKHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fb2ZmKSBjb25zdAogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvZmYg
PSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHNpemVfdHlwZSBfX25ld29m
ZiA9IF9fdGVzdG9mZiA/IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgcmV0
dXJuIChfTV9pYmVnaW4oKSArIF9fcG9zICsgX19uZXdvZmYpOwogICAgICB9CgoKCiAgICAgIHRl
bXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4KICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIF9TX2Nv
cHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikKICAg
ICAgICB7CiAgICAgICAgICBmb3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQogICAg
ICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sxKTsKICAgICAgICB9CgogICAg
ICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBf
X2sxLCBpdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2Uo
KSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJz
KF9DaGFyVCogX19wLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQog
ICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9Cgog
ICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hhclQq
IF9fazEsIF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEs
IF9fazIgLSBfX2sxKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhf
Q2hhclQqIF9fcCwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAgICAg
IHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIHZv
aWQKICAgICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6
ZV90eXBlIF9fbGVuMik7CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWtfaGFyZCgpOwoKICAgICAg
c3RhdGljIF9SZXAmCiAgICAgIF9TX2VtcHR5X3JlcCgpCiAgICAgIHsgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PF9SZXAqPigmX1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9CgogICAgcHVibGljOgoK
CgoKICAgICAgaW5saW5lCiAgICAgIGJhc2ljX3N0cmluZygpOwoKICAgICAgZXhwbGljaXQKICAg
ICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKTsKCgogICAgICBiYXNpY19zdHJpbmco
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXpl
X3R5cGUgX19uID0gbnBvcyk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcm
IF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19u
LCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBf
X3MsIHNpemVfdHlwZSBfX24sCiAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9
IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBf
QWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBfX24s
IF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgdGVtcGxh
dGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXJh
dG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB+YmFzaWNfc3RyaW5nKCkKICAgICAg
eyBfTV9yZXAoKS0+X01fZGlzcG9zZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9CgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7
IHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IG9wZXJhdG9yPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcyk7
IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsgcmV0
dXJuIHRoaXMtPmFzc2lnbigxLCBfX2MpOyB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4o
KQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9k
YXRhKCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJh
dG9yCiAgICAgIGVuZCgpCiAgICAgIHsKICAgICAgICAgX01fbGVhaygpOwogICAgICAgICByZXR1
cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsKICAgICAgfQoKICAgICAgY29u
c3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0
b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgog
ICAgICByYmVnaW4oKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgp
KTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdAog
ICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAg
ICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9p
dGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgog
ICAgICByZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0
aGlzLT5iZWdpbigpKTsgfQoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBzaXpl
KCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBl
CiAgICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAg
ICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9TX21h
eF9zaXplOyB9CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQg
X19jKTsKCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pIHsgdGhpcy0+cmVz
aXplKF9fbiwgX0NoYXJUKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgY2FwYWNpdHkoKSBj
b25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0KCiAgICAgIHZvaWQKICAgICAg
cmVzZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJnID0gMCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFy
KCkgeyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6ZSgpLCAwKTsgfQoKICAgICAgYm9vbAogICAgICBl
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CgoKICAgICAgY29uc3Rf
cmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAg
eyByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJh
dG9yW10oc2l6ZV90eXBlIF9fcG9zKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAg
IHJldHVybiBfTV9kYXRhKClbX19wb3NdOwogICAgICB9CgogICAgICBjb25zdF9yZWZlcmVuY2UK
ICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX24gPj0g
dGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmlu
Zzo6YXQiKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCiAgICAgIHJl
ZmVyZW5jZQogICAgICBhdChzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9fbiA+
PSBzaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjph
dCIpOwogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAg
ICAgIH0KCgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0
aGlzLT5hcHBlbmQoX19zKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9
KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7IH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKCiAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7
IHJldHVybiB0aGlzLT5hcHBlbmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19j
KTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgICBhcHBlbmQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9p
ZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKF9D
aGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgMSwg
X19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3Ry
aW5nJiBfX3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsK
ICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAg
IGlmIChfX3BvcyA+IF9fc3Ryc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi
YXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0biA9IF9fbiA8
IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBf
X3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIHRoaXMtPmFz
c2lnbihfX3N0ci5fTV9kYXRhKCkgKyBfX3BvcywgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X24pCiAgICAgIHsKICAgICAgICBpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAg
IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGlm
IChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywg
X01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgp
ICsgdGhpcy0+c2l6ZSgpLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShf
TV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICAgICAgZWxzZQogICAg
ICAgICAgewoKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01fZGF0
YSgpOwogICAgICAgICAgICBpZiAoX19wb3MgPj0gX19uKQogICAgICAgICAgICAgIHRyYWl0c190
eXBlOjpjb3B5KF9NX2RhdGEoKSwgX19zLCBfX24pOwogICAgICAgICAgICBlbHNlIGlmIChfX3Bv
cykKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCksIF9fcywgX19uKTsK
ICAgICAgICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgICAgICAgX01fZGF0
YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICAgICAgfQogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25z
dCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgdHJhaXRzX3R5
cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oc2l6
ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9p
YmVnaW4oKSwgX01faWVuZCgpLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhc3NpZ24oX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJu
IHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsg
fQoKICAgICAgdm9pZAogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19uLCBf
Q2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsgfQoK
ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZCBpbnNlcnQo
aXRlcmF0b3IgX19wLCBfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQp
CiAgICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0
ciwgMCwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQo
c2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAg
IHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBz
aXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvczIgPiBf
X3N0cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpp
bnNlcnQiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBf
X3BvczI7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBfX24g
OiBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgICAgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvczEs
IF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUg
PSB0aGlzLT5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgICAgX190
aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9f
c2l6ZSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24pCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9l
cnJvcigiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lz
X3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAg
ICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkK
ICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywgX01f
aWJlZ2luKCkgKyBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBf
X3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgY29uc3Qg
c2l6ZV90eXBlIF9fb2ZmID0gX19zIC0gX01fZGF0YSgpOwogICAgICAgICAgICBfTV9tdXRhdGUo
X19wb3MsIDAsIF9fbik7CiAgICAgICAgICAgIF9fcyA9IF9NX2RhdGEoKSArIF9fb2ZmOwogICAg
ICAgICAgICBfQ2hhclQqIF9fcCA9IF9NX2RhdGEoKSArIF9fcG9zOwogICAgICAgICAgICBpZiAo
X19zICsgX19uIDw9IF9fcCkKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9f
cywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19zID49IF9fcCkKICAgICAgICAgICAgICB0
cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcyArIF9fbiwgX19uKTsKICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19z
LCBfX3AgLSBfX3MpOwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wICsgKF9f
cCAtIF9fcyksIF9fcCArIF9fbiwgX19uIC0gKF9fcCAtIF9fcykpOwogICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgfQogICAgICAgfQoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9f
cykKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjps
ZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlw
ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRoaXMt
Pmluc2VydChfTV9jaGVjayhfX3BvcyksIF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFy
VCBfX2MgPSBfQ2hhclQoKSkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9fcCAt
IF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNpemVf
dHlwZSgxKSwgX19jKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAg
IHJldHVybiB0aGlzLT5fTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBu
cG9zKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3Mp
LCBfTV9mb2xkKF9fcG9zLCBfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2Rh
dGEoKSwgX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRl
cmF0b3IgX19wb3NpdGlvbikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0
aW9uIC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBfX3Bv
c2l0aW9uICsgMSwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9z
ZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9Cgog
ICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xh
c3QpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigp
OwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2Rh
dGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBf
TV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBs
YWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uLCBfX3N0ci5fTV9k
YXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFj
ZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMik7Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIp
CiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog
ICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl
KCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4xID0g
X19uMSA8IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMSA9
IF9fdGVzdG4xID8gX19uMSA6IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGlmIChfX3NpemUgLSBf
X2ZvbGRuMSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24yKQogICAgICAgICAgX190aHJvd19sZW5n
dGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+
X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQog
ICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBf
X3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9z
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9pYmVnaW4oKSArIF9fcG9zICsg
X19mb2xkbjEsIF9fcywgX19zICsgX19uMik7CgogICAgICAgIGVsc2UgcmV0dXJuCiAgICAgICAg
ICAgICAgIF9NX3JlcGxhY2UoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBfX3Bv
cyArIF9fZm9sZG4xLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uMiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8Y29uc3Qg
X0NoYXJUKj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOwogICAgICB9CgogICAgICBiYXNpY19zdHJp
bmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3Qg
X0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbjEsIF9f
cywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24y
LCBfQ2hhclQgX19jKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9z
KSwgX01fZm9sZChfX3BvcywgX19uMSksIF9fbjIsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIs
IF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7IHJl
dHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsIF9fcywg
X19uKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEs
IGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5y
ZXBsYWNlKF9faTEsIF9faTIsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9f
aTIsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIHJlcGxhY2UoaXRlcmF0
b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9f
azEsIF9JbnB1dEl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZShfX2kx
LCBfX2kyLCBfX2sxLCBfX2syLAogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7IH0KCgoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9DaGFy
VCogX19rMSwgX0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19p
MSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBs
YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19rMSwgY29u
c3QgX0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9N
X2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
azEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0
ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIp
CiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIg
LSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9fazIg
LSBfX2sxKTsKICAgICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRl
cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRl
cmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVn
aW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLmJh
c2UoKSwgX19rMiAtIF9fazEpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgogICAgICB0ZW1wbGF0
ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgX01f
cmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyYXRvciBfX2sx
LAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMiwgaW5wdXRfaXRlcmF0b3Jf
dGFnKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVyYXRv
ciBfX2kyLCBfRm9yd2FyZEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fazIpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAg
IHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBf
SW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAgIHJl
dHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAgfQoK
ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg
ICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3Qg
X0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgICAg
ICB7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4o
X19iZWcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90
eXBlPihfX2VuZCksIF9fYSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRl
cj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9f
YmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVn
cmFsOwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2Es
IF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4K
ICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2Jl
ZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4K
ICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBfX2Jl
ZywgX0Z3ZEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAg
ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBfU19j
b25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7
CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAogICAg
ICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoKICAg
ICAgY29uc3QgX0NoYXJUKgogICAgICBjX3N0cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6
ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9N
X2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEo
KTsKICAgICAgfQoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29uc3QgeyByZXR1
cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9y
KCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBm
aW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNv
bnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0
ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChf
X3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
cykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUg
X19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9Cgog
ICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7
IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w
b3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIu
c2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0No
YXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBz
aXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3Ms
IF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf
X3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0
ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg
ZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw
ZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7
IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90
eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19jLCBf
X3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5z
aXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rf
b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjps
ZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihf
Q2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQog
ICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw
ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rf
b2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBl
CiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
cywKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rf
b2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0g
bnBvcykgY29uc3Q7CgogICAgICBiYXNpY19zdHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlwZSBf
X3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYg
KF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh
c2ljX3N0cmluZzo6c3Vic3RyIik7CiAgICAgICAgcmV0dXJuIGJhc2ljX3N0cmluZygqdGhpcywg
X19wb3MsIF9fbik7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19zaXplID0g
dGhpcy0+c2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwog
ICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fc2l6ZSwgX19vc2l6ZSk7CgogICAg
ICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fc3RyLmRhdGEo
KSwgX19sZW4pOwogICAgICAgIGlmICghX19yKQogICAgICAgICAgX19yID0gX19zaXplIC0gX19v
c2l6ZTsKICAgICAgICByZXR1cm4gX19yOwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFy
ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6
ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICAgc2l6
ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNv
bXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoKCgogICAgICBpbnQKICAgICAgY29tcGFy
ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29u
c3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29u
c3Q7CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKCkKICAgIDogX01fZGF0YXBsdXMoX1NfZW1wdHlf
cmVwKCkuX01fcmVmY29weSgpLCBfQWxsb2MoKSkgeyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7CiAgICAg
IF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0
IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxf
VHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9U
cmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAg
Y29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAg
ICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLCBfQ2hhclQgX19yaHMpCiAgICB7CiAgICAg
IHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3Np
emVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFw
cGVuZChfX3NpemVfdHlwZSgxKSwgX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9f
bGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3I9PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhz
LmNvbXBhcmUoX19saHMpID09IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK
ICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNv
bXBhcmUoX19yaHMpID09IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
IT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg
ICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0gMDsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAg
ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
cmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0gMDsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhz
KQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgIT0gMDsgfQoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShf
X3JocykgPCAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg
ICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jocykg
PCAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBfQ2hhclQq
IF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPiAwOyB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBf
X2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhz
LAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5j
b21wYXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+
KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJl
KF9fbGhzKSA8IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAg
ICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhz
KQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQog
ICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAg
IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogIHsg
cmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID49IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jocykg
Pj0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBj
b25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0g
MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IF9DaGFyVCog
X19saHMsCiAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDw9IDA7IH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9fb3MsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf
X2lzLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3N0ciwgX0NoYXJUIF9fZGVsaW0pOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9D
aGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX2lzLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX3N0cik7Cn0KIyA1NCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0
cmluZyIgMiAzCgoKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYWxn
b3JpdGhtIiAxIDMKIyA2NSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Fs
Z29yaXRobSIgMwoKCgoKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9zdGxfYWxnby5oIiAxIDMKIyA2NCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9iaXRzL3N0bF9oZWFwLmgiIDEgMwojIDYzICIvc3BhY2Uvc25iL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaGVhcC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3Rh
bmNlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwg
X0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2Ug
X19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRl
eCA+IF9fdG9wSW5kZXggJiYgKihfX2ZpcnN0ICsgX19wYXJlbnQpIDwgX192YWx1ZSkgewogICAg
ICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAg
ICAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUlu
ZGV4IC0gMSkgLyAyOwogICAgICB9CiAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9f
dmFsdWU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4K
ICAgIGlubGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUK
ICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rp
c3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9E
aXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAg
ICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwg
dHlwZW5hbWUgX1RwLAogICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAg
IF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19o
b2xlSW5kZXgsCiAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFs
dWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9f
aG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4
ICYmIF9fY29tcCgqKF9fZmlyc3QgKyBfX3BhcmVudCksIF9fdmFsdWUpKSB7CiAgICAgICAgKihf
X2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9f
aG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICAgICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAx
KSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFs
dWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoK
ICAgICAKCgogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3Qg
LSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICBfVmFs
dWVUeXBlKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1Rw
PgogICAgdm9pZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
dCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19s
ZW4sIF9UcCBfX3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9s
ZUluZGV4OwogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCAr
IDI7CiAgICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgICAgICBpZiAoKihf
X2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkgPCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEp
KSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJ
bmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9
IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGls
ZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAg
ICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQg
LSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAgfQog
ICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1
ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlw
ZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUpCiAgICB7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRv
cj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
OwogICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9f
bGFzdCAtIF9fZmlyc3QpLCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfX3Bv
cF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xh
c3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwKICAgICAgICAgICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgdm9pZAogICAgX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlz
dGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9E
aXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29u
ZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQg
PCBfX2xlbikgewogICAgICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCks
ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hp
bGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3Nl
Y29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAg
X19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlm
IChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5k
ZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5k
ZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0
LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAg
Kl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3Rh
bmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAg
X192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwb3BfaGVh
cChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCgoKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6
dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAt
IDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAg
IG1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAg
CgogICAgIAoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9E
aXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBl
IF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAg
X19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9WYWx1ZVR5cGUoKihfX2Zp
cnN0ICsgX19wYXJlbnQpKSk7CiAgICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAg
ICAgICBfX3BhcmVudC0tOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAg
bWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6
dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAg
ICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly
c3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2Zp
cnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAg
IHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwg
X19sZW4sCiAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFy
ZW50KSksIF9fY29tcCk7CiAgICAgICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAg
ICBfX3BhcmVudC0tOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAgICAgCgog
ICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVh
cChfX2ZpcnN0LCBfX2xhc3QtLSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBzb3J0X2hlYXAo
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh
c3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKCgogICAgICB3
aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICAgICAgcG9wX2hlYXAoX19maXJzdCwgX19s
YXN0LS0sIF9fY29tcCk7CiAgICB9Cgp9CiMgNjUgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDIgMwojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF90ZW1wYnVmLmgiIDEgMwojIDY0ICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCm5hbWVzcGFj
ZSBzdGQKewojIDc0ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9z
dGxfdGVtcGJ1Zi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBf
VHA+CiAgY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIKewoKIAoKICBwdHJkaWZmX3QgX01fb3JpZ2lu
YWxfbGVuOwogIHB0cmRpZmZfdCBfTV9sZW47CiAgX1RwKiBfTV9idWZmZXI7CgoKICB2b2lkIF9N
X2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9N
X2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBz
aXplb2YoX1RwKSkpCiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAg
ICB3aGlsZSAoX01fbGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9N
X2xlbiAqIHNpemVvZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsK
ICAgICAgX01fbGVuIC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVy
KGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIo
Y29uc3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24o
X01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgoKICBwdHJkaWZmX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQoKICBwdHJkaWZmX3QgcmVxdWVzdGVkX3NpemUoKSBj
b25zdCB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47IH0KCiAgX1RwKiBiZWdpbigpIHsgcmV0dXJu
IF9NX2J1ZmZlcjsgfQoKICBfVHAqIGVuZCgpIHsgcmV0dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsg
fQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlcmF0b3IgX19sYXN0KSB7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9U
cD46Omhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3IKICAgICAgICAgICAgX1RyaXZpYWw7
CgogICAgdHJ5IHsKICAgICAgX01fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAg
ICAgX01fYWxsb2NhdGVfYnVmZmVyKCk7CiAgICAgIGlmIChfTV9sZW4gPiAwKQogICAgICAgIF9N
X2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAgIH0KICAgIGNhdGNo
KC4uLikKICAgICAgewogICAgICAgIGZyZWUoX01fYnVmZmVyKTsKICAgICAgICBfTV9idWZmZXIg
PSAwOwogICAgICAgIF9NX2xlbiA9IDA7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9CgogIH5f
VGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIF9EZXN0cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsg
X01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsKICB9Cgpwcml2YXRlOgoKICBfVGVtcG9yYXJ5
X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9CiAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQp9OwoKfQojIDY2ICIvc3BhY2Uvc25iL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7
CiMgODQgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9f
bWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpCiAg
ICB7CgogICAgIAogICAgICBpZiAoX19hIDwgX19iKQogICAgICAgIGlmIChfX2IgPCBfX2MpCiAg
ICAgICAgICByZXR1cm4gX19iOwogICAgICAgIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgICAgICAg
IHJldHVybiBfX2M7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxz
ZSBpZiAoX19hIDwgX19jKQogICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fYiA8
IF9fYykKICAgICAgICByZXR1cm4gX19jOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9fYjsK
ICAgIH0KIyAxMTggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgog
ICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBf
VHAmIF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAg
ICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKQogICAgICAgIGlmIChfX2NvbXAoX19iLCBfX2MpKQog
ICAgICAgICAgcmV0dXJuIF9fYjsKICAgICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQog
ICAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19hOwog
ICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICAgIHJldHVybiBfX2E7CiAgICAg
IGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgZWxz
ZQogICAgICAgIHJldHVybiBfX2I7CiAgICB9CiMgMTUwICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlciwgdHlwZW5hbWUgX0Z1bmN0aW9uPgogICAgX0Z1bmN0aW9uCiAgICBmb3JfZWFjaChf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRnVuY3Rpb24gX19mKQogICAg
ewoKICAgICAKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAg
ICAgIF9fZigqX19maXJzdCk7CiAgICAgIHJldHVybiBfX2Y7CiAgICB9CgoKCgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9JbnB1dEl0
ZXIKICAgIGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewog
ICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgISgqX19maXJzdCA9PSBfX3ZhbCkpCiAg
ICAgICAgKytfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5l
IF9JbnB1dEl0ZXIKICAgIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgIGlucHV0X2l0
ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3By
ZWQoKl9fZmlyc3QpKQogICAgICAgICsrX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg
ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l
IF9UcD4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBmaW5kKF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3Zh
bCwKICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBf
X3RyaXBfY291bnQKICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAgICAgZm9y
ICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgICAgICBpZiAoKl9f
Zmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAg
ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmly
c3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAg
ICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2Zp
cnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQoKICAgICAgc3dpdGNoKF9fbGFzdCAtIF9f
Zmlyc3QpIHsKICAgICAgY2FzZSAzOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0
dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDI6CiAgICAgICAgaWYg
KCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAg
ICAgIGNhc2UgMToKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0
OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAwOgogICAgICBkZWZhdWx0OgogICAgICAg
IHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9SYW5kb21BY2Nlc3NJ
dGVyCiAgICBmaW5kX2lmKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAg
ICAgICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190cmlwX2Nv
dW50ID4gMCA7IC0tX190cmlwX2NvdW50KSB7CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkp
IHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJlZCgq
X19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYg
KF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAg
ICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19m
aXJzdDsKICAgICAgfQoKICAgICAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICAgICAgY2Fz
ZSAzOgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAg
ICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMjoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkg
cmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDE6CiAgICAgICAg
aWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsK
ICAgICAgY2FzZSAwOgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAg
IH0KICAgIH0KIyAyODkgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
VHA+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAK
ICAgICAKCiAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9faXRlcmF0
b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMwOSAiL3NwYWNlL3NuYi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAg
ZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1cm4gZmlu
ZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0
KSk7CiAgICB9CiMgMzI5ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0Zv
cndhcmRJdGVyCiAgICBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCkKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0g
X19maXJzdDsKICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKCpf
X2ZpcnN0ID09ICpfX25leHQpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBfX2Zp
cnN0ID0gX19uZXh0OwogICAgICB9CiAgICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgMzU4ICIv
c3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRl
PgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRl
IF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09
IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0
ID0gX19maXJzdDsKICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICAgICAgaWYg
KF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICAgICAgcmV0dXJuIF9fZmly
c3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgICByZXR1cm4gX19sYXN0
OwogICAgfQojIDM4NyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9U
cD4KICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90
eXBlCiAgICBjb3VudChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25z
dCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKICAgICAgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAg
ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgqX19m
aXJzdCA9PSBfX3ZhbHVlKQogICAgICAgICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9
CiMgNDExICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxn
by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0
ZT4KICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90
eXBlCiAgICBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBf
UHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKF9fcHJlZCgq
X19maXJzdCkpCiAgICAgICAgICArK19fbjsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KIyA0NTAg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIy
PgogICAgX0ZvcndhcmRJdGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9G
b3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBf
Rm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgoKICAgICAg
aWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICBy
ZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAg
ICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBm
aW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwoKCgogICAgICBfRm9yd2FyZEl0ZXIy
IF9fcDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICAgICAgX0Zvcndh
cmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBf
X2xhc3QxKSB7CiAgICAgICAgX19maXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19m
aXJzdDIpOwogICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgcmV0dXJu
IF9fbGFzdDE7CgogICAgICAgIF9fcCA9IF9fcDE7CiAgICAgICAgX19jdXJyZW50ID0gX19maXJz
dDE7CiAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4g
X19sYXN0MTsKCiAgICAgICAgd2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9fcCkgewogICAgICAgICAg
aWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAg
ICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19sYXN0
MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0KICAgICAgcmV0dXJuIF9f
Zmlyc3QxOwogICAgfQojIDUyMiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5
cGVuYW1lIF9Gb3J3YXJkSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJ
dGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19s
YXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVkaWNhdGUpCiAgICB7CgogICAgIAog
ICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIg
PT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0ZvcndhcmRJdGVy
MiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9PSBfX2xh
c3QyKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRl
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgcmV0
dXJuIF9fZmlyc3QxOwogICAgICB9CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoK
ICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3Vy
cmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAg
ICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgICAgaWYgKF9fcHJlZGlj
YXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAr
K19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0
MTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgIHJldHVybiBfX2xh
c3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAgICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwog
ICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsKCiAgICAg
ICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAgICAgICBpZiAo
KytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICAgICAg
aWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX2xhc3QxOwog
ICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJz
dDE7CiAgICB9CiMgNTk2ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt
ZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBzZWFyY2hfbihf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIF9J
bnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAgIAoKICAg
ICAKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAg
IGVsc2UgewogICAgICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwog
ICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgX0ludGVnZXIgX19u
ID0gX19jb3VudCAtIDE7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAg
ICAgICAgICsrX19pOwogICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAg
JiYgKl9faSA9PSBfX3ZhbCkgewogICAgICAgICAgICArK19faTsKICAgICAgICAgICAgLS1fX247
CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19uID09IDApCiAgICAgICAgICAgIHJldHVybiBf
X2ZpcnN0OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ksIF9f
bGFzdCwgX192YWwpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAg
ICB9CiMgNjQzICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfSW50
ZWdlciwgdHlwZW5hbWUgX1RwLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAg
X0ZvcndhcmRJdGVyCiAgICBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192
YWwsCiAgICAgICAgICAgICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAK
ICAgICAKCgogICAgICBpZiAoX19jb3VudCA8PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0Owog
ICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAg
IGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCBfX3ZhbCkpCiAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBf
X2xhc3QpIHsKICAgICAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICAgICAg
X0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICAgICArK19faTsKICAgICAgICAgIHdo
aWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192
YWwpKSB7CiAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICAtLV9fbjsKICAgICAgICAgIH0K
ICAgICAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QpIHsKICAgICAgICAg
ICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpCiAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICArK19faTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfX2ZpcnN0
ID0gX19pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gX19sYXN0OwogICAg
ICB9CiAgICB9CiMgNjk3ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5h
bWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjIKICAgIHN3YXBfcmFuZ2VzKF9Gb3J3
YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAg
CgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2Zp
cnN0MikKICAgICAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3QyKTsKICAgICAgcmV0dXJu
IF9fZmlyc3QyOwogICAgfQojIDczMiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5
cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVW5hcnlPcGVyYXRpb24+CiAgICBfT3V0cHV0
SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9VbmFyeU9wZXJhdGlvbiBfX3Vu
YXJ5X29wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9f
bGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fdW5hcnlf
b3AoKl9fZmlyc3QpOwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgNzY1ICIvc3BhY2Uv
c25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBf
T3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgogICAgX091
dHB1dEl0ZXIKICAgIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIg
X19yZXN1bHQsCiAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKICAg
IHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0
MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQg
PSBfX2JpbmFyeV9vcCgqX19maXJzdDEsICpfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX3Jlc3Vs
dDsKICAgIH0KIyA3OTYgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9U
cCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9f
b2xkX3ZhbHVlKQogICAgICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4MjUg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5
cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBj
b25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmIChfX3ByZWQo
Kl9fZmlyc3QpKQogICAgICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4NTYg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlw
ZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9U
cCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0Owog
ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgODg4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAg
ICAgICAgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weV9pZihf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w
cmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoK
ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQog
ICAgICAgICpfX3Jlc3VsdCA9IF9fcHJlZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2Zp
cnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgOTE4ICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgogICAgdm9pZAogICAgZ2VuZXJh
dGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9HZW5lcmF0b3Ig
X19nZW4pCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19maXJzdCkKICAgICAgICAqX19maXJzdCA9IF9fZ2VuKCk7CiAgICB9CiMgOTQyICIv
c3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBf
R2VuZXJhdG9yPgogICAgX091dHB1dEl0ZXIKICAgIGdlbmVyYXRlX24oX091dHB1dEl0ZXIgX19m
aXJzdCwgX1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKCgoKICAgICAg
Zm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19n
ZW4oKTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgOTY5ICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9P
dXRwdXRJdGVyCiAgICByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYg
X192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJz
dCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoISgqX19maXJzdCA9PSBfX3ZhbHVl
KSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgICArK19fcmVzdWx0
OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMDMgIi9zcGFjZS9z
bmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1By
ZWRpY2F0ZT4KICAgIF9PdXRwdXRJdGVyCiAgICByZW1vdmVfY29weV9pZihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoK
ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgh
X19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAg
ICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoj
IDEwMzkgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAg
IF9Gb3J3YXJkSXRlcgogICAgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAg
ICAgCgogICAgIAoKCiAgICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1
ZSk7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJz
dCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJl
bW92ZV9jb3B5KCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOwogICAgfQojIDEwNzMg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAg
ICBfRm9yd2FyZEl0ZXIKICAgIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAg
ICAgCiAgICAgCgoKICAgICAgX19maXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3By
ZWQpOwogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmly
c3QgPT0gX19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBy
ZW1vdmVfY29weV9pZigrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOwogICAgfQoKCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4K
ICAgIF9PdXRwdXRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19m
aXJzdDsKICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAh
PSBfX2xhc3QpCiAgICAgICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAgICAg
IF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAg
ICAgICB9CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0
ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoISgqX19y
ZXN1bHQgPT0gKl9fZmlyc3QpKQogICAgICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAg
ICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTE0NSAiL3NwYWNlL3NuYi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAg
ICB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKICAg
ICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46
Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTE3MCAiL3NwYWNlL3NuYi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5
UHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJl
ZCwKICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoK
CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBf
X3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgIHdoaWxl
ICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVl
LCAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgICAgICor
K19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJldHVybiArK19fcmVzdWx0Owog
ICAgfQojIDExOTkgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9y
d2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAg
IF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBf
QmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgIGZvcndhcmRf
aXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7
CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlf
cHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAg
cmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTIzMiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgog
ICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7Cgog
ICAgIAogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRw
dXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwoKICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwKX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsIF9JdGVyVHlwZSgpKTsKICAg
IH0KIyAxMjYzICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJ
dGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qp
CiAgICB7CgogICAgICAgICAKICAgICAgICAgCgoKICAgICAgICAgIF9fZmlyc3QgPSBhZGphY2Vu
dF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19m
aXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIH0KIyAxMjkwICIvc3BhY2Uvc25iL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVy
CiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAg
ICAKCgoKICAgICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0LCBfX2Jp
bmFyeV9wcmVkKTsKICAgICAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19m
aXJzdCwgX19iaW5hcnlfcHJlZCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9C
aWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0
ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxl
ICh0cnVlKQogICAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJzdCA9PSAt
LV9fbGFzdCkKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7CiAgICB9CgoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19yZXZl
cnNlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAg
IHsKICAgICAgICAgIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0KQogICAgICAgICAgICBpdGVyX3N3
YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7CiAgICB9CiMgMTM0OSAiL3NwYWNlL3NuYi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICByZXZlcnNlKF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAg
ICAgICAgCgogICAgICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMgMTM3NCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp
cmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAg
cmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp
IHsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgICAg
ICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEzOTkg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+CiAgICBfRXVjbGlkZWFu
UmluZ0VsZW1lbnQKICAgIF9fZ2NkKF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX20sIF9FdWNsaWRl
YW5SaW5nRWxlbWVudCBfX24pCiAgICB7CiAgICAgIHdoaWxlIChfX24gIT0gMCkgewogICAgICAg
IF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX3QgPSBfX20gJSBfX247CiAgICAgICAgX19tID0gX19u
OwogICAgICAgIF9fbiA9IF9fdDsKICAgICAgfQogICAgICByZXR1cm4gX19tOwogICAgfQoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRl
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxl
LAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBmb3J3YXJk
X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAo
X19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47CgogICAgICBfRm9yd2FyZEl0ZXIg
X19maXJzdDIgPSBfX21pZGRsZTsKICAgICAgZG8gewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywg
Kl9fZmlyc3QyKyspOwogICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICAgICAg
X19taWRkbGUgPSBfX2ZpcnN0MjsKICAgICAgfSB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KTsK
CiAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CgogICAgICB3aGlsZSAoX19maXJzdDIgIT0gX19s
YXN0KSB7CiAgICAgICAgc3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICAgICAgaWYg
KF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAg
ICAgIGVsc2UgaWYgKF9fZmlyc3QyID09IF9fbGFzdCkKICAgICAgICAgIF9fZmlyc3QyID0gX19t
aWRkbGU7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rp
b25hbEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz
dCwKICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9p
dGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRs
ZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX19yZXZl
cnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAg
ICAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn
KCkpOwoKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRkbGUgJiYgX19taWRkbGUgIT0gX19s
YXN0KQogICAgICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7CgogICAgICBpZiAoX19m
aXJzdCA9PSBfX21pZGRsZSkgewogICAgICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAg
ICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn
KCkpOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZykKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKChfX2ZpcnN0ID09IF9fbWlkZGxlKSB8fCAo
X19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47CgogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBf
RGlzdGFuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgX0Rpc3RhbmNlIF9fbiA9
IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmly
c3Q7CiAgICAgIF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7CgogICAgICBpZiAoX19rID09IF9f
bCkgewogICAgICAgIHN3YXBfcmFuZ2VzKF9fZmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAg
ICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBfRGlzdGFuY2UgX19kID0gX19nY2QoX19uLCBf
X2spOwoKICAgICAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykgewog
ICAgICAgIF9WYWx1ZVR5cGUgX190bXAgPSAqX19maXJzdDsKICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX3AgPSBfX2ZpcnN0OwoKICAgICAgICBpZiAoX19rIDwgX19sKSB7CiAgICAgICAgICBm
b3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19kOyBfX2orKykgewogICAgICAgICAg
ICBpZiAoX19wID4gX19maXJzdCArIF9fbCkgewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCAt
IF9fbCk7CiAgICAgICAgICAgICAgX19wIC09IF9fbDsKICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICAgICAgX19wICs9IF9fazsKICAgICAgICAg
IH0KICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAgICAgZm9yIChfRGlzdGFuY2UgX19q
ID0gMDsgX19qIDwgX19rL19fZCAtIDE7IF9faiArKykgewogICAgICAgICAgICBpZiAoX19wIDwg
X19sYXN0IC0gX19rKSB7CiAgICAgICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAg
ICAgICAgICBfX3AgKz0gX19rOwogICAgICAgICAgICB9CgogICAgICAgICAgICAqX19wID0gKiAo
X19wIC0gX19sKTsKICAgICAgICAgICAgX19wIC09IF9fbDsKICAgICAgICAgIH0KICAgICAgICB9
CgogICAgICAgICpfX3AgPSBfX3RtcDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0K
IyAxNTYxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxn
by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIHZvaWQK
ICAgIHJvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBf
Rm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlw
ZTsKICAgICAgX19yb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0l0ZXJUeXBlKCkp
OwogICAgfQojIDE1ODkgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoK
ICAgICAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUsIF9fbGFz
dCwgX19yZXN1bHQpKTsKICAgIH0KIyAxNjEyICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Rpc3RhbmNl
PgogICAgaW5saW5lIF9EaXN0YW5jZQogICAgX19yYW5kb21fbnVtYmVyKF9EaXN0YW5jZSBfX24p
CiAgICB7CgogICAgICByZXR1cm4gbHJhbmQ0OCgpICUgX19uOwoKCgogICAgfQojIDE2MzQgIi9z
cGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBy
YW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QpCiAgICB7CgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0
dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kg
IT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5k
b21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0KIyAxNjYwICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJHZW5lcmF0
b3I+CiAgICB2b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVt
YmVyR2VuZXJhdG9yJiBfX3JhbmQpCiAgICB7CgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09
IF9fbGFzdCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmly
c3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2Zp
cnN0ICsgX19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0Zvcndh
cmRJdGVyCiAgICBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAg
ICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAg
ICBpZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICBfRm9yd2Fy
ZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKCiAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3Qp
CiAgICAgICAgaWYgKF9fcHJlZCgqX19uZXh0KSkgewogICAgICAgICAgc3dhcCgqX19maXJzdCwg
Kl9fbmV4dCk7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy
LCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyCiAgICBfX3BhcnRp
dGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAg
ICAgd2hpbGUgKHRydWUpCiAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAg
ICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBpZiAoX19wcmVkKCpfX2ZpcnN0KSkK
ICAgICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsK
ICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNl
IGlmICghX19wcmVkKCpfX2xhc3QpKQogICAgICAgICAgICAtLV9fbGFzdDsKICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7
CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTc0OCAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfRm9yd2Fy
ZEl0ZXIKICAgIHBhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAg
CgoKICAgICAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfRGlzdGFuY2U+
CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbikKICAgIHsKICAgICAg
aWYgKF9fbGVuID09IDEpCiAgICAgICAgcmV0dXJuIF9fcHJlZCgqX19maXJzdCkgPyBfX2xhc3Qg
OiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICBh
ZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9
IF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbWlkZGxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xl
biAvIDIpOwogICAgICBfRm9yd2FyZEl0ZXIgX19lbmQgPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRp
dGlvbihfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyKTsKICAgICAgcm90YXRl
KF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiAgICAgIGFkdmFuY2UoX19iZWdpbiwgZGlzdGFu
Y2UoX19taWRkbGUsIF9fZW5kKSk7CiAgICAgIHJldHVybiBfX2JlZ2luOwogICAgfQoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVu
YW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0Zvcndh
cmRJdGVyCiAgICBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgaWYgKF9fbGVuIDw9IF9f
YnVmZmVyX3NpemUpIHsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsK
ICAgICAgICBfUG9pbnRlciBfX3Jlc3VsdDIgPSBfX2J1ZmZlcjsKICAgICAgICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQogICAgICAgICAgaWYgKF9fcHJlZCgqX19maXJz
dCkpIHsKICAgICAgICAgICAgKl9fcmVzdWx0MSA9ICpfX2ZpcnN0OwogICAgICAgICAgICArK19f
cmVzdWx0MTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAqX19yZXN1
bHQyID0gKl9fZmlyc3Q7CiAgICAgICAgICAgICsrX19yZXN1bHQyOwogICAgICAgICAgfQogICAg
ICAgIGNvcHkoX19idWZmZXIsIF9fcmVzdWx0MiwgX19yZXN1bHQxKTsKICAgICAgICByZXR1cm4g
X19yZXN1bHQxOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlciBfX21p
ZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShf
X2ZpcnN0LCBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1
ZmZlcl9zaXplKTsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19lbmQgPSBfX3N0YWJsZV9wYXJ0aXRp
b25fYWRhcHRpdmUoIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8g
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICByb3RhdGUoX19iZWdpbiwgX19t
aWRkbGUsIF9fZW5kKTsKICAgICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxl
LCBfX2VuZCkpOwogICAgICAgIHJldHVybiBfX2JlZ2luOwogICAgICB9CiAgICB9CiMgMTg0OCAi
L3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAg
IF9Gb3J3YXJkSXRlcgogICAgc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3By
ZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAg
ICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZQogICAgICB7CiAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVU
eXBlOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl
cj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKICAgICAgICBfVGVtcG9yYXJ5X2J1
ZmZlcjxfRm9yd2FyZEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAg
ICAgICAgaWYgKF9fYnVmLnNpemUoKSA+IDApCiAgICAgICAgICByZXR1cm4gX19zdGFibGVfcGFy
dGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3Rl
ZF9zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2J1Zi5iZWdpbigpLCBfX2J1Zi5zaXplKCkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVy
biBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9f
YnVmLnJlcXVlc3RlZF9zaXplKCkpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNjZXNz
SXRlcgogICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAg
X19waXZvdCkKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3aGlsZSAoKl9fZmly
c3QgPCBfX3Bpdm90KQogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIC0tX19sYXN0OwogICAg
ICAgIHdoaWxlIChfX3Bpdm90IDwgKl9fbGFzdCkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAg
IGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAg
ICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVu
YW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgX191
bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCwgX0Nv
bXBhcmUgX19jb21wKQogICAgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIHdoaWxlIChf
X2NvbXAoKl9fZmlyc3QsIF9fcGl2b3QpKQogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIC0t
X19sYXN0OwogICAgICAgIHdoaWxlIChfX2NvbXAoX19waXZvdCwgKl9fbGFzdCkpCiAgICAgICAg
ICAtLV9fbGFzdDsKICAgICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgICAgIHJl
dHVybiBfX2ZpcnN0OwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAg
ICsrX19maXJzdDsKICAgICAgfQogICAgfQojIDE5MjkgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICBlbnVtIHsgX01fdGhyZXNob2xkID0g
MTYgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h
bWUgX1RwPgogICAgdm9pZAogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKICAgIHsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hpbGUgKF9fdmFsIDwgKl9f
bmV4dCkgewogICAgICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAgICAgIF9fbGFzdCA9IF9fbmV4
dDsKICAgICAgICAtLV9fbmV4dDsKICAgICAgfQogICAgICAqX19sYXN0ID0gX192YWw7CiAgICB9
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5z
ZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAgICAgLS1f
X25leHQ7CiAgICAgIHdoaWxlIChfX2NvbXAoX192YWwsICpfX25leHQpKSB7CiAgICAgICAgKl9f
bGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0tX19uZXh0
OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9faW5zZXJ0aW9uX3NvcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAg
ewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAg
ICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6
dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsK
ICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAgICAg
ICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fdW5n
dWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg
ICB2b2lkCiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j
b21wKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKCiAgICAgIGZv
ciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsr
X19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl
c3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9fY29tcChfX3Zh
bCwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9faSwgX19p
ICsgMSk7CiAgICAgICAgICAqX19maXJzdCA9IF9fdmFsOwogICAgICAgIH0KICAgICAgICBlbHNl
CiAgICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX192YWwsIF9fY29tcCk7
CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
cj4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs
dWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBf
X2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJf
aW5zZXJ0KF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZv
aWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAg
ICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsr
X19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBlKCpf
X2kpLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChf
X2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29y
dChfX2ZpcnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkKTsKICAgICAgICBfX3VuZ3VhcmRlZF9p
bnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2xhc3QpOwogICAgICB9CiAg
ICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly
c3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
Zmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fY29tcCk7CiAgICAgICAgX191bmd1YXJkZWRfaW5zZXJ0
aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9
CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19j
b21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBf
U2l6ZQogICAgX19sZyhfU2l6ZSBfX24pCiAgICB7CiAgICAgIF9TaXplIF9fazsKICAgICAgZm9y
IChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsKICAgICAgcmV0dXJuIF9fazsK
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h
bWUgX1NpemU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
X1NpemUgX19kZXB0aF9saW1pdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAg
ICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChf
X2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xh
c3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC0tX19kZXB0
aF9saW1pdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3Vu
Z3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0g
X19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQs
IF9fbGFzdCwgX19kZXB0aF9saW1pdCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0K
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h
bWUgX1NpemUsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19pbnRyb3NvcnRfbG9v
cChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz
c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19m
aXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsK
ICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwgX19jb21wKTsK
ICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRp
dGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Zh
bHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19s
YXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19pbnRyb3Nv
cnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0LCBfX2NvbXApOwogICAgICAgIF9f
bGFzdCA9IF9fY3V0OwogICAgICB9CiAgICB9CiMgMjE2NiAiL3NwYWNlL3NuYi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9S
YW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUg
X1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkg
ewogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAt
IF9fZmlyc3QpICogMik7CiAgICAgICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf
X2xhc3QpOwogICAgICB9CiAgICB9CiMgMjE5NyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBzb3J0KF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBh
cmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
UmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAK
CiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIF9faW50cm9zb3J0X2xvb3Ao
X19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMiwgX19jb21wKTsKICAg
ICAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAg
ICAgfQogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4K
ICAgIHZvaWQKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBf
X2ZpcnN0IDwgMTUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7
CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxl
ID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgICAgIF9faW5wbGFjZV9zdGFi
bGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChf
X21pZGRsZSwgX19sYXN0KTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBf
X21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0g
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSk7
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBf
X2ZpcnN0IDwgMTUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwg
X19jb21wKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBs
YWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBfX2lucGxh
Y2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCwgX19jb21wKTsKICAgICAgX19tZXJnZV93
aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xhc3QgLSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjEsIHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAg
ICB2b2lkCiAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplKQogICAgewogICAgICBf
RGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xh
c3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9f
Zmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Zmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICAgICAgX19maXJzdCArPSBfX3R3b19zdGVwOwogICAg
ICB9CgogICAgICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCks
IF9fc3RlcF9zaXplKTsKICAgICAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXpl
LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICAgICAgX19yZXN1bHQpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9S
YW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0
ZXIxIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3Rh
bmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogICAgICB3aGlsZSAoX19sYXN0IC0g
X19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICAgICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0
LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0
ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAg
IF9fZmlyc3QgKz0gX190d29fc3RlcDsKICAgICAgfQogICAgICBfX3N0ZXBfc2l6ZSA9IG1pbihf
RGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKCiAgICAgIG1lcmdlKF9f
Zmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgX19maXJzdCArIF9fc3Rl
cF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICBfX2NvbXAp
OwogICAgfQoKICBlbnVtIHsgX01fY2h1bmtfc2l6ZSA9IDcgfTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9f
Y2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19j
aHVua19zaXplKQogICAgewogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5r
X3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2No
dW5rX3NpemUpOwogICAgICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogICAgICB9CiAgICAg
IF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0Nv
bXBhcmU+CiAgICB2b2lkCiAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewog
ICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgICAgICBf
X2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7
CiAgICAgICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgICAgIH0KICAgICAgX19pbnNlcnRp
b25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlcj4KICAgIHZvaWQKICAgIF9f
bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIg
X19idWZmZXIpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKCiAgICAgIF9EaXN0
YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xh
c3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01f
Y2h1bmtfc2l6ZTsKICAgICAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qs
IF9fc3RlcF9zaXplKTsKCiAgICAgIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICAg
ICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3Np
emUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3Ao
X19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplKTsKICAgICAgICBf
X3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2
b2lkCiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9Qb2ludGVyIF9fYnVmZmVyLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90
eXBlIF9EaXN0YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7
CiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICAgICAg
X0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsKICAgICAgX19jaHVua19pbnNl
cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwoKICAgICAg
d2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChf
X2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKICAgICAgICBf
X3N0ZXBfc2l6ZSAqPSAyOwogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1
ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKICAgICAgICBfX3N0ZXBf
c2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAog
ICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVy
IF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNl
IF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogICAgICBpZiAoX19sZW4gPiBfX2J1ZmZl
cl9zaXplKSB7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRs
ZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRp
dmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICB9CiAg
ICAgIGVsc2UgewogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21p
ZGRsZSwgX19idWZmZXIpOwogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRs
ZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgIH0KICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2Zp
cnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAg
ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZl
ciwgX19idWZmZXJfc2l6ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLAogICAgICAgICAg
IHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZm
ZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAg
ewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgICAgIGlm
IChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZl
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2
ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAg
X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19j
b21wKTsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwg
X19idWZmZXIsIF9fY29tcCk7CiAgICAgIH0KICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0
LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAgICAg
ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwg
X19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQojIDI0
MzAgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lk
CiAgICBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX1RlbXBvcmFyeV9idWZm
ZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwog
ICAgICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQo
X19maXJzdCwgX19sYXN0KTsKICAgICAgZWxzZQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRp
dmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgp
KSk7CiAgICB9CiMgMjQ2NiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0
eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9f
Y29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E
aXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1Jh
bmRvbUFjY2Vzc0l0ZXIsIF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBp
ZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJz
dCwgX19sYXN0LCBfX2NvbXApOwogICAgICBlbHNlCiAgICAgICAgX19zdGFibGVfc29ydF9hZGFw
dGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1Zi5zaXpl
KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KIyAyNTAy
ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBwYXJ0
aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoK
ICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgZm9yIChfUmFuZG9tQWNj
ZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgICAgICBpZiAo
Kl9faSA8ICpfX2ZpcnN0KQogICAgICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwg
X19pLCBfVmFsdWVUeXBlKCpfX2kpKTsKICAgICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxl
KTsKICAgIH0KIyAyNTQwICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5
cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUs
CiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAg
ICAKCiAgICAgCgoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwog
ICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7
ICsrX19pKQogICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQogICAgICAgICAgX19w
b3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXAp
OwogICAgICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICB9CiMgMjU3
OSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ
dGVyPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIHBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9JbnB1dFZhbHVlVHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+
Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5j
ZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAgICAKCiAgICAgIGlmIChfX3Jlc3VsdF9maXJz
dCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgICAgIHdoaWxl
KF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0
KSB7CiAgICAgICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19y
ZXN1bHRfcmVhbF9sYXN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBtYWtlX2hl
YXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgICAgIHdoaWxlIChfX2Zp
cnN0ICE9IF9fbGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdF9maXJzdCkK
ICAgICAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCks
CiAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRfcmVhbF9sYXN0
IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRWYWx1ZVR5
cGUoKl9fZmlyc3QpKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAgc29ydF9oZWFw
KF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogICAgICByZXR1cm4gX19yZXN1
bHRfcmVhbF9sYXN0OwogICAgfQojIDI2MzMgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
LCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFu
ZG9tQWNjZXNzSXRlcgogICAgcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAg
IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZh
bHVlX3R5cGUgX0lucHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAogICAg
IAoKCiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19y
ZXN1bHRfbGFzdDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0g
X19yZXN1bHRfZmlyc3Q7CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0
X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAgICAgKl9fcmVzdWx0X3JlYWxfbGFz
dCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgICAgICsrX19m
aXJzdDsKICAgICAgfQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3Jl
YWxfbGFzdCwgX19jb21wKTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAg
ICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkKICAgICAgICAgIF9fYWRq
dXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmly
c3QpLAogICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRWYWx1ZVR5cGUoKl9fZmlyc3QpLAog
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgICsrX19maXJzdDsKICAgICAg
fQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19j
b21wKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0KIyAyNjg2ICIvc3Bh
Y2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBudGhfZWxlbWVu
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAo
X19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9
CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmly
c3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIGlmIChfX2N1
dCA8PSBfX250aCkKICAgICAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAg
ICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly
c3QsIF9fbGFzdCk7CiAgICB9CiMgMjcyOCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIG50aF9lbGVtZW50KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X250aCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9W
YWx1ZVR5cGU7CgoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+
IDMpIHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3Vh
cmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19m
aXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb21wKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb21wKTsKICAgICAgICBpZiAoX19jdXQgPD0gX19udGgpCiAgICAgICAgICBfX2ZpcnN0ID0g
X19jdXQ7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0KICAg
ICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICB9CiMgMjc2
OCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0Zv
cndhcmRJdGVyCiAgICBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZm
ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgoKCgoKICAgICAKICAgICAKICAgICAKCiAgICAg
IF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBf
RGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAg
d2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAg
X19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAg
ICAgICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRk
bGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxm
IC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAg
ICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjgxNiAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9G
b3J3YXJkSXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3
YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5
cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShf
X2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0Zvcndh
cmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFs
ZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFu
Y2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFs
KSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0Owog
ICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVs
c2UKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0
OwogICAgfQojIDI4NTYgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUg
X1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAg
ICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0
KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRs
ZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAx
OwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBf
X2hhbGYpOwogICAgICAgIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgICAgIF9fbGVuID0g
X19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAg
ICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAg
ICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI5MDEgIi9zcGFj
ZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwg
X0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBf
RGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0g
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAg
ICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAg
ICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAg
ICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoX192YWws
ICpfX21pZGRsZSkpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAg
ICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAg
IF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1
cm4gX19maXJzdDsKICAgIH0KIyAyOTQ4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
LCB0eXBlbmFtZSBfVHA+CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAg
ZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNv
bnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9E
aXN0YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9f
bGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hh
bGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAg
d2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAg
X19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAg
ICAgICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRk
bGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxm
IC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAg
ICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fbGVmdCA9IGxv
d2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAgICAgICAgICBhZHZhbmNlKF9f
Zmlyc3QsIF9fbGVuKTsKICAgICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxl
LCBfX2ZpcnN0LCBfX3ZhbCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9G
b3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0
dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwog
ICAgfQojIDMwMDMgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVy
PgogICAgZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46
OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAg
ICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2Zp
cnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJ
dGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7
CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7
CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKCpf
X21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAg
ICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAg
ICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICAgICAg
X19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2xlZnQgPSBsb3dlcl9i
b3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwsIF9fY29tcCk7CiAgICAgICAgICBhZHZhbmNl
KF9fZmlyc3QsIF9fbGVuKTsKICAgICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlk
ZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3
YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAgICAg
fQogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwg
X19maXJzdCk7CiAgICB9CiMgMzA1MiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg
dHlwZW5hbWUgX1RwPgogICAgYm9vbAogICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf
X3ZhbCkKICAgIHsKCgogICAgIAogICAgIAoKICAgICAKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kg
PSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgICAgcmV0dXJuIF9faSAh
PSBfX2xhc3QgJiYgIShfX3ZhbCA8ICpfX2kpOwogICAgfQojIDMwODMgIi9zcGFjZS9zbmIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBi
b29sCiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2Nv
bXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0g
bG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgcmV0dXJu
IF9faSAhPSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7CiAgICB9CiMgMzExNSAiL3Nw
YWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5h
bWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19m
aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQog
ICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKCpf
X2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwog
ICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAg
ICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xh
c3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQojIDMxNjYgIi9z
cGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVu
YW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1
dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAg
ICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9f
Zmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAg
ICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAg
ICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFz
dDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgoKCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAg
ICB2b2lkCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRk
bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBf
X2xlbjIpCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgICAg
ICByZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgICAgIGlmICgq
X19taWRkbGUgPCAqX19maXJzdCkKICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19t
aWRkbGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRf
Y3V0ID0gX19taWRkbGU7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgX0Rpc3Rh
bmNlIF9fbGVuMjIgPSAwOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgX19s
ZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7
CiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9f
Zmlyc3RfY3V0KTsKICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25k
X2N1dCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7
CiAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgIF9fZmlyc3Rf
Y3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAg
ICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgIH0KICAg
ICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9fZmlyc3RfY3V0OwogICAgICBhZHZhbmNl
KF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCkpOwogICAgICBf
X21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7CiAgICAgIF9f
bWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIgLSBf
X2xlbjIyKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0
ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBf
X21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9f
bGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKF9fbGVu
MSArIF9fbGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsICpfX2ZpcnN0
KSkKICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICAgIHJl
dHVybjsKICAgICAgfQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2Zp
cnN0OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAg
ICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwog
ICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7
CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgX19zZWNvbmRf
Y3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXAp
OwogICAgICAgIF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAg
ICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBh
ZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBl
cl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgICAg
ICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICB9CiAgICAg
IHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAgYWR2YW5jZShf
X25ld19taWRkbGUsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpKTsKICAgICAgX19t
ZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIsIF9fY29tcCk7CiAg
ICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xl
bjIgLSBfX2xlbjIyLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9C
aWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAg
ICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19yb3Rh
dGVfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Ug
X19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlcl9l
bmQ7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYgX19sZW4yIDw9IF9fYnVmZmVyX3NpemUp
IHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVy
KTsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAg
ICAgIHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3QpOwogICAgICB9
CiAgICAgIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19idWZm
ZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIGNvcHko
X19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQo
X19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAg
ICAgICByb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgYWR2YW5jZShf
X2ZpcnN0LCBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KSk7CiAgICAgICAgcmV0dXJuIF9fZmly
c3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1l
IF9CaWRpcmVjdGlvbmFsSXRlcjM+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzCiAgICBfX21lcmdl
X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2Zp
cnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0KQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0g
X19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0Miwg
X19yZXN1bHQpOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4g
Y29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFz
dDE7CiAgICAgIC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoKl9f
bGFzdDIgPCAqX19sYXN0MSkgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAg
ICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gY29weV9i
YWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFz
dDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19s
YXN0MjsKICAgICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1
cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgICAg
ICAtLV9fbGFzdDI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwK
ICAgICAgICAgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzLCB0eXBlbmFtZSBfQ29tcGFy
ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0
aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg
ICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQo
X19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFz
dDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVz
dWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgICAtLV9fbGFzdDI7CiAgICAgIHdoaWxlICh0cnVl
KSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7CiAgICAgICAgICAq
LS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEp
CiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9f
cmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9fZmlyc3QyID09
IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19f
bGFzdDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9CiAgICAgIH0K
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVu
YW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50ZXI+CiAgICB2b2lkCiAgICBfX21lcmdlX2Fk
YXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEs
IF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVy
LCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgICAgIGlmIChfX2xlbjEgPD0g
X19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVy
IF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAg
ICAgICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19m
aXJzdCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJf
c2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxl
LCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICAgICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0
LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAgICAgICAgIH0K
ICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9j
dXQgPSBfX2ZpcnN0OwogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0
ID0gX19taWRkbGU7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgICAg
ICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4y
KSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgICAgICAg
ICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAgICAgICAgX19z
ZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsK
ICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9j
dXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBf
X2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX3NlY29uZF9j
dXQsIF9fbGVuMjIpOwogICAgICAgICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5k
KF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgICAgICAgX19s
ZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgfQogICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgICAgICAgICAg
ICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9f
bGVuMjIsIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1
ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0
X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJnZV9h
ZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xl
bjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUg
X1BvaW50ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21l
cmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBf
X2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9f
YnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQogICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19s
ZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5k
ID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShf
X2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXAp
OwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUp
IHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19s
YXN0LCBfX2J1ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19t
aWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICAgIH0KICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2Zp
cnN0OwogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRk
bGU7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgICAgICAgX0Rpc3Rh
bmNlIF9fbGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAg
ICAgICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgICAgICAgICAgICBhZHZh
bmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAgICAgICAgX19zZWNvbmRfY3V0
ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwog
ICAgICAgICAgICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1
dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9f
bGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1
dCwgX19sZW4yMik7CiAgICAgICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQo
X19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAg
ICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgICAg
ICAgICAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNv
bmRfY3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xl
bjExLCBfX2xlbjIyLCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwg
X19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICAgICAg
ICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0
LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAt
IF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgICAgICAgfQog
ICAgfQojIDM1MDggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2
b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAg
IF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRp
cmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsK
CgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxl
ID09IF9fbGFzdCkKICAgICAgICByZXR1cm47CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMSA9
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjIg
PSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9C
aWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAg
ICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVy
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICAgICAgZWxzZQog
ICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4x
LCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFu
Y2VUeXBlKF9fYnVmLnNpemUoKSkpOwogICAgfQojIDM1NTkgIi9zcGFjZS9zbmIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
QmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgaW5wbGFj
ZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46
OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAg
ICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9
PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuOwoKICAgICAg
X0Rpc3RhbmNlVHlwZSBfX2xlbjEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAg
IF9EaXN0YW5jZVR5cGUgX19sZW4yID0gZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCk7CgogICAg
ICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVm
KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICAgICAg
X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEs
IF9fbGVuMiwgX19jb21wKTsKICAgICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19m
aXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAgIGluY2x1
ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAg
IAogICAgIAogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3Qx
KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoKl9fZmlyc3QxIDwgKl9f
Zmlyc3QyKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAgICAgICAgICArK19f
Zmlyc3QxLCArK19fZmlyc3QyOwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVy
MiwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAg
IAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx
ICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpf
X2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZihfX2NvbXAo
Kl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNl
CiAgICAgICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICAgICAgcmV0dXJuIF9fZmlyc3Qy
ID09IF9fbGFzdDI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBl
bmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgog
ICAgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAog
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAg
ICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
X2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikg
ewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsK
ICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAg
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAg
IH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAg
ICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICAr
K19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBj
b3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJ
dGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNl
dF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAg
ICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9f
Zmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAg
ICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9f
Zmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAg
ICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19f
Zmlyc3QyOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVy
biBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3Vs
dCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lu
cHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9p
bnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xh
c3QyLAogICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAg
ICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwg
Kl9fZmlyc3QyKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlIGlmICgqX19maXJz
dDIgPCAqX19maXJzdDEpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAg
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg
ICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0
dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw
ZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0
SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAg
ICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2Zp
cnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAo
X19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19f
Zmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAg
ICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAg
ICBfT3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3
aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAg
IGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAg
IH0KICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICArK19f
Zmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsr
X19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwg
X19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5h
bWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAK
ICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9f
Zmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytf
X2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYg
KF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwogICAg
ICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAg
ICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRl
cjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9zeW1tZXRy
aWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0
SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAg
ICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19m
aXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAg
ICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytf
X3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwog
ICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3Qy
LCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVu
YW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1
dEl0ZXIKICAgIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAg
IAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh
c3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAg
KytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0Miwg
Kl9fZmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAg
KytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2Ug
ewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQog
ICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0
MSwgX19yZXN1bHQpKTsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
PgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYg
KCpfX3Jlc3VsdCA8ICpfX2ZpcnN0KQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAg
ICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0g
X19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9f
Y29tcCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1
cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAg
IF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09
IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9f
Zmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgqX19m
aXJzdCA8ICpfX3Jlc3VsdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0
dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5
cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmly
c3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmIChfX2NvbXAo
Kl9fZmlyc3QsICpfX3Jlc3VsdCkpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0
aW9uYWxJdGVyPgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0
ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAg
CgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBp
ZiAoX19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFz
dDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faSA8ICpfX2lpKSB7
CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hp
bGUgKCEoKl9faSA8ICotLV9faikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAo
X19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAg
ICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0
ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAg
ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19p
ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAg
ICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19p
aSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkg
ewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdo
aWxlICghX19jb21wKCpfX2ksICotLV9faikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVy
X3N3YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewog
ICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rp
b25hbEl0ZXI+CiAgICBib29sCiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAK
CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlm
IChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0
OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmICgqX19paSA8ICpfX2kpIHsK
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGls
ZSAoISgqLS1fX2ogPCAqX19pKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChf
X2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAg
ICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl
ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRp
cmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAg
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kg
PT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAg
ICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lp
ID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmIChfX2NvbXAoKl9faWksICpfX2kpKSB7
CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hp
bGUgKCFfX2NvbXAoKi0tX19qLCAqX19pKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJf
c3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAg
ICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJzdF9v
ZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpCiAgICB7Cgog
ICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsr
X19maXJzdDEpCiAgICAgICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9f
aXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgICAgIGlmICgqX19maXJzdDEgPT0gKl9f
aXRlcikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0MTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJ
dGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0lucHV0SXRlcgogICAgZmluZF9m
aXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAg
ICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAg
ICAKICAgICAKCgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsr
X19maXJzdDEpCiAgICAgICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9f
aXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qx
LCAqX19pdGVyKSkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19s
YXN0MTsKICAgIH0KIyA0MjAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlw
ZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0Zv
cndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsK
ICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAg
ICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAg
ICAgIHdoaWxlICgxKSB7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAg
ICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwog
ICAgICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4g
X19yZXN1bHQ7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19y
ZXN1bHQ7CiAgICAgICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICAr
K19fZmlyc3QxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLAogICAgICAg
ICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBfX2Zp
bmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3Qy
LAogICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90
YWcsCiAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewogICAgICBp
ZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxz
ZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hp
bGUgKDEpIHsKICAgICAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAg
ID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsK
ICAgICAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJu
IF9fcmVzdWx0OwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdf
cmVzdWx0OwogICAgICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAg
KytfX2ZpcnN0MTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs
SXRlcjI+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlv
bmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBf
X2xhc3QyLAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiBy
ZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlw
ZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAg
ICAgIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0
MihfX2ZpcnN0Mik7CiAgICAgIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIx
KF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
UmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyKTsKCiAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19y
bGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgICAgIGFkdmFu
Y2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgICAgIHJldHVy
biBfX3Jlc3VsdDsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rp
b25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVu
YW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX2ZpbmRf
ZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGly
ZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgIF9CaW5h
cnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2
ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVk
ZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAg
ICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIo
X19maXJzdDIpOwogICAgICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShf
X2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jl
dkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbXApOwoKICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICBy
ZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBf
X3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRp
c3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg
ICB9CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUg
X0ZvcndhcmRJdGVyMj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9y
d2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAg
IAogICAgIAogICAgIAoKCgogICAgICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0
MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3Jf
Y2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2Nh
dGVnb3J5KF9fZmlyc3QyKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVBy
ZWRpY2F0ZT4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0
ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICBfQmlu
YXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHJl
dHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAg
ICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAogICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKfQojIDcwICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYWxnb3JpdGhtIiAyIDMKIyA1NyAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmluZyIgMiAzCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMSAzCiMgNDUgIi9zcGFj
ZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMK
Cm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX21heF9zaXplID0gKCgobnBvcyAtIHNp
emVvZihfUmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkgLyA0OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IF9D
aGFyVAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVw
OjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvczsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1l
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0b3JhZ2Vb
CiAgICAoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAt
IDEpL3NpemVvZihzaXplX3R5cGUpXTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19l
bmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf
dGFnKQogICAgICB7CiAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2Mo
KSkKICAgICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgogICAgICAg
IF9DaGFyVCBfX2J1ZlsxMDBdOwogICAgICAgIHNpemVfdHlwZSBfX2kgPSAwOwogICAgICAgIHdo
aWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFy
VCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fYnVmW19faSsrXSA9ICpfX2JlZzsKICAgICAg
ICAgICAgKytfX2JlZzsKICAgICAgICAgIH0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19j
cmVhdGUoX19pLCBfX2EpOwogICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0
YSgpLCBfX2J1ZiwgX19pKTsKICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9faTsKICAgICAgICB0
cnkKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9s
ZW5ndGg7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fbGFzdCA9IF9fci0+X01fcmVmZGF0YSgp
ICsgX19yLT5fTV9jYXBhY2l0eTsKICAgICAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0g
X19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICpfX3AgPSBf
UmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fci0+X01f
cmVmZGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlm
IChfX3AgPT0gX19sYXN0KQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgKl9fcCsrID0gKl9fYmVnOwogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAg
ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3Ag
LSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgIF9SZXAqIF9fYW5vdGhlciA9IF9S
ZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fYSk7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlw
ZTo6Y29weShfX2Fub3RoZXItPl9NX3JlZmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fci0+X01fcmVmZGF0YSgpLCBfX2xlbik7CiAgICAgICAgICAgICAgICBfX3It
Pl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgICAgIF9fciA9IF9fYW5vdGhlcjsKICAgICAg
ICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19sZW47CiAgICAgICAgICAgICAgfQogICAgICAg
ICAgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9k
ZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIHJldHVy
biAwOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+CiAgICAgIF9D
aGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAg
IF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2Mm
IF9fYSwKICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAg
ICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJl
dHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgICBpZiAoX19idWlsdGlu
X2V4cGVjdChfX2JlZyA9PSBfSW5JdGVyKCksIDApKQogICAgICAgICAgX190aHJvd19sb2dpY19l
cnJvcigiYXR0ZW1wdCB0byBjcmVhdGUgc3RyaW5nIHdpdGggbnVsbCBwb2ludGVyIik7CgogICAg
ICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KHN0ZDo6ZGlzdGFu
Y2UoX19iZWcsIF9fZW5kKSk7CgoKICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUo
X19kbmV3LCBfX2EpOwogICAgICAgIHRyeQogICAgICAgICAgeyBfU19jb3B5X2NoYXJzKF9fci0+
X01fcmVmZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAg
ICAgewogICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICB9CiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2RuZXc7CgogICAgICAgIF9f
ci0+X01fcmVmZGF0YSgpW19fZG5ld10gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICByZXR1
cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hhclQqCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9TX2NvbnN0cnVjdChzaXpl
X3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIHsKICAgICAgaWYg
KF9fbiA9PSAwICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVw
KCkuX01fcmVmY29weSgpOwoKCiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX24s
IF9fYSk7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIGlmIChfX24pCiAgICAgICAgICAg
IHRyYWl0c190eXBlOjphc3NpZ24oX19yLT5fTV9yZWZkYXRhKCksIF9fbiwgX19jKTsKICAgICAg
ICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3ko
X19hKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgX19yLT5fTV9sZW5ndGggPSBf
X247CiAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAg
ICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIpCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFi
KF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLAogICAgICAgICAgICAgICAgIF9fc3Ry
LmdldF9hbGxvY2F0b3IoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKQog
ICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCksIF9DaGFyVCgpLCBfX2Ep
LCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVj
dChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSksIF9BbGxvYygpKQogICAgeyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNp
Y19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAg
ICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9k
YXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX19hKSwgX19hKQog
ICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIGNvbnN0
IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgKyBf
X24sIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25z
dCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19zID8g
X19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpIDoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fcyArIG5wb3MsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKHNpemVfdHlw
ZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhf
U19jb25zdHJ1Y3QoX19uLCBfX2MsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyIF9fYmVnLCBfSW5wdXRJdGVy
IF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0
KF9fYmVnLCBfX2VuZCwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OmFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewogICAg
ICBpZiAoX01fcmVwKCkgIT0gX19zdHIuX01fcmVwKCkpCiAgICAgICAgewoKICAgICAgICAgIGFs
bG9jYXRvcl90eXBlIF9fYSA9IHRoaXMtPmdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9DaGFy
VCogX190bXAgPSBfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfX2EsIF9fc3RyLmdldF9hbGxvY2F0
b3IoKSk7CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01f
ZGF0YShfX3RtcCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6
CiAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAoKQogICAgewogICAgICBz
aXplX3R5cGUgX19zaXplID0gc2l6ZW9mKF9SZXApICsgKF9NX2NhcGFjaXR5ICsgMSkgKiBzaXpl
b2YoX0NoYXJUKTsKICAgICAgX1Jhd19ieXRlc19hbGxvYyhfX2EpLmRlYWxsb2NhdGUocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4odGhpcyksIF9fc2l6ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X01fbGVha19oYXJkKCkK
ICAgIHsKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAgICAgICBfTV9tdXRh
dGUoMCwgMCwgMCk7CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICB9CgoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6CiAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXpl
X3R5cGUgX19sZW4yKQogICAgewogICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHRoaXMtPnNp
emUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXplICsgX19s
ZW4yIC0gX19sZW4xOwogICAgICBjb25zdCBfQ2hhclQqIF9fc3JjID0gX01fZGF0YSgpICsgX19w
b3MgKyBfX2xlbjE7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2hvd19tdWNoID0gX19vbGRfc2l6
ZSAtIF9fcG9zIC0gX19sZW4xOwoKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8
fCBfX25ld19zaXplID4gY2FwYWNpdHkoKSkKICAgICAgICB7CgogICAgICAgICAgYWxsb2NhdG9y
X3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwoKCiAgICAgICAgICBjb25zdCBzaXplX3R5cGUg
X19wYWdlc2l6ZSA9IDQwOTY7CiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19tYWxsb2NfaGVh
ZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CgogICAgICAgICAgY29uc3Qgc2l6ZV90eXBl
IF9fcGFnZV9jYXBhY2l0eSA9IChfX3BhZ2VzaXplIC0gX19tYWxsb2NfaGVhZGVyX3NpemUKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzaXplb2YoX1JlcCkg
LSBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgICAgIF9SZXAqIF9fcjsKICAgICAgICAgIGlm
IChfX25ld19zaXplID4gY2FwYWNpdHkoKSAmJiBfX25ld19zaXplID4gX19wYWdlX2NhcGFjaXR5
KQoKICAgICAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbmV3X3NpemUgPiAyKmNhcGFj
aXR5KCkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc2l6ZSA6IDIq
Y2FwYWNpdHkoKSwgX19hKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19yID0gX1JlcDo6
X1NfY3JlYXRlKF9fbmV3X3NpemUsIF9fYSk7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGlmIChfX3BvcykKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5
KF9fci0+X01fcmVmZGF0YSgpLCBfTV9kYXRhKCksIF9fcG9zKTsKICAgICAgICAgICAgICBpZiAo
X19ob3dfbXVjaCkKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVm
ZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKC4uLikK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGlzcG9zZShnZXRfYWxsb2NhdG9y
KCkpOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgICBfTV9yZXAo
KS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3ItPl9NX3JlZmRhdGEoKSk7
CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ob3dfbXVjaCAmJiBfX2xlbjEgIT0gX19sZW4yKQog
ICAgICAgIHsKCiAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCkgKyBfX3BvcyAr
IF9fbGVuMiwgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgIH0KICAgICAgX01fcmVwKCktPl9N
X3NldF9zaGFyYWJsZSgpOwogICAgICBfTV9yZXAoKS0+X01fbGVuZ3RoID0gX19uZXdfc2l6ZTsK
ICAgICAgX01fZGF0YSgpW19fbmV3X3NpemVdID0gX1JlcDo6X1NfdGVybWluYWw7CgogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnJlc2VydmUoc2l6ZV90eXBlIF9fcmVzKQogICAgewogICAgICBpZiAoX19yZXMgPiB0aGlzLT5j
YXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAgICAgICB7CiAgICAgICAg
ICBpZiAoX19yZXMgPiB0aGlzLT5tYXhfc2l6ZSgpKQogICAgICAgICAgICBfX3Rocm93X2xlbmd0
aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNlcnZlIik7CgogICAgICAgICAgaWYgKF9fcmVzIDwg
dGhpcy0+c2l6ZSgpKQogICAgICAgICAgICBfX3JlcyA9IHRoaXMtPnNpemUoKTsKICAgICAgICAg
IGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9DaGFyVCog
X190bXAgPSBfTV9yZXAoKS0+X01fY2xvbmUoX19hLCBfX3JlcyAtIHRoaXMtPnNpemUoKSk7CiAg
ICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3Rt
cCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6c3dhcChiYXNpY19zdHJpbmcmIF9fcykKICAgIHsKICAgICAgaWYg
KF9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJh
YmxlKCk7CiAgICAgIGlmIChfX3MuX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9f
cy5fTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmICh0aGlzLT5nZXRfYWxsb2Nh
dG9yKCkgPT0gX19zLmdldF9hbGxvY2F0b3IoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hhclQq
IF9fdG1wID0gX01fZGF0YSgpOwogICAgICAgICAgX01fZGF0YShfX3MuX01fZGF0YSgpKTsKICAg
ICAgICAgIF9fcy5fTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CgogICAgICBlbHNlCiAgICAgICAg
ewogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBf
X3MuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDIoX19zLl9N
X2liZWdpbigpLCBfX3MuX01faWVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLT5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgKnRoaXMgPSBfX3RtcDI7CiAgICAgICAg
ICBfX3MgPSBfX3RtcDE7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXAqCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9TX2NyZWF0ZShzaXplX3QgX19j
YXBhY2l0eSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jKQogICAgewogICAgICB0eXBlZGVmIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKCgogICAgICBp
ZiAoX19jYXBhY2l0eSA+IF9TX21heF9zaXplKQoKCgogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vy
cm9yKCJiYXNpY19zdHJpbmc6Ol9TX2NyZWF0ZSIpOwoKCgoKICAgICAgc2l6ZV90IF9fc2l6ZSA9
IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKIyA0MjEg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX3N0cmluZy50
Y2MiIDMKICAgICAgY29uc3Qgc2l6ZV90IF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBz
aXplX3QgX19zdWJwYWdlc2l6ZSA9IDEyODsKICAgICAgY29uc3Qgc2l6ZV90IF9fbWFsbG9jX2hl
YWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwogICAgICBpZiAoKF9fc2l6ZSArIF9fbWFs
bG9jX2hlYWRlcl9zaXplKSA+IF9fcGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90
IF9fZXh0cmEgPQogICAgICAgICAgICAoX19wYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2Nf
aGVhZGVyX3NpemUpICUgX19wYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19wYWdlc2l6ZTsKICAg
ICAgICAgIF9fY2FwYWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAg
X19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXAp
OwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19zaXplID4gX19zdWJwYWdlc2l6ZSkKICAgICAg
ICB7CiAgICAgICAgICBzaXplX3QgX19leHRyYSA9CiAgICAgICAgICAgIChfX3N1YnBhZ2VzaXpl
IC0gKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgJSBfX3N1YnBhZ2VzaXplKSkKICAg
ICAgICAgICAgJSBfX3N1YnBhZ2VzaXplOwogICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJh
IC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICog
c2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiAgICAgICAgfQoKCgogICAgICB2b2lkKiBf
X3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOwogICAg
ICBfUmVwICpfX3AgPSBuZXcgKF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2FwYWNpdHkg
PSBfX2NhcGFjaXR5OwogICAgICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfX3AtPl9N
X2xlbmd0aCA9IDA7CiAgICAgIHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9j
bG9uZShjb25zdCBfQWxsb2MmIF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsKCiAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX3JlcXVlc3RlZF9jYXAgPSBfTV9sZW5ndGggKyBfX3JlczsKCiAg
ICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fcGFnZV9jYXBhY2l0eSA9CiAgICAgICAgKF9fcGFnZXNpemUgLSBfX21h
bGxvY19oZWFkZXJfc2l6ZSAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAg
IC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SZXAqIF9fcjsKICAgICAgaWYgKF9fcmVxdWVzdGVk
X2NhcCA+IF9NX2NhcGFjaXR5ICYmIF9fcmVxdWVzdGVkX2NhcCA+IF9fcGFnZV9jYXBhY2l0eSkK
CiAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCA+IDIqX01fY2Fw
YWNpdHkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlcXVlc3RlZF9jYXAgOiAy
Kl9NX2NhcGFjaXR5LCBfX2FsbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9fciA9IF9SZXA6Ol9T
X2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAsIF9fYWxsb2MpOwoKICAgICAgaWYgKF9NX2xlbmd0aCkK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShf
X3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9CiAgICAgICAgICBj
YXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19h
bGxvYyk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRh
KCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAg
IGlmIChfX24gPiBtYXhfc2l6ZSgpKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNp
Y19zdHJpbmc6OnJlc2l6ZSIpOwogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp
OwogICAgICBpZiAoX19zaXplIDwgX19uKQogICAgICAgIHRoaXMtPmFwcGVuZChfX24gLSBfX3Np
emUsIF9fYyk7CiAgICAgIGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkKICAgICAgICB0aGlzLT5lcmFz
ZShfX24pOwoKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
PgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZShpdGVy
YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKCiAgICAgICAg
YmFzaWNfc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsKICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9z
YWZlKF9faTEsIF9faTIsIF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7CiAgICAgIH0K
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19p
MSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19rMikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBz
dGF0aWNfY2FzdDxzaXplX3R5cGU+KHN0ZDo6ZGlzdGFuY2UoX19rMSwgX19rMikpOwogICAgICAg
IHNpemVfdHlwZSBfX2RvbGQgPSBfX2kyIC0gX19pMTsKICAgICAgICBzaXplX3R5cGUgX19kbWF4
ID0gdGhpcy0+bWF4X3NpemUoKTsKCiAgICAgICAgaWYgKF9fZG1heCA8PSBfX2RuZXcpCiAgICAg
ICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfTV9yZXBsYWNlIik7CiAg
ICAgICAgc2l6ZV90eXBlIF9fb2ZmID0gX19pMSAtIF9NX2liZWdpbigpOwogICAgICAgIF9NX211
dGF0ZShfX29mZiwgX19kb2xkLCBfX2RuZXcpOwoKCiAgICAgICAgaWYgKF9fZG5ldykKICAgICAg
ICAgIF9TX2NvcHlfY2hhcnMoX01fZGF0YSgpICsgX19vZmYsIF9fazEsIF9fazIpOwoKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6CiAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5
cGUgX19uMikKICAgIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNp
emUoKTsKICAgICAgaWYgKF9fcG9zMiA+IF9fc3Ryc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9v
Zl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIGNvbnN0IGJvb2wgX190ZXN0
bjIgPSBfX24yIDwgX19zdHJzaXplIC0gX19wb3MyOwogICAgICBjb25zdCBzaXplX3R5cGUgX19m
b2xkbjIgPSBfX3Rlc3RuMiA/IF9fbjIgOiBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgIHJldHVy
biB0aGlzLT5yZXBsYWNlKF9fcG9zMSwgX19uMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19zdHIuX01fZGF0YSgpICsgX19wb3MyLCBfX2ZvbGRuMik7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIpCiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAg
IHNpemVfdHlwZSBfX2xlbiA9IF9fc2l6ZSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVu
ID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAg
cmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01faWJl
Z2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01faWVuZCgpKTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3Qg
YmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAg
ewoKCgogICAgICBzaXplX3R5cGUgX19sZW4gPSBzdGQ6Om1pbihfX3N0ci5zaXplKCkgLSBfX3Bv
cywgX19uKSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHko
KSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vf
c2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBfQ2hh
clQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19u
ICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAg
ICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9N
X2llbmQoKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBf
X2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsKICAg
ICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9f
bGVuKTsKICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBf
X24sIF9fYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0
cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlw
ZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjpsZW5ndGgo
X19saHMpOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3N0ci5yZXNlcnZlKF9f
bGVuICsgX19yaHMuc2l6ZSgpKTsKICAgICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9f
bGVuKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9w
ZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUg
X19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOwogICAgICBfX3N0
ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwg
X19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShpdGVy
YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsKICAgICAgc2l6ZV90eXBlIF9f
b2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgaWYgKG1heF9zaXplKCkgLSAodGhpcy0+
c2l6ZSgpIC0gX19uMSkgPD0gX19uMikKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFz
aWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIF9NX211dGF0ZSAoX19vZmYxLCBfX24xLCBfX24y
KTsKCiAgICAgIGlmIChfX24yKQogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgp
ICsgX19vZmYxLCBfX24yLCBfX2MpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90
eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvcHko
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsK
ICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh
bmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlmIChfX24gPiB0aGlzLT5zaXplKCkg
LSBfX3BvcykKICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkgLSBfX3BvczsKCiAgICAgIHRyYWl0
c190eXBlOjpjb3B5KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7CgogICAgICByZXR1cm4g
X19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z
aXplKCk7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgY29uc3QgX0NoYXJUKiBf
X2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgIGZvciAoOyBfX3hwb3MgKyBfX24gPD0gX19zaXplOyAr
K19feHBvcykKICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX194cG9z
LCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBu
cG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBl
IF9fcmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQogICAgICAgIHsKICAgICAg
ICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgc2l6ZV90eXBl
IF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFp
dHNfdHlwZTo6ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOwogICAgICAgICAgaWYgKF9f
cCkKICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiAgICAgICAgfQogICAgICByZXR1
cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g
dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19uIDw9IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAg
ICBfX3BvcyA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fbiwgX19wb3MpOwogICAgICAgICAgY29uc3Qg
X0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3Ms
IF9fbikgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICAgICAgfQog
ICAgICAgICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9z
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7
CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUp
CiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6ZSAtIDE7CiAgICAgICAg
ICBpZiAoX194cG9zID4gX19wb3MpCiAgICAgICAgICAgIF9feHBvcyA9IF9fcG9zOwoKICAgICAg
ICAgIGZvciAoKytfX3hwb3M7IF9feHBvcy0tID4gMDsgKQogICAgICAgICAgICBpZiAodHJhaXRz
X3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgICAgIHJldHVybiBf
X3hwb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBl
bmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9v
Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25z
dAogICAgewogICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+c2l6ZSgpOyArK19fcG9z
KQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZp
bmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10pOwogICAgICAgICAgaWYgKF9fcCkKICAgICAg
ICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
IGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp
OwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3Np
emUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBf
TV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAg
ICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiAgICAgICAgfQogICAgICBy
ZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90
IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19f
eHBvcykKICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClb
X194cG9zXSkpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25z
dAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3Mg
PCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9N
X2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0
dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBl
IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAg
ICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAg
ICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6
ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJu
IF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAg
ICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBf
X2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9
IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAo
LS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBk
bwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0
YSgpW19fc2l6ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAg
ICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJu
IG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
LCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUg
X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNp
emUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh
bmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplPSBz
dGQ6Om1pbihfX3NpemUgLSBfX3BvcywgX19uKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc3Rk
OjptaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29t
cGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAgICAgIGlmICgh
X19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25z
dCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXpl
X3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNp
emUoKTsKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChf
X3BvczEgPiBfX3NpemUgfHwgX19wb3MyID4gX19vc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9v
Zl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19yc2l6
ZSA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jv
c2l6ZSA9IHN0ZDo6bWluKF9fb3NpemUgLSBfX3BvczIsIF9fbjIpOwogICAgICBzaXplX3R5cGUg
X19sZW4gPSBzdGQ6Om1pbihfX3JzaXplLCBfX3Jvc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFp
dHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvczEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3N0ci5kYXRhKCkgKyBfX3BvczIsIF9fbGVuKTsKICAgICAgaWYg
KCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fcm9zaXplOwogICAgICByZXR1cm4gX19y
OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAgIHsKICAg
ICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fb3Np
emUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHN0
ZDo6bWluKF9fc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29t
cGFyZShfTV9kYXRhKCksIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3Ig
PSBfX3NpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBh
cmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNv
bnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlm
IChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3Ry
aW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjps
ZW5ndGgoX19zKTsKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBzdGQ6Om1pbihfX3NpemUgLSBf
X3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHN0ZDo6bWluKF9fcnNpemUsIF9f
b3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsg
X19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXpl
IC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJh
c2ljX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAg
IHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp
cy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRf
b2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3Np
emUgPSBzdGQ6Om1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fbjIpOwogICAgICBzaXpl
X3R5cGUgX19yc2l6ZSA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6
ZV90eXBlIF9fbGVuID0gc3RkOjptaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3Ig
PSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAg
ICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1
cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBj
bGFzcyBfQWxsb2M+CiAgICB2b2lkCiAgICBfU19zdHJpbmdfY29weShjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwKICAgICAgICAgICAgICAgICAgIF9D
aGFyVCogX19idWYsIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIF9fYnVmc2l6KQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAg
c2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fYnl0
ZXMgPSBzdGQ6Om1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7CiAgICAgIF9UcmFpdHM6OmNv
cHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAgIF9fYnVmW19fYnl0ZXNdID0g
X0NoYXJUKCk7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmc8
Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgb3Bl
cmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRl
CiAgICBiYXNpY19vc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNo
YXI+JiwgY29uc3Qgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFt
PGNoYXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJiwgY2hhcik7
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0bGluZShi
YXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiMgOTc3ICIvc3BhY2Uvc25iL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCn0KIyA1OCAiL3NwYWNl
L3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmluZyIgMiAzCiMgNDcgIi4uLy4uL2lu
Y2x1ZGUvcXN0cmluZy5oIiAyCiMgNTcgIi4uLy4uL2luY2x1ZGUvcXN0cmluZy5oIgpjbGFzcyBR
UmVnRXhwOwpjbGFzcyBRU3RyaW5nOwpjbGFzcyBRQ2hhclJlZjsKdGVtcGxhdGUgPGNsYXNzIFQ+
IGNsYXNzIFFEZWVwQ29weTsKCmNsYXNzIFFDaGFyIHsKcHVibGljOgogICAgUUNoYXIoKTsKICAg
IFFDaGFyKCBjaGFyIGMgKTsKICAgIFFDaGFyKCB1Y2hhciBjICk7CiAgICBRQ2hhciggdWNoYXIg
YywgdWNoYXIgciApOwogICAgUUNoYXIoIGNvbnN0IFFDaGFyJiBjICk7CiAgICBRQ2hhciggdXNo
b3J0IHJjICk7CiAgICBRQ2hhciggc2hvcnQgcmMgKTsKICAgIFFDaGFyKCB1aW50IHJjICk7CiAg
ICBRQ2hhciggaW50IHJjICk7CgogICAgc3RhdGljIGNvbnN0IFFDaGFyIG51bGw7CiAgICBzdGF0
aWMgY29uc3QgUUNoYXIgcmVwbGFjZW1lbnQ7CiAgICBzdGF0aWMgY29uc3QgUUNoYXIgYnl0ZU9y
ZGVyTWFyazsKICAgIHN0YXRpYyBjb25zdCBRQ2hhciBieXRlT3JkZXJTd2FwcGVkOwogICAgc3Rh
dGljIGNvbnN0IFFDaGFyIG5ic3A7CgoKCiAgICBlbnVtIENhdGVnb3J5CiAgICB7CiAgICAgICAg
Tm9DYXRlZ29yeSwKCiAgICAgICAgTWFya19Ob25TcGFjaW5nLAogICAgICAgIE1hcmtfU3BhY2lu
Z0NvbWJpbmluZywKICAgICAgICBNYXJrX0VuY2xvc2luZywKCiAgICAgICAgTnVtYmVyX0RlY2lt
YWxEaWdpdCwKICAgICAgICBOdW1iZXJfTGV0dGVyLAogICAgICAgIE51bWJlcl9PdGhlciwKCiAg
ICAgICAgU2VwYXJhdG9yX1NwYWNlLAogICAgICAgIFNlcGFyYXRvcl9MaW5lLAogICAgICAgIFNl
cGFyYXRvcl9QYXJhZ3JhcGgsCgogICAgICAgIE90aGVyX0NvbnRyb2wsCiAgICAgICAgT3RoZXJf
Rm9ybWF0LAogICAgICAgIE90aGVyX1N1cnJvZ2F0ZSwKICAgICAgICBPdGhlcl9Qcml2YXRlVXNl
LAogICAgICAgIE90aGVyX05vdEFzc2lnbmVkLAoKICAgICAgICBMZXR0ZXJfVXBwZXJjYXNlLAog
ICAgICAgIExldHRlcl9Mb3dlcmNhc2UsCiAgICAgICAgTGV0dGVyX1RpdGxlY2FzZSwKICAgICAg
ICBMZXR0ZXJfTW9kaWZpZXIsCiAgICAgICAgTGV0dGVyX090aGVyLAoKICAgICAgICBQdW5jdHVh
dGlvbl9Db25uZWN0b3IsCiAgICAgICAgUHVuY3R1YXRpb25fRGFzaCwKICAgICAgICBQdW5jdHVh
dGlvbl9EYXNrID0gUHVuY3R1YXRpb25fRGFzaCwKICAgICAgICBQdW5jdHVhdGlvbl9PcGVuLAog
ICAgICAgIFB1bmN0dWF0aW9uX0Nsb3NlLAogICAgICAgIFB1bmN0dWF0aW9uX0luaXRpYWxRdW90
ZSwKICAgICAgICBQdW5jdHVhdGlvbl9GaW5hbFF1b3RlLAogICAgICAgIFB1bmN0dWF0aW9uX090
aGVyLAoKICAgICAgICBTeW1ib2xfTWF0aCwKICAgICAgICBTeW1ib2xfQ3VycmVuY3ksCiAgICAg
ICAgU3ltYm9sX01vZGlmaWVyLAogICAgICAgIFN5bWJvbF9PdGhlcgogICAgfTsKCiAgICBlbnVt
IERpcmVjdGlvbgogICAgewogICAgICAgIERpckwsIERpclIsIERpckVOLCBEaXJFUywgRGlyRVQs
IERpckFOLCBEaXJDUywgRGlyQiwgRGlyUywgRGlyV1MsIERpck9OLAogICAgICAgIERpckxSRSwg
RGlyTFJPLCBEaXJBTCwgRGlyUkxFLCBEaXJSTE8sIERpclBERiwgRGlyTlNNLCBEaXJCTgogICAg
fTsKCiAgICBlbnVtIERlY29tcG9zaXRpb24KICAgIHsKICAgICAgICBTaW5nbGUsIENhbm9uaWNh
bCwgRm9udCwgTm9CcmVhaywgSW5pdGlhbCwgTWVkaWFsLAogICAgICAgIEZpbmFsLCBJc29sYXRl
ZCwgQ2lyY2xlLCBTdXBlciwgU3ViLCBWZXJ0aWNhbCwKICAgICAgICBXaWRlLCBOYXJyb3csIFNt
YWxsLCBTcXVhcmUsIENvbXBhdCwgRnJhY3Rpb24KICAgIH07CgogICAgZW51bSBKb2luaW5nCiAg
ICB7CiAgICAgICAgT3RoZXJKb2luaW5nLCBEdWFsLCBSaWdodCwgQ2VudGVyCiAgICB9OwoKICAg
IGVudW0gQ29tYmluaW5nQ2xhc3MKICAgIHsKICAgICAgICBDb21iaW5pbmdfQmVsb3dMZWZ0QXR0
YWNoZWQgPSAyMDAsCiAgICAgICAgQ29tYmluaW5nX0JlbG93QXR0YWNoZWQgPSAyMDIsCiAgICAg
ICAgQ29tYmluaW5nX0JlbG93UmlnaHRBdHRhY2hlZCA9IDIwNCwKICAgICAgICBDb21iaW5pbmdf
TGVmdEF0dGFjaGVkID0gMjA4LAogICAgICAgIENvbWJpbmluZ19SaWdodEF0dGFjaGVkID0gMjEw
LAogICAgICAgIENvbWJpbmluZ19BYm92ZUxlZnRBdHRhY2hlZCA9IDIxMiwKICAgICAgICBDb21i
aW5pbmdfQWJvdmVBdHRhY2hlZCA9IDIxNCwKICAgICAgICBDb21iaW5pbmdfQWJvdmVSaWdodEF0
dGFjaGVkID0gMjE2LAoKICAgICAgICBDb21iaW5pbmdfQmVsb3dMZWZ0ID0gMjE4LAogICAgICAg
IENvbWJpbmluZ19CZWxvdyA9IDIyMCwKICAgICAgICBDb21iaW5pbmdfQmVsb3dSaWdodCA9IDIy
MiwKICAgICAgICBDb21iaW5pbmdfTGVmdCA9IDIyNCwKICAgICAgICBDb21iaW5pbmdfUmlnaHQg
PSAyMjYsCiAgICAgICAgQ29tYmluaW5nX0Fib3ZlTGVmdCA9IDIyOCwKICAgICAgICBDb21iaW5p
bmdfQWJvdmUgPSAyMzAsCiAgICAgICAgQ29tYmluaW5nX0Fib3ZlUmlnaHQgPSAyMzIsCgogICAg
ICAgIENvbWJpbmluZ19Eb3VibGVCZWxvdyA9IDIzMywKICAgICAgICBDb21iaW5pbmdfRG91Ymxl
QWJvdmUgPSAyMzQsCiAgICAgICAgQ29tYmluaW5nX0lvdGFTdWJzY3JpcHQgPSAyNDAKICAgIH07
CgoKCiAgICBpbnQgZGlnaXRWYWx1ZSgpIGNvbnN0OwogICAgUUNoYXIgbG93ZXIoKSBjb25zdDsK
ICAgIFFDaGFyIHVwcGVyKCkgY29uc3Q7CgogICAgQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdDsK
ICAgIERpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdDsKICAgIEpvaW5pbmcgam9pbmluZygpIGNv
bnN0OwogICAgYm9vbCBtaXJyb3JlZCgpIGNvbnN0OwogICAgUUNoYXIgbWlycm9yZWRDaGFyKCkg
Y29uc3Q7CiAgICBjb25zdCBRU3RyaW5nICZkZWNvbXBvc2l0aW9uKCkgY29uc3Q7CiAgICBEZWNv
bXBvc2l0aW9uIGRlY29tcG9zaXRpb25UYWcoKSBjb25zdDsKICAgIHVuc2lnbmVkIGNoYXIgY29t
YmluaW5nQ2xhc3MoKSBjb25zdDsKCiAgICBjaGFyIGxhdGluMSgpIGNvbnN0IHsgcmV0dXJuIHVj
cyA+IDB4ZmYgPyAwIDogKGNoYXIpIHVjczsgfQogICAgdXNob3J0IHVuaWNvZGUoKSBjb25zdCB7
IHJldHVybiB1Y3M7IH0KICAgIHVzaG9ydCAmdW5pY29kZSgpIHsgcmV0dXJuIHVjczsgfQoKCiAg
ICBvcGVyYXRvciBjaGFyKCkgY29uc3QgeyByZXR1cm4gbGF0aW4xKCk7IH0KCgogICAgYm9vbCBp
c051bGwoKSBjb25zdCB7IHJldHVybiB1bmljb2RlKCk9PTA7IH0KICAgIGJvb2wgaXNQcmludCgp
IGNvbnN0OwogICAgYm9vbCBpc1B1bmN0KCkgY29uc3Q7CiAgICBib29sIGlzU3BhY2UoKSBjb25z
dDsKICAgIGJvb2wgaXNNYXJrKCkgY29uc3Q7CiAgICBib29sIGlzTGV0dGVyKCkgY29uc3Q7CiAg
ICBib29sIGlzTnVtYmVyKCkgY29uc3Q7CiAgICBib29sIGlzTGV0dGVyT3JOdW1iZXIoKSBjb25z
dDsKICAgIGJvb2wgaXNEaWdpdCgpIGNvbnN0OwogICAgYm9vbCBpc1N5bWJvbCgpIGNvbnN0OwoK
ICAgIHVjaGFyIGNlbGwoKSBjb25zdCB7IHJldHVybiAoKHVjaGFyKSB1Y3MgJiAweGZmKTsgfQog
ICAgdWNoYXIgcm93KCkgY29uc3QgeyByZXR1cm4gKCh1Y2hhcikgKHVjcz4+OCkmMHhmZik7IH0K
ICAgIHZvaWQgc2V0Q2VsbCggdWNoYXIgY2VsbCApIHsgdWNzID0gKHVjcyAmIDB4ZmYwMCkgKyBj
ZWxsOyB9CiAgICB2b2lkIHNldFJvdyggdWNoYXIgcm93ICkgeyB1Y3MgPSAoKCh1c2hvcnQpIHJv
dyk8PDgpICsgKHVjcyYweGZmKTsgfQoKICAgIHN0YXRpYyBib29sIG5ldHdvcmtPcmRlcmVkKCkg
ewogICAgICAgIGludCB3b3JkU2l6ZTsKICAgICAgICBib29sIGJpZ0VuZGlhbiA9IEZBTFNFOwog
ICAgICAgIHFTeXNJbmZvKCAmd29yZFNpemUsICZiaWdFbmRpYW4gKTsKICAgICAgICByZXR1cm4g
YmlnRW5kaWFuOwogICAgfQoKICAgIGZyaWVuZCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjaGFy
IGNoLCBRQ2hhciBjICk7CiAgICBmcmllbmQgaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggUUNoYXIg
YywgY2hhciBjaCApOwogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yPT0oIFFDaGFyIGMx
LCBRQ2hhciBjMiApOwogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yIT0oIFFDaGFyIGMx
LCBRQ2hhciBjMiApOwogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNoYXIgY2gs
IFFDaGFyIGMgKTsKICAgIGZyaWVuZCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KCBRQ2hhciBjLCBj
aGFyIGNoICk7CiAgICBmcmllbmQgaW5saW5lIGJvb2wgb3BlcmF0b3I8PSggUUNoYXIgYywgY2hh
ciBjaCApOwogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yPD0oIGNoYXIgY2gsIFFDaGFy
IGMgKTsKICAgIGZyaWVuZCBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBRQ2hhciBjMSwgUUNoYXIg
YzIgKTsKCnByaXZhdGU6CiAgICB1c2hvcnQgdWNzOwoKCgp9IDsKCmlubGluZSBRQ2hhcjo6UUNo
YXIoKSA6IHVjcyggMCApCgoKCnsKfQppbmxpbmUgUUNoYXI6OlFDaGFyKCBjaGFyIGMgKSA6IHVj
cyggKHVjaGFyKWMgKQoKCgp7Cn0KaW5saW5lIFFDaGFyOjpRQ2hhciggdWNoYXIgYyApIDogdWNz
KCBjICkKCgoKewp9CmlubGluZSBRQ2hhcjo6UUNoYXIoIHVjaGFyIGMsIHVjaGFyIHIgKSA6IHVj
cyggKHIgPDwgOCkgfCBjICkKCgoKewp9CmlubGluZSBRQ2hhcjo6UUNoYXIoIGNvbnN0IFFDaGFy
JiBjICkgOiB1Y3MoIGMudWNzICkKCgoKewp9CgppbmxpbmUgUUNoYXI6OlFDaGFyKCB1c2hvcnQg
cmMgKSA6IHVjcyggcmMgKQoKCgp7Cn0KaW5saW5lIFFDaGFyOjpRQ2hhciggc2hvcnQgcmMgKSA6
IHVjcyggKHVzaG9ydCkgcmMgKQoKCgp7Cn0KaW5saW5lIFFDaGFyOjpRQ2hhciggdWludCByYyAp
IDogdWNzKCAodXNob3J0ICkgKHJjICYgMHhmZmZmKSApCgoKCnsKfQppbmxpbmUgUUNoYXI6OlFD
aGFyKCBpbnQgcmMgKSA6IHVjcyggKHVzaG9ydCkgKHJjICYgMHhmZmZmKSApCgoKCnsKfQoKaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PSggY2hhciBjaCwgUUNoYXIgYyApCnsKICAgIHJldHVybiAoKHVj
aGFyKSBjaCkgPT0gYy51Y3M7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yPT0oIFFDaGFyIGMsIGNo
YXIgY2ggKQp7CiAgICByZXR1cm4gKCh1Y2hhcikgY2gpID09IGMudWNzOwp9CgppbmxpbmUgYm9v
bCBvcGVyYXRvcj09KCBRQ2hhciBjMSwgUUNoYXIgYzIgKQp7CiAgICByZXR1cm4gYzEudWNzID09
IGMyLnVjczsKfQoKaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggUUNoYXIgYzEsIFFDaGFyIGMyICkK
ewogICAgcmV0dXJuIGMxLnVjcyAhPSBjMi51Y3M7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yIT0o
IGNoYXIgY2gsIFFDaGFyIGMgKQp7CiAgICByZXR1cm4gKCh1Y2hhciljaCkgIT0gYy51Y3M7Cn0K
CmlubGluZSBib29sIG9wZXJhdG9yIT0oIFFDaGFyIGMsIGNoYXIgY2ggKQp7CiAgICByZXR1cm4g
KCh1Y2hhcikgY2gpICE9IGMudWNzOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBRQ2hhciBj
LCBjaGFyIGNoICkKewogICAgcmV0dXJuIGMudWNzIDw9ICgodWNoYXIpIGNoKTsKfQoKaW5saW5l
IGJvb2wgb3BlcmF0b3I8PSggY2hhciBjaCwgUUNoYXIgYyApCnsKICAgIHJldHVybiAoKHVjaGFy
KSBjaCkgPD0gYy51Y3M7Cn0KCmlubGluZSBib29sIG9wZXJhdG9yPD0oIFFDaGFyIGMxLCBRQ2hh
ciBjMiApCnsKICAgIHJldHVybiBjMS51Y3MgPD0gYzIudWNzOwp9CgppbmxpbmUgYm9vbCBvcGVy
YXRvcj49KCBRQ2hhciBjLCBjaGFyIGNoICkgeyByZXR1cm4gY2ggPD0gYzsgfQppbmxpbmUgYm9v
bCBvcGVyYXRvcj49KCBjaGFyIGNoLCBRQ2hhciBjICkgeyByZXR1cm4gYyA8PSBjaDsgfQppbmxp
bmUgYm9vbCBvcGVyYXRvcj49KCBRQ2hhciBjMSwgUUNoYXIgYzIgKSB7IHJldHVybiBjMiA8PSBj
MTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcjwoIFFDaGFyIGMsIGNoYXIgY2ggKSB7IHJldHVybiAh
KGNoPD1jKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcjwoIGNoYXIgY2gsIFFDaGFyIGMgKSB7IHJl
dHVybiAhKGM8PWNoKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcjwoIFFDaGFyIGMxLCBRQ2hhciBj
MiApIHsgcmV0dXJuICEoYzI8PWMxKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj4oIFFDaGFyIGMs
IGNoYXIgY2ggKSB7IHJldHVybiAhKGNoPj1jKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj4oIGNo
YXIgY2gsIFFDaGFyIGMgKSB7IHJldHVybiAhKGM+PWNoKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRv
cj4oIFFDaGFyIGMxLCBRQ2hhciBjMiApIHsgcmV0dXJuICEoYzI+PWMxKTsgfQoKCnN0cnVjdCBR
U3RyaW5nRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKICAgIFFTdHJpbmdEYXRhKCkgOgogICAgICAg
IFFTaGFyZWQoKSwgdW5pY29kZSgwKSwgYXNjaWkoMCksIGxlbigwKSwgaXNzaW1wbGV0ZXh0KFRS
VUUpLCBtYXhsKDApLCBpc2xhdGluMShGQUxTRSkgeyByZWYoKTsgfQogICAgUVN0cmluZ0RhdGEo
UUNoYXIgKnUsIHVpbnQgbCwgdWludCBtKSA6CiAgICAgICAgUVNoYXJlZCgpLCB1bmljb2RlKHUp
LCBhc2NpaSgwKSwgbGVuKGwpLCBpc3NpbXBsZXRleHQoRkFMU0UpLCBtYXhsKG0pLCBpc2xhdGlu
MShGQUxTRSkgeyB9CiAgICB+UVN0cmluZ0RhdGEoKSB7IGlmICggdW5pY29kZSApIGRlbGV0ZVtd
ICgoY2hhciopdW5pY29kZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICggYXNjaWkgKSBkZWxl
dGVbXSBhc2NpaTsgfQoKICAgIHZvaWQgZGVsZXRlU2VsZigpOwogICAgUUNoYXIgKnVuaWNvZGU7
CiAgICBjaGFyICphc2NpaTsKICAgIHZvaWQgc2V0RGlydHkoKSB7CiAgICAgICAgaWYgKCBhc2Np
aSApIHsKICAgICAgICAgICAgZGVsZXRlIFtdIGFzY2lpOwogICAgICAgICAgICBhc2NpaSA9IDA7
CiAgICAgICAgfQogICAgICAgIGlzc2ltcGxldGV4dCA9IEZBTFNFOwogICAgfQoKCgogICAgdWlu
dCBsZW4gOiAzMDsKCiAgICB1aW50IGlzc2ltcGxldGV4dCA6IDE7CgoKCiAgICB1aW50IG1heGwg
OiAzMDsKCiAgICB1aW50IGlzbGF0aW4xIDogMTsKCnByaXZhdGU6CgogICAgUVN0cmluZ0RhdGEo
IGNvbnN0IFFTdHJpbmdEYXRhJiApOwogICAgUVN0cmluZ0RhdGEmIG9wZXJhdG9yPSggY29uc3Qg
UVN0cmluZ0RhdGEmICk7Cgp9OwoKCmNsYXNzIFFTdHJpbmcKewpwdWJsaWM6CiAgICBRU3RyaW5n
KCk7CiAgICBRU3RyaW5nKCBRQ2hhciApOwogICAgUVN0cmluZyggY29uc3QgUVN0cmluZyAmICk7
CiAgICBRU3RyaW5nKCBjb25zdCBRQnl0ZUFycmF5JiApOwogICAgUVN0cmluZyggY29uc3QgUUNo
YXIqIHVuaWNvZGUsIHVpbnQgbGVuZ3RoICk7CgogICAgUVN0cmluZyggY29uc3QgY2hhciAqc3Ry
ICk7CgoKICAgIFFTdHJpbmcoIGNvbnN0IHN0ZDo6c3RyaW5nJiApOwoKICAgIH5RU3RyaW5nKCk7
CgogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcg
Jm9wZXJhdG9yPSggY29uc3QgY2hhciAqICk7CgogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBjb25z
dCBzdGQ6OnN0cmluZyYgKTsKCiAgICBRU3RyaW5nICZvcGVyYXRvcj0oIGNvbnN0IFFDU3RyaW5n
JiApOwogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBRQ2hhciBjICk7CiAgICBRU3RyaW5nICZvcGVy
YXRvcj0oIGNoYXIgYyApOwoKICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIG51bGw7CgogICAgYm9v
bCBpc051bGwoKSBjb25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgdWludCBsZW5n
dGgoKSBjb25zdDsKICAgIHZvaWQgdHJ1bmNhdGUoIHVpbnQgcG9zICk7CgogICAgUVN0cmluZyAm
IGZpbGwoIFFDaGFyIGMsIGludCBsZW4gPSAtMSApOwoKICAgIFFTdHJpbmcgY29weSgpIGNvbnN0
OwoKICAgIFFTdHJpbmcgYXJnKCBsb25nIGEsIGludCBmaWVsZHdpZHRoPTAsIGludCBiYXNlPTEw
ICkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyggdWxvbmcgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50
IGJhc2U9MTAgKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKCBpbnQgYSwgaW50IGZpZWxkd2lkdGg9
MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKCB1aW50IGEsIGludCBmaWVs
ZHdpZHRoPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyggc2hvcnQgYSwg
aW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKCB1
c2hvcnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIFFTdHJp
bmcgYXJnKCBjaGFyIGEsIGludCBmaWVsZHdpZHRoPTAgKSBjb25zdDsKICAgIFFTdHJpbmcgYXJn
KCBRQ2hhciBhLCBpbnQgZmllbGR3aWR0aD0wICkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyggY29u
c3QgUVN0cmluZyYgYSwgaW50IGZpZWxkd2lkdGg9MCApIGNvbnN0OwogICAgUVN0cmluZyBhcmco
IGRvdWJsZSBhLCBpbnQgZmllbGR3aWR0aD0wLCBjaGFyIGZtdD0nZycsIGludCBwcmVjPS0xICkg
Y29uc3Q7CgoKICAgIFFTdHJpbmcgJnNwcmludGYoIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uICkK
CiAgICAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCgogICAgICAg
IDsKCgogICAgaW50IGZpbmQoIFFDaGFyIGMsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBj
b25zdDsKICAgIGludCBmaW5kKCBjaGFyIGMsIGludCBpbmRleD0wLCBib29sIGNzPVRSVUUgKSBj
b25zdDsKICAgIGludCBmaW5kKCBjb25zdCBRU3RyaW5nICZzdHIsIGludCBpbmRleD0wLCBib29s
IGNzPVRSVUUgKSBjb25zdDsKCiAgICBpbnQgZmluZCggY29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5k
ZXg9MCApIGNvbnN0OwoKCiAgICBpbnQgZmluZCggY29uc3QgY2hhciogc3RyLCBpbnQgaW5kZXg9
MCApIGNvbnN0OwoKICAgIGludCBmaW5kUmV2KCBRQ2hhciBjLCBpbnQgaW5kZXg9LTEsIGJvb2wg
Y3M9VFJVRSkgY29uc3Q7CiAgICBpbnQgZmluZFJldiggY2hhciBjLCBpbnQgaW5kZXg9LTEsIGJv
b2wgY3M9VFJVRSkgY29uc3Q7CiAgICBpbnQgZmluZFJldiggY29uc3QgUVN0cmluZyAmc3RyLCBp
bnQgaW5kZXg9LTEsIGJvb2wgY3M9VFJVRSkgY29uc3Q7CgogICAgaW50IGZpbmRSZXYoIGNvbnN0
IFFSZWdFeHAgJiwgaW50IGluZGV4PS0xICkgY29uc3Q7CgoKICAgIGludCBmaW5kUmV2KCBjb25z
dCBjaGFyKiBzdHIsIGludCBpbmRleD0tMSApIGNvbnN0OwoKICAgIGludCBjb250YWlucyggUUNo
YXIgYywgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBpbnQgY29udGFpbnMoIGNoYXIgYywgYm9v
bCBjcz1UUlVFICkgY29uc3QKICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBjb250YWlucyhR
Q2hhcihjKSwgY3MpOyB9CgogICAgaW50IGNvbnRhaW5zKCBjb25zdCBjaGFyKiBzdHIsIGJvb2wg
Y3M9VFJVRSApIGNvbnN0OwoKICAgIGludCBjb250YWlucyggY29uc3QgUVN0cmluZyAmc3RyLCBi
b29sIGNzPVRSVUUgKSBjb25zdDsKCiAgICBpbnQgY29udGFpbnMoIGNvbnN0IFFSZWdFeHAgJiAp
IGNvbnN0OwoKCiAgICBlbnVtIFNlY3Rpb25GbGFncyB7CiAgICAgICAgU2VjdGlvbkRlZmF1bHQg
PSAweDAwLAogICAgICAgIFNlY3Rpb25Ta2lwRW1wdHkgPSAweDAxLAogICAgICAgIFNlY3Rpb25J
bmNsdWRlTGVhZGluZ1NlcCA9IDB4MDIsCiAgICAgICAgU2VjdGlvbkluY2x1ZGVUcmFpbGluZ1Nl
cCA9IDB4MDQsCiAgICAgICAgU2VjdGlvbkNhc2VJbnNlbnNpdGl2ZVNlcHMgPSAweDA4CiAgICB9
OwogICAgUVN0cmluZyBzZWN0aW9uKCBRQ2hhciBzZXAsIGludCBzdGFydCwgaW50IGVuZCA9IDB4
ZmZmZmZmZmYsIGludCBmbGFncyA9IFNlY3Rpb25EZWZhdWx0ICkgY29uc3Q7CiAgICBRU3RyaW5n
IHNlY3Rpb24oIGNoYXIgc2VwLCBpbnQgc3RhcnQsIGludCBlbmQgPSAweGZmZmZmZmZmLCBpbnQg
ZmxhZ3MgPSBTZWN0aW9uRGVmYXVsdCApIGNvbnN0OwoKICAgIFFTdHJpbmcgc2VjdGlvbiggY29u
c3QgY2hhciAqaW5fc2VwLCBpbnQgc3RhcnQsIGludCBlbmQgPSAweGZmZmZmZmZmLCBpbnQgZmxh
Z3MgPSBTZWN0aW9uRGVmYXVsdCApIGNvbnN0OwoKICAgIFFTdHJpbmcgc2VjdGlvbiggY29uc3Qg
UVN0cmluZyAmaW5fc2VwLCBpbnQgc3RhcnQsIGludCBlbmQgPSAweGZmZmZmZmZmLCBpbnQgZmxh
Z3MgPSBTZWN0aW9uRGVmYXVsdCApIGNvbnN0OwoKICAgIFFTdHJpbmcgc2VjdGlvbiggY29uc3Qg
UVJlZ0V4cCAmcmVnLCBpbnQgc3RhcnQsIGludCBlbmQgPSAweGZmZmZmZmZmLCBpbnQgZmxhZ3Mg
PSBTZWN0aW9uRGVmYXVsdCApIGNvbnN0OwoKCiAgICBRU3RyaW5nIGxlZnQoIHVpbnQgbGVuICkg
Y29uc3Q7CiAgICBRU3RyaW5nIHJpZ2h0KCB1aW50IGxlbiApIGNvbnN0OwogICAgUVN0cmluZyBt
aWQoIHVpbnQgaW5kZXgsIHVpbnQgbGVuPTB4ZmZmZmZmZmYpIGNvbnN0OwoKICAgIFFTdHJpbmcg
bGVmdEp1c3RpZnkoIHVpbnQgd2lkdGgsIFFDaGFyIGZpbGw9JyAnLCBib29sIHRydW5jPUZBTFNF
KWNvbnN0OwogICAgUVN0cmluZyByaWdodEp1c3RpZnkoIHVpbnQgd2lkdGgsIFFDaGFyIGZpbGw9
JyAnLGJvb2wgdHJ1bmM9RkFMU0UpY29uc3Q7CgogICAgUVN0cmluZyBsb3dlcigpIGNvbnN0Owog
ICAgUVN0cmluZyB1cHBlcigpIGNvbnN0OwoKICAgIFFTdHJpbmcgc3RyaXBXaGl0ZVNwYWNlKCkg
Y29uc3Q7CiAgICBRU3RyaW5nIHNpbXBsaWZ5V2hpdGVTcGFjZSgpIGNvbnN0OwoKICAgIFFTdHJp
bmcgJmluc2VydCggdWludCBpbmRleCwgY29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5nICZp
bnNlcnQoIHVpbnQgaW5kZXgsIGNvbnN0IFFDaGFyKiwgdWludCBsZW4gKTsKICAgIFFTdHJpbmcg
Jmluc2VydCggdWludCBpbmRleCwgUUNoYXIgKTsKICAgIFFTdHJpbmcgJmluc2VydCggdWludCBp
bmRleCwgY2hhciBjICkgeyByZXR1cm4gaW5zZXJ0KGluZGV4LFFDaGFyKGMpKTsgfQogICAgUVN0
cmluZyAmYXBwZW5kKCBjaGFyICk7CiAgICBRU3RyaW5nICZhcHBlbmQoIFFDaGFyICk7CiAgICBR
U3RyaW5nICZhcHBlbmQoIGNvbnN0IFFTdHJpbmcgJiApOwoKICAgIFFTdHJpbmcgJmFwcGVuZCgg
Y29uc3QgUUJ5dGVBcnJheSAmICk7CiAgICBRU3RyaW5nICZhcHBlbmQoIGNvbnN0IGNoYXIgKiAp
OwoKCiAgICBRU3RyaW5nICZhcHBlbmQoIGNvbnN0IHN0ZDo6c3RyaW5nJiApOwoKICAgIFFTdHJp
bmcgJnByZXBlbmQoIGNoYXIgKTsKICAgIFFTdHJpbmcgJnByZXBlbmQoIFFDaGFyICk7CiAgICBR
U3RyaW5nICZwcmVwZW5kKCBjb25zdCBRU3RyaW5nICYgKTsKCiAgICBRU3RyaW5nICZwcmVwZW5k
KCBjb25zdCBRQnl0ZUFycmF5ICYgKTsKICAgIFFTdHJpbmcgJnByZXBlbmQoIGNvbnN0IGNoYXIg
KiApOwoKCiAgICBRU3RyaW5nICZwcmVwZW5kKCBjb25zdCBzdGQ6OnN0cmluZyYgKTsKCiAgICBR
U3RyaW5nICZyZW1vdmUoIHVpbnQgaW5kZXgsIHVpbnQgbGVuICk7CiAgICBRU3RyaW5nICZyZW1v
dmUoIFFDaGFyIGMgKTsKICAgIFFTdHJpbmcgJnJlbW92ZSggY2hhciBjICkgeyByZXR1cm4gcmVt
b3ZlKCBRQ2hhcihjKSApOyB9CiAgICBRU3RyaW5nICZyZW1vdmUoIGNvbnN0IFFTdHJpbmcgJiAp
OwoKICAgIFFTdHJpbmcgJnJlbW92ZSggY29uc3QgUVJlZ0V4cCAmICk7CgoKICAgIFFTdHJpbmcg
JnJlbW92ZSggY29uc3QgY2hhciAqICk7CgogICAgUVN0cmluZyAmcmVwbGFjZSggdWludCBpbmRl
eCwgdWludCBsZW4sIGNvbnN0IFFTdHJpbmcgJiApOwogICAgUVN0cmluZyAmcmVwbGFjZSggdWlu
dCBpbmRleCwgdWludCBsZW4sIGNvbnN0IFFDaGFyKiwgdWludCBjbGVuICk7CiAgICBRU3RyaW5n
ICZyZXBsYWNlKCB1aW50IGluZGV4LCB1aW50IGxlbiwgUUNoYXIgKTsKICAgIFFTdHJpbmcgJnJl
cGxhY2UoIHVpbnQgaW5kZXgsIHVpbnQgbGVuLCBjaGFyIGMgKQogICAgeyByZXR1cm4gcmVwbGFj
ZSggaW5kZXgsIGxlbiwgUUNoYXIoYykgKTsgfQogICAgUVN0cmluZyAmcmVwbGFjZSggUUNoYXIg
YywgY29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5nICZyZXBsYWNlKCBjaGFyIGMsIGNvbnN0
IFFTdHJpbmcgJiBhZnRlciApCiAgICB7IHJldHVybiByZXBsYWNlKCBRQ2hhcihjKSwgYWZ0ZXIg
KTsgfQogICAgUVN0cmluZyAmcmVwbGFjZSggY29uc3QgUVN0cmluZyAmLCBjb25zdCBRU3RyaW5n
ICYgKTsKCiAgICBRU3RyaW5nICZyZXBsYWNlKCBjb25zdCBRUmVnRXhwICYsIGNvbnN0IFFTdHJp
bmcgJiApOwoKICAgIFFTdHJpbmcgJnJlcGxhY2UoIFFDaGFyLCBRQ2hhciApOwoKICAgIHNob3J0
IHRvU2hvcnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICB1c2hvcnQgdG9V
U2hvcnQoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICBpbnQgdG9JbnQoIGJv
b2wgKm9rPTAsIGludCBiYXNlPTEwICkgY29uc3Q7CiAgICB1aW50IHRvVUludCggYm9vbCAqb2s9
MCwgaW50IGJhc2U9MTAgKSBjb25zdDsKICAgIGxvbmcgdG9Mb25nKCBib29sICpvaz0wLCBpbnQg
YmFzZT0xMCApIGNvbnN0OwogICAgdWxvbmcgdG9VTG9uZyggYm9vbCAqb2s9MCwgaW50IGJhc2U9
MTAgKSBjb25zdDsKICAgIGZsb2F0IHRvRmxvYXQoIGJvb2wgKm9rPTAgKSBjb25zdDsKICAgIGRv
dWJsZSB0b0RvdWJsZSggYm9vbCAqb2s9MCApIGNvbnN0OwoKICAgIFFTdHJpbmcgJnNldE51bSgg
c2hvcnQsIGludCBiYXNlPTEwICk7CiAgICBRU3RyaW5nICZzZXROdW0oIHVzaG9ydCwgaW50IGJh
c2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggaW50LCBpbnQgYmFzZT0xMCApOwogICAgUVN0
cmluZyAmc2V0TnVtKCB1aW50LCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0TnVtKCBs
b25nLCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0TnVtKCB1bG9uZywgaW50IGJhc2U9
MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggZmxvYXQsIGNoYXIgZj0nZycsIGludCBwcmVjPTYg
KTsKICAgIFFTdHJpbmcgJnNldE51bSggZG91YmxlLCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7
CgogICAgc3RhdGljIFFTdHJpbmcgbnVtYmVyKCBsb25nLCBpbnQgYmFzZT0xMCApOwogICAgc3Rh
dGljIFFTdHJpbmcgbnVtYmVyKCB1bG9uZywgaW50IGJhc2U9MTApOwogICAgc3RhdGljIFFTdHJp
bmcgbnVtYmVyKCBpbnQsIGludCBiYXNlPTEwICk7CiAgICBzdGF0aWMgUVN0cmluZyBudW1iZXIo
IHVpbnQsIGludCBiYXNlPTEwKTsKICAgIHN0YXRpYyBRU3RyaW5nIG51bWJlciggZG91YmxlLCBj
aGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CgogICAgdm9pZCBzZXRFeHBhbmQoIHVpbnQgaW5kZXgs
IFFDaGFyIGMgKTsKCiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBjb25zdCBRU3RyaW5nICZzdHIg
KTsKCiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBjb25zdCBRQnl0ZUFycmF5ICZzdHIgKTsKICAg
IFFTdHJpbmcgJm9wZXJhdG9yKz0oIGNvbnN0IGNoYXIgKnN0ciApOwoKCiAgICBRU3RyaW5nICZv
cGVyYXRvcis9KCBjb25zdCBzdGQ6OnN0cmluZyYgKTsKCiAgICBRU3RyaW5nICZvcGVyYXRvcis9
KCBRQ2hhciBjICk7CiAgICBRU3RyaW5nICZvcGVyYXRvcis9KCBjaGFyIGMgKTsKCiAgICBRQ2hh
ciBhdCggdWludCBpICkgY29uc3QKICAgICAgICB7IHJldHVybiBpIDwgZC0+bGVuID8gZC0+dW5p
Y29kZVtpXSA6IFFDaGFyOjpudWxsOyB9CiAgICBRQ2hhciBvcGVyYXRvcltdKCBpbnQgaSApIGNv
bnN0IHsgcmV0dXJuIGF0KCh1aW50KWkpOyB9CiAgICBRQ2hhclJlZiBhdCggdWludCBpICk7CiAg
ICBRQ2hhclJlZiBvcGVyYXRvcltdKCBpbnQgaSApOwoKICAgIFFDaGFyIGNvbnN0cmVmKHVpbnQg
aSkgY29uc3QKICAgICAgICB7IHJldHVybiBhdChpKTsgfQogICAgUUNoYXImIHJlZih1aW50IGkp
CiAgICAgICAgewogICAgICAgICAgICBpZiAoIGQtPmNvdW50ICE9IDEgfHwgaSA+PSBkLT5sZW4g
KQogICAgICAgICAgICAgICAgc3ViYXQoIGkgKTsKICAgICAgICAgICAgZC0+c2V0RGlydHkoKTsK
ICAgICAgICAgICAgcmV0dXJuIGQtPnVuaWNvZGVbaV07CiAgICAgICAgfQoKICAgIGNvbnN0IFFD
aGFyKiB1bmljb2RlKCkgY29uc3QgeyByZXR1cm4gZC0+dW5pY29kZTsgfQogICAgY29uc3QgY2hh
ciogYXNjaWkoKSBjb25zdDsKICAgIHN0YXRpYyBRU3RyaW5nIGZyb21Bc2NpaShjb25zdCBjaGFy
KiwgaW50IGxlbj0tMSk7CiAgICBjb25zdCBjaGFyKiBsYXRpbjEoKSBjb25zdDsKICAgIHN0YXRp
YyBRU3RyaW5nIGZyb21MYXRpbjEoY29uc3QgY2hhciosIGludCBsZW49LTEpOwogICAgUUNTdHJp
bmcgdXRmOCgpIGNvbnN0OwogICAgc3RhdGljIFFTdHJpbmcgZnJvbVV0ZjgoY29uc3QgY2hhcios
IGludCBsZW49LTEpOwogICAgUUNTdHJpbmcgbG9jYWw4Qml0KCkgY29uc3Q7CiAgICBzdGF0aWMg
UVN0cmluZyBmcm9tTG9jYWw4Qml0KGNvbnN0IGNoYXIqLCBpbnQgbGVuPS0xKTsKICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgY2hhciAqKCkgY29uc3QgeyBy
ZXR1cm4gYXNjaWkoKTsgfQoKCiAgICBvcGVyYXRvciBzdGQ6OnN0cmluZygpIGNvbnN0IHsgcmV0
dXJuIGFzY2lpKCk7IH0KCgogICAgc3RhdGljIFFTdHJpbmcgZnJvbVVjczIoIGNvbnN0IHVuc2ln
bmVkIHNob3J0ICp1Y3MyICk7CiAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqdWNzMigpIGNvbnN0
OwoKICAgIFFTdHJpbmcgJnNldFVuaWNvZGUoIGNvbnN0IFFDaGFyKiB1bmljb2RlLCB1aW50IGxl
biApOwogICAgUVN0cmluZyAmc2V0VW5pY29kZUNvZGVzKCBjb25zdCB1c2hvcnQqIHVuaWNvZGVf
YXNfdXNob3J0cywgdWludCBsZW4gKTsKICAgIFFTdHJpbmcgJnNldEFzY2lpKCBjb25zdCBjaGFy
KiwgaW50IGxlbj0tMSApOwogICAgUVN0cmluZyAmc2V0TGF0aW4xKCBjb25zdCBjaGFyKiwgaW50
IGxlbj0tMSApOwoKICAgIGludCBjb21wYXJlKCBjb25zdCBRU3RyaW5nJiBzICkgY29uc3Q7CiAg
ICBzdGF0aWMgaW50IGNvbXBhcmUoIGNvbnN0IFFTdHJpbmcmIHMxLCBjb25zdCBRU3RyaW5nJiBz
MiApCiAgICB7IHJldHVybiBzMS5jb21wYXJlKCBzMiApOyB9CgogICAgaW50IGxvY2FsZUF3YXJl
Q29tcGFyZSggY29uc3QgUVN0cmluZyYgcyApIGNvbnN0OwogICAgc3RhdGljIGludCBsb2NhbGVB
d2FyZUNvbXBhcmUoIGNvbnN0IFFTdHJpbmcmIHMxLCBjb25zdCBRU3RyaW5nJiBzMiApCiAgICB7
IHJldHVybiBzMS5sb2NhbGVBd2FyZUNvbXBhcmUoIHMyICk7IH0KCgogICAgZnJpZW5kIFFEYXRh
U3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRU3RyaW5nICYgKTsKCgogICAgdm9p
ZCBjb21wb3NlKCk7CgoKICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBhc2Np
aSgpOyB9CgoKICAgIGJvb2wgc3RhcnRzV2l0aCggY29uc3QgUVN0cmluZyYgKSBjb25zdDsKICAg
IGJvb2wgZW5kc1dpdGgoIGNvbnN0IFFTdHJpbmcmICkgY29uc3Q7CgogICAgdm9pZCBzZXRMZW5n
dGgoIHVpbnQgbmV3TGVuZ3RoICk7CgogICAgYm9vbCBzaW1wbGVUZXh0KCkgY29uc3QgeyBpZiAo
ICFkLT5pc3NpbXBsZXRleHQgKSBjaGVja1NpbXBsZVRleHQoKTsgcmV0dXJuIChib29sKWQtPmlz
c2ltcGxldGV4dDsgfQogICAgYm9vbCBpc1JpZ2h0VG9MZWZ0KCkgY29uc3Q7CgoKcHJpdmF0ZToK
ICAgIFFTdHJpbmcoIGludCBzaXplLCBib29sICk7CgogICAgdm9pZCBkZXJlZigpOwogICAgdm9p
ZCByZWFsX2RldGFjaCgpOwogICAgdm9pZCBzdWJhdCggdWludCApOwogICAgYm9vbCBmaW5kQXJn
KGludCYgcG9zLCBpbnQmIGxlbikgY29uc3Q7CgogICAgdm9pZCBjaGVja1NpbXBsZVRleHQoKSBj
b25zdDsKCiAgICBzdGF0aWMgUUNoYXIqIGxhdGluMVRvVW5pY29kZSggY29uc3QgY2hhciosIHVp
bnQgKiBsZW4sIHVpbnQgbWF4bGVuPSh1aW50KS0xICk7CiAgICBzdGF0aWMgUUNoYXIqIGxhdGlu
MVRvVW5pY29kZSggY29uc3QgUUJ5dGVBcnJheSYsIHVpbnQgKiBsZW4gKTsKICAgIHN0YXRpYyBj
aGFyKiB1bmljb2RlVG9MYXRpbjEoIGNvbnN0IFFDaGFyKiwgdWludCBsZW4gKTsKCiAgICBRU3Ry
aW5nRGF0YSAqZDsKICAgIHN0YXRpYyBRU3RyaW5nRGF0YSogc2hhcmVkX251bGw7CiAgICBzdGF0
aWMgUVN0cmluZ0RhdGEqIG1ha2VTaGFyZWROdWxsKCk7CgogICAgZnJpZW5kIGNsYXNzIFFDb25z
dFN0cmluZzsKICAgIGZyaWVuZCBjbGFzcyBRVGV4dFN0cmVhbTsKICAgIFFTdHJpbmcoIFFTdHJp
bmdEYXRhKiBkZCwgYm9vbCApIDogZChkZCkgeyB9CgoKICAgIHZvaWQgZGV0YWNoKCk7CiAgICBm
cmllbmQgY2xhc3MgUURlZXBDb3B5PFFTdHJpbmc+Owp9OwoKY2xhc3MgUUNoYXJSZWYgewogICAg
ZnJpZW5kIGNsYXNzIFFTdHJpbmc7CiAgICBRU3RyaW5nJiBzOwogICAgdWludCBwOwogICAgUUNo
YXJSZWYoUVN0cmluZyogc3RyLCB1aW50IHBvcykgOiBzKCpzdHIpLCBwKHBvcykgeyB9CgpwdWJs
aWM6CgoKCgogICAgdXNob3J0IHVuaWNvZGUoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHAp
LnVuaWNvZGUoKTsgfQogICAgY2hhciBsYXRpbjEoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVm
KHApLmxhdGluMSgpOyB9CgoKICAgIFFDaGFyUmVmIG9wZXJhdG9yPShjaGFyIGMgKSB7IHMucmVm
KHApPWM7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KHVjaGFyIGMgKSB7
IHMucmVmKHApPWM7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KFFDaGFy
IGMgKSB7IHMucmVmKHApPWM7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9
KGNvbnN0IFFDaGFyUmVmJiBjICkgeyBzLnJlZihwKT1jLnVuaWNvZGUoKTsgcmV0dXJuICp0aGlz
OyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0odXNob3J0IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0
dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0oc2hvcnQgcmMgKSB7IHMucmVmKHAp
PXJjOyByZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPSh1aW50IHJjICkgeyBz
LnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0oaW50IHJj
ICkgeyBzLnJlZihwKT1yYzsgcmV0dXJuICp0aGlzOyB9CgogICAgb3BlcmF0b3IgUUNoYXIgKCkg
Y29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKTsgfQoKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0
IHsgcmV0dXJuIHVuaWNvZGUoKT09MDsgfQogICAgYm9vbCBpc1ByaW50KCkgY29uc3QgeyByZXR1
cm4gcy5jb25zdHJlZihwKS5pc1ByaW50KCk7IH0KICAgIGJvb2wgaXNQdW5jdCgpIGNvbnN0IHsg
cmV0dXJuIHMuY29uc3RyZWYocCkuaXNQdW5jdCgpOyB9CiAgICBib29sIGlzU3BhY2UoKSBjb25z
dCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzU3BhY2UoKTsgfQogICAgYm9vbCBpc01hcmsoKSBj
b25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzTWFyaygpOyB9CiAgICBib29sIGlzTGV0dGVy
KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc0xldHRlcigpOyB9CiAgICBib29sIGlz
TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc051bWJlcigpOyB9CiAgICBi
b29sIGlzTGV0dGVyT3JOdW1iZXIoKSB7IHJldHVybiBzLmNvbnN0cmVmKHApLmlzTGV0dGVyT3JO
dW1iZXIoKTsgfQogICAgYm9vbCBpc0RpZ2l0KCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihw
KS5pc0RpZ2l0KCk7IH0KCiAgICBpbnQgZGlnaXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHMuY29u
c3RyZWYocCkuZGlnaXRWYWx1ZSgpOyB9CiAgICBRQ2hhciBsb3dlcigpIGNvbnN0IHsgcmV0dXJu
IHMuY29uc3RyZWYocCkubG93ZXIoKTsgfQogICAgUUNoYXIgdXBwZXIoKSBjb25zdCB7IHJldHVy
biBzLmNvbnN0cmVmKHApLnVwcGVyKCk7IH0KCiAgICBRQ2hhcjo6Q2F0ZWdvcnkgY2F0ZWdvcnko
KSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmNhdGVnb3J5KCk7IH0KICAgIFFDaGFyOjpE
aXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5kaXJlY3Rp
b24oKTsgfQogICAgUUNoYXI6OkpvaW5pbmcgam9pbmluZygpIGNvbnN0IHsgcmV0dXJuIHMuY29u
c3RyZWYocCkuam9pbmluZygpOyB9CiAgICBib29sIG1pcnJvcmVkKCkgY29uc3QgeyByZXR1cm4g
cy5jb25zdHJlZihwKS5taXJyb3JlZCgpOyB9CiAgICBRQ2hhciBtaXJyb3JlZENoYXIoKSBjb25z
dCB7IHJldHVybiBzLmNvbnN0cmVmKHApLm1pcnJvcmVkQ2hhcigpOyB9CiAgICBjb25zdCBRU3Ry
aW5nICZkZWNvbXBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5kZWNvbXBv
c2l0aW9uKCk7IH0KICAgIFFDaGFyOjpEZWNvbXBvc2l0aW9uIGRlY29tcG9zaXRpb25UYWcoKSBj
b25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmRlY29tcG9zaXRpb25UYWcoKTsgfQogICAgdW5z
aWduZWQgY2hhciBjb21iaW5pbmdDbGFzcygpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCku
Y29tYmluaW5nQ2xhc3MoKTsgfQoKCiAgICB1Y2hhciBjZWxsKCkgY29uc3QgeyByZXR1cm4gcy5j
b25zdHJlZihwKS5jZWxsKCk7IH0KICAgIHVjaGFyIHJvdygpIGNvbnN0IHsgcmV0dXJuIHMuY29u
c3RyZWYocCkucm93KCk7IH0KCn07CgppbmxpbmUgUUNoYXJSZWYgUVN0cmluZzo6YXQoIHVpbnQg
aSApIHsgcmV0dXJuIFFDaGFyUmVmKHRoaXMsaSk7IH0KaW5saW5lIFFDaGFyUmVmIFFTdHJpbmc6
Om9wZXJhdG9yW10oIGludCBpICkgeyByZXR1cm4gYXQoKHVpbnQpaSk7IH0KCgpjbGFzcyBRQ29u
c3RTdHJpbmcgOiBwcml2YXRlIFFTdHJpbmcgewpwdWJsaWM6CiAgICBRQ29uc3RTdHJpbmcoIGNv
bnN0IFFDaGFyKiB1bmljb2RlLCB1aW50IGxlbmd0aCApOwogICAgflFDb25zdFN0cmluZygpOwog
ICAgY29uc3QgUVN0cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KfTsKCgoK
CgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRU3RyaW5n
ICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRU3RyaW5nICYg
KTsKIyA3NjEgIi4uLy4uL2luY2x1ZGUvcXN0cmluZy5oIgppbmxpbmUgUVN0cmluZzo6UVN0cmlu
ZygpIDoKICAgIGQoc2hhcmVkX251bGwgPyBzaGFyZWRfbnVsbCA6IG1ha2VTaGFyZWROdWxsKCkp
CnsKICAgIGQtPnJlZigpOwp9CgppbmxpbmUgUVN0cmluZzo6flFTdHJpbmcoKQp7CiAgICBpZiAo
IGQtPmRlcmVmKCkgKSB7CiAgICAgICAgaWYgKCBkICE9IHNoYXJlZF9udWxsICkKICAgICAgICAg
ICAgZC0+ZGVsZXRlU2VsZigpOwogICAgfQp9CgoKaW5saW5lIHZvaWQgUVN0cmluZzo6ZGV0YWNo
KCkKeyByZWFsX2RldGFjaCgpOyB9CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjpzZWN0aW9uKCBR
Q2hhciBzZXAsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGZsYWdzICkgY29uc3QKeyByZXR1cm4g
c2VjdGlvbihRU3RyaW5nKHNlcCksIHN0YXJ0LCBlbmQsIGZsYWdzKTsgfQoKaW5saW5lIFFTdHJp
bmcgUVN0cmluZzo6c2VjdGlvbiggY2hhciBzZXAsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGZs
YWdzICkgY29uc3QKeyByZXR1cm4gc2VjdGlvbihRQ2hhcihzZXApLCBzdGFydCwgZW5kLCBmbGFn
cyk7IH0KCgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjpzZWN0aW9uKCBjb25zdCBjaGFyICppbl9z
ZXAsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGZsYWdzICkgY29uc3QKeyByZXR1cm4gc2VjdGlv
bihRU3RyaW5nKGluX3NlcCksIHN0YXJ0LCBlbmQsIGZsYWdzKTsgfQoKCmlubGluZSBRU3RyaW5n
ICZRU3RyaW5nOjpvcGVyYXRvcj0oIFFDaGFyIGMgKQp7ICp0aGlzID0gUVN0cmluZyhjKTsgcmV0
dXJuICp0aGlzOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6b3BlcmF0b3I9KCBjaGFyIGMg
KQp7ICp0aGlzID0gUVN0cmluZyhRQ2hhcihjKSk7IHJldHVybiAqdGhpczsgfQoKaW5saW5lIGJv
b2wgUVN0cmluZzo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4gdW5pY29kZSgpID09IDA7IH0KCmlu
bGluZSBib29sIFFTdHJpbmc6Om9wZXJhdG9yISgpIGNvbnN0CnsgcmV0dXJuIGlzTnVsbCgpOyB9
CgppbmxpbmUgdWludCBRU3RyaW5nOjpsZW5ndGgoKSBjb25zdAp7IHJldHVybiBkLT5sZW47IH0K
CmlubGluZSBib29sIFFTdHJpbmc6OmlzRW1wdHkoKSBjb25zdAp7IHJldHVybiBsZW5ndGgoKSA9
PSAwOyB9CgppbmxpbmUgUVN0cmluZyBRU3RyaW5nOjpjb3B5KCkgY29uc3QKeyByZXR1cm4gUVN0
cmluZyggKnRoaXMgKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OnByZXBlbmQoIGNvbnN0
IFFTdHJpbmcgJiBzICkKeyByZXR1cm4gaW5zZXJ0KDAscyk7IH0KCmlubGluZSBRU3RyaW5nICZR
U3RyaW5nOjpwcmVwZW5kKCBRQ2hhciBjICkKeyByZXR1cm4gaW5zZXJ0KDAsYyk7IH0KCmlubGlu
ZSBRU3RyaW5nICZRU3RyaW5nOjpwcmVwZW5kKCBjaGFyIGMgKQp7IHJldHVybiBpbnNlcnQoMCxj
KTsgfQoKCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpwcmVwZW5kKCBjb25zdCBRQnl0ZUFycmF5
ICYgcyApCnsgcmV0dXJuIGluc2VydCgwLHMuZGF0YSgpKTsgfQoKCgppbmxpbmUgUVN0cmluZyAm
UVN0cmluZzo6cHJlcGVuZCggY29uc3Qgc3RkOjpzdHJpbmcmIHMgKQp7IHJldHVybiBpbnNlcnQo
MCwgcyk7IH0KCgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6YXBwZW5kKCBjb25zdCBRU3RyaW5n
ICYgcyApCnsgcmV0dXJuIG9wZXJhdG9yKz0ocyk7IH0KCgppbmxpbmUgUVN0cmluZyAmUVN0cmlu
Zzo6YXBwZW5kKCBjb25zdCBRQnl0ZUFycmF5ICZzICkKeyByZXR1cm4gb3BlcmF0b3IrPShzLmRh
dGEoKSk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQoIGNvbnN0IGNoYXIgKiBz
ICkKeyByZXR1cm4gb3BlcmF0b3IrPShzKTsgfQoKCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjph
cHBlbmQoIFFDaGFyIGMgKQp7IHJldHVybiBvcGVyYXRvcis9KGMpOyB9CgppbmxpbmUgUVN0cmlu
ZyAmUVN0cmluZzo6YXBwZW5kKCBjaGFyIGMgKQp7IHJldHVybiBvcGVyYXRvcis9KGMpOyB9CgoK
aW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6Om9wZXJhdG9yKz0oIGNvbnN0IFFCeXRlQXJyYXkgJnMg
KQp7IHJldHVybiBvcGVyYXRvcis9KHMuZGF0YSgpKTsgfQoKCgppbmxpbmUgUVN0cmluZyAmUVN0
cmluZzo6YXBwZW5kKCBjb25zdCBzdGQ6OnN0cmluZyYgcyApCnsgcmV0dXJuIG9wZXJhdG9yKz0o
cyk7IH0KaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6Om9wZXJhdG9yKz0oIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBzICkKeyByZXR1cm4gb3BlcmF0b3IrPShzLmNfc3RyKCkpOyB9CgoKaW5saW5lIFFTdHJp
bmcgJlFTdHJpbmc6OnNldE51bSggc2hvcnQgbiwgaW50IGJhc2UgKQp7IHJldHVybiBzZXROdW0o
KGxvbmcpbiwgYmFzZSk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0oIHVzaG9y
dCBuLCBpbnQgYmFzZSApCnsgcmV0dXJuIHNldE51bSgodWxvbmcpbiwgYmFzZSk7IH0KCmlubGlu
ZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0oIGludCBuLCBpbnQgYmFzZSApCnsgcmV0dXJuIHNl
dE51bSgobG9uZyluLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OnNldE51bSgg
dWludCBuLCBpbnQgYmFzZSApCnsgcmV0dXJuIHNldE51bSgodWxvbmcpbiwgYmFzZSk7IH0KCmlu
bGluZSBRU3RyaW5nICZRU3RyaW5nOjpzZXROdW0oIGZsb2F0IG4sIGNoYXIgZiwgaW50IHByZWMg
KQp7IHJldHVybiBzZXROdW0oKGRvdWJsZSluLGYscHJlYyk7IH0KCmlubGluZSBRU3RyaW5nIFFT
dHJpbmc6OmFyZyhpbnQgYSwgaW50IGZpZWxkd2lkdGgsIGludCBiYXNlKSBjb25zdAp7IHJldHVy
biBhcmcoKGxvbmcpYSwgZmllbGR3aWR0aCwgYmFzZSk7IH0KCmlubGluZSBRU3RyaW5nIFFTdHJp
bmc6OmFyZyh1aW50IGEsIGludCBmaWVsZHdpZHRoLCBpbnQgYmFzZSkgY29uc3QKeyByZXR1cm4g
YXJnKCh1bG9uZylhLCBmaWVsZHdpZHRoLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJpbmcgUVN0cmlu
Zzo6YXJnKHNob3J0IGEsIGludCBmaWVsZHdpZHRoLCBpbnQgYmFzZSkgY29uc3QKeyByZXR1cm4g
YXJnKChsb25nKWEsIGZpZWxkd2lkdGgsIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyBRU3RyaW5n
OjphcmcodXNob3J0IGEsIGludCBmaWVsZHdpZHRoLCBpbnQgYmFzZSkgY29uc3QKeyByZXR1cm4g
YXJnKCh1bG9uZylhLCBmaWVsZHdpZHRoLCBiYXNlKTsgfQoKaW5saW5lIGludCBRU3RyaW5nOjpm
aW5kKCBjaGFyIGMsIGludCBpbmRleCwgYm9vbCBjcyApIGNvbnN0CnsgcmV0dXJuIGZpbmQoUUNo
YXIoYyksIGluZGV4LCBjcyk7IH0KCmlubGluZSBpbnQgUVN0cmluZzo6ZmluZFJldiggY2hhciBj
LCBpbnQgaW5kZXgsIGJvb2wgY3MpIGNvbnN0CnsgcmV0dXJuIGZpbmRSZXYoIFFDaGFyKGMpLCBp
bmRleCwgY3MgKTsgfQoKCmlubGluZSBpbnQgUVN0cmluZzo6ZmluZCggY29uc3QgY2hhciogc3Ry
LCBpbnQgaW5kZXggKSBjb25zdAp7IHJldHVybiBmaW5kKFFTdHJpbmc6OmZyb21Bc2NpaShzdHIp
LCBpbmRleCk7IH0KCmlubGluZSBpbnQgUVN0cmluZzo6ZmluZFJldiggY29uc3QgY2hhciogc3Ry
LCBpbnQgaW5kZXggKSBjb25zdAp7IHJldHVybiBmaW5kUmV2KFFTdHJpbmc6OmZyb21Bc2NpaShz
dHIpLCBpbmRleCk7IH0KCgoKCgoKCiBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTdHJpbmcgJnMx
LCBjb25zdCBRU3RyaW5nICZzMiApOwogYm9vbCBvcGVyYXRvcjwoIGNvbnN0IFFTdHJpbmcgJnMx
LCBjb25zdCBRU3RyaW5nICZzMiApOwogYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBRU3RyaW5nICZz
MSwgY29uc3QgUVN0cmluZyAmczIgKTsKIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVN0cmluZyAm
czEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiBib29sIG9wZXJhdG9yPiggY29uc3QgUVN0cmluZyAm
czEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CiBib29sIG9wZXJhdG9yPj0oIGNvbnN0IFFTdHJpbmcg
JnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwoKIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVN0cmlu
ZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiBib29sIG9wZXJhdG9yPCggY29uc3QgUVN0cmluZyAm
czEsIGNvbnN0IGNoYXIgKnMyICk7CiBib29sIG9wZXJhdG9yPD0oIGNvbnN0IFFTdHJpbmcgJnMx
LCBjb25zdCBjaGFyICpzMiApOwogYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRU3RyaW5nICZzMSwg
Y29uc3QgY2hhciAqczIgKTsKIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBRU3RyaW5nICZzMSwgY29u
c3QgY2hhciAqczIgKTsKIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0
IGNoYXIgKnMyICk7CiBib29sIG9wZXJhdG9yIT0oIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3Ry
aW5nICZzMiApOwogYm9vbCBvcGVyYXRvcjwoIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5n
ICZzMiApOwogYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUVN0cmluZyAm
czIgKTsKIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFTdHJpbmcgJnMy
ICk7CgogYm9vbCBvcGVyYXRvcj49KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIg
KTsKCgogaW5saW5lIGNvbnN0IFFTdHJpbmcgb3BlcmF0b3IrKCBjb25zdCBRU3RyaW5nICZzMSwg
Y29uc3QgUVN0cmluZyAmczIgKQp7CiAgICBRU3RyaW5nIHRtcCggczEgKTsKICAgIHRtcCArPSBz
MjsKICAgIHJldHVybiB0bXA7Cn0KCgogaW5saW5lIGNvbnN0IFFTdHJpbmcgb3BlcmF0b3IrKCBj
b25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7CiAgICBRU3RyaW5nIHRtcCggczEg
KTsKICAgIHRtcCArPSBRU3RyaW5nOjpmcm9tQXNjaWkoczIpOwogICAgcmV0dXJuIHRtcDsKfQoK
IGlubGluZSBjb25zdCBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgY2hhciAqczEsIGNvbnN0IFFT
dHJpbmcgJnMyICkKewogICAgUVN0cmluZyB0bXAgPSBRU3RyaW5nOjpmcm9tQXNjaWkoIHMxICk7
CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4gdG1wOwp9CgoKIGlubGluZSBjb25zdCBRU3RyaW5n
IG9wZXJhdG9yKyggY29uc3QgUVN0cmluZyAmczEsIFFDaGFyIGMyICkKewogICAgUVN0cmluZyB0
bXAoIHMxICk7CiAgICB0bXAgKz0gYzI7CiAgICByZXR1cm4gdG1wOwp9CgogaW5saW5lIGNvbnN0
IFFTdHJpbmcgb3BlcmF0b3IrKCBjb25zdCBRU3RyaW5nICZzMSwgY2hhciBjMiApCnsKICAgIFFT
dHJpbmcgdG1wKCBzMSApOwogICAgdG1wICs9IGMyOwogICAgcmV0dXJuIHRtcDsKfQoKIGlubGlu
ZSBjb25zdCBRU3RyaW5nIG9wZXJhdG9yKyggUUNoYXIgYzEsIGNvbnN0IFFTdHJpbmcgJnMyICkK
ewogICAgUVN0cmluZyB0bXA7CiAgICB0bXAgKz0gYzE7CiAgICB0bXAgKz0gczI7CiAgICByZXR1
cm4gdG1wOwp9CgogaW5saW5lIGNvbnN0IFFTdHJpbmcgb3BlcmF0b3IrKCBjaGFyIGMxLCBjb25z
dCBRU3RyaW5nICZzMiApCnsKICAgIFFTdHJpbmcgdG1wOwogICAgdG1wICs9IGMxOwogICAgdG1w
ICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQojIDQ0ICIuLi8uLi9pbmNsdWRlL3F0ZXh0c3RyZWFt
LmgiIDIKCgoKCmNsYXNzIFFUZXh0Q29kZWM7CmNsYXNzIFFUZXh0RGVjb2RlcjsKCmNsYXNzIFFU
ZXh0U3RyZWFtUHJpdmF0ZTsKCmNsYXNzIFFUZXh0U3RyZWFtCnsKcHVibGljOgogICAgZW51bSBF
bmNvZGluZyB7IExvY2FsZSwgTGF0aW4xLCBVbmljb2RlLCBVbmljb2RlTmV0d29ya09yZGVyLAog
ICAgICAgICAgICAgICAgICAgIFVuaWNvZGVSZXZlcnNlLCBSYXdVbmljb2RlLCBVbmljb2RlVVRG
OCB9OwoKICAgIHZvaWQgc2V0RW5jb2RpbmcoIEVuY29kaW5nICk7CgogICAgdm9pZCBzZXRDb2Rl
YyggUVRleHRDb2RlYyogKTsKICAgIFFUZXh0Q29kZWMgKmNvZGVjKCk7CgoKICAgIFFUZXh0U3Ry
ZWFtKCk7CiAgICBRVGV4dFN0cmVhbSggUUlPRGV2aWNlICogKTsKICAgIFFUZXh0U3RyZWFtKCBR
U3RyaW5nKiwgaW50IG1vZGUgKTsKICAgIFFUZXh0U3RyZWFtKCBRU3RyaW5nJiwgaW50IG1vZGUg
KTsKICAgIFFUZXh0U3RyZWFtKCBRQnl0ZUFycmF5LCBpbnQgbW9kZSApOwogICAgUVRleHRTdHJl
YW0oIEZJTEUgKiwgaW50IG1vZGUgKTsKICAgIHZpcnR1YWwgflFUZXh0U3RyZWFtKCk7CgogICAg
UUlPRGV2aWNlICpkZXZpY2UoKSBjb25zdDsKICAgIHZvaWQgc2V0RGV2aWNlKCBRSU9EZXZpY2Ug
KiApOwogICAgdm9pZCB1bnNldERldmljZSgpOwoKICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKICAg
IGJvb2wgZW9mKCkgY29uc3Q7CgogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPj4oIFFDaGFyICYg
KTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCBjaGFyICYgKTsKICAgIFFUZXh0U3RyZWFt
ICZvcGVyYXRvcj4+KCBzaWduZWQgc2hvcnQgJiApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9y
Pj4oIHVuc2lnbmVkIHNob3J0ICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCBzaWdu
ZWQgaW50ICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCB1bnNpZ25lZCBpbnQgJiAp
OwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPj4oIHNpZ25lZCBsb25nICYgKTsKICAgIFFUZXh0
U3RyZWFtICZvcGVyYXRvcj4+KCB1bnNpZ25lZCBsb25nICYgKTsKICAgIFFUZXh0U3RyZWFtICZv
cGVyYXRvcj4+KCBmbG9hdCAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggZG91Ymxl
ICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+KCBjaGFyICogKTsKICAgIFFUZXh0U3Ry
ZWFtICZvcGVyYXRvcj4+KCBRU3RyaW5nICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj4+
KCBRQ1N0cmluZyAmICk7CgogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIFFDaGFyICk7CiAg
ICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggY2hhciApOwogICAgUVRleHRTdHJlYW0gJm9wZXJh
dG9yPDwoIHNpZ25lZCBzaG9ydCApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIHVuc2ln
bmVkIHNob3J0ICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggc2lnbmVkIGludCApOwog
ICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIHVuc2lnbmVkIGludCApOwogICAgUVRleHRTdHJl
YW0gJm9wZXJhdG9yPDwoIHNpZ25lZCBsb25nICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8
PCggdW5zaWduZWQgbG9uZyApOwogICAgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoIGZsb2F0ICk7
CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggZG91YmxlICk7CiAgICBRVGV4dFN0cmVhbSAm
b3BlcmF0b3I8PCggY29uc3QgY2hhciogKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBj
b25zdCBRU3RyaW5nICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KCBjb25zdCBRQ1N0
cmluZyAmICk7CiAgICBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggdm9pZCAqICk7CgogICAgUVRl
eHRTdHJlYW0gJnJlYWRSYXdCeXRlcyggY2hhciAqLCB1aW50IGxlbiApOwogICAgUVRleHRTdHJl
YW0gJndyaXRlUmF3Qnl0ZXMoIGNvbnN0IGNoYXIqICwgdWludCBsZW4gKTsKCiAgICBRU3RyaW5n
IHJlYWRMaW5lKCk7CiAgICBRU3RyaW5nIHJlYWQoKTsKICAgIHZvaWQgc2tpcFdoaXRlU3BhY2Uo
KTsKCiAgICBlbnVtIHsKICAgICAgICBza2lwd3MgPSAweDAwMDEsCiAgICAgICAgbGVmdCA9IDB4
MDAwMiwKICAgICAgICByaWdodCA9IDB4MDAwNCwKICAgICAgICBpbnRlcm5hbCA9IDB4MDAwOCwK
ICAgICAgICBiaW4gPSAweDAwMTAsCiAgICAgICAgb2N0ID0gMHgwMDIwLAogICAgICAgIGRlYyA9
IDB4MDA0MCwKICAgICAgICBoZXggPSAweDAwODAsCiAgICAgICAgc2hvd2Jhc2UgPSAweDAxMDAs
CiAgICAgICAgc2hvd3BvaW50ID0gMHgwMjAwLAogICAgICAgIHVwcGVyY2FzZSA9IDB4MDQwMCwK
ICAgICAgICBzaG93cG9zID0gMHgwODAwLAogICAgICAgIHNjaWVudGlmaWM9IDB4MTAwMCwKICAg
ICAgICBmaXhlZCA9IDB4MjAwMAogICAgfTsKCiAgICBzdGF0aWMgY29uc3QgaW50IGJhc2VmaWVs
ZDsKICAgIHN0YXRpYyBjb25zdCBpbnQgYWRqdXN0ZmllbGQ7CiAgICBzdGF0aWMgY29uc3QgaW50
IGZsb2F0ZmllbGQ7CgogICAgaW50IGZsYWdzKCkgY29uc3Q7CiAgICBpbnQgZmxhZ3MoIGludCBm
ICk7CiAgICBpbnQgc2V0ZiggaW50IGJpdHMgKTsKICAgIGludCBzZXRmKCBpbnQgYml0cywgaW50
IG1hc2sgKTsKICAgIGludCB1bnNldGYoIGludCBiaXRzICk7CgogICAgdm9pZCByZXNldCgpOwoK
ICAgIGludCB3aWR0aCgpIGNvbnN0OwogICAgaW50IHdpZHRoKCBpbnQgKTsKICAgIGludCBmaWxs
KCkgY29uc3Q7CiAgICBpbnQgZmlsbCggaW50ICk7CiAgICBpbnQgcHJlY2lzaW9uKCkgY29uc3Q7
CiAgICBpbnQgcHJlY2lzaW9uKCBpbnQgKTsKCnByaXZhdGU6CiAgICBsb25nIGlucHV0X2ludCgp
OwogICAgdm9pZCBpbml0KCk7CiAgICBRVGV4dFN0cmVhbSAmb3V0cHV0X2ludCggaW50LCB1bG9u
ZywgYm9vbCApOwogICAgUUlPRGV2aWNlICpkZXY7CgogICAgaW50IGZmbGFnczsKICAgIGludCBm
d2lkdGg7CiAgICBpbnQgZmlsbGNoYXI7CiAgICBpbnQgZnByZWM7CiAgICBib29sIGRvVW5pY29k
ZUhlYWRlcjsKICAgIGJvb2wgb3duZGV2OwogICAgUVRleHRDb2RlYyAqbWFwcGVyOwogICAgUVRl
eHRTdHJlYW1Qcml2YXRlICogZDsKICAgIFFDaGFyIHVudXNlZDE7CiAgICBib29sIGxhdGluMTsK
ICAgIGJvb2wgaW50ZXJuYWxPcmRlcjsKICAgIGJvb2wgbmV0d29ya09yZGVyOwogICAgdm9pZCAq
dW51c2VkMjsKCiAgICBRQ2hhciBlYXRfd3MoKTsKICAgIHVpbnQgdHNfZ2V0bGluZSggUUNoYXIq
ICk7CiAgICB2b2lkIHRzX3VuZ2V0YyggUUNoYXIgKTsKICAgIFFDaGFyIHRzX2dldGMoKTsKICAg
IHVpbnQgdHNfZ2V0YnVmKCBRQ2hhciosIHVpbnQgKTsKICAgIHZvaWQgdHNfcHV0YyhpbnQpOwog
ICAgdm9pZCB0c19wdXRjKFFDaGFyKTsKICAgIGJvb2wgdHNfaXNzcGFjZShRQ2hhcik7CiAgICBi
b29sIHRzX2lzZGlnaXQoUUNoYXIpOwogICAgdWxvbmcgaW5wdXRfYmluKCk7CiAgICB1bG9uZyBp
bnB1dF9vY3QoKTsKICAgIHVsb25nIGlucHV0X2RlYygpOwogICAgdWxvbmcgaW5wdXRfaGV4KCk7
CiAgICBkb3VibGUgaW5wdXRfZG91YmxlKCk7CiAgICBRVGV4dFN0cmVhbSAmd3JpdGVCbG9jaygg
Y29uc3QgY2hhciogcCwgdWludCBsZW4gKTsKICAgIFFUZXh0U3RyZWFtICZ3cml0ZUJsb2NrKCBj
b25zdCBRQ2hhciogcCwgdWludCBsZW4gKTsKCnByaXZhdGU6CgogICAgUVRleHRTdHJlYW0oIGNv
bnN0IFFUZXh0U3RyZWFtICYgKTsKICAgIFFUZXh0U3RyZWFtICZvcGVyYXRvcj0oIGNvbnN0IFFU
ZXh0U3RyZWFtICYgKTsKCn07Cgp0eXBlZGVmIFFUZXh0U3RyZWFtIFFUUzsKCmNsYXNzIFFUZXh0
SVN0cmVhbSA6IHB1YmxpYyBRVGV4dFN0cmVhbSB7CnB1YmxpYzoKICAgIFFUZXh0SVN0cmVhbSgg
Y29uc3QgUVN0cmluZyogcyApIDoKICAgICAgICBRVGV4dFN0cmVhbSgoUVN0cmluZyopcywweDAw
MDEpIHsgfQogICAgUVRleHRJU3RyZWFtKCBRQnl0ZUFycmF5IGJhICkgOgogICAgICAgIFFUZXh0
U3RyZWFtKGJhLDB4MDAwMSkgeyB9CiAgICBRVGV4dElTdHJlYW0oIEZJTEUgKmYgKSA6CiAgICAg
ICAgUVRleHRTdHJlYW0oZiwweDAwMDEpIHsgfQoKcHJpdmF0ZToKCiAgICBRVGV4dElTdHJlYW0o
IGNvbnN0IFFUZXh0SVN0cmVhbSAmICk7CiAgICBRVGV4dElTdHJlYW0gJm9wZXJhdG9yPSggY29u
c3QgUVRleHRJU3RyZWFtICYgKTsKCn07CgpjbGFzcyBRVGV4dE9TdHJlYW0gOiBwdWJsaWMgUVRl
eHRTdHJlYW0gewpwdWJsaWM6CiAgICBRVGV4dE9TdHJlYW0oIFFTdHJpbmcqIHMgKSA6CiAgICAg
ICAgUVRleHRTdHJlYW0ocywweDAwMDIpIHsgfQogICAgUVRleHRPU3RyZWFtKCBRQnl0ZUFycmF5
IGJhICkgOgogICAgICAgIFFUZXh0U3RyZWFtKGJhLDB4MDAwMikgeyB9CiAgICBRVGV4dE9TdHJl
YW0oIEZJTEUgKmYgKSA6CiAgICAgICAgUVRleHRTdHJlYW0oZiwweDAwMDIpIHsgfQoKcHJpdmF0
ZToKCiAgICBRVGV4dE9TdHJlYW0oIGNvbnN0IFFUZXh0T1N0cmVhbSAmICk7CiAgICBRVGV4dE9T
dHJlYW0gJm9wZXJhdG9yPSggY29uc3QgUVRleHRPU3RyZWFtICYgKTsKCn07CgoKCgoKaW5saW5l
IFFJT0RldmljZSAqUVRleHRTdHJlYW06OmRldmljZSgpIGNvbnN0CnsgcmV0dXJuIGRldjsgfQoK
aW5saW5lIGJvb2wgUVRleHRTdHJlYW06OmF0RW5kKCkgY29uc3QKeyByZXR1cm4gZGV2ID8gZGV2
LT5hdEVuZCgpIDogRkFMU0U7IH0KCmlubGluZSBib29sIFFUZXh0U3RyZWFtOjplb2YoKSBjb25z
dAp7IHJldHVybiBhdEVuZCgpOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFtOjpmbGFncygpIGNv
bnN0CnsgcmV0dXJuIGZmbGFnczsgfQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6ZmxhZ3MoIGlu
dCBmICkKeyBpbnQgb2xkZiA9IGZmbGFnczsgZmZsYWdzID0gZjsgcmV0dXJuIG9sZGY7IH0KCmlu
bGluZSBpbnQgUVRleHRTdHJlYW06OnNldGYoIGludCBiaXRzICkKeyBpbnQgb2xkZiA9IGZmbGFn
czsgZmZsYWdzIHw9IGJpdHM7IHJldHVybiBvbGRmOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFt
OjpzZXRmKCBpbnQgYml0cywgaW50IG1hc2sgKQp7IGludCBvbGRmID0gZmZsYWdzOyBmZmxhZ3Mg
PSAoZmZsYWdzICYgfm1hc2spIHwgKGJpdHMgJiBtYXNrKTsgcmV0dXJuIG9sZGY7IH0KCmlubGlu
ZSBpbnQgUVRleHRTdHJlYW06OnVuc2V0ZiggaW50IGJpdHMgKQp7IGludCBvbGRmID0gZmZsYWdz
OyBmZmxhZ3MgJj0gfmJpdHM7IHJldHVybiBvbGRmOyB9CgppbmxpbmUgaW50IFFUZXh0U3RyZWFt
Ojp3aWR0aCgpIGNvbnN0CnsgcmV0dXJuIGZ3aWR0aDsgfQoKaW5saW5lIGludCBRVGV4dFN0cmVh
bTo6d2lkdGgoIGludCB3ICkKeyBpbnQgb2xkdyA9IGZ3aWR0aDsgZndpZHRoID0gdzsgcmV0dXJu
IG9sZHc7IH0KCmlubGluZSBpbnQgUVRleHRTdHJlYW06OmZpbGwoKSBjb25zdAp7IHJldHVybiBm
aWxsY2hhcjsgfQoKaW5saW5lIGludCBRVGV4dFN0cmVhbTo6ZmlsbCggaW50IGYgKQp7IGludCBv
bGRjID0gZmlsbGNoYXI7IGZpbGxjaGFyID0gZjsgcmV0dXJuIG9sZGM7IH0KCmlubGluZSBpbnQg
UVRleHRTdHJlYW06OnByZWNpc2lvbigpIGNvbnN0CnsgcmV0dXJuIGZwcmVjOyB9CgppbmxpbmUg
aW50IFFUZXh0U3RyZWFtOjpwcmVjaXNpb24oIGludCBwICkKeyBpbnQgb2xkcCA9IGZwcmVjOyBm
cHJlYyA9IHA7IHJldHVybiBvbGRwOyB9CgoKCgppbmxpbmUgUUNoYXIgUVRleHRTdHJlYW06OnRz
X2dldGMoKQp7IFFDaGFyIHI7IHJldHVybiAoIHRzX2dldGJ1ZiggJnIsMSApID09IDEgPyByIDog
UUNoYXIoKHVzaG9ydCkweGZmZmYpICk7IH0KCgoKCgp0eXBlZGVmIFFUZXh0U3RyZWFtICYgKCpR
VFNGVU5DKShRVGV4dFN0cmVhbSAmKTsKdHlwZWRlZiBpbnQgKFFUZXh0U3RyZWFtOjoqUVRTTUZJ
KShpbnQpOwoKY2xhc3MgUVRTTWFuaXAgewpwdWJsaWM6CiAgICBRVFNNYW5pcCggUVRTTUZJIG0s
IGludCBhICkgeyBtZj1tOyBhcmc9YTsgfQogICAgdm9pZCBleGVjKCBRVGV4dFN0cmVhbSAmcyAp
IHsgKHMuKm1mKShhcmcpOyB9CnByaXZhdGU6CiAgICBRVFNNRkkgbWY7CiAgICBpbnQgYXJnOwp9
OwoKIGlubGluZSBRVGV4dFN0cmVhbSAmb3BlcmF0b3I+PiggUVRleHRTdHJlYW0gJnMsIFFUU0ZV
TkMgZiApCnsgcmV0dXJuICgqZikoIHMgKTsgfQoKIGlubGluZSBRVGV4dFN0cmVhbSAmb3BlcmF0
b3I8PCggUVRleHRTdHJlYW0gJnMsIFFUU0ZVTkMgZiApCnsgcmV0dXJuICgqZikoIHMgKTsgfQoK
IGlubGluZSBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PCggUVRleHRTdHJlYW0gJnMsIFFUU01hbmlw
IG0gKQp7IG0uZXhlYyhzKTsgcmV0dXJuIHM7IH0KCiBRVGV4dFN0cmVhbSAmYmluKCBRVGV4dFN0
cmVhbSAmcyApOwogUVRleHRTdHJlYW0gJm9jdCggUVRleHRTdHJlYW0gJnMgKTsKIFFUZXh0U3Ry
ZWFtICZkZWMoIFFUZXh0U3RyZWFtICZzICk7CiBRVGV4dFN0cmVhbSAmaGV4KCBRVGV4dFN0cmVh
bSAmcyApOwogUVRleHRTdHJlYW0gJmVuZGwoIFFUZXh0U3RyZWFtICZzICk7CiBRVGV4dFN0cmVh
bSAmZmx1c2goIFFUZXh0U3RyZWFtICZzICk7CiBRVGV4dFN0cmVhbSAmd3MoIFFUZXh0U3RyZWFt
ICZzICk7CiBRVGV4dFN0cmVhbSAmcmVzZXQoIFFUZXh0U3RyZWFtICZzICk7CgogaW5saW5lIFFU
U01hbmlwIHFTZXRXKCBpbnQgdyApCnsKICAgIFFUU01GSSBmdW5jID0gJlFUZXh0U3RyZWFtOjp3
aWR0aDsKICAgIHJldHVybiBRVFNNYW5pcChmdW5jLHcpOwp9CgogaW5saW5lIFFUU01hbmlwIHFT
ZXRGaWxsKCBpbnQgZiApCnsKICAgIFFUU01GSSBmdW5jID0gJlFUZXh0U3RyZWFtOjpmaWxsOwog
ICAgcmV0dXJuIFFUU01hbmlwKGZ1bmMsZik7Cn0KCiBpbmxpbmUgUVRTTWFuaXAgcVNldFByZWNp
c2lvbiggaW50IHAgKQp7CiAgICBRVFNNRkkgZnVuYyA9ICZRVGV4dFN0cmVhbTo6cHJlY2lzaW9u
OwogICAgcmV0dXJuIFFUU01hbmlwKGZ1bmMscCk7Cn0KIyA0NCAiLi4vLi4vaW5jbHVkZS9xdGwu
aCIgMgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFFUZXh0T1N0cmVhbUl0ZXJhdG9yCnsK
cHJvdGVjdGVkOgogICAgUVRleHRPU3RyZWFtJiBzdHJlYW07CiAgICBRU3RyaW5nIHNlcGFyYXRv
cjsKCnB1YmxpYzoKICAgIFFUZXh0T1N0cmVhbUl0ZXJhdG9yKCBRVGV4dE9TdHJlYW0mIHMpIDog
c3RyZWFtKCBzICkge30KICAgIFFUZXh0T1N0cmVhbUl0ZXJhdG9yKCBRVGV4dE9TdHJlYW0mIHMs
IGNvbnN0IFFTdHJpbmcmIHNlcCApCiAgICAgICAgOiBzdHJlYW0oIHMgKSwgc2VwYXJhdG9yKCBz
ZXAgKSB7fQogICAgUVRleHRPU3RyZWFtSXRlcmF0b3I8VD4mIG9wZXJhdG9yPSAoIGNvbnN0IFQm
IHggKSB7CiAgICAgICAgc3RyZWFtIDw8IHg7CiAgICAgICAgaWYgKCAhc2VwYXJhdG9yLmlzRW1w
dHkoKSApCiAgICAgICAgICAgIHN0cmVhbSA8PCBzZXBhcmF0b3I7CiAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQogICAgUVRleHRPU3RyZWFtSXRlcmF0b3I8VD4mIG9wZXJhdG9yKigpIHsgcmV0
dXJuICp0aGlzOyB9CiAgICBRVGV4dE9TdHJlYW1JdGVyYXRvcjxUPiYgb3BlcmF0b3IrKygpIHsg
cmV0dXJuICp0aGlzOyB9CiAgICBRVGV4dE9TdHJlYW1JdGVyYXRvcjxUPiYgb3BlcmF0b3IrKyhp
bnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3Is
IGNsYXNzIE91dHB1dEl0ZXJhdG9yPgppbmxpbmUgT3V0cHV0SXRlcmF0b3IgcUNvcHkoIElucHV0
SXRlcmF0b3IgX2JlZ2luLCBJbnB1dEl0ZXJhdG9yIF9lbmQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3V0cHV0SXRlcmF0b3IgX2Rlc3QgKQp7CiAgICB3aGlsZSggX2JlZ2luICE9IF9l
bmQgKQogICAgICAgICpfZGVzdCsrID0gKl9iZWdpbisrOwogICAgcmV0dXJuIF9kZXN0Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgQmlJdGVyYXRvciwgY2xhc3MgQmlPdXRwdXRJdGVyYXRvcj4KaW5saW5l
IEJpT3V0cHV0SXRlcmF0b3IgcUNvcHlCYWNrd2FyZCggQmlJdGVyYXRvciBfYmVnaW4sIEJpSXRl
cmF0b3IgX2VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlPdXRw
dXRJdGVyYXRvciBfZGVzdCApCnsKICAgIHdoaWxlICggX2JlZ2luICE9IF9lbmQgKQogICAgICAg
ICotLV9kZXN0ID0gKi0tX2VuZDsKICAgIHJldHVybiBfZGVzdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IElucHV0SXRlcmF0b3IxLCBjbGFzcyBJbnB1dEl0ZXJhdG9yMj4KaW5saW5lIGJvb2wgcUVxdWFs
KCBJbnB1dEl0ZXJhdG9yMSBmaXJzdDEsIElucHV0SXRlcmF0b3IxIGxhc3QxLCBJbnB1dEl0ZXJh
dG9yMiBmaXJzdDIgKQp7CgogICAgZm9yICggOyBmaXJzdDEgIT0gbGFzdDE7ICsrZmlyc3QxLCAr
K2ZpcnN0MiApCiAgICAgICAgaWYgKCAqZmlyc3QxICE9ICpmaXJzdDIgKQogICAgICAgICAgICBy
ZXR1cm4gRkFMU0U7CiAgICByZXR1cm4gVFJVRTsKfQoKdGVtcGxhdGUgPGNsYXNzIEZvcndhcmRJ
dGVyYXRvciwgY2xhc3MgVD4KaW5saW5lIHZvaWQgcUZpbGwoIEZvcndhcmRJdGVyYXRvciBmaXJz
dCwgRm9yd2FyZEl0ZXJhdG9yIGxhc3QsIGNvbnN0IFQmIHZhbCApCnsKICAgIGZvciAoIDsgZmly
c3QgIT0gbGFzdDsgKytmaXJzdCApCiAgICAgICAgKmZpcnN0ID0gdmFsOwp9CiMgMTIxICIuLi8u
Li9pbmNsdWRlL3F0bC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgVD4K
aW5saW5lIElucHV0SXRlcmF0b3IgcUZpbmQoIElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRl
cmF0b3IgbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQmIHZhbCApCnsK
ICAgIHdoaWxlICggZmlyc3QgIT0gbGFzdCAmJiAqZmlyc3QgIT0gdmFsICkKICAgICAgICArK2Zp
cnN0OwogICAgcmV0dXJuIGZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwg
Y2xhc3MgVCwgY2xhc3MgU2l6ZT4KaW5saW5lIHZvaWQgcUNvdW50KCBJbnB1dEl0ZXJhdG9yIGZp
cnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QsIGNvbnN0IFQmIHZhbHVlLAogICAgICAgICAgICAgICAg
ICAgIFNpemUmIG4gKQp7CiAgICBmb3IgKCA7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3QgKQogICAg
ICAgIGlmICggKmZpcnN0ID09IHZhbHVlICkKICAgICAgICAgICAgKytuOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4KaW5saW5lIHZvaWQgcVN3YXAoIFQmIF92YWx1ZTEsIFQmIF92YWx1ZTIgKQp7CiAg
ICBUIHRtcCA9IF92YWx1ZTE7CiAgICBfdmFsdWUxID0gX3ZhbHVlMjsKICAgIF92YWx1ZTIgPSB0
bXA7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KIHZvaWQgcUJ1YmJsZVNvcnQo
IElucHV0SXRlcmF0b3IgYiwgSW5wdXRJdGVyYXRvciBlICkKewoKICAgIElucHV0SXRlcmF0b3Ig
bGFzdCA9IGU7CiAgICAtLWxhc3Q7CgogICAgaWYgKCBsYXN0ID09IGIgKQogICAgICAgIHJldHVy
bjsKCgogICAgd2hpbGUoIGIgIT0gbGFzdCApIHsKICAgICAgICBib29sIHN3YXBwZWQgPSBGQUxT
RTsKICAgICAgICBJbnB1dEl0ZXJhdG9yIHN3YXBfcG9zID0gYjsKICAgICAgICBJbnB1dEl0ZXJh
dG9yIHggPSBlOwogICAgICAgIElucHV0SXRlcmF0b3IgeSA9IHg7CiAgICAgICAgeS0tOwogICAg
ICAgIGRvIHsKICAgICAgICAgICAgLS14OwogICAgICAgICAgICAtLXk7CiAgICAgICAgICAgIGlm
ICggKnggPCAqeSApIHsKICAgICAgICAgICAgICAgIHN3YXBwZWQgPSBUUlVFOwogICAgICAgICAg
ICAgICAgcVN3YXAoICp4LCAqeSApOwogICAgICAgICAgICAgICAgc3dhcF9wb3MgPSB5OwogICAg
ICAgICAgICB9CiAgICAgICAgfSB3aGlsZSggeSAhPSBiICk7CiAgICAgICAgaWYgKCAhc3dhcHBl
ZCApCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBiID0gc3dhcF9wb3M7CiAgICAgICAgYisr
OwogICAgfQp9CgoKdGVtcGxhdGUgPGNsYXNzIENvbnRhaW5lcj4KaW5saW5lIHZvaWQgcUJ1YmJs
ZVNvcnQoIENvbnRhaW5lciAmYyApCnsKICBxQnViYmxlU29ydCggYy5iZWdpbigpLCBjLmVuZCgp
ICk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVmFsdWU+CiB2b2lkIHFIZWFwU29ydFB1c2hEb3duKCBW
YWx1ZSogaGVhcCwgaW50IGZpcnN0LCBpbnQgbGFzdCApCnsKICAgIGludCByID0gZmlyc3Q7CiAg
ICB3aGlsZSAoIHIgPD0gbGFzdCAvIDIgKSB7CiAgICAgICAgaWYgKCBsYXN0ID09IDIgKiByICkg
ewoKICAgICAgICAgICAgaWYgKCBoZWFwWzIgKiByXSA8IGhlYXBbcl0gKQogICAgICAgICAgICAg
ICAgcVN3YXAoIGhlYXBbcl0sIGhlYXBbMiAqIHJdICk7CiAgICAgICAgICAgIHIgPSBsYXN0Owog
ICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICBpZiAoIGhlYXBbMiAqIHJdIDwgaGVhcFtyXSAm
JiAhKGhlYXBbMiAqIHIgKyAxXSA8IGhlYXBbMiAqIHJdKSApIHsKCiAgICAgICAgICAgICAgICBx
U3dhcCggaGVhcFtyXSwgaGVhcFsyICogcl0gKTsKICAgICAgICAgICAgICAgIHIgKj0gMjsKICAg
ICAgICAgICAgfSBlbHNlIGlmICggaGVhcFsyICogciArIDFdIDwgaGVhcFtyXQogICAgICAgICAg
ICAgICAgICAgICAgICAmJiBoZWFwWzIgKiByICsgMV0gPCBoZWFwWzIgKiByXSApIHsKCiAgICAg
ICAgICAgICAgICBxU3dhcCggaGVhcFtyXSwgaGVhcFsyICogciArIDFdICk7CiAgICAgICAgICAg
ICAgICByID0gMiAqIHIgKyAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ciA9IGxhc3Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCgp0ZW1wbGF0ZSA8Y2xh
c3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgVmFsdWU+CiB2b2lkIHFIZWFwU29ydEhlbHBlciggSW5w
dXRJdGVyYXRvciBiLCBJbnB1dEl0ZXJhdG9yIGUsIFZhbHVlLCB1aW50IG4gKQp7CgogICAgSW5w
dXRJdGVyYXRvciBpbnNlcnQgPSBiOwogICAgVmFsdWUqIHJlYWxoZWFwID0gbmV3IFZhbHVlW25d
OwoKICAgIFZhbHVlKiBoZWFwID0gcmVhbGhlYXAgLSAxOwogICAgaW50IHNpemUgPSAwOwogICAg
Zm9yKCA7IGluc2VydCAhPSBlOyArK2luc2VydCApIHsKICAgICAgICBoZWFwWysrc2l6ZV0gPSAq
aW5zZXJ0OwogICAgICAgIGludCBpID0gc2l6ZTsKICAgICAgICB3aGlsZSggaSA+IDEgJiYgaGVh
cFtpXSA8IGhlYXBbaSAvIDJdICkgewogICAgICAgICAgICBxU3dhcCggaGVhcFtpXSwgaGVhcFtp
IC8gMl0gKTsKICAgICAgICAgICAgaSAvPSAyOwogICAgICAgIH0KICAgIH0KCgogICAgZm9yKCB1
aW50IGkgPSBuOyBpID4gMDsgaS0tICkgewogICAgICAgICpiKysgPSBoZWFwWzFdOwogICAgICAg
IGlmICggaSA+IDEgKSB7CiAgICAgICAgICAgIGhlYXBbMV0gPSBoZWFwW2ldOwogICAgICAgICAg
ICBxSGVhcFNvcnRQdXNoRG93biggaGVhcCwgMSwgKGludClpIC0gMSApOwogICAgICAgIH0KICAg
IH0KCiAgICBkZWxldGVbXSByZWFsaGVhcDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBJbnB1dEl0ZXJh
dG9yPgogdm9pZCBxSGVhcFNvcnQoIElucHV0SXRlcmF0b3IgYiwgSW5wdXRJdGVyYXRvciBlICkK
ewoKICAgIGlmICggYiA9PSBlICkKICAgICAgICByZXR1cm47CgoKICAgIElucHV0SXRlcmF0b3Ig
aXQgPSBiOwogICAgdWludCBuID0gMDsKICAgIHdoaWxlICggaXQgIT0gZSApIHsKICAgICAgICAr
K247CiAgICAgICAgKytpdDsKICAgIH0KCgoKICAgIHFIZWFwU29ydEhlbHBlciggYiwgZSwgKmIs
IG4gKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+CiB2b2lkIHFIZWFwU29ydCggQ29u
dGFpbmVyICZjICkKewogICAgaWYgKCBjLmJlZ2luKCkgPT0gYy5lbmQoKSApCiAgICAgICAgcmV0
dXJuOwoKCgogICAgcUhlYXBTb3J0SGVscGVyKCBjLmJlZ2luKCksIGMuZW5kKCksICooYy5iZWdp
bigpKSwgKHVpbnQpYy5jb3VudCgpICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBDb250YWluZXI+CmNs
YXNzIFFCYWNrSW5zZXJ0SXRlcmF0b3IKewpwdWJsaWM6CiAgICBleHBsaWNpdCBRQmFja0luc2Vy
dEl0ZXJhdG9yKCBDb250YWluZXIgJmMgKQogICAgICAgIDogY29udGFpbmVyKCAmYyApCiAgICB7
CiAgICB9CgogICAgUUJhY2tJbnNlcnRJdGVyYXRvcjxDb250YWluZXI+JgogICAgb3BlcmF0b3I9
KCBjb25zdCB0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGUgJnZhbHVlICkKICAgIHsKICAg
ICAgICBjb250YWluZXItPnB1c2hfYmFjayggdmFsdWUgKTsKICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogICAgUUJhY2tJbnNlcnRJdGVyYXRvcjxDb250YWluZXI+JiBvcGVyYXRvciooKQog
ICAgewogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBRQmFja0luc2VydEl0ZXJhdG9y
PENvbnRhaW5lcj4mIG9wZXJhdG9yKysoKQogICAgewogICAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgICBRQmFja0luc2VydEl0ZXJhdG9yPENvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KQog
ICAgewogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCnByb3RlY3RlZDoKICAgIENvbnRhaW5l
ciAqY29udGFpbmVyOwp9OwoKdGVtcGxhdGUgPGNsYXNzIENvbnRhaW5lcj4KaW5saW5lIFFCYWNr
SW5zZXJ0SXRlcmF0b3I8Q29udGFpbmVyPiBxQmFja0luc2VydGVyKCBDb250YWluZXIgJmMgKQp7
CiAgICByZXR1cm4gUUJhY2tJbnNlcnRJdGVyYXRvcjxDb250YWluZXI+KCBjICk7Cn0KIyA0MyAi
Li4vLi4vaW5jbHVkZS9xdmFsdWVsaXN0LmgiIDIKCiMgMSAiLi4vLi4vaW5jbHVkZS9xZGF0YXN0
cmVhbS5oIiAxCiMgNDcgIi4uLy4uL2luY2x1ZGUvcWRhdGFzdHJlYW0uaCIKY2xhc3MgUURhdGFT
dHJlYW0KewpwdWJsaWM6CiAgICBRRGF0YVN0cmVhbSgpOwogICAgUURhdGFTdHJlYW0oIFFJT0Rl
dmljZSAqICk7CiAgICBRRGF0YVN0cmVhbSggUUJ5dGVBcnJheSwgaW50IG1vZGUgKTsKICAgIHZp
cnR1YWwgflFEYXRhU3RyZWFtKCk7CgogICAgUUlPRGV2aWNlICpkZXZpY2UoKSBjb25zdDsKICAg
IHZvaWQgc2V0RGV2aWNlKCBRSU9EZXZpY2UgKiApOwogICAgdm9pZCB1bnNldERldmljZSgpOwoK
ICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKICAgIGJvb2wgZW9mKCkgY29uc3Q7CgogICAgZW51bSBC
eXRlT3JkZXIgeyBCaWdFbmRpYW4sIExpdHRsZUVuZGlhbiB9OwogICAgaW50IGJ5dGVPcmRlcigp
IGNvbnN0OwogICAgdm9pZCBzZXRCeXRlT3JkZXIoIGludCApOwoKICAgIGJvb2wgaXNQcmludGFi
bGVEYXRhKCkgY29uc3Q7CiAgICB2b2lkIHNldFByaW50YWJsZURhdGEoIGJvb2wgKTsKCiAgICBp
bnQgdmVyc2lvbigpIGNvbnN0OwogICAgdm9pZCBzZXRWZXJzaW9uKCBpbnQgKTsKCiAgICBRRGF0
YVN0cmVhbSAmb3BlcmF0b3I+PiggUV9JTlQ4ICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0
b3I+PiggUV9VSU5UOCAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfSU5UMTYg
JmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX1VJTlQxNiAmaSApOwogICAgUURh
dGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfSU5UMzIgJmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVy
YXRvcj4+KCBRX1VJTlQzMiAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfTE9O
RyAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfVUxPTkcgJmkgKTsKCiAgICBR
RGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggZmxvYXQgJmYgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVy
YXRvcj4+KCBkb3VibGUgJmYgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBjaGFyICom
c3RyICk7CgogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfSU5UOCBpICk7CiAgICBRRGF0
YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9VSU5UOCBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0
b3I8PCggUV9JTlQxNiBpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9VSU5UMTYg
aSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfSU5UMzIgaSApOwogICAgUURhdGFT
dHJlYW0gJm9wZXJhdG9yPDwoIFFfVUlOVDMyIGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRv
cjw8KCBRX0xPTkcgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfVUxPTkcgaSAp
OwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIGZsb2F0IGYgKTsKICAgIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcjw8KCBkb3VibGUgZiApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIGNv
bnN0IGNoYXIgKnN0ciApOwoKICAgIFFEYXRhU3RyZWFtICZyZWFkQnl0ZXMoIGNoYXIgKiYsIHVp
bnQgJmxlbiApOwogICAgUURhdGFTdHJlYW0gJnJlYWRSYXdCeXRlcyggY2hhciAqLCB1aW50IGxl
biApOwoKICAgIFFEYXRhU3RyZWFtICZ3cml0ZUJ5dGVzKCBjb25zdCBjaGFyICosIHVpbnQgbGVu
ICk7CiAgICBRRGF0YVN0cmVhbSAmd3JpdGVSYXdCeXRlcyggY29uc3QgY2hhciAqLCB1aW50IGxl
biApOwoKcHJpdmF0ZToKICAgIFFJT0RldmljZSAqZGV2OwogICAgYm9vbCBvd25kZXY7CiAgICBp
bnQgYnl0ZW9yZGVyOwogICAgYm9vbCBwcmludGFibGU7CiAgICBib29sIG5vc3dhcDsKICAgIGlu
dCB2ZXI7Cgpwcml2YXRlOgoKICAgIFFEYXRhU3RyZWFtKCBjb25zdCBRRGF0YVN0cmVhbSAmICk7
CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I9KCBjb25zdCBRRGF0YVN0cmVhbSAmICk7Cgp9OwoK
CgoKCgppbmxpbmUgUUlPRGV2aWNlICpRRGF0YVN0cmVhbTo6ZGV2aWNlKCkgY29uc3QKeyByZXR1
cm4gZGV2OyB9CgppbmxpbmUgYm9vbCBRRGF0YVN0cmVhbTo6YXRFbmQoKSBjb25zdAp7IHJldHVy
biBkZXYgPyBkZXYtPmF0RW5kKCkgOiBUUlVFOyB9CgppbmxpbmUgYm9vbCBRRGF0YVN0cmVhbTo6
ZW9mKCkgY29uc3QKeyByZXR1cm4gYXRFbmQoKTsgfQoKaW5saW5lIGludCBRRGF0YVN0cmVhbTo6
Ynl0ZU9yZGVyKCkgY29uc3QKeyByZXR1cm4gYnl0ZW9yZGVyOyB9CgppbmxpbmUgYm9vbCBRRGF0
YVN0cmVhbTo6aXNQcmludGFibGVEYXRhKCkgY29uc3QKeyByZXR1cm4gcHJpbnRhYmxlOyB9Cgpp
bmxpbmUgdm9pZCBRRGF0YVN0cmVhbTo6c2V0UHJpbnRhYmxlRGF0YSggYm9vbCBwICkKeyBwcmlu
dGFibGUgPSBwOyB9CgppbmxpbmUgaW50IFFEYXRhU3RyZWFtOjp2ZXJzaW9uKCkgY29uc3QKeyBy
ZXR1cm4gdmVyOyB9CgppbmxpbmUgdm9pZCBRRGF0YVN0cmVhbTo6c2V0VmVyc2lvbiggaW50IHYg
KQp7IHZlciA9IHY7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJlYW06Om9wZXJhdG9y
Pj4oIFFfVUlOVDggJmkgKQp7IHJldHVybiAqdGhpcyA+PiAoUV9JTlQ4JilpOyB9CgppbmxpbmUg
UURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRvcj4+KCBRX1VJTlQxNiAmaSApCnsgcmV0
dXJuICp0aGlzID4+IChRX0lOVDE2JilpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3Ry
ZWFtOjpvcGVyYXRvcj4+KCBRX1VJTlQzMiAmaSApCnsgcmV0dXJuICp0aGlzID4+IChRX0lOVDMy
JilpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRvcj4+KCBRX1VM
T05HICZpICkKeyByZXR1cm4gKnRoaXMgPj4gKFFfTE9ORyYpaTsgfQoKaW5saW5lIFFEYXRhU3Ry
ZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggUV9VSU5UOCBpICkKeyByZXR1cm4gKnRoaXMg
PDwgKFFfSU5UOClpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRv
cjw8KCBRX1VJTlQxNiBpICkKeyByZXR1cm4gKnRoaXMgPDwgKFFfSU5UMTYpaTsgfQoKaW5saW5l
IFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggUV9VSU5UMzIgaSApCnsgcmV0
dXJuICp0aGlzIDw8IChRX0lOVDMyKWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFTdHJl
YW06Om9wZXJhdG9yPDwoIFFfVUxPTkcgaSApCnsgcmV0dXJuICp0aGlzIDw8IChRX0xPTkcpaTsg
fQojIDQ1ICIuLi8uLi9pbmNsdWRlL3F2YWx1ZWxpc3QuaCIgMgoKCgojIDEgIi9zcGFjZS9zbmIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pdGVyYXRvciIgMSAzCiMgNjUgIi9zcGFjZS9zbmIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pdGVyYXRvciIgMwoKCgoKCiMgMSAiL3NwYWNlL3Nu
Yi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL29zdHJlYW0iIDEgMwojIDQ0ICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvb3N0cmVhbSIgMwoKIyAxICIvc3BhY2Uvc25iL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvaW9zIiAxIDMKIyA0MyAiL3NwYWNlL3NuYi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2lvcyIgMwoKCgoKCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDQ0ICIvc3BhY2Uvc25iL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVmd2QuaCIgMwoKCiMgMSAiL3NwYWNl
L3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3NwYXJjLXN1bi1zb2xhcmlzMi45L2JpdHMv
YysrbG9jYWxlLmgiIDEgMwojIDM2ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvc3BhcmMtc3VuLXNvbGFyaXMyLjkvYml0cy9jKytsb2NhbGUuaCIgMwojIDEgIi9zcGFjZS9z
bmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jbG9jYWxlIiAxIDMKIyA0OCAiL3NwYWNlL3Nu
Yi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Nsb2NhbGUiIDMKCiMgMSAiL3Vzci9pbmNsdWRl
L2xvY2FsZS5oIiAxIDMgNAojIDkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMyA0CiNwcmFnbWEg
aWRlbnQgIkAoIylsb2NhbGUuaAkxLjE5CTk5LzA4LzEwIFNNSSIKIyA0NiAiL3Vzci9pbmNsdWRl
L2xvY2FsZS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvaXNvL2xvY2FsZV9pc28uaCIgMSAzIDQK
IyA0NSAiL3Vzci9pbmNsdWRlL2lzby9sb2NhbGVfaXNvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJA
KCMpbG9jYWxlX2lzby5oCTEuMQk5OS8wOC8wOSBTTUkiCgoKCgpleHRlcm4gIkMiIHsKCgoKCgoK
c3RydWN0IGxjb252IHsKICAgICAgICBjaGFyICpkZWNpbWFsX3BvaW50OwogICAgICAgIGNoYXIg
KnRob3VzYW5kc19zZXA7CiAgICAgICAgY2hhciAqZ3JvdXBpbmc7CiAgICAgICAgY2hhciAqaW50
X2N1cnJfc3ltYm9sOwogICAgICAgIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsKICAgICAgICBjaGFy
ICptb25fZGVjaW1hbF9wb2ludDsKICAgICAgICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsKICAg
ICAgICBjaGFyICptb25fZ3JvdXBpbmc7CiAgICAgICAgY2hhciAqcG9zaXRpdmVfc2lnbjsKICAg
ICAgICBjaGFyICpuZWdhdGl2ZV9zaWduOwogICAgICAgIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwog
ICAgICAgIGNoYXIgZnJhY19kaWdpdHM7CiAgICAgICAgY2hhciBwX2NzX3ByZWNlZGVzOwogICAg
ICAgIGNoYXIgcF9zZXBfYnlfc3BhY2U7CiAgICAgICAgY2hhciBuX2NzX3ByZWNlZGVzOwogICAg
ICAgIGNoYXIgbl9zZXBfYnlfc3BhY2U7CiAgICAgICAgY2hhciBwX3NpZ25fcG9zbjsKICAgICAg
ICBjaGFyIG5fc2lnbl9wb3NuOwp9OwojIDk1ICIvdXNyL2luY2x1ZGUvaXNvL2xvY2FsZV9pc28u
aCIgMyA0CmV4dGVybiBjaGFyICpzZXRsb2NhbGUoaW50LCBjb25zdCBjaGFyICopOwpleHRlcm4g
c3RydWN0IGxjb252ICpsb2NhbGVjb252KHZvaWQpOwojIDEwNyAiL3Vzci9pbmNsdWRlL2lzby9s
b2NhbGVfaXNvLmgiIDMgNAp9CiMgNDcgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzIDQKCgoK
CiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjkvMy4zL2luY2x1ZGUvbGliaW50bC5oIiAxIDMgNAojIDIwICIvc3BhY2Uvc25iL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9saWJpbnRsLmgi
IDMgNAojcHJhZ21hIGlkZW50ICJAKCMpbGliaW50bC5oCTEuMTMJMDEvMDgvMDEgU01JIgoKCgoK
ZXh0ZXJuICJDIiB7CiMgNDQgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL2xpYmludGwuaCIgMyA0CmV4dGVybiBjaGFyICpk
Y2dldHRleHQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGludCk7CmV4dGVybiBj
aGFyICpkZ2V0dGV4dChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpn
ZXR0ZXh0KGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICp0ZXh0ZG9tYWluKGNvbnN0IGNoYXIg
Kik7CmV4dGVybiBjaGFyICpiaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg
Kik7CgoKCgoKZXh0ZXJuIGNoYXIgKmRjbmdldHRleHQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICosCiAgICAgICAgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nIGludCwgaW50KTsKZXh0ZXJu
IGNoYXIgKmRuZ2V0dGV4dChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAgICAgICBjb25z
dCBjaGFyICosIHVuc2lnbmVkIGxvbmcgaW50KTsKZXh0ZXJuIGNoYXIgKm5nZXR0ZXh0KGNvbnN0
IGNoYXIgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nIGludCk7CmV4dGVybiBjaGFyICpi
aW5kX3RleHRkb21haW5fY29kZXNldChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKCmV4
dGVybiBpbnQgd2Rpbml0KHZvaWQpOwpleHRlcm4gaW50IHdkY2hraW5kKHdjaGFyX3QpOwpleHRl
cm4gaW50IHdkYmluZGYod2NoYXJfdCwgd2NoYXJfdCwgaW50KTsKZXh0ZXJuIHdjaGFyX3QgKndk
ZGVsaW0od2NoYXJfdCwgd2NoYXJfdCwgaW50KTsKZXh0ZXJuIHdjaGFyX3QgbWNmaWxsZXIodm9p
ZCk7CmV4dGVybiBpbnQgbWN3cmFwKHZvaWQpOwojIDk4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9saWJpbnRsLmgiIDMg
NAp9CiMgNTIgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzIDQKIyA2NSAiL3Vzci9pbmNsdWRl
L2xvY2FsZS5oIiAzIDQKZXh0ZXJuICJDIiB7CiMgNzUgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIg
MyA0Cn0KIyA1MCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Nsb2NhbGUi
IDIgMwoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bGNvbnY7CiAgdXNpbmcgOjpzZXRs
b2NhbGU7CiAgdXNpbmcgOjpsb2NhbGVjb252Owp9CiMgMzcgIi9zcGFjZS9zbmIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMy9zcGFyYy1zdW4tc29sYXJpczIuOS9iaXRzL2MrK2xvY2FsZS5oIiAy
IDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiBpbnQqIF9fY19sb2NhbGU7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Udj4KICAgIGludAogICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291
dCwgY29uc3QgaW50IF9fc2l6ZSwgY29uc3QgY2hhciogX19mbXQsCiAgICAgICAgICAgICAgICAg
ICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjID0gLTEpCiAgICB7CiAg
ICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKDYsIF9fbnVsbCk7CiAgICAgIGNoYXIqIF9fc2F2
ID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG1hbGxvYyhzdHJsZW4oX19vbGQpICsgMSkpOwogICAgICBp
ZiAoX19zYXYpCiAgICAgICAgc3RyY3B5KF9fc2F2LCBfX29sZCk7CiAgICAgIHNldGxvY2FsZSg2
LCAiQyIpOwoKICAgICAgaW50IF9fcmV0OwoKCgoKCgogICAgICBpZiAoX19wcmVjID49IDApCiAg
ICAgICAgX19yZXQgPSBzcHJpbnRmKF9fb3V0LCBfX2ZtdCwgX19wcmVjLCBfX3YpOwogICAgICBl
bHNlCiAgICAgICAgX19yZXQgPSBzcHJpbnRmKF9fb3V0LCBfX2ZtdCwgX192KTsKCiAgICAgIHNl
dGxvY2FsZSg2LCBfX3Nhdik7CiAgICAgIGZyZWUoX19zYXYpOwogICAgICByZXR1cm4gX19yZXQ7
CiAgICB9Cn0KIyA0NyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMv
bG9jYWxlZndkLmgiIDIgMwoKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvY2N0eXBlIiAxIDMKIyA0NyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L2NjdHlwZSIgMwojIDY2ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY2N0
eXBlIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6aXNhbG51bTsKICB1c2luZyA6OmlzYWxw
aGE7CiAgdXNpbmcgOjppc2NudHJsOwogIHVzaW5nIDo6aXNkaWdpdDsKICB1c2luZyA6OmlzZ3Jh
cGg7CiAgdXNpbmcgOjppc2xvd2VyOwogIHVzaW5nIDo6aXNwcmludDsKICB1c2luZyA6OmlzcHVu
Y3Q7CiAgdXNpbmcgOjppc3NwYWNlOwogIHVzaW5nIDo6aXN1cHBlcjsKICB1c2luZyA6OmlzeGRp
Z2l0OwogIHVzaW5nIDo6dG9sb3dlcjsKICB1c2luZyA6OnRvdXBwZXI7Cn0KIyA0OSAiL3NwYWNl
L3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlZndkLmgiIDIgMwoKIyAx
ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9mdW5jdGV4Y2VwdC5o
IiAxIDMKIyAzNCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvZnVu
Y3RleGNlcHQuaCIgMwojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9l
eGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9p
ZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9h
bGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAg
X190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3Io
Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3Qg
Y2hhciogX19zKTsKfQojIDUxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9sb2NhbGVmd2QuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CgogIGNsYXNzIGxvY2FsZTsK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3NwYWNl
KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCwg
Y29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBi
b29sCiAgICBpc3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2xvd2VyKF9DaGFyVCwgY29uc3QgbG9j
YWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp
c2FscGhhKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGlubGluZSBib29sCiAgICBpc2RpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3B1bmN0KF9D
aGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu
bGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbG51bShfQ2hhclQsIGNv
bnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v
bAogICAgaXNncmFwaChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFyVCwgY29uc3QgbG9j
YWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAg
IHRvbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCgoKICBjbGFzcyBjdHlwZV9iYXNlOwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlOwogIHRlbXBsYXRlPD4g
Y2xhc3MgY3R5cGU8Y2hhcj47CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xh
c3MgY3R5cGVfYnluYW1lOwoKCiAgY2xhc3MgY29kZWN2dF9iYXNlOwogIGNsYXNzIF9fZW5jX3Ry
YWl0czsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5
cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0OwogIHRlbXBsYXRlPD4gY2xhc3MgY29k
ZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRl
cm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVj
dnRfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
ID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51bV9nZXQ7CiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRl
cmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4gY2xhc3MgbnVtcHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBu
dW1wdW5jdF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBj
b2xsYXRlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MKICAgIGNvbGxhdGVfYnlu
YW1lOwoKCiAgY2xhc3MgdGltZV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0
aW1lX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBp
c3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9nZXRfYnluYW1lOwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVm
X2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU
PiA+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWU7CgoKICBjbGFzcyBtb25leV9iYXNlOwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRl
cmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBtb25leV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+
CiAgICBjbGFzcyBtb25leV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9J
bnRsID0gZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU7CgoK
ICBjbGFzcyBtZXNzYWdlc19iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs
YXNzIG1lc3NhZ2VzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3Nh
Z2VzX2J5bmFtZTsKCgogIGNsYXNzIGxvY2FsZQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiB1
bnNpZ25lZCBpbnQgY2F0ZWdvcnk7CgoKICAgIGNsYXNzIGZhY2V0OwogICAgY2xhc3MgaWQ7CiAg
ICBjbGFzcyBfSW1wbDsKCiAgICBmcmllbmQgY2xhc3MgZmFjZXQ7CiAgICBmcmllbmQgY2xhc3Mg
X0ltcGw7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3Qg
X0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CgogICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9j
YWxlJikgdGhyb3coKTsKCgoKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBub25lID0gMDsKICAg
IHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjdHlwZSA9IDFMIDw8IDA7CiAgICBzdGF0aWMgY29uc3Qg
Y2F0ZWdvcnkgbnVtZXJpYyA9IDFMIDw8IDE7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgY29s
bGF0ZSA9IDFMIDw8IDI7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgdGltZSA9IDFMIDw8IDM7
CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbW9uZXRhcnkgPSAxTCA8PCA0OwogICAgc3RhdGlj
IGNvbnN0IGNhdGVnb3J5IG1lc3NhZ2VzID0gMUwgPDwgNTsKICAgIHN0YXRpYyBjb25zdCBjYXRl
Z29yeSBhbGwgPSAoY3R5cGUgfCBudW1lcmljIHwgY29sbGF0ZSB8CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lIHwgbW9uZXRhcnkgfCBtZXNzYWdlcyk7CgoK
ICAgIGxvY2FsZSgpIHRocm93KCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlcikg
dGhyb3coKTsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKGNvbnN0IGNoYXIqIF9fcyk7CgogICAg
bG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBjaGFyKiBfX3MsIGNhdGVnb3J5IF9f
Y2F0KTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19h
ZGQsIGNhdGVnb3J5IF9fY2F0KTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAg
IGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKTsKCiAgICB+bG9jYWxl
KCkgdGhyb3coKTsKCiAgICBjb25zdCBsb2NhbGUmCiAgICBvcGVyYXRvcj0oY29uc3QgbG9jYWxl
JiBfX290aGVyKSB0aHJvdygpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAg
bG9jYWxlCiAgICAgIGNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdDsKCgogICAg
c3RyaW5nCiAgICBuYW1lKCkgY29uc3Q7CgogICAgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBs
b2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgpOwoKICAgIGlubGluZSBib29sCiAgICBvcGVy
YXRvciE9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCkKICAgIHsgcmV0dXJu
ICEodGhpcy0+b3BlcmF0b3I9PShfX290aGVyKSk7IH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhciwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgICBib29sCiAgICAg
IG9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3MxLAogICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0cywg
X0FsbG9jPiYgX19zMikgY29uc3Q7CgoKICAgIHN0YXRpYyBsb2NhbGUKICAgIGdsb2JhbChjb25z
dCBsb2NhbGUmKTsKCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlJgogICAgY2xhc3NpYygpOwoKICBw
cml2YXRlOgoKICAgIF9JbXBsKiBfTV9pbXBsOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9TX2NsYXNz
aWM7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfZ2xvYmFsOwoKCgoKCgogICAgc3RhdGljIGNvbnN0
IHNpemVfdCBfU19jYXRlZ29yaWVzX3NpemUgPSA2OwoKCgoKCgogICAgc3RhdGljIGNvbnN0IHNp
emVfdCBfU19leHRyYV9jYXRlZ29yaWVzX3NpemUgPSAwOwoKCgoKCiAgICBzdGF0aWMgY29uc3Qg
Y2hhciogX1NfY2F0ZWdvcmllc1tfU19jYXRlZ29yaWVzX3NpemUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICArIF9TX2V4dHJhX2NhdGVnb3JpZXNfc2l6ZV07CgogICAgZXhw
bGljaXQKICAgIGxvY2FsZShfSW1wbCopIHRocm93KCk7CgogICAgc3RhdGljIGlubGluZSB2b2lk
CiAgICBfU19pbml0aWFsaXplKCkKICAgIHsKICAgICAgaWYgKCFfU19jbGFzc2ljKQogICAgICAg
IGNsYXNzaWMoKTsKICAgIH0KCiAgICBzdGF0aWMgY2F0ZWdvcnkKICAgIF9TX25vcm1hbGl6ZV9j
YXRlZ29yeShjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fY29hbGVzY2UoY29uc3QgbG9jYWxl
JiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKICB9OwoKCgog
IGNsYXNzIGxvY2FsZTo6X0ltcGwKICB7CiAgcHVibGljOgoKICAgIGZyaWVuZCBjbGFzcyBsb2Nh
bGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpmYWNldDsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25z
dCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBi
b29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKICBwcml2YXRlOgoK
ICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwogICAgZmFjZXQqKiBfTV9mYWNldHM7CiAg
ICBzaXplX3QgX01fZmFjZXRzX3NpemU7CgogICAgY2hhciogX01fbmFtZXNbX1NfY2F0ZWdvcmll
c19zaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr
IF9TX2V4dHJhX2NhdGVnb3JpZXNfc2l6ZV07CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCog
Y29uc3QgX1NfaWRfY3R5cGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBf
U19pZF9udW1lcmljW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRf
Y29sbGF0ZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX3RpbWVb
XTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tb25ldGFyeVtdOwog
ICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21lc3NhZ2VzW107CiAgICBz
dGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QqIGNvbnN0IF9TX2ZhY2V0X2NhdGVnb3JpZXNb
XTsKCiAgICBpbmxpbmUgdm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCkKICAgIHsg
X19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsgfQoKICAgIGlubGluZSB2b2lkCiAgICBf
TV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgewogICAgICBpZiAoX19leGNoYW5nZV9h
bmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAtMSkgPT0gMSkKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgeyBkZWxldGUgdGhpczsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAg
ICAgICB7IH0KICAgICAgICB9CiAgICB9CgogICAgX0ltcGwoY29uc3QgX0ltcGwmLCBzaXplX3Qp
OwogICAgX0ltcGwoY29uc3QgY2hhciosIHNpemVfdCk7CiAgICBfSW1wbChmYWNldCoqLCBzaXpl
X3QsIGJvb2wpOwoKICAgfl9JbXBsKCkgdGhyb3coKTsKCiAgICBfSW1wbChjb25zdCBfSW1wbCYp
OwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBfSW1wbCYpOwoKICAgIGlubGluZSBib29s
CiAgICBfTV9jaGVja19zYW1lX25hbWUoKQogICAgewogICAgICBib29sIF9fcmV0ID0gdHJ1ZTsK
ICAgICAgZm9yIChzaXplX3QgX19pID0gMDsKICAgICAgICAgICBfX3JldCAmJiBfX2kgPCBfU19j
YXRlZ29yaWVzX3NpemUgKyBfU19leHRyYV9jYXRlZ29yaWVzX3NpemUgLSAxOwogICAgICAgICAg
ICsrX19pKQogICAgICAgIF9fcmV0ICY9IChzdHJjbXAoX01fbmFtZXNbX19pXSwgX01fbmFtZXNb
X19pICsgMV0pID09IDApOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogICAgdm9pZAogICAg
X01fcmVwbGFjZV9jYXRlZ29yaWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOwoKICAgIHZvaWQK
ICAgIF9NX3JlcGxhY2VfY2F0ZWdvcnkoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKiBj
b25zdCopOwoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwqLCBjb25z
dCBsb2NhbGU6OmlkKik7CgogICAgdm9pZAogICAgX01faW5zdGFsbF9mYWNldChjb25zdCBsb2Nh
bGU6OmlkKiwgZmFjZXQqKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGlu
bGluZSB2b2lkCiAgICAgIF9NX2luaXRfZmFjZXQoX0ZhY2V0KiBfX2ZhY2V0KQogICAgICB7IF9N
X2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZmFjZXQpOyB9CiAgfTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxlOjpsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVy
LCBfRmFjZXQqIF9fZikKICAgIHsKICAgICAgX01faW1wbCA9IG5ldyBfSW1wbCgqX19vdGhlci5f
TV9pbXBsLCAxKTsKICAgICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwg
X19mKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsKICAgICAgICAgICBfX2kgPCBfU19jYXRl
Z29yaWVzX3NpemUgKyBfU19leHRyYV9jYXRlZ29yaWVzX3NpemU7ICsrX19pKQogICAgICAgIHsK
ICAgICAgICAgIGRlbGV0ZSBbXSBfTV9pbXBsLT5fTV9uYW1lc1tfX2ldOwogICAgICAgICAgY2hh
ciogX19uZXcgPSBuZXcgY2hhclsyXTsKICAgICAgICAgIHN0cmNweShfX25ldywgIioiKTsKICAg
ICAgICAgIF9NX2ltcGwtPl9NX25hbWVzW19faV0gPSBfX25ldzsKICAgICAgICB9CiAgICB9CgoK
ICBjbGFzcyBsb2NhbGU6OmZhY2V0CiAgewogIHByaXZhdGU6CiAgICBmcmllbmQgY2xhc3MgbG9j
YWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CgogICAgX0F0b21pY193b3JkIF9N
X3JlZmVyZW5jZXM7CgogIHByb3RlY3RlZDoKCiAgICBzdGF0aWMgX19jX2xvY2FsZSBfU19jX2xv
Y2FsZTsKCgogICAgc3RhdGljIGNoYXIgX1NfY19uYW1lWzJdOwoKICAgIGV4cGxpY2l0CiAgICBm
YWNldChzaXplX3QgX19yZWZzID0gMCkgdGhyb3coKTsKCiAgICB2aXJ0dWFsCiAgICB+ZmFjZXQo
KTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9f
Y2xvYywgY29uc3QgY2hhciogX19zLAogICAgICAgICAgICAgICAgICAgICAgIF9fY19sb2NhbGUg
X19vbGQgPSAwKTsKCiAgICBzdGF0aWMgX19jX2xvY2FsZQogICAgX1NfY2xvbmVfY19sb2NhbGUo
X19jX2xvY2FsZSYgX19jbG9jKTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfZGVzdHJveV9jX2xv
Y2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICBwcml2YXRlOgogICAgdm9pZAogICAgX01fYWRk
X3JlZmVyZW5jZSgpIHRocm93KCk7CgogICAgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgp
IHRocm93KCk7CgogICAgZmFjZXQoY29uc3QgZmFjZXQmKTsKCiAgICB2b2lkCiAgICBvcGVyYXRv
cj0oY29uc3QgZmFjZXQmKTsKICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6aWQKICB7CiAgcHJpdmF0
ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1w
bDsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNl
dCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikg
dGhyb3cgKCk7CgoKCgogICAgbXV0YWJsZSBzaXplX3QgX01faW5kZXg7CgoKICAgIHN0YXRpYyBf
QXRvbWljX3dvcmQgX1NfaGlnaHdhdGVyOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBp
ZCYpOwoKICAgIGlkKGNvbnN0IGlkJik7CgogIHB1YmxpYzoKCgogICAgaWQoKTsKCiAgICBpbmxp
bmUgc2l6ZV90CiAgICBfTV9pZCgpIGNvbnN0CiAgICB7CiAgICAgIGlmICghX01faW5kZXgpCiAg
ICAgICAgX01faW5kZXggPSAxICsgX19leGNoYW5nZV9hbmRfYWRkKCZfU19oaWdod2F0ZXIsIDEp
OwogICAgICByZXR1cm4gX01faW5kZXggLSAxOwogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUm
IF9fbG9jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2Zh
Y2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCk7Cn0KIyA0OSAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2lvcyIgMiAzCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2JpdHMvaW9zX2Jhc2UuaCIgMSAzCiMgNDQgIi9zcGFjZS9zbmIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2lvc19iYXNlLmgiIDMKCgoKbmFtZXNwYWNlIHN0
ZAp7CgoKCgogIGVudW0gX0lvc19GbXRmbGFncyB7IF9NX2lvc19mbXRmbGFnc19lbmQgPSAxTCA8
PCAxNiB9OwoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdz
IF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNf
Y2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9z
X0ZtdGZsYWdzCiAgb3BlcmF0b3J8KF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9f
YikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRp
Y19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl4o
X0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10
ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoK
ICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBf
SW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5l
IF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciY9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRm
bGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0Zt
dGZsYWdzCiAgb3BlcmF0b3JePShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19i
KQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwog
IG9wZXJhdG9yfihfSW9zX0ZtdGZsYWdzIF9fYSkKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKH5z
dGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9Jb3NfT3Blbm1vZGUgeyBfTV9pb3Nf
b3Blbm1vZGVfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVy
YXRvciYoX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9J
b3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2Ip
KTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfChfSW9zX09wZW5tb2RlIF9f
YSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2Fz
dDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09w
ZW5tb2RlCiAgb3BlcmF0b3JeKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikK
ICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19j
YXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnw9KF9J
b3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19h
IHwgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3ImPShfSW9zX09wZW5t
b2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsg
fQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yXj0oX0lvc19PcGVubW9kZSYgX19h
LCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5s
aW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcn4oX0lvc19PcGVubW9kZSBfX2EpCiAgeyByZXR1
cm4gX0lvc19PcGVubW9kZSh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9z
X0lvc3RhdGUgeyBfTV9pb3NfaW9zdGF0ZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lv
c19Jb3N0YXRlCiAgb3BlcmF0b3ImKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2Ip
CiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19j
YXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfChfSW9z
X0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShz
dGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGlu
ZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl4oX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRl
IF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3Rh
dGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8
PShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBf
X2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0
YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9
CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl49KF9Jb3NfSW9zdGF0ZSYgX19hLCBf
SW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUg
X0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J+KF9Jb3NfSW9zdGF0ZSBfX2EpCiAgeyByZXR1cm4gX0lv
c19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgogIGVudW0gX0lvc19TZWVrZGly
IHsgX01faW9zX3NlZWtkaXJfZW5kID0gMUwgPDwgMTYgfTsKIyAxNTYgIi9zcGFjZS9zbmIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2lvc19iYXNlLmgiIDMKICBjbGFzcyBpb3NfYmFz
ZQogIHsKICBwdWJsaWM6CgoKCiAgICBjbGFzcyBmYWlsdXJlIDogcHVibGljIGV4Y2VwdGlvbgog
ICAgewogICAgcHVibGljOgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGZhaWx1cmUoY29uc3Qgc3Ry
aW5nJiBfX3N0cikgdGhyb3coKTsKCgoKICAgICAgdmlydHVhbAogICAgICB+ZmFpbHVyZSgpIHRo
cm93KCk7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIHdoYXQoKSBjb25zdCB0aHJv
dygpOwoKICAgIHByaXZhdGU6CiAgICAgIGVudW0geyBfTV9idWZzaXplID0gMjU2IH07CiAgICAg
IGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsKCiAgICB9OwojIDIxMCAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvaW9zX2Jhc2UuaCIgMwogICAgdHlwZWRlZiBfSW9z
X0ZtdGZsYWdzIGZtdGZsYWdzOwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBib29sYWxwaGEg
PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhhKTsKCiAgICBzdGF0aWMgY29uc3Qg
Zm10ZmxhZ3MgZGVjID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2RlYyk7CgogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIGZpeGVkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ZpeGVkKTsK
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9T
X2hleCk7CgoKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaW50ZXJuYWwgPSBmbXRmbGFncyhf
X2lvc19mbGFnczo6X1NfaW50ZXJuYWwpOwoKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgbGVm
dCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19sZWZ0KTsKCiAgICBzdGF0aWMgY29uc3QgZm10
ZmxhZ3Mgb2N0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX29jdCk7CgoKICAgIHN0YXRpYyBj
b25zdCBmbXRmbGFncyByaWdodCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19yaWdodCk7Cgog
ICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNjaWVudGlmaWMgPSBmbXRmbGFncyhfX2lvc19mbGFn
czo6X1Nfc2NpZW50aWZpYyk7CgoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93YmFzZSA9
IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93YmFzZSk7CgoKICAgIHN0YXRpYyBjb25zdCBm
bXRmbGFncyBzaG93cG9pbnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3BvaW50KTsK
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvcyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz
OjpfU19zaG93cG9zKTsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2tpcHdzID0gZm10Zmxh
Z3MoX19pb3NfZmxhZ3M6Ol9TX3NraXB3cyk7CgogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVu
aXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdW5pdGJ1Zik7CgoKICAgIHN0YXRpYyBj
b25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdXBwZXJj
YXNlKTsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYWRqdXN0ZmllbGQgPSBmbXRmbGFncyhf
X2lvc19mbGFnczo6X1NfYWRqdXN0ZmllbGQpOwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBi
YXNlZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYmFzZWZpZWxkKTsKCiAgICBzdGF0
aWMgY29uc3QgZm10ZmxhZ3MgZmxvYXRmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19m
bG9hdGZpZWxkKTsKIyAyNjcgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9i
aXRzL2lvc19iYXNlLmgiIDMKICAgIHR5cGVkZWYgX0lvc19Jb3N0YXRlIGlvc3RhdGU7CgoKICAg
IHN0YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2Jh
ZGJpdCk7CgogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9mYml0ID0gaW9zdGF0ZShfX2lvc19m
bGFnczo6X1NfZW9mYml0KTsKCgoKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGZhaWxiaXQgPSBp
b3N0YXRlKF9faW9zX2ZsYWdzOjpfU19mYWlsYml0KTsKCiAgICBzdGF0aWMgY29uc3QgaW9zdGF0
ZSBnb29kYml0ID0gaW9zdGF0ZSgwKTsKIyAyOTQgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9iaXRzL2lvc19iYXNlLmgiIDMKICAgIHR5cGVkZWYgX0lvc19PcGVubW9kZSBv
cGVubW9kZTsKCiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXBwID0gb3Blbm1vZGUoX19pb3Nf
ZmxhZ3M6Ol9TX2FwcCk7CgogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGF0ZSA9IG9wZW5tb2Rl
KF9faW9zX2ZsYWdzOjpfU19hdGUpOwoKCgoKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBiaW5h
cnkgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsKCiAgICBzdGF0aWMgY29uc3Qgb3Bl
bm1vZGUgaW4gPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfaW4pOwoKICAgIHN0YXRpYyBjb25z
dCBvcGVubW9kZSBvdXQgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nfb3V0KTsKCiAgICBzdGF0
aWMgY29uc3Qgb3Blbm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfdHJ1bmMp
OwojIDMyMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvaW9zX2Jh
c2UuaCIgMwogICAgdHlwZWRlZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsKCiAgICBzdGF0aWMgY29u
c3Qgc2Vla2RpciBiZWcgPSBzZWVrZGlyKDApOwoKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGN1
ciA9IHNlZWtkaXIoMSk7CgogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgZW5kID0gc2Vla2Rpcigy
KTsKIyAzNDMgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2lvc19i
YXNlLmgiIDMKICAgIGVudW0gZXZlbnQKICAgIHsKICAgICAgZXJhc2VfZXZlbnQsCiAgICAgIGlt
YnVlX2V2ZW50LAogICAgICBjb3B5Zm10X2V2ZW50CiAgICB9OwoKCgoKICAgIHR5cGVkZWYgdm9p
ZCAoKmV2ZW50X2NhbGxiYWNrKSAoZXZlbnQsIGlvc19iYXNlJiwgaW50KTsKCgoKCiAgICB2b2lk
CiAgICByZWdpc3Rlcl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRleCk7
CgogIHByb3RlY3RlZDoKCgoKCgoKICAgIHN0cmVhbXNpemUgX01fcHJlY2lzaW9uOwogICAgc3Ry
ZWFtc2l6ZSBfTV93aWR0aDsKICAgIGZtdGZsYWdzIF9NX2ZsYWdzOwogICAgaW9zdGF0ZSBfTV9l
eGNlcHRpb247CiAgICBpb3N0YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsKCgoKCiAgICBzdHJ1Y3Qg
X0NhbGxiYWNrX2xpc3QKICAgIHsKCiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0OwogICAg
ICBpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX01fZm47CiAgICAgIGludCBfTV9pbmRleDsKICAg
ICAgX0F0b21pY193b3JkIF9NX3JlZmNvdW50OwoKICAgICAgX0NhbGxiYWNrX2xpc3QoaW9zX2Jh
c2U6OmV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4LAogICAgICAgICAgICAgICAgICAg
ICBfQ2FsbGJhY2tfbGlzdCogX19jYikKICAgICAgOiBfTV9uZXh0KF9fY2IpLCBfTV9mbihfX2Zu
KSwgX01faW5kZXgoX19pbmRleCksIF9NX3JlZmNvdW50KDApIHsgfQoKICAgICAgdm9pZAogICAg
ICBfTV9hZGRfcmVmZXJlbmNlKCkgeyBfX2F0b21pY19hZGQoJl9NX3JlZmNvdW50LCAxKTsgfQoK
CiAgICAgIGludAogICAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgeyByZXR1cm4gX19leGNoYW5n
ZV9hbmRfYWRkKCZfTV9yZWZjb3VudCwgLTEpOyB9CiAgICB9OwoKICAgICBfQ2FsbGJhY2tfbGlz
dCogX01fY2FsbGJhY2tzOwoKICAgIHZvaWQKICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9f
ZXYpIHRocm93KCk7CgogICAgdm9pZAogICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7CgoK
ICAgIHN0cnVjdCBfV29yZHMKICAgIHsKICAgICAgdm9pZCogX01fcHdvcmQ7CiAgICAgIGxvbmcg
X01faXdvcmQ7CiAgICAgIF9Xb3JkcygpIDogX01fcHdvcmQoMCksIF9NX2l3b3JkKDApIHsgfQog
ICAgfTsKCgogICAgX1dvcmRzIF9NX3dvcmRfemVybzsKCgogICAgc3RhdGljIGNvbnN0IGludCBf
U19sb2NhbF93b3JkX3NpemUgPSA4OwogICAgX1dvcmRzIF9NX2xvY2FsX3dvcmRbX1NfbG9jYWxf
d29yZF9zaXplXTsKCgogICAgaW50IF9NX3dvcmRfc2l6ZTsKICAgIF9Xb3JkcyogX01fd29yZDsK
CiAgICBfV29yZHMmCiAgICBfTV9ncm93X3dvcmRzKGludCBfX2luZGV4KTsKCgogICAgbG9jYWxl
IF9NX2lvc19sb2NhbGU7CgogICAgdm9pZAogICAgX01faW5pdCgpOwoKICBwdWJsaWM6CgoKCgoK
ICAgIGNsYXNzIEluaXQKICAgIHsKICAgICAgZnJpZW5kIGNsYXNzIGlvc19iYXNlOwogICAgcHVi
bGljOgogICAgICBJbml0KCk7CiAgICAgIH5Jbml0KCk7CgogICAgICBzdGF0aWMgdm9pZAogICAg
ICBfU19pb3NfY3JlYXRlKGJvb2wgX19zeW5jKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9T
X2lvc19kZXN0cm95KCk7CgogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIGludCBfU19pb3NfYmFz
ZV9pbml0OwogICAgICBzdGF0aWMgYm9vbCBfU19zeW5jZWRfd2l0aF9zdGRpbzsKICAgIH07CgoK
CgoKCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gX01fZmxh
Z3M7IH0KIyA0NzIgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2lv
c19iYXNlLmgiIDMKICAgIGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRm
bCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3Mg
PSBfX2ZtdGZsOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CiMgNDg4ICIvc3BhY2Uvc25iL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9pb3NfYmFzZS5oIiAzCiAgICBpbmxpbmUgZm10
ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19v
bGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgfD0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9f
b2xkOwogICAgfQojIDUwNSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvaW9zX2Jhc2UuaCIgMwogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZtdGZsYWdzIF9f
Zm10ZmwsIGZtdGZsYWdzIF9fbWFzaykKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9m
bGFnczsKICAgICAgX01fZmxhZ3MgJj0gfl9fbWFzazsKICAgICAgX01fZmxhZ3MgfD0gKF9fZm10
ZmwgJiBfX21hc2spOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgoKCgoKCgogICAgaW5saW5l
IHZvaWQKICAgIHVuc2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZmxhZ3MgJj0gfl9fbWFzazsg
fQojIDUzMiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvaW9zX2Jh
c2UuaCIgMwogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbigpIGNvbnN0IHsgcmV0
dXJuIF9NX3ByZWNpc2lvbjsgfQoKCgoKCgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNp
c2lvbihzdHJlYW1zaXplIF9fcHJlYykKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9N
X3ByZWNpc2lvbjsKICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOwogICAgICByZXR1cm4gX19v
bGQ7CiAgICB9CgoKCgoKCgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gX01fd2lkdGg7IH0KCgoKCgoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3aWR0
aChzdHJlYW1zaXplIF9fd2lkZSkKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3dp
ZHRoOwogICAgICBfTV93aWR0aCA9IF9fd2lkZTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoj
IDU4MSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvaW9zX2Jhc2Uu
aCIgMwogICAgc3RhdGljIGJvb2wKICAgIHN5bmNfd2l0aF9zdGRpbyhib29sIF9fc3luYyA9IHRy
dWUpOwojIDU5MyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvaW9z
X2Jhc2UuaCIgMwogICAgbG9jYWxlCiAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKIyA2
MDQgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2lvc19iYXNlLmgi
IDMKICAgIGlubGluZSBsb2NhbGUKICAgIGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19s
b2NhbGU7IH0KCgoKCgogICAgc3RhdGljIGludAogICAgeGFsbG9jKCkgdGhyb3coKTsKCgoKCiAg
ICBpbmxpbmUgbG9uZyYKICAgIGl3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9f
d29yZCA9IChfX2l4IDwgX01fd29yZF9zaXplKQogICAgICAgICAgICAgICAgICAgICAgICA/IF9N
X3dvcmRbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9N
X2l3b3JkOwogICAgfQoKCgoKICAgIGlubGluZSB2b2lkKiYKICAgIHB3b3JkKGludCBfX2l4KQog
ICAgewogICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4IDwgX01fd29yZF9zaXplKQogICAgICAg
ICAgICAgICAgICAgICAgICA/IF9NX3dvcmRbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOwog
ICAgICByZXR1cm4gX193b3JkLl9NX3B3b3JkOwogICAgfQoKCgoKCgogICAgdmlydHVhbCB+aW9z
X2Jhc2UoKTsKCiAgcHJvdGVjdGVkOgogICAgaW9zX2Jhc2UoKTsKCgoKICBwcml2YXRlOgogICAg
aW9zX2Jhc2UoY29uc3QgaW9zX2Jhc2UmKTsKCiAgICBpb3NfYmFzZSYKICAgIG9wZXJhdG9yPShj
b25zdCBpb3NfYmFzZSYpOwoKICB9OwoKCgogIGlubGluZSBpb3NfYmFzZSYKICBib29sYWxwaGEo
aW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhh
KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIG5vYm9vbGFs
cGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9v
bGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIHNo
b3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNo
b3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIG5v
c2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNl
OjpzaG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYK
ICBzaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFz
ZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNl
JgogIG5vc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihp
b3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlv
c19iYXNlJgogIHNob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihp
b3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3Nf
YmFzZSYKICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRm
KGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlv
c19iYXNlJgogIHNraXB3cyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlv
c19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jh
c2UmCiAgbm9za2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlv
c19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jh
c2UmCiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z
X2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3Nf
YmFzZSYKICBub3VwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNl
dGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGlu
ZSBpb3NfYmFzZSYKICB1bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5z
ZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGlu
ZSBpb3NfYmFzZSYKICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNl
LnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKCiAg
aW5saW5lIGlvc19iYXNlJgogIGludGVybmFsKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9f
YmFzZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAg
ICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBsZWZ0KGlvc19iYXNl
JiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmxlZnQsIGlvc19iYXNlOjph
ZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYK
ICByaWdodChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpy
aWdodCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCgog
IGlubGluZSBpb3NfYmFzZSYKICBkZWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu
c2V0Zihpb3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGhleChpb3NfYmFzZSYgX19iYXNlKQogIHsK
ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpoZXgsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAg
cmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgb2N0KGlvc19iYXNlJiBf
X2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2Vm
aWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgZml4
ZWQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Zml4ZWQs
IGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5l
IGlvc19iYXNlJgogIHNjaWVudGlmaWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu
c2V0Zihpb3NfYmFzZTo6c2NpZW50aWZpYywgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0
dXJuIF9fYmFzZTsKICB9Cgp9CiMgNTAgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9pb3MiIDIgMwojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9z
dHJlYW1idWYiIDEgMwojIDQ0ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
c3RyZWFtYnVmIiAzCgoKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9z
dHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfaW9zLAogICAgICAgICAgICAg
ICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAg
ICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0
KTsKIyAxMjQgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zdHJlYW1idWYi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz
cyBiYXNpY19zdHJlYW1idWYKICAgIHsKICAgIHB1YmxpYzoKCgoKCgoKICAgICAgdHlwZWRlZiBf
Q2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiMgMTQ3ICIvc3Bh
Y2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvc3RyZWFtYnVmIiAzCiAgICAgIHR5cGVk
ZWYgY3R5cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3Ry
ZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnN0YXRlX3R5cGUgX19zdGF0ZV90eXBlOwoKCiAg
ICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAg
IGZyaWVuZCBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAg
ICBmcmllbmQgY2xhc3MgYmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAg
ICAgZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlw
ZT47CiAgICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJh
aXRzX3R5cGU+OwoKICAgICAgZnJpZW5kIHN0cmVhbXNpemUKICAgICAgX19jb3B5X3N0cmVhbWJ1
ZnM8PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4mIF9faW9zLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbixfX3N0cmVhbWJ1Zl90eXBl
KiBfX3Nib3V0KTsKCiAgICBwcm90ZWN0ZWQ6CiMgMTcxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvc3RyZWFtYnVmIiAzCiAgICAgIGNoYXJfdHlwZSogX01fYnVmOwoKCgoK
CgogICAgICBzaXplX3QgX01fYnVmX3NpemU7CgoKCgoKCiAgICAgIHNpemVfdCBfTV9idWZfc2l6
ZV9vcHQ7CgoKCgoKCgogICAgICBib29sIF9NX2J1Zl91bmlmaWVkOwojIDIwNSAiL3NwYWNlL3Nu
Yi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmVhbWJ1ZiIgMwogICAgICBjaGFyX3R5cGUq
IF9NX2luX2JlZzsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9jdXI7CiAgICAgIGNoYXJfdHlwZSog
X01faW5fZW5kOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9iZWc7CiAgICAgIGNoYXJfdHlwZSog
X01fb3V0X2N1cjsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfZW5kOwoKCgoKCgoKICAgICAgaW9z
X2Jhc2U6Om9wZW5tb2RlIF9NX21vZGU7CgoKCgoKCiAgICAgIGxvY2FsZSBfTV9idWZfbG9jYWxl
OwoKCgoKCgogICAgICBib29sIF9NX2J1Zl9sb2NhbGVfaW5pdDsKIyAyNDUgIi9zcGFjZS9zbmIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zdHJlYW1idWYiIDMKICAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBfU19wYmFja19zaXplID0gMTsKICAgICAgY2hhcl90eXBlIF9NX3BiYWNrW19TX3Bi
YWNrX3NpemVdOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOwogICAgICBjaGFy
X3R5cGUqIF9NX3BiYWNrX2VuZF9zYXZlOwogICAgICBib29sIF9NX3BiYWNrX2luaXQ7CgoKCgoK
CgogICAgICBmcG9zPF9fc3RhdGVfdHlwZT4gX01fcG9zOwoKCgoKICAgICAgdm9pZAogICAgICBf
TV9wYmFja19jcmVhdGUoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9wYmFja19pbml0KQogICAg
ICAgICAgewogICAgICAgICAgICBzaXplX3QgX19kaXN0ID0gX01faW5fZW5kIC0gX01faW5fY3Vy
OwogICAgICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX1NfcGJhY2tfc2l6ZSwgX19kaXN0KTsK
ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJhY2ssIF9NX2luX2N1ciwgX19sZW4p
OwogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9NX2luX2N1cjsKICAgICAgICAgICAg
X01fcGJhY2tfZW5kX3NhdmUgPSBfTV9pbl9lbmQ7CiAgICAgICAgICAgIHRoaXMtPnNldGcoX01f
cGJhY2ssIF9NX3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tf
aW5pdCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIHZvaWQKICAgICAgX01f
cGJhY2tfZGVzdHJveSgpCiAgICAgIHsKICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAg
ICAgIHsKCiAgICAgICAgICAgIHNpemVfdCBfX29mZl9jdXIgPSBfTV9pbl9jdXIgLSBfTV9wYmFj
azsKCgogICAgICAgICAgICBzaXplX3QgX19vZmZfZW5kID0gMDsKICAgICAgICAgICAgc2l6ZV90
IF9fcGJhY2tfbGVuID0gX01faW5fZW5kIC0gX01fcGJhY2s7CiAgICAgICAgICAgIHNpemVfdCBf
X3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSBfTV9idWY7CiAgICAgICAgICAgIGlmIChf
X3BiYWNrX2xlbiA+IF9fc2F2ZV9sZW4pCiAgICAgICAgICAgICAgX19vZmZfZW5kID0gX19wYmFj
a19sZW4gLSBfX3NhdmVfbGVuOwoKICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX3Bi
YWNrX2N1cl9zYXZlICsgX19vZmZfY3VyLAogICAgICAgICAgICAgICAgICAgICAgIF9NX3BiYWNr
X2VuZF9zYXZlICsgX19vZmZfZW5kKTsKICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBf
X251bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX19udWxsOwogICAgICAgICAg
ICBfTV9wYmFja19pbml0ID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgIH0KCgoKICAgICAgdm9p
ZAogICAgICBfTV9pbl9jdXJfbW92ZShvZmZfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBib29s
IF9fdGVzdG91dCA9IF9NX291dF9jdXI7CiAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAg
ICBpZiAoX190ZXN0b3V0ICYmIF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01fb3V0X2N1ciAr
PSBfX247CiAgICAgIH0KIyAzMjIgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9zdHJlYW1idWYiIDMKICAgICAgdm9pZAogICAgICBfTV9vdXRfY3VyX21vdmUob2ZmX3R5cGUg
X19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2luX2N1cjsKCiAgICAgICAg
X01fb3V0X2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVzdGluICYmIF9NX2J1Zl91bmlmaWVk
KQogICAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAoX01fb3V0X2N1ciA+IF9N
X291dF9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX291dF9lbmQgPSBfTV9vdXRfY3Vy
OwoKICAgICAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgICAgIF9NX2luX2VuZCArPSBf
X247CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIG9mZl90eXBlCiAgICAgIF9NX291dF9i
dWZfc2l6ZSgpCiAgICAgIHsKICAgICAgICBvZmZfdHlwZSBfX3JldCA9IDA7CiAgICAgICAgaWYg
KF9NX291dF9jdXIpCiAgICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3V0X2JlZyA9PSBf
TV9idWYpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnICsgX01fYnVmX3NpemUgLSBf
TV9vdXRfY3VyOwoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0
X2VuZCAtIF9NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAg
ICB9CgogIHB1YmxpYzoKCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX3N0cmVhbWJ1ZigpCiAg
ICAgIHsKICAgICAgICBfTV9idWZfdW5pZmllZCA9IGZhbHNlOwogICAgICAgIF9NX2J1Zl9zaXpl
ID0gMDsKICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSAwOwogICAgICAgIF9NX21vZGUgPSBpb3Nf
YmFzZTo6b3Blbm1vZGUoMCk7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gZmFsc2U7CiAg
ICAgIH0KIyAzNzggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zdHJlYW1i
dWYiIDMKICAgICAgbG9jYWxlCiAgICAgIHB1YmltYnVlKGNvbnN0IGxvY2FsZSAmX19sb2MpCiAg
ICAgIHsKICAgICAgICBsb2NhbGUgX190bXAodGhpcy0+Z2V0bG9jKCkpOwogICAgICAgIHRoaXMt
PmltYnVlKF9fbG9jKTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KIyAzOTQgIi9zcGFj
ZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zdHJlYW1idWYiIDMKICAgICAgbG9jYWxl
CiAgICAgIGdldGxvYygpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX01fYnVmX2xvY2FsZV9p
bml0KQogICAgICAgICAgcmV0dXJuIF9NX2J1Zl9sb2NhbGU7CiAgICAgICAgZWxzZQogICAgICAg
ICAgcmV0dXJuIGxvY2FsZSgpOwogICAgICB9CiMgNDEyICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvc3RyZWFtYnVmIiAzCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAg
IHB1YnNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJu
IHRoaXMtPnNldGJ1ZihfX3MsIF9fbik7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtv
ZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAg
ICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6
b3V0KQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBfX3dheSwgX19tb2RlKTsg
fQoKICAgICAgcG9zX3R5cGUKICAgICAgcHVic2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAogICAgICAg
ICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3Nf
YmFzZTo6b3V0KQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0K
CiAgICAgIGludAogICAgICBwdWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9CiMgNDM5
ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvc3RyZWFtYnVmIiAzCiAgICAg
IHN0cmVhbXNpemUKICAgICAgaW5fYXZhaWwoKQogICAgICB7CiAgICAgICAgc3RyZWFtc2l6ZSBf
X3JldDsKICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAg
ICAgICAgIHsKICAgICAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgc2l6ZV90IF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9N
X3BiYWNrX2N1cl9zYXZlOwogICAgICAgICAgICAgICAgc2l6ZV90IF9fcGJhY2tfbGVuID0gX01f
aW5fY3VyIC0gX01fcGJhY2s7CiAgICAgICAgICAgICAgICBfX3JldCA9IF9fc2F2ZV9sZW4gLSBf
X3BiYWNrX2xlbjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICBfX3JldCA9IHRoaXMtPmVncHRyKCkgLSB0aGlzLT5ncHRyKCk7CiAgICAgICAgICB9CiAgICAg
ICAgZWxzZQogICAgICAgICAgX19yZXQgPSB0aGlzLT5zaG93bWFueWMoKTsKICAgICAgICByZXR1
cm4gX19yZXQ7CiAgICAgIH0KIyA0NjYgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9zdHJlYW1idWYiIDMKICAgICAgaW50X3R5cGUKICAgICAgc25leHRjKCkKICAgICAgewog
ICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIHJldHVy
biAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKHRoaXMtPnNidW1wYygpLCBfX2VvZikKICAgICAg
ICAgICAgICAgID8gX19lb2YgOiB0aGlzLT5zZ2V0YygpKTsKICAgICAgfQojIDQ4MiAiL3NwYWNl
L3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmVhbWJ1ZiIgMwogICAgICBpbnRfdHlw
ZQogICAgICBzYnVtcGMoKTsKIyA0OTMgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9zdHJlYW1idWYiIDMKICAgICAgaW50X3R5cGUKICAgICAgc2dldGMoKQogICAgICB7CiAg
ICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIg
PCBfTV9pbl9lbmQpCiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgq
KHRoaXMtPmdwdHIoKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+dW5k
ZXJmbG93KCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CiMgNTEyICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvc3RyZWFtYnVmIiAzCiAgICAgIHN0cmVhbXNpemUK
ICAgICAgc2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVy
biB0aGlzLT54c2dldG4oX19zLCBfX24pOyB9CiMgNTI2ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvc3RyZWFtYnVmIiAzCiAgICAgIGludF90eXBlCiAgICAgIHNwdXRiYWNr
YyhjaGFyX3R5cGUgX19jKTsKIyA1MzggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9zdHJlYW1idWYiIDMKICAgICAgaW50X3R5cGUKICAgICAgc3VuZ2V0YygpOwojIDU1NCAi
L3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmVhbWJ1ZiIgMwogICAgICBp
bnRfdHlwZQogICAgICBzcHV0YyhjaGFyX3R5cGUgX19jKTsKIyA1NjggIi9zcGFjZS9zbmIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zdHJlYW1idWYiIDMKICAgICAgc3RyZWFtc2l6ZQogICAg
ICBzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0
dXJuIHRoaXMtPnhzcHV0bihfX3MsIF9fbik7IH0KCiAgICBwcm90ZWN0ZWQ6CiMgNTgyICIvc3Bh
Y2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvc3RyZWFtYnVmIiAzCiAgICAgIGJhc2lj
X3N0cmVhbWJ1ZigpCiAgICAgIDogX01fYnVmKF9fbnVsbCksIF9NX2J1Zl9zaXplKDApLCBfTV9i
dWZfc2l6ZV9vcHQoMTAyNCksCiAgICAgIF9NX2J1Zl91bmlmaWVkKGZhbHNlKSwgX01faW5fYmVn
KDApLCBfTV9pbl9jdXIoMCksIF9NX2luX2VuZCgwKSwKICAgICAgX01fb3V0X2JlZygwKSwgX01f
b3V0X2N1cigwKSwgX01fb3V0X2VuZCgwKSwKICAgICAgX01fbW9kZShpb3NfYmFzZTo6b3Blbm1v
ZGUoMCkpLCBfTV9idWZfbG9jYWxlKGxvY2FsZSgpKSwKICAgICAgX01fYnVmX2xvY2FsZV9pbml0
KGZhbHNlKSwgX01fcGJhY2tfY3VyX3NhdmUoMCksIF9NX3BiYWNrX2VuZF9zYXZlKDApLAogICAg
ICBfTV9wYmFja19pbml0KGZhbHNlKQogICAgICB7IH0KIyA2MDMgIi9zcGFjZS9zbmIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9zdHJlYW1idWYiIDMKICAgICAgY2hhcl90eXBlKgogICAgICBl
YmFjaygpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgogICAg
ICBncHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAg
ICAgIGVncHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fZW5kOyB9CiMgNjE5ICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvc3RyZWFtYnVmIiAzCiAgICAgIHZvaWQKICAgICAg
Z2J1bXAoaW50IF9fbikgeyBfTV9pbl9jdXIgKz0gX19uOyB9CiMgNjMwICIvc3BhY2Uvc25iL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvc3RyZWFtYnVmIiAzCiAgICAgIHZvaWQKICAgICAgc2V0
ZyhjaGFyX3R5cGUqIF9fZ2JlZywgY2hhcl90eXBlKiBfX2duZXh0LCBjaGFyX3R5cGUqIF9fZ2Vu
ZCkKICAgICAgewogICAgICAgIF9NX2luX2JlZyA9IF9fZ2JlZzsKICAgICAgICBfTV9pbl9jdXIg
PSBfX2duZXh0OwogICAgICAgIF9NX2luX2VuZCA9IF9fZ2VuZDsKICAgICAgICBpZiAoIShfTV9t
b2RlICYgaW9zX2Jhc2U6OmluKSAmJiBfX2diZWcgJiYgX19nbmV4dCAmJiBfX2dlbmQpCiAgICAg
ICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjppbjsKICAgICAgfQojIDY1MiAiL3Nw
YWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmVhbWJ1ZiIgMwogICAgICBjaGFy
X3R5cGUqCiAgICAgIHBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2JlZzsgfQoKICAgICAg
Y2hhcl90eXBlKgogICAgICBwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2N1cjsgfQoKICAg
ICAgY2hhcl90eXBlKgogICAgICBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9lbmQ7IH0K
IyA2NjggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zdHJlYW1idWYiIDMK
ICAgICAgdm9pZAogICAgICBwYnVtcChpbnQgX19uKSB7IF9NX291dF9jdXIgKz0gX19uOyB9CiMg
Njc4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvc3RyZWFtYnVmIiAzCiAg
ICAgIHZvaWQKICAgICAgc2V0cChjaGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBlKiBfX3BlbmQp
CiAgICAgIHsKICAgICAgICBfTV9vdXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJlZzsKICAgICAg
ICBfTV9vdXRfZW5kID0gX19wZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6
b3V0KSAmJiBfX3BiZWcgJiYgX19wZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBp
b3NfYmFzZTo6b3V0OwogICAgICB9CiMgNzAwICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvc3RyZWFtYnVmIiAzCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBpbWJ1ZShjb25z
dCBsb2NhbGUmIF9fbG9jKQogICAgICB7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1
ZTsKICAgICAgICBpZiAoX01fYnVmX2xvY2FsZSAhPSBfX2xvYykKICAgICAgICAgIF9NX2J1Zl9s
b2NhbGUgPSBfX2xvYzsKICAgICAgfQojIDcxOSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL3N0cmVhbWJ1ZiIgMwogICAgICB2aXJ0dWFsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFy
X3R5cGUsX1RyYWl0cz4qCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqLCBzdHJlYW1zaXplKQogICAg
ICB7IHJldHVybiB0aGlzOyB9CiMgNzMwICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvc3RyZWFtYnVmIiAzCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla29mZihv
ZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5t
b2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5
cGUob2ZmX3R5cGUoLTEpKTsgfQojIDc0MiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4zL3N0cmVhbWJ1ZiIgMwogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtwb3Mo
cG9zX3R5cGUsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6Omlu
IHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsg
fQojIDc1NSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmVhbWJ1ZiIg
MwogICAgICB2aXJ0dWFsIGludAogICAgICBzeW5jKCkgeyByZXR1cm4gMDsgfQojIDc3NyAiL3Nw
YWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmVhbWJ1ZiIgMwogICAgICB2aXJ0
dWFsIHN0cmVhbXNpemUKICAgICAgc2hvd21hbnljKCkgeyByZXR1cm4gMDsgfQojIDc5MyAiL3Nw
YWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmVhbWJ1ZiIgMwogICAgICB2aXJ0
dWFsIHN0cmVhbXNpemUKICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f
bik7CiMgODE1ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvc3RyZWFtYnVm
IiAzCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCkKICAgICAgeyByZXR1
cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CiMgODI4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvc3RyZWFtYnVmIiAzCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdWZs
b3coKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7
CiAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUodGhpcy0+
dW5kZXJmbG93KCksIF9fcmV0KTsKICAgICAgICBib29sIF9fdGVzdHBlbmRpbmcgPSBfTV9pbl9j
dXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kOwogICAgICAgIGlmICghX190ZXN0ZW9mICYmIF9f
dGVzdHBlbmRpbmcpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6
OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAgICAgICArK19NX2luX2N1cjsKICAgICAg
ICAgICAgaWYgKF9NX2J1Zl91bmlmaWVkICYmIF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAg
ICAgICAgICAgICsrX01fb3V0X2N1cjsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7
CiAgICAgIH0KIyA4NTQgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zdHJl
YW1idWYiIDMKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBwYmFja2ZhaWwoaW50X3R5cGUg
PSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsg
fQojIDg3MiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmVhbWJ1ZiIg
MwogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbik7CiMgODk3ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvc3RyZWFtYnVmIiAzCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZs
b3coaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190
eXBlOjplb2YoKTsgfQojIDkyOCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L3N0cmVhbWJ1ZiIgMwogICAgcHJpdmF0ZToKICAgICAgYmFzaWNfc3RyZWFtYnVmKGNvbnN0IF9f
c3RyZWFtYnVmX3R5cGUmKSB7IH07CgogICAgICBfX3N0cmVhbWJ1Zl90eXBlJgogICAgICBvcGVy
YXRvcj0oY29uc3QgX19zdHJlYW1idWZfdHlwZSYpIHsgcmV0dXJuICp0aGlzOyB9OwoKICAgIH07
Cn0KCgoKCgojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
cmVhbWJ1Zi50Y2MiIDEgMwojIDM5ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvYml0cy9zdHJlYW1idWYudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjb25zdCBzaXplX3QKICAgIGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYmFja19zaXplOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIHNidW1wYygpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0Owog
ICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICB7CiAg
ICAgICAgICBjaGFyX3R5cGUgX19jID0gKih0aGlzLT5ncHRyKCkpOwogICAgICAgICAgX01faW5f
Y3VyX21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShf
X2MpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+dWZsb3coKTsK
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAg
ICAgYm9vbCBfX3Rlc3Rwb3MgPSBfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyOwog
ICAgICBib29sIF9fdGVzdG5lID0gX01faW5fY3VyICYmICF0cmFpdHNfdHlwZTo6ZXEoX19jLCB0
aGlzLT5ncHRyKClbLTFdKTsKICAgICAgaWYgKCFfX3Rlc3Rwb3MgfHwgX190ZXN0bmUpCiAgICAg
ICAgX19yZXQgPSB0aGlzLT5wYmFja2ZhaWwodHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykp
OwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOwogICAg
ICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7CiAg
ICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgc3VuZ2V0YygpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAo
X01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cikKICAgICAgICB7CiAgICAgICAgICBf
TV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRf
dHlwZSgqX01faW5fY3VyKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRo
aXMtPnBiYWNrZmFpbCgpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YyhjaGFyX3R5cGUgX19jKQogICAgewogICAgICBp
bnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX291dF9idWZfc2l6ZSgpKQogICAgICAgIHsKICAg
ICAgICAgICpfTV9vdXRfY3VyID0gX19jOwogICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOwog
ICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsKICAgICAgICB9
CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0
b19pbnRfdHlwZShfX2MpKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICB4c2dldG4oY2hhcl90eXBlKiBfX3Ms
IHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAg
d2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2J1Zl9sZW4g
PSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICBpZiAoX19idWZfbGVuID4gMCkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0
OwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5n
KTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3MsIF9NX2luX2N1ciwgX19sZW4p
OwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOwogICAgICAgICAgICAgIF9fcyArPSBfX2xl
bjsKICAgICAgICAgICAgICBfTV9pbl9jdXJfbW92ZShfX2xlbik7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbnRf
dHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOwogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6
OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19zKyssIHRyYWl0c190eXBl
Ojp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAgICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAg
ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICB4c3B1dG4oY29uc3QgY2hh
cl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzdHJlYW1zaXplIF9fcmV0
ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsKICAgICAgICAgIG9mZl90
eXBlIF9fYnVmX2xlbiA9IF9NX291dF9idWZfc2l6ZSgpOwogICAgICAgICAgaWYgKF9fYnVmX2xl
biA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX3JlbWFpbmluZyA9
IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIG9mZl90eXBlIF9fbGVuID0gbWluKF9fYnVmX2xl
biwgX19yZW1haW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX291dF9j
dXIsIF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOwogICAgICAgICAg
ICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoX19sZW4pOwog
ICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRv
X2ludF90eXBlKCpfX3MpKTsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRf
dHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICsrX19yZXQ7CiAgICAgICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2Nv
cHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX19pb3MsCiAgICAgICAg
ICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAog
ICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9f
c2JvdXQpCiAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90
eXBlOwoKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHN0cmVhbXNpemUgX19idWZz
aXplID0gX19zYmluLT5pbl9hdmFpbCgpOwogICAgICBzdHJlYW1zaXplIF9feHRyY3Q7CiAgICAg
IGJvb2wgX190ZXN0cHV0ID0gX19zYm91dC0+X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAg
IHRyeQogICAgICAgIHsKICAgICAgICAgIHdoaWxlIChfX3Rlc3RwdXQgJiYgX19idWZzaXplICE9
IC0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fYnVmc2l6ZSAhPSAwICYmIF9f
c2Jpbi0+Z3B0cigpICE9IF9fbnVsbAogICAgICAgICAgICAgICAgICAmJiBfX3NiaW4tPmdwdHIo
KSArIF9fYnVmc2l6ZSA8PSBfX3NiaW4tPmVncHRyKCkpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgIF9feHRyY3QgPSBfX3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19i
dWZzaXplKTsKICAgICAgICAgICAgICAgICAgX19yZXQgKz0gX194dHJjdDsKICAgICAgICAgICAg
ICAgICAgX19zYmluLT5fTV9pbl9jdXJfbW92ZShfX3h0cmN0KTsKICAgICAgICAgICAgICAgICAg
aWYgKF9feHRyY3QgIT0gX19idWZzaXplKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSA9CiAgICAgICAgICAgICAgICAgICAgX19zYmluLT5f
TV9idWZfc2l6ZV9vcHQgPiAwID8gX19zYmluLT5fTV9idWZfc2l6ZV9vcHQgOiAxOwogICAgICAg
ICAgICAgICAgICBfQ2hhclQqIF9fYnVmID0KICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX19zaXplKSk7CiAg
ICAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX19jaGFyc3JlYWQgPSBfX3NiaW4tPnNnZXRuKF9f
YnVmLCBfX3NpemUpOwogICAgICAgICAgICAgICAgICBfX3h0cmN0ID0gX19zYm91dC0+c3B1dG4o
X19idWYsIF9fY2hhcnNyZWFkKTsKICAgICAgICAgICAgICAgICAgX19yZXQgKz0gX194dHJjdDsK
ICAgICAgICAgICAgICAgICAgaWYgKF9feHRyY3QgIT0gX19jaGFyc3JlYWQpCiAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKF9UcmFp
dHM6OmVxX2ludF90eXBlKF9fc2Jpbi0+c2dldGMoKSwgX1RyYWl0czo6ZW9mKCkpKQogICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFp
bCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkKICAgICAgICB7CiAgICAgICAgICBfX2lvcy5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7
CiAgICAgICAgICBpZiAoKF9faW9zLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpmYWlsYml0KSAh
PSAwKQogICAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAg
IH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPjsKICBl
eHRlcm4gdGVtcGxhdGUKICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2lj
X2lvczxjaGFyPiYsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiosCiAgICAgICAgICAgICAgICAgICAg
ICBiYXNpY19zdHJlYW1idWY8Y2hhcj4qKTsKIyAyNjMgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDMKfQojIDk0MiAiL3NwYWNlL3NuYi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3N0cmVhbWJ1ZiIgMiAzCiMgNTEgIi9zcGFjZS9zbmIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pb3MiIDIgMwojIDEgIi9zcGFjZS9zbmIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX2lvcy5oIiAxIDMKIyAzOSAiL3NwYWNlL3Nu
Yi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvYmFzaWNfaW9zLmgiIDMKCiMgMSAiL3Nw
YWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9y
LmgiIDEgMwojIDQyICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9z
dHJlYW1idWZfaXRlcmF0b3IuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0
b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzOjpvZmZfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCosIF9D
aGFyVCY+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CgoKCgoK
CgogICAgICBtdXRhYmxlIHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBpbnRfdHlwZSBf
TV9jOwoKICAgIHB1YmxpYzoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcigpIHRocm93KCkKICAg
ICAgOiBfTV9zYnVmKDApLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgogICAgICBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1
ZihfX3MucmRidWYoKSksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KCiAgICAgIGlzdHJl
YW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3coKQogICAgICA6IF9NX3Ni
dWYoX19zKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQoKCiAgICAgIGNoYXJfdHlwZQog
ICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6dG9fY2hh
cl90eXBlKF9NX2dldCgpKTsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3Bl
cmF0b3IrKygpCiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190
eXBlOjplb2YoKTsKICAgICAgICBpZiAoX01fc2J1ZiAmJiB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5
cGUoX01fc2J1Zi0+c2J1bXBjKCksIF9fZW9mKSkKICAgICAgICAgIF9NX3NidWYgPSAwOwogICAg
ICAgIGVsc2UKICAgICAgICAgIF9NX2MgPSBfX2VvZjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgIH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAg
ICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK
ICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yIF9fb2xkID0gKnRoaXM7CiAgICAgICAgaWYgKF9N
X3NidWYKICAgICAgICAgICAgJiYgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChfX29sZC5fTV9j
ID0gX01fc2J1Zi0+c2J1bXBjKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19lb2YpKQogICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAgICAgZWxzZQogICAgICAg
ICAgX01fYyA9IF9fZW9mOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCgoKICAgICAg
Ym9vbAogICAgICBlcXVhbChjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yJiBfX2IpIGNvbnN0CiAg
ICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK
ICAgICAgICBib29sIF9fdGhpc2VvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9nZXQo
KSwgX19lb2YpOwogICAgICAgIGJvb2wgX19iZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl
KF9fYi5fTV9nZXQoKSwgX19lb2YpOwogICAgICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVv
ZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7CiAgICAgIH0KCgogICAgcHJpdmF0ZToKICAg
ICAgaW50X3R5cGUKICAgICAgX01fZ2V0KCkgY29uc3QKICAgICAgewogICAgICAgIGNvbnN0IGlu
dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGludF90eXBlIF9fcmV0
ID0gX19lb2Y7CiAgICAgICAgaWYgKF9NX3NidWYpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlm
ICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX2MsIF9fZW9mKSkKICAgICAgICAgICAgICBf
X3JldCA9IF9NX2M7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5
cGU6OmVxX2ludF90eXBlKChfX3JldCA9IF9NX3NidWYtPnNnZXRjKCkpLCBfX2VvZikpCiAgICAg
ICAgICAgICAgICBfTV9zYnVmID0gMDsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7
CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRl
cmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVh
bChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8
X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0
ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19i
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBj
bGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRl
cmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz
X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3Ry
ZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
IG9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1
ZjsKICAgICAgYm9vbCBfTV9mYWlsZWQ7CgogICAgcHVibGljOgogICAgICBpbmxpbmUKICAgICAg
b3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgdGhyb3cgKCkKICAgICAgOiBf
TV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9zdHJl
YW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3cgKCkKICAgICAgOiBfTV9z
YnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYyk7CgogICAgICBvc3RyZWFtYnVmX2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvciooKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9Cgog
ICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAg
b3BlcmF0b3IrKygpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGJvb2wK
ICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBfTV9mYWlsZWQ7IH0K
ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGlubGluZSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPShfQ2hhclQgX19jKQogICAg
ewogICAgICBpZiAoIV9NX2ZhaWxlZCAmJgogICAgICAgICAgX1RyYWl0czo6ZXFfaW50X3R5cGUo
X01fc2J1Zi0+c3B1dGMoX19jKSwgX1RyYWl0czo6ZW9mKCkpKQogICAgICAgIF9NX2ZhaWxlZCA9
IHRydWU7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KfQojIDQxICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9iYXNpY19pb3MuaCIgMiAzCiMgMSAiL3NwYWNlL3Nu
Yi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0
NCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0
cy5oIiAzCgoKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY3djdHlw
ZSIgMSAzCiMgNDggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jd2N0eXBl
IiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMSAzIDQKIyAxMyAiL3Vzci9pbmNs
dWRlL3djdHlwZS5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXdjdHlwZS5oCTEuMTgJOTkvMDgv
MTAgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvaXNvL3djdHlwZV9pc28uaCIgMSAzIDQKIyAyNSAi
L3Vzci9pbmNsdWRlL2lzby93Y3R5cGVfaXNvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpd2N0
eXBlX2lzby5oCTEuMQk5OS8wOC8wOSBTTUkiCgoKCgpleHRlcm4gIkMiIHsKIyA1MSAiL3Vzci9p
bmNsdWRlL2lzby93Y3R5cGVfaXNvLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGludCB3Y3RyYW5z
X3Q7CiMgNjEgIi91c3IvaW5jbHVkZS9pc28vd2N0eXBlX2lzby5oIiAzIDQKZXh0ZXJuIGludCBp
c3dhbG51bSh3aW50X3QpOwpleHRlcm4gaW50IGlzd2FscGhhKHdpbnRfdCk7CmV4dGVybiBpbnQg
aXN3Y250cmwod2ludF90KTsKZXh0ZXJuIGludCBpc3dkaWdpdCh3aW50X3QpOwpleHRlcm4gaW50
IGlzd2dyYXBoKHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3bG93ZXIod2ludF90KTsKZXh0ZXJuIGlu
dCBpc3dwcmludCh3aW50X3QpOwpleHRlcm4gaW50IGlzd3B1bmN0KHdpbnRfdCk7CmV4dGVybiBp
bnQgaXN3c3BhY2Uod2ludF90KTsKZXh0ZXJuIGludCBpc3d1cHBlcih3aW50X3QpOwpleHRlcm4g
aW50IGlzd3hkaWdpdCh3aW50X3QpOwoKZXh0ZXJuIHdpbnRfdCB0b3dsb3dlcih3aW50X3QpOwpl
eHRlcm4gd2ludF90IHRvd3VwcGVyKHdpbnRfdCk7CmV4dGVybiB3Y3RyYW5zX3Qgd2N0cmFucyhj
b25zdCBjaGFyICopOwpleHRlcm4gd2ludF90IHRvd2N0cmFucyh3aW50X3QsIHdjdHJhbnNfdCk7
CmV4dGVybiBpbnQgaXN3Y3R5cGUod2ludF90LCB3Y3R5cGVfdCk7CmV4dGVybiB3Y3R5cGVfdCB3
Y3R5cGUoY29uc3QgY2hhciAqKTsKIyAxMzMgIi91c3IvaW5jbHVkZS9pc28vd2N0eXBlX2lzby5o
IiAzIDQKfQojIDE2ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDIgMyA0CiMgNTAgIi91c3IvaW5j
bHVkZS93Y3R5cGUuaCIgMyA0CmV4dGVybiAiQyIgewojIDYyICIvdXNyL2luY2x1ZGUvd2N0eXBl
LmgiIDMgNApzdHJ1Y3QgX3djdHlwZSB7CiAgICAgICAgd2NoYXJfdCB0bWluOwogICAgICAgIHdj
aGFyX3QgdG1heDsKICAgICAgICB1bnNpZ25lZCBjaGFyICppbmRleDsKICAgICAgICB1bnNpZ25l
ZCBpbnQgKnR5cGU7CiAgICAgICAgd2NoYXJfdCBjbWluOwogICAgICAgIHdjaGFyX3QgY21heDsK
ICAgICAgICB3Y2hhcl90ICpjb2RlOwp9OwojIDgwICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMg
NApleHRlcm4gdW5zaWduZWQgX2lzd2N0eXBlKHdjaGFyX3QsIGludCk7CmV4dGVybiB3Y2hhcl90
IF90cndjdHlwZSh3Y2hhcl90LCBpbnQpOwoKZXh0ZXJuIGludCBpc3Bob25vZ3JhbSh3aW50X3Qp
OwpleHRlcm4gaW50IGlzaWRlb2dyYW0od2ludF90KTsKZXh0ZXJuIGludCBpc2VuZ2xpc2god2lu
dF90KTsKZXh0ZXJuIGludCBpc251bWJlcih3aW50X3QpOwpleHRlcm4gaW50IGlzc3BlY2lhbCh3
aW50X3QpOwojIDEwOCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzIDQKfQojIDUzICIvc3BhY2Uv
c25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY3djdHlwZSIgMiAzCiMgNDcgIi9zcGFjZS9z
bmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCiMg
MSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lvcyIgMSAzCiMgNDggIi9z
cGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9mYWNldHMuaCIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9fcGFkOwoKCgojIDEgIi9zcGFjZS9zbmIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zcGFyYy1zdW4tc29sYXJpczIuOS9iaXRzL2N0eXBlX2Jh
c2UuaCIgMSAzCiMgMzYgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9zcGFy
Yy1zdW4tc29sYXJpczIuOS9iaXRzL2N0eXBlX2Jhc2UuaCIgMwogIHN0cnVjdCBjdHlwZV9iYXNl
CiAgewoKICAgIHR5cGVkZWYgY29uc3QgaW50KiBfX3RvX3R5cGU7CgoKCiAgICB0eXBlZGVmIHVu
c2lnbmVkIGludCBtYXNrOwogICAgc3RhdGljIGNvbnN0IG1hc2sgdXBwZXIgPSAxIDw8IDA7CiAg
ICBzdGF0aWMgY29uc3QgbWFzayBsb3dlciA9IDEgPDwgMTsKICAgIHN0YXRpYyBjb25zdCBtYXNr
IGFscGhhID0gMSA8PCAyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgZGlnaXQgPSAxIDw8IDM7CiAg
ICBzdGF0aWMgY29uc3QgbWFzayB4ZGlnaXQgPSAxIDw8IDQ7CiAgICBzdGF0aWMgY29uc3QgbWFz
ayBzcGFjZSA9IDEgPDwgNTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHByaW50ID0gMSA8PCA2Owog
ICAgc3RhdGljIGNvbnN0IG1hc2sgZ3JhcGggPSAxIDw8IDc7CiAgICBzdGF0aWMgY29uc3QgbWFz
ayBjbnRybCA9IDEgPDwgODsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHB1bmN0ID0gMSA8PCA5Owog
ICAgc3RhdGljIGNvbnN0IG1hc2sgYWxudW0gPSAxIDw8IDEwOwogIH07CiMgNjQgIi9zcGFjZS9z
bmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX2N0eXBlX2Fic3RyYWN0X2Jh
c2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0eXBlX2Jhc2UKICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGJvb2wKICAgICAg
aXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2lzKF9fbSwgX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBpcyhjb25zdCBj
aGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSAqX19oaSwgbWFzayAqX192ZWMpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsgfQoKICAgICAg
Y29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUq
IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAg
ICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJf
dHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9ub3QoX19tLCBf
X2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlIF9f
YykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2MpOyB9CgogICAgICBj
b25zdCBjaGFyX3R5cGUqCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFy
X3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19sbywg
X19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19jKTsgfQoKICAgICAgY29uc3Qg
Y2hhcl90eXBlKgogICAgICB0b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBl
KiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fbG8sIF9faGkp
OyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXIqCiAgICAgIHdp
ZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX190bykg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywgX19oaSwgX190byk7IH0K
CiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQoKICAg
ICAgY29uc3QgY2hhcl90eXBlKgogICAgICBuYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBj
b25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciAq
X190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9f
ZGZhdWx0LCBfX3RvKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19j
dHlwZV9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKTogbG9jYWxlOjpmYWNldChfX3Jl
ZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jdHlwZV9hYnN0cmFjdF9iYXNlKCkgeyB9
CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2Mp
IGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhj
b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAg
bWFzayogX192ZWMpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgog
ICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJf
dHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
dCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlw
ZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3Rv
dXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsK
CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25z
dCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihj
aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAg
dmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3QgPSAwOwoKICAgICAg
dmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25z
dCBjaGFyKiBfX2hpLAogICAgICAgICAgICAgICBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QgPSAw
OwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19k
ZmF1bHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk
b19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAg
ICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdCA9IDA7CiAg
ICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGUgOiBwdWJs
aWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjdHlwZTo6
bWFzayBtYXNrOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAog
ICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0No
YXJUPihfX3JlZnMpIHsgfQoKICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlw
ZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUg
X19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhj
b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMo
bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdCht
YXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f
dG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf
X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hh
cl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAg
ZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyIF9fYykgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9f
bG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3Qg
Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBj
aGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjdHlwZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBs
YXRlPD4KICAgIGNsYXNzIGN0eXBlPGNoYXI+IDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFz
ZTxjaGFyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsK
CiAgICBwcm90ZWN0ZWQ6CgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2N0eXBlOwogICAg
ICBib29sIF9NX2RlbDsKICAgICAgX190b190eXBlIF9NX3RvdXBwZXI7CiAgICAgIF9fdG9fdHlw
ZSBfTV90b2xvd2VyOwogICAgICBjb25zdCBtYXNrKiBfTV90YWJsZTsKCiAgICBwdWJsaWM6CiAg
ICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHRhYmxl
X3NpemUgPSAxICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEpOwoKICAgICAgZXhwbGlj
aXQKICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxz
ZSwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoX19jX2xv
Y2FsZSBfX2Nsb2MsIGNvbnN0IG1hc2sqIF9fdGFibGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2Us
CiAgICAgICAgICAgIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGlubGluZSBib29sCiAgICAg
IGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioK
ICAgICAgaXMoY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgbWFzayogX192ZWMp
IGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5faXMobWFzayBfX20s
IGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICAgICAgaW5saW5l
IGNvbnN0IGNoYXIqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBj
b25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGNvbnN0IG1hc2sq
CiAgICAgIHRhYmxlKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBfTV90YWJsZTsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IG1hc2sqCiAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpOwoK
ICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBk
b19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy
X3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8s
IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywK
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl
CiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90
eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVu
KGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihj
b25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBf
X2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f
bmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAg
ICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07Cgog
IHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBlPGNo
YXI+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CiMgNDAwICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKIyAxICIvc3BhY2Uvc25iL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvc3BhcmMtc3VuLXNvbGFyaXMyLjkvYml0cy9jdHlwZV9p
bmxpbmUuaCIgMSAzCiMgNDIgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9z
cGFyYy1zdW4tc29sYXJpczIuOS9iaXRzL2N0eXBlX2lubGluZS5oIiAzCiAgYm9vbAogIGN0eXBl
PGNoYXI+OjoKICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0CiAgewogICAgYm9vbCBfX3Jl
dDsKICAgIHN3aXRjaCAoX19tKQogICAgICB7CiAgICAgIGNhc2Ugc3BhY2U6CiAgICAgICAgX19y
ZXQgPSBpc3NwYWNlKF9fYyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgcHJpbnQ6CiAgICAg
ICAgX19yZXQgPSBpc3ByaW50KF9fYyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgY250cmw6
CiAgICAgICAgX19yZXQgPSBpc2NudHJsKF9fYyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2Ug
dXBwZXI6CiAgICAgICAgX19yZXQgPSBpc3VwcGVyKF9fYyk7CiAgICAgICAgYnJlYWs7CiAgICAg
IGNhc2UgbG93ZXI6CiAgICAgICAgX19yZXQgPSBpc2xvd2VyKF9fYyk7CiAgICAgICAgYnJlYWs7
CiAgICAgIGNhc2UgYWxwaGE6CiAgICAgICAgX19yZXQgPSBpc2FscGhhKF9fYyk7CiAgICAgICAg
YnJlYWs7CiAgICAgIGNhc2UgZGlnaXQ6CiAgICAgICAgX19yZXQgPSBpc2RpZ2l0KF9fYyk7CiAg
ICAgICAgYnJlYWs7CiAgICAgIGNhc2UgcHVuY3Q6CiAgICAgICAgX19yZXQgPSBpc3B1bmN0KF9f
Yyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgeGRpZ2l0OgogICAgICAgIF9fcmV0ID0gaXN4
ZGlnaXQoX19jKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBhbG51bToKICAgICAgICBfX3Jl
dCA9IGlzYWxudW0oX19jKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBncmFwaDoKICAgICAg
ICBfX3JldCA9IGlzZ3JhcGgoX19jKTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAg
ICAgICBfX3JldCA9IGZhbHNlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICByZXR1cm4gX19y
ZXQ7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBpcyhjb25zdCBjaGFyKiBf
X2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBfX3ZlYykgY29uc3QKICB7CiAgICBjb25z
dCBpbnQgX19iaXRtYXNrc2l6ZSA9IDExOwogICAgZm9yICg7X19sb3cgPCBfX2hpZ2g7ICsrX192
ZWMsICsrX19sb3cpCiAgICAgIHsKICAgICAgICBtYXNrIF9fbSA9IDA7CiAgICAgICAgaW50IF9f
aSA9IDA7CiAgICAgICAgZm9yICg7X19pIDwgX19iaXRtYXNrc2l6ZTsgKytfX2kpCiAgICAgICAg
ICB7CiAgICAgICAgICAgIG1hc2sgX19iaXQgPSBzdGF0aWNfY2FzdDxtYXNrPigxIDw8IF9faSk7
CiAgICAgICAgICAgIGlmICh0aGlzLT5pcyhfX2JpdCwgKl9fbG93KSkKICAgICAgICAgICAgICBf
X20gfD0gX19iaXQ7CiAgICAgICAgICB9CiAgICAgICAgKl9fdmVjID0gX19tOwogICAgICB9CiAg
ICByZXR1cm4gX19oaWdoOwogIH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nh
bl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29u
c3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2ggJiYgIXRoaXMtPmlzKF9fbSwgKl9fbG93
KSkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9CgogIGNvbnN0IGNoYXIqCiAg
Y3R5cGU8Y2hhcj46OgogIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29u
c3QgY2hhciogX19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCAmJiB0
aGlzLT5pcyhfX20sICpfX2xvdykgIT0gMCkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xv
dzsKICB9CiMgNDAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9s
b2NhbGVfZmFjZXRzLmgiIDIgMwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xh
c3MgY3R5cGVfYnluYW1lIDogcHVibGljIGN0eXBlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5
cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3Rl
Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGVfYnluYW1lKCkgeyB9OwogICAgfTsKCgog
IHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNo
YXIqLCBzaXplX3QgcmVmcyk7CgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTx3Y2hhcl90
Pjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgoKIyAxICIvc3BhY2Uv
c25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9jb2RlY3Z0LmgiIDEgMwojIDQ1ICIv
c3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9jb2RlY3Z0LmgiIDMKCgog
IGNsYXNzIGNvZGVjdnRfYmFzZQogIHsKICBwdWJsaWM6CiAgICBlbnVtIHJlc3VsdAogICAgewog
ICAgICBvaywKICAgICAgcGFydGlhbCwKICAgICAgZXJyb3IsCiAgICAgIG5vY29udgogICAgfTsK
ICB9OwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5U
LCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UKICAg
IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjb2RlY3Z0X2Jhc2UKICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0OwogICAgICB0
eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVy
bl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3RhdGVfdHlwZTsKCgogICAgICByZXN1bHQK
ICAgICAgb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20s
CiAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5
cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlw
ZSogX190b19lbmQsCiAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAg
ICAgewogICAgICAgIHJldHVybiB0aGlzLT5kb19vdXQoX19zdGF0ZSwgX19mcm9tLCBfX2Zyb21f
ZW5kLCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdG8sIF9fdG9f
ZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICByZXN1bHQKICAgICAgdW5zaGlmdChzdGF0
ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5k
LAogICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb191bnNoaWZ0KF9fc3RhdGUsIF9fdG8sX190b19lbmQsX190b19uZXh0KTsg
fQoKICAgICAgcmVzdWx0CiAgICAgIGluKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVy
bl90eXBlKiBfX2Zyb20sCiAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBj
b25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICBpbnRlcm5fdHlwZSogX190
bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4
dCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5kb19pbihfX3N0YXRlLCBfX2Zy
b20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGVuY29k
aW5nKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19lbmNvZGluZygpOyB9
CgogICAgICBib29sCiAgICAgIGFsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX2Fsd2F5c19ub2NvbnYoKTsgfQoKICAgICAgaW50CiAgICAgIGxlbmd0
aChjb25zdCBzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAog
ICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2xlbmd0aChfX3N0YXRlLCBfX2Zyb20sIF9fZW5kLCBf
X21heCk7IH0KCiAgICAgIGludAogICAgICBtYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQogICAg
ICB7IHJldHVybiB0aGlzLT5kb19tYXhfbGVuZ3RoKCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IGV4cGxpY2l0CiAgICAgIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAw
KSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfl9fY29k
ZWN2dF9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19v
dXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg
ICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSom
IF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBl
KiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9
IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9f
c3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBf
X3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1
YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90
eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBj
b25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSog
X190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9f
dG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2Rpbmco
KSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdheXNf
bm9jb252KCkgY29uc3QgdGhyb3coKSA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19s
ZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAg
ICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Qg
PSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93
KCkgPSAwOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUg
X0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0CiAgICA6IHB1Ymxp
YyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3Vs
dDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0
ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgogICAg
cHJvdGVjdGVkOgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2NvZGVjdnQ7CgogICAgcHVi
bGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNv
ZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8
X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPiAoX19yZWZzKSB7IH0KCiAgICAgIGV4cGxpY2l0
CiAgICAgIGNvZGVjdnQoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKSB7IH0KCiAgICAgIHZp
cnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRl
cm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9l
bmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5f
dHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5
cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5z
aGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAg
ICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUs
IGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBl
KiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAg
ICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBp
bnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBk
b19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9f
YWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBk
b19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAg
ICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3co
KTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJu
VCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGxvY2FsZTo6aWQgY29kZWN2dDxfSW50ZXJuVCwgX0V4
dGVyblQsIF9TdGF0ZVQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGNvZGVjdnQ8Y2hh
ciwgY2hhciwgbWJzdGF0ZV90PgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8
Y2hhciwgY2hhciwgbWJzdGF0ZV90PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBj
aGFyIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7CiAgICAgIHR5
cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgcHJvdGVjdGVkOgogICAgICBfX2NfbG9j
YWxlIF9NX2NfbG9jYWxlX2NvZGVjdnQ7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxl
OjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDAp
OwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90
IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2
dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3Rh
dGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5f
dHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAg
ICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAg
ICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3Vs
dAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3Rv
LAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBf
X3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVf
dHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29u
c3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25l
eHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQs
CiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwg
Ym9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1
YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5
cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6
ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgo
KSBjb25zdCB0aHJvdygpOwogIH07CiMgMzM2ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9jb2RlY3Z0LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg
dHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5
bmFtZSA6IHB1YmxpYyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsK
ICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hh
ciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0
ZXJuVCwgX1N0YXRlVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgaWYgKF9NX2NfbG9jYWxlX2Nv
ZGVjdnQgIT0gX1NfY19sb2NhbGUpCiAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2Nf
bG9jYWxlX2NvZGVjdnQpOwogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9j
b2RlY3Z0LCBfX3MpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg
IH5jb2RlY3Z0X2J5bmFtZSgpIHsgfQogICAgfTsKIyA0MjYgIi9zcGFjZS9zbmIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKCiAgY2xhc3MgX19u
dW1fYmFzZQogIHsKICBwcm90ZWN0ZWQ6CgoKICAgIHN0YXRpYyBjb25zdCBjaGFyIF9TX2F0b21z
W107CgogICAgZW51bQogICAgewogICAgICBfTV96ZXJvLAogICAgICBfTV9lID0gX01femVybyAr
IDEwLAogICAgICBfTV9FID0gX01femVybyArIDExLAogICAgICBfTV9zaXplID0gMjEgKyAxCiAg
ICB9OwoKCgogICAgc3RhdGljIGJvb2wKICAgIF9TX2Zvcm1hdF9mbG9hdChjb25zdCBpb3NfYmFz
ZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAgIHN0
cmVhbXNpemUgX19wcmVjKTsKCgogICAgc3RhdGljIHZvaWQKICAgIF9TX2Zvcm1hdF9pbnQoY29u
c3QgaW9zX2Jhc2UmIF9faW8sIGNoYXIqIF9fZnB0ciwgY2hhciBfX21vZCwgY2hhciBfX21vZGwp
OwogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBudW1wdW5jdCA6
IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9D
aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5n
X3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBj
aGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19z
ZXA7CiAgICAgIGNvbnN0IGNoYXIqIF9NX2dyb3VwaW5nOwogICAgICBjb25zdCBjaGFyX3R5cGUq
IF9NX3RydWVuYW1lOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX2ZhbHNlbmFtZTsKCiAgICBw
dWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6
IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoKTsg
fQoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVf
dCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxp
emVfbnVtcHVuY3QoX19jbG9jKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIGRlY2ltYWxfcG9p
bnQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0KCiAg
ICAgIGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAgICAgZ3JvdXBpbmco
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9CgogICAgICBzdHJp
bmdfdHlwZQogICAgICB0cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Ry
dWVuYW1lKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIGZhbHNlbmFtZSgpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZhbHNlbmFtZSgpOyB9CgogICAgcHJvdGVjdGVkOgogICAg
ICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdCgpOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg
ICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9p
bnQ7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rob3VzYW5kc19zZXAoKSBj
b25zdAogICAgICB7IHJldHVybiBfTV90aG91c2FuZHNfc2VwOyB9CgogICAgICB2aXJ0dWFsIHN0
cmluZwogICAgICBkb19ncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5n
OyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3RydWVuYW1lKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gX01fdHJ1ZW5hbWU7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUK
ICAgICAgZG9fZmFsc2VuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZmFsc2VuYW1lOyB9
CgoKICAgICAgdm9pZAogICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19j
bG9jID0gX19udWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxv
Y2FsZTo6aWQgbnVtcHVuY3Q8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPD4KICAgIG51bXB1bmN0
PGNoYXI+Ojp+bnVtcHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8
Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwojIDU1MCAi
L3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVuY3RfYnluYW1l
IDogcHVibGljIG51bXB1bmN0PF9DaGFyVD4KICAgIHsKCiAgICAgIF9fY19sb2NhbGUgX01fY19s
b2NhbGVfbnVtcHVuY3Q7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAg
ICBleHBsaWNpdAogICAgICBudW1wdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3Qg
X19yZWZzID0gMCkKICAgICAgOiBudW1wdW5jdDxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAg
ICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCwgX19zKTsKICAgICAg
ICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9NX2NfbG9jYWxlX251bXB1bmN0KTsKICAgICAgfQoK
ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3RfYnluYW1lKCkKICAg
ICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0KTsgfQogICAgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3Mg
bnVtX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgX19udW1fYmFzZQogICAgewog
ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm
IF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBl
eHBsaWNpdAogICAgICBudW1fZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQo
X19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9f
aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdl
dChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAg
ICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25l
ZCBzaG9ydCYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf
dHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAg
ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWdu
ZWQgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVy
X3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAg
IGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVk
IGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwg
X19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChp
dGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAg
aXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBf
X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywg
X19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4s
IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
dik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgfm51bV9nZXQoKSB7IH0KCiAgICAg
IGl0ZXJfdHlwZQogICAgICBfTV9leHRyYWN0X2Zsb2F0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBp
b3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJp
bmcmIF9feHRyYykgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFjdF9pbnQo
aXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAogICAg
ICAgICAgICAgICAgICAgICBzdHJpbmcmIF9feHRyYywgaW50JiBfX2Jhc2UpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBp
b3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgYm9vbCYpIGNvbnN0OwoKCiAgICAgIHZpcnR1
YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2Um
LCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGxvbmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90
eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQmKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChp
dGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
CiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nJikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVy
X3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGxvbmcgbG9uZyYpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBp
b3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dl
dChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsCiAgICAgICAgICAgICBmbG9hdCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGRvdWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYs
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGxvbmcgZG91YmxlJikgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVy
X3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAg
dm9pZComKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsK
IyA3MjEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9m
YWNldHMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+
CiAgICBjbGFzcyBudW1fcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBfX251bV9i
YXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQg
aWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxv
Y2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90
eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNo
YXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19w
dXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChp
dGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAg
dW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3Ms
IF9fZiwgX19maWxsLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5
cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsg
fQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19m
LCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdikgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0K
CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2Ys
IGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg
cHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAg
ICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChf
X3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJf
dHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICBjb25z
dCB2b2lkKiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwg
X19maWxsLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VmFsdWVUPgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZlcnRfZmxvYXQoaXRlcl90
eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgX19tb2QsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAgX01fY29udmVydF9pbnQo
aXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCwgX1ZhbHVlVCBfX3YpIGNvbnN0OwoK
ICAgICAgaXRlcl90eXBlCiAgICAgIF9NX3dpZGVuX2Zsb2F0KGl0ZXJfdHlwZSwgaW9zX2Jhc2Um
IF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAgICAgICAg
IGludCBfX2xlbikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fd2lkZW5faW50KGl0
ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAg
ICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAg
IF9NX2luc2VydChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAog
ICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3dzLCBpbnQgX19sZW4pIGNvbnN0OwoK
ICAgICAgdmlydHVhbAogICAgICB+bnVtX3B1dCgpIHsgfTsKCiAgICAgIHZpcnR1YWwgaXRlcl90
eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwg
Ym9vbCBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0
ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYs
IGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwg
aXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9f
ZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVk
IGxvbmcgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0
KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19i
YXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90
eXBlIF9fZmlsbCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBudW1fcHV0
PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGNsYXNzIGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu
ZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3RlZDoKCgogICAgICBfX2NfbG9jYWxl
IF9NX2NfbG9jYWxlX2NvbGxhdGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjpp
ZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90IF9fcmVmcyA9IDApCiAg
ICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01fY19sb2NhbGVfY29sbGF0ZSA9
IF9TX2NfbG9jYWxlOyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRlKF9fY19sb2NhbGUg
X19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykK
ICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsg
fQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0No
YXJUKiBfX2hpMSwKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hh
clQqIF9faGkyKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9fbG8xLCBf
X2hpMSwgX19sbzIsIF9faGkyKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJhbnNmb3Jt
KGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb190cmFuc2Zvcm0oX19sbywgX19oaSk7IH0KCiAgICAgIGxvbmcKICAgICAg
aGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQoKCiAgICAgIGludAogICAgICBf
TV9jb21wYXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0OwoKICAgICAgc2l6
ZV90CiAgICAgIF9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3QpIGNv
bnN0OwoKICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGUoKQogICAgICB7
IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KCiAgICAgIHZpcnR1
YWwgaW50CiAgICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJU
KiBfX2hpMSwKICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hh
clQqIF9faGkyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJh
bnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgbG9uZwogICAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3Qg
X0NoYXJUKiBfX2hpKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGxvY2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGlu
dAogICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiwgY29uc3QgY2hhciop
IGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBzaXplX3QKICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3Ry
YW5zZm9ybShjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCkgY29uc3Q7CiMgOTEzICIvc3BhY2Uv
c25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlX2J5bmFtZSA6IHB1Ymxp
YyBjb2xsYXRlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQg
Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBl
OwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBz
aXplX3QgX19yZWZzID0gMCkKICAgICAgOiBjb2xsYXRlPF9DaGFyVD4oX19yZWZzKQogICAgICB7
CiAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xsYXRlKTsKICAgICAg
ICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSwgX19zKTsKICAgICAgfQoK
ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29sbGF0ZV9ieW5hbWUoKSB7IH0K
ICAgIH07CgoKICBjbGFzcyB0aW1lX2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBkYXRlb3Jk
ZXIgeyBub19vcmRlciwgZG15LCBtZHksIHltZCwgeWRtIH07CiAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgX190aW1lcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNl
dAogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgX19jaGFyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0
YXRpYyBsb2NhbGU6OmlkIGlkOwoKCiAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQqIF9TX3RpbWV6
b25lc1sxNF07CgogICAgcHJvdGVjdGVkOgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX3Rp
bWVwdW5jdDsKICAgICAgY2hhciogX01fbmFtZV90aW1lcHVuY3Q7CiAgICAgIGNvbnN0IF9DaGFy
VCogX01fZGF0ZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV9lcmFfZm9ybWF0
OwogICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQq
IF9NX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX3RpbWVfZm9y
bWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfdGltZV9lcmFfZm9ybWF0OwogICAgICBj
b25zdCBfQ2hhclQqIF9NX2FtOwogICAgICBjb25zdCBfQ2hhclQqIF9NX3BtOwogICAgICBjb25z
dCBfQ2hhclQqIF9NX2FtX3BtX2Zvcm1hdDsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTE7
CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkz
OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5
NTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk2OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2Rh
eTc7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTE7CiAgICAgIGNvbnN0IF9DaGFyVCog
X01fZGF5X2EyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMzsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9kYXlfYTQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E1OwogICAgICBjb25z
dCBfQ2hhclQqIF9NX2RheV9hNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTc7CgoKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRo
MDI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwMzsKICAgICAgY29uc3QgX0NoYXJUKiBf
TV9tb250aDA0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDU7CiAgICAgIGNvbnN0IF9D
aGFyVCogX01fbW9udGgwNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA3OwogICAgICBj
b25zdCBfQ2hhclQqIF9NX21vbnRoMDg7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwOTsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDEwOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21v
bnRoMTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMjsKCgogICAgICBjb25zdCBfQ2hh
clQqIF9NX21vbnRoX2EwMTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDI7CiAgICAg
IGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTAzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRo
X2EwNDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDU7CiAgICAgIGNvbnN0IF9DaGFy
VCogX01fbW9udGhfYTA2OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNzsKICAgICAg
Y29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDg7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhf
YTA5OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMDsKICAgICAgY29uc3QgX0NoYXJU
KiBfTV9tb250aF9hMTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTEyOwoKICAgIHB1
YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgX190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDAp
OwoKICAgICAgZXhwbGljaXQKICAgICAgX190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNv
bnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgdm9pZAogICAgICBfTV9w
dXQoX0NoYXJUKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCwK
ICAgICAgICAgICAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgX01f
ZGF0ZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9fZGF0ZSkgY29uc3QKICAgICAgewoKICAgICAg
ICBfX2RhdGVbMF0gPSBfTV9kYXRlX2Zvcm1hdDsKICAgICAgICBfX2RhdGVbMV0gPSBfTV9kYXRl
X2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fdGltZV9mb3JtYXRzKGNv
bnN0IF9DaGFyVCoqIF9fdGltZSkgY29uc3QKICAgICAgewoKICAgICAgICBfX3RpbWVbMF0gPSBf
TV90aW1lX2Zvcm1hdDsKICAgICAgICBfX3RpbWVbMV0gPSBfTV90aW1lX2VyYV9mb3JtYXQ7CiAg
ICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fYW1wbShjb25zdCBfQ2hhclQqKiBfX2FtcG0pIGNv
bnN0CiAgICAgIHsKICAgICAgICBfX2FtcG1bMF0gPSBfTV9hbTsKICAgICAgICBfX2FtcG1bMV0g
PSBfTV9wbTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9kYXRlX3RpbWVfZm9ybWF0cyhj
b25zdCBfQ2hhclQqKiBfX2R0KSBjb25zdAogICAgICB7CgogICAgICAgIF9fZHRbMF0gPSBfTV9k
YXRlX3RpbWVfZm9ybWF0OwogICAgICAgIF9fZHRbMV0gPSBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1h
dDsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9kYXlzKGNvbnN0IF9DaGFyVCoqIF9fZGF5
cykgY29uc3QKICAgICAgewogICAgICAgIF9fZGF5c1swXSA9IF9NX2RheTE7CiAgICAgICAgX19k
YXlzWzFdID0gX01fZGF5MjsKICAgICAgICBfX2RheXNbMl0gPSBfTV9kYXkzOwogICAgICAgIF9f
ZGF5c1szXSA9IF9NX2RheTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01fZGF5NTsKICAgICAgICBf
X2RheXNbNV0gPSBfTV9kYXk2OwogICAgICAgIF9fZGF5c1s2XSA9IF9NX2RheTc7CiAgICAgIH0K
CiAgICAgIHZvaWQKICAgICAgX01fZGF5c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX2Rh
eXMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXlfYTE7CiAgICAgICAg
X19kYXlzWzFdID0gX01fZGF5X2EyOwogICAgICAgIF9fZGF5c1syXSA9IF9NX2RheV9hMzsKICAg
ICAgICBfX2RheXNbM10gPSBfTV9kYXlfYTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01fZGF5X2E1
OwogICAgICAgIF9fZGF5c1s1XSA9IF9NX2RheV9hNjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9k
YXlfYTc7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fbW9udGhzKGNvbnN0IF9DaGFyVCoq
IF9fbW9udGhzKSBjb25zdAogICAgICB7CiAgICAgICAgX19tb250aHNbMF0gPSBfTV9tb250aDAx
OwogICAgICAgIF9fbW9udGhzWzFdID0gX01fbW9udGgwMjsKICAgICAgICBfX21vbnRoc1syXSA9
IF9NX21vbnRoMDM7CiAgICAgICAgX19tb250aHNbM10gPSBfTV9tb250aDA0OwogICAgICAgIF9f
bW9udGhzWzRdID0gX01fbW9udGgwNTsKICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoMDY7
CiAgICAgICAgX19tb250aHNbNl0gPSBfTV9tb250aDA3OwogICAgICAgIF9fbW9udGhzWzddID0g
X01fbW9udGgwODsKICAgICAgICBfX21vbnRoc1s4XSA9IF9NX21vbnRoMDk7CiAgICAgICAgX19t
b250aHNbOV0gPSBfTV9tb250aDEwOwogICAgICAgIF9fbW9udGhzWzEwXSA9IF9NX21vbnRoMTE7
CiAgICAgICAgX19tb250aHNbMTFdID0gX01fbW9udGgxMjsKICAgICAgfQoKICAgICAgdm9pZAog
ICAgICBfTV9tb250aHNfYWJicmV2aWF0ZWQoY29uc3QgX0NoYXJUKiogX19tb250aHMpIGNvbnN0
CiAgICAgIHsKICAgICAgICBfX21vbnRoc1swXSA9IF9NX21vbnRoX2EwMTsKICAgICAgICBfX21v
bnRoc1sxXSA9IF9NX21vbnRoX2EwMjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoX2Ew
MzsKICAgICAgICBfX21vbnRoc1szXSA9IF9NX21vbnRoX2EwNDsKICAgICAgICBfX21vbnRoc1s0
XSA9IF9NX21vbnRoX2EwNTsKICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoX2EwNjsKICAg
ICAgICBfX21vbnRoc1s2XSA9IF9NX21vbnRoX2EwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9N
X21vbnRoX2EwODsKICAgICAgICBfX21vbnRoc1s4XSA9IF9NX21vbnRoX2EwOTsKICAgICAgICBf
X21vbnRoc1s5XSA9IF9NX21vbnRoX2ExMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250
aF9hMTE7CiAgICAgICAgX19tb250aHNbMTFdID0gX01fbW9udGhfYTEyOwogICAgICB9CgogICAg
cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5fX3RpbWVwdW5jdCgpOwoKCiAgICAgIHZv
aWQKICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251
bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBf
X3RpbWVwdW5jdDxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGNoYXIqCiAg
ICBfX3RpbWVwdW5jdDxjaGFyPjo6X1NfdGltZXpvbmVzWzE0XTsKCiAgdGVtcGxhdGU8PgogICAg
dm9pZAogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19s
b2NhbGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8Y2hh
cj46Ol9NX3B1dChjaGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgY29uc3QgdG0qKSBjb25zdDsK
IyAxMTUzICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVf
ZmFjZXRzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjb25zdCBfQ2hhclQq
IF9fdGltZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25lc1sxNF07CgoKIyAxICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvc3BhcmMtc3VuLXNvbGFyaXMyLjkvYml0cy90aW1l
X21lbWJlcnMuaCIgMSAzCiMgMzcgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9zcGFyYy1zdW4tc29sYXJpczIuOS9iaXRzL3RpbWVfbWVtYmVycy5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6
ZV90IF9fcmVmcykKICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICB7CiAgICAgIF9NX25h
bWVfdGltZXB1bmN0ID0gX1NfY19uYW1lOwogICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfX3RpbWVwdW5jdDxfQ2hh
clQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fcmVmcykKICAgIDogbG9j
YWxlOjpmYWNldChfX3JlZnMpCiAgICB7CiAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gbmV3IGNo
YXJbc3RybGVuKF9fcykgKyAxXTsKICAgICAgc3RyY3B5KF9NX25hbWVfdGltZXB1bmN0LCBfX3Mp
OwogICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3Qo
KQogICAgewogICAgICBpZiAoX1NfY19uYW1lICE9IF9NX25hbWVfdGltZXB1bmN0KQogICAgICAg
IGRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShf
TV9jX2xvY2FsZV90aW1lcHVuY3QpOwogICAgfQojIDExNTggIi9zcGFjZS9zbmIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0IDogcHVi
bGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJf
dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwoK
ICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dl
dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0IChfX3JlZnMpIHsgfQoK
ICAgICAgZGF0ZW9yZGVyCiAgICAgIGRhdGVfb3JkZXIoKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb19kYXRlX29yZGVyKCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfdGltZShp
dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX2dldF90aW1lKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0p
OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRf
ZGF0ZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBl
CiAgICAgIGdldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0
bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3dlZWtkYXkoX19iZWcs
IF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRf
bW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p
bywKICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3Rt
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfbW9udGhuYW1lKF9fYmVnLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3llYXIo
aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb19nZXRfeWVhcihfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Rt
KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9nZXQoKSB7IH0K
CiAgICAgIHZpcnR1YWwgZGF0ZW9yZGVyCiAgICAgIGRvX2RhdGVfb3JkZXIoKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX2JlZywg
aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJf
dHlwZQogICAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0
X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAg
ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJf
dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0
cmFjdF9udW0oaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJl
ciwKICAgICAgICAgICAgICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xl
biwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSwKICAg
ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKCgoKICAg
ICAgdm9pZAogICAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBl
JiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFy
VCoqIF9fbmFtZXMsIHNpemVfdCBfX2luZGV4bGVuLAogICAgICAgICAgICAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdDsKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJh
Y3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3NfYmFz
ZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgdG0qIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQq
IF9fZm9ybWF0KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6
aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNs
YXNzIHRpbWVfZ2V0X2J5bmFtZSA6IHB1YmxpYyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+CiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5
cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldF9i
eW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfZ2V0PF9D
aGFyVCwgX0luSXRlcj4oX19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwK
ICAgICAgfnRpbWVfZ2V0X2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGljIGxv
Y2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7
CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVf
cHV0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0K
CiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8s
IGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgICAgY29uc3QgX0NoYXJU
KiBfX2JlZywgY29uc3QgX0NoYXJUKiBfX2VuZCkgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAg
ICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAog
ICAgICAgICAgY29uc3QgdG0qIF9fdG0sIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QgPSAwKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fdG0s
IF9fZm9ybWF0LCBfX21vZCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAg
fnRpbWVfcHV0KCkKICAgICAgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19w
dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0
IHRtKiBfX3RtLAogICAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3Q7
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog
ICAgbG9jYWxlOjppZCB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1dF9i
eW5hbWUgOiBwdWJsaWMgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4KICAgIHsKICAgIHB1Ymxp
YzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRl
ciBpdGVyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dF9ieW5hbWUoY29uc3Qg
Y2hhciogLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJ
dGVyPihfX3JlZnMpCiAgICAgIHsgfTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg
ICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsgfQogICAgfTsKCgogIGNsYXNzIG1vbmV5X2Jhc2UKICB7
CiAgcHVibGljOgogICAgZW51bSBwYXJ0IHsgbm9uZSwgc3BhY2UsIHN5bWJvbCwgc2lnbiwgdmFs
dWUgfTsKICAgIHN0cnVjdCBwYXR0ZXJuIHsgY2hhciBmaWVsZFs0XTsgfTsKCiAgICBzdGF0aWMg
Y29uc3QgcGF0dGVybiBfU19kZWZhdWx0X3BhdHRlcm47CgoKCiAgICBzdGF0aWMgcGF0dGVybgog
ICAgX1NfY29uc3RydWN0X3BhdHRlcm4oY2hhciBfX3ByZWNlZGVzLCBjaGFyIF9fc3BhY2UsIGNo
YXIgX19wb3NuKTsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+
CiAgICBjbGFzcyBtb25leXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtb25l
eV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk
OwoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IGNoYXIqIF9NX2dyb3VwaW5nOwogICAgICBjaGFy
X3R5cGUgX01fZGVjaW1hbF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7
CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fY3Vycl9zeW1ib2w7CiAgICAgIGNvbnN0IGNoYXJf
dHlwZSogX01fcG9zaXRpdmVfc2lnbjsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV9uZWdhdGl2
ZV9zaWduOwogICAgICBpbnQgX01fZnJhY19kaWdpdHM7CiAgICAgIHBhdHRlcm4gX01fcG9zX2Zv
cm1hdDsKICAgICAgcGF0dGVybiBfTV9uZWdfZm9ybWF0OwoKICAgIHB1YmxpYzoKICAgICAgZXhw
bGljaXQKICAgICAgbW9uZXlwdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0
KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoKTsgfQoKICAgICAgZXhw
bGljaXQKICAgICAgbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19z
LCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAg
eyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jbG9jLCBfX3MpOyB9CgogICAgICBjaGFyX3R5
cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Rl
Y2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0
cmluZwogICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3Vw
aW5nKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fY3Vycl9zeW1ib2woKTsgfQoKICAgICAgc3RyaW5nX3R5cGUK
ICAgICAgcG9zaXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc2l0
aXZlX3NpZ24oKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgbmVnYXRpdmVfc2lnbigpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ2F0aXZlX3NpZ24oKTsgfQoKICAgICAgaW50
CiAgICAgIGZyYWNfZGlnaXRzKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZnJhY19k
aWdpdHMoKTsgfQoKICAgICAgcGF0dGVybgogICAgICBwb3NfZm9ybWF0KCkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fcG9zX2Zvcm1hdCgpOyB9CgogICAgICBwYXR0ZXJuCiAgICAgIG5l
Z19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7IH0K
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3QoKTsKCiAgICAg
IHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7
IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAg
ICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3Nl
cDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAg
ICBkb19jdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9sOyB9
CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBjb25z
dAogICAgICB7IHJldHVybiBfTV9wb3NpdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIHN0cmlu
Z190eXBlCiAgICAgIGRvX25lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBfTV9u
ZWdhdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19mcmFjX2RpZ2l0cygp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2ZyYWNfZGlnaXRzOyB9CgogICAgICB2aXJ0dWFsIHBh
dHRlcm4KICAgICAgZG9fcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bvc19m
b3JtYXQ7IH0KCiAgICAgIHZpcnR1YWwgcGF0dGVybgogICAgICBkb19uZWdfZm9ybWF0KCkgY29u
c3QKICAgICAgeyByZXR1cm4gX01fbmVnX2Zvcm1hdDsgfQoKCiAgICAgICB2b2lkCiAgICAgICBf
TV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lID0gX19udWxsKTsK
ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGxvY2Fs
ZTo6aWQgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNvbnN0IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9J
bnRsPjo6aW50bDsKCiAgdGVtcGxhdGU8PgogICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6fm1v
bmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5t
b25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8Y2hhciwg
dHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFyKik7
CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9p
bml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwgY29uc3QgY2hhciopOwojIDE0OTIgIi9z
cGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9mYWNldHMuaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5
cHVuY3RfYnluYW1lIDogcHVibGljIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4KICAgIHsKICAg
ICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hh
clQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwoK
ICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBz
aXplX3QgX19yZWZzID0gMCkKICAgICAgOiBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+KF9fcmVm
cykKICAgICAgewogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1
bmN0LCBfX3MpOwogICAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfTV9jX2xvY2FsZV9t
b25leXB1bmN0KTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+
bW9uZXlwdW5jdF9ieW5hbWUoKQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2Nh
bGVfbW9uZXlwdW5jdCk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9v
bCBfSW50bD4KICAgIGNvbnN0IGJvb2wgbW9uZXlwdW5jdF9ieW5hbWU8X0NoYXJULCBfSW50bD46
OmludGw7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAg
IGNsYXNzIG1vbmV5X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6
CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBp
dGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7
CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5
X2dldChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAg
ICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9v
bCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
Z2V0KF9fcywgX19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fdW5pdHMpOyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBf
X2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dl
dChfX3MsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5X2dldCgpIHsgfQoKICAgICAgdmlydHVh
bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwg
Ym9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29s
IF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X2dl
dDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0
CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg
dHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
aGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4
cGxpY2l0CiAgICAgIG1vbmV5X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0
KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJv
b2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGxv
bmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3Ms
IF9faW50bCwgX19pbywgX19maWxsLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg
IHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICBjaGFyX3R5cGUgX19maWxsLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2Rp
Z2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5X3B1dCgp
IHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3Ms
IGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAg
ICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywg
Y2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0
cykgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P
dXRJdGVyPgogICAgbG9jYWxlOjppZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoK
CiAgc3RydWN0IG1lc3NhZ2VzX2Jhc2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRhbG9nOwogIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGlj
IGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBwdWJsaWM6Cgog
ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5n
PF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2NhbGUg
X01fY19sb2NhbGVfbWVzc2FnZXM7CiAgICAgIGNoYXIqIF9NX25hbWVfbWVzc2FnZXM7CgogICAg
cHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg
IG1lc3NhZ2VzKHNpemVfdCBfX3JlZnMgPSAwKTsKCgogICAgICBleHBsaWNpdAogICAgICBtZXNz
YWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0g
MCk7CgogICAgICBjYXRhbG9nCiAgICAgIG9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBf
X3MsIGNvbnN0IGxvY2FsZSYgX19sb2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX29w
ZW4oX19zLCBfX2xvYyk7IH0KCgogICAgICBjYXRhbG9nCiAgICAgIG9wZW4oY29uc3QgYmFzaWNf
c3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJiwgY29uc3QgY2hhciopIGNvbnN0OwoKICAgICAg
c3RyaW5nX3R5cGUKICAgICAgZ2V0KGNhdGFsb2cgX19jLCBpbnQgX19zZXQsIGludCBfX21zZ2lk
LCBjb25zdCBzdHJpbmdfdHlwZSYgX19zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19n
ZXQoX19jLCBfX3NldCwgX19tc2dpZCwgX19zKTsgfQoKICAgICAgdm9pZAogICAgICBjbG9zZShj
YXRhbG9nIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY2xvc2UoX19jKTsgfQoK
ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bWVzc2FnZXMoKTsKCiAgICAgIHZp
cnR1YWwgY2F0YWxvZwogICAgICBkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYsIGNv
bnN0IGxvY2FsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19n
ZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3Q7
CgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgZG9fY2xvc2UoY2F0YWxvZykgY29uc3Q7CgoKICAg
ICAgY2hhcioKICAgICAgX01fY29udmVydF90b19jaGFyKGNvbnN0IHN0cmluZ190eXBlJiBfX21z
ZykgY29uc3QKICAgICAgewoKICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
Y29uc3RfY2FzdDxfQ2hhclQqPihfX21zZy5jX3N0cigpKSk7CiAgICAgIH0KCgogICAgICBzdHJp
bmdfdHlwZQogICAgICBfTV9jb252ZXJ0X2Zyb21fY2hhcihjaGFyKiBfX21zZykgY29uc3QKICAg
ICAgewoKICAgICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxjaGFyPjo6bGVuZ3RoKF9f
bXNnKSAtIDE7CiMgMTcwMyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgICAgICAgcmV0dXJuIHN0cmluZ190eXBlKCk7CiAgICAg
IH0KICAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG1l
c3NhZ2VzPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgc3RyaW5nCiAgICBtZXNzYWdl
czxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmKSBjb25zdDsK
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnlu
YW1lIDogcHVibGljIG1lc3NhZ2VzPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlw
ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+
IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgbWVzc2FnZXNfYnluYW1lKGNvbnN0
IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmly
dHVhbAogICAgICB+bWVzc2FnZXNfYnluYW1lKCkKICAgICAgeyB9CiAgICB9OwoKCiMgMSAiL3Nw
YWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL3NwYXJjLXN1bi1zb2xhcmlzMi45L2Jp
dHMvbWVzc2FnZXNfbWVtYmVycy5oIiAxIDMKIyAzNyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL3NwYXJjLXN1bi1zb2xhcmlzMi45L2JpdHMvbWVzc2FnZXNfbWVtYmVycy5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1l
c3NhZ2VzKHNpemVfdCBfX3JlZnMpCiAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICB7
IF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY19sb2NhbGU7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19j
bG9jLCBjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcykKICAgICA6IGxvY2FsZTo6ZmFjZXQoX19y
ZWZzKQogICAgIHsgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jX2xvY2FsZTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRh
bG9nCiAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYg
X19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKikgY29uc3QKICAgIHsgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7IH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIG1lc3NhZ2VzPF9DaGFyVD46On5tZXNz
YWdlcygpCiAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFy
VD46OmNhdGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3Ry
aW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJikgY29uc3QKICAgIHsgcmV0dXJuIDA7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6c3Ry
aW5nX3R5cGUKICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSYgX19kZmF1bHQp
IGNvbnN0CiAgICB7IHJldHVybiBfX2RmYXVsdDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICB2b2lkCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25z
dAogICAgeyB9CgoKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgIG1lc3NhZ2VzX2J5
bmFtZTxfQ2hhclQ+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19y
ZWZzKQogICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpCiAgICAgewogICAgICAgX1NfZGVz
dHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CiAgICAgICBfU19jcmVhdGVfY19s
b2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CiAgICAgfQojIDE3MzkgIi9zcGFjZS9z
bmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3Bh
Y2UoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNl
dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9D
aGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5
cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwcmludCwgX19jKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQg
X19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9D
aGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Y250cmwsIF9fYyk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0NoYXJUIF9fYywg
Y29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+
ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sIGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9j
YWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2Mp
LmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYg
X19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhj
dHlwZV9iYXNlOjphbHBoYSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j
KQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVf
YmFzZTo6ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s
aW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAg
IHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6
OnB1bmN0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBi
b29sCiAgICBpc3hkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy
ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRp
Z2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29s
CiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVy
biB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbG51bSwg
X19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAg
aXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNl
X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91
cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2Zh
Y2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91cHBlcihfX2MpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJUIF9fYywg
Y29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+
ID4oX19sb2MpLnRvbG93ZXIoX19jKTsgfQp9CiMgNDIgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz
cyBiYXNpY19pb3MgOiBwdWJsaWMgaW9zX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCgoKCgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFp
dHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBv
c190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBl
IG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiMgNzUgIi9zcGFj
ZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX2lvcy5oIiAzCiAgICAg
IHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgb3N0cmVh
bWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOwogICAgICB0
eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlwZTsK
ICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3Ry
ZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9p
dGVyPiBfX251bWdldF90eXBlOwoKCgogICAgcHJvdGVjdGVkOgogICAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4qIF9NX3RpZTsKICAgICAgbXV0YWJsZSBjaGFyX3R5cGUgX01fZmls
bDsKICAgICAgbXV0YWJsZSBib29sIF9NX2ZpbGxfaW5pdDsKICAgICAgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz4qIF9NX3N0cmVhbWJ1ZjsKCgogICAgICBjb25zdCBfX2N0eXBlX3R5
cGUqIF9NX2ZjdHlwZTsKCiAgICAgIGNvbnN0IF9fbnVtcHV0X3R5cGUqIF9NX2ZudW1wdXQ7Cgog
ICAgICBjb25zdCBfX251bWdldF90eXBlKiBfTV9mbnVtZ2V0OwoKICAgIHB1YmxpYzoKCgoKCgoK
CiAgICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgp
ID8gMCA6IGNvbnN0X2Nhc3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0KCiAgICAgIGJvb2wKICAgICAg
b3BlcmF0b3IhKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpOyB9CiMgMTE5ICIv
c3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9iYXNpY19pb3MuaCIgMwog
ICAgICBpb3N0YXRlCiAgICAgIHJkc3RhdGUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJl
YW1idWZfc3RhdGU7IH0KIyAxMzAgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9iaXRzL2Jhc2ljX2lvcy5oIiAzCiAgICAgIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0
YXRlID0gZ29vZGJpdCk7CgoKCgoKCgogICAgICB2b2lkCiAgICAgIHNldHN0YXRlKGlvc3RhdGUg
X19zdGF0ZSkKICAgICAgeyB0aGlzLT5jbGVhcih0aGlzLT5yZHN0YXRlKCkgfCBfX3N0YXRlKTsg
fQoKCgoKCgoKICAgICAgYm9vbAogICAgICBnb29kKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+cmRzdGF0ZSgpID09IDA7IH0KCgoKCgoKCiAgICAgIGJvb2wKICAgICAgZW9mKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJpdCkgIT0gMDsgfQojIDE3MCAi
L3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvYmFzaWNfaW9zLmgiIDMK
ICAgICAgYm9vbAogICAgICBmYWlsKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3Rh
dGUoKSAmIChiYWRiaXQgfCBmYWlsYml0KSkgIT0gMDsgfQoKCgoKCgoKICAgICAgYm9vbAogICAg
ICBiYWQoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgYmFkYml0KSAh
PSAwOyB9CiMgMTkxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9i
YXNpY19pb3MuaCIgMwogICAgICBpb3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9leGNlcHRpb247IH0KIyAyMjYgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX2lvcy5oIiAzCiAgICAgIHZvaWQKICAgICAgZXhjZXB0
aW9ucyhpb3N0YXRlIF9fZXhjZXB0KQogICAgICB7CiAgICAgICAgX01fZXhjZXB0aW9uID0gX19l
eGNlcHQ7CiAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRlKTsKICAgICAgfQoK
CgoKCgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaW9zKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+KiBfX3NiKSA6IGlvc19iYXNlKCkKICAgICAgeyB0aGlzLT5pbml0KF9fc2Ip
OyB9CgoKCgoKCgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pb3MoKSB7IH0KIyAyNjIgIi9z
cGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX2lvcy5oIiAzCiAg
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gX01fdGllOyB9CiMgMjc0ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9iYXNpY19pb3MuaCIgMwogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4qCiAgICAgIHRpZShiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fdGll
c3RyKQogICAgICB7CiAgICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX29s
ZCA9IF9NX3RpZTsKICAgICAgICBfTV90aWUgPSBfX3RpZXN0cjsKICAgICAgICByZXR1cm4gX19v
bGQ7CiAgICAgIH0KCgoKCgoKCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
KgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1ZjsgfQojIDMw
NyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvYmFzaWNfaW9zLmgi
IDMKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJkYnVmKGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCgoKCiAgICAgIGJhc2ljX2lv
cyYKICAgICAgY29weWZtdChjb25zdCBiYXNpY19pb3MmIF9fcmhzKTsKCgoKCgoKCiAgICAgIGNo
YXJfdHlwZQogICAgICBmaWxsKCkgY29uc3QKICAgICAgewogICAgICAgIGlmICghX01fZmlsbF9p
bml0KQogICAgICAgICAgewogICAgICAgICAgICBfTV9maWxsID0gdGhpcy0+d2lkZW4oJyAnKTsK
ICAgICAgICAgICAgX01fZmlsbF9pbml0ID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICByZXR1
cm4gX01fZmlsbDsKICAgICAgfQojIDM0MiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4zL2JpdHMvYmFzaWNfaW9zLmgiIDMKICAgICAgY2hhcl90eXBlCiAgICAgIGZpbGwoY2hh
cl90eXBlIF9fY2gpCiAgICAgIHsKICAgICAgICBjaGFyX3R5cGUgX19vbGQgPSB0aGlzLT5maWxs
KCk7CiAgICAgICAgX01fZmlsbCA9IF9fY2g7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9
CiMgMzYyICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9iYXNpY19p
b3MuaCIgMwogICAgICBsb2NhbGUKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CiMg
MzgyICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9iYXNpY19pb3Mu
aCIgMwogICAgICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0
KSBjb25zdDsKIyA0MDAgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L2Jhc2ljX2lvcy5oIiAzCiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29u
c3Q7CgogICAgcHJvdGVjdGVkOgoKCgoKCgoKICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFzZSgp
CiAgICAgIHsgfQoKCgoKCgoKICAgICAgdm9pZAogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJvb2wKICAgICAgX01fY2hlY2tfZmFjZXQo
Y29uc3QgbG9jYWxlOjpmYWNldCogX19mKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKCFfX2Yp
CiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
IH0KCiAgICAgIHZvaWQKICAgICAgX01fY2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2Mp
OwogICAgfTsKfQoKCgojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9i
aXRzL2Jhc2ljX2lvcy50Y2MiIDEgMwojIDM0ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9iYXNpY19pb3MudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19p
b3M8X0NoYXJULCBfVHJhaXRzPjo6Y2xlYXIoaW9zdGF0ZSBfX3N0YXRlKQogICAgewogICAgICBp
ZiAodGhpcy0+cmRidWYoKSkKICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlOwog
ICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlIHwgYmFkYml0
OwogICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRoaXMtPmV4Y2VwdGlvbnMoKSkpCiAgICAg
ICAgX190aHJvd19pb3NfZmFpbHVyZSgiYmFzaWNfaW9zOjpjbGVhcihpb3N0YXRlKSBjYXVzZWQg
ZXhjZXB0aW9uIik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgYmFzaWNf
aW9zPF9DaGFyVCwgX1RyYWl0cz46OnJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+KiBfX3NiKQogICAgewogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiog
X19vbGQgPSBfTV9zdHJlYW1idWY7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIHRo
aXMtPmNsZWFyKCk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y29weWZtdChjb25zdCBiYXNpY19p
b3MmIF9fcmhzKQogICAgewoKCgoKICAgICAgX1dvcmRzKiBfX3dvcmRzID0gKF9fcmhzLl9NX3dv
cmRfc2l6ZSA8PSBfU19sb2NhbF93b3JkX3NpemUpID8KICAgICAgICBfTV9sb2NhbF93b3JkIDog
bmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX3NpemVdOwoKCiAgICAgIF9DYWxsYmFja19saXN0KiBf
X2NiID0gX19yaHMuX01fY2FsbGJhY2tzOwogICAgICBpZiAoX19jYikKICAgICAgICBfX2NiLT5f
TV9hZGRfcmVmZXJlbmNlKCk7CiAgICAgIF9NX2NhbGxfY2FsbGJhY2tzKGVyYXNlX2V2ZW50KTsK
ICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29yZCkKICAgICAgICB7CiAgICAgICAgICBk
ZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9NX3dvcmQgPSAwOwogICAgICAgIH0KICAgICAg
X01fZGlzcG9zZV9jYWxsYmFja3MoKTsKCiAgICAgIF9NX2NhbGxiYWNrcyA9IF9fY2I7CiAgICAg
IGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcmhzLl9NX3dvcmRfc2l6ZTsgKytfX2kpCiAgICAg
ICAgX193b3Jkc1tfX2ldID0gX19yaHMuX01fd29yZFtfX2ldOwogICAgICBpZiAoX01fd29yZCAh
PSBfTV9sb2NhbF93b3JkKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBbXSBfTV93b3JkOwog
ICAgICAgICAgX01fd29yZCA9IDA7CiAgICAgICAgfQogICAgICBfTV93b3JkID0gX193b3JkczsK
ICAgICAgX01fd29yZF9zaXplID0gX19yaHMuX01fd29yZF9zaXplOwoKICAgICAgdGhpcy0+Zmxh
Z3MoX19yaHMuZmxhZ3MoKSk7CiAgICAgIHRoaXMtPndpZHRoKF9fcmhzLndpZHRoKCkpOwogICAg
ICB0aGlzLT5wcmVjaXNpb24oX19yaHMucHJlY2lzaW9uKCkpOwogICAgICB0aGlzLT50aWUoX19y
aHMudGllKCkpOwogICAgICB0aGlzLT5maWxsKF9fcmhzLmZpbGwoKSk7CgogICAgICB0aGlzLT5l
eGNlcHRpb25zKF9fcmhzLmV4Y2VwdGlvbnMoKSk7CgogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhj
b3B5Zm10X2V2ZW50KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjaGFyCiAgICBiYXNpY19pb3M8X0No
YXJULCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0
CiAgICB7CiAgICAgIGNoYXIgX19yZXQgPSBfX2RmYXVsdDsKICAgICAgaWYgKF9NX2NoZWNrX2Zh
Y2V0KF9NX2ZjdHlwZSkpCiAgICAgICAgX19yZXQgPSBfTV9mY3R5cGUtPm5hcnJvdyhfX2MsIF9f
ZGZhdWx0KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBfQ2hhclQKICAgIGJhc2ljX2lvczxfQ2hhclQs
IF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9fYykgY29uc3QKICAgIHsKICAgICAgY2hhcl90eXBlIF9f
cmV0ID0gY2hhcl90eXBlKCk7CiAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mY3R5cGUpKQog
ICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT53aWRlbihfX2MpOwogICAgICByZXR1cm4gX19yZXQ7
CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBsb2NhbGUKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjppbWJ1ZShjb25zdCBsb2Nh
bGUmIF9fbG9jKQogICAgewogICAgICBsb2NhbGUgX19vbGQodGhpcy0+Z2V0bG9jKCkpOwogICAg
ICBpb3NfYmFzZTo6aW1idWUoX19sb2MpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX19sb2MpOwog
ICAgICBpZiAodGhpcy0+cmRidWYoKSAhPSAwKQogICAgICAgIHRoaXMtPnJkYnVmKCktPnB1Ymlt
YnVlKF9fbG9jKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8X0NoYXJU
LCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikK
ICAgIHsKCiAgICAgIGlvc19iYXNlOjpfTV9pbml0KCk7CiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhf
TV9pb3NfbG9jYWxlKTsKICAgICAgX01fdGllID0gMDsKIyAxNTkgIi9zcGFjZS9zbmIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKICAgICAgX01fZmlsbCA9
IF9DaGFyVCgpOwogICAgICBfTV9maWxsX2luaXQgPSBmYWxzZTsKCiAgICAgIF9NX2V4Y2VwdGlv
biA9IGdvb2RiaXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIF9NX3N0cmVhbWJ1
Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8X0No
YXJULCBfVHJhaXRzPjo6X01fY2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7
CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBlPihfX2xvYykpCiAgICAgICAgX01fZmN0
eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKTsKICAgICAgZWxzZQogICAgICAg
IF9NX2ZjdHlwZSA9IDA7CgogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9j
KSkKICAgICAgICBfTV9mbnVtcHV0ID0gJnVzZV9mYWNldDxfX251bXB1dF90eXBlPihfX2xvYyk7
CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtcHV0ID0gMDsKICAgICAgaWYgKGhhc19mYWNldDxf
X251bWdldF90eXBlPihfX2xvYykpCiAgICAgICAgX01fZm51bWdldCA9ICZ1c2VfZmFjZXQ8X19u
dW1nZXRfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAgICAgICAgX01fZm51bWdldCA9IDA7CiAg
ICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3M8Y2hhcj47CgoKCgp9CiMg
NDM5ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9iYXNpY19pb3Mu
aCIgMiAzCiMgNTIgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pb3MiIDIg
MwojIDQ2ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvb3N0cmVhbSIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKIyA1NyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL29zdHJlYW0iIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9D
aGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlw
ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19p
b3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5
cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwog
ICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwojIDg0ICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvb3N0cmVhbSIgMwogICAgICBleHBsaWNpdAogICAg
ICBiYXNpY19vc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsgdGhpcy0+aW5p
dChfX3NiKTsgfQoKCgoKCgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19vc3RyZWFtKCkgeyB9
CgoKICAgICAgY2xhc3Mgc2VudHJ5OwogICAgICBmcmllbmQgY2xhc3Mgc2VudHJ5OwojIDExMCAi
L3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL29zdHJlYW0iIDMKICAgICAgX19v
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19v
c3RyZWFtX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChf
X2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYK
ICAgICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7CiMgMTQ3ICIv
c3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvb3N0cmVhbSIgMwogICAgICBfX29z
dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIF9fbik7CgogICAgICBfX29zdHJlYW1f
dHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIF9fbik7CgogICAgICBfX29zdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChib29sIF9fbik7CgogICAgICBfX29zdHJlYW1fdHlw
ZSYKICAgICAgb3BlcmF0b3I8PChzaG9ydCBfX24pCiAgICAgIHsKICAgICAgICBpb3NfYmFzZTo6
Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAg
ICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkK
ICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgc2hvcnQ+KF9fbikpKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3Bl
cmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsKICAgICAgfQoKICAgICAgX19vc3RyZWFt
X3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgX19uKQogICAgICB7IHJldHVy
biB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbikpOyB9Cgog
ICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChpbnQgX19uKQogICAgICB7CiAg
ICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNl
OjpiYXNlZmllbGQ7CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAm
IGlvc19iYXNlOjpoZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0
YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX19uKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJl
dHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAgICB9Cgog
ICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgX19uKQog
ICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+
KF9fbikpOyB9CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBs
b25nIF9fbik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25l
ZCBsb25nIGxvbmcgX19uKTsKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8
PChkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGZs
b2F0IF9fZikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxkb3Vi
bGU+KF9fZikpOyB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25n
IGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoY29u
c3Qgdm9pZCogX19wKTsKIyAyMjggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9vc3RyZWFtIiAzCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9fc3Ry
ZWFtYnVmX3R5cGUqIF9fc2IpOwojIDI2MSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4zL29zdHJlYW0iIDMKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHB1dChjaGFyX3R5
cGUgX19jKTsKIyAyODAgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9vc3Ry
ZWFtIiAzCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUq
IF9fcywgc3RyZWFtc2l6ZSBfX24pOwojIDI5MyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL29zdHJlYW0iIDMKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIGZsdXNoKCk7
CiMgMzA0ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvb3N0cmVhbSIgMwog
ICAgICBwb3NfdHlwZQogICAgICB0ZWxscCgpOwojIDMxNSAiL3NwYWNlL3NuYi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL29zdHJlYW0iIDMKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHNl
ZWtwKHBvc190eXBlKTsKIyAzMjcgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9vc3RyZWFtIiAzCiAgICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3Aob2ZmX3R5cGUs
IGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CiMgMzQxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvb3N0cmVhbSIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OnNlbnRyeQogICAgewoKICAgICAgYm9vbCBfTV9vazsKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsX1RyYWl0cz4mIF9NX29zOwoKICAgIHB1YmxpYzoKIyAzNjAgIi9zcGFjZS9zbmIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9vc3RyZWFtIiAzCiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRy
eShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7CiMgMzcwICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvb3N0cmVhbSIgMwogICAgICB+c2VudHJ5KCkKICAg
ICAgewoKICAgICAgICBpZiAoX01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmICYmICF1
bmNhdWdodF9leGNlcHRpb24oKSkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9vcy5y
ZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgICBf
TV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgIH0KICAgICAgfQojIDM4
OCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL29zdHJlYW0iIDMKICAgICAg
b3BlcmF0b3IgYm9vbCgpCiAgICAgIHsgcmV0dXJuIF9NX29rOyB9CiAgICB9OwojIDQwOSAiL3Nw
YWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL29zdHJlYW0iIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19vdXQsIF9DaGFyVCBfX2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQog
ICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykpOyB9CgoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYyk7CgoK
ICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz
PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHNp
Z25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihf
X2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFy
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYg
X19vdXQsIHVuc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19j
YXN0PGNoYXI+KF9fYykpOyB9CiMgNDQ5ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvb3N0cmVhbSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3Mp
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8
Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBf
X3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwg
X1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9f
b3V0LCBjb25zdCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9f
cykKICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihf
X3MpKTsgfQojIDQ4MyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL29zdHJl
YW0iIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRsKGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIGZsdXNoKF9fb3MucHV0KF9fb3Mud2lk
ZW4oJ1xuJykpKTsgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRzKGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MucHV0
KF9DaGFyVCgpKTsgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGZsdXNoKGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MuZmx1
c2goKTsgfQoKfQoKCgoKCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L2JpdHMvb3N0cmVhbS50Y2MiIDEgMwojIDM2ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9vc3RyZWFtLnRjYyIgMwoKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvbG9jYWxlIiAxIDMKIyA0MyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2xvY2FsZSIgMwoKCgojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAxIDMKIyAzNyAiL3NwYWNlL3NuYi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKCiMgMSAi
L3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2NlcnJubyIgMSAzCiMgNDcgIi9z
cGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jZXJybm8iIDMKCiMgMSAiL3Vzci9p
bmNsdWRlL2Vycm5vLmgiIDEgMyA0CiMgMTcgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzIDQKI3By
YWdtYSBpZGVudCAiQCgjKWVycm5vLmgJMS4xNgk5OS8wNy8yNiBTTUkiIAoKCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy9lcnJuby5oIiAxIDMgNAojIDkgIi91c3IvaW5jbHVkZS9zeXMvZXJybm8u
aCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyllcnJuby5oCTEuMjAJMDAvMDEvMTIgU01JIgojIDQw
ICIvdXNyL2luY2x1ZGUvc3lzL2Vycm5vLmgiIDMgNApleHRlcm4gIkMiIHsKIyAxOTcgIi91c3Iv
aW5jbHVkZS9zeXMvZXJybm8uaCIgMyA0Cn0KIyAyNCAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIg
MyA0CgoKZXh0ZXJuICJDIiB7CiMgMzggIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzIDQKZXh0ZXJu
IGludCAqX19fZXJybm8oKTsKIyA0OSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMgNAp9CiMgNDkg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9jZXJybm8iIDIgMwojIDM5ICIv
c3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLnRj
YyIgMiAzCgoKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY21hdGgi
IDEgMwojIDQ4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY21hdGgiIDMK
CgoKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOS8zLjMvaW5jbHVkZS9tYXRoLmgiIDEgMyA0CiMgMjMgIi9zcGFjZS9zbmIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL21hdGguaCIgMyA0
CiNwcmFnbWEgaWRlbnQgIkAoIyltYXRoLmgJMi4xMQkwMC8wOS8wNyBTTUkiCgojIDEgIi91c3Iv
aW5jbHVkZS9pc28vbWF0aF9pc28uaCIgMSAzIDQKCgoKCgoKCiNwcmFnbWEgaWRlbnQgIkAoIylt
YXRoX2lzby5oCTEuMgkwMC8wOS8wNyBTTUkiCgoKZXh0ZXJuICJDIiB7CiMgMjAgIi91c3IvaW5j
bHVkZS9pc28vbWF0aF9pc28uaCIgMyA0CnR5cGVkZWYgdW5pb24gX2hfdmFsIHsKICAgICAgICB1
bnNpZ25lZCBsb25nIF9pW3NpemVvZihkb3VibGUpIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsK
ICAgICAgICBkb3VibGUgX2Q7Cn0gX2hfdmFsOwoKCmV4dGVybiBjb25zdCBfaF92YWwgX19odWdl
X3ZhbDsKIyAzNyAiL3Vzci9pbmNsdWRlL2lzby9tYXRoX2lzby5oIiAzIDQKZXh0ZXJuIGRvdWJs
ZSBhY29zIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSk7CmV4dGVybiBkb3Vi
bGUgYXRhbiAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBhdGFuMiAoZG91YmxlLCBkb3VibGUpOwpl
eHRlcm4gZG91YmxlIGNvcyAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBzaW4gKGRvdWJsZSk7CmV4
dGVybiBkb3VibGUgdGFuIChkb3VibGUpOwoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUpOwpl
eHRlcm4gZG91YmxlIHNpbmggKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgdGFuaCAoZG91YmxlKTsK
CmV4dGVybiBkb3VibGUgZXhwIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGZyZXhwIChkb3VibGUs
IGludCAqKTsKZXh0ZXJuIGRvdWJsZSBsZGV4cCAoZG91YmxlLCBpbnQpOwpleHRlcm4gZG91Ymxl
IGxvZyAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJs
ZSBtb2RmIChkb3VibGUsIGRvdWJsZSAqKTsKCmV4dGVybiBkb3VibGUgcG93IChkb3VibGUsIGRv
dWJsZSk7CmV4dGVybiBkb3VibGUgc3FydCAoZG91YmxlKTsKCmV4dGVybiBkb3VibGUgY2VpbCAo
ZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGZsb29y
IChkb3VibGUpOwpleHRlcm4gZG91YmxlIGZtb2QgKGRvdWJsZSwgZG91YmxlKTsKIyA5MyAiL3Vz
ci9pbmNsdWRlL2lzby9tYXRoX2lzby5oIiAzIDQKfQojIDI2ICIvc3BhY2Uvc25iL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9tYXRoLmgiIDIg
MyA0CiMgNTMgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi45LzMuMy9pbmNsdWRlL21hdGguaCIgMyA0CmV4dGVybiAiQyIgewojIDg5ICIvc3BhY2Uv
c25iL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVk
ZS9tYXRoLmgiIDMgNApleHRlcm4gaW50IHNpZ25nYW07CgoKCgoKCgplbnVtIHZlcnNpb24ge2xp
Ym1faWVlZSA9IC0xLCBjX2lzc3VlXzQsIGFuc2lfMSwgc3RyaWN0X2Fuc2l9OwoKCmV4dGVybiBj
b25zdCBlbnVtIHZlcnNpb24gX2xpYl92ZXJzaW9uOwoKCgoKc3RydWN0IF9fbWF0aF9leGNlcHRp
b24gewogICAgICAgIGludCB0eXBlOwogICAgICAgIGNoYXIgKm5hbWU7CiAgICAgICAgZG91Ymxl
IGFyZzE7CiAgICAgICAgZG91YmxlIGFyZzI7CiAgICAgICAgZG91YmxlIHJldHZhbDsKfTsKIyAx
NDUgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45
LzMuMy9pbmNsdWRlL21hdGguaCIgMyA0CmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpOwpleHRl
cm4gZG91YmxlIGVyZmMgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSk7CmV4
dGVybiBkb3VibGUgaHlwb3QgKGRvdWJsZSwgZG91YmxlKTsKZXh0ZXJuIGludCBpc25hbiAoZG91
YmxlKTsKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBqMSAoZG91Ymxl
KTsKZXh0ZXJuIGRvdWJsZSBqbiAoaW50LCBkb3VibGUpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAo
ZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB5MCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91
YmxlKTsKZXh0ZXJuIGRvdWJsZSB5biAoaW50LCBkb3VibGUpOwojIDE3MiAiL3NwYWNlL3NuYi91
c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvbWF0
aC5oIiAzIDQKZXh0ZXJuIGRvdWJsZSBhY29zaCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBhc2lu
aCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBj
YnJ0IChkb3VibGUpOwpleHRlcm4gZG91YmxlIGxvZ2IgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUg
bmV4dGFmdGVyIChkb3VibGUsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3Vi
bGUsIGRvdWJsZSk7CmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSwgZG91YmxlKTsKIyAxOTIg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMu
My9pbmNsdWRlL21hdGguaCIgMyA0CmV4dGVybiBkb3VibGUgZXhwbTEgKGRvdWJsZSk7CmV4dGVy
biBpbnQgaWxvZ2IgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgbG9nMXAgKGRvdWJsZSk7CmV4dGVy
biBkb3VibGUgcmludCAoZG91YmxlKTsKIyAyMDggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL21hdGguaCIgMyA0CmV4dGVy
biBpbnQgbWF0aGVyciAoc3RydWN0IF9fbWF0aF9leGNlcHRpb24gKik7CgoKCgpleHRlcm4gZG91
YmxlIHNpZ25pZmljYW5kIChkb3VibGUpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbiAoZG91
YmxlLCBkb3VibGUpOwpleHRlcm4gZG91YmxlIHNjYWxibiAoZG91YmxlLCBpbnQpOwojIDIzMSAi
L3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4z
L2luY2x1ZGUvbWF0aC5oIiAzIDQKZXh0ZXJuIGRvdWJsZSBnYW1tYV9yIChkb3VibGUsIGludCAq
KTsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWFfciAoZG91YmxlLCBpbnQgKik7CiMgMjQyICIvc3BhY2Uv
c25iL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVk
ZS9tYXRoLmgiIDMgNApleHRlcm4gZmxvYXQgbW9kZmYgKGZsb2F0LCBmbG9hdCAqKTsKCgoKCgoj
IDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45
LzMuMy9pbmNsdWRlL2Zsb2F0aW5ncG9pbnQuaCIgMSAzIDQKIyAyMCAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvZmxvYXRp
bmdwb2ludC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWZsb2F0aW5ncG9pbnQuaAkyLjUJOTkv
MDYvMjIgU01JIgoKCgoKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9zeXMvaWVlZWZwLmgiIDEgMyA0CiMgMTcgIi9z
cGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9p
bmNsdWRlL3N5cy9pZWVlZnAuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylpZWVlZnAuaAkyLjgg
OTkvMTAvMjkiCgoKZXh0ZXJuICJDIiB7CgoKCgoKCmVudW0gZnBfZGlyZWN0aW9uX3R5cGUgewog
ICAgICAgIGZwX25lYXJlc3QgPSAwLAogICAgICAgIGZwX3RvemVybyA9IDEsCiAgICAgICAgZnBf
cG9zaXRpdmUgPSAyLAogICAgICAgIGZwX25lZ2F0aXZlID0gMwp9OwoKZW51bSBmcF9wcmVjaXNp
b25fdHlwZSB7CiAgICAgICAgZnBfZXh0ZW5kZWQgPSAwLAogICAgICAgIGZwX3NpbmdsZSA9IDEs
CiAgICAgICAgZnBfZG91YmxlID0gMiwKICAgICAgICBmcF9wcmVjaXNpb25fMyA9IDMKfTsKCmVu
dW0gZnBfZXhjZXB0aW9uX3R5cGUgewogICAgICAgIGZwX2luZXhhY3QgPSAwLAogICAgICAgIGZw
X2RpdmlzaW9uID0gMSwKICAgICAgICBmcF91bmRlcmZsb3cgPSAyLAogICAgICAgIGZwX292ZXJm
bG93ID0gMywKICAgICAgICBmcF9pbnZhbGlkID0gNAp9OwoKZW51bSBmcF90cmFwX2VuYWJsZV90
eXBlIHsKICAgICAgICBmcF90cmFwX2luZXhhY3QgPSAwLAogICAgICAgIGZwX3RyYXBfZGl2aXNp
b24gPSAxLAogICAgICAgIGZwX3RyYXBfdW5kZXJmbG93ID0gMiwKICAgICAgICBmcF90cmFwX292
ZXJmbG93ID0gMywKICAgICAgICBmcF90cmFwX2ludmFsaWQgPSA0Cn07CiMgMTMzICIvc3BhY2Uv
c25iL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVk
ZS9zeXMvaWVlZWZwLmgiIDMgNAplbnVtIGZwX2NsYXNzX3R5cGUgewogICAgICAgIGZwX3plcm8g
PSAwLAogICAgICAgIGZwX3N1Ym5vcm1hbCA9IDEsCiAgICAgICAgZnBfbm9ybWFsID0gMiwKICAg
ICAgICBmcF9pbmZpbml0eSA9IDMsCiAgICAgICAgZnBfcXVpZXQgPSA0LAogICAgICAgIGZwX3Np
Z25hbGluZyA9IDUKfTsKCgp9CiMgMjYgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi45LzMuMy9pbmNsdWRlL2Zsb2F0aW5ncG9pbnQuaCIgMiAzIDQK
CgpleHRlcm4gIkMiIHsKIyA2MiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjkvMy4zL2luY2x1ZGUvZmxvYXRpbmdwb2ludC5oIiAzIDQKdHlwZWRl
ZiBpbnQgc2lnZnBlX2NvZGVfdHlwZTsKCnR5cGVkZWYgdm9pZCAoKnNpZ2ZwZV9oYW5kbGVyX3R5
cGUpKCk7CgoKCgoKZXh0ZXJuIHNpZ2ZwZV9oYW5kbGVyX3R5cGUgc2lnZnBlIChzaWdmcGVfY29k
ZV90eXBlLCBzaWdmcGVfaGFuZGxlcl90eXBlKTsKCgoKCnR5cGVkZWYgZmxvYXQgc2luZ2xlOwoK
Cgp0eXBlZGVmIHVuc2lnbmVkIGV4dGVuZGVkWzNdOwoKCnR5cGVkZWYgbG9uZyBkb3VibGUgcXVh
ZHJ1cGxlOwoKdHlwZWRlZiB1bnNpZ25lZCBmcF9leGNlcHRpb25fZmllbGRfdHlwZTsKIyA5NCAi
L3NwYWNlL3NuYi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjkvMy4z
L2luY2x1ZGUvZmxvYXRpbmdwb2ludC5oIiAzIDQKdHlwZWRlZiBjaGFyIGRlY2ltYWxfc3RyaW5n
WzUxMl07CgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGVudW0gZnBfY2xhc3NfdHlwZSBmcGNs
YXNzOwogICAgICAgIGludCBzaWduOwogICAgICAgIGludCBleHBvbmVudDsKICAgICAgICBkZWNp
bWFsX3N0cmluZyBkczsKCgogICAgICAgIGludCBtb3JlOwoKCiAgICAgICAgaW50IG5kaWdpdHM7
CgoKfSBkZWNpbWFsX3JlY29yZDsKCmVudW0gZGVjaW1hbF9mb3JtIHsKICAgICAgICBmaXhlZF9m
b3JtLAoKCiAgICAgICAgZmxvYXRpbmdfZm9ybQoKfTsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAg
ICBlbnVtIGZwX2RpcmVjdGlvbl90eXBlIHJkOwoKICAgICAgICBlbnVtIGRlY2ltYWxfZm9ybSBk
ZjsKCiAgICAgICAgaW50IG5kaWdpdHM7Cn0gZGVjaW1hbF9tb2RlOwoKZW51bSBkZWNpbWFsX3N0
cmluZ19mb3JtIHsKICAgICAgICBpbnZhbGlkX2Zvcm0sCiAgICAgICAgd2hpdGVzcGFjZV9mb3Jt
LAogICAgICAgIGZpeGVkX2ludF9mb3JtLAogICAgICAgIGZpeGVkX2ludGRvdF9mb3JtLAogICAg
ICAgIGZpeGVkX2RvdGZyYWNfZm9ybSwKICAgICAgICBmaXhlZF9pbnRkb3RmcmFjX2Zvcm0sCiAg
ICAgICAgZmxvYXRpbmdfaW50X2Zvcm0sCiAgICAgICAgZmxvYXRpbmdfaW50ZG90X2Zvcm0sCiAg
ICAgICAgZmxvYXRpbmdfZG90ZnJhY19mb3JtLAogICAgICAgIGZsb2F0aW5nX2ludGRvdGZyYWNf
Zm9ybSwKICAgICAgICBpbmZfZm9ybSwKICAgICAgICBpbmZpbml0eV9mb3JtLAogICAgICAgIG5h
bl9mb3JtLAogICAgICAgIG5hbnN0cmluZ19mb3JtCn07CgpleHRlcm4gdm9pZCBzaW5nbGVfdG9f
ZGVjaW1hbCAoc2luZ2xlICosIGRlY2ltYWxfbW9kZSAqLCBkZWNpbWFsX3JlY29yZCAqLCBmcF9l
eGNlcHRpb25fZmllbGRfdHlwZSAqKTsKCmV4dGVybiB2b2lkIGRvdWJsZV90b19kZWNpbWFsIChk
b3VibGUgKiwgZGVjaW1hbF9tb2RlICosIGRlY2ltYWxfcmVjb3JkICosIGZwX2V4Y2VwdGlvbl9m
aWVsZF90eXBlICopOwoKZXh0ZXJuIHZvaWQgZXh0ZW5kZWRfdG9fZGVjaW1hbCAoZXh0ZW5kZWQg
KiwgZGVjaW1hbF9tb2RlICosIGRlY2ltYWxfcmVjb3JkICosIGZwX2V4Y2VwdGlvbl9maWVsZF90
eXBlICopOwoKZXh0ZXJuIHZvaWQgcXVhZHJ1cGxlX3RvX2RlY2ltYWwgKHF1YWRydXBsZSAqLCBk
ZWNpbWFsX21vZGUgKiwgZGVjaW1hbF9yZWNvcmQgKiwgZnBfZXhjZXB0aW9uX2ZpZWxkX3R5cGUg
Kik7CgoKZXh0ZXJuIHZvaWQgZGVjaW1hbF90b19zaW5nbGUgKHNpbmdsZSAqLCBkZWNpbWFsX21v
ZGUgKiwgZGVjaW1hbF9yZWNvcmQgKiwgZnBfZXhjZXB0aW9uX2ZpZWxkX3R5cGUgKik7CgpleHRl
cm4gdm9pZCBkZWNpbWFsX3RvX2RvdWJsZSAoZG91YmxlICosIGRlY2ltYWxfbW9kZSAqLCBkZWNp
bWFsX3JlY29yZCAqLCBmcF9leGNlcHRpb25fZmllbGRfdHlwZSAqKTsKCmV4dGVybiB2b2lkIGRl
Y2ltYWxfdG9fZXh0ZW5kZWQgKGV4dGVuZGVkICosIGRlY2ltYWxfbW9kZSAqLCBkZWNpbWFsX3Jl
Y29yZCAqLCBmcF9leGNlcHRpb25fZmllbGRfdHlwZSAqKTsKCmV4dGVybiB2b2lkIGRlY2ltYWxf
dG9fcXVhZHJ1cGxlIChxdWFkcnVwbGUgKiwgZGVjaW1hbF9tb2RlICosIGRlY2ltYWxfcmVjb3Jk
ICosIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopOwoKCmV4dGVybiB2b2lkIHN0cmluZ190b19k
ZWNpbWFsIChjaGFyICoqLCBpbnQsIGludCwgZGVjaW1hbF9yZWNvcmQgKiwgZW51bSBkZWNpbWFs
X3N0cmluZ19mb3JtICosIGNoYXIgKiopOwoKZXh0ZXJuIHZvaWQgZnVuY190b19kZWNpbWFsIChj
aGFyICoqLCBpbnQsIGludCwgZGVjaW1hbF9yZWNvcmQgKiwgZW51bSBkZWNpbWFsX3N0cmluZ19m
b3JtICosIGNoYXIgKiosIGludCAoKikodm9pZCksIGludCAqLCBpbnQgKCopKGludCkpOwoKCmV4
dGVybiB2b2lkIGZpbGVfdG9fZGVjaW1hbCAoY2hhciAqKiwgaW50LCBpbnQsIGRlY2ltYWxfcmVj
b3JkICosIGVudW0gZGVjaW1hbF9zdHJpbmdfZm9ybSAqLCBjaGFyICoqLCBGSUxFICosIGludCAq
KTsKCgoKZXh0ZXJuIGNoYXIgKnNlY29udmVydCAoc2luZ2xlICosIGludCwgaW50ICosIGludCAq
LCBjaGFyICopOwpleHRlcm4gY2hhciAqc2Zjb252ZXJ0IChzaW5nbGUgKiwgaW50LCBpbnQgKiwg
aW50ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpzZ2NvbnZlcnQgKHNpbmdsZSAqLCBpbnQsIGlu
dCwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmVjb252ZXJ0IChkb3VibGUsIGludCwgaW50ICosIGlu
dCAqLCBjaGFyICopOwpleHRlcm4gY2hhciAqZmNvbnZlcnQgKGRvdWJsZSwgaW50LCBpbnQgKiwg
aW50ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpnY29udmVydCAoZG91YmxlLCBpbnQsIGludCwg
Y2hhciAqKTsKZXh0ZXJuIGNoYXIgKnFlY29udmVydCAocXVhZHJ1cGxlICosIGludCwgaW50ICos
IGludCAqLCBjaGFyICopOwpleHRlcm4gY2hhciAqcWZjb252ZXJ0IChxdWFkcnVwbGUgKiwgaW50
LCBpbnQgKiwgaW50ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpxZ2NvbnZlcnQgKHF1YWRydXBs
ZSAqLCBpbnQsIGludCwgY2hhciAqKTsKCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUsIGludCwg
aW50ICosIGludCAqKTsKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSwgaW50LCBpbnQgKiwgaW50
ICopOwpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlLCBpbnQsIGNoYXIgKik7CgoKCgoKZXh0ZXJu
IGRvdWJsZSBhdG9mIChjb25zdCBjaGFyICopOwpleHRlcm4gZG91YmxlIHN0cnRvZCAoY29uc3Qg
Y2hhciAqLCBjaGFyICoqKTsKCgp9CiMgMjQ5ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOS8zLjMvaW5jbHVkZS9tYXRoLmgiIDIgMyA0CgoKCgoK
fQojIDUyICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY21hdGgiIDIgMwoj
IDc5ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvY21hdGgiIDMKbmFtZXNw
YWNlIHN0ZAp7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2NtYXRoX3Bvd2VyKF9U
cCwgdW5zaWduZWQgaW50KTsKCiAgaW5saW5lIGRvdWJsZQogIGFicyhkb3VibGUgX194KQogIHsg
cmV0dXJuIF9fYnVpbHRpbl9mYWJzKF9feCk7IH0KCiAgaW5saW5lIGZsb2F0CiAgYWJzKGZsb2F0
IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsgfQoKICBpbmxpbmUgbG9uZyBk
b3VibGUKICBhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChf
X3gpOyB9CgoKCgoKICBpbmxpbmUgZmxvYXQKICBhY29zKGZsb2F0IF9feCkgeyByZXR1cm4gOjph
Y29zKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgogIHVzaW5nIDo6YWNvczsKCgoKCgog
IGlubGluZSBsb25nIGRvdWJsZQogIGFjb3MobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFj
b3Moc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCiAgdXNpbmcgOjphc2luOwoKCgoKCiAg
aW5saW5lIGZsb2F0CiAgYXNpbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXNpbihzdGF0aWNfY2Fz
dDxkb3VibGU+KF9feCkpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXNpbihsb25n
IGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXNpbihzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9
CgoKICB1c2luZyA6OmF0YW47CgoKCgoKICBpbmxpbmUgZmxvYXQKICBhdGFuKGZsb2F0IF9feCkg
eyByZXR1cm4gOjphdGFuKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgoKCgoKICBpbmxp
bmUgbG9uZyBkb3VibGUKICBhdGFuKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphdGFuKHN0
YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgogIHVzaW5nIDo6YXRhbjI7CgoKCgoKICBpbmxp
bmUgZmxvYXQKICBhdGFuMihmbG9hdCBfX3ksIGZsb2F0IF9feCkKICB7IHJldHVybiA6OmF0YW4y
KHN0YXRpY19jYXN0PGRvdWJsZT4oX195KSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoK
CgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4yKGxvbmcgZG91YmxlIF9feSwgbG9uZyBk
b3VibGUgX194KQogIHsgcmV0dXJuIDo6YXRhbjIoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3kpLCBz
dGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1c2luZyA6OmNlaWw7CgoKCgoKICBpbmxp
bmUgZmxvYXQKICBjZWlsKGZsb2F0IF9feCkgeyByZXR1cm4gOjpjZWlsKHN0YXRpY19jYXN0PGRv
dWJsZT4oX194KSk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjZWlsKGxvbmcgZG91
YmxlIF9feCkgeyByZXR1cm4gOjpjZWlsKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgog
IHVzaW5nIDo6Y29zOwoKICBpbmxpbmUgZmxvYXQKICBjb3MoZmxvYXQgX194KQogIHsgcmV0dXJu
IF9fYnVpbHRpbl9jb3NmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29zKGxvbmcg
ZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fY29zbChfX3gpOyB9CgogIHVzaW5nIDo6
Y29zaDsKCgoKCgogIGlubGluZSBmbG9hdAogIGNvc2goZmxvYXQgX194KSB7IHJldHVybiA6OmNv
c2goc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJs
ZQogIGNvc2gobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmNvc2goc3RhdGljX2Nhc3Q8ZG91
YmxlPihfX3gpKTsgfQoKCiAgdXNpbmcgOjpleHA7CgoKCgoKICBpbmxpbmUgZmxvYXQKICBleHAo
ZmxvYXQgX194KSB7IHJldHVybiA6OmV4cChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoK
CgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZXhwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4g
OjpleHAoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCiAgdXNpbmcgOjpmYWJzOwoKICBp
bmxpbmUgZmxvYXQKICBmYWJzKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2Yo
X194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmYWJzKGxvbmcgZG91YmxlIF9feCkKICB7
IHJldHVybiBfX2J1aWx0aW5fZmFic2woX194KTsgfQoKICB1c2luZyA6OmZsb29yOwoKCgoKCiAg
aW5saW5lIGZsb2F0CiAgZmxvb3IoZmxvYXQgX194KSB7IHJldHVybiA6OmZsb29yKHN0YXRpY19j
YXN0PGRvdWJsZT4oX194KSk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmbG9vcihs
b25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Zmxvb3Ioc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gp
KTsgfQoKCiAgdXNpbmcgOjpmbW9kOwoKCgoKCiAgaW5saW5lIGZsb2F0CiAgZm1vZChmbG9hdCBf
X3gsIGZsb2F0IF9feSkKICB7IHJldHVybiA6OmZtb2Qoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gp
LCBzdGF0aWNfY2FzdDxkb3VibGU+KF9feSkpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91Ymxl
CiAgZm1vZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkKICB7IHJldHVybiA6OmZt
b2Qoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpLCBzdGF0aWNfY2FzdDxkb3VibGU+KF9feSkpOyB9
CgoKICB1c2luZyA6OmZyZXhwOwoKCgoKCiAgaW5saW5lIGZsb2F0CiAgZnJleHAoZmxvYXQgX194
LCBpbnQqIF9fZXhwKSB7IHJldHVybiA6OmZyZXhwKF9feCwgX19leHApOyB9CgoKCgoKCiAgaW5s
aW5lIGxvbmcgZG91YmxlCiAgZnJleHAobG9uZyBkb3VibGUgX194LCBpbnQqIF9fZXhwKQogIHsg
cmV0dXJuIDo6ZnJleHAoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpLCBfX2V4cCk7IH0KCgogIHVz
aW5nIDo6bGRleHA7CgoKCgoKICBpbmxpbmUgZmxvYXQKICBsZGV4cChmbG9hdCBfX3gsIGludCBf
X2V4cCkKICB7IHJldHVybiA6OmxkZXhwKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSwgX19leHAp
OyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbGRleHAobG9uZyBkb3VibGUgX194LCBp
bnQgX19leHApCiAgeyByZXR1cm4gOjpsZGV4cChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCksIF9f
ZXhwKTsgfQoKCiAgdXNpbmcgOjpsb2c7CgoKCgoKICBpbmxpbmUgZmxvYXQgbG9nKGZsb2F0IF9f
eCkKICB7IHJldHVybiA6OmxvZyhzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKCgoKCiAg
aW5saW5lIGxvbmcgZG91YmxlCiAgbG9nKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2co
c3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCiAgdXNpbmcgOjpsb2cxMDsKCgoKCgogIGlu
bGluZSBmbG9hdAogIGxvZzEwKGZsb2F0IF9feCkgeyByZXR1cm4gOjpsb2cxMChzdGF0aWNfY2Fz
dDxkb3VibGU+KF9feCkpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbG9nMTAobG9u
ZyBkb3VibGUgX194KSB7IHJldHVybiA6OmxvZzEwKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7
IH0KCgogIHVzaW5nIDo6bW9kZjsKCgogIGlubGluZSBmbG9hdAogIG1vZGYoZmxvYXQgX194LCBm
bG9hdCogX19pcHRyKSB7IHJldHVybiA6Om1vZGZmKF9feCwgX19pcHRyKTsgfQojIDM3OCAiL3Nw
YWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2NtYXRoIiAzCiAgaW5saW5lIGxvbmcg
ZG91YmxlCiAgbW9kZihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlKiBfX2lwdHIpCiAgewog
ICAgZG91YmxlIF9fdG1wOwogICAgZG91YmxlIF9fcmVzID0gOjptb2RmKHN0YXRpY19jYXN0PGRv
dWJsZT4oX194KSwgJl9fdG1wKTsKICAgICogX19pcHRyID0gc3RhdGljX2Nhc3Q8bG9uZyBkb3Vi
bGU+KF9fdG1wKTsKICAgIHJldHVybiBfX3JlczsKICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICBpbmxpbmUgX1RwCiAgICBfX3Bvd19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikKICAg
IHsKICAgICAgcmV0dXJuIF9fbiA8IDAKICAgICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9f
eCwgLV9fbikKICAgICAgICA6IF9fY21hdGhfcG93ZXIoX194LCBfX24pOwogICAgfQoKICB1c2lu
ZyA6OnBvdzsKCgoKCgogIGlubGluZSBmbG9hdAogIHBvdyhmbG9hdCBfX3gsIGZsb2F0IF9feSkK
ICB7IHJldHVybiA6OnBvdyhzdGF0aWNfY2FzdDxkb3VibGU+KF9feCksIHN0YXRpY19jYXN0PGRv
dWJsZT4oX195KSk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3kpCiAgeyByZXR1cm4gOjpwb3coc3RhdGljX2Nhc3Q8ZG91
YmxlPihfX3gpLCBzdGF0aWNfY2FzdDxkb3VibGU+KF9feSkpOyB9CgoKICBpbmxpbmUgZG91Ymxl
CiAgcG93KGRvdWJsZSBfX3gsIGludCBfX2kpCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwg
X19pKTsgfQoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQgX194LCBpbnQgX19uKQogIHsgcmV0
dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgcG93
KGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBf
X24pOyB9CgogIHVzaW5nIDo6c2luOwoKICBpbmxpbmUgZmxvYXQKICBzaW4oZmxvYXQgX194KQog
IHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5mKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg
c2luKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc2lubChfX3gpOyB9Cgog
IHVzaW5nIDo6c2luaDsKCgoKCgogIGlubGluZSBmbG9hdAogIHNpbmgoZmxvYXQgX194KSB7IHJl
dHVybiA6OnNpbmgoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCgoKCgogIGlubGluZSBs
b25nIGRvdWJsZQogIHNpbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnNpbmgoc3RhdGlj
X2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCiAgdXNpbmcgOjpzcXJ0OwoKICBpbmxpbmUgZmxvYXQK
ICBzcXJ0KGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc3FydGYoX194KTsgfQoKICBp
bmxpbmUgbG9uZyBkb3VibGUKICBzcXJ0KGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1
aWx0aW5fc3FydGwoX194KTsgfQoKICB1c2luZyA6OnRhbjsKCgoKCgogIGlubGluZSBmbG9hdAog
IHRhbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFuKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7
IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0YW4obG9uZyBkb3VibGUgX194KSB7IHJl
dHVybiA6OnRhbihzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1c2luZyA6OnRhbmg7
CgoKCgoKICBpbmxpbmUgZmxvYXQKICB0YW5oKGZsb2F0IF9feCkgeyByZXR1cm4gOjp0YW5oKHN0
YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0
YW5oKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjp0YW5oKHN0YXRpY19jYXN0PGRvdWJsZT4o
X194KSk7IH0KCn0KIyA2NTQgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9j
bWF0aCIgMwojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Nt
YXRoLnRjYyIgMSAzCiMgMzUgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9i
aXRzL2NtYXRoLnRjYyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBfVHAKICAgIF9fY21hdGhfcG93ZXIoX1RwIF9feCwgdW5zaWduZWQgaW50IF9fbikKICAg
IHsKICAgICAgX1RwIF9feSA9IF9fbiAlIDIgPyBfX3ggOiAxOwoKICAgICAgd2hpbGUgKF9fbiA+
Pj0gMSkKICAgICAgICB7CiAgICAgICAgICBfX3ggPSBfX3ggKiBfX3g7CiAgICAgICAgICBpZiAo
X19uICUgMikKICAgICAgICAgICAgX195ID0gX195ICogX194OwogICAgICAgIH0KCiAgICAgIHJl
dHVybiBfX3k7CiAgICB9Cn0KIyA2NTUgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysr
LzMuMy9jbWF0aCIgMiAzCiMgNDIgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu
My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwv
aW5jbHVkZS9jKysvMy4zL2xpbWl0cyIgMSAzCiMgNDcgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9saW1pdHMiIDMKIyAxNTAgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9saW1pdHMiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgZW51bSBmbG9hdF9yb3VuZF9z
dHlsZQogIHsKICAgIHJvdW5kX2luZGV0ZXJtaW5hdGUgPSAtMSwKICAgIHJvdW5kX3Rvd2FyZF96
ZXJvID0gMCwKICAgIHJvdW5kX3RvX25lYXJlc3QgPSAxLAogICAgcm91bmRfdG93YXJkX2luZmlu
aXR5ID0gMiwKICAgIHJvdW5kX3Rvd2FyZF9uZWdfaW5maW5pdHkgPSAzCiAgfTsKCiAgZW51bSBm
bG9hdF9kZW5vcm1fc3R5bGUKICB7CiAgICBkZW5vcm1faW5kZXRlcm1pbmF0ZSA9IC0xLAogICAg
ZGVub3JtX2Fic2VudCA9IDAsCiAgICBkZW5vcm1fcHJlc2VudCA9IDEKICB9OwoKCgoKICBzdHJ1
Y3QgX19udW1lcmljX2xpbWl0c19iYXNlCiAgewogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl
Y2lhbGl6ZWQgPSBmYWxzZTsKCiAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDA7CiAgICBz
dGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMDsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Np
Z25lZCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwog
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBp
bnQgcmFkaXggPSAwOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQgPSAwOwogICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9
IDA7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y
bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1
OSA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IGZhbHNlOwogICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJv
b2wgdHJhcHMgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9
IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g
cm91bmRfdG93YXJkX3plcm87CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3Ry
dWN0IG51bWVyaWNfbGltaXRzIDogcHVibGljIF9fbnVtZXJpY19saW1pdHNfYmFzZQogICAgewog
ICAgICBzdGF0aWMgX1RwIG1pbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigw
KTsgfQogICAgICBzdGF0aWMgX1RwIG1heCgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIGVwc2lsb24oKSB0aHJvdygpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCByb3VuZF9lcnJvcigpIHRocm93
KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIGluZmlu
aXR5KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRp
YyBfVHAgcXVpZXRfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9
CiAgICAgIHN0YXRpYyBfVHAgc2lnbmFsaW5nX05hTigpIHRocm93KCkgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIGRlbm9ybV9taW4oKSB0aHJvdygpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAg
c3RydWN0IG51bWVyaWNfbGltaXRzPGJvb2w+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBib29sIG1pbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgbWF4KCkgdGhyb3coKQog
ICAgICB7IHJldHVybiB0cnVlOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdl
ciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBib29sIGVwc2lsb24oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHJvdW5kX2Vy
cm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu
dDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBz
dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVp
ZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFO
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y
bSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9z
cyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHF1aWV0X05hTigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5nX05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgZGVub3JtX21p
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVk
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgoKCgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91
bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBs
YXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxjaGFyPgogICAgewogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgY2hhciBtaW4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgoKGNoYXIpKC0xKSA8IDApID8gKGNoYXIpMSA8PCAo
c2l6ZW9mKGNoYXIpICogOCAtICgoY2hhcikoLTEpIDwgMCkpIDogKGNoYXIpMCk7IH0KICAgICAg
c3RhdGljIGNoYXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoKChjaGFyKSgtMSkgPCAw
KSA/ICgoY2hhcikxIDw8IChzaXplb2YoY2hhcikgKiA4IC0gKChjaGFyKSgtMSkgPCAwKSkpIC0g
MSA6IH4oY2hhcikwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAoc2l6ZW9m
KGNoYXIpICogOCAtICgoY2hhcikoLTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0czEwID0gKChzaXplb2YoY2hhcikgKiA4IC0gKChjaGFyKSgtMSkgPCAwKSkgKiA2NDMgLyAy
MTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gKChjaGFyKSgtMSkgPCAw
KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRp
eCA9IDI7CiAgICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IDA7IH0KICAgICAgc3RhdGljIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQx
MCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjaGFy
IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGlj
IGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAg
c3RhdGljIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigp
OyB9CiAgICAgIHN0YXRpYyBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1
NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2Jl
Zm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf
c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVj
dCBudW1lcmljX2xpbWl0czxzaWduZWQgY2hhcj4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1pbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gLTEyNyAtIDE7IH0KICAgICAgc3RhdGljIHNpZ25lZCBj
aGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAgICBzdGF0aWMgY29u
c3QgaW50IGRpZ2l0cyA9IChzaXplb2Yoc2lnbmVkIGNoYXIpICogOCAtICgoc2lnbmVkIGNoYXIp
KC0xKSA8IDApKTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9ICgoc2l6ZW9mKHNp
Z25lZCBjaGFyKSAqIDggLSAoKHNpZ25lZCBjaGFyKSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4
YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRp
YyBzaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAg
IHN0YXRpYyBzaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g
MDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHNpZ25lZCBj
aGFyIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQg
Y2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRp
YyBzaWduZWQgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGRlbm9y
bV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigw
KTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJk
X3plcm87CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5z
aWduZWQgY2hhcj4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQg
PSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMTI3ICogMlUgKyAxOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
cyA9IChzaXplb2YodW5zaWduZWQgY2hhcikgKiA4IC0gKCh1bnNpZ25lZCBjaGFyKSgtMSkgPCAw
KSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZih1bnNpZ25lZCBj
aGFyKSAqIDggLSAoKHVuc2lnbmVkIGNoYXIpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYpOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1
bnNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAg
c3RhdGljIHVuc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9
IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxv
YXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBxdWlldF9OYU4oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNp
Z25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y
ZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5
bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBu
dW1lcmljX2xpbWl0czx3Y2hhcl90PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
cGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgd2NoYXJfdCBtaW4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuICgoKHdjaGFyX3QpKC0xKSA8IDApID8gKHdjaGFyX3QpMSA8PCAoc2l6ZW9m
KHdjaGFyX3QpICogOCAtICgod2NoYXJfdCkoLTEpIDwgMCkpIDogKHdjaGFyX3QpMCk7IH0KICAg
ICAgc3RhdGljIHdjaGFyX3QgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoKCh3Y2hhcl90
KSgtMSkgPCAwKSA/ICgod2NoYXJfdCkxIDw8IChzaXplb2Yod2NoYXJfdCkgKiA4IC0gKCh3Y2hh
cl90KSgtMSkgPCAwKSkpIC0gMSA6IH4od2NoYXJfdCkwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMgPSAoc2l6ZW9mKHdjaGFyX3QpICogOCAtICgod2NoYXJfdCkoLTEpIDwgMCkp
OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChzaXplb2Yod2NoYXJfdCkgKiA4
IC0gKCh3Y2hhcl90KSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc2lnbmVkID0gKCh3Y2hhcl90KSgtMSkgPCAwKTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB3
Y2hhcl90IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGlj
IHdjaGFyX3Qgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50
ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
c2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0
eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IGluZmluaXR5KCkg
dGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAgc3RhdGljIHdjaGFyX3Qg
cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAgc3Rh
dGljIHdjaGFyX3Qgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJf
dCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHdjaGFyX3QoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl
ID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVt
ZXJpY19saW1pdHM8c2hvcnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIC0zMjc2NyAtIDE7IH0KICAgICAgc3RhdGljIHNob3J0IG1heCgpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMzI3Njc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gKHNp
emVvZihzaG9ydCkgKiA4IC0gKChzaG9ydCkoLTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0czEwID0gKChzaXplb2Yoc2hvcnQpICogOCAtICgoc2hvcnQpKC0xKSA8IDApKSAq
IDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g
MjsKICAgICAgc3RhdGljIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7
IH0KICAgICAgc3RhdGljIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAg
PSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs
b2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2hvcnQg
aW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KICAgICAgc3RhdGlj
IHNob3J0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAg
ICBzdGF0aWMgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hv
cnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gc2hvcnQoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g
cm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJp
Y19saW1pdHM8dW5zaWduZWQgc2hvcnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1h
eCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMzI3NjcgKiAyVSArIDE7IH0KCiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzID0gKHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA4IC0gKCh1bnNp
Z25lZCBzaG9ydCkoLTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0g
KChzaXplb2YodW5zaWduZWQgc2hvcnQpICogOCAtICgodW5zaWduZWQgc2hvcnQpKC0xKSA8IDAp
KSAqIDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRp
eCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCByb3VuZF9lcnJvcigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p
bmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9y
bV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl
OwoKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVu
c2lnbmVkIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzaWdu
YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBz
aG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlbm9ybV9taW4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1
bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAg
ICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8aW50PgogICAgewog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0
aWMgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gLTIxNDc0ODM2NDcgLSAxOyB9CiAg
ICAgIHN0YXRpYyBpbnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3OyB9
CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXplb2YoaW50KSAqIDggLSAoKGlu
dCkoLTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChzaXplb2Yo
aW50KSAqIDggLSAoKGludCkoLTEpIDwgMCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu
dGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgaW50IGVwc2lsb24o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGludCByb3VuZF9lcnJv
cigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g
MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl
bm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOwoKICAgICAgc3RhdGljIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHF1aWV0X05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50
IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
MCk7IH0KICAgICAgc3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1
NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2Jl
Zm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf
c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVj
dCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg
bWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3ICogMlUgKyAxOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXplb2YodW5zaWduZWQgaW50KSAqIDggLSAo
KHVuc2lnbmVkIGludCkoLTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEw
ID0gKChzaXplb2YodW5zaWduZWQgaW50KSAqIDggLSAoKHVuc2lnbmVkIGludCkoLTEpIDwgMCkp
ICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4
ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcm91bmRfZXJyb3IoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p
dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz
ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGlu
dCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBzaWduYWxpbmdfTmFOKCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAg
IHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55
bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxl
IHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAg
ICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAtMjE0NzQ4MzY0N0wgLSAxOyB9CiAgICAgIHN0YXRpYyBsb25nIG1h
eCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0N0w7IH0KCiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgZGlnaXRzID0gKHNpemVvZihsb25nKSAqIDggLSAoKGxvbmcpKC0xKSA8IDApKTsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9ICgoc2l6ZW9mKGxvbmcpICogOCAtICgo
bG9uZykoLTEpIDwgMCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu
dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBz
dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2Vu
dDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAg
ICBzdGF0aWMgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBzaWdu
YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsg
fQogICAgICBzdGF0aWMgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZv
cmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0
eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3Qg
bnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25n
IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0N0wgKiAyVUwgKyAxOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXplb2YodW5zaWduZWQgbG9uZykgKiA4
IC0gKCh1bnNpZ25lZCBsb25nKSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzMTAgPSAoKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDggLSAoKHVuc2lnbmVkIGxvbmcpKC0x
KSA8IDApKSAqIDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVwc2lsb24oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcm91bmRfZXJy
b3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9
IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h
TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBk
ZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBm
YWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMg
dW5zaWduZWQgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9
IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07
CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nIGxvbmc+CiAgICB7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0
YXRpYyBsb25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAtOTIyMzM3MjAzNjg1
NDc3NTgwN0xMIC0gMTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIG1heCgpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gOTIyMzM3MjAzNjg1NDc3NTgwN0xMOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0cyA9IChzaXplb2YobG9uZyBsb25nKSAqIDggLSAoKGxvbmcgbG9uZykoLTEpIDwg
MCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChzaXplb2YobG9uZyBsb25n
KSAqIDggLSAoKGxvbmcgbG9uZykoLTEpIDwgMCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBsb25n
IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGxvbmcg
bG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
YWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUg
aGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k
ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcgbG9uZyBpbmZpbml0eSgpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICBz
dGF0aWMgbG9uZyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIHNpZ25hbGluZ19O
YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0K
ICAgICAgc3RhdGljIGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu
ZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg
cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAg
IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nIGxvbmc+CiAgICB7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNp
Z25lZCBsb25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiA5MjIz
MzcyMDM2ODU0Nzc1ODA3TEwgKiAyVUxMICsgMTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMgPSAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykgKiA4IC0gKCh1bnNpZ25lZCBsb25n
IGxvbmcpKC0xKSA8IDApKTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9ICgoc2l6
ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykgKiA4IC0gKCh1bnNpZ25lZCBsb25nIGxvbmcpKC0xKSA8
IDApKSAqIDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCBy
YWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHJv
dW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x
dWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O
YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu
b3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s
b3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGluZmluaXR5KCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDAp
OyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAg
IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0
aWMgdW5zaWduZWQgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3Vu
ZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu
ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxh
dGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGZsb2F0PgogICAgewogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgZmxvYXQgbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAgc3RhdGlj
IGZsb2F0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMy40MDI4MjM0N2UrMzhGOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDI0OwogICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0czEwID0gNjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4
ID0gMjsKICAgICAgc3RhdGljIGZsb2F0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IDEuMTkyMDkyOTBlLTdGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCByb3VuZF9lcnJvcigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMC41RjsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQgPSAoLTEyNSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAo
LTM3KTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMjg7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzODsKCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19pbmZpbml0eQogICAgICAgID0gX19idWlsdGluX2h1Z2VfdmFsZiAoKSAvIDIgPT0g
X19idWlsdGluX2h1Z2VfdmFsZiAoKTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0
X05hTgogICAgICAgID0gX19idWlsdGluX25hbmYgKCIiKSAhPSBfX2J1aWx0aW5fbmFuZiAoIiIp
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGhhc19xdWlldF9O
YU47CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybQogICAg
ICAgID0gMS40MDEyOTg0NmUtNDVGID8gZGVub3JtX3ByZXNlbnQgOiBkZW5vcm1fYWJzZW50Owog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0
YXRpYyBmbG9hdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gX19idWlsdGluX2h1
Z2VfdmFsZiAoKTsgfQogICAgICBzdGF0aWMgZmxvYXQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBfX2J1aWx0aW5fbmFuZiAoIiIpOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBzaWdu
YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBfX2J1aWx0aW5fbmFuc2YgKCIiKTsg
fQogICAgICBzdGF0aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MS40MDEyOTg0NmUtNDVGOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkKICAg
ICAgICA9IGhhc19pbmZpbml0eSAmJiBoYXNfcXVpZXRfTmFOICYmIGhhc19kZW5vcm0gPT0gZGVu
b3JtX3ByZXNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNz
X2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91
bmRfc3R5bGUgPSByb3VuZF90b19uZWFyZXN0OwogICAgfTsKCgoKCgogIHRlbXBsYXRlPD4KICAg
IHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBkb3VibGUgbWluKCkgdGhy
b3coKQogICAgICB7IHJldHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwODsgfQogICAgICBzdGF0
aWMgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS43OTc2OTMxMzQ4NjIzMTU3
ZSszMDg7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNTM7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxNTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln
bmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2OyB9CiAgICAgIHN0YXRpYyBkb3Vi
bGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuNTsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAoLTEwMjEpOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudDEwID0gKC0zMDcpOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudCA9IDEwMjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAz
MDg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkKICAgICAgICA9IF9fYnVp
bHRpbl9odWdlX3ZhbCAoKSAvIDIgPT0gX19idWlsdGluX2h1Z2VfdmFsICgpOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOCiAgICAgICAgPSBfX2J1aWx0aW5fbmFuICgiIikg
IT0gX19idWlsdGluX25hbiAoIiIpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFs
aW5nX05hTiA9IGhhc19xdWlldF9OYU47CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f
c3R5bGUgaGFzX2Rlbm9ybQogICAgICAgID0gNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQgPyBkZW5v
cm1fcHJlc2VudCA6IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k
ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gX19idWlsdGluX2h1Z2VfdmFsKCk7IH0KICAgICAgc3RhdGljIGRv
dWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9uYW4gKCIi
KTsgfQogICAgICBzdGF0aWMgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIF9fYnVpbHRpbl9uYW5zICgiIik7IH0KICAgICAgc3RhdGljIGRvdWJsZSBkZW5vcm1f
bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiA0Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNDsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5CiAgICAgICAgPSBoYXNfaW5maW5pdHkg
JiYgaGFzX3F1aWV0X05hTiAmJiBoYXNfZGVub3JtID09IGRlbm9ybV9wcmVzZW50OwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG9f
bmVhcmVzdDsKICAgIH07CgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1p
dHM8bG9uZyBkb3VibGU+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxp
emVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtaW4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDMuMzYyMTAzMTQzMTEyMDkzNTA2MjYyNjc3ODE3MzIxNzUyNjBlLTQ5MzJMOyB9
CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEu
MTg5NzMxNDk1MzU3MjMxNzY1MDg1NzU5MzI2NjI4MDA3MDJlKzQ5MzJMOyB9CgogICAgICBzdGF0
aWMgY29uc3QgaW50IGRpZ2l0cyA9IDExMzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMx
MCA9IDMzOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog
ICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MS45MjU5Mjk5NDQzODcyMzU4NTMwNTU5Nzc5NDI1ODQ5MjczMmUtMzRMOyB9CiAgICAgIHN0YXRp
YyBsb25nIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC41TDsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAoLTE2MzgxKTsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9ICgtNDkzMSk7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTYzODQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50MTAgPSA0OTMyOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5
CiAgICAgICAgPSBfX2J1aWx0aW5faHVnZV92YWxsICgpIC8gMiA9PSBfX2J1aWx0aW5faHVnZV92
YWxsICgpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOCiAgICAgICAgPSBf
X2J1aWx0aW5fbmFubCAoIiIpICE9IF9fYnVpbHRpbl9uYW5sICgiIik7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gaGFzX3F1aWV0X05hTjsKICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtCiAgICAgICAgPSA2LjQ3NTE3NTEx
OTQzODAyNTExMDkyNDQzODk1ODIyNzY0NjU1ZS00OTY2TCA/IGRlbm9ybV9wcmVzZW50IDogZGVu
b3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzCiAgICAg
ICAgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gX19idWlsdGluX2h1Z2VfdmFsbCAoKTsgfQogICAgICBzdGF0aWMgbG9u
ZyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBfX2J1aWx0aW5fbmFu
bCAoIiIpOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBfX2J1aWx0aW5fbmFuc2wgKCIiKTsgfQogICAgICBzdGF0aWMgbG9u
ZyBkb3VibGUgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gNi40NzUxNzUxMTk0
MzgwMjUxMTA5MjQ0Mzg5NTgyMjc2NDY1NWUtNDk2Nkw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2llYzU1OQogICAgICAgID0gaGFzX2luZmluaXR5ICYmIGhhc19xdWlldF9OYU4gJiYg
aGFzX2Rlbm9ybSA9PSBkZW5vcm1fcHJlc2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
Ym91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNl
OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3RvX25lYXJlc3Q7CiAgICB9OwoKCgoK
Cn0KIyA0NCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxl
X2ZhY2V0cy50Y2MiIDIgMwoKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvdHlwZWluZm8iIDEgMwojIDQwICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvdHlwZWluZm8iIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBfX2N4eGFiaXYxCnsKICBj
bGFzcyBfX2NsYXNzX3R5cGVfaW5mbzsKfQojIDU1ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvdHlwZWluZm8iIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgY2xhc3MgdHlw
ZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAgICB2aXJ0dWFsIH50eXBlX2luZm8oKTsKCiAgcHJp
dmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsKICAgIHR5
cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKCiAgcHJvdGVjdGVkOgogICAgY29uc3QgY2hhciAq
X19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdCB0eXBlX2luZm8oY29uc3QgY2hhciAq
X19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1YmxpYzoKCgoKICAgIGNvbnN0IGNoYXIqIG5hbWUo
KSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lOyB9CiMgMTAxICIvc3BhY2Uvc25iL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvdHlwZWluZm8iIDMKICAgIGJvb2wgYmVmb3JlKGNvbnN0IHR5cGVf
aW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0K
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyBy
ZXR1cm4gX19uYW1lID09IF9fYXJnLl9fbmFtZTsgfQoKICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gIW9wZXJhdG9yPT0oX19hcmcp
OyB9CgoKICBwdWJsaWM6CgogICAgdmlydHVhbCBib29sIF9faXNfcG9pbnRlcl9wKCkgY29uc3Q7
CgogICAgdmlydHVhbCBib29sIF9faXNfZnVuY3Rpb25fcCgpIGNvbnN0OwoKCgoKCgoKICAgIHZp
cnR1YWwgYm9vbCBfX2RvX2NhdGNoKGNvbnN0IHR5cGVfaW5mbyAqX190aHJfdHlwZSwgdm9pZCAq
Kl9fdGhyX29iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9fb3V0ZXIp
IGNvbnN0OwoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb191cGNhc3QoY29uc3QgX19jeHhhYml2MTo6
X19jbGFzc190eXBlX2luZm8gKl9fdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKipfX29ial9wdHIpIGNvbnN0OwogIH07CgoKCgoKCiAgY2xhc3MgYmFkX2Nhc3QgOiBw
dWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9jYXN0KCkgdGhyb3coKSB7IH0K
CgogICAgdmlydHVhbCB+YmFkX2Nhc3QoKSB0aHJvdygpOwogIH07CgoKICBjbGFzcyBiYWRfdHlw
ZWlkIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfdHlwZWlkICgpIHRo
cm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF90eXBlaWQoKSB0aHJvdygpOwogIH07Cn0KCn0K
IyA0NiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2Zh
Y2V0cy50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0
PgogICAgbG9jYWxlCiAgICBsb2NhbGU6OmNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBj
b25zdAogICAgewogICAgICBfSW1wbCogX190bXAgPSBuZXcgX0ltcGwoKl9NX2ltcGwsIDEpOwog
ICAgICBfX3RtcC0+X01fcmVwbGFjZV9mYWNldChfX290aGVyLl9NX2ltcGwsICZfRmFjZXQ6Omlk
KTsKICAgICAgcmV0dXJuIGxvY2FsZShfX3RtcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYm9vbAogICAg
bG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBz
dGQ6OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsKICAgICAgY29uc3QgX19jb2xsYXRl
X3R5cGUmIF9fY29sbGF0ZSA9IHVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOwogICAg
ICByZXR1cm4gKF9fY29sbGF0ZS5jb21wYXJlKF9fczEuZGF0YSgpLCBfX3MxLmRhdGEoKSArIF9f
czEubGVuZ3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zMi5kYXRhKCks
IF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2Fs
ZSYgX19sb2MpCiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2lkKCk7CiAg
ICAgIGxvY2FsZTo6ZmFjZXQqKiBfX2ZhY2V0cyA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsK
ICAgICAgaWYgKCEoX19pIDwgX19sb2MuX01faW1wbC0+X01fZmFjZXRzX3NpemUgJiYgX19mYWNl
dHNbX19pXSkpCiAgICAgICAgX190aHJvd19iYWRfY2FzdCgpOwogICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgX0ZhY2V0Jj4oKl9fZmFjZXRzW19faV0pOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xv
YykgdGhyb3coKQogICAgewogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOwog
ICAgICBsb2NhbGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7
CiAgICAgIHJldHVybiAoX19pIDwgX19sb2MuX01faW1wbC0+X01fZmFjZXRzX3NpemUgJiYgX19m
YWNldHNbX19pXSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg
IF9NX2V4dHJhY3RfZmxvYXQoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3Ry
aW5nJiBfX3h0cmMpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJU
PiBfX3RyYWl0c190eXBlOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygp
OwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9D
aGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2Vf
ZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBjb25zdCBjaGFyX3R5cGUg
X19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19taW51
cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKICAgICAgaW50IF9fcG9zID0gMDsKICAgICAgY2hhcl90
eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fcGx1
cykgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICAgICAgICAgICYmIF9fYmVn
ICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhf
X2MsIGNoYXIoKSk7CiAgICAgICAgICArK19fcG9zOwogICAgICAgICAgX19jID0gKigrK19fYmVn
KTsKICAgICAgICB9CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lk
ZW4oX1NfYXRvbXNbX01femVyb10pOwogICAgICBib29sIF9fZm91bmRfemVybyA9IGZhbHNlOwog
ICAgICB3aGlsZSAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYmIF9fYmVnICE9IF9f
ZW5kKQogICAgICAgIHsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICBfX2Zv
dW5kX3plcm8gPSB0cnVlOwogICAgICAgIH0KICAgICAgaWYgKF9fZm91bmRfemVybykKICAgICAg
ICB7CiAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICArK19f
cG9zOwogICAgICAgIH0KCgogICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfTV9FIC0gX01femVy
byArIDE7CiAgICAgIGNoYXJfdHlwZSBfX3dhdG9tc1tfX2xlbl07CiAgICAgIF9fY3R5cGUud2lk
ZW4oX1NfYXRvbXMsIF9TX2F0b21zICsgX19sZW4sIF9fd2F0b21zKTsKICAgICAgYm9vbCBfX2Zv
dW5kX2RlYyA9IGZhbHNlOwogICAgICBib29sIF9fZm91bmRfc2NpID0gZmFsc2U7CiAgICAgIGNv
bnN0IGNoYXJfdHlwZSBfX2RlYyA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOwoKICAgICAgc3RyaW5n
IF9fZm91bmRfZ3JvdXBpbmc7CiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5n
cm91cGluZygpOwogICAgICBib29sIF9fY2hlY2tfZ3JvdXBpbmcgPSBfX2dyb3VwaW5nLnNpemUo
KTsKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9
IF9fbnAudGhvdXNhbmRzX3NlcCgpOwoKICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAg
ICAgIHsKCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZp
bmQoX193YXRvbXMsIDEwLCBfX2MpOwoKCiAgICAgICAgICBpZiAoX19wICYmICFfX3RyYWl0c190
eXBlOjplcShfX2MsIGNoYXJfdHlwZSgpKSkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAr
K19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107
CiAgICAgICAgICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVn
KTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19j
LCBfX3NlcCkKICAgICAgICAgICAgICAgICAgICYmIF9fY2hlY2tfZ3JvdXBpbmcgJiYgIV9fZm91
bmRfZGVjKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBpZiAoX19zZXBfcG9zKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRp
Y19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7
CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2Vy
ciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6
OmVxKF9fYywgX19kZWMpICYmICFfX2ZvdW5kX2RlYykKICAgICAgICAgICAgewoKCgogICAgICAg
ICAgICAgIGlmIChfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICAgICAgICAgIF9fZm91
bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAg
ICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSAnLic7CiAgICAgICAgICAgICAgX19j
ID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBfX2ZvdW5kX2RlYyA9IHRydWU7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGVsc2UgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fd2F0b21z
W19NX2VdKQogICAgICAgICAgICAgICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX193
YXRvbXNbX01fRV0pKQogICAgICAgICAgICAgICAgICAgJiYgIV9fZm91bmRfc2NpICYmIF9fcG9z
KQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX194
dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICBfX2MgPSAq
KCsrX19iZWcpOwoKCiAgICAgICAgICAgICAgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19w
bHVzKQogICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fbWludXMp
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAg
ICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAg
ICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
IF9fZm91bmRfc2NpID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQoKICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgfQoKCgogICAgICBpZiAoX19jaGVja19ncm91cGluZyAmJiBf
X2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CgogICAgICAgICAgaWYgKCFfX2ZvdW5k
X2RlYykKICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihf
X3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBf
X2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7
CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBjaGFyKCk7CiAgICAgIGlmIChfX2JlZyA9PSBf
X2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19i
ZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+
CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFj
dF9pbnQoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX194dHJjLCBp
bnQmIF9fYmFzZSkgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+
IF9fdHJhaXRzX3R5cGU7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7
CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0No
YXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9m
YWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGlvc19iYXNlOjpmbXRmbGFn
cyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAg
IGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgIF9fYmFzZSA9IDg7CiAg
ICAgIGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpCiAgICAgICAgX19iYXNl
ID0gMTY7CiAgICAgIGVsc2UKICAgICAgICBfX2Jhc2UgPSAxMDsKCgogICAgICBpbnQgX19wb3Mg
PSAwOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBjb25zdCBjaGFyX3R5cGUg
X19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19taW51
cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKCiAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19j
LCBfX3BsdXMpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51cykpCiAgICAgICAgICAm
JiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5u
YXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgKytfX3BvczsKICAgICAgICAgIF9fYyA9ICoo
KytfX2JlZyk7CiAgICAgICAgfQoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0
eXBlLndpZGVuKF9TX2F0b21zW19NX3plcm9dKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9feCA9
IF9fY3R5cGUud2lkZW4oJ3gnKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fWCA9IF9fY3R5cGUu
d2lkZW4oJ1gnKTsKICAgICAgaWYgKF9fYmFzZSA9PSAxMCkKICAgICAgICB7CiAgICAgICAgICBi
b29sIF9fZm91bmRfemVybyA9IGZhbHNlOwogICAgICAgICAgd2hpbGUgKF9fdHJhaXRzX3R5cGU6
OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgX19mb3VuZF96ZXJvID0gdHJ1
ZTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fZm91bmRfemVybykKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfTV96ZXJvXTsKICAgICAgICAgICAg
ICArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSAwKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX194
KQogICAgICAgICAgICAgICAgICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19YKSkK
ICAgICAgICAgICAgICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2Ms
IGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICAg
ICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIF9fYmFzZSA9IDE2
OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgIF9fYmFzZSA9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYmFzZSA9PSAxNikKICAgICAgICB7CiAgICAgICAgICBp
ZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYmIF9fYmVnICE9IF9fZW5kKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwogICAg
ICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAg
ICAgICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX194KSB8fCBfX3RyYWl0c190eXBl
OjplcShfX2MsIF9fWCkpCiAgICAgICAgICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3co
X19jLCBjaGFyKCkpOwogICAgICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICAg
ICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgfQoKCgogICAgICBzaXplX3QgX19sZW47CiAgICAgIGlmIChfX2Jhc2UgPT0gMTYpCiAgICAg
ICAgX19sZW4gPSBfTV9zaXplOwogICAgICBlbHNlCiAgICAgICAgX19sZW4gPSBfX2Jhc2U7CgoK
ICAgICAgY2hhcl90eXBlIF9fd2F0b21zW19NX3NpemVdOwogICAgICBfX2N0eXBlLndpZGVuKF9T
X2F0b21zLCBfU19hdG9tcyArIF9fbGVuLCBfX3dhdG9tcyk7CiAgICAgIHN0cmluZyBfX2ZvdW5k
X2dyb3VwaW5nOwogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmco
KTsKICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5nID0gX19ncm91cGluZy5zaXplKCk7CiAgICAg
IGludCBfX3NlcF9wb3MgPSAwOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX25wLnRo
b3VzYW5kc19zZXAoKTsKICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAg
ICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9t
cywgX19sZW4sIF9fYyk7CgoKICAgICAgICAgIGlmIChfX3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVx
KF9fYywgY2hhcl90eXBlKCkpKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9feHRyYyAr
PSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAg
ICAgICAgICArK19fc2VwX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg
ICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fc2Vw
KSAmJiBfX2NoZWNrX2dyb3VwaW5nKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBpZiAo
X19zZXBfcG9zKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2ZvdW5kX2dy
b3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAgICAg
IF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKCiAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCgoKICAgICAgaWYgKF9fY2hlY2tfZ3JvdXBpbmcg
JiYgX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKICAgICAgICAgIF9fZm91bmRf
Z3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgIGlmICgh
X192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19mb3VuZF9ncm91cGluZykpCiAgICAgICAg
ICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgogICAgICBfX3h0cmMg
Kz0gY2hhcigpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9z
X2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8
X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgYm9vbCYgX192KSBjb25zdAogICAgewoKICAgICAgaWYgKCEoX19pby5mbGFncygpICYgaW9z
X2Jhc2U6OmJvb2xhbHBoYSkpCiAgICAgICAgewoKCiAgICAgICAgICBzdHJpbmcgX194dHJjOwog
ICAgICAgICAgaW50IF9fYmFzZTsKICAgICAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19i
ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwoKICAgICAgICAgIHVuc2ln
bmVkIGxvbmcgX191bDsKICAgICAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBf
X3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgICAgICBpZiAoIShfX2VyciAm
IGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX3VsIDw9IDEpCiAgICAgICAgICAgIF9fdiA9IF9fdWw7
CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Owog
ICAgICAgIH0KCgogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBjaGFyX3Ry
YWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu
ZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CgogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5n
ZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFj
ZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIGNvbnN0IF9fc3RyaW5nX3R5
cGUgX190cnVlID0gX19ucC50cnVlbmFtZSgpOwogICAgICAgICAgY29uc3QgX19zdHJpbmdfdHlw
ZSBfX2ZhbHNlID0gX19ucC5mYWxzZW5hbWUoKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X190cnVlcyA9IF9fdHJ1ZS5jX3N0cigpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2Zh
bHNlcyA9IF9fZmFsc2UuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RydWVuID0g
X190cnVlLnNpemUoKSAtIDE7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZW4gPSBfX2Zh
bHNlLnNpemUoKSAtIDE7CgogICAgICAgICAgZm9yIChzaXplX3QgX19uID0gMDsgX19iZWcgIT0g
X19lbmQ7ICsrX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9
ICpfX2JlZysrOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZiA9IF9fbiA8PSBfX2ZhbHNlbgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX2Zh
bHNlc1tfX25dKSA6IGZhbHNlOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0dCA9IF9fbiA8PSBf
X3RydWVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfX3RyYWl0c190eXBlOjplcShf
X2MsIF9fdHJ1ZXNbX19uXSkgOiBmYWxzZTsKICAgICAgICAgICAgICBpZiAoIShfX3Rlc3RmIHx8
IF9fdGVzdHQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2VyciB8PSBp
b3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZiAmJiBfX24gPT0gX19mYWxzZW4pCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDA7CiAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVz
dHQgJiYgX19uID09IF9fdHJ1ZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
IF9fdiA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9CiAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19iZWc7CiAgICB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J
dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBf
X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9f
eHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2Jl
ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90
b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAg
ICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Ogog
ICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p
bywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBf
X3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAg
ICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194
dHJjLCBfX2Jhc2UpOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgIF9fY29udmVydF90
b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAg
ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3VsIDw9
IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCkpCiAgICAgICAgX192ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRy
YzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywg
X19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIHVuc2lnbmVkIGxvbmcg
X191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBf
U19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJp
dCkKICAgICAgICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4
KCkpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX3VsKTsKICAgICAg
ZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4gX19i
ZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRl
cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAg
ewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9N
X2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsK
ICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9j
YWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9D
aGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBp
bnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19p
bywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNf
c3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19i
ZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRl
cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0
CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVn
ID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jh
c2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1Nf
Y19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9n
ZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5
cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAg
X194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcs
IF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJj
LmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf
SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlw
ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBjb25zdAogICAgewogICAgICBzdHJp
bmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0
cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2Nv
bnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAg
ICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg
ICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv
LAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikg
Y29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2VydmUoMzIp
OwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vy
ciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19l
cnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0
PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVmIGlvc19iYXNlOjpmbXRm
bGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7CiAgICAg
IGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFz
ZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBwZXJjYXNl
IHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZtdCAmIF9fZm10bWFz
ayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7CgogICAgICBzdHJpbmcg
X194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9f
YmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKCgogICAgICBfX2lvLmZs
YWdzKF9fZm10KTsKCiAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0X3Rv
X3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAg
ICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCiAgICAgICAgX192ID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oX191bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3Nf
YmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQojIDYxOCAiL3NwYWNlL3Nu
Yi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9P
dXRJdGVyPjo6CiAgICAgIF9NX2NvbnZlcnRfZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYg
X19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAgICAgICAgICBf
VmFsdWVUIF9fdikgY29uc3QKICAgICAgewoKCgoKCgoKICAgICAgICBjb25zdCBpbnQgX19tYXhf
ZGlnaXRzID0gbnVtZXJpY19saW1pdHM8X1ZhbHVlVD46OmRpZ2l0czEwICsgMjsKICAgICAgICBz
dHJlYW1zaXplIF9fcHJlYyA9IF9faW8ucHJlY2lzaW9uKCk7CgogICAgICAgIGlmIChfX3ByZWMg
PiBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX21heF9kaWdpdHMpKQogICAgICAgICAgX19wcmVj
ID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19tYXhfZGlnaXRzKTsKCgogICAgICAgIGNoYXIg
X19mYnVmWzE2XTsKCgogICAgICAgIGludCBfX2xlbjsKIyA2NzAgIi9zcGFjZS9zbmIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgICAgICAgY29u
c3QgYm9vbCBfX2ZpeGVkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmZpeGVkOwogICAgICAg
IGNvbnN0IGludCBfX21heF9leHAgPSBudW1lcmljX2xpbWl0czxfVmFsdWVUPjo6bWF4X2V4cG9u
ZW50MTA7CgoKCgoKICAgICAgICBjb25zdCBpbnQgX19jc19zaXplID0gX19maXhlZCA/IF9fbWF4
X2V4cCArIF9fbWF4X2RpZ2l0cyArIDQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IF9fbWF4X2RpZ2l0cyAqIDM7CiAgICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0
PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwoKICAgICAgICBpZiAoX1NfZm9y
bWF0X2Zsb2F0KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fcHJlYykpCiAgICAgICAgICBfX2xlbiA9
IF9fY29udmVydF9mcm9tX3YoX19jcywgMCwgX19mYnVmLCBfX3YsIF9TX2NfbG9jYWxlLCBfX3By
ZWMpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2Nz
LCAwLCBfX2ZidWYsIF9fdiwgX1NfY19sb2NhbGUpOwoKICAgICAgICByZXR1cm4gX01fd2lkZW5f
ZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fY3MsIF9fbGVuKTsKICAgICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlwZW5h
bWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVy
Pjo6CiAgICAgIF9NX2NvbnZlcnRfaW50KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9D
aGFyVCBfX2ZpbGwsIGNoYXIgX19tb2QsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2Rs
LCBfVmFsdWVUIF9fdikgY29uc3QKICAgICAgewoKCgogICAgICAgIGNoYXIgX19mYnVmWzE2XTsK
ICAgICAgICBfU19mb3JtYXRfaW50KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fbW9kbCk7CiMgNzE4
ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRz
LnRjYyIgMwogICAgICAgIGNoYXIgX19jc1sxMjhdOwogICAgICAgIGludCBfX2xlbiA9IF9fY29u
dmVydF9mcm9tX3YoX19jcywgMCwgX19mYnVmLCBfX3YsIF9TX2NfbG9jYWxlKTsKCiAgICAgICAg
cmV0dXJuIF9NX3dpZGVuX2ludChfX3MsIF9faW8sIF9fZmlsbCwgX19jcywgX19sZW4pOwogICAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBf
T3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV93aWRlbl9mbG9h
dChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyKiBfX2Nz
LAogICAgICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdAogICAgewogICAgICB0eXBlZGVm
IGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKCgogICAgICBjb25zdCBsb2NhbGUg
X19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBl
ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9DaGFyVCogX193cyA9
IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
IF9fbGVuKSk7CgoKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9f
YnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbiAqIDIpKTsKICAgICAgX19j
dHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwoKCiAgICAgIGNvbnN0IF9DaGFy
VCogX19wOwogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51
bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGlmIChfX3AgPSBfX3RyYWl0c190eXBlOjpm
aW5kKF9fd3MsIF9fbGVuLCBfX2N0eXBlLndpZGVuKCcuJykpKQogICAgICAgIF9fd3NbX19wIC0g
X193c10gPSBfX25wLmRlY2ltYWxfcG9pbnQoKTsKCgoKCiAgICAgIGNvbnN0IHN0cmluZyBfX2dy
b3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNl
ZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICBpZiAoX19n
cm91cGluZy5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgX0NoYXJUKiBfX3AyOwogICAgICAg
ICAgaW50IF9fZGVjbGVuID0gX19wID8gX19wIC0gX193cyA6IF9fbGVuOwogICAgICAgICAgX19w
MiA9IF9fYWRkX2dyb3VwaW5nKF9fd3MyLCBfX25wLnRob3VzYW5kc19zZXAoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigpICsgX19ncm91cGluZy5zaXplKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193cywgX193cyArIF9fZGVjbGVuKTsK
ICAgICAgICAgIGludCBfX25ld2xlbiA9IF9fcDIgLSBfX3dzMjsKCgogICAgICAgICAgaWYgKF9f
cCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fdHJhaXRzX3R5cGU6OmNvcHkoX19wMiwg
X19wLCBfX2xlbiAtIF9fZGVjbGVuKTsKICAgICAgICAgICAgICBfX25ld2xlbiArPSBfX2xlbiAt
IF9fZGVjbGVuOwogICAgICAgICAgICB9CgoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAg
ICAgIF9fbGVuID0gX19uZXdsZW47CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9NX2luc2VydChf
X3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4pOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0No
YXJULCBfT3V0SXRlcj46OgogICAgX01fd2lkZW5faW50KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2Um
IF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAgICAgaW50IF9f
bGVuKSBjb25zdAogICAgewoKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9j
KCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8
X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJU
Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4pKTsKCgogICAgICBf
Q2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXpl
b2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqIF9fbGVuICogMikpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9f
Y3MgKyBfX2xlbiwgX193cyk7CgoKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9
IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBzdHJpbmcg
X19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgY29uc3QgaW9zX2Jhc2U6OmZtdGZs
YWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAg
ICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKCgoKCgogICAgICAgICAgc3RyZWFt
c2l6ZSBfX29mZiA9IDA7CiAgICAgICAgICBpZiAoKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpz
aG93YmFzZSkgJiYgX19sZW4gPiAxKQogICAgICAgICAgICBpZiAoX19iYXNlZmllbGQgPT0gaW9z
X2Jhc2U6Om9jdCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfX29mZiA9IDE7CiAg
ICAgICAgICAgICAgICAqX193czIgPSAqX193czsKICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpCiAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgX19vZmYgPSAyOwogICAgICAgICAgICAgICAgKl9fd3MyID0gKl9fd3M7
CiAgICAgICAgICAgICAgICAqKF9fd3MyICsgMSkgPSAqKF9fd3MgKyAxKTsKICAgICAgICAgICAg
ICB9CiAgICAgICAgICBfQ2hhclQqIF9fcDsKICAgICAgICAgIF9fcCA9IF9fYWRkX2dyb3VwaW5n
KF9fd3MyICsgX19vZmYsIF9fbnAudGhvdXNhbmRzX3NlcCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19ncm91cGluZy5jX3N0cigpICsgX19ncm91cGluZy5zaXplKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3dzICsgX19vZmYsIF9fd3MgKyBfX2xlbik7CiAgICAgICAg
ICBfX2xlbiA9IF9fcCAtIF9fd3MyOwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9
CiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fd3MsIF9fbGVuKTsK
ICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog
ICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgX01faW5zZXJ0
KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNvbnN0IF9DaGFy
VCogX193cywKICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CiAgICAgIHR5cGVk
ZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwoKICAgICAgc3RyZWFtc2l6ZSBf
X3cgPSBfX2lvLndpZHRoKCk7CiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNfY2FzdDxfQ2hh
clQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX193KSk7CiAgICAgIGlm
IChfX3cgPiBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2xlbikpCiAgICAgICAgewogICAgICAg
ICAgX19wYWQ8X0NoYXJULCBfX3RyYWl0c190eXBlPjo6X1NfcGFkKF9faW8sIF9fZmlsbCwgX193
czIsIF9fd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X193LCBfX2xlbiwgdHJ1ZSk7CiAgICAgICAgICBfX2xlbiA9IHN0YXRpY19jYXN0PGludD4oX193
KTsKCiAgICAgICAgICBfX3dzID0gX193czI7CiAgICAgICAgfQogICAgICBfX2lvLndpZHRoKDAp
OwoKCgogICAgICBmb3IgKGludCBfX2ogPSAwOyBfX2ogPCBfX2xlbjsgKytfX2osICsrX19zKQog
ICAgICAgICpfX3MgPSBfX3dzW19fal07CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg
bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9z
X2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAogICAgewogICAg
ICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsKICAgICAgaWYgKChf
X2ZsYWdzICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCkKICAgICAgICB7CiAgICAgICAgICB1
bnNpZ25lZCBsb25nIF9fdXYgPSBfX3Y7CiAgICAgICAgICBfX3MgPSBfTV9jb252ZXJ0X2ludChf
X3MsIF9faW8sIF9fZmlsbCwgJ3UnLCBjaGFyKCksIF9fdXYpOwogICAgICAgIH0KICAgICAgZWxz
ZQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJp
bmdfdHlwZTsKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgICAg
ICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFy
VD4gPihfX2xvYyk7CiAgICAgICAgICBfX3N0cmluZ190eXBlIF9fbmFtZTsKICAgICAgICAgIGlm
IChfX3YpCiAgICAgICAgICAgIF9fbmFtZSA9IF9fbnAudHJ1ZW5hbWUoKTsKICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgX19uYW1lID0gX19ucC5mYWxzZW5hbWUoKTsKICAgICAgICAgIF9fcyA9
IF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX19uYW1lLmNfc3RyKCksIF9fbmFtZS5zaXpl
KCkpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9D
aGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19p
bywgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252
ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ2QnLCBjaGFyKCksIF9fdik7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBu
dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3Nf
YmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9f
dikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAn
dScsIGNoYXIoKSwgX192KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoK
ICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19iLCBjaGFyX3R5cGUgX19maWxs
LCBsb25nIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBf
X2IsIF9fZmlsbCwgJ2QnLCAnbCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091
dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90
eXBlIF9fZmlsbCwKICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAg
eyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgJ2wnLCBfX3Yp
OyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg
X091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJf
dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBj
b25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgY2hh
cigpLCBfX3YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19w
dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAg
ICAgICAgbG9uZyBkb3VibGUgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9mbG9h
dChfX3MsIF9faW8sIF9fZmlsbCwgJ0wnLCBfX3YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQs
IF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNo
YXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdAogICAgewog
ICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsKICAgICAgaW9z
X2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gfihpb3NfYmFzZTo6c2hvd3BvcyB8IGlvc19iYXNlOjpi
YXNlZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvc19iYXNlOjp1
cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOwogICAgICBfX2lvLmZsYWdzKF9fZmxhZ3Mg
JiBfX2ZtdCB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7CiAgICAgIHRy
eQogICAgICAgIHsKICAgICAgICAgIF9fcyA9IF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19m
aWxsLCAndScsIGNoYXIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4oX192KSk7CiAgICAgICAgICBfX2lvLmZsYWdzKF9fZmxh
Z3MpOwogICAgICAgIH0KICAgICAgY2F0Y2ggKC4uLikKICAgICAgICB7CiAgICAgICAgICBfX2lv
LmZsYWdzKF9fZmxhZ3MpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICByZXR1cm4g
X19zOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
PgogICAgX0luSXRlcgogICAgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0
KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYg
X191bml0cykgY29uc3QKICAgIHsKICAgICAgc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fYmVn
ID0gdGhpcy0+ZG9fZ2V0KF9fYmVnLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX19zdHIp
OwoKICAgICAgY29uc3QgaW50IF9fbiA9IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6ZGln
aXRzMTA7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2Fs
bG9jYShfX24pKTsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAg
ICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+
ID4oX19sb2MpOwogICAgICBjb25zdCBfQ2hhclQqIF9fd2NzID0gX19zdHIuY19zdHIoKTsKICAg
ICAgX19jdHlwZS5uYXJyb3coX193Y3MsIF9fd2NzICsgX19zdHIuc2l6ZSgpICsgMSwgY2hhcigp
LCBfX2NzKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX19jcywgX191bml0cywgX19lcnIsIF9TX2Nf
bG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0NoYXJU
LCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs
IGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX3VuaXRzKSBjb25zdAogICAgewoKICAgICAgdHlwZWRl
ZiBtb25leXB1bmN0PF9DaGFyVCwgdHJ1ZT4gX19tb25leV90cnVlOwogICAgICB0eXBlZGVmIG1v
bmV5cHVuY3Q8X0NoYXJULCBmYWxzZT4gX19tb25leV9mYWxzZTsKICAgICAgdHlwZWRlZiBtb25l
eV9iYXNlOjpwYXJ0IHBhcnQ7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6OnNp
emVfdHlwZSBzaXplX3R5cGU7CgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxv
YygpOwogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0ID0gdXNlX2ZhY2V0PF9fbW9uZXlf
dHJ1ZT4oX19sb2MpOwogICAgICBjb25zdCBfX21vbmV5X2ZhbHNlJiBfX21wZiA9IHVzZV9mYWNl
dDxfX21vbmV5X2ZhbHNlPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5
cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCiAgICAgIGNvbnN0IG1vbmV5
X2Jhc2U6OnBhdHRlcm4gX19wID0gX19pbnRsID8gX19tcHQubmVnX2Zvcm1hdCgpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVnX2Zvcm1hdCgp
OwoKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19wb3Nfc2lnbiA9X19pbnRsID8gX19tcHQucG9z
aXRpdmVfc2lnbigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
IF9fbXBmLnBvc2l0aXZlX3NpZ24oKTsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19uZWdfc2ln
biA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLm5lZ2F0aXZlX3NpZ24oKTsKICAgICAgY29uc3Qg
Y2hhcl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZGVjaW1hbF9wb2ludCgpOwogICAgICBj
b25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3NlcCgp
OwoKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX2ludGwgPyBfX21wdC5ncm91cGlu
ZygpIDogX19tcGYuZ3JvdXBpbmcoKTsKCgogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247CgogICAg
ICBzdHJpbmcgX19ncm91cGluZ190bXA7CgogICAgICBpbnQgX19zZXBfcG9zID0gMDsKCiAgICAg
IGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwoKICAgICAgYm9vbCBfX3Rlc3RkZWNmb3VuZCA9IGZh
bHNlOwoKCiAgICAgIHN0cmluZ190eXBlIF9fdGVtcF91bml0czsKCiAgICAgIGNoYXJfdHlwZSBf
X2MgPSAqX19iZWc7CiAgICAgIGNoYXJfdHlwZSBfX2VvZiA9IHN0YXRpY19jYXN0PGNoYXJfdHlw
ZT4oY2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6ZW9mKCkpOwogICAgICBmb3IgKGludCBfX2kgPSAw
OyBfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCA0ICYmIF9fdGVzdHZhbGlkOyArK19faSkKICAgICAg
ICB7CiAgICAgICAgICBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRb
X19pXSk7CiAgICAgICAgICBzd2l0Y2ggKF9fd2hpY2gpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoKICAgICAgICAgICAgICAgICAgaWYg
KF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZQogICAgICAgICAgICAgICAgICAgICAg
fHwgX19pIDwgMiB8fCBfX3NpZ24uc2l6ZSgpID4gMQogICAgICAgICAgICAgICAgICAgICAgfHwg
KChzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRbM10pICE9IG1vbmV5X2Jhc2U6Om5vbmUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgX19pID09IDIpKQogICAgICAgICAgICAgICAgICAg
IHsKCgoKCgogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1ib2wg
PSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuY3Vycl9zeW1ib2woKTsKICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc3ltYm9sLnNpemUoKTsKICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2ogPSAwOwogICAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg
X19qIDwgX19sZW4gJiYgX19zeW1ib2xbX19qXSA9PSBfX2MpCiAgICAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICsrX19qOwogICAgICAgICAgICAgICAgICAgICAgICB9CgoKICAg
ICAgICAgICAgICAgICAgICAgIGlmIChfX2ogIT0gX19sZW4gJiYgKF9faW8uZmxhZ3MoKSAmIGlv
c19iYXNlOjpzaG93YmFzZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZhbGlkID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCiAgICAgICAgICAgICAgICAgIGlm
IChfX3Bvc19zaWduLnNpemUoKSAmJiBfX25lZ19zaWduLnNpemUoKSkKICAgICAgICAgICAgICAg
ICAgewoKICAgICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fcG9zX3NpZ25bMF0pCiAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fcG9z
X3NpZ247CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fbmVn
X3NpZ25bMF0pCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
IF9fc2lnbiA9IF9fbmVnX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytf
X2JlZyk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX3Bvc19zaWduLnNpemUoKSAmJiBfX2Mg
PT0gX19wb3Nfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICBfX3NpZ24gPSBfX3Bvc19zaWduOwogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigr
K19fYmVnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KF9fbmVnX3NpZ24uc2l6ZSgpICYmIF9fYyA9PSBfX25lZ19zaWduWzBdKQogICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fbmVnX3NpZ247CiAgICAg
ICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6
OnZhbHVlOgoKCiAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYykK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoX19jID09IF9fZCAmJiAhX190ZXN0ZGVj
Zm91bmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX19jID09IF9fc2VwKSkKICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fZCkK
ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3Jv
dXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Rl
c3RkZWNmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKF9fYyA9PSBfX3NlcCkKICAgICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Z3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZh
bHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX190ZW1wX3VuaXRzICs9IF9fYzsKICAgICAgICAgICAgICAgICAgICAgICAgICArK19f
c2VwX3BvczsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
X19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKICAgICAgICAg
ICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKCiAgICAgICAgICAgICAgICAgIGlmIChfX2kg
IT0gMykKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkK
ICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICBpZiAoX19zaWduLnNp
emUoKSA+IDEpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaWduLnNp
emUoKTsKICAgICAgICAgIHNpemVfdHlwZSBfX2kgPSAxOwogICAgICAgICAgZm9yICg7IF9fYyAh
PSBfX2VvZiAmJiBfX2kgPCBfX2xlbjsgKytfX2kpCiAgICAgICAgICAgIHdoaWxlIChfX2JlZyAh
PSBfX2VuZCAmJiBfX2MgIT0gX19zaWduW19faV0pCiAgICAgICAgICAgICAgX19jID0gKigrK19f
YmVnKTsKCiAgICAgICAgICBpZiAoX19pICE9IF9fbGVuKQogICAgICAgICAgICBfX3Rlc3R2YWxp
ZCA9IGZhbHNlOwogICAgICAgIH0KCgogICAgICB3aGlsZSAoX190ZW1wX3VuaXRzWzBdID09IF9f
Y3R5cGUud2lkZW4oJzAnKSkKICAgICAgICBfX3RlbXBfdW5pdHMuZXJhc2UoX190ZW1wX3VuaXRz
LmJlZ2luKCkpOwoKICAgICAgaWYgKF9fc2lnbi5zaXplKCkgJiYgX19zaWduID09IF9fbmVnX3Np
Z24pCiAgICAgICAgX190ZW1wX3VuaXRzLmluc2VydChfX3RlbXBfdW5pdHMuYmVnaW4oKSwgX19j
dHlwZS53aWRlbignLScpKTsKCgogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkgJiYgX19ncm91
cGluZ190bXAuc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgIGlmICghX192ZXJpZnlfZ3JvdXBp
bmcoX19ncm91cGluZywgX19ncm91cGluZ190bXApKQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9
IGZhbHNlOwogICAgICAgIH0KCgogICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjplb2ZiaXQ7CgoKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCB8fCAhX190ZW1w
X3VuaXRzLnNpemUoKSkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAg
ZWxzZQoKICAgICAgICBfX3RlbXBfdW5pdHMuc3dhcChfX3VuaXRzKTsKCiAgICAgIHJldHVybiBf
X2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl
cj4KICAgIF9PdXRJdGVyCiAgICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9f
cHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBl
IF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAogICAgewogICAg
ICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxf
Q2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiMgMTE5
NSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0
cy50Y2MiIDMKICAgICAgY29uc3QgaW50IF9fY3Nfc2l6ZSA9IG51bWVyaWNfbGltaXRzPGxvbmcg
ZG91YmxlPjo6bWF4X2V4cG9uZW50MTAgKyA1OwogICAgICBjaGFyKiBfX2NzID0gc3RhdGljX2Nh
c3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgIGludCBfX2xlbiA9
IF9fY29udmVydF9mcm9tX3YoX19jcywgMCwgIiUuMDFMZiIsIF9fdW5pdHMsIF9TX2NfbG9jYWxl
KTsKCiAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9h
bGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2NzX3NpemUpKTsKICAgICAgX19jdHlwZS53aWRlbihf
X2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwogICAgICBzdHJpbmdfdHlwZSBfX2RpZ2l0cyhfX3dz
KTsKICAgICAgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBf
X2RpZ2l0cyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091
dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAg
IGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJf
dHlwZSBfX2ZpbGwsCiAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25z
dAogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6
ZV90eXBlOwogICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsKCiAgICAgIGNvbnN0
IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3dp
ZHRoID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2lvLndpZHRoKCkpOwoKCiAgICAgIHR5cGVk
ZWYgbW9uZXlwdW5jdDxfQ2hhclQsIHRydWU+IF9fbW9uZXlfdHJ1ZTsKICAgICAgdHlwZWRlZiBt
b25leXB1bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9uZXlfZmFsc2U7CiAgICAgIGNvbnN0IF9fbW9u
ZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90cnVlPihfX2xvYyk7CiAgICAgIGNv
bnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9j
KTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxf
Q2hhclQ+ID4oX19sb2MpOwoKCgogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fYmVnID0gX19kaWdp
dHMuZGF0YSgpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZW5kID0gX19iZWcgKyBfX2RpZ2l0
cy5zaXplKCk7CiAgICAgIG1vbmV5X2Jhc2U6OnBhdHRlcm4gX19wOwogICAgICBzdHJpbmdfdHlw
ZSBfX3NpZ247CiAgICAgIGlmICgqX19iZWcgIT0gX19jdHlwZS53aWRlbignLScpKQogICAgICAg
IHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9fbXB0LnBvc19mb3JtYXQoKSA6IF9fbXBmLnBv
c19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQucG9zaXRpdmVfc2ln
bigpIDogX19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg
IHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9fbXB0Lm5lZ19mb3JtYXQoKSA6IF9fbXBmLm5l
Z19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2ln
bigpIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwogICAgICAgICAgKytfX2JlZzsKICAgICAgICB9
CgoKICAgICAgX19lbmQgPSBfX2N0eXBlLnNjYW5fbm90KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2Jl
ZywgX19lbmQpOwogICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewoKCgogICAgICAg
ICAgc3RyaW5nX3R5cGUgX19yZXM7CiAgICAgICAgICBzdHJpbmdfdHlwZSBfX3ZhbHVlOwogICAg
ICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1ib2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5
bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9f
bXBmLmN1cnJfc3ltYm9sKCk7CgoKICAgICAgICAgIGNvbnN0IGludCBfX2ZyYWMgPSBfX2ludGwg
PyBfX21wdC5mcmFjX2RpZ2l0cygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogX19tcGYuZnJhY19kaWdpdHMoKTsKICAgICAgICAgIGlmIChfX2ZyYWMgPiAwKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0
LmRlY2ltYWxfcG9pbnQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAgICAgICAgICAgICAgaWYgKF9fZW5kIC0gX19i
ZWcgPj0gX19mcmFjKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3ZhbHVl
ID0gc3RyaW5nX3R5cGUoX19lbmQgLSBfX2ZyYWMsIF9fZW5kKTsKICAgICAgICAgICAgICAgICAg
X192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX2QpOwogICAgICAgICAgICAgICAgICBf
X2VuZCAtPSBfX2ZyYWM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9f
YmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIGludCBfX3BhZGRlYyA9IF9fZnJhYyAtIChf
X2VuZCAtIF9fYmVnKTsKICAgICAgICAgICAgICAgICAgY2hhcl90eXBlIF9femVybyA9IF9fY3R5
cGUud2lkZW4oJzAnKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5i
ZWdpbigpLCBfX3BhZGRlYywgX196ZXJvKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNl
cnQoX192YWx1ZS5iZWdpbigpLCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2JlZyA9IF9fZW5k
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoKCiAgICAgICAgICBpZiAoX19iZWcg
IT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBzdHJpbmcgX19ncm91
cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmdyb3VwaW5nKCk7CiAgICAgICAgICAgICAg
aWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYu
dGhvdXNhbmRzX3NlcCgpOwogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2diZWcgPSBf
X2dyb3VwaW5nLmNfc3RyKCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2VuZCA9
IF9fZ2JlZyArIF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICAgICAgICAgICAgICBjb25zdCBpbnQg
X19uID0gKF9fZW5kIC0gX19iZWcpICogMjsKICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dz
MiA9CiAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2Fs
bG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbikpOwogICAgICAgICAgICAgICAgICBfQ2hhclQqIF9f
d3NfZW5kID0gX19hZGRfZ3JvdXBpbmcoX193czIsIF9fc2VwLCBfX2diZWcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dlbmQsIF9fYmVnLCBf
X2VuZCk7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KDAsIF9fd3MyLCBfX3dzX2Vu
ZCAtIF9fd3MyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICBfX3ZhbHVlLmluc2VydCgwLCBzdHJpbmdfdHlwZShfX2JlZywgX19lbmQpKTsKICAg
ICAgICAgICAgfQoKCiAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mID0gX19pby5mbGFn
cygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0g
X192YWx1ZS5zaXplKCkgKyBfX3NpZ24uc2l6ZSgpOwogICAgICAgICAgX19sZW4gKz0gKF9faW8u
ZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkgPyBfX3N5bWJvbC5zaXplKCkgOiAwOwogICAg
ICAgICAgYm9vbCBfX3Rlc3RpcGFkID0gX19mID09IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX2xl
biA8IF9fd2lkdGg7CgoKICAgICAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDQ7ICsrX19p
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgcGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8
cGFydD4oX19wLmZpZWxkW19faV0pOwogICAgICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgog
ICAgICAgICAgICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKQog
ICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fc3ltYm9sOwogICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCgoKICAgICAgICAg
ICAgICAgICAgaWYgKF9fc2lnbi5zaXplKCkpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0g
X19zaWduWzBdOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug
bW9uZXlfYmFzZTo6dmFsdWU6CiAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fdmFsdWU7CiAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpz
cGFjZToKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAg
ICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19jdHlwZS53
aWRlbihfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNh
c2UgbW9uZXlfYmFzZTo6bm9uZToKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAg
ICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBf
X2ZpbGwpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgfQoKCiAgICAgICAgICBpZiAoX19zaWduLnNpemUoKSA+IDEpCiAgICAgICAgICAgIF9f
cmVzICs9IHN0cmluZ190eXBlKF9fc2lnbi5iZWdpbigpICsgMSwgX19zaWduLmVuZCgpKTsKCgog
ICAgICAgICAgX19sZW4gPSBfX3Jlcy5zaXplKCk7CiAgICAgICAgICBpZiAoX193aWR0aCA+IF9f
bGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fZiA9PSBpb3NfYmFzZTo6bGVm
dCkKCiAgICAgICAgICAgICAgICBfX3Jlcy5hcHBlbmQoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwp
OwogICAgICAgICAgICAgIGVsc2UKCiAgICAgICAgICAgICAgICBfX3Jlcy5pbnNlcnQoMCwgc3Ry
aW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpKTsKICAgICAgICAgICAgICBfX2xlbiA9
IF9fd2lkdGg7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgZm9yIChzaXplX3R5cGUgX19qID0g
MDsgX19qIDwgX19sZW47ICsrX19qLCArK19fcykKICAgICAgICAgICAgKl9fcyA9IF9fcmVzW19f
al07CiAgICAgICAgfQogICAgICBfX2lvLndpZHRoKDApOwogICAgICByZXR1cm4gX19zOwogICAg
fQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
dGltZV9iYXNlOjpkYXRlb3JkZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmRvX2Rh
dGVfb3JkZXIoKSBjb25zdAogICAgeyByZXR1cm4gdGltZV9iYXNlOjpub19vcmRlcjsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0
aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVy
X3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19mb3JtYXQpIGNvbnN0CiAgICB7
CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0PF9D
aGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9j
KTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxf
Q2hhclQ+ID4oX19sb2MpOwogICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0czxfQ2hhclQ+
OjpsZW5ndGgoX19mb3JtYXQpOwoKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19iZWcgIT0g
X19lbmQgJiYgX19pIDwgX19sZW4gJiYgIV9fZXJyOyArK19faSkKICAgICAgICB7CiAgICAgICAg
ICBjaGFyIF9fYyA9IF9fZm9ybWF0W19faV07CiAgICAgICAgICBpZiAoX19jID09ICclJykKICAg
ICAgICAgICAgewoKICAgICAgICAgICAgICBfX2MgPSBfX2Zvcm1hdFsrK19faV07CiAgICAgICAg
ICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICAgICAgICAgaW50IF9fbWVtID0gMDsKICAgICAg
ICAgICAgICBpZiAoX19jID09ICdFJyB8fCBfX2MgPT0gJ08nKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICBfX21vZCA9IF9fYzsKICAgICAgICAgICAgICAgICAgX19jID0gX19m
b3JtYXRbKytfX2ldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHN3aXRjaCAoX19j
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2NzOwog
ICAgICAgICAgICAgICAgICBfQ2hhclQgX193Y3NbMTBdOwogICAgICAgICAgICAgICAgY2FzZSAn
YSc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5czFbN107CiAgICAg
ICAgICAgICAgICAgIF9fdHAuX01fZGF5c19hYmJyZXZpYXRlZChfX2RheXMxKTsKICAgICAgICAg
ICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fd2RheSwgX19k
YXlzMSwgNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdBJzoKCiAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlzMls3XTsKICAgICAgICAgICAgICAgICAgX190
cC5fTV9kYXlzKF9fZGF5czIpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19i
ZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2RheXMyLCA3LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIGNhc2UgJ2gnOgogICAgICAgICAgICAgICAgY2FzZSAnYic6CgogICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzMVsxMl07CiAgICAgICAgICAgICAgICAgIF9f
dHAuX01fbW9udGhzX2FiYnJldmlhdGVkKF9fbW9udGhzMSk7CiAgICAgICAgICAgICAgICAgIF9N
X2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21vbiwgX19tb250aHMxLCAxMiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdCJzoKCiAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXJfdHlwZSogX19tb250aHMyWzEyXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9t
b250aHMoX19tb250aHMyKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVn
LCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRoczIsIDEyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIGNhc2UgJ2MnOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2R0
WzJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RhdGVfdGltZV9mb3JtYXRzKF9fZHQpOwog
ICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lv
LCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
ZHRbMF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2Qn
OgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50
bV9tZGF5LCAxLCAzMSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlw
ZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug
J0QnOgoKICAgICAgICAgICAgICAgICAgX19jcyA9ICIlbS8lZC8leSI7CiAgICAgICAgICAgICAg
ICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDksIF9fd2NzKTsKICAgICAgICAgICAgICAg
ICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3djcyk7CiAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnSCc6CgogICAgICAgICAgICAg
ICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDAsIDIzLCAy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnSSc6CgogICAgICAgICAg
ICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX2hvdXIsIDEsIDEy
LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbSc6CgogICAgICAg
ICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fbWVtLCAxLCAxMiwgMiwg
X19jdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAg
ICAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9
IF9fbWVtIC0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNl
ICdNJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190
bS0+dG1fbWluLCAwLCA1OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
dHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNh
c2UgJ24nOgogICAgICAgICAgICAgICAgICBpZiAoX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9
PSAnXG4nKQogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdSJzoKCiAgICAgICAgICAg
ICAgICAgIF9fY3MgPSAiJUg6JU0iOwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9f
Y3MsIF9fY3MgKyA2LCBfX3djcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zv
cm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgIGNhc2UgJ1MnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0o
X19iZWcsIF9fZW5kLCBfX3RtLT50bV9zZWMsIDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgY2FzZSAndCc6CiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5h
cnJvdygqX19iZWcsIDApID09ICdcdCcpCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZh
aWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnVCc6
CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVIOiVNOiVTIjsKICAgICAgICAgICAgICAgICAg
X19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgOSwgX193Y3MpOwogICAgICAgICAgICAgICAgICBf
TV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2NzKTsKICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd4JzoKCiAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXJfdHlwZSogX19kYXRlc1syXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9k
YXRlX2Zvcm1hdHMoX19kYXRlcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zv
cm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19kYXRlc1swXSk7CiAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgY2FzZSAnWCc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
X3R5cGUqIF9fdGltZXNbMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fdGltZV9mb3JtYXRz
KF9fdGltZXMpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcs
IF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fdGltZXNbMF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIGNhc2UgJ3knOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcs
IF9fZW5kLCBfX3RtLT50bV95ZWFyLCAwLCA5OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgIGNhc2UgJ1knOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19i
ZWcsIF9fZW5kLCBfX21lbSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCksIDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgaWYgKCFfX2VycikKICAgICAg
ICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gX19tZW0gLSAxOTAwOwogICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1onOgoKICAgICAgICAgICAgICAgICAg
aWYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6dXBwZXIsICpfX2JlZykpCiAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgaW50IF9fdG1wOwogICAgICAgICAgICAgICAg
ICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0LCBfX2Vycik7CgoKICAg
ICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIV9fZXJyICYmIF9fdG1wID09IDAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAmJiAoX19jID09IF9fY3R5cGUud2lkZW4oJy0nKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBfX2MgPT0gX19jdHlwZS53aWRlbignKycpKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2Vu
ZCwgX190bXAsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFj
dF9udW0oX19iZWcsIF9fZW5kLCBfX3RtcCwgMCwgNTksIDIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7
CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgoKICAgICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fY3R5cGUubmFy
cm93KCpfX2JlZywgMCkpCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0
OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBf
SW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X251bShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUm
IF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgICAgICAgICAgICAgICAgaW50IF9fbWluLCBpbnQg
X19tYXgsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFy
VD4mIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIp
IGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSAwOwogICAgICBzdHJpbmcgX19kaWdpdHM7
CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9f
YmVnOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4KICAgICAgICAg
ICAgICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYykpCiAgICAgICAgewogICAg
ICAgICAgX19kaWdpdHMgKz0gX19jdHlwZS5uYXJyb3coX19jLCAwKTsKICAgICAgICAgIF9fYyA9
ICooKytfX2JlZyk7CiAgICAgICAgICArK19faTsKICAgICAgICB9CiAgICAgIGlmIChfX2kgPT0g
X19sZW4pCiAgICAgICAgewogICAgICAgICAgaW50IF9fdmFsdWUgPSBhdG9pKF9fZGlnaXRzLmNf
c3RyKCkpOwogICAgICAgICAgaWYgKF9fbWluIDw9IF9fdmFsdWUgJiYgX192YWx1ZSA8PSBfX21h
eCkKICAgICAgICAgICAgX19tZW1iZXIgPSBfX3ZhbHVlOwogICAgICAgICAgZWxzZQogICAgICAg
ICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9f
dGVzdHZhbGlkID0gZmFsc2U7CiAgICAgIGlmICghX190ZXN0dmFsaWQpCiAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6CiAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2Vu
ZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25h
bWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJU
PiBfX3RyYWl0c190eXBlOwogICAgICBpbnQqIF9fbWF0Y2hlcyA9IHN0YXRpY19jYXN0PGludCo+
KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludCkgKiBfX2luZGV4bGVuKSk7CiAgICAgIHNpemVf
dCBfX25tYXRjaGVzID0gMDsKICAgICAgc2l6ZV90IF9fcG9zID0gMDsKICAgICAgYm9vbCBfX3Rl
c3R2YWxpZCA9IHRydWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lOwoKICAgICAgY2hh
cl90eXBlIF9fYyA9ICpfX2JlZzsKCiAgICAgIGZvciAoc2l6ZV90IF9faTEgPSAwOyBfX2kxIDwg
X19pbmRleGxlbjsgKytfX2kxKQogICAgICAgIGlmIChfX2MgPT0gX19uYW1lc1tfX2kxXVswXSkK
ICAgICAgICAgIF9fbWF0Y2hlc1tfX25tYXRjaGVzKytdID0gX19pMTsKCiAgICAgIHdoaWxlKF9f
bm1hdGNoZXMgPiAxKQogICAgICAgIHsKCiAgICAgICAgICBzaXplX3QgX19taW5sZW4gPSAxMDsK
ICAgICAgICAgIGZvciAoc2l6ZV90IF9faTIgPSAwOyBfX2kyIDwgX19ubWF0Y2hlczsgKytfX2ky
KQogICAgICAgICAgICBfX21pbmxlbiA9IG1pbihfX21pbmxlbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZXNbX19tYXRjaGVzW19faTJdXSkp
OwoKICAgICAgICAgIGlmIChfX3BvcyA8IF9fbWlubGVuICYmIF9fYmVnICE9IF9fZW5kKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsr
X19iZWcpOwogICAgICAgICAgICAgIGZvciAoc2l6ZV90IF9faTMgPSAwOyBfX2kzIDwgX19ubWF0
Y2hlczsgKytfX2kzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX25hbWUg
PSBfX25hbWVzW19fbWF0Y2hlc1tfX2kzXV07CiAgICAgICAgICAgICAgICAgIGlmIChfX25hbWVb
X19wb3NdICE9IF9fYykKICAgICAgICAgICAgICAgICAgICBfX21hdGNoZXNbX19pM10gPSBfX21h
dGNoZXNbLS1fX25tYXRjaGVzXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICBpZiAoX19ubWF0
Y2hlcyA9PSAxKQogICAgICAgIHsKCiAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hl
c1swXV07CiAgICAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5n
dGgoX19uYW1lKTsKICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9f
ZW5kICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICArK19fYmVnLCArK19f
cG9zOwoKICAgICAgICAgIGlmIChfX2xlbiA9PSBfX3BvcykKICAgICAgICAgICAgX19tZW1iZXIg
PSBfX21hdGNoZXNbMF07CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0g
ZmFsc2U7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsK
ICAgICAgaWYgKCFfX3Rlc3R2YWxpZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp
dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog
ICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfdGlt
ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAg
ewogICAgICBfQ2hhclQgX193Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJVgiOwog
ICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNv
bnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9f
Y3R5cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFf
Zm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYg
KF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAg
IHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg
ICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3Rt
KSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9f
Y3MgPSAiJXgiOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlw
ZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv
Yyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9fd2NzKTsKICAgICAgX01f
ZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2Nz
KTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpl
b2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBf
SW5JdGVyPjo6CiAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRz
PF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2Mo
KTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3Rp
bWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5c1s3
XTsKICAgICAgX190cC5fTV9kYXlzX2FiYnJldmlhdGVkKF9fZGF5cyk7CiAgICAgIGludCBfX3Rt
cHdkYXk7CiAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1wd2RheSwgX19k
YXlzLCA3LCBfX2Vycik7CgoKCgoKCgogICAgICBpZiAoIV9fZXJyKQogICAgICAgIHsKICAgICAg
ICAgIHNpemVfdCBfX3BvcyA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX2RheXNbX190bXB3ZGF5
XSk7CiAgICAgICAgICBfX3RwLl9NX2RheXMoX19kYXlzKTsKICAgICAgICAgIGNvbnN0IGNoYXJf
dHlwZSogX19uYW1lID0gX19kYXlzW19fdG1wd2RheV07CiAgICAgICAgICBpZiAoX19uYW1lW19f
cG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90
IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAgICAgICAgd2hp
bGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAg
JiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgICAgICArK19fYmVnLCArK19f
cG9zOwogICAgICAgICAgICAgIGlmIChfX2xlbiAhPSBfX3BvcykKICAgICAgICAgICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoIV9f
ZXJyKQogICAgICAgICAgICBfX3RtLT50bV93ZGF5ID0gX190bXB3ZGF5OwogICAgICAgIH0KICAg
ICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7
CiAgICAgIHJldHVybiBfX2JlZzsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRl
cj46OgogICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu
ZCwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8
X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygp
OwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGlt
ZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHNb
MTJdOwogICAgICBfX3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChfX21vbnRocyk7CiAgICAgIGlu
dCBfX3RtcG1vbjsKICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXBtb24s
IF9fbW9udGhzLCAxMiwgX19lcnIpOwoKCgoKCgoKICAgICAgaWYgKCFfX2VycikKICAgICAgICB7
CiAgICAgICAgICBzaXplX3QgX19wb3MgPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19tb250aHNb
X190bXBtb25dKTsKICAgICAgICAgIF9fdHAuX01fbW9udGhzKF9fbW9udGhzKTsKICAgICAgICAg
IGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19tb250aHNbX190bXBtb25dOwogICAgICAgICAg
aWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICB7CgogICAgICAgICAgICAg
IGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25hbWUpOwogICAg
ICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kCiAgICAgICAg
ICAgICAgICAgICAgICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICAgICAg
KytfX2JlZywgKytfX3BvczsKICAgICAgICAgICAgICBpZiAoX19sZW4gIT0gX19wb3MpCiAgICAg
ICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgfQogICAg
ICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgX190bS0+dG1fbW9uID0gX190bXBtb247CiAg
ICAgICAgfQoKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19i
YXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0No
YXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lv
LmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0
PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwog
ICAgICBzaXplX3QgX19pID0gMDsKICAgICAgc3RyaW5nIF9fZGlnaXRzOwogICAgICB3aGlsZSAo
X19pIDwgNCAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0
LCBfX2MpKQogICAgICAgIHsKICAgICAgICAgIF9fZGlnaXRzICs9IF9fY3R5cGUubmFycm93KF9f
YywgMCk7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgKytfX2k7CiAgICAg
ICAgfQogICAgICBpZiAoX19pID09IDIgfHwgX19pID09IDQpCiAgICAgICAgewogICAgICAgICAg
bG9uZyBfX2w7CiAgICAgICAgICBfX2NvbnZlcnRfdG9fdihfX2RpZ2l0cy5jX3N0cigpLCBfX2ws
IF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpm
YWlsYml0KSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykKICAgICAgICAgICAgewogICAgICAgICAgICAg
IF9fbCA9IF9faSA9PSAyID8gX19sIDogX19sIC0gMTkwMDsKICAgICAgICAgICAgICBfX3RtLT50
bV95ZWFyID0gc3RhdGljX2Nhc3Q8aW50PihfX2wpOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIGlmIChf
X2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICBy
ZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog
ICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRt
KiBfX3RtLAogICAgICAgIGNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQp
IGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0
eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f
bG9jKTsKICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIGNo
YXIgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICsrX19iZWc7CiAg
ICAgICAgICBpZiAoX19jID09ICclJykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXIg
X19mb3JtYXQ7CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICAgICAgICAgc2l6
ZV90IF9fbGVuID0gMTsKICAgICAgICAgICAgICBfX2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcs
IDApOwogICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScg
fHwgX19jID09ICdPJykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19tb2Qg
PSBfX2M7CiAgICAgICAgICAgICAgICAgIF9fZm9ybWF0ID0gX19jdHlwZS5uYXJyb3coKl9fYmVn
LCAwKTsKICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2Zvcm1hdCA9IF9fYzsKICAgICAgICAgICAg
ICBfX3MgPSB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBjaGFyX3R5cGUoKSwgX190bSwgX19mb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbW9kKTsKICAgICAgICAgICAg
fQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9fcyA9IF9fYzsK
ICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
IF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl
cj4KICAgIF9PdXRJdGVyCiAgICB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19w
dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29uc3QgdG0qIF9f
dG0sCiAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCkgY29uc3QKICAgIHsKICAg
ICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25z
dCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX3Rp
bWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFy
VD4gPihfX2xvYyk7CgoKCiAgICAgIGNvbnN0IHNpemVfdCBfX21heGxlbiA9IDY0OwogICAgICBj
aGFyX3R5cGUqIF9fcmVzID0KICAgICAgICBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihfX2J1aWx0
aW5fYWxsb2NhKHNpemVvZihjaGFyX3R5cGUpICogX19tYXhsZW4pKTsKCgoKCgoKICAgICAgY2hh
cl90eXBlIF9fZm10WzRdOwogICAgICBfX2ZtdFswXSA9IF9fY3R5cGUud2lkZW4oJyUnKTsKICAg
ICAgaWYgKCFfX21vZCkKICAgICAgICB7CiAgICAgICAgICBfX2ZtdFsxXSA9IF9fZm9ybWF0Owog
ICAgICAgICAgX19mbXRbMl0gPSBjaGFyX3R5cGUoKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAg
ICAgICB7CiAgICAgICAgICBfX2ZtdFsxXSA9IF9fbW9kOwogICAgICAgICAgX19mbXRbMl0gPSBf
X2Zvcm1hdDsKICAgICAgICAgIF9fZm10WzNdID0gY2hhcl90eXBlKCk7CiAgICAgICAgfQoKICAg
ICAgX190cC5fTV9wdXQoX19yZXMsIF9fbWF4bGVuLCBfX2ZtdCwgX190bSk7CgoKICAgICAgc2l6
ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6bGVuZ3RoKF9fcmVzKTsKICAgICAg
Zm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19sZW47ICsrX19pLCArK19fcykKICAgICAgICAq
X19zID0gX19yZXNbX19pXTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIGNvbGxhdGU8X0NoYXJUPjo6X01fY29tcGFyZShj
b25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqKSBjb25zdAogICAgeyByZXR1cm4gMDsgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgc2l6ZV90CiAgICBjb2xsYXRlPF9DaGFyVD46
Ol9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0CiAgICB7
IHJldHVybiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAgY29s
bGF0ZTxfQ2hhclQ+OjoKICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3Qg
X0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3Qg
X0NoYXJUKiBfX2hpMikgY29uc3QKICAgIHsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19vbmUo
X19sbzEsIF9faGkxKTsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX190d28oX19sbzIsIF9faGky
KTsKICAgICAgcmV0dXJuIF9NX2NvbXBhcmUoX19vbmUuY19zdHIoKSwgX190d28uY19zdHIoKSk7
CiAgICB9CgogdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgY29sbGF0ZTxf
Q2hhclQ+OjpzdHJpbmdfdHlwZQogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX3RyYW5zZm9y
bShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgIHsKICAg
ICAgc2l6ZV90IF9fbGVuID0gKF9faGkgLSBfX2xvKSAqIDI7CgogICAgICBfQ2hhclQqIF9fYyA9
CiAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0No
YXJUKSAqIF9fbGVuKSk7CiAgICAgIHNpemVfdCBfX3JlcyA9IF9NX3RyYW5zZm9ybShfX2MsIF9f
bG8sIF9fbGVuKTsKCiAgICAgIGlmIChfX3JlcyA+PSBfX2xlbikKICAgICAgICB7CiAgICAgICAg
ICBfX2MgPQogICAgICAgICAgICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2Nh
KHNpemVvZihfQ2hhclQpICogKF9fcmVzICsgMSkpKTsKICAgICAgICAgIF9NX3RyYW5zZm9ybShf
X2MsIF9fbG8sIF9fcmVzICsgMSk7CiAgICAgICAgfQogICAgICByZXR1cm4gc3RyaW5nX3R5cGUo
X19jKTsKICAgIH0KCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb25nCiAgICBjb2xs
YXRlPF9DaGFyVD46OgogICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFy
VCogX19oaSkgY29uc3QKICAgIHsKICAgICAgdW5zaWduZWQgbG9uZyBfX3ZhbCA9IDA7CiAgICAg
IGZvciAoOyBfX2xvIDwgX19oaTsgKytfX2xvKQogICAgICAgIF9fdmFsID0gKl9fbG8gKyAoKF9f
dmFsIDw8IDcpIHwKICAgICAgICAgICAgICAgICAgICAgICAoX192YWwgPj4gKG51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkIGxvbmc+OjpkaWdpdHMgLSA3KSkpOwogICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8bG9uZz4oX192YWwpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICB2
b2lkCiAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX2luLCBfVHYmIF9fb3V0LCBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfX2NfbG9jYWxl
JiBfX2Nsb2MsIGludCBfX2Jhc2UgPSAxMCk7CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4K
ICAgIGludAogICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwgY29uc3QgaW50IF9fc2l6
ZSwgY29uc3QgY2hhciogX19mbXQsCiAgICAgICAgICAgICAgICAgICAgIF9UdiBfX3YsIGNvbnN0
IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjID0gLTEpOwojIDE5OTUgIi9zcGFjZS9zbmIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9fcGFkCiAgICB7
CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX3BhZChpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9f
ZmlsbCwgX0NoYXJUKiBfX25ld3MsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fb2xkcywg
Y29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwKICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUg
X19vbGRsZW4sIGNvbnN0IGJvb2wgX19udW0pOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgX19wYWQ8X0NoYXJULCBfVHJh
aXRzPjo6X1NfcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCogX19uZXdzLCBjb25zdCBfQ2hhclQqIF9fb2xk
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW1zaXplIF9f
bmV3bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNp
emUgX19vbGRsZW4sIGNvbnN0IGJvb2wgX19udW0pCiAgICB7CiAgICAgIHNpemVfdCBfX3BsZW4g
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fbmV3bGVuIC0gX19vbGRsZW4pOwogICAgICBfQ2hhclQq
IF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9D
aGFyVCkgKiBfX3BsZW4pKTsKICAgICAgX1RyYWl0czo6YXNzaWduKF9fcGFkcywgX19wbGVuLCBf
X2ZpbGwpOwoKICAgICAgX0NoYXJUKiBfX2JlZzsKICAgICAgX0NoYXJUKiBfX2VuZDsKICAgICAg
c2l6ZV90IF9fbW9kID0gMDsKICAgICAgc2l6ZV90IF9fYmVnbGVuOwogICAgICBpb3NfYmFzZTo6
Zm10ZmxhZ3MgX19hZGp1c3QgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7
CgogICAgICBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmxlZnQpCiAgICAgICAgewoKICAgICAg
ICAgIF9fYmVnID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMpOwogICAgICAgICAgX19iZWds
ZW4gPSBfX29sZGxlbjsKICAgICAgICAgIF9fZW5kID0gX19wYWRzOwogICAgICAgIH0KICAgICAg
ZWxzZSBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmludGVybmFsICYmIF9fbnVtKQogICAgICAg
IHsKCgoKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgICAgICBj
b25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf
X2xvYyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQgX19taW51cyA9IF9fY3R5cGUud2lkZW4oJy0n
KTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7CiAg
ICAgICAgICBib29sIF9fdGVzdHNpZ24gPSBfVHJhaXRzOjplcShfX29sZHNbMF0sIF9fbWludXMp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfVHJhaXRzOjplcShfX29sZHNbMF0sIF9f
cGx1cyk7CgogICAgICAgICAgYm9vbCBfX3Rlc3RoZXggPSBfVHJhaXRzOjplcShfX2N0eXBlLndp
ZGVuKCcwJyksIF9fb2xkc1swXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKF9UcmFp
dHM6OmVxKF9fY3R5cGUud2lkZW4oJ3gnKSwgX19vbGRzWzFdKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgX1RyYWl0czo6ZXEoX19jdHlwZS53aWRlbignWCcpLCBfX29sZHNbMV0p
KTsKICAgICAgICAgIGlmIChfX3Rlc3RoZXgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBf
X25ld3NbMF0gPSBfX29sZHNbMF07CiAgICAgICAgICAgICAgX19uZXdzWzFdID0gX19vbGRzWzFd
OwogICAgICAgICAgICAgIF9fbW9kICs9IDI7CiAgICAgICAgICAgICAgX19uZXdzICs9IDI7CiAg
ICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3Bs
ZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyArIF9f
bW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190ZXN0c2lnbikKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIF9UcmFpdHM6OmVxKChfX25ld3NbMF0gPSBfX29sZHNbMF0p
LCBfX3BsdXMpID8gX19wbHVzIDogX19taW51czsKICAgICAgICAgICAgICArK19fbW9kOwogICAg
ICAgICAgICAgICsrX19uZXdzOwogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAg
ICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2Fz
dDxfQ2hhclQqPihfX29sZHMgKyBfX21vZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAg
ICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0No
YXJUKj4oX19vbGRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg
IHsKCiAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVu
OwogICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7CiAgICAgICAg
fQogICAgICBfVHJhaXRzOjpjb3B5KF9fbmV3cywgX19iZWcsIF9fYmVnbGVuKTsKICAgICAgX1Ry
YWl0czo6Y29weShfX25ld3MgKyBfX2JlZ2xlbiwgX19lbmQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19uZXdsZW4gLSBfX2JlZ2xlbiAtIF9fbW9kKTsKICAgIH0KIyAyMDkwICIvc3BhY2Uv
c25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGJvb2wKICAgIF9fdmVyaWZ5X2dyb3VwaW5n
KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBfX2dyb3VwaW5nLAogICAgICAgICAgICAgICAg
ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9fZ3JvdXBpbmdfdG1wKQogICAgewogICAgICBp
bnQgX19pID0gMDsKICAgICAgaW50IF9faiA9IDA7CiAgICAgIGNvbnN0IGludCBfX2xlbiA9IF9f
Z3JvdXBpbmcuc2l6ZSgpOwogICAgICBjb25zdCBpbnQgX19uID0gX19ncm91cGluZ190bXAuc2l6
ZSgpOwogICAgICBib29sIF9fdGVzdCA9IHRydWU7CgoKCgogICAgICB3aGlsZSAoX190ZXN0ICYm
IF9faSA8IF9fbiAtIDEpCiAgICAgICAgZm9yIChfX2ogPSAwOyBfX3Rlc3QgJiYgX19qIDwgX19s
ZW4gJiYgX19pIDwgX19uIC0gMTsgKytfX2osKytfX2kpCiAgICAgICAgICBfX3Rlc3QgJj0gX19n
cm91cGluZ1tfX2pdID09IF9fZ3JvdXBpbmdfdG1wW19fbiAtIF9faSAtIDFdOwoKCiAgICAgIF9f
aiA9PSBfX2xlbiA/IF9faiA9IDAgOiBfX2o7CiAgICAgIF9fdGVzdCAmPSBfX2dyb3VwaW5nW19f
al0gPj0gX19ncm91cGluZ190bXBbX19uIC0gX19pIC0gMV07CiAgICAgIHJldHVybiBfX3Rlc3Q7
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX0NoYXJUKgogICAg
X19hZGRfZ3JvdXBpbmcoX0NoYXJUKiBfX3MsIF9DaGFyVCBfX3NlcCwKICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIF9fZ2JlZywgY29uc3QgY2hhciogX19nZW5kLAogICAgICAgICAgICAg
ICAgICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0LCBjb25zdCBfQ2hhclQqIF9fbGFzdCkKICAgIHsK
ICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiAqX19nYmVnKQogICAgICAgIHsKICAgICAgICAg
IF9fcyA9IF9fYWRkX2dyb3VwaW5nKF9fcywgX19zZXAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoX19nYmVnICsgMSA9PSBfX2dlbmQgPyBfX2diZWcgOiBfX2diZWcgKyAxKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2VuZCwgX19maXJzdCwgX19sYXN0IC0gKl9f
Z2JlZyk7CiAgICAgICAgICBfX2ZpcnN0ID0gX19sYXN0IC0gKl9fZ2JlZzsKICAgICAgICAgICpf
X3MrKyA9IF9fc2VwOwogICAgICAgIH0KICAgICAgZG8KICAgICAgICAqX19zKysgPSAqX19maXJz
dCsrOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpOwogICAgICByZXR1cm4gX19zOwog
ICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT47
CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT47CiAgZXh0ZXJu
IHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIGZhbHNlPjsKICBleHRlcm4g
dGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8Y2hhciwgdHJ1ZT47CiAgZXh0ZXJuIHRl
bXBsYXRlIGNsYXNzIG1vbmV5X2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9u
ZXlfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdDxjaGFyPjsKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3RfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1w
bGF0ZSBjbGFzcyBudW1fZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fcHV0
PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX3RpbWVwdW5jdDxjaGFyPjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz
IHRpbWVfcHV0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8
Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTxjaGFyPjsKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXM8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIG1lc3NhZ2VzX2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVf
YnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0X2J5bmFtZTxjaGFy
LCBjaGFyLCBtYnN0YXRlX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlPGNoYXI+
OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTxjaGFyPjsKCiAgZXh0ZXJu
IHRlbXBsYXRlCiAgICBjb25zdCBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4mCiAgICB1
c2VfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29sbGF0ZTxjaGFyPiYKICAgIHVzZV9mYWNl
dDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg
Y29uc3QgbnVtcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fcHV0PGNoYXI+Jgog
ICAgdXNlX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBjb25zdCBudW1fZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bV9nZXQ8Y2hh
cj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1
bmN0PGNoYXIsIHRydWU+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT4gPihj
b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PGNo
YXIsIGZhbHNlPiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIGZhbHNlPiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X3B1dDxjaGFyPiYK
ICAgIHVzZV9mYWNldDxtb25leV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJu
IHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9nZXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bW9uZXlf
Z2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3Qg
X190aW1lcHVuY3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8Y2hhcj4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX3B1dDxjaGFyPiYK
ICAgIHVzZV9mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g
dGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PHRpbWVfZ2V0
PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbWVz
c2FnZXM8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihjb25zdCBsb2NhbGUm
KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y3R5cGU8Y2hhcj4g
Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj
ZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4
dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvbGxhdGU8Y2hhcj4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVt
cHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29s
CiAgICBoYXNfZmFjZXQ8bnVtX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g
dGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1fZ2V0PGNoYXI+ID4oY29uc3QgbG9j
YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5cHVu
Y3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAg
ICBoYXNfZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0
ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X2dldDxjaGFyPiA+KGNvbnN0IGxv
Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxfX3RpbWVw
dW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK
ICAgIGhhc19mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g
dGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX2dldDxjaGFyPiA+KGNvbnN0IGxv
Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtZXNzYWdl
czxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwojIDIzOTUgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCn0KIyA0NyAiL3NwYWNlL3Nu
Yi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2xvY2FsZSIgMiAzCiMgMzggIi9zcGFjZS9zbmIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL29zdHJlYW0udGNjIiAyIDMKCm5hbWVzcGFj
ZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNp
Y19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcykKICAgIDogX01fb2soX19vcy5nb29kKCkp
LCBfTV9vcyhfX29zKQogICAgewoKICAgICAgaWYgKF9NX29rICYmIF9fb3MudGllKCkpCiAgICAg
ICAgX19vcy50aWUoKS0+Zmx1c2goKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19vc3Ry
ZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg
ICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChf
X2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls
KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChpb3Nf
YmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
eyBfX3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBl
KiBfX3NiaW4pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19j
ZXJiICYmIF9fc2JpbikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGlmICghX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgdGhpcy0+cmRi
dWYoKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgZWxzZSBpZiAoIV9fc2JpbikKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoYm9vbCBfX24p
CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2No
ZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1
dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRoaXMtPmZpbGwoKTsKICAgICAg
ICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jh
c2U6OmJhc2VmaWVsZDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1
dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGJvb2wgX19iID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgIGlmICgoX19mbXQgJiBpb3NfYmFzZTo6b2N0KSB8fCAoX19mbXQg
JiBpb3NfYmFzZTo6aGV4KSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBsb25nIF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbik7
CiAgICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlz
LCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlz
LCAqdGhpcywgX19jLCBfX24pLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19iKQog
ICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2ln
bmVkIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChf
TV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkp
CiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGxvbmcgX19uKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0
aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhp
cy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYgKF9NX2No
ZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBpZiAoKF9fZm10ICYgaW9zX2Jh
c2U6Om9jdCkgfHwgKF9fZm10ICYgaW9zX2Jhc2U6OmhleCkpCiAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fbDsKICAgICAgICAg
ICAgICAgICAgICAgIF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oX19uKTsK
ICAgICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMs
IF9fYywgX19sKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMs
ICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAg
ICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWdu
ZWQgbG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBp
ZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxl
ZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoZG91YmxlIF9fbikKICAgIHsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFj
ZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlz
LCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAg
ICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwo
KSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoY29uc3Qg
dm9pZCogX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9m
bnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAg
ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjpwdXQoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaW50
X3R5cGUgX19wdXQgPSByZGJ1ZigpLT5zcHV0YyhfX2MpOwogICAgICAgICAgaWYgKHRyYWl0c190
eXBlOjplcV9pbnRfdHlwZShfX3B1dCwgdHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6d3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19u
KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAg
ICAgICB7CiAgICAgICAgICBzdHJlYW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4o
X19zLCBfX24pOwogICAgICAgICAgaWYgKCBfX3B1dCAhPSBfX24pCiAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OmZsdXNoKCkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRoaXMtPnJkYnVmKCkgJiYg
dGhpcy0+cmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5h
bWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0
ID0gcG9zX3R5cGUoLTEpOwogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICBfX3JldCA9
IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6Om91
dCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2Vla3AocG9zX3R5cGUgX19wb3Mp
CiAgICB7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAgICAgICAgcG9z
X3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6
b3V0KTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrcChvZmZfdHlwZSBfX29mZiwg
aW9zX2Jhc2U6OnNlZWtkaXIgX19kKQogICAgewogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkKICAg
ICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vl
a29mZihfX29mZiwgX19kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlvc19iYXNlOjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9z
X3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmZhaWxiaXQpOwoKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0
cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUg
X193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRp
Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX193ICsg
MSkpKTsKICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAgc3RyZWFt
c2l6ZSBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQo
X19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJl9fYywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAg
ICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291
dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hh
ciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19v
c3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29z
dHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXpl
IF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGlj
X2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193ICsgMSkpOwogICAgICAgICAgICAgIF9f
cGFkc1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsKICAgICAg
ICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgIF9fcGFkPGNoYXIsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19w
YWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2Ms
IF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7CiAg
ICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVu
YW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2Vy
YiAmJiBfX3MpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJU
KiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihf
Q2hhclQpICogX193KSk7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19j
YXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsKICAgICAgICAgICAgICBpZiAo
X193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPF9D
aGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fdywgX19s
ZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAg
ICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53
cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog
ICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg
ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlm
ICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICBy
ZXR1cm4gX19vdXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y
PDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19z
KQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29z
dHJlYW1fdHlwZTsKCgoKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPiBfX3RyYWl0c190
eXBlOwoKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQp
OwogICAgICBpZiAoX19jZXJiICYmIF9fcykKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19j
bGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgICAgICBfQ2hhclQqIF9fd3Mg
PSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICog
KF9fY2xlbiArIDEpKSk7CiAgICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX2Ns
ZW47ICsrX19pKQogICAgICAgICAgICBfX3dzW19faV0gPSBfX291dC53aWRlbihfX3NbX19pXSk7
CiAgICAgICAgICBfQ2hhclQqIF9fc3RyID0gX193czsKCiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1z
aXplPihfX2NsZW4pOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgo
KTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9f
YnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKCiAgICAgICAgICAgICAgaWYg
KF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxf
Q2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193cywgX193LCBf
X2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX3N0ciA9IF9fcGFkczsKICAgICAgICAg
ICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19v
dXQud3JpdGUoX19zdHIsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBl
bHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAg
YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVh
bTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAgICAgdHlw
ZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0
eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChf
X2NlcmIgJiYgX19zKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIGNo
YXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fdykpOwog
ICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihf
VHJhaXRzOjpsZW5ndGgoX19zKSk7CgogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8Y2hhciwgX1RyYWl0cz46Ol9T
X3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAg
ICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsK
ICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0
LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhj
ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9f
b3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y
PDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwKICAgICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7
CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90
eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3Mg
PSBfX3N0ci5kYXRhKCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7
CiAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRp
bl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgIHN0cmVhbXNpemUgX19s
ZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX3N0ci5zaXplKCkpOwoKCgogICAgICAgICAg
aWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19wYWQ8X0NoYXJU
LCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywgX19zLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fbGVuLCBmYWxz
ZSk7CiAgICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgIF9fbGVuID0gX193
OwogICAgICAgICAgICB9CiAgICAgICAgICBzdHJlYW1zaXplIF9fcmVzID0gX19vdXQucmRidWYo
KS0+c3B1dG4oX19zLCBfX2xlbik7CiAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAg
IGlmIChfX3JlcyAhPSBfX2xlbikKICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6
OmZhaWxiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCgoKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUg
b3N0cmVhbSYgZW5kbChvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGVuZHMo
b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBmbHVzaChvc3RyZWFtJik7CiAg
ZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNoYXIpOwogIGV4
dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCB1bnNpZ25lZCBjaGFy
KTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgc2lnbmVk
IGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBj
b25zdCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVh
bSYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3Bl
cmF0b3I8PChvc3RyZWFtJiwgY29uc3Qgc2lnbmVkIGNoYXIqKTsKIyA3MTMgIi9zcGFjZS9zbmIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL29zdHJlYW0udGNjIiAzCn0KIyA1MTYgIi9z
cGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9vc3RyZWFtIiAyIDMKIyA3MSAiL3Nw
YWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2l0ZXJhdG9yIiAyIDMKIyAxICIvc3Bh
Y2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvaXN0cmVhbSIgMSAzCiMgNDMgIi9zcGFj
ZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pc3RyZWFtIiAzCgoKCgpuYW1lc3BhY2Ug
c3RkCnsKIyA1NyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lzdHJlYW0i
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz
cyBiYXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRz
IHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBf
VHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9y
PF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dl
dDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwogICAgICB0eXBlZGVm
IGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3RlZDoKCgoKCgoKCiAgICAg
IHN0cmVhbXNpemUgX01fZ2NvdW50OwoKICAgIHB1YmxpYzoKIyA5NSAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2lzdHJlYW0iIDMKICAgICAgZXhwbGljaXQKICAgICAgYmFz
aWNfaXN0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7CiAgICAgICAgdGhpcy0+
aW5pdChfX3NiKTsKICAgICAgICBfTV9nY291bnQgPSBzdHJlYW1zaXplKDApOwogICAgICB9CgoK
CgoKCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lzdHJlYW0oKQogICAgICB7IF9NX2djb3Vu
dCA9IHN0cmVhbXNpemUoMCk7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBj
bGFzcyBzZW50cnk7CiMgMTI1ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
aXN0cmVhbSIgMwogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lzdHJl
YW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKTsKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlv
c19iYXNlJikpOwojIDE2MyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lz
dHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oYm9vbCYgX19u
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pOwoK
ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9f
bik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihpbnQmIF9fbik7Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbik7
CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nJiBfX24pOwoKICAg
ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKTsK
CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbik7
CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxv
bmcmIF9fbik7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZmxvYXQm
IF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihkb3VibGUmIF9f
Zik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYg
X19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX3Ap
OwojIDIyNCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lzdHJlYW0iIDMK
ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSog
X19zYik7CiMgMjM0ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvaXN0cmVh
bSIgMwogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgICBnY291bnQoKSBjb25zdAogICAgICB7
IHJldHVybiBfTV9nY291bnQ7IH0KIyAyNjYgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUv
YysrLzMuMy9pc3RyZWFtIiAzCiAgICAgIGludF90eXBlCiAgICAgIGdldCgpOwojIDI4MCAiL3Nw
YWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lzdHJlYW0iIDMKICAgICAgX19pc3Ry
ZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUmIF9fYyk7CiMgMzA3ICIvc3BhY2Uvc25iL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvaXN0cmVhbSIgMwogICAgICBfX2lzdHJlYW1fdHlwZSYK
ICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVs
aW0pOwojIDMxOCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lzdHJlYW0i
IDMKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBfX3Ms
IHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5nZXQoX19zLCBfX24sIHRoaXMt
PndpZGVuKCdcbicpKTsgfQojIDM0MSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2lzdHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVhbWJ1
Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSk7CiMgMzUxICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvaXN0cmVhbSIgMwogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5
cGUmCiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiKQogICAgICB7IHJldHVybiB0aGlz
LT5nZXQoX19zYiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CiMgMzgwICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvaXN0cmVhbSIgMwogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg
ICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2Rl
bGltKTsKIyAzOTEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pc3RyZWFt
IiAzCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUq
IF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldGxpbmUoX19zLCBf
X24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQojIDQxMCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2lzdHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGlnbm9y
ZShzdHJlYW1zaXplIF9fbiA9IDEsIGludF90eXBlIF9fZGVsaW0gPSB0cmFpdHNfdHlwZTo6ZW9m
KCkpOwojIDQyMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lzdHJlYW0i
IDMKICAgICAgaW50X3R5cGUKICAgICAgcGVlaygpOwojIDQzOSAiL3NwYWNlL3NuYi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2lzdHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg
IHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKIyA0NTggIi9zcGFjZS9zbmIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pc3RyZWFtIiAzCiAgICAgIHN0cmVhbXNpemUKICAg
ICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKIyA0NzggIi9zcGFj
ZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pc3RyZWFtIiAzCiAgICAgIF9faXN0cmVh
bV90eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwojIDQ5MyAiL3NwYWNlL3NuYi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lzdHJlYW0iIDMKICAgICAgX19pc3RyZWFtX3R5cGUm
CiAgICAgIHVuZ2V0KCk7CiMgNTE0ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvaXN0cmVhbSIgMwogICAgICBpbnQKICAgICAgc3luYygpOwojIDUyOCAiL3NwYWNlL3NuYi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lzdHJlYW0iIDMKICAgICAgcG9zX3R5cGUKICAgICAg
dGVsbGcoKTsKIyA1NDYgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pc3Ry
ZWFtIiAzCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBzZWVrZyhwb3NfdHlwZSk7CiMgNTY1
ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvaXN0cmVhbSIgMwogICAgICBf
X2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsK
CiAgICB9OwojIDU4MSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lzdHJl
YW0iIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBj
bGFzcyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5
cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIF9faW50X3R5cGU7
CiMgNjEzICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvaXN0cmVhbSIgMwog
ICAgICBleHBsaWNpdAogICAgICBzZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX2lzLCBib29sIF9fbm9za2lwd3MgPSBmYWxzZSk7CiMgNjIzICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvaXN0cmVhbSIgMwogICAgICBvcGVyYXRvciBib29sKCkgeyBy
ZXR1cm4gX01fb2s7IH0KCiAgICBwcml2YXRlOgogICAgICBib29sIF9NX29rOwogICAgfTsKIyA2
NDIgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pc3RyZWFtIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4K
ICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
dHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0
dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRl
PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3Bl
cmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciYg
X19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7
IH0KIyA2ODMgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pc3RyZWFtIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFz
aWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyKiBfX3MpCiAgICB7
IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQoKICB0ZW1w
bGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAg
b3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFy
KiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3Mp
KTsgfQojIDcwNSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2lzdHJlYW0i
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz
cyBiYXNpY19pb3N0cmVhbQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+LAogICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAg
ICBwdWJsaWM6CgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
VHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190
eXBlOwoKCgogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lz
dHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g
X19vc3RyZWFtX3R5cGU7CgoKCgoKCgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVh
bShiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJl
YW1fdHlwZShfX3NiKSwgX19vc3RyZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgoKCgogICAgICB2
aXJ0dWFsCiAgICAgIH5iYXNpY19pb3N0cmVhbSgpIHsgfQogICAgfTsKIyA3NjQgIi9zcGFjZS9z
bmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9pc3RyZWFtIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgd3MoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzKTsKfQoK
CgoKCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvaXN0cmVh
bS50Y2MiIDEgMwojIDM2ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0
cy9pc3RyZWFtLnRjYyIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg
X19pbiwgYm9vbCBfX25vc2tpcHdzKQogICAgewogICAgICBpZiAoX19pbi5nb29kKCkpCiAgICAg
ICAgewogICAgICAgICAgaWYgKF9faW4udGllKCkpCiAgICAgICAgICAgIF9faW4udGllKCktPmZs
dXNoKCk7CiAgICAgICAgICBpZiAoIV9fbm9za2lwd3MgJiYgKF9faW4uZmxhZ3MoKSAmIGlvc19i
YXNlOjpza2lwd3MpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgX19pbnRfdHlw
ZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90
eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgICAgIF9faW50X3R5cGUgX19jID0g
X19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgaWYgKF9faW4uX01fY2hlY2tfZmFjZXQoX19p
bi5fTV9mY3R5cGUpKQogICAgICAgICAgICAgICAgd2hpbGUgKCF0cmFpdHNfdHlwZTo6ZXFfaW50
X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2luLl9NX2ZjdHlw
ZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSkpCiAgICAgICAgICAg
ICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwoKCgogICAgICAgICAgICAgIGlmICh0cmFpdHNf
dHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICBfX2luLnNldHN0
YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIGlm
IChfX2luLmdvb2QoKSkKICAgICAgICBfTV9vayA9IHRydWU7CiAgICAgIGVsc2UKICAgICAgICB7
CiAgICAgICAgICBfTV9vayA9IGZhbHNlOwogICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFz
ZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX2lzdHJl
YW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKQogICAgewogICAgICBfX3BmKCp0aGlz
KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX2lvc190
eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19w
ZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKQogICAgewogICAgICBzZW50
cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBf
X2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAg
ICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVt
Z2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0
b3I+PihzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl
KGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBsb25nIF9fbDsKICAgICAgICAgICAg
ICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVt
Z2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19sKTsKCgogICAgICAgICAgICAgIGlm
ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgICAgICYmIChudW1l
cmljX2xpbWl0czxzaG9ydD46Om1pbigpIDw9IF9fbAogICAgICAgICAgICAgICAgICAgICAgJiYg
X19sIDw9IG51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCkpKQogICAgICAgICAgICAgICAgX19u
ID0gX19sOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19i
YXNlOjpmYWlsYml0OwoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19u
KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k
Yml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAg
ICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgb3BlcmF0b3I+PihpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBp
b3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgbG9uZyBf
X2w7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAg
ICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbCk7CgoK
ICAgICAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAg
ICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgPD0gX19sCiAgICAgICAgICAg
ICAgICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQogICAgICAg
ICAgICAgICAgX19uID0gX19sOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShf
X2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25l
ZCBpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3Nf
YmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1n
ZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19l
cnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAg
ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQogICAgewogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAg
ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9m
bnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl
cmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jh
c2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVj
a19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhp
cywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9f
ZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nIGxv
bmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBp
ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFz
ZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQp
KQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIs
IF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19uKQogICAg
ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsK
ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAg
ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3Nf
YmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2No
ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0
aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
X19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZG91Ymxl
JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6
Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkK
ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBf
X24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX24pCiAgICB7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAg
ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9N
X2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBv
cGVyYXRvcj4+KHZvaWQqJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh
bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlv
c3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl
dChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwg
KnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2JvdXQpCiAgICB7CiAgICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAg
ICAgICBpZiAoX19jZXJiKQogICAgICAgICB7CiAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7CiAgICAgICAgICAgICAgIGlm
IChfX3Nib3V0KQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIF9fc3RyZWFt
YnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgICAgICBfX3h0
cmN0ID0gX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoIV9fc2JvdXQgfHwgIV9feHRyY3QpCiAgICAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpp
bnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldCh2b2lk
KQogICAgewogICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK
ICAgICAgaW50X3R5cGUgX19jID0gX19lb2Y7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg
ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gdGhpcy0+cmRidWYo
KS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl
KF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwg
aW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoY2hh
cl90eXBlJiBfX2MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFp
dHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19idWZ2YWwgPSB0aGlzLT5y
ZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50
X3R5cGUoX19idWZ2YWwsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgX01fZ2NvdW50ID0gMTsKICAgICAgICAgICAgICAgICAgX19jID0gdHJhaXRzX3R5cGU6OnRv
X2NoYXJfdHlwZShfX2J1ZnZhbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19i
YXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAg
X01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShf
X2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBl
Ojplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRi
dWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAg
ICAgICAgICB3aGlsZSAoX01fZ2NvdW50ICsgMSA8IF9fbgogICAgICAgICAgICAgICAgICAgICAm
JiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAg
ICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFy
X3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAg
ICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
IGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAqX19zID0gY2hhcl90eXBlKCk7
CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpm
YWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KF9fc3RyZWFt
YnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQg
PSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0
IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwog
ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog
ICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fdGhpc19zYiA9IHRoaXMtPnJkYnVmKCk7
CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX190aGlzX3NiLT5zZ2V0YygpOwogICAgICAg
ICAgICAgIGNoYXJfdHlwZSBfX2MyID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwoK
ICAgICAgICAgICAgICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9m
KQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywg
X19pZGVsaW0pCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5
cGUoX19zYi5zcHV0YyhfX2MyKSwgX19lb2YpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX19jID0gX190aGlzX3NiLT5z
bmV4dGMoKTsKICAgICAgICAgICAgICAgICAgX19jMiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5
cGUoX19jKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6
OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVs
aW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs
IHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlw
ZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19l
b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSog
X19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+
c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCArIDEgPCBfX24KICAgICAg
ICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQog
ICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19p
ZGVsaW0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFp
dHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2It
PnNuZXh0YygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2Yp
KQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAodHJh
aXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAg
ICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxi
aXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKICAgICAgaWYgKCFf
TV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24sIGlu
dF90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiICYmIF9fbiA+IDApCiAgICAgICAg
ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlw
ZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90
eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2M7Cgog
ICAgICAgICAgICAgIF9fbiA9IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+Ojpt
YXgoKSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbgogICAgICAgICAgICAg
ICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYyA9IF9fc2ItPnNidW1wYygp
LCBfX2VvZikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50
OwogICAgICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19k
ZWxpbSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBlZWsodm9pZCkKICAgIHsKICAg
ICAgaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291bnQgPSAw
OwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAg
ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5z
Z2V0YygpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl
IF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihf
X3MsIF9fbik7CiAgICAgICAgICAgICAgaWYgKF9NX2djb3VudCAhPSBfX24pCiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQp
OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsK
ICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCiAg
ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX251bSA9IHRoaXMtPnJkYnVmKCktPmluX2F2YWlsKCk7
CiAgICAgICAgICAgICAgaWYgKF9fbnVtID49IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgIF9fbnVtID0gbWluKF9fbnVtLCBfX24pOwogICAgICAgICAgICAgICAgICBpZiAo
X19udW0pCiAgICAgICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gdGhpcy0+cmRidWYoKS0+c2dl
dG4oX19zLCBfX251bSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9NX2dj
b3VudDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIHB1dGJhY2soY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBf
X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBl
KiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2IKICAgICAgICAg
ICAgICAgICAgfHwgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fc2ItPnNwdXRiYWNrYyhfX2Mp
LCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB1bmdldCh2b2lkKQogICAgewogICAgICBf
TV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAg
ICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAg
IGlmICghX19zYgogICAgICAgICAgICAgICAgICB8fCB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo
X19zYi0+c3VuZ2V0YygpLCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGludAogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIHN5bmModm9pZCkKICAgIHsKICAgICAgaW50IF9fcmV0ID0gLTE7
CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwog
ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAg
ICAgICAgICAgaWYgKF9fc2IpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlm
IChfX3NiLT5wdWJzeW5jKCkgPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICBfX3JldCA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBl
bmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgdGVsbGcodm9pZCkKICAgIHsKICAgICAgcG9z
X3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAg
ICAgIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBp
b3NfYmFzZTo6aW4pOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla2co
cG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIGlmICghdGhp
cy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5y
ZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICBpZiAo
X19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIHNlZWtnKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2Rp
cikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAg
ICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNl
ZWtvZmYoX19vZmYsIF9fZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlvc19iYXNlOjppbik7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBw
b3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6ZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19p
c3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9faW4uZ2V0KF9fYyk7IH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBf
X2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFy
VD4gX19jdHlwZV90eXBlOwogICAgICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0gMDsKCiAgICAg
IHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoKICAg
ICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gX19pbi53aWR0aCgpOwogICAgICAgICAgICAg
IGlmIChfX251bSA9PSAwKQogICAgICAgICAgICAgICAgX19udW0gPSBudW1lcmljX2xpbWl0czxz
dHJlYW1zaXplPjo6bWF4KCk7CgogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19j
dHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAg
ICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICAgICAg
X19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgICAgICBpbnRf
dHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX19leHRyYWN0
ZWQgPCBfX251bSAtIDEKICAgICAgICAgICAgICAgICAgICAgJiYgIV9UcmFpdHM6OmVxX2ludF90
eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAgICAgICYmICFfX2N0eXBlLmlzKGN0eXBl
X2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAq
X19zKysgPSBfX2M7CiAgICAgICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAg
ICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgICAg
IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgoKCiAgICAgICAgICAgICAgKl9fcyA9
IGNoYXJfdHlwZSgpOwoKICAgICAgICAgICAgICBfX2luLndpZHRoKDApOwogICAgICAgICAgICB9
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKF9faW4uZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoIV9fZXh0cmFj
dGVkKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1
cm4gX19pbjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0
cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faW4pCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBl
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9f
aW50X3R5cGU7CgogICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8
X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsKICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2Vv
ZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5y
ZGJ1ZigpOwogICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICB3aGls
ZSAoIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAmJiBfX2N0
eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0
YygpOwoKICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAg
ICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAg
ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJh
dG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAg
ICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5
cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw
ZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3NpemVf
dHlwZSBfX2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2Vu
dHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgX19zdHIuZXJhc2UoKTsKICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19pbi53aWR0
aCgpOwogICAgICAgICAgX19zaXplX3R5cGUgX19uOwogICAgICAgICAgX19uID0gX193ID4gMCA/
IHN0YXRpY19jYXN0PF9fc2l6ZV90eXBlPihfX3cpIDogX19zdHIubWF4X3NpemUoKTsKCiAgICAg
ICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8X19jdHlwZV90eXBl
PihfX2luLmdldGxvYygpKTsKICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJh
aXRzOjplb2YoKTsKICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVm
KCk7CiAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAg
d2hpbGUgKF9fZXh0cmFjdGVkIDwgX19uCiAgICAgICAgICAgICAgICAgJiYgIV9UcmFpdHM6OmVx
X2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAgJiYgIV9fY3R5cGUuaXMoY3R5
cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciAr
PSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVk
OwogICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICB9CiAgICAg
ICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgIF9f
aW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICBfX2luLndpZHRoKDApOwog
ICAgICAgIH0KCgogICAgICBpZiAoIV9fZXh0cmFjdGVkKQogICAgICAgIF9faW4uc2V0c3RhdGUg
KGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9fZGVsaW0pCiAgICB7CiAgICAgIHR5
cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9f
c3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9f
Y3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKCiAgICAgIF9fc2l6ZV90eXBl
IF9fZXh0cmFjdGVkID0gMDsKICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IGZhbHNlOwogICAgICB0
eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCB0cnVlKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAg
X19zaXplX3R5cGUgX19uID0gX19zdHIubWF4X3NpemUoKTsKCiAgICAgICAgICBfX2ludF90eXBl
IF9faWRlbGltID0gX1RyYWl0czo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICBfX3N0
cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgX19pbnRfdHlwZSBf
X2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBf
VHJhaXRzOjplb2YoKTsKICAgICAgICAgIF9fdGVzdGRlbGltID0gX1RyYWl0czo6ZXFfaW50X3R5
cGUoX19jLCBfX2lkZWxpbSk7CgogICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDw9IF9fbgog
ICAgICAgICAgICAgICAgICYmICFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAg
ICAgICAgICAgICAgICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IF9fc3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICsrX19l
eHRyYWN0ZWQ7CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAg
ICAgX190ZXN0ZGVsaW0gPSBfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2Yp
KQogICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgIH0K
ICAgICAgaWYgKCFfX2V4dHJhY3RlZCAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAgX19pbi5zZXRz
dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1w
bGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIGlubGlu
ZSBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LF9UcmFpdHMsX0FsbG9jPiYgX19zdHIpCiAgICB7IHJldHVybiBnZXRsaW5lKF9faW4sIF9fc3Ry
LCBfX2luLndpZGVuKCdcbicpKTsgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNf
aXN0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgd3MoaXN0cmVhbSYpOwog
IGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjaGFyJik7CiAg
ZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNoYXIqKTsKICBl
eHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hh
ciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBzaWdu
ZWQgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0m
LCB1bnNpZ25lZCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4o
aXN0cmVhbSYsIHNpZ25lZCBjaGFyKik7CgoKCgoKCgp9CiMgNzc0ICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvaXN0cmVhbSIgMiAzCiMgNzIgIi9zcGFjZS9zbmIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9pdGVyYXRvciIgMiAzCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RyZWFtX2l0ZXJhdG9yLmgiIDEgMwojIDM5ICIvc3Bh
Y2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdHJlYW1faXRlcmF0b3IuaCIg
MwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hh
clQgPSBjaGFyLAogICAgICAgICAgIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh
clQ+LCB0eXBlbmFtZSBfRGlzdCA9IHB0cmRpZmZfdD4KICAgIGNsYXNzIGlzdHJlYW1faXRlcmF0
b3IKICAgICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfVHAsIF9EaXN0
LCBjb25zdCBfVHAqLCBjb25zdCBfVHAmPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVm
IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAg
ICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoK
ICAgIHByaXZhdGU6CiAgICAgIGlzdHJlYW1fdHlwZSogX01fc3RyZWFtOwogICAgICBfVHAgX01f
dmFsdWU7CiAgICAgIGJvb2wgX01fb2s7CgogICAgcHVibGljOgogICAgICBpc3RyZWFtX2l0ZXJh
dG9yKCkgOiBfTV9zdHJlYW0oMCksIF9NX29rKGZhbHNlKSB7fQoKICAgICAgaXN0cmVhbV9pdGVy
YXRvcihpc3RyZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0oJl9fcykgeyBfTV9yZWFkKCk7IH0K
CiAgICAgIGlzdHJlYW1faXRlcmF0b3IoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYgX19vYmopCiAg
ICAgIDogX01fc3RyZWFtKF9fb2JqLl9NX3N0cmVhbSksIF9NX3ZhbHVlKF9fb2JqLl9NX3ZhbHVl
KSwKICAgICAgICBfTV9vayhfX29iai5fTV9vaykKICAgICAgeyB9CgogICAgICBjb25zdCBfVHAm
CiAgICAgIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbHVlOyB9CgogICAgICBjb25z
dCBfVHAqCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsg
fQoKICAgICAgaXN0cmVhbV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsgX01f
cmVhZCgpOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGlzdHJlYW1faXRlcmF0b3IKICAgICAgb3Bl
cmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICBpc3RyZWFtX2l0ZXJhdG9yIF9fdG1wID0gKnRo
aXM7CiAgICAgICAgX01fcmVhZCgpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAg
ICAgYm9vbAogICAgICBfTV9lcXVhbChjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJiBfX3gpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIChfTV9vayA9PSBfX3guX01fb2spICYmICghX01fb2sgfHwgX01fc3Ry
ZWFtID09IF9feC5fTV9zdHJlYW0pO30KCiAgICBwcml2YXRlOgogICAgICB2b2lkCiAgICAgIF9N
X3JlYWQoKQogICAgICB7CiAgICAgICAgX01fb2sgPSAoX01fc3RyZWFtICYmICpfTV9zdHJlYW0p
ID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgIGlmIChfTV9vaykKICAgICAgICAgIHsKICAgICAgICAg
ICAgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsKICAgICAgICAgICAgX01fb2sgPSAqX01fc3RyZWFt
ID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgICAgfQogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0Rpc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJh
dG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feCwKICAgICAgICAgICAgICAgY29u
c3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpCiAg
ICB7IHJldHVybiBfX3guX01fZXF1YWwoX195KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9EaXN0PgogICAgaW5saW5lIGJvb2wK
ICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0
cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1Rw
LCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195KQogICAgeyByZXR1cm4gIV9feC5fTV9lcXVh
bChfX3kpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCA9IGNo
YXIsCiAgICAgICAgICAgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog
ICAgY2xhc3Mgb3N0cmVhbV9pdGVyYXRvcgogICAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRf
aXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHVibGljOgog
ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFp
dHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0
cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIG9zdHJlYW1fdHlwZSogX01fc3RyZWFtOwog
ICAgICBjb25zdCBfQ2hhclQqIF9NX3N0cmluZzsKCiAgICBwdWJsaWM6CiAgICAgIG9zdHJlYW1f
aXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmco
MCkge30KCiAgICAgIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MsIGNvbnN0IF9D
aGFyVCogX19jKQogICAgICA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKF9fYykgeyB9Cgog
ICAgICBvc3RyZWFtX2l0ZXJhdG9yKGNvbnN0IG9zdHJlYW1faXRlcmF0b3ImIF9fb2JqKQogICAg
ICA6IF9NX3N0cmVhbShfX29iai5fTV9zdHJlYW0pLCBfTV9zdHJpbmcoX19vYmouX01fc3RyaW5n
KSB7IH0KCiAgICAgIG9zdHJlYW1faXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAm
IF9fdmFsdWUpCiAgICAgIHsKICAgICAgICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICAgICAg
aWYgKF9NX3N0cmluZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICB9CgogICAgICBvc3RyZWFtX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7
IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Ir
KygpIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtX2l0ZXJhdG9yJgogICAgICBvcGVy
YXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07Cn0KIyA3MyAiL3NwYWNlL3NuYi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2l0ZXJhdG9yIiAyIDMKIyA0OSAiLi4vLi4vaW5jbHVk
ZS9xdmFsdWVsaXN0LmgiIDIKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvbGlzdCIgMSAzCiMgNjUgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9s
aXN0IiAzCgojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Z1
bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z
LjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBz
dGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9f
dGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7
CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19s
b2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJy
b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5k
ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFp
bHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNjcgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9saXN0IiAyIDMKCgoKCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX2xpc3QuaCIgMSAzCiMgNjYgIi9zcGFjZS9zbmIvdXNyL2xvY2Fs
L2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9saXN0LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgoK
CiAgc3RydWN0IF9MaXN0X25vZGVfYmFzZQogIHsKICAgIF9MaXN0X25vZGVfYmFzZSogX01fbmV4
dDsKICAgIF9MaXN0X25vZGVfYmFzZSogX01fcHJldjsKICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgc3RydWN0IF9MaXN0X25vZGUgOiBwdWJsaWMgX0xpc3Rfbm9kZV9iYXNlCiAg
ewogICAgX1RwIF9NX2RhdGE7CiAgfTsKIyA5NyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX2xpc3QuaCIgMwogIHN0cnVjdCBfTGlzdF9pdGVyYXRvcl9iYXNl
CiAgewogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgdHlwZWRlZiBwdHJkaWZmX3Qg
ZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKCgogICAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9ub2RlOwoKICAgIF9M
aXN0X2l0ZXJhdG9yX2Jhc2UoX0xpc3Rfbm9kZV9iYXNlKiBfX3gpCiAgICA6IF9NX25vZGUoX194
KQogICAgeyB9CgogICAgX0xpc3RfaXRlcmF0b3JfYmFzZSgpCiAgICB7IH0KCgogICAgdm9pZAog
ICAgX01faW5jcigpCiAgICB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9uZXh0OyB9CgoKICAgIHZv
aWQKICAgIF9NX2RlY3IoKQogICAgeyBfTV9ub2RlID0gX01fbm9kZS0+X01fcHJldjsgfQoKICAg
IGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX0xpc3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25z
dAogICAgeyByZXR1cm4gX01fbm9kZSA9PSBfX3guX01fbm9kZTsgfQoKICAgIGJvb2wKICAgIG9w
ZXJhdG9yIT0oY29uc3QgX0xpc3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25zdAogICAgeyByZXR1
cm4gX01fbm9kZSAhPSBfX3guX01fbm9kZTsgfQogIH07CiMgMTQyICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbGlzdC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwLCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgogICAgc3RydWN0IF9MaXN0X2l0
ZXJhdG9yIDogcHVibGljIF9MaXN0X2l0ZXJhdG9yX2Jhc2UKICB7CiAgICB0eXBlZGVmIF9MaXN0
X2l0ZXJhdG9yPF9UcCxfVHAmLF9UcCo+IGl0ZXJhdG9yOwogICAgdHlwZWRlZiBfTGlzdF9pdGVy
YXRvcjxfVHAsY29uc3QgX1RwJixjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKICAgIHR5cGVk
ZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9SZWYsX1B0cj4gX1NlbGY7CgogICAgdHlwZWRlZiBfVHAg
dmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogICAgdHlwZWRlZiBfUmVmIHJl
ZmVyZW5jZTsKICAgIHR5cGVkZWYgX0xpc3Rfbm9kZTxfVHA+IF9Ob2RlOwoKICAgIF9MaXN0X2l0
ZXJhdG9yKF9Ob2RlKiBfX3gpCiAgICA6IF9MaXN0X2l0ZXJhdG9yX2Jhc2UoX194KQogICAgeyB9
CgogICAgX0xpc3RfaXRlcmF0b3IoKQogICAgeyB9CgogICAgX0xpc3RfaXRlcmF0b3IoY29uc3Qg
aXRlcmF0b3ImIF9feCkKICAgIDogX0xpc3RfaXRlcmF0b3JfYmFzZShfX3guX01fbm9kZSkKICAg
IHsgfQoKICAgIHJlZmVyZW5jZQogICAgb3BlcmF0b3IqKCkgY29uc3QKICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PF9Ob2RlKj4oX01fbm9kZSktPl9NX2RhdGE7IH0KCgogICAgcG9pbnRlcgogICAg
b3BlcmF0b3ItPigpIGNvbnN0CiAgICB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICAgIF9T
ZWxmJgogICAgb3BlcmF0b3IrKygpCiAgICB7CiAgICAgIHRoaXMtPl9NX2luY3IoKTsKICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICAgIF9TZWxmCiAgICBvcGVyYXRvcisrKGludCkKICAgIHsK
ICAgICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICAgdGhpcy0+X01faW5jcigpOwogICAgICBy
ZXR1cm4gX190bXA7CiAgICB9CgogICAgX1NlbGYmCiAgICBvcGVyYXRvci0tKCkKICAgIHsKICAg
ICAgdGhpcy0+X01fZGVjcigpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgX1NlbGYK
ICAgIG9wZXJhdG9yLS0oaW50KQogICAgewogICAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAg
ICB0aGlzLT5fTV9kZWNyKCk7CiAgICAgIHJldHVybiBfX3RtcDsKICAgIH0KICB9OwojIDIxMiAi
L3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2xpc3QuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0
aWM+CiAgICBjbGFzcyBfTGlzdF9hbGxvY19iYXNlCiAgewogIHB1YmxpYzoKICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQog
ICAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKCiAgICBhbGxvY2F0b3JfdHlwZQogICAgZ2V0X2Fs
bG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yOyB9CgogICAgX0xpc3Rf
YWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9ub2RlX2FsbG9j
YXRvcihfX2EpCiAgICB7IH0KCiAgcHJvdGVjdGVkOgogICAgX0xpc3Rfbm9kZTxfVHA+KgogICAg
X01fZ2V0X25vZGUoKQogICAgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7
IH0KCiAgICB2b2lkCiAgICBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9fcCkKICAgIHsg
X01fbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9CiMgMjQ3ICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB0eXBlbmFt
ZSBfQWxsb2NfdHJhaXRzPF9MaXN0X25vZGU8X1RwPiwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90
eXBlCiAgICAgICAgICAgICBfTV9ub2RlX2FsbG9jYXRvcjsKCiAgICBfTGlzdF9ub2RlPF9UcD4q
IF9NX25vZGU7CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9j
YXRvcj4KICAgIGNsYXNzIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVlPgog
IHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxs
b2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CgogICAg
YWxsb2NhdG9yX3R5cGUKICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0
b3JfdHlwZSgpOyB9CgogICAgX0xpc3RfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYp
CiAgICB7IH0KCiAgcHJvdGVjdGVkOgoKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFp
dHM8X0xpc3Rfbm9kZTxfVHA+LCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUKICAgICAgICAgICAg
X0FsbG9jX3R5cGU7CgogICAgX0xpc3Rfbm9kZTxfVHA+KgogICAgX01fZ2V0X25vZGUoKQogICAg
eyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKDEpOyB9CgogICAgdm9pZAogICAgX01fcHV0
X25vZGUoX0xpc3Rfbm9kZTxfVHA+KiBfX3ApCiAgICB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRl
KF9fcCwgMSk7IH0KCiAgICBfTGlzdF9ub2RlPF9UcD4qIF9NX25vZGU7CiAgfTsKCgoKCgoKCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgX0xpc3Rf
YmFzZQogICAgOiBwdWJsaWMgX0xpc3RfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3Rh
bmNlbGVzcz4KICB7CiAgcHVibGljOgogICAgdHlwZWRlZiBfTGlzdF9hbGxvY19iYXNlPF9UcCwg
X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBf
QWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICAgIF9CYXNlOwogICAgdHlwZWRlZiB0
eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogICAgX0xpc3Rf
YmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfQmFzZShfX2EpCiAgICB7CiAg
ICAgIF9NX25vZGUgPSBfTV9nZXRfbm9kZSgpOwogICAgICBfTV9ub2RlLT5fTV9uZXh0ID0gX01f
bm9kZTsKICAgICAgX01fbm9kZS0+X01fcHJldiA9IF9NX25vZGU7CiAgICB9CgoKICAgIH5fTGlz
dF9iYXNlKCkKICAgIHsKICAgICAgX19jbGVhcigpOwogICAgICBfTV9wdXRfbm9kZShfTV9ub2Rl
KTsKICAgIH0KCiAgICB2b2lkCiAgICBfX2NsZWFyKCk7CiAgfTsKIyAzNjUgIi9zcGFjZS9zbmIv
dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9saXN0LmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KICAgIGNsYXNz
IGxpc3QgOiBwcm90ZWN0ZWQgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4KICB7CgogICAKCiAgICB0
eXBlZGVmIF9MaXN0X2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOwoKICBwdWJsaWM6CiAgICB0eXBl
ZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogICAg
dHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogICAgdHlwZWRlZiBfTGlz
dF9pdGVyYXRvcjxfVHAsX1RwJixfVHAqPiBpdGVyYXRvcjsKICAgIHR5cGVkZWYgX0xpc3RfaXRl
cmF0b3I8X1RwLGNvbnN0IF9UcCYsY29uc3QgX1RwKj4gY29uc3RfaXRlcmF0b3I7CiAgICB0eXBl
ZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcjsKICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZl
cnNlX2l0ZXJhdG9yOwogICAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgICB0eXBl
ZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVkZWYgc2l6ZV90
IHNpemVfdHlwZTsKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBw
cm90ZWN0ZWQ6CgogICAgdHlwZWRlZiBfTGlzdF9ub2RlPF9UcD4gX05vZGU7CgoKCgoKCgogICAg
dXNpbmcgX0Jhc2U6Ol9NX25vZGU7CiAgICB1c2luZyBfQmFzZTo6X01fcHV0X25vZGU7CiAgICB1
c2luZyBfQmFzZTo6X01fZ2V0X25vZGU7CiMgNDA4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvYml0cy9zdGxfbGlzdC5oIiAzCiAgICBfTm9kZSoKICAgIF9NX2NyZWF0ZV9u
b2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgIHsKICAgICAgX05vZGUqIF9fcCA9IF9NX2dl
dF9ub2RlKCk7CiAgICAgIHRyeSB7CiAgICAgICAgX0NvbnN0cnVjdCgmX19wLT5fTV9kYXRhLCBf
X3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9NX3B1dF9ub2Rl
KF9fcCk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcDsKICAgIH0KCgoK
CgoKCiAgICBfTm9kZSoKICAgIF9NX2NyZWF0ZV9ub2RlKCkKICAgIHsKICAgICAgX05vZGUqIF9f
cCA9IF9NX2dldF9ub2RlKCk7CiAgICAgIHRyeSB7CiAgICAgICAgX0NvbnN0cnVjdCgmX19wLT5f
TV9kYXRhKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBfTV9wdXRf
bm9kZShfX3ApOwogICAgICAgIHRocm93OwogICAgICB9CiAgICAgIHJldHVybiBfX3A7CiAgICB9
CgogIHB1YmxpYzoKCgoKCgogICAgZXhwbGljaXQKICAgIGxpc3QoY29uc3QgYWxsb2NhdG9yX3R5
cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkgeyB9CiMgNDYxICIv
c3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbGlzdC5oIiAzCiAg
ICBsaXN0KHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsdWUsCiAgICAgICAg
IGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9C
YXNlKF9fYSkKICAgICAgeyB0aGlzLT5pbnNlcnQoYmVnaW4oKSwgX19uLCBfX3ZhbHVlKTsgfQoj
IDQ3MyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2xpc3Qu
aCIgMwogICAgZXhwbGljaXQKICAgIGxpc3Qoc2l6ZV90eXBlIF9fbikKICAgICAgOiBfQmFzZShh
bGxvY2F0b3JfdHlwZSgpKQogICAgICB7IHRoaXMtPmluc2VydChiZWdpbigpLCBfX24sIHZhbHVl
X3R5cGUoKSk7IH0KIyA0ODUgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9i
aXRzL3N0bF9saXN0LmgiIDMKICAgIGxpc3QoY29uc3QgbGlzdCYgX194KQogICAgICA6IF9CYXNl
KF9feC5nZXRfYWxsb2NhdG9yKCkpCiAgICAgIHsgdGhpcy0+aW5zZXJ0KGJlZ2luKCksIF9feC5i
ZWdpbigpLCBfX3guZW5kKCkpOyB9CiMgNTAyICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyYXRvcj4KICAgICAgbGlzdChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv
cl90eXBlKCkpCiAgICAgIDogX0Jhc2UoX19hKQogICAgICB7IHRoaXMtPmluc2VydChiZWdpbigp
LCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgoKCgoKCiAgICB+bGlzdCgpIHsgfQojIDUyMiAiL3NwYWNl
L3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2xpc3QuaCIgMwogICAgbGlz
dCYKICAgIG9wZXJhdG9yPShjb25zdCBsaXN0JiBfX3gpOwojIDUzNSAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2xpc3QuaCIgMwogICAgdm9pZAogICAgYXNz
aWduKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKSB7IF9NX2ZpbGxfYXNz
aWduKF9fbiwgX192YWwpOyB9CiMgNTUwICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
YXRvcj4KICAgICAgdm9pZAogICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0KQogICAgICB7CgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lz
X2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICAgIF9N
X2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgICAgfQoK
CiAgICBhbGxvY2F0b3JfdHlwZQogICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9C
YXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCgoKCgoKICAgIGl0ZXJhdG9yCiAgICBiZWdpbigpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PF9Ob2RlKj4oX01fbm9kZS0+X01fbmV4dCk7IH0KCgoKCgogICAg
Y29uc3RfaXRlcmF0b3IKICAgIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X05v
ZGUqPihfTV9ub2RlLT5fTV9uZXh0KTsgfQoKCgoKCiAgICBpdGVyYXRvcgogICAgZW5kKCkgeyBy
ZXR1cm4gX01fbm9kZTsgfQoKCgoKCiAgICBjb25zdF9pdGVyYXRvcgogICAgZW5kKCkgY29uc3Qg
eyByZXR1cm4gX01fbm9kZTsgfQoKCgoKCiAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICByYmVnaW4o
KSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKCgoKCiAgICBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yCiAgICByYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yKGVuZCgpKTsgfQoKCgoKCgogICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgcmVuZCgpIHsg
cmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCgoKCgoKICAgIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3IKICAgIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcihiZWdpbigpKTsgfQoKCgoKCiAgICBib29sCiAgICBlbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIF9NX25vZGUtPl9NX25leHQgPT0gX01fbm9kZTsgfQoKCiAgICBzaXplX3R5cGUKICAgIHNp
emUoKSBjb25zdCB7IHJldHVybiBkaXN0YW5jZShiZWdpbigpLCBlbmQoKSk7IH0KCgogICAgc2l6
ZV90eXBlCiAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KIyA2
NDggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9saXN0Lmgi
IDMKICAgIHZvaWQKICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgdmFsdWVf
dHlwZSYgX194KTsKIyA2NjAgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9i
aXRzL3N0bF9saXN0LmgiIDMKICAgIHZvaWQKICAgIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6
ZSkgeyB0aGlzLT5yZXNpemUoX19uZXdfc2l6ZSwgdmFsdWVfdHlwZSgpKTsgfQoKCgoKCgogICAg
cmVmZXJlbmNlCiAgICBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CgoKCgoKICAgIGNvbnN0
X3JlZmVyZW5jZQogICAgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQoKCgoKCiAg
ICByZWZlcmVuY2UKICAgIGJhY2soKSB7IHJldHVybiAqKC0tZW5kKCkpOyB9CgoKCgoKICAgIGNv
bnN0X3JlZmVyZW5jZQogICAgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooLS1lbmQoKSk7IH0KIyA3
MDIgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9saXN0Lmgi
IDMKICAgIHZvaWQKICAgIHB1c2hfZnJvbnQoY29uc3QgdmFsdWVfdHlwZSYgX194KSB7IHRoaXMt
Pmluc2VydChiZWdpbigpLCBfX3gpOyB9CiMgNzMzICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lkCiAgICBwb3BfZnJvbnQoKSB7
IHRoaXMtPmVyYXNlKGJlZ2luKCkpOyB9CiMgNzQ1ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvYml0cy9zdGxfbGlzdC5oIiAzCiAgICB2b2lkCiAgICBwdXNoX2JhY2soY29u
c3QgdmFsdWVfdHlwZSYgX194KSB7IHRoaXMtPmluc2VydChlbmQoKSwgX194KTsgfQojIDc3NiAi
L3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2xpc3QuaCIgMwog
ICAgdm9pZAogICAgcG9wX2JhY2soKQogICAgewogICAgICBpdGVyYXRvciBfX3RtcCA9IGVuZCgp
OwogICAgICB0aGlzLT5lcmFzZSgtLV9fdG1wKTsKICAgIH0KIyA3OTQgIi9zcGFjZS9zbmIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9saXN0LmgiIDMKICAgIGl0ZXJhdG9yCiAg
ICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKIyA4
MjkgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9saXN0Lmgi
IDMKICAgIHZvaWQKICAgIGluc2VydChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29u
c3QgdmFsdWVfdHlwZSYgX194KQogICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gp
OyB9CiMgODQ1ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf
bGlzdC5oIiAzCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9p
ZAogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgewoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9J
c19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgICBf
TV9pbnNlcnRfZGlzcGF0Y2goX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwog
ICAgICB9CiMgODcwICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9z
dGxfbGlzdC5oIiAzCiAgICBpdGVyYXRvcgogICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbik7
CiMgODkyICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbGlz
dC5oIiAzCiAgICBpdGVyYXRvcgogICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3Ig
X19sYXN0KQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgZXJh
c2UoX19maXJzdCsrKTsKICAgICAgcmV0dXJuIF9fbGFzdDsKICAgIH0KIyA5MDkgIi9zcGFjZS9z
bmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9saXN0LmgiIDMKICAgIHZvaWQK
ICAgIHN3YXAobGlzdCYgX194KSB7IHN0ZDo6c3dhcChfTV9ub2RlLCBfX3guX01fbm9kZSk7IH0K
CgoKCgoKCiAgICB2b2lkCiAgICBjbGVhcigpIHsgX0Jhc2U6Ol9fY2xlYXIoKTsgfQoKCgoKCiAg
ICB2b2lkCiAgICBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYgX194KQogICAgewog
ICAgICBpZiAoIV9feC5lbXB0eSgpKQogICAgICAgIHRoaXMtPl9NX3RyYW5zZmVyKF9fcG9zaXRp
b24sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogICAgfQoKCgoKICAgIHZvaWQKICAgIHNwbGlj
ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0b3IgX19pKQogICAgewogICAgICBp
dGVyYXRvciBfX2ogPSBfX2k7CiAgICAgICsrX19qOwogICAgICBpZiAoX19wb3NpdGlvbiA9PSBf
X2kgfHwgX19wb3NpdGlvbiA9PSBfX2opIHJldHVybjsKICAgICAgdGhpcy0+X01fdHJhbnNmZXIo
X19wb3NpdGlvbiwgX19pLCBfX2opOwogICAgfQoKCgoKICAgIHZvaWQKICAgIHNwbGljZShpdGVy
YXRvciBfX3Bvc2l0aW9uLCBsaXN0JiwgaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0
KQogICAgewogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgdGhpcy0+X01fdHJh
bnNmZXIoX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0KTsKICAgIH0KCgoKCiAgICB2b2lkCiAg
ICByZW1vdmUoY29uc3QgX1RwJiBfX3ZhbHVlKTsKCgoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UHJlZGljYXRlPgogICAgICB2b2lkCiAgICAgIHJlbW92ZV9pZihfUHJlZGljYXRlKTsKCgoKCiAg
ICB2b2lkCiAgICB1bmlxdWUoKTsKCgoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmluYXJ5UHJl
ZGljYXRlPgogICAgICB2b2lkCiAgICAgIHVuaXF1ZShfQmluYXJ5UHJlZGljYXRlKTsKCgoKCiAg
ICB2b2lkCiAgICBtZXJnZShsaXN0JiBfX3gpOwoKCgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9T
dHJpY3RXZWFrT3JkZXJpbmc+CiAgICAgIHZvaWQKICAgICAgbWVyZ2UobGlzdCYsIF9TdHJpY3RX
ZWFrT3JkZXJpbmcpOwoKCgoKICAgIHZvaWQKICAgIHJldmVyc2UoKSB7IF9fTGlzdF9iYXNlX3Jl
dmVyc2UodGhpcy0+X01fbm9kZSk7IH0KCgoKCiAgICB2b2lkCiAgICBzb3J0KCk7CgoKCgogICAg
dGVtcGxhdGU8dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmluZz4KICAgICAgdm9pZAogICAgICBz
b3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcpOwoKICBwcm90ZWN0ZWQ6CgoKCiAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW50ZWdlcj4KICAgICAgdm9pZAogICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX0lu
dGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICAgIHsKICAgICAgICBf
TV9maWxsX2Fzc2lnbihzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbiksCiAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX192YWwpKTsKICAgICAgfQoKCiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgICB2b2lkCiAgICAgIF9NX2Fzc2lnbl9k
aXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5
cGUpOwoKCgogICAgdm9pZAogICAgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3Qg
dmFsdWVfdHlwZSYgX192YWwpOwoKCgoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdlcj4K
ICAgICAgdm9pZAogICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRl
Z2VyIF9fbiwgX0ludGVnZXIgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5
cGUpCiAgICAgIHsKICAgICAgICBfTV9maWxsX2luc2VydChfX3Bvcywgc3RhdGljX2Nhc3Q8c2l6
ZV90eXBlPihfX24pLAogICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZhbHVlX3R5
cGU+KF9feCkpOwogICAgICB9CgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9y
PgogICAgICB2b2lkCiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAg
ewogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICAg
IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgICB9CgoKCiAgICB2b2lkCiAgICBfTV9maWxs
X2luc2VydChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYg
X194KQogICAgewogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uKQogICAgICAgIGluc2VydChf
X3BvcywgX194KTsKICAgIH0KCgoKICAgIHZvaWQKICAgIF9NX3RyYW5zZmVyKGl0ZXJhdG9yIF9f
cG9zaXRpb24sIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAg
aWYgKF9fcG9zaXRpb24gIT0gX19sYXN0KSB7CgogICAgICAgIF9fbGFzdC5fTV9ub2RlLT5fTV9w
cmV2LT5fTV9uZXh0ID0gX19wb3NpdGlvbi5fTV9ub2RlOwogICAgICAgIF9fZmlyc3QuX01fbm9k
ZS0+X01fcHJldi0+X01fbmV4dCA9IF9fbGFzdC5fTV9ub2RlOwogICAgICAgIF9fcG9zaXRpb24u
X01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fZmlyc3QuX01fbm9kZTsKCgogICAgICAgIF9M
aXN0X25vZGVfYmFzZSogX190bXAgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXY7CiAgICAg
ICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2ID0gX19sYXN0Ll9NX25vZGUtPl9NX3ByZXY7
CiAgICAgICAgX19sYXN0Ll9NX25vZGUtPl9NX3ByZXYgPSBfX2ZpcnN0Ll9NX25vZGUtPl9NX3By
ZXY7CiAgICAgICAgX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2ID0gX190bXA7CiAgICAgIH0KICAg
IH0KICB9OwojIDEwOTggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9saXN0LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4K
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gs
IGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBsaXN0PF9UcCxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICAgICAg
Y29uc3RfaXRlcmF0b3IgX19lbmQxID0gX194LmVuZCgpOwogICAgICBjb25zdF9pdGVyYXRvciBf
X2VuZDIgPSBfX3kuZW5kKCk7CgogICAgICBjb25zdF9pdGVyYXRvciBfX2kxID0gX194LmJlZ2lu
KCk7CiAgICAgIGNvbnN0X2l0ZXJhdG9yIF9faTIgPSBfX3kuYmVnaW4oKTsKICAgICAgd2hpbGUg
KF9faTEgIT0gX19lbmQxICYmIF9faTIgIT0gX19lbmQyICYmICpfX2kxID09ICpfX2kyKSB7CiAg
ICAgICAgKytfX2kxOwogICAgICAgICsrX19pMjsKICAgICAgfQogICAgICByZXR1cm4gX19pMSA9
PSBfX2VuZDEgJiYgX19pMiA9PSBfX2VuZDI7CiAgICB9CiMgMTEyNiAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2xpc3QuaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChj
b25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3gsIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkK
ICAgIHsKICAgICAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBf
X3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4o
KSwgX195LmVuZCgpKTsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgbGlzdDxfVHAsX0Fs
bG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9f
eCA9PSBfX3kpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194
LCBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPD0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0
PF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPj0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LCBjb25zdCBsaXN0PF9UcCxfQWxs
b2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAobGlzdDxf
VHAsIF9BbGxvYz4mIF9feCwgbGlzdDxfVHAsIF9BbGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAo
X195KTsgfQp9CiMgNzIgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9saXN0
IiAyIDMKCgojIDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xp
c3QudGNjIiAxIDMKIyA2NCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvbGlzdC50Y2MiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBfTGlzdF9iYXNlPF9UcCxfQWxsb2M+OjoKICAg
IF9fY2xlYXIoKQogICAgewogICAgICB0eXBlZGVmIF9MaXN0X25vZGU8X1RwPiBfTm9kZTsKICAg
ICAgX05vZGUqIF9fY3VyID0gc3RhdGljX2Nhc3Q8X05vZGUqPihfTV9ub2RlLT5fTV9uZXh0KTsK
ICAgICAgd2hpbGUgKF9fY3VyICE9IF9NX25vZGUpCiAgICAgIHsKICAgICAgICBfTm9kZSogX190
bXAgPSBfX2N1cjsKICAgICAgICBfX2N1ciA9IHN0YXRpY19jYXN0PF9Ob2RlKj4oX19jdXItPl9N
X25leHQpOwogICAgICAgIF9EZXN0cm95KCZfX3RtcC0+X01fZGF0YSk7CiAgICAgICAgX01fcHV0
X25vZGUoX190bXApOwogICAgICB9CiAgICAgIF9NX25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwog
ICAgICBfTV9ub2RlLT5fTV9wcmV2ID0gX01fbm9kZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBsaXN0PF9UcCxfQWxsb2M+Ojpp
dGVyYXRvcgogICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICBpbnNlcnQoaXRlcmF0b3IgX19wb3Np
dGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgewogICAgICBfTm9kZSogX190bXAgPSBf
TV9jcmVhdGVfbm9kZShfX3gpOwogICAgICBfX3RtcC0+X01fbmV4dCA9IF9fcG9zaXRpb24uX01f
bm9kZTsKICAgICAgX190bXAtPl9NX3ByZXYgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXY7
CiAgICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fdG1wOwogICAg
ICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYgPSBfX3RtcDsKICAgICAgcmV0dXJuIF9fdG1w
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5
cGVuYW1lIGxpc3Q8X1RwLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBsaXN0PF9UcCxfQWxsb2M+OjoK
ICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAgICB7CiAgICAgIF9MaXN0X25vZGVfYmFz
ZSogX19uZXh0X25vZGUgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX25leHQ7CiAgICAgIF9MaXN0
X25vZGVfYmFzZSogX19wcmV2X25vZGUgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXY7CiAg
ICAgIF9Ob2RlKiBfX24gPSBzdGF0aWNfY2FzdDxfTm9kZSo+KF9fcG9zaXRpb24uX01fbm9kZSk7
CiAgICAgIF9fcHJldl9ub2RlLT5fTV9uZXh0ID0gX19uZXh0X25vZGU7CiAgICAgIF9fbmV4dF9u
b2RlLT5fTV9wcmV2ID0gX19wcmV2X25vZGU7CiAgICAgIF9EZXN0cm95KCZfX24tPl9NX2RhdGEp
OwogICAgICBfTV9wdXRfbm9kZShfX24pOwogICAgICByZXR1cm4gaXRlcmF0b3Ioc3RhdGljX2Nh
c3Q8X05vZGUqPihfX25leHRfbm9kZSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGxpc3Q8X1RwLF9BbGxvYz46OgogICAgcmVz
aXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7CiAg
ICAgIGl0ZXJhdG9yIF9faSA9IGJlZ2luKCk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAg
ICAgIGZvciAoIDsgX19pICE9IGVuZCgpICYmIF9fbGVuIDwgX19uZXdfc2l6ZTsgKytfX2ksICsr
X19sZW4pCiAgICAgICAgOwogICAgICBpZiAoX19sZW4gPT0gX19uZXdfc2l6ZSkKICAgICAgICBl
cmFzZShfX2ksIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwgX19uZXdf
c2l6ZSAtIF9fbGVuLCBfX3gpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGxpc3Q8X1RwLF9BbGxvYz4mCiAgICBsaXN0PF9UcCxfQWxsb2M+OjoK
ICAgIG9wZXJhdG9yPShjb25zdCBsaXN0JiBfX3gpCiAgICB7CiAgICAgIGlmICh0aGlzICE9ICZf
X3gpCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX2ZpcnN0MSA9IGJlZ2luKCk7CiAgICAgICAg
aXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogICAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fZmlyc3Qy
ID0gX194LmJlZ2luKCk7CiAgICAgICAgY29uc3RfaXRlcmF0b3IgX19sYXN0MiA9IF9feC5lbmQo
KTsKICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh
c3QyKQogICAgICAgICAgKl9fZmlyc3QxKysgPSAqX19maXJzdDIrKzsKICAgICAgICBpZiAoX19m
aXJzdDIgPT0gX19sYXN0MikKICAgICAgICAgIGVyYXNlKF9fZmlyc3QxLCBfX2xhc3QxKTsKICAg
ICAgICBlbHNlCiAgICAgICAgICBpbnNlcnQoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwog
ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBsaXN0PF9UcCxfQWxsb2M+OjoKICAgIF9N
X2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQogICAg
ewogICAgICBpdGVyYXRvciBfX2kgPSBiZWdpbigpOwogICAgICBmb3IgKCA7IF9faSAhPSBlbmQo
KSAmJiBfX24gPiAwOyArK19faSwgLS1fX24pCiAgICAgICAgKl9faSA9IF9fdmFsOwogICAgICBp
ZiAoX19uID4gMCkKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbiwgX192YWwpOwogICAgICBlbHNl
CiAgICAgICAgZXJhc2UoX19pLCBlbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAg
ICAgIHZvaWQKICAgICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRj
aChfSW5wdXRJdGVyIF9fZmlyc3QyLCBfSW5wdXRJdGVyIF9fbGFzdDIsIF9fZmFsc2VfdHlwZSkK
ICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICAgICAgICBpdGVy
YXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICAgICAgZm9yICg7IF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgX19maXJzdDIgIT0gX19sYXN0MjsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICAg
ICpfX2ZpcnN0MSA9ICpfX2ZpcnN0MjsKICAgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikK
ICAgICAgICAgIGVyYXNlKF9fZmlyc3QxLCBfX2xhc3QxKTsKICAgICAgICBlbHNlCiAgICAgICAg
ICBpbnNlcnQoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgbGlzdDxfVHAsX0Fs
bG9jPjo6CiAgICByZW1vdmUoY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSkKICAgIHsKICAgICAg
aXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAgIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgp
OwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgIHsKICAgICAgICBpdGVyYXRv
ciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgICsrX19uZXh0OwogICAgICAgIGlmICgqX19maXJz
dCA9PSBfX3ZhbHVlKQogICAgICAgICAgZXJhc2UoX19maXJzdCk7CiAgICAgICAgX19maXJzdCA9
IF9fbmV4dDsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHZvaWQKICAgIGxpc3Q8X1RwLF9BbGxvYz46OgogICAgdW5pcXVlKCkKICAg
IHsKICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAgIGl0ZXJhdG9yIF9fbGFz
dCA9IGVuZCgpOwogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICAgICAgaXRl
cmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkK
ICAgICAgewogICAgICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICAgICAgZXJhc2Uo
X19uZXh0KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICAg
IF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBsaXN0PF9UcCxfQWxsb2M+OjoKICAgIG1l
cmdlKGxpc3QmIF9feCkKICAgIHsKICAgICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwog
ICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICAgIGl0ZXJhdG9yIF9fZmlyc3QyID0g
X194LmJlZ2luKCk7CiAgICAgIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgICAgIHdo
aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAg
aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBf
X25leHQgPSBfX2ZpcnN0MjsKICAgICAgICAgIF9NX3RyYW5zZmVyKF9fZmlyc3QxLCBfX2ZpcnN0
MiwgKytfX25leHQpOwogICAgICAgICAgX19maXJzdDIgPSBfX25leHQ7CiAgICAgICAgfQogICAg
ICAgIGVsc2UKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgIGlmIChfX2ZpcnN0MiAhPSBfX2xh
c3QyKQogICAgICAgIF9NX3RyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAg
IH0KCgogIGlubGluZSB2b2lkCiAgX19MaXN0X2Jhc2VfcmV2ZXJzZShfTGlzdF9ub2RlX2Jhc2Uq
IF9fcCkKICB7CiAgICBfTGlzdF9ub2RlX2Jhc2UqIF9fdG1wID0gX19wOwogICAgZG8gewogICAg
ICBzdGQ6OnN3YXAoX190bXAtPl9NX25leHQsIF9fdG1wLT5fTV9wcmV2KTsKICAgICAgX190bXAg
PSBfX3RtcC0+X01fcHJldjsKICAgIH0gd2hpbGUgKF9fdG1wICE9IF9fcCk7CiAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGxpc3Q8X1Rw
LF9BbGxvYz46OgogICAgc29ydCgpCiAgICB7CgogICAgICBpZiAoX01fbm9kZS0+X01fbmV4dCAh
PSBfTV9ub2RlICYmIF9NX25vZGUtPl9NX25leHQtPl9NX25leHQgIT0gX01fbm9kZSkKICAgICAg
ewogICAgICAgIGxpc3QgX19jYXJyeTsKICAgICAgICBsaXN0IF9fY291bnRlcls2NF07CiAgICAg
ICAgaW50IF9fZmlsbCA9IDA7CiAgICAgICAgd2hpbGUgKCFlbXB0eSgpKQogICAgICAgIHsKICAg
ICAgICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJlZ2luKCkpOwog
ICAgICAgICAgaW50IF9faSA9IDA7CiAgICAgICAgICB3aGlsZShfX2kgPCBfX2ZpbGwgJiYgIV9f
Y291bnRlcltfX2ldLmVtcHR5KCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fY291bnRlcltf
X2ldLm1lcmdlKF9fY2FycnkpOwogICAgICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19f
aSsrXSk7CiAgICAgICAgICB9CiAgICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0p
OwogICAgICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpICsrX19maWxsOwogICAgICAgIH0KCiAgICAg
ICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19maWxsOyArK19faSkKICAgICAgICAgIF9fY291
bnRlcltfX2ldLm1lcmdlKF9fY291bnRlcltfX2ktMV0pOwogICAgICAgIHN3YXAoX19jb3VudGVy
W19fZmlsbC0xXSk7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgICAgdm9p
ZAogICAgICBsaXN0PF9UcCxfQWxsb2M+OjoKICAgICAgcmVtb3ZlX2lmKF9QcmVkaWNhdGUgX19w
cmVkKQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgICAgICAg
aXRlcmF0b3IgX19sYXN0ID0gZW5kKCk7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
KQogICAgICAgIHsKICAgICAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgICAg
ICArK19fbmV4dDsKICAgICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSBlcmFzZShfX2ZpcnN0
KTsKICAgICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgICAgfQogICAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVuYW1l
IF9CaW5hcnlQcmVkaWNhdGU+CiAgICAgIHZvaWQKICAgICAgbGlzdDxfVHAsX0FsbG9jPjo6CiAg
ICAgIHVuaXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICAgIHsKICAgICAg
ICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QgPSBl
bmQoKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICAgICAgICBpdGVy
YXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3Qp
CiAgICAgICAgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQp
KQogICAgICAgICAgICBlcmFzZShfX25leHQpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBf
X2ZpcnN0ID0gX19uZXh0OwogICAgICAgICAgX19uZXh0ID0gX19maXJzdDsKICAgICAgICB9CiAg
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgX1N0cmljdFdlYWtPcmRlcmluZz4KICAgICAgdm9pZAogICAgICBsaXN0
PF9UcCxfQWxsb2M+OjoKICAgICAgbWVyZ2UobGlzdCYgX194LCBfU3RyaWN0V2Vha09yZGVyaW5n
IF9fY29tcCkKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICAg
ICAgICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgICAgICAgaXRlcmF0b3IgX19maXJzdDIg
PSBfX3guYmVnaW4oKTsKICAgICAgICBpdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwogICAg
ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAg
ICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgIHsKICAg
ICAgICAgICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDI7CiAgICAgICAgICAgIF9NX3RyYW5z
ZmVyKF9fZmlyc3QxLCBfX2ZpcnN0MiwgKytfX25leHQpOwogICAgICAgICAgICBfX2ZpcnN0MiA9
IF9fbmV4dDsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgKytfX2ZpcnN0
MTsKICAgICAgICBpZiAoX19maXJzdDIgIT0gX19sYXN0MikgX01fdHJhbnNmZXIoX19sYXN0MSwg
X19maXJzdDIsIF9fbGFzdDIpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+
CiAgICB2b2lkCiAgICBsaXN0PF9UcCxfQWxsb2M+OjoKICAgIHNvcnQoX1N0cmljdFdlYWtPcmRl
cmluZyBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX01fbm9kZS0+X01fbmV4dCAhPSBfTV9ub2Rl
ICYmIF9NX25vZGUtPl9NX25leHQtPl9NX25leHQgIT0gX01fbm9kZSkKICAgICAgewogICAgICAg
IGxpc3QgX19jYXJyeTsKICAgICAgICBsaXN0IF9fY291bnRlcls2NF07CiAgICAgICAgaW50IF9f
ZmlsbCA9IDA7CiAgICAgICAgd2hpbGUgKCFlbXB0eSgpKQogICAgICAgIHsKICAgICAgICAgIF9f
Y2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRoaXMsIGJlZ2luKCkpOwogICAgICAgICAg
aW50IF9faSA9IDA7CiAgICAgICAgICB3aGlsZShfX2kgPCBfX2ZpbGwgJiYgIV9fY291bnRlcltf
X2ldLmVtcHR5KCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdl
KF9fY2FycnksIF9fY29tcCk7CiAgICAgICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19p
KytdKTsKICAgICAgICAgIH0KICAgICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7
CiAgICAgICAgICBpZiAoX19pID09IF9fZmlsbCkgKytfX2ZpbGw7CiAgICAgICAgfQoKICAgICAg
ICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsrX19pKQogICAgICAgICAgX19jb3Vu
dGVyW19faV0ubWVyZ2UoX19jb3VudGVyW19faS0xXSwgX19jb21wKTsKICAgICAgICBzd2FwKF9f
Y291bnRlcltfX2ZpbGwtMV0pOwogICAgICB9CiAgICB9Cn0KIyA3NSAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2xpc3QiIDIgMwojIDUwICIuLi8uLi9pbmNsdWRlL3F2YWx1
ZWxpc3QuaCIgMgojIDU4ICIuLi8uLi9pbmNsdWRlL3F2YWx1ZWxpc3QuaCIKdGVtcGxhdGUgPGNs
YXNzIFQ+CmNsYXNzIFFWYWx1ZUxpc3ROb2RlCnsKcHVibGljOgogICAgUVZhbHVlTGlzdE5vZGUo
IGNvbnN0IFQmIHQgKSA6IGRhdGEoIHQgKSB7IH0KICAgIFFWYWx1ZUxpc3ROb2RlKCkgeyB9CgoK
CgoKICAgIFFWYWx1ZUxpc3ROb2RlPFQ+KiBuZXh0OwogICAgUVZhbHVlTGlzdE5vZGU8VD4qIHBy
ZXY7CiAgICBUIGRhdGE7Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBRVmFsdWVMaXN0SXRl
cmF0b3IKewogcHVibGljOgoKCgogICAgdHlwZWRlZiBRVmFsdWVMaXN0Tm9kZTxUPiogTm9kZVB0
cjsKCiAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3Jf
Y2F0ZWdvcnk7CgogICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHNpemVfdCBz
aXplX3R5cGU7CgogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKCgogICAg
dHlwZWRlZiBUKiBwb2ludGVyOwogICAgdHlwZWRlZiBUJiByZWZlcmVuY2U7CgoKCgogICAgTm9k
ZVB0ciBub2RlOwoKCgoKICAgIFFWYWx1ZUxpc3RJdGVyYXRvcigpIDogbm9kZSggMCApIHt9CiAg
ICBRVmFsdWVMaXN0SXRlcmF0b3IoIE5vZGVQdHIgcCApIDogbm9kZSggcCApIHt9CiAgICBRVmFs
dWVMaXN0SXRlcmF0b3IoIGNvbnN0IFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgaXQgKSA6IG5vZGUo
IGl0Lm5vZGUgKSB7fQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVZhbHVlTGlzdEl0ZXJh
dG9yPFQ+JiBpdCApIGNvbnN0IHsgcmV0dXJuIG5vZGUgPT0gaXQubm9kZTsgfQogICAgYm9vbCBv
cGVyYXRvciE9KCBjb25zdCBRVmFsdWVMaXN0SXRlcmF0b3I8VD4mIGl0ICkgY29uc3QgeyByZXR1
cm4gbm9kZSAhPSBpdC5ub2RlOyB9CiAgICBjb25zdCBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiBub2RlLT5kYXRhOyB9CiAgICBUJiBvcGVyYXRvciooKSB7IHJldHVybiBub2RlLT5kYXRh
OyB9CgoKCiAgICBRVmFsdWVMaXN0SXRlcmF0b3I8VD4mIG9wZXJhdG9yKysoKSB7CiAgICAgICAg
bm9kZSA9IG5vZGUtPm5leHQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFWYWx1
ZUxpc3RJdGVyYXRvcjxUPiBvcGVyYXRvcisrKGludCkgewogICAgICAgIFFWYWx1ZUxpc3RJdGVy
YXRvcjxUPiB0bXAgPSAqdGhpczsKICAgICAgICBub2RlID0gbm9kZS0+bmV4dDsKICAgICAgICBy
ZXR1cm4gdG1wOwogICAgfQoKICAgIFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgb3BlcmF0b3ItLSgp
IHsKICAgICAgICBub2RlID0gbm9kZS0+cHJldjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogICAgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+IG9wZXJhdG9yLS0oaW50KSB7CiAgICAgICAgUVZh
bHVlTGlzdEl0ZXJhdG9yPFQ+IHRtcCA9ICp0aGlzOwogICAgICAgIG5vZGUgPSBub2RlLT5wcmV2
OwogICAgICAgIHJldHVybiB0bXA7CiAgICB9CgogICAgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+JiBv
cGVyYXRvcis9KCBpbnQgaiApIHsKICAgICAgICB3aGlsZSAoIGotLSApCiAgICAgICAgICAgIG5v
ZGUgPSBub2RlLT5uZXh0OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBRVmFsdWVM
aXN0SXRlcmF0b3I8VD4mIG9wZXJhdG9yLT0oIGludCBqICkgewogICAgICAgIHdoaWxlICggai0t
ICkKICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnByZXY7CiAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9y
CnsKIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgUVZhbHVlTGlzdE5vZGU8VD4qIE5vZGVQdHI7Cgog
ICAgdHlwZWRlZiBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn
b3J5OwoKICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90
eXBlOwoKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCgoKICAgIHR5cGVk
ZWYgY29uc3QgVCogcG9pbnRlcjsKICAgIHR5cGVkZWYgY29uc3QgVCYgcmVmZXJlbmNlOwoKCgoK
ICAgIE5vZGVQdHIgbm9kZTsKCgoKCiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcigpIDogbm9k
ZSggMCApIHt9CiAgICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvciggTm9kZVB0ciBwICkgOiBub2Rl
KCBwICkge30KICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yKCBjb25zdCBRVmFsdWVMaXN0Q29u
c3RJdGVyYXRvcjxUPiYgaXQgKSA6IG5vZGUoIGl0Lm5vZGUgKSB7fQogICAgUVZhbHVlTGlzdENv
bnN0SXRlcmF0b3IoIGNvbnN0IFFWYWx1ZUxpc3RJdGVyYXRvcjxUPiYgaXQgKSA6IG5vZGUoIGl0
Lm5vZGUgKSB7fQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVZhbHVlTGlzdENvbnN0SXRl
cmF0b3I8VD4mIGl0ICkgY29uc3QgeyByZXR1cm4gbm9kZSA9PSBpdC5ub2RlOyB9CiAgICBib29s
IG9wZXJhdG9yIT0oIGNvbnN0IFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+JiBpdCApIGNvbnN0
IHsgcmV0dXJuIG5vZGUgIT0gaXQubm9kZTsgfQogICAgY29uc3QgVCYgb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gbm9kZS0+ZGF0YTsgfQoKCgogICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8
VD4mIG9wZXJhdG9yKysoKSB7CiAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7CiAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKICAgIFFWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPFQ+IG9wZXJhdG9y
KysoaW50KSB7CiAgICAgICAgUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8VD4gdG1wID0gKnRoaXM7
CiAgICAgICAgbm9kZSA9IG5vZGUtPm5leHQ7CiAgICAgICAgcmV0dXJuIHRtcDsKICAgIH0KCiAg
ICBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiYgb3BlcmF0b3ItLSgpIHsKICAgICAgICBub2Rl
ID0gbm9kZS0+cHJldjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlz
dENvbnN0SXRlcmF0b3I8VD4gb3BlcmF0b3ItLShpbnQpIHsKICAgICAgICBRVmFsdWVMaXN0Q29u
c3RJdGVyYXRvcjxUPiB0bXAgPSAqdGhpczsKICAgICAgICBub2RlID0gbm9kZS0+cHJldjsKICAg
ICAgICByZXR1cm4gdG1wOwogICAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFFWYWx1
ZUxpc3RQcml2YXRlIDogcHVibGljIFFTaGFyZWQKewpwdWJsaWM6CgoKCiAgICB0eXBlZGVmIFFW
YWx1ZUxpc3RJdGVyYXRvcjxUPiBJdGVyYXRvcjsKICAgIHR5cGVkZWYgUVZhbHVlTGlzdENvbnN0
SXRlcmF0b3I8VD4gQ29uc3RJdGVyYXRvcjsKICAgIHR5cGVkZWYgUVZhbHVlTGlzdE5vZGU8VD4g
Tm9kZTsKICAgIHR5cGVkZWYgUVZhbHVlTGlzdE5vZGU8VD4qIE5vZGVQdHI7CiAgICB0eXBlZGVm
IHNpemVfdCBzaXplX3R5cGU7CgoKCgogICAgUVZhbHVlTGlzdFByaXZhdGUoKTsKICAgIFFWYWx1
ZUxpc3RQcml2YXRlKCBjb25zdCBRVmFsdWVMaXN0UHJpdmF0ZTxUPiYgX3AgKTsKCiAgICB2b2lk
IGRlcmVmQW5kRGVsZXRlKCkKICAgIHsKICAgICAgICBpZiAoIGRlcmVmKCkgKQogICAgICAgICAg
ICBkZWxldGUgdGhpczsKICAgIH0KCgoKCgogICAgflFWYWx1ZUxpc3RQcml2YXRlKCk7CgogICAg
SXRlcmF0b3IgaW5zZXJ0KCBJdGVyYXRvciBpdCwgY29uc3QgVCYgeCApOwogICAgSXRlcmF0b3Ig
cmVtb3ZlKCBJdGVyYXRvciBpdCApOwogICAgTm9kZVB0ciBmaW5kKCBOb2RlUHRyIHN0YXJ0LCBj
b25zdCBUJiB4ICkgY29uc3Q7CiAgICBpbnQgZmluZEluZGV4KCBOb2RlUHRyIHN0YXJ0LCBjb25z
dCBUJiB4ICkgY29uc3Q7CiAgICB1aW50IGNvbnRhaW5zKCBjb25zdCBUJiB4ICkgY29uc3Q7CiAg
ICB1aW50IHJlbW92ZSggY29uc3QgVCYgeCApOwogICAgTm9kZVB0ciBhdCggc2l6ZV90eXBlIGkg
KSBjb25zdDsKICAgIHZvaWQgY2xlYXIoKTsKCiAgICBOb2RlUHRyIG5vZGU7CiAgICBzaXplX3R5
cGUgbm9kZXM7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpR
VmFsdWVMaXN0UHJpdmF0ZSgpCnsKICAgIG5vZGUgPSBuZXcgTm9kZTsgbm9kZS0+bmV4dCA9IG5v
ZGUtPnByZXYgPSBub2RlOyBub2RlcyA9IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogUVZhbHVl
TGlzdFByaXZhdGU8VD46OlFWYWx1ZUxpc3RQcml2YXRlKCBjb25zdCBRVmFsdWVMaXN0UHJpdmF0
ZTxUPiYgX3AgKQogICAgOiBRU2hhcmVkKCkKewogICAgbm9kZSA9IG5ldyBOb2RlOyBub2RlLT5u
ZXh0ID0gbm9kZS0+cHJldiA9IG5vZGU7IG5vZGVzID0gMDsKICAgIEl0ZXJhdG9yIGIoIF9wLm5v
ZGUtPm5leHQgKTsKICAgIEl0ZXJhdG9yIGUoIF9wLm5vZGUgKTsKICAgIEl0ZXJhdG9yIGkoIG5v
ZGUgKTsKICAgIHdoaWxlKCBiICE9IGUgKQogICAgICAgIGluc2VydCggaSwgKmIrKyApOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgVD4KIFFWYWx1ZUxpc3RQcml2YXRlPFQ+Ojp+UVZhbHVlTGlzdFByaXZh
dGUoKSB7CiAgICBOb2RlUHRyIHAgPSBub2RlLT5uZXh0OwogICAgd2hpbGUoIHAgIT0gbm9kZSAp
IHsKICAgICAgICBOb2RlUHRyIHggPSBwLT5uZXh0OwogICAgICAgIGRlbGV0ZSBwOwogICAgICAg
IHAgPSB4OwogICAgfQogICAgZGVsZXRlIG5vZGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogdHlw
ZW5hbWUgUVZhbHVlTGlzdFByaXZhdGU8VD46Okl0ZXJhdG9yIFFWYWx1ZUxpc3RQcml2YXRlPFQ+
OjppbnNlcnQoIHR5cGVuYW1lIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpJdGVyYXRvciBpdCwgY29u
c3QgVCYgeCApCnsKICAgIE5vZGVQdHIgcCA9IG5ldyBOb2RlKCB4ICk7CiAgICBwLT5uZXh0ID0g
aXQubm9kZTsKICAgIHAtPnByZXYgPSBpdC5ub2RlLT5wcmV2OwogICAgaXQubm9kZS0+cHJldi0+
bmV4dCA9IHA7CiAgICBpdC5ub2RlLT5wcmV2ID0gcDsKICAgIG5vZGVzKys7CiAgICByZXR1cm4g
cDsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiB0eXBlbmFtZSBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6
SXRlcmF0b3IgUVZhbHVlTGlzdFByaXZhdGU8VD46OnJlbW92ZSggdHlwZW5hbWUgUVZhbHVlTGlz
dFByaXZhdGU8VD46Okl0ZXJhdG9yIGl0ICkKewogICAgKChpdC5ub2RlICE9IG5vZGUpID8gKHZv
aWQpMCA6IHFXYXJuaW5nKCJBU1NFUlQ6IFwiJXNcIiBpbiAlcyAoJWQpIiwiaXQubm9kZSAhPSBu
b2RlIiwiLi4vLi4vaW5jbHVkZS9xdmFsdWVsaXN0LmgiLDMwMSkpOwogICAgTm9kZVB0ciBuZXh0
ID0gaXQubm9kZS0+bmV4dDsKICAgIE5vZGVQdHIgcHJldiA9IGl0Lm5vZGUtPnByZXY7CiAgICBw
cmV2LT5uZXh0ID0gbmV4dDsKICAgIG5leHQtPnByZXYgPSBwcmV2OwogICAgZGVsZXRlIGl0Lm5v
ZGU7CiAgICBub2Rlcy0tOwogICAgcmV0dXJuIEl0ZXJhdG9yKCBuZXh0ICk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBUPgogdHlwZW5hbWUgUVZhbHVlTGlzdFByaXZhdGU8VD46Ok5vZGVQdHIgUVZhbHVl
TGlzdFByaXZhdGU8VD46OmZpbmQoIHR5cGVuYW1lIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpOb2Rl
UHRyIHN0YXJ0LCBjb25zdCBUJiB4ICkgY29uc3QKewogICAgQ29uc3RJdGVyYXRvciBmaXJzdCgg
c3RhcnQgKTsKICAgIENvbnN0SXRlcmF0b3IgbGFzdCggbm9kZSApOwogICAgd2hpbGUoIGZpcnN0
ICE9IGxhc3QpIHsKICAgICAgICBpZiAoICpmaXJzdCA9PSB4ICkKICAgICAgICAgICAgcmV0dXJu
IGZpcnN0Lm5vZGU7CiAgICAgICAgKytmaXJzdDsKICAgIH0KICAgIHJldHVybiBsYXN0Lm5vZGU7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogaW50IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpmaW5kSW5k
ZXgoIHR5cGVuYW1lIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpOb2RlUHRyIHN0YXJ0LCBjb25zdCBU
JiB4ICkgY29uc3QKewogICAgQ29uc3RJdGVyYXRvciBmaXJzdCggc3RhcnQgKTsKICAgIENvbnN0
SXRlcmF0b3IgbGFzdCggbm9kZSApOwogICAgaW50IHBvcyA9IDA7CiAgICB3aGlsZSggZmlyc3Qg
IT0gbGFzdCkgewogICAgICAgIGlmICggKmZpcnN0ID09IHggKQogICAgICAgICAgICByZXR1cm4g
cG9zOwogICAgICAgICsrZmlyc3Q7CiAgICAgICAgKytwb3M7CiAgICB9CiAgICByZXR1cm4gLTE7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogdWludCBRVmFsdWVMaXN0UHJpdmF0ZTxUPjo6Y29udGFp
bnMoIGNvbnN0IFQmIHggKSBjb25zdAp7CiAgICB1aW50IHJlc3VsdCA9IDA7CiAgICBJdGVyYXRv
ciBmaXJzdCA9IEl0ZXJhdG9yKCBub2RlLT5uZXh0ICk7CiAgICBJdGVyYXRvciBsYXN0ID0gSXRl
cmF0b3IoIG5vZGUgKTsKICAgIHdoaWxlKCBmaXJzdCAhPSBsYXN0KSB7CiAgICAgICAgaWYgKCAq
Zmlyc3QgPT0geCApCiAgICAgICAgICAgICsrcmVzdWx0OwogICAgICAgICsrZmlyc3Q7CiAgICB9
CiAgICByZXR1cm4gcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHVpbnQgUVZhbHVlTGlz
dFByaXZhdGU8VD46OnJlbW92ZSggY29uc3QgVCYgeCApCnsKICAgIHVpbnQgcmVzdWx0ID0gMDsK
ICAgIEl0ZXJhdG9yIGZpcnN0ID0gSXRlcmF0b3IoIG5vZGUtPm5leHQgKTsKICAgIEl0ZXJhdG9y
IGxhc3QgPSBJdGVyYXRvciggbm9kZSApOwogICAgd2hpbGUoIGZpcnN0ICE9IGxhc3QpIHsKICAg
ICAgICBpZiAoICpmaXJzdCA9PSB4ICkgewogICAgICAgICAgICBmaXJzdCA9IHJlbW92ZSggZmly
c3QgKTsKICAgICAgICAgICAgKytyZXN1bHQ7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICsr
Zmlyc3Q7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHR5
cGVuYW1lIFFWYWx1ZUxpc3RQcml2YXRlPFQ+OjpOb2RlUHRyIFFWYWx1ZUxpc3RQcml2YXRlPFQ+
OjphdCggc2l6ZV90eXBlIGkgKSBjb25zdAp7CiAgICAoKGkgPD0gbm9kZXMpID8gKHZvaWQpMCA6
IHFXYXJuaW5nKCJBU1NFUlQ6IFwiJXNcIiBpbiAlcyAoJWQpIiwiaSA8PSBub2RlcyIsIi4uLy4u
L2luY2x1ZGUvcXZhbHVlbGlzdC5oIiwzNzIpKTsKICAgIE5vZGVQdHIgcCA9IG5vZGUtPm5leHQ7
CiAgICBmb3IoIHNpemVfdHlwZSB4ID0gMDsgeCA8IGk7ICsreCApCiAgICAgICAgcCA9IHAtPm5l
eHQ7CiAgICByZXR1cm4gcDsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiB2b2lkIFFWYWx1ZUxpc3RQ
cml2YXRlPFQ+OjpjbGVhcigpCnsKICAgIG5vZGVzID0gMDsKICAgIE5vZGVQdHIgcCA9IG5vZGUt
Pm5leHQ7CiAgICB3aGlsZSggcCAhPSBub2RlICkgewogICAgICAgIE5vZGVQdHIgbmV4dCA9IHAt
Pm5leHQ7CiAgICAgICAgZGVsZXRlIHA7CiAgICAgICAgcCA9IG5leHQ7CiAgICB9CiAgICBub2Rl
LT5uZXh0ID0gbm9kZS0+cHJldiA9IG5vZGU7Cn0KIyA0MDUgIi4uLy4uL2luY2x1ZGUvcXZhbHVl
bGlzdC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUURlZXBDb3B5OwoKdGVtcGxhdGUgPGNs
YXNzIFQ+CmNsYXNzIFFWYWx1ZUxpc3QKewpwdWJsaWM6CgoKCiAgICB0eXBlZGVmIFFWYWx1ZUxp
c3RJdGVyYXRvcjxUPiBpdGVyYXRvcjsKICAgIHR5cGVkZWYgUVZhbHVlTGlzdENvbnN0SXRlcmF0
b3I8VD4gY29uc3RfaXRlcmF0b3I7CiAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKICAgIHR5cGVk
ZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29u
c3RfcG9pbnRlcjsKICAgIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogICAgdHlwZWRl
ZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgICB0eXBlZGVmIHNpemVfdCBz
aXplX3R5cGU7CgogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKCgoKCgoK
ICAgIFFWYWx1ZUxpc3QoKSB7IHNoID0gbmV3IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OyB9CiAgICBR
VmFsdWVMaXN0KCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBsICkgeyBzaCA9IGwuc2g7IHNoLT5yZWYo
KTsgfQoKCgoKCiAgICBRVmFsdWVMaXN0KCBjb25zdCB0eXBlbmFtZSBzdGQ6Omxpc3Q8VD4mIGwg
KQogICAgewogICAgICAgIHNoID0gbmV3IFFWYWx1ZUxpc3RQcml2YXRlPFQ+OwogICAgICAgIHFD
b3B5KCBsLmJlZ2luKCksIGwuZW5kKCksIHN0ZDo6YmFja19pbnNlcnRlciggKnRoaXMgKSApOwog
ICAgfQoKICAgIH5RVmFsdWVMaXN0KCkgeyBzaC0+ZGVyZWZBbmREZWxldGUoKTsgfQoKICAgIFFW
YWx1ZUxpc3Q8VD4mIG9wZXJhdG9yPSAoIGNvbnN0IFFWYWx1ZUxpc3Q8VD4mIGwgKQogICAgewog
ICAgICAgIGwuc2gtPnJlZigpOwogICAgICAgIHNoLT5kZXJlZkFuZERlbGV0ZSgpOwogICAgICAg
IHNoID0gbC5zaDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUVZhbHVlTGlzdDxU
PiYgb3BlcmF0b3I9ICggY29uc3QgdHlwZW5hbWUgc3RkOjpsaXN0PFQ+JiBsICkKICAgIHsKICAg
ICAgICBkZXRhY2goKTsKICAgICAgICBxQ29weSggbC5iZWdpbigpLCBsLmVuZCgpLCBzdGQ6OmJh
Y2tfaW5zZXJ0ZXIoICp0aGlzICkgKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICBi
b29sIG9wZXJhdG9yPT0gKCBjb25zdCB0eXBlbmFtZSBzdGQ6Omxpc3Q8VD4mIGwgKSBjb25zdAog
ICAgewogICAgICAgIGlmICggc2l6ZSgpICE9IGwuc2l6ZSgpICkKICAgICAgICAgICAgcmV0dXJu
IEZBTFNFOwogICAgICAgIGNvbnN0X2l0ZXJhdG9yIGl0MiA9IGJlZ2luKCk7CgogICAgICAgIHR5
cGVuYW1lCgogICAgICAgIHN0ZDo6bGlzdDxUPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsLmJlZ2lu
KCk7CiAgICAgICAgZm9yICggOyBpdDIgIT0gZW5kKCk7ICsraXQyLCArK2l0ICkKICAgICAgICBp
ZiAoICEoKCppdDIpID09ICgqaXQpKSApCiAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAg
ICByZXR1cm4gVFJVRTsKICAgIH0KCgoKCgogICAgYm9vbCBvcGVyYXRvcj09ICggY29uc3QgUVZh
bHVlTGlzdDxUPiYgbCApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRvciE9ICggY29uc3QgUVZhbHVl
TGlzdDxUPiYgbCApIGNvbnN0IHsgcmV0dXJuICEoICp0aGlzID09IGwgKTsgfQogICAgaXRlcmF0
b3IgYmVnaW4oKSB7IGRldGFjaCgpOyByZXR1cm4gaXRlcmF0b3IoIHNoLT5ub2RlLT5uZXh0ICk7
IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0
b3IoIHNoLT5ub2RlLT5uZXh0ICk7IH0KICAgIGl0ZXJhdG9yIGVuZCgpIHsgZGV0YWNoKCk7IHJl
dHVybiBpdGVyYXRvciggc2gtPm5vZGUgKTsgfQogICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoIHNoLT5ub2RlICk7IH0KICAgIGl0ZXJhdG9yIGlu
c2VydCggaXRlcmF0b3IgaXQsIGNvbnN0IFQmIHggKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPmlu
c2VydCggaXQsIHggKTsgfQogICAgdWludCByZW1vdmUoIGNvbnN0IFQmIHggKSB7IGRldGFjaCgp
OyByZXR1cm4gc2gtPnJlbW92ZSggeCApOyB9CiAgICB2b2lkIGNsZWFyKCk7CgogICAgUVZhbHVl
TGlzdDxUPiYgb3BlcmF0b3I8PCAoIGNvbnN0IFQmIHggKQogICAgewogICAgICAgIGFwcGVuZCgg
eCApOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBzaXplX3R5cGUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIHNoLT5ub2RlczsgfQogICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IHNoLT5ub2RlcyA9PSAwOyB9CiAgICB2b2lkIHB1c2hfZnJvbnQoIGNvbnN0IFQmIHggKSB7IGRl
dGFjaCgpOyBzaC0+aW5zZXJ0KCBiZWdpbigpLCB4ICk7IH0KICAgIHZvaWQgcHVzaF9iYWNrKCBj
b25zdCBUJiB4ICkgeyBkZXRhY2goKTsgc2gtPmluc2VydCggZW5kKCksIHggKTsgfQogICAgaXRl
cmF0b3IgZXJhc2UoIGl0ZXJhdG9yIHBvcyApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+cmVtb3Zl
KCBwb3MgKTsgfQogICAgaXRlcmF0b3IgZXJhc2UoIGl0ZXJhdG9yIGZpcnN0LCBpdGVyYXRvciBs
YXN0ICk7CiAgICByZWZlcmVuY2UgZnJvbnQoKSB7IDsgcmV0dXJuICpiZWdpbigpOyB9CiAgICBj
b25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IDsgcmV0dXJuICpiZWdpbigpOyB9CiAgICBy
ZWZlcmVuY2UgYmFjaygpIHsgOyByZXR1cm4gKigtLWVuZCgpKTsgfQogICAgY29uc3RfcmVmZXJl
bmNlIGJhY2soKSBjb25zdCB7IDsgcmV0dXJuICooLS1lbmQoKSk7IH0KICAgIHZvaWQgcG9wX2Zy
b250KCkgeyA7IGVyYXNlKCBiZWdpbigpICk7IH0KICAgIHZvaWQgcG9wX2JhY2soKSB7CiAgICAg
ICAgOwogICAgICAgIGl0ZXJhdG9yIHRtcCA9IGVuZCgpOwogICAgICAgIGVyYXNlKCAtLXRtcCAp
OwogICAgfQogICAgdm9pZCBpbnNlcnQoIGl0ZXJhdG9yIHBvcywgc2l6ZV90eXBlIG4sIGNvbnN0
IFQmIHggKTsKIyA1MjIgIi4uLy4uL2luY2x1ZGUvcXZhbHVlbGlzdC5oIgogICAgUVZhbHVlTGlz
dDxUPiBvcGVyYXRvcisgKCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBsICkgY29uc3Q7CiAgICBRVmFs
dWVMaXN0PFQ+JiBvcGVyYXRvcis9ICggY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApOwoKICAgIGl0
ZXJhdG9yIGZyb21MYXN0KCkgeyBkZXRhY2goKTsgcmV0dXJuIGl0ZXJhdG9yKCBzaC0+bm9kZS0+
cHJldiApOyB9CiAgICBjb25zdF9pdGVyYXRvciBmcm9tTGFzdCgpIGNvbnN0IHsgcmV0dXJuIGNv
bnN0X2l0ZXJhdG9yKCBzaC0+bm9kZS0+cHJldiApOyB9CgogICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gKCBzaC0+bm9kZXMgPT0gMCApOyB9CgogICAgaXRlcmF0b3IgYXBwZW5kKCBj
b25zdCBUJiB4ICkgeyBkZXRhY2goKTsgcmV0dXJuIHNoLT5pbnNlcnQoIGVuZCgpLCB4ICk7IH0K
ICAgIGl0ZXJhdG9yIHByZXBlbmQoIGNvbnN0IFQmIHggKSB7IGRldGFjaCgpOyByZXR1cm4gc2gt
Pmluc2VydCggYmVnaW4oKSwgeCApOyB9CgogICAgaXRlcmF0b3IgcmVtb3ZlKCBpdGVyYXRvciBp
dCApIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+cmVtb3ZlKCBpdCApOyB9CgogICAgVCYgZmlyc3Qo
KSB7IDsgZGV0YWNoKCk7IHJldHVybiBzaC0+bm9kZS0+bmV4dC0+ZGF0YTsgfQogICAgY29uc3Qg
VCYgZmlyc3QoKSBjb25zdCB7IDsgcmV0dXJuIHNoLT5ub2RlLT5uZXh0LT5kYXRhOyB9CiAgICBU
JiBsYXN0KCkgeyA7IGRldGFjaCgpOyByZXR1cm4gc2gtPm5vZGUtPnByZXYtPmRhdGE7IH0KICAg
IGNvbnN0IFQmIGxhc3QoKSBjb25zdCB7IDsgcmV0dXJuIHNoLT5ub2RlLT5wcmV2LT5kYXRhOyB9
CgogICAgVCYgb3BlcmF0b3JbXSAoIHNpemVfdHlwZSBpICkgeyA7IGRldGFjaCgpOyByZXR1cm4g
c2gtPmF0KGkpLT5kYXRhOyB9CiAgICBjb25zdCBUJiBvcGVyYXRvcltdICggc2l6ZV90eXBlIGkg
KSBjb25zdCB7IDsgcmV0dXJuIHNoLT5hdChpKS0+ZGF0YTsgfQogICAgaXRlcmF0b3IgYXQoIHNp
emVfdHlwZSBpICkgeyA7IGRldGFjaCgpOyByZXR1cm4gaXRlcmF0b3IoIHNoLT5hdChpKSApOyB9
CiAgICBjb25zdF9pdGVyYXRvciBhdCggc2l6ZV90eXBlIGkgKSBjb25zdCB7IDsgcmV0dXJuIGNv
bnN0X2l0ZXJhdG9yKCBzaC0+YXQoaSkgKTsgfQogICAgaXRlcmF0b3IgZmluZCAoIGNvbnN0IFQm
IHggKSB7IGRldGFjaCgpOyByZXR1cm4gaXRlcmF0b3IoIHNoLT5maW5kKCBzaC0+bm9kZS0+bmV4
dCwgeCkgKTsgfQogICAgY29uc3RfaXRlcmF0b3IgZmluZCAoIGNvbnN0IFQmIHggKSBjb25zdCB7
IHJldHVybiBjb25zdF9pdGVyYXRvciggc2gtPmZpbmQoIHNoLT5ub2RlLT5uZXh0LCB4KSApOyB9
CiAgICBpdGVyYXRvciBmaW5kICggaXRlcmF0b3IgaXQsIGNvbnN0IFQmIHggKSB7IGRldGFjaCgp
OyByZXR1cm4gaXRlcmF0b3IoIHNoLT5maW5kKCBpdC5ub2RlLCB4ICkgKTsgfQogICAgY29uc3Rf
aXRlcmF0b3IgZmluZCAoIGNvbnN0X2l0ZXJhdG9yIGl0LCBjb25zdCBUJiB4ICkgY29uc3QgeyBy
ZXR1cm4gY29uc3RfaXRlcmF0b3IoIHNoLT5maW5kKCBpdC5ub2RlLCB4ICkgKTsgfQogICAgaW50
IGZpbmRJbmRleCggY29uc3QgVCYgeCApIGNvbnN0IHsgcmV0dXJuIHNoLT5maW5kSW5kZXgoIHNo
LT5ub2RlLT5uZXh0LCB4KSA7IH0KICAgIHNpemVfdHlwZSBjb250YWlucyggY29uc3QgVCYgeCAp
IGNvbnN0IHsgcmV0dXJuIHNoLT5jb250YWlucyggeCApOyB9CgogICAgc2l6ZV90eXBlIGNvdW50
KCkgY29uc3QgeyByZXR1cm4gc2gtPm5vZGVzOyB9CgogICAgUVZhbHVlTGlzdDxUPiYgb3BlcmF0
b3IrPSAoIGNvbnN0IFQmIHggKQogICAgewogICAgICAgIGFwcGVuZCggeCApOwogICAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KICAgIHR5cGVkZWYgUVZhbHVlTGlzdEl0ZXJhdG9yPFQ+IEl0ZXJh
dG9yOwogICAgdHlwZWRlZiBRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBDb25zdEl0ZXJhdG9y
OwogICAgdHlwZWRlZiBUIFZhbHVlVHlwZTsKCnByb3RlY3RlZDoKCgoKICAgIHZvaWQgZGV0YWNo
KCkgeyBpZiAoIHNoLT5jb3VudCA+IDEgKSBkZXRhY2hJbnRlcm5hbCgpOyB9CgoKCgogICAgUVZh
bHVlTGlzdFByaXZhdGU8VD4qIHNoOwoKcHJpdmF0ZToKICAgIHZvaWQgZGV0YWNoSW50ZXJuYWwo
KTsKCiAgICBmcmllbmQgY2xhc3MgUURlZXBDb3B5PCBRVmFsdWVMaXN0PFQ+ID47Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgVD4KIGJvb2wgUVZhbHVlTGlzdDxUPjo6b3BlcmF0b3I9PSAoIGNvbnN0IFFW
YWx1ZUxpc3Q8VD4mIGwgKSBjb25zdAp7CiAgICBpZiAoIHNpemUoKSAhPSBsLnNpemUoKSApCiAg
ICAgICAgcmV0dXJuIEZBTFNFOwogICAgY29uc3RfaXRlcmF0b3IgaXQyID0gYmVnaW4oKTsKICAg
IGNvbnN0X2l0ZXJhdG9yIGl0ID0gbC5iZWdpbigpOwogICAgZm9yKCA7IGl0ICE9IGwuZW5kKCk7
ICsraXQsICsraXQyICkKICAgICAgICBpZiAoICEoICppdCA9PSAqaXQyICkgKQogICAgICAgICAg
ICByZXR1cm4gRkFMU0U7CiAgICByZXR1cm4gVFJVRTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CiB2
b2lkIFFWYWx1ZUxpc3Q8VD46OmNsZWFyKCkKewogICAgaWYgKCBzaC0+Y291bnQgPT0gMSApIHNo
LT5jbGVhcigpOyBlbHNlIHsgc2gtPmRlcmVmKCk7IHNoID0gbmV3IFFWYWx1ZUxpc3RQcml2YXRl
PFQ+OyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgogdHlwZW5hbWUgUVZhbHVlTGlzdDxUPjo6aXRl
cmF0b3IgUVZhbHVlTGlzdDxUPjo6ZXJhc2UoIHR5cGVuYW1lIFFWYWx1ZUxpc3Q8VD46Oml0ZXJh
dG9yIGZpcnN0LCB0eXBlbmFtZSBRVmFsdWVMaXN0PFQ+OjppdGVyYXRvciBsYXN0ICkKewogICAg
d2hpbGUgKCBmaXJzdCAhPSBsYXN0ICkKICAgICAgICBlcmFzZSggZmlyc3QrKyApOwogICAgcmV0
dXJuIGxhc3Q7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIHZvaWQgUVZhbHVlTGlzdDxUPjo6aW5z
ZXJ0KCB0eXBlbmFtZSBRVmFsdWVMaXN0PFQ+OjppdGVyYXRvciBwb3MsIHNpemVfdHlwZSBuLCBj
b25zdCBUJiB4ICkKewogICAgZm9yICggOyBuID4gMDsgLS1uICkKICAgICAgICBpbnNlcnQoIHBv
cywgeCApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIFFWYWx1ZUxpc3Q8VD4gUVZhbHVlTGlzdDxU
Pjo6b3BlcmF0b3IrICggY29uc3QgUVZhbHVlTGlzdDxUPiYgbCApIGNvbnN0CnsKICAgIFFWYWx1
ZUxpc3Q8VD4gbDIoICp0aGlzICk7CiAgICBmb3IoIGNvbnN0X2l0ZXJhdG9yIGl0ID0gbC5iZWdp
bigpOyBpdCAhPSBsLmVuZCgpOyArK2l0ICkKICAgICAgICBsMi5hcHBlbmQoICppdCApOwogICAg
cmV0dXJuIGwyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KIFFWYWx1ZUxpc3Q8VD4mIFFWYWx1ZUxp
c3Q8VD46Om9wZXJhdG9yKz0gKCBjb25zdCBRVmFsdWVMaXN0PFQ+JiBsICkKewogICAgZm9yKCBj
b25zdF9pdGVyYXRvciBpdCA9IGwuYmVnaW4oKTsgaXQgIT0gbC5lbmQoKTsgKytpdCApCiAgICAg
ICAgYXBwZW5kKCAqaXQgKTsKICAgIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+
CiB2b2lkIFFWYWx1ZUxpc3Q8VD46OmRldGFjaEludGVybmFsKCkKewogICAgc2gtPmRlcmVmKCk7
IHNoID0gbmV3IFFWYWx1ZUxpc3RQcml2YXRlPFQ+KCAqc2ggKTsKfQoKCnRlbXBsYXRlIDxjbGFz
cyBUPgogUURhdGFTdHJlYW0mIG9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtJiBzLCBRVmFsdWVMaXN0
PFQ+JiBsICkKewogICAgbC5jbGVhcigpOwogICAgUV9VSU5UMzIgYzsKICAgIHMgPj4gYzsKICAg
IGZvciggUV9VSU5UMzIgaSA9IDA7IGkgPCBjOyArK2kgKQogICAgewogICAgICAgIFQgdDsKICAg
ICAgICBzID4+IHQ7CiAgICAgICAgbC5hcHBlbmQoIHQgKTsKICAgICAgICBpZiAoIHMuYXRFbmQo
KSApCiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIHM7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBUPgogUURhdGFTdHJlYW0mIG9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtJiBzLCBjb25zdCBR
VmFsdWVMaXN0PFQ+JiBsICkKewogICAgcyA8PCAoUV9VSU5UMzIpbC5zaXplKCk7CiAgICBRVmFs
dWVMaXN0Q29uc3RJdGVyYXRvcjxUPiBpdCA9IGwuYmVnaW4oKTsKICAgIGZvciggOyBpdCAhPSBs
LmVuZCgpOyArK2l0ICkKICAgICAgICBzIDw8ICppdDsKICAgIHJldHVybiBzOwp9CiMgNDMgIi4u
Ly4uL2luY2x1ZGUvcXN0cmluZ2xpc3QuaCIgMgoKIyAxICIuLi8uLi9pbmNsdWRlL3FzdHJsaXN0
LmgiIDEKIyA0MyAiLi4vLi4vaW5jbHVkZS9xc3RybGlzdC5oIgojIDEgIi4uLy4uL2luY2x1ZGUv
cXB0cmxpc3QuaCIgMQojIDQwICIuLi8uLi9pbmNsdWRlL3FwdHJsaXN0LmgiCiMgMSAiLi4vLi4v
aW5jbHVkZS9xZ2xpc3QuaCIgMQojIDQyICIuLi8uLi9pbmNsdWRlL3FnbGlzdC5oIgojIDEgIi4u
Ly4uL2luY2x1ZGUvcXB0cmNvbGxlY3Rpb24uaCIgMQojIDQwICIuLi8uLi9pbmNsdWRlL3FwdHJj
b2xsZWN0aW9uLmgiCiMgMSAiLi4vLi4vaW5jbHVkZS9xZ2xvYmFsLmgiIDEKIyA0MSAiLi4vLi4v
aW5jbHVkZS9xcHRyY29sbGVjdGlvbi5oIiAyCgoKCmNsYXNzIFFHVmVjdG9yOwpjbGFzcyBRR0xp
c3Q7CmNsYXNzIFFHRGljdDsKCgpjbGFzcyBRUHRyQ29sbGVjdGlvbgp7CnB1YmxpYzoKICAgIGJv
b2wgYXV0b0RlbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIGRlbF9pdGVtOyB9CiAgICB2b2lkIHNldEF1
dG9EZWxldGUoIGJvb2wgZW5hYmxlICkgeyBkZWxfaXRlbSA9IGVuYWJsZTsgfQoKICAgIHZpcnR1
YWwgdWludCBjb3VudCgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpID0gMDsK
CiAgICB0eXBlZGVmIHZvaWQgKkl0ZW07Cgpwcm90ZWN0ZWQ6CiAgICBRUHRyQ29sbGVjdGlvbigp
IHsgZGVsX2l0ZW0gPSBGQUxTRTsgfQogICAgUVB0ckNvbGxlY3Rpb24oY29uc3QgUVB0ckNvbGxl
Y3Rpb24gJikgeyBkZWxfaXRlbSA9IEZBTFNFOyB9CiAgICB2aXJ0dWFsIH5RUHRyQ29sbGVjdGlv
bigpIHt9CgogICAgYm9vbCBkZWxfaXRlbTsKCiAgICB2aXJ0dWFsIEl0ZW0gbmV3SXRlbSggSXRl
bSApOwogICAgdmlydHVhbCB2b2lkIGRlbGV0ZUl0ZW0oIEl0ZW0gKSA9IDA7Cn07CiMgNDMgIi4u
Ly4uL2luY2x1ZGUvcWdsaXN0LmgiIDIKCgpjbGFzcyBRTE5vZGUKewpmcmllbmQgY2xhc3MgUUdM
aXN0OwpmcmllbmQgY2xhc3MgUUdMaXN0SXRlcmF0b3I7CnB1YmxpYzoKICAgIFFQdHJDb2xsZWN0
aW9uOjpJdGVtIGdldERhdGEoKSB7IHJldHVybiBkYXRhOyB9CnByaXZhdGU6CiAgICBRUHRyQ29s
bGVjdGlvbjo6SXRlbSBkYXRhOwogICAgUUxOb2RlICpwcmV2OwogICAgUUxOb2RlICpuZXh0Owog
ICAgUUxOb2RlKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSBkICkgeyBkYXRhID0gZDsgfQp9OwoKY2xh
c3MgUUdMaXN0SXRlcmF0b3JMaXN0OwoKY2xhc3MgUUdMaXN0IDogcHVibGljIFFQdHJDb2xsZWN0
aW9uCnsKZnJpZW5kIGNsYXNzIFFHTGlzdEl0ZXJhdG9yOwpmcmllbmQgY2xhc3MgUUdMaXN0SXRl
cmF0b3JMaXN0OwpmcmllbmQgY2xhc3MgUUdWZWN0b3I7CnB1YmxpYzoKICAgIHVpbnQgY291bnQo
KSBjb25zdDsKCgogICAgUURhdGFTdHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFtICYgKTsKICAgIFFE
YXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiApIGNvbnN0OwoKcHJvdGVjdGVkOgogICAg
UUdMaXN0KCk7CiAgICBRR0xpc3QoIGNvbnN0IFFHTGlzdCAmICk7CiAgICB2aXJ0dWFsIH5RR0xp
c3QoKTsKCiAgICBRR0xpc3QgJm9wZXJhdG9yPSggY29uc3QgUUdMaXN0ICYgKTsKICAgIGJvb2wg
b3BlcmF0b3I9PSggY29uc3QgUUdMaXN0JiApIGNvbnN0OwoKICAgIHZvaWQgaW5Tb3J0KCBRUHRy
Q29sbGVjdGlvbjo6SXRlbSApOwogICAgdm9pZCBhcHBlbmQoIFFQdHJDb2xsZWN0aW9uOjpJdGVt
ICk7CiAgICBib29sIGluc2VydEF0KCB1aW50IGluZGV4LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSAp
OwogICAgdm9pZCByZWxpbmtOb2RlKCBRTE5vZGUgKiApOwogICAgYm9vbCByZW1vdmVOb2RlKCBR
TE5vZGUgKiApOwogICAgYm9vbCByZW1vdmUoIFFQdHJDb2xsZWN0aW9uOjpJdGVtID0gMCApOwog
ICAgYm9vbCByZW1vdmVSZWYoIFFQdHJDb2xsZWN0aW9uOjpJdGVtID0gMCApOwogICAgYm9vbCBy
ZW1vdmVGaXJzdCgpOwogICAgYm9vbCByZW1vdmVMYXN0KCk7CiAgICBib29sIHJlbW92ZUF0KCB1
aW50ICk7CiAgICBib29sIHJlcGxhY2VBdCggdWludCwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gKTsK
ICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHRha2VOb2RlKCBRTE5vZGUgKiApOwogICAgUVB0ckNv
bGxlY3Rpb246Okl0ZW0gdGFrZSgpOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gdGFrZUF0KCB1
aW50IGluZGV4ICk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0YWtlRmlyc3QoKTsKICAgIFFQ
dHJDb2xsZWN0aW9uOjpJdGVtIHRha2VMYXN0KCk7CgogICAgdm9pZCBzb3J0KCk7CiAgICB2b2lk
IGNsZWFyKCk7CgogICAgaW50IGZpbmRSZWYoIFFQdHJDb2xsZWN0aW9uOjpJdGVtLCBib29sID0g
VFJVRSApOwogICAgaW50IGZpbmQoIFFQdHJDb2xsZWN0aW9uOjpJdGVtLCBib29sID0gVFJVRSAp
OwoKICAgIHVpbnQgY29udGFpbnNSZWYoIFFQdHJDb2xsZWN0aW9uOjpJdGVtICkgY29uc3Q7CiAg
ICB1aW50IGNvbnRhaW5zKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSApIGNvbnN0OwoKICAgIFFQdHJD
b2xsZWN0aW9uOjpJdGVtIGF0KCB1aW50IGluZGV4ICk7CiAgICBpbnQgYXQoKSBjb25zdDsKICAg
IFFMTm9kZSAqY3VycmVudE5vZGUoKSBjb25zdDsKCiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBn
ZXQoKSBjb25zdDsKCiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBjZmlyc3QoKSBjb25zdDsKICAg
IFFQdHJDb2xsZWN0aW9uOjpJdGVtIGNsYXN0KCkgY29uc3Q7CiAgICBRUHRyQ29sbGVjdGlvbjo6
SXRlbSBmaXJzdCgpOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gbGFzdCgpOwogICAgUVB0ckNv
bGxlY3Rpb246Okl0ZW0gbmV4dCgpOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gcHJldigpOwoK
ICAgIHZvaWQgdG9WZWN0b3IoIFFHVmVjdG9yICogKSBjb25zdDsKCiAgICB2aXJ0dWFsIGludCBj
b21wYXJlSXRlbXMoIFFQdHJDb2xsZWN0aW9uOjpJdGVtLCBRUHRyQ29sbGVjdGlvbjo6SXRlbSAp
OwoKCiAgICB2aXJ0dWFsIFFEYXRhU3RyZWFtICZyZWFkKCBRRGF0YVN0cmVhbSAmLCBRUHRyQ29s
bGVjdGlvbjo6SXRlbSAmICk7CiAgICB2aXJ0dWFsIFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFT
dHJlYW0gJiwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gKSBjb25zdDsKCnByaXZhdGU6CiAgICB2b2lk
IHByZXBlbmQoIFFQdHJDb2xsZWN0aW9uOjpJdGVtICk7CgogICAgdm9pZCBoZWFwU29ydFB1c2hE
b3duKCBRUHRyQ29sbGVjdGlvbjo6SXRlbSogaGVhcCwgaW50IGZpcnN0LCBpbnQgbGFzdCApOwoK
ICAgIFFMTm9kZSAqZmlyc3ROb2RlOwogICAgUUxOb2RlICpsYXN0Tm9kZTsKICAgIFFMTm9kZSAq
Y3VyTm9kZTsKICAgIGludCBjdXJJbmRleDsKICAgIHVpbnQgbnVtTm9kZXM7CiAgICBRR0xpc3RJ
dGVyYXRvckxpc3QgKml0ZXJhdG9yczsKCiAgICBRTE5vZGUgKmxvY2F0ZSggdWludCApOwogICAg
UUxOb2RlICp1bmxpbmsoKTsKfTsKCgppbmxpbmUgdWludCBRR0xpc3Q6OmNvdW50KCkgY29uc3QK
ewogICAgcmV0dXJuIG51bU5vZGVzOwp9CgppbmxpbmUgYm9vbCBRR0xpc3Q6OnJlbW92ZUZpcnN0
KCkKewogICAgZmlyc3QoKTsKICAgIHJldHVybiByZW1vdmUoKTsKfQoKaW5saW5lIGJvb2wgUUdM
aXN0OjpyZW1vdmVMYXN0KCkKewogICAgbGFzdCgpOwogICAgcmV0dXJuIHJlbW92ZSgpOwp9Cgpp
bmxpbmUgaW50IFFHTGlzdDo6YXQoKSBjb25zdAp7CiAgICByZXR1cm4gY3VySW5kZXg7Cn0KCmlu
bGluZSBRUHRyQ29sbGVjdGlvbjo6SXRlbSBRR0xpc3Q6OmF0KCB1aW50IGluZGV4ICkKewogICAg
UUxOb2RlICpuID0gbG9jYXRlKCBpbmRleCApOwogICAgcmV0dXJuIG4gPyBuLT5kYXRhIDogMDsK
fQoKaW5saW5lIFFMTm9kZSAqUUdMaXN0OjpjdXJyZW50Tm9kZSgpIGNvbnN0CnsKICAgIHJldHVy
biBjdXJOb2RlOwp9CgppbmxpbmUgUVB0ckNvbGxlY3Rpb246Okl0ZW0gUUdMaXN0OjpnZXQoKSBj
b25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA/IGN1ck5vZGUtPmRhdGEgOiAwOwp9CgppbmxpbmUg
UVB0ckNvbGxlY3Rpb246Okl0ZW0gUUdMaXN0OjpjZmlyc3QoKSBjb25zdAp7CiAgICByZXR1cm4g
Zmlyc3ROb2RlID8gZmlyc3ROb2RlLT5kYXRhIDogMDsKfQoKaW5saW5lIFFQdHJDb2xsZWN0aW9u
OjpJdGVtIFFHTGlzdDo6Y2xhc3QoKSBjb25zdAp7CiAgICByZXR1cm4gbGFzdE5vZGUgPyBsYXN0
Tm9kZS0+ZGF0YSA6IDA7Cn0KCgoKCgoKCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFT
dHJlYW0gJiwgUUdMaXN0ICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVh
bSAmLCBjb25zdCBRR0xpc3QgJiApOwoKCgoKCgpjbGFzcyBRR0xpc3RJdGVyYXRvcgp7CmZyaWVu
ZCBjbGFzcyBRR0xpc3Q7CmZyaWVuZCBjbGFzcyBRR0xpc3RJdGVyYXRvckxpc3Q7CnByb3RlY3Rl
ZDoKICAgIFFHTGlzdEl0ZXJhdG9yKCBjb25zdCBRR0xpc3QgJiApOwogICAgUUdMaXN0SXRlcmF0
b3IoIGNvbnN0IFFHTGlzdEl0ZXJhdG9yICYgKTsKICAgIFFHTGlzdEl0ZXJhdG9yICZvcGVyYXRv
cj0oIGNvbnN0IFFHTGlzdEl0ZXJhdG9yICYgKTsKICAgflFHTGlzdEl0ZXJhdG9yKCk7CgogICAg
Ym9vbCBhdEZpcnN0KCkgY29uc3Q7CiAgICBib29sIGF0TGFzdCgpIGNvbnN0OwogICAgUVB0ckNv
bGxlY3Rpb246Okl0ZW0gdG9GaXJzdCgpOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gdG9MYXN0
KCk7CgogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZ2V0KCkgY29uc3Q7CiAgICBRUHRyQ29sbGVj
dGlvbjo6SXRlbSBvcGVyYXRvcigpKCk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRv
cisrKCk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcis9KHVpbnQpOwogICAgUVB0
ckNvbGxlY3Rpb246Okl0ZW0gb3BlcmF0b3ItLSgpOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0g
b3BlcmF0b3ItPSh1aW50KTsKCnByb3RlY3RlZDoKICAgIFFHTGlzdCAqbGlzdDsKCnByaXZhdGU6
CiAgICBRTE5vZGUgKmN1ck5vZGU7Cn07CgoKaW5saW5lIGJvb2wgUUdMaXN0SXRlcmF0b3I6OmF0
Rmlyc3QoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA9PSBsaXN0LT5maXJzdE5vZGU7Cn0K
CmlubGluZSBib29sIFFHTGlzdEl0ZXJhdG9yOjphdExhc3QoKSBjb25zdAp7CiAgICByZXR1cm4g
Y3VyTm9kZSA9PSBsaXN0LT5sYXN0Tm9kZTsKfQoKaW5saW5lIFFQdHJDb2xsZWN0aW9uOjpJdGVt
IFFHTGlzdEl0ZXJhdG9yOjpnZXQoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA/IGN1ck5v
ZGUtPmRhdGEgOiAwOwp9CiMgNDEgIi4uLy4uL2luY2x1ZGUvcXB0cmxpc3QuaCIgMgoKCgp0ZW1w
bGF0ZTxjbGFzcyB0eXBlPgpjbGFzcyBRUHRyTGlzdAoKCgogICAgICAgIDogcHVibGljIFFHTGlz
dAoKewpwdWJsaWM6CiAgICBRUHRyTGlzdCgpIHt9CiAgICBRUHRyTGlzdCggY29uc3QgUVB0ckxp
c3Q8dHlwZT4gJmwgKSA6IFFHTGlzdChsKSB7fQogICAgflFQdHJMaXN0KCkgeyBjbGVhcigpOyB9
CiAgICBRUHRyTGlzdDx0eXBlPiAmb3BlcmF0b3I9KGNvbnN0IFFQdHJMaXN0PHR5cGU+ICZsKQog
ICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAoUVB0ckxpc3Q8dHlwZT4mKVFHTGlzdDo6
b3BlcmF0b3I9KGwpOyB9CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFQdHJMaXN0PHR5cGU+
ICZsaXN0ICkgY29uc3QKICAgIHsgcmV0dXJuIFFHTGlzdDo6b3BlcmF0b3I9PSggbGlzdCApOyB9
CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFQdHJMaXN0PHR5cGU+ICZsaXN0ICkgY29uc3QK
ICAgIHsgcmV0dXJuICFRR0xpc3Q6Om9wZXJhdG9yPT0oIGxpc3QgKTsgfQogICAgdWludCBjb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIFFHTGlzdDo6Y291bnQoKTsgfQogICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gUUdMaXN0Ojpjb3VudCgpID09IDA7IH0KICAgIGJvb2wgaW5zZXJ0KCB1
aW50IGksIGNvbnN0IHR5cGUgKmQpeyByZXR1cm4gUUdMaXN0OjppbnNlcnRBdChpLChRUHRyQ29s
bGVjdGlvbjo6SXRlbSlkKTsgfQogICAgdm9pZCBpblNvcnQoIGNvbnN0IHR5cGUgKmQgKSB7IFFH
TGlzdDo6aW5Tb3J0KChRUHRyQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQogICAgdm9pZCBwcmVwZW5k
KCBjb25zdCB0eXBlICpkICkgeyBRR0xpc3Q6Omluc2VydEF0KDAsKFFQdHJDb2xsZWN0aW9uOjpJ
dGVtKWQpOyB9CiAgICB2b2lkIGFwcGVuZCggY29uc3QgdHlwZSAqZCApIHsgUUdMaXN0OjphcHBl
bmQoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICBib29sIHJlbW92ZSggdWludCBpICkg
eyByZXR1cm4gUUdMaXN0OjpyZW1vdmVBdChpKTsgfQogICAgYm9vbCByZW1vdmUoKSB7IHJldHVy
biBRR0xpc3Q6OnJlbW92ZSgoUVB0ckNvbGxlY3Rpb246Okl0ZW0pMCk7IH0KICAgIGJvb2wgcmVt
b3ZlKCBjb25zdCB0eXBlICpkICkgeyByZXR1cm4gUUdMaXN0OjpyZW1vdmUoKFFQdHJDb2xsZWN0
aW9uOjpJdGVtKWQpOyB9CiAgICBib29sIHJlbW92ZVJlZiggY29uc3QgdHlwZSAqZCApIHsgcmV0
dXJuIFFHTGlzdDo6cmVtb3ZlUmVmKChRUHRyQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQogICAgdm9p
ZCByZW1vdmVOb2RlKCBRTE5vZGUgKm4gKSB7IFFHTGlzdDo6cmVtb3ZlTm9kZShuKTsgfQogICAg
Ym9vbCByZW1vdmVGaXJzdCgpIHsgcmV0dXJuIFFHTGlzdDo6cmVtb3ZlRmlyc3QoKTsgfQogICAg
Ym9vbCByZW1vdmVMYXN0KCkgeyByZXR1cm4gUUdMaXN0OjpyZW1vdmVMYXN0KCk7IH0KICAgIHR5
cGUgKnRha2UoIHVpbnQgaSApIHsgcmV0dXJuICh0eXBlICopUUdMaXN0Ojp0YWtlQXQoaSk7IH0K
ICAgIHR5cGUgKnRha2UoKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6dGFrZSgpOyB9CiAgICB0
eXBlICp0YWtlTm9kZSggUUxOb2RlICpuICkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OnRha2VO
b2RlKG4pOyB9CiAgICB2b2lkIGNsZWFyKCkgeyBRR0xpc3Q6OmNsZWFyKCk7IH0KICAgIHZvaWQg
c29ydCgpIHsgUUdMaXN0Ojpzb3J0KCk7IH0KICAgIGludCBmaW5kKCBjb25zdCB0eXBlICpkICkg
eyByZXR1cm4gUUdMaXN0OjpmaW5kKChRUHRyQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQogICAgaW50
IGZpbmROZXh0KCBjb25zdCB0eXBlICpkICkgeyByZXR1cm4gUUdMaXN0OjpmaW5kKChRUHRyQ29s
bGVjdGlvbjo6SXRlbSlkLEZBTFNFKTsgfQogICAgaW50IGZpbmRSZWYoIGNvbnN0IHR5cGUgKmQg
KSB7IHJldHVybiBRR0xpc3Q6OmZpbmRSZWYoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAg
ICBpbnQgZmluZE5leHRSZWYoIGNvbnN0IHR5cGUgKmQgKXsgcmV0dXJuIFFHTGlzdDo6ZmluZFJl
ZigoUVB0ckNvbGxlY3Rpb246Okl0ZW0pZCxGQUxTRSk7fQogICAgdWludCBjb250YWlucyggY29u
c3QgdHlwZSAqZCApIGNvbnN0IHsgcmV0dXJuIFFHTGlzdDo6Y29udGFpbnMoKFFQdHJDb2xsZWN0
aW9uOjpJdGVtKWQpOyB9CiAgICB1aW50IGNvbnRhaW5zUmVmKCBjb25zdCB0eXBlICpkICkgY29u
c3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIFFHTGlz
dDo6Y29udGFpbnNSZWYoKFFQdHJDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICBib29sIHJlcGxh
Y2UoIHVpbnQgaSwgY29uc3QgdHlwZSAqZCApIHsgcmV0dXJuIFFHTGlzdDo6cmVwbGFjZUF0KCBp
LCAoUVB0ckNvbGxlY3Rpb246Okl0ZW0pZCApOyB9CiAgICB0eXBlICphdCggdWludCBpICkgeyBy
ZXR1cm4gKHR5cGUgKilRR0xpc3Q6OmF0KGkpOyB9CiAgICBpbnQgYXQoKSBjb25zdCB7IHJldHVy
biBRR0xpc3Q6OmF0KCk7IH0KICAgIHR5cGUgKmN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAodHlw
ZSAqKVFHTGlzdDo6Z2V0KCk7IH0KICAgIFFMTm9kZSAqY3VycmVudE5vZGUoKSBjb25zdCB7IHJl
dHVybiBRR0xpc3Q6OmN1cnJlbnROb2RlKCk7IH0KICAgIHR5cGUgKmdldEZpcnN0KCkgY29uc3Qg
eyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OmNmaXJzdCgpOyB9CiAgICB0eXBlICpnZXRMYXN0KCkg
Y29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OmNsYXN0KCk7IH0KICAgIHR5cGUgKmZpcnN0
KCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OmZpcnN0KCk7IH0KICAgIHR5cGUgKmxhc3QoKSB7
IHJldHVybiAodHlwZSAqKVFHTGlzdDo6bGFzdCgpOyB9CiAgICB0eXBlICpuZXh0KCkgeyByZXR1
cm4gKHR5cGUgKilRR0xpc3Q6Om5leHQoKTsgfQogICAgdHlwZSAqcHJldigpIHsgcmV0dXJuICh0
eXBlICopUUdMaXN0OjpwcmV2KCk7IH0KICAgIHZvaWQgdG9WZWN0b3IoIFFHVmVjdG9yICp2ZWMg
KWNvbnN0eyBRR0xpc3Q6OnRvVmVjdG9yKHZlYyk7IH0KIyAxMDcgIi4uLy4uL2luY2x1ZGUvcXB0
cmxpc3QuaCIKcHJpdmF0ZToKICAgIHZvaWQgZGVsZXRlSXRlbSggSXRlbSBkICk7Cn07CgoKdGVt
cGxhdGU8PiBpbmxpbmUgdm9pZCBRUHRyTGlzdDx2b2lkPjo6ZGVsZXRlSXRlbSggUVB0ckNvbGxl
Y3Rpb246Okl0ZW0gKQp7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPiBpbmxpbmUgdm9pZCBRUHRy
TGlzdDx0eXBlPjo6ZGVsZXRlSXRlbSggUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCApCnsKICAgIGlm
ICggZGVsX2l0ZW0gKSBkZWxldGUgKHR5cGUgKilkOwp9Cgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPgpj
bGFzcyBRUHRyTGlzdEl0ZXJhdG9yIDogcHVibGljIFFHTGlzdEl0ZXJhdG9yCnsKcHVibGljOgog
ICAgUVB0ckxpc3RJdGVyYXRvcihjb25zdCBRUHRyTGlzdDx0eXBlPiAmbCkgOlFHTGlzdEl0ZXJh
dG9yKChRR0xpc3QgJilsKSB7fQogICB+UVB0ckxpc3RJdGVyYXRvcigpIHt9CiAgICB1aW50IGNv
dW50KCkgY29uc3QgeyByZXR1cm4gbGlzdC0+Y291bnQoKTsgfQogICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbGlzdC0+Y291bnQoKSA9PSAwOyB9CiAgICBib29sIGF0Rmlyc3QoKSBj
b25zdCB7IHJldHVybiBRR0xpc3RJdGVyYXRvcjo6YXRGaXJzdCgpOyB9CiAgICBib29sIGF0TGFz
dCgpIGNvbnN0IHsgcmV0dXJuIFFHTGlzdEl0ZXJhdG9yOjphdExhc3QoKTsgfQogICAgdHlwZSAq
dG9GaXJzdCgpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6OnRvRmlyc3QoKTsgfQog
ICAgdHlwZSAqdG9MYXN0KCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6dG9MYXN0
KCk7IH0KICAgIG9wZXJhdG9yIHR5cGUgKigpIGNvbnN0IHsgcmV0dXJuICh0eXBlICopUUdMaXN0
SXRlcmF0b3I6OmdldCgpOyB9CiAgICB0eXBlICpvcGVyYXRvciooKSB7IHJldHVybiAodHlwZSAq
KVFHTGlzdEl0ZXJhdG9yOjpnZXQoKTsgfQoKCgoKCgoKICAgIHR5cGUgKmN1cnJlbnQoKSBjb25z
dCB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpnZXQoKTsgfQogICAgdHlwZSAqb3Bl
cmF0b3IoKSgpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6Om9wZXJhdG9yKCkoKTt9
CiAgICB0eXBlICpvcGVyYXRvcisrKCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6
b3BlcmF0b3IrKygpOyB9CiAgICB0eXBlICpvcGVyYXRvcis9KHVpbnQgaikgeyByZXR1cm4gKHR5
cGUgKilRR0xpc3RJdGVyYXRvcjo6b3BlcmF0b3IrPShqKTt9CiAgICB0eXBlICpvcGVyYXRvci0t
KCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6b3BlcmF0b3ItLSgpOyB9CiAgICB0
eXBlICpvcGVyYXRvci09KHVpbnQgaikgeyByZXR1cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6
b3BlcmF0b3ItPShqKTt9CiAgICBRUHRyTGlzdEl0ZXJhdG9yPHR5cGU+JiBvcGVyYXRvcj0oY29u
c3QgUVB0ckxpc3RJdGVyYXRvcjx0eXBlPiZpdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyBRR0xpc3RJdGVyYXRvcjo6b3BlcmF0b3I9KGl0KTsgcmV0dXJuICp0aGlzOyB9Cn07CiMg
NDQgIi4uLy4uL2luY2x1ZGUvcXN0cmxpc3QuaCIgMgojIDU4ICIuLi8uLi9pbmNsdWRlL3FzdHJs
aXN0LmgiCnR5cGVkZWYgUVB0ckxpc3RJdGVyYXRvcjxjaGFyPiBRU3RyTGlzdEl0ZXJhdG9yOwoK
CmNsYXNzIFFTdHJMaXN0IDogcHVibGljIFFQdHJMaXN0PGNoYXI+CnsKcHVibGljOgogICAgUVN0
ckxpc3QoIGJvb2wgZGVlcENvcGllcz1UUlVFICkgeyBkYyA9IGRlZXBDb3BpZXM7IGRlbF9pdGVt
ID0gZGVlcENvcGllczsgfQogICAgUVN0ckxpc3QoIGNvbnN0IFFTdHJMaXN0ICYgKTsKICAgIH5R
U3RyTGlzdCgpIHsgY2xlYXIoKTsgfQogICAgUVN0ckxpc3QmIG9wZXJhdG9yPSggY29uc3QgUVN0
ckxpc3QgJiApOwoKcHJpdmF0ZToKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIG5ld0l0ZW0oIFFQ
dHJDb2xsZWN0aW9uOjpJdGVtIGQgKSB7IHJldHVybiBkYyA/IHFzdHJkdXAoIChjb25zdCBjaGFy
KilkICkgOiBkOyB9CiAgICB2b2lkIGRlbGV0ZUl0ZW0oIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQg
KSB7IGlmICggZGVsX2l0ZW0gKSBkZWxldGVbXSAoY2hhciopZDsgfQogICAgaW50IGNvbXBhcmVJ
dGVtcyggUVB0ckNvbGxlY3Rpb246Okl0ZW0gczEsIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHMyICkg
eyByZXR1cm4gcXN0cmNtcCgoY29uc3QgY2hhciopczEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyKilzMik7IH0KCiAg
ICBRRGF0YVN0cmVhbSAmcmVhZCggUURhdGFTdHJlYW0gJnMsIFFQdHJDb2xsZWN0aW9uOjpJdGVt
ICZkICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHMgPj4gKGNoYXIgKiYpZDsg
cmV0dXJuIHM7IH0KICAgIFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJnMsIFFQdHJD
b2xsZWN0aW9uOjpJdGVtIGQgKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgcmV0dXJuIHMgPDwgKGNvbnN0IGNoYXIgKilkOyB9CgogICAgYm9vbCBkYzsKfTsKCgpjbGFz
cyBRU3RySUxpc3QgOiBwdWJsaWMgUVN0ckxpc3QKewpwdWJsaWM6CiAgICBRU3RySUxpc3QoIGJv
b2wgZGVlcENvcGllcz1UUlVFICkgOiBRU3RyTGlzdCggZGVlcENvcGllcyApIHt9CiAgICB+UVN0
cklMaXN0KCkgeyBjbGVhcigpOyB9CnByaXZhdGU6CiAgICBpbnQgY29tcGFyZUl0ZW1zKCBRUHRy
Q29sbGVjdGlvbjo6SXRlbSBzMSwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gczIgKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHFzdHJpY21wKChjb25zdCBjaGFyKilzMSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z
dCBjaGFyKilzMik7IH0KfTsKCgppbmxpbmUgUVN0ckxpc3QgJiBRU3RyTGlzdDo6b3BlcmF0b3I9
KCBjb25zdCBRU3RyTGlzdCAmc3RyTGlzdCApCnsKICAgIGNsZWFyKCk7CiAgICBkYyA9IHN0ckxp
c3QuZGM7CiAgICBkZWxfaXRlbSA9IGRjOwogICAgUVB0ckxpc3Q8Y2hhcj46Om9wZXJhdG9yPSgg
c3RyTGlzdCApOwogICAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgUVN0ckxpc3Q6OlFTdHJMaXN0
KCBjb25zdCBRU3RyTGlzdCAmc3RyTGlzdCApCiAgICA6IFFQdHJMaXN0PGNoYXI+KCBzdHJMaXN0
ICkKewogICAgZGMgPSBGQUxTRTsKICAgIG9wZXJhdG9yPSggc3RyTGlzdCApOwp9CiMgNDUgIi4u
Ly4uL2luY2x1ZGUvcXN0cmluZ2xpc3QuaCIgMgoKCgoKY2xhc3MgUVJlZ0V4cDsKCmNsYXNzIFFT
dHJpbmdMaXN0IDogcHVibGljIFFWYWx1ZUxpc3Q8UVN0cmluZz4KewpwdWJsaWM6CiAgICBRU3Ry
aW5nTGlzdCgpIHsgfQogICAgUVN0cmluZ0xpc3QoIGNvbnN0IFFTdHJpbmdMaXN0JiBsICkgOiBR
VmFsdWVMaXN0PFFTdHJpbmc+KGwpIHsgfQogICAgUVN0cmluZ0xpc3QoIGNvbnN0IFFWYWx1ZUxp
c3Q8UVN0cmluZz4mIGwgKSA6IFFWYWx1ZUxpc3Q8UVN0cmluZz4obCkgeyB9CiAgICBRU3RyaW5n
TGlzdCggY29uc3QgUVN0cmluZyYgaSApIHsgYXBwZW5kKGkpOyB9CgogICAgUVN0cmluZ0xpc3Qo
IGNvbnN0IGNoYXIqIGkgKSB7IGFwcGVuZChpKTsgfQoKCiAgICBzdGF0aWMgUVN0cmluZ0xpc3Qg
ZnJvbVN0ckxpc3QoY29uc3QgUVN0ckxpc3QmKTsKCiAgICB2b2lkIHNvcnQoKTsKCiAgICBzdGF0
aWMgUVN0cmluZ0xpc3Qgc3BsaXQoIGNvbnN0IFFTdHJpbmcgJnNlcCwgY29uc3QgUVN0cmluZyAm
c3RyLCBib29sIGFsbG93RW1wdHlFbnRyaWVzID0gRkFMU0UgKTsKICAgIHN0YXRpYyBRU3RyaW5n
TGlzdCBzcGxpdCggY29uc3QgUUNoYXIgJnNlcCwgY29uc3QgUVN0cmluZyAmc3RyLCBib29sIGFs
bG93RW1wdHlFbnRyaWVzID0gRkFMU0UgKTsKCiAgICBzdGF0aWMgUVN0cmluZ0xpc3Qgc3BsaXQo
IGNvbnN0IFFSZWdFeHAgJnNlcCwgY29uc3QgUVN0cmluZyAmc3RyLCBib29sIGFsbG93RW1wdHlF
bnRyaWVzID0gRkFMU0UgKTsKCiAgICBRU3RyaW5nIGpvaW4oIGNvbnN0IFFTdHJpbmcgJnNlcCAp
IGNvbnN0OwoKICAgIFFTdHJpbmdMaXN0IGdyZXAoIGNvbnN0IFFTdHJpbmcgJnN0ciwgYm9vbCBj
cyA9IFRSVUUgKSBjb25zdDsKCiAgICBRU3RyaW5nTGlzdCBncmVwKCBjb25zdCBRUmVnRXhwICZl
eHByICkgY29uc3Q7Cgp9OwoKCmNsYXNzIFFEYXRhU3RyZWFtOwpleHRlcm4gUURhdGFTdHJlYW0g
Jm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFTdHJpbmdMaXN0JiApOwpleHRlcm4gUURhdGFT
dHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFTdHJpbmdMaXN0JiApOwoj
IDI1ICJpbmRleC5oIiAyCiMgMSAiLi4vLi4vaW5jbHVkZS9xYXNjaWlkaWN0LmgiIDEKIyA0MiAi
Li4vLi4vaW5jbHVkZS9xYXNjaWlkaWN0LmgiCiMgMSAiLi4vLi4vaW5jbHVkZS9xZ2RpY3QuaCIg
MQojIDQ2ICIuLi8uLi9pbmNsdWRlL3FnZGljdC5oIgpjbGFzcyBRR0RpY3RJdGVyYXRvcjsKY2xh
c3MgUUdESXRMaXN0OwoKCmNsYXNzIFFCYXNlQnVja2V0CnsKcHVibGljOgogICAgUVB0ckNvbGxl
Y3Rpb246Okl0ZW0gZ2V0RGF0YSgpIHsgcmV0dXJuIGRhdGE7IH0KICAgIFFQdHJDb2xsZWN0aW9u
OjpJdGVtIHNldERhdGEoIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQgKSB7IHJldHVybiBkYXRhID0g
ZDsgfQogICAgUUJhc2VCdWNrZXQgKmdldE5leHQoKSB7IHJldHVybiBuZXh0OyB9CiAgICB2b2lk
IHNldE5leHQoIFFCYXNlQnVja2V0ICpuKSB7IG5leHQgPSBuOyB9CnByb3RlY3RlZDoKICAgIFFC
YXNlQnVja2V0KCBRUHRyQ29sbGVjdGlvbjo6SXRlbSBkLCBRQmFzZUJ1Y2tldCAqbiApIDogZGF0
YShkKSwgbmV4dChuKSB7fQogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZGF0YTsKICAgIFFCYXNl
QnVja2V0ICpuZXh0Owp9OwoKY2xhc3MgUVN0cmluZ0J1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tl
dAp7CnB1YmxpYzoKICAgIFFTdHJpbmdCdWNrZXQoIGNvbnN0IFFTdHJpbmcgJmssIFFQdHJDb2xs
ZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQs
biksIGtleShrKSB7fQogICAgY29uc3QgUVN0cmluZyAmZ2V0S2V5KCkgY29uc3QgeyByZXR1cm4g
a2V5OyB9CnByaXZhdGU6CiAgICBRU3RyaW5nIGtleTsKfTsKCmNsYXNzIFFBc2NpaUJ1Y2tldCA6
IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFBc2NpaUJ1Y2tldCggY29uc3QgY2hh
ciAqaywgUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCwgUUJhc2VCdWNrZXQgKm4gKQogICAgICAgIDog
UUJhc2VCdWNrZXQoZCxuKSwga2V5KGspIHt9CiAgICBjb25zdCBjaGFyICpnZXRLZXkoKSBjb25z
dCB7IHJldHVybiBrZXk7IH0KcHJpdmF0ZToKICAgIGNvbnN0IGNoYXIgKmtleTsKfTsKCmNsYXNz
IFFJbnRCdWNrZXQgOiBwdWJsaWMgUUJhc2VCdWNrZXQKewpwdWJsaWM6CiAgICBRSW50QnVja2V0
KCBsb25nIGssIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAg
ICA6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKSB7fQogICAgbG9uZyBnZXRLZXkoKSBjb25zdCB7
IHJldHVybiBrZXk7IH0KcHJpdmF0ZToKICAgIGxvbmcga2V5Owp9OwoKY2xhc3MgUVB0ckJ1Y2tl
dCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoKICAgIFFQdHJCdWNrZXQoIHZvaWQgKmss
IFFQdHJDb2xsZWN0aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNl
QnVja2V0KGQsbiksIGtleShrKSB7fQogICAgdm9pZCAqZ2V0S2V5KCkgY29uc3QgeyByZXR1cm4g
a2V5OyB9CnByaXZhdGU6CiAgICB2b2lkICprZXk7Cn07CgoKY2xhc3MgUUdEaWN0IDogcHVibGlj
IFFQdHJDb2xsZWN0aW9uCnsKcHVibGljOgogICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG51bUl0ZW1zOyB9CiAgICB1aW50IHNpemUoKSBjb25zdCB7IHJldHVybiB2bGVuOyB9CiAgICBR
UHRyQ29sbGVjdGlvbjo6SXRlbSBsb29rX3N0cmluZyggY29uc3QgUVN0cmluZyYga2V5LCBRUHRy
Q29sbGVjdGlvbjo6SXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
KTsKICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGxvb2tfYXNjaWkoIGNvbnN0IGNoYXIgKmtleSwg
UVB0ckNvbGxlY3Rpb246Okl0ZW0sIGludCApOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gbG9v
a19pbnQoIGxvbmcga2V5LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwgaW50ICk7CiAgICBRUHRyQ29s
bGVjdGlvbjo6SXRlbSBsb29rX3B0ciggdm9pZCAqa2V5LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSwg
aW50ICk7CgogICAgUURhdGFTdHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFtICYgKTsKICAgIFFEYXRh
U3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiApIGNvbnN0OwoKcHJvdGVjdGVkOgogICAgZW51
bSBLZXlUeXBlIHsgU3RyaW5nS2V5LCBBc2NpaUtleSwgSW50S2V5LCBQdHJLZXkgfTsKCiAgICBR
R0RpY3QoIHVpbnQgbGVuLCBLZXlUeXBlIGt0LCBib29sIGNzLCBib29sIGNrICk7CiAgICBRR0Rp
Y3QoIGNvbnN0IFFHRGljdCAmICk7CiAgIH5RR0RpY3QoKTsKCiAgICBRR0RpY3QgJm9wZXJhdG9y
PSggY29uc3QgUUdEaWN0ICYgKTsKCiAgICBib29sIHJlbW92ZV9zdHJpbmcoIGNvbnN0IFFTdHJp
bmcgJmtleSwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gaXRlbT0wICk7CiAgICBib29sIHJlbW92ZV9h
c2NpaSggY29uc3QgY2hhciAqa2V5LCBRUHRyQ29sbGVjdGlvbjo6SXRlbSBpdGVtPTAgKTsKICAg
IGJvb2wgcmVtb3ZlX2ludCggbG9uZyBrZXksIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCAp
OwogICAgYm9vbCByZW1vdmVfcHRyKCB2b2lkICprZXksIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0
ZW09MCApOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gdGFrZV9zdHJpbmcoIGNvbnN0IFFTdHJp
bmcgJmtleSApOwogICAgUVB0ckNvbGxlY3Rpb246Okl0ZW0gdGFrZV9hc2NpaSggY29uc3QgY2hh
ciAqa2V5ICk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0YWtlX2ludCggbG9uZyBrZXkgKTsK
ICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIHRha2VfcHRyKCB2b2lkICprZXkgKTsKCiAgICB2b2lk
IGNsZWFyKCk7CiAgICB2b2lkIHJlc2l6ZSggdWludCApOwoKICAgIGludCBoYXNoS2V5U3RyaW5n
KCBjb25zdCBRU3RyaW5nICYgKTsKICAgIGludCBoYXNoS2V5QXNjaWkoIGNvbnN0IGNoYXIgKiAp
OwoKICAgIHZvaWQgc3RhdGlzdGljcygpIGNvbnN0OwoKCiAgICB2aXJ0dWFsIFFEYXRhU3RyZWFt
ICZyZWFkKCBRRGF0YVN0cmVhbSAmLCBRUHRyQ29sbGVjdGlvbjo6SXRlbSAmICk7CiAgICB2aXJ0
dWFsIFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiwgUVB0ckNvbGxlY3Rpb246Okl0
ZW0gKSBjb25zdDsKCnByaXZhdGU6CiAgICBRQmFzZUJ1Y2tldCAqKnZlYzsKICAgIHVpbnQgdmxl
bjsKICAgIHVpbnQgbnVtSXRlbXM7CiAgICB1aW50IGtleXR5cGUgOiAyOwogICAgdWludCBjYXNl
cyA6IDE7CiAgICB1aW50IGNvcHlrIDogMTsKICAgIFFHREl0TGlzdCAqaXRlcmF0b3JzOwogICAg
dm9pZCB1bmxpbmtfY29tbW9uKCBpbnQsIFFCYXNlQnVja2V0ICosIFFCYXNlQnVja2V0ICogKTsK
ICAgIFFTdHJpbmdCdWNrZXQgKnVubGlua19zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGl0ZW0gPSAw
ICk7CiAgICBRQXNjaWlCdWNrZXQgKnVubGlua19hc2NpaSggY29uc3QgY2hhciAqLCBRUHRyQ29s
bGVjdGlvbjo6SXRlbSBpdGVtID0gMCApOwogICAgUUludEJ1Y2tldCAqdW5saW5rX2ludCggbG9u
ZywgUVB0ckNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAgIFFQdHJCdWNrZXQgKnVubGlu
a19wdHIoIHZvaWQgKiwgUVB0ckNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAgKTsKICAgIHZvaWQg
aW5pdCggdWludCwgS2V5VHlwZSwgYm9vbCwgYm9vbCApOwogICAgZnJpZW5kIGNsYXNzIFFHRGlj
dEl0ZXJhdG9yOwp9OwoKCmNsYXNzIFFHRGljdEl0ZXJhdG9yCnsKZnJpZW5kIGNsYXNzIFFHRGlj
dDsKcHVibGljOgogICAgUUdEaWN0SXRlcmF0b3IoIGNvbnN0IFFHRGljdCAmICk7CiAgICBRR0Rp
Y3RJdGVyYXRvciggY29uc3QgUUdEaWN0SXRlcmF0b3IgJiApOwogICAgUUdEaWN0SXRlcmF0b3Ig
Jm9wZXJhdG9yPSggY29uc3QgUUdEaWN0SXRlcmF0b3IgJiApOwogICB+UUdEaWN0SXRlcmF0b3Io
KTsKCiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSB0b0ZpcnN0KCk7CgogICAgUVB0ckNvbGxlY3Rp
b246Okl0ZW0gZ2V0KCkgY29uc3Q7CiAgICBRU3RyaW5nIGdldEtleVN0cmluZygpIGNvbnN0Owog
ICAgY29uc3QgY2hhciAqZ2V0S2V5QXNjaWkoKSBjb25zdDsKICAgIGxvbmcgZ2V0S2V5SW50KCkg
Y29uc3Q7CiAgICB2b2lkICpnZXRLZXlQdHIoKSBjb25zdDsKCiAgICBRUHRyQ29sbGVjdGlvbjo6
SXRlbSBvcGVyYXRvcigpKCk7CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcisrKCk7
CiAgICBRUHRyQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcis9KHVpbnQpOwoKcHJvdGVjdGVkOgog
ICAgUUdEaWN0ICpkaWN0OwoKcHJpdmF0ZToKICAgIFFCYXNlQnVja2V0ICpjdXJOb2RlOwogICAg
dWludCBjdXJJbmRleDsKfTsKCmlubGluZSBRUHRyQ29sbGVjdGlvbjo6SXRlbSBRR0RpY3RJdGVy
YXRvcjo6Z2V0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJOb2RlLT5nZXREYXRh
KCkgOiAwOwp9CgppbmxpbmUgUVN0cmluZyBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5U3RyaW5nKCkg
Y29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFTdHJpbmdCdWNrZXQqKWN1ck5vZGUpLT5n
ZXRLZXkoKSA6IFFTdHJpbmc6Om51bGw7Cn0KCmlubGluZSBjb25zdCBjaGFyICpRR0RpY3RJdGVy
YXRvcjo6Z2V0S2V5QXNjaWkoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA/ICgoUUFzY2lp
QnVja2V0KiljdXJOb2RlKS0+Z2V0S2V5KCkgOiAwOwp9CgppbmxpbmUgbG9uZyBRR0RpY3RJdGVy
YXRvcjo6Z2V0S2V5SW50KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFJbnRCdWNr
ZXQqKWN1ck5vZGUpLT5nZXRLZXkoKSA6IDA7Cn0KCmlubGluZSB2b2lkICpRR0RpY3RJdGVyYXRv
cjo6Z2V0S2V5UHRyKCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFQdHJCdWNrZXQq
KWN1ck5vZGUpLT5nZXRLZXkoKSA6IDA7Cn0KIyA0MyAiLi4vLi4vaW5jbHVkZS9xYXNjaWlkaWN0
LmgiIDIKCgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPgpjbGFzcyBRQXNjaWlEaWN0CgoKCiAgICAgICAg
OiBwdWJsaWMgUUdEaWN0Cgp7CnB1YmxpYzoKICAgIFFBc2NpaURpY3QoaW50IHNpemU9MTcsIGJv
b2wgY2FzZVNlbnNpdGl2ZT1UUlVFLCBib29sIGNvcHlLZXlzPVRSVUUgKQogICAgICAgIDogUUdE
aWN0KHNpemUsQXNjaWlLZXksY2FzZVNlbnNpdGl2ZSxjb3B5S2V5cykge30KICAgIFFBc2NpaURp
Y3QoIGNvbnN0IFFBc2NpaURpY3Q8dHlwZT4gJmQgKSA6IFFHRGljdChkKSB7fQogICB+UUFzY2lp
RGljdCgpIHsgY2xlYXIoKTsgfQogICAgUUFzY2lpRGljdDx0eXBlPiAmb3BlcmF0b3I9KGNvbnN0
IFFBc2NpaURpY3Q8dHlwZT4gJmQpCiAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIChR
QXNjaWlEaWN0PHR5cGU+JilRR0RpY3Q6Om9wZXJhdG9yPShkKTsgfQogICAgdWludCBjb3VudCgp
IGNvbnN0IHsgcmV0dXJuIFFHRGljdDo6Y291bnQoKTsgfQogICAgdWludCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gUUdEaWN0OjpzaXplKCk7IH0KICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIFFHRGljdDo6Y291bnQoKSA9PSAwOyB9CgogICAgdm9pZCBpbnNlcnQoIGNvbnN0IGNoYXIg
KmssIGNvbnN0IHR5cGUgKmQgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyBRR0RpY3Q6Omxvb2tfYXNjaWkoaywoSXRlbSlkLDEpOyB9CiAgICB2b2lkIHJlcGxhY2Uo
IGNvbnN0IGNoYXIgKmssIGNvbnN0IHR5cGUgKmQgKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyBRR0RpY3Q6Omxvb2tfYXNjaWkoaywoSXRlbSlkLDIpOyB9CiAgICBi
b29sIHJlbW92ZSggY29uc3QgY2hhciAqayApIHsgcmV0dXJuIFFHRGljdDo6cmVtb3ZlX2FzY2lp
KGspOyB9CiAgICB0eXBlICp0YWtlKCBjb25zdCBjaGFyICprICkgeyByZXR1cm4gKHR5cGUgKilR
R0RpY3Q6OnRha2VfYXNjaWkoayk7IH0KICAgIHR5cGUgKmZpbmQoIGNvbnN0IGNoYXIgKmsgKSBj
b25zdAogICAgICAgICAgICAgICAgeyByZXR1cm4gKHR5cGUgKikoKFFHRGljdCopdGhpcyktPlFH
RGljdDo6bG9va19hc2NpaShrLDAsMCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yW10oIGNvbnN0IGNo
YXIgKmsgKSBjb25zdAogICAgICAgICAgICAgICAgeyByZXR1cm4gKHR5cGUgKikoKFFHRGljdCop
dGhpcyktPlFHRGljdDo6bG9va19hc2NpaShrLDAsMCk7IH0KCiAgICB2b2lkIGNsZWFyKCkgeyBR
R0RpY3Q6OmNsZWFyKCk7IH0KICAgIHZvaWQgcmVzaXplKCB1aW50IG4gKSB7IFFHRGljdDo6cmVz
aXplKG4pOyB9CiAgICB2b2lkIHN0YXRpc3RpY3MoKSBjb25zdCB7IFFHRGljdDo6c3RhdGlzdGlj
cygpOyB9CgoKCgoKCgpwcml2YXRlOgogICAgdm9pZCBkZWxldGVJdGVtKCBJdGVtIGQgKTsKfTsK
Cgp0ZW1wbGF0ZTw+IGlubGluZSB2b2lkIFFBc2NpaURpY3Q8dm9pZD46OmRlbGV0ZUl0ZW0oIFFQ
dHJDb2xsZWN0aW9uOjpJdGVtICkKewp9CgoKdGVtcGxhdGU8Y2xhc3MgdHlwZT4gaW5saW5lIHZv
aWQgUUFzY2lpRGljdDx0eXBlPjo6ZGVsZXRlSXRlbSggUVB0ckNvbGxlY3Rpb246Okl0ZW0gZCAp
CnsKICAgIGlmICggZGVsX2l0ZW0gKSBkZWxldGUgKHR5cGUgKilkOwp9Cgp0ZW1wbGF0ZTxjbGFz
cyB0eXBlPgpjbGFzcyBRQXNjaWlEaWN0SXRlcmF0b3IgOiBwdWJsaWMgUUdEaWN0SXRlcmF0b3IK
ewpwdWJsaWM6CiAgICBRQXNjaWlEaWN0SXRlcmF0b3IoY29uc3QgUUFzY2lpRGljdDx0eXBlPiAm
ZCkKICAgICAgICA6IFFHRGljdEl0ZXJhdG9yKChRR0RpY3QgJilkKSB7fQogICB+UUFzY2lpRGlj
dEl0ZXJhdG9yKCkge30KICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBkaWN0LT5jb3Vu
dCgpOyB9CiAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBkaWN0LT5jb3VudCgpID09
IDA7IH0KICAgIHR5cGUgKnRvRmlyc3QoKSB7IHJldHVybiAodHlwZSAqKVFHRGljdEl0ZXJhdG9y
Ojp0b0ZpcnN0KCk7IH0KICAgIG9wZXJhdG9yIHR5cGUgKigpIGNvbnN0IHsgcmV0dXJuICh0eXBl
ICopUUdEaWN0SXRlcmF0b3I6OmdldCgpOyB9CiAgICB0eXBlICpjdXJyZW50KCkgY29uc3QgeyBy
ZXR1cm4gKHR5cGUgKilRR0RpY3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIGNvbnN0IGNoYXIgKmN1
cnJlbnRLZXkoKSBjb25zdCB7IHJldHVybiBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5QXNjaWkoKTsg
fQogICAgdHlwZSAqb3BlcmF0b3IoKSgpIHsgcmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6
Om9wZXJhdG9yKCkoKTsgfQogICAgdHlwZSAqb3BlcmF0b3IrKygpIHsgcmV0dXJuICh0eXBlICop
UUdEaWN0SXRlcmF0b3I6Om9wZXJhdG9yKysoKTsgfQogICAgdHlwZSAqb3BlcmF0b3IrPSh1aW50
IGopIHsgcmV0dXJuICh0eXBlICopUUdEaWN0SXRlcmF0b3I6Om9wZXJhdG9yKz0oaik7fQp9Owoj
IDI2ICJpbmRleC5oIiAyCgojIDEgIi4uLy4uL2luY2x1ZGUvcW9iamVjdC5oIiAxCiMgNDIgIi4u
Ly4uL2luY2x1ZGUvcW9iamVjdC5oIgojIDEgIi4uLy4uL2luY2x1ZGUvcW9iamVjdGRlZnMuaCIg
MQojIDQyICIuLi8uLi9pbmNsdWRlL3FvYmplY3RkZWZzLmgiCiMgMSAiLi4vLi4vaW5jbHVkZS9x
Z2xvYmFsLmgiIDEKIyA0MyAiLi4vLi4vaW5jbHVkZS9xb2JqZWN0ZGVmcy5oIiAyCiMgNzIgIi4u
Ly4uL2luY2x1ZGUvcW9iamVjdGRlZnMuaCIKc3RydWN0IFFVT2JqZWN0OwojIDE1MiAiLi4vLi4v
aW5jbHVkZS9xb2JqZWN0ZGVmcy5oIgpjbGFzcyBRT2JqZWN0OwpjbGFzcyBRTWV0YU9iamVjdDsK
Y2xhc3MgUVNpZ25hbDsKY2xhc3MgUUNvbm5lY3Rpb247CmNsYXNzIFFFdmVudDsKc3RydWN0IFFN
ZXRhRGF0YTsKY2xhc3MgUUNvbm5lY3Rpb25MaXN0OwpjbGFzcyBRQ29ubmVjdGlvbkxpc3RJdDsK
Y2xhc3MgUVNpZ25hbFZlYzsKY2xhc3MgUU9iamVjdExpc3Q7CmNsYXNzIFFPYmplY3RMaXN0SXQ7
CmNsYXNzIFFNZW1iZXJEaWN0OwoKIHZvaWQgKnF0X2ZpbmRfb2JqX2NoaWxkKCBRT2JqZWN0ICos
IGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqICk7CiMgNDMgIi4uLy4uL2luY2x1ZGUvcW9iamVj
dC5oIiAyCiMgMSAiLi4vLi4vaW5jbHVkZS9xd2luZG93ZGVmcy5oIiAxCiMgNDUgIi4uLy4uL2lu
Y2x1ZGUvcXdpbmRvd2RlZnMuaCIKIyAxICIuLi8uLi9pbmNsdWRlL3FuYW1lc3BhY2UuaCIgMQoj
IDQyICIuLi8uLi9pbmNsdWRlL3FuYW1lc3BhY2UuaCIKIyAxICIuLi8uLi9pbmNsdWRlL3FnbG9i
YWwuaCIgMQojIDQzICIuLi8uLi9pbmNsdWRlL3FuYW1lc3BhY2UuaCIgMgoKCgpjbGFzcyBRQ29s
b3I7CmNsYXNzIFFDdXJzb3I7CgoKY2xhc3MgUXQgewpwdWJsaWM6CiAgICBzdGF0aWMgY29uc3Qg
UUNvbG9yICYgY29sb3IwOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGNvbG9yMTsKICAgIHN0
YXRpYyBjb25zdCBRQ29sb3IgJiBibGFjazsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiB3aGl0
ZTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJiBkYXJrR3JheTsKICAgIHN0YXRpYyBjb25zdCBR
Q29sb3IgJiBncmF5OwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGxpZ2h0R3JheTsKICAgIHN0
YXRpYyBjb25zdCBRQ29sb3IgJiByZWQ7CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZ3JlZW47
CiAgICBzdGF0aWMgY29uc3QgUUNvbG9yICYgYmx1ZTsKICAgIHN0YXRpYyBjb25zdCBRQ29sb3Ig
JiBjeWFuOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIG1hZ2VudGE7CiAgICBzdGF0aWMgY29u
c3QgUUNvbG9yICYgeWVsbG93OwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGRhcmtSZWQ7CiAg
ICBzdGF0aWMgY29uc3QgUUNvbG9yICYgZGFya0dyZWVuOwogICAgc3RhdGljIGNvbnN0IFFDb2xv
ciAmIGRhcmtCbHVlOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAmIGRhcmtDeWFuOwogICAgc3Rh
dGljIGNvbnN0IFFDb2xvciAmIGRhcmtNYWdlbnRhOwogICAgc3RhdGljIGNvbnN0IFFDb2xvciAm
IGRhcmtZZWxsb3c7CgoKICAgIGVudW0gQnV0dG9uU3RhdGUgewogICAgICAgIE5vQnV0dG9uID0g
MHgwMDAwLAogICAgICAgIExlZnRCdXR0b24gPSAweDAwMDEsCiAgICAgICAgUmlnaHRCdXR0b24g
PSAweDAwMDIsCiAgICAgICAgTWlkQnV0dG9uID0gMHgwMDA0LAogICAgICAgIE1vdXNlQnV0dG9u
TWFzayA9IDB4MDAwNywKICAgICAgICBTaGlmdEJ1dHRvbiA9IDB4MDEwMCwKICAgICAgICBDb250
cm9sQnV0dG9uID0gMHgwMjAwLAogICAgICAgIEFsdEJ1dHRvbiA9IDB4MDQwMCwKICAgICAgICBN
ZXRhQnV0dG9uID0gMHgwODAwLAogICAgICAgIEtleUJ1dHRvbk1hc2sgPSAweDBmMDAsCiAgICAg
ICAgS2V5cGFkID0gMHg0MDAwCiAgICB9OwoKCgogICAgZW51bSBPcmllbnRhdGlvbiB7CiAgICAg
ICAgSG9yaXpvbnRhbCA9IDAsCiAgICAgICAgVmVydGljYWwKICAgIH07CgoKCgoKCiAgICBlbnVt
IEFsaWdubWVudEZsYWdzIHsKICAgICAgICBBbGlnbkF1dG8gPSAweDAwMDAsCiAgICAgICAgQWxp
Z25MZWZ0ID0gMHgwMDAxLAogICAgICAgIEFsaWduUmlnaHQgPSAweDAwMDIsCiAgICAgICAgQWxp
Z25IQ2VudGVyID0gMHgwMDA0LAogICAgICAgIEFsaWduSnVzdGlmeSA9IDB4MDAwOCwKICAgICAg
ICBBbGlnbkhvcml6b250YWxfTWFzayA9IEFsaWduTGVmdCB8IEFsaWduUmlnaHQgfCBBbGlnbkhD
ZW50ZXIgfCBBbGlnbkp1c3RpZnksCiAgICAgICAgQWxpZ25Ub3AgPSAweDAwMTAsCiAgICAgICAg
QWxpZ25Cb3R0b20gPSAweDAwMjAsCiAgICAgICAgQWxpZ25WQ2VudGVyID0gMHgwMDQwLAogICAg
ICAgIEFsaWduVmVydGljYWxfTWFzayA9IEFsaWduVG9wIHwgQWxpZ25Cb3R0b20gfCBBbGlnblZD
ZW50ZXIsCiAgICAgICAgQWxpZ25DZW50ZXIgPSBBbGlnblZDZW50ZXIgfCBBbGlnbkhDZW50ZXIK
ICAgIH07CgoKICAgIGVudW0gVGV4dEZsYWdzIHsKICAgICAgICBTaW5nbGVMaW5lID0gMHgwMDgw
LAogICAgICAgIERvbnRDbGlwID0gMHgwMTAwLAogICAgICAgIEV4cGFuZFRhYnMgPSAweDAyMDAs
CiAgICAgICAgU2hvd1ByZWZpeCA9IDB4MDQwMCwKICAgICAgICBXb3JkQnJlYWsgPSAweDA4MDAs
CiAgICAgICAgQnJlYWtBbnl3aGVyZSA9IDB4MTAwMCwKICAgICAgICBEb250UHJpbnQgPSAweDIw
MDAsCiAgICAgICAgTm9BY2NlbCA9IDB4NDAwMAogICAgfTsKCgogICAgdHlwZWRlZiB1aW50IFdT
dGF0ZTsKCgogICAgZW51bSBXaWRnZXRTdGF0ZSB7CiAgICAgICAgV1N0YXRlX0NyZWF0ZWQgPSAw
eDAwMDAwMDAxLAogICAgICAgIFdTdGF0ZV9EaXNhYmxlZCA9IDB4MDAwMDAwMDIsCiAgICAgICAg
V1N0YXRlX1Zpc2libGUgPSAweDAwMDAwMDA0LAogICAgICAgIFdTdGF0ZV9Gb3JjZUhpZGUgPSAw
eDAwMDAwMDA4LAogICAgICAgIFdTdGF0ZV9Pd25DdXJzb3IgPSAweDAwMDAwMDEwLAogICAgICAg
IFdTdGF0ZV9Nb3VzZVRyYWNraW5nID0gMHgwMDAwMDAyMCwKICAgICAgICBXU3RhdGVfQ29tcHJl
c3NLZXlzID0gMHgwMDAwMDA0MCwKICAgICAgICBXU3RhdGVfQmxvY2tVcGRhdGVzID0gMHgwMDAw
MDA4MCwKICAgICAgICBXU3RhdGVfSW5QYWludEV2ZW50ID0gMHgwMDAwMDEwMCwKICAgICAgICBX
U3RhdGVfUmVwYXJlbnRlZCA9IDB4MDAwMDAyMDAsCiAgICAgICAgV1N0YXRlX0NvbmZpZ1BlbmRp
bmcgPSAweDAwMDAwNDAwLAogICAgICAgIFdTdGF0ZV9SZXNpemVkID0gMHgwMDAwMDgwMCwKICAg
ICAgICBXU3RhdGVfQXV0b01hc2sgPSAweDAwMDAxMDAwLAogICAgICAgIFdTdGF0ZV9Qb2xpc2hl
ZCA9IDB4MDAwMDIwMDAsCiAgICAgICAgV1N0YXRlX0RORCA9IDB4MDAwMDQwMDAsCiAgICAgICAg
V1N0YXRlX1Jlc2VydmVkMCA9IDB4MDAwMDgwMDAsCiAgICAgICAgV1N0YXRlX1Jlc2VydmVkMSA9
IDB4MDAwMTAwMDAsCiAgICAgICAgV1N0YXRlX1Jlc2VydmVkMiA9IDB4MDAwMjAwMDAsCiAgICAg
ICAgV1N0YXRlX0NyZWF0ZWRIaWRkZW4gPSAweDAwMDQwMDAwLAogICAgICAgIFdTdGF0ZV9NYXhp
bWl6ZWQgPSAweDAwMDgwMDAwLAogICAgICAgIFdTdGF0ZV9NaW5pbWl6ZWQgPSAweDAwMTAwMDAw
LAogICAgICAgIFdTdGF0ZV9Gb3JjZURpc2FibGVkID0gMHgwMDIwMDAwMCwKICAgICAgICBXU3Rh
dGVfRXhwb3NlZCA9IDB4MDA0MDAwMDAsCiAgICAgICAgV1N0YXRlX0hhc01vdXNlID0gMHgwMDgw
MDAwMAogICAgfTsKCgogICAgdHlwZWRlZiB1aW50IFdGbGFnczsKCgogICAgZW51bSBXaWRnZXRG
bGFncyB7CiAgICAgICAgV1R5cGVfVG9wTGV2ZWwgPSAweDAwMDAwMDAxLAogICAgICAgIFdUeXBl
X0RpYWxvZyA9IDB4MDAwMDAwMDIsCiAgICAgICAgV1R5cGVfUG9wdXAgPSAweDAwMDAwMDA0LAog
ICAgICAgIFdUeXBlX0Rlc2t0b3AgPSAweDAwMDAwMDA4LAogICAgICAgIFdUeXBlX01hc2sgPSAw
eDAwMDAwMDBmLAoKICAgICAgICBXU3R5bGVfQ3VzdG9taXplID0gMHgwMDAwMDAxMCwKICAgICAg
ICBXU3R5bGVfTm9ybWFsQm9yZGVyID0gMHgwMDAwMDAyMCwKICAgICAgICBXU3R5bGVfRGlhbG9n
Qm9yZGVyID0gMHgwMDAwMDA0MCwKICAgICAgICBXU3R5bGVfTm9Cb3JkZXIgPSAweDAwMDAyMDAw
LAogICAgICAgIFdTdHlsZV9UaXRsZSA9IDB4MDAwMDAwODAsCiAgICAgICAgV1N0eWxlX1N5c01l
bnUgPSAweDAwMDAwMTAwLAogICAgICAgIFdTdHlsZV9NaW5pbWl6ZSA9IDB4MDAwMDAyMDAsCiAg
ICAgICAgV1N0eWxlX01heGltaXplID0gMHgwMDAwMDQwMCwKICAgICAgICBXU3R5bGVfTWluTWF4
ID0gV1N0eWxlX01pbmltaXplIHwgV1N0eWxlX01heGltaXplLAogICAgICAgIFdTdHlsZV9Ub29s
ID0gMHgwMDAwMDgwMCwKICAgICAgICBXU3R5bGVfU3RheXNPblRvcCA9IDB4MDAwMDEwMDAsCiAg
ICAgICAgV1N0eWxlX0NvbnRleHRIZWxwID0gMHgwMDAwNDAwMCwKICAgICAgICBXU3R5bGVfUmVz
ZXJ2ZWQgPSAweDAwMDA4MDAwLAogICAgICAgIFdTdHlsZV9NYXNrID0gMHgwMDAwZmZmMCwKCiAg
ICAgICAgV0Rlc3RydWN0aXZlQ2xvc2UgPSAweDAwMDEwMDAwLAogICAgICAgIFdQYWludERlc2t0
b3AgPSAweDAwMDIwMDAwLAogICAgICAgIFdQYWludFVuY2xpcHBlZCA9IDB4MDAwNDAwMDAsCiAg
ICAgICAgV1BhaW50Q2xldmVyID0gMHgwMDA4MDAwMCwKICAgICAgICBXUmVzaXplTm9FcmFzZSA9
IDB4MDAxMDAwMDAsCiAgICAgICAgV01vdXNlTm9NYXNrID0gMHgwMDIwMDAwMCwKICAgICAgICBX
U3RhdGljQ29udGVudHMgPSAweDAwNDAwMDAwLAogICAgICAgIFdSZXBhaW50Tm9FcmFzZSA9IDB4
MDA4MDAwMDAsCgogICAgICAgIFdYMTFCeXBhc3NXTSA9IDB4MDEwMDAwMDAsCiAgICAgICAgV1dp
bk93bkRDID0gMHgwMDAwMDAwMCwKICAgICAgICBXTWFjU2hlZXQgPSAweDAwMDAwMDAwLAojIDIw
MyAiLi4vLi4vaW5jbHVkZS9xbmFtZXNwYWNlLmgiCiAgICAgICAgV0dyb3VwTGVhZGVyID0gMHgw
MjAwMDAwMCwKICAgICAgICBXU2hvd01vZGFsID0gMHgwNDAwMDAwMCwKICAgICAgICBXTm9Nb3Vz
ZVByb3BhZ2F0aW9uID0gMHgwODAwMDAwMCwKICAgICAgICBXU3ViV2luZG93ID0gMHgxMDAwMDAw
MCwKICAgICAgICBXU3R5bGVfU3BsYXNoID0gV1N0eWxlX05vQm9yZGVyIHwgV1N0eWxlX1N0YXlz
T25Ub3AKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgV1N0eWxlX1Rvb2wgfCBX
WDExQnlwYXNzV00gfCBXV2luT3duREMKCiAgICAgICAgLAogICAgICAgIFdOb3J0aFdlc3RHcmF2
aXR5ID0gV1N0YXRpY0NvbnRlbnRzLAogICAgICAgIFdUeXBlX01vZGFsID0gV1R5cGVfRGlhbG9n
IHwgV1Nob3dNb2RhbCwKICAgICAgICBXU3R5bGVfRGlhbG9nID0gV1R5cGVfRGlhbG9nLAogICAg
ICAgIFdTdHlsZV9Ob0JvcmRlckV4ID0gV1N0eWxlX05vQm9yZGVyCgogICAgfTsKCgoKCgogICAg
ZW51bSBJbWFnZUNvbnZlcnNpb25GbGFncyB7CiAgICAgICAgQ29sb3JNb2RlX01hc2sgPSAweDAw
MDAwMDAzLAogICAgICAgIEF1dG9Db2xvciA9IDB4MDAwMDAwMDAsCiAgICAgICAgQ29sb3JPbmx5
ID0gMHgwMDAwMDAwMywKICAgICAgICBNb25vT25seSA9IDB4MDAwMDAwMDIsCgoKICAgICAgICBB
bHBoYURpdGhlcl9NYXNrID0gMHgwMDAwMDAwYywKICAgICAgICBUaHJlc2hvbGRBbHBoYURpdGhl
ciA9IDB4MDAwMDAwMDAsCiAgICAgICAgT3JkZXJlZEFscGhhRGl0aGVyID0gMHgwMDAwMDAwNCwK
ICAgICAgICBEaWZmdXNlQWxwaGFEaXRoZXIgPSAweDAwMDAwMDA4LAogICAgICAgIE5vQWxwaGEg
PSAweDAwMDAwMDBjLAoKICAgICAgICBEaXRoZXJfTWFzayA9IDB4MDAwMDAwMzAsCiAgICAgICAg
RGlmZnVzZURpdGhlciA9IDB4MDAwMDAwMDAsCiAgICAgICAgT3JkZXJlZERpdGhlciA9IDB4MDAw
MDAwMTAsCiAgICAgICAgVGhyZXNob2xkRGl0aGVyID0gMHgwMDAwMDAyMCwKCgogICAgICAgIERp
dGhlck1vZGVfTWFzayA9IDB4MDAwMDAwYzAsCiAgICAgICAgQXV0b0RpdGhlciA9IDB4MDAwMDAw
MDAsCiAgICAgICAgUHJlZmVyRGl0aGVyID0gMHgwMDAwMDA0MCwKICAgICAgICBBdm9pZERpdGhl
ciA9IDB4MDAwMDAwODAKICAgIH07CgoKICAgIGVudW0gQkdNb2RlIHsKICAgICAgICBUcmFuc3Bh
cmVudE1vZGUsCiAgICAgICAgT3BhcXVlTW9kZQogICAgfTsKCgoKICAgIGVudW0gUGFpbnRVbml0
IHsKICAgICAgICBQaXhlbFVuaXQsCiAgICAgICAgTG9NZXRyaWNVbml0LAogICAgICAgIEhpTWV0
cmljVW5pdCwKICAgICAgICBMb0VuZ2xpc2hVbml0LAogICAgICAgIEhpRW5nbGlzaFVuaXQsCiAg
ICAgICAgVHdpcHNVbml0CiAgICB9OwojIDI3MiAiLi4vLi4vaW5jbHVkZS9xbmFtZXNwYWNlLmgi
CiAgICBlbnVtIEdVSVN0eWxlIHsKICAgICAgICBNYWNTdHlsZSwKICAgICAgICBXaW5kb3dzU3R5
bGUsCiAgICAgICAgV2luM1N0eWxlLAogICAgICAgIFBNU3R5bGUsCiAgICAgICAgTW90aWZTdHls
ZQogICAgfTsKCgoKICAgIGVudW0gU2VxdWVuY2VNYXRjaCB7CiAgICAgICAgTm9NYXRjaCwKICAg
ICAgICBQYXJ0aWFsTWF0Y2gsCiAgICAgICAgSWRlbnRpY2FsCiAgICB9OwoKCiAgICBlbnVtIE1v
ZGlmaWVyIHsKICAgICAgICBNRVRBID0gMHgwMDEwMDAwMCwKICAgICAgICBTSElGVCA9IDB4MDAy
MDAwMDAsCiAgICAgICAgQ1RSTCA9IDB4MDA0MDAwMDAsCiAgICAgICAgQUxUID0gMHgwMDgwMDAw
MCwKICAgICAgICBNT0RJRklFUl9NQVNLID0gMHgwMGYwMDAwMCwKICAgICAgICBVTklDT0RFX0FD
Q0VMID0gMHgxMDAwMDAwMCwKCiAgICAgICAgQVNDSUlfQUNDRUwgPSBVTklDT0RFX0FDQ0VMCiAg
ICB9OwoKCiAgICBlbnVtIEtleSB7CiAgICAgICAgS2V5X0VzY2FwZSA9IDB4MTAwMCwKICAgICAg
ICBLZXlfVGFiID0gMHgxMDAxLAogICAgICAgIEtleV9CYWNrdGFiID0gMHgxMDAyLCBLZXlfQmFj
a1RhYiA9IEtleV9CYWNrdGFiLAogICAgICAgIEtleV9CYWNrc3BhY2UgPSAweDEwMDMsIEtleV9C
YWNrU3BhY2UgPSBLZXlfQmFja3NwYWNlLAogICAgICAgIEtleV9SZXR1cm4gPSAweDEwMDQsCiAg
ICAgICAgS2V5X0VudGVyID0gMHgxMDA1LAogICAgICAgIEtleV9JbnNlcnQgPSAweDEwMDYsCiAg
ICAgICAgS2V5X0RlbGV0ZSA9IDB4MTAwNywKICAgICAgICBLZXlfUGF1c2UgPSAweDEwMDgsCiAg
ICAgICAgS2V5X1ByaW50ID0gMHgxMDA5LAogICAgICAgIEtleV9TeXNSZXEgPSAweDEwMGEsCiAg
ICAgICAgS2V5X0NsZWFyID0gMHgxMDBiLAogICAgICAgIEtleV9Ib21lID0gMHgxMDEwLAogICAg
ICAgIEtleV9FbmQgPSAweDEwMTEsCiAgICAgICAgS2V5X0xlZnQgPSAweDEwMTIsCiAgICAgICAg
S2V5X1VwID0gMHgxMDEzLAogICAgICAgIEtleV9SaWdodCA9IDB4MTAxNCwKICAgICAgICBLZXlf
RG93biA9IDB4MTAxNSwKICAgICAgICBLZXlfUHJpb3IgPSAweDEwMTYsIEtleV9QYWdlVXAgPSBL
ZXlfUHJpb3IsCiAgICAgICAgS2V5X05leHQgPSAweDEwMTcsIEtleV9QYWdlRG93biA9IEtleV9O
ZXh0LAogICAgICAgIEtleV9TaGlmdCA9IDB4MTAyMCwKICAgICAgICBLZXlfQ29udHJvbCA9IDB4
MTAyMSwKICAgICAgICBLZXlfTWV0YSA9IDB4MTAyMiwKICAgICAgICBLZXlfQWx0ID0gMHgxMDIz
LAogICAgICAgIEtleV9DYXBzTG9jayA9IDB4MTAyNCwKICAgICAgICBLZXlfTnVtTG9jayA9IDB4
MTAyNSwKICAgICAgICBLZXlfU2Nyb2xsTG9jayA9IDB4MTAyNiwKICAgICAgICBLZXlfRjEgPSAw
eDEwMzAsCiAgICAgICAgS2V5X0YyID0gMHgxMDMxLAogICAgICAgIEtleV9GMyA9IDB4MTAzMiwK
ICAgICAgICBLZXlfRjQgPSAweDEwMzMsCiAgICAgICAgS2V5X0Y1ID0gMHgxMDM0LAogICAgICAg
IEtleV9GNiA9IDB4MTAzNSwKICAgICAgICBLZXlfRjcgPSAweDEwMzYsCiAgICAgICAgS2V5X0Y4
ID0gMHgxMDM3LAogICAgICAgIEtleV9GOSA9IDB4MTAzOCwKICAgICAgICBLZXlfRjEwID0gMHgx
MDM5LAogICAgICAgIEtleV9GMTEgPSAweDEwM2EsCiAgICAgICAgS2V5X0YxMiA9IDB4MTAzYiwK
ICAgICAgICBLZXlfRjEzID0gMHgxMDNjLAogICAgICAgIEtleV9GMTQgPSAweDEwM2QsCiAgICAg
ICAgS2V5X0YxNSA9IDB4MTAzZSwKICAgICAgICBLZXlfRjE2ID0gMHgxMDNmLAogICAgICAgIEtl
eV9GMTcgPSAweDEwNDAsCiAgICAgICAgS2V5X0YxOCA9IDB4MTA0MSwKICAgICAgICBLZXlfRjE5
ID0gMHgxMDQyLAogICAgICAgIEtleV9GMjAgPSAweDEwNDMsCiAgICAgICAgS2V5X0YyMSA9IDB4
MTA0NCwKICAgICAgICBLZXlfRjIyID0gMHgxMDQ1LAogICAgICAgIEtleV9GMjMgPSAweDEwNDYs
CiAgICAgICAgS2V5X0YyNCA9IDB4MTA0NywKICAgICAgICBLZXlfRjI1ID0gMHgxMDQ4LAogICAg
ICAgIEtleV9GMjYgPSAweDEwNDksCiAgICAgICAgS2V5X0YyNyA9IDB4MTA0YSwKICAgICAgICBL
ZXlfRjI4ID0gMHgxMDRiLAogICAgICAgIEtleV9GMjkgPSAweDEwNGMsCiAgICAgICAgS2V5X0Yz
MCA9IDB4MTA0ZCwKICAgICAgICBLZXlfRjMxID0gMHgxMDRlLAogICAgICAgIEtleV9GMzIgPSAw
eDEwNGYsCiAgICAgICAgS2V5X0YzMyA9IDB4MTA1MCwKICAgICAgICBLZXlfRjM0ID0gMHgxMDUx
LAogICAgICAgIEtleV9GMzUgPSAweDEwNTIsCiAgICAgICAgS2V5X1N1cGVyX0wgPSAweDEwNTMs
CiAgICAgICAgS2V5X1N1cGVyX1IgPSAweDEwNTQsCiAgICAgICAgS2V5X01lbnUgPSAweDEwNTUs
CiAgICAgICAgS2V5X0h5cGVyX0wgPSAweDEwNTYsCiAgICAgICAgS2V5X0h5cGVyX1IgPSAweDEw
NTcsCiAgICAgICAgS2V5X0hlbHAgPSAweDEwNTgsCiAgICAgICAgS2V5X0RpcmVjdGlvbl9MID0g
MHgxMDU5LAogICAgICAgIEtleV9EaXJlY3Rpb25fUiA9IDB4MTA2MCwKICAgICAgICBLZXlfU3Bh
Y2UgPSAweDIwLAogICAgICAgIEtleV9BbnkgPSBLZXlfU3BhY2UsCiAgICAgICAgS2V5X0V4Y2xh
bSA9IDB4MjEsCiAgICAgICAgS2V5X1F1b3RlRGJsID0gMHgyMiwKICAgICAgICBLZXlfTnVtYmVy
U2lnbiA9IDB4MjMsCiAgICAgICAgS2V5X0RvbGxhciA9IDB4MjQsCiAgICAgICAgS2V5X1BlcmNl
bnQgPSAweDI1LAogICAgICAgIEtleV9BbXBlcnNhbmQgPSAweDI2LAogICAgICAgIEtleV9BcG9z
dHJvcGhlID0gMHgyNywKICAgICAgICBLZXlfUGFyZW5MZWZ0ID0gMHgyOCwKICAgICAgICBLZXlf
UGFyZW5SaWdodCA9IDB4MjksCiAgICAgICAgS2V5X0FzdGVyaXNrID0gMHgyYSwKICAgICAgICBL
ZXlfUGx1cyA9IDB4MmIsCiAgICAgICAgS2V5X0NvbW1hID0gMHgyYywKICAgICAgICBLZXlfTWlu
dXMgPSAweDJkLAogICAgICAgIEtleV9QZXJpb2QgPSAweDJlLAogICAgICAgIEtleV9TbGFzaCA9
IDB4MmYsCiAgICAgICAgS2V5XzAgPSAweDMwLAogICAgICAgIEtleV8xID0gMHgzMSwKICAgICAg
ICBLZXlfMiA9IDB4MzIsCiAgICAgICAgS2V5XzMgPSAweDMzLAogICAgICAgIEtleV80ID0gMHgz
NCwKICAgICAgICBLZXlfNSA9IDB4MzUsCiAgICAgICAgS2V5XzYgPSAweDM2LAogICAgICAgIEtl
eV83ID0gMHgzNywKICAgICAgICBLZXlfOCA9IDB4MzgsCiAgICAgICAgS2V5XzkgPSAweDM5LAog
ICAgICAgIEtleV9Db2xvbiA9IDB4M2EsCiAgICAgICAgS2V5X1NlbWljb2xvbiA9IDB4M2IsCiAg
ICAgICAgS2V5X0xlc3MgPSAweDNjLAogICAgICAgIEtleV9FcXVhbCA9IDB4M2QsCiAgICAgICAg
S2V5X0dyZWF0ZXIgPSAweDNlLAogICAgICAgIEtleV9RdWVzdGlvbiA9IDB4M2YsCiAgICAgICAg
S2V5X0F0ID0gMHg0MCwKICAgICAgICBLZXlfQSA9IDB4NDEsCiAgICAgICAgS2V5X0IgPSAweDQy
LAogICAgICAgIEtleV9DID0gMHg0MywKICAgICAgICBLZXlfRCA9IDB4NDQsCiAgICAgICAgS2V5
X0UgPSAweDQ1LAogICAgICAgIEtleV9GID0gMHg0NiwKICAgICAgICBLZXlfRyA9IDB4NDcsCiAg
ICAgICAgS2V5X0ggPSAweDQ4LAogICAgICAgIEtleV9JID0gMHg0OSwKICAgICAgICBLZXlfSiA9
IDB4NGEsCiAgICAgICAgS2V5X0sgPSAweDRiLAogICAgICAgIEtleV9MID0gMHg0YywKICAgICAg
ICBLZXlfTSA9IDB4NGQsCiAgICAgICAgS2V5X04gPSAweDRlLAogICAgICAgIEtleV9PID0gMHg0
ZiwKICAgICAgICBLZXlfUCA9IDB4NTAsCiAgICAgICAgS2V5X1EgPSAweDUxLAogICAgICAgIEtl
eV9SID0gMHg1MiwKICAgICAgICBLZXlfUyA9IDB4NTMsCiAgICAgICAgS2V5X1QgPSAweDU0LAog
ICAgICAgIEtleV9VID0gMHg1NSwKICAgICAgICBLZXlfViA9IDB4NTYsCiAgICAgICAgS2V5X1cg
PSAweDU3LAogICAgICAgIEtleV9YID0gMHg1OCwKICAgICAgICBLZXlfWSA9IDB4NTksCiAgICAg
ICAgS2V5X1ogPSAweDVhLAogICAgICAgIEtleV9CcmFja2V0TGVmdCA9IDB4NWIsCiAgICAgICAg
S2V5X0JhY2tzbGFzaCA9IDB4NWMsCiAgICAgICAgS2V5X0JyYWNrZXRSaWdodCA9IDB4NWQsCiAg
ICAgICAgS2V5X0FzY2lpQ2lyY3VtID0gMHg1ZSwKICAgICAgICBLZXlfVW5kZXJzY29yZSA9IDB4
NWYsCiAgICAgICAgS2V5X1F1b3RlTGVmdCA9IDB4NjAsCiAgICAgICAgS2V5X0JyYWNlTGVmdCA9
IDB4N2IsCiAgICAgICAgS2V5X0JhciA9IDB4N2MsCiAgICAgICAgS2V5X0JyYWNlUmlnaHQgPSAw
eDdkLAogICAgICAgIEtleV9Bc2NpaVRpbGRlID0gMHg3ZSwKCgoKICAgICAgICBLZXlfbm9icmVh
a3NwYWNlID0gMHgwYTAsCiAgICAgICAgS2V5X2V4Y2xhbWRvd24gPSAweDBhMSwKICAgICAgICBL
ZXlfY2VudCA9IDB4MGEyLAogICAgICAgIEtleV9zdGVybGluZyA9IDB4MGEzLAogICAgICAgIEtl
eV9jdXJyZW5jeSA9IDB4MGE0LAogICAgICAgIEtleV95ZW4gPSAweDBhNSwKICAgICAgICBLZXlf
YnJva2VuYmFyID0gMHgwYTYsCiAgICAgICAgS2V5X3NlY3Rpb24gPSAweDBhNywKICAgICAgICBL
ZXlfZGlhZXJlc2lzID0gMHgwYTgsCiAgICAgICAgS2V5X2NvcHlyaWdodCA9IDB4MGE5LAogICAg
ICAgIEtleV9vcmRmZW1pbmluZSA9IDB4MGFhLAogICAgICAgIEtleV9ndWlsbGVtb3RsZWZ0ID0g
MHgwYWIsCiAgICAgICAgS2V5X25vdHNpZ24gPSAweDBhYywKICAgICAgICBLZXlfaHlwaGVuID0g
MHgwYWQsCiAgICAgICAgS2V5X3JlZ2lzdGVyZWQgPSAweDBhZSwKICAgICAgICBLZXlfbWFjcm9u
ID0gMHgwYWYsCiAgICAgICAgS2V5X2RlZ3JlZSA9IDB4MGIwLAogICAgICAgIEtleV9wbHVzbWlu
dXMgPSAweDBiMSwKICAgICAgICBLZXlfdHdvc3VwZXJpb3IgPSAweDBiMiwKICAgICAgICBLZXlf
dGhyZWVzdXBlcmlvciA9IDB4MGIzLAogICAgICAgIEtleV9hY3V0ZSA9IDB4MGI0LAogICAgICAg
IEtleV9tdSA9IDB4MGI1LAogICAgICAgIEtleV9wYXJhZ3JhcGggPSAweDBiNiwKICAgICAgICBL
ZXlfcGVyaW9kY2VudGVyZWQgPSAweDBiNywKICAgICAgICBLZXlfY2VkaWxsYSA9IDB4MGI4LAog
ICAgICAgIEtleV9vbmVzdXBlcmlvciA9IDB4MGI5LAogICAgICAgIEtleV9tYXNjdWxpbmUgPSAw
eDBiYSwKICAgICAgICBLZXlfZ3VpbGxlbW90cmlnaHQgPSAweDBiYiwKICAgICAgICBLZXlfb25l
cXVhcnRlciA9IDB4MGJjLAogICAgICAgIEtleV9vbmVoYWxmID0gMHgwYmQsCiAgICAgICAgS2V5
X3RocmVlcXVhcnRlcnMgPSAweDBiZSwKICAgICAgICBLZXlfcXVlc3Rpb25kb3duID0gMHgwYmYs
CiAgICAgICAgS2V5X0FncmF2ZSA9IDB4MGMwLAogICAgICAgIEtleV9BYWN1dGUgPSAweDBjMSwK
ICAgICAgICBLZXlfQWNpcmN1bWZsZXggPSAweDBjMiwKICAgICAgICBLZXlfQXRpbGRlID0gMHgw
YzMsCiAgICAgICAgS2V5X0FkaWFlcmVzaXMgPSAweDBjNCwKICAgICAgICBLZXlfQXJpbmcgPSAw
eDBjNSwKICAgICAgICBLZXlfQUUgPSAweDBjNiwKICAgICAgICBLZXlfQ2NlZGlsbGEgPSAweDBj
NywKICAgICAgICBLZXlfRWdyYXZlID0gMHgwYzgsCiAgICAgICAgS2V5X0VhY3V0ZSA9IDB4MGM5
LAogICAgICAgIEtleV9FY2lyY3VtZmxleCA9IDB4MGNhLAogICAgICAgIEtleV9FZGlhZXJlc2lz
ID0gMHgwY2IsCiAgICAgICAgS2V5X0lncmF2ZSA9IDB4MGNjLAogICAgICAgIEtleV9JYWN1dGUg
PSAweDBjZCwKICAgICAgICBLZXlfSWNpcmN1bWZsZXggPSAweDBjZSwKICAgICAgICBLZXlfSWRp
YWVyZXNpcyA9IDB4MGNmLAogICAgICAgIEtleV9FVEggPSAweDBkMCwKICAgICAgICBLZXlfTnRp
bGRlID0gMHgwZDEsCiAgICAgICAgS2V5X09ncmF2ZSA9IDB4MGQyLAogICAgICAgIEtleV9PYWN1
dGUgPSAweDBkMywKICAgICAgICBLZXlfT2NpcmN1bWZsZXggPSAweDBkNCwKICAgICAgICBLZXlf
T3RpbGRlID0gMHgwZDUsCiAgICAgICAgS2V5X09kaWFlcmVzaXMgPSAweDBkNiwKICAgICAgICBL
ZXlfbXVsdGlwbHkgPSAweDBkNywKICAgICAgICBLZXlfT29ibGlxdWUgPSAweDBkOCwKICAgICAg
ICBLZXlfVWdyYXZlID0gMHgwZDksCiAgICAgICAgS2V5X1VhY3V0ZSA9IDB4MGRhLAogICAgICAg
IEtleV9VY2lyY3VtZmxleCA9IDB4MGRiLAogICAgICAgIEtleV9VZGlhZXJlc2lzID0gMHgwZGMs
CiAgICAgICAgS2V5X1lhY3V0ZSA9IDB4MGRkLAogICAgICAgIEtleV9USE9STiA9IDB4MGRlLAog
ICAgICAgIEtleV9zc2hhcnAgPSAweDBkZiwKICAgICAgICBLZXlfYWdyYXZlID0gMHgwZTAsCiAg
ICAgICAgS2V5X2FhY3V0ZSA9IDB4MGUxLAogICAgICAgIEtleV9hY2lyY3VtZmxleCA9IDB4MGUy
LAogICAgICAgIEtleV9hdGlsZGUgPSAweDBlMywKICAgICAgICBLZXlfYWRpYWVyZXNpcyA9IDB4
MGU0LAogICAgICAgIEtleV9hcmluZyA9IDB4MGU1LAogICAgICAgIEtleV9hZSA9IDB4MGU2LAog
ICAgICAgIEtleV9jY2VkaWxsYSA9IDB4MGU3LAogICAgICAgIEtleV9lZ3JhdmUgPSAweDBlOCwK
ICAgICAgICBLZXlfZWFjdXRlID0gMHgwZTksCiAgICAgICAgS2V5X2VjaXJjdW1mbGV4ID0gMHgw
ZWEsCiAgICAgICAgS2V5X2VkaWFlcmVzaXMgPSAweDBlYiwKICAgICAgICBLZXlfaWdyYXZlID0g
MHgwZWMsCiAgICAgICAgS2V5X2lhY3V0ZSA9IDB4MGVkLAogICAgICAgIEtleV9pY2lyY3VtZmxl
eCA9IDB4MGVlLAogICAgICAgIEtleV9pZGlhZXJlc2lzID0gMHgwZWYsCiAgICAgICAgS2V5X2V0
aCA9IDB4MGYwLAogICAgICAgIEtleV9udGlsZGUgPSAweDBmMSwKICAgICAgICBLZXlfb2dyYXZl
ID0gMHgwZjIsCiAgICAgICAgS2V5X29hY3V0ZSA9IDB4MGYzLAogICAgICAgIEtleV9vY2lyY3Vt
ZmxleCA9IDB4MGY0LAogICAgICAgIEtleV9vdGlsZGUgPSAweDBmNSwKICAgICAgICBLZXlfb2Rp
YWVyZXNpcyA9IDB4MGY2LAogICAgICAgIEtleV9kaXZpc2lvbiA9IDB4MGY3LAogICAgICAgIEtl
eV9vc2xhc2ggPSAweDBmOCwKICAgICAgICBLZXlfdWdyYXZlID0gMHgwZjksCiAgICAgICAgS2V5
X3VhY3V0ZSA9IDB4MGZhLAogICAgICAgIEtleV91Y2lyY3VtZmxleCA9IDB4MGZiLAogICAgICAg
IEtleV91ZGlhZXJlc2lzID0gMHgwZmMsCiAgICAgICAgS2V5X3lhY3V0ZSA9IDB4MGZkLAogICAg
ICAgIEtleV90aG9ybiA9IDB4MGZlLAogICAgICAgIEtleV95ZGlhZXJlc2lzID0gMHgwZmYsCgoK
CiAgICAgICAgS2V5X0JhY2sgPSAweDEwNjEsCiAgICAgICAgS2V5X0ZvcndhcmQgPSAweDEwNjIs
CiAgICAgICAgS2V5X1N0b3AgPSAweDEwNjMsCiAgICAgICAgS2V5X1JlZnJlc2ggPSAweDEwNjQs
CgogICAgICAgIEtleV9Wb2x1bWVEb3duID0gMHgxMDcwLAogICAgICAgIEtleV9Wb2x1bWVNdXRl
ID0gMHgxMDcxLAogICAgICAgIEtleV9Wb2x1bWVVcCA9IDB4MTA3MiwKICAgICAgICBLZXlfQmFz
c0Jvb3N0ID0gMHgxMDczLAogICAgICAgIEtleV9CYXNzVXAgPSAweDEwNzQsCiAgICAgICAgS2V5
X0Jhc3NEb3duID0gMHgxMDc1LAogICAgICAgIEtleV9UcmVibGVVcCA9IDB4MTA3NiwKICAgICAg
ICBLZXlfVHJlYmxlRG93biA9IDB4MTA3NywKCiAgICAgICAgS2V5X01lZGlhUGxheSA9IDB4MTA4
MCwKICAgICAgICBLZXlfTWVkaWFTdG9wID0gMHgxMDgxLAogICAgICAgIEtleV9NZWRpYVByZXYg
PSAweDEwODIsCiAgICAgICAgS2V5X01lZGlhTmV4dCA9IDB4MTA4MywKICAgICAgICBLZXlfTWVk
aWFSZWNvcmQgPSAweDEwODQsCgogICAgICAgIEtleV9Ib21lUGFnZSA9IDB4MTA5MCwKICAgICAg
ICBLZXlfRmF2b3JpdGVzID0gMHgxMDkxLAogICAgICAgIEtleV9TZWFyY2ggPSAweDEwOTIsCiAg
ICAgICAgS2V5X1N0YW5kYnkgPSAweDEwOTMsCiAgICAgICAgS2V5X09wZW5VcmwgPSAweDEwOTQs
CgogICAgICAgIEtleV9MYXVuY2hNYWlsID0gMHgxMGEwLAogICAgICAgIEtleV9MYXVuY2hNZWRp
YSA9IDB4MTBhMSwKICAgICAgICBLZXlfTGF1bmNoMCA9IDB4MTBhMiwKICAgICAgICBLZXlfTGF1
bmNoMSA9IDB4MTBhMywKICAgICAgICBLZXlfTGF1bmNoMiA9IDB4MTBhNCwKICAgICAgICBLZXlf
TGF1bmNoMyA9IDB4MTBhNSwKICAgICAgICBLZXlfTGF1bmNoNCA9IDB4MTBhNiwKICAgICAgICBL
ZXlfTGF1bmNoNSA9IDB4MTBhNywKICAgICAgICBLZXlfTGF1bmNoNiA9IDB4MTBhOCwKICAgICAg
ICBLZXlfTGF1bmNoNyA9IDB4MTBhOSwKICAgICAgICBLZXlfTGF1bmNoOCA9IDB4MTBhYSwKICAg
ICAgICBLZXlfTGF1bmNoOSA9IDB4MTBhYiwKICAgICAgICBLZXlfTGF1bmNoQSA9IDB4MTBhYywK
ICAgICAgICBLZXlfTGF1bmNoQiA9IDB4MTBhZCwKICAgICAgICBLZXlfTGF1bmNoQyA9IDB4MTBh
ZSwKICAgICAgICBLZXlfTGF1bmNoRCA9IDB4MTBhZiwKICAgICAgICBLZXlfTGF1bmNoRSA9IDB4
MTBiMCwKICAgICAgICBLZXlfTGF1bmNoRiA9IDB4MTBiMSwKCiAgICAgICAgS2V5X01lZGlhTGFz
dCA9IDB4MWZmZiwKCiAgICAgICAgS2V5X3Vua25vd24gPSAweGZmZmYKICAgIH07CgoKICAgIGVu
dW0gQXJyb3dUeXBlIHsKICAgICAgICBVcEFycm93LAogICAgICAgIERvd25BcnJvdywKICAgICAg
ICBMZWZ0QXJyb3csCiAgICAgICAgUmlnaHRBcnJvdwogICAgfTsKCgogICAgZW51bSBSYXN0ZXJP
cCB7CiAgICAgICAgQ29weVJPUCwKICAgICAgICBPclJPUCwKICAgICAgICBYb3JST1AsCiAgICAg
ICAgTm90QW5kUk9QLCBFcmFzZVJPUD1Ob3RBbmRST1AsCiAgICAgICAgTm90Q29weVJPUCwKICAg
ICAgICBOb3RPclJPUCwKICAgICAgICBOb3RYb3JST1AsCiAgICAgICAgQW5kUk9QLCBOb3RFcmFz
ZVJPUD1BbmRST1AsCiAgICAgICAgTm90Uk9QLAogICAgICAgIENsZWFyUk9QLAogICAgICAgIFNl
dFJPUCwKICAgICAgICBOb3BST1AsCiAgICAgICAgQW5kTm90Uk9QLAogICAgICAgIE9yTm90Uk9Q
LAogICAgICAgIE5hbmRST1AsCiAgICAgICAgTm9yUk9QLCBMYXN0Uk9QPU5vclJPUAogICAgfTsK
CgogICAgZW51bSBQZW5TdHlsZSB7CiAgICAgICAgTm9QZW4sCiAgICAgICAgU29saWRMaW5lLAog
ICAgICAgIERhc2hMaW5lLAogICAgICAgIERvdExpbmUsCiAgICAgICAgRGFzaERvdExpbmUsCiAg
ICAgICAgRGFzaERvdERvdExpbmUsCiAgICAgICAgTVBlblN0eWxlID0gMHgwZgogICAgfTsKCgog
ICAgZW51bSBQZW5DYXBTdHlsZSB7CiAgICAgICAgRmxhdENhcCA9IDB4MDAsCiAgICAgICAgU3F1
YXJlQ2FwID0gMHgxMCwKICAgICAgICBSb3VuZENhcCA9IDB4MjAsCiAgICAgICAgTVBlbkNhcFN0
eWxlID0gMHgzMAogICAgfTsKCgogICAgZW51bSBQZW5Kb2luU3R5bGUgewogICAgICAgIE1pdGVy
Sm9pbiA9IDB4MDAsCiAgICAgICAgQmV2ZWxKb2luID0gMHg0MCwKICAgICAgICBSb3VuZEpvaW4g
PSAweDgwLAogICAgICAgIE1QZW5Kb2luU3R5bGUgPSAweGMwCiAgICB9OwoKCiAgICBlbnVtIEJy
dXNoU3R5bGUgewogICAgICAgIE5vQnJ1c2gsCiAgICAgICAgU29saWRQYXR0ZXJuLAogICAgICAg
IERlbnNlMVBhdHRlcm4sCiAgICAgICAgRGVuc2UyUGF0dGVybiwKICAgICAgICBEZW5zZTNQYXR0
ZXJuLAogICAgICAgIERlbnNlNFBhdHRlcm4sCiAgICAgICAgRGVuc2U1UGF0dGVybiwKICAgICAg
ICBEZW5zZTZQYXR0ZXJuLAogICAgICAgIERlbnNlN1BhdHRlcm4sCiAgICAgICAgSG9yUGF0dGVy
biwKICAgICAgICBWZXJQYXR0ZXJuLAogICAgICAgIENyb3NzUGF0dGVybiwKICAgICAgICBCRGlh
Z1BhdHRlcm4sCiAgICAgICAgRkRpYWdQYXR0ZXJuLAogICAgICAgIERpYWdDcm9zc1BhdHRlcm4s
CiAgICAgICAgQ3VzdG9tUGF0dGVybj0yNAogICAgfTsKCgogICAgZW51bSBNYWNpbnRvc2hWZXJz
aW9uIHsKCiAgICAgICAgTVZfVW5rbm93biA9IDB4MDAwMCwKCgogICAgICAgIE1WXzkgPSAweDAw
MDEsCiAgICAgICAgTVZfMTBfRE9UXzEgPSAweDAwMDIsCiAgICAgICAgTVZfMTBfRE9UXzIgPSAw
eDAwMDMsCgoKICAgICAgICBNVl9KQUdVQVIgPSBNVl8xMF9ET1RfMgogICAgfTsKCgogICAgZW51
bSBXaW5kb3dzVmVyc2lvbiB7CiAgICAgICAgV1ZfMzJzID0gMHgwMDAxLAogICAgICAgIFdWXzk1
ID0gMHgwMDAyLAogICAgICAgIFdWXzk4ID0gMHgwMDAzLAogICAgICAgIFdWX01lID0gMHgwMDA0
LAogICAgICAgIFdWX0RPU19iYXNlZCA9IDB4MDAwZiwKCiAgICAgICAgV1ZfTlQgPSAweDAwMTAs
CiAgICAgICAgV1ZfMjAwMCA9IDB4MDAyMCwKICAgICAgICBXVl9YUCA9IDB4MDAzMCwKICAgICAg
ICBXVl9OVF9iYXNlZCA9IDB4MDBmMAogICAgfTsKCgogICAgZW51bSBVSUVmZmVjdCB7CiAgICAg
ICAgVUlfR2VuZXJhbCwKICAgICAgICBVSV9BbmltYXRlTWVudSwKICAgICAgICBVSV9GYWRlTWVu
dSwKICAgICAgICBVSV9BbmltYXRlQ29tYm8sCiAgICAgICAgVUlfQW5pbWF0ZVRvb2x0aXAsCiAg
ICAgICAgVUlfRmFkZVRvb2x0aXAKICAgIH07CgoKICAgIGVudW0gQ3Vyc29yU2hhcGUgewogICAg
ICAgIEFycm93Q3Vyc29yLAogICAgICAgIFVwQXJyb3dDdXJzb3IsCiAgICAgICAgQ3Jvc3NDdXJz
b3IsCiAgICAgICAgV2FpdEN1cnNvciwKICAgICAgICBJYmVhbUN1cnNvciwKICAgICAgICBTaXpl
VmVyQ3Vyc29yLAogICAgICAgIFNpemVIb3JDdXJzb3IsCiAgICAgICAgU2l6ZUJEaWFnQ3Vyc29y
LAogICAgICAgIFNpemVGRGlhZ0N1cnNvciwKICAgICAgICBTaXplQWxsQ3Vyc29yLAogICAgICAg
IEJsYW5rQ3Vyc29yLAogICAgICAgIFNwbGl0VkN1cnNvciwKICAgICAgICBTcGxpdEhDdXJzb3Is
CiAgICAgICAgUG9pbnRpbmdIYW5kQ3Vyc29yLAogICAgICAgIEZvcmJpZGRlbkN1cnNvciwKICAg
ICAgICBXaGF0c1RoaXNDdXJzb3IsCiAgICAgICAgTGFzdEN1cnNvciA9IFdoYXRzVGhpc0N1cnNv
ciwKICAgICAgICBCaXRtYXBDdXJzb3IgPSAyNAogICAgfTsKCgoKICAgIHN0YXRpYyBjb25zdCBR
Q3Vyc29yICYgYXJyb3dDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHVwQXJyb3dD
dXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGNyb3NzQ3Vyc29yOwogICAgc3RhdGlj
IGNvbnN0IFFDdXJzb3IgJiB3YWl0Q3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBp
YmVhbUN1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZVZlckN1cnNvcjsKICAg
IHN0YXRpYyBjb25zdCBRQ3Vyc29yICYgc2l6ZUhvckN1cnNvcjsKICAgIHN0YXRpYyBjb25zdCBR
Q3Vyc29yICYgc2l6ZUJEaWFnQ3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBzaXpl
RkRpYWdDdXJzb3I7CiAgICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIHNpemVBbGxDdXJzb3I7CiAg
ICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGJsYW5rQ3Vyc29yOwogICAgc3RhdGljIGNvbnN0IFFD
dXJzb3IgJiBzcGxpdFZDdXJzb3I7CgogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBzcGxpdEhD
dXJzb3I7CgogICAgc3RhdGljIGNvbnN0IFFDdXJzb3IgJiBwb2ludGluZ0hhbmRDdXJzb3I7CiAg
ICBzdGF0aWMgY29uc3QgUUN1cnNvciAmIGZvcmJpZGRlbkN1cnNvcjsKICAgIHN0YXRpYyBjb25z
dCBRQ3Vyc29yICYgd2hhdHNUaGlzQ3Vyc29yOwoKCiAgICBlbnVtIFRleHRGb3JtYXQgewogICAg
ICAgIFBsYWluVGV4dCwKICAgICAgICBSaWNoVGV4dCwKICAgICAgICBBdXRvVGV4dCwKICAgICAg
ICBMb2dUZXh0CiAgICB9OwoKCiAgICBlbnVtIEFuY2hvckF0dHJpYnV0ZSB7CiAgICAgICAgQW5j
aG9yTmFtZSwKICAgICAgICBBbmNob3JIcmVmCiAgICB9OwoKCiAgICBlbnVtIERvY2sgewogICAg
ICAgIERvY2tVbm1hbmFnZWQsCiAgICAgICAgRG9ja1Rvcm5PZmYsCiAgICAgICAgRG9ja1RvcCwK
ICAgICAgICBEb2NrQm90dG9tLAogICAgICAgIERvY2tSaWdodCwKICAgICAgICBEb2NrTGVmdCwK
ICAgICAgICBEb2NrTWluaW1pemVkCgogICAgICAgICwKICAgICAgICBVbm1hbmFnZWQgPSBEb2Nr
VW5tYW5hZ2VkLAogICAgICAgIFRvcm5PZmYgPSBEb2NrVG9ybk9mZiwKICAgICAgICBUb3AgPSBE
b2NrVG9wLAogICAgICAgIEJvdHRvbSA9IERvY2tCb3R0b20sCiAgICAgICAgUmlnaHQgPSBEb2Nr
UmlnaHQsCiAgICAgICAgTGVmdCA9IERvY2tMZWZ0LAogICAgICAgIE1pbmltaXplZCA9IERvY2tN
aW5pbWl6ZWQKCiAgICB9OwoKICAgIHR5cGVkZWYgRG9jayBUb29sQmFyRG9jazsKCgogICAgZW51
bSBEYXRlRm9ybWF0IHsKICAgICAgICBUZXh0RGF0ZSwKICAgICAgICBJU09EYXRlLAogICAgICAg
IExvY2FsRGF0ZQogICAgfTsKCgogICAgZW51bSBUaW1lU3BlYyB7CiAgICAgICAgTG9jYWxUaW1l
LAogICAgICAgIFVUQwogICAgfTsKCgogICAgZW51bSBCYWNrZ3JvdW5kTW9kZSB7CiAgICAgICAg
Rml4ZWRDb2xvciwKICAgICAgICBGaXhlZFBpeG1hcCwKICAgICAgICBOb0JhY2tncm91bmQsCiAg
ICAgICAgUGFsZXR0ZUZvcmVncm91bmQsCiAgICAgICAgUGFsZXR0ZUJ1dHRvbiwKICAgICAgICBQ
YWxldHRlTGlnaHQsCiAgICAgICAgUGFsZXR0ZU1pZGxpZ2h0LAogICAgICAgIFBhbGV0dGVEYXJr
LAogICAgICAgIFBhbGV0dGVNaWQsCiAgICAgICAgUGFsZXR0ZVRleHQsCiAgICAgICAgUGFsZXR0
ZUJyaWdodFRleHQsCiAgICAgICAgUGFsZXR0ZUJhc2UsCiAgICAgICAgUGFsZXR0ZUJhY2tncm91
bmQsCiAgICAgICAgUGFsZXR0ZVNoYWRvdywKICAgICAgICBQYWxldHRlSGlnaGxpZ2h0LAogICAg
ICAgIFBhbGV0dGVIaWdobGlnaHRlZFRleHQsCiAgICAgICAgUGFsZXR0ZUJ1dHRvblRleHQsCiAg
ICAgICAgUGFsZXR0ZUxpbmssCiAgICAgICAgUGFsZXR0ZUxpbmtWaXNpdGVkLAogICAgICAgIFgx
MVBhcmVudFJlbGF0aXZlCiAgICB9OwoKICAgIHR5cGVkZWYgdWludCBDb21wYXJpc29uRmxhZ3M7
CgoKICAgIGVudW0gU3RyaW5nQ29tcGFyaXNvbk1vZGUgewogICAgICAgIENhc2VTZW5zaXRpdmUg
PSAweDAwMDAxLAogICAgICAgIEJlZ2luc1dpdGggPSAweDAwMDAyLAogICAgICAgIEVuZHNXaXRo
ID0gMHgwMDAwNCwKICAgICAgICBDb250YWlucyA9IDB4MDAwMDgsCiAgICAgICAgRXhhY3RNYXRj
aCA9IDB4MDAwMTAKICAgIH07CiMgODQyICIuLi8uLi9pbmNsdWRlL3FuYW1lc3BhY2UuaCIKICAg
IHR5cGVkZWYgdW5zaWduZWQgbG9uZyBIQU5ETEU7CgoKCn07CgoKY2xhc3MgUUludGVybmFsIHsK
cHVibGljOgogICAgZW51bSBQYWludERldmljZUZsYWdzIHsKICAgICAgICBVbmRlZmluZWREZXZp
Y2UgPSAweDAwLAogICAgICAgIFdpZGdldCA9IDB4MDEsCiAgICAgICAgUGl4bWFwID0gMHgwMiwK
ICAgICAgICBQcmludGVyID0gMHgwMywKICAgICAgICBQaWN0dXJlID0gMHgwNCwKICAgICAgICBT
eXN0ZW0gPSAweDA1LAogICAgICAgIERldmljZVR5cGVNYXNrID0gMHgwZiwKICAgICAgICBFeHRl
cm5hbERldmljZSA9IDB4MTAsCgogICAgICAgIENvbXBhdGliaWxpdHlNb2RlID0gMHgyMAogICAg
fTsKfTsKIyA0NiAiLi4vLi4vaW5jbHVkZS9xd2luZG93ZGVmcy5oIiAyCgoKCgpjbGFzcyBRUGFp
bnREZXZpY2U7CmNsYXNzIFFQYWludERldmljZU1ldHJpY3M7CmNsYXNzIFFXaWRnZXQ7CmNsYXNz
IFFXaWRnZXRNYXBwZXI7CmNsYXNzIFFEaWFsb2c7CmNsYXNzIFFDb2xvcjsKY2xhc3MgUUNvbG9y
R3JvdXA7CmNsYXNzIFFQYWxldHRlOwpjbGFzcyBRQ3Vyc29yOwpjbGFzcyBRUG9pbnQ7CmNsYXNz
IFFTaXplOwpjbGFzcyBRUmVjdDsKY2xhc3MgUVBvaW50QXJyYXk7CmNsYXNzIFFQYWludGVyOwpj
bGFzcyBRUmVnaW9uOwpjbGFzcyBRRm9udDsKY2xhc3MgUUZvbnRNZXRyaWNzOwpjbGFzcyBRRm9u
dEluZm87CmNsYXNzIFFQZW47CmNsYXNzIFFCcnVzaDsKY2xhc3MgUVdNYXRyaXg7CmNsYXNzIFFQ
aXhtYXA7CmNsYXNzIFFCaXRtYXA7CmNsYXNzIFFNb3ZpZTsKY2xhc3MgUUltYWdlOwpjbGFzcyBR
SW1hZ2VJTzsKY2xhc3MgUVBpY3R1cmU7CmNsYXNzIFFQcmludGVyOwpjbGFzcyBRQWNjZWw7CmNs
YXNzIFFUaW1lcjsKY2xhc3MgUVRpbWU7CmNsYXNzIFFDbGlwYm9hcmQ7CgoKCgpjbGFzcyBRV2lk
Z2V0TGlzdDsKY2xhc3MgUVdpZGdldExpc3RJdDsKIyAxNDEgIi4uLy4uL2luY2x1ZGUvcXdpbmRv
d2RlZnMuaCIKdHlwZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7CnR5cGVkZWYgdW5pb24g
X1hFdmVudCBYRXZlbnQ7CnR5cGVkZWYgc3RydWN0IF9YR0MgKkdDOwp0eXBlZGVmIHN0cnVjdCBf
WFJlZ2lvbiAqUmVnaW9uOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgV0lkOwoKIERpc3BsYXkgKnF0
X3hkaXNwbGF5KCk7CiBpbnQgcXRfeHNjcmVlbigpOwogV0lkIHF0X3hyb290d2luKCk7CiBXSWQg
cXRfeHJvb3R3aW4oIGludCBzY3JuICk7CiBHQyBxdF94Z2V0X3JlYWRvbmx5X2djKCBpbnQgc2Ny
biwgYm9vbCBtb25vY2hyb21lICk7CiBHQyBxdF94Z2V0X3RlbXBfZ2MoIGludCBzY3JuLCBib29s
IG1vbm9jaHJvbWUgKTsKIyAxNjQgIi4uLy4uL2luY2x1ZGUvcXdpbmRvd2RlZnMuaCIKY2xhc3Mg
UUFwcGxpY2F0aW9uOwoKCgoKCgoKdHlwZWRlZiBRX0lOVDMyIFFDT09SRDsKY29uc3QgUUNPT1JE
IFFDT09SRF9NQVggPSAyMTQ3NDgzNjQ3Owpjb25zdCBRQ09PUkQgUUNPT1JEX01JTiA9IC1RQ09P
UkRfTUFYIC0gMTsKCnR5cGVkZWYgdW5zaWduZWQgaW50IFFSZ2I7CgogY29uc3QgY2hhciAqcUFw
cE5hbWUoKTsKCgoKdHlwZWRlZiB2b2lkICgqUXRDbGVhblVwRnVuY3Rpb24pKCk7CiB2b2lkIHFB
ZGRQb3N0Um91dGluZSggUXRDbGVhblVwRnVuY3Rpb24gKTsKIHZvaWQgcVJlbW92ZVBvc3RSb3V0
aW5lKCBRdENsZWFuVXBGdW5jdGlvbiApOwoKCgp0eXBlZGVmIFF0Q2xlYW5VcEZ1bmN0aW9uIFFf
Q2xlYW5VcEZ1bmN0aW9uOwojIDQ0ICIuLi8uLi9pbmNsdWRlL3FvYmplY3QuaCIgMgoKIyAxICIu
Li8uLi9pbmNsdWRlL3FldmVudC5oIiAxCiMgNDMgIi4uLy4uL2luY2x1ZGUvcWV2ZW50LmgiCiMg
MSAiLi4vLi4vaW5jbHVkZS9xcmVnaW9uLmgiIDEKIyA0MyAiLi4vLi4vaW5jbHVkZS9xcmVnaW9u
LmgiCiMgMSAiLi4vLi4vaW5jbHVkZS9xcmVjdC5oIiAxCiMgNDIgIi4uLy4uL2luY2x1ZGUvcXJl
Y3QuaCIKIyAxICIuLi8uLi9pbmNsdWRlL3FzaXplLmgiIDEKIyA0MiAiLi4vLi4vaW5jbHVkZS9x
c2l6ZS5oIgojIDEgIi4uLy4uL2luY2x1ZGUvcXBvaW50LmgiIDEKIyA0NiAiLi4vLi4vaW5jbHVk
ZS9xcG9pbnQuaCIKY2xhc3MgUVBvaW50CnsKcHVibGljOgogICAgUVBvaW50KCk7CiAgICBRUG9p
bnQoIGludCB4cG9zLCBpbnQgeXBvcyApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CgogICAg
aW50IHgoKSBjb25zdDsKICAgIGludCB5KCkgY29uc3Q7CiAgICB2b2lkIHNldFgoIGludCB4ICk7
CiAgICB2b2lkIHNldFkoIGludCB5ICk7CgogICAgaW50IG1hbmhhdHRhbkxlbmd0aCgpIGNvbnN0
OwoKICAgIFFDT09SRCAmcngoKTsKICAgIFFDT09SRCAmcnkoKTsKCiAgICBRUG9pbnQgJm9wZXJh
dG9yKz0oIGNvbnN0IFFQb2ludCAmcCApOwogICAgUVBvaW50ICZvcGVyYXRvci09KCBjb25zdCBR
UG9pbnQgJnAgKTsKICAgIFFQb2ludCAmb3BlcmF0b3IqPSggaW50IGMgKTsKICAgIFFQb2ludCAm
b3BlcmF0b3IqPSggZG91YmxlIGMgKTsKICAgIFFQb2ludCAmb3BlcmF0b3IvPSggaW50IGMgKTsK
ICAgIFFQb2ludCAmb3BlcmF0b3IvPSggZG91YmxlIGMgKTsKCiAgICBmcmllbmQgaW5saW5lIGJv
b2wgb3BlcmF0b3I9PSggY29uc3QgUVBvaW50ICYsIGNvbnN0IFFQb2ludCAmICk7CiAgICBmcmll
bmQgaW5saW5lIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVBvaW50ICYsIGNvbnN0IFFQb2ludCAm
ICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvcisoIGNvbnN0IFFQb2lu
dCAmLCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRUG9pbnQgb3Bl
cmF0b3ItKCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVBvaW50ICYgKTsKICAgIGZyaWVuZCBpbmxp
bmUgY29uc3QgUVBvaW50IG9wZXJhdG9yKiggY29uc3QgUVBvaW50ICYsIGludCApOwogICAgZnJp
ZW5kIGlubGluZSBjb25zdCBRUG9pbnQgb3BlcmF0b3IqKCBpbnQsIGNvbnN0IFFQb2ludCAmICk7
CiAgICBmcmllbmQgaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvciooIGNvbnN0IFFQb2ludCAm
LCBkb3VibGUgKTsKICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9yKiggZG91
YmxlLCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRUG9pbnQgb3Bl
cmF0b3ItKCBjb25zdCBRUG9pbnQgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRUG9pbnQg
b3BlcmF0b3IvKCBjb25zdCBRUG9pbnQgJiwgaW50ICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0
IFFQb2ludCBvcGVyYXRvci8oIGNvbnN0IFFQb2ludCAmLCBkb3VibGUgKTsKCnByaXZhdGU6CiAg
ICBzdGF0aWMgdm9pZCB3YXJuaW5nRGl2QnlaZXJvKCk7CgoKCgoKICAgIFFDT09SRCB4cDsKICAg
IFFDT09SRCB5cDsKCn07CgoKCgoKCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJl
YW0gJiwgY29uc3QgUVBvaW50ICYgKTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0
cmVhbSAmLCBRUG9pbnQgJiApOwoKCgoKCgppbmxpbmUgUVBvaW50OjpRUG9pbnQoKQp7IHhwPTA7
IHlwPTA7IH0KCmlubGluZSBRUG9pbnQ6OlFQb2ludCggaW50IHhwb3MsIGludCB5cG9zICkKeyB4
cD0oUUNPT1JEKXhwb3M7IHlwPShRQ09PUkQpeXBvczsgfQoKaW5saW5lIGJvb2wgUVBvaW50Ojpp
c051bGwoKSBjb25zdAp7IHJldHVybiB4cCA9PSAwICYmIHlwID09IDA7IH0KCmlubGluZSBpbnQg
UVBvaW50Ojp4KCkgY29uc3QKeyByZXR1cm4geHA7IH0KCmlubGluZSBpbnQgUVBvaW50Ojp5KCkg
Y29uc3QKeyByZXR1cm4geXA7IH0KCmlubGluZSB2b2lkIFFQb2ludDo6c2V0WCggaW50IHggKQp7
IHhwID0gKFFDT09SRCl4OyB9CgppbmxpbmUgdm9pZCBRUG9pbnQ6OnNldFkoIGludCB5ICkKeyB5
cCA9IChRQ09PUkQpeTsgfQoKaW5saW5lIFFDT09SRCAmUVBvaW50OjpyeCgpCnsgcmV0dXJuIHhw
OyB9CgppbmxpbmUgUUNPT1JEICZRUG9pbnQ6OnJ5KCkKeyByZXR1cm4geXA7IH0KCmlubGluZSBR
UG9pbnQgJlFQb2ludDo6b3BlcmF0b3IrPSggY29uc3QgUVBvaW50ICZwICkKeyB4cCs9cC54cDsg
eXArPXAueXA7IHJldHVybiAqdGhpczsgfQoKaW5saW5lIFFQb2ludCAmUVBvaW50OjpvcGVyYXRv
ci09KCBjb25zdCBRUG9pbnQgJnAgKQp7IHhwLT1wLnhwOyB5cC09cC55cDsgcmV0dXJuICp0aGlz
OyB9CgppbmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yKj0oIGludCBjICkKeyB4cCo9KFFD
T09SRCljOyB5cCo9KFFDT09SRCljOyByZXR1cm4gKnRoaXM7IH0KCmlubGluZSBRUG9pbnQgJlFQ
b2ludDo6b3BlcmF0b3IqPSggZG91YmxlIGMgKQp7IHhwPShRQ09PUkQpKHhwKmMpOyB5cD0oUUNP
T1JEKSh5cCpjKTsgcmV0dXJuICp0aGlzOyB9CgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KCBjb25z
dCBRUG9pbnQgJnAxLCBjb25zdCBRUG9pbnQgJnAyICkKeyByZXR1cm4gcDEueHAgPT0gcDIueHAg
JiYgcDEueXAgPT0gcDIueXA7IH0KCmlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFQb2lu
dCAmcDEsIGNvbnN0IFFQb2ludCAmcDIgKQp7IHJldHVybiBwMS54cCAhPSBwMi54cCB8fCBwMS55
cCAhPSBwMi55cDsgfQoKaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvcisoIGNvbnN0IFFQb2lu
dCAmcDEsIGNvbnN0IFFQb2ludCAmcDIgKQp7IHJldHVybiBRUG9pbnQocDEueHArcDIueHAsIHAx
LnlwK3AyLnlwKTsgfQoKaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvci0oIGNvbnN0IFFQb2lu
dCAmcDEsIGNvbnN0IFFQb2ludCAmcDIgKQp7IHJldHVybiBRUG9pbnQocDEueHAtcDIueHAsIHAx
LnlwLXAyLnlwKTsgfQoKaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvciooIGNvbnN0IFFQb2lu
dCAmcCwgaW50IGMgKQp7IHJldHVybiBRUG9pbnQocC54cCpjLCBwLnlwKmMpOyB9CgppbmxpbmUg
Y29uc3QgUVBvaW50IG9wZXJhdG9yKiggaW50IGMsIGNvbnN0IFFQb2ludCAmcCApCnsgcmV0dXJu
IFFQb2ludChwLnhwKmMsIHAueXAqYyk7IH0KCmlubGluZSBjb25zdCBRUG9pbnQgb3BlcmF0b3Iq
KCBjb25zdCBRUG9pbnQgJnAsIGRvdWJsZSBjICkKeyByZXR1cm4gUVBvaW50KChRQ09PUkQpKHAu
eHAqYyksIChRQ09PUkQpKHAueXAqYykpOyB9CgppbmxpbmUgY29uc3QgUVBvaW50IG9wZXJhdG9y
KiggZG91YmxlIGMsIGNvbnN0IFFQb2ludCAmcCApCnsgcmV0dXJuIFFQb2ludCgoUUNPT1JEKShw
LnhwKmMpLCAoUUNPT1JEKShwLnlwKmMpKTsgfQoKaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRv
ci0oIGNvbnN0IFFQb2ludCAmcCApCnsgcmV0dXJuIFFQb2ludCgtcC54cCwgLXAueXApOyB9Cgpp
bmxpbmUgUVBvaW50ICZRUG9pbnQ6Om9wZXJhdG9yLz0oIGludCBjICkKewoKICAgIGlmICggYyA9
PSAwICkKICAgICAgICB3YXJuaW5nRGl2QnlaZXJvKCk7CgogICAgeHAvPShRQ09PUkQpYzsKICAg
IHlwLz0oUUNPT1JEKWM7CiAgICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBRUG9pbnQgJlFQb2lu
dDo6b3BlcmF0b3IvPSggZG91YmxlIGMgKQp7CgogICAgaWYgKCBjID09IDAuMCApCiAgICAgICAg
d2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHhwPShRQ09PUkQpKHhwL2MpOwogICAgeXA9KFFDT09S
RCkoeXAvYyk7CiAgICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCBRUG9pbnQgb3BlcmF0
b3IvKCBjb25zdCBRUG9pbnQgJnAsIGludCBjICkKewoKICAgIGlmICggYyA9PSAwICkKICAgICAg
ICBRUG9pbnQ6Ondhcm5pbmdEaXZCeVplcm8oKTsKCiAgICByZXR1cm4gUVBvaW50KHAueHAvYywg
cC55cC9jKTsKfQoKaW5saW5lIGNvbnN0IFFQb2ludCBvcGVyYXRvci8oIGNvbnN0IFFQb2ludCAm
cCwgZG91YmxlIGMgKQp7CgogICAgaWYgKCBjID09IDAuMCApCiAgICAgICAgUVBvaW50Ojp3YXJu
aW5nRGl2QnlaZXJvKCk7CgogICAgcmV0dXJuIFFQb2ludCgoUUNPT1JEKShwLnhwL2MpLCAoUUNP
T1JEKShwLnlwL2MpKTsKfQojIDQzICIuLi8uLi9pbmNsdWRlL3FzaXplLmgiIDIKCgpjbGFzcyBR
U2l6ZQoKewpwdWJsaWM6CgogICAgZW51bSBTY2FsZU1vZGUgewogICAgICAgIFNjYWxlRnJlZSwK
ICAgICAgICBTY2FsZU1pbiwKICAgICAgICBTY2FsZU1heAogICAgfTsKCiAgICBRU2l6ZSgpOwog
ICAgUVNpemUoIGludCB3LCBpbnQgaCApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICBi
b29sIGlzRW1wdHkoKSBjb25zdDsKICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwoKICAgIGludCB3
aWR0aCgpIGNvbnN0OwogICAgaW50IGhlaWdodCgpIGNvbnN0OwogICAgdm9pZCBzZXRXaWR0aCgg
aW50IHcgKTsKICAgIHZvaWQgc2V0SGVpZ2h0KCBpbnQgaCApOwogICAgdm9pZCB0cmFuc3Bvc2Uo
KTsKCiAgICB2b2lkIHNjYWxlKCBpbnQgdywgaW50IGgsIFNjYWxlTW9kZSBtb2RlICk7CiAgICB2
b2lkIHNjYWxlKCBjb25zdCBRU2l6ZSAmcywgU2NhbGVNb2RlIG1vZGUgKTsKCiAgICBRU2l6ZSBl
eHBhbmRlZFRvKCBjb25zdCBRU2l6ZSAmICkgY29uc3Q7CiAgICBRU2l6ZSBib3VuZGVkVG8oIGNv
bnN0IFFTaXplICYgKSBjb25zdDsKCiAgICBRQ09PUkQgJnJ3aWR0aCgpOwogICAgUUNPT1JEICZy
aGVpZ2h0KCk7CgogICAgUVNpemUgJm9wZXJhdG9yKz0oIGNvbnN0IFFTaXplICYgKTsKICAgIFFT
aXplICZvcGVyYXRvci09KCBjb25zdCBRU2l6ZSAmICk7CiAgICBRU2l6ZSAmb3BlcmF0b3IqPSgg
aW50IGMgKTsKICAgIFFTaXplICZvcGVyYXRvcio9KCBkb3VibGUgYyApOwogICAgUVNpemUgJm9w
ZXJhdG9yLz0oIGludCBjICk7CiAgICBRU2l6ZSAmb3BlcmF0b3IvPSggZG91YmxlIGMgKTsKCiAg
ICBmcmllbmQgaW5saW5lIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVNpemUgJiwgY29uc3QgUVNp
emUgJiApOwogICAgZnJpZW5kIGlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTaXplICYs
IGNvbnN0IFFTaXplICYgKTsKICAgIGZyaWVuZCBpbmxpbmUgY29uc3QgUVNpemUgb3BlcmF0b3Ir
KCBjb25zdCBRU2l6ZSAmLCBjb25zdCBRU2l6ZSAmICk7CiAgICBmcmllbmQgaW5saW5lIGNvbnN0
IFFTaXplIG9wZXJhdG9yLSggY29uc3QgUVNpemUgJiwgY29uc3QgUVNpemUgJiApOwogICAgZnJp
ZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvciooIGNvbnN0IFFTaXplICYsIGludCApOwog
ICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvciooIGludCwgY29uc3QgUVNpemUg
JiApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvciooIGNvbnN0IFFTaXpl
ICYsIGRvdWJsZSApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVyYXRvciooIGRv
dWJsZSwgY29uc3QgUVNpemUgJiApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6ZSBvcGVy
YXRvci8oIGNvbnN0IFFTaXplICYsIGludCApOwogICAgZnJpZW5kIGlubGluZSBjb25zdCBRU2l6
ZSBvcGVyYXRvci8oIGNvbnN0IFFTaXplICYsIGRvdWJsZSApOwoKcHJpdmF0ZToKICAgIHN0YXRp
YyB2b2lkIHdhcm5pbmdEaXZCeVplcm8oKTsKCiAgICBRQ09PUkQgd2Q7CiAgICBRQ09PUkQgaHQ7
Cn07CgoKCgoKCiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3Qg
UVNpemUgJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFTaXpl
ICYgKTsKCgoKCgoKaW5saW5lIFFTaXplOjpRU2l6ZSgpCnsgd2QgPSBodCA9IC0xOyB9Cgppbmxp
bmUgUVNpemU6OlFTaXplKCBpbnQgdywgaW50IGggKQp7IHdkPShRQ09PUkQpdzsgaHQ9KFFDT09S
RCloOyB9CgppbmxpbmUgYm9vbCBRU2l6ZTo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4gd2Q9PTAg
JiYgaHQ9PTA7IH0KCmlubGluZSBib29sIFFTaXplOjppc0VtcHR5KCkgY29uc3QKeyByZXR1cm4g
d2Q8MSB8fCBodDwxOyB9CgppbmxpbmUgYm9vbCBRU2l6ZTo6aXNWYWxpZCgpIGNvbnN0CnsgcmV0
dXJuIHdkPj0wICYmIGh0Pj0wOyB9CgppbmxpbmUgaW50IFFTaXplOjp3aWR0aCgpIGNvbnN0Cnsg
cmV0dXJuIHdkOyB9CgppbmxpbmUgaW50IFFTaXplOjpoZWlnaHQoKSBjb25zdAp7IHJldHVybiBo
dDsgfQoKaW5saW5lIHZvaWQgUVNpemU6OnNldFdpZHRoKCBpbnQgdyApCnsgd2Q9KFFDT09SRCl3
OyB9CgppbmxpbmUgdm9pZCBRU2l6ZTo6c2V0SGVpZ2h0KCBpbnQgaCApCnsgaHQ9KFFDT09SRClo
OyB9CgppbmxpbmUgUUNPT1JEICZRU2l6ZTo6cndpZHRoKCkKeyByZXR1cm4gd2Q7IH0KCmlubGlu
ZSBRQ09PUkQgJlFTaXplOjpyaGVpZ2h0KCkKeyByZXR1cm4gaHQ7IH0KCmlubGluZSBRU2l6ZSAm
UVNpemU6Om9wZXJhdG9yKz0oIGNvbnN0IFFTaXplICZzICkKeyB3ZCs9cy53ZDsgaHQrPXMuaHQ7
IHJldHVybiAqdGhpczsgfQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3ItPSggY29uc3Qg
UVNpemUgJnMgKQp7IHdkLT1zLndkOyBodC09cy5odDsgcmV0dXJuICp0aGlzOyB9CgppbmxpbmUg
UVNpemUgJlFTaXplOjpvcGVyYXRvcio9KCBpbnQgYyApCnsgd2QqPShRQ09PUkQpYzsgaHQqPShR
Q09PUkQpYzsgcmV0dXJuICp0aGlzOyB9CgppbmxpbmUgUVNpemUgJlFTaXplOjpvcGVyYXRvcio9
KCBkb3VibGUgYyApCnsgd2Q9KFFDT09SRCkod2QqYyk7IGh0PShRQ09PUkQpKGh0KmMpOyByZXR1
cm4gKnRoaXM7IH0KCmlubGluZSBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFTaXplICZzMSwgY29u
c3QgUVNpemUgJnMyICkKeyByZXR1cm4gczEud2QgPT0gczIud2QgJiYgczEuaHQgPT0gczIuaHQ7
IH0KCmlubGluZSBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTaXplICZzMSwgY29uc3QgUVNpemUg
JnMyICkKeyByZXR1cm4gczEud2QgIT0gczIud2QgfHwgczEuaHQgIT0gczIuaHQ7IH0KCmlubGlu
ZSBjb25zdCBRU2l6ZSBvcGVyYXRvcisoIGNvbnN0IFFTaXplICYgczEsIGNvbnN0IFFTaXplICYg
czIgKQp7IHJldHVybiBRU2l6ZShzMS53ZCtzMi53ZCwgczEuaHQrczIuaHQpOyB9CgppbmxpbmUg
Y29uc3QgUVNpemUgb3BlcmF0b3ItKCBjb25zdCBRU2l6ZSAmczEsIGNvbnN0IFFTaXplICZzMiAp
CnsgcmV0dXJuIFFTaXplKHMxLndkLXMyLndkLCBzMS5odC1zMi5odCk7IH0KCmlubGluZSBjb25z
dCBRU2l6ZSBvcGVyYXRvciooIGNvbnN0IFFTaXplICZzLCBpbnQgYyApCnsgcmV0dXJuIFFTaXpl
KHMud2QqYywgcy5odCpjKTsgfQoKaW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9yKiggaW50IGMs
IGNvbnN0IFFTaXplICZzICkKeyByZXR1cm4gUVNpemUocy53ZCpjLCBzLmh0KmMpOyB9Cgppbmxp
bmUgY29uc3QgUVNpemUgb3BlcmF0b3IqKCBjb25zdCBRU2l6ZSAmcywgZG91YmxlIGMgKQp7IHJl
dHVybiBRU2l6ZSgoUUNPT1JEKShzLndkKmMpLCAoUUNPT1JEKShzLmh0KmMpKTsgfQoKaW5saW5l
IGNvbnN0IFFTaXplIG9wZXJhdG9yKiggZG91YmxlIGMsIGNvbnN0IFFTaXplICZzICkKeyByZXR1
cm4gUVNpemUoKFFDT09SRCkocy53ZCpjKSwgKFFDT09SRCkocy5odCpjKSk7IH0KCmlubGluZSBR
U2l6ZSAmUVNpemU6Om9wZXJhdG9yLz0oIGludCBjICkKewoKICAgIGlmICggYyA9PSAwICkKICAg
ICAgICB3YXJuaW5nRGl2QnlaZXJvKCk7CgogICAgd2QvPShRQ09PUkQpYzsgaHQvPShRQ09PUkQp
YzsKICAgIHJldHVybiAqdGhpczsKfQoKaW5saW5lIFFTaXplICZRU2l6ZTo6b3BlcmF0b3IvPSgg
ZG91YmxlIGMgKQp7CgogICAgaWYgKCBjID09IDAuMCApCiAgICAgICAgd2FybmluZ0RpdkJ5WmVy
bygpOwoKICAgIHdkPShRQ09PUkQpKHdkL2MpOyBodD0oUUNPT1JEKShodC9jKTsKICAgIHJldHVy
biAqdGhpczsKfQoKaW5saW5lIGNvbnN0IFFTaXplIG9wZXJhdG9yLyggY29uc3QgUVNpemUgJnMs
IGludCBjICkKewoKICAgIGlmICggYyA9PSAwICkKICAgICAgICBRU2l6ZTo6d2FybmluZ0RpdkJ5
WmVybygpOwoKICAgIHJldHVybiBRU2l6ZShzLndkL2MsIHMuaHQvYyk7Cn0KCmlubGluZSBjb25z
dCBRU2l6ZSBvcGVyYXRvci8oIGNvbnN0IFFTaXplICZzLCBkb3VibGUgYyApCnsKCiAgICBpZiAo
IGMgPT0gMC4wICkKICAgICAgICBRU2l6ZTo6d2FybmluZ0RpdkJ5WmVybygpOwoKICAgIHJldHVy
biBRU2l6ZSgoUUNPT1JEKShzLndkL2MpLCAoUUNPT1JEKShzLmh0L2MpKTsKfQoKaW5saW5lIFFT
aXplIFFTaXplOjpleHBhbmRlZFRvKCBjb25zdCBRU2l6ZSAmIG90aGVyU2l6ZSApIGNvbnN0CnsK
ICAgIHJldHVybiBRU2l6ZSggKChvdGhlclNpemUud2QpIDwgKHdkKSA/ICh3ZCkgOiAob3RoZXJT
aXplLndkKSksICgob3RoZXJTaXplLmh0KSA8IChodCkgPyAoaHQpIDogKG90aGVyU2l6ZS5odCkp
ICk7Cn0KCmlubGluZSBRU2l6ZSBRU2l6ZTo6Ym91bmRlZFRvKCBjb25zdCBRU2l6ZSAmIG90aGVy
U2l6ZSApIGNvbnN0CnsKICAgIHJldHVybiBRU2l6ZSggKCh3ZCkgPCAob3RoZXJTaXplLndkKSA/
ICh3ZCkgOiAob3RoZXJTaXplLndkKSksICgoaHQpIDwgKG90aGVyU2l6ZS5odCkgPyAoaHQpIDog
KG90aGVyU2l6ZS5odCkpICk7Cn0KIyA0MyAiLi4vLi4vaW5jbHVkZS9xcmVjdC5oIiAyCgoKCgoK
CgpjbGFzcyBRUmVjdAp7CnB1YmxpYzoKICAgIFFSZWN0KCkgeyB4MSA9IHkxID0gMDsgeDIgPSB5
MiA9IC0xOyB9CiAgICBRUmVjdCggY29uc3QgUVBvaW50ICZ0b3BsZWZ0LCBjb25zdCBRUG9pbnQg
JmJvdHRvbXJpZ2h0ICk7CiAgICBRUmVjdCggY29uc3QgUVBvaW50ICZ0b3BsZWZ0LCBjb25zdCBR
U2l6ZSAmc2l6ZSApOwogICAgUVJlY3QoIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQgKTsKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0OwogICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3Q7CiAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKICAgIFFSZWN0IG5vcm1hbGl6ZSgpIGNv
bnN0OwoKICAgIGludCBsZWZ0KCkgY29uc3Q7CiAgICBpbnQgdG9wKCkgY29uc3Q7CiAgICBpbnQg
cmlnaHQoKSBjb25zdDsKICAgIGludCBib3R0b20oKSBjb25zdDsKCiAgICBRQ09PUkQgJnJMZWZ0
KCk7CiAgICBRQ09PUkQgJnJUb3AoKTsKICAgIFFDT09SRCAmclJpZ2h0KCk7CiAgICBRQ09PUkQg
JnJCb3R0b20oKTsKCiAgICBpbnQgeCgpIGNvbnN0OwogICAgaW50IHkoKSBjb25zdDsKICAgIHZv
aWQgc2V0TGVmdCggaW50IHBvcyApOwogICAgdm9pZCBzZXRUb3AoIGludCBwb3MgKTsKICAgIHZv
aWQgc2V0UmlnaHQoIGludCBwb3MgKTsKICAgIHZvaWQgc2V0Qm90dG9tKCBpbnQgcG9zICk7CiAg
ICB2b2lkIHNldFgoIGludCB4ICk7CiAgICB2b2lkIHNldFkoIGludCB5ICk7CgogICAgdm9pZCBz
ZXRUb3BMZWZ0KCBjb25zdCBRUG9pbnQgJnAgKTsKICAgIHZvaWQgc2V0Qm90dG9tUmlnaHQoIGNv
bnN0IFFQb2ludCAmcCApOwogICAgdm9pZCBzZXRUb3BSaWdodCggY29uc3QgUVBvaW50ICZwICk7
CiAgICB2b2lkIHNldEJvdHRvbUxlZnQoIGNvbnN0IFFQb2ludCAmcCApOwoKICAgIFFQb2ludCB0
b3BMZWZ0KCkgY29uc3Q7CiAgICBRUG9pbnQgYm90dG9tUmlnaHQoKSBjb25zdDsKICAgIFFQb2lu
dCB0b3BSaWdodCgpIGNvbnN0OwogICAgUVBvaW50IGJvdHRvbUxlZnQoKSBjb25zdDsKICAgIFFQ
b2ludCBjZW50ZXIoKSBjb25zdDsKCiAgICB2b2lkIHJlY3QoIGludCAqeCwgaW50ICp5LCBpbnQg
KncsIGludCAqaCApIGNvbnN0OwogICAgdm9pZCBjb29yZHMoIGludCAqeDEsIGludCAqeTEsIGlu
dCAqeDIsIGludCAqeTIgKSBjb25zdDsKCiAgICB2b2lkIG1vdmVMZWZ0KCBpbnQgcG9zICk7CiAg
ICB2b2lkIG1vdmVUb3AoIGludCBwb3MgKTsKICAgIHZvaWQgbW92ZVJpZ2h0KCBpbnQgcG9zICk7
CiAgICB2b2lkIG1vdmVCb3R0b20oIGludCBwb3MgKTsKICAgIHZvaWQgbW92ZVRvcExlZnQoIGNv
bnN0IFFQb2ludCAmcCApOwogICAgdm9pZCBtb3ZlQm90dG9tUmlnaHQoIGNvbnN0IFFQb2ludCAm
cCApOwogICAgdm9pZCBtb3ZlVG9wUmlnaHQoIGNvbnN0IFFQb2ludCAmcCApOwogICAgdm9pZCBt
b3ZlQm90dG9tTGVmdCggY29uc3QgUVBvaW50ICZwICk7CiAgICB2b2lkIG1vdmVDZW50ZXIoIGNv
bnN0IFFQb2ludCAmcCApOwogICAgdm9pZCBtb3ZlQnkoIGludCBkeCwgaW50IGR5ICk7CgogICAg
dm9pZCBzZXRSZWN0KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCApOwogICAgdm9pZCBzZXRD
b29yZHMoIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiApOwogICAgdm9pZCBhZGRDb29y
ZHMoIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiApOwoKICAgIFFTaXplIHNpemUoKSBj
b25zdDsKICAgIGludCB3aWR0aCgpIGNvbnN0OwogICAgaW50IGhlaWdodCgpIGNvbnN0OwogICAg
dm9pZCBzZXRXaWR0aCggaW50IHcgKTsKICAgIHZvaWQgc2V0SGVpZ2h0KCBpbnQgaCApOwogICAg
dm9pZCBzZXRTaXplKCBjb25zdCBRU2l6ZSAmcyApOwoKICAgIFFSZWN0IG9wZXJhdG9yfChjb25z
dCBRUmVjdCAmcikgY29uc3Q7CiAgICBRUmVjdCBvcGVyYXRvciYoY29uc3QgUVJlY3QgJnIpIGNv
bnN0OwogICAgUVJlY3QmIG9wZXJhdG9yfD0oY29uc3QgUVJlY3QgJnIpOwogICAgUVJlY3QmIG9w
ZXJhdG9yJj0oY29uc3QgUVJlY3QgJnIpOwoKICAgIGJvb2wgY29udGFpbnMoIGNvbnN0IFFQb2lu
dCAmcCwgYm9vbCBwcm9wZXI9RkFMU0UgKSBjb25zdDsKICAgIGJvb2wgY29udGFpbnMoIGludCB4
LCBpbnQgeSApIGNvbnN0OwogICAgYm9vbCBjb250YWlucyggaW50IHgsIGludCB5LCBib29sIHBy
b3BlciApIGNvbnN0OwogICAgYm9vbCBjb250YWlucyggY29uc3QgUVJlY3QgJnIsIGJvb2wgcHJv
cGVyPUZBTFNFICkgY29uc3Q7CiAgICBRUmVjdCB1bml0ZSggY29uc3QgUVJlY3QgJnIgKSBjb25z
dDsKICAgIFFSZWN0IGludGVyc2VjdCggY29uc3QgUVJlY3QgJnIgKSBjb25zdDsKICAgIGJvb2wg
aW50ZXJzZWN0cyggY29uc3QgUVJlY3QgJnIgKSBjb25zdDsKCiAgICBmcmllbmQgYm9vbCBvcGVy
YXRvcj09KCBjb25zdCBRUmVjdCAmLCBjb25zdCBRUmVjdCAmICk7CiAgICBmcmllbmQgYm9vbCBv
cGVyYXRvciE9KCBjb25zdCBRUmVjdCAmLCBjb25zdCBRUmVjdCAmICk7Cgpwcml2YXRlOgoKCgoK
CgogICAgUUNPT1JEIHgxOwogICAgUUNPT1JEIHkxOwogICAgUUNPT1JEIHgyOwogICAgUUNPT1JE
IHkyOwoKfTsKCiBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFSZWN0ICYsIGNvbnN0IFFSZWN0ICYg
KTsKIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVJlY3QgJiwgY29uc3QgUVJlY3QgJiApOwoKCgoK
CgogUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFSZWN0ICYg
KTsKIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRUmVjdCAmICk7CgoK
CgoKCmlubGluZSBRUmVjdDo6UVJlY3QoIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQgKQp7CiAgICB4MSA9IChRQ09PUkQpbGVmdDsKICAgIHkxID0gKFFDT09SRCl0b3A7
CiAgICB4MiA9IChRQ09PUkQpKGxlZnQrd2lkdGgtMSk7CiAgICB5MiA9IChRQ09PUkQpKHRvcCto
ZWlnaHQtMSk7Cn0KCmlubGluZSBib29sIFFSZWN0Ojppc051bGwoKSBjb25zdAp7IHJldHVybiB4
MiA9PSB4MS0xICYmIHkyID09IHkxLTE7IH0KCmlubGluZSBib29sIFFSZWN0Ojppc0VtcHR5KCkg
Y29uc3QKeyByZXR1cm4geDEgPiB4MiB8fCB5MSA+IHkyOyB9CgppbmxpbmUgYm9vbCBRUmVjdDo6
aXNWYWxpZCgpIGNvbnN0CnsgcmV0dXJuIHgxIDw9IHgyICYmIHkxIDw9IHkyOyB9CgppbmxpbmUg
aW50IFFSZWN0OjpsZWZ0KCkgY29uc3QKeyByZXR1cm4geDE7IH0KCmlubGluZSBpbnQgUVJlY3Q6
OnRvcCgpIGNvbnN0CnsgcmV0dXJuIHkxOyB9CgppbmxpbmUgaW50IFFSZWN0OjpyaWdodCgpIGNv
bnN0CnsgcmV0dXJuIHgyOyB9CgppbmxpbmUgaW50IFFSZWN0Ojpib3R0b20oKSBjb25zdAp7IHJl
dHVybiB5MjsgfQoKaW5saW5lIFFDT09SRCAmUVJlY3Q6OnJMZWZ0KCkKeyByZXR1cm4geDE7IH0K
CmlubGluZSBRQ09PUkQgJiBRUmVjdDo6clRvcCgpCnsgcmV0dXJuIHkxOyB9CgppbmxpbmUgUUNP
T1JEICYgUVJlY3Q6OnJSaWdodCgpCnsgcmV0dXJuIHgyOyB9CgppbmxpbmUgUUNPT1JEICYgUVJl
Y3Q6OnJCb3R0b20oKQp7IHJldHVybiB5MjsgfQoKaW5saW5lIGludCBRUmVjdDo6eCgpIGNvbnN0
CnsgcmV0dXJuIHgxOyB9CgppbmxpbmUgaW50IFFSZWN0Ojp5KCkgY29uc3QKeyByZXR1cm4geTE7
IH0KCmlubGluZSB2b2lkIFFSZWN0OjpzZXRMZWZ0KCBpbnQgcG9zICkKeyB4MSA9IChRQ09PUkQp
cG9zOyB9CgppbmxpbmUgdm9pZCBRUmVjdDo6c2V0VG9wKCBpbnQgcG9zICkKeyB5MSA9IChRQ09P
UkQpcG9zOyB9CgppbmxpbmUgdm9pZCBRUmVjdDo6c2V0UmlnaHQoIGludCBwb3MgKQp7IHgyID0g
KFFDT09SRClwb3M7IH0KCmlubGluZSB2b2lkIFFSZWN0OjpzZXRCb3R0b20oIGludCBwb3MgKQp7
IHkyID0gKFFDT09SRClwb3M7IH0KCmlubGluZSB2b2lkIFFSZWN0OjpzZXRYKCBpbnQgeCApCnsg
eDEgPSAoUUNPT1JEKXg7IH0KCmlubGluZSB2b2lkIFFSZWN0OjpzZXRZKCBpbnQgeSApCnsgeTEg
PSAoUUNPT1JEKXk7IH0KCmlubGluZSBRUG9pbnQgUVJlY3Q6OnRvcExlZnQoKSBjb25zdAp7IHJl
dHVybiBRUG9pbnQoeDEsIHkxKTsgfQoKaW5saW5lIFFQb2ludCBRUmVjdDo6Ym90dG9tUmlnaHQo
KSBjb25zdAp7IHJldHVybiBRUG9pbnQoeDIsIHkyKTsgfQoKaW5saW5lIFFQb2ludCBRUmVjdDo6
dG9wUmlnaHQoKSBjb25zdAp7IHJldHVybiBRUG9pbnQoeDIsIHkxKTsgfQoKaW5saW5lIFFQb2lu
dCBRUmVjdDo6Ym90dG9tTGVmdCgpIGNvbnN0CnsgcmV0dXJuIFFQb2ludCh4MSwgeTIpOyB9Cgpp
bmxpbmUgUVBvaW50IFFSZWN0OjpjZW50ZXIoKSBjb25zdAp7IHJldHVybiBRUG9pbnQoKHgxK3gy
KS8yLCAoeTEreTIpLzIpOyB9CgppbmxpbmUgaW50IFFSZWN0Ojp3aWR0aCgpIGNvbnN0CnsgcmV0
dXJuIHgyIC0geDEgKyAxOyB9CgppbmxpbmUgaW50IFFSZWN0OjpoZWlnaHQoKSBjb25zdAp7IHJl
dHVybiB5MiAtIHkxICsgMTsgfQoKaW5saW5lIFFTaXplIFFSZWN0OjpzaXplKCkgY29uc3QKeyBy
ZXR1cm4gUVNpemUoeDIteDErMSwgeTIteTErMSk7IH0KCmlubGluZSBib29sIFFSZWN0Ojpjb250
YWlucyggaW50IHgsIGludCB5LCBib29sIHByb3BlciApIGNvbnN0CnsKICAgIGlmICggcHJvcGVy
ICkKICAgICAgICByZXR1cm4geCA+IHgxICYmIHggPCB4MiAmJgogICAgICAgICAgICAgICB5ID4g
eTEgJiYgeSA8IHkyOwogICAgZWxzZQogICAgICAgIHJldHVybiB4ID49IHgxICYmIHggPD0geDIg
JiYKICAgICAgICAgICAgICAgeSA+PSB5MSAmJiB5IDw9IHkyOwp9CgppbmxpbmUgYm9vbCBRUmVj
dDo6Y29udGFpbnMoIGludCB4LCBpbnQgeSApIGNvbnN0CnsKICAgIHJldHVybiB4ID49IHgxICYm
IHggPD0geDIgJiYKICAgICAgICAgICB5ID49IHkxICYmIHkgPD0geTI7Cn0KIyA0NCAiLi4vLi4v
aW5jbHVkZS9xcmVnaW9uLmgiIDIKCgoKc3RydWN0IFFSZWdpb25Qcml2YXRlOwoKCmNsYXNzIFFS
ZWdpb24KewpwdWJsaWM6CiAgICBlbnVtIFJlZ2lvblR5cGUgeyBSZWN0YW5nbGUsIEVsbGlwc2Ug
fTsKCiAgICBRUmVnaW9uKCk7CiAgICBRUmVnaW9uKCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQg
aCwgUmVnaW9uVHlwZSA9IFJlY3RhbmdsZSApOwogICAgUVJlZ2lvbiggY29uc3QgUVJlY3QgJiwg
UmVnaW9uVHlwZSA9IFJlY3RhbmdsZSApOwogICAgUVJlZ2lvbiggY29uc3QgUVBvaW50QXJyYXkg
JiwgYm9vbCB3aW5kaW5nPUZBTFNFICk7CiAgICBRUmVnaW9uKCBjb25zdCBRUmVnaW9uICYgKTsK
ICAgIFFSZWdpb24oIGNvbnN0IFFCaXRtYXAgJiApOwogICB+UVJlZ2lvbigpOwogICAgUVJlZ2lv
biAmb3BlcmF0b3I9KCBjb25zdCBRUmVnaW9uICYgKTsKCiAgICBib29sIGlzTnVsbCgpIGNvbnN0
OwogICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CgogICAgYm9vbCBjb250YWlucyggY29uc3QgUVBv
aW50ICZwICkgY29uc3Q7CiAgICBib29sIGNvbnRhaW5zKCBjb25zdCBRUmVjdCAmciApIGNvbnN0
OwoKICAgIHZvaWQgdHJhbnNsYXRlKCBpbnQgZHgsIGludCBkeSApOwoKICAgIFFSZWdpb24gdW5p
dGUoIGNvbnN0IFFSZWdpb24gJiApIGNvbnN0OwogICAgUVJlZ2lvbiBpbnRlcnNlY3QoIGNvbnN0
IFFSZWdpb24gJikgY29uc3Q7CiAgICBRUmVnaW9uIHN1YnRyYWN0KCBjb25zdCBRUmVnaW9uICYg
KSBjb25zdDsKICAgIFFSZWdpb24gZW9yKCBjb25zdCBRUmVnaW9uICYgKSBjb25zdDsKCiAgICBR
UmVjdCBib3VuZGluZ1JlY3QoKSBjb25zdDsKICAgIFFNZW1BcnJheTxRUmVjdD4gcmVjdHMoKSBj
b25zdDsKICAgIHZvaWQgc2V0UmVjdHMoIGNvbnN0IFFSZWN0ICosIGludCApOwoKICAgIGNvbnN0
IFFSZWdpb24gb3BlcmF0b3J8KCBjb25zdCBRUmVnaW9uICYgKSBjb25zdDsKICAgIGNvbnN0IFFS
ZWdpb24gb3BlcmF0b3IrKCBjb25zdCBRUmVnaW9uICYgKSBjb25zdDsKICAgIGNvbnN0IFFSZWdp
b24gb3BlcmF0b3ImKCBjb25zdCBRUmVnaW9uICYgKSBjb25zdDsKICAgIGNvbnN0IFFSZWdpb24g
b3BlcmF0b3ItKCBjb25zdCBRUmVnaW9uICYgKSBjb25zdDsKICAgIGNvbnN0IFFSZWdpb24gb3Bl
cmF0b3JeKCBjb25zdCBRUmVnaW9uICYgKSBjb25zdDsKICAgIFFSZWdpb24mIG9wZXJhdG9yfD0o
IGNvbnN0IFFSZWdpb24gJiApOwogICAgUVJlZ2lvbiYgb3BlcmF0b3IrPSggY29uc3QgUVJlZ2lv
biAmICk7CiAgICBRUmVnaW9uJiBvcGVyYXRvciY9KCBjb25zdCBRUmVnaW9uICYgKTsKICAgIFFS
ZWdpb24mIG9wZXJhdG9yLT0oIGNvbnN0IFFSZWdpb24gJiApOwogICAgUVJlZ2lvbiYgb3BlcmF0
b3JePSggY29uc3QgUVJlZ2lvbiAmICk7CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRUmVn
aW9uICYgKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVJlZ2lvbiAmciApIGNv
bnN0CiAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuICEob3BlcmF0b3I9PShyKSk7IH0K
CgoKCiAgICBSZWdpb24gaGFuZGxlKCkgY29uc3QgeyBpZighZGF0YS0+cmduKSB1cGRhdGVYMTFS
ZWdpb24oKTsgcmV0dXJuIGRhdGEtPnJnbjsgfQojIDEwOCAiLi4vLi4vaW5jbHVkZS9xcmVnaW9u
LmgiCiAgICBmcmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNv
bnN0IFFSZWdpb24gJiApOwogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0
YVN0cmVhbSAmLCBRUmVnaW9uICYgKTsKCnByaXZhdGU6CiAgICBRUmVnaW9uKCBib29sICk7CiAg
ICBRUmVnaW9uIGNvcHkoKSBjb25zdDsKICAgIHZvaWQgZGV0YWNoKCk7CgoKCgogICAgdm9pZCB1
cGRhdGVYMTFSZWdpb24oKSBjb25zdDsKICAgIHZvaWQgKmNsaXBSZWN0YW5nbGVzKCBpbnQgJm51
bSApIGNvbnN0OwogICAgZnJpZW5kIHZvaWQgKnF0X2dldENsaXBSZWN0cyggY29uc3QgUVJlZ2lv
biAmLCBpbnQgJiApOwoKICAgIHZvaWQgZXhlYyggY29uc3QgUUJ5dGVBcnJheSAmLCBpbnQgdmVy
ID0gMCApOwogICAgc3RydWN0IFFSZWdpb25EYXRhIDogcHVibGljIFFTaGFyZWQgewoKCgogICAg
ICAgIFJlZ2lvbiByZ247CiAgICAgICAgdm9pZCAqeHJlY3RhbmdsZXM7CiAgICAgICAgUVJlZ2lv
blByaXZhdGUgKnJlZ2lvbjsKCgoKCgoKCiAgICAgICAgYm9vbCBpc19udWxsOwogICAgfSAqZGF0
YTsKCgoKCgoKCn07CiMgMTY3ICIuLi8uLi9pbmNsdWRlL3FyZWdpb24uaCIKIFFEYXRhU3RyZWFt
ICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRUmVnaW9uICYgKTsKIFFEYXRhU3Ry
ZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRUmVnaW9uICYgKTsKIyA0NCAiLi4vLi4v
aW5jbHVkZS9xZXZlbnQuaCIgMgoKIyAxICIuLi8uLi9pbmNsdWRlL3FtaW1lLmgiIDEKIyA0MyAi
Li4vLi4vaW5jbHVkZS9xbWltZS5oIgojIDEgIi4uLy4uL2luY2x1ZGUvcW1hcC5oIiAxCiMgNDIg
Ii4uLy4uL2luY2x1ZGUvcW1hcC5oIgojIDEgIi4uLy4uL2luY2x1ZGUvcWdsb2JhbC5oIiAxCiMg
NDMgIi4uLy4uL2luY2x1ZGUvcW1hcC5oIiAyCgoKIyAxICIuLi8uLi9pbmNsdWRlL3FwYWlyLmgi
IDEKIyA0MCAiLi4vLi4vaW5jbHVkZS9xcGFpci5oIgojIDEgIi4uLy4uL2luY2x1ZGUvcWdsb2Jh
bC5oIiAxCiMgNDEgIi4uLy4uL2luY2x1ZGUvcXBhaXIuaCIgMgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
VDEsIGNsYXNzIFQyPgpzdHJ1Y3QgUVBhaXIKewogICAgdHlwZWRlZiBUMSBmaXJzdF90eXBlOwog
ICAgdHlwZWRlZiBUMiBzZWNvbmRfdHlwZTsKCiAgICBRUGFpcigpCiAgICAgICAgOiBmaXJzdCgg
VDEoKSApLCBzZWNvbmQoIFQyKCkgKQogICAge30KICAgIFFQYWlyKCBjb25zdCBUMSYgdDEsIGNv
bnN0IFQyJiB0MiApCiAgICAgICAgOiBmaXJzdCggdDEgKSwgc2Vjb25kKCB0MiApCiAgICB7fQoK
ICAgIFQxIGZpcnN0OwogICAgVDIgc2Vjb25kOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFz
cyBUMj4KIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVBhaXI8VDEsIFQyPiYgeCwgY29uc3QgUVBh
aXI8VDEsIFQyPiYgeSApCnsKICAgIHJldHVybiB4LmZpcnN0ID09IHkuZmlyc3QgJiYgeC5zZWNv
bmQgPT0geS5zZWNvbmQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+CiBib29sIG9w
ZXJhdG9yPCggY29uc3QgUVBhaXI8VDEsIFQyPiYgeCwgY29uc3QgUVBhaXI8VDEsIFQyPiYgeSAp
CnsKICAgIHJldHVybiB4LmZpcnN0IDwgeS5maXJzdCB8fAogICAgICAgICAgICggISggeS5maXJz
dCA8IHguZmlyc3QgKSAmJiB4LnNlY29uZCA8IHkuc2Vjb25kICk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBUMSwgY2xhc3MgVDI+CiBRUGFpcjxUMSwgVDI+IHFNYWtlUGFpciggY29uc3QgVDEmIHgsIGNv
bnN0IFQyJiB5ICkKewogICAgcmV0dXJuIFFQYWlyPFQxLCBUMj4oIHgsIHkgKTsKfQoKCnRlbXBs
YXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+CmlubGluZSBRRGF0YVN0cmVhbSYgb3BlcmF0b3I+Pigg
UURhdGFTdHJlYW0mIHMsIFFQYWlyPFQxLCBUMj4mIHAgKQp7CiAgICBzID4+IHAuZmlyc3QgPj4g
cC5zZWNvbmQ7CiAgICByZXR1cm4gczsKfQoKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4K
aW5saW5lIFFEYXRhU3RyZWFtJiBvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSYgcywgY29uc3QgUVBh
aXI8VDEsIFQyPiYgcCApCnsKICAgIHMgPDwgcC5maXJzdCA8PCBwLnNlY29uZDsKICAgIHJldHVy
biBzOwp9CiMgNDYgIi4uLy4uL2luY2x1ZGUvcW1hcC5oIiAyCgoKCgoKIyAxICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvbWFwIiAxIDMKIyA2NSAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL21hcCIgMwoKIyAxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdHJlZS5oIiAxIDMKIyA5MSAiL3NwYWNlL3NuYi91c3Iv
bG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3RyZWUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsK
ICBlbnVtIF9SYl90cmVlX2NvbG9yIHsgX01fcmVkID0gZmFsc2UsIF9NX2JsYWNrID0gdHJ1ZSB9
OwoKICBzdHJ1Y3QgX1JiX3RyZWVfbm9kZV9iYXNlCiAgewogICAgdHlwZWRlZiBfUmJfdHJlZV9u
b2RlX2Jhc2UqIF9CYXNlX3B0cjsKCiAgICBfUmJfdHJlZV9jb2xvciBfTV9jb2xvcjsKICAgIF9C
YXNlX3B0ciBfTV9wYXJlbnQ7CiAgICBfQmFzZV9wdHIgX01fbGVmdDsKICAgIF9CYXNlX3B0ciBf
TV9yaWdodDsKCiAgICBzdGF0aWMgX0Jhc2VfcHRyCiAgICBfU19taW5pbXVtKF9CYXNlX3B0ciBf
X3gpCiAgICB7CiAgICAgIHdoaWxlIChfX3gtPl9NX2xlZnQgIT0gMCkgX194ID0gX194LT5fTV9s
ZWZ0OwogICAgICByZXR1cm4gX194OwogICAgfQoKICAgIHN0YXRpYyBfQmFzZV9wdHIKICAgIF9T
X21heGltdW0oX0Jhc2VfcHRyIF9feCkKICAgIHsKICAgICAgd2hpbGUgKF9feC0+X01fcmlnaHQg
IT0gMCkgX194ID0gX194LT5fTV9yaWdodDsKICAgICAgcmV0dXJuIF9feDsKICAgIH0KICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgc3RydWN0IF9SYl90cmVlX25vZGUgOiBwdWJs
aWMgX1JiX3RyZWVfbm9kZV9iYXNlCiAgICB7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxf
VmFsPiogX0xpbmtfdHlwZTsKICAgICAgX1ZhbCBfTV92YWx1ZV9maWVsZDsKICAgIH07CgogIHN0
cnVjdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCiAgewogICAgdHlwZWRlZiBfUmJfdHJlZV9ub2Rl
X2Jhc2U6Ol9CYXNlX3B0ciBfQmFzZV9wdHI7CiAgICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy
ZW5jZV90eXBlOwoKICAgIF9CYXNlX3B0ciBfTV9ub2RlOwoKICAgIHZvaWQKICAgIF9NX2luY3Jl
bWVudCgpCiAgICB7CiAgICAgIGlmIChfTV9ub2RlLT5fTV9yaWdodCAhPSAwKQogICAgICAgIHsK
ICAgICAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgICAgICAgIHdoaWxlIChf
TV9ub2RlLT5fTV9sZWZ0ICE9IDApCiAgICAgICAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9s
ZWZ0OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9CYXNlX3B0ciBf
X3kgPSBfTV9ub2RlLT5fTV9wYXJlbnQ7CiAgICAgICAgICB3aGlsZSAoX01fbm9kZSA9PSBfX3kt
Pl9NX3JpZ2h0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fbm9kZSA9IF9feTsKICAg
ICAgICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICAgICAgfQogICAgICAgICAg
aWYgKF9NX25vZGUtPl9NX3JpZ2h0ICE9IF9feSkKICAgICAgICAgICAgX01fbm9kZSA9IF9feTsK
ICAgICAgICB9CiAgICB9CgogICAgdm9pZAogICAgX01fZGVjcmVtZW50KCkKICAgIHsKICAgICAg
aWYgKF9NX25vZGUtPl9NX2NvbG9yID09IF9NX3JlZAogICAgICAgICAgJiYgX01fbm9kZS0+X01f
cGFyZW50LT5fTV9wYXJlbnQgPT0gX01fbm9kZSkKICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+
X01fcmlnaHQ7CiAgICAgIGVsc2UgaWYgKF9NX25vZGUtPl9NX2xlZnQgIT0gMCkKICAgICAgICB7
CiAgICAgICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fbGVmdDsKICAgICAgICAgIHdo
aWxlIChfX3ktPl9NX3JpZ2h0ICE9IDApCiAgICAgICAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7
CiAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsK
ICAgICAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9wYXJlbnQ7CiAgICAgICAgICB3
aGlsZSAoX01fbm9kZSA9PSBfX3ktPl9NX2xlZnQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfTV9ub2RlID0gX195OwogICAgICAgICAgICAgIF9feSA9IF9feS0+X01fcGFyZW50OwogICAg
ICAgICAgICB9CiAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgIH0KICAgIH0KICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgog
ICAgc3RydWN0IF9SYl90cmVlX2l0ZXJhdG9yIDogcHVibGljIF9SYl90cmVlX2Jhc2VfaXRlcmF0
b3IKICAgIHsKICAgICAgdHlwZWRlZiBfVmFsIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1Jl
ZiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogICAgICB0eXBlZGVmIF9S
Yl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4gaXRlcmF0b3I7CiAgICAgIHR5cGVk
ZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9WYWwqPgogICAg
ICBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBf
UmVmLCBfUHRyPiBfU2VsZjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWw+KiBfTGlu
a190eXBlOwoKICAgICAgX1JiX3RyZWVfaXRlcmF0b3IoKSB7fQogICAgICBfUmJfdHJlZV9pdGVy
YXRvcihfTGlua190eXBlIF9feCkgeyBfTV9ub2RlID0gX194OyB9CiAgICAgIF9SYl90cmVlX2l0
ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBfX2l0KSB7IF9NX25vZGUgPSBfX2l0Ll9NX25vZGU7IH0K
CiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfTGlua190
eXBlKF9NX25vZGUpLT5fTV92YWx1ZV9maWVsZDsgfQoKICAgICAgcG9pbnRlcgogICAgICBvcGVy
YXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgICAgIF9TZWxmJgog
ICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIF9NX2luY3JlbWVudCgpOwogICAgICAg
IHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgX1NlbGYKICAgICAgb3BlcmF0b3IrKyhpbnQp
CiAgICAgIHsKICAgICAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgICAgIF9NX2luY3JlbWVu
dCgpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgX1NlbGYmCiAgICAgIG9w
ZXJhdG9yLS0oKSB7IF9NX2RlY3JlbWVudCgpOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9TZWxm
CiAgICAgIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAgICAgICAgX1NlbGYgX190bXAgPSAqdGhp
czsKICAgICAgICBfTV9kZWNyZW1lbnQoKTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0K
ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBf
UHRyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0
b3I8X1ZhbCwgX1JlZiwgX1B0cj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVf
aXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0cj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2Rl
ID09IF9feS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBf
VmFsJiwgY29uc3QgX1ZhbCo+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0
ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2Rl
ID09IF9feS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwg
X1ZhbCo+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWws
IGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2Rl
ID09IF9feS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9S
ZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBf
UmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRyPiYgX194LAogICAgICAgICAgICAgICBj
b25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRyPiYgX195KQogICAgeyByZXR1
cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zh
bD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9y
PF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4mIF9feCwKICAgICAgICAgICAgICAgY29u
c3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwqPiYgX195KQogICAgeyByZXR1
cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zh
bD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9y
PF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVf
aXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9WYWwqPiYgX195KQogICAgeyByZXR1
cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7IH0KCiAgaW5saW5lIHZvaWQKICBfUmJfdHJl
ZV9yb3RhdGVfbGVmdChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNl
KiYgX19yb290KQogIHsKICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9yaWdo
dDsKICAgIF9feC0+X01fcmlnaHQgPSBfX3ktPl9NX2xlZnQ7CiAgICBpZiAoX195LT5fTV9sZWZ0
ICE9MCkKICAgICAgX195LT5fTV9sZWZ0LT5fTV9wYXJlbnQgPSBfX3g7CiAgICBfX3ktPl9NX3Bh
cmVudCA9IF9feC0+X01fcGFyZW50OwoKICAgIGlmIChfX3ggPT0gX19yb290KQogICAgICBfX3Jv
b3QgPSBfX3k7CiAgICBlbHNlIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX2xlZnQpCiAg
ICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogICAgZWxzZQogICAgICBfX3gtPl9N
X3BhcmVudC0+X01fcmlnaHQgPSBfX3k7CiAgICBfX3ktPl9NX2xlZnQgPSBfX3g7CiAgICBfX3gt
Pl9NX3BhcmVudCA9IF9feTsKICB9CgogIGlubGluZSB2b2lkCiAgX1JiX3RyZWVfcm90YXRlX3Jp
Z2h0KF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3Qp
CiAgewogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX2xlZnQ7CiAgICBfX3gt
Pl9NX2xlZnQgPSBfX3ktPl9NX3JpZ2h0OwogICAgaWYgKF9feS0+X01fcmlnaHQgIT0gMCkKICAg
ICAgX195LT5fTV9yaWdodC0+X01fcGFyZW50ID0gX194OwogICAgX195LT5fTV9wYXJlbnQgPSBf
X3gtPl9NX3BhcmVudDsKCiAgICBpZiAoX194ID09IF9fcm9vdCkKICAgICAgX19yb290ID0gX195
OwogICAgZWxzZSBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9yaWdodCkKICAgICAgX194
LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogICAgZWxzZQogICAgICBfX3gtPl9NX3BhcmVu
dC0+X01fbGVmdCA9IF9feTsKICAgIF9feS0+X01fcmlnaHQgPSBfX3g7CiAgICBfX3gtPl9NX3Bh
cmVudCA9IF9feTsKICB9CgogIGlubGluZSB2b2lkCiAgX1JiX3RyZWVfcmViYWxhbmNlKF9SYl90
cmVlX25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCiAgewogICAg
X194LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgIHdoaWxlIChfX3ggIT0gX19yb290CiAgICAgICAg
ICAgJiYgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAgewogICAgICAg
IGlmIChfX3gtPl9NX3BhcmVudCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0
KQogICAgICAgICAgewogICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+
X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgICAgICBpZiAoX195ICYmIF9f
eS0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9f
eC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX195LT5f
TV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3Bh
cmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3Bh
cmVudC0+X01fcGFyZW50OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX3Jp
Z2h0KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgX194ID0gX194LT5f
TV9wYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194LCBf
X3Jvb3QpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVu
dC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5f
TV9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90
YXRlX3JpZ2h0KF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAg
ICAgfQogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgX1Ji
X3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0
OwogICAgICAgICAgICBpZiAoX195ICYmIF9feS0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX2Js
YWNrOwogICAgICAgICAgICAgICAgX195LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAg
ICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAg
ICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50OwogICAgICAgICAgICAg
IH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChf
X3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX2xlZnQpCiAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgICAgICAgICAgICBf
UmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAg
ICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwog
ICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194LT5fTV9wYXJlbnQtPl9NX3Bh
cmVudCwgX19yb290KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgIH0KICAgIF9f
cm9vdC0+X01fY29sb3IgPSBfTV9ibGFjazsKICB9CgogIGlubGluZSBfUmJfdHJlZV9ub2RlX2Jh
c2UqCiAgX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9lcmFzZShfUmJfdHJlZV9ub2RlX2Jhc2UqIF9f
eiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9f
cm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSom
IF9fbGVmdG1vc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2Rl
X2Jhc2UqJiBfX3JpZ2h0bW9zdCkKICB7CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9f
ejsKICAgIF9SYl90cmVlX25vZGVfYmFzZSogX194ID0gMDsKICAgIF9SYl90cmVlX25vZGVfYmFz
ZSogX194X3BhcmVudCA9IDA7CiAgICBpZiAoX195LT5fTV9sZWZ0ID09IDApCiAgICAgIF9feCA9
IF9feS0+X01fcmlnaHQ7CiAgICBlbHNlCiAgICAgIGlmIChfX3ktPl9NX3JpZ2h0ID09IDApCiAg
ICAgICAgX194ID0gX195LT5fTV9sZWZ0OwogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAg
IF9feSA9IF9feS0+X01fcmlnaHQ7CiAgICAgICAgICB3aGlsZSAoX195LT5fTV9sZWZ0ICE9IDAp
CiAgICAgICAgICAgIF9feSA9IF9feS0+X01fbGVmdDsKICAgICAgICAgIF9feCA9IF9feS0+X01f
cmlnaHQ7CiAgICAgICAgfQogICAgaWYgKF9feSAhPSBfX3opCiAgICAgIHsKCiAgICAgICAgX196
LT5fTV9sZWZ0LT5fTV9wYXJlbnQgPSBfX3k7CiAgICAgICAgX195LT5fTV9sZWZ0ID0gX196LT5f
TV9sZWZ0OwogICAgICAgIGlmIChfX3kgIT0gX196LT5fTV9yaWdodCkKICAgICAgICAgIHsKICAg
ICAgICAgICAgX194X3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgICAgICAgICBpZiAoX194
KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgICAgICAgICBfX3ktPl9NX3Bh
cmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgICAgICAgX195LT5fTV9yaWdodCA9IF9fei0+X01f
cmlnaHQ7CiAgICAgICAgICAgIF9fei0+X01fcmlnaHQtPl9NX3BhcmVudCA9IF9feTsKICAgICAg
ICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3hfcGFyZW50ID0gX195OwogICAgICAgIGlm
IChfX3Jvb3QgPT0gX196KQogICAgICAgICAgX19yb290ID0gX195OwogICAgICAgIGVsc2UgaWYg
KF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID09IF9feikKICAgICAgICAgIF9fei0+X01fcGFyZW50
LT5fTV9sZWZ0ID0gX195OwogICAgICAgIGVsc2UKICAgICAgICAgIF9fei0+X01fcGFyZW50LT5f
TV9yaWdodCA9IF9feTsKICAgICAgICBfX3ktPl9NX3BhcmVudCA9IF9fei0+X01fcGFyZW50Owog
ICAgICAgIHN0ZDo6c3dhcChfX3ktPl9NX2NvbG9yLCBfX3otPl9NX2NvbG9yKTsKICAgICAgICBf
X3kgPSBfX3o7CgogICAgICB9CiAgICBlbHNlCiAgICAgIHsKICAgICAgICBfX3hfcGFyZW50ID0g
X195LT5fTV9wYXJlbnQ7CiAgICAgICAgaWYgKF9feCkKICAgICAgICAgIF9feC0+X01fcGFyZW50
ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgaWYgKF9fcm9vdCA9PSBfX3opCiAgICAgICAgICBf
X3Jvb3QgPSBfX3g7CiAgICAgICAgZWxzZQogICAgICAgICAgaWYgKF9fei0+X01fcGFyZW50LT5f
TV9sZWZ0ID09IF9feikKICAgICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7
CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9f
eDsKICAgICAgICBpZiAoX19sZWZ0bW9zdCA9PSBfX3opCiAgICAgICAgICBpZiAoX196LT5fTV9y
aWdodCA9PSAwKQogICAgICAgICAgICBfX2xlZnRtb3N0ID0gX196LT5fTV9wYXJlbnQ7CgogICAg
ICAgICAgZWxzZQogICAgICAgICAgICBfX2xlZnRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpf
U19taW5pbXVtKF9feCk7CiAgICAgICAgaWYgKF9fcmlnaHRtb3N0ID09IF9feikKICAgICAgICAg
IGlmIChfX3otPl9NX2xlZnQgPT0gMCkKICAgICAgICAgICAgX19yaWdodG1vc3QgPSBfX3otPl9N
X3BhcmVudDsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fcmlnaHRtb3N0ID0gX1JiX3Ry
ZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7CiAgICAgIH0KICAgIGlmIChfX3ktPl9NX2Nv
bG9yICE9IF9NX3JlZCkKICAgICAgewogICAgICAgIHdoaWxlIChfX3ggIT0gX19yb290ICYmIChf
X3ggPT0gMCB8fCBfX3gtPl9NX2NvbG9yID09IF9NX2JsYWNrKSkKICAgICAgICAgIGlmIChfX3gg
PT0gX194X3BhcmVudC0+X01fbGVmdCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9SYl90
cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICAgICAg
aWYgKF9fdy0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIF9feF9w
YXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3Rh
dGVfbGVmdChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICBfX3cgPSBfX3hf
cGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoKF9f
dy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2Nv
bG9yID09IF9NX2JsYWNrKSAmJgogICAgICAgICAgICAgICAgICAoX193LT5fTV9yaWdodCA9PSAw
IHx8CiAgICAgICAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfTV9ibGFj
aykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBf
TV9yZWQ7CiAgICAgICAgICAgICAgICAgIF9feCA9IF9feF9wYXJlbnQ7CiAgICAgICAgICAgICAg
ICAgIF9feF9wYXJlbnQgPSBfX3hfcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBp
ZiAoX193LT5fTV9yaWdodCA9PSAwCiAgICAgICAgICAgICAgICAgICAgICB8fCBfX3ctPl9NX3Jp
Z2h0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAg
ICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICAg
ICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9fdywgX19yb290KTsKICAgICAgICAgICAgICAgICAg
ICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAg
ICAgICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAg
ICAgICAgICBpZiAoX193LT5fTV9yaWdodCkKICAgICAgICAgICAgICAgICAgICBfX3ctPl9NX3Jp
Z2h0LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3Rh
dGVfbGVmdChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7
CgogICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+X01f
bGVmdDsKICAgICAgICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9ibGFjazsKICAg
ICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAg
ICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAg
ICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIGlmICgoX193LT5fTV9yaWdodCA9PSAwIHx8CiAgICAgICAgICAgICAgICAg
ICBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykgJiYKICAgICAgICAgICAgICAg
ICAgKF9fdy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAgICAgICAgICAgICBfX3ctPl9NX2xlZnQt
Pl9NX2NvbG9yID09IF9NX2JsYWNrKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgX194ID0gX194X3Bh
cmVudDsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9NX3BhcmVu
dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQgPT0gMCB8fCBfX3ctPl9NX2xlZnQt
Pl9NX2NvbG9yID09IF9NX2JsYWNrKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAg
ICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICAgICAg
X1JiX3RyZWVfcm90YXRlX2xlZnQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICAgICAg
X193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsKICAgICAgICAg
ICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAg
ICAgaWYgKF9fdy0+X01fbGVmdCkKICAgICAgICAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9N
X2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdo
dChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIGlmIChfX3gpIF9feC0+X01fY29sb3IgPSBf
TV9ibGFjazsKICAgICAgfQogICAgcmV0dXJuIF9feTsKICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jLCBib29sIF9TX2luc3RhbmNlbGVzcz4KICAgIGNs
YXNzIF9SYl90cmVlX2FsbG9jX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRv
cl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0
IHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yOyB9CgogICAgICBfUmJfdHJlZV9hbGxvY19iYXNl
KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICAgIDogX01fbm9kZV9hbGxvY2F0b3IoX19h
KSwgX01faGVhZGVyKDApIHt9CgogICAgcHJvdGVjdGVkOgogICAgICB0eXBlbmFtZSBfQWxsb2Nf
dHJhaXRzPF9SYl90cmVlX25vZGU8X1RwPiwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUKICAgICAg
X01fbm9kZV9hbGxvY2F0b3I7CgogICAgICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2hlYWRlcjsK
CiAgICAgIF9SYl90cmVlX25vZGU8X1RwPioKICAgICAgX01fZ2V0X25vZGUoKSB7IHJldHVybiBf
TV9ub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9wdXRf
bm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkKICAgICAgeyBfTV9ub2RlX2FsbG9jYXRvci5k
ZWFsbG9jYXRlKF9fcCwgMSk7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2Ms
IHRydWU+CiAgICB7CiAgICBwdWJsaWM6CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFp
dHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgICAgYWxs
b2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBl
KCk7IH0KCiAgICAgIF9SYl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKSA6
IF9NX2hlYWRlcigwKSB7fQoKICAgIHByb3RlY3RlZDoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+
KiBfTV9oZWFkZXI7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1JiX3Ry
ZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjpfQWxsb2NfdHlwZQogICAgICBfQWxsb2NfdHlwZTsKCiAg
ICAgIF9SYl90cmVlX25vZGU8X1RwPioKICAgICAgX01fZ2V0X25vZGUoKSB7IHJldHVybiBfQWxs
b2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcHV0X25vZGUoX1Ji
X3RyZWVfbm9kZTxfVHA+KiBfX3ApIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCAxKTsg
fQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBz
dHJ1Y3QgX1JiX3RyZWVfYmFzZSA6IHB1YmxpYyBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0Fs
bG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAs
IF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgIHsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9h
bGxvY19iYXNlPF9UcCwKICAgICAgICBfQWxsb2MsIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+
OjpfU19pbnN0YW5jZWxlc3M+IF9CYXNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjph
bGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIF9SYl90cmVlX2Jhc2UoY29uc3Qg
YWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBfQmFzZShfX2EpIHsgX01faGVhZGVyID0gX01f
Z2V0X25vZGUoKTsgfQogICAgICB+X1JiX3RyZWVfYmFzZSgpIHsgX01fcHV0X25vZGUoX01faGVh
ZGVyKTsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWws
IHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBl
bmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbD4gPgogICAgY2xhc3MgX1JiX3RyZWUgOiBwcm90
ZWN0ZWQgX1JiX3RyZWVfYmFzZTxfVmFsLCBfQWxsb2M+CiAgICB7CiAgICAgIHR5cGVkZWYgX1Ji
X3RyZWVfYmFzZTxfVmFsLCBfQWxsb2M+IF9CYXNlOwoKICAgIHByb3RlY3RlZDoKICAgICAgdHlw
ZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKICAgICAgdHlwZWRlZiBfUmJfdHJl
ZV9ub2RlPF9WYWw+IF9SYl90cmVlX25vZGU7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9L
ZXkga2V5X3R5cGU7CiAgICAgIHR5cGVkZWYgX1ZhbCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVm
IHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29u
c3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgICAgIHR5
cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9S
Yl90cmVlX25vZGUqIF9MaW5rX3R5cGU7CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK
ICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgICAgIGFsbG9j
YXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9j
YXRvcigpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB1c2luZyBfQmFzZTo6X01fZ2V0X25vZGU7
CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9wdXRfbm9kZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX2hl
YWRlcjsKCiAgICAgIF9MaW5rX3R5cGUKICAgICAgX01fY3JlYXRlX25vZGUoY29uc3QgdmFsdWVf
dHlwZSYgX194KQogICAgICB7CiAgICAgICAgX0xpbmtfdHlwZSBfX3RtcCA9IF9NX2dldF9ub2Rl
KCk7CiAgICAgICAgdHJ5CiAgICAgICAgICB7IF9Db25zdHJ1Y3QoJl9fdG1wLT5fTV92YWx1ZV9m
aWVsZCwgX194KTsgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgIF9N
X3B1dF9ub2RlKF9fdG1wKTsKICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIHJl
dHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgX0xpbmtfdHlwZQogICAgICBfTV9jbG9uZV9ub2Rl
KF9MaW5rX3R5cGUgX194KQogICAgICB7CiAgICAgICAgX0xpbmtfdHlwZSBfX3RtcCA9IF9NX2Ny
ZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmllbGQpOwogICAgICAgIF9fdG1wLT5fTV9jb2xvciA9
IF9feC0+X01fY29sb3I7CiAgICAgICAgX190bXAtPl9NX2xlZnQgPSAwOwogICAgICAgIF9fdG1w
LT5fTV9yaWdodCA9IDA7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICB2b2lk
CiAgICAgIGRlc3Ryb3lfbm9kZShfTGlua190eXBlIF9fcCkKICAgICAgewogICAgICAgIF9EZXN0
cm95KCZfX3AtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgICAgICBfTV9wdXRfbm9kZShfX3ApOwogICAg
ICB9CgogICAgICBzaXplX3R5cGUgX01fbm9kZV9jb3VudDsKICAgICAgX0NvbXBhcmUgX01fa2V5
X2NvbXBhcmU7CgogICAgICBfTGlua190eXBlJgogICAgICBfTV9yb290KCkgY29uc3QgeyByZXR1
cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX3BhcmVudDsgfQoKICAgICAgX0xpbmtfdHlw
ZSYKICAgICAgX01fbGVmdG1vc3QoKSBjb25zdCB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hl
YWRlci0+X01fbGVmdDsgfQoKICAgICAgX0xpbmtfdHlwZSYKICAgICAgX01fcmlnaHRtb3N0KCkg
Y29uc3QgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX3JpZ2h0OyB9CgogICAg
ICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfbGVmdChfTGlua190eXBlIF9feCkgeyByZXR1
cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlw
ZSYKICAgICAgX1NfcmlnaHQoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJiko
X194LT5fTV9yaWdodCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19wYXJl
bnQoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9wYXJlbnQp
OyB9CgogICAgICBzdGF0aWMgcmVmZXJlbmNlCiAgICAgIF9TX3ZhbHVlKF9MaW5rX3R5cGUgX194
KSB7IHJldHVybiBfX3gtPl9NX3ZhbHVlX2ZpZWxkOyB9CgogICAgICBzdGF0aWMgY29uc3QgX0tl
eSYKICAgICAgX1Nfa2V5KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiBfS2V5T2ZWYWx1ZSgpKF9T
X3ZhbHVlKF9feCkpOyB9CgogICAgICBzdGF0aWMgX1JiX3RyZWVfY29sb3ImCiAgICAgIF9TX2Nv
bG9yKF9MaW5rX3R5cGUgX194KSB7IHJldHVybiBfX3gtPl9NX2NvbG9yOyB9CgogICAgICBzdGF0
aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfbGVmdChfQmFzZV9wdHIgX194KSB7IHJldHVybiAoX0xp
bmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAg
ICBfU19yaWdodChfQmFzZV9wdHIgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01f
cmlnaHQpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfcGFyZW50KF9CYXNl
X3B0ciBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9wYXJlbnQpOyB9CgogICAg
ICBzdGF0aWMgcmVmZXJlbmNlCiAgICAgIF9TX3ZhbHVlKF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJu
ICgoX0xpbmtfdHlwZSlfX3gpLT5fTV92YWx1ZV9maWVsZDsgfQoKICAgICAgc3RhdGljIGNvbnN0
IF9LZXkmCiAgICAgIF9TX2tleShfQmFzZV9wdHIgX194KSB7IHJldHVybiBfS2V5T2ZWYWx1ZSgp
KF9TX3ZhbHVlKF9MaW5rX3R5cGUoX194KSkpO30KCiAgICAgIHN0YXRpYyBfUmJfdHJlZV9jb2xv
ciYKICAgICAgX1NfY29sb3IoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUoX194
KS0+X01fY29sb3IpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZQogICAgICBfU19taW5pbXVt
KF9MaW5rX3R5cGUgX194KQogICAgICB7IHJldHVybiAoX0xpbmtfdHlwZSkgX1JiX3RyZWVfbm9k
ZV9iYXNlOjpfU19taW5pbXVtKF9feCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlCiAgICAg
IF9TX21heGltdW0oX0xpbmtfdHlwZSBfX3gpCiAgICAgIHsgcmV0dXJuIChfTGlua190eXBlKSBf
UmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsgfQoKICAgIHB1YmxpYzoKICAgICAg
dHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCByZWZlcmVuY2UsIHBvaW50ZXI+
IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIGNv
bnN0X3JlZmVyZW5jZSwgY29uc3RfcG9pbnRlcj4KICAgICAgY29uc3RfaXRlcmF0b3I7CgogICAg
ICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0
b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKICAgICAgaXRlcmF0b3IKICAgICAg
X01faW5zZXJ0KF9CYXNlX3B0ciBfX3gsIF9CYXNlX3B0ciBfX3ksIGNvbnN0IHZhbHVlX3R5cGUm
IF9fdik7CgogICAgICBfTGlua190eXBlCiAgICAgIF9NX2NvcHkoX0xpbmtfdHlwZSBfX3gsIF9M
aW5rX3R5cGUgX19wKTsKCiAgICAgIHZvaWQKICAgICAgX01fZXJhc2UoX0xpbmtfdHlwZSBfX3gp
OwoKICAgIHB1YmxpYzoKCiAgICAgIF9SYl90cmVlKCkKICAgICAgICA6IF9CYXNlKGFsbG9jYXRv
cl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZSgpCiAgICAgIHsgX01f
ZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogICAgICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19j
b21wKQogICAgICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVfY291bnQoMCks
IF9NX2tleV9jb21wYXJlKF9fY29tcCkKICAgICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0K
CiAgICAgIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsIGNvbnN0IGFsbG9jYXRvcl90
eXBlJiBfX2EpCiAgICAgICAgOiBfQmFzZShfX2EpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlf
Y29tcGFyZShfX2NvbXApCiAgICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogICAgICBf
UmJfdHJlZShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPiYgX194KQogICAgICAgIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSksIF9NX25vZGVf
Y291bnQoMCksCiAgICAgICAgICAgICAgICAgX01fa2V5X2NvbXBhcmUoX194Ll9NX2tleV9jb21w
YXJlKQogICAgICB7CiAgICAgICAgaWYgKF9feC5fTV9yb290KCkgPT0gMCkKICAgICAgICAgIF9N
X2VtcHR5X2luaXRpYWxpemUoKTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAg
IF9TX2NvbG9yKF9NX2hlYWRlcikgPSBfTV9yZWQ7CiAgICAgICAgICAgIF9NX3Jvb3QoKSA9IF9N
X2NvcHkoX194Ll9NX3Jvb3QoKSwgX01faGVhZGVyKTsKICAgICAgICAgICAgX01fbGVmdG1vc3Qo
KSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBf
U19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAgICAgICAgICB9CiAgICAgICAgX01fbm9kZV9jb3VudCA9
IF9feC5fTV9ub2RlX2NvdW50OwogICAgICB9CgogICAgICB+X1JiX3RyZWUoKSB7IGNsZWFyKCk7
IH0KCiAgICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
JgogICAgICBvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz4mIF9feCk7CgogICAgcHJpdmF0ZToKICAgICAgdm9pZCBfTV9lbXB0eV9p
bml0aWFsaXplKCkKICAgICAgewogICAgICAgIF9TX2NvbG9yKF9NX2hlYWRlcikgPSBfTV9yZWQ7
CgogICAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRl
cjsKICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgfQoKICAgIHB1Ymxp
YzoKCiAgICAgIF9Db21wYXJlCiAgICAgIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fa2V5
X2NvbXBhcmU7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkgeyByZXR1cm4gX01fbGVm
dG1vc3QoKTsgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBfTV9sZWZ0bW9zdCgpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlbmQoKSB7IHJldHVy
biBfTV9oZWFkZXI7IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIF9NX2hlYWRlcjsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4o
KSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yKGVuZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkgeyBy
ZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcgogICAgICByZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cihiZWdpbigpKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9N
X25vZGVfY291bnQgPT0gMDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHNpemUoKSBjb25zdCB7
IHJldHVybiBfTV9ub2RlX2NvdW50OyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUo
KSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CgogICAgICB2b2lkCiAgICAgIHN3YXAo
X1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9fdCkKICAg
ICAgewogICAgICAgIHN0ZDo6c3dhcChfTV9oZWFkZXIsIF9fdC5fTV9oZWFkZXIpOwogICAgICAg
IHN0ZDo6c3dhcChfTV9ub2RlX2NvdW50LCBfX3QuX01fbm9kZV9jb3VudCk7CiAgICAgICAgc3Rk
Ojpzd2FwKF9NX2tleV9jb21wYXJlLCBfX3QuX01fa2V5X2NvbXBhcmUpOwogICAgICB9CgoKICAg
ICAgcGFpcjxpdGVyYXRvcixib29sPgogICAgICBpbnNlcnRfdW5pcXVlKGNvbnN0IHZhbHVlX3R5
cGUmIF9feCk7CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnRfZXF1YWwoY29uc3QgdmFsdWVf
dHlwZSYgX194KTsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydF91bmlxdWUoaXRlcmF0b3Ig
X19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCiAgICAgIGl0ZXJhdG9yCiAgICAg
IGluc2VydF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gp
OwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIHZvaWQKICAg
ICAgaW5zZXJ0X3VuaXF1ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QpOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIHZv
aWQKICAgICAgaW5zZXJ0X2VxdWFsKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCk7CgogICAgICB2b2lkCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24p
OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpOwoKICAg
ICAgdm9pZAogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwoK
ICAgICAgdm9pZAogICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSogX19maXJzdCwgY29uc3Qga2V5
X3R5cGUqIF9fbGFzdCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFyKCkKICAgICAgewogICAgICAg
IGlmIChfTV9ub2RlX2NvdW50ICE9IDApCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX2VyYXNl
KF9NX3Jvb3QoKSk7CiAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAg
ICAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVh
ZGVyOwogICAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgICAgICAgIH0KICAgICAgfQoK
CiAgICAgIGl0ZXJhdG9yCiAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAgICBj
b25zdF9pdGVyYXRvcgogICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKICAg
ICAgc2l6ZV90eXBlCiAgICAgIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKICAg
ICAgaXRlcmF0b3IKICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAg
ICBjb25zdF9pdGVyYXRvcgogICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBj
b25zdDsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBf
X3gpOwoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5
cGUmIF9feCkgY29uc3Q7CgogICAgICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPgogICAgICBlcXVh
bF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAgIHBhaXI8Y29uc3RfaXRlcmF0b3Is
IGNvbnN0X2l0ZXJhdG9yPgogICAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBj
b25zdDsKCgogICAgICBib29sCiAgICAgIF9fcmJfdmVyaWZ5KCkgY29uc3Q7CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1
ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8
X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsKICAgICAg
cmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgIGVxdWFsKF9feC5iZWdp
bigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlw
ZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy
YXRvcjwoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz4mIF9feCwKICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgewogICAgICByZXR1cm4gbGV4aWNvZ3JhcGhp
Y2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAg
ICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxf
VmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuICEoX194
ID09IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlw
ZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX1JiX3RyZWU8X0tl
eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICBj
b25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195
KQogICAgeyByZXR1cm4gX195IDwgX194OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5
cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9D
b21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShj
b25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194
LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPiYgX195KQogIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAg
ICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxf
VmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICB7IHJldHVybiAhKF9feCA8
IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5h
bWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgIF9SYl90cmVlPF9LZXksX1ZhbCxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IF9feC5zd2FwKF9feSk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9m
VmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JgogICAgX1Ji
X3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgb3BlcmF0
b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gpCiAgICB7CiAgICAgIGlmICh0aGlzICE9ICZfX3gpCiAgICAgICAgewoKICAgICAgICAg
IGNsZWFyKCk7CiAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgICAgICAgIF9NX2tleV9j
b21wYXJlID0gX194Ll9NX2tleV9jb21wYXJlOwogICAgICAgICAgaWYgKF9feC5fTV9yb290KCkg
PT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgICAg
ICAgICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgICAgICAgICBfTV9yaWdodG1v
c3QoKSA9IF9NX2hlYWRlcjsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBfTV9o
ZWFkZXIpOwogICAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3Qo
KSk7CiAgICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7
CiAgICAgICAgICAgICAgX01fbm9kZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAg
ICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJf
dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAg
IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIF9N
X2luc2VydChfQmFzZV9wdHIgX194XywgX0Jhc2VfcHRyIF9feV8sIGNvbnN0IF9WYWwmIF9fdikK
ICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX194XzsKICAgICAgX0xp
bmtfdHlwZSBfX3kgPSAoX0xpbmtfdHlwZSkgX195XzsKICAgICAgX0xpbmtfdHlwZSBfX3o7Cgog
ICAgICBpZiAoX195ID09IF9NX2hlYWRlciB8fCBfX3ggIT0gMCB8fAogICAgICAgICAgX01fa2V5
X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX195KSkpCiAgICAgICAgewogICAg
ICAgICAgX196ID0gX01fY3JlYXRlX25vZGUoX192KTsKICAgICAgICAgIF9TX2xlZnQoX195KSA9
IF9fejsKCiAgICAgICAgICBpZiAoX195ID09IF9NX2hlYWRlcikKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIF9NX3Jvb3QoKSA9IF9fejsKICAgICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9
IF9fejsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX195ID09IF9NX2xlZnRtb3N0
KCkpCiAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfX3o7CiAgICAgICAgfQogICAgICBlbHNl
CiAgICAgICAgewogICAgICAgICAgX196ID0gX01fY3JlYXRlX25vZGUoX192KTsKICAgICAgICAg
IF9TX3JpZ2h0KF9feSkgPSBfX3o7CgogICAgICAgICAgaWYgKF9feSA9PSBfTV9yaWdodG1vc3Qo
KSkKICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfX3o7CiAgICAgICAgfQogICAgICBfU19w
YXJlbnQoX196KSA9IF9feTsKICAgICAgX1NfbGVmdChfX3opID0gMDsKICAgICAgX1NfcmlnaHQo
X196KSA9IDA7CiAgICAgIF9SYl90cmVlX3JlYmFsYW5jZShfX3osIF9NX2hlYWRlci0+X01fcGFy
ZW50KTsKICAgICAgKytfTV9ub2RlX2NvdW50OwogICAgICByZXR1cm4gaXRlcmF0b3IoX196KTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUg
X0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf
QWxsb2M+OjppdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz46OgogICAgaW5zZXJ0X2VxdWFsKGNvbnN0IF9WYWwmIF9fdikKICAgIHsKICAg
ICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01f
cm9vdCgpOwogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgewogICAgICAgICAgX195ID0g
X194OwogICAgICAgICAgX194ID0gX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBf
U19rZXkoX194KSkgPwogICAgICAgICAgICBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gpOwog
ICAgICAgIH0KICAgICAgcmV0dXJuIF9NX2luc2VydChfX3gsIF9feSwgX192KTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFs
dWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHBh
aXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz46Oml0ZXJhdG9yLAogICAgYm9vbD4KICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGluc2VydF91bmlxdWUoY29uc3QgX1ZhbCYgX192KQog
ICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBf
X3ggPSBfTV9yb290KCk7CiAgICAgIGJvb2wgX19jb21wID0gdHJ1ZTsKICAgICAgd2hpbGUgKF9f
eCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9feSA9IF9feDsKICAgICAgICAgIF9fY29tcCA9
IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkpOwogICAgICAg
ICAgX194ID0gX19jb21wID8gX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICAgICAgICB9
CiAgICAgIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9feSk7CiAgICAgIGlmIChfX2NvbXApCiAg
ICAgICAgaWYgKF9faiA9PSBiZWdpbigpKQogICAgICAgICAgcmV0dXJuIHBhaXI8aXRlcmF0b3Is
Ym9vbD4oX01faW5zZXJ0KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICAgICAgICBlbHNlCiAgICAg
ICAgICAtLV9fajsKICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfX2ouX01fbm9kZSks
IF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4o
X01faW5zZXJ0KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICAgICAgcmV0dXJuIHBhaXI8aXRlcmF0
b3IsYm9vbD4oX19qLCBmYWxzZSk7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0
eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBf
Q29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1Zh
bCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjppdGVyYXRvcgogICAgX1JiX3RyZWU8
X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+OjoKICAgIGluc2VydF91
bmlxdWUoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBp
ZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkKICAgICAgICB7Cgog
ICAgICAgICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgICAgICAgICBfTV9rZXlfY29tcGFyZShf
S2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkKICAgICAgICAg
ICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9k
ZSwgX192KTsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVl
KF9fdikuZmlyc3Q7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUg
PT0gX01faGVhZGVyKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nf
a2V5KF9NX3JpZ2h0bW9zdCgpKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICAgICAgcmV0
dXJuIF9NX2luc2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICAgICAgICB9CiAgICAg
IGVsc2UKICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247
CiAgICAgICAgICAtLV9fYmVmb3JlOwogICAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tl
eShfX2JlZm9yZS5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKQogICAgICAgICAgICAgICYm
IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSxfU19rZXkoX19wb3NpdGlvbi5fTV9u
b2RlKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUu
X01fbm9kZSkgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZv
cmUuX01fbm9kZSwgX192KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1
cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Yp
OwoKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0
X3VuaXF1ZShfX3YpLmZpcnN0OwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlw
ZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9L
ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgaW5zZXJ0X2Vx
dWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKICAgIHsKICAgICAgaWYg
KF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXItPl9NX2xlZnQpCiAgICAgICAgewoKICAg
ICAgICAgIGlmIChzaXplKCkgPiAwICYmCiAgICAgICAgICAgICAgIV9NX2tleV9jb21wYXJlKF9T
X2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgICAg
ICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2Rl
LCBfX3YpOwoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChf
X3YpOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hl
YWRlcikKICAgICAgICB7CgogICAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1
ZSgpKF9fdiksIF9TX2tleShfTV9yaWdodG1vc3QoKSkpKQogICAgICAgICAgICByZXR1cm4gX01f
aW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwogICAgICAgICAgZWxzZQogICAgICAgICAg
ICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg
ewogICAgICAgICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bvc2l0aW9uOwogICAgICAgICAgLS1f
X2JlZm9yZTsKICAgICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3Yp
LCBfU19rZXkoX19iZWZvcmUuX01fbm9kZSkpCiAgICAgICAgICAgICAgJiYgIV9NX2tleV9jb21w
YXJlKF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
aWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9NX25vZGUpID09IDApCiAgICAgICAgICAgICAgICByZXR1
cm4gX01faW5zZXJ0KDAsIF9fYmVmb3JlLl9NX25vZGUsIF9fdik7CiAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9f
cG9zaXRpb24uX01fbm9kZSwgX192KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogICAgICAgIH0KICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAg
ICAgICB0eXBlbmFtZSBfQ21wLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTxjbGFzcyBf
SUk+CiAgICAgIHZvaWQKICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+
OjoKICAgICAgaW5zZXJ0X2VxdWFsKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0KQogICAgICB7CiAg
ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICAgaW5z
ZXJ0X2VxdWFsKCpfX2ZpcnN0KTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0
eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9DbXAsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPGNsYXNzIF9JST4KICAgIHZvaWQKICAgIF9SYl90
cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPjo6CiAgICBpbnNlcnRfdW5pcXVlKF9JSSBf
X2ZpcnN0LCBfSUkgX19sYXN0KQogICAgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0
OyArK19fZmlyc3QpCiAgICAgICAgaW5zZXJ0X3VuaXF1ZSgqX19maXJzdCk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVl
LAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz46OmVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195
ID0KICAgICAgICAoX0xpbmtfdHlwZSkgX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9lcmFzZShfX3Bv
c2l0aW9uLl9NX25vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX01faGVhZGVyLT5fTV9wYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9sZWZ0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+X01fcmlnaHQp
OwogICAgICBkZXN0cm95X25vZGUoX195KTsKICAgICAgLS1fTV9ub2RlX2NvdW50OwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZW
YWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAg
dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46
OnNpemVfdHlwZQogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz46OmVyYXNlKGNvbnN0IF9LZXkmIF9feCkKICAgIHsKICAgICAgcGFpcjxpdGVyYXRvcixp
dGVyYXRvcj4gX19wID0gZXF1YWxfcmFuZ2UoX194KTsKICAgICAgc2l6ZV90eXBlIF9fbiA9IGRp
c3RhbmNlKF9fcC5maXJzdCwgX19wLnNlY29uZCk7CiAgICAgIGVyYXNlKF9fcC5maXJzdCwgX19w
LnNlY29uZCk7CiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9L
ZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAgdHlwZW5hbWUgX0Nv
bXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWws
IF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+OjpfTGlua190eXBlCiAgICBfUmJfdHJlZTxfS2V5LF9W
YWwsX0tvVixfQ29tcGFyZSxfQWxsb2M+OjoKICAgIF9NX2NvcHkoX0xpbmtfdHlwZSBfX3gsIF9M
aW5rX3R5cGUgX19wKQogICAgewoKICAgICAgX0xpbmtfdHlwZSBfX3RvcCA9IF9NX2Nsb25lX25v
ZGUoX194KTsKICAgICAgX190b3AtPl9NX3BhcmVudCA9IF9fcDsKCiAgICAgIHRyeQogICAgICAg
IHsKICAgICAgICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICAgICAgICBfX3RvcC0+X01fcmln
aHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9fdG9wKTsKICAgICAgICAgIF9fcCA9IF9fdG9w
OwogICAgICAgICAgX194ID0gX1NfbGVmdChfX3gpOwoKICAgICAgICAgIHdoaWxlIChfX3ggIT0g
MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9MaW5rX3R5cGUgX195ID0gX01fY2xvbmVf
bm9kZShfX3gpOwogICAgICAgICAgICAgIF9fcC0+X01fbGVmdCA9IF9feTsKICAgICAgICAgICAg
ICBfX3ktPl9NX3BhcmVudCA9IF9fcDsKICAgICAgICAgICAgICBpZiAoX194LT5fTV9yaWdodCkK
ICAgICAgICAgICAgICAgIF9feS0+X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9f
eSk7CiAgICAgICAgICAgICAgX19wID0gX195OwogICAgICAgICAgICAgIF9feCA9IF9TX2xlZnQo
X194KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsK
ICAgICAgICAgIF9NX2VyYXNlKF9fdG9wKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAg
ICAgcmV0dXJuIF9fdG9wOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFt
ZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFy
ZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Ol9NX2VyYXNlKF9MaW5rX3R5cGUgX194KQogICAgewoK
ICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9NX2VyYXNlKF9TX3Jp
Z2h0KF9feCkpOwogICAgICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfU19sZWZ0KF9feCk7CiAgICAg
ICAgICBkZXN0cm95X25vZGUoX194KTsKICAgICAgICAgIF9feCA9IF9feTsKICAgICAgICB9CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9L
ZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPjo6CiAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7
CiAgICAgIGlmIChfX2ZpcnN0ID09IGJlZ2luKCkgJiYgX19sYXN0ID09IGVuZCgpKQogICAgICAg
IGNsZWFyKCk7CiAgICAgIGVsc2UKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIGVy
YXNlKF9fZmlyc3QrKyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1l
IF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJl
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBlcmFzZShjb25zdCBfS2V5KiBfX2ZpcnN0LCBj
b25zdCBfS2V5KiBfX2xhc3QpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkK
ICAgICAgICBlcmFzZSgqX19maXJzdCsrKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tl
eSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5h
bWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXks
X1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAgX1JiX3RyZWU8
X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmZpbmQoY29uc3QgX0tleSYg
X19rKQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtf
dHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYg
KCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgICAgIF9feSA9IF9feCwg
X194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0
KF9feCk7CgogICAgICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOwogICAgICByZXR1cm4g
KF9faiA9PSBlbmQoKSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkp
KSA/CiAgICAgICAgZW5kKCkgOiBfX2o7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXks
IHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1l
IF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9W
YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKICAgIF9SYl90
cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGZpbmQoY29u
c3QgX0tleSYgX19rKSBjb25zdAogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRl
cjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgIHdoaWxlIChfX3ggIT0g
MCkKICAgICAgIHsKICAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19r
KSkKICAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CiAgICAgICB9CiAgICAgY29uc3RfaXRl
cmF0b3IgX19qID0gY29uc3RfaXRlcmF0b3IoX195KTsKICAgICByZXR1cm4gKF9faiA9PSBlbmQo
KSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/CiAgICAgICBl
bmQoKSA6IF9fajsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1Zh
bCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+OjpzaXplX3R5cGUKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGNvdW50KGNvbnN0IF9LZXkmIF9faykgY29u
c3QKICAgIHsKICAgICAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IF9fcCA9
IGVxdWFsX3JhbmdlKF9fayk7CiAgICAgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX3AuZmly
c3QsIF9fcC5zZWNvbmQpOwogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAg
ICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBf
UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBsb3dl
cl9ib3VuZChjb25zdCBfS2V5JiBfX2spCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01f
aGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChf
X3ggIT0gMCkKICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQog
ICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAg
ICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIHJldHVybiBpdGVyYXRvcihfX3kpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBf
S2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9j
PgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6CiAgICBsb3dlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0
CiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBl
IF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICBpZiAoIV9N
X2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICAgICAgX195ID0gX194LCBfX3gg
PSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQoX194
KTsKCiAgICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAg
ICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1Ji
X3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAg
ICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICB1
cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0g
X01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxl
IChfX3ggIT0gMCkKICAgICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkp
CiAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAg
ICAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9feSk7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l
IF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIHVwcGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykgY29u
c3QKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5
cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmIChf
TV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkKICAgICAgICAgIF9feSA9IF9feCwgX194
ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9f
eCk7CgogICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAg
ICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZQogICAg
cGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPjo6aXRlcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3I+CiAgICBfUmJfdHJlZTxfS2V5LF9W
YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBlcXVhbF9yYW5nZShjb25zdCBf
S2V5JiBfX2spCiAgICB7IHJldHVybiBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4obG93ZXJfYm91
bmQoX19rKSwgdXBwZXJfYm91bmQoX19rKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwg
dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFy
ZSwgdHlwZW5hbWUgX0FsbG9jPgogIGlubGluZQogIHBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tl
eSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNv
bnN0X2l0ZXJhdG9yPgogIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxs
b2M+CiAgOjplcXVhbF9yYW5nZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CiAgewogICAgcmV0dXJu
IHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9fayksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfYm91bmQo
X19rKSk7CiAgfQoKICBpbmxpbmUgaW50CiAgX19ibGFja19jb3VudChfUmJfdHJlZV9ub2RlX2Jh
c2UqIF9fbm9kZSwgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3Jvb3QpCiAgewogICAgaWYgKF9fbm9k
ZSA9PSAwKQogICAgICByZXR1cm4gMDsKICAgIGludCBfX3N1bSA9IDA7CiAgICBkbwogICAgICB7
CiAgICAgICAgaWYgKF9fbm9kZS0+X01fY29sb3IgPT0gX01fYmxhY2spCiAgICAgICAgICArK19f
c3VtOwogICAgICAgIGlmIChfX25vZGUgPT0gX19yb290KQogICAgICAgICAgYnJlYWs7CiAgICAg
ICAgX19ub2RlID0gX19ub2RlLT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgIHdoaWxlICgxKTsKICAg
IHJldHVybiBfX3N1bTsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9W
YWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBib29sCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPjo6X19yYl92ZXJpZnkoKSBjb25zdAogICAgewogICAgaWYgKF9N
X25vZGVfY291bnQgPT0gMCB8fCBiZWdpbigpID09IGVuZCgpKQogICAgICByZXR1cm4gX01fbm9k
ZV9jb3VudCA9PSAwICYmIGJlZ2luKCkgPT0gZW5kKCkgJiYKICAgICAgICBfTV9oZWFkZXItPl9N
X2xlZnQgPT0gX01faGVhZGVyICYmIF9NX2hlYWRlci0+X01fcmlnaHQgPT0gX01faGVhZGVyOwoK
ICAgIGludCBfX2xlbiA9IF9fYmxhY2tfY291bnQoX01fbGVmdG1vc3QoKSwgX01fcm9vdCgpKTsK
ICAgIGZvciAoY29uc3RfaXRlcmF0b3IgX19pdCA9IGJlZ2luKCk7IF9faXQgIT0gZW5kKCk7ICsr
X19pdCkKICAgICAgewogICAgICAgIF9MaW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9faXQu
X01fbm9kZTsKICAgICAgICBfTGlua190eXBlIF9fTCA9IF9TX2xlZnQoX194KTsKICAgICAgICBf
TGlua190eXBlIF9fUiA9IF9TX3JpZ2h0KF9feCk7CgogICAgICAgIGlmIChfX3gtPl9NX2NvbG9y
ID09IF9NX3JlZCkKICAgICAgICAgIGlmICgoX19MICYmIF9fTC0+X01fY29sb3IgPT0gX01fcmVk
KQogICAgICAgICAgICAgIHx8IChfX1IgJiYgX19SLT5fTV9jb2xvciA9PSBfTV9yZWQpKQogICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIGlmIChfX0wgJiYgX01fa2V5X2NvbXBhcmUo
X1Nfa2V5KF9feCksIF9TX2tleShfX0wpKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICBpZiAoX19SICYmIF9NX2tleV9jb21wYXJlKF9TX2tleShfX1IpLCBfU19rZXkoX194KSkpCiAg
ICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIGlmICghX19MICYmICFfX1IgJiYgX19ibGFj
a19jb3VudChfX3gsIF9NX3Jvb3QoKSkgIT0gX19sZW4pCiAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgIH0KCiAgICBpZiAoX01fbGVmdG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9T
X21pbmltdW0oX01fcm9vdCgpKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKF9NX3JpZ2h0
bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfTV9yb290KCkpKQogICAg
ICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQojIDY3ICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvbWFwIiAyIDMKIyAxICIvc3BhY2Uvc25iL3Vzci9s
b2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDEgMwojIDY2ICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKbmFtZXNwYWNlIHN0
ZAp7CiMgODkgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9t
YXAuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxs
b2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KICAgIGNsYXNzIG1hcAogIHsKCiAgIAog
ICAKCiAgcHVibGljOgogICAgdHlwZWRlZiBfS2V5IGtleV90eXBlOwogICAgdHlwZWRlZiBfVHAg
bWFwcGVkX3R5cGU7CiAgICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tleSwgX1RwPiB2YWx1ZV90eXBl
OwogICAgdHlwZWRlZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAgICBjbGFzcyB2YWx1ZV9jb21w
YXJlCiAgICAgIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBl
LCBib29sPgogICAgICB7CiAgICAgICAgZnJpZW5kIGNsYXNzIG1hcDxfS2V5LF9UcCxfQ29tcGFy
ZSxfQWxsb2M+OwogICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgX0NvbXBhcmUgY29tcDsKICAgICAg
ICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBjb21wKF9fYykge30KICAgICAgcHVibGlj
OgogICAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZh
bHVlX3R5cGUmIF9feSkgY29uc3QKICAgICAgICB7IHJldHVybiBjb21wKF9feC5maXJzdCwgX195
LmZpcnN0KTsgfQogICAgICB9OwoKICBwcml2YXRlOgoKICAgIHR5cGVkZWYgX1JiX3RyZWU8a2V5
X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgIF9TZWxlY3Qxc3Q8dmFsdWVf
dHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKCiAgICBfUmVwX3R5cGUgX01f
dDsKCiAgcHVibGljOgoKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9y
X3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmVm
ZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9y
ZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6
Oml0ZXJhdG9yIGl0ZXJhdG9yOwogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0
X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6
OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6ZGlm
ZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29u
c3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6
OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUg
X1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7
CiMgMTQ0ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFw
LmgiIDMKICAgIG1hcCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7IH0K
CgoKCgogICAgZXhwbGljaXQKICAgIG1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wLCBjb25zdCBh
bGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfTV90KF9fY29t
cCwgX19hKSB7IH0KIyAxNjEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9i
aXRzL3N0bF9tYXAuaCIgMwogICAgbWFwKGNvbnN0IG1hcCYgX194KQogICAgICA6IF9NX3QoX194
Ll9NX3QpIHsgfQojIDE3MyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvc3RsX21hcC5oIiAzCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAg
ICAgIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAg
ICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgICB7IF9NX3QuaW5z
ZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiMgMTg5ICIvc3BhY2Uvc25iL3Vzci9sb2Nh
bC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1
dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsIGNvbnN0
IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9NX3QoX19j
b21wLCBfX2EpCiAgICAgIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0K
IyAyMTEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAu
aCIgMwogICAgbWFwJgogICAgb3BlcmF0b3I9KGNvbnN0IG1hcCYgX194KQogICAgewogICAgICBf
TV90ID0gX194Ll9NX3Q7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogICAgYWxsb2NhdG9y
X3R5cGUKICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV90LmdldF9hbGxvY2F0
b3IoKTsgfQoKCgoKCgogICAgaXRlcmF0b3IKICAgIGJlZ2luKCkgeyByZXR1cm4gX01fdC5iZWdp
bigpOyB9CgoKCgoKCiAgICBjb25zdF9pdGVyYXRvcgogICAgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBfTV90LmJlZ2luKCk7IH0KCgoKCgogICAgaXRlcmF0b3IKICAgIGVuZCgpIHsgcmV0dXJuIF9N
X3QuZW5kKCk7IH0KCgoKCgoKICAgIGNvbnN0X2l0ZXJhdG9yCiAgICBlbmQoKSBjb25zdCB7IHJl
dHVybiBfTV90LmVuZCgpOyB9CgoKCgoKICAgIHJldmVyc2VfaXRlcmF0b3IKICAgIHJiZWdpbigp
IHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KCgoKCgoKICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IKICAgIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KCgoKCgoKICAg
IHJldmVyc2VfaXRlcmF0b3IKICAgIHJlbmQoKSB7IHJldHVybiBfTV90LnJlbmQoKTsgfQoKCgoK
CgogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9N
X3QucmVuZCgpOyB9CgoKCiAgICBib29sCiAgICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu
ZW1wdHkoKTsgfQoKCiAgICBzaXplX3R5cGUKICAgIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90
LnNpemUoKTsgfQoKCiAgICBzaXplX3R5cGUKICAgIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4g
X01fdC5tYXhfc2l6ZSgpOyB9CiMgMzEwICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIG1hcHBlZF90eXBlJgogICAgb3BlcmF0b3JbXShj
b25zdCBrZXlfdHlwZSYgX19rKQogICAgewoKICAgICAKCiAgICAgIGl0ZXJhdG9yIF9faSA9IGxv
d2VyX2JvdW5kKF9fayk7CgogICAgICBpZiAoX19pID09IGVuZCgpIHx8IGtleV9jb21wKCkoX19r
LCAoKl9faSkuZmlyc3QpKQogICAgICAgIF9faSA9IGluc2VydChfX2ksIHZhbHVlX3R5cGUoX19r
LCBtYXBwZWRfdHlwZSgpKSk7CiAgICAgIHJldHVybiAoKl9faSkuc2Vjb25kOwogICAgfQojIDMz
OCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAz
CiAgICBwYWlyPGl0ZXJhdG9yLGJvb2w+CiAgICBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194
KQogICAgeyByZXR1cm4gX01fdC5pbnNlcnRfdW5pcXVlKF9feCk7IH0KIyAzNjIgIi9zcGFjZS9z
bmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogICAgaXRlcmF0
b3IKICAgIGluc2VydChpdGVyYXRvciBwb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQog
ICAgeyByZXR1cm4gX01fdC5pbnNlcnRfdW5pcXVlKHBvc2l0aW9uLCBfX3gpOyB9CiMgMzc0ICIv
c3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAgICBpbnNl
cnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICB7
IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiMgMzg4ICIvc3BhY2Uvc25i
L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIHZvaWQKICAg
IGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQoj
IDQwMiAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5o
IiAzCiAgICBzaXplX3R5cGUKICAgIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJu
IF9NX3QuZXJhc2UoX194KTsgfQojIDQxNSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9j
KysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICB2b2lkCiAgICBlcmFzZShpdGVyYXRvciBfX2Zp
cnN0LCBpdGVyYXRvciBfX2xhc3QpIHsgX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiMg
NDI5ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgi
IDMKICAgIHZvaWQKICAgIHN3YXAobWFwJiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQoK
CgoKCgoKICAgIHZvaWQKICAgIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KCgoKCgogICAga2V5
X2NvbXBhcmUKICAgIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9
CgoKCgoKICAgIHZhbHVlX2NvbXBhcmUKICAgIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJldHVybiB2
YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KIyA0NjcgIi9zcGFjZS9zbmIvdXNyL2xv
Y2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogICAgaXRlcmF0b3IKICAgIGZp
bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KIyA0ODEg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwog
ICAgY29uc3RfaXRlcmF0b3IKICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyBy
ZXR1cm4gX01fdC5maW5kKF9feCk7IH0KIyA0OTIgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1
ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogICAgc2l6ZV90eXBlCiAgICBjb3VudChjb25z
dCBrZXlfdHlwZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gX01fdC5maW5kKF9feCkgPT0gX01f
dC5lbmQoKSA/IDAgOiAxOyB9CiMgNTA3ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIGl0ZXJhdG9yCiAgICBsb3dlcl9ib3VuZChjb25z
dCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KIyA1MjEg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwog
ICAgY29uc3RfaXRlcmF0b3IKICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv
bnN0IHsgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQojIDUzMSAiL3NwYWNlL3NuYi91
c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICBpdGVyYXRvcgog
ICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC51cHBlcl9i
b3VuZChfX3gpOyB9CiMgNTQyICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9zdGxfbWFwLmgiIDMKICAgIGNvbnN0X2l0ZXJhdG9yCiAgICB1cHBlcl9ib3VuZChjb25z
dCBrZXlfdHlwZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gp
OyB9CiMgNTYxICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf
bWFwLmgiIDMKICAgIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+CiAgICBlcXVhbF9yYW5nZShjb25z
dCBrZXlfdHlwZSYgX194KQogICAgeyByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOyB9CiMg
NTgwICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgi
IDMKICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+CiAgICBlcXVhbF9yYW5n
ZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gX01fdC5lcXVhbF9yYW5n
ZShfX3gpOyB9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LMSwgdHlwZW5hbWUgX1QxLCB0eXBl
bmFtZSBfQzEsIHR5cGVuYW1lIF9BMT4KICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0
IG1hcDxfSzEsX1QxLF9DMSxfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG1hcDxfSzEsX1QxLF9DMSxfQTE+Jik7CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0sxLCB0eXBl
bmFtZSBfVDEsIHR5cGVuYW1lIF9DMSwgdHlwZW5hbWUgX0ExPgogICAgZnJpZW5kIGJvb2wgb3Bl
cmF0b3I8IChjb25zdCBtYXA8X0sxLF9UMSxfQzEsX0ExPiYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG1hcDxfSzEsX1QxLF9DMSxfQTE+Jik7CiAgfTsKIyA2MDMgIi9zcGFjZS9z
bmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogIHRlbXBsYXRl
IDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBtYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9N
X3Q7IH0KIyA2MjAgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF9tYXAuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVu
YW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3I8KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg
ICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJu
IF9feC5fTV90IDwgX195Ll9NX3Q7IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBl
bmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3IhPShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg
X194LAogICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg
X195KQogICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1l
IF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUs
X0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9CgoKICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgbWFwPF9LZXksX1RwLF9D
b21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9D
b21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKCiAgdGVt
cGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IG1hcDxf
S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IG1hcDxf
S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7
IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D
b21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChtYXA8X0tl
eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX195KQogICAgeyBfX3guc3dhcChfX3kpOyB9Cn0KIyA2OCAiL3NwYWNlL3NuYi91c3IvbG9j
YWwvaW5jbHVkZS9jKysvMy4zL21hcCIgMiAzCiMgMSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5j
bHVkZS9jKysvMy4zL2JpdHMvc3RsX211bHRpbWFwLmgiIDEgMwojIDY2ICIvc3BhY2Uvc25iL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwpuYW1lc3BhY2Ug
c3RkCnsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCiAgICAgICAg
ICAgIHR5cGVuYW1lIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgICAgdHlwZW5hbWUg
X0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KICBjbGFzcyBtdWx0
aW1hcDsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg
X0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSk7
CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21w
YXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRp
bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKIyAxMDQg
Ii9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5o
IiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Nv
bXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIG11bHRpbWFwCiAgewoKICAgCiAgIAoK
ICBwdWJsaWM6CiAgICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgICB0eXBlZGVmIF9UcCBtYXBw
ZWRfdHlwZTsKICAgIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7CiAg
ICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwoKICAgIGNsYXNzIHZhbHVlX2NvbXBhcmUK
ICAgICAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJv
b2w+CiAgICAgIHsKICAgICAgICBmcmllbmQgY2xhc3MgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBh
cmUsX0FsbG9jPjsKICAgICAgcHJvdGVjdGVkOgogICAgICAgIF9Db21wYXJlIGNvbXA7CiAgICAg
ICAgdmFsdWVfY29tcGFyZShfQ29tcGFyZSBfX2MpIDogY29tcChfX2MpIHt9CiAgICAgIHB1Ymxp
YzoKICAgICAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBjb25zdCB2
YWx1ZV90eXBlJiBfX3kpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gY29tcChfX3guZmlyc3QsIF9f
eS5maXJzdCk7IH0KICAgIH07CgogIHByaXZhdGU6CgogICAgdHlwZWRlZiBfUmJfdHJlZTxrZXlf
dHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgICBfU2VsZWN0MXN0PHZhbHVlX3R5
cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CgogICAgX1JlcF90eXBlIF9NX3Q7
CgogIHB1YmxpYzoKCgogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFsbG9jYXRvcl90
eXBlIGFsbG9jYXRvcl90eXBlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJlZmVy
ZW5jZSByZWZlcmVuY2U7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVm
ZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpp
dGVyYXRvciBpdGVyYXRvcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9p
dGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpz
aXplX3R5cGUgc2l6ZV90eXBlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZl
cmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlw
ZTo6cG9pbnRlciBwb2ludGVyOwogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0
X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpy
ZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwoK
CgoKCgoKICAgIG11bHRpbWFwKCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkp
IHsgfQoKCgoKCiAgICBleHBsaWNpdAogICAgbXVsdGltYXAoY29uc3QgX0NvbXBhcmUmIF9fY29t
cCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDog
X01fdChfX2NvbXAsIF9fYSkgeyB9CiMgMTc0ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgbXVsdGltYXAoY29uc3QgbXVsdGlt
YXAmIF9feCkKICAgICAgOiBfTV90KF9feC5fTV90KSB7IH0KIyAxODYgIi9zcGFjZS9zbmIvdXNy
L2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICA6IF9NX3QoX0NvbXBhcmUo
KSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgICB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3Qs
IF9fbGFzdCk7IH0KIyAyMDIgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9i
aXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcmF0
b3I+CiAgICAgIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAg
ICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAg
ICAgOiBfTV90KF9fY29tcCwgX19hKQogICAgICAgIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJz
dCwgX19sYXN0KTsgfQojIDIyNSAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICAgIG11bHRpbWFwJgogICAgb3BlcmF0b3I9KGNvbnN0
IG11bHRpbWFwJiBfX3gpCiAgICB7CiAgICAgIF9NX3QgPSBfX3guX01fdDsKICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKCiAgICBhbGxvY2F0b3JfdHlwZQogICAgZ2V0X2FsbG9jYXRvcigpIGNv
bnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgoKCgoKCiAgICBpdGVyYXRvcgog
ICAgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KCgoKCgoKICAgIGNvbnN0X2l0ZXJh
dG9yCiAgICBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQoKCgoKCiAgICBp
dGVyYXRvcgogICAgZW5kKCkgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCgogICAgY29uc3Rf
aXRlcmF0b3IKICAgIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgoKICAg
IHJldmVyc2VfaXRlcmF0b3IKICAgIHJiZWdpbigpIHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7IH0K
CgoKCgoKICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgIHJiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIF9NX3QucmJlZ2luKCk7IH0KCgoKCgoKICAgIHJldmVyc2VfaXRlcmF0b3IKICAgIHJlbmQo
KSB7IHJldHVybiBfTV90LnJlbmQoKTsgfQoKCgoKCgogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cgogICAgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CgoKCiAgICBib29sCiAg
ICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQoKCiAgICBzaXplX3R5cGUK
ICAgIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsgfQoKCiAgICBzaXplX3R5cGUK
ICAgIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CiMgMzI1ICIv
c3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIg
MwogICAgaXRlcmF0b3IKICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsgcmV0dXJu
IF9NX3QuaW5zZXJ0X2VxdWFsKF9feCk7IH0KIyAzNDggIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICBpdGVyYXRvcgogICAgaW5z
ZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgIHsgcmV0
dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9fcG9zaXRpb24sIF9feCk7IH0KIyAzNjAgIi9zcGFjZS9z
bmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIHZvaWQKICAgICAgaW5zZXJ0
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgeyBf
TV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CiMgMzc0ICIvc3BhY2Uvc25iL3Vz
ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgdm9pZAog
ICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgeyBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9
CiMgMzg4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVs
dGltYXAuaCIgMwogICAgc2l6ZV90eXBlCiAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KSB7
IHJldHVybiBfTV90LmVyYXNlKF9feCk7IH0KIyA0MDEgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICB2b2lkCiAgICBlcmFzZShp
dGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsgX01fdC5lcmFzZShfX2ZpcnN0LCBf
X2xhc3QpOyB9CiMgNDE1ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjMvYml0
cy9zdGxfbXVsdGltYXAuaCIgMwogICAgdm9pZAogICAgc3dhcChtdWx0aW1hcCYgX194KSB7IF9N
X3Quc3dhcChfX3guX01fdCk7IH0KCgoKCgoKCiAgICB2b2lkCiAgICBjbGVhcigpIHsgX01fdC5j
bGVhcigpOyB9CgoKCgoKCiAgICBrZXlfY29tcGFyZQogICAga2V5X2NvbXAoKSBjb25zdCB7IHJl
dHVybiBfTV90LmtleV9jb21wKCk7IH0KCgoKCgogICAgdmFsdWVfY29tcGFyZQogICAgdmFsdWVf
Y29tcCgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlX2NvbXBhcmUoX01fdC5rZXlfY29tcCgpKTsgfQoj
IDQ1NCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX211bHRp
bWFwLmgiIDMKICAgIGl0ZXJhdG9yCiAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0
dXJuIF9NX3QuZmluZChfX3gpOyB9CiMgNDY4ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgY29uc3RfaXRlcmF0b3IKICAgIGZp
bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0K
CgoKCgoKICAgIHNpemVfdHlwZQogICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg
eyByZXR1cm4gX01fdC5jb3VudChfX3gpOyB9CiMgNDkwICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9p
bmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgaXRlcmF0b3IKICAgIGxv
d2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQo
X194KTsgfQojIDUwNCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4zL2JpdHMv
c3RsX211bHRpbWFwLmgiIDMKICAgIGNvbnN0X2l0ZXJhdG9yCiAgICBsb3dlcl9ib3VuZChjb25z
dCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0K
CgoKCgoKICAgIGl0ZXJhdG9yCiAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7
IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KCgoKCgoKCiAgICBjb25zdF9pdGVyYXRv
cgogICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01f
dC51cHBlcl9ib3VuZChfX3gpOyB9CiMgNTM3ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNsdWRl
L2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgcGFpcjxpdGVyYXRvcixpdGVyYXRv
cj4KICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZXF1
YWxfcmFuZ2UoX194KTsgfQojIDU1MyAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3Rf
aXRlcmF0b3I+CiAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJl
dHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0sx
LCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9DMSwgdHlwZW5hbWUgX0ExPgogICAgZnJpZW5kIGJv
b2wgb3BlcmF0b3I9PSAoY29uc3QgbXVsdGltYXA8X0sxLF9UMSxfQzEsX0ExPiYsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfSzEsX1QxLF9DMSxfQTE+Jik7CiAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0sxLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9DMSwgdHlw
ZW5hbWUgX0ExPgogICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChjb25zdCBtdWx0aW1hcDxfSzEs
X1QxLF9DMSxfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8
X0sxLF9UMSxfQzEsX0ExPiYpOwogIH07CiMgNTc1ICIvc3BhY2Uvc25iL3Vzci9sb2NhbC9pbmNs
dWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBf
S2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29t
cGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1Rw
LF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsKICAgICAgcmV0dXJuIF9feC5fTV90ID09IF9f
eS5fTV90OwogICAgfQojIDU5NCAiL3NwYWNlL3NuYi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4z
L2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5h
bWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPChjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0Fs
bG9jPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsgfQoKCiAgdGVtcGxh
dGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IG11bHRpbWFw
PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgbXVs
dGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3gg
PT0gX195KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlw
ZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy
YXRvcj4oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg
ICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkK
ICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBh
cmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgoKICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgbXVsdGltYXA8
X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBtdWx0
aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8
IF9feSk7IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVu
YW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcCht
dWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgIG11bHRpbWFw
PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAoX195KTsgfQp9
CiMgNjkgIi9zcGFjZS9zbmIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMy9tYXAiIDIgMwojIDUy
ICIuLi8uLi9pbmNsdWRlL3FtYXAuaCIgMgoKCgoKc3RydWN0IFFNYXBOb2RlQmFzZQp7CiAgICBl
bnVtIENvbG9yIHsgUmVkLCBCbGFjayB9OwoKICAgIFFNYXBOb2RlQmFzZSogbGVmdDsKICAgIFFN
YXBOb2RlQmFzZSogcmlnaHQ7CiAgICBRTWFwTm9kZUJhc2UqIHBhcmVudDsKCiAgICBDb2xvciBj
b2xvcjsKCiAgICBRTWFwTm9kZUJhc2UqIG1pbmltdW0oKSB7CiAgICAgICAgUU1hcE5vZGVCYXNl
KiB4ID0gdGhpczsKICAgICAgICB3aGlsZSAoIHgtPmxlZnQgKQogICAgICAgICAgICB4ID0geC0+
bGVmdDsKICAgICAgICByZXR1cm4geDsKICAgIH0KCiAgICBRTWFwTm9kZUJhc2UqIG1heGltdW0o
KSB7CiAgICAgICAgUU1hcE5vZGVCYXNlKiB4ID0gdGhpczsKICAgICAgICB3aGlsZSAoIHgtPnJp
Z2h0ICkKICAgICAgICAgICAgeCA9IHgtPnJpZ2h0OwogICAgICAgIHJldHVybiB4OwogICAgfQp9
OwoKCnRlbXBsYXRlIDxjbGFzcyBLLCBjbGFzcyBUPgpzdHJ1Y3QgUU1hcE5vZGUgOiBwdWJsaWMg
UU1hcE5vZGVCYXNlCnsKICAgIFFNYXBOb2RlKCBjb25zdCBLJiBfa2V5LCBjb25zdCBUJiBfZGF0
YSApIHsgZGF0YSA9IF9kYXRhOyBrZXkgPSBfa2V5OyB9CiAgICBRTWFwTm9kZSggY29uc3QgSyYg
X2tleSApIHsga2V5ID0gX2tleTsgfQogICAgUU1hcE5vZGUoIGNvbnN0IFFNYXBOb2RlPEssVD4m
IF9uICkgeyBrZXkgPSBfbi5rZXk7IGRhdGEgPSBfbi5kYXRhOyB9CiAgICBRTWFwTm9kZSgpIHsg
fQogICAgVCBkYXRhOwogICAgSyBrZXk7Cn07CgoKdGVtcGxhdGU8Y2xhc3MgSywgY2xhc3MgVD4K
Y2xhc3MgUU1hcEl0ZXJhdG9yCnsKIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgUU1hcE5vZGU8IEss
IFQgPiogTm9kZVB0cjsKCiAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CgogICAgdHlw
ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKCgogICAgdHlwZWRlZiBUKiBwb2ludGVy
OwogICAgdHlwZWRlZiBUJiByZWZlcmVuY2U7CgoKCgogICAgUU1hcE5vZGU8SyxUPiogbm9kZTsK
CgoKCiAgICBRTWFwSXRlcmF0b3IoKSA6IG5vZGUoIDAgKSB7fQogICAgUU1hcEl0ZXJhdG9yKCBR
TWFwTm9kZTxLLFQ+KiBwICkgOiBub2RlKCBwICkge30KICAgIFFNYXBJdGVyYXRvciggY29uc3Qg
UU1hcEl0ZXJhdG9yPEssVD4mIGl0ICkgOiBub2RlKCBpdC5ub2RlICkge30KCiAgICBib29sIG9w
ZXJhdG9yPT0oIGNvbnN0IFFNYXBJdGVyYXRvcjxLLFQ+JiBpdCApIGNvbnN0IHsgcmV0dXJuIG5v
ZGUgPT0gaXQubm9kZTsgfQogICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBRTWFwSXRlcmF0b3I8
SyxUPiYgaXQgKSBjb25zdCB7IHJldHVybiBub2RlICE9IGl0Lm5vZGU7IH0KICAgIFQmIG9wZXJh
dG9yKigpIHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KICAgIGNvbnN0IFQmIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KCgoKICAgIGNvbnN0IEsmIGtleSgpIGNvbnN0IHsg
cmV0dXJuIG5vZGUtPmtleTsgfQogICAgVCYgZGF0YSgpIHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0K
ICAgIGNvbnN0IFQmIGRhdGEoKSBjb25zdCB7IHJldHVybiBub2RlLT5kYXRhOyB9Cgpwcml2YXRl
OgogICAgaW50IGluYygpOwogICAgaW50IGRlYygpOwoKcHVibGljOgogICAgUU1hcEl0ZXJhdG9y
PEssVD4mIG9wZXJhdG9yKysoKSB7CiAgICAgICAgaW5jKCk7CiAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICAgIFFNYXBJdGVyYXRvcjxLLFQ+IG9wZXJhdG9yKysoaW50KSB7CiAgICAgICAg
UU1hcEl0ZXJhdG9yPEssVD4gdG1wID0gKnRoaXM7CiAgICAgICAgaW5jKCk7CiAgICAgICAgcmV0
dXJuIHRtcDsKICAgIH0KCiAgICBRTWFwSXRlcmF0b3I8SyxUPiYgb3BlcmF0b3ItLSgpIHsKICAg
ICAgICBkZWMoKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgUU1hcEl0ZXJhdG9y
PEssVD4gb3BlcmF0b3ItLShpbnQpIHsKICAgICAgICBRTWFwSXRlcmF0b3I8SyxUPiB0bXAgPSAq
dGhpczsKICAgICAgICBkZWMoKTsKICAgICAgICByZXR1cm4gdG1wOwogICAgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIEssIGNsYXNzIFQ+CiBpbnQgUU1hcEl0ZXJhdG9yPEssVD46OmluYygpCnsKICAg
IFFNYXBOb2RlQmFzZSogdG1wID0gbm9kZTsKICAgIGlmICggdG1wLT5yaWdodCApIHsKICAgICAg
ICB0bXAgPSB0bXAtPnJpZ2h0OwogICAgICAgIHdoaWxlICggdG1wLT5sZWZ0ICkKICAgICAgICAg
ICAgdG1wID0gdG1wLT5sZWZ0OwogICAgfSBlbHNlIHsKICAgICAgICBRTWFwTm9kZUJhc2UqIHkg
PSB0bXAtPnBhcmVudDsKICAgICAgICB3aGlsZSAodG1wID09IHktPnJpZ2h0KSB7CiAgICAgICAg
ICAgIHRtcCA9IHk7CiAgICAgICAgICAgIHkgPSB5LT5wYXJlbnQ7CiAgICAgICAgfQogICAgICAg
IGlmICh0bXAtPnJpZ2h0ICE9IHkpCiAgICAgICAgICAgIHRtcCA9IHk7CiAgICB9CiAgICBub2Rl
ID0gKE5vZGVQdHIpdG1wOwogICAgcmV0dXJuIDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBLLCBjbGFz
cyBUPgogaW50IFFNYXBJdGVyYXRvcjxLLFQ+OjpkZWMoKQp7CiAgICBRTWFwTm9kZUJhc2UqIHRt
cCA9IG5vZGU7CiAgICBpZiAodG1wLT5jb2xvciA9PSBRTWFwTm9kZUJhc2U6OlJlZCAmJgogICAg
ICAgIHRtcC0+cGFyZW50LT5wYXJlbnQgPT0gdG1wICkgewogICAgICAgIHRtcCA9IHRtcC0+cmln
aHQ7CiAgICB9IGVsc2UgaWYgKHRtcC0+bGVmdCAhPSAwKSB7CiAgICAgICAgUU1hcE5vZGVCYXNl
KiB5ID0gdG1wLT5sZWZ0OwogICAgICAgIHdoaWxlICggeS0+cmlnaHQgKQogICAgICAgICAgICB5
ID0geS0+cmlnaHQ7CiAgICAgICAgdG1wID0geTsKICAgIH0gZWxzZSB7CiAgICAgICAgUU1hcE5v
ZGVCYXNlKiB5ID0gdG1wLT5wYXJlbnQ7CiAgICAgICAgd2hpbGUgKHRtcCA9PSB5LT5sZWZ0KSB7
CiAgICAgICAgICAgIHRtcCA9IHk7CiAgICAgICAgICAgIHkgPSB5LT5wYXJlbnQ7CiAgICAgICAg
fQogICAgICAgIHRtcCA9IHk7CiAgICB9CiAgICBub2RlID0gKE5vZGVQdHIpdG1wOwogICAgcmV0
dXJuIDA7Cn0KCnRlbXBsYXRlPGNsYXNzIEssIGNsYXNzIFQ+CmNsYXNzIFFNYXBDb25zdEl0ZXJh
dG9yCnsKIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgUU1hcE5vZGU8IEssIFQgPiogTm9kZVB0cjsK
CiAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0
ZWdvcnk7CgogICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CgogICAgdHlwZWRlZiBwdHJkaWZmX3Qg
ZGlmZmVyZW5jZV90eXBlOwoKCgogICAgdHlwZWRlZiBjb25zdCBUKiBwb2ludGVyOwogICAgdHlw
ZWRlZiBjb25zdCBUJiByZWZlcmVuY2U7CgoKCgoKICAgIFFNYXBOb2RlPEssVD4qIG5vZGU7CgoK
CgogICAgUU1hcENvbnN0SXRlcmF0b3IoKSA6IG5vZGUoIDAgKSB7fQogICAgUU1hcENvbnN0SXRl
cmF0b3IoIFFNYXBOb2RlPEssVD4qIHAgKSA6IG5vZGUoIHAgKSB7fQogICAgUU1hcENvbnN0SXRl
cmF0b3IoIGNvbnN0IFFNYXBDb25zdEl0ZXJhdG9yPEssVD4mIGl0ICkgOiBub2RlKCBpdC5ub2Rl
ICkge30KICAgIFFNYXBDb25zdEl0ZXJhdG9yKCBjb25zdCBRTWFwSXRlcmF0b3I8SyxUPiYgaXQg
KSA6IG5vZGUoIGl0Lm5vZGUgKSB7fQoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUU1hcENv
bnN0SXRlcmF0b3I8SyxUPiYgaXQgKSBjb25zdCB7IHJldHVybiBub2RlID09IGl0Lm5vZGU7IH0K
ICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUU1hcENvbnN0SXRlcmF0b3I8SyxUPiYgaXQgKSBj
b25zdCB7IHJldHVybiBub2RlICE9IGl0Lm5vZGU7IH0KICAgIGNvbnN0IFQmIG9wZXJhdG9yKigp
IGNvbnN0IHsgcmV0dXJuIG5vZGUtPmRhdGE7IH0KCgoKICAgIGNvbnN0IEsmIGtleSgpIGNvbnN0
IHsgcmV0dXJuIG5vZGUtPmtleTsgfQogICAgY29uc3QgVCYgZGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG5vZGUtPmRhdGE7IH0KCnByaXZhdGU6CiAgICBpbnQgaW5jKCk7CiAgICBpbnQgZGVjKCk7Cgpw
dWJsaWM6CiAgICBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+JiBvcGVyYXRvcisrKCkgewogICAgICAg
IGluYygpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICBRTWFwQ29uc3RJdGVyYXRv
cjxLLFQ+IG9wZXJhdG9yKysoaW50KSB7CiAgICAgICAgUU1hcENvbnN0SXRlcmF0b3I8SyxUPiB0
bXAgPSAqdGhpczsKICAgICAgICBpbmMoKTsKICAgICAgICByZXR1cm4gdG1wOwogICAgfQoKICAg
IFFNYXBDb25zdEl0ZXJhdG9yPEssVD4mIG9wZXJhdG9yLS0oKSB7CiAgICAgICAgZGVjKCk7CiAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIFFNYXBDb25zdEl0ZXJhdG9yPEssVD4gb3Bl
cmF0b3ItLShpbnQpIHsKICAgICAgICBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+IHRtcCA9ICp0aGlz
OwogICAgICAgIGRlYygpOwogICAgICAgIHJldHVybiB0bXA7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgSywgY2xhc3MgVD4KIGludCBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+OjppbmMoKQp7CiAg
ICBRTWFwTm9kZUJhc2UqIHRtcCA9IG5vZGU7CiAgICBpZiAoIHRtcC0+cmlnaHQgKSB7CiAgICAg
ICAgdG1wID0gdG1wLT5yaWdodDsKICAgICAgICB3aGlsZSAoIHRtcC0+bGVmdCApCiAgICAgICAg
ICAgIHRtcCA9IHRtcC0+bGVmdDsKICAgIH0gZWxzZSB7CiAgICAgICAgUU1hcE5vZGVCYXNlKiB5
ID0gdG1wLT5wYXJlbnQ7CiAgICAgICAgd2hpbGUgKHRtcCA9PSB5LT5yaWdodCkgewogICAgICAg
ICAgICB0bXAgPSB5OwogICAgICAgICAgICB5ID0geS0+cGFyZW50OwogICAgICAgIH0KICAgICAg
ICBpZiAodG1wLT5yaWdodCAhPSB5KQogICAgICAgICAgICB0bXAgPSB5OwogICAgfQogICAgbm9k
ZSA9IChOb2RlUHRyKXRtcDsKICAgIHJldHVybiAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSywgY2xh
c3MgVD4KIGludCBRTWFwQ29uc3RJdGVyYXRvcjxLLFQ+OjpkZWMoKQp7CiAgICBRTWFwTm9kZUJh
c2UqIHRtcCA9IG5vZGU7CiAgICBpZiAodG1wLT5jb2xvciA9PSBRTWFwTm9kZUJhc2U6OlJlZCAm
JgogICAgICAgIHRtcC0+cGFyZW50LT5wYXJlbnQgPT0gdG1wICkgewogICAgICAgIHRtcCA9IHRt
cC0+cmlnaHQ7CiAgICB9IGVsc2UgaWYgKHRtcC0+bGVmdCAhPSAwKSB7CiAgICAgICAgUU1hcE5v
ZGVCYXNlKiB5ID0gdG1wLT5sZWZ0OwogICAgICAgIHdoaWxlICggeS0+cmlnaHQgKQogICAgICAg
ICAgICB5ID0geS0+cmlnaHQ7CiAgICAgICAgdG1wID0geTsKICAgIH0gZWxzZSB7CiAgICAgICAg
UU1hcE5vZGVCYXNlKiB5ID0gdG1wLT5wYXJlbnQ7CiAgICAgICAgd2hpbGUgKHRtcCA9PSB5LT5s
ZWZ0KSB7CiAgICAgICAgICAgIHRtcCA9IHk7CiAgICAgICAgICAgIHkgPSB5LT5wYXJlbnQ7CiAg
ICAgICAgfQogICAgICAgIHRtcCA9IHk7CiAgICB9CiAgICBub2RlID0gKE5vZGVQdHIpdG1wOwog
ICAgcmV0dXJuIDA7Cn0KCmNsYXNzIFFNYXBQcml2YXRlQmFzZSA6IHB1YmxpYyBRU2hhcmVkCnsK
cHVibGljOgogICAgUU1hcFByaXZhdGVCYXNlKCkgewogICAgICAgIG5vZGVfY291bnQgPSAwOwog
ICAgfQogICAgUU1hcFByaXZhdGVCYXNlKCBjb25zdCBRTWFwUHJpdmF0ZUJhc2UqIF9tYXApIHsK
ICAgICAgICBub2RlX2NvdW50ID0gX21hcC0+bm9kZV9jb3VudDsKICAgIH0KCgoKCiAgICB2b2lk
IHJvdGF0ZUxlZnQoIFFNYXBOb2RlQmFzZSogeCwgUU1hcE5vZGVCYXNlKiYgcm9vdCk7CiAgICB2
b2lkIHJvdGF0ZVJpZ2h0KCBRTWFwTm9kZUJhc2UqIHgsIFFNYXBOb2RlQmFzZSomIHJvb3QgKTsK
ICAgIHZvaWQgcmViYWxhbmNlKCBRTWFwTm9kZUJhc2UqIHgsIFFNYXBOb2RlQmFzZSomIHJvb3Qg
KTsKICAgIFFNYXBOb2RlQmFzZSogcmVtb3ZlQW5kUmViYWxhbmNlKCBRTWFwTm9kZUJhc2UqIHos
IFFNYXBOb2RlQmFzZSomIHJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUU1hcE5vZGVCYXNlKiYgbGVmdG1vc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUU1hcE5vZGVCYXNlKiYgcmlnaHRtb3N0ICk7CgoKCgogICAgaW50IG5vZGVfY291
bnQ7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KY2xhc3MgUU1hcFByaXZhdGUg
OiBwdWJsaWMgUU1hcFByaXZhdGVCYXNlCnsKcHVibGljOgoKCgogICAgdHlwZWRlZiBRTWFwSXRl
cmF0b3I8IEtleSwgVCA+IEl0ZXJhdG9yOwogICAgdHlwZWRlZiBRTWFwQ29uc3RJdGVyYXRvcjwg
S2V5LCBUID4gQ29uc3RJdGVyYXRvcjsKICAgIHR5cGVkZWYgUU1hcE5vZGU8IEtleSwgVCA+IE5v
ZGU7CiAgICB0eXBlZGVmIFFNYXBOb2RlPCBLZXksIFQgPiogTm9kZVB0cjsKCgoKCiAgICBRTWFw
UHJpdmF0ZSgpOwogICAgUU1hcFByaXZhdGUoIGNvbnN0IFFNYXBQcml2YXRlPCBLZXksIFQgPiog
X21hcCApOwogICAgflFNYXBQcml2YXRlKCkgeyBjbGVhcigpOyBkZWxldGUgaGVhZGVyOyB9Cgog
ICAgTm9kZVB0ciBjb3B5KCBOb2RlUHRyIHAgKTsKICAgIHZvaWQgY2xlYXIoKTsKICAgIHZvaWQg
Y2xlYXIoIE5vZGVQdHIgcCApOwoKICAgIEl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gSXRlcmF0
b3IoIChOb2RlUHRyKShoZWFkZXItPmxlZnQgKSApOyB9CiAgICBJdGVyYXRvciBlbmQoKSB7IHJl
dHVybiBJdGVyYXRvciggaGVhZGVyICk7IH0KICAgIENvbnN0SXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBDb25zdEl0ZXJhdG9yKCAoTm9kZVB0cikoaGVhZGVyLT5sZWZ0ICkgKTsgfQog
ICAgQ29uc3RJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBDb25zdEl0ZXJhdG9yKCBoZWFk
ZXIgKTsgfQoKICAgIENvbnN0SXRlcmF0b3IgZmluZChjb25zdCBLZXkmIGspIGNvbnN0OwoKICAg
IHZvaWQgcmVtb3ZlKCBJdGVyYXRvciBpdCApIHsKICAgICAgICBOb2RlUHRyIGRlbCA9IChOb2Rl
UHRyKSByZW1vdmVBbmRSZWJhbGFuY2UoIGl0Lm5vZGUsIGhlYWRlci0+cGFyZW50LCBoZWFkZXIt
PmxlZnQsIGhlYWRlci0+cmlnaHQgKTsKICAgICAgICBkZWxldGUgZGVsOwogICAgICAgIC0tbm9k
ZV9jb3VudDsKICAgIH0KIyA0MTMgIi4uLy4uL2luY2x1ZGUvcW1hcC5oIgogICAgSXRlcmF0b3Ig
aW5zZXJ0U2luZ2xlKCBjb25zdCBLZXkmIGsgKTsKICAgIEl0ZXJhdG9yIGluc2VydCggUU1hcE5v
ZGVCYXNlKiB4LCBRTWFwTm9kZUJhc2UqIHksIGNvbnN0IEtleSYgayApOwoKcHJvdGVjdGVkOgoK
CgogICAgY29uc3QgS2V5JiBrZXkoIFFNYXBOb2RlQmFzZSogYiApIGNvbnN0IHsgcmV0dXJuICgo
Tm9kZVB0ciliKS0+a2V5OyB9CgoKCgogICAgTm9kZVB0ciBoZWFkZXI7Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIEtleSwgY2xhc3MgVD4KIFFNYXBQcml2YXRlPEtleSxUPjo6UU1hcFByaXZhdGUoKSB7
CiAgICBoZWFkZXIgPSBuZXcgTm9kZTsKICAgIGhlYWRlci0+Y29sb3IgPSBRTWFwTm9kZUJhc2U6
OlJlZDsKICAgIGhlYWRlci0+cGFyZW50ID0gMDsKICAgIGhlYWRlci0+bGVmdCA9IGhlYWRlci0+
cmlnaHQgPSBoZWFkZXI7Cn0KdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3MgVD4KIFFNYXBQcml2
YXRlPEtleSxUPjo6UU1hcFByaXZhdGUoIGNvbnN0IFFNYXBQcml2YXRlPCBLZXksIFQgPiogX21h
cCApIDogUU1hcFByaXZhdGVCYXNlKCBfbWFwICkgewogICAgaGVhZGVyID0gbmV3IE5vZGU7CiAg
ICBoZWFkZXItPmNvbG9yID0gUU1hcE5vZGVCYXNlOjpSZWQ7CiAgICBpZiAoIF9tYXAtPmhlYWRl
ci0+cGFyZW50ID09IDAgKSB7CiAgICAgICAgaGVhZGVyLT5wYXJlbnQgPSAwOwogICAgICAgIGhl
YWRlci0+bGVmdCA9IGhlYWRlci0+cmlnaHQgPSBoZWFkZXI7CiAgICB9IGVsc2UgewogICAgICAg
IGhlYWRlci0+cGFyZW50ID0gY29weSggKE5vZGVQdHIpKF9tYXAtPmhlYWRlci0+cGFyZW50KSAp
OwogICAgICAgIGhlYWRlci0+cGFyZW50LT5wYXJlbnQgPSBoZWFkZXI7CiAgICAgICAgaGVhZGVy
LT5sZWZ0ID0gaGVhZGVyLT5wYXJlbnQtPm1pbmltdW0oKTsKICAgICAgICBoZWFkZXItPnJpZ2h0
ID0gaGVhZGVyLT5wYXJlbnQtPm1heGltdW0oKTsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIEtl
eSwgY2xhc3MgVD4KIHR5cGVuYW1lIFFNYXBQcml2YXRlPEtleSxUPjo6Tm9kZVB0ciBRTWFwUHJp
dmF0ZTxLZXksVD46OmNvcHkoIHR5cGVuYW1lIFFNYXBQcml2YXRlPEtleSxUPjo6Tm9kZVB0ciBw
ICkKewogICAgaWYgKCAhcCApCiAgICAgICAgcmV0dXJuIDA7CiAgICBOb2RlUHRyIG4gPSBuZXcg
Tm9kZSggKnAgKTsKICAgIG4tPmNvbG9yID0gcC0+Y29sb3I7CiAgICBpZiAoIHAtPmxlZnQgKSB7
CiAgICAgICAgbi0+bGVmdCA9IGNvcHkoIChOb2RlUHRyKShwLT5sZWZ0KSApOwogICAgICAgIG4t
PmxlZnQtPnBhcmVudCA9IG47CiAgICB9IGVsc2UgewogICAgICAgIG4tPmxlZnQgPSAwOwogICAg
fQogICAgaWYgKCBwLT5yaWdodCApIHsKICAgICAgICBuLT5yaWdodCA9IGNvcHkoIChOb2RlUHRy
KShwLT5yaWdodCkgKTsKICAgICAgICBuLT5yaWdodC0+cGFyZW50ID0gbjsKICAgIH0gZWxzZSB7
CiAgICAgICAgbi0+cmlnaHQgPSAwOwogICAgfQogICAgcmV0dXJuIG47Cn0KCnRlbXBsYXRlIDxj
bGFzcyBLZXksIGNsYXNzIFQ+CiB2b2lkIFFNYXBQcml2YXRlPEtleSxUPjo6Y2xlYXIoKQp7CiAg
ICBjbGVhciggKE5vZGVQdHIpKGhlYWRlci0+cGFyZW50KSApOwogICAgaGVhZGVyLT5jb2xvciA9
IFFNYXBOb2RlQmFzZTo6UmVkOwogICAgaGVhZGVyLT5wYXJlbnQgPSAwOwogICAgaGVhZGVyLT5s
ZWZ0ID0gaGVhZGVyLT5yaWdodCA9IGhlYWRlcjsKICAgIG5vZGVfY291bnQgPSAwOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgS2V5LCBjbGFzcyBUPgogdm9pZCBRTWFwUHJpdmF0ZTxLZXksVD46OmNsZWFy
KCB0eXBlbmFtZSBRTWFwUHJpdmF0ZTxLZXksVD46Ok5vZGVQdHIgcCApCnsKICAgIHdoaWxlICgg
cCAhPSAwICkgewogICAgICAgIGNsZWFyKCAoTm9kZVB0cilwLT5yaWdodCApOwogICAgICAgIE5v
ZGVQdHIgeSA9IChOb2RlUHRyKXAtPmxlZnQ7CiAgICAgICAgZGVsZXRlIHA7CiAgICAgICAgcCA9
IHk7CiAgICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBLZXksIGNsYXNzIFQ+CiB0eXBlbmFtZSBRTWFw
UHJpdmF0ZTxLZXksVD46OkNvbnN0SXRlcmF0b3IgUU1hcFByaXZhdGU8S2V5LFQ+OjpmaW5kKGNv
bnN0IEtleSYgaykgY29uc3QKewogICAgUU1hcE5vZGVCYXNlKiB5ID0gaGVhZGVyOwogICAgUU1h
cE5vZGVCYXNlKiB4ID0gaGVhZGVyLT5wYXJlbnQ7CgogICAgd2hpbGUgKCB4ICE9IDAgKSB7Cgog
ICAgICAgIGlmICggISgga2V5KHgpIDwgayApICkgewogICAgICAgICAgICB5ID0geDsKICAgICAg
ICAgICAgeCA9IHgtPmxlZnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgeCA9IHgtPnJp
Z2h0OwogICAgICAgIH0KICAgIH0KCgoKICAgIGlmICggeSA9PSBoZWFkZXIgfHwgayA8IGtleSh5
KSApCiAgICAgICAgcmV0dXJuIENvbnN0SXRlcmF0b3IoIGhlYWRlciApOwogICAgcmV0dXJuIENv
bnN0SXRlcmF0b3IoIChOb2RlUHRyKXkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEtleSwgY2xhc3Mg
VD4KIHR5cGVuYW1lIFFNYXBQcml2YXRlPEtleSxUPjo6SXRlcmF0b3IgUU1hcFByaXZhdGU8S2V5
LFQ+OjppbnNlcnRTaW5nbGUoIGNvbnN0IEtleSYgayApCnsKCiAgICBRTWFwTm9kZUJhc2UqIHkg
PSBoZWFkZXI7CiAgICBRTWFwTm9kZUJhc2UqIHggPSBoZWFkZXItPnBhcmVudDsKICAgIGJvb2wg
cmVzdWx0ID0gVFJVRTsKICAgIHdoaWxlICggeCAhPSAwICkgewogICAgICAgIHJlc3VsdCA9ICgg
ayA8IGtleSh4KSApOwogICAgICAgIHkgPSB4OwogICAgICAgIHggPSByZXN1bHQgPyB4LT5sZWZ0
IDogeC0+cmlnaHQ7CiAgICB9CgogICAgSXRlcmF0b3IgaiggKE5vZGVQdHIpeSApOwogICAgaWYg
KCByZXN1bHQgKSB7CgogICAgICAgIGlmICggaiA9PSBiZWdpbigpICkgewogICAgICAgICAgICBy
ZXR1cm4gaW5zZXJ0KHgsIHksIGsgKTsKICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgLS1q
OwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoIChqLm5vZGUtPmtleSkgPCBrICkKICAgICAgICBy
ZXR1cm4gaW5zZXJ0KHgsIHksIGsgKTsKCiAgICByZXR1cm4gajsKfQoKCnRlbXBsYXRlIDxjbGFz
cyBLZXksIGNsYXNzIFQ+CiB0eXBlbmFtZSBRTWFwUHJpdmF0ZTxLZXksVD46Okl0ZXJhdG9yIFFN
YXBQcml2YXRlPEtleSxUPjo6aW5zZXJ0KCBRTWFwTm9kZUJhc2UqIHgsIFFNYXBOb2RlQmFzZSog
eSwgY29uc3QgS2V5JiBrICkKewogICAgTm9kZVB0ciB6ID0gbmV3IE5vZGUoIGsgKTsKICAgIGlm
ICh5ID09IGhlYWRlciB8fCB4ICE9IDAgfHwgayA8IGtleSh5KSApIHsKICAgICAgICB5LT5sZWZ0
ID0gejsKICAgICAgICBpZiAoIHkgPT0gaGVhZGVyICkgewogICAgICAgICAgICBoZWFkZXItPnBh
cmVudCA9IHo7CiAgICAgICAgICAgIGhlYWRlci0+cmlnaHQgPSB6OwogICAgICAgIH0gZWxzZSBp
ZiAoIHkgPT0gaGVhZGVyLT5sZWZ0ICkKICAgICAgICAgICAgaGVhZGVyLT5sZWZ0ID0gejsKICAg
IH0gZWxzZSB7CiAgICAgICAgeS0+cmlnaHQgPSB6OwogICAgICAgIGlmICggeSA9PSBoZWFkZXIt
PnJpZ2h0ICkKICAgICAgICAgICAgaGVhZGVyLT5yaWdodCA9IHo7CiAgICB9CiAgICB6LT5wYXJl
bnQgPSB5OwogICAgei0+bGVmdCA9IDA7CiAgICB6LT5yaWdodCA9IDA7CiAgICByZWJhbGFuY2Uo
IHosIGhlYWRlci0+cGFyZW50ICk7CiAgICArK25vZGVfY291bnQ7CiAgICByZXR1cm4gSXRlcmF0
b3Ioeik7Cn0KIyA1ODYgIi4uLy4uL2luY2x1ZGUvcW1hcC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4g
Y2xhc3MgUURlZXBDb3B5OwoKdGVtcGxhdGU8Y2xhc3MgS2V5LCBjbGFzcyBUPgpjbGFzcyBRTWFw
CnsKcHVibGljOgoKCgogICAgdHlwZWRlZiBLZXkga2V5X3R5cGU7CiAgICB0eXBlZGVmIFQgbWFw
cGVkX3R5cGU7CiAgICB0eXBlZGVmIFFQYWlyPGNvbnN0IGtleV90eXBlLCBtYXBwZWRfdHlwZT4g
dmFsdWVfdHlwZTsKICAgIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICAgIHR5cGVkZWYg
Y29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICAgIHR5cGVkZWYgdmFsdWVfdHlwZSYg
cmVmZXJlbmNlOwogICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7
CgogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKCgogICAgdHlwZWRlZiBz
aXplX3Qgc2l6ZV90eXBlOwogICAgdHlwZWRlZiBRTWFwSXRlcmF0b3I8S2V5LFQ+IGl0ZXJhdG9y
OwogICAgdHlwZWRlZiBRTWFwQ29uc3RJdGVyYXRvcjxLZXksVD4gY29uc3RfaXRlcmF0b3I7CiAg
ICB0eXBlZGVmIFFQYWlyPGl0ZXJhdG9yLGJvb2w+IGluc2VydF9wYWlyOwoKICAgIHR5cGVkZWYg
UU1hcEl0ZXJhdG9yPCBLZXksIFQgPiBJdGVyYXRvcjsKICAgIHR5cGVkZWYgUU1hcENvbnN0SXRl
cmF0b3I8IEtleSwgVCA+IENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOwog
ICAgdHlwZWRlZiBRTWFwUHJpdmF0ZTwgS2V5LCBUID4gUHJpdjsKCgoKCiAgICBRTWFwKCkKICAg
IHsKICAgICAgICBzaCA9IG5ldyBRTWFwUHJpdmF0ZTwgS2V5LCBUID47CiAgICB9CiAgICBRTWFw
KCBjb25zdCBRTWFwPEtleSxUPiYgbSApCiAgICB7CiAgICAgICAgc2ggPSBtLnNoOyBzaC0+cmVm
KCk7CiAgICB9CgoKCgoKCiAgICBRTWFwKCBjb25zdCB0eXBlbmFtZSBzdGQ6Om1hcDxLZXksVD4m
IG0gKQogICAgewogICAgICAgIHNoID0gbmV3IFFNYXBQcml2YXRlPEtleSxUPjsKCgoKICAgICAg
ICBRTWFwQ29uc3RJdGVyYXRvcjxLZXksVD4gaXQgPSBtLmJlZ2luKCk7CgogICAgICAgIGZvciAo
IDsgaXQgIT0gbS5lbmQoKTsgKytpdCApIHsKICAgICAgICAgICAgdmFsdWVfdHlwZSBwKCAoKml0
KS5maXJzdCwgKCppdCkuc2Vjb25kICk7CiAgICAgICAgICAgIGluc2VydCggcCApOwogICAgICAg
IH0KICAgIH0KCiAgICB+UU1hcCgpCiAgICB7CiAgICAgICAgaWYgKCBzaC0+ZGVyZWYoKSApCiAg
ICAgICAgICAgIGRlbGV0ZSBzaDsKICAgIH0KICAgIFFNYXA8S2V5LFQ+JiBvcGVyYXRvcj0gKCBj
b25zdCBRTWFwPEtleSxUPiYgbSApOwoKICAgIFFNYXA8S2V5LFQ+JiBvcGVyYXRvcj0gKCBjb25z
dCB0eXBlbmFtZSBzdGQ6Om1hcDxLZXksVD4mIG0gKQogICAgewogICAgICAgIGNsZWFyKCk7CgoK
CiAgICAgICAgUU1hcENvbnN0SXRlcmF0b3I8S2V5LFQ+IGl0ID0gbS5iZWdpbigpOwoKICAgICAg
ICBmb3IgKCA7IGl0ICE9IG0uZW5kKCk7ICsraXQgKSB7CiAgICAgICAgICAgIHZhbHVlX3R5cGUg
cCggKCppdCkuZmlyc3QsICgqaXQpLnNlY29uZCApOwogICAgICAgICAgICBpbnNlcnQoIHAgKTsK
ICAgICAgICB9CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgoKCgogICAgaXRlcmF0b3Ig
YmVnaW4oKSB7IGRldGFjaCgpOyByZXR1cm4gc2gtPmJlZ2luKCk7IH0KICAgIGl0ZXJhdG9yIGVu
ZCgpIHsgZGV0YWNoKCk7IHJldHVybiBzaC0+ZW5kKCk7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gKChjb25zdCBQcml2KilzaCktPmJlZ2luKCk7IH0KICAgIGNv
bnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuICgoY29uc3QgUHJpdiopc2gpLT5lbmQo
KTsgfQogICAgaXRlcmF0b3IgcmVwbGFjZSggY29uc3QgS2V5JiBrLCBjb25zdCBUJiB2ICkKICAg
IHsKICAgICAgICByZW1vdmUoIGsgKTsKICAgICAgICByZXR1cm4gaW5zZXJ0KCBrLCB2ICk7CiAg
ICB9CgogICAgc2l6ZV90eXBlIHNpemUoKSBjb25zdAogICAgewogICAgICAgIHJldHVybiBzaC0+
bm9kZV9jb3VudDsKICAgIH0KICAgIGJvb2wgZW1wdHkoKSBjb25zdAogICAgewogICAgICAgIHJl
dHVybiBzaC0+bm9kZV9jb3VudCA9PSAwOwogICAgfQogICAgUVBhaXI8aXRlcmF0b3IsYm9vbD4g
aW5zZXJ0KCBjb25zdCB2YWx1ZV90eXBlJiB4ICk7CgogICAgdm9pZCBlcmFzZSggaXRlcmF0b3Ig
aXQgKQogICAgewogICAgICAgIGRldGFjaCgpOwogICAgICAgIHNoLT5yZW1vdmUoIGl0ICk7CiAg
ICB9CiAgICB2b2lkIGVyYXNlKCBjb25zdCBrZXlfdHlwZSYgayApOwogICAgc2l6ZV90eXBlIGNv
dW50KCBjb25zdCBrZXlfdHlwZSYgayApIGNvbnN0OwogICAgVCYgb3BlcmF0b3JbXSAoIGNvbnN0
IEtleSYgayApOwogICAgdm9pZCBjbGVhcigpOwoKICAgIGl0ZXJhdG9yIGZpbmQgKCBjb25zdCBL
ZXkmIGsgKQogICAgewogICAgICAgIGRldGFjaCgpOwogICAgICAgIHJldHVybiBpdGVyYXRvcigg
c2gtPmZpbmQoIGsgKS5ub2RlICk7CiAgICB9CiAgICBjb25zdF9pdGVyYXRvciBmaW5kICggY29u
c3QgS2V5JiBrICkgY29uc3QgeyByZXR1cm4gc2gtPmZpbmQoIGsgKTsgfQoKICAgIGNvbnN0IFQm
IG9wZXJhdG9yW10gKCBjb25zdCBLZXkmIGsgKSBjb25zdAogICAgICAgIHsgOyByZXR1cm4gc2gt
PmZpbmQoIGsgKS5kYXRhKCk7IH0KICAgIGJvb2wgY29udGFpbnMgKCBjb25zdCBLZXkmIGsgKSBj
b25zdAogICAgICAgIHsgcmV0dXJuIGZpbmQoIGsgKSAhPSBlbmQoKTsgfQoKCiAgICBzaXplX3R5
cGUgY291bnQoKSBjb25zdCB7IHJldHVybiBzaC0+bm9kZV9jb3VudDsgfQoKICAgIFFWYWx1ZUxp
c3Q8S2V5PiBrZXlzKCkgY29uc3QgewogICAgICAgIFFWYWx1ZUxpc3Q8S2V5PiByOwogICAgICAg
IGZvciAoY29uc3RfaXRlcmF0b3IgaT1iZWdpbigpOyBpIT1lbmQoKTsgKytpKQogICAgICAgICAg
ICByLmFwcGVuZChpLmtleSgpKTsKICAgICAgICByZXR1cm4gcjsKICAgIH0KCiAgICBRVmFsdWVM
aXN0PFQ+IHZhbHVlcygpIGNvbnN0IHsKICAgICAgICBRVmFsdWVMaXN0PFQ+IHI7CiAgICAgICAg
Zm9yIChjb25zdF9pdGVyYXRvciBpPWJlZ2luKCk7IGkhPWVuZCgpOyArK2kpCiAgICAgICAgICAg
IHIuYXBwZW5kKCppKTsKICAgICAgICByZXR1cm4gcjsKICAgIH0KCiAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiBzaC0+bm9kZV9jb3VudCA9PSAwOyB9CgogICAgaXRlcmF0b3IgaW5z
ZXJ0KCBjb25zdCBLZXkmIGtleSwgY29uc3QgVCYgdmFsdWUsIGJvb2wgb3ZlcndyaXRlID0gVFJV
RSApOwogICAgdm9pZCByZW1vdmUoIGl0ZXJhdG9yIGl0ICkgeyBkZXRhY2goKTsgc2gtPnJlbW92
ZSggaXQgKTsgfQogICAgdm9pZCByZW1vdmUoIGNvbnN0IEtleSYgayApOwojIDc0NyAiLi4vLi4v
aW5jbHVkZS9xbWFwLmgiCnByb3RlY3RlZDoKCgoKICAgIHZvaWQgZGV0YWNoKCkgeyBpZiAoIHNo
LT5jb3VudCA+IDEgKSBkZXRhY2hJbnRlcm5hbCgpOyB9CgogICAgUHJpdiogc2g7CnByaXZhdGU6
CiAgICB2b2lkIGRldGFjaEludGVybmFsKCk7CgogICAgZnJpZW5kIGNsYXNzIFFEZWVwQ29weTwg
UU1hcDxLZXksVD4gPjsKfTsKCnRlbXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KIFFNYXA8S2V5
LFQ+JiBRTWFwPEtleSxUPjo6b3BlcmF0b3I9ICggY29uc3QgUU1hcDxLZXksVD4mIG0gKQp7CiAg
ICBtLnNoLT5yZWYoKTsKICAgIGlmICggc2gtPmRlcmVmKCkgKQogICAgICAgIGRlbGV0ZSBzaDsK
ICAgIHNoID0gbS5zaDsKICAgIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGU8Y2xhc3MgS2V5LCBj
bGFzcyBUPgogdHlwZW5hbWUgUU1hcDxLZXksVD46Omluc2VydF9wYWlyIFFNYXA8S2V5LFQ+Ojpp
bnNlcnQoIGNvbnN0IHR5cGVuYW1lIFFNYXA8S2V5LFQ+Ojp2YWx1ZV90eXBlJiB4ICkKewogICAg
ZGV0YWNoKCk7CiAgICBzaXplX3R5cGUgbiA9IHNpemUoKTsKICAgIGl0ZXJhdG9yIGl0ID0gc2gt
Pmluc2VydFNpbmdsZSggeC5maXJzdCApOwogICAgYm9vbCBpbnNlcnRlZCA9IEZBTFNFOwogICAg
aWYgKCBuIDwgc2l6ZSgpICkgewogICAgICAgIGluc2VydGVkID0gVFJVRTsKICAgICAgICBpdC5k
YXRhKCkgPSB4LnNlY29uZDsKICAgIH0KICAgIHJldHVybiBRUGFpcjxpdGVyYXRvcixib29sPigg
aXQsIGluc2VydGVkICk7Cn0KCnRlbXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KIHZvaWQgUU1h
cDxLZXksVD46OmVyYXNlKCBjb25zdCBLZXkmIGsgKQp7CiAgICBkZXRhY2goKTsKICAgIGl0ZXJh
dG9yIGl0KCBzaC0+ZmluZCggayApLm5vZGUgKTsKICAgIGlmICggaXQgIT0gZW5kKCkgKQogICAg
ICAgIHNoLT5yZW1vdmUoIGl0ICk7Cn0KCnRlbXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KIHR5
cGVuYW1lIFFNYXA8S2V5LFQ+OjpzaXplX3R5cGUgUU1hcDxLZXksVD46OmNvdW50KCBjb25zdCBL
ZXkmIGsgKSBjb25zdAp7CiAgICBjb25zdF9pdGVyYXRvciBpdCggc2gtPmZpbmQoIGsgKS5ub2Rl
ICk7CiAgICBpZiAoIGl0ICE9IGVuZCgpICkgewogICAgICAgIHNpemVfdHlwZSBjID0gMDsKICAg
ICAgICB3aGlsZSAoIGl0ICE9IGVuZCgpICkgewogICAgICAgICAgICArK2l0OwogICAgICAgICAg
ICArK2M7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjOwogICAgfQogICAgcmV0dXJuIDA7Cn0K
CnRlbXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KIFQmIFFNYXA8S2V5LFQ+OjpvcGVyYXRvcltd
ICggY29uc3QgS2V5JiBrICkKewogICAgZGV0YWNoKCk7CiAgICBRTWFwTm9kZTxLZXksVD4qIHAg
PSBzaC0+ZmluZCggayApLm5vZGU7CiAgICBpZiAoIHAgIT0gc2gtPmVuZCgpLm5vZGUgKQogICAg
ICAgIHJldHVybiBwLT5kYXRhOwogICAgcmV0dXJuIGluc2VydCggaywgVCgpICkuZGF0YSgpOwp9
Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiB2b2lkIFFNYXA8S2V5LFQ+OjpjbGVhcigp
CnsKICAgIGlmICggc2gtPmNvdW50ID09IDEgKQogICAgICAgIHNoLT5jbGVhcigpOwogICAgZWxz
ZSB7CiAgICAgICAgc2gtPmRlcmVmKCk7CiAgICAgICAgc2ggPSBuZXcgUU1hcFByaXZhdGU8S2V5
LFQ+OwogICAgfQp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiB0eXBlbmFtZSBRTWFw
PEtleSxUPjo6aXRlcmF0b3IgUU1hcDxLZXksVD46Omluc2VydCggY29uc3QgS2V5JiBrZXksIGNv
bnN0IFQmIHZhbHVlLCBib29sIG92ZXJ3cml0ZSApCnsKICAgIGRldGFjaCgpOwogICAgc2l6ZV90
eXBlIG4gPSBzaXplKCk7CiAgICBpdGVyYXRvciBpdCA9IHNoLT5pbnNlcnRTaW5nbGUoIGtleSAp
OwogICAgaWYgKCBvdmVyd3JpdGUgfHwgbiA8IHNpemUoKSApCiAgICAgICAgaXQuZGF0YSgpID0g
dmFsdWU7CiAgICByZXR1cm4gaXQ7Cn0KCnRlbXBsYXRlPGNsYXNzIEtleSwgY2xhc3MgVD4KIHZv
aWQgUU1hcDxLZXksVD46OnJlbW92ZSggY29uc3QgS2V5JiBrICkKewogICAgZGV0YWNoKCk7CiAg
ICBpdGVyYXRvciBpdCggc2gtPmZpbmQoIGsgKS5ub2RlICk7CiAgICBpZiAoIGl0ICE9IGVuZCgp
ICkKICAgICAgICBzaC0+cmVtb3ZlKCBpdCApOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNz
IFQ+CiB2b2lkIFFNYXA8S2V5LFQ+OjpkZXRhY2hJbnRlcm5hbCgpCnsKICAgIHNoLT5kZXJlZigp
OyBzaCA9IG5ldyBRTWFwUHJpdmF0ZTxLZXksVD4oIHNoICk7Cn0KCgoKdGVtcGxhdGU8Y2xhc3Mg
S2V5LCBjbGFzcyBUPgogUURhdGFTdHJlYW0mIG9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtJiBzLCBR
TWFwPEtleSxUPiYgbSApIHsKICAgIG0uY2xlYXIoKTsKICAgIFFfVUlOVDMyIGM7CiAgICBzID4+
IGM7CiAgICBmb3IoIFFfVUlOVDMyIGkgPSAwOyBpIDwgYzsgKytpICkgewogICAgICAgIEtleSBr
OyBUIHQ7CiAgICAgICAgcyA+PiBrID4+IHQ7CiAgICAgICAgbS5pbnNlcnQoIGssIHQgKTsKICAg
ICAgICBpZiAoIHMuYXRFbmQoKSApCiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJu
IHM7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyBLZXksIGNsYXNzIFQ+CiBRRGF0YVN0cmVhbSYgb3BlcmF0
b3I8PCggUURhdGFTdHJlYW0mIHMsIGNvbnN0IFFNYXA8S2V5LFQ+JiBtICkgewogICAgcyA8PCAo
UV9VSU5UMzIpbS5zaXplKCk7CiAgICBRTWFwQ29uc3RJdGVyYXRvcjxLZXksVD4gaXQgPSBtLmJl
Z2luKCk7CiAgICBmb3IoIDsgaXQgIT0gbS5lbmQoKTsgKytpdCApCiAgICAgICAgcyA8PCBpdC5r
ZXkoKSA8PCBpdC5kYXRhKCk7CiAgICByZXR1cm4gczsKfQojIDQ0ICIuLi8uLi9pbmNsdWRlL3Ft
aW1lLmgiIDIKCgoKCmNsYXNzIFFJbWFnZURyYWc7CmNsYXNzIFFUZXh0RHJhZzsKCmNsYXNzIFFN
aW1lU291cmNlCnsKICAgIGZyaWVuZCBjbGFzcyBRQ2xpcGJvYXJkRGF0YTsKCnB1YmxpYzoKICAg
IFFNaW1lU291cmNlKCk7CiAgICB2aXJ0dWFsIH5RTWltZVNvdXJjZSgpOwogICAgdmlydHVhbCBj
b25zdCBjaGFyKiBmb3JtYXQoIGludCBuID0gMCApIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgYm9v
bCBwcm92aWRlcyggY29uc3QgY2hhciogKSBjb25zdDsKICAgIHZpcnR1YWwgUUJ5dGVBcnJheSBl
bmNvZGVkRGF0YSggY29uc3QgY2hhciogKSBjb25zdCA9IDA7CiAgICBpbnQgc2VyaWFsTnVtYmVy
KCkgY29uc3Q7Cgpwcml2YXRlOgogICAgaW50IHNlcl9ubzsKICAgIGVudW0geyBOb0NhY2hlLCBU
ZXh0LCBHcmFwaGljcyB9IGNhY2hlVHlwZTsKICAgIHVuaW9uCiAgICB7CiAgICAgICAgc3RydWN0
CiAgICAgICAgewogICAgICAgICAgICBRU3RyaW5nICpzdHI7CiAgICAgICAgICAgIFFDU3RyaW5n
ICpzdWJ0eXBlOwogICAgICAgIH0gdHh0OwogICAgICAgIHN0cnVjdAogICAgICAgIHsKICAgICAg
ICAgICAgUUltYWdlICppbWc7CiAgICAgICAgICAgIFFQaXhtYXAgKnBpeDsKICAgICAgICB9IGdm
eDsKICAgIH0gY2FjaGU7CiAgICB2b2lkIGNsZWFyQ2FjaGUoKTsKCgogICAgZnJpZW5kIGNsYXNz
IFFJbWFnZURyYWc7CiAgICBmcmllbmQgY2xhc3MgUVRleHREcmFnOwoKfTsKCmlubGluZSBpbnQg
UU1pbWVTb3VyY2U6OnNlcmlhbE51bWJlcigpIGNvbnN0CnsgcmV0dXJuIHNlcl9ubzsgfQoKY2xh
c3MgUVN0cmluZ0xpc3Q7CmNsYXNzIFFNaW1lU291cmNlRmFjdG9yeURhdGE7CgpjbGFzcyBRTWlt
ZVNvdXJjZUZhY3RvcnkgewpwdWJsaWM6CiAgICBRTWltZVNvdXJjZUZhY3RvcnkoKTsKICAgIHZp
cnR1YWwgflFNaW1lU291cmNlRmFjdG9yeSgpOwoKICAgIHN0YXRpYyBRTWltZVNvdXJjZUZhY3Rv
cnkqIGRlZmF1bHRGYWN0b3J5KCk7CiAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0RmFjdG9yeSgg
UU1pbWVTb3VyY2VGYWN0b3J5KiApOwogICAgc3RhdGljIFFNaW1lU291cmNlRmFjdG9yeSogdGFr
ZURlZmF1bHRGYWN0b3J5KCk7CiAgICBzdGF0aWMgdm9pZCBhZGRGYWN0b3J5KCBRTWltZVNvdXJj
ZUZhY3RvcnkgKmYgKTsKICAgIHN0YXRpYyB2b2lkIHJlbW92ZUZhY3RvcnkoIFFNaW1lU291cmNl
RmFjdG9yeSAqZiApOwoKICAgIHZpcnR1YWwgY29uc3QgUU1pbWVTb3VyY2UqIGRhdGEoY29uc3Qg
UVN0cmluZyYgYWJzX25hbWUpIGNvbnN0OwogICAgdmlydHVhbCBRU3RyaW5nIG1ha2VBYnNvbHV0
ZShjb25zdCBRU3RyaW5nJiBhYnNfb3JfcmVsX25hbWUsIGNvbnN0IFFTdHJpbmcmIGNvbnRleHQp
IGNvbnN0OwogICAgY29uc3QgUU1pbWVTb3VyY2UqIGRhdGEoY29uc3QgUVN0cmluZyYgYWJzX29y
X3JlbF9uYW1lLCBjb25zdCBRU3RyaW5nJiBjb250ZXh0KSBjb25zdDsKCiAgICB2aXJ0dWFsIHZv
aWQgc2V0VGV4dCggY29uc3QgUVN0cmluZyYgYWJzX25hbWUsIGNvbnN0IFFTdHJpbmcmIHRleHQg
KTsKICAgIHZpcnR1YWwgdm9pZCBzZXRJbWFnZSggY29uc3QgUVN0cmluZyYgYWJzX25hbWUsIGNv
bnN0IFFJbWFnZSYgaW0gKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRQaXhtYXAoIGNvbnN0IFFTdHJp
bmcmIGFic19uYW1lLCBjb25zdCBRUGl4bWFwJiBwbSApOwogICAgdmlydHVhbCB2b2lkIHNldERh
dGEoIGNvbnN0IFFTdHJpbmcmIGFic19uYW1lLCBRTWltZVNvdXJjZSogZGF0YSApOwogICAgdmly
dHVhbCB2b2lkIHNldEZpbGVQYXRoKCBjb25zdCBRU3RyaW5nTGlzdCYgKTsKICAgIHZpcnR1YWwg
UVN0cmluZ0xpc3QgZmlsZVBhdGgoKSBjb25zdDsKICAgIHZvaWQgYWRkRmlsZVBhdGgoIGNvbnN0
IFFTdHJpbmcmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0RXh0ZW5zaW9uVHlwZSggY29uc3QgUVN0
cmluZyYgZXh0LCBjb25zdCBjaGFyKiBtaW1ldHlwZSApOwoKcHJpdmF0ZToKICAgIFFNaW1lU291
cmNlICpkYXRhSW50ZXJuYWwoY29uc3QgUVN0cmluZyYgYWJzX25hbWUsIGNvbnN0IFFNYXA8UVN0
cmluZywgUVN0cmluZz4gJmV4dGVuc2lvbnMgKSBjb25zdDsKICAgIFFNaW1lU291cmNlRmFjdG9y
eURhdGEqIGQ7Cn07CiMgNDYgIi4uLy4uL2luY2x1ZGUvcWV2ZW50LmgiIDIKCgoKY2xhc3MgUUV2
ZW50OiBwdWJsaWMgUXQKewpwdWJsaWM6CiAgICBlbnVtIFR5cGUgewojIDYxICIuLi8uLi9pbmNs
dWRlL3FldmVudC5oIgogICAgICAgIE5vbmUgPSAwLAoKCiAgICAgICAgVGltZXIgPSAxLAogICAg
ICAgIE1vdXNlQnV0dG9uUHJlc3MgPSAyLAogICAgICAgIE1vdXNlQnV0dG9uUmVsZWFzZSA9IDMs
CiAgICAgICAgTW91c2VCdXR0b25EYmxDbGljayA9IDQsCiAgICAgICAgTW91c2VNb3ZlID0gNSwK
ICAgICAgICBLZXlQcmVzcyA9IDYsCiAgICAgICAgS2V5UmVsZWFzZSA9IDcsCiAgICAgICAgRm9j
dXNJbiA9IDgsCiAgICAgICAgRm9jdXNPdXQgPSA5LAogICAgICAgIEVudGVyID0gMTAsCiAgICAg
ICAgTGVhdmUgPSAxMSwKICAgICAgICBQYWludCA9IDEyLAogICAgICAgIE1vdmUgPSAxMywKICAg
ICAgICBSZXNpemUgPSAxNCwKICAgICAgICBDcmVhdGUgPSAxNSwKICAgICAgICBEZXN0cm95ID0g
MTYsCiAgICAgICAgU2hvdyA9IDE3LAogICAgICAgIEhpZGUgPSAxOCwKICAgICAgICBDbG9zZSA9
IDE5LAogICAgICAgIFF1aXQgPSAyMCwKICAgICAgICBSZXBhcmVudCA9IDIxLAogICAgICAgIFNo
b3dNaW5pbWl6ZWQgPSAyMiwKICAgICAgICBTaG93Tm9ybWFsID0gMjMsCiAgICAgICAgV2luZG93
QWN0aXZhdGUgPSAyNCwKICAgICAgICBXaW5kb3dEZWFjdGl2YXRlID0gMjUsCiAgICAgICAgU2hv
d1RvUGFyZW50ID0gMjYsCiAgICAgICAgSGlkZVRvUGFyZW50ID0gMjcsCiAgICAgICAgU2hvd01h
eGltaXplZCA9IDI4LAogICAgICAgIFNob3dGdWxsU2NyZWVuID0gMjksCiAgICAgICAgQWNjZWwg
PSAzMCwKICAgICAgICBXaGVlbCA9IDMxLAogICAgICAgIEFjY2VsQXZhaWxhYmxlID0gMzIsCiAg
ICAgICAgQ2FwdGlvbkNoYW5nZSA9IDMzLAogICAgICAgIEljb25DaGFuZ2UgPSAzNCwKICAgICAg
ICBQYXJlbnRGb250Q2hhbmdlID0gMzUsCiAgICAgICAgQXBwbGljYXRpb25Gb250Q2hhbmdlID0g
MzYsCiAgICAgICAgUGFyZW50UGFsZXR0ZUNoYW5nZSA9IDM3LAogICAgICAgIEFwcGxpY2F0aW9u
UGFsZXR0ZUNoYW5nZSA9IDM4LAogICAgICAgIFBhbGV0dGVDaGFuZ2UgPSAzOSwKICAgICAgICBD
bGlwYm9hcmQgPSA0MCwKICAgICAgICBTcGVlY2ggPSA0MiwKICAgICAgICBTb2NrQWN0ID0gNTAs
CiAgICAgICAgQWNjZWxPdmVycmlkZSA9IDUxLAogICAgICAgIERlZmVycmVkRGVsZXRlID0gNTIs
CiAgICAgICAgRHJhZ0VudGVyID0gNjAsCiAgICAgICAgRHJhZ01vdmUgPSA2MSwKICAgICAgICBE
cmFnTGVhdmUgPSA2MiwKICAgICAgICBEcm9wID0gNjMsCiAgICAgICAgRHJhZ1Jlc3BvbnNlID0g
NjQsCiAgICAgICAgQ2hpbGRJbnNlcnRlZCA9IDcwLAogICAgICAgIENoaWxkUmVtb3ZlZCA9IDcx
LAogICAgICAgIExheW91dEhpbnQgPSA3MiwKICAgICAgICBTaG93V2luZG93UmVxdWVzdCA9IDcz
LAogICAgICAgIEFjdGl2YXRlQ29udHJvbCA9IDgwLAogICAgICAgIERlYWN0aXZhdGVDb250cm9s
ID0gODEsCiAgICAgICAgQ29udGV4dE1lbnUgPSA4MiwKICAgICAgICBJTVN0YXJ0ID0gODMsCiAg
ICAgICAgSU1Db21wb3NlID0gODQsCiAgICAgICAgSU1FbmQgPSA4NSwKICAgICAgICBBY2Nlc3Np
YmlsaXR5ID0gODYsCiAgICAgICAgVGFibGV0TW92ZSA9IDg3LAogICAgICAgIExvY2FsZUNoYW5n
ZSA9IDg4LAogICAgICAgIExhbmd1YWdlQ2hhbmdlID0gODksCiAgICAgICAgTGF5b3V0RGlyZWN0
aW9uQ2hhbmdlID0gOTAsCiAgICAgICAgU3R5bGUgPSA5MSwKICAgICAgICBUYWJsZXRQcmVzcyA9
IDkyLAogICAgICAgIFRhYmxldFJlbGVhc2UgPSA5MywKICAgICAgICBVc2VyID0gMTAwMCwKICAg
ICAgICBNYXhVc2VyID0gNjU1MzUKICAgIH07CgoKICAgIFFFdmVudCggVHlwZSB0eXBlICkgOiB0
KHR5cGUpLCBwb3N0ZWQoRkFMU0UpLCBzcG9udChGQUxTRSkge30KICAgIHZpcnR1YWwgflFFdmVu
dCgpOwogICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gdDsgfQogICAgYm9vbCBzcG9udGFu
ZW91cygpIGNvbnN0IHsgcmV0dXJuIHNwb250OyB9CnByb3RlY3RlZDoKICAgIFR5cGUgdDsKcHJp
dmF0ZToKICAgIHVpbnQgcG9zdGVkIDogMTsKICAgIHVpbnQgc3BvbnQgOiAxOwoKCiAgICBmcmll
bmQgY2xhc3MgUUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFBY2NlbE1hbmFnZXI7CiAg
ICBmcmllbmQgY2xhc3MgUUJhc2VBcHBsaWNhdGlvbjsKICAgIGZyaWVuZCBjbGFzcyBRRVRXaWRn
ZXQ7Cn07CgoKY2xhc3MgUVRpbWVyRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAg
UVRpbWVyRXZlbnQoIGludCB0aW1lcklkICkKICAgICAgICA6IFFFdmVudChUaW1lciksIGlkKHRp
bWVySWQpIHt9CiAgICBpbnQgdGltZXJJZCgpIGNvbnN0IHsgcmV0dXJuIGlkOyB9CnByb3RlY3Rl
ZDoKICAgIGludCBpZDsKfTsKCgpjbGFzcyBRTW91c2VFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpw
dWJsaWM6CiAgICBRTW91c2VFdmVudCggVHlwZSB0eXBlLCBjb25zdCBRUG9pbnQgJnBvcywgaW50
IGJ1dHRvbiwgaW50IHN0YXRlICk7CgogICAgUU1vdXNlRXZlbnQoIFR5cGUgdHlwZSwgY29uc3Qg
UVBvaW50ICZwb3MsIGNvbnN0IFFQb2ludCZnbG9iYWxQb3MsCiAgICAgICAgICAgICAgICAgaW50
IGJ1dHRvbiwgaW50IHN0YXRlICkKICAgICAgICA6IFFFdmVudCh0eXBlKSwgcChwb3MpLCBnKGds
b2JhbFBvcyksIGIoKHVzaG9ydClidXR0b24pLHMoKHVzaG9ydClzdGF0ZSksYWNjcHQoVFJVRSkg
e307CgogICAgY29uc3QgUVBvaW50ICZwb3MoKSBjb25zdCB7IHJldHVybiBwOyB9CiAgICBjb25z
dCBRUG9pbnQgJmdsb2JhbFBvcygpIGNvbnN0IHsgcmV0dXJuIGc7IH0KICAgIGludCB4KCkgY29u
c3QgeyByZXR1cm4gcC54KCk7IH0KICAgIGludCB5KCkgY29uc3QgeyByZXR1cm4gcC55KCk7IH0K
ICAgIGludCBnbG9iYWxYKCkgY29uc3QgeyByZXR1cm4gZy54KCk7IH0KICAgIGludCBnbG9iYWxZ
KCkgY29uc3QgeyByZXR1cm4gZy55KCk7IH0KICAgIEJ1dHRvblN0YXRlIGJ1dHRvbigpIGNvbnN0
IHsgcmV0dXJuIChCdXR0b25TdGF0ZSkgYjsgfQogICAgQnV0dG9uU3RhdGUgc3RhdGUoKSBjb25z
dCB7IHJldHVybiAoQnV0dG9uU3RhdGUpIHM7IH0KICAgIEJ1dHRvblN0YXRlIHN0YXRlQWZ0ZXIo
KSBjb25zdDsKICAgIGJvb2wgaXNBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGFjY3B0OyB9CiAg
ICB2b2lkIGFjY2VwdCgpIHsgYWNjcHQgPSBUUlVFOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgYWNj
cHQgPSBGQUxTRTsgfQpwcm90ZWN0ZWQ6CiAgICBRUG9pbnQgcDsKICAgIFFQb2ludCBnOwogICAg
dXNob3J0IGI7CiAgICB1c2hvcnQgczsKICAgIHVpbnQgYWNjcHQ6MTsKfTsKCgoKY2xhc3MgUVdo
ZWVsRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUVdoZWVsRXZlbnQoIGNvbnN0
IFFQb2ludCAmcG9zLCBpbnQgZGVsdGEsIGludCBzdGF0ZSwgT3JpZW50YXRpb24gb3JpZW50ID0g
VmVydGljYWwgKTsKICAgIFFXaGVlbEV2ZW50KCBjb25zdCBRUG9pbnQgJnBvcywgY29uc3QgUVBv
aW50JiBnbG9iYWxQb3MsIGludCBkZWx0YSwgaW50IHN0YXRlLCBPcmllbnRhdGlvbiBvcmllbnQg
PSBWZXJ0aWNhbCApCiAgICAgICAgOiBRRXZlbnQoV2hlZWwpLCBwKHBvcyksIGcoZ2xvYmFsUG9z
KSwgZChkZWx0YSksIHMoKHVzaG9ydClzdGF0ZSksCiAgICAgICAgICBhY2NwdChUUlVFKSwgbyhv
cmllbnQpIHt9CiAgICBpbnQgZGVsdGEoKSBjb25zdCB7IHJldHVybiBkOyB9CiAgICBjb25zdCBR
UG9pbnQgJnBvcygpIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgIGNvbnN0IFFQb2ludCAmZ2xvYmFs
UG9zKCkgY29uc3QgeyByZXR1cm4gZzsgfQogICAgaW50IHgoKSBjb25zdCB7IHJldHVybiBwLngo
KTsgfQogICAgaW50IHkoKSBjb25zdCB7IHJldHVybiBwLnkoKTsgfQogICAgaW50IGdsb2JhbFgo
KSBjb25zdCB7IHJldHVybiBnLngoKTsgfQogICAgaW50IGdsb2JhbFkoKSBjb25zdCB7IHJldHVy
biBnLnkoKTsgfQogICAgQnV0dG9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBCdXR0b25T
dGF0ZShzKTsgfQogICAgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBv
OyB9CiAgICBib29sIGlzQWNjZXB0ZWQoKSBjb25zdCB7IHJldHVybiBhY2NwdDsgfQogICAgdm9p
ZCBhY2NlcHQoKSB7IGFjY3B0ID0gVFJVRTsgfQogICAgdm9pZCBpZ25vcmUoKSB7IGFjY3B0ID0g
RkFMU0U7IH0KcHJvdGVjdGVkOgogICAgUVBvaW50IHA7CiAgICBRUG9pbnQgZzsKICAgIGludCBk
OwogICAgdXNob3J0IHM7CiAgICBib29sIGFjY3B0OwogICAgT3JpZW50YXRpb24gbzsKfTsKCgpj
bGFzcyBRVGFibGV0RXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgZW51bSBUYWJs
ZXREZXZpY2UgeyBOb0RldmljZSA9IC0xLCBQdWNrLCBTdHlsdXMsIEVyYXNlciB9OwogICAgUVRh
YmxldEV2ZW50KCBUeXBlIHQsIGNvbnN0IFFQb2ludCAmcG9zLCBjb25zdCBRUG9pbnQgJmdsb2Jh
bFBvcywgaW50IGRldmljZSwKICAgICAgICAgICAgICAgICAgaW50IHByZXNzdXJlLCBpbnQgeFRp
bHQsIGludCB5VGlsdCwgY29uc3QgUVBhaXI8aW50LGludD4gJnVJZCApOwogICAgUVRhYmxldEV2
ZW50KCBjb25zdCBRUG9pbnQgJnBvcywgY29uc3QgUVBvaW50ICZnbG9iYWxQb3MsIGludCBkZXZp
Y2UsCiAgICAgICAgICAgICAgICAgIGludCBwcmVzc3VyZSwgaW50IHhUaWx0LCBpbnQgeVRpbHQs
IGNvbnN0IFFQYWlyPGludCxpbnQ+ICZ1SWQgKQogICAgICAgIDogUUV2ZW50KCBUYWJsZXRNb3Zl
ICksIG1Qb3MoIHBvcyApLCBtR1BvcyggZ2xvYmFsUG9zICksIG1EZXYoIGRldmljZSApLAogICAg
ICAgICAgbVByZXNzKCBwcmVzc3VyZSApLCBtWFQoIHhUaWx0ICksIG1ZVCggeVRpbHQgKSwgbVR5
cGUoIHVJZC5maXJzdCApLAogICAgICAgICAgbVBoeSggdUlkLnNlY29uZCApCiAgICB7fQogICAg
aW50IHByZXNzdXJlKCkgY29uc3QgeyByZXR1cm4gbVByZXNzOyB9CiAgICBpbnQgeFRpbHQoKSBj
b25zdCB7IHJldHVybiBtWFQ7IH0KICAgIGludCB5VGlsdCgpIGNvbnN0IHsgcmV0dXJuIG1ZVDsg
fQogICAgY29uc3QgUVBvaW50ICZwb3MoKSBjb25zdCB7IHJldHVybiBtUG9zOyB9CiAgICBjb25z
dCBRUG9pbnQgJmdsb2JhbFBvcygpIGNvbnN0IHsgcmV0dXJuIG1HUG9zOyB9CiAgICBpbnQgeCgp
IGNvbnN0IHsgcmV0dXJuIG1Qb3MueCgpOyB9CiAgICBpbnQgeSgpIGNvbnN0IHsgcmV0dXJuIG1Q
b3MueSgpOyB9CiAgICBpbnQgZ2xvYmFsWCgpIGNvbnN0IHsgcmV0dXJuIG1HUG9zLngoKTsgfQog
ICAgaW50IGdsb2JhbFkoKSBjb25zdCB7IHJldHVybiBtR1Bvcy55KCk7IH0KICAgIFRhYmxldERl
dmljZSBkZXZpY2UoKSBjb25zdCB7IHJldHVybiBUYWJsZXREZXZpY2UobURldik7IH0KICAgIGlu
dCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gbWJBY2M7IH0KICAgIHZvaWQgYWNjZXB0KCkg
eyBtYkFjYyA9IFRSVUU7IH0KICAgIHZvaWQgaWdub3JlKCkgeyBtYkFjYyA9IEZBTFNFOyB9CiAg
ICBRUGFpcjxpbnQsaW50PiB1bmlxdWVJZCgpIHsgcmV0dXJuIFFQYWlyPGludCxpbnQ+KCBtVHlw
ZSwgbVBoeSk7IH0KcHJvdGVjdGVkOgogICAgUVBvaW50IG1Qb3M7CiAgICBRUG9pbnQgbUdQb3M7
CiAgICBpbnQgbURldiwKICAgICAgICBtUHJlc3MsCiAgICAgICAgbVhULAogICAgICAgIG1ZVCwK
ICAgICAgICBtVHlwZSwKICAgICAgICBtUGh5OwogICAgYm9vbCBtYkFjYzsKCn07CgpjbGFzcyBR
S2V5RXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUUtleUV2ZW50KCBUeXBlIHR5
cGUsIGludCBrZXksIGludCBhc2NpaSwgaW50IHN0YXRlLAogICAgICAgICAgICAgICAgY29uc3Qg
UVN0cmluZyYgdGV4dD1RU3RyaW5nOjpudWxsLCBib29sIGF1dG9yZXA9RkFMU0UsIHVzaG9ydCBj
b3VudD0xICkKICAgICAgICA6IFFFdmVudCh0eXBlKSwgdHh0KHRleHQpLCBrKCh1c2hvcnQpa2V5
KSwgcygodXNob3J0KXN0YXRlKSwKICAgICAgICAgICAgYSgodWNoYXIpYXNjaWkpLCBhY2NwdChU
UlVFKSwgYXV0b3IoYXV0b3JlcCksIGMoY291bnQpCiAgICB7CiAgICAgICAgaWYgKCBrZXkgPj0g
S2V5X0JhY2sgJiYga2V5IDw9IEtleV9NZWRpYUxhc3QgKQogICAgICAgICAgICBhY2NwdCA9IEZB
TFNFOwogICAgfQogICAgaW50IGtleSgpIGNvbnN0IHsgcmV0dXJuIGs7IH0KICAgIGludCBhc2Np
aSgpIGNvbnN0IHsgcmV0dXJuIGE7IH0KICAgIEJ1dHRvblN0YXRlIHN0YXRlKCkgY29uc3QgeyBy
ZXR1cm4gQnV0dG9uU3RhdGUocyk7IH0KICAgIEJ1dHRvblN0YXRlIHN0YXRlQWZ0ZXIoKSBjb25z
dDsKICAgIGJvb2wgaXNBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGFjY3B0OyB9CiAgICBRU3Ry
aW5nIHRleHQoKSBjb25zdCB7IHJldHVybiB0eHQ7IH0KICAgIGJvb2wgaXNBdXRvUmVwZWF0KCkg
Y29uc3QgeyByZXR1cm4gYXV0b3I7IH0KICAgIGludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIGlu
dChjKTsgfQogICAgdm9pZCBhY2NlcHQoKSB7IGFjY3B0ID0gVFJVRTsgfQogICAgdm9pZCBpZ25v
cmUoKSB7IGFjY3B0ID0gRkFMU0U7IH0KCnByb3RlY3RlZDoKICAgIFFTdHJpbmcgdHh0OwogICAg
dXNob3J0IGssIHM7CiAgICB1Y2hhciBhOwogICAgdWludCBhY2NwdDoxOwogICAgdWludCBhdXRv
cjoxOwogICAgdXNob3J0IGM7Cn07CgoKY2xhc3MgUUZvY3VzRXZlbnQgOiBwdWJsaWMgUUV2ZW50
CnsKcHVibGljOgoKICAgIFFGb2N1c0V2ZW50KCBUeXBlIHR5cGUgKQogICAgICAgIDogUUV2ZW50
KHR5cGUpIHt9CgogICAgYm9vbCBnb3RGb2N1cygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBG
b2N1c0luOyB9CiAgICBib29sIGxvc3RGb2N1cygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBG
b2N1c091dDsgfQoKICAgIGVudW0gUmVhc29uIHsgTW91c2UsIFRhYiwgQmFja3RhYiwgQWN0aXZl
V2luZG93LCBQb3B1cCwgU2hvcnRjdXQsIE90aGVyIH07CiAgICBzdGF0aWMgUmVhc29uIHJlYXNv
bigpOwogICAgc3RhdGljIHZvaWQgc2V0UmVhc29uKCBSZWFzb24gcmVhc29uICk7CiAgICBzdGF0
aWMgdm9pZCByZXNldFJlYXNvbigpOwoKcHJpdmF0ZToKICAgIHN0YXRpYyBSZWFzb24gbV9yZWFz
b247CiAgICBzdGF0aWMgUmVhc29uIHByZXZfcmVhc29uOwp9OwoKCmNsYXNzIFFQYWludEV2ZW50
IDogcHVibGljIFFFdmVudAp7CnB1YmxpYzoKICAgIFFQYWludEV2ZW50KCBjb25zdCBRUmVnaW9u
JiBwYWludFJlZ2lvbiwgYm9vbCBlcmFzZWQgPSBUUlVFKQogICAgICAgIDogUUV2ZW50KFBhaW50
KSwKICAgICAgICAgIHJlYyhwYWludFJlZ2lvbi5ib3VuZGluZ1JlY3QoKSksCiAgICAgICAgICBy
ZWcocGFpbnRSZWdpb24pLAogICAgICAgICAgZXJhc2UoZXJhc2VkKXt9CiAgICBRUGFpbnRFdmVu
dCggY29uc3QgUVJlY3QgJnBhaW50UmVjdCwgYm9vbCBlcmFzZWQgPSBUUlVFICkKICAgICAgICA6
IFFFdmVudChQYWludCksCiAgICAgICAgICByZWMocGFpbnRSZWN0KSwKICAgICAgICAgIHJlZyhw
YWludFJlY3QpLAogICAgICAgICAgZXJhc2UoZXJhc2VkKXt9CiAgICBjb25zdCBRUmVjdCAmcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIHJlYzsgfQogICAgY29uc3QgUVJlZ2lvbiAmcmVnaW9uKCkgY29u
c3QgeyByZXR1cm4gcmVnOyB9CiAgICBib29sIGVyYXNlZCgpIGNvbnN0IHsgcmV0dXJuIGVyYXNl
OyB9CnByb3RlY3RlZDoKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmllbmQg
Y2xhc3MgUUJhc2VBcHBsaWNhdGlvbjsKICAgIFFSZWN0IHJlYzsKICAgIFFSZWdpb24gcmVnOwog
ICAgYm9vbCBlcmFzZTsKfTsKCgpjbGFzcyBRTW92ZUV2ZW50IDogcHVibGljIFFFdmVudAp7CnB1
YmxpYzoKICAgIFFNb3ZlRXZlbnQoIGNvbnN0IFFQb2ludCAmcG9zLCBjb25zdCBRUG9pbnQgJm9s
ZFBvcyApCiAgICAgICAgOiBRRXZlbnQoTW92ZSksIHAocG9zKSwgb2xkcChvbGRQb3MpIHt9CiAg
ICBjb25zdCBRUG9pbnQgJnBvcygpIGNvbnN0IHsgcmV0dXJuIHA7IH0KICAgIGNvbnN0IFFQb2lu
dCAmb2xkUG9zKCljb25zdCB7IHJldHVybiBvbGRwO30KcHJvdGVjdGVkOgogICAgUVBvaW50IHAs
IG9sZHA7CiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0aW9uOwogICAgZnJpZW5kIGNsYXNzIFFC
YXNlQXBwbGljYXRpb247Cn07CgoKY2xhc3MgUVJlc2l6ZUV2ZW50IDogcHVibGljIFFFdmVudAp7
CnB1YmxpYzoKICAgIFFSZXNpemVFdmVudCggY29uc3QgUVNpemUgJnNpemUsIGNvbnN0IFFTaXpl
ICZvbGRTaXplICkKICAgICAgICA6IFFFdmVudChSZXNpemUpLCBzKHNpemUpLCBvbGRzKG9sZFNp
emUpIHt9CiAgICBjb25zdCBRU2l6ZSAmc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHM7IH0KICAgIGNv
bnN0IFFTaXplICZvbGRTaXplKCljb25zdCB7IHJldHVybiBvbGRzO30KcHJvdGVjdGVkOgogICAg
UVNpemUgcywgb2xkczsKICAgIGZyaWVuZCBjbGFzcyBRQXBwbGljYXRpb247CiAgICBmcmllbmQg
Y2xhc3MgUUJhc2VBcHBsaWNhdGlvbjsKfTsKCgpjbGFzcyBRQ2xvc2VFdmVudCA6IHB1YmxpYyBR
RXZlbnQKewpwdWJsaWM6CiAgICBRQ2xvc2VFdmVudCgpCiAgICAgICAgOiBRRXZlbnQoQ2xvc2Up
LCBhY2NwdChGQUxTRSkge30KICAgIGJvb2wgaXNBY2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGFj
Y3B0OyB9CiAgICB2b2lkIGFjY2VwdCgpIHsgYWNjcHQgPSBUUlVFOyB9CiAgICB2b2lkIGlnbm9y
ZSgpIHsgYWNjcHQgPSBGQUxTRTsgfQpwcm90ZWN0ZWQ6CiAgICBib29sIGFjY3B0Owp9OwoKCmNs
YXNzIFFTaG93RXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUVNob3dFdmVudCgp
CiAgICAgICAgOiBRRXZlbnQoU2hvdykge30KfTsKCgpjbGFzcyBRSGlkZUV2ZW50IDogcHVibGlj
IFFFdmVudAp7CnB1YmxpYzoKICAgIFFIaWRlRXZlbnQoKQogICAgICAgIDogUUV2ZW50KEhpZGUp
IHt9Cn07CgpjbGFzcyBRQ29udGV4dE1lbnVFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6
CiAgICBlbnVtIFJlYXNvbiB7IE1vdXNlLCBLZXlib2FyZCwgT3RoZXIgfTsKICAgIFFDb250ZXh0
TWVudUV2ZW50KCBSZWFzb24gcmVhc29uLCBjb25zdCBRUG9pbnQgJnBvcywgY29uc3QgUVBvaW50
ICZnbG9iYWxQb3MsIGludCBzdGF0ZSApCiAgICAgICAgOiBRRXZlbnQoIENvbnRleHRNZW51ICks
IHAoIHBvcyApLCBncCggZ2xvYmFsUG9zICksIGFjY3B0KCBGQUxTRSApLCBjb25zdW0oRkFMU0Up
LAogICAgICAgIHJlYXMoIHJlYXNvbiApLCBzKCh1c2hvcnQpc3RhdGUpIHt9CiAgICBRQ29udGV4
dE1lbnVFdmVudCggUmVhc29uIHJlYXNvbiwgY29uc3QgUVBvaW50ICZwb3MsIGludCBzdGF0ZSAp
OwoKICAgIGludCB4KCkgY29uc3QgeyByZXR1cm4gcC54KCk7IH0KICAgIGludCB5KCkgY29uc3Qg
eyByZXR1cm4gcC55KCk7IH0KICAgIGludCBnbG9iYWxYKCkgY29uc3QgeyByZXR1cm4gZ3AueCgp
OyB9CiAgICBpbnQgZ2xvYmFsWSgpIGNvbnN0IHsgcmV0dXJuIGdwLnkoKTsgfQoKICAgIGNvbnN0
IFFQb2ludCYgcG9zKCkgY29uc3QgeyByZXR1cm4gcDsgfQogICAgY29uc3QgUVBvaW50JiBnbG9i
YWxQb3MoKSBjb25zdCB7IHJldHVybiBncDsgfQoKICAgIEJ1dHRvblN0YXRlIHN0YXRlKCkgY29u
c3QgeyByZXR1cm4gKEJ1dHRvblN0YXRlKSBzOyB9CiAgICBib29sIGlzQWNjZXB0ZWQoKSBjb25z
dCB7IHJldHVybiBhY2NwdDsgfQogICAgYm9vbCBpc0NvbnN1bWVkKCkgY29uc3QgeyByZXR1cm4g
Y29uc3VtOyB9CiAgICB2b2lkIGNvbnN1bWUoKSB7IGNvbnN1bSA9IFRSVUU7IH0KICAgIHZvaWQg
YWNjZXB0KCkgeyBhY2NwdCA9IFRSVUU7IGNvbnN1bSA9IFRSVUU7IH0KICAgIHZvaWQgaWdub3Jl
KCkgeyBhY2NwdCA9IEZBTFNFOyBjb25zdW0gPSBGQUxTRTsgfQoKICAgIFJlYXNvbiByZWFzb24o
KSBjb25zdCB7IHJldHVybiBSZWFzb24oIHJlYXMgKTsgfQoKcHJvdGVjdGVkOgogICAgUVBvaW50
IHA7CiAgICBRUG9pbnQgZ3A7CiAgICBib29sIGFjY3B0OwogICAgYm9vbCBjb25zdW07CiAgICB1
aW50IHJlYXM6ODsKICAgIHVzaG9ydCBzOwp9OwoKCmNsYXNzIFFJTUV2ZW50IDogcHVibGljIFFF
dmVudAp7CnB1YmxpYzoKICAgIFFJTUV2ZW50KCBUeXBlIHR5cGUsIGNvbnN0IFFTdHJpbmcgJnRl
eHQsIGludCBjdXJzb3JQb3NpdGlvbiApCiAgICAgICAgOiBRRXZlbnQodHlwZSksIHR4dCh0ZXh0
KSwgY3BvcyhjdXJzb3JQb3NpdGlvbiksIGEoRkFMU0UpIHt9CiAgICBjb25zdCBRU3RyaW5nICZ0
ZXh0KCkgY29uc3QgeyByZXR1cm4gdHh0OyB9CiAgICBpbnQgY3Vyc29yUG9zKCkgY29uc3QgeyBy
ZXR1cm4gY3BvczsgfQogICAgYm9vbCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYTsgfQog
ICAgdm9pZCBhY2NlcHQoKSB7IGEgPSBUUlVFOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgYSA9IEZB
TFNFOyB9CiAgICBpbnQgc2VsZWN0aW9uTGVuZ3RoKCkgY29uc3Q7Cgpwcml2YXRlOgogICAgUVN0
cmluZyB0eHQ7CiAgICBpbnQgY3BvczsKICAgIGJvb2wgYTsKfTsKCmNsYXNzIFFJTUNvbXBvc2VF
dmVudCA6IHB1YmxpYyBRSU1FdmVudAp7CnB1YmxpYzoKICAgIFFJTUNvbXBvc2VFdmVudCggVHlw
ZSB0eXBlLCBjb25zdCBRU3RyaW5nICZ0ZXh0LCBpbnQgY3Vyc29yUG9zaXRpb24sCiAgICAgICAg
ICAgICAgICAgICAgIGludCBzZWxMZW5ndGggKQogICAgICAgIDogUUlNRXZlbnQoIHR5cGUsIHRl
eHQsIGN1cnNvclBvc2l0aW9uICksIHNlbExlbiggc2VsTGVuZ3RoICkgeyB9Cgpwcml2YXRlOgog
ICAgaW50IHNlbExlbjsKCiAgICBmcmllbmQgY2xhc3MgUUlNRXZlbnQ7Cn07CgppbmxpbmUgaW50
IFFJTUV2ZW50OjpzZWxlY3Rpb25MZW5ndGgoKSBjb25zdAp7CiAgICBpZiAoIHR5cGUoKSAhPSBJ
TUNvbXBvc2UgKSByZXR1cm4gMDsKICAgIFFJTUNvbXBvc2VFdmVudCAqdGhhdCA9IChRSU1Db21w
b3NlRXZlbnQgKikgdGhpczsKICAgIHJldHVybiB0aGF0LT5zZWxMZW47Cn0KIyA0NzkgIi4uLy4u
L2luY2x1ZGUvcWV2ZW50LmgiCmNsYXNzIFFEcm9wRXZlbnQgOiBwdWJsaWMgUUV2ZW50LCBwdWJs
aWMgUU1pbWVTb3VyY2UKewpwdWJsaWM6CiAgICBRRHJvcEV2ZW50KCBjb25zdCBRUG9pbnQmIHBv
cywgVHlwZSB0eXA9RHJvcCApCiAgICAgICAgOiBRRXZlbnQodHlwKSwgcChwb3MpLAogICAgICAg
ICAgYWN0KDApLCBhY2NwdCgwKSwgYWNjcHRhY3QoMCksIHJlc3YoMCksCiAgICAgICAgICBkKDAp
CiAgICAgICAge30KICAgIGNvbnN0IFFQb2ludCAmcG9zKCkgY29uc3QgeyByZXR1cm4gcDsgfQog
ICAgYm9vbCBpc0FjY2VwdGVkKCkgY29uc3QgeyByZXR1cm4gYWNjcHQgfHwgYWNjcHRhY3Q7IH0K
ICAgIHZvaWQgYWNjZXB0KGJvb2wgeT1UUlVFKSB7IGFjY3B0ID0geTsgfQogICAgdm9pZCBpZ25v
cmUoKSB7IGFjY3B0ID0gRkFMU0U7IH0KCiAgICBib29sIGlzQWN0aW9uQWNjZXB0ZWQoKSBjb25z
dCB7IHJldHVybiBhY2NwdGFjdDsgfQogICAgdm9pZCBhY2NlcHRBY3Rpb24oYm9vbCB5PVRSVUUp
IHsgYWNjcHRhY3QgPSB5OyB9CiAgICBlbnVtIEFjdGlvbiB7IENvcHksIExpbmssIE1vdmUsIFBy
aXZhdGUsIFVzZXJBY3Rpb249MTAwIH07CiAgICB2b2lkIHNldEFjdGlvbiggQWN0aW9uIGEgKSB7
IGFjdCA9ICh1aW50KWE7IH0KICAgIEFjdGlvbiBhY3Rpb24oKSBjb25zdCB7IHJldHVybiBBY3Rp
b24oYWN0KTsgfQoKICAgIFFXaWRnZXQqIHNvdXJjZSgpIGNvbnN0OwogICAgY29uc3QgY2hhciog
Zm9ybWF0KCBpbnQgbiA9IDAgKSBjb25zdDsKICAgIFFCeXRlQXJyYXkgZW5jb2RlZERhdGEoIGNv
bnN0IGNoYXIqICkgY29uc3Q7CiAgICBib29sIHByb3ZpZGVzKCBjb25zdCBjaGFyKiApIGNvbnN0
OwoKICAgIFFCeXRlQXJyYXkgZGF0YShjb25zdCBjaGFyKiBmKSBjb25zdCB7IHJldHVybiBlbmNv
ZGVkRGF0YShmKTsgfQoKICAgIHZvaWQgc2V0UG9pbnQoIGNvbnN0IFFQb2ludCYgbnAgKSB7IHAg
PSBucDsgfQoKcHJvdGVjdGVkOgogICAgUVBvaW50IHA7CiAgICB1aW50IGFjdDo4OwogICAgdWlu
dCBhY2NwdDoxOwogICAgdWludCBhY2NwdGFjdDoxOwogICAgdWludCByZXN2OjU7CiAgICB2b2lk
ICogZDsKfTsKCgoKY2xhc3MgUURyYWdNb3ZlRXZlbnQgOiBwdWJsaWMgUURyb3BFdmVudAp7CnB1
YmxpYzoKICAgIFFEcmFnTW92ZUV2ZW50KCBjb25zdCBRUG9pbnQmIHBvcywgVHlwZSB0eXA9RHJh
Z01vdmUgKQogICAgICAgIDogUURyb3BFdmVudChwb3MsdHlwKSwKICAgICAgICAgIHJlY3QoIHBv
cywgUVNpemUoIDEsIDEgKSApIHt9CiAgICBRUmVjdCBhbnN3ZXJSZWN0KCkgY29uc3QgeyByZXR1
cm4gcmVjdDsgfQogICAgdm9pZCBhY2NlcHQoIGJvb2wgeT1UUlVFICkgeyBRRHJvcEV2ZW50Ojph
Y2NlcHQoeSk7IH0KICAgIHZvaWQgYWNjZXB0KCBjb25zdCBRUmVjdCAmIHIpIHsgYWNjcHQgPSBU
UlVFOyByZWN0ID0gcjsgfQogICAgdm9pZCBpZ25vcmUoIGNvbnN0IFFSZWN0ICYgcikgeyBhY2Nw
dCA9RkFMU0U7IHJlY3QgPSByOyB9CiAgICB2b2lkIGlnbm9yZSgpIHsgUURyb3BFdmVudDo6aWdu
b3JlKCk7IH0KCnByb3RlY3RlZDoKICAgIFFSZWN0IHJlY3Q7Cn07CgoKY2xhc3MgUURyYWdFbnRl
ckV2ZW50IDogcHVibGljIFFEcmFnTW92ZUV2ZW50CnsKcHVibGljOgogICAgUURyYWdFbnRlckV2
ZW50KCBjb25zdCBRUG9pbnQmIHBvcyApIDoKICAgICAgICBRRHJhZ01vdmVFdmVudChwb3MsIERy
YWdFbnRlcikgeyB9Cn07CgoKCmNsYXNzIFFEcmFnUmVzcG9uc2VFdmVudCA6IHB1YmxpYyBRRXZl
bnQKewpwdWJsaWM6CiAgICBRRHJhZ1Jlc3BvbnNlRXZlbnQoIGJvb2wgYWNjZXB0ZWQgKQogICAg
ICAgIDogUUV2ZW50KERyYWdSZXNwb25zZSksIGEoYWNjZXB0ZWQpIHt9CiAgICBib29sIGRyYWdB
Y2NlcHRlZCgpIGNvbnN0IHsgcmV0dXJuIGE7IH0KcHJvdGVjdGVkOgogICAgYm9vbCBhOwp9OwoK
CmNsYXNzIFFEcmFnTGVhdmVFdmVudCA6IHB1YmxpYyBRRXZlbnQKewpwdWJsaWM6CiAgICBRRHJh
Z0xlYXZlRXZlbnQoKQogICAgICAgIDogUUV2ZW50KERyYWdMZWF2ZSkge30KfTsKCgoKY2xhc3Mg
UUNoaWxkRXZlbnQgOiBwdWJsaWMgUUV2ZW50CnsKcHVibGljOgogICAgUUNoaWxkRXZlbnQoIFR5
cGUgdHlwZSwgUU9iamVjdCAqY2hpbGQgKQogICAgICAgIDogUUV2ZW50KHR5cGUpLCBjKGNoaWxk
KSB7fQogICAgUU9iamVjdCAqY2hpbGQoKSBjb25zdCB7IHJldHVybiBjOyB9CiAgICBib29sIGlu
c2VydGVkKCkgY29uc3QgeyByZXR1cm4gdCA9PSBDaGlsZEluc2VydGVkOyB9CiAgICBib29sIHJl
bW92ZWQoKSBjb25zdCB7IHJldHVybiB0ID09IENoaWxkUmVtb3ZlZDsgfQpwcm90ZWN0ZWQ6CiAg
ICBRT2JqZWN0ICpjOwp9OwoKCmNsYXNzIFFDdXN0b21FdmVudCA6IHB1YmxpYyBRRXZlbnQKewpw
dWJsaWM6CiAgICBRQ3VzdG9tRXZlbnQoIGludCB0eXBlICk7CiAgICBRQ3VzdG9tRXZlbnQoIFR5
cGUgdHlwZSwgdm9pZCAqZGF0YSApCiAgICAgICAgOiBRRXZlbnQodHlwZSksIGQoZGF0YSkge307
CiAgICB2b2lkICpkYXRhKCkgY29uc3QgeyByZXR1cm4gZDsgfQogICAgdm9pZCBzZXREYXRhKCB2
b2lkKiBkYXRhICkgeyBkID0gZGF0YTsgfQpwcml2YXRlOgogICAgdm9pZCAqZDsKfTsKIyA0NiAi
Li4vLi4vaW5jbHVkZS9xb2JqZWN0LmgiIDIKCgoKCgoKY2xhc3MgUU1ldGFPYmplY3Q7CmNsYXNz
IFFWYXJpYW50OwpjbGFzcyBRTWV0YVByb3BlcnR5OwpjbGFzcyBRUG9zdEV2ZW50TGlzdDsKY2xh
c3MgUVNlbmRlck9iamVjdExpc3Q7CmNsYXNzIFFPYmplY3RQcml2YXRlOwoKY2xhc3MgUU9iamVj
dFVzZXJEYXRhOwoKc3RydWN0IFFVT2JqZWN0OwoKY2xhc3MgUU9iamVjdDogcHVibGljIFF0CnsK
ICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNzTmFtZSgp
IGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1YWwgYm9v
bCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0KCBpbnQs
IFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50IGYsIFFW
YXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0KiAsIGlu
dCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRhT2JqZWN0
KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBzdGF0aWMg
UVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRpYyBRU3Ry
aW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZhdGU6IHN0
YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKICAgCgpwdWJsaWM6CiAgICBRT2JqZWN0KCBRT2Jq
ZWN0ICpwYXJlbnQ9MCwgY29uc3QgY2hhciAqbmFtZT0wICk7CiAgICB2aXJ0dWFsIH5RT2JqZWN0
KCk7CiMgNzkgIi4uLy4uL2luY2x1ZGUvcW9iamVjdC5oIgogICAgdmlydHVhbCBib29sIGV2ZW50
KCBRRXZlbnQgKiApOwogICAgdmlydHVhbCBib29sIGV2ZW50RmlsdGVyKCBRT2JqZWN0ICosIFFF
dmVudCAqICk7CgogICAgYm9vbCBpc0EoIGNvbnN0IGNoYXIgKiApIGNvbnN0OwogICAgYm9vbCBp
bmhlcml0cyggY29uc3QgY2hhciAqICkgY29uc3Q7CgogICAgY29uc3QgY2hhciAqbmFtZSgpIGNv
bnN0OwogICAgY29uc3QgY2hhciAqbmFtZSggY29uc3QgY2hhciAqIGRlZmF1bHROYW1lICkgY29u
c3Q7CgogICAgdmlydHVhbCB2b2lkIHNldE5hbWUoIGNvbnN0IGNoYXIgKm5hbWUgKTsKICAgIGJv
b2wgaXNXaWRnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gaXNXaWRnZXQ7IH0KICAgIGJvb2wgaGln
aFByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gRkFMU0U7IH0KCiAgICBib29sIHNpZ25hbHNCbG9j
a2VkKCkgY29uc3QgeyByZXR1cm4gYmxvY2tTaWc7IH0KICAgIHZvaWQgYmxvY2tTaWduYWxzKCBi
b29sIGIgKTsKCiAgICBpbnQgc3RhcnRUaW1lciggaW50IGludGVydmFsICk7CiAgICB2b2lkIGtp
bGxUaW1lciggaW50IGlkICk7CiAgICB2b2lkIGtpbGxUaW1lcnMoKTsKCiAgICBRT2JqZWN0ICpj
aGlsZCggY29uc3QgY2hhciAqb2JqTmFtZSwgY29uc3QgY2hhciAqaW5oZXJpdHNDbGFzcyA9IDAs
IGJvb2wgcmVjdXJzaXZlU2VhcmNoID0gVFJVRSApOwogICAgY29uc3QgUU9iamVjdExpc3QgKmNo
aWxkcmVuKCkgY29uc3QgeyByZXR1cm4gY2hpbGRPYmplY3RzOyB9CgogICAgc3RhdGljIGNvbnN0
IFFPYmplY3RMaXN0ICpvYmplY3RUcmVlcygpOwoKICAgIFFPYmplY3RMaXN0ICpxdWVyeUxpc3Qo
IGNvbnN0IGNoYXIgKmluaGVyaXRzQ2xhc3MgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqb2JqTmFtZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHJlZ2V4cE1hdGNoID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlU2VhcmNoID0gVFJVRSApIGNvbnN0OwoKICAgIHZp
cnR1YWwgdm9pZCBpbnNlcnRDaGlsZCggUU9iamVjdCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlQ2hpbGQoIFFPYmplY3QgKiApOwoKICAgIHZvaWQgaW5zdGFsbEV2ZW50RmlsdGVyKCBjb25z
dCBRT2JqZWN0ICogKTsKICAgIHZvaWQgcmVtb3ZlRXZlbnRGaWx0ZXIoIGNvbnN0IFFPYmplY3Qg
KiApOwoKICAgIHN0YXRpYyBib29sIGNvbm5lY3QoIGNvbnN0IFFPYmplY3QgKnNlbmRlciwgY29u
c3QgY2hhciAqc2lnbmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFPYmplY3Qg
KnJlY2VpdmVyLCBjb25zdCBjaGFyICptZW1iZXIgKTsKICAgIGJvb2wgY29ubmVjdCggY29uc3Qg
UU9iamVjdCAqc2VuZGVyLCBjb25zdCBjaGFyICpzaWduYWwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqbWVtYmVyICkgY29uc3Q7CiAgICBzdGF0aWMgYm9vbCBkaXNjb25u
ZWN0KCBjb25zdCBRT2JqZWN0ICpzZW5kZXIsIGNvbnN0IGNoYXIgKnNpZ25hbCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBRT2JqZWN0ICpyZWNlaXZlciwgY29uc3QgY2hhciAq
bWVtYmVyICk7CiAgICBib29sIGRpc2Nvbm5lY3QoIGNvbnN0IGNoYXIgKnNpZ25hbD0wLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyPTAsIGNvbnN0
IGNoYXIgKm1lbWJlcj0wICk7CiAgICBib29sIGRpc2Nvbm5lY3QoIGNvbnN0IFFPYmplY3QgKnJl
Y2VpdmVyLCBjb25zdCBjaGFyICptZW1iZXI9MCApOwogICAgc3RhdGljIHZvaWQgY29ubmVjdElu
dGVybmFsKCBjb25zdCBRT2JqZWN0ICpzZW5kZXIsIGludCBzaWduYWxfaW5kZXgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGludCBtZW1iY29kZSwg
aW50IG1lbWJlcl9pbmRleCApOwogICAgc3RhdGljIGJvb2wgZGlzY29ubmVjdEludGVybmFsKCBj
b25zdCBRT2JqZWN0ICpzZW5kZXIsIGludCBzaWduYWxfaW5kZXgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUU9iamVjdCAqcmVjZWl2ZXIsIGludCBtZW1iY29kZSwgaW50IG1l
bWJlcl9pbmRleCApOwoKICAgIHZvaWQgZHVtcE9iamVjdFRyZWUoKTsKICAgIHZvaWQgZHVtcE9i
amVjdEluZm8oKTsKCgogICAgdmlydHVhbCBib29sIHNldFByb3BlcnR5KCBjb25zdCBjaGFyICpu
YW1lLCBjb25zdCBRVmFyaWFudCYgdmFsdWUgKTsKICAgIHZpcnR1YWwgUVZhcmlhbnQgcHJvcGVy
dHkoIGNvbnN0IGNoYXIgKm5hbWUgKSBjb25zdDsKIyAxNDQgIi4uLy4uL2luY2x1ZGUvcW9iamVj
dC5oIgogICAgc3RhdGljIHVpbnQgcmVnaXN0ZXJVc2VyRGF0YSgpOwogICAgdm9pZCBzZXRVc2Vy
RGF0YSggdWludCBpZCwgUU9iamVjdFVzZXJEYXRhKiBkYXRhKTsKICAgIFFPYmplY3RVc2VyRGF0
YSogdXNlckRhdGEoIHVpbnQgaWQgKSBjb25zdDsKCgpwcm90ZWN0ZWQ6CiAgICB2b2lkIGRlc3Ry
b3llZCgpOwogICAgdm9pZCBkZXN0cm95ZWQoIFFPYmplY3QqIG9iaiApOwoKcHVibGljOgogICAg
UU9iamVjdCAqcGFyZW50KCkgY29uc3QgeyByZXR1cm4gcGFyZW50T2JqOyB9CgpwdWJsaWMgOgog
ICAgdm9pZCBkZWxldGVMYXRlcigpOwoKcHJpdmF0ZSA6CiAgICB2b2lkIGNsZWFudXBFdmVudEZp
bHRlciggUU9iamVjdCogKTsKCnByb3RlY3RlZDoKICAgIGJvb2wgYWN0aXZhdGVfZmlsdGVycygg
UUV2ZW50ICogKTsKICAgIFFDb25uZWN0aW9uTGlzdCAqcmVjZWl2ZXJzKCBjb25zdCBjaGFyKiBz
aWduYWwgKSBjb25zdDsKICAgIFFDb25uZWN0aW9uTGlzdCAqcmVjZWl2ZXJzKCBpbnQgc2lnbmFs
ICkgY29uc3Q7CiAgICB2b2lkIGFjdGl2YXRlX3NpZ25hbCggaW50IHNpZ25hbCApOwogICAgdm9p
ZCBhY3RpdmF0ZV9zaWduYWwoIGludCBzaWduYWwsIGludCApOwogICAgdm9pZCBhY3RpdmF0ZV9z
aWduYWwoIGludCBzaWduYWwsIGRvdWJsZSApOwogICAgdm9pZCBhY3RpdmF0ZV9zaWduYWwoIGlu
dCBzaWduYWwsIFFTdHJpbmcgKTsKICAgIHZvaWQgYWN0aXZhdGVfc2lnbmFsX2Jvb2woIGludCBz
aWduYWwsIGJvb2wgKTsKICAgIHZvaWQgYWN0aXZhdGVfc2lnbmFsKCBRQ29ubmVjdGlvbkxpc3Qg
KmNsaXN0LCBRVU9iamVjdCAqbyApOwoKICAgIGNvbnN0IFFPYmplY3QgKnNlbmRlcigpOwoKICAg
IHZpcnR1YWwgdm9pZCB0aW1lckV2ZW50KCBRVGltZXJFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZv
aWQgY2hpbGRFdmVudCggUUNoaWxkRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGN1c3RvbUV2
ZW50KCBRQ3VzdG9tRXZlbnQgKiApOwoKICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0Tm90aWZ5KCBj
b25zdCBjaGFyICpzaWduYWwgKTsKICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0Tm90aWZ5KCBj
b25zdCBjaGFyICpzaWduYWwgKTsKICAgIHZpcnR1YWwgYm9vbCBjaGVja0Nvbm5lY3RBcmdzKCBj
b25zdCBjaGFyICpzaWduYWwsIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1lbWJlciApOwogICAgc3RhdGljIFFD
U3RyaW5nIG5vcm1hbGl6ZVNpZ25hbFNsb3QoIGNvbnN0IGNoYXIgKnNpZ25hbFNsb3QgKTsKCnBy
aXZhdGU6CiAgICB1aW50IGlzU2lnbmFsIDogMTsKICAgIHVpbnQgaXNXaWRnZXQgOiAxOwogICAg
dWludCBwZW5kVGltZXIgOiAxOwogICAgdWludCBibG9ja1NpZyA6IDE7CiAgICB1aW50IHdhc0Rl
bGV0ZWQgOiAxOwogICAgdWludCBpc1RyZWUgOiAxOwoKICAgIGNvbnN0IGNoYXIgKm9iam5hbWU7
CiAgICBRT2JqZWN0ICpwYXJlbnRPYmo7CiAgICBRT2JqZWN0TGlzdCAqY2hpbGRPYmplY3RzOwog
ICAgUVNpZ25hbFZlYyAqY29ubmVjdGlvbnM7CiAgICBRU2VuZGVyT2JqZWN0TGlzdCAqc2VuZGVy
T2JqZWN0czsKICAgIFFPYmplY3RMaXN0ICpldmVudEZpbHRlcnM7CiAgICBRUG9zdEV2ZW50TGlz
dCAqcG9zdGVkRXZlbnRzOwogICAgUU9iamVjdFByaXZhdGUqIGQ7CgogICAgc3RhdGljIFFNZXRh
T2JqZWN0KiBzdGF0aWNRdE1ldGFPYmplY3QoKTsKCiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0
aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xhc3Mg
UVdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRU2lnbmFsOwoKcHJpdmF0ZToKCiAgICBRT2JqZWN0
KCBjb25zdCBRT2JqZWN0ICYgKTsKICAgIFFPYmplY3QgJm9wZXJhdG9yPSggY29uc3QgUU9iamVj
dCAmICk7Cgp9OwoKCgpjbGFzcyBRT2JqZWN0VXNlckRhdGEgewpwdWJsaWM6CiAgICB2aXJ0dWFs
IH5RT2JqZWN0VXNlckRhdGEoKTsKfTsKCgoKaW5saW5lIGJvb2wgUU9iamVjdDo6Y29ubmVjdCgg
Y29uc3QgUU9iamVjdCAqc2VuZGVyLCBjb25zdCBjaGFyICpzaWduYWwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1lbWJlciApIGNvbnN0CnsKICAgIHJldHVybiBj
b25uZWN0KCBzZW5kZXIsIHNpZ25hbCwgdGhpcywgbWVtYmVyICk7Cn0KCgppbmxpbmUgYm9vbCBR
T2JqZWN0OjpkaXNjb25uZWN0KCBjb25zdCBjaGFyICpzaWduYWwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFFPYmplY3QgKnJlY2VpdmVyLCBjb25zdCBjaGFyICptZW1i
ZXIgKQp7CiAgICByZXR1cm4gZGlzY29ubmVjdCggdGhpcywgc2lnbmFsLCByZWNlaXZlciwgbWVt
YmVyICk7Cn0KCgppbmxpbmUgYm9vbCBRT2JqZWN0OjpkaXNjb25uZWN0KCBjb25zdCBRT2JqZWN0
ICpyZWNlaXZlciwgY29uc3QgY2hhciAqbWVtYmVyICkKewogICAgcmV0dXJuIGRpc2Nvbm5lY3Qo
IHRoaXMsIDAsIHJlY2VpdmVyLCBtZW1iZXIgKTsKfQojIDI4ICJpbmRleC5oIiAyCgpzdHJ1Y3Qg
RG9jdW1lbnQgewogICAgRG9jdW1lbnQoIGludCBkLCBpbnQgZiApIDogZG9jTnVtYmVyKCBkICks
IGZyZXF1ZW5jeSggZiApIHt9CiAgICBEb2N1bWVudCgpIDogZG9jTnVtYmVyKCAtMSApLCBmcmVx
dWVuY3koIDAgKSB7fQogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBEb2N1bWVudCAmZG9jICkg
Y29uc3QgewogICAgICAgIHJldHVybiBkb2NOdW1iZXIgPT0gZG9jLmRvY051bWJlcjsKICAgIH0K
ICAgIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBEb2N1bWVudCAmZG9jICkgY29uc3QgewogICAgICAg
IHJldHVybiBmcmVxdWVuY3kgPiBkb2MuZnJlcXVlbmN5OwogICAgfQogICAgYm9vbCBvcGVyYXRv
cjw9KCBjb25zdCBEb2N1bWVudCAmZG9jICkgY29uc3QgewogICAgICAgIHJldHVybiBmcmVxdWVu
Y3kgPj0gZG9jLmZyZXF1ZW5jeTsKICAgIH0KICAgIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBEb2N1
bWVudCAmZG9jICkgY29uc3QgewogICAgICAgIHJldHVybiBmcmVxdWVuY3kgPCBkb2MuZnJlcXVl
bmN5OwogICAgfQogICAgUV9JTlQxNiBkb2NOdW1iZXI7CiAgICBRX0lOVDE2IGZyZXF1ZW5jeTsK
fTsKClFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmcywgRG9jdW1lbnQgJmwg
KTsKUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICZzLCBjb25zdCBEb2N1bWVu
dCAmbCApOwoKY2xhc3MgSW5kZXggOiBwdWJsaWMgUU9iamVjdAp7CiAgICBwdWJsaWM6IHZpcnR1
YWwgUU1ldGFPYmplY3QgKm1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2Jq
ZWN0KCk7IH0gdmlydHVhbCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2
b2lkKiBxdF9jYXN0KCBjb25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQs
IFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmly
dHVhbCBib29sIHF0X3Byb3BlcnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRp
YyBib29sIHF0X3N0YXRpY19wcm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQq
ICk7IHN0YXRpYyBRTWV0YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2Jq
ZWN0KCkgeyByZXR1cm4gKFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0
IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0
IGNoYXIgKiwgY29uc3QgY2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3Qg
Km1ldGFPYmo7CnB1YmxpYzoKICAgIHN0cnVjdCBFbnRyeSB7CiAgICAgICAgRW50cnkoIGludCBk
ICkgeyBkb2N1bWVudHMuYXBwZW5kKCBEb2N1bWVudCggZCwgMSApICk7IH0KICAgICAgICBFbnRy
eSggUVZhbHVlTGlzdDxEb2N1bWVudD4gbCApIDogZG9jdW1lbnRzKCBsICkge30KICAgICAgICBR
VmFsdWVMaXN0PERvY3VtZW50PiBkb2N1bWVudHM7CiAgICB9OwogICAgc3RydWN0IFBvc0VudHJ5
IHsKICAgICAgICBQb3NFbnRyeSggaW50IHAgKSB7IHBvc2l0aW9ucy5hcHBlbmQoIHAgKTsgfQog
ICAgICAgIFFWYWx1ZUxpc3Q8dWludD4gcG9zaXRpb25zOwogICAgfTsKCiAgICBJbmRleCggY29u
c3QgUVN0cmluZyAmZHAsIGNvbnN0IFFTdHJpbmcgJmhwICk7CiAgICBJbmRleCggY29uc3QgUVN0
cmluZ0xpc3QgJmRsLCBjb25zdCBRU3RyaW5nICZocCApOwogICAgdm9pZCB3cml0ZURpY3QoKTsK
ICAgIHZvaWQgcmVhZERpY3QoKTsKICAgIGludCBtYWtlSW5kZXgoKTsKICAgIFFTdHJpbmdMaXN0
IHF1ZXJ5KCBjb25zdCBRU3RyaW5nTGlzdCYsIGNvbnN0IFFTdHJpbmdMaXN0JiwgY29uc3QgUVN0
cmluZ0xpc3QmICk7CiAgICBRU3RyaW5nIGdldERvY3VtZW50VGl0bGUoIGNvbnN0IFFTdHJpbmcm
ICk7CiAgICB2b2lkIHNldERpY3Rpb25hcnlGaWxlKCBjb25zdCBRU3RyaW5nJiApOwogICAgdm9p
ZCBzZXREb2NMaXN0RmlsZSggY29uc3QgUVN0cmluZyYgKTsKCnByb3RlY3RlZDoKICAgIHZvaWQg
aW5kZXhpbmdQcm9ncmVzcyggaW50ICk7Cgpwcml2YXRlIDoKICAgIHZvaWQgc2V0TGFzdFdpbkNs
b3NlZCgpOwoKcHJpdmF0ZToKICAgIHZvaWQgc2V0dXBEb2N1bWVudExpc3QoKTsKICAgIHZvaWQg
cGFyc2VEb2N1bWVudCggY29uc3QgUVN0cmluZyYsIGludCApOwogICAgdm9pZCBpbnNlcnRJbkRp
Y3QoIGNvbnN0IGNoYXIqLCBpbnQgKTsKICAgIHZvaWQgd3JpdGVEb2N1bWVudExpc3QoKTsKICAg
IHZvaWQgcmVhZERvY3VtZW50TGlzdCgpOwogICAgUVN0cmluZ0xpc3QgZ2V0V2lsZGNhcmRUZXJt
cyggY29uc3QgUVN0cmluZyYgKTsKICAgIFFWYWx1ZUxpc3Q8UUNTdHJpbmc+IHNwbGl0KCBjb25z
dCBRU3RyaW5nJiApOwogICAgUVZhbHVlTGlzdDxEb2N1bWVudD4gc2V0dXBEdW1teVRlcm0oIGNv
bnN0IFFTdHJpbmdMaXN0JiApOwogICAgYm9vbCBzZWFyY2hGb3JQYXR0ZXJuKCBjb25zdCBRU3Ry
aW5nTGlzdCYsIGNvbnN0IFFTdHJpbmdMaXN0JiwgY29uc3QgUVN0cmluZyYgKTsKICAgIHZvaWQg
YnVpbGRNaW5pRGljdCggY29uc3QgY2hhciogKTsKICAgIFFTdHJpbmdMaXN0IGRvY0xpc3Q7CiAg
ICBRQXNjaWlEaWN0PEVudHJ5PiBkaWN0OwogICAgUUFzY2lpRGljdDxQb3NFbnRyeT4gbWluaURp
Y3Q7CiAgICB1aW50IHdvcmROdW07CiAgICBRU3RyaW5nIGRvY1BhdGgsIGhvbWVQYXRoOwogICAg
UVN0cmluZyBkaWN0RmlsZSwgZG9jTGlzdEZpbGU7CiAgICBib29sIGFscmVhZHlIYXZlRG9jTGlz
dDsKICAgIGJvb2wgbGFzdFdpbmRvd0Nsb3NlZDsKfTsKCnN0cnVjdCBUZXJtIHsKICAgIFRlcm0o
IGNvbnN0IGNoYXIgKnQsIGludCBmLCBRVmFsdWVMaXN0PERvY3VtZW50PiBsICkKICAgICAgICA6
IHRlcm0oIHQgKSwgZnJlcXVlbmN5KCBmICksIGRvY3VtZW50cyggbCApIHt9CiAgICBjb25zdCBj
aGFyKiB0ZXJtOwogICAgaW50IGZyZXF1ZW5jeTsKICAgIFFWYWx1ZUxpc3Q8RG9jdW1lbnQ+ZG9j
dW1lbnRzOwp9OwoKY2xhc3MgVGVybUxpc3QgOiBwdWJsaWMgUVB0ckxpc3Q8VGVybT4KewpwdWJs
aWM6CiAgICBUZXJtTGlzdCgpIDogUVB0ckxpc3Q8VGVybT4oKSB7fQogICAgaW50IGNvbXBhcmVJ
dGVtcyggUVB0ckNvbGxlY3Rpb246Okl0ZW0gaTEsIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGkyICk7
Cn07CiMgMjIgImluZGV4LmNwcCIgMgoKIyAxICIuLi8uLi9pbmNsdWRlL3FmaWxlLmgiIDEKIyA0
NyAiLi4vLi4vaW5jbHVkZS9xZmlsZS5oIgpjbGFzcyBRRGlyOwoKCmNsYXNzIFFGaWxlIDogcHVi
bGljIFFJT0RldmljZQp7CnB1YmxpYzoKICAgIFFGaWxlKCk7CiAgICBRRmlsZSggY29uc3QgUVN0
cmluZyAmbmFtZSApOwogICB+UUZpbGUoKTsKCiAgICBRU3RyaW5nIG5hbWUoKSBjb25zdDsKICAg
IHZvaWQgc2V0TmFtZSggY29uc3QgUVN0cmluZyAmbmFtZSApOwoKICAgIHR5cGVkZWYgUUNTdHJp
bmcgKCpFbmNvZGVyRm4pKCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSApOwogICAgdHlwZWRlZiBR
U3RyaW5nICgqRGVjb2RlckZuKSggY29uc3QgUUNTdHJpbmcgJmxvY2FsZmlsZU5hbWUgKTsKICAg
IHN0YXRpYyBRQ1N0cmluZyBlbmNvZGVOYW1lKCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSApOwog
ICAgc3RhdGljIFFTdHJpbmcgZGVjb2RlTmFtZSggY29uc3QgUUNTdHJpbmcgJmxvY2FsRmlsZU5h
bWUgKTsKICAgIHN0YXRpYyB2b2lkIHNldEVuY29kaW5nRnVuY3Rpb24oIEVuY29kZXJGbiApOwog
ICAgc3RhdGljIHZvaWQgc2V0RGVjb2RpbmdGdW5jdGlvbiggRGVjb2RlckZuICk7CgogICAgYm9v
bCBleGlzdHMoKSBjb25zdDsKICAgIHN0YXRpYyBib29sIGV4aXN0cyggY29uc3QgUVN0cmluZyAm
ZmlsZU5hbWUgKTsKCiAgICBib29sIHJlbW92ZSgpOwogICAgc3RhdGljIGJvb2wgcmVtb3ZlKCBj
b25zdCBRU3RyaW5nICZmaWxlTmFtZSApOwoKICAgIGJvb2wgb3BlbiggaW50ICk7CiAgICBib29s
IG9wZW4oIGludCwgRklMRSAqICk7CiAgICBib29sIG9wZW4oIGludCwgaW50ICk7CiAgICB2b2lk
IGNsb3NlKCk7CiAgICB2b2lkIGZsdXNoKCk7CgogICAgT2Zmc2V0IHNpemUoKSBjb25zdDsKICAg
IE9mZnNldCBhdCgpIGNvbnN0OwogICAgYm9vbCBhdCggT2Zmc2V0ICk7CiAgICBib29sIGF0RW5k
KCkgY29uc3Q7CgogICAgUV9MT05HIHJlYWRCbG9jayggY2hhciAqZGF0YSwgUV9VTE9ORyBsZW4g
KTsKICAgIFFfTE9ORyB3cml0ZUJsb2NrKCBjb25zdCBjaGFyICpkYXRhLCBRX1VMT05HIGxlbiAp
OwogICAgUV9MT05HIHdyaXRlQmxvY2soIGNvbnN0IFFCeXRlQXJyYXkmIGRhdGEgKQogICAgICAg
ICAgICAgICAgICAgICAgeyByZXR1cm4gUUlPRGV2aWNlOjp3cml0ZUJsb2NrKGRhdGEpOyB9CiAg
ICBRX0xPTkcgcmVhZExpbmUoIGNoYXIgKmRhdGEsIFFfVUxPTkcgbWF4bGVuICk7CiAgICBRX0xP
TkcgcmVhZExpbmUoIFFTdHJpbmcgJiwgUV9VTE9ORyBtYXhsZW4gKTsKCiAgICBpbnQgZ2V0Y2go
KTsKICAgIGludCBwdXRjaCggaW50ICk7CiAgICBpbnQgdW5nZXRjaCggaW50ICk7CgogICAgaW50
IGhhbmRsZSgpIGNvbnN0OwoKcHJvdGVjdGVkOgogICAgUVN0cmluZyBmbjsKICAgIEZJTEUgKmZo
OwogICAgaW50IGZkOwogICAgT2Zmc2V0IGxlbmd0aDsKICAgIGJvb2wgZXh0X2Y7CiAgICB2b2lk
ICogZDsKCnByaXZhdGU6CiAgICB2b2lkIGluaXQoKTsKICAgIFFDU3RyaW5nIHVuZ2V0Y2hCdWZm
ZXI7Cgpwcml2YXRlOgoKICAgIFFGaWxlKCBjb25zdCBRRmlsZSAmICk7CiAgICBRRmlsZSAmb3Bl
cmF0b3I9KCBjb25zdCBRRmlsZSAmICk7Cgp9OwoKCmlubGluZSBRU3RyaW5nIFFGaWxlOjpuYW1l
KCkgY29uc3QKeyByZXR1cm4gZm47IH0KCmlubGluZSBRSU9EZXZpY2U6Ok9mZnNldCBRRmlsZTo6
YXQoKSBjb25zdAp7IHJldHVybiBpb0luZGV4OyB9CiMgMjQgImluZGV4LmNwcCIgMgojIDEgIi4u
Ly4uL2luY2x1ZGUvcWRpci5oIiAxCiMgNDIgIi4uLy4uL2luY2x1ZGUvcWRpci5oIgojIDEgIi4u
Ly4uL2luY2x1ZGUvcWdsb2JhbC5oIiAxCiMgNDMgIi4uLy4uL2luY2x1ZGUvcWRpci5oIiAyCgoj
IDEgIi4uLy4uL2luY2x1ZGUvcWZpbGVpbmZvLmgiIDEKIyA0MyAiLi4vLi4vaW5jbHVkZS9xZmls
ZWluZm8uaCIKIyAxICIuLi8uLi9pbmNsdWRlL3FkYXRldGltZS5oIiAxCiMgNTEgIi4uLy4uL2lu
Y2x1ZGUvcWRhdGV0aW1lLmgiCmNsYXNzIFFEYXRlCnsKcHVibGljOgogICAgUURhdGUoKSB7IGpk
ID0gMDsgfQogICAgUURhdGUoIGludCB5LCBpbnQgbSwgaW50IGQgKTsKCiAgICBib29sIGlzTnVs
bCgpIGNvbnN0IHsgcmV0dXJuIGpkID09IDA7IH0KICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwoK
ICAgIGludCB5ZWFyKCkgY29uc3Q7CiAgICBpbnQgbW9udGgoKSBjb25zdDsKICAgIGludCBkYXko
KSBjb25zdDsKICAgIGludCBkYXlPZldlZWsoKSBjb25zdDsKICAgIGludCBkYXlPZlllYXIoKSBj
b25zdDsKICAgIGludCBkYXlzSW5Nb250aCgpIGNvbnN0OwogICAgaW50IGRheXNJblllYXIoKSBj
b25zdDsKICAgIGludCB3ZWVrTnVtYmVyKCBpbnQgKnllYXJOdW0gPSAwICkgY29uc3Q7CgoKCiAg
ICBzdGF0aWMgUVN0cmluZyBtb250aE5hbWUoIGludCBtb250aCApIHsgcmV0dXJuIHNob3J0TW9u
dGhOYW1lKCBtb250aCApOyB9CiAgICBzdGF0aWMgUVN0cmluZyBkYXlOYW1lKCBpbnQgd2Vla2Rh
eSApIHsgcmV0dXJuIHNob3J0RGF5TmFtZSggd2Vla2RheSApOyB9CgogICAgc3RhdGljIFFTdHJp
bmcgc2hvcnRNb250aE5hbWUoIGludCBtb250aCApOwogICAgc3RhdGljIFFTdHJpbmcgc2hvcnRE
YXlOYW1lKCBpbnQgd2Vla2RheSApOwogICAgc3RhdGljIFFTdHJpbmcgbG9uZ01vbnRoTmFtZSgg
aW50IG1vbnRoICk7CiAgICBzdGF0aWMgUVN0cmluZyBsb25nRGF5TmFtZSggaW50IHdlZWtkYXkg
KTsKCgoKICAgIFFTdHJpbmcgdG9TdHJpbmcoIFF0OjpEYXRlRm9ybWF0IGYgPSBRdDo6VGV4dERh
dGUgKSBjb25zdDsKCiAgICBRU3RyaW5nIHRvU3RyaW5nKCBjb25zdCBRU3RyaW5nJiBmb3JtYXQg
KSBjb25zdDsKCiAgICBib29sIHNldFlNRCggaW50IHksIGludCBtLCBpbnQgZCApOwoKICAgIFFE
YXRlIGFkZERheXMoIGludCBkYXlzICkgY29uc3Q7CiAgICBRRGF0ZSBhZGRNb250aHMoIGludCBt
b250aHMgKSBjb25zdDsKICAgIFFEYXRlIGFkZFllYXJzKCBpbnQgeWVhcnMgKSBjb25zdDsKICAg
IGludCBkYXlzVG8oIGNvbnN0IFFEYXRlICYgKSBjb25zdDsKCiAgICBib29sIG9wZXJhdG9yPT0o
IGNvbnN0IFFEYXRlICZkICkgY29uc3QgeyByZXR1cm4gamQgPT0gZC5qZDsgfQogICAgYm9vbCBv
cGVyYXRvciE9KCBjb25zdCBRRGF0ZSAmZCApIGNvbnN0IHsgcmV0dXJuIGpkICE9IGQuamQ7IH0K
ICAgIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRRGF0ZSAmZCApIGNvbnN0IHsgcmV0dXJuIGpkIDwg
ZC5qZDsgfQogICAgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBRRGF0ZSAmZCApIGNvbnN0IHsgcmV0
dXJuIGpkIDw9IGQuamQ7IH0KICAgIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBRRGF0ZSAmZCApIGNv
bnN0IHsgcmV0dXJuIGpkID4gZC5qZDsgfQogICAgYm9vbCBvcGVyYXRvcj49KCBjb25zdCBRRGF0
ZSAmZCApIGNvbnN0IHsgcmV0dXJuIGpkID49IGQuamQ7IH0KCiAgICBzdGF0aWMgUURhdGUgY3Vy
cmVudERhdGUoKTsKICAgIHN0YXRpYyBRRGF0ZSBjdXJyZW50RGF0ZSggUXQ6OlRpbWVTcGVjICk7
CgogICAgc3RhdGljIFFEYXRlIGZyb21TdHJpbmcoIGNvbnN0IFFTdHJpbmcmIHMsIFF0OjpEYXRl
Rm9ybWF0IGYgPSBRdDo6VGV4dERhdGUgKTsKCiAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkKCBpbnQg
eSwgaW50IG0sIGludCBkICk7CiAgICBzdGF0aWMgYm9vbCBsZWFwWWVhciggaW50IHllYXIgKTsK
CiAgICBzdGF0aWMgdWludCBncmVnb3JpYW5Ub0p1bGlhbiggaW50IHksIGludCBtLCBpbnQgZCAp
OwogICAgc3RhdGljIHZvaWQganVsaWFuVG9HcmVnb3JpYW4oIHVpbnQgamQsIGludCAmeSwgaW50
ICZtLCBpbnQgJmQgKTsKcHJpdmF0ZToKICAgIHVpbnQgamQ7CiAgICBmcmllbmQgY2xhc3MgUURh
dGVUaW1lOwoKICAgIGZyaWVuZCBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0g
JiwgY29uc3QgUURhdGUgJiApOwogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBR
RGF0YVN0cmVhbSAmLCBRRGF0ZSAmICk7Cgp9OwoKCgoKCgpjbGFzcyBRVGltZQp7CnB1YmxpYzoK
ICAgIFFUaW1lKCkgeyBkcz0wOyB9CiAgICBRVGltZSggaW50IGgsIGludCBtLCBpbnQgcz0wLCBp
bnQgbXM9MCApOwoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gZHMgPT0gMDsgfQog
ICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CgogICAgaW50IGhvdXIoKSBjb25zdDsKICAgIGludCBt
aW51dGUoKSBjb25zdDsKICAgIGludCBzZWNvbmQoKSBjb25zdDsKICAgIGludCBtc2VjKCkgY29u
c3Q7CgoKICAgIFFTdHJpbmcgdG9TdHJpbmcoIFF0OjpEYXRlRm9ybWF0IGYgPSBRdDo6VGV4dERh
dGUgKSBjb25zdDsKCiAgICBRU3RyaW5nIHRvU3RyaW5nKCBjb25zdCBRU3RyaW5nJiBmb3JtYXQg
KSBjb25zdDsKCiAgICBib29sIHNldEhNUyggaW50IGgsIGludCBtLCBpbnQgcywgaW50IG1zPTAg
KTsKCiAgICBRVGltZSBhZGRTZWNzKCBpbnQgc2VjcyApIGNvbnN0OwogICAgaW50IHNlY3NUbygg
Y29uc3QgUVRpbWUgJiApIGNvbnN0OwogICAgUVRpbWUgYWRkTVNlY3MoIGludCBtcyApIGNvbnN0
OwogICAgaW50IG1zZWNzVG8oIGNvbnN0IFFUaW1lICYgKSBjb25zdDsKCiAgICBib29sIG9wZXJh
dG9yPT0oIGNvbnN0IFFUaW1lICZkICkgY29uc3QgeyByZXR1cm4gZHMgPT0gZC5kczsgfQogICAg
Ym9vbCBvcGVyYXRvciE9KCBjb25zdCBRVGltZSAmZCApIGNvbnN0IHsgcmV0dXJuIGRzICE9IGQu
ZHM7IH0KICAgIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRVGltZSAmZCApIGNvbnN0IHsgcmV0dXJu
IGRzIDwgZC5kczsgfQogICAgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBRVGltZSAmZCApIGNvbnN0
IHsgcmV0dXJuIGRzIDw9IGQuZHM7IH0KICAgIGJvb2wgb3BlcmF0b3I+KCBjb25zdCBRVGltZSAm
ZCApIGNvbnN0IHsgcmV0dXJuIGRzID4gZC5kczsgfQogICAgYm9vbCBvcGVyYXRvcj49KCBjb25z
dCBRVGltZSAmZCApIGNvbnN0IHsgcmV0dXJuIGRzID49IGQuZHM7IH0KCiAgICBzdGF0aWMgUVRp
bWUgY3VycmVudFRpbWUoKTsKICAgIHN0YXRpYyBRVGltZSBjdXJyZW50VGltZSggUXQ6OlRpbWVT
cGVjICk7CgogICAgc3RhdGljIFFUaW1lIGZyb21TdHJpbmcoIGNvbnN0IFFTdHJpbmcmIHMsIFF0
OjpEYXRlRm9ybWF0IGYgPSBRdDo6VGV4dERhdGUgKTsKCiAgICBzdGF0aWMgYm9vbCBpc1ZhbGlk
KCBpbnQgaCwgaW50IG0sIGludCBzLCBpbnQgbXM9MCApOwoKICAgIHZvaWQgc3RhcnQoKTsKICAg
IGludCByZXN0YXJ0KCk7CiAgICBpbnQgZWxhcHNlZCgpIGNvbnN0OwoKcHJpdmF0ZToKICAgIHN0
YXRpYyBib29sIGN1cnJlbnRUaW1lKCBRVGltZSAqICk7CiAgICBzdGF0aWMgYm9vbCBjdXJyZW50
VGltZSggUVRpbWUgKiwgUXQ6OlRpbWVTcGVjICk7CgogICAgdWludCBkczsKICAgIGZyaWVuZCBj
bGFzcyBRRGF0ZVRpbWU7CgogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0
YVN0cmVhbSAmLCBjb25zdCBRVGltZSAmICk7CiAgICBmcmllbmQgUURhdGFTdHJlYW0gJm9wZXJh
dG9yPj4oIFFEYXRhU3RyZWFtICYsIFFUaW1lICYgKTsKCn07CgoKCgoKCmNsYXNzIFFEYXRlVGlt
ZQp7CnB1YmxpYzoKICAgIFFEYXRlVGltZSgpIHt9CiAgICBRRGF0ZVRpbWUoIGNvbnN0IFFEYXRl
ICYgKTsKICAgIFFEYXRlVGltZSggY29uc3QgUURhdGUgJiwgY29uc3QgUVRpbWUgJiApOwoKICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gZC5pc051bGwoKSAmJiB0LmlzTnVsbCgpOyB9
CiAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBkLmlzVmFsaWQoKSAmJiB0LmlzVmFs
aWQoKTsgfQoKICAgIFFEYXRlIGRhdGUoKSBjb25zdCB7IHJldHVybiBkOyB9CiAgICBRVGltZSB0
aW1lKCkgY29uc3QgeyByZXR1cm4gdDsgfQogICAgdWludCB0b1RpbWVfdCgpIGNvbnN0OwogICAg
dm9pZCBzZXREYXRlKCBjb25zdCBRRGF0ZSAmZGF0ZSApIHsgZCA9IGRhdGU7IH0KICAgIHZvaWQg
c2V0VGltZSggY29uc3QgUVRpbWUgJnRpbWUgKSB7IHQgPSB0aW1lOyB9CiAgICB2b2lkIHNldFRp
bWVfdCggdWludCBzZWNzU2luY2UxSmFuMTk3MFVUQyApOwogICAgdm9pZCBzZXRUaW1lX3QoIHVp
bnQgc2Vjc1NpbmNlMUphbjE5NzBVVEMsIFF0OjpUaW1lU3BlYyApOwoKCiAgICBRU3RyaW5nIHRv
U3RyaW5nKCBRdDo6RGF0ZUZvcm1hdCBmID0gUXQ6OlRleHREYXRlICkgY29uc3Q7CgogICAgUVN0
cmluZyB0b1N0cmluZyggY29uc3QgUVN0cmluZyYgZm9ybWF0ICkgY29uc3Q7CgogICAgUURhdGVU
aW1lIGFkZERheXMoIGludCBkYXlzICkgY29uc3Q7CiAgICBRRGF0ZVRpbWUgYWRkTW9udGhzKCBp
bnQgbW9udGhzICkgY29uc3Q7CiAgICBRRGF0ZVRpbWUgYWRkWWVhcnMoIGludCB5ZWFycyApIGNv
bnN0OwogICAgUURhdGVUaW1lIGFkZFNlY3MoIGludCBzZWNzICkgY29uc3Q7CiAgICBpbnQgZGF5
c1RvKCBjb25zdCBRRGF0ZVRpbWUgJiApIGNvbnN0OwogICAgaW50IHNlY3NUbyggY29uc3QgUURh
dGVUaW1lICYgKSBjb25zdDsKCiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFEYXRlVGltZSAm
ZHQgKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUURhdGVUaW1lICZkdCApIGNv
bnN0OwogICAgYm9vbCBvcGVyYXRvcjwoIGNvbnN0IFFEYXRlVGltZSAmZHQgKSBjb25zdDsKICAg
IGJvb2wgb3BlcmF0b3I8PSggY29uc3QgUURhdGVUaW1lICZkdCApIGNvbnN0OwogICAgYm9vbCBv
cGVyYXRvcj4oIGNvbnN0IFFEYXRlVGltZSAmZHQgKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3I+
PSggY29uc3QgUURhdGVUaW1lICZkdCApIGNvbnN0OwoKICAgIHN0YXRpYyBRRGF0ZVRpbWUgY3Vy
cmVudERhdGVUaW1lKCk7CiAgICBzdGF0aWMgUURhdGVUaW1lIGN1cnJlbnREYXRlVGltZSggUXQ6
OlRpbWVTcGVjICk7CgogICAgc3RhdGljIFFEYXRlVGltZSBmcm9tU3RyaW5nKCBjb25zdCBRU3Ry
aW5nJiBzLCBRdDo6RGF0ZUZvcm1hdCBmID0gUXQ6OlRleHREYXRlICk7Cgpwcml2YXRlOgogICAg
UURhdGUgZDsKICAgIFFUaW1lIHQ7CgogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8
KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRRGF0ZVRpbWUgJik7CiAgICBmcmllbmQgUURhdGFTdHJl
YW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYsIFFEYXRlVGltZSAmICk7Cgp9OwoKCgoKCgoK
IFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRRGF0ZSAmICk7
CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUURhdGUgJiApOwogUURh
dGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFUaW1lICYgKTsKIFFE
YXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRVGltZSAmICk7CiBRRGF0YVN0
cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUURhdGVUaW1lICYgKTsKIFFE
YXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRRGF0ZVRpbWUgJiApOwojIDQ0
ICIuLi8uLi9pbmNsdWRlL3FmaWxlaW5mby5oIiAyCgoKCmNsYXNzIFFEaXI7CnN0cnVjdCBRRmls
ZUluZm9DYWNoZTsKCgpjbGFzcyBRRmlsZUluZm8KewpwdWJsaWM6CiAgICBlbnVtIFBlcm1pc3Np
b25TcGVjIHsKICAgICAgICBSZWFkVXNlciA9IDA0MDAsIFdyaXRlVXNlciA9IDAyMDAsIEV4ZVVz
ZXIgPSAwMTAwLAogICAgICAgIFJlYWRHcm91cCA9IDAwNDAsIFdyaXRlR3JvdXAgPSAwMDIwLCBF
eGVHcm91cCA9IDAwMTAsCiAgICAgICAgUmVhZE90aGVyID0gMDAwNCwgV3JpdGVPdGhlciA9IDAw
MDIsIEV4ZU90aGVyID0gMDAwMSB9OwoKICAgIFFGaWxlSW5mbygpOwogICAgUUZpbGVJbmZvKCBj
b25zdCBRU3RyaW5nICZmaWxlICk7CiAgICBRRmlsZUluZm8oIGNvbnN0IFFGaWxlICYgKTsKCiAg
ICBRRmlsZUluZm8oIGNvbnN0IFFEaXIgJiwgY29uc3QgUVN0cmluZyAmZmlsZU5hbWUgKTsKCiAg
ICBRRmlsZUluZm8oIGNvbnN0IFFGaWxlSW5mbyAmICk7CiAgIH5RRmlsZUluZm8oKTsKCiAgICBR
RmlsZUluZm8gJm9wZXJhdG9yPSggY29uc3QgUUZpbGVJbmZvICYgKTsKCiAgICB2b2lkIHNldEZp
bGUoIGNvbnN0IFFTdHJpbmcgJmZpbGUgKTsKICAgIHZvaWQgc2V0RmlsZSggY29uc3QgUUZpbGUg
JiApOwoKICAgIHZvaWQgc2V0RmlsZSggY29uc3QgUURpciAmLCBjb25zdCBRU3RyaW5nICZmaWxl
TmFtZSApOwoKICAgIGJvb2wgZXhpc3RzKCkgY29uc3Q7CiAgICB2b2lkIHJlZnJlc2goKSBjb25z
dDsKICAgIGJvb2wgY2FjaGluZygpIGNvbnN0OwogICAgdm9pZCBzZXRDYWNoaW5nKCBib29sICk7
CgogICAgUVN0cmluZyBmaWxlUGF0aCgpIGNvbnN0OwogICAgUVN0cmluZyBmaWxlTmFtZSgpIGNv
bnN0OwoKICAgIFFTdHJpbmcgYWJzRmlsZVBhdGgoKSBjb25zdDsKCiAgICBRU3RyaW5nIGJhc2VO
YW1lKCBib29sIGNvbXBsZXRlID0gRkFMU0UgKSBjb25zdDsKICAgIFFTdHJpbmcgZXh0ZW5zaW9u
KCBib29sIGNvbXBsZXRlID0gVFJVRSApIGNvbnN0OwoKCiAgICBRU3RyaW5nIGRpclBhdGgoIGJv
b2wgYWJzUGF0aCA9IEZBTFNFICkgY29uc3Q7CgoKICAgIFFEaXIgZGlyKCBib29sIGFic1BhdGgg
PSBGQUxTRSApIGNvbnN0OwoKICAgIGJvb2wgaXNSZWFkYWJsZSgpIGNvbnN0OwogICAgYm9vbCBp
c1dyaXRhYmxlKCkgY29uc3Q7CiAgICBib29sIGlzRXhlY3V0YWJsZSgpIGNvbnN0OwogICAgYm9v
bCBpc0hpZGRlbigpIGNvbnN0OwoKCiAgICBib29sIGlzUmVsYXRpdmUoKSBjb25zdDsKICAgIGJv
b2wgY29udmVydFRvQWJzKCk7CgoKICAgIGJvb2wgaXNGaWxlKCkgY29uc3Q7CiAgICBib29sIGlz
RGlyKCkgY29uc3Q7CiAgICBib29sIGlzU3ltTGluaygpIGNvbnN0OwoKICAgIFFTdHJpbmcgcmVh
ZExpbmsoKSBjb25zdDsKCiAgICBRU3RyaW5nIG93bmVyKCkgY29uc3Q7CiAgICB1aW50IG93bmVy
SWQoKSBjb25zdDsKICAgIFFTdHJpbmcgZ3JvdXAoKSBjb25zdDsKICAgIHVpbnQgZ3JvdXBJZCgp
IGNvbnN0OwoKICAgIGJvb2wgcGVybWlzc2lvbiggaW50IHBlcm1pc3Npb25TcGVjICkgY29uc3Q7
CgoKCgoKCiAgICB1aW50IHNpemUoKSBjb25zdDsKCgogICAgUURhdGVUaW1lIGNyZWF0ZWQoKSBj
b25zdDsKICAgIFFEYXRlVGltZSBsYXN0TW9kaWZpZWQoKSBjb25zdDsKICAgIFFEYXRlVGltZSBs
YXN0UmVhZCgpIGNvbnN0OwoKcHJpdmF0ZToKICAgIHZvaWQgZG9TdGF0KCkgY29uc3Q7CiAgICBz
dGF0aWMgdm9pZCBzbGFzaGlmeSggUVN0cmluZyAmICk7CiAgICBzdGF0aWMgdm9pZCBtYWtlQWJz
KCBRU3RyaW5nICYgKTsKCiAgICBRU3RyaW5nIGZuOwogICAgUUZpbGVJbmZvQ2FjaGUgKmZpYzsK
ICAgIGJvb2wgY2FjaGU7CgogICAgYm9vbCBzeW1MaW5rOwoKCn07CgoKaW5saW5lIGJvb2wgUUZp
bGVJbmZvOjpjYWNoaW5nKCkgY29uc3QKewogICAgcmV0dXJuIGNhY2hlOwp9CiMgNDUgIi4uLy4u
L2luY2x1ZGUvcWRpci5oIiAyCgoKCgp0eXBlZGVmIFFQdHJMaXN0PFFGaWxlSW5mbz4gUUZpbGVJ
bmZvTGlzdDsKdHlwZWRlZiBRUHRyTGlzdEl0ZXJhdG9yPFFGaWxlSW5mbz4gUUZpbGVJbmZvTGlz
dEl0ZXJhdG9yOwpjbGFzcyBRU3RyaW5nTGlzdDsKCgpjbGFzcyBRRGlyCnsKcHVibGljOgogICAg
ZW51bSBGaWx0ZXJTcGVjIHsgRGlycyA9IDB4MDAxLAogICAgICAgICAgICAgICAgICAgICAgRmls
ZXMgPSAweDAwMiwKICAgICAgICAgICAgICAgICAgICAgIERyaXZlcyA9IDB4MDA0LAogICAgICAg
ICAgICAgICAgICAgICAgTm9TeW1MaW5rcyA9IDB4MDA4LAogICAgICAgICAgICAgICAgICAgICAg
QWxsID0gMHgwMDcsCiAgICAgICAgICAgICAgICAgICAgICBUeXBlTWFzayA9IDB4MDBGLAoKICAg
ICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlID0gMHgwMTAsCiAgICAgICAgICAgICAgICAgICAg
ICBXcml0YWJsZSA9IDB4MDIwLAogICAgICAgICAgICAgICAgICAgICAgRXhlY3V0YWJsZSA9IDB4
MDQwLAogICAgICAgICAgICAgICAgICAgICAgUldFTWFzayA9IDB4MDcwLAoKICAgICAgICAgICAg
ICAgICAgICAgIE1vZGlmaWVkID0gMHgwODAsCiAgICAgICAgICAgICAgICAgICAgICBIaWRkZW4g
PSAweDEwMCwKICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbSA9IDB4MjAwLAogICAgICAgICAg
ICAgICAgICAgICAgQWNjZXNzTWFzayA9IDB4M0YwLAoKICAgICAgICAgICAgICAgICAgICAgIERl
ZmF1bHRGaWx0ZXIgPSAtMSB9OwoKICAgIGVudW0gU29ydFNwZWMgeyBOYW1lID0gMHgwMCwKICAg
ICAgICAgICAgICAgICAgICAgIFRpbWUgPSAweDAxLAogICAgICAgICAgICAgICAgICAgICAgU2l6
ZSA9IDB4MDIsCiAgICAgICAgICAgICAgICAgICAgICBVbnNvcnRlZCA9IDB4MDMsCiAgICAgICAg
ICAgICAgICAgICAgICBTb3J0QnlNYXNrID0gMHgwMywKCiAgICAgICAgICAgICAgICAgICAgICBE
aXJzRmlyc3QgPSAweDA0LAogICAgICAgICAgICAgICAgICAgICAgUmV2ZXJzZWQgPSAweDA4LAog
ICAgICAgICAgICAgICAgICAgICAgSWdub3JlQ2FzZSA9IDB4MTAsCiAgICAgICAgICAgICAgICAg
ICAgICBEZWZhdWx0U29ydCA9IC0xIH07CgogICAgUURpcigpOwogICAgUURpciggY29uc3QgUVN0
cmluZyAmcGF0aCwgY29uc3QgUVN0cmluZyAmbmFtZUZpbHRlciA9IFFTdHJpbmc6Om51bGwsCiAg
ICAgICAgICBpbnQgc29ydFNwZWMgPSBOYW1lIHwgSWdub3JlQ2FzZSwgaW50IGZpbHRlclNwZWMg
PSBBbGwgKTsKICAgIFFEaXIoIGNvbnN0IFFEaXIgJiApOwoKICAgIHZpcnR1YWwgflFEaXIoKTsK
CiAgICBRRGlyICZvcGVyYXRvcj0oIGNvbnN0IFFEaXIgJiApOwogICAgUURpciAmb3BlcmF0b3I9
KCBjb25zdCBRU3RyaW5nICZwYXRoICk7CgogICAgdmlydHVhbCB2b2lkIHNldFBhdGgoIGNvbnN0
IFFTdHJpbmcgJnBhdGggKTsKICAgIHZpcnR1YWwgUVN0cmluZyBwYXRoKCkgY29uc3Q7CiAgICB2
aXJ0dWFsIFFTdHJpbmcgYWJzUGF0aCgpIGNvbnN0OwogICAgdmlydHVhbCBRU3RyaW5nIGNhbm9u
aWNhbFBhdGgoKSBjb25zdDsKCiAgICB2aXJ0dWFsIFFTdHJpbmcgZGlyTmFtZSgpIGNvbnN0Owog
ICAgdmlydHVhbCBRU3RyaW5nIGZpbGVQYXRoKCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhY2NlcHRBYnNQYXRoID0gVFJVRSApIGNv
bnN0OwogICAgdmlydHVhbCBRU3RyaW5nIGFic0ZpbGVQYXRoKCBjb25zdCBRU3RyaW5nICZmaWxl
TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhY2NlcHRBYnNQYXRo
ID0gVFJVRSApIGNvbnN0OwoKICAgIHN0YXRpYyBRU3RyaW5nIGNvbnZlcnRTZXBhcmF0b3JzKCBj
b25zdCBRU3RyaW5nICZwYXRoTmFtZSApOwoKICAgIHZpcnR1YWwgYm9vbCBjZCggY29uc3QgUVN0
cmluZyAmZGlyTmFtZSwgYm9vbCBhY2NlcHRBYnNQYXRoID0gVFJVRSApOwogICAgdmlydHVhbCBi
b29sIGNkVXAoKTsKCiAgICBRU3RyaW5nIG5hbWVGaWx0ZXIoKSBjb25zdDsKICAgIHZpcnR1YWwg
dm9pZCBzZXROYW1lRmlsdGVyKCBjb25zdCBRU3RyaW5nICZuYW1lRmlsdGVyICk7CiAgICBGaWx0
ZXJTcGVjIGZpbHRlcigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEZpbHRlciggaW50IGZp
bHRlclNwZWMgKTsKICAgIFNvcnRTcGVjIHNvcnRpbmcoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9p
ZCBzZXRTb3J0aW5nKCBpbnQgc29ydFNwZWMgKTsKCiAgICBib29sIG1hdGNoQWxsRGlycygpIGNv
bnN0OwogICAgdmlydHVhbCB2b2lkIHNldE1hdGNoQWxsRGlycyggYm9vbCApOwoKICAgIHVpbnQg
Y291bnQoKSBjb25zdDsKICAgIFFTdHJpbmcgb3BlcmF0b3JbXSggaW50ICkgY29uc3Q7CgogICAg
dmlydHVhbCBRU3RyTGlzdCBlbmNvZGVkRW50cnlMaXN0KCBpbnQgZmlsdGVyU3BlYyA9IERlZmF1
bHRGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb3J0
U3BlYyA9IERlZmF1bHRTb3J0ICkgY29uc3Q7CiAgICB2aXJ0dWFsIFFTdHJMaXN0IGVuY29kZWRF
bnRyeUxpc3QoIGNvbnN0IFFTdHJpbmcgJm5hbWVGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBmaWx0ZXJTcGVjID0gRGVmYXVsdEZpbHRlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvcnRTcGVjID0gRGVmYXVsdFNv
cnQgKSBjb25zdDsKICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgZW50cnlMaXN0KCBpbnQgZmlsdGVy
U3BlYyA9IERlZmF1bHRGaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHNvcnRTcGVjID0gRGVmYXVsdFNvcnQgKSBjb25zdDsKICAgIHZpcnR1YWwgUVN0cmluZ0xp
c3QgZW50cnlMaXN0KCBjb25zdCBRU3RyaW5nICZuYW1lRmlsdGVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBmaWx0ZXJTcGVjID0gRGVmYXVsdEZpbHRlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ydFNwZWMgPSBEZWZhdWx0U29ydCAp
IGNvbnN0OwoKICAgIHZpcnR1YWwgY29uc3QgUUZpbGVJbmZvTGlzdCAqZW50cnlJbmZvTGlzdCgg
aW50IGZpbHRlclNwZWMgPSBEZWZhdWx0RmlsdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ydFNwZWMgPSBEZWZhdWx0U29ydCApIGNvbnN0
OwogICAgdmlydHVhbCBjb25zdCBRRmlsZUluZm9MaXN0ICplbnRyeUluZm9MaXN0KCBjb25zdCBR
U3RyaW5nICZuYW1lRmlsdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZmlsdGVyU3BlYyA9IERlZmF1bHRGaWx0ZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb3J0U3BlYyA9IERlZmF1bHRT
b3J0ICkgY29uc3Q7CgogICAgc3RhdGljIGNvbnN0IFFGaWxlSW5mb0xpc3QgKmRyaXZlcygpOwoK
ICAgIHZpcnR1YWwgYm9vbCBta2RpciggY29uc3QgUVN0cmluZyAmZGlyTmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBhY2NlcHRBYnNQYXRoID0gVFJVRSApIGNvbnN0OwogICAgdmly
dHVhbCBib29sIHJtZGlyKCBjb25zdCBRU3RyaW5nICZkaXJOYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGFjY2VwdEFic1BhdGggPSBUUlVFICkgY29uc3Q7CgogICAgdmlydHVhbCBi
b29sIGlzUmVhZGFibGUoKSBjb25zdDsKICAgIHZpcnR1YWwgYm9vbCBleGlzdHMoKSBjb25zdDsK
ICAgIHZpcnR1YWwgYm9vbCBpc1Jvb3QoKSBjb25zdDsKCiAgICB2aXJ0dWFsIGJvb2wgaXNSZWxh
dGl2ZSgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0FicygpOwoKICAgIHZpcnR1
YWwgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRRGlyICYgKSBjb25zdDsKICAgIHZpcnR1YWwgYm9v
bCBvcGVyYXRvciE9KCBjb25zdCBRRGlyICYgKSBjb25zdDsKCiAgICB2aXJ0dWFsIGJvb2wgcmVt
b3ZlKCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYWNjZXB0QWJzUGF0aCA9IFRSVUUgKTsKICAgIHZpcnR1YWwgYm9vbCByZW5hbWUoIGNvbnN0
IFFTdHJpbmcgJm5hbWUsIGNvbnN0IFFTdHJpbmcgJm5ld05hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGFjY2VwdEFic1BhdGhzID0gVFJVRSApOwogICAgdmlydHVhbCBib29sIGV4
aXN0cyggY29uc3QgUVN0cmluZyAmbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
YWNjZXB0QWJzUGF0aCA9IFRSVUUgKTsKCiAgICBzdGF0aWMgY2hhciBzZXBhcmF0b3IoKTsKCiAg
ICBzdGF0aWMgYm9vbCBzZXRDdXJyZW50KCBjb25zdCBRU3RyaW5nICZwYXRoICk7CiAgICBzdGF0
aWMgUURpciBjdXJyZW50KCk7CiAgICBzdGF0aWMgUURpciBob21lKCk7CiAgICBzdGF0aWMgUURp
ciByb290KCk7CiAgICBzdGF0aWMgUVN0cmluZyBjdXJyZW50RGlyUGF0aCgpOwogICAgc3RhdGlj
IFFTdHJpbmcgaG9tZURpclBhdGgoKTsKICAgIHN0YXRpYyBRU3RyaW5nIHJvb3REaXJQYXRoKCk7
CgogICAgc3RhdGljIGJvb2wgbWF0Y2goIGNvbnN0IFFTdHJpbmdMaXN0ICZmaWx0ZXJzLCBjb25z
dCBRU3RyaW5nICZmaWxlTmFtZSApOwogICAgc3RhdGljIGJvb2wgbWF0Y2goIGNvbnN0IFFTdHJp
bmcgJmZpbHRlciwgY29uc3QgUVN0cmluZyAmZmlsZU5hbWUgKTsKICAgIHN0YXRpYyBRU3RyaW5n
IGNsZWFuRGlyUGF0aCggY29uc3QgUVN0cmluZyAmZGlyUGF0aCApOwogICAgc3RhdGljIGJvb2wg
aXNSZWxhdGl2ZVBhdGgoIGNvbnN0IFFTdHJpbmcgJnBhdGggKTsKICAgIHZvaWQgcmVmcmVzaCgp
IGNvbnN0OwoKcHJpdmF0ZToKCgoKCiAgICB2b2lkIGluaXQoKTsKICAgIHZpcnR1YWwgYm9vbCBy
ZWFkRGlyRW50cmllcyggY29uc3QgUVN0cmluZyAmbmFtZUZpbHRlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IEZpbHRlclNwZWMsIGludCBTb3J0U3BlYyApOwoKICAgIHN0
YXRpYyB2b2lkIHNsYXNoaWZ5KCBRU3RyaW5nICYgKTsKCiAgICBRU3RyaW5nIGRQYXRoOwogICAg
UVN0cmluZ0xpc3QgKmZMaXN0OwogICAgUUZpbGVJbmZvTGlzdCAqZmlMaXN0OwogICAgUVN0cmlu
ZyBuYW1lRmlsdDsKICAgIEZpbHRlclNwZWMgZmlsdFM7CiAgICBTb3J0U3BlYyBzb3J0UzsKICAg
IHVpbnQgZGlydHkgOiAxOwogICAgdWludCBhbGxEaXJzIDogMTsKfTsKCgppbmxpbmUgUVN0cmlu
ZyBRRGlyOjpwYXRoKCkgY29uc3QKewogICAgcmV0dXJuIGRQYXRoOwp9CgppbmxpbmUgUVN0cmlu
ZyBRRGlyOjpuYW1lRmlsdGVyKCkgY29uc3QKewogICAgcmV0dXJuIG5hbWVGaWx0Owp9Cgppbmxp
bmUgUURpcjo6RmlsdGVyU3BlYyBRRGlyOjpmaWx0ZXIoKSBjb25zdAp7CiAgICByZXR1cm4gZmls
dFM7Cn0KCmlubGluZSBRRGlyOjpTb3J0U3BlYyBRRGlyOjpzb3J0aW5nKCkgY29uc3QKewogICAg
cmV0dXJuIHNvcnRTOwp9CgppbmxpbmUgYm9vbCBRRGlyOjptYXRjaEFsbERpcnMoKSBjb25zdAp7
CiAgICByZXR1cm4gYWxsRGlyczsKfQoKaW5saW5lIGJvb2wgUURpcjo6b3BlcmF0b3IhPSggY29u
c3QgUURpciAmZCApIGNvbnN0CnsKICAgIHJldHVybiAhKCp0aGlzID09IGQpOwp9CgoKc3RydWN0
IFFEaXJTb3J0SXRlbSB7CiAgICBRU3RyaW5nIGZpbGVuYW1lX2NhY2hlOwogICAgUUZpbGVJbmZv
KiBpdGVtOwp9OwojIDI1ICJpbmRleC5jcHAiIDIKCgojIDEgIi4uLy4uL2luY2x1ZGUvcWFwcGxp
Y2F0aW9uLmgiIDEKIyA0MiAiLi4vLi4vaW5jbHVkZS9xYXBwbGljYXRpb24uaCIKIyAxICIuLi8u
Li9pbmNsdWRlL3FkZXNrdG9wd2lkZ2V0LmgiIDEKIyA0MCAiLi4vLi4vaW5jbHVkZS9xZGVza3Rv
cHdpZGdldC5oIgojIDEgIi4uLy4uL2luY2x1ZGUvcXdpZGdldC5oIiAxCiMgNDQgIi4uLy4uL2lu
Y2x1ZGUvcXdpZGdldC5oIgojIDEgIi4uLy4uL2luY2x1ZGUvcXBhaW50ZGV2aWNlLmgiIDEKIyA1
MSAiLi4vLi4vaW5jbHVkZS9xcGFpbnRkZXZpY2UuaCIKY2xhc3MgUUlPRGV2aWNlOwpjbGFzcyBR
U3RyaW5nOwoKCgpzdHJ1Y3QgUVBhaW50RGV2aWNlWDExRGF0YTsKCgp1bmlvbiBRUERldkNtZFBh
cmFtIHsKICAgIGludCBpdmFsOwogICAgaW50ICppdmVjOwogICAgUVN0cmluZyAqc3RyOwogICAg
Y29uc3QgUVBvaW50ICpwb2ludDsKICAgIGNvbnN0IFFSZWN0ICpyZWN0OwogICAgY29uc3QgUVBv
aW50QXJyYXkgKnB0YXJyOwogICAgY29uc3QgUVBpeG1hcCAqcGl4bWFwOwogICAgY29uc3QgUUlt
YWdlICppbWFnZTsKICAgIGNvbnN0IFFDb2xvciAqY29sb3I7CiAgICBjb25zdCBRRm9udCAqZm9u
dDsKICAgIGNvbnN0IFFQZW4gKnBlbjsKICAgIGNvbnN0IFFCcnVzaCAqYnJ1c2g7CiAgICBjb25z
dCBRUmVnaW9uICpyZ247CiAgICBjb25zdCBRV01hdHJpeCAqbWF0cml4OwogICAgUUlPRGV2aWNl
ICpkZXZpY2U7Cn07CgoKCmNsYXNzIFFQYWludERldmljZQp7CnB1YmxpYzoKICAgIHZpcnR1YWwg
flFQYWludERldmljZSgpOwoKICAgIGludCBkZXZUeXBlKCkgY29uc3Q7CiAgICBib29sIGlzRXh0
RGV2KCkgY29uc3Q7CiAgICBib29sIHBhaW50aW5nQWN0aXZlKCkgY29uc3Q7CgogICAgdmlydHVh
bCB2b2lkIHNldFJlc29sdXRpb24oIGludCApOwogICAgdmlydHVhbCBpbnQgcmVzb2x1dGlvbigp
IGNvbnN0OwoKCgoKCgogICAgdmlydHVhbCBRdDo6SEFORExFIGhhbmRsZSgpIGNvbnN0OwogICAg
dmlydHVhbCBRdDo6SEFORExFIHgxMVJlbmRlckhhbmRsZSgpIGNvbnN0OwoKCgoKCgoKICAgIERp
c3BsYXkgKngxMURpc3BsYXkoKSBjb25zdDsKICAgIGludCB4MTFTY3JlZW4oKSBjb25zdDsKICAg
IGludCB4MTFEZXB0aCgpIGNvbnN0OwogICAgaW50IHgxMUNlbGxzKCkgY29uc3Q7CiAgICBRdDo6
SEFORExFIHgxMUNvbG9ybWFwKCkgY29uc3Q7CiAgICBib29sIHgxMURlZmF1bHRDb2xvcm1hcCgp
IGNvbnN0OwogICAgdm9pZCAqeDExVmlzdWFsKCkgY29uc3Q7CiAgICBib29sIHgxMURlZmF1bHRW
aXN1YWwoKSBjb25zdDsKCiAgICBzdGF0aWMgRGlzcGxheSAqeDExQXBwRGlzcGxheSgpOwogICAg
c3RhdGljIGludCB4MTFBcHBTY3JlZW4oKTsKCiAgICBzdGF0aWMgaW50IHgxMUFwcERwaVgoKTsK
ICAgIHN0YXRpYyBpbnQgeDExQXBwRHBpWSgpOwogICAgc3RhdGljIHZvaWQgeDExU2V0QXBwRHBp
WChpbnQpOwogICAgc3RhdGljIHZvaWQgeDExU2V0QXBwRHBpWShpbnQpOwogICAgc3RhdGljIGlu
dCB4MTFBcHBEZXB0aCgpOwogICAgc3RhdGljIGludCB4MTFBcHBDZWxscygpOwogICAgc3RhdGlj
IFF0OjpIQU5ETEUgeDExQXBwUm9vdFdpbmRvdygpOwogICAgc3RhdGljIFF0OjpIQU5ETEUgeDEx
QXBwQ29sb3JtYXAoKTsKICAgIHN0YXRpYyBib29sIHgxMUFwcERlZmF1bHRDb2xvcm1hcCgpOwog
ICAgc3RhdGljIHZvaWQgKngxMUFwcFZpc3VhbCgpOwogICAgc3RhdGljIGJvb2wgeDExQXBwRGVm
YXVsdFZpc3VhbCgpOwoKCgogICAgc3RhdGljIGludCB4MTFBcHBEZXB0aCggaW50IHNjcmVlbiAp
OwogICAgc3RhdGljIGludCB4MTFBcHBDZWxscyggaW50IHNjcmVlbiApOwogICAgc3RhdGljIFF0
OjpIQU5ETEUgeDExQXBwUm9vdFdpbmRvdyggaW50IHNjcmVlbiApOwogICAgc3RhdGljIFF0OjpI
QU5ETEUgeDExQXBwQ29sb3JtYXAoIGludCBzY3JlZW4gKTsKICAgIHN0YXRpYyB2b2lkICp4MTFB
cHBWaXN1YWwoIGludCBzY3JlZW4gKTsKICAgIHN0YXRpYyBib29sIHgxMUFwcERlZmF1bHRDb2xv
cm1hcCggaW50IHNjcmVlbiApOwogICAgc3RhdGljIGJvb2wgeDExQXBwRGVmYXVsdFZpc3VhbCgg
aW50IHNjcmVlbiApOwogICAgc3RhdGljIGludCB4MTFBcHBEcGlYKCBpbnQgKTsKICAgIHN0YXRp
YyBpbnQgeDExQXBwRHBpWSggaW50ICk7CiAgICBzdGF0aWMgdm9pZCB4MTFTZXRBcHBEcGlYKCBp
bnQsIGludCApOwogICAgc3RhdGljIHZvaWQgeDExU2V0QXBwRHBpWSggaW50LCBpbnQgKTsKIyAx
NTEgIi4uLy4uL2luY2x1ZGUvcXBhaW50ZGV2aWNlLmgiCiAgICBlbnVtIFBEZXZDbWQgewogICAg
ICAgIFBkY05PUCA9IDAsCiAgICAgICAgUGRjRHJhd1BvaW50ID0gMSwKICAgICAgICBQZGNEcmF3
Rmlyc3QgPSBQZGNEcmF3UG9pbnQsCiAgICAgICAgUGRjTW92ZVRvID0gMiwKICAgICAgICBQZGNM
aW5lVG8gPSAzLAogICAgICAgIFBkY0RyYXdMaW5lID0gNCwKICAgICAgICBQZGNEcmF3UmVjdCA9
IDUsCiAgICAgICAgUGRjRHJhd1JvdW5kUmVjdCA9IDYsCiAgICAgICAgUGRjRHJhd0VsbGlwc2Ug
PSA3LAogICAgICAgIFBkY0RyYXdBcmMgPSA4LAogICAgICAgIFBkY0RyYXdQaWUgPSA5LAogICAg
ICAgIFBkY0RyYXdDaG9yZCA9IDEwLAogICAgICAgIFBkY0RyYXdMaW5lU2VnbWVudHMgPSAxMSwK
ICAgICAgICBQZGNEcmF3UG9seWxpbmUgPSAxMiwKICAgICAgICBQZGNEcmF3UG9seWdvbiA9IDEz
LAogICAgICAgIFBkY0RyYXdDdWJpY0JlemllciA9IDE0LAogICAgICAgIFBkY0RyYXdUZXh0ID0g
MTUsCiAgICAgICAgUGRjRHJhd1RleHRGb3JtYXR0ZWQgPSAxNiwKICAgICAgICBQZGNEcmF3UGl4
bWFwID0gMTcsCiAgICAgICAgUGRjRHJhd0ltYWdlID0gMTgsCiAgICAgICAgUGRjRHJhd1RleHQy
ID0gMTksCiAgICAgICAgUGRjRHJhd1RleHQyRm9ybWF0dGVkID0gMjAsCiAgICAgICAgUGRjRHJh
d0xhc3QgPSBQZGNEcmF3VGV4dDJGb3JtYXR0ZWQsCgoKCiAgICAgICAgUGRjQmVnaW4gPSAzMCwK
ICAgICAgICBQZGNFbmQgPSAzMSwKICAgICAgICBQZGNTYXZlID0gMzIsCiAgICAgICAgUGRjUmVz
dG9yZSA9IDMzLAogICAgICAgIFBkY1NldGRldiA9IDM0LAogICAgICAgIFBkY1NldEJrQ29sb3Ig
PSA0MCwKICAgICAgICBQZGNTZXRCa01vZGUgPSA0MSwKICAgICAgICBQZGNTZXRST1AgPSA0MiwK
ICAgICAgICBQZGNTZXRCcnVzaE9yaWdpbiA9IDQzLAogICAgICAgIFBkY1NldEZvbnQgPSA0NSwK
ICAgICAgICBQZGNTZXRQZW4gPSA0NiwKICAgICAgICBQZGNTZXRCcnVzaCA9IDQ3LAogICAgICAg
IFBkY1NldFRhYlN0b3BzID0gNDgsCiAgICAgICAgUGRjU2V0VGFiQXJyYXkgPSA0OSwKICAgICAg
ICBQZGNTZXRVbml0ID0gNTAsCiAgICAgICAgUGRjU2V0Vlhmb3JtID0gNTEsCiAgICAgICAgUGRj
U2V0V2luZG93ID0gNTIsCiAgICAgICAgUGRjU2V0Vmlld3BvcnQgPSA1MywKICAgICAgICBQZGNT
ZXRXWGZvcm0gPSA1NCwKICAgICAgICBQZGNTZXRXTWF0cml4ID0gNTUsCiAgICAgICAgUGRjU2F2
ZVdNYXRyaXggPSA1NiwKICAgICAgICBQZGNSZXN0b3JlV01hdHJpeCA9IDU3LAogICAgICAgIFBk
Y1NldENsaXAgPSA2MCwKICAgICAgICBQZGNTZXRDbGlwUmVnaW9uID0gNjEsCgogICAgICAgIFBk
Y1Jlc2VydmVkU3RhcnQgPSAwLAogICAgICAgIFBkY1Jlc2VydmVkU3RvcCA9IDE5OQogICAgfTsK
CnByb3RlY3RlZDoKICAgIFFQYWludERldmljZSggdWludCBkZXZmbGFncyApOwoKCgoKICAgIFF0
OjpIQU5ETEUgaGQ7CiAgICBRdDo6SEFORExFIHJlbmRoZDsKCiAgICB2b2lkIGNvcHlYMTFEYXRh
KCBjb25zdCBRUGFpbnREZXZpY2UgKiApOwogICAgdm9pZCBjbG9uZVgxMURhdGEoIGNvbnN0IFFQ
YWludERldmljZSAqICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0WDExRGF0YSggY29uc3QgUVBhaW50
RGV2aWNlWDExRGF0YSogKTsKICAgIFFQYWludERldmljZVgxMURhdGEqIGdldFgxMURhdGEoIGJv
b2wgZGVmPUZBTFNFICkgY29uc3Q7CiMgMjI5ICIuLi8uLi9pbmNsdWRlL3FwYWludGRldmljZS5o
IgogICAgdmlydHVhbCBib29sIGNtZCggaW50LCBRUGFpbnRlciAqLCBRUERldkNtZFBhcmFtICog
KTsKICAgIHZpcnR1YWwgaW50IG1ldHJpYyggaW50ICkgY29uc3Q7CiAgICB2aXJ0dWFsIGludCBm
b250TWV0KCBRRm9udCAqLCBpbnQsIGNvbnN0IGNoYXIgKiA9IDAsIGludCA9IDAgKSBjb25zdDsK
ICAgIHZpcnR1YWwgaW50IGZvbnRJbmYoIFFGb250ICosIGludCApIGNvbnN0OwoKICAgIHVzaG9y
dCBkZXZGbGFnczsKICAgIHVzaG9ydCBwYWludGVyczsKCiAgICBmcmllbmQgY2xhc3MgUVBhaW50
ZXI7CiAgICBmcmllbmQgY2xhc3MgUVBhaW50RGV2aWNlTWV0cmljczsKCgoKCgoKCiAgICBmcmll
bmQgdm9pZCBiaXRCbHQoIFFQYWludERldmljZSAqLCBpbnQsIGludCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUVBhaW50RGV2aWNlICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCwgaW50LCBpbnQsIGludCwgUXQ6OlJhc3Rlck9wLCBib29sICk7
CgoKICAgIGZyaWVuZCB2b2lkIHF0X2luaXRfaW50ZXJuYWwoIGludCAqLCBjaGFyICoqLCBEaXNw
bGF5ICosIFF0OjpIQU5ETEUsIFF0OjpIQU5ETEUgKTsKICAgIGZyaWVuZCB2b2lkIHF0X2NsZWFu
dXAoKTsKCgpwcml2YXRlOgoKICAgIHN0YXRpYyBEaXNwbGF5ICp4X2FwcGRpc3BsYXk7CiAgICBz
dGF0aWMgaW50IHhfYXBwc2NyZWVuOwoKICAgIHN0YXRpYyBpbnQgeF9hcHBkZXB0aDsKICAgIHN0
YXRpYyBpbnQgeF9hcHBjZWxsczsKICAgIHN0YXRpYyBRdDo6SEFORExFIHhfYXBwcm9vdHdpbmRv
dzsKICAgIHN0YXRpYyBRdDo6SEFORExFIHhfYXBwY29sb3JtYXA7CiAgICBzdGF0aWMgYm9vbCB4
X2FwcGRlZmNvbG9ybWFwOwogICAgc3RhdGljIHZvaWQgKnhfYXBwdmlzdWFsOwogICAgc3RhdGlj
IGJvb2wgeF9hcHBkZWZ2aXN1YWw7CgoKICAgIHN0YXRpYyBpbnQgKnhfYXBwZGVwdGhfYXJyOwog
ICAgc3RhdGljIGludCAqeF9hcHBjZWxsc19hcnI7CiAgICBzdGF0aWMgUXQ6OkhBTkRMRSAqeF9h
cHByb290d2luZG93X2FycjsKICAgIHN0YXRpYyBRdDo6SEFORExFICp4X2FwcGNvbG9ybWFwX2Fy
cjsKICAgIHN0YXRpYyBib29sICp4X2FwcGRlZmNvbG9ybWFwX2FycjsKICAgIHN0YXRpYyB2b2lk
ICoqeF9hcHB2aXN1YWxfYXJyOwogICAgc3RhdGljIGJvb2wgKnhfYXBwZGVmdmlzdWFsX2FycjsK
CiAgICBRUGFpbnREZXZpY2VYMTFEYXRhKiB4MTFEYXRhOwoKCnByaXZhdGU6CgogICAgUVBhaW50
RGV2aWNlKCBjb25zdCBRUGFpbnREZXZpY2UgJiApOwogICAgUVBhaW50RGV2aWNlICZvcGVyYXRv
cj0oIGNvbnN0IFFQYWludERldmljZSAmICk7Cgp9OwoKCgp2b2lkIGJpdEJsdCggUVBhaW50RGV2
aWNlICpkc3QsIGludCBkeCwgaW50IGR5LAogICAgICAgICAgICAgY29uc3QgUVBhaW50RGV2aWNl
ICpzcmMsIGludCBzeD0wLCBpbnQgc3k9MCwgaW50IHN3PS0xLCBpbnQgc2g9LTEsCiAgICAgICAg
ICAgICBRdDo6UmFzdGVyT3AgPSBRdDo6Q29weVJPUCwgYm9vbCBpZ25vcmVNYXNrPUZBTFNFICk7
CgoKdm9pZCBiaXRCbHQoIFFQYWludERldmljZSAqZHN0LCBpbnQgZHgsIGludCBkeSwKICAgICAg
ICAgICAgIGNvbnN0IFFJbWFnZSAqc3JjLCBpbnQgc3g9MCwgaW50IHN5PTAsIGludCBzdz0tMSwg
aW50IHNoPS0xLAogICAgICAgICAgICAgaW50IGNvbnZlcnNpb25fZmxhZ3M9MCApOwoKCgoKc3Ry
dWN0IFFQYWludERldmljZVgxMURhdGEgOiBwdWJsaWMgUVNoYXJlZCB7CiAgICBEaXNwbGF5KiB4
X2Rpc3BsYXk7CiAgICBpbnQgeF9zY3JlZW47CiAgICBpbnQgeF9kZXB0aDsKICAgIGludCB4X2Nl
bGxzOwogICAgUXQ6OkhBTkRMRSB4X2NvbG9ybWFwOwogICAgYm9vbCB4X2RlZmNvbG9ybWFwOwog
ICAgdm9pZCogeF92aXN1YWw7CiAgICBib29sIHhfZGVmdmlzdWFsOwp9OwoKCgoKCgoKaW5saW5l
IGludCBRUGFpbnREZXZpY2U6OmRldlR5cGUoKSBjb25zdAp7IHJldHVybiBkZXZGbGFncyAmIFFJ
bnRlcm5hbDo6RGV2aWNlVHlwZU1hc2s7IH0KCmlubGluZSBib29sIFFQYWludERldmljZTo6aXNF
eHREZXYoKSBjb25zdAp7IHJldHVybiAoZGV2RmxhZ3MgJiBRSW50ZXJuYWw6OkV4dGVybmFsRGV2
aWNlKSAhPSAwOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6OnBhaW50aW5nQWN0aXZlKCkg
Y29uc3QKeyByZXR1cm4gcGFpbnRlcnMgIT0gMDsgfQoKCmlubGluZSBEaXNwbGF5ICpRUGFpbnRE
ZXZpY2U6OngxMURpc3BsYXkoKSBjb25zdAp7IHJldHVybiB4MTFEYXRhID8geDExRGF0YS0+eF9k
aXNwbGF5IDogeF9hcHBkaXNwbGF5OyB9CgppbmxpbmUgaW50IFFQYWludERldmljZTo6eDExU2Ny
ZWVuKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEtPnhfc2NyZWVuIDogeF9hcHBz
Y3JlZW47IH0KCmlubGluZSBpbnQgUVBhaW50RGV2aWNlOjp4MTFEZXB0aCgpIGNvbnN0CnsgcmV0
dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2RlcHRoIDogeF9hcHBkZXB0aDsgfQoKaW5saW5lIGlu
dCBRUGFpbnREZXZpY2U6OngxMUNlbGxzKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURh
dGEtPnhfY2VsbHMgOiB4X2FwcGNlbGxzOyB9CgppbmxpbmUgUXQ6OkhBTkRMRSBRUGFpbnREZXZp
Y2U6OngxMUNvbG9ybWFwKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEtPnhfY29s
b3JtYXAgOiB4X2FwcGNvbG9ybWFwOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6OngxMURl
ZmF1bHRDb2xvcm1hcCgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2RlZmNv
bG9ybWFwIDogeF9hcHBkZWZjb2xvcm1hcDsgfQoKaW5saW5lIHZvaWQgKlFQYWludERldmljZTo6
eDExVmlzdWFsKCkgY29uc3QKeyByZXR1cm4geDExRGF0YSA/IHgxMURhdGEtPnhfdmlzdWFsIDog
eF9hcHB2aXN1YWw7IH0KCmlubGluZSBib29sIFFQYWludERldmljZTo6eDExRGVmYXVsdFZpc3Vh
bCgpIGNvbnN0CnsgcmV0dXJuIHgxMURhdGEgPyB4MTFEYXRhLT54X2RlZnZpc3VhbCA6IHhfYXBw
ZGVmdmlzdWFsOyB9CgppbmxpbmUgRGlzcGxheSAqUVBhaW50RGV2aWNlOjp4MTFBcHBEaXNwbGF5
KCkKeyByZXR1cm4geF9hcHBkaXNwbGF5OyB9CgppbmxpbmUgaW50IFFQYWludERldmljZTo6eDEx
QXBwU2NyZWVuKCkKeyByZXR1cm4geF9hcHBzY3JlZW47IH0KCmlubGluZSBpbnQgUVBhaW50RGV2
aWNlOjp4MTFBcHBEZXB0aCggaW50IHNjcmVlbiApCnsgcmV0dXJuIHhfYXBwZGVwdGhfYXJyWyBz
Y3JlZW4gPT0gLTEgPyB4X2FwcHNjcmVlbiA6IHNjcmVlbiBdOyB9CgppbmxpbmUgaW50IFFQYWlu
dERldmljZTo6eDExQXBwQ2VsbHMoIGludCBzY3JlZW4gKQp7IHJldHVybiB4X2FwcGNlbGxzX2Fy
clsgc2NyZWVuID09IC0xID8geF9hcHBzY3JlZW4gOiBzY3JlZW4gXTsgfQoKaW5saW5lIFF0OjpI
QU5ETEUgUVBhaW50RGV2aWNlOjp4MTFBcHBSb290V2luZG93KCBpbnQgc2NyZWVuICkKeyByZXR1
cm4geF9hcHByb290d2luZG93X2Fyclsgc2NyZWVuID09IC0xID8geF9hcHBzY3JlZW4gOiBzY3Jl
ZW4gXTsgfQoKaW5saW5lIFF0OjpIQU5ETEUgUVBhaW50RGV2aWNlOjp4MTFBcHBDb2xvcm1hcCgg
aW50IHNjcmVlbiApCnsgcmV0dXJuIHhfYXBwY29sb3JtYXBfYXJyWyBzY3JlZW4gPT0gLTEgPyB4
X2FwcHNjcmVlbiA6IHNjcmVlbiBdOyB9CgppbmxpbmUgYm9vbCBRUGFpbnREZXZpY2U6OngxMUFw
cERlZmF1bHRDb2xvcm1hcCggaW50IHNjcmVlbiApCnsgcmV0dXJuIHhfYXBwZGVmY29sb3JtYXBf
YXJyWyBzY3JlZW4gPT0gLTEgPyB4X2FwcHNjcmVlbiA6IHNjcmVlbiBdOyB9CgppbmxpbmUgdm9p
ZCAqUVBhaW50RGV2aWNlOjp4MTFBcHBWaXN1YWwoIGludCBzY3JlZW4gKQp7IHJldHVybiB4X2Fw
cHZpc3VhbF9hcnJbIHNjcmVlbiA9PSAtMSA/IHhfYXBwc2NyZWVuIDogc2NyZWVuIF07IH0KCmlu
bGluZSBib29sIFFQYWludERldmljZTo6eDExQXBwRGVmYXVsdFZpc3VhbCggaW50IHNjcmVlbiAp
CnsgcmV0dXJuIHhfYXBwZGVmdmlzdWFsX2Fyclsgc2NyZWVuID09IC0xID8geF9hcHBzY3JlZW4g
OiBzY3JlZW4gXTsgfQoKaW5saW5lIGludCBRUGFpbnREZXZpY2U6OngxMUFwcERlcHRoKCkKeyBy
ZXR1cm4geF9hcHBkZXB0aDsgfQoKaW5saW5lIGludCBRUGFpbnREZXZpY2U6OngxMUFwcENlbGxz
KCkKeyByZXR1cm4geF9hcHBjZWxsczsgfQoKaW5saW5lIFF0OjpIQU5ETEUgUVBhaW50RGV2aWNl
Ojp4MTFBcHBSb290V2luZG93KCkKeyByZXR1cm4geF9hcHByb290d2luZG93OyB9CgppbmxpbmUg
UXQ6OkhBTkRMRSBRUGFpbnREZXZpY2U6OngxMUFwcENvbG9ybWFwKCkKeyByZXR1cm4geF9hcHBj
b2xvcm1hcDsgfQoKaW5saW5lIGJvb2wgUVBhaW50RGV2aWNlOjp4MTFBcHBEZWZhdWx0Q29sb3Jt
YXAoKQp7IHJldHVybiB4X2FwcGRlZmNvbG9ybWFwOyB9CgppbmxpbmUgdm9pZCAqUVBhaW50RGV2
aWNlOjp4MTFBcHBWaXN1YWwoKQp7IHJldHVybiB4X2FwcHZpc3VhbDsgfQoKaW5saW5lIGJvb2wg
UVBhaW50RGV2aWNlOjp4MTFBcHBEZWZhdWx0VmlzdWFsKCkKeyByZXR1cm4geF9hcHBkZWZ2aXN1
YWw7IH0KCgoKCgppbmxpbmUgdm9pZCBiaXRCbHQoIFFQYWludERldmljZSAqZHN0LCBjb25zdCBR
UG9pbnQgJmRwLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFFQYWludERldmljZSAqc3JjLCBj
b25zdCBRUmVjdCAmc3IgPVFSZWN0KDAsMCwtMSwtMSksCiAgICAgICAgICAgICAgICAgICAgUXQ6
OlJhc3Rlck9wIHJvcD1RdDo6Q29weVJPUCwgYm9vbCBpZ25vcmVNYXNrPUZBTFNFICkKewogICAg
Yml0Qmx0KCBkc3QsIGRwLngoKSwgZHAueSgpLCBzcmMsIHNyLngoKSwgc3IueSgpLCBzci53aWR0
aCgpLCBzci5oZWlnaHQoKSwKICAgICAgICAgICAgcm9wLCBpZ25vcmVNYXNrICk7Cn0KIyA0NSAi
Li4vLi4vaW5jbHVkZS9xd2lkZ2V0LmgiIDIKIyAxICIuLi8uLi9pbmNsdWRlL3FwYWxldHRlLmgi
IDEKIyA0MyAiLi4vLi4vaW5jbHVkZS9xcGFsZXR0ZS5oIgojIDEgIi4uLy4uL2luY2x1ZGUvcWNv
bG9yLmgiIDEKIyA0NSAiLi4vLi4vaW5jbHVkZS9xY29sb3IuaCIKY29uc3QgUVJnYiBSR0JfTUFT
SyA9IDB4MDBmZmZmZmY7CgogaW5saW5lIGludCBxUmVkKCBRUmdiIHJnYiApCnsgcmV0dXJuIChp
bnQpKChyZ2IgPj4gMTYpICYgMHhmZik7IH0KCiBpbmxpbmUgaW50IHFHcmVlbiggUVJnYiByZ2Ig
KQp7IHJldHVybiAoaW50KSgocmdiID4+IDgpICYgMHhmZik7IH0KCiBpbmxpbmUgaW50IHFCbHVl
KCBRUmdiIHJnYiApCnsgcmV0dXJuIChpbnQpKHJnYiAmIDB4ZmYpOyB9CgogaW5saW5lIGludCBx
QWxwaGEoIFFSZ2IgcmdiICkKeyByZXR1cm4gKGludCkoKHJnYiA+PiAyNCkgJiAweGZmKTsgfQoK
IGlubGluZSBRUmdiIHFSZ2IoIGludCByLCBpbnQgZywgaW50IGIgKQp7IHJldHVybiAoMHhmZiA8
PCAyNCkgfCAoKHIgJiAweGZmKSA8PCAxNikgfCAoKGcgJiAweGZmKSA8PCA4KSB8IChiICYgMHhm
Zik7IH0KCiBpbmxpbmUgUVJnYiBxUmdiYSggaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEgKQp7
IHJldHVybiAoKGEgJiAweGZmKSA8PCAyNCkgfCAoKHIgJiAweGZmKSA8PCAxNikgfCAoKGcgJiAw
eGZmKSA8PCA4KSB8IChiICYgMHhmZik7IH0KCiBpbmxpbmUgaW50IHFHcmF5KCBpbnQgciwgaW50
IGcsIGludCBiICkKeyByZXR1cm4gKHIqMTErZyoxNitiKjUpLzMyOyB9CgogaW5saW5lIGludCBx
R3JheSggUVJnYiByZ2IgKQp7IHJldHVybiBxR3JheSggcVJlZChyZ2IpLCBxR3JlZW4ocmdiKSwg
cUJsdWUocmdiKSApOyB9CgoKY2xhc3MgUUNvbG9yCnsKcHVibGljOgogICAgZW51bSBTcGVjIHsg
UmdiLCBIc3YgfTsKCiAgICBRQ29sb3IoKTsKICAgIFFDb2xvciggaW50IHIsIGludCBnLCBpbnQg
YiApOwogICAgUUNvbG9yKCBpbnQgeCwgaW50IHksIGludCB6LCBTcGVjICk7CiAgICBRQ29sb3Io
IFFSZ2IgcmdiLCB1aW50IHBpeGVsPTB4ZmZmZmZmZmYpOwogICAgUUNvbG9yKCBjb25zdCBRU3Ry
aW5nJiBuYW1lICk7CiAgICBRQ29sb3IoIGNvbnN0IGNoYXIgKm5hbWUgKTsKICAgIFFDb2xvcigg
Y29uc3QgUUNvbG9yICYgKTsKICAgIFFDb2xvciAmb3BlcmF0b3I9KCBjb25zdCBRQ29sb3IgJiAp
OwoKICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogICAgYm9vbCBpc0RpcnR5KCkgY29uc3Q7CiAg
ICBRU3RyaW5nIG5hbWUoKSBjb25zdDsKICAgIHZvaWQgc2V0TmFtZWRDb2xvciggY29uc3QgUVN0
cmluZyYgbmFtZSApOwoKICAgIHZvaWQgcmdiKCBpbnQgKnIsIGludCAqZywgaW50ICpiICkgY29u
c3Q7CiAgICBRUmdiIHJnYigpIGNvbnN0OwogICAgdm9pZCBzZXRSZ2IoIGludCByLCBpbnQgZywg
aW50IGIgKTsKICAgIHZvaWQgc2V0UmdiKCBRUmdiIHJnYiApOwoKICAgIGludCByZWQoKSBjb25z
dDsKICAgIGludCBncmVlbigpIGNvbnN0OwogICAgaW50IGJsdWUoKSBjb25zdDsKCiAgICB2b2lk
IGhzdiggaW50ICpoLCBpbnQgKnMsIGludCAqdiApIGNvbnN0OwogICAgdm9pZCBnZXRIc3YoIGlu
dCAmaCwgaW50ICZzLCBpbnQgJnYgKSBjb25zdCB7IGhzdiggJmgsICZzLCAmdiApOyB9CiAgICB2
b2lkIHNldEhzdiggaW50IGgsIGludCBzLCBpbnQgdiApOwoKICAgIFFDb2xvciBsaWdodCggaW50
IGYgPSAxNTAgKSBjb25zdDsKICAgIFFDb2xvciBkYXJrKCBpbnQgZiA9IDIwMCApIGNvbnN0OwoK
ICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUNvbG9yICZjICkgY29uc3Q7CiAgICBib29sIG9w
ZXJhdG9yIT0oIGNvbnN0IFFDb2xvciAmYyApIGNvbnN0OwoKICAgIHVpbnQgYWxsb2MoKTsKICAg
IHVpbnQgcGl4ZWwoKSBjb25zdDsKCgoKICAgIHVpbnQgYWxsb2MoIGludCBzY3JlZW4gKTsKICAg
IHVpbnQgcGl4ZWwoIGludCBzY3JlZW4gKSBjb25zdDsKCgogICAgc3RhdGljIGludCBtYXhDb2xv
cnMoKTsKICAgIHN0YXRpYyBpbnQgbnVtQml0UGxhbmVzKCk7CgogICAgc3RhdGljIGludCBlbnRl
ckFsbG9jQ29udGV4dCgpOwogICAgc3RhdGljIHZvaWQgbGVhdmVBbGxvY0NvbnRleHQoKTsKICAg
IHN0YXRpYyBpbnQgY3VycmVudEFsbG9jQ29udGV4dCgpOwogICAgc3RhdGljIHZvaWQgZGVzdHJv
eUFsbG9jQ29udGV4dCggaW50ICk7CiMgMTM1ICIuLi8uLi9pbmNsdWRlL3Fjb2xvci5oIgogICAg
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgc3RhdGljIHZvaWQgY2xlYW51cCgpOwoKICAg
IGVudW0geyBEaXJ0ID0gMHg0NDQ5NTI1NCwgSW52YWxpZCA9IDB4NDkwMDAwMDAgfTsKCnByaXZh
dGU6CiAgICB2b2lkIHNldFN5c3RlbU5hbWVkQ29sb3IoIGNvbnN0IFFTdHJpbmcmIG5hbWUgKTsK
ICAgIHZvaWQgc2V0UGl4ZWwoIHVpbnQgcGl4ZWwgKTsKICAgIHN0YXRpYyB2b2lkIGluaXRHbG9i
YWxDb2xvcnMoKTsKICAgIHN0YXRpYyB1aW50IGFyZ2JUb1BpeDMyKFFSZ2IpOwogICAgc3RhdGlj
IFFDb2xvciogZ2xvYmFsQ29sb3JzKCk7CiAgICBzdGF0aWMgYm9vbCBjb2xvcl9pbml0OwogICAg
c3RhdGljIGJvb2wgZ2xvYmFsc19pbml0OwoKCgogICAgc3RhdGljIGVudW0gQ29sb3JNb2RlbCB7
IGQ4LCBkMzIgfSBjb2xvcm1vZGVsOwogICAgdW5pb24gewogICAgICAgIFFSZ2IgYXJnYjsKICAg
ICAgICBzdHJ1Y3QgRDggewogICAgICAgICAgICBRUmdiIGFyZ2I7CiAgICAgICAgICAgIHVjaGFy
IHBpeDsKICAgICAgICAgICAgdWNoYXIgaW52YWxpZDsKICAgICAgICAgICAgdWNoYXIgZGlydHk7
CiAgICAgICAgICAgIHVjaGFyIGRpcmVjdDsKICAgICAgICB9IGQ4OwogICAgICAgIHN0cnVjdCBE
MzIgewogICAgICAgICAgICBRUmdiIGFyZ2I7CiAgICAgICAgICAgIHVpbnQgcGl4OwogICAgICAg
ICAgICBib29sIGludmFsaWQoKSBjb25zdCB7IHJldHVybiBhcmdiID09IFFDb2xvcjo6SW52YWxp
ZCAmJiBwaXggPT0gUUNvbG9yOjpEaXJ0OyB9CiAgICAgICAgICAgIGJvb2wgcHJvYmFibHlEaXJ0
eSgpIGNvbnN0IHsgcmV0dXJuIHBpeCA9PSBRQ29sb3I6OkRpcnQ7IH0KICAgICAgICB9IGQzMjsK
ICAgIH0gZDsKfTsKCgppbmxpbmUgUUNvbG9yOjpRQ29sb3IoKQp7IGQuZDMyLmFyZ2IgPSBJbnZh
bGlkOyBkLmQzMi5waXggPSBEaXJ0OyB9CgppbmxpbmUgUUNvbG9yOjpRQ29sb3IoIGludCByLCBp
bnQgZywgaW50IGIgKQp7IHNldFJnYiggciwgZywgYiApOyB9CgppbmxpbmUgUVJnYiBRQ29sb3I6
OnJnYigpIGNvbnN0CnsgcmV0dXJuIGQuYXJnYjsgfQoKaW5saW5lIGludCBRQ29sb3I6OnJlZCgp
IGNvbnN0CnsgcmV0dXJuIHFSZWQoZC5hcmdiKTsgfQoKaW5saW5lIGludCBRQ29sb3I6OmdyZWVu
KCkgY29uc3QKeyByZXR1cm4gcUdyZWVuKGQuYXJnYik7IH0KCmlubGluZSBpbnQgUUNvbG9yOjpi
bHVlKCkgY29uc3QKeyByZXR1cm4gcUJsdWUoZC5hcmdiKTsgfQoKaW5saW5lIGJvb2wgUUNvbG9y
Ojppc1ZhbGlkKCkgY29uc3QKewogICAgaWYgKCBjb2xvcm1vZGVsID09IGQ4ICkKICAgICAgICBy
ZXR1cm4gIWQuZDguaW52YWxpZDsKICAgIGVsc2UKICAgICAgICByZXR1cm4gIWQuZDMyLmludmFs
aWQoKTsKfQoKaW5saW5lIGJvb2wgUUNvbG9yOjpvcGVyYXRvcj09KCBjb25zdCBRQ29sb3IgJmMg
KSBjb25zdAp7CiAgICByZXR1cm4gZC5hcmdiID09IGMuZC5hcmdiICYmIGlzVmFsaWQoKSA9PSBj
LmlzVmFsaWQoKTsKfQoKaW5saW5lIGJvb2wgUUNvbG9yOjpvcGVyYXRvciE9KCBjb25zdCBRQ29s
b3IgJmMgKSBjb25zdAp7CiAgICByZXR1cm4gIW9wZXJhdG9yPT0oYyk7Cn0KCgoKCgoKCiBRRGF0
YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3QgUUNvbG9yICYgKTsKIFFE
YXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRQ29sb3IgJiApOwojIDQ0ICIu
Li8uLi9pbmNsdWRlL3FwYWxldHRlLmgiIDIKCiMgMSAiLi4vLi4vaW5jbHVkZS9xYnJ1c2guaCIg
MQojIDQ3ICIuLi8uLi9pbmNsdWRlL3FicnVzaC5oIgpjbGFzcyBRQnJ1c2g6IHB1YmxpYyBRdAp7
CmZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKcHVibGljOgogICAgUUJydXNoKCk7CiAgICBRQnJ1c2go
IEJydXNoU3R5bGUgKTsKICAgIFFCcnVzaCggY29uc3QgUUNvbG9yICYsIEJydXNoU3R5bGU9U29s
aWRQYXR0ZXJuICk7CiAgICBRQnJ1c2goIGNvbnN0IFFDb2xvciAmLCBjb25zdCBRUGl4bWFwICYg
KTsKICAgIFFCcnVzaCggY29uc3QgUUJydXNoICYgKTsKICAgflFCcnVzaCgpOwogICAgUUJydXNo
ICZvcGVyYXRvcj0oIGNvbnN0IFFCcnVzaCAmICk7CgogICAgQnJ1c2hTdHlsZSBzdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIGRhdGEtPnN0eWxlOyB9CiAgICB2b2lkIHNldFN0eWxlKCBCcnVzaFN0eWxl
ICk7CiAgICBjb25zdCBRQ29sb3IgJmNvbG9yKCljb25zdCB7IHJldHVybiBkYXRhLT5jb2xvcjsg
fQogICAgdm9pZCBzZXRDb2xvciggY29uc3QgUUNvbG9yICYgKTsKICAgIFFQaXhtYXAgKnBpeG1h
cCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEtPnBpeG1hcDsgfQogICAgdm9pZCBzZXRQaXhtYXAoIGNv
bnN0IFFQaXhtYXAgJiApOwoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUJydXNoICZwICkg
Y29uc3Q7CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFCcnVzaCAmYiApIGNvbnN0CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAhKG9wZXJhdG9yPT0o
YikpOyB9Cgpwcml2YXRlOgogICAgUUJydXNoIGNvcHkoKSBjb25zdDsKICAgIHZvaWQgZGV0YWNo
KCk7CiAgICB2b2lkIGluaXQoIGNvbnN0IFFDb2xvciAmLCBCcnVzaFN0eWxlICk7CiAgICBzdHJ1
Y3QgUUJydXNoRGF0YSA6IHB1YmxpYyBRU2hhcmVkIHsKICAgICAgICBCcnVzaFN0eWxlIHN0eWxl
OwogICAgICAgIFFDb2xvciBjb2xvcjsKICAgICAgICBRUGl4bWFwICpwaXhtYXA7CiAgICB9ICpk
YXRhOwp9OwoKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBj
b25zdCBRQnJ1c2ggJiApOwogUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFEYXRhU3RyZWFtICYs
IFFCcnVzaCAmICk7CiMgNDYgIi4uLy4uL2luY2x1ZGUvcXBhbGV0dGUuaCIgMgoKCgoKY2xhc3Mg
UUNvbG9yR3JvdXBQcml2YXRlOwoKY2xhc3MgUUNvbG9yR3JvdXAKewpwdWJsaWM6CiAgICBRQ29s
b3JHcm91cCgpOwogICAgUUNvbG9yR3JvdXAoIGNvbnN0IFFDb2xvciAmZm9yZWdyb3VuZCwgY29u
c3QgUUNvbG9yICZidXR0b24sCiAgICAgICAgICAgICAgICAgY29uc3QgUUNvbG9yICZsaWdodCwg
Y29uc3QgUUNvbG9yICZkYXJrLCBjb25zdCBRQ29sb3IgJm1pZCwKICAgICAgICAgICAgICAgICBj
b25zdCBRQ29sb3IgJnRleHQsIGNvbnN0IFFDb2xvciAmYmFzZSApOwogICAgUUNvbG9yR3JvdXAo
IGNvbnN0IFFCcnVzaCAmZm9yZWdyb3VuZCwgY29uc3QgUUJydXNoICZidXR0b24sCiAgICAgICAg
ICAgICAgICAgY29uc3QgUUJydXNoICZsaWdodCwgY29uc3QgUUJydXNoICZkYXJrLCBjb25zdCBR
QnJ1c2ggJm1pZCwKICAgICAgICAgICAgICAgICBjb25zdCBRQnJ1c2ggJnRleHQsIGNvbnN0IFFC
cnVzaCAmYnJpZ2h0X3RleHQsCiAgICAgICAgICAgICAgICAgY29uc3QgUUJydXNoICZiYXNlLCBj
b25zdCBRQnJ1c2ggJmJhY2tncm91bmQpOwogICAgUUNvbG9yR3JvdXAoIGNvbnN0IFFDb2xvckdy
b3VwICYgKTsKCiAgIH5RQ29sb3JHcm91cCgpOwoKICAgIFFDb2xvckdyb3VwJiBvcGVyYXRvciA9
KGNvbnN0IFFDb2xvckdyb3VwJik7CgoKICAgIGVudW0gQ29sb3JSb2xlIHsgRm9yZWdyb3VuZCwg
QnV0dG9uLCBMaWdodCwgTWlkbGlnaHQsIERhcmssIE1pZCwKICAgICAgICAgICAgICAgICAgICAg
VGV4dCwgQnJpZ2h0VGV4dCwgQnV0dG9uVGV4dCwgQmFzZSwgQmFja2dyb3VuZCwgU2hhZG93LAog
ICAgICAgICAgICAgICAgICAgICBIaWdobGlnaHQsIEhpZ2hsaWdodGVkVGV4dCwgTGluaywgTGlu
a1Zpc2l0ZWQsCiAgICAgICAgICAgICAgICAgICAgIE5Db2xvclJvbGVzIH07CgogICAgY29uc3Qg
UUNvbG9yICZjb2xvciggQ29sb3JSb2xlICkgY29uc3Q7CiAgICBjb25zdCBRQnJ1c2ggJmJydXNo
KCBDb2xvclJvbGUgKSBjb25zdDsKICAgIHZvaWQgc2V0Q29sb3IoIENvbG9yUm9sZSwgY29uc3Qg
UUNvbG9yICYgKTsKICAgIHZvaWQgc2V0QnJ1c2goIENvbG9yUm9sZSwgY29uc3QgUUJydXNoICYg
KTsKCiAgICBjb25zdCBRQ29sb3IgJmZvcmVncm91bmQoKSBjb25zdCB7IHJldHVybiBicltGb3Jl
Z3JvdW5kXS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmJ1dHRvbigpIGNvbnN0IHsgcmV0
dXJuIGJyW0J1dHRvbl0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZsaWdodCgpIGNvbnN0
IHsgcmV0dXJuIGJyW0xpZ2h0XS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJmRhcmsoKSBj
b25zdCB7IHJldHVybiBicltEYXJrXS5jb2xvcigpOyB9CiAgICBjb25zdCBRQ29sb3IgJm1pZCgp
IGNvbnN0IHsgcmV0dXJuIGJyW01pZF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZ0ZXh0
KCkgY29uc3QgeyByZXR1cm4gYnJbVGV4dF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZi
YXNlKCkgY29uc3QgeyByZXR1cm4gYnJbQmFzZV0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9y
ICZiYWNrZ3JvdW5kKCkgY29uc3QgeyByZXR1cm4gYnJbQmFja2dyb3VuZF0uY29sb3IoKTsgfQoK
ICAgIGNvbnN0IFFDb2xvciAmbWlkbGlnaHQoKSBjb25zdCB7IHJldHVybiBicltNaWRsaWdodF0u
Y29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZicmlnaHRUZXh0KCkgY29uc3QgeyByZXR1cm4g
YnJbQnJpZ2h0VGV4dF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9yICZidXR0b25UZXh0KCkg
Y29uc3QgeyByZXR1cm4gYnJbQnV0dG9uVGV4dF0uY29sb3IoKTsgfQogICAgY29uc3QgUUNvbG9y
ICZzaGFkb3coKSBjb25zdCB7IHJldHVybiBicltTaGFkb3ddLmNvbG9yKCk7IH0KICAgIGNvbnN0
IFFDb2xvciAmaGlnaGxpZ2h0KCkgY29uc3QgeyByZXR1cm4gYnJbSGlnaGxpZ2h0XS5jb2xvcigp
OyB9CiAgICBjb25zdCBRQ29sb3IgJmhpZ2hsaWdodGVkVGV4dCgpIGNvbnN0e3JldHVybiBicltI
aWdobGlnaHRlZFRleHRdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmbGluaygpIGNvbnN0
IHsgcmV0dXJuIGJyW0xpbmtdLmNvbG9yKCk7IH0KICAgIGNvbnN0IFFDb2xvciAmbGlua1Zpc2l0
ZWQoKSBjb25zdCB7IHJldHVybiBicltMaW5rVmlzaXRlZF0uY29sb3IoKTsgfQoKICAgIGJvb2wg
b3BlcmF0b3I9PSggY29uc3QgUUNvbG9yR3JvdXAgJmcgKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0
b3IhPSggY29uc3QgUUNvbG9yR3JvdXAgJmcgKSBjb25zdAogICAgICAgIHsgcmV0dXJuICEob3Bl
cmF0b3I9PShnKSk7IH0KCnByaXZhdGU6CiAgICBRQnJ1c2ggKmJyOwogICAgUUNvbG9yR3JvdXBQ
cml2YXRlICogZDsKCiAgICBmcmllbmQgY2xhc3MgUVBhbGV0dGU7Cn07CgoKY2xhc3MgUVBhbGV0
dGUKewpwdWJsaWM6CiAgICBRUGFsZXR0ZSgpOwogICAgUVBhbGV0dGUoIGNvbnN0IFFDb2xvciAm
YnV0dG9uICk7CiAgICBRUGFsZXR0ZSggY29uc3QgUUNvbG9yICZidXR0b24sIGNvbnN0IFFDb2xv
ciAmYmFja2dyb3VuZCApOwogICAgUVBhbGV0dGUoIGNvbnN0IFFDb2xvckdyb3VwICZhY3RpdmUs
IGNvbnN0IFFDb2xvckdyb3VwICZkaXNhYmxlZCwKICAgICAgICAgICAgICBjb25zdCBRQ29sb3JH
cm91cCAmaW5hY3RpdmUgKTsKICAgIFFQYWxldHRlKCBjb25zdCBRUGFsZXR0ZSAmICk7CiAgICB+
UVBhbGV0dGUoKTsKICAgIFFQYWxldHRlICZvcGVyYXRvcj0oIGNvbnN0IFFQYWxldHRlICYgKTsK
CiAgICBlbnVtIENvbG9yR3JvdXAgeyBEaXNhYmxlZCwgQWN0aXZlLCBJbmFjdGl2ZSwgTkNvbG9y
R3JvdXBzLCBOb3JtYWw9QWN0aXZlIH07CgogICAgY29uc3QgUUNvbG9yICZjb2xvciggQ29sb3JH
cm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSApIGNvbnN0OwogICAgY29uc3QgUUJydXNoICZi
cnVzaCggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSApIGNvbnN0OwogICAgdm9p
ZCBzZXRDb2xvciggQ29sb3JHcm91cCwgUUNvbG9yR3JvdXA6OkNvbG9yUm9sZSwgY29uc3QgUUNv
bG9yICYgKTsKICAgIHZvaWQgc2V0QnJ1c2goIENvbG9yR3JvdXAsIFFDb2xvckdyb3VwOjpDb2xv
clJvbGUsIGNvbnN0IFFCcnVzaCAmICk7CgogICAgdm9pZCBzZXRDb2xvciggUUNvbG9yR3JvdXA6
OkNvbG9yUm9sZSwgY29uc3QgUUNvbG9yICYgKTsKICAgIHZvaWQgc2V0QnJ1c2goIFFDb2xvckdy
b3VwOjpDb2xvclJvbGUsIGNvbnN0IFFCcnVzaCAmICk7CgogICAgUVBhbGV0dGUgY29weSgpIGNv
bnN0OwoKICAgIGNvbnN0IFFDb2xvckdyb3VwICZhY3RpdmUoKSBjb25zdCB7IHJldHVybiBkYXRh
LT5hY3RpdmU7IH0KICAgIGNvbnN0IFFDb2xvckdyb3VwICZkaXNhYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIGRhdGEtPmRpc2FibGVkOyB9CiAgICBjb25zdCBRQ29sb3JHcm91cCAmaW5hY3RpdmUoKSBj
b25zdCB7IHJldHVybiBkYXRhLT5pbmFjdGl2ZTsgfQoKICAgIGNvbnN0IFFDb2xvckdyb3VwICZu
b3JtYWwoKSBjb25zdCB7IHJldHVybiBhY3RpdmUoKTsgfQoKCiAgICB2b2lkIHNldEFjdGl2ZSgg
Y29uc3QgUUNvbG9yR3JvdXAgJiApOwogICAgdm9pZCBzZXREaXNhYmxlZCggY29uc3QgUUNvbG9y
R3JvdXAgJiApOwogICAgdm9pZCBzZXRJbmFjdGl2ZSggY29uc3QgUUNvbG9yR3JvdXAgJiApOwoK
ICAgIHZvaWQgc2V0Tm9ybWFsKCBjb25zdCBRQ29sb3JHcm91cCAmIGNnICkgeyBzZXRBY3RpdmUo
Y2cpOyB9CgoKICAgIGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUVBhbGV0dGUgJnAgKSBjb25zdDsK
ICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVBhbGV0dGUgJnAgKSBjb25zdAogICAgICAgICAg
ICAgIHsgcmV0dXJuICEob3BlcmF0b3I9PShwKSk7IH0KICAgIGJvb2wgaXNDb3B5T2YoIGNvbnN0
IFFQYWxldHRlICYgKTsKCiAgICBpbnQgc2VyaWFsTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gZGF0
YS0+c2VyX25vOyB9CgoKICAgIHN0YXRpYyBRQ29sb3JHcm91cDo6Q29sb3JSb2xlIGZvcmVncm91
bmRSb2xlRnJvbU1vZGUoIFF0OjpCYWNrZ3JvdW5kTW9kZSBtb2RlICk7CiAgICBzdGF0aWMgUUNv
bG9yR3JvdXA6OkNvbG9yUm9sZSBiYWNrZ3JvdW5kUm9sZUZyb21Nb2RlKCBRdDo6QmFja2dyb3Vu
ZE1vZGUgbW9kZSk7Cgpwcml2YXRlOgogICAgdm9pZCBkZXRhY2goKTsKICAgIGNvbnN0IFFCcnVz
aCAmZGlyZWN0QnJ1c2goIENvbG9yR3JvdXAsIFFDb2xvckdyb3VwOjpDb2xvclJvbGUgKSBjb25z
dDsKICAgIHZvaWQgZGlyZWN0U2V0QnJ1c2goIENvbG9yR3JvdXAsIFFDb2xvckdyb3VwOjpDb2xv
clJvbGUsIGNvbnN0IFFCcnVzaCYgKTsKCiAgICBzdHJ1Y3QgUVBhbERhdGEgOiBwdWJsaWMgUVNo
YXJlZCB7CiAgICAgICAgUUNvbG9yR3JvdXAgZGlzYWJsZWQ7CiAgICAgICAgUUNvbG9yR3JvdXAg
YWN0aXZlOwogICAgICAgIGludCBzZXJfbm87CiAgICAgICAgUUNvbG9yR3JvdXAgaW5hY3RpdmU7
CiAgICB9ICpkYXRhOwp9OwoKCgoKCgoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0
cmVhbSAmLCBjb25zdCBRQ29sb3JHcm91cCAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+Pigg
UURhdGFTdHJlYW0gJiwgUUNvbG9yR3JvdXAgJiApOwoKIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8
KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRUGFsZXR0ZSAmICk7CiBRRGF0YVN0cmVhbSAmb3BlcmF0
b3I+PiggUURhdGFTdHJlYW0gJiwgUVBhbGV0dGUgJiApOwojIDQ2ICIuLi8uLi9pbmNsdWRlL3F3
aWRnZXQuaCIgMgojIDEgIi4uLy4uL2luY2x1ZGUvcWZvbnQuaCIgMQojIDQ3ICIuLi8uLi9pbmNs
dWRlL3Fmb250LmgiCmNsYXNzIFFGb250UHJpdmF0ZTsKY2xhc3MgUVN0cmluZ0xpc3Q7CmNsYXNz
IFFUZXh0Rm9ybWF0Q29sbGVjdGlvbjsKCmNsYXNzIFFGb250CnsKcHVibGljOgogICAgZW51bSBT
dHlsZUhpbnQgewogICAgICAgIEhlbHZldGljYSwgU2Fuc1NlcmlmID0gSGVsdmV0aWNhLAogICAg
ICAgIFRpbWVzLCBTZXJpZiA9IFRpbWVzLAogICAgICAgIENvdXJpZXIsIFR5cGVXcml0ZXIgPSBD
b3VyaWVyLAogICAgICAgIE9sZEVuZ2xpc2gsIERlY29yYXRpdmUgPSBPbGRFbmdsaXNoLAogICAg
ICAgIFN5c3RlbSwKICAgICAgICBBbnlTdHlsZQogICAgfTsKCiAgICBlbnVtIFN0eWxlU3RyYXRl
Z3kgewogICAgICAgIFByZWZlckRlZmF1bHQgPSAweDAwMDEsCiAgICAgICAgUHJlZmVyQml0bWFw
ID0gMHgwMDAyLAogICAgICAgIFByZWZlckRldmljZSA9IDB4MDAwNCwKICAgICAgICBQcmVmZXJP
dXRsaW5lID0gMHgwMDA4LAogICAgICAgIEZvcmNlT3V0bGluZSA9IDB4MDAxMCwKICAgICAgICBQ
cmVmZXJNYXRjaCA9IDB4MDAyMCwKICAgICAgICBQcmVmZXJRdWFsaXR5ID0gMHgwMDQwLAogICAg
ICAgIFByZWZlckFudGlhbGlhcyA9IDB4MDA4MCwKICAgICAgICBOb0FudGlhbGlhcyA9IDB4MDEw
MAogICAgfTsKCiAgICBlbnVtIFdlaWdodCB7CiAgICAgICAgTGlnaHQgPSAyNSwKICAgICAgICBO
b3JtYWwgPSA1MCwKICAgICAgICBEZW1pQm9sZCA9IDYzLAogICAgICAgIEJvbGQgPSA3NSwKICAg
ICAgICBCbGFjayA9IDg3CiAgICB9OwoKCiAgICBRRm9udCgpOwoKICAgIFFGb250KCBjb25zdCBR
U3RyaW5nICZmYW1pbHksIGludCBwb2ludFNpemUgPSAxMiwgaW50IHdlaWdodCA9IE5vcm1hbCwK
ICAgICAgICAgICBib29sIGl0YWxpYyA9IEZBTFNFICk7CgogICAgUUZvbnQoIGNvbnN0IFFGb250
ICYgKTsKCiAgICB+UUZvbnQoKTsKCiAgICBRU3RyaW5nIGZhbWlseSgpIGNvbnN0OwogICAgdm9p
ZCBzZXRGYW1pbHkoIGNvbnN0IFFTdHJpbmcgJik7CgogICAgaW50IHBvaW50U2l6ZSgpIGNvbnN0
OwogICAgZmxvYXQgcG9pbnRTaXplRmxvYXQoKSBjb25zdDsKICAgIHZvaWQgc2V0UG9pbnRTaXpl
KCBpbnQgKTsKICAgIHZvaWQgc2V0UG9pbnRTaXplRmxvYXQoIGZsb2F0ICk7CgogICAgaW50IHBp
eGVsU2l6ZSgpIGNvbnN0OwogICAgdm9pZCBzZXRQaXhlbFNpemUoIGludCApOwogICAgdm9pZCBz
ZXRQaXhlbFNpemVGbG9hdCggZmxvYXQgKTsKCiAgICBpbnQgd2VpZ2h0KCkgY29uc3Q7CiAgICB2
b2lkIHNldFdlaWdodCggaW50ICk7CgogICAgYm9vbCBib2xkKCkgY29uc3Q7CiAgICB2b2lkIHNl
dEJvbGQoIGJvb2wgKTsKCiAgICBib29sIGl0YWxpYygpIGNvbnN0OwogICAgdm9pZCBzZXRJdGFs
aWMoIGJvb2wgKTsKCiAgICBib29sIHVuZGVybGluZSgpIGNvbnN0OwogICAgdm9pZCBzZXRVbmRl
cmxpbmUoIGJvb2wgKTsKCiAgICBib29sIHN0cmlrZU91dCgpIGNvbnN0OwogICAgdm9pZCBzZXRT
dHJpa2VPdXQoIGJvb2wgKTsKCiAgICBib29sIGZpeGVkUGl0Y2goKSBjb25zdDsKICAgIHZvaWQg
c2V0Rml4ZWRQaXRjaCggYm9vbCApOwoKICAgIFN0eWxlSGludCBzdHlsZUhpbnQoKSBjb25zdDsK
ICAgIFN0eWxlU3RyYXRlZ3kgc3R5bGVTdHJhdGVneSgpIGNvbnN0OwogICAgdm9pZCBzZXRTdHls
ZUhpbnQoIFN0eWxlSGludCwgU3R5bGVTdHJhdGVneSA9IFByZWZlckRlZmF1bHQgKTsKICAgIHZv
aWQgc2V0U3R5bGVTdHJhdGVneSggU3R5bGVTdHJhdGVneSBzICk7CgoKICAgIGJvb2wgcmF3TW9k
ZSgpIGNvbnN0OwogICAgdm9pZCBzZXRSYXdNb2RlKCBib29sICk7CgoKICAgIGJvb2wgZXhhY3RN
YXRjaCgpIGNvbnN0OwoKICAgIFFGb250ICZvcGVyYXRvcj0oIGNvbnN0IFFGb250ICYgKTsKICAg
IGJvb2wgb3BlcmF0b3I9PSggY29uc3QgUUZvbnQgJiApIGNvbnN0OwogICAgYm9vbCBvcGVyYXRv
ciE9KCBjb25zdCBRRm9udCAmICkgY29uc3Q7CiAgICBib29sIGlzQ29weU9mKCBjb25zdCBRRm9u
dCAmICkgY29uc3Q7CgoKCgoKICAgIFF0OjpIQU5ETEUgaGFuZGxlKCkgY29uc3Q7CgoKCgogICAg
dm9pZCBzZXRSYXdOYW1lKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcgcmF3TmFtZSgp
IGNvbnN0OwoKICAgIFFTdHJpbmcga2V5KCkgY29uc3Q7CgogICAgUVN0cmluZyB0b1N0cmluZygp
IGNvbnN0OwogICAgYm9vbCBmcm9tU3RyaW5nKGNvbnN0IFFTdHJpbmcgJik7CgoKICAgIHN0YXRp
YyBRU3RyaW5nIHN1YnN0aXR1dGUoY29uc3QgUVN0cmluZyAmKTsKICAgIHN0YXRpYyBRU3RyaW5n
TGlzdCBzdWJzdGl0dXRlcyhjb25zdCBRU3RyaW5nICYpOwogICAgc3RhdGljIFFTdHJpbmdMaXN0
IHN1YnN0aXR1dGlvbnMoKTsKICAgIHN0YXRpYyB2b2lkIGluc2VydFN1YnN0aXR1dGlvbihjb25z
dCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZyAmKTsKICAgIHN0YXRpYyB2b2lkIGluc2VydFN1YnN0
aXR1dGlvbnMoY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmdMaXN0ICYpOwogICAgc3RhdGlj
IHZvaWQgcmVtb3ZlU3Vic3RpdHV0aW9uKGNvbnN0IFFTdHJpbmcgJik7CgogICAgc3RhdGljIHZv
aWQgaW5pdGlhbGl6ZSgpOwogICAgc3RhdGljIHZvaWQgY2xlYW51cCgpOwogICAgc3RhdGljIHZv
aWQgY2FjaGVTdGF0aXN0aWNzKCk7CgoKCgoKCgogICAgZW51bSBTY3JpcHQgewoKICAgICAgICBM
YXRpbiwKICAgICAgICBHcmVlaywKICAgICAgICBDeXJpbGxpYywKICAgICAgICBBcm1lbmlhbiwK
ICAgICAgICBHZW9yZ2lhbiwKICAgICAgICBSdW5pYywKICAgICAgICBPZ2hhbSwKICAgICAgICBT
cGFjaW5nTW9kaWZpZXJzLAogICAgICAgIENvbWJpbmluZ01hcmtzLAoKCiAgICAgICAgSGVicmV3
LAogICAgICAgIEFyYWJpYywKICAgICAgICBTeXJpYWMsCiAgICAgICAgVGhhYW5hLAoKCiAgICAg
ICAgRGV2YW5hZ2FyaSwKICAgICAgICBCZW5nYWxpLAogICAgICAgIEd1cm11a2hpLAogICAgICAg
IEd1amFyYXRpLAogICAgICAgIE9yaXlhLAogICAgICAgIFRhbWlsLAogICAgICAgIFRlbHVndSwK
ICAgICAgICBLYW5uYWRhLAogICAgICAgIE1hbGF5YWxhbSwKICAgICAgICBTaW5oYWxhLAogICAg
ICAgIFRoYWksCiAgICAgICAgTGFvLAogICAgICAgIFRpYmV0YW4sCiAgICAgICAgTXlhbm1hciwK
ICAgICAgICBLaG1lciwKCgogICAgICAgIEhhbiwKICAgICAgICBIaXJhZ2FuYSwKICAgICAgICBL
YXRha2FuYSwKICAgICAgICBIYW5ndWwsCiAgICAgICAgQm9wb21vZm8sCiAgICAgICAgWWksCgoK
ICAgICAgICBFdGhpb3BpYywKICAgICAgICBDaGVyb2tlZSwKICAgICAgICBDYW5hZGlhbkFib3Jp
Z2luYWwsCiAgICAgICAgTW9uZ29saWFuLAoKCiAgICAgICAgQ3VycmVuY3lTeW1ib2xzLAogICAg
ICAgIExldHRlcmxpa2VTeW1ib2xzLAogICAgICAgIE51bWJlckZvcm1zLAogICAgICAgIE1hdGhl
bWF0aWNhbE9wZXJhdG9ycywKICAgICAgICBUZWNobmljYWxTeW1ib2xzLAogICAgICAgIEdlb21l
dHJpY1N5bWJvbHMsCiAgICAgICAgTWlzY2VsbGFuZW91c1N5bWJvbHMsCiAgICAgICAgRW5jbG9z
ZWRBbmRTcXVhcmUsCiAgICAgICAgQnJhaWxsZSwKCiAgICAgICAgVW5pY29kZSwKCgogICAgICAg
IE5TY3JpcHRzLAogICAgICAgIFVua25vd25TY3JpcHQgPSBOU2NyaXB0cywKCiAgICAgICAgTm9T
Y3JpcHQsCgoKCgoKCiAgICAgICAgSGFuWDExLAoKICAgICAgICBMYXRpbkJhc2ljID0gTGF0aW4s
CiAgICAgICAgTGF0aW5FeHRlbmRlZEFfMiA9IEhhblgxMSArIDEsCiAgICAgICAgTGF0aW5FeHRl
bmRlZEFfMywKICAgICAgICBMYXRpbkV4dGVuZGVkQV80LAogICAgICAgIExhdGluRXh0ZW5kZWRB
XzE0LAogICAgICAgIExhdGluRXh0ZW5kZWRBXzE1LAogICAgICAgIEthdGFrYW5hSGFsZldpZHRo
LAoKICAgICAgICBMYXN0UHJpdmF0ZVNjcmlwdAogICAgfTsKCiAgICBRU3RyaW5nIGRlZmF1bHRG
YW1pbHkoKSBjb25zdDsKICAgIFFTdHJpbmcgbGFzdFJlc29ydEZhbWlseSgpIGNvbnN0OwogICAg
UVN0cmluZyBsYXN0UmVzb3J0Rm9udCgpIGNvbnN0OwoKCgogICAgc3RhdGljIFFGb250IGRlZmF1
bHRGb250KCk7CiAgICBzdGF0aWMgdm9pZCBzZXREZWZhdWx0Rm9udCggY29uc3QgUUZvbnQgJiAp
OwoKCgoKcHJvdGVjdGVkOgoKICAgIGJvb2wgZGlydHkoKSBjb25zdDsKICAgIGludCBkZWNpUG9p
bnRTaXplKCkgY29uc3Q7CgoKcHJpdmF0ZToKICAgIFFGb250KCBRRm9udFByaXZhdGUgKiwgYm9v
bCBkZWVwID0gVFJVRSApOwogICAgUUZvbnQoIFFGb250UHJpdmF0ZSAqLCBRUGFpbnREZXZpY2Ug
KnBkICk7CgogICAgdm9pZCBkZXRhY2goKTsKIyAyOTggIi4uLy4uL2luY2x1ZGUvcWZvbnQuaCIK
ICAgIHZvaWQgeDExU2V0U2NyZWVuKCBpbnQgc2NyZWVuID0gLTEgKTsKICAgIGludCB4MTFTY3Jl
ZW4oKSBjb25zdDsKCgogICAgZnJpZW5kIGNsYXNzIFFGb250TWV0cmljczsKICAgIGZyaWVuZCBj
bGFzcyBRRm9udEluZm87CiAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7CiAgICBmcmllbmQgY2xh
c3MgUVBTUHJpbnRlckZvbnQ7CiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0aW9uOwogICAgZnJp
ZW5kIGNsYXNzIFFXaWRnZXQ7CiAgICBmcmllbmQgY2xhc3MgUVRleHRGb3JtYXRDb2xsZWN0aW9u
OwoKCiAgICBmcmllbmQgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNv
bnN0IFFGb250ICYgKTsKICAgIGZyaWVuZCBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFT
dHJlYW0gJiwgUUZvbnQgJiApOwoKCiAgICBRRm9udFByaXZhdGUgKmQ7Cn07CgoKaW5saW5lIGJv
b2wgUUZvbnQ6OmJvbGQoKSBjb25zdAp7IHJldHVybiB3ZWlnaHQoKSA+IE5vcm1hbDsgfQoKCmlu
bGluZSB2b2lkIFFGb250OjpzZXRCb2xkKCBib29sIGVuYWJsZSApCnsgc2V0V2VpZ2h0KCBlbmFi
bGUgPyBCb2xkIDogTm9ybWFsICk7IH0KIyAzMzQgIi4uLy4uL2luY2x1ZGUvcWZvbnQuaCIKIFFE
YXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmLCBjb25zdCBRRm9udCAmICk7CiBR
RGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0gJiwgUUZvbnQgJiApOwojIDQ3ICIu
Li8uLi9pbmNsdWRlL3F3aWRnZXQuaCIgMgojIDEgIi4uLy4uL2luY2x1ZGUvcWZvbnRtZXRyaWNz
LmgiIDEKIyA0NiAiLi4vLi4vaW5jbHVkZS9xZm9udG1ldHJpY3MuaCIKY2xhc3MgUUZvbnRTdHJ1
Y3Q7CmNsYXNzIFFUZXh0Q29kZWM7CmNsYXNzIFFUZXh0UGFyYWc7CgpjbGFzcyBRRm9udE1ldHJp
Y3MKewpwdWJsaWM6CiAgICBRRm9udE1ldHJpY3MoIGNvbnN0IFFGb250ICYgKTsKICAgIFFGb250
TWV0cmljcyggY29uc3QgUUZvbnRNZXRyaWNzICYgKTsKICAgIH5RRm9udE1ldHJpY3MoKTsKCiAg
ICBRRm9udE1ldHJpY3MgJm9wZXJhdG9yPSggY29uc3QgUUZvbnRNZXRyaWNzICYgKTsKCiAgICBp
bnQgYXNjZW50KCkgY29uc3Q7CiAgICBpbnQgZGVzY2VudCgpIGNvbnN0OwogICAgaW50IGhlaWdo
dCgpIGNvbnN0OwogICAgaW50IGxlYWRpbmcoKSBjb25zdDsKICAgIGludCBsaW5lU3BhY2luZygp
IGNvbnN0OwogICAgaW50IG1pbkxlZnRCZWFyaW5nKCkgY29uc3Q7CiAgICBpbnQgbWluUmlnaHRC
ZWFyaW5nKCkgY29uc3Q7CiAgICBpbnQgbWF4V2lkdGgoKSBjb25zdDsKCiAgICBib29sIGluRm9u
dChRQ2hhcikgY29uc3Q7CgogICAgaW50IGxlZnRCZWFyaW5nKFFDaGFyKSBjb25zdDsKICAgIGlu
dCByaWdodEJlYXJpbmcoUUNoYXIpIGNvbnN0OwogICAgaW50IHdpZHRoKCBjb25zdCBRU3RyaW5n
ICYsIGludCBsZW4gPSAtMSApIGNvbnN0OwoKICAgIGludCB3aWR0aCggUUNoYXIgKSBjb25zdDsK
CiAgICBpbnQgd2lkdGgoIGNoYXIgYyApIGNvbnN0IHsgcmV0dXJuIHdpZHRoKCAoUUNoYXIpIGMg
KTsgfQoKCiAgICBpbnQgY2hhcldpZHRoKCBjb25zdCBRU3RyaW5nICZzdHIsIGludCBwb3MgKSBj
b25zdDsKICAgIFFSZWN0IGJvdW5kaW5nUmVjdCggY29uc3QgUVN0cmluZyAmLCBpbnQgbGVuID0g
LTEgKSBjb25zdDsKICAgIFFSZWN0IGJvdW5kaW5nUmVjdCggUUNoYXIgKSBjb25zdDsKICAgIFFS
ZWN0IGJvdW5kaW5nUmVjdCggaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIGludCBmbGFncywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgc3RyLCBpbnQgbGVu
PS0xLCBpbnQgdGFic3RvcHM9MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp0
YWJhcnJheT0wLCBRVGV4dFBhcmFnICoqaW50ZXJuPTAgKSBjb25zdDsKICAgIFFTaXplIHNpemUo
IGludCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIHN0ciwgaW50
IGxlbj0tMSwgaW50IHRhYnN0b3BzPTAsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgKnRhYmFy
cmF5PTAsIFFUZXh0UGFyYWcgKippbnRlcm49MCApIGNvbnN0OwoKICAgIGludCB1bmRlcmxpbmVQ
b3MoKSBjb25zdDsKICAgIGludCBzdHJpa2VPdXRQb3MoKSBjb25zdDsKICAgIGludCBsaW5lV2lk
dGgoKSBjb25zdDsKCnByaXZhdGU6CiAgICBRRm9udE1ldHJpY3MoIGNvbnN0IFFQYWludGVyICog
KTsKICAgIHN0YXRpYyB2b2lkIHJlc2V0KCBjb25zdCBRUGFpbnRlciAqICk7CiMgMTA0ICIuLi8u
Li9pbmNsdWRlL3Fmb250bWV0cmljcy5oIgogICAgZnJpZW5kIGNsYXNzIFFXaWRnZXQ7CiAgICBm
cmllbmQgY2xhc3MgUVBhaW50ZXI7CiAgICBmcmllbmQgY2xhc3MgUVRleHRGb3JtYXQ7CgoKCgog
ICAgUUZvbnRQcml2YXRlICpkOwogICAgUVBhaW50ZXIgKnBhaW50ZXI7CiAgICBpbnQgZmxhZ3M7
CgogICAgYm9vbCB1bmRlcmxpbmVGbGFnKCkgY29uc3QgeyByZXR1cm4gKGZsYWdzICYgMHgxKSAh
PSAwOyB9CiAgICBib29sIHN0cmlrZU91dEZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiAw
eDIpICE9IDA7IH0KICAgIHZvaWQgc2V0VW5kZXJsaW5lRmxhZygpIHsgZmxhZ3MgfD0gMHgxOyB9
CiAgICB2b2lkIHNldFN0cmlrZU91dEZsYWcoKSB7IGZsYWdzIHw9IDB4MjsgfQp9OwojIDQ4ICIu
Li8uLi9pbmNsdWRlL3F3aWRnZXQuaCIgMgojIDEgIi4uLy4uL2luY2x1ZGUvcWZvbnRpbmZvLmgi
IDEKIyA0NiAiLi4vLi4vaW5jbHVkZS9xZm9udGluZm8uaCIKY2xhc3MgUUZvbnRJbmZvCnsKcHVi
bGljOgogICAgUUZvbnRJbmZvKCBjb25zdCBRRm9udCAmICk7CiAgICBRRm9udEluZm8oIGNvbnN0
IFFGb250SW5mbyAmICk7CiAgICB+UUZvbnRJbmZvKCk7CgogICAgUUZvbnRJbmZvICZvcGVyYXRv
cj0oIGNvbnN0IFFGb250SW5mbyAmICk7CgogICAgUVN0cmluZyBmYW1pbHkoKSBjb25zdDsKICAg
IGludCBwaXhlbFNpemUoKSBjb25zdDsKICAgIGludCBwb2ludFNpemUoKSBjb25zdDsKICAgIGJv
b2wgaXRhbGljKCkgY29uc3Q7CiAgICBpbnQgd2VpZ2h0KCkgY29uc3Q7CiAgICBib29sIGJvbGQo
KSBjb25zdDsKICAgIGJvb2wgdW5kZXJsaW5lKCkgY29uc3Q7CiAgICBib29sIHN0cmlrZU91dCgp
IGNvbnN0OwogICAgYm9vbCBmaXhlZFBpdGNoKCkgY29uc3Q7CiAgICBRRm9udDo6U3R5bGVIaW50
IHN0eWxlSGludCgpIGNvbnN0OwogICAgYm9vbCByYXdNb2RlKCkgY29uc3Q7CgogICAgYm9vbCBl
eGFjdE1hdGNoKCkgY29uc3Q7CgoKcHJpdmF0ZToKICAgIFFGb250SW5mbyggY29uc3QgUVBhaW50
ZXIgKiApOwogICAgc3RhdGljIHZvaWQgcmVzZXQoIGNvbnN0IFFQYWludGVyICogKTsKCiAgICBR
Rm9udFByaXZhdGUgKmQ7CiAgICBRUGFpbnRlciAqcGFpbnRlcjsKICAgIGludCBmbGFnczsKCiAg
ICBib29sIHVuZGVybGluZUZsYWcoKSBjb25zdCB7IHJldHVybiAoZmxhZ3MgJiAweDEpICE9IDA7
IH0KICAgIGJvb2wgc3RyaWtlT3V0RmxhZygpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAmIDB4Mikg
IT0gMDsgfQogICAgYm9vbCBleGFjdE1hdGNoRmxhZygpIGNvbnN0IHsgcmV0dXJuIChmbGFncyAm
IDB4NCkgIT0gMDsgfQogICAgdm9pZCBzZXRVbmRlcmxpbmVGbGFnKCkgeyBmbGFncyB8PSAweDE7
IH0KICAgIHZvaWQgc2V0U3RyaWtlT3V0RmxhZygpIHsgZmxhZ3MgfD0gMHgyOyB9CiAgICB2b2lk
IHNldEV4YWN0TWF0Y2hGbGFnKCkgeyBmbGFncyB8PSAweDQ7IH0KCiAgICBmcmllbmQgY2xhc3Mg
UVdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRUGFpbnRlcjsKfTsKCgppbmxpbmUgYm9vbCBRRm9u
dEluZm86OmJvbGQoKSBjb25zdAp7IHJldHVybiB3ZWlnaHQoKSA+IFFGb250OjpOb3JtYWw7IH0K
IyA0OSAiLi4vLi4vaW5jbHVkZS9xd2lkZ2V0LmgiIDIKIyAxICIuLi8uLi9pbmNsdWRlL3FzaXpl
cG9saWN5LmgiIDEKIyA0MiAiLi4vLi4vaW5jbHVkZS9xc2l6ZXBvbGljeS5oIgojIDEgIi4uLy4u
L2luY2x1ZGUvcWdsb2JhbC5oIiAxCiMgNDMgIi4uLy4uL2luY2x1ZGUvcXNpemVwb2xpY3kuaCIg
MgoKCgoKY2xhc3MgUVNpemVQb2xpY3kKewpwcml2YXRlOgogICAgZW51bSB7IEhTaXplID0gNiwg
SE1hc2sgPSAweDNmLCBWTWFzayA9IEhNYXNrIDw8IEhTaXplLAogICAgICAgICAgIE1heUdyb3cg
PSAxLCBFeHBNYXNrID0gMiwgTWF5U2hyaW5rID0gNCB9OwpwdWJsaWM6CiAgICBlbnVtIFNpemVU
eXBlIHsgRml4ZWQgPSAwLAogICAgICAgICAgICAgICAgICAgIE1pbmltdW0gPSBNYXlHcm93LAog
ICAgICAgICAgICAgICAgICAgIE1heGltdW0gPSBNYXlTaHJpbmssCiAgICAgICAgICAgICAgICAg
ICAgUHJlZmVycmVkID0gTWF5R3JvdyB8IE1heVNocmluaywKICAgICAgICAgICAgICAgICAgICBN
aW5pbXVtRXhwYW5kaW5nID0gTWF5R3JvdyB8IEV4cE1hc2ssCiAgICAgICAgICAgICAgICAgICAg
RXhwYW5kaW5nID0gTWF5R3JvdyB8IE1heVNocmluayB8IEV4cE1hc2ssCiAgICAgICAgICAgICAg
ICAgICAgSWdub3JlZCA9IEV4cE1hc2sgfTsKCiAgICBlbnVtIEV4cGFuZERhdGEgeyBOb0RpcmVj
dGlvbiA9IDAsCiAgICAgICAgICAgICAgICAgICAgICBIb3Jpem9udGFsbHkgPSAxLAogICAgICAg
ICAgICAgICAgICAgICAgVmVydGljYWxseSA9IDIsCgogICAgICAgICAgICAgICAgICAgICAgSG9y
aXpvbnRhbCA9IEhvcml6b250YWxseSwKICAgICAgICAgICAgICAgICAgICAgIFZlcnRpY2FsID0g
VmVydGljYWxseSwKCiAgICAgICAgICAgICAgICAgICAgICBCb3RoRGlyZWN0aW9ucyA9IEhvcml6
b250YWxseSB8IFZlcnRpY2FsbHkgfTsKCiAgICBRU2l6ZVBvbGljeSgpIDogZGF0YSggMCApIHsg
fQoKICAgIFFTaXplUG9saWN5KCBTaXplVHlwZSBob3IsIFNpemVUeXBlIHZlciwgYm9vbCBoZncg
PSBGQUxTRSApCiAgICAgICAgOiBkYXRhKCBob3IgfCAodmVyPDxIU2l6ZSkgfCAoaGZ3ID8gKFFf
VUlOVDMyKSgxPDwyKkhTaXplKSA6IDApICkgeyB9CiAgICBRU2l6ZVBvbGljeSggU2l6ZVR5cGUg
aG9yLCBTaXplVHlwZSB2ZXIsIHVjaGFyIGhvcnMsIHVjaGFyIHZlcnMsIGJvb2wgaGZ3ID0gRkFM
U0UgKTsKCiAgICBTaXplVHlwZSBob3JEYXRhKCkgY29uc3QgeyByZXR1cm4gKFNpemVUeXBlKSgg
ZGF0YSAmIEhNYXNrICk7IH0KICAgIFNpemVUeXBlIHZlckRhdGEoKSBjb25zdCB7IHJldHVybiAo
U2l6ZVR5cGUpKCAoZGF0YSAmIFZNYXNrKSA+PiBIU2l6ZSApOyB9CgogICAgYm9vbCBtYXlTaHJp
bmtIb3Jpem9udGFsbHkoKSBjb25zdCB7IHJldHVybiBob3JEYXRhKCkgJiBNYXlTaHJpbmsgfHwg
aG9yRGF0YSgpID09IElnbm9yZWQ7IH0KICAgIGJvb2wgbWF5U2hyaW5rVmVydGljYWxseSgpIGNv
bnN0IHsgcmV0dXJuIHZlckRhdGEoKSAmIE1heVNocmluayB8fCB2ZXJEYXRhKCkgPT0gSWdub3Jl
ZDsgfQogICAgYm9vbCBtYXlHcm93SG9yaXpvbnRhbGx5KCkgY29uc3QgeyByZXR1cm4gaG9yRGF0
YSgpICYgTWF5R3JvdyB8fCBob3JEYXRhKCkgPT0gSWdub3JlZDsgfQogICAgYm9vbCBtYXlHcm93
VmVydGljYWxseSgpIGNvbnN0IHsgcmV0dXJuIHZlckRhdGEoKSAmIE1heUdyb3cgfHwgdmVyRGF0
YSgpID09IElnbm9yZWQ7IH0KCiAgICBFeHBhbmREYXRhIGV4cGFuZGluZygpIGNvbnN0CiAgICB7
CiAgICAgICAgcmV0dXJuIChFeHBhbmREYXRhKSggKGludCkodmVyRGF0YSgpICYgRXhwTWFzayA/
IFZlcnRpY2FsbHkgOiAwKSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoaG9y
RGF0YSgpICYgRXhwTWFzayA/IEhvcml6b250YWxseSA6IDApICk7CiAgICB9CgogICAgdm9pZCBz
ZXRIb3JEYXRhKCBTaXplVHlwZSBkICkgeyBkYXRhID0gKFFfVUlOVDMyKShkYXRhICYgfkhNYXNr
KSB8IGQ7IH0KICAgIHZvaWQgc2V0VmVyRGF0YSggU2l6ZVR5cGUgZCApIHsgZGF0YSA9IChRX1VJ
TlQzMikoZGF0YSAmIH4oSE1hc2sgPDwgSFNpemUpKSB8CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoZCA8PCBIU2l6ZSk7IH0KCiAgICB2b2lkIHNldEhlaWdodEZv
cldpZHRoKCBib29sIGIgKSB7IGRhdGEgPSBiID8gKFFfVUlOVDMyKSggZGF0YSB8ICggMSA8PCAy
KkhTaXplICkgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAoUV9VSU5UMzIpKCBkYXRhICYgfiggMSA8PCAyKkhTaXplICkgKTsgfQogICAgYm9vbCBoYXNI
ZWlnaHRGb3JXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEgJiAoIDEgPDwgMipIU2l6ZSApOyB9
CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRU2l6ZVBvbGljeSYgcyApIGNvbnN0IHsgcmV0
dXJuIGRhdGEgPT0gcy5kYXRhOyB9CiAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0IFFTaXplUG9s
aWN5JiBzICkgY29uc3QgeyByZXR1cm4gZGF0YSAhPSBzLmRhdGE7IH0KCgogICAgdWludCBob3JT
dHJldGNoKCkgY29uc3QgeyByZXR1cm4gZGF0YSA+PiAyNDsgfQogICAgdWludCB2ZXJTdHJldGNo
KCkgY29uc3QgeyByZXR1cm4gKGRhdGEgPj4gMTYpICYgMHhmZjsgfQogICAgdm9pZCBzZXRIb3JT
dHJldGNoKCB1Y2hhciBzZiApIHsgZGF0YSA9IChkYXRhJjB4MDBmZmZmZmYpIHwgKHVpbnQoc2Yp
PDwyNCk7IH0KICAgIHZvaWQgc2V0VmVyU3RyZXRjaCggdWNoYXIgc2YgKSB7IGRhdGEgPSAoZGF0
YSYweGZmMDBmZmZmKSB8ICh1aW50KHNmKTw8MTYpOyB9CiAgICBpbmxpbmUgdm9pZCB0cmFuc3Bv
c2UoKTsKCnByaXZhdGU6CiAgICBRU2l6ZVBvbGljeSggaW50IGkgKSA6IGRhdGEoIChRX1VJTlQz
MilpICkgeyB9CgogICAgUV9VSU5UMzIgZGF0YTsKfTsKCmlubGluZSBRU2l6ZVBvbGljeTo6UVNp
emVQb2xpY3koIFNpemVUeXBlIGhvciwgU2l6ZVR5cGUgdmVyLCB1Y2hhciBob3JzLCB1Y2hhciB2
ZXJzLCBib29sIGhmdyApCiAgICA6IGRhdGEoIGhvciB8ICh2ZXI8PEhTaXplKSB8IChoZncgPyAo
UV9VSU5UMzIpKDE8PDIqSFNpemUpIDogMCkgKSB7CiAgICBzZXRIb3JTdHJldGNoKCBob3JzICk7
CiAgICBzZXRWZXJTdHJldGNoKCB2ZXJzICk7Cn0KCmlubGluZSB2b2lkIFFTaXplUG9saWN5Ojp0
cmFuc3Bvc2UoKSB7CiAgICAqdGhpcyA9IFFTaXplUG9saWN5KCB2ZXJEYXRhKCksIGhvckRhdGEo
KSwgdmVyU3RyZXRjaCgpLCBob3JTdHJldGNoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBo
YXNIZWlnaHRGb3JXaWR0aCgpICk7Cn0KIyA1MCAiLi4vLi4vaW5jbHVkZS9xd2lkZ2V0LmgiIDIK
CgpjbGFzcyBRTGF5b3V0OwpzdHJ1Y3QgUVdFeHRyYTsKc3RydWN0IFFUTFdFeHRyYTsKY2xhc3Mg
UUZvY3VzRGF0YTsKY2xhc3MgUUN1cnNvcjsKY2xhc3MgUVdTUmVnaW9uTWFuYWdlcjsKY2xhc3Mg
UVN0eWxlOwoKY2xhc3MgUVdpZGdldCA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgUVBhaW50RGV2
aWNlCnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNsYXNz
TmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZpcnR1
YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9lbWl0
KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwgaW50
IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2JqZWN0
KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNNZXRh
T2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsgfSBz
dGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0YXRp
YyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHByaXZh
dGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKICAgCiAgIAogICAKICAgCiAgIAogICAK
ICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAog
ICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAg
IAogICAKICAgCiAgIAogICAKCiAgIAogICAKCgogICAKICAgCiAgIAoKICAgCiAgIAogICAKICAg
CiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAKICAgCiAgIAogICAK
ICAgCiAgIAoKcHVibGljOgogICAgZXhwbGljaXQgUVdpZGdldCggUVdpZGdldCogcGFyZW50PTAs
IGNvbnN0IGNoYXIqIG5hbWU9MCwgV0ZsYWdzIGY9MCApOwogICAgflFXaWRnZXQoKTsKCiAgICBX
SWQgd2luSWQoKSBjb25zdDsKICAgIHZvaWQgc2V0TmFtZSggY29uc3QgY2hhciAqbmFtZSApOwoK
CgogICAgUVN0eWxlICZzdHlsZSgpIGNvbnN0OwogICAgdm9pZCBzZXRTdHlsZSggUVN0eWxlICog
KTsKICAgIFFTdHlsZSogc2V0U3R5bGUoIGNvbnN0IFFTdHJpbmcmICk7CgoKCiAgICBib29sIGlz
VG9wTGV2ZWwoKSBjb25zdDsKICAgIGJvb2wgaXNEaWFsb2coKSBjb25zdDsKICAgIGJvb2wgaXNQ
b3B1cCgpIGNvbnN0OwogICAgYm9vbCBpc0Rlc2t0b3AoKSBjb25zdDsKICAgIGJvb2wgaXNNb2Rh
bCgpIGNvbnN0OwoKICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3Q7CiAgICBib29sIGlzRW5hYmxl
ZFRvKFFXaWRnZXQqKSBjb25zdDsKICAgIGJvb2wgaXNFbmFibGVkVG9UTFcoKSBjb25zdDsKCnB1
YmxpYyA6CiAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZCggYm9vbCApOwogICAgdm9pZCBzZXRE
aXNhYmxlZCggYm9vbCApOwoKCgpwdWJsaWM6CiAgICBRUmVjdCBmcmFtZUdlb21ldHJ5KCkgY29u
c3Q7CiAgICBjb25zdCBRUmVjdCAmZ2VvbWV0cnkoKSBjb25zdDsKICAgIGludCB4KCkgY29uc3Q7
CiAgICBpbnQgeSgpIGNvbnN0OwogICAgUVBvaW50IHBvcygpIGNvbnN0OwogICAgUVNpemUgZnJh
bWVTaXplKCkgY29uc3Q7CiAgICBRU2l6ZSBzaXplKCkgY29uc3Q7CiAgICBpbnQgd2lkdGgoKSBj
b25zdDsKICAgIGludCBoZWlnaHQoKSBjb25zdDsKICAgIFFSZWN0IHJlY3QoKSBjb25zdDsKICAg
IFFSZWN0IGNoaWxkcmVuUmVjdCgpIGNvbnN0OwogICAgUVJlZ2lvbiBjaGlsZHJlblJlZ2lvbigp
IGNvbnN0OwoKICAgIFFTaXplIG1pbmltdW1TaXplKCkgY29uc3Q7CiAgICBRU2l6ZSBtYXhpbXVt
U2l6ZSgpIGNvbnN0OwogICAgaW50IG1pbmltdW1XaWR0aCgpIGNvbnN0OwogICAgaW50IG1pbmlt
dW1IZWlnaHQoKSBjb25zdDsKICAgIGludCBtYXhpbXVtV2lkdGgoKSBjb25zdDsKICAgIGludCBt
YXhpbXVtSGVpZ2h0KCkgY29uc3Q7CiAgICB2b2lkIHNldE1pbmltdW1TaXplKCBjb25zdCBRU2l6
ZSAmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0TWluaW11bVNpemUoIGludCBtaW53LCBpbnQgbWlu
aCApOwogICAgdm9pZCBzZXRNYXhpbXVtU2l6ZSggY29uc3QgUVNpemUgJiApOwogICAgdmlydHVh
bCB2b2lkIHNldE1heGltdW1TaXplKCBpbnQgbWF4dywgaW50IG1heGggKTsKICAgIHZvaWQgc2V0
TWluaW11bVdpZHRoKCBpbnQgbWludyApOwogICAgdm9pZCBzZXRNaW5pbXVtSGVpZ2h0KCBpbnQg
bWluaCApOwogICAgdm9pZCBzZXRNYXhpbXVtV2lkdGgoIGludCBtYXh3ICk7CiAgICB2b2lkIHNl
dE1heGltdW1IZWlnaHQoIGludCBtYXhoICk7CgogICAgUVNpemUgc2l6ZUluY3JlbWVudCgpIGNv
bnN0OwogICAgdm9pZCBzZXRTaXplSW5jcmVtZW50KCBjb25zdCBRU2l6ZSAmICk7CiAgICB2aXJ0
dWFsIHZvaWQgc2V0U2l6ZUluY3JlbWVudCggaW50IHcsIGludCBoICk7CiAgICBRU2l6ZSBiYXNl
U2l6ZSgpIGNvbnN0OwogICAgdm9pZCBzZXRCYXNlU2l6ZSggY29uc3QgUVNpemUgJiApOwogICAg
dm9pZCBzZXRCYXNlU2l6ZSggaW50IGJhc2V3LCBpbnQgYmFzZWggKTsKCiAgICB2b2lkIHNldEZp
eGVkU2l6ZSggY29uc3QgUVNpemUgJiApOwogICAgdm9pZCBzZXRGaXhlZFNpemUoIGludCB3LCBp
bnQgaCApOwogICAgdm9pZCBzZXRGaXhlZFdpZHRoKCBpbnQgdyApOwogICAgdm9pZCBzZXRGaXhl
ZEhlaWdodCggaW50IGggKTsKCgoKICAgIFFQb2ludCBtYXBUb0dsb2JhbCggY29uc3QgUVBvaW50
ICYgKSBjb25zdDsKICAgIFFQb2ludCBtYXBGcm9tR2xvYmFsKCBjb25zdCBRUG9pbnQgJiApIGNv
bnN0OwogICAgUVBvaW50IG1hcFRvUGFyZW50KCBjb25zdCBRUG9pbnQgJiApIGNvbnN0OwogICAg
UVBvaW50IG1hcEZyb21QYXJlbnQoIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CiAgICBRUG9pbnQg
bWFwVG8oIFFXaWRnZXQgKiwgY29uc3QgUVBvaW50ICYgKSBjb25zdDsKICAgIFFQb2ludCBtYXBG
cm9tKCBRV2lkZ2V0ICosIGNvbnN0IFFQb2ludCAmICkgY29uc3Q7CgogICAgUVdpZGdldCAqdG9w
TGV2ZWxXaWRnZXQoKSBjb25zdDsKCgoKICAgIEJhY2tncm91bmRNb2RlIGJhY2tncm91bmRNb2Rl
KCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dyb3VuZE1vZGUoIEJhY2tncm91bmRN
b2RlICk7CiAgICB2b2lkIHNldEJhY2tncm91bmRNb2RlKCBCYWNrZ3JvdW5kTW9kZSwgQmFja2dy
b3VuZE1vZGUgKTsKCiAgICBjb25zdCBRQ29sb3IgJiBmb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsK
CiAgICBjb25zdCBRQ29sb3IgJiBlcmFzZUNvbG9yKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQg
c2V0RXJhc2VDb2xvciggY29uc3QgUUNvbG9yICYgKTsKCiAgICBjb25zdCBRUGl4bWFwICogZXJh
c2VQaXhtYXAoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRFcmFzZVBpeG1hcCggY29uc3Qg
UVBpeG1hcCAmICk7CgoKICAgIGNvbnN0IFFDb2xvckdyb3VwICYgY29sb3JHcm91cCgpIGNvbnN0
OwogICAgY29uc3QgUVBhbGV0dGUgJiBwYWxldHRlKCkgY29uc3Q7CiAgICBib29sIG93blBhbGV0
dGUoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRQYWxldHRlKCBjb25zdCBRUGFsZXR0ZSAm
ICk7CiAgICB2b2lkIHVuc2V0UGFsZXR0ZSgpOwoKCiAgICBjb25zdCBRQ29sb3IgJiBwYWxldHRl
Rm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CiAgICB2b2lkIHNldFBhbGV0dGVGb3JlZ3JvdW5kQ29s
b3IoIGNvbnN0IFFDb2xvciAmICk7CgogICAgY29uc3QgUUNvbG9yICYgcGFsZXR0ZUJhY2tncm91
bmRDb2xvcigpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFBhbGV0dGVCYWNrZ3JvdW5kQ29s
b3IoIGNvbnN0IFFDb2xvciAmICk7CgogICAgY29uc3QgUVBpeG1hcCAqIHBhbGV0dGVCYWNrZ3Jv
dW5kUGl4bWFwKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0UGFsZXR0ZUJhY2tncm91bmRQ
aXhtYXAoIGNvbnN0IFFQaXhtYXAgJiApOwoKICAgIGNvbnN0IFFCcnVzaCYgYmFja2dyb3VuZEJy
dXNoKCkgY29uc3Q7CgogICAgUUZvbnQgZm9udCgpIGNvbnN0OwogICAgYm9vbCBvd25Gb250KCkg
Y29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9udCggY29uc3QgUUZvbnQgJiApOwogICAgdm9p
ZCB1bnNldEZvbnQoKTsKICAgIFFGb250TWV0cmljcyBmb250TWV0cmljcygpIGNvbnN0OwogICAg
UUZvbnRJbmZvIGZvbnRJbmZvKCkgY29uc3Q7CgoKICAgIGNvbnN0IFFDdXJzb3IgJmN1cnNvcigp
IGNvbnN0OwogICAgYm9vbCBvd25DdXJzb3IoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRD
dXJzb3IoIGNvbnN0IFFDdXJzb3IgJiApOwogICAgdmlydHVhbCB2b2lkIHVuc2V0Q3Vyc29yKCk7
CgoKICAgIFFTdHJpbmcgY2FwdGlvbigpIGNvbnN0OwogICAgY29uc3QgUVBpeG1hcCAqaWNvbigp
IGNvbnN0OwogICAgUVN0cmluZyBpY29uVGV4dCgpIGNvbnN0OwoKICAgIGJvb2wgaGFzTW91c2VU
cmFja2luZygpIGNvbnN0OwogICAgYm9vbCBoYXNNb3VzZSgpIGNvbnN0OwoKICAgIHZpcnR1YWwg
dm9pZCBzZXRNYXNrKCBjb25zdCBRQml0bWFwICYgKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNr
KCBjb25zdCBRUmVnaW9uICYgKTsKICAgIHZvaWQgY2xlYXJNYXNrKCk7CgogICAgY29uc3QgUUNv
bG9yICYgYmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2dy
b3VuZENvbG9yKCBjb25zdCBRQ29sb3IgJiApOwogICAgY29uc3QgUVBpeG1hcCAqIGJhY2tncm91
bmRQaXhtYXAoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kUGl4bWFwKCBj
b25zdCBRUGl4bWFwICYgKTsKCnB1YmxpYyA6CgogICAgdmlydHVhbCB2b2lkIHNldENhcHRpb24o
IGNvbnN0IFFTdHJpbmcgJik7CiAgICB2aXJ0dWFsIHZvaWQgc2V0SWNvbiggY29uc3QgUVBpeG1h
cCAmICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0SWNvblRleHQoIGNvbnN0IFFTdHJpbmcgJik7Cgog
ICAgdmlydHVhbCB2b2lkIHNldE1vdXNlVHJhY2tpbmcoIGJvb2wgZW5hYmxlICk7CgoKCiAgICB2
aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoKTsKICAgIHZvaWQgY2xlYXJGb2N1cygpOwoKcHVibGljOgog
ICAgZW51bSBGb2N1c1BvbGljeSB7CiAgICAgICAgTm9Gb2N1cyA9IDAsCiAgICAgICAgVGFiRm9j
dXMgPSAweDEsCiAgICAgICAgQ2xpY2tGb2N1cyA9IDB4MiwKICAgICAgICBTdHJvbmdGb2N1cyA9
IDB4MywKICAgICAgICBXaGVlbEZvY3VzID0gMHg3CiAgICB9OwoKICAgIGJvb2wgaXNBY3RpdmVX
aW5kb3coKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBzZXRBY3RpdmVXaW5kb3coKTsKICAgIGJv
b2wgaXNGb2N1c0VuYWJsZWQoKSBjb25zdDsKCiAgICBGb2N1c1BvbGljeSBmb2N1c1BvbGljeSgp
IGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldEZvY3VzUG9saWN5KCBGb2N1c1BvbGljeSApOwog
ICAgYm9vbCBoYXNGb2N1cygpIGNvbnN0OwogICAgc3RhdGljIHZvaWQgc2V0VGFiT3JkZXIoIFFX
aWRnZXQgKiwgUVdpZGdldCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXNQcm94eSggUVdp
ZGdldCAqICk7CiAgICBRV2lkZ2V0ICogZm9jdXNQcm94eSgpIGNvbnN0OwoKCgogICAgdm9pZCBn
cmFiTW91c2UoKTsKCiAgICB2b2lkIGdyYWJNb3VzZSggY29uc3QgUUN1cnNvciAmICk7CgogICAg
dm9pZCByZWxlYXNlTW91c2UoKTsKICAgIHZvaWQgZ3JhYktleWJvYXJkKCk7CiAgICB2b2lkIHJl
bGVhc2VLZXlib2FyZCgpOwogICAgc3RhdGljIFFXaWRnZXQgKiBtb3VzZUdyYWJiZXIoKTsKICAg
IHN0YXRpYyBRV2lkZ2V0ICoga2V5Ym9hcmRHcmFiYmVyKCk7CgoKCiAgICBib29sIGlzVXBkYXRl
c0VuYWJsZWQoKSBjb25zdDsKCgoKCnB1YmxpYyA6CiAgICB2aXJ0dWFsIHZvaWQgc2V0VXBkYXRl
c0VuYWJsZWQoIGJvb2wgZW5hYmxlICk7CiAgICB2b2lkIHVwZGF0ZSgpOwogICAgdm9pZCB1cGRh
dGUoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoICk7CiAgICB2b2lkIHVwZGF0ZSggY29uc3Qg
UVJlY3QmICk7CiAgICB2b2lkIHJlcGFpbnQoKTsKICAgIHZvaWQgcmVwYWludCggYm9vbCBlcmFz
ZSApOwogICAgdm9pZCByZXBhaW50KCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgYm9vbCBl
cmFzZT1UUlVFICk7CiAgICB2b2lkIHJlcGFpbnQoIGNvbnN0IFFSZWN0ICYsIGJvb2wgZXJhc2Ug
PSBUUlVFICk7CiAgICB2b2lkIHJlcGFpbnQoIGNvbnN0IFFSZWdpb24gJiwgYm9vbCBlcmFzZSA9
IFRSVUUgKTsKCgoKICAgIHZpcnR1YWwgdm9pZCBzaG93KCk7CiAgICB2aXJ0dWFsIHZvaWQgaGlk
ZSgpOwogICAgdm9pZCBzZXRTaG93biggYm9vbCBzaG93ICk7CiAgICB2b2lkIHNldEhpZGRlbigg
Ym9vbCBoaWRlICk7CgogICAgdm9pZCBpY29uaWZ5KCkgeyBzaG93TWluaW1pemVkKCk7IH0KCiAg
ICB2aXJ0dWFsIHZvaWQgc2hvd01pbmltaXplZCgpOwogICAgdmlydHVhbCB2b2lkIHNob3dNYXhp
bWl6ZWQoKTsKICAgIHZvaWQgc2hvd0Z1bGxTY3JlZW4oKTsKICAgIHZpcnR1YWwgdm9pZCBzaG93
Tm9ybWFsKCk7CiAgICB2aXJ0dWFsIHZvaWQgcG9saXNoKCk7CiAgICB2b2lkIGNvbnN0UG9saXNo
KCkgY29uc3Q7CiAgICBib29sIGNsb3NlKCk7CgogICAgdm9pZCByYWlzZSgpOwogICAgdm9pZCBs
b3dlcigpOwogICAgdm9pZCBzdGFja1VuZGVyKCBRV2lkZ2V0KiApOwogICAgdmlydHVhbCB2b2lk
IG1vdmUoIGludCB4LCBpbnQgeSApOwogICAgdm9pZCBtb3ZlKCBjb25zdCBRUG9pbnQgJiApOwog
ICAgdmlydHVhbCB2b2lkIHJlc2l6ZSggaW50IHcsIGludCBoICk7CiAgICB2b2lkIHJlc2l6ZSgg
Y29uc3QgUVNpemUgJiApOwogICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5KCBpbnQgeCwgaW50
IHksIGludCB3LCBpbnQgaCApOwogICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5KCBjb25zdCBR
UmVjdCAmICk7CgpwdWJsaWM6CiAgICB2aXJ0dWFsIGJvb2wgY2xvc2UoIGJvb2wgYWxzb0RlbGV0
ZSApOwogICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKICAgIGJvb2wgaXNWaXNpYmxlVG8oUVdp
ZGdldCopIGNvbnN0OwogICAgYm9vbCBpc1Zpc2libGVUb1RMVygpIGNvbnN0OwogICAgUVJlY3Qg
dmlzaWJsZVJlY3QoKSBjb25zdDsKICAgIGJvb2wgaXNIaWRkZW4oKSBjb25zdDsKICAgIGJvb2wg
aXNTaG93bigpIGNvbnN0OwogICAgYm9vbCBpc01pbmltaXplZCgpIGNvbnN0OwogICAgYm9vbCBp
c01heGltaXplZCgpIGNvbnN0OwogICAgYm9vbCBpc0Z1bGxTY3JlZW4oKSBjb25zdDsKCiAgICB2
aXJ0dWFsIFFTaXplIHNpemVIaW50KCkgY29uc3Q7CiAgICB2aXJ0dWFsIFFTaXplIG1pbmltdW1T
aXplSGludCgpIGNvbnN0OwogICAgdmlydHVhbCBRU2l6ZVBvbGljeSBzaXplUG9saWN5KCkgY29u
c3Q7CiAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZVBvbGljeSggUVNpemVQb2xpY3kgKTsKICAgIHZv
aWQgc2V0U2l6ZVBvbGljeSggUVNpemVQb2xpY3k6OlNpemVUeXBlIGhvciwgUVNpemVQb2xpY3k6
OlNpemVUeXBlIHZlciwgYm9vbCBoZncgPSBGQUxTRSApOwogICAgdmlydHVhbCBpbnQgaGVpZ2h0
Rm9yV2lkdGgoaW50KSBjb25zdDsKCgpwdWJsaWMgOgogICAgdmlydHVhbCB2b2lkIGFkanVzdFNp
emUoKTsKCnB1YmxpYzoKCiAgICBRTGF5b3V0ICogbGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbGF5
X291dDsgfQoKICAgIHZvaWQgdXBkYXRlR2VvbWV0cnkoKTsKICAgIHZpcnR1YWwgdm9pZCByZXBh
cmVudCggUVdpZGdldCAqcGFyZW50LCBXRmxhZ3MsIGNvbnN0IFFQb2ludCAmLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaG93SXQ9RkFMU0UgKTsKICAgIHZvaWQgcmVw
YXJlbnQoIFFXaWRnZXQgKnBhcmVudCwgY29uc3QgUVBvaW50ICYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHNob3dJdD1GQUxTRSApOwoKICAgIHZvaWQgcmVjcmVhdGUo
IFFXaWRnZXQgKnBhcmVudCwgV0ZsYWdzIGYsIGNvbnN0IFFQb2ludCAmIHAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHNob3dJdD1GQUxTRSApIHsgcmVwYXJlbnQocGFy
ZW50LGYscCxzaG93SXQpOyB9CgoKICAgIHZvaWQgZXJhc2UoKTsKICAgIHZvaWQgZXJhc2UoIGlu
dCB4LCBpbnQgeSwgaW50IHcsIGludCBoICk7CiAgICB2b2lkIGVyYXNlKCBjb25zdCBRUmVjdCAm
ICk7CiAgICB2b2lkIGVyYXNlKCBjb25zdCBRUmVnaW9uICYgKTsKICAgIHZvaWQgc2Nyb2xsKCBp
bnQgZHgsIGludCBkeSApOwogICAgdm9pZCBzY3JvbGwoIGludCBkeCwgaW50IGR5LCBjb25zdCBR
UmVjdCYgKTsKCiAgICB2b2lkIGRyYXdUZXh0KCBpbnQgeCwgaW50IHksIGNvbnN0IFFTdHJpbmcg
Jik7CiAgICB2b2lkIGRyYXdUZXh0KCBjb25zdCBRUG9pbnQgJiwgY29uc3QgUVN0cmluZyAmKTsK
CgoKICAgIFFXaWRnZXQgKiBmb2N1c1dpZGdldCgpIGNvbnN0OwogICAgUVJlY3QgbWljcm9Gb2N1
c0hpbnQoKSBjb25zdDsKCgoKICAgIGJvb2wgYWNjZXB0RHJvcHMoKSBjb25zdDsKICAgIHZpcnR1
YWwgdm9pZCBzZXRBY2NlcHREcm9wcyggYm9vbCBvbiApOwoKCgogICAgdmlydHVhbCB2b2lkIHNl
dEF1dG9NYXNrKGJvb2wpOwogICAgYm9vbCBhdXRvTWFzaygpIGNvbnN0OwoKICAgIGVudW0gQmFj
a2dyb3VuZE9yaWdpbiB7IFdpZGdldE9yaWdpbiwgUGFyZW50T3JpZ2luLCBXaW5kb3dPcmlnaW4s
IEFuY2VzdG9yT3JpZ2luIH07CgogICAgdmlydHVhbCB2b2lkIHNldEJhY2tncm91bmRPcmlnaW4o
IEJhY2tncm91bmRPcmlnaW4gKTsKICAgIEJhY2tncm91bmRPcmlnaW4gYmFja2dyb3VuZE9yaWdp
bigpIGNvbnN0OwogICAgUVBvaW50IGJhY2tncm91bmRPZmZzZXQoKSBjb25zdDsKCgogICAgdmly
dHVhbCBib29sIGN1c3RvbVdoYXRzVGhpcygpIGNvbnN0OwoKICAgIFFXaWRnZXQgKiBwYXJlbnRX
aWRnZXQoIGJvb2wgc2FtZVdpbmRvdyA9IEZBTFNFICkgY29uc3Q7CiAgICBXU3RhdGUgdGVzdFdT
dGF0ZSggV1N0YXRlIHMgKSBjb25zdDsKICAgIFdGbGFncyB0ZXN0V0ZsYWdzKCBXRmxhZ3MgZiAp
IGNvbnN0OwogICAgc3RhdGljIFFXaWRnZXQgKiBmaW5kKCBXSWQgKTsKICAgIHN0YXRpYyBRV2lk
Z2V0TWFwcGVyICp3bWFwcGVyKCk7CgogICAgUVdpZGdldCAqY2hpbGRBdCggaW50IHgsIGludCB5
LCBib29sIGluY2x1ZGVUaGlzID0gRkFMU0UgKSBjb25zdDsKICAgIFFXaWRnZXQgKmNoaWxkQXQo
IGNvbnN0IFFQb2ludCAmLCBib29sIGluY2x1ZGVUaGlzID0gRkFMU0UgKSBjb25zdDsKIyA0NTkg
Ii4uLy4uL2luY2x1ZGUvcXdpZGdldC5oIgpwcm90ZWN0ZWQ6CgogICAgYm9vbCBldmVudCggUUV2
ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBtb3VzZVByZXNzRXZlbnQoIFFNb3VzZUV2ZW50ICog
KTsKICAgIHZpcnR1YWwgdm9pZCBtb3VzZVJlbGVhc2VFdmVudCggUU1vdXNlRXZlbnQgKiApOwog
ICAgdmlydHVhbCB2b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVudCggUU1vdXNlRXZlbnQgKiApOwog
ICAgdmlydHVhbCB2b2lkIG1vdXNlTW92ZUV2ZW50KCBRTW91c2VFdmVudCAqICk7CgogICAgdmly
dHVhbCB2b2lkIHdoZWVsRXZlbnQoIFFXaGVlbEV2ZW50ICogKTsKCiAgICB2aXJ0dWFsIHZvaWQg
a2V5UHJlc3NFdmVudCggUUtleUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBrZXlSZWxlYXNl
RXZlbnQoIFFLZXlFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZm9jdXNJbkV2ZW50KCBRRm9j
dXNFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgZm9jdXNPdXRFdmVudCggUUZvY3VzRXZlbnQg
KiApOwogICAgdmlydHVhbCB2b2lkIGVudGVyRXZlbnQoIFFFdmVudCAqICk7CiAgICB2aXJ0dWFs
IHZvaWQgbGVhdmVFdmVudCggUUV2ZW50ICogKTsKICAgIHZpcnR1YWwgdm9pZCBwYWludEV2ZW50
KCBRUGFpbnRFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgbW92ZUV2ZW50KCBRTW92ZUV2ZW50
ICogKTsKICAgIHZpcnR1YWwgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50ICogKTsKICAg
IHZpcnR1YWwgdm9pZCBjbG9zZUV2ZW50KCBRQ2xvc2VFdmVudCAqICk7CiAgICB2aXJ0dWFsIHZv
aWQgY29udGV4dE1lbnVFdmVudCggUUNvbnRleHRNZW51RXZlbnQgKiApOwogICAgdmlydHVhbCB2
b2lkIGltU3RhcnRFdmVudCggUUlNRXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGltQ29tcG9z
ZUV2ZW50KCBRSU1FdmVudCAqICk7CiAgICB2aXJ0dWFsIHZvaWQgaW1FbmRFdmVudCggUUlNRXZl
bnQgKiApOwogICAgdmlydHVhbCB2b2lkIHRhYmxldEV2ZW50KCBRVGFibGV0RXZlbnQgKiApOwoK
CiAgICB2aXJ0dWFsIHZvaWQgZHJhZ0VudGVyRXZlbnQoIFFEcmFnRW50ZXJFdmVudCAqICk7CiAg
ICB2aXJ0dWFsIHZvaWQgZHJhZ01vdmVFdmVudCggUURyYWdNb3ZlRXZlbnQgKiApOwogICAgdmly
dHVhbCB2b2lkIGRyYWdMZWF2ZUV2ZW50KCBRRHJhZ0xlYXZlRXZlbnQgKiApOwogICAgdmlydHVh
bCB2b2lkIGRyb3BFdmVudCggUURyb3BFdmVudCAqICk7CgoKICAgIHZpcnR1YWwgdm9pZCBzaG93
RXZlbnQoIFFTaG93RXZlbnQgKiApOwogICAgdmlydHVhbCB2b2lkIGhpZGVFdmVudCggUUhpZGVF
dmVudCAqICk7CiMgNTAyICIuLi8uLi9pbmNsdWRlL3F3aWRnZXQuaCIKICAgIHZpcnR1YWwgYm9v
bCB4MTFFdmVudCggWEV2ZW50ICogKTsKCgoKCgoKCiAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTWFz
aygpOwoKCgoKICAgIHZpcnR1YWwgdm9pZCBzdHlsZUNoYW5nZSggUVN0eWxlJiApOwoKICAgIHZp
cnR1YWwgdm9pZCBlbmFibGVkQ2hhbmdlKCBib29sIG9sZEVuYWJsZWQgKTsKCiAgICB2aXJ0dWFs
IHZvaWQgcGFsZXR0ZUNoYW5nZSggY29uc3QgUVBhbGV0dGUgJiApOwoKICAgIHZpcnR1YWwgdm9p
ZCBmb250Q2hhbmdlKCBjb25zdCBRRm9udCAmICk7CiAgICB2aXJ0dWFsIHZvaWQgd2luZG93QWN0
aXZhdGlvbkNoYW5nZSggYm9vbCBvbGRBY3RpdmUgKTsKCiAgICBpbnQgbWV0cmljKCBpbnQgKSBj
b25zdDsKCiAgICB2b2lkIHJlc2V0SW5wdXRDb250ZXh0KCk7CgogICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZSggV0lkID0gMCwgYm9vbCBpbml0aWFsaXplV2luZG93ID0gVFJVRSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgZGVzdHJveU9sZFdpbmRvdyA9IFRSVUUgKTsKICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95KCBib29sIGRlc3Ryb3lXaW5kb3cgPSBUUlVFLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZGVzdHJveVN1YldpbmRvd3MgPSBUUlVFICk7CiAgICB1aW50IGdldFdT
dGF0ZSgpIGNvbnN0OwogICAgdmlydHVhbCB2b2lkIHNldFdTdGF0ZSggdWludCApOwogICAgdm9p
ZCBjbGVhcldTdGF0ZSggdWludCBuICk7CiAgICBXRmxhZ3MgZ2V0V0ZsYWdzKCkgY29uc3Q7CiAg
ICB2aXJ0dWFsIHZvaWQgc2V0V0ZsYWdzKCBXRmxhZ3MgKTsKICAgIHZvaWQgY2xlYXJXRmxhZ3Mo
IFdGbGFncyBuICk7CgogICAgdmlydHVhbCBib29sIGZvY3VzTmV4dFByZXZDaGlsZCggYm9vbCBu
ZXh0ICk7CgogICAgUVdFeHRyYSAqZXh0cmFEYXRhKCk7CiAgICBRVExXRXh0cmEgKnRvcERhdGEo
KTsKICAgIFFGb2N1c0RhdGEgKmZvY3VzRGF0YSgpOwoKICAgIHZpcnR1YWwgdm9pZCBzZXRLZXlD
b21wcmVzc2lvbihib29sKTsKICAgIHZpcnR1YWwgdm9pZCBzZXRNaWNyb0ZvY3VzSGludChpbnQg
eCwgaW50IHksIGludCB3LCBpbnQgaCwgYm9vbCB0ZXh0PVRSVUUsIFFGb250ICpmID0gMCk7CiMg
NTU1ICIuLi8uLi9pbmNsdWRlL3F3aWRnZXQuaCIKcHJpdmF0ZSA6CiAgICB2b2lkIGZvY3VzUHJv
eHlEZXN0cm95ZWQoKTsKCnByaXZhdGU6CiAgICB2b2lkIHNldEZvbnRTeXMoIFFGb250ICpmID0g
MCApOwoKICAgIHZvaWQgY3JlYXRlSW5wdXRDb250ZXh0KCk7CiAgICB2b2lkIGRlc3Ryb3lJbnB1
dENvbnRleHQoKTsKICAgIHZvaWQgZm9jdXNJbnB1dENvbnRleHQoKTsKICAgIHZvaWQgY2hlY2tD
aGlsZHJlbkRuZCgpOwojIDU4NCAiLi4vLi4vaW5jbHVkZS9xd2lkZ2V0LmgiCiAgICB2b2lkIHNl
dExheW91dCggUUxheW91dCAqbCApOwoKICAgIHZvaWQgc2V0V2luSWQoIFdJZCApOwogICAgdm9p
ZCBzaG93V2luZG93KCk7CiAgICB2b2lkIGhpZGVXaW5kb3coKTsKICAgIHZvaWQgc2hvd0NoaWxk
cmVuKCBib29sIHNwb250YW5lb3VzICk7CiAgICB2b2lkIGhpZGVDaGlsZHJlbiggYm9vbCBzcG9u
dGFuZW91cyApOwogICAgdm9pZCByZXBhcmVudFN5cyggUVdpZGdldCAqcGFyZW50LCBXRmxhZ3Ms
IGNvbnN0IFFQb2ludCAmLCBib29sIHNob3dJdCk7CiAgICB2b2lkIGNyZWF0ZVRMRXh0cmEoKTsK
ICAgIHZvaWQgY3JlYXRlRXh0cmEoKTsKICAgIHZvaWQgZGVsZXRlRXh0cmEoKTsKICAgIHZvaWQg
Y3JlYXRlU3lzRXh0cmEoKTsKICAgIHZvaWQgZGVsZXRlU3lzRXh0cmEoKTsKICAgIHZvaWQgY3Jl
YXRlVExTeXNFeHRyYSgpOwogICAgdm9pZCBkZWxldGVUTFN5c0V4dHJhKCk7CiAgICB2b2lkIGRl
YWN0aXZhdGVXaWRnZXRDbGVhbnVwKCk7CiAgICB2b2lkIGludGVybmFsU2V0R2VvbWV0cnkoIGlu
dCwgaW50LCBpbnQsIGludCwgYm9vbCApOwogICAgdm9pZCByZXBhcmVudEZvY3VzV2lkZ2V0cygg
UVdpZGdldCAqICk7CiAgICBRRm9jdXNEYXRhICpmb2N1c0RhdGEoIGJvb2wgY3JlYXRlICk7CiAg
ICB2b2lkIHNldEJhY2tncm91bmRGcm9tTW9kZSgpOwogICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29s
b3JEaXJlY3QoIGNvbnN0IFFDb2xvciAmICk7CiAgICB2b2lkIHNldEJhY2tncm91bmRQaXhtYXBE
aXJlY3QoIGNvbnN0IFFQaXhtYXAgJiApOwogICAgdm9pZCBzZXRCYWNrZ3JvdW5kTW9kZURpcmVj
dCggQmFja2dyb3VuZE1vZGUgKTsKICAgIHZvaWQgc2V0QmFja2dyb3VuZEVtcHR5KCk7CiAgICB2
b2lkIHVwZGF0ZUZyYW1lU3RydXQoKSBjb25zdDsKCiAgICB2b2lkIHNldEJhY2tncm91bmRYMTFS
ZWxhdGl2ZSgpOwoKCiAgICBXSWQgd2luaWQ7CiAgICB1aW50IHdpZGdldF9zdGF0ZTsKICAgIHVp
bnQgd2lkZ2V0X2ZsYWdzOwogICAgdWludCBmb2N1c19wb2xpY3kgOiA0OwogICAgdWludCBvd25f
Zm9udCA6MTsKICAgIHVpbnQgb3duX3BhbGV0dGUgOjE7CiAgICB1aW50IHNpemVoaW50X2ZvcmNl
ZCA6MTsKICAgIHVpbnQgaXNfY2xvc2luZyA6MTsKICAgIHVpbnQgaW5fc2hvdyA6IDE7CiAgICB1
aW50IGluX3Nob3dfbWF4aW1pemVkIDogMTsKICAgIHVpbnQgZnN0cnV0X2RpcnR5IDogMTsKICAg
IFFSZWN0IGNyZWN0OwogICAgUUNvbG9yIGJnX2NvbDsKCiAgICBRUGFsZXR0ZSBwYWw7CgogICAg
UUZvbnQgZm50OwoKICAgIFFMYXlvdXQgKmxheV9vdXQ7CgogICAgUVdFeHRyYSAqZXh0cmE7CiMg
NjY0ICIuLi8uLi9pbmNsdWRlL3F3aWRnZXQuaCIKICAgIHN0YXRpYyBpbnQgaW5zdGFuY2VDb3Vu
dGVyOwogICAgc3RhdGljIGludCBtYXhJbnN0YW5jZXM7CgogICAgc3RhdGljIHZvaWQgY3JlYXRl
TWFwcGVyKCk7CiAgICBzdGF0aWMgdm9pZCBkZXN0cm95TWFwcGVyKCk7CiAgICBzdGF0aWMgUVdp
ZGdldExpc3QgKndMaXN0KCk7CiAgICBzdGF0aWMgUVdpZGdldExpc3QgKnRsd0xpc3QoKTsKICAg
IHN0YXRpYyBRV2lkZ2V0TWFwcGVyICptYXBwZXI7CiAgICBmcmllbmQgY2xhc3MgUUFwcGxpY2F0
aW9uOwogICAgZnJpZW5kIGNsYXNzIFFCYXNlQXBwbGljYXRpb247CiAgICBmcmllbmQgY2xhc3Mg
UVBhaW50ZXI7CiAgICBmcmllbmQgY2xhc3MgUUZvbnRNZXRyaWNzOwogICAgZnJpZW5kIGNsYXNz
IFFGb250SW5mbzsKICAgIGZyaWVuZCBjbGFzcyBRRVRXaWRnZXQ7CiAgICBmcmllbmQgY2xhc3Mg
UUxheW91dDsKCnByaXZhdGU6CgogICAgUVdpZGdldCggY29uc3QgUVdpZGdldCAmICk7CiAgICBR
V2lkZ2V0ICZvcGVyYXRvcj0oIGNvbnN0IFFXaWRnZXQgJiApOwoKCnB1YmxpYzoKCiAgICB2b2lk
IHNldFBhbGV0dGUoIGNvbnN0IFFQYWxldHRlICZwLCBib29sICkgeyBzZXRQYWxldHRlKCBwICk7
IH0KCiAgICB2b2lkIHNldEZvbnQoIGNvbnN0IFFGb250ICZmLCBib29sICkgeyBzZXRGb250KCBm
ICk7IH0KfTsKCgppbmxpbmUgUXQ6OldTdGF0ZSBRV2lkZ2V0Ojp0ZXN0V1N0YXRlKCBXU3RhdGUg
cyApIGNvbnN0CnsgcmV0dXJuICh3aWRnZXRfc3RhdGUgJiBzKTsgfQoKaW5saW5lIFF0OjpXRmxh
Z3MgUVdpZGdldDo6dGVzdFdGbGFncyggV0ZsYWdzIGYgKSBjb25zdAp7IHJldHVybiAod2lkZ2V0
X2ZsYWdzICYgZik7IH0KCgppbmxpbmUgV0lkIFFXaWRnZXQ6OndpbklkKCkgY29uc3QKeyByZXR1
cm4gd2luaWQ7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzVG9wTGV2ZWwoKSBjb25zdAp7IHJl
dHVybiB0ZXN0V0ZsYWdzKFdUeXBlX1RvcExldmVsKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6
aXNEaWFsb2coKSBjb25zdAp7IHJldHVybiB0ZXN0V0ZsYWdzKFdUeXBlX0RpYWxvZyk7IH0KCmlu
bGluZSBib29sIFFXaWRnZXQ6OmlzUG9wdXAoKSBjb25zdAp7IHJldHVybiB0ZXN0V0ZsYWdzKFdU
eXBlX1BvcHVwKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNEZXNrdG9wKCkgY29uc3QKeyBy
ZXR1cm4gdGVzdFdGbGFncyhXVHlwZV9EZXNrdG9wKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6
aXNFbmFibGVkKCkgY29uc3QKeyByZXR1cm4gIXRlc3RXU3RhdGUoV1N0YXRlX0Rpc2FibGVkKTsg
fQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNNb2RhbCgpIGNvbnN0CnsgcmV0dXJuIHRlc3RXRmxh
Z3MoV1Nob3dNb2RhbCk7IH0KCmlubGluZSBib29sIFFXaWRnZXQ6OmlzRW5hYmxlZFRvVExXKCkg
Y29uc3QKeyByZXR1cm4gaXNFbmFibGVkKCk7IH0KCmlubGluZSBjb25zdCBRUmVjdCAmUVdpZGdl
dDo6Z2VvbWV0cnkoKSBjb25zdAp7IHJldHVybiBjcmVjdDsgfQoKaW5saW5lIFFTaXplIFFXaWRn
ZXQ6OnNpemUoKSBjb25zdAp7IHJldHVybiBjcmVjdC5zaXplKCk7IH0KCmlubGluZSBpbnQgUVdp
ZGdldDo6d2lkdGgoKSBjb25zdAp7IHJldHVybiBjcmVjdC53aWR0aCgpOyB9CgppbmxpbmUgaW50
IFFXaWRnZXQ6OmhlaWdodCgpIGNvbnN0CnsgcmV0dXJuIGNyZWN0LmhlaWdodCgpOyB9Cgppbmxp
bmUgUVJlY3QgUVdpZGdldDo6cmVjdCgpIGNvbnN0CnsgcmV0dXJuIFFSZWN0KDAsMCxjcmVjdC53
aWR0aCgpLGNyZWN0LmhlaWdodCgpKTsgfQoKaW5saW5lIGludCBRV2lkZ2V0OjptaW5pbXVtV2lk
dGgoKSBjb25zdAp7IHJldHVybiBtaW5pbXVtU2l6ZSgpLndpZHRoKCk7IH0KCmlubGluZSBpbnQg
UVdpZGdldDo6bWluaW11bUhlaWdodCgpIGNvbnN0CnsgcmV0dXJuIG1pbmltdW1TaXplKCkuaGVp
Z2h0KCk7IH0KCmlubGluZSBpbnQgUVdpZGdldDo6bWF4aW11bVdpZHRoKCkgY29uc3QKeyByZXR1
cm4gbWF4aW11bVNpemUoKS53aWR0aCgpOyB9CgppbmxpbmUgaW50IFFXaWRnZXQ6Om1heGltdW1I
ZWlnaHQoKSBjb25zdAp7IHJldHVybiBtYXhpbXVtU2l6ZSgpLmhlaWdodCgpOyB9CgppbmxpbmUg
dm9pZCBRV2lkZ2V0OjpzZXRNaW5pbXVtU2l6ZSggY29uc3QgUVNpemUgJnMgKQp7IHNldE1pbmlt
dW1TaXplKHMud2lkdGgoKSxzLmhlaWdodCgpKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0
TWF4aW11bVNpemUoIGNvbnN0IFFTaXplICZzICkKeyBzZXRNYXhpbXVtU2l6ZShzLndpZHRoKCks
cy5oZWlnaHQoKSk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldFNpemVJbmNyZW1lbnQoIGNv
bnN0IFFTaXplICZzICkKeyBzZXRTaXplSW5jcmVtZW50KHMud2lkdGgoKSxzLmhlaWdodCgpKTsg
fQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0QmFzZVNpemUoIGNvbnN0IFFTaXplICZzICkKeyBz
ZXRCYXNlU2l6ZShzLndpZHRoKCkscy5oZWlnaHQoKSk7IH0KCmlubGluZSBjb25zdCBRQ29sb3Ig
JlFXaWRnZXQ6OmVyYXNlQ29sb3IoKSBjb25zdAp7IHJldHVybiBiZ19jb2w7IH0KCgppbmxpbmUg
Y29uc3QgUVBhbGV0dGUgJlFXaWRnZXQ6OnBhbGV0dGUoKSBjb25zdAp7IHJldHVybiBwYWw7IH0K
CgppbmxpbmUgUUZvbnQgUVdpZGdldDo6Zm9udCgpIGNvbnN0CnsgcmV0dXJuIGZudDsgfQoKaW5s
aW5lIFFGb250TWV0cmljcyBRV2lkZ2V0Ojpmb250TWV0cmljcygpIGNvbnN0CnsgcmV0dXJuIFFG
b250TWV0cmljcyhmb250KCkpOyB9CgppbmxpbmUgUUZvbnRJbmZvIFFXaWRnZXQ6OmZvbnRJbmZv
KCkgY29uc3QKeyByZXR1cm4gUUZvbnRJbmZvKGZvbnQoKSk7IH0KCmlubGluZSBib29sIFFXaWRn
ZXQ6Omhhc01vdXNlVHJhY2tpbmcoKSBjb25zdAp7IHJldHVybiB0ZXN0V1N0YXRlKFdTdGF0ZV9N
b3VzZVRyYWNraW5nKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aGFzTW91c2UoKSBjb25zdAp7
IHJldHVybiB0ZXN0V1N0YXRlKFdTdGF0ZV9IYXNNb3VzZSk7IH0KCmlubGluZSBib29sIFFXaWRn
ZXQ6OmlzRm9jdXNFbmFibGVkKCkgY29uc3QKeyByZXR1cm4gKEZvY3VzUG9saWN5KWZvY3VzX3Bv
bGljeSAhPSBOb0ZvY3VzOyB9CgppbmxpbmUgUVdpZGdldDo6Rm9jdXNQb2xpY3kgUVdpZGdldDo6
Zm9jdXNQb2xpY3koKSBjb25zdAp7IHJldHVybiAoRm9jdXNQb2xpY3kpZm9jdXNfcG9saWN5OyB9
CgppbmxpbmUgYm9vbCBRV2lkZ2V0Ojppc1VwZGF0ZXNFbmFibGVkKCkgY29uc3QKeyByZXR1cm4g
IXRlc3RXU3RhdGUoV1N0YXRlX0Jsb2NrVXBkYXRlcyk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6
OnVwZGF0ZSggY29uc3QgUVJlY3QgJnIgKQp7IHVwZGF0ZSggci54KCksIHIueSgpLCByLndpZHRo
KCksIHIuaGVpZ2h0KCkgKTsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6cmVwYWludCgpCnsgcmVw
YWludCggMCwgMCwgY3JlY3Qud2lkdGgoKSwgY3JlY3QuaGVpZ2h0KCksIFRSVUUgKTsgfQoKaW5s
aW5lIHZvaWQgUVdpZGdldDo6cmVwYWludCggYm9vbCBlcmFzZSApCnsgcmVwYWludCggMCwgMCwg
Y3JlY3Qud2lkdGgoKSwgY3JlY3QuaGVpZ2h0KCksIGVyYXNlICk7IH0KCmlubGluZSB2b2lkIFFX
aWRnZXQ6OnJlcGFpbnQoIGNvbnN0IFFSZWN0ICZyLCBib29sIGVyYXNlICkKeyByZXBhaW50KCBy
LngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgZXJhc2UgKTsgfQoKaW5saW5lIHZv
aWQgUVdpZGdldDo6ZXJhc2UoKQp7IGVyYXNlKCAwLCAwLCBjcmVjdC53aWR0aCgpLCBjcmVjdC5o
ZWlnaHQoKSApOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjplcmFzZSggY29uc3QgUVJlY3QgJnIg
KQp7IGVyYXNlKCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSApOyB9Cgppbmxp
bmUgYm9vbCBRV2lkZ2V0OjpjbG9zZSgpCnsgcmV0dXJuIGNsb3NlKCBGQUxTRSApOyB9Cgppbmxp
bmUgYm9vbCBRV2lkZ2V0Ojppc1Zpc2libGUoKSBjb25zdAp7IHJldHVybiB0ZXN0V1N0YXRlKFdT
dGF0ZV9WaXNpYmxlKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNWaXNpYmxlVG9UTFcoKSBj
b25zdAp7IHJldHVybiBpc1Zpc2libGUoKTsgfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6aXNIaWRk
ZW4oKSBjb25zdAp7IHJldHVybiB0ZXN0V1N0YXRlKFdTdGF0ZV9Gb3JjZUhpZGUpOyB9Cgppbmxp
bmUgYm9vbCBRV2lkZ2V0Ojppc1Nob3duKCkgY29uc3QKeyByZXR1cm4gIXRlc3RXU3RhdGUoV1N0
YXRlX0ZvcmNlSGlkZSk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6Om1vdmUoIGNvbnN0IFFQb2lu
dCAmcCApCnsgbW92ZSggcC54KCksIHAueSgpICk7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnJl
c2l6ZSggY29uc3QgUVNpemUgJnMgKQp7IHJlc2l6ZSggcy53aWR0aCgpLCBzLmhlaWdodCgpKTsg
fQoKaW5saW5lIHZvaWQgUVdpZGdldDo6c2V0R2VvbWV0cnkoIGNvbnN0IFFSZWN0ICZyICkKeyBz
ZXRHZW9tZXRyeSggci5sZWZ0KCksIHIudG9wKCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSApOyB9
CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpkcmF3VGV4dCggY29uc3QgUVBvaW50ICZwLCBjb25zdCBR
U3RyaW5nICZzICkKeyBkcmF3VGV4dCggcC54KCksIHAueSgpLCBzICk7IH0KCmlubGluZSBRV2lk
Z2V0ICpRV2lkZ2V0OjpwYXJlbnRXaWRnZXQoIGJvb2wgc2FtZVdpbmRvdyApIGNvbnN0CnsKICAg
IGlmICggc2FtZVdpbmRvdyApCiAgICAgICAgcmV0dXJuIGlzVG9wTGV2ZWwoKSA/IDAgOiAoUVdp
ZGdldCAqKVFPYmplY3Q6OnBhcmVudCgpOwogICAgcmV0dXJuIChRV2lkZ2V0ICopUU9iamVjdDo6
cGFyZW50KCk7Cn0KCmlubGluZSBRV2lkZ2V0TWFwcGVyICpRV2lkZ2V0Ojp3bWFwcGVyKCkKeyBy
ZXR1cm4gbWFwcGVyOyB9CgppbmxpbmUgdWludCBRV2lkZ2V0OjpnZXRXU3RhdGUoKSBjb25zdAp7
IHJldHVybiB3aWRnZXRfc3RhdGU7IH0KCmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldFdTdGF0ZSgg
dWludCBmICkKeyB3aWRnZXRfc3RhdGUgfD0gZjsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6Y2xl
YXJXU3RhdGUoIHVpbnQgZiApCnsgd2lkZ2V0X3N0YXRlICY9IH5mOyB9CgppbmxpbmUgUXQ6OldG
bGFncyBRV2lkZ2V0OjpnZXRXRmxhZ3MoKSBjb25zdAp7IHJldHVybiB3aWRnZXRfZmxhZ3M7IH0K
CmlubGluZSB2b2lkIFFXaWRnZXQ6OnNldFdGbGFncyggV0ZsYWdzIGYgKQp7IHdpZGdldF9mbGFn
cyB8PSBmOyB9CgppbmxpbmUgdm9pZCBRV2lkZ2V0OjpjbGVhcldGbGFncyggV0ZsYWdzIGYgKQp7
IHdpZGdldF9mbGFncyAmPSB+ZjsgfQoKaW5saW5lIHZvaWQgUVdpZGdldDo6Y29uc3RQb2xpc2go
KSBjb25zdAp7CiAgICBpZiAoICF0ZXN0V1N0YXRlKFdTdGF0ZV9Qb2xpc2hlZCkgKSB7CiAgICAg
ICAgUVdpZGdldCogdGhhdCA9IChRV2lkZ2V0KikgdGhpczsKICAgICAgICB0aGF0LT5wb2xpc2go
KTsKICAgICAgICB0aGF0LT5zZXRXU3RhdGUoV1N0YXRlX1BvbGlzaGVkKTsKICAgIH0KfQoKaW5s
aW5lIGJvb2wgUVdpZGdldDo6b3duQ3Vyc29yKCkgY29uc3QKewogICAgcmV0dXJuIHRlc3RXU3Rh
dGUoIFdTdGF0ZV9Pd25DdXJzb3IgKTsKfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6b3duRm9udCgp
IGNvbnN0CnsKICAgIHJldHVybiBvd25fZm9udDsKfQoKaW5saW5lIGJvb2wgUVdpZGdldDo6b3du
UGFsZXR0ZSgpIGNvbnN0CnsKICAgIHJldHVybiBvd25fcGFsZXR0ZTsKfQoKCmlubGluZSB2b2lk
IFFXaWRnZXQ6OnNldFNpemVQb2xpY3koIFFTaXplUG9saWN5OjpTaXplVHlwZSBob3IsIFFTaXpl
UG9saWN5OjpTaXplVHlwZSB2ZXIsIGJvb2wgaGZ3ICkKewogICAgc2V0U2l6ZVBvbGljeSggUVNp
emVQb2xpY3koIGhvciwgdmVyLCBoZncpICk7Cn0KCgoKCgpjbGFzcyBRRm9jdXNEYXRhOwpjbGFz
cyBRV1NNYW5hZ2VyOwoKCgoKCgoKc3RydWN0IFFUTFdFeHRyYSB7CgogICAgUVN0cmluZyBjYXB0
aW9uOwogICAgUVN0cmluZyBpY29uVGV4dDsKICAgIFFQaXhtYXAgKmljb247CgogICAgUUZvY3Vz
RGF0YSAqZm9jdXNEYXRhOwogICAgc2hvcnQgaW5jdywgaW5jaDsKCiAgICB1bG9uZyBmbGVmdCwg
ZnJpZ2h0LCBmdG9wLCBmYm90dG9tOwogICAgdWludCBpY29uaWM6IDE7CiAgICB1aW50IGZ1bGxz
Y3JlZW4gOiAxOwogICAgdWludCBzaG93TW9kZTogMjsKICAgIHVpbnQgc2F2ZWRGbGFnczsKICAg
IHNob3J0IGJhc2V3LCBiYXNlaDsKCiAgICBXSWQgcGFyZW50V2luSWQ7CiAgICB1aW50IGVtYmVk
ZGVkIDogMTsKICAgIHVpbnQgc3BvbnRfdW5tYXBwZWQ6IDE7CiAgICB1aW50IHJlc2VydmVkOiAx
OwogICAgdWludCBkbmQgOiAxOwogICAgdWludCB1c3BvcyA6IDE7CiAgICB1aW50IHVzc2l6ZSA6
IDE7CiAgICB2b2lkICp4aWM7CiMgOTQ3ICIuLi8uLi9pbmNsdWRlL3F3aWRnZXQuaCIKICAgIFFS
ZWN0IG5vcm1hbEdlb21ldHJ5Owp9OwoKCgoKCgpzdHJ1Y3QgUVdFeHRyYSB7CiAgICBRX0lOVDE2
IG1pbncsIG1pbmg7CiAgICBRX0lOVDE2IG1heHcsIG1heGg7CiAgICBRUGl4bWFwICpiZ19waXg7
CiAgICBRV2lkZ2V0ICpmb2N1c19wcm94eTsKCiAgICBRQ3Vyc29yICpjdXJzOwoKICAgIFFUTFdF
eHRyYSAqdG9wZXh0cmE7CgoKCgogICAgV0lkIHhEbmRQcm94eTsKIyA5ODEgIi4uLy4uL2luY2x1
ZGUvcXdpZGdldC5oIgogICAgdWludCBiZ19vcmlnaW4gOiAyOwoKICAgIHVpbnQgY2hpbGRyZW5f
dXNlX2RuZCA6IDE7CgoKCgogICAgY2hhciBiZ19tb2RlOwogICAgY2hhciBiZ19tb2RlX3Zpc3Vh
bDsKCiAgICBRU3R5bGUqIHN0eWxlOwoKICAgIFFSZWN0IG1pY3JvX2ZvY3VzX2hpbnQ7CiAgICBR
U2l6ZVBvbGljeSBzaXplX3BvbGljeTsKfTsKIyA0MSAiLi4vLi4vaW5jbHVkZS9xZGVza3RvcHdp
ZGdldC5oIiAyCgoKY2xhc3MgUURlc2t0b3BXaWRnZXRQcml2YXRlOwoKY2xhc3MgUURlc2t0b3BX
aWRnZXQgOiBwdWJsaWMgUVdpZGdldAp7CiAgICBwdWJsaWM6IHZpcnR1YWwgUU1ldGFPYmplY3Qg
Km1ldGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBzdGF0aWNNZXRhT2JqZWN0KCk7IH0gdmlydHVh
bCBjb25zdCBjaGFyICpjbGFzc05hbWUoKSBjb25zdDsgdmlydHVhbCB2b2lkKiBxdF9jYXN0KCBj
b25zdCBjaGFyKiApOyB2aXJ0dWFsIGJvb2wgcXRfaW52b2tlKCBpbnQsIFFVT2JqZWN0KiApOyB2
aXJ0dWFsIGJvb2wgcXRfZW1pdCggaW50LCBRVU9iamVjdCogKTsgdmlydHVhbCBib29sIHF0X3By
b3BlcnR5KCBpbnQgaWQsIGludCBmLCBRVmFyaWFudCogdik7IHN0YXRpYyBib29sIHF0X3N0YXRp
Y19wcm9wZXJ0eSggUU9iamVjdCogLCBpbnQsIGludCwgUVZhcmlhbnQqICk7IHN0YXRpYyBRTWV0
YU9iamVjdCogc3RhdGljTWV0YU9iamVjdCgpOyBRT2JqZWN0KiBxT2JqZWN0KCkgeyByZXR1cm4g
KFFPYmplY3QqKXRoaXM7IH0gc3RhdGljIFFTdHJpbmcgdHIoIGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqID0gMCApOyBzdGF0aWMgUVN0cmluZyB0clV0ZjgoIGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqID0gMCApOyBwcml2YXRlOiBzdGF0aWMgUU1ldGFPYmplY3QgKm1ldGFPYmo7CnB1Ymxp
YzoKICAgIFFEZXNrdG9wV2lkZ2V0KCk7CiAgICB+UURlc2t0b3BXaWRnZXQoKTsKCiAgICBib29s
IGlzVmlydHVhbERlc2t0b3AoKSBjb25zdDsKCiAgICBpbnQgbnVtU2NyZWVucygpIGNvbnN0Owog
ICAgaW50IHByaW1hcnlTY3JlZW4oKSBjb25zdDsKCiAgICBpbnQgc2NyZWVuTnVtYmVyKCBRV2lk
Z2V0ICp3aWRnZXQgPSAwICkgY29uc3Q7CiAgICBpbnQgc2NyZWVuTnVtYmVyKCBjb25zdCBRUG9p
bnQgJiApIGNvbnN0OwoKICAgIFFXaWRnZXQgKnNjcmVlbiggaW50IHNjcmVlbiA9IC0xICk7Cgog
ICAgY29uc3QgUVJlY3QmIHNjcmVlbkdlb21ldHJ5KCBpbnQgc2NyZWVuID0gLTEgKSBjb25zdDsK
ICAgIGNvbnN0IFFSZWN0JiBzY3JlZW5HZW9tZXRyeSggUVdpZGdldCAqd2lkZ2V0ICkgY29uc3QK
ICAgIHsgcmV0dXJuIHNjcmVlbkdlb21ldHJ5KCBzY3JlZW5OdW1iZXIoIHdpZGdldCApICk7IH0K
ICAgIGNvbnN0IFFSZWN0JiBzY3JlZW5HZW9tZXRyeSggY29uc3QgUVBvaW50ICZwb2ludCApIGNv
bnN0CiAgICB7IHJldHVybiBzY3JlZW5HZW9tZXRyeSggc2NyZWVuTnVtYmVyKCBwb2ludCApICk7
IH0KCiAgICBjb25zdCBRUmVjdCYgYXZhaWxhYmxlR2VvbWV0cnkoIGludCBzY3JlZW4gPSAtMSAp
IGNvbnN0OwogICAgY29uc3QgUVJlY3QmIGF2YWlsYWJsZUdlb21ldHJ5KCBRV2lkZ2V0ICp3aWRn
ZXQgKSBjb25zdAogICAgeyByZXR1cm4gYXZhaWxhYmxlR2VvbWV0cnkoIHNjcmVlbk51bWJlcigg
d2lkZ2V0ICkgKTsgfQogICAgY29uc3QgUVJlY3QmIGF2YWlsYWJsZUdlb21ldHJ5KCBjb25zdCBR
UG9pbnQgJnBvaW50ICkgY29uc3QKICAgIHsgcmV0dXJuIGF2YWlsYWJsZUdlb21ldHJ5KCBzY3Jl
ZW5OdW1iZXIoIHBvaW50ICkgKTsgfQoKICAgIHZvaWQgaW5zZXJ0Q2hpbGQoIFFPYmplY3QgKiAp
OwoKcHJvdGVjdGVkOgogICAgdm9pZCByZXNpemVFdmVudCggUVJlc2l6ZUV2ZW50ICplICk7Cgpw
cml2YXRlOgogICAgUURlc2t0b3BXaWRnZXRQcml2YXRlICpkOwoKCiAgICBRRGVza3RvcFdpZGdl
dCggY29uc3QgUURlc2t0b3BXaWRnZXQgJiApOwogICAgUURlc2t0b3BXaWRnZXQgJm9wZXJhdG9y
PSggY29uc3QgUURlc2t0b3BXaWRnZXQgJiApOwoKfTsKIyA0MyAiLi4vLi4vaW5jbHVkZS9xYXBw
bGljYXRpb24uaCIgMgoKCiMgMSAiLi4vLi4vaW5jbHVkZS9xdHJhbnNsYXRvci5oIiAxCiMgNDkg
Ii4uLy4uL2luY2x1ZGUvcXRyYW5zbGF0b3IuaCIKY2xhc3MgUVRyYW5zbGF0b3JQcml2YXRlOwoK
Y2xhc3MgUVRyYW5zbGF0b3JNZXNzYWdlCnsKcHVibGljOgogICAgUVRyYW5zbGF0b3JNZXNzYWdl
KCk7CiAgICBRVHJhbnNsYXRvck1lc3NhZ2UoIGNvbnN0IGNoYXIgKiBjb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogc291cmNlVGV4dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqIGNvbW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFFTdHJpbmcmIHRyYW5zbGF0aW9uID0gUVN0cmluZzo6bnVsbCApOwogICAgUVRyYW5zbGF0
b3JNZXNzYWdlKCBRRGF0YVN0cmVhbSAmICk7CiAgICBRVHJhbnNsYXRvck1lc3NhZ2UoIGNvbnN0
IFFUcmFuc2xhdG9yTWVzc2FnZSAmIG0gKTsKCiAgICBRVHJhbnNsYXRvck1lc3NhZ2UgJiBvcGVy
YXRvcj0oIGNvbnN0IFFUcmFuc2xhdG9yTWVzc2FnZSAmIG0gKTsKCiAgICB1aW50IGhhc2goKSBj
b25zdCB7IHJldHVybiBoOyB9CiAgICBjb25zdCBjaGFyICpjb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gY3g7IH0KICAgIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQoKSBjb25zdCB7IHJldHVybiBzdDsg
fQogICAgY29uc3QgY2hhciAqY29tbWVudCgpIGNvbnN0IHsgcmV0dXJuIGNtOyB9CgogICAgdm9p
ZCBzZXRUcmFuc2xhdGlvbiggY29uc3QgUVN0cmluZyAmIHRyYW5zbGF0aW9uICkgeyB0biA9IHRy
YW5zbGF0aW9uOyB9CiAgICBRU3RyaW5nIHRyYW5zbGF0aW9uKCkgY29uc3QgeyByZXR1cm4gdG47
IH0KCiAgICBlbnVtIFByZWZpeCB7IE5vUHJlZml4LCBIYXNoLCBIYXNoQ29udGV4dCwgSGFzaENv
bnRleHRTb3VyY2VUZXh0LAogICAgICAgICAgICAgICAgICBIYXNoQ29udGV4dFNvdXJjZVRleHRD
b21tZW50IH07CiAgICB2b2lkIHdyaXRlKCBRRGF0YVN0cmVhbSAmIHMsIGJvb2wgc3RyaXAgPSBG
QUxTRSwKICAgICAgICAgICAgICAgIFByZWZpeCBwcmVmaXggPSBIYXNoQ29udGV4dFNvdXJjZVRl
eHRDb21tZW50ICkgY29uc3Q7CiAgICBQcmVmaXggY29tbW9uUHJlZml4KCBjb25zdCBRVHJhbnNs
YXRvck1lc3NhZ2UmICkgY29uc3Q7CgogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRVHJhbnNs
YXRvck1lc3NhZ2UmIG0gKSBjb25zdDsKICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUVRyYW5z
bGF0b3JNZXNzYWdlJiBtICkgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj09KCBtICk7IH0K
ICAgIGJvb2wgb3BlcmF0b3I8KCBjb25zdCBRVHJhbnNsYXRvck1lc3NhZ2UmIG0gKSBjb25zdDsK
ICAgIGJvb2wgb3BlcmF0b3I8PSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiBtICkgY29uc3QK
ICAgIHsgcmV0dXJuICFtLm9wZXJhdG9yPCggKnRoaXMgKTsgfQogICAgYm9vbCBvcGVyYXRvcj4o
IGNvbnN0IFFUcmFuc2xhdG9yTWVzc2FnZSYgbSApIGNvbnN0CiAgICB7IHJldHVybiBtLm9wZXJh
dG9yPCggKnRoaXMgKTsgfQogICAgYm9vbCBvcGVyYXRvcj49KCBjb25zdCBRVHJhbnNsYXRvck1l
c3NhZ2UmIG0gKSBjb25zdAogICAgeyByZXR1cm4gIW9wZXJhdG9yPCggbSApOyB9Cgpwcml2YXRl
OgogICAgdWludCBoOwogICAgUUNTdHJpbmcgY3g7CiAgICBRQ1N0cmluZyBzdDsKICAgIFFDU3Ry
aW5nIGNtOwogICAgUVN0cmluZyB0bjsKCiAgICBlbnVtIFRhZyB7IFRhZ19FbmQgPSAxLCBUYWdf
U291cmNlVGV4dDE2LCBUYWdfVHJhbnNsYXRpb24sIFRhZ19Db250ZXh0MTYsCiAgICAgICAgICAg
ICAgIFRhZ19IYXNoLCBUYWdfU291cmNlVGV4dCwgVGFnX0NvbnRleHQsIFRhZ19Db21tZW50LAog
ICAgICAgICAgICAgICBUYWdfT2Jzb2xldGUxIH07Cn07CgoKY2xhc3MgUVRyYW5zbGF0b3I6IHB1
YmxpYyBRT2JqZWN0CnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVj
dCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNo
YXIgKmNsYXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIq
ICk7IHZpcnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9v
bCBxdF9lbWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGlu
dCBpZCwgaW50IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5
KCBRT2JqZWN0KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBz
dGF0aWNNZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCop
dGhpczsgfSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAw
ICk7IHN0YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAw
ICk7IHByaXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKcHVibGljOgogICAgUVRy
YW5zbGF0b3IoIFFPYmplY3QgKiBwYXJlbnQsIGNvbnN0IGNoYXIgKiBuYW1lID0gMCApOwogICAg
flFUcmFuc2xhdG9yKCk7CgoKICAgIFFTdHJpbmcgZmluZCggY29uc3QgY2hhciAqY29udGV4dCwg
Y29uc3QgY2hhciAqc291cmNlVGV4dCwgY29uc3QgY2hhciAqIGNvbW1lbnQgPSAwICkgY29uc3Qg
ewogICAgICAgIHJldHVybiBmaW5kTWVzc2FnZSggY29udGV4dCwgc291cmNlVGV4dCwgY29tbWVu
dCApLnRyYW5zbGF0aW9uKCk7CiAgICB9CgogICAgdmlydHVhbCBRVHJhbnNsYXRvck1lc3NhZ2Ug
ZmluZE1lc3NhZ2UoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogKSBjb25zdDsKCiAgICBib29sIGxvYWQo
IGNvbnN0IFFTdHJpbmcgJiBmaWxlbmFtZSwKICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAm
IGRpcmVjdG9yeSA9IFFTdHJpbmc6Om51bGwsCiAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcg
JiBzZWFyY2hfZGVsaW1pdGVycyA9IFFTdHJpbmc6Om51bGwsCiAgICAgICAgICAgICAgIGNvbnN0
IFFTdHJpbmcgJiBzdWZmaXggPSBRU3RyaW5nOjpudWxsICk7CiAgICBib29sIGxvYWQoIGNvbnN0
IHVjaGFyICpkYXRhLCBpbnQgbGVuICkgewogICAgICAgIGNsZWFyKCk7CiAgICAgICAgcmV0dXJu
IGRvX2xvYWQoIGRhdGEsIGxlbiApOwogICAgfQoKICAgIHZvaWQgY2xlYXIoKTsKCgogICAgZW51
bSBTYXZlTW9kZSB7IEV2ZXJ5dGhpbmcsIFN0cmlwcGVkIH07CgogICAgYm9vbCBzYXZlKCBjb25z
dCBRU3RyaW5nICYgZmlsZW5hbWUsIFNhdmVNb2RlIG1vZGUgPSBFdmVyeXRoaW5nICk7CgogICAg
dm9pZCBpbnNlcnQoIGNvbnN0IFFUcmFuc2xhdG9yTWVzc2FnZSYgKTsKICAgIHZvaWQgaW5zZXJ0
KCBjb25zdCBjaGFyICpjb250ZXh0LCBjb25zdCBjaGFyICpzb3VyY2VUZXh0LCBjb25zdCBRU3Ry
aW5nICZ0cmFuc2xhdGlvbiApIHsKICAgICAgICBpbnNlcnQoIFFUcmFuc2xhdG9yTWVzc2FnZShj
b250ZXh0LCBzb3VyY2VUZXh0LCAiIiwgdHJhbnNsYXRpb24pICk7CiAgICB9CiAgICB2b2lkIHJl
bW92ZSggY29uc3QgUVRyYW5zbGF0b3JNZXNzYWdlJiApOwogICAgdm9pZCByZW1vdmUoIGNvbnN0
IGNoYXIgKmNvbnRleHQsIGNvbnN0IGNoYXIgKnNvdXJjZVRleHQgKSB7CiAgICAgICAgcmVtb3Zl
KCBRVHJhbnNsYXRvck1lc3NhZ2UoY29udGV4dCwgc291cmNlVGV4dCwgIiIpICk7CiAgICB9CiAg
ICBib29sIGNvbnRhaW5zKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
IGNvbW1lbnQgPSAwICkgY29uc3Q7CgogICAgdm9pZCBzcXVlZXplKCBTYXZlTW9kZSA9IEV2ZXJ5
dGhpbmcgKTsKICAgIHZvaWQgdW5zcXVlZXplKCk7CgogICAgUVZhbHVlTGlzdDxRVHJhbnNsYXRv
ck1lc3NhZ2U+IG1lc3NhZ2VzKCkgY29uc3Q7CgoKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwoK
cHJpdmF0ZToKCiAgICBRVHJhbnNsYXRvciggY29uc3QgUVRyYW5zbGF0b3IgJiApOwogICAgUVRy
YW5zbGF0b3IgJm9wZXJhdG9yPSggY29uc3QgUVRyYW5zbGF0b3IgJiApOwoKCiAgICBib29sIGRv
X2xvYWQoIGNvbnN0IHVjaGFyICpkYXRhLCBpbnQgbGVuICk7CgogICAgUVRyYW5zbGF0b3JQcml2
YXRlICogZDsKfTsKIyA0NiAiLi4vLi4vaW5jbHVkZS9xYXBwbGljYXRpb24uaCIgMgoKCgoKY2xh
c3MgUVNlc3Npb25NYW5hZ2VyOwpjbGFzcyBRU3R5bGU7CmNsYXNzIFFUcmFuc2xhdG9yOwpjbGFz
cyBRRXZlbnRMb29wOwoKCgoKCmNsYXNzIFFNdXRleDsKCgoKY2xhc3MgUUFwcGxpY2F0aW9uOwpl
eHRlcm4gUUFwcGxpY2F0aW9uICpxQXBwOwoKCmNsYXNzIFFBcHBsaWNhdGlvbiA6IHB1YmxpYyBR
T2JqZWN0CnsKICAgIHB1YmxpYzogdmlydHVhbCBRTWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY01ldGFPYmplY3QoKTsgfSB2aXJ0dWFsIGNvbnN0IGNoYXIgKmNs
YXNzTmFtZSgpIGNvbnN0OyB2aXJ0dWFsIHZvaWQqIHF0X2Nhc3QoIGNvbnN0IGNoYXIqICk7IHZp
cnR1YWwgYm9vbCBxdF9pbnZva2UoIGludCwgUVVPYmplY3QqICk7IHZpcnR1YWwgYm9vbCBxdF9l
bWl0KCBpbnQsIFFVT2JqZWN0KiApOyB2aXJ0dWFsIGJvb2wgcXRfcHJvcGVydHkoIGludCBpZCwg
aW50IGYsIFFWYXJpYW50KiB2KTsgc3RhdGljIGJvb2wgcXRfc3RhdGljX3Byb3BlcnR5KCBRT2Jq
ZWN0KiAsIGludCwgaW50LCBRVmFyaWFudCogKTsgc3RhdGljIFFNZXRhT2JqZWN0KiBzdGF0aWNN
ZXRhT2JqZWN0KCk7IFFPYmplY3QqIHFPYmplY3QoKSB7IHJldHVybiAoUU9iamVjdCopdGhpczsg
fSBzdGF0aWMgUVN0cmluZyB0ciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHN0
YXRpYyBRU3RyaW5nIHRyVXRmOCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogPSAwICk7IHBy
aXZhdGU6IHN0YXRpYyBRTWV0YU9iamVjdCAqbWV0YU9iajsKcHVibGljOgogICAgUUFwcGxpY2F0
aW9uKCBpbnQgJmFyZ2MsIGNoYXIgKiphcmd2KTsKICAgIFFBcHBsaWNhdGlvbiggaW50ICZhcmdj
LCBjaGFyICoqYXJndiwgYm9vbCBHVUllbmFibGVkICk7CiAgICBlbnVtIFR5cGUgeyBUdHksIEd1
aUNsaWVudCwgR3VpU2VydmVyIH07CiAgICBRQXBwbGljYXRpb24oIGludCAmYXJnYywgY2hhciAq
KmFyZ3YsIFR5cGUgKTsKCiAgICBRQXBwbGljYXRpb24oIERpc3BsYXkqIGRweSwgSEFORExFIHZp
c3VhbCA9IDAsIEhBTkRMRSBjbWFwID0gMCApOwogICAgUUFwcGxpY2F0aW9uKCBEaXNwbGF5ICpk
cHksIGludCBhcmdjLCBjaGFyICoqYXJndiwKICAgICAgICAgICAgICAgICAgSEFORExFIHZpc3Vh
bCA9IDAsIEhBTkRMRSBjbWFwPSAwICk7CgogICAgdmlydHVhbCB+UUFwcGxpY2F0aW9uKCk7Cgog
ICAgaW50IGFyZ2MoKSBjb25zdDsKICAgIGNoYXIgKiphcmd2KCkgY29uc3Q7CgogICAgVHlwZSB0
eXBlKCkgY29uc3Q7CgoKICAgIHN0YXRpYyBRU3R5bGUgJnN0eWxlKCk7CiAgICBzdGF0aWMgdm9p
ZCBzZXRTdHlsZSggUVN0eWxlKiApOwogICAgc3RhdGljIFFTdHlsZSogc2V0U3R5bGUoIGNvbnN0
IFFTdHJpbmcmICk7CgoKICAgIGVudW0gQ29sb3JNb2RlIHsgTm9ybWFsQ29sb3JzLCBDdXN0b21D
b2xvcnMgfTsKICAgIHN0YXRpYyBDb2xvck1vZGUgY29sb3JNb2RlKCk7CiAgICBzdGF0aWMgdm9p
ZCBzZXRDb2xvck1vZGUoIFFBcHBsaWNhdGlvbjo6Q29sb3JNb2RlICk7CgoKICAgIGVudW0gQ29s
b3JTcGVjIHsgTm9ybWFsQ29sb3I9MCwgQ3VzdG9tQ29sb3I9MSwgTWFueUNvbG9yPTIgfTsKICAg
IHN0YXRpYyBpbnQgY29sb3JTcGVjKCk7CiAgICBzdGF0aWMgdm9pZCBzZXRDb2xvclNwZWMoIGlu
dCApOwoKICAgIHN0YXRpYyBRQ3Vyc29yICpvdmVycmlkZUN1cnNvcigpOwogICAgc3RhdGljIHZv
aWQgc2V0T3ZlcnJpZGVDdXJzb3IoIGNvbnN0IFFDdXJzb3IgJiwgYm9vbCByZXBsYWNlPUZBTFNF
ICk7CiAgICBzdGF0aWMgdm9pZCByZXN0b3JlT3ZlcnJpZGVDdXJzb3IoKTsKCiAgICBzdGF0aWMg
Ym9vbCBoYXNHbG9iYWxNb3VzZVRyYWNraW5nKCk7CiAgICBzdGF0aWMgdm9pZCBzZXRHbG9iYWxN
b3VzZVRyYWNraW5nKCBib29sIGVuYWJsZSApOwoKICAgIHN0YXRpYyBRUGFsZXR0ZSBwYWxldHRl
KCBjb25zdCBRV2lkZ2V0KiA9IDAgKTsKICAgIHN0YXRpYyB2b2lkIHNldFBhbGV0dGUoIGNvbnN0
IFFQYWxldHRlICYsIGJvb2wgaW5mb3JtV2lkZ2V0cz1GQUxTRSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogY2xhc3NOYW1lID0gMCApOwoKICAgIHN0YXRpYyBR
Rm9udCBmb250KCBjb25zdCBRV2lkZ2V0KiA9IDAgKTsKICAgIHN0YXRpYyB2b2lkIHNldEZvbnQo
IGNvbnN0IFFGb250ICYsIGJvb2wgaW5mb3JtV2lkZ2V0cz1GQUxTRSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogY2xhc3NOYW1lID0gMCApOwogICAgc3RhdGljIFFG
b250TWV0cmljcyBmb250TWV0cmljcygpOwoKICAgIFFXaWRnZXQgKm1haW5XaWRnZXQoKSBjb25z
dDsKICAgIHZpcnR1YWwgdm9pZCBzZXRNYWluV2lkZ2V0KCBRV2lkZ2V0ICogKTsKICAgIHZpcnR1
YWwgdm9pZCBwb2xpc2goIFFXaWRnZXQgKiApOwoKICAgIHN0YXRpYyBRV2lkZ2V0TGlzdCAqYWxs
V2lkZ2V0cygpOwogICAgc3RhdGljIFFXaWRnZXRMaXN0ICp0b3BMZXZlbFdpZGdldHMoKTsKCiAg
ICBzdGF0aWMgUURlc2t0b3BXaWRnZXQgKmRlc2t0b3AoKTsKCiAgICBzdGF0aWMgUVdpZGdldCAq
YWN0aXZlUG9wdXBXaWRnZXQoKTsKICAgIHN0YXRpYyBRV2lkZ2V0ICphY3RpdmVNb2RhbFdpZGdl
dCgpOwoKICAgIHN0YXRpYyBRQ2xpcGJvYXJkICpjbGlwYm9hcmQoKTsKCiAgICBRV2lkZ2V0ICpm
b2N1c1dpZGdldCgpIGNvbnN0OwogICAgUVdpZGdldCAqYWN0aXZlV2luZG93KCkgY29uc3Q7Cgog
ICAgc3RhdGljIFFXaWRnZXQgKndpZGdldEF0KCBpbnQgeCwgaW50IHksIGJvb2wgY2hpbGQ9RkFM
U0UgKTsKICAgIHN0YXRpYyBRV2lkZ2V0ICp3aWRnZXRBdCggY29uc3QgUVBvaW50ICYsIGJvb2wg
Y2hpbGQ9RkFMU0UgKTsKCiAgICBzdGF0aWMgUUV2ZW50TG9vcCAqZXZlbnRMb29wKCk7CgogICAg
aW50IGV4ZWMoKTsKICAgIHZvaWQgcHJvY2Vzc0V2ZW50cygpOwogICAgdm9pZCBwcm9jZXNzRXZl
bnRzKCBpbnQgbWF4dGltZSApOwogICAgdm9pZCBwcm9jZXNzT25lRXZlbnQoKTsKICAgIGJvb2wg
aGFzUGVuZGluZ0V2ZW50cygpOwogICAgaW50IGVudGVyX2xvb3AoKTsKICAgIHZvaWQgZXhpdF9s
b29wKCk7CiAgICBpbnQgbG9vcExldmVsKCkgY29uc3Q7CiAgICBzdGF0aWMgdm9pZCBleGl0KCBp
bnQgcmV0Y29kZT0wICk7CgogICAgc3RhdGljIGJvb2wgc2VuZEV2ZW50KCBRT2JqZWN0ICpyZWNl
aXZlciwgUUV2ZW50ICpldmVudCApOwogICAgc3RhdGljIHZvaWQgcG9zdEV2ZW50KCBRT2JqZWN0
ICpyZWNlaXZlciwgUUV2ZW50ICpldmVudCApOwogICAgc3RhdGljIHZvaWQgc2VuZFBvc3RlZEV2
ZW50cyggUU9iamVjdCAqcmVjZWl2ZXIsIGludCBldmVudF90eXBlICk7CiAgICBzdGF0aWMgdm9p
ZCBzZW5kUG9zdGVkRXZlbnRzKCk7CgogICAgc3RhdGljIHZvaWQgcmVtb3ZlUG9zdGVkRXZlbnRz
KCBRT2JqZWN0ICpyZWNlaXZlciApOwoKICAgIHZpcnR1YWwgYm9vbCBub3RpZnkoIFFPYmplY3Qg
KiwgUUV2ZW50ICogKTsKCiAgICBzdGF0aWMgYm9vbCBzdGFydGluZ1VwKCk7CiAgICBzdGF0aWMg
Ym9vbCBjbG9zaW5nRG93bigpOwoKICAgIHN0YXRpYyB2b2lkIGZsdXNoWCgpOwogICAgc3RhdGlj
IHZvaWQgZmx1c2goKTsKICAgIHN0YXRpYyB2b2lkIHN5bmNYKCk7CgogICAgc3RhdGljIHZvaWQg
YmVlcCgpOwoKCiAgICB2b2lkIHNldERlZmF1bHRDb2RlYyggUVRleHRDb2RlYyAqICk7CiAgICBR
VGV4dENvZGVjKiBkZWZhdWx0Q29kZWMoKSBjb25zdDsKICAgIHZvaWQgaW5zdGFsbFRyYW5zbGF0
b3IoIFFUcmFuc2xhdG9yICogKTsKICAgIHZvaWQgcmVtb3ZlVHJhbnNsYXRvciggUVRyYW5zbGF0
b3IgKiApOwoKICAgIGVudW0gRW5jb2RpbmcgeyBEZWZhdWx0Q29kZWMsIFVuaWNvZGVVVEY4IH07
CiAgICBRU3RyaW5nIHRyYW5zbGF0ZSggY29uc3QgY2hhciAqIGNvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGtleSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICogY29tbWVudCA9IDAsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRW5jb2RpbmcgZW5jb2RpbmcgPSBEZWZhdWx0Q29kZWMgKSBjb25zdDsK
CgogICAgc3RhdGljIHZvaWQgc2V0V2luU3R5bGVIaWdobGlnaHRDb2xvciggY29uc3QgUUNvbG9y
ICZjICkgewogICAgICAgIFFQYWxldHRlIHAoIHBhbGV0dGUoKSApOwogICAgICAgIHAuc2V0Q29s
b3IoIFFDb2xvckdyb3VwOjpIaWdobGlnaHQsIGMgKTsKICAgICAgICBzZXRQYWxldHRlKCBwLCBU
UlVFKTsKICAgIH0KICAgIHN0YXRpYyBjb25zdCBRQ29sb3IgJndpblN0eWxlSGlnaGxpZ2h0Q29s
b3IoKSB7CiAgICAgICAgcmV0dXJuIHBhbGV0dGUoKS5hY3RpdmUoKS5oaWdobGlnaHQoKTsKICAg
IH0KCiAgICBzdGF0aWMgdm9pZCBzZXREZXNrdG9wU2V0dGluZ3NBd2FyZSggYm9vbCApOwogICAg
c3RhdGljIGJvb2wgZGVza3RvcFNldHRpbmdzQXdhcmUoKTsKCiAgICBzdGF0aWMgdm9pZCBzZXRD
dXJzb3JGbGFzaFRpbWUoIGludCApOwogICAgc3RhdGljIGludCBjdXJzb3JGbGFzaFRpbWUoKTsK
CiAgICBzdGF0aWMgdm9pZCBzZXREb3VibGVDbGlja0ludGVydmFsKCBpbnQgKTsKICAgIHN0YXRp
YyBpbnQgZG91YmxlQ2xpY2tJbnRlcnZhbCgpOwoKICAgIHN0YXRpYyB2b2lkIHNldFdoZWVsU2Ny
b2xsTGluZXMoIGludCApOwogICAgc3RhdGljIGludCB3aGVlbFNjcm9sbExpbmVzKCk7CgogICAg
c3RhdGljIHZvaWQgc2V0R2xvYmFsU3RydXQoIGNvbnN0IFFTaXplICYgKTsKICAgIHN0YXRpYyBR
U2l6ZSBnbG9iYWxTdHJ1dCgpOwoKCiAgICBzdGF0aWMgdm9pZCBzZXRMaWJyYXJ5UGF0aHMoY29u
c3QgUVN0cmluZ0xpc3QgJik7CiAgICBzdGF0aWMgUVN0cmluZ0xpc3QgbGlicmFyeVBhdGhzKCk7
CiAgICBzdGF0aWMgdm9pZCBhZGRMaWJyYXJ5UGF0aChjb25zdCBRU3RyaW5nICYpOwogICAgc3Rh
dGljIHZvaWQgcmVtb3ZlTGlicmFyeVBhdGgoY29uc3QgUVN0cmluZyAmKTsKCiAgICBzdGF0aWMg
dm9pZCBzZXRTdGFydERyYWdUaW1lKCBpbnQgbXMgKTsKICAgIHN0YXRpYyBpbnQgc3RhcnREcmFn
VGltZSgpOwogICAgc3RhdGljIHZvaWQgc2V0U3RhcnREcmFnRGlzdGFuY2UoIGludCBsICk7CiAg
ICBzdGF0aWMgaW50IHN0YXJ0RHJhZ0Rpc3RhbmNlKCk7CgogICAgc3RhdGljIHZvaWQgc2V0UmV2
ZXJzZUxheW91dCggYm9vbCBiICk7CiAgICBzdGF0aWMgYm9vbCByZXZlcnNlTGF5b3V0KCk7Cgog
ICAgc3RhdGljIGludCBob3Jpem9udGFsQWxpZ25tZW50KCBpbnQgYWxpZ24gKTsKCiAgICBzdGF0
aWMgYm9vbCBpc0VmZmVjdEVuYWJsZWQoIFF0OjpVSUVmZmVjdCApOwogICAgc3RhdGljIHZvaWQg
c2V0RWZmZWN0RW5hYmxlZCggUXQ6OlVJRWZmZWN0LCBib29sIGVuYWJsZSA9IFRSVUUgKTsKIyAy
MzEgIi4uLy4uL2luY2x1ZGUvcWFwcGxpY2F0aW9uLmgiCiAgICB2aXJ0dWFsIGJvb2wgeDExRXZl
bnRGaWx0ZXIoIFhFdmVudCAqICk7CiAgICB2aXJ0dWFsIGludCB4MTFDbGllbnRNZXNzYWdlKCBR
V2lkZ2V0KiwgWEV2ZW50KiwgYm9vbCBwYXNzaXZlX29ubHkpOwogICAgaW50IHgxMVByb2Nlc3NF
dmVudCggWEV2ZW50KiApOwojIDI1NyAiLi4vLi4vaW5jbHVkZS9xYXBwbGljYXRpb24uaCIKICAg
IGJvb2wgaXNTZXNzaW9uUmVzdG9yZWQoKSBjb25zdDsKICAgIFFTdHJpbmcgc2Vzc2lvbklkKCkg
Y29uc3Q7CiAgICBRU3RyaW5nIHNlc3Npb25LZXkoKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBj
b21taXREYXRhKCBRU2Vzc2lvbk1hbmFnZXImIHNtICk7CiAgICB2aXJ0dWFsIHZvaWQgc2F2ZVN0
YXRlKCBRU2Vzc2lvbk1hbmFnZXImIHNtICk7CgoKICAgIHN0YXRpYyB2b2lkIGNyZWF0ZV94aW0o
KTsKICAgIHN0YXRpYyB2b2lkIGNsb3NlX3hpbSgpOwogICAgc3RhdGljIGJvb2wgeDExX2FwcGx5
X3NldHRpbmdzKCk7CgogICAgdm9pZCB3YWtlVXBHdWlUaHJlYWQoKTsKCiAgICB2b2lkIGxvY2so
KTsKICAgIHZvaWQgdW5sb2NrKGJvb2wgd2FrZVVwR3VpID0gVFJVRSk7CiAgICBib29sIGxvY2tl
ZCgpOwogICAgYm9vbCB0cnlMb2NrKCk7CgoKcHJvdGVjdGVkOgogICAgdm9pZCBsYXN0V2luZG93
Q2xvc2VkKCk7CiAgICB2b2lkIGFib3V0VG9RdWl0KCk7CiAgICB2b2lkIGd1aVRocmVhZEF3YWtl
KCk7CgpwdWJsaWMgOgogICAgdm9pZCBxdWl0KCk7CiAgICB2b2lkIGNsb3NlQWxsV2luZG93cygp
OwoKCgoKCgpwcm90ZWN0ZWQ6CiAgICBib29sIGV2ZW50KFFFdmVudCAqKTsKCnByaXZhdGU6CiAg
ICB2b2lkIGNvbnN0cnVjdCggaW50ICZhcmdjLCBjaGFyICoqYXJndiwgVHlwZSApOwogICAgdm9p
ZCBpbml0aWFsaXplKCBpbnQsIGNoYXIgKiogKTsKICAgIHZvaWQgaW5pdF9wcmVjbWRsaW5lKCk7
CiAgICB2b2lkIHByb2Nlc3NfY21kbGluZSggaW50KiBhcmdjcHRyLCBjaGFyICoqIGFyZ3YgKTsK
ICAgIGJvb2wgaW50ZXJuYWxOb3RpZnkoIFFPYmplY3QgKiwgUUV2ZW50ICogKTsKIyAzMTggIi4u
Ly4uL2luY2x1ZGUvcWFwcGxpY2F0aW9uLmgiCiAgICBzdGF0aWMgUU11dGV4ICpxdF9tdXRleDsK
CgogICAgaW50IGFwcF9hcmdjOwogICAgY2hhciAqKmFwcF9hcmd2OwogICAgYm9vbCBxdWl0X25v
dzsKICAgIGludCBxdWl0X2NvZGU7CiAgICBzdGF0aWMgUVN0eWxlICphcHBfc3R5bGU7CiAgICBz
dGF0aWMgaW50IGFwcF9jc3BlYzsKCiAgICBzdGF0aWMgUVBhbGV0dGUgKmFwcF9wYWw7CgogICAg
c3RhdGljIFFGb250ICphcHBfZm9udDsKCiAgICBzdGF0aWMgUUN1cnNvciAqYXBwX2N1cnNvcjsK
CiAgICBzdGF0aWMgUUV2ZW50TG9vcCogZXZlbnRsb29wOwogICAgc3RhdGljIGludCBhcHBfdHJh
Y2tpbmc7CiAgICBzdGF0aWMgYm9vbCBpc19hcHBfcnVubmluZzsKICAgIHN0YXRpYyBib29sIGlz
X2FwcF9jbG9zaW5nOwogICAgc3RhdGljIGJvb2wgYXBwX2V4aXRfbG9vcDsKICAgIHN0YXRpYyBp
bnQgbG9vcF9sZXZlbDsKICAgIHN0YXRpYyBRV2lkZ2V0ICptYWluX3dpZGdldDsKICAgIHN0YXRp
YyBRV2lkZ2V0ICpmb2N1c193aWRnZXQ7CiAgICBzdGF0aWMgUVdpZGdldCAqYWN0aXZlX3dpbmRv
dzsKICAgIHN0YXRpYyBib29sIG9iZXlfZGVza3RvcF9zZXR0aW5nczsKICAgIHN0YXRpYyBpbnQg
Y3Vyc29yX2ZsYXNoX3RpbWU7CiAgICBzdGF0aWMgaW50IG1vdXNlX2RvdWJsZV9jbGlja190aW1l
OwogICAgc3RhdGljIGludCB3aGVlbF9zY3JvbGxfbGluZXM7CgogICAgc3RhdGljIGJvb2wgYW5p
bWF0ZV91aTsKICAgIHN0YXRpYyBib29sIGFuaW1hdGVfbWVudTsKICAgIHN0YXRpYyBib29sIGFu
aW1hdGVfdG9vbHRpcDsKICAgIHN0YXRpYyBib29sIGFuaW1hdGVfY29tYm87CiAgICBzdGF0aWMg
Ym9vbCBmYWRlX21lbnU7CiAgICBzdGF0aWMgYm9vbCBmYWRlX3Rvb2x0aXA7CiAgICBzdGF0aWMg
Ym9vbCB3aWRnZXRDb3VudDsKCiAgICBRVmFsdWVMaXN0PFFUcmFuc2xhdG9yKj4gKnRyYW5zbGF0
b3JzOwoKICAgIFFTZXNzaW9uTWFuYWdlciAqc2Vzc2lvbl9tYW5hZ2VyOwogICAgUVN0cmluZyBz
ZXNzaW9uX2lkOwogICAgc3RhdGljIFFTdHJpbmcqIHNlc3Npb25fa2V5OwogICAgYm9vbCBpc19z
ZXNzaW9uX3Jlc3RvcmVkOwoKCiAgICBzdGF0aWMgdm9pZCB4MTFfaW5pdGlhbGl6ZV9zdHlsZSgp
OwoKCiAgICBzdGF0aWMgUVNpemUgYXBwX3N0cnV0OwoKICAgIHN0YXRpYyBRU3RyaW5nTGlzdCAq
YXBwX2xpYnBhdGhzOwoKICAgIHN0YXRpYyBRQXNjaWlEaWN0PFFQYWxldHRlPiAqYXBwX3BhbGV0
dGVzOwogICAgc3RhdGljIFFBc2NpaURpY3Q8UUZvbnQ+ICphcHBfZm9udHM7CgogICAgc3RhdGlj
IFFXaWRnZXRMaXN0ICpwb3B1cFdpZGdldHM7CiAgICBib29sIGluUG9wdXBNb2RlKCkgY29uc3Q7
CiAgICB2b2lkIGNsb3NlUG9wdXAoIFFXaWRnZXQgKnBvcHVwICk7CiAgICB2b2lkIG9wZW5Qb3B1
cCggUVdpZGdldCAqcG9wdXAgKTsKICAgIHZvaWQgc2V0QWN0aXZlV2luZG93KCBRV2lkZ2V0KiBh
Y3QgKTsKCiAgICBzdGF0aWMgYm9vbCBzZW5kU3BvbnRhbmVvdXNFdmVudCggUU9iamVjdCAqcmVj
ZWl2ZXIsIFFFdmVudCAqZXZlbnQgKTsKICAgIHN0YXRpYyB2b2lkIHJlbW92ZVBvc3RlZEV2ZW50
KCBRRXZlbnQgKiApOwoKICAgIGZyaWVuZCBjbGFzcyBRV2lkZ2V0OwogICAgZnJpZW5kIGNsYXNz
IFFFVFdpZGdldDsKICAgIGZyaWVuZCBjbGFzcyBRQWNjZWxNYW5hZ2VyOwogICAgZnJpZW5kIGNs
YXNzIFFFdmVudDsKICAgIGZyaWVuZCBjbGFzcyBRVHJhbnNsYXRvcjsKICAgIGZyaWVuZCBjbGFz
cyBRRXZlbnRMb29wOwogICAgZnJpZW5kIHZvaWQgcXRfdWNtX2luaXRpYWxpemUoIFFBcHBsaWNh
dGlvbiAqICk7CgoKCgoKCnByaXZhdGU6CgogICAgUUFwcGxpY2F0aW9uKCBjb25zdCBRQXBwbGlj
YXRpb24gJiApOwogICAgUUFwcGxpY2F0aW9uICZvcGVyYXRvcj0oIGNvbnN0IFFBcHBsaWNhdGlv
biAmICk7Cgp9OwoKaW5saW5lIGludCBRQXBwbGljYXRpb246OmFyZ2MoKSBjb25zdAp7CiAgICBy
ZXR1cm4gYXBwX2FyZ2M7Cn0KCmlubGluZSBjaGFyICoqUUFwcGxpY2F0aW9uOjphcmd2KCkgY29u
c3QKewogICAgcmV0dXJuIGFwcF9hcmd2Owp9CiMgNDIyICIuLi8uLi9pbmNsdWRlL3FhcHBsaWNh
dGlvbi5oIgppbmxpbmUgUUN1cnNvciAqUUFwcGxpY2F0aW9uOjpvdmVycmlkZUN1cnNvcigpCnsK
ICAgIHJldHVybiBhcHBfY3Vyc29yOwp9CgppbmxpbmUgYm9vbCBRQXBwbGljYXRpb246Omhhc0ds
b2JhbE1vdXNlVHJhY2tpbmcoKQp7CiAgICByZXR1cm4gYXBwX3RyYWNraW5nID4gMDsKfQoKaW5s
aW5lIFFXaWRnZXQgKlFBcHBsaWNhdGlvbjo6bWFpbldpZGdldCgpIGNvbnN0CnsKICAgIHJldHVy
biBtYWluX3dpZGdldDsKfQoKaW5saW5lIFFXaWRnZXQgKlFBcHBsaWNhdGlvbjo6Zm9jdXNXaWRn
ZXQoKSBjb25zdAp7CiAgICByZXR1cm4gZm9jdXNfd2lkZ2V0Owp9CgppbmxpbmUgUVdpZGdldCAq
UUFwcGxpY2F0aW9uOjphY3RpdmVXaW5kb3coKSBjb25zdAp7CiAgICByZXR1cm4gYWN0aXZlX3dp
bmRvdzsKfQoKaW5saW5lIFFXaWRnZXQgKlFBcHBsaWNhdGlvbjo6d2lkZ2V0QXQoIGNvbnN0IFFQ
b2ludCAmcCwgYm9vbCBjaGlsZCApCnsKICAgIHJldHVybiB3aWRnZXRBdCggcC54KCksIHAueSgp
LCBjaGlsZCApOwp9CgppbmxpbmUgYm9vbCBRQXBwbGljYXRpb246OmluUG9wdXBNb2RlKCkgY29u
c3QKewogICAgcmV0dXJuIHBvcHVwV2lkZ2V0cyAhPSAwOwp9CgppbmxpbmUgYm9vbCBRQXBwbGlj
YXRpb246OmlzU2Vzc2lvblJlc3RvcmVkKCkgY29uc3QKewogICAgcmV0dXJuIGlzX3Nlc3Npb25f
cmVzdG9yZWQ7Cn0KCmlubGluZSBRU3RyaW5nIFFBcHBsaWNhdGlvbjo6c2Vzc2lvbklkKCkgY29u
c3QKewogICAgcmV0dXJuIHNlc3Npb25faWQ7Cn0KCmlubGluZSBRU3RyaW5nIFFBcHBsaWNhdGlv
bjo6c2Vzc2lvbktleSgpIGNvbnN0CnsKICAgIHJldHVybiBzZXNzaW9uX2tleSA/ICpzZXNzaW9u
X2tleSA6IFFTdHJpbmc6Om51bGw7Cn0KCmlubGluZSBRU2l6ZSBRQXBwbGljYXRpb246Omdsb2Jh
bFN0cnV0KCkKewogICAgcmV0dXJuIGFwcF9zdHJ1dDsKfQoKaW5saW5lIGJvb2wgUUFwcGxpY2F0
aW9uOjpzZW5kRXZlbnQoIFFPYmplY3QgKnJlY2VpdmVyLCBRRXZlbnQgKmV2ZW50ICkKeyBpZiAo
IGV2ZW50ICkgZXZlbnQtPnNwb250ID0gRkFMU0U7IHJldHVybiBxQXBwID8gcUFwcC0+bm90aWZ5
KCByZWNlaXZlciwgZXZlbnQgKSA6IEZBTFNFOyB9CgppbmxpbmUgYm9vbCBRQXBwbGljYXRpb246
OnNlbmRTcG9udGFuZW91c0V2ZW50KCBRT2JqZWN0ICpyZWNlaXZlciwgUUV2ZW50ICpldmVudCAp
CnsgaWYgKCBldmVudCApIGV2ZW50LT5zcG9udCA9IFRSVUU7IHJldHVybiBxQXBwID8gcUFwcC0+
bm90aWZ5KCByZWNlaXZlciwgZXZlbnQgKSA6IEZBTFNFOyB9CiMgNDk3ICIuLi8uLi9pbmNsdWRl
L3FhcHBsaWNhdGlvbi5oIgppbmxpbmUgaW50IFFBcHBsaWNhdGlvbjo6aG9yaXpvbnRhbEFsaWdu
bWVudCggaW50IGFsaWduICkKewogICAgYWxpZ24gJj0gQWxpZ25Ib3Jpem9udGFsX01hc2s7CiAg
ICBpZiAoIGFsaWduID09IEFsaWduQXV0byApIHsKICAgICAgICBpZiAoIHJldmVyc2VMYXlvdXQo
KSApCiAgICAgICAgICAgIGFsaWduID0gQWxpZ25SaWdodDsKICAgICAgICBlbHNlCiAgICAgICAg
ICAgIGFsaWduID0gQWxpZ25MZWZ0OwogICAgfQogICAgcmV0dXJuIGFsaWduOwp9CiMgMjggImlu
ZGV4LmNwcCIgMgoKCgppbnQgVGVybUxpc3Q6OmNvbXBhcmVJdGVtcyggUVB0ckNvbGxlY3Rpb246
Okl0ZW0gaTEsIFFQdHJDb2xsZWN0aW9uOjpJdGVtIGkyICkKewogICAgaWYoICggKFRlcm0qKWkx
ICktPmZyZXF1ZW5jeSA9PSAoIChUZXJtKilpMiApLT5mcmVxdWVuY3kgKQogICAgICAgIHJldHVy
biAwOwogICAgaWYoICggKFRlcm0qKWkxICktPmZyZXF1ZW5jeSA8ICggKFRlcm0qKWkyICktPmZy
ZXF1ZW5jeSApCiAgICAgICAgcmV0dXJuIC0xOwogICAgcmV0dXJuIDE7Cn0KClFEYXRhU3RyZWFt
ICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmcywgRG9jdW1lbnQgJmwgKQp7CiAgICBzID4+IGwu
ZG9jTnVtYmVyOwogICAgcyA+PiBsLmZyZXF1ZW5jeTsKICAgIHJldHVybiBzOwp9CgpRRGF0YVN0
cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJnMsIGNvbnN0IERvY3VtZW50ICZsICkKewog
ICAgcyA8PCAoUV9JTlQxNilsLmRvY051bWJlcjsKICAgIHMgPDwgKFFfSU5UMTYpbC5mcmVxdWVu
Y3k7CiAgICByZXR1cm4gczsKfQoKSW5kZXg6OkluZGV4KCBjb25zdCBRU3RyaW5nICZkcCwgY29u
c3QgUVN0cmluZyAmaHAgKQogICAgOiBRT2JqZWN0KCAwLCAwICksIGRpY3QoIDg5OTkgKSwgZG9j
UGF0aCggZHAgKSwgaG9tZVBhdGgoIGhwICkKewogICAgYWxyZWFkeUhhdmVEb2NMaXN0ID0gRkFM
U0U7CiAgICBsYXN0V2luZG93Q2xvc2VkID0gRkFMU0U7CiAgICBjb25uZWN0KCBxQXBwLCAiMiIi
bGFzdFdpbmRvd0Nsb3NlZCgpIiwKICAgICAgICAgICAgIHRoaXMsICIxIiJzZXRMYXN0V2luQ2xv
c2VkKCkiICk7Cn0KCkluZGV4OjpJbmRleCggY29uc3QgUVN0cmluZ0xpc3QgJmRsLCBjb25zdCBR
U3RyaW5nICZocCApCiAgICA6IFFPYmplY3QoIDAsIDAgKSwgZGljdCggODk5OSApLCBob21lUGF0
aCggaHAgKQp7CiAgICBkb2NMaXN0ID0gZGw7CiAgICBhbHJlYWR5SGF2ZURvY0xpc3QgPSBUUlVF
OwogICAgbGFzdFdpbmRvd0Nsb3NlZCA9IEZBTFNFOwogICAgY29ubmVjdCggcUFwcCwgIjIiImxh
c3RXaW5kb3dDbG9zZWQoKSIsCiAgICAgICAgICAgICB0aGlzLCAiMSIic2V0TGFzdFdpbkNsb3Nl
ZCgpIiApOwp9Cgp2b2lkIEluZGV4OjpzZXRMYXN0V2luQ2xvc2VkKCkKewogICAgbGFzdFdpbmRv
d0Nsb3NlZCA9IFRSVUU7Cn0KCnZvaWQgSW5kZXg6OnNldERpY3Rpb25hcnlGaWxlKCBjb25zdCBR
U3RyaW5nICZmICkKewogICAgZGljdEZpbGUgPSBmOwp9Cgp2b2lkIEluZGV4OjpzZXREb2NMaXN0
RmlsZSggY29uc3QgUVN0cmluZyAmZiApCnsKICAgIGRvY0xpc3RGaWxlID0gZjsKfQoKaW50IElu
ZGV4OjptYWtlSW5kZXgoKQp7CiAgICBpZiAoICFhbHJlYWR5SGF2ZURvY0xpc3QgKQogICAgICAg
IHNldHVwRG9jdW1lbnRMaXN0KCk7CiAgICBpZiAoIGRvY0xpc3QuaXNFbXB0eSgpICkKICAgICAg
ICByZXR1cm4gMTsKICAgIFFTdHJpbmdMaXN0OjpJdGVyYXRvciBpdCA9IGRvY0xpc3QuYmVnaW4o
KTsKICAgIGludCBzdGVwcyA9IGRvY0xpc3QuY291bnQoKSAvIDEwMDsKICAgIGlmICggIXN0ZXBz
ICkKICAgICAgICBzdGVwcysrOwogICAgaW50IHByb2cgPSAwOwogICAgZm9yICggaW50IGkgPSAw
OyBpdCAhPSBkb2NMaXN0LmVuZCgpOyArK2l0LCArK2kgKSB7CiAgICAgICAgaWYgKCBsYXN0V2lu
ZG93Q2xvc2VkICkgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgICAgIHBh
cnNlRG9jdW1lbnQoICppdCwgaSApOwogICAgICAgIGlmICggaSVzdGVwcyA9PSAwICkgewogICAg
ICAgICAgICBwcm9nKys7CiAgICAgICAgICAgIGluZGV4aW5nUHJvZ3Jlc3MoIHByb2cgKTsKICAg
ICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQoKdm9pZCBJbmRleDo6c2V0dXBEb2N1bWVudExp
c3QoKQp7CiAgICBRRGlyIGQoIGRvY1BhdGggKTsKICAgIFFTdHJpbmdMaXN0IGxzdCA9IGQuZW50
cnlMaXN0KCAiKi5odG1sIiApOwogICAgUVN0cmluZ0xpc3Q6OkNvbnN0SXRlcmF0b3IgaXQgPSBs
c3QuYmVnaW4oKTsKICAgIGZvciAoIDsgaXQgIT0gbHN0LmVuZCgpOyArK2l0ICkKICAgICAgICBk
b2NMaXN0LmFwcGVuZCggZG9jUGF0aCArICIvIiArICppdCApOwp9Cgp2b2lkIEluZGV4OjppbnNl
cnRJbkRpY3QoIGNvbnN0IGNoYXIgKnN0ciwgaW50IGRvY051bSApCnsKICAgIGlmICggc3RyY21w
KCBzdHIsICJhbXAiICkgPT0gMCB8fCBzdHJjbXAoIHN0ciwgIm5ic3AiICkgPT0gMCApCiAgICAg
ICAgcmV0dXJuOwogICAgRW50cnkgKmUgPSAwOwogICAgaWYgKCBkaWN0LmNvdW50KCkgKQogICAg
ICAgIGUgPSBkaWN0WyBzdHIgXTsKCiAgICBpZiAoIGUgKSB7CiAgICAgICAgaWYgKCBlLT5kb2N1
bWVudHMuZmlyc3QoKS5kb2NOdW1iZXIgIT0gZG9jTnVtICkKICAgICAgICAgICAgZS0+ZG9jdW1l
bnRzLnByZXBlbmQoIERvY3VtZW50KCBkb2NOdW0sIDEgKSApOwogICAgICAgIGVsc2UKICAgICAg
ICAgICAgZS0+ZG9jdW1lbnRzLmZpcnN0KCkuZnJlcXVlbmN5Kys7CiAgICB9IGVsc2UgewogICAg
ICAgIGRpY3QuaW5zZXJ0KCBzdHIsIG5ldyBFbnRyeSggZG9jTnVtICkgKTsKICAgIH0KfQoKdm9p
ZCBJbmRleDo6cGFyc2VEb2N1bWVudCggY29uc3QgUVN0cmluZyAmZmlsZW5hbWUsIGludCBkb2NO
dW0gKQp7CiAgICBRRmlsZSBmaWxlKCBmaWxlbmFtZSApOwogICAgaWYgKCAhZmlsZS5vcGVuKCAw
eDAwMDEgKSApIHsKICAgICAgICBxV2FybmluZyggImNhbiBub3Qgb3BlbiBmaWxlICIgKyBmaWxl
bmFtZSApOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGJvb2wgdmFsaWQgPSBUUlVFOwogICAg
Y2hhciBzdHJbNjRdOwogICAgUUNoYXIgYyggZmlsZS5nZXRjaCgpICk7CiAgICBpbnQgaSA9IDA7
CiAgICB3aGlsZSAoICFmaWxlLmF0RW5kKCkgKSB7CiAgICAgICAgaWYgKCBjID09ICc8JyApIHsK
ICAgICAgICAgICAgdmFsaWQgPSBGQUxTRTsKICAgICAgICAgICAgc3RyW2ldID0gMDsKICAgICAg
ICAgICAgaWYgKCBpID4gMSApCiAgICAgICAgICAgICAgICBpbnNlcnRJbkRpY3QoIHN0ciwgZG9j
TnVtICk7CiAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICBjID0gZmlsZS5nZXRjaCgpOwog
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCBjID09ICc+JyAmJiAh
dmFsaWQgKSB7CiAgICAgICAgICAgIHZhbGlkID0gVFJVRTsKICAgICAgICAgICAgYyA9IGZpbGUu
Z2V0Y2goKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICggIXZh
bGlkICkgewogICAgICAgICAgICBjID0gZmlsZS5nZXRjaCgpOwogICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCBjLmlzTGV0dGVyT3JOdW1iZXIoKSAmJiBpIDwgNjMg
KSB7CiAgICAgICAgICAgIHN0cltpXSA9IGMubG93ZXIoKS5sYXRpbjEoKTsKICAgICAgICAgICAg
KytpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0cltpXSA9IDA7CiAgICAgICAgICAg
IGlmICggaSA+IDEgKQogICAgICAgICAgICAgICAgaW5zZXJ0SW5EaWN0KCBzdHIsIGRvY051bSAp
OwogICAgICAgICAgICBpID0gMDsKICAgICAgICB9CiAgICAgICAgYyA9IGZpbGUuZ2V0Y2goKTsK
ICAgIH0KICAgIGlmICggaSA+IDEgKQogICAgICAgIGluc2VydEluRGljdCggc3RyLCBkb2NOdW0g
KTsKICAgIGZpbGUuY2xvc2UoKTsKfQoKdm9pZCBJbmRleDo6d3JpdGVEaWN0KCkKewogICAgUUFz
Y2lpRGljdEl0ZXJhdG9yPEVudHJ5PiBpdCggZGljdCApOwogICAgUUZpbGUgZiggZGljdEZpbGUg
KTsKICAgIGlmICggIWYub3BlbiggMHgwMDAyICkgKQogICAgICAgIHJldHVybjsKICAgIFFEYXRh
U3RyZWFtIHMoICZmICk7CiAgICBmb3IoIDsgaXQuY3VycmVudCgpOyArK2l0ICkgewogICAgICAg
IEVudHJ5ICplID0gaXQuY3VycmVudCgpOwogICAgICAgIHMgPDwgaXQuY3VycmVudEtleSgpOwog
ICAgICAgIHMgPDwgZS0+ZG9jdW1lbnRzOwogICAgfQogICAgZi5jbG9zZSgpOwogICAgd3JpdGVE
b2N1bWVudExpc3QoKTsKfQoKdm9pZCBJbmRleDo6d3JpdGVEb2N1bWVudExpc3QoKQp7CiAgICBR
RmlsZSBmKCBkb2NMaXN0RmlsZSApOwogICAgaWYgKCAhZi5vcGVuKCAweDAwMDIgKSApCiAgICAg
ICAgcmV0dXJuOwogICAgUURhdGFTdHJlYW0gcyggJmYgKTsKICAgIHMgPDwgZG9jTGlzdDsKfQoK
dm9pZCBJbmRleDo6cmVhZERpY3QoKQp7CiAgICBRRmlsZSBmKCBkaWN0RmlsZSApOwogICAgaWYg
KCAhZi5vcGVuKCAweDAwMDEgKSApCiAgICAgICAgcmV0dXJuOwoKICAgIGRpY3QuY2xlYXIoKTsK
ICAgIFFEYXRhU3RyZWFtIHMoICZmICk7CiAgICBjaGFyICprZXk7CiAgICBRVmFsdWVMaXN0PERv
Y3VtZW50PiBkb2NzOwogICAgd2hpbGUgKCAhcy5hdEVuZCgpICkgewogICAgICAgIHMgPj4ga2V5
OwogICAgICAgIHMgPj4gZG9jczsKICAgICAgICBkaWN0Lmluc2VydCgga2V5LCBuZXcgRW50cnko
IGRvY3MgKSApOwogICAgfQogICAgZi5jbG9zZSgpOwogICAgcmVhZERvY3VtZW50TGlzdCgpOwp9
Cgp2b2lkIEluZGV4OjpyZWFkRG9jdW1lbnRMaXN0KCkKewogICAgUUZpbGUgZiggZG9jTGlzdEZp
bGUgKTsKICAgIGlmICggIWYub3BlbiggMHgwMDAxICkgKQogICAgICAgIHJldHVybjsKICAgIFFE
YXRhU3RyZWFtIHMoICZmICk7CiAgICBzID4+IGRvY0xpc3Q7Cn0KClFTdHJpbmdMaXN0IEluZGV4
OjpxdWVyeSggY29uc3QgUVN0cmluZ0xpc3QgJnRlcm1zLCBjb25zdCBRU3RyaW5nTGlzdCAmdGVy
bVNlcSwgY29uc3QgUVN0cmluZ0xpc3QgJnNlcVdvcmRzICkKewogICAgVGVybUxpc3QgdGVybUxp
c3Q7CgogICAgUVN0cmluZ0xpc3Q6OkNvbnN0SXRlcmF0b3IgaXQgPSB0ZXJtcy5iZWdpbigpOwog
ICAgZm9yICggaXQgPSB0ZXJtcy5iZWdpbigpOyBpdCAhPSB0ZXJtcy5lbmQoKTsgKytpdCApIHsK
ICAgICAgICBFbnRyeSAqZSA9IDA7CiAgICAgICAgaWYgKCAoKml0KS5jb250YWlucyggJyonICkg
KSB7CiAgICAgICAgICAgIFFWYWx1ZUxpc3Q8RG9jdW1lbnQ+IHdjdHMgPSBzZXR1cER1bW15VGVy
bSggZ2V0V2lsZGNhcmRUZXJtcyggKml0ICkgKTsKICAgICAgICAgICAgdGVybUxpc3QuYXBwZW5k
KCBuZXcgVGVybSggImR1bW15Iiwgd2N0cy5jb3VudCgpLCB3Y3RzICkgKTsKICAgICAgICB9IGVs
c2UgaWYgKCBkaWN0WyAoKml0KS5sYXRpbjEoKSBdICkgewogICAgICAgICAgICBlID0gZGljdFsg
KCppdCkubGF0aW4xKCkgXTsKICAgICAgICAgICAgdGVybUxpc3QuYXBwZW5kKCBuZXcgVGVybSgg
KCppdCkubGF0aW4xKCksIGUtPmRvY3VtZW50cy5jb3VudCgpLCBlLT5kb2N1bWVudHMgKSApOwog
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBRU3RyaW5nTGlzdCgpOwogICAgICAg
IH0KICAgIH0KICAgIHRlcm1MaXN0LnNvcnQoKTsKCiAgICBUZXJtICptaW5UZXJtID0gdGVybUxp
c3QuZmlyc3QoKTsKICAgIGlmICggIXRlcm1MaXN0LmNvdW50KCkgKQogICAgICAgIHJldHVybiBR
U3RyaW5nTGlzdCgpOwogICAgdGVybUxpc3QucmVtb3ZlRmlyc3QoKTsKCiAgICBRVmFsdWVMaXN0
PERvY3VtZW50PiBtaW5Eb2NzID0gbWluVGVybS0+ZG9jdW1lbnRzOwogICAgUVZhbHVlTGlzdDxE
b2N1bWVudD46Oml0ZXJhdG9yIEM7CiAgICBRVmFsdWVMaXN0PERvY3VtZW50Pjo6Q29uc3RJdGVy
YXRvciBJdDsKICAgIFRlcm0gKnQgPSB0ZXJtTGlzdC5maXJzdCgpOwogICAgZm9yICggOyB0OyB0
ID0gdGVybUxpc3QubmV4dCgpICkgewogICAgICAgIFFWYWx1ZUxpc3Q8RG9jdW1lbnQ+IGRvY3Mg
PSB0LT5kb2N1bWVudHM7CiAgICAgICAgQyA9IG1pbkRvY3MuYmVnaW4oKTsKICAgICAgICB3aGls
ZSAoIEMgIT0gbWluRG9jcy5lbmQoKSApIHsKICAgICAgICAgICAgYm9vbCBmb3VuZCA9IEZBTFNF
OwogICAgICAgICAgICBmb3IgKCBJdCA9IGRvY3MuYmVnaW4oKTsgSXQgIT0gZG9jcy5lbmQoKTsg
KytJdCApIHsKICAgICAgICAgICAgICAgIGlmICggKCpDKS5kb2NOdW1iZXIgPT0gKCpJdCkuZG9j
TnVtYmVyICkgewogICAgICAgICAgICAgICAgICAgICgqQykuZnJlcXVlbmN5ICs9ICgqSXQpLmZy
ZXF1ZW5jeTsKICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRSVUU7CiAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAg
aWYgKCAhZm91bmQgKQogICAgICAgICAgICAgICAgQyA9IG1pbkRvY3MucmVtb3ZlKCBDICk7CiAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICsrQzsKICAgICAgICB9CiAgICB9CgogICAg
UVN0cmluZ0xpc3QgcmVzdWx0czsKICAgIHFIZWFwU29ydCggbWluRG9jcyApOwogICAgaWYgKCB0
ZXJtU2VxLmlzRW1wdHkoKSApIHsKICAgICAgICBmb3IgKCBDID0gbWluRG9jcy5iZWdpbigpOyBD
ICE9IG1pbkRvY3MuZW5kKCk7ICsrQyApCiAgICAgICAgICAgIHJlc3VsdHMgPDwgZG9jTGlzdFsg
KGludCkoKkMpLmRvY051bWJlciBdOwogICAgICAgIHJldHVybiByZXN1bHRzOwogICAgfQoKICAg
IFFTdHJpbmcgZmlsZU5hbWU7CiAgICBmb3IgKCBDID0gbWluRG9jcy5iZWdpbigpOyBDICE9IG1p
bkRvY3MuZW5kKCk7ICsrQyApIHsKICAgICAgICBmaWxlTmFtZSA9IGRvY0xpc3RbIChpbnQpKCpD
KS5kb2NOdW1iZXIgXTsKICAgICAgICBpZiAoIHNlYXJjaEZvclBhdHRlcm4oIHRlcm1TZXEsIHNl
cVdvcmRzLCBmaWxlTmFtZSApICkKICAgICAgICAgICAgcmVzdWx0cyA8PCBmaWxlTmFtZTsKICAg
IH0KICAgIHJldHVybiByZXN1bHRzOwp9CgpRU3RyaW5nIEluZGV4OjpnZXREb2N1bWVudFRpdGxl
KCBjb25zdCBRU3RyaW5nICZmaWxlTmFtZSApCnsKICAgIFFGaWxlIGZpbGUoIGZpbGVOYW1lICk7
CiAgICBpZiAoICFmaWxlLm9wZW4oIDB4MDAwMSApICkgewogICAgICAgIHFXYXJuaW5nKCAiY2Fu
bm90IG9wZW4gZmlsZSAiICsgZmlsZU5hbWUgKTsKICAgICAgICByZXR1cm4gZmlsZU5hbWU7CiAg
ICB9CiAgICBRQ2hhciBjKCBmaWxlLmdldGNoKCkgKTsKICAgIGludCBpID0gMDsKICAgIGNvbnN0
IGNoYXIgKnRhZyA9ICI8dGl0bGU+IjsKICAgIGNoYXIgdGl0bGVbMjU2XTsKICAgIGJvb2wgZm91
bmQgPSBGQUxTRTsKICAgIHdoaWxlICggIWZpbGUuYXRFbmQoKSApIHsKICAgICAgICBpID0gMDsK
ICAgICAgICBpZiAoIGMubG93ZXIoKS5sYXRpbjEoKSA9PSB0YWdbaV0gKSB7CiAgICAgICAgICAg
IGZvdW5kID0gVFJVRTsKICAgICAgICAgICAgZm9yKCBpID0gMTsgaSA8IDc7ICsraSApIHsKICAg
ICAgICAgICAgICAgIGMgPSBmaWxlLmdldGNoKCk7CiAgICAgICAgICAgICAgICBpZiAoIGZpbGUu
YXRFbmQoKSApCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVOYW1lOwogICAgICAgICAg
ICAgICAgaWYgKCBjLmxvd2VyKCkubGF0aW4xKCkgIT0gdGFnW2ldICkgewogICAgICAgICAgICAg
ICAgICAgIGZvdW5kID0gRkFMU0U7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCBmb3VuZCApIHsK
ICAgICAgICAgICAgYyA9IGZpbGUuZ2V0Y2goKTsKICAgICAgICAgICAgaW50IGkgPSAwOwogICAg
ICAgICAgICB3aGlsZSAoICggIWZpbGUuYXRFbmQoKSApICYmICggYyAhPSAnPCcgKSApIHsKICAg
ICAgICAgICAgICAgIHRpdGxlWyBpIF0gPSBjOwogICAgICAgICAgICAgICAgKytpOwogICAgICAg
ICAgICAgICAgYyA9IGZpbGUuZ2V0Y2goKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aXRs
ZVsgaSBdID0gMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGMgPSBmaWxl
LmdldGNoKCk7CiAgICB9CiAgICByZXR1cm4gUVN0cmluZyggdGl0bGUgKTsKfQoKUVN0cmluZ0xp
c3QgSW5kZXg6OmdldFdpbGRjYXJkVGVybXMoIGNvbnN0IFFTdHJpbmcgJnRlcm0gKQp7CiAgICBR
U3RyaW5nTGlzdCBsc3Q7CiAgICBRVmFsdWVMaXN0PFFDU3RyaW5nPiB0ZXJtcyA9IHNwbGl0KCB0
ZXJtICk7CiAgICBRVmFsdWVMaXN0PFFDU3RyaW5nPjo6aXRlcmF0b3IgaXRlcjsKCiAgICBRQXNj
aWlEaWN0SXRlcmF0b3I8RW50cnk+IGl0KCBkaWN0ICk7CiAgICBmb3IoIDsgaXQuY3VycmVudCgp
OyArK2l0ICkgewogICAgICAgIGludCBpbmRleCA9IDA7CiAgICAgICAgYm9vbCBmb3VuZCA9IEZB
TFNFOwogICAgICAgIFFDU3RyaW5nIHRleHQoIGl0LmN1cnJlbnRLZXkoKSApOwogICAgICAgIGZv
ciAoIGl0ZXIgPSB0ZXJtcy5iZWdpbigpOyBpdGVyICE9IHRlcm1zLmVuZCgpOyArK2l0ZXIgKSB7
CiAgICAgICAgICAgIGlmICggKml0ZXIgPT0gIioiICkgewogICAgICAgICAgICAgICAgZm91bmQg
PSBUUlVFOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgaWYgKCBpdGVyID09IHRlcm1zLmJlZ2luKCkgJiYgKCppdGVyKVswXSAhPSB0ZXh0WzBdICkg
ewogICAgICAgICAgICAgICAgZm91bmQgPSBGQUxTRTsKICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICB9CiAgICAgICAgICAgIGluZGV4ID0gdGV4dC5maW5kKCAqaXRlciwgaW5kZXgg
KTsKICAgICAgICAgICAgaWYgKCAqaXRlciA9PSB0ZXJtcy5sYXN0KCkgJiYgaW5kZXggIT0gKGlu
dCl0ZXh0Lmxlbmd0aCgpLTEgKSB7CiAgICAgICAgICAgICAgICBpbmRleCA9IHRleHQuZmluZFJl
diggKml0ZXIgKTsKICAgICAgICAgICAgICAgIGlmICggaW5kZXggIT0gKGludCl0ZXh0Lmxlbmd0
aCgpIC0gKGludCkoKml0ZXIpLmxlbmd0aCgpICkgewogICAgICAgICAgICAgICAgICAgIGZvdW5k
ID0gRkFMU0U7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCBpbmRleCAhPSAtMSApIHsKICAgICAgICAgICAg
ICAgIGZvdW5kID0gVFJVRTsKICAgICAgICAgICAgICAgIGluZGV4ICs9ICgqaXRlcikubGVuZ3Ro
KCk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgIGZvdW5kID0gRkFMU0U7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIGZvdW5kICkKICAgICAgICAgICAgbHN0IDw8IHRl
eHQ7CiAgICB9CgogICAgcmV0dXJuIGxzdDsKfQoKUVZhbHVlTGlzdDxRQ1N0cmluZz4gSW5kZXg6
OnNwbGl0KCBjb25zdCBRU3RyaW5nICZzICkKewogICAgUVZhbHVlTGlzdDxRQ1N0cmluZz4gbHN0
OwogICAgaW50IGogPSAwOwogICAgUUNTdHJpbmcgc3RyID0gcy5sYXRpbjEoKTsKICAgIGludCBp
ID0gc3RyLmZpbmQoICcqJywgaiApOwoKICAgIHdoaWxlICggaSAhPSAtMSApIHsKICAgICAgICBp
ZiAoIGkgPiBqICYmIGkgPD0gKGludClzdHIubGVuZ3RoKCkgKSB7CiAgICAgICAgICAgIGxzdCA8
PCBzdHIubWlkKCBqLCBpIC0gaiApOwogICAgICAgICAgICBsc3QgPDwgIioiOwogICAgICAgIH0K
ICAgICAgICBqID0gaSArIDE7CiAgICAgICAgaSA9IHN0ci5maW5kKCAnKicsIGogKTsKICAgIH0K
CiAgICBpbnQgbCA9IHN0ci5sZW5ndGgoKSAtIDE7CiAgICBpZiAoIHN0ci5taWQoIGosIGwgLSBq
ICsgMSApLmxlbmd0aCgpID4gMCApCiAgICAgICAgbHN0IDw8IHN0ci5taWQoIGosIGwgLSBqICsg
MSApOwoKICAgIHJldHVybiBsc3Q7Cn0KClFWYWx1ZUxpc3Q8RG9jdW1lbnQ+IEluZGV4OjpzZXR1
cER1bW15VGVybSggY29uc3QgUVN0cmluZ0xpc3QgJnRlcm1zICkKewogICAgVGVybUxpc3QgdGVy
bUxpc3Q7CiAgICBRU3RyaW5nTGlzdDo6Q29uc3RJdGVyYXRvciBpdCA9IHRlcm1zLmJlZ2luKCk7
CiAgICBmb3IgKCA7IGl0ICE9IHRlcm1zLmVuZCgpOyArK2l0ICkgewogICAgICAgIEVudHJ5ICpl
ID0gMDsKICAgICAgICBpZiAoIGRpY3RbICgqaXQpLmxhdGluMSgpIF0gKSB7CiAgICAgICAgICAg
IGUgPSBkaWN0WyAoKml0KS5sYXRpbjEoKSBdOwogICAgICAgICAgICB0ZXJtTGlzdC5hcHBlbmQo
IG5ldyBUZXJtKCAoKml0KS5sYXRpbjEoKSwgZS0+ZG9jdW1lbnRzLmNvdW50KCksIGUtPmRvY3Vt
ZW50cyApICk7CiAgICAgICAgfQogICAgfQogICAgdGVybUxpc3Quc29ydCgpOwoKICAgIFFWYWx1
ZUxpc3Q8RG9jdW1lbnQ+IG1heExpc3Q7CgogICAgaWYgKCAhdGVybUxpc3QuY291bnQoKSApCiAg
ICAgICAgcmV0dXJuIG1heExpc3Q7CiAgICBtYXhMaXN0ID0gdGVybUxpc3QubGFzdCgpLT5kb2N1
bWVudHM7CiAgICB0ZXJtTGlzdC5yZW1vdmVMYXN0KCk7CgogICAgUVZhbHVlTGlzdDxEb2N1bWVu
dD46Oml0ZXJhdG9yIGRvY0l0OwogICAgVGVybSAqdCA9IHRlcm1MaXN0LmZpcnN0KCk7CiAgICB3
aGlsZSAoIHQgKSB7CiAgICAgICAgUVZhbHVlTGlzdDxEb2N1bWVudD4gZG9jcyA9IHQtPmRvY3Vt
ZW50czsKICAgICAgICBmb3IgKCBkb2NJdCA9IGRvY3MuYmVnaW4oKTsgZG9jSXQgIT0gZG9jcy5l
bmQoKTsgKytkb2NJdCApIHsKICAgICAgICAgICAgaWYgKCBtYXhMaXN0LmZpbmRJbmRleCggKmRv
Y0l0ICkgPT0gLTEgKQogICAgICAgICAgICAgICAgbWF4TGlzdC5hcHBlbmQoICpkb2NJdCApOwog
ICAgICAgIH0KICAgICAgICB0ID0gdGVybUxpc3QubmV4dCgpOwogICAgfQogICAgcmV0dXJuIG1h
eExpc3Q7Cn0KCnZvaWQgSW5kZXg6OmJ1aWxkTWluaURpY3QoIGNvbnN0IGNoYXIgKnN0ciApCnsK
ICAgIGlmICggbWluaURpY3RbIHN0ciBdICkKICAgICAgICBtaW5pRGljdFsgc3RyIF0tPnBvc2l0
aW9ucy5hcHBlbmQoIHdvcmROdW0gKTsKICAgICsrd29yZE51bTsKfQoKYm9vbCBJbmRleDo6c2Vh
cmNoRm9yUGF0dGVybiggY29uc3QgUVN0cmluZ0xpc3QgJnBhdHRlcm5zLCBjb25zdCBRU3RyaW5n
TGlzdCAmd29yZHMsIGNvbnN0IFFTdHJpbmcgJmZpbGVOYW1lICkKewogICAgUUZpbGUgZmlsZSgg
ZmlsZU5hbWUgKTsKICAgIGlmICggIWZpbGUub3BlbiggMHgwMDAxICkgKSB7CiAgICAgICAgcVdh
cm5pbmcoICJjYW5ub3Qgb3BlbiBmaWxlICIgKyBmaWxlTmFtZSApOwogICAgICAgIHJldHVybiBG
QUxTRTsKICAgIH0KCiAgICB3b3JkTnVtID0gMzsKICAgIG1pbmlEaWN0LmNsZWFyKCk7CiAgICBR
U3RyaW5nTGlzdDo6Q29uc3RJdGVyYXRvciBjSXQgPSB3b3Jkcy5iZWdpbigpOwogICAgZm9yICgg
OyBjSXQgIT0gd29yZHMuZW5kKCk7ICsrY0l0ICkKICAgICAgICBtaW5pRGljdC5pbnNlcnQoICgq
Y0l0KS5sYXRpbjEoKSwgbmV3IFBvc0VudHJ5KCAwICkgKTsKCiAgICBib29sIHZhbGlkID0gVFJV
RTsKICAgIGNoYXIgc3RyWzY0XTsKICAgIFFDaGFyIGMoIGZpbGUuZ2V0Y2goKSApOwogICAgaW50
IGkgPSAwOwogICAgd2hpbGUgKCAhZmlsZS5hdEVuZCgpICkgewogICAgICAgIGlmICggYyA9PSAn
PCcgfHwgYyA9PSAnJicgKSB7CiAgICAgICAgICAgIHZhbGlkID0gRkFMU0U7CiAgICAgICAgICAg
IHN0cltpXSA9IDA7CiAgICAgICAgICAgIGlmICggaSA+IDEgKQogICAgICAgICAgICAgICAgYnVp
bGRNaW5pRGljdCggc3RyICk7CiAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICBjID0gZmls
ZS5nZXRjaCgpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCAo
IGMgPT0gJz4nIHx8IGMgPT0gJzsnICkgJiYgIXZhbGlkICkgewogICAgICAgICAgICB2YWxpZCA9
IFRSVUU7CiAgICAgICAgICAgIGMgPSBmaWxlLmdldGNoKCk7CiAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgIH0KICAgICAgICBpZiAoICF2YWxpZCApIHsKICAgICAgICAgICAgYyA9IGZpbGUu
Z2V0Y2goKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICggYy5p
c0xldHRlck9yTnVtYmVyKCkgJiYgaSA8IDYzICkgewogICAgICAgICAgICBzdHJbaV0gPSBjLmxv
d2VyKCkubGF0aW4xKCk7CiAgICAgICAgICAgICsraTsKICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICBzdHJbaV0gPSAwOwogICAgICAgICAgICBpZiAoIGkgPiAxICkKICAgICAgICAgICAgICAg
IGJ1aWxkTWluaURpY3QoIHN0ciApOwogICAgICAgICAgICBpID0gMDsKICAgICAgICB9CiAgICAg
ICAgYyA9IGZpbGUuZ2V0Y2goKTsKICAgIH0KICAgIGlmICggaSA+IDEgKQogICAgICAgIGJ1aWxk
TWluaURpY3QoIHN0ciApOwogICAgZmlsZS5jbG9zZSgpOwoKICAgIFFTdHJpbmdMaXN0OjpDb25z
dEl0ZXJhdG9yIHBhdEl0ID0gcGF0dGVybnMuYmVnaW4oKTsKICAgIFFTdHJpbmdMaXN0IHdvcmRM
c3Q7CiAgICBRVmFsdWVMaXN0PHVpbnQ+IGEsIGI7CiAgICBRVmFsdWVMaXN0PHVpbnQ+OjppdGVy
YXRvciBhSXQ7CiAgICBmb3IgKCA7IHBhdEl0ICE9IHBhdHRlcm5zLmVuZCgpOyArK3BhdEl0ICkg
ewogICAgICAgIHdvcmRMc3QgPSBRU3RyaW5nTGlzdDo6c3BsaXQoICcgJywgKnBhdEl0ICk7CiAg
ICAgICAgYSA9IG1pbmlEaWN0WyB3b3JkTHN0WzBdLmxhdGluMSgpIF0tPnBvc2l0aW9uczsKICAg
ICAgICBmb3IgKCBpbnQgaiA9IDE7IGogPCAoaW50KXdvcmRMc3QuY291bnQoKTsgKytqICkgewog
ICAgICAgICAgICBiID0gbWluaURpY3RbIHdvcmRMc3Rbal0ubGF0aW4xKCkgXS0+cG9zaXRpb25z
OwogICAgICAgICAgICBhSXQgPSBhLmJlZ2luKCk7CiAgICAgICAgICAgIHdoaWxlICggYUl0ICE9
IGEuZW5kKCkgKSB7CiAgICAgICAgICAgICAgICBpZiAoIGIuZmluZCggKmFJdCArIDEgKSAhPSBi
LmVuZCgpICkgewogICAgICAgICAgICAgICAgICAgICgqYUl0KSsrOwogICAgICAgICAgICAgICAg
ICAgICsrYUl0OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBh
SXQgPSBhLnJlbW92ZSggYUl0ICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICB9CiAgICBpZiAoIGEuY291bnQoKSApCiAgICAgICAgcmV0dXJuIFRSVUU7CiAg
ICByZXR1cm4gRkFMU0U7Cn0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGluZGV4LnMAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNjQwADAwMDA3MDYAMDAwMDE2MgAwMDAwMDEz
NzUxNAAwNzYxNDMwMzYzNAAwMTE0MTAAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAdXN0YXIgIABzYm91cmppAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1ieAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACS5maWxlCSJpbmRleC5jcHAi
Cgkuc2VjdGlvbgkiLnRleHQiCgkuYWxpZ24gNAoJLnR5cGUJX1oxOF9fZXhjaGFuZ2VfYW5kX2Fk
ZFBWaWksICNmdW5jdGlvbgoJLnByb2MJMDQKX1oxOF9fZXhjaGFuZ2VfYW5kX2FkZFBWaWk6Ci5M
TEZCMzM5OgoJISNQUk9MT0dVRSMgMAoJISNQUk9MT0dVRSMgMQoJc2V0aGkJJWhpKF9aTjE2X19B
dG9taWNpdHlfbG9ja0lMaTBFRTE3X1NfYXRvbWljaXR5X2xvY2tFKSwgJW81CglvcgklbzUsICVs
byhfWk4xNl9fQXRvbWljaXR5X2xvY2tJTGkwRUUxN19TX2F0b21pY2l0eV9sb2NrRSksICVvNQoJ
MToJbGRzdHViCVslbzVdLCAlZzEKCQljbXAJJWcxLCAwCgkJYm5lCTFiCgkJIG5vcAoJbGQJWyVv
MF0sICVvNAoJbGQJWyVvMF0sICVnMQoJYWRkCSVnMSwgJW8xLCAlZzEKCXN0CSVnMSwgWyVvMF0K
CXN0YgklZzAsIFslbzVdCglyZXRsCgltb3YJJW80LCAlbzAKLkxMRkUzMzk6Cgkuc2l6ZQlfWjE4
X19leGNoYW5nZV9hbmRfYWRkUFZpaSwgLi1fWjE4X19leGNoYW5nZV9hbmRfYWRkUFZpaQoJLmFs
aWduIDQKCS50eXBlCV9aMTJfX2F0b21pY19hZGRQVmlpLCAjZnVuY3Rpb24KCS5wcm9jCTAyMApf
WjEyX19hdG9taWNfYWRkUFZpaToKLkxMRkIzNDE6CgkhI1BST0xPR1VFIyAwCgkhI1BST0xPR1VF
IyAxCglzZXRoaQklaGkoX1pOMTZfX0F0b21pY2l0eV9sb2NrSUxpMEVFMTdfU19hdG9taWNpdHlf
bG9ja0UpLCAlbzUKCW9yCSVvNSwgJWxvKF9aTjE2X19BdG9taWNpdHlfbG9ja0lMaTBFRTE3X1Nf
YXRvbWljaXR5X2xvY2tFKSwgJW81CgkxOglsZHN0dWIJWyVvNV0sICVvNAoJCWNtcAklbzQsIDAK
CQlibmUJMWIKCQkgbm9wCglsZAlbJW8wXSwgJWcxCglhZGQJJWcxLCAlbzEsICVnMQoJc3QJJWcx
LCBbJW8wXQoJc3RiCSVnMCwgWyVvNV0KCW5vcAoJcmV0bAoJbm9wCi5MTEZFMzQxOgoJLnNpemUJ
X1oxMl9fYXRvbWljX2FkZFBWaWksIC4tX1oxMl9fYXRvbWljX2FkZFBWaWkKCS5hbGlnbiA0Cgku
Z2xvYmFsIF9aTjhUZXJtTGlzdDEyY29tcGFyZUl0ZW1zRVB2UzBfCgkudHlwZQlfWk44VGVybUxp
c3QxMmNvbXBhcmVJdGVtc0VQdlMwXywgI2Z1bmN0aW9uCgkucHJvYwkwNApfWk44VGVybUxpc3Qx
MmNvbXBhcmVJdGVtc0VQdlMwXzoKLkxMRkIzMDg1OgoJISNQUk9MT0dVRSMgMAoJISNQUk9MT0dV
RSMgMQoJbGQJWyVvMSs0XSwgJW81CglsZAlbJW8yKzRdLCAlZzEKCWNtcAklbzUsICVnMQoJYmUJ
LkxMMwoJbW92CTAsICVvMAoJY21wCSVvNSwgJWcxCglibAkuTEwzCgltb3YJLTEsICVvMAoJbW92
CTEsICVvMAouTEwzOgoJbm9wCglyZXRsCglub3AKLkxMRkUzMDg1OgoJLnNpemUJX1pOOFRlcm1M
aXN0MTJjb21wYXJlSXRlbXNFUHZTMF8sIC4tX1pOOFRlcm1MaXN0MTJjb21wYXJlSXRlbXNFUHZT
MF8KCS5hbGlnbiA0CgkuZ2xvYmFsIF9acnNSMTFRRGF0YVN0cmVhbVI4RG9jdW1lbnQKCS50eXBl
CV9acnNSMTFRRGF0YVN0cmVhbVI4RG9jdW1lbnQsICNmdW5jdGlvbgoJLnByb2MJMDExMApfWnJz
UjExUURhdGFTdHJlYW1SOERvY3VtZW50OgouTExGQjMwODc6CgkhI1BST0xPR1VFIyAwCglzYXZl
CSVzcCwgLTExMiwgJXNwCi5MTENGSTA6CgkhI1BST0xPR1VFIyAxCgltb3YJJWkxLCAlbzEKCWNh
bGwJX1pOMTFRRGF0YVN0cmVhbXJzRVJzLCAwCgltb3YJJWkwLCAlbzAKCWFkZAklaTEsIDIsICVp
MQoJbW92CSVpMCwgJW8wCgljYWxsCV9aTjExUURhdGFTdHJlYW1yc0VScywgMAoJbW92CSVpMSwg
JW8xCglub3AKCXJldAoJcmVzdG9yZQouTExGRTMwODc6Cgkuc2l6ZQlfWnJzUjExUURhdGFTdHJl
YW1SOERvY3VtZW50LCAuLV9acnNSMTFRRGF0YVN0cmVhbVI4RG9jdW1lbnQKCS5hbGlnbiA0Cgku
Z2xvYmFsIF9abHNSMTFRRGF0YVN0cmVhbVJLOERvY3VtZW50CgkudHlwZQlfWmxzUjExUURhdGFT
dHJlYW1SSzhEb2N1bWVudCwgI2Z1bmN0aW9uCgkucHJvYwkwMTEwCl9abHNSMTFRRGF0YVN0cmVh
bVJLOERvY3VtZW50OgouTExGQjMwODk6CgkhI1BST0xPR1VFIyAwCglzYXZlCSVzcCwgLTExMiwg
JXNwCi5MTENGSTE6CgkhI1BST0xPR1VFIyAxCglsZHNoCVslaTFdLCAlbzEKCWNhbGwJX1pOMTFR
RGF0YVN0cmVhbWxzRXMsIDAKCW1vdgklaTAsICVvMAoJbGRzaAlbJWkxKzJdLCAlbzEKCWNhbGwJ
X1pOMTFRRGF0YVN0cmVhbWxzRXMsIDAKCW1vdgklaTAsICVvMAoJbm9wCglyZXQKCXJlc3RvcmUK
LkxMRkUzMDg5OgoJLnNpemUJX1psc1IxMVFEYXRhU3RyZWFtUks4RG9jdW1lbnQsIC4tX1psc1Ix
MVFEYXRhU3RyZWFtUks4RG9jdW1lbnQKCS5nbG9iYWwgX1Vud2luZF9SZXN1bWUKCS5zZWN0aW9u
CSIucm9kYXRhIgoJLmFsaWduIDgKLkxMQzA6CgkuYXNjaXoJIjJsYXN0V2luZG93Q2xvc2VkKCki
CgkuYWxpZ24gOAouTExDMToKCS5hc2NpegkiMXNldExhc3RXaW5DbG9zZWQoKSIKCS5zZWN0aW9u
CSIudGV4dCIKCS5hbGlnbiA0CgkuZ2xvYmFsIF9aTjVJbmRleEMyRVJLN1FTdHJpbmdTMl8KCS50
eXBlCV9aTjVJbmRleEMyRVJLN1FTdHJpbmdTMl8sICNmdW5jdGlvbgoJLnByb2MJMDIwCl9aTjVJ
bmRleEMyRVJLN1FTdHJpbmdTMl86Ci5MTEZCMzExODoKCSEjUFJPTE9HVUUjIDAKCXNhdmUJJXNw
LCAtMTEyLCAlc3AKLkxMQ0ZJMjoKCSEjUFJPTE9HVUUjIDEKCW1vdgklaTAsICVvMAoJbW92CTAs
ICVvMQouTExFSEIwOgoJY2FsbAlfWk43UU9iamVjdEMyRVBTX1BLYywgMAoJbW92CTAsICVvMgou
TExFSEUwOgoJc2V0aGkJJWhpKF9aVFY1SW5kZXgrOCksICVnMQoJbW92CSVpMCwgJWwxCglvcgkl
ZzEsICVsbyhfWlRWNUluZGV4KzgpLCAlZzEKCWFkZAklaTAsIDQwLCAlaTMKCXN0CSVnMSwgWyVp
MF0KLkxMRUhCMToKCWNhbGwJX1pud2osIDAKCW1vdgkxMiwgJW8wCi5MTEVIRTE6Ci5MTEVIQjI6
CgljYWxsCV9aTjE3UVZhbHVlTGlzdFByaXZhdGVJN1FTdHJpbmdFQzFFdiwgMAoJbW92CSVvMCwg
JWwwCi5MTEVIRTI6Ci5MTDE2OgouTEwyNjoKCXN0CSVsMCwgWyVpM10KCXNldGhpCSVoaSg4MTky
KSwgJW8xCglhZGQJJWkwLCA0NCwgJWwwCglvcgklbzEsIDgwNywgJW8xCgltb3YJJWwwLCAlbzAK
CW1vdgkxLCAlbzIKCW1vdgkxLCAlbzMKLkxMRUhCMzoKCWNhbGwJX1pONlFHRGljdEMyRWpOU183
S2V5VHlwZUViYiwgMAoJbW92CTEsICVvNAouTExFSEUzOgouTEwyOToKLkxMMzE6CglzZXRoaQkl
aGkoX1pUVjEwUUFzY2lpRGljdElONUluZGV4NUVudHJ5RUUrOCksICVsMwoJYWRkCSVpMCwgNzIs
ICVsMgoJb3IJJWwzLCAlbG8oX1pUVjEwUUFzY2lpRGljdElONUluZGV4NUVudHJ5RUUrOCksICVn
MQoJbW92CSVsMiwgJW8wCglzdAklZzEsIFslaTArNDRdCgltb3YJMTcsICVvMQoJbW92CTEsICVv
MgoJbW92CTEsICVvMwouTExFSEI0OgoJY2FsbAlfWk42UUdEaWN0QzJFak5TXzdLZXlUeXBlRWJi
LCAwCgltb3YJMSwgJW80Ci5MTEVIRTQ6Ci5MTDM0OgouTEwzNjoKCXNldGhpCSVoaShfWlRWMTBR
QXNjaWlEaWN0SU41SW5kZXg4UG9zRW50cnlFRSs4KSwgJWw0Cgltb3YJJWkxLCAlbzEKCW9yCSVs
NCwgJWxvKF9aVFYxMFFBc2NpaURpY3RJTjVJbmRleDhQb3NFbnRyeUVFKzgpLCAlZzEKCWFkZAkl
aTAsIDEwNCwgJW8wCi5MTEVIQjU6CgljYWxsCV9aTjdRU3RyaW5nQzFFUktTXywgMAoJc3QJJWcx
LCBbJWkwKzcyXQouTExFSEU1OgoJbW92CSVpMiwgJW8xCi5MTEVIQjY6CgljYWxsCV9aTjdRU3Ry
aW5nQzFFUktTXywgMAoJYWRkCSVpMCwgMTA4LCAlbzAKLkxMRUhFNjoKCXNldGhpCSVoaShfWk43
UVN0cmluZzExc2hhcmVkX251bGxFKSwgJWw1CglsZAlbJWw1KyVsbyhfWk43UVN0cmluZzExc2hh
cmVkX251bGxFKV0sICVvMAoJY21wCSVvMCwgMAoJYmUJLkxMMTU2Cglub3AKCWxkCVslbzBdLCAl
ZzEKLkxMMTU3OgoJbGQJWyVsNSslbG8oX1pON1FTdHJpbmcxMXNoYXJlZF9udWxsRSldLCAlbzQK
CWFkZAklZzEsIDEsICVnMQoJc3QJJW8wLCBbJWwxKzExMl0KCWNtcAklbzQsIDAKCWJuZQkuTEw0
MgoJc3QJJWcxLCBbJW8wXQouTExFSEI3OgoJY2FsbAlfWk43UVN0cmluZzE0bWFrZVNoYXJlZE51
bGxFdiwgMAoJIG5vcAouTExFSEU3OgoJbW92CSVvMCwgJW80Ci5MTDQyOgoJbGQJWyVvNF0sICVn
MQoJc2V0aGkJJWhpKHFBcHApLCAlbzUKCWxkCVslbzUrJWxvKHFBcHApXSwgJW8wCglhZGQJJWcx
LCAxLCAlZzEKCXNldGhpCSVoaSguTExDMCksICVvMQoJc2V0aGkJJWhpKC5MTEMxKSwgJW8zCglz
dAklZzEsIFslbzRdCglzdAklbzQsIFslbDErMTE2XQoJc3RiCSVnMCwgWyVsMSsxMjBdCglzdGIJ
JWcwLCBbJWwxKzEyMV0KCW9yCSVvMSwgJWxvKC5MTEMwKSwgJW8xCglvcgklbzMsICVsbyguTExD
MSksICVvMwouTExFSEI4OgoJY2FsbAlfWk43UU9iamVjdDdjb25uZWN0RVBLU19QS2NTMV9TM18s
IDAKCW1vdgklbDEsICVvMgouTExFSEU4OgoJYixhCS5MTDgKLkxMMTU2OgouTExFSEI5OgoJY2Fs
bAlfWk43UVN0cmluZzE0bWFrZVNoYXJlZE51bGxFdiwgMAoJIG5vcAouTExFSEU5OgoJYgkuTEwx
NTcKCWxkCVslbzBdLCAlZzEKLkxMMTUxOgouTEw5OgouTEwxMzoKCW1vdgklbDAsICVvMAouTEwx
NTQ6CgljYWxsCV9aZGxQdiwgMAoJIG5vcAouTEwxMzg6Ci5MTDE0MDoKCWNhbGwJX1pON1FPYmpl
Y3REMkV2LCAwCgltb3YJJWwxLCAlbzAKLkxMRUhCMTA6CgljYWxsCV9VbndpbmRfUmVzdW1lLCAw
Cgltb3YJJWkwLCAlbzAKLkxMRUhFMTA6Ci5MTDE0NDoKLkxMNDU6CglsZAlbJWwxKzExNl0sICVv
MAoJbGQJWyVvMF0sICVnMQoJYWRkCSVnMSwgLTEsICVnMQoJY21wCSVnMSwgMAoJYm5lCS5MTDU1
CglzdAklZzEsIFslbzBdCglsZAlbJWw1KyVsbyhfWk43UVN0cmluZzExc2hhcmVkX251bGxFKV0s
ICVnMQoJY21wCSVvMCwgJWcxCgliZSxhCS5MTDE1OAoJbGQJWyVsMSsxMTJdLCAlbzAKLkxMNTM6
CgljYWxsCV9aTjExUVN0cmluZ0RhdGExMGRlbGV0ZVNlbGZFdiwgMAoJIG5vcAouTEw1NToKCWxk
CVslbDErMTEyXSwgJW8wCi5MTDE1ODoKCWxkCVslbzBdLCAlZzEKCWFkZAklZzEsIC0xLCAlZzEK
CWNtcAklZzEsIDAKCWJuZQkuTEw2NQoJc3QJJWcxLCBbJW8wXQoJbGQJWyVsNSslbG8oX1pON1FT
dHJpbmcxMXNoYXJlZF9udWxsRSldLCAlZzEKCWNtcAklbzAsICVnMQoJYmUsYQkuTEwxNTkKCWxk
CVslbDErMTA4XSwgJW8wCi5MTDYzOgoJY2FsbAlfWk4xMVFTdHJpbmdEYXRhMTBkZWxldGVTZWxm
RXYsIDAKCSBub3AKLkxMNjU6CglsZAlbJWwxKzEwOF0sICVvMAouTEwxNTk6CglsZAlbJW8wXSwg
JWcxCglhZGQJJWcxLCAtMSwgJWcxCgljbXAJJWcxLCAwCglibmUJLkxMNzUKCXN0CSVnMSwgWyVv
MF0KCWxkCVslbDUrJWxvKF9aTjdRU3RyaW5nMTFzaGFyZWRfbnVsbEUpXSwgJWcxCgljbXAJJW8w
LCAlZzEKCWJlLGEJLkxMMTYwCglsZAlbJWwxKzEwNF0sICVvMAouTEw3MzoKCWNhbGwJX1pOMTFR
U3RyaW5nRGF0YTEwZGVsZXRlU2VsZkV2LCAwCgkgbm9wCi5MTDc1OgoJbGQJWyVsMSsxMDRdLCAl
bzAKLkxMMTYwOgoJbGQJWyVvMF0sICVnMQoJYWRkCSVnMSwgLTEsICVnMQoJY21wCSVnMSwgMAoJ
Ym5lCS5MTDg1CglzdAklZzEsIFslbzBdCglzZXRoaQklaGkoX1pON1FTdHJpbmcxMXNoYXJlZF9u
dWxsRSksICVnMQoJbGQJWyVnMSslbG8oX1pON1FTdHJpbmcxMXNoYXJlZF9udWxsRSldLCAlbzUK
CWNtcAklbzAsICVvNQoJYmUJLkxMMTYxCglvcgklbDQsICVsbyhfWlRWMTBRQXNjaWlEaWN0SU41
SW5kZXg4UG9zRW50cnlFRSs4KSwgJWcxCi5MTDgzOgoJY2FsbAlfWk4xMVFTdHJpbmdEYXRhMTBk
ZWxldGVTZWxmRXYsIDAKCSBub3AKLkxMODU6CglvcgklbDQsICVsbyhfWlRWMTBRQXNjaWlEaWN0
SU41SW5kZXg4UG9zRW50cnlFRSs4KSwgJWcxCi5MTDE2MToKCW1vdgklbDIsICVvMAouTExFSEIx
MToKCWNhbGwJX1pONlFHRGljdDVjbGVhckV2LCAwCglzdAklZzEsIFslbDErNzJdCi5MTEVIRTEx
OgoJY2FsbAlfWk42UUdEaWN0RDJFdiwgMAoJbW92CSVsMiwgJW8wCi5MTDk4OgoJb3IJJWwzLCAl
bG8oX1pUVjEwUUFzY2lpRGljdElONUluZGV4NUVudHJ5RUUrOCksICVnMQouTEwxNjI6Cgltb3YJ
JWwwLCAlbzAKLkxMRUhCMTI6CgljYWxsCV9aTjZRR0RpY3Q1Y2xlYXJFdiwgMAoJc3QJJWcxLCBb
JWwxKzQ0XQouTExFSEUxMjoKCWNhbGwJX1pONlFHRGljdEQyRXYsIDAKCW1vdgklbDAsICVvMAou
TEwxMTE6Ci5MTDExNDoKLkxMMTI0OgoJbGQJWyVsMSs0MF0sICVpMwouTEwxNjM6CglsZAlbJWkz
XSwgJWcxCglhZGQJJWcxLCAtMSwgJWcxCgljbXAJJWcxLCAwCglibmUJLkxMMTM4CglzdAklZzEs
IFslaTNdCi5MTDEzNjoKCWNhbGwJX1pOMTdRVmFsdWVMaXN0UHJpdmF0ZUk3UVN0cmluZ0VEMUV2
LCAwCgltb3YJJWkzLCAlbzAKCWIJLkxMMTU0Cgltb3YJJWkzLCAlbzAKLkxMMTQ1OgoJYgkuTEwx
NTgKCWxkCVslbDErMTEyXSwgJW8wCi5MTDE0NjoKCWIJLkxMMTU5CglsZAlbJWwxKzEwOF0sICVv
MAouTEwxNDc6CgliCS5MTDE2MAoJbGQJWyVsMSsxMDRdLCAlbzAKLkxMMTQ4OgoJYgkuTEwxNjEK
CW9yCSVsNCwgJWxvKF9aVFYxMFFBc2NpaURpY3RJTjVJbmRleDhQb3NFbnRyeUVFKzgpLCAlZzEK
LkxMMTQzOgouTEw4OToKLkxMOTE6Ci5MTDk2OgoJbW92CSVsMiwgJW8wCi5MTDE1NToKCWNhbGwJ
X1pONlFHRGljdEQyRXYsIDAKCSBub3AKCWNhbGwJX1pTdDl0ZXJtaW5hdGV2LCAwCgkgbm9wCi5M
TDE0OToKCWIJLkxMMTYyCglvcgklbDMsICVsbyhfWlRWMTBRQXNjaWlEaWN0SU41SW5kZXg1RW50
cnlFRSs4KSwgJWcxCi5MTDE0MjoKLkxMMTAyOgouTEwxMDQ6Ci5MTDEwOToKCWIJLkxMMTU1Cglt
b3YJJWwwLCAlbzAKLkxMMTUwOgoJYgkuTEwxNjMKCWxkCVslbDErNDBdLCAlaTMKLkxMMTUyOgoJ
YixhCS5MTDEzOAouTEw4OgoJbm9wCglyZXQKCXJlc3RvcmUKLkxMRkUzMTE4OgoJLnNpemUJX1pO
NUluZGV4QzJFUks3UVN0cmluZ1MyXywgLi1fWk41SW5kZXhDMkVSSzdRU3RyaW5nUzJfCgkuc2Vj
dGlvbgkiLmdjY19leGNlcHRfdGFibGUiLCNhbGxvYywjd3JpdGUKLkxMTFNEQTMxMTg6CgkuYnl0
ZQkweGZmCgkuYnl0ZQkweGZmCgkuYnl0ZQkweDMKCS5ieXRlCTB4YTksMHgxCgkudWF3b3JkCS5M
TEVIQjAtLkxMRkIzMTE4CgkudWF3b3JkCS5MTEVIRTAtLkxMRUhCMAoJLnVhd29yZAkweDAKCS5i
eXRlCTB4MAoJLnVhd29yZAkuTExFSEIxLS5MTEZCMzExOAoJLnVhd29yZAkuTExFSEUxLS5MTEVI
QjEKCS51YXdvcmQJLkxMMTUyLS5MTEZCMzExOAoJLmJ5dGUJMHgwCgkudWF3b3JkCS5MTEVIQjIt
LkxMRkIzMTE4CgkudWF3b3JkCS5MTEVIRTItLkxMRUhCMgoJLnVhd29yZAkuTEwxNTEtLkxMRkIz
MTE4CgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhCMy0uTExGQjMxMTgKCS51YXdvcmQJLkxMRUhF
My0uTExFSEIzCgkudWF3b3JkCS5MTDE1MC0uTExGQjMxMTgKCS5ieXRlCTB4MAoJLnVhd29yZAku
TExFSEI0LS5MTEZCMzExOAoJLnVhd29yZAkuTExFSEU0LS5MTEVIQjQKCS51YXdvcmQJLkxMMTQ5
LS5MTEZCMzExOAoJLmJ5dGUJMHgwCgkudWF3b3JkCS5MTEVIQjUtLkxMRkIzMTE4CgkudWF3b3Jk
CS5MTEVIRTUtLkxMRUhCNQoJLnVhd29yZAkuTEwxNDgtLkxMRkIzMTE4CgkuYnl0ZQkweDAKCS51
YXdvcmQJLkxMRUhCNi0uTExGQjMxMTgKCS51YXdvcmQJLkxMRUhFNi0uTExFSEI2CgkudWF3b3Jk
CS5MTDE0Ny0uTExGQjMxMTgKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEI3LS5MTEZCMzExOAoJ
LnVhd29yZAkuTExFSEU3LS5MTEVIQjcKCS51YXdvcmQJLkxMMTQ1LS5MTEZCMzExOAoJLmJ5dGUJ
MHgwCgkudWF3b3JkCS5MTEVIQjgtLkxMRkIzMTE4CgkudWF3b3JkCS5MTEVIRTgtLkxMRUhCOAoJ
LnVhd29yZAkuTEwxNDQtLkxMRkIzMTE4CgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhCOS0uTExG
QjMxMTgKCS51YXdvcmQJLkxMRUhFOS0uTExFSEI5CgkudWF3b3JkCS5MTDE0Ni0uTExGQjMxMTgK
CS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEIxMC0uTExGQjMxMTgKCS51YXdvcmQJLkxMRUhFMTAt
LkxMRUhCMTAKCS51YXdvcmQJMHgwCgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhCMTEtLkxMRkIz
MTE4CgkudWF3b3JkCS5MTEVIRTExLS5MTEVIQjExCgkudWF3b3JkCS5MTDE0My0uTExGQjMxMTgK
CS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEIxMi0uTExGQjMxMTgKCS51YXdvcmQJLkxMRUhFMTIt
LkxMRUhCMTIKCS51YXdvcmQJLkxMMTQyLS5MTEZCMzExOAoJLmJ5dGUJMHgwCgkuc2VjdGlvbgki
LnRleHQiCgkuYWxpZ24gNAoJLmdsb2JhbCBfWk41SW5kZXhDMUVSSzdRU3RyaW5nUzJfCgkudHlw
ZQlfWk41SW5kZXhDMUVSSzdRU3RyaW5nUzJfLCAjZnVuY3Rpb24KCS5wcm9jCTAyMApfWk41SW5k
ZXhDMUVSSzdRU3RyaW5nUzJfOgouTExGQjMxMjA6CgkhI1BST0xPR1VFIyAwCglzYXZlCSVzcCwg
LTExMiwgJXNwCi5MTENGSTM6CgkhI1BST0xPR1VFIyAxCgltb3YJJWkwLCAlbzAKCW1vdgkwLCAl
bzEKLkxMRUhCMTM6CgljYWxsCV9aTjdRT2JqZWN0QzJFUFNfUEtjLCAwCgltb3YJMCwgJW8yCi5M
TEVIRTEzOgoJc2V0aGkJJWhpKF9aVFY1SW5kZXgrOCksICVnMQoJbW92CSVpMCwgJWwxCglvcgkl
ZzEsICVsbyhfWlRWNUluZGV4KzgpLCAlZzEKCWFkZAklaTAsIDQwLCAlaTMKCXN0CSVnMSwgWyVp
MF0KLkxMRUhCMTQ6CgljYWxsCV9abndqLCAwCgltb3YJMTIsICVvMAouTExFSEUxNDoKLkxMRUhC
MTU6CgljYWxsCV9aTjE3UVZhbHVlTGlzdFByaXZhdGVJN1FTdHJpbmdFQzFFdiwgMAoJbW92CSVv
MCwgJWwwCi5MTEVIRTE1OgouTEwxNzI6Ci5MTDE4MjoKCXN0CSVsMCwgWyVpM10KCXNldGhpCSVo
aSg4MTkyKSwgJW8xCglhZGQJJWkwLCA0NCwgJWwwCglvcgklbzEsIDgwNywgJW8xCgltb3YJJWww
LCAlbzAKCW1vdgkxLCAlbzIKCW1vdgkxLCAlbzMKLkxMRUhCMTY6CgljYWxsCV9aTjZRR0RpY3RD
MkVqTlNfN0tleVR5cGVFYmIsIDAKCW1vdgkxLCAlbzQKLkxMRUhFMTY6Ci5MTDE4NToKLkxMMTg3
OgoJc2V0aGkJJWhpKF9aVFYxMFFBc2NpaURpY3RJTjVJbmRleDVFbnRyeUVFKzgpLCAlbDMKCWFk
ZAklaTAsIDcyLCAlbDIKCW9yCSVsMywgJWxvKF9aVFYxMFFBc2NpaURpY3RJTjVJbmRleDVFbnRy
eUVFKzgpLCAlZzEKCW1vdgklbDIsICVvMAoJc3QJJWcxLCBbJWkwKzQ0XQoJbW92CTE3LCAlbzEK
CW1vdgkxLCAlbzIKCW1vdgkxLCAlbzMKLkxMRUhCMTc6CgljYWxsCV9aTjZRR0RpY3RDMkVqTlNf
N0tleVR5cGVFYmIsIDAKCW1vdgkxLCAlbzQKLkxMRUhFMTc6Ci5MTDE5MDoKLkxMMTkyOgoJc2V0
aGkJJWhpKF9aVFYxMFFBc2NpaURpY3RJTjVJbmRleDhQb3NFbnRyeUVFKzgpLCAlbDQKCW1vdgkl
aTEsICVvMQoJb3IJJWw0LCAlbG8oX1pUVjEwUUFzY2lpRGljdElONUluZGV4OFBvc0VudHJ5RUUr
OCksICVnMQoJYWRkCSVpMCwgMTA0LCAlbzAKLkxMRUhCMTg6CgljYWxsCV9aTjdRU3RyaW5nQzFF
UktTXywgMAoJc3QJJWcxLCBbJWkwKzcyXQouTExFSEUxODoKCW1vdgklaTIsICVvMQouTExFSEIx
OToKCWNhbGwJX1pON1FTdHJpbmdDMUVSS1NfLCAwCglhZGQJJWkwLCAxMDgsICVvMAouTExFSEUx
OToKCXNldGhpCSVoaShfWk43UVN0cmluZzExc2hhcmVkX251bGxFKSwgJWw1CglsZAlbJWw1KyVs
byhfWk43UVN0cmluZzExc2hhcmVkX251bGxFKV0sICVvMAoJY21wCSVvMCwgMAoJYmUJLkxMMzEy
Cglub3AKCWxkCVslbzBdLCAlZzEKLkxMMzEzOgoJbGQJWyVsNSslbG8oX1pON1FTdHJpbmcxMXNo
YXJlZF9udWxsRSldLCAlbzQKCWFkZAklZzEsIDEsICVnMQoJc3QJJW8wLCBbJWwxKzExMl0KCWNt
cAklbzQsIDAKCWJuZQkuTEwxOTgKCXN0CSVnMSwgWyVvMF0KLkxMRUhCMjA6CgljYWxsCV9aTjdR
U3RyaW5nMTRtYWtlU2hhcmVkTnVsbEV2LCAwCgkgbm9wCi5MTEVIRTIwOgoJbW92CSVvMCwgJW80
Ci5MTDE5ODoKCWxkCVslbzRdLCAlZzEKCXNldGhpCSVoaShxQXBwKSwgJW81CglsZAlbJW81KyVs
byhxQXBwKV0sICVvMAoJYWRkCSVnMSwgMSwgJWcxCglzZXRoaQklaGkoLkxMQzApLCAlbzEKCXNl
dGhpCSVoaSguTExDMSksICVvMwoJc3QJJWcxLCBbJW80XQoJc3QJJW80LCBbJWwxKzExNl0KCXN0
YgklZzAsIFslbDErMTIwXQoJc3RiCSVnMCwgWyVsMSsxMjFdCglvcgklbzEsICVsbyguTExDMCks
ICVvMQoJb3IJJW8zLCAlbG8oLkxMQzEpLCAlbzMKLkxMRUhCMjE6CgljYWxsCV9aTjdRT2JqZWN0
N2Nvbm5lY3RFUEtTX1BLY1MxX1MzXywgMAoJbW92CSVsMSwgJW8yCi5MTEVIRTIxOgoJYixhCS5M
TDE2NAouTEwzMTI6Ci5MTEVIQjIyOgoJY2FsbAlfWk43UVN0cmluZzE0bWFrZVNoYXJlZE51bGxF
diwgMAoJIG5vcAouTExFSEUyMjoKCWIJLkxMMzEzCglsZAlbJW8wXSwgJWcxCi5MTDMwNzoKLkxM
MTY1OgouTEwxNjk6Cgltb3YJJWwwLCAlbzAKLkxMMzEwOgoJY2FsbAlfWmRsUHYsIDAKCSBub3AK
LkxMMjk0OgouTEwyOTY6CgljYWxsCV9aTjdRT2JqZWN0RDJFdiwgMAoJbW92CSVsMSwgJW8wCi5M
TEVIQjIzOgoJY2FsbAlfVW53aW5kX1Jlc3VtZSwgMAoJbW92CSVpMCwgJW8wCi5MTEVIRTIzOgou
TEwzMDA6Ci5MTDIwMToKCWxkCVslbDErMTE2XSwgJW8wCglsZAlbJW8wXSwgJWcxCglhZGQJJWcx
LCAtMSwgJWcxCgljbXAJJWcxLCAwCglibmUJLkxMMjExCglzdAklZzEsIFslbzBdCglsZAlbJWw1
KyVsbyhfWk43UVN0cmluZzExc2hhcmVkX251bGxFKV0sICVnMQoJY21wCSVvMCwgJWcxCgliZSxh
CS5MTDMxNAoJbGQJWyVsMSsxMTJdLCAlbzAKLkxMMjA5OgoJY2FsbAlfWk4xMVFTdHJpbmdEYXRh
MTBkZWxldGVTZWxmRXYsIDAKCSBub3AKLkxMMjExOgoJbGQJWyVsMSsxMTJdLCAlbzAKLkxMMzE0
OgoJbGQJWyVvMF0sICVnMQoJYWRkCSVnMSwgLTEsICVnMQoJY21wCSVnMSwgMAoJYm5lCS5MTDIy
MQoJc3QJJWcxLCBbJW8wXQoJbGQJWyVsNSslbG8oX1pON1FTdHJpbmcxMXNoYXJlZF9udWxsRSld
LCAlZzEKCWNtcAklbzAsICVnMQoJYmUsYQkuTEwzMTUKCWxkCVslbDErMTA4XSwgJW8wCi5MTDIx
OToKCWNhbGwJX1pOMTFRU3RyaW5nRGF0YTEwZGVsZXRlU2VsZkV2LCAwCgkgbm9wCi5MTDIyMToK
CWxkCVslbDErMTA4XSwgJW8wCi5MTDMxNToKCWxkCVslbzBdLCAlZzEKCWFkZAklZzEsIC0xLCAl
ZzEKCWNtcAklZzEsIDAKCWJuZQkuTEwyMzEKCXN0CSVnMSwgWyVvMF0KCWxkCVslbDUrJWxvKF9a
TjdRU3RyaW5nMTFzaGFyZWRfbnVsbEUpXSwgJWcxCgljbXAJJW8wLCAlZzEKCWJlLGEJLkxMMzE2
CglsZAlbJWwxKzEwNF0sICVvMAouTEwyMjk6CgljYWxsCV9aTjExUVN0cmluZ0RhdGExMGRlbGV0
ZVNlbGZFdiwgMAoJIG5vcAouTEwyMzE6CglsZAlbJWwxKzEwNF0sICVvMAouTEwzMTY6CglsZAlb
JW8wXSwgJWcxCglhZGQJJWcxLCAtMSwgJWcxCgljbXAJJWcxLCAwCglibmUJLkxMMjQxCglzdAkl
ZzEsIFslbzBdCglzZXRoaQklaGkoX1pON1FTdHJpbmcxMXNoYXJlZF9udWxsRSksICVnMQoJbGQJ
WyVnMSslbG8oX1pON1FTdHJpbmcxMXNoYXJlZF9udWxsRSldLCAlbzUKCWNtcAklbzAsICVvNQoJ
YmUJLkxMMzE3CglvcgklbDQsICVsbyhfWlRWMTBRQXNjaWlEaWN0SU41SW5kZXg4UG9zRW50cnlF
RSs4KSwgJWcxCi5MTDIzOToKCWNhbGwJX1pOMTFRU3RyaW5nRGF0YTEwZGVsZXRlU2VsZkV2LCAw
Cgkgbm9wCi5MTDI0MToKCW9yCSVsNCwgJWxvKF9aVFYxMFFBc2NpaURpY3RJTjVJbmRleDhQb3NF
bnRyeUVFKzgpLCAlZzEKLkxMMzE3OgoJbW92CSVsMiwgJW8wCi5MTEVIQjI0OgoJY2FsbAlfWk42
UUdEaWN0NWNsZWFyRXYsIDAKCXN0CSVnMSwgWyVsMSs3Ml0KLkxMRUhFMjQ6CgljYWxsCV9aTjZR
R0RpY3REMkV2LCAwCgltb3YJJWwyLCAlbzAKLkxMMjU0OgoJb3IJJWwzLCAlbG8oX1pUVjEwUUFz
Y2lpRGljdElONUluZGV4NUVudHJ5RUUrOCksICVnMQouTEwzMTg6Cgltb3YJJWwwLCAlbzAKLkxM
RUhCMjU6CgljYWxsCV9aTjZRR0RpY3Q1Y2xlYXJFdiwgMAoJc3QJJWcxLCBbJWwxKzQ0XQouTExF
SEUyNToKCWNhbGwJX1pONlFHRGljdEQyRXYsIDAKCW1vdgklbDAsICVvMAouTEwyNjc6Ci5MTDI3
MDoKLkxMMjgwOgoJbGQJWyVsMSs0MF0sICVpMwouTEwzMTk6CglsZAlbJWkzXSwgJWcxCglhZGQJ
JWcxLCAtMSwgJWcxCgljbXAJJWcxLCAwCglibmUJLkxMMjk0CglzdAklZzEsIFslaTNdCi5MTDI5
MjoKCWNhbGwJX1pOMTdRVmFsdWVMaXN0UHJpdmF0ZUk3UVN0cmluZ0VEMUV2LCAwCgltb3YJJWkz
LCAlbzAKCWIJLkxMMzEwCgltb3YJJWkzLCAlbzAKLkxMMzAxOgoJYgkuTEwzMTQKCWxkCVslbDEr
MTEyXSwgJW8wCi5MTDMwMjoKCWIJLkxMMzE1CglsZAlbJWwxKzEwOF0sICVvMAouTEwzMDM6Cgli
CS5MTDMxNgoJbGQJWyVsMSsxMDRdLCAlbzAKLkxMMzA0OgoJYgkuTEwzMTcKCW9yCSVsNCwgJWxv
KF9aVFYxMFFBc2NpaURpY3RJTjVJbmRleDhQb3NFbnRyeUVFKzgpLCAlZzEKLkxMMjk5OgouTEwy
NDU6Ci5MTDI0NzoKLkxMMjUyOgoJbW92CSVsMiwgJW8wCi5MTDMxMToKCWNhbGwJX1pONlFHRGlj
dEQyRXYsIDAKCSBub3AKCWNhbGwJX1pTdDl0ZXJtaW5hdGV2LCAwCgkgbm9wCi5MTDMwNToKCWIJ
LkxMMzE4CglvcgklbDMsICVsbyhfWlRWMTBRQXNjaWlEaWN0SU41SW5kZXg1RW50cnlFRSs4KSwg
JWcxCi5MTDI5ODoKLkxMMjU4OgouTEwyNjA6Ci5MTDI2NToKCWIJLkxMMzExCgltb3YJJWwwLCAl
bzAKLkxMMzA2OgoJYgkuTEwzMTkKCWxkCVslbDErNDBdLCAlaTMKLkxMMzA4OgoJYixhCS5MTDI5
NAouTEwxNjQ6Cglub3AKCXJldAoJcmVzdG9yZQouTExGRTMxMjA6Cgkuc2l6ZQlfWk41SW5kZXhD
MUVSSzdRU3RyaW5nUzJfLCAuLV9aTjVJbmRleEMxRVJLN1FTdHJpbmdTMl8KCS5zZWN0aW9uCSIu
Z2NjX2V4Y2VwdF90YWJsZSIsI2FsbG9jLCN3cml0ZQouTExMU0RBMzEyMDoKCS5ieXRlCTB4ZmYK
CS5ieXRlCTB4ZmYKCS5ieXRlCTB4MwoJLmJ5dGUJMHhhOSwweDEKCS51YXdvcmQJLkxMRUhCMTMt
LkxMRkIzMTIwCgkudWF3b3JkCS5MTEVIRTEzLS5MTEVIQjEzCgkudWF3b3JkCTB4MAoJLmJ5dGUJ
MHgwCgkudWF3b3JkCS5MTEVIQjE0LS5MTEZCMzEyMAoJLnVhd29yZAkuTExFSEUxNC0uTExFSEIx
NAoJLnVhd29yZAkuTEwzMDgtLkxMRkIzMTIwCgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhCMTUt
LkxMRkIzMTIwCgkudWF3b3JkCS5MTEVIRTE1LS5MTEVIQjE1CgkudWF3b3JkCS5MTDMwNy0uTExG
QjMxMjAKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEIxNi0uTExGQjMxMjAKCS51YXdvcmQJLkxM
RUhFMTYtLkxMRUhCMTYKCS51YXdvcmQJLkxMMzA2LS5MTEZCMzEyMAoJLmJ5dGUJMHgwCgkudWF3
b3JkCS5MTEVIQjE3LS5MTEZCMzEyMAoJLnVhd29yZAkuTExFSEUxNy0uTExFSEIxNwoJLnVhd29y
ZAkuTEwzMDUtLkxMRkIzMTIwCgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhCMTgtLkxMRkIzMTIw
CgkudWF3b3JkCS5MTEVIRTE4LS5MTEVIQjE4CgkudWF3b3JkCS5MTDMwNC0uTExGQjMxMjAKCS5i
eXRlCTB4MAoJLnVhd29yZAkuTExFSEIxOS0uTExGQjMxMjAKCS51YXdvcmQJLkxMRUhFMTktLkxM
RUhCMTkKCS51YXdvcmQJLkxMMzAzLS5MTEZCMzEyMAoJLmJ5dGUJMHgwCgkudWF3b3JkCS5MTEVI
QjIwLS5MTEZCMzEyMAoJLnVhd29yZAkuTExFSEUyMC0uTExFSEIyMAoJLnVhd29yZAkuTEwzMDEt
LkxMRkIzMTIwCgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhCMjEtLkxMRkIzMTIwCgkudWF3b3Jk
CS5MTEVIRTIxLS5MTEVIQjIxCgkudWF3b3JkCS5MTDMwMC0uTExGQjMxMjAKCS5ieXRlCTB4MAoJ
LnVhd29yZAkuTExFSEIyMi0uTExGQjMxMjAKCS51YXdvcmQJLkxMRUhFMjItLkxMRUhCMjIKCS51
YXdvcmQJLkxMMzAyLS5MTEZCMzEyMAoJLmJ5dGUJMHgwCgkudWF3b3JkCS5MTEVIQjIzLS5MTEZC
MzEyMAoJLnVhd29yZAkuTExFSEUyMy0uTExFSEIyMwoJLnVhd29yZAkweDAKCS5ieXRlCTB4MAoJ
LnVhd29yZAkuTExFSEIyNC0uTExGQjMxMjAKCS51YXdvcmQJLkxMRUhFMjQtLkxMRUhCMjQKCS51
YXdvcmQJLkxMMjk5LS5MTEZCMzEyMAoJLmJ5dGUJMHgwCgkudWF3b3JkCS5MTEVIQjI1LS5MTEZC
MzEyMAoJLnVhd29yZAkuTExFSEUyNS0uTExFSEIyNQoJLnVhd29yZAkuTEwyOTgtLkxMRkIzMTIw
CgkuYnl0ZQkweDAKCS5zZWN0aW9uCSIudGV4dCIKCS5hbGlnbiA0CgkuZ2xvYmFsIF9aTjVJbmRl
eEMyRVJLMTFRU3RyaW5nTGlzdFJLN1FTdHJpbmcKCS50eXBlCV9aTjVJbmRleEMyRVJLMTFRU3Ry
aW5nTGlzdFJLN1FTdHJpbmcsICNmdW5jdGlvbgoJLnByb2MJMDIwCl9aTjVJbmRleEMyRVJLMTFR
U3RyaW5nTGlzdFJLN1FTdHJpbmc6Ci5MTEZCMzEyNToKCSEjUFJPTE9HVUUjIDAKCXNhdmUJJXNw
LCAtMTEyLCAlc3AKLkxMQ0ZJNDoKCSEjUFJPTE9HVUUjIDEKCW1vdgklaTAsICVvMAoJbW92CTAs
ICVvMQouTExFSEIyNjoKCWNhbGwJX1pON1FPYmplY3RDMkVQU19QS2MsIDAKCW1vdgkwLCAlbzIK
LkxMRUhFMjY6CglzZXRoaQklaGkoX1pUVjVJbmRleCs4KSwgJWcxCgltb3YJJWkwLCAlbDEKCW9y
CSVnMSwgJWxvKF9aVFY1SW5kZXgrOCksICVnMQoJYWRkCSVpMCwgNDAsICVpMwoJc3QJJWcxLCBb
JWkwXQouTExFSEIyNzoKCWNhbGwJX1pud2osIDAKCW1vdgkxMiwgJW8wCi5MTEVIRTI3OgouTExF
SEIyODoKCWNhbGwJX1pOMTdRVmFsdWVMaXN0UHJpdmF0ZUk3UVN0cmluZ0VDMUV2LCAwCgltb3YJ
JW8wLCAlbDAKLkxMRUhFMjg6Ci5MTDMyODoKLkxMMzM4OgoJYWRkCSVpMCwgNDQsICVsMgoJc2V0
aGkJJWhpKDgxOTIpLCAlbzEKCXN0CSVsMCwgWyVpM10KCW9yCSVvMSwgODA3LCAlbzEKCW1vdgkl
bDIsICVvMAoJbW92CTEsICVvMgoJbW92CTEsICVvMwouTExFSEIyOToKCWNhbGwJX1pONlFHRGlj
dEMyRWpOU183S2V5VHlwZUViYiwgMAoJbW92CTEsICVvNAouTExFSEUyOToKLkxMMzQxOgouTEwz
NDM6CglzZXRoaQklaGkoX1pUVjEwUUFzY2lpRGljdElONUluZGV4NUVudHJ5RUUrOCksICVsNQoJ
YWRkCSVpMCwgNzIsICVsMwoJb3IJJWw1LCAlbG8oX1pUVjEwUUFzY2lpRGljdElONUluZGV4NUVu
dHJ5RUUrOCksICVnMQoJbW92CSVsMywgJW8wCglzdAklZzEsIFslaTArNDRdCgltb3YJMTcsICVv
MQoJbW92CTEsICVvMgoJbW92CTEsICVvMwouTExFSEIzMDoKCWNhbGwJX1pONlFHRGljdEMyRWpO
U183S2V5VHlwZUViYiwgMAoJbW92CTEsICVvNAouTExFSEUzMDoKLkxMMzQ2OgouTEwzNDg6Cglz
ZXRoaQklaGkoX1pON1FTdHJpbmcxMXNoYXJlZF9udWxsRSksICVsNAoJbGQJWyVsNCslbG8oX1pO
N1FTdHJpbmcxMXNoYXJlZF9udWxsRSldLCAlbzAKCXNldGhpCSVoaShfWlRWMTBRQXNjaWlEaWN0
SU41SW5kZXg4UG9zRW50cnlFRSs4KSwgJWw2CgljbXAJJW8wLCAwCglvcgklbDYsICVsbyhfWlRW
MTBRQXNjaWlEaWN0SU41SW5kZXg4UG9zRW50cnlFRSs4KSwgJWcxCglibmUJLkxMMzUxCglzdAkl
ZzEsIFslaTArNzJdCi5MTEVIQjMxOgoJY2FsbAlfWk43UVN0cmluZzE0bWFrZVNoYXJlZE51bGxF
diwgMAoJIG5vcAouTExFSEUzMToKLkxMMzUxOgoJbGQJWyVvMF0sICVnMQoJc3QJJW8wLCBbJWwx
KzEwNF0KCWFkZAklZzEsIDEsICVnMQoJbW92CSVpMiwgJW8xCglzdAklZzEsIFslbzBdCi5MTEVI
QjMyOgoJY2FsbAlfWk43UVN0cmluZ0MxRVJLU18sIDAKCWFkZAklbDEsIDEwOCwgJW8wCi5MTEVI
RTMyOgoJbGQJWyVsNCslbG8oX1pON1FTdHJpbmcxMXNoYXJlZF9udWxsRSldLCAlbzAKCWNtcAkl
bzAsIDAKCWJlCS5MTDQ3OQoJbm9wCglsZAlbJW8wXSwgJWcxCi5MTDQ4MToKCWxkCVslbDQrJWxv
KF9aTjdRU3RyaW5nMTFzaGFyZWRfbnVsbEUpXSwgJW80CglhZGQJJWcxLCAxLCAlZzEKCXN0CSVv
MCwgWyVsMSsxMTJdCgljbXAJJW80LCAwCgliZQkuTEw0ODAKCXN0CSVnMSwgWyVvMF0KLkxMMzU3
OgoJbGQJWyVvNF0sICVnMQoJbGQJWyVpMV0sICVvMwoJYWRkCSVnMSwgMSwgJWcxCglsZAlbJWwx
KzQwXSwgJWwwCglzdAklZzEsIFslbzRdCglsZAlbJW8zXSwgJW81CglzdAklbzQsIFslbDErMTE2
XQoJYWRkCSVvNSwgMSwgJW81CglzdAklbzUsIFslbzNdCglsZAlbJWwwXSwgJWcxCglhZGQJJWcx
LCAtMSwgJWcxCgljbXAJJWcxLCAwCglibmUJLkxMMzY1CglzdAklZzEsIFslbDBdCi5MTEVIQjMz
OgoJY2FsbAlfWk4xN1FWYWx1ZUxpc3RQcml2YXRlSTdRU3RyaW5nRUQxRXYsIDAKCW1vdgklbDAs
ICVvMAoJY2FsbAlfWmRsUHYsIDAKCW1vdgklbDAsICVvMAoJbGQJWyVpMV0sICVvMwouTEwzNjU6
CglzZXRoaQklaGkocUFwcCksICVnMQoJbGQJWyVnMSslbG8ocUFwcCldLCAlbzAKCXN0CSVvMywg
WyVpM10KCW1vdgkxLCAlZzEKCXNldGhpCSVoaSguTExDMCksICVvMQoJc2V0aGkJJWhpKC5MTEMx
KSwgJW8zCglzdGIJJWcwLCBbJWwxKzEyMV0KCXN0YgklZzEsIFslbDErMTIwXQoJb3IJJW8xLCAl
bG8oLkxMQzApLCAlbzEKCW9yCSVvMywgJWxvKC5MTEMxKSwgJW8zCgljYWxsCV9aTjdRT2JqZWN0
N2Nvbm5lY3RFUEtTX1BLY1MxX1MzXywgMAoJbW92CSVsMSwgJW8yCi5MTEVIRTMzOgoJYixhCS5M
TDMyMAouTEw0ODA6Ci5MTEVIQjM0OgoJY2FsbAlfWk43UVN0cmluZzE0bWFrZVNoYXJlZE51bGxF
diwgMAoJIG5vcAouTExFSEUzNDoKCWIJLkxMMzU3Cgltb3YJJW8wLCAlbzQKLkxMNDc5OgouTExF
SEIzNToKCWNhbGwJX1pON1FTdHJpbmcxNG1ha2VTaGFyZWROdWxsRXYsIDAKCSBub3AKLkxMRUhF
MzU6CgliCS5MTDQ4MQoJbGQJWyVvMF0sICVnMQouTEw0NzQ6Ci5MTDMyMToKLkxMMzI1OgoJbW92
CSVsMCwgJW8wCi5MTDQ3NzoKCWNhbGwJX1pkbFB2LCAwCgkgbm9wCi5MTDQ2MToKLkxMNDYzOgoJ
Y2FsbAlfWk43UU9iamVjdEQyRXYsIDAKCW1vdgklbDEsICVvMAouTExFSEIzNjoKCWNhbGwJX1Vu
d2luZF9SZXN1bWUsIDAKCW1vdgklaTAsICVvMAouTExFSEUzNjoKLkxMNDY3OgouTEwzNjg6Cgls
ZAlbJWwxKzExNl0sICVvMAoJbGQJWyVvMF0sICVnMQoJYWRkCSVnMSwgLTEsICVnMQoJY21wCSVn
MSwgMAoJYm5lCS5MTDM3OAoJc3QJJWcxLCBbJW8wXQoJbGQJWyVsNCslbG8oX1pON1FTdHJpbmcx
MXNoYXJlZF9udWxsRSldLCAlZzEKCWNtcAklbzAsICVnMQoJYmUsYQkuTEw0ODIKCWxkCVslbDEr
MTEyXSwgJW8wCi5MTDM3NjoKCWNhbGwJX1pOMTFRU3RyaW5nRGF0YTEwZGVsZXRlU2VsZkV2LCAw
Cgkgbm9wCi5MTDM3ODoKCWxkCVslbDErMTEyXSwgJW8wCi5MTDQ4MjoKCWxkCVslbzBdLCAlZzEK
CWFkZAklZzEsIC0xLCAlZzEKCWNtcAklZzEsIDAKCWJuZQkuTEwzODgKCXN0CSVnMSwgWyVvMF0K
CWxkCVslbDQrJWxvKF9aTjdRU3RyaW5nMTFzaGFyZWRfbnVsbEUpXSwgJWcxCgljbXAJJW8wLCAl
ZzEKCWJlLGEJLkxMNDgzCglsZAlbJWwxKzEwOF0sICVvMAouTEwzODY6CgljYWxsCV9aTjExUVN0
cmluZ0RhdGExMGRlbGV0ZVNlbGZFdiwgMAoJIG5vcAouTEwzODg6CglsZAlbJWwxKzEwOF0sICVv
MAouTEw0ODM6CglsZAlbJW8wXSwgJWcxCglhZGQJJWcxLCAtMSwgJWcxCgljbXAJJWcxLCAwCgli
bmUJLkxMMzk4CglzdAklZzEsIFslbzBdCglsZAlbJWw0KyVsbyhfWk43UVN0cmluZzExc2hhcmVk
X251bGxFKV0sICVnMQoJY21wCSVvMCwgJWcxCgliZSxhCS5MTDQ4NAoJbGQJWyVsMSsxMDRdLCAl
bzAKLkxMMzk2OgoJY2FsbAlfWk4xMVFTdHJpbmdEYXRhMTBkZWxldGVTZWxmRXYsIDAKCSBub3AK
LkxMMzk4OgoJbGQJWyVsMSsxMDRdLCAlbzAKLkxMNDg0OgoJbGQJWyVvMF0sICVnMQoJYWRkCSVn
MSwgLTEsICVnMQoJY21wCSVnMSwgMAoJYm5lCS5MTDQwOAoJc3QJJWcxLCBbJW8wXQoJbGQJWyVs
NCslbG8oX1pON1FTdHJpbmcxMXNoYXJlZF9udWxsRSldLCAlZzEKCWNtcAklbzAsICVnMQoJYmUJ
LkxMNDg1CglvcgklbDYsICVsbyhfWlRWMTBRQXNjaWlEaWN0SU41SW5kZXg4UG9zRW50cnlFRSs4
KSwgJWcxCi5MTDQwNjoKCWNhbGwJX1pOMTFRU3RyaW5nRGF0YTEwZGVsZXRlU2VsZkV2LCAwCgkg
bm9wCi5MTDQwODoKCW9yCSVsNiwgJWxvKF9aVFYxMFFBc2NpaURpY3RJTjVJbmRleDhQb3NFbnRy
eUVFKzgpLCAlZzEKLkxMNDg1OgoJbW92CSVsMywgJW8wCi5MTEVIQjM3OgoJY2FsbAlfWk42UUdE
aWN0NWNsZWFyRXYsIDAKCXN0CSVnMSwgWyVsMSs3Ml0KLkxMRUhFMzc6CgljYWxsCV9aTjZRR0Rp
Y3REMkV2LCAwCgltb3YJJWwzLCAlbzAKLkxMNDIxOgoJb3IJJWw1LCAlbG8oX1pUVjEwUUFzY2lp
RGljdElONUluZGV4NUVudHJ5RUUrOCksICVnMQouTEw0ODY6Cgltb3YJJWwyLCAlbzAKLkxMRUhC
Mzg6CgljYWxsCV9aTjZRR0RpY3Q1Y2xlYXJFdiwgMAoJc3QJJWcxLCBbJWwxKzQ0XQouTExFSEUz
ODoKCWNhbGwJX1pONlFHRGljdEQyRXYsIDAKCW1vdgklbDIsICVvMAouTEw0MzQ6Ci5MTDQzNzoK
LkxMNDQ3OgoJbGQJWyVsMSs0MF0sICVpMwouTEw0ODc6CglsZAlbJWkzXSwgJWcxCglhZGQJJWcx
LCAtMSwgJWcxCgljbXAJJWcxLCAwCglibmUJLkxMNDYxCglzdAklZzEsIFslaTNdCi5MTDQ1OToK
CWNhbGwJX1pOMTdRVmFsdWVMaXN0UHJpdmF0ZUk3UVN0cmluZ0VEMUV2LCAwCgltb3YJJWkzLCAl
bzAKCWIJLkxMNDc3Cgltb3YJJWkzLCAlbzAKLkxMNDY4OgoJYgkuTEw0ODIKCWxkCVslbDErMTEy
XSwgJW8wCi5MTDQ2OToKCWIJLkxMNDgzCglsZAlbJWwxKzEwOF0sICVvMAouTEw0NzA6CgliCS5M
TDQ4NAoJbGQJWyVsMSsxMDRdLCAlbzAKLkxMNDcxOgoJYgkuTEw0ODUKCW9yCSVsNiwgJWxvKF9a
VFYxMFFBc2NpaURpY3RJTjVJbmRleDhQb3NFbnRyeUVFKzgpLCAlZzEKLkxMNDY2OgouTEw0MTI6
Ci5MTDQxNDoKLkxMNDE5OgoJbW92CSVsMywgJW8wCi5MTDQ3ODoKCWNhbGwJX1pONlFHRGljdEQy
RXYsIDAKCSBub3AKCWNhbGwJX1pTdDl0ZXJtaW5hdGV2LCAwCgkgbm9wCi5MTDQ3MjoKCWIJLkxM
NDg2CglvcgklbDUsICVsbyhfWlRWMTBRQXNjaWlEaWN0SU41SW5kZXg1RW50cnlFRSs4KSwgJWcx
Ci5MTDQ2NToKLkxMNDI1OgouTEw0Mjc6Ci5MTDQzMjoKCWIJLkxMNDc4Cgltb3YJJWwyLCAlbzAK
LkxMNDczOgoJYgkuTEw0ODcKCWxkCVslbDErNDBdLCAlaTMKLkxMNDc1OgoJYixhCS5MTDQ2MQou
TEwzMjA6Cglub3AKCXJldAoJcmVzdG9yZQouTExGRTMxMjU6Cgkuc2l6ZQlfWk41SW5kZXhDMkVS
SzExUVN0cmluZ0xpc3RSSzdRU3RyaW5nLCAuLV9aTjVJbmRleEMyRVJLMTFRU3RyaW5nTGlzdFJL
N1FTdHJpbmcKCS5zZWN0aW9uCSIuZ2NjX2V4Y2VwdF90YWJsZSIsI2FsbG9jLCN3cml0ZQouTExM
U0RBMzEyNToKCS5ieXRlCTB4ZmYKCS5ieXRlCTB4ZmYKCS5ieXRlCTB4MwoJLmJ5dGUJMHhhOSww
eDEKCS51YXdvcmQJLkxMRUhCMjYtLkxMRkIzMTI1CgkudWF3b3JkCS5MTEVIRTI2LS5MTEVIQjI2
CgkudWF3b3JkCTB4MAoJLmJ5dGUJMHgwCgkudWF3b3JkCS5MTEVIQjI3LS5MTEZCMzEyNQoJLnVh
d29yZAkuTExFSEUyNy0uTExFSEIyNwoJLnVhd29yZAkuTEw0NzUtLkxMRkIzMTI1CgkuYnl0ZQkw
eDAKCS51YXdvcmQJLkxMRUhCMjgtLkxMRkIzMTI1CgkudWF3b3JkCS5MTEVIRTI4LS5MTEVIQjI4
CgkudWF3b3JkCS5MTDQ3NC0uTExGQjMxMjUKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEIyOS0u
TExGQjMxMjUKCS51YXdvcmQJLkxMRUhFMjktLkxMRUhCMjkKCS51YXdvcmQJLkxMNDczLS5MTEZC
MzEyNQoJLmJ5dGUJMHgwCgkudWF3b3JkCS5MTEVIQjMwLS5MTEZCMzEyNQoJLnVhd29yZAkuTExF
SEUzMC0uTExFSEIzMAoJLnVhd29yZAkuTEw0NzItLkxMRkIzMTI1CgkuYnl0ZQkweDAKCS51YXdv
cmQJLkxMRUhCMzEtLkxMRkIzMTI1CgkudWF3b3JkCS5MTEVIRTMxLS5MTEVIQjMxCgkudWF3b3Jk
CS5MTDQ3MS0uTExGQjMxMjUKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEIzMi0uTExGQjMxMjUK
CS51YXdvcmQJLkxMRUhFMzItLkxMRUhCMzIKCS51YXdvcmQJLkxMNDcwLS5MTEZCMzEyNQoJLmJ5
dGUJMHgwCgkudWF3b3JkCS5MTEVIQjMzLS5MTEZCMzEyNQoJLnVhd29yZAkuTExFSEUzMy0uTExF
SEIzMwoJLnVhd29yZAkuTEw0NjctLkxMRkIzMTI1CgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhC
MzQtLkxMRkIzMTI1CgkudWF3b3JkCS5MTEVIRTM0LS5MTEVIQjM0CgkudWF3b3JkCS5MTDQ2OC0u
TExGQjMxMjUKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEIzNS0uTExGQjMxMjUKCS51YXdvcmQJ
LkxMRUhFMzUtLkxMRUhCMzUKCS51YXdvcmQJLkxMNDY5LS5MTEZCMzEyNQoJLmJ5dGUJMHgwCgku
dWF3b3JkCS5MTEVIQjM2LS5MTEZCMzEyNQoJLnVhd29yZAkuTExFSEUzNi0uTExFSEIzNgoJLnVh
d29yZAkweDAKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEIzNy0uTExGQjMxMjUKCS51YXdvcmQJ
LkxMRUhFMzctLkxMRUhCMzcKCS51YXdvcmQJLkxMNDY2LS5MTEZCMzEyNQoJLmJ5dGUJMHgwCgku
dWF3b3JkCS5MTEVIQjM4LS5MTEZCMzEyNQoJLnVhd29yZAkuTExFSEUzOC0uTExFSEIzOAoJLnVh
d29yZAkuTEw0NjUtLkxMRkIzMTI1CgkuYnl0ZQkweDAKCS5zZWN0aW9uCSIudGV4dCIKCS5hbGln
biA0CgkuZ2xvYmFsIF9aTjVJbmRleEMxRVJLMTFRU3RyaW5nTGlzdFJLN1FTdHJpbmcKCS50eXBl
CV9aTjVJbmRleEMxRVJLMTFRU3RyaW5nTGlzdFJLN1FTdHJpbmcsICNmdW5jdGlvbgoJLnByb2MJ
MDIwCl9aTjVJbmRleEMxRVJLMTFRU3RyaW5nTGlzdFJLN1FTdHJpbmc6Ci5MTEZCMzEyNzoKCSEj
UFJPTE9HVUUjIDAKCXNhdmUJJXNwLCAtMTEyLCAlc3AKLkxMQ0ZJNToKCSEjUFJPTE9HVUUjIDEK
CW1vdgklaTAsICVvMAoJbW92CTAsICVvMQouTExFSEIzOToKCWNhbGwJX1pON1FPYmplY3RDMkVQ
U19QS2MsIDAKCW1vdgkwLCAlbzIKLkxMRUhFMzk6CglzZXRoaQklaGkoX1pUVjVJbmRleCs4KSwg
JWcxCgltb3YJJWkwLCAlbDEKCW9yCSVnMSwgJWxvKF9aVFY1SW5kZXgrOCksICVnMQoJYWRkCSVp
MCwgNDAsICVpMwoJc3QJJWcxLCBbJWkwXQouTExFSEI0MDoKCWNhbGwJX1pud2osIDAKCW1vdgkx
MiwgJW8wCi5MTEVIRTQwOgouTExFSEI0MToKCWNhbGwJX1pOMTdRVmFsdWVMaXN0UHJpdmF0ZUk3
UVN0cmluZ0VDMUV2LCAwCgltb3YJJW8wLCAlbDAKLkxMRUhFNDE6Ci5MTDQ5NjoKLkxMNTA2OgoJ
YWRkCSVpMCwgNDQsICVsMgoJc2V0aGkJJWhpKDgxOTIpLCAlbzEKCXN0CSVsMCwgWyVpM10KCW9y
CSVvMSwgODA3LCAlbzEKCW1vdgklbDIsICVvMAoJbW92CTEsICVvMgoJbW92CTEsICVvMwouTExF
SEI0MjoKCWNhbGwJX1pONlFHRGljdEMyRWpOU183S2V5VHlwZUViYiwgMAoJbW92CTEsICVvNAou
TExFSEU0MjoKLkxMNTA5OgouTEw1MTE6CglzZXRoaQklaGkoX1pUVjEwUUFzY2lpRGljdElONUlu
ZGV4NUVudHJ5RUUrOCksICVsNQoJYWRkCSVpMCwgNzIsICVsMwoJb3IJJWw1LCAlbG8oX1pUVjEw
UUFzY2lpRGljdElONUluZGV4NUVudHJ5RUUrOCksICVnMQoJbW92CSVsMywgJW8wCglzdAklZzEs
IFslaTArNDRdCgltb3YJMTcsICVvMQoJbW92CTEsICVvMgoJbW92CTEsICVvMwouTExFSEI0MzoK
CWNhbGwJX1pONlFHRGljdEMyRWpOU183S2V5VHlwZUViYiwgMAoJbW92CTEsICVvNAouTExFSEU0
MzoKLkxMNTE0OgouTEw1MTY6CglzZXRoaQklaGkoX1pON1FTdHJpbmcxMXNoYXJlZF9udWxsRSks
ICVsNAoJbGQJWyVsNCslbG8oX1pON1FTdHJpbmcxMXNoYXJlZF9udWxsRSldLCAlbzAKCXNldGhp
CSVoaShfWlRWMTBRQXNjaWlEaWN0SU41SW5kZXg4UG9zRW50cnlFRSs4KSwgJWw2CgljbXAJJW8w
LCAwCglvcgklbDYsICVsbyhfWlRWMTBRQXNjaWlEaWN0SU41SW5kZXg4UG9zRW50cnlFRSs4KSwg
JWcxCglibmUJLkxMNTE5CglzdAklZzEsIFslaTArNzJdCi5MTEVIQjQ0OgoJY2FsbAlfWk43UVN0
cmluZzE0bWFrZVNoYXJlZE51bGxFdiwgMAoJIG5vcAouTExFSEU0NDoKLkxMNTE5OgoJbGQJWyVv
MF0sICVnMQoJc3QJJW8wLCBbJWwxKzEwNF0KCWFkZAklZzEsIDEsICVnMQoJbW92CSVpMiwgJW8x
CglzdAklZzEsIFslbzBdCi5MTEVIQjQ1OgoJY2FsbAlfWk43UVN0cmluZ0MxRVJLU18sIDAKCWFk
ZAklbDEsIDEwOCwgJW8wCi5MTEVIRTQ1OgoJbGQJWyVsNCslbG8oX1pON1FTdHJpbmcxMXNoYXJl
ZF9udWxsRSldLCAlbzAKCWNtcAklbzAsIDAKCWJlCS5MTDY0NwoJbm9wCglsZAlbJW8wXSwgJWcx
Ci5MTDY0OToKCWxkCVslbDQrJWxvKF9aTjdRU3RyaW5nMTFzaGFyZWRfbnVsbEUpXSwgJW80Cglh
ZGQJJWcxLCAxLCAlZzEKCXN0CSVvMCwgWyVsMSsxMTJdCgljbXAJJW80LCAwCgliZQkuTEw2NDgK
CXN0CSVnMSwgWyVvMF0KLkxMNTI1OgoJbGQJWyVvNF0sICVnMQoJbGQJWyVpMV0sICVvMwoJYWRk
CSVnMSwgMSwgJWcxCglsZAlbJWwxKzQwXSwgJWwwCglzdAklZzEsIFslbzRdCglsZAlbJW8zXSwg
JW81CglzdAklbzQsIFslbDErMTE2XQoJYWRkCSVvNSwgMSwgJW81CglzdAklbzUsIFslbzNdCgls
ZAlbJWwwXSwgJWcxCglhZGQJJWcxLCAtMSwgJWcxCgljbXAJJWcxLCAwCglibmUJLkxMNTMzCglz
dAklZzEsIFslbDBdCi5MTEVIQjQ2OgoJY2FsbAlfWk4xN1FWYWx1ZUxpc3RQcml2YXRlSTdRU3Ry
aW5nRUQxRXYsIDAKCW1vdgklbDAsICVvMAoJY2FsbAlfWmRsUHYsIDAKCW1vdgklbDAsICVvMAoJ
bGQJWyVpMV0sICVvMwouTEw1MzM6CglzZXRoaQklaGkocUFwcCksICVnMQoJbGQJWyVnMSslbG8o
cUFwcCldLCAlbzAKCXN0CSVvMywgWyVpM10KCW1vdgkxLCAlZzEKCXNldGhpCSVoaSguTExDMCks
ICVvMQoJc2V0aGkJJWhpKC5MTEMxKSwgJW8zCglzdGIJJWcwLCBbJWwxKzEyMV0KCXN0YgklZzEs
IFslbDErMTIwXQoJb3IJJW8xLCAlbG8oLkxMQzApLCAlbzEKCW9yCSVvMywgJWxvKC5MTEMxKSwg
JW8zCgljYWxsCV9aTjdRT2JqZWN0N2Nvbm5lY3RFUEtTX1BLY1MxX1MzXywgMAoJbW92CSVsMSwg
JW8yCi5MTEVIRTQ2OgoJYixhCS5MTDQ4OAouTEw2NDg6Ci5MTEVIQjQ3OgoJY2FsbAlfWk43UVN0
cmluZzE0bWFrZVNoYXJlZE51bGxFdiwgMAoJIG5vcAouTExFSEU0NzoKCWIJLkxMNTI1Cgltb3YJ
JW8wLCAlbzQKLkxMNjQ3OgouTExFSEI0ODoKCWNhbGwJX1pON1FTdHJpbmcxNG1ha2VTaGFyZWRO
dWxsRXYsIDAKCSBub3AKLkxMRUhFNDg6CgliCS5MTDY0OQoJbGQJWyVvMF0sICVnMQouTEw2NDI6
Ci5MTDQ4OToKLkxMNDkzOgoJbW92CSVsMCwgJW8wCi5MTDY0NToKCWNhbGwJX1pkbFB2LCAwCgkg
bm9wCi5MTDYyOToKLkxMNjMxOgoJY2FsbAlfWk43UU9iamVjdEQyRXYsIDAKCW1vdgklbDEsICVv
MAouTExFSEI0OToKCWNhbGwJX1Vud2luZF9SZXN1bWUsIDAKCW1vdgklaTAsICVvMAouTExFSEU0
OToKLkxMNjM1OgouTEw1MzY6CglsZAlbJWwxKzExNl0sICVvMAoJbGQJWyVvMF0sICVnMQoJYWRk
CSVnMSwgLTEsICVnMQoJY21wCSVnMSwgMAoJYm5lCS5MTDU0NgoJc3QJJWcxLCBbJW8wXQoJbGQJ
WyVsNCslbG8oX1pON1FTdHJpbmcxMXNoYXJlZF9udWxsRSldLCAlZzEKCWNtcAklbzAsICVnMQoJ
YmUsYQkuTEw2NTAKCWxkCVslbDErMTEyXSwgJW8wCi5MTDU0NDoKCWNhbGwJX1pOMTFRU3RyaW5n
RGF0YTEwZGVsZXRlU2VsZkV2LCAwCgkgbm9wCi5MTDU0NjoKCWxkCVslbDErMTEyXSwgJW8wCi5M
TDY1MDoKCWxkCVslbzBdLCAlZzEKCWFkZAklZzEsIC0xLCAlZzEKCWNtcAklZzEsIDAKCWJuZQku
TEw1NTYKCXN0CSVnMSwgWyVvMF0KCWxkCVslbDQrJWxvKF9aTjdRU3RyaW5nMTFzaGFyZWRfbnVs
bEUpXSwgJWcxCgljbXAJJW8wLCAlZzEKCWJlLGEJLkxMNjUxCglsZAlbJWwxKzEwOF0sICVvMAou
TEw1NTQ6CgljYWxsCV9aTjExUVN0cmluZ0RhdGExMGRlbGV0ZVNlbGZFdiwgMAoJIG5vcAouTEw1
NTY6CglsZAlbJWwxKzEwOF0sICVvMAouTEw2NTE6CglsZAlbJW8wXSwgJWcxCglhZGQJJWcxLCAt
MSwgJWcxCgljbXAJJWcxLCAwCglibmUJLkxMNTY2CglzdAklZzEsIFslbzBdCglsZAlbJWw0KyVs
byhfWk43UVN0cmluZzExc2hhcmVkX251bGxFKV0sICVnMQoJY21wCSVvMCwgJWcxCgliZSxhCS5M
TDY1MgoJbGQJWyVsMSsxMDRdLCAlbzAKLkxMNTY0OgoJY2FsbAlfWk4xMVFTdHJpbmdEYXRhMTBk
ZWxldGVTZWxmRXYsIDAKCSBub3AKLkxMNTY2OgoJbGQJWyVsMSsxMDRdLCAlbzAKLkxMNjUyOgoJ
bGQJWyVvMF0sICVnMQoJYWRkCSVnMSwgLTEsICVnMQoJY21wCSVnMSwgMAoJYm5lCS5MTDU3NgoJ
c3QJJWcxLCBbJW8wXQoJbGQJWyVsNCslbG8oX1pON1FTdHJpbmcxMXNoYXJlZF9udWxsRSldLCAl
ZzEKCWNtcAklbzAsICVnMQoJYmUJLkxMNjUzCglvcgklbDYsICVsbyhfWlRWMTBRQXNjaWlEaWN0
SU41SW5kZXg4UG9zRW50cnlFRSs4KSwgJWcxCi5MTDU3NDoKCWNhbGwJX1pOMTFRU3RyaW5nRGF0
YTEwZGVsZXRlU2VsZkV2LCAwCgkgbm9wCi5MTDU3NjoKCW9yCSVsNiwgJWxvKF9aVFYxMFFBc2Np
aURpY3RJTjVJbmRleDhQb3NFbnRyeUVFKzgpLCAlZzEKLkxMNjUzOgoJbW92CSVsMywgJW8wCi5M
TEVIQjUwOgoJY2FsbAlfWk42UUdEaWN0NWNsZWFyRXYsIDAKCXN0CSVnMSwgWyVsMSs3Ml0KLkxM
RUhFNTA6CgljYWxsCV9aTjZRR0RpY3REMkV2LCAwCgltb3YJJWwzLCAlbzAKLkxMNTg5OgoJb3IJ
JWw1LCAlbG8oX1pUVjEwUUFzY2lpRGljdElONUluZGV4NUVudHJ5RUUrOCksICVnMQouTEw2NTQ6
Cgltb3YJJWwyLCAlbzAKLkxMRUhCNTE6CgljYWxsCV9aTjZRR0RpY3Q1Y2xlYXJFdiwgMAoJc3QJ
JWcxLCBbJWwxKzQ0XQouTExFSEU1MToKCWNhbGwJX1pONlFHRGljdEQyRXYsIDAKCW1vdgklbDIs
ICVvMAouTEw2MDI6Ci5MTDYwNToKLkxMNjE1OgoJbGQJWyVsMSs0MF0sICVpMwouTEw2NTU6Cgls
ZAlbJWkzXSwgJWcxCglhZGQJJWcxLCAtMSwgJWcxCgljbXAJJWcxLCAwCglibmUJLkxMNjI5Cglz
dAklZzEsIFslaTNdCi5MTDYyNzoKCWNhbGwJX1pOMTdRVmFsdWVMaXN0UHJpdmF0ZUk3UVN0cmlu
Z0VEMUV2LCAwCgltb3YJJWkzLCAlbzAKCWIJLkxMNjQ1Cgltb3YJJWkzLCAlbzAKLkxMNjM2OgoJ
YgkuTEw2NTAKCWxkCVslbDErMTEyXSwgJW8wCi5MTDYzNzoKCWIJLkxMNjUxCglsZAlbJWwxKzEw
OF0sICVvMAouTEw2Mzg6CgliCS5MTDY1MgoJbGQJWyVsMSsxMDRdLCAlbzAKLkxMNjM5OgoJYgku
TEw2NTMKCW9yCSVsNiwgJWxvKF9aVFYxMFFBc2NpaURpY3RJTjVJbmRleDhQb3NFbnRyeUVFKzgp
LCAlZzEKLkxMNjM0OgouTEw1ODA6Ci5MTDU4MjoKLkxMNTg3OgoJbW92CSVsMywgJW8wCi5MTDY0
NjoKCWNhbGwJX1pONlFHRGljdEQyRXYsIDAKCSBub3AKCWNhbGwJX1pTdDl0ZXJtaW5hdGV2LCAw
Cgkgbm9wCi5MTDY0MDoKCWIJLkxMNjU0CglvcgklbDUsICVsbyhfWlRWMTBRQXNjaWlEaWN0SU41
SW5kZXg1RW50cnlFRSs4KSwgJWcxCi5MTDYzMzoKLkxMNTkzOgouTEw1OTU6Ci5MTDYwMDoKCWIJ
LkxMNjQ2Cgltb3YJJWwyLCAlbzAKLkxMNjQxOgoJYgkuTEw2NTUKCWxkCVslbDErNDBdLCAlaTMK
LkxMNjQzOgoJYixhCS5MTDYyOQouTEw0ODg6Cglub3AKCXJldAoJcmVzdG9yZQouTExGRTMxMjc6
Cgkuc2l6ZQlfWk41SW5kZXhDMUVSSzExUVN0cmluZ0xpc3RSSzdRU3RyaW5nLCAuLV9aTjVJbmRl
eEMxRVJLMTFRU3RyaW5nTGlzdFJLN1FTdHJpbmcKCS5zZWN0aW9uCSIuZ2NjX2V4Y2VwdF90YWJs
ZSIsI2FsbG9jLCN3cml0ZQouTExMU0RBMzEyNzoKCS5ieXRlCTB4ZmYKCS5ieXRlCTB4ZmYKCS5i
eXRlCTB4MwoJLmJ5dGUJMHhhOSwweDEKCS51YXdvcmQJLkxMRUhCMzktLkxMRkIzMTI3CgkudWF3
b3JkCS5MTEVIRTM5LS5MTEVIQjM5CgkudWF3b3JkCTB4MAoJLmJ5dGUJMHgwCgkudWF3b3JkCS5M
TEVIQjQwLS5MTEZCMzEyNwoJLnVhd29yZAkuTExFSEU0MC0uTExFSEI0MAoJLnVhd29yZAkuTEw2
NDMtLkxMRkIzMTI3CgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhCNDEtLkxMRkIzMTI3CgkudWF3
b3JkCS5MTEVIRTQxLS5MTEVIQjQxCgkudWF3b3JkCS5MTDY0Mi0uTExGQjMxMjcKCS5ieXRlCTB4
MAoJLnVhd29yZAkuTExFSEI0Mi0uTExGQjMxMjcKCS51YXdvcmQJLkxMRUhFNDItLkxMRUhCNDIK
CS51YXdvcmQJLkxMNjQxLS5MTEZCMzEyNwoJLmJ5dGUJMHgwCgkudWF3b3JkCS5MTEVIQjQzLS5M
TEZCMzEyNwoJLnVhd29yZAkuTExFSEU0My0uTExFSEI0MwoJLnVhd29yZAkuTEw2NDAtLkxMRkIz
MTI3CgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhCNDQtLkxMRkIzMTI3CgkudWF3b3JkCS5MTEVI
RTQ0LS5MTEVIQjQ0CgkudWF3b3JkCS5MTDYzOS0uTExGQjMxMjcKCS5ieXRlCTB4MAoJLnVhd29y
ZAkuTExFSEI0NS0uTExGQjMxMjcKCS51YXdvcmQJLkxMRUhFNDUtLkxMRUhCNDUKCS51YXdvcmQJ
LkxMNjM4LS5MTEZCMzEyNwoJLmJ5dGUJMHgwCgkudWF3b3JkCS5MTEVIQjQ2LS5MTEZCMzEyNwoJ
LnVhd29yZAkuTExFSEU0Ni0uTExFSEI0NgoJLnVhd29yZAkuTEw2MzUtLkxMRkIzMTI3CgkuYnl0
ZQkweDAKCS51YXdvcmQJLkxMRUhCNDctLkxMRkIzMTI3CgkudWF3b3JkCS5MTEVIRTQ3LS5MTEVI
QjQ3CgkudWF3b3JkCS5MTDYzNi0uTExGQjMxMjcKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEI0
OC0uTExGQjMxMjcKCS51YXdvcmQJLkxMRUhFNDgtLkxMRUhCNDgKCS51YXdvcmQJLkxMNjM3LS5M
TEZCMzEyNwoJLmJ5dGUJMHgwCgkudWF3b3JkCS5MTEVIQjQ5LS5MTEZCMzEyNwoJLnVhd29yZAku
TExFSEU0OS0uTExFSEI0OQoJLnVhd29yZAkweDAKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEI1
MC0uTExGQjMxMjcKCS51YXdvcmQJLkxMRUhFNTAtLkxMRUhCNTAKCS51YXdvcmQJLkxMNjM0LS5M
TEZCMzEyNwoJLmJ5dGUJMHgwCgkudWF3b3JkCS5MTEVIQjUxLS5MTEZCMzEyNwoJLnVhd29yZAku
TExFSEU1MS0uTExFSEI1MQoJLnVhd29yZAkuTEw2MzMtLkxMRkIzMTI3CgkuYnl0ZQkweDAKCS5z
ZWN0aW9uCSIudGV4dCIKCS5hbGlnbiA0CgkuZ2xvYmFsIF9aTjVJbmRleDE2c2V0TGFzdFdpbkNs
b3NlZEV2CgkudHlwZQlfWk41SW5kZXgxNnNldExhc3RXaW5DbG9zZWRFdiwgI2Z1bmN0aW9uCgku
cHJvYwkwMjAKX1pONUluZGV4MTZzZXRMYXN0V2luQ2xvc2VkRXY6Ci5MTEZCMzEyOToKCSEjUFJP
TE9HVUUjIDAKCSEjUFJPTE9HVUUjIDEKCW1vdgkxLCAlZzEKCXJldGwKCXN0YgklZzEsIFslbzAr
MTIxXQouTExGRTMxMjk6Cgkuc2l6ZQlfWk41SW5kZXgxNnNldExhc3RXaW5DbG9zZWRFdiwgLi1f
Wk41SW5kZXgxNnNldExhc3RXaW5DbG9zZWRFdgoJLmFsaWduIDQKCS5nbG9iYWwgX1pONUluZGV4
MTdzZXREaWN0aW9uYXJ5RmlsZUVSSzdRU3RyaW5nCgkudHlwZQlfWk41SW5kZXgxN3NldERpY3Rp
b25hcnlGaWxlRVJLN1FTdHJpbmcsICNmdW5jdGlvbgoJLnByb2MJMDIwCl9aTjVJbmRleDE3c2V0
RGljdGlvbmFyeUZpbGVFUks3UVN0cmluZzoKLkxMRkIzMTMxOgoJISNQUk9MT0dVRSMgMAoJISNQ
Uk9MT0dVRSMgMQoJc2V0aGkJJWhpKF9aTjdRU3RyaW5nYVNFUktTXyksICVnMQoJam1wbAklZzEg
KyAlbG8oX1pON1FTdHJpbmdhU0VSS1NfKSwgJWcwCglhZGQJJW8wLCAxMTIsICVvMAoJbm9wCi5M
TEZFMzEzMToKCS5zaXplCV9aTjVJbmRleDE3c2V0RGljdGlvbmFyeUZpbGVFUks3UVN0cmluZywg
Li1fWk41SW5kZXgxN3NldERpY3Rpb25hcnlGaWxlRVJLN1FTdHJpbmcKCS5hbGlnbiA0CgkuZ2xv
YmFsIF9aTjVJbmRleDE0c2V0RG9jTGlzdEZpbGVFUks3UVN0cmluZwoJLnR5cGUJX1pONUluZGV4
MTRzZXREb2NMaXN0RmlsZUVSSzdRU3RyaW5nLCAjZnVuY3Rpb24KCS5wcm9jCTAyMApfWk41SW5k
ZXgxNHNldERvY0xpc3RGaWxlRVJLN1FTdHJpbmc6Ci5MTEZCMzEzMzoKCSEjUFJPTE9HVUUjIDAK
CSEjUFJPTE9HVUUjIDEKCXNldGhpCSVoaShfWk43UVN0cmluZ2FTRVJLU18pLCAlZzEKCWptcGwJ
JWcxICsgJWxvKF9aTjdRU3RyaW5nYVNFUktTXyksICVnMAoJYWRkCSVvMCwgMTE2LCAlbzAKCW5v
cAouTExGRTMxMzM6Cgkuc2l6ZQlfWk41SW5kZXgxNHNldERvY0xpc3RGaWxlRVJLN1FTdHJpbmcs
IC4tX1pONUluZGV4MTRzZXREb2NMaXN0RmlsZUVSSzdRU3RyaW5nCgkuZ2xvYmFsIC51ZGl2Cgku
Z2xvYmFsIC5yZW0KCS5hbGlnbiA0CgkuZ2xvYmFsIF9aTjVJbmRleDltYWtlSW5kZXhFdgoJLnR5
cGUJX1pONUluZGV4OW1ha2VJbmRleEV2LCAjZnVuY3Rpb24KCS5wcm9jCTA0Cl9aTjVJbmRleDlt
YWtlSW5kZXhFdjoKLkxMRkIzMTQ2OgoJISNQUk9MT0dVRSMgMAoJc2F2ZQklc3AsIC0xMjgsICVz
cAouTExDRkk2OgoJISNQUk9MT0dVRSMgMQoJbGR1YglbJWkwKzEyMF0sICVnMQoJY21wCSVnMSwg
MAoJYmUJLkxMNjg0Cgltb3YJJWkwLCAlbDIKCWxkCVslbDIrNDBdLCAlbDAKLkxMNjkwOgoJYWRk
CSVsMiwgNDAsICVsNQoJbGQJWyVsMCs4XSwgJWcxCgljbXAJJWcxLCAwCgliZQkuTEw2NTkKCW1v
dgkxLCAlaTAKCWxkCVslbDBdLCAlZzEKCWNtcAklZzEsIDEKCWJndQkuTEw2ODUKCW5vcAouTEw2
NjQ6CglsZAlbJWwwKzRdLCAlZzEKCWxkCVslbDArOF0sICVvMAoJbGQJWyVnMV0sICVvNQoJbW92
CTEwMCwgJW8xCgljYWxsCS51ZGl2LCAwCglzdAklbzUsIFslZnAtMjRdCglvcmNjCSVvMCwgMCwg
JWwzCgliZSxhCS5MTDY2OAoJbW92CTEsICVsMwouTEw2Njg6Cgltb3YJMCwgJWw0Cgltb3YJMCwg
JWwxCi5MTDY2OToKCWxkCVslbDBdLCAlZzEKCWNtcAklZzEsIDEKCWJndQkuTEw2ODYKCW1vdgkl
bDUsICVvMAouTEw2NzQ6CglsZAlbJWwwKzRdLCAlbzUKCWxkCVslZnAtMjRdLCAlZzEKCW1vdgkl
bDEsICVvMgoJYWRkCSVnMSwgOCwgJW8xCgltb3YJJWwyLCAlbzAKCWNtcAklZzEsICVvNQoJYmUJ
LkxMNjg3CglzdAklbzUsIFslZnAtMzJdCglsZHViCVslbDIrMTIxXSwgJWcxCgljbXAJJWcxLCAw
CglibmUJLkxMNjU5Cgltb3YJLTEsICVpMAoJY2FsbAlfWk41SW5kZXgxM3BhcnNlRG9jdW1lbnRF
Uks3UVN0cmluZ2ksIDAKCSBub3AKCW1vdgklbDEsICVvMAoJbW92CSVsMywgJW8xCgljYWxsCS5y
ZW0sIDAKCWFkZAklbDEsIDEsICVsMQoJY21wCSVvMCwgMAoJYmUsYQkuTEw2ODgKCWFkZAklbDQs
IDEsICVsNAoJbGQJWyVmcC0yNF0sICVnMQouTEw2ODk6CglsZAlbJWwyKzQwXSwgJWwwCglsZAlb
JWcxXSwgJW81CgliCS5MTDY2OQoJc3QJJW81LCBbJWZwLTI0XQouTEw2ODg6Cgltb3YJJWwyLCAl
bzAKCWNhbGwJX1pONUluZGV4MTZpbmRleGluZ1Byb2dyZXNzRWksIDAKCW1vdgklbDQsICVvMQoJ
YgkuTEw2ODkKCWxkCVslZnAtMjRdLCAlZzEKLkxMNjg3OgoJYgkuTEw2NTkKCW1vdgkwLCAlaTAK
LkxMNjg2OgoJY2FsbAlfWk4xMFFWYWx1ZUxpc3RJN1FTdHJpbmdFMTRkZXRhY2hJbnRlcm5hbEV2
LCAwCgkgbm9wCgliCS5MTDY3NAoJbGQJWyVsMis0MF0sICVsMAouTEw2ODU6CgljYWxsCV9aTjEw
UVZhbHVlTGlzdEk3UVN0cmluZ0UxNGRldGFjaEludGVybmFsRXYsIDAKCW1vdgklbDUsICVvMAoJ
YgkuTEw2NjQKCWxkCVslbDIrNDBdLCAlbDAKLkxMNjg0OgoJY2FsbAlfWk41SW5kZXgxN3NldHVw
RG9jdW1lbnRMaXN0RXYsIDAKCW1vdgklaTAsICVvMAoJYgkuTEw2OTAKCWxkCVslbDIrNDBdLCAl
bDAKLkxMNjU5OgoJbm9wCglyZXQKCXJlc3RvcmUKLkxMRkUzMTQ2OgoJLnNpemUJX1pONUluZGV4
OW1ha2VJbmRleEV2LCAuLV9aTjVJbmRleDltYWtlSW5kZXhFdgoJLnNlY3Rpb24JIi5yb2RhdGEi
CgkuYWxpZ24gOAouTExDMjoKCS5hc2NpegkiKi5odG1sIgoJLmFsaWduIDgKLkxMQzM6CgkuYXNj
aXoJIi8iCgkuc2VjdGlvbgkiLnRleHQiCgkuYWxpZ24gNAoJLmdsb2JhbCBfWk41SW5kZXgxN3Nl
dHVwRG9jdW1lbnRMaXN0RXYKCS50eXBlCV9aTjVJbmRleDE3c2V0dXBEb2N1bWVudExpc3RFdiwg
I2Z1bmN0aW9uCgkucHJvYwkwMjAKX1pONUluZGV4MTdzZXR1cERvY3VtZW50TGlzdEV2OgouTExG
QjMxNTU6CgkhI1BST0xPR1VFIyAwCglzYXZlCSVzcCwgLTIxNiwgJXNwCi5MTENGSTc6CgkhI1BS
T0xPR1VFIyAxCglhZGQJJWZwLCAtNDgsICVsMQoJYWRkCSVpMCwgMTA0LCAlaTEKCW1vdgklbDEs
ICVvMAoJbW92CSVpMSwgJW8xCglzZXRoaQklaGkoX1pON1FTdHJpbmc0bnVsbEUpLCAlbzIKCW1v
dgkxNiwgJW8zCglvcgklbzIsICVsbyhfWk43UVN0cmluZzRudWxsRSksICVvMgoJbW92CTcsICVv
NAouTExFSEI1MjoKCWNhbGwJX1pONFFEaXJDMUVSSzdRU3RyaW5nUzJfaWksIDAKCWFkZAklZnAs
IC02NCwgJWkyCi5MTEVIRTUyOgoJc2V0aGkJJWhpKC5MTEMyKSwgJW8xCgltb3YJJWkyLCAlbzAK
LkxMRUhCNTM6CgljYWxsCV9aTjdRU3RyaW5nQzFFUEtjLCAwCglvcgklbzEsICVsbyguTExDMiks
ICVvMQouTExFSEU1MzoKCWFkZAklZnAsIC01NiwgJWwyCgltb3YJJWwxLCAlbzAKCXN0CSVsMiwg
WyVzcCs2NF0KCW1vdgklaTIsICVvMQoJbW92CS0xLCAlbzIKCW1vdgktMSwgJW8zCi5MTEVIQjU0
OgoJY2FsbAlfWk5LNFFEaXI5ZW50cnlMaXN0RVJLN1FTdHJpbmdpaSwgMAoJbm9wCgl1bmltcAk0
Ci5MTEVIRTU0OgoJbGQJWyVmcC02NF0sICVvMAoJbGQJWyVvMF0sICVnMQoJYWRkCSVnMSwgLTEs
ICVnMQoJY21wCSVnMSwgMAoJYm5lCS5MTDcwNwoJc3QJJWcxLCBbJW8wXQoJc2V0aGkJJWhpKF9a
TjdRU3RyaW5nMTFzaGFyZWRfbnVsbEUpLCAlZzEKCWxkCVslZzErJWxvKF9aTjdRU3RyaW5nMTFz
aGFyZWRfbnVsbEUpXSwgJW81CgljbXAJJW8wLCAlbzUKCWJlCS5MTDg3OAoJbGQJWyVmcC01Nl0s
ICVpMwouTExFSEI1NToKCWNhbGwJX1pOMTFRU3RyaW5nRGF0YTEwZGVsZXRlU2VsZkV2LCAwCgkg
bm9wCi5MTEVIRTU1OgouTEw3MDc6CglsZAlbJWZwLTU2XSwgJWkzCi5MTDg3ODoKCWxkCVslaTNd
LCAlZzEKCWNtcAklZzEsIDEKCWJndQkuTEw4NzIKCW5vcAouTEw3MDk6CglsZAlbJWkzKzRdLCAl
ZzEKCWxkCVslZzFdLCAlbzUKCXN0CSVvNSwgWyVmcC03Ml0KCXN0CSVvNSwgWyVmcC04MF0KLkxM
NzEzOgoJbGQJWyVpM10sICVnMQoJY21wCSVnMSwgMQoJYmd1CS5MTDg3MwoJbm9wCi5MTDcxODoK
CWxkCVslaTMrNF0sICVnMQoJbGQJWyVmcC03Ml0sICVvNQoJc3QJJWcxLCBbJWZwLTgwXQoJY21w
CSVvNSwgJWcxCgliZQkuTEw4MDQKCXN0CSVnMSwgWyVmcC04OF0KCWFkZAklZnAsIC0xMDQsICVs
MAoJYWRkCSVpMCwgNDAsICVsMwoJbW92CSVsMCwgJW8wCi5MTEVIQjU2OgoJY2FsbAlfWk43UVN0
cmluZ0MxRVJLU18sIDAKCW1vdgklaTEsICVvMQouTExFSEU1NjoKCXNldGhpCSVoaSguTExDMyks
ICVvMAoJYWRkCSVmcCwgLTExMiwgJWkzCglvcgklbzAsICVsbyguTExDMyksICVvMAoJc3QJJWkz
LCBbJXNwKzY0XQoJbW92CS0xLCAlbzEKLkxMRUhCNTc6CgljYWxsCV9aTjdRU3RyaW5nOWZyb21B
c2NpaUVQS2NpLCAwCglub3AKCXVuaW1wCTQKLkxMRUhFNTc6Cgltb3YJJWkzLCAlbzEKLkxMRUhC
NTg6CgljYWxsCV9aTjdRU3RyaW5ncExFUktTXywgMAoJbW92CSVsMCwgJW8wCi5MTEVIRTU4Ogou
TEw3MzE6CglsZAlbJWZwLTExMl0sICVvMAoJbGQJWyVvMF0sICVnMQoJYWRkCSVnMSwgLTEsICVn
MQoJY21wCSVnMSwgMAoJYm5lCS5MTDczOQoJc3QJJWcxLCBbJW8wXQoJc2V0aGkJJWhpKF9aTjdR
U3RyaW5nMTFzaGFyZWRfbnVsbEUpLCAlZzEKCWxkCVslZzErJWxvKF9aTjdRU3RyaW5nMTFzaGFy
ZWRfbnVsbEUpXSwgJW81CgljbXAJJW8wLCAlbzUKCWJlLGEJLkxMODc5CglsZAlbJWZwLTcyXSwg
JWcxCi5MTEVIQjU5OgoJY2FsbAlfWk4xMVFTdHJpbmdEYXRhMTBkZWxldGVTZWxmRXYsIDAKCSBu
b3AKLkxMRUhFNTk6Ci5MTDc0MDoKLkxMNzQ4OgouTEw3Mzk6CglsZAlbJWZwLTcyXSwgJWcxCi5M
TDg3OToKCW1vdgklbDAsICVvMQoJbW92CSVpMiwgJW8wCi5MTEVIQjYwOgoJY2FsbAlfWk43UVN0
cmluZ0MxRVJLU18sIDAKCWFkZAklZzEsIDgsICVsMAouTExFSEU2MDoKCW1vdgklbDAsICVvMQou
TExFSEI2MToKCWNhbGwJX1pON1FTdHJpbmdwTEVSS1NfLCAwCgltb3YJJWkyLCAlbzAKLkxMRUhF
NjE6Ci5MTDc1MjoKLkxMNzYwOgoJbGQJWyVsM10sICVvMAoJbGQJWyVvMF0sICVnMQoJY21wCSVn
MSwgMQoJYmd1CS5MTDg3NAoJbm9wCi5MTDc2NToKCWxkCVslbzArNF0sICVnMQouTEw4ODI6Cglh
ZGQJJWZwLCAtMTIwLCAlbzEKCXN0CSVnMSwgWyVmcC0xMjBdCgltb3YJJWkyLCAlbzIKCWFkZAkl
ZnAsIC05NiwgJWcxCglzdAklZzEsIFslc3ArNjRdCi5MTEVIQjYyOgoJY2FsbAlfWk4xN1FWYWx1
ZUxpc3RQcml2YXRlSTdRU3RyaW5nRTZpbnNlcnRFMThRVmFsdWVMaXN0SXRlcmF0b3JJUzBfRVJL
UzBfLCAwCglub3AKCXVuaW1wCTQKLkxMRUhFNjI6CglsZAlbJWZwLTY0XSwgJW8wCglsZAlbJW8w
XSwgJWcxCglhZGQJJWcxLCAtMSwgJWcxCgljbXAJJWcxLCAwCglibmUJLkxMNzg2CglzdAklZzEs
IFslbzBdCglzZXRoaQklaGkoX1pON1FTdHJpbmcxMXNoYXJlZF9udWxsRSksICVnMQoJbGQJWyVn
MSslbG8oX1pON1FTdHJpbmcxMXNoYXJlZF9udWxsRSldLCAlbzUKCWNtcAklbzAsICVvNQoJYmUs
YQkuTEw4ODAKCWxkCVslZnAtMTA0XSwgJW8wCi5MTEVIQjYzOgoJY2FsbAlfWk4xMVFTdHJpbmdE
YXRhMTBkZWxldGVTZWxmRXYsIDAKCSBub3AKLkxMRUhFNjM6Ci5MTDc4NjoKCWxkCVslZnAtMTA0
XSwgJW8wCi5MTDg4MDoKCWxkCVslbzBdLCAlZzEKCWFkZAklZzEsIC0xLCAlZzEKCWNtcAklZzEs
IDAKCWJuZQkuTEw3MTUKCXN0CSVnMSwgWyVvMF0KCXNldGhpCSVoaShfWk43UVN0cmluZzExc2hh
cmVkX251bGxFKSwgJWcxCglsZAlbJWcxKyVsbyhfWk43UVN0cmluZzExc2hhcmVkX251bGxFKV0s
ICVvNQoJY21wCSVvMCwgJW81CgliZSxhCS5MTDg4MQoJbGQJWyVmcC03Ml0sICVnMQouTExFSEI2
NDoKCWNhbGwJX1pOMTFRU3RyaW5nRGF0YTEwZGVsZXRlU2VsZkV2LCAwCgkgbm9wCi5MTEVIRTY0
OgouTEw3MTU6CglsZAlbJWZwLTcyXSwgJWcxCi5MTDg4MToKCWxkCVslZnAtNTZdLCAlaTMKCWxk
CVslZzFdLCAlbzUKCWIJLkxMNzEzCglzdAklbzUsIFslZnAtNzJdCi5MTDg3NDoKLkxMRUhCNjU6
CgljYWxsCV9aTjEwUVZhbHVlTGlzdEk3UVN0cmluZ0UxNGRldGFjaEludGVybmFsRXYsIDAKCW1v
dgklbDMsICVvMAoJbGQJWyVsM10sICVvMAoJbGQJWyVvMF0sICVnMQoJY21wCSVnMSwgMQoJYmxl
dSxhCS5MTDg4MgoJbGQJWyVvMCs0XSwgJWcxCgljYWxsCV9aTjEwUVZhbHVlTGlzdEk3UVN0cmlu
Z0UxNGRldGFjaEludGVybmFsRXYsIDAKCW1vdgklbDMsICVvMAouTExFSEU2NToKCWIJLkxMNzY1
CglsZAlbJWwzXSwgJW8wCi5MTDgwNDoKLkxMODMxOgouTEw4NDE6CglsZAlbJWkzXSwgJWcxCglh
ZGQJJWcxLCAtMSwgJWcxCgljbXAJJWcxLCAwCglibmUJLkxMODU0CglzdAklZzEsIFslaTNdCi5M
TEVIQjY2OgoJY2FsbAlfWk4xN1FWYWx1ZUxpc3RQcml2YXRlSTdRU3RyaW5nRUQxRXYsIDAKCW1v
dgklaTMsICVvMAouTExFSEU2NjoKCWNhbGwJX1pkbFB2LCAwCgltb3YJJWkzLCAlbzAKCWIsYQku
TEw4NTQKLkxMODczOgouTExFSEI2NzoKCWNhbGwJX1pOMTBRVmFsdWVMaXN0STdRU3RyaW5nRTE0
ZGV0YWNoSW50ZXJuYWxFdiwgMAoJbW92CSVsMiwgJW8wCgliCS5MTDcxOAoJbGQJWyVmcC01Nl0s
ICVpMwouTEw4NzI6CgljYWxsCV9aTjEwUVZhbHVlTGlzdEk3UVN0cmluZ0UxNGRldGFjaEludGVy
bmFsRXYsIDAKCW1vdgklbDIsICVvMAouTExFSEU2NzoKCWIJLkxMNzA5CglsZAlbJWZwLTU2XSwg
JWkzCi5MTDg2MzoKLkxMNjkyOgoJbGQJWyVmcC02NF0sICVvMAoJbGQJWyVvMF0sICVnMQoJYWRk
CSVnMSwgLTEsICVnMQoJY21wCSVnMSwgMAoJYmUJLkxMODc1CglzdAklZzEsIFslbzBdCi5MTDg1
MzoKLkxMODU1OgoJY2FsbAlfWk40UURpckQxRXYsIDAKCW1vdgklbDEsICVvMAouTExFSEI2ODoK
CWNhbGwJX1Vud2luZF9SZXN1bWUsIDAKCW1vdgklaTAsICVvMAouTExFSEU2ODoKLkxMODc1OgoJ
c2V0aGkJJWhpKF9aTjdRU3RyaW5nMTFzaGFyZWRfbnVsbEUpLCAlZzEKCWxkCVslZzErJWxvKF9a
TjdRU3RyaW5nMTFzaGFyZWRfbnVsbEUpXSwgJW81CgljbXAJJW8wLCAlbzUKCWJlCS5MTDg1MwoJ
bm9wCi5MTDcwMDoKCWNhbGwJX1pOMTFRU3RyaW5nRGF0YTEwZGVsZXRlU2VsZkV2LCAwCglhZGQJ
JW83LCAoLkxMODUzLS4tNCksICVvNwouTEw4NjA6Ci5MTDcyMzoKCWxkCVslZnAtMTEyXSwgJW8w
Ci5MTDg3MToKCWxkCVslbzBdLCAlZzEKCWFkZAklZzEsIC0xLCAlZzEKCWNtcAklZzEsIDAKCWJu
ZQkuTEw3ODUKCXN0CSVnMSwgWyVvMF0KCXNldGhpCSVoaShfWk43UVN0cmluZzExc2hhcmVkX251
bGxFKSwgJWcxCglsZAlbJWcxKyVsbyhfWk43UVN0cmluZzExc2hhcmVkX251bGxFKV0sICVvNQoJ
Y21wCSVvMCwgJW81CgliZSxhCS5MTDg3NgoJbGQJWyVmcC0xMDRdLCAlbzAKLkxMNzc3OgoJY2Fs
bAlfWk4xMVFTdHJpbmdEYXRhMTBkZWxldGVTZWxmRXYsIDAKCSBub3AKLkxMNzg1OgoJbGQJWyVm
cC0xMDRdLCAlbzAKLkxMODc2OgoJbGQJWyVvMF0sICVnMQoJYWRkCSVnMSwgLTEsICVnMQoJY21w
CSVnMSwgMAoJYm5lCS5MTDgwMwoJc3QJJWcxLCBbJW8wXQoJc2V0aGkJJWhpKF9aTjdRU3RyaW5n
MTFzaGFyZWRfbnVsbEUpLCAlZzEKCWxkCVslZzErJWxvKF9aTjdRU3RyaW5nMTFzaGFyZWRfbnVs
bEUpXSwgJW81CgljbXAJJW8wLCAlbzUKCWJlCS5MTDg3NwoJbGQJWyVmcC01Nl0sICVpMwouTEw3
OTM6CgljYWxsCV9aTjExUVN0cmluZ0RhdGExMGRlbGV0ZVNlbGZFdiwgMAoJIG5vcAouTEw4MDM6
Ci5MTDgwNjoKLkxMODE2OgoJbGQJWyVmcC01Nl0sICVpMwouTEw4Nzc6CglsZAlbJWkzXSwgJWcx
CglhZGQJJWcxLCAtMSwgJWcxCgljbXAJJWcxLCAwCglibmUJLkxMODUzCglzdAklZzEsIFslaTNd
Ci5MTDgyODoKCWNhbGwJX1pOMTdRVmFsdWVMaXN0UHJpdmF0ZUk3UVN0cmluZ0VEMUV2LCAwCglt
b3YJJWkzLCAlbzAKCWNhbGwJX1pkbFB2LCAwCgltb3YJJWkzLCAlbzAKCWIsYQkuTEw4NTMKLkxM
ODYxOgouTEw4NTk6CgliCS5MTDg3NgoJbGQJWyVmcC0xMDRdLCAlbzAKLkxMODU4OgouTEw4NTc6
Ci5MTDc2OToKCWIJLkxMODcxCglsZAlbJWZwLTY0XSwgJW8wCi5MTDg2MjoKCWIJLkxMODc3Cgls
ZAlbJWZwLTU2XSwgJWkzCi5MTDg2NDoKCWIsYQkuTEw4NTMKLkxMODU0OgouTExFSEI2OToKCWNh
bGwJX1pONFFEaXJEMUV2LCAwCgltb3YJJWwxLCAlbzAKLkxMRUhFNjk6Cglub3AKCXJldAoJcmVz
dG9yZQouTExGRTMxNTU6Cgkuc2l6ZQlfWk41SW5kZXgxN3NldHVwRG9jdW1lbnRMaXN0RXYsIC4t
X1pONUluZGV4MTdzZXR1cERvY3VtZW50TGlzdEV2Cgkuc2VjdGlvbgkiLmdjY19leGNlcHRfdGFi
bGUiLCNhbGxvYywjd3JpdGUKLkxMTFNEQTMxNTU6CgkuYnl0ZQkweGZmCgkuYnl0ZQkweGZmCgku
Ynl0ZQkweDMKCS5ieXRlCTB4ZWEsMHgxCgkudWF3b3JkCS5MTEVIQjUyLS5MTEZCMzE1NQoJLnVh
d29yZAkuTExFSEU1Mi0uTExFSEI1MgoJLnVhd29yZAkweDAKCS5ieXRlCTB4MAoJLnVhd29yZAku
TExFSEI1My0uTExGQjMxNTUKCS51YXdvcmQJLkxMRUhFNTMtLkxMRUhCNTMKCS51YXdvcmQJLkxM
ODY0LS5MTEZCMzE1NQoJLmJ5dGUJMHgwCgkudWF3b3JkCS5MTEVIQjU0LS5MTEZCMzE1NQoJLnVh
d29yZAkuTExFSEU1NC0uTExFSEI1NAoJLnVhd29yZAkuTEw4NjMtLkxMRkIzMTU1CgkuYnl0ZQkw
eDAKCS51YXdvcmQJLkxMRUhCNTUtLkxMRkIzMTU1CgkudWF3b3JkCS5MTEVIRTU1LS5MTEVIQjU1
CgkudWF3b3JkCS5MTDg2NC0uTExGQjMxNTUKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEI1Ni0u
TExGQjMxNTUKCS51YXdvcmQJLkxMRUhFNTYtLkxMRUhCNTYKCS51YXdvcmQJLkxMODYyLS5MTEZC
MzE1NQoJLmJ5dGUJMHgwCgkudWF3b3JkCS5MTEVIQjU3LS5MTEZCMzE1NQoJLnVhd29yZAkuTExF
SEU1Ny0uTExFSEI1NwoJLnVhd29yZAkuTEw4NjEtLkxMRkIzMTU1CgkuYnl0ZQkweDAKCS51YXdv
cmQJLkxMRUhCNTgtLkxMRkIzMTU1CgkudWF3b3JkCS5MTEVIRTU4LS5MTEVIQjU4CgkudWF3b3Jk
CS5MTDg2MC0uTExGQjMxNTUKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEI1OS0uTExGQjMxNTUK
CS51YXdvcmQJLkxMRUhFNTktLkxMRUhCNTkKCS51YXdvcmQJLkxMODYxLS5MTEZCMzE1NQoJLmJ5
dGUJMHgwCgkudWF3b3JkCS5MTEVIQjYwLS5MTEZCMzE1NQoJLnVhd29yZAkuTExFSEU2MC0uTExF
SEI2MAoJLnVhd29yZAkuTEw4NTktLkxMRkIzMTU1CgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhC
NjEtLkxMRkIzMTU1CgkudWF3b3JkCS5MTEVIRTYxLS5MTEVIQjYxCgkudWF3b3JkCS5MTDg1OC0u
TExGQjMxNTUKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEI2Mi0uTExGQjMxNTUKCS51YXdvcmQJ
LkxMRUhFNjItLkxMRUhCNjIKCS51YXdvcmQJLkxMODU3LS5MTEZCMzE1NQoJLmJ5dGUJMHgwCgku
dWF3b3JkCS5MTEVIQjYzLS5MTEZCMzE1NQoJLnVhd29yZAkuTExFSEU2My0uTExFSEI2MwoJLnVh
d29yZAkuTEw4NTktLkxMRkIzMTU1CgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhCNjQtLkxMRkIz
MTU1CgkudWF3b3JkCS5MTEVIRTY0LS5MTEVIQjY0CgkudWF3b3JkCS5MTDg2Mi0uTExGQjMxNTUK
CS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEI2NS0uTExGQjMxNTUKCS51YXdvcmQJLkxMRUhFNjUt
LkxMRUhCNjUKCS51YXdvcmQJLkxMODU3LS5MTEZCMzE1NQoJLmJ5dGUJMHgwCgkudWF3b3JkCS5M
TEVIQjY2LS5MTEZCMzE1NQoJLnVhd29yZAkuTExFSEU2Ni0uTExFSEI2NgoJLnVhd29yZAkuTEw4
NjQtLkxMRkIzMTU1CgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhCNjctLkxMRkIzMTU1CgkudWF3
b3JkCS5MTEVIRTY3LS5MTEVIQjY3CgkudWF3b3JkCS5MTDg2Mi0uTExGQjMxNTUKCS5ieXRlCTB4
MAoJLnVhd29yZAkuTExFSEI2OC0uTExGQjMxNTUKCS51YXdvcmQJLkxMRUhFNjgtLkxMRUhCNjgK
CS51YXdvcmQJMHgwCgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhCNjktLkxMRkIzMTU1CgkudWF3
b3JkCS5MTEVIRTY5LS5MTEVIQjY5CgkudWF3b3JkCTB4MAoJLmJ5dGUJMHgwCgkuc2VjdGlvbgki
LnRleHQiCgkuc2VjdGlvbgkiLnJvZGF0YSIKCS5hbGlnbiA4Ci5MTEM0OgoJLmFzY2l6CSJhbXAi
CgkuYWxpZ24gOAouTExDNToKCS5hc2NpegkibmJzcCIKCS5zZWN0aW9uCSIudGV4dCIKCS5hbGln
biA0CgkuZ2xvYmFsIF9aTjVJbmRleDEyaW5zZXJ0SW5EaWN0RVBLY2kKCS50eXBlCV9aTjVJbmRl
eDEyaW5zZXJ0SW5EaWN0RVBLY2ksICNmdW5jdGlvbgoJLnByb2MJMDIwCl9aTjVJbmRleDEyaW5z
ZXJ0SW5EaWN0RVBLY2k6Ci5MTEZCMzE3NjoKCSEjUFJPTE9HVUUjIDAKCXNhdmUJJXNwLCAtMTM2
LCAlc3AKLkxMQ0ZJODoKCSEjUFJPTE9HVUUjIDEKCXNldGhpCSVoaSguTExDNCksICVvMQoJbW92
CSVpMSwgJW8wCglvcgklbzEsICVsbyguTExDNCksICVvMQoJY2FsbAltZW1jbXAsIDAKCW1vdgk0
LCAlbzIKCWNtcAklbzAsIDAKCWJlCS5MTDg4MwoJc2V0aGkJJWhpKC5MTEM1KSwgJW8xCgltb3YJ
JWkxLCAlbzAKCW9yCSVvMSwgJWxvKC5MTEM1KSwgJW8xCgljYWxsCW1lbWNtcCwgMAoJbW92CTUs
ICVvMgoJY21wCSVvMCwgMAoJYmUJLkxMODgzCglhZGQJJWkwLCA0NCwgJWkwCglsZAlbJWkwKzE2
XSwgJWcxCgljbXAJJWcxLCAwCglibmUsYQkuTEw5NDkKCW1vdgklaTAsICVvMAouTEw4OTA6Ci5M
TEVIQjcwOgoJY2FsbAlfWm53aiwgMAoJbW92CTQsICVvMAouTExFSEU3MDoKCW1vdgkxLCAlbDIK
CW1vdgklbzAsICVsMQouTExFSEI3MToKCWNhbGwJX1pud2osIDAKCW1vdgkxMiwgJW8wCi5MTEVI
RTcxOgouTExFSEI3MjoKCWNhbGwJX1pOMTdRVmFsdWVMaXN0UHJpdmF0ZUk4RG9jdW1lbnRFQzFF
diwgMAoJbW92CSVvMCwgJWwwCi5MTEVIRTcyOgoJbGQJWyVsMF0sICVnMQoJbW92CSVsMCwgJW8w
CgljbXAJJWcxLCAxCglzdGgJJWkyLCBbJWZwLTMyXQoJbW92CTEsICVnMQoJc3QJJWwwLCBbJWwx
XQoJYmd1CS5MTDk1MAoJc3RoCSVnMSwgWyVmcC0zMF0KLkxMOTE5OgoJbGQJWyVvMCs0XSwgJWcx
Ci5MTDk1NjoKCWFkZAklZnAsIC0zMiwgJW8yCglzdAklZzEsIFslZnAtMjRdCglhZGQJJWZwLCAt
MjQsICVvMQoJYWRkCSVmcCwgLTQwLCAlZzEKCXN0CSVnMSwgWyVzcCs2NF0KLkxMRUhCNzM6Cglj
YWxsCV9aTjE3UVZhbHVlTGlzdFByaXZhdGVJOERvY3VtZW50RTZpbnNlcnRFMThRVmFsdWVMaXN0
SXRlcmF0b3JJUzBfRVJLUzBfLCAwCglub3AKCXVuaW1wCTQKLkxMRUhFNzM6Cgltb3YJJWkwLCAl
bzAKCW1vdgklaTEsICVvMQoJbW92CTAsICVsMgoJbW92CSVsMSwgJW8yCi5MTEVIQjc0OgoJY2Fs
bAlfWk42UUdEaWN0MTBsb29rX2FzY2lpRVBLY1B2aSwgMAoJbW92CTEsICVvMwouTExFSEU3NDoK
CWIsYQkuTEw4ODMKLkxMOTUwOgouTExFSEI3NToKCWNhbGwJX1pOMTBRVmFsdWVMaXN0SThEb2N1
bWVudEUxNGRldGFjaEludGVybmFsRXYsIDAKCW1vdgklbDEsICVvMAoJbGQJWyVsMV0sICVvMAoJ
bGQJWyVvMF0sICVnMQoJY21wCSVnMSwgMQoJYmxldSxhCS5MTDk1NgoJbGQJWyVvMCs0XSwgJWcx
CgljYWxsCV9aTjEwUVZhbHVlTGlzdEk4RG9jdW1lbnRFMTRkZXRhY2hJbnRlcm5hbEV2LCAwCglt
b3YJJWwxLCAlbzAKLkxMRUhFNzU6CgliCS5MTDkxOQoJbGQJWyVsMV0sICVvMAouTEw5NDk6Cglt
b3YJJWkxLCAlbzEKCW1vdgkwLCAlbzIKLkxMRUhCNzY6CgljYWxsCV9aTjZRR0RpY3QxMGxvb2tf
YXNjaWlFUEtjUHZpLCAwCgltb3YJMCwgJW8zCglvcmNjCSVvMCwgMCwgJWwwCgliZQkuTEw4OTAK
CW5vcAoJbGQJWyVsMF0sICVvMwoJbGQJWyVvM10sICVnMQoJY21wCSVnMSwgMQoJYmd1CS5MTDk1
MQoJbm9wCi5MTDg5MzoKCWxkCVslbzMrNF0sICVnMQoJbGQJWyVnMV0sICVvNQoJbGRzaAlbJW81
KzhdLCAlbzQKCWNtcAklbzQsICVpMgoJYmUJLkxMODkxCgltb3YJMSwgJWcxCglsZAlbJW8zXSwg
JW81CglzdGgJJWkyLCBbJWZwLTMyXQoJY21wCSVvNSwgMQoJYmd1CS5MTDk1MgoJc3RoCSVnMSwg
WyVmcC0zMF0KLkxMODk5OgoJbGQJWyVvMys0XSwgJWcxCi5MTDk1NzoKCW1vdgklbzMsICVvMAoJ
bGQJWyVnMV0sICVvNQoJYWRkCSVmcCwgLTMyLCAlbzIKCWFkZAklZnAsIC0yNCwgJWcxCglzdAkl
bzUsIFslZnAtNDBdCglhZGQJJWZwLCAtNDAsICVvMQoJc3QJJWcxLCBbJXNwKzY0XQoJY2FsbAlf
Wk4xN1FWYWx1ZUxpc3RQcml2YXRlSThEb2N1bWVudEU2aW5zZXJ0RTE4UVZhbHVlTGlzdEl0ZXJh
dG9ySVMwX0VSS1MwXywgMAoJbm9wCgl1bmltcAk0CgliLGEJLkxMODgzCi5MTDk1MjoKCWNhbGwJ
X1pOMTBRVmFsdWVMaXN0SThEb2N1bWVudEUxNGRldGFjaEludGVybmFsRXYsIDAKCW1vdgklbDAs
ICVvMAoJbGQJWyVsMF0sICVvMwoJbGQJWyVvM10sICVnMQoJY21wCSVnMSwgMQoJYmxldSxhCS5M
TDk1NwoJbGQJWyVvMys0XSwgJWcxCgljYWxsCV9aTjEwUVZhbHVlTGlzdEk4RG9jdW1lbnRFMTRk
ZXRhY2hJbnRlcm5hbEV2LCAwCgltb3YJJWwwLCAlbzAKCWIJLkxMODk5CglsZAlbJWwwXSwgJW8z
Ci5MTDg5MToKCWxkCVslbzNdLCAlZzEKCWNtcAklZzEsIDEKCWJndQkuTEw5NTMKCW5vcAouTEw5
MDU6CglsZAlbJW8zKzRdLCAlZzEKCWxkCVslZzFdLCAlbzUKCWFkZAklbzUsIDgsICVvNQoJbGR1
aAlbJW81KzJdLCAlZzEKCWFkZAklZzEsIDEsICVnMQoJYgkuTEw4ODMKCXN0aAklZzEsIFslbzUr
Ml0KLkxMOTUzOgoJY2FsbAlfWk4xMFFWYWx1ZUxpc3RJOERvY3VtZW50RTE0ZGV0YWNoSW50ZXJu
YWxFdiwgMAoJbW92CSVsMCwgJW8wCgliCS5MTDkwNQoJbGQJWyVsMF0sICVvMwouTEw5NTE6Cglj
YWxsCV9aTjEwUVZhbHVlTGlzdEk4RG9jdW1lbnRFMTRkZXRhY2hJbnRlcm5hbEV2LCAwCgkgbm9w
CgliCS5MTDg5MwoJbGQJWyVsMF0sICVvMwouTEw5NDQ6Ci5MTDkwODoKLkxMOTEyOgouTEw5NDg6
CgljYWxsCV9aZGxQdiwgMAoJbW92CSVsMCwgJW8wCi5MTDkzNzoKCWFuZGNjCSVsMiwgMHhmZiwg
JWcwCi5MTDk1NToKCWJuZQkuTEw5NTQKCW5vcAouTEw5NDA6Ci5MTDk0MToKCWNhbGwJX1Vud2lu
ZF9SZXN1bWUsIDAKCW1vdgklaTAsICVvMAouTExFSEU3NjoKLkxMOTU0OgoJY2FsbAlfWmRsUHYs
IDAKCW1vdgklbDEsICVvMAoJYixhCS5MTDk0MAouTEw5NDM6Ci5MTDkyMzoKCWxkCVslbDFdLCAl
bDAKCWxkCVslbDBdLCAlZzEKCWFkZAklZzEsIC0xLCAlZzEKCWNtcAklZzEsIDAKCWJuZQkuTEw5
MzcKCXN0CSVnMSwgWyVsMF0KLkxMOTMzOgoJY2FsbAlfWk4xN1FWYWx1ZUxpc3RQcml2YXRlSThE
b2N1bWVudEVEMUV2LCAwCgltb3YJJWwwLCAlbzAKCWIsYQkuTEw5NDgKLkxMOTQ1OgoJYgkuTEw5
NTUKCWFuZGNjCSVsMiwgMHhmZiwgJWcwCi5MTDg4MzoKCW5vcAoJcmV0CglyZXN0b3JlCi5MTEZF
MzE3NjoKCS5zaXplCV9aTjVJbmRleDEyaW5zZXJ0SW5EaWN0RVBLY2ksIC4tX1pONUluZGV4MTJp
bnNlcnRJbkRpY3RFUEtjaQoJLnNlY3Rpb24JIi5nY2NfZXhjZXB0X3RhYmxlIiwjYWxsb2MsI3dy
aXRlCi5MTExTREEzMTc2OgoJLmJ5dGUJMHhmZgoJLmJ5dGUJMHhmZgoJLmJ5dGUJMHgzCgkuYnl0
ZQkweDViCgkudWF3b3JkCS5MTEVIQjcwLS5MTEZCMzE3NgoJLnVhd29yZAkuTExFSEU3MC0uTExF
SEI3MAoJLnVhd29yZAkweDAKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEI3MS0uTExGQjMxNzYK
CS51YXdvcmQJLkxMRUhFNzEtLkxMRUhCNzEKCS51YXdvcmQJLkxMOTQ1LS5MTEZCMzE3NgoJLmJ5
dGUJMHgwCgkudWF3b3JkCS5MTEVIQjcyLS5MTEZCMzE3NgoJLnVhd29yZAkuTExFSEU3Mi0uTExF
SEI3MgoJLnVhd29yZAkuTEw5NDQtLkxMRkIzMTc2CgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhC
NzMtLkxMRkIzMTc2CgkudWF3b3JkCS5MTEVIRTczLS5MTEVIQjczCgkudWF3b3JkCS5MTDk0My0u
TExGQjMxNzYKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEI3NC0uTExGQjMxNzYKCS51YXdvcmQJ
LkxMRUhFNzQtLkxMRUhCNzQKCS51YXdvcmQJLkxMOTQ1LS5MTEZCMzE3NgoJLmJ5dGUJMHgwCgku
dWF3b3JkCS5MTEVIQjc1LS5MTEZCMzE3NgoJLnVhd29yZAkuTExFSEU3NS0uTExFSEI3NQoJLnVh
d29yZAkuTEw5NDMtLkxMRkIzMTc2CgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhCNzYtLkxMRkIz
MTc2CgkudWF3b3JkCS5MTEVIRTc2LS5MTEVIQjc2CgkudWF3b3JkCTB4MAoJLmJ5dGUJMHgwCgku
c2VjdGlvbgkiLnRleHQiCgkuc2VjdGlvbgkiLnJvZGF0YSIKCS5hbGlnbiA4Ci5MTEM2OgoJLmFz
Y2l6CSJjYW4gbm90IG9wZW4gZmlsZSAiCgkuc2VjdGlvbgkiLnRleHQiCgkuYWxpZ24gNAoJLmds
b2JhbCBfWk41SW5kZXgxM3BhcnNlRG9jdW1lbnRFUks3UVN0cmluZ2kKCS50eXBlCV9aTjVJbmRl
eDEzcGFyc2VEb2N1bWVudEVSSzdRU3RyaW5naSwgI2Z1bmN0aW9uCgkucHJvYwkwMjAKX1pONUlu
ZGV4MTNwYXJzZURvY3VtZW50RVJLN1FTdHJpbmdpOgouTExGQjMxNzg6CgkhI1BST0xPR1VFIyAw
CglzYXZlCSVzcCwgLTI1NiwgJXNwCi5MTENGSTk6CgkhI1BST0xPR1VFIyAxCgltb3YJJWkxLCAl
bzEKCWFkZAklZnAsIC02NCwgJWwwCi5MTEVIQjc3OgoJY2FsbAlfWk41UUZpbGVDMUVSSzdRU3Ry
aW5nLCAwCgltb3YJJWwwLCAlbzAKLkxMRUhFNzc6Cgltb3YJJWwwLCAlbzAKLkxMRUhCNzg6Cglj
YWxsCV9aTjVRRmlsZTRvcGVuRWksIDAKCW1vdgkxLCAlbzEKCWFuZGNjCSVvMCwgMHhmZiwgJWcw
CglibmUJLkxMOTU5Cgltb3YJMSwgJWkzCglzZXRoaQklaGkoLkxMQzYpLCAlbzAKCWFkZAklZnAs
IC03MiwgJWkzCglvcgklbzAsICVsbyguTExDNiksICVvMAoJc3QJJWkzLCBbJXNwKzY0XQoJbW92
CS0xLCAlbzEKCWNhbGwJX1pON1FTdHJpbmc5ZnJvbUFzY2lpRVBLY2ksIDAKCW5vcAoJdW5pbXAJ
NAouTExFSEU3ODoKCW1vdgklaTEsICVvMQouTExFSEI3OToKCWNhbGwJX1pON1FTdHJpbmdwTEVS
S1NfLCAwCgltb3YJJWkzLCAlbzAKLkxMRUhFNzk6Ci5MTDk2MToKLkxMOTY5OgouTExFSEI4MDoK
CWNhbGwJX1pOSzdRU3RyaW5nNWFzY2lpRXYsIDAKCW1vdgklaTMsICVvMAoJY2FsbAlfWjhxV2Fy
bmluZ1BLY3osIDAKCSBub3AKLkxMRUhFODA6CglsZAlbJWZwLTcyXSwgJW8wCglsZAlbJW8wXSwg
JWcxCglhZGQJJWcxLCAtMSwgJWcxCgljbXAJJWcxLCAwCglibmUJLkxMMTAxNAoJc3QJJWcxLCBb
JW8wXQoJc2V0aGkJJWhpKF9aTjdRU3RyaW5nMTFzaGFyZWRfbnVsbEUpLCAlZzEKCWxkCVslZzEr
JWxvKF9aTjdRU3RyaW5nMTFzaGFyZWRfbnVsbEUpXSwgJW81CgljbXAJJW8wLCAlbzUKCWJlCS5M
TDEwMTQKCW5vcAouTExFSEI4MToKCWNhbGwJX1pOMTFRU3RyaW5nRGF0YTEwZGVsZXRlU2VsZkV2
LCAwCgkgbm9wCgliLGEJLkxMMTAxNAouTEw5NTk6CgljYWxsCV9aTjVRRmlsZTVnZXRjaEV2LCAw
Cgltb3YJJWwwLCAlbzAKCXN0aAklbzAsIFslZnAtMTQ0XQoJbW92CTAsICVpMQoJYWRkCSVmcCwg
LTE2LCAlbDEKLkxMMTAyMDoKCWNhbGwJX1pOSzVRRmlsZTVhdEVuZEV2LCAwCgltb3YJJWwwLCAl
bzAKCWFuZGNjCSVvMCwgMHhmZiwgJWcwCglibmUJLkxMMTAyNgoJbGR1aAlbJWZwLTE0NF0sICVv
NQoJc2xsCSVvNSwgMTYsICVnMQoJc3JsCSVnMSwgMTYsICVnMQoJY21wCSVnMSwgNjAKCWJuZQku
TEw5OTIKCXN0aAklbzUsIFslZnAtMTUyXQoJYWRkCSVsMSwgJWkxLCAlZzEKCWNtcAklaTEsIDEK
CXN0YgklZzAsIFslZzEtMTIwXQoJbW92CTAsICVpMwouTEwxMDI1OgoJYmcJLkxMMTAyNwoJbW92
CTAsICVpMQouTEwxMDA4OgouTEwxMDMxOgoJY2FsbAlfWk41UUZpbGU1Z2V0Y2hFdiwgMAoJbW92
CSVsMCwgJW8wCglzdGgJJW8wLCBbJWZwLTE0NF0KCWIJLkxMMTAyMAoJc3RoCSVvMCwgWyVmcC0x
NjBdCi5MTDEwMjc6Cgltb3YJJWkwLCAlbzAKCWFkZAklZnAsIC0xMzYsICVvMQoJY2FsbAlfWk41
SW5kZXgxMmluc2VydEluRGljdEVQS2NpLCAwCgltb3YJJWkyLCAlbzIKCWIJLkxMMTAzMQoJbW92
CTAsICVpMQouTEw5OTI6CgljbXAJJWcxLCA2MgoJc3RoCSVvNSwgWyVmcC0xNjBdCglibmUJLkxM
OTk4Cgltb3YJMCwgJWcxCglhbmRjYwklaTMsIDB4ZmYsICVnMAoJYmUsYQkuTEw5OTgKCW1vdgkx
LCAlZzEKLkxMOTk4OgoJYW5kY2MJJWcxLCAweGZmLCAlZzAKCWJuZQkuTEwxMDI4CglhbmRjYwkl
aTMsIDB4ZmYsICVnMAoJYmUJLkxMMTAwOAoJYWRkCSVmcCwgLTE0NCwgJWwyCgljYWxsCV9aTks1
UUNoYXIxNmlzTGV0dGVyT3JOdW1iZXJFdiwgMAoJbW92CSVsMiwgJW8wCglhbmRjYwklbzAsIDB4
ZmYsICVnMAoJYmUJLkxMMTAzMgoJYWRkCSVsMSwgJWkxLCAlZzEKCWNtcAklaTEsIDYyCglibGUJ
LkxMMTAyOQoJbW92CSVsMiwgJW8wCi5MTDEwMzI6CgljbXAJJWkxLCAxCgliCS5MTDEwMjUKCXN0
YgklZzAsIFslZzEtMTIwXQouTEwxMDI5OgoJYWRkCSVmcCwgLTE2MCwgJWcxCglhZGQJJWwxLCAl
aTEsICVsMgoJc3QJJWcxLCBbJXNwKzY0XQoJY2FsbAlfWk5LNVFDaGFyNWxvd2VyRXYsIDAKCW5v
cAoJdW5pbXAJMgoJbGR1aAlbJWZwLTE2MF0sICVnMQoJY21wCSVnMSwgMjU1CgliZ3UJLkxMMTAw
NwoJbW92CTAsICVvNQoJbGRzYglbJWZwLTE1OV0sICVvNQouTEwxMDA3OgoJc3RiCSVvNSwgWyVs
Mi0xMjBdCgliCS5MTDEwMDgKCWFkZAklaTEsIDEsICVpMQouTEwxMDI4OgoJbW92CTEsICVpMwoJ
Y2FsbAlfWk41UUZpbGU1Z2V0Y2hFdiwgMAoJbW92CSVsMCwgJW8wCglzdGgJJW8wLCBbJWZwLTE0
NF0KCWIJLkxMMTAyMAoJc3RoCSVvMCwgWyVmcC0xNTJdCi5MTDEwMjY6CgljbXAJJWkxLCAxCgli
bGUJLkxMMTAxMgoJbW92CSVpMiwgJW8yCgltb3YJJWkwLCAlbzAKCWNhbGwJX1pONUluZGV4MTJp
bnNlcnRJbkRpY3RFUEtjaSwgMAoJYWRkCSVmcCwgLTEzNiwgJW8xCi5MTDEwMTI6CgljYWxsCV9a
TjVRRmlsZTVjbG9zZUV2LCAwCgltb3YJJWwwLCAlbzAKLkxMRUhFODE6CgliLGEJLkxMMTAxNAou
TEwxMDE4OgouTEwxMDE3OgouTEw5NzI6CglsZAlbJWZwLTcyXSwgJW8wCglsZAlbJW8wXSwgJWcx
CglhZGQJJWcxLCAtMSwgJWcxCgljbXAJJWcxLCAwCgliZQkuTEwxMDMwCglzdAklZzEsIFslbzBd
Ci5MTDEwMTM6Ci5MTDEwMTU6CgljYWxsCV9aTjVRRmlsZUQxRXYsIDAKCW1vdgklbDAsICVvMAou
TExFSEI4MjoKCWNhbGwJX1Vud2luZF9SZXN1bWUsIDAKCW1vdgklaTAsICVvMAouTExFSEU4MjoK
LkxMMTAzMDoKCXNldGhpCSVoaShfWk43UVN0cmluZzExc2hhcmVkX251bGxFKSwgJWcxCglsZAlb
JWcxKyVsbyhfWk43UVN0cmluZzExc2hhcmVkX251bGxFKV0sICVvNQoJY21wCSVvMCwgJW81Cgli
ZQkuTEwxMDEzCglub3AKLkxMOTgwOgoJY2FsbAlfWk4xMVFTdHJpbmdEYXRhMTBkZWxldGVTZWxm
RXYsIDAKCWFkZAklbzcsICguTEwxMDEzLS4tNCksICVvNwouTEwxMDE5OgoJYixhCS5MTDEwMTMK
LkxMMTAxNDoKLkxMRUhCODM6CgljYWxsCV9aTjVRRmlsZUQxRXYsIDAKCW1vdgklbDAsICVvMAou
TExFSEU4MzoKCW5vcAoJcmV0CglyZXN0b3JlCi5MTEZFMzE3ODoKCS5zaXplCV9aTjVJbmRleDEz
cGFyc2VEb2N1bWVudEVSSzdRU3RyaW5naSwgLi1fWk41SW5kZXgxM3BhcnNlRG9jdW1lbnRFUks3
UVN0cmluZ2kKCS5zZWN0aW9uCSIuZ2NjX2V4Y2VwdF90YWJsZSIsI2FsbG9jLCN3cml0ZQouTExM
U0RBMzE3ODoKCS5ieXRlCTB4ZmYKCS5ieXRlCTB4ZmYKCS5ieXRlCTB4MwoJLmJ5dGUJMHg1YgoJ
LnVhd29yZAkuTExFSEI3Ny0uTExGQjMxNzgKCS51YXdvcmQJLkxMRUhFNzctLkxMRUhCNzcKCS51
YXdvcmQJMHgwCgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhCNzgtLkxMRkIzMTc4CgkudWF3b3Jk
CS5MTEVIRTc4LS5MTEVIQjc4CgkudWF3b3JkCS5MTDEwMTktLkxMRkIzMTc4CgkuYnl0ZQkweDAK
CS51YXdvcmQJLkxMRUhCNzktLkxMRkIzMTc4CgkudWF3b3JkCS5MTEVIRTc5LS5MTEVIQjc5Cgku
dWF3b3JkCS5MTDEwMTgtLkxMRkIzMTc4CgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhCODAtLkxM
RkIzMTc4CgkudWF3b3JkCS5MTEVIRTgwLS5MTEVIQjgwCgkudWF3b3JkCS5MTDEwMTctLkxMRkIz
MTc4CgkuYnl0ZQkweDAKCS51YXdvcmQJLkxMRUhCODEtLkxMRkIzMTc4CgkudWF3b3JkCS5MTEVI
RTgxLS5MTEVIQjgxCgkudWF3b3JkCS5MTDEwMTktLkxMRkIzMTc4CgkuYnl0ZQkweDAKCS51YXdv
cmQJLkxMRUhCODItLkxMRkIzMTc4CgkudWF3b3JkCS5MTEVIRTgyLS5MTEVIQjgyCgkudWF3b3Jk
CTB4MAoJLmJ5dGUJMHgwCgkudWF3b3JkCS5MTEVIQjgzLS5MTEZCMzE3OAoJLnVhd29yZAkuTExF
SEU4My0uTExFSEI4MwoJLnVhd29yZAkweDAKCS5ieXRlCTB4MAoJLnNlY3Rpb24JIi50ZXh0IgoJ
LmFsaWduIDQKCS5nbG9iYWwgX1pONUluZGV4OXdyaXRlRGljdEV2CgkudHlwZQlfWk41SW5kZXg5
d3JpdGVEaWN0RXYsICNmdW5jdGlvbgoJLnByb2MJMDIwCl9aTjVJbmRleDl3cml0ZURpY3RFdjoK
LkxMRkIzMTg5OgoJISNQUk9MT0dVRSMgMAoJc2F2ZQklc3AsIC0yMDAsICVzcAouTExDRkkxMDoK
CSEjUFJPTE9HVUUjIDEKLkxMMTAzNDoKLkxMMTAzNjoKCWFkZAklaTAsIDQ0LCAlbzEKCWFkZAkl
ZnAsIC0zMiwgJWwxCgltb3YJJWwxLCAlbzAKLkxMRUhCODQ6CgljYWxsCV9aTjE0UUdEaWN0SXRl
cmF0b3JDMkVSSzZRR0RpY3QsIDAKCWFkZAklZnAsIC04MCwgJWwwCi5MTEVIRTg0OgoJYWRkCSVp
MCwgMTEyLCAlbzEKLkxMRUhCODU6CgljYWxsCV9aTjVRRmlsZUMxRVJLN1FTdHJpbmcsIDAKCW1v
dgklbDAsICVvMAouTExFSEU4NToKCW1vdgklbDAsICVvMAouTExFSEI4NjoKCWNhbGwJX1pONVFG
aWxlNG9wZW5FaSwgMAoJbW92CTIsICVvMQoJYW5kY2MJJW8wLCAweGZmLCAlZzAKCWJlCS5MTDEw
NjYKCW1vdgklbDAsICVvMQouTEwxMDg4OgouTEwxMDkwOgoJYWRkCSVmcCwgLTEwNCwgJWwyCglj
YWxsCV9aTjExUURhdGFTdHJlYW1DMUVQOVFJT0RldmljZSwgMAoJbW92CSVsMiwgJW8wCi5MTEVI
RTg2OgoJbGQJWyVmcC0yOF0sICVnMQouTEwxMDk4OgoJY21wCSVnMSwgMAoJYmUJLkxMMTA0NwoJ
bW92CTAsICVvNQoJbGQJWyVnMV0sICVvNQouTEwxMDQ3OgoJY21wCSVvNSwgMAoJYmUJLkxMMTA5
NwoJY21wCSVnMSwgMAoJYmUJLkxMMTA5OQoJbW92CTAsICVpMwoJbGQJWyVnMV0sICVpMwoJY21w
CSVnMSwgMAouTEwxMDk5OgoJYmUJLkxMMTA1NwoJbW92CTAsICVvMQoJbGQJWyVnMSs4XSwgJW8x
Ci5MTDEwNTc6Ci5MTEVIQjg3OgoJY2FsbAlfWk4xMVFEYXRhU3RyZWFtbHNFUEtjLCAwCgltb3YJ
JWwyLCAlbzAKCW1vdgklaTMsICVvMQoJY2FsbAlfWmxzSThEb2N1bWVudEVSMTFRRGF0YVN0cmVh
bVMyX1JLMTBRVmFsdWVMaXN0SVRfRSwgMAoJbW92CSVsMiwgJW8wCgljYWxsCV9aTjE0UUdEaWN0
SXRlcmF0b3JwcEV2LCAwCgltb3YJJWwxLCAlbzAKCWIJLkxMMTA5OAoJbGQJWyVmcC0yOF0sICVn
MQouTEwxMDk3OgoJY2FsbAlfWk41UUZpbGU1Y2xvc2VFdiwgMAoJbW92CSVsMCwgJW8wCgljYWxs
CV9aTjVJbmRleDE3d3JpdGVEb2N1bWVudExpc3RFdiwgMAoJbW92CSVpMCwgJW8wCi5MTEVIRTg3
OgouTExFSEI4ODoKCWNhbGwJX1pOMTFRRGF0YVN0cmVhbUQxRXYsIDAKCW1vdgklbDIsICVvMAou
TExFSEU4ODoKLkxMMTA2NjoKLkxMRUhCODk6CgljYWxsCV9aTjVRRmlsZUQxRXYsIDAKCW1vdgkl
bDAsICVvMAouTExFSEU4OToKCWIsYQkuTEwxMDcwCi5MTDEwOTQ6Ci5MTDEwNjE6Ci5MTDEwNjM6
CgljYWxsCV9aTjExUURhdGFTdHJlYW1EMUV2LCAwCgltb3YJJWwyLCAlbzAKLkxMMTA2NToKLkxM
MTA2NzoKCWNhbGwJX1pONVFGaWxlRDFFdiwgMAoJbW92CSVsMCwgJW8wCi5MTDEwNjk6Ci5MTDEw
NzI6Ci5MTDEwNzQ6Ci5MTDEwNzg6CgljYWxsCV9aTjE0UUdEaWN0SXRlcmF0b3JEMkV2LCAwCglt
b3YJJWwxLCAlbzAKLkxMRUhCOTA6CgljYWxsCV9VbndpbmRfUmVzdW1lLCAwCgltb3YJJWkwLCAl
bzAKLkxMMTA5NToKCWIsYQkuTEwxMDY1Ci5MTDEwOTY6CgliLGEJLkxMMTA2OQouTEwxMDcwOgou
TEwxMDgxOgouTEwxMDgzOgoJY2FsbAlfWk4xNFFHRGljdEl0ZXJhdG9yRDJFdiwgMAoJbW92CSVs
MSwgJW8wCi5MTEVIRTkwOgoJbm9wCglyZXQKCXJlc3RvcmUKLkxMRkUzMTg5OgoJLnNpemUJX1pO
NUluZGV4OXdyaXRlRGljdEV2LCAuLV9aTjVJbmRleDl3cml0ZURpY3RFdgoJLnNlY3Rpb24JIi5n
Y2NfZXhjZXB0X3RhYmxlIiwjYWxsb2MsI3dyaXRlCi5MTExTREEzMTg5OgoJLmJ5dGUJMHhmZgoJ
LmJ5dGUJMHhmZgoJLmJ5dGUJMHgzCgkuYnl0ZQkweDViCgkudWF3b3JkCS5MTEVIQjg0LS5MTEZC
MzE4OQoJLnVhd29yZAkuTExFSEU4NC0uTExFSEI4NAoJLnVhd29yZAkweDAKCS5ieXRlCTB4MAoJ
LnVhd29yZAkuTExFSEI4NS0uTExGQjMxODkKCS51YXdvcmQJLkxMRUhFODUtLkxMRUhCODUKCS51
YXdvcmQJLkxMMTA5Ni0uTExGQjMxODkKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEI4Ni0uTExG
QjMxODkKCS51YXdvcmQJLkxMRUhFODYtLkxMRUhCODYKCS51YXdvcmQJLkxMMTA5NS0uTExGQjMx
ODkKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEI4Ny0uTExGQjMxODkKCS51YXdvcmQJLkxMRUhF
ODctLkxMRUhCODcKCS51YXdvcmQJLkxMMTA5NC0uTExGQjMxODkKCS5ieXRlCTB4MAoJLnVhd29y
ZAkuTExFSEI4OC0uTExGQjMxODkKCS51YXdvcmQJLkxMRUhFODgtLkxMRUhCODgKCS51YXdvcmQJ
LkxMMTA5NS0uTExGQjMxODkKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEI4OS0uTExGQjMxODkK
CS51YXdvcmQJLkxMRUhFODktLkxMRUhCODkKCS51YXdvcmQJLkxMMTA5Ni0uTExGQjMxODkKCS5i
eXRlCTB4MAoJLnVhd29yZAkuTExFSEI5MC0uTExGQjMxODkKCS51YXdvcmQJLkxMRUhFOTAtLkxM
RUhCOTAKCS51YXdvcmQJMHgwCgkuYnl0ZQkweDAKCS5zZWN0aW9uCSIudGV4dCIKCS5hbGlnbiA0
CgkuZ2xvYmFsIF9aTjVJbmRleDE3d3JpdGVEb2N1bWVudExpc3RFdgoJLnR5cGUJX1pONUluZGV4
MTd3cml0ZURvY3VtZW50TGlzdEV2LCAjZnVuY3Rpb24KCS5wcm9jCTAyMApfWk41SW5kZXgxN3dy
aXRlRG9jdW1lbnRMaXN0RXY6Ci5MTEZCMzE5MToKCSEjUFJPTE9HVUUjIDAKCXNhdmUJJXNwLCAt
MTg0LCAlc3AKLkxMQ0ZJMTE6CgkhI1BST0xPR1VFIyAxCglhZGQJJWkwLCAxMTYsICVvMQoJYWRk
CSVmcCwgLTY0LCAlbDAKLkxMRUhCOTE6CgljYWxsCV9aTjVRRmlsZUMxRVJLN1FTdHJpbmcsIDAK
CW1vdgklbDAsICVvMAouTExFSEU5MToKCW1vdgklbDAsICVvMAouTExFSEI5MjoKCWNhbGwJX1pO
NVFGaWxlNG9wZW5FaSwgMAoJbW92CTIsICVvMQoJYW5kY2MJJW8wLCAweGZmLCAlZzAKCWJlCS5M
TDExMDcKCWFkZAklZnAsIC04OCwgJWwxCgltb3YJJWwwLCAlbzEKCWNhbGwJX1pOMTFRRGF0YVN0
cmVhbUMxRVA5UUlPRGV2aWNlLCAwCgltb3YJJWwxLCAlbzAKLkxMRUhFOTI6CglhZGQJJWkwLCA0
MCwgJW8xCi5MTEVIQjkzOgoJY2FsbAlfWmxzUjExUURhdGFTdHJlYW1SSzExUVN0cmluZ0xpc3Qs
IDAKCW1vdgklbDEsICVvMAouTExFSEU5MzoKLkxMRUhCOTQ6CgljYWxsCV9aTjExUURhdGFTdHJl
YW1EMUV2LCAwCgltb3YJJWwxLCAlbzAKLkxMRUhFOTQ6CgliLGEJLkxMMTEwNwouTEwxMTEwOgou
TEwxMTAyOgouTEwxMTA0OgoJY2FsbAlfWk4xMVFEYXRhU3RyZWFtRDFFdiwgMAoJbW92CSVsMSwg
JW8wCi5MTDExMDY6Ci5MTDExMDg6CgljYWxsCV9aTjVRRmlsZUQxRXYsIDAKCW1vdgklbDAsICVv
MAouTExFSEI5NToKCWNhbGwJX1Vud2luZF9SZXN1bWUsIDAKCW1vdgklaTAsICVvMAouTEwxMTEx
OgoJYixhCS5MTDExMDYKLkxMMTEwNzoKCWNhbGwJX1pONVFGaWxlRDFFdiwgMAoJbW92CSVsMCwg
JW8wCi5MTEVIRTk1OgoJbm9wCglyZXQKCXJlc3RvcmUKLkxMRkUzMTkxOgoJLnNpemUJX1pONUlu
ZGV4MTd3cml0ZURvY3VtZW50TGlzdEV2LCAuLV9aTjVJbmRleDE3d3JpdGVEb2N1bWVudExpc3RF
dgoJLnNlY3Rpb24JIi5nY2NfZXhjZXB0X3RhYmxlIiwjYWxsb2MsI3dyaXRlCi5MTExTREEzMTkx
OgoJLmJ5dGUJMHhmZgoJLmJ5dGUJMHhmZgoJLmJ5dGUJMHgzCgkuYnl0ZQkweDQxCgkudWF3b3Jk
CS5MTEVIQjkxLS5MTEZCMzE5MQoJLnVhd29yZAkuTExFSEU5MS0uTExFSEI5MQoJLnVhd29yZAkw
eDAKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEI5Mi0uTExGQjMxOTEKCS51YXdvcmQJLkxMRUhF
OTItLkxMRUhCOTIKCS51YXdvcmQJLkxMMTExMS0uTExGQjMxOTEKCS5ieXRlCTB4MAoJLnVhd29y
ZAkuTExFSEI5My0uTExGQjMxOTEKCS51YXdvcmQJLkxMRUhFOTMtLkxMRUhCOTMKCS51YXdvcmQJ
LkxMMTExMC0uTExGQjMxOTEKCS5ieXRlCTB4MAoJLnVhd29yZAkuTExFSEI5NC0uTExGQjMxOTEK
CS51YXdvcmQJLkxMRUhFOTQtLkxMRUhCOTQKCS51YXdvcmQJLkxMMTExMS0uTExGQjMxOTEKCS5i
eXRlCTB4MAoJLnVhd29yZAkuTExFSEI5NS0uTExGQjMxOTEKCS51YXdvcmQJLkxMRUhFOTUtLkxM
RUhCOTUKCS51YXdvcmQJMHgwCgkuYnl0ZQkweDAKCS5zZWN0aW9uCSIudGV4dCIKAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-01-24 18:56 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-01-24 18:56 c++/9435: index.h:57: internal compiler error: in simplify_gen_subreg, at simplify-rtx.c sbourji

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).