public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-21 10:32 neil
0 siblings, 0 replies; 11+ messages in thread
From: neil @ 2002-03-21 10:32 UTC (permalink / raw)
To: gcc-bugs, gcc-prs, mdeil, nobody
Synopsis: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
State-Changed-From-To: open->closed
State-Changed-By: neil
State-Changed-When: Thu Mar 21 10:32:41 2002
State-Changed-Why:
Almost certainly not a compiler bug, but user error of some subtle kind (agreed with submitter).
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6001
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-26 2:16 Mario Deilmann
0 siblings, 0 replies; 11+ messages in thread
From: Mario Deilmann @ 2002-03-26 2:16 UTC (permalink / raw)
To: nobody; +Cc: gcc-prs
The following reply was made to PR c++/6001; it has been noted by GNATS.
From: Mario Deilmann <Mario.Deilmann@pallas.com>
To: Neil Booth <neil@daikokuya.demon.co.uk>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Tue, 26 Mar 2002 11:05:14 +0100 (MET)
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.
---559023410-758783491-1017137114=:8152
Content-Type: TEXT/PLAIN; charset=US-ASCII
Neil,
here comes the output of
g++ -Wall -E buffer.cc > out_ok
g++ -Wall -E buffer.cpp > out_notok
I'll sent you in my previous mail the output you suggested me to look at -
sorry for the misunderstanding.
> I'm quite sure there are no bugs in this part of CPP. People use it in
> millions of situations every day.
That's of course no argument to be error-free !
> > You don't need to replicate my system. With the source code example I send
> > you you could replicate the error on a lot of systems.
>
> I can't, on g++ on Linux I get:
>
> $ g++ -c -Wall buffer.cpp
> buffer.cpp: In method `char TSourceBuffer::GetLine()':
> buffer.cpp:137: warning: unused variable `int lineNumber'
> $
>
> in both directories error/ and no-error/ of your tarball.
>
OK, that a simple warning no problem at all, uncomment the variable to
avoid the warning.
On Suse 7.2 with gcc 2.95.3 and on RedHat 7.2 with gcc 2.96 I also get no
error with both versions ? Mmmh, maybe I tested it with a gcc >= 3.00. But
I cannot access this machine at the moment sorry. So the only machine
where I can reproduce it is the Sun Solaris machine. Maybe I updated my
linux boxes to early.
I try to install gcc 3.0.4 in the meantime on Linux though it failed under
Solaris with the gcc 3.0.0 maybe that's a hint - but this is another bug
report.
>
> No, that is not preprocessed source. You sent me the include trace,
> which was *completely different for the two compilers*. How can you
> expect to get the same result when the compilers are reading different
> header files?
This is definetly wrong !!!
The version of the programm includes the following headers in the file
buffer.cc and this is ok for g++ 3.0.0.
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <fstream.h>
#include <iostream>
#include "common.h"
#include "misc.h"
#include "error.h"
#include "buffer.h"
using namespace std ;
The other version buffer.cpp includes (and this is not ok for g++ 3.0.0
but for CC 5.0)
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <time.h>
#include "common.h"
in common.h
#include "misc.h"
#include "buffer.h"
in buffer.h
#include <fstream.h>
#include <stdio.h>
#include <string.h>
#include "misc.h"
#include "error.h"
So you end up with the same headers in a different sequence !
Both programs include only the following headers NO others.
system headers:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <time.h>
#include <fstream.h>
#include <stdio.h>
#include <string.h>
and
#include "common.h"
#include "misc.h"
#include "error.h"
#include "buffer.h"
> How can you expect to get the same result when the compilers are reading
> different header files?
I expect the same results due to the fact that the include sequence in a
given C/C++ programm should be of no relevance (if there are no
dependecies - and that's what I expect from the system headers).
Furthermore the program with the nested include sequence causes an error
in different system headers not in the user code. It's vivid that you get
different traces though the include sequence is different.
-- Mario
---559023410-758783491-1017137114=:8152
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=out_notok
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.SOL.3.95q.1020326110513.8152E@pooh>
Content-Description:
IyAyMCAiYnVmZmVyLmNwcCINCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0
ZGlvLmgiIDEgMyA0DQojIDE0ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8u
aCIgMyA0DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAz
IDQNCiMgNDMgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMyA0DQp0
eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0Ow0KIyAx
NSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0DQojIDM0ICIv
aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0DQojcHJhZ21hIGlkZW50
ICJAKCMpc3RkaW8uaAkxLjY5CTk4LzA3LzEzIFNNSSINCg0KIyAxICIvdXNy
L2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTMgIi91
c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAzIDQNCiNwcmFnbWEg
aWRlbnQgIkAoIylmZWF0dXJlX3Rlc3RzLmgJMS4xNwk5Ny8xMi8wNCBTTUki
DQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNA0K
IyA5ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNA0KI3ByYWdt
YSBpZGVudCAiQCgjKWlzYV9kZWZzLmgJMS4xNgk5OS8wNS8yNSBTTUkiDQoj
IDE0OCAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAzIDQNCmV4dGVy
biAiQyIgew0KIyAzMzAgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIg
MyA0DQp9DQojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMu
aCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgMTc1ICIvdXNyL2luY2x1
ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMyA0DQp9DQojIDM3ICIvaG9tZS9t
ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
My4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRl
L3N5cy92YV9saXN0LmgiIDEgMyA0DQojIDkgIi91c3IvaW5jbHVkZS9zeXMv
dmFfbGlzdC5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIyl2YV9saXN0LmgJ
MS4xMQk5Ny8xMS8yMiBTTUkiDQojIDIyICIvdXNyL2luY2x1ZGUvc3lzL3Zh
X2xpc3QuaCIgMyA0DQpleHRlcm4gIkMiIHsNCg0KDQoNCnR5cGVkZWYgdm9p
ZCAqX192YV9saXN0Ow0KDQoNCg0KDQoNCn0NCiMgMzggIi9ob21lL21kZWls
L2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAv
aW5jbHVkZS9zdGRpby5oIiAyIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvc3Rk
aW9fdGFnLmgiIDEgMyA0DQojIDkgIi91c3IvaW5jbHVkZS9zdGRpb190YWcu
aCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpc3RkaW9fdGFnLmgJMS4zCTk4
LzA0LzIwIFNNSSINCg0KDQpleHRlcm4gIkMiIHsNCiMgMjEgIi91c3IvaW5j
bHVkZS9zdGRpb190YWcuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBGSUxFIF9f
RklMRTsNCg0KDQoNCn0NCiMgMzkgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRp
by5oIiAyIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAx
IDMgNA0KIyA5ICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAzIDQNCiNw
cmFnbWEgaWRlbnQgIkAoIylzdGRpb19pbXBsLmgJMS44CTk5LzA2LzMwIFNN
SSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0
DQojIDEyICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAyIDMgNA0KDQoN
CmV4dGVybiAiQyIgew0KDQoNCg0KDQoNCg0KDQp0eXBlZGVmIGludCBzc2l6
ZV90Ow0KIyAzOCAiL3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwuaCIgMyA0DQpz
dHJ1Y3QgRklMRQ0Kew0KDQoNCg0KDQogICAgICAgIHNzaXplX3QgX2NudDsN
CiAgICAgICAgdW5zaWduZWQgY2hhciAqX3B0cjsNCg0KICAgICAgICB1bnNp
Z25lZCBjaGFyICpfYmFzZTsNCiAgICAgICAgdW5zaWduZWQgY2hhciBfZmxh
ZzsNCiAgICAgICAgdW5zaWduZWQgY2hhciBfZmlsZTsNCiAgICAgICAgdW5z
aWduZWQgX19vcmllbnRhdGlvbjoyOw0KICAgICAgICB1bnNpZ25lZCBfX2lv
bm9sb2NrOjE7DQogICAgICAgIHVuc2lnbmVkIF9fZmlsbGVyOjU7DQp9Ow0K
DQoNCg0KDQp9DQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIg
MiAzIDQNCiMgNTAgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQN
CmV4dGVybiAiQyIgew0KDQoNCg0KDQp0eXBlZGVmIF9fRklMRSBGSUxFOw0K
DQoNCg0KDQoNCg0KDQp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7DQoj
IDc0ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0DQp0eXBlZGVm
IGxvbmcgbG9uZyBfX2xvbmdsb25nX3Q7DQojIDg4ICIvaG9tZS9tZGVpbC9i
aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu
Y2x1ZGUvc3RkaW8uaCIgMyA0DQp0eXBlZGVmIGxvbmcgb2ZmX3Q7DQoNCg0K
DQoNCg0KDQoNCnR5cGVkZWYgX19sb25nbG9uZ190IG9mZjY0X3Q7DQoNCg0K
DQoNCg0KDQp0eXBlZGVmIGxvbmcgZnBvc190Ow0KDQoNCg0KDQoNCg0KDQp0
eXBlZGVmIF9fbG9uZ2xvbmdfdCBmcG9zNjRfdDsNCiMgMTMyICIvaG9tZS9t
ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
My4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0DQp0eXBlZGVmIF9fdmFfbGlzdCBf
X25vdF92YV9saXN0X187DQojIDIwMyAiL2hvbWUvbWRlaWwvYmluLy4uL2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0
ZGlvLmgiIDMgNA0KZXh0ZXJuIEZJTEUgX19pb2JbMjBdOw0KIyAyMTUgIi9o
b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCmV4dGVybiB1bnNpZ25l
ZCBjaGFyIF9zaWJ1ZltdLCBfc29idWZbXTsNCiMgMjQ0ICIvaG9tZS9tZGVp
bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w
L2luY2x1ZGUvc3RkaW8uaCIgMyA0DQpleHRlcm4gdW5zaWduZWQgY2hhciAq
X2J1ZmVuZHRhYltdOw0KZXh0ZXJuIEZJTEUgKl9sYXN0YnVmOw0KIyAyNzUg
Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCmV4dGVybiBpbnQg
cmVtb3ZlKGNvbnN0IGNoYXIgKik7DQpleHRlcm4gaW50IHJlbmFtZShjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gRklMRSAqdG1wZmls
ZSh2b2lkKTsNCmV4dGVybiBjaGFyICp0bXBuYW0oY2hhciAqKTsNCg0KZXh0
ZXJuIGNoYXIgKnRtcG5hbV9yKGNoYXIgKik7DQoNCmV4dGVybiBpbnQgZmNs
b3NlKEZJTEUgKik7DQpleHRlcm4gaW50IGZmbHVzaChGSUxFICopOw0KZXh0
ZXJuIEZJTEUgKmZvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsN
CmV4dGVybiBGSUxFICpmcmVvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh
ciAqLCBGSUxFICopOw0KZXh0ZXJuIHZvaWQgc2V0YnVmKEZJTEUgKiwgY2hh
ciAqKTsNCg0KDQpleHRlcm4gdm9pZCBzZXRidWZmZXIoRklMRSAqLCBjaGFy
ICosIHNpemVfdCk7DQpleHRlcm4gaW50IHNldGxpbmVidWYoRklMRSAqKTsN
Cg0KZXh0ZXJuIGludCBzZXR2YnVmKEZJTEUgKiwgY2hhciAqLCBpbnQsIHNp
emVfdCk7DQoNCmV4dGVybiBpbnQgZnByaW50ZihGSUxFICosIGNvbnN0IGNo
YXIgKiwgLi4uKTsNCg0KZXh0ZXJuIGludCBmc2NhbmYoRklMRSAqLCBjb25z
dCBjaGFyICosIC4uLik7DQoNCmV4dGVybiBpbnQgcHJpbnRmKGNvbnN0IGNo
YXIgKiwgLi4uKTsNCg0KZXh0ZXJuIGludCBzY2FuZihjb25zdCBjaGFyICos
IC4uLik7DQoNCg0KDQoNCmV4dGVybiBpbnQgc25wcmludGYoY2hhciAqLCBz
aXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsNCg0KDQpleHRlcm4gaW50IHNw
cmludGYoY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7DQoNCmV4dGVybiBp
bnQgc3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOw0K
ZXh0ZXJuIGludCB2ZnByaW50ZihGSUxFICosIGNvbnN0IGNoYXIgKiwgX19n
bnVjX3ZhX2xpc3QpOw0KZXh0ZXJuIGludCB2cHJpbnRmKGNvbnN0IGNoYXIg
KiwgX19nbnVjX3ZhX2xpc3QpOw0KDQoNCg0KZXh0ZXJuIGludCB2c25wcmlu
dGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xp
c3QpOw0KDQpleHRlcm4gaW50IHZzcHJpbnRmKGNoYXIgKiwgY29uc3QgY2hh
ciAqLCBfX2dudWNfdmFfbGlzdCk7DQpleHRlcm4gaW50IGZnZXRjKEZJTEUg
Kik7DQpleHRlcm4gY2hhciAqZmdldHMoY2hhciAqLCBpbnQsIEZJTEUgKik7
DQpleHRlcm4gaW50IGZwdXRjKGludCwgRklMRSAqKTsNCmV4dGVybiBpbnQg
ZnB1dHMoY29uc3QgY2hhciAqLCBGSUxFICopOw0KZXh0ZXJuIGludCBnZXRj
KEZJTEUgKik7DQpleHRlcm4gaW50IGdldGNoYXIodm9pZCk7DQpleHRlcm4g
Y2hhciAqZ2V0cyhjaGFyICopOw0KZXh0ZXJuIGludCBwdXRjKGludCwgRklM
RSAqKTsNCmV4dGVybiBpbnQgcHV0Y2hhcihpbnQpOw0KZXh0ZXJuIGludCBw
dXRzKGNvbnN0IGNoYXIgKik7DQpleHRlcm4gaW50IHVuZ2V0YyhpbnQsIEZJ
TEUgKik7DQpleHRlcm4gc2l6ZV90IGZyZWFkKHZvaWQgKiwgc2l6ZV90LCBz
aXplX3QsIEZJTEUgKik7DQpleHRlcm4gc2l6ZV90IGZ3cml0ZShjb25zdCB2
b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOw0KZXh0ZXJuIGludCBm
Z2V0cG9zKEZJTEUgKiwgZnBvc190ICopOw0KZXh0ZXJuIGludCBmc2VlayhG
SUxFICosIGxvbmcsIGludCk7DQpleHRlcm4gaW50IGZzZXRwb3MoRklMRSAq
LCBjb25zdCBmcG9zX3QgKik7DQpleHRlcm4gbG9uZyBmdGVsbChGSUxFICop
Ow0KZXh0ZXJuIHZvaWQgcmV3aW5kKEZJTEUgKik7DQpleHRlcm4gdm9pZCBj
bGVhcmVycihGSUxFICopOw0KZXh0ZXJuIGludCBmZW9mKEZJTEUgKik7DQpl
eHRlcm4gaW50IGZlcnJvcihGSUxFICopOw0KZXh0ZXJuIHZvaWQgcGVycm9y
KGNvbnN0IGNoYXIgKik7DQoNCg0KZXh0ZXJuIGludCBfX2ZpbGJ1ZihGSUxF
ICopOw0KZXh0ZXJuIGludCBfX2Zsc2J1ZihpbnQsIEZJTEUgKik7DQojIDM1
MyAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNA0KZXh0ZXJuIEZJ
TEUgKmZkb3BlbihpbnQsIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAq
Y3Rlcm1pZChjaGFyICopOw0KZXh0ZXJuIGludCBmaWxlbm8oRklMRSAqKTsN
CiMgMzY0ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0DQpleHRl
cm4gdm9pZCBmbG9ja2ZpbGUoRklMRSAqKTsNCmV4dGVybiBpbnQgZnRyeWxv
Y2tmaWxlKEZJTEUgKik7DQpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZShGSUxF
ICopOw0KZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkKEZJTEUgKik7DQpleHRl
cm4gaW50IGdldGNoYXJfdW5sb2NrZWQodm9pZCk7DQpleHRlcm4gaW50IHB1
dGNfdW5sb2NrZWQoaW50LCBGSUxFICopOw0KZXh0ZXJuIGludCBwdXRjaGFy
X3VubG9ja2VkKGludCk7DQojIDM3OSAiL2hvbWUvbWRlaWwvYmluLy4uL2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0
ZGlvLmgiIDMgNA0KZXh0ZXJuIEZJTEUgKnBvcGVuKGNvbnN0IGNoYXIgKiwg
Y29uc3QgY2hhciAqKTsNCmV4dGVybiBjaGFyICpjdXNlcmlkKGNoYXIgKik7
DQpleHRlcm4gY2hhciAqdGVtcG5hbShjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKik7DQpleHRlcm4gaW50IGdldG9wdChpbnQsIGNoYXIgKmNvbnN0ICos
IGNvbnN0IGNoYXIgKik7DQoNCg0KDQpleHRlcm4gY2hhciAqb3B0YXJnOw0K
ZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0Ow0KZXh0ZXJuIGlu
dCBnZXR3KEZJTEUgKik7DQpleHRlcm4gaW50IHB1dHcoaW50LCBGSUxFICop
Ow0KZXh0ZXJuIGludCBwY2xvc2UoRklMRSAqKTsNCg0KDQoNCg0KDQoNCg0K
ZXh0ZXJuIGludCBmc2Vla28oRklMRSAqLCBvZmZfdCwgaW50KTsNCmV4dGVy
biBvZmZfdCBmdGVsbG8oRklMRSAqKTsNCiMgNDA4ICIvaG9tZS9tZGVpbC9i
aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu
Y2x1ZGUvc3RkaW8uaCIgMyA0DQpleHRlcm4gRklMRSAqZm9wZW42NChjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gRklMRSAqZnJlb3Bl
bjY0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBGSUxFICopOw0KZXh0
ZXJuIEZJTEUgKnRtcGZpbGU2NCh2b2lkKTsNCmV4dGVybiBpbnQgZmdldHBv
czY0KEZJTEUgKiwgZnBvczY0X3QgKik7DQpleHRlcm4gaW50IGZzZXRwb3M2
NChGSUxFICosIGNvbnN0IGZwb3M2NF90ICopOw0KZXh0ZXJuIGludCBmc2Vl
a282NChGSUxFICosIG9mZjY0X3QsIGludCk7DQpleHRlcm4gb2ZmNjRfdCBm
dGVsbG82NChGSUxFICopOw0KIyA1ODYgIi9ob21lL21kZWlsL2Jpbi8uLi9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9z
dGRpby5oIiAzIDQNCn0NCiMgMjEgImJ1ZmZlci5jcHAiIDINCiMgMSAiL3Vz
ci9pbmNsdWRlL3N0cmluZy5oIiAxIDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIylzdHJpbmcuaAkx
LjIyCTk3LzEyLzIyIFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2Zl
YXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTkgIi91c3IvaW5jbHVkZS9zdHJp
bmcuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgNDMgIi91c3IvaW5j
bHVkZS9zdHJpbmcuaCIgMyA0DQpleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQg
KiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOw0KZXh0ZXJuIHZvaWQgKm1lbW1v
dmUodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7DQpleHRlcm4gY2hh
ciAqc3RyY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBjaGFy
ICpzdHJuY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0KDQpl
eHRlcm4gY2hhciAqc3RyY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4
dGVybiBjaGFyICpzdHJuY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXpl
X3QpOw0KDQpleHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0
IHZvaWQgKiwgc2l6ZV90KTsNCmV4dGVybiBpbnQgc3RyY21wKGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBpbnQgc3RyY29sbChjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gaW50IHN0cm5jbXAo
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7DQpleHRlcm4g
c2l6ZV90IHN0cnhmcm0oY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7
DQoNCmV4dGVybiB2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqLCBpbnQsIHNp
emVfdCk7DQpleHRlcm4gY2hhciAqc3RyY2hyKGNvbnN0IGNoYXIgKiwgaW50
KTsNCmV4dGVybiBzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyICosIGNvbnN0
IGNoYXIgKik7DQpleHRlcm4gY2hhciAqc3RycGJyayhjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqc3RycmNocihjb25zdCBj
aGFyICosIGludCk7DQpleHRlcm4gc2l6ZV90IHN0cnNwbihjb25zdCBjaGFy
ICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqc3Ryc3RyKGNvbnN0
IGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBjaGFyICpzdHJ0b2so
Y2hhciAqLCBjb25zdCBjaGFyICopOw0KDQoNCmV4dGVybiBjaGFyICpzdHJ0
b2tfcihjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7DQoNCmV4dGVy
biB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7DQpleHRlcm4g
Y2hhciAqc3RyZXJyb3IoaW50KTsNCmV4dGVybiBzaXplX3Qgc3RybGVuKGNv
bnN0IGNoYXIgKik7DQoNCg0KDQpleHRlcm4gdm9pZCAqbWVtY2NweSh2b2lk
ICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOw0KDQoNCg0KDQpleHRl
cm4gY2hhciAqc3Ryc2lnbmFsKGludCk7DQpleHRlcm4gaW50IGZmcyhpbnQp
Ow0KZXh0ZXJuIGludCBzdHJjYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqKTsNCmV4dGVybiBpbnQgc3RybmNhc2VjbXAoY29uc3QgY2hhciAq
LCBjb25zdCBjaGFyICosIHNpemVfdCk7DQoNCg0KDQoNCg0KZXh0ZXJuIGNo
YXIgKnN0cmR1cChjb25zdCBjaGFyICopOw0KIyAxNDYgIi91c3IvaW5jbHVk
ZS9zdHJpbmcuaCIgMyA0DQp9DQojIDIyICJidWZmZXIuY3BwIiAyDQojIDEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9pb3N0cmVhbSIg
MSAzDQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
aW9zdHJlYW0iIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDEgMw0KIyAzOCAiL2hvbWUv
bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFt
LmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAz
DQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3Bh
cmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMw0KIyAxICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNv
bGFyaXMyLjcvYml0cy9vc19kZWZpbmVzLmgiIDEgMw0KIyAzNSAiL2hvbWUv
bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlz
Mi43L2JpdHMvYysrY29uZmlnLmgiIDIgMw0KIyA0MCAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDIg
Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfb3N0cmVhbS5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDMNCg0KIyAx
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
aW9zLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMN
CiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9pb3Nmd2QuaCIgMw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2Nv
bmZpZy5oIiAxIDMNCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAzDQojIDEgIi9ob21lL21k
ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5oIiAx
IDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0cmluZ2Z3ZC5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysr
Y29uZmlnLmgiIDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDIgMw0KDQpuYW1lc3BhY2Ug
c3RkDQp7DQogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4NCiAgICBzdHJ1Y3Qg
Y2hhcl90cmFpdHM7DQoNCiAgdGVtcGxhdGU8PiBjbGFzcyBjaGFyX3RyYWl0
czxjaGFyPjsNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+
DQogICAgY2xhc3MgYWxsb2NhdG9yOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
VD4sDQogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxf
Q2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19zdHJpbmc7DQoNCiAgdHlwZWRl
ZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOw0KDQoNCg0KfQ0KIyA0MSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv
c2Z3ZC5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL2JpdHMvZnBvcy5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMw0KDQojIDEgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29s
YXJpczIuNy9iaXRzL2MrK2lvLmgiIDEgMw0KIyAzNSAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2Jp
dHMvYysraW8uaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvY3N0ZGlvIiAxIDMNCiMgMzEgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9jc3RkaW8iIDMNCiMgMSAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMN
CiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9jc3RkaW8uaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25m
aWcuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAx
IDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jc3RkZGVmLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMgNA0KIyAxNDcgIi9ob21lL21kZWlsL2Jpbi8uLi9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9z
dGRkZWYuaCIgMyA0DQp0eXBlZGVmIGludCBwdHJkaWZmX3Q7DQojIDM5ICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0
ZGRlZi5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB1c2luZyA6OnB0
cmRpZmZfdDsNCiAgdXNpbmcgOjpzaXplX3Q7DQp9DQojIDM5ICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgi
IDIgMw0KIyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2NzdGRpby5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
Li9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVk
ZS9zdGRpby5oIiAxIDMgNA0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMNCiMgODYgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Rk
aW8uaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KICB1c2luZyA6OkZJTEU7DQog
IHVzaW5nIDo6ZnBvc190Ow0KDQogIHVzaW5nIDo6Y2xlYXJlcnI7DQogIHVz
aW5nIDo6ZmNsb3NlOw0KICB1c2luZyA6OmZlb2Y7DQogIHVzaW5nIDo6ZmVy
cm9yOw0KICB1c2luZyA6OmZmbHVzaDsNCiAgdXNpbmcgOjpmZ2V0YzsNCiAg
dXNpbmcgOjpmZ2V0cG9zOw0KICB1c2luZyA6OmZnZXRzOw0KICB1c2luZyA6
OmZvcGVuOw0KICB1c2luZyA6OmZwcmludGY7DQogIHVzaW5nIDo6ZnB1dGM7
DQogIHVzaW5nIDo6ZnB1dHM7DQogIHVzaW5nIDo6ZnJlYWQ7DQogIHVzaW5n
IDo6ZnJlb3BlbjsNCiAgdXNpbmcgOjpmc2NhbmY7DQogIHVzaW5nIDo6ZnNl
ZWs7DQogIHVzaW5nIDo6ZnNldHBvczsNCiAgdXNpbmcgOjpmdGVsbDsNCiAg
dXNpbmcgOjpmd3JpdGU7DQogIHVzaW5nIDo6Z2V0YzsNCiAgdXNpbmcgOjpn
ZXRjaGFyOw0KICB1c2luZyA6OmdldHM7DQogIHVzaW5nIDo6cGVycm9yOw0K
ICB1c2luZyA6OnByaW50ZjsNCiAgdXNpbmcgOjpwdXRjOw0KICB1c2luZyA6
OnB1dGNoYXI7DQogIHVzaW5nIDo6cHV0czsNCiAgdXNpbmcgOjpyZW1vdmU7
DQogIHVzaW5nIDo6cmVuYW1lOw0KICB1c2luZyA6OnJld2luZDsNCiAgdXNp
bmcgOjpzY2FuZjsNCiAgdXNpbmcgOjpzZXRidWY7DQogIHVzaW5nIDo6c2V0
dmJ1ZjsNCiAgdXNpbmcgOjpzcHJpbnRmOw0KICB1c2luZyA6OnNzY2FuZjsN
CiAgdXNpbmcgOjp0bXBmaWxlOw0KICB1c2luZyA6OnRtcG5hbTsNCiAgdXNp
bmcgOjp1bmdldGM7DQogIHVzaW5nIDo6dmZwcmludGY7DQogIHVzaW5nIDo6
dnByaW50ZjsNCiAgdXNpbmcgOjp2c3ByaW50ZjsNCn0NCiMgMzIgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9jc3RkaW8iIDIgMw0KIyAz
NiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1
bi1zb2xhcmlzMi43L2JpdHMvYysraW8uaCIgMiAzDQojIDEgIi9ob21lL21k
ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAxIDMNCiMgMzcg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4t
c29sYXJpczIuNy9iaXRzL2MrK2lvLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
Yml0cy9ndGhyLmgiIDEgMw0KIyA5OCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvZ3Roci5o
IiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9z
cGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2d0aHItZGVmYXVsdC5oIiAxIDMN
CiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFy
Yy1zdW4tc29sYXJpczIuNy9iaXRzL2d0aHItZGVmYXVsdC5oIiAzDQojIDEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuNy8zLjAvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMyA0DQojIDE4ICIv
aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjcvMy4wL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQNCiNwcmFnbWEgaWRl
bnQgIkAoIylwdGhyZWFkLmgJMS4yNgk5OC8wNC8xMiBTTUkiDQoNCg0KIyAx
ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0DQojIDI1
ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KI3ByYWdt
YSBpZGVudCAiQCgjKXR5cGVzLmgJMS42Mwk5OC8wNC8yOCBTTUkiDQoNCiMg
MSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNA0KIyAyOCAi
L2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNA0KIyAxICIv
dXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMjkg
Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQNCg0KDQoN
Cg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5oIiAxIDMgNA0K
IyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9tYWNodHlwZXMuaCIgMyA0DQojcHJh
Z21hIGlkZW50ICJAKCMpbWFjaHR5cGVzLmgJMS4xMgk5Ni8wOC8wMSBTTUki
DQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEg
MyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5oIiAyIDMg
NA0KDQoNCmV4dGVybiAiQyIgew0KIyAzMyAiL3Vzci9pbmNsdWRlL3N5cy9t
YWNodHlwZXMuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBfcGh5c2Fkcl90IHsg
aW50IHJbMV07IH0gKnBoeXNhZHJfdDsNCg0KdHlwZWRlZiBzdHJ1Y3QgX2xh
YmVsX3QgeyBsb25nIHZhbFsyXTsgfSBsYWJlbF90Ow0KDQoNCg0KdHlwZWRl
ZiB1bnNpZ25lZCBjaGFyIGxvY2tfdDsNCg0KDQp9DQojIDM0ICIvaG9tZS9t
ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
My4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0DQojIDQ1ICIvaG9tZS9t
ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
My4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KIyAxICIvdXNyL2luY2x1
ZGUvc3lzL2ludF90eXBlcy5oIiAxIDMgNA0KIyA5ICIvdXNyL2luY2x1ZGUv
c3lzL2ludF90eXBlcy5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIylpbnRf
dHlwZXMuaAkxLjYJOTcvMDgvMjAgU01JIg0KIyA0MiAiL3Vzci9pbmNsdWRl
L3N5cy9pbnRfdHlwZXMuaCIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zeXMv
aXNhX2RlZnMuaCIgMSAzIDQNCiMgNDMgIi91c3IvaW5jbHVkZS9zeXMvaW50
X3R5cGVzLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQojIDYyICIvdXNy
L2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQNCnR5cGVkZWYgY2hhciBp
bnQ4X3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiBzaG9ydCBpbnQxNl90Ow0KdHlw
ZWRlZiBpbnQgaW50MzJfdDsNCg0KDQoNCg0KdHlwZWRlZiBsb25nIGxvbmcg
aW50NjRfdDsNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90
Ow0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsNCnR5cGVkZWYg
dW5zaWduZWQgaW50IHVpbnQzMl90Ow0KDQoNCg0KDQp0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgbG9uZyB1aW50NjRfdDsNCiMgOTQgIi91c3IvaW5jbHVkZS9z
eXMvaW50X3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBpbnQ2NF90IGludG1heF90
Ow0KdHlwZWRlZiB1aW50NjRfdCB1aW50bWF4X3Q7DQojIDExMCAiL3Vzci9p
bmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0DQp0eXBlZGVmIGludCBpbnRw
dHJfdDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRwdHJfdDsNCg0KDQoN
Cg0KDQoNCg0KdHlwZWRlZiBjaGFyIGludF9sZWFzdDhfdDsNCg0KDQoNCg0K
DQp0eXBlZGVmIHNob3J0IGludF9sZWFzdDE2X3Q7DQp0eXBlZGVmIGludCBp
bnRfbGVhc3QzMl90Ow0KDQoNCg0KDQp0eXBlZGVmIGxvbmcgbG9uZyBpbnRf
bGVhc3Q2NF90Ow0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnRf
bGVhc3Q4X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnRfbGVhc3Qx
Nl90Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9sZWFzdDMyX3Q7DQoN
Cg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnRfbGVhc3Q2
NF90Ow0KDQoNCg0KDQp9DQojIDQ2ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lz
L3R5cGVzLmgiIDIgMyA0DQoNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgew0K
IyA2MiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCnR5
cGVkZWYgbG9uZyBsb25nIGxvbmdsb25nX3Q7DQp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgbG9uZyB1X2xvbmdsb25nX3Q7DQojIDg1ICIvaG9tZS9tZGVpbC9i
aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBsb25nIHRfc2NhbGFy
X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdF91c2NhbGFyX3Q7DQoNCg0K
DQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjaGFyX3Q7DQp0eXBlZGVm
IHVuc2lnbmVkIHNob3J0IHVzaG9ydF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBp
bnQgdWludF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25nX3Q7DQoN
CnR5cGVkZWYgY2hhciAqY2FkZHJfdDsNCnR5cGVkZWYgbG9uZyBkYWRkcl90
Ow0KdHlwZWRlZiBzaG9ydCBjbnRfdDsNCg0KDQp0eXBlZGVmIHVsb25nX3Qg
cGFkZHJfdDsNCiMgMTI1ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDMgNA0KdHlwZWRlZiB1bG9uZ190IHBmbl90Ow0KdHlwZWRlZiB1bG9u
Z190IHBnY250X3Q7DQp0eXBlZGVmIGxvbmcgc3BnY250X3Q7DQoNCnR5cGVk
ZWYgdWNoYXJfdCB1c2VfdDsNCnR5cGVkZWYgc2hvcnQgc3lzaWRfdDsNCnR5
cGVkZWYgc2hvcnQgaW5kZXhfdDsNCnR5cGVkZWYgdm9pZCAqdGltZW91dF9p
ZF90Ow0KdHlwZWRlZiB2b2lkICpidWZjYWxsX2lkX3Q7DQojIDE2MyAiL2hv
bWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCnR5cGVkZWYgdWxv
bmdfdCBpbm9fdDsNCnR5cGVkZWYgbG9uZyBibGtjbnRfdDsNCnR5cGVkZWYg
dWxvbmdfdCBmc2Jsa2NudF90Ow0KdHlwZWRlZiB1bG9uZ190IGZzZmlsY250
X3Q7DQojIDE4MSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
IDQNCnR5cGVkZWYgdV9sb25nbG9uZ190IGlubzY0X3Q7DQp0eXBlZGVmIGxv
bmdsb25nX3QgYmxrY250NjRfdDsNCnR5cGVkZWYgdV9sb25nbG9uZ190IGZz
YmxrY250NjRfdDsNCnR5cGVkZWYgdV9sb25nbG9uZ190IGZzZmlsY250NjRf
dDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgbG9uZyBibGtzaXplX3Q7DQoNCg0K
DQp0eXBlZGVmIGVudW0geyBfQl9GQUxTRSwgX0JfVFJVRSB9IGJvb2xlYW5f
dDsNCiMgMjA4ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg
NA0KdHlwZWRlZiBpbnQ2NF90IHBhZDY0X3Q7DQp0eXBlZGVmIHVpbnQ2NF90
IHVwYWQ2NF90Ow0KIyAyMjEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMyA0DQp0eXBlZGVmIGxvbmdsb25nX3Qgb2Zmc2V0X3Q7DQp0eXBl
ZGVmIHVfbG9uZ2xvbmdfdCB1X29mZnNldF90Ow0KdHlwZWRlZiB1X2xvbmds
b25nX3QgbGVuX3Q7DQp0eXBlZGVmIGxvbmdsb25nX3QgZGlza2FkZHJfdDsN
CiMgMjQyICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0K
dHlwZWRlZiB1bmlvbiB7DQogICAgICAgIG9mZnNldF90IF9mOw0KICAgICAg
ICBzdHJ1Y3Qgew0KICAgICAgICAgICAgICAgIGludDMyX3QgX3U7DQogICAg
ICAgICAgICAgICAgaW50MzJfdCBfbDsNCiAgICAgICAgfSBfcDsNCn0gbGxv
ZmZfdDsNCiMgMjYyICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDMgNA0KdHlwZWRlZiB1bmlvbiB7DQogICAgICAgIGRpc2thZGRyX3QgX2Y7
DQogICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAgaW50MzJfdCBf
dTsNCiAgICAgICAgICAgICAgICBpbnQzMl90IF9sOw0KICAgICAgICB9IF9w
Ow0KfSBsbGRhZGRyX3Q7DQoNCg0KdHlwZWRlZiB1aW50X3Qga19mbHRzZXRf
dDsNCiMgMjg3ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg
NA0KdHlwZWRlZiBsb25nIGlkX3Q7DQoNCg0KDQoNCg0KDQp0eXBlZGVmIHVp
bnRfdCB1c2Vjb25kc190Ow0KDQoNCg0KdHlwZWRlZiBsb25nIHN1c2Vjb25k
c190Ow0KIyAzMDggIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
MyA0DQp0eXBlZGVmIHVsb25nX3QgbWFqb3JfdDsNCnR5cGVkZWYgdWxvbmdf
dCBtaW5vcl90Ow0KDQoNCg0KDQoNCnR5cGVkZWYgc2hvcnQgcHJpX3Q7DQoj
IDMyOCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCnR5
cGVkZWYgdXNob3J0X3Qgb19tb2RlX3Q7DQp0eXBlZGVmIHNob3J0IG9fZGV2
X3Q7DQp0eXBlZGVmIHVzaG9ydF90IG9fdWlkX3Q7DQp0eXBlZGVmIG9fdWlk
X3Qgb19naWRfdDsNCnR5cGVkZWYgc2hvcnQgb19ubGlua190Ow0KdHlwZWRl
ZiBzaG9ydCBvX3BpZF90Ow0KdHlwZWRlZiB1c2hvcnRfdCBvX2lub190Ow0K
DQoNCg0KDQoNCnR5cGVkZWYgaW50IGtleV90Ow0KDQoNCg0KdHlwZWRlZiB1
bG9uZ190IG1vZGVfdDsNCg0KDQoNCg0KDQoNCg0KdHlwZWRlZiBsb25nIHVp
ZF90Ow0KDQoNCg0KdHlwZWRlZiB1aWRfdCBnaWRfdDsNCg0KDQoNCg0KDQoN
CnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfdDsNCnR5cGVkZWYgdW5z
aWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7DQoNCnR5cGVkZWYgc3RydWN0IF9w
dGhyZWFkX211dGV4IHsNCiAgICAgICAgc3RydWN0IHsNCiAgICAgICAgICAg
ICAgICB1aW50OF90IF9fcHRocmVhZF9tdXRleF9mbGFnWzRdOw0KICAgICAg
ICAgICAgICAgIHVpbnQzMl90IF9fcHRocmVhZF9tdXRleF90eXBlOw0KICAg
ICAgICB9IF9fcHRocmVhZF9tdXRleF9mbGFnczsNCiAgICAgICAgdW5pb24g
ew0KICAgICAgICAgICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAg
ICAgICAgICB1aW50OF90IF9fcHRocmVhZF9tdXRleF9wYWRbOF07DQogICAg
ICAgICAgICAgICAgfSBfX3B0aHJlYWRfbXV0ZXhfbG9jazY0Ow0KICAgICAg
ICAgICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9tdXRleF9vd25lcjY0Ow0K
ICAgICAgICB9IF9fcHRocmVhZF9tdXRleF9sb2NrOw0KICAgICAgICB1cGFk
NjRfdCBfX3B0aHJlYWRfbXV0ZXhfZGF0YTsNCn0gcHRocmVhZF9tdXRleF90
Ow0KDQp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9jb25kIHsNCiAgICAgICAg
c3RydWN0IHsNCiAgICAgICAgICAgICAgICB1aW50OF90IF9fcHRocmVhZF9j
b25kX2ZsYWdbNF07DQogICAgICAgICAgICAgICAgdWludDMyX3QgX19wdGhy
ZWFkX2NvbmRfdHlwZTsNCiAgICAgICAgfSBfX3B0aHJlYWRfY29uZF9mbGFn
czsNCiAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX2NvbmRfZGF0YTsNCn0g
cHRocmVhZF9jb25kX3Q7DQoNCg0KDQoNCnR5cGVkZWYgc3RydWN0IF9wdGhy
ZWFkX3J3bG9jayB7DQogICAgICAgIGludDMyX3QgX19wdGhyZWFkX3J3bG9j
a19yZWFkZXJzOw0KICAgICAgICB1aW50MTZfdCBfX3B0aHJlYWRfcndsb2Nr
X3R5cGU7DQogICAgICAgIHVpbnQxNl90IF9fcHRocmVhZF9yd2xvY2tfbWFn
aWM7DQogICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9yd2xvY2tfcGFkMVsz
XTsNCiAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX3J3bG9ja19wYWQyWzJd
Ow0KICAgICAgICB1cGFkNjRfdCBfX3B0aHJlYWRfcndsb2NrX3BhZDNbMl07
DQp9IHB0aHJlYWRfcndsb2NrX3Q7DQoNCg0KDQoNCnR5cGVkZWYgc3RydWN0
IF9wdGhyZWFkX2F0dHIgew0KICAgICAgICB2b2lkICpfX3B0aHJlYWRfYXR0
cnA7DQp9IHB0aHJlYWRfYXR0cl90Ow0KDQoNCg0KDQoNCnR5cGVkZWYgc3Ry
dWN0IF9wdGhyZWFkX211dGV4YXR0ciB7DQogICAgICAgIHZvaWQgKl9fcHRo
cmVhZF9tdXRleGF0dHJwOw0KfSBwdGhyZWFkX211dGV4YXR0cl90Ow0KDQoN
Cg0KDQoNCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2NvbmRhdHRyIHsNCiAg
ICAgICAgdm9pZCAqX19wdGhyZWFkX2NvbmRhdHRycDsNCn0gcHRocmVhZF9j
b25kYXR0cl90Ow0KDQoNCg0KDQp0eXBlZGVmIHN0cnVjdCBfb25jZSB7DQog
ICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9vbmNlX3BhZFs0XTsNCn0gcHRo
cmVhZF9vbmNlX3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QgX3B0aHJl
YWRfcndsb2NrYXR0ciB7DQogICAgICAgIHZvaWQgKl9fcHRocmVhZF9yd2xv
Y2thdHRycDsNCn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7DQoNCnR5cGVkZWYg
dWxvbmdfdCBkZXZfdDsNCg0KDQoNCg0KDQp0eXBlZGVmIHVsb25nX3Qgbmxp
bmtfdDsNCnR5cGVkZWYgbG9uZyBwaWRfdDsNCiMgNDc2ICIvaG9tZS9tZGVp
bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBsb25nIHRpbWVf
dDsNCg0KDQoNCg0KdHlwZWRlZiBsb25nIGNsb2NrX3Q7DQoNCg0KDQoNCnR5
cGVkZWYgaW50IGNsb2NraWRfdDsNCg0KDQoNCg0KdHlwZWRlZiBpbnQgdGlt
ZXJfdDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1bmNo
YXI7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydDsNCnR5cGVkZWYg
dW5zaWduZWQgaW50IHVpbnQ7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWxv
bmc7DQojIDU1MiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
IDQNCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1X2NoYXI7DQp0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IHVfc2hvcnQ7DQp0eXBlZGVmIHVuc2lnbmVkIGludCB1
X2ludDsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1X2xvbmc7DQp0eXBlZGVm
IHN0cnVjdCBfcXVhZCB7IGludCB2YWxbMl07IH0gcXVhZF90Ow0KdHlwZWRl
ZiBxdWFkX3QgcXVhZDsNCg0KDQoNCg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRl
L3N5cy9zZWxlY3QuaCIgMSAzIDQNCiMgMTIgIi91c3IvaW5jbHVkZS9zeXMv
c2VsZWN0LmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKXNlbGVjdC5oCTEu
MTYJOTgvMDQvMjcgU01JIg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVh
dHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAxNSAiL3Vzci9pbmNsdWRlL3N5cy9z
ZWxlY3QuaCIgMiAzIDQNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGlt
ZS5oIiAxIDMgNA0KIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMg
NA0KI3ByYWdtYSBpZGVudCAiQCgjKXRpbWUuaAkyLjYyCTk4LzAyLzA0IFNN
SSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIg
MSAzIDQNCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMgNA0K
DQoNCg0KDQoNCg0KDQpleHRlcm4gIkMiIHsNCiMgNDkgIi91c3IvaW5jbHVk
ZS9zeXMvdGltZS5oIiAzIDQNCnN0cnVjdCB0aW1ldmFsIHsNCiAgICAgICAg
dGltZV90IHR2X3NlYzsNCiAgICAgICAgc3VzZWNvbmRzX3QgdHZfdXNlYzsN
Cn07DQojIDgyICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQpzdHJ1
Y3QgdGltZXpvbmUgew0KICAgICAgICBpbnQgdHpfbWludXRlc3dlc3Q7DQog
ICAgICAgIGludCB0el9kc3R0aW1lOw0KfTsNCg0KDQoNCg0KDQp9DQojIDEw
MCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNA0KIyAxICIvaG9tZS9t
ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
My4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0DQojIDEwMSAiL3Vzci9p
bmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0DQoNCg0KDQpleHRlcm4gIkMiIHsN
CiMgMTU1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQpzdHJ1Y3Qg
aXRpbWVydmFsIHsNCiAgICAgICAgc3RydWN0IHRpbWV2YWwgaXRfaW50ZXJ2
YWw7DQogICAgICAgIHN0cnVjdCB0aW1ldmFsIGl0X3ZhbHVlOw0KfTsNCiMg
MjAzICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQp0eXBlZGVmIGxv
bmdsb25nX3QgaHJ0aW1lX3Q7DQojIDMxNSAiL3Vzci9pbmNsdWRlL3N5cy90
aW1lLmgiIDMgNA0KaW50IGFkanRpbWUoc3RydWN0IHRpbWV2YWwgKiwgc3Ry
dWN0IHRpbWV2YWwgKik7DQojIDMyNiAiL3Vzci9pbmNsdWRlL3N5cy90aW1l
LmgiIDMgNA0KaW50IGdldGl0aW1lcihpbnQsIHN0cnVjdCBpdGltZXJ2YWwg
Kik7DQppbnQgdXRpbWVzKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRp
bWV2YWwgKik7DQoNCmludCBzZXRpdGltZXIoaW50LCBjb25zdCBzdHJ1Y3Qg
aXRpbWVydmFsICosIHN0cnVjdCBpdGltZXJ2YWwgKik7DQojIDM2NCAiL3Vz
ci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNA0KaW50IHNldHRpbWVvZmRheShz
dHJ1Y3QgdGltZXZhbCAqLCB2b2lkICopOw0KDQpocnRpbWVfdCBnZXRocnRp
bWUodm9pZCk7DQpocnRpbWVfdCBnZXRocnZ0aW1lKHZvaWQpOw0KIyAzODQg
Ii91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQNCmludCBnZXR0aW1lb2Zk
YXkoc3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsNCiMgNDA1ICIvdXNyL2lu
Y2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDEgMyA0DQojIDE2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQNCiNw
cmFnbWEgaWRlbnQgIkAoIyl0aW1lLmgJMS4zNgk5OC8wMy8yNyBTTUkiDQoN
CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0
DQojIDE5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMgNA0KIyAxICIvaG9t
ZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0DQojIDIwICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyA2
NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0DQpzdHJ1Y3QgdG0gew0KICAg
ICAgICBpbnQgdG1fc2VjOw0KICAgICAgICBpbnQgdG1fbWluOw0KICAgICAg
ICBpbnQgdG1faG91cjsNCiAgICAgICAgaW50IHRtX21kYXk7DQogICAgICAg
IGludCB0bV9tb247DQogICAgICAgIGludCB0bV95ZWFyOw0KICAgICAgICBp
bnQgdG1fd2RheTsNCiAgICAgICAgaW50IHRtX3lkYXk7DQogICAgICAgIGlu
dCB0bV9pc2RzdDsNCn07DQoNCg0KDQpleHRlcm4gY2xvY2tfdCBjbG9jayh2
b2lkKTsNCmV4dGVybiBkb3VibGUgZGlmZnRpbWUodGltZV90LCB0aW1lX3Qp
Ow0KZXh0ZXJuIHRpbWVfdCBta3RpbWUoc3RydWN0IHRtICopOw0KZXh0ZXJu
IHRpbWVfdCB0aW1lKHRpbWVfdCAqKTsNCmV4dGVybiBjaGFyICphc2N0aW1l
KGNvbnN0IHN0cnVjdCB0bSAqKTsNCmV4dGVybiBjaGFyICpjdGltZShjb25z
dCB0aW1lX3QgKik7DQpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUoY29uc3Qg
dGltZV90ICopOw0KZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lKGNvbnN0
IHRpbWVfdCAqKTsNCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUoY2hhciAqLCBz
aXplX3QsIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRtICopOw0KDQoN
Cg0KZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IoY29uc3QgdGltZV90ICos
IHN0cnVjdCB0bSAqKTsNCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9y
KGNvbnN0IHRpbWVfdCAqLCBzdHJ1Y3QgdG0gKik7DQoNCg0KDQoNCg0KZXh0
ZXJuIGNoYXIgKnN0cnB0aW1lKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
LCBzdHJ1Y3QgdG0gKik7DQoNCg0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUv
c3lzL3RpbWVfaW1wbC5oIiAxIDMgNA0KIyAxNSAiL3Vzci9pbmNsdWRlL3N5
cy90aW1lX2ltcGwuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpdGltZV9p
bXBsLmgJMS4zCTk4LzAyLzEzIFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUv
c3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTggIi91c3IvaW5jbHVk
ZS9zeXMvdGltZV9pbXBsLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQoj
IDM2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQNCnR5cGVk
ZWYgc3RydWN0IHRpbWVzcGVjIHsNCiAgICAgICAgdGltZV90IHR2X3NlYzsN
CiAgICAgICAgbG9uZyB0dl9uc2VjOw0KfSB0aW1lc3BlY190Ow0KIyA2MCAi
L3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIgMyA0DQp0eXBlZGVmIHN0
cnVjdCB0aW1lc3BlYyB0aW1lc3RydWNfdDsNCiMgNzkgIi91c3IvaW5jbHVk
ZS9zeXMvdGltZV9pbXBsLmgiIDMgNA0KdHlwZWRlZiBzdHJ1Y3QgaXRpbWVy
c3BlYyB7DQogICAgICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsN
CiAgICAgICAgc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOw0KfSBpdGltZXJz
cGVjX3Q7DQojIDEzMCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIg
MyA0DQp9DQojIDEwNCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzIDQNCiMg
MTE4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQNCnVuaW9uIHNpZ3ZhbCB7
DQogICAgICAgIGludCBzaXZhbF9pbnQ7DQogICAgICAgIHZvaWQgKnNpdmFs
X3B0cjsNCn07DQoNCg0KDQoNCnN0cnVjdCBzaWdldmVudCB7DQogICAgICAg
IGludCBzaWdldl9ub3RpZnk7DQogICAgICAgIGludCBzaWdldl9zaWdubzsN
CiAgICAgICAgdW5pb24gc2lndmFsIHNpZ2V2X3ZhbHVlOw0KICAgICAgICB2
b2lkICgqc2lnZXZfbm90aWZ5X2Z1bmN0aW9uKSh1bmlvbiBzaWd2YWwpOw0K
ICAgICAgICBwdGhyZWFkX2F0dHJfdCAqc2lnZXZfbm90aWZ5X2F0dHJpYnV0
ZXM7DQogICAgICAgIGludCBfX3NpZ2V2X3BhZDI7DQp9Ow0KDQoNCmV4dGVy
biBpbnQgY2xvY2tfZ2V0cmVzKGNsb2NraWRfdCwgc3RydWN0IHRpbWVzcGVj
ICopOw0KZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lKGNsb2NraWRfdCwgc3Ry
dWN0IHRpbWVzcGVjICopOw0KZXh0ZXJuIGludCBjbG9ja19zZXR0aW1lKGNs
b2NraWRfdCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICopOw0KZXh0ZXJuIGlu
dCB0aW1lcl9jcmVhdGUoY2xvY2tpZF90LCBzdHJ1Y3Qgc2lnZXZlbnQgKiwg
dGltZXJfdCAqKTsNCmV4dGVybiBpbnQgdGltZXJfZGVsZXRlKHRpbWVyX3Qp
Ow0KZXh0ZXJuIGludCB0aW1lcl9nZXRvdmVycnVuKHRpbWVyX3QpOw0KZXh0
ZXJuIGludCB0aW1lcl9nZXR0aW1lKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJz
cGVjICopOw0KZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGlu
dCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKiwNCiAgICAgICAgICAgICAg
ICBzdHJ1Y3QgaXRpbWVyc3BlYyAqKTsNCmV4dGVybiBpbnQgbmFub3NsZWVw
KGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7
DQoNCg0KDQoNCmV4dGVybiB2b2lkIHR6c2V0KHZvaWQpOw0KDQpleHRlcm4g
Y2hhciAqdHpuYW1lWzJdOw0KDQoNCmV4dGVybiBsb25nIF9zeXNjb25mKGlu
dCk7DQoNCg0KDQoNCg0KDQpleHRlcm4gbG9uZyB0aW1lem9uZTsNCmV4dGVy
biBpbnQgZGF5bGlnaHQ7DQojIDE3NiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MyA0DQpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlKGNvbnN0IGNoYXIgKik7
DQoNCg0KDQoNCg0KDQpleHRlcm4gaW50IGdldGRhdGVfZXJyOw0KIyAyNzIg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMgNA0Kc3RhdGljIGNoYXIgKg0KYXNj
dGltZV9yKGNvbnN0IHN0cnVjdCB0bSAqX190bSwgY2hhciAqX19idWYpDQp7
DQogICAgICAgIGV4dGVybiBjaGFyICpfX3Bvc2l4X2FzY3RpbWVfcihjb25z
dCBzdHJ1Y3QgdG0gKiwgY2hhciAqKTsNCiAgICAgICAgcmV0dXJuIChfX3Bv
c2l4X2FzY3RpbWVfcihfX3RtLCBfX2J1ZikpOw0KfQ0Kc3RhdGljIGNoYXIg
Kg0KY3RpbWVfcihjb25zdCB0aW1lX3QgKl9fdGltZSwgY2hhciAqX19idWYp
DQp7DQogICAgICAgIGV4dGVybiBjaGFyICpfX3Bvc2l4X2N0aW1lX3IoY29u
c3QgdGltZV90ICosIGNoYXIgKik7DQogICAgICAgIHJldHVybiAoX19wb3Np
eF9jdGltZV9yKF9fdGltZSwgX19idWYpKTsNCn0NCiMgMzM0ICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAzIDQNCn0NCiMgNDA2ICIvdXNyL2luY2x1ZGUvc3lz
L3RpbWUuaCIgMiAzIDQNCiMgNDE4ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUu
aCIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMyA0
DQojIDQxOSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0DQoNCg0K
DQoNCg0KfQ0KIyAxOCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAz
IDQNCg0KDQoNCmV4dGVybiAiQyIgew0KIyA0NSAiL3Vzci9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMyA0DQp0eXBlZGVmIGxvbmcgZmRfbWFzazsNCg0KdHlw
ZWRlZiBsb25nIGZkc19tYXNrOw0KIyA3MyAiL3Vzci9pbmNsdWRlL3N5cy9z
ZWxlY3QuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBmZF9zZXQgew0KDQoNCg0K
ICAgICAgICBsb25nIGZkc19iaXRzWygoKDEwMjQpKygoKHNpemVvZiAoZmRz
X21hc2spICogOCkpLTEpKS8oKHNpemVvZiAoZmRzX21hc2spICogOCkpKV07
DQp9IGZkX3NldDsNCiMgOTcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi
IDMgNA0KZXh0ZXJuIGludCBzZWxlY3QoaW50LCBmZF9zZXQgKiwgZmRfc2V0
ICosIGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsNCg0KDQoNCg0KDQoN
Cn0NCiMgNTY1ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIg
MyA0DQojIDU4MSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
IDQNCn0NCiMgMjIgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9wdGhyZWFkLmgiIDIg
MyA0DQojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0DQojIDIzICIv
aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjcvMy4wL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNA0KIyAxICIvdXNy
L2luY2x1ZGUvc2NoZWQuaCIgMSAzIDQNCiMgMTEgIi91c3IvaW5jbHVkZS9z
Y2hlZC5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIylzY2hlZC5oCTEuOQk5
OC8wMS8xNiBTTUkiDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90
eXBlcy5oIiAxIDMgNA0KIyAxNCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIg
MyA0DQojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0DQojIDE1ICIv
dXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsN
Cg0KDQpzdHJ1Y3Qgc2NoZWRfcGFyYW0gew0KICAgICAgICBpbnQgc2NoZWRf
cHJpb3JpdHk7DQogICAgICAgIGludCBzY2hlZF9uaWNlbGltOw0KICAgICAg
ICBpbnQgc2NoZWRfbmljZTsNCiAgICAgICAgaW50IHNjaGVkX3BhZFs2XTsN
Cg0KDQoNCn07DQojIDQ0ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMyA0DQpp
bnQgc2NoZWRfZ2V0cGFyYW0ocGlkX3QgcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFy
YW0gKnBhcmFtKTsNCmludCBzY2hlZF9zZXRwYXJhbShwaWRfdCBwaWQsIGNv
bnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pOw0KaW50IHNjaGVkX2dl
dHNjaGVkdWxlcihwaWRfdCBwaWQpOw0KaW50IHNjaGVkX3NldHNjaGVkdWxl
cihwaWRfdCBwaWQsIGludCBwb2xpY3ksDQogICAgICAgICAgICAgICAgY29u
c3Qgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSk7DQppbnQgc2NoZWRfeWll
bGQodm9pZCk7DQppbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heChpbnQgcG9s
aWN5KTsNCmludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluKGludCBwb2xpY3kp
Ow0KaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbChwaWRfdCBwaWQsIHN0cnVj
dCB0aW1lc3BlYyAqaW50ZXJ2YWwpOw0KIyA2NSAiL3Vzci9pbmNsdWRlL3Nj
aGVkLmgiIDMgNA0KfQ0KIyAyNCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3B0aHJl
YWQuaCIgMiAzIDQNCg0KDQoNCmV4dGVybiAiQyIgew0KIyA5NSAiL2hvbWUv
bWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43
LzMuMC9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBf
Y2xlYW51cCB7DQogICAgICAgIHVpbnRwdHJfdCBwdGhyZWFkX2NsZWFudXBf
cGFkWzRdOw0KfSBfY2xlYW51cF90Ow0KDQoNCg0Kdm9pZCBfX3B0aHJlYWRf
Y2xlYW51cF9wdXNoKHZvaWQgKCpyb3V0aW5lKSh2b2lkICopLCB2b2lkICph
cmdzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhZGRyX3QgZnAsIF9jbGVhbnVwX3QgKmluZm8pOw0Kdm9pZCBfX3B0aHJl
YWRfY2xlYW51cF9wb3AoaW50IGV4LCBfY2xlYW51cF90ICppbmZvKTsNCmNh
ZGRyX3QgX2dldGZwKHZvaWQpOw0KIyAxMjkgIi9ob21lL21kZWlsL2Jpbi8u
Li9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVk
ZS9wdGhyZWFkLmgiIDMgNA0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5p
dChwdGhyZWFkX2F0dHJfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X2Rlc3Ryb3kocHRocmVhZF9hdHRyX3QgKik7DQpleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9zZXRzdGFja3NpemUocHRocmVhZF9hdHRyX3QgKiwgc2l6ZV90
KTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZShjb25z
dCBwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QgKik7DQpleHRlcm4gaW50IHB0
aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIocHRocmVhZF9hdHRyX3QgKiwgdm9p
ZCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkcihj
b25zdCBwdGhyZWFkX2F0dHJfdCAqLCB2b2lkICoqKTsNCmV4dGVybiBpbnQg
cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKHB0aHJlYWRfYXR0cl90ICos
IGludCk7DQpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0
ZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7DQpleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9zZXRzY29wZShwdGhyZWFkX2F0dHJfdCAqLCBpbnQp
Ow0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUoY29uc3QgcHRo
cmVhZF9hdHRyX3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2F0
dHJfc2V0aW5oZXJpdHNjaGVkKHB0aHJlYWRfYXR0cl90ICosIGludCk7DQpl
eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQoY29uc3Qg
cHRocmVhZF9hdHRyX3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhyZWFk
X2F0dHJfc2V0c2NoZWRwb2xpY3kocHRocmVhZF9hdHRyX3QgKiwgaW50KTsN
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5KGNvbnN0
IHB0aHJlYWRfYXR0cl90ICosIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVh
ZF9hdHRyX3NldHNjaGVkcGFyYW0ocHRocmVhZF9hdHRyX3QgKiwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1
Y3Qgc2NoZWRfcGFyYW0gKik7DQpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9n
ZXRzY2hlZHBhcmFtKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVk
X3BhcmFtICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZShwdGhyZWFk
X3QgKiwgY29uc3QgcHRocmVhZF9hdHRyX3QgKiwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqICgqKSh2b2lkICopLCB2b2lkICop
Ow0KZXh0ZXJuIGludCBwdGhyZWFkX29uY2UocHRocmVhZF9vbmNlX3QgKiwg
dm9pZCAoKikodm9pZCkpOw0KZXh0ZXJuIGludCBwdGhyZWFkX2pvaW4ocHRo
cmVhZF90LCB2b2lkICoqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2go
cHRocmVhZF90KTsNCmV4dGVybiB2b2lkIHB0aHJlYWRfZXhpdCh2b2lkICop
Ow0KZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbChwdGhyZWFkX3QpOw0KZXh0
ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0ocHRocmVhZF90LCBpbnQs
IGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsNCmV4dGVybiBpbnQgcHRo
cmVhZF9nZXRzY2hlZHBhcmFtKHB0aHJlYWRfdCwgaW50ICosIHN0cnVjdCBz
Y2hlZF9wYXJhbSAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxz
dGF0ZShpbnQsIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5j
ZWx0eXBlKGludCwgaW50ICopOw0KZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0
Y2FuY2VsKHZvaWQpOw0KZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFsKHB0aHJl
YWRfdCwgcHRocmVhZF90KTsNCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfY3Jl
YXRlKHB0aHJlYWRfa2V5X3QgKiwgdm9pZCAoKikodm9pZCAqKSk7DQpleHRl
cm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZShwdGhyZWFkX2tleV90KTsNCmV4
dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90LCBj
b25zdCB2b2lkICopOw0KZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lm
aWMocHRocmVhZF9rZXlfdCk7DQpleHRlcm4gcHRocmVhZF90IHB0aHJlYWRf
c2VsZih2b2lkKTsNCg0KDQoNCg0KZXh0ZXJuIGludCBwdGhyZWFkX211dGV4
YXR0cl9pbml0KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7DQpleHRlcm4gaW50
IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kocHRocmVhZF9tdXRleGF0dHJf
dCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJl
ZChwdGhyZWFkX211dGV4YXR0cl90ICosIGludCk7DQpleHRlcm4gaW50IHB0
aHJlYWRfbXV0ZXhhdHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVhZF9tdXRl
eGF0dHJfdCAqLCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhh
dHRyX3NldHByb3RvY29sKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50KTsN
CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHJvdG9jb2woY29u
c3QgcHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQgKik7DQpleHRlcm4gaW50
IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHByaW9jZWlsaW5nKHB0aHJlYWRfbXV0
ZXhhdHRyX3QgKiwgaW50KTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0
dHJfZ2V0cHJpb2NlaWxpbmcoY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAq
LCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdChwdGhy
ZWFkX211dGV4X3QgKiwgY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqKTsN
CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95KHB0aHJlYWRfbXV0
ZXhfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9sb2NrKHB0aHJl
YWRfbXV0ZXhfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxv
Y2socHRocmVhZF9tdXRleF90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX211
dGV4X3RyeWxvY2socHRocmVhZF9tdXRleF90ICopOw0KZXh0ZXJuIGludCBw
dGhyZWFkX211dGV4X3NldHByaW9jZWlsaW5nKHB0aHJlYWRfbXV0ZXhfdCAq
LCBpbnQsIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9nZXRw
cmlvY2VpbGluZyhwdGhyZWFkX211dGV4X3QgKiwgaW50ICopOw0KZXh0ZXJu
IGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQocHRocmVhZF9jb25kYXR0cl90
ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kocHRo
cmVhZF9jb25kYXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRh
dHRyX3NldHBzaGFyZWQocHRocmVhZF9jb25kYXR0cl90ICosIGludCk7DQpl
eHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZChjb25zdCBw
dGhyZWFkX2NvbmRhdHRyX3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhy
ZWFkX2NvbmRfaW5pdChwdGhyZWFkX2NvbmRfdCAqLCBjb25zdCBwdGhyZWFk
X2NvbmRhdHRyX3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0
cm95KHB0aHJlYWRfY29uZF90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2Nv
bmRfYnJvYWRjYXN0KHB0aHJlYWRfY29uZF90ICopOw0KZXh0ZXJuIGludCBw
dGhyZWFkX2NvbmRfc2lnbmFsKHB0aHJlYWRfY29uZF90ICopOw0KZXh0ZXJu
IGludCBwdGhyZWFkX2NvbmRfd2FpdChwdGhyZWFkX2NvbmRfdCAqLCBwdGhy
ZWFkX211dGV4X3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfY29uZF90aW1l
ZHdhaXQocHRocmVhZF9jb25kX3QgKiwgcHRocmVhZF9tdXRleF90ICosDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RydWN0IHRpbWVzcGVjICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
Z2V0Z3VhcmRzaXplKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCAq
KTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6ZShwdGhy
ZWFkX2F0dHJfdCAqLCBzaXplX3QpOw0KZXh0ZXJuIGludCBwdGhyZWFkX2dl
dGNvbmN1cnJlbmN5KHZvaWQpOw0KZXh0ZXJuIGludCBwdGhyZWFkX3NldGNv
bmN1cnJlbmN5KGludCBuZXd2YWwpOw0KZXh0ZXJuIGludCBwdGhyZWFkX211
dGV4YXR0cl9zZXR0eXBlKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50KTsN
CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZShjb25zdCBw
dGhyZWFkX211dGV4YXR0cl90ICosIGludCAqKTsNCmV4dGVybiBpbnQgcHRo
cmVhZF9yd2xvY2tfaW5pdChwdGhyZWFkX3J3bG9ja190ICosDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfcndsb2Nr
YXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95
KHB0aHJlYWRfcndsb2NrX3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfcnds
b2NrX3JkbG9jayhwdGhyZWFkX3J3bG9ja190ICopOw0KZXh0ZXJuIGludCBw
dGhyZWFkX3J3bG9ja190cnlyZGxvY2socHRocmVhZF9yd2xvY2tfdCAqKTsN
CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrKHB0aHJlYWRfcnds
b2NrX3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXdybG9j
ayhwdGhyZWFkX3J3bG9ja190ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3
bG9ja191bmxvY2socHRocmVhZF9yd2xvY2tfdCAqKTsNCmV4dGVybiBpbnQg
cHRocmVhZF9yd2xvY2thdHRyX2luaXQocHRocmVhZF9yd2xvY2thdHRyX3Qg
Kik7DQpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95KHB0
aHJlYWRfcndsb2NrYXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3
bG9ja2F0dHJfZ2V0cHNoYXJlZChjb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJf
dCAqLCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9z
ZXRwc2hhcmVkKHB0aHJlYWRfcndsb2NrYXR0cl90ICosIGludCk7DQojIDMw
NCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi43LzMuMC9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0DQp9DQojIDM4
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3Vu
LXNvbGFyaXMyLjcvYml0cy9ndGhyLWRlZmF1bHQuaCIgMiAzDQoNCnR5cGVk
ZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5X3Q7DQp0eXBlZGVmIHB0
aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7DQp0eXBlZGVmIHB0aHJl
YWRfbXV0ZXhfdCBfX2d0aHJlYWRfbXV0ZXhfdDsNCg0KDQoNCg0KDQoNCiNw
cmFnbWEgd2VhayBwdGhyZWFkX29uY2UNCiNwcmFnbWEgd2VhayBwdGhyZWFk
X2tleV9jcmVhdGUNCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9kZWxldGUN
CiNwcmFnbWEgd2VhayBwdGhyZWFkX2dldHNwZWNpZmljDQojcHJhZ21hIHdl
YWsgcHRocmVhZF9zZXRzcGVjaWZpYw0KI3ByYWdtYSB3ZWFrIHB0aHJlYWRf
Y3JlYXRlDQoNCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2xvY2sNCiNw
cmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3RyeWxvY2sNCiNwcmFnbWEgd2Vh
ayBwdGhyZWFkX211dGV4X3VubG9jaw0KIyA3OCAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMv
Z3Roci1kZWZhdWx0LmgiIDMNCnN0YXRpYyB2b2lkICpfX2d0aHJlYWRfYWN0
aXZlX3B0ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0ZTsNCg0Kc3RhdGlj
IGlubGluZSBpbnQNCl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkNCnsNCiAg
cmV0dXJuIF9fZ3RocmVhZF9hY3RpdmVfcHRyICE9IDA7DQp9DQojIDQyNyAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1z
b2xhcmlzMi43L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMNCnN0YXRpYyBpbmxp
bmUgaW50DQpfX2d0aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25j
ZSwgdm9pZCAoKmZ1bmMpICh2b2lkKSkNCnsNCiAgaWYgKF9fZ3RocmVhZF9h
Y3RpdmVfcCAoKSkNCiAgICByZXR1cm4gcHRocmVhZF9vbmNlIChvbmNlLCBm
dW5jKTsNCiAgZWxzZQ0KICAgIHJldHVybiAtMTsNCn0NCg0Kc3RhdGljIGlu
bGluZSBpbnQNCl9fZ3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5
X3QgKmtleSwgdm9pZCAoKmR0b3IpICh2b2lkICopKQ0Kew0KICByZXR1cm4g
cHRocmVhZF9rZXlfY3JlYXRlIChrZXksIGR0b3IpOw0KfQ0KDQpzdGF0aWMg
aW5saW5lIGludA0KX19ndGhyZWFkX2tleV9kdG9yIChfX2d0aHJlYWRfa2V5
X3Qga2V5LCB2b2lkICpwdHIpDQp7DQoNCiAgaWYgKHB0cikNCiAgICByZXR1
cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCAwKTsNCiAgZWxzZQ0KICAg
IHJldHVybiAwOw0KfQ0KDQpzdGF0aWMgaW5saW5lIGludA0KX19ndGhyZWFk
X2tleV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBrZXkpDQp7DQogIHJldHVy
biBwdGhyZWFkX2tleV9kZWxldGUgKGtleSk7DQp9DQoNCnN0YXRpYyBpbmxp
bmUgdm9pZCAqDQpfX2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9r
ZXlfdCBrZXkpDQp7DQogIHJldHVybiBwdGhyZWFkX2dldHNwZWNpZmljIChr
ZXkpOw0KfQ0KDQpzdGF0aWMgaW5saW5lIGludA0KX19ndGhyZWFkX3NldHNw
ZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkICpwdHIp
DQp7DQogIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmljIChrZXksIHB0cik7
DQp9DQoNCnN0YXRpYyBpbmxpbmUgaW50DQpfX2d0aHJlYWRfbXV0ZXhfbG9j
ayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQ0Kew0KICBpZiAoX19ndGhy
ZWFkX2FjdGl2ZV9wICgpKQ0KICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xv
Y2sgKG11dGV4KTsNCiAgZWxzZQ0KICAgIHJldHVybiAwOw0KfQ0KDQpzdGF0
aWMgaW5saW5lIGludA0KX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3Ro
cmVhZF9tdXRleF90ICptdXRleCkNCnsNCiAgaWYgKF9fZ3RocmVhZF9hY3Rp
dmVfcCAoKSkNCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF90cnlsb2NrICht
dXRleCk7DQogIGVsc2UNCiAgICByZXR1cm4gMDsNCn0NCg0Kc3RhdGljIGlu
bGluZSBpbnQNCl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9t
dXRleF90ICptdXRleCkNCnsNCiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAo
KSkNCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sgKG11dGV4KTsN
CiAgZWxzZQ0KICAgIHJldHVybiAwOw0KfQ0KIyA5OSAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2Jp
dHMvZ3Roci5oIiAyIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2lvLmgi
IDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCiAgdHlwZWRlZiBsb25nIHN0
cmVhbW9mZjsNCiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsNCg0K
DQoNCiAgdHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsNCg0KICB0eXBl
ZGVmIF9fZ3RocmVhZF9tdXRleF90IF9fY19sb2NrOw0KDQoNCg0KICB0eXBl
ZGVmIEZJTEUgX19jX2ZpbGVfdHlwZTsNCg0KDQogIHN0cnVjdCBfX2lvc19m
bGFncw0KICB7DQogICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOw0KDQog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYm9vbGFscGhhID0gMHgw
MDAxOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4
MDAwMjsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhlZCA9
IDB4MDAwNDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19oZXgg
PSAweDAwMDg7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50
ZXJuYWwgPSAweDAwMTA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg
X1NfbGVmdCA9IDB4MDAyMDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19vY3QgPSAweDAwNDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfcmlnaHQgPSAweDAwODA7DQogICAgc3RhdGljIGNvbnN0IF9faW50
X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsNCiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsNCiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7DQog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvcyA9IDB4MDgw
MDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19za2lwd3MgPSAw
eDEwMDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1
ZiA9IDB4MjAwMDsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191
cHBlcmNhc2UgPSAweDQwMDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfYWRqdXN0ZmllbGQgPSAweDAwMjAgfCAweDAwODAgfCAweDAwMTA7
DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0g
MHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4Ow0KICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7DQoN
Cg0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4
MDE7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZW9mYml0ID0g
MHgwMjsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0
ID0gMHgwNDsNCg0KDQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
YXBwID0gMHgwMTsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19h
dGUgPSAweDAyOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jp
biA9IDB4MDQ7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW4g
PSAweDA4Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9
IDB4MTA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMg
PSAweDIwOw0KICB9Ow0KfQ0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAx
IDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jd2NoYXIuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytj
b25maWcuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMw0KIyAxICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5o
IiAxIDMNCiMgMzkgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAzDQojIDQyICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDMNCiMg
MSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDEgMyA0DQojIDE4ICIv
aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMyA0DQojcHJhZ21hIGlkZW50
ICJAKCMpd2NoYXIuaAkxLjMxCTk4LzA1LzA0IFNNSSINCg0KIyAxICIvdXNy
L2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMjEgIi9o
b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAyIDMgNA0KIyAxICIvdXNyL2lu
Y2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0DQojIDIyICIvaG9tZS9tZGVp
bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w
L2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRlL3N0
ZGlvX3RhZy5oIiAxIDMgNA0KIyAyMyAiL2hvbWUvbWRlaWwvYmluLy4uL2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3dj
aGFyLmgiIDIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS93Y2hhcl9pbXBsLmgi
IDEgMyA0DQojIDkgIi91c3IvaW5jbHVkZS93Y2hhcl9pbXBsLmgiIDMgNA0K
I3ByYWdtYSBpZGVudCAiQCgjKXdjaGFyX2ltcGwuaAkxLjIJOTgvMDIvMjcg
U01JIg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAz
IDQNCiMgMTIgIi91c3IvaW5jbHVkZS93Y2hhcl9pbXBsLmgiIDIgMyA0DQoN
Cg0KZXh0ZXJuICJDIiB7DQoNCg0KDQp0eXBlZGVmIHN0cnVjdCB7DQoNCg0K
DQogICAgICAgIGludCBfX2ZpbGxlcls2XTsNCg0KfSBfX21ic3RhdGVfdDsN
Cg0KDQoNCn0NCiMgMjQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAy
IDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNA0KIyAyNSAi
L2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDIgMyA0DQoNCg0KDQoNCiMg
MSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDEgMyA0DQojIDMwICIv
aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQNCg0KDQoNCiMgMSAi
L3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMyA0DQojIDE2ICIvdXNyL2luY2x1
ZGUvY3R5cGUuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpY3R5cGUuaAkx
LjMwCTk4LzAxLzE2IFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2Zl
YXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTkgIi91c3IvaW5jbHVkZS9jdHlw
ZS5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyA0OCAiL3Vzci9pbmNs
dWRlL2N0eXBlLmgiIDMgNA0KZXh0ZXJuIGludCBpc2FsbnVtKGludCk7DQpl
eHRlcm4gaW50IGlzYWxwaGEoaW50KTsNCmV4dGVybiBpbnQgaXNjbnRybChp
bnQpOw0KZXh0ZXJuIGludCBpc2RpZ2l0KGludCk7DQpleHRlcm4gaW50IGlz
Z3JhcGgoaW50KTsNCmV4dGVybiBpbnQgaXNsb3dlcihpbnQpOw0KZXh0ZXJu
IGludCBpc3ByaW50KGludCk7DQpleHRlcm4gaW50IGlzcHVuY3QoaW50KTsN
CmV4dGVybiBpbnQgaXNzcGFjZShpbnQpOw0KZXh0ZXJuIGludCBpc3VwcGVy
KGludCk7DQpleHRlcm4gaW50IGlzeGRpZ2l0KGludCk7DQpleHRlcm4gaW50
IHRvbG93ZXIoaW50KTsNCmV4dGVybiBpbnQgdG91cHBlcihpbnQpOw0KDQoN
Cg0KDQpleHRlcm4gaW50IGlzYXNjaWkoaW50KTsNCmV4dGVybiBpbnQgdG9h
c2NpaShpbnQpOw0KZXh0ZXJuIGludCBfdG9sb3dlcihpbnQpOw0KZXh0ZXJu
IGludCBfdG91cHBlcihpbnQpOw0KDQoNCg0KZXh0ZXJuIHVuc2lnbmVkIGNo
YXIgX19jdHlwZVtdOw0KZXh0ZXJuIHVuc2lnbmVkIGludCAqX19jdHlwZV9t
YXNrOw0KZXh0ZXJuIGludCAqX190cmFuc191cHBlcjsNCmV4dGVybiBpbnQg
Kl9fdHJhbnNfbG93ZXI7DQojIDE2MyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi
IDMgNA0KfQ0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDIg
MyA0DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQN
CiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAyIDMgNA0KDQoN
CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92YV9saXN0LmgiIDEgMyA0DQojIDM4
ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQNCg0KDQpleHRl
cm4gIkMiIHsNCiMgNjEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAz
IDQNCnR5cGVkZWYgbG9uZyB3aW50X3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiBp
bnQgd2N0eXBlX3Q7DQojIDEwMyAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFy
LmgiIDMgNA0KdHlwZWRlZiBfX21ic3RhdGVfdCBtYnN0YXRlX3Q7DQojIDEx
MyAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDMgNA0KZXh0ZXJuIGlu
dCBpc3dhbHBoYSh3aW50X3QpOw0KZXh0ZXJuIGludCBpc3d1cHBlcih3aW50
X3QpOw0KZXh0ZXJuIGludCBpc3dsb3dlcih3aW50X3QpOw0KZXh0ZXJuIGlu
dCBpc3dkaWdpdCh3aW50X3QpOw0KZXh0ZXJuIGludCBpc3d4ZGlnaXQod2lu
dF90KTsNCmV4dGVybiBpbnQgaXN3YWxudW0od2ludF90KTsNCmV4dGVybiBp
bnQgaXN3c3BhY2Uod2ludF90KTsNCmV4dGVybiBpbnQgaXN3cHVuY3Qod2lu
dF90KTsNCmV4dGVybiBpbnQgaXN3cHJpbnQod2ludF90KTsNCmV4dGVybiBp
bnQgaXN3Z3JhcGgod2ludF90KTsNCmV4dGVybiBpbnQgaXN3Y250cmwod2lu
dF90KTsNCmV4dGVybiBpbnQgaXN3Y3R5cGUod2ludF90LCB3Y3R5cGVfdCk7
DQpleHRlcm4gd2ludF90IHRvd2xvd2VyKHdpbnRfdCk7DQpleHRlcm4gd2lu
dF90IHRvd3VwcGVyKHdpbnRfdCk7DQpleHRlcm4gd2ludF90IGZnZXR3Yyhf
X0ZJTEUgKik7DQpleHRlcm4gd2NoYXJfdCAqZmdldHdzKHdjaGFyX3QgKiwg
aW50LCBfX0ZJTEUgKik7DQpleHRlcm4gd2ludF90IGZwdXR3Yyh3aW50X3Qs
IF9fRklMRSAqKTsNCmV4dGVybiBpbnQgZnB1dHdzKGNvbnN0IHdjaGFyX3Qg
KiwgX19GSUxFICopOw0KZXh0ZXJuIHdpbnRfdCB1bmdldHdjKHdpbnRfdCwg
X19GSUxFICopOw0KZXh0ZXJuIHdpbnRfdCBnZXR3YyhfX0ZJTEUgKik7DQpl
eHRlcm4gd2ludF90IGdldHdjaGFyKHZvaWQpOw0KZXh0ZXJuIHdpbnRfdCBw
dXR3Yyh3aW50X3QsIF9fRklMRSAqKTsNCmV4dGVybiB3aW50X3QgcHV0d2No
YXIod2ludF90KTsNCmV4dGVybiBkb3VibGUgd2NzdG9kKGNvbnN0IHdjaGFy
X3QgKiwgd2NoYXJfdCAqKik7DQpleHRlcm4gbG9uZyB3Y3N0b2woY29uc3Qg
d2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpOw0KZXh0ZXJuIHVuc2lnbmVk
IGxvbmcgd2NzdG91bChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGlu
dCk7DQpleHRlcm4gd2NoYXJfdCAqd2NzY2F0KHdjaGFyX3QgKiwgY29uc3Qg
d2NoYXJfdCAqKTsNCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHIoY29uc3Qgd2No
YXJfdCAqLCB3Y2hhcl90KTsNCmV4dGVybiBpbnQgd2NzY21wKGNvbnN0IHdj
aGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsNCmV4dGVybiBpbnQgd2NzY29s
bChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7DQpleHRlcm4g
d2NoYXJfdCAqd2NzY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsN
CmV4dGVybiBzaXplX3Qgd2NzY3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0
IHdjaGFyX3QgKik7DQpleHRlcm4gc2l6ZV90IHdjc2xlbihjb25zdCB3Y2hh
cl90ICopOw0KZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQod2NoYXJfdCAqLCBj
b25zdCB3Y2hhcl90ICosIHNpemVfdCk7DQpleHRlcm4gaW50IHdjc25jbXAo
Y29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7DQpl
eHRlcm4gd2NoYXJfdCAqd2NzbmNweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFy
X3QgKiwgc2l6ZV90KTsNCmV4dGVybiB3Y2hhcl90ICp3Y3NwYnJrKGNvbnN0
IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsNCmV4dGVybiB3Y2hhcl90
ICp3Y3NyY2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7DQpleHRlcm4g
c2l6ZV90IHdjc3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3Qg
Kik7DQpleHRlcm4gd2NoYXJfdCAqd2Nzd2NzKGNvbnN0IHdjaGFyX3QgKiwg
Y29uc3Qgd2NoYXJfdCAqKTsNCmV4dGVybiBpbnQgd2Nzd2lkdGgoY29uc3Qg
d2NoYXJfdCAqLCBzaXplX3QpOw0KZXh0ZXJuIHNpemVfdCB3Y3N4ZnJtKHdj
aGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOw0KZXh0ZXJuIGlu
dCB3Y3dpZHRoKGNvbnN0IHdjaGFyX3QpOw0KZXh0ZXJuIHdjdHlwZV90IHdj
dHlwZShjb25zdCBjaGFyICopOw0KIyAxNjkgIi9ob21lL21kZWlsL2Jpbi8u
Li9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVk
ZS93Y2hhci5oIiAzIDQNCmV4dGVybiB3Y2hhcl90ICpfX3djc3Rva194cGc1
KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsNCmV4
dGVybiBzaXplX3QgX193Y3NmdGltZV94cGc1KHdjaGFyX3QgKiwgc2l6ZV90
LCBjb25zdCB3Y2hhcl90ICosDQogICAgICAgIGNvbnN0IHN0cnVjdCB0bSAq
KTsNCiMgMTgwICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMyA0DQpl
eHRlcm4gd2ludF90IGJ0b3djKGludCk7DQpleHRlcm4gaW50IGZ3cHJpbnRm
KF9fRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7DQpleHRlcm4gaW50
IGZ3c2NhbmYoX19GSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsNCmV4
dGVybiBpbnQgZndpZGUoX19GSUxFICosIGludCk7DQpleHRlcm4gaW50IG1i
c2luaXQoY29uc3QgbWJzdGF0ZV90ICopOw0KZXh0ZXJuIHNpemVfdCBtYnJs
ZW4oY29uc3QgY2hhciAqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsNCmV4dGVy
biBzaXplX3QgbWJydG93Yyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6
ZV90LCBtYnN0YXRlX3QgKik7DQpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyh3
Y2hhcl90ICosIGNvbnN0IGNoYXIgKiosIHNpemVfdCwgbWJzdGF0ZV90ICop
Ow0KZXh0ZXJuIGludCBzd3ByaW50Zih3Y2hhcl90ICosIHNpemVfdCwgY29u
c3Qgd2NoYXJfdCAqLCAuLi4pOw0KZXh0ZXJuIGludCBzd3NjYW5mKGNvbnN0
IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOw0KZXh0ZXJuIGlu
dCB2ZndwcmludGYoX19GSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgX192YV9s
aXN0KTsNCmV4dGVybiBpbnQgdndwcmludGYoY29uc3Qgd2NoYXJfdCAqLCBf
X3ZhX2xpc3QpOw0KZXh0ZXJuIGludCB2c3dwcmludGYod2NoYXJfdCAqLCBz
aXplX3QsIGNvbnN0IHdjaGFyX3QgKiwgX192YV9saXN0KTsNCmV4dGVybiBz
aXplX3Qgd2NydG9tYihjaGFyICosIHdjaGFyX3QsIG1ic3RhdGVfdCAqKTsN
CmV4dGVybiBzaXplX3Qgd2NzcnRvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJf
dCAqKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7DQpleHRlcm4gd2NoYXJfdCAq
d2Nzc3RyKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsNCmV4
dGVybiBpbnQgd2N0b2Iod2ludF90KTsNCmV4dGVybiB3Y2hhcl90ICp3bWVt
Y2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6ZV90KTsNCmV4dGVy
biBpbnQgd21lbWNtcChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3Qg
Kiwgc2l6ZV90KTsNCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5KHdjaGFyX3Qg
KiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOw0KZXh0ZXJuIHdjaGFyX3Qg
KndtZW1tb3ZlKHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3Qp
Ow0KZXh0ZXJuIHdjaGFyX3QgKndtZW1zZXQod2NoYXJfdCAqLCB3Y2hhcl90
LCBzaXplX3QpOw0KZXh0ZXJuIGludCB3cHJpbnRmKGNvbnN0IHdjaGFyX3Qg
KiwgLi4uKTsNCmV4dGVybiBpbnQgd3NjYW5mKGNvbnN0IHdjaGFyX3QgKiwg
Li4uKTsNCiMgMzE4ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMyA0
DQpleHRlcm4gd2ludF90IF9fZmdldHdjX3hwZzUoX19GSUxFICopOw0KZXh0
ZXJuIHdpbnRfdCBfX2dldHdjX3hwZzUoX19GSUxFICopOw0KZXh0ZXJuIHdp
bnRfdCBfX2dldHdjaGFyX3hwZzUodm9pZCk7DQpleHRlcm4gd2ludF90IF9f
ZnB1dHdjX3hwZzUod2ludF90LCBfX0ZJTEUgKik7DQpleHRlcm4gd2ludF90
IF9fcHV0d2NfeHBnNSh3aW50X3QsIF9fRklMRSAqKTsNCmV4dGVybiB3aW50
X3QgX19wdXR3Y2hhcl94cGc1KHdpbnRfdCk7DQpleHRlcm4gd2NoYXJfdCAq
X19mZ2V0d3NfeHBnNSh3Y2hhcl90ICosIGludCwgX19GSUxFICopOw0KZXh0
ZXJuIGludCBfX2ZwdXR3c194cGc1KGNvbnN0IHdjaGFyX3QgKiwgX19GSUxF
ICopOw0KZXh0ZXJuIHdpbnRfdCBfX3VuZ2V0d2NfeHBnNSh3aW50X3QsIF9f
RklMRSAqKTsNCiMgMzUyICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIg
MyA0DQp9DQojIDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY3djaGFyLmgiIDIgMw0KIyA1NyAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzDQpu
YW1lc3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6bWJzdGF0ZV90Ow0KfQ0KIyA0
MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBv
cy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfU3RhdGVUPg0KICAgIGNsYXNzIGZwb3MNCiAgICB7DQog
ICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9TdGF0ZVQgX19zdGF0ZV90
eXBlOw0KDQogICAgcHJpdmF0ZToNCiAgICAgIHN0cmVhbW9mZiBfTV9vZmY7
DQogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7DQoNCiAgICBwdWJsaWM6DQog
ICAgICBfX3N0YXRlX3R5cGUNCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1
cm4gX01fc3Q7IH0NCg0KICAgICAgdm9pZA0KICAgICAgc3RhdGUoX19zdGF0
ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9DQoNCg0KDQogICAgICBm
cG9zKCk6IF9NX29mZihzdHJlYW1vZmYoKSksIF9NX3N0KF9fc3RhdGVfdHlw
ZSgpKSB7IH0NCg0KICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9fc3Rh
dGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpDQogICAgICA6IF9NX29m
ZihfX29mZiksIF9NX3N0KF9fc3QpIHsgfQ0KDQogICAgICBvcGVyYXRvciBz
dHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0NCg0KICAgICAg
ZnBvcyYNCiAgICAgIG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9N
X29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9DQoNCiAgICAgIGZwb3Mm
DQogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYg
LT0gX19vZmY7IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBmcG9zDQogICAg
ICBvcGVyYXRvcisoc3RyZWFtb2ZmIF9fb2ZmKQ0KICAgICAgew0KICAgICAg
ICBmcG9zIF9fdCgqdGhpcyk7DQogICAgICAgIF9fdCArPSBfX29mZjsNCiAg
ICAgICAgcmV0dXJuIF9fdDsNCiAgICAgIH0NCg0KICAgICAgZnBvcw0KICAg
ICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikNCiAgICAgIHsNCiAgICAg
ICAgZnBvcyBfX3QoKnRoaXMpOw0KICAgICAgICBfX3QgLT0gX19vZmY7DQog
ICAgICAgIHJldHVybiBfX3Q7DQogICAgICB9DQoNCiAgICAgIGJvb2wNCiAg
ICAgIG9wZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0DQogICAg
ICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2ZmOyB9DQoNCiAgICAg
IGJvb2wNCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNv
bnN0DQogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19wb3MuX01fb2ZmOyB9
DQoNCiAgICAgIHN0cmVhbW9mZg0KICAgICAgX01fcG9zaXRpb24oKSBjb25z
dCB7IHJldHVybiBfTV9vZmY7IH0NCg0KICAgICAgdm9pZA0KICAgICAgX01f
cG9zaXRpb24oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9
DQogICAgfTsNCg0KDQogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHN0cmVh
bXBvczsNCg0KDQoNCn0NCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAzDQojIDEgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0
LmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
LXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAz
DQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9mdW5jdGV4Y2VwdC5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQog
IHZvaWQNCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOw0KDQoNCiAg
dm9pZA0KICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsNCg0KDQogIHZvaWQN
CiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsNCg0KICB2b2lkDQogIF9fdGhy
b3dfYmFkX3R5cGVpZCh2b2lkKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19s
b2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190
aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lk
DQogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3Mp
Ow0KDQogIHZvaWQNCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNv
bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X3J1bnRpbWVf
ZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3df
cmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9f
dGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2
b2lkDQogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3Qg
Y2hhciogX19zKTsNCn0NCiMgNDMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAzDQoNCm5hbWVzcGFj
ZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+DQogICAgY2xhc3Mg
YmFzaWNfaW9zOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNs
YXNzIGJhc2ljX3N0cmVhbWJ1ZjsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+
ID4NCiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOw0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz
PF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX29zdHJlYW07DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh
cl90cmFpdHM8X0NoYXJUPiA+DQogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwNCiAgICAgICAgICAgIHR5cGVu
YW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4NCiAgICBjbGFzcyBi
YXNpY19zdHJpbmdidWY7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwNCiAg
ICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4g
Pg0KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiwNCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0g
YWxsb2NhdG9yPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdz
dHJlYW07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwNCiAgICAgICAgICAg
dHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPg0KICAgIGNs
YXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh
clQ+ID4NCiAgICBjbGFzcyBiYXNpY19maWxlYnVmOw0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh
aXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOw0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX29mc3Ry
ZWFtOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJh
c2ljX2ZzdHJlYW07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+DQogICAg
Y2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsNCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf
Q2hhclQ+ID4NCiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOw0KDQoN
Cg0KICBjbGFzcyBpb3NfYmFzZTsNCg0KDQogIHR5cGVkZWYgYmFzaWNfaW9z
PGNoYXI+IGlvczsNCiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4g
c3RyZWFtYnVmOw0KICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0
cmVhbTsNCiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07
DQogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07DQog
IHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1ZjsNCiAg
dHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJl
YW07DQogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBvc3Ry
aW5nc3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFy
PiBzdHJpbmdzdHJlYW07DQogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFy
PiBmaWxlYnVmOw0KICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlm
c3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3Ry
ZWFtOw0KICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsN
CiMgMTI5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfaW9zZndkLmgiIDMNCn0NCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzDQojIDEgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEg
Mw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2V4
Y2VwdGlvbiIgMw0KZXh0ZXJuICJDKysiIHsNCg0KbmFtZXNwYWNlIHN0ZA0K
ew0KICBjbGFzcyBleGNlcHRpb24NCiAgew0KICBwdWJsaWM6DQogICAgZXhj
ZXB0aW9uKCkgdGhyb3coKSB7IH0NCiAgICB2aXJ0dWFsIH5leGNlcHRpb24o
KSB0aHJvdygpOw0KICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNv
bnN0IHRocm93KCk7DQogIH07DQoNCiAgY2xhc3MgYmFkX2V4Y2VwdGlvbiA6
IHB1YmxpYyBleGNlcHRpb24NCiAgew0KICBwdWJsaWM6DQogICAgYmFkX2V4
Y2VwdGlvbigpIHRocm93KCkgeyB9DQogICAgdmlydHVhbCB+YmFkX2V4Y2Vw
dGlvbigpIHRocm93KCk7DQogIH07DQoNCiAgdHlwZWRlZiB2b2lkICgqdGVy
bWluYXRlX2hhbmRsZXIpICgpOw0KICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVj
dGVkX2hhbmRsZXIpICgpOw0KDQogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90
ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7DQogIHZvaWQg
dGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOw0K
DQogIHVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVj
dGVkX2hhbmRsZXIpIHRocm93KCk7DQogIHZvaWQgdW5leHBlY3RlZCgpIF9f
YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsNCg0KICBib29sIHVuY2F1
Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7DQp9DQoNCn0NCiMgNDEgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIg
MiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL2NoYXJfdHJhaXRzLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMw0KDQoj
IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jc3RyaW5nLmgiIDEgMw0KIyAzNyAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMw0KIyAxICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRl
Zi5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDIgMw0KIyA0MCAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIg
Mw0KIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0DQojIDQxICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0
cmluZy5oIiAyIDMNCiMgNjYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMNCm5hbWVzcGFjZSBzdGQN
CnsNCiAgdXNpbmcgOjptZW1jcHk7DQogIHVzaW5nIDo6bWVtbW92ZTsNCiAg
dXNpbmcgOjpzdHJjcHk7DQogIHVzaW5nIDo6c3RybmNweTsNCiAgdXNpbmcg
OjpzdHJjYXQ7DQogIHVzaW5nIDo6c3RybmNhdDsNCiAgdXNpbmcgOjptZW1j
bXA7DQogIHVzaW5nIDo6c3RyY21wOw0KICB1c2luZyA6OnN0cmNvbGw7DQog
IHVzaW5nIDo6c3RybmNtcDsNCiAgdXNpbmcgOjpzdHJ4ZnJtOw0KICB1c2lu
ZyA6OnN0cmNzcG47DQogIHVzaW5nIDo6c3Ryc3BuOw0KICB1c2luZyA6OnN0
cnRvazsNCiAgdXNpbmcgOjptZW1zZXQ7DQogIHVzaW5nIDo6c3RyZXJyb3I7
DQogIHVzaW5nIDo6c3RybGVuOw0KDQogIHVzaW5nIDo6bWVtY2hyOw0KDQog
IGlubGluZSB2b2lkKg0KICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBz
aXplX3QgX19uKQ0KICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2FzdDxjb25z
dCB2b2lkKj4oX19wKSwgX19jLCBfX24pOyB9DQoNCiAgdXNpbmcgOjpzdHJj
aHI7DQoNCiAgaW5saW5lIGNoYXIqDQogIHN0cmNocihjaGFyKiBfX3MxLCBp
bnQgX19uKQ0KICB7IHJldHVybiBfX2J1aWx0aW5fc3RyY2hyKGNvbnN0X2Nh
c3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9DQoNCiAgdXNpbmcgOjpz
dHJwYnJrOw0KDQogIGlubGluZSBjaGFyKg0KICBzdHJwYnJrKGNoYXIqIF9f
czEsIGNvbnN0IGNoYXIqIF9fczIpDQogIHsgcmV0dXJuIF9fYnVpbHRpbl9z
dHJwYnJrKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsg
fQ0KDQogIHVzaW5nIDo6c3RycmNocjsNCg0KICBpbmxpbmUgY2hhcioNCiAg
c3RycmNocihjaGFyKiBfX3MxLCBpbnQgX19uKQ0KICB7IHJldHVybiBfX2J1
aWx0aW5fc3RycmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwg
X19uKTsgfQ0KDQogIHVzaW5nIDo6c3Ryc3RyOw0KDQogIGlubGluZSBjaGFy
Kg0KICBzdHJzdHIoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikNCiAg
eyByZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNo
YXIqPihfX3MxKSwgX19zMik7IH0NCn0NCiMgNDAgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMw0K
IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9m
cG9zLmgiIDEgMw0KIyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMiAzDQoNCm5hbWVzcGFjZSBz
dGQNCnsNCg0KDQoNCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPg0KICAgIHN0
cnVjdCBjaGFyX3RyYWl0cw0KICAgIHsNCiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsNCg0KICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu
dF90eXBlOw0KICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5cGU7DQog
ICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsNCiAgICAgIHR5cGVk
ZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7DQoNCiAgICAgIHN0YXRpYyB2b2lk
DQogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5
cGUmIF9fYzIpDQogICAgICB7IF9fYzEgPSBfX2MyOyB9DQoNCiAgICAgIHN0
YXRpYyBib29sDQogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNv
bnN0IGNoYXJfdHlwZSYgX19jMikNCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0g
X19jMjsgfQ0KDQogICAgICBzdGF0aWMgYm9vbA0KICAgICAgbHQoY29uc3Qg
Y2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpDQogICAg
ICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQ0KDQogICAgICBzdGF0aWMgaW50
DQogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3Qg
Y2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQ0KICAgICAgew0KICAgICAg
ICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQ0KICAg
ICAgICAgIGlmICghZXEoX19zMVtfX2ldLCBfX3MyW19faV0pKQ0KICAgICAg
ICAgICAgcmV0dXJuIGx0KF9fczFbX19pXSwgX19zMltfX2ldKSA/IC0xIDog
MTsNCiAgICAgICAgcmV0dXJuIDA7DQogICAgICB9DQoNCiAgICAgIHN0YXRp
YyBzaXplX3QNCiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykN
CiAgICAgIHsNCiAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7
DQogICAgICAgIHdoaWxlICgqX19wKSArK19fcDsNCiAgICAgICAgcmV0dXJu
IChfX3AgLSBfX3MpOw0KICAgICAgfQ0KDQogICAgICBzdGF0aWMgY29uc3Qg
Y2hhcl90eXBlKg0KICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywg
c2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpDQogICAgICB7DQog
ICAgICAgIGZvciAoY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7IHNpemVf
dChfX3AgLSBfX3MpIDwgX19uOyArK19fcCkNCiAgICAgICAgICBpZiAoKl9f
cCA9PSBfX2EpIHJldHVybiBfX3A7DQogICAgICAgIHJldHVybiAwOw0KICAg
ICAgfQ0KDQogICAgICBzdGF0aWMgY2hhcl90eXBlKg0KICAgICAgbW92ZShj
aGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90
IF9fbikNCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1tb3ZlKF9f
czEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKTsgfQ0KDQogICAg
ICBzdGF0aWMgY2hhcl90eXBlKg0KICAgICAgY29weShjaGFyX3R5cGUqIF9f
czEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAg
IHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkoX19zMSwgX19zMiwgX19u
ICogc2l6ZW9mKGNoYXJfdHlwZSkpOyB9DQoNCiAgICAgIHN0YXRpYyBjaGFy
X3R5cGUqDQogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBf
X24sIGNoYXJfdHlwZSBfX2EpDQogICAgICB7DQogICAgICAgIGZvciAoY2hh
cl90eXBlKiBfX3AgPSBfX3M7IF9fcCA8IF9fcyArIF9fbjsgKytfX3ApDQog
ICAgICAgICAgYXNzaWduKCpfX3AsIF9fYSk7DQogICAgICAgIHJldHVybiBf
X3M7DQogICAgICB9DQoNCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUNCiAgICAg
IHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQ0KICAgICAgeyBy
ZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0NCg0KICAgICAgc3RhdGljIGludF90
eXBlDQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykg
eyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQ0KDQogICAgICBzdGF0aWMgYm9v
bA0KICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNv
bnN0IGludF90eXBlJiBfX2MyKQ0KICAgICAgeyByZXR1cm4gX19jMSA9PSBf
X2MyOyB9DQoNCiAgICAgIHN0YXRpYyBpbnRfdHlwZQ0KICAgICAgZW9mKCkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KC0xKTsgfQ0KDQogICAg
ICBzdGF0aWMgaW50X3R5cGUNCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5
cGUmIF9fYykNCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9m
KCkpID8gaW50X3R5cGUoMCkgOiBfX2M7IH0NCiAgICB9Ow0KDQoNCg0KICB0
ZW1wbGF0ZTw+DQogICAgc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+DQogICAg
ew0KICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVk
ZWYgaW50IGludF90eXBlOw0KICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9z
X3R5cGU7DQogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsNCiAg
ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7DQoNCiAgICAgIHN0
YXRpYyB2b2lkDQogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25z
dCBjaGFyX3R5cGUmIF9fYzIpDQogICAgICB7IF9fYzEgPSBfX2MyOyB9DQoN
CiAgICAgIHN0YXRpYyBib29sDQogICAgICBlcShjb25zdCBjaGFyX3R5cGUm
IF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikNCiAgICAgIHsgcmV0dXJu
IF9fYzEgPT0gX19jMjsgfQ0KDQogICAgICBzdGF0aWMgYm9vbA0KICAgICAg
bHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9f
YzIpDQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQ0KDQogICAgICBz
dGF0aWMgaW50DQogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19z
MSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQ0KICAgICAg
eyByZXR1cm4gbWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0NCg0KICAgICAg
c3RhdGljIHNpemVfdA0KICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSog
X19zKQ0KICAgICAgeyByZXR1cm4gc3RybGVuKF9fcyk7IH0NCg0KICAgICAg
c3RhdGljIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGZpbmQoY29uc3QgY2hh
cl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19h
KQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcl90eXBl
Kj4obWVtY2hyKF9fcywgX19hLCBfX24pKTsgfQ0KDQogICAgICBzdGF0aWMg
Y2hhcl90eXBlKg0KICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0
IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbW1vdmUoX19zMSwgX19zMiwg
X19uKSk7IH0NCg0KICAgICAgc3RhdGljIGNoYXJfdHlwZSoNCiAgICAgIGNv
cHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp
emVfdCBfX24pDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5
cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0NCg0KICAgICAgc3Rh
dGljIGNoYXJfdHlwZSoNCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywg
c2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkNCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbXNldChfX3MsIF9fYSwgX19uKSk7
IH0NCg0KICAgICAgc3RhdGljIGNoYXJfdHlwZQ0KICAgICAgdG9fY2hhcl90
eXBlKGNvbnN0IGludF90eXBlJiBfX2MpDQogICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0NCg0KDQoNCiAgICAgIHN0YXRp
YyBpbnRfdHlwZQ0KICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBl
JiBfX2MpDQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7IH0NCg0KICAgICAg
c3RhdGljIGJvb2wNCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBl
JiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikNCiAgICAgIHsgcmV0dXJu
IF9fYzEgPT0gX19jMjsgfQ0KDQogICAgICBzdGF0aWMgaW50X3R5cGUNCiAg
ICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoLTEp
KTsgfQ0KDQogICAgICBzdGF0aWMgaW50X3R5cGUNCiAgICAgIG5vdF9lb2Yo
Y29uc3QgaW50X3R5cGUmIF9fYykNCiAgICAgIHsgcmV0dXJuIChfX2MgPT0g
ZW9mKCkpID8gMCA6IF9fYzsgfQ0KICB9Ow0KIyAyNjQgIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDMN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
Pg0KICAgIHN0cnVjdCBfQ2hhcl90cmFpdHNfbWF0Y2gNCiAgICB7DQogICAg
ICBfQ2hhclQgX01fYzsNCiAgICAgIF9DaGFyX3RyYWl0c19tYXRjaChfQ2hh
clQgY29uc3QmIF9fYykgOiBfTV9jKF9fYykgeyB9DQoNCiAgICAgIGJvb2wN
CiAgICAgIG9wZXJhdG9yKCkoX0NoYXJUIGNvbnN0JiBfX2EpIHsgcmV0dXJu
IF9UcmFpdHM6OmVxKF9NX2MsIF9fYSk7IH0NCiAgICB9Ow0KfQ0KIyA0MiAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv
cy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMNCiMgNDMgIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzDQoj
IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xv
Y2FsZWZ3ZC5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAzDQoNCiMgMSAiL2hvbWUv
bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlz
Mi43L2JpdHMvYysrY29uZmlnLmgiIDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMw0K
IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMt
c3VuLXNvbGFyaXMyLjcvYml0cy9jKytsb2NhbGUuaCIgMSAzDQojIDM2ICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNv
bGFyaXMyLjcvYml0cy9jKytsb2NhbGUuaCIgMw0KbmFtZXNwYWNlIHN0ZA0K
ew0KICB0eXBlZGVmIGludCogX19jX2xvY2FsZTsNCn0NCiMgNDEgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5o
IiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2NsaW1pdHMuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xpbWl0cy5oIiAzDQoj
IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuNy8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQNCiMgMTEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuNy8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMyA0DQojIDEgIi9ob21l
L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
Ny8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzIDQNCiMgMjUgIi9ob21l
L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
Ny8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMyA0DQojcHJhZ21hIGlkZW50
ICJAKCMpbGltaXRzLmgJMS40OAk5OC8wNy8yMCBTTUkiDQoNCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0DQojIDI4ICIv
aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjcvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0DQojIDEgIi91
c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQNCiMgMjkgIi9ob21l
L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
Ny8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQNCiMgNDAgIi9ob21l
L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
Ny8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMyA0DQojIDEgIi91c3IvaW5j
bHVkZS9zeXMvaW50X2xpbWl0cy5oIiAxIDMgNA0KIyA5ICIvdXNyL2luY2x1
ZGUvc3lzL2ludF9saW1pdHMuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMp
aW50X2xpbWl0cy5oCTEuNQk5OC8wMS8wNiBTTUkiDQojIDQ0ICIvdXNyL2lu
Y2x1ZGUvc3lzL2ludF9saW1pdHMuaCIgMyA0DQojIDEgIi91c3IvaW5jbHVk
ZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQNCiMgNDUgIi91c3IvaW5jbHVkZS9z
eXMvaW50X2xpbWl0cy5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyAx
NjIgIi91c3IvaW5jbHVkZS9zeXMvaW50X2xpbWl0cy5oIiAzIDQNCn0NCiMg
NDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQNCg0K
DQoNCmV4dGVybiAiQyIgew0KIyAzMDcgIi9ob21lL21kZWlsL2Jpbi8uLi9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9z
eXNsaW1pdHMuaCIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zeXMvdW5pc3Rk
LmgiIDEgMyA0DQojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAz
IDQNCiNwcmFnbWEgaWRlbnQgIkAoIyl1bmlzdGQuaAkxLjM2CTk4LzA3LzE2
IFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMu
aCIgMSAzIDQNCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDIg
MyA0DQoNCg0KZXh0ZXJuICJDIiB7DQojIDI2NCAiL3Vzci9pbmNsdWRlL3N5
cy91bmlzdGQuaCIgMyA0DQp9DQojIDMwOCAiL2hvbWUvbWRlaWwvYmluLy4u
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRl
L3N5c2xpbWl0cy5oIiAyIDMgNA0KIyAzMTggIi9ob21lL21kZWlsL2Jpbi8u
Li9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVk
ZS9zeXNsaW1pdHMuaCIgMyA0DQpleHRlcm4gbG9uZyBfc3lzY29uZihpbnQp
Ow0KIyAzMjggIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMyA0
DQp9DQojIDEyICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0
DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY2xpbWl0cy5oIiAyIDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMNCiMgMSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0
cmluZy5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMw0KDQojIDEgIi9ob21lL21k
ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIu
Ny9iaXRzL2MrK2NvbmZpZy5oIiAxIDMNCiMgNDAgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQoj
IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
cmluZ2Z3ZC5oIiAxIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDEgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRz
LmgiIDEgMw0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDEg
Mw0KIyAzMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2l0ZXJhdG9yLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysr
Y29uZmlnLmgiIDEgMw0KIyAzMiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMw0KIyAxICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRl
Zi5oIiAxIDMNCiMgMzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAx
IDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlw
ZXMuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzDQoNCm5h
bWVzcGFjZSBzdGQNCnsNCg0Kc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7
fTsNCnN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9Ow0Kc3RydWN0IGZv
cndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3Rh
ZyB7fTsNCnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1
YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsNCnN0cnVjdCByYW5kb21f
YWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0
ZXJhdG9yX3RhZyB7fTsNCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsN
CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv
cnk7DQogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rp
c3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiBfVHAqIHBvaW50
ZXI7DQogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7DQp9Ow0KDQpzdHJ1Y3Qg
b3V0cHV0X2l0ZXJhdG9yIHsNCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3Jf
dGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIHZvaWQgdmFsdWVf
dHlwZTsNCiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlw
ZWRlZiB2b2lkIHBvaW50ZXI7DQogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7
DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+
IHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yIHsNCiAgdHlwZWRlZiBmb3J3YXJk
X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiBf
VHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5j
ZV90eXBlOw0KICB0eXBlZGVmIF9UcCogcG9pbnRlcjsNCiAgdHlwZWRlZiBf
VHAmIHJlZmVyZW5jZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
ciB7DQogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRl
cmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQog
IHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRl
ZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7DQp9
Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0
cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yIHsNCiAgdHlwZWRlZiByYW5k
b21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAg
dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBfRGlzdGFuY2Ug
ZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIF9UcCogcG9pbnRlcjsNCiAg
dHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsNCn07DQoNCnRlbXBsYXRlIDxjbGFz
cyBfQ2F0ZWdvcnksIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlID0gcHRy
ZGlmZl90LA0KICAgICAgICAgIGNsYXNzIF9Qb2ludGVyID0gX1RwKiwgY2xh
c3MgX1JlZmVyZW5jZSA9IF9UcCY+DQpzdHJ1Y3QgaXRlcmF0b3Igew0KICB0
eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRl
ZiBfVHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVy
ZW5jZV90eXBlOw0KICB0eXBlZGVmIF9Qb2ludGVyIHBvaW50ZXI7DQogIHR5
cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7DQp9Ow0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX0l0ZXJhdG9yPg0Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7DQog
IHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29y
eSBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRl
cmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiB0eXBl
bmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5
cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBv
aW50ZXI7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVu
Y2UgcmVmZXJlbmNlOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0
cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gew0KICB0eXBlZGVmIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0
eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCBk
aWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgX1RwKiBwb2ludGVyOw0KICB0
eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNz
IF9UcD4NCnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gew0K
ICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9y
X2NhdGVnb3J5Ow0KICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgY29u
c3QgX1RwKiBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJl
bmNlOw0KfTsNCiMgMTQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzDQp0ZW1w
bGF0ZSA8Y2xhc3MgX0l0ZXI+DQppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkNCl9faXRlcmF0b3Jf
Y2F0ZWdvcnkoY29uc3QgX0l0ZXImKQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9D
YXRlZ29yeTsNCiAgcmV0dXJuIF9DYXRlZ29yeSgpOw0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0l0ZXI+DQppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKg0KX19kaXN0YW5jZV90eXBl
KGNvbnN0IF9JdGVyJikNCnsNCiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSo+
KDApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+DQppbmxpbmUgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoNCl9f
dmFsdWVfdHlwZShjb25zdCBfSXRlciYpDQp7DQogIHJldHVybiBzdGF0aWNf
Y2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90
eXBlKj4oMCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4NCmlubGlu
ZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9j
YXRlZ29yeQ0KaXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImIF9faSkg
eyByZXR1cm4gX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpOyB9DQoNCg0KdGVt
cGxhdGUgPGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoNCmRpc3RhbmNlX3R5
cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19kaXN0YW5jZV90eXBl
KF9faSk7IH0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqDQp2
YWx1ZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fdmFsdWVf
dHlwZShfX2kpOyB9DQoNCn0NCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMNCiMgMSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0
ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9m
dW5jcy5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzDQojIDM0ICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNr
LmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAz
DQojIDM2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9jb25jZXB0X2NoZWNrLmgiIDIgMw0KIyA0MSAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVu
Y3MuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCg0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4N
CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UmIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQ0Kew0K
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgd2hpbGUgKF9fZmlyc3Qg
IT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytfX247IH0NCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh
bmNlPg0KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn
KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ow0KICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsNCn0NCg0KdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxp
bmUgdm9pZCBkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LA0KICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfRGlz
dGFuY2UmIF9fbikNCnsNCg0KICBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFz
dCwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7DQp9DQoNCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCmlubGluZSB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNl
X3R5cGUNCl9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpDQp7DQoN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOw0KICB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19u
ID0gMDsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAgKytf
X2ZpcnN0OyArK19fbjsNCiAgfQ0KICByZXR1cm4gX19uOw0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPg0KaW5saW5lIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+
OjpkaWZmZXJlbmNlX3R5cGUNCl9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs
DQogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0Kew0K
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICBy
ZXR1cm4gX19sYXN0IC0gX19maXJzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0KZGlzdGFu
Y2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0KQ0Kew0KDQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkNCiAgICBfQ2F0
ZWdvcnk7DQogIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
X0NhdGVnb3J5KCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9J
bnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3Jf
dGFnKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICB3aGlsZSAoX19u
LS0pICsrX19pOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u
YWxJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZvaWQgX19h
ZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNl
IF9fbiwNCiAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0
ZXJhdG9yX3RhZykNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsNCiAgaWYgKF9fbiA+IDApDQogICAgd2hpbGUgKF9fbi0t
KSArK19faTsNCiAgZWxzZQ0KICAgIHdoaWxlIChfX24rKykgLS1fX2k7DQp9
DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNs
YXNzIF9EaXN0YW5jZT4NCmlubGluZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9t
QWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwNCiAgICAgICAg
ICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykNCnsN
Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg
X19pICs9IF9fbjsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgdm9pZCBhZHZhbmNlKF9J
bnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24pDQp7DQoNCiAgX19h
ZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsNCn0N
Cg0KfQ0KIyAzNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAz
DQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfaXRlcmF0b3IuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4NCmNsYXNzIGJhY2tfaW5zZXJ0X2l0
ZXJhdG9yIHsNCnByb3RlY3RlZDoNCiAgX0NvbnRhaW5lciogY29udGFpbmVy
Ow0KcHVibGljOg0KICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5
cGU7DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7DQogIHR5cGVk
ZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgdm9pZCBwb2lu
dGVyOw0KICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOw0KDQogIGV4cGxpY2l0
IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250
YWluZXIoJl9feCkge30NCiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRh
aW5lcj4mDQogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVy
Ojp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7DQogICAgY29udGFpbmVyLT5wdXNo
X2JhY2soX192YWx1ZSk7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGJh
Y2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7
IHJldHVybiAqdGhpczsgfQ0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29u
dGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9DQogIGJh
Y2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGlu
dCkgeyByZXR1cm4gKnRoaXM7IH0NCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBf
Q29udGFpbmVyPg0KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250
YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7DQogIHJl
dHVybiBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOw0K
fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4NCmNsYXNzIGZyb250
X2luc2VydF9pdGVyYXRvciB7DQpwcm90ZWN0ZWQ6DQogIF9Db250YWluZXIq
IGNvbnRhaW5lcjsNCnB1YmxpYzoNCiAgdHlwZWRlZiBfQ29udGFpbmVyIGNv
bnRhaW5lcl90eXBlOw0KICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcg
aXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBl
Ow0KICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVm
IHZvaWQgcG9pbnRlcjsNCiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsNCg0K
ICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYg
X194KSA6IGNvbnRhaW5lcigmX194KSB7fQ0KICBmcm9udF9pbnNlcnRfaXRl
cmF0b3I8X0NvbnRhaW5lcj4mDQogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFt
ZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7DQogICAgY29u
dGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOw0KICAgIHJldHVybiAqdGhp
czsNCiAgfQ0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4m
IG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9DQogIGZyb250X2luc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJu
ICp0aGlzOyB9DQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9DQp9Ow0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4NCmlubGluZSBmcm9udF9pbnNl
cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gZnJvbnRfaW5zZXJ0ZXIoX0NvbnRh
aW5lciYgX194KSB7DQogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8
X0NvbnRhaW5lcj4oX194KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Db250
YWluZXI+DQpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igew0KcHJvdGVjdGVkOg0K
ICBfQ29udGFpbmVyKiBjb250YWluZXI7DQogIHR5cGVuYW1lIF9Db250YWlu
ZXI6Oml0ZXJhdG9yIGl0ZXI7DQpwdWJsaWM6DQogIHR5cGVkZWYgX0NvbnRh
aW5lciBjb250YWluZXJfdHlwZTsNCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIHZvaWQgdmFs
dWVfdHlwZTsNCiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsNCiAg
dHlwZWRlZiB2b2lkIHBvaW50ZXI7DQogIHR5cGVkZWYgdm9pZCByZWZlcmVu
Y2U7DQoNCiAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlw
ZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pKQ0KICAgIDogY29udGFp
bmVyKCZfX3gpLCBpdGVyKF9faSkge30NCiAgaW5zZXJ0X2l0ZXJhdG9yPF9D
b250YWluZXI+Jg0KICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRh
aW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgew0KICAgIGl0ZXIgPSBjb250
YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsNCiAgICArK2l0ZXI7DQog
ICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGluc2VydF9pdGVyYXRvcjxfQ29u
dGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgaW5z
ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1
cm4gKnRoaXM7IH0NCiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv
cGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0NCn07DQoNCnRlbXBs
YXRlIDxjbGFzcyBfQ29udGFpbmVyLCBjbGFzcyBfSXRlcmF0b3I+DQppbmxp
bmUNCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29u
dGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpDQp7DQogIHR5cGVkZWYgdHlw
ZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pdGVyOw0KICByZXR1cm4g
aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwgX19pdGVyKF9faSkp
Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRv
ciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwNCiAgICAg
ICAgICBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3Q+DQpjbGFzcyByZXZl
cnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3Igew0KICB0eXBlZGVmIHJldmVy
c2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJh
dG9yLCBfVHAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4gX1NlbGY7DQpwcm90ZWN0
ZWQ6DQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgY3VycmVudDsNCnB1Ymxp
YzoNCiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVy
YXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCiAg
dHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVm
IF9UcCogcG9pbnRlcjsNCiAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5j
ZTsNCg0KICByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoKSB7fQ0K
ICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0Jp
ZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gpDQogICAgOiBjdXJyZW50KF9feCkg
e30NCiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBiYXNlKCkgY29uc3QgeyBy
ZXR1cm4gY3VycmVudDsgfQ0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv
bnN0IHsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fdG1wID0gY3Vy
cmVudDsNCiAgICByZXR1cm4gKi0tX190bXA7DQogIH0NCiAgcG9pbnRlciBv
cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0N
CiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7DQogICAgLS1jdXJyZW50Ow0KICAg
IHJldHVybiAqdGhpczsNCiAgfQ0KICBfU2VsZiBvcGVyYXRvcisrKGludCkg
ew0KICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7DQogICAgLS1jdXJyZW50Ow0K
ICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBfU2VsZiYgb3BlcmF0b3ItLSgp
IHsNCiAgICArK2N1cnJlbnQ7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQog
IF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7DQogICAgX1NlbGYgX190bXAgPSAq
dGhpczsNCiAgICArK2N1cnJlbnQ7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9
DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpSXRlciwgY2xhc3MgX1RwLCBj
bGFzcyBfUmVmLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgYm9vbCBvcGVy
YXRvcj09KA0KICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwNCiAg
ICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRl
ciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3kpDQp7DQogIHJldHVybiBf
X3guYmFzZSgpID09IF9feS5iYXNlKCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
cyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0
YW5jZT4NCmlubGluZSBib29sIG9wZXJhdG9yIT0oDQogICAgY29uc3QgcmV2
ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1Jl
ZiwgX0Rpc3RhbmNlPiYgX194LA0KICAgIGNvbnN0IHJldmVyc2VfYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5j
ZT4mIF9feSkNCnsNCiAgcmV0dXJuICEoX194ID09IF9feSk7DQp9DQojIDE5
MyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2l0ZXJhdG9yLmgiIDMNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+DQpj
bGFzcyByZXZlcnNlX2l0ZXJhdG9yDQp7DQpwcm90ZWN0ZWQ6DQogIF9JdGVy
YXRvciBjdXJyZW50Ow0KcHVibGljOg0KICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQ0K
ICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlDQog
ICAgICAgICAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQogICAg
ICAgICAgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyDQogICAgICAgICAg
cG9pbnRlcjsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXJhdG9yPjo6cmVmZXJlbmNlDQogICAgICAgICAgcmVmZXJlbmNlOw0K
DQogIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7DQogIHR5cGVk
ZWYgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxmOw0KDQpwdWJs
aWM6DQogIHJldmVyc2VfaXRlcmF0b3IoKSB7fQ0KICBleHBsaWNpdCByZXZl
cnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194
KSB7fQ0KDQogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgX1NlbGYmIF9feCkg
OiBjdXJyZW50KF9feC5jdXJyZW50KSB7fQ0KICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0l0ZXI+DQogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVy
YXRvcjxfSXRlcj4mIF9feCkNCiAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkg
e30NCg0KICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25zdCB7IHJldHVybiBj
dXJyZW50OyB9DQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7DQog
ICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsNCiAgICByZXR1cm4gKi0t
X190bXA7DQogIH0NCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gJihvcGVyYXRvciooKSk7IH0NCg0KICBfU2VsZiYgb3BlcmF0b3Ir
KygpIHsNCiAgICAtLWN1cnJlbnQ7DQogICAgcmV0dXJuICp0aGlzOw0KICB9
DQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7DQogICAgX1NlbGYgX190bXAg
PSAqdGhpczsNCiAgICAtLWN1cnJlbnQ7DQogICAgcmV0dXJuIF9fdG1wOw0K
ICB9DQogIF9TZWxmJiBvcGVyYXRvci0tKCkgew0KICAgICsrY3VycmVudDsN
CiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgX1NlbGYgb3BlcmF0b3ItLShp
bnQpIHsNCiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOw0KICAgICsrY3VycmVu
dDsNCiAgICByZXR1cm4gX190bXA7DQogIH0NCg0KICBfU2VsZiBvcGVyYXRv
cisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3Qgew0KICAgIHJldHVybiBf
U2VsZihjdXJyZW50IC0gX19uKTsNCiAgfQ0KICBfU2VsZiYgb3BlcmF0b3Ir
PShkaWZmZXJlbmNlX3R5cGUgX19uKSB7DQogICAgY3VycmVudCAtPSBfX247
DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIF9TZWxmIG9wZXJhdG9yLShk
aWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7DQogICAgcmV0dXJuIF9TZWxm
KGN1cnJlbnQgKyBfX24pOw0KICB9DQogIF9TZWxmJiBvcGVyYXRvci09KGRp
ZmZlcmVuY2VfdHlwZSBfX24pIHsNCiAgICBjdXJyZW50ICs9IF9fbjsNCiAg
ICByZXR1cm4gKnRoaXM7DQogIH0NCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10o
ZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyAr
IF9fbik7IH0NCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+DQpp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgew0KICByZXR1
cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOw0KfQ0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PiYgX195KSB7DQogIHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsN
Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4NCmlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3gsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7DQogIHJldHVybiAhKF9feCA9
PSBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KaW5s
aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX194LA0KICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7DQogIHJldHVybiBf
X3kgPCBfX3g7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+DQpp
bmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgew0KICByZXR1
cm4gIShfX3kgPCBfX3gpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJh
dG9yPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwNCiAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgew0K
ICByZXR1cm4gIShfX3ggPCBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0l0ZXJhdG9yPg0KaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlDQpvcGVyYXRvci0oY29uc3Qg
cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsDQogICAgICAgICAg
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsNCiAg
cmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgpOw0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXJhdG9yPg0Kb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0
b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwNCiAgICAgICAg
ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkgew0K
ICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNl
KCkgLSBfX24pOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsDQogICAg
ICAgICAgY2xhc3MgX0NoYXJUID0gY2hhciwgY2xhc3MgX1RyYWl0cyA9IGNo
YXJfdHJhaXRzPF9DaGFyVD4sDQogICAgICAgICAgY2xhc3MgX0Rpc3QgPSBw
dHJkaWZmX3Q+DQpjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsNCnB1YmxpYzoN
CiAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICB0eXBlZGVmIF9UcmFp
dHMgdHJhaXRzX3R5cGU7DQogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsNCg0KICB0eXBlZGVmIGlucHV0
X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiBf
VHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBfRGlzdCBkaWZmZXJlbmNlX3R5
cGU7DQogIHR5cGVkZWYgY29uc3QgX1RwKiBwb2ludGVyOw0KICB0eXBlZGVm
IGNvbnN0IF9UcCYgcmVmZXJlbmNlOw0KDQogIGlzdHJlYW1faXRlcmF0b3Io
KSA6IF9NX3N0cmVhbSgwKSwgX01fb2soZmFsc2UpIHt9DQogIGlzdHJlYW1f
aXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIDogX01fc3RyZWFtKCZfX3Mp
IHsgX01fcmVhZCgpOyB9DQoNCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuIF9NX3ZhbHVlOyB9DQogIHBvaW50ZXIgb3BlcmF0b3It
PigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9DQoNCiAgaXN0
cmVhbV9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsNCiAgICBfTV9yZWFkKCk7
DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGlzdHJlYW1faXRlcmF0b3Ig
b3BlcmF0b3IrKyhpbnQpIHsNCiAgICBpc3RyZWFtX2l0ZXJhdG9yIF9fdG1w
ID0gKnRoaXM7DQogICAgX01fcmVhZCgpOw0KICAgIHJldHVybiBfX3RtcDsN
CiAgfQ0KDQogIGJvb2wgX01fZXF1YWwoY29uc3QgaXN0cmVhbV9pdGVyYXRv
ciYgX194KSBjb25zdA0KICAgIHsgcmV0dXJuIChfTV9vayA9PSBfX3guX01f
b2spICYmICghX01fb2sgfHwgX01fc3RyZWFtID09IF9feC5fTV9zdHJlYW0p
OyB9DQoNCnByaXZhdGU6DQogIGlzdHJlYW1fdHlwZSogX01fc3RyZWFtOw0K
ICBfVHAgX01fdmFsdWU7DQogIGJvb2wgX01fb2s7DQoNCiAgdm9pZCBfTV9y
ZWFkKCkgew0KICAgIF9NX29rID0gKF9NX3N0cmVhbSAmJiAqX01fc3RyZWFt
KSA/IHRydWUgOiBmYWxzZTsNCiAgICBpZiAoX01fb2spIHsNCiAgICAgICpf
TV9zdHJlYW0gPj4gX01fdmFsdWU7DQogICAgICBfTV9vayA9ICpfTV9zdHJl
YW0gPyB0cnVlIDogZmFsc2U7DQogICAgfQ0KICB9DQp9Ow0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNs
YXNzIF9EaXN0Pg0KaW5saW5lIGJvb2wNCm9wZXJhdG9yPT0oY29uc3QgaXN0
cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBf
X3gsDQogICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBf
Q2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195KSB7DQogIHJldHVybiBfX3gu
X01fZXF1YWwoX195KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfRGlzdD4NCmlubGlu
ZSBib29sDQpvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1Rw
LCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX194LA0KICAgICAgICAgICBj
b25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBf
RGlzdD4mIF9feSkgew0KICByZXR1cm4gIV9feC5fTV9lcXVhbChfX3kpOw0K
fQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsDQogICAgICAgICAgY2xhc3Mg
X0NoYXJUID0gY2hhciwgY2xhc3MgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D
aGFyVD4gPg0KY2xhc3Mgb3N0cmVhbV9pdGVyYXRvciB7DQpwdWJsaWM6DQog
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgdHlwZWRlZiBfVHJhaXRz
IHRyYWl0c190eXBlOw0KICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7DQoNCiAgdHlwZWRlZiBvdXRwdXRf
aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIHZv
aWQgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlw
ZTsNCiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7DQogIHR5cGVkZWYgdm9pZCBy
ZWZlcmVuY2U7DQoNCiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtX3R5cGUm
IF9fcykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQ0KICBv
c3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zLCBjb25zdCBfQ2hh
clQqIF9fYykNCiAgICA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKF9f
Yykge30NCiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29u
c3QgX1RwJiBfX3ZhbHVlKSB7DQogICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVl
Ow0KICAgIGlmIChfTV9zdHJpbmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5n
Ow0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBvc3RyZWFtX2l0ZXJhdG9y
PF9UcD4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9DQogIG9zdHJl
YW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlz
OyB9DQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKyhpbnQp
IHsgcmV0dXJuICp0aGlzOyB9DQpwcml2YXRlOg0KICBvc3RyZWFtX3R5cGUq
IF9NX3N0cmVhbTsNCiAgY29uc3QgX0NoYXJUKiBfTV9zdHJpbmc7DQp9Ow0K
IyA0MTcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9pdGVyYXRvci5oIiAzDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0
b3IsIHR5cGVuYW1lIF9Db250YWluZXI+DQpjbGFzcyBfX25vcm1hbF9pdGVy
YXRvcg0KICA6IHB1YmxpYyBpdGVyYXRvcjxpdGVyYXRvcl90cmFpdHM8X0l0
ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksDQogICAgICAgICAgICAgICAg
ICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLA0K
ICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y
Pjo6ZGlmZmVyZW5jZV90eXBlLA0KICAgICAgICAgICAgICAgICAgICBpdGVy
YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwNCiAgICAgICAgICAg
ICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5j
ZT4NCnsNCg0KcHJvdGVjdGVkOg0KICBfSXRlcmF0b3IgX01fY3VycmVudDsN
Cg0KcHVibGljOg0KICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvciwgX0NvbnRhaW5lcj4gbm9ybWFsX2l0ZXJhdG9yX3R5cGU7DQogIHR5
cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj4gX190cmFpdHNfdHlw
ZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRv
cl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB0eXBl
bmFtZSBfX3RyYWl0c190eXBlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7DQog
IHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6ZGlmZmVyZW5jZV90
eXBlIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3Ry
YWl0c190eXBlOjpwb2ludGVyIHBvaW50ZXI7DQogIHR5cGVkZWYgdHlwZW5h
bWUgX190cmFpdHNfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsNCg0KICBf
X25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkg
eyB9DQoNCiAgZXhwbGljaXQgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0
ZXJhdG9yJiBfX2kpIDogX01fY3VycmVudChfX2kpIHsgfQ0KDQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0l0ZXI+DQogIGlubGluZSBfX25vcm1hbF9pdGVy
YXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRhaW5l
cj4mIF9faSkNCiAgICA6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkgeyB9DQoN
Cg0KICByZWZlcmVuY2UNCiAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4g
Kl9NX2N1cnJlbnQ7IH0NCg0KICBwb2ludGVyDQogIG9wZXJhdG9yLT4oKSBj
b25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9DQoNCiAgbm9ybWFsX2l0ZXJh
dG9yX3R5cGUmDQogIG9wZXJhdG9yKysoKSB7ICsrX01fY3VycmVudDsgcmV0
dXJuICp0aGlzOyB9DQoNCiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUNCiAgb3Bl
cmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1
cnJlbnQrKyk7IH0NCg0KDQogIG5vcm1hbF9pdGVyYXRvcl90eXBlJg0KICBv
cGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQ0K
DQogIG5vcm1hbF9pdGVyYXRvcl90eXBlDQogIG9wZXJhdG9yLS0oaW50KSB7
IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9DQoN
Cg0KICByZWZlcmVuY2UNCiAgb3BlcmF0b3JbXShjb25zdCBkaWZmZXJlbmNl
X3R5cGUmIF9fbikgY29uc3QNCiAgeyByZXR1cm4gX01fY3VycmVudFtfX25d
OyB9DQoNCiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmDQogIG9wZXJhdG9yKz0o
Y29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pDQogIHsgX01fY3VycmVudCAr
PSBfX247IHJldHVybiAqdGhpczsgfQ0KDQogIG5vcm1hbF9pdGVyYXRvcl90
eXBlDQogIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikg
Y29uc3QNCiAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVu
dCArIF9fbik7IH0NCg0KICBub3JtYWxfaXRlcmF0b3JfdHlwZSYNCiAgb3Bl
cmF0b3ItPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikNCiAgeyBfTV9j
dXJyZW50IC09IF9fbjsgcmV0dXJuICp0aGlzOyB9DQoNCiAgbm9ybWFsX2l0
ZXJhdG9yX3R5cGUNCiAgb3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlw
ZSYgX19uKSBjb25zdA0KICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihf
TV9jdXJyZW50IC0gX19uKTsgfQ0KDQogIGRpZmZlcmVuY2VfdHlwZQ0KICBv
cGVyYXRvci0oY29uc3Qgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmIF9faSkgY29u
c3QNCiAgeyByZXR1cm4gX01fY3VycmVudCAtIF9faS5fTV9jdXJyZW50OyB9
DQoNCiAgY29uc3QgX0l0ZXJhdG9yJg0KICBiYXNlKCkgY29uc3QgeyByZXR1
cm4gX01fY3VycmVudDsgfQ0KfTsNCg0KDQoNCnRlbXBsYXRlPHR5cGVuYW1l
IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9D
b250YWluZXI+DQppbmxpbmUgYm9vbA0Kb3BlcmF0b3I9PShjb25zdCBfX25v
cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMs
DQogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
clIsIF9Db250YWluZXI+JiBfX3JocykNCnsgcmV0dXJuIF9fbGhzLmJhc2Uo
KSA9PSBfX3Jocy5iYXNlKCk7IH0NCg0KdGVtcGxhdGU8dHlwZW5hbWUgX0l0
ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRh
aW5lcj4NCmlubGluZSBib29sDQpvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywNCiAg
ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwg
X0NvbnRhaW5lcj4mIF9fcmhzKQ0KeyByZXR1cm4gIShfX2xocyA9PSBfX3Jo
cyk7IH0NCg0KDQoNCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5
cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+DQppbmxp
bmUgYm9vbA0Kb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywNCiAgICAgICAgICBjb25z
dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYg
X19yaHMpDQp7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7
IH0NCg0KdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg
X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4NCmlubGluZSBib29s
DQpvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
TCwgX0NvbnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgIGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykN
CnsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0NCg0KdGVtcGxhdGU8dHlwZW5h
bWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUg
X0NvbnRhaW5lcj4NCmlubGluZSBib29sDQpvcGVyYXRvcjw9KGNvbnN0IF9f
bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xo
cywNCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQ0KeyByZXR1cm4gIShfX3JocyA8
IF9fbGhzKTsgfQ0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0
eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KaW5s
aW5lIGJvb2wNCm9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLA0KICAgICAgICAgICBj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy
PiYgX19yaHMpDQp7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9DQoNCnRl
bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5l
cj4NCmlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250
YWluZXI+DQpvcGVyYXRvcisoX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
LCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwNCiAgICAgICAg
ICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu
ZXI+JiBfX2kpDQp7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9DQoNCn0NCiMg
MzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9pdGVyYXRvci5oIiAyIDMNCiMgNDMgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDEgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1v
cnkuaCIgMSAzDQojIDE5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDMNCg0KIyAxICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MSAzDQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9j
Kytjb25maWcuaCIgMSAzDQojIDM2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzDQoNCiMgMSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Bh
aXIuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfcGFpci5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQoN
CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCnN0cnVjdCBwYWly
IHsNCiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsNCiAgdHlwZWRlZiBfVDIg
c2Vjb25kX3R5cGU7DQoNCiAgX1QxIGZpcnN0Ow0KICBfVDIgc2Vjb25kOw0K
DQoNCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkge30NCg0KDQoNCiAg
cGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3Qo
X19hKSwgc2Vjb25kKF9fYikge30NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1Ux
LCBjbGFzcyBfVTI+DQogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9f
cCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30N
Cn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwg
Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkNCnsNCiAgcmV0dXJuIF9feC5m
aXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25k
Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxp
bmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwg
Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkNCnsNCiAgcmV0dXJuIF9feC5m
aXJzdCA8IF9feS5maXJzdCB8fA0KICAgICAgICAgKCEoX195LmZpcnN0IDwg
X194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3Qg
cGFpcjxfVDEsIF9UMj4mIF9feSkgew0KICByZXR1cm4gIShfX3ggPT0gX195
KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5s
aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gs
IGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsNCiAgcmV0dXJuIF9feSA8
IF9feDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0K
aW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYg
X194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7DQogIHJldHVybiAh
KF9feSA8IF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz
IF9UMj4NCmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEs
IF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgew0KICBy
ZXR1cm4gIShfX3ggPCBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
LCBjbGFzcyBfVDI+DQoNCg0KaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2Vf
cGFpcihfVDEgX194LCBfVDIgX195KQ0KDQoNCg0Kew0KICByZXR1cm4gcGFp
cjxfVDEsIF9UMj4oX194LCBfX3kpOw0KfQ0KDQp9DQojIDM4ICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMiAzDQoNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAxIDMNCiMgMTkgIi9ob21lL21k
ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgi
IDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
c3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAzDQoj
IDIxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy90
eXBlX3RyYWl0cy5oIiAyIDMNCiMgNTcgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMNCnRlbXBsYXRl
IDxib29sIF9UcnV0aD4gc3RydWN0IF9Cb29sIHt9Ow0KdHlwZWRlZiBfQm9v
bDx0cnVlPiBfX3RydWVfdHlwZTsNCnR5cGVkZWYgX0Jvb2w8ZmFsc2U+IF9f
ZmFsc2VfdHlwZTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBf
X3R5cGVfdHJhaXRzIHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19k
dW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsNCiMgODEgIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMN
CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX2ZhbHNlX3R5
cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVk
ZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0
eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCg0KDQoN
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gew0KICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3Ry
dWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4gew0KICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
Ow0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q
T0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp
dHM8c2lnbmVkIGNoYXI+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7
DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2ln
bmVkIGNoYXI+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsN
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0K
DQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsN
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+
IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7DQogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl
X3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gew0KICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
Ow0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q
T0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp
dHM8aW50PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0K
dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+
IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs
dF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0
ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsNCiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsN
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5
cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsNCiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf
UE9EX3R5cGU7DQp9Ow0KIyAxOTkgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMNCnRlbXBsYXRlPD4g
c3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsNCiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf
dHJhaXRzPGRvdWJsZT4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh
dG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsN
Cn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBk
b3VibGU+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsN
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1Rw
Kj4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZh
dWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCg0KDQoN
Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsN
CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KdGVt
cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gew0KICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3Ry
dWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
ZWdlcjxzaWduZWQgY2hhcj4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J
bnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy
PHVuc2lnbmVkIGNoYXI+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50
ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx3
Y2hhcl90PiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0K
fTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsN
CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1w
bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4gew0K
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBs
YXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGludD4gew0KICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0
IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gew0KICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9J
c19pbnRlZ2VyPGxvbmc+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50
ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1
bnNpZ25lZCBsb25nPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
cmFsOw0KfTsNCiMgMjk2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzDQp0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsNCiAgIHR5cGVk
ZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7DQp9Ow0KDQoNCm5hbWVzcGFjZSBz
dGQgew0KICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFt
ZSBfQ29udGFpbmVyPiBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcjsNCn07DQoN
CnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRh
aW5lcj4NCnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBzdGQ6Ol9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7DQogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9Ob3JtYWw7DQp9Ow0KIyA0MSAiL2hvbWUv
bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDIgMw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMw0KIyA0MyAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY2xpbWl0cy5oIiAxIDMNCiMgNDQgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMN
CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NzdGRsaWIuaCIgMSAzDQojIDM3ICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzDQojIDEgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29s
YXJpczIuNy9iaXRzL2MrK2NvbmZpZy5oIiAxIDMNCiMgMzggIi9ob21lL21k
ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgi
IDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMNCiMgMzkgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMw0K
IyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NzdGRsaWIuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3Rk
bGliLmgiIDEgMyA0DQojIDI1ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkbGli
LmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKXN0ZGxpYi5oCTEuNDQJOTgv
MDEvMjIgU01JIg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90
ZXN0cy5oIiAxIDMgNA0KIyAyOCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGxp
Yi5oIiAyIDMgNA0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQu
aCIgMSAzIDQNCiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzIDQN
CiNwcmFnbWEgaWRlbnQgIkAoIyl3YWl0LmgJMS4yMQk5Ny8wNC8wOCBTTUki
DQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEg
MyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQNCg0K
IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0DQoj
IDIxICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQNCg0KDQoNCiMg
MSAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAxIDMgNA0KIyAxNiAi
L3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQNCiNwcmFnbWEgaWRl
bnQgIkAoIylyZXNvdXJjZS5oCTEuMjUJOTgvMDYvMzAgU01JIg0KDQojIDEg
Ii91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAx
OSAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAyIDMgNA0KDQojIDEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQNCiMgMjEg
Ii91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMiAzIDQNCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMyA0DQojIDIyICIvdXNyL2luY2x1
ZGUvc3lzL3Jlc291cmNlLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQoj
IDY3ICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNA0KdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIHJsaW1fdDsNCiMgMTAyICIvdXNyL2luY2x1ZGUv
c3lzL3Jlc291cmNlLmgiIDMgNA0Kc3RydWN0IHJsaW1pdCB7DQogICAgICAg
IHJsaW1fdCBybGltX2N1cjsNCiAgICAgICAgcmxpbV90IHJsaW1fbWF4Ow0K
fTsNCg0KDQoNCg0KdHlwZWRlZiB1X2xvbmdsb25nX3QgcmxpbTY0X3Q7DQoN
Cg0KDQoNCg0Kc3RydWN0IHJsaW1pdDY0IHsNCiAgICAgICAgcmxpbTY0X3Qg
cmxpbV9jdXI7DQogICAgICAgIHJsaW02NF90IHJsaW1fbWF4Ow0KfTsNCiMg
MTQzICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNA0Kc3RydWN0
IHJ1c2FnZSB7DQogICAgICAgIHN0cnVjdCB0aW1ldmFsIHJ1X3V0aW1lOw0K
ICAgICAgICBzdHJ1Y3QgdGltZXZhbCBydV9zdGltZTsNCiAgICAgICAgbG9u
ZyBydV9tYXhyc3M7DQogICAgICAgIGxvbmcgcnVfaXhyc3M7DQogICAgICAg
IGxvbmcgcnVfaWRyc3M7DQogICAgICAgIGxvbmcgcnVfaXNyc3M7DQogICAg
ICAgIGxvbmcgcnVfbWluZmx0Ow0KICAgICAgICBsb25nIHJ1X21hamZsdDsN
CiAgICAgICAgbG9uZyBydV9uc3dhcDsNCiAgICAgICAgbG9uZyBydV9pbmJs
b2NrOw0KICAgICAgICBsb25nIHJ1X291YmxvY2s7DQogICAgICAgIGxvbmcg
cnVfbXNnc25kOw0KICAgICAgICBsb25nIHJ1X21zZ3JjdjsNCiAgICAgICAg
bG9uZyBydV9uc2lnbmFsczsNCiAgICAgICAgbG9uZyBydV9udmNzdzsNCiAg
ICAgICAgbG9uZyBydV9uaXZjc3c7DQp9Ow0KIyAxOTMgIi91c3IvaW5jbHVk
ZS9zeXMvcmVzb3VyY2UuaCIgMyA0DQpleHRlcm4gaW50IHNldHJsaW1pdChp
bnQsIGNvbnN0IHN0cnVjdCBybGltaXQgKik7DQpleHRlcm4gaW50IGdldHJs
aW1pdChpbnQsIHN0cnVjdCBybGltaXQgKik7DQoNCg0KDQoNCmV4dGVybiBp
bnQgc2V0cmxpbWl0NjQoaW50LCBjb25zdCBzdHJ1Y3QgcmxpbWl0NjQgKik7
DQpleHRlcm4gaW50IGdldHJsaW1pdDY0KGludCwgc3RydWN0IHJsaW1pdDY0
ICopOw0KDQoNCmV4dGVybiBpbnQgZ2V0cHJpb3JpdHkoaW50LCBpZF90KTsN
CmV4dGVybiBpbnQgc2V0cHJpb3JpdHkoaW50LCBpZF90LCBpbnQpOw0KZXh0
ZXJuIGludCBnZXRydXNhZ2UoaW50LCBzdHJ1Y3QgcnVzYWdlICopOw0KIyAy
MjggIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0DQp9DQojIDI1
ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQNCiMgMSAiL3Vzci9p
bmNsdWRlL3N5cy9zaWdpbmZvLmgiIDEgMyA0DQojIDE2ICIvdXNyL2luY2x1
ZGUvc3lzL3NpZ2luZm8uaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpc2ln
aW5mby5oCTEuNTQJOTgvMDMvMjcgU01JIg0KDQojIDEgIi91c3IvaW5jbHVk
ZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAxOSAiL3Vzci9pbmNs
dWRlL3N5cy9zaWdpbmZvLmgiIDIgMyA0DQojIDEgIi9ob21lL21kZWlsL2Jp
bi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQNCiMgMjAgIi91c3IvaW5jbHVkZS9z
eXMvc2lnaW5mby5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyAxMjYg
Ii91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQNCiMgMSAiL3Vzci9p
bmNsdWRlL3N5cy9tYWNoc2lnLmgiIDEgMyA0DQojIDE2ICIvdXNyL2luY2x1
ZGUvc3lzL21hY2hzaWcuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpbWFj
aHNpZy5oCTEuMTQJOTgvMDIvMDUgU01JIg0KDQoNCiMgMSAiL3Vzci9pbmNs
dWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0DQojIDIwICIvdXNyL2lu
Y2x1ZGUvc3lzL21hY2hzaWcuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsN
CiMgMTEwICIvdXNyL2luY2x1ZGUvc3lzL21hY2hzaWcuaCIgMyA0DQp9DQoj
IDEyNyAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDIgMyA0DQojIDIw
NiAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDMgNA0KIyAxICIvdXNy
L2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAxIDMgNA0KIyAyMDcgIi91c3Iv
aW5jbHVkZS9zeXMvc2lnaW5mby5oIiAyIDMgNA0KIyAyMTcgIi91c3IvaW5j
bHVkZS9zeXMvc2lnaW5mby5oIiAzIDQNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNs
dWRlL3N5cy90eXBlcy5oIiAxIDMgNA0KIyAyMTggIi91c3IvaW5jbHVkZS9z
eXMvc2lnaW5mby5oIiAyIDMgNA0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3Qgc2ln
aW5mbyB7DQoNCg0KDQogICAgICAgIGludCBzaV9zaWdubzsNCiAgICAgICAg
aW50IHNpX2NvZGU7DQogICAgICAgIGludCBzaV9lcnJubzsNCg0KDQoNCiAg
ICAgICAgdW5pb24gew0KDQogICAgICAgICAgICAgICAgaW50IF9fcGFkWygo
MTI4IC8gc2l6ZW9mIChpbnQpKSAtIDMpXTsNCg0KICAgICAgICAgICAgICAg
IHN0cnVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICBwaWRfdCBfX3Bp
ZDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHsNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBfX3VpZDsNCg0K
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5p
b24gc2lndmFsIF9fdmFsdWU7DQoNCg0KDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gX19raWxsOw0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsb2NrX3QgX191dGltZTsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19zdGF0dXM7DQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tf
dCBfX3N0aW1lOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IF9fY2xkOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBfX3BkYXRhOw0K
ICAgICAgICAgICAgICAgIH0gX19wcm9jOw0KDQogICAgICAgICAgICAgICAg
c3RydWN0IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYWRk
cjsNCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3RyYXBubzsNCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgX19wYzsNCiAgICAgICAg
ICAgICAgICB9IF9fZmF1bHQ7DQoNCiAgICAgICAgICAgICAgICBzdHJ1Y3Qg
ew0KDQogICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19mZDsNCiAgICAg
ICAgICAgICAgICAgICAgICAgIGxvbmcgX19iYW5kOw0KICAgICAgICAgICAg
ICAgIH0gX19maWxlOw0KDQogICAgICAgICAgICAgICAgc3RydWN0IHsNCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgX19mYWRkcjsNCg0KDQog
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RydWNfdCBfX3RzdGFtcDsN
Cg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IF9fc3lzY2Fs
bDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19uc3lzYXJnOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX2ZhdWx0Ow0KICAgICAg
ICAgICAgICAgICAgICAgICAgbG9uZyBfX3N5c2FyZ1s4XTsNCiAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX21zdGF0ZVsxMF07DQogICAgICAgICAg
ICAgICAgfSBfX3Byb2Y7DQoNCiAgICAgICAgfSBfX2RhdGE7DQoNCn0gc2ln
aW5mb190Ow0KIyAzNTQgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAz
IDQNCnR5cGVkZWYgc3RydWN0IGtfc2lnaW5mbyB7DQogICAgICAgIGludCBz
aV9zaWdubzsNCiAgICAgICAgaW50IHNpX2NvZGU7DQogICAgICAgIGludCBz
aV9lcnJubzsNCg0KDQoNCiAgICAgICAgdW5pb24gew0KICAgICAgICAgICAg
ICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICBwaWRfdCBf
X3BpZDsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHsNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHsNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBfX3VpZDsN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlv
biBzaWd2YWwgX192YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBfX2tpbGw7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xvY2tfdCBfX3V0aW1lOw0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX3N0YXR1czsNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja190IF9fc3Rp
bWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gX19jbGQ7
DQogICAgICAgICAgICAgICAgICAgICAgICB9IF9fcGRhdGE7DQogICAgICAg
ICAgICAgICAgfSBfX3Byb2M7DQoNCiAgICAgICAgICAgICAgICBzdHJ1Y3Qg
ew0KICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hZGRyOw0KICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IF9fdHJhcG5vOw0KICAgICAgICAg
ICAgICAgICAgICAgICAgY2FkZHJfdCBfX3BjOw0KICAgICAgICAgICAgICAg
IH0gX19mYXVsdDsNCg0KICAgICAgICAgICAgICAgIHN0cnVjdCB7DQoNCiAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2ZkOw0KICAgICAgICAgICAg
ICAgICAgICAgICAgbG9uZyBfX2JhbmQ7DQogICAgICAgICAgICAgICAgfSBf
X2ZpbGU7DQoNCiAgICAgICAgICAgICAgICBzdHJ1Y3Qgew0KICAgICAgICAg
ICAgICAgICAgICAgICAgY2FkZHJfdCBfX2ZhZGRyOw0KDQoNCg0KICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZXN0cnVjX3QgX190c3RhbXA7DQoNCg0K
DQogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfX3N5c2NhbGw7DQog
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbnN5c2FyZzsNCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgX19mYXVsdDsNCg0KDQoNCiAgICAg
ICAgICAgICAgICB9IF9fcHJvZjsNCg0KICAgICAgICB9IF9fZGF0YTsNCg0K
fSBrX3NpZ2luZm9fdDsNCg0KdHlwZWRlZiBzdHJ1Y3Qgc2lncXVldWUgew0K
ICAgICAgICBzdHJ1Y3Qgc2lncXVldWUgKnNxX25leHQ7DQogICAgICAgIGtf
c2lnaW5mb190IHNxX2luZm87DQogICAgICAgIHZvaWQgKCpzcV9mdW5jKShz
dHJ1Y3Qgc2lncXVldWUgKik7DQogICAgICAgIHZvaWQgKnNxX2JhY2twdHI7
DQoNCn0gc2lncXVldWVfdDsNCiMgNDU0ICIvdXNyL2luY2x1ZGUvc3lzL3Np
Z2luZm8uaCIgMyA0DQp9DQojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQu
aCIgMiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDEg
MyA0DQojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMyA0DQoj
cHJhZ21hIGlkZW50ICJAKCMpcHJvY3NldC5oCTEuMTgJOTgvMDYvMzAgU01J
Ig0KDQoNCmV4dGVybiAiQyIgew0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5
cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0DQojIDIzICIvdXNyL2luY2x1ZGUv
c3lzL3Byb2NzZXQuaCIgMiAzIDQNCiMgNDAgIi91c3IvaW5jbHVkZS9zeXMv
cHJvY3NldC5oIiAzIDQNCnR5cGVkZWYgZW51bQ0KDQogICAgICAgIGlkdHlw
ZQ0KDQogICAgICAgICAgICAgICAgew0KICAgICAgICBQX1BJRCwNCiAgICAg
ICAgUF9QUElELA0KICAgICAgICBQX1BHSUQsDQoNCiAgICAgICAgUF9TSUQs
DQogICAgICAgIFBfQ0lELA0KICAgICAgICBQX1VJRCwNCiAgICAgICAgUF9H
SUQsDQogICAgICAgIFBfQUxMLA0KICAgICAgICBQX0xXUElEDQp9IGlkdHlw
ZV90Ow0KIyA2NCAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMgNA0K
dHlwZWRlZiBlbnVtIGlkb3Agew0KICAgICAgICBQT1BfRElGRiwNCg0KDQog
ICAgICAgIFBPUF9BTkQsDQoNCg0KICAgICAgICBQT1BfT1IsDQoNCg0KICAg
ICAgICBQT1BfWE9SDQoNCg0KfSBpZG9wX3Q7DQoNCg0KDQoNCg0KDQoNCnR5
cGVkZWYgc3RydWN0IHByb2NzZXQgew0KICAgICAgICBpZG9wX3QgcF9vcDsN
Cg0KDQoNCg0KICAgICAgICBpZHR5cGVfdCBwX2xpZHR5cGU7DQoNCg0KICAg
ICAgICBpZF90IHBfbGlkOw0KDQogICAgICAgIGlkdHlwZV90IHBfcmlkdHlw
ZTsNCg0KDQogICAgICAgIGlkX3QgcF9yaWQ7DQp9IHByb2NzZXRfdDsNCiMg
MTI5ICIvdXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMyA0DQp9DQojIDI3
ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQNCg0KDQoNCmV4dGVy
biAiQyIgew0KIyA4NiAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDMgNA0K
ZXh0ZXJuIHBpZF90IHdhaXQoaW50ICopOw0KZXh0ZXJuIHBpZF90IHdhaXRw
aWQocGlkX3QsIGludCAqLCBpbnQpOw0KDQoNCmV4dGVybiBpbnQgd2FpdGlk
KGlkdHlwZV90LCBpZF90LCBzaWdpbmZvX3QgKiwgaW50KTsNCmV4dGVybiBw
aWRfdCB3YWl0MyhpbnQgKiwgaW50LCBzdHJ1Y3QgcnVzYWdlICopOw0KDQoN
Cg0KDQpleHRlcm4gcGlkX3Qgd2FpdDQocGlkX3QsIGludCAqLCBpbnQsIHN0
cnVjdCBydXNhZ2UgKik7DQojIDExOCAiL3Vzci9pbmNsdWRlL3N5cy93YWl0
LmgiIDMgNA0KfQ0KIyAzMiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGxpYi5o
IiAyIDMgNA0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0KdHlwZWRlZiBzdHJ1
Y3Qgew0KICAgICAgICBpbnQgcXVvdDsNCiAgICAgICAgaW50IHJlbTsNCn0g
ZGl2X3Q7DQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgICAgICAgbG9uZyBxdW90
Ow0KICAgICAgICBsb25nIHJlbTsNCn0gbGRpdl90Ow0KDQoNCnR5cGVkZWYg
c3RydWN0IHsNCiAgICAgICAgbG9uZyBsb25nIHF1b3Q7DQogICAgICAgIGxv
bmcgbG9uZyByZW07DQp9IGxsZGl2X3Q7DQojIDE0OCAiL2hvbWUvbWRlaWwv
YmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9p
bmNsdWRlL3N0ZGxpYi5oIiAzIDQNCmV4dGVybiB1bnNpZ25lZCBjaGFyIF9f
Y3R5cGVbXTsNCg0KDQoNCmV4dGVybiBkb3VibGUgYXRvZihjb25zdCBjaGFy
ICopOw0KZXh0ZXJuIGludCBhdG9pKGNvbnN0IGNoYXIgKik7DQpleHRlcm4g
bG9uZyBpbnQgYXRvbChjb25zdCBjaGFyICopOw0KZXh0ZXJuIGRvdWJsZSBz
dHJ0b2QoY29uc3QgY2hhciAqLCBjaGFyICoqKTsNCmV4dGVybiBsb25nIGlu
dCBzdHJ0b2woY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOw0KZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFy
ICoqLCBpbnQpOw0KDQpleHRlcm4gaW50IHJhbmQodm9pZCk7DQpleHRlcm4g
dm9pZCBzcmFuZCh1bnNpZ25lZCBpbnQpOw0KDQoNCmV4dGVybiBpbnQgcmFu
ZF9yKHVuc2lnbmVkIGludCAqKTsNCg0KDQpleHRlcm4gdm9pZCAqY2FsbG9j
KHNpemVfdCwgc2l6ZV90KTsNCmV4dGVybiB2b2lkIGZyZWUodm9pZCAqKTsN
CmV4dGVybiB2b2lkICptYWxsb2Moc2l6ZV90KTsNCmV4dGVybiB2b2lkICpy
ZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsNCg0KZXh0ZXJuIHZvaWQgYWJvcnQo
dm9pZCk7DQpleHRlcm4gaW50IGF0ZXhpdCh2b2lkICgqKSh2b2lkKSk7DQpl
eHRlcm4gdm9pZCBleGl0KGludCk7DQpleHRlcm4gdm9pZCBfZXhpdGhhbmRs
ZSh2b2lkKTsNCmV4dGVybiBjaGFyICpnZXRlbnYoY29uc3QgY2hhciAqKTsN
CmV4dGVybiBpbnQgc3lzdGVtKGNvbnN0IGNoYXIgKik7DQoNCmV4dGVybiB2
b2lkICpic2VhcmNoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXpl
X3QsIHNpemVfdCwNCiAgICAgICAgaW50ICgqKShjb25zdCB2b2lkICosIGNv
bnN0IHZvaWQgKikpOw0KZXh0ZXJuIHZvaWQgcXNvcnQodm9pZCAqLCBzaXpl
X3QsIHNpemVfdCwNCiAgICAgICAgaW50ICgqKShjb25zdCB2b2lkICosIGNv
bnN0IHZvaWQgKikpOw0KDQpleHRlcm4gaW50IGFicyhpbnQpOw0KZXh0ZXJu
IGRpdl90IGRpdihpbnQsIGludCk7DQpleHRlcm4gbG9uZyBpbnQgbGFicyhs
b25nKTsNCmV4dGVybiBsZGl2X3QgbGRpdihsb25nLCBsb25nKTsNCg0KZXh0
ZXJuIGludCBtYnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVf
dCk7DQpleHRlcm4gaW50IG1ibGVuKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsN
CmV4dGVybiBpbnQgd2N0b21iKGNoYXIgKiwgd2NoYXJfdCk7DQoNCmV4dGVy
biBzaXplX3QgbWJzdG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNp
emVfdCk7DQpleHRlcm4gc2l6ZV90IHdjc3RvbWJzKGNoYXIgKiwgY29uc3Qg
d2NoYXJfdCAqLCBzaXplX3QpOw0KDQoNCg0KDQpleHRlcm4gZG91YmxlIGRy
YW5kNDgodm9pZCk7DQpleHRlcm4gZG91YmxlIGVyYW5kNDgodW5zaWduZWQg
c2hvcnQgKik7DQpleHRlcm4gbG9uZyBqcmFuZDQ4KHVuc2lnbmVkIHNob3J0
ICopOw0KZXh0ZXJuIHZvaWQgbGNvbmc0OCh1bnNpZ25lZCBzaG9ydCAqKTsN
CmV4dGVybiBsb25nIGxyYW5kNDgodm9pZCk7DQpleHRlcm4gbG9uZyBtcmFu
ZDQ4KHZvaWQpOw0KZXh0ZXJuIGxvbmcgbnJhbmQ0OCh1bnNpZ25lZCBzaG9y
dCAqKTsNCmV4dGVybiB1bnNpZ25lZCBzaG9ydCAqc2VlZDQ4KHVuc2lnbmVk
IHNob3J0ICopOw0KZXh0ZXJuIHZvaWQgc3JhbmQ0OChsb25nKTsNCmV4dGVy
biBpbnQgcHV0ZW52KGNoYXIgKik7DQpleHRlcm4gdm9pZCBzZXRrZXkoY29u
c3QgY2hhciAqKTsNCiMgMjE5ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkbGli
LmgiIDMgNA0KZXh0ZXJuIGludCBta3N0ZW1wKGNoYXIgKik7DQoNCg0KZXh0
ZXJuIGludCBta3N0ZW1wNjQoY2hhciAqKTsNCg0KDQoNCg0KDQoNCmV4dGVy
biBsb25nIGE2NGwoY29uc3QgY2hhciAqKTsNCmV4dGVybiBjaGFyICplY3Z0
KGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOw0KZXh0ZXJuIGNoYXIgKmZj
dnQoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7DQpleHRlcm4gY2hhciAq
Z2N2dChkb3VibGUsIGludCwgY2hhciAqKTsNCmV4dGVybiBpbnQgZ2V0c3Vi
b3B0KGNoYXIgKiosIGNoYXIgKmNvbnN0ICosIGNoYXIgKiopOw0KZXh0ZXJu
IGludCBncmFudHB0KGludCk7DQpleHRlcm4gY2hhciAqaW5pdHN0YXRlKHVu
c2lnbmVkLCBjaGFyICosIHNpemVfdCk7DQpleHRlcm4gY2hhciAqbDY0YShs
b25nKTsNCmV4dGVybiBjaGFyICpta3RlbXAoY2hhciAqKTsNCmV4dGVybiBj
aGFyICpwdHNuYW1lKGludCk7DQpleHRlcm4gbG9uZyByYW5kb20odm9pZCk7
DQpleHRlcm4gY2hhciAqcmVhbHBhdGgoY29uc3QgY2hhciAqLCBjaGFyICop
Ow0KZXh0ZXJuIGNoYXIgKnNldHN0YXRlKGNvbnN0IGNoYXIgKik7DQpleHRl
cm4gdm9pZCBzcmFuZG9tKHVuc2lnbmVkKTsNCmV4dGVybiBpbnQgdHR5c2xv
dCh2b2lkKTsNCmV4dGVybiBpbnQgdW5sb2NrcHQoaW50KTsNCmV4dGVybiB2
b2lkICp2YWxsb2Moc2l6ZV90KTsNCg0KDQoNCg0KZXh0ZXJuIGludCBkdXAy
KGludCwgaW50KTsNCmV4dGVybiBjaGFyICpxZWN2dChsb25nIGRvdWJsZSwg
aW50LCBpbnQgKiwgaW50ICopOw0KZXh0ZXJuIGNoYXIgKnFmY3Z0KGxvbmcg
ZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7DQpleHRlcm4gY2hhciAqcWdj
dnQobG9uZyBkb3VibGUsIGludCwgY2hhciAqKTsNCmV4dGVybiBjaGFyICpn
ZXRjd2QoY2hhciAqLCBzaXplX3QpOw0KZXh0ZXJuIGNvbnN0IGNoYXIgKmdl
dGV4ZWNuYW1lKHZvaWQpOw0KZXh0ZXJuIGNoYXIgKmdldGxvZ2luKHZvaWQp
Ow0KZXh0ZXJuIGludCBnZXRvcHQoaW50LCBjaGFyICpjb25zdCAqLCBjb25z
dCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKm9wdGFyZzsNCmV4dGVybiBpbnQg
b3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsNCmV4dGVybiBjaGFyICpnZXRwYXNz
KGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqZ2V0cGFzc3BocmFzZShj
b25zdCBjaGFyICopOw0KZXh0ZXJuIGludCBnZXRwdyh1aWRfdCwgY2hhciAq
KTsNCmV4dGVybiBpbnQgaXNhdHR5KGludCk7DQpleHRlcm4gdm9pZCAqbWVt
YWxpZ24oc2l6ZV90LCBzaXplX3QpOw0KZXh0ZXJuIGNoYXIgKnR0eW5hbWUo
aW50KTsNCg0KDQpleHRlcm4gbG9uZyBsb25nIGF0b2xsKGNvbnN0IGNoYXIg
Kik7DQpleHRlcm4gbG9uZyBsb25nIGxsYWJzKGxvbmcgbG9uZyk7DQpleHRl
cm4gbGxkaXZfdCBsbGRpdihsb25nIGxvbmcsIGxvbmcgbG9uZyk7DQpleHRl
cm4gY2hhciAqbGx0b3N0cihsb25nIGxvbmcsIGNoYXIgKik7DQpleHRlcm4g
bG9uZyBsb25nIHN0cnRvbGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQp
Ow0KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBzdHJ0b3VsbChjb25zdCBj
aGFyICosIGNoYXIgKiosIGludCk7DQpleHRlcm4gY2hhciAqdWxsdG9zdHIo
dW5zaWduZWQgbG9uZyBsb25nLCBjaGFyICopOw0KIyA0MTIgIi9ob21lL21k
ZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8z
LjAvaW5jbHVkZS9zdGRsaWIuaCIgMyA0DQp9DQojIDQyICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAy
IDMNCiMgNzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jc3RkbGliLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdXNp
bmcgOjpkaXZfdDsNCiAgdXNpbmcgOjpsZGl2X3Q7DQoNCiAgdXNpbmcgOjph
Ym9ydDsNCiAgdXNpbmcgOjphYnM7DQogIHVzaW5nIDo6YXRleGl0Ow0KICB1
c2luZyA6OmF0b2Y7DQogIHVzaW5nIDo6YXRvaTsNCiAgdXNpbmcgOjphdG9s
Ow0KICB1c2luZyA6OmJzZWFyY2g7DQogIHVzaW5nIDo6Y2FsbG9jOw0KICB1
c2luZyA6OmRpdjsNCiAgdXNpbmcgOjpleGl0Ow0KICB1c2luZyA6OmZyZWU7
DQogIHVzaW5nIDo6Z2V0ZW52Ow0KICB1c2luZyA6OmxhYnM7DQogIHVzaW5n
IDo6bGRpdjsNCiAgdXNpbmcgOjptYWxsb2M7DQogIHVzaW5nIDo6bWJsZW47
DQogIHVzaW5nIDo6bWJzdG93Y3M7DQogIHVzaW5nIDo6bWJ0b3djOw0KICB1
c2luZyA6OnFzb3J0Ow0KICB1c2luZyA6OnJhbmQ7DQogIHVzaW5nIDo6cmVh
bGxvYzsNCiAgdXNpbmcgOjpzcmFuZDsNCiAgdXNpbmcgOjpzdHJ0b2Q7DQog
IHVzaW5nIDo6c3RydG9sOw0KICB1c2luZyA6OnN0cnRvdWw7DQogIHVzaW5n
IDo6c3lzdGVtOw0KICB1c2luZyA6Ondjc3RvbWJzOw0KICB1c2luZyA6Ondj
dG9tYjsNCg0KICBpbmxpbmUgbG9uZw0KICBhYnMobG9uZyBfX2kpIHsgcmV0
dXJuIGxhYnMoX19pKTsgfQ0KDQogIGlubGluZSBsZGl2X3QNCiAgZGl2KGxv
bmcgX19pLCBsb25nIF9faikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0N
Cn0NCiMgNDUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzDQoj
IDQ2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9uZXciIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL25ldyIgMw0KIyAxICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvY3N0ZGRlZiIgMSAzDQojIDM1ICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvbmV3IiAyIDMNCiMgMSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIg
MSAzDQojIDM2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
bmV3IiAyIDMNCg0KZXh0ZXJuICJDKysiIHsNCg0KbmFtZXNwYWNlIHN0ZA0K
ew0KICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uDQogIHsN
CiAgcHVibGljOg0KICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9DQogICAg
dmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3coKTsNCiAgfTsNCg0KICBzdHJ1
Y3Qgbm90aHJvd190IHsgfTsNCiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBu
b3Rocm93Ow0KICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsNCiAg
bmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyKG5ld19oYW5kbGVyKTsNCn0N
Cg0KDQp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChz
dGQ6OmJhZF9hbGxvYyk7DQp2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNp
emVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsNCnZvaWQgb3BlcmF0b3Ig
ZGVsZXRlKHZvaWQgKikgdGhyb3coKTsNCnZvaWQgb3BlcmF0b3IgZGVsZXRl
W10odm9pZCAqKSB0aHJvdygpOw0Kdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6
c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7DQp2b2lk
ICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Ro
cm93X3QmKSB0aHJvdygpOw0Kdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAq
LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7DQp2b2lkIG9wZXJh
dG9yIGRlbGV0ZVtdKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0
aHJvdygpOw0KDQoNCmlubGluZSB2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpz
aXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9
DQppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZv
aWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9DQp9DQojIDQ3
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
YWxnb2Jhc2UuaCIgMiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMNCiMgNDkgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzDQoj
IDUwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgi
IDEgMw0KIyA1MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAz
DQojIDUyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzDQoj
IDUzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfYWxnb2Jhc2UuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoN
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2Fy
ZEl0ZXIyLCBjbGFzcyBfVHA+DQppbmxpbmUgdm9pZCBfX2l0ZXJfc3dhcChf
Rm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IsIF9UcCopDQp7
DQogIF9UcCBfX3RtcCA9ICpfX2E7DQogICpfX2EgPSAqX19iOw0KICAqX19i
ID0gX190bXA7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIx
LCBjbGFzcyBfRm9yd2FyZEl0ZXIyPg0KaW5saW5lIHZvaWQgaXRlcl9zd2Fw
KF9Gb3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikNCnsNCg0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN
Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgX19pdGVyX3N3YXAoX19h
LCBfX2IsIF9fdmFsdWVfdHlwZShfX2EpKTsNCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIF9UcD4NCmlubGluZSB2b2lkIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19i
KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgX1RwIF9fdG1wID0gX19hOw0K
ICBfX2EgPSBfX2I7DQogIF9fYiA9IF9fdG1wOw0KfQ0KDQoNCg0KDQoNCg0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5lIGNvbnN0IF9UcCYgbWlu
KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikgew0KDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsNCg0KICBpZiAoX19iIDwgX19hKSByZXR1cm4gX19iOyBy
ZXR1cm4gX19hOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5l
IGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9f
Yikgew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICBpZiAoX19hIDwgX19i
KSByZXR1cm4gX19iOyByZXR1cm4gX19hOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSBjb25zdCBfVHAmIG1p
bihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9f
Y29tcCkgew0KDQogIGlmIChfX2NvbXAoX19iLCBfX2EpKSByZXR1cm4gX19i
OyByZXR1cm4gX19hOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQ29tcGFyZT4NCmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAm
IF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkgew0KDQog
IGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19h
Ow0KfQ0KIyAxMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4N
CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikNCnsNCiAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2Zp
cnN0KQ0KICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICByZXR1cm4gX19y
ZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4NCmlubGlu
ZSBfT3V0cHV0SXRlcg0KX19jb3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICBfT3V0cHV0
SXRlciBfX3Jlc3VsdCwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIF9E
aXN0YW5jZSopDQp7DQogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAt
IF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7DQogICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICAgICsrX19yZXN1bHQ7DQog
IH0NCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPg0KaW5saW5lIF9UcCoNCl9fY29weV90cml2aWFsKGNvbnN0IF9UcCog
X19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpDQp7
DQogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICog
KF9fbGFzdCAtIF9fZmlyc3QpKTsNCiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9f
bGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlubGluZSBfT3V0cHV0SXRl
ciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpDQp7DQogIHJldHVybiBf
X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwNCiAgICAgICAgICAg
ICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLA0KICAgICAgICAg
ICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlu
bGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkN
CnsNCiAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
LA0KICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
dCksDQogICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3Qp
KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBfVHAqIF9f
Y29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsIF9UcCogX19y
ZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkN
CnsNCiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwg
X19yZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5l
IF9UcCogX19jb3B5X2F1eDIoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBf
VHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9fdHJ1ZV90eXBlKQ0Kew0KICByZXR1cm4gX19jb3B5X3RyaXZp
YWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQp9DQoNCg0KdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz
cyBfVHA+DQppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2F1eChfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9UcCop
DQp7DQogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+Ojpo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yDQogICAgICAgICAgX1Ry
aXZpYWw7DQogIHJldHVybiBfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LCBfVHJpdmlhbCgpKTsNCn0NCg0KdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQppbmxpbmUg
X091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkNCnsNCiAg
cmV0dXJuIF9PdXRwdXRJdGVyKF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdC5iYXNlKCksDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSkpOw0KfQ0KDQp0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4N
CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBl
KQ0Kew0KICByZXR1cm4gX19jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f
cmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4N
CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBl
KQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8
X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOw0KICByZXR1cm4gX19j
b3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwgX19yZXN1
bHQsIF9fTm9ybWFsKCkpOw0KfQ0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4NCmlubGluZSBfT3V0cHV0
SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkNCnsNCiAgdHlwZWRl
ZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6
X05vcm1hbCBfX05vcm1hbDsNCiAgcmV0dXJuIF9fY29weV9uaTIoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7DQp9DQoNCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlu
bGluZSBfT3V0cHV0SXRlciBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7DQoNCg0KICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf
bm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFs
Ow0KICAgcmV0dXJuIF9fY29weV9uaTEoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCwgX19Ob3JtYWwoKSk7DQp9DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0
ZXIyLA0KICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4NCmlubGluZSBfQmlk
aXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25h
bEl0ZXIxIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfRGlzdGFuY2UqKQ0Kew0KICB3aGlsZSAoX19maXJzdCAhPSBf
X2xhc3QpDQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7DQogIHJldHVy
biBfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0
YW5jZT4NCmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3
YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopDQp7DQogIGZvciAoX0Rpc3Rh
bmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQ0K
ICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0Ow0KICByZXR1cm4gX19yZXN1
bHQ7DQp9DQoNCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJl
Y3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLA0KICAg
ICAgICAgIGNsYXNzIF9Cb29sVHlwZT4NCnN0cnVjdCBfX2NvcHlfYmFja3dh
cmRfZGlzcGF0Y2gNCnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46Oml0ZXJhdG9yX2NhdGVnb3J5
DQogICAgICAgICAgX0NhdDsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46OmRpZmZlcmVuY2VfdHlw
ZQ0KICAgICAgICAgIF9EaXN0YW5jZTsNCg0KICBzdGF0aWMgX0JpZGlyZWN0
aW9uYWxJdGVyMiBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KSB7DQogICAg
cmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsNCiAgfQ0KfTsNCg0KdGVt
cGxhdGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlz
cGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+DQp7DQogIHN0YXRpYyBf
VHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFz
dCwgX1RwKiBfX3Jlc3VsdCkgew0KICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVt
ID0gX19sYXN0IC0gX19maXJzdDsNCiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0g
X051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsNCiAgICByZXR1
cm4gX19yZXN1bHQgLSBfTnVtOw0KICB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPg0Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25z
dCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4NCnsNCiAgc3RhdGljIF9UcCog
Y29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBf
VHAqIF9fcmVzdWx0KSB7DQogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9k
aXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4NCiAgICAgIDo6Y29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsNCiAgfQ0KfTsNCg0KdGVt
cGxhdGUgPGNsYXNzIF9CSTEsIGNsYXNzIF9CSTI+DQppbmxpbmUgX0JJMiBf
X2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3Qs
IF9CSTIgX19yZXN1bHQpIHsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVf
dHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVf
dHlwZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDo6aGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcg0KICAgICAgICAgIF9Ucml2aWFsOw0KICBy
ZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9U
cml2aWFsPg0KICAgICAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCk7DQp9DQoNCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0
eXBlbmFtZSBfQkkyPg0KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291
dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFz
dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKSB7DQogIHJl
dHVybiBfQkkyKF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdC5iYXNlKCkpKTsNCn0NCg0KdGVtcGxhdGUgPHR5cGVuYW1l
IF9CSTEsIHR5cGVuYW1lIF9CSTI+DQppbmxpbmUgX0JJMiBfX2NvcHlfYmFj
a3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9C
STEgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBl
KXsNCiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCk7DQp9DQoNCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkx
LCB0eXBlbmFtZSBfQkkyPg0KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJk
X2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19s
YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgew0KICB0
eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9O
b3JtYWwgX19Ob3JtYWw7DQogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0
cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJh
c2UoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsNCn0NCg0KdGVtcGxh
dGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+DQppbmxpbmUgX0JJ
MiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEg
X19maXJzdCwgX0JJMSBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9f
ZmFsc2VfdHlwZSkgew0KICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxf
aXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7DQogIHJldHVybiBf
X2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7DQp9DQoNCnRl
bXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPg0KaW5saW5l
IF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0
LCBfQkkyIF9fcmVzdWx0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN
Cg0KDQogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxf
QkkxPjo6X05vcm1hbCBfX05vcm1hbDsNCiAgcmV0dXJuIF9fY29weV9iYWNr
d2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19Ob3JtYWwoKSk7DQp9DQoNCg0KDQoNCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1
dEl0ZXI+DQpwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPiBfX2NvcHlf
bihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgew0KICBmb3IgKCA7IF9fY291bnQg
PiAwOyAtLV9fY291bnQpIHsNCiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsN
CiAgICArK19fZmlyc3Q7DQogICAgKytfX3Jlc3VsdDsNCiAgfQ0KICByZXR1
cm4gcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4oX19maXJzdCwgX19y
ZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JBSXRlciwgY2xhc3Mg
X1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPg0KaW5saW5lIHBhaXI8X1JBSXRl
ciwgX091dHB1dEl0ZXI+DQpfX2NvcHlfbihfUkFJdGVyIF9fZmlyc3QsIF9T
aXplIF9fY291bnQsDQogICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwN
CiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7DQogIF9S
QUl0ZXIgX19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7DQogIHJldHVybiBw
YWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPihfX2xhc3QsIGNvcHkoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPg0K
aW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+DQpfX2NvcHlf
bihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0KSB7DQogIHJldHVybiBfX2NvcHlfbihfX2ZpcnN0LCBf
X2NvdW50LCBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgIF9faXRlcmF0
b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPg0K
aW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+DQpjb3B5X24o
X0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7DQoNCg0KICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19j
b3VudCwgX19yZXN1bHQpOw0KfQ0KDQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4NCnZvaWQgZmlsbChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1Rw
JiBfX3ZhbHVlKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KDQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkNCiAgICAqX19maXJzdCA9IF9fdmFsdWU7DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4NCl9P
dXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBf
X24sIGNvbnN0IF9UcCYgX192YWx1ZSkNCnsNCg0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsNCg0KICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19f
Zmlyc3QpDQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOw0KICByZXR1cm4gX19m
aXJzdDsNCn0NCg0KDQoNCmlubGluZSB2b2lkIGZpbGwodW5zaWduZWQgY2hh
ciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LA0KICAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpDQp7DQogIHVuc2ln
bmVkIGNoYXIgX190bXAgPSBfX2M7DQogIG1lbXNldChfX2ZpcnN0LCBfX3Rt
cCwgX19sYXN0IC0gX19maXJzdCk7DQp9DQoNCmlubGluZSB2b2lkIGZpbGwo
c2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFyKiBfX2xhc3QsDQog
ICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpDQp7DQog
IHNpZ25lZCBjaGFyIF9fdG1wID0gX19jOw0KICBtZW1zZXQoX19maXJzdCwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xhc3QgLSBf
X2ZpcnN0KTsNCn0NCg0KaW5saW5lIHZvaWQgZmlsbChjaGFyKiBfX2ZpcnN0
LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykNCnsNCiAgY2hhciBf
X3RtcCA9IF9fYzsNCiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4NCmlubGluZSB1bnNpZ25lZCBjaGFy
KiBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj
aGFyJiBfX2MpDQp7DQogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwg
X19jKTsNCiAgcmV0dXJuIF9fZmlyc3QgKyBfX247DQp9DQoNCnRlbXBsYXRl
IDxjbGFzcyBfU2l6ZT4NCmlubGluZSBzaWduZWQgY2hhciogZmlsbF9uKGNo
YXIqIF9fZmlyc3QsIF9TaXplIF9fbiwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpDQp7DQogIGZpbGwoX19m
aXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsNCiAgcmV0dXJuIF9fZmlyc3Qg
KyBfX247DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4NCmlubGluZSBj
aGFyKiBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBj
aGFyJiBfX2MpDQp7DQogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwg
X19jKTsNCiAgcmV0dXJuIF9fZmlyc3QgKyBfX247DQp9DQoNCg0KDQoNCg0K
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy
Mj4NCnBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
Kl9fZmlyc3QxID09ICpfX2ZpcnN0Mikgew0KICAgICsrX19maXJzdDE7DQog
ICAgKytfX2ZpcnN0MjsNCiAgfQ0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVy
MSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7DQp9DQoNCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIs
IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQpwYWlyPF9JbnB1dEl0ZXIxLCBf
SW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRl
IF9fYmluYXJ5X3ByZWQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0
MikpIHsNCiAgICArK19fZmlyc3QxOw0KICAgICsrX19maXJzdDI7DQogIH0N
CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2Zp
cnN0MSwgX19maXJzdDIpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPg0KaW5saW5lIGJvb2wgZXF1YWwo
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQog
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikNCnsNCg0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KDQoNCg0KICBmb3IgKCA7IF9fZmlyc3QxICE9
IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpDQogICAgaWYgKCEo
Kl9fZmlyc3QxID09ICpfX2ZpcnN0MikpDQogICAgICByZXR1cm4gZmFsc2U7
DQogIHJldHVybiB0cnVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZGlj
YXRlPg0KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEs
IF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w
cmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KDQogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsg
KytfX2ZpcnN0MSwgKytfX2ZpcnN0MikNCiAgICBpZiAoIV9fYmluYXJ5X3By
ZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgcmV0dXJuIGZhbHNl
Ow0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPg0KYm9vbCBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIp
DQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN
Cg0KICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIg
IT0gX19sYXN0Mg0KICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIp
IHsNCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQ0KICAgICAgcmV0
dXJuIHRydWU7DQogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkNCiAg
ICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KICByZXR1cm4gX19maXJzdDEgPT0g
X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOw0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFz
cyBfQ29tcGFyZT4NCmJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lu
cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgZm9yICggOyBf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDINCiAg
ICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7DQogICAgaWYgKF9f
Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpDQogICAgICByZXR1cm4gdHJ1
ZTsNCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkNCiAg
ICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KICByZXR1cm4gX19maXJzdDEgPT0g
X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOw0KfQ0KDQppbmxpbmUg
Ym9vbA0KbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQg
Y2hhciogX19maXJzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsDQogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3Qy
KQ0Kew0KICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmly
c3QxOw0KICBjb25zdCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmly
c3QyOw0KICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEs
IF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsNCiAgcmV0dXJuIF9f
cmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7
DQp9DQoNCmlubGluZSBib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNv
bnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
X19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpDQp7DQoNCiAgcmV0dXJu
IGxleGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQgY2hhciop
IF9fZmlyc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmly
c3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0
IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7DQoNCg0KDQoNCg0KDQp9DQoNCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+
DQppbnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MikNCnsNCiAgd2hpbGUgKF9fZmlyc3Qx
ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mikgew0KICAgIGlm
ICgqX19maXJzdDEgPCAqX19maXJzdDIpDQogICAgICByZXR1cm4gLTE7DQog
ICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkNCiAgICAgIHJldHVybiAx
Ow0KICAgICsrX19maXJzdDE7DQogICAgKytfX2ZpcnN0MjsNCiAgfQ0KICBp
ZiAoX19maXJzdDIgPT0gX19sYXN0Mikgew0KICAgIHJldHVybiAhKF9fZmly
c3QxID09IF9fbGFzdDEpOw0KICB9DQogIGVsc2Ugew0KICAgIHJldHVybiAt
MTsNCiAgfQ0KfQ0KDQppbmxpbmUgaW50DQpfX2xleGljb2dyYXBoaWNhbF9j
b21wYXJlXzN3YXkoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
Y2hhciogX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xh
c3QyKQ0Kew0KICBjb25zdCBwdHJkaWZmX3QgX19sZW4xID0gX19sYXN0MSAt
IF9fZmlyc3QxOw0KICBjb25zdCBwdHJkaWZmX3QgX19sZW4yID0gX19sYXN0
MiAtIF9fZmlyc3QyOw0KICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAo
X19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsNCiAg
cmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdA0KICAgICAgICAgICAg
ICAgICAgICAgICA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChfX2xlbjEg
PCBfX2xlbjIgPyAtMSA6IDEpKTsNCn0NCg0KaW5saW5lIGludA0KX19sZXhp
Y29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3Qx
LCBjb25zdCBjaGFyKiBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBf
X2xhc3QyKQ0Kew0KDQogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21w
YXJlXzN3YXkoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj
b25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QxLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3Qx
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2ln
bmVkIGNoYXIqKSBfX2ZpcnN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7DQoNCg0K
DQoNCg0KDQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xh
c3MgX0lucHV0SXRlcjI+DQppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVf
M3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQ0Kew0KDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgcmV0dXJu
IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfX2ZpcnN0MSwgX19s
YXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOw0KfQ0KDQp9DQojIDIxICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5
LmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfYWxsb2MuaCIgMSAzDQojIDI4ICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMw0KIyAx
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mdW5j
dGV4Y2VwdC5oIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMNCiMgMSAiL2hvbWUv
bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVz
LmgiIDEgMw0KIyAzNSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
LXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQN
CnsNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsN
Cg0KDQogIHZvaWQNCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7DQoNCg0K
ICB2b2lkDQogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7DQoNCiAgdm9pZA0K
ICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7DQoNCg0KICB2b2lkDQogIF9f
dGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lk
DQogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoN
CiAgdm9pZA0KICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hh
ciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X291dF9vZl9y
YW5nZShjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19y
dW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBf
X3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9p
ZA0KICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
DQoNCiAgdm9pZA0KICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBj
aGFyKiBfX3MpOw0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2lvc19mYWlsdXJl
KGNvbnN0IGNoYXIqIF9fcyk7DQp9DQojIDI5ICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzDQojIDEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
c3RkZGVmLmgiIDEgMw0KIyAzMCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMw0KIyAxICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5o
IiAxIDMNCiMgMzEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzDQoj
IDMyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfYWxsb2MuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9jYXNzZXJ0LmgiIDEgMw0KIyAzNyAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3Nl
cnQuaCIgMw0KIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMyA0DQoj
IDExICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMgNA0KI3ByYWdtYSBpZGVu
dCAiQCgjKWFzc2VydC5oCTEuOQk5Mi8wNy8xNCBTTUkiDQoNCg0KZXh0ZXJu
ICJDIiB7DQoNCg0KDQpleHRlcm4gdm9pZCBfX2Fzc2VydChjb25zdCBjaGFy
ICosIGNvbnN0IGNoYXIgKiwgaW50KTsNCg0KDQoNCg0KDQp9DQojIDM4ICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Fz
c2VydC5oIiAyIDMNCiMgMzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCg0KDQoNCg0KDQojIDEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90
aHJlYWRzLmgiIDEgMw0KIyAzMyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMw0KIyAxICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMy
LjcvYml0cy9ndGhyLmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMiAzDQojIDUx
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
dGhyZWFkcy5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQojIDY2ICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5o
IiAzDQpzdHJ1Y3QgX1JlZmNvdW50X0Jhc2UNCnsNCg0KDQoNCg0KICB0eXBl
ZGVmIHNpemVfdCBfUkNfdDsNCg0KDQoNCiAgIHZvbGF0aWxlIF9SQ190IF9N
X3JlZl9jb3VudDsNCg0KDQoNCg0KICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9y
ZWZfY291bnRfbG9jazsNCiAgX1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6
IF9NX3JlZl9jb3VudChfX24pDQogICAgew0KDQogICAgICBfX2d0aHJlYWRf
bXV0ZXhfdCBfX3RtcCA9IHt7ezB9LCAwfSwge3t7MH19fSwgezB9fTsNCiAg
ICAgIF9NX3JlZl9jb3VudF9sb2NrID0gX190bXA7DQoNCg0KDQoNCg0KICAg
IH0NCiMgMTEyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfdGhyZWFkcy5oIiAzDQogIHZvaWQgX01faW5jcigpIHsNCiAg
ICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2spOw0K
ICAgICsrX01fcmVmX2NvdW50Ow0KICAgIF9fZ3RocmVhZF9tdXRleF91bmxv
Y2soJl9NX3JlZl9jb3VudF9sb2NrKTsNCiAgfQ0KICBfUkNfdCBfTV9kZWNy
KCkgew0KICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRf
bG9jayk7DQogICAgdm9sYXRpbGUgX1JDX3QgX190bXAgPSAtLV9NX3JlZl9j
b3VudDsNCiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291
bnRfbG9jayk7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9DQojIDE2MyAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVh
ZHMuaCIgMw0KfTsNCiMgMjg0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzDQp0ZW1wbGF0ZSA8aW50
IF9faW5zdD4NCnN0cnVjdCBfU1RMX211dGV4X3NwaW4gew0KICBlbnVtIHsg
X19sb3dfbWF4ID0gMzAsIF9faGlnaF9tYXggPSAxMDAwIH07DQoNCg0KICBz
dGF0aWMgdW5zaWduZWQgX19tYXg7DQogIHN0YXRpYyB1bnNpZ25lZCBfX2xh
c3Q7DQp9Ow0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCnVuc2lnbmVkIF9T
VExfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX21heCA9IF9TVExfbXV0ZXhfc3Bp
bjxfX2luc3Q+OjpfX2xvd19tYXg7DQoNCnRlbXBsYXRlIDxpbnQgX19pbnN0
Pg0KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbGFzdCA9
IDA7DQojIDMxMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX3RocmVhZHMuaCIgMw0Kc3RydWN0IF9TVExfbXV0ZXhfbG9j
aw0Kew0KDQoNCg0KDQoNCg0KDQogIF9fZ3RocmVhZF9tdXRleF90IF9NX2xv
Y2s7DQogIHZvaWQgX01faW5pdGlhbGl6ZSgpIHsNCiMgMzQyICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5o
IiAzDQogIH0NCiAgdm9pZCBfTV9hY3F1aXJlX2xvY2soKSB7DQoNCg0KDQog
ICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX2xvY2spOw0KICB9DQogIHZv
aWQgX01fcmVsZWFzZV9sb2NrKCkgew0KDQoNCg0KICAgIF9fZ3RocmVhZF9t
dXRleF91bmxvY2soJl9NX2xvY2spOw0KICB9DQojIDQ1MyAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIg
Mw0KfTsNCiMgNDkyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfdGhyZWFkcy5oIiAzDQpzdHJ1Y3QgX1NUTF9hdXRvX2xv
Y2sNCnsNCiAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOw0KDQogIF9TVExf
YXV0b19sb2NrKF9TVExfbXV0ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2so
X19sb2NrKQ0KICAgIHsgX01fbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQ0K
ICB+X1NUTF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2Nr
KCk7IH0NCg0KcHJpdmF0ZToNCiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NU
TF9hdXRvX2xvY2smKTsNCiAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9h
dXRvX2xvY2smKTsNCn07DQoNCn0NCiMgMzkgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCiMgNjgg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
bGxvYy5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQp0ZW1wbGF0ZSA8
aW50IF9faW5zdD4NCmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsN
Cg0KcHJpdmF0ZToNCg0KICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhz
aXplX3QpOw0KICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCos
IHNpemVfdCk7DQogIHN0YXRpYyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29v
bV9oYW5kbGVyKSgpOw0KDQpwdWJsaWM6DQoNCiAgc3RhdGljIHZvaWQqIGFs
bG9jYXRlKHNpemVfdCBfX24pDQogIHsNCiAgICB2b2lkKiBfX3Jlc3VsdCA9
IG1hbGxvYyhfX24pOw0KICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3Vs
dCA9IF9TX29vbV9tYWxsb2MoX19uKTsNCiAgICByZXR1cm4gX19yZXN1bHQ7
DQogIH0NCg0KICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwg
c2l6ZV90ICkNCiAgew0KICAgIGZyZWUoX19wKTsNCiAgfQ0KDQogIHN0YXRp
YyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICwgc2l6ZV90
IF9fbmV3X3N6KQ0KICB7DQogICAgdm9pZCogX19yZXN1bHQgPSByZWFsbG9j
KF9fcCwgX19uZXdfc3opOw0KICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jl
c3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdfc3opOw0KICAgIHJl
dHVybiBfX3Jlc3VsdDsNCiAgfQ0KDQogIHN0YXRpYyB2b2lkICgqIF9fc2V0
X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgpDQogIHsNCiAgICB2
b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7
DQogICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7DQogICAg
cmV0dXJuKF9fb2xkKTsNCiAgfQ0KDQp9Ow0KDQoNCg0KdGVtcGxhdGUgPGlu
dCBfX2luc3Q+DQp2b2lkICgqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f
aW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpID0gMDsNCg0K
dGVtcGxhdGUgPGludCBfX2luc3Q+DQp2b2lkKg0KX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQ0K
ew0KICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsNCiAgICB2
b2lkKiBfX3Jlc3VsdDsNCg0KICAgIGZvciAoOzspIHsNCiAgICAgICAgX19t
eV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVy
Ow0KICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IHN0
ZDo6X190aHJvd19iYWRfYWxsb2MoKTsgfQ0KICAgICAgICAoKl9fbXlfbWFs
bG9jX2hhbmRsZXIpKCk7DQogICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9f
bik7DQogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsN
CiAgICB9DQp9DQoNCnRlbXBsYXRlIDxpbnQgX19pbnN0Pg0Kdm9pZCogX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Mo
dm9pZCogX19wLCBzaXplX3QgX19uKQ0Kew0KICAgIHZvaWQgKCogX19teV9t
YWxsb2NfaGFuZGxlcikoKTsNCiAgICB2b2lkKiBfX3Jlc3VsdDsNCg0KICAg
IGZvciAoOzspIHsNCiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9f
bWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOw0KICAgICAgICBpZiAoMCA9PSBf
X215X21hbGxvY19oYW5kbGVyKSB7IHN0ZDo6X190aHJvd19iYWRfYWxsb2Mo
KTsgfQ0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7DQogICAg
ICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7DQogICAgICAgIGlm
IChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsNCiAgICB9DQp9DQoNCnR5
cGVkZWYgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9jX2FsbG9j
Ow0KDQp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmNsYXNz
IHNpbXBsZV9hbGxvYyB7DQoNCnB1YmxpYzoNCiAgICBzdGF0aWMgX1RwKiBh
bGxvY2F0ZShzaXplX3QgX19uKQ0KICAgICAgeyByZXR1cm4gMCA9PSBfX24g
PyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChf
VHApKTsgfQ0KICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHZvaWQpDQogICAg
ICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9U
cCkpOyB9DQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwg
c2l6ZV90IF9fbikNCiAgICAgIHsgaWYgKDAgIT0gX19uKSBfQWxsb2M6OmRl
YWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9DQogICAgc3Rh
dGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkNCiAgICAgIHsgX0FsbG9j
OjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQ0KfTsNCg0KDQoN
Cg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+DQpjbGFzcyBkZWJ1Z19h
bGxvYyB7DQoNCnByaXZhdGU6DQoNCiAgZW51bSB7X1NfZXh0cmEgPSA4fTsN
Cg0KDQoNCnB1YmxpYzoNCg0KICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6
ZV90IF9fbikNCiAgew0KICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9B
bGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOw0KICAgICoo
c2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsNCiAgICByZXR1cm4gX19yZXN1bHQg
KyAoaW50KSBfU19leHRyYTsNCiAgfQ0KDQogIHN0YXRpYyB2b2lkIGRlYWxs
b2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQ0KICB7DQogICAgY2hhciog
X19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7DQogICAg
KHZvaWQpKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSB8fCAoX19hc3Nl
cnQoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iLCAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAxOTAp
LCAwKSk7DQogICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24g
KyAoaW50KSBfU19leHRyYSk7DQogIH0NCg0KICBzdGF0aWMgdm9pZCogcmVh
bGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9f
bmV3X3N6KQ0KICB7DQogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19w
IC0gKGludCkgX1NfZXh0cmE7DQogICAgKHZvaWQpKCgqKHNpemVfdCopX19y
ZWFsX3AgPT0gX19vbGRfc3opIHx8IChfX2Fzc2VydCgiKihzaXplX3QqKV9f
cmVhbF9wID09IF9fb2xkX3N6IiwgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiwgMTk3KSwgMCkpOw0KICAg
IGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQ0KICAgICAgX0FsbG9jOjpyZWFs
bG9jYXRlKF9fcmVhbF9wLCBfX29sZF9zeiArIChpbnQpIF9TX2V4dHJhLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zeiAr
IChpbnQpIF9TX2V4dHJhKTsNCiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBf
X25ld19zejsNCiAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRy
YTsNCiAgfQ0KDQp9Ow0KIyAyNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzDQp0ZW1wbGF0ZSA8Ym9v
bCB0aHJlYWRzLCBpbnQgaW5zdD4NCmNsYXNzIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZSB7DQoNCnByaXZhdGU6DQoNCg0KICBlbnVtIHtfQUxJR04gPSA4
fTsNCiAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07DQogIGVudW0ge19ORlJF
RUxJU1RTID0gMTZ9Ow0KICBzdGF0aWMgc2l6ZV90DQogIF9TX3JvdW5kX3Vw
KHNpemVfdCBfX2J5dGVzKQ0KICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsg
KHNpemVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7
IH0NCg0KICB1bmlvbiBfT2JqIHsNCiAgICAgICAgdW5pb24gX09iaiogX01f
ZnJlZV9saXN0X2xpbms7DQogICAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFb
MV07DQogIH07DQoNCiAgc3RhdGljIF9PYmoqIHZvbGF0aWxlIF9TX2ZyZWVf
bGlzdFtdOw0KDQogIHN0YXRpYyBzaXplX3QgX1NfZnJlZWxpc3RfaW5kZXgo
c2l6ZV90IF9fYnl0ZXMpIHsNCiAgICAgICAgcmV0dXJuICgoKF9fYnl0ZXMp
ICsgKHNpemVfdClfQUxJR04tMSkvKHNpemVfdClfQUxJR04gLSAxKTsNCiAg
fQ0KDQoNCiAgc3RhdGljIHZvaWQqIF9TX3JlZmlsbChzaXplX3QgX19uKTsN
Cg0KDQogIHN0YXRpYyBjaGFyKiBfU19jaHVua19hbGxvYyhzaXplX3QgX19z
aXplLCBpbnQmIF9fbm9ianMpOw0KDQoNCiAgc3RhdGljIGNoYXIqIF9TX3N0
YXJ0X2ZyZWU7DQogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsNCiAgc3Rh
dGljIHNpemVfdCBfU19oZWFwX3NpemU7DQoNCg0KICAgIHN0YXRpYyBfU1RM
X211dGV4X2xvY2sgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jazsNCg0KDQoNCg0K
DQogICAgY2xhc3MgX0xvY2s7DQogICAgZnJpZW5kIGNsYXNzIF9Mb2NrOw0K
ICAgIGNsYXNzIF9Mb2NrIHsNCiAgICAgICAgcHVibGljOg0KICAgICAgICAg
ICAgX0xvY2soKSB7IHsgaWYgKHRocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9y
X2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH07IH0NCiAgICAgICAgICAgIH5f
TG9jaygpIHsgeyBpZiAodGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9j
ay5fTV9yZWxlYXNlX2xvY2soKTsgfTsgfQ0KICAgIH07DQoNCnB1YmxpYzoN
Cg0KDQogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQ0KICB7
DQogICAgdm9pZCogX19yZXQgPSAwOw0KDQogICAgaWYgKF9fbiA+IChzaXpl
X3QpIF9NQVhfQllURVMpIHsNCiAgICAgIF9fcmV0ID0gbWFsbG9jX2FsbG9j
OjphbGxvY2F0ZShfX24pOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIF9P
YmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdA0KICAgICAgICAgID0gX1Nf
ZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsNCg0KDQoNCg0K
DQogICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7DQoNCiAgICAgIF9PYmoq
IF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0Ow0KICAgICAgaWYgKF9fcmVz
dWx0ID09IDApDQogICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5k
X3VwKF9fbikpOw0KICAgICAgZWxzZSB7DQogICAgICAgICpfX215X2ZyZWVf
bGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOw0KICAgICAg
ICBfX3JldCA9IF9fcmVzdWx0Ow0KICAgICAgfQ0KICAgIH0NCg0KICAgIHJl
dHVybiBfX3JldDsNCiAgfTsNCg0KDQogIHN0YXRpYyB2b2lkIGRlYWxsb2Nh
dGUodm9pZCogX19wLCBzaXplX3QgX19uKQ0KICB7DQogICAgaWYgKF9fbiA+
IChzaXplX3QpIF9NQVhfQllURVMpDQogICAgICBtYWxsb2NfYWxsb2M6OmRl
YWxsb2NhdGUoX19wLCBfX24pOw0KICAgIGVsc2Ugew0KICAgICAgX09iaiog
dm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0DQogICAgICAgICAgPSBfU19mcmVl
X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOw0KICAgICAgX09iaiog
X19xID0gKF9PYmoqKV9fcDsNCg0KDQoNCg0KICAgICAgX0xvY2sgX19sb2Nr
X2luc3RhbmNlOw0KDQogICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsg
PSAqX19teV9mcmVlX2xpc3Q7DQogICAgICAqX19teV9mcmVlX2xpc3QgPSBf
X3E7DQoNCiAgICB9DQogIH0NCg0KICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0
ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6
KTsNCg0KfSA7DQoNCnR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PHRydWUsIDA+IGFsbG9jOw0KdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8ZmFsc2UsIDA+IHNpbmdsZV9jbGllbnRfYWxsb2M7DQoNCnRlbXBs
YXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4NCmlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyZWFkcywgX19pbnN0PiYsDQogICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z
dD4mKQ0Kew0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KdGVtcGxhdGUgPGJvb2wg
X190aHJlYWRzLCBpbnQgX19pbnN0Pg0KaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf
X2luc3Q+JiwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpDQp7DQog
IHJldHVybiBmYWxzZTsNCn0NCg0KDQoNCg0KDQoNCg0KdGVtcGxhdGUgPGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KY2hhcioNCl9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2Fs
bG9jKHNpemVfdCBfX3NpemUsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9i
anMpDQp7DQogICAgY2hhciogX19yZXN1bHQ7DQogICAgc2l6ZV90IF9fdG90
YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOw0KICAgIHNpemVfdCBfX2J5
dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7DQoNCiAg
ICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsNCiAgICAg
ICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOw0KICAgICAgICBfU19zdGFy
dF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7DQogICAgICAgIHJldHVybihfX3Jl
c3VsdCk7DQogICAgfSBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXpl
KSB7DQogICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19z
aXplKTsNCiAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9i
anM7DQogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsNCiAgICAg
ICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOw0KICAgICAgICBy
ZXR1cm4oX19yZXN1bHQpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIHNpemVf
dCBfX2J5dGVzX3RvX2dldCA9DQogICAgICAgICAgMiAqIF9fdG90YWxfYnl0
ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7DQoNCiAgICAg
ICAgaWYgKF9fYnl0ZXNfbGVmdCA+IDApIHsNCiAgICAgICAgICAgIF9PYmoq
IHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9DQogICAgICAgICAgICAgICAg
ICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5
dGVzX2xlZnQpOw0KDQogICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2Zy
ZWUpIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0Ow0K
ICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0
X2ZyZWU7DQogICAgICAgIH0NCiAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChj
aGFyKiltYWxsb2MoX19ieXRlc190b19nZXQpOw0KICAgICAgICBpZiAoMCA9
PSBfU19zdGFydF9mcmVlKSB7DQogICAgICAgICAgICBzaXplX3QgX19pOw0K
ICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0Ow0K
ICAgICAgICAgICAgX09iaiogX19wOw0KDQoNCg0KICAgICAgICAgICAgZm9y
IChfX2kgPSBfX3NpemU7DQogICAgICAgICAgICAgICAgIF9faSA8PSAoc2l6
ZV90KSBfTUFYX0JZVEVTOw0KICAgICAgICAgICAgICAgICBfX2kgKz0gKHNp
emVfdCkgX0FMSUdOKSB7DQogICAgICAgICAgICAgICAgX19teV9mcmVlX2xp
c3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOw0K
ICAgICAgICAgICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAg
ICAgICAgICAgICBpZiAoMCAhPSBfX3ApIHsNCiAgICAgICAgICAgICAgICAg
ICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5r
Ow0KICAgICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIq
KV9fcDsNCiAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19z
dGFydF9mcmVlICsgX19pOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4o
X1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7DQoNCg0KICAgICAg
ICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIF9TX2Vu
ZF9mcmVlID0gMDsNCiAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hh
ciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7DQoN
Cg0KDQogICAgICAgIH0NCiAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0
ZXNfdG9fZ2V0Ow0KICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2Zy
ZWUgKyBfX2J5dGVzX3RvX2dldDsNCiAgICAgICAgcmV0dXJuKF9TX2NodW5r
X2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOw0KICAgIH0NCn0NCg0KDQoNCg0K
DQp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQp2b2lk
Kg0KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0
Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pDQp7DQogICAgaW50IF9fbm9ianMg
PSAyMDsNCiAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19u
LCBfX25vYmpzKTsNCiAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xp
c3Q7DQogICAgX09iaiogX19yZXN1bHQ7DQogICAgX09iaiogX19jdXJyZW50
X29iajsNCiAgICBfT2JqKiBfX25leHRfb2JqOw0KICAgIGludCBfX2k7DQoN
CiAgICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4oX19jaHVuayk7DQogICAg
X19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9p
bmRleChfX24pOw0KDQoNCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1
bms7DQogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX25leHRfb2JqID0gKF9P
YmoqKShfX2NodW5rICsgX19uKTsNCiAgICAgIGZvciAoX19pID0gMTsgOyBf
X2krKykgew0KICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsN
CiAgICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9v
YmogKyBfX24pOw0KICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7
DQogICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9s
aW5rID0gMDsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9IGVsc2Ug
ew0KICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3Rf
bGluayA9IF9fbmV4dF9vYmo7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICBy
ZXR1cm4oX19yZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRz
LCBpbnQgaW5zdD4NCnZvaWQqDQpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
dGhyZWFkcywgaW5zdD46OnJlYWxsb2NhdGUodm9pZCogX19wLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX29sZF9zeiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uZXdfc3opDQp7
DQogICAgdm9pZCogX19yZXN1bHQ7DQogICAgc2l6ZV90IF9fY29weV9zejsN
Cg0KICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYg
X19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7DQogICAgICAgIHJl
dHVybihyZWFsbG9jKF9fcCwgX19uZXdfc3opKTsNCiAgICB9DQogICAgaWYg
KF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19z
eikpIHJldHVybihfX3ApOw0KICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19u
ZXdfc3opOw0KICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/
IF9fb2xkX3N6IDogX19uZXdfc3o7DQogICAgbWVtY3B5KF9fcmVzdWx0LCBf
X3AsIF9fY29weV9zeik7DQogICAgZGVhbGxvY2F0ZShfX3AsIF9fb2xkX3N6
KTsNCiAgICByZXR1cm4oX19yZXN1bHQpOw0KfQ0KDQoNCiAgICB0ZW1wbGF0
ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQogICAgX1NUTF9tdXRl
eF9sb2NrDQogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk
cywgX19pbnN0Pjo6X1Nfbm9kZV9hbGxvY2F0b3JfbG9jaw0KICAgICAgICA9
IHsge3t7MH0sIDB9LCB7e3swfX19LCB7MH19IH07DQoNCg0KDQp0ZW1wbGF0
ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQpjaGFyKiBfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19zdGFy
dF9mcmVlID0gMDsNCg0KdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQg
X19pbnN0Pg0KY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOw0KDQp0ZW1wbGF0ZSA8
Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQpzaXplX3QgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9z
aXplID0gMDsNCg0KdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19p
bnN0Pg0KdHlwZW5hbWUgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0Pjo6X09iaiogdm9sYXRpbGUNCl9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gOjpfU19mcmVlX2xpc3Rb
DQogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
bnN0Pjo6X05GUkVFTElTVFMNCl0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgfTsNCiMgNTI2ICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIg
Mw0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmNsYXNzIGFsbG9jYXRvciB7DQog
IHR5cGVkZWYgYWxsb2MgX0FsbG9jOw0KcHVibGljOg0KICB0eXBlZGVmIHNp
emVfdCBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu
Y2VfdHlwZTsNCiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVkZWYg
Y29uc3QgX1RwKiBjb25zdF9wb2ludGVyOw0KICB0eXBlZGVmIF9UcCYgcmVm
ZXJlbmNlOw0KICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNl
Ow0KICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KDQogIHRlbXBsYXRlIDxj
bGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsNCiAgICB0eXBlZGVmIGFsbG9j
YXRvcjxfVHAxPiBvdGhlcjsNCiAgfTsNCg0KICBhbGxvY2F0b3IoKSB0aHJv
dygpIHt9DQogIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygp
IHt9DQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3Qg
YWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSB7fQ0KICB+YWxsb2NhdG9yKCkg
dGhyb3coKSB7fQ0KDQogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194
KSBjb25zdCB7IHJldHVybiAmX194OyB9DQogIGNvbnN0X3BvaW50ZXIgYWRk
cmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194
OyB9DQoNCg0KDQogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29u
c3Qgdm9pZCogPSAwKSB7DQogICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGlj
X2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1Rw
KSkpDQogICAgICAgICAgICAgICAgICAgIDogMDsNCiAgfQ0KDQoNCiAgdm9p
ZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQ0KICAg
IHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkp
OyB9DQoNCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQ0K
ICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQ0KDQog
IHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFs
KSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0NCiAgdm9pZCBkZXN0cm95KHBv
aW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9DQp9Ow0KDQp0ZW1wbGF0ZTw+
DQpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gew0KcHVibGljOg0KICB0eXBlZGVm
IHNpemVfdCBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl
cmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOw0KICB0eXBl
ZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7DQogIHR5cGVkZWYgdm9p
ZCB2YWx1ZV90eXBlOw0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1
Y3QgcmViaW5kIHsNCiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhl
cjsNCiAgfTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg
X1QyPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8
X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikNCnsNCiAgcmV0dXJuIHRy
dWU7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBj
b25zdCBhbGxvY2F0b3I8X1QyPiYpDQp7DQogIHJldHVybiBmYWxzZTsNCn0N
CiMgNjAyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxsb2MuaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPg0Kc3RydWN0IF9fYWxsb2NhdG9yIHsNCiAgX0FsbG9jIF9fdW5k
ZXJseWluZ19hbGxvYzsNCg0KICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7
DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlw
ZWRlZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25z
dF9wb2ludGVyOw0KICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KICB0eXBl
ZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOw0KICB0eXBlZGVmIF9U
cCB2YWx1ZV90eXBlOw0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1
Y3QgcmViaW5kIHsNCiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9B
bGxvYz4gb3RoZXI7DQogIH07DQoNCiAgX19hbGxvY2F0b3IoKSB0aHJvdygp
IHt9DQogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yJiBfX2EpIHRo
cm93KCkNCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5
aW5nX2FsbG9jKSB7fQ0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4NCiAgX19h
bGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiYgX19h
KSB0aHJvdygpDQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5k
ZXJseWluZ19hbGxvYykge30NCiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7
fQ0KDQogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7
IHJldHVybiAmX194OyB9DQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25z
dF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9DQoNCg0K
ICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0g
MCkgew0KICAgIHJldHVybiBfX24gIT0gMA0KICAgICAgICA/IHN0YXRpY19j
YXN0PF9UcCo+KF9fdW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBz
aXplb2YoX1RwKSkpDQogICAgICAgIDogMDsNCiAgfQ0KDQoNCiAgdm9pZCBk
ZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQ0KICAgIHsg
X191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXpl
b2YoX1RwKSk7IH0NCg0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0
aHJvdygpDQogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHAp
OyB9DQoNCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9U
cCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQ0KICB2b2lkIGRl
c3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0NCn07DQoNCnRl
bXBsYXRlIDxjbGFzcyBfQWxsb2M+DQpjbGFzcyBfX2FsbG9jYXRvcjx2b2lk
LCBfQWxsb2M+IHsNCiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOw0KICB0
eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYg
dm9pZCogcG9pbnRlcjsNCiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9w
b2ludGVyOw0KICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsNCg0KICB0ZW1w
bGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7DQogICAgdHlwZWRl
ZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOw0KICB9Ow0KfTsN
Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxv
Yz4mIF9fYTEsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxs
b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikNCnsNCiAgcmV0dXJuIF9fYTEu
X191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2FsbG9j
Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwg
X0FsbG9jPiYgX19hMSwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQ0Kew0KICByZXR1cm4g
X19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5fX3VuZGVybHlpbmdf
YWxsb2M7DQp9DQoNCg0KDQoNCg0KdGVtcGxhdGUgPGludCBpbnN0Pg0KaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1w
bGF0ZTxpbnN0PiYsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JikNCnsNCiAgcmV0dXJuIHRy
dWU7DQp9DQoNCnRlbXBsYXRlIDxpbnQgX19pbnN0Pg0KaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu
c3Q+JiwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2Nf
YWxsb2NfdGVtcGxhdGU8X19pbnN0PiYpDQp7DQogIHJldHVybiBmYWxzZTsN
Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsDQogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7
DQogIHJldHVybiB0cnVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9j
Pg0KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBkZWJ1Z19hbGxvYzxf
QWxsb2M+JiwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdf
YWxsb2M8X0FsbG9jPiYpIHsNCiAgcmV0dXJuIGZhbHNlOw0KfQ0KIyA3MzIg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
bGxvYy5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2Nh
dG9yPg0Kc3RydWN0IF9BbGxvY190cmFpdHMNCnsNCiAgc3RhdGljIGNvbnN0
IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7DQogIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jYXRvcjo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVy
IGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jYXRvcj4NCmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxf
VHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7DQoNCg0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPg0Kc3RydWN0IF9BbGxvY190
cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1RwMT4gPg0Kew0KICBzdGF0aWMgY29u
c3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIHNp
bXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxsb2NfdHlwZTsNCiAgdHlwZWRl
ZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsNCn07DQoNCg0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0Pg0Kc3RydWN0IF9BbGxv
Y190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0g
dHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7DQogIHR5cGVk
ZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf
X2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQoNCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0Kc3RydWN0
IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
X190aHJlYWRzLCBfX2luc3Q+ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wg
X1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVfYWxs
b2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf
X2luc3Q+ID4NCiAgICAgICAgICBfQWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBf
X2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro
cmVhZHMsIF9faW5zdD4gPg0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOw0K
fTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpz
dHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4g
Pg0Kew0KICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0
cnVlOw0KICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2FsbG9j
PF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBfX2FsbG9jYXRv
cjxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsN
Cn07DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs
IGludCBfX2luc3Q+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsDQogICAg
ICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPg0Kew0KICBzdGF0aWMgY29uc3Qg
Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOw0KICB0eXBlZGVmIHNpbXBs
ZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4g
PiBfQWxsb2NfdHlwZTsNCiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlw
ZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwg
Ym9vbCBfX3RociwgaW50IF9faW5zdD4NCnN0cnVjdCBfQWxsb2NfdHJhaXRz
PF9UcCwNCiAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAx
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4NCnsNCiAgc3Rh
dGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlw
ZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHIsX19pbnN0PiA+DQogICAgICAgICAgX0FsbG9jX3R5cGU7DQog
IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHIsX19pbnN0PiA+DQogICAgICAgICAgYWxsb2NhdG9yX3R5
cGU7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs
IGNsYXNzIF9BbGxvYz4NCnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19h
bGxvY2F0b3I8X1RwMSwgZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4NCnsNCiAg
c3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAg
dHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+
ID4gX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBk
ZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQp9
DQojIDIyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfbWVtb3J5LmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMw0KIyAz
NCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2NvbnN0cnVjdC5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9uZXciIDEgMw0KIyAzNSAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAyIDMNCg0K
bmFtZXNwYWNlIHN0ZA0Kew0KIyA0NyAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzDQp0ZW1wbGF0
ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxpbmUgdm9pZCBfQ29uc3Ry
dWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsNCm5ldyAoKHZv
aWQqKSBfX3ApIF9UMShfX3ZhbHVlKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9UMT4NCmlubGluZSB2b2lkIF9Db25zdHJ1Y3QoX1QxKiBfX3ApIHsNCiAg
bmV3ICgodm9pZCopIF9fcCkgX1QxKCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
cyBfVHA+DQppbmxpbmUgdm9pZCBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikg
ew0KICBfX3BvaW50ZXItPn5fVHAoKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlcmF0b3I+DQp2b2lkDQpfX2Rlc3Ryb3lfYXV4KF9Gb3J3
YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qs
IF9fZmFsc2VfdHlwZSkNCnsNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz
dDsgKytfX2ZpcnN0KQ0KICAgIGRlc3Ryb3koJipfX2ZpcnN0KTsNCn0NCg0K
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQppbmxpbmUgdm9p
ZCBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRl
cmF0b3IsIF9fdHJ1ZV90eXBlKSB7fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPg0KaW5saW5lIHZvaWQNCl9fZGVz
dHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0
b3IgX19sYXN0LCBfVHAqKQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw
ZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3Rvcg0KICAgICAg
ICAgIF9Ucml2aWFsX2Rlc3RydWN0b3I7DQogIF9fZGVzdHJveV9hdXgoX19m
aXJzdCwgX19sYXN0LCBfVHJpdmlhbF9kZXN0cnVjdG9yKCkpOw0KfQ0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCmlubGluZSB2b2lk
IF9EZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJ
dGVyYXRvciBfX2xhc3QpIHsNCiAgX19kZXN0cm95KF9fZmlyc3QsIF9fbGFz
dCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KaW5saW5lIHZvaWQg
X0Rlc3Ryb3koY2hhciosIGNoYXIqKSB7fQ0KaW5saW5lIHZvaWQgX0Rlc3Ry
b3koaW50KiwgaW50Kikge30NCmlubGluZSB2b2lkIF9EZXN0cm95KGxvbmcq
LCBsb25nKikge30NCmlubGluZSB2b2lkIF9EZXN0cm95KGZsb2F0KiwgZmxv
YXQqKSB7fQ0KaW5saW5lIHZvaWQgX0Rlc3Ryb3koZG91YmxlKiwgZG91Ymxl
Kikge30NCmlubGluZSB2b2lkIF9EZXN0cm95KHdjaGFyX3QqLCB3Y2hhcl90
Kikge30NCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1Qy
Pg0KaW5saW5lIHZvaWQgY29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDIm
IF9fdmFsdWUpIHsNCiAgX0NvbnN0cnVjdChfX3AsIF9fdmFsdWUpOw0KfQ0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPg0KaW5saW5lIHZvaWQgY29uc3RydWN0
KF9UMSogX19wKSB7DQogIF9Db25zdHJ1Y3QoX19wKTsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9UcD4NCmlubGluZSB2b2lkIGRlc3Ryb3koX1RwKiBfX3Bv
aW50ZXIpIHsNCiAgX0Rlc3Ryb3koX19wb2ludGVyKTsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQppbmxpbmUgdm9pZCBkZXN0
cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv
ciBfX2xhc3QpIHsNCiAgX0Rlc3Ryb3koX19maXJzdCwgX19sYXN0KTsNCn0N
Cg0KfQ0KIyAyMyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX21lbW9yeS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlw
ZXMuaCIgMSAzDQojIDI0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAx
IDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF90ZW1wYnVmLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCg0KdGVt
cGxhdGUgPGNsYXNzIF9UcD4NCnBhaXI8X1RwKiwgcHRyZGlmZl90Pg0KX19n
ZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopDQp7
DQogIGlmIChfX2xlbiA+IHB0cmRpZmZfdCgyMTQ3NDgzNjQ3IC8gc2l6ZW9m
KF9UcCkpKQ0KICAgIF9fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHAp
Ow0KDQogIHdoaWxlIChfX2xlbiA+IDApIHsNCiAgICBfVHAqIF9fdG1wID0g
KF9UcCopIG1hbGxvYygoc2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOw0K
ICAgIGlmIChfX3RtcCAhPSAwKQ0KICAgICAgcmV0dXJuIHBhaXI8X1RwKiwg
cHRyZGlmZl90PihfX3RtcCwgX19sZW4pOw0KICAgIF9fbGVuIC89IDI7DQog
IH0NCg0KICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAqKTAs
IDApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5lIHBhaXI8
X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZm
X3QgX19sZW4pIHsNCiAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIo
X19sZW4sIChfVHAqKSAwKTsNCn0NCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxj
bGFzcyBfVHA+DQppbmxpbmUgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IGdldF90
ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKikgew0KICBy
ZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDAp
Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPg0Kdm9pZCByZXR1cm5fdGVt
cG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkgew0KICBmcmVlKF9fcCk7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+
DQpjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlciB7DQpwcml2YXRlOg0KICBwdHJk
aWZmX3QgX01fb3JpZ2luYWxfbGVuOw0KICBwdHJkaWZmX3QgX01fbGVuOw0K
ICBfVHAqIF9NX2J1ZmZlcjsNCg0KICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZl
cigpIHsNCiAgICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47DQogICAgX01f
YnVmZmVyID0gMDsNCg0KICAgIGlmIChfTV9sZW4gPiAocHRyZGlmZl90KSgy
MTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQ0KICAgICAgX01fbGVuID0gMjE0
NzQ4MzY0NyAvIHNpemVvZihfVHApOw0KDQogICAgd2hpbGUgKF9NX2xlbiA+
IDApIHsNCiAgICAgIF9NX2J1ZmZlciA9IChfVHAqKSBtYWxsb2MoX01fbGVu
ICogc2l6ZW9mKF9UcCkpOw0KICAgICAgaWYgKF9NX2J1ZmZlcikNCiAgICAg
ICAgYnJlYWs7DQogICAgICBfTV9sZW4gLz0gMjsNCiAgICB9DQogIH0NCg0K
ICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1
ZV90eXBlKSB7fQ0KICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0
IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUpIHsNCiAgICB1bmluaXRpYWxpemVk
X2ZpbGxfbihfTV9idWZmZXIsIF9NX2xlbiwgdmFsKTsNCiAgfQ0KDQpwdWJs
aWM6DQogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fbGVu
OyB9DQogIHB0cmRpZmZfdCByZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIF9NX29yaWdpbmFsX2xlbjsgfQ0KICBfVHAqIGJlZ2luKCkgeyByZXR1
cm4gX01fYnVmZmVyOyB9DQogIF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVm
ZmVyICsgX01fbGVuOyB9DQoNCiAgX1RlbXBvcmFyeV9idWZmZXIoX0Zvcndh
cmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkg
ew0KDQogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46
Omhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3INCiAgICAgICAgICAg
IF9Ucml2aWFsOw0KDQogICAgdHJ5IHsNCiAgICAgIF9NX2xlbiA9IDA7DQog
ICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2xlbik7DQogICAg
ICBfTV9hbGxvY2F0ZV9idWZmZXIoKTsNCiAgICAgIGlmIChfTV9sZW4gPiAw
KQ0KICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1Ry
aXZpYWwoKSk7DQogICAgfQ0KICAgIGNhdGNoKC4uLikgeyBmcmVlKF9NX2J1
ZmZlcik7IF9NX2J1ZmZlciA9IDA7IF9NX2xlbiA9IDA7IHRocm93OyB9Ow0K
ICB9DQoNCiAgfl9UZW1wb3JhcnlfYnVmZmVyKCkgew0KICAgIGRlc3Ryb3ko
X01fYnVmZmVyLCBfTV9idWZmZXIgKyBfTV9sZW4pOw0KICAgIGZyZWUoX01f
YnVmZmVyKTsNCiAgfQ0KDQpwcml2YXRlOg0KDQogIF9UZW1wb3JhcnlfYnVm
ZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30NCiAgdm9pZCBvcGVy
YXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQ0KfTsNCg0KDQoN
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLA0KICAgICAgICAg
IGNsYXNzIF9UcA0KICAgICAgICAgICAgICAgICAgICA9IHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQ0K
ICAgICAgICAgPg0Kc3RydWN0IHRlbXBvcmFyeV9idWZmZXIgOiBwdWJsaWMg
X1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPg0Kew0K
ICB0ZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwg
X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpDQogICAgOiBfVGVtcG9yYXJ5X2J1
ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+KF9fZmlyc3QsIF9fbGFzdCkg
e30NCiAgfnRlbXBvcmFyeV9idWZmZXIoKSB7fQ0KfTsNCg0KfQ0KIyAyNSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21l
bW9yeS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzDQojIDM0ICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5p
bml0aWFsaXplZC5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMw0KIyAzNSAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5p
dGlhbGl6ZWQuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCg0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJ
dGVyPg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2Nv
cHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
DQogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVz
dWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQ0K
ew0KICByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsN
Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3
YXJkSXRlcj4NCl9Gb3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2NvcHlf
YXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkNCnsN
CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7DQogIHRyeSB7DQog
ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19f
Y3VyKQ0KICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7DQog
ICAgcmV0dXJuIF9fY3VyOw0KICB9DQogIGNhdGNoKC4uLikgeyBfRGVzdHJv
eShfX3Jlc3VsdCwgX19jdXIpOyB0aHJvdzsgfTsNCn0NCg0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfVHA+DQppbmxpbmUgX0ZvcndhcmRJdGVyDQpfX3VuaW5pdGlhbGl6ZWRf
Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0K
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBf
VHAqKQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1Rw
Pjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsNCiAgcmV0dXJuIF9fdW5pbml0aWFs
aXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNf
UE9EKCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX0ZvcndhcmRJdGVyPg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KICB1bmlu
aXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X3Jlc3VsdCkNCnsNCiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19yZXN1bHQpKTsNCn0NCg0KaW5s
aW5lIGNoYXIqIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2Zp
cnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIqIF9fcmVzdWx0KSB7DQogIG1lbW1vdmUoX19y
ZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmlyc3QpOw0KICByZXR1cm4g
X19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7DQp9DQoNCmlubGluZSB3
Y2hhcl90Kg0KdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IHdjaGFyX3QqIF9f
Zmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwNCiAgICAgICAgICAgICAg
ICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkNCnsNCiAgbWVtbW92ZShfX3Jlc3Vs
dCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmly
c3QpKTsNCiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3Qp
Ow0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+DQpwYWlyPF9JbnB1dEl0ZXIs
IF9Gb3J3YXJkSXRlcj4NCl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0
SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAg
ICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsNCiAgX0ZvcndhcmRJ
dGVyIF9fY3VyID0gX19yZXN1bHQ7DQogIHRyeSB7DQogICAgZm9yICggOyBf
X2NvdW50ID4gMCA7IC0tX19jb3VudCwgKytfX2ZpcnN0LCArK19fY3VyKQ0K
ICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7DQogICAgcmV0
dXJuIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBf
X2N1cik7DQogIH0NCiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fcmVzdWx0
LCBfX2N1cik7IHRocm93OyB9Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0
ZXI+DQppbmxpbmUgcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJ
dGVyPg0KX191bmluaXRpYWxpemVkX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAg
ICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7DQogIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50Ow0KICBy
ZXR1cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPigN
CiAgICAgICAgICAgICAgICAgX19sYXN0LA0KICAgICAgICAgICAgICAgICB1
bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkp
Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Np
emUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4NCmlubGluZSBwYWlyPF9JbnB1dEl0
ZXIsIF9Gb3J3YXJkSXRlcj4NCl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lu
cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7DQogIHJldHVybiBf
X3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVz
dWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh
dG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+
DQppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+DQp1bmlu
aXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9f
Y291bnQsDQogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19y
ZXN1bHQpIHsNCiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19m
aXJzdCwgX19jb3VudCwgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0K
fQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X1RwPg0KaW5saW5lIHZvaWQNCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVl
X3R5cGUpDQp7DQogIGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOw0KfQ0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQp2
b2lkDQpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkNCnsNCiAg
X0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsNCiAgdHJ5IHsNCiAgICBm
b3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikNCiAgICAgIF9Db25z
dHJ1Y3QoJipfX2N1ciwgX194KTsNCiAgfQ0KICBjYXRjaCguLi4pIHsgX0Rl
c3Ryb3koX19maXJzdCwgX19jdXIpOyB0aHJvdzsgfTsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAx
Pg0KaW5saW5lIHZvaWQgX191bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9feCwgX1RwMSop
DQp7DQogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6
aXNfUE9EX3R5cGUgX0lzX1BPRDsNCiAgX191bmluaXRpYWxpemVkX2ZpbGxf
YXV4KF9fZmlyc3QsIF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOw0KDQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4NCmlu
bGluZSB2b2lkIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX194KQ0Kew0KICBfX3VuaW5pdGlhbGl6ZWRfZmlsbChf
X2ZpcnN0LCBfX2xhc3QsIF9feCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsN
Cn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9TaXplLCBjbGFzcyBfVHA+DQppbmxpbmUgX0ZvcndhcmRJdGVyDQpfX3Vu
aW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X1NpemUgX19uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQ0Kew0KICByZXR1cm4gZmlsbF9uKF9f
Zmlyc3QsIF9fbiwgX194KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4NCl9Gb3J3YXJkSXRl
cg0KX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpDQp7DQogIF9Gb3J3YXJk
SXRlciBfX2N1ciA9IF9fZmlyc3Q7DQogIHRyeSB7DQogICAgZm9yICggOyBf
X24gPiAwOyAtLV9fbiwgKytfX2N1cikNCiAgICAgIF9Db25zdHJ1Y3QoJipf
X2N1ciwgX194KTsNCiAgICByZXR1cm4gX19jdXI7DQogIH0NCiAgY2F0Y2go
Li4uKSB7IF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsgdGhyb3c7IH07DQp9
DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXpl
LCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+DQppbmxpbmUgX0ZvcndhcmRJdGVy
DQpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194LCBfVHAxKikNCnsNCiAgdHlw
ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlw
ZSBfSXNfUE9EOw0KICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9h
dXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7DQp9DQoNCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBf
VHA+DQppbmxpbmUgX0ZvcndhcmRJdGVyDQp1bmluaXRpYWxpemVkX2ZpbGxf
bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAm
IF9feCkNCnsNCiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX24oX19m
aXJzdCwgX19uLCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoj
IDIzMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0ZvcndhcmRJdGVy
Pg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2NvcHlf
Y29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m
aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkNCnsNCiAgX0Zvcndh
cmRJdGVyIF9fbWlkID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBf
X2xhc3QxLCBfX3Jlc3VsdCk7DQogIHRyeSB7DQogICAgcmV0dXJuIHVuaW5p
dGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOw0KICB9
DQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOyB0
aHJvdzsgfTsNCn0NCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfSW5wdXRJdGVyPg0KaW5saW5lIF9G
b3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2Fy
ZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QpDQp7DQogIHVuaW5pdGlhbGl6ZWRfZmlsbChfX3Jlc3VsdCwg
X19taWQsIF9feCk7DQogIHRyeSB7DQogICAgcmV0dXJuIHVuaW5pdGlhbGl6
ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsNCiAgfQ0KICBjYXRj
aCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7IH07
DQp9DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4NCmlubGluZSB2b2lkDQpfX3Vu
aW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9J
bnB1dEl0ZXIgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpDQp7
DQogIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHko
X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsNCiAgdHJ5IHsNCiAgICB1
bmluaXRpYWxpemVkX2ZpbGwoX19taWQyLCBfX2xhc3QyLCBfX3gpOw0KICB9
DQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsg
dGhyb3c7IH07DQp9DQoNCn0NCiMgMjYgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzDQojIDEgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9yYXdf
c3RvcmFnZV9pdGVyLmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIg
Mw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyYXRvciwgY2xhc3MgX1RwPg0KY2xhc3MgcmF3X3N0b3JhZ2VfaXRl
cmF0b3Igew0KcHJvdGVjdGVkOg0KICBfRm9yd2FyZEl0ZXJhdG9yIF9NX2l0
ZXI7DQpwdWJsaWM6DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7
DQogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYg
dm9pZCBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOw0KDQog
IGV4cGxpY2l0IHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9Gb3J3YXJkSXRlcmF0
b3IgX194KSA6IF9NX2l0ZXIoX194KSB7fQ0KICByYXdfc3RvcmFnZV9pdGVy
YXRvciYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0NCiAgcmF3X3N0
b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fZWxlbWVu
dCkgew0KICAgIGNvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVudCk7DQog
ICAgcmV0dXJuICp0aGlzOw0KICB9DQogIHJhd19zdG9yYWdlX2l0ZXJhdG9y
PF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4mIG9wZXJhdG9yKysoKSB7DQogICAg
KytfTV9pdGVyOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICByYXdfc3Rv
cmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+IG9wZXJhdG9y
KysoaW50KSB7DQogICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJ
dGVyYXRvciwgX1RwPiBfX3RtcCA9ICp0aGlzOw0KICAgICsrX01faXRlcjsN
CiAgICByZXR1cm4gX190bXA7DQogIH0NCn07DQoNCg0KfQ0KIyAyNyAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9y
eS5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogdGVtcGxhdGU8Y2xh
c3MgX1RwMT4gc3RydWN0IGF1dG9fcHRyX3JlZiB7DQogICBfVHAxKiBfTV9w
dHI7DQogICBhdXRvX3B0cl9yZWYoX1RwMSogX19wKSA6IF9NX3B0cihfX3Ap
IHt9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBjbGFzcyBhdXRvX3B0
ciB7DQpwcml2YXRlOg0KICBfVHAqIF9NX3B0cjsNCg0KcHVibGljOg0KICB0
eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7DQoNCiAgZXhwbGljaXQgYXV0b19w
dHIoX1RwKiBfX3AgPSAwKSB0aHJvdygpIDogX01fcHRyKF9fcCkge30NCiAg
YXV0b19wdHIoYXV0b19wdHImIF9fYSkgdGhyb3coKSA6IF9NX3B0cihfX2Eu
cmVsZWFzZSgpKSB7fQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhdXRv
X3B0cihhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpDQogICAgOiBfTV9w
dHIoX19hLnJlbGVhc2UoKSkge30NCg0KICBhdXRvX3B0ciYgb3BlcmF0b3I9
KGF1dG9fcHRyJiBfX2EpIHRocm93KCkgew0KICAgIHJlc2V0KF9fYS5yZWxl
YXNlKCkpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KDQogIHRlbXBsYXRl
IDxjbGFzcyBfVHAxPg0KICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1dG9fcHRy
PF9UcDE+JiBfX2EpIHRocm93KCkgew0KICAgIHJlc2V0KF9fYS5yZWxlYXNl
KCkpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KDQoNCg0KDQoNCiAgfmF1
dG9fcHRyKCkgeyBkZWxldGUgX01fcHRyOyB9DQoNCiAgX1RwJiBvcGVyYXRv
ciooKSBjb25zdCB0aHJvdygpIHsNCiAgICByZXR1cm4gKl9NX3B0cjsNCiAg
fQ0KICBfVHAqIG9wZXJhdG9yLT4oKSBjb25zdCB0aHJvdygpIHsNCiAgICBy
ZXR1cm4gX01fcHRyOw0KICB9DQogIF9UcCogZ2V0KCkgY29uc3QgdGhyb3co
KSB7DQogICAgcmV0dXJuIF9NX3B0cjsNCiAgfQ0KICBfVHAqIHJlbGVhc2Uo
KSB0aHJvdygpIHsNCiAgICBfVHAqIF9fdG1wID0gX01fcHRyOw0KICAgIF9N
X3B0ciA9IDA7DQogICAgcmV0dXJuIF9fdG1wOw0KICB9DQogIHZvaWQgcmVz
ZXQoX1RwKiBfX3AgPSAwKSB0aHJvdygpIHsNCiAgICBpZiAoX19wICE9IF9N
X3B0cikgew0KICAgICAgZGVsZXRlIF9NX3B0cjsNCiAgICAgIF9NX3B0ciA9
IF9fcDsNCiAgICB9DQogIH0NCg0KDQoNCg0KDQpwdWJsaWM6DQogIGF1dG9f
cHRyKGF1dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB0aHJvdygpDQogICAgOiBf
TV9wdHIoX19yZWYuX01fcHRyKSB7fQ0KDQogIGF1dG9fcHRyJiBvcGVyYXRv
cj0oYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93KCkgew0KICAgIGlm
IChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpIHsNCiAgICAgIGRlbGV0
ZSBfTV9wdHI7DQogICAgICBfTV9wdHIgPSBfX3JlZi5fTV9wdHI7DQogICAg
fQ0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFz
cyBfVHAxPiBvcGVyYXRvciBhdXRvX3B0cl9yZWY8X1RwMT4oKSB0aHJvdygp
DQogICAgeyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcD4odGhpcy0+cmVsZWFz
ZSgpKTsgfQ0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gb3BlcmF0b3IgYXV0
b19wdHI8X1RwMT4oKSB0aHJvdygpDQogICAgeyByZXR1cm4gYXV0b19wdHI8
X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQ0KfTsNCg0KfQ0KIyA0NCAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmlu
Zy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
LXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzDQojIDQ1ICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIg
Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfaW9zZndkLmgiIDEgMw0KIyA0NiAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMNCiMgMSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNf
c3RyaW5nLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMNCg0KIyAxICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFy
aXMyLjcvYml0cy9hdG9taWNpdHkuaCIgMSAzDQojIDMzICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
Yml0cy9hdG9taWNpdHkuaCIgMw0KdHlwZWRlZiBpbnQgX0F0b21pY193b3Jk
Ow0KDQpzdGF0aWMgaW50DQpfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykp
DQpfX2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCog
X19tZW0sIGludCBfX3ZhbCkNCnsNCiAgc3RhdGljIHVuc2lnbmVkIGNoYXIg
X19sb2NrOw0KICBfQXRvbWljX3dvcmQgX19yZXN1bHQsIF9fdG1wOw0KDQog
IF9fYXNtX18gX192b2xhdGlsZV9fKCIxOglsZHN0dWIJWyUxXSwgJTBcblx0
Ig0KICAgICAgICAgICAgICAgICAgICAgICAiCWNtcAklMCwgMFxuXHQiDQog
ICAgICAgICAgICAgICAgICAgICAgICIJYm5lCTFiXG5cdCINCiAgICAgICAg
ICAgICAgICAgICAgICAgIgkgbm9wIg0KICAgICAgICAgICAgICAgICAgICAg
ICA6ICI9JnIiIChfX3RtcCkNCiAgICAgICAgICAgICAgICAgICAgICAgOiAi
ciIgKCZfX2xvY2spDQogICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9y
eSIpOw0KICBfX3Jlc3VsdCA9ICpfX21lbTsNCiAgKl9fbWVtICs9IF9fdmFs
Ow0KICBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RiCSUlZzAsIFslMF0iDQog
ICAgICAgICAgICAgICAgICAgICAgIDoNCiAgICAgICAgICAgICAgICAgICAg
ICAgOiAiciIgKCZfX2xvY2spDQogICAgICAgICAgICAgICAgICAgICAgIDog
Im1lbW9yeSIpOw0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCnN0YXRpYyB2
b2lkDQpfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpDQpfX2F0b21pY19h
ZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkN
CnsNCiAgc3RhdGljIHVuc2lnbmVkIGNoYXIgX19sb2NrOw0KICBfQXRvbWlj
X3dvcmQgX190bXA7DQoNCiAgX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6CWxk
c3R1YglbJTFdLCAlMFxuXHQiDQogICAgICAgICAgICAgICAgICAgICAgICIJ
Y21wCSUwLCAwXG5cdCINCiAgICAgICAgICAgICAgICAgICAgICAgIglibmUJ
MWJcblx0Ig0KICAgICAgICAgICAgICAgICAgICAgICAiCSBub3AiDQogICAg
ICAgICAgICAgICAgICAgICAgIDogIj0mciIgKF9fdG1wKQ0KICAgICAgICAg
ICAgICAgICAgICAgICA6ICJyIiAoJl9fbG9jaykNCiAgICAgICAgICAgICAg
ICAgICAgICAgOiAibWVtb3J5Iik7DQogICpfX21lbSArPSBfX3ZhbDsNCiAg
X19hc21fXyBfX3ZvbGF0aWxlX18oInN0YgklJWcwLCBbJTBdIg0KICAgICAg
ICAgICAgICAgICAgICAgICA6DQogICAgICAgICAgICAgICAgICAgICAgIDog
InIiICgmX19sb2NrKQ0KICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1v
cnkiKTsNCn0NCg0Kc3RhdGljIGludA0KX19hdHRyaWJ1dGVfXyAoKF9fdW51
c2VkX18pKQ0KX19jb21wYXJlX2FuZF9zd2FwICh2b2xhdGlsZSBsb25nICpf
X3AsIGxvbmcgX19vbGR2YWwsIGxvbmcgX19uZXd2YWwpDQp7DQogIHN0YXRp
YyB1bnNpZ25lZCBjaGFyIF9fbG9jazsNCiAgbG9uZyBfX3JldCwgX190bXA7
DQoNCiAgX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6CWxkc3R1YglbJTFdLCAl
MFxuXHQiDQogICAgICAgICAgICAgICAgICAgICAgICIJY21wCSUwLCAwXG5c
dCINCiAgICAgICAgICAgICAgICAgICAgICAgIglibmUJMWJcblx0Ig0KICAg
ICAgICAgICAgICAgICAgICAgICAiCSBub3AiDQogICAgICAgICAgICAgICAg
ICAgICAgIDogIj0mciIgKF9fdG1wKQ0KICAgICAgICAgICAgICAgICAgICAg
ICA6ICJyIiAoJl9fbG9jaykNCiAgICAgICAgICAgICAgICAgICAgICAgOiAi
bWVtb3J5Iik7DQogIGlmICgqX19wICE9IF9fb2xkdmFsKQ0KICAgIF9fcmV0
ID0gMDsNCiAgZWxzZQ0KICAgIHsNCiAgICAgICpfX3AgPSBfX25ld3ZhbDsN
CiAgICAgIF9fcmV0ID0gMTsNCiAgICB9DQogIF9fYXNtX18gX192b2xhdGls
ZV9fKCJzdGIJJSVnMCwgWyUwXSINCiAgICAgICAgICAgICAgICAgICAgICAg
Og0KICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAoJl9fbG9jaykNCiAg
ICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7DQoNCiAgcmV0dXJu
IF9fcmV0Ow0KfQ0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDIgMw0KDQpuYW1lc3BhY2Ug
c3RkDQp7DQojIDgzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvYml0cy9iYXNpY19zdHJpbmcuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4N
CiAgICBjbGFzcyBiYXNpY19zdHJpbmcNCiAgICB7DQoNCiAgICBwdWJsaWM6
DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBl
Ow0KICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7DQogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlw
ZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNl
X3R5cGUgZGlmZmVyZW5jZV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfQWxsb2M6OnJlZmVyZW5jZSByZWZlcmVuY2U7DQogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVy
ZW5jZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2ludGVy
IHBvaW50ZXI7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29u
c3RfcG9pbnRlciBjb25zdF9wb2ludGVyOw0KICAgICAgdHlwZWRlZiBfX25v
cm1hbF9pdGVyYXRvcjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9y
Ow0KICAgICAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2lu
dGVyLCBiYXNpY19zdHJpbmc+IGNvbnN0X2l0ZXJhdG9yOw0KICAgICAgdHlw
ZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yOw0KICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh
dG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOw0KDQogICAgcHJpdmF0
ZToNCiMgMTE4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9iYXNpY19zdHJpbmcuaCIgMw0KICAgICAgc3RydWN0IF9SZXANCiAg
ICAgIHsNCg0KICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVi
aW5kPGNoYXI+OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9jOw0KIyAxMzYgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0
cmluZy5oIiAzDQogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgX1Nf
bWF4X3NpemU7DQogICAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVy
bWluYWw7DQoNCiAgICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsNCiAgICAg
ICAgc2l6ZV90eXBlIF9NX2NhcGFjaXR5Ow0KICAgICAgICBfQXRvbWljX3dv
cmQgX01fcmVmZXJlbmNlczsNCg0KICAgICAgICBib29sDQogICAgICAgIF9N
X2lzX2xlYWtlZCgpIGNvbnN0DQogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVy
ZW5jZXMgPCAwOyB9DQoNCiAgICAgICAgYm9vbA0KICAgICAgICBfTV9pc19z
aGFyZWQoKSBjb25zdA0KICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2Vz
ID4gMDsgfQ0KDQogICAgICAgIHZvaWQNCiAgICAgICAgX01fc2V0X2xlYWtl
ZCgpDQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IC0xOyB9DQoNCiAgICAg
ICAgdm9pZA0KICAgICAgICBfTV9zZXRfc2hhcmFibGUoKQ0KICAgICAgICB7
IF9NX3JlZmVyZW5jZXMgPSAwOyB9DQoNCiAgICAgICAgX0NoYXJUKg0KICAg
ICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBy
ZWludGVycHJldF9jYXN0PF9DaGFyVCo+ICh0aGlzICsgMSk7IH0NCg0KICAg
ICAgICBfQ2hhclQmDQogICAgICAgIG9wZXJhdG9yW10oc2l6ZV90IF9fcykg
dGhyb3coKQ0KICAgICAgICB7IHJldHVybiBfTV9yZWZkYXRhKCkgW19fc107
IH0NCg0KICAgICAgICBfQ2hhclQqDQogICAgICAgIF9NX2dyYWIoY29uc3Qg
X0FsbG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikNCiAg
ICAgICAgeyByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9
PSBfX2FsbG9jMikgPw0KICAgICAgICAgICAgX01fcmVmY29weSgpIDogX01f
Y2xvbmUoX19hbGxvYzEpOyB9DQoNCg0KICAgICAgICBzdGF0aWMgX1JlcCoN
CiAgICAgICAgX1NfY3JlYXRlKHNpemVfdCwgY29uc3QgX0FsbG9jJik7DQoN
CiAgICAgICAgdm9pZA0KICAgICAgICBfTV9kaXNwb3NlKGNvbnN0IF9BbGxv
YyYgX19hKQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKF9fZXhjaGFuZ2Vf
YW5kX2FkZCgmX01fcmVmZXJlbmNlcywgLTEpIDw9IDApDQogICAgICAgICAg
ICBfTV9kZXN0cm95KF9fYSk7DQogICAgICAgIH0NCg0KICAgICAgICB2b2lk
DQogICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsN
Cg0KICAgICAgICBfQ2hhclQqDQogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJv
dygpDQogICAgICAgIHsNCiAgICAgICAgICBfX2F0b21pY19hZGQoJl9NX3Jl
ZmVyZW5jZXMsIDEpOw0KICAgICAgICAgIHJldHVybiBfTV9yZWZkYXRhKCk7
DQogICAgICAgIH0NCg0KICAgICAgICBfQ2hhclQqDQogICAgICAgIF9NX2Ns
b25lKGNvbnN0IF9BbGxvYyYsIHNpemVfdHlwZSBfX3JlcyA9IDApOw0KIyAy
MDggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jh
c2ljX3N0cmluZy5oIiAzDQogICAgICAgIGlubGluZSBzdGF0aWMgYm9vbA0K
ICAgICAgICBfU19leGNlc3Nfc2xvcChzaXplX3QsIHNpemVfdCk7DQoNCiAg
ICAgIH07DQoNCg0KICAgICAgc3RydWN0IF9BbGxvY19oaWRlciA6IF9BbGxv
Yw0KICAgICAgew0KICAgICAgICBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX2Rh
dCwgY29uc3QgX0FsbG9jJiBfX2EpDQogICAgICAgIDogX0FsbG9jKF9fYSks
IF9NX3AoX19kYXQpIHsgfQ0KDQogICAgICAgIF9DaGFyVCogX01fcDsNCiAg
ICAgIH07DQoNCiAgICBwdWJsaWM6DQoNCg0KDQogICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0x
KTsNCg0KICAgIHByaXZhdGU6DQoNCiAgICAgIG11dGFibGUgX0FsbG9jX2hp
ZGVyIF9NX2RhdGFwbHVzOw0KDQoNCg0KICAgICAgc3RhdGljIHNpemVfdHlw
ZSBfU19lbXB0eV9yZXBfc3RvcmFnZVsoc2l6ZW9mKF9SZXApICsgc2l6ZW9m
KF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXpl
X3R5cGUpXTsNCg0KICAgICAgX0NoYXJUKg0KICAgICAgX01fZGF0YSgpIGNv
bnN0DQogICAgICB7IHJldHVybiBfTV9kYXRhcGx1cy5fTV9wOyB9DQoNCiAg
ICAgIF9DaGFyVCoNCiAgICAgIF9NX2RhdGEoX0NoYXJUKiBfX3ApDQogICAg
ICB7IHJldHVybiAoX01fZGF0YXBsdXMuX01fcCA9IF9fcCk7IH0NCg0KICAg
ICAgX1JlcCoNCiAgICAgIF9NX3JlcCgpIGNvbnN0DQogICAgICB7IHJldHVy
biAmKChyZWludGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFd
KTsgfQ0KDQoNCg0KICAgICAgaXRlcmF0b3INCiAgICAgIF9NX2liZWdpbigp
IGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7IH0NCg0KICAg
ICAgaXRlcmF0b3INCiAgICAgIF9NX2llbmQoKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9DQoNCiAgICAg
IHZvaWQNCiAgICAgIF9NX2xlYWsoKQ0KICAgICAgew0KICAgICAgICBpZiAo
IV9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkNCiAgICAgICAgICBfTV9sZWFr
X2hhcmQoKTsNCiAgICAgIH0NCg0KICAgICAgaXRlcmF0b3INCiAgICAgIF9N
X2NoZWNrKHNpemVfdHlwZSBfX3BvcykgY29uc3QNCiAgICAgIHsNCiAgICAg
ICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQ0KICAgICAgICAgIF9fdGhy
b3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Ol9NX2NoZWNrIik7DQog
ICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOw0KICAgICAgfQ0K
DQoNCiAgICAgIGl0ZXJhdG9yDQogICAgICBfTV9mb2xkKHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBjb25zdA0KICAgICAgew0KICAgICAg
ICBib29sIF9fdGVzdG9mZiA9IF9fb2ZmIDwgdGhpcy0+c2l6ZSgpIC0gX19w
b3M7DQogICAgICAgIHNpemVfdHlwZSBfX25ld29mZiA9IF9fdGVzdG9mZiA/
IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7DQogICAgICAgIHJldHVy
biAoX01faWJlZ2luKCkgKyBfX3BvcyArIF9fbmV3b2ZmKTsNCiAgICAgIH0N
Cg0KDQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4NCiAgICAg
ICAgc3RhdGljIHZvaWQNCiAgICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQq
IF9fcCwgX0l0ZXJhdG9yIF9fazEsIF9JdGVyYXRvciBfX2syKQ0KICAgICAg
ICB7DQogICAgICAgICAgZm9yICg7IF9fazEgIT0gX19rMjsgKytfX2sxLCAr
K19fcCkNCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcCwg
Kl9fazEpOw0KICAgICAgICB9DQoNCiAgICAgIHN0YXRpYyB2b2lkDQogICAg
ICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBfX2sxLCBp
dGVyYXRvciBfX2syKQ0KICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwgX19r
MS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQ0KDQogICAgICBzdGF0aWMgdm9p
ZA0KICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3RfaXRl
cmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikNCiAgICAgIHsgX1Nf
Y29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0N
Cg0KICAgICAgc3RhdGljIHZvaWQNCiAgICAgIF9TX2NvcHlfY2hhcnMoX0No
YXJUKiBfX3AsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQ0KICAgICAg
eyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsg
fQ0KDQogICAgICBzdGF0aWMgdm9pZA0KICAgICAgX1NfY29weV9jaGFycyhf
Q2hhclQqIF9fcCwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQq
IF9fazIpDQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwg
X19rMiAtIF9fazEpOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX211dGF0
ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlw
ZSBfX2xlbjIpOw0KDQogICAgICB2b2lkDQogICAgICBfTV9sZWFrX2hhcmQo
KTsNCg0KICAgICAgc3RhdGljIF9SZXAmDQogICAgICBfU19lbXB0eV9yZXAo
KQ0KICAgICAgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+KCZf
U19lbXB0eV9yZXBfc3RvcmFnZSk7IH0NCg0KICAgIHB1YmxpYzoNCg0KDQoN
Cg0KICAgICAgaW5saW5lDQogICAgICBiYXNpY19zdHJpbmcoKTsNCg0KICAg
ICAgZXhwbGljaXQNCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2Mm
IF9fYSk7DQoNCg0KICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIpOw0KICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywNCiAgICAgICAgICAg
ICAgICAgICBzaXplX3R5cGUgX19uID0gbnBvcyk7DQogICAgICBiYXNpY19z
dHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f
cG9zLA0KICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0
IF9BbGxvYyYgX19hKTsNCg0KICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9D
aGFyVCogX19zLCBzaXplX3R5cGUgX19uLA0KICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOw0KICAgICAgYmFzaWNf
c3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSA9
IF9BbGxvYygpKTsNCiAgICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19u
LCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsN
Cg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogICAg
ICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZ2luLCBfSW5w
dXRJdGVyYXRvciBfX2VuZCwNCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOw0KDQogICAgICB+YmFzaWNfc3Ry
aW5nKCkNCiAgICAgIHsgX01fcmVwKCktPl9NX2Rpc3Bvc2UodGhpcy0+Z2V0
X2FsbG9jYXRvcigpKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAg
ICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1
cm4gdGhpcy0+YXNzaWduKF9fc3RyKTsgfQ0KDQogICAgICBiYXNpY19zdHJp
bmcmDQogICAgICBvcGVyYXRvcj0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0
dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmlu
ZyYNCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlz
LT5hc3NpZ24oMSwgX19jKTsgfQ0KDQoNCiAgICAgIGl0ZXJhdG9yDQogICAg
ICBiZWdpbigpDQogICAgICB7DQogICAgICAgIF9NX2xlYWsoKTsNCiAgICAg
ICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7DQogICAgICB9DQoNCiAg
ICAgIGNvbnN0X2l0ZXJhdG9yDQogICAgICBiZWdpbigpIGNvbnN0DQogICAg
ICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9DQoNCiAg
ICAgIGl0ZXJhdG9yDQogICAgICBlbmQoKQ0KICAgICAgew0KICAgICAgICAg
X01fbGVhaygpOw0KICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEo
KSArIHRoaXMtPnNpemUoKSk7DQogICAgICB9DQoNCiAgICAgIGNvbnN0X2l0
ZXJhdG9yDQogICAgICBlbmQoKSBjb25zdA0KICAgICAgeyByZXR1cm4gY29u
c3RfaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQ0KDQog
ICAgICByZXZlcnNlX2l0ZXJhdG9yDQogICAgICByYmVnaW4oKQ0KICAgICAg
eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0NCg0K
ICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcg0KICAgICAgcmJlZ2luKCkg
Y29uc3QNCiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io
dGhpcy0+ZW5kKCkpOyB9DQoNCiAgICAgIHJldmVyc2VfaXRlcmF0b3INCiAg
ICAgIHJlbmQoKQ0KICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0
aGlzLT5iZWdpbigpKTsgfQ0KDQogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yDQogICAgICByZW5kKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0NCg0KICAgIHB1
YmxpYzoNCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBzaXplKCkgY29uc3Qg
eyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQ0KDQogICAgICBzaXpl
X3R5cGUNCiAgICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgp
LT5fTV9sZW5ndGg7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBtYXhf
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9TX21heF9zaXplOyB9DQoN
CiAgICAgIHZvaWQNCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hh
clQgX19jKTsNCg0KICAgICAgdm9pZA0KICAgICAgcmVzaXplKHNpemVfdHlw
ZSBfX24pIHsgdGhpcy0+cmVzaXplKF9fbiwgX0NoYXJUKCkpOyB9DQoNCiAg
ICAgIHNpemVfdHlwZQ0KICAgICAgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVy
biBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0NCg0KICAgICAgdm9pZA0KICAg
ICAgcmVzZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJnID0gMCk7DQoNCiAgICAg
IHZvaWQNCiAgICAgIGNsZWFyKCkgeyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6
ZSgpLCAwKTsgfQ0KDQogICAgICBib29sDQogICAgICBlbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9DQoNCg0KICAgICAgY29u
c3RfcmVmZXJlbmNlDQogICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19w
b3MpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9kYXRhKClbX19wb3NdOyB9
DQoNCiAgICAgIHJlZmVyZW5jZQ0KICAgICAgb3BlcmF0b3JbXShzaXplX3R5
cGUgX19wb3MpDQogICAgICB7DQogICAgICAgIF9NX2xlYWsoKTsNCiAgICAg
ICAgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107DQogICAgICB9DQoNCiAgICAg
IGNvbnN0X3JlZmVyZW5jZQ0KICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29u
c3QNCiAgICAgIHsNCiAgICAgICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkp
DQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmlu
Zzo6YXQiKTsNCiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOw0KICAg
ICAgfQ0KDQogICAgICByZWZlcmVuY2UNCiAgICAgIGF0KHNpemVfdHlwZSBf
X24pDQogICAgICB7DQogICAgICAgIGlmIChfX24gPj0gc2l6ZSgpKQ0KICAg
ICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0
Iik7DQogICAgICAgIF9NX2xlYWsoKTsNCiAgICAgICAgcmV0dXJuIF9NX2Rh
dGEoKVtfX25dOw0KICAgICAgfQ0KDQoNCiAgICAgIGJhc2ljX3N0cmluZyYN
CiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikg
eyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQ0KDQogICAgICBiYXNp
Y19zdHJpbmcmDQogICAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19z
KSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zKTsgfQ0KDQogICAgICBiYXNp
Y19zdHJpbmcmDQogICAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpIHsgcmV0
dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7IH0NCg0KICAg
ICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIpOw0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBh
cHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19uKTsNCg0KICAgICAgYmFzaWNfc3RyaW5nJg0K
ICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u
KTsNCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXBwZW5kKGNvbnN0
IF9DaGFyVCogX19zKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9f
cywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQ0KDQogICAgICBiYXNp
Y19zdHJpbmcmDQogICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJU
IF9fYyk7DQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
Pg0KICAgICAgICBiYXNpY19zdHJpbmcmDQogICAgICAgIGFwcGVuZChfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpDQog
ICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9p
ZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0NCg0KICAgICAgdm9pZA0KICAg
ICAgcHVzaF9iYWNrKF9DaGFyVCBfX2MpDQogICAgICB7IHRoaXMtPnJlcGxh
Y2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7IH0NCg0KICAgICAg
YmFzaWNfc3RyaW5nJg0KICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmlu
ZyYgX19zdHIpOw0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBhc3Np
Z24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9z
LCBzaXplX3R5cGUgX19uKQ0KICAgICAgew0KICAgICAgICByZXR1cm4gdGhp
cy0+YXNzaWduKF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwgX19zdHIuX01fZm9s
ZChfX3BvcywgX19uKSk7DQogICAgICB9DQoNCiAgICAgIGJhc2ljX3N0cmlu
ZyYNCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fbikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIF9fcyAr
IF9fbik7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXNzaWdu
KGNvbnN0IF9DaGFyVCogX19zKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+YXNz
aWduKF9fcywgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQ0K
DQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBhc3NpZ24oc2l6ZV90eXBl
IF9fbiwgX0NoYXJUIF9fYykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxh
Y2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOyB9DQoNCiAg
ICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgICAgICBi
YXNpY19zdHJpbmcmDQogICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBf
X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpDQogICAgICAgIHsgcmV0
dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19m
aXJzdCwgX19sYXN0KTsgfQ0KDQogICAgICB2b2lkDQogICAgICBpbnNlcnQo
aXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQ0KICAg
ICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0NCg0K
ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogICAgICAg
IHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0SXRlcmF0b3IgX19i
ZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQ0KICAgICAgICB7IHRoaXMtPnJl
cGxhY2UoX19wLCBfX3AsIF9fYmVnLCBfX2VuZCk7IH0NCg0KICAgICAgYmFz
aWNfc3RyaW5nJg0KICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAgICB7DQogICAgICAgIGl0
ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7DQogICAgICAgIHRoaXMt
PnJlcGxhY2UoX19wLCBfX3AsIF9fc3RyLl9NX2liZWdpbigpLCBfX3N0ci5f
TV9pZW5kKCkpOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoN
CiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGluc2VydChzaXplX3R5cGUg
X19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLA0KICAgICAgICAg
ICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pDQogICAgICB7
DQogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7DQog
ICAgICAgIHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fc3RyLl9NX2NoZWNr
KF9fcG9zMiksDQogICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9s
ZChfX3BvczIsIF9fbikpOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAg
ICB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGluc2VydChzaXpl
X3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u
KQ0KICAgICAgew0KICAgICAgICBpdGVyYXRvciBfX3AgPSBfTV9jaGVjayhf
X3Bvcyk7DQogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fcywg
X19zICsgX19uKTsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0K
DQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBpbnNlcnQoc2l6ZV90eXBl
IF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykNCiAgICAgIHsgcmV0dXJuIHRo
aXMtPmluc2VydChfX3BvcywgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
cykpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGluc2VydChz
aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpDQog
ICAgICB7DQogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3Bvcyks
IF9fbiwgX19jKTsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0K
DQogICAgICBpdGVyYXRvcg0KICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwg
X0NoYXJUIF9fYyA9IF9DaGFyVCgpKQ0KICAgICAgew0KICAgICAgICBzaXpl
X3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVnaW4oKTsNCiAgICAgICAgdGhp
cy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgc2l6ZV90eXBlKDEpLCBfX2Mp
Ow0KICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOw0KICAgICAg
ICByZXR1cm4gdGhpcy0+X01faWJlZ2luKCkgKyBfX3BvczsNCiAgICAgIH0N
Cg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgZXJhc2Uoc2l6ZV90eXBl
IF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpDQogICAgICB7DQog
ICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwg
X01fZm9sZChfX3BvcywgX19uKSwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX01fZGF0YSgpLCBfTV9kYXRhKCkpOw0KICAgICAgfQ0KDQogICAg
ICBpdGVyYXRvcg0KICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikN
CiAgICAgIHsNCiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fcG9zaXRpb24g
LSBfTV9pYmVnaW4oKTsNCiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0
aW9uLCBfX3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOw0K
ICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOw0KICAgICAgICBy
ZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7DQogICAgICB9DQoNCiAgICAgIGl0
ZXJhdG9yDQogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRv
ciBfX2xhc3QpDQogICAgICB7DQogICAgICAgIHNpemVfdHlwZSBfX2kgPSBf
X2ZpcnN0IC0gX01faWJlZ2luKCk7DQogICAgICAgIHRoaXMtPnJlcGxhY2Uo
X19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7DQogICAg
ICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7DQogICAgICAgcmV0dXJu
IF9NX2liZWdpbigpICsgX19pOw0KICAgICAgfQ0KDQogICAgICBiYXNpY19z
dHJpbmcmDQogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90
eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikNCiAgICAgIHsN
CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3Mp
LCBfTV9mb2xkKF9fcG9zLCBfX24pLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19zdHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOw0KICAgICAg
fQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBsYWNlKHNpemVf
dHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJp
bmcmIF9fc3RyLA0KICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBz
aXplX3R5cGUgX19uMik7DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAg
IHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29u
c3QgX0NoYXJUKiBfX3MsDQogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24y
KQ0KICAgICAgew0KICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9j
aGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIpOw0KICAgICAg
fQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBsYWNlKHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19z
KQ0KICAgICAgew0KICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9j
aGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIHRyYWl0c190eXBlOjps
ZW5ndGgoX19zKSk7DQogICAgICB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYN
CiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
MSwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpDQogICAgICB7DQogICAg
ICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01f
Zm9sZChfX3BvcywgX19uMSksIF9fbjIsIF9fYyk7DQogICAgICB9DQoNCiAg
ICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19p
MSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikN
CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19z
dHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOyB9DQoNCiAgICAgIGJhc2ljX3N0
cmluZyYNCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig
X19pMiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFy
VCogX19zLCBzaXplX3R5cGUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+
cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MsIF9fcyArIF9fbik7IH0NCg0KICAg
ICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kx
LCBpdGVyYXRvciBfX2kyLCBjb25zdCBfQ2hhclQqIF9fcykNCiAgICAgIHsg
cmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3MgKyB0cmFpdHNfdHlwZTo6bGVu
Z3RoKF9fcykpOyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIHJl
cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBl
IF9fbiwgX0NoYXJUIF9fYyk7DQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPg0KICAgICAgICBiYXNpY19zdHJpbmcmDQogICAgICAg
IHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwNCiAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRv
ciBfX2syKQ0KICAgICAgICB7IHJldHVybiBfTV9yZXBsYWNlKF9faTEsIF9f
aTIsIF9fazEsIF9fazIsDQogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnko
KSk7IH0NCg0KICAgIHByaXZhdGU6DQogICAgICB0ZW1wbGF0ZTxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4NCiAgICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAg
ICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9J
bnB1dEl0ZXJhdG9yIF9fazEsDQogICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcmF0b3IgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0KICAgICAg
dGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXJhdG9yPg0KICAgICAgICBiYXNpY19z
dHJpbmcmDQogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRl
cmF0b3IgX19pMiwgX0Z3ZEl0ZXJhdG9yIF9fazEsDQogICAgICAgICAgICAg
ICAgICAgX0Z3ZEl0ZXJhdG9yIF9fazIsIGZvcndhcmRfaXRlcmF0b3JfdGFn
KTsNCg0KDQoNCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+DQogICAg
ICAgIHN0YXRpYyBfQ2hhclQqDQogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgo
X0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBf
X2EsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQ0K
ICAgICAgICB7DQogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0luSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7DQog
ICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9f
YSwgX1RhZygpKTsNCiAgICAgICAgfQ0KDQogICAgICB0ZW1wbGF0ZTxjbGFz
cyBfSW5JdGVyPg0KICAgICAgICBzdGF0aWMgX0NoYXJUKg0KICAgICAgICBf
U19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQs
IGNvbnN0IF9BbGxvYyYgX19hLA0KICAgICAgICAgICAgICAgICAgICAgICAg
IF9fdHJ1ZV90eXBlKQ0KICAgICAgICB7DQogICAgICAgICAgcmV0dXJuIF9T
X2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZhbHVl
X3R5cGU+KF9fZW5kKSwgX19hKTsNCiAgICAgICAgfQ0KDQogICAgICB0ZW1w
bGF0ZTxjbGFzcyBfSW5JdGVyPg0KICAgICAgICBzdGF0aWMgX0NoYXJUKg0K
ICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBf
X2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpDQogICAgICAgIHsNCiAgICAgICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50
ZWdyYWwgX0ludGVncmFsOw0KICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1
Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBfSW50ZWdyYWwoKSk7DQogICAg
ICAgIH0NCg0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPg0KICAg
ICAgICBzdGF0aWMgX0NoYXJUKg0KICAgICAgICAgX1NfY29uc3RydWN0KF9J
bkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19h
LA0KICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7
DQoNCg0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4NCiAgICAg
ICAgc3RhdGljIF9DaGFyVCoNCiAgICAgICAgX1NfY29uc3RydWN0KF9Gd2RJ
dGVyIF9fZW5kLCBfRndkSXRlciBfX2JlZywgY29uc3QgX0FsbG9jJiBfX2Es
DQogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7
DQoNCiAgICAgIHN0YXRpYyBfQ2hhclQqDQogICAgICBfU19jb25zdHJ1Y3Qo
c2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9f
YSk7DQoNCiAgICBwdWJsaWM6DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAg
Y29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9f
cG9zID0gMCkgY29uc3Q7DQoNCiAgICAgIHZvaWQNCiAgICAgIHN3YXAoYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zKTsNCg0K
DQogICAgICBjb25zdCBfQ2hhclQqDQogICAgICBjX3N0cigpIGNvbnN0DQog
ICAgICB7DQoNCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUo
KTsNCiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKClbX19u
XSwgX1JlcDo6X1NfdGVybWluYWwpOw0KICAgICAgICByZXR1cm4gX01fZGF0
YSgpOw0KICAgICAgfQ0KDQogICAgICBjb25zdCBfQ2hhclQqDQogICAgICBk
YXRhKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YSgpOyB9DQoNCiAgICAgIGFs
bG9jYXRvcl90eXBlDQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gX01fZGF0YXBsdXM7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAg
ICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24pIGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAg
IGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f
cG9zID0gMCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19z
dHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBz
aXplX3R5cGUNCiAgICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX3BvcyA9IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5m
aW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0N
Cg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kKF9DaGFyVCBfX2MsIHNp
emVfdHlwZSBfX3BvcyA9IDApIGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUN
CiAgICAgIHJmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVf
dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlz
LT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9
DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgcmZpbmQoY29uc3QgX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7
DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgcmZpbmQoY29uc3QgX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0DQogICAgICB7
IHJldHVybiB0aGlzLT5yZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6
bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgcmZp
bmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7
DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9vZihjb25z
dCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBj
b25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3N0
ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9DQoNCiAgICAgIHNp
emVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsNCg0K
ICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9D
aGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdA0KICAgICAg
eyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3MsIF9fcG9zLCB0cmFp
dHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0K
ICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w
b3MgPSAwKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX2Ms
IF9fcG9zKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfbGFz
dF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19w
b3MgPSBucG9zKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9s
YXN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0N
Cg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikg
Y29uc3Q7DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9sYXN0X29m
KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBj
b25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywg
X19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0NCg0KICAgICAg
c2l6ZV90eXBlDQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6
ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRo
aXMtPnJmaW5kKF9fYywgX19wb3MpOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0K
ICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QNCiAgICAgIHsgcmV0
dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19w
b3MsIF9fc3RyLnNpemUoKSk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAg
ICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fcG9zLA0KICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBl
IF9fbikgY29uc3Q7DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9m
aXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
cyA9IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0
X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykp
OyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9ub3Rf
b2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7DQoN
CiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9sYXN0X25vdF9vZihjb25z
dCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9z
KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25vdF9v
ZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9DQoNCiAg
ICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLA0KICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsNCiAgICAgIHNpemVfdHlw
ZQ0KICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywg
c2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QNCiAgICAgIHsgcmV0dXJu
IHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5
cGU6Omxlbmd0aChfX3MpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAg
IGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9z
ID0gbnBvcykgY29uc3Q7DQoNCiAgICAgIGJhc2ljX3N0cmluZw0KICAgICAg
c3Vic3RyKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBu
cG9zKSBjb25zdA0KICAgICAgew0KICAgICAgICBpZiAoX19wb3MgPiB0aGlz
LT5zaXplKCkpDQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh
c2ljX3N0cmluZzo6c3Vic3RyIik7DQogICAgICAgIHJldHVybiBiYXNpY19z
dHJpbmcoKnRoaXMsIF9fcG9zLCBfX24pOw0KICAgICAgfQ0KDQogICAgICBp
bnQNCiAgICAgIGNvbXBhcmUoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikg
Y29uc3QNCiAgICAgIHsNCiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo
aXMtPnNpemUoKTsNCiAgICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0
ci5zaXplKCk7DQogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3Np
emUsIF9fb3NpemUpOw0KDQogICAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlw
ZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fc3RyLmRhdGEoKSwgX19sZW4pOw0K
ICAgICAgICBpZiAoIV9fcikNCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBf
X29zaXplOw0KICAgICAgICByZXR1cm4gX19yOw0KICAgICAgfQ0KDQogICAg
ICBpbnQNCiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdDsNCg0K
ICAgICAgaW50DQogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNp
emVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLA0KICAg
ICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikg
Y29uc3Q7DQoNCiAgICAgIGludA0KICAgICAgY29tcGFyZShjb25zdCBfQ2hh
clQqIF9fcykgY29uc3Q7DQoNCg0KDQogICAgICBpbnQNCiAgICAgIGNvbXBh
cmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0No
YXJUKiBfX3MpIGNvbnN0Ow0KDQogICAgICBpbnQNCiAgICAgIGNvbXBhcmUo
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJU
KiBfX3MsDQogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsN
Cg0KICB9Ow0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGJh
c2ljX3N0cmluZygpDQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAo
KS5fTV9yZWZjb3B5KCksIF9BbGxvYygpKSB7IH0NCg0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4NCiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgIGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
cmhzKQ0KICAgIHsNCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4gX19zdHIoX19saHMpOw0KICAgICAgX19zdHIuYXBwZW5k
KF9fcmhzKTsNCiAgICAgIHJldHVybiBfX3N0cjsNCiAgICB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRz
LF9BbGxvYz4NCiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywN
CiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJh
aXRzLF9BbGxvYz4mIF9fcmhzKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPg0KICAgIG9w
ZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+DQogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4NCiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAg
Y29uc3QgX0NoYXJUKiBfX3JocykNCiAgICB7DQogICAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsNCiAg
ICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7DQogICAgICByZXR1cm4gX19zdHI7
DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+DQogICAgb3BlcmF0
b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fbGhzLCBfQ2hhclQgX19yaHMpDQogICAgew0KICAgICAgdHlwZWRl
ZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3Ry
aW5nX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5
cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsNCiAgICAgIF9fc3RyaW5nX3R5
cGUgX19zdHIoX19saHMpOw0KICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90
eXBlKDEpLCBfX3Jocyk7DQogICAgICByZXR1cm4gX19zdHI7DQogICAgfQ0K
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBv
cGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAg
eyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQ0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3BlcmF0b3I9
PShjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp
DQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPT0gMDsgfQ0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3Bl
cmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCog
X19yaHMpDQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0g
MDsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wN
CiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp
DQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0gMDsgfQ0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3Bl
cmF0b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19yaHMpDQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0g
MDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQog
ICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IF9D
aGFyVCogX19yaHMpDQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jo
cykgIT0gMDsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5l
IGJvb2wNCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgIGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
cmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsg
fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAg
b3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBfQ2hhclQq
IF9fcmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwg
MDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQog
ICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsDQogICAgICAgICAg
ICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fcmhzKQ0KICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMp
ID4gMDsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJv
b2wNCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgIGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhz
KQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQ0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3Bl
cmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f
cmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsg
fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAg
b3BlcmF0b3I+KGNvbnN0IF9DaGFyVCogX19saHMsDQogICAgICAgICAgICAg
IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fcmhzKQ0KICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDwg
MDsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wN
CiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp
DQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsgfQ0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3Bl
cmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCog
X19yaHMpDQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0g
MDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQog
ICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAg
ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19yaHMpDQogIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMp
ID49IDA7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBi
b29sDQogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
cmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7
IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAg
IG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBfQ2hh
clQqIF9fcmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMp
ID49IDA7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9v
bA0KICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywNCiAgICAg
ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3JocykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9f
bGhzKSA8PSAwOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxp
bmUgdm9pZA0KICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykNCiAgICB7IF9fbGhzLnN3
YXAoX19yaHMpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLA0KICAgICAgICAg
ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19zdHIpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywNCiAgICAgICAgICAgICAg
IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fc3RyKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCxfVHJhaXRzPiYNCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywNCiAgICAgICAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hh
clQgX19kZWxpbSk7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5l
IGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+Jg0KICAgIGdldGxpbmUo
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLA0KICAgICAg
ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19zdHIpOw0KfQ0KIyA0NyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMNCg0KDQojIDEgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0
aG0uaCIgMSAzDQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDMNCg0KIyAxICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMSAzDQojIDMzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0Lmgi
IDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2FsZ29yaXRobS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQu
aCIgMSAzDQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAx
IDMNCiMgMzYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9hbGdvcml0aG0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDEgMw0KIyAz
NCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsZ28uaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfaGVhcC5oIiAxIDMNCiMgMzMgIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9oZWFwLmgiIDMNCm5h
bWVzcGFjZSBzdGQNCnsNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPg0K
dm9pZA0KX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
c3QsDQogICAgICAgICAgICBfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0
YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSkNCnsNCiAgX0Rpc3RhbmNl
IF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOw0KICB3aGlsZSAo
X19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmICooX19maXJzdCArIF9fcGFy
ZW50KSA8IF9fdmFsdWUpIHsNCiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRl
eCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7DQogICAgX19ob2xlSW5kZXgg
PSBfX3BhcmVudDsNCiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEp
IC8gMjsNCiAgfQ0KICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3Zh
bHVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4NCmlubGluZSB2b2lk
DQpfX3B1c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
c3QsDQogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
bGFzdCwgX0Rpc3RhbmNlKiwgX1RwKikNCnsNCiAgX19wdXNoX2hlYXAoX19m
aXJzdCwgX0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlz
dGFuY2UoMCksDQogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSk7
DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+
DQppbmxpbmUgdm9pZA0KcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQ0Kew0K
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7DQoNCg0KICBfX3B1c2hfaGVhcF9hdXgoX19m
aXJzdCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90
eXBlKF9fZmlyc3QpLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf
RGlzdGFuY2UsIGNsYXNzIF9UcCwNCiAgICAgICAgICBjbGFzcyBfQ29tcGFy
ZT4NCnZvaWQNCl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsDQogICAgICAgICAgICBf
RGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9f
Y29tcCkNCnsNCiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4
IC0gMSkgLyAyOw0KICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4
ICYmIF9fY29tcCgqKF9fZmlyc3QgKyBfX3BhcmVudCksIF9fdmFsdWUpKSB7
DQogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsg
X19wYXJlbnQpOw0KICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7DQogICAg
X19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7DQogIH0NCiAgKihf
X2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBh
cmUsDQogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+DQpp
bmxpbmUgdm9pZA0KX19wdXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCwNCiAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UqLCBfVHAqKQ0Kew0KICBfX3B1c2hfaGVhcChfX2Zp
cnN0LCBfRGlzdGFuY2UoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0
YW5jZSgwKSwNCiAgICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBf
X2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSB2b2lkDQpwdXNoX2hl
YXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN
CiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLA0K
ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLCBf
X3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz
IF9UcD4NCnZvaWQNCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwNCiAgICAgICAg
ICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSkNCnsNCiAgX0Rp
c3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsNCiAgX0Rpc3RhbmNl
IF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOw0KICB3aGls
ZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7DQogICAgaWYgKCooX19maXJz
dCArIF9fc2Vjb25kQ2hpbGQpIDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hp
bGQgLSAxKSkpDQogICAgICBfX3NlY29uZENoaWxkLS07DQogICAgKihfX2Zp
cnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGls
ZCk7DQogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOw0KICAgIF9f
c2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsNCiAgfQ0K
ICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgew0KICAgICooX19maXJz
dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxk
IC0gMSkpOw0KICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7
DQogIH0NCiAgX19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9f
dG9wSW5kZXgsIF9fdmFsdWUpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5j
ZT4NCmlubGluZSB2b2lkDQpfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LA0K
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9U
cCBfX3ZhbHVlLCBfRGlzdGFuY2UqKQ0Kew0KICAqX19yZXN1bHQgPSAqX19m
aXJzdDsNCiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCks
IF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1ZSk7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNz
IF9UcD4NCmlubGluZSB2b2lkDQpfX3BvcF9oZWFwX2F1eChfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
bGFzdCwNCiAgICAgICAgICAgICAgIF9UcCopDQp7DQogIF9fcG9wX2hlYXAo
X19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwNCiAgICAgICAgICAg
ICBfVHAoKihfX2xhc3QgLSAxKSksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0
KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
b3I+DQppbmxpbmUgdm9pZCBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K
DQogIF9fcG9wX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90
eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLA0KICAgICAgICAgIGNs
YXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+DQp2b2lkDQpfX2FkanVzdF9oZWFw
KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19o
b2xlSW5kZXgsDQogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1Rw
IF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgX0Rpc3RhbmNlIF9f
dG9wSW5kZXggPSBfX2hvbGVJbmRleDsNCiAgX0Rpc3RhbmNlIF9fc2Vjb25k
Q2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOw0KICB3aGlsZSAoX19zZWNv
bmRDaGlsZCA8IF9fbGVuKSB7DQogICAgaWYgKF9fY29tcCgqKF9fZmlyc3Qg
KyBfX3NlY29uZENoaWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQg
LSAxKSkpKQ0KICAgICAgX19zZWNvbmRDaGlsZC0tOw0KICAgICooX19maXJz
dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQp
Ow0KICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsNCiAgICBfX3Nl
Y29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7DQogIH0NCiAg
aWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsNCiAgICAqKF9fZmlyc3Qg
KyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAt
IDEpKTsNCiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOw0K
ICB9DQogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3Rv
cEluZGV4LCBfX3ZhbHVlLCBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9D
b21wYXJlLA0KICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4NCmlubGluZSB2
b2lkDQpfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBf
Q29tcGFyZSBfX2NvbXAsDQogICAgICAgICAgIF9EaXN0YW5jZSopDQp7DQog
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICBfX2FkanVzdF9oZWFwKF9fZmly
c3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3Qp
LA0KICAgICAgICAgICAgICAgIF9fdmFsdWUsIF9fY29tcCk7DQp9DQoNCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9U
cCwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZA0KX19wb3BfaGVhcF9h
dXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfVHAqLCBfQ29t
cGFyZSBfX2NvbXApDQp7DQogIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0
IC0gMSwgX19sYXN0IC0gMSwgX1RwKCooX19sYXN0IC0gMSkpLCBfX2NvbXAs
DQogICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0N
Cg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xh
c3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZA0KcG9wX2hlYXAoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBfX3BvcF9oZWFw
X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwg
X19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+DQp2b2lkDQpf
X21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwNCiAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9UcCos
IF9EaXN0YW5jZSopDQp7DQogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikg
cmV0dXJuOw0KICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0
Ow0KICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOw0KDQog
IHdoaWxlICh0cnVlKSB7DQogICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBf
X3BhcmVudCwgX19sZW4sIF9UcCgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsN
CiAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOw0KICAgIF9fcGFyZW50
LS07DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvcj4NCmlubGluZSB2b2lkDQptYWtlX2hlYXAoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh
c3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIF9fbWFrZV9oZWFw
KF9fZmlyc3QsIF9fbGFzdCwNCiAgICAgICAgICAgICAgX192YWx1ZV90eXBl
KF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf
Q29tcGFyZSwNCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5j
ZT4NCnZvaWQNCl9fbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LA0KICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wLCBfVHAqLCBfRGlzdGFuY2UqKQ0Kew0K
ICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsNCiAgX0Rpc3Rh
bmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsNCiAgX0Rpc3RhbmNlIF9f
cGFyZW50ID0gKF9fbGVuIC0gMikvMjsNCg0KICB3aGlsZSAodHJ1ZSkgew0K
ICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLCBf
VHAoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSwNCiAgICAgICAgICAgICAgICAg
IF9fY29tcCk7DQogICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsNCiAg
ICBfX3BhcmVudC0tOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPg0KaW5saW5lIHZv
aWQNCm1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwN
CiAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29t
cGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7DQoNCg0KICBfX21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9f
Y29tcCwNCiAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBf
X2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPg0Kdm9pZCBzb3J0X2hlYXAoX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIHdo
aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkNCiAgICBwb3BfaGVhcChfX2Zp
cnN0LCBfX2xhc3QtLSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZA0Kc29ydF9o
ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29t
cCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K
DQogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkNCiAgICBwb3BfaGVh
cChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsNCn0NCg0KfQ0KIyAzNSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs
Z28uaCIgMiAzDQoNCg0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPg0KaW5saW5lIGNvbnN0IF9UcCYgX19tZWRpYW4o
Y29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9f
YykNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogIGlmIChfX2EgPCBfX2Ip
DQogICAgaWYgKF9fYiA8IF9fYykNCiAgICAgIHJldHVybiBfX2I7DQogICAg
ZWxzZSBpZiAoX19hIDwgX19jKQ0KICAgICAgcmV0dXJuIF9fYzsNCiAgICBl
bHNlDQogICAgICByZXR1cm4gX19hOw0KICBlbHNlIGlmIChfX2EgPCBfX2Mp
DQogICAgcmV0dXJuIF9fYTsNCiAgZWxzZSBpZiAoX19iIDwgX19jKQ0KICAg
IHJldHVybiBfX2M7DQogIGVsc2UNCiAgICByZXR1cm4gX19iOw0KfQ0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSBj
b25zdCBfVHAmDQpfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1Rw
JiBfX2IsIGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBfX2NvbXApDQp7DQoN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogIGlmIChf
X2NvbXAoX19hLCBfX2IpKQ0KICAgIGlmIChfX2NvbXAoX19iLCBfX2MpKQ0K
ICAgICAgcmV0dXJuIF9fYjsNCiAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBf
X2MpKQ0KICAgICAgcmV0dXJuIF9fYzsNCiAgICBlbHNlDQogICAgICByZXR1
cm4gX19hOw0KICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQ0KICAgIHJl
dHVybiBfX2E7DQogIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpDQogICAg
cmV0dXJuIF9fYzsNCiAgZWxzZQ0KICAgIHJldHVybiBfX2I7DQp9DQoNCg0K
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9GdW5jdGlvbj4N
Cl9GdW5jdGlvbiBmb3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LCBfRnVuY3Rpb24gX19mKQ0Kew0KDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f
Zmlyc3QpDQogICAgX19mKCpfX2ZpcnN0KTsNCiAgcmV0dXJuIF9fZjsNCn0N
Cg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+
DQppbmxpbmUgX0lucHV0SXRlciBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9UcCYgX192YWwsDQogICAgICAgICAgICAgICAgICAgICAgIGlucHV0
X2l0ZXJhdG9yX3RhZykNCnsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQ0KICAgICsrX19maXJzdDsNCiAg
cmV0dXJuIF9fZmlyc3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfUHJlZGljYXRlPg0KaW5saW5lIF9JbnB1dEl0ZXIgZmlu
ZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn
KQ0Kew0KICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgq
X19maXJzdCkpDQogICAgKytfX2ZpcnN0Ow0KICByZXR1cm4gX19maXJzdDsN
Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfVHA+DQpfUmFuZG9tQWNjZXNzSXRlciBmaW5kKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwNCiAgICAgICAg
ICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpDQp7
DQogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQNCiAgICA9IChfX2xh
c3QgLSBfX2ZpcnN0KSA+PiAyOw0KDQogIGZvciAoIDsgX190cmlwX2NvdW50
ID4gMCA7IC0tX190cmlwX2NvdW50KSB7DQogICAgaWYgKCpfX2ZpcnN0ID09
IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7DQoNCiAg
ICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Ow0KICAg
ICsrX19maXJzdDsNCg0KICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0
dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KDQogICAgaWYgKCpfX2Zp
cnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7
DQogIH0NCg0KICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgew0KICBjYXNl
IDM6DQogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJz
dDsNCiAgICArK19fZmlyc3Q7DQogIGNhc2UgMjoNCiAgICBpZiAoKl9fZmly
c3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Ow0KICAgICsrX19maXJzdDsN
CiAgY2FzZSAxOg0KICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJu
IF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICBjYXNlIDA6DQogIGRlZmF1
bHQ6DQogICAgcmV0dXJuIF9fbGFzdDsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+DQpf
UmFuZG9tQWNjZXNzSXRlciBmaW5kX2lmKF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0K
ew0KICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50DQogICAgPSAoX19s
YXN0IC0gX19maXJzdCkgPj4gMjsNCg0KICBmb3IgKCA7IF9fdHJpcF9jb3Vu
dCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgew0KICAgIGlmIChfX3ByZWQoKl9f
Zmlyc3QpKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7DQoNCiAg
ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAg
KytfX2ZpcnN0Ow0KDQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVy
biBfX2ZpcnN0Ow0KICAgICsrX19maXJzdDsNCg0KICAgIGlmIChfX3ByZWQo
Kl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7DQog
IH0NCg0KICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgew0KICBjYXNlIDM6
DQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Ow0K
ICAgICsrX19maXJzdDsNCiAgY2FzZSAyOg0KICAgIGlmIChfX3ByZWQoKl9f
Zmlyc3QpKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7DQogIGNh
c2UgMToNCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly
c3Q7DQogICAgKytfX2ZpcnN0Ow0KICBjYXNlIDA6DQogIGRlZmF1bHQ6DQog
ICAgcmV0dXJuIF9fbGFzdDsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX1RwPg0KaW5saW5lIF9JbnB1dEl0ZXIgZmlu
ZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQ0Kew0KDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
Cg0KICByZXR1cm4gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+DQppbmxpbmUgX0lu
cHV0SXRlciBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNh
dGUgX19wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KDQogIHJldHVybiBmaW5kX2lmKF9fZmlyc3QsIF9fbGFz
dCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0N
Cg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+DQpfRm9yd2Fy
ZEl0ZXIgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgaWYgKF9fZmlyc3QgPT0gX19s
YXN0KQ0KICAgIHJldHVybiBfX2xhc3Q7DQogIF9Gb3J3YXJkSXRlciBfX25l
eHQgPSBfX2ZpcnN0Ow0KICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsN
CiAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkNCiAgICAgIHJldHVybiBf
X2ZpcnN0Ow0KICAgIF9fZmlyc3QgPSBfX25leHQ7DQogIH0NCiAgcmV0dXJu
IF9fbGFzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4NCl9Gb3J3YXJkSXRlciBhZGphY2Vu
dF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp
Y2F0ZSBfX2JpbmFyeV9wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGlmIChfX2ZpcnN0ID09
IF9fbGFzdCkNCiAgICByZXR1cm4gX19sYXN0Ow0KICBfRm9yd2FyZEl0ZXIg
X19uZXh0ID0gX19maXJzdDsNCiAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0
KSB7DQogICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQp
KQ0KICAgICAgcmV0dXJuIF9fZmlyc3Q7DQogICAgX19maXJzdCA9IF9fbmV4
dDsNCiAgfQ0KICByZXR1cm4gX19sYXN0Ow0KfQ0KDQoNCg0KDQoNCg0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf
U2l6ZT4NCnZvaWQgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlLA0KICAgICAgICAgICBf
U2l6ZSYgX19uKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgaWYgKCpfX2ZpcnN0
ID09IF9fdmFsdWUpDQogICAgICArK19fbjsNCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9TaXpl
Pg0Kdm9pZCBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCwNCiAgICAgICAgICAgICAg
X1NpemUmIF9fbikNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7DQoNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0KQ0KICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQ0KICAgICAgKytf
X247DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf
VHA+DQp0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRp
ZmZlcmVuY2VfdHlwZQ0KY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQ0Kew0KDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0
SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOw0KICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgaWYgKCpfX2ZpcnN0
ID09IF9fdmFsdWUpDQogICAgICArK19fbjsNCiAgcmV0dXJuIF9fbjsNCn0N
Cg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNh
dGU+DQp0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRp
ZmZlcmVuY2VfdHlwZQ0KY291bnRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpDQp7DQoNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90
eXBlIF9fbiA9IDA7DQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCkNCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkNCiAgICAgICsr
X19uOw0KICByZXR1cm4gX19uOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4NCl9Gb3J3
YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3
YXJkSXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikNCnsN
Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCg0KICBpZiAo
X19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQ0K
ICAgIHJldHVybiBfX2ZpcnN0MTsNCg0KDQogIF9Gb3J3YXJkSXRlcjIgX190
bXAoX19maXJzdDIpOw0KICArK19fdG1wOw0KICBpZiAoX190bXAgPT0gX19s
YXN0MikNCiAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9f
Zmlyc3QyKTsNCg0KDQoNCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7DQoN
CiAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7DQoNCiAgX0ZvcndhcmRJdGVy
MSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsNCg0KICB3aGlsZSAoX19maXJzdDEg
IT0gX19sYXN0MSkgew0KICAgIF9fZmlyc3QxID0gZmluZChfX2ZpcnN0MSwg
X19sYXN0MSwgKl9fZmlyc3QyKTsNCiAgICBpZiAoX19maXJzdDEgPT0gX19s
YXN0MSkNCiAgICAgIHJldHVybiBfX2xhc3QxOw0KDQogICAgX19wID0gX19w
MTsNCiAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsNCiAgICBpZiAoKytfX2N1
cnJlbnQgPT0gX19sYXN0MSkNCiAgICAgIHJldHVybiBfX2xhc3QxOw0KDQog
ICAgd2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9fcCkgew0KICAgICAgaWYgKCsr
X19wID09IF9fbGFzdDIpDQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsNCiAg
ICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQ0KICAgICAgICByZXR1
cm4gX19sYXN0MTsNCiAgICB9DQoNCiAgICArK19fZmlyc3QxOw0KICB9DQog
IHJldHVybiBfX2ZpcnN0MTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9CaW5hcnlQ
cmVkPg0KX0ZvcndhcmRJdGVyMSBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2Zp
cnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBf
X2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWQgX19w
cmVkaWNhdGUpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN
Cg0KDQoNCiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIg
PT0gX19sYXN0MikNCiAgICByZXR1cm4gX19maXJzdDE7DQoNCg0KICBfRm9y
d2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsNCiAgKytfX3RtcDsNCiAgaWYg
KF9fdG1wID09IF9fbGFzdDIpIHsNCiAgICB3aGlsZSAoX19maXJzdDEgIT0g
X19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIp
KQ0KICAgICAgKytfX2ZpcnN0MTsNCiAgICByZXR1cm4gX19maXJzdDE7DQog
IH0NCg0KDQoNCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7DQoNCiAgX19w
MSA9IF9fZmlyc3QyOyArK19fcDE7DQoNCiAgX0ZvcndhcmRJdGVyMSBfX2N1
cnJlbnQgPSBfX2ZpcnN0MTsNCg0KICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSkgew0KICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7DQog
ICAgICBpZiAoX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0K
ICAgICAgICBicmVhazsNCiAgICAgICsrX19maXJzdDE7DQogICAgfQ0KICAg
IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgq
X19maXJzdDEsICpfX2ZpcnN0MikpDQogICAgICArK19fZmlyc3QxOw0KICAg
IGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAgICAgcmV0dXJuIF9fbGFz
dDE7DQoNCiAgICBfX3AgPSBfX3AxOw0KICAgIF9fY3VycmVudCA9IF9fZmly
c3QxOw0KICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4g
X19sYXN0MTsNCg0KICAgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50
LCAqX19wKSkgew0KICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpDQogICAg
ICAgIHJldHVybiBfX2ZpcnN0MTsNCiAgICAgIGlmICgrK19fY3VycmVudCA9
PSBfX2xhc3QxKQ0KICAgICAgICByZXR1cm4gX19sYXN0MTsNCiAgICB9DQoN
CiAgICArK19fZmlyc3QxOw0KICB9DQogIHJldHVybiBfX2ZpcnN0MTsNCn0N
Cg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9J
bnRlZ2VyLCBjbGFzcyBfVHA+DQpfRm9yd2FyZEl0ZXIgc2VhcmNoX24oX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAg
ICAgICAgICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1Rw
JiBfX3ZhbCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogIGlmIChf
X2NvdW50IDw9IDApDQogICAgcmV0dXJuIF9fZmlyc3Q7DQogIGVsc2Ugew0K
ICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOw0K
ICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICAgX0ludGVn
ZXIgX19uID0gX19jb3VudCAtIDE7DQogICAgICBfRm9yd2FyZEl0ZXIgX19p
ID0gX19maXJzdDsNCiAgICAgICsrX19pOw0KICAgICAgd2hpbGUgKF9faSAh
PSBfX2xhc3QgJiYgX19uICE9IDAgJiYgKl9faSA9PSBfX3ZhbCkgew0KICAg
ICAgICArK19faTsNCiAgICAgICAgLS1fX247DQogICAgICB9DQogICAgICBp
ZiAoX19uID09IDApDQogICAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgICAg
ZWxzZQ0KICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ksIF9fbGFzdCwgX192
YWwpOw0KICAgIH0NCiAgICByZXR1cm4gX19sYXN0Ow0KICB9DQp9DQoNCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9JbnRlZ2VyLCBj
bGFzcyBfVHAsIGNsYXNzIF9CaW5hcnlQcmVkPg0KX0ZvcndhcmRJdGVyIHNl
YXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQs
IGNvbnN0IF9UcCYgX192YWwsDQogICAgICAgICAgICAgICAgICAgICAgX0Jp
bmFyeVByZWQgX19iaW5hcnlfcHJlZCkNCnsNCg0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGlmIChf
X2NvdW50IDw9IDApDQogICAgcmV0dXJuIF9fZmlyc3Q7DQogIGVsc2Ugew0K
ICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICAgaWYgKF9f
YmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkNCiAgICAgICAgYnJlYWs7
DQogICAgICArK19fZmlyc3Q7DQogICAgfQ0KICAgIHdoaWxlIChfX2ZpcnN0
ICE9IF9fbGFzdCkgew0KICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAt
IDE7DQogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsNCiAgICAg
ICsrX19pOw0KICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9
IDAgJiYgX19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpIHsNCiAgICAgICAg
KytfX2k7DQogICAgICAgIC0tX19uOw0KICAgICAgfQ0KICAgICAgaWYgKF9f
biA9PSAwKQ0KICAgICAgICByZXR1cm4gX19maXJzdDsNCiAgICAgIGVsc2Ug
ew0KICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCkgew0KICAgICAgICAg
IGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkNCiAgICAgICAgICAg
IGJyZWFrOw0KICAgICAgICAgICsrX19pOw0KICAgICAgICB9DQogICAgICAg
IF9fZmlyc3QgPSBfX2k7DQogICAgICB9DQogICAgfQ0KICAgIHJldHVybiBf
X2xhc3Q7DQogIH0NCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPg0KX0ZvcndhcmRJdGVyMiBz
d2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0
ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlcjIgX19maXJzdDIpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
DQoNCg0KDQogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2Zp
cnN0MSwgKytfX2ZpcnN0MikNCiAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9f
Zmlyc3QyKTsNCiAgcmV0dXJuIF9fZmlyc3QyOw0KfQ0KDQoNCg0KdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz
cyBfVW5hcnlPcGVyYXRpb24+DQpfT3V0cHV0SXRlciB0cmFuc2Zvcm0oX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3Bl
cmF0aW9uIF9fdW5hcnlfb3ApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
DQoNCg0KDQoNCg0KDQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCwgKytfX3Jlc3VsdCkNCiAgICAqX19yZXN1bHQgPSBfX3VuYXJ5
X29wKCpfX2ZpcnN0KTsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBj
bGFzcyBfT3V0cHV0SXRlciwNCiAgICAgICAgICBjbGFzcyBfQmluYXJ5T3Bl
cmF0aW9uPg0KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9u
IF9fYmluYXJ5X29wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KDQoNCg0KICBmb3IgKCA7IF9f
Zmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIsICsr
X19yZXN1bHQpDQogICAgKl9fcmVzdWx0ID0gX19iaW5hcnlfb3AoKl9fZmly
c3QxLCAqX19maXJzdDIpOw0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCg0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQp2
b2lkIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsDQogICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1
ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkNCnsNCg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7DQoNCg0KICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0OyArK19fZmlyc3QpDQogICAgaWYgKCpfX2ZpcnN0ID09IF9fb2xk
X3ZhbHVlKQ0KICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsNCn0NCg0K
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0
ZSwgY2xhc3MgX1RwPg0Kdm9pZCByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg
IF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQ0K
ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgaWYgKF9fcHJl
ZCgqX19maXJzdCkpDQogICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOw0K
fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1
dEl0ZXIsIGNsYXNzIF9UcD4NCl9PdXRwdXRJdGVyIHJlcGxhY2VfY29weShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUs
IGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpDQp7DQoNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
DQoNCg0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qs
ICsrX19yZXN1bHQpDQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QgPT0gX19v
bGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0Ow0KICByZXR1cm4g
X19yZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1Rw
Pg0KX091dHB1dEl0ZXIgcmVwbGFjZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYg
X19uZXdfdmFsdWUpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQ0KICAg
ICpfX3Jlc3VsdCA9IF9fcHJlZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6
ICpfX2ZpcnN0Ow0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCg0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfR2VuZXJhdG9yPg0K
dm9pZCBnZW5lcmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwgX0dlbmVyYXRvciBfX2dlbikNCnsNCg0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgKl9fZmly
c3QgPSBfX2dlbigpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0
ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfR2VuZXJhdG9yPg0KX091dHB1dEl0
ZXIgZ2VuZXJhdGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24s
IF9HZW5lcmF0b3IgX19nZW4pDQp7DQoNCg0KDQoNCg0KDQogIGZvciAoIDsg
X19uID4gMDsgLS1fX24sICsrX19maXJzdCkNCiAgICAqX19maXJzdCA9IF9f
Z2VuKCk7DQogIHJldHVybiBfX2ZpcnN0Ow0KfQ0KDQoNCg0KdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBf
VHA+DQpfT3V0cHV0SXRlciByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkN
CnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGZvciAoIDsgX19maXJzdCAh
PSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICBpZiAoISgqX19maXJzdCA9PSBf
X3ZhbHVlKSkgew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7DQogICAg
ICArK19fcmVzdWx0Ow0KICAgIH0NCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0
ZXIsIGNsYXNzIF9QcmVkaWNhdGU+DQpfT3V0cHV0SXRlciByZW1vdmVfY29w
eV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsIF9QcmVkaWNhdGUgX19wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQog
IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICBp
ZiAoIV9fcHJlZCgqX19maXJzdCkpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0Ow0KICAgICAgKytfX3Jlc3VsdDsNCiAgICB9DQogIHJldHVybiBf
X3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1RwPg0KX0ZvcndhcmRJdGVyIHJlbW92ZShfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX1RwJiBfX3ZhbHVlKQ0Kew0KDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsNCg0KDQogIF9fZmlyc3QgPSBmaW5kKF9fZmly
c3QsIF9fbGFzdCwgX192YWx1ZSk7DQogIF9Gb3J3YXJkSXRlciBfX2kgPSBf
X2ZpcnN0Ow0KICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0
DQogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsr
X19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOw0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPg0KX0Zv
cndhcmRJdGVyIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgX1By
ZWRpY2F0ZSBfX3ByZWQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBfX2ZpcnN0ID0g
ZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7DQogIF9Gb3J3YXJk
SXRlciBfX2kgPSBfX2ZpcnN0Ow0KICByZXR1cm4gX19maXJzdCA9PSBfX2xh
c3QgPyBfX2ZpcnN0DQogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJl
bW92ZV9jb3B5X2lmKCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7
DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X091dHB1dEl0ZXIsIGNsYXNzIF9UcD4NCl9PdXRwdXRJdGVyIF9fdW5pcXVl
X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsIF9UcCopDQp7DQoNCiAgX1RwIF9fdmFsdWUgPSAqX19maXJzdDsNCiAg
Kl9fcmVzdWx0ID0gX192YWx1ZTsNCiAgd2hpbGUgKCsrX19maXJzdCAhPSBf
X2xhc3QpDQogICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsNCiAg
ICAgIF9fdmFsdWUgPSAqX19maXJzdDsNCiAgICAgICorK19fcmVzdWx0ID0g
X192YWx1ZTsNCiAgICB9DQogIHJldHVybiArK19fcmVzdWx0Ow0KfQ0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+
DQppbmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3Jf
dGFnKQ0Kew0KDQogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9f
bGFzdCwgX19yZXN1bHQsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0
ZXI+DQpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBmb3J3YXJkX2l0ZXJh
dG9yX3RhZykNCnsNCg0KICAqX19yZXN1bHQgPSAqX19maXJzdDsNCiAgd2hp
bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAgaWYgKCEoKl9fcmVzdWx0
ID09ICpfX2ZpcnN0KSkNCiAgICAgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7
DQogIHJldHVybiArK19fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+DQppbmxpbmUgX091dHB1
dEl0ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsNCiAgcmV0
dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwN
CiAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShf
X3Jlc3VsdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGUsDQog
ICAgICAgICAgY2xhc3MgX1RwPg0KX091dHB1dEl0ZXIgX191bmlxdWVfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBf
X2JpbmFyeV9wcmVkLCBfVHAqKQ0Kew0KDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOw0KDQogIF9UcCBfX3ZhbHVlID0gKl9fZmly
c3Q7DQogICpfX3Jlc3VsdCA9IF9fdmFsdWU7DQogIHdoaWxlICgrK19fZmly
c3QgIT0gX19sYXN0KQ0KICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVl
LCAqX19maXJzdCkpIHsNCiAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsNCiAg
ICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsNCiAgICB9DQogIHJldHVybiAr
K19fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQpp
bmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f
YmluYXJ5X3ByZWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwdXRfaXRlcmF0b3JfdGFnKQ0Kew0KDQogIHJldHVybiBfX3VuaXF1
ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3By
ZWQsDQogICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2Zp
cnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQpfRm9y
d2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpDQp7
DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7DQoNCg0KDQogICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0Ow0KICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICBpZiAo
IV9fYmluYXJ5X3ByZWQoKl9fcmVzdWx0LCAqX19maXJzdCkpICorK19fcmVz
dWx0ID0gKl9fZmlyc3Q7DQogIHJldHVybiArK19fcmVzdWx0Ow0KfQ0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIs
IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQppbmxpbmUgX091dHB1dEl0ZXIg
dW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpDQp7DQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7DQogIHJldHVybiBf
X3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmlu
YXJ5X3ByZWQsDQogICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3Jf
Y2F0ZWdvcnkoX19yZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcj4NCl9Gb3J3YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpDQp7DQoNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN
Cg0KICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3Qp
Ow0KICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2Zp
cnN0KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX0JpbmFyeVByZWRpY2F0ZT4NCl9Gb3J3YXJkSXRlciB1bmlxdWUoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAg
ICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJl
ZCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsNCg0KDQoNCiAgX19maXJzdCA9IGFkamFjZW50X2Zp
bmQoX19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsNCiAgcmV0dXJu
IHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5h
cnlfcHJlZCk7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0
aW9uYWxJdGVyPg0Kdm9pZCBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAgICAg
ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgew0KICB3aGls
ZSAodHJ1ZSkNCiAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJz
dCA9PSAtLV9fbGFzdCkNCiAgICAgIHJldHVybjsNCiAgICBlbHNlDQogICAg
ICBpdGVyX3N3YXAoX19maXJzdCsrLCBfX2xhc3QpOw0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+DQp2b2lkIF9fcmV2ZXJzZShf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsDQogICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZykgew0KICB3aGlsZSAoX19maXJzdCA8IF9fbGFzdCkNCiAgICBpdGVy
X3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+DQppbmxpbmUgdm9pZCByZXZlcnNl
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ow0KDQogIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3Jf
Y2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCl9PdXRwdXRJ
dGVyIHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgIC0tX19sYXN0Ow0KICAgICpf
X3Jlc3VsdCA9ICpfX2xhc3Q7DQogICAgKytfX3Jlc3VsdDsNCiAgfQ0KICBy
ZXR1cm4gX19yZXN1bHQ7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0V1
Y2xpZGVhblJpbmdFbGVtZW50Pg0KX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9f
Z2NkKF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX20sDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikNCnsN
CiAgd2hpbGUgKF9fbiAhPSAwKSB7DQogICAgX0V1Y2xpZGVhblJpbmdFbGVt
ZW50IF9fdCA9IF9fbSAlIF9fbjsNCiAgICBfX20gPSBfX247DQogICAgX19u
ID0gX190Ow0KICB9DQogIHJldHVybiBfX207DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4NCl9Gb3J3YXJk
SXRlciBfX3JvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwNCiAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsDQogICAgICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UqLA0KICAgICAgICAgICAgICAgICAg
ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0Kew0KICBpZiAoX19maXJzdCA9
PSBfX21pZGRsZSkNCiAgICByZXR1cm4gX19sYXN0Ow0KICBpZiAoX19sYXN0
ID09IF9fbWlkZGxlKQ0KICAgIHJldHVybiBfX2ZpcnN0Ow0KDQogIF9Gb3J3
YXJkSXRlciBfX2ZpcnN0MiA9IF9fbWlkZGxlOw0KICBkbyB7DQogICAgc3dh
cCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7DQogICAgaWYgKF9fZmlyc3Qg
PT0gX19taWRkbGUpDQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOw0KICB9
IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpOw0KDQogIF9Gb3J3YXJkSXRl
ciBfX25ld19taWRkbGUgPSBfX2ZpcnN0Ow0KDQogIF9fZmlyc3QyID0gX19t
aWRkbGU7DQoNCiAgd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCkgew0KICAg
IHN3YXAgKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsNCiAgICBpZiAoX19m
aXJzdCA9PSBfX21pZGRsZSkNCiAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7
DQogICAgZWxzZSBpZiAoX19maXJzdDIgPT0gX19sYXN0KQ0KICAgICAgX19m
aXJzdDIgPSBfX21pZGRsZTsNCiAgfQ0KDQogIHJldHVybiBfX25ld19taWRk
bGU7DQp9DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl
ciwgY2xhc3MgX0Rpc3RhbmNlPg0KX0JpZGlyZWN0aW9uYWxJdGVyIF9fcm90
YXRlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZSosDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7DQoNCg0KICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkNCiAg
ICByZXR1cm4gX19sYXN0Ow0KICBpZiAoX19sYXN0ID09IF9fbWlkZGxlKQ0K
ICAgIHJldHVybiBfX2ZpcnN0Ow0KDQogIF9fcmV2ZXJzZShfX2ZpcnN0LCBf
X21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7DQogIF9f
cmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZygpKTsNCg0KICB3aGlsZSAoX19maXJzdCAhPSBfX21pZGRsZSAm
JiBfX21pZGRsZSAhPSBfX2xhc3QpDQogICAgc3dhcCAoKl9fZmlyc3QrKywg
Ki0tX19sYXN0KTsNCg0KICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkgew0K
ICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZygpKTsNCiAgICByZXR1cm4gX19sYXN0Ow0KICB9DQog
IGVsc2Ugew0KICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7DQogICAgcmV0dXJuIF9fZmly
c3Q7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4NCl9SYW5kb21BY2Nl
c3NJdGVyIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X21pZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZSAqLCBfVHAgKikNCnsNCg0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KDQoNCiAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9f
Zmlyc3Q7DQogIF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7
DQogIF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7DQogIF9SYW5kb21BY2Nl
c3NJdGVyIF9fcmVzdWx0ID0gX19maXJzdCArIChfX2xhc3QgLSBfX21pZGRs
ZSk7DQoNCiAgaWYgKF9fayA9PSAwKQ0KICAgIHJldHVybiBfX2xhc3Q7DQoN
CiAgZWxzZSBpZiAoX19rID09IF9fbCkgew0KICAgIHN3YXBfcmFuZ2VzKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7DQogICAgcmV0dXJuIF9fcmVz
dWx0Ow0KICB9DQoNCiAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwgX19r
KTsNCg0KICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBfX2kgPCBfX2Q7IF9f
aSsrKSB7DQogICAgX1RwIF9fdG1wID0gKl9fZmlyc3Q7DQogICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19wID0gX19maXJzdDsNCg0KICAgIGlmIChfX2sgPCBf
X2wpIHsNCiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9f
bC9fX2Q7IF9faisrKSB7DQogICAgICAgIGlmIChfX3AgPiBfX2ZpcnN0ICsg
X19sKSB7DQogICAgICAgICAgKl9fcCA9ICooX19wIC0gX19sKTsNCiAgICAg
ICAgICBfX3AgLT0gX19sOw0KICAgICAgICB9DQoNCiAgICAgICAgKl9fcCA9
ICooX19wICsgX19rKTsNCiAgICAgICAgX19wICs9IF9fazsNCiAgICAgIH0N
CiAgICB9DQoNCiAgICBlbHNlIHsNCiAgICAgIGZvciAoX0Rpc3RhbmNlIF9f
aiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsNCiAgICAgICAg
aWYgKF9fcCA8IF9fbGFzdCAtIF9faykgew0KICAgICAgICAgICpfX3AgPSAq
KF9fcCArIF9fayk7DQogICAgICAgICAgX19wICs9IF9fazsNCiAgICAgICAg
fQ0KDQogICAgICAgICpfX3AgPSAqIChfX3AgLSBfX2wpOw0KICAgICAgICBf
X3AgLT0gX19sOw0KICAgICAgfQ0KICAgIH0NCg0KICAgICpfX3AgPSBfX3Rt
cDsNCiAgICArK19fZmlyc3Q7DQogIH0NCg0KICByZXR1cm4gX19yZXN1bHQ7
DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+DQppbmxpbmUg
X0ZvcndhcmRJdGVyIHJvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsNCg0KICByZXR1cm4gX19yb3RhdGUoX19maXJz
dCwgX19taWRkbGUsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgIF9fZGlz
dGFuY2VfdHlwZShfX2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgIF9faXRl
cmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCl9PdXRwdXRJ
dGVyIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19taWRkbGUsDQogICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkNCnsNCg0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoN
Cg0KICByZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShfX21p
ZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIF9EaXN0YW5jZSBfX3JhbmRv
bV9udW1iZXIoX0Rpc3RhbmNlIF9fbikgew0KDQogIHJldHVybiBscmFuZDQ4
KCkgJSBfX247DQoNCg0KDQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXI+DQppbmxpbmUgdm9pZCByYW5kb21fc2h1ZmZsZShf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0Kew0KDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19maXJzdCA9
PSBfX2xhc3QpIHJldHVybjsNCiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf
X2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpDQogICAg
aXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZG9tX251bWJlcigoX19p
IC0gX19maXJzdCkgKyAxKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4N
CnZvaWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg
ICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpDQp7DQoNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkgcmV0dXJuOw0KICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVy
IF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkNCiAg
ICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2Zp
cnN0KSArIDEpKTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQpf
T3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19vdXQsIGNvbnN0IF9EaXN0YW5jZSBf
X24pDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KDQoNCiAgX0Rpc3RhbmNlIF9fcmVtYWluaW5nID0gMDsNCiAg
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3JlbWFpbmluZyk7DQogIF9E
aXN0YW5jZSBfX20gPSBtaW4oX19uLCBfX3JlbWFpbmluZyk7DQoNCiAgd2hp
bGUgKF9fbSA+IDApIHsNCiAgICBpZiAoX19yYW5kb21fbnVtYmVyKF9fcmVt
YWluaW5nKSA8IF9fbSkgew0KICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7DQog
ICAgICArK19fb3V0Ow0KICAgICAgLS1fX207DQogICAgfQ0KDQogICAgLS1f
X3JlbWFpbmluZzsNCiAgICArK19fZmlyc3Q7DQogIH0NCiAgcmV0dXJuIF9f
b3V0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlLA0KICAgICAgICAgIGNs
YXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+DQpfT3V0cHV0SXRlciByYW5k
b21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19vdXQsIGNvbnN0IF9EaXN0YW5jZSBfX24sDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19y
YW5kKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgX0Rpc3RhbmNlIF9fcmVt
YWluaW5nID0gMDsNCiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3Jl
bWFpbmluZyk7DQogIF9EaXN0YW5jZSBfX20gPSBtaW4oX19uLCBfX3JlbWFp
bmluZyk7DQoNCiAgd2hpbGUgKF9fbSA+IDApIHsNCiAgICBpZiAoX19yYW5k
KF9fcmVtYWluaW5nKSA8IF9fbSkgew0KICAgICAgKl9fb3V0ID0gKl9fZmly
c3Q7DQogICAgICArK19fb3V0Ow0KICAgICAgLS1fX207DQogICAgfQ0KDQog
ICAgLS1fX3JlbWFpbmluZzsNCiAgICArK19fZmlyc3Q7DQogIH0NCiAgcmV0
dXJuIF9fb3V0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4NCl9S
YW5kb21BY2Nlc3NJdGVyIF9fcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9EaXN0YW5j
ZSBfX24pDQp7DQogIF9EaXN0YW5jZSBfX20gPSAwOw0KICBfRGlzdGFuY2Ug
X190ID0gX19uOw0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9f
bSA8IF9fbjsgKytfX20sICsrX19maXJzdCkNCiAgICBfX291dFtfX21dID0g
Kl9fZmlyc3Q7DQoNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQog
ICAgKytfX3Q7DQogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZG9tX251bWJl
cihfX3QpOw0KICAgIGlmIChfX00gPCBfX24pDQogICAgICBfX291dFtfX01d
ID0gKl9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICB9DQoNCiAgcmV0dXJu
IF9fb3V0ICsgX19tOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsDQogICAgICAgICAgY2xhc3Mg
X1JhbmRvbU51bWJlckdlbmVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPg0KX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19yYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdl
bmVyYXRvciYgX19yYW5kLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX24pDQp7DQoNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
Cg0KDQogIF9EaXN0YW5jZSBfX20gPSAwOw0KICBfRGlzdGFuY2UgX190ID0g
X19uOw0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fbSA8IF9f
bjsgKytfX20sICsrX19maXJzdCkNCiAgICBfX291dFtfX21dID0gKl9fZmly
c3Q7DQoNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAgKytf
X3Q7DQogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZChfX3QpOw0KICAgIGlm
IChfX00gPCBfX24pDQogICAgICBfX291dFtfX01dID0gKl9fZmlyc3Q7DQog
ICAgKytfX2ZpcnN0Ow0KICB9DQoNCiAgcmV0dXJuIF9fb3V0ICsgX19tOw0K
fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXI+DQppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXINCnJhbmRv
bV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwNCiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2xhc3QpDQp7DQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICA7
DQoNCg0KICByZXR1cm4gX19yYW5kb21fc2FtcGxlKF9fZmlyc3QsIF9fbGFz
dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwgX19v
dXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsDQogICAg
ICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4NCmlubGluZSBf
UmFuZG9tQWNjZXNzSXRlcg0KcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX291dF9maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19vdXRfbGFzdCwNCiAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVy
YXRvciYgX19yYW5kKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgcmV0dXJuIF9fcmFu
ZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgX19vdXRfZmlyc3QsIF9fcmFuZCwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX291dF9sYXN0IC0gX19vdXRfZmlyc3QpOw0KfQ0KDQoN
Cg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRp
Y2F0ZT4NCl9Gb3J3YXJkSXRlciBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIg
X19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNh
dGUgX19wcmVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRf
aXRlcmF0b3JfdGFnKQ0Kew0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJl
dHVybiBfX2ZpcnN0Ow0KDQogIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQ0K
ICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsN
Cg0KICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsNCg0KICB3aGls
ZSAoKytfX25leHQgIT0gX19sYXN0KQ0KICAgIGlmIChfX3ByZWQoKl9fbmV4
dCkpIHsNCiAgICAgIHN3YXAoKl9fZmlyc3QsICpfX25leHQpOw0KICAgICAg
KytfX2ZpcnN0Ow0KICAgIH0NCg0KICByZXR1cm4gX19maXJzdDsNCn0NCg0K
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1By
ZWRpY2F0ZT4NCl9CaWRpcmVjdGlvbmFsSXRlciBfX3BhcnRpdGlvbihfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnKQ0Kew0KICB3aGlsZSAodHJ1ZSkgew0KICAgIHdoaWxl
ICh0cnVlKQ0KICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgICAg
ICByZXR1cm4gX19maXJzdDsNCiAgICAgIGVsc2UgaWYgKF9fcHJlZCgqX19m
aXJzdCkpDQogICAgICAgICsrX19maXJzdDsNCiAgICAgIGVsc2UNCiAgICAg
ICAgYnJlYWs7DQogICAgLS1fX2xhc3Q7DQogICAgd2hpbGUgKHRydWUpDQog
ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgIHJldHVybiBf
X2ZpcnN0Ow0KICAgICAgZWxzZSBpZiAoIV9fcHJlZCgqX19sYXN0KSkNCiAg
ICAgICAgLS1fX2xhc3Q7DQogICAgICBlbHNlDQogICAgICAgIGJyZWFrOw0K
ICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOw0KICAgICsrX19maXJz
dDsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfUHJlZGljYXRlPg0KaW5saW5lIF9Gb3J3YXJkSXRlciBwYXJ0aXRp
b24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpDQp7DQoNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7DQoNCg0KICByZXR1cm4gX19wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0
LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0K
DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVk
aWNhdGUsIGNsYXNzIF9EaXN0YW5jZT4NCl9Gb3J3YXJkSXRlciBfX2lucGxh
Y2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4p
DQp7DQogIGlmIChfX2xlbiA9PSAxKQ0KICAgIHJldHVybiBfX3ByZWQoKl9f
Zmlyc3QpID8gX19sYXN0IDogX19maXJzdDsNCiAgX0ZvcndhcmRJdGVyIF9f
bWlkZGxlID0gX19maXJzdDsNCiAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4g
LyAyKTsNCiAgcmV0dXJuIHJvdGF0ZShfX2lucGxhY2Vfc3RhYmxlX3BhcnRp
dGlvbihfX2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiksDQog
ICAgICAgICAgICAgICAgX19taWRkbGUsDQogICAgICAgICAgICAgICAgX19p
bnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19taWRkbGUsIF9fbGFzdCwgX19w
cmVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbGVuIC0gX19sZW4gLyAyKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfUHJlZGlj
YXRlLA0KICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4NCl9Gb3J3YXJkSXRl
ciBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlz
dGFuY2UgX19sZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJf
c2l6ZSkNCnsNCiAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsNCiAg
ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsNCiAgICBfUG9p
bnRlciBfX3Jlc3VsdDIgPSBfX2J1ZmZlcjsNCiAgICBmb3IgKCA7IF9fZmly
c3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQ0KICAgICAgaWYgKF9fcHJlZCgq
X19maXJzdCkpIHsNCiAgICAgICAgKl9fcmVzdWx0MSA9ICpfX2ZpcnN0Ow0K
ICAgICAgICArK19fcmVzdWx0MTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0K
ICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7DQogICAgICAgICsrX19y
ZXN1bHQyOw0KICAgICAgfQ0KICAgIGNvcHkoX19idWZmZXIsIF9fcmVzdWx0
MiwgX19yZXN1bHQxKTsNCiAgICByZXR1cm4gX19yZXN1bHQxOw0KICB9DQog
IGVsc2Ugew0KICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7
DQogICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsNCiAgICByZXR1
cm4gcm90YXRlKF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19maXJzdCwgX19taWRkbGUsIF9fcHJl
ZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyLCBfX2J1
ZmZlciwgX19idWZmZXJfc2l6ZSksDQogICAgICAgICAgICAgICAgICAgIF9f
bWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICBfX3N0YWJsZV9wYXJ0aXRp
b25fYWRhcHRpdmUoDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlk
ZGxlLCBfX2xhc3QsIF9fcHJlZCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19sZW4gLSBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl
KSk7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+
DQppbmxpbmUgX0ZvcndhcmRJdGVyDQpfX3N0YWJsZV9wYXJ0aXRpb25fYXV4
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0K
ICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX1Rw
KiwgX0Rpc3RhbmNlKikNCnsNCiAgX1RlbXBvcmFyeV9idWZmZXI8X0Zvcndh
cmRJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7DQogIGlmIChf
X2J1Zi5zaXplKCkgPiAwKQ0KICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRp
b25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19i
dWYucmVxdWVzdGVkX3NpemUoKSksDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1Zi5zaXplKCkp
Ow0KICBlbHNlDQogICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFydGl0
aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19idWYucmVxdWVz
dGVkX3NpemUoKSkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfUHJlZGljYXRlPg0KaW5saW5lIF9Gb3J3YXJkSXRlciBz
dGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1ByZWRpY2F0ZSBfX3ByZWQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19m
aXJzdCA9PSBfX2xhc3QpDQogICAgcmV0dXJuIF9fZmlyc3Q7DQogIGVsc2UN
CiAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2F1eChfX2ZpcnN0LCBf
X2xhc3QsIF9fcHJlZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsN
Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfVHA+DQpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0aXRp
b24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1RwIF9fcGl2b3QpDQp7DQogIHdoaWxlICh0cnVlKSB7DQogICAgd2hp
bGUgKCpfX2ZpcnN0IDwgX19waXZvdCkNCiAgICAgICsrX19maXJzdDsNCiAg
ICAtLV9fbGFzdDsNCiAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpDQog
ICAgICAtLV9fbGFzdDsNCiAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkN
CiAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIGl0ZXJfc3dhcChfX2ZpcnN0
LCBfX2xhc3QpOw0KICAgICsrX19maXJzdDsNCiAgfQ0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg
X0NvbXBhcmU+DQpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0
aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgd2hp
bGUgKHRydWUpIHsNCiAgICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bp
dm90KSkNCiAgICAgICsrX19maXJzdDsNCiAgICAtLV9fbGFzdDsNCiAgICB3
aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQ0KICAgICAgLS1fX2xh
c3Q7DQogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpDQogICAgICByZXR1
cm4gX19maXJzdDsNCiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsN
CiAgICArK19fZmlyc3Q7DQogIH0NCn0NCg0KY29uc3QgaW50IF9fc3RsX3Ro
cmVzaG9sZCA9IDE2Ow0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfVHA+DQp2b2lkIF9fdW5ndWFyZGVkX2xpbmVh
cl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwp
DQp7DQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsNCiAg
LS1fX25leHQ7DQogIHdoaWxlIChfX3ZhbCA8ICpfX25leHQpIHsNCiAgICAq
X19sYXN0ID0gKl9fbmV4dDsNCiAgICBfX2xhc3QgPSBfX25leHQ7DQogICAg
LS1fX25leHQ7DQogIH0NCiAgKl9fbGFzdCA9IF9fdmFsOw0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0NvbXBhcmU+DQp2b2lkIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0Kew0K
ICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7DQogIC0tX19u
ZXh0Ow0KICB3aGlsZSAoX19jb21wKF9fdmFsLCAqX19uZXh0KSkgew0KICAg
ICpfX2xhc3QgPSAqX19uZXh0Ow0KICAgIF9fbGFzdCA9IF9fbmV4dDsNCiAg
ICAtLV9fbmV4dDsNCiAgfQ0KICAqX19sYXN0ID0gX192YWw7DQp9DQoNCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPg0K
aW5saW5lIHZvaWQgX19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQ0Kew0KICBfVHAgX192YWwgPSAq
X19sYXN0Ow0KICBpZiAoX192YWwgPCAqX19maXJzdCkgew0KICAgIGNvcHlf
YmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QgKyAxKTsNCiAgICAq
X19maXJzdCA9IF9fdmFsOw0KICB9DQogIGVsc2UNCiAgICBfX3VuZ3VhcmRl
ZF9saW5lYXJfaW5zZXJ0KF9fbGFzdCwgX192YWwpOw0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg
X0NvbXBhcmU+DQppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJl
IF9fY29tcCkNCnsNCiAgX1RwIF9fdmFsID0gKl9fbGFzdDsNCiAgaWYgKF9f
Y29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7DQogICAgY29weV9iYWNrd2FyZChf
X2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOw0KICAgICpfX2ZpcnN0ID0g
X192YWw7DQogIH0NCiAgZWxzZQ0KICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9p
bnNlcnQoX19sYXN0LCBfX3ZhbCwgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPg0Kdm9pZCBfX2luc2VydGlvbl9z
b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCkNCnsNCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1
cm47DQogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCAr
IDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQ0KICAgIF9fbGluZWFyX2luc2Vy
dChfX2ZpcnN0LCBfX2ksIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Nv
bXBhcmU+DQp2b2lkIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KSByZXR1cm47DQogIGZvciAoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19p
KQ0KICAgIF9fbGluZWFyX2luc2VydChfX2ZpcnN0LCBfX2ksIF9fdmFsdWVf
dHlwZShfX2ZpcnN0KSwgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+DQp2b2lkIF9fdW5ndWFy
ZGVkX2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQ0Kew0KICBmb3IgKF9SYW5k
b21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsr
X19pKQ0KICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVHAo
Kl9faSkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXI+DQppbmxpbmUgdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsNCiAg
X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFz
dCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlPg0Kdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCosIF9Db21w
YXJlIF9fY29tcCkNCnsNCiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg
PSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkNCiAgICBfX3VuZ3Vh
cmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1RwKCpfX2kpLCBfX2NvbXApOw0K
fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9Db21wYXJlPg0KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9u
X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgX191bmd1YXJkZWRfaW5zZXJ0
aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9f
Zmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
b21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
Pg0Kdm9pZCBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0Kew0KICBpZiAoX19sYXN0IC0gX19m
aXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgew0KICAgIF9faW5zZXJ0aW9uX3Nv
cnQoX19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCk7DQogICAg
X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9fc3RsX3Ro
cmVzaG9sZCwgX19sYXN0KTsNCiAgfQ0KICBlbHNlDQogICAgX19pbnNlcnRp
b25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBf
X2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApDQp7DQogIGlmIChfX2xh
c3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7DQogICAgX19pbnNl
cnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xk
LCBfX2NvbXApOw0KICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fbGFzdCwgX19jb21wKTsNCiAg
fQ0KICBlbHNlDQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh
c3QsIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4NCmlu
bGluZSBfU2l6ZSBfX2xnKF9TaXplIF9fbikNCnsNCiAgX1NpemUgX19rOw0K
ICBmb3IgKF9fayA9IDA7IF9fbiAhPSAxOyBfX24gPj49IDEpICsrX19rOw0K
ICByZXR1cm4gX19rOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+DQp2b2lkIF9faW50
cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9U
cCosDQogICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1p
dCkNCnsNCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJl
c2hvbGQpIHsNCiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7DQogICAg
ICBwYXJ0aWFsX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QpOw0KICAg
ICAgcmV0dXJuOw0KICAgIH0NCiAgICAtLV9fZGVwdGhfbGltaXQ7DQogICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQ0KICAgICAgX191bmd1YXJkZWRf
cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChf
X2xhc3QgLSBfX2ZpcnN0KS8yKSwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsNCiAgICBfX2lu
dHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRo
X2xpbWl0KTsNCiAgICBfX2xhc3QgPSBfX2N1dDsNCiAgfQ0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX1NpemUsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX2ludHJvc29ydF9s
b29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLA0KICAg
ICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21w
YXJlIF9fY29tcCkNCnsNCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBf
X3N0bF90aHJlc2hvbGQpIHsNCiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAw
KSB7DQogICAgICBwYXJ0aWFsX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2xh
c3QsIF9fY29tcCk7DQogICAgICByZXR1cm47DQogICAgfQ0KICAgIC0tX19k
ZXB0aF9saW1pdDsNCiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9DQog
ICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19m
aXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAt
IDEpLCBfX2NvbXApKSwNCiAgICAgICBfX2NvbXApOw0KICAgIF9faW50cm9z
b3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9fZGVwdGhfbGlt
aXQsIF9fY29tcCk7DQogICAgX19sYXN0ID0gX19jdXQ7DQogIH0NCn0NCg0K
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPg0KaW5saW5lIHZv
aWQgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19m
aXJzdCAhPSBfX2xhc3QpIHsNCiAgICBfX2ludHJvc29ydF9sb29wKF9fZmly
c3QsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlw
ZShfX2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19sYXN0
IC0gX19maXJzdCkgKiAyKTsNCiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QsIF9fbGFzdCk7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSB2
b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQogIGlmIChfX2ZpcnN0ICE9
IF9fbGFzdCkgew0KICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19s
YXN0LA0KICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmly
c3QpLA0KICAgICAgICAgICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2Zp
cnN0KSAqIDIsDQogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAg
IF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2Nv
bXApOw0KICB9DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXI+DQp2b2lkIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0Kew0KICBpZiAoX19sYXN0
IC0gX19maXJzdCA8IDE1KSB7DQogICAgX19pbnNlcnRpb25fc29ydChfX2Zp
cnN0LCBfX2xhc3QpOw0KICAgIHJldHVybjsNCiAgfQ0KICBfUmFuZG9tQWNj
ZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz
dCkgLyAyOw0KICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19t
aWRkbGUpOw0KICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9f
bGFzdCk7DQogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19t
aWRkbGUsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX21p
ZGRsZSAtIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19s
YXN0IC0gX19taWRkbGUpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX2lucGxhY2Vf
c3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KICBpZiAoX19sYXN0IC0gX19maXJz
dCA8IDE1KSB7DQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh
c3QsIF9fY29tcCk7DQogICAgcmV0dXJuOw0KICB9DQogIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0
KSAvIDI7DQogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21p
ZGRsZSwgX19jb21wKTsNCiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlk
ZGxlLCBfX2xhc3QsIF9fY29tcCk7DQogIF9fbWVyZ2Vfd2l0aG91dF9idWZm
ZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyMSwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIyLA0K
ICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4NCnZvaWQgX19tZXJnZV9zb3J0
X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsDQogICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsDQogICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3Vs
dCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplKQ0Kew0KICBfRGlzdGFuY2UgX190
d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsNCg0KICB3aGlsZSAoX19sYXN0
IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7DQogICAgX19yZXN1bHQgPSBt
ZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsDQogICAgICAg
ICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3Qg
KyBfX3R3b19zdGVwLA0KICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQp
Ow0KICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsNCiAgfQ0KDQogIF9fc3Rl
cF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19z
dGVwX3NpemUpOw0KICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVw
X3NpemUsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LA0KICAgICAg
ICBfX3Jlc3VsdCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMiwNCiAgICAgICAg
ICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX21l
cmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwNCiAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFz
dCwNCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIy
IF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUsDQogICAgICAgICAg
ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgX0Rpc3RhbmNl
IF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7DQoNCiAgd2hpbGUgKF9f
bGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgew0KICAgIF9fcmVzdWx0
ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLA0KICAg
ICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2Zp
cnN0ICsgX190d29fc3RlcCwNCiAgICAgICAgICAgICAgICAgICAgIF9fcmVz
dWx0LA0KICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCiAgICBfX2Zp
cnN0ICs9IF9fdHdvX3N0ZXA7DQogIH0NCiAgX19zdGVwX3NpemUgPSBtaW4o
X0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7DQoN
CiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLA0KICAg
ICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwNCiAgICAgICAg
X19yZXN1bHQsDQogICAgICAgIF9fY29tcCk7DQp9DQoNCmNvbnN0IGludCBf
X3N0bF9jaHVua19zaXplID0gNzsNCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQp2b2lkIF9fY2h1bmtf
aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsIF9EaXN0YW5jZSBfX2NodW5rX3NpemUpDQp7DQogIHdoaWxlIChf
X2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgew0KICAgIF9faW5z
ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSk7
DQogICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7DQogIH0NCiAgX19pbnNl
cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOw0KfQ0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xh
c3MgX0NvbXBhcmU+DQp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0Nv
bXBhcmUgX19jb21wKQ0Kew0KICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+
PSBfX2NodW5rX3NpemUpIHsNCiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly
c3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7DQogICAgX19m
aXJzdCArPSBfX2NodW5rX3NpemU7DQogIH0NCiAgX19pbnNlcnRpb25fc29y
dChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNz
IF9EaXN0YW5jZT4NCnZvaWQgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rp
c3RhbmNlKikNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19m
aXJzdDsNCiAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsg
X19sZW47DQoNCiAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1
bmtfc2l6ZTsNCiAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf
X2xhc3QsIF9fc3RlcF9zaXplKTsNCg0KICB3aGlsZSAoX19zdGVwX3NpemUg
PCBfX2xlbikgew0KICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9f
bGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplKTsNCiAgICBfX3N0ZXBfc2l6
ZSAqPSAyOw0KICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1
ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7DQogICAgX19zdGVw
X3NpemUgKj0gMjsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2Us
DQogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+DQp2b2lkIF9fbWVyZ2Vfc29y
dF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9EaXN0YW5jZSosIF9Db21wYXJlIF9fY29tcCkNCnsN
CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsNCiAgX1Bv
aW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47DQoNCiAg
X0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1bmtfc2l6ZTsNCiAg
X19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3Rl
cF9zaXplLCBfX2NvbXApOw0KDQogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9f
bGVuKSB7DQogICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0
LCBfX2J1ZmZlciwgX19zdGVwX3NpemUsIF9fY29tcCk7DQogICAgX19zdGVw
X3NpemUgKj0gMjsNCiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwg
X19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7
DQogICAgX19zdGVwX3NpemUgKj0gMjsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFz
cyBfRGlzdGFuY2U+DQp2b2lkIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVyIF9f
YnVmZmVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZSBfX2J1ZmZlcl9zaXplKQ0Kew0KICBfRGlzdGFuY2UgX19sZW4gPSAoX19s
YXN0IC0gX19maXJzdCArIDEpIC8gMjsNCiAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47DQogIGlmIChfX2xlbiA+IF9f
YnVmZmVyX3NpemUpIHsNCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7DQog
ICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBf
X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7DQogIH0NCiAgZWxzZSB7DQogICAg
X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7DQogICAgX19tZXJnZV9zb3J0X3dp
dGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCAoX0Rpc3Rh
bmNlKikwKTsNCiAgfQ0KICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3Qp
LA0KICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21p
ZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwg
Y2xhc3MgX0Rpc3RhbmNlLA0KICAgICAgICAgIGNsYXNzIF9Db21wYXJlPg0K
dm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6
ZSwgX0NvbXBhcmUgX19jb21wKQ0Kew0KICBfRGlzdGFuY2UgX19sZW4gPSAo
X19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsNCiAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47DQogIGlmIChfX2xlbiA+
IF9fYnVmZmVyX3NpemUpIHsNCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZl
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQogICAgX19z
dGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZl
ciwgX19idWZmZXJfc2l6ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29tcCk7DQogIH0NCiAgZWxzZSB7DQogICAgX19tZXJnZV9zb3J0X3dp
dGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9EaXN0
YW5jZSopMCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bXApOw0KICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwg
X19sYXN0LCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICB9DQogIF9fbWVyZ2Vf
YWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNl
KF9fbWlkZGxlIC0gX19maXJzdCksDQogICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVy
X3NpemUsDQogICAgICAgICAgICAgICAgICAgX19jb21wKTsNCn0NCg0KdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNs
YXNzIF9EaXN0YW5jZT4NCmlubGluZSB2b2lkIF9fc3RhYmxlX3NvcnRfYXV4
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCos
IF9EaXN0YW5jZSopDQp7DQogIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21B
Y2Nlc3NJdGVyLCBfVHA+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOw0KICBpZiAo
YnVmLmJlZ2luKCkgPT0gMCkNCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQo
X19maXJzdCwgX19sYXN0KTsNCiAgZWxzZQ0KICAgIF9fc3RhYmxlX3NvcnRf
YWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgpKSk7
DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPg0KaW5s
aW5lIHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKiwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsN
CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9UcD4g
YnVmKF9fZmlyc3QsIF9fbGFzdCk7DQogIGlmIChidWYuYmVnaW4oKSA9PSAw
KQ0KICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3Qs
IF9fY29tcCk7DQogIGVsc2UNCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZl
KF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUoKSksDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+DQppbmxpbmUgdm9pZCBzdGFibGVf
c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0Kew0KDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KDQoNCiAgX19zdGFibGVfc29ydF9hdXgoX19maXJzdCwgX19s
YXN0LA0KICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJz
dCksDQogICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2Zp
cnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZCBzdGFibGVfc29ydChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2Nv
bXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7DQoNCg0KDQogIF9fc3RhYmxlX3NvcnRfYXV4
KF9fZmlyc3QsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgX192YWx1
ZV90eXBlKF9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICBfX2Rpc3Rh
bmNlX3R5cGUoX19maXJzdCksDQogICAgICAgICAgICAgICAgICAgIF9fY29t
cCk7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9UcD4NCnZvaWQgX19wYXJ0aWFsX3NvcnQoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUs
DQogICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwgX1RwKikNCnsNCiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsN
CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19p
IDwgX19sYXN0OyArK19faSkNCiAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQ0K
ICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVHAo
Kl9faSksDQogICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2Zp
cnN0KSk7DQogIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4NCmlubGluZSB2
b2lkIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0K
ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIF9fcGFydGlh
bF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fdmFsdWVfdHlw
ZShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQgX19w
YXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19taWRkbGUsDQogICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21w
KQ0Kew0KICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7
DQogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9f
aSA8IF9fbGFzdDsgKytfX2kpDQogICAgaWYgKF9fY29tcCgqX19pLCAqX19m
aXJzdCkpDQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2ksIF9UcCgqX19pKSwgX19jb21wLA0KICAgICAgICAgICAgICAgICBfX2Rp
c3RhbmNlX3R5cGUoX19maXJzdCkpOw0KICBzb3J0X2hlYXAoX19maXJzdCwg
X19taWRkbGUsIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZCBw
YXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs
ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K
DQoNCiAgX19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFz
dCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2NvbXApOw0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9EaXN0YW5jZSwNCiAgICAgICAgICBjbGFzcyBfVHA+DQpf
UmFuZG9tQWNjZXNzSXRlciBfX3BhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0
ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0
X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLCBfVHAq
KQ0Kew0KICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkg
cmV0dXJuIF9fcmVzdWx0X2xhc3Q7DQogIF9SYW5kb21BY2Nlc3NJdGVyIF9f
cmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0Ow0KICB3aGlsZShf
X2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19y
ZXN1bHRfbGFzdCkgew0KICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19m
aXJzdDsNCiAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsNCiAgICArK19fZmly
c3Q7DQogIH0NCiAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3Vs
dF9yZWFsX2xhc3QpOw0KICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsN
CiAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHRfZmlyc3QpDQogICAgICBf
X2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2UoMCksDQog
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xh
c3QgLSBfX3Jlc3VsdF9maXJzdCksDQogICAgICAgICAgICAgICAgICAgIF9U
cCgqX19maXJzdCkpOw0KICAgICsrX19maXJzdDsNCiAgfQ0KICBzb3J0X2hl
YXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7DQogIHJl
dHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4NCmlubGlu
ZSBfUmFuZG9tQWNjZXNzSXRlcg0KcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LA0KICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFz
dCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KDQoNCiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0X2NvcHkoX19m
aXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFzdCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBl
KF9fcmVzdWx0X2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfQ29tcGFyZSwNCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz
IF9UcD4NCl9SYW5kb21BY2Nlc3NJdGVyIF9fcGFydGlhbF9zb3J0X2NvcHko
X0lucHV0SXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19yZXN1bHRfZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0
X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKiwgX1RwKikNCnsNCiAg
aWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBf
X3Jlc3VsdF9sYXN0Ow0KICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9y
ZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsNCiAgd2hpbGUoX19maXJzdCAh
PSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xh
c3QpIHsNCiAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7DQog
ICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7DQogICAgKytfX2ZpcnN0Ow0KICB9
DQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9s
YXN0LCBfX2NvbXApOw0KICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsN
CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQ0K
ICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNl
KDApLA0KICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRf
cmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLA0KICAgICAgICAgICAgICAg
ICAgICBfVHAoKl9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICBfX2Nv
bXApOw0KICAgICsrX19maXJzdDsNCiAgfQ0KICBzb3J0X2hlYXAoX19yZXN1
bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsNCiAgcmV0
dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf
Q29tcGFyZT4NCmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcg0KcGFydGlhbF9z
b3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwNCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVz
dWx0X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19yZXN1bHRfbGFzdCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsNCg0KDQoNCiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0X2NvcHko
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFz
dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19y
ZXN1bHRfZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+DQp2b2lkIF9fbnRo
X2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19udGgsDQogICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQ0Kew0KICB3aGlsZSAoX19sYXN0IC0g
X19maXJzdCA+IDMpIHsNCiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9
DQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigq
X19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFz
dCAtIDEpKSkpOw0KICAgIGlmIChfX2N1dCA8PSBfX250aCkNCiAgICAgIF9f
Zmlyc3QgPSBfX2N1dDsNCiAgICBlbHNlDQogICAgICBfX2xhc3QgPSBfX2N1
dDsNCiAgfQ0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7
DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4NCmlu
bGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0Kew0KDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KDQoNCiAgX19udGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19s
YXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Nv
bXBhcmU+DQp2b2lkIF9fbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsDQogICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29t
cGFyZSBfX2NvbXApDQp7DQogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4g
Mykgew0KICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0NCiAgICAgIF9f
dW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9f
Zmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t
cCkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQog
ICAgaWYgKF9fY3V0IDw9IF9fbnRoKQ0KICAgICAgX19maXJzdCA9IF9fY3V0
Ow0KICAgIGVsc2UNCiAgICAgIF9fbGFzdCA9IF9fY3V0Ow0KICB9DQogIF9f
aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOw0KfQ0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9D
b21wYXJlPg0KaW5saW5lIHZvaWQgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsDQogICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
IF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgX19u
dGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVlX3R5
cGUoX19maXJzdCksIF9fY29tcCk7DQp9DQoNCg0KDQoNCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNl
Pg0KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfRGlzdGFuY2UqKQ0Kew0K
ICBfRGlzdGFuY2UgX19sZW4gPSAwOw0KICBkaXN0YW5jZShfX2ZpcnN0LCBf
X2xhc3QsIF9fbGVuKTsNCiAgX0Rpc3RhbmNlIF9faGFsZjsNCiAgX0Zvcndh
cmRJdGVyIF9fbWlkZGxlOw0KDQogIHdoaWxlIChfX2xlbiA+IDApIHsNCiAg
ICBfX2hhbGYgPSBfX2xlbiA+PiAxOw0KICAgIF9fbWlkZGxlID0gX19maXJz
dDsNCiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOw0KICAgIGlmICgq
X19taWRkbGUgPCBfX3ZhbCkgew0KICAgICAgX19maXJzdCA9IF9fbWlkZGxl
Ow0KICAgICAgKytfX2ZpcnN0Ow0KICAgICAgX19sZW4gPSBfX2xlbiAtIF9f
aGFsZiAtIDE7DQogICAgfQ0KICAgIGVsc2UNCiAgICAgIF9fbGVuID0gX19o
YWxmOw0KICB9DQogIHJldHVybiBfX2ZpcnN0Ow0KfQ0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQppbmxpbmUgX0Zvcndh
cmRJdGVyIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfVHAmIF9fdmFsKQ0Kew0KDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7DQoNCiAgcmV0dXJuIF9fbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0
LCBfX3ZhbCwNCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90
eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Rpc3Rh
bmNlPg0KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBf
X2NvbXAsIF9EaXN0YW5jZSopDQp7DQogIF9EaXN0YW5jZSBfX2xlbiA9IDA7
DQogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOw0KICBfRGlz
dGFuY2UgX19oYWxmOw0KICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7DQoNCiAg
d2hpbGUgKF9fbGVuID4gMCkgew0KICAgIF9faGFsZiA9IF9fbGVuID4+IDE7
DQogICAgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAgIGFkdmFuY2UoX19taWRk
bGUsIF9faGFsZik7DQogICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFs
KSkgew0KICAgICAgX19maXJzdCA9IF9fbWlkZGxlOw0KICAgICAgKytfX2Zp
cnN0Ow0KICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7DQogICAg
fQ0KICAgIGVsc2UNCiAgICAgIF9fbGVuID0gX19oYWxmOw0KICB9DQogIHJl
dHVybiBfX2ZpcnN0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPg0KaW5saW5lIF9Gb3J3
YXJkSXRlciBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQ0Kew0K
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgcmV0dXJu
IF9fbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21w
LA0KICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19m
aXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4NCl9Gb3J3YXJkSXRlciBfX3Vw
cGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw
JiBfX3ZhbCwgX0Rpc3RhbmNlKikNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuID0g
MDsNCiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7DQogIF9E
aXN0YW5jZSBfX2hhbGY7DQogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsNCg0K
ICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX19oYWxmID0gX19sZW4gPj4g
MTsNCiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7DQogICAgYWR2YW5jZShfX21p
ZGRsZSwgX19oYWxmKTsNCiAgICBpZiAoX192YWwgPCAqX19taWRkbGUpDQog
ICAgICBfX2xlbiA9IF9faGFsZjsNCiAgICBlbHNlIHsNCiAgICAgIF9fZmly
c3QgPSBfX21pZGRsZTsNCiAgICAgICsrX19maXJzdDsNCiAgICAgIF9fbGVu
ID0gX19sZW4gLSBfX2hhbGYgLSAxOw0KICAgIH0NCiAgfQ0KICByZXR1cm4g
X19maXJzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1RwPg0KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3Zh
bCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogIHJldHVybiBfX3Vw
cGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsDQogICAgICAgICAg
ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4NCl9Gb3J3YXJkSXRlciBf
X3VwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQ0Kew0K
ICBfRGlzdGFuY2UgX19sZW4gPSAwOw0KICBkaXN0YW5jZShfX2ZpcnN0LCBf
X2xhc3QsIF9fbGVuKTsNCiAgX0Rpc3RhbmNlIF9faGFsZjsNCiAgX0Zvcndh
cmRJdGVyIF9fbWlkZGxlOw0KDQogIHdoaWxlIChfX2xlbiA+IDApIHsNCiAg
ICBfX2hhbGYgPSBfX2xlbiA+PiAxOw0KICAgIF9fbWlkZGxlID0gX19maXJz
dDsNCiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOw0KICAgIGlmIChf
X2NvbXAoX192YWwsICpfX21pZGRsZSkpDQogICAgICBfX2xlbiA9IF9faGFs
ZjsNCiAgICBlbHNlIHsNCiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsNCiAg
ICAgICsrX19maXJzdDsNCiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYg
LSAxOw0KICAgIH0NCiAgfQ0KICByZXR1cm4gX19maXJzdDsNCn0NCg0KdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf
Q29tcGFyZT4NCmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWws
IF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KDQogIHJldHVybiBfX3VwcGVyX2JvdW5kKF9fZmlyc3Qs
IF9fbGFzdCwgX192YWwsIF9fY29tcCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFu
Y2U+DQpwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPg0KX19lcXVh
bF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwNCiAgICAgICAgICAgICAgX0Rpc3Rh
bmNlKikNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsNCiAgZGlzdGFuY2Uo
X19maXJzdCwgX19sYXN0LCBfX2xlbik7DQogIF9EaXN0YW5jZSBfX2hhbGY7
DQogIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0Ow0K
DQogIHdoaWxlIChfX2xlbiA+IDApIHsNCiAgICBfX2hhbGYgPSBfX2xlbiA+
PiAxOw0KICAgIF9fbWlkZGxlID0gX19maXJzdDsNCiAgICBhZHZhbmNlKF9f
bWlkZGxlLCBfX2hhbGYpOw0KICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkg
ew0KICAgICAgX19maXJzdCA9IF9fbWlkZGxlOw0KICAgICAgKytfX2ZpcnN0
Ow0KICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7DQogICAgfQ0K
ICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQ0KICAgICAgX19sZW4g
PSBfX2hhbGY7DQogICAgZWxzZSB7DQogICAgICBfX2xlZnQgPSBsb3dlcl9i
b3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOw0KICAgICAgYWR2YW5j
ZShfX2ZpcnN0LCBfX2xlbik7DQogICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91
bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwpOw0KICAgICAgcmV0dXJu
IHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19y
aWdodCk7DQogICAgfQ0KICB9DQogIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRl
ciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsNCn0NCg0KdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0KaW5saW5l
IHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+DQplcXVhbF9yYW5n
ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg
Y29uc3QgX1RwJiBfX3ZhbCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
DQogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192
YWwsDQogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf
X2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4N
CnBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+DQpfX2VxdWFsX3Jh
bmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LCBjb25zdCBfVHAmIF9fdmFsLA0KICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXAsIF9EaXN0YW5jZSopDQp7DQogIF9EaXN0YW5jZSBfX2xlbiA9IDA7
DQogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOw0KICBfRGlz
dGFuY2UgX19oYWxmOw0KICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVm
dCwgX19yaWdodDsNCg0KICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX19o
YWxmID0gX19sZW4gPj4gMTsNCiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7DQog
ICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICBpZiAoX19jb21w
KCpfX21pZGRsZSwgX192YWwpKSB7DQogICAgICBfX2ZpcnN0ID0gX19taWRk
bGU7DQogICAgICArK19fZmlyc3Q7DQogICAgICBfX2xlbiA9IF9fbGVuIC0g
X19oYWxmIC0gMTsNCiAgICB9DQogICAgZWxzZSBpZiAoX19jb21wKF9fdmFs
LCAqX19taWRkbGUpKQ0KICAgICAgX19sZW4gPSBfX2hhbGY7DQogICAgZWxz
ZSB7DQogICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21p
ZGRsZSwgX192YWwsIF9fY29tcCk7DQogICAgICBhZHZhbmNlKF9fZmlyc3Qs
IF9fbGVuKTsNCiAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlk
ZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsNCiAgICAgIHJldHVybiBw
YWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmln
aHQpOw0KICAgIH0NCiAgfQ0KICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIs
IF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7DQp9DQoNCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Nv
bXBhcmU+DQppbmxpbmUgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRl
cj4NCmVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLA0KICAgICAgICAgICAg
X0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7DQoNCiAgcmV0dXJuIF9fZXF1YWxfcmFuZ2UoX19maXJzdCwg
X19sYXN0LCBfX3ZhbCwgX19jb21wLA0KICAgICAgICAgICAgICAgICAgICAg
ICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQpib29sIGJpbmFyeV9z
ZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsDQogICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkNCnsN
Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOw0KDQogIF9Gb3J3YXJkSXRlciBfX2kg
PSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsNCiAgcmV0
dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3ZhbCA8ICpfX2kpOw0KfQ0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlPg0KYm9vbCBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9UcCYgX192YWwsDQogICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7DQoNCiAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9f
Zmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7DQogIHJldHVybiBfX2kg
IT0gX19sYXN0ICYmICFfX2NvbXAoX192YWwsICpfX2kpOw0KfQ0KDQoNCg0K
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy
MiwgY2xhc3MgX091dHB1dEl0ZXI+DQpfT3V0cHV0SXRlciBtZXJnZShfSW5w
dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy
MiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3aGlsZSAoX19maXJz
dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7DQogICAg
aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgew0KICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QyOw0KICAgICAgKytfX2ZpcnN0MjsNCiAgICB9DQogICAg
ZWxzZSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7DQogICAgICAr
K19fZmlyc3QxOw0KICAgIH0NCiAgICArK19fcmVzdWx0Ow0KICB9DQogIHJl
dHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBf
X2xhc3QxLCBfX3Jlc3VsdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRl
ciwNCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4NCl9PdXRwdXRJdGVyIG1l
cmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LA0KICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KDQoNCg0KICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
X2ZpcnN0MiAhPSBfX2xhc3QyKSB7DQogICAgaWYgKF9fY29tcCgqX19maXJz
dDIsICpfX2ZpcnN0MSkpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
MjsNCiAgICAgICsrX19maXJzdDI7DQogICAgfQ0KICAgIGVsc2Ugew0KICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MTsN
CiAgICB9DQogICAgKytfX3Jlc3VsdDsNCiAgfQ0KICByZXR1cm4gY29weShf
X2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y
ZXN1bHQpKTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp
b25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4NCnZvaWQgX19tZXJnZV93aXRo
b3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19t
aWRkbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQ0Kew0KICBp
ZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApDQogICAgcmV0dXJuOw0K
ICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsNCiAgICBpZiAoKl9fbWlk
ZGxlIDwgKl9fZmlyc3QpDQogICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19t
aWRkbGUpOw0KICAgIHJldHVybjsNCiAgfQ0KICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0Ow0KICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7DQogIF9EaXN0YW5jZSBfX2xl
bjExID0gMDsNCiAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOw0KICBpZiAoX19s
ZW4xID4gX19sZW4yKSB7DQogICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7DQog
ICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7DQogICAgX19zZWNv
bmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmly
c3RfY3V0KTsNCiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0
LCBfX2xlbjIyKTsNCiAgfQ0KICBlbHNlIHsNCiAgICBfX2xlbjIyID0gX19s
ZW4yIC8gMjsNCiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7
DQogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21p
ZGRsZSwgKl9fc2Vjb25kX2N1dCk7DQogICAgZGlzdGFuY2UoX19maXJzdCwg
X19maXJzdF9jdXQsIF9fbGVuMTEpOw0KICB9DQogIF9CaWRpcmVjdGlvbmFs
SXRlciBfX25ld19taWRkbGUNCiAgICA9IHJvdGF0ZShfX2ZpcnN0X2N1dCwg
X19taWRkbGUsIF9fc2Vjb25kX2N1dCk7DQogIF9fbWVyZ2Vfd2l0aG91dF9i
dWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsNCiAg
X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25k
X2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIpOw0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2Us
IGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX21lcmdlX3dpdGhvdXRfYnVmZmVy
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0Kew0KICBpZiAoX19sZW4x
ID09IDAgfHwgX19sZW4yID09IDApDQogICAgcmV0dXJuOw0KICBpZiAoX19s
ZW4xICsgX19sZW4yID09IDIpIHsNCiAgICBpZiAoX19jb21wKCpfX21pZGRs
ZSwgKl9fZmlyc3QpKQ0KICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlk
ZGxlKTsNCiAgICByZXR1cm47DQogIH0NCiAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3RfY3V0ID0gX19maXJzdDsNCiAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOw0KICBfRGlzdGFuY2UgX19sZW4x
MSA9IDA7DQogIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsNCiAgaWYgKF9fbGVu
MSA+IF9fbGVuMikgew0KICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOw0KICAg
IGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOw0KICAgIF9fc2Vjb25k
X2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0
X2N1dCwgX19jb21wKTsNCiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNv
bmRfY3V0LCBfX2xlbjIyKTsNCiAgfQ0KICBlbHNlIHsNCiAgICBfX2xlbjIy
ID0gX19sZW4yIC8gMjsNCiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19s
ZW4yMik7DQogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0
LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsNCiAgICBkaXN0
YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7DQogIH0NCiAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZQ0KICAgID0gcm90YXRl
KF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsNCiAgX19t
ZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19u
ZXdfbWlkZGxlLCBfX2xlbjExLCBfX2xlbjIyLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29tcCk7DQogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo
X19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0g
X19sZW4xMSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBf
X2xlbjIyLCBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGly
ZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwNCiAg
ICAgICAgICBjbGFzcyBfRGlzdGFuY2U+DQpfQmlkaXJlY3Rpb25hbEl0ZXIx
IF9fcm90YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJz
dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyMSBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xh
c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
cjIgX19idWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQ0Kew0KICBfQmlkaXJl
Y3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsNCiAgaWYgKF9fbGVuMSA+IF9f
bGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgew0KICAgIF9fYnVm
ZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOw0K
ICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7
DQogICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19m
aXJzdCk7DQogIH0NCiAgZWxzZSBpZiAoX19sZW4xIDw9IF9fYnVmZmVyX3Np
emUpIHsNCiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2J1ZmZlcik7DQogICAgY29weShfX21pZGRsZSwgX19sYXN0LCBf
X2ZpcnN0KTsNCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwg
X19idWZmZXJfZW5kLCBfX2xhc3QpOw0KICB9DQogIGVsc2UNCiAgICByZXR1
cm4gcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOw0KfQ0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiwNCiAgICAgICAgICBjbGFzcyBfQmlkaXJlY3Rp
b25hbEl0ZXIzPg0KX0JpZGlyZWN0aW9uYWxJdGVyMyBfX21lcmdlX2JhY2t3
YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
MSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
MiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQpDQp7DQogIGlmIChf
X2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAgIHJldHVybiBjb3B5X2JhY2t3YXJk
KF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7DQogIGlmIChfX2ZpcnN0
MiA9PSBfX2xhc3QyKQ0KICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmly
c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7DQogIC0tX19sYXN0MTsNCiAgLS1f
X2xhc3QyOw0KICB3aGlsZSAodHJ1ZSkgew0KICAgIGlmICgqX19sYXN0MiA8
ICpfX2xhc3QxKSB7DQogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOw0K
ICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpDQogICAgICAgIHJldHVy
biBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0
KTsNCiAgICAgIC0tX19sYXN0MTsNCiAgICB9DQogICAgZWxzZSB7DQogICAg
ICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOw0KICAgICAgaWYgKF9fZmlyc3Qy
ID09IF9fbGFzdDIpDQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f
Zmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsNCiAgICAgIC0tX19sYXN0
MjsNCiAgICB9DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsDQogICAg
ICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMywgY2xhc3MgX0NvbXBh
cmU+DQpfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFja3dhcmQoX0Jp
ZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFz
dDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz
dDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQogIGlm
IChfX2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAgIHJldHVybiBjb3B5X2JhY2t3
YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7DQogIGlmIChfX2Zp
cnN0MiA9PSBfX2xhc3QyKQ0KICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f
Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7DQogIC0tX19sYXN0MTsNCiAg
LS1fX2xhc3QyOw0KICB3aGlsZSAodHJ1ZSkgew0KICAgIGlmIChfX2NvbXAo
Kl9fbGFzdDIsICpfX2xhc3QxKSkgew0KICAgICAgKi0tX19yZXN1bHQgPSAq
X19sYXN0MTsNCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAg
ICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3Qy
LCBfX3Jlc3VsdCk7DQogICAgICAtLV9fbGFzdDE7DQogICAgfQ0KICAgIGVs
c2Ugew0KICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsNCiAgICAgIGlm
IChfX2ZpcnN0MiA9PSBfX2xhc3QyKQ0KICAgICAgICByZXR1cm4gY29weV9i
YWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7DQogICAg
ICAtLV9fbGFzdDI7DQogICAgfQ0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3Mg
X1BvaW50ZXI+DQp2b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg
ICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwNCiAg
ICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3Rh
bmNlIF9fYnVmZmVyX3NpemUpDQp7DQogIGlmIChfX2xlbjEgPD0gX19sZW4y
ICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7DQogICAgX1BvaW50ZXIg
X19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZm
ZXIpOw0KICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlk
ZGxlLCBfX2xhc3QsIF9fZmlyc3QpOw0KICB9DQogIGVsc2UgaWYgKF9fbGVu
MiA8PSBfX2J1ZmZlcl9zaXplKSB7DQogICAgX1BvaW50ZXIgX19idWZmZXJf
ZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7DQogICAg
X19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIs
IF9fYnVmZmVyX2VuZCwgX19sYXN0KTsNCiAgfQ0KICBlbHNlIHsNCiAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0Ow0KICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsN
CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7DQogICAgX0Rpc3RhbmNlIF9f
bGVuMjIgPSAwOw0KICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsNCiAgICAg
IF9fbGVuMTEgPSBfX2xlbjEgLyAyOw0KICAgICAgYWR2YW5jZShfX2ZpcnN0
X2N1dCwgX19sZW4xMSk7DQogICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9i
b3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOw0KICAgICAg
ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7DQog
ICAgfQ0KICAgIGVsc2Ugew0KICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7
DQogICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7DQogICAg
ICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxl
LCAqX19zZWNvbmRfY3V0KTsNCiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9f
Zmlyc3RfY3V0LCBfX2xlbjExKTsNCiAgICB9DQogICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fbmV3X21pZGRsZSA9DQogICAgICBfX3JvdGF0ZV9hZGFwdGl2
ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4x
IC0gX19sZW4xMSwNCiAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIs
IF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsNCiAgICBfX21lcmdlX2FkYXB0
aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVu
MTEsDQogICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwg
X19idWZmZXJfc2l6ZSk7DQogICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19t
aWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjEx
LA0KICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19i
dWZmZXIsIF9fYnVmZmVyX3NpemUpOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xh
c3MgX1BvaW50ZXIsDQogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+DQp2b2lk
IF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs
DQogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
IF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwNCiAgICAgICAgICAgICAgICAg
ICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np
emUsDQogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0K
ew0KICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZm
ZXJfc2l6ZSkgew0KICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHko
X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsNCiAgICBtZXJnZShfX2J1
ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0
LCBfX2NvbXApOw0KICB9DQogIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZl
cl9zaXplKSB7DQogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShf
X21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7DQogICAgX19tZXJnZV9iYWNr
d2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2Vu
ZCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCiAg
fQ0KICBlbHNlIHsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9j
dXQgPSBfX2ZpcnN0Ow0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29u
ZF9jdXQgPSBfX21pZGRsZTsNCiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7
DQogICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOw0KICAgIGlmIChfX2xlbjEg
PiBfX2xlbjIpIHsNCiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOw0KICAg
ICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7DQogICAgICBfX3Nl
Y29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19m
aXJzdF9jdXQsIF9fY29tcCk7DQogICAgICBkaXN0YW5jZShfX21pZGRsZSwg
X19zZWNvbmRfY3V0LCBfX2xlbjIyKTsNCiAgICB9DQogICAgZWxzZSB7DQog
ICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsNCiAgICAgIGFkdmFuY2UoX19z
ZWNvbmRfY3V0LCBfX2xlbjIyKTsNCiAgICAgIF9fZmlyc3RfY3V0ID0gdXBw
ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9f
Y29tcCk7DQogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwg
X19sZW4xMSk7DQogICAgfQ0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25l
d19taWRkbGUgPQ0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9j
dXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEs
DQogICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwg
X19idWZmZXJfc2l6ZSk7DQogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0
LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLA0KICAgICAg
ICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3Np
emUsIF9fY29tcCk7DQogICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRk
bGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLA0K
ICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZm
ZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7DQogIH0NCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfRGlzdGFuY2U+DQppbmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopDQp7DQogIF9EaXN0
YW5jZSBfX2xlbjEgPSAwOw0KICBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sZW4xKTsNCiAgX0Rpc3RhbmNlIF9fbGVuMiA9IDA7DQogIGRpc3Rh
bmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7DQoNCiAgX1RlbXBvcmFy
eV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVHA+IF9fYnVmKF9fZmly
c3QsIF9fbGFzdCk7DQogIGlmIChfX2J1Zi5iZWdpbigpID09IDApDQogICAg
X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19s
YXN0LCBfX2xlbjEsIF9fbGVuMik7DQogIGVsc2UNCiAgICBfX21lcmdlX2Fk
YXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19s
ZW4yLA0KICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rp
c3RhbmNlKF9fYnVmLnNpemUoKSkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsDQogICAgICAgICAgY2xh
c3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSB2b2lkIF9f
aW5wbGFjZV9tZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3Rh
bmNlKiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBh
cmUgX19jb21wKQ0Kew0KICBfRGlzdGFuY2UgX19sZW4xID0gMDsNCiAgZGlz
dGFuY2UoX19maXJzdCwgX19taWRkbGUsIF9fbGVuMSk7DQogIF9EaXN0YW5j
ZSBfX2xlbjIgPSAwOw0KICBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0LCBf
X2xlbjIpOw0KDQogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFs
SXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOw0KICBpZiAoX19i
dWYuYmVnaW4oKSA9PSAwKQ0KICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo
X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsIF9f
Y29tcCk7DQogIGVsc2UNCiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLA0KICAgICAgICAg
ICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNp
emUoKSksDQogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KfQ0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPg0KaW5saW5lIHZv
aWQgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19sYXN0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBp
ZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3Qp
DQogICAgcmV0dXJuOw0KICBfX2lucGxhY2VfbWVyZ2VfYXV4KF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgX192
YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBj
bGFzcyBfQ29tcGFyZT4NCmlubGluZSB2b2lkIGlucGxhY2VfbWVyZ2UoX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwg
X0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQogIGlm
IChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkN
CiAgICByZXR1cm47DQogIF9faW5wbGFjZV9tZXJnZV9hdXgoX19maXJzdCwg
X19taWRkbGUsIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICBfX3Zh
bHVlX3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwN
CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KfQ0KDQoNCg0KDQoN
Cg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMj4NCmJvb2wgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQ0Kew0KDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3aGlsZSAo
X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0K
ICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpDQogICAgICByZXR1cm4g
ZmFsc2U7DQogICAgZWxzZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIpDQog
ICAgICArK19fZmlyc3QxOw0KICAgIGVsc2UNCiAgICAgICsrX19maXJzdDEs
ICsrX19maXJzdDI7DQoNCiAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7
DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lu
cHV0SXRlcjIsIGNsYXNzIF9Db21wYXJlPg0KYm9vbCBpbmNsdWRlcyhfSW5w
dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAg
ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f
bGFzdDIsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ow0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICB3aGlsZSAoX19maXJz
dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0KICAgIGlm
IChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQ0KICAgICAgcmV0dXJu
IGZhbHNlOw0KICAgIGVsc2UgaWYoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmly
c3QyKSkNCiAgICAgICsrX19maXJzdDE7DQogICAgZWxzZQ0KICAgICAgKytf
X2ZpcnN0MSwgKytfX2ZpcnN0MjsNCg0KICByZXR1cm4gX19maXJzdDIgPT0g
X19sYXN0MjsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBj
bGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+DQpfT3V0cHV0
SXRlciBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0
ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7DQoNCg0KICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
X2ZpcnN0MiAhPSBfX2xhc3QyKSB7DQogICAgaWYgKCpfX2ZpcnN0MSA8ICpf
X2ZpcnN0Mikgew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAg
ICAgKytfX2ZpcnN0MTsNCiAgICB9DQogICAgZWxzZSBpZiAoKl9fZmlyc3Qy
IDwgKl9fZmlyc3QxKSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7
DQogICAgICArK19fZmlyc3QyOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQog
ICAgICArK19fZmlyc3QyOw0KICAgIH0NCiAgICArK19fcmVzdWx0Ow0KICB9
DQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmly
c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0
cHV0SXRlciwNCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4NCl9PdXRwdXRJ
dGVyIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAg
ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19j
b21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICB3aGlsZSAoX19maXJz
dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7DQogICAg
aWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsNCiAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQogICAg
fQ0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkp
IHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsNCiAgICAgICsrX19m
aXJzdDI7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19maXJz
dDI7DQogICAgfQ0KICAgICsrX19yZXN1bHQ7DQogIH0NCiAgcmV0dXJuIGNv
cHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEs
IF9fcmVzdWx0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KX091
dHB1dEl0ZXIgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f
bGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgd2hpbGUg
KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikN
CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQ0KICAgICAgKytfX2Zp
cnN0MTsNCiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpDQog
ICAgICArK19fZmlyc3QyOw0KICAgIGVsc2Ugew0KICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19m
aXJzdDI7DQogICAgICArK19fcmVzdWx0Ow0KICAgIH0NCiAgcmV0dXJuIF9f
cmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs
YXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwNCiAgICAgICAg
ICBjbGFzcyBfQ29tcGFyZT4NCl9PdXRwdXRJdGVyIHNldF9pbnRlcnNlY3Rp
b24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUg
X19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0KICAg
IGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgKytf
X2ZpcnN0MTsNCiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19m
aXJzdDEpKQ0KICAgICAgKytfX2ZpcnN0MjsNCiAgICBlbHNlIHsNCiAgICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQog
ICAgICArK19fZmlyc3QyOw0KICAgICAgKytfX3Jlc3VsdDsNCiAgICB9DQog
IHJldHVybiBfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+
DQpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf
X2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3aGlsZSAo
X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0K
ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsNCiAgICAgICpfX3Jl
c3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQogICAgICAr
K19fcmVzdWx0Ow0KICAgIH0NCiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAq
X19maXJzdDEpDQogICAgICArK19fZmlyc3QyOw0KICAgIGVsc2Ugew0KICAg
ICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDI7DQogICAgfQ0KICBy
ZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOw0KfQ0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0
ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwNCiAgICAgICAgICBjbGFzcyBfQ29t
cGFyZT4NCl9PdXRwdXRJdGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0
ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KDQoNCg0KICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQ0KICAgIGlmIChfX2NvbXAoKl9fZmly
c3QxLCAqX19maXJzdDIpKSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDE7DQogICAgICArK19fZmlyc3QxOw0KICAgICAgKytfX3Jlc3VsdDsNCiAg
ICB9DQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3Qx
KSkNCiAgICAgICsrX19maXJzdDI7DQogICAgZWxzZSB7DQogICAgICArK19f
Zmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MjsNCiAgICB9DQogIHJldHVybiBj
b3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7DQp9DQoNCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNs
YXNzIF9PdXRwdXRJdGVyPg0KX091dHB1dEl0ZXINCnNldF9zeW1tZXRyaWNf
ZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkNCnsNCg0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsNCg0KDQogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIpDQogICAgaWYgKCpfX2ZpcnN0MSA8ICpf
X2ZpcnN0Mikgew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAg
ICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19yZXN1bHQ7DQogICAgfQ0KICAg
IGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgew0KICAgICAgKl9f
cmVzdWx0ID0gKl9fZmlyc3QyOw0KICAgICAgKytfX2ZpcnN0MjsNCiAgICAg
ICsrX19yZXN1bHQ7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgKytfX2Zp
cnN0MTsNCiAgICAgICsrX19maXJzdDI7DQogICAgfQ0KICByZXR1cm4gY29w
eShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwg
X19yZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx
LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsDQogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmU+DQpfT3V0cHV0SXRlcg0Kc2V0X3N5bW1l
dHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCg0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsNCg0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICBpZiAoX19jb21wKCpf
X2ZpcnN0MSwgKl9fZmlyc3QyKSkgew0KICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19yZXN1bHQ7
DQogICAgfQ0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2Zp
cnN0MSkpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsNCiAgICAg
ICsrX19maXJzdDI7DQogICAgICArK19fcmVzdWx0Ow0KICAgIH0NCiAgICBl
bHNlIHsNCiAgICAgICsrX19maXJzdDE7DQogICAgICArK19fZmlyc3QyOw0K
ICAgIH0NCiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHko
X19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7DQp9DQoNCg0KDQoNCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+DQpfRm9yd2FyZEl0ZXIgbWF4
X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1
cm4gX19maXJzdDsNCiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJz
dDsNCiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAgaWYgKCpf
X3Jlc3VsdCA8ICpfX2ZpcnN0KQ0KICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0
Ow0KICByZXR1cm4gX19yZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJlPg0KX0ZvcndhcmRJdGVyIG1h
eF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7DQoNCg0KDQogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0
dXJuIF9fZmlyc3Q7DQogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmly
c3Q7DQogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQ0KICAgIGlmIChf
X2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJz
dDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyPg0KX0ZvcndhcmRJdGVyIG1pbl9lbGVtZW50KF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQ0Kew0KDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K
DQogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7DQog
IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7DQogIHdoaWxlICgr
K19fZmlyc3QgIT0gX19sYXN0KQ0KICAgIGlmICgqX19maXJzdCA8ICpfX3Jl
c3VsdCkNCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsNCiAgcmV0dXJuIF9f
cmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfQ29tcGFyZT4NCl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN
Cg0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0Ow0K
ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Ow0KICB3aGlsZSAo
KytfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0
LCAqX19yZXN1bHQpKQ0KICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0Ow0KICBy
ZXR1cm4gX19yZXN1bHQ7DQp9DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf
QmlkaXJlY3Rpb25hbEl0ZXI+DQpib29sIG5leHRfcGVybXV0YXRpb24oX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KQ0KICAgIHJldHVybiBmYWxzZTsNCiAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7DQogICsrX19pOw0KICBpZiAoX19p
ID09IF9fbGFzdCkNCiAgICByZXR1cm4gZmFsc2U7DQogIF9faSA9IF9fbGFz
dDsNCiAgLS1fX2k7DQoNCiAgZm9yKDs7KSB7DQogICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9faWkgPSBfX2k7DQogICAgLS1fX2k7DQogICAgaWYgKCpfX2kg
PCAqX19paSkgew0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9f
bGFzdDsNCiAgICAgIHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQ0KICAgICAg
ICB7fQ0KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsNCiAgICAgIHJldmVy
c2UoX19paSwgX19sYXN0KTsNCiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0N
CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsNCiAgICAgIHJldmVyc2UoX19m
aXJzdCwgX19sYXN0KTsNCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQog
IH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwg
Y2xhc3MgX0NvbXBhcmU+DQpib29sIG5leHRfcGVybXV0YXRpb24oX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
c3QsDQogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0K
ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KQ0KICAgIHJldHVybiBmYWxzZTsNCiAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9faSA9IF9fZmlyc3Q7DQogICsrX19pOw0KICBpZiAoX19pID09IF9f
bGFzdCkNCiAgICByZXR1cm4gZmFsc2U7DQogIF9faSA9IF9fbGFzdDsNCiAg
LS1fX2k7DQoNCiAgZm9yKDs7KSB7DQogICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9faWkgPSBfX2k7DQogICAgLS1fX2k7DQogICAgaWYgKF9fY29tcCgqX19p
LCAqX19paSkpIHsNCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBf
X2xhc3Q7DQogICAgICB3aGlsZSAoIV9fY29tcCgqX19pLCAqLS1fX2opKQ0K
ICAgICAgICB7fQ0KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsNCiAgICAg
IHJldmVyc2UoX19paSwgX19sYXN0KTsNCiAgICAgIHJldHVybiB0cnVlOw0K
ICAgIH0NCiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsNCiAgICAgIHJldmVy
c2UoX19maXJzdCwgX19sYXN0KTsNCiAgICAgIHJldHVybiBmYWxzZTsNCiAg
ICB9DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlcj4NCmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0
ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkNCnsNCg0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
DQogICAgcmV0dXJuIGZhbHNlOw0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19p
ID0gX19maXJzdDsNCiAgKytfX2k7DQogIGlmIChfX2kgPT0gX19sYXN0KQ0K
ICAgIHJldHVybiBmYWxzZTsNCiAgX19pID0gX19sYXN0Ow0KICAtLV9faTsN
Cg0KICBmb3IoOzspIHsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9
IF9faTsNCiAgICAtLV9faTsNCiAgICBpZiAoKl9faWkgPCAqX19pKSB7DQog
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0Ow0KICAgICAg
d2hpbGUgKCEoKi0tX19qIDwgKl9faSkpDQogICAgICAgIHt9DQogICAgICBp
dGVyX3N3YXAoX19pLCBfX2opOw0KICAgICAgcmV2ZXJzZShfX2lpLCBfX2xh
c3QpOw0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KICAgIGlmIChfX2kg
PT0gX19maXJzdCkgew0KICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3Qp
Ow0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCiAgfQ0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFy
ZT4NCmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwNCiAgICAgICAg
ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KDQoNCg0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAg
cmV0dXJuIGZhbHNlOw0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19m
aXJzdDsNCiAgKytfX2k7DQogIGlmIChfX2kgPT0gX19sYXN0KQ0KICAgIHJl
dHVybiBmYWxzZTsNCiAgX19pID0gX19sYXN0Ow0KICAtLV9faTsNCg0KICBm
b3IoOzspIHsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsN
CiAgICAtLV9faTsNCiAgICBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkgew0K
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsNCiAgICAg
IHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpDQogICAgICAgIHt9DQog
ICAgICBpdGVyX3N3YXAoX19pLCBfX2opOw0KICAgICAgcmV2ZXJzZShfX2lp
LCBfX2xhc3QpOw0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KICAgIGlm
IChfX2kgPT0gX19maXJzdCkgew0KICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBf
X2xhc3QpOw0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCiAgfQ0KfQ0K
DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3
YXJkSXRlcj4NCl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVy
IF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0
ZXIgX19sYXN0MikNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0K
ICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpDQog
ICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRl
ciAhPSBfX2xhc3QyOyArK19faXRlcikNCiAgICAgIGlmICgqX19maXJzdDEg
PT0gKl9faXRlcikNCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOw0KICByZXR1
cm4gX19sYXN0MTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4N
Cl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0
MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRl
IF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsNCg0KDQoNCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xh
c3QxOyArK19fZmlyc3QxKQ0KICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRl
ciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpDQog
ICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9faXRlcikpDQogICAgICAg
IHJldHVybiBfX2ZpcnN0MTsNCiAgcmV0dXJuIF9fbGFzdDE7DQp9DQojIDMz
OTAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGdvLmgiIDMNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBj
bGFzcyBfRm9yd2FyZEl0ZXIyPg0KX0ZvcndhcmRJdGVyMSBfX2ZpbmRfZW5k
KF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0
MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9f
Zmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRl
cmF0b3JfdGFnKQ0Kew0KICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikNCiAg
ICByZXR1cm4gX19sYXN0MTsNCiAgZWxzZSB7DQogICAgX0ZvcndhcmRJdGVy
MSBfX3Jlc3VsdCA9IF9fbGFzdDE7DQogICAgd2hpbGUgKDEpIHsNCiAgICAg
IF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0DQogICAgICAgID0gc2VhcmNo
KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7DQogICAg
ICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpDQogICAgICAgIHJldHVy
biBfX3Jlc3VsdDsNCiAgICAgIGVsc2Ugew0KICAgICAgICBfX3Jlc3VsdCA9
IF9fbmV3X3Jlc3VsdDsNCiAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1
bHQ7DQogICAgICAgICsrX19maXJzdDE7DQogICAgICB9DQogICAgfQ0KICB9
DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBf
Rm9yd2FyZEl0ZXIyLA0KICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNh
dGU+DQpfRm9yd2FyZEl0ZXIxIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBf
X2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJk
SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3
YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXAp
DQp7DQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQ0KICAgIHJldHVybiBf
X2xhc3QxOw0KICBlbHNlIHsNCiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0
ID0gX19sYXN0MTsNCiAgICB3aGlsZSAoMSkgew0KICAgICAgX0ZvcndhcmRJ
dGVyMSBfX25ld19yZXN1bHQNCiAgICAgICAgPSBzZWFyY2goX19maXJzdDEs
IF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOw0KICAgICAg
aWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQ0KICAgICAgICByZXR1cm4g
X19yZXN1bHQ7DQogICAgICBlbHNlIHsNCiAgICAgICAgX19yZXN1bHQgPSBf
X25ld19yZXN1bHQ7DQogICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0
Ow0KICAgICAgICArK19fZmlyc3QxOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0K
fQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyPg0KX0JpZGlyZWN0aW9uYWxJdGVy
MQ0KX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBf
QmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIg
X19sYXN0MiwNCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQ0Kew0KDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgdHlwZWRlZiByZXZlcnNl
X2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsNCiAg
dHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+
IF9SZXZJdGVyMjsNCg0KICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEp
Ow0KICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOw0KICBfUmV2SXRl
cjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19y
bGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0
ZXIyKF9fbGFzdDIpLCBfX3JsYXN0Mik7DQoNCiAgaWYgKF9fcnJlc3VsdCA9
PSBfX3JsYXN0MSkNCiAgICByZXR1cm4gX19sYXN0MTsNCiAgZWxzZSB7DQog
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5i
YXNlKCk7DQogICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmly
c3QyLCBfX2xhc3QyKSk7DQogICAgcmV0dXJuIF9fcmVzdWx0Ow0KICB9DQp9
DQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXIyLA0KICAgICAgICAgIGNsYXNzIF9CaW5h
cnlQcmVkaWNhdGU+DQpfQmlkaXJlY3Rpb25hbEl0ZXIxDQpfX2ZpbmRfZW5k
KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFs
SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
MiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLA0KICAg
ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcsDQogICAgICAgICAgIF9CaW5hcnlQcmVkaWNh
dGUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7DQoNCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlv
bmFsSXRlcjE+IF9SZXZJdGVyMTsNCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh
dG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsNCg0KICBfUmV2
SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOw0KICBfUmV2SXRlcjIgX19ybGFz
dDIoX19maXJzdDIpOw0KICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNo
KF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0
MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0K
DQogIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpDQogICAgcmV0dXJuIF9f
bGFzdDE7DQogIGVsc2Ugew0KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19y
ZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOw0KICAgIGFkdmFuY2UoX19yZXN1
bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOw0KICAgIHJldHVy
biBfX3Jlc3VsdDsNCiAgfQ0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+DQppbmxpbmUgX0Zv
cndhcmRJdGVyMQ0KZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwg
X0ZvcndhcmRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgX0ZvcndhcmRJdGVy
MiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQ0Kew0KDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICByZXR1cm4gX19maW5k
X2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsDQog
ICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
dDEpLA0KICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5
KF9fZmlyc3QyKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLA0KICAgICAgICAgIGNsYXNzIF9C
aW5hcnlQcmVkaWNhdGU+DQppbmxpbmUgX0ZvcndhcmRJdGVyMQ0KZmluZF9l
bmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xh
c3QxLA0KICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zvcndh
cmRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBf
X2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0K
DQogIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2Zp
cnN0MiwgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRv
cl9jYXRlZ29yeShfX2ZpcnN0MSksDQogICAgICAgICAgICAgICAgICAgIF9f
aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLA0KICAgICAgICAgICAgICAg
ICAgICBfX2NvbXApOw0KfQ0KDQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPg0KYm9vbCBfX2lz
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX0Rpc3RhbmNlIF9f
bikNCnsNCiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gMDsNCiAgZm9yIChfRGlz
dGFuY2UgX19jaGlsZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkg
ew0KICAgIGlmIChfX2ZpcnN0W19fcGFyZW50XSA8IF9fZmlyc3RbX19jaGls
ZF0pDQogICAgICByZXR1cm4gZmFsc2U7DQogICAgaWYgKChfX2NoaWxkICYg
MSkgPT0gMCkNCiAgICAgICsrX19wYXJlbnQ7DQogIH0NCiAgcmV0dXJuIHRy
dWU7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPg0K
Ym9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1N0
cmljdFdlYWtPcmRlcmluZyBfX2NvbXAsDQogICAgICAgICAgICAgICBfRGlz
dGFuY2UgX19uKQ0Kew0KICBfRGlzdGFuY2UgX19wYXJlbnQgPSAwOw0KICBm
b3IgKF9EaXN0YW5jZSBfX2NoaWxkID0gMTsgX19jaGlsZCA8IF9fbjsgKytf
X2NoaWxkKSB7DQogICAgaWYgKF9fY29tcChfX2ZpcnN0W19fcGFyZW50XSwg
X19maXJzdFtfX2NoaWxkXSkpDQogICAgICByZXR1cm4gZmFsc2U7DQogICAg
aWYgKChfX2NoaWxkICYgMSkgPT0gMCkNCiAgICAgICsrX19wYXJlbnQ7DQog
IH0NCiAgcmV0dXJuIHRydWU7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlcj4NCmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQ0K
ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsNCg0KDQogIHJldHVybiBfX2lzX2hlYXAoX19m
aXJzdCwgX19sYXN0IC0gX19maXJzdCk7DQp9DQoNCg0KdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVy
aW5nPg0KaW5saW5lIGJvb2wgaXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAg
ICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQ0Kew0KDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsNCg0KDQoNCiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0
LCBfX2NvbXAsIF9fbGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQoNCg0KDQoNCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+DQpib29sIGlzX3NvcnRlZChf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkNCnsN
Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
DQoNCg0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgcmV0dXJuIHRy
dWU7DQoNCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7DQogIGZv
ciAoKytfX25leHQ7IF9fbmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25l
eHQsICsrX19uZXh0KSB7DQogICAgaWYgKCpfX25leHQgPCAqX19maXJzdCkN
CiAgICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KDQogIHJldHVybiB0cnVlOw0K
fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU3Ry
aWN0V2Vha09yZGVyaW5nPg0KYm9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg
ICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkNCnsNCg0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQogIGlm
IChfX2ZpcnN0ID09IF9fbGFzdCkNCiAgICByZXR1cm4gdHJ1ZTsNCg0KICBf
Rm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsNCiAgZm9yICgrK19fbmV4
dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25l
eHQpIHsNCiAgICBpZiAoX19jb21wKCpfX25leHQsICpfX2ZpcnN0KSkNCiAg
ICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KDQogIHJldHVybiB0cnVlOw0KfQ0K
DQp9DQojIDM3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMw0KIyA1MCAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMN
CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
YmFzaWNfc3RyaW5nLnRjYyIgMSAzDQojIDQzICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzDQpu
YW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGNvbnN0
IF9DaGFyVA0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46Og0KICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+DQogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQog
ICAgX1JlcDo6X1NfbWF4X3NpemUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXAp
KS9zaXplb2YoX0NoYXJUKSkgLSAxKSAvIDQ7DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+DQogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvczsNCg0KDQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+DQogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0
b3JhZ2VbDQogICAgKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsg
c2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07DQoN
Cg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5JdGVyPg0KICAgICAgX0NoYXJUKg0KICAgICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgICBfU19jb25z
dHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0Fs
bG9jJiBfX2EsDQogICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf
dGFnKQ0KICAgICAgew0KICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYg
X19hID09IF9BbGxvYygpKQ0KICAgICAgICAgIHJldHVybiBfU19lbXB0eV9y
ZXAoKS5fTV9yZWZjb3B5KCk7DQoNCiAgICAgICAgX0NoYXJUIF9fYnVmWzEw
MF07DQogICAgICAgIHNpemVfdHlwZSBfX2kgPSAwOw0KICAgICAgICB3aGls
ZSAoX19iZWcgIT0gX19lbmQgJiYgX19pIDwgc2l6ZW9mKF9fYnVmKSAvIHNp
emVvZihfQ2hhclQpKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIF9fYnVm
W19faSsrXSA9ICpfX2JlZzsNCiAgICAgICAgICAgICsrX19iZWc7DQogICAg
ICAgICAgfQ0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUo
X19pLCBfX2EpOw0KICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9N
X3JlZmRhdGEoKSwgX19idWYsIF9faSk7DQogICAgICAgIF9fci0+X01fbGVu
Z3RoID0gX19pOw0KICAgICAgICB0cnkNCiAgICAgICAgICB7DQoNCg0KDQog
ICAgICAgICAgICBmb3IgKDs7KQ0KICAgICAgICAgICAgICB7DQogICAgICAg
ICAgICAgICAgX0NoYXJUKiBfX3AgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9f
ci0+X01fbGVuZ3RoOw0KICAgICAgICAgICAgICAgIF9DaGFyVCogX19sYXN0
ID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5Ow0KICAg
ICAgICAgICAgICAgIGZvciAoOzspDQogICAgICAgICAgICAgICAgICB7DQog
ICAgICAgICAgICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAgICAg
ICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBf
X3ItPl9NX2xlbmd0aCA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOw0KICAg
ICAgICAgICAgICAgICAgICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFs
Ow0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fci0+X01fcmVm
ZGF0YSgpOw0KICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg
ICAgICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpDQogICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICpfX3ArKyA9ICpf
X2JlZzsNCiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsNCiAgICAgICAg
ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2xl
biA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOw0KICAgICAgICAgICAgICAg
IF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEs
IF9fYSk7DQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19h
bm90aGVyLT5fTV9yZWZkYXRhKCksDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsNCiAgICAg
ICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsNCiAgICAgICAgICAg
ICAgICBfX3IgPSBfX2Fub3RoZXI7DQogICAgICAgICAgICAgICAgX19yLT5f
TV9sZW5ndGggPSBfX2xlbjsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAg
IH0NCiAgICAgICAgY2F0Y2goLi4uKQ0KICAgICAgICAgIHsNCiAgICAgICAg
ICAgIF9fci0+X01fZGVzdHJveShfX2EpOw0KICAgICAgICAgICAgdGhyb3c7
DQogICAgICAgICAgfQ0KICAgICAgICByZXR1cm4gMDsNCiAgICAgIH0NCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4NCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0luSXRl
cj4NCiAgICAgIF9DaGFyVCoNCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
X1RyYWl0cyxfQWxsb2M+OjoNCiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVy
IF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwNCiAg
ICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykNCiAgICAg
IHsNCiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNp
emVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7DQoNCiAgICAgICAg
aWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkNCiAgICAg
ICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOw0KDQoN
CiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywg
X19hKTsNCiAgICAgICAgdHJ5DQogICAgICAgICAgeyBfU19jb3B5X2NoYXJz
KF9fci0+X01fcmVmZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9DQogICAgICAg
IGNhdGNoKC4uLikNCiAgICAgICAgICB7DQogICAgICAgICAgICBfX3ItPl9N
X2Rlc3Ryb3koX19hKTsNCiAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAg
IH0NCiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2RuZXc7DQoNCiAgICAg
ICAgX19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9IF9SZXA6Ol9TX3Rlcm1p
bmFsOw0KICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7DQogICAg
ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgX0NoYXJUKg0KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cywgX0FsbG9jPjo6DQogICAgX1Nf
Y29uc3RydWN0KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9B
bGxvYyYgX19hKQ0KICAgIHsNCiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2Eg
PT0gX0FsbG9jKCkpDQogICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5f
TV9yZWZjb3B5KCk7DQoNCg0KICAgICAgX1JlcCogX19yID0gX1JlcDo6X1Nf
Y3JlYXRlKF9fbiwgX19hKTsNCiAgICAgIHRyeQ0KICAgICAgICB7DQogICAg
ICAgICAgaWYgKF9fbikNCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3Np
Z24oX19yLT5fTV9yZWZkYXRhKCksIF9fbiwgX19jKTsNCiAgICAgICAgfQ0K
ICAgICAgY2F0Y2goLi4uKQ0KICAgICAgICB7DQogICAgICAgICAgX19yLT5f
TV9kZXN0cm95KF9fYSk7DQogICAgICAgICAgdGhyb3c7DQogICAgICAgIH0N
CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX19uOw0KICAgICAgX19yLT5fTV9y
ZWZkYXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOw0KICAgICAgcmV0
dXJuIF9fci0+X01fcmVmZGF0YSgpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoNCiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0cikNCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgpLT5fTV9n
cmFiKF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLA0KICAgICAg
ICAgICAgICAgICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpDQogICAgeyB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6DQogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9B
bGxvYyYgX19hKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNp
emVfdHlwZSgpLCBfQ2hhclQoKSwgX19hKSwgX19hKQ0KICAgIHsgfQ0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46Og0KICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24pDQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01f
Y2hlY2soX19wb3MpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxvYygpKSwgX0FsbG9j
KCkpDQogICAgeyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgYmFzaWNf
c3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf
X3BvcywNCiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3Qg
X0FsbG9jJiBfX2EpDQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qo
X19zdHIuX01fY2hlY2soX19wb3MpLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9fYSksIF9f
YSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBiYXNpY19z
dHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIGNvbnN0
IF9BbGxvYyYgX19hKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0
KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2EpDQogICAgeyB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6DQogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCog
X19zLCBjb25zdCBfQWxsb2MmIF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9T
X2NvbnN0cnVjdChfX3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19z
KSwgX19hKSwgX19hKQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0K
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0K
ICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBj
b25zdCBfQWxsb2MmIF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0
cnVjdChfX24sIF9fYywgX19hKSwgX19hKQ0KICAgIHsgfQ0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+
DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
DQogICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIgX19iZWcsIF9JbnB1dEl0
ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQ0KICAgIDogX01fZGF0YXBs
dXMoX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hKSwgX19hKQ0KICAg
IHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIpDQogICAgew0KICAgICAgaWYgKF9NX3JlcCgpICE9IF9f
c3RyLl9NX3JlcCgpKQ0KICAgICAgICB7DQoNCiAgICAgICAgICBhbGxvY2F0
b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7DQogICAgICAg
ICAgX0NoYXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9f
YSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKTsNCiAgICAgICAgICBfTV9yZXAo
KS0+X01fZGlzcG9zZShfX2EpOw0KICAgICAgICAgIF9NX2RhdGEoX190bXAp
Ow0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQNCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoNCiAgICBfTV9kZXN0
cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAoKQ0KICAgIHsNCiAgICAg
IHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01fY2FwYWNp
dHkgKyAxKSAqIHNpemVvZihfQ2hhclQpOw0KICAgICAgX1Jhd19ieXRlc19h
bGxvYyhfX2EpLmRlYWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
dGhpcyksIF9fc2l6ZSk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0K
ICAgIHZvaWQNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjpfTV9sZWFrX2hhcmQoKQ0KICAgIHsNCiAgICAgIGlmIChfTV9y
ZXAoKS0+X01faXNfc2hhcmVkKCkpDQogICAgICAgIF9NX211dGF0ZSgwLCAw
LCAwKTsNCiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7DQogICAg
fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQNCiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBfTV9tdXRh
dGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5
cGUgX19sZW4yKQ0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX29sZF9zaXpl
ID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3
X3NpemUgPSBfX29sZF9zaXplICsgX19sZW4yIC0gX19sZW4xOw0KICAgICAg
Y29uc3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19s
ZW4xOw0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfX29s
ZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7DQoNCiAgICAgIGlmIChfTV9yZXAo
KS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkp
DQogICAgICAgIHsNCg0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9
IGdldF9hbGxvY2F0b3IoKTsNCiAgICAgICAgICBfUmVwKiBfX3IgPSBfUmVw
OjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsNCiAgICAgICAgICB0cnkN
CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKF9fcG9zKQ0KICAg
ICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0
YSgpLCBfTV9kYXRhKCksIF9fcG9zKTsNCiAgICAgICAgICAgICAgaWYgKF9f
aG93X211Y2gpDQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHko
X19yLT5fTV9yZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NyYywgX19ob3dfbXVjaCk7
DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goLi4uKQ0KICAgICAg
ICAgICAgew0KICAgICAgICAgICAgICBfX3ItPl9NX2Rpc3Bvc2UoZ2V0X2Fs
bG9jYXRvcigpKTsNCiAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAg
ICB9DQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsNCiAg
ICAgICAgICBfTV9kYXRhKF9fci0+X01fcmVmZGF0YSgpKTsNCiAgICAgIH0N
CiAgICAgIGVsc2UgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVu
MikNCiAgICAgICAgew0KDQogICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUo
X01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNo
KTsNCiAgICAgICAgfQ0KICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJs
ZSgpOw0KICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3NpemU7
DQogICAgICBfTV9kYXRhKClbX19uZXdfc2l6ZV0gPSBfUmVwOjpfU190ZXJt
aW5hbDsNCg0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB2b2lk
DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpDQogICAgew0KICAgICAgaWYgKF9f
cmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hh
cmVkKCkpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAoX19yZXMgPiB0aGlz
LT5tYXhfc2l6ZSgpKQ0KICAgICAgICAgICAgX190aHJvd19sZW5ndGhfZXJy
b3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOw0KICAgICAgICAgIGFsbG9j
YXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsNCiAgICAgICAgICBf
Q2hhclQqIF9fdG1wID0gX01fcmVwKCktPl9NX2Nsb25lKF9fYSwgX19yZXMg
LSB0aGlzLT5zaXplKCkpOw0KICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNw
b3NlKF9fYSk7DQogICAgICAgICAgX01fZGF0YShfX3RtcCk7DQogICAgICAg
IH0NCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdm9pZCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpzd2FwKGJhc2lj
X3N0cmluZyYgX19zKQ0KICAgIHsNCiAgICAgIGlmIChfTV9yZXAoKS0+X01f
aXNfbGVha2VkKCkpDQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFi
bGUoKTsNCiAgICAgIGlmIChfX3MuX01fcmVwKCktPl9NX2lzX2xlYWtlZCgp
KQ0KICAgICAgICBfX3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOw0K
ICAgICAgaWYgKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2Fs
bG9jYXRvcigpKQ0KICAgICAgICB7DQogICAgICAgICAgX0NoYXJUKiBfX3Rt
cCA9IF9NX2RhdGEoKTsNCiAgICAgICAgICBfTV9kYXRhKF9fcy5fTV9kYXRh
KCkpOw0KICAgICAgICAgIF9fcy5fTV9kYXRhKF9fdG1wKTsNCiAgICAgICAg
fQ0KDQogICAgICBlbHNlDQogICAgICAgIHsNCiAgICAgICAgICBiYXNpY19z
dHJpbmcgX190bXAxKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcy5nZXRf
YWxsb2NhdG9yKCkpOw0KICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDIo
X19zLl9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsNCiAg
ICAgICAgICAqdGhpcyA9IF9fdG1wMjsNCiAgICAgICAgICBfX3MgPSBfX3Rt
cDE7DQogICAgICAgIH0NCiAgICB9DQojIDM1NiAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMw0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjpfUmVwKg0KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6Og0KICAgIF9TX2NyZWF0ZShz
aXplX3QgX19jYXBhY2l0eSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jKQ0KICAg
IHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOw0KDQoNCiAgICAgIGlmIChfX2Nh
cGFjaXR5ID4gX1NfbWF4X3NpemUpDQoNCg0KDQogICAgICAgIF9fdGhyb3df
bGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9TX2NyZWF0ZSIpOw0KDQoN
Cg0KDQogICAgICBzaXplX3QgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAq
IHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOw0KDQoNCiAgICAgIHZv
aWQqIF9fcGxhY2UgPSBfUmF3X2J5dGVzX2FsbG9jKF9fYWxsb2MpLmFsbG9j
YXRlKF9fc2l6ZSk7DQogICAgICBfUmVwICpfX3AgPSBuZXcgKF9fcGxhY2Up
IF9SZXA7DQogICAgICBfX3AtPl9NX2NhcGFjaXR5ID0gX19jYXBhY2l0eTsN
CiAgICAgIF9fcC0+X01fc2V0X3NoYXJhYmxlKCk7DQogICAgICBfX3AtPl9N
X2xlbmd0aCA9IDA7DQogICAgICByZXR1cm4gX19wOw0KICAgIH0NCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4NCiAgICBfQ2hhclQqDQogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6DQogICAgX01fY2xv
bmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19yZXMpDQog
ICAgew0KICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9NX2xl
bmd0aCArIF9fcmVzLCBfX2FsbG9jKTsNCiAgICAgIGlmIChfTV9sZW5ndGgp
DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsgdHJh
aXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEo
KSwgX01fbGVuZ3RoKTsgfQ0KICAgICAgICAgIGNhdGNoKC4uLikNCiAgICAg
ICAgICAgIHsNCiAgICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYWxs
b2MpOw0KICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgfQ0KICAgICAgX19yLT5fTV9sZW5ndGggPSBfTV9sZW5ndGg7DQog
ICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7DQogICAgfQ0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPg0KICBpbmxpbmUgYm9vbA0KDQoNCg0KDQogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6DQog
ICAgX1NfZXhjZXNzX3Nsb3Aoc2l6ZV90IF9fcywgc2l6ZV90IF9fcikNCg0K
ICAgIHsNCiAgICAgIHJldHVybiAyICogKF9fcyA8PSAxNiA/IDE2IDogX19z
KSA8IF9fcjsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdm9p
ZA0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQ0KICAgIHsNCiAg
ICAgIGlmIChfX24gPiBtYXhfc2l6ZSgpKQ0KICAgICAgICBfX3Rocm93X2xl
bmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUiKTsNCiAgICAgIHNp
emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19z
aXplIDwgX19uKQ0KICAgICAgICB0aGlzLT5hcHBlbmQoX19uIC0gX19zaXpl
LCBfX2MpOw0KICAgICAgZWxzZSBpZiAoX19uIDwgX19zaXplKQ0KICAgICAg
ICB0aGlzLT5lcmFzZShfX24pOw0KDQogICAgfQ0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+DQogICAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Jg0KICAg
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQog
ICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs
IF9JbnB1dEl0ZXIgX19rMSwNCiAgICAgICAgICAgICAgICAgX0lucHV0SXRl
ciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpDQogICAgICB7DQogICAgICAg
IGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7DQogICAgICAgIHJldHVy
biB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcy5fTV9pYmVnaW4oKSwg
X19zLl9NX2llbmQoKSk7DQogICAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
DQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPg0KICAgICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYNCiAgICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAg
ICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBf
Rm9yd2FyZEl0ZXIgX19rMSwNCiAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fazIsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0KICAgICAgew0KICAg
ICAgICBzaXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7DQogICAgICAg
IHNpemVfdHlwZSBfX2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOw0KICAgICAg
ICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihk
aXN0YW5jZShfX2sxLCBfX2syKSk7DQoNCiAgICAgICAgaWYgKF9fZG1heCA8
PSBfX2RuZXcpDQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJh
c2ljX3N0cmluZzo6X01fcmVwbGFjZSIpOw0KICAgICAgICBzaXplX3R5cGUg
X19vZmYgPSBfX2kxIC0gX01faWJlZ2luKCk7DQogICAgICAgIF9NX211dGF0
ZShfX29mZiwgX19kb2xkLCBfX2RuZXcpOw0KDQogICAgICAgIGlmIChfX2Ru
ZXcpDQogICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29m
ZiwgX19rMSwgX19rMik7DQoNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAg
ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgcmVwbGFjZShzaXplX3R5
cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0ciwNCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVf
dHlwZSBfX24yKQ0KICAgIHsNCiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNl
KF9NX2NoZWNrKF9fcG9zMSksIF9NX2ZvbGQoX19wb3MxLCBfX24xKSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2NoZWNrKF9fcG9z
MiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xk
KF9fcG9zMiwgX19uMikpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4N
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYNCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6DQogICAg
YXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAgew0KDQoN
Cg0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAg
ICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc2l6ZSArIHRoaXMtPnNpemUoKTsN
CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpDQogICAgICAg
IHRoaXMtPnJlc2VydmUoX19sZW4pOw0KICAgICAgcmV0dXJuIHRoaXMtPnJl
cGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2liZWdpbigp
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01faWVuZCgp
KTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46Og0KICAgIGFwcGVuZChjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw
ZSBfX24pDQogICAgew0KDQoNCg0KICAgICAgc2l6ZV90eXBlIF9fbGVuID0g
bWluKF9fc3RyLnNpemUoKSAtIF9fcG9zLCBfX24pICsgdGhpcy0+c2l6ZSgp
Ow0KICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkNCiAgICAg
ICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7DQogICAgICByZXR1cm4gdGhpcy0+
cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2so
X19wb3MpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01f
Zm9sZChfX3BvcywgX19uKSk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
Pg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+Jg0K
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoNCiAg
ICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pDQog
ICAgew0KICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6
ZSgpOw0KICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkNCiAg
ICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7DQogICAgICByZXR1cm4gdGhp
cy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zLCBfX3MgKyBf
X24pOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYNCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6DQogICAgYXBwZW5kKHNpemVf
dHlwZSBfX24sIF9DaGFyVCBfX2MpDQogICAgew0KICAgICAgc2l6ZV90eXBl
IF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOw0KICAgICAgaWYgKF9fbGVu
ID4gdGhpcy0+Y2FwYWNpdHkoKSkNCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShf
X2xlbik7DQogICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgp
LCBfTV9pZW5kKCksIF9fbiwgX19jKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxv
Yz4NCiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywNCiAgICAg
ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0Fs
bG9jPiYgX19yaHMpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiBfX3N0cmluZ190eXBlOw0KICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUg
X19zaXplX3R5cGU7DQogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9UcmFp
dHM6Omxlbmd0aChfX2xocyk7DQogICAgICBfX3N0cmluZ190eXBlIF9fc3Ry
Ow0KICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIF9fcmhzLnNpemUoKSk7
DQogICAgICBfX3N0ci5hcHBlbmQoX19saHMsIF9fbGhzICsgX19sZW4pOw0K
ICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsNCiAgICAgIHJldHVybiBfX3N0
cjsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4NCiAgICBvcGVyYXRvcisoX0No
YXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMs
X0FsbG9jPiYgX19yaHMpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19z
dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiBfX3N0cmluZ190eXBlOw0K
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5
cGUgX19zaXplX3R5cGU7DQogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOw0K
ICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfX3Jocy5zaXplKCk7DQogICAg
ICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7DQogICAgICBfX3N0ci5hcHBl
bmQoX19zaXplX3R5cGUoMSksIF9fbGhzKTsNCiAgICAgIF9fc3RyLmFwcGVu
ZChfX3Jocyk7DQogICAgICByZXR1cm4gX19zdHI7DQogICAgfQ0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6DQogICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVy
YXRvciBfX2kyLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykNCiAgICB7
DQogICAgICBzaXplX3R5cGUgX19uMSA9IF9faTIgLSBfX2kxOw0KICAgICAg
c2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsNCiAgICAg
IGlmIChtYXhfc2l6ZSgpIC0gKHRoaXMtPnNpemUoKSAtIF9fbjEpIDw9IF9f
bjIpDQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJp
bmc6OnJlcGxhY2UiKTsNCiAgICAgIF9NX211dGF0ZSAoX19vZmYxLCBfX24x
LCBfX24yKTsNCg0KICAgICAgaWYgKF9fbjIpDQogICAgICAgIHRyYWl0c190
eXBlOjphc3NpZ24oX01fZGF0YSgpICsgX19vZmYxLCBfX24yLCBfX2MpOw0K
ICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpzaXplX3R5cGUNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoNCiAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUg
X19uLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0KICAgICAgaWYg
KF9fcG9zID4gdGhpcy0+c2l6ZSgpKQ0KICAgICAgICBfX3Rocm93X291dF9v
Zl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb3B5Iik7DQoNCiAgICAgIGlmIChf
X24gPiB0aGlzLT5zaXplKCkgLSBfX3BvcykNCiAgICAgICAgX19uID0gdGhp
cy0+c2l6ZSgpIC0gX19wb3M7DQoNCiAgICAgIHRyYWl0c190eXBlOjpjb3B5
KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7DQoNCiAgICAgIHJldHVy
biBfX247DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0K
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0K
ICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywg
c2l6ZV90eXBlIF9fbikgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5cGUg
X19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgc2l6ZV90IF9feHBvcyA9
IF9fcG9zOw0KICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRh
KCk7DQogICAgICBmb3IgKDsgX194cG9zICsgX19uIDw9IF9fc2l6ZTsgKytf
X3hwb3MpDQogICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2Rh
dGEgKyBfX3hwb3MsIF9fcywgX19uKSA9PSAwKQ0KICAgICAgICAgIHJldHVy
biBfX3hwb3M7DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgZmluZChfQ2hhclQgX19jLCBz
aXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90eXBl
IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIHNpemVfdHlwZSBfX3Jl
dCA9IG5wb3M7DQogICAgICBpZiAoX19wb3MgPCBfX3NpemUpDQogICAgICAg
IHsNCiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEo
KTsNCiAgICAgICAgICBzaXplX3R5cGUgX19uID0gX19zaXplIC0gX19wb3M7
DQogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6
ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOw0KICAgICAgICAgIGlm
IChfX3ApDQogICAgICAgICAgICBfX3JldCA9IF9fcCAtIF9fZGF0YTsNCiAg
ICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIHJmaW5kKGNvbnN0IF9DaGFy
VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0
DQogICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUo
KTsNCiAgICAgIGlmIChfX24gPD0gX19zaXplKQ0KICAgICAgICB7DQogICAg
ICAgICAgX19wb3MgPSBzdGQ6Om1pbihfX3NpemUgLSBfX24gLF9fcG9zKTsN
CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsN
CiAgICAgICAgICBkbw0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBp
ZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX19wb3MsIF9fcywg
X19uKSA9PSAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsNCiAg
ICAgICAgICAgIH0NCiAgICAgICAgICB3aGlsZSAoX19wb3MtLSA+IDApOw0K
ICAgICAgICB9DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgcmZpbmQoX0NoYXJUIF9fYywg
c2l6ZV90eXBlIF9fcG9zKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlw
ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19zaXplKQ0K
ICAgICAgICB7DQogICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6ZSAt
IDE7DQogICAgICAgICAgaWYgKF9feHBvcyA+IF9fcG9zKQ0KICAgICAgICAg
ICAgX194cG9zID0gX19wb3M7DQoNCiAgICAgICAgICBmb3IgKCsrX194cG9z
OyBfX3hwb3MtLSA+IDA7ICkNCiAgICAgICAgICAgIGlmICh0cmFpdHNfdHlw
ZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpDQogICAgICAgICAgICAg
IHJldHVybiBfX3hwb3M7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBucG9z
Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBm
aW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19w
b3MsIHNpemVfdHlwZSBfX24pIGNvbnN0DQogICAgew0KICAgICAgZm9yICg7
IF9fbiAmJiBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykNCiAgICAg
ICAgew0KICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5
cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10pOw0KICAgICAg
ICAgIGlmIChfX3ApDQogICAgICAgICAgICByZXR1cm4gX19wb3M7DQogICAg
ICAgIH0NCiAgICAgIHJldHVybiBucG9zOw0KICAgIH0NCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoNCiAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0No
YXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29u
c3QNCiAgICB7DQogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6
ZSgpOw0KICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pDQogICAgICAgIHsNCiAg
ICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykNCiAgICAgICAgICAgIF9f
c2l6ZSA9IF9fcG9zOw0KICAgICAgICAgIGRvDQogICAgICAgICAgICB7DQog
ICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwg
X01fZGF0YSgpW19fc2l6ZV0pKQ0KICAgICAgICAgICAgICAgIHJldHVybiBf
X3NpemU7DQogICAgICAgICAgICB9DQogICAgICAgICAgd2hpbGUgKF9fc2l6
ZS0tICE9IDApOw0KICAgICAgICB9DQogICAgICByZXR1cm4gbnBvczsNCiAg
ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgZmluZF9m
aXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbikgY29uc3QNCiAgICB7DQogICAgICBzaXplX3Qg
X194cG9zID0gX19wb3M7DQogICAgICBmb3IgKDsgX19uICYmIF9feHBvcyA8
IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpDQogICAgICAgIGlmICghdHJhaXRz
X3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hwb3NdKSkNCiAg
ICAgICAgICByZXR1cm4gX194cG9zOw0KICAgICAgcmV0dXJuIG5wb3M7DQog
ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGZpbmRf
Zmlyc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29u
c3QNCiAgICB7DQogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7DQogICAg
ICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19feHBvcykNCiAg
ICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10s
IF9fYykpDQogICAgICAgICAgcmV0dXJuIF9feHBvczsNCiAgICAgIHJldHVy
biBucG9zOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUN
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoN
CiAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0DQogICAgew0KICAg
ICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIGlm
IChfX3NpemUgJiYgX19uKQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKC0t
X19zaXplID4gX19wb3MpDQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsN
CiAgICAgICAgICBkbw0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBp
ZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19z
aXplXSkpDQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsNCiAgICAg
ICAgICAgIH0NCiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOw0KICAgICAg
ICB9DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6DQogICAgZmluZF9sYXN0X25vdF9vZihfQ2hhclQg
X19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6
ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIGlmIChfX3Np
emUpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3Bv
cykNCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOw0KICAgICAgICAgIGRv
DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5
cGU6OmVxKF9NX2RhdGEoKVtfX3NpemVdLCBfX2MpKQ0KICAgICAgICAgICAg
ICAgIHJldHVybiBfX3NpemU7DQogICAgICAgICAgICB9DQogICAgICAgICAg
d2hpbGUgKF9fc2l6ZS0tKTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIG5w
b3M7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0KICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAg
IGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25z
dCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdA0KICAgIHsNCiAgICAgIHNp
emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBzaXplX3R5
cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAgIGlmIChfX3BvcyA+
IF9fc2l6ZSkNCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2lj
X3N0cmluZzo6Y29tcGFyZSIpOw0KDQogICAgICBzaXplX3R5cGUgX19yc2l6
ZT0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24pOw0KICAgICAgc2l6ZV90eXBl
IF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOw0KICAgICAgaW50IF9f
ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBf
X3N0ci5kYXRhKCksIF9fbGVuKTsNCiAgICAgIGlmICghX19yKQ0KICAgICAg
ICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsNCiAgICAgIHJldHVybiBfX3I7
DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGNv
bXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIsDQogICAgICAgICAgICBzaXplX3R5cGUg
X19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3QNCiAgICB7DQogICAgICBz
aXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgc2l6ZV90
eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7DQogICAgICBpZiAoX19wb3Mx
ID4gX19zaXplIHx8IF9fcG9zMiA+IF9fb3NpemUpDQogICAgICAgIF9fdGhy
b3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsNCg0K
ICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3Mx
LCBfX24xKTsNCiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29z
aXplIC0gX19wb3MyLCBfX24yKTsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9
IG1pbihfX3JzaXplLCBfX3Jvc2l6ZSk7DQogICAgICBpbnQgX19yID0gdHJh
aXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MxLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmRhdGEoKSAr
IF9fcG9zMiwgX19sZW4pOw0KICAgICAgaWYgKCFfX3IpDQogICAgICAgIF9f
ciA9IF9fcnNpemUgLSBfX3Jvc2l6ZTsNCiAgICAgIHJldHVybiBfX3I7DQog
ICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW50DQogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgY29t
cGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3QNCiAgICB7DQogICAgICBz
aXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaW50IF9f
ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zLCBfX3Np
emUpOw0KICAgICAgaWYgKCFfX3IpDQogICAgICAgIF9fciA9IF9fc2l6ZSAt
IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsNCiAgICAgIHJldHVybiBfX3I7
DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW50DQogICAg
YmFzaWNfc3RyaW5nIDxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoNCiAgICBj
b21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0
IF9DaGFyVCogX19zKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBf
X3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19wb3MgPiBfX3Np
emUpDQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp
bmc6OmNvbXBhcmUiKTsNCg0KICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSB0
cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7DQogICAgICBzaXplX3R5cGUgX19y
c2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7DQogICAgICBzaXpl
X3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7DQogICAgICBp
bnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19w
b3MsIF9fcywgX19sZW4pOw0KICAgICAgaWYgKCFfX3IpDQogICAgICAgIF9f
ciA9IF9fcnNpemUgLSBfX29zaXplOw0KICAgICAgcmV0dXJuIF9fcjsNCiAg
ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW50DQogICAgYmFzaWNf
c3RyaW5nIDxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoNCiAgICBjb21wYXJl
KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFy
VCogX19zLA0KICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0DQog
ICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsN
CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkNCiAgICAgICAgX190aHJvd19v
dXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOw0KDQogICAg
ICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVuZ3Ro
KF9fcyksIF9fbjIpOw0KICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4o
X19zaXplIC0gX19wb3MsIF9fbjEpOw0KICAgICAgc2l6ZV90eXBlIF9fbGVu
ID0gbWluKF9fcnNpemUsIF9fb3NpemUpOw0KICAgICAgaW50IF9fciA9IHRy
YWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9f
bGVuKTsNCiAgICAgIGlmICghX19yKQ0KICAgICAgICBfX3IgPSBfX3JzaXpl
IC0gX19vc2l6ZTsNCiAgICAgIHJldHVybiBfX3I7DQogICAgfQ0KDQogIHRl
bXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9B
bGxvYz4NCiAgICB2b2lkDQogICAgX1Nfc3RyaW5nX2NvcHkoY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsDQog
ICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0Fs
bG9jOjpzaXplX3R5cGUgX19idWZzaXopDQogICAgew0KICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7DQogICAg
ICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOw0KICAgICAg
c2l6ZV90eXBlIF9fYnl0ZXMgPSBtaW4oX19zdHJzaXplLCBfX2J1ZnNpeiAt
IDEpOw0KICAgICAgX1RyYWl0czo6Y29weShfX2J1ZiwgX19zdHIuZGF0YSgp
LCBfX2J5dGVzKTsNCiAgICAgIF9fYnVmW19fYnl0ZXNdID0gX0NoYXJUKCk7
DQogICAgfQ0KfQ0KIyA1MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMNCiMgNDMgIi9ob21lL21k
ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAy
IDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NjdHlwZS5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMw0KIyAxICIv
dXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzIDQNCiMgMzkgIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMiAz
DQojIDU1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY2N0eXBlLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdXNpbmcg
Ojppc2FsbnVtOw0KICB1c2luZyA6OmlzYWxwaGE7DQogIHVzaW5nIDo6aXNj
bnRybDsNCiAgdXNpbmcgOjppc2RpZ2l0Ow0KICB1c2luZyA6OmlzZ3JhcGg7
DQogIHVzaW5nIDo6aXNsb3dlcjsNCiAgdXNpbmcgOjppc3ByaW50Ow0KICB1
c2luZyA6OmlzcHVuY3Q7DQogIHVzaW5nIDo6aXNzcGFjZTsNCiAgdXNpbmcg
Ojppc3VwcGVyOw0KICB1c2luZyA6OmlzeGRpZ2l0Ow0KICB1c2luZyA6OnRv
bG93ZXI7DQogIHVzaW5nIDo6dG91cHBlcjsNCn0NCiMgNDQgIi9ob21lL21k
ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAy
IDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvZnVuY3RleGNlcHQuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzDQojIDEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb25f
ZGVmaW5lcy5oIiAxIDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMw0KDQpuYW1lc3Bh
Y2Ugc3RkDQp7DQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9leGNlcHRpb24o
dm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQp
Ow0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOw0KDQog
IHZvaWQNCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOw0KDQoNCiAgdm9p
ZA0KICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoN
CiAgdm9pZA0KICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNv
bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2xlbmd0aF9l
cnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19v
dXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9f
dGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZv
aWQNCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K
DQogIHZvaWQNCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFy
KiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3Io
Y29uc3QgY2hhciogX19zKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19pb3Nf
ZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOw0KfQ0KIyA0NSAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIg
Mw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQojIDU2ICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMw0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBjbGFz
cyB2ZWN0b3I7DQogIGNsYXNzIGxvY2FsZTsNCg0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzc3BhY2Uo
X0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc3ByaW50KF9DaGFy
VCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNjbnRybChfQ2hhclQsIGNv
bnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4N
CiAgICBpbmxpbmUgYm9vbA0KICAgIGlzdXBwZXIoX0NoYXJULCBjb25zdCBs
b2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg
aW5saW5lIGJvb2wNCiAgICBpc2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxl
Jik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGlu
ZSBib29sDQogICAgaXNhbHBoYShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9v
bA0KICAgIGlzZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAg
ICBpc3B1bmN0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXN4
ZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc2FsbnVt
KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNncmFwaChfQ2hh
clQsIGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4NCiAgICBpbmxpbmUgX0NoYXJUDQogICAgdG91cHBlcihfQ2hhclQs
IGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4NCiAgICBpbmxpbmUgX0NoYXJUDQogICAgdG9sb3dlcihfQ2hhclQsIGNv
bnN0IGxvY2FsZSYpOw0KDQoNCg0KICBjbGFzcyBjdHlwZV9iYXNlOw0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgY3R5cGU7DQog
IHRlbXBsYXRlPD4gY2xhc3MgY3R5cGU8Y2hhcj47DQoNCg0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBjdHlwZV9ieW5hbWU7
DQoNCg0KICBjbGFzcyBjb2RlY3Z0X2Jhc2U7DQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0
YXRlVD4NCiAgICBjbGFzcyBjb2RlY3Z0Ow0KICB0ZW1wbGF0ZTw+IGNsYXNz
IGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PjsNCg0KDQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0
eXBlbmFtZSBfU3RhdGVUPg0KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lOw0K
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4NCiAgICBjbGFz
cyBudW1fZ2V0Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4N
CiAgICBjbGFzcyBudW1fcHV0Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+IGNsYXNzIG51bXB1bmN0Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsNCg0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBjb2xsYXRlOw0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzDQogICAgY29sbGF0ZV9ieW5hbWU7
DQoNCg0KICBjbGFzcyB0aW1lX2Jhc2U7DQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0
b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgdGltZV9nZXQ7DQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1i
dWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgdGltZV9nZXRfYnlu
YW1lOw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P
dXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4NCiAgICBj
bGFzcyB0aW1lX3B1dDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU
PiA+DQogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lOw0KDQoNCiAgY2xhc3Mg
bW9uZXlfYmFzZTsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4N
CiAgICBjbGFzcyBtb25leV9nZXQ7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9y
PF9DaGFyVD4gPg0KICAgIGNsYXNzIG1vbmV5X3B1dDsNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+DQogICAgY2xh
c3MgbW9uZXlwdW5jdDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBi
b29sIF9JbnRsID0gZmFsc2U+DQogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5h
bWU7DQoNCg0KICBjbGFzcyBtZXNzYWdlc19iYXNlOw0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgbWVzc2FnZXM7DQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBtZXNzYWdlc19ieW5h
bWU7DQoNCg0KICBjbGFzcyBsb2NhbGUNCiAgew0KICBwdWJsaWM6DQoNCiAg
ICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRlZ29yeTsNCg0KDQogICAgY2xh
c3MgZmFjZXQ7DQogICAgY2xhc3MgaWQ7DQogICAgY2xhc3MgX0ltcGw7DQoN
CiAgICBmcmllbmQgY2xhc3MgZmFjZXQ7DQogICAgZnJpZW5kIGNsYXNzIF9J
bXBsOw0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgICAg
ZnJpZW5kIGNvbnN0IF9GYWNldCYNCiAgICAgIHVzZV9mYWNldChjb25zdCBs
b2NhbGUmKTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAg
ICAgIGZyaWVuZCBib29sDQogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxl
JikgdGhyb3coKTsNCg0KDQoNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkg
bm9uZSA9IDA7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGN0eXBlID0g
MUwgPDwgMDsNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbnVtZXJpYyA9
IDFMIDw8IDE7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUg
PSAxTCA8PCAyOw0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lID0g
MUwgPDwgMzsNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbW9uZXRhcnkg
PSAxTCA8PCA0Ow0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtZXNzYWdl
cyA9IDFMIDw8IDU7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9
IChjb2xsYXRlIHwgY3R5cGUgfCBtb25ldGFyeSB8DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpYyB8IHRpbWUg
fCBtZXNzYWdlcyk7DQoNCg0KICAgIGxvY2FsZSgpIHRocm93KCk7DQoNCiAg
ICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOw0KDQog
ICAgZXhwbGljaXQNCiAgICBsb2NhbGUoY29uc3QgY2hhciogX19zdGRfbmFt
ZSk7DQoNCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0
IGNoYXIqIF9fcywgY2F0ZWdvcnkgX19jYXQpOw0KDQogICAgbG9jYWxlKGNv
bnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRl
Z29yeSBfX2NhdCk7DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+
DQogICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQq
IF9fZik7DQoNCiAgICB+bG9jYWxlKCkgdGhyb3coKTsNCg0KICAgIGNvbnN0
IGxvY2FsZSYNCiAgICBvcGVyYXRvcj0oY29uc3QgbG9jYWxlJiBfX290aGVy
KSB0aHJvdygpOw0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0K
ICAgICAgbG9jYWxlDQogICAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19v
dGhlcik7DQoNCg0KICAgIHN0cmluZw0KICAgIG5hbWUoKSBjb25zdDsNCg0K
ICAgIGJvb2wNCiAgICBvcGVyYXRvcj09KGNvbnN0IGxvY2FsZSYgX19vdGhl
cikgY29uc3QgdGhyb3cgKCk7DQoNCiAgICBpbmxpbmUgYm9vbA0KICAgIG9w
ZXJhdG9yIT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAo
KQ0KICAgIHsgcmV0dXJuICEodGhpcy0+b3BlcmF0b3I9PShfX290aGVyKSk7
IH0NCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgICBib29sDQogICAgICBv
cGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0cywg
X0FsbG9jPiYgX19zMSwNCiAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdDsN
Cg0KDQogICAgc3RhdGljIGxvY2FsZQ0KICAgIGdsb2JhbChjb25zdCBsb2Nh
bGUmKTsNCg0KICAgIHN0YXRpYyBjb25zdCBsb2NhbGUmDQogICAgY2xhc3Np
YygpOw0KDQogIHByaXZhdGU6DQoNCiAgICBfSW1wbCogX01faW1wbDsNCg0K
DQogICAgc3RhdGljIF9JbXBsKiBfU19jbGFzc2ljOw0KDQoNCiAgICBzdGF0
aWMgX0ltcGwqIF9TX2dsb2JhbDsNCg0KICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgX1NfbnVtX2NhdGVnb3JpZXMgPSA2Ow0KICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgX1NfbnVtX2ZhY2V0cyA9IDEzOw0KDQogICAgZXhwbGljaXQNCiAg
ICBsb2NhbGUoX0ltcGwqKSB0aHJvdygpOw0KDQogICAgc3RhdGljIGlubGlu
ZSB2b2lkDQogICAgX1NfaW5pdGlhbGl6ZSgpDQogICAgeyBpZiAoIV9TX2Ns
YXNzaWMpIGNsYXNzaWMoKTsgfQ0KDQogICAgc3RhdGljIGNhdGVnb3J5DQog
ICAgX1Nfbm9ybWFsaXplX2NhdGVnb3J5KGNhdGVnb3J5KTsNCg0KICAgIHZv
aWQNCiAgICBfTV9jb2FsZXNjZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29u
c3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOw0KICB9Ow0KDQoN
Cg0KICBjbGFzcyBsb2NhbGU6Ol9JbXBsDQogIHsNCiAgcHVibGljOg0KDQog
ICAgdHlwZWRlZiB2ZWN0b3I8ZmFjZXQqLCBhbGxvY2F0b3I8ZmFjZXQqPiA+
IF9fdmVjX2ZhY2V0Ow0KDQoNCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOw0K
ICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6OmZhY2V0Ow0KDQogICAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNl
dCYNCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsNCg0KICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBib29sDQog
ICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsNCg0KICBw
cml2YXRlOg0KDQogICAgc2l6ZV90IF9NX3JlZmVyZW5jZXM7DQogICAgX192
ZWNfZmFjZXQqIF9NX2ZhY2V0czsNCiAgICBzdHJpbmcgX01fbmFtZXNbX1Nf
bnVtX2NhdGVnb3JpZXNdOw0KICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGU7
DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX2N0
eXBlW107DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9T
X2lkX251bWVyaWNbXTsNCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCog
Y29uc3QgX1NfaWRfY29sbGF0ZVtdOw0KICAgIHN0YXRpYyBjb25zdCBsb2Nh
bGU6OmlkKiBjb25zdCBfU19pZF90aW1lW107DQogICAgc3RhdGljIGNvbnN0
IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5W107DQogICAgc3Rh
dGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21lc3NhZ2VzW107
DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0KiBjb25zdCBf
U19mYWNldF9jYXRlZ29yaWVzW107DQoNCiAgICBpbmxpbmUgdm9pZA0KICAg
IF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygpDQogICAgeyArK19NX3JlZmVy
ZW5jZXM7IH0NCg0KICAgIGlubGluZSB2b2lkDQogICAgX01fcmVtb3ZlX3Jl
ZmVyZW5jZSgpIHRocm93KCkNCiAgICB7DQogICAgICBpZiAoX01fcmVmZXJl
bmNlcy0tID09IDApDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAg
ICAgICAgIHsgZGVsZXRlIHRoaXM7IH0NCiAgICAgICAgICBjYXRjaCguLi4p
DQogICAgICAgICAgICB7IH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIF9J
bXBsKGNvbnN0IF9JbXBsJiwgc2l6ZV90KTsNCiAgICBfSW1wbChzdHJpbmcg
X19uYW1lLCBzaXplX3QpOw0KICAgfl9JbXBsKCkgdGhyb3coKTsNCg0KICAg
IGJvb2wNCiAgICBfTV9jaGVja19zYW1lX25hbWUoKQ0KICAgIHsNCiAgICAg
IGJvb2wgX19yZXQgPSB0cnVlOw0KICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBfU19udW1fY2F0ZWdvcmllcyAtIDE7ICsraSkNCiAgICAgICAgX19y
ZXQgJj0gX01fbmFtZXNbaV0gPT0gX01fbmFtZXNbaSArIDFdOw0KICAgICAg
cmV0dXJuIF9fcmV0Ow0KICAgIH0NCiAgICB2b2lkDQogICAgX01fcmVwbGFj
ZV9jYXRlZ29yaWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOw0KDQogICAg
dm9pZA0KICAgIF9NX3JlcGxhY2VfY2F0ZWdvcnkoY29uc3QgX0ltcGwqLCBj
b25zdCBsb2NhbGU6OmlkKiBjb25zdCopOw0KDQogICAgdm9pZA0KICAgIF9N
X3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6Omlk
Kik7DQoNCiAgICB2b2lkDQogICAgX01faW5zdGFsbF9mYWNldChjb25zdCBs
b2NhbGU6OmlkKiwgZmFjZXQqKTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9GYWNldD4NCiAgICAgIGlubGluZSB2b2lkDQogICAgICBfTV9pbml0X2Zh
Y2V0KF9GYWNldCogX19mYWNldCkNCiAgICAgIHsgX01faW5zdGFsbF9mYWNl
dCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0NCiAgfTsNCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAgbG9jYWxlOjpsb2NhbGUoY29uc3Qg
bG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZikNCiAgICB7DQogICAgICBf
TV9pbXBsID0gbmV3IF9JbXBsKCpfX290aGVyLl9NX2ltcGwsIDEpOw0KICAg
ICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19m
KTsNCiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9TX251bV9j
YXRlZ29yaWVzOyArK19faSkNCiAgICAgICAgX01faW1wbC0+X01fbmFtZXNb
X19pXSA9ICIqIjsNCiAgICB9DQoNCg0KICBjbGFzcyBsb2NhbGU6OmZhY2V0
DQogIHsNCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOw0KICAgIGZyaWVuZCBj
bGFzcyBsb2NhbGU6Ol9JbXBsOw0KDQogIHByb3RlY3RlZDoNCiAgICBleHBs
aWNpdA0KICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0aHJvdygpOw0K
DQogICAgdmlydHVhbA0KICAgIH5mYWNldCgpIHsgfTsNCg0KICAgIHN0YXRp
YyB2b2lkDQogICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9f
Y2xvYywgY29uc3QgY2hhciogX19zKTsNCg0KICAgIHN0YXRpYyB2b2lkDQog
ICAgX1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOw0K
DQogIHByaXZhdGU6DQogICAgc2l6ZV90IF9NX3JlZmVyZW5jZXM7DQoNCiAg
ICB2b2lkDQogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCk7DQoNCiAg
ICB2b2lkDQogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCk7DQoN
CiAgICBmYWNldChjb25zdCBmYWNldCYpOw0KDQogICAgdm9pZA0KICAgIG9w
ZXJhdG9yPShjb25zdCBmYWNldCYpOw0KICB9Ow0KDQoNCg0KICBjbGFzcyBs
b2NhbGU6OmlkDQogIHsNCiAgcHJpdmF0ZToNCiAgICBmcmllbmQgY2xhc3Mg
bG9jYWxlOw0KICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOw0KICAg
IHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBjb25z
dCBfRmFjZXQmDQogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7DQog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgICAgZnJpZW5kIGJv
b2wNCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdyAoKTsN
Cg0KDQoNCg0KICAgIG11dGFibGUgc2l6ZV90IF9NX2luZGV4Ow0KDQoNCiAg
ICBzdGF0aWMgc2l6ZV90IF9TX2hpZ2h3YXRlcjsNCg0KICAgIHZvaWQNCiAg
ICBvcGVyYXRvcj0oY29uc3QgaWQmKTsNCg0KICAgIGlkKGNvbnN0IGlkJik7
DQoNCiAgcHVibGljOg0KDQoNCg0KICAgIGlkKCkgeyB9DQogIH07DQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgIGNvbnN0IF9GYWNldCYN
CiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYyk7DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgIGJvb2wNCiAgICBoYXNfZmFj
ZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsNCn0NCiMgNDQgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Mu
aCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL2lvc19iYXNlLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvaW9zX2Jhc2UuaCIgMw0KDQpuYW1l
c3BhY2Ugc3RkDQp7DQoNCg0KDQoNCiAgZW51bSBfSW9zX0ZtdGZsYWdzIHsg
X01faW9zX2ZtdGZsYWdzX2VuZCA9IDFMIDw8IDE2IH07DQoNCiAgaW5saW5l
IF9Jb3NfRm10ZmxhZ3MNCiAgb3BlcmF0b3ImKF9Jb3NfRm10ZmxhZ3MgX19h
LCBfSW9zX0ZtdGZsYWdzIF9fYikNCiAgeyByZXR1cm4gX0lvc19GbXRmbGFn
cyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9f
YikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MNCiAgb3BlcmF0b3J8
KF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikNCiAgeyBy
ZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBz
dGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfRm10
ZmxhZ3MNCiAgb3BlcmF0b3JeKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0Zt
dGZsYWdzIF9fYikNCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNf
Y2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9DQoN
CiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MNCiAgb3BlcmF0b3J8PShfSW9zX0Zt
dGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQ0KICB7IHJldHVybiBf
X2EgPSBfX2EgfCBfX2I7IH0NCg0KICBpbmxpbmUgX0lvc19GbXRmbGFncw0K
ICBvcGVyYXRvciY9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFn
cyBfX2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQ0KDQogIGlu
bGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJhdG9yXj0oX0lvc19GbXRmbGFn
cyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikNCiAgeyByZXR1cm4gX19hID0g
X19hIF4gX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MNCiAgb3Bl
cmF0b3J+KF9Jb3NfRm10ZmxhZ3MgX19hKQ0KICB7IHJldHVybiBfSW9zX0Zt
dGZsYWdzKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9DQoNCg0KICBlbnVt
IF9Jb3NfT3Blbm1vZGUgeyBfTV9pb3Nfb3Blbm1vZGVfZW5kID0gMUwgPDwg
MTYgfTsNCg0KICBpbmxpbmUgX0lvc19PcGVubW9kZQ0KICBvcGVyYXRvciYo
X0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQ0KICB7IHJl
dHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0
YXRpY19jYXN0PGludD4oX19iKSk7IH0NCg0KICBpbmxpbmUgX0lvc19PcGVu
bW9kZQ0KICBvcGVyYXRvcnwoX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Bl
bm1vZGUgX19iKQ0KICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19j
YXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0NCg0K
ICBpbmxpbmUgX0lvc19PcGVubW9kZQ0KICBvcGVyYXRvcl4oX0lvc19PcGVu
bW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQ0KICB7IHJldHVybiBfSW9z
X09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0
PGludD4oX19iKSk7IH0NCg0KICBpbmxpbmUgX0lvc19PcGVubW9kZQ0KICBv
cGVyYXRvcnw9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBf
X2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQ0KDQogIGlubGlu
ZSBfSW9zX09wZW5tb2RlDQogIG9wZXJhdG9yJj0oX0lvc19PcGVubW9kZSYg
X19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyByZXR1cm4gX19hID0gX19h
ICYgX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0
b3JePShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQ0K
ICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0NCg0KICBpbmxpbmUgX0lv
c19PcGVubW9kZQ0KICBvcGVyYXRvcn4oX0lvc19PcGVubW9kZSBfX2EpDQog
IHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUofnN0YXRpY19jYXN0PGludD4oX19h
KSk7IH0NCg0KDQogIGVudW0gX0lvc19Jb3N0YXRlIHsgX01faW9zX2lvc3Rh
dGVfZW5kID0gMUwgPDwgMTYgfTsNCg0KICBpbmxpbmUgX0lvc19Jb3N0YXRl
DQogIG9wZXJhdG9yJihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUg
X19iKQ0KICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50
PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQogIGlubGlu
ZSBfSW9zX0lvc3RhdGUNCiAgb3BlcmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2Es
IF9Jb3NfSW9zdGF0ZSBfX2IpDQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShz
dGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikp
OyB9DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBvcGVyYXRvcl4oX0lv
c19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikNCiAgeyByZXR1cm4g
X0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19j
YXN0PGludD4oX19iKSk7IH0NCg0KICBpbmxpbmUgX0lvc19Jb3N0YXRlDQog
IG9wZXJhdG9yfD0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBf
X2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQ0KDQogIGlubGlu
ZSBfSW9zX0lvc3RhdGUNCiAgb3BlcmF0b3ImPShfSW9zX0lvc3RhdGUmIF9f
YSwgX0lvc19Jb3N0YXRlIF9fYikNCiAgeyByZXR1cm4gX19hID0gX19hICYg
X19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBvcGVyYXRvcl49
KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQ0KICB7IHJl
dHVybiBfX2EgPSBfX2EgXiBfX2I7IH0NCg0KICBpbmxpbmUgX0lvc19Jb3N0
YXRlDQogIG9wZXJhdG9yfihfSW9zX0lvc3RhdGUgX19hKQ0KICB7IHJldHVy
biBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0NCg0K
ICBlbnVtIF9Jb3NfU2Vla2RpciB7IF9NX2lvc19zZWVrZGlyX2VuZCA9IDFM
IDw8IDE2IH07DQoNCg0KICBjbGFzcyBpb3NfYmFzZQ0KICB7DQogIHB1Ymxp
YzoNCg0KDQogICAgY2xhc3MgZmFpbHVyZSA6IHB1YmxpYyBleGNlcHRpb24N
CiAgICB7DQogICAgcHVibGljOg0KDQoNCiAgICAgIGV4cGxpY2l0DQogICAg
ICBmYWlsdXJlKGNvbnN0IHN0cmluZyYgX19zdHIpIHRocm93KCk7DQoNCiAg
ICAgIHZpcnR1YWwNCiAgICAgIH5mYWlsdXJlKCkgdGhyb3coKTsNCg0KICAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKg0KICAgICAgd2hhdCgpIGNvbnN0IHRo
cm93KCk7DQoNCiAgICBwcml2YXRlOg0KICAgICAgZW51bSB7IF9NX2J1ZnNp
emUgPSAyNTYgfTsNCiAgICAgIGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsN
Cg0KICAgIH07DQoNCg0KICAgIHR5cGVkZWYgX0lvc19GbXRmbGFncyBmbXRm
bGFnczsNCg0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBib29sYWxwaGEg
PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhhKTsNCiAgICBz
dGF0aWMgY29uc3QgZm10ZmxhZ3MgZGVjID0gZm10ZmxhZ3MoX19pb3NfZmxh
Z3M6Ol9TX2RlYyk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZpeGVk
ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ZpeGVkKTsNCiAgICBzdGF0
aWMgY29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6
Ol9TX2hleCk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGludGVybmFs
ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ludGVybmFsKTsNCiAgICBz
dGF0aWMgY29uc3QgZm10ZmxhZ3MgbGVmdCA9IGZtdGZsYWdzKF9faW9zX2Zs
YWdzOjpfU19sZWZ0KTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgb2N0
ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX29jdCk7DQogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIHJpZ2h0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6
Ol9TX3JpZ2h0KTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2NpZW50
aWZpYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zY2llbnRpZmljKTsN
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd2Jhc2UgPSBmbXRmbGFn
cyhfX2lvc19mbGFnczo6X1Nfc2hvd2Jhc2UpOw0KICAgIHN0YXRpYyBjb25z
dCBmbXRmbGFncyBzaG93cG9pbnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6
X1Nfc2hvd3BvaW50KTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hv
d3BvcyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9zKTsNCiAg
ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2tpcHdzID0gZm10ZmxhZ3MoX19p
b3NfZmxhZ3M6Ol9TX3NraXB3cyk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZs
YWdzIHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdW5pdGJ1
Zik7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVwcGVyY2FzZSA9IGZt
dGZsYWdzKF9faW9zX2ZsYWdzOjpfU191cHBlcmNhc2UpOw0KICAgIHN0YXRp
YyBjb25zdCBmbXRmbGFncyBhZGp1c3RmaWVsZCA9IGZtdGZsYWdzKF9faW9z
X2ZsYWdzOjpfU19hZGp1c3RmaWVsZCk7DQogICAgc3RhdGljIGNvbnN0IGZt
dGZsYWdzIGJhc2VmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19i
YXNlZmllbGQpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmbG9hdGZp
ZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Zsb2F0ZmllbGQpOw0K
DQoNCiAgICB0eXBlZGVmIF9Jb3NfSW9zdGF0ZSBpb3N0YXRlOw0KICAgIHN0
YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUoX19pb3NfZmxh
Z3M6Ol9TX2JhZGJpdCk7DQogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9m
Yml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZW9mYml0KTsNCiAgICBz
dGF0aWMgY29uc3QgaW9zdGF0ZSBmYWlsYml0ID0gaW9zdGF0ZShfX2lvc19m
bGFnczo6X1NfZmFpbGJpdCk7DQogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUg
Z29vZGJpdCA9IGlvc3RhdGUoMCk7DQoNCg0KICAgIHR5cGVkZWYgX0lvc19P
cGVubW9kZSBvcGVubW9kZTsNCiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUg
YXBwID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2FwcCk7DQogICAgc3Rh
dGljIGNvbnN0IG9wZW5tb2RlIGF0ZSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdz
OjpfU19hdGUpOw0KICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBiaW5hcnkg
PSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsNCiAgICBzdGF0aWMg
Y29uc3Qgb3Blbm1vZGUgaW4gPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nf
aW4pOw0KICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBvdXQgPSBvcGVubW9k
ZShfX2lvc19mbGFnczo6X1Nfb3V0KTsNCiAgICBzdGF0aWMgY29uc3Qgb3Bl
bm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfdHJ1bmMp
Ow0KDQoNCiAgICB0eXBlZGVmIF9Jb3NfU2Vla2RpciBzZWVrZGlyOw0KICAg
IHN0YXRpYyBjb25zdCBzZWVrZGlyIGJlZyA9IHNlZWtkaXIoMCk7DQogICAg
c3RhdGljIGNvbnN0IHNlZWtkaXIgY3VyID0gc2Vla2RpcigxKTsNCiAgICBz
dGF0aWMgY29uc3Qgc2Vla2RpciBlbmQgPSBzZWVrZGlyKDIpOw0KIyAyMTYg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lvc19i
YXNlLmgiIDMNCiAgICBlbnVtIGV2ZW50DQogICAgew0KICAgICAgZXJhc2Vf
ZXZlbnQsDQogICAgICBpbWJ1ZV9ldmVudCwNCiAgICAgIGNvcHlmbXRfZXZl
bnQNCiAgICB9Ow0KDQogICAgdHlwZWRlZiB2b2lkICgqZXZlbnRfY2FsbGJh
Y2spIChldmVudCwgaW9zX2Jhc2UmLCBpbnQpOw0KDQogICAgdm9pZA0KICAg
IHJlZ2lzdGVyX2NhbGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBf
X2luZGV4KTsNCg0KICBwcm90ZWN0ZWQ6DQoNCiAgICBzdHJlYW1zaXplIF9N
X3ByZWNpc2lvbjsNCiAgICBzdHJlYW1zaXplIF9NX3dpZHRoOw0KICAgIGZt
dGZsYWdzIF9NX2ZsYWdzOw0KDQoNCg0KICAgIHN0cnVjdCBfQ2FsbGJhY2tf
bGlzdA0KICAgIHsNCg0KICAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX25leHQ7
DQogICAgICBpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX01fZm47DQogICAg
ICBpbnQgX01faW5kZXg7DQogICAgICBpbnQgX01fcmVmY291bnQ7DQoNCiAg
ICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBf
X2ZuLCBpbnQgX19pbmRleCwNCiAgICAgICAgICAgICAgICAgICAgIF9DYWxs
YmFja19saXN0KiBfX2NiKQ0KICAgICAgOiBfTV9uZXh0KF9fY2IpLCBfTV9m
bihfX2ZuKSwgX01faW5kZXgoX19pbmRleCksIF9NX3JlZmNvdW50KDApIHsg
fQ0KDQogICAgICB2b2lkDQogICAgICBfTV9hZGRfcmVmZXJlbmNlKCkgeyAr
K19NX3JlZmNvdW50OyB9DQoNCiAgICAgIGludA0KICAgICAgX01fcmVtb3Zl
X3JlZmVyZW5jZSgpIHsgcmV0dXJuIF9NX3JlZmNvdW50LS07IH0NCiAgICB9
Ow0KDQogICAgIF9DYWxsYmFja19saXN0KiBfTV9jYWxsYmFja3M7DQoNCiAg
ICB2b2lkDQogICAgX01fY2FsbF9jYWxsYmFja3MoZXZlbnQgX19ldikgdGhy
b3coKTsNCg0KICAgIHZvaWQNCiAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcyh2
b2lkKTsNCg0KDQogICAgc3RydWN0IF9Xb3Jkcw0KICAgIHsNCiAgICAgIHZv
aWQqIF9NX3B3b3JkOw0KICAgICAgbG9uZyBfTV9pd29yZDsNCiAgICB9Ow0K
DQogICAgc3RhdGljIGNvbnN0IGludCBfU19sb2NhbF93b3JkcyA9IDg7DQog
ICAgX1dvcmRzIF9NX3dvcmRfYXJyYXlbX1NfbG9jYWxfd29yZHNdOw0KICAg
IF9Xb3JkcyBfTV9kdW1teTsNCiAgICBfV29yZHMqIF9NX3dvcmRzOw0KICAg
IGludCBfTV93b3JkX2xpbWl0Ow0KDQogICAgX1dvcmRzJg0KICAgIF9NX2dy
b3dfd29yZHMoaW50IF9faW5kZXgpOw0KDQoNCiAgICBsb2NhbGUgX01faW9z
X2xvY2FsZTsNCg0KICAgIHZvaWQNCiAgICBfTV9pbml0KCk7DQoNCiAgcHVi
bGljOg0KDQoNCg0KDQoNCiAgICBjbGFzcyBJbml0DQogICAgew0KICAgICAg
ZnJpZW5kIGNsYXNzIGlvc19iYXNlOw0KICAgIHB1YmxpYzoNCiAgICAgIElu
aXQoKTsNCiAgICAgIH5Jbml0KCk7DQoNCiAgICAgIHN0YXRpYyB2b2lkDQog
ICAgICBfU19pb3NfY3JlYXRlKGJvb2wgX19zeW5jKTsNCg0KICAgICAgc3Rh
dGljIHZvaWQNCiAgICAgIF9TX2lvc19kZXN0cm95KCk7DQoNCiAgICBwcml2
YXRlOg0KICAgICAgc3RhdGljIGludCBfU19pb3NfYmFzZV9pbml0Ow0KICAg
ICAgc3RhdGljIGJvb2wgX1Nfc3luY2VkX3dpdGhfc3RkaW87DQogICAgfTsN
Cg0KDQogICAgaW5saW5lIGZtdGZsYWdzDQogICAgZmxhZ3MoKSBjb25zdCB7
IHJldHVybiBfTV9mbGFnczsgfQ0KDQogICAgaW5saW5lIGZtdGZsYWdzDQog
ICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRmbCkNCiAgICB7DQogICAgICBmbXRm
bGFncyBfX29sZCA9IF9NX2ZsYWdzOw0KICAgICAgX01fZmxhZ3MgPSBfX2Zt
dGZsOw0KICAgICAgcmV0dXJuIF9fb2xkOw0KICAgIH0NCg0KICAgIGlubGlu
ZSBmbXRmbGFncw0KICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkNCiAgICB7
DQogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOw0KICAgICAgX01f
ZmxhZ3MgfD0gX19mbXRmbDsNCiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9
DQoNCiAgICBpbmxpbmUgZm10ZmxhZ3MNCiAgICBzZXRmKGZtdGZsYWdzIF9f
Zm10ZmwsIGZtdGZsYWdzIF9fbWFzaykNCiAgICB7DQogICAgICBmbXRmbGFn
cyBfX29sZCA9IF9NX2ZsYWdzOw0KICAgICAgX01fZmxhZ3MgJj0gfl9fbWFz
azsNCiAgICAgIF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19tYXNrKTsNCiAg
ICAgIHJldHVybiBfX29sZDsNCiAgICB9DQoNCiAgICBpbmxpbmUgdm9pZA0K
ICAgIHVuc2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZmxhZ3MgJj0gfl9f
bWFzazsgfQ0KDQogICAgaW5saW5lIHN0cmVhbXNpemUNCiAgICBwcmVjaXNp
b24oKSBjb25zdCB7IHJldHVybiBfTV9wcmVjaXNpb247IH0NCg0KICAgIGlu
bGluZSBzdHJlYW1zaXplDQogICAgcHJlY2lzaW9uKHN0cmVhbXNpemUgX19w
cmVjKQ0KICAgIHsNCiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV9wcmVj
aXNpb247DQogICAgICBfTV9wcmVjaXNpb24gPSBfX3ByZWM7DQogICAgICBy
ZXR1cm4gX19vbGQ7DQogICAgfQ0KDQogICAgaW5saW5lIHN0cmVhbXNpemUN
CiAgICB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3dpZHRoOyB9DQoNCiAg
ICBpbmxpbmUgc3RyZWFtc2l6ZQ0KICAgIHdpZHRoKHN0cmVhbXNpemUgX193
aWRlKQ0KICAgIHsNCiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93aWR0
aDsNCiAgICAgIF9NX3dpZHRoID0gX193aWRlOw0KICAgICAgcmV0dXJuIF9f
b2xkOw0KICAgIH0NCg0KICAgIHN0YXRpYyBib29sDQogICAgc3luY193aXRo
X3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7DQoNCg0KICAgIGxvY2FsZQ0K
ICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KDQogICAgaW5saW5l
IGxvY2FsZQ0KICAgIGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19s
b2NhbGU7IH0NCg0KDQogICAgc3RhdGljIGludA0KICAgIHhhbGxvYygpIHRo
cm93KCk7DQoNCiAgICBpbmxpbmUgbG9uZyYNCiAgICBpd29yZChpbnQgX19p
eCkNCiAgICB7DQogICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4IDwgX01f
d29yZF9saW1pdCkNCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29y
ZHNbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOw0KICAgICAgcmV0dXJu
IF9fd29yZC5fTV9pd29yZDsNCiAgICB9DQoNCiAgICBpbmxpbmUgdm9pZCom
DQogICAgcHdvcmQoaW50IF9faXgpDQogICAgew0KICAgICAgX1dvcmRzJiBf
X3dvcmQgPSAoX19peCA8IF9NX3dvcmRfbGltaXQpDQogICAgICAgICAgICAg
ICAgICAgICAgICA/IF9NX3dvcmRzW19faXhdIDogX01fZ3Jvd193b3Jkcyhf
X2l4KTsNCiAgICAgIHJldHVybiBfX3dvcmQuX01fcHdvcmQ7DQogICAgfQ0K
DQoNCiAgICB+aW9zX2Jhc2UoKTsNCg0KICBwcm90ZWN0ZWQ6DQogICAgaW9z
X2Jhc2UoKTsNCg0KDQogIHByaXZhdGU6DQogICAgaW9zX2Jhc2UoY29uc3Qg
aW9zX2Jhc2UmKTsNCg0KICAgIGlvc19iYXNlJg0KICAgIG9wZXJhdG9yPShj
b25zdCBpb3NfYmFzZSYpOw0KDQogIH07DQoNCg0KICBpbmxpbmUgaW9zX2Jh
c2UmDQogIGJvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAg
X19iYXNlLnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7DQogICAgcmV0dXJu
IF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgbm9ib29s
YWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS51bnNl
dGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7DQogICAgcmV0dXJuIF9fYmFzZTsN
CiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgc2hvd2Jhc2UoaW9zX2Jh
c2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpz
aG93YmFzZSk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGlu
ZSBpb3NfYmFzZSYNCiAgbm9zaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQ0K
ICB7DQogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOw0K
ICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2Um
DQogIHNob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19i
YXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7DQogICAgcmV0dXJuIF9f
YmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgbm9zaG93cG9p
bnQoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS51bnNldGYo
aW9zX2Jhc2U6OnNob3dwb2ludCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAg
fQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgc2hvd3Bvcyhpb3NfYmFzZSYg
X19iYXNlKQ0KICB7DQogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dw
b3MpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9z
X2Jhc2UmDQogIG5vc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQog
ICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7DQogICAgcmV0
dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYNCiAgc2tp
cHdzKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2Uuc2V0Zihp
b3NfYmFzZTo6c2tpcHdzKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoN
CiAgaW5saW5lIGlvc19iYXNlJg0KICBub3NraXB3cyhpb3NfYmFzZSYgX19i
YXNlKQ0KICB7DQogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2tpcHdz
KTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19i
YXNlJg0KICB1cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAg
IF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOw0KICAgIHJldHVy
biBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIG5vdXBw
ZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5z
ZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOw0KICAgIHJldHVybiBfX2Jhc2U7
DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIHVuaXRidWYoaW9zX2Jh
c2UmIF9fYmFzZSkNCiAgew0KICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6
dW5pdGJ1Zik7DQogICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxp
bmUgaW9zX2Jhc2UmDQogIG5vdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQ0K
ICB7DQogICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOw0K
ICAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCg0KICBpbmxpbmUgaW9zX2Jh
c2UmDQogIGludGVybmFsKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICAg
X19iYXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRq
dXN0ZmllbGQpOw0KICAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5s
aW5lIGlvc19iYXNlJg0KICBsZWZ0KGlvc19iYXNlJiBfX2Jhc2UpDQogIHsN
CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6bGVmdCwgaW9zX2Jhc2U6OmFk
anVzdGZpZWxkKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5s
aW5lIGlvc19iYXNlJg0KICByaWdodChpb3NfYmFzZSYgX19iYXNlKQ0KICB7
DQogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnJpZ2h0LCBpb3NfYmFzZTo6
YWRqdXN0ZmllbGQpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KDQog
IGlubGluZSBpb3NfYmFzZSYNCiAgZGVjKGlvc19iYXNlJiBfX2Jhc2UpDQog
IHsNCiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6
YmFzZWZpZWxkKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5s
aW5lIGlvc19iYXNlJg0KICBoZXgoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0K
ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpoZXgsIGlvc19iYXNlOjpiYXNl
ZmllbGQpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUg
aW9zX2Jhc2UmDQogIG9jdChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAg
X19iYXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVs
ZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQoNCiAgaW5saW5lIGlv
c19iYXNlJg0KICBmaXhlZChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAg
X19iYXNlLnNldGYoaW9zX2Jhc2U6OmZpeGVkLCBpb3NfYmFzZTo6ZmxvYXRm
aWVsZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBp
b3NfYmFzZSYNCiAgc2NpZW50aWZpYyhpb3NfYmFzZSYgX19iYXNlKQ0KICB7
DQogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19i
YXNlOjpmbG9hdGZpZWxkKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoN
Cn0NCiMgNDUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9pb3MuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMSAzDQojIDM4
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
c3RyZWFtYnVmLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25m
aWcuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMw0KIyAxICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgi
IDEgMw0KIyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMN
CiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9zdHJlYW1idWYuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMNCiMgNDMg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9z
dHJlYW1idWYuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDEgMw0KIyA0NCAiL2hvbWUv
bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1
Zi5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFtc2l6
ZQ0KICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9U
cmFpdHM+JiBfaW9zLA0KICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0
cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sDQogICAgICAgICAg
ICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4q
IF9fc2JvdXQpOw0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1Zg0K
ICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsN
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBl
IGludF90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw
ZTo6cG9zX3R5cGUgcG9zX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1l
IHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsNCg0KDQogICAgICB0
eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOw0KICAgICAg
dHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlw
ZT4gX19zdHJlYW1idWZfdHlwZTsNCg0KICAgICAgZnJpZW5kIGNsYXNzIGJh
c2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsNCiAgICAgIGZyaWVu
ZCBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+
Ow0KICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcl90eXBl
LCB0cmFpdHNfdHlwZT47DQogICAgICBmcmllbmQgY2xhc3MgaXN0cmVhbWJ1
Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsNCiAgICAgIGZy
aWVuZCBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJh
aXRzX3R5cGU+Ow0KDQogICAgICBmcmllbmQgc3RyZWFtc2l6ZQ0KICAgICAg
X19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFp
dHNfdHlwZT4mIF9faW9zLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4sX19zdHJlYW1idWZfdHlwZSogX19z
Ym91dCk7DQoNCiAgICBwcm90ZWN0ZWQ6DQoNCg0KDQoNCg0KDQogICAgICBj
aGFyX3R5cGUqIF9NX2J1ZjsNCg0KDQogICAgICBpbnRfdHlwZSBfTV9idWZf
c2l6ZTsNCg0KDQogICAgICBpbnRfdHlwZSBfTV9idWZfc2l6ZV9vcHQ7DQoN
Cg0KDQogICAgICBib29sIF9NX2J1Zl91bmlmaWVkOw0KDQoNCg0KDQoNCg0K
ICAgICAgY2hhcl90eXBlKiBfTV9pbl9iZWc7DQogICAgICBjaGFyX3R5cGUq
IF9NX2luX2N1cjsNCiAgICAgIGNoYXJfdHlwZSogX01faW5fZW5kOw0KICAg
ICAgY2hhcl90eXBlKiBfTV9vdXRfYmVnOw0KICAgICAgY2hhcl90eXBlKiBf
TV9vdXRfY3VyOw0KICAgICAgY2hhcl90eXBlKiBfTV9vdXRfZW5kOw0KDQoN
CiAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfTV9tb2RlOw0KDQoNCiAgICAg
IGxvY2FsZSBfTV9idWZfbG9jYWxlOw0KDQoNCiAgICAgIGJvb2wgX01fYnVm
X2xvY2FsZV9pbml0Ow0KDQoNCg0KDQoNCg0KICAgICAgaW50X3R5cGUgX01f
cGJhY2tfc2l6ZTsNCiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2s7DQogICAg
ICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOw0KICAgICAgY2hhcl90
eXBlKiBfTV9wYmFja19lbmRfc2F2ZTsNCiAgICAgIGJvb2wgX01fcGJhY2tf
aW5pdDsNCg0KDQoNCg0KICAgICAgdm9pZA0KICAgICAgX01fcGJhY2tfY3Jl
YXRlKCkNCiAgICAgIHsNCiAgICAgICAgaWYgKCFfTV9wYmFja19pbml0KQ0K
ICAgICAgICAgIHsNCiAgICAgICAgICAgIGludF90eXBlIF9fZGlzdCA9IF9N
X2luX2VuZCAtIF9NX2luX2N1cjsNCiAgICAgICAgICAgIGludF90eXBlIF9f
bGVuID0gbWluKF9NX3BiYWNrX3NpemUsIF9fZGlzdCk7DQogICAgICAgICAg
ICB0cmFpdHNfdHlwZTo6Y29weShfTV9wYmFjaywgX01faW5fY3VyLCBfX2xl
bik7DQogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9NX2luX2N1
cjsNCiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX01faW5fZW5k
Ow0KICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9wYmFjaywgX01fcGJhY2ss
IF9NX3BiYWNrICsgX19sZW4pOw0KICAgICAgICAgICAgX01fcGJhY2tfaW5p
dCA9IHRydWU7DQogICAgICAgICAgfQ0KICAgICAgfQ0KDQoNCg0KDQogICAg
ICB2b2lkDQogICAgICBfTV9wYmFja19kZXN0cm95KCkNCiAgICAgIHsNCiAg
ICAgICAgaWYgKF9NX3BiYWNrX2luaXQpDQogICAgICAgICAgew0KDQogICAg
ICAgICAgICBpbnRfdHlwZSBfX29mZl9jdXIgPSBfTV9pbl9jdXIgLSBfTV9w
YmFjazsNCg0KDQogICAgICAgICAgICBpbnRfdHlwZSBfX29mZl9lbmQgPSAw
Ow0KICAgICAgICAgICAgaW50X3R5cGUgX19wYmFja19sZW4gPSBfTV9pbl9l
bmQgLSBfTV9wYmFjazsNCiAgICAgICAgICAgIGludF90eXBlIF9fc2F2ZV9s
ZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsNCiAgICAgICAgICAg
IGlmIChfX3BiYWNrX2xlbiA+IF9fc2F2ZV9sZW4pDQogICAgICAgICAgICAg
IF9fb2ZmX2VuZCA9IF9fcGJhY2tfbGVuIC0gX19zYXZlX2xlbjsNCg0KICAg
ICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX3BiYWNrX2N1cl9zYXZl
ICsgX19vZmZfY3VyLA0KICAgICAgICAgICAgICAgICAgICAgICBfTV9wYmFj
a19lbmRfc2F2ZSArIF9fb2ZmX2VuZCk7DQogICAgICAgICAgICBfTV9wYmFj
a19jdXJfc2F2ZSA9IF9fbnVsbDsNCiAgICAgICAgICAgIF9NX3BiYWNrX2Vu
ZF9zYXZlID0gX19udWxsOw0KICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9
IGZhbHNlOw0KICAgICAgICAgIH0NCiAgICAgIH0NCg0KDQoNCiAgICAgIHZv
aWQNCiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9fbikNCiAgICAg
IHsNCiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9vdXRfY3VyOw0KICAg
ICAgICBfTV9pbl9jdXIgKz0gX19uOw0KICAgICAgICBpZiAoX190ZXN0b3V0
ICYmIF9NX2J1Zl91bmlmaWVkKQ0KICAgICAgICAgIF9NX291dF9jdXIgKz0g
X19uOw0KICAgICAgfQ0KIyAxOTMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMw0KICAgICAgdm9p
ZA0KICAgICAgX01fb3V0X2N1cl9tb3ZlKG9mZl90eXBlIF9fbikNCiAgICAg
IHsNCiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2luX2N1cjsNCg0KICAg
ICAgICBfTV9vdXRfY3VyICs9IF9fbjsNCiAgICAgICAgaWYgKF9fdGVzdGlu
ICYmIF9NX2J1Zl91bmlmaWVkKQ0KICAgICAgICAgIF9NX2luX2N1ciArPSBf
X247DQogICAgICAgIGlmIChfTV9vdXRfY3VyID4gX01fb3V0X2VuZCkNCiAg
ICAgICAgICB7DQogICAgICAgICAgICBfTV9vdXRfZW5kID0gX01fb3V0X2N1
cjsNCg0KICAgICAgICAgICAgaWYgKF9fdGVzdGluKQ0KICAgICAgICAgICAg
ICBfTV9pbl9lbmQgKz0gX19uOw0KICAgICAgICAgIH0NCiAgICAgIH0NCg0K
DQoNCg0KICAgICAgb2ZmX3R5cGUNCiAgICAgIF9NX291dF9idWZfc2l6ZSgp
DQogICAgICB7DQogICAgICAgIG9mZl90eXBlIF9fcmV0ID0gMDsNCiAgICAg
ICAgaWYgKF9NX291dF9jdXIpDQogICAgICAgICAgew0KDQogICAgICAgICAg
ICBpZiAoX01fb3V0X2JlZyA9PSBfTV9idWYpDQogICAgICAgICAgICAgIF9f
cmV0ID0gX01fb3V0X2JlZyArIF9NX2J1Zl9zaXplIC0gX01fb3V0X2N1cjsN
Cg0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICBfX3JldCA9IF9N
X291dF9lbmQgLSBfTV9vdXRfY3VyOw0KICAgICAgICAgIH0NCiAgICAgICAg
cmV0dXJuIF9fcmV0Ow0KICAgICAgfQ0KIyAyMzYgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMw0K
ICAgICAgdm9pZA0KICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUodm9pZCkN
CiAgICAgIHsNCiAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4p
DQogICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX2J1ZiwgX01fYnVm
KTsNCiAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQ0KICAg
ICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYpOw0KICAgICAgfQ0K
DQogICAgICB2b2lkDQogICAgICBfTV9zZXRfZGV0ZXJtaW5hdGUob2ZmX3R5
cGUgX19vZmYpDQogICAgICB7DQogICAgICAgIGJvb2wgX190ZXN0aW4gPSBf
TV9tb2RlICYgaW9zX2Jhc2U6OmluOw0KICAgICAgICBib29sIF9fdGVzdG91
dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0Ow0KICAgICAgICBpZiAoX190
ZXN0aW4pDQogICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX2J1Ziwg
X01fYnVmICsgX19vZmYpOw0KICAgICAgICBpZiAoX190ZXN0b3V0KQ0KICAg
ICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYgKyBfX29mZik7DQog
ICAgICB9DQoNCiAgICAgIGJvb2wNCiAgICAgIF9NX2lzX2luZGV0ZXJtaW5h
dGUodm9pZCkNCiAgICAgIHsNCiAgICAgICAgYm9vbCBfX3JldCA9IGZhbHNl
Ow0KDQogICAgICAgIGlmIChfTV9idWYpDQogICAgICAgICAgew0KICAgICAg
ICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pDQogICAgICAgICAg
ICAgIF9fcmV0ID0gX01faW5fYmVnID09IF9NX2luX2N1ciAmJiBfTV9pbl9j
dXIgPT0gX01faW5fZW5kOw0KICAgICAgICAgICAgaWYgKF9NX21vZGUgJiBp
b3NfYmFzZTo6b3V0KQ0KICAgICAgICAgICAgICBfX3JldCA9IF9NX291dF9i
ZWcgPT0gX01fb3V0X2N1ciAmJiBfTV9vdXRfY3VyID09IF9NX291dF9lbmQ7
DQogICAgICAgICAgfQ0KICAgICAgICByZXR1cm4gX19yZXQ7DQogICAgICB9
DQoNCiAgcHVibGljOg0KICAgICAgdmlydHVhbA0KICAgICAgfmJhc2ljX3N0
cmVhbWJ1ZigpDQogICAgICB7DQogICAgICAgIF9NX2J1Zl91bmlmaWVkID0g
ZmFsc2U7DQogICAgICAgIF9NX2J1Zl9zaXplID0gMDsNCiAgICAgICAgX01f
YnVmX3NpemVfb3B0ID0gMDsNCiAgICAgICAgX01fbW9kZSA9IGlvc19iYXNl
OjpvcGVubW9kZSgwKTsNCiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0g
ZmFsc2U7DQogICAgICB9DQoNCg0KICAgICAgbG9jYWxlDQogICAgICBwdWJp
bWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQ0KICAgICAgew0KICAgICAgICBs
b2NhbGUgX190bXAodGhpcy0+Z2V0bG9jKCkpOw0KICAgICAgICB0aGlzLT5p
bWJ1ZShfX2xvYyk7DQogICAgICAgIHJldHVybiBfX3RtcDsNCiAgICAgIH0N
Cg0KICAgICAgbG9jYWxlDQogICAgICBnZXRsb2MoKSBjb25zdA0KICAgICAg
ew0KICAgICAgICBpZiAoX01fYnVmX2xvY2FsZV9pbml0KQ0KICAgICAgICAg
IHJldHVybiBfTV9idWZfbG9jYWxlOw0KICAgICAgICBlbHNlDQogICAgICAg
ICAgcmV0dXJuIGxvY2FsZSgpOw0KICAgICAgfQ0KDQoNCiAgICAgIF9fc3Ry
ZWFtYnVmX3R5cGUqDQogICAgICBwdWJzZXRidWYoY2hhcl90eXBlKiBfX3Ms
IHN0cmVhbXNpemUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+c2V0YnVm
KF9fcywgX19uKTsgfQ0KDQogICAgICBwb3NfdHlwZQ0KICAgICAgcHVic2Vl
a29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXks
DQogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUg
PSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgeyByZXR1
cm4gdGhpcy0+c2Vla29mZihfX29mZiwgX193YXksIF9fbW9kZSk7IH0NCg0K
ICAgICAgcG9zX3R5cGUNCiAgICAgIHB1YnNlZWtwb3MocG9zX3R5cGUgX19z
cCwNCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9k
ZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpDQogICAgICB7IHJl
dHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0NCg0KICAgICAg
aW50DQogICAgICBwdWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9
DQoNCg0KDQogICAgICBzdHJlYW1zaXplDQogICAgICBpbl9hdmFpbCgpDQog
ICAgICB7DQogICAgICAgIHN0cmVhbXNpemUgX19yZXQ7DQogICAgICAgIGlm
IChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQ0KICAgICAg
ICAgIHsNCiAgICAgICAgICAgIGlmIChfTV9wYmFja19pbml0KQ0KICAgICAg
ICAgICAgICB7DQogICAgICAgICAgICAgICAgaW50X3R5cGUgX19zYXZlX2xl
biA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fcGJhY2tfY3VyX3NhdmU7DQog
ICAgICAgICAgICAgICAgaW50X3R5cGUgX19wYmFja19sZW4gPSBfTV9pbl9j
dXIgLSBfTV9wYmFjazsNCiAgICAgICAgICAgICAgICBfX3JldCA9IF9fc2F2
ZV9sZW4gLSBfX3BiYWNrX2xlbjsNCiAgICAgICAgICAgICAgfQ0KICAgICAg
ICAgICAgZWxzZQ0KICAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPmVncHRy
KCkgLSB0aGlzLT5ncHRyKCk7DQogICAgICAgICAgfQ0KICAgICAgICBlbHNl
DQogICAgICAgICAgX19yZXQgPSB0aGlzLT5zaG93bWFueWMoKTsNCiAgICAg
ICAgcmV0dXJuIF9fcmV0Ow0KICAgICAgfQ0KDQogICAgICBpbnRfdHlwZQ0K
ICAgICAgc25leHRjKCkNCiAgICAgIHsNCiAgICAgICAgaW50X3R5cGUgX19l
b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgIHJldHVybiAodGhp
cy0+c2J1bXBjKCkgPT0gX19lb2YgPyBfX2VvZiA6IHRoaXMtPnNnZXRjKCkp
Ow0KICAgICAgfQ0KDQogICAgICBpbnRfdHlwZQ0KICAgICAgc2J1bXBjKCk7
DQoNCiAgICAgIGludF90eXBlDQogICAgICBzZ2V0YygpDQogICAgICB7DQog
ICAgICAgIGludF90eXBlIF9fcmV0Ow0KICAgICAgICBpZiAoX01faW5fY3Vy
ICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkNCiAgICAgICAgICBfX3JldCA9
IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqKHRoaXMtPmdwdHIoKSkpOw0K
ICAgICAgICBlbHNlDQogICAgICAgICAgX19yZXQgPSB0aGlzLT51bmRlcmZs
b3coKTsNCiAgICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgICAgfQ0KDQogICAg
ICBzdHJlYW1zaXplDQogICAgICBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3Ry
ZWFtc2l6ZSBfX24pDQogICAgICB7IHJldHVybiB0aGlzLT54c2dldG4oX19z
LCBfX24pOyB9DQoNCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHNwdXRiYWNr
YyhjaGFyX3R5cGUgX19jKTsNCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHN1
bmdldGMoKTsNCg0KDQogICAgICBpbnRfdHlwZQ0KICAgICAgc3B1dGMoY2hh
cl90eXBlIF9fYyk7DQoNCiAgICAgIHN0cmVhbXNpemUNCiAgICAgIHNwdXRu
KGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICAg
IHsgcmV0dXJuIHRoaXMtPnhzcHV0bihfX3MsIF9fbik7IH0NCg0KICAgIHBy
b3RlY3RlZDoNCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZigpDQogICAgICA6IF9N
X2J1ZihfX251bGwpLCBfTV9idWZfc2l6ZSgwKSwNCiAgICAgIF9NX2J1Zl9z
aXplX29wdChzdGF0aWNfY2FzdDxpbnRfdHlwZT4oMTAyNCkpLCBfTV9idWZf
dW5pZmllZChmYWxzZSksDQogICAgICBfTV9pbl9iZWcoMCksIF9NX2luX2N1
cigwKSwgX01faW5fZW5kKDApLCBfTV9vdXRfYmVnKDApLCBfTV9vdXRfY3Vy
KDApLA0KICAgICAgX01fb3V0X2VuZCgwKSwgX01fbW9kZShpb3NfYmFzZTo6
b3Blbm1vZGUoMCkpLCBfTV9idWZfbG9jYWxlKGxvY2FsZSgpKSwNCiAgICAg
IF9NX2J1Zl9sb2NhbGVfaW5pdChmYWxzZSksIF9NX3BiYWNrX3NpemUoMSks
IF9NX3BiYWNrKF9fbnVsbCksDQogICAgICBfTV9wYmFja19jdXJfc2F2ZShf
X251bGwpLCBfTV9wYmFja19lbmRfc2F2ZShfX251bGwpLCBfTV9wYmFja19p
bml0KGZhbHNlKQ0KICAgICAgeyB9DQoNCg0KICAgICAgY2hhcl90eXBlKg0K
ICAgICAgZWJhY2soKSBjb25zdCB7IHJldHVybiBfTV9pbl9iZWc7IH0NCg0K
ICAgICAgY2hhcl90eXBlKg0KICAgICAgZ3B0cigpIGNvbnN0IHsgcmV0dXJu
IF9NX2luX2N1cjsgfQ0KDQogICAgICBjaGFyX3R5cGUqDQogICAgICBlZ3B0
cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2VuZDsgfQ0KDQogICAgICB2b2lk
DQogICAgICBnYnVtcChpbnQgX19uKSB7IF9NX2luX2N1ciArPSBfX247IH0N
Cg0KICAgICAgdm9pZA0KICAgICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZywg
Y2hhcl90eXBlKiBfX2duZXh0LCBjaGFyX3R5cGUqIF9fZ2VuZCkNCiAgICAg
IHsNCiAgICAgICAgX01faW5fYmVnID0gX19nYmVnOw0KICAgICAgICBfTV9p
bl9jdXIgPSBfX2duZXh0Ow0KICAgICAgICBfTV9pbl9lbmQgPSBfX2dlbmQ7
DQogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pICYmIF9f
Z2JlZyAmJiBfX2duZXh0ICYmIF9fZ2VuZCkNCiAgICAgICAgICBfTV9tb2Rl
ID0gX01fbW9kZSB8IGlvc19iYXNlOjppbjsNCiAgICAgIH0NCg0KDQogICAg
ICBjaGFyX3R5cGUqDQogICAgICBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9N
X291dF9iZWc7IH0NCg0KICAgICAgY2hhcl90eXBlKg0KICAgICAgcHB0cigp
IGNvbnN0IHsgcmV0dXJuIF9NX291dF9jdXI7IH0NCg0KICAgICAgY2hhcl90
eXBlKg0KICAgICAgZXBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfZW5k
OyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHBidW1wKGludCBfX24pIHsgX01f
b3V0X2N1ciArPSBfX247IH0NCg0KICAgICAgdm9pZA0KICAgICAgc2V0cChj
aGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBlKiBfX3BlbmQpDQogICAgICB7
DQogICAgICAgIF9NX291dF9iZWcgPSBfTV9vdXRfY3VyID0gX19wYmVnOw0K
ICAgICAgICBfTV9vdXRfZW5kID0gX19wZW5kOw0KICAgICAgICBpZiAoIShf
TV9tb2RlICYgaW9zX2Jhc2U6Om91dCkgJiYgX19wYmVnICYmIF9fcGVuZCkN
CiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjpvdXQ7
DQogICAgICB9DQoNCg0KDQogICAgICB2aXJ0dWFsIHZvaWQNCiAgICAgIGlt
YnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgICB7DQogICAgICAgIF9N
X2J1Zl9sb2NhbGVfaW5pdCA9IHRydWU7DQogICAgICAgIGlmIChfTV9idWZf
bG9jYWxlICE9IF9fbG9jKQ0KICAgICAgICAgIF9NX2J1Zl9sb2NhbGUgPSBf
X2xvYzsNCiAgICAgIH0NCg0KDQogICAgICB2aXJ0dWFsIGJhc2ljX3N0cmVh
bWJ1ZjxjaGFyX3R5cGUsX1RyYWl0cz4qDQogICAgICBzZXRidWYoY2hhcl90
eXBlKiwgc3RyZWFtc2l6ZSkNCiAgICAgIHsgcmV0dXJuIHRoaXM7IH0NCg0K
ICAgICAgdmlydHVhbCBwb3NfdHlwZQ0KICAgICAgc2Vla29mZihvZmZfdHlw
ZSwgaW9zX2Jhc2U6OnNlZWtkaXIsDQogICAgICAgICAgICAgIGlvc19iYXNl
OjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpDQog
ICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9DQoNCiAg
ICAgIHZpcnR1YWwgcG9zX3R5cGUNCiAgICAgIHNlZWtwb3MocG9zX3R5cGUs
DQogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNl
OjppbiB8IGlvc19iYXNlOjpvdXQpDQogICAgICB7IHJldHVybiBwb3NfdHlw
ZShvZmZfdHlwZSgtMSkpOyB9DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAg
ICBzeW5jKCkgeyByZXR1cm4gMDsgfQ0KDQoNCiAgICAgIHZpcnR1YWwgc3Ry
ZWFtc2l6ZQ0KICAgICAgc2hvd21hbnljKCkgeyByZXR1cm4gMDsgfQ0KDQog
ICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHhzZ2V0bihjaGFyX3R5
cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQogICAgICB2aXJ0dWFsIGlu
dF90eXBlDQogICAgICB1bmRlcmZsb3coKQ0KICAgICAgeyByZXR1cm4gdHJh
aXRzX3R5cGU6OmVvZigpOyB9DQoNCiAgICAgIHZpcnR1YWwgaW50X3R5cGUN
CiAgICAgIHVmbG93KCkNCiAgICAgIHsNCiAgICAgICAgaW50X3R5cGUgX19y
ZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgIGJvb2wgX190ZXN0
ZW9mID0gdGhpcy0+dW5kZXJmbG93KCkgPT0gX19yZXQ7DQogICAgICAgIGJv
b2wgX190ZXN0cGVuZGluZyA9IF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBf
TV9pbl9lbmQ7DQogICAgICAgIGlmICghX190ZXN0ZW9mICYmIF9fdGVzdHBl
bmRpbmcpDQogICAgICAgICAgew0KICAgICAgICAgICAgX19yZXQgPSB0cmFp
dHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7DQogICAgICAgICAg
ICArK19NX2luX2N1cjsNCiAgICAgICAgICAgIGlmIChfTV9idWZfdW5pZmll
ZCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkNCiAgICAgICAgICAgICAg
KytfTV9vdXRfY3VyOw0KICAgICAgICAgIH0NCiAgICAgICAgcmV0dXJuIF9f
cmV0Ow0KICAgICAgfQ0KDQoNCiAgICAgIHZpcnR1YWwgaW50X3R5cGUNCiAg
ICAgIHBiYWNrZmFpbChpbnRfdHlwZSA9IHRyYWl0c190eXBlOjplb2YoKSkN
CiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQ0KDQoNCiAg
ICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQ0KICAgICAgeHNwdXRuKGNvbnN0IGNo
YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7DQoNCiAgICAgIHZpcnR1
YWwgaW50X3R5cGUNCiAgICAgIG92ZXJmbG93KGludF90eXBlID0gdHJhaXRz
X3R5cGU6OmVvZigpKQ0KICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVv
ZigpOyB9DQojIDUxNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAzDQogICAgcHJpdmF0ZToNCiAg
ICAgIGJhc2ljX3N0cmVhbWJ1Zihjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJik7
DQoNCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUmDQogICAgICBvcGVyYXRvcj0o
Y29uc3QgX19zdHJlYW1idWZfdHlwZSYpOw0KDQogICAgfTsNCg0KfQ0KDQoN
Cg0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0cmVhbWJ1Zi50Y2MiIDEgMw0KIyAzNyAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyZWFtYnVmLnRjYyIgMw0KbmFt
ZXNwYWNlIHN0ZCB7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+OjppbnRfdHlwZQ0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+OjoNCiAgICBzYnVtcGMoKQ0KICAgIHsNCiAgICAgIGlu
dF90eXBlIF9fcmV0Ow0KICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9j
dXIgPCBfTV9pbl9lbmQpDQogICAgICAgIHsNCiAgICAgICAgICBjaGFyX3R5
cGUgX19jID0gKmdwdHIoKTsNCiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgx
KTsNCiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlw
ZShfX2MpOw0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIF9fcmV0
ID0gdGhpcy0+dWZsb3coKTsNCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPg0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Ojpp
bnRfdHlwZQ0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
OjoNCiAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYykNCiAgICB7DQogICAg
ICBpbnRfdHlwZSBfX3JldDsNCiAgICAgIGJvb2wgX190ZXN0cG9zID0gX01f
aW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsNCiAgICAgIGJvb2wg
X190ZXN0bmUgPSBfTV9pbl9jdXIgJiYgIXRyYWl0c190eXBlOjplcShfX2Ms
IHRoaXMtPmdwdHIoKVstMV0pOw0KICAgICAgaWYgKCFfX3Rlc3Rwb3MgfHwg
X190ZXN0bmUpDQogICAgICAgIF9fcmV0ID0gcGJhY2tmYWlsKHRyYWl0c190
eXBlOjp0b19pbnRfdHlwZShfX2MpKTsNCiAgICAgIGVsc2UNCiAgICAgICAg
ew0KICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsNCiAgICAgICAgICBf
X3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigp
KTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
DQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90
eXBlDQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0K
ICAgIHN1bmdldGMoKQ0KICAgIHsNCiAgICAgIGludF90eXBlIF9fcmV0Ow0K
ICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXIp
DQogICAgICAgIHsNCiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7DQog
ICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9N
X2luX2N1cik7DQogICAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgX19y
ZXQgPSB0aGlzLT5wYmFja2ZhaWwoKTsNCiAgICAgIHJldHVybiBfX3JldDsN
CiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPjo6aW50X3R5cGUNCiAgICBiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPjo6DQogICAgc3B1dGMoY2hhcl90eXBlIF9fYykN
CiAgICB7DQogICAgICBpbnRfdHlwZSBfX3JldDsNCiAgICAgIGlmIChfTV9v
dXRfYnVmX3NpemUoKSkNCiAgICAgICAgew0KICAgICAgICAgICpfTV9vdXRf
Y3VyID0gX19jOw0KICAgICAgICAgIF9NX291dF9jdXJfbW92ZSgxKTsNCiAg
ICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2Mp
Ow0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIF9fcmV0ID0gdGhp
cy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOw0K
ICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFtc2l6
ZQ0KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg
ICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAg
IHsNCiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOw0KICAgICAgd2hpbGUg
KF9fcmV0IDwgX19uKQ0KICAgICAgICB7DQogICAgICAgICAgc2l6ZV90IF9f
YnVmX2xlbiA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsNCiAgICAgICAgICBp
ZiAoX19idWZfbGVuID4gMCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg
ICAgc2l6ZV90IF9fcmVtYWluaW5nID0gX19uIC0gX19yZXQ7DQogICAgICAg
ICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWlu
aW5nKTsNCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBf
TV9pbl9jdXIsIF9fbGVuKTsNCiAgICAgICAgICAgICAgX19yZXQgKz0gX19s
ZW47DQogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsNCiAgICAgICAgICAg
ICAgX01faW5fY3VyX21vdmUoX19sZW4pOw0KICAgICAgICAgICAgfQ0KDQog
ICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQ0KICAgICAgICAgICAgew0KICAg
ICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOw0KICAg
ICAgICAgICAgICBpZiAoX19jICE9IHRyYWl0c190eXBlOjplb2YoKSkNCiAg
ICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICB0cmFpdHNfdHlw
ZTo6YXNzaWduKCpfX3MrKywgdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShf
X2MpKTsNCiAgICAgICAgICAgICAgICAgICsrX19yZXQ7DQogICAgICAgICAg
ICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAg
YnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVy
biBfX3JldDsNCiAgICB9DQoNCg0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBzdHJlYW1zaXpl
DQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAg
IHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p
DQogICAgew0KICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7DQogICAgICB3
aGlsZSAoX19yZXQgPCBfX24pDQogICAgICAgIHsNCiAgICAgICAgICBvZmZf
dHlwZSBfX2J1Zl9sZW4gPSBfTV9vdXRfYnVmX3NpemUoKTsNCiAgICAgICAg
ICBpZiAoX19idWZfbGVuID4gMCkNCiAgICAgICAgICAgIHsNCiAgICAgICAg
ICAgICAgb2ZmX3R5cGUgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsNCiAg
ICAgICAgICAgICAgb2ZmX3R5cGUgX19sZW4gPSBtaW4oX19idWZfbGVuLCBf
X3JlbWFpbmluZyk7DQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5
KF9NX291dF9jdXIsIF9fcywgX19sZW4pOw0KICAgICAgICAgICAgICBfX3Jl
dCArPSBfX2xlbjsNCiAgICAgICAgICAgICAgX19zICs9IF9fbGVuOw0KICAg
ICAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoX19sZW4pOw0KICAgICAgICAg
ICAgfQ0KDQogICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQ0KICAgICAgICAg
ICAgew0KICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT5vdmVy
Zmxvdyh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9fcykpOw0KICAgICAg
ICAgICAgICBpZiAoX19jICE9IHRyYWl0c190eXBlOjplb2YoKSkNCiAgICAg
ICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICArK19fcmV0Ow0KICAg
ICAgICAgICAgICAgICAgKytfX3M7DQogICAgICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAg
ICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAg
ICB9DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFtc2l6ZQ0KICAgIF9fY29weV9z
dHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lvcywN
CiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPiogX19zYmluLA0KICAgICAgICAgICAgICAgICAgICAgIGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQ0KICB7
DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGlu
dF90eXBlOw0KDQogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsNCiAgICAg
IHN0cmVhbXNpemUgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOw0K
ICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0Ow0KICAgICAgYm9vbCBfX3Rlc3Rw
dXQgPSBfX3Nib3V0LT5fTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsNCiAgICAg
IHRyeSB7DQogICAgICAgIHdoaWxlIChfX3Rlc3RwdXQgJiYgX19idWZzaXpl
ICE9IC0xKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIF9feHRyY3QgPSBf
X3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXplKTsNCiAg
ICAgICAgICAgIF9fcmV0ICs9IF9feHRyY3Q7DQogICAgICAgICAgICBfX3Ni
aW4tPl9NX2luX2N1cl9tb3ZlKF9feHRyY3QpOw0KICAgICAgICAgICAgaWYg
KF9feHRyY3QgPT0gX19idWZzaXplKQ0KICAgICAgICAgICAgICB7DQogICAg
ICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYmluLT5zZ2V0YygpOw0K
ICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX1RyYWl0czo6ZW9mKCkpDQog
ICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIF9faW9z
LnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0KICAgICAgICAgICAgICAg
ICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg
ICAgICBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7DQogICAgICAg
ICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgYnJl
YWs7DQogICAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpIHsNCiAgICAgICAgaWYgKChfX2lvcy5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgIT0gMCkNCiAgICAgICAgICB0aHJv
dzsNCiAgICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQp9DQoj
IDUzMCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX3N0cmVhbWJ1Zi5oIiAyIDMNCiMgNDYgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzDQojIDEgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lv
cy5oIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL2Jhc2ljX2lvcy5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc2J1Zl9pdGVyLmgiIDEgMw0K
IyAzNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
c2J1Zl9pdGVyLmgiIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xh
c3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcg0KICAgIDogcHVibGljIGl0ZXJhdG9y
PG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+
DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQg
Y2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl
Ow0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPiBzdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsNCg0KICAgIHBy
aXZhdGU6DQogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsNCiAgICAg
IGJvb2wgX01fZmFpbGVkOw0KDQogICAgcHVibGljOg0KICAgICAgaW5saW5l
DQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19z
KSB0aHJvdyAoKQ0KICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01f
ZmFpbGVkKCFfTV9zYnVmKSB7IH0NCg0KICAgICAgb3N0cmVhbWJ1Zl9pdGVy
YXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdyAoKQ0KICAgICAgOiBf
TV9zYnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9DQoNCiAgICAg
IG9zdHJlYW1idWZfaXRlcmF0b3ImDQogICAgICBvcGVyYXRvcj0oX0NoYXJU
IF9fYyk7DQoNCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImDQogICAgICBv
cGVyYXRvciooKSB0aHJvdygpDQogICAgICB7IHJldHVybiAqdGhpczsgfQ0K
DQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3Ir
KyhpbnQpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9DQoNCiAg
ICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImDQogICAgICBvcGVyYXRvcisrKCkg
dGhyb3coKQ0KICAgICAgeyByZXR1cm4gKnRoaXM7IH0NCg0KICAgICAgYm9v
bA0KICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQ0KICAgICAgeyByZXR1
cm4gX01fZmFpbGVkOyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgaW5saW5lIG9zdHJl
YW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPShfQ2hh
clQgX19jKQ0KICAgIHsNCiAgICAgIGlmICghX01fZmFpbGVkICYmDQogICAg
ICAgICAgX1RyYWl0czo6ZXFfaW50X3R5cGUoX01fc2J1Zi0+c3B1dGMoX19j
KSxfVHJhaXRzOjplb2YoKSkpDQogICAgICBfTV9mYWlsZWQgPSB0cnVlOw0K
ICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KDQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNz
IGlzdHJlYW1idWZfaXRlcmF0b3INCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxp
bnB1dF9pdGVyYXRvcl90YWcsIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0czo6
b2ZmX3R5cGUsDQogICAgICAgICAgICAgICAgICAgICAgX0NoYXJUKiwgX0No
YXJUJj4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9D
aGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz
X3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90
eXBlIGludF90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVk
ZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlw
ZTsNCg0KICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFy
VCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmaXRlcl90eXBlOw0KDQogICAgcHJp
dmF0ZToNCg0KDQoNCg0KDQoNCg0KICAgICAgc3RyZWFtYnVmX3R5cGUqIF9N
X3NidWY7DQogICAgICBpbnRfdHlwZSBfTV9jOw0KDQogICAgcHVibGljOg0K
ICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcigpIHRocm93KCkNCiAgICAgIDog
X01fc2J1ZihfX251bGwpLCBfTV9jKC0yKSB7IH0NCg0KICAgICAgaXN0cmVh
bWJ1Zl9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykgdGhyb3coKQ0KICAg
ICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fYygtMikgeyB9DQoNCiAg
ICAgIGlzdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykg
dGhyb3coKQ0KICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2MoLTIpIHsgfQ0K
DQoNCg0KDQogICAgICBjaGFyX3R5cGUNCiAgICAgIG9wZXJhdG9yKigpIGNv
bnN0DQogICAgICB7DQoNCiAgICAgICAgY2hhcl90eXBlIF9fcmV0Ow0KICAg
ICAgICBpZiAoX01fc2J1ZiAmJiBfTV9jICE9IHN0YXRpY19jYXN0PGludF90
eXBlPigtMikpDQogICAgICAgICAgX19yZXQgPSBfTV9jOw0KICAgICAgICBl
bHNlIGlmIChfTV9zYnVmKQ0KICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5
cGU6OnRvX2NoYXJfdHlwZShfTV9zYnVmLT5zZ2V0YygpKTsNCiAgICAgICAg
ZWxzZQ0KICAgICAgICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBl
Pih0cmFpdHNfdHlwZTo6ZW9mKCkpOw0KICAgICAgICByZXR1cm4gX19yZXQ7
DQogICAgICB9DQoNCiAgICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSYNCiAg
ICAgIG9wZXJhdG9yKysoKQ0KICAgICAgew0KICAgICAgICBpZiAoX01fc2J1
ZikNCiAgICAgICAgICBfTV9zYnVmLT5zYnVtcGMoKTsNCiAgICAgICAgX01f
YyA9IC0yOw0KICAgICAgICByZXR1cm4gKnRoaXM7DQogICAgICB9DQoNCiAg
ICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZQ0KICAgICAgb3BlcmF0b3IrKyhp
bnQpDQogICAgICB7DQogICAgICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSBf
X29sZCA9ICp0aGlzOw0KICAgICAgICBpZiAoX01fc2J1ZikNCiAgICAgICAg
ICBfX29sZC5fTV9jID0gX01fc2J1Zi0+c2J1bXBjKCk7DQogICAgICAgIF9N
X2MgPSAtMjsNCiAgICAgICAgcmV0dXJuIF9fb2xkOw0KICAgICAgfQ0KDQog
ICAgICBib29sDQogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVy
X3R5cGUmIF9fYikNCiAgICAgIHsNCiAgICAgICAgaW50X3R5cGUgX19lb2Yg
PSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgIGJvb2wgX190aGlzZW9m
ID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMoKSA9PSBfX2VvZjsNCiAg
ICAgICAgYm9vbCBfX2Jlb2YgPSAhX19iLl9NX3NidWYNCiAgICAgICAgICAg
ICAgICAgICAgICB8fCBfX2IuX01fc2J1Zi0+c2dldGMoKSA9PSBfX2VvZjsN
CiAgICAgICAgcmV0dXJuIChfX3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190
aGlzZW9mICYmICFfX2Jlb2YpKTsNCiAgICAgIH0NCg0KDQoNCg0KICAgICAg
Ym9vbA0KICAgICAgZXF1YWwoY29uc3QgX19pc3RyZWFtYnVmaXRlcl90eXBl
JiBfX2IpIGNvbnN0DQogICAgICB7DQogICAgICAgIGludF90eXBlIF9fZW9m
ID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICBib29sIF9fdGhpc2Vv
ZiA9ICFfTV9zYnVmIHx8IF9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7DQog
ICAgICAgIGJvb2wgX19iZW9mID0gIV9fYi5fTV9zYnVmDQogICAgICAgICAg
ICAgICAgICAgICAgfHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7
DQogICAgICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVvZiB8fCAoIV9f
dGhpc2VvZiAmJiAhX19iZW9mKSk7DQogICAgICB9DQoNCiAgICB9Ow0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N
CiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVh
bWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsDQogICAgICAg
ICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1Ry
YWl0cz4mIF9fYikNCiAgICB7IHJldHVybiBfX2EuZXF1YWwoX19iKTsgfQ0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0
cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsDQogICAg
ICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg
X1RyYWl0cz4mIF9fYikNCiAgICB7IHJldHVybiAhX19hLmVxdWFsKF9fYik7
IH0NCn0NCiMgMzYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMN
CiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L2xvY2FsZV9mYWNldHMuaCIgMw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAxIDMNCiMgMzcg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
dGltZS5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDIg
Mw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2N0aW1lLmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MSAzIDQNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9jdGltZS5oIiAyIDMNCiMgNTMgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAzDQpuYW1l
c3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6Y2xvY2tfdDsNCiAgdXNpbmcgOjp0
aW1lX3Q7DQogIHVzaW5nIDo6dG07DQoNCiAgdXNpbmcgOjpjbG9jazsNCiAg
dXNpbmcgOjpkaWZmdGltZTsNCiAgdXNpbmcgOjpta3RpbWU7DQogIHVzaW5n
IDo6dGltZTsNCiAgdXNpbmcgOjphc2N0aW1lOw0KICB1c2luZyA6OmN0aW1l
Ow0KICB1c2luZyA6OmdtdGltZTsNCiAgdXNpbmcgOjpsb2NhbHRpbWU7DQog
IHVzaW5nIDo6c3RyZnRpbWU7DQp9DQojIDQyICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMw0K
IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfaW9zLmgiIDEgMw0KIyA0MyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMNCg0KDQoNCg0K
DQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQojIDEgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRz
L2N0eXBlX2Jhc2UuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jdHlw
ZV9iYXNlLmgiIDMNCiAgc3RydWN0IGN0eXBlX2Jhc2UNCiAgew0KDQogICAg
dHlwZWRlZiBpbnQqIF9fdG9fdHlwZTsNCg0KDQoNCiAgICB0eXBlZGVmIHVu
c2lnbmVkIGludCBtYXNrOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIHVwcGVy
ID0gMHgwMDAwMDAwMTsNCiAgICBzdGF0aWMgY29uc3QgbWFzayBsb3dlciA9
IDB4MDAwMDAwMDI7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSAw
eDAwMDA0MDAwOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIGRpZ2l0ID0gMHgw
MDAwMDAwNDsNCiAgICBzdGF0aWMgY29uc3QgbWFzayB4ZGlnaXQgPSAweDAw
MDAwMDgwOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNlID0gMHgwMDAw
MDAwODsNCiAgICBzdGF0aWMgY29uc3QgbWFzayBwcmludCA9IDB4MDAwMDgw
MDA7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgZ3JhcGggPSAweDAwMDAyMDAw
Ow0KICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsID0gMHgwMDAwMDAyMDsN
CiAgICBzdGF0aWMgY29uc3QgbWFzayBwdW5jdCA9IDB4MDAwMDAwMTA7DQog
ICAgc3RhdGljIGNvbnN0IG1hc2sgYWxudW0gPSAoMHgwMDAwNDAwMCB8IDB4
MDAwMDAwMDQpOw0KICB9Ow0KIyA1NCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMNCg0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBfX2N0eXBl
X2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGlj
IGN0eXBlX2Jhc2UNCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQoNCiAgICAgIGJvb2wNCiAgICAgIGlz
KG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdA0KICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9faXMoX19tLCBfX2MpOyB9DQoNCiAgICAgIGNvbnN0IGNo
YXJfdHlwZSoNCiAgICAgIGlzKGNvbnN0IGNoYXJfdHlwZSAqX19sbywgY29u
c3QgY2hhcl90eXBlICpfX2hpLCBtYXNrICpfX3ZlYykgY29uc3QNCiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsgfQ0K
DQogICAgICBjb25zdCBjaGFyX3R5cGUqDQogICAgICBzY2FuX2lzKG1hc2sg
X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSog
X19oaSkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3NjYW5faXMo
X19tLCBfX2xvLCBfX2hpKTsgfQ0KDQogICAgICBjb25zdCBjaGFyX3R5cGUq
DQogICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBf
X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0DQogICAgICB7IHJl
dHVybiB0aGlzLT5kb19zY2FuX25vdChfX20sIF9fbG8sIF9faGkpOyB9DQoN
CiAgICAgIGNoYXJfdHlwZQ0KICAgICAgdG91cHBlcihjaGFyX3R5cGUgX19j
KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2Mp
OyB9DQoNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIHRvdXBwZXIo
Y2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0
DQogICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fbG8sIF9faGkp
OyB9DQoNCiAgICAgIGNoYXJfdHlwZQ0KICAgICAgdG9sb3dlcihjaGFyX3R5
cGUgX19jKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dl
cihfX2MpOyB9DQoNCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIHRv
bG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
IGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fbG8s
IF9faGkpOyB9DQoNCiAgICAgIGNoYXJfdHlwZQ0KICAgICAgd2lkZW4oY2hh
ciBfX2MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihf
X2MpOyB9DQoNCiAgICAgIGNvbnN0IGNoYXIqDQogICAgICB3aWRlbihjb25z
dCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9f
dG8pIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2xv
LCBfX2hpLCBfX3RvKTsgfQ0KDQogICAgICBjaGFyDQogICAgICBuYXJyb3co
Y2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QNCiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQ0KDQog
ICAgICBjb25zdCBjaGFyX3R5cGUqDQogICAgICBuYXJyb3coY29uc3QgY2hh
cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksDQogICAgICAg
ICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIgKl9fdG8pIGNvbnN0DQogICAg
ICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19sbywgX19oaSwgX19kZmF1
bHQsIF9fdG8pOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICBleHBsaWNp
dA0KICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMg
PSAwKTogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAgICB2aXJ0
dWFsDQogICAgICB+X19jdHlwZV9hYnN0cmFjdF9iYXNlKCkgeyB9DQoNCiAg
ICAgIHZpcnR1YWwgYm9vbA0KICAgICAgZG9faXMobWFzayBfX20sIGNoYXJf
dHlwZSBfX2MpIGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBj
aGFyX3R5cGUqDQogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8s
IGNvbnN0IGNoYXJfdHlwZSogX19oaSwNCiAgICAgICAgICAgIG1hc2sqIF9f
dmVjKSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKg0KICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90
eXBlKiBfX2xvLA0KICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq
IF9faGkpIGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFy
X3R5cGUqDQogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hh
cl90eXBlKiBfX2xvLA0KICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX2hpKSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90
eXBlDQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOw0K
DQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3Rv
dXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
IGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAg
IGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7DQoNCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fdG9sb3dlcihjaGFy
X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAw
Ow0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fd2lkZW4o
Y2hhcikgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
DQogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFy
KiBfX2hpLA0KICAgICAgICAgICAgICAgY2hhcl90eXBlKiBfX2Rlc3QpIGNv
bnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjaGFyDQogICAgICBkb19uYXJy
b3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdCA9IDA7DQoNCiAg
ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fbmFycm93
KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp
LA0KICAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rl
c3QpIGNvbnN0ID0gMDsNCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPg0KICAgIGNsYXNzIGN0eXBlIDogcHVibGljIF9fY3R5cGVf
YWJzdHJhY3RfYmFzZTxfQ2hhclQ+DQogICAgew0KICAgIHB1YmxpYzoNCg0K
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOw0KDQogICAgICBleHBsaWNp
dA0KICAgICAgY3R5cGUoc2l6ZV90IF9fcmVmcyA9IDApIDogX19jdHlwZV9h
YnN0cmFjdF9iYXNlPF9DaGFyVD4oX19yZWZzKSB7IH0NCg0KICAgICAgc3Rh
dGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAgIHByb3RlY3RlZDoNCiAgICAgIHZp
cnR1YWwNCiAgICAgIH5jdHlwZSgpIHsgfQ0KDQogICAgICB2aXJ0dWFsIGJv
b2wNCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25z
dA0KICAgICAgeyByZXR1cm4gZmFsc2U7IH0NCg0KICAgICAgdmlydHVhbCBj
b25zdCBjaGFyX3R5cGUqDQogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUq
IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNv
bnN0DQogICAgICB7IHJldHVybiBfX2hpOyB9DQoNCiAgICAgIHZpcnR1YWwg
Y29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwg
Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
IGNvbnN0DQogICAgICB7IHJldHVybiBfX2hpOyB9DQoNCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fc2Nhbl9ub3QobWFzayBf
X20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywNCiAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QNCiAgICAgIHsgcmV0dXJu
IF9faGk7IH0NCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRv
X3RvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QNCiAgICAgIHsgcmV0dXJu
IF9fYzsgfQ0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAg
ICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5
cGUqIF9faGkpIGNvbnN0DQogICAgICB7IHJldHVybiBfX2hpOyB9DQoNCiAg
ICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBkb190b2xvd2VyKGNoYXJf
dHlwZSBfX2MpIGNvbnN0DQogICAgICB7IHJldHVybiBfX2M7IH0NCg0KICAg
ICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb190b2xvd2Vy
KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
dA0KICAgICAgeyByZXR1cm4gX19oaTsgfQ0KDQogICAgICB2aXJ0dWFsIGNo
YXJfdHlwZQ0KICAgICAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0DQogICAg
ICB7IHJldHVybiBjaGFyX3R5cGUoKTsgfQ0KDQogICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqDQogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBj
b25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QNCiAg
ICAgIHsgcmV0dXJuIF9faGk7IH0NCg0KICAgICAgdmlydHVhbCBjaGFyDQog
ICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25z
dA0KICAgICAgeyByZXR1cm4gX19kZmF1bHQ7IH0NCg0KICAgICAgdmlydHVh
bCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb19uYXJyb3coY29uc3QgY2hh
cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksDQogICAgICAg
ICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdA0K
ICAgICAgeyByZXR1cm4gX19oaTsgfQ0KICAgIH07DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPg0KICAgIGxvY2FsZTo6aWQgY3R5cGU8X0NoYXJU
Pjo6aWQ7DQoNCg0KICB0ZW1wbGF0ZTw+DQogICAgY2xhc3MgY3R5cGU8Y2hh
cj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPGNoYXI+DQogICAg
ew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlw
ZTsNCg0KICAgIHByaXZhdGU6DQoNCiAgICAgIGJvb2wgX01fZGVsOw0KICAg
ICAgX190b190eXBlIGNvbnN0JiBfTV90b3VwcGVyOw0KICAgICAgX190b190
eXBlIGNvbnN0JiBfTV90b2xvd2VyOw0KICAgICAgY29uc3QgbWFzayogY29u
c3QmIF9NX2N0YWJsZTsNCiAgICAgIGNvbnN0IG1hc2sqIF9NX3RhYmxlOw0K
DQogICAgcHVibGljOg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7DQog
ICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAxICsgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEpOw0KDQogICAgICBleHBsaWNp
dA0KICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wg
X19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVmcyA9IDApOw0KDQogICAgICBp
bmxpbmUgYm9vbA0KICAgICAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25z
dDsNCg0KICAgICAgaW5saW5lIGNvbnN0IGNoYXIqDQogICAgICBpcyhjb25z
dCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykg
Y29uc3Q7DQoNCiAgICAgIGlubGluZSBjb25zdCBjaGFyKg0KICAgICAgc2Nh
bl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciog
X19oaSkgY29uc3Q7DQoNCiAgICAgIGlubGluZSBjb25zdCBjaGFyKg0KICAg
ICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0
IGNoYXIqIF9faGkpIGNvbnN0Ow0KDQogICAgcHJvdGVjdGVkOg0KICAgICAg
dmlydHVhbA0KICAgICAgfmN0eXBlKCk7DQoNCiAgICAgIGNvbnN0IG1hc2sq
DQogICAgICB0YWJsZSgpIGNvbnN0IHRocm93KCkNCiAgICAgIHsgcmV0dXJu
IF9NX3RhYmxlOyB9DQoNCiAgICAgIGNvbnN0IG1hc2sqDQogICAgICBjbGFz
c2ljX3RhYmxlKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gX01fY3RhYmxl
OyB9DQoNCiAgICAgIHZpcnR1YWwgYm9vbA0KICAgICAgZG9faXMobWFzayBf
X20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSog
X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29u
c3Q7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAg
ZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBj
b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19t
LCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sDQogICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFs
IGNoYXJfdHlwZQ0KICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0
Ow0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRv
X3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f
aGkpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAg
ZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBl
KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0Ow0KDQogICAg
ICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fd2lkZW4oY2hhcikgY29u
c3Q7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioNCiAgICAgIGRvX3dp
ZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJf
dHlwZSogX19kZXN0KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjaGFyDQog
ICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25z
dDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBk
b19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5
cGUqIF9faGksDQogICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNo
YXIqIF9fZGVzdCkgY29uc3Q7DQogICAgfTsNCg0KICB0ZW1wbGF0ZTw+DQog
ICAgY29uc3QgY3R5cGU8Y2hhcj4mDQogICAgdXNlX2ZhY2V0PGN0eXBlPGNo
YXI+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7DQojIDM5MiAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5o
IiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9z
cGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2N0eXBlX2lubGluZS5oIiAxIDMN
CiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFy
Yy1zdW4tc29sYXJpczIuNy9iaXRzL2N0eXBlX2lubGluZS5oIiAzDQogIGJv
b2wNCiAgY3R5cGU8Y2hhcj46Og0KICBpcyhtYXNrIF9fbSwgY2hhciBfX2Mp
IGNvbnN0DQogIHsgcmV0dXJuIF9NX3RhYmxlW19fY10gJiBfX207IH0NCg0K
ICBjb25zdCBjaGFyKg0KICBjdHlwZTxjaGFyPjo6DQogIGlzKGNvbnN0IGNo
YXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBj
b25zdA0KICB7DQogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQ0KICAgICAg
Kl9fdmVjKysgPSBfTV90YWJsZVsqX19sb3crK107DQogICAgcmV0dXJuIF9f
aGlnaDsNCiAgfQ0KDQogIGNvbnN0IGNoYXIqDQogIGN0eXBlPGNoYXI+OjoN
CiAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0
IGNoYXIqIF9faGlnaCkgY29uc3QNCiAgew0KICAgIHdoaWxlIChfX2xvdyA8
IF9faGlnaCAmJiAhKF9NX3RhYmxlWypfX2xvd10gJiBfX20pKQ0KICAgICAg
KytfX2xvdzsNCiAgICByZXR1cm4gX19sb3c7DQogIH0NCg0KICBjb25zdCBj
aGFyKg0KICBjdHlwZTxjaGFyPjo6DQogIHNjYW5fbm90KG1hc2sgX19tLCBj
b25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdA0K
ICB7DQogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoDQogICAgICAgICAgICYm
IChfTV90YWJsZVsqX19sb3ddICYgX19tKSAhPSAwKQ0KICAgICAgKytfX2xv
dzsNCiAgICByZXR1cm4gX19sb3c7DQogIH0NCiMgMzkzICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgi
IDIgMw0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNs
YXNzIGN0eXBlX2J5bmFtZSA6IHB1YmxpYyBjdHlwZTxfQ2hhclQ+DQogICAg
ew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGN0eXBlX2J5bmFtZShjb25z
dCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApOw0KDQogICAgcHJvdGVjdGVk
Og0KICAgICAgdmlydHVhbA0KICAgICAgfmN0eXBlX2J5bmFtZSgpIHsgfQ0K
ICAgIH07DQoNCg0KICB0ZW1wbGF0ZTw+DQogICAgY3R5cGVfYnluYW1lPGNo
YXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsN
Cg0KDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvY29kZWN2dC5oIiAxIDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMw0KIyAxNzMgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQu
aCIgMw0KICBjbGFzcyBjb2RlY3Z0X2Jhc2UNCiAgew0KICBwdWJsaWM6DQog
ICAgZW51bSByZXN1bHQNCiAgICB7DQogICAgICBvaywNCiAgICAgIHBhcnRp
YWwsDQogICAgICBlcnJvciwNCiAgICAgIG5vY29udg0KICAgIH07DQogIH07
DQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw
ZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+DQogICAgY2xhc3Mg
X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UNCiAgICA6IHB1YmxpYyBsb2NhbGU6
OmZhY2V0LCBwdWJsaWMgY29kZWN2dF9iYXNlDQogICAgew0KICAgIHB1Ymxp
YzoNCg0KICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1
bHQ7DQogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOw0KICAg
ICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsNCiAgICAgIHR5cGVk
ZWYgX1N0YXRlVCBzdGF0ZV90eXBlOw0KDQoNCiAgICAgIHJlc3VsdA0KICAg
ICAgb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBl
KiBfX2Zyb20sDQogICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJv
bV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsDQogICAg
ICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2Vu
ZCwNCiAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QN
CiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRl
LCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQp
Ow0KICAgICAgfQ0KDQogICAgICByZXN1bHQNCiAgICAgIHVuc2hpZnQoc3Rh
dGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90
eXBlKiBfX3RvX2VuZCwNCiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBf
X3RvX25leHQpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb191bnNo
aWZ0KF9fc3RhdGUsIF9fdG8sX190b19lbmQsX190b19uZXh0KTsgfQ0KDQog
ICAgICByZXN1bHQNCiAgICAgIGluKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNv
bnN0IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICBjb25zdCBleHRl
cm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zy
b21fbmV4dCwNCiAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5f
dHlwZSogX190b19lbmQsDQogICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9f
bmV4dCkgY29uc3QNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMtPmRv
X2luKF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwg
X190b19uZXh0KTsNCiAgICAgIH0NCg0KICAgICAgaW50DQogICAgICBlbmNv
ZGluZygpIGNvbnN0IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2VuY29kaW5nKCk7IH0NCg0KICAgICAgYm9vbA0KICAgICAgYWx3YXlzX25v
Y29udigpIGNvbnN0IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2Fsd2F5c19ub2NvbnYoKTsgfQ0KDQogICAgICBpbnQNCiAgICAgIGxlbmd0
aChjb25zdCBzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlw
ZSogX19mcm9tLA0KICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBf
X2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9fZnJvbSwgX19lbmQsIF9fbWF4KTsg
fQ0KDQogICAgICBpbnQNCiAgICAgIG1heF9sZW5ndGgoKSBjb25zdCB0aHJv
dygpDQogICAgICB7IHJldHVybiB0aGlzLT5kb19tYXhfbGVuZ3RoKCk7IH0N
Cg0KICAgIHByb3RlY3RlZDoNCiAgICAgIGV4cGxpY2l0DQogICAgICBfX2Nv
ZGVjdnRfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2Nh
bGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAg
IH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFzZSgpIHsgfQ0KDQogICAgICB2aXJ0
dWFsIHJlc3VsdA0KICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUs
IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAgICAgY29u
c3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBl
KiYgX19mcm9tX25leHQsDQogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9f
dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwNCiAgICAgICAgICAgICBleHRl
cm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0
dWFsIHJlc3VsdA0KICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0
YXRlLCBleHRlcm5fdHlwZSogX190bywNCiAgICAgICAgICAgICAgICAgZXh0
ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkg
Y29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIHJlc3VsdA0KICAgICAgZG9f
aW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f
ZnJvbSwNCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21f
ZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LA0KICAgICAg
ICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2Vu
ZCwNCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25z
dCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19lbmNvZGlu
ZygpIGNvbnN0IHRocm93KCkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGJvb2wN
CiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpID0gMDsN
Cg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX2xlbmd0aChjb25zdCBz
dGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAg
ICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBf
X21heCkgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAg
ZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkgPSAwOw0KICAgIH07DQoN
Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBf
RXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4NCiAgICBjbGFzcyBjb2RlY3Z0
DQogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVy
blQsIF9FeHRlcm5ULCBfU3RhdGVUPg0KICAgIHsNCiAgICBwdWJsaWM6DQoN
CiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0Ow0K
ICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsNCiAgICAgIHR5
cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7DQogICAgICB0eXBlZGVmIF9T
dGF0ZVQgc3RhdGVfdHlwZTsNCg0KDQogICAgICBzdGF0aWMgbG9jYWxlOjpp
ZCBpZDsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGNvZGVjdnQoc2l6ZV90
IF9fcmVmcyA9IDApDQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNl
PF9JbnRlcm5ULF9FeHRlcm5ULF9TdGF0ZVQ+IChfX3JlZnMpIHsgfQ0KDQog
ICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfmNvZGVjdnQo
KSB7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5U
LCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4NCiAgICBs
b2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVU
Pjo6aWQ7DQojIDU5NCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
LXYzL2JpdHMvY29kZWN2dC5oIiAzDQogIHRlbXBsYXRlPD4NCiAgICBjbGFz
cyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4NCiAgICA6IHB1Ymxp
YyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxjaGFyLCBjaGFyLCBtYnN0YXRl
X3Q+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBjaGFy
IGludGVybl90eXBlOw0KICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBl
Ow0KICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsNCg0KDQog
ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsNCg0KICAgICAgZXhwbGljaXQN
CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOw0KDQogICAgcHJv
dGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfmNvZGVjdnQoKTsNCg0K
ICAgICAgdmlydHVhbCByZXN1bHQNCiAgICAgIGRvX291dChzdGF0ZV90eXBl
JiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLA0KICAgICAg
ICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBp
bnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LA0KICAgICAgICAgICAgIGV4dGVy
bl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsDQogICAgICAg
ICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0Ow0KDQogICAg
ICB2aXJ0dWFsIHJlc3VsdA0KICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBl
JiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywNCiAgICAgICAgICAgICAg
ICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9f
bmV4dCkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgcmVzdWx0DQogICAgICBk
b19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSog
X19mcm9tLA0KICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJv
bV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsDQogICAg
ICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9f
ZW5kLA0KICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv
bnN0Ow0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9fZW5jb2Rpbmco
KSBjb25zdCB0aHJvdygpOw0KDQogICAgICB2aXJ0dWFsIGJvb2wNCiAgICAg
IGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOw0KDQogICAgICB2
aXJ0dWFsIGludA0KICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUm
LCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLA0KICAgICAgICAgICAgICAg
IGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25z
dDsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX21heF9sZW5ndGgo
KSBjb25zdCB0aHJvdygpOw0KICB9Ow0KIyA3MDAgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMw0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5
cGVuYW1lIF9TdGF0ZVQ+DQogICAgY2xhc3MgY29kZWN2dF9ieW5hbWUgOiBw
dWJsaWMgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+DQog
ICAgew0KICAgIHB1YmxpYzoNCiAgICAgIGV4cGxpY2l0DQogICAgICBjb2Rl
Y3Z0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApDQog
ICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPihf
X3JlZnMpIHsgfQ0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAg
ICAgIH5jb2RlY3Z0X2J5bmFtZSgpIHsgfQ0KICAgIH07DQojIDQxNiAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2Zh
Y2V0cy5oIiAyIDMNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9Jbkl0ZXI+DQogICAgY2xhc3MgX051bWVyaWNfZ2V0Ow0KDQoN
Cg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xh
c3MgX0Zvcm1hdF9jYWNoZQ0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgY2hh
cl90cmFpdHM8X0NoYXJUPiB0cmFpdHNfdHlwZTsNCiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7DQogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBl
Ow0KDQoNCiAgICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7DQogICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICAg
ICAgZnJpZW5kIGNsYXNzIF9OdW1lcmljX2dldDsNCiAgICAgIGZyaWVuZCBj
bGFzcyBudW1fZ2V0PF9DaGFyVD47DQogICAgICBmcmllbmQgY2xhc3MgbnVt
X3B1dDxfQ2hhclQ+Ow0KICAgICAgZnJpZW5kIGNsYXNzIHRpbWVfZ2V0PF9D
aGFyVD47DQogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfZ2V0PF9DaGFyVD47
DQogICAgICBmcmllbmQgY2xhc3MgdGltZV9wdXQ8X0NoYXJUPjsNCiAgICAg
IGZyaWVuZCBjbGFzcyBtb25leV9wdXQ8X0NoYXJUPjsNCg0KDQoNCg0KICAg
ICAgc3RhdGljIGludCBfU19wd29yZF9peDsNCg0KDQoNCiAgICAgIGJvb2wg
X01fdmFsaWQ7DQoNCg0KDQogICAgICBzdGF0aWMgY29uc3QgY2hhciBfU19s
aXRlcmFsc1tdOw0KDQoNCg0KDQogICAgICBlbnVtDQogICAgICB7DQogICAg
ICAgIF9TX21pbnVzLA0KICAgICAgICBfU19wbHVzLA0KICAgICAgICBfU194
LA0KICAgICAgICBfU19YLA0KICAgICAgICBfU19kaWdpdHMsDQogICAgICAg
IF9TX2RpZ2l0c19lbmQgPSBfU19kaWdpdHMgKyAxNiwNCiAgICAgICAgX1Nf
dWRpZ2l0cyA9IF9TX2RpZ2l0c19lbmQsDQogICAgICAgIF9TX3VkaWdpdHNf
ZW5kID0gX1NfdWRpZ2l0cyArIDE2LA0KICAgICAgICBfU19lZSA9IF9TX2Rp
Z2l0cyArIDE0LA0KICAgICAgICBfU19FZSA9IF9TX3VkaWdpdHMgKyAxNA0K
ICAgICAgfTsNCg0KDQoNCg0KICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxf
cG9pbnQ7DQoNCg0KDQoNCg0KICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5k
c19zZXA7DQoNCg0KDQogICAgICBzdHJpbmdfdHlwZSBfTV90cnVlbmFtZTsN
CiAgICAgIHN0cmluZ190eXBlIF9NX2ZhbHNlbmFtZTsNCg0KDQoNCiAgICAg
IGJvb2wgX01fdXNlX2dyb3VwaW5nOw0KDQoNCg0KICAgICAgc3RyaW5nIF9N
X2dyb3VwaW5nOw0KDQogICAgICBfRm9ybWF0X2NhY2hlKCk7DQoNCiAgICAg
IH5fRm9ybWF0X2NhY2hlKCkgdGhyb3coKSB7IH0NCg0KDQoNCg0KICAgICAg
c3RhdGljIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPioNCiAgICAgIF9TX2dldChp
b3NfYmFzZSYgX19pb3MpOw0KDQogICAgICB2b2lkDQogICAgICBfTV9wb3B1
bGF0ZShpb3NfYmFzZSYpOw0KDQogICAgICBzdGF0aWMgdm9pZA0KICAgICAg
X1NfY2FsbGJhY2soaW9zX2Jhc2U6OmV2ZW50IF9fZXZlbnQsIGlvc19iYXNl
JiBfX2lvcywgaW50IF9faXgpIHRocm93KCk7DQogICAgfTsNCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW50IF9Gb3JtYXRfY2FjaGU8
X0NoYXJUPjo6X1NfcHdvcmRfaXg7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPg0KICAgIGNvbnN0IGNoYXIgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+
OjoNCiAgICBfU19saXRlcmFsc1tdID0gIi0reFgwMTIzNDU2Nzg5YWJjZGVm
MDEyMzQ1Njc4OUFCQ0RFRiI7DQoNCiAgIHRlbXBsYXRlPD4gX0Zvcm1hdF9j
YWNoZTxjaGFyPjo6X0Zvcm1hdF9jYWNoZSgpOw0KDQoNCg0KDQoNCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQog
ICAgY2xhc3MgX051bWVyaWNfZ2V0DQogICAgew0KICAgIHB1YmxpYzoNCg0K
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl
ZiBfSW5JdGVyIGl0ZXJfdHlwZTsNCg0KDQogICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+DQogICAgICBmcmllbmQg
Y2xhc3MgbnVtX2dldDsNCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
LCB0eXBlbmFtZSBfSW5JdGVyVD4NCiAgICAgIGZyaWVuZCBjbGFzcyB0aW1l
X2dldDsNCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFt
ZSBfSW5JdGVyVD4NCiAgICAgIGZyaWVuZCBjbGFzcyBtb25leV9nZXQ7DQog
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRl
clQ+DQogICAgICBmcmllbmQgY2xhc3MgbnVtX3B1dDsNCiAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4NCiAgICAg
IGZyaWVuZCBjbGFzcyB0aW1lX3B1dDsNCiAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4NCiAgICAgIGZyaWVuZCBj
bGFzcyBtb25leV9wdXQ7DQoNCiAgICBwcml2YXRlOg0KICAgICAgZXhwbGlj
aXQNCiAgICAgIF9OdW1lcmljX2dldCgpIHsgfQ0KDQogICAgICB2aXJ0dWFs
DQogICAgICB+X051bWVyaWNfZ2V0KCkgeyB9DQoNCiAgICAgIGl0ZXJfdHlw
ZQ0KICAgICAgX01fZ2V0X2RpZ2l0cyhpdGVyX3R5cGUgX19pbiwgaXRlcl90
eXBlIF9fZW5kKSBjb25zdDsNCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBjbGFzcyBudW1f
Z2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQNCiAgICB7DQogICAgcHVibGlj
Og0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0
eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOw0KICAgICAgdHlwZWRlZiBjaGFy
X3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7DQoNCiAgICAgIHN0YXRp
YyBsb2NhbGU6OmlkIGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbnVt
X2dldChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVm
cykgeyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0KGl0ZXJfdHlw
ZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBj
b25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv
LCBfX2VyciwgX192KTsgfQ0KDQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAg
Z2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
JiBfX2lvLA0KICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
c2hvcnQmIF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2lu
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0NCg0KICAgICAgaXRlcl90
eXBlDQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCBpbnQmIF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRv
X2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0NCg0KDQog
ICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QNCiAgICAg
IHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
dik7IH0NCiMgNjA3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMNCiAgICAgIGl0ZXJfdHlwZQ0K
ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlv
c19iYXNlJiBfX2lvLA0KICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QNCiAgICAgIHsgcmV0
dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0N
Cg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQoaXRlcl90eXBlIF9faW4s
IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikg
Y29uc3QNCiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19p
bywgX19lcnIsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBn
ZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sDQogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1
bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19n
ZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQojIDYyOSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl
X2ZhY2V0cy5oIiAzDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVy
X3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywN
CiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBf
X3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAg
ICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLA0KICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgZG91YmxlJiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19nZXQo
X19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCiAgICAgIGl0
ZXJfdHlwZQ0KICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QNCiAgICAg
IHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
dik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQoaXRlcl90eXBl
IF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBj
b25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv
LCBfX2VyciwgX192KTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmly
dHVhbCB+bnVtX2dldCgpIHsgfQ0KDQoNCg0KDQoNCiAgICAgIHZvaWQNCiAg
ICAgIF9NX2V4dHJhY3QoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIGNoYXIqIF9feHRyYywNCiAgICAgICAgICAg
ICAgICAgaW50JiBfX2Jhc2UsIGJvb2wgX19mcCA9IHRydWUpIGNvbnN0Ow0K
DQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJf
dHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRl
JiwgYm9vbCYpIGNvbnN0Ow0KDQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
DQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNl
JiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBzaG9ydCYpIGNvbnN0Ow0KICAgICAg
dmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0
ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGludCYp
IGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9f
Z2V0IChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFz
ZTo6aW9zdGF0ZSYsIGxvbmcmKSBjb25zdDsNCg0KDQoNCg0KDQogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRl
cl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwN
CiAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQmKSBjb25zdDsNCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
dGVyX3R5cGUsIGlvc19iYXNlJiwNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmKSBjb25zdDsNCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
dGVyX3R5cGUsIGlvc19iYXNlJiwNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nJikgY29uc3Q7DQoNCg0K
DQoNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChp
dGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsDQogICAgICAgICAgICAgZmxvYXQmKSBjb25zdDsNCg0K
ICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5
cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsDQogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7DQoNCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
dGVyX3R5cGUsIGlvc19iYXNlJiwNCiAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJikgY29uc3Q7DQoNCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
dGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LA0KICAgICAgICAgICAgIHZvaWQqJikgY29uc3Q7DQogICAgfTsNCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQog
ICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOw0K
DQoNCiAgdGVtcGxhdGU8Pg0KICAgIHZvaWQNCiAgICBudW1fZ2V0PGNoYXIs
IGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gPjo6DQogICAgX01fZXh0cmFj
dChpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IF9fYmVnLA0KICAgICAgICAg
ICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sDQogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIGNoYXIqIF9feHRyYywNCiAgICAgICAgICAgICAgIGludCYgX19i
YXNlLCBib29sIF9fZnApIGNvbnN0Ow0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIGNsYXNzIF9O
dW1lcmljX3B1dA0KICAgIHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVm
IF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0
ZXJfdHlwZTsNCiAgICBwcm90ZWN0ZWQ6DQogICAgICBleHBsaWNpdA0KICAg
ICAgX051bWVyaWNfcHV0KCkgeyB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAg
IH5fTnVtZXJpY19wdXQoKSB7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgY2xhc3Mg
bnVtX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0DQogICAgew0KICAgIHB1
YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAg
ICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIHN0YXRp
YyBsb2NhbGU6OmlkIGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbnVt
X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVm
cykgeyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgcHV0KGl0ZXJfdHlw
ZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wg
X192KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBf
X2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBwdXQo
aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmls
bCwgbG9uZyBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19wdXQoX19z
LCBfX2YsIF9fZmlsbCwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAg
ICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5
cGUgX19maWxsLA0KICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25z
dA0KICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9f
dik7IH0NCiMgNzczICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMNCiAgICAgIGl0ZXJfdHlwZQ0K
ICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJf
dHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0DQogICAgICB7IHJldHVy
biBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQ0KDQogICAgICBp
dGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYg
X19mLCBjaGFyX3R5cGUgX19maWxsLA0KICAgICAgICAgIGxvbmcgZG91Ymxl
IF9fdikgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwg
X19maWxsLCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2Zp
bGwsDQogICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdA0KICAgICAg
eyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0NCg0K
ICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5udW1fcHV0
KCkgeyB9Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9f
cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBi
b29sIF9fdikgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQog
ICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBf
X2ZpbGwsIGxvbmcgX192KSBjb25zdDsNCg0KDQoNCg0KDQoNCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3Nf
YmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0
Ow0KDQoNCg0KDQoNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAg
IGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmls
bCwgZG91YmxlIF9fdikgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90
eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJf
dHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdikgY29uc3Q7DQoNCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlLCBp
b3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHZvaWQqIF9fdikg
Y29uc3Q7DQogICAgfTsNCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBsb2NhbGU6OmlkIG51bV9wdXQ8
X0NoYXJULCBfT3V0SXRlcj46OmlkOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4NCiAgICBjbGFzcyBudW1wdW5jdCA6IHB1YmxpYyBsb2NhbGU6
OmZhY2V0DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBf
Q2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJUPiBzdHJpbmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6
aWQgaWQ7DQoNCiAgICBwcml2YXRlOg0KICAgICAgY2hhcl90eXBlIF9NX2Rl
Y2ltYWxfcG9pbnQ7DQogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3Nl
cDsNCiAgICAgIHN0cmluZyBfTV9ncm91cGluZzsNCiAgICAgIHN0cmluZ190
eXBlIF9NX3RydWVuYW1lOw0KICAgICAgc3RyaW5nX3R5cGUgX01fZmFsc2Vu
YW1lOw0KDQogICAgcHVibGljOg0KICAgICAgZXhwbGljaXQNCiAgICAgIG51
bXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19y
ZWZzKQ0KICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KCk7IH0NCg0K
ICAgICAgZXhwbGljaXQNCiAgICAgIG51bXB1bmN0KF9fY19sb2NhbGUgX19j
bG9jLCBzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVm
cykNCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2Nsb2MpOyB9
DQoNCiAgICAgIGNoYXJfdHlwZQ0KICAgICAgZGVjaW1hbF9wb2ludCgpIGNv
bnN0DQogICAgICB7IHJldHVybiBkb19kZWNpbWFsX3BvaW50KCk7IH0NCg0K
ICAgICAgY2hhcl90eXBlDQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QN
CiAgICAgIHsgcmV0dXJuIGRvX3Rob3VzYW5kc19zZXAoKTsgfQ0KDQogICAg
ICBzdHJpbmcNCiAgICAgIGdyb3VwaW5nKCkgY29uc3QNCiAgICAgIHsgcmV0
dXJuIGRvX2dyb3VwaW5nKCk7IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAg
ICAgIHRydWVuYW1lKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRvX3RydWVu
YW1lKCk7IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAgICAgIGZhbHNlbmFt
ZSgpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19mYWxzZW5hbWUoKTsgfQ0K
DQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfm51bXB1
bmN0KCkgeyB9DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBk
b19kZWNpbWFsX3BvaW50KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2Rl
Y2ltYWxfcG9pbnQ7IH0NCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAg
ICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdA0KICAgICAgeyByZXR1cm4g
X01fdGhvdXNhbmRzX3NlcDsgfQ0KDQogICAgICB2aXJ0dWFsIHN0cmluZw0K
ICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01f
Z3JvdXBpbmc7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAg
ICAgZG9fdHJ1ZW5hbWUoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fdHJ1
ZW5hbWU7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAgICAg
ZG9fZmFsc2VuYW1lKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2ZhbHNl
bmFtZTsgfQ0KDQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX2luaXRpYWxpemVf
bnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOw0KICAgIH07
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGxvY2FsZTo6
aWQgbnVtcHVuY3Q8X0NoYXJUPjo6aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPg0KICAgIHZvaWQNCiAgICBudW1wdW5jdDxfQ2hhclQ+Ojpf
TV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgKQ0KICAgIHsNCg0K
ICAgIH0NCg0KICB0ZW1wbGF0ZTw+DQogICAgdm9pZA0KICAgIG51bXB1bmN0
PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19j
bG9jKTsNCg0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+DQogICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGljIG51bXB1
bmN0PF9DaGFyVD4NCiAgICB7DQogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9j
YWxlX251bXB1bmN0Ow0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
aGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBu
dW1wdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZz
ID0gMCkNCiAgICAgIDogbnVtcHVuY3Q8X0NoYXJUPihfX3JlZnMpDQogICAg
ICB7DQogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9u
dW1wdW5jdCwgX19zKTsNCiAgICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5j
dChfTV9jX2xvY2FsZV9udW1wdW5jdCk7DQogICAgICB9DQoNCiAgICBwcm90
ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+bnVtcHVuY3RfYnluYW1l
KCkNCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9u
dW1wdW5jdCk7IH0NCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPg0KICAgIGNsYXNzIGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpm
YWNldA0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
aGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk
IGlkOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgY29sbGF0ZShzaXplX3Qg
X19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAg
ICAgIGludA0KICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBj
b25zdCBfQ2hhclQqIF9faGkxLA0KICAgICAgICAgICAgICBjb25zdCBfQ2hh
clQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdA0KICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fY29tcGFyZShfX2xvMSwgX19oaTEsIF9fbG8y
LCBfX2hpMik7IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAgICAgIHRyYW5z
Zm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkg
Y29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RyYW5zZm9ybShfX2xv
LCBfX2hpKTsgfQ0KDQogICAgICBsb25nDQogICAgICBoYXNoKGNvbnN0IF9D
aGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdA0KICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQ0KDQogIHBy
b3RlY3RlZDoNCiAgICAgIH5jb2xsYXRlKCkgeyB9DQoNCiAgICAgIHZpcnR1
YWwgaW50DQogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEs
IGNvbnN0IF9DaGFyVCogX19oaTEsDQogICAgICAgICAgICAgICAgIGNvbnN0
IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0Ow0K
DQogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlDQogICAgICBkb190cmFuc2Zv
cm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNv
bnN0Ow0KDQogICAgICB2aXJ0dWFsIGxvbmcNCiAgICAgIGRvX2hhc2goY29u
c3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0Ow0K
ICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGxv
Y2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsNCg0KDQogIHRlbXBsYXRl
PD4NCiAgICBpbnQNCiAgICBjb2xsYXRlPGNoYXI+Ojpkb19jb21wYXJlKGNv
bnN0IGNoYXIqIF9fbG8xLCBjb25zdCBjaGFyKiBfX2hpMSwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbG8yLCBjb25z
dCBjaGFyKiBfX2hpMikgY29uc3Q7DQoNCiAgdGVtcGxhdGU8Pg0KICAgIHN0
cmluZw0KICAgIGNvbGxhdGU8Y2hhcj46OmRvX3RyYW5zZm9ybShjb25zdCBj
aGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsNCg0KICB0ZW1w
bGF0ZTw+DQogICAgbG9uZw0KICAgIGNvbGxhdGU8Y2hhcj46OmRvX2hhc2go
Y29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7DQoj
IDEwMTQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L2xvY2FsZV9mYWNldHMuaCIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+DQogICAgY2xhc3MgY29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0
ZTxfQ2hhclQ+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsNCg0KICAgICAgZXhwbGljaXQNCiAg
ICAgIGNvbGxhdGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZz
ID0gMCk7DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAg
ICB+Y29sbGF0ZV9ieW5hbWUoKSB7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRl
PD4NCiAgICBjb2xsYXRlX2J5bmFtZTxjaGFyPjo6Y29sbGF0ZV9ieW5hbWUo
Y29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMpOw0KDQoNCg0KDQoNCiAgY2xh
c3MgdGltZV9iYXNlDQogIHsNCiAgcHVibGljOg0KICAgIGVudW0gZGF0ZW9y
ZGVyIHsgbm9fb3JkZXIsIGRteSwgbWR5LCB5bWQsIHlkbSB9Ow0KICB9Ow0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
cj4NCiAgICBjbGFzcyB0aW1lX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0
LCBwdWJsaWMgdGltZV9iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCg0KICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBf
SW5JdGVyIGl0ZXJfdHlwZTsNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQg
aWQ7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICB0aW1lX2dldChzaXplX3Qg
X19yZWZzID0gMCkNCiAgICAgIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSwg
X01fZGF5bmFtZXMoMCksIF9NX21vbnRobmFtZXMoMCkgeyB9DQoNCiAgICAg
IGRhdGVvcmRlcg0KICAgICAgZGF0ZV9vcmRlcigpIGNvbnN0DQogICAgICB7
IHJldHVybiBkb19kYXRlX29yZGVyKCk7IH0NCg0KICAgICAgaXRlcl90eXBl
DQogICAgICBnZXRfdGltZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2YsDQogICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0DQogICAgICB7IHJldHVy
biBkb19nZXRfdGltZShfX3MsIF9fZW5kLCBfX2YsIF9fZXJyLCBfX3QpOyB9
DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0X2RhdGUoaXRlcl90eXBl
IF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLA0KICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBj
b25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0X2RhdGUoX19zLCBfX2VuZCwg
X19mLCBfX2VyciwgX190KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAg
IGdldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9fZiwNCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QNCiAgICAgIHsgcmV0dXJu
IGRvX2dldF93ZWVrZGF5KF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQ0K
DQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldF9tb250aG5hbWUoaXRlcl90
eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLA0KICAg
ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt
KiBfX3QpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19nZXRfbW9udGhuYW1l
KF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQ0KDQogICAgICBpdGVyX3R5
cGUNCiAgICAgIGdldF95ZWFyKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9fZiwNCiAgICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QNCiAgICAgIHsgcmV0
dXJuIGRvX2dldF95ZWFyKF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQ0K
DQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfnRpbWVf
Z2V0KCkNCiAgICAgIHsNCiAgICAgICAgZGVsZXRlIFtdIF9NX21vbnRobmFt
ZXM7DQogICAgICAgIGRlbGV0ZSBbXSBfTV9kYXluYW1lczsNCiAgICAgIH0N
Cg0KICAgICAgdmlydHVhbCBkYXRlb3JkZXINCiAgICAgIGRvX2RhdGVfb3Jk
ZXIoKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGltZV9iYXNlOjp5bWQ7IH0N
Cg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldF90aW1l
KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSAsIGlvc19iYXNlJiwNCiAgICAg
ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNvbnN0
DQogICAgICB7IHJldHVybiBfX3M7IH0NCg0KICAgICAgdmlydHVhbCBpdGVy
X3R5cGUNCiAgICAgIGRvX2dldF9kYXRlKGl0ZXJfdHlwZSBfX3MsIGl0ZXJf
dHlwZSAsIGlvc19iYXNlJiwNCiAgICAgICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiAsIHRtKiApIGNvbnN0DQogICAgICB7IHJldHVybiBfX3M7
IH0NCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldF93
ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmLA0KICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCB0bSogX190KSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBpdGVy
X3R5cGUNCiAgICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90eXBlIF9fcywg
aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29u
c3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXRf
eWVhcihpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBpb3NfYmFzZSYsDQog
ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmICwgdG0qICkg
Y29uc3QNCiAgICAgIHsgcmV0dXJuIF9fczsgfQ0KDQogICAgICBtdXRhYmxl
IGJhc2ljX3N0cmluZzxfQ2hhclQ+KiBfTV9kYXluYW1lczsNCiAgICAgIG11
dGFibGUgYmFzaWNfc3RyaW5nPF9DaGFyVD4qIF9NX21vbnRobmFtZXM7DQog
ICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9Jbkl0ZXI+DQogICAgbG9jYWxlOjppZCB0aW1lX2dldDxfQ2hhclQsIF9J
bkl0ZXI+OjppZDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9Jbkl0ZXI+DQogICAgY2xhc3MgdGltZV9nZXRfYnluYW1lIDog
cHVibGljIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4NCiAgICB7DQogICAg
cHVibGljOg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAg
ICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsNCg0KICAgICAgZXhwbGlj
aXQNCiAgICAgIHRpbWVfZ2V0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90
IF9fcmVmcyA9IDApDQogICAgICA6IHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRl
cj4oX19yZWZzKSB7IH0NCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFs
DQogICAgICB+dGltZV9nZXRfYnluYW1lKCkgeyB9DQogICAgfTsNCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0K
ICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1
YmxpYyB0aW1lX2Jhc2UNCiAgICB7DQogICAgcHVibGljOg0KICAgICAgdHlw
ZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfT3V0SXRl
ciBpdGVyX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0K
DQogICAgICBleHBsaWNpdA0KICAgICAgdGltZV9wdXQoc2l6ZV90IF9fcmVm
cyA9IDApIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSB7IH0NCg0KDQogICAg
ICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz
ZSYgLCBjaGFyX3R5cGUgLA0KICAgICAgICAgIGNvbnN0IHRtKiAsIGNvbnN0
IF9DaGFyVCogLA0KICAgICAgICAgIGNvbnN0IF9DaGFyVCogKSBjb25zdA0K
ICAgICAgeyByZXR1cm4gX19zOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAg
ICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw
ZSBfX2ZpbGwsDQogICAgICAgICAgY29uc3QgdG0qIF9fdG1iLCBjaGFyIF9f
Zm9ybWF0LCBjaGFyIF9fbW9kaWZpZXIgPSAwKSBjb25zdA0KICAgICAgeyBy
ZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdG1iLCBfX2Zvcm1h
dCwgX19tb2RpZmllcik7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZp
cnR1YWwNCiAgICAgIH50aW1lX3B1dCgpIHsgfQ0KDQogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i
YXNlJiwgY2hhcl90eXBlLCBjb25zdCB0bSogLA0KICAgICAgICAgICAgIGNo
YXIgLCBjaGFyICkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9fczsgfQ0KICAg
IH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
T3V0SXRlcj4NCiAgICBsb2NhbGU6OmlkIHRpbWVfcHV0PF9DaGFyVCwgX091
dEl0ZXI+OjppZDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9PdXRJdGVyPg0KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZSA6
IHB1YmxpYyB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPg0KICAgIHsNCiAg
ICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQog
ICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsNCg0KICAgICAgZXhw
bGljaXQNCiAgICAgIHRpbWVfcHV0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6
ZV90IF9fcmVmcyA9IDApDQogICAgICA6IHRpbWVfcHV0PF9DaGFyVCwgX091
dEl0ZXI+IChfX3JlZnMpIHsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAg
dmlydHVhbA0KICAgICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsgfQ0KICAgIH07
DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXI+DQogICAgY2xhc3MgbW9uZXlfZ2V0IDogcHVibGljIGxvY2FsZTo6
ZmFjZXQNCiAgICB7DQogICAgcHVibGljOg0KICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlw
ZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5n
X3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KDQogICAg
ICBleHBsaWNpdA0KICAgICAgbW9uZXlfZ2V0KHNpemVfdCBfX3JlZnMgPSAw
KSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0NCg0KICAgICAgaXRlcl90
eXBlDQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5k
LCBib29sIF9faW50bCwNCiAgICAgICAgICBpb3NfYmFzZSYgX19mLCBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBj
b25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9fcywgX19lbmQsIF9faW50
bCwgX19mLCBfX2VyciwgX191bml0cyk7IH0NCg0KICAgICAgaXRlcl90eXBl
DQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBi
b29sIF9faW50bCwgaW9zX2Jhc2UmIF9fZiwNCiAgICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNv
bnN0DQogICAgICB7IHJldHVybiBkb19nZXQoX19zLCBfX2VuZCwgX19pbnRs
LCBfX2YsIF9fZXJyLCBfX2RpZ2l0cyk7IH0NCg0KICAgIHByb3RlY3RlZDoN
CiAgICAgIHZpcnR1YWwNCiAgICAgIH5tb25leV9nZXQoKSB7IH0NCg0KICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUg
X19zLCBpdGVyX3R5cGUgLCBib29sICwNCiAgICAgICAgICAgICBpb3NfYmFz
ZSYgLCBpb3NfYmFzZTo6aW9zdGF0ZSYgLA0KICAgICAgICAgICAgIGxvbmcg
ZG91YmxlJiApIGNvbnN0DQogICAgICB7IHJldHVybiBfX3M7IH0NCg0KICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUg
X19zLCBpdGVyX3R5cGUgLCBib29sICwNCiAgICAgICAgICAgICBpb3NfYmFz
ZSYgLCBpb3NfYmFzZTo6aW9zdGF0ZSYgLA0KICAgICAgICAgICAgIHN0cmlu
Z190eXBlJiApIGNvbnN0DQogICAgICB7IHJldHVybiBfX3M7IH0NCiAgICB9
Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4NCiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0
ZXI+OjppZDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9PdXRJdGVyPg0KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBs
b2NhbGU6OmZhY2V0DQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVk
ZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX091dEl0ZXIg
aXRlcl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU
PiBzdHJpbmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7
DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBtb25leV9wdXQoc2l6ZV90IF9f
cmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAg
ICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9f
aW50bCwgaW9zX2Jhc2UmIF9fZiwNCiAgICAgICAgICBjaGFyX3R5cGUgX19m
aWxsLCBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdA0KICAgICAgeyByZXR1
cm4gZG9fcHV0KF9fcywgX19pbnRsLCBfX2YsIF9fZmlsbCwgX191bml0cyk7
IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9f
cywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2YsDQogICAgICAgICAgY2hh
cl90eXBlIF9fZmlsbCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBj
b25zdA0KICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19pbnRsLCBfX2Ys
IF9fZmlsbCwgX19kaWdpdHMpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAg
ICB2aXJ0dWFsDQogICAgICB+bW9uZXlfcHV0KCkgeyB9DQoNCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg
Ym9vbCwgaW9zX2Jhc2UmICwgY2hhcl90eXBlICwNCiAgICAgICAgICAgICBs
b25nIGRvdWJsZSApIGNvbnN0DQogICAgICB7IHJldHVybiBfX3M7IH0NCg0K
ICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX3B1dChpdGVyX3R5
cGUgX19zLCBib29sLCBpb3NfYmFzZSYgLCBjaGFyX3R5cGUgLA0KICAgICAg
ICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiApIGNvbnN0DQogICAgICB7IHJl
dHVybiBfX3M7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgbG9jYWxlOjppZCBtb25l
eV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOw0KDQogIHN0cnVjdCBtb25l
eV9iYXNlDQogIHsNCiAgICBlbnVtIHBhcnQgeyBub25lLCBzcGFjZSwgc3lt
Ym9sLCBzaWduLCB2YWx1ZSB9Ow0KICAgIHN0cnVjdCBwYXR0ZXJuIHsgY2hh
ciBmaWVsZFs0XTsgfTsNCg0KICAgIHN0YXRpYyBjb25zdCBwYXR0ZXJuIF9T
X2RlZmF1bHRfcGF0dGVybjsNCg0KDQoNCiAgICBzdGF0aWMgcGF0dGVybg0K
ICAgIF9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWVkcywgY2hh
ciBfX3NwYWNlLCBjaGFyIF9fcG9zbik7DQogIH07DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPg0KICAgIGNsYXNzIG1vbmV5
cHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1vbmV5X2Jh
c2UNCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFy
VCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hh
clQ+IHN0cmluZ190eXBlOw0KDQogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
bnRsID0gX0ludGw7DQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsNCg0K
ICAgIHByaXZhdGU6DQogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9wb2lu
dDsNCiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOw0KICAgICAg
c3RyaW5nIF9NX2dyb3VwaW5nOw0KICAgICAgc3RyaW5nX3R5cGUgX01fY3Vy
cl9zeW1ib2w7DQogICAgICBzdHJpbmdfdHlwZSBfTV9wb3NpdGl2ZV9zaWdu
Ow0KICAgICAgc3RyaW5nX3R5cGUgX01fbmVnYXRpdmVfc2lnbjsNCiAgICAg
IGludCBfTV9mcmFjX2RpZ2l0czsNCiAgICAgIHBhdHRlcm4gX01fcG9zX2Zv
cm1hdDsNCiAgICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsNCg0KICAgIHB1
YmxpYzoNCiAgICAgIGV4cGxpY2l0DQogICAgICBtb25leXB1bmN0KHNpemVf
dCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQ0KICAgICAg
eyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoKTsgfQ0KDQogICAgICBleHBs
aWNpdA0KICAgICAgbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6
ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpDQogICAg
ICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Nsb2MpOyB9DQoNCiAg
ICAgIGNoYXJfdHlwZQ0KICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0DQog
ICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0NCg0K
ICAgICAgY2hhcl90eXBlDQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QN
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsgfQ0K
DQogICAgICBzdHJpbmcNCiAgICAgIGdyb3VwaW5nKCkgY29uc3QNCiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0NCg0KICAgICAgc3Ry
aW5nX3R5cGUNCiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QNCiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0NCg0KICAgICAgc3Ry
aW5nX3R5cGUNCiAgICAgIHBvc2l0aXZlX3NpZ24oKSBjb25zdA0KICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fcG9zaXRpdmVfc2lnbigpOyB9DQoNCiAgICAg
IHN0cmluZ190eXBlDQogICAgICBuZWdhdGl2ZV9zaWduKCkgY29uc3QNCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ2F0aXZlX3NpZ24oKTsgfQ0KDQog
ICAgICBpbnQNCiAgICAgIGZyYWNfZGlnaXRzKCkgY29uc3QNCiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRzKCk7IH0NCg0KICAgICAgcGF0
dGVybg0KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0DQogICAgICB7IHJldHVy
biB0aGlzLT5kb19wb3NfZm9ybWF0KCk7IH0NCg0KICAgICAgcGF0dGVybg0K
ICAgICAgbmVnX2Zvcm1hdCgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlz
LT5kb19uZWdfZm9ybWF0KCk7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAg
IHZpcnR1YWwNCiAgICAgIH5tb25leXB1bmN0KCkgeyB9DQoNCiAgICAgIHZp
cnR1YWwgY2hhcl90eXBlDQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29u
c3QNCiAgICAgIHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0NCg0KICAg
ICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3Rob3VzYW5kc19zZXAo
KSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQ0K
DQogICAgICB2aXJ0dWFsIHN0cmluZw0KICAgICAgZG9fZ3JvdXBpbmcoKSBj
b25zdA0KICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0NCg0KICAgICAg
dmlydHVhbCBzdHJpbmdfdHlwZQ0KICAgICAgZG9fY3Vycl9zeW1ib2woKSBj
b25zdA0KICAgICAgeyByZXR1cm4gX01fY3Vycl9zeW1ib2w7IH0NCg0KICAg
ICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAgICAgZG9fcG9zaXRpdmVfc2ln
bigpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9wb3NpdGl2ZV9zaWduOyB9
DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX25lZ2F0
aXZlX3NpZ24oKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fbmVnYXRpdmVf
c2lnbjsgfQ0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9fZnJhY19k
aWdpdHMoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fZnJhY19kaWdpdHM7
IH0NCg0KICAgICAgdmlydHVhbCBwYXR0ZXJuDQogICAgICBkb19wb3NfZm9y
bWF0KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7IH0N
Cg0KICAgICAgdmlydHVhbCBwYXR0ZXJuDQogICAgICBkb19uZWdfZm9ybWF0
KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0NCg0K
DQogICAgICB2b2lkDQogICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3Qo
X19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOw0KICAgIH07DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPg0KICAgIGxvY2Fs
ZTo6aWQgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aWQ7DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPg0KICAgIGNvbnN0
IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsNCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+DQogICAgdm9p
ZA0KICAgIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46Ol9NX2luaXRpYWxp
emVfbW9uZXlwdW5jdChfX2NfbG9jYWxlICkNCiAgICB7DQoNCiAgICB9DQoN
CiAgdGVtcGxhdGU8Pg0KICAgIHZvaWQNCiAgICBtb25leXB1bmN0PGNoYXI+
OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2Mp
Ow0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJv
b2wgX0ludGw+DQogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJs
aWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPg0KICAgIHsNCiAgICAgIF9f
Y19sb2NhbGUgX01fY19sb2NhbGVfbW9uZXlwdW5jdDsNCiAgICBwdWJsaWM6
DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBl
ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOw0KDQogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7DQoNCiAgICAgIGV4
cGxpY2l0DQogICAgICBtb25leXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBf
X3MsIHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAgOiBtb25leXB1bmN0PF9D
aGFyVCwgX0ludGw+KF9fcmVmcykNCiAgICAgIHsNCiAgICAgICAgX1NfY3Jl
YXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QsIF9fcyk7DQog
ICAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfTV9jX2xvY2FsZV9t
b25leXB1bmN0KTsNCiAgICAgIH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAg
IHZpcnR1YWwNCiAgICAgIH5tb25leXB1bmN0X2J5bmFtZSgpDQogICAgICB7
IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlwdW5jdCk7
IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9v
bCBfSW50bD4NCiAgICBjb25zdCBib29sIG1vbmV5cHVuY3RfYnluYW1lPF9D
aGFyVCwgX0ludGw+OjppbnRsOw0KDQoNCiAgc3RydWN0IG1lc3NhZ2VzX2Jh
c2UNCiAgew0KICAgIHR5cGVkZWYgaW50IGNhdGFsb2c7DQogIH07DQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNsYXNzIG1lc3NhZ2Vz
IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNl
DQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4g
c3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0K
DQogICAgICBleHBsaWNpdA0KICAgICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVm
cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAgICBj
YXRhbG9nDQogICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYg
X19zLCBjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdA0KICAgICAgeyByZXR1
cm4gZG9fb3BlbihfX3MsIF9fbG9jKTsgfQ0KDQogICAgICBzdHJpbmdfdHlw
ZQ0KICAgICAgZ2V0KGNhdGFsb2cgX19jLCBpbnQgX19zZXQsIGludCBfX21z
Z2lkLCBjb25zdCBzdHJpbmdfdHlwZSYgX19zKSBjb25zdA0KICAgICAgeyBy
ZXR1cm4gZG9fZ2V0KF9fYyxfX3NldCxfX21zZ2lkLF9fcyk7IH0NCg0KICAg
ICAgdm9pZA0KICAgICAgY2xvc2UoY2F0YWxvZyBfX2MpIGNvbnN0DQogICAg
ICB7IHJldHVybiBkb19jbG9zZShfX2MpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6
DQogICAgICB2aXJ0dWFsDQogICAgICB+bWVzc2FnZXMoKSB7IH0NCg0KDQoN
CiAgICAgIHZpcnR1YWwgY2F0YWxvZw0KICAgICAgZG9fb3Blbihjb25zdCBi
YXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdA0KICAg
ICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICB2aXJ0dWFsIHN0cmluZ190eXBl
DQogICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQgLCBjb25zdCBzdHJp
bmdfdHlwZSYgX19kZmF1bHQpIGNvbnN0DQogICAgICB7IHJldHVybiBfX2Rm
YXVsdDsgfQ0KDQogICAgICB2aXJ0dWFsIHZvaWQNCiAgICAgIGRvX2Nsb3Nl
KGNhdGFsb2cpIGNvbnN0IHsgfQ0KICAgIH07DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPg0KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJU
Pjo6aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNs
YXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+
DQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4g
c3RyaW5nX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBtZXNzYWdl
c19ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKTsNCg0K
ICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5tZXNzYWdl
c19ieW5hbWUoKSB7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPD4NCiAgICBt
ZXNzYWdlc19ieW5hbWU8Y2hhcj46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBj
aGFyKiwgc2l6ZV90IF9fcmVmcyk7DQojIDE1MzIgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMw0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wN
CiAgICBpc3NwYWNlKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2Mp
DQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv
YykuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0NCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc3By
aW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyBy
ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5
cGVfYmFzZTo6cHJpbnQsIF9fYyk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc2NudHJsKF9DaGFy
VCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyByZXR1cm4gdXNl
X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6
Y250cmwsIF9fYyk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
DQogICAgaW5saW5lIGJvb2wNCiAgICBpc3VwcGVyKF9DaGFyVCBfX2MsIGNv
bnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0
eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9f
Yyk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5s
aW5lIGJvb2wgaXNsb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9f
bG9jKQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o
X19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2MpOyB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAg
aXNhbHBoYShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAg
IHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlz
KGN0eXBlX2Jhc2U6OmFscGhhLCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNkaWdpdChf
Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJu
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jh
c2U6OmRpZ2l0LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNwdW5jdChfQ2hhclQgX19j
LCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNl
dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnB1bmN0
LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAg
IGlubGluZSBib29sDQogICAgaXN4ZGlnaXQoX0NoYXJUIF9fYywgY29uc3Qg
bG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8
X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7
IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5l
IGJvb2wNCiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYg
X19sb2MpDQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g
PihfX2xvYykuaXMoY3R5cGVfYmFzZTo6YWxudW0sIF9fYyk7IH0NCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAg
ICBpc2dyYXBoKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQog
ICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku
aXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0NCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIF9DaGFyVA0KICAgIHRvdXBw
ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJl
dHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50b3VwcGVy
KF9fYyk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg
aW5saW5lIF9DaGFyVA0KICAgIHRvbG93ZXIoX0NoYXJUIF9fYywgY29uc3Qg
bG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8
X0NoYXJUPiA+KF9fbG9jKS50b2xvd2VyKF9fYyk7IH0NCn0NCiMgMzcgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lv
cy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBi
YXNpY19pb3MgOiBwdWJsaWMgaW9zX2Jhc2UNCiAgICB7DQogICAgcHVibGlj
Og0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOw0K
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3Nf
dHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5
cGUgb2ZmX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5
cGU7DQoNCg0KICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVf
dHlwZTsNCiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOw0KICAgICAgdHlwZWRl
ZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0
X3R5cGU7DQogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0No
YXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsNCiAgICAgIHR5cGVk
ZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdl
dF90eXBlOw0KDQoNCiAgICBwcml2YXRlOg0KICAgICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+KiBfTV90aWU7DQogICAgICBjaGFyX3R5cGUg
X01fZmlsbDsNCiAgICAgIGlvc3RhdGUgX01fZXhjZXB0aW9uOw0KDQogICAg
cHJvdGVjdGVkOg0KICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4qIF9NX3N0cmVhbWJ1ZjsNCiAgICAgIGlvc3RhdGUgX01fc3RyZWFt
YnVmX3N0YXRlOw0KDQoNCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX01f
aW9zX2ZjdHlwZTsNCg0KICAgICAgY29uc3QgX19udW1wdXRfdHlwZSogX01f
Zm51bXB1dDsNCg0KICAgICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51
bWdldDsNCg0KICAgIHB1YmxpYzoNCiAgICAgIGlubGluZSBjb25zdCBfX2N0
eXBlX3R5cGUqDQogICAgICBfTV9nZXRfZmN0eXBlX2lvcyh2b2lkKQ0KICAg
ICAgeyByZXR1cm4gX01faW9zX2ZjdHlwZTsgfQ0KDQogICAgICBvcGVyYXRv
ciB2b2lkKigpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5mYWlsKCkg
PyAwIDogY29uc3RfY2FzdDxiYXNpY19pb3MqPih0aGlzKTsgfQ0KDQogICAg
ICBpbmxpbmUgYm9vbA0KICAgICAgb3BlcmF0b3IhKCkgY29uc3QNCiAgICAg
IHsgcmV0dXJuIHRoaXMtPmZhaWwoKTsgfQ0KDQogICAgICBpbmxpbmUgaW9z
dGF0ZQ0KICAgICAgcmRzdGF0ZSgpIGNvbnN0DQogICAgICB7IHJldHVybiBf
TV9zdHJlYW1idWZfc3RhdGU7IH0NCg0KICAgICAgaW5saW5lIHZvaWQNCiAg
ICAgIGNsZWFyKGlvc3RhdGUgX19zdGF0ZSA9IGdvb2RiaXQpDQogICAgICB7
DQogICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpKQ0KICAgICAgICAgIF9NX3N0
cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGU7DQogICAgICAgIGVsc2UNCiAgICAg
ICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlIHwgYmFkYml0Ow0K
ICAgICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRoaXMtPmV4Y2VwdGlv
bnMoKSkpDQogICAgICAgICAgX190aHJvd19pb3NfZmFpbHVyZSgiYmFzaWNf
aW9zOjpjbGVhcihpb3N0YXRlKSBjYXVzZWQgZXhjZXB0aW9uIik7DQogICAg
ICB9DQoNCiAgICAgIGlubGluZSB2b2lkDQogICAgICBzZXRzdGF0ZShpb3N0
YXRlIF9fc3RhdGUpDQogICAgICB7IHRoaXMtPmNsZWFyKHRoaXMtPnJkc3Rh
dGUoKSB8IF9fc3RhdGUpOyB9DQoNCiAgICAgIGlubGluZSBib29sDQogICAg
ICBnb29kKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJkc3RhdGUo
KSA9PSAwOyB9DQoNCiAgICAgIGlubGluZSBib29sDQogICAgICBlb2YoKSBj
b25zdA0KICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJp
dCkgIT0gMDsgfQ0KDQogICAgICBpbmxpbmUgYm9vbA0KICAgICAgZmFpbCgp
IGNvbnN0DQogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgKGJh
ZGJpdCB8IGZhaWxiaXQpKSAhPSAwOyB9DQoNCiAgICAgIGlubGluZSBib29s
DQogICAgICBiYWQoKSBjb25zdA0KICAgICAgeyByZXR1cm4gKHRoaXMtPnJk
c3RhdGUoKSAmIGJhZGJpdCkgIT0gMDsgfQ0KDQogICAgICBpbmxpbmUgaW9z
dGF0ZQ0KICAgICAgZXhjZXB0aW9ucygpIGNvbnN0DQogICAgICB7IHJldHVy
biBfTV9leGNlcHRpb247IH0NCg0KICAgICAgaW5saW5lIHZvaWQNCiAgICAg
IGV4Y2VwdGlvbnMoaW9zdGF0ZSBfX2V4Y2VwdCkNCiAgICAgIHsNCiAgICAg
ICAgX01fZXhjZXB0aW9uID0gX19leGNlcHQ7DQogICAgICAgIHRoaXMtPmNs
ZWFyKF9NX3N0cmVhbWJ1Zl9zdGF0ZSk7DQogICAgICB9DQoNCg0KICAgICAg
ZXhwbGljaXQNCiAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPiogX19zYikgOiBpb3NfYmFzZSgpDQogICAgICB7IHRo
aXMtPmluaXQoX19zYik7IH0NCg0KICAgICAgdmlydHVhbA0KICAgICAgfmJh
c2ljX2lvcygpIHsgfQ0KDQoNCiAgICAgIGlubGluZSBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4qDQogICAgICB0aWUoKSBjb25zdA0KICAgICAg
eyByZXR1cm4gX01fdGllOyB9DQoNCiAgICAgIGlubGluZSBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4qDQogICAgICB0aWUoYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+KiBfX3RpZXN0cikNCiAgICAgIHsNCiAgICAg
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9IF9N
X3RpZTsNCiAgICAgICAgX01fdGllID0gX190aWVzdHI7DQogICAgICAgIHJl
dHVybiBfX29sZDsNCiAgICAgIH0NCg0KICAgICAgaW5saW5lIGJhc2ljX3N0
cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Kg0KICAgICAgcmRidWYoKSBjb25z
dA0KICAgICAgeyByZXR1cm4gX01fc3RyZWFtYnVmOyB9DQoNCiAgICAgIGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Kg0KICAgICAgcmRidWYo
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOw0KDQog
ICAgICBiYXNpY19pb3MmDQogICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lv
cyYgX19yaHMpOw0KDQogICAgICBpbmxpbmUgY2hhcl90eXBlDQogICAgICBm
aWxsKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2ZpbGw7IH0NCg0KICAg
ICAgaW5saW5lIGNoYXJfdHlwZQ0KICAgICAgZmlsbChjaGFyX3R5cGUgX19j
aCkNCiAgICAgIHsNCiAgICAgICAgY2hhcl90eXBlIF9fb2xkID0gX01fZmls
bDsNCiAgICAgICAgX01fZmlsbCA9IF9fY2g7DQogICAgICAgIHJldHVybiBf
X29sZDsNCiAgICAgIH0NCg0KDQogICAgICBsb2NhbGUNCiAgICAgIGltYnVl
KGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KDQogICAgICBjaGFyDQogICAgICBu
YXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3Q7DQoN
CiAgICAgIGNoYXJfdHlwZQ0KICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0
Ow0KDQogICAgcHJvdGVjdGVkOg0KDQogICAgICBiYXNpY19pb3MoKSA6IGlv
c19iYXNlKCkNCiAgICAgIHsgfQ0KDQogICAgICB2b2lkDQogICAgICBpbml0
KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsNCg0K
ICAgICAgYm9vbA0KICAgICAgX01fY2hlY2tfZmFjZXQoY29uc3QgbG9jYWxl
OjpmYWNldCogX19mKQ0KICAgICAgew0KICAgICAgICBib29sIF9fcmV0ID0g
ZmFsc2U7DQogICAgICAgIGlmIChfX2YpDQogICAgICAgICAgX19yZXQgPSB0
cnVlOw0KICAgICAgICBlbHNlDQogICAgICAgICAgX190aHJvd19iYWRfY2Fz
dCgpOw0KICAgICAgICByZXR1cm4gX19yZXQ7DQogICAgICB9DQoNCiAgICAg
IHZvaWQNCiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhjb25zdCBsb2NhbGUmIF9f
bG9jKTsNCiAgICB9Ow0KfQ0KDQoNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MudGNjIiAxIDMNCiMg
MzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jh
c2ljX2lvcy50Y2MiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Kg0KICAgIGJhc2ljX2lvczxf
Q2hhclQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPiogX19zYikNCiAgICB7DQogICAgICBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV9zdHJlYW1idWY7DQog
ICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOw0KICAgICAgdGhpcy0+Y2xlYXIo
KTsNCiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj
X2lvczxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lvczxfQ2hhclQs
IF9UcmFpdHM+Ojpjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpDQog
ICAgew0KDQoNCg0KDQogICAgICBfV29yZHMqIF9fd29yZHMgPSAoX19yaHMu
X01fd29yZF9saW1pdCA8PSBfU19sb2NhbF93b3JkcykgPw0KICAgICAgICBf
TV93b3JkX2FycmF5IDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX2xpbWl0
XTsNCiMgNjMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL2Jhc2ljX2lvcy50Y2MiIDMNCiAgICAgIF9DYWxsYmFja19saXN0KiBf
X2NiID0gX19yaHMuX01fY2FsbGJhY2tzOw0KICAgICAgaWYgKF9fY2IpDQog
ICAgICAgIF9fY2ItPl9NX2FkZF9yZWZlcmVuY2UoKTsNCiAgICAgIF9NX2Nh
bGxfY2FsbGJhY2tzKGVyYXNlX2V2ZW50KTsNCiAgICAgIGlmIChfTV93b3Jk
cyAhPSBfTV93b3JkX2FycmF5KQ0KICAgICAgICBkZWxldGUgW10gX01fd29y
ZHM7DQogICAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcygpOw0KDQogICAgICBf
TV9jYWxsYmFja3MgPSBfX2NiOw0KICAgICAgZm9yIChpbnQgX19pID0gMDsg
X19pIDwgX19yaHMuX01fd29yZF9saW1pdDsgKytfX2kpDQogICAgICAgIF9f
d29yZHNbX19pXSA9IF9fcmhzLl9NX3dvcmRzW19faV07DQogICAgICBpZiAo
X01fd29yZHMgIT0gX01fd29yZF9hcnJheSkNCiAgICAgICAgZGVsZXRlIFtd
IF9NX3dvcmRzOw0KICAgICAgX01fd29yZHMgPSBfX3dvcmRzOw0KICAgICAg
X01fd29yZF9saW1pdCA9IF9fcmhzLl9NX3dvcmRfbGltaXQ7DQoNCiAgICAg
IHRoaXMtPmZsYWdzKF9fcmhzLmZsYWdzKCkpOw0KICAgICAgdGhpcy0+d2lk
dGgoX19yaHMud2lkdGgoKSk7DQogICAgICB0aGlzLT5wcmVjaXNpb24oX19y
aHMucHJlY2lzaW9uKCkpOw0KICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgp
KTsNCiAgICAgIHRoaXMtPmZpbGwoX19yaHMuZmlsbCgpKTsNCg0KICAgICAg
dGhpcy0+ZXhjZXB0aW9ucyhfX3Jocy5leGNlcHRpb25zKCkpOw0KDQogICAg
ICBfTV9jYWxsX2NhbGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsNCiAgICAgIHJl
dHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNoYXINCiAgICBiYXNpY19p
b3M8X0NoYXJULCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBfX2MsIGNo
YXIgX19kZmF1bHQpIGNvbnN0DQogICAgeyByZXR1cm4gX01faW9zX2ZjdHlw
ZS0+bmFycm93KF9fYywgX19kZmF1bHQpOyB9DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIF9DaGFyVA0K
ICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9f
YykgY29uc3QNCiAgICB7IHJldHVybiBfTV9pb3NfZmN0eXBlLT53aWRlbihf
X2MpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+DQogICAgbG9jYWxlDQogICAgYmFzaWNfaW9zPF9DaGFy
VCwgX1RyYWl0cz46OmltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAg
ew0KICAgICAgbG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsNCiAgICAg
IGlvc19iYXNlOjppbWJ1ZShfX2xvYyk7DQogICAgICBfTV9jYWNoZV9mYWNl
dHMoX19sb2MpOw0KICAgICAgaWYgKHRoaXMtPnJkYnVmKCkgIT0gMCkNCiAg
ICAgICAgdGhpcy0+cmRidWYoKS0+cHViaW1idWUoX19sb2MpOw0KICAgICAg
cmV0dXJuIF9fb2xkOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdm9pZA0KICAgIGJhc2lj
X2lvczxfQ2hhclQsIF9UcmFpdHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+KiBfX3NiKQ0KICAgIHsNCg0KICAgICAgaW9zX2Jh
c2U6Ol9NX2luaXQoKTsNCiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhfTV9pb3Nf
bG9jYWxlKTsNCiAgICAgIF9NX3RpZSA9IDA7DQogICAgICBfTV9maWxsID0g
dGhpcy0+d2lkZW4oJyAnKTsNCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2Ri
aXQ7DQogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOw0KICAgICAgX01fc3Ry
ZWFtYnVmX3N0YXRlID0gX19zYiA/IGdvb2RiaXQgOiBiYWRiaXQ7DQogICAg
fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz46Ol9NX2NhY2hlX2ZhY2V0cyhjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAg
IHsNCiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBlPihfX2xvYykp
DQogICAgICAgIF9NX2lvc19mY3R5cGUgPSAmdXNlX2ZhY2V0PF9fY3R5cGVf
dHlwZT4oX19sb2MpOw0KDQogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtcHV0
X3R5cGU+KF9fbG9jKSkNCiAgICAgICAgX01fZm51bXB1dCA9ICZ1c2VfZmFj
ZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpOw0KICAgICAgaWYgKGhhc19mYWNl
dDxfX251bWdldF90eXBlPihfX2xvYykpDQogICAgICAgIF9NX2ZudW1nZXQg
PSAmdXNlX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9fbG9jKTsNCiAgICB9DQp9
DQojIDIxNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvYmFzaWNfaW9zLmgiIDIgMw0KIyA0NyAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMNCiMgNDAgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3Ry
ZWFtLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNz
IGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0No
YXJULCBfVHJhaXRzPg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCg0KICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7DQogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBl
Ow0KICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KDQoNCiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4g
X19zdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9D
aGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOw0K
ICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1Ry
YWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7DQogICAgICB0eXBlZGVmIG51bV9w
dXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlwZTsN
CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7DQoN
Cg0KICAgICAgZXhwbGljaXQNCiAgICAgIGJhc2ljX29zdHJlYW0oX19zdHJl
YW1idWZfdHlwZSogX19zYikNCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsg
fQ0KDQogICAgICB2aXJ0dWFsDQogICAgICB+YmFzaWNfb3N0cmVhbSgpIHsg
fQ0KDQoNCiAgICAgIGNsYXNzIHNlbnRyeTsNCiAgICAgIGZyaWVuZCBjbGFz
cyBzZW50cnk7DQoNCg0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAg
IG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFt
X3R5cGUmKSk7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3Bl
cmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7DQoN
CiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PChpb3Nf
YmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7DQoNCg0KICAgICAgX19vc3Ry
ZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsNCg0KICAg
ICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVk
IGxvbmcgX19uKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBv
cGVyYXRvcjw8KGJvb2wgX19uKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUm
DQogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikNCiAgICAgIHsNCiAgICAg
ICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAm
IGlvc19iYXNlOjpiYXNlZmllbGQ7DQogICAgICAgIGlmIChfX2ZtdCAmIGlv
c19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQ0KICAgICAg
ICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX24pKSk7DQogICAgICAg
IGVsc2UNCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0
aWNfY2FzdDxsb25nPihfX24pKTsNCiAgICAgIH0NCg0KICAgICAgX19vc3Ry
ZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9f
bikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0NCg0KICAgICAgX19vc3RyZWFt
X3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGludCBfX24pDQogICAgICB7DQog
ICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdz
KCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOw0KICAgICAgICBpZiAoX19mbXQg
JiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkNCiAg
ICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsNCiAgICAg
ICAgZWxzZQ0KICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0
YXRpY19jYXN0PGxvbmc+KF9fbikpOw0KICAgICAgfQ0KDQogICAgICBfX29z
dHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IF9f
bikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0NCiMgMTM1ICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAz
DQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwoZG91
YmxlIF9fZik7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3Bl
cmF0b3I8PChmbG9hdCBfX2YpDQogICAgICB7IHJldHVybiB0aGlzLT5vcGVy
YXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0NCg0KICAgICAg
X19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91Ymxl
IF9fZik7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0
b3I8PChjb25zdCB2b2lkKiBfX3ApOw0KDQogICAgICBfX29zdHJlYW1fdHlw
ZSYNCiAgICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7
DQoNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBwdXQoY2hhcl90
eXBlIF9fYyk7DQoNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgd3Jp
dGUoY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsNCg0K
ICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBmbHVzaCgpOw0KDQoNCiAg
ICAgIHBvc190eXBlDQogICAgICB0ZWxscCgpOw0KDQogICAgICBfX29zdHJl
YW1fdHlwZSYNCiAgICAgIHNlZWtwKHBvc190eXBlKTsNCg0KICAgICAgX19v
c3RyZWFtX3R5cGUmDQogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6
OnNlZWtkaXIpOw0KDQogICAgcHJpdmF0ZToNCg0KDQogICAgICBfX29zdHJl
YW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX29zdHJlYW1fdHlw
ZSYpOw0KDQogICAgICBiYXNpY19vc3RyZWFtKGNvbnN0IF9fb3N0cmVhbV90
eXBlJik7DQoNCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQ0KICAgIHsNCg0KICAgICAg
Ym9vbCBfTV9vazsNCiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFp
dHM+JiBfTV9vczsNCg0KICAgIHB1YmxpYzoNCiAgICAgIGV4cGxpY2l0DQog
ICAgICBzZW50cnkoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9f
b3MpOw0KDQogICAgICB+c2VudHJ5KCkNCiAgICAgIHsNCg0KICAgICAgICBp
ZiAoX01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmICYmICF1bmNh
dWdodF9leGNlcHRpb24oKSkNCiAgICAgICAgICB7DQoNCiAgICAgICAgICAg
IGlmIChfTV9vcy5yZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMo
KSA9PSAtMSkNCiAgICAgICAgICAgICAgX01fb3Muc2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7DQogICAgICAgICAgfQ0KICAgICAgfQ0KDQogICAgICBv
cGVyYXRvciBib29sKCkNCiAgICAgIHsgcmV0dXJuIF9NX29rOyB9DQogICAg
fTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0K
ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX291dCwgX0NoYXJUIF9fYyk7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQ0KICAgIHsg
cmV0dXJuIChfX291dCA8PCBfX291dC53aWRlbihfX2MpKTsgfQ0KDQoNCiAg
dGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxj
aGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08
Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYyk7DQoNCg0KICB0ZW1w
bGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08Y2hhciwg
X1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIs
IF9UcmFpdHM+JiBfX291dCwgc2lnbmVkIGNoYXIgX19jKQ0KICAgIHsgcmV0
dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQ0KDQog
IHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxj
aGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08
Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCB1bnNpZ25lZCBjaGFyIF9fYykNCiAg
ICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7
IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0K
ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpOw0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJg0KICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hh
ciogX19zKTsNCg0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAg
YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8
KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBj
aGFyKiBfX3MpOw0KDQoNCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAg
ICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9y
PDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0
IHNpZ25lZCBjaGFyKiBfX3MpDQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9DQoNCiAgdGVt
cGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPGNoYXIs
IF9UcmFpdHM+ICYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hh
ciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX3Mp
DQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KF9fcykpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+Jg0KICAgIGVuZGwoYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JiBfX29zKQ0KICAgIHsgcmV0dXJuIGZsdXNoKF9fb3Mu
cHV0KF9fb3Mud2lkZW4oJ1xuJykpKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgZW5kcyhiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpDQogICAgeyByZXR1cm4gX19vcy5w
dXQoX0NoYXJUKCkpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYNCiAgICBmbHVzaChiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9fb3MpDQogICAgeyByZXR1cm4gX19vcy5mbHVzaCgpOyB9
DQoNCn0NCg0KDQoNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIgMSAzDQojIDMyICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIg
Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfbG9jYWxlLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAzDQoNCiMgMSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl
ZndkLmgiIDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5o
IiAxIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9sb2NhbGUuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAx
IDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQojIDEgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZXJybm8uaCIgMSAzDQoj
IDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfY2Vycm5vLmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEg
MyA0DQojIDExICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMyA0DQojcHJhZ21h
IGlkZW50ICJAKCMpZXJybm8uaAkxLjE1CTk4LzAzLzAyIFNNSSINCg0KDQoN
Cg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvZXJybm8uaCIgMSAzIDQNCiMg
MTEgIi91c3IvaW5jbHVkZS9zeXMvZXJybm8uaCIgMyA0DQojcHJhZ21hIGlk
ZW50ICJAKCMpZXJybm8uaAkxLjE5CTk4LzAxLzE0IFNNSSINCiMgMzUgIi91
c3IvaW5jbHVkZS9zeXMvZXJybm8uaCIgMyA0DQpleHRlcm4gIkMiIHsNCiMg
MTkxICIvdXNyL2luY2x1ZGUvc3lzL2Vycm5vLmgiIDMgNA0KfQ0KIyAxOCAi
L3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7
DQojIDMyICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMyA0DQpleHRlcm4gaW50
ICpfX19lcnJubygpOw0KDQoNCg0KDQoNCg0KfQ0KIyAzOSAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NlcnJuby5oIiAy
IDMNCiMgMzYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nsb2NhbGUuaCIgMSAz
DQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY2xvY2FsZS5oIiAzDQojIDEgIi91c3IvaW5jbHVkZS9sb2NhbGUu
aCIgMSAzIDQNCiMgOSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQNCiNw
cmFnbWEgaWRlbnQgIkAoIylsb2NhbGUuaAkxLjE4CTk4LzAxLzIyIFNNSSIN
CiMgNDYgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMyA0DQojIDEgIi91c3Iv
aW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyA0NyAiL3Vz
ci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMgNA0KDQoNCg0KDQojIDEgIi9ob21l
L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
Ny8zLjAvaW5jbHVkZS9saWJpbnRsLmgiIDEgMyA0DQojIDIwICIvaG9tZS9t
ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
My4wL2luY2x1ZGUvbGliaW50bC5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAo
IylsaWJpbnRsLmgJMS4xMgk5Ny8wOC8yMCBTTUkiDQoNCiMgMSAiL3Vzci9p
bmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNA0KIyAyMyAiL2hvbWUvbWRl
aWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMu
MC9pbmNsdWRlL2xpYmludGwuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsN
CiMgNDQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9saWJpbnRsLmgiIDMgNA0KZXh0
ZXJuIGNoYXIgKmRjZ2V0dGV4dChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg
KiwgY29uc3QgaW50KTsNCmV4dGVybiBjaGFyICpkZ2V0dGV4dChjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqZ2V0dGV4dChj
b25zdCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKnRleHRkb21haW4oY29uc3Qg
Y2hhciAqKTsNCmV4dGVybiBjaGFyICpiaW5kdGV4dGRvbWFpbihjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKik7DQoNCg0KDQpleHRlcm4gaW50IHdkaW5p
dCh2b2lkKTsNCmV4dGVybiBpbnQgd2RjaGtpbmQod2NoYXJfdCk7DQpleHRl
cm4gaW50IHdkYmluZGYod2NoYXJfdCwgd2NoYXJfdCwgaW50KTsNCmV4dGVy
biB3Y2hhcl90ICp3ZGRlbGltKHdjaGFyX3QsIHdjaGFyX3QsIGludCk7DQpl
eHRlcm4gd2NoYXJfdCBtY2ZpbGxlcih2b2lkKTsNCmV4dGVybiBpbnQgbWN3
cmFwKHZvaWQpOw0KIyA3OCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL2xpYmludGwu
aCIgMyA0DQp9DQojIDUyICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMyA0
DQoNCg0KDQpleHRlcm4gIkMiIHsNCg0KDQpzdHJ1Y3QgbGNvbnYgew0KICAg
ICAgICBjaGFyICpkZWNpbWFsX3BvaW50Ow0KICAgICAgICBjaGFyICp0aG91
c2FuZHNfc2VwOw0KICAgICAgICBjaGFyICpncm91cGluZzsNCiAgICAgICAg
Y2hhciAqaW50X2N1cnJfc3ltYm9sOw0KICAgICAgICBjaGFyICpjdXJyZW5j
eV9zeW1ib2w7DQogICAgICAgIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50Ow0K
ICAgICAgICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsNCiAgICAgICAgY2hh
ciAqbW9uX2dyb3VwaW5nOw0KICAgICAgICBjaGFyICpwb3NpdGl2ZV9zaWdu
Ow0KICAgICAgICBjaGFyICpuZWdhdGl2ZV9zaWduOw0KICAgICAgICBjaGFy
IGludF9mcmFjX2RpZ2l0czsNCiAgICAgICAgY2hhciBmcmFjX2RpZ2l0czsN
CiAgICAgICAgY2hhciBwX2NzX3ByZWNlZGVzOw0KICAgICAgICBjaGFyIHBf
c2VwX2J5X3NwYWNlOw0KICAgICAgICBjaGFyIG5fY3NfcHJlY2VkZXM7DQog
ICAgICAgIGNoYXIgbl9zZXBfYnlfc3BhY2U7DQogICAgICAgIGNoYXIgcF9z
aWduX3Bvc247DQogICAgICAgIGNoYXIgbl9zaWduX3Bvc247DQp9Ow0KIyAx
MDIgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMyA0DQpleHRlcm4gY2hhciAq
c2V0bG9jYWxlKGludCwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBzdHJ1Y3Qg
bGNvbnYgKmxvY2FsZWNvbnYodm9pZCk7DQoNCg0KDQoNCg0KDQp9DQojIDM5
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y2xvY2FsZS5oIiAyIDMNCg0KDQoNCg0KDQpuYW1lc3BhY2Ugc3RkDQp7DQog
IHVzaW5nIDo6bGNvbnY7DQogIHVzaW5nIDo6c2V0bG9jYWxlOw0KICB1c2lu
ZyA6OmxvY2FsZWNvbnY7DQp9DQojIDM3ICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzDQoj
IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jc3RkbGliLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMw0KIyAx
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3Vu
LXNvbGFyaXMyLjcvYml0cy9zdGRfbGltaXRzLmgiIDEgMw0KIyA0NSAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xh
cmlzMi43L2JpdHMvc3RkX2xpbWl0cy5oIiAzDQojIDEgIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9i
aXRzL2MrK2NvbmZpZy5oIiAxIDMNCiMgNDYgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL3N0
ZF9saW1pdHMuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9jZmxvYXQuaCIgMSAzDQojIDM4ICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Zsb2F0
LmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL2Zsb2F0LmgiIDEgMyA0DQojIDE2
ICIvdXNyL2luY2x1ZGUvZmxvYXQuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJA
KCMpZmxvYXQuaAkxLjE1CTk3LzExLzIyIFNNSSINCg0KDQpleHRlcm4gIkMi
IHsNCg0KDQoNCg0KDQpleHRlcm4gaW50IF9fZmx0X3JvdW5kcyh2b2lkKTsN
CiMgOTcgIi91c3IvaW5jbHVkZS9mbG9hdC5oIiAzIDQNCn0NCiMgMzkgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZmxv
YXQuaCIgMiAzDQojIDQ3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9zdGRfbGltaXRzLmgi
IDIgMw0KDQpuYW1lc3BhY2Ugc3RkIHsNCg0KICAgIGVudW0gZmxvYXRfcm91
bmRfc3R5bGUgew0KICAgICAgICByb3VuZF9pbmRldGVybWluYXRlID0gLTEs
DQogICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwNCiAgICAgICAgcm91
bmRfdG9fbmVhcmVzdCA9IDEsDQogICAgICAgIHJvdW5kX3Rvd2FyZF9pbmZp
bml0eSA9IDIsDQogICAgICAgIHJvdW5kX3Rvd2FyZF9uZWdfaW5maW5pdHkg
PSAzDQogICAgfTsNCg0KICAgIGVudW0gZmxvYXRfZGVub3JtX3N0eWxlIHsN
CiAgICAgICAgZGVub3JtX2luZGV0ZXJtaW5hdGUgPSAtMSwNCiAgICAgICAg
ZGVub3JtX2Fic2VudCA9IDAsDQogICAgICAgIGRlbm9ybV9wcmVzZW50ID0g
MQ0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVj
dCBudW1lcmljX2xpbWl0cyB7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX3NwZWNpYWxpemVkID0gZmFsc2U7DQoNCiAgICAgICAgc3RhdGljIF9U
cCBtaW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7
IH0NCiAgICAgICAgc3RhdGljIF9UcCBtYXgoKSB0aHJvdygpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PF9UcD4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29u
c3QgaW50IGRpZ2l0cyA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzMTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
aWduZWQgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aW50ZWdlciA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19leGFjdCA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJh
ZGl4ID0gMDsNCg0KICAgICAgICBzdGF0aWMgX1RwIGVwc2lsb24oKSB0aHJv
dygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0NCiAgICAgICAg
c3RhdGljIF9UcCByb3VuZF9lcnJvcigpIHRocm93KCkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8X1RwPigwKTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsNCiAg
ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu
b3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgICAgc3RhdGlj
IF9UcCBpbmZpbml0eSgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
X1RwPigwKTsgfQ0KICAgICAgICBzdGF0aWMgX1RwIHF1aWV0X05hTigpIHRo
cm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQ0KICAgICAg
ICBzdGF0aWMgX1RwIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PF9UcD4oMCk7IH0NCiAgICAgICAgc3RhdGljIF9UcCBk
ZW5vcm1fbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+
KDApOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5
ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5k
ZWQgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
dWxvID0gZmFsc2U7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJh
cHMgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l
c3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv
Ow0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBf
X2xpbWl0c19pbmZpbml0eSgpOw0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4gX1RwIF9fbGltaXRzX3F1aWV0X05hTigpOw0KICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4gX1RwIF9fbGltaXRzX3NpZ25hbGluZ19OYU4oKTsNCiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19kZW5vcm1f
bWluKCk7DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0
czxib29sPiB7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgYm9vbCBtaW4oKSB0
aHJvdygpDQogICAgICAgIHsgcmV0dXJuIGZhbHNlOyB9DQogICAgICAgIHN0
YXRpYyBib29sIG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gdHJ1
ZTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gODsN
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7DQogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOw0KICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3Rh
dGljIGJvb2wgZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g
MDsgfQ0KICAgICAgICBzdGF0aWMgYm9vbCByb3VuZF9lcnJvcigpIHRocm93
KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz
ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBo
YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgICAg
c3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9DQogICAgICAgIHN0YXRpYyBi
b29sIHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8Ym9vbD4oMCk7IH0NCiAgICAgICAgc3RhdGljIGJvb2wgc2ln
bmFsaW5nX05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Ym9vbD4oMCk7IH0NCiAgICAgICAgc3RhdGljIGJvb2wgZGVub3Jt
X21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
Ym9vbD4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p
ZWM1NTkgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19i
b3VuZGVkID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
bW9kdWxvID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
cmFwcyA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu
ZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxv
YXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy
bzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19s
aW1pdHM8Y2hhcj4gew0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
cGVjaWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIGNoYXIgbWlu
KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAoLTEyOCk7IH0NCiAgICAg
ICAgc3RhdGljIGNoYXIgbWF4KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVy
biAxMjc7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9
IDc7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOw0K
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0K
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsN
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0K
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAg
c3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1
cm4gMDsgfQ0KICAgICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRo
cm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBm
YWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls
ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAg
ICAgc3RhdGljIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9DQogICAgICAgIHN0YXRp
YyBjaGFyIHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0NCiAgICAgICAgc3RhdGljIGNoYXIg
c2lnbmFsaW5nX05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y2hhcj4oMCk7IH0NCiAgICAgICAgc3RhdGljIGNoYXIgZGVu
b3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Y2hhcj4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pZWM1NTkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfYm91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX21vZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRyYXBzID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25z
dCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2Fy
ZF96ZXJvOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1l
cmljX2xpbWl0czxzaWduZWQgY2hhcj4gew0KICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAgc3Rh
dGljIHNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1
cm4gKC0xMjgpOyB9DQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtYXgo
KSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDEyNzsgfQ0KDQogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNzsNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBkaWdpdHMxMCA9IDI7DQogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX3NpZ25lZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2ludGVnZXIgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19leGFjdCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcmFkaXggPSAyOw0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIg
ZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KICAg
ICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygp
DQogICAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7
DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz
X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0
YXRpYyBzaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkNCiAgICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9DQogICAg
ICAgIHN0YXRpYyBzaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpDQog
ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsg
fQ0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigp
IHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVk
IGNoYXI+KDApOyB9DQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBkZW5v
cm1fbWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxzaWduZWQgY2hhcj4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pZWM1NTkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX21vZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRyYXBzID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k
X3Rvd2FyZF96ZXJvOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBjaGFyPiB7DQogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0aHJvdygpDQogICAg
ICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNo
YXIgbWF4KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAyNTU7IH0NCg0K
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDg7DQogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOw0KICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsNCiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu
IDA7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgcm91bmRfZXJy
b3IoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0K
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs
c2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf
TmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5v
cm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0K
DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhy
b3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPigwKTsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBxdWll
dF9OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KDApOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9DQogICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpDQog
ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDAp
OyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g
ZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQg
PSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g
PSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0g
dHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm
b3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu
ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAg
IH07DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxz
aG9ydD4gew0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs
aXplZCA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRo
cm93KCkNCiAgICAgICAgeyByZXR1cm4gKC0zMjc2Ny0xKTsgfQ0KICAgICAg
ICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVy
biAzMjc2NzsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
ID0gMTU7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVl
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1
ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVl
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAg
ICAgc3RhdGljIHNob3J0IGVwc2lsb24oKSB0aHJvdygpDQogICAgICAgIHsg
cmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIHNob3J0IHJvdW5kX2Vycm9y
KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQoNCiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgICBz
dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05h
TiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt
X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0K
ICAgICAgICBzdGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpDQogICAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQ0KICAgICAg
ICBzdGF0aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0NCiAgICAgICAgc3Rh
dGljIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQ0KICAgICAgICBzdGF0
aWMgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KDApOyB9DQoNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg
PSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8
PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+IHsNCiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl
Ow0KDQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJv
dygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIHVu
c2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g
NjU1MzU7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9
IDE2Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsN
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7
DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7
DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXBzaWxvbigpIHRocm93KCkNCiAg
ICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWduZWQg
c2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu
IDA7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu
dCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
MTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu
dCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50
MTAgPSAwOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp
bml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
cXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h
YnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f
bG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9y
dCBpbmZpbml0eSgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQ0KICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRo
cm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
c2hvcnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBk
ZW5vcm1fbWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7DQoNCiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g
cm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPD4g
c3RydWN0IG51bWVyaWNfbGltaXRzPGludD4gew0KICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAg
c3RhdGljIGludCBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuICgt
MjE0NzQ4MzY0Ny0xKTsgfQ0KICAgICAgICBzdGF0aWMgaW50IG1heCgpIHRo
cm93KCkNCiAgICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0NzsgfQ0KDQogICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7DQogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIGludCBlcHNp
bG9uKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQogICAgICAg
IHN0YXRpYyBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAgICAgIHsg
cmV0dXJuIDA7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4
cG9uZW50MTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4
cG9uZW50MTAgPSAwOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl
bm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k
ZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBpbnQgaW5m
aW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PGludD4oMCk7IH0NCiAgICAgICAgc3RhdGljIGludCBxdWlldF9OYU4oKSB0
aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7
IH0NCiAgICAgICAgc3RhdGljIGludCBzaWduYWxpbmdfTmFOKCkgdGhyb3co
KQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9DQog
ICAgICAgIHN0YXRpYyBpbnQgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQ0KDQogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7DQogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0K
ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf
c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVt
cGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50PiB7
DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0g
dHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRo
cm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAgICBzdGF0aWMg
dW5zaWduZWQgaW50IG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g
KDIxNDc0ODM2NDcgKiAyVSArIDEpOyB9DQoNCiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBkaWdpdHMgPSAzMjsNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMxMCA9IDk7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NpZ25lZCA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfZXhhY3QgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJh
ZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBlcHNpbG9u
KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQogICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAg
ICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50
IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y
bSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBpbnQgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0NCiAgICAgICAg
c3RhdGljIHVuc2lnbmVkIGludCBxdWlldF9OYU4oKSB0aHJvdygpDQogICAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0N
CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBzaWduYWxpbmdfTmFOKCkg
dGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBpbnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVu
b3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50PigwKTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2llYzU1OSA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRyYXBzID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k
X3Rvd2FyZF96ZXJvOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBudW1lcmljX2xpbWl0czxsb25nPiB7DQogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0
aWMgbG9uZyBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuICgtMjE0
NzQ4MzY0N0wtMSk7IH0NCiAgICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhy
b3coKQ0KICAgICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQ0KDQogICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7DQogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIGxvbmcgZXBz
aWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KICAgICAg
ICBzdGF0aWMgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgICAg
eyByZXR1cm4gMDsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
X2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
ZXhwb25lbnQxMCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50ID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQxMCA9IDA7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsNCiAgICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g
ZGVub3JtX2Fic2VudDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAgICAgICAgc3RhdGljIGxvbmcg
aW5maW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGxvbmc+KDApOyB9DQogICAgICAgIHN0YXRpYyBsb25nIHF1aWV0X05h
TigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9u
Zz4oMCk7IH0NCiAgICAgICAgc3RhdGljIGxvbmcgc2lnbmFsaW5nX05hTigp
IHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4o
MCk7IH0NCiAgICAgICAgc3RhdGljIGxvbmcgZGVub3JtX21pbigpIHRocm93
KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0N
Cg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVl
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1
ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFs
c2U7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg
PSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0
eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsN
Cg0KICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2ln
bmVkIGxvbmc+IHsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl
Y2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBs
b25nIG1pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXgoKSB0aHJvdygpDQogICAg
ICAgIHsgcmV0dXJuICgyMTQ3NDgzNjQ3TCAqIDJVTCArIDEpOyB9DQoNCiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMjsNCiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7DQogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOw0KICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGxvbmcgZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g
MDsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9lcnJv
cigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0KDQogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsNCiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7DQogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsNCiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7DQoNCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxz
ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O
YU4gPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y
bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoN
CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5maW5pdHkoKSB0aHJv
dygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmc+KDApOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHF1aWV0
X05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZz4oMCk7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0NCiAgICAgICAg
c3RhdGljIHVuc2lnbmVkIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkNCiAg
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7
IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0
cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g
dHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g
dHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRy
dWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y
ZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRf
c3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9
Ow0KDQogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Zmxv
YXQ+IHsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6
ZWQgPSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyBmbG9hdCBtaW4oKSB0aHJv
dygpDQogICAgICAgIHsgcmV0dXJuIDEuMTc1NDk0MzUxRS0zOEY7IH0NCiAg
ICAgICAgc3RhdGljIGZsb2F0IG1heCgpIHRocm93KCkNCiAgICAgICAgeyBy
ZXR1cm4gMy40MDI4MjM0NjZFKzM4RjsgfQ0KDQogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgZGlnaXRzID0gMjQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzMTAgPSA3Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19zaWduZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pbnRlZ2VyID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2V4YWN0ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cmFkaXggPSAyOw0KICAgICAgICBzdGF0aWMgZmxvYXQgZXBzaWxvbigpIHRo
cm93KCkNCiAgICAgICAgeyByZXR1cm4gMS4xOTIwOTI4OTZFLTA3RjsgfQ0K
ICAgICAgICBzdGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJvdygpDQog
ICAgICAgIHsgcmV0dXJuIDEuMGY7IH0NCg0KICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbl9leHBvbmVudCA9IC0xMjU7DQogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzc7DQogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTI4Ow0KICAgICAgICBzdGF0
aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMzg7DQoNCiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7DQogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsN
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
PSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9z
dHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsNCiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7DQoNCiAg
ICAgICAgc3RhdGljIGZsb2F0IGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0NCiAgICAgICAg
c3RhdGljIGZsb2F0IHF1aWV0X05hTigpIHRocm93KCkNCiAgICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9DQogICAgICAgIHN0YXRp
YyBmbG9hdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQ0KICAgICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0NCiAgICAgICAgc3RhdGlj
IGZsb2F0IGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0PigwKTsgfQ0KDQogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7DQoNCiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9
IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTw+
IHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+IHsNCiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAg
ICAgIHN0YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJl
dHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRFLTMwODsgfQ0KICAgICAgICBzdGF0
aWMgZG91YmxlIG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMS43
OTc2OTMxMzQ4NjIzMTU3RSszMDg7IH0NCg0KICAgICAgICBzdGF0aWMgY29u
c3QgaW50IGRpZ2l0cyA9IDUzOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0czEwID0gMTU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NpZ25lZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2ludGVnZXIgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfZXhhY3QgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBy
YWRpeCA9IDI7DQogICAgICAgIHN0YXRpYyBkb3VibGUgZXBzaWxvbigpIHRo
cm93KCkNCiAgICAgICAgeyByZXR1cm4gMi4yMjA0NDYwNDkyNTAzMTMxRS0x
NjsgfQ0KICAgICAgICBzdGF0aWMgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhy
b3coKQ0KICAgICAgICB7IHJldHVybiAxLjA7IH0NCg0KICAgICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xMDIxOw0KICAgICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTMwNzsNCiAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMDI0Ow0KICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMzA4Ow0K
DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh
bHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO
ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
YWxpbmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOw0KDQogICAgICAgIHN0YXRpYyBkb3VibGUgaW5maW5pdHkoKSB0aHJv
dygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oMCk7
IH0NCiAgICAgICAgc3RhdGljIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygp
DQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oMCk7IH0N
CiAgICAgICAgc3RhdGljIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3co
KQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDApOyB9
DQogICAgICAgIHN0YXRpYyBkb3VibGUgZGVub3JtX21pbigpIHRocm93KCkN
CiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPigwKTsgfQ0K
DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNl
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1
ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFs
c2U7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxz
ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl
ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z
dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07
DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25n
IGRvdWJsZT4gew0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVj
aWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIGxvbmcgZG91Ymxl
IG1pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMy4zNjIxMDMxNDMx
MTIwOTM1MDYyNjI2Nzc4MTczMjE3NTI2MDNFLTQ5MzJMOyB9DQogICAgICAg
IHN0YXRpYyBsb25nIGRvdWJsZSBtYXgoKSB0aHJvdygpDQogICAgICAgIHsg
cmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDg1NzU5MzI2NjI4MDA3MDE2
RSs0OTMyTDsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
ID0gMTEzOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0g
MzQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRy
dWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBm
YWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBm
YWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQog
ICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQ0K
ICAgICAgICB7IHJldHVybiAxLjkyNTkyOTk0NDM4NzIzNTg1MzA1NTk3Nzk0
MjU4NDkyNzMxOUUtMzRMOyB9DQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJs
ZSByb3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMS4w
TDsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
ID0gLTE2MzgxOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudDEwID0gLTQ5MzE7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50ID0gMTYzODQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50MTAgPSA0OTMyOw0KDQogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7DQog
ICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl
bm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRp
YyBsb25nIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkNCiAgICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KDApOyB9DQogICAgICAg
IHN0YXRpYyBsb25nIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpDQogICAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPigwKTsgfQ0K
ICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRo
cm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3Vi
bGU+KDApOyB9DQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBkZW5vcm1f
bWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxs
b25nIGRvdWJsZT4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pZWM1NTkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX21vZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90
b3dhcmRfemVybzsNCiAgICB9Ow0KDQp9DQojIDM5ICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIg
MiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9tZW1vcnkuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAz
DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L3NidWZfaXRlci5oIiAxIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMg
MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2NjdHlwZS5oIiAxIDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMgMSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAx
IDMNCiMgMzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My90
eXBlaW5mbyIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvZXhjZXB0aW9uIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My90eXBlaW5mbyIgMiAzDQoNCmV4dGVybiAiQysr
IiB7DQoNCm5hbWVzcGFjZSBfX2N4eGFiaXYxDQp7DQogIGNsYXNzIF9fY2xh
c3NfdHlwZV9pbmZvOw0KfQ0KIyA1MCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQog
IGNsYXNzIHR5cGVfaW5mbw0KICB7DQogIHB1YmxpYzoNCg0KDQoNCg0KICAg
IHZpcnR1YWwgfnR5cGVfaW5mbygpOw0KDQogIHByaXZhdGU6DQoNCiAgICB0
eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsNCiAgICB0
eXBlX2luZm8oY29uc3QgdHlwZV9pbmZvJik7DQoNCiAgcHJvdGVjdGVkOg0K
ICAgIGNvbnN0IGNoYXIgKl9fbmFtZTsNCg0KICBwcm90ZWN0ZWQ6DQogICAg
ZXhwbGljaXQgdHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9fbik6IF9fbmFtZShf
X24pIHsgfQ0KDQogIHB1YmxpYzoNCg0KICAgIGNvbnN0IGNoYXIqIG5hbWUo
KSBjb25zdA0KICAgIHsgcmV0dXJuIF9fbmFtZTsgfQ0KIyA4NiAiL2hvbWUv
bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAzDQogICAg
Ym9vbCBiZWZvcmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QNCiAg
ICB7IHJldHVybiBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0NCiAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QNCiAg
ICB7IHJldHVybiBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9DQoNCiAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QN
CiAgICB7IHJldHVybiAhb3BlcmF0b3I9PShfX2FyZyk7IH0NCg0KDQogIHB1
YmxpYzoNCg0KICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNv
bnN0Ow0KDQogICAgdmlydHVhbCBib29sIF9faXNfZnVuY3Rpb25fcCgpIGNv
bnN0Ow0KDQoNCg0KDQoNCg0KDQogICAgdmlydHVhbCBib29sIF9fZG9fY2F0
Y2goY29uc3QgdHlwZV9pbmZvICpfX3Rocl90eXBlLCB2b2lkICoqX190aHJf
b2JqLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9f
b3V0ZXIpIGNvbnN0Ow0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgX19kb191cGNh
c3QoY29uc3QgX19jeHhhYml2MTo6X19jbGFzc190eXBlX2luZm8gKl9fdGFy
Z2V0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19v
YmpfcHRyKSBjb25zdDsNCiAgfTsNCg0KICBjbGFzcyBiYWRfY2FzdCA6IHB1
YmxpYyBleGNlcHRpb24NCiAgew0KICBwdWJsaWM6DQogICAgYmFkX2Nhc3Qo
KSB0aHJvdygpIHsgfQ0KICAgIHZpcnR1YWwgfmJhZF9jYXN0KCkgdGhyb3co
KTsNCiAgfTsNCg0KICBjbGFzcyBiYWRfdHlwZWlkIDogcHVibGljIGV4Y2Vw
dGlvbg0KICB7DQogIHB1YmxpYzoNCiAgICBiYWRfdHlwZWlkICgpIHRocm93
KCkgeyB9DQogICAgdmlydHVhbCB+YmFkX3R5cGVpZCAoKSB0aHJvdygpOw0K
ICB9Ow0KfQ0KDQp9DQojIDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzDQojIDEgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0
b3IuaCIgMSAzDQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAx
IDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL2Z1bmN0ZXhjZXB0LmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMw0KIyAz
NSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVu
Y3RleGNlcHQuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB2b2lk
DQogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsNCg0KDQogIHZvaWQN
CiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7DQoNCg0KICB2b2lkDQogIF9f
dGhyb3dfYmFkX2Nhc3Qodm9pZCk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2Jh
ZF90eXBlaWQodm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfbG9naWNf
ZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3df
ZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBf
X3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsNCg0K
ICB2b2lkDQogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBj
aGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19ydW50aW1lX2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X3Jhbmdl
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93
X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0K
ICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K
DQoNCiAgdm9pZA0KICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIq
IF9fcyk7DQp9DQojIDMzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfdmVjdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMSAzDQojIDM1
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
dmVjdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMw0KIyAzNiAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rv
ci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzDQojIDM3ICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9y
LmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfdmVjdG9yLmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzDQoj
IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMw0KIyAzNSAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAy
IDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvZnVuY3RleGNlcHQuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzDQojIDEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb25f
ZGVmaW5lcy5oIiAxIDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMw0KDQpuYW1lc3Bh
Y2Ugc3RkDQp7DQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9leGNlcHRpb24o
dm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQp
Ow0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOw0KDQog
IHZvaWQNCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOw0KDQoNCiAgdm9p
ZA0KICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoN
CiAgdm9pZA0KICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNv
bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2xlbmd0aF9l
cnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19v
dXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9f
dGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZv
aWQNCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K
DQogIHZvaWQNCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFy
KiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3Io
Y29uc3QgY2hhciogX19zKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19pb3Nf
ZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOw0KfQ0KIyAzNiAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAy
IDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvY29uY2VwdF9jaGVjay5oIiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzDQoN
Cm5hbWVzcGFjZSBzdGQNCnsNCiMgNDggIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMw0KdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0aWM+
DQpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2Ugew0KcHVibGljOg0KICB0eXBl
ZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6
YWxsb2NhdG9yX3R5cGUNCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsNCiAg
YWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
IF9NX2RhdGFfYWxsb2NhdG9yOyB9DQoNCiAgX1ZlY3Rvcl9hbGxvY19iYXNl
KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpDQogICAgOiBfTV9kYXRhX2Fs
bG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9l
bmRfb2Zfc3RvcmFnZSgwKQ0KICB7fQ0KDQpwcm90ZWN0ZWQ6DQogIGFsbG9j
YXRvcl90eXBlIF9NX2RhdGFfYWxsb2NhdG9yOw0KICBfVHAqIF9NX3N0YXJ0
Ow0KICBfVHAqIF9NX2ZpbmlzaDsNCiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFn
ZTsNCg0KICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pDQogICAgeyBy
ZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoX19uKTsgfQ0KICB2
b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pDQogICAg
eyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwg
X19uKTsgfQ0KfTsNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvY2F0b3I+DQpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBf
QWxsb2NhdG9yLCB0cnVlPiB7DQpwdWJsaWM6DQogIHR5cGVkZWYgdHlwZW5h
bWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3Jf
dHlwZQ0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOw0KICBhbGxvY2F0b3Jf
dHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9y
X3R5cGUoKTsgfQ0KDQogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxv
Y2F0b3JfdHlwZSYpDQogICAgOiBfTV9zdGFydCgwKSwgX01fZmluaXNoKDAp
LCBfTV9lbmRfb2Zfc3RvcmFnZSgwKQ0KICB7fQ0KDQpwcm90ZWN0ZWQ6DQog
IF9UcCogX01fc3RhcnQ7DQogIF9UcCogX01fZmluaXNoOw0KICBfVHAqIF9N
X2VuZF9vZl9zdG9yYWdlOw0KDQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j
X3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZSBfQWxsb2Nf
dHlwZTsNCiAgX1RwKiBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQ0KICAgIHsg
cmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9DQogIHZvaWQg
X01fZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikNCiAgICB7IF9B
bGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgX19uKTt9DQp9Ow0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpzdHJ1Y3QgX1ZlY3Rv
cl9iYXNlDQogIDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9B
bGxvYywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190
cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+DQp7DQogIHR5
cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0Fs
bG9jPjo6X1NfaW5zdGFuY2VsZXNzPg0KICAgICAgICAgIF9CYXNlOw0KICB0
eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0
b3JfdHlwZTsNCg0KICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5
cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9DQogIF9WZWN0b3JfYmFzZShzaXpl
X3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9f
YSkgew0KICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsNCiAgICBf
TV9maW5pc2ggPSBfTV9zdGFydDsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9
IF9NX3N0YXJ0ICsgX19uOw0KICB9DQoNCiAgfl9WZWN0b3JfYmFzZSgpIHsg
X01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBf
TV9zdGFydCk7IH0NCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jID0gYWxsb2NhdG9yPF9UcD4gPg0KY2xhc3MgdmVjdG9yIDog
cHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4NCnsNCg0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KDQpwcml2YXRlOg0KICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxf
VHAsIF9BbGxvYz4gX0Jhc2U7DQogIHR5cGVkZWYgdmVjdG9yPF9UcCwgX0Fs
bG9jPiB2ZWN0b3JfdHlwZTsNCnB1YmxpYzoNCiAgdHlwZWRlZiBfVHAgdmFs
dWVfdHlwZTsNCiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOw0KICB0
eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7DQogIHR5
cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgdmVjdG9yX3R5cGU+
IGl0ZXJhdG9yOw0KICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0
X3BvaW50ZXIsIHZlY3Rvcl90eXBlPiBjb25zdF9pdGVyYXRvcjsNCiAgdHlw
ZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7DQogIHR5cGVkZWYgY29uc3Qg
dmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOw0KICB0eXBlZGVmIHNpemVf
dCBzaXplX3R5cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf
dHlwZTsNCg0KICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3Jf
dHlwZSBhbGxvY2F0b3JfdHlwZTsNCiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2Fs
bG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9y
KCk7IH0NCg0KICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRl
cmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7DQogIHR5cGVkZWYgcmV2
ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsNCg0K
cHJvdGVjdGVkOg0KICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7DQogIHVz
aW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOw0KICB1c2luZyBfQmFzZTo6X01f
c3RhcnQ7DQogIHVzaW5nIF9CYXNlOjpfTV9maW5pc2g7DQogIHVzaW5nIF9C
YXNlOjpfTV9lbmRfb2Zfc3RvcmFnZTsNCg0KcHJvdGVjdGVkOg0KICB2b2lk
IF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1Rw
JiBfX3gpOw0KICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3Np
dGlvbik7DQoNCnB1YmxpYzoNCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy
biBpdGVyYXRvciAoX01fc3RhcnQpOyB9DQogIGNvbnN0X2l0ZXJhdG9yIGJl
Z2luKCkgY29uc3QNCiAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01f
c3RhcnQpOyB9DQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9y
IChfTV9maW5pc2gpOyB9DQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yIChfTV9maW5pc2gpOyB9DQoNCiAg
cmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQ0KICAgIHsgcmV0dXJuIHJldmVy
c2VfaXRlcmF0b3IoZW5kKCkpOyB9DQogIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IgcmJlZ2luKCkgY29uc3QNCiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yKGVuZCgpKTsgfQ0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQo
KQ0KICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0N
CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QNCiAgICB7
IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9DQoN
CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdA0KICAgIHsgcmV0dXJuIHNpemVf
dHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9DQogIHNpemVfdHlwZSBtYXhfc2l6
ZSgpIGNvbnN0DQogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVv
ZihfVHApOyB9DQogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0DQogICAg
eyByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9z
dG9yYWdlKSAtIGJlZ2luKCkpOyB9DQogIGJvb2wgZW1wdHkoKSBjb25zdA0K
ICAgIHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0NCg0KICByZWZlcmVu
Y2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2lu
KCkgKyBfX24pOyB9DQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNp
emVfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7
IH0NCg0KICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNv
bnN0IHsNCiAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkNCiAgICAgIF9f
dGhyb3dfb3V0X29mX3JhbmdlKCJ2ZWN0b3IiKTsNCiAgfQ0KDQogIHJlZmVy
ZW5jZSBhdChzaXplX3R5cGUgX19uKQ0KICAgIHsgX01fcmFuZ2VfY2hlY2so
X19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQ0KICBjb25zdF9yZWZlcmVu
Y2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QNCiAgICB7IF9NX3JhbmdlX2No
ZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0NCg0KICBleHBsaWNp
dCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv
cl90eXBlKCkpDQogICAgOiBfQmFzZShfX2EpIHt9DQoNCiAgdmVjdG9yKHNp
emVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSwNCiAgICAgICAgIGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQ0K
ICAgIDogX0Jhc2UoX19uLCBfX2EpDQogICAgeyBfTV9maW5pc2ggPSB1bmlu
aXRpYWxpemVkX2ZpbGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQ0K
DQogIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQ0KICAgIDogX0Jh
c2UoX19uLCBhbGxvY2F0b3JfdHlwZSgpKQ0KICAgIHsgX01fZmluaXNoID0g
dW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9
DQoNCiAgdmVjdG9yKGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkN
CiAgICA6IF9CYXNlKF9feC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkp
DQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJl
Z2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOyB9DQoNCg0KICB0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZlY3RvcihfSW5wdXRJdGVy
YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAg
ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo
KSkgOiBfQmFzZShfX2EpIHsNCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19p
bnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsN
CiAgICBfTV9pbml0aWFsaXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRl
Z3JhbCgpKTsNCiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4N
CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW50ZWdlciBfX24sIF9JbnRl
Z2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKSB7DQogICAgX01fc3RhcnQgPSBf
TV9hbGxvY2F0ZShfX24pOw0KICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01f
c3RhcnQgKyBfX247DQogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9m
aWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7DQogIH0NCg0KICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogIHZvaWQgX01faW5pdGlh
bGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2Vf
dHlwZSkgew0KICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19s
YXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAgfQ0KDQog
IH52ZWN0b3IoKSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7IH0N
Cg0KICB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVj
dG9yPF9UcCwgX0FsbG9jPiYgX194KTsNCiAgdm9pZCByZXNlcnZlKHNpemVf
dHlwZSBfX24pIHsNCiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgew0KICAg
ICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7DQogICAg
ICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBf
TV9zdGFydCwgX01fZmluaXNoKTsNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQs
IF9NX2ZpbmlzaCk7DQogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBf
TV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0YXJ0
ID0gX190bXA7DQogICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3Np
emU7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19u
Ow0KICAgIH0NCiAgfQ0KDQoNCg0KDQoNCg0KICB2b2lkIGFzc2lnbihzaXpl
X3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7IF9NX2ZpbGxfYXNzaWdu
KF9fbiwgX192YWwpOyB9DQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90
eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7DQoNCiAgdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVy
YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsNCiAgICB0
eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6
X0ludGVncmFsIF9JbnRlZ3JhbDsNCiAgICBfTV9hc3NpZ25fZGlzcGF0Y2go
X19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7DQogIH0NCg0KICB0ZW1w
bGF0ZSA8Y2xhc3MgX0ludGVnZXI+DQogIHZvaWQgX01fYXNzaWduX2Rpc3Bh
dGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBl
KQ0KICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1Rw
KSBfX3ZhbCk7IH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4N
CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQ0KICAgIHsgX01f
YXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdv
cnkoX19maXJzdCkpOyB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPg0KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAg
ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0KICB0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgdm9pZCBfTV9hc3NpZ25fYXV4
KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBf
X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y
X3RhZyk7DQoNCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2lu
KCk7IH0NCiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1
cm4gKmJlZ2luKCk7IH0NCiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAq
KGVuZCgpIC0gMSk7IH0NCiAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25z
dCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0NCg0KICB2b2lkIHB1c2hfYmFj
ayhjb25zdCBfVHAmIF9feCkgew0KICAgIGlmIChfTV9maW5pc2ggIT0gX01f
ZW5kX29mX3N0b3JhZ2UpIHsNCiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gs
IF9feCk7DQogICAgICArK19NX2ZpbmlzaDsNCiAgICB9DQogICAgZWxzZQ0K
ICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194KTsNCiAgfQ0KICB2b2lk
IHB1c2hfYmFjaygpIHsNCiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9v
Zl9zdG9yYWdlKSB7DQogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsNCiAg
ICAgICsrX01fZmluaXNoOw0KICAgIH0NCiAgICBlbHNlDQogICAgICBfTV9p
bnNlcnRfYXV4KGVuZCgpKTsNCiAgfQ0KICB2b2lkIHN3YXAodmVjdG9yPF9U
cCwgX0FsbG9jPiYgX194KSB7DQogICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBf
X3guX01fc3RhcnQpOw0KICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5f
TV9maW5pc2gpOw0KICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwg
X194Ll9NX2VuZF9vZl9zdG9yYWdlKTsNCiAgfQ0KDQogIGl0ZXJhdG9yIGlu
c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkgew0K
ICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsNCiAg
ICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9z
aXRpb24gPT0gZW5kKCkpIHsNCiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gs
IF9feCk7DQogICAgICArK19NX2ZpbmlzaDsNCiAgICB9DQogICAgZWxzZQ0K
ICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9uKSwgX194
KTsNCiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsNCiAgfQ0KICBpdGVyYXRv
ciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikgew0KICAgIHNpemVfdHlw
ZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsNCiAgICBpZiAoX01fZmlu
aXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5k
KCkpIHsNCiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOw0KICAgICAgKytf
TV9maW5pc2g7DQogICAgfQ0KICAgIGVsc2UNCiAgICAgIF9NX2luc2VydF9h
dXgoaXRlcmF0b3IoX19wb3NpdGlvbikpOw0KICAgIHJldHVybiBiZWdpbigp
ICsgX19uOw0KICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPg0KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7DQogICAg
dHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46
Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7DQogICAgX01faW5zZXJ0X2Rpc3BhdGNo
KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsNCiAgfQ0K
DQogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4NCiAgdm9pZCBfTV9pbnNl
cnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0lu
dGVnZXIgX192YWwsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1
ZV90eXBlKQ0KICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5
cGUpIF9fbiwgKF9UcCkgX192YWwpOyB9DQoNCiAgdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPg0KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChp
dGVyYXRvciBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsNCiAg
ICBfTV9yYW5nZV9pbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7DQogIH0NCg0KICB2b2lkIGlu
c2VydCAoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9U
cCYgX194KQ0KICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194
KTsgfQ0KDQogIHZvaWQgX01fZmlsbF9pbnNlcnQgKGl0ZXJhdG9yIF9fcG9z
LCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7DQoNCiAgdm9pZCBw
b3BfYmFjaygpIHsNCiAgICAtLV9NX2ZpbmlzaDsNCiAgICBkZXN0cm95KF9N
X2ZpbmlzaCk7DQogIH0NCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19w
b3NpdGlvbikgew0KICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkN
CiAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9u
KTsNCiAgICAtLV9NX2ZpbmlzaDsNCiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7
DQogICAgcmV0dXJuIF9fcG9zaXRpb247DQogIH0NCiAgaXRlcmF0b3IgZXJh
c2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7DQogICAg
aXRlcmF0b3IgX19pKGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCkpOw0K
ICAgIGRlc3Ryb3koX19pLCBlbmQoKSk7DQogICAgX01fZmluaXNoID0gX01f
ZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOw0KICAgIHJldHVybiBfX2Zp
cnN0Ow0KICB9DQoNCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3Np
emUsIGNvbnN0IF9UcCYgX194KSB7DQogICAgaWYgKF9fbmV3X3NpemUgPCBz
aXplKCkpDQogICAgICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5k
KCkpOw0KICAgIGVsc2UNCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6
ZSAtIHNpemUoKSwgX194KTsNCiAgfQ0KICB2b2lkIHJlc2l6ZShzaXplX3R5
cGUgX19uZXdfc2l6ZSkgeyByZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9
DQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQ0K
DQpwcm90ZWN0ZWQ6DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cmF0b3I+DQogIHBvaW50ZXIgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90
eXBlIF9fbiwgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fbGFzdCkNCiAgew0KICAgIHBvaW50ZXIgX19yZXN1bHQg
PSBfTV9hbGxvY2F0ZShfX24pOw0KICAgIHRyeSB7DQogICAgICB1bmluaXRp
YWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQogICAg
ICByZXR1cm4gX19yZXN1bHQ7DQogICAgfQ0KICAgIGNhdGNoKC4uLikgeyBf
TV9kZWFsbG9jYXRlKF9fcmVzdWx0LCBfX24pOyB0aHJvdzsgfTsNCiAgfQ0K
DQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgdm9pZCBf
TV9yYW5nZV9pbml0aWFsaXplKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xh
c3QsIGlucHV0X2l0ZXJhdG9yX3RhZykNCiAgew0KICAgIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICAgIHB1c2hfYmFjaygq
X19maXJzdCk7DQogIH0NCg0KDQogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXJhdG9yPg0KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0Zvcndh
cmRJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3Jf
dGFnKQ0KICB7DQogICAgc2l6ZV90eXBlIF9fbiA9IDA7DQogICAgZGlzdGFu
Y2UoX19maXJzdCwgX19sYXN0LCBfX24pOw0KICAgIF9NX3N0YXJ0ID0gX01f
YWxsb2NhdGUoX19uKTsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0
YXJ0ICsgX19uOw0KICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsNCiAgfQ0KDQogIHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgdm9pZCBfTV9yYW5nZV9p
bnNlcnQoaXRlcmF0b3IgX19wb3MsDQogICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCwNCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFn
KTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAg
dm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsDQogICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv
cndhcmRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAg
IGZvcndhcmRfaXRlcmF0b3JfdGFnKTsNCn07DQoNCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVyYXRvcj09
KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9y
PF9UcCwgX0FsbG9jPiYgX195KQ0Kew0KICByZXR1cm4gX194LnNpemUoKSA9
PSBfX3kuc2l6ZSgpICYmDQogICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwg
X194LmVuZCgpLCBfX3kuYmVnaW4oKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVyYXRvcjwo
Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8
X1RwLCBfQWxsb2M+JiBfX3kpDQp7DQogIHJldHVybiBsZXhpY29ncmFwaGlj
YWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQo
KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4N
CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2
ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpDQp7DQogIF9feC5zd2FwKF9feSk7
DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlu
bGluZSBib29sDQpvcGVyYXRvciE9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxv
Yz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7DQog
IHJldHVybiAhKF9feCA9PSBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2M+DQppbmxpbmUgYm9vbA0Kb3BlcmF0b3I+KGNv
bnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9U
cCwgX0FsbG9jPiYgX195KSB7DQogIHJldHVybiBfX3kgPCBfX3g7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBi
b29sDQpvcGVyYXRvcjw9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9f
eCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7DQogIHJldHVy
biAhKF9feSA8IF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVyYXRvcj49KGNvbnN0IHZl
Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0Fs
bG9jPiYgX195KSB7DQogIHJldHVybiAhKF9feCA8IF9feSk7DQp9DQoNCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnZlY3RvcjxfVHAs
X0FsbG9jPiYNCnZlY3RvcjxfVHAsX0FsbG9jPjo6b3BlcmF0b3I9KGNvbnN0
IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkNCnsNCiAgaWYgKCZfX3ggIT0g
dGhpcykgew0KICAgIGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6
ZSgpOw0KICAgIGlmIChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7DQogICAgICBw
b2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBf
X3guYmVnaW4oKSwgX194LmVuZCgpKTsNCiAgICAgIGRlc3Ryb3koX01fc3Rh
cnQsIF9NX2ZpbmlzaCk7DQogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0
LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0
YXJ0ID0gX190bXA7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0
YXJ0ICsgX194bGVuOw0KICAgIH0NCiAgICBlbHNlIGlmIChzaXplKCkgPj0g
X194bGVuKSB7DQogICAgICBpdGVyYXRvciBfX2koY29weShfX3guYmVnaW4o
KSwgX194LmVuZCgpLCBiZWdpbigpKSk7DQogICAgICBkZXN0cm95KF9faSwg
ZW5kKCkpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIGNvcHkoX194LmJl
Z2luKCksIF9feC5iZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7DQogICAg
ICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9f
eC5lbmQoKSwgX01fZmluaXNoKTsNCiAgICB9DQogICAgX01fZmluaXNoID0g
X01fc3RhcnQgKyBfX3hsZW47DQogIH0NCiAgcmV0dXJuICp0aGlzOw0KfQ0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2b2lkIHZl
Y3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdCBfX24s
IGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQ0Kew0KICBpZiAoX19uID4gY2Fw
YWNpdHkoKSkgew0KICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19u
LCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigpKTsNCiAgICBfX3RtcC5zd2FwKCp0
aGlzKTsNCiAgfQ0KICBlbHNlIGlmIChfX24gPiBzaXplKCkpIHsNCiAgICBm
aWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7DQogICAgX01fZmluaXNoID0g
dW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBzaXplKCks
IF9fdmFsKTsNCiAgfQ0KICBlbHNlDQogICAgZXJhc2UoZmlsbF9uKGJlZ2lu
KCksIF9fbiwgX192YWwpLCBlbmQoKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXI+DQp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgo
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVy
YXRvcl90YWcpIHsNCiAgaXRlcmF0b3IgX19jdXIoYmVnaW4oKSk7DQogIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsr
X19jdXIsICsrX19maXJzdCkNCiAgICAqX19jdXIgPSAqX19maXJzdDsNCiAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgIGVyYXNlKF9fY3VyLCBlbmQo
KSk7DQogIGVsc2UNCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFz
dCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4g
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4NCnZvaWQNCnZlY3Rvcjxf
VHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7DQogIHNp
emVfdHlwZSBfX2xlbiA9IDA7DQogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFz
dCwgX19sZW4pOw0KDQogIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpIHsNCiAg
ICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBf
X2ZpcnN0LCBfX2xhc3QpKTsNCiAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9m
aW5pc2gpOw0KICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9v
Zl9zdG9yYWdlIC0gX01fc3RhcnQpOw0KICAgIF9NX3N0YXJ0ID0gX190bXA7
DQogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9maW5pc2ggPSBfTV9zdGFy
dCArIF9fbGVuOw0KICB9DQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikg
ew0KICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChjb3B5KF9fZmlyc3QsIF9f
bGFzdCwgX01fc3RhcnQpKTsNCiAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwg
ZW5kKCkpOw0KICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7
DQogIH0NCiAgZWxzZSB7DQogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19m
aXJzdDsNCiAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOw0KICAgIGNvcHko
X19maXJzdCwgX19taWQsIF9NX3N0YXJ0KTsNCiAgICBfTV9maW5pc2ggPSB1
bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsN
CiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
DQp2b2lkDQp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0
ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQ0Kew0KICBpZiAo
X01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7DQogICAgY29uc3Ry
dWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7DQogICAgKytfTV9m
aW5pc2g7DQogICAgX1RwIF9feF9jb3B5ID0gX194Ow0KICAgIGNvcHlfYmFj
a3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksIGl0
ZXJhdG9yKF9NX2ZpbmlzaC0gMSkpOw0KICAgICpfX3Bvc2l0aW9uID0gX194
X2NvcHk7DQogIH0NCiAgZWxzZSB7DQogICAgY29uc3Qgc2l6ZV90eXBlIF9f
b2xkX3NpemUgPSBzaXplKCk7DQogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVu
ID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOw0KICAg
IGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7DQog
ICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsNCiAgICB0
cnkgew0KICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5
KGl0ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7DQog
ICAgICBjb25zdHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsNCiAg
ICAgICsrX19uZXdfZmluaXNoOw0KICAgICAgX19uZXdfZmluaXNoID0gdW5p
bml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2Zpbmlz
aCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19uZXdfZmluaXNoKTsNCiAgICB9DQogICAgY2F0Y2goLi4uKSB7IChkZXN0
cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUo
X19uZXdfc3RhcnQuYmFzZSgpLF9fbGVuKSk7IHRocm93OyB9Ow0KDQogICAg
ZGVzdHJveShiZWdpbigpLCBlbmQoKSk7DQogICAgX01fZGVhbGxvY2F0ZShf
TV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7DQogICAg
X01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7DQogICAgX01fZmluaXNo
ID0gX19uZXdfZmluaXNoLmJhc2UoKTsNCiAgICBfTV9lbmRfb2Zfc3RvcmFn
ZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOw0KICB9DQp9DQoNCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnZvaWQNCnZlY3Rv
cjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3Np
dGlvbikNCnsNCiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFn
ZSkgew0KICAgIGNvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0g
MSkpOw0KICAgICsrX01fZmluaXNoOw0KICAgIGNvcHlfYmFja3dhcmQoX19w
b3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksDQogICAgICAgICAg
ICAgICAgICBpdGVyYXRvcihfTV9maW5pc2ggLSAxKSk7DQogICAgKl9fcG9z
aXRpb24gPSBfVHAoKTsNCiAgfQ0KICBlbHNlIHsNCiAgICBjb25zdCBzaXpl
X3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsNCiAgICBjb25zdCBzaXplX3R5
cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6
IDE7DQogICAgcG9pbnRlciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9f
bGVuKTsNCiAgICBwb2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0
Ow0KICAgIHRyeSB7DQogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxp
emVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0aW9uLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0
YXJ0KTsNCiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOw0KICAgICAg
KytfX25ld19maW5pc2g7DQogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRp
YWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25l
d19maW5pc2gpOw0KICAgIH0NCiAgICBjYXRjaCguLi4pIHsgKGRlc3Ryb3ko
X19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01fZGVhbGxvY2F0ZShfX25l
d19zdGFydCxfX2xlbikpOyB0aHJvdzsgfTsNCg0KICAgIGRlc3Ryb3koYmVn
aW4oKSwgZW5kKCkpOw0KICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9N
X2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOw0KICAgIF9NX3N0YXJ0ID0g
X19uZXdfc3RhcnQ7DQogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOw0K
ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsN
CiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
DQp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfaW5zZXJ0KGl0
ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194
KQ0Kew0KICBpZiAoX19uICE9IDApIHsNCiAgICBpZiAoc2l6ZV90eXBlKF9N
X2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsNCiAgICAg
IF9UcCBfX3hfY29weSA9IF9feDsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
X2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOw0KICAgICAgaXRl
cmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7DQogICAgICBpZiAoX19l
bGVtc19hZnRlciA+IF9fbikgew0KICAgICAgICB1bmluaXRpYWxpemVkX2Nv
cHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7DQog
ICAgICAgIF9NX2ZpbmlzaCArPSBfX247DQogICAgICAgIGNvcHlfYmFja3dh
cmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5p
c2gpOw0KICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBf
X24sIF9feF9jb3B5KTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAg
ICB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIF9fZWxl
bXNfYWZ0ZXIsIF9feF9jb3B5KTsNCiAgICAgICAgX01fZmluaXNoICs9IF9f
biAtIF9fZWxlbXNfYWZ0ZXI7DQogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29w
eShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAg
ICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOw0KICAgICAgICBmaWxs
KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX194X2NvcHkpOw0KICAgICAg
fQ0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
X29sZF9zaXplID0gc2l6ZSgpOw0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f
bGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBfX24pOw0KICAg
ICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsN
CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7DQog
ICAgICB0cnkgew0KICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxp
emVkX2NvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOw0K
ICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihf
X25ld19maW5pc2gsIF9fbiwgX194KTsNCiAgICAgICAgX19uZXdfZmluaXNo
DQogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwg
ZW5kKCksIF9fbmV3X2ZpbmlzaCk7DQogICAgICB9DQogICAgICBjYXRjaCgu
Li4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01f
ZGVhbGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pKTsgdGhyb3c7
IH07DQoNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7DQog
ICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFn
ZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQu
YmFzZSgpOw0KICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2Uo
KTsNCiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFz
ZSgpICsgX19sZW47DQogICAgfQ0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPg0Kdm9pZA0KdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2Vf
aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0
b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsNCiAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7DQogICAgX19wb3MgPSBpbnNlcnQo
X19wb3MsICpfX2ZpcnN0KTsNCiAgICArK19fcG9zOw0KICB9DQp9DQoNCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQp2b2lkDQp2ZWN0b3I8X1RwLCBfQWxs
b2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90
YWcpDQp7DQogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgIHNpemVf
dHlwZSBfX24gPSAwOw0KICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
X19uKTsNCiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0g
X01fZmluaXNoKSA+PSBfX24pIHsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
X2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOw0KICAgICAgaXRl
cmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7DQogICAgICBpZiAoX19l
bGVtc19hZnRlciA+IF9fbikgew0KICAgICAgICB1bmluaXRpYWxpemVkX2Nv
cHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7DQog
ICAgICAgIF9NX2ZpbmlzaCArPSBfX247DQogICAgICAgIGNvcHlfYmFja3dh
cmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5p
c2gpOw0KICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlv
bik7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAgICAgX0ZvcndhcmRJ
dGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7DQogICAgICAgIGFkdmFuY2UoX19t
aWQsIF9fZWxlbXNfYWZ0ZXIpOw0KICAgICAgICB1bmluaXRpYWxpemVkX2Nv
cHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsNCiAgICAgICAgX01fZmlu
aXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7DQogICAgICAgIHVuaW5pdGlh
bGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2Zpbmlz
aCk7DQogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOw0KICAg
ICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfX3Bvc2l0aW9uKTsNCiAgICAg
IH0NCiAgICB9DQogICAgZWxzZSB7DQogICAgICBjb25zdCBzaXplX3R5cGUg
X19vbGRfc2l6ZSA9IHNpemUoKTsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
X2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsNCiAg
ICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7
DQogICAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOw0K
ICAgICAgdHJ5IHsNCiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFs
aXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zaXRpb24sIF9fbmV3
X3N0YXJ0KTsNCiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXpl
ZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsNCiAgICAg
ICAgX19uZXdfZmluaXNoDQogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2Nv
cHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwgX19uZXdfZmlu
aXNoKTsNCiAgICAgIH0NCiAgICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShf
X25ld19zdGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRlKF9fbmV3
X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsNCg0KICAgICAgZGVz
dHJveShfTV9zdGFydCwgX01fZmluaXNoKTsNCiAgICAgIF9NX2RlYWxsb2Nh
dGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOw0K
ICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7DQogICAgICBf
TV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOw0KICAgICAgX01fZW5k
X29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsNCiAg
ICB9DQogIH0NCn0NCg0KfQ0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMNCiMgMSAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0
b3IuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYnZlY3Rvci5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7
DQoNCnN0YXRpYyBjb25zdCBpbnQgX19XT1JEX0JJVCA9IGludCg4KnNpemVv
Zih1bnNpZ25lZCBpbnQpKTsNCg0Kc3RydWN0IF9CaXRfcmVmZXJlbmNlIHsN
CiAgdW5zaWduZWQgaW50KiBfTV9wOw0KICB1bnNpZ25lZCBpbnQgX01fbWFz
azsNCiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2ln
bmVkIGludCBfX3kpDQogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7
fQ0KDQpwdWJsaWM6DQogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBf
TV9tYXNrKDApIHt9DQogIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biAhKCEoKl9NX3AgJiBfTV9tYXNrKSk7IH0NCiAgX0JpdF9yZWZlcmVuY2Um
IG9wZXJhdG9yPShib29sIF9feCkNCiAgew0KICAgIGlmIChfX3gpICpfTV9w
IHw9IF9NX21hc2s7DQogICAgZWxzZSAqX01fcCAmPSB+X01fbWFzazsNCiAg
ICByZXR1cm4gKnRoaXM7DQogIH0NCiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJh
dG9yPShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KQ0KICAgIHsgcmV0dXJu
ICp0aGlzID0gYm9vbChfX3gpOyB9DQogIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdA0KICAgIHsgcmV0dXJuIGJv
b2woKnRoaXMpID09IGJvb2woX194KTsgfQ0KICBib29sIG9wZXJhdG9yPChj
b25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdCB7DQogICAgcmV0dXJu
ICFib29sKCp0aGlzKSAmJiBib29sKF9feCk7DQogIH0NCiAgdm9pZCBmbGlw
KCkgeyAqX01fcCBePSBfTV9tYXNrOyB9DQp9Ow0KDQppbmxpbmUgdm9pZCBz
d2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQ0K
ew0KICBib29sIF9fdG1wID0gX194Ow0KICBfX3ggPSBfX3k7DQogIF9feSA9
IF9fdG1wOw0KfQ0KDQpzdHJ1Y3QgX0JpdF9pdGVyYXRvcl9iYXNlIDogcHVi
bGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90Pg0K
ew0KICB1bnNpZ25lZCBpbnQqIF9NX3A7DQogIHVuc2lnbmVkIGludCBfTV9v
ZmZzZXQ7DQoNCiAgX0JpdF9pdGVyYXRvcl9iYXNlKHVuc2lnbmVkIGludCog
X194LCB1bnNpZ25lZCBpbnQgX195KQ0KICAgIDogX01fcChfX3gpLCBfTV9v
ZmZzZXQoX195KSB7fQ0KDQogIHZvaWQgX01fYnVtcF91cCgpIHsNCiAgICBp
ZiAoX01fb2Zmc2V0KysgPT0gX19XT1JEX0JJVCAtIDEpIHsNCiAgICAgIF9N
X29mZnNldCA9IDA7DQogICAgICArK19NX3A7DQogICAgfQ0KICB9DQogIHZv
aWQgX01fYnVtcF9kb3duKCkgew0KICAgIGlmIChfTV9vZmZzZXQtLSA9PSAw
KSB7DQogICAgICBfTV9vZmZzZXQgPSBfX1dPUkRfQklUIC0gMTsNCiAgICAg
IC0tX01fcDsNCiAgICB9DQogIH0NCg0KICB2b2lkIF9NX2luY3IocHRyZGlm
Zl90IF9faSkgew0KICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBf
TV9vZmZzZXQ7DQogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOw0KICAg
IF9fbiA9IF9fbiAlIF9fV09SRF9CSVQ7DQogICAgaWYgKF9fbiA8IDApIHsN
CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09S
RF9CSVQ7DQogICAgICAtLV9NX3A7DQogICAgfSBlbHNlDQogICAgICBfTV9v
ZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247DQogIH0NCg0KICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0
IHsNCiAgICByZXR1cm4gX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQg
PT0gX19pLl9NX29mZnNldDsNCiAgfQ0KICBib29sIG9wZXJhdG9yPChjb25z
dCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3Qgew0KICAgIHJldHVy
biBfTV9wIDwgX19pLl9NX3AgfHwgKF9NX3AgPT0gX19pLl9NX3AgJiYgX01f
b2Zmc2V0IDwgX19pLl9NX29mZnNldCk7DQogIH0NCiAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7DQog
ICAgcmV0dXJuICEoKnRoaXMgPT0gX19pKTsNCiAgfQ0KICBib29sIG9wZXJh
dG9yPihjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3Qgew0K
ICAgIHJldHVybiBfX2kgPCAqdGhpczsNCiAgfQ0KICBib29sIG9wZXJhdG9y
PD0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsNCiAg
ICByZXR1cm4gIShfX2kgPCAqdGhpcyk7DQogIH0NCiAgYm9vbCBvcGVyYXRv
cj49KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7DQog
ICAgcmV0dXJuICEoKnRoaXMgPCBfX2kpOw0KICB9DQp9Ow0KDQppbmxpbmUg
cHRyZGlmZl90DQpvcGVyYXRvci0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNl
JiBfX3gsIGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7DQogIHJl
dHVybiBfX1dPUkRfQklUICogKF9feC5fTV9wIC0gX195Ll9NX3ApICsgX194
Ll9NX29mZnNldCAtIF9feS5fTV9vZmZzZXQ7DQp9DQoNCg0Kc3RydWN0IF9C
aXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlDQp7DQog
IHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOw0KICB0eXBlZGVm
IF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOw0KICB0eXBlZGVmIF9CaXRfaXRl
cmF0b3IgaXRlcmF0b3I7DQoNCiAgX0JpdF9pdGVyYXRvcigpIDogX0JpdF9p
dGVyYXRvcl9iYXNlKDAsIDApIHt9DQogIF9CaXRfaXRlcmF0b3IodW5zaWdu
ZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpDQogICAgOiBfQml0X2l0
ZXJhdG9yX2Jhc2UoX194LCBfX3kpIHt9DQoNCiAgcmVmZXJlbmNlIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBf
TV9vZmZzZXQpOyB9DQogIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgew0KICAg
IF9NX2J1bXBfdXAoKTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgaXRl
cmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsNCiAgICBpdGVyYXRvciBfX3RtcCA9
ICp0aGlzOw0KICAgIF9NX2J1bXBfdXAoKTsNCiAgICByZXR1cm4gX190bXA7
DQogIH0NCiAgaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7DQogICAgX01fYnVt
cF9kb3duKCk7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGl0ZXJhdG9y
IG9wZXJhdG9yLS0oaW50KSB7DQogICAgaXRlcmF0b3IgX190bXAgPSAqdGhp
czsNCiAgICBfTV9idW1wX2Rvd24oKTsNCiAgICByZXR1cm4gX190bXA7DQog
IH0NCiAgaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9f
aSkgew0KICAgIF9NX2luY3IoX19pKTsNCiAgICByZXR1cm4gKnRoaXM7DQog
IH0NCiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9f
aSkgew0KICAgICp0aGlzICs9IC1fX2k7DQogICAgcmV0dXJuICp0aGlzOw0K
ICB9DQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19p
KSBjb25zdCB7DQogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsNCiAgICBy
ZXR1cm4gX190bXAgKz0gX19pOw0KICB9DQogIGl0ZXJhdG9yIG9wZXJhdG9y
LShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7DQogICAgaXRlcmF0b3Ig
X190bXAgPSAqdGhpczsNCiAgICByZXR1cm4gX190bXAgLT0gX19pOw0KICB9
DQoNCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9f
aSkgeyByZXR1cm4gKigqdGhpcyArIF9faSk7IH0NCn07DQoNCmlubGluZSBf
Qml0X2l0ZXJhdG9yDQpvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3Qg
X0JpdF9pdGVyYXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247IH0NCg0K
DQpzdHJ1Y3QgX0JpdF9jb25zdF9pdGVyYXRvciA6IHB1YmxpYyBfQml0X2l0
ZXJhdG9yX2Jhc2UNCnsNCiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsNCiAg
dHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsNCiAgdHlwZWRlZiBjb25z
dCBib29sKiBwb2ludGVyOw0KICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0
b3IgY29uc3RfaXRlcmF0b3I7DQoNCiAgX0JpdF9jb25zdF9pdGVyYXRvcigp
IDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9DQogIF9CaXRfY29uc3Rf
aXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kp
DQogICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194LCBfX3kpIHt9DQogIF9C
aXRfY29uc3RfaXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KQ0K
ICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zm
c2V0KSB7fQ0KDQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25z
dCB7DQogICAgcmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9N
X29mZnNldCk7DQogIH0NCiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKyso
KSB7DQogICAgX01fYnVtcF91cCgpOw0KICAgIHJldHVybiAqdGhpczsNCiAg
fQ0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgew0KICAgIGNv
bnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7DQogICAgX01fYnVtcF91cCgp
Ow0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBjb25zdF9pdGVyYXRvciYg
b3BlcmF0b3ItLSgpIHsNCiAgICBfTV9idW1wX2Rvd24oKTsNCiAgICByZXR1
cm4gKnRoaXM7DQogIH0NCiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShp
bnQpIHsNCiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0KICAg
IF9NX2J1bXBfZG93bigpOw0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBj
b25zdF9pdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19p
KSB7DQogICAgX01faW5jcihfX2kpOw0KICAgIHJldHVybiAqdGhpczsNCiAg
fQ0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5
cGUgX19pKSB7DQogICAgKnRoaXMgKz0gLV9faTsNCiAgICByZXR1cm4gKnRo
aXM7DQogIH0NCiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVu
Y2VfdHlwZSBfX2kpIGNvbnN0IHsNCiAgICBjb25zdF9pdGVyYXRvciBfX3Rt
cCA9ICp0aGlzOw0KICAgIHJldHVybiBfX3RtcCArPSBfX2k7DQogIH0NCiAg
Y29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kp
IGNvbnN0IHsNCiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0K
ICAgIHJldHVybiBfX3RtcCAtPSBfX2k7DQogIH0NCiAgY29uc3RfcmVmZXJl
bmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgew0KICAgIHJl
dHVybiAqKCp0aGlzICsgX19pKTsNCiAgfQ0KfTsNCg0KaW5saW5lIF9CaXRf
Y29uc3RfaXRlcmF0b3INCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25z
dCBfQml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9f
bjsgfQ0KDQoNCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3Is
IGJvb2wgX19pc19zdGF0aWM+DQpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNl
IHsNCnB1YmxpYzoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRz
PGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAg
IGFsbG9jYXRvcl90eXBlOw0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh
dG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0NCg0K
ICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf
X2EpDQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgp
LCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30NCg0KcHJv
dGVjdGVkOg0KICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3Qg
X19uKQ0KICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRl
KChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVCk7IH0NCiAgdm9p
ZCBfTV9kZWFsbG9jYXRlKCkgew0KICAgIGlmIChfTV9zdGFydC5fTV9wKQ0K
ICAgICAgX01fZGF0YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfTV9zdGFydC5f
TV9wLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9l
bmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOw0KICB9DQoNCiAgdHlw
ZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0b3I+
OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9y
Ow0KICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0Ow0KICBfQml0X2l0ZXJhdG9y
IF9NX2ZpbmlzaDsNCiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFn
ZTsNCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3I+DQpjbGFz
cyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsNCnB1
YmxpYzoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2ws
IF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAgIGFsbG9j
YXRvcl90eXBlOw0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkg
Y29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQ0KDQogIF9CdmVj
dG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQ0KICAgIDog
X01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDAp
IHt9DQoNCnByb3RlY3RlZDoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2Nf
dHJhaXRzPHVuc2lnbmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBl
DQogICAgICAgICAgX0FsbG9jX3R5cGU7DQoNCiAgdW5zaWduZWQgaW50KiBf
TV9iaXRfYWxsb2Moc2l6ZV90IF9fbikNCiAgICB7IHJldHVybiBfQWxsb2Nf
dHlwZTo6YWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRf
QklUKTsgfQ0KICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7DQogICAgaWYgKF9N
X3N0YXJ0Ll9NX3ApDQogICAgICBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShf
TV9zdGFydC5fTV9wLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsNCiAgfQ0KDQog
IF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7DQogIF9CaXRfaXRlcmF0b3IgX01f
ZmluaXNoOw0KICB1bnNpZ25lZCBpbnQqIF9NX2VuZF9vZl9zdG9yYWdlOw0K
fTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4NCmNsYXNzIF9CdmVjdG9y
X2Jhc2UNCiAgOiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2Ms
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0
czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+DQp7DQogIHR5cGVk
ZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46
Ol9TX2luc3RhbmNlbGVzcz4NCiAgICAgICAgICBfQmFzZTsNCnB1YmxpYzoN
CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxs
b2NhdG9yX3R5cGU7DQoNCiAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0
b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30NCiAgfl9CdmVjdG9yX2Jh
c2UoKSB7IF9CYXNlOjpfTV9kZWFsbG9jYXRlKCk7IH0NCn07DQoNCn0NCg0K
DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF92ZWN0b3IuaCIgMSAzDQojIDMxOCAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMiAzDQpuYW1l
c3BhY2Ugc3RkDQp7DQoNCnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxsb2M+DQog
IGNsYXNzIHZlY3Rvcjxib29sLCBfQWxsb2M+IDogcHVibGljIF9CdmVjdG9y
X2Jhc2U8X0FsbG9jPg0KICB7DQogIHB1YmxpYzoNCiAgICB0eXBlZGVmIGJv
b2wgdmFsdWVfdHlwZTsNCiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7
DQogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOw0KICAg
IHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOw0KICAgIHR5cGVk
ZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7DQogICAgdHlwZWRlZiBfQml0X3Jl
ZmVyZW5jZSogcG9pbnRlcjsNCiAgICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNv
bnN0X3BvaW50ZXI7DQoNCiAgICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRl
cmF0b3I7DQogICAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9yIGNvbnN0
X2l0ZXJhdG9yOw0KDQogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNv
bnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOw0KICAgIHR5
cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVy
YXRvcjsNCg0KICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxf
QWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsNCiAgICBh
bGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qgew0KICAgICAg
cmV0dXJuIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6Z2V0X2FsbG9jYXRvcigp
Ow0KICAgIH0NCg0KICBwcm90ZWN0ZWQ6DQogICAgdXNpbmcgX0J2ZWN0b3Jf
YmFzZTxfQWxsb2M+OjpfTV9iaXRfYWxsb2M7DQogICAgdXNpbmcgX0J2ZWN0
b3JfYmFzZTxfQWxsb2M+OjpfTV9kZWFsbG9jYXRlOw0KICAgIHVzaW5nIF9C
dmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fc3RhcnQ7DQogICAgdXNpbmcgX0J2
ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9maW5pc2g7DQogICAgdXNpbmcgX0J2
ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9lbmRfb2Zfc3RvcmFnZTsNCg0KICBw
cm90ZWN0ZWQ6DQogICAgdm9pZCBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBf
X24pIHsNCiAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9j
KF9fbik7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24g
KyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsNCiAgICAgIF9NX3N0YXJ0
ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICAgIF9NX2ZpbmlzaCA9IF9NX3N0
YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9fbik7DQogICAgfQ0KICAgIHZvaWQg
X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkg
ew0KICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9y
YWdlKSB7DQogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01f
ZmluaXNoLCBfTV9maW5pc2ggKyAxKTsNCiAgICAgICAgKl9fcG9zaXRpb24g
PSBfX3g7DQogICAgICAgICsrX01fZmluaXNoOw0KICAgICAgfQ0KICAgICAg
ZWxzZSB7DQogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSA/IDIg
KiBzaXplKCkgOiBfX1dPUkRfQklUOw0KICAgICAgICB1bnNpZ25lZCBpbnQq
IF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7DQogICAgICAgIGl0ZXJhdG9y
IF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19x
LCAwKSk7DQogICAgICAgICpfX2krKyA9IF9feDsNCiAgICAgICAgX01fZmlu
aXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsNCiAgICAgICAg
X01fZGVhbGxvY2F0ZSgpOw0KICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9
IF9fcSArIChfX2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOw0K
ICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7DQogICAgICB9
DQogICAgfQ0KDQogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
Pg0KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgew0KICAg
ICAgX01fc3RhcnQgPSBpdGVyYXRvcigpOw0KICAgICAgX01fZmluaXNoID0g
aXRlcmF0b3IoKTsNCiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsNCiAg
ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAg
ICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsNCiAgICB9DQoNCiAgICB0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2lu
aXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsNCiAgICAgIHNpemVfdHlw
ZSBfX24gPSAwOw0KICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf
X24pOw0KICAgICAgX01faW5pdGlhbGl6ZShfX24pOw0KICAgICAgY29weShf
X2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsNCiAgICB9DQoNCiAgICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogICAgdm9pZCBfTV9pbnNl
cnRfcmFuZ2UoaXRlcmF0b3IgX19wb3MsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh
dG9yX3RhZykgew0KICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KSB7DQogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAq
X19maXJzdCk7DQogICAgICAgICsrX19wb3M7DQogICAgICB9DQogICAgfQ0K
DQogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQogICAg
dm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmly
c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7DQogICAgICBpZiAo
X19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9
IDA7DQogICAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsN
CiAgICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7DQog
ICAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01f
ZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOw0KICAgICAgICAgIGNv
cHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsNCiAgICAgICAgICBf
TV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7DQogICAgICAgIH0N
CiAgICAgICAgZWxzZSB7DQogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0g
c2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsNCiAgICAgICAgICB1bnNpZ25l
ZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7DQogICAgICAgICAg
aXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVy
YXRvcihfX3EsIDApKTsNCiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3Qs
IF9fbGFzdCwgX19pKTsNCiAgICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9f
cG9zaXRpb24sIGVuZCgpLCBfX2kpOw0KICAgICAgICAgIF9NX2RlYWxsb2Nh
dGUoKTsNCiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChf
X2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOw0KICAgICAgICAg
IF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICAgICAgfQ0KICAg
ICAgfQ0KICAgIH0NCg0KICBwdWJsaWM6DQogICAgaXRlcmF0b3IgYmVnaW4o
KSB7IHJldHVybiBfTV9zdGFydDsgfQ0KICAgIGNvbnN0X2l0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0NCiAgICBpdGVyYXRv
ciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7IH0NCiAgICBjb25zdF9pdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0NCg0KICAg
IHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9p
dGVyYXRvcihlbmQoKSk7IH0NCiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
IHJiZWdpbigpIGNvbnN0IHsNCiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yKGVuZCgpKTsNCiAgICB9DQogICAgcmV2ZXJzZV9pdGVyYXRv
ciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsg
fQ0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsN
CiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkp
Ow0KICAgIH0NCg0KICAgIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1
cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0NCiAgICBzaXplX3R5
cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9
DQogICAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3Qgew0KICAgICAgcmV0
dXJuIHNpemVfdHlwZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFn
ZSwgMCkgLSBiZWdpbigpKTsNCiAgICB9DQogICAgYm9vbCBlbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0NCg0KICAgIHJlZmVy
ZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pDQogICAgICB7IHJldHVy
biAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0NCiAgICBj
b25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25z
dA0KICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBl
KF9fbikpOyB9DQoNCiAgICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlw
ZSBfX24pIGNvbnN0IHsNCiAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgp
KQ0KICAgICAgICBfX3Rocm93X3JhbmdlX2Vycm9yKCJ2ZWN0b3I8Ym9vbD4i
KTsNCiAgICB9DQoNCiAgICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikN
CiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylb
X19uXTsgfQ0KICAgIGNvbnN0X3JlZmVyZW5jZSBhdChzaXplX3R5cGUgX19u
KSBjb25zdA0KICAgICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4g
KCp0aGlzKVtfX25dOyB9DQoNCiAgICBleHBsaWNpdCB2ZWN0b3IoY29uc3Qg
YWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpDQogICAg
ICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpIHt9DQoNCiAgICB2ZWN0
b3Ioc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLA0KICAgICAgICAgICAg
ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo
KSkNCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkNCiAgICB7
DQogICAgICBfTV9pbml0aWFsaXplKF9fbik7DQogICAgICBmaWxsKF9NX3N0
YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAw
KTsNCiAgICB9DQoNCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9f
bikNCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KGFsbG9jYXRvcl90
eXBlKCkpDQogICAgew0KICAgICAgX01faW5pdGlhbGl6ZShfX24pOw0KICAg
ICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgMCk7
DQogICAgfQ0KDQogICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KSA6IF9C
dmVjdG9yX2Jhc2U8X0FsbG9jPihfX3guZ2V0X2FsbG9jYXRvcigpKSB7DQog
ICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOw0KICAgICAgY29weShf
X3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7DQogICAgfQ0KDQoN
Cg0KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4NCiAgICB2b2lkIF9N
X2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBf
X3gsIF9fdHJ1ZV90eXBlKSB7DQogICAgICBfTV9pbml0aWFsaXplKF9fbik7
DQogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdl
LCBfX3ggPyB+MCA6IDApOw0KICAgIH0NCg0KICAgIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlz
cGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Zh
bHNlX3R5cGUpIHsNCiAgICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX19maXJz
dCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAg
ICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQog
ICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCwNCiAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkNCiAgICAgIDogX0J2ZWN0b3Jf
YmFzZTxfQWxsb2M+KF9fYSkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9J
bnRlZ3JhbDsNCiAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJz
dCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7DQogICAgfQ0KDQogICAgfnZlY3Rv
cigpIHsgfQ0KDQogICAgdmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgdmVjdG9y
JiBfX3gpIHsNCiAgICAgIGlmICgmX194ID09IHRoaXMpIHJldHVybiAqdGhp
czsNCiAgICAgIGlmIChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgew0KICAg
ICAgICBfTV9kZWFsbG9jYXRlKCk7DQogICAgICAgIF9NX2luaXRpYWxpemUo
X194LnNpemUoKSk7DQogICAgICB9DQogICAgICBjb3B5KF9feC5iZWdpbigp
LCBfX3guZW5kKCksIGJlZ2luKCkpOw0KICAgICAgX01fZmluaXNoID0gYmVn
aW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX3guc2l6ZSgpKTsNCiAgICAgIHJl
dHVybiAqdGhpczsNCiAgICB9DQoNCg0KDQoNCg0KDQogICAgdm9pZCBfTV9m
aWxsX2Fzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgew0KICAgICAgaWYg
KF9fbiA+IHNpemUoKSkgew0KICAgICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3As
IF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOw0KICAgICAgICBp
bnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX194KTsNCiAgICAgIH0NCiAg
ICAgIGVsc2Ugew0KICAgICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQo
KSk7DQogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0
b3JhZ2UsIF9feCA/IH4wIDogMCk7DQogICAgICB9DQogICAgfQ0KDQogICAg
dm9pZCBhc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsgX01fZmlsbF9h
c3NpZ24oX19uLCBfX3gpOyB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+DQogICAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7DQogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0lu
dGVncmFsIF9JbnRlZ3JhbDsNCiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChf
X2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsNCiAgICB9DQoNCiAgICB0
ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+DQogICAgdm9pZCBfTV9hc3NpZ25f
ZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVl
X3R5cGUpDQogICAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3QpIF9fbiwg
KGJvb2wpIF9fdmFsKTsgfQ0KDQogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXI+DQogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQ0K
ICAgICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVy
YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0NCg0KICAgIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LA0KICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp
IHsNCiAgICAgIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsNCiAgICAgIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsr
X19jdXIsICsrX19maXJzdCkNCiAgICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7
DQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgIGVyYXNl
KF9fY3VyLCBlbmQoKSk7DQogICAgICBlbHNlDQogICAgICAgIGluc2VydChl
bmQoKSwgX19maXJzdCwgX19sYXN0KTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2Fzc2ln
bl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh
dG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9p
dGVyYXRvcl90YWcpIHsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7DQog
ICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsNCiAgICAg
IGlmIChfX2xlbiA8IHNpemUoKSkNCiAgICAgICAgZXJhc2UoY29weShfX2Zp
cnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBlbmQoKSk7DQogICAgICBlbHNlIHsN
CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7DQog
ICAgICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7DQogICAgICAgIGNvcHko
X19maXJzdCwgX19taWQsIGJlZ2luKCkpOw0KICAgICAgICBpbnNlcnQoZW5k
KCksIF9fbWlkLCBfX2xhc3QpOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIHZv
aWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7DQogICAgICBpZiAoY2FwYWNp
dHkoKSA8IF9fbikgew0KICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9N
X2JpdF9hbGxvYyhfX24pOw0KICAgICAgICBfTV9maW5pc2ggPSBjb3B5KGJl
Z2luKCksIGVuZCgpLCBpdGVyYXRvcihfX3EsIDApKTsNCiAgICAgICAgX01f
ZGVhbGxvY2F0ZSgpOw0KICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9f
cSwgMCk7DQogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9f
biArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOw0KICAgICAgfQ0KICAg
IH0NCg0KICAgIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigp
OyB9DQogICAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1
cm4gKmJlZ2luKCk7IH0NCiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJu
ICooZW5kKCkgLSAxKTsgfQ0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkg
Y29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9DQogICAgdm9pZCBwdXNo
X2JhY2soYm9vbCBfX3gpIHsNCiAgICAgIGlmIChfTV9maW5pc2guX01fcCAh
PSBfTV9lbmRfb2Zfc3RvcmFnZSkNCiAgICAgICAgKl9NX2ZpbmlzaCsrID0g
X194Ow0KICAgICAgZWxzZQ0KICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgp
LCBfX3gpOw0KICAgIH0NCiAgICB2b2lkIHN3YXAodmVjdG9yPGJvb2wsIF9B
bGxvYz4mIF9feCkgew0KICAgICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3gu
X01fc3RhcnQpOw0KICAgICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9N
X2ZpbmlzaCk7DQogICAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2Us
IF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7DQogICAgfQ0KICAgIGl0ZXJhdG9y
IGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJvb2wo
KSkgew0KICAgICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9fcG9zaXRpb24g
LSBiZWdpbigpOw0KICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2Vu
ZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpDQogICAgICAg
ICpfTV9maW5pc2grKyA9IF9feDsNCiAgICAgIGVsc2UNCiAgICAgICAgX01f
aW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gpOw0KICAgICAgcmV0dXJuIGJl
Z2luKCkgKyBfX247DQogICAgfQ0KDQoNCg0KICAgIHRlbXBsYXRlIDxjbGFz
cyBfSW50ZWdlcj4NCiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVy
YXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsNCiAgICAg
IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7DQogICAgfQ0KDQog
ICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgIHZvaWQg
X01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2ZhbHNlX3R5cGUpIHsNCiAgICAgIF9NX2luc2VydF9yYW5nZShf
X3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f
Zmlyc3QpKTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+DQogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv
biwNCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QpIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0lu
dGVncmFsOw0KICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24s
IF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOw0KICAgIH0NCg0KICAg
IHZvaWQgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6
ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsNCiAgICAgIGlmIChfX24gPT0gMCkg
cmV0dXJuOw0KICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19u
KSB7DQogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCks
IF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsNCiAgICAgICAg
ZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBl
KF9fbiksIF9feCk7DQogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNl
X3R5cGUoX19uKTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICBz
aXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOw0K
ICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xl
bik7DQogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19w
b3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7DQogICAgICAgIGZpbGxfbihf
X2ksIF9fbiwgX194KTsNCiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bv
c2l0aW9uLCBlbmQoKSwgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOw0K
ICAgICAgICBfTV9kZWFsbG9jYXRlKCk7DQogICAgICAgIF9NX2VuZF9vZl9z
dG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09S
RF9CSVQ7DQogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsN
CiAgICAgIH0NCiAgICB9DQoNCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBf
X3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgew0KICAgICAg
X01fZmlsbF9pbnNlcnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOw0KICAgIH0N
Cg0KICAgIHZvaWQgcG9wX2JhY2soKSB7IC0tX01fZmluaXNoOyB9DQogICAg
aXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgew0KICAgICAg
aWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQ0KICAgICAgICBjb3B5KF9f
cG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7DQogICAgICAgIC0t
X01fZmluaXNoOw0KICAgICAgcmV0dXJuIF9fcG9zaXRpb247DQogICAgfQ0K
ICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9y
IF9fbGFzdCkgew0KICAgICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVu
ZCgpLCBfX2ZpcnN0KTsNCiAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIH0N
CiAgICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBf
X3ggPSBib29sKCkpIHsNCiAgICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgp
KQ0KICAgICAgICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9f
bmV3X3NpemUpLCBlbmQoKSk7DQogICAgICBlbHNlDQogICAgICAgIGluc2Vy
dChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsNCiAgICB9DQog
ICAgdm9pZCBmbGlwKCkgew0KICAgICAgZm9yICh1bnNpZ25lZCBpbnQqIF9f
cCA9IF9NX3N0YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZTsg
KytfX3ApDQogICAgICAgICpfX3AgPSB+Kl9fcDsNCiAgICB9DQoNCiAgICB2
b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0NCiAgfTsN
Cg0KDQp0eXBlZGVmIHZlY3Rvcjxib29sLCBhbGxvYz4gYml0X3ZlY3RvcjsN
Cg0KfQ0KIyAzOSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMNCiMgNDQgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAy
IDMNCg0KDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9GYWNldD4NCiAgICBsb2NhbGUNCiAgICBsb2NhbGU6OmNvbWJpbmUoY29u
c3QgbG9jYWxlJiBfX290aGVyKQ0KICAgIHsNCiAgICAgIGxvY2FsZSBfX2Nv
cHkoKnRoaXMpOw0KICAgICAgX19jb3B5Ll9NX2ltcGwtPl9NX3JlcGxhY2Vf
ZmFjZXQoX19vdGhlci5fTV9pbXBsLCAmX0ZhY2V0OjppZCk7DQogICAgICBy
ZXR1cm4gX19jb3B5Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAg
ICBib29sDQogICAgbG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsDQogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0DQogICAgew0KICAgICAgdHlw
ZWRlZiBzdGQ6OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsNCiAg
ICAgIGNvbnN0IF9fY29sbGF0ZV90eXBlKiBfX2Zjb2xsID0gJnVzZV9mYWNl
dDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOw0KICAgICAgcmV0dXJuIChfX2Zj
b2xsLT5jb21wYXJlKF9fczEuZGF0YSgpLCBfX3MxLmRhdGEoKSArIF9fczEu
bGVuZ3RoKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19z
Mi5kYXRhKCksIF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsN
CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgIGNv
bnN0IF9GYWNldCYNCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xv
YykNCiAgICB7DQogICAgICB0eXBlZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVj
X2ZhY2V0IF9fdmVjX2ZhY2V0Ow0KICAgICAgc2l6ZV90IF9faSA9IF9GYWNl
dDo6aWQuX01faW5kZXg7DQogICAgICBfX3ZlY19mYWNldCogX19mYWNldCA9
IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsNCiAgICAgIGNvbnN0IGxvY2Fs
ZTo6ZmFjZXQqIF9fZnAgPSAoKl9fZmFjZXQpW19faV07DQogICAgICBpZiAo
X19mcCA9PSAwIHx8IF9faSA+PSBfX2ZhY2V0LT5zaXplKCkpDQogICAgICAg
IF9fdGhyb3dfYmFkX2Nhc3QoKTsNCiAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBfRmFjZXQmPigqX19mcCk7DQogICAgfQ0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9GYWNldD4NCiAgICBib29sDQogICAgaGFzX2ZhY2V0KGNv
bnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCkNCiAgICB7DQogICAgICB0eXBl
ZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9fdmVjX2ZhY2V0Ow0K
ICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01faW5kZXg7DQogICAg
ICBfX3ZlY19mYWNldCogX19mYWNldCA9IF9fbG9jLl9NX2ltcGwtPl9NX2Zh
Y2V0czsNCiAgICAgIHJldHVybiAoX19pIDwgX19mYWNldC0+c2l6ZSgpICYm
ICgqX19mYWNldClbX19pXSAhPSAwKTsNCiAgICB9DQoNCg0KDQoNCg0KDQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX0NoYXJU
Pg0KICAgIF9Jbkl0ZXINCiAgICBfX21hdGNoX3BhcmFsbGVsKF9Jbkl0ZXIg
X19zLCBfSW5JdGVyIF9fZW5kLCBpbnQgX19udGFyZ3MsDQogICAgICAgICAg
ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiogX190YXJn
ZXRzLA0KICAgICAgICAgICAgICAgICAgICAgaW50KiBfX21hdGNoZXMsIGlu
dCYgX19yZW1haW4sIGJvb2wmIF9fZW9mKQ0KICAgIHsNCiAgICAgIHR5cGVk
ZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsNCiAgICAg
IF9fZW9mID0gZmFsc2U7DQogICAgICBmb3IgKGludCBfX3RpID0gMDsgX190
aSA8IF9fbnRhcmdzOyArK19fdGkpDQogICAgICAgIF9fbWF0Y2hlc1tfX3Rp
XSA9IF9fdGk7DQogICAgICBfX3JlbWFpbiA9IF9fbnRhcmdzOw0KICAgICAg
c2l6ZV90IF9fcG9zID0gMDsNCiAgICAgIGRvDQogICAgICAgIHsNCiAgICAg
ICAgICBpbnQgX190aSA9IDA7DQogICAgICAgICAgd2hpbGUgKF9fdGkgPCBf
X3JlbWFpbiAmJiBfX3BvcyA9PSBfX3RhcmdldHNbX19tYXRjaGVzW19fdGld
XS5zaXplKCkpDQogICAgICAgICAgICArK19fdGk7DQogICAgICAgICAgaWYg
KF9fdGkgPT0gX19yZW1haW4pDQogICAgICAgICAgICB7DQogICAgICAgICAg
ICAgIGlmIChfX3BvcyA9PSAwKSBfX3JlbWFpbiA9IDA7DQogICAgICAgICAg
ICAgIHJldHVybiBfX3M7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYg
KF9fcyA9PSBfX2VuZCkNCiAgICAgICAgICAgIF9fZW9mID0gdHJ1ZTsNCiAg
ICAgICAgICBib29sIF9fbWF0Y2hlZCA9IGZhbHNlOw0KICAgICAgICAgIGZv
ciAoaW50IF9fdGkyID0gMDsgX190aTIgPCBfX3JlbWFpbjsgKQ0KICAgICAg
ICAgICAgew0KICAgICAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlJiBf
X3RhcmdldCA9IF9fdGFyZ2V0c1tfX21hdGNoZXNbX190aTJdXTsNCiAgICAg
ICAgICAgICAgaWYgKF9fcG9zIDwgX190YXJnZXQuc2l6ZSgpKQ0KICAgICAg
ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIGlmIChfX2VvZiB8fCBf
X3RhcmdldFtfX3Bvc10gIT0gKl9fcykNCiAgICAgICAgICAgICAgICAgICAg
ew0KICAgICAgICAgICAgICAgICAgICAgIF9fbWF0Y2hlc1tfX3RpMl0gPSBf
X21hdGNoZXNbLS1fX3JlbWFpbl07DQogICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg
ICAgICAgIF9fbWF0Y2hlZCA9IHRydWU7DQogICAgICAgICAgICAgICAgfQ0K
ICAgICAgICAgICAgICArK19fdGkyOw0KICAgICAgICAgICAgfQ0KICAgICAg
ICAgIGlmIChfX21hdGNoZWQpDQogICAgICAgICAgICB7DQogICAgICAgICAg
ICAgICsrX19zOw0KICAgICAgICAgICAgICArK19fcG9zOw0KICAgICAgICAg
ICAgfQ0KICAgICAgICAgIGZvciAoaW50IF9fdGkzID0gMDsgX190aTMgPCBf
X3JlbWFpbjspDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChf
X3BvcyA+IF9fdGFyZ2V0c1tfX21hdGNoZXNbX190aTNdXS5zaXplKCkpDQog
ICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgX19tYXRjaGVz
W19fdGkzXSA9IF9fbWF0Y2hlc1stLV9fcmVtYWluXTsNCiAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg
ICAgICAgKytfX3RpMzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAg
ICAgd2hpbGUgKF9fcmVtYWluKTsNCiAgICAgIHJldHVybiBfX3M7DQogICAg
fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfRm9ybWF0
X2NhY2hlPF9DaGFyVD46Ol9Gb3JtYXRfY2FjaGUoKQ0KICAgIDogX01fdmFs
aWQodHJ1ZSksIF9NX3VzZV9ncm91cGluZyhmYWxzZSkNCiAgICB7IH0NCg0K
ICB0ZW1wbGF0ZTw+DQogICAgX0Zvcm1hdF9jYWNoZTxjaGFyPjo6X0Zvcm1h
dF9jYWNoZSgpOw0KDQogIHRlbXBsYXRlPD4NCiAgICBfRm9ybWF0X2NhY2hl
PHdjaGFyX3Q+OjpfRm9ybWF0X2NhY2hlKCk7DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPg0KICAgIHZvaWQNCiAgICBfRm9ybWF0X2NhY2hlPF9D
aGFyVD46Ol9NX3BvcHVsYXRlKGlvc19iYXNlJiBfX2lvKQ0KICAgIHsNCiAg
ICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jICgpOw0KICAgICAgbnVt
cHVuY3Q8X0NoYXJUPiBjb25zdCYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5j
dDxfQ2hhclQ+ID4oX19sb2MpOw0KICAgICAgX01fdHJ1ZW5hbWUgPSBfX25w
LnRydWVuYW1lKCk7DQogICAgICBfTV9mYWxzZW5hbWUgPSBfX25wLmZhbHNl
bmFtZSgpOw0KICAgICAgX01fdGhvdXNhbmRzX3NlcCA9IF9fbnAudGhvdXNh
bmRzX3NlcCgpOw0KICAgICAgX01fZGVjaW1hbF9wb2ludCA9IF9fbnAuZGVj
aW1hbF9wb2ludCgpOw0KICAgICAgX01fZ3JvdXBpbmcgPSBfX25wLmdyb3Vw
aW5nKCk7DQogICAgICBfTV91c2VfZ3JvdXBpbmcgPSBfTV9ncm91cGluZy5z
aXplKCkgIT0gMCAmJiBfTV9ncm91cGluZy5kYXRhKClbMF0gIT0gMDsNCiAg
ICAgIF9NX3ZhbGlkID0gdHJ1ZTsNCiAgICB9DQoNCg0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4NCiAgICB2b2lkDQogICAgX0Zvcm1hdF9jYWNo
ZTxfQ2hhclQ+OjoNCiAgICBfU19jYWxsYmFjayhpb3NfYmFzZTo6ZXZlbnQg
X19ldiwgaW9zX2Jhc2UmIF9faW9zLCBpbnQgX19peCkgdGhyb3coKQ0KICAg
IHsNCiAgICAgIHZvaWQqJiBfX3AgPSBfX2lvcy5wd29yZChfX2l4KTsNCiAg
ICAgIHN3aXRjaCAoX19ldikNCiAgICAgICAgew0KICAgICAgICBjYXNlIGlv
c19iYXNlOjplcmFzZV9ldmVudDoNCiAgICAgICAgICBkZWxldGUgc3RhdGlj
X2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKTsNCiAgICAgICAg
ICBfX3AgPSAwOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIGlv
c19iYXNlOjpjb3B5Zm10X2V2ZW50Og0KDQogICAgICAgICAgdHJ5DQogICAg
ICAgICAgICB7IF9fcCA9IG5ldyBfRm9ybWF0X2NhY2hlPF9DaGFyVD47IH0N
CiAgICAgICAgICBjYXRjaCguLi4pDQogICAgICAgICAgICB7IH0NCiAgICAg
ICAgICBicmVhazsNCiAgICAgICAgY2FzZSBpb3NfYmFzZTo6aW1idWVfZXZl
bnQ6DQogICAgICAgICAgc3RhdGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hh
clQ+Kj4oX19wKS0+X01fdmFsaWQgPSBmYWxzZTsNCiAgICAgICAgICBicmVh
azsNCiAgICAgICAgfQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+DQogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kg0KICAgIF9Gb3Jt
YXRfY2FjaGU8X0NoYXJUPjo6X1NfZ2V0KGlvc19iYXNlJiBfX2lvcykNCiAg
ICB7DQogICAgICBpZiAoIV9TX3B3b3JkX2l4KQ0KICAgICAgICBfU19wd29y
ZF9peCA9IGlvc19iYXNlOjp4YWxsb2MoKTsNCiAgICAgIHZvaWQqJiBfX3Ag
PSBfX2lvcy5wd29yZChfU19wd29yZF9peCk7DQoNCg0KICAgICAgaWYgKF9f
cCA9PSAwKQ0KICAgICAgICB7DQogICAgICAgICAgYXV0b19wdHI8X0Zvcm1h
dF9jYWNoZTxfQ2hhclQ+ID4gX19hcChuZXcgX0Zvcm1hdF9jYWNoZTxfQ2hh
clQ+KTsNCiAgICAgICAgICBfX2lvcy5yZWdpc3Rlcl9jYWxsYmFjaygmX0Zv
cm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19jYWxsYmFjaywNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfU19wd29yZF9peCk7DQogICAgICAg
ICAgX19wID0gX19hcC5yZWxlYXNlKCk7DQogICAgICAgIH0NCiAgICAgIF9G
b3JtYXRfY2FjaGU8X0NoYXJUPiogX19uY3AgPSBzdGF0aWNfY2FzdDxfRm9y
bWF0X2NhY2hlPF9DaGFyVD4qPihfX3ApOw0KICAgICAgaWYgKCFfX25jcC0+
X01fdmFsaWQpDQogICAgICAgIF9fbmNwLT5fTV9wb3B1bGF0ZShfX2lvcyk7
DQoNCiAgICAgIHJldHVybiBfX25jcDsNCiAgICB9DQojIDI1MCAiL2hvbWUv
bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0
cy50Y2MiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPg0KICAgIHZvaWQNCiAgICBudW1fZ2V0PF9DaGFyVCwgX0lu
SXRlcj46Og0KICAgIF9NX2V4dHJhY3QoX0luSXRlciAsIF9Jbkl0ZXIgLCBp
b3NfYmFzZSYgLA0KICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
ICwgY2hhciogLA0KICAgICAgICAgICAgICAgaW50JiAsIGJvb2wgKSBjb25z
dA0KICAgIHsNCg0KICAgIH0NCg0KICB0ZW1wbGF0ZTw+DQogICAgdm9pZA0K
ICAgIG51bV9nZXQ8Y2hhciwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+
OjoNCiAgICBfTV9leHRyYWN0KGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4g
X19iZWcsDQogICAgICAgICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNo
YXI+IF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLCBpbnQmIF9f
YmFzZSwNCiAgICAgICAgICAgICAgIGJvb2wgX19mcCkgY29uc3Q7DQoNCg0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
cj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QNCiAgICB7DQoNCiAgICAg
IGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxwaGEpKQ0K
ICAgICAgICB7DQoNCg0KDQoNCg0KDQogICAgICAgICAgY2hhciBfX3h0cmNb
MzJdID0geydcMCd9Ow0KICAgICAgICAgIGludCBfX2Jhc2U7DQogICAgICAg
ICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0
cmMsIF9fYmFzZSwgZmFsc2UpOw0KDQoNCiAgICAgICAgICBjaGFyKiBfX3Nh
bml0eTsNCiAgICAgICAgICAoKihfX19lcnJubygpKSkgPSAwOw0KICAgICAg
ICAgIGxvbmcgX19sID0gc3RydG9sKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jh
c2UpOw0KICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxi
aXQpDQogICAgICAgICAgICAgICYmIF9fbCA8PSAxDQogICAgICAgICAgICAg
ICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAm
JiAoKihfX19lcnJubygpKSkgPT0gMCkNCiAgICAgICAgICAgIF9fdiA9IF9f
bDsNCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICBfX2VyciB8PSBpb3Nf
YmFzZTo6ZmFpbGJpdDsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGVsc2UNCiAg
ICAgICAgew0KICAgICAgICAgIHR5cGVkZWYgX0Zvcm1hdF9jYWNoZTxjaGFy
X3R5cGU+IF9fZmNhY2hlX3R5cGU7DQogICAgICAgICAgX19mY2FjaGVfdHlw
ZSogX19mbXQgPSBfX2ZjYWNoZV90eXBlOjpfU19nZXQoX19pbyk7DQogICAg
ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RydWUgPSBfX2ZtdC0+X01fdHJ1
ZW5hbWUuY19zdHIoKTsNCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f
ZmFsc2UgPSBfX2ZtdC0+X01fZmFsc2VuYW1lLmNfc3RyKCk7DQogICAgICAg
ICAgY29uc3Qgc2l6ZV90IF9fdHJ1ZWxlbiA9IF9fdHJhaXRzX3R5cGU6Omxl
bmd0aChfX3RydWUpIC0gMTsNCiAgICAgICAgICBjb25zdCBzaXplX3QgX19m
YWxzZWxlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX2ZhbHNlKSAtIDE7
DQoNCiAgICAgICAgICBmb3IgKHNpemVfdCBfX3BvcyA9IDA7IF9fYmVnICE9
IF9fZW5kOyArK19fcG9zKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
ICBjaGFyX3R5cGUgX19jID0gKl9fYmVnKys7DQogICAgICAgICAgICAgIGJv
b2wgX190ZXN0ZiA9IF9fYyA9PSBfX2ZhbHNlW19fcG9zXTsNCiAgICAgICAg
ICAgICAgYm9vbCBfX3Rlc3R0ID0gX19jID09IF9fdHJ1ZVtfX3Bvc107DQog
ICAgICAgICAgICAgIGlmICghKF9fdGVzdGYgfHwgX190ZXN0dCkpDQogICAg
ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9z
X2Jhc2U6OmZhaWxiaXQ7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAg
ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVz
dGYgJiYgX19wb3MgPT0gX19mYWxzZWxlbikNCiAgICAgICAgICAgICAgICB7
DQogICAgICAgICAgICAgICAgICBfX3YgPSAwOw0KICAgICAgICAgICAgICAg
ICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBl
bHNlIGlmIChfX3Rlc3R0ICYmIF9fcG9zID09IF9fdHJ1ZWxlbikNCiAgICAg
ICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBfX3YgPSAxOw0KICAg
ICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgfQ0KICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAg
ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7DQogICAgICAg
IH0NCg0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KDQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAg
IF9Jbkl0ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAg
IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2Vyciwgc2hvcnQmIF9fdikgY29uc3QNCiAgICB7DQoNCg0KDQogICAgICBj
aGFyIF9feHRyY1szMl09IHsnXDAnfTsNCiAgICAgIGludCBfX2Jhc2U7DQog
ICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
eHRyYywgX19iYXNlLCBmYWxzZSk7DQoNCg0KICAgICAgY2hhciogX19zYW5p
dHk7DQogICAgICAoKihfX19lcnJubygpKSkgPSAwOw0KICAgICAgbG9uZyBf
X2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7DQogICAg
ICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQ0KICAgICAgICAg
ICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAm
JiAoKihfX19lcnJubygpKSkgPT0gMA0KICAgICAgICAgICYmIF9fbCA+PSAo
LTMyNzY3LTEpICYmIF9fbCA8PSAzMjc2NykNCiAgICAgICAgX192ID0gc3Rh
dGljX2Nhc3Q8c2hvcnQ+KF9fbCk7DQogICAgICBlbHNlDQogICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KDQogICAgICByZXR1cm4gX19i
ZWc7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp
dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGludCYgX192KSBjb25zdA0KICAg
IHsNCg0KDQoNCiAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsNCiAg
ICAgIGludCBfX2Jhc2U7DQogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7DQoNCg0K
ICAgICAgY2hhciogX19zYW5pdHk7DQogICAgICAoKihfX19lcnJubygpKSkg
PSAwOw0KICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5p
dHksIF9fYmFzZSk7DQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpm
YWlsYml0KQ0KICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAq
X19zYW5pdHkgPT0gJ1wwJyAmJiAoKihfX19lcnJubygpKSkgPT0gMA0KICAg
ICAgICAgICYmIF9fbCA+PSAoLTIxNDc0ODM2NDcgLTEpICYmIF9fbCA8PSAy
MTQ3NDgzNjQ3KQ0KICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDxpbnQ+KF9f
bCk7DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm
YWlsYml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0K
ICAgIF9Jbkl0ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0K
ICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgbG9uZyYgX192KSBjb25zdA0KICAgIHsNCg0KDQoNCiAgICAg
IGNoYXIgX194dHJjWzMyXT0geydcMCd9Ow0KICAgICAgaW50IF9fYmFzZTsN
CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vyciwg
X194dHJjLCBfX2Jhc2UsIGZhbHNlKTsNCg0KDQogICAgICBjaGFyKiBfX3Nh
bml0eTsNCiAgICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAgICBsb25n
IF9fbCA9IHN0cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsNCiAg
ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAg
ICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAn
ICYmICgqKF9fX2Vycm5vKCkpKSA9PSAwKQ0KICAgICAgICBfX3YgPSBfX2w7
DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls
Yml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KIyA0NTAgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9m
YWNldHMudGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp
dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3Yp
IGNvbnN0DQogICAgew0KDQoNCg0KICAgICAgY2hhciBfX3h0cmNbMzJdPSB7
J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX01fZXh0cmFjdChf
X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFs
c2UpOw0KDQoNCiAgICAgIGNoYXIqIF9fc2FuaXR5Ow0KICAgICAgKCooX19f
ZXJybm8oKSkpID0gMDsNCiAgICAgIHVuc2lnbmVkIGxvbmcgX191bCA9IHN0
cnRvdWwoX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7DQogICAgICBpZiAo
IShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQ0KICAgICAgICAgICYmIF9f
c2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihf
X19lcnJubygpKSkgPT0gMA0KICAgICAgICAgICYmIF9fdWwgPD0gNjU1MzUp
DQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pihf
X3VsKTsNCiAgICAgIGVsc2UNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6
OmZhaWxiaXQ7DQoNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0K
ICAgIF9Jbkl0ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0K
ICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0DQogICAgew0KDQoN
Cg0KICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307DQogICAgICBpbnQg
X19iYXNlOw0KICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOw0KDQoNCiAgICAgIGNo
YXIqIF9fc2FuaXR5Ow0KICAgICAgKCooX19fZXJybm8oKSkpID0gMDsNCiAg
ICAgIHVuc2lnbmVkIGxvbmcgX191bCA9IHN0cnRvdWwoX194dHJjLCAmX19z
YW5pdHksIF9fYmFzZSk7DQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNl
OjpmYWlsYml0KQ0KICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAm
JiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihfX19lcnJubygpKSkgPT0gMA0K
ICAgICAgICAgICYmIF9fdWwgPD0gKDIxNDc0ODM2NDcgKiAyVSArIDEpKQ0K
ICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fdWwp
Ow0KICAgICAgZWxzZQ0KICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp
bGJpdDsNCg0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAg
X0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAg
ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB1bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0DQogICAgew0KDQoNCg0K
ICAgICAgY2hhciBfX3h0cmNbMzJdID0geydcMCd9Ow0KICAgICAgaW50IF9f
YmFzZTsNCiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBf
X2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsNCg0KDQogICAgICBjaGFy
KiBfX3Nhbml0eTsNCiAgICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAg
ICB1bnNpZ25lZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2Fu
aXR5LCBfX2Jhc2UpOw0KICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6
ZmFpbGJpdCkNCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYg
Kl9fc2FuaXR5ID09ICdcMCcgJiYgKCooX19fZXJybm8oKSkpID09IDApDQog
ICAgICAgIF9fdiA9IF9fdWw7DQogICAgICBlbHNlDQogICAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7
DQogICAgfQ0KIyA1NTggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVy
DQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQo
aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf
X2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZs
b2F0JiBfX3YpIGNvbnN0DQogICAgew0KDQoNCg0KICAgICAgY2hhciBfX3h0
cmNbMzJdPSB7J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX01f
ZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9f
YmFzZSwgdHJ1ZSk7DQoNCg0KICAgICAgY2hhciogX19zYW5pdHk7DQogICAg
ICAoKihfX19lcnJubygpKSkgPSAwOw0KDQoNCg0KICAgICAgZmxvYXQgX19m
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0cnRvZChfX3h0cmMsICZfX3Nhbml0
eSkpOw0KDQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0
KQ0KICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5p
dHkgPT0gJ1wwJyAmJiAoKihfX19lcnJubygpKSkgPT0gMCkNCiAgICAgICAg
X192ID0gX19mOw0KICAgICAgZWxzZQ0KICAgICAgICBfX2VyciB8PSBpb3Nf
YmFzZTo6ZmFpbGJpdDsNCg0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0N
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
ZXI+DQogICAgX0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6DQogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29uc3QNCiAgICB7DQoNCg0K
DQogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsNCiAgICAgIGludCBf
X2Jhc2U7DQogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywg
X19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsNCg0KDQogICAgICBjaGFy
KiBfX3Nhbml0eTsNCiAgICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAg
ICBkb3VibGUgX19kID0gc3RydG9kKF9feHRyYywgJl9fc2FuaXR5KTsNCiAg
ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAg
ICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAn
ICYmICgqKF9fX2Vycm5vKCkpKSA9PSAwKQ0KICAgICAgICBfX3YgPSBfX2Q7
DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls
Yml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KIyA2NDEgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9m
YWNldHMudGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp
dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNv
bnN0DQogICAgew0KDQogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsN
CiAgICAgIGludCBfX2Jhc2U7DQogICAgICBfTV9leHRyYWN0KF9fYmVnLCBf
X2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsNCg0K
DQogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lv
LmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOw0KICAgICAgY29uc3Qg
Y2hhciogX19jb252Ow0KICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19i
YXNlOjpvY3QpDQogICAgICAgIF9fY29udiA9ICIlTG8iOw0KICAgICAgZWxz
ZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkNCiAgICAgICAg
X19jb252ID0gIiVMWCI7DQogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9
PSAwKQ0KICAgICAgICBfX2NvbnYgPSAiJUxpIjsNCiAgICAgIGVsc2UNCiAg
ICAgICAgX19jb252ID0gIiVMZyI7DQoNCg0KICAgICAgbG9uZyBkb3VibGUg
X19sZDsNCiAgICAgIGludCBfX3AgPSBzc2NhbmYoX194dHJjLCBfX2NvbnYs
ICZfX2xkKTsNCiAgICAgIGlmIChfX3ANCiAgICAgICAgICAmJiBzdGF0aWNf
Y2FzdDx0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppbnRfdHlwZT4oX19wKQ0K
ICAgICAgICAhPSBfX3RyYWl0c190eXBlOjplb2YoKSkNCiAgICAgICAgX192
ID0gX19sZDsNCiAgICAgIGVsc2UNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh
c2U6OmZhaWxiaXQ7DQoNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoN
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
ZXI+DQogICAgX0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6DQogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBjb25zdA0KICAgIHsNCg0KICAg
ICAgdHlwZWRlZiBpb3NfYmFzZTo6Zm10ZmxhZ3MgZm10ZmxhZ3M7DQogICAg
ICBmbXRmbGFncyBfX2ZtdCA9IF9faW8uZmxhZ3MoKTsNCiAgICAgIGZtdGZs
YWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFz
ZTo6YmFzZWZpZWxkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
aW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7DQog
ICAgICBfX2lvLmZsYWdzKF9fZm10ICYgX19mbXRtYXNrIHwgKGlvc19iYXNl
OjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsNCg0KDQoNCg0KICAgICAg
Y2hhciBfX3h0cmNbMzJdPSB7J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0K
ICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf
X3h0cmMsIF9fYmFzZSwgZmFsc2UpOw0KDQoNCiAgICAgIGNoYXIqIF9fc2Fu
aXR5Ow0KICAgICAgKCooX19fZXJybm8oKSkpID0gMDsNCiAgICAgIHZvaWQq
IF9fdnAgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdHJ0b3VsKF9feHRy
YywgJl9fc2FuaXR5LCBfX2Jhc2UpKTsNCiAgICAgIGlmICghKF9fZXJyICYg
aW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAgICAgJiYgX19zYW5pdHkgIT0g
X194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqKF9fX2Vycm5vKCkp
KSA9PSAwKQ0KICAgICAgICBfX3YgPSBfX3ZwOw0KICAgICAgZWxzZQ0KICAg
ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCg0KDQogICAgICBf
X2lvLmZsYWdzKF9fZm10KTsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9
DQoNCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
T3V0SXRlcj4NCiAgICBpbmxpbmUgX091dEl0ZXINCiAgICBfX3BhZChfT3V0
SXRlciBfX3MsIF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcpOw0KDQog
IHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9SYUl0ZXI+
DQogICAgX1JhSXRlcg0KICAgIF9fcGFkKF9SYUl0ZXIgX19zLCBfQ2hhclQg
X19maWxsLCBpbnQgX19wYWRkaW5nLA0KICAgICAgICAgIHJhbmRvbV9hY2Nl
c3NfaXRlcmF0b3JfdGFnKQ0KICAgIHsNCiAgICAgIGZpbGxfbihfX3MsIF9f
ZmlsbCk7DQogICAgICByZXR1cm4gX19zICsgX19wYWRkaW5nOw0KICAgIH0N
Cg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
SXRlciwgdHlwZW5hbWUgX1RhZz4NCiAgICBfT3V0SXRlcg0KICAgIF9fcGFk
KF9PdXRJdGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywg
X1RhZykNCiAgICB7DQogICAgICB3aGlsZSAoLS1fX3BhZGRpbmcgPj0gMCkg
eyAqX19zID0gX19maWxsOyArK19fczsgfQ0KICAgICAgcmV0dXJuIF9fczsN
CiAgICB9DQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX091dEl0ZXI+DQogICAgaW5saW5lIF9PdXRJdGVyDQogICAgX19wYWQo
X091dEl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nKQ0K
ICAgIHsNCiAgICAgIHJldHVybiBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRk
aW5nLA0KICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfT3V0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOw0KICAgIH0N
Cg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIF9fcGFkX251bWVyaWMoX091dEl0
ZXIgX19zLCBpb3NfYmFzZTo6Zm10ZmxhZ3MgLA0KICAgICAgICAgICAgICAg
ICAgX0NoYXJUICwgaW50ICwNCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBj
b25zdCogLCBfQ2hhclQgY29uc3QqICwNCiAgICAgICAgICAgICAgICAgIF9D
aGFyVCBjb25zdCogKQ0KICB7DQoNCiAgICAgIHJldHVybiBfX3M7DQogICAg
fQ0KDQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBvc3Ry
ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4NCiAgICBfX3BhZF9udW1lcmljKG9z
dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiBfX3MsIGlvc19iYXNlOjpmbXRm
bGFncyBfX2ZsYWdzLA0KICAgICAgICAgICAgICAgICAgX0NoYXJUIF9fZmls
bCwgaW50IF9fd2lkdGgsIF9DaGFyVCBjb25zdCogX19maXJzdCwNCiAgICAg
ICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19taWRkbGUsIF9DaGFyVCBj
b25zdCogX19sYXN0KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1
Zl9pdGVyYXRvcjxfQ2hhclQ+IF9fb3V0X2l0ZXI7DQogICAgICBpbnQgX19w
YWRkaW5nID0gX193aWR0aCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgICAg
IGlmIChfX3BhZGRpbmcgPCAwKQ0KICAgICAgICBfX3BhZGRpbmcgPSAwOw0K
ICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYWZsYWdzID0gX19mbGFncyAm
IGlvc19iYXNlOjphZGp1c3RmaWVsZDsNCiAgICAgIGJvb2wgX190ZXN0Zmll
bGQgPSBfX3BhZGRpbmcgPT0gMCB8fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6
bGVmdA0KICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9fYWZsYWdzID09
IGlvc19iYXNlOjppbnRlcm5hbDsNCg0KDQogICAgICBpZiAoX19maXJzdCAh
PSBfX21pZGRsZSkNCiAgICAgICAgew0KICAgICAgICAgIGlmICghX190ZXN0
ZmllbGQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fcGFkKF9f
cywgX19maWxsLCBfX3BhZGRpbmcpOw0KICAgICAgICAgICAgICBfX3BhZGRp
bmcgPSAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNvcHkoX19maXJz
dCwgX19taWRkbGUsIF9fcyk7DQogICAgICAgIH0NCiAgICAgIF9fb3V0X2l0
ZXIgX19zMiA9IF9fczsNCg0KICAgICAgaWYgKF9fcGFkZGluZyAmJiBfX2Fm
bGFncyAhPSBpb3NfYmFzZTo6bGVmdCkNCiAgICAgICAgew0KICAgICAgICAg
IF9fcGFkKF9fczIsIF9fZmlsbCwgX19wYWRkaW5nKTsNCiAgICAgICAgICBf
X3BhZGRpbmcgPSAwOw0KICAgICAgICB9DQogICAgICBfX291dF9pdGVyIF9f
czMgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fczIpOw0KICAgICAgaWYg
KF9fcGFkZGluZykNCiAgICAgICAgX19wYWQoX19zMywgX19maWxsLCBfX3Bh
ZGRpbmcpOw0KICAgICAgcmV0dXJuIF9fczM7DQogICAgfQ0KDQogIHRlbXBs
YXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAg
IF9PdXRJdGVyDQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQog
ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFy
X3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3QNCiAgICB7DQogICAgICBj
b25zdCBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qIF9fZm10ID0gX0Zvcm1hdF9j
YWNoZTxfQ2hhclQ+OjpfU19nZXQoX19pbyk7DQogICAgICBpb3NfYmFzZTo6
Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsNCg0KICAgICAgaWYg
KChfX2ZsYWdzICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCkNCiAgICAg
ICAgew0KICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsNCiAg
ICAgICAgICByZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9f
ZmlsbCwgZmFsc2UsIF9fdXYpOw0KICAgICAgICB9DQogICAgICBlbHNlDQog
ICAgICAgIHsNCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmlyc3Q7
DQogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2xhc3Q7DQogICAgICAg
ICAgaWYgKF9fdikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19m
aXJzdCA9IF9fZm10LT5fTV90cnVlbmFtZS5kYXRhKCk7DQogICAgICAgICAg
ICAgIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2ZtdC0+X01fdHJ1ZW5hbWUuc2l6
ZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAg
ICAgIHsNCiAgICAgICAgICAgICAgX19maXJzdCA9IF9fZm10LT5fTV9mYWxz
ZW5hbWUuZGF0YSgpOw0KICAgICAgICAgICAgICBfX2xhc3QgPSBfX2ZpcnN0
ICsgX19mbXQtPl9NX2ZhbHNlbmFtZS5zaXplKCk7DQogICAgICAgICAgICB9
DQogICAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcyk7DQogICAg
ICAgIH0NCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQoNCg0KDQoNCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfQ2hhclQqDQogICAg
X19ncm91cF9kaWdpdHMoX0NoYXJUKiBfX3MsIF9DaGFyVCBfX2dyc2VwLCBj
aGFyIGNvbnN0KiBfX2dyb3VwaW5nLA0KICAgICAgICAgICAgICAgICAgICBj
aGFyIGNvbnN0KiBfX2dyZW5kLCBfQ2hhclQgY29uc3QqIF9fZmlyc3QsDQog
ICAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19sYXN0KQ0KICAg
IHsNCiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gKl9fZ3JvdXBpbmcp
DQogICAgICAgIHsNCiAgICAgICAgICBfX3MgPSBfX2dyb3VwX2RpZ2l0cyhf
X3MsIF9fZ3JzZXAsDQogICAgICAgICAgICAgIChfX2dyb3VwaW5nICsgMSA9
PSBfX2dyZW5kID8gX19ncm91cGluZyA6IF9fZ3JvdXBpbmcgKyAxKSwNCiAg
ICAgICAgICAgICAgX19ncmVuZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ3Jv
dXBpbmcpOw0KICAgICAgICAgIF9fZmlyc3QgPSBfX2xhc3QgLSAqX19ncm91
cGluZzsNCiAgICAgICAgICAqX19zKysgPSBfX2dyc2VwOw0KICAgICAgICB9
DQogICAgICBkbw0KICAgICAgICB7DQogICAgICAgICAgKl9fcysrID0gKl9f
Zmlyc3QrKzsNCiAgICAgICAgfQ0KICAgICAgd2hpbGUgKF9fZmlyc3QgIT0g
X19sYXN0KTsNCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQogIHRlbXBs
YXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyLCB0eXBl
bmFtZSBfVmFsdWVUPg0KICAgIF9PdXRJdGVyDQogICAgX19vdXRwdXRfaW50
ZWdlcihfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19m
aWxsLCBib29sIF9fbmVnLA0KICAgICAgICAgICAgICBfVmFsdWVUIF9fdikN
CiAgICB7DQoNCiAgICAgIGNvbnN0IGxvbmcgX01fcm9vbSA9IG51bWVyaWNf
bGltaXRzPF9WYWx1ZVQ+OjpkaWdpdHMxMCAqIDIgKyA0Ow0KICAgICAgX0No
YXJUIF9fZGlnaXRzW19NX3Jvb21dOw0KICAgICAgX0NoYXJUKiBfX2Zyb250
ID0gX19kaWdpdHMgKyBfTV9yb29tOw0KICAgICAgaW9zX2Jhc2U6OmZtdGZs
YWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7DQogICAgICBjb25zdCBfRm9y
bWF0X2NhY2hlPF9DaGFyVD4qIF9fZm10ID0gX0Zvcm1hdF9jYWNoZTxfQ2hh
clQ+OjpfU19nZXQoX19pbyk7DQogICAgICBjaGFyIGNvbnN0KiBfX3RhYmxl
ID0gX19mbXQtPl9TX2xpdGVyYWxzICsgX19mbXQtPl9TX2RpZ2l0czsNCg0K
ICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gKF9fZmxh
Z3MgJiBfX2lvLmJhc2VmaWVsZCk7DQogICAgICBfQ2hhclQqIF9fc2lnbl9l
bmQgPSBfX2Zyb250Ow0KICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19i
YXNlOjpoZXgpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAoX19mbGFncyAm
IGlvc19iYXNlOjp1cHBlcmNhc2UpDQogICAgICAgICAgICBfX3RhYmxlICs9
IDE2Ow0KICAgICAgICAgIGRvDQogICAgICAgICAgICAqLS1fX2Zyb250ID0g
X190YWJsZVtfX3YgJiAxNV07DQogICAgICAgICAgd2hpbGUgKChfX3YgPj49
IDQpICE9IDApOw0KICAgICAgICAgIF9fc2lnbl9lbmQgPSBfX2Zyb250Ow0K
ICAgICAgICAgIGlmIChfX2ZsYWdzICYgaW9zX2Jhc2U6OnNob3diYXNlKQ0K
ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAqLS1fX2Zyb250ID0gX19m
bXQtPl9TX2xpdGVyYWxzW19fZm10LT5fU194ICsNCiAgICAgICAgICAgICAg
ICAgICAgICAgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OnVwcGVyY2FzZSkgPyAx
IDogMCldOw0KICAgICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVsw
XTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgZWxzZSBpZiAo
X19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCkNCiAgICAgICAgew0KICAg
ICAgICAgIGRvDQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtf
X3YgJiA3XTsNCiAgICAgICAgICB3aGlsZSAoKF9fdiA+Pj0gMykgIT0gMCk7
DQogICAgICAgICAgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd2Jhc2UN
CiAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8Y2hhcj4oKl9fZnJvbnQp
ICE9IF9fdGFibGVbMF0pDQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190
YWJsZVswXTsNCiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsNCiAg
ICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICB7DQoNCiAgICAgICAgICBk
bw0KICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fdGFibGVbX192ICUgMTBd
Ow0KICAgICAgICAgIHdoaWxlICgoX192IC89IDEwKSAhPSAwKTsNCiAgICAg
ICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsNCg0KICAgICAgICAgIGlmIChf
X25lZyB8fCAoX19mbGFncyAmIGlvc19iYXNlOjpzaG93cG9zKSkNCiAgICAg
ICAgICAgICotLV9fZnJvbnQgPSBfX2ZtdC0+X1NfbGl0ZXJhbHNbX19mbXQt
Pl9TX3BsdXMgLSBfX25lZ107DQogICAgICAgIH0NCg0KDQogICAgICBpZiAo
IV9fZm10LT5fTV91c2VfZ3JvdXBpbmcgJiYgIV9faW8ud2lkdGgoKSkNCiAg
ICAgICAgcmV0dXJuIGNvcHkoX19mcm9udCwgX19kaWdpdHMgKyBfTV9yb29t
LCBfX3MpOw0KDQogICAgICBpZiAoIV9fZm10LT5fTV91c2VfZ3JvdXBpbmcp
DQogICAgICAgIHJldHVybiBfX3BhZF9udW1lcmljKF9fcywgX19mbGFncywg
X19maWxsLCBfX2lvLndpZHRoKDApLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2Zyb250LCBfX3NpZ25fZW5kLCBfX2RpZ2l0cyArIF9NX3Jv
b20pOw0KDQogICAgICBfQ2hhclQqIF9fcCA9IF9fZGlnaXRzOw0KICAgICAg
d2hpbGUgKF9fZnJvbnQgPCBfX3NpZ25fZW5kKQ0KICAgICAgICAqX19wKysg
PSAqX19mcm9udCsrOw0KICAgICAgY29uc3QgY2hhciogX19nciA9IF9fZm10
LT5fTV9ncm91cGluZy5kYXRhKCk7DQogICAgICBfX2Zyb250ID0gX19ncm91
cF9kaWdpdHMoX19wLCBfX2ZtdC0+X01fdGhvdXNhbmRzX3NlcCwgX19nciwN
CiAgICAgICAgX19nciArIF9fZm10LT5fTV9ncm91cGluZy5zaXplKCksIF9f
c2lnbl9lbmQsIF9fZGlnaXRzICsgX01fcm9vbSk7DQogICAgICByZXR1cm4g
X19wYWRfbnVtZXJpYyhfX3MsIF9fZmxhZ3MsIF9fZmlsbCwgX19pby53aWR0
aCgwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlnaXRzLCBf
X3AsIF9fZnJvbnQpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAg
IG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVy
X3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwg
bG9uZyBfX3YpIGNvbnN0DQogICAgew0KICAgICAgdW5zaWduZWQgbG9uZyBf
X3V2ID0gX192Ow0KICAgICAgYm9vbCBfX25lZyA9IGZhbHNlOw0KICAgICAg
aWYgKF9fdiA8IDApDQogICAgICAgIHsNCiAgICAgICAgICBfX25lZyA9IHRy
dWU7DQogICAgICAgICAgX191diA9IC1fX3V2Ow0KICAgICAgICB9DQogICAg
ICByZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwg
X19uZWcsIF9fdXYpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAg
IG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVy
X3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwN
CiAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0DQogICAgeyBy
ZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFs
c2UsIF9fdik7IH0NCiMgOTY3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMw0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9PdXRJdGVyPg0KICAgIF9PdXRJdGVyDQogICAgX19vdXRwdXRfZmxvYXQo
X091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwN
CiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19zcHRyLCBzaXpl
X3QgX19zbGVuKQ0KICAgIHsNCg0KICAgICAgcmV0dXJuIF9fczsNCiAgICB9
DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+DQogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFp
dHM+DQogICAgX19vdXRwdXRfZmxvYXQob3N0cmVhbWJ1Zl9pdGVyYXRvcjxf
Q2hhclQsIF9UcmFpdHM+IF9fcywgaW9zX2Jhc2UmIF9faW8sDQogICAgICAg
ICAgICAgICAgICAgX0NoYXJUIF9fZmlsbCwgY29uc3QgY2hhciogX19zcHRy
LCBzaXplX3QgX19zbGVuKQ0KICAgIHsNCiAgICAgIHNpemVfdCBfX3BhZGRp
bmcgPSBfX2lvLndpZHRoKCkgPiBzdHJlYW1zaXplKF9fc2xlbikgPw0KICAg
ICAgICAgICAgICAgICAgICAgICAgIF9faW8ud2lkdGgoKSAtX19zbGVuIDog
MDsNCiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAg
ICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0ID0gdXNlX2ZhY2V0PGN0eXBl
PF9DaGFyVD4gPihfX2xvYyk7DQogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3Mg
X19hZGpmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3Rm
aWVsZDsNCiAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IF9fZXB0ciA9IF9fc3B0
ciArIF9fc2xlbjsNCg0KICAgICAgaWYgKF9fYWRqZmllbGQgPT0gaW9zX2Jh
c2U6OmludGVybmFsKQ0KICAgICAgIHsNCg0KICAgICAgICAgaWYgKF9fc3B0
ciA8IF9fZXB0ciAmJiAoKl9fc3B0ciA9PSAnKycgfHwgKl9fc3B0ciA9PSAn
LScpKQ0KICAgICAgICAgICB7DQogICAgICAgICAgICAgX19zID0gX19jdC53
aWRlbigqX19zcHRyKTsNCiAgICAgICAgICAgICArK19fczsNCiAgICAgICAg
ICAgICArK19fc3B0cjsNCiAgICAgICAgICAgfQ0KICAgICAgICAgX19zID0g
X19wYWQoX19zLCBfX2ZpbGwsIF9fcGFkZGluZyk7DQogICAgICAgICBfX3Bh
ZGRpbmcgPSAwOw0KICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKF9fYWRqZmll
bGQgIT0gaW9zX2Jhc2U6OmxlZnQpDQogICAgICAgIHsNCiAgICAgICAgICBf
X3MgPSBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsNCiAgICAgICAg
ICBfX3BhZGRpbmcgPSAwOw0KICAgICAgICB9DQoNCiAgICAgIGNoYXIgX19k
ZWNpbWFsX3BvaW50ID0gKihsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQp
Ow0KICAgICAgY29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9
IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X1NfZ2V0KF9faW8pOw0KICAgICAg
Zm9yICg7IF9fc3B0ciAhPSBfX2VwdHI7ICsrX19zLCArK19fc3B0cikNCiAg
ICAgICB7DQoNCiAgICAgICAgIGlmICgqX19zcHRyID09IF9fZGVjaW1hbF9w
b2ludCkNCiAgICAgICAgICAgX19zID0gX19mbXQtPl9NX2RlY2ltYWxfcG9p
bnQ7DQoNCiAgICAgICAgIGVsc2UNCiAgICAgICAgICAgX19zID0gX19jdC53
aWRlbigqX19zcHRyKTsNCiAgICAgICB9DQoNCiAgICAgIGlmIChfX3BhZGRp
bmcpDQogICAgICAgIF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRpbmcpOw0K
ICAgICAgX19pby53aWR0aCgwKTsNCiAgICAgIHJldHVybiBfX3M7DQogICAg
fQ0KDQogIGJvb2wNCiAgX19idWlsZF9mbG9hdF9mb3JtYXQoaW9zX2Jhc2Um
IF9faW8sIGNoYXIqIF9fZnB0ciwgY2hhciBfX21vZGlmaWVyLA0KICAgICAg
ICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7DQoNCiAgdGVt
cGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQog
ICAgX091dEl0ZXINCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoN
CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNo
YXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0DQogICAgew0KICAg
ICAgY29uc3Qgc3RyZWFtc2l6ZSBfX21heF9wcmVjID0gbnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6ZGlnaXRzMTAgKyAzOw0KICAgICAgc3RyZWFtc2l6ZSBf
X3ByZWMgPSBfX2lvLnByZWNpc2lvbigpOw0KDQogICAgICBpZiAoX19wcmVj
ID4gX19tYXhfcHJlYykNCiAgICAgICAgX19wcmVjID0gX19tYXhfcHJlYzsN
Cg0KICAgICAgY2hhciBfX3NidWZbX19tYXhfcHJlYyAqIDJdOw0KICAgICAg
c2l6ZV90IF9fc2xlbjsNCg0KICAgICAgY2hhciBfX2ZidWZbMTZdOw0KICAg
ICAgaWYgKF9fYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgMCwg
X19wcmVjKSkNCiAgICAgICAgX19zbGVuID0gc3ByaW50ZihfX3NidWYsIF9f
ZmJ1ZiwgX19wcmVjLCBfX3YpOw0KICAgICAgZWxzZQ0KICAgICAgICBfX3Ns
ZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19mYnVmLCBfX3YpOw0KDQogICAgICBy
ZXR1cm4gX19vdXRwdXRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1
ZiwgX19zbGVuKTsNCiAgICB9DQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0ZXINCiAgICBu
dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBkb19wdXQoaXRlcl90
eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsDQog
ICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QNCiAgICB7DQogICAg
ICBjb25zdCBzdHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmljX2xpbWl0
czxsb25nIGRvdWJsZT46OmRpZ2l0czEwICsgMzsNCiAgICAgIHN0cmVhbXNp
emUgX19wcmVjID0gX19pby5wcmVjaXNpb24oKTsNCg0KICAgICAgaWYgKF9f
cHJlYyA+IF9fbWF4X3ByZWMpDQogICAgICAgIF9fcHJlYyA9IF9fbWF4X3By
ZWM7DQoNCiAgICAgIGNoYXIgX19zYnVmW19fbWF4X3ByZWMgKiAyXTsNCiAg
ICAgIHNpemVfdCBfX3NsZW47DQoNCiAgICAgIGNoYXIgX19mYnVmWzE2XTsN
Cg0KICAgICAgaWYgKF9fYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1
ZiwgJ0wnLCBfX3ByZWMpKQ0KICAgICAgICBfX3NsZW4gPSBzcHJpbnRmKF9f
c2J1ZiwgX19mYnVmLCBfX3ByZWMsIF9fdik7DQogICAgICBlbHNlDQogICAg
ICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fdik7DQoN
CiAgICAgIHJldHVybiBfX291dHB1dF9mbG9hdChfX3MsIF9faW8sIF9fZmls
bCwgX19zYnVmLCBfX3NsZW4pOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRl
cg0KICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1
dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f
ZmlsbCwNCiAgICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdA0KICAg
IHsNCiAgICAgIHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdz
Ow0KICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7DQogICAg
ICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwg
aW9zX2Jhc2U6OmJhc2VmaWVsZA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJu
YWwpOw0KICAgICAgX19pby5mbGFncyhfX2ZtdCAmIF9fZm10bWFzayB8IChp
b3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7DQogICAgICB0
cnkgew0KICAgICAgICBfT3V0SXRlciBfX3MyID0gX19vdXRwdXRfaW50ZWdl
cihfX3MsIF9faW8sIF9fZmlsbCwgZmFsc2UsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBs
b25nPihfX3YpKTsNCiAgICAgICAgX19pby5mbGFncyhfX2ZtdCk7DQogICAg
ICAgIHJldHVybiBfX3MyOw0KICAgICAgfQ0KICAgICAgY2F0Y2ggKC4uLikg
ew0KICAgICAgICBfX2lvLmZsYWdzKF9fZm10KTsNCiAgICAgICAgdGhyb3c7
DQogICAgICB9DQogICAgfQ0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfRHVtbXkgPSBpbnQ+DQogICAgc3RydWN0
IF9XZWVrZGF5bmFtZXM7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15
Pg0KICAgIHN0cnVjdCBfV2Vla2RheW5hbWVzPGNoYXIsIF9EdW1teT4NCiAg
ICB7IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBfU19uYW1lc1sxNF07IH07
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIGNvbnN0IGNo
YXIqIGNvbnN0DQogICAgX1dlZWtkYXluYW1lczxjaGFyLCBfRHVtbXk+Ojpf
U19uYW1lc1sxNF0gPQ0KICAgIHsNCiAgICAgICJTdW4iLCAiU3VuZGF5IiwN
CiAgICAgICJNb24iLCAiTW9uZGF5IiwgIlR1ZSIsICJUdWVzZGF5IiwgIldl
ZCIsICJXZWRuZXNkYXkiLA0KICAgICAgIlRodSIsICJUaHVyc2RheSIsICJG
cmkiLCAiRnJpZGF5IiwgIlNhdCIsICJTYXR1cmRheSINCiAgICB9Ow0KIyAx
MTM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9s
b2NhbGVfZmFjZXRzLnRjYyIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9EdW1teSA9IGludD4NCiAgICBzdHJ1Y3QgX01vbnRo
bmFtZXM7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIHN0
cnVjdCBfTW9udGhuYW1lczxjaGFyLF9EdW1teT4NCiAgICB7IHN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBfU19uYW1lc1syNF07IH07DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIGNvbnN0IGNoYXIqIGNvbnN0DQog
ICAgX01vbnRobmFtZXM8Y2hhcixfRHVtbXk+OjpfU19uYW1lc1syNF0gPQ0K
ICAgIHsNCiAgICAgICJKYW4iLCAiSmFudWFyeSIsICJGZWIiLCAiRmVicnVh
cnkiLCAiTWFyIiwgIk1hcmNoIiwNCiAgICAgICJBcHIiLCAiQXByaWwiLCAi
TWF5IiwgIk1heSIsICJKdW4iLCAiSnVuZSIsDQogICAgICAiSnVsIiwgIkp1
bHkiLCAiQXVnIiwgIkF1Z3VzdCIsICJTZXAiLCAiU2VwdGVtYmVyIiwNCiAg
ICAgICJPY3QiLCAiT2N0b2JlciIsICJOb3YiLCAiTm92ZW1iZXIiLCAiRGVj
IiwgIkRlY2VtYmVyIg0KICAgIH07DQojIDExNjggIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAz
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
cj4NCiAgICBfSW5JdGVyDQogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6DQogICAgZG9fZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fcywgaXRlcl90
eXBlIF9fZW5kLA0KICAgICAgICAgICAgICAgICAgIGlvc19iYXNlJiBfX2lv
LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0DQog
ICAgew0KICAgICAgaWYgKCFfTV9kYXluYW1lcykNCiAgICAgICAgew0KICAg
ICAgICAgIF9NX2RheW5hbWVzID0gbmV3IGJhc2ljX3N0cmluZzxfQ2hhclQ+
WzE0XTsNCiAgICAgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCAxNDsg
KytfX2kpDQogICAgICAgICAgICBfTV9kYXluYW1lc1tfX2ldID0gX1dlZWtk
YXluYW1lczxfQ2hhclQ+OjpfU19uYW1lc1tfX2ldOw0KICAgICAgICB9DQog
ICAgICBib29sIF9fYXRfZW9mID0gZmFsc2U7DQogICAgICBpbnQgX19yZW1h
aW4gPSAwOw0KICAgICAgaW50IF9fbWF0Y2hlc1sxNF07DQogICAgICBpdGVy
X3R5cGUgX19vdXQgPSBfX21hdGNoX3BhcmFsbGVsKF9fcywgX19lbmQsIDE0
LCBfTV9kYXluYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOw0K
ICAgICAgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZSgwKTsNCiAgICAgIGlm
IChfX2F0X2VvZikgX19lcnIgfD0gX19pby5lb2ZiaXQ7DQogICAgICBpZiAo
X19yZW1haW4gPT0gMSB8fA0KICAgICAgICAgIF9fcmVtYWluID09IDIgJiYg
KF9fbWF0Y2hlc1swXT4+MSkgPT0gKF9fbWF0Y2hlc1sxXT4+MSkpDQogICAg
ICAgIF9fdC0+dG1fd2RheSA9IChfX21hdGNoZXNbMF0+PjEpOw0KICAgICAg
ZWxzZQ0KICAgICAgICBfX2VyciB8PSBfX2lvLmZhaWxiaXQ7DQogICAgICBy
ZXR1cm4gX19vdXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgdGlt
ZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAgZG9fZ2V0X21vbnRobmFt
ZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsDQogICAgICAgICAg
ICAgICAgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCB0bSogX190KSBjb25zdA0KICAgIHsNCiAgICAgIGlmICghX01f
bW9udGhuYW1lcykNCiAgICAgICAgew0KICAgICAgICAgIF9NX21vbnRobmFt
ZXMgPSBuZXcgYmFzaWNfc3RyaW5nPF9DaGFyVD5bMjRdOw0KICAgICAgICAg
IGZvciAoaW50IF9faSA9IDA7IF9faSA8IDI0OyArK19faSkNCiAgICAgICAg
ICAgIF9NX21vbnRobmFtZXNbX19pXSA9IF9Nb250aG5hbWVzPF9DaGFyVD46
Ol9TX25hbWVzW19faV07DQogICAgICAgIH0NCiAgICAgIGJvb2wgX19hdF9l
b2YgPSBmYWxzZTsNCiAgICAgIGludCBfX3JlbWFpbiA9IDA7DQogICAgICBp
bnQgX19tYXRjaGVzWzI0XTsNCiAgICAgIGl0ZXJfdHlwZSBfX291dCA9IF9f
bWF0Y2hfcGFyYWxsZWwoIF9fcywgX19lbmQsIDI0LCBfTV9tb250aG5hbWVz
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOw0KICAgICAgX19lcnIg
PSBpb3NfYmFzZTo6aW9zdGF0ZSgwKTsNCiAgICAgIGlmIChfX2F0X2VvZikg
X19lcnIgfD0gX19pby5lb2ZiaXQ7DQogICAgICBpZiAoX19yZW1haW4gPT0g
MSB8fA0KICAgICAgICAgIF9fcmVtYWluID09IDIgJiYgKF9fbWF0Y2hlc1sw
XT4+MSkgPT0gKF9fbWF0Y2hlc1sxXT4+MSkpDQogICAgICAgIF9fdC0+dG1f
bW9uID0gKF9fbWF0Y2hlc1swXT4+MSk7DQogICAgICBlbHNlDQogICAgICAg
IF9fZXJyIHw9IF9faW8uZmFpbGJpdDsNCiAgICAgIHJldHVybiBfX291dDsN
CiAgICB9DQp9DQojIDQyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDIgMw0KIyAzMyAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvb3N0cmVhbS50Y2MiIDIg
Mw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6DQogICAgc2VudHJ5KGJhc2ljX29z
dHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zKQ0KICAgIDogX01fb2soX19v
cy5nb29kKCkpLCBfTV9vcyhfX29zKQ0KICAgIHsNCg0KICAgICAgaWYgKF9N
X29rICYmIF9fb3MudGllKCkpDQogICAgICAgIF9fb3MudGllKCktPmZsdXNo
KCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoN
CiAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0
cmVhbV90eXBlJikpDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cyk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAg
dHJ5DQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9DQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0K
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93
Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRo
aXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoN
CiAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlw
ZSYpKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAg
ICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAg
ICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQ0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAg
ICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAg
IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3Bl
cmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQ0KICAgIHsN
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2Vy
YikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgeyBf
X3BmKCp0aGlzKTsgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChib29sIF9fbikN
CiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlm
IChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg
ICAgIHsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu
dW1wdXQpKQ0KICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQo
KnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpDQog
ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAg
ICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
Pg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9u
ZyBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQog
ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQog
ICAgICAgICAgICB7DQogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0
aGlzLT5maWxsKCk7DQogICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFn
cyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxk
Ow0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1
dCkpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgYm9v
bCBfX2IgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgIGlmIChfX2ZtdCAm
IGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQ0KICAg
ICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbG9uZyBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihf
X24pOw0KICAgICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQt
PnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsNCiAgICAg
ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgZWxzZQ0KICAg
ICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMs
ICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7DQogICAgICAgICAgICAgICAg
ICBpZiAoX19iKQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgICB9DQogICAg
ICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
DQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0K
ICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAg
ICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcg
X19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAg
ICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAg
ICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo
X01fZm51bXB1dCkpDQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQt
PnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQo
KSkNCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAg
ICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAg
IH0NCiMgMjY0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9vc3RyZWFtLnRjYyIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQ0KICAgIHsNCiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAg
ICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAg
ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpDQogICAgICAg
ICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRo
aXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkNCiAgICAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAg
ICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAg
ICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAg
ICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0K
ICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX24pDQog
ICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAo
X19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAg
ICB7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt
cHV0KSkNCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0
aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQ0KICAg
ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAg
fQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGNvbnN0
IHZvaWQqIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0
cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr
X2ZhY2V0KF9NX2ZudW1wdXQpKQ0KICAgICAgICAgICAgICAgIGlmIChfTV9m
bnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbiku
ZmFpbGVkKCkpDQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
Ow0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7
DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhp
czsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9w
ZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYmluKQ0KICAgIHsNCiAg
ICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7DQogICAgICBfX3N0cmVhbWJ1
Zl90eXBlKiBfX3Nib3V0ID0gdGhpcy0+cmRidWYoKTsNCiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fc2JpbiAmJiBfX2NlcmIp
DQogICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywg
X19zYmluLCBfX3Nib3V0KTsNCiAgICAgIGlmICghX19zYmluIHx8ICFfX3h0
cmN0KQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp
dCk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjpwdXQoY2hhcl90eXBlIF9fYykNCiAgICB7
DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2Nl
cmIpDQogICAgICAgIHsNCiAgICAgICAgICBpbnRfdHlwZSBfX3B1dCA9IHJk
YnVmKCktPnNwdXRjKF9fYyk7DQogICAgICAgICAgaWYgKF9fcHV0ICE9IHRy
YWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKQ0KICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgIH0NCiAg
ICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OndyaXRlKGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1z
aXplIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsN
CiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBzdHJl
YW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24p
Ow0KICAgICAgICAgIGlmICggX19wdXQgIT0gX19uKQ0KICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgIH0N
CiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46OmZsdXNoKCkNCiAgICB7DQogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsN
CiAgICAgICAgICBpZiAodGhpcy0+cmRidWYoKSAmJiB0aGlzLT5yZGJ1Zigp
LT5wdWJzeW5jKCkgPT0gLTEpDQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJu
ICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQ0KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6dGVsbHAoKQ0KICAgIHsNCiAgICAgIHBv
c190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOw0KICAgICAgYm9vbCBfX3Rl
c3RvayA9IHRoaXMtPmZhaWwoKSAhPSB0cnVlOw0KDQogICAgICBpZiAoX190
ZXN0b2spDQogICAgICAgIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vl
a29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6b3V0KTsNCiAgICAg
IHJldHVybiBfX3JldDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6c2Vla3AocG9zX3R5cGUgX19wb3MpDQogICAgew0KICAg
ICAgYm9vbCBfX3Rlc3RvayA9IHRoaXMtPmZhaWwoKSAhPSB0cnVlOw0KDQog
ICAgICBpZiAoX190ZXN0b2spDQogICAgICAgIHsNCg0KDQogICAgICAgICAg
cG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9f
cG9zLCBpb3NfYmFzZTo6b3V0KTsNCg0KDQogICAgICAgICAgaWYgKF9fZXJy
ID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpDQogICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShmYWlsYml0KTsNCg0KICAgICAgICB9DQogICAgICByZXR1
cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjoNCiAgICBzZWVrcChvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNl
ZWtkaXIgX19kKQ0KICAgIHsNCiAgICAgIGJvb2wgX190ZXN0b2sgPSB0aGlz
LT5mYWlsKCkgIT0gdHJ1ZTsNCg0KICAgICAgaWYgKF9fdGVzdG9rKQ0KICAg
ICAgICB7DQoNCg0KICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+
cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3Nf
YmFzZTo6b3V0KTsNCg0KDQogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190
eXBlKG9mZl90eXBlKC0xKSkpDQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShmYWlsYml0KTsNCiAgICAgICAgfQ0KDQogICAgICByZXR1cm4gKnRoaXM7
DQogICAgfQ0KIyA0NTcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL29zdHJlYW0udGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQogICAgX19w
YWRfY2hhcihiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX19pb3MsDQog
ICAgICAgICAgICAgICBfQ2hhclQqIF9fbmV3cywgY29uc3QgX0NoYXJUKiBf
X29sZHMsDQogICAgICAgICAgICAgICBjb25zdCBzdHJlYW1zaXplIF9fbmV3
bGVuLCBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuKQ0KICAgIHsNCiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX1Ry
YWl0cyB0cmFpdHNfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJh
aXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOw0KDQogICAgICBpbnRfdHlw
ZSBfX3BsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fbmV3bGVuIC0gX19v
bGRsZW4pOw0KICAgICAgY2hhcl90eXBlKiBfX3BhZHMgPSBzdGF0aWNfY2Fz
dDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihjaGFyX3R5
cGUpICogX19wbGVuKSk7DQogICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9f
cGFkcywgX19wbGVuLCBfX2lvcy5maWxsKCkpOw0KDQogICAgICBjaGFyX3R5
cGUqIF9fYmVnOw0KICAgICAgY2hhcl90eXBlKiBfX2VuZDsNCiAgICAgIHNp
emVfdCBfX21vZCA9IDA7DQogICAgICBzaXplX3QgX19iZWdsZW47DQogICAg
ICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSBfX2lvcy5mbGFncygpICYg
aW9zX2Jhc2U6OmFkanVzdGZpZWxkOw0KDQogICAgICBpZiAoX19mbXQgPT0g
aW9zX2Jhc2U6OmxlZnQpDQogICAgICAgIHsNCg0KICAgICAgICAgIF9fYmVn
ID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOw0KICAgICAgICAg
IF9fYmVnbGVuID0gX19vbGRsZW47DQogICAgICAgICAgX19lbmQgPSBfX3Bh
ZHM7DQogICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKF9fZm10ID09IGlvc19i
YXNlOjppbnRlcm5hbCkNCiAgICAgICAgew0KDQoNCg0KICAgICAgICAgIHR5
cGVkZWYgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+IF9fY2FjaGVfdHlwZTsNCiAg
ICAgICAgICBfX2NhY2hlX3R5cGUgY29uc3QqIF9fZm10ID0gX19jYWNoZV90
eXBlOjpfU19nZXQoX19pb3MpOw0KICAgICAgICAgIGNvbnN0IGNoYXJfdHlw
ZSogX19taW51cyA9IHRyYWl0c190eXBlOjpmaW5kKF9fb2xkcywgX19vbGRs
ZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19mbXQtPl9TX21pbnVzKTsNCiAgICAgICAgICBj
b25zdCBjaGFyX3R5cGUqIF9fcGx1cyA9IHRyYWl0c190eXBlOjpmaW5kKF9f
b2xkcywgX19vbGRsZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZtdC0+X1NfcGx1cyk7DQog
ICAgICAgICAgYm9vbCBfX3Rlc3RzaWduID0gX19taW51cyB8fCBfX3BsdXM7
DQogICAgICAgICAgYm9vbCBfX3Rlc3RoZXggPSBfX29sZHNbMF0gPT0gJzAn
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19vbGRzWzFdID09
ICd4JyB8fCBfX29sZHNbMV0gPT0gJ1gnKTsNCg0KICAgICAgICAgIGlmIChf
X3Rlc3RoZXgpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fbmV3
c1swXSA9IF9fb2xkc1swXTsNCiAgICAgICAgICAgICAgX19uZXdzWzFdID0g
X19vbGRzWzFdOw0KICAgICAgICAgICAgICBfX21vZCArPSAyOw0KICAgICAg
ICAgICAgICBfX2JlZyA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRz
ICsgX19tb2QpOw0KICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVu
IC0gX19tb2Q7DQogICAgICAgICAgICAgIF9fZW5kID0gX19wYWRzOw0KICAg
ICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdHNpZ24pDQog
ICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fbW9kICs9IF9fcGxlbjsN
CiAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3NpZ24gPSBfX21p
bnVzID8gX19taW51cyArIDE6IF9fcGx1cyArIDE7DQogICAgICAgICAgICAg
IF9fYmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOw0KICAg
ICAgICAgICAgICBfX2JlZ2xlbiA9IF9fc2lnbiAtIF9fb2xkczsNCiAgICAg
ICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fc2ln
biArIF9fcGxlbik7DQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5
KF9fbmV3cyArIF9fYmVnbGVuLCBfX3BhZHMsIF9fcGxlbik7DQogICAgICAg
ICAgICB9DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KDQogICAg
ICAgICAgICAgIF9fYmVnID0gX19wYWRzOw0KICAgICAgICAgICAgICBfX2Jl
Z2xlbiA9IF9fcGxlbjsNCiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9j
YXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7DQogICAgICAgICAgICB9DQogICAg
ICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICAgew0KDQogICAgICAgICAgX19i
ZWcgPSBfX3BhZHM7DQogICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47DQog
ICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xk
cyk7DQogICAgICAgIH0NCg0KICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19u
ZXdzLCBfX2JlZywgX19iZWdsZW4pOw0KICAgICAgdHJhaXRzX3R5cGU6OmNv
cHkoX19uZXdzICsgX19iZWdsZW4sIF9fZW5kLCBfX25ld2xlbiAtIF9fYmVn
bGVuIC0gX19tb2QpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYykNCiAgICB7
DQogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiBfX29zdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90
eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIp
DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAg
ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOw0K
ICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9D
aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cp
KTsNCiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOw0KICAgICAgICAg
ICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsNCiAgICAgICAgICAgICAgaWYg
KF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAg
ICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywgJl9fYywgX193LCBf
X2xlbik7DQogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsNCiAgICAg
ICAgICAgICAgICB9DQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFk
cywgX19sZW4pOw0KICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsNCiAg
ICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIF9fb3V0LnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAo
KF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
DQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAg
ICAgIH0NCiAgICAgIHJldHVybiBfX291dDsNCiAgICB9DQoNCg0KICB0ZW1w
bGF0ZSA8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPGNoYXIs
IF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFy
LCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQ0KICAgIHsNCiAgICAgIHR5
cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1f
dHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkg
X19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsN
CiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
c3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOw0KICAgICAgICAgICAg
ICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGlu
X2FsbG9jYShfX3cgKyAxKSk7DQogICAgICAgICAgICAgIF9fcGFkc1swXSA9
IF9fYzsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7DQog
ICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikNCiAgICAgICAgICAgICAg
ICB7DQogICAgICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3Bh
ZHMsICZfX2MsIF9fdywgX19sZW4pOw0KICAgICAgICAgICAgICAgICAgX19s
ZW4gPSBfX3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBf
X291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsNCiAgICAgICAgICAgICAgX19v
dXQud2lkdGgoMCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg
ICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg
ICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg
ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gX19vdXQ7DQog
ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpDQogICAgew0KICAgICAg
dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry
ZWFtX3R5cGU7DQogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2Vu
dHJ5IF9fY2VyYihfX291dCk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg
ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAg
ICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsNCiAgICAgICAg
ICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihf
X2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7DQogICAg
ICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJl
YW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7DQogICAgICAgICAgICAg
IGlmIChfX3cgPiBfX2xlbikNCiAgICAgICAgICAgICAgICB7DQogICAgICAg
ICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9fcywgX193
LCBfX2xlbik7DQogICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7DQog
ICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsNCiAgICAgICAgICAgICAg
ICB9DQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOw0K
ICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsNCiAgICAgICAgICAgIH0N
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAg
ICAgIHsNCg0KDQogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAg
ICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAg
IHJldHVybiBfX291dDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykN
CiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiBfX29zdHJlYW1fdHlwZTsNCg0KDQogICAgICB0eXBlZGVmIGNo
YXJfdHJhaXRzPGNoYXI+IF9fY3RyYWl0c190eXBlOw0KDQogICAgICB0eXBl
bmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7DQog
ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgc2l6ZV90
IF9fY2xlbiA9IF9fY3RyYWl0c190eXBlOjpsZW5ndGgoX19zKTsNCiAgICAg
ICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1
aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fY2xlbiArIDEpKSk7
DQogICAgICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDw9IF9fY2xl
bjsgKytfX2kpDQogICAgICAgICAgICBfX3dzW19faV0gPSBfX291dC53aWRl
bihfX3NbX19pXSk7DQogICAgICAgICAgX0NoYXJUKiBfX3N0ciA9IF9fd3M7
DQoNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg
ICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+
KF9fY2xlbik7DQogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19v
dXQud2lkdGgoKTsNCiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBz
dGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihf
Q2hhclQpICogX193KSk7DQoNCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9f
bGVuKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9f
cGFkX2NoYXIoX19vdXQsIF9fcGFkcywgX193cywgX193LCBfX2xlbik7DQog
ICAgICAgICAgICAgICAgICBfX3N0ciA9IF9fcGFkczsNCiAgICAgICAgICAg
ICAgICAgIF9fbGVuID0gX193Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAg
ICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsNCiAgICAgICAg
ICAgICAgX19vdXQud2lkdGgoMCk7DQogICAgICAgICAgICB9DQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN
Cg0KICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsNCiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo
cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g
X19vdXQ7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4N
CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAgIG9wZXJh
dG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNv
bnN0IGNoYXIqIF9fcykNCiAgICB7DQogICAgICB0eXBlZGVmIGJhc2ljX29z
dHJlYW08Y2hhciwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7DQogICAgICB0
eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7
DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5
DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193
ID0gX19vdXQud2lkdGgoKTsNCiAgICAgICAgICAgICAgY2hhciogX19wYWRz
ID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7
DQogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2Fz
dDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7DQogICAgICAg
ICAgICAgIGlmIChfX3cgPiBfX2xlbikNCiAgICAgICAgICAgICAgICB7DQog
ICAgICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9f
cywgX193LCBfX2xlbik7DQogICAgICAgICAgICAgICAgICBfX3MgPSBfX3Bh
ZHM7DQogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsNCiAgICAgICAg
ICAgICAgICB9DQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19s
ZW4pOw0KICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsNCiAgICAgICAg
ICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAg
ICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9fb3V0
LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAg
ICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0N
CiAgICAgIHJldHVybiBfX291dDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog
ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
IF9fb3V0LA0KICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpDQogICAgew0KICAgICAg
dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry
ZWFtX3R5cGU7DQogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2Vu
dHJ5IF9fY2VyYihfX291dCk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg
ICB7DQogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRh
KCk7DQogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgp
Ow0KICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0No
YXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykp
Ow0KICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxz
dHJlYW1zaXplPihfX3N0ci5zaXplKCkpOw0KDQoNCg0KICAgICAgICAgIGlm
IChfX3cgPiBfX2xlbikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
X19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4pOw0K
ICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7DQogICAgICAgICAgICAgIF9f
bGVuID0gX193Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIHN0cmVhbXNp
emUgX19yZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbGVuKTsN
CiAgICAgICAgICBfX291dC53aWR0aCgwKTsNCiAgICAgICAgICBpZiAoX19y
ZXMgIT0gX19sZW4pDQogICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZmFpbGJpdCk7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX291
dDsNCiAgICB9DQp9DQojIDI3OSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMiAzDQojIDQxICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJl
YW0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJlYW0uaCIg
Mw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9pb3MuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAyIDMNCiMgMSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1z
b2xhcmlzMi43L2JpdHMvc3RkX2xpbWl0cy5oIiAxIDMNCiMgNDEgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFt
LmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNzIGJh
c2ljX2lzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJU
LCBfVHJhaXRzPg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVk
ZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOw0KICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsNCiAg
ICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsNCg0KDQogICAgICB0
eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3Ry
ZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQs
IF9UcmFpdHM+IF9faW9zX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsNCiAgICAg
IHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+
IF9faXN0cmVhbWJ1Zl9pdGVyOw0KICAgICAgdHlwZWRlZiBudW1fZ2V0PF9D
aGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7DQogICAg
ICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOw0KDQogICAg
cHJvdGVjdGVkOg0KDQogICAgICBzdHJlYW1zaXplIF9NX2djb3VudDsNCg0K
ICAgIHB1YmxpYzoNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGJhc2ljX2lz
dHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikNCiAgICAgIHsNCiAgICAg
ICAgdGhpcy0+aW5pdChfX3NiKTsNCiAgICAgICAgX01fZ2NvdW50ID0gc3Ry
ZWFtc2l6ZSgwKTsNCiAgICAgIH0NCg0KICAgICAgdmlydHVhbA0KICAgICAg
fmJhc2ljX2lzdHJlYW0oKQ0KICAgICAgeyBfTV9nY291bnQgPSBzdHJlYW1z
aXplKDApOyB9DQoNCg0KICAgICAgY2xhc3Mgc2VudHJ5Ow0KICAgICAgZnJp
ZW5kIGNsYXNzIHNlbnRyeTsNCg0KDQoNCiAgICAgIF9faXN0cmVhbV90eXBl
Jg0KICAgICAgb3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShf
X2lzdHJlYW1fdHlwZSYpKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQog
ICAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlw
ZSYpKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRv
cj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpOw0KDQoNCiAgICAg
IF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+Pihib29sJiBfX24p
Ow0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4o
c2hvcnQmIF9fbik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAg
b3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKTsNCg0KICAgICAgX19p
c3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsNCg0K
ICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcj4+KHVuc2ln
bmVkIGludCYgX19uKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAg
ICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7DQoNCiAgICAgIF9faXN0cmVhbV90
eXBlJg0KICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pOw0K
IyAxMjYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9pc3RyZWFtLmgiIDMNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAg
ICAgb3BlcmF0b3I+PihmbG9hdCYgX19mKTsNCg0KICAgICAgX19pc3RyZWFt
X3R5cGUmDQogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19mKTsNCg0KICAg
ICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91
YmxlJiBfX2YpOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9w
ZXJhdG9yPj4odm9pZComIF9fcCk7DQoNCiAgICAgIF9faXN0cmVhbV90eXBl
Jg0KICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsN
Cg0KDQogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQ0KICAgICAgZ2NvdW50KHZv
aWQpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9nY291bnQ7IH0NCg0KICAg
ICAgaW50X3R5cGUNCiAgICAgIGdldCh2b2lkKTsNCg0KICAgICAgX19pc3Ry
ZWFtX3R5cGUmDQogICAgICBnZXQoY2hhcl90eXBlJiBfX2MpOw0KDQogICAg
ICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywg
c3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsNCg0KICAgICAg
aW5saW5lIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0KGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbikNCiAgICAgIHsgcmV0dXJuIGdldChfX3Ms
IF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9DQoNCiAgICAgIF9faXN0cmVh
bV90eXBlJg0KICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNo
YXJfdHlwZSBfX2RlbGltKTsNCg0KICAgICAgaW5saW5lIF9faXN0cmVhbV90
eXBlJg0KICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IpDQogICAg
ICB7IHJldHVybiBnZXQoX19zYiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9DQoN
CiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0bGluZShjaGFyX3R5
cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsN
Cg0KICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0bGlu
ZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQogICAgICB7IHJl
dHVybiBnZXRsaW5lKF9fcywgX19uLCB0aGlzLT53aWRlbignXG4nKSk7IH0N
Cg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBpZ25vcmUoc3RyZWFt
c2l6ZSBfX24gPSAxLCBpbnRfdHlwZSBfX2RlbGltID0gdHJhaXRzX3R5cGU6
OmVvZigpKTsNCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHBlZWsodm9pZCk7
DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgcmVhZChjaGFyX3R5
cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQogICAgICBzdHJlYW1zaXpl
DQogICAgICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
X24pOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIHB1dGJhY2so
Y2hhcl90eXBlIF9fYyk7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAg
ICAgdW5nZXQodm9pZCk7DQoNCiAgICAgIGludA0KICAgICAgc3luYyh2b2lk
KTsNCg0KICAgICAgcG9zX3R5cGUNCiAgICAgIHRlbGxnKHZvaWQpOw0KDQog
ICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIHNlZWtnKHBvc190eXBlKTsN
Cg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBzZWVrZyhvZmZfdHlw
ZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOw0KDQogICAgcHJpdmF0ZToNCg0KDQog
ICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPShjb25zdCBf
X2lzdHJlYW1fdHlwZSYpOw0KDQogICAgICBiYXNpY19pc3RyZWFtKGNvbnN0
IF9faXN0cmVhbV90eXBlJik7DQoNCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQ0KICAgIHsN
CiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5
cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsNCiAg
ICAgIHR5cGVkZWYgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0
eXBlX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Omlu
dF90eXBlIF9faW50X3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBz
ZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBi
b29sIF9fbm9za2lwd3MgPSBmYWxzZSk7DQoNCiAgICAgIG9wZXJhdG9yIGJv
b2woKSB7IHJldHVybiBfTV9vazsgfQ0KDQogICAgcHJpdmF0ZToNCiAgICAg
IGJvb2wgX01fb2s7DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKTsNCg0K
ICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08
Y2hhciwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFt
PGNoYXIsIF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyJiBfX2MpDQog
ICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4o
X19jKSk7IH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJh
c2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+Pihi
YXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hh
ciYgX19jKQ0KICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhciY+KF9fYykpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpOw0KDQogIHRl
bXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxjaGFy
LF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFy
LF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyKiBfX3MpDQogICAgeyBy
ZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19zKSk7
IH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX2lz
dHJlYW08Y2hhcixfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
dHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykN
CiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIq
PihfX3MpKTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtDQog
ICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LA0K
ICAgICAgcHVibGljIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPg0K
ICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAg
dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry
ZWFtX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBiYXNpY19pb3N0
cmVhbShiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikN
CiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiksIF9fb3N0cmVhbV90eXBl
KF9fc2IpDQogICAgICB7IH0NCg0KICAgICAgdmlydHVhbA0KICAgICAgfmJh
c2ljX2lvc3RyZWFtKCkgeyB9DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgd3MoYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzKTsNCn0NCg0KDQoNCg0KIyAxICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9pc3RyZWFt
LnRjYyIgMSAzDQojIDMyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9pc3RyZWFtLnRjYyIgMw0KIyAxICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDEgMw0K
IyAzMyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
aXN0cmVhbS50Y2MiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAxIDMNCiMgMzQgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0u
dGNjIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6Og0KICAgIHNlbnRyeShi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19u
b3NraXB3cykNCiAgICB7DQogICAgICBpZiAoX19pbi5nb29kKCkpDQogICAg
ICAgIHsNCiAgICAgICAgICBpZiAoX19pbi50aWUoKSkNCiAgICAgICAgICAg
IF9faW4udGllKCktPmZsdXNoKCk7DQogICAgICAgICAgaWYgKCFfX25vc2tp
cHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkNCiAg
ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBf
X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgICAgICAgY29u
c3QgX19jdHlwZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBl
X2lvcygpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni
ID0gX19pbi5yZGJ1ZigpOw0KICAgICAgICAgICAgICBfX2ludF90eXBlIF9f
YyA9IF9fc2ItPnNnZXRjKCk7DQoNCiAgICAgICAgICAgICAgd2hpbGUgKF9f
YyAhPSBfX2VvZiAmJiBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwg
X19jKSkNCiAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsN
Cg0KDQoNCiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikNCiAgICAg
ICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0K
DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgaWYgKF9faW4u
Z29vZCgpKQ0KICAgICAgICBfTV9vayA9IHRydWU7DQogICAgICBlbHNlDQog
ICAgICAgIHsNCiAgICAgICAgICBfTV9vayA9IGZhbHNlOw0KICAgICAgICAg
IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgICB9
DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg
ICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVh
bV90eXBlJikpDQogICAgew0KICAgICAgX19wZigqdGhpcyk7DQogICAgICBy
ZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZiko
X19pb3NfdHlwZSYpKQ0KICAgIHsNCiAgICAgIF9fcGYoKnRoaXMpOw0KICAg
ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3Bm
KShpb3NfYmFzZSYpKQ0KICAgIHsNCiAgICAgIF9fcGYoKnRoaXMpOw0KICAg
ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pihib29sJiBfX24pDQogICAg
ew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAg
aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAg
ICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy
ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAg
ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0K
ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRo
aXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShfX2Vycik7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAg
ICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAg
fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVy
YXRvcj4+KHNob3J0JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl
KGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2No
ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2Zu
dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAg
ICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg
ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg
ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog
ICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0
JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs
c2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAg
IHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpn
b29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N
X2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq
dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAgICB9DQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN
Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo
cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g
KnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoNCiAgICBvcGVyYXRvcj4+KGludCYgX19uKQ0KICAgIHsNCiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIp
DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz
ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAg
IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAg
ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg
X19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0K
ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pih1bnNp
Z25lZCBpbnQmIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0
aGlzLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQog
ICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9z
X2Jhc2U6Omdvb2RiaXQpOw0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf
ZmFjZXQoX01fZm51bWdldCkpDQogICAgICAgICAgICAgICAgX01fZm51bWdl
dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7DQogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsNCiAgICAgICAgICAgIH0N
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAg
ICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAg
ICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAg
IHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQ0KICAgIHsN
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlm
IChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg
ICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg
PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAg
ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAg
ICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlz
LCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
X19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAg
ICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0N
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0
b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pDQogICAgew0KICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg
ICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp
b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAg
IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24p
Ow0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAg
ICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
DQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0K
ICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAg
ICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KIyAzNDQgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNj
IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVy
YXRvcj4+KGZsb2F0JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl
KGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2No
ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2Zu
dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAg
ICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg
ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg
ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog
ICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19uKQ0K
ICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAg
ICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAg
ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUg
X19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7
DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0
KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAs
ICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAg
ICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0K
ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAg
b3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19uKQ0KICAgIHsNCiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIp
DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz
ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAg
IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAg
ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg
X19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0K
ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pih2b2lk
KiYgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh
bHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAg
ICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6
Z29vZGJpdCk7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf
TV9mbnVtZ2V0KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQo
KnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0K
DQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0
aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJu
ICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6DQogICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0
KQ0KICAgIHsNCiAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7DQogICAg
ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0aGlzLT5yZGJ1ZigpOw0K
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYg
KF9fc2JvdXQgJiYgX19jZXJiKQ0KICAgICAgICBfX3h0cmN0ID0gX19jb3B5
X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7DQogICAgICBp
ZiAoIV9fc2JvdXQgfHwgIV9feHRyY3QpDQogICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiAqdGhpczsN
CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6aW50X3R5cGUNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46Og0KICAgIGdldCh2b2lkKQ0KICAgIHsNCiAgICAgIGNvbnN0IGludF90
eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgaW50X3R5
cGUgX19jID0gX19lb2Y7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJi
KQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQog
ICAgICAgICAgICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOw0K
DQogICAgICAgICAgICAgIGlmIChfX2MgIT0gX19lb2YpDQogICAgICAgICAg
ICAgICAgX01fZ2NvdW50ID0gMTsNCiAgICAgICAgICAgICAgZWxzZQ0KICAg
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQg
fCBpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN
Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo
cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g
X19jOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
DQogICAgZ2V0KGNoYXJfdHlwZSYgX19jKQ0KICAgIHsNCiAgICAgIF9NX2dj
b3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsN
CiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkN
CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg
X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgICAgICAgIGlu
dF90eXBlIF9fYnVmdmFsID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7DQoN
CiAgICAgICAgICAgICAgaWYgKF9fYnVmdmFsICE9IF9fZW9mKQ0KICAgICAg
ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7
DQogICAgICAgICAgICAgICAgICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hh
cl90eXBlKF9fYnVmdmFsKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAg
ICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAg
ICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K
ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg
ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
fQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6DQogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBz
dHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pDQogICAgew0KICAg
ICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs
IHRydWUpOw0KICAgICAgaWYgKF9fY2VyYiAmJiBfX24gPiAxKQ0KICAgICAg
ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAg
ICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRv
X2ludF90eXBlKF9fZGVsaW0pOw0KICAgICAgICAgICAgICBjb25zdCBpbnRf
dHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgICAg
ICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7DQog
ICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOw0K
ICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRl
bGltOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBf
X2VvZjsNCg0KICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19u
IC0gMSAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkNCiAgICAgICAg
ICAgICAgICB7DQogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNf
dHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7DQogICAgICAgICAgICAgICAgICAr
K19NX2djb3VudDsNCiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNi
dW1wYygpOw0KICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09
IF9fZW9mOw0KICAgICAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2Mg
PT0gX19pZGVsaW07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
ICBpZiAoX190ZXN0ZGVsaW0gfHwgX01fZ2NvdW50ID09IF9fbiAtIDEpDQog
ICAgICAgICAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7DQogICAgICAg
ICAgICAgIGlmIChfX3Rlc3Rlb2YpDQogICAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAgICAgICAgICB9DQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAg
ICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAg
ICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAq
X19zID0gY2hhcl90eXBlKCk7DQogICAgICBpZiAoIV9NX2djb3VudCkNCiAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAg
ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6DQogICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2Is
IGNoYXJfdHlwZSBfX2RlbGltKQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9
IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAg
IGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpbnRfdHlwZSBf
X2M7DQogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0g
dGhpcy0+cmRidWYoKTsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsN
CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFp
dHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQogICAgICAgICAgICAg
IGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0K
ICAgICAgICAgICAgICBfX2MgPSBfX3RoaXNfc2ItPnNidW1wYygpOw0KICAg
ICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGlt
Ow0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2Vv
ZjsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSB0cnVlOw0KDQog
ICAgICAgICAgICAgIHdoaWxlICghX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxp
bQ0KICAgICAgICAgICAgICAgICAgICAmJiAoX190ZXN0cHV0ID0gX19zYi5z
cHV0Yyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpDQogICAgICAg
ICAgICAgICAgICAgICAgICAgIT0gX19lb2YpKQ0KICAgICAgICAgICAgICAg
IHsNCiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Ow0KICAgICAgICAg
ICAgICAgICAgX19jID0gX190aGlzX3NiLT5zYnVtcGMoKTsNCiAgICAgICAg
ICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCiAgICAgICAg
ICAgICAgICAgIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOw0KICAg
ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKF9fdGVzdGRlbGlt
IHx8ICFfX3Rlc3RwdXQpDQogICAgICAgICAgICAgICAgX190aGlzX3NiLT5z
cHV0YmFja2ModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsNCiAg
ICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAgICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCiAgICAgICAgICAg
IH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAg
ICAgICAgIHsNCg0KICAgICAgICAgICAgICBfX3RoaXNfc2ItPnNwdXRiYWNr
Yyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOw0KICAgICAgICAg
ICAgfQ0KICAgICAgICB9DQogICAgICBpZiAoIV9NX2djb3VudCkNCiAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAg
cmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6DQogICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFt
c2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQ0KICAgIHsNCiAgICAgIF9N
X2djb3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl
KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0
cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19zdHJlYW1idWZf
dHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7DQogICAgICAgICAgICAgIGlu
dF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOw0KICAgICAgICAgICAgICAr
K19NX2djb3VudDsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19p
ZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQog
ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5
cGU6OmVvZigpOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0g
X19jID09IF9faWRlbGltOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVv
ZiA9IF9fYyA9PSBfX2VvZjsNCg0KICAgICAgICAgICAgICB3aGlsZSAoX01f
Z2NvdW50IDwgX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQ0K
ICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICpfX3MrKyA9
IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAg
ICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOw0KICAgICAgICAgICAgICAg
ICAgKytfTV9nY291bnQ7DQogICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2Yg
PSBfX2MgPT0gX19lb2Y7DQogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxp
bSA9IF9fYyA9PSBfX2lkZWxpbTsNCiAgICAgICAgICAgICAgICB9DQoNCiAg
ICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAgICAgICAgICAgICAgICB7
DQogICAgICAgICAgICAgICAgICAtLV9NX2djb3VudDsNCiAgICAgICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0KICAg
ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZSBpZiAoIV9fdGVz
dGRlbGltKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAg
IC0tX01fZ2NvdW50Ow0KICAgICAgICAgICAgICAgICAgX19zYi0+c3B1dGJh
Y2tjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7DQogICAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7
DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv
dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgKl9fcyA9IGNo
YXJfdHlwZSgpOw0KICAgICAgaWYgKCFfTV9nY291bnQpDQogICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVy
biAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46Og0KICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19k
ZWxpbSkNCiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiICYm
IF9fbiA+IDApDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg
ICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0g
PSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQogICAgICAg
ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv
ZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0g
dGhpcy0+cmRidWYoKTsNCiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0g
X19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVs
aW0gPSBfX2MgPT0gX19pZGVsaW07DQogICAgICAgICAgICAgIGJvb2wgX190
ZXN0ZW9mID0gX19jID09IF9fZW9mOw0KDQogICAgICAgICAgICAgIF9fbiA9
IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7
DQogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24gLSAxICYm
ICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQ0KICAgICAgICAgICAgICAg
IHsNCiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Ow0KICAgICAgICAg
ICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAg
ICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQogICAgICAgICAgICAg
ICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsNCiAgICAgICAg
ICAgICAgICB9DQogICAgICAgICAgICAgIGlmICgoX01fZ2NvdW50ID09IF9f
biAtIDEgJiYgIV9fdGVzdGVvZikgfHwgX190ZXN0ZGVsaW0pDQogICAgICAg
ICAgICAgICAgKytfTV9nY291bnQ7DQogICAgICAgICAgICAgIGlmIChfX3Rl
c3Rlb2YpDQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmVvZmJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg
ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog
ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OmludF90eXBlDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoNCiAgICBwZWVrKHZvaWQpDQogICAgew0KICAgICAgaW50X3R5cGUgX19j
ID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgX01fZ2NvdW50ID0gMDsN
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYg
KF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAg
ICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0YygpOyB9DQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN
Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo
cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g
X19jOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
DQogICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQog
ICAgew0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
ew0KICAgICAgICAgIGlmIChfX24gPiAwKQ0KICAgICAgICAgICAgew0KICAg
ICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAg
ICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl
b2YoKTsNCiAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f
c2IgPSB0aGlzLT5yZGJ1ZigpOw0KICAgICAgICAgICAgICAgICAgaW50X3R5
cGUgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgICAgICBi
b29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCg0KICAgICAgICAgICAg
ICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVv
ZikNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAg
ICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsN
CiAgICAgICAgICAgICAgICAgICAgICArK19NX2djb3VudDsNCiAgICAgICAg
ICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAgICAgICAg
ICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQogICAg
ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIGlmIChfX3Rl
c3Rlb2YpDQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAg
ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCg0KICAg
ICAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19j
aGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgICAgICAgICArK19NX2dj
b3VudDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg
IH0NCiAgICAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQog
ICAgICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAg
ICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGVs
c2UNCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp
Ow0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFt
c2l6ZQ0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQog
ICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0K
ICAgIHsNCiAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5
cGU6OmVvZigpOw0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg
ICAgICAgew0KICAgICAgICAgIGlmIChfX24gPiAwKQ0KICAgICAgICAgICAg
ew0KICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAg
ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYo
KS0+aW5fYXZhaWwoKTsNCiAgICAgICAgICAgICAgICAgIGlmIChfX251bSAh
PSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2VvZikpDQogICAgICAgICAg
ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICBfX251bSA9IG1p
bihfX251bSwgX19uKTsNCiAgICAgICAgICAgICAgICAgICAgICBfTV9nY291
bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsNCiAgICAg
ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgZWxzZQ0KICAg
ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m
Yml0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgICAgIHsNCg0KDQog
ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsNCiAgICAgICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAg
ICAgICAgdGhyb3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
fQ0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiBfTV9nY291
bnQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoN
CiAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpDQogICAgew0KICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0K
ICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAg
ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6
OmVvZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni
ID0gdGhpcy0+cmRidWYoKTsNCiAgICAgICAgICAgICAgaWYgKCFfX3NiIHx8
IF9fc2ItPnNwdXRiYWNrYyhfX2MpID09IF9fZW9mKQ0KICAgICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAg
ICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K
ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg
ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
fQ0KICAgICAgZWxzZQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICB1bmdldCh2b2lk
KQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9IDA7DQogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg
ICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAg
ICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m
KCk7DQogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0
aGlzLT5yZGJ1ZigpOw0KICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19l
b2YgPT0gX19zYi0+c3VuZ2V0YygpKQ0KICAgICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgfQ0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAg
ICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAg
ICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAg
ZWxzZQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp
dCk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBpbnQN
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHN5
bmModm9pZCkNCiAgICB7DQogICAgICBpbnQgX19yZXQgPSB0cmFpdHNfdHlw
ZTo6ZW9mKCk7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAg
ICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAg
ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1Zigp
Ow0KICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19yZXQgPT0gX19zYi0+
cHVic3luYygpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBlbHNlDQogICAgICAg
ICAgICAgICAgX19yZXQgPSAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv
dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9f
cmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+DQogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQ0KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6DQogICAgdGVsbGcodm9pZCkNCiAgICB7DQog
ICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsNCiAgICAgIF9N
X2djb3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl
KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0
cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICBfX3JldCA9IHRoaXMt
PnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jh
c2U6OmluKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAg
ICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9
DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0K
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgc2Vl
a2cocG9zX3R5cGUgX19wb3MpDQogICAgew0KICAgICAgX01fZ2NvdW50ID0g
MDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAg
aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAg
ICAgICAgew0KDQoNCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0
aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4p
Ow0KDQoNCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9m
Zl90eXBlKC0xKSkpDQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
ZmFpbGJpdCk7DQoNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAg
ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAg
ICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAg
ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYN
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHNl
ZWtnKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikN
CiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg
ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQoNCg0KICAgICAg
ICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNl
ZWtvZmYoX19vZmYsIF9fZGlyLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlu
KTsNCg0KDQogICAgICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShv
ZmZfdHlwZSgtMSkpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGZhaWxiaXQpOw0KDQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg
ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog
ICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpDQogICAgew0KICAgICAgdHlwZWRl
ZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5
cGU7DQogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9f
Y2VyYihfX2luLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg
ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7IF9faW4uZ2V0KF9f
Yyk7IH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAg
ICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgoX19pbi5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg
ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog
ICAgICBlbHNlDQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZh
aWxiaXQpOw0KICAgICAgcmV0dXJuIF9faW47DQogICAgfQ0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+
PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFy
VCogX19zKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBf
X3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
aXRzOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0
eXBlX3R5cGU7DQogICAgICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0gMDsN
Cg0KICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2Nl
cmIoX19pbiwgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KDQogICAgICAgICAg
ICAgIHN0cmVhbXNpemUgX19udW0gPSBfX2luLndpZHRoKCk7DQogICAgICAg
ICAgICAgIGlmIChfX251bSA9PSAwKQ0KICAgICAgICAgICAgICAgIF9fbnVt
ID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCgpOw0KDQogICAg
ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVm
KCk7DQogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19jdHlw
ZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsNCiAgICAgICAgICAgICAg
aW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAg
IGNvbnN0IGludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAg
ICAgICAgICAgIGJvb2wgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9i
YXNlOjpzcGFjZSwgX19jKTsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rl
b2YgPSBfX2MgPT0gX19lb2Y7DQoNCiAgICAgICAgICAgICAgd2hpbGUgKF9f
ZXh0cmFjdGVkIDwgX19udW0gLSAxICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVz
dHNwKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICpf
X3MrKyA9IF9fYzsNCiAgICAgICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7
DQogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAg
ICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCiAg
ICAgICAgICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5cGVf
YmFzZTo6c3BhY2UsIF9fYyk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAg
ICAgICAgICAgIGlmICghX190ZXN0ZW9mKQ0KICAgICAgICAgICAgICAgIF9f
c2ItPnNwdXRiYWNrYyhfX2MpOw0KICAgICAgICAgICAgICBlbHNlDQogICAg
ICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsN
Cg0KDQoNCiAgICAgICAgICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOw0KDQog
ICAgICAgICAgICAgIF9faW4ud2lkdGgoMCk7DQogICAgICAgICAgICB9DQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAg
ICB7DQoNCg0KICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAg
ICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgaWYg
KCFfX2V4dHJhY3RlZCkNCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFz
ZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gX19pbjsNCiAgICB9DQoNCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mDQogICAgd3Mo
YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faW4pDQogICAgew0K
ICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g
X19pc3RyZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0
cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7
DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0
eXBlX3R5cGUgX19jdHlwZV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsNCiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmNoYXJfdHlwZSBf
X2NoYXJfdHlwZTsNCg0KICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9
IF9faW4ucmRidWYoKTsNCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19j
dHlwZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsNCiAgICAgIGNvbnN0
IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsNCiAgICAgIF9f
aW50X3R5cGUgX19jOw0KICAgICAgYm9vbCBfX3Rlc3Rlb2Y7DQogICAgICBi
b29sIF9fdGVzdHNwOw0KDQogICAgICBkbw0KICAgICAgICB7DQogICAgICAg
ICAgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgX190ZXN0ZW9m
ID0gX19jID09IF9fZW9mOw0KICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlw
ZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7DQogICAgICAgIH0NCiAg
ICAgIHdoaWxlICghX190ZXN0ZW9mICYmIF9fdGVzdHNwKTsNCg0KICAgICAg
aWYgKCFfX3Rlc3Rlb2YgJiYgIV9fdGVzdHNwKQ0KICAgICAgICBfX3NiLT5z
cHV0YmFja2MoX19jKTsNCiAgICAgIGVsc2UNCiAgICAgICAgX19pbi5zZXRz
dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCg0KICAgICAgcmV0dXJuIF9faW47
DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLA0KICAgICAgICAgICAg
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19z
dHIpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOw0K
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJl
YW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVf
dHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOw0KICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7
DQogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7DQoNCiAgICAg
IHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4s
IGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAg
ICAgICBfX3N0ci5lcmFzZSgpOw0KICAgICAgICAgIHN0cmVhbXNpemUgX193
ID0gX19pbi53aWR0aCgpOw0KICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbjsN
CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXpl
X3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOw0KDQogICAgICAgICAg
X19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsNCiAgICAg
ICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dl
dF9mY3R5cGVfaW9zKCk7DQogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBf
X3NiLT5zYnVtcGMoKTsNCiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9f
ZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAgICAgICAgYm9vbCBfX3Rlc3Rz
cCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOw0KICAg
ICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOw0KDQogICAg
ICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19uICYmICFfX3Rlc3Rlb2Yg
JiYgIV9fdGVzdHNwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBf
X3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAg
ICAgICAgKytfX2V4dHJhY3RlZDsNCiAgICAgICAgICAgICAgX19jID0gX19z
Yi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9
PSBfX2VvZjsNCiAgICAgICAgICAgICAgX190ZXN0c3AgPSBfX2N0eXBlLT5p
cyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgICBpZiAoIV9fdGVzdGVvZikNCiAgICAgICAgICAgIF9fc2ItPnNw
dXRiYWNrYyhfX2MpOw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIF9f
aW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAgICAgICAgX19p
bi53aWR0aCgwKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGlmICghX19leHRy
YWN0ZWQpDQogICAgICAgIF9faW4uc2V0c3RhdGUgKGlvc19iYXNlOjpmYWls
Yml0KTsNCg0KICAgICAgcmV0dXJuIF9faW47DQogICAgfQ0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYNCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19pbiwNCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkNCiAgICB7
DQogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiBfX2lzdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19p
c3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7DQogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBl
IF9fc3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
aXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOw0KICAg
ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+IF9fc3RyaW5nX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
c3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsNCg0KICAgICAg
X19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOw0KICAgICAgYm9vbCBfX3Rl
c3RkZWxpbSA9IGZhbHNlOw0KICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5
cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgdHJ1ZSk7DQogICAgICBpZiAoX19j
ZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgX19zdHIuZXJhc2UoKTsNCiAg
ICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6ZSgpOw0K
DQogICAgICAgICAgX19pbnRfdHlwZSBfX2lkZWxpbSA9IF9UcmFpdHM6OnRv
X2ludF90eXBlKF9fZGVsaW0pOw0KICAgICAgICAgIF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7DQogICAgICAgICAgX19pbnRfdHlw
ZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAgICAgICAgICBjb25zdCBfX2lu
dF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAgICAgICAgX190
ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07DQogICAgICAgICAgYm9vbCBf
X3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQoNCiAgICAgICAgICB3aGlsZSAo
X19leHRyYWN0ZWQgPD0gX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRl
bGltKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX3N0ciArPSBf
VHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgKytf
X2V4dHJhY3RlZDsNCiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBj
KCk7DQogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsN
CiAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07
DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAg
ICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQog
ICAgICAgIH0NCiAgICAgIGlmICghX19leHRyYWN0ZWQgJiYgIV9fdGVzdGRl
bGltKQ0KICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0
KTsNCiAgICAgIHJldHVybiBfX2luOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTxj
bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4NCiAg
ICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mDQogICAg
Z2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4s
DQogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0Fs
bG9jPiYgX19zdHIpDQogICAgeyByZXR1cm4gZ2V0bGluZShfX2luLCBfX3N0
ciwgX19pbi53aWRlbignXG4nKSk7IH0NCn0NCiMgMjkxICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAy
IDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9pb3N0cmVhbS5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0K
ICBleHRlcm4gaXN0cmVhbSBjaW47DQogIGV4dGVybiBvc3RyZWFtIGNvdXQ7
DQogIGV4dGVybiBvc3RyZWFtIGNlcnI7DQogIGV4dGVybiBvc3RyZWFtIGNs
b2c7DQojIDU3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfaW9zdHJlYW0uaCIgMw0KICBzdGF0aWMgaW9zX2Jhc2U6Oklu
aXQgX19pb2luaXQ7DQp9DQojIDMyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvaW9zdHJlYW0iIDIgMw0KIyAyMyAiYnVmZmVyLmNwcCIg
Mg0KIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNA0KIyAyNCAiYnVm
ZmVyLmNwcCIgMg0KIyAxICJjb21tb24uaCIgMQ0KDQoNCg0KIyAxICJtaXNj
LmgiIDENCiMgNSAiY29tbW9uLmgiIDINCg0KZXh0ZXJuIGludCBjdXJyZW50
TGluZU51bWJlcjsNCmV4dGVybiBpbnQgY3VycmVudE5lc3RpbmdMZXZlbDsN
CiMgMjUgImJ1ZmZlci5jcHAiIDINCiMgMSAiYnVmZmVyLmgiIDENCg0KDQoN
CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JhY2t3
YXJkL2ZzdHJlYW0uaCIgMSAzDQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYmFja3dhcmQvZnN0cmVhbS5oIiAzDQojIDEgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9iYWNr
d2FyZF93YXJuaW5nLmgiIDEgMw0KIyAzMiAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL2ZzdHJlYW0uaCIgMiAzDQojIDEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9m
c3RyZWFtLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2ZzdHJlYW0uaCIgMw0KDQojIDEgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFt
LmgiIDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2ZzdHJlYW0uaCIgMiAzDQojIDEgIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDEg
Mw0KIyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2ZzdHJlYW0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2ZpbGUuaCIgMSAzDQojIDM4
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNp
Y19maWxlLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcu
aCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvYml0cy9iYXNpY19maWxlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDEgMw0KIyA0
MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz
aWNfZmlsZS5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KDQoN
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RydWN0IF9f
YmFzaWNfZmlsZV9iYXNlOiBwdWJsaWMgX19jX2ZpbGVfdHlwZQ0KICAgIHsN
CiAgICAgIHZpcnR1YWwNCiAgICAgIH5fX2Jhc2ljX2ZpbGVfYmFzZSgpIHsg
fTsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIG92ZXJmbG93KGludCBf
X2MgPSAoLTEpKSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICB1
bmRlcmZsb3coKSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICB1
ZmxvdygpID0gMDsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIHBiYWNr
ZmFpbChpbnQgX19jKSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6
ZQ0KICAgICAgeHNwdXRuKGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXpl
IF9fbikgPSAwOw0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAg
IHhzZ2V0bihfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pID0gMDsNCg0K
ICAgICAgdmlydHVhbCBzdHJlYW1vZmYNCiAgICAgIHNlZWtvZmYoc3RyZWFt
b2ZmIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwNCiAgICAgICAg
ICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpp
biB8IGlvc19iYXNlOjpvdXQpID0gMDsNCg0KICAgICAgdmlydHVhbCBzdHJl
YW1vZmYNCiAgICAgIHNlZWtwb3Moc3RyZWFtb2ZmIF9fcG9zLA0KICAgICAg
ICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6
OmluIHwgaW9zX2Jhc2U6Om91dCkgPSAwOw0KDQogICAgICB2aXJ0dWFsIHN0
cmVhbWJ1ZioNCiAgICAgIHNldGJ1ZihfQ2hhclQqIF9fYiwgaW50IF9fbGVu
KSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBzeW5jKCkgPSAw
Ow0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9hbGxvY2F0ZSgpID0g
MDsNCg0KICAgICAgdmlydHVhbCBzdHJlYW1zaXplDQogICAgICBzeXNfcmVh
ZChfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pID0gMDsNCg0KICAgICAg
dmlydHVhbCBzdHJlYW1zaXplDQogICAgICBzeXNfd3JpdGUoY29uc3QgX0No
YXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKSA9IDA7DQoNCiAgICAgIHZpcnR1
YWwgc3RyZWFtb2ZmDQogICAgICBzeXNfc2VlayhzdHJlYW1vZmYgX19vZmYs
IGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5KSA9IDA7DQoNCiAgICAgIHZpcnR1
YWwgaW50DQogICAgICBzeXNfY2xvc2UoKSA9IDA7DQoNCiAgICAgIHZpcnR1
YWwgaW50DQogICAgICBzeXNfc3RhdCh2b2lkKiBfX3YpID0gMDsNCg0KICAg
ICAgdmlydHVhbCBpbnQNCiAgICAgIHNob3dtYW55YygpID0gMDsNCg0KICAg
ICAgdmlydHVhbCB2b2lkDQogICAgICBpbWJ1ZSh2b2lkKiBfX3YpID0gMDsN
CiAgICB9Ow0KDQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4N
Cg0KDQoNCiAgICBjbGFzcyBfX2Jhc2ljX2ZpbGUNCg0KICAgIHsNCg0KICAg
ICAgX19jX2ZpbGVfdHlwZSogX01fY2ZpbGU7DQogICAgICBib29sIF9NX2Nm
aWxlX2NyZWF0ZWQ7DQoNCg0KDQoNCg0KDQogICAgcHVibGljOg0KICAgICAg
X19iYXNpY19maWxlKF9fY19sb2NrKiBfX2xvY2sgPSAwKTsNCg0KICAgICAg
dm9pZA0KICAgICAgX01fb3Blbl9tb2RlKGlvc19iYXNlOjpvcGVubW9kZSBf
X21vZGUsIGludCYgX19wX21vZGUsIGludCYgX19yd19tb2RlLA0KICAgICAg
ICAgICAgICAgICAgIGNoYXIqIF9fY19tb2RlKTsNCg0KDQogICAgICBfX2Jh
c2ljX2ZpbGUqDQogICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9z
X2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgaW50IF9fcHJvdCA9IDA2NjQpOw0K
DQoNCg0KDQoNCiAgICAgIF9fYmFzaWNfZmlsZSoNCiAgICAgIHN5c19vcGVu
KF9fY19maWxlX3R5cGUqIF9fZmlsZSwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9f
bW9kZSk7DQoNCiAgICAgIF9DaGFyVA0KICAgICAgc3lzX2dldGMoKTsNCg0K
ICAgICAgX0NoYXJUDQogICAgICBzeXNfdW5nZXRjKF9DaGFyVCk7DQoNCiAg
ICAgIF9fYmFzaWNfZmlsZSoNCiAgICAgIGNsb3NlKCk7DQoNCiAgICAgIGJv
b2wNCiAgICAgIGlzX29wZW4oKTsNCg0KDQoNCg0KDQogICAgICB2aXJ0dWFs
DQogICAgICB+X19iYXNpY19maWxlKCk7DQoNCiAgICAgIHZpcnR1YWwgaW50
DQogICAgICBvdmVyZmxvdyhpbnQgX19jID0gKC0xKSk7DQoNCiAgICAgIHZp
cnR1YWwgaW50DQogICAgICB1bmRlcmZsb3coKTsNCg0KICAgICAgdmlydHVh
bCBpbnQNCiAgICAgIHVmbG93KCk7DQoNCiAgICAgIHZpcnR1YWwgaW50DQog
ICAgICBwYmFja2ZhaWwoaW50IF9fYyk7DQoNCg0KDQoNCiAgICAgIHZpcnR1
YWwgc3RyZWFtc2l6ZQ0KICAgICAgeHNwdXRuKGNvbnN0IF9DaGFyVCogX19z
LCBzdHJlYW1zaXplIF9fbik7DQoNCg0KDQoNCiAgICAgIHZpcnR1YWwgc3Ry
ZWFtc2l6ZQ0KICAgICAgeHNnZXRuKF9DaGFyVCogX19zLCBzdHJlYW1zaXpl
IF9fbik7DQoNCg0KDQoNCiAgICAgIHZpcnR1YWwgc3RyZWFtb2ZmDQogICAg
ICBzZWVrb2ZmKHN0cmVhbW9mZiBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIg
X193YXksDQogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21v
ZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsNCg0KDQoNCg0K
ICAgICAgdmlydHVhbCBzdHJlYW1vZmYNCiAgICAgIHNlZWtwb3Moc3RyZWFt
b2ZmIF9fcG9zLA0KICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUg
X19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7DQoNCiAg
ICAgIHZpcnR1YWwgc3RyZWFtYnVmKg0KICAgICAgc2V0YnVmKF9DaGFyVCog
X19iLCBpbnQgX19sZW4pOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAg
c3luYygpOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9hbGxvY2F0
ZSgpOw0KDQoNCg0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAg
IHN5c19yZWFkKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbik7DQoNCg0K
DQoNCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQ0KICAgICAgc3lzX3dyaXRl
KGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbik7DQoNCg0KDQoN
CiAgICAgIHZpcnR1YWwgc3RyZWFtb2ZmDQogICAgICBzeXNfc2VlayhzdHJl
YW1vZmYgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5KTsNCg0KICAg
ICAgdmlydHVhbCBpbnQNCiAgICAgIHN5c19jbG9zZSgpOw0KDQogICAgICB2
aXJ0dWFsIGludA0KICAgICAgc3lzX3N0YXQodm9pZCogX192KTsNCg0KICAg
ICAgdmlydHVhbCBpbnQNCiAgICAgIHNob3dtYW55YygpOw0KDQogICAgICB2
aXJ0dWFsIHZvaWQNCiAgICAgIGltYnVlKHZvaWQqIF9fdik7DQogICAgfTsN
Cn0NCg0KDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
LXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYmFzaWNfZmlsZV9tb2Rl
bC5oIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2Jhc2ljX2ZpbGVfbW9k
ZWwuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4NCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6X19iYXNp
Y19maWxlKF9fY19sb2NrKiApDQogICAgOiBfTV9jZmlsZShfX251bGwpLCBf
TV9jZmlsZV9jcmVhdGVkKDA7KSB7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46On5fX2Jhc2lj
X2ZpbGUoKQ0KICAgIHsNCiAgICAgIGlmICh0aGlzLT5pc19vcGVuKCkpDQog
ICAgICAgIHsNCiAgICAgICAgICBmZmx1c2goX01fY2ZpbGUpOw0KICAgICAg
ICAgIHRoaXMtPmNsb3NlKCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHZvaWQNCiAgICBfX2Jhc2lj
X2ZpbGU8X0NoYXJUPjo6X01fb3Blbl9tb2RlKGlvc19iYXNlOjpvcGVubW9k
ZSBfX21vZGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQmICwgaW50JiAsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyKiBfX2NfbW9kZSkNCiAgICB7DQogICAgICBi
b29sIF9fdGVzdGIgPSBfX21vZGUgJiBpb3NfYmFzZTo6YmluYXJ5Ow0KICAg
ICAgYm9vbCBfX3Rlc3RpID0gX19tb2RlICYgaW9zX2Jhc2U6OmluOw0KICAg
ICAgYm9vbCBfX3Rlc3RvID0gX19tb2RlICYgaW9zX2Jhc2U6Om91dDsNCiAg
ICAgIGJvb2wgX190ZXN0dCA9IF9fbW9kZSAmIGlvc19iYXNlOjp0cnVuYzsN
CiAgICAgIGJvb2wgX190ZXN0YSA9IF9fbW9kZSAmIGlvc19iYXNlOjphcHA7
DQoNCiAgICAgIGlmICghX190ZXN0aSAmJiBfX3Rlc3RvICYmICFfX3Rlc3R0
ICYmICFfX3Rlc3RhKQ0KICAgICAgICBzdHJjcHkoX19jX21vZGUsICJ3Iik7
DQogICAgICBpZiAoIV9fdGVzdGkgJiYgX190ZXN0byAmJiAhX190ZXN0dCAm
JiBfX3Rlc3RhKQ0KICAgICAgICBzdHJjcHkoX19jX21vZGUsICJhIik7DQog
ICAgICBpZiAoIV9fdGVzdGkgJiYgX190ZXN0byAmJiBfX3Rlc3R0ICYmICFf
X3Rlc3RhKQ0KICAgICAgICBzdHJjcHkoX19jX21vZGUsICJ3Iik7DQogICAg
ICBpZiAoX190ZXN0aSAmJiAhX190ZXN0byAmJiAhX190ZXN0dCAmJiAhX190
ZXN0YSkNCiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAiciIpOw0KICAgICAg
aWYgKF9fdGVzdGkgJiYgX190ZXN0byAmJiAhX190ZXN0dCAmJiAhX190ZXN0
YSkNCiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAicisiKTsNCiAgICAgIGlm
IChfX3Rlc3RpICYmIF9fdGVzdG8gJiYgX190ZXN0dCAmJiAhX190ZXN0YSkN
CiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAidysiKTsNCiAgICAgIGlmIChf
X3Rlc3RiKQ0KICAgICAgICBzdHJjYXQoX19jX21vZGUsICJiIik7DQogICAg
fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfX2Jhc2lj
X2ZpbGU8X0NoYXJUPioNCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lz
X29wZW4oX19jX2ZpbGVfdHlwZSogX19maWxlLCBpb3NfYmFzZTo6b3Blbm1v
ZGUpDQogICAgew0KICAgICAgX19iYXNpY19maWxlKiBfX3JldCA9IF9fbnVs
bDsNCg0KICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkgJiYgX19maWxlKQ0K
ICAgICAgICB7DQogICAgICAgICAgX01fY2ZpbGUgPSBfX2ZpbGU7DQogICAg
ICAgICAgX01fY2ZpbGVfY3JlYXRlZCA9IDA7Ow0KICAgICAgICAgIF9fcmV0
ID0gdGhpczsNCiAgICAgICAgfQ0KDQogICAgICByZXR1cm4gX19yZXQ7DQog
ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfQ2hh
clQNCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lzX2dldGMoKQ0KICAg
IHsNCiAgICAgIHJldHVybiBnZXRjIChfTV9jZmlsZSk7DQogICAgfQ0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfQ2hhclQNCiAgICBf
X2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lzX3VuZ2V0YyhfQ2hhclQgX19zKQ0K
ICAgIHsNCiAgICAgIHJldHVybiB1bmdldGMgKF9fcywgX01fY2ZpbGUpOw0K
ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgX19i
YXNpY19maWxlPF9DaGFyVD4qDQogICAgX19iYXNpY19maWxlPF9DaGFyVD46
Om9wZW4oY29uc3QgY2hhciogX19uYW1lLCBpb3NfYmFzZTo6b3Blbm1vZGUg
X19tb2RlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAp
DQogICAgew0KICAgICAgX19iYXNpY19maWxlKiBfX3JldCA9IF9fbnVsbDsN
CiAgICAgIGludCBfX3BfbW9kZSA9IDA7DQogICAgICBpbnQgX19yd19tb2Rl
ID0gMDsNCiAgICAgIGNoYXIgX19jX21vZGVbNF07DQoNCiAgICAgIF9NX29w
ZW5fbW9kZShfX21vZGUsIF9fcF9tb2RlLCBfX3J3X21vZGUsIF9fY19tb2Rl
KTsNCg0KICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkpDQogICAgICAgIHsN
CiAgICAgICAgICBpZiAoKF9NX2NmaWxlID0gZm9wZW4oX19uYW1lLCBfX2Nf
bW9kZSkpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfTV9jZmls
ZV9jcmVhdGVkID0gMTs7DQogICAgICAgICAgICAgIF9fcmV0ID0gdGhpczsN
CiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9fcmV0
Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg
Ym9vbA0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+Ojppc19vcGVuKCkgeyBy
ZXR1cm4gX01fY2ZpbGUgIT0gMDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4NCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPioNCiAgICBfX2Jh
c2ljX2ZpbGU8X0NoYXJUPjo6Y2xvc2UoKQ0KICAgIHsNCiAgICAgIF9fYmFz
aWNfZmlsZSogX19yZXR2YWwgPSBzdGF0aWNfY2FzdDxfX2Jhc2ljX2ZpbGUq
PihfX251bGwpOw0KICAgICAgaWYgKF9NX2NmaWxlX2NyZWF0ZWQgJiYgZmNs
b3NlKF9NX2NmaWxlKSkNCiAgICAgICAgX19yZXR2YWwgPSB0aGlzOw0KICAg
ICAgcmV0dXJuIF9fcmV0dmFsOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+DQogICAgc3RyZWFtc2l6ZQ0KICAgIF9fYmFzaWNfZmls
ZTxfQ2hhclQ+Ojp4c2dldG4oX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19u
KQ0KICAgIHsgcmV0dXJuIGZyZWFkKF9fcywgMSwgX19uLCBfTV9jZmlsZSk7
IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFt
c2l6ZQ0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+Ojp4c3B1dG4oY29uc3Qg
X0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgIHsgcmV0dXJuIGZ3
cml0ZShfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPg0KICAgIHN0cmVhbW9mZg0KICAgIF9fYmFzaWNf
ZmlsZTxfQ2hhclQ+OjpzZWVrb2ZmKHN0cmVhbW9mZiBfX29mZiwgaW9zX2Jh
c2U6OnNlZWtkaXIgX193YXksDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlICkNCiAgICB7IGZzZWVrKF9N
X2NmaWxlLCBfX29mZiwgX193YXkpOyByZXR1cm4gZnRlbGwoX01fY2ZpbGUp
OyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHN0cmVh
bW9mZg0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzZWVrcG9zKHN0cmVh
bW9mZiBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpb3NfYmFzZTo6b3Blbm1vZGUgKQ0KICAgIHsgZnNlZWsoX01fY2ZpbGUs
IF9fcG9zLCBpb3NfYmFzZTo6YmVnKTsgcmV0dXJuIGZ0ZWxsKF9NX2NmaWxl
KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbnQN
CiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3luYygpDQogICAgeyByZXR1
cm4gZmZsdXNoKF9NX2NmaWxlKTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPg0KICAgIGludA0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+
OjpvdmVyZmxvdyhpbnQgKQ0KICAgIHsgcmV0dXJuICgtMSk7IH0NCg0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbnQNCiAgICBfX2Jh
c2ljX2ZpbGU8X0NoYXJUPjo6dW5kZXJmbG93KCkNCiAgICB7IHJldHVybiAo
LTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg
aW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnVmbG93KCkNCiAgICB7
IHJldHVybiAoLTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+DQogICAgaW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnBiYWNr
ZmFpbChpbnQgKQ0KICAgIHsgcmV0dXJuICgtMSk7IH0NCg0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBzdHJlYW1idWYqDQogICAgX19i
YXNpY19maWxlPF9DaGFyVD46OnNldGJ1ZihfQ2hhclQqICwgaW50ICkNCiAg
ICB7IHJldHVybiByZWludGVycHJldF9jYXN0PHN0cmVhbWJ1Zio+KHRoaXMp
OyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW50
DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OmRvYWxsb2NhdGUoKQ0KICAg
IHsgcmV0dXJuICgtMSk7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4NCiAgICBzdHJlYW1zaXplDQogICAgX19iYXNpY19maWxlPF9DaGFy
VD46OnN5c19yZWFkKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikNCiAg
ICB7IHJldHVybiBmcmVhZChfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9DQoN
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFtc2l6
ZQ0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzeXNfd3JpdGUoY29uc3Qg
X0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgIHsgcmV0dXJuIGZ3
cml0ZShfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9DQoNCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFtb2ZmDQogICAgX19iYXNp
Y19maWxlPF9DaGFyVD46OnN5c19zZWVrKHN0cmVhbW9mZiBfX3BvcywgaW9z
X2Jhc2U6OnNlZWtkaXIgX193YXkpDQogICAgew0KICAgICAgZnNlZWsoX01f
Y2ZpbGUsIF9fcG9zLCBfX3dheSk7DQogICAgICByZXR1cm4gZnRlbGwoX01f
Y2ZpbGUpOw0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4NCiAgICBpbnQNCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lzX2Ns
b3NlKCkNCiAgICB7IHJldHVybiBmY2xvc2UoX01fY2ZpbGUpOyB9DQoNCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW50DQogICAgX19i
YXNpY19maWxlPF9DaGFyVD46OnN5c19zdGF0KHZvaWQqICkNCiAgICB7IHJl
dHVybiAoLTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
DQogICAgaW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnNob3dtYW55
YygpDQogICAgeyByZXR1cm4gKC0xKTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPg0KICAgIHZvaWQNCiAgICBfX2Jhc2ljX2ZpbGU8X0No
YXJUPjo6aW1idWUodm9pZCogKSB7IH0NCn0NCiMgMjUxICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19maWxlLmgiIDIg
Mw0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2ZzdHJlYW0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzDQojIDQz
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
ZnN0cmVhbS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvZ3Roci5oIiAx
IDMNCiMgNDQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9mc3RyZWFtLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N
CiAgICBjbGFzcyBiYXNpY19maWxlYnVmIDogcHVibGljIGJhc2ljX3N0cmVh
bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoNCg0K
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl
ZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsN
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBl
IG9mZl90eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVm
PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7DQog
ICAgICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcl90eXBlLCB0cmFpdHNf
dHlwZT4gX19maWxlYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIF9fYmFzaWNf
ZmlsZTxjaGFyX3R5cGU+IF9fZmlsZV90eXBlOw0KICAgICAgdHlwZWRlZiB0
eXBlbmFtZSB0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZSBfX3N0YXRlX3R5cGU7
DQogICAgICB0eXBlZGVmIGNvZGVjdnQ8Y2hhcl90eXBlLCBjaGFyLCBfX3N0
YXRlX3R5cGU+IF9fY29kZWN2dF90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfX2NvZGVjdnRfdHlwZTo6cmVzdWx0IF9fcmVzX3R5cGU7DQogICAg
ICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOw0KDQog
ICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7DQoNCiAgICBwcml2YXRlOg0K
DQoNCiAgICAgIF9fZmlsZV90eXBlKiBfTV9maWxlOw0KDQoNCiAgICAgIF9f
c3RhdGVfdHlwZSBfTV9zdGF0ZV9jdXI7DQogICAgICBfX3N0YXRlX3R5cGUg
X01fc3RhdGVfYmVnOw0KDQoNCiAgICAgIF9fY19sb2NrIF9NX2xvY2s7DQoN
Cg0KICAgICAgYm9vbCBfTV9idWZfYWxsb2NhdGVkOw0KDQoNCiAgICAgIGJv
b2wgX01fbGFzdF9vdmVyZmxvd2VkOw0KDQogICAgcHVibGljOg0KDQogICAg
ICBiYXNpY19maWxlYnVmKCk7DQoNCg0KICAgICAgYmFzaWNfZmlsZWJ1Zihf
X2NfZmlsZV90eXBlKiBfX2YsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUs
DQogICAgICAgICAgICAgICAgICAgIGludF90eXBlIF9fcyA9IHN0YXRpY19j
YXN0PGludF90eXBlPigxMDI0KSk7DQoNCiAgICAgIHZpcnR1YWwNCiAgICAg
IH5iYXNpY19maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAgdGhpcy0+Y2xv
c2UoKTsNCiAgICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gMDs7DQogICAg
ICB9DQoNCg0KICAgICAgYm9vbA0KICAgICAgaXNfb3Blbih2b2lkKSBjb25z
dCB7IHJldHVybiBfTV9maWxlID8gX01fZmlsZS0+aXNfb3BlbigpIDogMDs7
IH0NCg0KICAgICAgX19maWxlYnVmX3R5cGUqDQogICAgICBvcGVuKGNvbnN0
IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSk7DQoNCiAg
ICAgIF9fZmlsZWJ1Zl90eXBlKg0KICAgICAgY2xvc2Uodm9pZCk7DQoNCiAg
ICBwcm90ZWN0ZWQ6DQogICAgICB2b2lkDQogICAgICBfTV9hbGxvY2F0ZV9p
bnRlcm5hbF9idWZmZXIoKTsNCg0KICAgICAgdm9pZA0KICAgICAgX01fZGVz
dHJveV9pbnRlcm5hbF9idWZmZXIoKTsNCg0KICAgICAgdm9pZA0KICAgICAg
X01fYWxsb2NhdGVfcGJhY2tfYnVmZmVyKCk7DQoNCg0KICAgICAgdm9pZA0K
ICAgICAgX01fYWxsb2NhdGVfZmlsZSgpOw0KDQoNCiAgICAgIHZpcnR1YWwg
c3RyZWFtc2l6ZQ0KICAgICAgc2hvd21hbnljKHZvaWQpOw0KDQoNCg0KDQoN
CiAgICAgIHZpcnR1YWwgaW50X3R5cGUNCiAgICAgIHVuZGVyZmxvdyh2b2lk
KTsNCg0KICAgICAgdmlydHVhbCBpbnRfdHlwZQ0KICAgICAgcGJhY2tmYWls
KGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsNCiMgMTQ4ICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVh
bS5oIiAzDQogICAgICB2aXJ0dWFsIGludF90eXBlDQogICAgICBvdmVyZmxv
dyhpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7DQojIDE1OCAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2ZzdHJl
YW0uaCIgMw0KICAgICAgaW50X3R5cGUNCiAgICAgIF9NX3JlYWxseV9vdmVy
ZmxvdyhpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7DQoNCiAgICAg
IHZpcnR1YWwgX19zdHJlYW1idWZfdHlwZSoNCiAgICAgIHNldGJ1ZihjaGFy
X3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQogICAgICB2aXJ0dWFs
IHBvc190eXBlDQogICAgICBzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3Nf
YmFzZTo6c2Vla2RpciBfX3dheSwNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6
Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpv
dXQpOw0KDQogICAgICB2aXJ0dWFsIHBvc190eXBlDQogICAgICBzZWVrcG9z
KHBvc190eXBlIF9fcG9zLA0KICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Bl
bm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7
DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBzeW5jKHZvaWQpDQogICAg
ICB7DQogICAgICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAmJiBf
TV9vdXRfYmVnIDwgX01fb3V0X2VuZDsNCiAgICAgICAgaWYgKF9fdGVzdHB1
dCkNCiAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgX01fZmlsZS0+c3lu
YygpOw0KDQoNCg0KDQoNCiAgICAgICAgICAgIHN0cmVhbW9mZiBfX2N1ciA9
IF9NX2ZpbGUtPnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1cik7DQogICAgICAg
ICAgICBvZmZfdHlwZSBfX29mZiA9IF9NX291dF9jdXIgLSBfTV9vdXRfYmVn
Ow0KICAgICAgICAgICAgX01fcmVhbGx5X292ZXJmbG93KCk7DQogICAgICAg
ICAgICBfTV9maWxlLT5zZWVrcG9zKF9fY3VyICsgX19vZmYpOw0KICAgICAg
ICAgIH0NCiAgICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gMDs7DQogICAg
ICAgIHJldHVybiAwOw0KICAgICAgfQ0KDQogICAgICB2aXJ0dWFsIHZvaWQN
CiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KDQogICAgICB2
aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9f
cywgc3RyZWFtc2l6ZSBfX24pDQogICAgICB7DQogICAgICAgIHN0cmVhbXNp
emUgX19yZXQgPSAwOw0KDQogICAgICAgIGlmIChfTV9wYmFja19pbml0KQ0K
ICAgICAgICAgIHsNCiAgICAgICAgICAgIHdoaWxlIChfX3JldCA8IF9fbiAm
JiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpDQogICAgICAgICAgICAgIHsNCiAg
ICAgICAgICAgICAgICAqX19zID0gKl9NX2luX2N1cjsNCiAgICAgICAgICAg
ICAgICArK19fcmV0Ow0KICAgICAgICAgICAgICAgICsrX19zOw0KICAgICAg
ICAgICAgICAgICsrX01faW5fY3VyOw0KICAgICAgICAgICAgICB9DQogICAg
ICAgICAgICBfTV9wYmFja19kZXN0cm95KCk7DQogICAgICAgICAgfQ0KICAg
ICAgICBpZiAoX19yZXQgPCBfX24pDQogICAgICAgICAgX19yZXQgKz0gX19z
dHJlYW1idWZfdHlwZTo6eHNnZXRuKF9fcywgX19uIC0gX19yZXQpOw0KICAg
ICAgICByZXR1cm4gX19yZXQ7DQogICAgICB9DQoNCiAgICAgIHZpcnR1YWwg
c3RyZWFtc2l6ZQ0KICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19z
LCBzdHJlYW1zaXplIF9fbikNCiAgICAgIHsNCiAgICAgICAgX01fcGJhY2tf
ZGVzdHJveSgpOw0KICAgICAgICByZXR1cm4gX19zdHJlYW1idWZfdHlwZTo6
eHNwdXRuKF9fcywgX19uKTsNCiAgICAgIH0NCg0KICAgICAgdm9pZA0KICAg
ICAgX01fb3V0cHV0X3Vuc2hpZnQoKTsNCiAgICB9Ow0KDQoNCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg
Y2xhc3MgYmFzaWNfaWZzdHJlYW0gOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfVHJh
aXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFp
dHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0eXBlZGVmIHR5
cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsNCiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90
eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5
cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZfdHlwZTsNCiAgICAgIHR5cGVk
ZWYgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2lz
dHJlYW1fdHlwZTsNCg0KICAgIHByaXZhdGU6DQogICAgICBfX2ZpbGVidWZf
dHlwZSBfTV9maWxlYnVmOw0KDQogICAgcHVibGljOg0KDQogICAgICBiYXNp
Y19pZnN0cmVhbSgpDQogICAgICA6IF9faXN0cmVhbV90eXBlKF9fbnVsbCks
IF9NX2ZpbGVidWYoKQ0KICAgICAgeyB0aGlzLT5pbml0KCZfTV9maWxlYnVm
KTsgfQ0KDQogICAgICBleHBsaWNpdA0KICAgICAgYmFzaWNfaWZzdHJlYW0o
Y29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0g
aW9zX2Jhc2U6OmluKQ0KICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX251bGwp
LCBfTV9maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAgdGhpcy0+aW5pdCgm
X01fZmlsZWJ1Zik7DQogICAgICAgIHRoaXMtPm9wZW4oX19zLCBfX21vZGUp
Ow0KICAgICAgfQ0KDQogICAgICB+YmFzaWNfaWZzdHJlYW0oKQ0KICAgICAg
eyB9DQoNCg0KICAgICAgX19maWxlYnVmX3R5cGUqDQogICAgICByZGJ1Zigp
IGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90
eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGJvb2wNCiAgICAgIGlz
X29wZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0N
Cg0KICAgICAgdm9pZA0KICAgICAgb3Blbihjb25zdCBjaGFyKiBfX3MsIGlv
c19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pDQogICAg
ICB7DQogICAgICAgIGlmIChfTV9maWxlYnVmLm9wZW4oX19zLCBfX21vZGUg
fCBpb3NfYmFzZTo6aW4pID09IF9fbnVsbCkNCiAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICB9DQoNCiAgICAg
IHZvaWQNCiAgICAgIGNsb3NlKHZvaWQpDQogICAgICB7DQogICAgICAgIGlm
ICghX01fZmlsZWJ1Zi5jbG9zZSgpKQ0KICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIH0NCiAgICB9Ow0KDQoN
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+DQogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW0gOiBwdWJsaWMgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4NCiAgICB7DQogICAgcHVibGljOg0K
DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBl
ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVu
YW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBl
Ow0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5
cGUgb2ZmX3R5cGU7DQoNCg0KICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVm
PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOw0KICAg
ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5
cGU+IF9fb3N0cmVhbV90eXBlOw0KDQogICAgcHJpdmF0ZToNCiAgICAgIF9f
ZmlsZWJ1Zl90eXBlIF9NX2ZpbGVidWY7DQoNCiAgICBwdWJsaWM6DQoNCiAg
ICAgIGJhc2ljX29mc3RyZWFtKCkNCiAgICAgIDogX19vc3RyZWFtX3R5cGUo
X19udWxsKSwgX01fZmlsZWJ1ZigpDQogICAgICB7IHRoaXMtPmluaXQoJl9N
X2ZpbGVidWYpOyB9DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBiYXNpY19v
ZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsDQogICAgICAgICAgICAgICAgICAg
ICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6Om91dHxp
b3NfYmFzZTo6dHJ1bmMpDQogICAgICA6IF9fb3N0cmVhbV90eXBlKF9fbnVs
bCksIF9NX2ZpbGVidWYoKQ0KICAgICAgew0KICAgICAgICB0aGlzLT5pbml0
KCZfTV9maWxlYnVmKTsNCiAgICAgICAgdGhpcy0+b3BlbihfX3MsIF9fbW9k
ZSk7DQogICAgICB9DQoNCiAgICAgIH5iYXNpY19vZnN0cmVhbSgpDQogICAg
ICB7IH0NCg0KDQogICAgICBfX2ZpbGVidWZfdHlwZSoNCiAgICAgIHJkYnVm
KHZvaWQpIGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmls
ZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGJvb2wNCiAg
ICAgIGlzX29wZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVu
KCk7IH0NCg0KICAgICAgdm9pZA0KICAgICAgb3Blbihjb25zdCBjaGFyKiBf
X3MsDQogICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBp
b3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OnRydW5jKQ0KICAgICAgew0KICAg
ICAgICBpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSB8IGlvc19i
YXNlOjpvdXQpKQ0KICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpmYWlsYml0KTsNCiAgICAgIH0NCg0KICAgICAgdm9pZA0KICAgICAgY2xv
c2Uodm9pZCkNCiAgICAgIHsNCiAgICAgICAgaWYgKCFfTV9maWxlYnVmLmNs
b3NlKCkpDQogICAgICAgICAgc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp
Ow0KICAgICAgfQ0KICAgIH07DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBiYXNpY19m
c3RyZWFtIDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFy
VCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5
cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRf
dHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz
X3R5cGU6OnBvc190eXBlIHBvc190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBl
bmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7DQoNCg0KICAg
ICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5
cGU+IF9fZmlsZWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19pb3M8
Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pb3NfdHlwZTsNCiAgICAgIHR5
cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4g
X19pb3N0cmVhbV90eXBlOw0KDQogICAgcHJpdmF0ZToNCiAgICAgIF9fZmls
ZWJ1Zl90eXBlIF9NX2ZpbGVidWY7DQoNCiAgICBwdWJsaWM6DQoNCiAgICAg
IGJhc2ljX2ZzdHJlYW0oKQ0KICAgICAgOiBfX2lvc3RyZWFtX3R5cGUoX19u
dWxsKSwgX01fZmlsZWJ1ZigpDQogICAgICB7IHRoaXMtPmluaXQoJl9NX2Zp
bGVidWYpOyB9DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBiYXNpY19mc3Ry
ZWFtKGNvbnN0IGNoYXIqIF9fcywNCiAgICAgICAgICAgICAgICAgICAgaW9z
X2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19i
YXNlOjpvdXQpDQogICAgICA6IF9faW9zdHJlYW1fdHlwZShfX251bGwpLCBf
TV9maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAgdGhpcy0+aW5pdCgmX01f
ZmlsZWJ1Zik7DQogICAgICAgIHRoaXMtPm9wZW4oX19zLCBfX21vZGUpOw0K
ICAgICAgfQ0KDQogICAgICB+YmFzaWNfZnN0cmVhbSgpDQogICAgICB7IH0N
Cg0KDQogICAgICBfX2ZpbGVidWZfdHlwZSoNCiAgICAgIHJkYnVmKHZvaWQp
IGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90
eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGJvb2wNCiAgICAgIGlz
X29wZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0N
Cg0KICAgICAgdm9pZA0KICAgICAgb3Blbihjb25zdCBjaGFyKiBfX3MsDQog
ICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFz
ZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgew0KICAgICAgICBpZiAo
IV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSkpDQogICAgICAgICAgc2V0
c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgfQ0KDQogICAgICB2
b2lkDQogICAgICBjbG9zZSh2b2lkKQ0KICAgICAgew0KICAgICAgICBpZiAo
IV9NX2ZpbGVidWYuY2xvc2UoKSkNCiAgICAgICAgICBzZXRzdGF0ZShpb3Nf
YmFzZTo6ZmFpbGJpdCk7DQogICAgICB9DQogICAgfTsNCn0NCg0KDQoNCg0K
DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L2ZzdHJlYW0udGNjIiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL2ZzdHJlYW0udGNjIiAzDQpuYW1lc3BhY2Ug
c3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+OjoNCiAgICBfTV9hbGxvY2F0ZV9maWxlKCkNCiAgICB7DQog
ICAgICBpZiAoIV9NX2ZpbGUpDQogICAgICAgIHsNCiAgICAgICAgICBfTV9i
dWZfdW5pZmllZCA9IDE7Ow0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAg
eyBfTV9maWxlID0gbmV3IF9fZmlsZV90eXBlKCZfTV9sb2NrKTsgfQ0KICAg
ICAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg
ICAgZGVsZXRlIF9NX2ZpbGU7DQogICAgICAgICAgICAgIHRocm93Ow0KICAg
ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQog
ICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBfTV9h
bGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKQ0KICAgIHsNCiAgICAgIGlmICgh
X01fYnVmICYmIF9NX2J1Zl9zaXplX29wdCkNCiAgICAgICAgew0KICAgICAg
ICAgIF9NX2J1Zl9zaXplID0gX01fYnVmX3NpemVfb3B0Ow0KDQoNCiAgICAg
ICAgICB0cnkgeyBfTV9idWYgPSBuZXcgY2hhcl90eXBlW19NX2J1Zl9zaXpl
XTsgfQ0KICAgICAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgICAgIHsNCiAg
ICAgICAgICAgICAgZGVsZXRlIFtdIF9NX2J1ZjsNCiAgICAgICAgICAgICAg
dGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgX01fYnVmX2FsbG9j
YXRlZCA9IDE7Ow0KICAgICAgICB9DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHZvaWQN
CiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIF9N
X2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVyKCkNCiAgICB7DQogICAgICBpZiAo
X01fYnVmX2FsbG9jYXRlZCkNCiAgICAgICAgew0KICAgICAgICAgIGRlbGV0
ZSBbXSBfTV9idWY7DQogICAgICAgICAgX01fYnVmID0gX19udWxsOw0KICAg
ICAgICAgIF9NX2J1Zl9hbGxvY2F0ZWQgPSAwOzsNCiAgICAgICAgICB0aGlz
LT5zZXRnKF9fbnVsbCwgX19udWxsLCBfX251bGwpOw0KICAgICAgICAgIHRo
aXMtPnNldHAoX19udWxsLCBfX251bGwpOw0KICAgICAgICB9DQogICAgfQ0K
DQogdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
Pg0KICAgIHZvaWQNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
cz46Og0KICAgIF9NX2FsbG9jYXRlX3BiYWNrX2J1ZmZlcigpDQogICAgew0K
ICAgICAgaWYgKCFfTV9wYmFjayAmJiBfTV9wYmFja19zaXplKQ0KICAgICAg
ICB7DQoNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsgX01fcGJhY2sg
PSBuZXcgY2hhcl90eXBlW19NX3BiYWNrX3NpemVdOyB9DQogICAgICAgICAg
Y2F0Y2goLi4uKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBkZWxl
dGUgW10gX01fcGJhY2s7DQogICAgICAgICAgICAgIHRocm93Ow0KICAgICAg
ICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19maWxl
YnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIGJhc2ljX2ZpbGVidWYoKQ0K
ICAgIDogX19zdHJlYW1idWZfdHlwZSgpLCBfTV9maWxlKF9fbnVsbCksIF9N
X3N0YXRlX2N1cihfX3N0YXRlX3R5cGUoKSksDQogICAgX01fc3RhdGVfYmVn
KF9fc3RhdGVfdHlwZSgpKSwgX01fYnVmX2FsbG9jYXRlZCgwOyksDQogICAg
X01fbGFzdF9vdmVyZmxvd2VkKDA7KQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNp
Y19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIGJhc2ljX2ZpbGVi
dWYoX19jX2ZpbGVfdHlwZSogX19mLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19t
b2RlLCBpbnRfdHlwZSBfX3MpDQogICAgOiBfX3N0cmVhbWJ1Zl90eXBlKCks
IF9NX2ZpbGUoX19udWxsKSwgX01fc3RhdGVfY3VyKF9fc3RhdGVfdHlwZSgp
KSwNCiAgICBfTV9zdGF0ZV9iZWcoX19zdGF0ZV90eXBlKCkpLCBfTV9idWZf
YWxsb2NhdGVkKDA7KSwNCiAgICBfTV9sYXN0X292ZXJmbG93ZWQoMDspDQog
ICAgew0KICAgICAgX01fYWxsb2NhdGVfZmlsZSgpOw0KICAgICAgX01fZmls
ZS0+c3lzX29wZW4oX19mLCBfX21vZGUpOw0KICAgICAgaWYgKHRoaXMtPmlz
X29wZW4oKSkNCiAgICAgICAgew0KICAgICAgICAgIF9NX21vZGUgPSBfX21v
ZGU7DQogICAgICAgICAgaWYgKF9fcykNCiAgICAgICAgICAgIHsNCiAgICAg
ICAgICAgICAgX01fYnVmX3NpemVfb3B0ID0gX19zOw0KICAgICAgICAgICAg
ICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKTsNCiAgICAgICAgICAg
ICAgX01fc2V0X2luZGV0ZXJtaW5hdGUoKTsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgICBfTV9hbGxvY2F0ZV9wYmFja19idWZmZXIoKTsNCiAgICAgICAg
fQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+DQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+OjpfX2ZpbGVidWZfdHlwZSoNCiAgICBiYXNpY19maWxlYnVmPF9DaGFy
VCwgX1RyYWl0cz46Og0KICAgIG9wZW4oY29uc3QgY2hhciogX19zLCBpb3Nf
YmFzZTo6b3Blbm1vZGUgX19tb2RlKQ0KICAgIHsNCiAgICAgIF9fZmlsZWJ1
Zl90eXBlICpfX3JldCA9IF9fbnVsbDsNCiAgICAgIGlmICghdGhpcy0+aXNf
b3BlbigpKQ0KICAgICAgICB7DQogICAgICAgICAgX01fYWxsb2NhdGVfZmls
ZSgpOw0KICAgICAgICAgIF9NX2ZpbGUtPm9wZW4oX19zLCBfX21vZGUpOw0K
ICAgICAgICAgIGlmICh0aGlzLT5pc19vcGVuKCkpDQogICAgICAgICAgICB7
DQogICAgICAgICAgICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigp
Ow0KICAgICAgICAgICAgICBfTV9hbGxvY2F0ZV9wYmFja19idWZmZXIoKTsN
CiAgICAgICAgICAgICAgX01fbW9kZSA9IF9fbW9kZTsNCg0KDQogICAgICAg
ICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7DQogICAgICAgICAgICAg
IGlmIChfX21vZGUgJiBpb3NfYmFzZTo6YXRlDQogICAgICAgICAgICAgICAg
ICAmJiB0aGlzLT5zZWVrb2ZmKDAsIGlvc19iYXNlOjplbmQsIF9fbW9kZSkg
PCAwKQ0KICAgICAgICAgICAgICAgIHRoaXMtPmNsb3NlKCk7DQogICAgICAg
ICAgICAgIF9fcmV0ID0gdGhpczsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
fQ0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf
ZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX2ZpbGVidWZfdHlwZSoNCiAg
ICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIGNsb3Nl
KCkNCiAgICB7DQogICAgICBfX2ZpbGVidWZfdHlwZSAqX19yZXQgPSBfX251
bGw7DQogICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQ0KICAgICAgICB7DQog
ICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYmIF9NX291
dF9iZWcgPCBfTV9vdXRfZW5kOw0KICAgICAgICAgIGlmIChfX3Rlc3RwdXQp
DQogICAgICAgICAgICBfTV9yZWFsbHlfb3ZlcmZsb3codHJhaXRzX3R5cGU6
OmVvZigpKTsNCg0KDQogICAgICAgICAgX01fcGJhY2tfZGVzdHJveSgpOw0K
IyAxOTIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L2ZzdHJlYW0udGNjIiAzDQogICAgICAgICAgX01fbW9kZSA9IGlvc19iYXNl
OjpvcGVubW9kZSgwKTsNCiAgICAgICAgICBfTV9kZXN0cm95X2ludGVybmFs
X2J1ZmZlcigpOw0KDQogICAgICAgICAgaWYgKF9NX3BiYWNrKQ0KICAgICAg
ICAgICAgew0KICAgICAgICAgICAgICBkZWxldGUgW10gX01fcGJhY2s7DQog
ICAgICAgICAgICAgIF9NX3BiYWNrID0gX19udWxsOw0KICAgICAgICAgICAg
fQ0KICAgICAgICAgIF9fcmV0ID0gdGhpczsNCiAgICAgICAgfQ0KDQoNCg0K
ICAgICAgaWYgKF9NX2ZpbGUpDQogICAgICAgIHsNCiAgICAgICAgICBkZWxl
dGUgX01fZmlsZTsNCiAgICAgICAgICBfTV9maWxlID0gX19udWxsOw0KICAg
ICAgICB9DQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSAwOzsNCiAgICAg
IHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHN0cmVhbXNpemUNCiAg
ICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHNob3dt
YW55YygpDQogICAgew0KICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IC0xOw0K
ICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47
DQoNCiAgICAgIGlmIChfX3Rlc3RpbikNCiAgICAgICAgew0KICAgICAgICAg
IGJvb2wgX190ZXN0ZW9mID0gMDs7DQogICAgICAgICAgaWYgKF9NX2luX2N1
ciA+PSBfTV9pbl9lbmQpDQogICAgICAgICAgICBfX3Rlc3Rlb2YgPSB0aGlz
LT51bmRlcmZsb3coKSA9PSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAg
ICAgaWYgKCFfX3Rlc3Rlb2YpDQogICAgICAgICAgICBfX3JldCA9IF9NX2lu
X2VuZCAtIF9NX2luX2N1cjsNCiAgICAgICAgfQ0KICAgICAgX01fbGFzdF9v
dmVyZmxvd2VkID0gMDs7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4NCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90
eXBlDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg
ICB1bmRlcmZsb3coKQ0KICAgIHsNCiAgICAgIGludF90eXBlIF9fcmV0ID0g
dHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9N
X21vZGUgJiBpb3NfYmFzZTo6aW47DQogICAgICBib29sIF9fdGVzdG91dCA9
IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0Ow0KDQoNCiAgICAgIGlmIChfX3Rl
c3RpbikNCiAgICAgICAgew0KDQoNCg0KICAgICAgICAgIGlmIChfTV9wYmFj
a19pbml0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfTV9wYmFj
a19kZXN0cm95KCk7DQogICAgICAgICAgICAgIGlmIChfTV9pbl9jdXIgPCBf
TV9pbl9lbmQpDQogICAgICAgICAgICAgICAgcmV0dXJuIHRyYWl0c190eXBl
Ojp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsNCiAgICAgICAgICAgIH0NCg0K
ICAgICAgICAgIGJvb2wgX190ZXN0Z2V0ID0gX01faW5fY3VyICYmIF9NX2lu
X2JlZyA8IF9NX2luX2N1cjsNCiAgICAgICAgICBib29sIF9fdGVzdGluaXQg
PSBfTV9pc19pbmRldGVybWluYXRlKCk7DQoNCg0KICAgICAgICAgIGlmIChf
X3Rlc3RnZXQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChf
X3Rlc3RvdXQpDQogICAgICAgICAgICAgICAgX01fcmVhbGx5X292ZXJmbG93
KCk7DQoNCiAgICAgICAgICAgICAgZWxzZSBpZiAoKF9NX2luX2N1ciAtIF9N
X2luX2JlZykgPT0gMSkNCiAgICAgICAgICAgICAgICBfTV9maWxlLT5zeXNf
Z2V0YygpOw0KDQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAg
ICBfTV9maWxlLT5zZWVrb2ZmKF9NX2luX2N1ciAtIF9NX2luX2JlZywNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpjdXIs
IGlvc19iYXNlOjppbik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICBp
ZiAoX190ZXN0aW5pdCB8fCBfX3Rlc3RnZXQpDQogICAgICAgICAgICB7DQoN
CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3NpemUgPSBfTV9maWxlLT54
c2dldG4oX01faW5fYmVnLCBfTV9idWZfc2l6ZSk7DQogICAgICAgICAgICAg
IGlmICgwIDwgX19zaXplKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAg
ICAgICAgICAgIF9NX3NldF9kZXRlcm1pbmF0ZShfX3NpemUpOw0KICAgICAg
ICAgICAgICAgICAgaWYgKF9fdGVzdG91dCkNCiAgICAgICAgICAgICAgICAg
ICAgX01fb3V0X2N1ciA9IF9NX2luX2N1cjsNCiAgICAgICAgICAgICAgICAg
IF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIp
Ow0KDQogICAgICAgICAgICAgICAgICBpZiAoX19zaXplID09IDEpDQogICAg
ICAgICAgICAgICAgICAgIF9NX2ZpbGUtPnN5c191bmdldGMoKl9NX2luX2N1
cik7DQogICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAg
ICAgIHsNCg0KICAgICAgICAgICAgICAgICAgc3RyZWFtb2ZmIF9fcCA9IF9N
X2ZpbGUtPnNlZWtvZmYoMCAtIF9fc2l6ZSwgaW9zX2Jhc2U6OmN1ciwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlvc19iYXNlOjppbik7DQogICAgICAgICAgICAgICAgICBpZiAoX19w
ID09IC0xKQ0KICAgICAgICAgICAgICAgICAgICB7DQoNCiAgICAgICAgICAg
ICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAg
ICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAg
X01fbGFzdF9vdmVyZmxvd2VkID0gMDs7DQogICAgICByZXR1cm4gX19yZXQ7
DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4NCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
cz46OmludF90eXBlDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+OjoNCiAgICBwYmFja2ZhaWwoaW50X3R5cGUgX19pKQ0KICAgIHsNCiAg
ICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAg
ICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47DQoN
CiAgICAgIGlmIChfX3Rlc3RpbikNCiAgICAgICAgew0KICAgICAgICAgIGJv
b2wgX190ZXN0cGIgPSBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7DQogICAgICAg
ICAgY2hhcl90eXBlIF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUo
X19pKTsNCiAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBl
OjplcV9pbnRfdHlwZShfX2ksIF9fcmV0KTsNCg0KICAgICAgICAgIGlmIChf
X3Rlc3RwYikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgYm9vbCBf
X3Rlc3RvdXQgPSBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsNCiAgICAgICAg
ICAgICAgYm9vbCBfX3Rlc3RlcSA9IHRyYWl0c190eXBlOjplcShfX2MsIHRo
aXMtPmdwdHIoKVstMV0pOw0KDQoNCg0KICAgICAgICAgICAgICBpZiAoIV9f
dGVzdGVvZiAmJiBfX3Rlc3RlcSkNCiAgICAgICAgICAgICAgICB7DQogICAg
ICAgICAgICAgICAgICAtLV9NX2luX2N1cjsNCiAgICAgICAgICAgICAgICAg
IGlmIChfX3Rlc3RvdXQpDQogICAgICAgICAgICAgICAgICAgIC0tX01fb3V0
X2N1cjsNCiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gX19pOw0KICAgICAg
ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZW9m
KQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIC0tX01f
aW5fY3VyOw0KICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdG91dCkNCiAg
ICAgICAgICAgICAgICAgICAgLS1fTV9vdXRfY3VyOw0KICAgICAgICAgICAg
ICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2kpOw0KICAg
ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZSBpZiAoIV9fdGVz
dGVvZikNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAt
LV9NX2luX2N1cjsNCiAgICAgICAgICAgICAgICAgIGlmIChfX3Rlc3RvdXQp
DQogICAgICAgICAgICAgICAgICAgIC0tX01fb3V0X2N1cjsNCiAgICAgICAg
ICAgICAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpOw0KICAgICAgICAgICAgICAg
ICAgKl9NX2luX2N1ciA9IF9fYzsNCiAgICAgICAgICAgICAgICAgIF9fcmV0
ID0gX19pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAg
ICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAg
ICB0aGlzLT5zZWVrb2ZmKC0xLCBpb3NfYmFzZTo6Y3VyKTsNCiAgICAgICAg
ICAgICAgdGhpcy0+dW5kZXJmbG93KCk7DQogICAgICAgICAgICAgIGlmICgh
X190ZXN0ZW9mKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
ICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9fYywgKl9NX2luX2N1cikpDQog
ICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICBf
TV9wYmFja19jcmVhdGUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAqX01f
aW5fY3VyID0gX19jOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg
ICAgICAgICAgICBfX3JldCA9IF9faTsNCiAgICAgICAgICAgICAgICB9DQog
ICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICBfX3JldCA9IHRy
YWl0c190eXBlOjpub3RfZW9mKF9faSk7DQogICAgICAgICAgICB9DQogICAg
ICAgIH0NCiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IDA7Ow0KICAgICAg
cmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfZmlsZWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQ0KICAgIGJhc2ljX2ZpbGVidWY8
X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3ZlcmZsb3coaW50X3R5cGUgX19j
KQ0KICAgIHsNCiAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6
OmVvZigpOw0KICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYm
IF9NX291dF9jdXIgPCBfTV9idWYgKyBfTV9idWZfc2l6ZTsNCiAgICAgIGJv
b2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7DQoNCiAg
ICAgIGlmIChfX3Rlc3RvdXQpDQogICAgICAgIHsNCiAgICAgICAgICBpZiAo
X190ZXN0cHV0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAqX01f
b3V0X2N1ciA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsNCiAg
ICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOw0KICAgICAgICAgICAg
ICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7DQogICAgICAg
ICAgICB9DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgX19yZXQgPSB0
aGlzLT5fTV9yZWFsbHlfb3ZlcmZsb3coX19jKTsNCiAgICAgICAgfQ0KDQog
ICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSAwOzsNCiAgICAgIHJldHVybiBf
X3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBf
VHJhaXRzPjo6aW50X3R5cGUNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwg
X1RyYWl0cz46Og0KICAgIF9NX3JlYWxseV9vdmVyZmxvdyhpbnRfdHlwZSBf
X2MpDQogICAgew0KICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlw
ZTo6ZW9mKCk7DQogICAgICBib29sIF9fdGVzdHB1dCA9IF9NX291dF9jdXIg
JiYgX01fb3V0X2JlZyA8IF9NX291dF9lbmQ7DQogICAgICBib29sIF9fdGVz
dHVuYnVmZmVyZWQgPSBfTV9maWxlICYmICFfTV9idWZfc2l6ZTsNCg0KICAg
ICAgaWYgKF9fdGVzdHB1dCB8fCBfX3Rlc3R1bmJ1ZmZlcmVkKQ0KICAgICAg
ICB7DQoNCiAgICAgICAgICBpbnQgX19wbGVuID0gX01fb3V0X2VuZCAtIF9N
X291dF9iZWc7DQogICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDA7DQoN
CiAgICAgICAgICBpZiAoX19wbGVuKQ0KICAgICAgICAgICAgX19sZW4gPSBf
TV9maWxlLT54c3B1dG4oX01fb3V0X2JlZywgX19wbGVuKTsNCg0KICAgICAg
ICAgIGlmIChfX2MgIT10cmFpdHNfdHlwZTo6ZW9mKCkpDQogICAgICAgICAg
ICB7DQogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX3BlbmRpbmcgPSB0cmFp
dHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7DQogICAgICAgICAgICAgIF9f
bGVuICs9IF9NX2ZpbGUtPnhzcHV0bigmX19wZW5kaW5nLCAxKTsNCiAgICAg
ICAgICAgICAgKytfX3BsZW47DQogICAgICAgICAgICB9DQoNCg0KDQogICAg
ICAgICAgX01fZmlsZS0+c3luYygpOw0KICAgICAgICAgIGlmIChfX2xlbiA9
PSBfX3BsZW4pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9NX3Nl
dF9pbmRldGVybWluYXRlKCk7DQogICAgICAgICAgICAgIF9fcmV0ID0gdHJh
aXRzX3R5cGU6Om5vdF9lb2YoX19jKTsNCiAgICAgICAgICAgIH0NCiMgNDcy
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mc3Ry
ZWFtLnRjYyIgMw0KICAgICAgICB9DQogICAgICBfTV9sYXN0X292ZXJmbG93
ZWQgPSAxOzsNCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg
IGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6X19zdHJlYW1idWZf
dHlwZSoNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0K
ICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQog
ICAgew0KICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkgJiYgX19zID09IDAg
JiYgX19uID09IDApDQogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7DQog
ICAgICBlbHNlIGlmIChfX3MgJiYgX19uKQ0KICAgICAgICB7DQoNCg0KDQoN
Cg0KICAgICAgICAgIF9NX2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVyKCk7DQoN
Cg0KICAgICAgICAgIF9NX2J1ZiA9IF9fczsNCiAgICAgICAgICBfTV9idWZf
c2l6ZV9vcHQgPSBfTV9idWZfc2l6ZSA9IF9fbjsNCiAgICAgICAgICBfTV9z
ZXRfaW5kZXRlcm1pbmF0ZSgpOw0KDQoNCiAgICAgICAgICBfTV9hbGxvY2F0
ZV9wYmFja19idWZmZXIoKTsNCiAgICAgICAgfQ0KICAgICAgX01fbGFzdF9v
dmVyZmxvd2VkID0gMDs7DQogICAgICByZXR1cm4gdGhpczsNCiAgICB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
Pg0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5
cGUNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0KICAg
IHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9f
d2F5LCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQ0KICAgIHsNCiAgICAg
IHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsNCiAg
ICAgIGJvb2wgX190ZXN0b3BlbiA9IHRoaXMtPmlzX29wZW4oKTsNCiAgICAg
IGJvb2wgX190ZXN0aW4gPSBfX21vZGUgJiBpb3NfYmFzZTo6aW4gJiYgX01f
bW9kZSAmIGlvc19iYXNlOjppbjsNCiAgICAgIGJvb2wgX190ZXN0b3V0ID0g
X19tb2RlICYgaW9zX2Jhc2U6Om91dCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6
Om91dDsNCg0KDQogICAgICBpbnQgX193aWR0aCA9IHVzZV9mYWNldDxfX2Nv
ZGVjdnRfdHlwZT4oX01fYnVmX2xvY2FsZSkuZW5jb2RpbmcoKTsNCiAgICAg
IGlmIChfX3dpZHRoIDwgMCkNCiAgICAgICAgX193aWR0aCA9IDA7DQogICAg
ICBib29sIF9fdGVzdGZhaWwgPSBfX29mZiAhPSAwICYmIF9fd2lkdGggPD0g
MDsNCg0KICAgICAgaWYgKF9fdGVzdG9wZW4gJiYgIV9fdGVzdGZhaWwgJiYg
KF9fdGVzdGluIHx8IF9fdGVzdG91dCkpDQogICAgICAgIHsNCg0KICAgICAg
ICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsNCg0KICAgICAgICAgIGlmIChfX3dh
eSAhPSBpb3NfYmFzZTo6Y3VyIHx8IF9fb2ZmICE9IDApDQogICAgICAgICAg
ICB7DQogICAgICAgICAgICAgIG9mZl90eXBlIF9fY29tcHV0ZWRfb2ZmID0g
X193aWR0aCAqIF9fb2ZmOw0KDQogICAgICAgICAgICAgIGJvb2wgX190ZXN0
Z2V0ID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2VuZDsNCiAg
ICAgICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYmIF9N
X291dF9iZWcgPCBfTV9vdXRfZW5kOw0KDQoNCiAgICAgICAgICAgICAgaWYg
KF9fdGVzdHB1dCB8fCBfTV9sYXN0X292ZXJmbG93ZWQpDQogICAgICAgICAg
ICAgICAgew0KDQogICAgICAgICAgICAgICAgICB0aGlzLT5zeW5jKCk7DQoN
CiAgICAgICAgICAgICAgICAgIF9NX291dHB1dF91bnNoaWZ0KCk7DQogICAg
ICAgICAgICAgICAgfQ0KDQoNCiAgICAgICAgICAgICAgZWxzZSBpZiAoX190
ZXN0Z2V0ICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIpDQogICAgICAgICAg
ICAgICAgX19jb21wdXRlZF9vZmYgKz0gX01faW5fY3VyIC0gX01faW5fYmVn
Ow0KDQogICAgICAgICAgICAgIF9fcmV0ID0gX01fZmlsZS0+c2Vla29mZihf
X2NvbXB1dGVkX29mZiwgX193YXksIF9fbW9kZSk7DQogICAgICAgICAgICAg
IF9NX3NldF9pbmRldGVybWluYXRlKCk7DQogICAgICAgICAgICB9DQoNCg0K
ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg
X19yZXQgPSBfTV9maWxlLT5zZWVrb2ZmKF9fb2ZmLCBpb3NfYmFzZTo6Y3Vy
LCBfX21vZGUpOw0KICAgICAgICAgICAgICBfX3JldCArPSBtYXgoX01fb3V0
X2N1ciwgX01faW5fY3VyKSAtIF9NX2J1ZjsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgfQ0KICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gMDs7DQogICAg
ICByZXR1cm4gX19yZXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19maWxlYnVm
PF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlDQogICAgYmFzaWNfZmlsZWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBzZWVrcG9zKHBvc190eXBlIF9f
cG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQ0KICAgIHsNCiAgICAg
IHBvc190eXBlIF9fcmV0Ow0KICAgICAgb2ZmX3R5cGUgX19vZmYgPSBfX3Bv
czsNCg0KICAgICAgX19yZXQgPSB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBpb3Nf
YmFzZTo6YmVnLCBfX21vZGUpOw0KDQogICAgICBfTV9sYXN0X292ZXJmbG93
ZWQgPSAwOzsNCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg
IHZvaWQNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Og0K
ICAgIF9NX291dHB1dF91bnNoaWZ0KCkNCiAgICB7IH0NCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgdm9p
ZA0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6DQogICAg
aW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7DQogICAgICBib29s
IF9fdGVzdGJlZyA9IGdwdHIoKSA9PSBlYmFjaygpICYmIHBwdHIoKSA9PSBw
YmFzZSgpOw0KDQogICAgICBpZiAoX190ZXN0YmVnICYmIF9NX2J1Zl9sb2Nh
bGUgIT0gX19sb2MpDQogICAgICAgIHsNCiAgICAgICAgICBfTV9idWZfbG9j
YWxlID0gX19sb2M7DQogICAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0g
MTs7DQogICAgICAgIH0NCg0KDQoNCg0KDQogICAgICBfTV9sYXN0X292ZXJm
bG93ZWQgPSAwOzsNCiAgICB9DQoNCn0NCiMgNDIxICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVhbS5oIiAyIDMN
CiMgMzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iYWNr
d2FyZC9mc3RyZWFtLmgiIDIgMw0KDQp1c2luZyBzdGQ6OmZpbGVidWY7DQp1
c2luZyBzdGQ6Omlmc3RyZWFtOw0KdXNpbmcgc3RkOjpvZnN0cmVhbTsNCnVz
aW5nIHN0ZDo6ZnN0cmVhbTsNCnVzaW5nIHN0ZDo6c3RyZWFtcG9zOw0KIyA1
ICJidWZmZXIuaCIgMg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8u
aCIgMSAzIDQNCiMgNiAiYnVmZmVyLmgiIDINCiMgMSAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAxIDMgNA0KIyA3ICJidWZmZXIuaCIgMg0KIyAxICJtaXNj
LmgiIDENCiMgOCAiYnVmZmVyLmgiIDINCiMgMSAiZXJyb3IuaCIgMQ0KDQoN
Cg0KZXh0ZXJuIGludCBlcnJvckNvdW50Ow0KDQoNCg0KDQoNCg0KZW51bSBU
QWJvcnRDb2RlIHsNCiAgICBhYm9ydEludmFsaWRDb21tYW5kTGluZUFyZ3Mg
PSAtMSwNCiAgICBhYm9ydFNvdXJjZUZpbGVPcGVuRmFpbGVkID0gLTIsDQog
ICAgYWJvcnRJRm9ybUZpbGVPcGVuRmFpbGVkID0gLTMsDQogICAgYWJvcnRB
c3NlbWJseUZpbGVPcGVuRmFpbGVkID0gLTQsDQogICAgYWJvcnRUb29NYW55
U3ludGF4RXJyb3JzID0gLTUsDQogICAgYWJvcnRTdGFja092ZXJmbG93ID0g
LTYsDQogICAgYWJvcnRDb2RlU2VnbWVudE92ZXJmbG93ID0gLTcsDQogICAg
YWJvcnROZXN0aW5nVG9vRGVlcCA9IC04LA0KICAgIGFib3J0UnVudGltZUVy
cm9yID0gLTksDQogICAgYWJvcnRVbmltcGxlbWVudGVkRmVhdHVyZSA9IC0x
MA0KfSA7DQoNCnZvaWQgQWJvcnRUcmFuc2xhdGlvbihUQWJvcnRDb2RlIGFj
KTsNCiMgOSAiYnVmZmVyLmgiIDINCg0KDQoNCg0KDQoNCg0KZXh0ZXJuIGNo
YXIgZW9mQ2hhcjsNCmV4dGVybiBpbnQgaW5wdXRQb3NpdGlvbjsNCmV4dGVy
biBpbnQgbGlzdEZsYWc7DQpleHRlcm4gaW50IGxldmVsOw0KDQpjb25zdCBp
bnQgbWF4SW5wdXRCdWZmZXJTaXplID0gMjU2Ow0KDQoNCg0KDQoNCmNsYXNz
IFRUZXh0SW5CdWZmZXIgew0KDQpwcm90ZWN0ZWQ6DQogICAgZnN0cmVhbSBm
aWxlOw0KICAgIGNoYXIgKmNvbnN0IHBGaWxlTmFtZTsNCiAgICBjaGFyIHRl
eHRbbWF4SW5wdXRCdWZmZXJTaXplXTsNCiAgICBjaGFyICpwQ2hhcjsNCg0K
DQogICAgdmlydHVhbCBjaGFyIEdldExpbmUodm9pZCkgPSAwOw0KDQpwdWJs
aWM6DQogICAgVFRleHRJbkJ1ZmZlcihjb25zdCBjaGFyICpwSW5wdXRGaWxl
TmFtZSwgVEFib3J0Q29kZSBhYyk7DQoNCiAgICB2aXJ0dWFsIH5UVGV4dElu
QnVmZmVyKHZvaWQpDQogICAgew0KICAgICAgICBmaWxlLmNsb3NlKCk7DQog
ICAgICAgIGRlbGV0ZSBwRmlsZU5hbWU7DQogICAgfQ0KDQogICAgY2hhciBD
aGFyICh2b2lkKSBjb25zdCB7IHJldHVybiAqcENoYXI7IH0NCiAgICBjaGFy
IEdldENoYXIgKHZvaWQpOw0KICAgIGNoYXIgUHV0QmFja0NoYXIodm9pZCk7
DQp9Ow0KDQoNCg0KDQoNCmNsYXNzIFRTb3VyY2VCdWZmZXIgOiBwdWJsaWMg
VFRleHRJbkJ1ZmZlciB7DQogICAgdmlydHVhbCBjaGFyIEdldExpbmUodm9p
ZCk7DQoNCnB1YmxpYzoNCiAgICBUU291cmNlQnVmZmVyKGNvbnN0IGNoYXIg
KnBTb3VyY2VGaWxlTmFtZSk7DQp9Ow0KIyA3MyAiYnVmZmVyLmgiDQpjbGFz
cyBUVGV4dE91dEJ1ZmZlciB7DQoNCnB1YmxpYzoNCiAgICBjaGFyIHRleHRb
bWF4SW5wdXRCdWZmZXJTaXplICsgMTZdOw0KDQogICAgdmlydHVhbCB2b2lk
IFB1dExpbmUodm9pZCkgPSAwOw0KDQogICAgdm9pZCBQdXRMaW5lKGNvbnN0
IGNoYXIgKnBUZXh0KQ0KICAgIHsNCiAgICAgICAgc3RyY3B5KHRleHQsIHBU
ZXh0KTsNCiAgICAgICAgUHV0TGluZSgpOw0KICAgIH0NCn07DQoNCg0KDQoN
Cg0KY2xhc3MgVExpc3RCdWZmZXIgOiBwdWJsaWMgVFRleHRPdXRCdWZmZXIg
ew0KICAgIGNoYXIgKnBTb3VyY2VGaWxlTmFtZTsNCiAgICBjaGFyIGRhdGVb
MjZdOw0KICAgIGludCBwYWdlTnVtYmVyOw0KICAgIGludCBsaW5lQ291bnQ7
DQoNCiAgICB2b2lkIFByaW50UGFnZUhlYWRlcih2b2lkKTsNCg0KcHVibGlj
Og0KICAgIHZpcnR1YWwgflRMaXN0QnVmZmVyKHZvaWQpIHsgZGVsZXRlIHBT
b3VyY2VGaWxlTmFtZTsgfQ0KDQogICAgdm9pZCBJbml0aWFsaXplKGNvbnN0
IGNoYXIgKmZpbGVOYW1lKTsNCiAgICB2aXJ0dWFsIHZvaWQgUHV0TGluZSh2
b2lkKTsNCg0KICAgIHZvaWQgUHV0TGluZShjb25zdCBjaGFyICpwVGV4dCkN
CiAgICB7DQogICAgICAgIFRUZXh0T3V0QnVmZmVyOjpQdXRMaW5lKHBUZXh0
KTsNCiAgICB9DQoNCiAgICB2b2lkIFB1dExpbmUoY29uc3QgY2hhciAqcFRl
eHQsIGludCBsaW5lTnVtYmVyLCBpbnQgbmVzdGluZ0xldmVsKQ0KICAgIHsN
CiAgICAgICAgc3ByaW50Zih0ZXh0LCAiJTRkICVkOiAlcyIsIGxpbmVOdW1i
ZXIsIG5lc3RpbmdMZXZlbCwgcFRleHQpOw0KICAgICAgICBQdXRMaW5lKCk7
DQogICAgfQ0KfTsNCg0KZXh0ZXJuIFRMaXN0QnVmZmVyIGxpc3Q7DQojIDI2
ICJidWZmZXIuY3BwIiAyDQojIDM1ICJidWZmZXIuY3BwIg0KY2hhciBlb2ZD
aGFyID0gMHg3RjsNCmludCBpbnB1dFBvc2l0aW9uOw0KDQppbnQgbGlzdEZs
YWcgPSAxOzsNCiMgNDggImJ1ZmZlci5jcHAiDQpUVGV4dEluQnVmZmVyOjpU
VGV4dEluQnVmZmVyKGNvbnN0IGNoYXIgKnBJbnB1dEZpbGVOYW1lLCBUQWJv
cnRDb2RlIGFjKQ0KICAgIDogcEZpbGVOYW1lKG5ldyBjaGFyW3N0cmxlbihw
SW5wdXRGaWxlTmFtZSkgKyAxXSkNCnsNCg0KICAgIHN0cmNweShwRmlsZU5h
bWUsIHBJbnB1dEZpbGVOYW1lKTsNCg0KDQoNCiAgICBmaWxlLm9wZW4ocEZp
bGVOYW1lLCBpb3M6OmluKTsNCiAgICBpZiAoIWZpbGUuZ29vZCgpKSBBYm9y
dFRyYW5zbGF0aW9uKGFjKTsNCn0NCiMgNzAgImJ1ZmZlci5jcHAiDQpjaGFy
IFRUZXh0SW5CdWZmZXI6OkdldENoYXIodm9pZCkNCnsNCiAgICBjb25zdCBp
bnQgdGFiU2l6ZSA9IDg7DQogICAgY2hhciBjaDsNCg0KICAgIGlmICgqcENo
YXIgPT0gZW9mQ2hhcikgcmV0dXJuIGVvZkNoYXI7DQogICAgZWxzZSBpZiAo
KnBDaGFyID09ICdcMCcpIGNoID0gR2V0TGluZSgpOw0KICAgIGVsc2Ugew0K
ICAgICAgICArK3BDaGFyOw0KICAgICAgICArK2lucHV0UG9zaXRpb247DQog
ICAgICAgIGNoID0gKnBDaGFyOw0KICAgIH0NCg0KDQoNCiAgICBpZiAoY2gg
PT0gJ1x0JykgaW5wdXRQb3NpdGlvbiArPSB0YWJTaXplIC0gaW5wdXRQb3Np
dGlvbiV0YWJTaXplOw0KDQogICAgcmV0dXJuIGNoOw0KfQ0KIyA5OSAiYnVm
ZmVyLmNwcCINCmNoYXIgVFRleHRJbkJ1ZmZlcjo6UHV0QmFja0NoYXIodm9p
ZCkNCnsNCiAgICAtLXBDaGFyOw0KICAgIC0taW5wdXRQb3NpdGlvbjsNCg0K
ICAgIHJldHVybiAqcENoYXI7DQp9DQojIDEyMSAiYnVmZmVyLmNwcCINClRT
b3VyY2VCdWZmZXI6OlRTb3VyY2VCdWZmZXIoY29uc3QgY2hhciAqcFNvdXJj
ZUZpbGVOYW1lKQ0KICAgIDogVFRleHRJbkJ1ZmZlcihwU291cmNlRmlsZU5h
bWUsIGFib3J0U291cmNlRmlsZU9wZW5GYWlsZWQpDQp7DQoNCiAgICBpZiAo
bGlzdEZsYWcpIGxpc3QuSW5pdGlhbGl6ZShwU291cmNlRmlsZU5hbWUpOw0K
ICAgIEdldExpbmUoKTsNCn0NCiMgMTM4ICJidWZmZXIuY3BwIg0KY2hhciBU
U291cmNlQnVmZmVyOjpHZXRMaW5lKHZvaWQpDQp7DQogICAgZXh0ZXJuIGlu
dCBsaW5lTnVtYmVyLCBjdXJyZW50TmVzdGluZ0xldmVsOw0KDQoNCiAgICBp
ZiAoZmlsZS5lb2YoKSkgcENoYXIgPSAmZW9mQ2hhcjsNCg0KDQogICAgZWxz
ZSB7DQogICAgICAgIGZpbGUuZ2V0bGluZSh0ZXh0LCBtYXhJbnB1dEJ1ZmZl
clNpemUpOw0KICAgICAgICBwQ2hhciA9IHRleHQ7DQoNCiAgICAgICAgaWYg
KGxpc3RGbGFnKSBsaXN0LlB1dExpbmUodGV4dCwgKytjdXJyZW50TGluZU51
bWJlciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudE5lc3RpbmdMZXZlbCk7DQogICAgfQ0KDQogICAgaW5wdXRQb3NpdGlv
biA9IDA7DQogICAgcmV0dXJuICpwQ2hhcjsNCn0NCg0KDQoNCg0KDQoNCg0K
Y29uc3QgaW50IG1heFByaW50TGluZUxlbmd0aCA9IDgwOw0KY29uc3QgaW50
IG1heExpbmVzUGVyUGFnZSA9IDUwOw0KDQpUTGlzdEJ1ZmZlciBsaXN0Ow0K
DQoNCg0KDQoNCg0Kdm9pZCBUTGlzdEJ1ZmZlcjo6UHJpbnRQYWdlSGVhZGVy
KHZvaWQpDQp7DQogICAgY29uc3QgY2hhciBmb3JtRmVlZENoYXIgPSAnXGYn
Ow0KDQogICAgY291dCA8PCBmb3JtRmVlZENoYXIgPDwgIlBhZ2UgIiA8PCAr
K3BhZ2VOdW1iZXINCiAgICAgICAgIDw8ICIgICAiIDw8IHBTb3VyY2VGaWxl
TmFtZSA8PCAiICAgIiA8PCBkYXRlDQogICAgICAgICA8PCBlbmRsIDw8IGVu
ZGw7DQoNCiAgICBsaW5lQ291bnQgPSAwOw0KfQ0KIyAxOTMgImJ1ZmZlci5j
cHAiDQp2b2lkIFRMaXN0QnVmZmVyOjpJbml0aWFsaXplKGNvbnN0IGNoYXIg
KnBGaWxlTmFtZSkNCnsNCiAgICB0ZXh0WzBdID0gJ1wwJzsNCiAgICBwYWdl
TnVtYmVyID0gMDsNCg0KDQogICAgcFNvdXJjZUZpbGVOYW1lID0gbmV3IGNo
YXJbc3RybGVuKHBGaWxlTmFtZSkgKyAxXTsNCiAgICBzdHJjcHkocFNvdXJj
ZUZpbGVOYW1lLCBwRmlsZU5hbWUpOw0KDQoNCiAgICB0aW1lX3QgdGltZXI7
DQogICAgdGltZSgmdGltZXIpOw0KICAgIHN0cmNweShkYXRlLCBhc2N0aW1l
KGxvY2FsdGltZSgmdGltZXIpKSk7DQogICAgZGF0ZVtzdHJsZW4oZGF0ZSkg
LSAxXSA9ICdcMCc7DQoNCiAgICBQcmludFBhZ2VIZWFkZXIoKTsNCn0NCg0K
DQoNCg0KDQp2b2lkIFRMaXN0QnVmZmVyOjpQdXRMaW5lKHZvaWQpDQp7DQoN
CiAgICBpZiAobGlzdEZsYWcgJiYgKGxpbmVDb3VudCA9PSBtYXhMaW5lc1Bl
clBhZ2UpKSBQcmludFBhZ2VIZWFkZXIoKTsNCg0KDQogICAgdGV4dFttYXhQ
cmludExpbmVMZW5ndGhdID0gJ1wwJzsNCg0KDQogICAgY291dCA8PCB0ZXh0
IDw8IGVuZGw7DQogICAgdGV4dFswXSA9ICdcMCc7DQoNCiAgICArK2xpbmVD
b3VudDsNCn0NCg==
---559023410-758783491-1017137114=:8152
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=out_ok
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.SOL.3.95q.1020326110514.8152F@pooh>
Content-Description:
IyAxNyAiYnVmZmVyLmNjIg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3Rk
aW8uaCIgMSAzIDQNCiMgMTQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5o
IiAzIDQNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMg
NA0KIyA0MyAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAzIDQNCnR5
cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7DQojIDE1
ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQNCiMgMzQgIi9o
b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCiNwcmFnbWEgaWRlbnQg
IkAoIylzdGRpby5oCTEuNjkJOTgvMDcvMTMgU01JIg0KDQojIDEgIi91c3Iv
aW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAxMyAiL3Vz
ci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDMgNA0KI3ByYWdtYSBp
ZGVudCAiQCgjKWZlYXR1cmVfdGVzdHMuaAkxLjE3CTk3LzEyLzA0IFNNSSIN
Cg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0DQoj
IDkgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMyA0DQojcHJhZ21h
IGlkZW50ICJAKCMpaXNhX2RlZnMuaAkxLjE2CTk5LzA1LzI1IFNNSSINCiMg
MTQ4ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNA0KZXh0ZXJu
ICJDIiB7DQojIDMzMCAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAz
IDQNCn0NCiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5o
IiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyAxNzUgIi91c3IvaW5jbHVk
ZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAzIDQNCn0NCiMgMzcgIi9ob21lL21k
ZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8z
LjAvaW5jbHVkZS9zdGRpby5oIiAyIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUv
c3lzL3ZhX2xpc3QuaCIgMSAzIDQNCiMgOSAiL3Vzci9pbmNsdWRlL3N5cy92
YV9saXN0LmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKXZhX2xpc3QuaAkx
LjExCTk3LzExLzIyIFNNSSINCiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvdmFf
bGlzdC5oIiAzIDQNCmV4dGVybiAiQyIgew0KDQoNCg0KdHlwZWRlZiB2b2lk
ICpfX3ZhX2xpc3Q7DQoNCg0KDQoNCg0KfQ0KIyAzOCAiL2hvbWUvbWRlaWwv
YmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9p
bmNsdWRlL3N0ZGlvLmgiIDIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zdGRp
b190YWcuaCIgMSAzIDQNCiMgOSAiL3Vzci9pbmNsdWRlL3N0ZGlvX3RhZy5o
IiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIylzdGRpb190YWcuaAkxLjMJOTgv
MDQvMjAgU01JIg0KDQoNCmV4dGVybiAiQyIgew0KIyAyMSAiL3Vzci9pbmNs
dWRlL3N0ZGlvX3RhZy5oIiAzIDQNCnR5cGVkZWYgc3RydWN0IEZJTEUgX19G
SUxFOw0KDQoNCg0KfQ0KIyAzOSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlv
LmgiIDIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgiIDEg
MyA0DQojIDkgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgiIDMgNA0KI3By
YWdtYSBpZGVudCAiQCgjKXN0ZGlvX2ltcGwuaAkxLjgJOTkvMDYvMzAgU01J
Ig0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQN
CiMgMTIgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgiIDIgMyA0DQoNCg0K
ZXh0ZXJuICJDIiB7DQoNCg0KDQoNCg0KDQoNCnR5cGVkZWYgaW50IHNzaXpl
X3Q7DQojIDM4ICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAzIDQNCnN0
cnVjdCBGSUxFDQp7DQoNCg0KDQoNCiAgICAgICAgc3NpemVfdCBfY250Ow0K
ICAgICAgICB1bnNpZ25lZCBjaGFyICpfcHRyOw0KDQogICAgICAgIHVuc2ln
bmVkIGNoYXIgKl9iYXNlOw0KICAgICAgICB1bnNpZ25lZCBjaGFyIF9mbGFn
Ow0KICAgICAgICB1bnNpZ25lZCBjaGFyIF9maWxlOw0KICAgICAgICB1bnNp
Z25lZCBfX29yaWVudGF0aW9uOjI7DQogICAgICAgIHVuc2lnbmVkIF9faW9u
b2xvY2s6MTsNCiAgICAgICAgdW5zaWduZWQgX19maWxsZXI6NTsNCn07DQoN
Cg0KDQoNCn0NCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAy
IDMgNA0KIyA1MCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNA0K
ZXh0ZXJuICJDIiB7DQoNCg0KDQoNCnR5cGVkZWYgX19GSUxFIEZJTEU7DQoN
Cg0KDQoNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsNCiMg
NzQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCnR5cGVkZWYg
bG9uZyBsb25nIF9fbG9uZ2xvbmdfdDsNCiMgODggIi9ob21lL21kZWlsL2Jp
bi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5j
bHVkZS9zdGRpby5oIiAzIDQNCnR5cGVkZWYgbG9uZyBvZmZfdDsNCg0KDQoN
Cg0KDQoNCg0KdHlwZWRlZiBfX2xvbmdsb25nX3Qgb2ZmNjRfdDsNCg0KDQoN
Cg0KDQoNCnR5cGVkZWYgbG9uZyBmcG9zX3Q7DQoNCg0KDQoNCg0KDQoNCnR5
cGVkZWYgX19sb25nbG9uZ190IGZwb3M2NF90Ow0KIyAxMzIgIi9ob21lL21k
ZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8z
LjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCnR5cGVkZWYgX192YV9saXN0IF9f
bm90X3ZhX2xpc3RfXzsNCiMgMjAzICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3Rk
aW8uaCIgMyA0DQpleHRlcm4gRklMRSBfX2lvYlsyMF07DQojIDIxNSAiL2hv
bWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNA0KZXh0ZXJuIHVuc2lnbmVk
IGNoYXIgX3NpYnVmW10sIF9zb2J1ZltdOw0KIyAyNDQgIi9ob21lL21kZWls
L2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAv
aW5jbHVkZS9zdGRpby5oIiAzIDQNCmV4dGVybiB1bnNpZ25lZCBjaGFyICpf
YnVmZW5kdGFiW107DQpleHRlcm4gRklMRSAqX2xhc3RidWY7DQojIDI3NSAi
L2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi43LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNA0KZXh0ZXJuIGludCBy
ZW1vdmUoY29uc3QgY2hhciAqKTsNCmV4dGVybiBpbnQgcmVuYW1lKGNvbnN0
IGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBGSUxFICp0bXBmaWxl
KHZvaWQpOw0KZXh0ZXJuIGNoYXIgKnRtcG5hbShjaGFyICopOw0KDQpleHRl
cm4gY2hhciAqdG1wbmFtX3IoY2hhciAqKTsNCg0KZXh0ZXJuIGludCBmY2xv
c2UoRklMRSAqKTsNCmV4dGVybiBpbnQgZmZsdXNoKEZJTEUgKik7DQpleHRl
cm4gRklMRSAqZm9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOw0K
ZXh0ZXJuIEZJTEUgKmZyZW9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICosIEZJTEUgKik7DQpleHRlcm4gdm9pZCBzZXRidWYoRklMRSAqLCBjaGFy
ICopOw0KDQoNCmV4dGVybiB2b2lkIHNldGJ1ZmZlcihGSUxFICosIGNoYXIg
Kiwgc2l6ZV90KTsNCmV4dGVybiBpbnQgc2V0bGluZWJ1ZihGSUxFICopOw0K
DQpleHRlcm4gaW50IHNldHZidWYoRklMRSAqLCBjaGFyICosIGludCwgc2l6
ZV90KTsNCg0KZXh0ZXJuIGludCBmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hh
ciAqLCAuLi4pOw0KDQpleHRlcm4gaW50IGZzY2FuZihGSUxFICosIGNvbnN0
IGNoYXIgKiwgLi4uKTsNCg0KZXh0ZXJuIGludCBwcmludGYoY29uc3QgY2hh
ciAqLCAuLi4pOw0KDQpleHRlcm4gaW50IHNjYW5mKGNvbnN0IGNoYXIgKiwg
Li4uKTsNCg0KDQoNCg0KZXh0ZXJuIGludCBzbnByaW50ZihjaGFyICosIHNp
emVfdCwgY29uc3QgY2hhciAqLCAuLi4pOw0KDQoNCmV4dGVybiBpbnQgc3By
aW50ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsNCg0KZXh0ZXJuIGlu
dCBzc2NhbmYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7DQpl
eHRlcm4gaW50IHZmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX2du
dWNfdmFfbGlzdCk7DQpleHRlcm4gaW50IHZwcmludGYoY29uc3QgY2hhciAq
LCBfX2dudWNfdmFfbGlzdCk7DQoNCg0KDQpleHRlcm4gaW50IHZzbnByaW50
ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlz
dCk7DQoNCmV4dGVybiBpbnQgdnNwcmludGYoY2hhciAqLCBjb25zdCBjaGFy
ICosIF9fZ251Y192YV9saXN0KTsNCmV4dGVybiBpbnQgZmdldGMoRklMRSAq
KTsNCmV4dGVybiBjaGFyICpmZ2V0cyhjaGFyICosIGludCwgRklMRSAqKTsN
CmV4dGVybiBpbnQgZnB1dGMoaW50LCBGSUxFICopOw0KZXh0ZXJuIGludCBm
cHV0cyhjb25zdCBjaGFyICosIEZJTEUgKik7DQpleHRlcm4gaW50IGdldGMo
RklMRSAqKTsNCmV4dGVybiBpbnQgZ2V0Y2hhcih2b2lkKTsNCmV4dGVybiBj
aGFyICpnZXRzKGNoYXIgKik7DQpleHRlcm4gaW50IHB1dGMoaW50LCBGSUxF
ICopOw0KZXh0ZXJuIGludCBwdXRjaGFyKGludCk7DQpleHRlcm4gaW50IHB1
dHMoY29uc3QgY2hhciAqKTsNCmV4dGVybiBpbnQgdW5nZXRjKGludCwgRklM
RSAqKTsNCmV4dGVybiBzaXplX3QgZnJlYWQodm9pZCAqLCBzaXplX3QsIHNp
emVfdCwgRklMRSAqKTsNCmV4dGVybiBzaXplX3QgZndyaXRlKGNvbnN0IHZv
aWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7DQpleHRlcm4gaW50IGZn
ZXRwb3MoRklMRSAqLCBmcG9zX3QgKik7DQpleHRlcm4gaW50IGZzZWVrKEZJ
TEUgKiwgbG9uZywgaW50KTsNCmV4dGVybiBpbnQgZnNldHBvcyhGSUxFICos
IGNvbnN0IGZwb3NfdCAqKTsNCmV4dGVybiBsb25nIGZ0ZWxsKEZJTEUgKik7
DQpleHRlcm4gdm9pZCByZXdpbmQoRklMRSAqKTsNCmV4dGVybiB2b2lkIGNs
ZWFyZXJyKEZJTEUgKik7DQpleHRlcm4gaW50IGZlb2YoRklMRSAqKTsNCmV4
dGVybiBpbnQgZmVycm9yKEZJTEUgKik7DQpleHRlcm4gdm9pZCBwZXJyb3Io
Y29uc3QgY2hhciAqKTsNCg0KDQpleHRlcm4gaW50IF9fZmlsYnVmKEZJTEUg
Kik7DQpleHRlcm4gaW50IF9fZmxzYnVmKGludCwgRklMRSAqKTsNCiMgMzUz
ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0DQpleHRlcm4gRklM
RSAqZmRvcGVuKGludCwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBjaGFyICpj
dGVybWlkKGNoYXIgKik7DQpleHRlcm4gaW50IGZpbGVubyhGSUxFICopOw0K
IyAzNjQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQNCmV4dGVy
biB2b2lkIGZsb2NrZmlsZShGSUxFICopOw0KZXh0ZXJuIGludCBmdHJ5bG9j
a2ZpbGUoRklMRSAqKTsNCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlKEZJTEUg
Kik7DQpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQoRklMRSAqKTsNCmV4dGVy
biBpbnQgZ2V0Y2hhcl91bmxvY2tlZCh2b2lkKTsNCmV4dGVybiBpbnQgcHV0
Y191bmxvY2tlZChpbnQsIEZJTEUgKik7DQpleHRlcm4gaW50IHB1dGNoYXJf
dW5sb2NrZWQoaW50KTsNCiMgMzc5ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3Rk
aW8uaCIgMyA0DQpleHRlcm4gRklMRSAqcG9wZW4oY29uc3QgY2hhciAqLCBj
b25zdCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKmN1c2VyaWQoY2hhciAqKTsN
CmV4dGVybiBjaGFyICp0ZW1wbmFtKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh
ciAqKTsNCmV4dGVybiBpbnQgZ2V0b3B0KGludCwgY2hhciAqY29uc3QgKiwg
Y29uc3QgY2hhciAqKTsNCg0KDQoNCmV4dGVybiBjaGFyICpvcHRhcmc7DQpl
eHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7DQpleHRlcm4gaW50
IGdldHcoRklMRSAqKTsNCmV4dGVybiBpbnQgcHV0dyhpbnQsIEZJTEUgKik7
DQpleHRlcm4gaW50IHBjbG9zZShGSUxFICopOw0KDQoNCg0KDQoNCg0KDQpl
eHRlcm4gaW50IGZzZWVrbyhGSUxFICosIG9mZl90LCBpbnQpOw0KZXh0ZXJu
IG9mZl90IGZ0ZWxsbyhGSUxFICopOw0KIyA0MDggIi9ob21lL21kZWlsL2Jp
bi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5j
bHVkZS9zdGRpby5oIiAzIDQNCmV4dGVybiBGSUxFICpmb3BlbjY0KGNvbnN0
IGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmV4dGVybiBGSUxFICpmcmVvcGVu
NjQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKik7DQpleHRl
cm4gRklMRSAqdG1wZmlsZTY0KHZvaWQpOw0KZXh0ZXJuIGludCBmZ2V0cG9z
NjQoRklMRSAqLCBmcG9zNjRfdCAqKTsNCmV4dGVybiBpbnQgZnNldHBvczY0
KEZJTEUgKiwgY29uc3QgZnBvczY0X3QgKik7DQpleHRlcm4gaW50IGZzZWVr
bzY0KEZJTEUgKiwgb2ZmNjRfdCwgaW50KTsNCmV4dGVybiBvZmY2NF90IGZ0
ZWxsbzY0KEZJTEUgKik7DQojIDU4NiAiL2hvbWUvbWRlaWwvYmluLy4uL2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0
ZGlvLmgiIDMgNA0KfQ0KIyAxOCAiYnVmZmVyLmNjIiAyDQojIDEgIi91c3Iv
aW5jbHVkZS9zdHJpbmcuaCIgMSAzIDQNCiMgMTYgIi91c3IvaW5jbHVkZS9z
dHJpbmcuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpc3RyaW5nLmgJMS4y
Mgk5Ny8xMi8yMiBTTUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0
dXJlX3Rlc3RzLmgiIDEgMyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvc3RyaW5n
LmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQojIDQzICIvdXNyL2luY2x1
ZGUvc3RyaW5nLmgiIDMgNA0KZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lkICos
IGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsNCmV4dGVybiB2b2lkICptZW1tb3Zl
KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOw0KZXh0ZXJuIGNoYXIg
KnN0cmNweShjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAq
c3RybmNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCg0KZXh0
ZXJuIGNoYXIgKnN0cmNhdChjaGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRl
cm4gY2hhciAqc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90
KTsNCg0KZXh0ZXJuIGludCBtZW1jbXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2
b2lkICosIHNpemVfdCk7DQpleHRlcm4gaW50IHN0cmNtcChjb25zdCBjaGFy
ICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gaW50IHN0cmNvbGwoY29uc3Qg
Y2hhciAqLCBjb25zdCBjaGFyICopOw0KZXh0ZXJuIGludCBzdHJuY21wKGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0KZXh0ZXJuIHNp
emVfdCBzdHJ4ZnJtKGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0K
DQpleHRlcm4gdm9pZCAqbWVtY2hyKGNvbnN0IHZvaWQgKiwgaW50LCBzaXpl
X3QpOw0KZXh0ZXJuIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICosIGludCk7
DQpleHRlcm4gc2l6ZV90IHN0cmNzcG4oY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICopOw0KZXh0ZXJuIGNoYXIgKnN0cnBicmsoY29uc3QgY2hhciAqLCBj
b25zdCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKnN0cnJjaHIoY29uc3QgY2hh
ciAqLCBpbnQpOw0KZXh0ZXJuIHNpemVfdCBzdHJzcG4oY29uc3QgY2hhciAq
LCBjb25zdCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKnN0cnN0cihjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqc3RydG9rKGNo
YXIgKiwgY29uc3QgY2hhciAqKTsNCg0KDQpleHRlcm4gY2hhciAqc3RydG9r
X3IoY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiopOw0KDQpleHRlcm4g
dm9pZCAqbWVtc2V0KHZvaWQgKiwgaW50LCBzaXplX3QpOw0KZXh0ZXJuIGNo
YXIgKnN0cmVycm9yKGludCk7DQpleHRlcm4gc2l6ZV90IHN0cmxlbihjb25z
dCBjaGFyICopOw0KDQoNCg0KZXh0ZXJuIHZvaWQgKm1lbWNjcHkodm9pZCAq
LCBjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsNCg0KDQoNCg0KZXh0ZXJu
IGNoYXIgKnN0cnNpZ25hbChpbnQpOw0KZXh0ZXJuIGludCBmZnMoaW50KTsN
CmV4dGVybiBpbnQgc3RyY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNo
YXIgKik7DQpleHRlcm4gaW50IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwg
Y29uc3QgY2hhciAqLCBzaXplX3QpOw0KDQoNCg0KDQoNCmV4dGVybiBjaGFy
ICpzdHJkdXAoY29uc3QgY2hhciAqKTsNCiMgMTQ2ICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDMgNA0KfQ0KIyAxOSAiYnVmZmVyLmNjIiAyDQojIDEgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0DQojIDE2ICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIyl0aW1lLmgJMS4zNgk5
OC8wMy8yNyBTTUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJl
X3Rlc3RzLmgiIDEgMyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAy
IDMgNA0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEg
MyA0DQojIDI1ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg
NA0KI3ByYWdtYSBpZGVudCAiQCgjKXR5cGVzLmgJMS42Mwk5OC8wNC8yOCBT
TUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMg
NA0KIyAyOCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMg
NA0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAz
IDQNCiMgMjkgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAz
IDQNCg0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5o
IiAxIDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9tYWNodHlwZXMuaCIg
MyA0DQojcHJhZ21hIGlkZW50ICJAKCMpbWFjaHR5cGVzLmgJMS4xMgk5Ni8w
OC8wMSBTTUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rl
c3RzLmgiIDEgMyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBl
cy5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyAzMyAiL3Vzci9pbmNs
dWRlL3N5cy9tYWNodHlwZXMuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBfcGh5
c2Fkcl90IHsgaW50IHJbMV07IH0gKnBoeXNhZHJfdDsNCg0KdHlwZWRlZiBz
dHJ1Y3QgX2xhYmVsX3QgeyBsb25nIHZhbFsyXTsgfSBsYWJlbF90Ow0KDQoN
Cg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGxvY2tfdDsNCg0KDQp9DQojIDM0
ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0DQojIDQ1
ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KIyAxICIv
dXNyL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAxIDMgNA0KIyA5ICIvdXNy
L2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQNCiNwcmFnbWEgaWRlbnQg
IkAoIylpbnRfdHlwZXMuaAkxLjYJOTcvMDgvMjAgU01JIg0KIyA0MiAiL3Vz
ci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0DQojIDEgIi91c3IvaW5j
bHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQNCiMgNDMgIi91c3IvaW5jbHVk
ZS9zeXMvaW50X3R5cGVzLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQoj
IDYyICIvdXNyL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQNCnR5cGVk
ZWYgY2hhciBpbnQ4X3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiBzaG9ydCBpbnQx
Nl90Ow0KdHlwZWRlZiBpbnQgaW50MzJfdDsNCg0KDQoNCg0KdHlwZWRlZiBs
b25nIGxvbmcgaW50NjRfdDsNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgY2hh
ciB1aW50OF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsN
CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90Ow0KDQoNCg0KDQp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50NjRfdDsNCiMgOTQgIi91c3Iv
aW5jbHVkZS9zeXMvaW50X3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBpbnQ2NF90
IGludG1heF90Ow0KdHlwZWRlZiB1aW50NjRfdCB1aW50bWF4X3Q7DQojIDEx
MCAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0DQp0eXBlZGVm
IGludCBpbnRwdHJfdDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRwdHJf
dDsNCg0KDQoNCg0KDQoNCg0KdHlwZWRlZiBjaGFyIGludF9sZWFzdDhfdDsN
Cg0KDQoNCg0KDQp0eXBlZGVmIHNob3J0IGludF9sZWFzdDE2X3Q7DQp0eXBl
ZGVmIGludCBpbnRfbGVhc3QzMl90Ow0KDQoNCg0KDQp0eXBlZGVmIGxvbmcg
bG9uZyBpbnRfbGVhc3Q2NF90Ow0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIHVpbnRfbGVhc3Q4X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVp
bnRfbGVhc3QxNl90Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9sZWFz
dDMyX3Q7DQoNCg0KDQoNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVp
bnRfbGVhc3Q2NF90Ow0KDQoNCg0KDQp9DQojIDQ2ICIvaG9tZS9tZGVpbC9i
aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0DQoNCg0KDQoNCg0KDQoNCmV4dGVy
biAiQyIgew0KIyA2MiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5o
IiAzIDQNCnR5cGVkZWYgbG9uZyBsb25nIGxvbmdsb25nX3Q7DQp0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgbG9uZyB1X2xvbmdsb25nX3Q7DQojIDg1ICIvaG9t
ZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBsb25n
IHRfc2NhbGFyX3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdF91c2NhbGFy
X3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjaGFyX3Q7
DQp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydF90Ow0KdHlwZWRlZiB1
bnNpZ25lZCBpbnQgdWludF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVs
b25nX3Q7DQoNCnR5cGVkZWYgY2hhciAqY2FkZHJfdDsNCnR5cGVkZWYgbG9u
ZyBkYWRkcl90Ow0KdHlwZWRlZiBzaG9ydCBjbnRfdDsNCg0KDQp0eXBlZGVm
IHVsb25nX3QgcGFkZHJfdDsNCiMgMTE2ICIvaG9tZS9tZGVpbC9iaW4vLi4v
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiBpbnQgcHRyZGlmZl90Ow0KIyAx
MjUgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0DQp0eXBl
ZGVmIHVsb25nX3QgcGZuX3Q7DQp0eXBlZGVmIHVsb25nX3QgcGdjbnRfdDsN
CnR5cGVkZWYgbG9uZyBzcGdjbnRfdDsNCg0KdHlwZWRlZiB1Y2hhcl90IHVz
ZV90Ow0KdHlwZWRlZiBzaG9ydCBzeXNpZF90Ow0KdHlwZWRlZiBzaG9ydCBp
bmRleF90Ow0KdHlwZWRlZiB2b2lkICp0aW1lb3V0X2lkX3Q7DQp0eXBlZGVm
IHZvaWQgKmJ1ZmNhbGxfaWRfdDsNCiMgMTYzICIvaG9tZS9tZGVpbC9iaW4v
Li4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiB1bG9uZ190IGlub190Ow0K
dHlwZWRlZiBsb25nIGJsa2NudF90Ow0KdHlwZWRlZiB1bG9uZ190IGZzYmxr
Y250X3Q7DQp0eXBlZGVmIHVsb25nX3QgZnNmaWxjbnRfdDsNCiMgMTgxICIv
aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiB1
X2xvbmdsb25nX3QgaW5vNjRfdDsNCnR5cGVkZWYgbG9uZ2xvbmdfdCBibGtj
bnQ2NF90Ow0KdHlwZWRlZiB1X2xvbmdsb25nX3QgZnNibGtjbnQ2NF90Ow0K
dHlwZWRlZiB1X2xvbmdsb25nX3QgZnNmaWxjbnQ2NF90Ow0KDQoNCg0KDQoN
Cg0KdHlwZWRlZiBsb25nIGJsa3NpemVfdDsNCg0KDQoNCnR5cGVkZWYgZW51
bSB7IF9CX0ZBTFNFLCBfQl9UUlVFIH0gYm9vbGVhbl90Ow0KIyAyMDggIi9o
b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0DQp0eXBlZGVmIGlu
dDY0X3QgcGFkNjRfdDsNCnR5cGVkZWYgdWludDY0X3QgdXBhZDY0X3Q7DQoj
IDIyMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCnR5
cGVkZWYgbG9uZ2xvbmdfdCBvZmZzZXRfdDsNCnR5cGVkZWYgdV9sb25nbG9u
Z190IHVfb2Zmc2V0X3Q7DQp0eXBlZGVmIHVfbG9uZ2xvbmdfdCBsZW5fdDsN
CnR5cGVkZWYgbG9uZ2xvbmdfdCBkaXNrYWRkcl90Ow0KIyAyNDIgIi9ob21l
L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
Ny8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0DQp0eXBlZGVmIHVuaW9u
IHsNCiAgICAgICAgb2Zmc2V0X3QgX2Y7DQogICAgICAgIHN0cnVjdCB7DQog
ICAgICAgICAgICAgICAgaW50MzJfdCBfdTsNCiAgICAgICAgICAgICAgICBp
bnQzMl90IF9sOw0KICAgICAgICB9IF9wOw0KfSBsbG9mZl90Ow0KIyAyNjIg
Ii9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0DQp0eXBlZGVm
IHVuaW9uIHsNCiAgICAgICAgZGlza2FkZHJfdCBfZjsNCiAgICAgICAgc3Ry
dWN0IHsNCiAgICAgICAgICAgICAgICBpbnQzMl90IF91Ow0KICAgICAgICAg
ICAgICAgIGludDMyX3QgX2w7DQogICAgICAgIH0gX3A7DQp9IGxsZGFkZHJf
dDsNCg0KDQp0eXBlZGVmIHVpbnRfdCBrX2ZsdHNldF90Ow0KIyAyODcgIi9o
b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0DQp0eXBlZGVmIGxv
bmcgaWRfdDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgdWludF90IHVzZWNvbmRz
X3Q7DQoNCg0KDQp0eXBlZGVmIGxvbmcgc3VzZWNvbmRzX3Q7DQojIDMwOCAi
L2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCnR5cGVkZWYg
dWxvbmdfdCBtYWpvcl90Ow0KdHlwZWRlZiB1bG9uZ190IG1pbm9yX3Q7DQoN
Cg0KDQoNCg0KdHlwZWRlZiBzaG9ydCBwcmlfdDsNCiMgMzI4ICIvaG9tZS9t
ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
My4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiB1c2hvcnRf
dCBvX21vZGVfdDsNCnR5cGVkZWYgc2hvcnQgb19kZXZfdDsNCnR5cGVkZWYg
dXNob3J0X3Qgb191aWRfdDsNCnR5cGVkZWYgb191aWRfdCBvX2dpZF90Ow0K
dHlwZWRlZiBzaG9ydCBvX25saW5rX3Q7DQp0eXBlZGVmIHNob3J0IG9fcGlk
X3Q7DQp0eXBlZGVmIHVzaG9ydF90IG9faW5vX3Q7DQoNCg0KDQoNCg0KdHlw
ZWRlZiBpbnQga2V5X3Q7DQoNCg0KDQp0eXBlZGVmIHVsb25nX3QgbW9kZV90
Ow0KDQoNCg0KDQoNCg0KDQp0eXBlZGVmIGxvbmcgdWlkX3Q7DQoNCg0KDQp0
eXBlZGVmIHVpZF90IGdpZF90Ow0KDQoNCg0KDQoNCg0KdHlwZWRlZiB1bnNp
Z25lZCBpbnQgcHRocmVhZF90Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRo
cmVhZF9rZXlfdDsNCg0KdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfbXV0ZXgg
ew0KICAgICAgICBzdHJ1Y3Qgew0KICAgICAgICAgICAgICAgIHVpbnQ4X3Qg
X19wdGhyZWFkX211dGV4X2ZsYWdbNF07DQogICAgICAgICAgICAgICAgdWlu
dDMyX3QgX19wdGhyZWFkX211dGV4X3R5cGU7DQogICAgICAgIH0gX19wdGhy
ZWFkX211dGV4X2ZsYWdzOw0KICAgICAgICB1bmlvbiB7DQogICAgICAgICAg
ICAgICAgc3RydWN0IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4
X3QgX19wdGhyZWFkX211dGV4X3BhZFs4XTsNCiAgICAgICAgICAgICAgICB9
IF9fcHRocmVhZF9tdXRleF9sb2NrNjQ7DQogICAgICAgICAgICAgICAgdXBh
ZDY0X3QgX19wdGhyZWFkX211dGV4X293bmVyNjQ7DQogICAgICAgIH0gX19w
dGhyZWFkX211dGV4X2xvY2s7DQogICAgICAgIHVwYWQ2NF90IF9fcHRocmVh
ZF9tdXRleF9kYXRhOw0KfSBwdGhyZWFkX211dGV4X3Q7DQoNCnR5cGVkZWYg
c3RydWN0IF9wdGhyZWFkX2NvbmQgew0KICAgICAgICBzdHJ1Y3Qgew0KICAg
ICAgICAgICAgICAgIHVpbnQ4X3QgX19wdGhyZWFkX2NvbmRfZmxhZ1s0XTsN
CiAgICAgICAgICAgICAgICB1aW50MzJfdCBfX3B0aHJlYWRfY29uZF90eXBl
Ow0KICAgICAgICB9IF9fcHRocmVhZF9jb25kX2ZsYWdzOw0KICAgICAgICB1
cGFkNjRfdCBfX3B0aHJlYWRfY29uZF9kYXRhOw0KfSBwdGhyZWFkX2NvbmRf
dDsNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrIHsN
CiAgICAgICAgaW50MzJfdCBfX3B0aHJlYWRfcndsb2NrX3JlYWRlcnM7DQog
ICAgICAgIHVpbnQxNl90IF9fcHRocmVhZF9yd2xvY2tfdHlwZTsNCiAgICAg
ICAgdWludDE2X3QgX19wdGhyZWFkX3J3bG9ja19tYWdpYzsNCiAgICAgICAg
dXBhZDY0X3QgX19wdGhyZWFkX3J3bG9ja19wYWQxWzNdOw0KICAgICAgICB1
cGFkNjRfdCBfX3B0aHJlYWRfcndsb2NrX3BhZDJbMl07DQogICAgICAgIHVw
YWQ2NF90IF9fcHRocmVhZF9yd2xvY2tfcGFkM1syXTsNCn0gcHRocmVhZF9y
d2xvY2tfdDsNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfYXR0
ciB7DQogICAgICAgIHZvaWQgKl9fcHRocmVhZF9hdHRycDsNCn0gcHRocmVh
ZF9hdHRyX3Q7DQoNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRf
bXV0ZXhhdHRyIHsNCiAgICAgICAgdm9pZCAqX19wdGhyZWFkX211dGV4YXR0
cnA7DQp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7DQoNCg0KDQoNCg0KdHlwZWRl
ZiBzdHJ1Y3QgX3B0aHJlYWRfY29uZGF0dHIgew0KICAgICAgICB2b2lkICpf
X3B0aHJlYWRfY29uZGF0dHJwOw0KfSBwdGhyZWFkX2NvbmRhdHRyX3Q7DQoN
Cg0KDQoNCnR5cGVkZWYgc3RydWN0IF9vbmNlIHsNCiAgICAgICAgdXBhZDY0
X3QgX19wdGhyZWFkX29uY2VfcGFkWzRdOw0KfSBwdGhyZWFkX29uY2VfdDsN
Cg0KDQoNCg0KDQp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2thdHRy
IHsNCiAgICAgICAgdm9pZCAqX19wdGhyZWFkX3J3bG9ja2F0dHJwOw0KfSBw
dGhyZWFkX3J3bG9ja2F0dHJfdDsNCg0KdHlwZWRlZiB1bG9uZ190IGRldl90
Ow0KDQoNCg0KDQoNCnR5cGVkZWYgdWxvbmdfdCBubGlua190Ow0KdHlwZWRl
ZiBsb25nIHBpZF90Ow0KIyA0NzYgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMyA0DQp0eXBlZGVmIGxvbmcgdGltZV90Ow0KDQoNCg0KDQp0
eXBlZGVmIGxvbmcgY2xvY2tfdDsNCg0KDQoNCg0KdHlwZWRlZiBpbnQgY2xv
Y2tpZF90Ow0KDQoNCg0KDQp0eXBlZGVmIGludCB0aW1lcl90Ow0KDQoNCg0K
DQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVuY2hhcjsNCnR5cGVkZWYg
dW5zaWduZWQgc2hvcnQgdXNob3J0Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQg
dWludDsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzsNCiMgNTUyICIv
aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNA0KdHlwZWRlZiB1
bnNpZ25lZCBjaGFyIHVfY2hhcjsNCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
dV9zaG9ydDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50Ow0KdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIHVfbG9uZzsNCnR5cGVkZWYgc3RydWN0IF9xdWFk
IHsgaW50IHZhbFsyXTsgfSBxdWFkX3Q7DQp0eXBlZGVmIHF1YWRfdCBxdWFk
Ow0KDQoNCg0KDQoNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o
IiAxIDMgNA0KIyAxMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0
DQojcHJhZ21hIGlkZW50ICJAKCMpc2VsZWN0LmgJMS4xNgk5OC8wNC8yNyBT
TUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgi
IDEgMyA0DQojIDE1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMg
NA0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMyA0DQoj
IDIyICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQojcHJhZ21hIGlk
ZW50ICJAKCMpdGltZS5oCTIuNjIJOTgvMDIvMDQgU01JIg0KDQojIDEgIi91
c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAyNSAi
L3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0DQoNCg0KDQoNCg0KDQoN
CmV4dGVybiAiQyIgew0KIyA0OSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgi
IDMgNA0Kc3RydWN0IHRpbWV2YWwgew0KICAgICAgICB0aW1lX3QgdHZfc2Vj
Ow0KICAgICAgICBzdXNlY29uZHNfdCB0dl91c2VjOw0KfTsNCiMgODIgIi91
c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQNCnN0cnVjdCB0aW1lem9uZSB7
DQogICAgICAgIGludCB0el9taW51dGVzd2VzdDsNCiAgICAgICAgaW50IHR6
X2RzdHRpbWU7DQp9Ow0KDQoNCg0KDQoNCn0NCiMgMTAwICIvdXNyL2luY2x1
ZGUvc3lzL3RpbWUuaCIgMyA0DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMSAzIDQNCiMgMTAxICIvdXNyL2luY2x1ZGUvc3lzL3Rp
bWUuaCIgMiAzIDQNCg0KDQoNCmV4dGVybiAiQyIgew0KIyAxNTUgIi91c3Iv
aW5jbHVkZS9zeXMvdGltZS5oIiAzIDQNCnN0cnVjdCBpdGltZXJ2YWwgew0K
ICAgICAgICBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsNCiAgICAgICAg
c3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7DQp9Ow0KIyAyMDMgIi91c3IvaW5j
bHVkZS9zeXMvdGltZS5oIiAzIDQNCnR5cGVkZWYgbG9uZ2xvbmdfdCBocnRp
bWVfdDsNCiMgMzE1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQpp
bnQgYWRqdGltZShzdHJ1Y3QgdGltZXZhbCAqLCBzdHJ1Y3QgdGltZXZhbCAq
KTsNCiMgMzI2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQppbnQg
Z2V0aXRpbWVyKGludCwgc3RydWN0IGl0aW1lcnZhbCAqKTsNCmludCB1dGlt
ZXMoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqKTsNCg0K
aW50IHNldGl0aW1lcihpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKiwg
c3RydWN0IGl0aW1lcnZhbCAqKTsNCiMgMzY0ICIvdXNyL2luY2x1ZGUvc3lz
L3RpbWUuaCIgMyA0DQppbnQgc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFs
ICosIHZvaWQgKik7DQoNCmhydGltZV90IGdldGhydGltZSh2b2lkKTsNCmhy
dGltZV90IGdldGhydnRpbWUodm9pZCk7DQojIDM4NCAiL3Vzci9pbmNsdWRl
L3N5cy90aW1lLmgiIDMgNA0KaW50IGdldHRpbWVvZmRheShzdHJ1Y3QgdGlt
ZXZhbCAqLCB2b2lkICopOw0KIyA0MDUgIi91c3IvaW5jbHVkZS9zeXMvdGlt
ZS5oIiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQNCiMg
NDA2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzIDQNCiMgNDE4ICIv
dXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0DQojIDEgIi91c3IvaW5jbHVk
ZS9zeXMvc2VsZWN0LmgiIDEgMyA0DQojIDQxOSAiL3Vzci9pbmNsdWRlL3N5
cy90aW1lLmgiIDIgMyA0DQoNCg0KDQoNCg0KfQ0KIyAxOCAiL3Vzci9pbmNs
dWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQNCg0KDQoNCmV4dGVybiAiQyIgew0K
IyA0NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0DQp0eXBlZGVm
IGxvbmcgZmRfbWFzazsNCg0KdHlwZWRlZiBsb25nIGZkc19tYXNrOw0KIyA3
MyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0DQp0eXBlZGVmIHN0
cnVjdCBmZF9zZXQgew0KDQoNCg0KICAgICAgICBsb25nIGZkc19iaXRzWygo
KDEwMjQpKygoKHNpemVvZiAoZmRzX21hc2spICogOCkpLTEpKS8oKHNpemVv
ZiAoZmRzX21hc2spICogOCkpKV07DQp9IGZkX3NldDsNCiMgOTcgIi91c3Iv
aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNA0KZXh0ZXJuIGludCBzZWxlY3Qo
aW50LCBmZF9zZXQgKiwgZmRfc2V0ICosIGZkX3NldCAqLCBzdHJ1Y3QgdGlt
ZXZhbCAqKTsNCg0KDQoNCg0KDQoNCn0NCiMgNTY1ICIvaG9tZS9tZGVpbC9i
aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0DQojIDU4MSAiL2hvbWUvbWRlaWwv
YmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzIDQNCn0NCiMgMjAgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQojIDY0ICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAzIDQNCnN0cnVjdCB0bSB7DQogICAgICAgIGlu
dCB0bV9zZWM7DQogICAgICAgIGludCB0bV9taW47DQogICAgICAgIGludCB0
bV9ob3VyOw0KICAgICAgICBpbnQgdG1fbWRheTsNCiAgICAgICAgaW50IHRt
X21vbjsNCiAgICAgICAgaW50IHRtX3llYXI7DQogICAgICAgIGludCB0bV93
ZGF5Ow0KICAgICAgICBpbnQgdG1feWRheTsNCiAgICAgICAgaW50IHRtX2lz
ZHN0Ow0KfTsNCg0KDQoNCmV4dGVybiBjbG9ja190IGNsb2NrKHZvaWQpOw0K
ZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSh0aW1lX3QsIHRpbWVfdCk7DQpleHRl
cm4gdGltZV90IG1rdGltZShzdHJ1Y3QgdG0gKik7DQpleHRlcm4gdGltZV90
IHRpbWUodGltZV90ICopOw0KZXh0ZXJuIGNoYXIgKmFzY3RpbWUoY29uc3Qg
c3RydWN0IHRtICopOw0KZXh0ZXJuIGNoYXIgKmN0aW1lKGNvbnN0IHRpbWVf
dCAqKTsNCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZShjb25zdCB0aW1lX3Qg
Kik7DQpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUoY29uc3QgdGltZV90
ICopOw0KZXh0ZXJuIHNpemVfdCBzdHJmdGltZShjaGFyICosIHNpemVfdCwg
Y29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0gKik7DQoNCg0KDQpleHRl
cm4gc3RydWN0IHRtICpnbXRpbWVfcihjb25zdCB0aW1lX3QgKiwgc3RydWN0
IHRtICopOw0KZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IoY29uc3Qg
dGltZV90ICosIHN0cnVjdCB0bSAqKTsNCg0KDQoNCg0KDQpleHRlcm4gY2hh
ciAqc3RycHRpbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHN0cnVj
dCB0bSAqKTsNCg0KDQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGlt
ZV9pbXBsLmgiIDEgMyA0DQojIDE1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVf
aW1wbC5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIyl0aW1lX2ltcGwuaAkx
LjMJOTgvMDIvMTMgU01JIg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVh
dHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAxOCAiL3Vzci9pbmNsdWRlL3N5cy90
aW1lX2ltcGwuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgMzYgIi91
c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDMgNA0KdHlwZWRlZiBzdHJ1
Y3QgdGltZXNwZWMgew0KICAgICAgICB0aW1lX3QgdHZfc2VjOw0KICAgICAg
ICBsb25nIHR2X25zZWM7DQp9IHRpbWVzcGVjX3Q7DQojIDYwICIvdXNyL2lu
Y2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQNCnR5cGVkZWYgc3RydWN0IHRp
bWVzcGVjIHRpbWVzdHJ1Y190Ow0KIyA3OSAiL3Vzci9pbmNsdWRlL3N5cy90
aW1lX2ltcGwuaCIgMyA0DQp0eXBlZGVmIHN0cnVjdCBpdGltZXJzcGVjIHsN
CiAgICAgICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOw0KICAgICAg
ICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7DQp9IGl0aW1lcnNwZWNfdDsN
CiMgMTMwICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQNCn0N
CiMgMTA0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMgNA0KIyAxMTggIi91
c3IvaW5jbHVkZS90aW1lLmgiIDMgNA0KdW5pb24gc2lndmFsIHsNCiAgICAg
ICAgaW50IHNpdmFsX2ludDsNCiAgICAgICAgdm9pZCAqc2l2YWxfcHRyOw0K
fTsNCg0KDQoNCg0Kc3RydWN0IHNpZ2V2ZW50IHsNCiAgICAgICAgaW50IHNp
Z2V2X25vdGlmeTsNCiAgICAgICAgaW50IHNpZ2V2X3NpZ25vOw0KICAgICAg
ICB1bmlvbiBzaWd2YWwgc2lnZXZfdmFsdWU7DQogICAgICAgIHZvaWQgKCpz
aWdldl9ub3RpZnlfZnVuY3Rpb24pKHVuaW9uIHNpZ3ZhbCk7DQogICAgICAg
IHB0aHJlYWRfYXR0cl90ICpzaWdldl9ub3RpZnlfYXR0cmlidXRlczsNCiAg
ICAgICAgaW50IF9fc2lnZXZfcGFkMjsNCn07DQoNCg0KZXh0ZXJuIGludCBj
bG9ja19nZXRyZXMoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7DQpl
eHRlcm4gaW50IGNsb2NrX2dldHRpbWUoY2xvY2tpZF90LCBzdHJ1Y3QgdGlt
ZXNwZWMgKik7DQpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUoY2xvY2tpZF90
LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7DQpleHRlcm4gaW50IHRpbWVy
X2NyZWF0ZShjbG9ja2lkX3QsIHN0cnVjdCBzaWdldmVudCAqLCB0aW1lcl90
ICopOw0KZXh0ZXJuIGludCB0aW1lcl9kZWxldGUodGltZXJfdCk7DQpleHRl
cm4gaW50IHRpbWVyX2dldG92ZXJydW4odGltZXJfdCk7DQpleHRlcm4gaW50
IHRpbWVyX2dldHRpbWUodGltZXJfdCwgc3RydWN0IGl0aW1lcnNwZWMgKik7
DQpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUodGltZXJfdCwgaW50LCBjb25z
dCBzdHJ1Y3QgaXRpbWVyc3BlYyAqLA0KICAgICAgICAgICAgICAgIHN0cnVj
dCBpdGltZXJzcGVjICopOw0KZXh0ZXJuIGludCBuYW5vc2xlZXAoY29uc3Qg
c3RydWN0IHRpbWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKTsNCg0KDQoN
Cg0KZXh0ZXJuIHZvaWQgdHpzZXQodm9pZCk7DQoNCmV4dGVybiBjaGFyICp0
em5hbWVbMl07DQoNCg0KZXh0ZXJuIGxvbmcgX3N5c2NvbmYoaW50KTsNCg0K
DQoNCg0KDQoNCmV4dGVybiBsb25nIHRpbWV6b25lOw0KZXh0ZXJuIGludCBk
YXlsaWdodDsNCiMgMTc2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQNCmV4
dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUoY29uc3QgY2hhciAqKTsNCg0KDQoN
Cg0KDQoNCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7DQojIDI3MiAiL3Vzci9p
bmNsdWRlL3RpbWUuaCIgMyA0DQpzdGF0aWMgY2hhciAqDQphc2N0aW1lX3Io
Y29uc3Qgc3RydWN0IHRtICpfX3RtLCBjaGFyICpfX2J1ZikNCnsNCiAgICAg
ICAgZXh0ZXJuIGNoYXIgKl9fcG9zaXhfYXNjdGltZV9yKGNvbnN0IHN0cnVj
dCB0bSAqLCBjaGFyICopOw0KICAgICAgICByZXR1cm4gKF9fcG9zaXhfYXNj
dGltZV9yKF9fdG0sIF9fYnVmKSk7DQp9DQpzdGF0aWMgY2hhciAqDQpjdGlt
ZV9yKGNvbnN0IHRpbWVfdCAqX190aW1lLCBjaGFyICpfX2J1ZikNCnsNCiAg
ICAgICAgZXh0ZXJuIGNoYXIgKl9fcG9zaXhfY3RpbWVfcihjb25zdCB0aW1l
X3QgKiwgY2hhciAqKTsNCiAgICAgICAgcmV0dXJuIChfX3Bvc2l4X2N0aW1l
X3IoX190aW1lLCBfX2J1ZikpOw0KfQ0KIyAzMzQgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDMgNA0KfQ0KIyAyMCAiYnVmZmVyLmNjIiAyDQojIDEgIi9ob21l
L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
Ny8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMgNA0KIyAyMSAiYnVmZmVyLmNj
IiAyDQojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzIDQNCiMgMjIg
ImJ1ZmZlci5jYyIgMg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvYmFja3dhcmQvZnN0cmVhbS5oIiAxIDMNCiMgMzEgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9mc3RyZWFt
LmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JhY2t3YXJkL2JhY2t3YXJkX3dhcm5pbmcuaCIgMSAzDQojIDMyICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYmFja3dhcmQvZnN0cmVh
bS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2ZzdHJlYW0uaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVhbS5oIiAz
DQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2lzdHJlYW0uaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAzDQoNCiMg
MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2lvcy5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMw0KDQojIDEgIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAz
DQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfaW9zZndkLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytj
b25maWcuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcu
aCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
c3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9vc19kZWZpbmVzLmgiIDEgMw0K
IyAzNSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJj
LXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDIgMw0KIyA0MCAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv
c2Z3ZC5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDMN
Cg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3Bh
cmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAzDQojIDQw
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdHJp
bmdmd2QuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8
Y2xhc3MgX0NoYXJUPg0KICAgIHN0cnVjdCBjaGFyX3RyYWl0czsNCg0KICB0
ZW1wbGF0ZTw+IGNsYXNzIGNoYXJfdHJhaXRzPGNoYXI+Ow0KDQoNCg0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4NCiAgICBjbGFzcyBhbGxvY2F0
b3I7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwNCiAgICAgICAgICAgdHlw
ZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPg0KICAgIGNsYXNz
IGJhc2ljX3N0cmluZzsNCg0KICB0eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFy
PiBzdHJpbmc7DQoNCg0KDQp9DQojIDQxICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMw0KIyAxICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgi
IDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvZnBvcy5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysraW8u
aCIgMSAzDQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytpby5oIiAzDQojIDEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9jc3RkaW8iIDEg
Mw0KIyAzMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Nz
dGRpbyIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMw0KIyAzNyAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzDQoj
IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1z
dW4tc29sYXJpczIuNy9iaXRzL2MrK2NvbmZpZy5oIiAxIDMNCiMgMzggIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Rk
aW8uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIg
Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0DQoj
IDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfY3N0ZGRlZi5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB1c2lu
ZyA6OnB0cmRpZmZfdDsNCiAgdXNpbmcgOjpzaXplX3Q7DQp9DQojIDM5ICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0
ZGlvLmgiIDIgMw0KIyA0MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzDQojIDEgIi9ob21lL21kZWls
L2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAv
aW5jbHVkZS9zdGRpby5oIiAxIDMgNA0KIyA0MiAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMNCiMg
ODYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jc3RkaW8uaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KICB1c2luZyA6OkZJ
TEU7DQogIHVzaW5nIDo6ZnBvc190Ow0KDQogIHVzaW5nIDo6Y2xlYXJlcnI7
DQogIHVzaW5nIDo6ZmNsb3NlOw0KICB1c2luZyA6OmZlb2Y7DQogIHVzaW5n
IDo6ZmVycm9yOw0KICB1c2luZyA6OmZmbHVzaDsNCiAgdXNpbmcgOjpmZ2V0
YzsNCiAgdXNpbmcgOjpmZ2V0cG9zOw0KICB1c2luZyA6OmZnZXRzOw0KICB1
c2luZyA6OmZvcGVuOw0KICB1c2luZyA6OmZwcmludGY7DQogIHVzaW5nIDo6
ZnB1dGM7DQogIHVzaW5nIDo6ZnB1dHM7DQogIHVzaW5nIDo6ZnJlYWQ7DQog
IHVzaW5nIDo6ZnJlb3BlbjsNCiAgdXNpbmcgOjpmc2NhbmY7DQogIHVzaW5n
IDo6ZnNlZWs7DQogIHVzaW5nIDo6ZnNldHBvczsNCiAgdXNpbmcgOjpmdGVs
bDsNCiAgdXNpbmcgOjpmd3JpdGU7DQogIHVzaW5nIDo6Z2V0YzsNCiAgdXNp
bmcgOjpnZXRjaGFyOw0KICB1c2luZyA6OmdldHM7DQogIHVzaW5nIDo6cGVy
cm9yOw0KICB1c2luZyA6OnByaW50ZjsNCiAgdXNpbmcgOjpwdXRjOw0KICB1
c2luZyA6OnB1dGNoYXI7DQogIHVzaW5nIDo6cHV0czsNCiAgdXNpbmcgOjpy
ZW1vdmU7DQogIHVzaW5nIDo6cmVuYW1lOw0KICB1c2luZyA6OnJld2luZDsN
CiAgdXNpbmcgOjpzY2FuZjsNCiAgdXNpbmcgOjpzZXRidWY7DQogIHVzaW5n
IDo6c2V0dmJ1ZjsNCiAgdXNpbmcgOjpzcHJpbnRmOw0KICB1c2luZyA6OnNz
Y2FuZjsNCiAgdXNpbmcgOjp0bXBmaWxlOw0KICB1c2luZyA6OnRtcG5hbTsN
CiAgdXNpbmcgOjp1bmdldGM7DQogIHVzaW5nIDo6dmZwcmludGY7DQogIHVz
aW5nIDo6dnByaW50ZjsNCiAgdXNpbmcgOjp2c3ByaW50ZjsNCn0NCiMgMzIg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9jc3RkaW8iIDIg
Mw0KIyAzNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3Nw
YXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysraW8uaCIgMiAzDQojIDEgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAxIDMN
CiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFy
Yy1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2lvLmgiIDIgMw0KIyAxICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFy
aXMyLjcvYml0cy9ndGhyLmgiIDEgMw0KIyA5OCAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMv
Z3Roci5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2d0aHItZGVmYXVsdC5o
IiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2d0aHItZGVmYXVsdC5oIiAz
DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMyA0DQoj
IDE4ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQNCiNwcmFn
bWEgaWRlbnQgIkAoIylwdGhyZWFkLmgJMS4yNgk5OC8wNC8xMiBTTUkiDQoN
Cg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0
DQojIDIyICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNA0K
IyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNA0KIyAyMyAiL2hvbWUv
bWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43
LzMuMC9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzIDQNCiMgMSAiL3Vzci9pbmNs
dWRlL3NjaGVkLmgiIDEgMyA0DQojIDExICIvdXNyL2luY2x1ZGUvc2NoZWQu
aCIgMyA0DQojcHJhZ21hIGlkZW50ICJAKCMpc2NoZWQuaAkxLjkJOTgvMDEv
MTYgU01JIg0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMSAzIDQNCiMgMTQgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMgNA0K
IyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNA0KIyAxNSAiL3Vzci9p
bmNsdWRlL3NjaGVkLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQoNCg0K
c3RydWN0IHNjaGVkX3BhcmFtIHsNCiAgICAgICAgaW50IHNjaGVkX3ByaW9y
aXR5Ow0KICAgICAgICBpbnQgc2NoZWRfbmljZWxpbTsNCiAgICAgICAgaW50
IHNjaGVkX25pY2U7DQogICAgICAgIGludCBzY2hlZF9wYWRbNl07DQoNCg0K
DQp9Ow0KIyA0NCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDMgNA0KaW50IHNj
aGVkX2dldHBhcmFtKHBpZF90IHBpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpw
YXJhbSk7DQppbnQgc2NoZWRfc2V0cGFyYW0ocGlkX3QgcGlkLCBjb25zdCBz
dHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsNCmludCBzY2hlZF9nZXRzY2hl
ZHVsZXIocGlkX3QgcGlkKTsNCmludCBzY2hlZF9zZXRzY2hlZHVsZXIocGlk
X3QgcGlkLCBpbnQgcG9saWN5LA0KICAgICAgICAgICAgICAgIGNvbnN0IHN0
cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pOw0KaW50IHNjaGVkX3lpZWxkKHZv
aWQpOw0KaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXgoaW50IHBvbGljeSk7
DQppbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbihpbnQgcG9saWN5KTsNCmlu
dCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwocGlkX3QgcGlkLCBzdHJ1Y3QgdGlt
ZXNwZWMgKmludGVydmFsKTsNCiMgNjUgIi91c3IvaW5jbHVkZS9zY2hlZC5o
IiAzIDQNCn0NCiMgMjQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9wdGhyZWFkLmgi
IDIgMyA0DQoNCg0KDQpleHRlcm4gIkMiIHsNCiMgOTUgIi9ob21lL21kZWls
L2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAv
aW5jbHVkZS9wdGhyZWFkLmgiIDMgNA0KdHlwZWRlZiBzdHJ1Y3QgX2NsZWFu
dXAgew0KICAgICAgICB1aW50cHRyX3QgcHRocmVhZF9jbGVhbnVwX3BhZFs0
XTsNCn0gX2NsZWFudXBfdDsNCg0KDQoNCnZvaWQgX19wdGhyZWFkX2NsZWFu
dXBfcHVzaCh2b2lkICgqcm91dGluZSkodm9pZCAqKSwgdm9pZCAqYXJncywN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWRk
cl90IGZwLCBfY2xlYW51cF90ICppbmZvKTsNCnZvaWQgX19wdGhyZWFkX2Ns
ZWFudXBfcG9wKGludCBleCwgX2NsZWFudXBfdCAqaW5mbyk7DQpjYWRkcl90
IF9nZXRmcCh2b2lkKTsNCiMgMTI5ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvcHRo
cmVhZC5oIiAzIDQNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQocHRo
cmVhZF9hdHRyX3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9kZXN0
cm95KHB0aHJlYWRfYXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2F0
dHJfc2V0c3RhY2tzaXplKHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCk7DQpl
eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUoY29uc3QgcHRo
cmVhZF9hdHRyX3QgKiwgc2l6ZV90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFk
X2F0dHJfc2V0c3RhY2thZGRyKHB0aHJlYWRfYXR0cl90ICosIHZvaWQgKik7
DQpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIoY29uc3Qg
cHRocmVhZF9hdHRyX3QgKiwgdm9pZCAqKik7DQpleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9zZXRkZXRhY2hzdGF0ZShwdGhyZWFkX2F0dHJfdCAqLCBpbnQp
Ow0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUoY29u
c3QgcHRocmVhZF9hdHRyX3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhy
ZWFkX2F0dHJfc2V0c2NvcGUocHRocmVhZF9hdHRyX3QgKiwgaW50KTsNCmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlKGNvbnN0IHB0aHJlYWRf
YXR0cl90ICosIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3Nl
dGluaGVyaXRzY2hlZChwdGhyZWFkX2F0dHJfdCAqLCBpbnQpOw0KZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkKGNvbnN0IHB0aHJl
YWRfYXR0cl90ICosIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldHNjaGVkcG9saWN5KHB0aHJlYWRfYXR0cl90ICosIGludCk7DQpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGljeShjb25zdCBwdGhy
ZWFkX2F0dHJfdCAqLCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfYXR0
cl9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfYXR0cl90ICosDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNj
aGVkX3BhcmFtICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2No
ZWRwYXJhbShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJh
bSAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICos
IGNvbnN0IHB0aHJlYWRfYXR0cl90ICosDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKiAoKikodm9pZCAqKSwgdm9pZCAqKTsNCmV4
dGVybiBpbnQgcHRocmVhZF9vbmNlKHB0aHJlYWRfb25jZV90ICosIHZvaWQg
KCopKHZvaWQpKTsNCmV4dGVybiBpbnQgcHRocmVhZF9qb2luKHB0aHJlYWRf
dCwgdm9pZCAqKik7DQpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoKHB0aHJl
YWRfdCk7DQpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQodm9pZCAqKTsNCmV4
dGVybiBpbnQgcHRocmVhZF9jYW5jZWwocHRocmVhZF90KTsNCmV4dGVybiBp
bnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfdCwgaW50LCBjb25z
dCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7DQpleHRlcm4gaW50IHB0aHJlYWRf
Z2V0c2NoZWRwYXJhbShwdGhyZWFkX3QsIGludCAqLCBzdHJ1Y3Qgc2NoZWRf
cGFyYW0gKik7DQpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUo
aW50LCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlw
ZShpbnQsIGludCAqKTsNCmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNl
bCh2b2lkKTsNCmV4dGVybiBpbnQgcHRocmVhZF9lcXVhbChwdGhyZWFkX3Qs
IHB0aHJlYWRfdCk7DQpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZShw
dGhyZWFkX2tleV90ICosIHZvaWQgKCopKHZvaWQgKikpOw0KZXh0ZXJuIGlu
dCBwdGhyZWFkX2tleV9kZWxldGUocHRocmVhZF9rZXlfdCk7DQpleHRlcm4g
aW50IHB0aHJlYWRfc2V0c3BlY2lmaWMocHRocmVhZF9rZXlfdCwgY29uc3Qg
dm9pZCAqKTsNCmV4dGVybiB2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljKHB0
aHJlYWRfa2V5X3QpOw0KZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYo
dm9pZCk7DQoNCg0KDQoNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJf
aW5pdChwdGhyZWFkX211dGV4YXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhy
ZWFkX211dGV4YXR0cl9kZXN0cm95KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7
DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQocHRo
cmVhZF9tdXRleGF0dHJfdCAqLCBpbnQpOw0KZXh0ZXJuIGludCBwdGhyZWFk
X211dGV4YXR0cl9nZXRwc2hhcmVkKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRy
X3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9z
ZXRwcm90b2NvbChwdGhyZWFkX211dGV4YXR0cl90ICosIGludCk7DQpleHRl
cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHByb3RvY29sKGNvbnN0IHB0
aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICopOw0KZXh0ZXJuIGludCBwdGhy
ZWFkX211dGV4YXR0cl9zZXRwcmlvY2VpbGluZyhwdGhyZWFkX211dGV4YXR0
cl90ICosIGludCk7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dl
dHByaW9jZWlsaW5nKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50
ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2luaXQocHRocmVhZF9t
dXRleF90ICosIGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7DQpleHRl
cm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveShwdGhyZWFkX211dGV4X3Qg
Kik7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayhwdGhyZWFkX211
dGV4X3QgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKHB0
aHJlYWRfbXV0ZXhfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90
cnlsb2NrKHB0aHJlYWRfbXV0ZXhfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVh
ZF9tdXRleF9zZXRwcmlvY2VpbGluZyhwdGhyZWFkX211dGV4X3QgKiwgaW50
LCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZ2V0cHJpb2Nl
aWxpbmcocHRocmVhZF9tdXRleF90ICosIGludCAqKTsNCmV4dGVybiBpbnQg
cHRocmVhZF9jb25kYXR0cl9pbml0KHB0aHJlYWRfY29uZGF0dHJfdCAqKTsN
CmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95KHB0aHJlYWRf
Y29uZGF0dHJfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9z
ZXRwc2hhcmVkKHB0aHJlYWRfY29uZGF0dHJfdCAqLCBpbnQpOw0KZXh0ZXJu
IGludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVh
ZF9jb25kYXR0cl90ICosIGludCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9j
b25kX2luaXQocHRocmVhZF9jb25kX3QgKiwgY29uc3QgcHRocmVhZF9jb25k
YXR0cl90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfZGVzdHJveShw
dGhyZWFkX2NvbmRfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Jy
b2FkY2FzdChwdGhyZWFkX2NvbmRfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVh
ZF9jb25kX3NpZ25hbChwdGhyZWFkX2NvbmRfdCAqKTsNCmV4dGVybiBpbnQg
cHRocmVhZF9jb25kX3dhaXQocHRocmVhZF9jb25kX3QgKiwgcHRocmVhZF9t
dXRleF90ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0
KHB0aHJlYWRfY29uZF90ICosIHB0aHJlYWRfbXV0ZXhfdCAqLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVj
dCB0aW1lc3BlYyAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGd1
YXJkc2l6ZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QgKik7DQpl
eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUocHRocmVhZF9h
dHRyX3QgKiwgc2l6ZV90KTsNCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25j
dXJyZW5jeSh2b2lkKTsNCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjb25jdXJy
ZW5jeShpbnQgbmV3dmFsKTsNCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0
dHJfc2V0dHlwZShwdGhyZWFkX211dGV4YXR0cl90ICosIGludCk7DQpleHRl
cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUoY29uc3QgcHRocmVh
ZF9tdXRleGF0dHJfdCAqLCBpbnQgKik7DQpleHRlcm4gaW50IHB0aHJlYWRf
cndsb2NrX2luaXQocHRocmVhZF9yd2xvY2tfdCAqLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJf
dCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfZGVzdHJveShwdGhy
ZWFkX3J3bG9ja190ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19y
ZGxvY2socHRocmVhZF9yd2xvY2tfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVh
ZF9yd2xvY2tfdHJ5cmRsb2NrKHB0aHJlYWRfcndsb2NrX3QgKik7DQpleHRl
cm4gaW50IHB0aHJlYWRfcndsb2NrX3dybG9jayhwdGhyZWFkX3J3bG9ja190
ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3cmxvY2socHRo
cmVhZF9yd2xvY2tfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tf
dW5sb2NrKHB0aHJlYWRfcndsb2NrX3QgKik7DQpleHRlcm4gaW50IHB0aHJl
YWRfcndsb2NrYXR0cl9pbml0KHB0aHJlYWRfcndsb2NrYXR0cl90ICopOw0K
ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveShwdGhyZWFk
X3J3bG9ja2F0dHJfdCAqKTsNCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2th
dHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKiwg
aW50ICopOw0KZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0cHNo
YXJlZChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqLCBpbnQpOw0KIyAzMDQgIi9o
b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuNy8zLjAvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNA0KfQ0KIyAzOCAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xh
cmlzMi43L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDIgMw0KDQp0eXBlZGVmIHB0
aHJlYWRfa2V5X3QgX19ndGhyZWFkX2tleV90Ow0KdHlwZWRlZiBwdGhyZWFk
X29uY2VfdCBfX2d0aHJlYWRfb25jZV90Ow0KdHlwZWRlZiBwdGhyZWFkX211
dGV4X3QgX19ndGhyZWFkX211dGV4X3Q7DQoNCg0KDQoNCg0KDQojcHJhZ21h
IHdlYWsgcHRocmVhZF9vbmNlDQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlf
Y3JlYXRlDQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlfZGVsZXRlDQojcHJh
Z21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYw0KI3ByYWdtYSB3ZWFrIHB0
aHJlYWRfc2V0c3BlY2lmaWMNCiNwcmFnbWEgd2VhayBwdGhyZWFkX2NyZWF0
ZQ0KDQojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF9sb2NrDQojcHJhZ21h
IHdlYWsgcHRocmVhZF9tdXRleF90cnlsb2NrDQojcHJhZ21hIHdlYWsgcHRo
cmVhZF9tdXRleF91bmxvY2sNCiMgNzggIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2d0aHIt
ZGVmYXVsdC5oIiAzDQpzdGF0aWMgdm9pZCAqX19ndGhyZWFkX2FjdGl2ZV9w
dHIgPSAodm9pZCAqKSAmcHRocmVhZF9jcmVhdGU7DQoNCnN0YXRpYyBpbmxp
bmUgaW50DQpfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpDQp7DQogIHJldHVy
biBfX2d0aHJlYWRfYWN0aXZlX3B0ciAhPSAwOw0KfQ0KIyA0MjcgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJp
czIuNy9iaXRzL2d0aHItZGVmYXVsdC5oIiAzDQpzdGF0aWMgaW5saW5lIGlu
dA0KX19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZv
aWQgKCpmdW5jKSAodm9pZCkpDQp7DQogIGlmIChfX2d0aHJlYWRfYWN0aXZl
X3AgKCkpDQogICAgcmV0dXJuIHB0aHJlYWRfb25jZSAob25jZSwgZnVuYyk7
DQogIGVsc2UNCiAgICByZXR1cm4gLTE7DQp9DQoNCnN0YXRpYyBpbmxpbmUg
aW50DQpfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICpr
ZXksIHZvaWQgKCpkdG9yKSAodm9pZCAqKSkNCnsNCiAgcmV0dXJuIHB0aHJl
YWRfa2V5X2NyZWF0ZSAoa2V5LCBkdG9yKTsNCn0NCg0Kc3RhdGljIGlubGlu
ZSBpbnQNCl9fZ3RocmVhZF9rZXlfZHRvciAoX19ndGhyZWFkX2tleV90IGtl
eSwgdm9pZCAqcHRyKQ0Kew0KDQogIGlmIChwdHIpDQogICAgcmV0dXJuIHB0
aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgMCk7DQogIGVsc2UNCiAgICByZXR1
cm4gMDsNCn0NCg0Kc3RhdGljIGlubGluZSBpbnQNCl9fZ3RocmVhZF9rZXlf
ZGVsZXRlIChfX2d0aHJlYWRfa2V5X3Qga2V5KQ0Kew0KICByZXR1cm4gcHRo
cmVhZF9rZXlfZGVsZXRlIChrZXkpOw0KfQ0KDQpzdGF0aWMgaW5saW5lIHZv
aWQgKg0KX19ndGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qg
a2V5KQ0Kew0KICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyAoa2V5KTsN
Cn0NCg0Kc3RhdGljIGlubGluZSBpbnQNCl9fZ3RocmVhZF9zZXRzcGVjaWZp
YyAoX19ndGhyZWFkX2tleV90IGtleSwgY29uc3Qgdm9pZCAqcHRyKQ0Kew0K
ICByZXR1cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCBwdHIpOw0KfQ0K
DQpzdGF0aWMgaW5saW5lIGludA0KX19ndGhyZWFkX211dGV4X2xvY2sgKF9f
Z3RocmVhZF9tdXRleF90ICptdXRleCkNCnsNCiAgaWYgKF9fZ3RocmVhZF9h
Y3RpdmVfcCAoKSkNCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF9sb2NrICht
dXRleCk7DQogIGVsc2UNCiAgICByZXR1cm4gMDsNCn0NCg0Kc3RhdGljIGlu
bGluZSBpbnQNCl9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRf
bXV0ZXhfdCAqbXV0ZXgpDQp7DQogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3Ag
KCkpDQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAobXV0ZXgp
Ow0KICBlbHNlDQogICAgcmV0dXJuIDA7DQp9DQoNCnN0YXRpYyBpbmxpbmUg
aW50DQpfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhf
dCAqbXV0ZXgpDQp7DQogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpDQog
ICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChtdXRleCk7DQogIGVs
c2UNCiAgICByZXR1cm4gMDsNCn0NCiMgOTkgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2d0
aHIuaCIgMiAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jKytpby5oIiAyIDMN
Cg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQogIHR5cGVkZWYgbG9uZyBzdHJlYW1v
ZmY7DQogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7DQoNCg0KDQog
IHR5cGVkZWYgZnBvc190IF9fY19zdHJlYW1wb3M7DQoNCiAgdHlwZWRlZiBf
X2d0aHJlYWRfbXV0ZXhfdCBfX2NfbG9jazsNCg0KDQoNCiAgdHlwZWRlZiBG
SUxFIF9fY19maWxlX3R5cGU7DQoNCg0KICBzdHJ1Y3QgX19pb3NfZmxhZ3MN
CiAgew0KICAgIHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsNCg0KICAgIHN0
YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsN
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19kZWMgPSAweDAwMDI7
DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAw
MDQ7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgw
MDA4Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ludGVybmFs
ID0gMHgwMDEwOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2xl
ZnQgPSAweDAwMjA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
b2N0ID0gMHgwMDQwOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X3JpZ2h0ID0gMHgwMDgwOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX3NjaWVudGlmaWMgPSAweDAxMDA7DQogICAgc3RhdGljIGNvbnN0IF9f
aW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7DQogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOw0KICAgIHN0
YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb3MgPSAweDA4MDA7DQog
ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAw
Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VuaXRidWYgPSAw
eDIwMDA7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBwZXJj
YXNlID0gMHg0MDAwOw0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOw0KICAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4MDAw
MiB8IDB4MDA0MCB8IDB4MDAwODsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRf
dHlwZSBfU19mbG9hdGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0Ow0KDQoNCiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYWRiaXQgPSAweDAxOw0K
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7
DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmFpbGJpdCA9IDB4
MDQ7DQoNCg0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9
IDB4MDE7DQogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXRlID0g
MHgwMjsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iaW4gPSAw
eDA0Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2luID0gMHgw
ODsNCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAweDEw
Ow0KICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgy
MDsNCiAgfTsNCn0NCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
L2crKy12My9iaXRzL2Zwb3MuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMSAzDQoj
IDM3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfY3djaGFyLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmln
LmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAz
DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3djaGFyLmgiIDIgMw0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzDQojIDEgIi9o
b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAxIDMgNA0KIyAxOCAiL2hvbWUv
bWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43
LzMuMC9pbmNsdWRlL3djaGFyLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgj
KXdjaGFyLmgJMS4zMQk5OC8wNS8wNCBTTUkiDQoNCiMgMSAiL3Vzci9pbmNs
dWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0DQojIDIxICIvaG9tZS9t
ZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcv
My4wL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRl
L3N5cy9pc2FfZGVmcy5oIiAxIDMgNA0KIyAyMiAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNs
dWRlL3djaGFyLmgiIDIgMyA0DQojIDEgIi91c3IvaW5jbHVkZS9zdGRpb190
YWcuaCIgMSAzIDQNCiMgMjMgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5o
IiAyIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvd2NoYXJfaW1wbC5oIiAxIDMg
NA0KIyA5ICIvdXNyL2luY2x1ZGUvd2NoYXJfaW1wbC5oIiAzIDQNCiNwcmFn
bWEgaWRlbnQgIkAoIyl3Y2hhcl9pbXBsLmgJMS4yCTk4LzAyLzI3IFNNSSIN
Cg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0DQoj
IDEyICIvdXNyL2luY2x1ZGUvd2NoYXJfaW1wbC5oIiAyIDMgNA0KDQoNCmV4
dGVybiAiQyIgew0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KDQoNCg0KICAg
ICAgICBpbnQgX19maWxsZXJbNl07DQoNCn0gX19tYnN0YXRlX3Q7DQoNCg0K
DQp9DQojIDI0ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQN
CiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQNCiMgMjUgIi9ob21l
L21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
Ny8zLjAvaW5jbHVkZS93Y2hhci5oIiAyIDMgNA0KDQoNCg0KDQojIDEgIi9o
b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuNy8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMgNA0KIyAzMCAiL2hvbWUv
bWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43
LzMuMC9pbmNsdWRlL3djaGFyLmgiIDIgMyA0DQoNCg0KDQojIDEgIi91c3Iv
aW5jbHVkZS9jdHlwZS5oIiAxIDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRlL2N0
eXBlLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKWN0eXBlLmgJMS4zMAk5
OC8wMS8xNiBTTUkiDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJl
X3Rlc3RzLmgiIDEgMyA0DQojIDE5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIg
MiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgNDggIi91c3IvaW5jbHVkZS9j
dHlwZS5oIiAzIDQNCmV4dGVybiBpbnQgaXNhbG51bShpbnQpOw0KZXh0ZXJu
IGludCBpc2FscGhhKGludCk7DQpleHRlcm4gaW50IGlzY250cmwoaW50KTsN
CmV4dGVybiBpbnQgaXNkaWdpdChpbnQpOw0KZXh0ZXJuIGludCBpc2dyYXBo
KGludCk7DQpleHRlcm4gaW50IGlzbG93ZXIoaW50KTsNCmV4dGVybiBpbnQg
aXNwcmludChpbnQpOw0KZXh0ZXJuIGludCBpc3B1bmN0KGludCk7DQpleHRl
cm4gaW50IGlzc3BhY2UoaW50KTsNCmV4dGVybiBpbnQgaXN1cHBlcihpbnQp
Ow0KZXh0ZXJuIGludCBpc3hkaWdpdChpbnQpOw0KZXh0ZXJuIGludCB0b2xv
d2VyKGludCk7DQpleHRlcm4gaW50IHRvdXBwZXIoaW50KTsNCg0KDQoNCg0K
ZXh0ZXJuIGludCBpc2FzY2lpKGludCk7DQpleHRlcm4gaW50IHRvYXNjaWko
aW50KTsNCmV4dGVybiBpbnQgX3RvbG93ZXIoaW50KTsNCmV4dGVybiBpbnQg
X3RvdXBwZXIoaW50KTsNCg0KDQoNCmV4dGVybiB1bnNpZ25lZCBjaGFyIF9f
Y3R5cGVbXTsNCmV4dGVybiB1bnNpZ25lZCBpbnQgKl9fY3R5cGVfbWFzazsN
CmV4dGVybiBpbnQgKl9fdHJhbnNfdXBwZXI7DQpleHRlcm4gaW50ICpfX3Ry
YW5zX2xvd2VyOw0KIyAxNjMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQN
Cn0NCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAyIDMgNA0K
IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0DQojIDM1
ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQNCg0KDQojIDEg
Ii91c3IvaW5jbHVkZS9zeXMvdmFfbGlzdC5oIiAxIDMgNA0KIyAzOCAiL2hv
bWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJD
IiB7DQojIDYxICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2NoYXIuaCIgMyA0DQp0
eXBlZGVmIGxvbmcgd2ludF90Ow0KDQoNCg0KDQoNCnR5cGVkZWYgaW50IHdj
dHlwZV90Ow0KIyAxMDMgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAz
IDQNCnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90Ow0KIyAxMTMgIi9o
b21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuNy8zLjAvaW5jbHVkZS93Y2hhci5oIiAzIDQNCmV4dGVybiBpbnQgaXN3
YWxwaGEod2ludF90KTsNCmV4dGVybiBpbnQgaXN3dXBwZXIod2ludF90KTsN
CmV4dGVybiBpbnQgaXN3bG93ZXIod2ludF90KTsNCmV4dGVybiBpbnQgaXN3
ZGlnaXQod2ludF90KTsNCmV4dGVybiBpbnQgaXN3eGRpZ2l0KHdpbnRfdCk7
DQpleHRlcm4gaW50IGlzd2FsbnVtKHdpbnRfdCk7DQpleHRlcm4gaW50IGlz
d3NwYWNlKHdpbnRfdCk7DQpleHRlcm4gaW50IGlzd3B1bmN0KHdpbnRfdCk7
DQpleHRlcm4gaW50IGlzd3ByaW50KHdpbnRfdCk7DQpleHRlcm4gaW50IGlz
d2dyYXBoKHdpbnRfdCk7DQpleHRlcm4gaW50IGlzd2NudHJsKHdpbnRfdCk7
DQpleHRlcm4gaW50IGlzd2N0eXBlKHdpbnRfdCwgd2N0eXBlX3QpOw0KZXh0
ZXJuIHdpbnRfdCB0b3dsb3dlcih3aW50X3QpOw0KZXh0ZXJuIHdpbnRfdCB0
b3d1cHBlcih3aW50X3QpOw0KZXh0ZXJuIHdpbnRfdCBmZ2V0d2MoX19GSUxF
ICopOw0KZXh0ZXJuIHdjaGFyX3QgKmZnZXR3cyh3Y2hhcl90ICosIGludCwg
X19GSUxFICopOw0KZXh0ZXJuIHdpbnRfdCBmcHV0d2Mod2ludF90LCBfX0ZJ
TEUgKik7DQpleHRlcm4gaW50IGZwdXR3cyhjb25zdCB3Y2hhcl90ICosIF9f
RklMRSAqKTsNCmV4dGVybiB3aW50X3QgdW5nZXR3Yyh3aW50X3QsIF9fRklM
RSAqKTsNCmV4dGVybiB3aW50X3QgZ2V0d2MoX19GSUxFICopOw0KZXh0ZXJu
IHdpbnRfdCBnZXR3Y2hhcih2b2lkKTsNCmV4dGVybiB3aW50X3QgcHV0d2Mo
d2ludF90LCBfX0ZJTEUgKik7DQpleHRlcm4gd2ludF90IHB1dHdjaGFyKHdp
bnRfdCk7DQpleHRlcm4gZG91YmxlIHdjc3RvZChjb25zdCB3Y2hhcl90ICos
IHdjaGFyX3QgKiopOw0KZXh0ZXJuIGxvbmcgd2NzdG9sKGNvbnN0IHdjaGFy
X3QgKiwgd2NoYXJfdCAqKiwgaW50KTsNCmV4dGVybiB1bnNpZ25lZCBsb25n
IHdjc3RvdWwoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpOw0K
ZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCh3Y2hhcl90ICosIGNvbnN0IHdjaGFy
X3QgKik7DQpleHRlcm4gd2NoYXJfdCAqd2NzY2hyKGNvbnN0IHdjaGFyX3Qg
Kiwgd2NoYXJfdCk7DQpleHRlcm4gaW50IHdjc2NtcChjb25zdCB3Y2hhcl90
ICosIGNvbnN0IHdjaGFyX3QgKik7DQpleHRlcm4gaW50IHdjc2NvbGwoY29u
c3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOw0KZXh0ZXJuIHdjaGFy
X3QgKndjc2NweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7DQpleHRl
cm4gc2l6ZV90IHdjc2NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hh
cl90ICopOw0KZXh0ZXJuIHNpemVfdCB3Y3NsZW4oY29uc3Qgd2NoYXJfdCAq
KTsNCmV4dGVybiB3Y2hhcl90ICp3Y3NuY2F0KHdjaGFyX3QgKiwgY29uc3Qg
d2NoYXJfdCAqLCBzaXplX3QpOw0KZXh0ZXJuIGludCB3Y3NuY21wKGNvbnN0
IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOw0KZXh0ZXJu
IHdjaGFyX3QgKndjc25jcHkod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICos
IHNpemVfdCk7DQpleHRlcm4gd2NoYXJfdCAqd2NzcGJyayhjb25zdCB3Y2hh
cl90ICosIGNvbnN0IHdjaGFyX3QgKik7DQpleHRlcm4gd2NoYXJfdCAqd2Nz
cmNocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpOw0KZXh0ZXJuIHNpemVf
dCB3Y3NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOw0K
ZXh0ZXJuIHdjaGFyX3QgKndjc3djcyhjb25zdCB3Y2hhcl90ICosIGNvbnN0
IHdjaGFyX3QgKik7DQpleHRlcm4gaW50IHdjc3dpZHRoKGNvbnN0IHdjaGFy
X3QgKiwgc2l6ZV90KTsNCmV4dGVybiBzaXplX3Qgd2NzeGZybSh3Y2hhcl90
ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsNCmV4dGVybiBpbnQgd2N3
aWR0aChjb25zdCB3Y2hhcl90KTsNCmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGUo
Y29uc3QgY2hhciAqKTsNCiMgMTY5ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvd2No
YXIuaCIgMyA0DQpleHRlcm4gd2NoYXJfdCAqX193Y3N0b2tfeHBnNSh3Y2hh
cl90ICosIGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7DQpleHRlcm4g
c2l6ZV90IF9fd2NzZnRpbWVfeHBnNSh3Y2hhcl90ICosIHNpemVfdCwgY29u
c3Qgd2NoYXJfdCAqLA0KICAgICAgICBjb25zdCBzdHJ1Y3QgdG0gKik7DQoj
IDE4MCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDMgNA0KZXh0ZXJu
IHdpbnRfdCBidG93YyhpbnQpOw0KZXh0ZXJuIGludCBmd3ByaW50ZihfX0ZJ
TEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOw0KZXh0ZXJuIGludCBmd3Nj
YW5mKF9fRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7DQpleHRlcm4g
aW50IGZ3aWRlKF9fRklMRSAqLCBpbnQpOw0KZXh0ZXJuIGludCBtYnNpbml0
KGNvbnN0IG1ic3RhdGVfdCAqKTsNCmV4dGVybiBzaXplX3QgbWJybGVuKGNv
bnN0IGNoYXIgKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7DQpleHRlcm4gc2l6
ZV90IG1icnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwg
bWJzdGF0ZV90ICopOw0KZXh0ZXJuIHNpemVfdCBtYnNydG93Y3Mod2NoYXJf
dCAqLCBjb25zdCBjaGFyICoqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsNCmV4
dGVybiBpbnQgc3dwcmludGYod2NoYXJfdCAqLCBzaXplX3QsIGNvbnN0IHdj
aGFyX3QgKiwgLi4uKTsNCmV4dGVybiBpbnQgc3dzY2FuZihjb25zdCB3Y2hh
cl90ICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsNCmV4dGVybiBpbnQgdmZ3
cHJpbnRmKF9fRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIF9fdmFfbGlzdCk7
DQpleHRlcm4gaW50IHZ3cHJpbnRmKGNvbnN0IHdjaGFyX3QgKiwgX192YV9s
aXN0KTsNCmV4dGVybiBpbnQgdnN3cHJpbnRmKHdjaGFyX3QgKiwgc2l6ZV90
LCBjb25zdCB3Y2hhcl90ICosIF9fdmFfbGlzdCk7DQpleHRlcm4gc2l6ZV90
IHdjcnRvbWIoY2hhciAqLCB3Y2hhcl90LCBtYnN0YXRlX3QgKik7DQpleHRl
cm4gc2l6ZV90IHdjc3J0b21icyhjaGFyICosIGNvbnN0IHdjaGFyX3QgKios
IHNpemVfdCwgbWJzdGF0ZV90ICopOw0KZXh0ZXJuIHdjaGFyX3QgKndjc3N0
cihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7DQpleHRlcm4g
aW50IHdjdG9iKHdpbnRfdCk7DQpleHRlcm4gd2NoYXJfdCAqd21lbWNocihj
b25zdCB3Y2hhcl90ICosIHdjaGFyX3QsIHNpemVfdCk7DQpleHRlcm4gaW50
IHdtZW1jbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNp
emVfdCk7DQpleHRlcm4gd2NoYXJfdCAqd21lbWNweSh3Y2hhcl90ICosIGNv
bnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsNCmV4dGVybiB3Y2hhcl90ICp3bWVt
bW92ZSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsNCmV4
dGVybiB3Y2hhcl90ICp3bWVtc2V0KHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6
ZV90KTsNCmV4dGVybiBpbnQgd3ByaW50Zihjb25zdCB3Y2hhcl90ICosIC4u
Lik7DQpleHRlcm4gaW50IHdzY2FuZihjb25zdCB3Y2hhcl90ICosIC4uLik7
DQojIDMxOCAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDMgNA0KZXh0
ZXJuIHdpbnRfdCBfX2ZnZXR3Y194cGc1KF9fRklMRSAqKTsNCmV4dGVybiB3
aW50X3QgX19nZXR3Y194cGc1KF9fRklMRSAqKTsNCmV4dGVybiB3aW50X3Qg
X19nZXR3Y2hhcl94cGc1KHZvaWQpOw0KZXh0ZXJuIHdpbnRfdCBfX2ZwdXR3
Y194cGc1KHdpbnRfdCwgX19GSUxFICopOw0KZXh0ZXJuIHdpbnRfdCBfX3B1
dHdjX3hwZzUod2ludF90LCBfX0ZJTEUgKik7DQpleHRlcm4gd2ludF90IF9f
cHV0d2NoYXJfeHBnNSh3aW50X3QpOw0KZXh0ZXJuIHdjaGFyX3QgKl9fZmdl
dHdzX3hwZzUod2NoYXJfdCAqLCBpbnQsIF9fRklMRSAqKTsNCmV4dGVybiBp
bnQgX19mcHV0d3NfeHBnNShjb25zdCB3Y2hhcl90ICosIF9fRklMRSAqKTsN
CmV4dGVybiB3aW50X3QgX191bmdldHdjX3hwZzUod2ludF90LCBfX0ZJTEUg
Kik7DQojIDM1MiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3djaGFyLmgiIDMgNA0K
fQ0KIyA0MyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2N3Y2hhci5oIiAyIDMNCiMgNTcgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMw0KbmFtZXNw
YWNlIHN0ZA0Kew0KICB1c2luZyA6Om1ic3RhdGVfdDsNCn0NCiMgNDEgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIg
MiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1N0YXRlVD4NCiAgICBjbGFzcyBmcG9zDQogICAgew0KICAgIHB1
YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsN
Cg0KICAgIHByaXZhdGU6DQogICAgICBzdHJlYW1vZmYgX01fb2ZmOw0KICAg
ICAgX19zdGF0ZV90eXBlIF9NX3N0Ow0KDQogICAgcHVibGljOg0KICAgICAg
X19zdGF0ZV90eXBlDQogICAgICBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9N
X3N0OyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHN0YXRlKF9fc3RhdGVfdHlw
ZSBfX3N0KSB7IF9NX3N0ID0gX19zdDsgfQ0KDQoNCg0KICAgICAgZnBvcygp
OiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5cGUoKSkg
eyB9DQoNCiAgICAgIGZwb3Moc3RyZWFtb2ZmIF9fb2ZmLCBfX3N0YXRlX3R5
cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgpKQ0KICAgICAgOiBfTV9vZmYoX19v
ZmYpLCBfTV9zdChfX3N0KSB7IH0NCg0KICAgICAgb3BlcmF0b3Igc3RyZWFt
b2ZmKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9DQoNCiAgICAgIGZwb3Mm
DQogICAgICBvcGVyYXRvcis9KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYg
Kz0gX19vZmY7IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBmcG9zJg0KICAg
ICAgb3BlcmF0b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmIC09IF9f
b2ZmOyByZXR1cm4gKnRoaXM7IH0NCg0KICAgICAgZnBvcw0KICAgICAgb3Bl
cmF0b3IrKHN0cmVhbW9mZiBfX29mZikNCiAgICAgIHsNCiAgICAgICAgZnBv
cyBfX3QoKnRoaXMpOw0KICAgICAgICBfX3QgKz0gX19vZmY7DQogICAgICAg
IHJldHVybiBfX3Q7DQogICAgICB9DQoNCiAgICAgIGZwb3MNCiAgICAgIG9w
ZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpDQogICAgICB7DQogICAgICAgIGZw
b3MgX190KCp0aGlzKTsNCiAgICAgICAgX190IC09IF9fb2ZmOw0KICAgICAg
ICByZXR1cm4gX190Ow0KICAgICAgfQ0KDQogICAgICBib29sDQogICAgICBv
cGVyYXRvcj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdA0KICAgICAgeyBy
ZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQ0KDQogICAgICBib29s
DQogICAgICBvcGVyYXRvciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdA0K
ICAgICAgeyByZXR1cm4gX01fb2ZmICE9IF9fcG9zLl9NX29mZjsgfQ0KDQog
ICAgICBzdHJlYW1vZmYNCiAgICAgIF9NX3Bvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gX01fb2ZmOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX3Bvc2l0
aW9uKHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgPSBfX29mZjsgfQ0KICAg
IH07DQoNCg0KICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7
DQoNCg0KDQp9DQojIDQyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAx
IDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL2Z1bmN0ZXhjZXB0LmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMw0KIyAz
NSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVu
Y3RleGNlcHQuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB2b2lk
DQogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsNCg0KDQogIHZvaWQN
CiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7DQoNCg0KICB2b2lkDQogIF9f
dGhyb3dfYmFkX2Nhc3Qodm9pZCk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2Jh
ZF90eXBlaWQodm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfbG9naWNf
ZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3df
ZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBf
X3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsNCg0K
ICB2b2lkDQogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBj
aGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19ydW50aW1lX2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X3Jhbmdl
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93
X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0K
ICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K
DQoNCiAgdm9pZA0KICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIq
IF9fcyk7DQp9DQojIDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3Rk
DQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2lj
X2lvczsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4NCiAgICBjbGFzcyBi
YXNpY19zdHJlYW1idWY7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+DQog
ICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh
clQ+ID4NCiAgICBjbGFzcyBiYXNpY19vc3RyZWFtOw0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh
aXRzPF9DaGFyVD4gPg0KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOw0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4sDQogICAgICAgICAgICB0eXBlbmFtZSBf
QWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgYmFzaWNf
c3RyaW5nYnVmOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sDQogICAgICAg
ICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4NCiAg
ICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOw0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz
PF9DaGFyVD4sDQogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9j
YXRvcjxfQ2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFt
Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sDQogICAgICAgICAgIHR5cGVu
YW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4NCiAgICBjbGFzcyBi
YXNpY19zdHJpbmdzdHJlYW07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+
DQogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZjsNCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf
Q2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsNCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfQ2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbTsN
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4NCiAgICBjbGFzcyBiYXNpY19m
c3RyZWFtOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPg0KICAgIGNsYXNz
IGlzdHJlYW1idWZfaXRlcmF0b3I7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU
PiA+DQogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsNCg0KDQoNCiAg
Y2xhc3MgaW9zX2Jhc2U7DQoNCg0KICB0eXBlZGVmIGJhc2ljX2lvczxjaGFy
PiBpb3M7DQogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+IHN0cmVh
bWJ1ZjsNCiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07
DQogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOw0KICB0
eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXI+IGlvc3RyZWFtOw0KICB0eXBl
ZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7DQogIHR5cGVk
ZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOw0K
ICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0
cmVhbTsNCiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3Ry
aW5nc3RyZWFtOw0KICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmls
ZWJ1ZjsNCiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBpZnN0cmVh
bTsNCiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsN
CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07DQojIDEy
OSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2lvc2Z3ZC5oIiAzDQp9DQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMw0KIyAxICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAxIDMNCiMg
MzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRp
b24iIDMNCmV4dGVybiAiQysrIiB7DQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAg
Y2xhc3MgZXhjZXB0aW9uDQogIHsNCiAgcHVibGljOg0KICAgIGV4Y2VwdGlv
bigpIHRocm93KCkgeyB9DQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhy
b3coKTsNCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0
aHJvdygpOw0KICB9Ow0KDQogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJs
aWMgZXhjZXB0aW9uDQogIHsNCiAgcHVibGljOg0KICAgIGJhZF9leGNlcHRp
b24oKSB0aHJvdygpIHsgfQ0KICAgIHZpcnR1YWwgfmJhZF9leGNlcHRpb24o
KSB0aHJvdygpOw0KICB9Ow0KDQogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0
ZV9oYW5kbGVyKSAoKTsNCiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9o
YW5kbGVyKSAoKTsNCg0KICB0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWlu
YXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJvdygpOw0KICB2b2lkIHRlcm1p
bmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsNCg0KICB1
bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9o
YW5kbGVyKSB0aHJvdygpOw0KICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJp
YnV0ZV9fICgoX19ub3JldHVybl9fKSk7DQoNCiAgYm9vbCB1bmNhdWdodF9l
eGNlcHRpb24oKSB0aHJvdygpOw0KfQ0KDQp9DQojIDQxICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMw0K
IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9j
aGFyX3RyYWl0cy5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDMNCg0KIyAxICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0
cmluZy5oIiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMNCiMgMSAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIg
MSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3N0cmluZy5oIiAyIDMNCiMgNDAgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMNCiMg
MSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMgNA0KIyA0MSAiL2hvbWUv
bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcu
aCIgMiAzDQojIDY2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY3N0cmluZy5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQog
IHVzaW5nIDo6bWVtY3B5Ow0KICB1c2luZyA6Om1lbW1vdmU7DQogIHVzaW5n
IDo6c3RyY3B5Ow0KICB1c2luZyA6OnN0cm5jcHk7DQogIHVzaW5nIDo6c3Ry
Y2F0Ow0KICB1c2luZyA6OnN0cm5jYXQ7DQogIHVzaW5nIDo6bWVtY21wOw0K
ICB1c2luZyA6OnN0cmNtcDsNCiAgdXNpbmcgOjpzdHJjb2xsOw0KICB1c2lu
ZyA6OnN0cm5jbXA7DQogIHVzaW5nIDo6c3RyeGZybTsNCiAgdXNpbmcgOjpz
dHJjc3BuOw0KICB1c2luZyA6OnN0cnNwbjsNCiAgdXNpbmcgOjpzdHJ0b2s7
DQogIHVzaW5nIDo6bWVtc2V0Ow0KICB1c2luZyA6OnN0cmVycm9yOw0KICB1
c2luZyA6OnN0cmxlbjsNCg0KICB1c2luZyA6Om1lbWNocjsNCg0KICBpbmxp
bmUgdm9pZCoNCiAgbWVtY2hyKHZvaWQqIF9fcCwgaW50IF9fYywgc2l6ZV90
IF9fbikNCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9p
ZCo+KF9fcCksIF9fYywgX19uKTsgfQ0KDQogIHVzaW5nIDo6c3RyY2hyOw0K
DQogIGlubGluZSBjaGFyKg0KICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9f
bikNCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNv
bnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQ0KDQogIHVzaW5nIDo6c3RycGJy
azsNCg0KICBpbmxpbmUgY2hhcioNCiAgc3RycGJyayhjaGFyKiBfX3MxLCBj
b25zdCBjaGFyKiBfX3MyKQ0KICB7IHJldHVybiBfX2J1aWx0aW5fc3RycGJy
ayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0NCg0K
ICB1c2luZyA6OnN0cnJjaHI7DQoNCiAgaW5saW5lIGNoYXIqDQogIHN0cnJj
aHIoY2hhciogX19zMSwgaW50IF9fbikNCiAgeyByZXR1cm4gX19idWlsdGlu
X3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7
IH0NCg0KICB1c2luZyA6OnN0cnN0cjsNCg0KICBpbmxpbmUgY2hhcioNCiAg
c3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpDQogIHsgcmV0
dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4o
X19zMSksIF9fczIpOyB9DQp9DQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMNCiMgMSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5o
IiAxIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7
DQoNCg0KDQogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4NCiAgICBzdHJ1Y3Qg
Y2hhcl90cmFpdHMNCiAgICB7DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy
X3R5cGU7DQoNCiAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnRfdHlw
ZTsNCiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOw0KICAgICAg
dHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7DQogICAgICB0eXBlZGVmIG1i
c3RhdGVfdCBzdGF0ZV90eXBlOw0KDQogICAgICBzdGF0aWMgdm9pZA0KICAg
ICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBf
X2MyKQ0KICAgICAgeyBfX2MxID0gX19jMjsgfQ0KDQogICAgICBzdGF0aWMg
Ym9vbA0KICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj
aGFyX3R5cGUmIF9fYzIpDQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7
IH0NCg0KICAgICAgc3RhdGljIGJvb2wNCiAgICAgIGx0KGNvbnN0IGNoYXJf
dHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQ0KICAgICAgeyBy
ZXR1cm4gX19jMSA8IF9fYzI7IH0NCg0KICAgICAgc3RhdGljIGludA0KICAg
ICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJf
dHlwZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAgIHsNCiAgICAgICAgZm9y
IChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkNCiAgICAgICAg
ICBpZiAoIWVxKF9fczFbX19pXSwgX19zMltfX2ldKSkNCiAgICAgICAgICAg
IHJldHVybiBsdChfX3MxW19faV0sIF9fczJbX19pXSkgPyAtMSA6IDE7DQog
ICAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KDQogICAgICBzdGF0aWMgc2l6
ZV90DQogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpDQogICAg
ICB7DQogICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOw0KICAg
ICAgICB3aGlsZSAoKl9fcCkgKytfX3A7DQogICAgICAgIHJldHVybiAoX19w
IC0gX19zKTsNCiAgICAgIH0NCg0KICAgICAgc3RhdGljIGNvbnN0IGNoYXJf
dHlwZSoNCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVf
dCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQ0KICAgICAgew0KICAgICAg
ICBmb3IgKGNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOyBzaXplX3QoX19w
IC0gX19zKSA8IF9fbjsgKytfX3ApDQogICAgICAgICAgaWYgKCpfX3AgPT0g
X19hKSByZXR1cm4gX19wOw0KICAgICAgICByZXR1cm4gMDsNCiAgICAgIH0N
Cg0KICAgICAgc3RhdGljIGNoYXJfdHlwZSoNCiAgICAgIG1vdmUoY2hhcl90
eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24p
DQogICAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtbW92ZShfX3MxLCBf
X3MyLCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0NCg0KICAgICAgc3Rh
dGljIGNoYXJfdHlwZSoNCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBj
b25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pDQogICAgICB7IHJl
dHVybiAoY2hhcl90eXBlKikgbWVtY3B5KF9fczEsIF9fczIsIF9fbiAqIHNp
emVvZihjaGFyX3R5cGUpKTsgfQ0KDQogICAgICBzdGF0aWMgY2hhcl90eXBl
Kg0KICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBj
aGFyX3R5cGUgX19hKQ0KICAgICAgew0KICAgICAgICBmb3IgKGNoYXJfdHlw
ZSogX19wID0gX19zOyBfX3AgPCBfX3MgKyBfX247ICsrX19wKQ0KICAgICAg
ICAgIGFzc2lnbigqX19wLCBfX2EpOw0KICAgICAgICByZXR1cm4gX19zOw0K
ICAgICAgfQ0KDQogICAgICBzdGF0aWMgY2hhcl90eXBlDQogICAgICB0b19j
aGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykNCiAgICAgIHsgcmV0dXJu
IGNoYXJfdHlwZShfX2MpOyB9DQoNCiAgICAgIHN0YXRpYyBpbnRfdHlwZQ0K
ICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsgcmV0
dXJuIGludF90eXBlKF9fYyk7IH0NCg0KICAgICAgc3RhdGljIGJvb2wNCiAg
ICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBp
bnRfdHlwZSYgX19jMikNCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsg
fQ0KDQogICAgICBzdGF0aWMgaW50X3R5cGUNCiAgICAgIGVvZigpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigtMSk7IH0NCg0KICAgICAgc3Rh
dGljIGludF90eXBlDQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBf
X2MpDQogICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/
IGludF90eXBlKDApIDogX19jOyB9DQogICAgfTsNCg0KDQoNCiAgdGVtcGxh
dGU8Pg0KICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPg0KICAgIHsNCiAg
ICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGlu
dCBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBl
Ow0KICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7DQogICAgICB0
eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOw0KDQogICAgICBzdGF0aWMg
dm9pZA0KICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hh
cl90eXBlJiBfX2MyKQ0KICAgICAgeyBfX2MxID0gX19jMjsgfQ0KDQogICAg
ICBzdGF0aWMgYm9vbA0KICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2Mx
LCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpDQogICAgICB7IHJldHVybiBfX2Mx
ID09IF9fYzI7IH0NCg0KICAgICAgc3RhdGljIGJvb2wNCiAgICAgIGx0KGNv
bnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQ0K
ICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0NCg0KICAgICAgc3RhdGlj
IGludA0KICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNv
bnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikNCiAgICAgIHsgcmV0
dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9DQoNCiAgICAgIHN0YXRp
YyBzaXplX3QNCiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykN
CiAgICAgIHsgcmV0dXJuIHN0cmxlbihfX3MpOyB9DQoNCiAgICAgIHN0YXRp
YyBjb25zdCBjaGFyX3R5cGUqDQogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlw
ZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkNCiAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGNoYXJfdHlwZSo+KG1l
bWNocihfX3MsIF9fYSwgX19uKSk7IH0NCg0KICAgICAgc3RhdGljIGNoYXJf
dHlwZSoNCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFy
X3R5cGUqIF9fczIsIHNpemVfdCBfX24pDQogICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEsIF9fczIsIF9fbikp
OyB9DQoNCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqDQogICAgICBjb3B5KGNo
YXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3Qg
X19uKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4o
bWVtY3B5KF9fczEsIF9fczIsIF9fbikpOyB9DQoNCiAgICAgIHN0YXRpYyBj
aGFyX3R5cGUqDQogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVf
dCBfX24sIGNoYXJfdHlwZSBfX2EpDQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxjaGFyX3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9DQoN
CiAgICAgIHN0YXRpYyBjaGFyX3R5cGUNCiAgICAgIHRvX2NoYXJfdHlwZShj
b25zdCBpbnRfdHlwZSYgX19jKQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Y2hhcl90eXBlPihfX2MpOyB9DQoNCg0KDQogICAgICBzdGF0aWMgaW50
X3R5cGUNCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19j
KQ0KICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9DQoNCiAgICAgIHN0YXRp
YyBib29sDQogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19j
MSwgY29uc3QgaW50X3R5cGUmIF9fYzIpDQogICAgICB7IHJldHVybiBfX2Mx
ID09IF9fYzI7IH0NCg0KICAgICAgc3RhdGljIGludF90eXBlDQogICAgICBl
b2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKC0xKSk7IH0N
Cg0KICAgICAgc3RhdGljIGludF90eXBlDQogICAgICBub3RfZW9mKGNvbnN0
IGludF90eXBlJiBfX2MpDQogICAgICB7IHJldHVybiAoX19jID09IGVvZigp
KSA/IDAgOiBfX2M7IH0NCiAgfTsNCiMgMjY0ICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAzDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAg
ICBzdHJ1Y3QgX0NoYXJfdHJhaXRzX21hdGNoDQogICAgew0KICAgICAgX0No
YXJUIF9NX2M7DQogICAgICBfQ2hhcl90cmFpdHNfbWF0Y2goX0NoYXJUIGNv
bnN0JiBfX2MpIDogX01fYyhfX2MpIHsgfQ0KDQogICAgICBib29sDQogICAg
ICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVybiBfVHJh
aXRzOjplcShfTV9jLCBfX2EpOyB9DQogICAgfTsNCn0NCiMgNDIgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIg
MiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jc3RkaW8uaCIgMSAzDQojIDQzICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMw0KIyAxICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVm
d2QuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9sb2NhbGVmd2QuaCIgMw0KDQojIDEgIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9i
aXRzL2MrK2NvbmZpZy5oIiAxIDMNCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMNCiMgMSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1z
b2xhcmlzMi43L2JpdHMvYysrbG9jYWxlLmgiIDEgMw0KIyAzNiAiL2hvbWUv
bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlz
Mi43L2JpdHMvYysrbG9jYWxlLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCiAg
dHlwZWRlZiBpbnQqIF9fY19sb2NhbGU7DQp9DQojIDQxICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAz
DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9jbGltaXRzLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NsaW1pdHMuaCIgMw0KIyAxICIv
aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjcvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0DQojIDExICIvaG9t
ZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjcvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDMgNA0KIyAxICIvaG9tZS9tZGVp
bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w
L2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMyA0DQojIDI1ICIvaG9tZS9tZGVp
bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w
L2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgj
KWxpbWl0cy5oCTEuNDgJOTgvMDcvMjAgU01JIg0KDQojIDEgIi91c3IvaW5j
bHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAyOCAiL2hvbWUv
bWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43
LzMuMC9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMgNA0KIyAxICIvdXNyL2lu
Y2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0DQojIDI5ICIvaG9tZS9tZGVp
bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w
L2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0DQojIDQwICIvaG9tZS9tZGVp
bC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4w
L2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUv
c3lzL2ludF9saW1pdHMuaCIgMSAzIDQNCiMgOSAiL3Vzci9pbmNsdWRlL3N5
cy9pbnRfbGltaXRzLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKWludF9s
aW1pdHMuaAkxLjUJOTgvMDEvMDYgU01JIg0KIyA0NCAiL3Vzci9pbmNsdWRl
L3N5cy9pbnRfbGltaXRzLmgiIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvc3lz
L2lzYV9kZWZzLmgiIDEgMyA0DQojIDQ1ICIvdXNyL2luY2x1ZGUvc3lzL2lu
dF9saW1pdHMuaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgMTYyICIv
dXNyL2luY2x1ZGUvc3lzL2ludF9saW1pdHMuaCIgMyA0DQp9DQojIDQxICIv
aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjcvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0DQoNCg0KDQpl
eHRlcm4gIkMiIHsNCiMgMzA3ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzbGlt
aXRzLmgiIDMgNA0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAx
IDMgNA0KIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy91bmlzdGQuaCIgMyA0DQoj
cHJhZ21hIGlkZW50ICJAKCMpdW5pc3RkLmgJMS4zNgk5OC8wNy8xNiBTTUki
DQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEg
MyA0DQojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAyIDMgNA0K
DQoNCmV4dGVybiAiQyIgew0KIyAyNjQgIi91c3IvaW5jbHVkZS9zeXMvdW5p
c3RkLmgiIDMgNA0KfQ0KIyAzMDggIi9ob21lL21kZWlsL2Jpbi8uLi9saWIv
Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zeXNs
aW1pdHMuaCIgMiAzIDQNCiMgMzE4ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lz
bGltaXRzLmgiIDMgNA0KZXh0ZXJuIGxvbmcgX3N5c2NvbmYoaW50KTsNCiMg
MzI4ICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNA0KfQ0K
IyAxMiAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNA0KIyAz
OSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2NsaW1pdHMuaCIgMiAzDQojIDQyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzDQojIDEgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcu
aCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfc3RyaW5nLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0
cy9jKytjb25maWcuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMw0KIyAxICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdHJpbmdm
d2QuaCIgMSAzDQojIDQxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAx
IDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAxIDMNCiMg
MzEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9pdGVyYXRvci5oIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2MrK2NvbmZp
Zy5oIiAxIDMNCiMgMzIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIg
MSAzDQojIDMzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzDQoj
IDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfaXRlcmF0b3IuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgi
IDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMw0KDQpuYW1lc3Bh
Y2Ugc3RkDQp7DQoNCnN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307DQpz
dHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsNCnN0cnVjdCBmb3J3YXJk
X2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307
DQpzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMg
Zm9yd2FyZF9pdGVyYXRvcl90YWcge307DQpzdHJ1Y3QgcmFuZG9tX2FjY2Vz
c19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcge307DQoNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7DQogIHR5
cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Ow0K
ICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIF9EaXN0YW5j
ZSBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgX1RwKiBwb2ludGVyOw0K
ICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KfTsNCg0Kc3RydWN0IG91dHB1
dF9pdGVyYXRvciB7DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7
DQogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYg
dm9pZCBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOw0KfTsN
Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1
Y3QgZm9yd2FyZF9pdGVyYXRvciB7DQogIHR5cGVkZWYgZm9yd2FyZF9pdGVy
YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgX1RwIHZh
bHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlw
ZTsNCiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVkZWYgX1RwJiBy
ZWZlcmVuY2U7DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9EaXN0YW5jZT4gc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Igew0K
ICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9y
X2NhdGVnb3J5Ow0KICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOw0KICB0eXBl
ZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgX1Rw
KiBwb2ludGVyOw0KICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOw0KfTsNCg0K
dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3Qg
cmFuZG9tX2FjY2Vzc19pdGVyYXRvciB7DQogIHR5cGVkZWYgcmFuZG9tX2Fj
Y2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVk
ZWYgX1RwIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZl
cmVuY2VfdHlwZTsNCiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7DQogIHR5cGVk
ZWYgX1RwJiByZWZlcmVuY2U7DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Nh
dGVnb3J5LCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZf
dCwNCiAgICAgICAgICBjbGFzcyBfUG9pbnRlciA9IF9UcCosIGNsYXNzIF9S
ZWZlcmVuY2UgPSBfVHAmPg0Kc3RydWN0IGl0ZXJhdG9yIHsNCiAgdHlwZWRl
ZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgX1Rw
IHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2Vf
dHlwZTsNCiAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOw0KICB0eXBlZGVm
IF9SZWZlcmVuY2UgcmVmZXJlbmNlOw0KfTsNCg0KdGVtcGxhdGUgPGNsYXNz
IF9JdGVyYXRvcj4NCnN0cnVjdCBpdGVyYXRvcl90cmFpdHMgew0KICB0eXBl
ZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRl
cmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9y
Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUg
X0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOw0K
ICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVy
Ow0KICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJl
ZmVyZW5jZTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3Qg
aXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsNCiAgdHlwZWRlZiByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRl
ZiBfVHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy
ZW5jZV90eXBlOw0KICB0eXBlZGVmIF9UcCogcG9pbnRlcjsNCiAgdHlwZWRl
ZiBfVHAmIHJlZmVyZW5jZTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+
DQpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsNCiAgdHlw
ZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsNCiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCiAgdHlwZWRlZiBw
dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIGNvbnN0IF9U
cCogcG9pbnRlcjsNCiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsN
Cn07DQojIDE0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMw0KdGVtcGxhdGUg
PGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5DQpfX2l0ZXJhdG9yX2NhdGVn
b3J5KGNvbnN0IF9JdGVyJikNCnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdv
cnk7DQogIHJldHVybiBfQ2F0ZWdvcnkoKTsNCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcj46OmRpZmZlcmVuY2VfdHlwZSoNCl9fZGlzdGFuY2VfdHlwZShjb25z
dCBfSXRlciYpDQp7DQogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqPigwKTsN
Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyPg0KaW5saW5lIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqDQpfX3ZhbHVl
X3R5cGUoY29uc3QgX0l0ZXImKQ0Kew0KICByZXR1cm4gc3RhdGljX2Nhc3Q8
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSo+
KDApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+DQppbmxpbmUgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdv
cnkNCml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0
dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsgfQ0KDQoNCnRlbXBsYXRl
IDxjbGFzcyBfSXRlcj4NCmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqDQpkaXN0YW5jZV90eXBlKGNv
bnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fZGlzdGFuY2VfdHlwZShfX2kp
OyB9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4NCmlubGluZSB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKg0KdmFsdWVf
dHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUo
X19pKTsgfQ0KDQp9DQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzDQojIDEgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRv
cl9iYXNlX2Z1bmNzLmgiIDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3Mu
aCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAz
DQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3Nw
YXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDEgMw0KIyAz
NiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvY29u
Y2VwdF9jaGVjay5oIiAyIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgi
IDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQoNCg0KdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxp
bmUgdm9pZCBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
X0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsNCg0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQogIHdoaWxlIChfX2ZpcnN0ICE9IF9f
bGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4N
CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSYgX19uLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykNCnsN
Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAg
X19uICs9IF9fbGFzdCAtIF9fZmlyc3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZv
aWQgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwNCiAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX0Rpc3RhbmNl
JiBfX24pDQp7DQoNCiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9f
biwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQppbmxpbmUgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
DQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQ0Kew0KDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsNCiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7
DQogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICsrX19maXJz
dDsgKytfX247DQogIH0NCiAgcmV0dXJuIF9fbjsNCn0NCg0KdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4NCmlubGluZSB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlm
ZmVyZW5jZV90eXBlDQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LA0KICAg
ICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykNCnsNCg0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgcmV0dXJu
IF9fbGFzdCAtIF9fZmlyc3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4NCmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUNCmRpc3RhbmNlKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkN
CnsNCg0KICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
dXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5DQogICAgX0NhdGVnb3J5
Ow0KICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRl
Z29yeSgpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9EaXN0YW5jZT4NCmlubGluZSB2b2lkIF9fYWR2YW5jZShfSW5wdXRJ
dGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykN
CnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgd2hpbGUgKF9fbi0tKSAr
K19faTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4NCmlubGluZSB2b2lkIF9fYWR2YW5j
ZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24s
DQogICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7DQogIGlmIChfX24gPiAwKQ0KICAgIHdoaWxlIChfX24tLSkgKytf
X2k7DQogIGVsc2UNCiAgICB3aGlsZSAoX19uKyspIC0tX19pOw0KfQ0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf
RGlzdGFuY2U+DQppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sDQogICAgICAgICAgICAg
ICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpDQp7DQoNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogIF9faSAr
PSBfX247DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwg
Y2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJ
dGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQ0Kew0KDQogIF9fYWR2YW5j
ZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7DQp9DQoNCn0N
CiMgMzYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9pdGVyYXRvci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMw0KIyAz
NCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2l0ZXJhdG9yLmgiIDMNCm5hbWVzcGFjZSBzdGQNCnsNCg0KdGVtcGxhdGUg
PGNsYXNzIF9Db250YWluZXI+DQpjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRv
ciB7DQpwcm90ZWN0ZWQ6DQogIF9Db250YWluZXIqIGNvbnRhaW5lcjsNCnB1
YmxpYzoNCiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOw0K
ICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv
cnk7DQogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOw0KICB0eXBlZGVmIHZv
aWQgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsN
CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsNCg0KICBleHBsaWNpdCBiYWNr
X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVy
KCZfX3gpIHt9DQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
Jg0KICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFs
dWVfdHlwZSYgX192YWx1ZSkgew0KICAgIGNvbnRhaW5lci0+cHVzaF9iYWNr
KF9fdmFsdWUpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBiYWNrX2lu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1
cm4gKnRoaXM7IH0NCiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQ0KICBiYWNrX2lu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsg
cmV0dXJuICp0aGlzOyB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRh
aW5lcj4NCmlubGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiBiYWNrX2luc2VydGVyKF9Db250YWluZXImIF9feCkgew0KICByZXR1cm4g
YmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsNCn0NCg0K
dGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+DQpjbGFzcyBmcm9udF9pbnNl
cnRfaXRlcmF0b3Igew0KcHJvdGVjdGVkOg0KICBfQ29udGFpbmVyKiBjb250
YWluZXI7DQpwdWJsaWM6DQogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWlu
ZXJfdHlwZTsNCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJh
dG9yX2NhdGVnb3J5Ow0KICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsNCiAg
dHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB2b2lk
IHBvaW50ZXI7DQogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7DQoNCiAgZXhw
bGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkg
OiBjb250YWluZXIoJl9feCkge30NCiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+Jg0KICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0Nv
bnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgew0KICAgIGNvbnRhaW5l
ci0+cHVzaF9mcm9udChfX3ZhbHVlKTsNCiAgICByZXR1cm4gKnRoaXM7DQog
IH0NCiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVy
YXRvciooKSB7IHJldHVybiAqdGhpczsgfQ0KICBmcm9udF9pbnNlcnRfaXRl
cmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhp
czsgfQ0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9w
ZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQ0KfTsNCg0KdGVtcGxh
dGUgPGNsYXNzIF9Db250YWluZXI+DQppbmxpbmUgZnJvbnRfaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWluZXIm
IF9feCkgew0KICByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250
YWluZXI+KF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVy
Pg0KY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yIHsNCnByb3RlY3RlZDoNCiAgX0Nv
bnRhaW5lciogY29udGFpbmVyOw0KICB0eXBlbmFtZSBfQ29udGFpbmVyOjpp
dGVyYXRvciBpdGVyOw0KcHVibGljOg0KICB0eXBlZGVmIF9Db250YWluZXIg
Y29udGFpbmVyX3R5cGU7DQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5
cGU7DQogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVk
ZWYgdm9pZCBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOw0K
DQogIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1l
IF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkNCiAgICA6IGNvbnRhaW5lcigm
X194KSwgaXRlcihfX2kpIHt9DQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFp
bmVyPiYNCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6
OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsNCiAgICBpdGVyID0gY29udGFpbmVy
LT5pbnNlcnQoaXRlciwgX192YWx1ZSk7DQogICAgKytpdGVyOw0KICAgIHJl
dHVybiAqdGhpczsNCiAgfQ0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9DQogIGluc2VydF9p
dGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0
aGlzOyB9DQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0
b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9DQp9Ow0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX0NvbnRhaW5lciwgY2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5lDQpp
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gaW5zZXJ0ZXIoX0NvbnRhaW5l
ciYgX194LCBfSXRlcmF0b3IgX19pKQ0Kew0KICB0eXBlZGVmIHR5cGVuYW1l
IF9Db250YWluZXI6Oml0ZXJhdG9yIF9faXRlcjsNCiAgcmV0dXJuIGluc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsIF9faXRlcihfX2kpKTsNCn0N
Cg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNs
YXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCYsDQogICAgICAgICAg
Y2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90Pg0KY2xhc3MgcmV2ZXJzZV9i
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsNCiAgdHlwZWRlZiByZXZlcnNlX2Jp
ZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwg
X1RwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+IF9TZWxmOw0KcHJvdGVjdGVkOg0K
ICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGN1cnJlbnQ7DQpwdWJsaWM6DQog
IHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3Jf
Y2F0ZWdvcnk7DQogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7DQogIHR5cGVk
ZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiBfVHAq
IHBvaW50ZXI7DQogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7DQoN
CiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30NCiAgZXhw
bGljaXQgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKF9CaWRpcmVj
dGlvbmFsSXRlcmF0b3IgX194KQ0KICAgIDogY3VycmVudChfX3gpIHt9DQog
IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJu
IGN1cnJlbnQ7IH0NCiAgX1JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7
DQogICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7
DQogICAgcmV0dXJuICotLV9fdG1wOw0KICB9DQogIHBvaW50ZXIgb3BlcmF0
b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9DQogIF9T
ZWxmJiBvcGVyYXRvcisrKCkgew0KICAgIC0tY3VycmVudDsNCiAgICByZXR1
cm4gKnRoaXM7DQogIH0NCiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsNCiAg
ICBfU2VsZiBfX3RtcCA9ICp0aGlzOw0KICAgIC0tY3VycmVudDsNCiAgICBy
ZXR1cm4gX190bXA7DQogIH0NCiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7DQog
ICAgKytjdXJyZW50Ow0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBfU2Vs
ZiBvcGVyYXRvci0tKGludCkgew0KICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7
DQogICAgKytjdXJyZW50Ow0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KfTsN
Cg0KdGVtcGxhdGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg
X1JlZiwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PSgNCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8
X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3gsDQogICAgY29u
c3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9U
cCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQ0Kew0KICByZXR1cm4gX194LmJh
c2UoKSA9PSBfX3kuYmFzZSgpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBfRGlzdGFuY2U+
DQppbmxpbmUgYm9vbCBvcGVyYXRvciE9KA0KICAgIGNvbnN0IHJldmVyc2Vf
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9E
aXN0YW5jZT4mIF9feCwNCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9u
YWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBf
X3kpDQp7DQogIHJldHVybiAhKF9feCA9PSBfX3kpOw0KfQ0KIyAxOTMgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVy
YXRvci5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KY2xhc3Mg
cmV2ZXJzZV9pdGVyYXRvcg0Kew0KcHJvdGVjdGVkOg0KICBfSXRlcmF0b3Ig
Y3VycmVudDsNCnB1YmxpYzoNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkNCiAgICAg
ICAgICBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQ0KICAgICAg
ICAgIHZhbHVlX3R5cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0KICAgICAgICAg
IGRpZmZlcmVuY2VfdHlwZTsNCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcg0KICAgICAgICAgIHBvaW50
ZXI7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
YXRvcj46OnJlZmVyZW5jZQ0KICAgICAgICAgIHJlZmVyZW5jZTsNCg0KICB0
eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOw0KICB0eXBlZGVmIHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsNCg0KcHVibGljOg0K
ICByZXZlcnNlX2l0ZXJhdG9yKCkge30NCiAgZXhwbGljaXQgcmV2ZXJzZV9p
dGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkge30N
Cg0KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9TZWxmJiBfX3gpIDogY3Vy
cmVudChfX3guY3VycmVudCkge30NCiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVy
Pg0KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8
X0l0ZXI+JiBfX3gpDQogICAgOiBjdXJyZW50KF9feC5iYXNlKCkpIHt9DQoN
CiAgaXRlcmF0b3JfdHlwZSBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVu
dDsgfQ0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3Qgew0KICAgIF9J
dGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7DQogICAgcmV0dXJuICotLV9fdG1w
Ow0KICB9DQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJu
ICYob3BlcmF0b3IqKCkpOyB9DQoNCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7
DQogICAgLS1jdXJyZW50Ow0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBf
U2VsZiBvcGVyYXRvcisrKGludCkgew0KICAgIF9TZWxmIF9fdG1wID0gKnRo
aXM7DQogICAgLS1jdXJyZW50Ow0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0K
ICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsNCiAgICArK2N1cnJlbnQ7DQogICAg
cmV0dXJuICp0aGlzOw0KICB9DQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7
DQogICAgX1NlbGYgX190bXAgPSAqdGhpczsNCiAgICArK2N1cnJlbnQ7DQog
ICAgcmV0dXJuIF9fdG1wOw0KICB9DQoNCiAgX1NlbGYgb3BlcmF0b3IrKGRp
ZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsNCiAgICByZXR1cm4gX1NlbGYo
Y3VycmVudCAtIF9fbik7DQogIH0NCiAgX1NlbGYmIG9wZXJhdG9yKz0oZGlm
ZmVyZW5jZV90eXBlIF9fbikgew0KICAgIGN1cnJlbnQgLT0gX19uOw0KICAg
IHJldHVybiAqdGhpczsNCiAgfQ0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVy
ZW5jZV90eXBlIF9fbikgY29uc3Qgew0KICAgIHJldHVybiBfU2VsZihjdXJy
ZW50ICsgX19uKTsNCiAgfQ0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJl
bmNlX3R5cGUgX19uKSB7DQogICAgY3VycmVudCArPSBfX247DQogICAgcmV0
dXJuICp0aGlzOw0KICB9DQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZl
cmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBfX24p
OyB9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4mIF9feCwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsNCiAgcmV0dXJuIF9f
eC5iYXNlKCkgPT0gX195LmJhc2UoKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9JdGVyYXRvcj4NCmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZl
cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwNCiAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f
eSkgew0KICByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+DQppbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194
LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJh
dG9yPF9JdGVyYXRvcj4mIF9feSkgew0KICByZXR1cm4gIShfX3ggPT0gX195
KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4NCmlubGluZSBi
b29sIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv
cj4mIF9feCwNCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgew0KICByZXR1cm4gX195IDwg
X194Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPg0KaW5saW5l
IGJvb2wgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4mIF9feCwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsNCiAgcmV0dXJuICEo
X195IDwgX194KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4N
CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcmF0b3I+JiBfX3gsDQogICAgICAgICAgICAgICAgICAgICAgY29u
c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsNCiAgcmV0
dXJuICEoX194IDwgX195KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JdGVy
YXRvcj4NCmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj46OmRpZmZlcmVuY2VfdHlwZQ0Kb3BlcmF0b3ItKGNvbnN0IHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LA0KICAgICAgICAgIGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7DQogIHJldHVy
biBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsNCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIF9JdGVyYXRvcj4NCmlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4NCm9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sDQogICAgICAgICAgY29u
c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpIHsNCiAgcmV0
dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0g
X19uKTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLA0KICAgICAgICAg
IGNsYXNzIF9DaGFyVCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3Ry
YWl0czxfQ2hhclQ+LA0KICAgICAgICAgIGNsYXNzIF9EaXN0ID0gcHRyZGlm
Zl90Pg0KY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7DQpwdWJsaWM6DQogIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgdHlwZWRlZiBfVHJhaXRzIHRy
YWl0c190eXBlOw0KICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiBpc3RyZWFtX3R5cGU7DQoNCiAgdHlwZWRlZiBpbnB1dF9pdGVy
YXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgX1RwIHZh
bHVlX3R5cGU7DQogIHR5cGVkZWYgX0Rpc3QgZGlmZmVyZW5jZV90eXBlOw0K
ICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsNCiAgdHlwZWRlZiBjb25z
dCBfVHAmIHJlZmVyZW5jZTsNCg0KICBpc3RyZWFtX2l0ZXJhdG9yKCkgOiBf
TV9zdHJlYW0oMCksIF9NX29rKGZhbHNlKSB7fQ0KICBpc3RyZWFtX2l0ZXJh
dG9yKGlzdHJlYW1fdHlwZSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSB7IF9N
X3JlYWQoKTsgfQ0KDQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7
IHJldHVybiBfTV92YWx1ZTsgfQ0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBj
b25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQ0KDQogIGlzdHJlYW1f
aXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7DQogICAgX01fcmVhZCgpOw0KICAg
IHJldHVybiAqdGhpczsNCiAgfQ0KICBpc3RyZWFtX2l0ZXJhdG9yIG9wZXJh
dG9yKysoaW50KSB7DQogICAgaXN0cmVhbV9pdGVyYXRvciBfX3RtcCA9ICp0
aGlzOw0KICAgIF9NX3JlYWQoKTsNCiAgICByZXR1cm4gX190bXA7DQogIH0N
Cg0KICBib29sIF9NX2VxdWFsKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImIF9f
eCkgY29uc3QNCiAgICB7IHJldHVybiAoX01fb2sgPT0gX194Ll9NX29rKSAm
JiAoIV9NX29rIHx8IF9NX3N0cmVhbSA9PSBfX3guX01fc3RyZWFtKTsgfQ0K
DQpwcml2YXRlOg0KICBpc3RyZWFtX3R5cGUqIF9NX3N0cmVhbTsNCiAgX1Rw
IF9NX3ZhbHVlOw0KICBib29sIF9NX29rOw0KDQogIHZvaWQgX01fcmVhZCgp
IHsNCiAgICBfTV9vayA9IChfTV9zdHJlYW0gJiYgKl9NX3N0cmVhbSkgPyB0
cnVlIDogZmFsc2U7DQogICAgaWYgKF9NX29rKSB7DQogICAgICAqX01fc3Ry
ZWFtID4+IF9NX3ZhbHVlOw0KICAgICAgX01fb2sgPSAqX01fc3RyZWFtID8g
dHJ1ZSA6IGZhbHNlOw0KICAgIH0NCiAgfQ0KfTsNCg0KdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBf
RGlzdD4NCmlubGluZSBib29sDQpvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1f
aXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX194LA0K
ICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJU
LCBfVHJhaXRzLCBfRGlzdD4mIF9feSkgew0KICByZXR1cm4gX194Ll9NX2Vx
dWFsKF9feSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9D
aGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Rpc3Q+DQppbmxpbmUgYm9v
bA0Kb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0No
YXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feCwNCiAgICAgICAgICAgY29uc3Qg
aXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+
JiBfX3kpIHsNCiAgcmV0dXJuICFfX3guX01fZXF1YWwoX195KTsNCn0NCg0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLA0KICAgICAgICAgIGNsYXNzIF9DaGFy
VCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+
ID4NCmNsYXNzIG9zdHJlYW1faXRlcmF0b3Igew0KcHVibGljOg0KICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogIHR5cGVkZWYgX1RyYWl0cyB0cmFp
dHNfdHlwZTsNCiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4gb3N0cmVhbV90eXBlOw0KDQogIHR5cGVkZWYgb3V0cHV0X2l0ZXJh
dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsNCiAgdHlwZWRlZiB2b2lkIHZh
bHVlX3R5cGU7DQogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7DQog
IHR5cGVkZWYgdm9pZCBwb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgcmVmZXJl
bmNlOw0KDQogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3Mp
IDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoMCkge30NCiAgb3N0cmVh
bV9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcywgY29uc3QgX0NoYXJUKiBf
X2MpDQogICAgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpIHt9
DQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9U
cCYgX192YWx1ZSkgew0KICAgICpfTV9zdHJlYW0gPDwgX192YWx1ZTsNCiAg
ICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0cmluZzsNCiAg
ICByZXR1cm4gKnRoaXM7DQogIH0NCiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+
JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQ0KICBvc3RyZWFtX2l0
ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQ0K
ICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJl
dHVybiAqdGhpczsgfQ0KcHJpdmF0ZToNCiAgb3N0cmVhbV90eXBlKiBfTV9z
dHJlYW07DQogIGNvbnN0IF9DaGFyVCogX01fc3RyaW5nOw0KfTsNCiMgNDE3
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
aXRlcmF0b3IuaCIgMw0KdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0
eXBlbmFtZSBfQ29udGFpbmVyPg0KY2xhc3MgX19ub3JtYWxfaXRlcmF0b3IN
CiAgOiBwdWJsaWMgaXRlcmF0b3I8aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRv
cj46Oml0ZXJhdG9yX2NhdGVnb3J5LA0KICAgICAgICAgICAgICAgICAgICBp
dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwNCiAgICAg
ICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZSwNCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsDQogICAgICAgICAgICAgICAg
ICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+DQp7
DQoNCnByb3RlY3RlZDoNCiAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7DQoNCnB1
YmxpYzoNCiAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is
IF9Db250YWluZXI+IG5vcm1hbF9pdGVyYXRvcl90eXBlOw0KICB0eXBlZGVm
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9fdHJhaXRzX3R5cGU7DQog
IHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6aXRlcmF0b3JfY2F0
ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgdHlwZW5hbWUg
X190cmFpdHNfdHlwZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOw0KICB0eXBl
ZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBk
aWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNf
dHlwZTo6cG9pbnRlciBwb2ludGVyOw0KICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHJhaXRzX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7DQoNCiAgX19ub3Jt
YWxfaXRlcmF0b3IoKSA6IF9NX2N1cnJlbnQoX0l0ZXJhdG9yKCkpIHsgfQ0K
DQogIGV4cGxpY2l0IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRv
ciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0NCg0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JdGVyPg0KICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0b3Io
Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXIsIF9Db250YWluZXI+JiBf
X2kpDQogICAgOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQ0KDQoNCiAg
cmVmZXJlbmNlDQogIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9j
dXJyZW50OyB9DQoNCiAgcG9pbnRlcg0KICBvcGVyYXRvci0+KCkgY29uc3Qg
eyByZXR1cm4gX01fY3VycmVudDsgfQ0KDQogIG5vcm1hbF9pdGVyYXRvcl90
eXBlJg0KICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAq
dGhpczsgfQ0KDQogIG5vcm1hbF9pdGVyYXRvcl90eXBlDQogIG9wZXJhdG9y
KysoaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50
KyspOyB9DQoNCg0KICBub3JtYWxfaXRlcmF0b3JfdHlwZSYNCiAgb3BlcmF0
b3ItLSgpIHsgLS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0NCg0KICBu
b3JtYWxfaXRlcmF0b3JfdHlwZQ0KICBvcGVyYXRvci0tKGludCkgeyByZXR1
cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudC0tKTsgfQ0KDQoNCiAg
cmVmZXJlbmNlDQogIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5jZV90eXBl
JiBfX24pIGNvbnN0DQogIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQ0K
DQogIG5vcm1hbF9pdGVyYXRvcl90eXBlJg0KICBvcGVyYXRvcis9KGNvbnN0
IGRpZmZlcmVuY2VfdHlwZSYgX19uKQ0KICB7IF9NX2N1cnJlbnQgKz0gX19u
OyByZXR1cm4gKnRoaXM7IH0NCg0KICBub3JtYWxfaXRlcmF0b3JfdHlwZQ0K
ICBvcGVyYXRvcisoY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0
DQogIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgKyBf
X24pOyB9DQoNCiAgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmDQogIG9wZXJhdG9y
LT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pDQogIHsgX01fY3VycmVu
dCAtPSBfX247IHJldHVybiAqdGhpczsgfQ0KDQogIG5vcm1hbF9pdGVyYXRv
cl90eXBlDQogIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9f
bikgY29uc3QNCiAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3Vy
cmVudCAtIF9fbik7IH0NCg0KICBkaWZmZXJlbmNlX3R5cGUNCiAgb3BlcmF0
b3ItKGNvbnN0IG5vcm1hbF9pdGVyYXRvcl90eXBlJiBfX2kpIGNvbnN0DQog
IHsgcmV0dXJuIF9NX2N1cnJlbnQgLSBfX2kuX01fY3VycmVudDsgfQ0KDQog
IGNvbnN0IF9JdGVyYXRvciYNCiAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9N
X2N1cnJlbnQ7IH0NCn07DQoNCg0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl
cmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFp
bmVyPg0KaW5saW5lIGJvb2wNCm9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLA0KICAg
ICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBf
Q29udGFpbmVyPiYgX19yaHMpDQp7IHJldHVybiBfX2xocy5iYXNlKCkgPT0g
X19yaHMuYmFzZSgpOyB9DQoNCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv
ckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+
DQppbmxpbmUgYm9vbA0Kb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsDQogICAgICAg
ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250
YWluZXI+JiBfX3JocykNCnsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9
DQoNCg0KDQp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFt
ZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPg0KaW5saW5lIGJv
b2wNCm9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3JMLCBfQ29udGFpbmVyPiYgX19saHMsDQogICAgICAgICAgY29uc3QgX19u
b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhz
KQ0KeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9DQoN
CnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVy
YXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+DQppbmxpbmUgYm9vbA0Kb3Bl
cmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9D
b250YWluZXI+JiBfX2xocywNCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpDQp7IHJl
dHVybiBfX3JocyA8IF9fbGhzOyB9DQoNCnRlbXBsYXRlPHR5cGVuYW1lIF9J
dGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250
YWluZXI+DQppbmxpbmUgYm9vbA0Kb3BlcmF0b3I8PShjb25zdCBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsDQog
ICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIs
IF9Db250YWluZXI+JiBfX3JocykNCnsgcmV0dXJuICEoX19yaHMgPCBfX2xo
cyk7IH0NCg0KdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5h
bWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4NCmlubGluZSBi
b29sDQpvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvckwsIF9Db250YWluZXI+JiBfX2xocywNCiAgICAgICAgICAgY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9f
cmhzKQ0KeyByZXR1cm4gIShfX2xocyA8IF9fcmhzKTsgfQ0KDQp0ZW1wbGF0
ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+DQpp
bmxpbmUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVy
Pg0Kb3BlcmF0b3IrKF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0Nv
bnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sDQogICAgICAgICAgY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYg
X19pKQ0KeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf
Q29udGFpbmVyPihfX2kuYmFzZSgpICsgX19uKTsgfQ0KDQp9DQojIDM3ICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRl
cmF0b3IuaCIgMiAzDQojIDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMw0KIyAxICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5Lmgi
IDEgMw0KIyAxOSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX21lbW9yeS5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMw0K
IyAzNSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2FsZ29iYXNlLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29u
ZmlnLmgiIDEgMw0KIyAzNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMw0KDQojIDEgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgi
IDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX3BhaXIuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQpzdHJ1Y3QgcGFpciB7DQog
IHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7DQogIHR5cGVkZWYgX1QyIHNlY29u
ZF90eXBlOw0KDQogIF9UMSBmaXJzdDsNCiAgX1QyIHNlY29uZDsNCg0KDQog
IHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9DQoNCg0KDQogIHBhaXIo
Y29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSks
IHNlY29uZChfX2IpIHt9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xh
c3MgX1UyPg0KICBwYWlyKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBfX3ApIDog
Zmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9DQp9Ow0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0
IHBhaXI8X1QxLCBfVDI+JiBfX3kpDQp7DQogIHJldHVybiBfX3guZmlyc3Qg
PT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0gX195LnNlY29uZDsNCn0N
Cg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5saW5lIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0
IHBhaXI8X1QxLCBfVDI+JiBfX3kpDQp7DQogIHJldHVybiBfX3guZmlyc3Qg
PCBfX3kuZmlyc3QgfHwNCiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5m
aXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOw0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8
X1QxLCBfVDI+JiBfX3kpIHsNCiAgcmV0dXJuICEoX194ID09IF9feSk7DQp9
DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGluZSBi
b29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25z
dCBwYWlyPF9UMSwgX1QyPiYgX195KSB7DQogIHJldHVybiBfX3kgPCBfX3g7
DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlubGlu
ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwg
Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgew0KICByZXR1cm4gIShfX3kg
PCBfX3gpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+
DQppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+
JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsNCiAgcmV0dXJu
ICEoX194IDwgX195KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xh
c3MgX1QyPg0KDQoNCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIo
X1QxIF9feCwgX1QyIF9feSkNCg0KDQoNCnsNCiAgcmV0dXJuIHBhaXI8X1Qx
LCBfVDI+KF9feCwgX195KTsNCn0NCg0KfQ0KIyAzOCAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg
Mw0KDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzDQojIDE5ICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzDQoN
CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJj
LXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDEgMw0KIyAyMSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90
cmFpdHMuaCIgMiAzDQojIDU3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzDQp0ZW1wbGF0ZSA8Ym9v
bCBfVHJ1dGg+IHN0cnVjdCBfQm9vbCB7fTsNCnR5cGVkZWYgX0Jvb2w8dHJ1
ZT4gX190cnVlX3R5cGU7DQp0eXBlZGVmIF9Cb29sPGZhbHNlPiBfX2ZhbHNl
X3R5cGU7DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQpzdHJ1Y3QgX190eXBl
X3RyYWl0cyB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlf
bWVtYmVyX211c3RfYmVfZmlyc3Q7DQojIDgxICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzDQogICB0
eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yOw0KICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxf
Y29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9f
ZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRl
ZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQoNCg0KDQp0ZW1w
bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsNCiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv
cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBf
X3R5cGVfdHJhaXRzPGNoYXI+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNp
Z25lZCBjaGFyPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsN
Cg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBj
aGFyPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl
ZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVt
cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7DQogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv
cHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1
Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gew0KICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOw0KICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
Ow0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q
T0RfdHlwZTsNCn07DQoNCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp
dHM8dW5zaWduZWQgc2hvcnQ+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGlu
dD4gew0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZh
dWx0X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOw0KICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOw0KICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOw0KICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsNCn07DQoNCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7DQog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBz
dHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7DQogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
YWl0czx1bnNpZ25lZCBsb25nPiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90
eXBlOw0KfTsNCiMgMTk5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzDQp0ZW1wbGF0ZTw+IHN0cnVj
dCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7DQogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP
RF90eXBlOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0
czxkb3VibGU+IHsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsN
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0K
DQp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91Ymxl
PiB7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2NvcHlfY29uc3RydWN0b3I7DQogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7DQogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7DQogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOw0KfTsNCg0KdGVtcGxh
dGUgPGNsYXNzIF9UcD4NCnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+IHsN
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsNCiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsNCiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsNCiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7DQp9Ow0KDQoNCg0KDQoNCnRl
bXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7DQogIHR5
cGVkZWYgX19mYWxzZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoNCnRlbXBsYXRl
PD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsNCiAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBf
SXNfaW50ZWdlcjxjaGFyPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0lu
dGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8
c2lnbmVkIGNoYXI+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy
YWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNp
Z25lZCBjaGFyPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs
Ow0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJf
dD4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsNCn07DQoN
CnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7DQogIHR5
cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOw0KfTsNCg0KdGVtcGxhdGU8
PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsNCiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+
IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsNCiAgdHlwZWRlZiBfX3RydWVf
dHlwZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNf
aW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsNCiAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBfSW50ZWdyYWw7DQp9Ow0KDQp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
ZWdlcjxsb25nPiB7DQogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs
Ow0KfTsNCg0KdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWdu
ZWQgbG9uZz4gew0KICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsN
Cn07DQojIDI5NiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvdHlwZV90cmFpdHMuaCIgMw0KdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PiBzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvciB7DQogICB0eXBlZGVmIF9f
ZmFsc2VfdHlwZSBfTm9ybWFsOw0KfTsNCg0KDQpuYW1lc3BhY2Ugc3RkIHsN
CiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0Nv
bnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7DQp9Ow0KDQp0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+
DQpzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvcjwgc3RkOjpfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+ID4gew0KICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfTm9ybWFsOw0KfTsNCiMgNDEgIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAy
IDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3N0cmluZy5oIiAxIDMNCiMgNDMgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMN
CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NsaW1pdHMuaCIgMSAzDQojIDQ0ICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
c3RkbGliLmgiIDEgMw0KIyAzNyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMw0KIyAxICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMy
LjcvYml0cy9jKytjb25maWcuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMN
CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NzdGRkZWYuaCIgMSAzDQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMNCiMgNDEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
c3RkbGliLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGxpYi5o
IiAxIDMgNA0KIyAyNSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGxpYi5oIiAz
IDQNCiNwcmFnbWEgaWRlbnQgIkAoIylzdGRsaWIuaAkxLjQ0CTk4LzAxLzIy
IFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMu
aCIgMSAzIDQNCiMgMjggIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxp
Yi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRsaWIuaCIg
MiAzIDQNCg0KDQoNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDEg
MyA0DQojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMyA0DQojcHJh
Z21hIGlkZW50ICJAKCMpd2FpdC5oCTEuMjEJOTcvMDQvMDggU01JIg0KDQoj
IDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0K
IyAxOSAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0DQoNCiMgMSAi
L2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi43LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMgNA0KIyAyMSAi
L3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0DQoNCg0KDQojIDEgIi91
c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMSAzIDQNCiMgMTYgIi91c3Iv
aW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0DQojcHJhZ21hIGlkZW50ICJA
KCMpcmVzb3VyY2UuaAkxLjI1CTk4LzA2LzMwIFNNSSINCg0KIyAxICIvdXNy
L2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTkgIi91
c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMiAzIDQNCg0KIyAxICIvaG9t
ZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjcvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0DQojIDIxICIvdXNy
L2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDIgMyA0DQojIDEgIi91c3IvaW5j
bHVkZS9zeXMvdGltZS5oIiAxIDMgNA0KIyAyMiAiL3Vzci9pbmNsdWRlL3N5
cy9yZXNvdXJjZS5oIiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyA2NyAi
L3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQNCnR5cGVkZWYgdW5z
aWduZWQgbG9uZyBybGltX3Q7DQojIDEwMiAiL3Vzci9pbmNsdWRlL3N5cy9y
ZXNvdXJjZS5oIiAzIDQNCnN0cnVjdCBybGltaXQgew0KICAgICAgICBybGlt
X3QgcmxpbV9jdXI7DQogICAgICAgIHJsaW1fdCBybGltX21heDsNCn07DQoN
Cg0KDQoNCnR5cGVkZWYgdV9sb25nbG9uZ190IHJsaW02NF90Ow0KDQoNCg0K
DQoNCnN0cnVjdCBybGltaXQ2NCB7DQogICAgICAgIHJsaW02NF90IHJsaW1f
Y3VyOw0KICAgICAgICBybGltNjRfdCBybGltX21heDsNCn07DQojIDE0MyAi
L3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQNCnN0cnVjdCBydXNh
Z2Ugew0KICAgICAgICBzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsNCiAgICAg
ICAgc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7DQogICAgICAgIGxvbmcgcnVf
bWF4cnNzOw0KICAgICAgICBsb25nIHJ1X2l4cnNzOw0KICAgICAgICBsb25n
IHJ1X2lkcnNzOw0KICAgICAgICBsb25nIHJ1X2lzcnNzOw0KICAgICAgICBs
b25nIHJ1X21pbmZsdDsNCiAgICAgICAgbG9uZyBydV9tYWpmbHQ7DQogICAg
ICAgIGxvbmcgcnVfbnN3YXA7DQogICAgICAgIGxvbmcgcnVfaW5ibG9jazsN
CiAgICAgICAgbG9uZyBydV9vdWJsb2NrOw0KICAgICAgICBsb25nIHJ1X21z
Z3NuZDsNCiAgICAgICAgbG9uZyBydV9tc2dyY3Y7DQogICAgICAgIGxvbmcg
cnVfbnNpZ25hbHM7DQogICAgICAgIGxvbmcgcnVfbnZjc3c7DQogICAgICAg
IGxvbmcgcnVfbml2Y3N3Ow0KfTsNCiMgMTkzICIvdXNyL2luY2x1ZGUvc3lz
L3Jlc291cmNlLmgiIDMgNA0KZXh0ZXJuIGludCBzZXRybGltaXQoaW50LCBj
b25zdCBzdHJ1Y3QgcmxpbWl0ICopOw0KZXh0ZXJuIGludCBnZXRybGltaXQo
aW50LCBzdHJ1Y3QgcmxpbWl0ICopOw0KDQoNCg0KDQpleHRlcm4gaW50IHNl
dHJsaW1pdDY0KGludCwgY29uc3Qgc3RydWN0IHJsaW1pdDY0ICopOw0KZXh0
ZXJuIGludCBnZXRybGltaXQ2NChpbnQsIHN0cnVjdCBybGltaXQ2NCAqKTsN
Cg0KDQpleHRlcm4gaW50IGdldHByaW9yaXR5KGludCwgaWRfdCk7DQpleHRl
cm4gaW50IHNldHByaW9yaXR5KGludCwgaWRfdCwgaW50KTsNCmV4dGVybiBp
bnQgZ2V0cnVzYWdlKGludCwgc3RydWN0IHJ1c2FnZSAqKTsNCiMgMjI4ICIv
dXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNA0KfQ0KIyAyNSAiL3Vz
ci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0DQojIDEgIi91c3IvaW5jbHVk
ZS9zeXMvc2lnaW5mby5oIiAxIDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRlL3N5
cy9zaWdpbmZvLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKXNpZ2luZm8u
aAkxLjU0CTk4LzAzLzI3IFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lz
L2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQNCiMgMTkgIi91c3IvaW5jbHVkZS9z
eXMvc2lnaW5mby5oIiAyIDMgNA0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDEgMyA0DQojIDIwICIvdXNyL2luY2x1ZGUvc3lzL3Np
Z2luZm8uaCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgMTI2ICIvdXNy
L2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMyA0DQojIDEgIi91c3IvaW5jbHVk
ZS9zeXMvbWFjaHNpZy5oIiAxIDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRlL3N5
cy9tYWNoc2lnLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKW1hY2hzaWcu
aAkxLjE0CTk4LzAyLzA1IFNNSSINCg0KDQojIDEgIi91c3IvaW5jbHVkZS9z
eXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAyMCAiL3Vzci9pbmNsdWRl
L3N5cy9tYWNoc2lnLmgiIDIgMyA0DQoNCg0KZXh0ZXJuICJDIiB7DQojIDEx
MCAiL3Vzci9pbmNsdWRlL3N5cy9tYWNoc2lnLmgiIDMgNA0KfQ0KIyAxMjcg
Ii91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAyIDMgNA0KIyAyMDYgIi91
c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQNCiMgMSAiL3Vzci9pbmNs
dWRlL3N5cy90aW1lX2ltcGwuaCIgMSAzIDQNCiMgMjA3ICIvdXNyL2luY2x1
ZGUvc3lzL3NpZ2luZm8uaCIgMiAzIDQNCiMgMjE3ICIvdXNyL2luY2x1ZGUv
c3lzL3NpZ2luZm8uaCIgMyA0DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMSAzIDQNCiMgMjE4ICIvdXNyL2luY2x1ZGUvc3lzL3Np
Z2luZm8uaCIgMiAzIDQNCg0KDQoNCnR5cGVkZWYgc3RydWN0IHNpZ2luZm8g
ew0KDQoNCg0KICAgICAgICBpbnQgc2lfc2lnbm87DQogICAgICAgIGludCBz
aV9jb2RlOw0KICAgICAgICBpbnQgc2lfZXJybm87DQoNCg0KDQogICAgICAg
IHVuaW9uIHsNCg0KICAgICAgICAgICAgICAgIGludCBfX3BhZFsoKDEyOCAv
IHNpemVvZiAoaW50KSkgLSAzKV07DQoNCiAgICAgICAgICAgICAgICBzdHJ1
Y3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAgcGlkX3QgX19waWQ7DQog
ICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiB7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgX191aWQ7DQoNCg0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHNp
Z3ZhbCBfX3ZhbHVlOw0KDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IF9fa2lsbDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbG9ja190IF9fdXRpbWU7DQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fc3RhdHVzOw0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrX3QgX19z
dGltZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBfX2Ns
ZDsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gX19wZGF0YTsNCiAgICAg
ICAgICAgICAgICB9IF9fcHJvYzsNCg0KICAgICAgICAgICAgICAgIHN0cnVj
dCB7DQogICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2FkZHI7DQog
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX190cmFwbm87DQogICAgICAg
ICAgICAgICAgICAgICAgICBjYWRkcl90IF9fcGM7DQogICAgICAgICAgICAg
ICAgfSBfX2ZhdWx0Ow0KDQogICAgICAgICAgICAgICAgc3RydWN0IHsNCg0K
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZmQ7DQogICAgICAgICAg
ICAgICAgICAgICAgICBsb25nIF9fYmFuZDsNCiAgICAgICAgICAgICAgICB9
IF9fZmlsZTsNCg0KICAgICAgICAgICAgICAgIHN0cnVjdCB7DQogICAgICAg
ICAgICAgICAgICAgICAgICBjYWRkcl90IF9fZmFkZHI7DQoNCg0KICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZXN0cnVjX3QgX190c3RhbXA7DQoNCg0K
DQogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfX3N5c2NhbGw7DQog
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbnN5c2FyZzsNCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgX19mYXVsdDsNCiAgICAgICAgICAg
ICAgICAgICAgICAgIGxvbmcgX19zeXNhcmdbOF07DQogICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19tc3RhdGVbMTBdOw0KICAgICAgICAgICAgICAg
IH0gX19wcm9mOw0KDQogICAgICAgIH0gX19kYXRhOw0KDQp9IHNpZ2luZm9f
dDsNCiMgMzU0ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMyA0DQp0
eXBlZGVmIHN0cnVjdCBrX3NpZ2luZm8gew0KICAgICAgICBpbnQgc2lfc2ln
bm87DQogICAgICAgIGludCBzaV9jb2RlOw0KICAgICAgICBpbnQgc2lfZXJy
bm87DQoNCg0KDQogICAgICAgIHVuaW9uIHsNCiAgICAgICAgICAgICAgICBz
dHJ1Y3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAgcGlkX3QgX19waWQ7
DQogICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiB7DQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgX191aWQ7DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gc2ln
dmFsIF9fdmFsdWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gX19raWxsOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsb2NrX3QgX191dGltZTsNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19zdGF0dXM7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tfdCBfX3N0aW1lOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF9fY2xkOw0KICAg
ICAgICAgICAgICAgICAgICAgICAgfSBfX3BkYXRhOw0KICAgICAgICAgICAg
ICAgIH0gX19wcm9jOw0KDQogICAgICAgICAgICAgICAgc3RydWN0IHsNCiAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYWRkcjsNCiAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX3RyYXBubzsNCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNhZGRyX3QgX19wYzsNCiAgICAgICAgICAgICAgICB9IF9f
ZmF1bHQ7DQoNCiAgICAgICAgICAgICAgICBzdHJ1Y3Qgew0KDQogICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19mZDsNCiAgICAgICAgICAgICAgICAg
ICAgICAgIGxvbmcgX19iYW5kOw0KICAgICAgICAgICAgICAgIH0gX19maWxl
Ow0KDQogICAgICAgICAgICAgICAgc3RydWN0IHsNCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNhZGRyX3QgX19mYWRkcjsNCg0KDQoNCiAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWVzdHJ1Y190IF9fdHN0YW1wOw0KDQoNCg0KICAg
ICAgICAgICAgICAgICAgICAgICAgc2hvcnQgX19zeXNjYWxsOw0KICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciBfX25zeXNhcmc7DQogICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyIF9fZmF1bHQ7DQoNCg0KDQogICAgICAgICAg
ICAgICAgfSBfX3Byb2Y7DQoNCiAgICAgICAgfSBfX2RhdGE7DQoNCn0ga19z
aWdpbmZvX3Q7DQoNCnR5cGVkZWYgc3RydWN0IHNpZ3F1ZXVlIHsNCiAgICAg
ICAgc3RydWN0IHNpZ3F1ZXVlICpzcV9uZXh0Ow0KICAgICAgICBrX3NpZ2lu
Zm9fdCBzcV9pbmZvOw0KICAgICAgICB2b2lkICgqc3FfZnVuYykoc3RydWN0
IHNpZ3F1ZXVlICopOw0KICAgICAgICB2b2lkICpzcV9iYWNrcHRyOw0KDQp9
IHNpZ3F1ZXVlX3Q7DQojIDQ1NCAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZv
LmgiIDMgNA0KfQ0KIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIg
MyA0DQojIDEgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAxIDMgNA0K
IyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMgNA0KI3ByYWdt
YSBpZGVudCAiQCgjKXByb2NzZXQuaAkxLjE4CTk4LzA2LzMwIFNNSSINCg0K
DQpleHRlcm4gIkMiIHsNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVh
dHVyZV90ZXN0cy5oIiAxIDMgNA0KIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy9w
cm9jc2V0LmgiIDIgMyA0DQojIDQwICIvdXNyL2luY2x1ZGUvc3lzL3Byb2Nz
ZXQuaCIgMyA0DQp0eXBlZGVmIGVudW0NCg0KICAgICAgICBpZHR5cGUNCg0K
ICAgICAgICAgICAgICAgIHsNCiAgICAgICAgUF9QSUQsDQogICAgICAgIFBf
UFBJRCwNCiAgICAgICAgUF9QR0lELA0KDQogICAgICAgIFBfU0lELA0KICAg
ICAgICBQX0NJRCwNCiAgICAgICAgUF9VSUQsDQogICAgICAgIFBfR0lELA0K
ICAgICAgICBQX0FMTCwNCiAgICAgICAgUF9MV1BJRA0KfSBpZHR5cGVfdDsN
CiMgNjQgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAzIDQNCnR5cGVk
ZWYgZW51bSBpZG9wIHsNCiAgICAgICAgUE9QX0RJRkYsDQoNCg0KICAgICAg
ICBQT1BfQU5ELA0KDQoNCiAgICAgICAgUE9QX09SLA0KDQoNCiAgICAgICAg
UE9QX1hPUg0KDQoNCn0gaWRvcF90Ow0KDQoNCg0KDQoNCg0KDQp0eXBlZGVm
IHN0cnVjdCBwcm9jc2V0IHsNCiAgICAgICAgaWRvcF90IHBfb3A7DQoNCg0K
DQoNCiAgICAgICAgaWR0eXBlX3QgcF9saWR0eXBlOw0KDQoNCiAgICAgICAg
aWRfdCBwX2xpZDsNCg0KICAgICAgICBpZHR5cGVfdCBwX3JpZHR5cGU7DQoN
Cg0KICAgICAgICBpZF90IHBfcmlkOw0KfSBwcm9jc2V0X3Q7DQojIDEyOSAi
L3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMgNA0KfQ0KIyAyNyAiL3Vz
ci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0DQoNCg0KDQpleHRlcm4gIkMi
IHsNCiMgODYgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzIDQNCmV4dGVy
biBwaWRfdCB3YWl0KGludCAqKTsNCmV4dGVybiBwaWRfdCB3YWl0cGlkKHBp
ZF90LCBpbnQgKiwgaW50KTsNCg0KDQpleHRlcm4gaW50IHdhaXRpZChpZHR5
cGVfdCwgaWRfdCwgc2lnaW5mb190ICosIGludCk7DQpleHRlcm4gcGlkX3Qg
d2FpdDMoaW50ICosIGludCwgc3RydWN0IHJ1c2FnZSAqKTsNCg0KDQoNCg0K
ZXh0ZXJuIHBpZF90IHdhaXQ0KHBpZF90LCBpbnQgKiwgaW50LCBzdHJ1Y3Qg
cnVzYWdlICopOw0KIyAxMTggIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAz
IDQNCn0NCiMgMzIgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9zdGRsaWIuaCIgMiAz
IDQNCg0KDQoNCmV4dGVybiAiQyIgew0KDQoNCnR5cGVkZWYgc3RydWN0IHsN
CiAgICAgICAgaW50IHF1b3Q7DQogICAgICAgIGludCByZW07DQp9IGRpdl90
Ow0KDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgICAgIGxvbmcgcXVvdDsNCiAg
ICAgICAgbG9uZyByZW07DQp9IGxkaXZfdDsNCg0KDQp0eXBlZGVmIHN0cnVj
dCB7DQogICAgICAgIGxvbmcgbG9uZyBxdW90Ow0KICAgICAgICBsb25nIGxv
bmcgcmVtOw0KfSBsbGRpdl90Ow0KIyAxNDggIi9ob21lL21kZWlsL2Jpbi8u
Li9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVk
ZS9zdGRsaWIuaCIgMyA0DQpleHRlcm4gdW5zaWduZWQgY2hhciBfX2N0eXBl
W107DQoNCg0KDQpleHRlcm4gZG91YmxlIGF0b2YoY29uc3QgY2hhciAqKTsN
CmV4dGVybiBpbnQgYXRvaShjb25zdCBjaGFyICopOw0KZXh0ZXJuIGxvbmcg
aW50IGF0b2woY29uc3QgY2hhciAqKTsNCmV4dGVybiBkb3VibGUgc3RydG9k
KGNvbnN0IGNoYXIgKiwgY2hhciAqKik7DQpleHRlcm4gbG9uZyBpbnQgc3Ry
dG9sKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsNCmV4dGVybiB1bnNp
Z25lZCBsb25nIGludCBzdHJ0b3VsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwg
aW50KTsNCg0KZXh0ZXJuIGludCByYW5kKHZvaWQpOw0KZXh0ZXJuIHZvaWQg
c3JhbmQodW5zaWduZWQgaW50KTsNCg0KDQpleHRlcm4gaW50IHJhbmRfcih1
bnNpZ25lZCBpbnQgKik7DQoNCg0KZXh0ZXJuIHZvaWQgKmNhbGxvYyhzaXpl
X3QsIHNpemVfdCk7DQpleHRlcm4gdm9pZCBmcmVlKHZvaWQgKik7DQpleHRl
cm4gdm9pZCAqbWFsbG9jKHNpemVfdCk7DQpleHRlcm4gdm9pZCAqcmVhbGxv
Yyh2b2lkICosIHNpemVfdCk7DQoNCmV4dGVybiB2b2lkIGFib3J0KHZvaWQp
Ow0KZXh0ZXJuIGludCBhdGV4aXQodm9pZCAoKikodm9pZCkpOw0KZXh0ZXJu
IHZvaWQgZXhpdChpbnQpOw0KZXh0ZXJuIHZvaWQgX2V4aXRoYW5kbGUodm9p
ZCk7DQpleHRlcm4gY2hhciAqZ2V0ZW52KGNvbnN0IGNoYXIgKik7DQpleHRl
cm4gaW50IHN5c3RlbShjb25zdCBjaGFyICopOw0KDQpleHRlcm4gdm9pZCAq
YnNlYXJjaChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBz
aXplX3QsDQogICAgICAgIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2
b2lkICopKTsNCmV4dGVybiB2b2lkIHFzb3J0KHZvaWQgKiwgc2l6ZV90LCBz
aXplX3QsDQogICAgICAgIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2
b2lkICopKTsNCg0KZXh0ZXJuIGludCBhYnMoaW50KTsNCmV4dGVybiBkaXZf
dCBkaXYoaW50LCBpbnQpOw0KZXh0ZXJuIGxvbmcgaW50IGxhYnMobG9uZyk7
DQpleHRlcm4gbGRpdl90IGxkaXYobG9uZywgbG9uZyk7DQoNCmV4dGVybiBp
bnQgbWJ0b3djKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0K
ZXh0ZXJuIGludCBtYmxlbihjb25zdCBjaGFyICosIHNpemVfdCk7DQpleHRl
cm4gaW50IHdjdG9tYihjaGFyICosIHdjaGFyX3QpOw0KDQpleHRlcm4gc2l6
ZV90IG1ic3Rvd2NzKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3Qp
Ow0KZXh0ZXJuIHNpemVfdCB3Y3N0b21icyhjaGFyICosIGNvbnN0IHdjaGFy
X3QgKiwgc2l6ZV90KTsNCg0KDQoNCg0KZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4
KHZvaWQpOw0KZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4KHVuc2lnbmVkIHNob3J0
ICopOw0KZXh0ZXJuIGxvbmcganJhbmQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsN
CmV4dGVybiB2b2lkIGxjb25nNDgodW5zaWduZWQgc2hvcnQgKik7DQpleHRl
cm4gbG9uZyBscmFuZDQ4KHZvaWQpOw0KZXh0ZXJuIGxvbmcgbXJhbmQ0OCh2
b2lkKTsNCmV4dGVybiBsb25nIG5yYW5kNDgodW5zaWduZWQgc2hvcnQgKik7
DQpleHRlcm4gdW5zaWduZWQgc2hvcnQgKnNlZWQ0OCh1bnNpZ25lZCBzaG9y
dCAqKTsNCmV4dGVybiB2b2lkIHNyYW5kNDgobG9uZyk7DQpleHRlcm4gaW50
IHB1dGVudihjaGFyICopOw0KZXh0ZXJuIHZvaWQgc2V0a2V5KGNvbnN0IGNo
YXIgKik7DQojIDIxOSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL3N0ZGxpYi5oIiAz
IDQNCmV4dGVybiBpbnQgbWtzdGVtcChjaGFyICopOw0KDQoNCmV4dGVybiBp
bnQgbWtzdGVtcDY0KGNoYXIgKik7DQoNCg0KDQoNCg0KDQpleHRlcm4gbG9u
ZyBhNjRsKGNvbnN0IGNoYXIgKik7DQpleHRlcm4gY2hhciAqZWN2dChkb3Vi
bGUsIGludCwgaW50ICosIGludCAqKTsNCmV4dGVybiBjaGFyICpmY3Z0KGRv
dWJsZSwgaW50LCBpbnQgKiwgaW50ICopOw0KZXh0ZXJuIGNoYXIgKmdjdnQo
ZG91YmxlLCBpbnQsIGNoYXIgKik7DQpleHRlcm4gaW50IGdldHN1Ym9wdChj
aGFyICoqLCBjaGFyICpjb25zdCAqLCBjaGFyICoqKTsNCmV4dGVybiBpbnQg
Z3JhbnRwdChpbnQpOw0KZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSh1bnNpZ25l
ZCwgY2hhciAqLCBzaXplX3QpOw0KZXh0ZXJuIGNoYXIgKmw2NGEobG9uZyk7
DQpleHRlcm4gY2hhciAqbWt0ZW1wKGNoYXIgKik7DQpleHRlcm4gY2hhciAq
cHRzbmFtZShpbnQpOw0KZXh0ZXJuIGxvbmcgcmFuZG9tKHZvaWQpOw0KZXh0
ZXJuIGNoYXIgKnJlYWxwYXRoKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsNCmV4
dGVybiBjaGFyICpzZXRzdGF0ZShjb25zdCBjaGFyICopOw0KZXh0ZXJuIHZv
aWQgc3JhbmRvbSh1bnNpZ25lZCk7DQpleHRlcm4gaW50IHR0eXNsb3Qodm9p
ZCk7DQpleHRlcm4gaW50IHVubG9ja3B0KGludCk7DQpleHRlcm4gdm9pZCAq
dmFsbG9jKHNpemVfdCk7DQoNCg0KDQoNCmV4dGVybiBpbnQgZHVwMihpbnQs
IGludCk7DQpleHRlcm4gY2hhciAqcWVjdnQobG9uZyBkb3VibGUsIGludCwg
aW50ICosIGludCAqKTsNCmV4dGVybiBjaGFyICpxZmN2dChsb25nIGRvdWJs
ZSwgaW50LCBpbnQgKiwgaW50ICopOw0KZXh0ZXJuIGNoYXIgKnFnY3Z0KGxv
bmcgZG91YmxlLCBpbnQsIGNoYXIgKik7DQpleHRlcm4gY2hhciAqZ2V0Y3dk
KGNoYXIgKiwgc2l6ZV90KTsNCmV4dGVybiBjb25zdCBjaGFyICpnZXRleGVj
bmFtZSh2b2lkKTsNCmV4dGVybiBjaGFyICpnZXRsb2dpbih2b2lkKTsNCmV4
dGVybiBpbnQgZ2V0b3B0KGludCwgY2hhciAqY29uc3QgKiwgY29uc3QgY2hh
ciAqKTsNCmV4dGVybiBjaGFyICpvcHRhcmc7DQpleHRlcm4gaW50IG9wdGlu
ZCwgb3B0ZXJyLCBvcHRvcHQ7DQpleHRlcm4gY2hhciAqZ2V0cGFzcyhjb25z
dCBjaGFyICopOw0KZXh0ZXJuIGNoYXIgKmdldHBhc3NwaHJhc2UoY29uc3Qg
Y2hhciAqKTsNCmV4dGVybiBpbnQgZ2V0cHcodWlkX3QsIGNoYXIgKik7DQpl
eHRlcm4gaW50IGlzYXR0eShpbnQpOw0KZXh0ZXJuIHZvaWQgKm1lbWFsaWdu
KHNpemVfdCwgc2l6ZV90KTsNCmV4dGVybiBjaGFyICp0dHluYW1lKGludCk7
DQoNCg0KZXh0ZXJuIGxvbmcgbG9uZyBhdG9sbChjb25zdCBjaGFyICopOw0K
ZXh0ZXJuIGxvbmcgbG9uZyBsbGFicyhsb25nIGxvbmcpOw0KZXh0ZXJuIGxs
ZGl2X3QgbGxkaXYobG9uZyBsb25nLCBsb25nIGxvbmcpOw0KZXh0ZXJuIGNo
YXIgKmxsdG9zdHIobG9uZyBsb25nLCBjaGFyICopOw0KZXh0ZXJuIGxvbmcg
bG9uZyBzdHJ0b2xsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsNCmV4
dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgc3RydG91bGwoY29uc3QgY2hhciAq
LCBjaGFyICoqLCBpbnQpOw0KZXh0ZXJuIGNoYXIgKnVsbHRvc3RyKHVuc2ln
bmVkIGxvbmcgbG9uZywgY2hhciAqKTsNCiMgNDEyICIvaG9tZS9tZGVpbC9i
aW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2lu
Y2x1ZGUvc3RkbGliLmgiIDMgNA0KfQ0KIyA0MiAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzDQoj
IDczICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfY3N0ZGxpYi5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6
ZGl2X3Q7DQogIHVzaW5nIDo6bGRpdl90Ow0KDQogIHVzaW5nIDo6YWJvcnQ7
DQogIHVzaW5nIDo6YWJzOw0KICB1c2luZyA6OmF0ZXhpdDsNCiAgdXNpbmcg
OjphdG9mOw0KICB1c2luZyA6OmF0b2k7DQogIHVzaW5nIDo6YXRvbDsNCiAg
dXNpbmcgOjpic2VhcmNoOw0KICB1c2luZyA6OmNhbGxvYzsNCiAgdXNpbmcg
OjpkaXY7DQogIHVzaW5nIDo6ZXhpdDsNCiAgdXNpbmcgOjpmcmVlOw0KICB1
c2luZyA6OmdldGVudjsNCiAgdXNpbmcgOjpsYWJzOw0KICB1c2luZyA6Omxk
aXY7DQogIHVzaW5nIDo6bWFsbG9jOw0KICB1c2luZyA6Om1ibGVuOw0KICB1
c2luZyA6Om1ic3Rvd2NzOw0KICB1c2luZyA6Om1idG93YzsNCiAgdXNpbmcg
Ojpxc29ydDsNCiAgdXNpbmcgOjpyYW5kOw0KICB1c2luZyA6OnJlYWxsb2M7
DQogIHVzaW5nIDo6c3JhbmQ7DQogIHVzaW5nIDo6c3RydG9kOw0KICB1c2lu
ZyA6OnN0cnRvbDsNCiAgdXNpbmcgOjpzdHJ0b3VsOw0KICB1c2luZyA6OnN5
c3RlbTsNCiAgdXNpbmcgOjp3Y3N0b21iczsNCiAgdXNpbmcgOjp3Y3RvbWI7
DQoNCiAgaW5saW5lIGxvbmcNCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBs
YWJzKF9faSk7IH0NCg0KICBpbmxpbmUgbGRpdl90DQogIGRpdihsb25nIF9f
aSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2opOyB9DQp9DQoj
IDQ1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfYWxnb2Jhc2UuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMw0KIyA0NiAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs
Z29iYXNlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvbmV3IiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9uZXciIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDEgMw0KIyAzNSAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL25ldyIgMiAzDQojIDEgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEgMw0K
IyAzNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL25ldyIg
MiAzDQoNCmV4dGVybiAiQysrIiB7DQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAg
Y2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbg0KICB7DQogIHB1
YmxpYzoNCiAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQ0KICAgIHZpcnR1
YWwgfmJhZF9hbGxvYygpIHRocm93KCk7DQogIH07DQoNCiAgc3RydWN0IG5v
dGhyb3dfdCB7IH07DQogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJv
dzsNCiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7DQogIG5ld19o
YW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcik7DQp9DQoNCg0K
dm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpi
YWRfYWxsb2MpOw0Kdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qp
IHRocm93IChzdGQ6OmJhZF9hbGxvYyk7DQp2b2lkIG9wZXJhdG9yIGRlbGV0
ZSh2b2lkICopIHRocm93KCk7DQp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZv
aWQgKikgdGhyb3coKTsNCnZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVf
dCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOw0Kdm9pZCAqb3Bl
cmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190
JikgdGhyb3coKTsNCnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKiwgY29u
c3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOw0Kdm9pZCBvcGVyYXRvciBk
ZWxldGVbXSh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3co
KTsNCg0KDQppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90
LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQ0KaW5s
aW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkICpw
bGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQ0KfQ0KIyA0NyAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDIgMw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzDQojIDQ5ICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMw0KIyA1MCAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs
Z29iYXNlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMN
CiMgNTEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMw0KIyA1
MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMw0KIyA1MyAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs
Z29iYXNlLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVy
MiwgY2xhc3MgX1RwPg0KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0Zvcndh
cmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBfVHAqKQ0Kew0KICBf
VHAgX190bXAgPSAqX19hOw0KICAqX19hID0gKl9fYjsNCiAgKl9fYiA9IF9f
dG1wOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xh
c3MgX0ZvcndhcmRJdGVyMj4NCmlubGluZSB2b2lkIGl0ZXJfc3dhcChfRm9y
d2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpDQp7DQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7DQoNCg0KDQogIF9faXRlcl9zd2FwKF9fYSwgX19i
LCBfX3ZhbHVlX3R5cGUoX19hKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf
VHA+DQppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikNCnsN
Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KDQogIF9UcCBfX3RtcCA9IF9fYTsNCiAgX19h
ID0gX19iOw0KICBfX2IgPSBfX3RtcDsNCn0NCg0KDQoNCg0KDQoNCg0KdGVt
cGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBjb25zdCBfVHAmIG1pbihjb25z
dCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpIHsNCg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7DQoNCiAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJu
IF9fYTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBjb25z
dCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpIHsN
Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgaWYgKF9fYSA8IF9fYikgcmV0
dXJuIF9fYjsgcmV0dXJuIF9fYTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29u
c3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXAp
IHsNCg0KICBpZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0
dXJuIF9fYTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Nv
bXBhcmU+DQppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2Es
IGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsNCg0KICBpZiAo
X19jb21wKF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsNCn0N
CiMgMTM3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxnb2Jhc2UuaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxp
bmUgX091dHB1dEl0ZXIgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcsIF9EaXN0YW5jZSopDQp7DQogIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkN
CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsNCiAgcmV0dXJuIF9fcmVzdWx0
Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgX091
dHB1dEl0ZXINCl9fY29weShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBfRGlzdGFu
Y2UqKQ0Kew0KICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2Zp
cnN0OyBfX24gPiAwOyAtLV9fbikgew0KICAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0Ow0KICAgICsrX19maXJzdDsNCiAgICArK19fcmVzdWx0Ow0KICB9DQog
IHJldHVybiBfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4N
CmlubGluZSBfVHAqDQpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmly
c3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQ0Kew0KICBt
ZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIChfX2xh
c3QgLSBfX2ZpcnN0KSk7DQogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3Qg
LSBfX2ZpcnN0KTsNCn0NCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX091dHB1dEl0ZXI+DQppbmxpbmUgX091dHB1dEl0ZXIgX19j
b3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQ0Kew0KICByZXR1cm4gX19jb3B5
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsDQogICAgICAgICAgICAgICAg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwNCiAgICAgICAgICAgICAg
ICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+DQppbmxpbmUg
X091dHB1dEl0ZXIgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpDQp7DQog
IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwNCiAg
ICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLA0K
ICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9
DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHA+DQppbmxpbmUgX1RwKiBfX2NvcHlf
YXV4MihfVHAqIF9fZmlyc3QsIF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0
LA0KICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpDQp7DQog
IHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBfVHAq
IF9fY29weV9hdXgyKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBf
X2xhc3QsIF9UcCogX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAg
ICBfX3RydWVfdHlwZSkNCnsNCiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOw0KfQ0KDQoNCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1Rw
Pg0KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9hdXgoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVHAqKQ0Kew0K
ICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcg0KICAgICAgICAgIF9Ucml2aWFs
Ow0KICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCwgX1RyaXZpYWwoKSk7DQp9DQoNCnRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPg0KaW5saW5lIF9PdXRw
dXRJdGVyIF9fY29weV9uaTIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpDQp7DQogIHJldHVy
biBfT3V0cHV0SXRlcihfX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19y
ZXN1bHQuYmFzZSgpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpKTsNCn0NCg0KdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQppbmxp
bmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkNCnsN
CiAgcmV0dXJuIF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQppbmxp
bmUgX091dHB1dEl0ZXIgX19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkNCnsN
CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRw
dXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsNCiAgcmV0dXJuIF9fY29weV9u
aTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBf
X05vcm1hbCgpKTsNCn0NCg0KdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+DQppbmxpbmUgX091dHB1dEl0ZXIg
X19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpDQp7DQogIHR5cGVkZWYgdHlw
ZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3Jt
YWwgX19Ob3JtYWw7DQogIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QsIF9f
bGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+DQppbmxpbmUg
X091dHB1dEl0ZXIgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KDQoNCiAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1h
bF9pdGVyYXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsNCiAg
IHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQs
IF9fTm9ybWFsKCkpOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwN
CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgX0JpZGlyZWN0
aW9uYWxJdGVyMiBfX2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVy
MSBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlcjIgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlKikNCnsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
KQ0KICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0Ow0KICByZXR1cm4gX19y
ZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+
DQppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9iYWNrd2FyZChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UqKQ0Kew0KICBmb3IgKF9EaXN0YW5jZSBf
X24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikNCiAgICAq
LS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0K
fQ0KDQoNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u
YWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwNCiAgICAgICAg
ICBjbGFzcyBfQm9vbFR5cGU+DQpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rp
c3BhdGNoDQp7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9CaWRpcmVjdGlvbmFsSXRlcjE+OjppdGVyYXRvcl9jYXRlZ29yeQ0KICAg
ICAgICAgIF9DYXQ7DQogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUNCiAg
ICAgICAgICBfRGlzdGFuY2U7DQoNCiAgc3RhdGljIF9CaWRpcmVjdGlvbmFs
SXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyMSBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkgew0KICAgIHJldHVy
biBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg
X0NhdCgpLCAoX0Rpc3RhbmNlKikgMCk7DQogIH0NCn07DQoNCnRlbXBsYXRl
IDxjbGFzcyBfVHA+DQpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNo
PF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPg0Kew0KICBzdGF0aWMgX1RwKiBj
b3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9U
cCogX19yZXN1bHQpIHsNCiAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9f
bGFzdCAtIF9fZmlyc3Q7DQogICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0s
IF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7DQogICAgcmV0dXJuIF9f
cmVzdWx0IC0gX051bTsNCiAgfQ0KfTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9U
cD4NCnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1Rw
KiwgX1RwKiwgX190cnVlX3R5cGU+DQp7DQogIHN0YXRpYyBfVHAqIGNvcHko
Y29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBf
X3Jlc3VsdCkgew0KICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0
Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+DQogICAgICA6OmNvcHkoX19m
aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQogIH0NCn07DQoNCnRlbXBsYXRl
IDxjbGFzcyBfQkkxLCBjbGFzcyBfQkkyPg0KaW5saW5lIF9CSTIgX19jb3B5
X2JhY2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkky
IF9fcmVzdWx0KSB7DQogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0
czx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+
DQogICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3INCiAgICAgICAgICBfVHJpdmlhbDsNCiAgcmV0dXJu
IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBfQkkyLCBfVHJpdmlh
bD4NCiAgICAgICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y
ZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5h
bWUgX0JJMj4NCmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9vdXRwdXRf
bm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgew0KICByZXR1cm4g
X0JJMihfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19y
ZXN1bHQuYmFzZSgpKSk7DQp9DQoNCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkx
LCB0eXBlbmFtZSBfQkkyPg0KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJk
X291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9f
bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSl7DQog
IHJldHVybiBfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwg
X19yZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlw
ZW5hbWUgX0JJMj4NCmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9pbnB1
dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpIHsNCiAgdHlwZWRl
ZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFs
IF9fTm9ybWFsOw0KICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9u
b3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCks
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7DQp9DQoNCnRlbXBsYXRlIDx0
eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPg0KaW5saW5lIF9CSTIgX19j
b3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmly
c3QsIF9CSTEgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNl
X3R5cGUpIHsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJh
dG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOw0KICByZXR1cm4gX19jb3B5
X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOw0KfQ0KDQp0ZW1wbGF0
ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4NCmlubGluZSBfQkky
IGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJ
MiBfX3Jlc3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0K
ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46
Ol9Ob3JtYWwgX19Ob3JtYWw7DQogIHJldHVybiBfX2NvcHlfYmFja3dhcmRf
aW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fTm9ybWFsKCkpOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVy
Pg0KcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lu
cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnB1dF9pdGVyYXRvcl90YWcpIHsNCiAgZm9yICggOyBfX2NvdW50ID4gMDsg
LS1fX2NvdW50KSB7DQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7DQogICAg
KytfX2ZpcnN0Ow0KICAgICsrX19yZXN1bHQ7DQogIH0NCiAgcmV0dXJuIHBh
aXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+KF9fZmlyc3QsIF9fcmVzdWx0
KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNzIF9TaXpl
LCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlubGluZSBwYWlyPF9SQUl0ZXIsIF9P
dXRwdXRJdGVyPg0KX19jb3B5X24oX1JBSXRlciBfX2ZpcnN0LCBfU2l6ZSBf
X2NvdW50LA0KICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAg
ICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgew0KICBfUkFJdGVy
IF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50Ow0KICByZXR1cm4gcGFpcjxf
UkFJdGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBjb3B5KF9fZmlyc3QsIF9f
bGFzdCwgX19yZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlubGlu
ZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPg0KX19jb3B5X24oX0lu
cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBf
X3Jlc3VsdCkgew0KICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3Vu
dCwgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2Nh
dGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4NCmlubGlu
ZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPg0KY29weV9uKF9JbnB1
dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19y
ZXN1bHQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KDQoNCiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQs
IF9fcmVzdWx0KTsNCn0NCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyLCBjbGFzcyBfVHA+DQp2b2lkIGZpbGwoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192
YWx1ZSkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
Cg0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQog
ICAgKl9fZmlyc3QgPSBfX3ZhbHVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X091dHB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+DQpfT3V0cHV0
SXRlciBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBj
b25zdCBfVHAmIF9fdmFsdWUpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7DQoNCiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0
KQ0KICAgICpfX2ZpcnN0ID0gX192YWx1ZTsNCiAgcmV0dXJuIF9fZmlyc3Q7
DQp9DQoNCg0KDQppbmxpbmUgdm9pZCBmaWxsKHVuc2lnbmVkIGNoYXIqIF9f
Zmlyc3QsIHVuc2lnbmVkIGNoYXIqIF9fbGFzdCwNCiAgICAgICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQ0Kew0KICB1bnNpZ25lZCBj
aGFyIF9fdG1wID0gX19jOw0KICBtZW1zZXQoX19maXJzdCwgX190bXAsIF9f
bGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQppbmxpbmUgdm9pZCBmaWxsKHNpZ25l
ZCBjaGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciogX19sYXN0LA0KICAgICAg
ICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciYgX19jKQ0Kew0KICBzaWdu
ZWQgY2hhciBfX3RtcCA9IF9fYzsNCiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJz
dCk7DQp9DQoNCmlubGluZSB2b2lkIGZpbGwoY2hhciogX19maXJzdCwgY2hh
ciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpDQp7DQogIGNoYXIgX190bXAg
PSBfX2M7DQogIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX1NpemU+DQppbmxpbmUgdW5zaWduZWQgY2hhciogZmls
bF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciYg
X19jKQ0Kew0KICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7
DQogIHJldHVybiBfX2ZpcnN0ICsgX19uOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX1NpemU+DQppbmxpbmUgc2lnbmVkIGNoYXIqIGZpbGxfbihjaGFyKiBf
X2ZpcnN0LCBfU2l6ZSBfX24sDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzaWduZWQgY2hhciYgX19jKQ0Kew0KICBmaWxsKF9fZmlyc3Qs
IF9fZmlyc3QgKyBfX24sIF9fYyk7DQogIHJldHVybiBfX2ZpcnN0ICsgX19u
Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+DQppbmxpbmUgY2hhciog
ZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYg
X19jKQ0Kew0KICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7
DQogIHJldHVybiBfX2ZpcnN0ICsgX19uOw0KfQ0KDQoNCg0KDQoNCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+DQpw
YWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0
SXRlcjEgX19maXJzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MikNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsNCg0KDQogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2Zp
cnN0MSA9PSAqX19maXJzdDIpIHsNCiAgICArK19fZmlyc3QxOw0KICAgICsr
X19maXJzdDI7DQogIH0NCiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9J
bnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOw0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFz
cyBfQmluYXJ5UHJlZGljYXRlPg0KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0
SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Jp
bmFyeV9wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KDQogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7
DQogICAgKytfX2ZpcnN0MTsNCiAgICArK19fZmlyc3QyOw0KICB9DQogIHJl
dHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEs
IF9fZmlyc3QyKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx
LCBjbGFzcyBfSW5wdXRJdGVyMj4NCmlubGluZSBib29sIGVxdWFsKF9JbnB1
dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpDQp7DQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsNCg0KDQoNCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xh
c3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQ0KICAgIGlmICghKCpfX2Zp
cnN0MSA9PSAqX19maXJzdDIpKQ0KICAgICAgcmV0dXJuIGZhbHNlOw0KICBy
ZXR1cm4gdHJ1ZTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx
LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4N
CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w
dXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
cjIgX19maXJzdDIsIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkN
CnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsNCg0KICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19m
aXJzdDEsICsrX19maXJzdDIpDQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpf
X2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAgICAgIHJldHVybiBmYWxzZTsNCiAg
cmV0dXJuIHRydWU7DQp9DQoNCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4NCmJvb2wgbGV4aWNvZ3Jh
cGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0
ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQ0Kew0K
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAg
Zm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDINCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7DQog
ICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikNCiAgICAgIHJldHVybiB0
cnVlOw0KICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpDQogICAgICBy
ZXR1cm4gZmFsc2U7DQogIH0NCiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsNCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0Nv
bXBhcmU+DQpib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogIGZvciAoIDsgX19maXJz
dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyDQogICAgICAg
IDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0Mikgew0KICAgIGlmIChfX2NvbXAo
Kl9fZmlyc3QxLCAqX19maXJzdDIpKQ0KICAgICAgcmV0dXJuIHRydWU7DQog
ICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpDQogICAgICBy
ZXR1cm4gZmFsc2U7DQogIH0NCiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsNCn0NCg0KaW5saW5lIGJvb2wN
CmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIq
IF9fZmlyc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z
aWduZWQgY2hhciogX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikNCnsN
CiAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsN
CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsN
CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2Zp
cnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7DQogIHJldHVybiBfX3Jlc3Vs
dCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOw0KfQ0K
DQppbmxpbmUgYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCBj
aGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmly
c3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQ0Kew0KDQogIHJldHVybiBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2Zp
cnN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z
dCBzaWduZWQgY2hhciopIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWdu
ZWQgY2hhciopIF9fbGFzdDIpOw0KDQoNCg0KDQoNCg0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPg0KaW50
IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIpDQp7DQogIHdoaWxlIChfX2ZpcnN0MSAhPSBf
X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsNCiAgICBpZiAoKl9f
Zmlyc3QxIDwgKl9fZmlyc3QyKQ0KICAgICAgcmV0dXJuIC0xOw0KICAgIGlm
ICgqX19maXJzdDIgPCAqX19maXJzdDEpDQogICAgICByZXR1cm4gMTsNCiAg
ICArK19fZmlyc3QxOw0KICAgICsrX19maXJzdDI7DQogIH0NCiAgaWYgKF9f
Zmlyc3QyID09IF9fbGFzdDIpIHsNCiAgICByZXR1cm4gIShfX2ZpcnN0MSA9
PSBfX2xhc3QxKTsNCiAgfQ0KICBlbHNlIHsNCiAgICByZXR1cm4gLTE7DQog
IH0NCn0NCg0KaW5saW5lIGludA0KX19sZXhpY29ncmFwaGljYWxfY29tcGFy
ZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikN
CnsNCiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2Zp
cnN0MTsNCiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBf
X2ZpcnN0MjsNCiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmly
c3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7DQogIHJldHVy
biBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQNCiAgICAgICAgICAgICAgICAg
ICAgICAgOiAoX19sZW4xID09IF9fbGVuMiA/IDAgOiAoX19sZW4xIDwgX19s
ZW4yID8gLTEgOiAxKSk7DQp9DQoNCmlubGluZSBpbnQNCl9fbGV4aWNvZ3Jh
cGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29u
c3QgY2hhciogX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0
MikNCnsNCg0KICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8z
d2F5KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qg
c2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBj
aGFyKikgX19maXJzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOw0KDQoNCg0KDQoN
Cg0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J
bnB1dEl0ZXIyPg0KaW50IGxleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXko
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf
X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikNCnsNCg0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIHJldHVybiBfX2xl
eGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEsIF9fbGFzdDEs
IF9fZmlyc3QyLCBfX2xhc3QyKTsNCn0NCg0KfQ0KIyAyMSAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAy
IDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2FsbG9jLmgiIDEgMw0KIyAyOCAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMNCiMgMSAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNl
cHQuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzDQojIDEgIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAx
IDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoN
CiAgdm9pZA0KICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7DQoNCg0K
ICB2b2lkDQogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOw0KDQoNCiAgdm9p
ZA0KICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOw0KDQogIHZvaWQNCiAgX190
aHJvd19iYWRfdHlwZWlkKHZvaWQpOw0KDQoNCiAgdm9pZA0KICBfX3Rocm93
X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBf
X3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZv
aWQNCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9f
cyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBj
aGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo
Y29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfcnVudGlt
ZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJv
d19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAg
X190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQog
IHZvaWQNCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciog
X19zKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25z
dCBjaGFyKiBfX3MpOw0KfQ0KIyAyOSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMw0KIyAxICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRl
Zi5oIiAxIDMNCiMgMzAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMSAz
DQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxsb2MuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMw0KIyAzMiAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs
bG9jLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAxIDMNCiMgMzcgIi9ob21lL21k
ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jYXNzZXJ0Lmgi
IDMNCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMgNA0KIyAxMSAi
L3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAo
Iylhc3NlcnQuaAkxLjkJOTIvMDcvMTQgU01JIg0KDQoNCmV4dGVybiAiQyIg
ew0KDQoNCg0KZXh0ZXJuIHZvaWQgX19hc3NlcnQoY29uc3QgY2hhciAqLCBj
b25zdCBjaGFyICosIGludCk7DQoNCg0KDQoNCg0KfQ0KIyAzOCAiL2hvbWUv
bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQu
aCIgMiAzDQojIDMzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfYWxsb2MuaCIgMiAzDQoNCg0KDQoNCg0KIyAxICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFk
cy5oIiAxIDMNCiMgMzMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2Jp
dHMvZ3Roci5oIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDIgMw0KIyA1MSAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVh
ZHMuaCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KIyA2NiAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMw0K
c3RydWN0IF9SZWZjb3VudF9CYXNlDQp7DQoNCg0KDQoNCiAgdHlwZWRlZiBz
aXplX3QgX1JDX3Q7DQoNCg0KDQogICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZf
Y291bnQ7DQoNCg0KDQoNCiAgX19ndGhyZWFkX211dGV4X3QgX01fcmVmX2Nv
dW50X2xvY2s7DQogIF9SZWZjb3VudF9CYXNlKF9SQ190IF9fbikgOiBfTV9y
ZWZfY291bnQoX19uKQ0KICAgIHsNCg0KICAgICAgX19ndGhyZWFkX211dGV4
X3QgX190bXAgPSB7e3swfSwgMH0sIHt7ezB9fX0sIHswfX07DQogICAgICBf
TV9yZWZfY291bnRfbG9jayA9IF9fdG1wOw0KDQoNCg0KDQoNCiAgICB9DQoj
IDExMiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX3RocmVhZHMuaCIgMw0KICB2b2lkIF9NX2luY3IoKSB7DQogICAgX19n
dGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsNCiAgICAr
K19NX3JlZl9jb3VudDsNCiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZf
TV9yZWZfY291bnRfbG9jayk7DQogIH0NCiAgX1JDX3QgX01fZGVjcigpIHsN
CiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2sp
Ow0KICAgIHZvbGF0aWxlIF9SQ190IF9fdG1wID0gLS1fTV9yZWZfY291bnQ7
DQogICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xv
Y2spOw0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KIyAxNjMgIi9ob21lL21k
ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgi
IDMNCn07DQojIDI4NCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMw0KdGVtcGxhdGUgPGludCBfX2lu
c3Q+DQpzdHJ1Y3QgX1NUTF9tdXRleF9zcGluIHsNCiAgZW51bSB7IF9fbG93
X21heCA9IDMwLCBfX2hpZ2hfbWF4ID0gMTAwMCB9Ow0KDQoNCiAgc3RhdGlj
IHVuc2lnbmVkIF9fbWF4Ow0KICBzdGF0aWMgdW5zaWduZWQgX19sYXN0Ow0K
fTsNCg0KdGVtcGxhdGUgPGludCBfX2luc3Q+DQp1bnNpZ25lZCBfU1RMX211
dGV4X3NwaW48X19pbnN0Pjo6X19tYXggPSBfU1RMX211dGV4X3NwaW48X19p
bnN0Pjo6X19sb3dfbWF4Ow0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCnVu
c2lnbmVkIF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX2xhc3QgPSAwOw0K
IyAzMTEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF90aHJlYWRzLmgiIDMNCnN0cnVjdCBfU1RMX211dGV4X2xvY2sNCnsN
Cg0KDQoNCg0KDQoNCg0KICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOw0K
ICB2b2lkIF9NX2luaXRpYWxpemUoKSB7DQojIDM0MiAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMw0K
ICB9DQogIHZvaWQgX01fYWNxdWlyZV9sb2NrKCkgew0KDQoNCg0KICAgIF9f
Z3RocmVhZF9tdXRleF9sb2NrKCZfTV9sb2NrKTsNCiAgfQ0KICB2b2lkIF9N
X3JlbGVhc2VfbG9jaygpIHsNCg0KDQoNCiAgICBfX2d0aHJlYWRfbXV0ZXhf
dW5sb2NrKCZfTV9sb2NrKTsNCiAgfQ0KIyA0NTMgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMNCn07
DQojIDQ5MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX3RocmVhZHMuaCIgMw0Kc3RydWN0IF9TVExfYXV0b19sb2NrDQp7
DQogIF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsNCg0KICBfU1RMX2F1dG9f
bG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9j
aykNCiAgICB7IF9NX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0NCiAgfl9T
VExfYXV0b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9
DQoNCnByaXZhdGU6DQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9TVExfYXV0
b19sb2NrJik7DQogIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19s
b2NrJik7DQp9Ow0KDQp9DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzDQojIDY4ICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2Mu
aCIgMw0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KdGVtcGxhdGUgPGludCBf
X2luc3Q+DQpjbGFzcyBfX21hbGxvY19hbGxvY190ZW1wbGF0ZSB7DQoNCnBy
aXZhdGU6DQoNCiAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90
KTsNCiAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXpl
X3QpOw0KICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFu
ZGxlcikoKTsNCg0KcHVibGljOg0KDQogIHN0YXRpYyB2b2lkKiBhbGxvY2F0
ZShzaXplX3QgX19uKQ0KICB7DQogICAgdm9pZCogX19yZXN1bHQgPSBtYWxs
b2MoX19uKTsNCiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBf
U19vb21fbWFsbG9jKF9fbik7DQogICAgcmV0dXJuIF9fcmVzdWx0Ow0KICB9
DQoNCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVf
dCApDQogIHsNCiAgICBmcmVlKF9fcCk7DQogIH0NCg0KICBzdGF0aWMgdm9p
ZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNpemVfdCBfX25l
d19zeikNCiAgew0KICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3As
IF9fbmV3X3N6KTsNCiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQg
PSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsNCiAgICByZXR1cm4g
X19yZXN1bHQ7DQogIH0NCg0KICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxs
b2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQ0KICB7DQogICAgdm9pZCAo
KiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOw0KICAg
IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOw0KICAgIHJldHVy
bihfX29sZCk7DQogIH0NCg0KfTsNCg0KDQoNCnRlbXBsYXRlIDxpbnQgX19p
bnN0Pg0Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7DQoNCnRlbXBs
YXRlIDxpbnQgX19pbnN0Pg0Kdm9pZCoNCl9fbWFsbG9jX2FsbG9jX3RlbXBs
YXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikNCnsNCiAg
ICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7DQogICAgdm9pZCog
X19yZXN1bHQ7DQoNCiAgICBmb3IgKDs7KSB7DQogICAgICAgIF9fbXlfbWFs
bG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsNCiAg
ICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBzdGQ6Ol9f
dGhyb3dfYmFkX2FsbG9jKCk7IH0NCiAgICAgICAgKCpfX215X21hbGxvY19o
YW5kbGVyKSgpOw0KICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOw0K
ICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7DQogICAg
fQ0KfQ0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCnZvaWQqIF9fbWFsbG9j
X2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQq
IF9fcCwgc2l6ZV90IF9fbikNCnsNCiAgICB2b2lkICgqIF9fbXlfbWFsbG9j
X2hhbmRsZXIpKCk7DQogICAgdm9pZCogX19yZXN1bHQ7DQoNCiAgICBmb3Ig
KDs7KSB7DQogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxv
Y19hbGxvY19vb21faGFuZGxlcjsNCiAgICAgICAgaWYgKDAgPT0gX19teV9t
YWxsb2NfaGFuZGxlcikgeyBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7IH0N
CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOw0KICAgICAgICBf
X3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX24pOw0KICAgICAgICBpZiAoX19y
ZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7DQogICAgfQ0KfQ0KDQp0eXBlZGVm
IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPDA+IG1hbGxvY19hbGxvYzsNCg0K
dGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpjbGFzcyBzaW1w
bGVfYWxsb2Mgew0KDQpwdWJsaWM6DQogICAgc3RhdGljIF9UcCogYWxsb2Nh
dGUoc2l6ZV90IF9fbikNCiAgICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6
IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZiAoX1RwKSk7
IH0NCiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZSh2b2lkKQ0KICAgICAgeyBy
ZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsg
fQ0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVf
dCBfX24pDQogICAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9j
YXRlKF9fcCwgX19uICogc2l6ZW9mIChfVHApKTsgfQ0KICAgIHN0YXRpYyB2
b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3ApDQogICAgICB7IF9BbGxvYzo6ZGVh
bGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0NCn07DQoNCg0KDQoNCg0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPg0KY2xhc3MgZGVidWdfYWxsb2Mg
ew0KDQpwcml2YXRlOg0KDQogIGVudW0ge19TX2V4dHJhID0gOH07DQoNCg0K
DQpwdWJsaWM6DQoNCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBf
X24pDQogIHsNCiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6
OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsNCiAgICAqKHNpemVf
dCopX19yZXN1bHQgPSBfX247DQogICAgcmV0dXJuIF9fcmVzdWx0ICsgKGlu
dCkgX1NfZXh0cmE7DQogIH0NCg0KICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRl
KHZvaWQqIF9fcCwgc2l6ZV90IF9fbikNCiAgew0KICAgIGNoYXIqIF9fcmVh
bF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOw0KICAgICh2b2lk
KSgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fbikgfHwgKF9fYXNzZXJ0KCIq
KHNpemVfdCopX19yZWFsX3AgPT0gX19uIiwgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiwgMTkwKSwgMCkp
Ow0KICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGlu
dCkgX1NfZXh0cmEpOw0KICB9DQoNCiAgc3RhdGljIHZvaWQqIHJlYWxsb2Nh
dGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19z
eikNCiAgew0KICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChp
bnQpIF9TX2V4dHJhOw0KICAgICh2b2lkKSgoKihzaXplX3QqKV9fcmVhbF9w
ID09IF9fb2xkX3N6KSB8fCAoX19hc3NlcnQoIiooc2l6ZV90KilfX3JlYWxf
cCA9PSBfX29sZF9zeiIsICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYWxsb2MuaCIsIDE5NyksIDApKTsNCiAgICBjaGFy
KiBfX3Jlc3VsdCA9IChjaGFyKikNCiAgICAgIF9BbGxvYzo6cmVhbGxvY2F0
ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50KSBfU19leHRyYSwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3ogKyAoaW50
KSBfU19leHRyYSk7DQogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uZXdf
c3o7DQogICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7DQog
IH0NCg0KfTsNCiMgMjQxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYWxsb2MuaCIgMw0KdGVtcGxhdGUgPGJvb2wgdGhy
ZWFkcywgaW50IGluc3Q+DQpjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGUgew0KDQpwcml2YXRlOg0KDQoNCiAgZW51bSB7X0FMSUdOID0gOH07DQog
IGVudW0ge19NQVhfQllURVMgPSAxMjh9Ow0KICBlbnVtIHtfTkZSRUVMSVNU
UyA9IDE2fTsNCiAgc3RhdGljIHNpemVfdA0KICBfU19yb3VuZF91cChzaXpl
X3QgX19ieXRlcykNCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXpl
X3QpIF9BTElHTi0xKSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9DQoN
CiAgdW5pb24gX09iaiB7DQogICAgICAgIHVuaW9uIF9PYmoqIF9NX2ZyZWVf
bGlzdF9saW5rOw0KICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOw0K
ICB9Ow0KDQogIHN0YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xpc3Rb
XTsNCg0KICBzdGF0aWMgc2l6ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVf
dCBfX2J5dGVzKSB7DQogICAgICAgIHJldHVybiAoKChfX2J5dGVzKSArIChz
aXplX3QpX0FMSUdOLTEpLyhzaXplX3QpX0FMSUdOIC0gMSk7DQogIH0NCg0K
DQogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7DQoNCg0K
ICBzdGF0aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwg
aW50JiBfX25vYmpzKTsNCg0KDQogIHN0YXRpYyBjaGFyKiBfU19zdGFydF9m
cmVlOw0KICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7DQogIHN0YXRpYyBz
aXplX3QgX1NfaGVhcF9zaXplOw0KDQoNCiAgICBzdGF0aWMgX1NUTF9tdXRl
eF9sb2NrIF9TX25vZGVfYWxsb2NhdG9yX2xvY2s7DQoNCg0KDQoNCg0KICAg
IGNsYXNzIF9Mb2NrOw0KICAgIGZyaWVuZCBjbGFzcyBfTG9jazsNCiAgICBj
bGFzcyBfTG9jayB7DQogICAgICAgIHB1YmxpYzoNCiAgICAgICAgICAgIF9M
b2NrKCkgeyB7IGlmICh0aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2Nr
Ll9NX2FjcXVpcmVfbG9jaygpOyB9OyB9DQogICAgICAgICAgICB+X0xvY2so
KSB7IHsgaWYgKHRocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01f
cmVsZWFzZV9sb2NrKCk7IH07IH0NCiAgICB9Ow0KDQpwdWJsaWM6DQoNCg0K
ICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikNCiAgew0KICAg
IHZvaWQqIF9fcmV0ID0gMDsNCg0KICAgIGlmIChfX24gPiAoc2l6ZV90KSBf
TUFYX0JZVEVTKSB7DQogICAgICBfX3JldCA9IG1hbGxvY19hbGxvYzo6YWxs
b2NhdGUoX19uKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICBfT2JqKiB2
b2xhdGlsZSogX19teV9mcmVlX2xpc3QNCiAgICAgICAgICA9IF9TX2ZyZWVf
bGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7DQoNCg0KDQoNCg0KICAg
ICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOw0KDQogICAgICBfT2JqKiBfX3Jl
c3VsdCA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAgIGlmIChfX3Jlc3VsdCA9
PSAwKQ0KICAgICAgICBfX3JldCA9IF9TX3JlZmlsbChfU19yb3VuZF91cChf
X24pKTsNCiAgICAgIGVsc2Ugew0KICAgICAgICAqX19teV9mcmVlX2xpc3Qg
PSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsNCiAgICAgICAgX19y
ZXQgPSBfX3Jlc3VsdDsNCiAgICAgIH0NCiAgICB9DQoNCiAgICByZXR1cm4g
X19yZXQ7DQogIH07DQoNCg0KICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZv
aWQqIF9fcCwgc2l6ZV90IF9fbikNCiAgew0KICAgIGlmIChfX24gPiAoc2l6
ZV90KSBfTUFYX0JZVEVTKQ0KICAgICAgbWFsbG9jX2FsbG9jOjpkZWFsbG9j
YXRlKF9fcCwgX19uKTsNCiAgICBlbHNlIHsNCiAgICAgIF9PYmoqIHZvbGF0
aWxlKiBfX215X2ZyZWVfbGlzdA0KICAgICAgICAgID0gX1NfZnJlZV9saXN0
ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsNCiAgICAgIF9PYmoqIF9fcSA9
IChfT2JqKilfX3A7DQoNCg0KDQoNCiAgICAgIF9Mb2NrIF9fbG9ja19pbnN0
YW5jZTsNCg0KICAgICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9f
bXlfZnJlZV9saXN0Ow0KICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOw0K
DQogICAgfQ0KICB9DQoNCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9p
ZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7DQoN
Cn0gOw0KDQp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0cnVl
LCAwPiBhbGxvYzsNCnR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOw0KDQp0ZW1wbGF0ZSA8
Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+DQppbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh
ZHMsIF9faW5zdD4mLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikN
CnsNCiAgcmV0dXJuIHRydWU7DQp9DQoNCnRlbXBsYXRlIDxib29sIF9fdGhy
ZWFkcywgaW50IF9faW5zdD4NCmlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0
PiYsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQ0Kew0KICByZXR1
cm4gZmFsc2U7DQp9DQoNCg0KDQoNCg0KDQoNCnRlbXBsYXRlIDxib29sIF9f
dGhyZWFkcywgaW50IF9faW5zdD4NCmNoYXIqDQpfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19jaHVua19hbGxvYyhz
aXplX3QgX19zaXplLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBfX25vYmpzKQ0K
ew0KICAgIGNoYXIqIF9fcmVzdWx0Ow0KICAgIHNpemVfdCBfX3RvdGFsX2J5
dGVzID0gX19zaXplICogX19ub2JqczsNCiAgICBzaXplX3QgX19ieXRlc19s
ZWZ0ID0gX1NfZW5kX2ZyZWUgLSBfU19zdGFydF9mcmVlOw0KDQogICAgaWYg
KF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKSB7DQogICAgICAgIF9f
cmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsNCiAgICAgICAgX1Nfc3RhcnRfZnJl
ZSArPSBfX3RvdGFsX2J5dGVzOw0KICAgICAgICByZXR1cm4oX19yZXN1bHQp
Ow0KICAgIH0gZWxzZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkgew0K
ICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7
DQogICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOw0K
ICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7DQogICAgICAgIF9T
X3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsNCiAgICAgICAgcmV0dXJu
KF9fcmVzdWx0KTsNCiAgICB9IGVsc2Ugew0KICAgICAgICBzaXplX3QgX19i
eXRlc190b19nZXQgPQ0KICAgICAgICAgIDIgKiBfX3RvdGFsX2J5dGVzICsg
X1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOw0KDQogICAgICAgIGlm
IChfX2J5dGVzX2xlZnQgPiAwKSB7DQogICAgICAgICAgICBfT2JqKiB2b2xh
dGlsZSogX19teV9mcmVlX2xpc3QgPQ0KICAgICAgICAgICAgICAgICAgICAg
ICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19s
ZWZ0KTsNCg0KICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAt
PiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsNCiAgICAg
ICAgICAgICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVl
Ow0KICAgICAgICB9DQogICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciop
bWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsNCiAgICAgICAgaWYgKDAgPT0gX1Nf
c3RhcnRfZnJlZSkgew0KICAgICAgICAgICAgc2l6ZV90IF9faTsNCiAgICAg
ICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsNCiAgICAg
ICAgICAgIF9PYmoqIF9fcDsNCg0KDQoNCiAgICAgICAgICAgIGZvciAoX19p
ID0gX19zaXplOw0KICAgICAgICAgICAgICAgICBfX2kgPD0gKHNpemVfdCkg
X01BWF9CWVRFUzsNCiAgICAgICAgICAgICAgICAgX19pICs9IChzaXplX3Qp
IF9BTElHTikgew0KICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0g
X1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsNCiAgICAg
ICAgICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7DQogICAgICAgICAg
ICAgICAgaWYgKDAgIT0gX19wKSB7DQogICAgICAgICAgICAgICAgICAgICpf
X215X2ZyZWVfbGlzdCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGluazsNCiAg
ICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7
DQogICAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRf
ZnJlZSArIF9faTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuKF9TX2No
dW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOw0KDQoNCiAgICAgICAgICAg
ICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBfU19lbmRfZnJl
ZSA9IDA7DQogICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKW1h
bGxvY19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOw0KDQoNCg0K
ICAgICAgICB9DQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3Rv
X2dldDsNCiAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsg
X19ieXRlc190b19nZXQ7DQogICAgICAgIHJldHVybihfU19jaHVua19hbGxv
YyhfX3NpemUsIF9fbm9ianMpKTsNCiAgICB9DQp9DQoNCg0KDQoNCg0KdGVt
cGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0Kdm9pZCoNCl9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9T
X3JlZmlsbChzaXplX3QgX19uKQ0Kew0KICAgIGludCBfX25vYmpzID0gMjA7
DQogICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19u
b2Jqcyk7DQogICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0Ow0K
ICAgIF9PYmoqIF9fcmVzdWx0Ow0KICAgIF9PYmoqIF9fY3VycmVudF9vYmo7
DQogICAgX09iaiogX19uZXh0X29iajsNCiAgICBpbnQgX19pOw0KDQogICAg
aWYgKDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOw0KICAgIF9fbXlf
ZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgo
X19uKTsNCg0KDQogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOw0K
ICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2JqKiko
X19jaHVuayArIF9fbik7DQogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKysp
IHsNCiAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7DQogICAg
ICAgIF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsg
X19uKTsNCiAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgew0KICAg
ICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9
IDA7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgfSBlbHNlIHsNCiAg
ICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsg
PSBfX25leHRfb2JqOw0KICAgICAgICB9DQogICAgICB9DQogICAgcmV0dXJu
KF9fcmVzdWx0KTsNCn0NCg0KdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50
IGluc3Q+DQp2b2lkKg0KX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVh
ZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgX19vbGRfc3osDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6KQ0Kew0KICAg
IHZvaWQqIF9fcmVzdWx0Ow0KICAgIHNpemVfdCBfX2NvcHlfc3o7DQoNCiAg
ICBpZiAoX19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3
X3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUykgew0KICAgICAgICByZXR1cm4o
cmVhbGxvYyhfX3AsIF9fbmV3X3N6KSk7DQogICAgfQ0KICAgIGlmIChfU19y
b3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19uZXdfc3opKSBy
ZXR1cm4oX19wKTsNCiAgICBfX3Jlc3VsdCA9IGFsbG9jYXRlKF9fbmV3X3N6
KTsNCiAgICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29s
ZF9zeiA6IF9fbmV3X3N6Ow0KICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBf
X2NvcHlfc3opOw0KICAgIGRlYWxsb2NhdGUoX19wLCBfX29sZF9zeik7DQog
ICAgcmV0dXJuKF9fcmVzdWx0KTsNCn0NCg0KDQogICAgdGVtcGxhdGUgPGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KICAgIF9TVExfbXV0ZXhfbG9j
aw0KICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9f
aW5zdD46Ol9TX25vZGVfYWxsb2NhdG9yX2xvY2sNCiAgICAgICAgPSB7IHt7
ezB9LCAwfSwge3t7MH19fSwgezB9fSB9Ow0KDQoNCg0KdGVtcGxhdGUgPGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pg0KY2hhciogX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRfZnJl
ZSA9IDA7DQoNCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5z
dD4NCmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs
IF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsNCg0KdGVtcGxhdGUgPGJvb2wg
X190aHJlYWRzLCBpbnQgX19pbnN0Pg0Kc2l6ZV90IF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9
IDA7DQoNCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4N
CnR5cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs
IF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlDQpfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+IDo6X1NfZnJlZV9saXN0Ww0KICAg
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46
Ol9ORlJFRUxJU1RTDQpdID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIH07DQojIDUyNiAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMNCnRl
bXBsYXRlIDxjbGFzcyBfVHA+DQpjbGFzcyBhbGxvY2F0b3Igew0KICB0eXBl
ZGVmIGFsbG9jIF9BbGxvYzsNCnB1YmxpYzoNCiAgdHlwZWRlZiBzaXplX3Qg
c2l6ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5
cGU7DQogIHR5cGVkZWYgX1RwKiBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0
IF9UcCogY29uc3RfcG9pbnRlcjsNCiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5j
ZTsNCiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsNCiAg
dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwMT4gc3RydWN0IHJlYmluZCB7DQogICAgdHlwZWRlZiBhbGxvY2F0b3I8
X1RwMT4gb3RoZXI7DQogIH07DQoNCiAgYWxsb2NhdG9yKCkgdGhyb3coKSB7
fQ0KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQ0K
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9j
YXRvcjxfVHAxPiYpIHRocm93KCkge30NCiAgfmFsbG9jYXRvcigpIHRocm93
KCkge30NCg0KICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29u
c3QgeyByZXR1cm4gJl9feDsgfQ0KICBjb25zdF9wb2ludGVyIGFkZHJlc3Mo
Y29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQ0K
DQoNCg0KICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZv
aWQqID0gMCkgew0KICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRpY19jYXN0
PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQ0K
ICAgICAgICAgICAgICAgICAgICA6IDA7DQogIH0NCg0KDQogIHZvaWQgZGVh
bGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikNCiAgICB7IF9B
bGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQ0K
DQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkNCiAgICB7
IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0NCg0KICB2b2lk
IGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBu
ZXcoX19wKSBfVHAoX192YWwpOyB9DQogIHZvaWQgZGVzdHJveShwb2ludGVy
IF9fcCkgeyBfX3AtPn5fVHAoKTsgfQ0KfTsNCg0KdGVtcGxhdGU8Pg0KY2xh
c3MgYWxsb2NhdG9yPHZvaWQ+IHsNCnB1YmxpYzoNCiAgdHlwZWRlZiBzaXpl
X3Qgc2l6ZV90eXBlOw0KICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl
X3R5cGU7DQogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsNCiAgdHlwZWRlZiBj
b25zdCB2b2lkKiBjb25zdF9wb2ludGVyOw0KICB0eXBlZGVmIHZvaWQgdmFs
dWVfdHlwZTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJl
YmluZCB7DQogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7DQog
IH07DQp9Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4N
CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgYWxsb2NhdG9yPF9UMT4m
LCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpDQp7DQogIHJldHVybiB0cnVlOw0K
fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+DQppbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3Qg
YWxsb2NhdG9yPF9UMj4mKQ0Kew0KICByZXR1cm4gZmFsc2U7DQp9DQojIDYw
MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsbG9jLmgiIDMNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4NCnN0cnVjdCBfX2FsbG9jYXRvciB7DQogIF9BbGxvYyBfX3VuZGVybHlp
bmdfYWxsb2M7DQoNCiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOw0KICB0
eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7DQogIHR5cGVkZWYg
X1RwKiBwb2ludGVyOw0KICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9p
bnRlcjsNCiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsNCiAgdHlwZWRlZiBj
b25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsNCiAgdHlwZWRlZiBfVHAgdmFs
dWVfdHlwZTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJl
YmluZCB7DQogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+
IG90aGVyOw0KICB9Ow0KDQogIF9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQ0K
ICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygp
DQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19h
bGxvYykge30NCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+DQogIF9fYWxsb2Nh
dG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhy
b3coKQ0KICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlp
bmdfYWxsb2MpIHt9DQogIH5fX2FsbG9jYXRvcigpIHRocm93KCkge30NCg0K
ICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1
cm4gJl9feDsgfQ0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVm
ZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQ0KDQoNCiAgX1Rw
KiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsN
CiAgICByZXR1cm4gX19uICE9IDANCiAgICAgICAgPyBzdGF0aWNfY2FzdDxf
VHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9m
KF9UcCkpKQ0KICAgICAgICA6IDA7DQogIH0NCg0KDQogIHZvaWQgZGVhbGxv
Y2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikNCiAgICB7IF9fdW5k
ZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9U
cCkpOyB9DQoNCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3co
KQ0KICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQ0K
DQogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9f
dmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0NCiAgdm9pZCBkZXN0cm95
KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9DQp9Ow0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0FsbG9jPg0KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwgX0Fs
bG9jPiB7DQogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsNCiAgdHlwZWRl
ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIHZvaWQq
IHBvaW50ZXI7DQogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRl
cjsNCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7DQoNCiAgdGVtcGxhdGUg
PGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgew0KICAgIHR5cGVkZWYgX19h
bGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsNCiAgfTsNCn07DQoNCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBf
X2ExLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRv
cjxfVHAsIF9BbGxvYz4mIF9fYTIpDQp7DQogIHJldHVybiBfX2ExLl9fdW5k
ZXJseWluZ19hbGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsNCn0N
Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0KaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxv
Yz4mIF9fYTEsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxs
b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikNCnsNCiAgcmV0dXJuIF9fYTEu
X191bmRlcmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9j
Ow0KfQ0KDQoNCg0KDQoNCnRlbXBsYXRlIDxpbnQgaW5zdD4NCmlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8
aW5zdD4mLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxv
Y19hbGxvY190ZW1wbGF0ZTxpbnN0PiYpDQp7DQogIHJldHVybiB0cnVlOw0K
fQ0KDQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4NCmlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYs
DQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9j
X3RlbXBsYXRlPF9faW5zdD4mKQ0Kew0KICByZXR1cm4gZmFsc2U7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+DQppbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mLA0KICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+Jikgew0KICBy
ZXR1cm4gdHJ1ZTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4NCmlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9j
PiYsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9j
PF9BbGxvYz4mKSB7DQogIHJldHVybiBmYWxzZTsNCn0NCiMgNzMyICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2Mu
aCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4N
CnN0cnVjdCBfQWxsb2NfdHJhaXRzDQp7DQogIHN0YXRpYyBjb25zdCBib29s
IF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOw0KICB0eXBlZGVmIHR5cGVuYW1l
IF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBhbGxv
Y2F0b3JfdHlwZTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvY2F0b3I+DQpjb25zdCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBf
QWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOw0KDQoNCg0KdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4NCnN0cnVjdCBfQWxsb2NfdHJhaXRz
PF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJv
b2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVf
YWxsb2M8X1RwLCBhbGxvYz4gX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgYWxs
b2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0KDQoNCg0KdGVtcGxh
dGUgPGNsYXNzIF9UcCwgaW50IF9faW5zdD4NCnN0cnVjdCBfQWxsb2NfdHJh
aXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+DQp7
DQogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7
DQogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOw0KICB0eXBlZGVmIF9f
YWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
PiA+IGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4NCnN0cnVjdCBfQWxs
b2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0PiA+DQp7DQogIHN0YXRpYyBjb25zdCBib29sIF9TX2lu
c3RhbmNlbGVzcyA9IHRydWU7DQogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9U
cCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0
PiA+DQogICAgICAgICAgX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxv
Y2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
LCBfX2luc3Q+ID4NCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsNCn07DQoN
Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPg0Kc3RydWN0
IF9BbGxvY190cmFpdHM8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4NCnsN
CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsN
CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxs
b2M+ID4gX0FsbG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw
LCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7DQp9Ow0K
DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBpbnQg
X19pbnN0Pg0Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLA0KICAgICAgICAg
ICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8X19pbnN0PiA+ID4NCnsNCiAgc3RhdGljIGNvbnN0IGJvb2wg
X1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsNCiAgdHlwZWRlZiBzaW1wbGVfYWxs
b2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0Fs
bG9jX3R5cGU7DQogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxv
Y19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7DQp9
Ow0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGJvb2wg
X190aHIsIGludCBfX2luc3Q+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAs
DQogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlZmF1bHRfYWxs
b2NfdGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+DQp7DQogIHN0YXRpYyBj
b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7DQogIHR5cGVkZWYg
c2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyLF9faW5zdD4gPg0KICAgICAgICAgIF9BbGxvY190eXBlOw0KICB0eXBl
ZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PF9fdGhyLF9faW5zdD4gPg0KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOw0K
fTsNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFz
cyBfQWxsb2M+DQpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2Nh
dG9yPF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiA+DQp7DQogIHN0YXRp
YyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7DQogIHR5cGVk
ZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9B
bGxvY190eXBlOw0KICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdf
YWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOw0KfTsNCg0KfQ0KIyAy
MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X21lbW9yeS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMNCiMgMzQgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25z
dHJ1Y3QuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvbmV3IiAxIDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMiAzDQoNCm5hbWVz
cGFjZSBzdGQNCnsNCiMgNDcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMw0KdGVtcGxhdGUgPGNs
YXNzIF9UMSwgY2xhc3MgX1QyPg0KaW5saW5lIHZvaWQgX0NvbnN0cnVjdChf
VDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7DQpuZXcgKCh2b2lkKikg
X19wKSBfVDEoX192YWx1ZSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVDE+
DQppbmxpbmUgdm9pZCBfQ29uc3RydWN0KF9UMSogX19wKSB7DQogIG5ldyAo
KHZvaWQqKSBfX3ApIF9UMSgpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
Pg0KaW5saW5lIHZvaWQgX0Rlc3Ryb3koX1RwKiBfX3BvaW50ZXIpIHsNCiAg
X19wb2ludGVyLT5+X1RwKCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXJhdG9yPg0Kdm9pZA0KX19kZXN0cm95X2F1eChfRm9yd2FyZEl0
ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2Zh
bHNlX3R5cGUpDQp7DQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCkNCiAgICBkZXN0cm95KCYqX19maXJzdCk7DQp9DQoNCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPg0KaW5saW5lIHZvaWQgX19k
ZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9y
LCBfX3RydWVfdHlwZSkge30NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlcmF0b3IsIGNsYXNzIF9UcD4NCmlubGluZSB2b2lkDQpfX2Rlc3Ryb3ko
X0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9f
bGFzdCwgX1RwKikNCnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh
aXRzPF9UcD46Omhhc190cml2aWFsX2Rlc3RydWN0b3INCiAgICAgICAgICBf
VHJpdmlhbF9kZXN0cnVjdG9yOw0KICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3Qs
IF9fbGFzdCwgX1RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQppbmxpbmUgdm9pZCBfRGVz
dHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0
b3IgX19sYXN0KSB7DQogIF9fZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9f
dmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCmlubGluZSB2b2lkIF9EZXN0
cm95KGNoYXIqLCBjaGFyKikge30NCmlubGluZSB2b2lkIF9EZXN0cm95KGlu
dCosIGludCopIHt9DQppbmxpbmUgdm9pZCBfRGVzdHJveShsb25nKiwgbG9u
ZyopIHt9DQppbmxpbmUgdm9pZCBfRGVzdHJveShmbG9hdCosIGZsb2F0Kikg
e30NCmlubGluZSB2b2lkIF9EZXN0cm95KGRvdWJsZSosIGRvdWJsZSopIHt9
DQppbmxpbmUgdm9pZCBfRGVzdHJveSh3Y2hhcl90Kiwgd2NoYXJfdCopIHt9
DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4NCmlu
bGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3Zh
bHVlKSB7DQogIF9Db25zdHJ1Y3QoX19wLCBfX3ZhbHVlKTsNCn0NCg0KdGVt
cGxhdGUgPGNsYXNzIF9UMT4NCmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEq
IF9fcCkgew0KICBfQ29uc3RydWN0KF9fcCk7DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfVHA+DQppbmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVy
KSB7DQogIF9EZXN0cm95KF9fcG9pbnRlcik7DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXJhdG9yPg0KaW5saW5lIHZvaWQgZGVzdHJveShf
Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s
YXN0KSB7DQogIF9EZXN0cm95KF9fZmlyc3QsIF9fbGFzdCk7DQp9DQoNCn0N
CiMgMjMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9tZW1vcnkuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgi
IDEgMw0KIyAyNCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX21lbW9yeS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzDQoj
IDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfdGVtcGJ1Zi5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCnRlbXBsYXRl
IDxjbGFzcyBfVHA+DQpwYWlyPF9UcCosIHB0cmRpZmZfdD4NCl9fZ2V0X3Rl
bXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQ0Kew0KICBp
ZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHAp
KSkNCiAgICBfX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsNCg0K
ICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX1RwKiBfX3RtcCA9IChfVHAq
KSBtYWxsb2MoKHNpemVfdClfX2xlbiAqIHNpemVvZihfVHApKTsNCiAgICBp
ZiAoX190bXAgIT0gMCkNCiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRp
ZmZfdD4oX190bXAsIF9fbGVuKTsNCiAgICBfX2xlbiAvPSAyOw0KICB9DQoN
CiAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PigoX1RwKikwLCAwKTsN
Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCmlubGluZSBwYWlyPF9UcCos
IHB0cmRpZmZfdD4gZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9f
bGVuKSB7DQogIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVu
LCAoX1RwKikgMCk7DQp9DQoNCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPg0KaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9y
YXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopIHsNCiAgcmV0dXJu
IF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsNCn0N
Cg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4NCnZvaWQgcmV0dXJuX3RlbXBvcmFy
eV9idWZmZXIoX1RwKiBfX3ApIHsNCiAgZnJlZShfX3ApOw0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPg0KY2xh
c3MgX1RlbXBvcmFyeV9idWZmZXIgew0KcHJpdmF0ZToNCiAgcHRyZGlmZl90
IF9NX29yaWdpbmFsX2xlbjsNCiAgcHRyZGlmZl90IF9NX2xlbjsNCiAgX1Rw
KiBfTV9idWZmZXI7DQoNCiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZmZXIoKSB7
DQogICAgX01fb3JpZ2luYWxfbGVuID0gX01fbGVuOw0KICAgIF9NX2J1ZmZl
ciA9IDA7DQoNCiAgICBpZiAoX01fbGVuID4gKHB0cmRpZmZfdCkoMjE0NzQ4
MzY0NyAvIHNpemVvZihfVHApKSkNCiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2
NDcgLyBzaXplb2YoX1RwKTsNCg0KICAgIHdoaWxlIChfTV9sZW4gPiAwKSB7
DQogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNp
emVvZihfVHApKTsNCiAgICAgIGlmIChfTV9idWZmZXIpDQogICAgICAgIGJy
ZWFrOw0KICAgICAgX01fbGVuIC89IDI7DQogICAgfQ0KICB9DQoNCiAgdm9p
ZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlw
ZSkge30NCiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAm
IHZhbCwgX19mYWxzZV90eXBlKSB7DQogICAgdW5pbml0aWFsaXplZF9maWxs
X24oX01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7DQogIH0NCg0KcHVibGljOg0K
ICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQ0K
ICBwdHJkaWZmX3QgcmVxdWVzdGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBf
TV9vcmlnaW5hbF9sZW47IH0NCiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9N
X2J1ZmZlcjsgfQ0KICBfVHAqIGVuZCgpIHsgcmV0dXJuIF9NX2J1ZmZlciAr
IF9NX2xlbjsgfQ0KDQogIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRl
cmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsNCg0K
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNf
dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yDQogICAgICAgICAgICBfVHJp
dmlhbDsNCg0KICAgIHRyeSB7DQogICAgICBfTV9sZW4gPSAwOw0KICAgICAg
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfTV9sZW4pOw0KICAgICAgX01f
YWxsb2NhdGVfYnVmZmVyKCk7DQogICAgICBpZiAoX01fbGVuID4gMCkNCiAg
ICAgICAgX01faW5pdGlhbGl6ZV9idWZmZXIoKl9fZmlyc3QsIF9Ucml2aWFs
KCkpOw0KICAgIH0NCiAgICBjYXRjaCguLi4pIHsgZnJlZShfTV9idWZmZXIp
OyBfTV9idWZmZXIgPSAwOyBfTV9sZW4gPSAwOyB0aHJvdzsgfTsNCiAgfQ0K
DQogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsNCiAgICBkZXN0cm95KF9NX2J1
ZmZlciwgX01fYnVmZmVyICsgX01fbGVuKTsNCiAgICBmcmVlKF9NX2J1ZmZl
cik7DQogIH0NCg0KcHJpdmF0ZToNCg0KICBfVGVtcG9yYXJ5X2J1ZmZlcihj
b25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9DQogIHZvaWQgb3BlcmF0b3I9
KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30NCn07DQoNCg0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwNCiAgICAgICAgICBjbGFz
cyBfVHANCiAgICAgICAgICAgICAgICAgICAgPSB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUNCiAgICAg
ICAgID4NCnN0cnVjdCB0ZW1wb3JhcnlfYnVmZmVyIDogcHVibGljIF9UZW1w
b3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4NCnsNCiAgdGVt
cG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlcmF0b3IgX19sYXN0KQ0KICAgIDogX1RlbXBvcmFyeV9idWZmZXI8
X0ZvcndhcmRJdGVyYXRvciwgX1RwPihfX2ZpcnN0LCBfX2xhc3QpIHt9DQog
IH50ZW1wb3JhcnlfYnVmZmVyKCkge30NCn07DQoNCn0NCiMgMjUgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnku
aCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMw0KIyAzNCAiL2hvbWUv
bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlh
bGl6ZWQuaCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAxIDMNCiMgMzUgIi9ob21lL21k
ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxp
emVkLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCg0KDQoNCg0KdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4N
CmlubGluZSBfRm9yd2FyZEl0ZXINCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1
eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkNCnsNCiAg
cmV0dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0
ZXI+DQpfRm9yd2FyZEl0ZXINCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpDQp7DQogIF9G
b3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0Ow0KICB0cnkgew0KICAgIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX2N1cikN
CiAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOw0KICAgIHJl
dHVybiBfX2N1cjsNCiAgfQ0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19y
ZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07DQp9DQoNCg0KdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Rw
Pg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191bmluaXRpYWxpemVkX2NvcHko
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX1RwKikN
CnsNCiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omlz
X1BPRF90eXBlIF9Jc19QT0Q7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRf
Y29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgp
KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9G
b3J3YXJkSXRlcj4NCmlubGluZSBfRm9yd2FyZEl0ZXINCiAgdW5pbml0aWFs
aXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsDQogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1
bHQpDQp7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX192YWx1ZV90eXBlKF9fcmVzdWx0KSk7DQp9DQoNCmlubGluZSBj
aGFyKiB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwg
Y29uc3QgY2hhciogX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyKiBfX3Jlc3VsdCkgew0KICBtZW1tb3ZlKF9fcmVzdWx0
LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgcmV0dXJuIF9fcmVz
dWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQppbmxpbmUgd2NoYXJf
dCoNCnVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hhcl90KiBfX2ZpcnN0
LCBjb25zdCB3Y2hhcl90KiBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
d2NoYXJfdCogX19yZXN1bHQpDQp7DQogIG1lbW1vdmUoX19yZXN1bHQsIF9f
Zmlyc3QsIHNpemVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7
DQogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsNCn0N
Cg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6
ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPg0KcGFpcjxfSW5wdXRJdGVyLCBfRm9y
d2FyZEl0ZXI+DQpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIg
X19maXJzdCwgX1NpemUgX19jb3VudCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAg
ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpDQp7DQogIF9Gb3J3YXJkSXRlciBf
X2N1ciA9IF9fcmVzdWx0Ow0KICB0cnkgew0KICAgIGZvciAoIDsgX19jb3Vu
dCA+IDAgOyAtLV9fY291bnQsICsrX19maXJzdCwgKytfX2N1cikNCiAgICAg
IF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOw0KICAgIHJldHVybiBw
YWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19jdXIp
Ow0KICB9DQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX3Jlc3VsdCwgX19j
dXIpOyB0aHJvdzsgfTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPg0K
aW5saW5lIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4N
Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwgX1NpemUgX19jb3VudCwNCiAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAg
ICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgew0KICBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsNCiAgcmV0dXJu
IHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4oDQogICAg
ICAgICAgICAgICAgIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgdW5pbml0
aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsNCn0N
Cg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBj
bGFzcyBfRm9yd2FyZEl0ZXI+DQppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBf
Rm9yd2FyZEl0ZXI+DQpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0
ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwNCiAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgew0KICByZXR1cm4gX191bmlu
aXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPg0KaW5s
aW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPg0KdW5pbml0aWFs
aXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50
LA0KICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0
KSB7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3Qs
IF9fY291bnQsIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0K
DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4N
CmlubGluZSB2b2lkDQpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBl
KQ0Kew0KICBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsNCn0NCg0KdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0Kdm9pZA0K
X191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpDQp7DQogIF9Gb3J3
YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7DQogIHRyeSB7DQogICAgZm9yICgg
OyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpDQogICAgICBfQ29uc3RydWN0
KCYqX19jdXIsIF9feCk7DQogIH0NCiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95
KF9fZmlyc3QsIF9fY3VyKTsgdGhyb3c7IH07DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4NCmlu
bGluZSB2b2lkIF9fdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQ0Kew0K
ICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46OmlzX1BP
RF90eXBlIF9Jc19QT0Q7DQogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChf
X2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsNCg0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+DQppbmxpbmUg
dm9pZCB1bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfVHAmIF9feCkNCnsNCiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJz
dCwgX19sYXN0LCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoN
Cg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6
ZSwgY2xhc3MgX1RwPg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191bmluaXRp
YWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXpl
IF9fbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X194LCBfX3RydWVfdHlwZSkNCnsNCiAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0
LCBfX24sIF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+DQpfRm9yd2FyZEl0ZXINCl9f
dW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQ0Kew0KICBfRm9yd2FyZEl0ZXIg
X19jdXIgPSBfX2ZpcnN0Ow0KICB0cnkgew0KICAgIGZvciAoIDsgX19uID4g
MDsgLS1fX24sICsrX19jdXIpDQogICAgICBfQ29uc3RydWN0KCYqX19jdXIs
IF9feCk7DQogICAgcmV0dXJuIF9fY3VyOw0KICB9DQogIGNhdGNoKC4uLikg
eyBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7IHRocm93OyB9Ow0KfQ0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xh
c3MgX1RwLCBjbGFzcyBfVHAxPg0KaW5saW5lIF9Gb3J3YXJkSXRlcg0KX191
bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1Np
emUgX19uLCBjb25zdCBfVHAmIF9feCwgX1RwMSopDQp7DQogIHR5cGVkZWYg
dHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6aXNfUE9EX3R5cGUgX0lz
X1BPRDsNCiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9f
Zmlyc3QsIF9fbiwgX194LCBfSXNfUE9EKCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPg0K
aW5saW5lIF9Gb3J3YXJkSXRlcg0KdW5pbml0aWFsaXplZF9maWxsX24oX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gp
DQp7DQogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3Qs
IF9fbiwgX194LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KIyAyMzEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91
bmluaXRpYWxpemVkLmgiIDMNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4NCmlu
bGluZSBfRm9yd2FyZEl0ZXINCl9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHko
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpDQp7DQogIF9Gb3J3YXJkSXRl
ciBfX21pZCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0
MSwgX19yZXN1bHQpOw0KICB0cnkgew0KICAgIHJldHVybiB1bmluaXRpYWxp
emVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsNCiAgfQ0KICBj
YXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7
IH07DQp9DQoNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9UcCwgY2xhc3MgX0lucHV0SXRlcj4NCmlubGluZSBfRm9yd2Fy
ZEl0ZXINCl9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVy
IF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0KQ0Kew0KICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlk
LCBfX3gpOw0KICB0cnkgew0KICAgIHJldHVybiB1bmluaXRpYWxpemVkX2Nv
cHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7DQogIH0NCiAgY2F0Y2goLi4u
KSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7IHRocm93OyB9Ow0KfQ0K
DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Zv
cndhcmRJdGVyLCBjbGFzcyBfVHA+DQppbmxpbmUgdm9pZA0KX191bmluaXRp
YWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQ0Kew0KICBf
Rm9yd2FyZEl0ZXIgX19taWQyID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly
c3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7DQogIHRyeSB7DQogICAgdW5pbml0
aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsNCiAgfQ0KICBj
YXRjaCguLi4pIHsgX0Rlc3Ryb3koX19maXJzdDIsIF9fbWlkMik7IHRocm93
OyB9Ow0KfQ0KDQp9DQojIDI2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMw0KIyAxICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcmF3X3N0b3Jh
Z2VfaXRlci5oIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDMNCm5h
bWVzcGFjZSBzdGQNCnsNCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cmF0b3IsIGNsYXNzIF9UcD4NCmNsYXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9y
IHsNCnByb3RlY3RlZDoNCiAgX0ZvcndhcmRJdGVyYXRvciBfTV9pdGVyOw0K
cHVibGljOg0KICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0
b3JfY2F0ZWdvcnk7DQogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOw0KICB0
eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOw0KICB0eXBlZGVmIHZvaWQg
cG9pbnRlcjsNCiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsNCg0KICBleHBs
aWNpdCByYXdfc3RvcmFnZV9pdGVyYXRvcihfRm9yd2FyZEl0ZXJhdG9yIF9f
eCkgOiBfTV9pdGVyKF9feCkge30NCiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3Im
IG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9DQogIHJhd19zdG9yYWdl
X2l0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX2VsZW1lbnQpIHsN
CiAgICBjb25zdHJ1Y3QoJipfTV9pdGVyLCBfX2VsZW1lbnQpOw0KICAgIHJl
dHVybiAqdGhpczsNCiAgfQ0KICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9y
d2FyZEl0ZXJhdG9yLCBfVHA+JiBvcGVyYXRvcisrKCkgew0KICAgICsrX01f
aXRlcjsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgcmF3X3N0b3JhZ2Vf
aXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBvcGVyYXRvcisrKGlu
dCkgew0KICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0
b3IsIF9UcD4gX190bXAgPSAqdGhpczsNCiAgICArK19NX2l0ZXI7DQogICAg
cmV0dXJuIF9fdG1wOw0KICB9DQp9Ow0KDQoNCn0NCiMgMjcgIi9ob21lL21k
ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIg
MiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KIHRlbXBsYXRlPGNsYXNzIF9U
cDE+IHN0cnVjdCBhdXRvX3B0cl9yZWYgew0KICAgX1RwMSogX01fcHRyOw0K
ICAgYXV0b19wdHJfcmVmKF9UcDEqIF9fcCkgOiBfTV9wdHIoX19wKSB7fQ0K
fTsNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gY2xhc3MgYXV0b19wdHIgew0K
cHJpdmF0ZToNCiAgX1RwKiBfTV9wdHI7DQoNCnB1YmxpYzoNCiAgdHlwZWRl
ZiBfVHAgZWxlbWVudF90eXBlOw0KDQogIGV4cGxpY2l0IGF1dG9fcHRyKF9U
cCogX19wID0gMCkgdGhyb3coKSA6IF9NX3B0cihfX3ApIHt9DQogIGF1dG9f
cHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19hLnJlbGVh
c2UoKSkge30NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYXV0b19wdHIo
YXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQ0KICAgIDogX01fcHRyKF9f
YS5yZWxlYXNlKCkpIHt9DQoNCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRv
X3B0ciYgX19hKSB0aHJvdygpIHsNCiAgICByZXNldChfX2EucmVsZWFzZSgp
KTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xh
c3MgX1RwMT4NCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0cjxfVHAx
PiYgX19hKSB0aHJvdygpIHsNCiAgICByZXNldChfX2EucmVsZWFzZSgpKTsN
CiAgICByZXR1cm4gKnRoaXM7DQogIH0NCg0KDQoNCg0KDQogIH5hdXRvX3B0
cigpIHsgZGVsZXRlIF9NX3B0cjsgfQ0KDQogIF9UcCYgb3BlcmF0b3IqKCkg
Y29uc3QgdGhyb3coKSB7DQogICAgcmV0dXJuICpfTV9wdHI7DQogIH0NCiAg
X1RwKiBvcGVyYXRvci0+KCkgY29uc3QgdGhyb3coKSB7DQogICAgcmV0dXJu
IF9NX3B0cjsNCiAgfQ0KICBfVHAqIGdldCgpIGNvbnN0IHRocm93KCkgew0K
ICAgIHJldHVybiBfTV9wdHI7DQogIH0NCiAgX1RwKiByZWxlYXNlKCkgdGhy
b3coKSB7DQogICAgX1RwKiBfX3RtcCA9IF9NX3B0cjsNCiAgICBfTV9wdHIg
PSAwOw0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICB2b2lkIHJlc2V0KF9U
cCogX19wID0gMCkgdGhyb3coKSB7DQogICAgaWYgKF9fcCAhPSBfTV9wdHIp
IHsNCiAgICAgIGRlbGV0ZSBfTV9wdHI7DQogICAgICBfTV9wdHIgPSBfX3A7
DQogICAgfQ0KICB9DQoNCg0KDQoNCg0KcHVibGljOg0KICBhdXRvX3B0cihh
dXRvX3B0cl9yZWY8X1RwPiBfX3JlZikgdGhyb3coKQ0KICAgIDogX01fcHRy
KF9fcmVmLl9NX3B0cikge30NCg0KICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1
dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB0aHJvdygpIHsNCiAgICBpZiAoX19y
ZWYuX01fcHRyICE9IHRoaXMtPmdldCgpKSB7DQogICAgICBkZWxldGUgX01f
cHRyOw0KICAgICAgX01fcHRyID0gX19yZWYuX01fcHRyOw0KICAgIH0NCiAg
ICByZXR1cm4gKnRoaXM7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
MT4gb3BlcmF0b3IgYXV0b19wdHJfcmVmPF9UcDE+KCkgdGhyb3coKQ0KICAg
IHsgcmV0dXJuIGF1dG9fcHRyX3JlZjxfVHA+KHRoaXMtPnJlbGVhc2UoKSk7
IH0NCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IG9wZXJhdG9yIGF1dG9fcHRy
PF9UcDE+KCkgdGhyb3coKQ0KICAgIHsgcmV0dXJuIGF1dG9fcHRyPF9UcDE+
KHRoaXMtPnJlbGVhc2UoKSk7IH0NCn07DQoNCn0NCiMgNDQgIi9ob21lL21k
ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIg
MiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3R5cGVfdHJhaXRzLmgiIDEgMw0KIyA0NSAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMNCiMg
MSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2lvc2Z3ZC5oIiAxIDMNCiMgNDYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDEgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmlu
Zy5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzDQoNCiMgMSAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43
L2JpdHMvYXRvbWljaXR5LmgiIDEgMw0KIyAzMyAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMv
YXRvbWljaXR5LmgiIDMNCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsNCg0K
c3RhdGljIGludA0KX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQ0KX19l
eGNoYW5nZV9hbmRfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVt
LCBpbnQgX192YWwpDQp7DQogIHN0YXRpYyB1bnNpZ25lZCBjaGFyIF9fbG9j
azsNCiAgX0F0b21pY193b3JkIF9fcmVzdWx0LCBfX3RtcDsNCg0KICBfX2Fz
bV9fIF9fdm9sYXRpbGVfXygiMToJbGRzdHViCVslMV0sICUwXG5cdCINCiAg
ICAgICAgICAgICAgICAgICAgICAgIgljbXAJJTAsIDBcblx0Ig0KICAgICAg
ICAgICAgICAgICAgICAgICAiCWJuZQkxYlxuXHQiDQogICAgICAgICAgICAg
ICAgICAgICAgICIJIG5vcCINCiAgICAgICAgICAgICAgICAgICAgICAgOiAi
PSZyIiAoX190bXApDQogICAgICAgICAgICAgICAgICAgICAgIDogInIiICgm
X19sb2NrKQ0KICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsN
CiAgX19yZXN1bHQgPSAqX19tZW07DQogICpfX21lbSArPSBfX3ZhbDsNCiAg
X19hc21fXyBfX3ZvbGF0aWxlX18oInN0YgklJWcwLCBbJTBdIg0KICAgICAg
ICAgICAgICAgICAgICAgICA6DQogICAgICAgICAgICAgICAgICAgICAgIDog
InIiICgmX19sb2NrKQ0KICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1v
cnkiKTsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQpzdGF0aWMgdm9pZA0K
X19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQ0KX19hdG9taWNfYWRkICh2
b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpDQp7DQog
IHN0YXRpYyB1bnNpZ25lZCBjaGFyIF9fbG9jazsNCiAgX0F0b21pY193b3Jk
IF9fdG1wOw0KDQogIF9fYXNtX18gX192b2xhdGlsZV9fKCIxOglsZHN0dWIJ
WyUxXSwgJTBcblx0Ig0KICAgICAgICAgICAgICAgICAgICAgICAiCWNtcAkl
MCwgMFxuXHQiDQogICAgICAgICAgICAgICAgICAgICAgICIJYm5lCTFiXG5c
dCINCiAgICAgICAgICAgICAgICAgICAgICAgIgkgbm9wIg0KICAgICAgICAg
ICAgICAgICAgICAgICA6ICI9JnIiIChfX3RtcCkNCiAgICAgICAgICAgICAg
ICAgICAgICAgOiAiciIgKCZfX2xvY2spDQogICAgICAgICAgICAgICAgICAg
ICAgIDogIm1lbW9yeSIpOw0KICAqX19tZW0gKz0gX192YWw7DQogIF9fYXNt
X18gX192b2xhdGlsZV9fKCJzdGIJJSVnMCwgWyUwXSINCiAgICAgICAgICAg
ICAgICAgICAgICAgOg0KICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAo
Jl9fbG9jaykNCiAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7
DQp9DQoNCnN0YXRpYyBpbnQNCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9f
KSkNCl9fY29tcGFyZV9hbmRfc3dhcCAodm9sYXRpbGUgbG9uZyAqX19wLCBs
b25nIF9fb2xkdmFsLCBsb25nIF9fbmV3dmFsKQ0Kew0KICBzdGF0aWMgdW5z
aWduZWQgY2hhciBfX2xvY2s7DQogIGxvbmcgX19yZXQsIF9fdG1wOw0KDQog
IF9fYXNtX18gX192b2xhdGlsZV9fKCIxOglsZHN0dWIJWyUxXSwgJTBcblx0
Ig0KICAgICAgICAgICAgICAgICAgICAgICAiCWNtcAklMCwgMFxuXHQiDQog
ICAgICAgICAgICAgICAgICAgICAgICIJYm5lCTFiXG5cdCINCiAgICAgICAg
ICAgICAgICAgICAgICAgIgkgbm9wIg0KICAgICAgICAgICAgICAgICAgICAg
ICA6ICI9JnIiIChfX3RtcCkNCiAgICAgICAgICAgICAgICAgICAgICAgOiAi
ciIgKCZfX2xvY2spDQogICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9y
eSIpOw0KICBpZiAoKl9fcCAhPSBfX29sZHZhbCkNCiAgICBfX3JldCA9IDA7
DQogIGVsc2UNCiAgICB7DQogICAgICAqX19wID0gX19uZXd2YWw7DQogICAg
ICBfX3JldCA9IDE7DQogICAgfQ0KICBfX2FzbV9fIF9fdm9sYXRpbGVfXygi
c3RiCSUlZzAsIFslMF0iDQogICAgICAgICAgICAgICAgICAgICAgIDoNCiAg
ICAgICAgICAgICAgICAgICAgICAgOiAiciIgKCZfX2xvY2spDQogICAgICAg
ICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOw0KDQogIHJldHVybiBfX3Jl
dDsNCn0NCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0K
ew0KIyA4MyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvYmFzaWNfc3RyaW5nLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAg
Y2xhc3MgYmFzaWNfc3RyaW5nDQogICAgew0KDQogICAgcHVibGljOg0KICAg
ICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUgdmFsdWVfdHlwZTsNCiAg
ICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOw0KICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7DQog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBl
IGRpZmZlcmVuY2VfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Fs
bG9jOjpyZWZlcmVuY2UgcmVmZXJlbmNlOw0KICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7
DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cG9pbnRlciBwb2lu
dGVyOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3Bv
aW50ZXIgY29uc3RfcG9pbnRlcjsNCiAgICAgIHR5cGVkZWYgX19ub3JtYWxf
aXRlcmF0b3I8cG9pbnRlciwgYmFzaWNfc3RyaW5nPiBpdGVyYXRvcjsNCiAg
ICAgIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwg
YmFzaWNfc3RyaW5nPiBjb25zdF9pdGVyYXRvcjsNCiAgICAgIHR5cGVkZWYg
cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcjsNCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxp
dGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsNCg0KICAgIHByaXZhdGU6DQoj
IDExOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
YmFzaWNfc3RyaW5nLmgiIDMNCiAgICAgIHN0cnVjdCBfUmVwDQogICAgICB7
DQoNCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnJlYmluZDxj
aGFyPjo6b3RoZXIgX1Jhd19ieXRlc19hbGxvYzsNCiMgMTM2ICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcu
aCIgMw0KICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIF9TX21heF9z
aXplOw0KICAgICAgICBzdGF0aWMgY29uc3QgX0NoYXJUIF9TX3Rlcm1pbmFs
Ow0KDQogICAgICAgIHNpemVfdHlwZSBfTV9sZW5ndGg7DQogICAgICAgIHNp
emVfdHlwZSBfTV9jYXBhY2l0eTsNCiAgICAgICAgX0F0b21pY193b3JkIF9N
X3JlZmVyZW5jZXM7DQoNCiAgICAgICAgYm9vbA0KICAgICAgICBfTV9pc19s
ZWFrZWQoKSBjb25zdA0KICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2Vz
IDwgMDsgfQ0KDQogICAgICAgIGJvb2wNCiAgICAgICAgX01faXNfc2hhcmVk
KCkgY29uc3QNCiAgICAgICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA+IDA7
IH0NCg0KICAgICAgICB2b2lkDQogICAgICAgIF9NX3NldF9sZWFrZWQoKQ0K
ICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQ0KDQogICAgICAgIHZv
aWQNCiAgICAgICAgX01fc2V0X3NoYXJhYmxlKCkNCiAgICAgICAgeyBfTV9y
ZWZlcmVuY2VzID0gMDsgfQ0KDQogICAgICAgIF9DaGFyVCoNCiAgICAgICAg
X01fcmVmZGF0YSgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxfQ2hhclQqPiAodGhpcyArIDEpOyB9DQoNCiAgICAgICAg
X0NoYXJUJg0KICAgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3MpIHRocm93
KCkNCiAgICAgICAgeyByZXR1cm4gX01fcmVmZGF0YSgpIFtfX3NdOyB9DQoN
CiAgICAgICAgX0NoYXJUKg0KICAgICAgICBfTV9ncmFiKGNvbnN0IF9BbGxv
YyYgX19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpDQogICAgICAg
IHsgcmV0dXJuICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19h
bGxvYzIpID8NCiAgICAgICAgICAgIF9NX3JlZmNvcHkoKSA6IF9NX2Nsb25l
KF9fYWxsb2MxKTsgfQ0KDQoNCiAgICAgICAgc3RhdGljIF9SZXAqDQogICAg
ICAgIF9TX2NyZWF0ZShzaXplX3QsIGNvbnN0IF9BbGxvYyYpOw0KDQogICAg
ICAgIHZvaWQNCiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxsb2MmIF9f
YSkNCiAgICAgICAgew0KICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9h
ZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAwKQ0KICAgICAgICAgICAgX01f
ZGVzdHJveShfX2EpOw0KICAgICAgICB9DQoNCiAgICAgICAgdm9pZA0KICAg
ICAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYpIHRocm93KCk7DQoNCiAg
ICAgICAgX0NoYXJUKg0KICAgICAgICBfTV9yZWZjb3B5KCkgdGhyb3coKQ0K
ICAgICAgICB7DQogICAgICAgICAgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVu
Y2VzLCAxKTsNCiAgICAgICAgICByZXR1cm4gX01fcmVmZGF0YSgpOw0KICAg
ICAgICB9DQoNCiAgICAgICAgX0NoYXJUKg0KICAgICAgICBfTV9jbG9uZShj
b25zdCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsNCiMgMjA4ICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19z
dHJpbmcuaCIgMw0KICAgICAgICBpbmxpbmUgc3RhdGljIGJvb2wNCiAgICAg
ICAgX1NfZXhjZXNzX3Nsb3Aoc2l6ZV90LCBzaXplX3QpOw0KDQogICAgICB9
Ow0KDQoNCiAgICAgIHN0cnVjdCBfQWxsb2NfaGlkZXIgOiBfQWxsb2MNCiAg
ICAgIHsNCiAgICAgICAgX0FsbG9jX2hpZGVyKF9DaGFyVCogX19kYXQsIGNv
bnN0IF9BbGxvYyYgX19hKQ0KICAgICAgICA6IF9BbGxvYyhfX2EpLCBfTV9w
KF9fZGF0KSB7IH0NCg0KICAgICAgICBfQ2hhclQqIF9NX3A7DQogICAgICB9
Ow0KDQogICAgcHVibGljOg0KDQoNCg0KICAgICAgc3RhdGljIGNvbnN0IHNp
emVfdHlwZSBucG9zID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSk7DQoN
CiAgICBwcml2YXRlOg0KDQogICAgICBtdXRhYmxlIF9BbGxvY19oaWRlciBf
TV9kYXRhcGx1czsNCg0KDQoNCiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1Nf
ZW1wdHlfcmVwX3N0b3JhZ2VbKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hh
clQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBl
KV07DQoNCiAgICAgIF9DaGFyVCoNCiAgICAgIF9NX2RhdGEoKSBjb25zdA0K
ICAgICAgeyByZXR1cm4gX01fZGF0YXBsdXMuX01fcDsgfQ0KDQogICAgICBf
Q2hhclQqDQogICAgICBfTV9kYXRhKF9DaGFyVCogX19wKQ0KICAgICAgeyBy
ZXR1cm4gKF9NX2RhdGFwbHVzLl9NX3AgPSBfX3ApOyB9DQoNCiAgICAgIF9S
ZXAqDQogICAgICBfTV9yZXAoKSBjb25zdA0KICAgICAgeyByZXR1cm4gJigo
cmVpbnRlcnByZXRfY2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0N
Cg0KDQoNCiAgICAgIGl0ZXJhdG9yDQogICAgICBfTV9pYmVnaW4oKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOyB9DQoNCiAgICAgIGl0
ZXJhdG9yDQogICAgICBfTV9pZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0
b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQ0KDQogICAgICB2b2lk
DQogICAgICBfTV9sZWFrKCkNCiAgICAgIHsNCiAgICAgICAgaWYgKCFfTV9y
ZXAoKS0+X01faXNfbGVha2VkKCkpDQogICAgICAgICAgX01fbGVha19oYXJk
KCk7DQogICAgICB9DQoNCiAgICAgIGl0ZXJhdG9yDQogICAgICBfTV9jaGVj
ayhzaXplX3R5cGUgX19wb3MpIGNvbnN0DQogICAgICB7DQogICAgICAgIGlm
IChfX3BvcyA+IHRoaXMtPnNpemUoKSkNCiAgICAgICAgICBfX3Rocm93X291
dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpfTV9jaGVjayIpOw0KICAgICAg
ICByZXR1cm4gX01faWJlZ2luKCkgKyBfX3BvczsNCiAgICAgIH0NCg0KDQog
ICAgICBpdGVyYXRvcg0KICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3Ms
IHNpemVfdHlwZSBfX29mZikgY29uc3QNCiAgICAgIHsNCiAgICAgICAgYm9v
bCBfX3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOw0K
ICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBfX3Rlc3RvZmYgPyBfX29m
ZiA6IHRoaXMtPnNpemUoKSAtIF9fcG9zOw0KICAgICAgICByZXR1cm4gKF9N
X2liZWdpbigpICsgX19wb3MgKyBfX25ld29mZik7DQogICAgICB9DQoNCg0K
DQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0b3I+DQogICAgICAgIHN0
YXRpYyB2b2lkDQogICAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3As
IF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikNCiAgICAgICAgew0K
ICAgICAgICAgIGZvciAoOyBfX2sxICE9IF9fazI7ICsrX19rMSwgKytfX3Ap
DQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sx
KTsNCiAgICAgICAgfQ0KDQogICAgICBzdGF0aWMgdm9pZA0KICAgICAgX1Nf
Y29weV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0
b3IgX19rMikNCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFz
ZSgpLCBfX2syLmJhc2UoKSk7IH0NCg0KICAgICAgc3RhdGljIHZvaWQNCiAg
ICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0X2l0ZXJhdG9y
IF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpDQogICAgICB7IF9TX2NvcHlf
Y2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9DQoNCiAg
ICAgIHN0YXRpYyB2b2lkDQogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCog
X19wLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19rMikNCiAgICAgIHsgdHJh
aXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0NCg0K
ICAgICAgc3RhdGljIHZvaWQNCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJU
KiBfX3AsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2sy
KQ0KICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIg
LSBfX2sxKTsgfQ0KDQogICAgICB2b2lkDQogICAgICBfTV9tdXRhdGUoc2l6
ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19s
ZW4yKTsNCg0KICAgICAgdm9pZA0KICAgICAgX01fbGVha19oYXJkKCk7DQoN
CiAgICAgIHN0YXRpYyBfUmVwJg0KICAgICAgX1NfZW1wdHlfcmVwKCkNCiAg
ICAgIHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PF9SZXAqPigmX1NfZW1w
dHlfcmVwX3N0b3JhZ2UpOyB9DQoNCiAgICBwdWJsaWM6DQoNCg0KDQoNCiAg
ICAgIGlubGluZQ0KICAgICAgYmFzaWNfc3RyaW5nKCk7DQoNCiAgICAgIGV4
cGxpY2l0DQogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2Ep
Ow0KDQoNCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcm
IF9fc3RyKTsNCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJp
bmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsDQogICAgICAgICAgICAgICAg
ICAgc2l6ZV90eXBlIF9fbiA9IG5wb3MpOw0KICAgICAgYmFzaWNfc3RyaW5n
KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywN
CiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxs
b2MmIF9fYSk7DQoNCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fbiwNCiAgICAgICAgICAgICAgICAgICBjb25z
dCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsNCiAgICAgIGJhc2ljX3N0cmlu
Zyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxs
b2MoKSk7DQogICAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0No
YXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7DQoNCiAg
ICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgICAgICBi
YXNpY19zdHJpbmcoX0lucHV0SXRlcmF0b3IgX19iZWdpbiwgX0lucHV0SXRl
cmF0b3IgX19lbmQsDQogICAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxs
b2MmIF9fYSA9IF9BbGxvYygpKTsNCg0KICAgICAgfmJhc2ljX3N0cmluZygp
DQogICAgICB7IF9NX3JlcCgpLT5fTV9kaXNwb3NlKHRoaXMtPmdldF9hbGxv
Y2F0b3IoKSk7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgb3Bl
cmF0b3I9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRo
aXMtPmFzc2lnbihfX3N0cik7IH0NCg0KICAgICAgYmFzaWNfc3RyaW5nJg0K
ICAgICAgb3BlcmF0b3I9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0
aGlzLT5hc3NpZ24oX19zKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQog
ICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXNz
aWduKDEsIF9fYyk7IH0NCg0KDQogICAgICBpdGVyYXRvcg0KICAgICAgYmVn
aW4oKQ0KICAgICAgew0KICAgICAgICBfTV9sZWFrKCk7DQogICAgICAgIHJl
dHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOw0KICAgICAgfQ0KDQogICAgICBj
b25zdF9pdGVyYXRvcg0KICAgICAgYmVnaW4oKSBjb25zdA0KICAgICAgeyBy
ZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpKTsgfQ0KDQogICAgICBp
dGVyYXRvcg0KICAgICAgZW5kKCkNCiAgICAgIHsNCiAgICAgICAgIF9NX2xl
YWsoKTsNCiAgICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0
aGlzLT5zaXplKCkpOw0KICAgICAgfQ0KDQogICAgICBjb25zdF9pdGVyYXRv
cg0KICAgICAgZW5kKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0
ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0NCg0KICAgICAg
cmV2ZXJzZV9pdGVyYXRvcg0KICAgICAgcmJlZ2luKCkNCiAgICAgIHsgcmV0
dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9DQoNCiAgICAg
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3INCiAgICAgIHJiZWdpbigpIGNvbnN0
DQogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMt
PmVuZCgpKTsgfQ0KDQogICAgICByZXZlcnNlX2l0ZXJhdG9yDQogICAgICBy
ZW5kKCkNCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+
YmVnaW4oKSk7IH0NCg0KICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcg0K
ICAgICAgcmVuZCgpIGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9DQoNCiAgICBwdWJsaWM6
DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0NCg0KICAgICAgc2l6ZV90eXBl
DQogICAgICBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01f
bGVuZ3RoOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgbWF4X3NpemUo
KSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsgfQ0KDQogICAg
ICB2b2lkDQogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9f
Yyk7DQoNCiAgICAgIHZvaWQNCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19u
KSB7IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgpKTsgfQ0KDQogICAgICBz
aXplX3R5cGUNCiAgICAgIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gX01f
cmVwKCktPl9NX2NhcGFjaXR5OyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHJl
c2VydmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApOw0KDQogICAgICB2b2lk
DQogICAgICBjbGVhcigpIHsgX01fbXV0YXRlKDAsIHRoaXMtPnNpemUoKSwg
MCk7IH0NCg0KICAgICAgYm9vbA0KICAgICAgZW1wdHkoKSBjb25zdCB7IHJl
dHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQ0KDQoNCiAgICAgIGNvbnN0X3Jl
ZmVyZW5jZQ0KICAgICAgb3BlcmF0b3JbXSAoc2l6ZV90eXBlIF9fcG9zKSBj
b25zdA0KICAgICAgeyByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsgfQ0KDQog
ICAgICByZWZlcmVuY2UNCiAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9f
cG9zKQ0KICAgICAgew0KICAgICAgICBfTV9sZWFrKCk7DQogICAgICAgIHJl
dHVybiBfTV9kYXRhKClbX19wb3NdOw0KICAgICAgfQ0KDQogICAgICBjb25z
dF9yZWZlcmVuY2UNCiAgICAgIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0DQog
ICAgICB7DQogICAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQ0KICAg
ICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0
Iik7DQogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsNCiAgICAgIH0N
Cg0KICAgICAgcmVmZXJlbmNlDQogICAgICBhdChzaXplX3R5cGUgX19uKQ0K
ICAgICAgew0KICAgICAgICBpZiAoX19uID49IHNpemUoKSkNCiAgICAgICAg
ICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOw0K
ICAgICAgICBfTV9sZWFrKCk7DQogICAgICAgIHJldHVybiBfTV9kYXRhKClb
X19uXTsNCiAgICAgIH0NCg0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAg
ICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0
dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0NCg0KICAgICAgYmFzaWNfc3Ry
aW5nJg0KICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyBy
ZXR1cm4gdGhpcy0+YXBwZW5kKF9fcyk7IH0NCg0KICAgICAgYmFzaWNfc3Ry
aW5nJg0KICAgICAgb3BlcmF0b3IrPShfQ2hhclQgX19jKSB7IHJldHVybiB0
aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9DQoNCiAgICAgIGJh
c2ljX3N0cmluZyYNCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcm
IF9fc3RyKTsNCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXBwZW5k
KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywg
c2l6ZV90eXBlIF9fbik7DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAg
IGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7DQoN
CiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGFwcGVuZChjb25zdCBfQ2hh
clQqIF9fcykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MsIHRy
YWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0NCg0KICAgICAgYmFzaWNfc3Ry
aW5nJg0KICAgICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2Mp
Ow0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAg
ICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgICBhcHBlbmQoX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQ0KICAgICAg
ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgp
LCBfX2ZpcnN0LCBfX2xhc3QpOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHB1
c2hfYmFjayhfQ2hhclQgX19jKQ0KICAgICAgeyB0aGlzLT5yZXBsYWNlKF9N
X2llbmQoKSwgX01faWVuZCgpLCAxLCBfX2MpOyB9DQoNCiAgICAgIGJhc2lj
X3N0cmluZyYNCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyKTsNCg0KICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXNzaWduKGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbikNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMtPmFz
c2lnbihfX3N0ci5fTV9jaGVjayhfX3BvcyksIF9fc3RyLl9NX2ZvbGQoX19w
b3MsIF9fbikpOw0KICAgICAgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQog
ICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24p
DQogICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zLCBfX3MgKyBfX24p
OyB9DQoNCiAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGFzc2lnbihjb25z
dCBfQ2hhclQqIF9fcykNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihf
X3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0NCg0KICAg
ICAgYmFzaWNfc3RyaW5nJg0KICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24s
IF9DaGFyVCBfX2MpDQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9N
X2liZWdpbigpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsgfQ0KDQogICAgICB0
ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgICAgICAgYmFzaWNf
c3RyaW5nJg0KICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQ0KICAgICAgICB7IHJldHVybiB0
aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3Qs
IF9fbGFzdCk7IH0NCg0KICAgICAgdm9pZA0KICAgICAgaW5zZXJ0KGl0ZXJh
dG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykNCiAgICAgIHsg
dGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19uLCBfX2MpOyB9DQoNCiAgICAg
IHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgICAgICB2b2lk
IGluc2VydChpdGVyYXRvciBfX3AsIF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBf
SW5wdXRJdGVyYXRvciBfX2VuZCkNCiAgICAgICAgeyB0aGlzLT5yZXBsYWNl
KF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9DQoNCiAgICAgIGJhc2ljX3N0
cmluZyYNCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyKQ0KICAgICAgew0KICAgICAgICBpdGVyYXRv
ciBfX3AgPSBfTV9jaGVjayhfX3BvczEpOw0KICAgICAgICB0aGlzLT5yZXBs
YWNlKF9fcCwgX19wLCBfX3N0ci5fTV9pYmVnaW4oKSwgX19zdHIuX01faWVu
ZCgpKTsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0KDQogICAg
ICBiYXNpY19zdHJpbmcmDQogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9z
MSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwNCiAgICAgICAgICAgICBz
aXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uKQ0KICAgICAgew0KICAg
ICAgICBpdGVyYXRvciBfX3AgPSBfTV9jaGVjayhfX3BvczEpOw0KICAgICAg
ICB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX3N0ci5fTV9jaGVjayhfX3Bv
czIpLA0KICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19w
b3MyLCBfX24pKTsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0K
DQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBpbnNlcnQoc2l6ZV90eXBl
IF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikNCiAg
ICAgIHsNCiAgICAgICAgaXRlcmF0b3IgX19wID0gX01fY2hlY2soX19wb3Mp
Ow0KICAgICAgICB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX3MsIF9fcyAr
IF9fbik7DQogICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KICAg
ICAgYmFzaWNfc3RyaW5nJg0KICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bv
cywgY29uc3QgX0NoYXJUKiBfX3MpDQogICAgICB7IHJldHVybiB0aGlzLT5p
bnNlcnQoX19wb3MsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsg
fQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICBpbnNlcnQoc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQ0KICAgICAg
ew0KICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBfX24s
IF9fYyk7DQogICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0NCg0KICAg
ICAgaXRlcmF0b3INCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFy
VCBfX2MgPSBfQ2hhclQoKSkNCiAgICAgIHsNCiAgICAgICAgc2l6ZV90eXBl
IF9fcG9zID0gX19wIC0gX01faWJlZ2luKCk7DQogICAgICAgIHRoaXMtPmlu
c2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlwZSgxKSwgX19jKTsNCiAg
ICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsNCiAgICAgICAgcmV0
dXJuIHRoaXMtPl9NX2liZWdpbigpICsgX19wb3M7DQogICAgICB9DQoNCiAg
ICAgIGJhc2ljX3N0cmluZyYNCiAgICAgIGVyYXNlKHNpemVfdHlwZSBfX3Bv
cyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQ0KICAgICAgew0KICAgICAg
ICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2Zv
bGQoX19wb3MsIF9fbiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9NX2RhdGEoKSwgX01fZGF0YSgpKTsNCiAgICAgIH0NCg0KICAgICAgaXRl
cmF0b3INCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pDQogICAg
ICB7DQogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9uIC0gX01f
aWJlZ2luKCk7DQogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwg
X19wb3NpdGlvbiArIDEsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsNCiAgICAg
ICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsNCiAgICAgICAgcmV0dXJu
IF9NX2liZWdpbigpICsgX19pOw0KICAgICAgfQ0KDQogICAgICBpdGVyYXRv
cg0KICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19s
YXN0KQ0KICAgICAgew0KICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJz
dCAtIF9NX2liZWdpbigpOw0KICAgICAgICB0aGlzLT5yZXBsYWNlKF9fZmly
c3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOw0KICAgICAgICBf
TV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOw0KICAgICAgIHJldHVybiBfTV9p
YmVnaW4oKSArIF9faTsNCiAgICAgIH0NCg0KICAgICAgYmFzaWNfc3RyaW5n
Jg0KICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAgICB7DQogICAg
ICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01f
Zm9sZChfX3BvcywgX19uKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fc3RyLmJlZ2luKCksIF9fc3RyLmVuZCgpKTsNCiAgICAgIH0NCg0K
ICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVwbGFjZShzaXplX3R5cGUg
X19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0ciwNCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90
eXBlIF9fbjIpOw0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBs
YWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9D
aGFyVCogX19zLA0KICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikNCiAg
ICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2so
X19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24yKTsNCiAgICAgIH0NCg0K
ICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgcmVwbGFjZShzaXplX3R5cGUg
X19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykNCiAg
ICAgIHsNCiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2so
X19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19zLCBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3Ro
KF9fcykpOw0KICAgICAgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAg
ICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNp
emVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQ0KICAgICAgew0KICAgICAgICBy
ZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQo
X19wb3MsIF9fbjEpLCBfX24yLCBfX2MpOw0KICAgICAgfQ0KDQogICAgICBi
YXNpY19zdHJpbmcmDQogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0
ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpDQogICAg
ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fc3RyLmJl
Z2luKCksIF9fc3RyLmVuZCgpKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcm
DQogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fbikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxh
Y2UoX19pMSwgX19pMiwgX19zLCBfX3MgKyBfX24pOyB9DQoNCiAgICAgIGJh
c2ljX3N0cmluZyYNCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRl
cmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX3MpDQogICAgICB7IHJldHVy
biB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChf
X3MpKTsgfQ0KDQogICAgICBiYXNpY19zdHJpbmcmDQogICAgICByZXBsYWNl
KGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24s
IF9DaGFyVCBfX2MpOw0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4NCiAgICAgICAgYmFzaWNfc3RyaW5nJg0KICAgICAgICByZXBs
YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsDQogICAgICAgICAg
ICAgICAgX0lucHV0SXRlcmF0b3IgX19rMSwgX0lucHV0SXRlcmF0b3IgX19r
MikNCiAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZShfX2kxLCBfX2kyLCBf
X2sxLCBfX2syLA0KICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9
DQoNCiAgICBwcml2YXRlOg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+DQogICAgICAgIGJhc2ljX3N0cmluZyYNCiAgICAgICAgX01f
cmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJ
dGVyYXRvciBfX2sxLA0KICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh
dG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7DQoNCiAgICAgIHRlbXBs
YXRlPGNsYXNzIF9Gd2RJdGVyYXRvcj4NCiAgICAgICAgYmFzaWNfc3RyaW5n
Jg0KICAgICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y
IF9faTIsIF9Gd2RJdGVyYXRvciBfX2sxLA0KICAgICAgICAgICAgICAgICAg
IF9Gd2RJdGVyYXRvciBfX2syLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7DQoN
Cg0KDQogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPg0KICAgICAgICBz
dGF0aWMgX0NoYXJUKg0KICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0
ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkNCiAgICAg
ICAgew0KICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9Jbkl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfVGFnOw0KICAgICAg
ICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9U
YWcoKSk7DQogICAgICAgIH0NCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lu
SXRlcj4NCiAgICAgICAgc3RhdGljIF9DaGFyVCoNCiAgICAgICAgX1NfY29u
c3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25z
dCBfQWxsb2MmIF9fYSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Ry
dWVfdHlwZSkNCiAgICAgICAgew0KICAgICAgICAgIHJldHVybiBfU19jb25z
dHJ1Y3Qoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2JlZyksDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBl
PihfX2VuZCksIF9fYSk7DQogICAgICAgIH0NCg0KICAgICAgdGVtcGxhdGU8
Y2xhc3MgX0luSXRlcj4NCiAgICAgICAgc3RhdGljIF9DaGFyVCoNCiAgICAg
ICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQs
IGNvbnN0IF9BbGxvYyYgX19hKQ0KICAgICAgICB7DQogICAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFs
IF9JbnRlZ3JhbDsNCiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0X2F1
eChfX2JlZywgX19lbmQsIF9fYSwgX0ludGVncmFsKCkpOw0KICAgICAgICB9
DQoNCg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4NCiAgICAgICAg
c3RhdGljIF9DaGFyVCoNCiAgICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVy
IF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwNCiAg
ICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOw0KDQoN
Cg0KICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+DQogICAgICAgIHN0
YXRpYyBfQ2hhclQqDQogICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBf
X2VuZCwgX0Z3ZEl0ZXIgX19iZWcsIGNvbnN0IF9BbGxvYyYgX19hLA0KICAg
ICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOw0KDQog
ICAgICBzdGF0aWMgX0NoYXJUKg0KICAgICAgX1NfY29uc3RydWN0KHNpemVf
dHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOw0K
DQogICAgcHVibGljOg0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGNvcHko
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9
IDApIGNvbnN0Ow0KDQogICAgICB2b2lkDQogICAgICBzd2FwKGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7DQoNCg0KICAg
ICAgY29uc3QgX0NoYXJUKg0KICAgICAgY19zdHIoKSBjb25zdA0KICAgICAg
ew0KDQogICAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlzLT5zaXplKCk7DQog
ICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpW19fbl0sIF9S
ZXA6Ol9TX3Rlcm1pbmFsKTsNCiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsN
CiAgICAgIH0NCg0KICAgICAgY29uc3QgX0NoYXJUKg0KICAgICAgZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEoKTsgfQ0KDQogICAgICBhbGxvY2F0
b3JfdHlwZQ0KICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
IF9NX2RhdGFwbHVzOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmlu
ZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uKSBjb25zdDsNCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5k
KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9
IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fc3RyLmRh
dGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0NCg0KICAgICAgc2l6ZV90
eXBlDQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg
X19wb3MgPSAwKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChf
X3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAg
ICAgIHNpemVfdHlwZQ0KICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5
cGUgX19wb3MgPSAwKSBjb25zdDsNCg0KICAgICAgc2l6ZV90eXBlDQogICAg
ICByZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg
X19wb3MgPSBucG9zKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+cmZp
bmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQog
ICAgICBzaXplX3R5cGUNCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0Ow0KDQog
ICAgICBzaXplX3R5cGUNCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdA0KICAgICAgeyByZXR1
cm4gdGhpcy0+cmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0
aChfX3MpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIHJmaW5kKF9D
aGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0Ow0KDQog
ICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QN
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0
YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBzaXplX3R5
cGUNCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7DQoNCiAgICAg
IHNpemVfdHlwZQ0KICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QNCiAgICAgIHsgcmV0
dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5
cGU6Omxlbmd0aChfX3MpKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAg
IGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0g
MCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19jLCBfX3Bv
cyk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5kX2xhc3Rfb2Yo
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0g
bnBvcykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9v
ZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9DQoNCiAg
ICAgIHNpemVfdHlwZQ0KICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFy
VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0
Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfbGFzdF9vZihjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QN
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3MsIF9fcG9z
LCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9DQoNCiAgICAgIHNpemVf
dHlwZQ0KICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlw
ZSBfX3BvcyA9IG5wb3MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5y
ZmluZChfX2MsIF9fcG9zKTsgfQ0KDQogICAgICBzaXplX3R5cGUNCiAgICAg
IGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
IHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0DQogICAgICB7IHJldHVybiB0
aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBf
X3N0ci5zaXplKCkpOyB9DQoNCiAgICAgIHNpemVfdHlwZQ0KICAgICAgZmlu
ZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24p
IGNvbnN0Ow0KDQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rf
bm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAw
KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rf
b2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQ0K
DQogICAgICBzaXplX3R5cGUNCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKF9D
aGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0Ow0KDQogICAg
ICBzaXplX3R5cGUNCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29u
c3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19z
dHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQ0KDQogICAgICBz
aXplX3R5cGUNCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7DQogICAgICBzaXplX3R5cGUNCiAg
ICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlz
LT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjps
ZW5ndGgoX19zKSk7IH0NCg0KICAgICAgc2l6ZV90eXBlDQogICAgICBmaW5k
X2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5w
b3MpIGNvbnN0Ow0KDQogICAgICBiYXNpY19zdHJpbmcNCiAgICAgIHN1YnN0
cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykg
Y29uc3QNCiAgICAgIHsNCiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6
ZSgpKQ0KICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19z
dHJpbmc6OnN1YnN0ciIpOw0KICAgICAgICByZXR1cm4gYmFzaWNfc3RyaW5n
KCp0aGlzLCBfX3BvcywgX19uKTsNCiAgICAgIH0NCg0KICAgICAgaW50DQog
ICAgICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0
DQogICAgICB7DQogICAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z
aXplKCk7DQogICAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6
ZSgpOw0KICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zaXplLCBf
X29zaXplKTsNCg0KICAgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNv
bXBhcmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsNCiAgICAg
ICAgaWYgKCFfX3IpDQogICAgICAgICAgX19yID0gX19zaXplIC0gX19vc2l6
ZTsNCiAgICAgICAgcmV0dXJuIF9fcjsNCiAgICAgIH0NCg0KICAgICAgaW50
DQogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f
biwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7DQoNCiAgICAg
IGludA0KICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5
cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwNCiAgICAgICAg
ICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0
Ow0KDQogICAgICBpbnQNCiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBf
X3MpIGNvbnN0Ow0KDQoNCg0KICAgICAgaW50DQogICAgICBjb21wYXJlKHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCog
X19zKSBjb25zdDsNCg0KICAgICAgaW50DQogICAgICBjb21wYXJlKHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19z
LA0KICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3Q7DQoNCiAg
fTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBiYXNpY19z
dHJpbmcoKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfZW1wdHlfcmVwKCkuX01f
cmVmY29weSgpLCBfQWxsb2MoKSkgeyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
DQogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykN
CiAgICB7DQogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+IF9fc3RyKF9fbGhzKTsNCiAgICAgIF9fc3RyLmFwcGVuZChfX3Jo
cyk7DQogICAgICByZXR1cm4gX19zdHI7DQogICAgfQ0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxs
b2M+DQogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsDQogICAg
ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf
QWxsb2M+JiBfX3Jocyk7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4NCiAgICBvcGVyYXRv
cisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9U
cmFpdHMsX0FsbG9jPiYgX19yaHMpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0K
ICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+DQogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgIGNvbnN0
IF9DaGFyVCogX19yaHMpDQogICAgew0KICAgICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7DQogICAgICBf
X3N0ci5hcHBlbmQoX19yaHMpOw0KICAgICAgcmV0dXJuIF9fc3RyOw0KICAg
IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPg0KICAgIG9wZXJhdG9yKyhj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X2xocywgX0NoYXJUIF9fcmhzKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190
eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpz
aXplX3R5cGUgX19zaXplX3R5cGU7DQogICAgICBfX3N0cmluZ190eXBlIF9f
c3RyKF9fbGhzKTsNCiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgx
KSwgX19yaHMpOw0KICAgICAgcmV0dXJuIF9fc3RyOw0KICAgIH0NCg0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAgb3BlcmF0
b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQ0KICAgIHsgcmV0
dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0NCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9yPT0oY29u
c3QgX0NoYXJUKiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQ0KICAg
IHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID09IDA7IH0NCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9y
PT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhz
KQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0N
Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAg
b3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQ0KICAg
IHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0NCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9y
IT0oY29uc3QgX0NoYXJUKiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhz
KQ0KICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0N
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9w
ZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQq
IF9fcmhzKQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9
IDA7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29s
DQogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykN
CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0NCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJh
dG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX2xocywNCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3Jo
cykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0N
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9w
ZXJhdG9yPChjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgICBj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3JocykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7
IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQog
ICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICBjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykNCiAg
ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0NCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9y
Pihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX2xocywNCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykN
CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0NCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJh
dG9yPihjb25zdCBfQ2hhclQqIF9fbGhzLA0KICAgICAgICAgICAgICBjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Jo
cykNCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8IDA7IH0N
Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBib29sDQogICAg
b3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX2xocywNCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQ0KICAg
IHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0NCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9wZXJhdG9y
PD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhz
KQ0KICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0N
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0KICAgIG9w
ZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywNCiAgICAgICAgICAgICAg
IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fcmhzKQ0KICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAw
OyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbmxpbmUgYm9vbA0K
ICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19saHMsDQogICAgICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykN
CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVy
YXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fbGhzLA0KICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBf
X3JocykNCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAw
OyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIGJvb2wNCiAg
ICBvcGVyYXRvcj49KGNvbnN0IF9DaGFyVCogX19saHMsDQogICAgICAgICAg
ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19yaHMpDQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykg
PD0gMDsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgaW5saW5lIHZv
aWQNCiAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fbGhzLA0KICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19yaHMpDQogICAgeyBfX2xocy5zd2FwKF9f
cmhzKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywNCiAgICAgICAgICAgICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3Ry
KTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsDQogICAgICAgICAgICAgICBjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0
cik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsX1RyYWl0cz4mDQogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mIF9faXMsDQogICAgICAgICAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9f
ZGVsaW0pOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGlubGluZSBiYXNp
Y19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYNCiAgICBnZXRsaW5lKGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywNCiAgICAgICAgICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3Ry
KTsNCn0NCiMgNDcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQoNCg0KIyAxICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgi
IDEgMw0KIyAzMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2FsZ29yaXRobS5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEg
Mw0KIyAzMyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2FsZ29yaXRobS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMN
CiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9hbGdvcml0aG0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEg
Mw0KIyAzNSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2FsZ29yaXRobS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzDQoj
IDM2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfYWxnb3JpdGhtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAxIDMNCiMgMzQgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
LmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2hlYXAuaCIgMSAzDQojIDMzICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaGVhcC5oIiAzDQpuYW1lc3Bh
Y2Ugc3RkDQp7DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4NCnZvaWQN
Cl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LA0K
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2Ug
X190b3BJbmRleCwgX1RwIF9fdmFsdWUpDQp7DQogIF9EaXN0YW5jZSBfX3Bh
cmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsNCiAgd2hpbGUgKF9faG9s
ZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkg
PCBfX3ZhbHVlKSB7DQogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0g
KihfX2ZpcnN0ICsgX19wYXJlbnQpOw0KICAgIF9faG9sZUluZGV4ID0gX19w
YXJlbnQ7DQogICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7
DQogIH0NCiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsN
Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg
Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+DQppbmxpbmUgdm9pZA0KX19w
dXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LA0K
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs
IF9EaXN0YW5jZSosIF9UcCopDQp7DQogIF9fcHVzaF9oZWFwKF9fZmlyc3Qs
IF9EaXN0YW5jZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNl
KDApLA0KICAgICAgICAgICAgICBfVHAoKihfX2xhc3QgLSAxKSkpOw0KfQ0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPg0KaW5s
aW5lIHZvaWQNCnB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkNCnsNCg0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOw0KDQoNCiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3Qs
IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf
X2ZpcnN0KSwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh
bmNlLCBjbGFzcyBfVHAsDQogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+DQp2
b2lkDQpfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
dCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LA0KICAgICAgICAgICAgX0Rpc3Rh
bmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXAp
DQp7DQogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEp
IC8gMjsNCiAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBf
X2NvbXAoKihfX2ZpcnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgew0KICAg
ICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFy
ZW50KTsNCiAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50Ow0KICAgIF9fcGFy
ZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOw0KICB9DQogICooX19maXJz
dCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlLA0K
ICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPg0KaW5saW5l
IHZvaWQNCl9fcHVzaF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19maXJzdCwNCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXAsDQogICAgICAgICAgICAgICAg
X0Rpc3RhbmNlKiwgX1RwKikNCnsNCiAgX19wdXNoX2hlYXAoX19maXJzdCwg
X0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2Uo
MCksDQogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19jb21w
KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZA0KcHVzaF9oZWFwKF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19sYXN0LA0KICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsN
Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIF9f
cHVzaF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCwNCiAgICAg
ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwgX192YWx1
ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+
DQp2b2lkDQpfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsDQogICAgICAgICAgICAg
IF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpDQp7DQogIF9EaXN0YW5j
ZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7DQogIF9EaXN0YW5jZSBfX3Nl
Y29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsNCiAgd2hpbGUgKF9f
c2Vjb25kQ2hpbGQgPCBfX2xlbikgew0KICAgIGlmICgqKF9fZmlyc3QgKyBf
X3NlY29uZENoaWxkKSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0g
MSkpKQ0KICAgICAgX19zZWNvbmRDaGlsZC0tOw0KICAgICooX19maXJzdCAr
IF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOw0K
ICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsNCiAgICBfX3NlY29u
ZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7DQogIH0NCiAgaWYg
KF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsNCiAgICAqKF9fZmlyc3QgKyBf
X2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEp
KTsNCiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOw0KICB9
DQogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcElu
ZGV4LCBfX3ZhbHVlKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+DQpp
bmxpbmUgdm9pZA0KX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192
YWx1ZSwgX0Rpc3RhbmNlKikNCnsNCiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7
DQogIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlz
dGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFsdWUpOw0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHA+
DQppbmxpbmUgdm9pZA0KX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs
DQogICAgICAgICAgICAgICBfVHAqKQ0Kew0KICBfX3BvcF9oZWFwKF9fZmly
c3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsDQogICAgICAgICAgICAgX1Rw
KCooX19sYXN0IC0gMSkpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0K
fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPg0K
aW5saW5lIHZvaWQgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19sYXN0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBf
X3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShf
X2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwNCiAgICAgICAgICBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlPg0Kdm9pZA0KX19hZGp1c3RfaGVhcChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUlu
ZGV4LA0KICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3Zh
bHVlLCBfQ29tcGFyZSBfX2NvbXApDQp7DQogIF9EaXN0YW5jZSBfX3RvcElu
ZGV4ID0gX19ob2xlSW5kZXg7DQogIF9EaXN0YW5jZSBfX3NlY29uZENoaWxk
ID0gMiAqIF9faG9sZUluZGV4ICsgMjsNCiAgd2hpbGUgKF9fc2Vjb25kQ2hp
bGQgPCBfX2xlbikgew0KICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19z
ZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkp
KSkNCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsNCiAgICAqKF9fZmlyc3QgKyBf
X2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsNCiAg
ICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7DQogICAgX19zZWNvbmRD
aGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOw0KICB9DQogIGlmIChf
X3NlY29uZENoaWxkID09IF9fbGVuKSB7DQogICAgKihfX2ZpcnN0ICsgX19o
b2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7
DQogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsNCiAgfQ0K
ICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRl
eCwgX192YWx1ZSwgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy
ZSwNCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+DQppbmxpbmUgdm9pZA0K
X19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0NvbXBh
cmUgX19jb21wLA0KICAgICAgICAgICBfRGlzdGFuY2UqKQ0Kew0KICAqX19y
ZXN1bHQgPSAqX19maXJzdDsNCiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBf
RGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwNCiAg
ICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNs
YXNzIF9Db21wYXJlPg0KaW5saW5lIHZvaWQNCl9fcG9wX2hlYXBfYXV4KF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUg
X19jb21wKQ0Kew0KICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEs
IF9fbGFzdCAtIDEsIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19jb21wLA0KICAg
ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9D
b21wYXJlPg0KaW5saW5lIHZvaWQNCnBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgX19wb3BfaGVhcF9hdXgo
X19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29t
cCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPg0Kdm9pZA0KX19tYWtl
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfVHAqLCBfRGlz
dGFuY2UqKQ0Kew0KICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVy
bjsNCiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsNCiAg
X0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsNCg0KICB3aGls
ZSAodHJ1ZSkgew0KICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJl
bnQsIF9fbGVuLCBfVHAoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7DQogICAg
aWYgKF9fcGFyZW50ID09IDApIHJldHVybjsNCiAgICBfX3BhcmVudC0tOw0K
ICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
b3I+DQppbmxpbmUgdm9pZA0KbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQ0K
ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBfX21ha2VfaGVhcChfX2Zp
cnN0LCBfX2xhc3QsDQogICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2Zp
cnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBh
cmUsDQogICAgICAgICAgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+DQp2
b2lkDQpfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwNCiAgICAgICAgICAg
IF9Db21wYXJlIF9fY29tcCwgX1RwKiwgX0Rpc3RhbmNlKikNCnsNCiAgaWYg
KF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47DQogIF9EaXN0YW5jZSBf
X2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7DQogIF9EaXN0YW5jZSBfX3BhcmVu
dCA9IChfX2xlbiAtIDIpLzI7DQoNCiAgd2hpbGUgKHRydWUpIHsNCiAgICBf
X2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1RwKCoo
X19maXJzdCArIF9fcGFyZW50KSksDQogICAgICAgICAgICAgICAgICBfX2Nv
bXApOw0KICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47DQogICAgX19w
YXJlbnQtLTsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSB2b2lkDQpt
YWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsDQogICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUg
X19jb21wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ow0KDQoNCiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LCBfX2NvbXAs
DQogICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0
YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyYXRvcj4NCnZvaWQgc29ydF9oZWFwKF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19sYXN0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3aGlsZSAo
X19sYXN0IC0gX19maXJzdCA+IDEpDQogICAgcG9wX2hlYXAoX19maXJzdCwg
X19sYXN0LS0pOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQNCnNvcnRfaGVhcChf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwNCiAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApDQp7
DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3
aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpDQogICAgcG9wX2hlYXAoX19m
aXJzdCwgX19sYXN0LS0sIF9fY29tcCk7DQp9DQoNCn0NCiMgMzUgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgi
IDIgMw0KDQoNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KDQoNCg0KdGVtcGxhdGUg
PGNsYXNzIF9UcD4NCmlubGluZSBjb25zdCBfVHAmIF9fbWVkaWFuKGNvbnN0
IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpDQp7
DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOw0KICBpZiAoX19hIDwgX19iKQ0KICAg
IGlmIChfX2IgPCBfX2MpDQogICAgICByZXR1cm4gX19iOw0KICAgIGVsc2Ug
aWYgKF9fYSA8IF9fYykNCiAgICAgIHJldHVybiBfX2M7DQogICAgZWxzZQ0K
ICAgICAgcmV0dXJuIF9fYTsNCiAgZWxzZSBpZiAoX19hIDwgX19jKQ0KICAg
IHJldHVybiBfX2E7DQogIGVsc2UgaWYgKF9fYiA8IF9fYykNCiAgICByZXR1
cm4gX19jOw0KICBlbHNlDQogICAgcmV0dXJuIF9fYjsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgY29uc3Qg
X1RwJg0KX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19i
LCBjb25zdCBfVHAmIF9fYywgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICBpZiAoX19jb21w
KF9fYSwgX19iKSkNCiAgICBpZiAoX19jb21wKF9fYiwgX19jKSkNCiAgICAg
IHJldHVybiBfX2I7DQogICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkN
CiAgICAgIHJldHVybiBfX2M7DQogICAgZWxzZQ0KICAgICAgcmV0dXJuIF9f
YTsNCiAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkNCiAgICByZXR1cm4g
X19hOw0KICBlbHNlIGlmIChfX2NvbXAoX19iLCBfX2MpKQ0KICAgIHJldHVy
biBfX2M7DQogIGVsc2UNCiAgICByZXR1cm4gX19iOw0KfQ0KDQoNCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRnVuY3Rpb24+DQpfRnVu
Y3Rpb24gZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikNCnsNCg0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
KQ0KICAgIF9fZigqX19maXJzdCk7DQogIHJldHVybiBfX2Y7DQp9DQoNCg0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPg0KaW5s
aW5lIF9JbnB1dEl0ZXIgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
VHAmIF9fdmFsLA0KICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVy
YXRvcl90YWcpDQp7DQogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAh
KCpfX2ZpcnN0ID09IF9fdmFsKSkNCiAgICArK19fZmlyc3Q7DQogIHJldHVy
biBfX2ZpcnN0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX1ByZWRpY2F0ZT4NCmlubGluZSBfSW5wdXRJdGVyIGZpbmRfaWYo
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykNCnsN
CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmly
c3QpKQ0KICAgICsrX19maXJzdDsNCiAgcmV0dXJuIF9fZmlyc3Q7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Rw
Pg0KX1JhbmRvbUFjY2Vzc0l0ZXIgZmluZChfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsDQogICAgICAgICAgICAg
ICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQ0Kew0KICB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojpk
aWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50DQogICAgPSAoX19sYXN0IC0g
X19maXJzdCkgPj4gMjsNCg0KICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAg
OyAtLV9fdHJpcF9jb3VudCkgew0KICAgIGlmICgqX19maXJzdCA9PSBfX3Zh
bCkgcmV0dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KDQogICAgaWYg
KCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICArK19f
Zmlyc3Q7DQoNCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBf
X2ZpcnN0Ow0KICAgICsrX19maXJzdDsNCg0KICAgIGlmICgqX19maXJzdCA9
PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICB9
DQoNCiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsNCiAgY2FzZSAzOg0K
ICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7DQog
ICAgKytfX2ZpcnN0Ow0KICBjYXNlIDI6DQogICAgaWYgKCpfX2ZpcnN0ID09
IF9fdmFsKSByZXR1cm4gX19maXJzdDsNCiAgICArK19fZmlyc3Q7DQogIGNh
c2UgMToNCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2Zp
cnN0Ow0KICAgICsrX19maXJzdDsNCiAgY2FzZSAwOg0KICBkZWZhdWx0Og0K
ICAgIHJldHVybiBfX2xhc3Q7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUHJlZGljYXRlPg0KX1JhbmRv
bUFjY2Vzc0l0ZXIgZmluZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykNCnsNCiAg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6
ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudA0KICAgID0gKF9fbGFzdCAt
IF9fZmlyc3QpID4+IDI7DQoNCiAgZm9yICggOyBfX3RyaXBfY291bnQgPiAw
IDsgLS1fX3RyaXBfY291bnQpIHsNCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0
KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KDQogICAgaWYg
KF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Ow0KICAgICsrX19m
aXJzdDsNCg0KICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19m
aXJzdDsNCiAgICArK19fZmlyc3Q7DQoNCiAgICBpZiAoX19wcmVkKCpfX2Zp
cnN0KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICB9DQoN
CiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsNCiAgY2FzZSAzOg0KICAg
IGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsNCiAgICAr
K19fZmlyc3Q7DQogIGNhc2UgMjoNCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0
KSkgcmV0dXJuIF9fZmlyc3Q7DQogICAgKytfX2ZpcnN0Ow0KICBjYXNlIDE6
DQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Ow0K
ICAgICsrX19maXJzdDsNCiAgY2FzZSAwOg0KICBkZWZhdWx0Og0KICAgIHJl
dHVybiBfX2xhc3Q7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9UcD4NCmlubGluZSBfSW5wdXRJdGVyIGZpbmQoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkNCnsNCg0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAg
cmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRv
cl9jYXRlZ29yeShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPg0KaW5saW5lIF9JbnB1dEl0
ZXIgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f
cHJlZCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsNCg0KICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9f
cHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7DQp9DQoNCg0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPg0KX0ZvcndhcmRJdGVy
IGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KDQogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkN
CiAgICByZXR1cm4gX19sYXN0Ow0KICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0g
X19maXJzdDsNCiAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7DQogICAg
aWYgKCpfX2ZpcnN0ID09ICpfX25leHQpDQogICAgICByZXR1cm4gX19maXJz
dDsNCiAgICBfX2ZpcnN0ID0gX19uZXh0Ow0KICB9DQogIHJldHVybiBfX2xh
c3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9CaW5hcnlQcmVkaWNhdGU+DQpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmlu
ZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg
X19iaW5hcnlfcHJlZCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpDQogICAgcmV0dXJuIF9fbGFzdDsNCiAgX0ZvcndhcmRJdGVyIF9fbmV4
dCA9IF9fZmlyc3Q7DQogIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgew0K
ICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkNCiAg
ICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIF9fZmlyc3QgPSBfX25leHQ7DQog
IH0NCiAgcmV0dXJuIF9fbGFzdDsNCn0NCg0KDQoNCg0KDQoNCg0KdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+
DQp2b2lkIGNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSwNCiAgICAgICAgICAgX1NpemUm
IF9fbikNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgIGlmICgqX19maXJzdCA9PSBf
X3ZhbHVlKQ0KICAgICAgKytfX247DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfU2l6ZT4NCnZv
aWQgY291bnRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQsDQogICAgICAgICAgICAgIF9TaXpl
JiBfX24pDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KDQogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkNCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkNCiAgICAgICsrX19uOw0K
fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPg0K
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJl
bmNlX3R5cGUNCmNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkNCnsNCg0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsNCiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsNCiAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgIGlmICgqX19maXJzdCA9PSBf
X3ZhbHVlKQ0KICAgICAgKytfX247DQogIHJldHVybiBfX247DQp9DQoNCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPg0K
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJl
bmNlX3R5cGUNCmNvdW50X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQ0Kew0KDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBf
X24gPSAwOw0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly
c3QpDQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpDQogICAgICArK19fbjsN
CiAgcmV0dXJuIF9fbjsNCn0NCg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+DQpfRm9yd2FyZEl0
ZXIxIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0
ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpDQp7DQoNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQoNCiAgaWYgKF9fZmly
c3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikNCiAgICBy
ZXR1cm4gX19maXJzdDE7DQoNCg0KICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9f
Zmlyc3QyKTsNCiAgKytfX3RtcDsNCiAgaWYgKF9fdG1wID09IF9fbGFzdDIp
DQogICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0
Mik7DQoNCg0KDQogIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOw0KDQogIF9f
cDEgPSBfX2ZpcnN0MjsgKytfX3AxOw0KDQogIF9Gb3J3YXJkSXRlcjEgX19j
dXJyZW50ID0gX19maXJzdDE7DQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEpIHsNCiAgICBfX2ZpcnN0MSA9IGZpbmQoX19maXJzdDEsIF9fbGFz
dDEsICpfX2ZpcnN0Mik7DQogICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEp
DQogICAgICByZXR1cm4gX19sYXN0MTsNCg0KICAgIF9fcCA9IF9fcDE7DQog
ICAgX19jdXJyZW50ID0gX19maXJzdDE7DQogICAgaWYgKCsrX19jdXJyZW50
ID09IF9fbGFzdDEpDQogICAgICByZXR1cm4gX19sYXN0MTsNCg0KICAgIHdo
aWxlICgqX19jdXJyZW50ID09ICpfX3ApIHsNCiAgICAgIGlmICgrK19fcCA9
PSBfX2xhc3QyKQ0KICAgICAgICByZXR1cm4gX19maXJzdDE7DQogICAgICBp
ZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkNCiAgICAgICAgcmV0dXJuIF9f
bGFzdDE7DQogICAgfQ0KDQogICAgKytfX2ZpcnN0MTsNCiAgfQ0KICByZXR1
cm4gX19maXJzdDE7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZD4N
Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs
IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0
MiwNCiAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGlj
YXRlKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0K
DQogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9f
bGFzdDIpDQogICAgcmV0dXJuIF9fZmlyc3QxOw0KDQoNCiAgX0ZvcndhcmRJ
dGVyMiBfX3RtcChfX2ZpcnN0Mik7DQogICsrX190bXA7DQogIGlmIChfX3Rt
cCA9PSBfX2xhc3QyKSB7DQogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAg
ICAgICsrX19maXJzdDE7DQogICAgcmV0dXJuIF9fZmlyc3QxOw0KICB9DQoN
Cg0KDQogIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOw0KDQogIF9fcDEgPSBf
X2ZpcnN0MjsgKytfX3AxOw0KDQogIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50
ID0gX19maXJzdDE7DQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEp
IHsNCiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgew0KICAgICAg
aWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAgICAg
ICAgYnJlYWs7DQogICAgICArK19fZmlyc3QxOw0KICAgIH0NCiAgICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmly
c3QxLCAqX19maXJzdDIpKQ0KICAgICAgKytfX2ZpcnN0MTsNCiAgICBpZiAo
X19maXJzdDEgPT0gX19sYXN0MSkNCiAgICAgIHJldHVybiBfX2xhc3QxOw0K
DQogICAgX19wID0gX19wMTsNCiAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsN
CiAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFz
dDE7DQoNCiAgICB3aGlsZSAoX19wcmVkaWNhdGUoKl9fY3VycmVudCwgKl9f
cCkpIHsNCiAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQ0KICAgICAgICBy
ZXR1cm4gX19maXJzdDE7DQogICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19s
YXN0MSkNCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7DQogICAgfQ0KDQogICAg
KytfX2ZpcnN0MTsNCiAgfQ0KICByZXR1cm4gX19maXJzdDE7DQp9DQoNCg0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfSW50ZWdl
ciwgY2xhc3MgX1RwPg0KX0ZvcndhcmRJdGVyIHNlYXJjaF9uKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAg
ICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192
YWwpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICBpZiAoX19jb3Vu
dCA8PSAwKQ0KICAgIHJldHVybiBfX2ZpcnN0Ow0KICBlbHNlIHsNCiAgICBf
X2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsNCiAgICB3
aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAgIF9JbnRlZ2VyIF9f
biA9IF9fY291bnQgLSAxOw0KICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9f
Zmlyc3Q7DQogICAgICArK19faTsNCiAgICAgIHdoaWxlIChfX2kgIT0gX19s
YXN0ICYmIF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwpIHsNCiAgICAgICAg
KytfX2k7DQogICAgICAgIC0tX19uOw0KICAgICAgfQ0KICAgICAgaWYgKF9f
biA9PSAwKQ0KICAgICAgICByZXR1cm4gX19maXJzdDsNCiAgICAgIGVsc2UN
CiAgICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsN
CiAgICB9DQogICAgcmV0dXJuIF9fbGFzdDsNCiAgfQ0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfSW50ZWdlciwgY2xhc3Mg
X1RwLCBjbGFzcyBfQmluYXJ5UHJlZD4NCl9Gb3J3YXJkSXRlciBzZWFyY2hf
bihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwN
CiAgICAgICAgICAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25z
dCBfVHAmIF9fdmFsLA0KICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQ
cmVkIF9fYmluYXJ5X3ByZWQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19jb3Vu
dCA8PSAwKQ0KICAgIHJldHVybiBfX2ZpcnN0Ow0KICBlbHNlIHsNCiAgICB3
aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsNCiAgICAgIGlmIChfX2JpbmFy
eV9wcmVkKCpfX2ZpcnN0LCBfX3ZhbCkpDQogICAgICAgIGJyZWFrOw0KICAg
ICAgKytfX2ZpcnN0Ow0KICAgIH0NCiAgICB3aGlsZSAoX19maXJzdCAhPSBf
X2xhc3QpIHsNCiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOw0K
ICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7DQogICAgICArK19f
aTsNCiAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYm
IF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7DQogICAgICAgICsrX19p
Ow0KICAgICAgICAtLV9fbjsNCiAgICAgIH0NCiAgICAgIGlmIChfX24gPT0g
MCkNCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7DQogICAgICBlbHNlIHsNCiAg
ICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QpIHsNCiAgICAgICAgICBpZiAo
X19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpDQogICAgICAgICAgICBicmVh
azsNCiAgICAgICAgICArK19faTsNCiAgICAgICAgfQ0KICAgICAgICBfX2Zp
cnN0ID0gX19pOw0KICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gX19sYXN0
Ow0KICB9DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
MSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4NCl9Gb3J3YXJkSXRlcjIgc3dhcF9y
YW5nZXMoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBf
X2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIyIF9fZmlyc3QyKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsNCg0KDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN
Cg0KICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEs
ICsrX19maXJzdDIpDQogICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0
Mik7DQogIHJldHVybiBfX2ZpcnN0MjsNCn0NCg0KDQoNCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1Vu
YXJ5T3BlcmF0aW9uPg0KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9VbmFyeU9wZXJhdGlv
biBfX3VuYXJ5X29wKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN
Cg0KDQoNCg0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly
c3QsICsrX19yZXN1bHQpDQogICAgKl9fcmVzdWx0ID0gX191bmFyeV9vcCgq
X19maXJzdCk7DQogIHJldHVybiBfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3Mg
X091dHB1dEl0ZXIsDQogICAgICAgICAgY2xhc3MgX0JpbmFyeU9wZXJhdGlv
bj4NCl9PdXRwdXRJdGVyIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIgX19yZXN1bHQs
DQogICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2Jp
bmFyeV9vcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsNCg0KDQoNCg0KDQoNCiAgZm9yICggOyBfX2ZpcnN0
MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVz
dWx0KQ0KICAgICpfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKTsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQoNCg0KdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0Kdm9pZCBy
ZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LA0KICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNv
bnN0IF9UcCYgX19uZXdfdmFsdWUpDQp7DQoNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOw0KDQoNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz
dDsgKytfX2ZpcnN0KQ0KICAgIGlmICgqX19maXJzdCA9PSBfX29sZF92YWx1
ZSkNCiAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7DQp9DQoNCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNs
YXNzIF9UcD4NCnZvaWQgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICBfUHJl
ZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkNCnsNCg0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgIGlmIChfX3ByZWQoKl9f
Zmlyc3QpKQ0KICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsNCn0NCg0K
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVy
LCBjbGFzcyBfVHA+DQpfT3V0cHV0SXRlciByZXBsYWNlX2NvcHkoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25z
dCBfVHAmIF9fbmV3X3ZhbHVlKQ0Kew0KDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN
CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19f
cmVzdWx0KQ0KICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0ID09IF9fb2xkX3Zh
bHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsNCiAgcmV0dXJuIF9fcmVz
dWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcD4NCl9P
dXRwdXRJdGVyIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3
X3ZhbHVlKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGZvciAoIDsgX19maXJz
dCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkNCiAgICAqX19y
ZXN1bHQgPSBfX3ByZWQoKl9fZmlyc3QpID8gX19uZXdfdmFsdWUgOiAqX19m
aXJzdDsNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQoNCg0KdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0dlbmVyYXRvcj4NCnZvaWQg
Z2VuZXJhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsIF9HZW5lcmF0b3IgX19nZW4pDQp7DQoNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQ0KICAgICpfX2ZpcnN0ID0g
X19nZW4oKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVyLCBj
bGFzcyBfU2l6ZSwgY2xhc3MgX0dlbmVyYXRvcj4NCl9PdXRwdXRJdGVyIGdl
bmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBfR2Vu
ZXJhdG9yIF9fZ2VuKQ0Kew0KDQoNCg0KDQoNCg0KICBmb3IgKCA7IF9fbiA+
IDA7IC0tX19uLCArK19fZmlyc3QpDQogICAgKl9fZmlyc3QgPSBfX2dlbigp
Ow0KICByZXR1cm4gX19maXJzdDsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPg0K
X091dHB1dEl0ZXIgcmVtb3ZlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpDQp7DQoN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7DQoNCg0KICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpDQogICAgaWYgKCEoKl9fZmlyc3QgPT0gX192YWx1
ZSkpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICAgICAgKytf
X3Jlc3VsdDsNCiAgICB9DQogIHJldHVybiBfX3Jlc3VsdDsNCn0NCg0KdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBj
bGFzcyBfUHJlZGljYXRlPg0KX091dHB1dEl0ZXIgcmVtb3ZlX2NvcHlfaWYo
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf
UHJlZGljYXRlIF9fcHJlZCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpDQogICAgaWYgKCFf
X3ByZWQoKl9fZmlyc3QpKSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDsNCiAgICAgICsrX19yZXN1bHQ7DQogICAgfQ0KICByZXR1cm4gX19yZXN1
bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9UcD4NCl9Gb3J3YXJkSXRlciByZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX192YWx1ZSkNCnsNCg0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7DQoNCg0KICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBf
X2xhc3QsIF9fdmFsdWUpOw0KICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJz
dDsNCiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weSgrK19faSwg
X19sYXN0LCBfX2ZpcnN0LCBfX3ZhbHVlKTsNCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4NCl9Gb3J3YXJk
SXRlciByZW1vdmVfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNh
dGUgX19wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgX19maXJzdCA9IGZpbmRf
aWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOw0KICBfRm9yd2FyZEl0ZXIg
X19pID0gX19maXJzdDsNCiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8g
X19maXJzdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVf
Y29weV9pZigrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOw0KfQ0K
DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRw
dXRJdGVyLCBjbGFzcyBfVHA+DQpfT3V0cHV0SXRlciBfX3VuaXF1ZV9jb3B5
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf
VHAqKQ0Kew0KDQogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7DQogICpfX3Jl
c3VsdCA9IF9fdmFsdWU7DQogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0
KQ0KICAgIGlmICghKF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7DQogICAgICBf
X3ZhbHVlID0gKl9fZmlyc3Q7DQogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFs
dWU7DQogICAgfQ0KICByZXR1cm4gKytfX3Jlc3VsdDsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KaW5s
aW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykN
CnsNCg0KICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPg0K
X0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgZm9yd2FyZF9pdGVyYXRvcl90
YWcpDQp7DQoNCiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7DQogIHdoaWxlICgr
K19fZmlyc3QgIT0gX19sYXN0KQ0KICAgIGlmICghKCpfX3Jlc3VsdCA9PSAq
X19maXJzdCkpDQogICAgICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0Ow0KICBy
ZXR1cm4gKytfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KaW5saW5lIF9PdXRwdXRJdGVy
IHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7DQogIHJldHVybiBf
X3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsDQogICAg
ICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19yZXN1
bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlLA0KICAgICAg
ICAgIGNsYXNzIF9UcD4NCl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5h
cnlfcHJlZCwgX1RwKikNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsNCg0KICBfVHAgX192YWx1ZSA9ICpfX2ZpcnN0Ow0K
ICAqX19yZXN1bHQgPSBfX3ZhbHVlOw0KICB3aGlsZSAoKytfX2ZpcnN0ICE9
IF9fbGFzdCkNCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoX192YWx1ZSwgKl9f
Zmlyc3QpKSB7DQogICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7DQogICAgICAq
KytfX3Jlc3VsdCA9IF9fdmFsdWU7DQogICAgfQ0KICByZXR1cm4gKytfX3Jl
c3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPg0KaW5saW5l
IF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFy
eV9wcmVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0X2l0ZXJhdG9yX3RhZykNCnsNCg0KICByZXR1cm4gX191bmlxdWVfY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLA0K
ICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkp
Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Zv
cndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPg0KX0ZvcndhcmRJ
dGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlciBfX3Jlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0Kew0KDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOw0KDQoNCg0KICAqX19yZXN1bHQgPSAqX19maXJzdDsN
CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpDQogICAgaWYgKCFfX2Jp
bmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytfX3Jlc3VsdCA9
ICpfX2ZpcnN0Ow0KICByZXR1cm4gKytfX3Jlc3VsdDsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz
cyBfQmluYXJ5UHJlZGljYXRlPg0KaW5saW5lIF9PdXRwdXRJdGVyIHVuaXF1
ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
bmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQ0Kew0KDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0Ow0KICByZXR1cm4gX191bmlx
dWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9w
cmVkLA0KICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fcmVzdWx0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXI+DQpfRm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQ0Kew0KDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAg
X19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0KTsNCiAg
cmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7
DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9C
aW5hcnlQcmVkaWNhdGU+DQpfRm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAg
ICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpDQp7
DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7DQoNCg0KDQogIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9f
Zmlyc3QsIF9fbGFzdCwgX19iaW5hcnlfcHJlZCk7DQogIHJldHVybiB1bmlx
dWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmluYXJ5X3By
ZWQpOw0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlcj4NCnZvaWQgX19yZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAg
ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpIHsNCiAgd2hpbGUgKHRy
dWUpDQogICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0g
LS1fX2xhc3QpDQogICAgICByZXR1cm47DQogICAgZWxzZQ0KICAgICAgaXRl
cl9zd2FwKF9fZmlyc3QrKywgX19sYXN0KTsNCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyPg0Kdm9pZCBfX3JldmVyc2UoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LA0KICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcp
IHsNCiAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpDQogICAgaXRlcl9zd2Fw
KF9fZmlyc3QrKywgLS1fX2xhc3QpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyPg0KaW5saW5lIHZvaWQgcmV2ZXJzZShfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bGFzdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K
ICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+DQpfT3V0cHV0SXRlciBy
ZXZlcnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz
dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICB3aGlsZSAoX19m
aXJzdCAhPSBfX2xhc3QpIHsNCiAgICAtLV9fbGFzdDsNCiAgICAqX19yZXN1
bHQgPSAqX19sYXN0Ow0KICAgICsrX19yZXN1bHQ7DQogIH0NCiAgcmV0dXJu
IF9fcmVzdWx0Ow0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9FdWNsaWRl
YW5SaW5nRWxlbWVudD4NCl9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX2djZChf
RXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pDQp7DQogIHdo
aWxlIChfX24gIT0gMCkgew0KICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBf
X3QgPSBfX20gJSBfX247DQogICAgX19tID0gX19uOw0KICAgIF9fbiA9IF9f
dDsNCiAgfQ0KICByZXR1cm4gX19tOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQpfRm9yd2FyZEl0ZXIg
X19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlKiwNCiAgICAgICAgICAgICAgICAgICAgICBm
b3J3YXJkX2l0ZXJhdG9yX3RhZykNCnsNCiAgaWYgKF9fZmlyc3QgPT0gX19t
aWRkbGUpDQogICAgcmV0dXJuIF9fbGFzdDsNCiAgaWYgKF9fbGFzdCA9PSBf
X21pZGRsZSkNCiAgICByZXR1cm4gX19maXJzdDsNCg0KICBfRm9yd2FyZEl0
ZXIgX19maXJzdDIgPSBfX21pZGRsZTsNCiAgZG8gew0KICAgIHN3YXAoKl9f
Zmlyc3QrKywgKl9fZmlyc3QyKyspOw0KICAgIGlmIChfX2ZpcnN0ID09IF9f
bWlkZGxlKQ0KICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsNCiAgfSB3aGls
ZSAoX19maXJzdDIgIT0gX19sYXN0KTsNCg0KICBfRm9yd2FyZEl0ZXIgX19u
ZXdfbWlkZGxlID0gX19maXJzdDsNCg0KICBfX2ZpcnN0MiA9IF9fbWlkZGxl
Ow0KDQogIHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpIHsNCiAgICBzd2Fw
ICgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7DQogICAgaWYgKF9fZmlyc3Qg
PT0gX19taWRkbGUpDQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOw0KICAg
IGVsc2UgaWYgKF9fZmlyc3QyID09IF9fbGFzdCkNCiAgICAgIF9fZmlyc3Qy
ID0gX19taWRkbGU7DQogIH0NCg0KICByZXR1cm4gX19uZXdfbWlkZGxlOw0K
fQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNs
YXNzIF9EaXN0YW5jZT4NCl9CaWRpcmVjdGlvbmFsSXRlciBfX3JvdGF0ZShf
QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Uq
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KDQoNCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpDQogICAgcmV0
dXJuIF9fbGFzdDsNCiAgaWYgKF9fbGFzdCA9PSBfX21pZGRsZSkNCiAgICBy
ZXR1cm4gX19maXJzdDsNCg0KICBfX3JldmVyc2UoX19maXJzdCwgX19taWRk
bGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOw0KICBfX3JldmVy
c2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcoKSk7DQoNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRkbGUgJiYgX19t
aWRkbGUgIT0gX19sYXN0KQ0KICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9f
bGFzdCk7DQoNCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpIHsNCiAgICBf
X3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcoKSk7DQogICAgcmV0dXJuIF9fbGFzdDsNCiAgfQ0KICBlbHNl
IHsNCiAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnKCkpOw0KICAgIHJldHVybiBfX2ZpcnN0Ow0K
ICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+DQpfUmFuZG9tQWNjZXNzSXRl
ciBfX3JvdGF0ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRk
bGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlz
dGFuY2UgKiwgX1RwICopDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsNCg0KDQogIF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0
Ow0KICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBfX2ZpcnN0Ow0KICBf
RGlzdGFuY2UgX19sID0gX19uIC0gX19rOw0KICBfUmFuZG9tQWNjZXNzSXRl
ciBfX3Jlc3VsdCA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19taWRkbGUpOw0K
DQogIGlmIChfX2sgPT0gMCkNCiAgICByZXR1cm4gX19sYXN0Ow0KDQogIGVs
c2UgaWYgKF9fayA9PSBfX2wpIHsNCiAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0
LCBfX21pZGRsZSwgX19taWRkbGUpOw0KICAgIHJldHVybiBfX3Jlc3VsdDsN
CiAgfQ0KDQogIF9EaXN0YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7DQoN
CiAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykg
ew0KICAgIF9UcCBfX3RtcCA9ICpfX2ZpcnN0Ow0KICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fcCA9IF9fZmlyc3Q7DQoNCiAgICBpZiAoX19rIDwgX19sKSB7
DQogICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19k
OyBfX2orKykgew0KICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9fbCkg
ew0KICAgICAgICAgICpfX3AgPSAqKF9fcCAtIF9fbCk7DQogICAgICAgICAg
X19wIC09IF9fbDsNCiAgICAgICAgfQ0KDQogICAgICAgICpfX3AgPSAqKF9f
cCArIF9fayk7DQogICAgICAgIF9fcCArPSBfX2s7DQogICAgICB9DQogICAg
fQ0KDQogICAgZWxzZSB7DQogICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAw
OyBfX2ogPCBfX2svX19kIC0gMTsgX19qICsrKSB7DQogICAgICAgIGlmIChf
X3AgPCBfX2xhc3QgLSBfX2spIHsNCiAgICAgICAgICAqX19wID0gKihfX3Ag
KyBfX2spOw0KICAgICAgICAgIF9fcCArPSBfX2s7DQogICAgICAgIH0NCg0K
ICAgICAgICAqX19wID0gKiAoX19wIC0gX19sKTsNCiAgICAgICAgX19wIC09
IF9fbDsNCiAgICAgIH0NCiAgICB9DQoNCiAgICAqX19wID0gX190bXA7DQog
ICAgKytfX2ZpcnN0Ow0KICB9DQoNCiAgcmV0dXJuIF9fcmVzdWx0Ow0KfQ0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPg0KaW5saW5lIF9Gb3J3
YXJkSXRlciByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7DQoNCiAgcmV0dXJuIF9fcm90YXRlKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNl
X3R5cGUoX19maXJzdCksDQogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y
X2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+DQpfT3V0cHV0SXRlciBy
b3RhdGVfY29weShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAg
cmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUs
IF9fbGFzdCwgX19yZXN1bHQpKTsNCn0NCg0KDQoNCg0KdGVtcGxhdGUgPGNs
YXNzIF9EaXN0YW5jZT4NCmlubGluZSBfRGlzdGFuY2UgX19yYW5kb21fbnVt
YmVyKF9EaXN0YW5jZSBfX24pIHsNCg0KICByZXR1cm4gbHJhbmQ0OCgpICUg
X19uOw0KDQoNCg0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyPg0KaW5saW5lIHZvaWQgcmFuZG9tX3NodWZmbGUoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmlyc3QgPT0gX19s
YXN0KSByZXR1cm47DQogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0g
X19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQ0KICAgIGl0ZXJf
c3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9f
Zmlyc3QpICsgMSkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+DQp2b2lk
IHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQ0Kew0KDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpIHJldHVybjsNCiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg
PSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpDQogICAgaXRl
cl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZCgoX19pIC0gX19maXJzdCkg
KyAxKSk7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPg0KX091dHB1
dEl0ZXIgcmFuZG9tX3NhbXBsZV9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19uKQ0K
ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsNCg0KDQogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7DQogIGRpc3Rh
bmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5pbmcpOw0KICBfRGlzdGFu
Y2UgX19tID0gbWluKF9fbiwgX19yZW1haW5pbmcpOw0KDQogIHdoaWxlIChf
X20gPiAwKSB7DQogICAgaWYgKF9fcmFuZG9tX251bWJlcihfX3JlbWFpbmlu
ZykgPCBfX20pIHsNCiAgICAgICpfX291dCA9ICpfX2ZpcnN0Ow0KICAgICAg
KytfX291dDsNCiAgICAgIC0tX19tOw0KICAgIH0NCg0KICAgIC0tX19yZW1h
aW5pbmc7DQogICAgKytfX2ZpcnN0Ow0KICB9DQogIHJldHVybiBfX291dDsN
Cn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091
dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwNCiAgICAgICAgICBjbGFzcyBf
UmFuZG9tTnVtYmVyR2VuZXJhdG9yPg0KX091dHB1dEl0ZXIgcmFuZG9tX3Nh
bXBsZV9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19uLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkN
CnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsNCg0KDQogIF9EaXN0YW5jZSBfX3JlbWFpbmlu
ZyA9IDA7DQogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5p
bmcpOw0KICBfRGlzdGFuY2UgX19tID0gbWluKF9fbiwgX19yZW1haW5pbmcp
Ow0KDQogIHdoaWxlIChfX20gPiAwKSB7DQogICAgaWYgKF9fcmFuZChfX3Jl
bWFpbmluZykgPCBfX20pIHsNCiAgICAgICpfX291dCA9ICpfX2ZpcnN0Ow0K
ICAgICAgKytfX291dDsNCiAgICAgIC0tX19tOw0KICAgIH0NCg0KICAgIC0t
X19yZW1haW5pbmc7DQogICAgKytfX2ZpcnN0Ow0KICB9DQogIHJldHVybiBf
X291dDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+DQpfUmFuZG9t
QWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dCwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19u
KQ0Kew0KICBfRGlzdGFuY2UgX19tID0gMDsNCiAgX0Rpc3RhbmNlIF9fdCA9
IF9fbjsNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBf
X247ICsrX19tLCArK19fZmlyc3QpDQogICAgX19vdXRbX19tXSA9ICpfX2Zp
cnN0Ow0KDQogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICsr
X190Ow0KICAgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmRvbV9udW1iZXIoX190
KTsNCiAgICBpZiAoX19NIDwgX19uKQ0KICAgICAgX19vdXRbX19NXSA9ICpf
X2ZpcnN0Ow0KICAgICsrX19maXJzdDsNCiAgfQ0KDQogIHJldHVybiBfX291
dCArIF9fbTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLA0KICAgICAgICAgIGNsYXNzIF9SYW5k
b21OdW1iZXJHZW5lcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4NCl9SYW5kb21B
Y2Nlc3NJdGVyIF9fcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0
b3ImIF9fcmFuZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfRGlzdGFuY2UgX19uKQ0Kew0KDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0K
ICBfRGlzdGFuY2UgX19tID0gMDsNCiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsN
CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsr
X19tLCArK19fZmlyc3QpDQogICAgX19vdXRbX19tXSA9ICpfX2ZpcnN0Ow0K
DQogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgICsrX190Ow0K
ICAgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmQoX190KTsNCiAgICBpZiAoX19N
IDwgX19uKQ0KICAgICAgX19vdXRbX19NXSA9ICpfX2ZpcnN0Ow0KICAgICsr
X19maXJzdDsNCiAgfQ0KDQogIHJldHVybiBfX291dCArIF9fbTsNCn0NCg0K
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyPg0KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyDQpyYW5kb21fc2Ft
cGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQog
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX291dF9sYXN0KQ0Kew0KDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN
CiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3QsIF9fb3V0X2xh
c3QgLSBfX291dF9maXJzdCk7DQp9DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLA0KICAgICAgICAg
IGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+DQppbmxpbmUgX1JhbmRv
bUFjY2Vzc0l0ZXINCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19vdXRfZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0
X2xhc3QsDQogICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3Im
IF9fcmFuZCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIHJldHVybiBfX3JhbmRvbV9z
YW1wbGUoX19maXJzdCwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fb3V0X2ZpcnN0LCBfX3JhbmQsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsNCn0NCg0KDQoNCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+
DQpfRm9yd2FyZEl0ZXIgX19wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmly
c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f
cHJlZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh
dG9yX3RhZykNCnsNCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4g
X19maXJzdDsNCg0KICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkNCiAgICBp
ZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7DQoNCiAg
X0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7DQoNCiAgd2hpbGUgKCsr
X19uZXh0ICE9IF9fbGFzdCkNCiAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7
DQogICAgICBzd2FwKCpfX2ZpcnN0LCAqX19uZXh0KTsNCiAgICAgICsrX19m
aXJzdDsNCiAgICB9DQoNCiAgcmV0dXJuIF9fZmlyc3Q7DQp9DQoNCnRlbXBs
YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9QcmVkaWNh
dGU+DQpfQmlkaXJlY3Rpb25hbEl0ZXIgX19wYXJ0aXRpb24oX0JpZGlyZWN0
aW9uYWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZykNCnsNCiAgd2hpbGUgKHRydWUpIHsNCiAgICB3aGlsZSAodHJ1
ZSkNCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkNCiAgICAgICAgcmV0
dXJuIF9fZmlyc3Q7DQogICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3Qp
KQ0KICAgICAgICArK19fZmlyc3Q7DQogICAgICBlbHNlDQogICAgICAgIGJy
ZWFrOw0KICAgIC0tX19sYXN0Ow0KICAgIHdoaWxlICh0cnVlKQ0KICAgICAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgICAgICByZXR1cm4gX19maXJz
dDsNCiAgICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpDQogICAgICAg
IC0tX19sYXN0Ow0KICAgICAgZWxzZQ0KICAgICAgICBicmVhazsNCiAgICBp
dGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsNCiAgICArK19fZmlyc3Q7DQog
IH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X1ByZWRpY2F0ZT4NCmlubGluZSBfRm9yd2FyZEl0ZXIgcGFydGl0aW9uKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQ0Kew0KDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
DQoNCiAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19w
cmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCn0NCg0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRl
LCBjbGFzcyBfRGlzdGFuY2U+DQpfRm9yd2FyZEl0ZXIgX19pbnBsYWNlX3N0
YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
IF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuKQ0Kew0K
ICBpZiAoX19sZW4gPT0gMSkNCiAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0
KSA/IF9fbGFzdCA6IF9fZmlyc3Q7DQogIF9Gb3J3YXJkSXRlciBfX21pZGRs
ZSA9IF9fZmlyc3Q7DQogIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7
DQogIHJldHVybiByb3RhdGUoX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24o
X19maXJzdCwgX19taWRkbGUsIF9fcHJlZCwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIpLA0KICAgICAg
ICAgICAgICAgIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgIF9faW5wbGFj
ZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxlLCBfX2xhc3QsIF9fcHJlZCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xlbiAtIF9fbGVuIC8gMikpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX1ByZWRpY2F0ZSwN
CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+DQpfRm9yd2FyZEl0ZXIgX19z
dGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNl
IF9fbGVuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUG9pbnRlciBfX2J1ZmZlciwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUp
DQp7DQogIGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7DQogICAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7DQogICAgX1BvaW50ZXIg
X19yZXN1bHQyID0gX19idWZmZXI7DQogICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdCA7ICsrX19maXJzdCkNCiAgICAgIGlmIChfX3ByZWQoKl9fZmly
c3QpKSB7DQogICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsNCiAgICAg
ICAgKytfX3Jlc3VsdDE7DQogICAgICB9DQogICAgICBlbHNlIHsNCiAgICAg
ICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0Ow0KICAgICAgICArK19fcmVzdWx0
MjsNCiAgICAgIH0NCiAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9f
cmVzdWx0MSk7DQogICAgcmV0dXJuIF9fcmVzdWx0MTsNCiAgfQ0KICBlbHNl
IHsNCiAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAg
IGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7DQogICAgcmV0dXJuIHJv
dGF0ZShfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoDQogICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ByZWQsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwgX19idWZmZXIs
IF9fYnVmZmVyX3NpemUpLA0KICAgICAgICAgICAgICAgICAgICBfX21pZGRs
ZSwNCiAgICAgICAgICAgICAgICAgICAgX19zdGFibGVfcGFydGl0aW9uX2Fk
YXB0aXZlKA0KICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSwg
X19sYXN0LCBfX3ByZWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bGVuIC0gX19sZW4gLyAyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSkpOw0K
ICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9QcmVkaWNhdGUsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPg0KaW5s
aW5lIF9Gb3J3YXJkSXRlcg0KX19zdGFibGVfcGFydGl0aW9uX2F1eChfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9UcCosIF9E
aXN0YW5jZSopDQp7DQogIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRl
ciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOw0KICBpZiAoX19idWYu
c2l6ZSgpID4gMCkNCiAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2Fk
YXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJl
cXVlc3RlZF9zaXplKCkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX19idWYuc2l6ZSgpKTsNCiAg
ZWxzZQ0KICAgIHJldHVybiBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihf
X2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3RlZF9z
aXplKCkpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1ByZWRpY2F0ZT4NCmlubGluZSBfRm9yd2FyZEl0ZXIgc3RhYmxl
X3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVk
aWNhdGUgX19wcmVkKQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KQ0KICAgIHJldHVybiBfX2ZpcnN0Ow0KICBlbHNlDQogICAg
cmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hdXgoX19maXJzdCwgX19sYXN0
LCBfX3ByZWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X192YWx1ZV90eXBlKF9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Rw
Pg0KX1JhbmRvbUFjY2Vzc0l0ZXIgX191bmd1YXJkZWRfcGFydGl0aW9uKF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9U
cCBfX3Bpdm90KQ0Kew0KICB3aGlsZSAodHJ1ZSkgew0KICAgIHdoaWxlICgq
X19maXJzdCA8IF9fcGl2b3QpDQogICAgICArK19fZmlyc3Q7DQogICAgLS1f
X2xhc3Q7DQogICAgd2hpbGUgKF9fcGl2b3QgPCAqX19sYXN0KQ0KICAgICAg
LS1fX2xhc3Q7DQogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpDQogICAg
ICByZXR1cm4gX19maXJzdDsNCiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19s
YXN0KTsNCiAgICArK19fZmlyc3Q7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlPg0KX1JhbmRvbUFjY2Vzc0l0ZXIgX191bmd1YXJkZWRfcGFydGl0aW9u
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApDQp7DQogIHdoaWxlICh0
cnVlKSB7DQogICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkp
DQogICAgICArK19fZmlyc3Q7DQogICAgLS1fX2xhc3Q7DQogICAgd2hpbGUg
KF9fY29tcChfX3Bpdm90LCAqX19sYXN0KSkNCiAgICAgIC0tX19sYXN0Ow0K
ICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQ0KICAgICAgcmV0dXJuIF9f
Zmlyc3Q7DQogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7DQogICAg
KytfX2ZpcnN0Ow0KICB9DQp9DQoNCmNvbnN0IGludCBfX3N0bF90aHJlc2hv
bGQgPSAxNjsNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlciwgY2xhc3MgX1RwPg0Kdm9pZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5z
ZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsKQ0Kew0K
ICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7DQogIC0tX19u
ZXh0Ow0KICB3aGlsZSAoX192YWwgPCAqX19uZXh0KSB7DQogICAgKl9fbGFz
dCA9ICpfX25leHQ7DQogICAgX19sYXN0ID0gX19uZXh0Ow0KICAgIC0tX19u
ZXh0Ow0KICB9DQogICpfX2xhc3QgPSBfX3ZhbDsNCn0NCg0KdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9D
b21wYXJlPg0Kdm9pZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0Ow0KICAtLV9fbmV4dDsN
CiAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsNCiAgICAqX19s
YXN0ID0gKl9fbmV4dDsNCiAgICBfX2xhc3QgPSBfX25leHQ7DQogICAgLS1f
X25leHQ7DQogIH0NCiAgKl9fbGFzdCA9IF9fdmFsOw0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4NCmlubGlu
ZSB2b2lkIF9fbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwgX1RwKikNCnsNCiAgX1RwIF9fdmFsID0gKl9fbGFz
dDsNCiAgaWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsNCiAgICBjb3B5X2JhY2t3
YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0ICsgMSk7DQogICAgKl9fZmly
c3QgPSBfX3ZhbDsNCiAgfQ0KICBlbHNlDQogICAgX191bmd1YXJkZWRfbGlu
ZWFyX2luc2VydChfX2xhc3QsIF9fdmFsKTsNCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlPg0KaW5saW5lIHZvaWQgX19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2Nv
bXApDQp7DQogIF9UcCBfX3ZhbCA9ICpfX2xhc3Q7DQogIGlmIChfX2NvbXAo
X192YWwsICpfX2ZpcnN0KSkgew0KICAgIGNvcHlfYmFja3dhcmQoX19maXJz
dCwgX19sYXN0LCBfX2xhc3QgKyAxKTsNCiAgICAqX19maXJzdCA9IF9fdmFs
Ow0KICB9DQogIGVsc2UNCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0
KF9fbGFzdCwgX192YWwsIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcj4NCnZvaWQgX19pbnNlcnRpb25fc29ydChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QpDQp7DQogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOw0K
ICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBf
X2kgIT0gX19sYXN0OyArK19faSkNCiAgICBfX2xpbmVhcl9pbnNlcnQoX19m
aXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJl
Pg0Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApDQp7DQogIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkgcmV0dXJuOw0KICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVy
IF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkNCiAg
ICBfX2xpbmVhcl9pbnNlcnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUo
X19maXJzdCksIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPg0Kdm9pZCBfX3VuZ3VhcmRlZF9p
bnNlcnRpb25fc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikNCnsNCiAgZm9yIChfUmFuZG9tQWNj
ZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkN
CiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1RwKCpfX2kp
KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPg0K
aW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7DQogIF9fdW5n
dWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f
dmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4N
CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAqLCBfQ29tcGFyZSBf
X2NvbXApDQp7DQogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19m
aXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpDQogICAgX191bmd1YXJkZWRf
bGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSwgX19jb21wKTsNCn0NCg0K
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29t
cGFyZT4NCmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApDQp7DQogIF9fdW5ndWFyZGVkX2luc2VydGlvbl9z
b3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0
KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7
DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4NCnZv
aWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCkNCnsNCiAgaWYgKF9fbGFzdCAtIF9fZmlyc3Qg
PiBfX3N0bF90aHJlc2hvbGQpIHsNCiAgICBfX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQpOw0KICAgIF9fdW5n
dWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfX3N0bF90aHJlc2hv
bGQsIF9fbGFzdCk7DQogIH0NCiAgZWxzZQ0KICAgIF9faW5zZXJ0aW9uX3Nv
cnQoX19maXJzdCwgX19sYXN0KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQgX19maW5h
bF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQ0Kew0KICBpZiAoX19sYXN0IC0g
X19maXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgew0KICAgIF9faW5zZXJ0aW9u
X3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19j
b21wKTsNCiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0
ICsgX19zdGxfdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7DQogIH0NCiAg
ZWxzZQ0KICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBf
X2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+DQppbmxpbmUg
X1NpemUgX19sZyhfU2l6ZSBfX24pDQp7DQogIF9TaXplIF9fazsNCiAgZm9y
IChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsNCiAgcmV0
dXJuIF9fazsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9TaXplPg0Kdm9pZCBfX2ludHJvc29y
dF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLA0K
ICAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQpDQp7
DQogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xk
KSB7DQogICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgew0KICAgICAgcGFy
dGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsNCiAgICAgIHJl
dHVybjsNCiAgICB9DQogICAgLS1fX2RlcHRoX2xpbWl0Ow0KICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fY3V0ID0NCiAgICAgIF9fdW5ndWFyZGVkX3BhcnRp
dGlvbihfX2ZpcnN0LCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0
IC0gX19maXJzdCkvMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7DQogICAgX19pbnRyb3Nv
cnRfbG9vcChfX2N1dCwgX19sYXN0LCAoX1RwKikgMCwgX19kZXB0aF9saW1p
dCk7DQogICAgX19sYXN0ID0gX19jdXQ7DQogIH0NCn0NCg0KdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9T
aXplLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQgX19pbnRyb3NvcnRfbG9vcChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwNCiAgICAgICAg
ICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0LCBfQ29tcGFyZSBf
X2NvbXApDQp7DQogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxf
dGhyZXNob2xkKSB7DQogICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgew0K
ICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBf
X2NvbXApOw0KICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICAtLV9fZGVwdGhf
bGltaXQ7DQogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQ0KICAgICAg
X191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3Qs
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoo
X19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwg
X19jb21wKSksDQogICAgICAgX19jb21wKTsNCiAgICBfX2ludHJvc29ydF9s
b29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0LCBf
X2NvbXApOw0KICAgIF9fbGFzdCA9IF9fY3V0Ow0KICB9DQp9DQoNCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4NCmlubGluZSB2b2lkIHNv
cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICA7
DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmlyc3Qg
IT0gX19sYXN0KSB7DQogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBf
X2xhc3QsDQogICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19m
aXJzdCksDQogICAgICAgICAgICAgICAgICAgICBfX2xnKF9fbGFzdCAtIF9f
Zmlyc3QpICogMik7DQogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2Zp
cnN0LCBfX2xhc3QpOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZCBz
b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KDQoNCg0KICBpZiAoX19maXJzdCAhPSBfX2xh
c3QpIHsNCiAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwN
CiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwN
CiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19sYXN0IC0gX19maXJzdCkg
KiAyLA0KICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCiAgICBfX2Zp
bmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsN
CiAgfQ0KfQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyPg0Kdm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCnsNCiAgaWYgKF9fbGFzdCAtIF9f
Zmlyc3QgPCAxNSkgew0KICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg
X19sYXN0KTsNCiAgICByZXR1cm47DQogIH0NCiAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8g
MjsNCiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxl
KTsNCiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3Qp
Ow0KICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUg
LSBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAt
IF9fbWlkZGxlKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQgX19pbnBsYWNlX3N0YWJs
ZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9D
b21wYXJlIF9fY29tcCkNCnsNCiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAx
NSkgew0KICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBf
X2NvbXApOw0KICAgIHJldHVybjsNCiAgfQ0KICBfUmFuZG9tQWNjZXNzSXRl
ciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAy
Ow0KICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUs
IF9fY29tcCk7DQogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwg
X19sYXN0LCBfX2NvbXApOw0KICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMiwNCiAgICAg
ICAgICBjbGFzcyBfRGlzdGFuY2U+DQp2b2lkIF9fbWVyZ2Vfc29ydF9sb29w
KF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LA0KICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LA0KICAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9E
aXN0YW5jZSBfX3N0ZXBfc2l6ZSkNCnsNCiAgX0Rpc3RhbmNlIF9fdHdvX3N0
ZXAgPSAyICogX19zdGVwX3NpemU7DQoNCiAgd2hpbGUgKF9fbGFzdCAtIF9f
Zmlyc3QgPj0gX190d29fc3RlcCkgew0KICAgIF9fcmVzdWx0ID0gbWVyZ2Uo
X19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLA0KICAgICAgICAgICAg
ICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190
d29fc3RlcCwNCiAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0KTsNCiAg
ICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7DQogIH0NCg0KICBfX3N0ZXBfc2l6
ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9z
aXplKTsNCiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXpl
LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwNCiAgICAgICAgX19y
ZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsDQogICAgICAgICAgY2xh
c3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4NCnZvaWQgX19tZXJnZV9z
b3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsDQogICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsDQog
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jl
c3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLA0KICAgICAgICAgICAgICAg
ICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQogIF9EaXN0YW5jZSBfX3R3
b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOw0KDQogIHdoaWxlIChfX2xhc3Qg
LSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsNCiAgICBfX3Jlc3VsdCA9IG1l
cmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwNCiAgICAgICAg
ICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCAr
IF9fdHdvX3N0ZXAsDQogICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwN
CiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQogICAgX19maXJzdCAr
PSBfX3R3b19zdGVwOw0KICB9DQogIF9fc3RlcF9zaXplID0gbWluKF9EaXN0
YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOw0KDQogIG1l
cmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwNCiAgICAgICAg
X19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsDQogICAgICAgIF9fcmVz
dWx0LA0KICAgICAgICBfX2NvbXApOw0KfQ0KDQpjb25zdCBpbnQgX19zdGxf
Y2h1bmtfc2l6ZSA9IDc7DQoNCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPg0Kdm9pZCBfX2NodW5rX2luc2Vy
dGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LCBfRGlzdGFuY2UgX19jaHVua19zaXplKQ0Kew0KICB3aGlsZSAoX19sYXN0
IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsNCiAgICBfX2luc2VydGlv
bl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOw0KICAg
IF9fZmlyc3QgKz0gX19jaHVua19zaXplOw0KICB9DQogIF9faW5zZXJ0aW9u
X3NvcnQoX19maXJzdCwgX19sYXN0KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9D
b21wYXJlPg0Kdm9pZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJl
IF9fY29tcCkNCnsNCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19j
aHVua19zaXplKSB7DQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf
X2ZpcnN0ICsgX19jaHVua19zaXplLCBfX2NvbXApOw0KICAgIF9fZmlyc3Qg
Kz0gX19jaHVua19zaXplOw0KICB9DQogIF9faW5zZXJ0aW9uX3NvcnQoX19m
aXJzdCwgX19sYXN0LCBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlz
dGFuY2U+DQp2b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5j
ZSopDQp7DQogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7
DQogIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVu
Ow0KDQogIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3Np
emU7DQogIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0
LCBfX3N0ZXBfc2l6ZSk7DQoNCiAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19s
ZW4pIHsNCiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3Qs
IF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSk7DQogICAgX19zdGVwX3NpemUgKj0g
MjsNCiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJf
bGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOw0KICAgIF9fc3RlcF9zaXpl
ICo9IDI7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlLA0KICAg
ICAgICAgIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX21lcmdlX3NvcnRfd2l0
aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwgX1BvaW50ZXIgX19idWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfRGlzdGFuY2UqLCBfQ29tcGFyZSBfX2NvbXApDQp7DQogIF9E
aXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7DQogIF9Qb2ludGVy
IF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOw0KDQogIF9EaXN0
YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3NpemU7DQogIF9fY2h1
bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6
ZSwgX19jb21wKTsNCg0KICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikg
ew0KICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19i
dWZmZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOw0KICAgIF9fc3RlcF9zaXpl
ICo9IDI7DQogICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVm
ZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOw0KICAg
IF9fc3RlcF9zaXplICo9IDI7DQogIH0NCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rp
c3RhbmNlPg0Kdm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9pbnRlciBfX2J1ZmZl
ciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19i
dWZmZXJfc2l6ZSkNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAt
IF9fZmlyc3QgKyAxKSAvIDI7DQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlk
ZGxlID0gX19maXJzdCArIF9fbGVuOw0KICBpZiAoX19sZW4gPiBfX2J1ZmZl
cl9zaXplKSB7DQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0
LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOw0KICAgIF9f
c3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZm
ZXIsIF9fYnVmZmVyX3NpemUpOw0KICB9DQogIGVsc2Ugew0KICAgIF9fbWVy
Z2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZm
ZXIsIChfRGlzdGFuY2UqKTApOw0KICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1
ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgKF9EaXN0YW5jZSop
MCk7DQogIH0NCiAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwNCiAg
ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUp
LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNz
IF9EaXN0YW5jZSwNCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4NCnZvaWQg
X19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsIF9D
b21wYXJlIF9fY29tcCkNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFz
dCAtIF9fZmlyc3QgKyAxKSAvIDI7DQogIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bWlkZGxlID0gX19maXJzdCArIF9fbGVuOw0KICBpZiAoX19sZW4gPiBfX2J1
ZmZlcl9zaXplKSB7DQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2Zp
cnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAgIF9fc3RhYmxl
X3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9f
YnVmZmVyX3NpemUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bXApOw0KICB9DQogIGVsc2Ugew0KICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1
ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIChfRGlzdGFuY2Uq
KTAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsN
CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFz
dCwgX19idWZmZXIsIChfRGlzdGFuY2UqKTAsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb21wKTsNCiAgfQ0KICBfX21lcmdlX2FkYXB0
aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21p
ZGRsZSAtIF9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl
LA0KICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQp9DQoNCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf
RGlzdGFuY2U+DQppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlz
dGFuY2UqKQ0Kew0KICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNz
SXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsNCiAgaWYgKGJ1Zi5i
ZWdpbigpID09IDApDQogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmly
c3QsIF9fbGFzdCk7DQogIGVsc2UNCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0
aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUoKSkpOw0KfQ0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9U
cCwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSB2
b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSosDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQogIF9U
ZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVHA+IGJ1Zihf
X2ZpcnN0LCBfX2xhc3QpOw0KICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkNCiAg
ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2Nv
bXApOw0KICBlbHNlDQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2Zp
cnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkpLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyPg0KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsNCg0KDQogIF9fc3RhYmxlX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwN
CiAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLA0K
ICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9Db21wYXJlPg0KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQ0K
ew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOw0KDQoNCg0KICBfX3N0YWJsZV9zb3J0X2F1eChfX2Zp
cnN0LCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlw
ZShfX2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90
eXBlKF9fZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0K
fQ0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfVHA+DQp2b2lkIF9fcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLA0KICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9U
cCopDQp7DQogIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7DQogIGZv
ciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9f
bGFzdDsgKytfX2kpDQogICAgaWYgKCpfX2kgPCAqX19maXJzdCkNCiAgICAg
IF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1RwKCpfX2kp
LA0KICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
Ow0KICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUpOw0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+DQppbmxpbmUgdm9pZCBw
YXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs
ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
Cg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBfX3BhcnRpYWxfc29y
dChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19m
aXJzdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+DQp2b2lkIF9fcGFydGlh
bF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbWlkZGxlLA0KICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29tcCkNCnsN
CiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOw0KICBm
b3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBf
X2xhc3Q7ICsrX19pKQ0KICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3Qp
KQ0KICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBf
VHAoKl9faSksIF9fY29tcCwNCiAgICAgICAgICAgICAgICAgX19kaXN0YW5j
ZV90eXBlKF9fZmlyc3QpKTsNCiAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2NvbXApOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPg0KaW5saW5lIHZvaWQgcGFydGlh
bF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LCBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQog
IF9fcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9f
dmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfRGlzdGFuY2UsDQogICAgICAgICAgY2xhc3MgX1RwPg0KX1JhbmRv
bUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9f
Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJz
dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikNCnsN
CiAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVy
biBfX3Jlc3VsdF9sYXN0Ow0KICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3Vs
dF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsNCiAgd2hpbGUoX19maXJz
dCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0
X2xhc3QpIHsNCiAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7
DQogICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7DQogICAgKytfX2ZpcnN0Ow0K
ICB9DQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVh
bF9sYXN0KTsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAg
aWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0KQ0KICAgICAgX19hZGp1
c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLA0KICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVhbF9sYXN0IC0g
X19yZXN1bHRfZmlyc3QpLA0KICAgICAgICAgICAgICAgICAgICBfVHAoKl9f
Zmlyc3QpKTsNCiAgICArK19fZmlyc3Q7DQogIH0NCiAgc29ydF9oZWFwKF9f
cmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOw0KICByZXR1cm4g
X19yZXN1bHRfcmVhbF9sYXN0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+DQppbmxpbmUgX1Jh
bmRvbUFjY2Vzc0l0ZXINCnBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwNCiAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpDQp7
DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsNCg0KDQogIHJldHVybiBfX3BhcnRpYWxfc29ydF9jb3B5KF9fZmlyc3Qs
IF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX3Jl
c3VsdF9maXJzdCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
dmFsdWVfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Nv
bXBhcmUsDQogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+
DQpfUmFuZG9tQWNjZXNzSXRlciBfX3BhcnRpYWxfc29ydF9jb3B5KF9JbnB1
dEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fcmVzdWx0X2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSosIF9UcCopDQp7DQogIGlmIChf
X3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1
bHRfbGFzdDsNCiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9s
YXN0ID0gX19yZXN1bHRfZmlyc3Q7DQogIHdoaWxlKF9fZmlyc3QgIT0gX19s
YXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7
DQogICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0Ow0KICAgICsr
X19yZXN1bHRfcmVhbF9sYXN0Ow0KICAgICsrX19maXJzdDsNCiAgfQ0KICBt
YWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwg
X19jb21wKTsNCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7DQogICAg
aWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkNCiAgICAg
IF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZSgwKSwN
CiAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fcmVzdWx0X3JlYWxf
bGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAg
X1RwKCpfX2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsN
CiAgICArK19fZmlyc3Q7DQogIH0NCiAgc29ydF9oZWFwKF9fcmVzdWx0X2Zp
cnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7DQogIHJldHVybiBf
X3Jlc3VsdF9yZWFsX2xhc3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBh
cmU+DQppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXINCnBhcnRpYWxfc29ydF9j
b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsDQog
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9m
aXJzdCwNCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
cmVzdWx0X2xhc3QsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7DQoNCg0KDQogIHJldHVybiBfX3BhcnRpYWxfc29ydF9jb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fcmVzdWx0
X2ZpcnN0KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1
ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPg0Kdm9pZCBfX250aF9lbGVt
ZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbnRoLA0KICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX1RwKikNCnsNCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmly
c3QgPiAzKSB7DQogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQ0KICAg
ICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmly
c3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAx
KSkpKTsNCiAgICBpZiAoX19jdXQgPD0gX19udGgpDQogICAgICBfX2ZpcnN0
ID0gX19jdXQ7DQogICAgZWxzZQ0KICAgICAgX19sYXN0ID0gX19jdXQ7DQog
IH0NCiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOw0KfQ0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+DQppbmxpbmUg
dm9pZCBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX250aCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
Cg0KDQogIF9fbnRoX2VsZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwg
X192YWx1ZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
Pg0Kdm9pZCBfX250aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLA0KICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUg
X19jb21wKQ0Kew0KICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsN
CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9DQogICAgICBfX3VuZ3Vh
cmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0
ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApKSwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOw0KICAgIGlm
IChfX2N1dCA8PSBfX250aCkNCiAgICAgIF9fZmlyc3QgPSBfX2N1dDsNCiAg
ICBlbHNlDQogICAgICBfX2xhc3QgPSBfX2N1dDsNCiAgfQ0KICBfX2luc2Vy
dGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsNCn0NCg0KdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFy
ZT4NCmlubGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29t
cGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KDQogIF9fbnRoX2Vs
ZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9f
Zmlyc3QpLCBfX2NvbXApOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4NCl9G
b3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikNCnsNCiAgX0Rp
c3RhbmNlIF9fbGVuID0gMDsNCiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0
LCBfX2xlbik7DQogIF9EaXN0YW5jZSBfX2hhbGY7DQogIF9Gb3J3YXJkSXRl
ciBfX21pZGRsZTsNCg0KICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX19o
YWxmID0gX19sZW4gPj4gMTsNCiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7DQog
ICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICBpZiAoKl9fbWlk
ZGxlIDwgX192YWwpIHsNCiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsNCiAg
ICAgICsrX19maXJzdDsNCiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYg
LSAxOw0KICAgIH0NCiAgICBlbHNlDQogICAgICBfX2xlbiA9IF9faGFsZjsN
CiAgfQ0KICByZXR1cm4gX19maXJzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0KaW5saW5lIF9Gb3J3YXJkSXRl
ciBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX1RwJiBfX3ZhbCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
DQogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192
YWwsDQogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf
X2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4N
Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21w
LCBfRGlzdGFuY2UqKQ0Kew0KICBfRGlzdGFuY2UgX19sZW4gPSAwOw0KICBk
aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsNCiAgX0Rpc3RhbmNl
IF9faGFsZjsNCiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOw0KDQogIHdoaWxl
IChfX2xlbiA+IDApIHsNCiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOw0KICAg
IF9fbWlkZGxlID0gX19maXJzdDsNCiAgICBhZHZhbmNlKF9fbWlkZGxlLCBf
X2hhbGYpOw0KICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsN
CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsNCiAgICAgICsrX19maXJzdDsN
CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOw0KICAgIH0NCiAg
ICBlbHNlDQogICAgICBfX2xlbiA9IF9faGFsZjsNCiAgfQ0KICByZXR1cm4g
X19maXJzdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4NCmlubGluZSBfRm9yd2FyZEl0
ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogIHJldHVybiBfX2xv
d2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCwNCiAg
ICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3Qp
KTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X1RwLCBjbGFzcyBfRGlzdGFuY2U+DQpfRm9yd2FyZEl0ZXIgX191cHBlcl9i
b3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192
YWwsIF9EaXN0YW5jZSopDQp7DQogIF9EaXN0YW5jZSBfX2xlbiA9IDA7DQog
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOw0KICBfRGlzdGFu
Y2UgX19oYWxmOw0KICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7DQoNCiAgd2hp
bGUgKF9fbGVuID4gMCkgew0KICAgIF9faGFsZiA9IF9fbGVuID4+IDE7DQog
ICAgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAgIGFkdmFuY2UoX19taWRkbGUs
IF9faGFsZik7DQogICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQ0KICAgICAg
X19sZW4gPSBfX2hhbGY7DQogICAgZWxzZSB7DQogICAgICBfX2ZpcnN0ID0g
X19taWRkbGU7DQogICAgICArK19fZmlyc3Q7DQogICAgICBfX2xlbiA9IF9f
bGVuIC0gX19oYWxmIC0gMTsNCiAgICB9DQogIH0NCiAgcmV0dXJuIF9fZmly
c3Q7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9UcD4NCmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpDQp7
DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICByZXR1cm4gX191cHBlcl9i
b3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLA0KICAgICAgICAgICAgICAg
ICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOw0KfQ0KDQp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9D
b21wYXJlLCBjbGFzcyBfRGlzdGFuY2U+DQpfRm9yd2FyZEl0ZXIgX191cHBl
cl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X192YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikNCnsNCiAgX0Rp
c3RhbmNlIF9fbGVuID0gMDsNCiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0
LCBfX2xlbik7DQogIF9EaXN0YW5jZSBfX2hhbGY7DQogIF9Gb3J3YXJkSXRl
ciBfX21pZGRsZTsNCg0KICB3aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX19o
YWxmID0gX19sZW4gPj4gMTsNCiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7DQog
ICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsNCiAgICBpZiAoX19jb21w
KF9fdmFsLCAqX19taWRkbGUpKQ0KICAgICAgX19sZW4gPSBfX2hhbGY7DQog
ICAgZWxzZSB7DQogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7DQogICAgICAr
K19fZmlyc3Q7DQogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsN
CiAgICB9DQogIH0NCiAgcmV0dXJuIF9fZmlyc3Q7DQp9DQoNCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh
cmU+DQppbmxpbmUgX0ZvcndhcmRJdGVyIHVwcGVyX2JvdW5kKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29t
cGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsNCg0KICByZXR1cm4gX191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xh
c3QsIF9fdmFsLCBfX2NvbXAsDQogICAgICAgICAgICAgICAgICAgICAgIF9f
ZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPg0K
cGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4NCl9fZXF1YWxfcmFu
Z2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
IGNvbnN0IF9UcCYgX192YWwsDQogICAgICAgICAgICAgIF9EaXN0YW5jZSop
DQp7DQogIF9EaXN0YW5jZSBfX2xlbiA9IDA7DQogIGRpc3RhbmNlKF9fZmly
c3QsIF9fbGFzdCwgX19sZW4pOw0KICBfRGlzdGFuY2UgX19oYWxmOw0KICBf
Rm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsNCg0KICB3
aGlsZSAoX19sZW4gPiAwKSB7DQogICAgX19oYWxmID0gX19sZW4gPj4gMTsN
CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7DQogICAgYWR2YW5jZShfX21pZGRs
ZSwgX19oYWxmKTsNCiAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsNCiAg
ICAgIF9fZmlyc3QgPSBfX21pZGRsZTsNCiAgICAgICsrX19maXJzdDsNCiAg
ICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOw0KICAgIH0NCiAgICBl
bHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkNCiAgICAgIF9fbGVuID0gX19o
YWxmOw0KICAgIGVsc2Ugew0KICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQo
X19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsNCiAgICAgIGFkdmFuY2UoX19m
aXJzdCwgX19sZW4pOw0KICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsr
X19taWRkbGUsIF9fZmlyc3QsIF9fdmFsKTsNCiAgICAgIHJldHVybiBwYWly
PF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQp
Ow0KICAgIH0NCiAgfQ0KICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9G
b3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7DQp9DQoNCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4NCmlubGluZSBwYWly
PF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPg0KZXF1YWxfcmFuZ2UoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0
IF9UcCYgX192YWwpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICBy
ZXR1cm4gX19lcXVhbF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLA0K
ICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJz
dCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfRGlzdGFuY2U+DQpwYWly
PF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPg0KX19lcXVhbF9yYW5nZShf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29u
c3QgX1RwJiBfX3ZhbCwNCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
LCBfRGlzdGFuY2UqKQ0Kew0KICBfRGlzdGFuY2UgX19sZW4gPSAwOw0KICBk
aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsNCiAgX0Rpc3RhbmNl
IF9faGFsZjsNCiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9f
cmlnaHQ7DQoNCiAgd2hpbGUgKF9fbGVuID4gMCkgew0KICAgIF9faGFsZiA9
IF9fbGVuID4+IDE7DQogICAgX19taWRkbGUgPSBfX2ZpcnN0Ow0KICAgIGFk
dmFuY2UoX19taWRkbGUsIF9faGFsZik7DQogICAgaWYgKF9fY29tcCgqX19t
aWRkbGUsIF9fdmFsKSkgew0KICAgICAgX19maXJzdCA9IF9fbWlkZGxlOw0K
ICAgICAgKytfX2ZpcnN0Ow0KICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFs
ZiAtIDE7DQogICAgfQ0KICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9f
bWlkZGxlKSkNCiAgICAgIF9fbGVuID0gX19oYWxmOw0KICAgIGVsc2Ugew0K
ICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUs
IF9fdmFsLCBfX2NvbXApOw0KICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xl
bik7DQogICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwg
X19maXJzdCwgX192YWwsIF9fY29tcCk7DQogICAgICByZXR1cm4gcGFpcjxf
Rm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsN
CiAgICB9DQogIH0NCiAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9y
d2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOw0KfQ0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
Pg0KaW5saW5lIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+DQpl
cXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwNCiAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KDQogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFz
dCwgX192YWwsIF9fY29tcCwNCiAgICAgICAgICAgICAgICAgICAgICAgX19k
aXN0YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPg0KYm9vbCBiaW5hcnlfc2VhcmNo
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0K
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpDQp7DQoNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsNCg0KICBfRm9yd2FyZEl0ZXIgX19pID0gbG93
ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7DQogIHJldHVybiBf
X2kgIT0gX19sYXN0ICYmICEoX192YWwgPCAqX19pKTsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZT4NCmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICBj
b25zdCBfVHAmIF9fdmFsLA0KICAgICAgICAgICAgICAgICAgIF9Db21wYXJl
IF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ow0KDQogIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2ZpcnN0
LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOw0KICByZXR1cm4gX19pICE9IF9f
bGFzdCAmJiAhX19jb21wKF9fdmFsLCAqX19pKTsNCn0NCg0KDQoNCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNs
YXNzIF9PdXRwdXRJdGVyPg0KX091dHB1dEl0ZXIgbWVyZ2UoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
YXN0MiwNCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mikgew0KICAgIGlmICgq
X19maXJzdDIgPCAqX19maXJzdDEpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0MjsNCiAgICAgICsrX19maXJzdDI7DQogICAgfQ0KICAgIGVsc2Ug
ew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0KICAgICAgKytfX2Zp
cnN0MTsNCiAgICB9DQogICAgKytfX3Jlc3VsdDsNCiAgfQ0KICByZXR1cm4g
Y29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0
MSwgX19yZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsDQog
ICAgICAgICAgY2xhc3MgX0NvbXBhcmU+DQpfT3V0cHV0SXRlciBtZXJnZShf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ
dGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
Cg0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0Mikgew0KICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAq
X19maXJzdDEpKSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7DQog
ICAgICArK19fZmlyc3QyOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQogICAg
fQ0KICAgICsrX19yZXN1bHQ7DQogIH0NCiAgcmV0dXJuIGNvcHkoX19maXJz
dDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0
KSk7DQp9DQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyLCBjbGFzcyBfRGlzdGFuY2U+DQp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9i
dWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikNCnsNCiAgaWYgKF9f
bGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQ0KICAgIHJldHVybjsNCiAgaWYg
KF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7DQogICAgaWYgKCpfX21pZGRsZSA8
ICpfX2ZpcnN0KQ0KICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxl
KTsNCiAgICByZXR1cm47DQogIH0NCiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
Zmlyc3RfY3V0ID0gX19maXJzdDsNCiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
c2Vjb25kX2N1dCA9IF9fbWlkZGxlOw0KICBfRGlzdGFuY2UgX19sZW4xMSA9
IDA7DQogIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsNCiAgaWYgKF9fbGVuMSA+
IF9fbGVuMikgew0KICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOw0KICAgIGFk
dmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOw0KICAgIF9fc2Vjb25kX2N1
dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1
dCk7DQogICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19s
ZW4yMik7DQogIH0NCiAgZWxzZSB7DQogICAgX19sZW4yMiA9IF9fbGVuMiAv
IDI7DQogICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOw0KICAg
IF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUs
ICpfX3NlY29uZF9jdXQpOw0KICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmly
c3RfY3V0LCBfX2xlbjExKTsNCiAgfQ0KICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19uZXdfbWlkZGxlDQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlk
ZGxlLCBfX3NlY29uZF9jdXQpOw0KICBfX21lcmdlX3dpdGhvdXRfYnVmZmVy
KF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7DQogIF9fbWVy
Z2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQs
IF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xlbjIgLSBfX2xlbjIyKTsNCn0NCg0KdGVtcGxhdGUgPGNs
YXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFz
cyBfQ29tcGFyZT4NCnZvaWQgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz
dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19s
ZW4xLCBfRGlzdGFuY2UgX19sZW4yLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCiAgaWYgKF9fbGVuMSA9PSAw
IHx8IF9fbGVuMiA9PSAwKQ0KICAgIHJldHVybjsNCiAgaWYgKF9fbGVuMSAr
IF9fbGVuMiA9PSAyKSB7DQogICAgaWYgKF9fY29tcCgqX19taWRkbGUsICpf
X2ZpcnN0KSkNCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7
DQogICAgcmV0dXJuOw0KICB9DQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0X2N1dCA9IF9fZmlyc3Q7DQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Nl
Y29uZF9jdXQgPSBfX21pZGRsZTsNCiAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAw
Ow0KICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7DQogIGlmIChfX2xlbjEgPiBf
X2xlbjIpIHsNCiAgICBfX2xlbjExID0gX19sZW4xIC8gMjsNCiAgICBhZHZh
bmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsNCiAgICBfX3NlY29uZF9jdXQg
PSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQs
IF9fY29tcCk7DQogICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1
dCwgX19sZW4yMik7DQogIH0NCiAgZWxzZSB7DQogICAgX19sZW4yMiA9IF9f
bGVuMiAvIDI7DQogICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIp
Ow0KICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19t
aWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7DQogICAgZGlzdGFuY2Uo
X19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOw0KICB9DQogIF9CaWRp
cmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUNCiAgICA9IHJvdGF0ZShfX2Zp
cnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7DQogIF9fbWVyZ2Vf
d2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21p
ZGRsZSwgX19sZW4xMSwgX19sZW4yMiwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbXApOw0KICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3
X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVu
MTEsDQogICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4y
MiwgX19jb21wKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsDQogICAgICAg
ICAgY2xhc3MgX0Rpc3RhbmNlPg0KX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jv
dGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlcjEgX19taWRkbGUsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu
Y2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f
YnVmZmVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkNCnsNCiAgX0JpZGlyZWN0aW9u
YWxJdGVyMiBfX2J1ZmZlcl9lbmQ7DQogIGlmIChfX2xlbjEgPiBfX2xlbjIg
JiYgX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsNCiAgICBfX2J1ZmZlcl9l
bmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsNCiAgICBj
b3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOw0KICAg
IHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3Qp
Ow0KICB9DQogIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7
DQogICAgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwg
X19idWZmZXIpOw0KICAgIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19maXJz
dCk7DQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19idWZmZXIsIF9fYnVm
ZmVyX2VuZCwgX19sYXN0KTsNCiAgfQ0KICBlbHNlDQogICAgcmV0dXJuIHJv
dGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlcjIsDQogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyMz4NCl9CaWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNrd2FyZChf
QmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19s
YXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19s
YXN0MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0KQ0Kew0KICBpZiAoX19maXJz
dDEgPT0gX19sYXN0MSkNCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2Zp
cnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOw0KICBpZiAoX19maXJzdDIgPT0g
X19sYXN0MikNCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwg
X19sYXN0MSwgX19yZXN1bHQpOw0KICAtLV9fbGFzdDE7DQogIC0tX19sYXN0
MjsNCiAgd2hpbGUgKHRydWUpIHsNCiAgICBpZiAoKl9fbGFzdDIgPCAqX19s
YXN0MSkgew0KICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsNCiAgICAg
IGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQ0KICAgICAgICByZXR1cm4gY29w
eV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7DQog
ICAgICAtLV9fbGFzdDE7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgKi0t
X19yZXN1bHQgPSAqX19sYXN0MjsNCiAgICAgIGlmIChfX2ZpcnN0MiA9PSBf
X2xhc3QyKQ0KICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0
MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7DQogICAgICAtLV9fbGFzdDI7DQog
ICAgfQ0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25h
bEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLA0KICAgICAgICAg
IGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjMsIGNsYXNzIF9Db21wYXJlPg0K
X0JpZGlyZWN0aW9uYWxJdGVyMyBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVj
dGlvbmFsSXRlcjEgX19maXJzdDEsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlcjIgX19maXJzdDIsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlcjMgX19yZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0Kew0KICBpZiAoX19m
aXJzdDEgPT0gX19sYXN0MSkNCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChf
X2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOw0KICBpZiAoX19maXJzdDIg
PT0gX19sYXN0MikNCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0
MSwgX19sYXN0MSwgX19yZXN1bHQpOw0KICAtLV9fbGFzdDE7DQogIC0tX19s
YXN0MjsNCiAgd2hpbGUgKHRydWUpIHsNCiAgICBpZiAoX19jb21wKCpfX2xh
c3QyLCAqX19sYXN0MSkpIHsNCiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFz
dDE7DQogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkNCiAgICAgICAg
cmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19y
ZXN1bHQpOw0KICAgICAgLS1fX2xhc3QxOw0KICAgIH0NCiAgICBlbHNlIHsN
CiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7DQogICAgICBpZiAoX19m
aXJzdDIgPT0gX19sYXN0MikNCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh
cmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOw0KICAgICAgLS1f
X2xhc3QyOw0KICAgIH0NCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Qb2lu
dGVyPg0Kdm9pZCBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX21pZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsDQogICAgICAg
ICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBf
X2J1ZmZlcl9zaXplKQ0Kew0KICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBf
X2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgew0KICAgIF9Qb2ludGVyIF9fYnVm
ZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsN
CiAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwg
X19sYXN0LCBfX2ZpcnN0KTsNCiAgfQ0KICBlbHNlIGlmIChfX2xlbjIgPD0g
X19idWZmZXJfc2l6ZSkgew0KICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9
IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOw0KICAgIF9fbWVy
Z2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1
ZmZlcl9lbmQsIF9fbGFzdCk7DQogIH0NCiAgZWxzZSB7DQogICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsNCiAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7DQogICAg
X0Rpc3RhbmNlIF9fbGVuMTEgPSAwOw0KICAgIF9EaXN0YW5jZSBfX2xlbjIy
ID0gMDsNCiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7DQogICAgICBfX2xl
bjExID0gX19sZW4xIC8gMjsNCiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQs
IF9fbGVuMTEpOw0KICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQo
X19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsNCiAgICAgIGRpc3Rh
bmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOw0KICAgIH0N
CiAgICBlbHNlIHsNCiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOw0KICAg
ICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOw0KICAgICAgX19m
aXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9f
c2Vjb25kX2N1dCk7DQogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0
X2N1dCwgX19sZW4xMSk7DQogICAgfQ0KICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX25ld19taWRkbGUgPQ0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19m
aXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9f
bGVuMTEsDQogICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1
ZmZlciwgX19idWZmZXJfc2l6ZSk7DQogICAgX19tZXJnZV9hZGFwdGl2ZShf
X2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLA0K
ICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVm
ZmVyX3NpemUpOw0KICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxl
LCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwNCiAg
ICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVy
LCBfX2J1ZmZlcl9zaXplKTsNCiAgfQ0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Q
b2ludGVyLA0KICAgICAgICAgIGNsYXNzIF9Db21wYXJlPg0Kdm9pZCBfX21l
cmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRs
ZSwNCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xl
bjEsIF9EaXN0YW5jZSBfX2xlbjIsDQogICAgICAgICAgICAgICAgICAgICAg
X1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLA0K
ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCiAg
aWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3Np
emUpIHsNCiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmly
c3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7DQogICAgbWVyZ2UoX19idWZmZXIs
IF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCwgX19j
b21wKTsNCiAgfQ0KICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6
ZSkgew0KICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRk
bGUsIF9fbGFzdCwgX19idWZmZXIpOw0KICAgIF9fbWVyZ2VfYmFja3dhcmQo
X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9f
bGFzdCwNCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7DQogIH0NCiAg
ZWxzZSB7DQogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0g
X19maXJzdDsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0
ID0gX19taWRkbGU7DQogICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOw0KICAg
IF9EaXN0YW5jZSBfX2xlbjIyID0gMDsNCiAgICBpZiAoX19sZW4xID4gX19s
ZW4yKSB7DQogICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsNCiAgICAgIGFk
dmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOw0KICAgICAgX19zZWNvbmRf
Y3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3Rf
Y3V0LCBfX2NvbXApOw0KICAgICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vj
b25kX2N1dCwgX19sZW4yMik7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAg
X19sZW4yMiA9IF9fbGVuMiAvIDI7DQogICAgICBhZHZhbmNlKF9fc2Vjb25k
X2N1dCwgX19sZW4yMik7DQogICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2Jv
dW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXAp
Ow0KICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVu
MTEpOw0KICAgIH0NCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlk
ZGxlID0NCiAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBf
X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjEgLSBfX2xlbjExLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVm
ZmVyX3NpemUpOw0KICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19m
aXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwNCiAgICAgICAgICAg
ICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBf
X2NvbXApOw0KICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBf
X3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwNCiAgICAg
ICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBf
X2J1ZmZlcl9zaXplLCBfX2NvbXApOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rp
c3RhbmNlPg0KaW5saW5lIHZvaWQgX19pbnBsYWNlX21lcmdlX2F1eChfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqKQ0Kew0KICBfRGlzdGFuY2Ug
X19sZW4xID0gMDsNCiAgZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUsIF9f
bGVuMSk7DQogIF9EaXN0YW5jZSBfX2xlbjIgPSAwOw0KICBkaXN0YW5jZShf
X21pZGRsZSwgX19sYXN0LCBfX2xlbjIpOw0KDQogIF9UZW1wb3JhcnlfYnVm
ZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBf
X2xhc3QpOw0KICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQ0KICAgIF9fbWVy
Z2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwg
X19sZW4xLCBfX2xlbjIpOw0KICBlbHNlDQogICAgX19tZXJnZV9hZGFwdGl2
ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwN
CiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5j
ZShfX2J1Zi5zaXplKCkpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlciwgY2xhc3MgX1RwLA0KICAgICAgICAgIGNsYXNzIF9E
aXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+DQppbmxpbmUgdm9pZCBfX2lucGxh
Y2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19taWRkbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSos
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkNCnsNCiAgX0Rpc3RhbmNlIF9fbGVuMSA9IDA7DQogIGRpc3RhbmNl
KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOw0KICBfRGlzdGFuY2UgX19s
ZW4yID0gMDsNCiAgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCwgX19sZW4y
KTsNCg0KICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIs
IF9UcD4gX19idWYoX19maXJzdCwgX19sYXN0KTsNCiAgaWYgKF9fYnVmLmJl
Z2luKCkgPT0gMCkNCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmly
c3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXAp
Ow0KICBlbHNlDQogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21p
ZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwNCiAgICAgICAgICAgICAg
ICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1Zi5zaXplKCkp
LA0KICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCn0NCg0KdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4NCmlubGluZSB2b2lkIGlu
cGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21p
ZGRsZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgaWYgKF9f
Zmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQ0KICAg
IHJldHVybjsNCiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0LCBfX21p
ZGRsZSwgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVf
dHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsNCn0N
Cg0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3Mg
X0NvbXBhcmU+DQppbmxpbmUgdm9pZCBpbnBsYWNlX21lcmdlKF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9Db21w
YXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICBpZiAoX19m
aXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpDQogICAg
cmV0dXJuOw0KICBfX2lucGxhY2VfbWVyZ2VfYXV4KF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90
eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksDQogICAg
ICAgICAgICAgICAgICAgICAgX19jb21wKTsNCn0NCg0KDQoNCg0KDQoNCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+
DQpib29sIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLA0KICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikNCnsNCg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICBp
ZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQ0KICAgICAgcmV0dXJuIGZhbHNl
Ow0KICAgIGVsc2UgaWYoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQ0KICAgICAg
KytfX2ZpcnN0MTsNCiAgICBlbHNlDQogICAgICArK19fZmlyc3QxLCArK19f
Zmlyc3QyOw0KDQogIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOw0KfQ0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0
ZXIyLCBjbGFzcyBfQ29tcGFyZT4NCmJvb2wgaW5jbHVkZXMoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
LCBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0K
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICBpZiAoX19j
b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkNCiAgICAgIHJldHVybiBmYWxz
ZTsNCiAgICBlbHNlIGlmKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0Mikp
DQogICAgICArK19fZmlyc3QxOw0KICAgIGVsc2UNCiAgICAgICsrX19maXJz
dDEsICsrX19maXJzdDI7DQoNCiAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFz
dDI7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg
X0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KX091dHB1dEl0ZXIg
c2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQ0Kew0KDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ow0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0Mikgew0KICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz
dDIpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsr
X19maXJzdDE7DQogICAgfQ0KICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpf
X2ZpcnN0MSkgew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOw0KICAg
ICAgKytfX2ZpcnN0MjsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDE7DQogICAgICArK19fZmlyc3QxOw0KICAgICAg
KytfX2ZpcnN0MjsNCiAgICB9DQogICAgKytfX3Jlc3VsdDsNCiAgfQ0KICBy
ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg
X19sYXN0MSwgX19yZXN1bHQpKTsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0
ZXIsDQogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+DQpfT3V0cHV0SXRlciBz
ZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f
bGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m
aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAg
ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkN
CnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mikgew0KICAgIGlmIChf
X2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7DQogICAgICAqX19yZXN1
bHQgPSAqX19maXJzdDE7DQogICAgICArK19fZmlyc3QxOw0KICAgIH0NCiAg
ICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7DQog
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7DQogICAgICArK19fZmlyc3Qy
Ow0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0MTsNCiAgICAgICsrX19maXJzdDE7DQogICAgICArK19fZmlyc3QyOw0K
ICAgIH0NCiAgICArK19fcmVzdWx0Ow0KICB9DQogIHJldHVybiBjb3B5KF9f
Zmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl
c3VsdCkpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs
YXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4NCl9PdXRwdXRJ
dGVyIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIHdoaWxlIChfX2Zp
cnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpDQogICAg
aWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikNCiAgICAgICsrX19maXJzdDE7
DQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQ0KICAgICAg
KytfX2ZpcnN0MjsNCiAgICBlbHNlIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0MTsNCiAgICAgICsrX19maXJzdDE7DQogICAgICArK19fZmlyc3Qy
Ow0KICAgICAgKytfX3Jlc3VsdDsNCiAgICB9DQogIHJldHVybiBfX3Jlc3Vs
dDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf
SW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsDQogICAgICAgICAgY2xh
c3MgX0NvbXBhcmU+DQpfT3V0cHV0SXRlciBzZXRfaW50ZXJzZWN0aW9uKF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29t
cCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ow0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgd2hpbGUgKF9fZmlyc3Qx
ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICBpZiAo
X19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkNCiAgICAgICsrX19maXJz
dDE7DQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3Qx
KSkNCiAgICAgICsrX19maXJzdDI7DQogICAgZWxzZSB7DQogICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDE7DQogICAgICArK19fZmlyc3QxOw0KICAgICAg
KytfX2ZpcnN0MjsNCiAgICAgICsrX19yZXN1bHQ7DQogICAgfQ0KICByZXR1
cm4gX19yZXN1bHQ7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPg0KX091
dHB1dEl0ZXIgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEs
IF9JbnB1dEl0ZXIxIF9fbGFzdDEsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0
MiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCiAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikNCiAgICBp
ZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7DQogICAgICAqX19yZXN1bHQg
PSAqX19maXJzdDE7DQogICAgICArK19fZmlyc3QxOw0KICAgICAgKytfX3Jl
c3VsdDsNCiAgICB9DQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmly
c3QxKQ0KICAgICAgKytfX2ZpcnN0MjsNCiAgICBlbHNlIHsNCiAgICAgICsr
X19maXJzdDE7DQogICAgICArK19fZmlyc3QyOw0KICAgIH0NCiAgcmV0dXJu
IGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsNCn0NCg0KdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwg
Y2xhc3MgX091dHB1dEl0ZXIsDQogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+
DQpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf
X2xhc3QyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkNCnsNCg0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOw0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsNCg0KDQoNCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m
aXJzdDIgIT0gX19sYXN0MikNCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkgew0KICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOw0K
ICAgICAgKytfX2ZpcnN0MTsNCiAgICAgICsrX19yZXN1bHQ7DQogICAgfQ0K
ICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpDQog
ICAgICArK19fZmlyc3QyOw0KICAgIGVsc2Ugew0KICAgICAgKytfX2ZpcnN0
MTsNCiAgICAgICsrX19maXJzdDI7DQogICAgfQ0KICByZXR1cm4gY29weShf
X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOw0KfQ0KDQp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf
T3V0cHV0SXRlcj4NCl9PdXRwdXRJdGVyDQpzZXRfc3ltbWV0cmljX2RpZmZl
cmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz
dDEsDQogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m
aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsDQogICAgICAgICAgICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpDQp7DQoNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7DQoNCg0KICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyKQ0KICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz
dDIpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsNCiAgICAgICsr
X19maXJzdDE7DQogICAgICArK19fcmVzdWx0Ow0KICAgIH0NCiAgICBlbHNl
IGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsNCiAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0MjsNCiAgICAgICsrX19maXJzdDI7DQogICAgICArK19f
cmVzdWx0Ow0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICsrX19maXJzdDE7
DQogICAgICArK19fZmlyc3QyOw0KICAgIH0NCiAgcmV0dXJuIGNvcHkoX19m
aXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVz
dWx0KSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xh
c3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLA0KICAgICAgICAg
IGNsYXNzIF9Db21wYXJlPg0KX091dHB1dEl0ZXINCnNldF9zeW1tZXRyaWNf
ZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApDQp7DQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsNCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7DQoNCg0KDQogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIpDQogICAgaWYgKF9fY29tcCgqX19maXJz
dDEsICpfX2ZpcnN0MikpIHsNCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
MTsNCiAgICAgICsrX19maXJzdDE7DQogICAgICArK19fcmVzdWx0Ow0KICAg
IH0NCiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEp
KSB7DQogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7DQogICAgICArK19f
Zmlyc3QyOw0KICAgICAgKytfX3Jlc3VsdDsNCiAgICB9DQogICAgZWxzZSB7
DQogICAgICArK19fZmlyc3QxOw0KICAgICAgKytfX2ZpcnN0MjsNCiAgICB9
DQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmly
c3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOw0KfQ0KDQoNCg0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPg0KX0ZvcndhcmRJdGVyIG1heF9lbGVt
ZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsNCg0KDQogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f
Zmlyc3Q7DQogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7DQog
IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQ0KICAgIGlmICgqX19yZXN1
bHQgPCAqX19maXJzdCkNCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsNCiAg
cmV0dXJuIF9fcmVzdWx0Ow0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4NCl9Gb3J3YXJkSXRlciBtYXhfZWxl
bWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp
DQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KDQoNCg0KICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBf
X2ZpcnN0Ow0KICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Ow0K
ICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkNCiAgICBpZiAoX19jb21w
KCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSBfX3Jlc3VsdCA9IF9fZmlyc3Q7DQog
IHJldHVybiBfX3Jlc3VsdDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcj4NCl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkNCnsNCg0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQoNCg0KICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0Ow0KICBfRm9y
d2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Ow0KICB3aGlsZSAoKytfX2Zp
cnN0ICE9IF9fbGFzdCkNCiAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHQp
DQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7DQogIHJldHVybiBfX3Jlc3Vs
dDsNCn0NCg0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X0NvbXBhcmU+DQpfRm9yd2FyZEl0ZXIgbWluX2VsZW1lbnQoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsNCiAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsNCiAgd2hpbGUgKCsrX19m
aXJzdCAhPSBfX2xhc3QpDQogICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9f
cmVzdWx0KSkNCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsNCiAgcmV0dXJu
IF9fcmVzdWx0Ow0KfQ0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGly
ZWN0aW9uYWxJdGVyPg0KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0
KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogIGlmIChfX2ZpcnN0ID09
IF9fbGFzdCkNCiAgICByZXR1cm4gZmFsc2U7DQogIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2kgPSBfX2ZpcnN0Ow0KICArK19faTsNCiAgaWYgKF9faSA9PSBf
X2xhc3QpDQogICAgcmV0dXJuIGZhbHNlOw0KICBfX2kgPSBfX2xhc3Q7DQog
IC0tX19pOw0KDQogIGZvcig7Oykgew0KICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2lpID0gX19pOw0KICAgIC0tX19pOw0KICAgIGlmICgqX19pIDwgKl9f
aWkpIHsNCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7
DQogICAgICB3aGlsZSAoISgqX19pIDwgKi0tX19qKSkNCiAgICAgICAge30N
CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7DQogICAgICByZXZlcnNlKF9f
aWksIF9fbGFzdCk7DQogICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQogICAg
aWYgKF9faSA9PSBfX2ZpcnN0KSB7DQogICAgICByZXZlcnNlKF9fZmlyc3Qs
IF9fbGFzdCk7DQogICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KICB9DQp9
DQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNz
IF9Db21wYXJlPg0KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LA0K
ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkNCnsNCg0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7DQoNCg0KDQogIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkNCiAgICByZXR1cm4gZmFsc2U7DQogIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2kgPSBfX2ZpcnN0Ow0KICArK19faTsNCiAgaWYgKF9faSA9PSBfX2xhc3Qp
DQogICAgcmV0dXJuIGZhbHNlOw0KICBfX2kgPSBfX2xhc3Q7DQogIC0tX19p
Ow0KDQogIGZvcig7Oykgew0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lp
ID0gX19pOw0KICAgIC0tX19pOw0KICAgIGlmIChfX2NvbXAoKl9faSwgKl9f
aWkpKSB7DQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0
Ow0KICAgICAgd2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19qKSkNCiAgICAg
ICAge30NCiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7DQogICAgICByZXZl
cnNlKF9faWksIF9fbGFzdCk7DQogICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9
DQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7DQogICAgICByZXZlcnNlKF9f
Zmlyc3QsIF9fbGFzdCk7DQogICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0K
ICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+
DQpib29sIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9f
Zmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpDQp7DQoNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KDQoNCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAg
IHJldHVybiBmYWxzZTsNCiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9f
Zmlyc3Q7DQogICsrX19pOw0KICBpZiAoX19pID09IF9fbGFzdCkNCiAgICBy
ZXR1cm4gZmFsc2U7DQogIF9faSA9IF9fbGFzdDsNCiAgLS1fX2k7DQoNCiAg
Zm9yKDs7KSB7DQogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7
DQogICAgLS1fX2k7DQogICAgaWYgKCpfX2lpIDwgKl9faSkgew0KICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsNCiAgICAgIHdoaWxl
ICghKCotLV9faiA8ICpfX2kpKQ0KICAgICAgICB7fQ0KICAgICAgaXRlcl9z
d2FwKF9faSwgX19qKTsNCiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsN
CiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCiAgICBpZiAoX19pID09IF9f
Zmlyc3QpIHsNCiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsNCiAg
ICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogIH0NCn0NCg0KdGVtcGxhdGUg
PGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+DQpi
b29sIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly
c3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsDQogICAgICAgICAgICAg
ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQ0Kew0KDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsNCg0KDQoNCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgIHJldHVy
biBmYWxzZTsNCiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7
DQogICsrX19pOw0KICBpZiAoX19pID09IF9fbGFzdCkNCiAgICByZXR1cm4g
ZmFsc2U7DQogIF9faSA9IF9fbGFzdDsNCiAgLS1fX2k7DQoNCiAgZm9yKDs7
KSB7DQogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7DQogICAg
LS1fX2k7DQogICAgaWYgKF9fY29tcCgqX19paSwgKl9faSkpIHsNCiAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7DQogICAgICB3aGls
ZSAoIV9fY29tcCgqLS1fX2osICpfX2kpKQ0KICAgICAgICB7fQ0KICAgICAg
aXRlcl9zd2FwKF9faSwgX19qKTsNCiAgICAgIHJldmVyc2UoX19paSwgX19s
YXN0KTsNCiAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCiAgICBpZiAoX19p
ID09IF9fZmlyc3QpIHsNCiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0
KTsNCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogIH0NCn0NCg0KDQoN
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0
ZXI+DQpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2Zp
cnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9f
bGFzdDIpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgZm9y
ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKQ0KICAgIGZv
ciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0g
X19sYXN0MjsgKytfX2l0ZXIpDQogICAgICBpZiAoKl9fZmlyc3QxID09ICpf
X2l0ZXIpDQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsNCiAgcmV0dXJuIF9f
bGFzdDE7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+DQpfSW5w
dXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lu
cHV0SXRlciBfX2xhc3QxLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Nv
bXApDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCg0KDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7DQoNCg0KDQogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsg
KytfX2ZpcnN0MSkNCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBf
X2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQ0KICAgICAg
aWYgKF9fY29tcCgqX19maXJzdDEsICpfX2l0ZXIpKQ0KICAgICAgICByZXR1
cm4gX19maXJzdDE7DQogIHJldHVybiBfX2xhc3QxOw0KfQ0KIyAzMzkwICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn
by5oIiAzDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3Mg
X0ZvcndhcmRJdGVyMj4NCl9Gb3J3YXJkSXRlcjEgX19maW5kX2VuZChfRm9y
d2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0
MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9y
X3RhZykNCnsNCiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpDQogICAgcmV0
dXJuIF9fbGFzdDE7DQogIGVsc2Ugew0KICAgIF9Gb3J3YXJkSXRlcjEgX19y
ZXN1bHQgPSBfX2xhc3QxOw0KICAgIHdoaWxlICgxKSB7DQogICAgICBfRm9y
d2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdA0KICAgICAgICA9IHNlYXJjaChfX2Zp
cnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOw0KICAgICAgaWYg
KF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQ0KICAgICAgICByZXR1cm4gX19y
ZXN1bHQ7DQogICAgICBlbHNlIHsNCiAgICAgICAgX19yZXN1bHQgPSBfX25l
d19yZXN1bHQ7DQogICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0Ow0K
ICAgICAgICArK19fZmlyc3QxOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KfQ0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0Zvcndh
cmRJdGVyMiwNCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPg0K
X0ZvcndhcmRJdGVyMSBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJz
dDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIy
IF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9p
dGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQ0Kew0K
ICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikNCiAgICByZXR1cm4gX19sYXN0
MTsNCiAgZWxzZSB7DQogICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9f
bGFzdDE7DQogICAgd2hpbGUgKDEpIHsNCiAgICAgIF9Gb3J3YXJkSXRlcjEg
X19uZXdfcmVzdWx0DQogICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xh
c3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsNCiAgICAgIGlmIChf
X25ld19yZXN1bHQgPT0gX19sYXN0MSkNCiAgICAgICAgcmV0dXJuIF9fcmVz
dWx0Ow0KICAgICAgZWxzZSB7DQogICAgICAgIF9fcmVzdWx0ID0gX19uZXdf
cmVzdWx0Ow0KICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsNCiAg
ICAgICAgKytfX2ZpcnN0MTsNCiAgICAgIH0NCiAgICB9DQogIH0NCn0NCg0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyMj4NCl9CaWRpcmVjdGlvbmFsSXRlcjENCl9f
ZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGly
ZWN0aW9uYWxJdGVyMSBfX2xhc3QxLA0KICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz
dDIsDQogICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykNCnsNCg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOw0KDQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVy
YXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7DQogIHR5cGVk
ZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2
SXRlcjI7DQoNCiAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsNCiAg
X1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsNCiAgX1Jldkl0ZXIxIF9f
cnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3Qx
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihf
X2xhc3QyKSwgX19ybGFzdDIpOw0KDQogIGlmIChfX3JyZXN1bHQgPT0gX19y
bGFzdDEpDQogICAgcmV0dXJuIF9fbGFzdDE7DQogIGVsc2Ugew0KICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgp
Ow0KICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0Miwg
X19sYXN0MikpOw0KICAgIHJldHVybiBfX3Jlc3VsdDsNCiAgfQ0KfQ0KDQp0
ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiwNCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJl
ZGljYXRlPg0KX0JpZGlyZWN0aW9uYWxJdGVyMQ0KX19maW5kX2VuZChfQmlk
aXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIx
IF9fbGFzdDEsDQogICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19m
aXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwNCiAgICAgICAg
ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnLA0KICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f
Y29tcCkNCnsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
DQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0
ZXIxPiBfUmV2SXRlcjE7DQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxf
QmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7DQoNCiAgX1Jldkl0ZXIx
IF9fcmxhc3QxKF9fZmlyc3QxKTsNCiAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9f
Zmlyc3QyKTsNCiAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2
SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsNCg0KICBp
ZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQ0KICAgIHJldHVybiBfX2xhc3Qx
Ow0KICBlbHNlIHsNCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0
ID0gX19ycmVzdWx0LmJhc2UoKTsNCiAgICBhZHZhbmNlKF9fcmVzdWx0LCAt
ZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsNCiAgICByZXR1cm4gX19y
ZXN1bHQ7DQogIH0NCn0NCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPg0KaW5saW5lIF9Gb3J3YXJk
SXRlcjENCmZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3
YXJkSXRlcjEgX19sYXN0MSwNCiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m
aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikNCnsNCg0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsNCg0KDQoNCiAgcmV0dXJuIF9fZmluZF9lbmQo
X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLA0KICAgICAg
ICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwN
CiAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2Zp
cnN0MikpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwg
Y2xhc3MgX0ZvcndhcmRJdGVyMiwNCiAgICAgICAgICBjbGFzcyBfQmluYXJ5
UHJlZGljYXRlPg0KaW5saW5lIF9Gb3J3YXJkSXRlcjENCmZpbmRfZW5kKF9G
b3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwN
CiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRl
cjIgX19sYXN0MiwNCiAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21w
KQ0Kew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7DQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICBy
ZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIs
IF9fbGFzdDIsDQogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0
ZWdvcnkoX19maXJzdDEpLA0KICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh
dG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwNCiAgICAgICAgICAgICAgICAgICAg
X19jb21wKTsNCn0NCg0KDQoNCg0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4NCmJvb2wgX19pc19oZWFw
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9EaXN0YW5jZSBfX24pDQp7
DQogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7DQogIGZvciAoX0Rpc3RhbmNl
IF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwgX19uOyArK19fY2hpbGQpIHsNCiAg
ICBpZiAoX19maXJzdFtfX3BhcmVudF0gPCBfX2ZpcnN0W19fY2hpbGRdKQ0K
ICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIGlmICgoX19jaGlsZCAmIDEpID09
IDApDQogICAgICArK19fcGFyZW50Ow0KICB9DQogIHJldHVybiB0cnVlOw0K
fQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9EaXN0YW5jZSwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4NCmJvb2wg
X19pc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9TdHJpY3RX
ZWFrT3JkZXJpbmcgX19jb21wLA0KICAgICAgICAgICAgICAgX0Rpc3RhbmNl
IF9fbikNCnsNCiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gMDsNCiAgZm9yIChf
RGlzdGFuY2UgX19jaGlsZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGls
ZCkgew0KICAgIGlmIChfX2NvbXAoX19maXJzdFtfX3BhcmVudF0sIF9fZmly
c3RbX19jaGlsZF0pKQ0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIGlmICgo
X19jaGlsZCAmIDEpID09IDApDQogICAgICArK19fcGFyZW50Ow0KICB9DQog
IHJldHVybiB0cnVlOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXI+DQppbmxpbmUgYm9vbCBpc19oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkNCnsNCg0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7DQoNCg0KICByZXR1cm4gX19pc19oZWFwKF9fZmlyc3Qs
IF9fbGFzdCAtIF9fZmlyc3QpOw0KfQ0KDQoNCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4N
CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAg
ICAgICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkNCnsNCg0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7DQoNCg0KDQogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19j
b21wLCBfX2xhc3QgLSBfX2ZpcnN0KTsNCn0NCg0KDQoNCg0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPg0KYm9vbCBpc19zb3J0ZWQoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpDQp7DQoNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoN
CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQ0KICAgIHJldHVybiB0cnVlOw0K
DQogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0Ow0KICBmb3IgKCsr
X19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCAr
K19fbmV4dCkgew0KICAgIGlmICgqX19uZXh0IDwgKl9fZmlyc3QpDQogICAg
ICByZXR1cm4gZmFsc2U7DQogIH0NCg0KICByZXR1cm4gdHJ1ZTsNCn0NCg0K
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1N0cmljdFdl
YWtPcmRlcmluZz4NCmJvb2wgaXNfc29ydGVkKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LA0KICAgICAgICAgICAgICAgX1N0
cmljdFdlYWtPcmRlcmluZyBfX2NvbXApDQp7DQoNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0KDQoNCg0KICBpZiAoX19m
aXJzdCA9PSBfX2xhc3QpDQogICAgcmV0dXJuIHRydWU7DQoNCiAgX0Zvcndh
cmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7DQogIGZvciAoKytfX25leHQ7IF9f
bmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7
DQogICAgaWYgKF9fY29tcCgqX19uZXh0LCAqX19maXJzdCkpDQogICAgICBy
ZXR1cm4gZmFsc2U7DQogIH0NCg0KICByZXR1cm4gdHJ1ZTsNCn0NCg0KfQ0K
IyAzNyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2FsZ29yaXRobS5oIiAyIDMNCiMgNTAgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2lj
X3N0cmluZy50Y2MiIDEgMw0KIyA0MyAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMw0KbmFtZXNw
YWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBjb25zdCBfQ2hh
clQNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoNCiAgICBfUmVwOjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOw0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPg0KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIF9S
ZXA6Ol9TX21heF9zaXplID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6
ZW9mKF9DaGFyVCkpIC0gMSkgLyA0Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0K
ICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46Om5wb3M7DQoNCg0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPg0KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9TX2VtcHR5X3JlcF9zdG9yYWdl
Ww0KICAgIChzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVv
ZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOw0KDQoNCg0K
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0luSXRlcj4NCiAgICAgIF9DaGFyVCoNCiAgICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgICAgX1NfY29uc3RydWN0
KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYg
X19hLA0KICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykN
CiAgICAgIHsNCiAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9
PSBfQWxsb2MoKSkNCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCku
X01fcmVmY29weSgpOw0KDQogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOw0K
ICAgICAgICBzaXplX3R5cGUgX19pID0gMDsNCiAgICAgICAgd2hpbGUgKF9f
YmVnICE9IF9fZW5kICYmIF9faSA8IHNpemVvZihfX2J1ZikgLyBzaXplb2Yo
X0NoYXJUKSkNCiAgICAgICAgICB7DQogICAgICAgICAgICBfX2J1ZltfX2kr
K10gPSAqX19iZWc7DQogICAgICAgICAgICArK19fYmVnOw0KICAgICAgICAg
IH0NCiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9faSwg
X19hKTsNCiAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZk
YXRhKCksIF9fYnVmLCBfX2kpOw0KICAgICAgICBfX3ItPl9NX2xlbmd0aCA9
IF9faTsNCiAgICAgICAgdHJ5DQogICAgICAgICAgew0KDQoNCg0KICAgICAg
ICAgICAgZm9yICg7OykNCiAgICAgICAgICAgICAgew0KICAgICAgICAgICAg
ICAgIF9DaGFyVCogX19wID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9N
X2xlbmd0aDsNCiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fbGFzdCA9IF9f
ci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsNCiAgICAgICAg
ICAgICAgICBmb3IgKDs7KQ0KICAgICAgICAgICAgICAgICAgew0KICAgICAg
ICAgICAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpDQogICAgICAgICAg
ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5f
TV9sZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsNCiAgICAgICAg
ICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5hbDsNCiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEo
KTsNCiAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg
ICAgIGlmIChfX3AgPT0gX19sYXN0KQ0KICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7
DQogICAgICAgICAgICAgICAgICAgICsrX19iZWc7DQogICAgICAgICAgICAg
ICAgICB9DQoNCiAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBf
X3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsNCiAgICAgICAgICAgICAgICBfUmVw
KiBfX2Fub3RoZXIgPSBfUmVwOjpfU19jcmVhdGUoX19sZW4gKyAxLCBfX2Ep
Ow0KICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhl
ci0+X01fcmVmZGF0YSgpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fci0+X01fcmVmZGF0YSgpLCBfX2xlbik7DQogICAgICAgICAg
ICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7DQogICAgICAgICAgICAgICAg
X19yID0gX19hbm90aGVyOw0KICAgICAgICAgICAgICAgIF9fci0+X01fbGVu
Z3RoID0gX19sZW47DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQog
ICAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgICB7DQogICAgICAgICAgICBf
X3ItPl9NX2Rlc3Ryb3koX19hKTsNCiAgICAgICAgICAgIHRocm93Ow0KICAg
ICAgICAgIH0NCiAgICAgICAgcmV0dXJuIDA7DQogICAgICB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+DQogICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+DQog
ICAgICBfQ2hhclQqDQogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFp
dHMsX0FsbG9jPjo6DQogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2Jl
ZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsDQogICAgICAg
ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpDQogICAgICB7DQog
ICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5
cGU+KGRpc3RhbmNlKF9fYmVnLCBfX2VuZCkpOw0KDQogICAgICAgIGlmIChf
X2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpDQogICAgICAgICAg
cmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsNCg0KDQogICAg
ICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2RuZXcsIF9fYSk7
DQogICAgICAgIHRyeQ0KICAgICAgICAgIHsgX1NfY29weV9jaGFycyhfX3It
Pl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQ0KICAgICAgICBjYXRj
aCguLi4pDQogICAgICAgICAgew0KICAgICAgICAgICAgX19yLT5fTV9kZXN0
cm95KF9fYSk7DQogICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICB9DQog
ICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19kbmV3Ow0KDQogICAgICAgIF9f
ci0+X01fcmVmZGF0YSgpW19fZG5ld10gPSBfUmVwOjpfU190ZXJtaW5hbDsN
CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOw0KICAgICAgfQ0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIF9DaGFyVCoNCiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIF9TX2NvbnN0
cnVjdChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2Mm
IF9fYSkNCiAgICB7DQogICAgICBpZiAoX19uID09IDAgJiYgX19hID09IF9B
bGxvYygpKQ0KICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVm
Y29weSgpOw0KDQoNCiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0
ZShfX24sIF9fYSk7DQogICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAg
IGlmIChfX24pDQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9f
ci0+X01fcmVmZGF0YSgpLCBfX24sIF9fYyk7DQogICAgICAgIH0NCiAgICAg
IGNhdGNoKC4uLikNCiAgICAgICAgew0KICAgICAgICAgIF9fci0+X01fZGVz
dHJveShfX2EpOw0KICAgICAgICAgIHRocm93Ow0KICAgICAgICB9DQogICAg
ICBfX3ItPl9NX2xlbmd0aCA9IF9fbjsNCiAgICAgIF9fci0+X01fcmVmZGF0
YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsNCiAgICAgIHJldHVybiBf
X3ItPl9NX3JlZmRhdGEoKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
DQogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp
DQogICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihf
QWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwNCiAgICAgICAgICAg
ICAgICAgX19zdHIuZ2V0X2FsbG9jYXRvcigpKQ0KICAgIHsgfQ0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46Og0KICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2Mm
IF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChzaXplX3R5
cGUoKSwgX0NoYXJUKCksIF9fYSksIF9fYSkNCiAgICB7IH0NCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoNCiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3Ry
aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQ0K
ICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNr
KF9fcG9zKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0
ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSksIF9BbGxvYygpKQ0K
ICAgIHsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGJhc2ljX3N0cmlu
Zyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3Ms
DQogICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxv
YyYgX19hKQ0KICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3Ry
Ll9NX2NoZWNrKF9fcG9zKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfX2EpLCBfX2EpDQog
ICAgeyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgYmFzaWNfc3RyaW5n
KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxs
b2MmIF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3Ms
IF9fcyArIF9fbiwgX19hKSwgX19hKQ0KICAgIHsgfQ0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46Og0KICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywg
Y29uc3QgX0FsbG9jJiBfX2EpDQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25z
dHJ1Y3QoX19zLCBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9f
YSksIF9fYSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBi
YXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3Qg
X0FsbG9jJiBfX2EpDQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qo
X19uLCBfX2MsIF9fYSksIF9fYSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4NCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPg0KICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAg
IGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyIF9fYmVnLCBfSW5wdXRJdGVyIF9f
ZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkNCiAgICA6IF9NX2RhdGFwbHVzKF9T
X2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkNCiAgICB7IH0N
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+Jg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OmFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcm
IF9fc3RyKQ0KICAgIHsNCiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5f
TV9yZXAoKSkNCiAgICAgICAgew0KDQogICAgICAgICAgYWxsb2NhdG9yX3R5
cGUgX19hID0gdGhpcy0+Z2V0X2FsbG9jYXRvcigpOw0KICAgICAgICAgIF9D
aGFyVCogX190bXAgPSBfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfX2EsIF9f
c3RyLmdldF9hbGxvY2F0b3IoKSk7DQogICAgICAgICAgX01fcmVwKCktPl9N
X2Rpc3Bvc2UoX19hKTsNCiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsNCiAg
ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4NCiAgICB2b2lkDQogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6DQogICAgX01fZGVzdHJveShj
b25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkNCiAgICB7DQogICAgICBzaXpl
X3R5cGUgX19zaXplID0gc2l6ZW9mKF9SZXApICsgKF9NX2NhcGFjaXR5ICsg
MSkgKiBzaXplb2YoX0NoYXJUKTsNCiAgICAgIF9SYXdfYnl0ZXNfYWxsb2Mo
X19hKS5kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMp
LCBfX3NpemUpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICB2
b2lkDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6X01fbGVha19oYXJkKCkNCiAgICB7DQogICAgICBpZiAoX01fcmVwKCkt
Pl9NX2lzX3NoYXJlZCgpKQ0KICAgICAgICBfTV9tdXRhdGUoMCwgMCwgMCk7
DQogICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOw0KICAgIH0NCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4NCiAgICB2b2lkDQogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgX01fbXV0YXRlKHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9f
bGVuMikNCiAgICB7DQogICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHRo
aXMtPnNpemUoKTsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXpl
ID0gX19vbGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsNCiAgICAgIGNvbnN0
IF9DaGFyVCogX19zcmMgPSBfTV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMTsN
CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2hvd19tdWNoID0gX19vbGRfc2l6
ZSAtIF9fcG9zIC0gX19sZW4xOw0KDQogICAgICBpZiAoX01fcmVwKCktPl9N
X2lzX3NoYXJlZCgpIHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpKQ0KICAg
ICAgICB7DQoNCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRf
YWxsb2NhdG9yKCk7DQogICAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1Nf
Y3JlYXRlKF9fbmV3X3NpemUsIF9fYSk7DQogICAgICAgICAgdHJ5DQogICAg
ICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChfX3BvcykNCiAgICAgICAg
ICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwg
X01fZGF0YSgpLCBfX3Bvcyk7DQogICAgICAgICAgICAgIGlmIChfX2hvd19t
dWNoKQ0KICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+
X01fcmVmZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9faG93X211Y2gpOw0KICAg
ICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgICAg
IHsNCiAgICAgICAgICAgICAgX19yLT5fTV9kaXNwb3NlKGdldF9hbGxvY2F0
b3IoKSk7DQogICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0K
ICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7DQogICAgICAg
ICAgX01fZGF0YShfX3ItPl9NX3JlZmRhdGEoKSk7DQogICAgICB9DQogICAg
ICBlbHNlIGlmIChfX2hvd19tdWNoICYmIF9fbGVuMSAhPSBfX2xlbjIpDQog
ICAgICAgIHsNCg0KICAgICAgICAgIHRyYWl0c190eXBlOjptb3ZlKF9NX2Rh
dGEoKSArIF9fcG9zICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVjaCk7DQog
ICAgICAgIH0NCiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsN
CiAgICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX25ld19zaXplOw0KICAg
ICAgX01fZGF0YSgpW19fbmV3X3NpemVdID0gX1JlcDo6X1NfdGVybWluYWw7
DQoNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgdm9pZA0KICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2Vy
dmUoc2l6ZV90eXBlIF9fcmVzKQ0KICAgIHsNCiAgICAgIGlmIChfX3JlcyA+
IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgp
KQ0KICAgICAgICB7DQogICAgICAgICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4
X3NpemUoKSkNCiAgICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJi
YXNpY19zdHJpbmc6OnJlc2VydmUiKTsNCiAgICAgICAgICBhbGxvY2F0b3Jf
dHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7DQogICAgICAgICAgX0NoYXJU
KiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9jbG9uZShfX2EsIF9fcmVzIC0gdGhp
cy0+c2l6ZSgpKTsNCiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShf
X2EpOw0KICAgICAgICAgIF9NX2RhdGEoX190bXApOw0KICAgICAgICB9DQog
ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c3dhcChiYXNpY19zdHJp
bmcmIF9fcykNCiAgICB7DQogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX2xl
YWtlZCgpKQ0KICAgICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7
DQogICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkNCiAg
ICAgICAgX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsNCiAgICAg
IGlmICh0aGlzLT5nZXRfYWxsb2NhdG9yKCkgPT0gX19zLmdldF9hbGxvY2F0
b3IoKSkNCiAgICAgICAgew0KICAgICAgICAgIF9DaGFyVCogX190bXAgPSBf
TV9kYXRhKCk7DQogICAgICAgICAgX01fZGF0YShfX3MuX01fZGF0YSgpKTsN
CiAgICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7DQogICAgICAgIH0NCg0K
ICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgYmFzaWNfc3RyaW5n
IF9fdG1wMShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3MuZ2V0X2FsbG9j
YXRvcigpKTsNCiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAyKF9fcy5f
TV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7DQogICAgICAg
ICAgKnRoaXMgPSBfX3RtcDI7DQogICAgICAgICAgX19zID0gX190bXAxOw0K
ICAgICAgICB9DQogICAgfQ0KIyAzNTYgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6X1JlcCoNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoNCiAgICBfU19jcmVhdGUoc2l6ZV90
IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxvYyYgX19hbGxvYykNCiAgICB7DQog
ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4gX19zdHJpbmdfdHlwZTsNCg0KDQogICAgICBpZiAoX19jYXBhY2l0
eSA+IF9TX21heF9zaXplKQ0KDQoNCg0KICAgICAgICBfX3Rocm93X2xlbmd0
aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfU19jcmVhdGUiKTsNCg0KDQoNCg0K
ICAgICAgc2l6ZV90IF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXpl
b2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsNCg0KDQogICAgICB2b2lkKiBf
X3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShf
X3NpemUpOw0KICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVw
Ow0KICAgICAgX19wLT5fTV9jYXBhY2l0eSA9IF9fY2FwYWNpdHk7DQogICAg
ICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOw0KICAgICAgX19wLT5fTV9sZW5n
dGggPSAwOw0KICAgICAgcmV0dXJuIF9fcDsNCiAgICB9DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+DQogICAgX0NoYXJUKg0KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6Og0KICAgIF9NX2Nsb25lKGNv
bnN0IF9BbGxvYyYgX19hbGxvYywgc2l6ZV90eXBlIF9fcmVzKQ0KICAgIHsN
CiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfTV9sZW5ndGgg
KyBfX3JlcywgX19hbGxvYyk7DQogICAgICBpZiAoX01fbGVuZ3RoKQ0KICAg
ICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7IHRyYWl0c190
eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfTV9yZWZkYXRhKCksIF9N
X2xlbmd0aCk7IH0NCiAgICAgICAgICBjYXRjaCguLi4pDQogICAgICAgICAg
ICB7DQogICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2FsbG9jKTsN
CiAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAg
IH0NCiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOw0KICAgICAg
cmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOw0KICAgIH0NCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4NCiAgaW5saW5lIGJvb2wNCg0KDQoNCg0KICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6Og0KICAgIF9T
X2V4Y2Vzc19zbG9wKHNpemVfdCBfX3MsIHNpemVfdCBfX3IpDQoNCiAgICB7
DQogICAgICByZXR1cm4gMiAqIChfX3MgPD0gMTYgPyAxNiA6IF9fcykgPCBf
X3I7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIHZvaWQNCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNp
emUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykNCiAgICB7DQogICAgICBp
ZiAoX19uID4gbWF4X3NpemUoKSkNCiAgICAgICAgX190aHJvd19sZW5ndGhf
ZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzaXplIik7DQogICAgICBzaXplX3R5
cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaWYgKF9fc2l6ZSA8
IF9fbikNCiAgICAgICAgdGhpcy0+YXBwZW5kKF9fbiAtIF9fc2l6ZSwgX19j
KTsNCiAgICAgIGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkNCiAgICAgICAgdGhp
cy0+ZXJhc2UoX19uKTsNCg0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4N
CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPg0KICAgICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYNCiAgICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgICAg
X01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5w
dXRJdGVyIF9fazEsDQogICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19r
MiwgaW5wdXRfaXRlcmF0b3JfdGFnKQ0KICAgICAgew0KICAgICAgICBiYXNp
Y19zdHJpbmcgX19zKF9fazEsIF9fazIpOw0KICAgICAgICByZXR1cm4gdGhp
cy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCksIF9fcy5f
TV9pZW5kKCkpOw0KICAgICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAg
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4NCiAgICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mDQogICAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICAgIF9N
X3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0Zvcndh
cmRJdGVyIF9fazEsDQogICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X2syLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykNCiAgICAgIHsNCiAgICAgICAg
c2l6ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOw0KICAgICAgICBzaXpl
X3R5cGUgX19kbWF4ID0gdGhpcy0+bWF4X3NpemUoKTsNCiAgICAgICAgc2l6
ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFu
Y2UoX19rMSwgX19rMikpOw0KDQogICAgICAgIGlmIChfX2RtYXggPD0gX19k
bmV3KQ0KICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19z
dHJpbmc6Ol9NX3JlcGxhY2UiKTsNCiAgICAgICAgc2l6ZV90eXBlIF9fb2Zm
ID0gX19pMSAtIF9NX2liZWdpbigpOw0KICAgICAgICBfTV9tdXRhdGUoX19v
ZmYsIF9fZG9sZCwgX19kbmV3KTsNCg0KICAgICAgICBpZiAoX19kbmV3KQ0K
ICAgICAgICAgIF9TX2NvcHlfY2hhcnMoX01fZGF0YSgpICsgX19vZmYsIF9f
azEsIF9fazIpOw0KDQogICAgICAgIHJldHVybiAqdGhpczsNCiAgICAgIH0N
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+Jg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9f
cG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIsDQogICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUg
X19uMikNCiAgICB7DQogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9j
aGVjayhfX3BvczEpLCBfTV9mb2xkKF9fcG9zMSwgX19uMSksDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9jaGVjayhfX3BvczIpLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3Bv
czIsIF9fbjIpKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mDQogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46Og0KICAgIGFwcGVu
ZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQ0KICAgIHsNCg0KDQoNCiAg
ICAgIHNpemVfdHlwZSBfX3NpemUgPSBfX3N0ci5zaXplKCk7DQogICAgICBz
aXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7DQogICAg
ICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQ0KICAgICAgICB0aGlz
LT5yZXNlcnZlKF9fbGVuKTsNCiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNl
KF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9pYmVnaW4oKSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7DQog
ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsX1RyYWl0cyxfQWxsb2M+Jg0KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsX1RyYWl0cyxfQWxsb2M+OjoNCiAgICBhcHBlbmQoY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
KQ0KICAgIHsNCg0KDQoNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihf
X3N0ci5zaXplKCkgLSBfX3BvcywgX19uKSArIHRoaXMtPnNpemUoKTsNCiAg
ICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpDQogICAgICAgIHRo
aXMtPnJlc2VydmUoX19sZW4pOw0KICAgICAgcmV0dXJuIHRoaXMtPnJlcGxh
Y2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2NoZWNrKF9fcG9z
KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQo
X19wb3MsIF9fbikpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYNCiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6DQogICAgYXBw
ZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQ0KICAgIHsN
CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsN
CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpDQogICAgICAg
IHRoaXMtPnJlc2VydmUoX19sZW4pOw0KICAgICAgcmV0dXJuIHRoaXMtPnJl
cGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsN
CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mDQogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCxfVHJhaXRzLF9BbGxvYz46Og0KICAgIGFwcGVuZChzaXplX3R5cGUg
X19uLCBfQ2hhclQgX19jKQ0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX2xl
biA9IF9fbiArIHRoaXMtPnNpemUoKTsNCiAgICAgIGlmIChfX2xlbiA+IHRo
aXMtPmNhcGFjaXR5KCkpDQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4p
Ow0KICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01f
aWVuZCgpLCBfX24sIF9fYyk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
Pg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+DQog
ICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsDQogICAgICAgICAg
ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4m
IF9fcmhzKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
aGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdfdHlwZTsNCiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6
ZV90eXBlOw0KICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjps
ZW5ndGgoX19saHMpOw0KICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsNCiAg
ICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyBfX3Jocy5zaXplKCkpOw0KICAg
ICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9fbGVuKTsNCiAgICAg
IF9fc3RyLmFwcGVuZChfX3Jocyk7DQogICAgICByZXR1cm4gX19zdHI7DQog
ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsX1RyYWl0cyxfQWxsb2M+DQogICAgb3BlcmF0b3IrKF9DaGFyVCBf
X2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxv
Yz4mIF9fcmhzKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5n
PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdfdHlwZTsNCiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9f
c2l6ZV90eXBlOw0KICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsNCiAgICAg
IF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOw0KICAgICAgX19z
dHIucmVzZXJ2ZShfX2xlbiArIDEpOw0KICAgICAgX19zdHIuYXBwZW5kKF9f
c2l6ZV90eXBlKDEpLCBfX2xocyk7DQogICAgICBfX3N0ci5hcHBlbmQoX19y
aHMpOw0KICAgICAgcmV0dXJuIF9fc3RyOw0KICAgIH0NCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+Jg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46Og0KICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig
X19pMiwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpDQogICAgew0KICAg
ICAgc2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsNCiAgICAgIHNpemVf
dHlwZSBfX29mZjEgPSBfX2kxIC0gX01faWJlZ2luKCk7DQogICAgICBpZiAo
bWF4X3NpemUoKSAtICh0aGlzLT5zaXplKCkgLSBfX24xKSA8PSBfX24yKQ0K
ICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpy
ZXBsYWNlIik7DQogICAgICBfTV9tdXRhdGUgKF9fb2ZmMSwgX19uMSwgX19u
Mik7DQoNCiAgICAgIGlmIChfX24yKQ0KICAgICAgICB0cmFpdHNfdHlwZTo6
YXNzaWduKF9NX2RhdGEoKSArIF9fb2ZmMSwgX19uMiwgX19jKTsNCiAgICAg
IHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6
ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6DQogICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwg
c2l6ZV90eXBlIF9fcG9zKSBjb25zdA0KICAgIHsNCiAgICAgIGlmIChfX3Bv
cyA+IHRoaXMtPnNpemUoKSkNCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFu
Z2UoImJhc2ljX3N0cmluZzo6Y29weSIpOw0KDQogICAgICBpZiAoX19uID4g
dGhpcy0+c2l6ZSgpIC0gX19wb3MpDQogICAgICAgIF9fbiA9IHRoaXMtPnNp
emUoKSAtIF9fcG9zOw0KDQogICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3Ms
IF9NX2RhdGEoKSArIF9fcG9zLCBfX24pOw0KDQogICAgICByZXR1cm4gX19u
Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBm
aW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVf
dHlwZSBfX24pIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6
ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3Bv
czsNCiAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOw0K
ICAgICAgZm9yICg7IF9feHBvcyArIF9fbiA8PSBfX3NpemU7ICsrX194cG9z
KQ0KICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsg
X194cG9zLCBfX3MsIF9fbikgPT0gMCkNCiAgICAgICAgICByZXR1cm4gX194
cG9zOw0KICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46Og0KICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90
eXBlIF9fcG9zKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlwZSBfX3Np
emUgPSB0aGlzLT5zaXplKCk7DQogICAgICBzaXplX3R5cGUgX19yZXQgPSBu
cG9zOw0KICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQ0KICAgICAgICB7DQog
ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7DQog
ICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOw0KICAg
ICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQo
X19kYXRhICsgX19wb3MsIF9fbiwgX19jKTsNCiAgICAgICAgICBpZiAoX19w
KQ0KICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7DQogICAgICAg
IH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoNCiAgICByZmluZChjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdA0KICAg
IHsNCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQog
ICAgICBpZiAoX19uIDw9IF9fc2l6ZSkNCiAgICAgICAgew0KICAgICAgICAg
IF9fcG9zID0gc3RkOjptaW4oX19zaXplIC0gX19uICxfX3Bvcyk7DQogICAg
ICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7DQogICAg
ICAgICAgZG8NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKHRy
YWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3MsIF9fbikg
PT0gMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gX19wb3M7DQogICAgICAg
ICAgICB9DQogICAgICAgICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsNCiAgICAg
ICAgfQ0KICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46Og0KICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVf
dHlwZSBfX3BvcykgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5cGUgX19z
aXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaWYgKF9fc2l6ZSkNCiAgICAg
ICAgew0KICAgICAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3NpemUgLSAxOw0K
ICAgICAgICAgIGlmIChfX3hwb3MgPiBfX3BvcykNCiAgICAgICAgICAgIF9f
eHBvcyA9IF9fcG9zOw0KDQogICAgICAgICAgZm9yICgrK19feHBvczsgX194
cG9zLS0gPiAwOyApDQogICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVx
KF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQ0KICAgICAgICAgICAgICByZXR1
cm4gX194cG9zOw0KICAgICAgICB9DQogICAgICByZXR1cm4gbnBvczsNCiAg
ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAgZmluZF9m
aXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBz
aXplX3R5cGUgX19uKSBjb25zdA0KICAgIHsNCiAgICAgIGZvciAoOyBfX24g
JiYgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpDQogICAgICAgIHsN
CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpm
aW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19wb3NdKTsNCiAgICAgICAgICBp
ZiAoX19wKQ0KICAgICAgICAgICAgcmV0dXJuIF9fcG9zOw0KICAgICAgICB9
DQogICAgICByZXR1cm4gbnBvczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+DQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6c2l6ZV90eXBlDQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6DQogICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCog
X19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0DQog
ICAgew0KICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsN
CiAgICAgIGlmIChfX3NpemUgJiYgX19uKQ0KICAgICAgICB7DQogICAgICAg
ICAgaWYgKC0tX19zaXplID4gX19wb3MpDQogICAgICAgICAgICBfX3NpemUg
PSBfX3BvczsNCiAgICAgICAgICBkbw0KICAgICAgICAgICAgew0KICAgICAg
ICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2Rh
dGEoKVtfX3NpemVdKSkNCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXpl
Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIHdoaWxlIChfX3NpemUtLSAh
PSAwKTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGZpbmRfZmlyc3Rf
bm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24pIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90IF9feHBv
cyA9IF9fcG9zOw0KICAgICAgZm9yICg7IF9fbiAmJiBfX3hwb3MgPCB0aGlz
LT5zaXplKCk7ICsrX194cG9zKQ0KICAgICAgICBpZiAoIXRyYWl0c190eXBl
OjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX194cG9zXSkpDQogICAgICAg
ICAgcmV0dXJuIF9feHBvczsNCiAgICAgIHJldHVybiBucG9zOw0KICAgIH0N
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUNCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBmaW5kX2ZpcnN0
X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0DQog
ICAgew0KICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOw0KICAgICAgZm9y
ICg7IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpDQogICAgICAg
IGlmICghdHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2Mp
KQ0KICAgICAgICAgIHJldHVybiBfX3hwb3M7DQogICAgICByZXR1cm4gbnBv
czsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlDQogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6DQogICAg
ZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdA0KICAgIHsNCiAgICAgIHNp
emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19z
aXplICYmIF9fbikNCiAgICAgICAgew0KICAgICAgICAgIGlmICgtLV9fc2l6
ZSA+IF9fcG9zKQ0KICAgICAgICAgICAgX19zaXplID0gX19wb3M7DQogICAg
ICAgICAgZG8NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYgKCF0
cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0p
KQ0KICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7DQogICAgICAgICAg
ICB9DQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsNCiAgICAgICAgfQ0K
ICAgICAgcmV0dXJuIG5wb3M7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
Pg0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnNpemVfdHlwZQ0KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46Og0KICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywg
c2l6ZV90eXBlIF9fcG9zKSBjb25zdA0KICAgIHsNCiAgICAgIHNpemVfdHlw
ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAgICBpZiAoX19zaXplKQ0K
ICAgICAgICB7DQogICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpDQog
ICAgICAgICAgICBfX3NpemUgPSBfX3BvczsNCiAgICAgICAgICBkbw0KICAg
ICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpl
cShfTV9kYXRhKClbX19zaXplXSwgX19jKSkNCiAgICAgICAgICAgICAgICBy
ZXR1cm4gX19zaXplOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIHdoaWxl
IChfX3NpemUtLSk7DQogICAgICAgIH0NCiAgICAgIHJldHVybiBucG9zOw0K
ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbnQNCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBjb21w
YXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0cikgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5
cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgc2l6ZV90eXBlIF9f
b3NpemUgPSBfX3N0ci5zaXplKCk7DQogICAgICBpZiAoX19wb3MgPiBfX3Np
emUpDQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp
bmc6OmNvbXBhcmUiKTsNCg0KICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IG1p
bihfX3NpemUgLSBfX3BvcywgX19uKTsNCiAgICAgIHNpemVfdHlwZSBfX2xl
biA9IG1pbihfX3JzaXplLCBfX29zaXplKTsNCiAgICAgIGludCBfX3IgPSB0
cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zdHIu
ZGF0YSgpLCBfX2xlbik7DQogICAgICBpZiAoIV9fcikNCiAgICAgICAgX19y
ID0gX19yc2l6ZSAtIF9fb3NpemU7DQogICAgICByZXR1cm4gX19yOw0KICAg
IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBpbnQNCiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoNCiAgICBjb21wYXJl
KHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyLA0KICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9z
Miwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90
eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIHNpemVfdHlwZSBf
X29zaXplID0gX19zdHIuc2l6ZSgpOw0KICAgICAgaWYgKF9fcG9zMSA+IF9f
c2l6ZSB8fCBfX3BvczIgPiBfX29zaXplKQ0KICAgICAgICBfX3Rocm93X291
dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7DQoNCiAgICAg
IHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zMSwgX19u
MSk7DQogICAgICBzaXplX3R5cGUgX19yb3NpemUgPSBtaW4oX19vc2l6ZSAt
IF9fcG9zMiwgX19uMik7DQogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4o
X19yc2l6ZSwgX19yb3NpemUpOw0KICAgICAgaW50IF9fciA9IHRyYWl0c190
eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5kYXRhKCkgKyBfX3Bv
czIsIF9fbGVuKTsNCiAgICAgIGlmICghX19yKQ0KICAgICAgICBfX3IgPSBf
X3JzaXplIC0gX19yb3NpemU7DQogICAgICByZXR1cm4gX19yOw0KICAgIH0N
Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0KICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Og0KICAgIGNvbXBhcmUo
Y29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0DQogICAgew0KICAgICAgc2l6ZV90
eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsNCiAgICAgIGludCBfX3IgPSB0
cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19zaXplKTsN
CiAgICAgIGlmICghX19yKQ0KICAgICAgICBfX3IgPSBfX3NpemUgLSB0cmFp
dHNfdHlwZTo6bGVuZ3RoKF9fcyk7DQogICAgICByZXR1cm4gX19yOw0KICAg
IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0KICAgIGJhc2lj
X3N0cmluZyA8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6DQogICAgY29tcGFy
ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hh
clQqIF9fcykgY29uc3QNCiAgICB7DQogICAgICBzaXplX3R5cGUgX19zaXpl
ID0gdGhpcy0+c2l6ZSgpOw0KICAgICAgaWYgKF9fcG9zID4gX19zaXplKQ0K
ICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpj
b21wYXJlIik7DQoNCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRz
X3R5cGU6Omxlbmd0aChfX3MpOw0KICAgICAgc2l6ZV90eXBlIF9fcnNpemUg
PSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOw0KICAgICAgc2l6ZV90eXBl
IF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOw0KICAgICAgaW50IF9f
ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBf
X3MsIF9fbGVuKTsNCiAgICAgIGlmICghX19yKQ0KICAgICAgICBfX3IgPSBf
X3JzaXplIC0gX19vc2l6ZTsNCiAgICAgIHJldHVybiBfX3I7DQogICAgfQ0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgIGludA0KICAgIGJhc2ljX3N0cmlu
ZyA8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6DQogICAgY29tcGFyZShzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9f
cywNCiAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdA0KICAgIHsN
CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7DQogICAg
ICBpZiAoX19wb3MgPiBfX3NpemUpDQogICAgICAgIF9fdGhyb3dfb3V0X29m
X3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsNCg0KICAgICAgc2l6
ZV90eXBlIF9fb3NpemUgPSBtaW4odHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp
LCBfX24yKTsNCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6
ZSAtIF9fcG9zLCBfX24xKTsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1p
bihfX3JzaXplLCBfX29zaXplKTsNCiAgICAgIGludCBfX3IgPSB0cmFpdHNf
dHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7
DQogICAgICBpZiAoIV9fcikNCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9f
b3NpemU7DQogICAgICByZXR1cm4gX19yOw0KICAgIH0NCg0KICB0ZW1wbGF0
ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+
DQogICAgdm9pZA0KICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLA0KICAgICAg
ICAgICAgICAgICAgIF9DaGFyVCogX19idWYsIHR5cGVuYW1lIF9BbGxvYzo6
c2l6ZV90eXBlIF9fYnVmc2l6KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOw0KICAgICAgc2l6
ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsNCiAgICAgIHNpemVf
dHlwZSBfX2J5dGVzID0gbWluKF9fc3Ryc2l6ZSwgX19idWZzaXogLSAxKTsN
CiAgICAgIF9UcmFpdHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19i
eXRlcyk7DQogICAgICBfX2J1ZltfX2J5dGVzXSA9IF9DaGFyVCgpOw0KICAg
IH0NCn0NCiMgNTEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzDQojIDQzICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzDQoj
IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jY3R5cGUuaCIgMSAzDQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBlLmgiIDMNCiMgMSAiL3Vzci9p
bmNsdWRlL2N0eXBlLmgiIDEgMyA0DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBlLmgiIDIgMw0KIyA1
NSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2NjdHlwZS5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHVzaW5nIDo6aXNh
bG51bTsNCiAgdXNpbmcgOjppc2FscGhhOw0KICB1c2luZyA6OmlzY250cmw7
DQogIHVzaW5nIDo6aXNkaWdpdDsNCiAgdXNpbmcgOjppc2dyYXBoOw0KICB1
c2luZyA6OmlzbG93ZXI7DQogIHVzaW5nIDo6aXNwcmludDsNCiAgdXNpbmcg
Ojppc3B1bmN0Ow0KICB1c2luZyA6Omlzc3BhY2U7DQogIHVzaW5nIDo6aXN1
cHBlcjsNCiAgdXNpbmcgOjppc3hkaWdpdDsNCiAgdXNpbmcgOjp0b2xvd2Vy
Ow0KICB1c2luZyA6OnRvdXBwZXI7DQp9DQojIDQ0ICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzDQoj
IDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Z1
bmN0ZXhjZXB0LmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMw0KIyAxICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmlu
ZXMuaCIgMSAzDQojIDM1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0
ZA0Kew0KDQogIHZvaWQNCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQp
Ow0KDQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsNCg0K
DQogIHZvaWQNCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsNCg0KICB2b2lk
DQogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsNCg0KDQogIHZvaWQNCiAg
X190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZv
aWQNCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsN
Cg0KICB2b2lkDQogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBj
aGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19sZW5ndGhfZXJyb3Io
Y29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfb3V0X29m
X3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93
X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQog
IF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsNCg0KICB2
b2lkDQogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19z
KTsNCg0KICB2b2lkDQogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfaW9zX2ZhaWx1
cmUoY29uc3QgY2hhciogX19zKTsNCn0NCiMgNDUgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMNCg0K
bmFtZXNwYWNlIHN0ZA0Kew0KIyA1NiAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDMNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgY2xhc3MgdmVj
dG9yOw0KICBjbGFzcyBsb2NhbGU7DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAgICBpc3NwYWNlKF9DaGFy
VCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNwcmludChfQ2hhclQsIGNv
bnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4N
CiAgICBpbmxpbmUgYm9vbA0KICAgIGlzY250cmwoX0NoYXJULCBjb25zdCBs
b2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg
aW5saW5lIGJvb2wNCiAgICBpc3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxl
Jik7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGlu
ZSBib29sDQogICAgaXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9v
bA0KICAgIGlzYWxwaGEoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsNCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW5saW5lIGJvb2wNCiAg
ICBpc2RpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNw
dW5jdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzeGRpZ2l0
KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7DQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNhbG51bShfQ2hh
clQsIGNvbnN0IGxvY2FsZSYpOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzZ3JhcGgoX0NoYXJULCBj
b25zdCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
DQogICAgaW5saW5lIF9DaGFyVA0KICAgIHRvdXBwZXIoX0NoYXJULCBjb25z
dCBsb2NhbGUmKTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQog
ICAgaW5saW5lIF9DaGFyVA0KICAgIHRvbG93ZXIoX0NoYXJULCBjb25zdCBs
b2NhbGUmKTsNCg0KDQoNCiAgY2xhc3MgY3R5cGVfYmFzZTsNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNsYXNzIGN0eXBlOw0KICB0ZW1w
bGF0ZTw+IGNsYXNzIGN0eXBlPGNoYXI+Ow0KDQoNCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgY3R5cGVfYnluYW1lOw0KDQoN
CiAgY2xhc3MgY29kZWN2dF9iYXNlOw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+
DQogICAgY2xhc3MgY29kZWN2dDsNCiAgdGVtcGxhdGU8PiBjbGFzcyBjb2Rl
Y3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47DQoNCg0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5h
bWUgX1N0YXRlVD4NCiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZTsNCg0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9
IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAgY2xhc3MgbnVt
X2dldDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
T3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAg
Y2xhc3MgbnVtX3B1dDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBj
bGFzcyBudW1wdW5jdDsNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBj
bGFzcyBudW1wdW5jdF9ieW5hbWU7DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+DQogICAgY2xhc3MgY29sbGF0ZTsNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPiBjbGFzcw0KICAgIGNvbGxhdGVfYnluYW1lOw0KDQoN
CiAgY2xhc3MgdGltZV9iYXNlOw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9D
aGFyVD4gPg0KICAgIGNsYXNzIHRpbWVfZ2V0Ow0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0
ZXJhdG9yPF9DaGFyVD4gPg0KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTsN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl
ciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAgY2xhc3Mg
dGltZV9wdXQ7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPg0K
ICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTsNCg0KDQogIGNsYXNzIG1vbmV5
X2Jhc2U7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+DQogICAg
Y2xhc3MgbW9uZXlfZ2V0Ow0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQ+ID4NCiAgICBjbGFzcyBtb25leV9wdXQ7DQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPg0KICAgIGNsYXNzIG1v
bmV5cHVuY3Q7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBf
SW50bCA9IGZhbHNlPg0KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lOw0K
DQoNCiAgY2xhc3MgbWVzc2FnZXNfYmFzZTsNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPg0KICAgIGNsYXNzIG1lc3NhZ2VzOw0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOw0K
DQoNCiAgY2xhc3MgbG9jYWxlDQogIHsNCiAgcHVibGljOg0KDQogICAgdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgY2F0ZWdvcnk7DQoNCg0KICAgIGNsYXNzIGZh
Y2V0Ow0KICAgIGNsYXNzIGlkOw0KICAgIGNsYXNzIF9JbXBsOw0KDQogICAg
ZnJpZW5kIGNsYXNzIGZhY2V0Ow0KICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsN
Cg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVu
ZCBjb25zdCBfRmFjZXQmDQogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxl
Jik7DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAgICBm
cmllbmQgYm9vbA0KICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRo
cm93KCk7DQoNCg0KDQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUg
PSAwOw0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjdHlwZSA9IDFMIDw8
IDA7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG51bWVyaWMgPSAxTCA8
PCAxOw0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwg
PDwgMjsNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgdGltZSA9IDFMIDw8
IDM7DQogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5ID0gMUwg
PDwgNDsNCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVzc2FnZXMgPSAx
TCA8PCA1Ow0KICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBhbGwgPSAoY29s
bGF0ZSB8IGN0eXBlIHwgbW9uZXRhcnkgfA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMgfCB0aW1lIHwgbWVz
c2FnZXMpOw0KDQoNCiAgICBsb2NhbGUoKSB0aHJvdygpOw0KDQogICAgbG9j
YWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsNCg0KICAgIGV4
cGxpY2l0DQogICAgbG9jYWxlKGNvbnN0IGNoYXIqIF9fc3RkX25hbWUpOw0K
DQogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBjaGFy
KiBfX3MsIGNhdGVnb3J5IF9fY2F0KTsNCg0KICAgIGxvY2FsZShjb25zdCBs
b2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkg
X19jYXQpOw0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAg
ICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2Yp
Ow0KDQogICAgfmxvY2FsZSgpIHRocm93KCk7DQoNCiAgICBjb25zdCBsb2Nh
bGUmDQogICAgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhy
b3coKTsNCg0KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAg
IGxvY2FsZQ0KICAgICAgY29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIp
Ow0KDQoNCiAgICBzdHJpbmcNCiAgICBuYW1lKCkgY29uc3Q7DQoNCiAgICBi
b29sDQogICAgb3BlcmF0b3I9PShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNv
bnN0IHRocm93ICgpOw0KDQogICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRv
ciE9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCkNCiAg
ICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9DQoN
CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPg0KICAgICAgYm9vbA0KICAgICAgb3BlcmF0
b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fczEsDQogICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3Q7DQoNCg0K
ICAgIHN0YXRpYyBsb2NhbGUNCiAgICBnbG9iYWwoY29uc3QgbG9jYWxlJik7
DQoNCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlJg0KICAgIGNsYXNzaWMoKTsN
Cg0KICBwcml2YXRlOg0KDQogICAgX0ltcGwqIF9NX2ltcGw7DQoNCg0KICAg
IHN0YXRpYyBfSW1wbCogX1NfY2xhc3NpYzsNCg0KDQogICAgc3RhdGljIF9J
bXBsKiBfU19nbG9iYWw7DQoNCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9T
X251bV9jYXRlZ29yaWVzID0gNjsNCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IF9TX251bV9mYWNldHMgPSAxMzsNCg0KICAgIGV4cGxpY2l0DQogICAgbG9j
YWxlKF9JbXBsKikgdGhyb3coKTsNCg0KICAgIHN0YXRpYyBpbmxpbmUgdm9p
ZA0KICAgIF9TX2luaXRpYWxpemUoKQ0KICAgIHsgaWYgKCFfU19jbGFzc2lj
KSBjbGFzc2ljKCk7IH0NCg0KICAgIHN0YXRpYyBjYXRlZ29yeQ0KICAgIF9T
X25vcm1hbGl6ZV9jYXRlZ29yeShjYXRlZ29yeSk7DQoNCiAgICB2b2lkDQog
ICAgX01fY29hbGVzY2UoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxv
Y2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsNCiAgfTsNCg0KDQoNCiAg
Y2xhc3MgbG9jYWxlOjpfSW1wbA0KICB7DQogIHB1YmxpYzoNCg0KICAgIHR5
cGVkZWYgdmVjdG9yPGZhY2V0KiwgYWxsb2NhdG9yPGZhY2V0Kj4gPiBfX3Zl
Y19mYWNldDsNCg0KDQogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsNCiAgICBm
cmllbmQgY2xhc3MgbG9jYWxlOjpmYWNldDsNCg0KICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmDQog
ICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7DQoNCiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAgICBmcmllbmQgYm9vbA0KICAgICAg
aGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7DQoNCiAgcHJpdmF0
ZToNCg0KICAgIHNpemVfdCBfTV9yZWZlcmVuY2VzOw0KICAgIF9fdmVjX2Zh
Y2V0KiBfTV9mYWNldHM7DQogICAgc3RyaW5nIF9NX25hbWVzW19TX251bV9j
YXRlZ29yaWVzXTsNCiAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlOw0KICAg
IHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jdHlwZVtd
Ow0KICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9u
dW1lcmljW107DQogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0
IF9TX2lkX2NvbGxhdGVbXTsNCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjpp
ZCogY29uc3QgX1NfaWRfdGltZVtdOw0KICAgIHN0YXRpYyBjb25zdCBsb2Nh
bGU6OmlkKiBjb25zdCBfU19pZF9tb25ldGFyeVtdOw0KICAgIHN0YXRpYyBj
b25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tZXNzYWdlc1tdOw0KICAg
IHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCogY29uc3QgX1NfZmFj
ZXRfY2F0ZWdvcmllc1tdOw0KDQogICAgaW5saW5lIHZvaWQNCiAgICBfTV9h
ZGRfcmVmZXJlbmNlKCkgdGhyb3coKQ0KICAgIHsgKytfTV9yZWZlcmVuY2Vz
OyB9DQoNCiAgICBpbmxpbmUgdm9pZA0KICAgIF9NX3JlbW92ZV9yZWZlcmVu
Y2UoKSB0aHJvdygpDQogICAgew0KICAgICAgaWYgKF9NX3JlZmVyZW5jZXMt
LSA9PSAwKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAg
ICB7IGRlbGV0ZSB0aGlzOyB9DQogICAgICAgICAgY2F0Y2goLi4uKQ0KICAg
ICAgICAgICAgeyB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBfSW1wbChj
b25zdCBfSW1wbCYsIHNpemVfdCk7DQogICAgX0ltcGwoc3RyaW5nIF9fbmFt
ZSwgc2l6ZV90KTsNCiAgIH5fSW1wbCgpIHRocm93KCk7DQoNCiAgICBib29s
DQogICAgX01fY2hlY2tfc2FtZV9uYW1lKCkNCiAgICB7DQogICAgICBib29s
IF9fcmV0ID0gdHJ1ZTsNCiAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
X1NfbnVtX2NhdGVnb3JpZXMgLSAxOyArK2kpDQogICAgICAgIF9fcmV0ICY9
IF9NX25hbWVzW2ldID09IF9NX25hbWVzW2kgKyAxXTsNCiAgICAgIHJldHVy
biBfX3JldDsNCiAgICB9DQogICAgdm9pZA0KICAgIF9NX3JlcGxhY2VfY2F0
ZWdvcmllcyhjb25zdCBfSW1wbCosIGNhdGVnb3J5KTsNCg0KICAgIHZvaWQN
CiAgICBfTV9yZXBsYWNlX2NhdGVnb3J5KGNvbnN0IF9JbXBsKiwgY29uc3Qg
bG9jYWxlOjppZCogY29uc3QqKTsNCg0KICAgIHZvaWQNCiAgICBfTV9yZXBs
YWNlX2ZhY2V0KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCopOw0K
DQogICAgdm9pZA0KICAgIF9NX2luc3RhbGxfZmFjZXQoY29uc3QgbG9jYWxl
OjppZCosIGZhY2V0Kik7DQoNCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj
ZXQ+DQogICAgICBpbmxpbmUgdm9pZA0KICAgICAgX01faW5pdF9mYWNldChf
RmFjZXQqIF9fZmFjZXQpDQogICAgICB7IF9NX2luc3RhbGxfZmFjZXQoJl9G
YWNldDo6aWQsIF9fZmFjZXQpOyB9DQogIH07DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZhY2V0Pg0KICAgIGxvY2FsZTo6bG9jYWxlKGNvbnN0IGxvY2Fs
ZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpDQogICAgew0KICAgICAgX01faW1w
bCA9IG5ldyBfSW1wbCgqX19vdGhlci5fTV9pbXBsLCAxKTsNCiAgICAgIF9N
X2ltcGwtPl9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZik7DQog
ICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfU19udW1fY2F0ZWdv
cmllczsgKytfX2kpDQogICAgICAgIF9NX2ltcGwtPl9NX25hbWVzW19faV0g
PSAiKiI7DQogICAgfQ0KDQoNCiAgY2xhc3MgbG9jYWxlOjpmYWNldA0KICB7
DQogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsNCiAgICBmcmllbmQgY2xhc3Mg
bG9jYWxlOjpfSW1wbDsNCg0KICBwcm90ZWN0ZWQ6DQogICAgZXhwbGljaXQN
CiAgICBmYWNldChzaXplX3QgX19yZWZzID0gMCkgdGhyb3coKTsNCg0KICAg
IHZpcnR1YWwNCiAgICB+ZmFjZXQoKSB7IH07DQoNCiAgICBzdGF0aWMgdm9p
ZA0KICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2Ms
IGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgICBzdGF0aWMgdm9pZA0KICAgIF9T
X2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsNCg0KICBw
cml2YXRlOg0KICAgIHNpemVfdCBfTV9yZWZlcmVuY2VzOw0KDQogICAgdm9p
ZA0KICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygpOw0KDQogICAgdm9p
ZA0KICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpOw0KDQogICAg
ZmFjZXQoY29uc3QgZmFjZXQmKTsNCg0KICAgIHZvaWQNCiAgICBvcGVyYXRv
cj0oY29uc3QgZmFjZXQmKTsNCiAgfTsNCg0KDQoNCiAgY2xhc3MgbG9jYWxl
OjppZA0KICB7DQogIHByaXZhdGU6DQogICAgZnJpZW5kIGNsYXNzIGxvY2Fs
ZTsNCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsNCiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRmFjZXQ+DQogICAgICBmcmllbmQgY29uc3QgX0Zh
Y2V0Jg0KICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOw0KICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICAgIGZyaWVuZCBib29sDQog
ICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3cgKCk7DQoNCg0K
DQoNCiAgICBtdXRhYmxlIHNpemVfdCBfTV9pbmRleDsNCg0KDQogICAgc3Rh
dGljIHNpemVfdCBfU19oaWdod2F0ZXI7DQoNCiAgICB2b2lkDQogICAgb3Bl
cmF0b3I9KGNvbnN0IGlkJik7DQoNCiAgICBpZChjb25zdCBpZCYpOw0KDQog
IHB1YmxpYzoNCg0KDQoNCiAgICBpZCgpIHsgfQ0KICB9Ow0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9GYWNldD4NCiAgICBjb25zdCBfRmFjZXQmDQogICAg
dXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9GYWNldD4NCiAgICBib29sDQogICAgaGFzX2ZhY2V0KGNv
bnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCk7DQp9DQojIDQ0ICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIg
Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9pb3NfYmFzZS5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDMNCg0KbmFtZXNwYWNl
IHN0ZA0Kew0KDQoNCg0KDQogIGVudW0gX0lvc19GbXRmbGFncyB7IF9NX2lv
c19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9Ow0KDQogIGlubGluZSBfSW9z
X0ZtdGZsYWdzDQogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lv
c19GbXRmbGFncyBfX2IpDQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3Rh
dGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsg
fQ0KDQogIGlubGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJhdG9yfChfSW9z
X0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpDQogIHsgcmV0dXJu
IF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGlj
X2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQogIGlubGluZSBfSW9zX0ZtdGZsYWdz
DQogIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFn
cyBfX2IpDQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8
aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0KDQogIGlu
bGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJhdG9yfD0oX0lvc19GbXRmbGFn
cyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikNCiAgeyByZXR1cm4gX19hID0g
X19hIHwgX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MNCiAgb3Bl
cmF0b3ImPShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19i
KQ0KICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0NCg0KICBpbmxpbmUg
X0lvc19GbXRmbGFncw0KICBvcGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9f
YSwgX0lvc19GbXRmbGFncyBfX2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSBe
IF9fYjsgfQ0KDQogIGlubGluZSBfSW9zX0ZtdGZsYWdzDQogIG9wZXJhdG9y
fihfSW9zX0ZtdGZsYWdzIF9fYSkNCiAgeyByZXR1cm4gX0lvc19GbXRmbGFn
cyh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQ0KDQoNCiAgZW51bSBfSW9z
X09wZW5tb2RlIHsgX01faW9zX29wZW5tb2RlX2VuZCA9IDFMIDw8IDE2IH07
DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0b3ImKF9Jb3Nf
T3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyByZXR1cm4g
X0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNf
Y2FzdDxpbnQ+KF9fYikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUN
CiAgb3BlcmF0b3J8KF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2Rl
IF9fYikNCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxp
bnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9DQoNCiAgaW5s
aW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0b3JeKF9Jb3NfT3Blbm1vZGUg
X19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyByZXR1cm4gX0lvc19PcGVu
bW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+
KF9fYikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUNCiAgb3BlcmF0
b3J8PShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQ0K
ICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0NCg0KICBpbmxpbmUgX0lv
c19PcGVubW9kZQ0KICBvcGVyYXRvciY9KF9Jb3NfT3Blbm1vZGUmIF9fYSwg
X0lvc19PcGVubW9kZSBfX2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9f
YjsgfQ0KDQogIGlubGluZSBfSW9zX09wZW5tb2RlDQogIG9wZXJhdG9yXj0o
X0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikNCiAgeyBy
ZXR1cm4gX19hID0gX19hIF4gX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfT3Bl
bm1vZGUNCiAgb3BlcmF0b3J+KF9Jb3NfT3Blbm1vZGUgX19hKQ0KICB7IHJl
dHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9
DQoNCg0KICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRlX2Vu
ZCA9IDFMIDw8IDE2IH07DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBv
cGVyYXRvciYoX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikN
CiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19h
KSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0NCg0KICBpbmxpbmUgX0lv
c19Jb3N0YXRlDQogIG9wZXJhdG9yfChfSW9zX0lvc3RhdGUgX19hLCBfSW9z
X0lvc3RhdGUgX19iKQ0KICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGlj
X2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQ0K
DQogIGlubGluZSBfSW9zX0lvc3RhdGUNCiAgb3BlcmF0b3JeKF9Jb3NfSW9z
dGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpDQogIHsgcmV0dXJuIF9Jb3Nf
SW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxp
bnQ+KF9fYikpOyB9DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0KICBvcGVy
YXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQ0K
ICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0NCg0KICBpbmxpbmUgX0lv
c19Jb3N0YXRlDQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9J
b3NfSW9zdGF0ZSBfX2IpDQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsg
fQ0KDQogIGlubGluZSBfSW9zX0lvc3RhdGUNCiAgb3BlcmF0b3JePShfSW9z
X0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikNCiAgeyByZXR1cm4g
X19hID0gX19hIF4gX19iOyB9DQoNCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQ0K
ICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkNCiAgeyByZXR1cm4gX0lv
c19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9DQoNCiAgZW51
bSBfSW9zX1NlZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxTCA8PCAx
NiB9Ow0KDQoNCiAgY2xhc3MgaW9zX2Jhc2UNCiAgew0KICBwdWJsaWM6DQoN
Cg0KICAgIGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMgZXhjZXB0aW9uDQogICAg
ew0KICAgIHB1YmxpYzoNCg0KDQogICAgICBleHBsaWNpdA0KICAgICAgZmFp
bHVyZShjb25zdCBzdHJpbmcmIF9fc3RyKSB0aHJvdygpOw0KDQogICAgICB2
aXJ0dWFsDQogICAgICB+ZmFpbHVyZSgpIHRocm93KCk7DQoNCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcioNCiAgICAgIHdoYXQoKSBjb25zdCB0aHJvdygp
Ow0KDQogICAgcHJpdmF0ZToNCiAgICAgIGVudW0geyBfTV9idWZzaXplID0g
MjU2IH07DQogICAgICBjaGFyIF9NX25hbWVbX01fYnVmc2l6ZV07DQoNCiAg
ICB9Ow0KDQoNCiAgICB0eXBlZGVmIF9Jb3NfRm10ZmxhZ3MgZm10ZmxhZ3M7
DQoNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYm9vbGFscGhhID0gZm10
ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jvb2xhbHBoYSk7DQogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIGRlYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpf
U19kZWMpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmaXhlZCA9IGZt
dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19maXhlZCk7DQogICAgc3RhdGljIGNv
bnN0IGZtdGZsYWdzIGhleCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19o
ZXgpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBpbnRlcm5hbCA9IGZt
dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19pbnRlcm5hbCk7DQogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIGxlZnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6
X1NfbGVmdCk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIG9jdCA9IGZt
dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19vY3QpOw0KICAgIHN0YXRpYyBjb25z
dCBmbXRmbGFncyByaWdodCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19y
aWdodCk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNjaWVudGlmaWMg
PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2NpZW50aWZpYyk7DQogICAg
c3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3diYXNlID0gZm10ZmxhZ3MoX19p
b3NfZmxhZ3M6Ol9TX3Nob3diYXNlKTsNCiAgICBzdGF0aWMgY29uc3QgZm10
ZmxhZ3Mgc2hvd3BvaW50ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3No
b3dwb2ludCk7DQogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb3Mg
PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bvcyk7DQogICAgc3Rh
dGljIGNvbnN0IGZtdGZsYWdzIHNraXB3cyA9IGZtdGZsYWdzKF9faW9zX2Zs
YWdzOjpfU19za2lwd3MpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1
bml0YnVmID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VuaXRidWYpOw0K
ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSBmbXRmbGFn
cyhfX2lvc19mbGFnczo6X1NfdXBwZXJjYXNlKTsNCiAgICBzdGF0aWMgY29u
c3QgZm10ZmxhZ3MgYWRqdXN0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFn
czo6X1NfYWRqdXN0ZmllbGQpOw0KICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn
cyBiYXNlZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYmFzZWZp
ZWxkKTsNCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZmxvYXRmaWVsZCA9
IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19mbG9hdGZpZWxkKTsNCg0KDQog
ICAgdHlwZWRlZiBfSW9zX0lvc3RhdGUgaW9zdGF0ZTsNCiAgICBzdGF0aWMg
Y29uc3QgaW9zdGF0ZSBiYWRiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpf
U19iYWRiaXQpOw0KICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGVvZmJpdCA9
IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2VvZmJpdCk7DQogICAgc3RhdGlj
IGNvbnN0IGlvc3RhdGUgZmFpbGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6
Ol9TX2ZhaWxiaXQpOw0KICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGdvb2Ri
aXQgPSBpb3N0YXRlKDApOw0KDQoNCiAgICB0eXBlZGVmIF9Jb3NfT3Blbm1v
ZGUgb3Blbm1vZGU7DQogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGFwcCA9
IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hcHApOw0KICAgIHN0YXRpYyBj
b25zdCBvcGVubW9kZSBhdGUgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nf
YXRlKTsNCiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYmluYXJ5ID0gb3Bl
bm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2Jpbik7DQogICAgc3RhdGljIGNvbnN0
IG9wZW5tb2RlIGluID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2luKTsN
CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgb3V0ID0gb3Blbm1vZGUoX19p
b3NfZmxhZ3M6Ol9TX291dCk7DQogICAgc3RhdGljIGNvbnN0IG9wZW5tb2Rl
IHRydW5jID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX3RydW5jKTsNCg0K
DQogICAgdHlwZWRlZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsNCiAgICBzdGF0
aWMgY29uc3Qgc2Vla2RpciBiZWcgPSBzZWVrZGlyKDApOw0KICAgIHN0YXRp
YyBjb25zdCBzZWVrZGlyIGN1ciA9IHNlZWtkaXIoMSk7DQogICAgc3RhdGlj
IGNvbnN0IHNlZWtkaXIgZW5kID0gc2Vla2RpcigyKTsNCiMgMjE2ICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5o
IiAzDQogICAgZW51bSBldmVudA0KICAgIHsNCiAgICAgIGVyYXNlX2V2ZW50
LA0KICAgICAgaW1idWVfZXZlbnQsDQogICAgICBjb3B5Zm10X2V2ZW50DQog
ICAgfTsNCg0KICAgIHR5cGVkZWYgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSAo
ZXZlbnQsIGlvc19iYXNlJiwgaW50KTsNCg0KICAgIHZvaWQNCiAgICByZWdp
c3Rlcl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRl
eCk7DQoNCiAgcHJvdGVjdGVkOg0KDQogICAgc3RyZWFtc2l6ZSBfTV9wcmVj
aXNpb247DQogICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsNCiAgICBmbXRmbGFn
cyBfTV9mbGFnczsNCg0KDQoNCiAgICBzdHJ1Y3QgX0NhbGxiYWNrX2xpc3QN
CiAgICB7DQoNCiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0Ow0KICAg
ICAgaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9NX2ZuOw0KICAgICAgaW50
IF9NX2luZGV4Ow0KICAgICAgaW50IF9NX3JlZmNvdW50Ow0KDQogICAgICBf
Q2FsbGJhY2tfbGlzdChpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX19mbiwg
aW50IF9faW5kZXgsDQogICAgICAgICAgICAgICAgICAgICBfQ2FsbGJhY2tf
bGlzdCogX19jYikNCiAgICAgIDogX01fbmV4dChfX2NiKSwgX01fZm4oX19m
biksIF9NX2luZGV4KF9faW5kZXgpLCBfTV9yZWZjb3VudCgwKSB7IH0NCg0K
ICAgICAgdm9pZA0KICAgICAgX01fYWRkX3JlZmVyZW5jZSgpIHsgKytfTV9y
ZWZjb3VudDsgfQ0KDQogICAgICBpbnQNCiAgICAgIF9NX3JlbW92ZV9yZWZl
cmVuY2UoKSB7IHJldHVybiBfTV9yZWZjb3VudC0tOyB9DQogICAgfTsNCg0K
ICAgICBfQ2FsbGJhY2tfbGlzdCogX01fY2FsbGJhY2tzOw0KDQogICAgdm9p
ZA0KICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9fZXYpIHRocm93KCk7
DQoNCiAgICB2b2lkDQogICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7
DQoNCg0KICAgIHN0cnVjdCBfV29yZHMNCiAgICB7DQogICAgICB2b2lkKiBf
TV9wd29yZDsNCiAgICAgIGxvbmcgX01faXdvcmQ7DQogICAgfTsNCg0KICAg
IHN0YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZHMgPSA4Ow0KICAgIF9X
b3JkcyBfTV93b3JkX2FycmF5W19TX2xvY2FsX3dvcmRzXTsNCiAgICBfV29y
ZHMgX01fZHVtbXk7DQogICAgX1dvcmRzKiBfTV93b3JkczsNCiAgICBpbnQg
X01fd29yZF9saW1pdDsNCg0KICAgIF9Xb3JkcyYNCiAgICBfTV9ncm93X3dv
cmRzKGludCBfX2luZGV4KTsNCg0KDQogICAgbG9jYWxlIF9NX2lvc19sb2Nh
bGU7DQoNCiAgICB2b2lkDQogICAgX01faW5pdCgpOw0KDQogIHB1YmxpYzoN
Cg0KDQoNCg0KDQogICAgY2xhc3MgSW5pdA0KICAgIHsNCiAgICAgIGZyaWVu
ZCBjbGFzcyBpb3NfYmFzZTsNCiAgICBwdWJsaWM6DQogICAgICBJbml0KCk7
DQogICAgICB+SW5pdCgpOw0KDQogICAgICBzdGF0aWMgdm9pZA0KICAgICAg
X1NfaW9zX2NyZWF0ZShib29sIF9fc3luYyk7DQoNCiAgICAgIHN0YXRpYyB2
b2lkDQogICAgICBfU19pb3NfZGVzdHJveSgpOw0KDQogICAgcHJpdmF0ZToN
CiAgICAgIHN0YXRpYyBpbnQgX1NfaW9zX2Jhc2VfaW5pdDsNCiAgICAgIHN0
YXRpYyBib29sIF9TX3N5bmNlZF93aXRoX3N0ZGlvOw0KICAgIH07DQoNCg0K
ICAgIGlubGluZSBmbXRmbGFncw0KICAgIGZsYWdzKCkgY29uc3QgeyByZXR1
cm4gX01fZmxhZ3M7IH0NCg0KICAgIGlubGluZSBmbXRmbGFncw0KICAgIGZs
YWdzKGZtdGZsYWdzIF9fZm10ZmwpDQogICAgew0KICAgICAgZm10ZmxhZ3Mg
X19vbGQgPSBfTV9mbGFnczsNCiAgICAgIF9NX2ZsYWdzID0gX19mbXRmbDsN
CiAgICAgIHJldHVybiBfX29sZDsNCiAgICB9DQoNCiAgICBpbmxpbmUgZm10
ZmxhZ3MNCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwpDQogICAgew0KICAg
ICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsNCiAgICAgIF9NX2ZsYWdz
IHw9IF9fZm10Zmw7DQogICAgICByZXR1cm4gX19vbGQ7DQogICAgfQ0KDQog
ICAgaW5saW5lIGZtdGZsYWdzDQogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZs
LCBmbXRmbGFncyBfX21hc2spDQogICAgew0KICAgICAgZm10ZmxhZ3MgX19v
bGQgPSBfTV9mbGFnczsNCiAgICAgIF9NX2ZsYWdzICY9IH5fX21hc2s7DQog
ICAgICBfTV9mbGFncyB8PSAoX19mbXRmbCAmIF9fbWFzayk7DQogICAgICBy
ZXR1cm4gX19vbGQ7DQogICAgfQ0KDQogICAgaW5saW5lIHZvaWQNCiAgICB1
bnNldGYoZm10ZmxhZ3MgX19tYXNrKSB7IF9NX2ZsYWdzICY9IH5fX21hc2s7
IH0NCg0KICAgIGlubGluZSBzdHJlYW1zaXplDQogICAgcHJlY2lzaW9uKCkg
Y29uc3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9DQoNCiAgICBpbmxpbmUg
c3RyZWFtc2l6ZQ0KICAgIHByZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykN
CiAgICB7DQogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fcHJlY2lzaW9u
Ow0KICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOw0KICAgICAgcmV0dXJu
IF9fb2xkOw0KICAgIH0NCg0KICAgIGlubGluZSBzdHJlYW1zaXplDQogICAg
d2lkdGgoKSBjb25zdCB7IHJldHVybiBfTV93aWR0aDsgfQ0KDQogICAgaW5s
aW5lIHN0cmVhbXNpemUNCiAgICB3aWR0aChzdHJlYW1zaXplIF9fd2lkZSkN
CiAgICB7DQogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fd2lkdGg7DQog
ICAgICBfTV93aWR0aCA9IF9fd2lkZTsNCiAgICAgIHJldHVybiBfX29sZDsN
CiAgICB9DQoNCiAgICBzdGF0aWMgYm9vbA0KICAgIHN5bmNfd2l0aF9zdGRp
byhib29sIF9fc3luYyA9IHRydWUpOw0KDQoNCiAgICBsb2NhbGUNCiAgICBp
bWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsNCg0KICAgIGlubGluZSBsb2Nh
bGUNCiAgICBnZXRsb2MoKSBjb25zdCB7IHJldHVybiBfTV9pb3NfbG9jYWxl
OyB9DQoNCg0KICAgIHN0YXRpYyBpbnQNCiAgICB4YWxsb2MoKSB0aHJvdygp
Ow0KDQogICAgaW5saW5lIGxvbmcmDQogICAgaXdvcmQoaW50IF9faXgpDQog
ICAgew0KICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRf
bGltaXQpDQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRzW19f
aXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsNCiAgICAgIHJldHVybiBfX3dv
cmQuX01faXdvcmQ7DQogICAgfQ0KDQogICAgaW5saW5lIHZvaWQqJg0KICAg
IHB3b3JkKGludCBfX2l4KQ0KICAgIHsNCiAgICAgIF9Xb3JkcyYgX193b3Jk
ID0gKF9faXggPCBfTV93b3JkX2xpbWl0KQ0KICAgICAgICAgICAgICAgICAg
ICAgICAgPyBfTV93b3Jkc1tfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7
DQogICAgICByZXR1cm4gX193b3JkLl9NX3B3b3JkOw0KICAgIH0NCg0KDQog
ICAgfmlvc19iYXNlKCk7DQoNCiAgcHJvdGVjdGVkOg0KICAgIGlvc19iYXNl
KCk7DQoNCg0KICBwcml2YXRlOg0KICAgIGlvc19iYXNlKGNvbnN0IGlvc19i
YXNlJik7DQoNCiAgICBpb3NfYmFzZSYNCiAgICBvcGVyYXRvcj0oY29uc3Qg
aW9zX2Jhc2UmKTsNCg0KICB9Ow0KDQoNCiAgaW5saW5lIGlvc19iYXNlJg0K
ICBib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFz
ZS5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOw0KICAgIHJldHVybiBfX2Jh
c2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIG5vYm9vbGFscGhh
KGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5zZXRmKGlv
c19iYXNlOjpib29sYWxwaGEpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0N
Cg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIHNob3diYXNlKGlvc19iYXNlJiBf
X2Jhc2UpDQogIHsNCiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd2Jh
c2UpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9z
X2Jhc2UmDQogIG5vc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0K
ICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsNCiAgICBy
ZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBz
aG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFzZS5z
ZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOw0KICAgIHJldHVybiBfX2Jhc2U7
DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIG5vc2hvd3BvaW50KGlv
c19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jhc2UudW5zZXRmKGlvc19i
YXNlOjpzaG93cG9pbnQpOw0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0K
ICBpbmxpbmUgaW9zX2Jhc2UmDQogIHNob3dwb3MoaW9zX2Jhc2UmIF9fYmFz
ZSkNCiAgew0KICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsN
CiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNl
Jg0KICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9f
YmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOw0KICAgIHJldHVybiBf
X2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jhc2UmDQogIHNraXB3cyhp
b3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19iYXNlLnNldGYoaW9zX2Jh
c2U6OnNraXB3cyk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlu
bGluZSBpb3NfYmFzZSYNCiAgbm9za2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkN
CiAgew0KICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7DQog
ICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBpb3NfYmFzZSYN
CiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBfX2Jh
c2Uuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsNCiAgICByZXR1cm4gX19i
YXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICBub3VwcGVyY2Fz
ZShpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgX19iYXNlLnVuc2V0Zihp
b3NfYmFzZTo6dXBwZXJjYXNlKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9
DQoNCiAgaW5saW5lIGlvc19iYXNlJg0KICB1bml0YnVmKGlvc19iYXNlJiBf
X2Jhc2UpDQogIHsNCiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVuaXRi
dWYpOw0KICAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlv
c19iYXNlJg0KICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0K
ICAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsNCiAgICAg
cmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQoNCiAgaW5saW5lIGlvc19iYXNlJg0K
ICBpbnRlcm5hbChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAgIF9fYmFz
ZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jhc2U6OmFkanVzdGZp
ZWxkKTsNCiAgICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBp
b3NfYmFzZSYNCiAgbGVmdChpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQogICAg
X19iYXNlLnNldGYoaW9zX2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1c3Rm
aWVsZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBp
b3NfYmFzZSYNCiAgcmlnaHQoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAg
IF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6OmFkanVz
dGZpZWxkKTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCg0KICBpbmxp
bmUgaW9zX2Jhc2UmDQogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQ0KICB7DQog
ICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6OmJhc2Vm
aWVsZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQogIGlubGluZSBp
b3NfYmFzZSYNCiAgaGV4KGlvc19iYXNlJiBfX2Jhc2UpDQogIHsNCiAgICBf
X2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxk
KTsNCiAgICByZXR1cm4gX19iYXNlOw0KICB9DQoNCiAgaW5saW5lIGlvc19i
YXNlJg0KICBvY3QoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFz
ZS5zZXRmKGlvc19iYXNlOjpvY3QsIGlvc19iYXNlOjpiYXNlZmllbGQpOw0K
ICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KDQogIGlubGluZSBpb3NfYmFz
ZSYNCiAgZml4ZWQoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAgIF9fYmFz
ZS5zZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9zX2Jhc2U6OmZsb2F0ZmllbGQp
Ow0KICAgIHJldHVybiBfX2Jhc2U7DQogIH0NCg0KICBpbmxpbmUgaW9zX2Jh
c2UmDQogIHNjaWVudGlmaWMoaW9zX2Jhc2UmIF9fYmFzZSkNCiAgew0KICAg
IF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzY2llbnRpZmljLCBpb3NfYmFzZTo6
ZmxvYXRmaWVsZCk7DQogICAgcmV0dXJuIF9fYmFzZTsNCiAgfQ0KDQp9DQoj
IDQ1ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfaW9zLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDEgMw0KIyAzOCAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVh
bWJ1Zi5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgi
IDEgMw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMN
CiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9zdHJlYW1idWYuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMSAzDQojIDQy
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
c3RyZWFtYnVmLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMSAzDQojIDQzICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFt
YnVmLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9pb3NfYmFzZS5oIiAxIDMNCiMgNDQgIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIg
MiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHN0cmVhbXNpemUNCiAg
ICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRz
PiYgX2lvcywNCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLA0KICAgICAgICAgICAgICAg
ICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Ni
b3V0KTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4NCiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWYNCiAgICB7
DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRf
dHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBv
c190eXBlIHBvc190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFp
dHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7DQoNCg0KICAgICAgdHlwZWRl
ZiBjdHlwZTxjaGFyX3R5cGU+IF9fY3R5cGVfdHlwZTsNCiAgICAgIHR5cGVk
ZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9f
c3RyZWFtYnVmX3R5cGU7DQoNCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19p
b3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47DQogICAgICBmcmllbmQgY2xh
c3MgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsNCiAg
ICAgIGZyaWVuZCBjbGFzcyBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJh
aXRzX3R5cGU+Ow0KICAgICAgZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZfaXRl
cmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47DQogICAgICBmcmllbmQg
Y2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190
eXBlPjsNCg0KICAgICAgZnJpZW5kIHN0cmVhbXNpemUNCiAgICAgIF9fY29w
eV9zdHJlYW1idWZzPD4oYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5
cGU+JiBfX2lvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJl
YW1idWZfdHlwZSogX19zYmluLF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQp
Ow0KDQogICAgcHJvdGVjdGVkOg0KDQoNCg0KDQoNCg0KICAgICAgY2hhcl90
eXBlKiBfTV9idWY7DQoNCg0KICAgICAgaW50X3R5cGUgX01fYnVmX3NpemU7
DQoNCg0KICAgICAgaW50X3R5cGUgX01fYnVmX3NpemVfb3B0Ow0KDQoNCg0K
ICAgICAgYm9vbCBfTV9idWZfdW5pZmllZDsNCg0KDQoNCg0KDQoNCiAgICAg
IGNoYXJfdHlwZSogX01faW5fYmVnOw0KICAgICAgY2hhcl90eXBlKiBfTV9p
bl9jdXI7DQogICAgICBjaGFyX3R5cGUqIF9NX2luX2VuZDsNCiAgICAgIGNo
YXJfdHlwZSogX01fb3V0X2JlZzsNCiAgICAgIGNoYXJfdHlwZSogX01fb3V0
X2N1cjsNCiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2VuZDsNCg0KDQogICAg
ICBpb3NfYmFzZTo6b3Blbm1vZGUgX01fbW9kZTsNCg0KDQogICAgICBsb2Nh
bGUgX01fYnVmX2xvY2FsZTsNCg0KDQogICAgICBib29sIF9NX2J1Zl9sb2Nh
bGVfaW5pdDsNCg0KDQoNCg0KDQoNCiAgICAgIGludF90eXBlIF9NX3BiYWNr
X3NpemU7DQogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrOw0KICAgICAgY2hh
cl90eXBlKiBfTV9wYmFja19jdXJfc2F2ZTsNCiAgICAgIGNoYXJfdHlwZSog
X01fcGJhY2tfZW5kX3NhdmU7DQogICAgICBib29sIF9NX3BiYWNrX2luaXQ7
DQoNCg0KDQoNCiAgICAgIHZvaWQNCiAgICAgIF9NX3BiYWNrX2NyZWF0ZSgp
DQogICAgICB7DQogICAgICAgIGlmICghX01fcGJhY2tfaW5pdCkNCiAgICAg
ICAgICB7DQogICAgICAgICAgICBpbnRfdHlwZSBfX2Rpc3QgPSBfTV9pbl9l
bmQgLSBfTV9pbl9jdXI7DQogICAgICAgICAgICBpbnRfdHlwZSBfX2xlbiA9
IG1pbihfTV9wYmFja19zaXplLCBfX2Rpc3QpOw0KICAgICAgICAgICAgdHJh
aXRzX3R5cGU6OmNvcHkoX01fcGJhY2ssIF9NX2luX2N1ciwgX19sZW4pOw0K
ICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfTV9pbl9jdXI7DQog
ICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9NX2luX2VuZDsNCiAg
ICAgICAgICAgIHRoaXMtPnNldGcoX01fcGJhY2ssIF9NX3BiYWNrLCBfTV9w
YmFjayArIF9fbGVuKTsNCiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSB0
cnVlOw0KICAgICAgICAgIH0NCiAgICAgIH0NCg0KDQoNCg0KICAgICAgdm9p
ZA0KICAgICAgX01fcGJhY2tfZGVzdHJveSgpDQogICAgICB7DQogICAgICAg
IGlmIChfTV9wYmFja19pbml0KQ0KICAgICAgICAgIHsNCg0KICAgICAgICAg
ICAgaW50X3R5cGUgX19vZmZfY3VyID0gX01faW5fY3VyIC0gX01fcGJhY2s7
DQoNCg0KICAgICAgICAgICAgaW50X3R5cGUgX19vZmZfZW5kID0gMDsNCiAg
ICAgICAgICAgIGludF90eXBlIF9fcGJhY2tfbGVuID0gX01faW5fZW5kIC0g
X01fcGJhY2s7DQogICAgICAgICAgICBpbnRfdHlwZSBfX3NhdmVfbGVuID0g
X01fcGJhY2tfZW5kX3NhdmUgLSBfTV9idWY7DQogICAgICAgICAgICBpZiAo
X19wYmFja19sZW4gPiBfX3NhdmVfbGVuKQ0KICAgICAgICAgICAgICBfX29m
Zl9lbmQgPSBfX3BiYWNrX2xlbiAtIF9fc2F2ZV9sZW47DQoNCiAgICAgICAg
ICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9wYmFja19jdXJfc2F2ZSArIF9f
b2ZmX2N1ciwNCiAgICAgICAgICAgICAgICAgICAgICAgX01fcGJhY2tfZW5k
X3NhdmUgKyBfX29mZl9lbmQpOw0KICAgICAgICAgICAgX01fcGJhY2tfY3Vy
X3NhdmUgPSBfX251bGw7DQogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2
ZSA9IF9fbnVsbDsNCiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSBmYWxz
ZTsNCiAgICAgICAgICB9DQogICAgICB9DQoNCg0KDQogICAgICB2b2lkDQog
ICAgICBfTV9pbl9jdXJfbW92ZShvZmZfdHlwZSBfX24pDQogICAgICB7DQog
ICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fb3V0X2N1cjsNCiAgICAgICAg
X01faW5fY3VyICs9IF9fbjsNCiAgICAgICAgaWYgKF9fdGVzdG91dCAmJiBf
TV9idWZfdW5pZmllZCkNCiAgICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsN
CiAgICAgIH0NCiMgMTkzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDMNCiAgICAgIHZvaWQNCiAg
ICAgIF9NX291dF9jdXJfbW92ZShvZmZfdHlwZSBfX24pDQogICAgICB7DQog
ICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9pbl9jdXI7DQoNCiAgICAgICAg
X01fb3V0X2N1ciArPSBfX247DQogICAgICAgIGlmIChfX3Rlc3RpbiAmJiBf
TV9idWZfdW5pZmllZCkNCiAgICAgICAgICBfTV9pbl9jdXIgKz0gX19uOw0K
ICAgICAgICBpZiAoX01fb3V0X2N1ciA+IF9NX291dF9lbmQpDQogICAgICAg
ICAgew0KICAgICAgICAgICAgX01fb3V0X2VuZCA9IF9NX291dF9jdXI7DQoN
CiAgICAgICAgICAgIGlmIChfX3Rlc3RpbikNCiAgICAgICAgICAgICAgX01f
aW5fZW5kICs9IF9fbjsNCiAgICAgICAgICB9DQogICAgICB9DQoNCg0KDQoN
CiAgICAgIG9mZl90eXBlDQogICAgICBfTV9vdXRfYnVmX3NpemUoKQ0KICAg
ICAgew0KICAgICAgICBvZmZfdHlwZSBfX3JldCA9IDA7DQogICAgICAgIGlm
IChfTV9vdXRfY3VyKQ0KICAgICAgICAgIHsNCg0KICAgICAgICAgICAgaWYg
KF9NX291dF9iZWcgPT0gX01fYnVmKQ0KICAgICAgICAgICAgICBfX3JldCA9
IF9NX291dF9iZWcgKyBfTV9idWZfc2l6ZSAtIF9NX291dF9jdXI7DQoNCiAg
ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRf
ZW5kIC0gX01fb3V0X2N1cjsNCiAgICAgICAgICB9DQogICAgICAgIHJldHVy
biBfX3JldDsNCiAgICAgIH0NCiMgMjM2ICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDMNCiAgICAg
IHZvaWQNCiAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKHZvaWQpDQogICAg
ICB7DQogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6OmluKQ0KICAg
ICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1Zik7DQog
ICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkNCiAgICAgICAg
ICB0aGlzLT5zZXRwKF9NX2J1ZiwgX01fYnVmKTsNCiAgICAgIH0NCg0KICAg
ICAgdm9pZA0KICAgICAgX01fc2V0X2RldGVybWluYXRlKG9mZl90eXBlIF9f
b2ZmKQ0KICAgICAgew0KICAgICAgICBib29sIF9fdGVzdGluID0gX01fbW9k
ZSAmIGlvc19iYXNlOjppbjsNCiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBf
TV9tb2RlICYgaW9zX2Jhc2U6Om91dDsNCiAgICAgICAgaWYgKF9fdGVzdGlu
KQ0KICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1
ZiArIF9fb2ZmKTsNCiAgICAgICAgaWYgKF9fdGVzdG91dCkNCiAgICAgICAg
ICB0aGlzLT5zZXRwKF9NX2J1ZiwgX01fYnVmICsgX19vZmYpOw0KICAgICAg
fQ0KDQogICAgICBib29sDQogICAgICBfTV9pc19pbmRldGVybWluYXRlKHZv
aWQpDQogICAgICB7DQogICAgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsNCg0K
ICAgICAgICBpZiAoX01fYnVmKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAg
IGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6OmluKQ0KICAgICAgICAgICAgICBf
X3JldCA9IF9NX2luX2JlZyA9PSBfTV9pbl9jdXIgJiYgX01faW5fY3VyID09
IF9NX2luX2VuZDsNCiAgICAgICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jh
c2U6Om91dCkNCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnID09
IF9NX291dF9jdXIgJiYgX01fb3V0X2N1ciA9PSBfTV9vdXRfZW5kOw0KICAg
ICAgICAgIH0NCiAgICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgICAgfQ0KDQog
IHB1YmxpYzoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5iYXNpY19zdHJlYW1i
dWYoKQ0KICAgICAgew0KICAgICAgICBfTV9idWZfdW5pZmllZCA9IGZhbHNl
Ow0KICAgICAgICBfTV9idWZfc2l6ZSA9IDA7DQogICAgICAgIF9NX2J1Zl9z
aXplX29wdCA9IDA7DQogICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6b3Bl
bm1vZGUoMCk7DQogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IGZhbHNl
Ow0KICAgICAgfQ0KDQoNCiAgICAgIGxvY2FsZQ0KICAgICAgcHViaW1idWUo
Y29uc3QgbG9jYWxlICZfX2xvYykNCiAgICAgIHsNCiAgICAgICAgbG9jYWxl
IF9fdG1wKHRoaXMtPmdldGxvYygpKTsNCiAgICAgICAgdGhpcy0+aW1idWUo
X19sb2MpOw0KICAgICAgICByZXR1cm4gX190bXA7DQogICAgICB9DQoNCiAg
ICAgIGxvY2FsZQ0KICAgICAgZ2V0bG9jKCkgY29uc3QNCiAgICAgIHsNCiAg
ICAgICAgaWYgKF9NX2J1Zl9sb2NhbGVfaW5pdCkNCiAgICAgICAgICByZXR1
cm4gX01fYnVmX2xvY2FsZTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIHJl
dHVybiBsb2NhbGUoKTsNCiAgICAgIH0NCg0KDQogICAgICBfX3N0cmVhbWJ1
Zl90eXBlKg0KICAgICAgcHVic2V0YnVmKGNoYXJfdHlwZSogX19zLCBzdHJl
YW1zaXplIF9fbikNCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1ZihfX3Ms
IF9fbik7IH0NCg0KICAgICAgcG9zX3R5cGUNCiAgICAgIHB1YnNlZWtvZmYo
b2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LA0KICAg
ICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9z
X2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkNCiAgICAgIHsgcmV0dXJuIHRo
aXMtPnNlZWtvZmYoX19vZmYsIF9fd2F5LCBfX21vZGUpOyB9DQoNCiAgICAg
IHBvc190eXBlDQogICAgICBwdWJzZWVrcG9zKHBvc190eXBlIF9fc3AsDQog
ICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBp
b3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgeyByZXR1cm4g
dGhpcy0+c2Vla3BvcyhfX3NwLCBfX21vZGUpOyB9DQoNCiAgICAgIGludA0K
ICAgICAgcHVic3luYygpIHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsgfQ0KDQoN
Cg0KICAgICAgc3RyZWFtc2l6ZQ0KICAgICAgaW5fYXZhaWwoKQ0KICAgICAg
ew0KICAgICAgICBzdHJlYW1zaXplIF9fcmV0Ow0KICAgICAgICBpZiAoX01f
aW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkNCiAgICAgICAgICB7
DQogICAgICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkNCiAgICAgICAgICAg
ICAgew0KICAgICAgICAgICAgICAgIGludF90eXBlIF9fc2F2ZV9sZW4gPSBf
TV9wYmFja19lbmRfc2F2ZSAtIF9NX3BiYWNrX2N1cl9zYXZlOw0KICAgICAg
ICAgICAgICAgIGludF90eXBlIF9fcGJhY2tfbGVuID0gX01faW5fY3VyIC0g
X01fcGJhY2s7DQogICAgICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVu
IC0gX19wYmFja19sZW47DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAg
IGVsc2UNCiAgICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5lZ3B0cigpIC0g
dGhpcy0+Z3B0cigpOw0KICAgICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAg
ICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7DQogICAgICAgIHJl
dHVybiBfX3JldDsNCiAgICAgIH0NCg0KICAgICAgaW50X3R5cGUNCiAgICAg
IHNuZXh0YygpDQogICAgICB7DQogICAgICAgIGludF90eXBlIF9fZW9mID0g
dHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICByZXR1cm4gKHRoaXMtPnNi
dW1wYygpID09IF9fZW9mID8gX19lb2YgOiB0aGlzLT5zZ2V0YygpKTsNCiAg
ICAgIH0NCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHNidW1wYygpOw0KDQog
ICAgICBpbnRfdHlwZQ0KICAgICAgc2dldGMoKQ0KICAgICAgew0KICAgICAg
ICBpbnRfdHlwZSBfX3JldDsNCiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBf
TV9pbl9jdXIgPCBfTV9pbl9lbmQpDQogICAgICAgICAgX19yZXQgPSB0cmFp
dHNfdHlwZTo6dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsNCiAgICAg
ICAgZWxzZQ0KICAgICAgICAgIF9fcmV0ID0gdGhpcy0+dW5kZXJmbG93KCk7
DQogICAgICAgIHJldHVybiBfX3JldDsNCiAgICAgIH0NCg0KICAgICAgc3Ry
ZWFtc2l6ZQ0KICAgICAgc2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNp
emUgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+eHNnZXRuKF9fcywgX19u
KTsgfQ0KDQoNCiAgICAgIGludF90eXBlDQogICAgICBzcHV0YmFja2MoY2hh
cl90eXBlIF9fYyk7DQoNCiAgICAgIGludF90eXBlDQogICAgICBzdW5nZXRj
KCk7DQoNCg0KICAgICAgaW50X3R5cGUNCiAgICAgIHNwdXRjKGNoYXJfdHlw
ZSBfX2MpOw0KDQogICAgICBzdHJlYW1zaXplDQogICAgICBzcHV0bihjb25z
dCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQogICAgICB7IHJl
dHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9DQoNCiAgICBwcm90ZWN0
ZWQ6DQogICAgICBiYXNpY19zdHJlYW1idWYoKQ0KICAgICAgOiBfTV9idWYo
X19udWxsKSwgX01fYnVmX3NpemUoMCksDQogICAgICBfTV9idWZfc2l6ZV9v
cHQoc3RhdGljX2Nhc3Q8aW50X3R5cGU+KDEwMjQpKSwgX01fYnVmX3VuaWZp
ZWQoZmFsc2UpLA0KICAgICAgX01faW5fYmVnKDApLCBfTV9pbl9jdXIoMCks
IF9NX2luX2VuZCgwKSwgX01fb3V0X2JlZygwKSwgX01fb3V0X2N1cigwKSwN
CiAgICAgIF9NX291dF9lbmQoMCksIF9NX21vZGUoaW9zX2Jhc2U6Om9wZW5t
b2RlKDApKSwgX01fYnVmX2xvY2FsZShsb2NhbGUoKSksDQogICAgICBfTV9i
dWZfbG9jYWxlX2luaXQoZmFsc2UpLCBfTV9wYmFja19zaXplKDEpLCBfTV9w
YmFjayhfX251bGwpLA0KICAgICAgX01fcGJhY2tfY3VyX3NhdmUoX19udWxs
KSwgX01fcGJhY2tfZW5kX3NhdmUoX19udWxsKSwgX01fcGJhY2tfaW5pdChm
YWxzZSkNCiAgICAgIHsgfQ0KDQoNCiAgICAgIGNoYXJfdHlwZSoNCiAgICAg
IGViYWNrKCkgY29uc3QgeyByZXR1cm4gX01faW5fYmVnOyB9DQoNCiAgICAg
IGNoYXJfdHlwZSoNCiAgICAgIGdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9p
bl9jdXI7IH0NCg0KICAgICAgY2hhcl90eXBlKg0KICAgICAgZWdwdHIoKSBj
b25zdCB7IHJldHVybiBfTV9pbl9lbmQ7IH0NCg0KICAgICAgdm9pZA0KICAg
ICAgZ2J1bXAoaW50IF9fbikgeyBfTV9pbl9jdXIgKz0gX19uOyB9DQoNCiAg
ICAgIHZvaWQNCiAgICAgIHNldGcoY2hhcl90eXBlKiBfX2diZWcsIGNoYXJf
dHlwZSogX19nbmV4dCwgY2hhcl90eXBlKiBfX2dlbmQpDQogICAgICB7DQog
ICAgICAgIF9NX2luX2JlZyA9IF9fZ2JlZzsNCiAgICAgICAgX01faW5fY3Vy
ID0gX19nbmV4dDsNCiAgICAgICAgX01faW5fZW5kID0gX19nZW5kOw0KICAg
ICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6OmluKSAmJiBfX2diZWcg
JiYgX19nbmV4dCAmJiBfX2dlbmQpDQogICAgICAgICAgX01fbW9kZSA9IF9N
X21vZGUgfCBpb3NfYmFzZTo6aW47DQogICAgICB9DQoNCg0KICAgICAgY2hh
cl90eXBlKg0KICAgICAgcGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9vdXRf
YmVnOyB9DQoNCiAgICAgIGNoYXJfdHlwZSoNCiAgICAgIHBwdHIoKSBjb25z
dCB7IHJldHVybiBfTV9vdXRfY3VyOyB9DQoNCiAgICAgIGNoYXJfdHlwZSoN
CiAgICAgIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2VuZDsgfQ0K
DQogICAgICB2b2lkDQogICAgICBwYnVtcChpbnQgX19uKSB7IF9NX291dF9j
dXIgKz0gX19uOyB9DQoNCiAgICAgIHZvaWQNCiAgICAgIHNldHAoY2hhcl90
eXBlKiBfX3BiZWcsIGNoYXJfdHlwZSogX19wZW5kKQ0KICAgICAgew0KICAg
ICAgICBfTV9vdXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJlZzsNCiAgICAg
ICAgX01fb3V0X2VuZCA9IF9fcGVuZDsNCiAgICAgICAgaWYgKCEoX01fbW9k
ZSAmIGlvc19iYXNlOjpvdXQpICYmIF9fcGJlZyAmJiBfX3BlbmQpDQogICAg
ICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6b3V0Ow0KICAg
ICAgfQ0KDQoNCg0KICAgICAgdmlydHVhbCB2b2lkDQogICAgICBpbWJ1ZShj
b25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgICAgew0KICAgICAgICBfTV9idWZf
bG9jYWxlX2luaXQgPSB0cnVlOw0KICAgICAgICBpZiAoX01fYnVmX2xvY2Fs
ZSAhPSBfX2xvYykNCiAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7
DQogICAgICB9DQoNCg0KICAgICAgdmlydHVhbCBiYXNpY19zdHJlYW1idWY8
Y2hhcl90eXBlLF9UcmFpdHM+Kg0KICAgICAgc2V0YnVmKGNoYXJfdHlwZSos
IHN0cmVhbXNpemUpDQogICAgICB7IHJldHVybiB0aGlzOyB9DQoNCiAgICAg
IHZpcnR1YWwgcG9zX3R5cGUNCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlv
c19iYXNlOjpzZWVrZGlyLA0KICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Bl
bm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAg
eyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsgfQ0KDQogICAgICB2
aXJ0dWFsIHBvc190eXBlDQogICAgICBzZWVrcG9zKHBvc190eXBlLA0KICAg
ICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4g
fCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2Zm
X3R5cGUoLTEpKTsgfQ0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgc3lu
YygpIHsgcmV0dXJuIDA7IH0NCg0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNp
emUNCiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0NCg0KICAgICAg
dmlydHVhbCBzdHJlYW1zaXplDQogICAgICB4c2dldG4oY2hhcl90eXBlKiBf
X3MsIHN0cmVhbXNpemUgX19uKTsNCg0KICAgICAgdmlydHVhbCBpbnRfdHlw
ZQ0KICAgICAgdW5kZXJmbG93KCkNCiAgICAgIHsgcmV0dXJuIHRyYWl0c190
eXBlOjplb2YoKTsgfQ0KDQogICAgICB2aXJ0dWFsIGludF90eXBlDQogICAg
ICB1ZmxvdygpDQogICAgICB7DQogICAgICAgIGludF90eXBlIF9fcmV0ID0g
dHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICBib29sIF9fdGVzdGVvZiA9
IHRoaXMtPnVuZGVyZmxvdygpID09IF9fcmV0Ow0KICAgICAgICBib29sIF9f
dGVzdHBlbmRpbmcgPSBfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5f
ZW5kOw0KICAgICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RwZW5kaW5n
KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5
cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOw0KICAgICAgICAgICAgKytf
TV9pbl9jdXI7DQogICAgICAgICAgICBpZiAoX01fYnVmX3VuaWZpZWQgJiYg
X01fbW9kZSAmIGlvc19iYXNlOjpvdXQpDQogICAgICAgICAgICAgICsrX01f
b3V0X2N1cjsNCiAgICAgICAgICB9DQogICAgICAgIHJldHVybiBfX3JldDsN
CiAgICAgIH0NCg0KDQogICAgICB2aXJ0dWFsIGludF90eXBlDQogICAgICBw
YmFja2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpDQogICAg
ICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0NCg0KDQogICAgICB2
aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5
cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQogICAgICB2aXJ0dWFsIGlu
dF90eXBlDQogICAgICBvdmVyZmxvdyhpbnRfdHlwZSA9IHRyYWl0c190eXBl
Ojplb2YoKSkNCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsg
fQ0KIyA1MTYgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9zdHJlYW1idWYuaCIgMw0KICAgIHByaXZhdGU6DQogICAgICBi
YXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1idWZfdHlwZSYpOw0KDQog
ICAgICBfX3N0cmVhbWJ1Zl90eXBlJg0KICAgICAgb3BlcmF0b3I9KGNvbnN0
IF9fc3RyZWFtYnVmX3R5cGUmKTsNCg0KICAgIH07DQoNCn0NCg0KDQoNCg0K
IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dHJlYW1idWYudGNjIiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDMNCm5hbWVzcGFj
ZSBzdGQgew0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4NCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPjo6aW50X3R5cGUNCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPjo6DQogICAgc2J1bXBjKCkNCiAgICB7DQogICAgICBpbnRfdHlw
ZSBfX3JldDsNCiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwg
X01faW5fZW5kKQ0KICAgICAgICB7DQogICAgICAgICAgY2hhcl90eXBlIF9f
YyA9ICpncHRyKCk7DQogICAgICAgICAgX01faW5fY3VyX21vdmUoMSk7DQog
ICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19j
KTsNCiAgICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICBfX3JldCA9IHRo
aXMtPnVmbG93KCk7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N
CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5
cGUNCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6DQog
ICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpDQogICAgew0KICAgICAgaW50
X3R5cGUgX19yZXQ7DQogICAgICBib29sIF9fdGVzdHBvcyA9IF9NX2luX2N1
ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7DQogICAgICBib29sIF9fdGVz
dG5lID0gX01faW5fY3VyICYmICF0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlz
LT5ncHRyKClbLTFdKTsNCiAgICAgIGlmICghX190ZXN0cG9zIHx8IF9fdGVz
dG5lKQ0KICAgICAgICBfX3JldCA9IHBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6
dG9faW50X3R5cGUoX19jKSk7DQogICAgICBlbHNlDQogICAgICAgIHsNCiAg
ICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7DQogICAgICAgICAgX19yZXQg
PSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7DQog
ICAgICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg
IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQ0K
ICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBz
dW5nZXRjKCkNCiAgICB7DQogICAgICBpbnRfdHlwZSBfX3JldDsNCiAgICAg
IGlmIChfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyKQ0KICAg
ICAgICB7DQogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOw0KICAgICAg
ICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9j
dXIpOw0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIF9fcmV0ID0g
dGhpcy0+cGJhY2tmYWlsKCk7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAg
fQ0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz46OmludF90eXBlDQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFy
VCwgX1RyYWl0cz46Og0KICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpDQogICAg
ew0KICAgICAgaW50X3R5cGUgX19yZXQ7DQogICAgICBpZiAoX01fb3V0X2J1
Zl9zaXplKCkpDQogICAgICAgIHsNCiAgICAgICAgICAqX01fb3V0X2N1ciA9
IF9fYzsNCiAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoMSk7DQogICAgICAg
ICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsNCiAg
ICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICBfX3JldCA9IHRoaXMtPm92
ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsNCiAgICAg
IHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHN0cmVhbXNpemUNCiAg
ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6DQogICAgeHNn
ZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICB7DQog
ICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsNCiAgICAgIHdoaWxlIChfX3Jl
dCA8IF9fbikNCiAgICAgICAgew0KICAgICAgICAgIHNpemVfdCBfX2J1Zl9s
ZW4gPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7DQogICAgICAgICAgaWYgKF9f
YnVmX2xlbiA+IDApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHNp
emVfdCBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0Ow0KICAgICAgICAgICAg
ICBzaXplX3QgX19sZW4gPSBtaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7
DQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01faW5f
Y3VyLCBfX2xlbik7DQogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOw0K
ICAgICAgICAgICAgICBfX3MgKz0gX19sZW47DQogICAgICAgICAgICAgIF9N
X2luX2N1cl9tb3ZlKF9fbGVuKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAg
ICAgIGlmIChfX3JldCA8IF9fbikNCiAgICAgICAgICAgIHsNCiAgICAgICAg
ICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+dWZsb3coKTsNCiAgICAgICAg
ICAgICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6ZW9mKCkpDQogICAgICAg
ICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFz
c2lnbigqX19zKyssIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7
DQogICAgICAgICAgICAgICAgICArK19fcmV0Ow0KICAgICAgICAgICAgICAg
IH0NCiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIGJyZWFr
Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gX19y
ZXQ7DQogICAgfQ0KDQoNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFtc2l6ZQ0KICAg
IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICB4c3B1
dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAg
IHsNCiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOw0KICAgICAgd2hpbGUg
KF9fcmV0IDwgX19uKQ0KICAgICAgICB7DQogICAgICAgICAgb2ZmX3R5cGUg
X19idWZfbGVuID0gX01fb3V0X2J1Zl9zaXplKCk7DQogICAgICAgICAgaWYg
KF9fYnVmX2xlbiA+IDApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAg
IG9mZl90eXBlIF9fcmVtYWluaW5nID0gX19uIC0gX19yZXQ7DQogICAgICAg
ICAgICAgIG9mZl90eXBlIF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19yZW1h
aW5pbmcpOw0KICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9v
dXRfY3VyLCBfX3MsIF9fbGVuKTsNCiAgICAgICAgICAgICAgX19yZXQgKz0g
X19sZW47DQogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsNCiAgICAgICAg
ICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbGVuKTsNCiAgICAgICAgICAgIH0N
Cg0KICAgICAgICAgIGlmIChfX3JldCA8IF9fbikNCiAgICAgICAgICAgIHsN
CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+b3ZlcmZsb3co
dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfX3MpKTsNCiAgICAgICAgICAg
ICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6ZW9mKCkpDQogICAgICAgICAg
ICAgICAgew0KICAgICAgICAgICAgICAgICAgKytfX3JldDsNCiAgICAgICAg
ICAgICAgICAgICsrX19zOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg
ICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAg
ICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0K
DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPg0KICAgIHN0cmVhbXNpemUNCiAgICBfX2NvcHlfc3RyZWFt
YnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX19pb3MsDQogICAg
ICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4qIF9fc2JpbiwNCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCkNCiAgew0KICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlw
ZTsNCg0KICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7DQogICAgICBzdHJl
YW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsNCiAgICAg
IHN0cmVhbXNpemUgX194dHJjdDsNCiAgICAgIGJvb2wgX190ZXN0cHV0ID0g
X19zYm91dC0+X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7DQogICAgICB0cnkg
ew0KICAgICAgICB3aGlsZSAoX190ZXN0cHV0ICYmIF9fYnVmc2l6ZSAhPSAt
MSkNCiAgICAgICAgICB7DQogICAgICAgICAgICBfX3h0cmN0ID0gX19zYm91
dC0+c3B1dG4oX19zYmluLT5ncHRyKCksIF9fYnVmc2l6ZSk7DQogICAgICAg
ICAgICBfX3JldCArPSBfX3h0cmN0Ow0KICAgICAgICAgICAgX19zYmluLT5f
TV9pbl9jdXJfbW92ZShfX3h0cmN0KTsNCiAgICAgICAgICAgIGlmIChfX3h0
cmN0ID09IF9fYnVmc2l6ZSkNCiAgICAgICAgICAgICAgew0KICAgICAgICAg
ICAgICAgIGludF90eXBlIF9fYyA9IF9fc2Jpbi0+c2dldGMoKTsNCiAgICAg
ICAgICAgICAgICBpZiAoX19jID09IF9UcmFpdHM6OmVvZigpKQ0KICAgICAg
ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBfX2lvcy5zZXRz
dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCiAgICAgICAgICAgICAgICAgICAg
YnJlYWs7DQogICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg
X19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOw0KICAgICAgICAgICAg
ICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgIGJyZWFrOw0K
ICAgICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKSB7DQogICAgICAgIGlmICgoX19pb3MuZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmZhaWxiaXQpICE9IDApDQogICAgICAgICAgdGhyb3c7DQog
ICAgICB9DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0KfQ0KIyA1MzAg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9z
dHJlYW1idWYuaCIgMiAzDQojIDQ2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMw0KIyAxICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIg
MSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9iYXNpY19pb3MuaCIgMw0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRlci5oIiAxIDMNCiMgMzYg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3NidWZf
aXRlci5oIiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNzIG9z
dHJlYW1idWZfaXRlcmF0b3INCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRw
dXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPg0KICAg
IHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsNCiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4g
c3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7DQoNCiAgICBwcml2YXRl
Og0KICAgICAgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7DQogICAgICBib29s
IF9NX2ZhaWxlZDsNCg0KICAgIHB1YmxpYzoNCiAgICAgIGlubGluZQ0KICAg
ICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgdGhy
b3cgKCkNCiAgICAgIDogX01fc2J1ZihfX3MucmRidWYoKSksIF9NX2ZhaWxl
ZCghX01fc2J1ZikgeyB9DQoNCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Io
c3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3cgKCkNCiAgICAgIDogX01fc2J1
ZihfX3MpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsgfQ0KDQogICAgICBvc3Ry
ZWFtYnVmX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2Mp
Ow0KDQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0
b3IqKCkgdGhyb3coKQ0KICAgICAgeyByZXR1cm4gKnRoaXM7IH0NCg0KICAg
ICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYNCiAgICAgIG9wZXJhdG9yKysoaW50
KSB0aHJvdygpDQogICAgICB7IHJldHVybiAqdGhpczsgfQ0KDQogICAgICBv
c3RyZWFtYnVmX2l0ZXJhdG9yJg0KICAgICAgb3BlcmF0b3IrKygpIHRocm93
KCkNCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9DQoNCiAgICAgIGJvb2wNCiAg
ICAgIGZhaWxlZCgpIGNvbnN0IHRocm93KCkNCiAgICAgIHsgcmV0dXJuIF9N
X2ZhaWxlZDsgfQ0KICAgIH07DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGlubGluZSBvc3RyZWFtYnVm
X2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3N0cmVhbWJ1Zl9p
dGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcj0oX0NoYXJUIF9f
YykNCiAgICB7DQogICAgICBpZiAoIV9NX2ZhaWxlZCAmJg0KICAgICAgICAg
IF9UcmFpdHM6OmVxX2ludF90eXBlKF9NX3NidWYtPnNwdXRjKF9fYyksX1Ry
YWl0czo6ZW9mKCkpKQ0KICAgICAgX01fZmFpbGVkID0gdHJ1ZTsNCiAgICAg
IHJldHVybiAqdGhpczsNCiAgICB9DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjbGFzcyBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yDQogICAgOiBwdWJsaWMgaXRlcmF0b3I8aW5wdXRf
aXRlcmF0b3JfdGFnLCBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90
eXBlLA0KICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCosIF9DaGFyVCY+
DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQg
Y2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl
Ow0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBp
bnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFy
VCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7DQoN
CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9U
cmFpdHM+IF9faXN0cmVhbWJ1Zml0ZXJfdHlwZTsNCg0KICAgIHByaXZhdGU6
DQoNCg0KDQoNCg0KDQoNCiAgICAgIHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVm
Ow0KICAgICAgaW50X3R5cGUgX01fYzsNCg0KICAgIHB1YmxpYzoNCiAgICAg
IGlzdHJlYW1idWZfaXRlcmF0b3IoKSB0aHJvdygpDQogICAgICA6IF9NX3Ni
dWYoX19udWxsKSwgX01fYygtMikgeyB9DQoNCiAgICAgIGlzdHJlYW1idWZf
aXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93KCkNCiAgICAgIDog
X01fc2J1ZihfX3MucmRidWYoKSksIF9NX2MoLTIpIHsgfQ0KDQogICAgICBp
c3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93
KCkNCiAgICAgIDogX01fc2J1ZihfX3MpLCBfTV9jKC0yKSB7IH0NCg0KDQoN
Cg0KICAgICAgY2hhcl90eXBlDQogICAgICBvcGVyYXRvciooKSBjb25zdA0K
ICAgICAgew0KDQogICAgICAgIGNoYXJfdHlwZSBfX3JldDsNCiAgICAgICAg
aWYgKF9NX3NidWYgJiYgX01fYyAhPSBzdGF0aWNfY2FzdDxpbnRfdHlwZT4o
LTIpKQ0KICAgICAgICAgIF9fcmV0ID0gX01fYzsNCiAgICAgICAgZWxzZSBp
ZiAoX01fc2J1ZikNCiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0
b19jaGFyX3R5cGUoX01fc2J1Zi0+c2dldGMoKSk7DQogICAgICAgIGVsc2UN
CiAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PGNoYXJfdHlwZT4odHJh
aXRzX3R5cGU6OmVvZigpKTsNCiAgICAgICAgcmV0dXJuIF9fcmV0Ow0KICAg
ICAgfQ0KDQogICAgICBfX2lzdHJlYW1idWZpdGVyX3R5cGUmDQogICAgICBv
cGVyYXRvcisrKCkNCiAgICAgIHsNCiAgICAgICAgaWYgKF9NX3NidWYpDQog
ICAgICAgICAgX01fc2J1Zi0+c2J1bXBjKCk7DQogICAgICAgIF9NX2MgPSAt
MjsNCiAgICAgICAgcmV0dXJuICp0aGlzOw0KICAgICAgfQ0KDQogICAgICBf
X2lzdHJlYW1idWZpdGVyX3R5cGUNCiAgICAgIG9wZXJhdG9yKysoaW50KQ0K
ICAgICAgew0KICAgICAgICBfX2lzdHJlYW1idWZpdGVyX3R5cGUgX19vbGQg
PSAqdGhpczsNCiAgICAgICAgaWYgKF9NX3NidWYpDQogICAgICAgICAgX19v
bGQuX01fYyA9IF9NX3NidWYtPnNidW1wYygpOw0KICAgICAgICBfTV9jID0g
LTI7DQogICAgICAgIHJldHVybiBfX29sZDsNCiAgICAgIH0NCg0KICAgICAg
Ym9vbA0KICAgICAgZXF1YWwoY29uc3QgX19pc3RyZWFtYnVmaXRlcl90eXBl
JiBfX2IpDQogICAgICB7DQogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJh
aXRzX3R5cGU6OmVvZigpOw0KICAgICAgICBib29sIF9fdGhpc2VvZiA9ICFf
TV9zYnVmIHx8IF9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7DQogICAgICAg
IGJvb2wgX19iZW9mID0gIV9fYi5fTV9zYnVmDQogICAgICAgICAgICAgICAg
ICAgICAgfHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7DQogICAg
ICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVvZiB8fCAoIV9fdGhpc2Vv
ZiAmJiAhX19iZW9mKSk7DQogICAgICB9DQoNCg0KDQoNCiAgICAgIGJvb2wN
CiAgICAgIGVxdWFsKGNvbnN0IF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSYgX19i
KSBjb25zdA0KICAgICAgew0KICAgICAgICBpbnRfdHlwZSBfX2VvZiA9IHRy
YWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgYm9vbCBfX3RoaXNlb2YgPSAh
X01fc2J1ZiB8fCBfTV9zYnVmLT5zZ2V0YygpID09IF9fZW9mOw0KICAgICAg
ICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1Zg0KICAgICAgICAgICAgICAg
ICAgICAgIHx8IF9fYi5fTV9zYnVmLT5zZ2V0YygpID09IF9fZW9mOw0KICAg
ICAgICByZXR1cm4gKF9fdGhpc2VvZiAmJiBfX2Jlb2YgfHwgKCFfX3RoaXNl
b2YgJiYgIV9fYmVvZikpOw0KICAgICAgfQ0KDQogICAgfTsNCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg
aW5saW5lIGJvb2wNCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZf
aXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLA0KICAgICAgICAgICAg
ICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+
JiBfX2IpDQogICAgeyByZXR1cm4gX19hLmVxdWFsKF9fYik7IH0NCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQog
ICAgaW5saW5lIGJvb2wNCiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1i
dWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLA0KICAgICAgICAg
ICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFp
dHM+JiBfX2IpDQogICAgeyByZXR1cm4gIV9fYS5lcXVhbChfX2IpOyB9DQp9
DQojIDM2ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9iYXNpY19pb3MuaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9p
bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAzDQojIDQw
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2Nh
bGVfZmFjZXRzLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMSAzDQojIDM3ICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUu
aCIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAyIDMNCiMg
NDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jdGltZS5oIiAzDQojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0
DQojIDQxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3RpbWUuaCIgMiAzDQojIDUzICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMw0KbmFtZXNwYWNl
IHN0ZA0Kew0KICB1c2luZyA6OmNsb2NrX3Q7DQogIHVzaW5nIDo6dGltZV90
Ow0KICB1c2luZyA6OnRtOw0KDQogIHVzaW5nIDo6Y2xvY2s7DQogIHVzaW5n
IDo6ZGlmZnRpbWU7DQogIHVzaW5nIDo6bWt0aW1lOw0KICB1c2luZyA6OnRp
bWU7DQogIHVzaW5nIDo6YXNjdGltZTsNCiAgdXNpbmcgOjpjdGltZTsNCiAg
dXNpbmcgOjpnbXRpbWU7DQogIHVzaW5nIDo6bG9jYWx0aW1lOw0KICB1c2lu
ZyA6OnN0cmZ0aW1lOw0KfQ0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMNCiMgMSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv
cy5oIiAxIDMNCiMgNDMgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzDQoNCg0KDQoNCg0KDQpu
YW1lc3BhY2Ugc3RkDQp7DQoNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9jdHlw
ZV9iYXNlLmgiIDEgMw0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvY3R5cGVfYmFz
ZS5oIiAzDQogIHN0cnVjdCBjdHlwZV9iYXNlDQogIHsNCg0KICAgIHR5cGVk
ZWYgaW50KiBfX3RvX3R5cGU7DQoNCg0KDQogICAgdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgbWFzazsNCiAgICBzdGF0aWMgY29uc3QgbWFzayB1cHBlciA9IDB4
MDAwMDAwMDE7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSAweDAw
MDAwMDAyOw0KICAgIHN0YXRpYyBjb25zdCBtYXNrIGFscGhhID0gMHgwMDAw
NDAwMDsNCiAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdpdCA9IDB4MDAwMDAw
MDQ7DQogICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gMHgwMDAwMDA4
MDsNCiAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFjZSA9IDB4MDAwMDAwMDg7
DQogICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSAweDAwMDA4MDAwOw0K
ICAgIHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoID0gMHgwMDAwMjAwMDsNCiAg
ICBzdGF0aWMgY29uc3QgbWFzayBjbnRybCA9IDB4MDAwMDAwMjA7DQogICAg
c3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgPSAweDAwMDAwMDEwOw0KICAgIHN0
YXRpYyBjb25zdCBtYXNrIGFsbnVtID0gKDB4MDAwMDQwMDAgfCAweDAwMDAw
MDA0KTsNCiAgfTsNCiMgNTQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
L2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzDQoNCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgY2xhc3MgX19jdHlwZV9hYnN0
cmFjdF9iYXNlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjdHlw
ZV9iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBf
Q2hhclQgY2hhcl90eXBlOw0KDQogICAgICBib29sDQogICAgICBpcyhtYXNr
IF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX2lzKF9fbSwgX19jKTsgfQ0KDQogICAgICBjb25zdCBjaGFyX3R5
cGUqDQogICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNo
YXJfdHlwZSAqX19oaSwgbWFzayAqX192ZWMpIGNvbnN0DQogICAgICB7IHJl
dHVybiB0aGlzLT5kb19pcyhfX2xvLCBfX2hpLCBfX3ZlYyk7IH0NCg0KICAg
ICAgY29uc3QgY2hhcl90eXBlKg0KICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwg
Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
IGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX2lzKF9fbSwg
X19sbywgX19oaSk7IH0NCg0KICAgICAgY29uc3QgY2hhcl90eXBlKg0KICAg
ICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywg
Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdA0KICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQ0KDQogICAg
ICBjaGFyX3R5cGUNCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29u
c3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19jKTsgfQ0K
DQogICAgICBjb25zdCBjaGFyX3R5cGUqDQogICAgICB0b3VwcGVyKGNoYXJf
dHlwZSAqX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdA0KICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2xvLCBfX2hpKTsgfQ0K
DQogICAgICBjaGFyX3R5cGUNCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9f
YykgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19j
KTsgfQ0KDQogICAgICBjb25zdCBjaGFyX3R5cGUqDQogICAgICB0b2xvd2Vy
KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
dA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2xvLCBfX2hp
KTsgfQ0KDQogICAgICBjaGFyX3R5cGUNCiAgICAgIHdpZGVuKGNoYXIgX19j
KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19jKTsg
fQ0KDQogICAgICBjb25zdCBjaGFyKg0KICAgICAgd2lkZW4oY29uc3QgY2hh
ciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX3RvKSBj
b25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywgX19o
aSwgX190byk7IH0NCg0KICAgICAgY2hhcg0KICAgICAgbmFycm93KGNoYXJf
dHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0DQogICAgICB7IHJldHVy
biB0aGlzLT5kb19uYXJyb3coX19jLCBfX2RmYXVsdCk7IH0NCg0KICAgICAg
Y29uc3QgY2hhcl90eXBlKg0KICAgICAgbmFycm93KGNvbnN0IGNoYXJfdHlw
ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLA0KICAgICAgICAgICAg
ICBjaGFyIF9fZGZhdWx0LCBjaGFyICpfX3RvKSBjb25zdA0KICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBf
X3RvKTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgZXhwbGljaXQNCiAg
ICAgIF9fY3R5cGVfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCk6
IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0NCg0KICAgICAgdmlydHVhbA0K
ICAgICAgfl9fY3R5cGVfYWJzdHJhY3RfYmFzZSgpIHsgfQ0KDQogICAgICB2
aXJ0dWFsIGJvb2wNCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUg
X19jKSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKg0KICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25z
dCBjaGFyX3R5cGUqIF9faGksDQogICAgICAgICAgICBtYXNrKiBfX3ZlYykg
Y29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoN
CiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSog
X19sbywNCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hp
KSBjb25zdCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
Kg0KICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlw
ZSogX19sbywNCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X19oaSkgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0K
ICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsNCg0KICAg
ICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb190b3VwcGVy
KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
dCA9IDA7DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBkb190
b2xvd2VyKGNoYXJfdHlwZSkgY29uc3QgPSAwOw0KDQogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBl
KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsNCg0K
ICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3dpZGVuKGNoYXIp
IGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyKg0KICAg
ICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19o
aSwNCiAgICAgICAgICAgICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdCA9
IDA7DQoNCiAgICAgIHZpcnR1YWwgY2hhcg0KICAgICAgZG9fbmFycm93KGNo
YXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QgPSAwOw0KDQogICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX25hcnJvdyhjb25z
dCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwNCiAg
ICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBj
b25zdCA9IDA7DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4NCiAgICBjbGFzcyBjdHlwZSA6IHB1YmxpYyBfX2N0eXBlX2Fic3Ry
YWN0X2Jhc2U8X0NoYXJUPg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgY3R5cGU6Om1hc2sgbWFzazsNCg0KICAgICAgZXhwbGljaXQNCiAg
ICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKSA6IF9fY3R5cGVfYWJzdHJh
Y3RfYmFzZTxfQ2hhclQ+KF9fcmVmcykgeyB9DQoNCiAgICAgIHN0YXRpYyBs
b2NhbGU6OmlkIGlkOw0KDQogICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFs
DQogICAgICB+Y3R5cGUoKSB7IH0NCg0KICAgICAgdmlydHVhbCBib29sDQog
ICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QNCiAg
ICAgIHsgcmV0dXJuIGZhbHNlOyB9DQoNCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcl90eXBlKg0KICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xv
LCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdA0K
ICAgICAgeyByZXR1cm4gX19oaTsgfQ0KDQogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXJfdHlwZSoNCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0
IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
dA0KICAgICAgeyByZXR1cm4gX19oaTsgfQ0KDQogICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBj
b25zdCBjaGFyX3R5cGUqIF9fbG8sDQogICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0DQogICAgICB7IHJldHVybiBfX2hp
OyB9DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBkb190b3Vw
cGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0DQogICAgICB7IHJldHVybiBfX2M7
IH0NCg0KICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBk
b190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf
X2hpKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19oaTsgfQ0KDQogICAgICB2
aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUg
X19jKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19jOyB9DQoNCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fdG9sb3dlcihjaGFy
X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QNCiAg
ICAgIHsgcmV0dXJuIF9faGk7IH0NCg0KICAgICAgdmlydHVhbCBjaGFyX3R5
cGUNCiAgICAgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdA0KICAgICAgeyBy
ZXR1cm4gY2hhcl90eXBlKCk7IH0NCg0KICAgICAgdmlydHVhbCBjb25zdCBj
aGFyKg0KICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3Qg
Y2hhciogX19oaSwgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0DQogICAgICB7
IHJldHVybiBfX2hpOyB9DQoNCiAgICAgIHZpcnR1YWwgY2hhcg0KICAgICAg
ZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QNCiAg
ICAgIHsgcmV0dXJuIF9fZGZhdWx0OyB9DQoNCiAgICAgIHZpcnR1YWwgY29u
c3QgY2hhcl90eXBlKg0KICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlw
ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLA0KICAgICAgICAgICAg
ICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3QNCiAgICAg
IHsgcmV0dXJuIF9faGk7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4NCiAgICBsb2NhbGU6OmlkIGN0eXBlPF9DaGFyVD46Omlk
Ow0KDQoNCiAgdGVtcGxhdGU8Pg0KICAgIGNsYXNzIGN0eXBlPGNoYXI+IDog
cHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxjaGFyPg0KICAgIHsNCiAg
ICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7DQoN
CiAgICBwcml2YXRlOg0KDQogICAgICBib29sIF9NX2RlbDsNCiAgICAgIF9f
dG9fdHlwZSBjb25zdCYgX01fdG91cHBlcjsNCiAgICAgIF9fdG9fdHlwZSBj
b25zdCYgX01fdG9sb3dlcjsNCiAgICAgIGNvbnN0IG1hc2sqIGNvbnN0JiBf
TV9jdGFibGU7DQogICAgICBjb25zdCBtYXNrKiBfTV90YWJsZTsNCg0KICAg
IHB1YmxpYzoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KICAgICAg
c3RhdGljIGNvbnN0IHNpemVfdCB0YWJsZV9zaXplID0gMSArIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KC0xKTsNCg0KICAgICAgZXhwbGljaXQNCiAg
ICAgIGN0eXBlKGNvbnN0IG1hc2sqIF9fdGFibGUgPSAwLCBib29sIF9fZGVs
ID0gZmFsc2UsIHNpemVfdCBfX3JlZnMgPSAwKTsNCg0KICAgICAgaW5saW5l
IGJvb2wNCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7DQoN
CiAgICAgIGlubGluZSBjb25zdCBjaGFyKg0KICAgICAgaXMoY29uc3QgY2hh
ciogX19sbywgY29uc3QgY2hhciogX19oaSwgbWFzayogX192ZWMpIGNvbnN0
Ow0KDQogICAgICBpbmxpbmUgY29uc3QgY2hhcioNCiAgICAgIHNjYW5faXMo
bWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkp
IGNvbnN0Ow0KDQogICAgICBpbmxpbmUgY29uc3QgY2hhcioNCiAgICAgIHNj
YW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFy
KiBfX2hpKSBjb25zdDsNCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1
YWwNCiAgICAgIH5jdHlwZSgpOw0KDQogICAgICBjb25zdCBtYXNrKg0KICAg
ICAgdGFibGUoKSBjb25zdCB0aHJvdygpDQogICAgICB7IHJldHVybiBfTV90
YWJsZTsgfQ0KDQogICAgICBjb25zdCBtYXNrKg0KICAgICAgY2xhc3NpY190
YWJsZSgpIHRocm93KCkNCiAgICAgIHsgcmV0dXJuIF9NX2N0YWJsZTsgfQ0K
DQogICAgICB2aXJ0dWFsIGJvb2wNCiAgICAgIGRvX2lzKG1hc2sgX19tLCBj
aGFyX3R5cGUgX19jKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25zdCBj
aGFyX3R5cGUqDQogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8s
IGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0Ow0K
DQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoNCiAgICAgIGRvX3Nj
YW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25z
dCBjaGFyX3R5cGUqDQogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29u
c3QgY2hhcl90eXBlKiBfX2xvLA0KICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjaGFy
X3R5cGUNCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsNCg0K
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqDQogICAgICBkb190b3Vw
cGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj
b25zdDsNCg0KICAgICAgdmlydHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3Rv
bG93ZXIoY2hhcl90eXBlKSBjb25zdDsNCg0KICAgICAgdmlydHVhbCBjb25z
dCBjaGFyX3R5cGUqDQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsNCg0KICAgICAgdmly
dHVhbCBjaGFyX3R5cGUNCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0Ow0K
DQogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqDQogICAgICBkb193aWRlbihj
b25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUq
IF9fZGVzdCkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgY2hhcg0KICAgICAg
ZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7DQoN
CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKg0KICAgICAgZG9fbmFy
cm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf
X2hpLA0KICAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBf
X2Rlc3QpIGNvbnN0Ow0KICAgIH07DQoNCiAgdGVtcGxhdGU8Pg0KICAgIGNv
bnN0IGN0eXBlPGNoYXI+Jg0KICAgIHVzZV9mYWNldDxjdHlwZTxjaGFyPiA+
KGNvbnN0IGxvY2FsZSYgX19sb2MpOw0KIyAzOTIgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMw0K
IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMt
c3VuLXNvbGFyaXMyLjcvYml0cy9jdHlwZV9pbmxpbmUuaCIgMSAzDQojIDM3
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3Vu
LXNvbGFyaXMyLjcvYml0cy9jdHlwZV9pbmxpbmUuaCIgMw0KICBib29sDQog
IGN0eXBlPGNoYXI+OjoNCiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25z
dA0KICB7IHJldHVybiBfTV90YWJsZVtfX2NdICYgX19tOyB9DQoNCiAgY29u
c3QgY2hhcioNCiAgY3R5cGU8Y2hhcj46Og0KICBpcyhjb25zdCBjaGFyKiBf
X2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBfX3ZlYykgY29uc3QN
CiAgew0KICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCkNCiAgICAgICpfX3Zl
YysrID0gX01fdGFibGVbKl9fbG93KytdOw0KICAgIHJldHVybiBfX2hpZ2g7
DQogIH0NCg0KICBjb25zdCBjaGFyKg0KICBjdHlwZTxjaGFyPjo6DQogIHNj
YW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFy
KiBfX2hpZ2gpIGNvbnN0DQogIHsNCiAgICB3aGlsZSAoX19sb3cgPCBfX2hp
Z2ggJiYgIShfTV90YWJsZVsqX19sb3ddICYgX19tKSkNCiAgICAgICsrX19s
b3c7DQogICAgcmV0dXJuIF9fbG93Ow0KICB9DQoNCiAgY29uc3QgY2hhcioN
CiAgY3R5cGU8Y2hhcj46Og0KICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3Qg
Y2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QNCiAgew0K
ICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaA0KICAgICAgICAgICAmJiAoX01f
dGFibGVbKl9fbG93XSAmIF9fbSkgIT0gMCkNCiAgICAgICsrX19sb3c7DQog
ICAgcmV0dXJuIF9fbG93Ow0KICB9DQojIDM5MyAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMN
Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBj
dHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJUPg0KICAgIHsNCiAg
ICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQoN
CiAgICAgIGV4cGxpY2l0DQogICAgICBjdHlwZV9ieW5hbWUoY29uc3QgY2hh
ciosIHNpemVfdCBfX3JlZnMgPSAwKTsNCg0KICAgIHByb3RlY3RlZDoNCiAg
ICAgIHZpcnR1YWwNCiAgICAgIH5jdHlwZV9ieW5hbWUoKSB7IH0NCiAgICB9
Ow0KDQoNCiAgdGVtcGxhdGU8Pg0KICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6
Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7DQoNCg0K
DQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L2NvZGVjdnQuaCIgMSAzDQojIDQyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvYml0cy9jb2RlY3Z0LmgiIDMNCiMgMTczICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9jb2RlY3Z0LmgiIDMN
CiAgY2xhc3MgY29kZWN2dF9iYXNlDQogIHsNCiAgcHVibGljOg0KICAgIGVu
dW0gcmVzdWx0DQogICAgew0KICAgICAgb2ssDQogICAgICBwYXJ0aWFsLA0K
ICAgICAgZXJyb3IsDQogICAgICBub2NvbnYNCiAgICB9Ow0KICB9Ow0KDQoN
Cg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1l
IF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPg0KICAgIGNsYXNzIF9fY29k
ZWN2dF9hYnN0cmFjdF9iYXNlDQogICAgOiBwdWJsaWMgbG9jYWxlOjpmYWNl
dCwgcHVibGljIGNvZGVjdnRfYmFzZQ0KICAgIHsNCiAgICBwdWJsaWM6DQoN
CiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0Ow0K
ICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsNCiAgICAgIHR5
cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7DQogICAgICB0eXBlZGVmIF9T
dGF0ZVQgc3RhdGVfdHlwZTsNCg0KDQogICAgICByZXN1bHQNCiAgICAgIG91
dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19m
cm9tLA0KICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5k
LCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LA0KICAgICAgICAg
IGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsDQog
ICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0DQogICAg
ICB7DQogICAgICAgIHJldHVybiB0aGlzLT5kb19vdXQoX19zdGF0ZSwgX19m
cm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsNCiAg
ICAgIH0NCg0KICAgICAgcmVzdWx0DQogICAgICB1bnNoaWZ0KHN0YXRlX3R5
cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSog
X190b19lbmQsDQogICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19u
ZXh0KSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlmdChf
X3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9fdG9fbmV4dCk7IH0NCg0KICAgICAg
cmVzdWx0DQogICAgICBpbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBl
eHRlcm5fdHlwZSogX19mcm9tLA0KICAgICAgICAgY29uc3QgZXh0ZXJuX3R5
cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25l
eHQsDQogICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUq
IF9fdG9fZW5kLA0KICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQp
IGNvbnN0DQogICAgICB7DQogICAgICAgIHJldHVybiB0aGlzLT5kb19pbihf
X3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9fdG9f
bmV4dCk7DQogICAgICB9DQoNCiAgICAgIGludA0KICAgICAgZW5jb2Rpbmco
KSBjb25zdCB0aHJvdygpDQogICAgICB7IHJldHVybiB0aGlzLT5kb19lbmNv
ZGluZygpOyB9DQoNCiAgICAgIGJvb2wNCiAgICAgIGFsd2F5c19ub2NvbnYo
KSBjb25zdCB0aHJvdygpDQogICAgICB7IHJldHVybiB0aGlzLT5kb19hbHdh
eXNfbm9jb252KCk7IH0NCg0KICAgICAgaW50DQogICAgICBsZW5ndGgoY29u
c3Qgc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f
ZnJvbSwNCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQs
IHNpemVfdCBfX21heCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2xlbmd0aChfX3N0YXRlLCBfX2Zyb20sIF9fZW5kLCBfX21heCk7IH0NCg0K
ICAgICAgaW50DQogICAgICBtYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQ0K
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbWF4X2xlbmd0aCgpOyB9DQoNCiAg
ICBwcm90ZWN0ZWQ6DQogICAgICBleHBsaWNpdA0KICAgICAgX19jb2RlY3Z0
X2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpm
YWNldChfX3JlZnMpIHsgfQ0KDQogICAgICB2aXJ0dWFsDQogICAgICB+X19j
b2RlY3Z0X2Fic3RyYWN0X2Jhc2UoKSB7IH0NCg0KICAgICAgdmlydHVhbCBy
ZXN1bHQNCiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z
dCBpbnRlcm5fdHlwZSogX19mcm9tLA0KICAgICAgICAgICAgIGNvbnN0IGlu
dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9f
ZnJvbV9uZXh0LA0KICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBl
eHRlcm5fdHlwZSogX190b19lbmQsDQogICAgICAgICAgICAgZXh0ZXJuX3R5
cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBy
ZXN1bHQNCiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwg
ZXh0ZXJuX3R5cGUqIF9fdG8sDQogICAgICAgICAgICAgICAgIGV4dGVybl90
eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0
ID0gMDsNCg0KICAgICAgdmlydHVhbCByZXN1bHQNCiAgICAgIGRvX2luKHN0
YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20s
DQogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwg
Y29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwNCiAgICAgICAgICAg
IGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsDQog
ICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAw
Ow0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgZG9fZW5jb2RpbmcoKSBj
b25zdCB0aHJvdygpID0gMDsNCg0KICAgICAgdmlydHVhbCBib29sDQogICAg
ICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKSA9IDA7DQoNCiAg
ICAgIHZpcnR1YWwgaW50DQogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVf
dHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sDQogICAgICAgICAg
ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgp
IGNvbnN0ID0gMDsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX21h
eF9sZW5ndGgoKSBjb25zdCB0aHJvdygpID0gMDsNCiAgICB9Ow0KDQoNCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVy
blQsIHR5cGVuYW1lIF9TdGF0ZVQ+DQogICAgY2xhc3MgY29kZWN2dA0KICAg
IDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBf
RXh0ZXJuVCwgX1N0YXRlVD4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAg
ICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsNCiAgICAg
IHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7DQogICAgICB0eXBlZGVm
IF9FeHRlcm5UIGV4dGVybl90eXBlOw0KICAgICAgdHlwZWRlZiBfU3RhdGVU
IHN0YXRlX3R5cGU7DQoNCg0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7
DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBjb2RlY3Z0KHNpemVfdCBfX3Jl
ZnMgPSAwKQ0KICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50
ZXJuVCxfRXh0ZXJuVCxfU3RhdGVUPiAoX19yZWZzKSB7IH0NCg0KICAgIHBy
b3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5jb2RlY3Z0KCkgeyB9
DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw
ZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+DQogICAgbG9jYWxl
OjppZCBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD46Omlk
Ow0KIyA1OTQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL2NvZGVjdnQuaCIgMw0KICB0ZW1wbGF0ZTw+DQogICAgY2xhc3MgY29k
ZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+DQogICAgOiBwdWJsaWMgX19j
b2RlY3Z0X2Fic3RyYWN0X2Jhc2U8Y2hhciwgY2hhciwgbWJzdGF0ZV90Pg0K
ICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgY2hhciBpbnRl
cm5fdHlwZTsNCiAgICAgIHR5cGVkZWYgY2hhciBleHRlcm5fdHlwZTsNCiAg
ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7DQoNCg0KICAgICAg
c3RhdGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAgICAgIGV4cGxpY2l0DQogICAg
ICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKTsNCg0KICAgIHByb3RlY3Rl
ZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5jb2RlY3Z0KCk7DQoNCiAgICAg
IHZpcnR1YWwgcmVzdWx0DQogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19z
dGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAgICAgICAg
ICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJu
X3R5cGUqJiBfX2Zyb21fbmV4dCwNCiAgICAgICAgICAgICBleHRlcm5fdHlw
ZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLA0KICAgICAgICAgICAg
IGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsNCg0KICAgICAgdmly
dHVhbCByZXN1bHQNCiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19z
dGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sDQogICAgICAgICAgICAgICAgIGV4
dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQp
IGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIHJlc3VsdA0KICAgICAgZG9faW4o
c3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJv
bSwNCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5k
LCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LA0KICAgICAgICAg
ICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwN
CiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsN
Cg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX2VuY29kaW5nKCkgY29u
c3QgdGhyb3coKTsNCg0KICAgICAgdmlydHVhbCBib29sDQogICAgICBkb19h
bHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsNCg0KICAgICAgdmlydHVh
bCBpbnQNCiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29u
c3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwNCiAgICAgICAgICAgICAgICBjb25z
dCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7DQoN
CiAgICAgIHZpcnR1YWwgaW50DQogICAgICBkb19tYXhfbGVuZ3RoKCkgY29u
c3QgdGhyb3coKTsNCiAgfTsNCiMgNzAwICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9jb2RlY3Z0LmgiIDMNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFt
ZSBfU3RhdGVUPg0KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lIDogcHVibGlj
IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPg0KICAgIHsN
CiAgICBwdWJsaWM6DQogICAgICBleHBsaWNpdA0KICAgICAgY29kZWN2dF9i
eW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQ0KICAgICAg
OiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4oX19yZWZz
KSB7IH0NCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+
Y29kZWN2dF9ieW5hbWUoKSB7IH0NCiAgICB9Ow0KIyA0MTYgIi9ob21lL21k
ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMu
aCIgMiAzDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPg0KICAgIGNsYXNzIF9OdW1lcmljX2dldDsNCg0KDQoNCg0K
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGNsYXNzIF9G
b3JtYXRfY2FjaGUNCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGNoYXJfdHJh
aXRzPF9DaGFyVD4gdHJhaXRzX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2lj
X3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOw0KICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsNCg0K
DQogICAgICBmcmllbmQgY2xhc3MgbG9jYWxlOw0KICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgICAgIGZy
aWVuZCBjbGFzcyBfTnVtZXJpY19nZXQ7DQogICAgICBmcmllbmQgY2xhc3Mg
bnVtX2dldDxfQ2hhclQ+Ow0KICAgICAgZnJpZW5kIGNsYXNzIG51bV9wdXQ8
X0NoYXJUPjsNCiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX2dldDxfQ2hhclQ+
Ow0KICAgICAgZnJpZW5kIGNsYXNzIG1vbmV5X2dldDxfQ2hhclQ+Ow0KICAg
ICAgZnJpZW5kIGNsYXNzIHRpbWVfcHV0PF9DaGFyVD47DQogICAgICBmcmll
bmQgY2xhc3MgbW9uZXlfcHV0PF9DaGFyVD47DQoNCg0KDQoNCiAgICAgIHN0
YXRpYyBpbnQgX1NfcHdvcmRfaXg7DQoNCg0KDQogICAgICBib29sIF9NX3Zh
bGlkOw0KDQoNCg0KICAgICAgc3RhdGljIGNvbnN0IGNoYXIgX1NfbGl0ZXJh
bHNbXTsNCg0KDQoNCg0KICAgICAgZW51bQ0KICAgICAgew0KICAgICAgICBf
U19taW51cywNCiAgICAgICAgX1NfcGx1cywNCiAgICAgICAgX1NfeCwNCiAg
ICAgICAgX1NfWCwNCiAgICAgICAgX1NfZGlnaXRzLA0KICAgICAgICBfU19k
aWdpdHNfZW5kID0gX1NfZGlnaXRzICsgMTYsDQogICAgICAgIF9TX3VkaWdp
dHMgPSBfU19kaWdpdHNfZW5kLA0KICAgICAgICBfU191ZGlnaXRzX2VuZCA9
IF9TX3VkaWdpdHMgKyAxNiwNCiAgICAgICAgX1NfZWUgPSBfU19kaWdpdHMg
KyAxNCwNCiAgICAgICAgX1NfRWUgPSBfU191ZGlnaXRzICsgMTQNCiAgICAg
IH07DQoNCg0KDQoNCiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50
Ow0KDQoNCg0KDQoNCiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2Vw
Ow0KDQoNCg0KICAgICAgc3RyaW5nX3R5cGUgX01fdHJ1ZW5hbWU7DQogICAg
ICBzdHJpbmdfdHlwZSBfTV9mYWxzZW5hbWU7DQoNCg0KDQogICAgICBib29s
IF9NX3VzZV9ncm91cGluZzsNCg0KDQoNCiAgICAgIHN0cmluZyBfTV9ncm91
cGluZzsNCg0KICAgICAgX0Zvcm1hdF9jYWNoZSgpOw0KDQogICAgICB+X0Zv
cm1hdF9jYWNoZSgpIHRocm93KCkgeyB9DQoNCg0KDQoNCiAgICAgIHN0YXRp
YyBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qDQogICAgICBfU19nZXQoaW9zX2Jh
c2UmIF9faW9zKTsNCg0KICAgICAgdm9pZA0KICAgICAgX01fcG9wdWxhdGUo
aW9zX2Jhc2UmKTsNCg0KICAgICAgc3RhdGljIHZvaWQNCiAgICAgIF9TX2Nh
bGxiYWNrKGlvc19iYXNlOjpldmVudCBfX2V2ZW50LCBpb3NfYmFzZSYgX19p
b3MsIGludCBfX2l4KSB0aHJvdygpOw0KICAgIH07DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPg0KICAgIGludCBfRm9ybWF0X2NhY2hlPF9DaGFy
VD46Ol9TX3B3b3JkX2l4Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4NCiAgICBjb25zdCBjaGFyIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6DQog
ICAgX1NfbGl0ZXJhbHNbXSA9ICItK3hYMDEyMzQ1Njc4OWFiY2RlZjAxMjM0
NTY3ODlBQkNERUYiOw0KDQogICB0ZW1wbGF0ZTw+IF9Gb3JtYXRfY2FjaGU8
Y2hhcj46Ol9Gb3JtYXRfY2FjaGUoKTsNCg0KDQoNCg0KDQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIGNs
YXNzIF9OdW1lcmljX2dldA0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0lu
SXRlciBpdGVyX3R5cGU7DQoNCg0KICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPg0KICAgICAgZnJpZW5kIGNsYXNz
IG51bV9nZXQ7DQogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlw
ZW5hbWUgX0luSXRlclQ+DQogICAgICBmcmllbmQgY2xhc3MgdGltZV9nZXQ7
DQogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0lu
SXRlclQ+DQogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfZ2V0Ow0KICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPg0K
ICAgICAgZnJpZW5kIGNsYXNzIG51bV9wdXQ7DQogICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+DQogICAgICBmcmll
bmQgY2xhc3MgdGltZV9wdXQ7DQogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhciwgdHlwZW5hbWUgX0luSXRlclQ+DQogICAgICBmcmllbmQgY2xhc3Mg
bW9uZXlfcHV0Ow0KDQogICAgcHJpdmF0ZToNCiAgICAgIGV4cGxpY2l0DQog
ICAgICBfTnVtZXJpY19nZXQoKSB7IH0NCg0KICAgICAgdmlydHVhbA0KICAg
ICAgfl9OdW1lcmljX2dldCgpIHsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAg
ICAgIF9NX2dldF9kaWdpdHMoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBf
X2VuZCkgY29uc3Q7DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgY2xhc3MgbnVtX2dldCA6
IHB1YmxpYyBsb2NhbGU6OmZhY2V0DQogICAgew0KICAgIHB1YmxpYzoNCg0K
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl
ZiBfSW5JdGVyIGl0ZXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgY2hhcl90cmFp
dHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOw0KDQogICAgICBzdGF0aWMgbG9j
YWxlOjppZCBpZDsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIG51bV9nZXQo
c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsg
fQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19p
biwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QN
CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l
cnIsIF9fdik7IH0NCg0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdldChp
dGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p
bywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHNob3J0
JiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0K
ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlv
c19iYXNlJiBfX2lvLA0KICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgaW50JiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19nZXQo
X19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCg0KICAgICAg
aXRlcl90eXBlDQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0DQogICAgICB7IHJl
dHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9
DQojIDYwNyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvbG9jYWxlX2ZhY2V0cy5oIiAzDQogICAgICBpdGVyX3R5cGUNCiAgICAg
IGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz
ZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0DQogICAgICB7IHJldHVybiBk
b19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9DQoNCiAg
ICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0
DQogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9f
ZXJyLCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0KGl0
ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv
LA0KICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWdu
ZWQgbG9uZyYgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9f
aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQ0KIyA2MjkgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNl
dHMuaCIgMw0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXQoaXRlcl90eXBl
IF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sDQogICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBj
b25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv
LCBfX2VyciwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIGdl
dChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRv
dWJsZSYgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4s
IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5
cGUNCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0DQogICAgICB7IHJl
dHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9
DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2lu
LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QN
CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l
cnIsIF9fdik7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwg
fm51bV9nZXQoKSB7IH0NCg0KDQoNCg0KDQogICAgICB2b2lkDQogICAgICBf
TV9leHRyYWN0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCBjaGFyKiBfX3h0cmMsDQogICAgICAgICAgICAgICAg
IGludCYgX19iYXNlLCBib29sIF9fZnAgPSB0cnVlKSBjb25zdDsNCg0KICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUs
IGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGJv
b2wmKSBjb25zdDsNCg0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAg
ICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlv
c19iYXNlOjppb3N0YXRlJiwgc2hvcnQmKSBjb25zdDsNCiAgICAgIHZpcnR1
YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5
cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBpbnQmKSBjb25z
dDsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldCAo
aXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlv
c3RhdGUmLCBsb25nJikgY29uc3Q7DQoNCg0KDQoNCg0KICAgICAgdmlydHVh
bCBpdGVyX3R5cGUNCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsDQogICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0JikgY29uc3Q7DQogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90
eXBlLCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JikgY29uc3Q7DQogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90
eXBlLCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYpIGNvbnN0Ow0KDQoNCg0KDQoN
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90
eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLA0KICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7DQoNCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
dGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LA0KICAgICAgICAgICAgIGRvdWJsZSYpIGNvbnN0Ow0KDQogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90
eXBlLCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCBsb25nIGRvdWJsZSYpIGNvbnN0Ow0KDQogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90
eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwNCiAg
ICAgICAgICAgICB2b2lkKiYpIGNvbnN0Ow0KICAgIH07DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIGxv
Y2FsZTo6aWQgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsNCg0KDQog
IHRlbXBsYXRlPD4NCiAgICB2b2lkDQogICAgbnVtX2dldDxjaGFyLCBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID46Og0KICAgIF9NX2V4dHJhY3QoaXN0
cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2JlZywNCiAgICAgICAgICAgICAg
IGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gX19lbmQsIGlvc19iYXNlJiBf
X2lvLA0KICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCBjaGFyKiBfX3h0cmMsDQogICAgICAgICAgICAgICBpbnQmIF9fYmFzZSwg
Ym9vbCBfX2ZwKSBjb25zdDsNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBjbGFzcyBfTnVtZXJp
Y19wdXQNCiAgICB7DQogICAgcHVibGljOg0KICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5
cGU7DQogICAgcHJvdGVjdGVkOg0KICAgICAgZXhwbGljaXQNCiAgICAgIF9O
dW1lcmljX3B1dCgpIHsgfQ0KDQogICAgICB2aXJ0dWFsDQogICAgICB+X051
bWVyaWNfcHV0KCkgeyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIGNsYXNzIG51bV9w
dXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldA0KICAgIHsNCiAgICBwdWJsaWM6
DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5
cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOw0KDQogICAgICBzdGF0aWMgbG9j
YWxlOjppZCBpZDsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIG51bV9wdXQo
c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsg
fQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVyX3R5cGUgX19z
LCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikg
Y29uc3QNCiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxs
LCBfX3YpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgcHV0KGl0ZXJf
dHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxv
bmcgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19m
LCBfX2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBw
dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9f
ZmlsbCwNCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QNCiAg
ICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9
DQojIDc3MyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvbG9jYWxlX2ZhY2V0cy5oIiAzDQogICAgICBpdGVyX3R5cGUNCiAgICAg
IHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUg
X19maWxsLCBkb3VibGUgX192KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9f
cHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0NCg0KICAgICAgaXRlcl90
eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwg
Y2hhcl90eXBlIF9fZmlsbCwNCiAgICAgICAgICBsb25nIGRvdWJsZSBfX3Yp
IGNvbnN0DQogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmls
bCwgX192KTsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1dChpdGVy
X3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLA0K
ICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QNCiAgICAgIHsgcmV0
dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9DQoNCiAgICBw
cm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+bnVtX3B1dCgpIHsg
fTsNCg0KICAgICAgdmlydHVhbCBpdGVyX3R5cGUNCiAgICAgIGRvX3B1dChp
dGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBf
X3YpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAg
ZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxs
LCBsb25nIF9fdikgY29uc3Q7DQoNCg0KDQoNCg0KDQogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2Um
LCBjaGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25nKSBjb25zdDsNCg0K
DQoNCg0KDQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19w
dXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGRv
dWJsZSBfX3YpIGNvbnN0Ow0KDQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0K
ICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUg
X19maWxsLCBsb25nIGRvdWJsZSBfX3YpIGNvbnN0Ow0KDQogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jh
c2UmLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0
Ow0KICAgIH07DQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX091dEl0ZXI+DQogICAgbG9jYWxlOjppZCBudW1fcHV0PF9DaGFy
VCwgX091dEl0ZXI+OjppZDsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+DQogICAgY2xhc3MgbnVtcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNl
dA0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFy
VD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk
Ow0KDQogICAgcHJpdmF0ZToNCiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFs
X3BvaW50Ow0KICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7DQog
ICAgICBzdHJpbmcgX01fZ3JvdXBpbmc7DQogICAgICBzdHJpbmdfdHlwZSBf
TV90cnVlbmFtZTsNCiAgICAgIHN0cmluZ190eXBlIF9NX2ZhbHNlbmFtZTsN
Cg0KICAgIHB1YmxpYzoNCiAgICAgIGV4cGxpY2l0DQogICAgICBudW1wdW5j
dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykN
CiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9DQoNCiAgICAg
IGV4cGxpY2l0DQogICAgICBudW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYywg
c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpDQog
ICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jbG9jKTsgfQ0KDQog
ICAgICBjaGFyX3R5cGUNCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdA0K
ICAgICAgeyByZXR1cm4gZG9fZGVjaW1hbF9wb2ludCgpOyB9DQoNCiAgICAg
IGNoYXJfdHlwZQ0KICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0DQogICAg
ICB7IHJldHVybiBkb190aG91c2FuZHNfc2VwKCk7IH0NCg0KICAgICAgc3Ry
aW5nDQogICAgICBncm91cGluZygpIGNvbnN0DQogICAgICB7IHJldHVybiBk
b19ncm91cGluZygpOyB9DQoNCiAgICAgIHN0cmluZ190eXBlDQogICAgICB0
cnVlbmFtZSgpIGNvbnN0DQogICAgICB7IHJldHVybiBkb190cnVlbmFtZSgp
OyB9DQoNCiAgICAgIHN0cmluZ190eXBlDQogICAgICBmYWxzZW5hbWUoKSBj
b25zdA0KICAgICAgeyByZXR1cm4gZG9fZmFsc2VuYW1lKCk7IH0NCg0KICAg
IHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5udW1wdW5jdCgp
IHsgfQ0KDQogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQ0KICAgICAgZG9fZGVj
aW1hbF9wb2ludCgpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9kZWNpbWFs
X3BvaW50OyB9DQoNCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlDQogICAgICBk
b190aG91c2FuZHNfc2VwKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3Ro
b3VzYW5kc19zZXA7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmcNCiAgICAg
IGRvX2dyb3VwaW5nKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2dyb3Vw
aW5nOyB9DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRv
X3RydWVuYW1lKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX3RydWVuYW1l
OyB9DQoNCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX2Zh
bHNlbmFtZSgpIGNvbnN0DQogICAgICB7IHJldHVybiBfTV9mYWxzZW5hbWU7
IH0NCg0KDQogICAgICB2b2lkDQogICAgICBfTV9pbml0aWFsaXplX251bXB1
bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsKTsNCiAgICB9Ow0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBsb2NhbGU6OmlkIG51
bXB1bmN0PF9DaGFyVD46OmlkOw0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4NCiAgICB2b2lkDQogICAgbnVtcHVuY3Q8X0NoYXJUPjo6X01faW5p
dGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlICkNCiAgICB7DQoNCiAgICB9
DQoNCiAgdGVtcGxhdGU8Pg0KICAgIHZvaWQNCiAgICBudW1wdW5jdDxjaGFy
Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7
DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0K
ICAgIGNsYXNzIG51bXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBudW1wdW5jdDxf
Q2hhclQ+DQogICAgew0KICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9u
dW1wdW5jdDsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+
IHN0cmluZ190eXBlOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbnVtcHVu
Y3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDAp
DQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQ0KICAgICAgew0K
ICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVu
Y3QsIF9fcyk7DQogICAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX01f
Y19sb2NhbGVfbnVtcHVuY3QpOw0KICAgICAgfQ0KDQogICAgcHJvdGVjdGVk
Og0KICAgICAgdmlydHVhbA0KICAgICAgfm51bXB1bmN0X2J5bmFtZSgpDQog
ICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVu
Y3QpOyB9DQogICAgfTsNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4NCiAgICBjbGFzcyBjb2xsYXRlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQN
CiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+
IHN0cmluZ190eXBlOw0KDQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsN
Cg0KICAgICAgZXhwbGljaXQNCiAgICAgIGNvbGxhdGUoc2l6ZV90IF9fcmVm
cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQ0KDQogICAgICBp
bnQNCiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3Qg
X0NoYXJUKiBfX2hpMSwNCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBf
X2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QNCiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX2NvbXBhcmUoX19sbzEsIF9faGkxLCBfX2xvMiwgX19o
aTIpOyB9DQoNCiAgICAgIHN0cmluZ190eXBlDQogICAgICB0cmFuc2Zvcm0o
Y29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0
DQogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFuc2Zvcm0oX19sbywgX19o
aSk7IH0NCg0KICAgICAgbG9uZw0KICAgICAgaGFzaChjb25zdCBfQ2hhclQq
IF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QNCiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX2hhc2goX19sbywgX19oaSk7IH0NCg0KICBwcm90ZWN0
ZWQ6DQogICAgICB+Y29sbGF0ZSgpIHsgfQ0KDQogICAgICB2aXJ0dWFsIGlu
dA0KICAgICAgZG9fY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25z
dCBfQ2hhclQqIF9faGkxLA0KICAgICAgICAgICAgICAgICBjb25zdCBfQ2hh
clQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdDsNCg0KICAg
ICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAgICAgZG9fdHJhbnNmb3JtKGNv
bnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsN
Cg0KICAgICAgdmlydHVhbCBsb25nDQogICAgICBkb19oYXNoKGNvbnN0IF9D
aGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsNCiAgICB9
Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBsb2NhbGU6
OmlkIGNvbGxhdGU8X0NoYXJUPjo6aWQ7DQoNCg0KICB0ZW1wbGF0ZTw+DQog
ICAgaW50DQogICAgY29sbGF0ZTxjaGFyPjo6ZG9fY29tcGFyZShjb25zdCBj
aGFyKiBfX2xvMSwgY29uc3QgY2hhciogX19oaTEsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2xvMiwgY29uc3QgY2hh
ciogX19oaTIpIGNvbnN0Ow0KDQogIHRlbXBsYXRlPD4NCiAgICBzdHJpbmcN
CiAgICBjb2xsYXRlPGNoYXI+Ojpkb190cmFuc2Zvcm0oY29uc3QgY2hhciog
X19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7DQoNCiAgdGVtcGxhdGU8
Pg0KICAgIGxvbmcNCiAgICBjb2xsYXRlPGNoYXI+Ojpkb19oYXNoKGNvbnN0
IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0Ow0KIyAxMDE0
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2Nh
bGVfZmFjZXRzLmgiIDMNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0K
ICAgIGNsYXNzIGNvbGxhdGVfYnluYW1lIDogcHVibGljIGNvbGxhdGU8X0No
YXJUPg0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
aGFyVD4gc3RyaW5nX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQogICAgICBj
b2xsYXRlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDAp
Ow0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAgICAgfmNv
bGxhdGVfYnluYW1lKCkgeyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTw+DQog
ICAgY29sbGF0ZV9ieW5hbWU8Y2hhcj46OmNvbGxhdGVfYnluYW1lKGNvbnN0
IGNoYXIqLCBzaXplX3QgX19yZWZzKTsNCg0KDQoNCg0KDQogIGNsYXNzIHRp
bWVfYmFzZQ0KICB7DQogIHB1YmxpYzoNCiAgICBlbnVtIGRhdGVvcmRlciB7
IG5vX29yZGVyLCBkbXksIG1keSwgeW1kLCB5ZG0gfTsNCiAgfTsNCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQog
ICAgY2xhc3MgdGltZV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVi
bGljIHRpbWVfYmFzZQ0KICAgIHsNCiAgICBwdWJsaWM6DQoNCiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0luSXRl
ciBpdGVyX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0K
DQogICAgICBleHBsaWNpdA0KICAgICAgdGltZV9nZXQoc2l6ZV90IF9fcmVm
cyA9IDApDQogICAgICA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcyksIF9NX2Rh
eW5hbWVzKDApLCBfTV9tb250aG5hbWVzKDApIHsgfQ0KDQogICAgICBkYXRl
b3JkZXINCiAgICAgIGRhdGVfb3JkZXIoKSBjb25zdA0KICAgICAgeyByZXR1
cm4gZG9fZGF0ZV9vcmRlcigpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAg
ICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19mLA0KICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCB0bSogX190KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9f
Z2V0X3RpbWUoX19zLCBfX2VuZCwgX19mLCBfX2VyciwgX190KTsgfQ0KDQog
ICAgICBpdGVyX3R5cGUNCiAgICAgIGdldF9kYXRlKGl0ZXJfdHlwZSBfX3Ms
IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwNCiAgICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QN
CiAgICAgIHsgcmV0dXJuIGRvX2dldF9kYXRlKF9fcywgX19lbmQsIF9fZiwg
X19lcnIsIF9fdCk7IH0NCg0KICAgICAgaXRlcl90eXBlDQogICAgICBnZXRf
d2Vla2RheShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2YsDQogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0DQogICAgICB7IHJldHVybiBkb19n
ZXRfd2Vla2RheShfX3MsX19lbmQsX19mLF9fZXJyLF9fdCk7IH0NCg0KICAg
ICAgaXRlcl90eXBlDQogICAgICBnZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBf
X3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwNCiAgICAgICAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190
KSBjb25zdA0KICAgICAgeyByZXR1cm4gZG9fZ2V0X21vbnRobmFtZShfX3Ms
X19lbmQsX19mLF9fZXJyLF9fdCk7IH0NCg0KICAgICAgaXRlcl90eXBlDQog
ICAgICBnZXRfeWVhcihpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2YsDQogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0DQogICAgICB7IHJldHVybiBk
b19nZXRfeWVhcihfX3MsX19lbmQsX19mLF9fZXJyLF9fdCk7IH0NCg0KICAg
IHByb3RlY3RlZDoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH50aW1lX2dldCgp
DQogICAgICB7DQogICAgICAgIGRlbGV0ZSBbXSBfTV9tb250aG5hbWVzOw0K
ICAgICAgICBkZWxldGUgW10gX01fZGF5bmFtZXM7DQogICAgICB9DQoNCiAg
ICAgIHZpcnR1YWwgZGF0ZW9yZGVyDQogICAgICBkb19kYXRlX29yZGVyKCkg
Y29uc3QNCiAgICAgIHsgcmV0dXJuIHRpbWVfYmFzZTo6eW1kOyB9DQoNCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXRfdGltZShpdGVy
X3R5cGUgX19zLCBpdGVyX3R5cGUgLCBpb3NfYmFzZSYsDQogICAgICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSogKSBjb25zdA0KICAg
ICAgeyByZXR1cm4gX19zOyB9DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
DQogICAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUg
LCBpb3NfYmFzZSYsDQogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgLCB0bSogKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19zOyB9DQoN
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXRfd2Vla2Rh
eShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwN
CiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgdG0qIF9fdCkgY29uc3Q7DQoNCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
DQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX3MsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmLA0KICAgICAgICAgICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0Ow0K
DQogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQ0KICAgICAgZG9fZ2V0X3llYXIo
aXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgaW9zX2Jhc2UmLA0KICAgICAg
ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNvbnN0
DQogICAgICB7IHJldHVybiBfX3M7IH0NCg0KICAgICAgbXV0YWJsZSBiYXNp
Y19zdHJpbmc8X0NoYXJUPiogX01fZGF5bmFtZXM7DQogICAgICBtdXRhYmxl
IGJhc2ljX3N0cmluZzxfQ2hhclQ+KiBfTV9tb250aG5hbWVzOw0KICAgIH07
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPg0KICAgIGxvY2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPg0KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSA6IHB1Ymxp
YyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+DQogICAgew0KICAgIHB1Ymxp
YzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5
cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0DQog
ICAgICB0aW1lX2dldF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3Jl
ZnMgPSAwKQ0KICAgICAgOiB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+KF9f
cmVmcykgeyB9DQogICAgcHJvdGVjdGVkOg0KICAgICAgdmlydHVhbA0KICAg
ICAgfnRpbWVfZ2V0X2J5bmFtZSgpIHsgfQ0KICAgIH07DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBj
bGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMg
dGltZV9iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRl
cl90eXBlOw0KDQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsNCg0KICAg
ICAgZXhwbGljaXQNCiAgICAgIHRpbWVfcHV0KHNpemVfdCBfX3JlZnMgPSAw
KSA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcykgeyB9DQoNCg0KICAgICAgaXRl
cl90eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmICwg
Y2hhcl90eXBlICwNCiAgICAgICAgICBjb25zdCB0bSogLCBjb25zdCBfQ2hh
clQqICwNCiAgICAgICAgICBjb25zdCBfQ2hhclQqICkgY29uc3QNCiAgICAg
IHsgcmV0dXJuIF9fczsgfQ0KDQogICAgICBpdGVyX3R5cGUNCiAgICAgIHB1
dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19m
aWxsLA0KICAgICAgICAgIGNvbnN0IHRtKiBfX3RtYiwgY2hhciBfX2Zvcm1h
dCwgY2hhciBfX21vZGlmaWVyID0gMCkgY29uc3QNCiAgICAgIHsgcmV0dXJu
IGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3RtYiwgX19mb3JtYXQsIF9f
bW9kaWZpZXIpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFs
DQogICAgICB+dGltZV9wdXQoKSB7IH0NCg0KICAgICAgdmlydHVhbCBpdGVy
X3R5cGUNCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYs
IGNoYXJfdHlwZSwgY29uc3QgdG0qICwNCiAgICAgICAgICAgICBjaGFyICwg
Y2hhciApIGNvbnN0DQogICAgICB7IHJldHVybiBfX3M7IH0NCiAgICB9Ow0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXI+DQogICAgbG9jYWxlOjppZCB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVy
Pjo6aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfT3V0SXRlcj4NCiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgOiBwdWJs
aWMgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4NCiAgICB7DQogICAgcHVi
bGljOg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAg
dHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7DQoNCiAgICAgIGV4cGxpY2l0
DQogICAgICB0aW1lX3B1dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBf
X3JlZnMgPSAwKQ0KICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVy
PiAoX19yZWZzKSB7IH0NCg0KICAgIHByb3RlY3RlZDoNCiAgICAgIHZpcnR1
YWwNCiAgICAgIH50aW1lX3B1dF9ieW5hbWUoKSB7IH0NCiAgICB9Ow0KDQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
Pg0KICAgIGNsYXNzIG1vbmV5X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0
DQogICAgew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7DQog
ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBl
Ow0KDQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsNCg0KICAgICAgZXhw
bGljaXQNCiAgICAgIG1vbmV5X2dldChzaXplX3QgX19yZWZzID0gMCkgOiBs
b2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0K
ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9v
bCBfX2ludGwsDQogICAgICAgICAgaW9zX2Jhc2UmIF9fZiwgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3QN
CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX3MsIF9fZW5kLCBfX2ludGwsIF9f
ZiwgX19lcnIsIF9fdW5pdHMpOyB9DQoNCiAgICAgIGl0ZXJfdHlwZQ0KICAg
ICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBf
X2ludGwsIGlvc19iYXNlJiBfX2YsDQogICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdA0K
ICAgICAgeyByZXR1cm4gZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwgX19m
LCBfX2VyciwgX19kaWdpdHMpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAg
ICB2aXJ0dWFsDQogICAgICB+bW9uZXlfZ2V0KCkgeyB9DQoNCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywg
aXRlcl90eXBlICwgYm9vbCAsDQogICAgICAgICAgICAgaW9zX2Jhc2UmICwg
aW9zX2Jhc2U6Omlvc3RhdGUmICwNCiAgICAgICAgICAgICBsb25nIGRvdWJs
ZSYgKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19zOyB9DQoNCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlDQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywg
aXRlcl90eXBlICwgYm9vbCAsDQogICAgICAgICAgICAgaW9zX2Jhc2UmICwg
aW9zX2Jhc2U6Omlvc3RhdGUmICwNCiAgICAgICAgICAgICBzdHJpbmdfdHlw
ZSYgKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19zOyB9DQogICAgfTsNCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+
DQogICAgbG9jYWxlOjppZCBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6
aWQ7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
T3V0SXRlcj4NCiAgICBjbGFzcyBtb25leV9wdXQgOiBwdWJsaWMgbG9jYWxl
OjpmYWNldA0KICAgIHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9D
aGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJf
dHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry
aW5nX3R5cGU7DQoNCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOw0KDQog
ICAgICBleHBsaWNpdA0KICAgICAgbW9uZXlfcHV0KHNpemVfdCBfX3JlZnMg
PSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0NCg0KICAgICAgaXRl
cl90eXBlDQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGws
IGlvc19iYXNlJiBfX2YsDQogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwg
bG9uZyBkb3VibGUgX191bml0cykgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRv
X3B1dChfX3MsIF9faW50bCwgX19mLCBfX2ZpbGwsIF9fdW5pdHMpOyB9DQoN
CiAgICAgIGl0ZXJfdHlwZQ0KICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJv
b2wgX19pbnRsLCBpb3NfYmFzZSYgX19mLA0KICAgICAgICAgIGNoYXJfdHlw
ZSBfX2ZpbGwsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QN
CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9faW50bCwgX19mLCBfX2Zp
bGwsIF9fZGlnaXRzKTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAgICAgdmly
dHVhbA0KICAgICAgfm1vbmV5X3B1dCgpIHsgfQ0KDQogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQ0KICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2ws
IGlvc19iYXNlJiAsIGNoYXJfdHlwZSAsDQogICAgICAgICAgICAgbG9uZyBk
b3VibGUgKSBjb25zdA0KICAgICAgeyByZXR1cm4gX19zOyB9DQoNCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlDQogICAgICBkb19wdXQoaXRlcl90eXBlIF9f
cywgYm9vbCwgaW9zX2Jhc2UmICwgY2hhcl90eXBlICwNCiAgICAgICAgICAg
ICBjb25zdCBzdHJpbmdfdHlwZSYgKSBjb25zdA0KICAgICAgeyByZXR1cm4g
X19zOyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIGxvY2FsZTo6aWQgbW9uZXlfcHV0
PF9DaGFyVCwgX091dEl0ZXI+OjppZDsNCg0KICBzdHJ1Y3QgbW9uZXlfYmFz
ZQ0KICB7DQogICAgZW51bSBwYXJ0IHsgbm9uZSwgc3BhY2UsIHN5bWJvbCwg
c2lnbiwgdmFsdWUgfTsNCiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmll
bGRbNF07IH07DQoNCiAgICBzdGF0aWMgY29uc3QgcGF0dGVybiBfU19kZWZh
dWx0X3BhdHRlcm47DQoNCg0KDQogICAgc3RhdGljIHBhdHRlcm4NCiAgICBf
U19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VlZHMsIGNoYXIgX19z
cGFjZSwgY2hhciBfX3Bvc24pOw0KICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgYm9vbCBfSW50bD4NCiAgICBjbGFzcyBtb25leXB1bmN0
IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtb25leV9iYXNlDQog
ICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh
cl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBz
dHJpbmdfdHlwZTsNCg0KICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9
IF9JbnRsOw0KICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7DQoNCiAgICBw
cml2YXRlOg0KICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7DQog
ICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsNCiAgICAgIHN0cmlu
ZyBfTV9ncm91cGluZzsNCiAgICAgIHN0cmluZ190eXBlIF9NX2N1cnJfc3lt
Ym9sOw0KICAgICAgc3RyaW5nX3R5cGUgX01fcG9zaXRpdmVfc2lnbjsNCiAg
ICAgIHN0cmluZ190eXBlIF9NX25lZ2F0aXZlX3NpZ247DQogICAgICBpbnQg
X01fZnJhY19kaWdpdHM7DQogICAgICBwYXR0ZXJuIF9NX3Bvc19mb3JtYXQ7
DQogICAgICBwYXR0ZXJuIF9NX25lZ19mb3JtYXQ7DQoNCiAgICBwdWJsaWM6
DQogICAgICBleHBsaWNpdA0KICAgICAgbW9uZXlwdW5jdChzaXplX3QgX19y
ZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykNCiAgICAgIHsgX01f
aW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0NCg0KICAgICAgZXhwbGljaXQN
CiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBf
X3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQ0KICAgICAgeyBf
TV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jbG9jKTsgfQ0KDQogICAgICBj
aGFyX3R5cGUNCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdA0KICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgpOyB9DQoNCiAgICAg
IGNoYXJfdHlwZQ0KICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0DQogICAg
ICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0NCg0KICAg
ICAgc3RyaW5nDQogICAgICBncm91cGluZygpIGNvbnN0DQogICAgICB7IHJl
dHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9DQoNCiAgICAgIHN0cmluZ190
eXBlDQogICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0DQogICAgICB7IHJldHVy
biB0aGlzLT5kb19jdXJyX3N5bWJvbCgpOyB9DQoNCiAgICAgIHN0cmluZ190
eXBlDQogICAgICBwb3NpdGl2ZV9zaWduKCkgY29uc3QNCiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX3Bvc2l0aXZlX3NpZ24oKTsgfQ0KDQogICAgICBzdHJp
bmdfdHlwZQ0KICAgICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0DQogICAgICB7
IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7IH0NCg0KICAgICAg
aW50DQogICAgICBmcmFjX2RpZ2l0cygpIGNvbnN0DQogICAgICB7IHJldHVy
biB0aGlzLT5kb19mcmFjX2RpZ2l0cygpOyB9DQoNCiAgICAgIHBhdHRlcm4N
CiAgICAgIHBvc19mb3JtYXQoKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fcG9zX2Zvcm1hdCgpOyB9DQoNCiAgICAgIHBhdHRlcm4NCiAgICAg
IG5lZ19mb3JtYXQoKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
bmVnX2Zvcm1hdCgpOyB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0
dWFsDQogICAgICB+bW9uZXlwdW5jdCgpIHsgfQ0KDQogICAgICB2aXJ0dWFs
IGNoYXJfdHlwZQ0KICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0DQog
ICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9DQoNCiAgICAgIHZp
cnR1YWwgY2hhcl90eXBlDQogICAgICBkb190aG91c2FuZHNfc2VwKCkgY29u
c3QNCiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0NCg0KICAg
ICAgdmlydHVhbCBzdHJpbmcNCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QN
CiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9DQoNCiAgICAgIHZpcnR1
YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX2N1cnJfc3ltYm9sKCkgY29uc3QN
CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9sOyB9DQoNCiAgICAgIHZp
cnR1YWwgc3RyaW5nX3R5cGUNCiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBj
b25zdA0KICAgICAgeyByZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQ0KDQog
ICAgICB2aXJ0dWFsIHN0cmluZ190eXBlDQogICAgICBkb19uZWdhdGl2ZV9z
aWduKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX25lZ2F0aXZlX3NpZ247
IH0NCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvX2ZyYWNfZGlnaXRz
KCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2ZyYWNfZGlnaXRzOyB9DQoN
CiAgICAgIHZpcnR1YWwgcGF0dGVybg0KICAgICAgZG9fcG9zX2Zvcm1hdCgp
IGNvbnN0DQogICAgICB7IHJldHVybiBfTV9wb3NfZm9ybWF0OyB9DQoNCiAg
ICAgIHZpcnR1YWwgcGF0dGVybg0KICAgICAgZG9fbmVnX2Zvcm1hdCgpIGNv
bnN0DQogICAgICB7IHJldHVybiBfTV9uZWdfZm9ybWF0OyB9DQoNCg0KICAg
ICAgdm9pZA0KICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19s
b2NhbGUgX19jbG9jID0gX19udWxsKTsNCiAgICB9Ow0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4NCiAgICBsb2NhbGU6Omlk
IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkOw0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4NCiAgICBjb25zdCBib29s
IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmludGw7DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPg0KICAgIHZvaWQNCiAg
ICBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjpfTV9pbml0aWFsaXplX21v
bmV5cHVuY3QoX19jX2xvY2FsZSApDQogICAgew0KDQogICAgfQ0KDQogIHRl
bXBsYXRlPD4NCiAgICB2b2lkDQogICAgbW9uZXlwdW5jdDxjaGFyPjo6X01f
aW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsNCg0K
DQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9J
bnRsPg0KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lIDogcHVibGljIG1v
bmV5cHVuY3Q8X0NoYXJULCBfSW50bD4NCiAgICB7DQogICAgICBfX2NfbG9j
YWxlIF9NX2NfbG9jYWxlX21vbmV5cHVuY3Q7DQogICAgcHVibGljOg0KICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBi
YXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsNCg0KICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOw0KDQogICAgICBleHBsaWNp
dA0KICAgICAgbW9uZXlwdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBz
aXplX3QgX19yZWZzID0gMCkNCiAgICAgIDogbW9uZXlwdW5jdDxfQ2hhclQs
IF9JbnRsPihfX3JlZnMpDQogICAgICB7DQogICAgICAgIF9TX2NyZWF0ZV9j
X2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0LCBfX3MpOw0KICAgICAg
ICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01fY19sb2NhbGVfbW9uZXlw
dW5jdCk7DQogICAgICB9DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2aXJ0
dWFsDQogICAgICB+bW9uZXlwdW5jdF9ieW5hbWUoKQ0KICAgICAgeyBfU19k
ZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9DQog
ICAgfTsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0lu
dGw+DQogICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxfQ2hhclQs
IF9JbnRsPjo6aW50bDsNCg0KDQogIHN0cnVjdCBtZXNzYWdlc19iYXNlDQog
IHsNCiAgICB0eXBlZGVmIGludCBjYXRhbG9nOw0KICB9Ow0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBtZXNzYWdlcyA6IHB1
YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbWVzc2FnZXNfYmFzZQ0KICAg
IHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmlu
Z190eXBlOw0KDQogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsNCg0KICAg
ICAgZXhwbGljaXQNCiAgICAgIG1lc3NhZ2VzKHNpemVfdCBfX3JlZnMgPSAw
KSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0NCg0KICAgICAgY2F0YWxv
Zw0KICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywg
Y29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3QNCiAgICAgIHsgcmV0dXJuIGRv
X29wZW4oX19zLCBfX2xvYyk7IH0NCg0KICAgICAgc3RyaW5nX3R5cGUNCiAg
ICAgIGdldChjYXRhbG9nIF9fYywgaW50IF9fc2V0LCBpbnQgX19tc2dpZCwg
Y29uc3Qgc3RyaW5nX3R5cGUmIF9fcykgY29uc3QNCiAgICAgIHsgcmV0dXJu
IGRvX2dldChfX2MsX19zZXQsX19tc2dpZCxfX3MpOyB9DQoNCiAgICAgIHZv
aWQNCiAgICAgIGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdA0KICAgICAgeyBy
ZXR1cm4gZG9fY2xvc2UoX19jKTsgfQ0KDQogICAgcHJvdGVjdGVkOg0KICAg
ICAgdmlydHVhbA0KICAgICAgfm1lc3NhZ2VzKCkgeyB9DQoNCg0KDQogICAg
ICB2aXJ0dWFsIGNhdGFsb2cNCiAgICAgIGRvX29wZW4oY29uc3QgYmFzaWNf
c3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJikgY29uc3QNCiAgICAgIHsg
cmV0dXJuIDA7IH0NCg0KICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQ0KICAg
ICAgZG9fZ2V0KGNhdGFsb2csIGludCwgaW50ICwgY29uc3Qgc3RyaW5nX3R5
cGUmIF9fZGZhdWx0KSBjb25zdA0KICAgICAgeyByZXR1cm4gX19kZmF1bHQ7
IH0NCg0KICAgICAgdmlydHVhbCB2b2lkDQogICAgICBkb19jbG9zZShjYXRh
bG9nKSBjb25zdCB7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4NCiAgICBsb2NhbGU6OmlkIG1lc3NhZ2VzPF9DaGFyVD46Omlk
Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBjbGFzcyBt
ZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2FnZXM8X0NoYXJUPg0KICAg
IHsNCiAgICBwdWJsaWM6DQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7DQogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmlu
Z190eXBlOw0KDQogICAgICBleHBsaWNpdA0KICAgICAgbWVzc2FnZXNfYnlu
YW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCk7DQoNCiAgICBw
cm90ZWN0ZWQ6DQogICAgICB2aXJ0dWFsDQogICAgICB+bWVzc2FnZXNfYnlu
YW1lKCkgeyB9DQogICAgfTsNCg0KICB0ZW1wbGF0ZTw+DQogICAgbWVzc2Fn
ZXNfYnluYW1lPGNoYXI+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhcios
IHNpemVfdCBfX3JlZnMpOw0KIyAxNTMyICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAg
aXNzcGFjZShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAg
IHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlz
KGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNwcmludChf
Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJu
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jh
c2U6OnByaW50LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNjbnRybChfQ2hhclQgX19j
LCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNl
dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmNudHJs
LCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAg
IGlubGluZSBib29sDQogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBs
b2NhbGUmIF9fbG9jKQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf
Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVyLCBfX2MpOyB9
DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBi
b29sIGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykN
CiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9j
KS5pcyhjdHlwZV9iYXNlOjpsb3dlciwgX19jKTsgfQ0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzYWxw
aGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJl
dHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlw
ZV9iYXNlOjphbHBoYSwgX19jKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4NCiAgICBpbmxpbmUgYm9vbA0KICAgIGlzZGlnaXQoX0NoYXJU
IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1c2Vf
ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpk
aWdpdCwgX19jKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4N
CiAgICBpbmxpbmUgYm9vbA0KICAgIGlzcHVuY3QoX0NoYXJUIF9fYywgY29u
c3QgbG9jYWxlJiBfX2xvYykNCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5
cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwdW5jdCwgX19j
KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbmxp
bmUgYm9vbA0KICAgIGlzeGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2Fs
ZSYgX19sb2MpDQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy
VD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2MpOyB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29s
DQogICAgaXNhbG51bShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j
KQ0KICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s
b2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBfX2MpOyB9DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGluZSBib29sDQogICAgaXNn
cmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsg
cmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0
eXBlX2Jhc2U6OmdyYXBoLCBfX2MpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPg0KICAgIGlubGluZSBfQ2hhclQNCiAgICB0b3VwcGVyKF9D
aGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpDQogICAgeyByZXR1cm4g
dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91cHBlcihfX2Mp
OyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIGlubGlu
ZSBfQ2hhclQNCiAgICB0b2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2Fs
ZSYgX19sb2MpDQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy
VD4gPihfX2xvYykudG9sb3dlcihfX2MpOyB9DQp9DQojIDM3ICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIg
MiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3MgYmFzaWNf
aW9zIDogcHVibGljIGlvc19iYXNlDQogICAgew0KICAgIHB1YmxpYzoNCg0K
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7
DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9m
Zl90eXBlOw0KICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0K
DQoNCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7
DQogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBf
VHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsNCiAgICAgIHR5cGVkZWYgbnVt
X3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBl
Ow0KICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg
X1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7DQogICAgICB0eXBlZGVmIG51
bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlw
ZTsNCg0KDQogICAgcHJpdmF0ZToNCiAgICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiogX01fdGllOw0KICAgICAgY2hhcl90eXBlIF9NX2Zp
bGw7DQogICAgICBpb3N0YXRlIF9NX2V4Y2VwdGlvbjsNCg0KICAgIHByb3Rl
Y3RlZDoNCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
KiBfTV9zdHJlYW1idWY7DQogICAgICBpb3N0YXRlIF9NX3N0cmVhbWJ1Zl9z
dGF0ZTsNCg0KDQogICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9NX2lvc19m
Y3R5cGU7DQoNCiAgICAgIGNvbnN0IF9fbnVtcHV0X3R5cGUqIF9NX2ZudW1w
dXQ7DQoNCiAgICAgIGNvbnN0IF9fbnVtZ2V0X3R5cGUqIF9NX2ZudW1nZXQ7
DQoNCiAgICBwdWJsaWM6DQogICAgICBpbmxpbmUgY29uc3QgX19jdHlwZV90
eXBlKg0KICAgICAgX01fZ2V0X2ZjdHlwZV9pb3Modm9pZCkNCiAgICAgIHsg
cmV0dXJuIF9NX2lvc19mY3R5cGU7IH0NCg0KICAgICAgb3BlcmF0b3Igdm9p
ZCooKSBjb25zdA0KICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6
IGNvbnN0X2Nhc3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0NCg0KICAgICAgaW5s
aW5lIGJvb2wNCiAgICAgIG9wZXJhdG9yISgpIGNvbnN0DQogICAgICB7IHJl
dHVybiB0aGlzLT5mYWlsKCk7IH0NCg0KICAgICAgaW5saW5lIGlvc3RhdGUN
CiAgICAgIHJkc3RhdGUoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01fc3Ry
ZWFtYnVmX3N0YXRlOyB9DQoNCiAgICAgIGlubGluZSB2b2lkDQogICAgICBj
bGVhcihpb3N0YXRlIF9fc3RhdGUgPSBnb29kYml0KQ0KICAgICAgew0KICAg
ICAgICBpZiAodGhpcy0+cmRidWYoKSkNCiAgICAgICAgICBfTV9zdHJlYW1i
dWZfc3RhdGUgPSBfX3N0YXRlOw0KICAgICAgICBlbHNlDQogICAgICAgICAg
X01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsNCiAgICAg
ICAgaWYgKCh0aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkp
KQ0KICAgICAgICAgIF9fdGhyb3dfaW9zX2ZhaWx1cmUoImJhc2ljX2lvczo6
Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlvbiIpOw0KICAgICAgfQ0K
DQogICAgICBpbmxpbmUgdm9pZA0KICAgICAgc2V0c3RhdGUoaW9zdGF0ZSBf
X3N0YXRlKQ0KICAgICAgeyB0aGlzLT5jbGVhcih0aGlzLT5yZHN0YXRlKCkg
fCBfX3N0YXRlKTsgfQ0KDQogICAgICBpbmxpbmUgYm9vbA0KICAgICAgZ29v
ZCgpIGNvbnN0DQogICAgICB7IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0g
MDsgfQ0KDQogICAgICBpbmxpbmUgYm9vbA0KICAgICAgZW9mKCkgY29uc3QN
CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBlb2ZiaXQpICE9
IDA7IH0NCg0KICAgICAgaW5saW5lIGJvb2wNCiAgICAgIGZhaWwoKSBjb25z
dA0KICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIChiYWRiaXQg
fCBmYWlsYml0KSkgIT0gMDsgfQ0KDQogICAgICBpbmxpbmUgYm9vbA0KICAg
ICAgYmFkKCkgY29uc3QNCiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRl
KCkgJiBiYWRiaXQpICE9IDA7IH0NCg0KICAgICAgaW5saW5lIGlvc3RhdGUN
CiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdA0KICAgICAgeyByZXR1cm4gX01f
ZXhjZXB0aW9uOyB9DQoNCiAgICAgIGlubGluZSB2b2lkDQogICAgICBleGNl
cHRpb25zKGlvc3RhdGUgX19leGNlcHQpDQogICAgICB7DQogICAgICAgIF9N
X2V4Y2VwdGlvbiA9IF9fZXhjZXB0Ow0KICAgICAgICB0aGlzLT5jbGVhcihf
TV9zdHJlYW1idWZfc3RhdGUpOw0KICAgICAgfQ0KDQoNCiAgICAgIGV4cGxp
Y2l0DQogICAgICBiYXNpY19pb3MoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz4qIF9fc2IpIDogaW9zX2Jhc2UoKQ0KICAgICAgeyB0aGlzLT5p
bml0KF9fc2IpOyB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5iYXNpY19p
b3MoKSB7IH0NCg0KDQogICAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+Kg0KICAgICAgdGllKCkgY29uc3QNCiAgICAgIHsgcmV0
dXJuIF9NX3RpZTsgfQ0KDQogICAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+Kg0KICAgICAgdGllKGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiogX190aWVzdHIpDQogICAgICB7DQogICAgICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV90aWU7
DQogICAgICAgIF9NX3RpZSA9IF9fdGllc3RyOw0KICAgICAgICByZXR1cm4g
X19vbGQ7DQogICAgICB9DQoNCiAgICAgIGlubGluZSBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPioNCiAgICAgIHJkYnVmKCkgY29uc3QNCiAg
ICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1ZjsgfQ0KDQogICAgICBiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioNCiAgICAgIHJkYnVmKGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsNCg0KICAgICAg
YmFzaWNfaW9zJg0KICAgICAgY29weWZtdChjb25zdCBiYXNpY19pb3MmIF9f
cmhzKTsNCg0KICAgICAgaW5saW5lIGNoYXJfdHlwZQ0KICAgICAgZmlsbCgp
IGNvbnN0DQogICAgICB7IHJldHVybiBfTV9maWxsOyB9DQoNCiAgICAgIGlu
bGluZSBjaGFyX3R5cGUNCiAgICAgIGZpbGwoY2hhcl90eXBlIF9fY2gpDQog
ICAgICB7DQogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IF9NX2ZpbGw7DQog
ICAgICAgIF9NX2ZpbGwgPSBfX2NoOw0KICAgICAgICByZXR1cm4gX19vbGQ7
DQogICAgICB9DQoNCg0KICAgICAgbG9jYWxlDQogICAgICBpbWJ1ZShjb25z
dCBsb2NhbGUmIF9fbG9jKTsNCg0KICAgICAgY2hhcg0KICAgICAgbmFycm93
KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0Ow0KDQogICAg
ICBjaGFyX3R5cGUNCiAgICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdDsNCg0K
ICAgIHByb3RlY3RlZDoNCg0KICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFz
ZSgpDQogICAgICB7IH0NCg0KICAgICAgdm9pZA0KICAgICAgaW5pdChiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7DQoNCiAgICAg
IGJvb2wNCiAgICAgIF9NX2NoZWNrX2ZhY2V0KGNvbnN0IGxvY2FsZTo6ZmFj
ZXQqIF9fZikNCiAgICAgIHsNCiAgICAgICAgYm9vbCBfX3JldCA9IGZhbHNl
Ow0KICAgICAgICBpZiAoX19mKQ0KICAgICAgICAgIF9fcmV0ID0gdHJ1ZTsN
CiAgICAgICAgZWxzZQ0KICAgICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsN
CiAgICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgICAgfQ0KDQogICAgICB2b2lk
DQogICAgICBfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYyk7
DQogICAgfTsNCn0NCg0KDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLnRjYyIgMSAzDQojIDMzICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19p
b3MudGNjIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPioNCiAgICBiYXNpY19pb3M8X0NoYXJU
LCBfVHJhaXRzPjo6cmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4qIF9fc2IpDQogICAgew0KICAgICAgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fc3RyZWFtYnVmOw0KICAgICAg
X01fc3RyZWFtYnVmID0gX19zYjsNCiAgICAgIHRoaXMtPmNsZWFyKCk7DQog
ICAgICByZXR1cm4gX19vbGQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pb3M8
X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJh
aXRzPjo6Y29weWZtdChjb25zdCBiYXNpY19pb3MmIF9fcmhzKQ0KICAgIHsN
Cg0KDQoNCg0KICAgICAgX1dvcmRzKiBfX3dvcmRzID0gKF9fcmhzLl9NX3dv
cmRfbGltaXQgPD0gX1NfbG9jYWxfd29yZHMpID8NCiAgICAgICAgX01fd29y
ZF9hcnJheSA6IG5ldyBfV29yZHNbX19yaHMuX01fd29yZF9saW1pdF07DQoj
IDYzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9i
YXNpY19pb3MudGNjIiAzDQogICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYiA9
IF9fcmhzLl9NX2NhbGxiYWNrczsNCiAgICAgIGlmIChfX2NiKQ0KICAgICAg
ICBfX2NiLT5fTV9hZGRfcmVmZXJlbmNlKCk7DQogICAgICBfTV9jYWxsX2Nh
bGxiYWNrcyhlcmFzZV9ldmVudCk7DQogICAgICBpZiAoX01fd29yZHMgIT0g
X01fd29yZF9hcnJheSkNCiAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmRzOw0K
ICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsNCg0KICAgICAgX01fY2Fs
bGJhY2tzID0gX19jYjsNCiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8
IF9fcmhzLl9NX3dvcmRfbGltaXQ7ICsrX19pKQ0KICAgICAgICBfX3dvcmRz
W19faV0gPSBfX3Jocy5fTV93b3Jkc1tfX2ldOw0KICAgICAgaWYgKF9NX3dv
cmRzICE9IF9NX3dvcmRfYXJyYXkpDQogICAgICAgIGRlbGV0ZSBbXSBfTV93
b3JkczsNCiAgICAgIF9NX3dvcmRzID0gX193b3JkczsNCiAgICAgIF9NX3dv
cmRfbGltaXQgPSBfX3Jocy5fTV93b3JkX2xpbWl0Ow0KDQogICAgICB0aGlz
LT5mbGFncyhfX3Jocy5mbGFncygpKTsNCiAgICAgIHRoaXMtPndpZHRoKF9f
cmhzLndpZHRoKCkpOw0KICAgICAgdGhpcy0+cHJlY2lzaW9uKF9fcmhzLnBy
ZWNpc2lvbigpKTsNCiAgICAgIHRoaXMtPnRpZShfX3Jocy50aWUoKSk7DQog
ICAgICB0aGlzLT5maWxsKF9fcmhzLmZpbGwoKSk7DQoNCiAgICAgIHRoaXMt
PmV4Y2VwdGlvbnMoX19yaHMuZXhjZXB0aW9ucygpKTsNCg0KICAgICAgX01f
Y2FsbF9jYWxsYmFja3MoY29weWZtdF9ldmVudCk7DQogICAgICByZXR1cm4g
KnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBjaGFyDQogICAgYmFzaWNfaW9zPF9D
aGFyVCwgX1RyYWl0cz46Om5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9f
ZGZhdWx0KSBjb25zdA0KICAgIHsgcmV0dXJuIF9NX2lvc19mY3R5cGUtPm5h
cnJvdyhfX2MsIF9fZGZhdWx0KTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBfQ2hhclQNCiAgICBi
YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6d2lkZW4oY2hhciBfX2MpIGNv
bnN0DQogICAgeyByZXR1cm4gX01faW9zX2ZjdHlwZS0+d2lkZW4oX19jKTsg
fQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPg0KICAgIGxvY2FsZQ0KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9U
cmFpdHM+OjppbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQ0KICAgIHsNCiAg
ICAgIGxvY2FsZSBfX29sZCh0aGlzLT5nZXRsb2MoKSk7DQogICAgICBpb3Nf
YmFzZTo6aW1idWUoX19sb2MpOw0KICAgICAgX01fY2FjaGVfZmFjZXRzKF9f
bG9jKTsNCiAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICE9IDApDQogICAgICAg
IHRoaXMtPnJkYnVmKCktPnB1YmltYnVlKF9fbG9jKTsNCiAgICAgIHJldHVy
biBfX29sZDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHZvaWQNCiAgICBiYXNpY19pb3M8
X0NoYXJULCBfVHJhaXRzPjo6aW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPiogX19zYikNCiAgICB7DQoNCiAgICAgIGlvc19iYXNlOjpf
TV9pbml0KCk7DQogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xvY2Fs
ZSk7DQogICAgICBfTV90aWUgPSAwOw0KICAgICAgX01fZmlsbCA9IHRoaXMt
PndpZGVuKCcgJyk7DQogICAgICBfTV9leGNlcHRpb24gPSBnb29kYml0Ow0K
ICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsNCiAgICAgIF9NX3N0cmVhbWJ1
Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0Ow0KICAgIH0NCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
DQogICAgdm9pZA0KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpf
TV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7DQog
ICAgICBpZiAoaGFzX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19sb2MpKQ0KICAg
ICAgICBfTV9pb3NfZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+
KF9fbG9jKTsNCg0KICAgICAgaWYgKGhhc19mYWNldDxfX251bXB1dF90eXBl
PihfX2xvYykpDQogICAgICAgIF9NX2ZudW1wdXQgPSAmdXNlX2ZhY2V0PF9f
bnVtcHV0X3R5cGU+KF9fbG9jKTsNCiAgICAgIGlmIChoYXNfZmFjZXQ8X19u
dW1nZXRfdHlwZT4oX19sb2MpKQ0KICAgICAgICBfTV9mbnVtZ2V0ID0gJnVz
ZV9mYWNldDxfX251bWdldF90eXBlPihfX2xvYyk7DQogICAgfQ0KfQ0KIyAy
MTQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jh
c2ljX2lvcy5oIiAyIDMNCiMgNDcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzDQojIDQwICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5o
IiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvc3RkX2xpbWl0cy5oIiAxIDMN
CiMgNDUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9zcGFy
Yy1zdW4tc29sYXJpczIuNy9iaXRzL3N0ZF9saW1pdHMuaCIgMw0KIyAxICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNv
bGFyaXMyLjcvYml0cy9jKytjb25maWcuaCIgMSAzDQojIDQ2ICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvc3BhcmMtc3VuLXNvbGFyaXMy
LjcvYml0cy9zdGRfbGltaXRzLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Zsb2F0LmgiIDEgMw0K
IyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NmbG9hdC5oIiAzDQojIDEgIi91c3IvaW5jbHVkZS9mbG9hdC5oIiAx
IDMgNA0KIyAxNiAiL3Vzci9pbmNsdWRlL2Zsb2F0LmgiIDMgNA0KI3ByYWdt
YSBpZGVudCAiQCgjKWZsb2F0LmgJMS4xNQk5Ny8xMS8yMiBTTUkiDQoNCg0K
ZXh0ZXJuICJDIiB7DQoNCg0KDQoNCg0KZXh0ZXJuIGludCBfX2ZsdF9yb3Vu
ZHModm9pZCk7DQojIDk3ICIvdXNyL2luY2x1ZGUvZmxvYXQuaCIgMyA0DQp9
DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY2Zsb2F0LmgiIDIgMw0KIyA0NyAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvc3Rk
X2xpbWl0cy5oIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZCB7DQoNCiAgICBlbnVt
IGZsb2F0X3JvdW5kX3N0eWxlIHsNCiAgICAgICAgcm91bmRfaW5kZXRlcm1p
bmF0ZSA9IC0xLA0KICAgICAgICByb3VuZF90b3dhcmRfemVybyA9IDAsDQog
ICAgICAgIHJvdW5kX3RvX25lYXJlc3QgPSAxLA0KICAgICAgICByb3VuZF90
b3dhcmRfaW5maW5pdHkgPSAyLA0KICAgICAgICByb3VuZF90b3dhcmRfbmVn
X2luZmluaXR5ID0gMw0KICAgIH07DQoNCiAgICBlbnVtIGZsb2F0X2Rlbm9y
bV9zdHlsZSB7DQogICAgICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEs
DQogICAgICAgIGRlbm9ybV9hYnNlbnQgPSAwLA0KICAgICAgICBkZW5vcm1f
cHJlc2VudCA9IDENCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPiBzdHJ1Y3QgbnVtZXJpY19saW1pdHMgew0KICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IGZhbHNlOw0KDQogICAgICAg
IHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxfVHA+KDApOyB9DQogICAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3co
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9DQoNCiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAwOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0czEwID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNv
bnN0IGludCByYWRpeCA9IDA7DQoNCiAgICAgICAgc3RhdGljIF9UcCBlcHNp
bG9uKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9
DQogICAgICAgIHN0YXRpYyBfVHAgcm91bmRfZXJyb3IoKSB0aHJvdygpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0NCg0KICAgICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAgICBzdGF0
aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g
ZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5
bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAg
ICAgIHN0YXRpYyBfVHAgaW5maW5pdHkoKSB0aHJvdygpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PF9UcD4oMCk7IH0NCiAgICAgICAgc3RhdGljIF9UcCBxdWll
dF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7
IH0NCiAgICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3co
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9DQogICAgICAgIHN0
YXRpYyBfVHAgZGVub3JtX21pbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8X1RwPigwKTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2llYzU1OSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19ib3VuZGVkID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX21vZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90
b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPiBfVHAgX19saW1pdHNfaW5maW5pdHkoKTsNCiAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19xdWlldF9OYU4oKTsNCiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19zaWduYWxpbmdf
TmFOKCk7DQogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1p
dHNfZGVub3JtX21pbigpOw0KDQogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVt
ZXJpY19saW1pdHM8Ym9vbD4gew0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zcGVjaWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIGJv
b2wgbWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBmYWxzZTsgfQ0K
ICAgICAgICBzdGF0aWMgYm9vbCBtYXgoKSB0aHJvdygpDQogICAgICAgIHsg
cmV0dXJuIHRydWU7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0cyA9IDg7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg
PSAyOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBm
YWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9
IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0g
dHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQog
ICAgICAgIHN0YXRpYyBib29sIGVwc2lsb24oKSB0aHJvdygpDQogICAgICAg
IHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIGJvb2wgcm91bmRfZXJy
b3IoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0K
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs
c2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf
TmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5v
cm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0K
DQogICAgICAgIHN0YXRpYyBib29sIGluZmluaXR5KCkgdGhyb3coKQ0KICAg
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPigwKTsgfQ0KICAgICAg
ICBzdGF0aWMgYm9vbCBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9DQogICAgICAgIHN0YXRp
YyBib29sIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9DQogICAgICAgIHN0YXRpYyBi
b29sIGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGJvb2w+KDApOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX21vZHVsbyA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRf
dG93YXJkX3plcm87DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPD4gc3RydWN0
IG51bWVyaWNfbGltaXRzPGNoYXI+IHsNCiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICAgIHN0YXRp
YyBjaGFyIG1pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gKC0xMjgp
OyB9DQogICAgICAgIHN0YXRpYyBjaGFyIG1heCgpIHRocm93KCkNCiAgICAg
ICAgeyByZXR1cm4gMTI3OyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMgPSA3Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
czEwID0gMjsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk
ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdl
ciA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0
ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7
DQogICAgICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpDQogICAg
ICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIGNoYXIgcm91bmRf
ZXJyb3IoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0g
ZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxp
bmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k
ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl
Ow0KDQogICAgICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQ0K
ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQ0KICAg
ICAgICBzdGF0aWMgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9DQogICAgICAgIHN0
YXRpYyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9DQogICAgICAgIHN0YXRp
YyBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGNoYXI+KDApOyB9DQoNCiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBz
dGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy
b3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8PiBz
dHJ1Y3QgbnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+IHsNCiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQog
ICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtaW4oKSB0aHJvdygpDQogICAg
ICAgIHsgcmV0dXJuICgtMTI4KTsgfQ0KICAgICAgICBzdGF0aWMgc2lnbmVk
IGNoYXIgbWF4KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAxMjc7IH0N
Cg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7DQogICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOw0KICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsNCiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOw0KICAgICAgICBz
dGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIHNp
Z25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu
IDA7IH0NCiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9y
KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQoNCiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgICBz
dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05h
TiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt
X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0K
ICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygp
DQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigw
KTsgfQ0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkg
dGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQg
Y2hhcj4oMCk7IH0NCiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHNpZ25lZCBjaGFyPigwKTsgfQ0KICAgICAgICBzdGF0aWMgc2lnbmVk
IGNoYXIgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9DQoNCiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAg
ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5
bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxh
dGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4gew0K
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy
dWU7DQoNCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWluKCkgdGhy
b3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQogICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4g
MjU1OyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA4
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsNCiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7DQog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOw0K
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7DQog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAgICBz
dGF0aWMgdW5zaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3coKQ0KICAgICAg
ICB7IHJldHVybiAwOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFy
IHJvdW5kX2Vycm9yKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9
DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g
MDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g
MDsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkg
PSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0
X05hTiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
c2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg
PSBmYWxzZTsNCg0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmZp
bml0eSgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oMCk7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQ0KICAgICAgICBzdGF0
aWMgdW5zaWduZWQgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQ0KICAg
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsg
fQ0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBkZW5vcm1fbWluKCkg
dGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPigwKTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2llYzU1OSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfbW9kdWxvID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0cmFwcyA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp
bnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRf
emVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJp
Y19saW1pdHM8c2hvcnQ+IHsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyBzaG9y
dCBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuICgtMzI3NjctMSk7
IH0NCiAgICAgICAgc3RhdGljIHNob3J0IG1heCgpIHRocm93KCkNCiAgICAg
ICAgeyByZXR1cm4gMzI3Njc7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0cyA9IDE1Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0czEwID0gNDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln
bmVkID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50
ZWdlciA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4
YWN0ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9
IDI7DQogICAgICAgIHN0YXRpYyBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQ0K
ICAgICAgICB7IHJldHVybiAwOyB9DQogICAgICAgIHN0YXRpYyBzaG9ydCBy
b3VuZF9lcnJvcigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0K
DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsN
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7
DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsN
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7
DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0g
ZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O
YU4gPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3Np
Z25hbGluZ19OYU4gPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZs
b2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsN
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g
ZmFsc2U7DQoNCiAgICAgICAgc3RhdGljIHNob3J0IGluZmluaXR5KCkgdGhy
b3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7
IH0NCiAgICAgICAgc3RhdGljIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkN
CiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KDApOyB9DQog
ICAgICAgIHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQ0K
ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0NCiAg
ICAgICAgc3RhdGljIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQ0KDQogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOw0KICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7DQoN
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOw0KICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz
ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv
dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCg0KICAg
IHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNo
b3J0PiB7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxp
emVkID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQg
bWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQogICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtYXgoKSB0aHJvdygpDQogICAgICAg
IHsgcmV0dXJuIDY1NTM1OyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMgPSAxNjsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp
dHMxMCA9IDQ7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25l
ZCA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl
Z2VyID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh
Y3QgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g
MjsNCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGVwc2lsb24oKSB0
aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQ0KICAgICAg
ICB7IHJldHVybiAwOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5fZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudDEwID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1h
eF9leHBvbmVudDEwID0gMDsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g
PSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAgICBzdGF0aWMgdW5z
aWduZWQgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpDQogICAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQ0KICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQ0K
ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4o
MCk7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHNpZ25hbGlu
Z19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIHNob3J0PigwKTsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9DQoNCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOw0KDQog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsNCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7
DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu
ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOw0KICAgIH07DQoNCiAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+IHsNCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0K
DQogICAgICAgIHN0YXRpYyBpbnQgbWluKCkgdGhyb3coKQ0KICAgICAgICB7
IHJldHVybiAoLTIxNDc0ODM2NDctMSk7IH0NCiAgICAgICAgc3RhdGljIGlu
dCBtYXgoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDc7
IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOw0K
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsNCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAg
ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICAgIHN0YXRp
YyBpbnQgZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsg
fQ0KICAgICAgICBzdGF0aWMgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQ0K
ICAgICAgICB7IHJldHVybiAwOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0K
ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k
ZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAgICBzdGF0
aWMgaW50IGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyBpbnQgcXVp
ZXRfTmFOKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyBpbnQgc2lnbmFsaW5nX05h
TigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
PigwKTsgfQ0KICAgICAgICBzdGF0aWMgaW50IGRlbm9ybV9taW4oKSB0aHJv
dygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0N
Cg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVl
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1
ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFs
c2U7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg
PSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0
eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsN
Cg0KICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2ln
bmVkIGludD4gew0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVj
aWFsaXplZCA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGlu
dCBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0NCiAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpDQogICAgICAg
IHsgcmV0dXJuICgyMTQ3NDgzNjQ3ICogMlUgKyAxKTsgfQ0KDQogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7DQogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNv
bnN0IGludCByYWRpeCA9IDI7DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBp
bnQgZXBzaWxvbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMDsgfQ0K
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHJvdW5kX2Vycm9yKCkgdGhy
b3coKQ0KICAgICAgICB7IHJldHVybiAwOyB9DQoNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsNCg0KICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0KICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh
bHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl
IGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgaW50IGluZmluaXR5KCkgdGhyb3coKQ0KICAg
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9
DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhy
b3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBp
bnQ+KDApOyB9DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2lnbmFs
aW5nX05hTigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50PigwKTsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaW50IGRlbm9ybV9taW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0NCg0KICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOw0KICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsNCiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsNCg0KICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7DQogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAg
ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5
bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAgdGVtcGxh
dGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZz4gew0KICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7DQoNCiAg
ICAgICAgc3RhdGljIGxvbmcgbWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJl
dHVybiAoLTIxNDc0ODM2NDdMLTEpOyB9DQogICAgICAgIHN0YXRpYyBsb25n
IG1heCgpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0N0w7
IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOw0K
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsNCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAgICAg
ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICAgIHN0YXRp
YyBsb25nIGVwc2lsb24oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7
IH0NCiAgICAgICAgc3RhdGljIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygp
DQogICAgICAgIHsgcmV0dXJuIDA7IH0NCg0KICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbl9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOw0KICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudCA9IDA7DQogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOw0KDQogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOw0KICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7DQogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7
DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz
X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOw0KDQogICAgICAgIHN0
YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQ0KICAgICAgICBzdGF0aWMgbG9u
ZyBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGxvbmc+KDApOyB9DQogICAgICAgIHN0YXRpYyBsb25nIHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGxvbmc+KDApOyB9DQogICAgICAgIHN0YXRpYyBsb25nIGRlbm9ybV9t
aW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxv
bmc+KDApOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj
NTU5ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91
bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v
ZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy
YXBzID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l
c3NfYmVmb3JlID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv
Ow0KICAgIH07DQoNCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xp
bWl0czx1bnNpZ25lZCBsb25nPiB7DQogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMg
dW5zaWduZWQgbG9uZyBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJu
IDA7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4KCkgdGhy
b3coKQ0KICAgICAgICB7IHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVUwgKyAx
KTsgfQ0KDQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7
DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Ow0KICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsNCiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7DQog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsNCiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7DQogICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBsb25nIGVwc2lsb24oKSB0aHJvdygpDQogICAgICAg
IHsgcmV0dXJuIDA7IH0NCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg
cm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDA7IH0N
Cg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7
DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7
DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAw
Ow0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9
IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf
TmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19z
aWduYWxpbmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7
DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9
IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmlu
aXR5KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPigwKTsgfQ0KICAgICAgICBzdGF0aWMgdW5zaWduZWQg
bG9uZyBxdWlldF9OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9DQogICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpDQogICAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9
DQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9taW4oKSB0
aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KDApOyB9DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aWVjNTU5ID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
Ym91bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X21vZHVsbyA9IHRydWU7DQoNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dHJhcHMgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55
bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGZs
b2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3pl
cm87DQogICAgfTsNCg0KICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNf
bGltaXRzPGZsb2F0PiB7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NwZWNpYWxpemVkID0gdHJ1ZTsNCg0KICAgICAgICBzdGF0aWMgZmxvYXQg
bWluKCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiAxLjE3NTQ5NDM1MUUt
MzhGOyB9DQogICAgICAgIHN0YXRpYyBmbG9hdCBtYXgoKSB0aHJvdygpDQog
ICAgICAgIHsgcmV0dXJuIDMuNDAyODIzNDY2RSszOEY7IH0NCg0KICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDI0Ow0KICAgICAgICBzdGF0
aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNzsNCiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsNCiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHJhZGl4ID0gMjsNCiAgICAgICAgc3RhdGljIGZsb2F0IGVw
c2lsb24oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDEuMTkyMDkyODk2
RS0wN0Y7IH0NCiAgICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9yKCkg
dGhyb3coKQ0KICAgICAgICB7IHJldHVybiAxLjBmOyB9DQoNCiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTI1Ow0KICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTM3Ow0KICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEyODsNCiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4Ow0K
DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh
bHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO
ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
YWxpbmdfTmFOID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7DQog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOw0KDQogICAgICAgIHN0YXRpYyBmbG9hdCBpbmZpbml0eSgpIHRocm93
KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9
DQogICAgICAgIHN0YXRpYyBmbG9hdCBxdWlldF9OYU4oKSB0aHJvdygpDQog
ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PigwKTsgfQ0KICAg
ICAgICBzdGF0aWMgZmxvYXQgc2lnbmFsaW5nX05hTigpIHRocm93KCkNCiAg
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9DQogICAg
ICAgIHN0YXRpYyBmbG9hdCBkZW5vcm1fbWluKCkgdGhyb3coKQ0KICAgICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0NCg0KICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsNCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7DQogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOw0KDQog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7DQogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNl
Ow0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91
bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsNCiAgICB9Ow0KDQogICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZG91YmxlPiB7DQog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1
ZTsNCg0KICAgICAgICBzdGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkNCiAg
ICAgICAgeyByZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0RS0zMDg7IH0NCiAg
ICAgICAgc3RhdGljIGRvdWJsZSBtYXgoKSB0aHJvdygpDQogICAgICAgIHsg
cmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4OyB9DQoNCiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA1MzsNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBkaWdpdHMxMCA9IDE1Ow0KICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcmFkaXggPSAyOw0KICAgICAgICBzdGF0aWMgZG91YmxlIGVw
c2lsb24oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDIuMjIwNDQ2MDQ5
MjUwMzEzMUUtMTY7IH0NCiAgICAgICAgc3RhdGljIGRvdWJsZSByb3VuZF9l
cnJvcigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMS4wOyB9DQoNCiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTAyMTsN
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0z
MDc7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0g
MTAyNDsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQx
MCA9IDMwODsNCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5m
aW5pdHkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3F1aWV0X05hTiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1f
YWJzZW50Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt
X2xvc3MgPSBmYWxzZTsNCg0KICAgICAgICBzdGF0aWMgZG91YmxlIGluZmlu
aXR5KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxk
b3VibGU+KDApOyB9DQogICAgICAgIHN0YXRpYyBkb3VibGUgcXVpZXRfTmFO
KCkgdGhyb3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3Vi
bGU+KDApOyB9DQogICAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFsaW5nX05h
TigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91
YmxlPigwKTsgfQ0KICAgICAgICBzdGF0aWMgZG91YmxlIGRlbm9ybV9taW4o
KSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJs
ZT4oMCk7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1
NTkgPSBmYWxzZTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91
bmRlZCA9IHRydWU7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v
ZHVsbyA9IGZhbHNlOw0KDQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy
YXBzID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu
ZXNzX2JlZm9yZSA9IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxv
YXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy
bzsNCiAgICB9Ow0KDQogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19s
aW1pdHM8bG9uZyBkb3VibGU+IHsNCiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOw0KDQogICAgICAgIHN0YXRpYyBs
b25nIGRvdWJsZSBtaW4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIDMu
MzYyMTAzMTQzMTEyMDkzNTA2MjYyNjc3ODE3MzIxNzUyNjAzRS00OTMyTDsg
fQ0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbWF4KCkgdGhyb3coKQ0K
ICAgICAgICB7IHJldHVybiAxLjE4OTczMTQ5NTM1NzIzMTc2NTA4NTc1OTMy
NjYyODAwNzAxNkUrNDkzMkw7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0cyA9IDExMzsNCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMxMCA9IDM0Ow0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
aWduZWQgPSB0cnVlOw0KICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p
bnRlZ2VyID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2V4YWN0ID0gZmFsc2U7DQogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFk
aXggPSAyOw0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZXBzaWxvbigp
IHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gMS45MjU5Mjk5NDQzODcyMzU4
NTMwNTU5Nzc5NDI1ODQ5MjczMTlFLTM0TDsgfQ0KICAgICAgICBzdGF0aWMg
bG9uZyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpDQogICAgICAgIHsg
cmV0dXJuIDEuMEw7IH0NCg0KICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudCA9IC0xNjM4MTsNCiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5fZXhwb25lbnQxMCA9IC00OTMxOw0KICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudCA9IDE2Mzg0Ow0KICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudDEwID0gNDkzMjsNCg0KICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsNCiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOw0K
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOw0KICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0
eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Ow0KICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsNCg0KICAg
ICAgICBzdGF0aWMgbG9uZyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpDQog
ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPigwKTsg
fQ0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcXVpZXRfTmFOKCkgdGhy
b3coKQ0KICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRvdWJs
ZT4oMCk7IH0NCiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHNpZ25hbGlu
Z19OYU4oKSB0aHJvdygpDQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PGxvbmcgZG91YmxlPigwKTsgfQ0KICAgICAgICBzdGF0aWMgbG9uZyBkb3Vi
bGUgZGVub3JtX21pbigpIHRocm93KCkNCiAgICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8bG9uZyBkb3VibGU+KDApOyB9DQoNCiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7DQogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOw0KICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsNCg0KICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOw0KICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsNCiAgICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl
ID0gcm91bmRfdG93YXJkX3plcm87DQogICAgfTsNCg0KfQ0KIyA0MSAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJl
YW0uaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3Mg
YmFzaWNfaXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hh
clQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlw
ZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7DQogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOw0K
ICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KDQoNCiAgICAg
IHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19z
dHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFy
VCwgX1RyYWl0cz4gX19pb3NfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAg
ICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0
cz4gX19pc3RyZWFtYnVmX2l0ZXI7DQogICAgICB0eXBlZGVmIG51bV9nZXQ8
X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsNCiAg
ICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7DQoNCiAg
ICBwcm90ZWN0ZWQ6DQoNCiAgICAgIHN0cmVhbXNpemUgX01fZ2NvdW50Ow0K
DQogICAgcHVibGljOg0KDQogICAgICBleHBsaWNpdA0KICAgICAgYmFzaWNf
aXN0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQ0KICAgICAgew0KICAg
ICAgICB0aGlzLT5pbml0KF9fc2IpOw0KICAgICAgICBfTV9nY291bnQgPSBz
dHJlYW1zaXplKDApOw0KICAgICAgfQ0KDQogICAgICB2aXJ0dWFsDQogICAg
ICB+YmFzaWNfaXN0cmVhbSgpDQogICAgICB7IF9NX2djb3VudCA9IHN0cmVh
bXNpemUoMCk7IH0NCg0KDQogICAgICBjbGFzcyBzZW50cnk7DQogICAgICBm
cmllbmQgY2xhc3Mgc2VudHJ5Ow0KDQoNCg0KICAgICAgX19pc3RyZWFtX3R5
cGUmDQogICAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYp
KF9faXN0cmVhbV90eXBlJikpOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYN
CiAgICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190
eXBlJikpOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJh
dG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSk7DQoNCg0KICAg
ICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBvcGVyYXRvcj4+KGJvb2wmIF9f
bik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I+
PihzaG9ydCYgX19uKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAg
ICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0JiBfX24pOw0KDQogICAgICBf
X2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4oaW50JiBfX24pOw0K
DQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4odW5z
aWduZWQgaW50JiBfX24pOw0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAg
ICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKTsNCg0KICAgICAgX19pc3RyZWFt
X3R5cGUmDQogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbik7
DQojIDEyNiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2lzdHJlYW0uaCIgMw0KICAgICAgX19pc3RyZWFtX3R5cGUmDQog
ICAgICBvcGVyYXRvcj4+KGZsb2F0JiBfX2YpOw0KDQogICAgICBfX2lzdHJl
YW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX2YpOw0KDQog
ICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPj4obG9uZyBk
b3VibGUmIF9fZik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAg
b3BlcmF0b3I+Pih2b2lkKiYgX19wKTsNCg0KICAgICAgX19pc3RyZWFtX3R5
cGUmDQogICAgICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Ip
Ow0KDQoNCiAgICAgIGlubGluZSBzdHJlYW1zaXplDQogICAgICBnY291bnQo
dm9pZCkgY29uc3QNCiAgICAgIHsgcmV0dXJuIF9NX2djb3VudDsgfQ0KDQog
ICAgICBpbnRfdHlwZQ0KICAgICAgZ2V0KHZvaWQpOw0KDQogICAgICBfX2lz
dHJlYW1fdHlwZSYNCiAgICAgIGdldChjaGFyX3R5cGUmIF9fYyk7DQoNCiAg
ICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgZ2V0KGNoYXJfdHlwZSogX19z
LCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOw0KDQogICAg
ICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmDQogICAgICBnZXQoY2hhcl90eXBl
KiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgICAgeyByZXR1cm4gZ2V0KF9f
cywgX19uLCB0aGlzLT53aWRlbignXG4nKSk7IH0NCg0KICAgICAgX19pc3Ry
ZWFtX3R5cGUmDQogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYiwg
Y2hhcl90eXBlIF9fZGVsaW0pOw0KDQogICAgICBpbmxpbmUgX19pc3RyZWFt
X3R5cGUmDQogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYikNCiAg
ICAgIHsgcmV0dXJuIGdldChfX3NiLCB0aGlzLT53aWRlbignXG4nKSk7IH0N
Cg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICBnZXRsaW5lKGNoYXJf
dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0p
Ow0KDQogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmDQogICAgICBnZXRs
aW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICAgIHsg
cmV0dXJuIGdldGxpbmUoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsg
fQ0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIGlnbm9yZShzdHJl
YW1zaXplIF9fbiA9IDEsIGludF90eXBlIF9fZGVsaW0gPSB0cmFpdHNfdHlw
ZTo6ZW9mKCkpOw0KDQogICAgICBpbnRfdHlwZQ0KICAgICAgcGVlayh2b2lk
KTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQogICAgICByZWFkKGNoYXJf
dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7DQoNCiAgICAgIHN0cmVhbXNp
emUNCiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl
IF9fbik7DQoNCiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgcHV0YmFj
ayhjaGFyX3R5cGUgX19jKTsNCg0KICAgICAgX19pc3RyZWFtX3R5cGUmDQog
ICAgICB1bmdldCh2b2lkKTsNCg0KICAgICAgaW50DQogICAgICBzeW5jKHZv
aWQpOw0KDQogICAgICBwb3NfdHlwZQ0KICAgICAgdGVsbGcodm9pZCk7DQoN
CiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgc2Vla2cocG9zX3R5cGUp
Ow0KDQogICAgICBfX2lzdHJlYW1fdHlwZSYNCiAgICAgIHNlZWtnKG9mZl90
eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7DQoNCiAgICBwcml2YXRlOg0KDQoN
CiAgICAgIF9faXN0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I9KGNvbnN0
IF9faXN0cmVhbV90eXBlJik7DQoNCiAgICAgIGJhc2ljX2lzdHJlYW0oY29u
c3QgX19pc3RyZWFtX3R5cGUmKTsNCg0KICAgIH07DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNz
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5DQogICAg
ew0KICAgIHB1YmxpYzoNCiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNf
dHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsNCiAgICAgIHR5cGVkZWYgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0K
ICAgICAgdHlwZWRlZiBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9f
Y3R5cGVfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6
aW50X3R5cGUgX19pbnRfdHlwZTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAg
IHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMs
IGJvb2wgX19ub3NraXB3cyA9IGZhbHNlKTsNCg0KICAgICAgb3BlcmF0b3Ig
Ym9vbCgpIHsgcmV0dXJuIF9NX29rOyB9DQoNCiAgICBwcml2YXRlOg0KICAg
ICAgYm9vbCBfTV9vazsNCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpOw0K
DQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh
bTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJl
YW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXImIF9fYykN
CiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIm
PihfX2MpKTsgfQ0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAg
YmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcj4+
KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBj
aGFyJiBfX2MpDQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyJj4oX19jKSk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcyk7DQoNCiAg
dGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPGNo
YXIsX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNo
YXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykNCiAgICB7
IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3Mp
KTsgfQ0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNf
aXN0cmVhbTxjaGFyLF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNf
aXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciogX19z
KQ0KICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KF9fcykpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW0N
CiAgICA6IHB1YmxpYyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4s
DQogICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
DQogICAgew0KICAgIHB1YmxpYzoNCg0KICAgICAgdHlwZWRlZiBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7DQogICAg
ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29z
dHJlYW1fdHlwZTsNCg0KICAgICAgZXhwbGljaXQNCiAgICAgIGJhc2ljX2lv
c3RyZWFtKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Ni
KQ0KICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX3NiKSwgX19vc3RyZWFtX3R5
cGUoX19zYikNCiAgICAgIHsgfQ0KDQogICAgICB2aXJ0dWFsDQogICAgICB+
YmFzaWNfaW9zdHJlYW0oKSB7IH0NCiAgICB9Ow0KDQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICB3cyhiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMpOw0KfQ0KDQoNCg0KDQojIDEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJl
YW0udGNjIiAxIDMNCiMgMzIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
L2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAzDQojIDEgIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAz
DQojIDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfbG9jYWxlLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMSAzDQojIDQwICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbG9j
YWxlLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDEgMw0KIyA0MSAiL2hvbWUv
bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5o
IiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDEgMw0KIyAzNSAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50
Y2MiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2NlcnJuby5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZXJybm8uaCIgMw0KIyAx
ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzIDQNCiMgMTEgIi91c3IvaW5j
bHVkZS9lcnJuby5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIyllcnJuby5o
CTEuMTUJOTgvMDMvMDIgU01JIg0KDQoNCg0KDQoNCiMgMSAiL3Vzci9pbmNs
dWRlL3N5cy9lcnJuby5oIiAxIDMgNA0KIyAxMSAiL3Vzci9pbmNsdWRlL3N5
cy9lcnJuby5oIiAzIDQNCiNwcmFnbWEgaWRlbnQgIkAoIyllcnJuby5oCTEu
MTkJOTgvMDEvMTQgU01JIg0KIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9lcnJu
by5oIiAzIDQNCmV4dGVybiAiQyIgew0KIyAxOTEgIi91c3IvaW5jbHVkZS9z
eXMvZXJybm8uaCIgMyA0DQp9DQojIDE4ICIvdXNyL2luY2x1ZGUvZXJybm8u
aCIgMiAzIDQNCg0KDQpleHRlcm4gIkMiIHsNCiMgMzIgIi91c3IvaW5jbHVk
ZS9lcnJuby5oIiAzIDQNCmV4dGVybiBpbnQgKl9fX2Vycm5vKCk7DQoNCg0K
DQoNCg0KDQp9DQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDIgMw0KIyAzNiAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50
Y2MiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY2xvY2FsZS5oIiAxIDMNCiMgMzggIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbG9jYWxlLmgiIDMN
CiMgMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAxIDMgNA0KIyA5ICIvdXNy
L2luY2x1ZGUvbG9jYWxlLmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKWxv
Y2FsZS5oCTEuMTgJOTgvMDEvMjIgU01JIg0KIyA0NiAiL3Vzci9pbmNsdWRl
L2xvY2FsZS5oIiAzIDQNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJl
X3Rlc3RzLmgiIDEgMyA0DQojIDQ3ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgi
IDIgMyA0DQoNCg0KDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9pbmNsdWRlL2xpYmlu
dGwuaCIgMSAzIDQNCiMgMjAgIi9ob21lL21kZWlsL2Jpbi8uLi9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuNy8zLjAvaW5jbHVkZS9saWJpbnRs
LmgiIDMgNA0KI3ByYWdtYSBpZGVudCAiQCgjKWxpYmludGwuaAkxLjEyCTk3
LzA4LzIwIFNNSSINCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZz
LmgiIDEgMyA0DQojIDIzICIvaG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1s
aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjcvMy4wL2luY2x1ZGUvbGliaW50bC5o
IiAyIDMgNA0KDQoNCmV4dGVybiAiQyIgew0KIyA0NCAiL2hvbWUvbWRlaWwv
YmluLy4uL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi43LzMuMC9p
bmNsdWRlL2xpYmludGwuaCIgMyA0DQpleHRlcm4gY2hhciAqZGNnZXR0ZXh0
KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBpbnQpOw0KZXh0
ZXJuIGNoYXIgKmRnZXR0ZXh0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
KTsNCmV4dGVybiBjaGFyICpnZXR0ZXh0KGNvbnN0IGNoYXIgKik7DQpleHRl
cm4gY2hhciAqdGV4dGRvbWFpbihjb25zdCBjaGFyICopOw0KZXh0ZXJuIGNo
YXIgKmJpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq
KTsNCg0KDQoNCmV4dGVybiBpbnQgd2Rpbml0KHZvaWQpOw0KZXh0ZXJuIGlu
dCB3ZGNoa2luZCh3Y2hhcl90KTsNCmV4dGVybiBpbnQgd2RiaW5kZih3Y2hh
cl90LCB3Y2hhcl90LCBpbnQpOw0KZXh0ZXJuIHdjaGFyX3QgKndkZGVsaW0o
d2NoYXJfdCwgd2NoYXJfdCwgaW50KTsNCmV4dGVybiB3Y2hhcl90IG1jZmls
bGVyKHZvaWQpOw0KZXh0ZXJuIGludCBtY3dyYXAodm9pZCk7DQojIDc4ICIv
aG9tZS9tZGVpbC9iaW4vLi4vbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjcvMy4wL2luY2x1ZGUvbGliaW50bC5oIiAzIDQNCn0NCiMgNTIgIi91
c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzIDQNCg0KDQoNCmV4dGVybiAiQyIg
ew0KDQoNCnN0cnVjdCBsY29udiB7DQogICAgICAgIGNoYXIgKmRlY2ltYWxf
cG9pbnQ7DQogICAgICAgIGNoYXIgKnRob3VzYW5kc19zZXA7DQogICAgICAg
IGNoYXIgKmdyb3VwaW5nOw0KICAgICAgICBjaGFyICppbnRfY3Vycl9zeW1i
b2w7DQogICAgICAgIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsNCiAgICAgICAg
Y2hhciAqbW9uX2RlY2ltYWxfcG9pbnQ7DQogICAgICAgIGNoYXIgKm1vbl90
aG91c2FuZHNfc2VwOw0KICAgICAgICBjaGFyICptb25fZ3JvdXBpbmc7DQog
ICAgICAgIGNoYXIgKnBvc2l0aXZlX3NpZ247DQogICAgICAgIGNoYXIgKm5l
Z2F0aXZlX3NpZ247DQogICAgICAgIGNoYXIgaW50X2ZyYWNfZGlnaXRzOw0K
ICAgICAgICBjaGFyIGZyYWNfZGlnaXRzOw0KICAgICAgICBjaGFyIHBfY3Nf
cHJlY2VkZXM7DQogICAgICAgIGNoYXIgcF9zZXBfYnlfc3BhY2U7DQogICAg
ICAgIGNoYXIgbl9jc19wcmVjZWRlczsNCiAgICAgICAgY2hhciBuX3NlcF9i
eV9zcGFjZTsNCiAgICAgICAgY2hhciBwX3NpZ25fcG9zbjsNCiAgICAgICAg
Y2hhciBuX3NpZ25fcG9zbjsNCn07DQojIDEwMiAiL3Vzci9pbmNsdWRlL2xv
Y2FsZS5oIiAzIDQNCmV4dGVybiBjaGFyICpzZXRsb2NhbGUoaW50LCBjb25z
dCBjaGFyICopOw0KZXh0ZXJuIHN0cnVjdCBsY29udiAqbG9jYWxlY29udih2
b2lkKTsNCg0KDQoNCg0KDQoNCn0NCiMgMzkgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbG9jYWxlLmgiIDIgMw0KDQoN
Cg0KDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdXNpbmcgOjpsY29udjsNCiAg
dXNpbmcgOjpzZXRsb2NhbGU7DQogIHVzaW5nIDo6bG9jYWxlY29udjsNCn0N
CiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMSAzDQoj
IDM4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9s
b2NhbGVfZmFjZXRzLnRjYyIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8u
Li9pbmNsdWRlL2crKy12My9zcGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL3N0
ZF9saW1pdHMuaCIgMSAzDQojIDM5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzDQojIDEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9t
ZW1vcnkuaCIgMSAzDQojIDQwICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzDQojIDEgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRl
ci5oIiAxIDMNCiMgNDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMgMSAiL2hvbWUv
bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5o
IiAxIDMNCiMgNDIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCiMgMSAiL2hvbWUvbWRl
aWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAxIDMNCiMgMzMg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My90eXBlaW5mbyIg
Mw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvZXhj
ZXB0aW9uIiAxIDMNCiMgMzQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
L2crKy12My90eXBlaW5mbyIgMiAzDQoNCmV4dGVybiAiQysrIiB7DQoNCm5h
bWVzcGFjZSBfX2N4eGFiaXYxDQp7DQogIGNsYXNzIF9fY2xhc3NfdHlwZV9p
bmZvOw0KfQ0KIyA1MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
LXYzL3R5cGVpbmZvIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQogIGNsYXNzIHR5
cGVfaW5mbw0KICB7DQogIHB1YmxpYzoNCg0KDQoNCg0KICAgIHZpcnR1YWwg
fnR5cGVfaW5mbygpOw0KDQogIHByaXZhdGU6DQoNCiAgICB0eXBlX2luZm8m
IG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsNCiAgICB0eXBlX2luZm8o
Y29uc3QgdHlwZV9pbmZvJik7DQoNCiAgcHJvdGVjdGVkOg0KICAgIGNvbnN0
IGNoYXIgKl9fbmFtZTsNCg0KICBwcm90ZWN0ZWQ6DQogICAgZXhwbGljaXQg
dHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9fbik6IF9fbmFtZShfX24pIHsgfQ0K
DQogIHB1YmxpYzoNCg0KICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdA0K
ICAgIHsgcmV0dXJuIF9fbmFtZTsgfQ0KIyA4NiAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAzDQogICAgYm9vbCBiZWZv
cmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QNCiAgICB7IHJldHVy
biBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0NCiAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QNCiAgICB7IHJldHVy
biBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9DQoNCiAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QNCiAgICB7IHJl
dHVybiAhb3BlcmF0b3I9PShfX2FyZyk7IH0NCg0KDQogIHB1YmxpYzoNCg0K
ICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNvbnN0Ow0KDQog
ICAgdmlydHVhbCBib29sIF9faXNfZnVuY3Rpb25fcCgpIGNvbnN0Ow0KDQoN
Cg0KDQoNCg0KDQogICAgdmlydHVhbCBib29sIF9fZG9fY2F0Y2goY29uc3Qg
dHlwZV9pbmZvICpfX3Rocl90eXBlLCB2b2lkICoqX190aHJfb2JqLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9fb3V0ZXIpIGNv
bnN0Ow0KDQoNCiAgICB2aXJ0dWFsIGJvb2wgX19kb191cGNhc3QoY29uc3Qg
X19jeHhhYml2MTo6X19jbGFzc190eXBlX2luZm8gKl9fdGFyZ2V0LA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19vYmpfcHRyKSBj
b25zdDsNCiAgfTsNCg0KICBjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBleGNl
cHRpb24NCiAgew0KICBwdWJsaWM6DQogICAgYmFkX2Nhc3QoKSB0aHJvdygp
IHsgfQ0KICAgIHZpcnR1YWwgfmJhZF9jYXN0KCkgdGhyb3coKTsNCiAgfTsN
Cg0KICBjbGFzcyBiYWRfdHlwZWlkIDogcHVibGljIGV4Y2VwdGlvbg0KICB7
DQogIHB1YmxpYzoNCiAgICBiYWRfdHlwZWlkICgpIHRocm93KCkgeyB9DQog
ICAgdmlydHVhbCB+YmFkX3R5cGVpZCAoKSB0aHJvdygpOw0KICB9Ow0KfQ0K
DQp9DQojIDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzDQojIDEgIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMSAz
DQojIDMxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfdmVjdG9yLmgiIDMNCg0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMNCiMgMzQg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0
ZXhjZXB0LmgiIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMw0KIyAzNSAiL2hvbWUv
bWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQu
aCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB2b2lkDQogIF9fdGhy
b3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsNCg0KDQogIHZvaWQNCiAgX190aHJv
d19iYWRfYWxsb2Modm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfYmFk
X2Nhc3Qodm9pZCk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF90eXBlaWQo
dm9pZCk7DQoNCg0KICB2b2lkDQogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29u
c3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfZG9tYWluX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2lu
dmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQog
IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAg
dm9pZA0KICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3Mp
Ow0KDQogIHZvaWQNCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X3JhbmdlX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X292ZXJmbG93
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93
X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQoNCiAgdm9p
ZA0KICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7DQp9
DQojIDMzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfdmVjdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzDQojIDM0
ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
dmVjdG9yLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMSAzDQojIDM1ICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgi
IDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfY29uc3RydWN0LmgiIDEgMw0KIyAzNiAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMN
CiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzDQojIDM3ICIvaG9tZS9tZGVpbC9i
aW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMw0K
IyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfdmVjdG9yLmgiIDEgMw0KIyAzNCAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzDQojIDEgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRv
cl9iYXNlX2Z1bmNzLmgiIDEgMw0KIyAzNSAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMNCiMgMSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3Rl
eGNlcHQuaCIgMSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVk
ZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzDQojIDEgIi9ob21lL21k
ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5o
IiAxIDMNCiMgMzUgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7
DQoNCiAgdm9pZA0KICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7DQoN
Cg0KICB2b2lkDQogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOw0KDQoNCiAg
dm9pZA0KICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOw0KDQogIHZvaWQNCiAg
X190aHJvd19iYWRfdHlwZWlkKHZvaWQpOw0KDQoNCiAgdm9pZA0KICBfX3Ro
cm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7DQoNCiAgdm9pZA0K
ICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQog
IHZvaWQNCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIq
IF9fcyk7DQoNCiAgdm9pZA0KICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190aHJvd19vdXRfb2ZfcmFu
Z2UoY29uc3QgY2hhciogX19zKTsNCg0KICB2b2lkDQogIF9fdGhyb3dfcnVu
dGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQNCiAgX190
aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0KDQogIHZvaWQN
CiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOw0K
DQogIHZvaWQNCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsNCg0KDQogIHZvaWQNCiAgX190aHJvd19pb3NfZmFpbHVyZShj
b25zdCBjaGFyKiBfX3MpOw0KfQ0KIyAzNiAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMNCiMgMSAi
L2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2Vw
dF9jaGVjay5oIiAxIDMNCiMgMzcgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzDQoNCm5hbWVzcGFj
ZSBzdGQNCnsNCiMgNDggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF92ZWN0b3IuaCIgMw0KdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0aWM+DQpjbGFzcyBf
VmVjdG9yX2FsbG9jX2Jhc2Ugew0KcHVibGljOg0KICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9y
X3R5cGUNCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsNCiAgYWxsb2NhdG9y
X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFf
YWxsb2NhdG9yOyB9DQoNCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EpDQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihf
X2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3Rv
cmFnZSgwKQ0KICB7fQ0KDQpwcm90ZWN0ZWQ6DQogIGFsbG9jYXRvcl90eXBl
IF9NX2RhdGFfYWxsb2NhdG9yOw0KICBfVHAqIF9NX3N0YXJ0Ow0KICBfVHAq
IF9NX2ZpbmlzaDsNCiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsNCg0KICBf
VHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pDQogICAgeyByZXR1cm4gX01f
ZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoX19uKTsgfQ0KICB2b2lkIF9NX2Rl
YWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pDQogICAgeyBpZiAoX19w
KSBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgX19uKTsgfQ0K
fTsNCg0KDQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0
b3I+DQpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9y
LCB0cnVlPiB7DQpwdWJsaWM6DQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j
X3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAg
ICAgICAgIGFsbG9jYXRvcl90eXBlOw0KICBhbGxvY2F0b3JfdHlwZSBnZXRf
YWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsg
fQ0KDQogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlw
ZSYpDQogICAgOiBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRf
b2Zfc3RvcmFnZSgwKQ0KICB7fQ0KDQpwcm90ZWN0ZWQ6DQogIF9UcCogX01f
c3RhcnQ7DQogIF9UcCogX01fZmluaXNoOw0KICBfVHAqIF9NX2VuZF9vZl9z
dG9yYWdlOw0KDQogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxf
VHAsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZSBfQWxsb2NfdHlwZTsNCiAg
X1RwKiBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQ0KICAgIHsgcmV0dXJuIF9B
bGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9DQogIHZvaWQgX01fZGVhbGxv
Y2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikNCiAgICB7IF9BbGxvY190eXBl
OjpkZWFsbG9jYXRlKF9fcCwgX19uKTt9DQp9Ow0KDQp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+DQpzdHJ1Y3QgX1ZlY3Rvcl9iYXNlDQog
IDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1Rw
LCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+DQp7DQogIHR5cGVkZWYgX1Zl
Y3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLA0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1Nf
aW5zdGFuY2VsZXNzPg0KICAgICAgICAgIF9CYXNlOw0KICB0eXBlZGVmIHR5
cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsN
Cg0KICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkg
OiBfQmFzZShfX2EpIHt9DQogIF9WZWN0b3JfYmFzZShzaXplX3QgX19uLCBj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgew0KICAg
IF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsNCiAgICBfTV9maW5pc2gg
PSBfTV9zdGFydDsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0
ICsgX19uOw0KICB9DQoNCiAgfl9WZWN0b3JfYmFzZSgpIHsgX01fZGVhbGxv
Y2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7
IH0NCn07DQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
ID0gYWxsb2NhdG9yPF9UcD4gPg0KY2xhc3MgdmVjdG9yIDogcHJvdGVjdGVk
IF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4NCnsNCg0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOw0K
DQpwcml2YXRlOg0KICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxv
Yz4gX0Jhc2U7DQogIHR5cGVkZWYgdmVjdG9yPF9UcCwgX0FsbG9jPiB2ZWN0
b3JfdHlwZTsNCnB1YmxpYzoNCiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsN
CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOw0KICB0eXBlZGVmIGNv
bnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7DQogIHR5cGVkZWYgX19u
b3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgdmVjdG9yX3R5cGU+IGl0ZXJhdG9y
Ow0KICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIs
IHZlY3Rvcl90eXBlPiBjb25zdF9pdGVyYXRvcjsNCiAgdHlwZWRlZiB2YWx1
ZV90eXBlJiByZWZlcmVuY2U7DQogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlw
ZSYgY29uc3RfcmVmZXJlbmNlOw0KICB0eXBlZGVmIHNpemVfdCBzaXplX3R5
cGU7DQogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsNCg0K
ICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxv
Y2F0b3JfdHlwZTsNCiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigp
IGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0NCg0K
ICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNv
bnN0X3JldmVyc2VfaXRlcmF0b3I7DQogIHR5cGVkZWYgcmV2ZXJzZV9pdGVy
YXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsNCg0KcHJvdGVjdGVk
Og0KICB1c2luZyBfQmFzZTo6X01fYWxsb2NhdGU7DQogIHVzaW5nIF9CYXNl
OjpfTV9kZWFsbG9jYXRlOw0KICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7DQog
IHVzaW5nIF9CYXNlOjpfTV9maW5pc2g7DQogIHVzaW5nIF9CYXNlOjpfTV9l
bmRfb2Zfc3RvcmFnZTsNCg0KcHJvdGVjdGVkOg0KICB2b2lkIF9NX2luc2Vy
dF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOw0K
ICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbik7DQoN
CnB1YmxpYzoNCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRv
ciAoX01fc3RhcnQpOyB9DQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u
c3QNCiAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fc3RhcnQpOyB9
DQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9maW5p
c2gpOyB9DQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IGNvbnN0X2l0ZXJhdG9yIChfTV9maW5pc2gpOyB9DQoNCiAgcmV2ZXJzZV9p
dGVyYXRvciByYmVnaW4oKQ0KICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0
b3IoZW5kKCkpOyB9DQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2lu
KCkgY29uc3QNCiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
KGVuZCgpKTsgfQ0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKQ0KICAgIHsg
cmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0NCiAgY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QNCiAgICB7IHJldHVybiBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9DQoNCiAgc2l6ZV90
eXBlIHNpemUoKSBjb25zdA0KICAgIHsgcmV0dXJuIHNpemVfdHlwZShlbmQo
KSAtIGJlZ2luKCkpOyB9DQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0
DQogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVvZihfVHApOyB9
DQogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0DQogICAgeyByZXR1cm4g
c2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlKSAt
IGJlZ2luKCkpOyB9DQogIGJvb2wgZW1wdHkoKSBjb25zdA0KICAgIHsgcmV0
dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0NCg0KICByZWZlcmVuY2Ugb3BlcmF0
b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24p
OyB9DQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBf
X24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0NCg0KICB2
b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsNCiAg
ICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkNCiAgICAgIF9fdGhyb3dfb3V0
X29mX3JhbmdlKCJ2ZWN0b3IiKTsNCiAgfQ0KDQogIHJlZmVyZW5jZSBhdChz
aXplX3R5cGUgX19uKQ0KICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0
dXJuICgqdGhpcylbX19uXTsgfQ0KICBjb25zdF9yZWZlcmVuY2UgYXQoc2l6
ZV90eXBlIF9fbikgY29uc3QNCiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7
IHJldHVybiAoKnRoaXMpW19fbl07IH0NCg0KICBleHBsaWNpdCB2ZWN0b3Io
Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkp
DQogICAgOiBfQmFzZShfX2EpIHt9DQoNCiAgdmVjdG9yKHNpemVfdHlwZSBf
X24sIGNvbnN0IF9UcCYgX192YWx1ZSwNCiAgICAgICAgIGNvbnN0IGFsbG9j
YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQ0KICAgIDogX0Jh
c2UoX19uLCBfX2EpDQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVk
X2ZpbGxfbihfTV9zdGFydCwgX19uLCBfX3ZhbHVlKTsgfQ0KDQogIGV4cGxp
Y2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQ0KICAgIDogX0Jhc2UoX19uLCBh
bGxvY2F0b3JfdHlwZSgpKQ0KICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFs
aXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9DQoNCiAgdmVj
dG9yKGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkNCiAgICA6IF9C
YXNlKF9feC5zaXplKCksIF9feC5nZXRfYWxsb2NhdG9yKCkpDQogICAgeyBf
TV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9f
eC5lbmQoKSwgX01fc3RhcnQpOyB9DQoNCg0KICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+DQogIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2Zp
cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICBjb25zdCBh
bGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFz
ZShfX2EpIHsNCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9J
bnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsNCiAgICBfTV9p
bml0aWFsaXplX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsN
CiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4NCiAgdm9pZCBf
TV9pbml0aWFsaXplX2F1eChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFs
dWUsIF9fdHJ1ZV90eXBlKSB7DQogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0
ZShfX24pOw0KICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBf
X247DQogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01f
c3RhcnQsIF9fbiwgX192YWx1ZSk7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcmF0b3I+DQogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgew0K
ICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19sYXN0LCBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAgfQ0KDQogIH52ZWN0b3Io
KSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7IH0NCg0KICB2ZWN0
b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwg
X0FsbG9jPiYgX194KTsNCiAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24p
IHsNCiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgew0KICAgICAgY29uc3Qg
c2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7DQogICAgICBwb2ludGVy
IF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwg
X01fZmluaXNoKTsNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2Zpbmlz
aCk7DQogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zf
c3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0YXJ0ID0gX190bXA7
DQogICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3NpemU7DQogICAg
ICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOw0KICAgIH0N
CiAgfQ0KDQoNCg0KDQoNCg0KICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19u
LCBjb25zdCBfVHAmIF9fdmFsKSB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192
YWwpOyB9DQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwg
Y29uc3QgX1RwJiBfX3ZhbCk7DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPg0KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2Zp
cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsNCiAgICB0eXBlZGVmIHR5
cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFs
IF9JbnRlZ3JhbDsNCiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwg
X19sYXN0LCBfSW50ZWdyYWwoKSk7DQogIH0NCg0KICB0ZW1wbGF0ZSA8Y2xh
c3MgX0ludGVnZXI+DQogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRl
Z2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQ0KICAgIHsg
X01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7
IH0NCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4NCiAgdm9pZCBf
TV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQ0KICAgIHsgX01fYXNzaWduX2F1
eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
dCkpOyB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0K
ICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAg
aW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyYXRvcj4NCiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJk
SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsDQog
ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7DQoN
CiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0NCiAg
Y29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2lu
KCk7IH0NCiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0g
MSk7IH0NCiAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVy
biAqKGVuZCgpIC0gMSk7IH0NCg0KICB2b2lkIHB1c2hfYmFjayhjb25zdCBf
VHAmIF9feCkgew0KICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0
b3JhZ2UpIHsNCiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7DQog
ICAgICArK19NX2ZpbmlzaDsNCiAgICB9DQogICAgZWxzZQ0KICAgICAgX01f
aW5zZXJ0X2F1eChlbmQoKSwgX194KTsNCiAgfQ0KICB2b2lkIHB1c2hfYmFj
aygpIHsNCiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdl
KSB7DQogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoKTsNCiAgICAgICsrX01f
ZmluaXNoOw0KICAgIH0NCiAgICBlbHNlDQogICAgICBfTV9pbnNlcnRfYXV4
KGVuZCgpKTsNCiAgfQ0KICB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9j
PiYgX194KSB7DQogICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3Rh
cnQpOw0KICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gp
Ow0KICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2Vu
ZF9vZl9zdG9yYWdlKTsNCiAgfQ0KDQogIGl0ZXJhdG9yIGluc2VydChpdGVy
YXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkgew0KICAgIHNpemVf
dHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsNCiAgICBpZiAoX01f
ZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0g
ZW5kKCkpIHsNCiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7DQog
ICAgICArK19NX2ZpbmlzaDsNCiAgICB9DQogICAgZWxzZQ0KICAgICAgX01f
aW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9uKSwgX194KTsNCiAgICBy
ZXR1cm4gYmVnaW4oKSArIF9fbjsNCiAgfQ0KICBpdGVyYXRvciBpbnNlcnQo
aXRlcmF0b3IgX19wb3NpdGlvbikgew0KICAgIHNpemVfdHlwZSBfX24gPSBf
X3Bvc2l0aW9uIC0gYmVnaW4oKTsNCiAgICBpZiAoX01fZmluaXNoICE9IF9N
X2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsNCiAg
ICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOw0KICAgICAgKytfTV9maW5pc2g7
DQogICAgfQ0KICAgIGVsc2UNCiAgICAgIF9NX2luc2VydF9hdXgoaXRlcmF0
b3IoX19wb3NpdGlvbikpOw0KICAgIHJldHVybiBiZWdpbigpICsgX19uOw0K
ICB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICB2
b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7DQogICAgdHlwZWRlZiB0
eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3Jh
bCBfSW50ZWdyYWw7DQogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBf
X2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsNCiAgfQ0KDQogIHRlbXBs
YXRlIDxjbGFzcyBfSW50ZWdlcj4NCiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0
Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192
YWwsDQogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQ0K
ICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwg
KF9UcCkgX192YWwpOyB9DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPg0KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBf
X3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsNCiAgICBfTV9yYW5n
ZV9pbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0KSk7DQogIH0NCg0KICB2b2lkIGluc2VydCAoaXRl
cmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQ0K
ICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsgfQ0KDQog
IHZvaWQgX01fZmlsbF9pbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5
cGUgX19uLCBjb25zdCBfVHAmIF9feCk7DQoNCiAgdm9pZCBwb3BfYmFjaygp
IHsNCiAgICAtLV9NX2ZpbmlzaDsNCiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7
DQogIH0NCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikg
ew0KICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkNCiAgICAgIGNv
cHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsNCiAgICAt
LV9NX2ZpbmlzaDsNCiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7DQogICAgcmV0
dXJuIF9fcG9zaXRpb247DQogIH0NCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0
b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7DQogICAgaXRlcmF0b3Ig
X19pKGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCkpOw0KICAgIGRlc3Ry
b3koX19pLCBlbmQoKSk7DQogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0g
KF9fbGFzdCAtIF9fZmlyc3QpOw0KICAgIHJldHVybiBfX2ZpcnN0Ow0KICB9
DQoNCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0
IF9UcCYgX194KSB7DQogICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpDQog
ICAgICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5kKCkpOw0KICAg
IGVsc2UNCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUo
KSwgX194KTsNCiAgfQ0KICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdf
c2l6ZSkgeyByZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9DQogIHZvaWQg
Y2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQ0KDQpwcm90ZWN0
ZWQ6DQoNCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQog
IHBvaW50ZXIgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBlIF9fbiwg
X0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9y
IF9fbGFzdCkNCiAgew0KICAgIHBvaW50ZXIgX19yZXN1bHQgPSBfTV9hbGxv
Y2F0ZShfX24pOw0KICAgIHRyeSB7DQogICAgICB1bmluaXRpYWxpemVkX2Nv
cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7DQogICAgICByZXR1cm4g
X19yZXN1bHQ7DQogICAgfQ0KICAgIGNhdGNoKC4uLikgeyBfTV9kZWFsbG9j
YXRlKF9fcmVzdWx0LCBfX24pOyB0aHJvdzsgfTsNCiAgfQ0KDQogIHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4NCiAgdm9pZCBfTV9yYW5nZV9p
bml0aWFsaXplKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0
X2l0ZXJhdG9yX3RhZykNCiAgew0KICAgIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCkNCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7
DQogIH0NCg0KDQogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
Pg0KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQ0KICB7
DQogICAgc2l6ZV90eXBlIF9fbiA9IDA7DQogICAgZGlzdGFuY2UoX19maXJz
dCwgX19sYXN0LCBfX24pOw0KICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUo
X19uKTsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19u
Ow0KICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0
LCBfX2xhc3QsIF9NX3N0YXJ0KTsNCiAgfQ0KDQogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4NCiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRl
cmF0b3IgX19wb3MsDQogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwNCiAgICAg
ICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsNCg0KICB0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgdm9pZCBfTV9y
YW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsDQogICAgICAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy
YXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRf
aXRlcmF0b3JfdGFnKTsNCn07DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVyYXRvcj09KGNvbnN0IHZl
Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0Fs
bG9jPiYgX195KQ0Kew0KICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6
ZSgpICYmDQogICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgp
LCBfX3kuYmVnaW4oKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVyYXRvcjwoY29uc3QgdmVj
dG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxs
b2M+JiBfX3kpDQp7DQogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFy
ZShfX3guYmVnaW4oKSwgX194LmVuZCgpLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSB2
b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0b3I8X1Rw
LCBfQWxsb2M+JiBfX3kpDQp7DQogIF9feC5zd2FwKF9feSk7DQp9DQoNCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29s
DQpvcGVyYXRvciE9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwg
Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7DQogIHJldHVybiAh
KF9feCA9PSBfX3kpOw0KfQ0KDQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+DQppbmxpbmUgYm9vbA0Kb3BlcmF0b3I+KGNvbnN0IHZlY3Rv
cjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9j
PiYgX195KSB7DQogIHJldHVybiBfX3kgPCBfX3g7DQp9DQoNCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCmlubGluZSBib29sDQpvcGVy
YXRvcjw9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3Qg
dmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7DQogIHJldHVybiAhKF9feSA8
IF9feCk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4NCmlubGluZSBib29sDQpvcGVyYXRvcj49KGNvbnN0IHZlY3RvcjxfVHAs
IF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195
KSB7DQogIHJldHVybiAhKF9feCA8IF9feSk7DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnZlY3RvcjxfVHAsX0FsbG9jPiYN
CnZlY3RvcjxfVHAsX0FsbG9jPjo6b3BlcmF0b3I9KGNvbnN0IHZlY3Rvcjxf
VHAsIF9BbGxvYz4mIF9feCkNCnsNCiAgaWYgKCZfX3ggIT0gdGhpcykgew0K
ICAgIGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6ZSgpOw0KICAg
IGlmIChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7DQogICAgICBwb2ludGVyIF9f
dG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBfX3guYmVnaW4o
KSwgX194LmVuZCgpKTsNCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2Zp
bmlzaCk7DQogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRf
b2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsNCiAgICAgIF9NX3N0YXJ0ID0gX190
bXA7DQogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX194
bGVuOw0KICAgIH0NCiAgICBlbHNlIGlmIChzaXplKCkgPj0gX194bGVuKSB7
DQogICAgICBpdGVyYXRvciBfX2koY29weShfX3guYmVnaW4oKSwgX194LmVu
ZCgpLCBiZWdpbigpKSk7DQogICAgICBkZXN0cm95KF9faSwgZW5kKCkpOw0K
ICAgIH0NCiAgICBlbHNlIHsNCiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9f
eC5iZWdpbigpICsgc2l6ZSgpLCBfTV9zdGFydCk7DQogICAgICB1bmluaXRp
YWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQoKSwg
X01fZmluaXNoKTsNCiAgICB9DQogICAgX01fZmluaXNoID0gX01fc3RhcnQg
KyBfX3hsZW47DQogIH0NCiAgcmV0dXJuICp0aGlzOw0KfQ0KDQp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2b2lkIHZlY3RvcjxfVHAs
IF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdCBfX24sIGNvbnN0IHZh
bHVlX3R5cGUmIF9fdmFsKQ0Kew0KICBpZiAoX19uID4gY2FwYWNpdHkoKSkg
ew0KICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3ZhbCwg
Z2V0X2FsbG9jYXRvcigpKTsNCiAgICBfX3RtcC5zd2FwKCp0aGlzKTsNCiAg
fQ0KICBlbHNlIGlmIChfX24gPiBzaXplKCkpIHsNCiAgICBmaWxsKGJlZ2lu
KCksIGVuZCgpLCBfX3ZhbCk7DQogICAgX01fZmluaXNoID0gdW5pbml0aWFs
aXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBzaXplKCksIF9fdmFsKTsN
CiAgfQ0KICBlbHNlDQogICAgZXJhc2UoZmlsbF9uKGJlZ2luKCksIF9fbiwg
X192YWwpLCBlbmQoKSk7DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+DQp2b2lk
IHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp
IHsNCiAgaXRlcmF0b3IgX19jdXIoYmVnaW4oKSk7DQogIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsr
X19maXJzdCkNCiAgICAqX19jdXIgPSAqX19maXJzdDsNCiAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KQ0KICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7DQogIGVs
c2UNCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7DQp9DQoN
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcj4NCnZvaWQNCnZlY3RvcjxfVHAsIF9BbGxv
Yz46Ol9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7DQogIHNpemVfdHlwZSBf
X2xlbiA9IDA7DQogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4p
Ow0KDQogIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpIHsNCiAgICBwb2ludGVy
IF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBfX2ZpcnN0LCBf
X2xhc3QpKTsNCiAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOw0K
ICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdl
IC0gX01fc3RhcnQpOw0KICAgIF9NX3N0YXJ0ID0gX190bXA7DQogICAgX01f
ZW5kX29mX3N0b3JhZ2UgPSBfTV9maW5pc2ggPSBfTV9zdGFydCArIF9fbGVu
Ow0KICB9DQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikgew0KICAgIGl0
ZXJhdG9yIF9fbmV3X2ZpbmlzaChjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01f
c3RhcnQpKTsNCiAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwgZW5kKCkpOw0K
ICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7DQogIH0NCiAg
ZWxzZSB7DQogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJzdDsNCiAg
ICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOw0KICAgIGNvcHkoX19maXJzdCwg
X19taWQsIF9NX3N0YXJ0KTsNCiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxp
emVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsNCiAgfQ0KfQ0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2b2lkDQp2
ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9f
cG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQ0Kew0KICBpZiAoX01fZmluaXNo
ICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7DQogICAgY29uc3RydWN0KF9NX2Zp
bmlzaCwgKihfTV9maW5pc2ggLSAxKSk7DQogICAgKytfTV9maW5pc2g7DQog
ICAgX1RwIF9feF9jb3B5ID0gX194Ow0KICAgIGNvcHlfYmFja3dhcmQoX19w
b3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksIGl0ZXJhdG9yKF9N
X2ZpbmlzaC0gMSkpOw0KICAgICpfX3Bvc2l0aW9uID0gX194X2NvcHk7DQog
IH0NCiAgZWxzZSB7DQogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUg
PSBzaXplKCk7DQogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRf
c2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOw0KICAgIGl0ZXJhdG9y
IF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7DQogICAgaXRlcmF0
b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsNCiAgICB0cnkgew0KICAg
ICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9y
KF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7DQogICAgICBjb25z
dHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsNCiAgICAgICsrX19u
ZXdfZmluaXNoOw0KICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXpl
ZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfZmlu
aXNoKTsNCiAgICB9DQogICAgY2F0Y2goLi4uKSB7IChkZXN0cm95KF9fbmV3
X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3Rh
cnQuYmFzZSgpLF9fbGVuKSk7IHRocm93OyB9Ow0KDQogICAgZGVzdHJveShi
ZWdpbigpLCBlbmQoKSk7DQogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwg
X01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7DQogICAgX01fc3RhcnQg
PSBfX25ld19zdGFydC5iYXNlKCk7DQogICAgX01fZmluaXNoID0gX19uZXdf
ZmluaXNoLmJhc2UoKTsNCiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3
X3N0YXJ0LmJhc2UoKSArIF9fbGVuOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4NCnZvaWQNCnZlY3RvcjxfVHAsIF9B
bGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbikNCnsN
CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgew0KICAg
IGNvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOw0KICAg
ICsrX01fZmluaXNoOw0KICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwg
aXRlcmF0b3IoX01fZmluaXNoIC0gMiksDQogICAgICAgICAgICAgICAgICBp
dGVyYXRvcihfTV9maW5pc2ggLSAxKSk7DQogICAgKl9fcG9zaXRpb24gPSBf
VHAoKTsNCiAgfQ0KICBlbHNlIHsNCiAgICBjb25zdCBzaXplX3R5cGUgX19v
bGRfc2l6ZSA9IHNpemUoKTsNCiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4g
PSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7DQogICAg
cG9pbnRlciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsNCiAg
ICBwb2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0Ow0KICAgIHRy
eSB7DQogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHko
aXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0aW9uLA0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsNCiAg
ICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOw0KICAgICAgKytfX25ld19m
aW5pc2g7DQogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2Nv
cHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwNCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19maW5pc2gp
Ow0KICAgIH0NCiAgICBjYXRjaCguLi4pIHsgKGRlc3Ryb3koX19uZXdfc3Rh
cnQsX19uZXdfZmluaXNoKSwgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxf
X2xlbikpOyB0aHJvdzsgfTsNCg0KICAgIGRlc3Ryb3koYmVnaW4oKSwgZW5k
KCkpOw0KICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9z
dG9yYWdlIC0gX01fc3RhcnQpOw0KICAgIF9NX3N0YXJ0ID0gX19uZXdfc3Rh
cnQ7DQogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOw0KICAgIF9NX2Vu
ZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsNCiAgfQ0KfQ0K
DQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+DQp2b2lkIHZl
Y3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9f
cG9zaXRpb24sIHNpemVfdHlwZSBfX24sDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQ0Kew0KICBp
ZiAoX19uICE9IDApIHsNCiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9z
dG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsNCiAgICAgIF9UcCBfX3hf
Y29weSA9IF9feDsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2Fm
dGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOw0KICAgICAgaXRlcmF0b3IgX19v
bGRfZmluaXNoKF9NX2ZpbmlzaCk7DQogICAgICBpZiAoX19lbGVtc19hZnRl
ciA+IF9fbikgew0KICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmlu
aXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAgICAgIF9N
X2ZpbmlzaCArPSBfX247DQogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3Np
dGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOw0KICAg
ICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBfX24sIF9feF9j
b3B5KTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICB1bmluaXRp
YWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIF9fZWxlbXNfYWZ0ZXIs
IF9feF9jb3B5KTsNCiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxl
bXNfYWZ0ZXI7DQogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0
aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAgICAgIF9NX2Zp
bmlzaCArPSBfX2VsZW1zX2FmdGVyOw0KICAgICAgICBmaWxsKF9fcG9zaXRp
b24sIF9fb2xkX2ZpbmlzaCwgX194X2NvcHkpOw0KICAgICAgfQ0KICAgIH0N
CiAgICBlbHNlIHsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXpl
ID0gc2l6ZSgpOw0KICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19v
bGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBfX24pOw0KICAgICAgaXRlcmF0
b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsNCiAgICAgIGl0
ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7DQogICAgICB0cnkg
ew0KICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHko
YmVnaW4oKSwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOw0KICAgICAgICBf
X25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfX25ld19maW5p
c2gsIF9fbiwgX194KTsNCiAgICAgICAgX19uZXdfZmluaXNoDQogICAgICAg
ICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9f
bmV3X2ZpbmlzaCk7DQogICAgICB9DQogICAgICBjYXRjaCguLi4pIHsgKGRl
c3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01fZGVhbGxvY2F0
ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pKTsgdGhyb3c7IH07DQoNCiAg
ICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7DQogICAgICBfTV9k
ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0
YXJ0KTsNCiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOw0K
ICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsNCiAgICAg
IF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19s
ZW47DQogICAgfQ0KICB9DQp9DQoNCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0K
dm9pZA0KdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0
ZXJhdG9yIF9fcG9zLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0
X2l0ZXJhdG9yX3RhZykNCnsNCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz
dDsgKytfX2ZpcnN0KSB7DQogICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpf
X2ZpcnN0KTsNCiAgICArK19fcG9zOw0KICB9DQp9DQoNCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcmF0b3I+DQp2b2lkDQp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9y
YW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9f
Zmlyc3QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpDQp7DQog
IGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgew0KICAgIHNpemVfdHlwZSBfX24g
PSAwOw0KICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsNCiAg
ICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNo
KSA+PSBfX24pIHsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2Fm
dGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOw0KICAgICAgaXRlcmF0b3IgX19v
bGRfZmluaXNoKF9NX2ZpbmlzaCk7DQogICAgICBpZiAoX19lbGVtc19hZnRl
ciA+IF9fbikgew0KICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmlu
aXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAgICAgIF9N
X2ZpbmlzaCArPSBfX247DQogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3Np
dGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOw0KICAg
ICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7DQogICAg
ICB9DQogICAgICBlbHNlIHsNCiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBf
X21pZCA9IF9fZmlyc3Q7DQogICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxl
bXNfYWZ0ZXIpOw0KICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19taWQs
IF9fbGFzdCwgX01fZmluaXNoKTsNCiAgICAgICAgX01fZmluaXNoICs9IF9f
biAtIF9fZWxlbXNfYWZ0ZXI7DQogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29w
eShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7DQogICAg
ICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOw0KICAgICAgICBjb3B5
KF9fZmlyc3QsIF9fbWlkLCBfX3Bvc2l0aW9uKTsNCiAgICAgIH0NCiAgICB9
DQogICAgZWxzZSB7DQogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6
ZSA9IHNpemUoKTsNCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9f
b2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsNCiAgICAgIGl0ZXJh
dG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7DQogICAgICBp
dGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOw0KICAgICAgdHJ5
IHsNCiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5
KGl0ZXJhdG9yKF9NX3N0YXJ0KSwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsN
CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsNCiAgICAgICAgX19uZXdf
ZmluaXNoDQogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3Np
dGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwgX19uZXdfZmluaXNoKTsNCiAg
ICAgIH0NCiAgICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFy
dCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJh
c2UoKSxfX2xlbikpOyB0aHJvdzsgfTsNCg0KICAgICAgZGVzdHJveShfTV9z
dGFydCwgX01fZmluaXNoKTsNCiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3Rh
cnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOw0KICAgICAgX01f
c3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7DQogICAgICBfTV9maW5pc2gg
PSBfX25ld19maW5pc2guYmFzZSgpOw0KICAgICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsNCiAgICB9DQogIH0N
Cn0NCg0KfQ0KIyAzOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwv
YmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMSAz
DQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYnZlY3Rvci5oIiAzDQpuYW1lc3BhY2Ugc3RkDQp7DQoNCnN0YXRp
YyBjb25zdCBpbnQgX19XT1JEX0JJVCA9IGludCg4KnNpemVvZih1bnNpZ25l
ZCBpbnQpKTsNCg0Kc3RydWN0IF9CaXRfcmVmZXJlbmNlIHsNCiAgdW5zaWdu
ZWQgaW50KiBfTV9wOw0KICB1bnNpZ25lZCBpbnQgX01fbWFzazsNCiAgX0Jp
dF9yZWZlcmVuY2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBf
X3kpDQogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7fQ0KDQpwdWJs
aWM6DQogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNrKDAp
IHt9DQogIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhKCEoKl9N
X3AgJiBfTV9tYXNrKSk7IH0NCiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9y
PShib29sIF9feCkNCiAgew0KICAgIGlmIChfX3gpICpfTV9wIHw9IF9NX21h
c2s7DQogICAgZWxzZSAqX01fcCAmPSB+X01fbWFzazsNCiAgICByZXR1cm4g
KnRoaXM7DQogIH0NCiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25z
dCBfQml0X3JlZmVyZW5jZSYgX194KQ0KICAgIHsgcmV0dXJuICp0aGlzID0g
Ym9vbChfX3gpOyB9DQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0X3Jl
ZmVyZW5jZSYgX194KSBjb25zdA0KICAgIHsgcmV0dXJuIGJvb2woKnRoaXMp
ID09IGJvb2woX194KTsgfQ0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0
X3JlZmVyZW5jZSYgX194KSBjb25zdCB7DQogICAgcmV0dXJuICFib29sKCp0
aGlzKSAmJiBib29sKF9feCk7DQogIH0NCiAgdm9pZCBmbGlwKCkgeyAqX01f
cCBePSBfTV9tYXNrOyB9DQp9Ow0KDQppbmxpbmUgdm9pZCBzd2FwKF9CaXRf
cmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQ0Kew0KICBib29s
IF9fdG1wID0gX194Ow0KICBfX3ggPSBfX3k7DQogIF9feSA9IF9fdG1wOw0K
fQ0KDQpzdHJ1Y3QgX0JpdF9pdGVyYXRvcl9iYXNlIDogcHVibGljIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90Pg0Kew0KICB1bnNp
Z25lZCBpbnQqIF9NX3A7DQogIHVuc2lnbmVkIGludCBfTV9vZmZzZXQ7DQoN
CiAgX0JpdF9pdGVyYXRvcl9iYXNlKHVuc2lnbmVkIGludCogX194LCB1bnNp
Z25lZCBpbnQgX195KQ0KICAgIDogX01fcChfX3gpLCBfTV9vZmZzZXQoX195
KSB7fQ0KDQogIHZvaWQgX01fYnVtcF91cCgpIHsNCiAgICBpZiAoX01fb2Zm
c2V0KysgPT0gX19XT1JEX0JJVCAtIDEpIHsNCiAgICAgIF9NX29mZnNldCA9
IDA7DQogICAgICArK19NX3A7DQogICAgfQ0KICB9DQogIHZvaWQgX01fYnVt
cF9kb3duKCkgew0KICAgIGlmIChfTV9vZmZzZXQtLSA9PSAwKSB7DQogICAg
ICBfTV9vZmZzZXQgPSBfX1dPUkRfQklUIC0gMTsNCiAgICAgIC0tX01fcDsN
CiAgICB9DQogIH0NCg0KICB2b2lkIF9NX2luY3IocHRyZGlmZl90IF9faSkg
ew0KICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7
DQogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOw0KICAgIF9fbiA9IF9f
biAlIF9fV09SRF9CSVQ7DQogICAgaWYgKF9fbiA8IDApIHsNCiAgICAgIF9N
X29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7DQog
ICAgICAtLV9NX3A7DQogICAgfSBlbHNlDQogICAgICBfTV9vZmZzZXQgPSAo
dW5zaWduZWQgaW50KSBfX247DQogIH0NCg0KICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsNCiAgICBy
ZXR1cm4gX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPT0gX19pLl9N
X29mZnNldDsNCiAgfQ0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X2l0
ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3Qgew0KICAgIHJldHVybiBfTV9wIDwg
X19pLl9NX3AgfHwgKF9NX3AgPT0gX19pLl9NX3AgJiYgX01fb2Zmc2V0IDwg
X19pLl9NX29mZnNldCk7DQogIH0NCiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7DQogICAgcmV0dXJu
ICEoKnRoaXMgPT0gX19pKTsNCiAgfQ0KICBib29sIG9wZXJhdG9yPihjb25z
dCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3Qgew0KICAgIHJldHVy
biBfX2kgPCAqdGhpczsNCiAgfQ0KICBib29sIG9wZXJhdG9yPD0oY29uc3Qg
X0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsNCiAgICByZXR1cm4g
IShfX2kgPCAqdGhpcyk7DQogIH0NCiAgYm9vbCBvcGVyYXRvcj49KGNvbnN0
IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7DQogICAgcmV0dXJu
ICEoKnRoaXMgPCBfX2kpOw0KICB9DQp9Ow0KDQppbmxpbmUgcHRyZGlmZl90
DQpvcGVyYXRvci0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3gsIGNv
bnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7DQogIHJldHVybiBfX1dP
UkRfQklUICogKF9feC5fTV9wIC0gX195Ll9NX3ApICsgX194Ll9NX29mZnNl
dCAtIF9feS5fTV9vZmZzZXQ7DQp9DQoNCg0Kc3RydWN0IF9CaXRfaXRlcmF0
b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlDQp7DQogIHR5cGVkZWYg
X0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOw0KICB0eXBlZGVmIF9CaXRfcmVm
ZXJlbmNlKiBwb2ludGVyOw0KICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRl
cmF0b3I7DQoNCiAgX0JpdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9i
YXNlKDAsIDApIHt9DQogIF9CaXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiBf
X3gsIHVuc2lnbmVkIGludCBfX3kpDQogICAgOiBfQml0X2l0ZXJhdG9yX2Jh
c2UoX194LCBfX3kpIHt9DQoNCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQp
OyB9DQogIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgew0KICAgIF9NX2J1bXBf
dXAoKTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgaXRlcmF0b3Igb3Bl
cmF0b3IrKyhpbnQpIHsNCiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0K
ICAgIF9NX2J1bXBfdXAoKTsNCiAgICByZXR1cm4gX190bXA7DQogIH0NCiAg
aXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7DQogICAgX01fYnVtcF9kb3duKCk7
DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGl0ZXJhdG9yIG9wZXJhdG9y
LS0oaW50KSB7DQogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsNCiAgICBf
TV9idW1wX2Rvd24oKTsNCiAgICByZXR1cm4gX190bXA7DQogIH0NCiAgaXRl
cmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgew0KICAg
IF9NX2luY3IoX19pKTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0NCiAgaXRl
cmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgew0KICAg
ICp0aGlzICs9IC1fX2k7DQogICAgcmV0dXJuICp0aGlzOw0KICB9DQogIGl0
ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7
DQogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsNCiAgICByZXR1cm4gX190
bXAgKz0gX19pOw0KICB9DQogIGl0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJl
bmNlX3R5cGUgX19pKSBjb25zdCB7DQogICAgaXRlcmF0b3IgX190bXAgPSAq
dGhpczsNCiAgICByZXR1cm4gX190bXAgLT0gX19pOw0KICB9DQoNCiAgcmVm
ZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyByZXR1
cm4gKigqdGhpcyArIF9faSk7IH0NCn07DQoNCmlubGluZSBfQml0X2l0ZXJh
dG9yDQpvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3QgX0JpdF9pdGVy
YXRvciYgX194KSB7IHJldHVybiBfX3ggKyBfX247IH0NCg0KDQpzdHJ1Y3Qg
X0JpdF9jb25zdF9pdGVyYXRvciA6IHB1YmxpYyBfQml0X2l0ZXJhdG9yX2Jh
c2UNCnsNCiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsNCiAgdHlwZWRlZiBi
b29sIGNvbnN0X3JlZmVyZW5jZTsNCiAgdHlwZWRlZiBjb25zdCBib29sKiBw
b2ludGVyOw0KICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3Rf
aXRlcmF0b3I7DQoNCiAgX0JpdF9jb25zdF9pdGVyYXRvcigpIDogX0JpdF9p
dGVyYXRvcl9iYXNlKDAsIDApIHt9DQogIF9CaXRfY29uc3RfaXRlcmF0b3Io
dW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpDQogICAgOiBf
Qml0X2l0ZXJhdG9yX2Jhc2UoX194LCBfX3kpIHt9DQogIF9CaXRfY29uc3Rf
aXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KQ0KICAgIDogX0Jp
dF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zmc2V0KSB7fQ0K
DQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7DQogICAg
cmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7
DQogIH0NCiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7DQogICAg
X01fYnVtcF91cCgpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBjb25z
dF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgew0KICAgIGNvbnN0X2l0ZXJh
dG9yIF9fdG1wID0gKnRoaXM7DQogICAgX01fYnVtcF91cCgpOw0KICAgIHJl
dHVybiBfX3RtcDsNCiAgfQ0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3It
LSgpIHsNCiAgICBfTV9idW1wX2Rvd24oKTsNCiAgICByZXR1cm4gKnRoaXM7
DQogIH0NCiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsNCiAg
ICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0KICAgIF9NX2J1bXBf
ZG93bigpOw0KICAgIHJldHVybiBfX3RtcDsNCiAgfQ0KICBjb25zdF9pdGVy
YXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7DQogICAg
X01faW5jcihfX2kpOw0KICAgIHJldHVybiAqdGhpczsNCiAgfQ0KICBjb25z
dF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7
DQogICAgKnRoaXMgKz0gLV9faTsNCiAgICByZXR1cm4gKnRoaXM7DQogIH0N
CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBf
X2kpIGNvbnN0IHsNCiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlz
Ow0KICAgIHJldHVybiBfX3RtcCArPSBfX2k7DQogIH0NCiAgY29uc3RfaXRl
cmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsN
CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOw0KICAgIHJldHVy
biBfX3RtcCAtPSBfX2k7DQogIH0NCiAgY29uc3RfcmVmZXJlbmNlIG9wZXJh
dG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgew0KICAgIHJldHVybiAqKCp0
aGlzICsgX19pKTsNCiAgfQ0KfTsNCg0KaW5saW5lIF9CaXRfY29uc3RfaXRl
cmF0b3INCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2Nv
bnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsgfQ0KDQoN
Cg0KDQoNCg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX19p
c19zdGF0aWM+DQpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlIHsNCnB1Ymxp
YzoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9B
bGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAgIGFsbG9jYXRv
cl90eXBlOw0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29u
c3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0NCg0KICBfQnZlY3Rv
cl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpDQogICAg
OiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgpLCBfTV9maW5p
c2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30NCg0KcHJvdGVjdGVkOg0K
ICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQ0KICAg
IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRlKChfX24gKyBf
X1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVCk7IH0NCiAgdm9pZCBfTV9kZWFs
bG9jYXRlKCkgew0KICAgIGlmIChfTV9zdGFydC5fTV9wKQ0KICAgICAgX01f
ZGF0YV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zfc3Rv
cmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOw0KICB9DQoNCiAgdHlwZW5hbWUgX0Fs
bG9jX3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0b3I+OjphbGxvY2F0
b3JfdHlwZQ0KICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOw0KICBfQml0
X2l0ZXJhdG9yIF9NX3N0YXJ0Ow0KICBfQml0X2l0ZXJhdG9yIF9NX2Zpbmlz
aDsNCiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsNCn07DQoN
Cg0KdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3I+DQpjbGFzcyBfQnZlY3Rv
cl9hbGxvY19iYXNlPF9BbGxvY2F0b3IsIHRydWU+IHsNCnB1YmxpYzoNCiAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0
b3I+OjphbGxvY2F0b3JfdHlwZQ0KICAgICAgICAgIGFsbG9jYXRvcl90eXBl
Ow0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQ0KDQogIF9CdmVjdG9yX2FsbG9j
X2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQ0KICAgIDogX01fc3RhcnQo
KSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9DQoNCnBy
b3RlY3RlZDoNCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPHVu
c2lnbmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlDQogICAgICAg
ICAgX0FsbG9jX3R5cGU7DQoNCiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxs
b2Moc2l6ZV90IF9fbikNCiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxs
b2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUKTsgfQ0K
ICB2b2lkIF9NX2RlYWxsb2NhdGUoKSB7DQogICAgaWYgKF9NX3N0YXJ0Ll9N
X3ApDQogICAgICBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfTV9zdGFydC5f
TV9wLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29m
X3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsNCiAgfQ0KDQogIF9CaXRfaXRl
cmF0b3IgX01fc3RhcnQ7DQogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOw0K
ICB1bnNpZ25lZCBpbnQqIF9NX2VuZF9vZl9zdG9yYWdlOw0KfTsNCg0KdGVt
cGxhdGUgPGNsYXNzIF9BbGxvYz4NCmNsYXNzIF9CdmVjdG9yX2Jhc2UNCiAg
OiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBf
QWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+DQp7DQogIHR5cGVkZWYgX0J2ZWN0
b3JfYWxsb2NfYmFzZTxfQWxsb2MsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2luc3Rh
bmNlbGVzcz4NCiAgICAgICAgICBfQmFzZTsNCnB1YmxpYzoNCiAgdHlwZWRl
ZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5
cGU7DQoNCiAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hKSA6IF9CYXNlKF9fYSkge30NCiAgfl9CdmVjdG9yX2Jhc2UoKSB7IF9C
YXNlOjpfTV9kZWFsbG9jYXRlKCk7IH0NCn07DQoNCn0NCg0KDQojIDEgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0
b3IuaCIgMSAzDQojIDMxOCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMiAzDQpuYW1lc3BhY2Ugc3Rk
DQp7DQoNCnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxsb2M+DQogIGNsYXNzIHZl
Y3Rvcjxib29sLCBfQWxsb2M+IDogcHVibGljIF9CdmVjdG9yX2Jhc2U8X0Fs
bG9jPg0KICB7DQogIHB1YmxpYzoNCiAgICB0eXBlZGVmIGJvb2wgdmFsdWVf
dHlwZTsNCiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7DQogICAgdHlw
ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOw0KICAgIHR5cGVkZWYg
X0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOw0KICAgIHR5cGVkZWYgYm9vbCBj
b25zdF9yZWZlcmVuY2U7DQogICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSog
cG9pbnRlcjsNCiAgICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNvbnN0X3BvaW50
ZXI7DQoNCiAgICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7DQog
ICAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y
Ow0KDQogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJh
dG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOw0KICAgIHR5cGVkZWYgcmV2
ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsNCg0K
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+Ojph
bGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsNCiAgICBhbGxvY2F0b3Jf
dHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qgew0KICAgICAgcmV0dXJuIF9C
dmVjdG9yX2Jhc2U8X0FsbG9jPjo6Z2V0X2FsbG9jYXRvcigpOw0KICAgIH0N
Cg0KICBwcm90ZWN0ZWQ6DQogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxs
b2M+OjpfTV9iaXRfYWxsb2M7DQogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxf
QWxsb2M+OjpfTV9kZWFsbG9jYXRlOw0KICAgIHVzaW5nIF9CdmVjdG9yX2Jh
c2U8X0FsbG9jPjo6X01fc3RhcnQ7DQogICAgdXNpbmcgX0J2ZWN0b3JfYmFz
ZTxfQWxsb2M+OjpfTV9maW5pc2g7DQogICAgdXNpbmcgX0J2ZWN0b3JfYmFz
ZTxfQWxsb2M+OjpfTV9lbmRfb2Zfc3RvcmFnZTsNCg0KICBwcm90ZWN0ZWQ6
DQogICAgdm9pZCBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBfX24pIHsNCiAg
ICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbik7DQog
ICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfX1dPUkRf
QklUIC0gMSkvX19XT1JEX0JJVDsNCiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0
b3IoX19xLCAwKTsNCiAgICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgZGlm
ZmVyZW5jZV90eXBlKF9fbik7DQogICAgfQ0KICAgIHZvaWQgX01faW5zZXJ0
X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgew0KICAgICAg
aWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7DQog
ICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNoLCBf
TV9maW5pc2ggKyAxKTsNCiAgICAgICAgKl9fcG9zaXRpb24gPSBfX3g7DQog
ICAgICAgICsrX01fZmluaXNoOw0KICAgICAgfQ0KICAgICAgZWxzZSB7DQog
ICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSA/IDIgKiBzaXplKCkg
OiBfX1dPUkRfQklUOw0KICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9N
X2JpdF9hbGxvYyhfX2xlbik7DQogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNv
cHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7DQog
ICAgICAgICpfX2krKyA9IF9feDsNCiAgICAgICAgX01fZmluaXNoID0gY29w
eShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsNCiAgICAgICAgX01fZGVhbGxv
Y2F0ZSgpOw0KICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChf
X2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOw0KICAgICAgICBf
TV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7DQogICAgICB9DQogICAgfQ0K
DQogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgIHZv
aWQgX01faW5pdGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsDQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgew0KICAgICAgX01fc3Rh
cnQgPSBpdGVyYXRvcigpOw0KICAgICAgX01fZmluaXNoID0gaXRlcmF0b3Io
KTsNCiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsNCiAgICAgIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkNCiAgICAgICAgcHVz
aF9iYWNrKCpfX2ZpcnN0KTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2luaXRpYWxpemVf
cmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh
dG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
d2FyZF9pdGVyYXRvcl90YWcpIHsNCiAgICAgIHNpemVfdHlwZSBfX24gPSAw
Ow0KICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOw0KICAg
ICAgX01faW5pdGlhbGl6ZShfX24pOw0KICAgICAgY29weShfX2ZpcnN0LCBf
X2xhc3QsIF9NX3N0YXJ0KTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcmF0b3I+DQogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2Uo
aXRlcmF0b3IgX19wb3MsDQogICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0K
ICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykg
ew0KICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
KSB7DQogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7
DQogICAgICAgICsrX19wb3M7DQogICAgICB9DQogICAgfQ0KDQogICAgdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+DQogICAgdm9pZCBfTV9p
bnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlcmF0b3IgX19sYXN0LA0KICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7DQogICAgICBpZiAoX19maXJzdCAh
PSBfX2xhc3QpIHsNCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7DQogICAg
ICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsNCiAgICAgICAg
aWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7DQogICAgICAgICAg
Y29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsg
ZGlmZmVyZW5jZV90eXBlKF9fbikpOw0KICAgICAgICAgIGNvcHkoX19maXJz
dCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsNCiAgICAgICAgICBfTV9maW5pc2gg
Kz0gZGlmZmVyZW5jZV90eXBlKF9fbik7DQogICAgICAgIH0NCiAgICAgICAg
ZWxzZSB7DQogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsg
bWF4KHNpemUoKSwgX19uKTsNCiAgICAgICAgICB1bnNpZ25lZCBpbnQqIF9f
cSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7DQogICAgICAgICAgaXRlcmF0b3Ig
X19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3Es
IDApKTsNCiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwg
X19pKTsNCiAgICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24s
IGVuZCgpLCBfX2kpOw0KICAgICAgICAgIF9NX2RlYWxsb2NhdGUoKTsNCiAg
ICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9f
V09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOw0KICAgICAgICAgIF9NX3N0YXJ0
ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAg
IH0NCg0KICBwdWJsaWM6DQogICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy
biBfTV9zdGFydDsgfQ0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gX01fc3RhcnQ7IH0NCiAgICBpdGVyYXRvciBlbmQoKSB7
IHJldHVybiBfTV9maW5pc2g7IH0NCiAgICBjb25zdF9pdGVyYXRvciBlbmQo
KSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0NCg0KICAgIHJldmVyc2Vf
aXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihl
bmQoKSk7IH0NCiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigp
IGNvbnN0IHsNCiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
KGVuZCgpKTsNCiAgICB9DQogICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkg
eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQ0KICAgIGNv
bnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsNCiAgICAgIHJl
dHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOw0KICAgIH0N
Cg0KICAgIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90
eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0NCiAgICBzaXplX3R5cGUgbWF4X3Np
emUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9DQogICAgc2l6
ZV90eXBlIGNhcGFjaXR5KCkgY29uc3Qgew0KICAgICAgcmV0dXJuIHNpemVf
dHlwZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSwgMCkgLSBi
ZWdpbigpKTsNCiAgICB9DQogICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0NCg0KICAgIHJlZmVyZW5jZSBvcGVy
YXRvcltdKHNpemVfdHlwZSBfX24pDQogICAgICB7IHJldHVybiAqKGJlZ2lu
KCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0NCiAgICBjb25zdF9yZWZl
cmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25zdA0KICAgICAg
eyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOyB9
DQoNCiAgICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNv
bnN0IHsNCiAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQ0KICAgICAg
ICBfX3Rocm93X3JhbmdlX2Vycm9yKCJ2ZWN0b3I8Ym9vbD4iKTsNCiAgICB9
DQoNCiAgICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikNCiAgICAgIHsg
X01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQ0K
ICAgIGNvbnN0X3JlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKSBjb25zdA0K
ICAgICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtf
X25dOyB9DQoNCiAgICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpDQogICAgICA6IF9CdmVj
dG9yX2Jhc2U8X0FsbG9jPihfX2EpIHt9DQoNCiAgICB2ZWN0b3Ioc2l6ZV90
eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLA0KICAgICAgICAgICAgICBjb25zdCBh
bGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkNCiAgICAg
IDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkNCiAgICB7DQogICAgICBf
TV9pbml0aWFsaXplKF9fbik7DQogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3As
IF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsNCiAgICB9
DQoNCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikNCiAgICAg
IDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KGFsbG9jYXRvcl90eXBlKCkpDQog
ICAgew0KICAgICAgX01faW5pdGlhbGl6ZShfX24pOw0KICAgICAgZmlsbChf
TV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgMCk7DQogICAgfQ0K
DQogICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KSA6IF9CdmVjdG9yX2Jh
c2U8X0FsbG9jPihfX3guZ2V0X2FsbG9jYXRvcigpKSB7DQogICAgICBfTV9p
bml0aWFsaXplKF9feC5zaXplKCkpOw0KICAgICAgY29weShfX3guYmVnaW4o
KSwgX194LmVuZCgpLCBfTV9zdGFydCk7DQogICAgfQ0KDQoNCg0KICAgIHRl
bXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4NCiAgICB2b2lkIF9NX2luaXRpYWxp
emVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9fdHJ1
ZV90eXBlKSB7DQogICAgICBfTV9pbml0aWFsaXplKF9fbik7DQogICAgICBm
aWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+
MCA6IDApOw0KICAgIH0NCg0KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4NCiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUp
IHsNCiAgICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX19maXJzdCwgX19sYXN0
LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsNCiAgICB9DQoNCiAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+DQogICAgdmVjdG9y
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCwNCiAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0g
YWxsb2NhdG9yX3R5cGUoKSkNCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxs
b2M+KF9fYSkNCiAgICB7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19p
bnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsN
CiAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJzdCwgX19sYXN0
LCBfSW50ZWdyYWwoKSk7DQogICAgfQ0KDQogICAgfnZlY3RvcigpIHsgfQ0K
DQogICAgdmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yJiBfX3gpIHsN
CiAgICAgIGlmICgmX194ID09IHRoaXMpIHJldHVybiAqdGhpczsNCiAgICAg
IGlmIChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgew0KICAgICAgICBfTV9k
ZWFsbG9jYXRlKCk7DQogICAgICAgIF9NX2luaXRpYWxpemUoX194LnNpemUo
KSk7DQogICAgICB9DQogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5k
KCksIGJlZ2luKCkpOw0KICAgICAgX01fZmluaXNoID0gYmVnaW4oKSArIGRp
ZmZlcmVuY2VfdHlwZShfX3guc2l6ZSgpKTsNCiAgICAgIHJldHVybiAqdGhp
czsNCiAgICB9DQoNCg0KDQoNCg0KDQogICAgdm9pZCBfTV9maWxsX2Fzc2ln
bihzaXplX3QgX19uLCBib29sIF9feCkgew0KICAgICAgaWYgKF9fbiA+IHNp
emUoKSkgew0KICAgICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9v
Zl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOw0KICAgICAgICBpbnNlcnQoZW5k
KCksIF9fbiAtIHNpemUoKSwgX194KTsNCiAgICAgIH0NCiAgICAgIGVsc2Ug
ew0KICAgICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7DQogICAg
ICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9f
eCA/IH4wIDogMCk7DQogICAgICB9DQogICAgfQ0KDQogICAgdm9pZCBhc3Np
Z24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsgX01fZmlsbF9hc3NpZ24oX19u
LCBfX3gpOyB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+DQogICAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0KSB7DQogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9J
bnRlZ3JhbDsNCiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBf
X2xhc3QsIF9JbnRlZ3JhbCgpKTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgX0ludGVnZXI+DQogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2go
X0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpDQog
ICAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3QpIF9fbiwgKGJvb2wpIF9f
dmFsKTsgfQ0KDQogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+DQog
ICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQ0KICAgICAgeyBf
TV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0KSk7IH0NCg0KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LA0KICAgICAg
ICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsNCiAgICAg
IGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsNCiAgICAgIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsr
X19maXJzdCkNCiAgICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7DQogICAgICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpDQogICAgICAgIGVyYXNlKF9fY3VyLCBl
bmQoKSk7DQogICAgICBlbHNlDQogICAgICAgIGluc2VydChlbmQoKSwgX19m
aXJzdCwgX19sYXN0KTsNCiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyYXRvcj4NCiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0Zv
cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz
dCwNCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90
YWcpIHsNCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7DQogICAgICBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsNCiAgICAgIGlmIChfX2xl
biA8IHNpemUoKSkNCiAgICAgICAgZXJhc2UoY29weShfX2ZpcnN0LCBfX2xh
c3QsIGJlZ2luKCkpLCBlbmQoKSk7DQogICAgICBlbHNlIHsNCiAgICAgICAg
X0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7DQogICAgICAgIGFk
dmFuY2UoX19taWQsIHNpemUoKSk7DQogICAgICAgIGNvcHkoX19maXJzdCwg
X19taWQsIGJlZ2luKCkpOw0KICAgICAgICBpbnNlcnQoZW5kKCksIF9fbWlk
LCBfX2xhc3QpOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIHZvaWQgcmVzZXJ2
ZShzaXplX3R5cGUgX19uKSB7DQogICAgICBpZiAoY2FwYWNpdHkoKSA8IF9f
bikgew0KICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxv
YyhfX24pOw0KICAgICAgICBfTV9maW5pc2ggPSBjb3B5KGJlZ2luKCksIGVu
ZCgpLCBpdGVyYXRvcihfX3EsIDApKTsNCiAgICAgICAgX01fZGVhbGxvY2F0
ZSgpOw0KICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7DQog
ICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiArIF9fV09S
RF9CSVQgLSAxKS9fX1dPUkRfQklUOw0KICAgICAgfQ0KICAgIH0NCg0KICAg
IHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9DQogICAg
Y29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2lu
KCk7IH0NCiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkg
LSAxKTsgfQ0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyBy
ZXR1cm4gKihlbmQoKSAtIDEpOyB9DQogICAgdm9pZCBwdXNoX2JhY2soYm9v
bCBfX3gpIHsNCiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRf
b2Zfc3RvcmFnZSkNCiAgICAgICAgKl9NX2ZpbmlzaCsrID0gX194Ow0KICAg
ICAgZWxzZQ0KICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOw0K
ICAgIH0NCiAgICB2b2lkIHN3YXAodmVjdG9yPGJvb2wsIF9BbGxvYz4mIF9f
eCkgew0KICAgICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQp
Ow0KICAgICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7
DQogICAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9l
bmRfb2Zfc3RvcmFnZSk7DQogICAgfQ0KICAgIGl0ZXJhdG9yIGluc2VydChp
dGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJvb2woKSkgew0KICAg
ICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigp
Ow0KICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9y
YWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpDQogICAgICAgICpfTV9maW5p
c2grKyA9IF9feDsNCiAgICAgIGVsc2UNCiAgICAgICAgX01faW5zZXJ0X2F1
eChfX3Bvc2l0aW9uLCBfX3gpOw0KICAgICAgcmV0dXJuIGJlZ2luKCkgKyBf
X247DQogICAgfQ0KDQoNCg0KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdl
cj4NCiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bv
cywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsNCiAgICAgIF9NX2ZpbGxf
aW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7DQogICAgfQ0KDQogICAgdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPg0KICAgIHZvaWQgX01faW5zZXJ0
X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Zh
bHNlX3R5cGUpIHsNCiAgICAgIF9NX2luc2VydF9yYW5nZShfX3BvcywgX19m
aXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsN
CiAgICB9DQoNCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
DQogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwNCiAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QpIHsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2lu
dGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOw0K
ICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24sIF9fZmlyc3Qs
IF9fbGFzdCwgX0ludGVncmFsKCkpOw0KICAgIH0NCg0KICAgIHZvaWQgX01f
ZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9f
biwgYm9vbCBfX3gpIHsNCiAgICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOw0K
ICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7DQogICAg
ICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2Zpbmlz
aCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsNCiAgICAgICAgZmlsbChfX3Bv
c2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9f
eCk7DQogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19u
KTsNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICBzaXplX3R5cGUg
X19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOw0KICAgICAgICB1
bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7DQogICAg
ICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwg
aXRlcmF0b3IoX19xLCAwKSk7DQogICAgICAgIGZpbGxfbihfX2ksIF9fbiwg
X194KTsNCiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBl
bmQoKSwgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOw0KICAgICAgICBf
TV9kZWFsbG9jYXRlKCk7DQogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g
X19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7DQog
ICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsNCiAgICAgIH0N
CiAgICB9DQoNCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u
LCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgew0KICAgICAgX01fZmlsbF9p
bnNlcnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOw0KICAgIH0NCg0KICAgIHZv
aWQgcG9wX2JhY2soKSB7IC0tX01fZmluaXNoOyB9DQogICAgaXRlcmF0b3Ig
ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgew0KICAgICAgaWYgKF9fcG9z
aXRpb24gKyAxICE9IGVuZCgpKQ0KICAgICAgICBjb3B5KF9fcG9zaXRpb24g
KyAxLCBlbmQoKSwgX19wb3NpdGlvbik7DQogICAgICAgIC0tX01fZmluaXNo
Ow0KICAgICAgcmV0dXJuIF9fcG9zaXRpb247DQogICAgfQ0KICAgIGl0ZXJh
dG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkg
ew0KICAgICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBfX2Zp
cnN0KTsNCiAgICAgIHJldHVybiBfX2ZpcnN0Ow0KICAgIH0NCiAgICB2b2lk
IHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBfX3ggPSBib29s
KCkpIHsNCiAgICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQ0KICAgICAg
ICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbmV3X3NpemUp
LCBlbmQoKSk7DQogICAgICBlbHNlDQogICAgICAgIGluc2VydChlbmQoKSwg
X19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsNCiAgICB9DQogICAgdm9pZCBm
bGlwKCkgew0KICAgICAgZm9yICh1bnNpZ25lZCBpbnQqIF9fcCA9IF9NX3N0
YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZTsgKytfX3ApDQog
ICAgICAgICpfX3AgPSB+Kl9fcDsNCiAgICB9DQoNCiAgICB2b2lkIGNsZWFy
KCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0NCiAgfTsNCg0KDQp0eXBl
ZGVmIHZlY3Rvcjxib29sLCBhbGxvYz4gYml0X3ZlY3RvcjsNCg0KfQ0KIyAz
OSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X3ZlY3Rvci5oIiAyIDMNCiMgNDQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMNCg0KDQpu
YW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4N
CiAgICBsb2NhbGUNCiAgICBsb2NhbGU6OmNvbWJpbmUoY29uc3QgbG9jYWxl
JiBfX290aGVyKQ0KICAgIHsNCiAgICAgIGxvY2FsZSBfX2NvcHkoKnRoaXMp
Ow0KICAgICAgX19jb3B5Ll9NX2ltcGwtPl9NX3JlcGxhY2VfZmFjZXQoX19v
dGhlci5fTV9pbXBsLCAmX0ZhY2V0OjppZCk7DQogICAgICByZXR1cm4gX19j
b3B5Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4NCiAgICBib29sDQog
ICAgbG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsDQogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fczIpIGNvbnN0DQogICAgew0KICAgICAgdHlwZWRlZiBzdGQ6
OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsNCiAgICAgIGNvbnN0
IF9fY29sbGF0ZV90eXBlKiBfX2Zjb2xsID0gJnVzZV9mYWNldDxfX2NvbGxh
dGVfdHlwZT4oKnRoaXMpOw0KICAgICAgcmV0dXJuIChfX2Zjb2xsLT5jb21w
YXJlKF9fczEuZGF0YSgpLCBfX3MxLmRhdGEoKSArIF9fczEubGVuZ3RoKCks
DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zMi5kYXRhKCks
IF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsNCiAgICB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pg0KICAgIGNvbnN0IF9GYWNl
dCYNCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykNCiAgICB7
DQogICAgICB0eXBlZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9f
dmVjX2ZhY2V0Ow0KICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01f
aW5kZXg7DQogICAgICBfX3ZlY19mYWNldCogX19mYWNldCA9IF9fbG9jLl9N
X2ltcGwtPl9NX2ZhY2V0czsNCiAgICAgIGNvbnN0IGxvY2FsZTo6ZmFjZXQq
IF9fZnAgPSAoKl9fZmFjZXQpW19faV07DQogICAgICBpZiAoX19mcCA9PSAw
IHx8IF9faSA+PSBfX2ZhY2V0LT5zaXplKCkpDQogICAgICAgIF9fdGhyb3df
YmFkX2Nhc3QoKTsNCiAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBf
RmFjZXQmPigqX19mcCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9GYWNldD4NCiAgICBib29sDQogICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2Fs
ZSYgX19sb2MpIHRocm93KCkNCiAgICB7DQogICAgICB0eXBlZGVmIGxvY2Fs
ZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9fdmVjX2ZhY2V0Ow0KICAgICAgc2l6
ZV90IF9faSA9IF9GYWNldDo6aWQuX01faW5kZXg7DQogICAgICBfX3ZlY19m
YWNldCogX19mYWNldCA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsNCiAg
ICAgIHJldHVybiAoX19pIDwgX19mYWNldC0+c2l6ZSgpICYmICgqX19mYWNl
dClbX19pXSAhPSAwKTsNCiAgICB9DQoNCg0KDQoNCg0KDQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX0NoYXJUPg0KICAgIF9J
bkl0ZXINCiAgICBfX21hdGNoX3BhcmFsbGVsKF9Jbkl0ZXIgX19zLCBfSW5J
dGVyIF9fZW5kLCBpbnQgX19udGFyZ3MsDQogICAgICAgICAgICAgICAgICAg
ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiogX190YXJnZXRzLA0KICAg
ICAgICAgICAgICAgICAgICAgaW50KiBfX21hdGNoZXMsIGludCYgX19yZW1h
aW4sIGJvb2wmIF9fZW9mKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsNCiAgICAgIF9fZW9mID0g
ZmFsc2U7DQogICAgICBmb3IgKGludCBfX3RpID0gMDsgX190aSA8IF9fbnRh
cmdzOyArK19fdGkpDQogICAgICAgIF9fbWF0Y2hlc1tfX3RpXSA9IF9fdGk7
DQogICAgICBfX3JlbWFpbiA9IF9fbnRhcmdzOw0KICAgICAgc2l6ZV90IF9f
cG9zID0gMDsNCiAgICAgIGRvDQogICAgICAgIHsNCiAgICAgICAgICBpbnQg
X190aSA9IDA7DQogICAgICAgICAgd2hpbGUgKF9fdGkgPCBfX3JlbWFpbiAm
JiBfX3BvcyA9PSBfX3RhcmdldHNbX19tYXRjaGVzW19fdGldXS5zaXplKCkp
DQogICAgICAgICAgICArK19fdGk7DQogICAgICAgICAgaWYgKF9fdGkgPT0g
X19yZW1haW4pDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChf
X3BvcyA9PSAwKSBfX3JlbWFpbiA9IDA7DQogICAgICAgICAgICAgIHJldHVy
biBfX3M7DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKF9fcyA9PSBf
X2VuZCkNCiAgICAgICAgICAgIF9fZW9mID0gdHJ1ZTsNCiAgICAgICAgICBi
b29sIF9fbWF0Y2hlZCA9IGZhbHNlOw0KICAgICAgICAgIGZvciAoaW50IF9f
dGkyID0gMDsgX190aTIgPCBfX3JlbWFpbjsgKQ0KICAgICAgICAgICAgew0K
ICAgICAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlJiBfX3RhcmdldCA9
IF9fdGFyZ2V0c1tfX21hdGNoZXNbX190aTJdXTsNCiAgICAgICAgICAgICAg
aWYgKF9fcG9zIDwgX190YXJnZXQuc2l6ZSgpKQ0KICAgICAgICAgICAgICAg
IHsNCiAgICAgICAgICAgICAgICAgIGlmIChfX2VvZiB8fCBfX3RhcmdldFtf
X3Bvc10gIT0gKl9fcykNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAg
ICAgICAgICAgICAgICAgIF9fbWF0Y2hlc1tfX3RpMl0gPSBfX21hdGNoZXNb
LS1fX3JlbWFpbl07DQogICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIF9f
bWF0Y2hlZCA9IHRydWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg
ICAgICArK19fdGkyOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGlmIChf
X21hdGNoZWQpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICsrX19z
Ow0KICAgICAgICAgICAgICArK19fcG9zOw0KICAgICAgICAgICAgfQ0KICAg
ICAgICAgIGZvciAoaW50IF9fdGkzID0gMDsgX190aTMgPCBfX3JlbWFpbjsp
DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChfX3BvcyA+IF9f
dGFyZ2V0c1tfX21hdGNoZXNbX190aTNdXS5zaXplKCkpDQogICAgICAgICAg
ICAgICAgew0KICAgICAgICAgICAgICAgICAgX19tYXRjaGVzW19fdGkzXSA9
IF9fbWF0Y2hlc1stLV9fcmVtYWluXTsNCiAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgKytf
X3RpMzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgd2hpbGUg
KF9fcmVtYWluKTsNCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfRm9ybWF0X2NhY2hlPF9D
aGFyVD46Ol9Gb3JtYXRfY2FjaGUoKQ0KICAgIDogX01fdmFsaWQodHJ1ZSks
IF9NX3VzZV9ncm91cGluZyhmYWxzZSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0
ZTw+DQogICAgX0Zvcm1hdF9jYWNoZTxjaGFyPjo6X0Zvcm1hdF9jYWNoZSgp
Ow0KDQogIHRlbXBsYXRlPD4NCiAgICBfRm9ybWF0X2NhY2hlPHdjaGFyX3Q+
OjpfRm9ybWF0X2NhY2hlKCk7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPg0KICAgIHZvaWQNCiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9N
X3BvcHVsYXRlKGlvc19iYXNlJiBfX2lvKQ0KICAgIHsNCiAgICAgIGxvY2Fs
ZSBfX2xvYyA9IF9faW8uZ2V0bG9jICgpOw0KICAgICAgbnVtcHVuY3Q8X0No
YXJUPiBjb25zdCYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+
ID4oX19sb2MpOw0KICAgICAgX01fdHJ1ZW5hbWUgPSBfX25wLnRydWVuYW1l
KCk7DQogICAgICBfTV9mYWxzZW5hbWUgPSBfX25wLmZhbHNlbmFtZSgpOw0K
ICAgICAgX01fdGhvdXNhbmRzX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgp
Ow0KICAgICAgX01fZGVjaW1hbF9wb2ludCA9IF9fbnAuZGVjaW1hbF9wb2lu
dCgpOw0KICAgICAgX01fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7DQog
ICAgICBfTV91c2VfZ3JvdXBpbmcgPSBfTV9ncm91cGluZy5zaXplKCkgIT0g
MCAmJiBfTV9ncm91cGluZy5kYXRhKClbMF0gIT0gMDsNCiAgICAgIF9NX3Zh
bGlkID0gdHJ1ZTsNCiAgICB9DQoNCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4NCiAgICB2b2lkDQogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+
OjoNCiAgICBfU19jYWxsYmFjayhpb3NfYmFzZTo6ZXZlbnQgX19ldiwgaW9z
X2Jhc2UmIF9faW9zLCBpbnQgX19peCkgdGhyb3coKQ0KICAgIHsNCiAgICAg
IHZvaWQqJiBfX3AgPSBfX2lvcy5wd29yZChfX2l4KTsNCiAgICAgIHN3aXRj
aCAoX19ldikNCiAgICAgICAgew0KICAgICAgICBjYXNlIGlvc19iYXNlOjpl
cmFzZV9ldmVudDoNCiAgICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8X0Zv
cm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKTsNCiAgICAgICAgICBfX3AgPSAw
Ow0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIGlvc19iYXNlOjpj
b3B5Zm10X2V2ZW50Og0KDQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7
IF9fcCA9IG5ldyBfRm9ybWF0X2NhY2hlPF9DaGFyVD47IH0NCiAgICAgICAg
ICBjYXRjaCguLi4pDQogICAgICAgICAgICB7IH0NCiAgICAgICAgICBicmVh
azsNCiAgICAgICAgY2FzZSBpb3NfYmFzZTo6aW1idWVfZXZlbnQ6DQogICAg
ICAgICAgc3RhdGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19w
KS0+X01fdmFsaWQgPSBmYWxzZTsNCiAgICAgICAgICBicmVhazsNCiAgICAg
ICAgfQ0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQog
ICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kg0KICAgIF9Gb3JtYXRfY2FjaGU8
X0NoYXJUPjo6X1NfZ2V0KGlvc19iYXNlJiBfX2lvcykNCiAgICB7DQogICAg
ICBpZiAoIV9TX3B3b3JkX2l4KQ0KICAgICAgICBfU19wd29yZF9peCA9IGlv
c19iYXNlOjp4YWxsb2MoKTsNCiAgICAgIHZvaWQqJiBfX3AgPSBfX2lvcy5w
d29yZChfU19wd29yZF9peCk7DQoNCg0KICAgICAgaWYgKF9fcCA9PSAwKQ0K
ICAgICAgICB7DQogICAgICAgICAgYXV0b19wdHI8X0Zvcm1hdF9jYWNoZTxf
Q2hhclQ+ID4gX19hcChuZXcgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KTsNCiAg
ICAgICAgICBfX2lvcy5yZWdpc3Rlcl9jYWxsYmFjaygmX0Zvcm1hdF9jYWNo
ZTxfQ2hhclQ+OjpfU19jYWxsYmFjaywNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfU19wd29yZF9peCk7DQogICAgICAgICAgX19wID0g
X19hcC5yZWxlYXNlKCk7DQogICAgICAgIH0NCiAgICAgIF9Gb3JtYXRfY2Fj
aGU8X0NoYXJUPiogX19uY3AgPSBzdGF0aWNfY2FzdDxfRm9ybWF0X2NhY2hl
PF9DaGFyVD4qPihfX3ApOw0KICAgICAgaWYgKCFfX25jcC0+X01fdmFsaWQp
DQogICAgICAgIF9fbmNwLT5fTV9wb3B1bGF0ZShfX2lvcyk7DQoNCiAgICAg
IHJldHVybiBfX25jcDsNCiAgICB9DQojIDI1MCAiL2hvbWUvbWRlaWwvYmlu
Ly4uL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
Pg0KICAgIHZvaWQNCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0K
ICAgIF9NX2V4dHJhY3QoX0luSXRlciAsIF9Jbkl0ZXIgLCBpb3NfYmFzZSYg
LA0KICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmICwgY2hhciog
LA0KICAgICAgICAgICAgICAgaW50JiAsIGJvb2wgKSBjb25zdA0KICAgIHsN
Cg0KICAgIH0NCg0KICB0ZW1wbGF0ZTw+DQogICAgdm9pZA0KICAgIG51bV9n
ZXQ8Y2hhciwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+OjoNCiAgICBf
TV9leHRyYWN0KGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gX19iZWcsDQog
ICAgICAgICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IF9fZW5k
LCBpb3NfYmFzZSYgX19pbywNCiAgICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLCBpbnQmIF9fYmFzZSwNCiAg
ICAgICAgICAgICAgIGJvb2wgX19mcCkgY29uc3Q7DQoNCg0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBf
SW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBk
b19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIGJvb2wmIF9fdikgY29uc3QNCiAgICB7DQoNCiAgICAgIGlmICghKF9f
aW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxwaGEpKQ0KICAgICAgICB7
DQoNCg0KDQoNCg0KDQogICAgICAgICAgY2hhciBfX3h0cmNbMzJdID0geydc
MCd9Ow0KICAgICAgICAgIGludCBfX2Jhc2U7DQogICAgICAgICAgX01fZXh0
cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFz
ZSwgZmFsc2UpOw0KDQoNCiAgICAgICAgICBjaGFyKiBfX3Nhbml0eTsNCiAg
ICAgICAgICAoKihfX19lcnJubygpKSkgPSAwOw0KICAgICAgICAgIGxvbmcg
X19sID0gc3RydG9sKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOw0KICAg
ICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAg
ICAgICAgICAgICYmIF9fbCA8PSAxDQogICAgICAgICAgICAgICYmIF9fc2Fu
aXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihfX19l
cnJubygpKSkgPT0gMCkNCiAgICAgICAgICAgIF9fdiA9IF9fbDsNCiAgICAg
ICAgICBlbHNlDQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp
bGJpdDsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGVsc2UNCiAgICAgICAgew0K
ICAgICAgICAgIHR5cGVkZWYgX0Zvcm1hdF9jYWNoZTxjaGFyX3R5cGU+IF9f
ZmNhY2hlX3R5cGU7DQogICAgICAgICAgX19mY2FjaGVfdHlwZSogX19mbXQg
PSBfX2ZjYWNoZV90eXBlOjpfU19nZXQoX19pbyk7DQogICAgICAgICAgY29u
c3QgY2hhcl90eXBlKiBfX3RydWUgPSBfX2ZtdC0+X01fdHJ1ZW5hbWUuY19z
dHIoKTsNCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmFsc2UgPSBf
X2ZtdC0+X01fZmFsc2VuYW1lLmNfc3RyKCk7DQogICAgICAgICAgY29uc3Qg
c2l6ZV90IF9fdHJ1ZWxlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Ry
dWUpIC0gMTsNCiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZWxlbiA9
IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX2ZhbHNlKSAtIDE7DQoNCiAgICAg
ICAgICBmb3IgKHNpemVfdCBfX3BvcyA9IDA7IF9fYmVnICE9IF9fZW5kOyAr
K19fcG9zKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBjaGFyX3R5
cGUgX19jID0gKl9fYmVnKys7DQogICAgICAgICAgICAgIGJvb2wgX190ZXN0
ZiA9IF9fYyA9PSBfX2ZhbHNlW19fcG9zXTsNCiAgICAgICAgICAgICAgYm9v
bCBfX3Rlc3R0ID0gX19jID09IF9fdHJ1ZVtfX3Bvc107DQogICAgICAgICAg
ICAgIGlmICghKF9fdGVzdGYgfHwgX190ZXN0dCkpDQogICAgICAgICAgICAg
ICAgew0KICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZh
aWxiaXQ7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAg
ICAgICB9DQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGYgJiYgX19w
b3MgPT0gX19mYWxzZWxlbikNCiAgICAgICAgICAgICAgICB7DQogICAgICAg
ICAgICAgICAgICBfX3YgPSAwOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7
DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlIGlmIChf
X3Rlc3R0ICYmIF9fcG9zID09IF9fdHJ1ZWxlbikNCiAgICAgICAgICAgICAg
ICB7DQogICAgICAgICAgICAgICAgICBfX3YgPSAxOw0KICAgICAgICAgICAg
ICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
fQ0KICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkNCiAgICAgICAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7DQogICAgICAgIH0NCg0KICAg
ICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KDQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0ZXIN
CiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dldChp
dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc2hv
cnQmIF9fdikgY29uc3QNCiAgICB7DQoNCg0KDQogICAgICBjaGFyIF9feHRy
Y1szMl09IHsnXDAnfTsNCiAgICAgIGludCBfX2Jhc2U7DQogICAgICBfTV9l
eHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19i
YXNlLCBmYWxzZSk7DQoNCg0KICAgICAgY2hhciogX19zYW5pdHk7DQogICAg
ICAoKihfX19lcnJubygpKSkgPSAwOw0KICAgICAgbG9uZyBfX2wgPSBzdHJ0
b2woX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7DQogICAgICBpZiAoIShf
X2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQ0KICAgICAgICAgICYmIF9fc2Fu
aXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihfX19l
cnJubygpKSkgPT0gMA0KICAgICAgICAgICYmIF9fbCA+PSAoLTMyNzY3LTEp
ICYmIF9fbCA8PSAzMjc2NykNCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8
c2hvcnQ+KF9fbCk7DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlv
c19iYXNlOjpmYWlsYml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7DQogICAg
fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0
ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIGludCYgX192KSBjb25zdA0KICAgIHsNCg0KDQoN
CiAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsNCiAgICAgIGludCBf
X2Jhc2U7DQogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywg
X19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7DQoNCg0KICAgICAgY2hh
ciogX19zYW5pdHk7DQogICAgICAoKihfX19lcnJubygpKSkgPSAwOw0KICAg
ICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5pdHksIF9fYmFz
ZSk7DQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQ0K
ICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkg
PT0gJ1wwJyAmJiAoKihfX19lcnJubygpKSkgPT0gMA0KICAgICAgICAgICYm
IF9fbCA+PSAoLTIxNDc0ODM2NDcgLTEpICYmIF9fbCA8PSAyMTQ3NDgzNjQ3
KQ0KICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDxpbnQ+KF9fbCk7DQogICAg
ICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0K
DQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0
ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dl
dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
bG9uZyYgX192KSBjb25zdA0KICAgIHsNCg0KDQoNCiAgICAgIGNoYXIgX194
dHJjWzMyXT0geydcMCd9Ow0KICAgICAgaW50IF9fYmFzZTsNCiAgICAgIF9N
X2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBf
X2Jhc2UsIGZhbHNlKTsNCg0KDQogICAgICBjaGFyKiBfX3Nhbml0eTsNCiAg
ICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAgICBsb25nIF9fbCA9IHN0
cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsNCiAgICAgIGlmICgh
KF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAgICAgJiYgX19z
YW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqKF9f
X2Vycm5vKCkpKSA9PSAwKQ0KICAgICAgICBfX3YgPSBfX2w7DQogICAgICBl
bHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KDQog
ICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KIyA0NTAgIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNj
IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0
ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0DQog
ICAgew0KDQoNCg0KICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307DQog
ICAgICBpbnQgX19iYXNlOw0KICAgICAgX01fZXh0cmFjdChfX2JlZywgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOw0KDQoN
CiAgICAgIGNoYXIqIF9fc2FuaXR5Ow0KICAgICAgKCooX19fZXJybm8oKSkp
ID0gMDsNCiAgICAgIHVuc2lnbmVkIGxvbmcgX191bCA9IHN0cnRvdWwoX194
dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7DQogICAgICBpZiAoIShfX2VyciAm
IGlvc19iYXNlOjpmYWlsYml0KQ0KICAgICAgICAgICYmIF9fc2FuaXR5ICE9
IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihfX19lcnJubygp
KSkgPT0gMA0KICAgICAgICAgICYmIF9fdWwgPD0gNjU1MzUpDQogICAgICAg
IF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX3VsKTsNCiAg
ICAgIGVsc2UNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7
DQoNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPg0KICAgIF9Jbkl0
ZXINCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Og0KICAgIGRvX2dl
dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sDQogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
dW5zaWduZWQgaW50JiBfX3YpIGNvbnN0DQogICAgew0KDQoNCg0KICAgICAg
Y2hhciBfX3h0cmNbMzJdPSB7J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0K
ICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf
X3h0cmMsIF9fYmFzZSwgZmFsc2UpOw0KDQoNCiAgICAgIGNoYXIqIF9fc2Fu
aXR5Ow0KICAgICAgKCooX19fZXJybm8oKSkpID0gMDsNCiAgICAgIHVuc2ln
bmVkIGxvbmcgX191bCA9IHN0cnRvdWwoX194dHJjLCAmX19zYW5pdHksIF9f
YmFzZSk7DQogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0
KQ0KICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5p
dHkgPT0gJ1wwJyAmJiAoKihfX19lcnJubygpKSkgPT0gMA0KICAgICAgICAg
ICYmIF9fdWwgPD0gKDIxNDc0ODM2NDcgKiAyVSArIDEpKQ0KICAgICAgICBf
X3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fdWwpOw0KICAgICAg
ZWxzZQ0KICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCg0K
ICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAgX0luSXRlcg0K
ICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAgZG9fZ2V0KGl0
ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p
bywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNp
Z25lZCBsb25nJiBfX3YpIGNvbnN0DQogICAgew0KDQoNCg0KICAgICAgY2hh
ciBfX3h0cmNbMzJdID0geydcMCd9Ow0KICAgICAgaW50IF9fYmFzZTsNCiAg
ICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194
dHJjLCBfX2Jhc2UsIGZhbHNlKTsNCg0KDQogICAgICBjaGFyKiBfX3Nhbml0
eTsNCiAgICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAgICB1bnNpZ25l
ZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jh
c2UpOw0KICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkN
CiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5
ID09ICdcMCcgJiYgKCooX19fZXJybm8oKSkpID09IDApDQogICAgICAgIF9f
diA9IF9fdWw7DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19i
YXNlOjpmYWlsYml0Ow0KDQogICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0K
IyA1NTggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L2xvY2FsZV9mYWNldHMudGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVt
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBl
IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3Yp
IGNvbnN0DQogICAgew0KDQoNCg0KICAgICAgY2hhciBfX3h0cmNbMzJdPSB7
J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX01fZXh0cmFjdChf
X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgdHJ1
ZSk7DQoNCg0KICAgICAgY2hhciogX19zYW5pdHk7DQogICAgICAoKihfX19l
cnJubygpKSkgPSAwOw0KDQoNCg0KICAgICAgZmxvYXQgX19mID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHN0cnRvZChfX3h0cmMsICZfX3Nhbml0eSkpOw0KDQog
ICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQ0KICAgICAg
ICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1ww
JyAmJiAoKihfX19lcnJubygpKSkgPT0gMCkNCiAgICAgICAgX192ID0gX19m
Ow0KICAgICAgZWxzZQ0KICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp
bGJpdDsNCg0KICAgICAgcmV0dXJuIF9fYmVnOw0KICAgIH0NCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAg
X0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAg
ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCBkb3VibGUmIF9fdikgY29uc3QNCiAgICB7DQoNCg0KDQogICAgICBj
aGFyIF9feHRyY1szMl09IHsnXDAnfTsNCiAgICAgIGludCBfX2Jhc2U7DQog
ICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
eHRyYywgX19iYXNlLCB0cnVlKTsNCg0KDQogICAgICBjaGFyKiBfX3Nhbml0
eTsNCiAgICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7DQogICAgICBkb3VibGUg
X19kID0gc3RydG9kKF9feHRyYywgJl9fc2FuaXR5KTsNCiAgICAgIGlmICgh
KF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpDQogICAgICAgICAgJiYgX19z
YW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqKF9f
X2Vycm5vKCkpKSA9PSAwKQ0KICAgICAgICBfX3YgPSBfX2Q7DQogICAgICBl
bHNlDQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Ow0KDQog
ICAgICByZXR1cm4gX19iZWc7DQogICAgfQ0KIyA2NDEgIi9ob21lL21kZWls
L2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNj
IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4NCiAgICBfSW5JdGVyDQogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0
ZXI+OjoNCiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLA0KICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0DQogICAg
ew0KDQogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsNCiAgICAgIGlu
dCBfX2Jhc2U7DQogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19p
bywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsNCg0KDQogICAgICBp
b3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkg
JiBpb3NfYmFzZTo6YmFzZWZpZWxkOw0KICAgICAgY29uc3QgY2hhciogX19j
b252Ow0KICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpvY3Qp
DQogICAgICAgIF9fY29udiA9ICIlTG8iOw0KICAgICAgZWxzZSBpZiAoX19i
YXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkNCiAgICAgICAgX19jb252ID0g
IiVMWCI7DQogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSAwKQ0KICAg
ICAgICBfX2NvbnYgPSAiJUxpIjsNCiAgICAgIGVsc2UNCiAgICAgICAgX19j
b252ID0gIiVMZyI7DQoNCg0KICAgICAgbG9uZyBkb3VibGUgX19sZDsNCiAg
ICAgIGludCBfX3AgPSBzc2NhbmYoX194dHJjLCBfX2NvbnYsICZfX2xkKTsN
CiAgICAgIGlmIChfX3ANCiAgICAgICAgICAmJiBzdGF0aWNfY2FzdDx0eXBl
bmFtZSBfX3RyYWl0c190eXBlOjppbnRfdHlwZT4oX19wKQ0KICAgICAgICAh
PSBfX3RyYWl0c190eXBlOjplb2YoKSkNCiAgICAgICAgX192ID0gX19sZDsN
CiAgICAgIGVsc2UNCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi
aXQ7DQoNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+DQogICAg
X0luSXRlcg0KICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAg
ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywNCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB2b2lkKiYgX192KSBjb25zdA0KICAgIHsNCg0KICAgICAgdHlwZWRl
ZiBpb3NfYmFzZTo6Zm10ZmxhZ3MgZm10ZmxhZ3M7DQogICAgICBmbXRmbGFn
cyBfX2ZtdCA9IF9faW8uZmxhZ3MoKTsNCiAgICAgIGZtdGZsYWdzIF9fZm10
bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFzZWZp
ZWxkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6
OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7DQogICAgICBfX2lv
LmZsYWdzKF9fZm10ICYgX19mbXRtYXNrIHwgKGlvc19iYXNlOjpoZXggfCBp
b3NfYmFzZTo6c2hvd2Jhc2UpKTsNCg0KDQoNCg0KICAgICAgY2hhciBfX3h0
cmNbMzJdPSB7J1wwJ307DQogICAgICBpbnQgX19iYXNlOw0KICAgICAgX01f
ZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9f
YmFzZSwgZmFsc2UpOw0KDQoNCiAgICAgIGNoYXIqIF9fc2FuaXR5Ow0KICAg
ICAgKCooX19fZXJybm8oKSkpID0gMDsNCiAgICAgIHZvaWQqIF9fdnAgPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihzdHJ0b3VsKF9feHRyYywgJl9fc2Fu
aXR5LCBfX2Jhc2UpKTsNCiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6
OmZhaWxiaXQpDQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYm
ICpfX3Nhbml0eSA9PSAnXDAnICYmICgqKF9fX2Vycm5vKCkpKSA9PSAwKQ0K
ICAgICAgICBfX3YgPSBfX3ZwOw0KICAgICAgZWxzZQ0KICAgICAgICBfX2Vy
ciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsNCg0KDQogICAgICBfX2lvLmZsYWdz
KF9fZm10KTsNCiAgICAgIHJldHVybiBfX2JlZzsNCiAgICB9DQoNCg0KICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4N
CiAgICBpbmxpbmUgX091dEl0ZXINCiAgICBfX3BhZChfT3V0SXRlciBfX3Ms
IF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcpOw0KDQogIHRlbXBsYXRl
IDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9SYUl0ZXI+DQogICAgX1Jh
SXRlcg0KICAgIF9fcGFkKF9SYUl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBp
bnQgX19wYWRkaW5nLA0KICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnKQ0KICAgIHsNCiAgICAgIGZpbGxfbihfX3MsIF9fZmlsbCk7DQog
ICAgICByZXR1cm4gX19zICsgX19wYWRkaW5nOw0KICAgIH0NCg0KICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciwgdHlw
ZW5hbWUgX1RhZz4NCiAgICBfT3V0SXRlcg0KICAgIF9fcGFkKF9PdXRJdGVy
IF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywgX1RhZykNCiAg
ICB7DQogICAgICB3aGlsZSAoLS1fX3BhZGRpbmcgPj0gMCkgeyAqX19zID0g
X19maWxsOyArK19fczsgfQ0KICAgICAgcmV0dXJuIF9fczsNCiAgICB9DQoN
CiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXI+DQogICAgaW5saW5lIF9PdXRJdGVyDQogICAgX19wYWQoX091dEl0ZXIg
X19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nKQ0KICAgIHsNCiAg
ICAgIHJldHVybiBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nLA0KICAg
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfT3V0
SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOw0KICAgIH0NCg0KICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAg
ICBfT3V0SXRlcg0KICAgIF9fcGFkX251bWVyaWMoX091dEl0ZXIgX19zLCBp
b3NfYmFzZTo6Zm10ZmxhZ3MgLA0KICAgICAgICAgICAgICAgICAgX0NoYXJU
ICwgaW50ICwNCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogLCBf
Q2hhclQgY29uc3QqICwNCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25z
dCogKQ0KICB7DQoNCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQoNCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBvc3RyZWFtYnVmX2l0
ZXJhdG9yPF9DaGFyVD4NCiAgICBfX3BhZF9udW1lcmljKG9zdHJlYW1idWZf
aXRlcmF0b3I8X0NoYXJUPiBfX3MsIGlvc19iYXNlOjpmbXRmbGFncyBfX2Zs
YWdzLA0KICAgICAgICAgICAgICAgICAgX0NoYXJUIF9fZmlsbCwgaW50IF9f
d2lkdGgsIF9DaGFyVCBjb25zdCogX19maXJzdCwNCiAgICAgICAgICAgICAg
ICAgIF9DaGFyVCBjb25zdCogX19taWRkbGUsIF9DaGFyVCBjb25zdCogX19s
YXN0KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRv
cjxfQ2hhclQ+IF9fb3V0X2l0ZXI7DQogICAgICBpbnQgX19wYWRkaW5nID0g
X193aWR0aCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsNCiAgICAgIGlmIChfX3Bh
ZGRpbmcgPCAwKQ0KICAgICAgICBfX3BhZGRpbmcgPSAwOw0KICAgICAgaW9z
X2Jhc2U6OmZtdGZsYWdzIF9fYWZsYWdzID0gX19mbGFncyAmIGlvc19iYXNl
OjphZGp1c3RmaWVsZDsNCiAgICAgIGJvb2wgX190ZXN0ZmllbGQgPSBfX3Bh
ZGRpbmcgPT0gMCB8fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6bGVmdA0KICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IF9fYWZsYWdzID09IGlvc19iYXNl
OjppbnRlcm5hbDsNCg0KDQogICAgICBpZiAoX19maXJzdCAhPSBfX21pZGRs
ZSkNCiAgICAgICAgew0KICAgICAgICAgIGlmICghX190ZXN0ZmllbGQpDQog
ICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9fcGFkKF9fcywgX19maWxs
LCBfX3BhZGRpbmcpOw0KICAgICAgICAgICAgICBfX3BhZGRpbmcgPSAwOw0K
ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNvcHkoX19maXJzdCwgX19taWRk
bGUsIF9fcyk7DQogICAgICAgIH0NCiAgICAgIF9fb3V0X2l0ZXIgX19zMiA9
IF9fczsNCg0KICAgICAgaWYgKF9fcGFkZGluZyAmJiBfX2FmbGFncyAhPSBp
b3NfYmFzZTo6bGVmdCkNCiAgICAgICAgew0KICAgICAgICAgIF9fcGFkKF9f
czIsIF9fZmlsbCwgX19wYWRkaW5nKTsNCiAgICAgICAgICBfX3BhZGRpbmcg
PSAwOw0KICAgICAgICB9DQogICAgICBfX291dF9pdGVyIF9fczMgPSBjb3B5
KF9fbWlkZGxlLCBfX2xhc3QsIF9fczIpOw0KICAgICAgaWYgKF9fcGFkZGlu
ZykNCiAgICAgICAgX19wYWQoX19zMywgX19maWxsLCBfX3BhZGRpbmcpOw0K
ICAgICAgcmV0dXJuIF9fczM7DQogICAgfQ0KDQogIHRlbXBsYXRlIDx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPg0KICAgIF9PdXRJdGVy
DQogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6DQogICAgZG9fcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19m
aWxsLCBib29sIF9fdikgY29uc3QNCiAgICB7DQogICAgICBjb25zdCBfRm9y
bWF0X2NhY2hlPF9DaGFyVD4qIF9fZm10ID0gX0Zvcm1hdF9jYWNoZTxfQ2hh
clQ+OjpfU19nZXQoX19pbyk7DQogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3Mg
X19mbGFncyA9IF9faW8uZmxhZ3MoKTsNCg0KICAgICAgaWYgKChfX2ZsYWdz
ICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCkNCiAgICAgICAgew0KICAg
ICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsNCiAgICAgICAgICBy
ZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFs
c2UsIF9fdXYpOw0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIHsN
CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmlyc3Q7DQogICAgICAg
ICAgY29uc3QgY2hhcl90eXBlKiBfX2xhc3Q7DQogICAgICAgICAgaWYgKF9f
dikNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19maXJzdCA9IF9f
Zm10LT5fTV90cnVlbmFtZS5kYXRhKCk7DQogICAgICAgICAgICAgIF9fbGFz
dCA9IF9fZmlyc3QgKyBfX2ZtdC0+X01fdHJ1ZW5hbWUuc2l6ZSgpOw0KICAg
ICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAg
ICAgICAgICAgICAgX19maXJzdCA9IF9fZm10LT5fTV9mYWxzZW5hbWUuZGF0
YSgpOw0KICAgICAgICAgICAgICBfX2xhc3QgPSBfX2ZpcnN0ICsgX19mbXQt
Pl9NX2ZhbHNlbmFtZS5zaXplKCk7DQogICAgICAgICAgICB9DQogICAgICAg
ICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcyk7DQogICAgICAgIH0NCiAg
ICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQoNCg0KDQoNCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIF9DaGFyVD4NCiAgICBfQ2hhclQqDQogICAgX19ncm91cF9k
aWdpdHMoX0NoYXJUKiBfX3MsIF9DaGFyVCBfX2dyc2VwLCBjaGFyIGNvbnN0
KiBfX2dyb3VwaW5nLA0KICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0
KiBfX2dyZW5kLCBfQ2hhclQgY29uc3QqIF9fZmlyc3QsDQogICAgICAgICAg
ICAgICAgICAgIF9DaGFyVCBjb25zdCogX19sYXN0KQ0KICAgIHsNCiAgICAg
IGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gKl9fZ3JvdXBpbmcpDQogICAgICAg
IHsNCiAgICAgICAgICBfX3MgPSBfX2dyb3VwX2RpZ2l0cyhfX3MsIF9fZ3Jz
ZXAsDQogICAgICAgICAgICAgIChfX2dyb3VwaW5nICsgMSA9PSBfX2dyZW5k
ID8gX19ncm91cGluZyA6IF9fZ3JvdXBpbmcgKyAxKSwNCiAgICAgICAgICAg
ICAgX19ncmVuZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ3JvdXBpbmcpOw0K
ICAgICAgICAgIF9fZmlyc3QgPSBfX2xhc3QgLSAqX19ncm91cGluZzsNCiAg
ICAgICAgICAqX19zKysgPSBfX2dyc2VwOw0KICAgICAgICB9DQogICAgICBk
bw0KICAgICAgICB7DQogICAgICAgICAgKl9fcysrID0gKl9fZmlyc3QrKzsN
CiAgICAgICAgfQ0KICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsN
CiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQogIHRlbXBsYXRlIDx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyLCB0eXBlbmFtZSBfVmFs
dWVUPg0KICAgIF9PdXRJdGVyDQogICAgX19vdXRwdXRfaW50ZWdlcihfT3V0
SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBib29s
IF9fbmVnLA0KICAgICAgICAgICAgICBfVmFsdWVUIF9fdikNCiAgICB7DQoN
CiAgICAgIGNvbnN0IGxvbmcgX01fcm9vbSA9IG51bWVyaWNfbGltaXRzPF9W
YWx1ZVQ+OjpkaWdpdHMxMCAqIDIgKyA0Ow0KICAgICAgX0NoYXJUIF9fZGln
aXRzW19NX3Jvb21dOw0KICAgICAgX0NoYXJUKiBfX2Zyb250ID0gX19kaWdp
dHMgKyBfTV9yb29tOw0KICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxh
Z3MgPSBfX2lvLmZsYWdzKCk7DQogICAgICBjb25zdCBfRm9ybWF0X2NhY2hl
PF9DaGFyVD4qIF9fZm10ID0gX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19n
ZXQoX19pbyk7DQogICAgICBjaGFyIGNvbnN0KiBfX3RhYmxlID0gX19mbXQt
Pl9TX2xpdGVyYWxzICsgX19mbXQtPl9TX2RpZ2l0czsNCg0KICAgICAgaW9z
X2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gKF9fZmxhZ3MgJiBfX2lv
LmJhc2VmaWVsZCk7DQogICAgICBfQ2hhclQqIF9fc2lnbl9lbmQgPSBfX2Zy
b250Ow0KICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgp
DQogICAgICAgIHsNCiAgICAgICAgICBpZiAoX19mbGFncyAmIGlvc19iYXNl
Ojp1cHBlcmNhc2UpDQogICAgICAgICAgICBfX3RhYmxlICs9IDE2Ow0KICAg
ICAgICAgIGRvDQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtf
X3YgJiAxNV07DQogICAgICAgICAgd2hpbGUgKChfX3YgPj49IDQpICE9IDAp
Ow0KICAgICAgICAgIF9fc2lnbl9lbmQgPSBfX2Zyb250Ow0KICAgICAgICAg
IGlmIChfX2ZsYWdzICYgaW9zX2Jhc2U6OnNob3diYXNlKQ0KICAgICAgICAg
ICAgew0KICAgICAgICAgICAgICAqLS1fX2Zyb250ID0gX19mbXQtPl9TX2xp
dGVyYWxzW19fZm10LT5fU194ICsNCiAgICAgICAgICAgICAgICAgICAgICAg
KChfX2ZsYWdzICYgaW9zX2Jhc2U6OnVwcGVyY2FzZSkgPyAxIDogMCldOw0K
ICAgICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVswXTsNCiAgICAg
ICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgZWxzZSBpZiAoX19iYXNlZmll
bGQgPT0gaW9zX2Jhc2U6Om9jdCkNCiAgICAgICAgew0KICAgICAgICAgIGRv
DQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtfX3YgJiA3XTsN
CiAgICAgICAgICB3aGlsZSAoKF9fdiA+Pj0gMykgIT0gMCk7DQogICAgICAg
ICAgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd2Jhc2UNCiAgICAgICAg
ICAgICAgJiYgc3RhdGljX2Nhc3Q8Y2hhcj4oKl9fZnJvbnQpICE9IF9fdGFi
bGVbMF0pDQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVswXTsN
CiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsNCiAgICAgICAgfQ0K
ICAgICAgZWxzZQ0KICAgICAgICB7DQoNCiAgICAgICAgICBkbw0KICAgICAg
ICAgICAgKi0tX19mcm9udCA9IF9fdGFibGVbX192ICUgMTBdOw0KICAgICAg
ICAgIHdoaWxlICgoX192IC89IDEwKSAhPSAwKTsNCiAgICAgICAgICBfX3Np
Z25fZW5kID0gX19mcm9udDsNCg0KICAgICAgICAgIGlmIChfX25lZyB8fCAo
X19mbGFncyAmIGlvc19iYXNlOjpzaG93cG9zKSkNCiAgICAgICAgICAgICot
LV9fZnJvbnQgPSBfX2ZtdC0+X1NfbGl0ZXJhbHNbX19mbXQtPl9TX3BsdXMg
LSBfX25lZ107DQogICAgICAgIH0NCg0KDQogICAgICBpZiAoIV9fZm10LT5f
TV91c2VfZ3JvdXBpbmcgJiYgIV9faW8ud2lkdGgoKSkNCiAgICAgICAgcmV0
dXJuIGNvcHkoX19mcm9udCwgX19kaWdpdHMgKyBfTV9yb29tLCBfX3MpOw0K
DQogICAgICBpZiAoIV9fZm10LT5fTV91c2VfZ3JvdXBpbmcpDQogICAgICAg
IHJldHVybiBfX3BhZF9udW1lcmljKF9fcywgX19mbGFncywgX19maWxsLCBf
X2lvLndpZHRoKDApLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2Zyb250LCBfX3NpZ25fZW5kLCBfX2RpZ2l0cyArIF9NX3Jvb20pOw0KDQog
ICAgICBfQ2hhclQqIF9fcCA9IF9fZGlnaXRzOw0KICAgICAgd2hpbGUgKF9f
ZnJvbnQgPCBfX3NpZ25fZW5kKQ0KICAgICAgICAqX19wKysgPSAqX19mcm9u
dCsrOw0KICAgICAgY29uc3QgY2hhciogX19nciA9IF9fZm10LT5fTV9ncm91
cGluZy5kYXRhKCk7DQogICAgICBfX2Zyb250ID0gX19ncm91cF9kaWdpdHMo
X19wLCBfX2ZtdC0+X01fdGhvdXNhbmRzX3NlcCwgX19nciwNCiAgICAgICAg
X19nciArIF9fZm10LT5fTV9ncm91cGluZy5zaXplKCksIF9fc2lnbl9lbmQs
IF9fZGlnaXRzICsgX01fcm9vbSk7DQogICAgICByZXR1cm4gX19wYWRfbnVt
ZXJpYyhfX3MsIF9fZmxhZ3MsIF9fZmlsbCwgX19pby53aWR0aCgwKSwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlnaXRzLCBfX3AsIF9fZnJv
bnQpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG51bV9wdXQ8
X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVyX3R5cGUgX19z
LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3Yp
IGNvbnN0DQogICAgew0KICAgICAgdW5zaWduZWQgbG9uZyBfX3V2ID0gX192
Ow0KICAgICAgYm9vbCBfX25lZyA9IGZhbHNlOw0KICAgICAgaWYgKF9fdiA8
IDApDQogICAgICAgIHsNCiAgICAgICAgICBfX25lZyA9IHRydWU7DQogICAg
ICAgICAgX191diA9IC1fX3V2Ow0KICAgICAgICB9DQogICAgICByZXR1cm4g
X19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgX19uZWcsIF9f
dXYpOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG51bV9wdXQ8
X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVyX3R5cGUgX19z
LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwNCiAgICAgICAg
ICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0DQogICAgeyByZXR1cm4gX19v
dXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFsc2UsIF9fdik7
IH0NCiMgOTY3ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
Yml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9PdXRJdGVy
Pg0KICAgIF9PdXRJdGVyDQogICAgX19vdXRwdXRfZmxvYXQoX091dEl0ZXIg
X19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwNCiAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogX19zcHRyLCBzaXplX3QgX19zbGVu
KQ0KICAgIHsNCg0KICAgICAgcmV0dXJuIF9fczsNCiAgICB9DQoNCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQog
ICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+DQogICAg
X19vdXRwdXRfZmxvYXQob3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9U
cmFpdHM+IF9fcywgaW9zX2Jhc2UmIF9faW8sDQogICAgICAgICAgICAgICAg
ICAgX0NoYXJUIF9fZmlsbCwgY29uc3QgY2hhciogX19zcHRyLCBzaXplX3Qg
X19zbGVuKQ0KICAgIHsNCiAgICAgIHNpemVfdCBfX3BhZGRpbmcgPSBfX2lv
LndpZHRoKCkgPiBzdHJlYW1zaXplKF9fc2xlbikgPw0KICAgICAgICAgICAg
ICAgICAgICAgICAgIF9faW8ud2lkdGgoKSAtX19zbGVuIDogMDsNCiAgICAg
IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7DQogICAgICBjdHlwZTxf
Q2hhclQ+IGNvbnN0JiBfX2N0ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g
PihfX2xvYyk7DQogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19hZGpmaWVs
ZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsNCiAg
ICAgIGNvbnN0IGNoYXIqIGNvbnN0IF9fZXB0ciA9IF9fc3B0ciArIF9fc2xl
bjsNCg0KICAgICAgaWYgKF9fYWRqZmllbGQgPT0gaW9zX2Jhc2U6OmludGVy
bmFsKQ0KICAgICAgIHsNCg0KICAgICAgICAgaWYgKF9fc3B0ciA8IF9fZXB0
ciAmJiAoKl9fc3B0ciA9PSAnKycgfHwgKl9fc3B0ciA9PSAnLScpKQ0KICAg
ICAgICAgICB7DQogICAgICAgICAgICAgX19zID0gX19jdC53aWRlbigqX19z
cHRyKTsNCiAgICAgICAgICAgICArK19fczsNCiAgICAgICAgICAgICArK19f
c3B0cjsNCiAgICAgICAgICAgfQ0KICAgICAgICAgX19zID0gX19wYWQoX19z
LCBfX2ZpbGwsIF9fcGFkZGluZyk7DQogICAgICAgICBfX3BhZGRpbmcgPSAw
Ow0KICAgICAgIH0NCiAgICAgIGVsc2UgaWYgKF9fYWRqZmllbGQgIT0gaW9z
X2Jhc2U6OmxlZnQpDQogICAgICAgIHsNCiAgICAgICAgICBfX3MgPSBfX3Bh
ZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsNCiAgICAgICAgICBfX3BhZGRp
bmcgPSAwOw0KICAgICAgICB9DQoNCiAgICAgIGNoYXIgX19kZWNpbWFsX3Bv
aW50ID0gKihsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQpOw0KICAgICAg
Y29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9Gb3JtYXRf
Y2FjaGU8X0NoYXJUPjo6X1NfZ2V0KF9faW8pOw0KICAgICAgZm9yICg7IF9f
c3B0ciAhPSBfX2VwdHI7ICsrX19zLCArK19fc3B0cikNCiAgICAgICB7DQoN
CiAgICAgICAgIGlmICgqX19zcHRyID09IF9fZGVjaW1hbF9wb2ludCkNCiAg
ICAgICAgICAgX19zID0gX19mbXQtPl9NX2RlY2ltYWxfcG9pbnQ7DQoNCiAg
ICAgICAgIGVsc2UNCiAgICAgICAgICAgX19zID0gX19jdC53aWRlbigqX19z
cHRyKTsNCiAgICAgICB9DQoNCiAgICAgIGlmIChfX3BhZGRpbmcpDQogICAg
ICAgIF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRpbmcpOw0KICAgICAgX19p
by53aWR0aCgwKTsNCiAgICAgIHJldHVybiBfX3M7DQogICAgfQ0KDQogIGJv
b2wNCiAgX19idWlsZF9mbG9hdF9mb3JtYXQoaW9zX2Jhc2UmIF9faW8sIGNo
YXIqIF9fZnB0ciwgY2hhciBfX21vZGlmaWVyLA0KICAgICAgICAgICAgICAg
ICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7DQoNCiAgdGVtcGxhdGUgPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0
ZXINCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoNCiAgICBkb19w
dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBf
X2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0DQogICAgew0KICAgICAgY29uc3Qg
c3RyZWFtc2l6ZSBfX21heF9wcmVjID0gbnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6ZGlnaXRzMTAgKyAzOw0KICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMgPSBf
X2lvLnByZWNpc2lvbigpOw0KDQogICAgICBpZiAoX19wcmVjID4gX19tYXhf
cHJlYykNCiAgICAgICAgX19wcmVjID0gX19tYXhfcHJlYzsNCg0KICAgICAg
Y2hhciBfX3NidWZbX19tYXhfcHJlYyAqIDJdOw0KICAgICAgc2l6ZV90IF9f
c2xlbjsNCg0KICAgICAgY2hhciBfX2ZidWZbMTZdOw0KICAgICAgaWYgKF9f
YnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgMCwgX19wcmVjKSkN
CiAgICAgICAgX19zbGVuID0gc3ByaW50ZihfX3NidWYsIF9fZmJ1ZiwgX19w
cmVjLCBfX3YpOw0KICAgICAgZWxzZQ0KICAgICAgICBfX3NsZW4gPSBzcHJp
bnRmKF9fc2J1ZiwgX19mYnVmLCBfX3YpOw0KDQogICAgICByZXR1cm4gX19v
dXRwdXRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1ZiwgX19zbGVu
KTsNCiAgICB9DQoNCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX091dEl0ZXI+DQogICAgX091dEl0ZXINCiAgICBudW1fcHV0PF9D
aGFyVCwgX091dEl0ZXI+OjoNCiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg
aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsDQogICAgICAgICAg
IGxvbmcgZG91YmxlIF9fdikgY29uc3QNCiAgICB7DQogICAgICBjb25zdCBz
dHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmljX2xpbWl0czxsb25nIGRv
dWJsZT46OmRpZ2l0czEwICsgMzsNCiAgICAgIHN0cmVhbXNpemUgX19wcmVj
ID0gX19pby5wcmVjaXNpb24oKTsNCg0KICAgICAgaWYgKF9fcHJlYyA+IF9f
bWF4X3ByZWMpDQogICAgICAgIF9fcHJlYyA9IF9fbWF4X3ByZWM7DQoNCiAg
ICAgIGNoYXIgX19zYnVmW19fbWF4X3ByZWMgKiAyXTsNCiAgICAgIHNpemVf
dCBfX3NsZW47DQoNCiAgICAgIGNoYXIgX19mYnVmWzE2XTsNCg0KICAgICAg
aWYgKF9fYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgJ0wnLCBf
X3ByZWMpKQ0KICAgICAgICBfX3NsZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19m
YnVmLCBfX3ByZWMsIF9fdik7DQogICAgICBlbHNlDQogICAgICAgIF9fc2xl
biA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fdik7DQoNCiAgICAgIHJl
dHVybiBfX291dHB1dF9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgX19zYnVm
LCBfX3NsZW4pOw0KICAgIH0NCg0KICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4NCiAgICBfT3V0SXRlcg0KICAgIG51
bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Og0KICAgIGRvX3B1dChpdGVyX3R5
cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwNCiAg
ICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdA0KICAgIHsNCiAgICAg
IHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOw0KICAgICAg
Zm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7DQogICAgICBmbXRmbGFn
cyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6
OmJhc2VmaWVsZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlv
c19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOw0KICAg
ICAgX19pby5mbGFncyhfX2ZtdCAmIF9fZm10bWFzayB8IChpb3NfYmFzZTo6
aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7DQogICAgICB0cnkgew0KICAg
ICAgICBfT3V0SXRlciBfX3MyID0gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9f
aW8sIF9fZmlsbCwgZmFsc2UsDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3Yp
KTsNCiAgICAgICAgX19pby5mbGFncyhfX2ZtdCk7DQogICAgICAgIHJldHVy
biBfX3MyOw0KICAgICAgfQ0KICAgICAgY2F0Y2ggKC4uLikgew0KICAgICAg
ICBfX2lvLmZsYWdzKF9fZm10KTsNCiAgICAgICAgdGhyb3c7DQogICAgICB9
DQogICAgfQ0KDQoNCg0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfRHVtbXkgPSBpbnQ+DQogICAgc3RydWN0IF9XZWVrZGF5
bmFtZXM7DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIHN0
cnVjdCBfV2Vla2RheW5hbWVzPGNoYXIsIF9EdW1teT4NCiAgICB7IHN0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBfU19uYW1lc1sxNF07IH07DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIGNvbnN0IGNoYXIqIGNvbnN0
DQogICAgX1dlZWtkYXluYW1lczxjaGFyLCBfRHVtbXk+OjpfU19uYW1lc1sx
NF0gPQ0KICAgIHsNCiAgICAgICJTdW4iLCAiU3VuZGF5IiwNCiAgICAgICJN
b24iLCAiTW9uZGF5IiwgIlR1ZSIsICJUdWVzZGF5IiwgIldlZCIsICJXZWRu
ZXNkYXkiLA0KICAgICAgIlRodSIsICJUaHVyc2RheSIsICJGcmkiLCAiRnJp
ZGF5IiwgIlNhdCIsICJTYXR1cmRheSINCiAgICB9Ow0KIyAxMTM1ICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFj
ZXRzLnRjYyIgMw0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9EdW1teSA9IGludD4NCiAgICBzdHJ1Y3QgX01vbnRobmFtZXM7DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15Pg0KICAgIHN0cnVjdCBfTW9u
dGhuYW1lczxjaGFyLF9EdW1teT4NCiAgICB7IHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBfU19uYW1lc1syNF07IH07DQoNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0R1bW15Pg0KICAgIGNvbnN0IGNoYXIqIGNvbnN0DQogICAgX01vbnRo
bmFtZXM8Y2hhcixfRHVtbXk+OjpfU19uYW1lc1syNF0gPQ0KICAgIHsNCiAg
ICAgICJKYW4iLCAiSmFudWFyeSIsICJGZWIiLCAiRmVicnVhcnkiLCAiTWFy
IiwgIk1hcmNoIiwNCiAgICAgICJBcHIiLCAiQXByaWwiLCAiTWF5IiwgIk1h
eSIsICJKdW4iLCAiSnVuZSIsDQogICAgICAiSnVsIiwgIkp1bHkiLCAiQXVn
IiwgIkF1Z3VzdCIsICJTZXAiLCAiU2VwdGVtYmVyIiwNCiAgICAgICJPY3Qi
LCAiT2N0b2JlciIsICJOb3YiLCAiTm92ZW1iZXIiLCAiRGVjIiwgIkRlY2Vt
YmVyIg0KICAgIH07DQojIDExNjggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNs
dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4NCiAgICBf
SW5JdGVyDQogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6DQogICAg
ZG9fZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5k
LA0KICAgICAgICAgICAgICAgICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0DQogICAgew0KICAg
ICAgaWYgKCFfTV9kYXluYW1lcykNCiAgICAgICAgew0KICAgICAgICAgIF9N
X2RheW5hbWVzID0gbmV3IGJhc2ljX3N0cmluZzxfQ2hhclQ+WzE0XTsNCiAg
ICAgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCAxNDsgKytfX2kpDQog
ICAgICAgICAgICBfTV9kYXluYW1lc1tfX2ldID0gX1dlZWtkYXluYW1lczxf
Q2hhclQ+OjpfU19uYW1lc1tfX2ldOw0KICAgICAgICB9DQogICAgICBib29s
IF9fYXRfZW9mID0gZmFsc2U7DQogICAgICBpbnQgX19yZW1haW4gPSAwOw0K
ICAgICAgaW50IF9fbWF0Y2hlc1sxNF07DQogICAgICBpdGVyX3R5cGUgX19v
dXQgPSBfX21hdGNoX3BhcmFsbGVsKF9fcywgX19lbmQsIDE0LCBfTV9kYXlu
YW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOw0KICAgICAgX19l
cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZSgwKTsNCiAgICAgIGlmIChfX2F0X2Vv
ZikgX19lcnIgfD0gX19pby5lb2ZiaXQ7DQogICAgICBpZiAoX19yZW1haW4g
PT0gMSB8fA0KICAgICAgICAgIF9fcmVtYWluID09IDIgJiYgKF9fbWF0Y2hl
c1swXT4+MSkgPT0gKF9fbWF0Y2hlc1sxXT4+MSkpDQogICAgICAgIF9fdC0+
dG1fd2RheSA9IChfX21hdGNoZXNbMF0+PjEpOw0KICAgICAgZWxzZQ0KICAg
ICAgICBfX2VyciB8PSBfX2lvLmZhaWxiaXQ7DQogICAgICByZXR1cm4gX19v
dXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX0luSXRlcj4NCiAgICBfSW5JdGVyDQogICAgdGltZV9nZXQ8X0No
YXJULCBfSW5JdGVyPjo6DQogICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5
cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsDQogICAgICAgICAgICAgICAgICAg
ICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0
bSogX190KSBjb25zdA0KICAgIHsNCiAgICAgIGlmICghX01fbW9udGhuYW1l
cykNCiAgICAgICAgew0KICAgICAgICAgIF9NX21vbnRobmFtZXMgPSBuZXcg
YmFzaWNfc3RyaW5nPF9DaGFyVD5bMjRdOw0KICAgICAgICAgIGZvciAoaW50
IF9faSA9IDA7IF9faSA8IDI0OyArK19faSkNCiAgICAgICAgICAgIF9NX21v
bnRobmFtZXNbX19pXSA9IF9Nb250aG5hbWVzPF9DaGFyVD46Ol9TX25hbWVz
W19faV07DQogICAgICAgIH0NCiAgICAgIGJvb2wgX19hdF9lb2YgPSBmYWxz
ZTsNCiAgICAgIGludCBfX3JlbWFpbiA9IDA7DQogICAgICBpbnQgX19tYXRj
aGVzWzI0XTsNCiAgICAgIGl0ZXJfdHlwZSBfX291dCA9IF9fbWF0Y2hfcGFy
YWxsZWwoIF9fcywgX19lbmQsIDI0LCBfTV9tb250aG5hbWVzLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXRjaGVz
LCBfX3JlbWFpbiwgX19hdF9lb2YpOw0KICAgICAgX19lcnIgPSBpb3NfYmFz
ZTo6aW9zdGF0ZSgwKTsNCiAgICAgIGlmIChfX2F0X2VvZikgX19lcnIgfD0g
X19pby5lb2ZiaXQ7DQogICAgICBpZiAoX19yZW1haW4gPT0gMSB8fA0KICAg
ICAgICAgIF9fcmVtYWluID09IDIgJiYgKF9fbWF0Y2hlc1swXT4+MSkgPT0g
KF9fbWF0Y2hlc1sxXT4+MSkpDQogICAgICAgIF9fdC0+dG1fbW9uID0gKF9f
bWF0Y2hlc1swXT4+MSk7DQogICAgICBlbHNlDQogICAgICAgIF9fZXJyIHw9
IF9faW8uZmFpbGJpdDsNCiAgICAgIHJldHVybiBfX291dDsNCiAgICB9DQp9
DQojIDQyICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfbG9jYWxlLmgiIDIgMw0KIyAzMyAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvaXN0cmVhbS50Y2MiIDIgMw0KIyAxICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0
cmVhbS5oIiAxIDMNCiMgMzggIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDMNCg0KIyAxICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDEg
Mw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX29zdHJlYW0uaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
DQogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJh
c2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoN
Cg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOw0K
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3Nf
dHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5
cGUgb2ZmX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5
cGU7DQoNCg0KICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiBi
YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOw0KICAgICAg
dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry
ZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8
X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsNCiAgICAgIHR5
cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251
bXB1dF90eXBlOw0KICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5
cGVfdHlwZTsNCg0KDQogICAgICBleHBsaWNpdA0KICAgICAgYmFzaWNfb3N0
cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQ0KICAgICAgeyB0aGlzLT5p
bml0KF9fc2IpOyB9DQoNCiAgICAgIHZpcnR1YWwNCiAgICAgIH5iYXNpY19v
c3RyZWFtKCkgeyB9DQoNCg0KICAgICAgY2xhc3Mgc2VudHJ5Ow0KICAgICAg
ZnJpZW5kIGNsYXNzIHNlbnRyeTsNCg0KDQoNCiAgICAgIF9fb3N0cmVhbV90
eXBlJg0KICAgICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3Bm
KShfX29zdHJlYW1fdHlwZSYpKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUm
DQogICAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3Nf
dHlwZSYpKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQogICAgICBvcGVy
YXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpIChpb3NfYmFzZSYpKTsNCg0KDQog
ICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwobG9uZyBf
X24pOw0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9y
PDwodW5zaWduZWQgbG9uZyBfX24pOw0KDQogICAgICBfX29zdHJlYW1fdHlw
ZSYNCiAgICAgIG9wZXJhdG9yPDwoYm9vbCBfX24pOw0KDQogICAgICBfX29z
dHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwoc2hvcnQgX19uKQ0KICAg
ICAgew0KICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlz
LT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsNCiAgICAgICAgaWYg
KF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpo
ZXgpDQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4NCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fbikp
KTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVy
YXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOw0KICAgICAgfQ0KDQog
ICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwodW5zaWdu
ZWQgc2hvcnQgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8
PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQ0KDQogICAg
ICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwoaW50IF9fbikN
CiAgICAgIHsNCiAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0g
dGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7DQogICAgICAg
IGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFz
ZTo6aGV4KQ0KICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+DQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX19u
KSkpOw0KICAgICAgICBlbHNlDQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9w
ZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7DQogICAgICB9DQoN
CiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PCh1bnNp
Z25lZCBpbnQgX19uKQ0KICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8
PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQ0KIyAxMzUg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9v
c3RyZWFtLmgiIDMNCiAgICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3Bl
cmF0b3I8PChkb3VibGUgX19mKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUm
DQogICAgICBvcGVyYXRvcjw8KGZsb2F0IF9fZikNCiAgICAgIHsgcmV0dXJu
IHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX2YpKTsg
fQ0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIG9wZXJhdG9yPDwo
bG9uZyBkb3VibGUgX19mKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUmDQog
ICAgICBvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fcCk7DQoNCiAgICAgIF9f
b3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90
eXBlKiBfX3NiKTsNCg0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAg
IHB1dChjaGFyX3R5cGUgX19jKTsNCg0KICAgICAgX19vc3RyZWFtX3R5cGUm
DQogICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6
ZSBfX24pOw0KDQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIGZsdXNo
KCk7DQoNCg0KICAgICAgcG9zX3R5cGUNCiAgICAgIHRlbGxwKCk7DQoNCiAg
ICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgc2Vla3AocG9zX3R5cGUpOw0K
DQogICAgICBfX29zdHJlYW1fdHlwZSYNCiAgICAgIHNlZWtwKG9mZl90eXBl
LCBpb3NfYmFzZTo6c2Vla2Rpcik7DQoNCiAgICBwcml2YXRlOg0KDQoNCiAg
ICAgIF9fb3N0cmVhbV90eXBlJg0KICAgICAgb3BlcmF0b3I9KGNvbnN0IF9f
b3N0cmVhbV90eXBlJik7DQoNCiAgICAgIGJhc2ljX29zdHJlYW0oY29uc3Qg
X19vc3RyZWFtX3R5cGUmKTsNCg0KICAgIH07DQoNCg0KICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGNsYXNz
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5DQogICAg
ew0KDQogICAgICBib29sIF9NX29rOw0KICAgICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsX1RyYWl0cz4mIF9NX29zOw0KDQogICAgcHVibGljOg0KICAgICAg
ZXhwbGljaXQNCiAgICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxf
VHJhaXRzPiYgX19vcyk7DQoNCiAgICAgIH5zZW50cnkoKQ0KICAgICAgew0K
DQogICAgICAgIGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRi
dWYgJiYgIXVuY2F1Z2h0X2V4Y2VwdGlvbigpKQ0KICAgICAgICAgIHsNCg0K
ICAgICAgICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01fb3MucmRidWYo
KS0+cHVic3luYygpID09IC0xKQ0KICAgICAgICAgICAgICBfTV9vcy5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICB9DQogICAgICB9
DQoNCiAgICAgIG9wZXJhdG9yIGJvb2woKQ0KICAgICAgeyByZXR1cm4gX01f
b2s7IH0NCiAgICB9Ow0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKTsNCg0KICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwo
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hhciBf
X2MpDQogICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykp
OyB9DQoNCg0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNp
Y19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsN
Cg0KDQogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0
cmVhbTxjaGFyLCBfVHJhaXRzPiYNCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z
dHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBzaWduZWQgY2hhciBfX2Mp
DQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9f
YykpOyB9DQoNCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4NCiAgICBiYXNp
Y19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHVuc2lnbmVkIGNo
YXIgX19jKQ0KICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxj
aGFyPihfX2MpKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7DQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAmDQogICAgb3Bl
cmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0
LCBjb25zdCBjaGFyKiBfX3MpOw0KDQoNCiAgdGVtcGxhdGU8Y2xhc3MgX1Ry
YWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jg0KICAg
IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19v
dXQsIGNvbnN0IGNoYXIqIF9fcyk7DQoNCg0KICB0ZW1wbGF0ZTxjbGFzcyBf
VHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mDQog
ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBf
X291dCwgY29uc3Qgc2lnbmVkIGNoYXIqIF9fcykNCiAgICB7IHJldHVybiAo
X19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7
IH0NCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX29z
dHJlYW08Y2hhciwgX1RyYWl0cz4gJg0KICAgIG9wZXJhdG9yPDwoYmFzaWNf
b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIF9fcykNCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0NCg0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgZW5kbChiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpDQogICAgeyByZXR1cm4g
Zmx1c2goX19vcy5wdXQoX19vcy53aWRlbignXG4nKSkpOyB9DQoNCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBlbmRzKGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykNCiAgICB7IHJl
dHVybiBfX29zLnB1dChfQ2hhclQoKSk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGZsdXNoKGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykNCiAgICB7IHJldHVybiBfX29z
LmZsdXNoKCk7IH0NCg0KfQ0KDQoNCg0KDQojIDEgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL29zdHJlYW0udGNjIiAxIDMNCiMg
MzIgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL29z
dHJlYW0udGNjIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzDQojIDMzICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIg
MiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoNCiAgICBzZW50cnkoYmFzaWNf
b3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MpDQogICAgOiBfTV9vayhf
X29zLmdvb2QoKSksIF9NX29zKF9fb3MpDQogICAgew0KDQogICAgICBpZiAo
X01fb2sgJiYgX19vcy50aWUoKSkNCiAgICAgICAgX19vcy50aWUoKS0+Zmx1
c2goKTsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
Og0KICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19v
c3RyZWFtX3R5cGUmKSkNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0
aGlzKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAg
ICB0cnkNCiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0NCiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0K
DQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhy
b3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAq
dGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
Og0KICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190
eXBlJikpDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQog
ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQog
ICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9DQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg
ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog
ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBv
cGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpDQogICAg
ew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAoX19j
ZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7
IF9fcGYoKnRoaXMpOyB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAg
aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0K
ICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGJvb2wgX19u
KQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAg
aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAg
ICAgICAgew0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f
Zm51bXB1dCkpDQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1
dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkN
CiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAg
ICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0N
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChs
b25nIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsN
CiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkN
CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9
IHRoaXMtPmZpbGwoKTsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZs
YWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmll
bGQ7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt
cHV0KSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBi
b29sIF9fYiA9IGZhbHNlOw0KICAgICAgICAgICAgICAgICAgaWYgKF9fZm10
ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpDQog
ICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsb25nIF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+
KF9fbik7DQogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1
dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOw0KICAg
ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICBlbHNlDQog
ICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhp
cywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsNCiAgICAgICAgICAgICAg
ICAgIGlmIChfX2IpDQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICAgIH0NCiAg
ICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
DQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAg
ICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9u
ZyBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7DQog
ICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQog
ICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl
dChfTV9mbnVtcHV0KSkNCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1
dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxl
ZCgpKQ0KICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg
ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog
ICAgfQ0KIyAyNjQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL29zdHJlYW0udGNjIiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjpvcGVyYXRvcjw8KGRvdWJsZSBfX24pDQogICAgew0KICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAoX19jZXJiKQ0KICAg
ICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAg
ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkNCiAgICAg
ICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywg
dGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQ0KICAgICAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAg
ICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQog
ICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAg
ICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9
DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fbikN
CiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsNCiAgICAgIGlm
IChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg
ICAgIHsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu
dW1wdXQpKQ0KICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQo
KnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpDQog
ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAgICAg
ICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
Pg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoY29u
c3Qgdm9pZCogX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAg
IHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoX01fY2hl
Y2tfZmFjZXQoX01fZm51bXB1dCkpDQogICAgICAgICAgICAgICAgaWYgKF9N
X2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19u
KS5mYWlsZWQoKSkNCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv
dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0
aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
b3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4pDQogICAgew0K
ICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0ID0gMDsNCiAgICAgIF9fc3RyZWFt
YnVmX3R5cGUqIF9fc2JvdXQgPSB0aGlzLT5yZGJ1ZigpOw0KICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcyk7DQogICAgICBpZiAoX19zYmluICYmIF9fY2Vy
YikNCiAgICAgICAgX194dHJjdCA9IF9fY29weV9zdHJlYW1idWZzKCp0aGlz
LCBfX3NiaW4sIF9fc2JvdXQpOw0KICAgICAgaWYgKCFfX3NiaW4gfHwgIV9f
eHRyY3QpDQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWls
Yml0KTsNCiAgICAgIHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OnB1dChjaGFyX3R5cGUgX19jKQ0KICAg
IHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9f
Y2VyYikNCiAgICAgICAgew0KICAgICAgICAgIGludF90eXBlIF9fcHV0ID0g
cmRidWYoKS0+c3B1dGMoX19jKTsNCiAgICAgICAgICBpZiAoX19wdXQgIT0g
dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpDQogICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgfQ0K
ICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6d3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVh
bXNpemUgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMp
Ow0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHN0
cmVhbXNpemUgX19wdXQgPSB0aGlzLT5yZGJ1ZigpLT5zcHV0bihfX3MsIF9f
bik7DQogICAgICAgICAgaWYgKCBfX3B1dCAhPSBfX24pDQogICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAg
fQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6Zmx1c2goKQ0KICAgIHsNCiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
ew0KICAgICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICYmIHRoaXMtPnJkYnVm
KCktPnB1YnN5bmMoKSA9PSAtMSkNCiAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICB9DQogICAgICByZXR1
cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB0eXBlbmFtZSBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlDQogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgpDQogICAgew0KICAgICAg
cG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7DQogICAgICBib29sIF9f
dGVzdG9rID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7DQoNCiAgICAgIGlmIChf
X3Rlc3RvaykNCiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJz
ZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjpvdXQpOw0KICAg
ICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjpzZWVrcChwb3NfdHlwZSBfX3BvcykNCiAgICB7DQog
ICAgICBib29sIF9fdGVzdG9rID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7DQoN
CiAgICAgIGlmIChfX3Rlc3RvaykNCiAgICAgICAgew0KDQoNCiAgICAgICAg
ICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3Mo
X19wb3MsIGlvc19iYXNlOjpvdXQpOw0KDQoNCiAgICAgICAgICBpZiAoX19l
cnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkNCiAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGZhaWxiaXQpOw0KDQogICAgICAgIH0NCiAgICAgIHJl
dHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46Og0KICAgIHNlZWtwKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6
c2Vla2RpciBfX2QpDQogICAgew0KICAgICAgYm9vbCBfX3Rlc3RvayA9IHRo
aXMtPmZhaWwoKSAhPSB0cnVlOw0KDQogICAgICBpZiAoX190ZXN0b2spDQog
ICAgICAgIHsNCg0KDQogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlz
LT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2QsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlv
c19iYXNlOjpvdXQpOw0KDQoNCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9z
X3R5cGUob2ZmX3R5cGUoLTEpKSkNCiAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGZhaWxiaXQpOw0KICAgICAgICB9DQoNCiAgICAgIHJldHVybiAqdGhp
czsNCiAgICB9DQojIDQ1NyAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUv
ZysrLXYzL2JpdHMvb3N0cmVhbS50Y2MiIDMNCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIHZvaWQNCiAgICBf
X3BhZF9jaGFyKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lvcywN
CiAgICAgICAgICAgICAgIF9DaGFyVCogX19uZXdzLCBjb25zdCBfQ2hhclQq
IF9fb2xkcywNCiAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19u
ZXdsZW4sIGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4pDQogICAgew0KICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlwZWRlZiBf
VHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0
cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQoNCiAgICAgIGludF90
eXBlIF9fcGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXdsZW4gLSBf
X29sZGxlbik7DQogICAgICBjaGFyX3R5cGUqIF9fcGFkcyA9IHN0YXRpY19j
YXN0PGNoYXJfdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGNoYXJf
dHlwZSkgKiBfX3BsZW4pKTsNCiAgICAgIHRyYWl0c190eXBlOjphc3NpZ24o
X19wYWRzLCBfX3BsZW4sIF9faW9zLmZpbGwoKSk7DQoNCiAgICAgIGNoYXJf
dHlwZSogX19iZWc7DQogICAgICBjaGFyX3R5cGUqIF9fZW5kOw0KICAgICAg
c2l6ZV90IF9fbW9kID0gMDsNCiAgICAgIHNpemVfdCBfX2JlZ2xlbjsNCiAg
ICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IF9faW9zLmZsYWdzKCkg
JiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7DQoNCiAgICAgIGlmIChfX2ZtdCA9
PSBpb3NfYmFzZTo6bGVmdCkNCiAgICAgICAgew0KDQogICAgICAgICAgX19i
ZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7DQogICAgICAg
ICAgX19iZWdsZW4gPSBfX29sZGxlbjsNCiAgICAgICAgICBfX2VuZCA9IF9f
cGFkczsNCiAgICAgICAgfQ0KICAgICAgZWxzZSBpZiAoX19mbXQgPT0gaW9z
X2Jhc2U6OmludGVybmFsKQ0KICAgICAgICB7DQoNCg0KDQogICAgICAgICAg
dHlwZWRlZiBfRm9ybWF0X2NhY2hlPF9DaGFyVD4gX19jYWNoZV90eXBlOw0K
ICAgICAgICAgIF9fY2FjaGVfdHlwZSBjb25zdCogX19mbXQgPSBfX2NhY2hl
X3R5cGU6Ol9TX2dldChfX2lvcyk7DQogICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX21pbnVzID0gdHJhaXRzX3R5cGU6OmZpbmQoX19vbGRzLCBfX29s
ZGxlbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2ZtdC0+X1NfbWludXMpOw0KICAgICAgICAg
IGNvbnN0IGNoYXJfdHlwZSogX19wbHVzID0gdHJhaXRzX3R5cGU6OmZpbmQo
X19vbGRzLCBfX29sZGxlbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZm10LT5fU19wbHVzKTsN
CiAgICAgICAgICBib29sIF9fdGVzdHNpZ24gPSBfX21pbnVzIHx8IF9fcGx1
czsNCiAgICAgICAgICBib29sIF9fdGVzdGhleCA9IF9fb2xkc1swXSA9PSAn
MCcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfX29sZHNbMV0g
PT0gJ3gnIHx8IF9fb2xkc1sxXSA9PSAnWCcpOw0KDQogICAgICAgICAgaWYg
KF9fdGVzdGhleCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19u
ZXdzWzBdID0gX19vbGRzWzBdOw0KICAgICAgICAgICAgICBfX25ld3NbMV0g
PSBfX29sZHNbMV07DQogICAgICAgICAgICAgIF9fbW9kICs9IDI7DQogICAg
ICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29s
ZHMgKyBfX21vZCk7DQogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19vbGRs
ZW4gLSBfX21vZDsNCiAgICAgICAgICAgICAgX19lbmQgPSBfX3BhZHM7DQog
ICAgICAgICAgICB9DQogICAgICAgICAgZWxzZSBpZiAoX190ZXN0c2lnbikN
CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19tb2QgKz0gX19wbGVu
Ow0KICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fc2lnbiA9IF9f
bWludXMgPyBfX21pbnVzICsgMTogX19wbHVzICsgMTsNCiAgICAgICAgICAg
ICAgX19iZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7DQog
ICAgICAgICAgICAgIF9fYmVnbGVuID0gX19zaWduIC0gX19vbGRzOw0KICAg
ICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19z
aWduICsgX19wbGVuKTsNCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNv
cHkoX19uZXdzICsgX19iZWdsZW4sIF9fcGFkcywgX19wbGVuKTsNCiAgICAg
ICAgICAgIH0NCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICB7DQoNCiAg
ICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7DQogICAgICAgICAgICAgIF9f
YmVnbGVuID0gX19wbGVuOw0KICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0
X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgICB7DQoNCiAgICAgICAgICBf
X2JlZyA9IF9fcGFkczsNCiAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsN
CiAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19v
bGRzKTsNCiAgICAgICAgfQ0KDQogICAgICB0cmFpdHNfdHlwZTo6Y29weShf
X25ld3MsIF9fYmVnLCBfX2JlZ2xlbik7DQogICAgICB0cmFpdHNfdHlwZTo6
Y29weShfX25ld3MgKyBfX2JlZ2xlbiwgX19lbmQsIF9fbmV3bGVuIC0gX19i
ZWdsZW4gLSBfX21vZCk7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKQ0KICAg
IHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+IF9fb3N0cmVhbV90eXBlOw0KICAgICAgdHlwZW5hbWUgX19vc3RyZWFt
X3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOw0KICAgICAgaWYgKF9fY2Vy
YikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0K
ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7
DQogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8
X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9f
dykpOw0KICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBfX2M7DQogICAgICAg
ICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOw0KICAgICAgICAgICAgICBp
ZiAoX193ID4gX19sZW4pDQogICAgICAgICAgICAgICAgew0KICAgICAgICAg
ICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCAmX19jLCBfX3cs
IF9fbGVuKTsNCiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193Ow0KICAg
ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19w
YWRzLCBfX2xlbik7DQogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOw0K
ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgX19vdXQu
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm
ICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgfQ0KICAgICAgcmV0dXJuIF9fb3V0Ow0KICAgIH0NCg0KDQogIHRl
bXBsYXRlIDxjbGFzcyBfVHJhaXRzPg0KICAgIGJhc2ljX29zdHJlYW08Y2hh
ciwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNo
YXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpDQogICAgew0KICAgICAg
dHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVh
bV90eXBlOw0KICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRy
eSBfX2NlcmIoX19vdXQpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
ICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7DQogICAgICAgICAg
ICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0
aW5fYWxsb2NhKF9fdyArIDEpKTsNCiAgICAgICAgICAgICAgX19wYWRzWzBd
ID0gX19jOw0KICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsN
CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAg
ICAgIHsNCiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9f
cGFkcywgJl9fYywgX193LCBfX2xlbik7DQogICAgICAgICAgICAgICAgICBf
X2xlbiA9IF9fdzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg
IF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4pOw0KICAgICAgICAgICAgICBf
X291dC53aWR0aCgwKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAg
ICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0K
ICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQog
ICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX291dDsN
CiAgICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4NCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mDQogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcykNCiAgICB7DQogICAg
ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29z
dHJlYW1fdHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpz
ZW50cnkgX19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg
ICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAg
ICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOw0KICAgICAg
ICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+
KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsNCiAg
ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0
cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsNCiAgICAgICAgICAg
ICAgaWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAg
ICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywgX19zLCBf
X3csIF9fbGVuKTsNCiAgICAgICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsN
CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193Ow0KICAgICAgICAgICAg
ICAgIH0NCiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBfX2xlbik7
DQogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOw0KICAgICAgICAgICAg
fQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAg
ICAgICAgew0KDQoNCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhj
ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAg
ICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAg
ICAgcmV0dXJuIF9fb3V0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19z
KQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYg
Y2hhcl90cmFpdHM8Y2hhcj4gX19jdHJhaXRzX3R5cGU7DQoNCiAgICAgIHR5
cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsN
CiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBzaXpl
X3QgX19jbGVuID0gX19jdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOw0KICAg
ICAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9f
YnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX19jbGVuICsgMSkp
KTsNCiAgICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPD0gX19j
bGVuOyArK19faSkNCiAgICAgICAgICAgIF9fd3NbX19pXSA9IF9fb3V0Lndp
ZGVuKF9fc1tfX2ldKTsNCiAgICAgICAgICBfQ2hhclQqIF9fc3RyID0gX193
czsNCg0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAg
ICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6
ZT4oX19jbGVuKTsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBf
X291dC53aWR0aCgpOw0KICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9
IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9m
KF9DaGFyVCkgKiBfX3cpKTsNCg0KICAgICAgICAgICAgICBpZiAoX193ID4g
X19sZW4pDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAg
X19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3dzLCBfX3csIF9fbGVuKTsN
CiAgICAgICAgICAgICAgICAgIF9fc3RyID0gX19wYWRzOw0KICAgICAgICAg
ICAgICAgICAgX19sZW4gPSBfX3c7DQogICAgICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgICBfX291dC53cml0ZShfX3N0ciwgX19sZW4pOw0KICAgICAg
ICAgICAgICBfX291dC53aWR0aCgwKTsNCiAgICAgICAgICAgIH0NCiAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsN
Cg0KDQogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAg
dGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVy
biBfX291dDsNCiAgICB9DQoNCg0KICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRz
Pg0KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mDQogICAgb3Bl
cmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwg
Y29uc3QgY2hhciogX19zKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNf
b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsNCiAgICAg
IHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0
KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0
cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf
X3cgPSBfX291dC53aWR0aCgpOw0KICAgICAgICAgICAgICBjaGFyKiBfX3Bh
ZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cp
KTsNCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19j
YXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsNCiAgICAg
ICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAgICAgIHsN
CiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywg
X19zLCBfX3csIF9fbGVuKTsNCiAgICAgICAgICAgICAgICAgIF9fcyA9IF9f
cGFkczsNCiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193Ow0KICAgICAg
ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBf
X2xlbik7DQogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOw0KICAgICAg
ICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K
ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgX19vdXQuc2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgoX19v
dXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg
ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
fQ0KICAgICAgcmV0dXJuIF9fb3V0Ow0KICAgIH0NCg0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPg0KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYN
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19vdXQsDQogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikNCiAgICB7DQogICAg
ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29z
dHJlYW1fdHlwZTsNCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpz
ZW50cnkgX19jZXJiKF9fb3V0KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg
ICAgIHsNCiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcyA9IF9fc3RyLmRh
dGEoKTsNCiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRo
KCk7DQogICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxf
Q2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193
KSk7DQogICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0
PHN0cmVhbXNpemU+KF9fc3RyLnNpemUoKSk7DQoNCg0KDQogICAgICAgICAg
aWYgKF9fdyA+IF9fbGVuKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
ICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9fcywgX193LCBfX2xlbik7
DQogICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsNCiAgICAgICAgICAgICAg
X19sZW4gPSBfX3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgc3RyZWFt
c2l6ZSBfX3JlcyA9IF9fb3V0LnJkYnVmKCktPnNwdXRuKF9fcywgX19sZW4p
Ow0KICAgICAgICAgIF9fb3V0LndpZHRoKDApOw0KICAgICAgICAgIGlmIChf
X3JlcyAhPSBfX2xlbikNCiAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlv
c19iYXNlOjpmYWlsYml0KTsNCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9f
b3V0Ow0KICAgIH0NCn0NCiMgMjc5ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAyIDMNCiMgMzQgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0u
dGNjIiAyIDMNCg0KbmFtZXNwYWNlIHN0ZA0Kew0KICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6Og0KICAgIHNlbnRyeShi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19u
b3NraXB3cykNCiAgICB7DQogICAgICBpZiAoX19pbi5nb29kKCkpDQogICAg
ICAgIHsNCiAgICAgICAgICBpZiAoX19pbi50aWUoKSkNCiAgICAgICAgICAg
IF9faW4udGllKCktPmZsdXNoKCk7DQogICAgICAgICAgaWYgKCFfX25vc2tp
cHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkNCiAg
ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBf
X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgICAgICAgY29u
c3QgX19jdHlwZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBl
X2lvcygpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni
ID0gX19pbi5yZGJ1ZigpOw0KICAgICAgICAgICAgICBfX2ludF90eXBlIF9f
YyA9IF9fc2ItPnNnZXRjKCk7DQoNCiAgICAgICAgICAgICAgd2hpbGUgKF9f
YyAhPSBfX2VvZiAmJiBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwg
X19jKSkNCiAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsN
Cg0KDQoNCiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikNCiAgICAg
ICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0K
DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgaWYgKF9faW4u
Z29vZCgpKQ0KICAgICAgICBfTV9vayA9IHRydWU7DQogICAgICBlbHNlDQog
ICAgICAgIHsNCiAgICAgICAgICBfTV9vayA9IGZhbHNlOw0KICAgICAgICAg
IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAgICB9
DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg
ICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVh
bV90eXBlJikpDQogICAgew0KICAgICAgX19wZigqdGhpcyk7DQogICAgICBy
ZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZiko
X19pb3NfdHlwZSYpKQ0KICAgIHsNCiAgICAgIF9fcGYoKnRoaXMpOw0KICAg
ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3Bm
KShpb3NfYmFzZSYpKQ0KICAgIHsNCiAgICAgIF9fcGYoKnRoaXMpOw0KICAg
ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pihib29sJiBfX24pDQogICAg
ew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAg
aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAg
ICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy
ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAg
ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0K
ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRo
aXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShfX2Vycik7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAg
ICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAg
fQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVy
YXRvcj4+KHNob3J0JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl
KGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2No
ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2Zu
dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAg
ICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg
ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg
ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog
ICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0
JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs
c2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAg
IHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpn
b29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N
X2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq
dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAgICB9DQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN
Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo
cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g
KnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoNCiAgICBvcGVyYXRvcj4+KGludCYgX19uKQ0KICAgIHsNCiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIp
DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz
ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAg
IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAg
ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg
X19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0K
ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pih1bnNp
Z25lZCBpbnQmIF9fbikNCiAgICB7DQogICAgICBzZW50cnkgX19jZXJiKCp0
aGlzLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAgICB7DQog
ICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9z
X2Jhc2U6Omdvb2RiaXQpOw0KICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf
ZmFjZXQoX01fZm51bWdldCkpDQogICAgICAgICAgICAgICAgX01fZm51bWdl
dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7DQogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsNCiAgICAgICAgICAgIH0N
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAg
ICAgIHsNCg0KDQogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApDQogICAgICAgICAg
ICAgICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAg
IHJldHVybiAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46Og0KICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQ0KICAgIHsN
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlm
IChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg
ICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg
PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAg
ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAg
ICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlz
LCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
X19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAg
ICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0N
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0
b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pDQogICAgew0KICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg
ICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp
b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAg
IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24p
Ow0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAg
ICAgICAgICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
DQogICAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0K
ICAgICAgICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAg
ICB9DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KIyAzNDQgIi9ob21l
L21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNj
IiAzDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBvcGVy
YXRvcj4+KGZsb2F0JiBfX24pDQogICAgew0KICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl
KGlvc19iYXNlOjpnb29kYml0KTsNCiAgICAgICAgICAgICAgaWYgKF9NX2No
ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQ0KICAgICAgICAgICAgICAgIF9NX2Zu
dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOw0KICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7DQogICAgICAgICAg
ICB9DQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAg
ICAgICAgICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg
ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog
ICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoNCiAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19uKQ0K
ICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAg
ICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAg
ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUg
X19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7
DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0
KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAs
ICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAg
ICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0K
ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAg
b3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19uKQ0KICAgIHsNCiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIp
DQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz
ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7DQogICAgICAgICAgICAg
IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkNCiAgICAgICAgICAg
ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg
X19uKTsNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOw0K
ICAgICAgICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkNCiAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgfQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgb3BlcmF0b3I+Pih2b2lk
KiYgX19uKQ0KICAgIHsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh
bHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAg
ICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6
Z29vZGJpdCk7DQogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf
TV9mbnVtZ2V0KSkNCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQo
KnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsNCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoX19lcnIpOw0KICAgICAgICAgICAgfQ0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0K
DQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0
aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJu
ICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6DQogICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0
KQ0KICAgIHsNCiAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7DQogICAg
ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0aGlzLT5yZGJ1ZigpOw0K
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOw0KICAgICAgaWYg
KF9fc2JvdXQgJiYgX19jZXJiKQ0KICAgICAgICBfX3h0cmN0ID0gX19jb3B5
X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7DQogICAgICBp
ZiAoIV9fc2JvdXQgfHwgIV9feHRyY3QpDQogICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiAqdGhpczsN
CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6aW50X3R5cGUNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46Og0KICAgIGdldCh2b2lkKQ0KICAgIHsNCiAgICAgIGNvbnN0IGludF90
eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgaW50X3R5
cGUgX19jID0gX19lb2Y7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJi
KQ0KICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQog
ICAgICAgICAgICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOw0K
DQogICAgICAgICAgICAgIGlmIChfX2MgIT0gX19lb2YpDQogICAgICAgICAg
ICAgICAgX01fZ2NvdW50ID0gMTsNCiAgICAgICAgICAgICAgZWxzZQ0KICAg
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQg
fCBpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAgICAgICB9DQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN
Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo
cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g
X19jOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
DQogICAgZ2V0KGNoYXJfdHlwZSYgX19jKQ0KICAgIHsNCiAgICAgIF9NX2dj
b3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsN
CiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0cnkN
CiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg
X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7DQogICAgICAgICAgICAgIGlu
dF90eXBlIF9fYnVmdmFsID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7DQoN
CiAgICAgICAgICAgICAgaWYgKF9fYnVmdmFsICE9IF9fZW9mKQ0KICAgICAg
ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7
DQogICAgICAgICAgICAgICAgICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hh
cl90eXBlKF9fYnVmdmFsKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAg
ICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAg
ICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K
ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg
ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
fQ0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6DQogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBz
dHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pDQogICAgew0KICAg
ICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs
IHRydWUpOw0KICAgICAgaWYgKF9fY2VyYiAmJiBfX24gPiAxKQ0KICAgICAg
ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAgICAg
ICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRv
X2ludF90eXBlKF9fZGVsaW0pOw0KICAgICAgICAgICAgICBjb25zdCBpbnRf
dHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAgICAgICAg
ICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7DQog
ICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOw0K
ICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRl
bGltOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBf
X2VvZjsNCg0KICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19u
IC0gMSAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkNCiAgICAgICAg
ICAgICAgICB7DQogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNf
dHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7DQogICAgICAgICAgICAgICAgICAr
K19NX2djb3VudDsNCiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNi
dW1wYygpOw0KICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09
IF9fZW9mOw0KICAgICAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2Mg
PT0gX19pZGVsaW07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
ICBpZiAoX190ZXN0ZGVsaW0gfHwgX01fZ2NvdW50ID09IF9fbiAtIDEpDQog
ICAgICAgICAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7DQogICAgICAg
ICAgICAgIGlmIChfX3Rlc3Rlb2YpDQogICAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAgICAgICAgICB9DQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAg
ICB7DQoNCg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAg
ICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAq
X19zID0gY2hhcl90eXBlKCk7DQogICAgICBpZiAoIV9NX2djb3VudCkNCiAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAg
ICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6DQogICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2Is
IGNoYXJfdHlwZSBfX2RlbGltKQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9
IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAg
IGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICBpbnRfdHlwZSBf
X2M7DQogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0g
dGhpcy0+cmRidWYoKTsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsN
CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFp
dHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQogICAgICAgICAgICAg
IGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOw0K
ICAgICAgICAgICAgICBfX2MgPSBfX3RoaXNfc2ItPnNidW1wYygpOw0KICAg
ICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGlt
Ow0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2Vv
ZjsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSB0cnVlOw0KDQog
ICAgICAgICAgICAgIHdoaWxlICghX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxp
bQ0KICAgICAgICAgICAgICAgICAgICAmJiAoX190ZXN0cHV0ID0gX19zYi5z
cHV0Yyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpDQogICAgICAg
ICAgICAgICAgICAgICAgICAgIT0gX19lb2YpKQ0KICAgICAgICAgICAgICAg
IHsNCiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Ow0KICAgICAgICAg
ICAgICAgICAgX19jID0gX190aGlzX3NiLT5zYnVtcGMoKTsNCiAgICAgICAg
ICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCiAgICAgICAg
ICAgICAgICAgIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOw0KICAg
ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKF9fdGVzdGRlbGlt
IHx8ICFfX3Rlc3RwdXQpDQogICAgICAgICAgICAgICAgX190aGlzX3NiLT5z
cHV0YmFja2ModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsNCiAg
ICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAgICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCiAgICAgICAgICAg
IH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAgICAg
ICAgICAgIHsNCg0KICAgICAgICAgICAgICBfX3RoaXNfc2ItPnNwdXRiYWNr
Yyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOw0KICAgICAgICAg
ICAgfQ0KICAgICAgICB9DQogICAgICBpZiAoIV9NX2djb3VudCkNCiAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAg
cmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6DQogICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFt
c2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQ0KICAgIHsNCiAgICAgIF9N
X2djb3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl
KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0
cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX19zdHJlYW1idWZf
dHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7DQogICAgICAgICAgICAgIGlu
dF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOw0KICAgICAgICAgICAgICAr
K19NX2djb3VudDsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19p
ZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQog
ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5
cGU6OmVvZigpOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0g
X19jID09IF9faWRlbGltOw0KICAgICAgICAgICAgICBib29sIF9fdGVzdGVv
ZiA9IF9fYyA9PSBfX2VvZjsNCg0KICAgICAgICAgICAgICB3aGlsZSAoX01f
Z2NvdW50IDwgX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQ0K
ICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICpfX3MrKyA9
IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAg
ICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOw0KICAgICAgICAgICAgICAg
ICAgKytfTV9nY291bnQ7DQogICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2Yg
PSBfX2MgPT0gX19lb2Y7DQogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxp
bSA9IF9fYyA9PSBfX2lkZWxpbTsNCiAgICAgICAgICAgICAgICB9DQoNCiAg
ICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAgICAgICAgICAgICAgICB7
DQogICAgICAgICAgICAgICAgICAtLV9NX2djb3VudDsNCiAgICAgICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOw0KICAg
ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgZWxzZSBpZiAoIV9fdGVz
dGRlbGltKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAg
IC0tX01fZ2NvdW50Ow0KICAgICAgICAgICAgICAgICAgX19zYi0+c3B1dGJh
Y2tjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7DQogICAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7
DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv
dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgKl9fcyA9IGNo
YXJfdHlwZSgpOw0KICAgICAgaWYgKCFfTV9nY291bnQpDQogICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVy
biAqdGhpczsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYNCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46Og0KICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19k
ZWxpbSkNCiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiICYm
IF9fbiA+IDApDQogICAgICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAg
ICAgIHsNCiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0g
PSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7DQogICAgICAg
ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv
ZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0g
dGhpcy0+cmRidWYoKTsNCiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0g
X19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVs
aW0gPSBfX2MgPT0gX19pZGVsaW07DQogICAgICAgICAgICAgIGJvb2wgX190
ZXN0ZW9mID0gX19jID09IF9fZW9mOw0KDQogICAgICAgICAgICAgIF9fbiA9
IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7
DQogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24gLSAxICYm
ICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQ0KICAgICAgICAgICAgICAg
IHsNCiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Ow0KICAgICAgICAg
ICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAg
ICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQogICAgICAgICAgICAg
ICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsNCiAgICAgICAg
ICAgICAgICB9DQogICAgICAgICAgICAgIGlmICgoX01fZ2NvdW50ID09IF9f
biAtIDEgJiYgIV9fdGVzdGVvZikgfHwgX190ZXN0ZGVsaW0pDQogICAgICAg
ICAgICAgICAgKytfTV9nY291bnQ7DQogICAgICAgICAgICAgIGlmIChfX3Rl
c3Rlb2YpDQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmVvZmJpdCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg
ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog
ICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OmludF90eXBlDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoNCiAgICBwZWVrKHZvaWQpDQogICAgew0KICAgICAgaW50X3R5cGUgX19j
ID0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgX01fZ2NvdW50ID0gMDsN
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYg
KF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAgICAg
ICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0YygpOyB9DQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoN
Cg0KICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsNCiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRo
cm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4g
X19jOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+Jg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
DQogICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQog
ICAgew0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
ew0KICAgICAgICAgIGlmIChfX24gPiAwKQ0KICAgICAgICAgICAgew0KICAg
ICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAg
ICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl
b2YoKTsNCiAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f
c2IgPSB0aGlzLT5yZGJ1ZigpOw0KICAgICAgICAgICAgICAgICAgaW50X3R5
cGUgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgICAgICBi
b29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCg0KICAgICAgICAgICAg
ICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVv
ZikNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAg
ICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsN
CiAgICAgICAgICAgICAgICAgICAgICArK19NX2djb3VudDsNCiAgICAgICAg
ICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAgICAgICAg
ICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQogICAg
ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIGlmIChfX3Rl
c3Rlb2YpDQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICAg
ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgIHsNCg0KICAg
ICAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19j
aGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgICAgICAgICArK19NX2dj
b3VudDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg
IH0NCiAgICAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQog
ICAgICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAg
ICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGVs
c2UNCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp
Ow0KICAgICAgcmV0dXJuICp0aGlzOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQogICAgc3RyZWFt
c2l6ZQ0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQog
ICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0K
ICAgIHsNCiAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5
cGU6OmVvZigpOw0KICAgICAgX01fZ2NvdW50ID0gMDsNCiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAgaWYgKF9fY2VyYikNCiAg
ICAgICAgew0KICAgICAgICAgIGlmIChfX24gPiAwKQ0KICAgICAgICAgICAg
ew0KICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAg
ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYo
KS0+aW5fYXZhaWwoKTsNCiAgICAgICAgICAgICAgICAgIGlmIChfX251bSAh
PSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2VvZikpDQogICAgICAgICAg
ICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICBfX251bSA9IG1p
bihfX251bSwgX19uKTsNCiAgICAgICAgICAgICAgICAgICAgICBfTV9nY291
bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsNCiAgICAg
ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgZWxzZQ0KICAg
ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m
Yml0KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgICAgIHsNCg0KDQog
ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsNCiAgICAgICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAg
ICAgICAgdGhyb3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
fQ0KICAgICAgICB9DQogICAgICBlbHNlDQogICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIHJldHVybiBfTV9nY291
bnQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mDQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoN
CiAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpDQogICAgew0KICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0K
ICAgICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAg
ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6
OmVvZigpOw0KICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni
ID0gdGhpcy0+cmRidWYoKTsNCiAgICAgICAgICAgICAgaWYgKCFfX3NiIHx8
IF9fc2ItPnNwdXRiYWNrYyhfX2MpID09IF9fZW9mKQ0KICAgICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAg
ICAgICAgfQ0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0K
ICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAg
ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
fQ0KICAgICAgZWxzZQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4N
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICB1bmdldCh2b2lk
KQ0KICAgIHsNCiAgICAgIF9NX2djb3VudCA9IDA7DQogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzLCB0cnVlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAg
ICAgIHsNCiAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAg
ICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m
KCk7DQogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0
aGlzLT5yZGJ1ZigpOw0KICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19l
b2YgPT0gX19zYi0+c3VuZ2V0YygpKQ0KICAgICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgfQ0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAg
ICAgew0KDQoNCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAg
ICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAg
ZWxzZQ0KICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp
dCk7DQogICAgICByZXR1cm4gKnRoaXM7DQogICAgfQ0KDQogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBpbnQN
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHN5
bmModm9pZCkNCiAgICB7DQogICAgICBpbnQgX19yZXQgPSB0cmFpdHNfdHlw
ZTo6ZW9mKCk7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAg
ICAgICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQogICAgICAg
ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1Zigp
Ow0KICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19yZXQgPT0gX19zYi0+
cHVic3luYygpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOw0KICAgICAgICAgICAgICBlbHNlDQogICAgICAg
ICAgICAgICAgX19yZXQgPSAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQ0KICAgICAgICAgICAgew0KDQoN
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7DQogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAgICB0aHJv
dzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9f
cmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+DQogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQ0KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6DQogICAgdGVsbGcodm9pZCkNCiAgICB7DQog
ICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsNCiAgICAgIF9N
X2djb3VudCA9IDA7DQogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl
KTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAgICAgICB0
cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICBfX3JldCA9IHRoaXMt
PnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jh
c2U6OmluKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAgICAg
ICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9
DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0K
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6DQogICAgc2Vl
a2cocG9zX3R5cGUgX19wb3MpDQogICAgew0KICAgICAgX01fZ2NvdW50ID0g
MDsNCiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOw0KICAgICAg
aWYgKF9fY2VyYikNCiAgICAgICAgew0KICAgICAgICAgIHRyeQ0KICAgICAg
ICAgICAgew0KDQoNCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0
aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4p
Ow0KDQoNCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9m
Zl90eXBlKC0xKSkpDQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
ZmFpbGJpdCk7DQoNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkNCiAgICAgICAgICAgIHsNCg0KDQogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOw0KICAg
ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApDQogICAgICAgICAgICAgICAgdGhyb3c7DQogICAg
ICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVybiAqdGhpczsNCiAg
ICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYN
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIHNl
ZWtnKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikN
CiAgICB7DQogICAgICBfTV9nY291bnQgPSAwOw0KICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcywgdHJ1ZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg
ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7DQoNCg0KICAgICAg
ICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNl
ZWtvZmYoX19vZmYsIF9fZGlyLA0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlu
KTsNCg0KDQogICAgICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShv
ZmZfdHlwZSgtMSkpKQ0KICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGZhaWxiaXQpOw0KDQogICAgICAgICAgICB9DQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAgICB7DQoNCg0KICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsNCiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQ0KICAgICAgICAgICAgICAgIHRocm93Ow0KICAg
ICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICByZXR1cm4gKnRoaXM7DQog
ICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYNCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpDQogICAgew0KICAgICAgdHlwZWRl
ZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5
cGU7DQogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9f
Y2VyYihfX2luLCBmYWxzZSk7DQogICAgICBpZiAoX19jZXJiKQ0KICAgICAg
ICB7DQogICAgICAgICAgdHJ5DQogICAgICAgICAgICB7IF9faW4uZ2V0KF9f
Yyk7IH0NCiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkNCiAg
ICAgICAgICAgIHsNCg0KDQogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7DQogICAgICAgICAgICAgIGlmICgoX19pbi5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQ0KICAgICAg
ICAgICAgICAgIHRocm93Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQog
ICAgICBlbHNlDQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZh
aWxiaXQpOw0KICAgICAgcmV0dXJuIF9faW47DQogICAgfQ0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mDQogICAgb3BlcmF0b3I+
PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFy
VCogX19zKQ0KICAgIHsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOw0KICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBf
X3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
aXRzOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsNCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0
eXBlX3R5cGU7DQogICAgICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0gMDsN
Cg0KICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2Nl
cmIoX19pbiwgZmFsc2UpOw0KICAgICAgaWYgKF9fY2VyYikNCiAgICAgICAg
ew0KICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KDQogICAgICAgICAg
ICAgIHN0cmVhbXNpemUgX19udW0gPSBfX2luLndpZHRoKCk7DQogICAgICAg
ICAgICAgIGlmIChfX251bSA9PSAwKQ0KICAgICAgICAgICAgICAgIF9fbnVt
ID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCgpOw0KDQogICAg
ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVm
KCk7DQogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19jdHlw
ZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsNCiAgICAgICAgICAgICAg
aW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgICAg
IGNvbnN0IGludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAg
ICAgICAgICAgIGJvb2wgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9i
YXNlOjpzcGFjZSwgX19jKTsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rl
b2YgPSBfX2MgPT0gX19lb2Y7DQoNCiAgICAgICAgICAgICAgd2hpbGUgKF9f
ZXh0cmFjdGVkIDwgX19udW0gLSAxICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVz
dHNwKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICpf
X3MrKyA9IF9fYzsNCiAgICAgICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7
DQogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAg
ICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsNCiAg
ICAgICAgICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5cGVf
YmFzZTo6c3BhY2UsIF9fYyk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAg
ICAgICAgICAgIGlmICghX190ZXN0ZW9mKQ0KICAgICAgICAgICAgICAgIF9f
c2ItPnNwdXRiYWNrYyhfX2MpOw0KICAgICAgICAgICAgICBlbHNlDQogICAg
ICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsN
Cg0KDQoNCiAgICAgICAgICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOw0KDQog
ICAgICAgICAgICAgIF9faW4ud2lkdGgoMCk7DQogICAgICAgICAgICB9DQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpDQogICAgICAgICAg
ICB7DQoNCg0KICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOw0KICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkNCiAgICAgICAgICAgICAg
ICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgaWYg
KCFfX2V4dHJhY3RlZCkNCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFz
ZTo6ZmFpbGJpdCk7DQogICAgICByZXR1cm4gX19pbjsNCiAgICB9DQoNCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
DQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mDQogICAgd3Mo
YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faW4pDQogICAgew0K
ICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g
X19pc3RyZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0
cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7
DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0
eXBlX3R5cGUgX19jdHlwZV90eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsNCiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmNoYXJfdHlwZSBf
X2NoYXJfdHlwZTsNCg0KICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9
IF9faW4ucmRidWYoKTsNCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19j
dHlwZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsNCiAgICAgIGNvbnN0
IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsNCiAgICAgIF9f
aW50X3R5cGUgX19jOw0KICAgICAgYm9vbCBfX3Rlc3Rlb2Y7DQogICAgICBi
b29sIF9fdGVzdHNwOw0KDQogICAgICBkbw0KICAgICAgICB7DQogICAgICAg
ICAgX19jID0gX19zYi0+c2J1bXBjKCk7DQogICAgICAgICAgX190ZXN0ZW9m
ID0gX19jID09IF9fZW9mOw0KICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlw
ZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7DQogICAgICAgIH0NCiAg
ICAgIHdoaWxlICghX190ZXN0ZW9mICYmIF9fdGVzdHNwKTsNCg0KICAgICAg
aWYgKCFfX3Rlc3Rlb2YgJiYgIV9fdGVzdHNwKQ0KICAgICAgICBfX3NiLT5z
cHV0YmFja2MoX19jKTsNCiAgICAgIGVsc2UNCiAgICAgICAgX19pbi5zZXRz
dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsNCg0KICAgICAgcmV0dXJuIF9faW47
DQogICAgfQ0KDQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+DQogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jg0KICAgIG9wZXJhdG9yPj4oYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLA0KICAgICAgICAgICAg
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19z
dHIpDQogICAgew0KICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7DQogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOw0K
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJl
YW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOw0KICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVf
dHlwZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOw0KICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7
DQogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7DQoNCiAgICAg
IHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4s
IGZhbHNlKTsNCiAgICAgIGlmIChfX2NlcmIpDQogICAgICAgIHsNCiAgICAg
ICAgICBfX3N0ci5lcmFzZSgpOw0KICAgICAgICAgIHN0cmVhbXNpemUgX193
ID0gX19pbi53aWR0aCgpOw0KICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbjsN
CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXpl
X3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOw0KDQogICAgICAgICAg
X19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsNCiAgICAg
ICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dl
dF9mY3R5cGVfaW9zKCk7DQogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBf
X3NiLT5zYnVtcGMoKTsNCiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9f
ZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAgICAgICAgYm9vbCBfX3Rlc3Rz
cCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOw0KICAg
ICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOw0KDQogICAg
ICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19uICYmICFfX3Rlc3Rlb2Yg
JiYgIV9fdGVzdHNwKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBf
X3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAg
ICAgICAgKytfX2V4dHJhY3RlZDsNCiAgICAgICAgICAgICAgX19jID0gX19z
Yi0+c2J1bXBjKCk7DQogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9
PSBfX2VvZjsNCiAgICAgICAgICAgICAgX190ZXN0c3AgPSBfX2N0eXBlLT5p
cyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsNCiAgICAgICAgICAgIH0NCiAg
ICAgICAgICBpZiAoIV9fdGVzdGVvZikNCiAgICAgICAgICAgIF9fc2ItPnNw
dXRiYWNrYyhfX2MpOw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIF9f
aW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQogICAgICAgICAgX19p
bi53aWR0aCgwKTsNCiAgICAgICAgfQ0KDQoNCiAgICAgIGlmICghX19leHRy
YWN0ZWQpDQogICAgICAgIF9faW4uc2V0c3RhdGUgKGlvc19iYXNlOjpmYWls
Yml0KTsNCg0KICAgICAgcmV0dXJuIF9faW47DQogICAgfQ0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPg0KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYNCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19pbiwNCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkNCiAgICB7
DQogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiBfX2lzdHJlYW1fdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19p
c3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7DQogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBl
IF9fc3RyZWFtYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
aXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOw0KICAg
ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+IF9fc3RyaW5nX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
c3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsNCg0KICAgICAg
X19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOw0KICAgICAgYm9vbCBfX3Rl
c3RkZWxpbSA9IGZhbHNlOw0KICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5
cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgdHJ1ZSk7DQogICAgICBpZiAoX19j
ZXJiKQ0KICAgICAgICB7DQogICAgICAgICAgX19zdHIuZXJhc2UoKTsNCiAg
ICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6ZSgpOw0K
DQogICAgICAgICAgX19pbnRfdHlwZSBfX2lkZWxpbSA9IF9UcmFpdHM6OnRv
X2ludF90eXBlKF9fZGVsaW0pOw0KICAgICAgICAgIF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7DQogICAgICAgICAgX19pbnRfdHlw
ZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsNCiAgICAgICAgICBjb25zdCBfX2lu
dF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7DQogICAgICAgICAgX190
ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07DQogICAgICAgICAgYm9vbCBf
X3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7DQoNCiAgICAgICAgICB3aGlsZSAo
X19leHRyYWN0ZWQgPD0gX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRl
bGltKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBfX3N0ciArPSBf
VHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsNCiAgICAgICAgICAgICAgKytf
X2V4dHJhY3RlZDsNCiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBj
KCk7DQogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsN
CiAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07
DQogICAgICAgICAgICB9DQogICAgICAgICAgaWYgKF9fdGVzdGVvZikNCiAg
ICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7DQog
ICAgICAgIH0NCiAgICAgIGlmICghX19leHRyYWN0ZWQgJiYgIV9fdGVzdGRl
bGltKQ0KICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0
KTsNCiAgICAgIHJldHVybiBfX2luOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTxj
bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4NCiAg
ICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mDQogICAg
Z2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4s
DQogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0Fs
bG9jPiYgX19zdHIpDQogICAgeyByZXR1cm4gZ2V0bGluZShfX2luLCBfX3N0
ciwgX19pbi53aWRlbignXG4nKSk7IH0NCn0NCiMgMjkxICIvaG9tZS9tZGVp
bC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAy
IDMNCiMgNDAgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9mc3RyZWFtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4v
Li4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAxIDMNCiMg
NDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9mc3RyZWFtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5j
bHVkZS9nKystdjMvYml0cy9iYXNpY19maWxlLmgiIDEgMw0KIyAzOCAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfZmls
ZS5oIiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysr
LXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDEg
Mw0KIyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2Jp
dHMvYmFzaWNfZmlsZS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAxIDMNCiMgNDEgIi9o
b21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2Zp
bGUuaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCg0KDQoNCg0KDQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHN0cnVjdCBfX2Jhc2lj
X2ZpbGVfYmFzZTogcHVibGljIF9fY19maWxlX3R5cGUNCiAgICB7DQogICAg
ICB2aXJ0dWFsDQogICAgICB+X19iYXNpY19maWxlX2Jhc2UoKSB7IH07DQoN
CiAgICAgIHZpcnR1YWwgaW50DQogICAgICBvdmVyZmxvdyhpbnQgX19jID0g
KC0xKSkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgdW5kZXJm
bG93KCkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgdWZsb3co
KSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBwYmFja2ZhaWwo
aW50IF9fYykgPSAwOw0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAg
ICAgIHhzcHV0bihjb25zdCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24p
ID0gMDsNCg0KICAgICAgdmlydHVhbCBzdHJlYW1zaXplDQogICAgICB4c2dl
dG4oX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKSA9IDA7DQoNCiAgICAg
IHZpcnR1YWwgc3RyZWFtb2ZmDQogICAgICBzZWVrb2ZmKHN0cmVhbW9mZiBf
X29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksDQogICAgICAgICAgICAg
IGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBp
b3NfYmFzZTo6b3V0KSA9IDA7DQoNCiAgICAgIHZpcnR1YWwgc3RyZWFtb2Zm
DQogICAgICBzZWVrcG9zKHN0cmVhbW9mZiBfX3BvcywNCiAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8
IGlvc19iYXNlOjpvdXQpID0gMDsNCg0KICAgICAgdmlydHVhbCBzdHJlYW1i
dWYqDQogICAgICBzZXRidWYoX0NoYXJUKiBfX2IsIGludCBfX2xlbikgPSAw
Ow0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAgc3luYygpID0gMDsNCg0K
ICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvYWxsb2NhdGUoKSA9IDA7DQoN
CiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQ0KICAgICAgc3lzX3JlYWQoX0No
YXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKSA9IDA7DQoNCiAgICAgIHZpcnR1
YWwgc3RyZWFtc2l6ZQ0KICAgICAgc3lzX3dyaXRlKGNvbnN0IF9DaGFyVCog
X19zLCBzdHJlYW1zaXplIF9fbikgPSAwOw0KDQogICAgICB2aXJ0dWFsIHN0
cmVhbW9mZg0KICAgICAgc3lzX3NlZWsoc3RyZWFtb2ZmIF9fb2ZmLCBpb3Nf
YmFzZTo6c2Vla2RpciBfX3dheSkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGlu
dA0KICAgICAgc3lzX2Nsb3NlKCkgPSAwOw0KDQogICAgICB2aXJ0dWFsIGlu
dA0KICAgICAgc3lzX3N0YXQodm9pZCogX192KSA9IDA7DQoNCiAgICAgIHZp
cnR1YWwgaW50DQogICAgICBzaG93bWFueWMoKSA9IDA7DQoNCiAgICAgIHZp
cnR1YWwgdm9pZA0KICAgICAgaW1idWUodm9pZCogX192KSA9IDA7DQogICAg
fTsNCg0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQoNCg0K
DQogICAgY2xhc3MgX19iYXNpY19maWxlDQoNCiAgICB7DQoNCiAgICAgIF9f
Y19maWxlX3R5cGUqIF9NX2NmaWxlOw0KICAgICAgYm9vbCBfTV9jZmlsZV9j
cmVhdGVkOw0KDQoNCg0KDQoNCg0KICAgIHB1YmxpYzoNCiAgICAgIF9fYmFz
aWNfZmlsZShfX2NfbG9jayogX19sb2NrID0gMCk7DQoNCiAgICAgIHZvaWQN
CiAgICAgIF9NX29wZW5fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2Rl
LCBpbnQmIF9fcF9tb2RlLCBpbnQmIF9fcndfbW9kZSwNCiAgICAgICAgICAg
ICAgICAgICBjaGFyKiBfX2NfbW9kZSk7DQoNCg0KICAgICAgX19iYXNpY19m
aWxlKg0KICAgICAgb3Blbihjb25zdCBjaGFyKiBfX25hbWUsIGlvc19iYXNl
OjpvcGVubW9kZSBfX21vZGUsIGludCBfX3Byb3QgPSAwNjY0KTsNCg0KDQoN
Cg0KDQogICAgICBfX2Jhc2ljX2ZpbGUqDQogICAgICBzeXNfb3BlbihfX2Nf
ZmlsZV90eXBlKiBfX2ZpbGUsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUp
Ow0KDQogICAgICBfQ2hhclQNCiAgICAgIHN5c19nZXRjKCk7DQoNCiAgICAg
IF9DaGFyVA0KICAgICAgc3lzX3VuZ2V0YyhfQ2hhclQpOw0KDQogICAgICBf
X2Jhc2ljX2ZpbGUqDQogICAgICBjbG9zZSgpOw0KDQogICAgICBib29sDQog
ICAgICBpc19vcGVuKCk7DQoNCg0KDQoNCg0KICAgICAgdmlydHVhbA0KICAg
ICAgfl9fYmFzaWNfZmlsZSgpOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAg
ICAgb3ZlcmZsb3coaW50IF9fYyA9ICgtMSkpOw0KDQogICAgICB2aXJ0dWFs
IGludA0KICAgICAgdW5kZXJmbG93KCk7DQoNCiAgICAgIHZpcnR1YWwgaW50
DQogICAgICB1ZmxvdygpOw0KDQogICAgICB2aXJ0dWFsIGludA0KICAgICAg
cGJhY2tmYWlsKGludCBfX2MpOw0KDQoNCg0KDQogICAgICB2aXJ0dWFsIHN0
cmVhbXNpemUNCiAgICAgIHhzcHV0bihjb25zdCBfQ2hhclQqIF9fcywgc3Ry
ZWFtc2l6ZSBfX24pOw0KDQoNCg0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNp
emUNCiAgICAgIHhzZ2V0bihfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24p
Ow0KDQoNCg0KDQogICAgICB2aXJ0dWFsIHN0cmVhbW9mZg0KICAgICAgc2Vl
a29mZihzdHJlYW1vZmYgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5
LA0KICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0g
aW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7DQoNCg0KDQoNCiAgICAg
IHZpcnR1YWwgc3RyZWFtb2ZmDQogICAgICBzZWVrcG9zKHN0cmVhbW9mZiBf
X3BvcywNCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9k
ZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOw0KDQogICAgICB2
aXJ0dWFsIHN0cmVhbWJ1ZioNCiAgICAgIHNldGJ1ZihfQ2hhclQqIF9fYiwg
aW50IF9fbGVuKTsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIHN5bmMo
KTsNCg0KICAgICAgdmlydHVhbCBpbnQNCiAgICAgIGRvYWxsb2NhdGUoKTsN
Cg0KDQoNCg0KICAgICAgdmlydHVhbCBzdHJlYW1zaXplDQogICAgICBzeXNf
cmVhZChfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQoNCg0KDQog
ICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHN5c193cml0ZShjb25z
dCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQoNCg0KDQogICAg
ICB2aXJ0dWFsIHN0cmVhbW9mZg0KICAgICAgc3lzX3NlZWsoc3RyZWFtb2Zm
IF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSk7DQoNCiAgICAgIHZp
cnR1YWwgaW50DQogICAgICBzeXNfY2xvc2UoKTsNCg0KICAgICAgdmlydHVh
bCBpbnQNCiAgICAgIHN5c19zdGF0KHZvaWQqIF9fdik7DQoNCiAgICAgIHZp
cnR1YWwgaW50DQogICAgICBzaG93bWFueWMoKTsNCg0KICAgICAgdmlydHVh
bCB2b2lkDQogICAgICBpbWJ1ZSh2b2lkKiBfX3YpOw0KICAgIH07DQp9DQoN
Cg0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9z
cGFyYy1zdW4tc29sYXJpczIuNy9iaXRzL2Jhc2ljX2ZpbGVfbW9kZWwuaCIg
MSAzDQojIDM0ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMv
c3BhcmMtc3VuLXNvbGFyaXMyLjcvYml0cy9iYXNpY19maWxlX21vZGVsLmgi
IDMNCm5hbWVzcGFjZSBzdGQNCnsNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46Ol9fYmFzaWNfZmls
ZShfX2NfbG9jayogKQ0KICAgIDogX01fY2ZpbGUoX19udWxsKSwgX01fY2Zp
bGVfY3JlYXRlZChmYWxzZSkgeyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPg0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+Ojp+X19iYXNpY19m
aWxlKCkNCiAgICB7DQogICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQ0KICAg
ICAgICB7DQogICAgICAgICAgZmZsdXNoKF9NX2NmaWxlKTsNCiAgICAgICAg
ICB0aGlzLT5jbG9zZSgpOw0KICAgICAgICB9DQogICAgfQ0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICB2b2lkDQogICAgX19iYXNpY19m
aWxlPF9DaGFyVD46Ol9NX29wZW5fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUg
X19tb2RlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50JiAsIGludCYgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciogX19jX21vZGUpDQogICAgew0KICAgICAgYm9v
bCBfX3Rlc3RiID0gX19tb2RlICYgaW9zX2Jhc2U6OmJpbmFyeTsNCiAgICAg
IGJvb2wgX190ZXN0aSA9IF9fbW9kZSAmIGlvc19iYXNlOjppbjsNCiAgICAg
IGJvb2wgX190ZXN0byA9IF9fbW9kZSAmIGlvc19iYXNlOjpvdXQ7DQogICAg
ICBib29sIF9fdGVzdHQgPSBfX21vZGUgJiBpb3NfYmFzZTo6dHJ1bmM7DQog
ICAgICBib29sIF9fdGVzdGEgPSBfX21vZGUgJiBpb3NfYmFzZTo6YXBwOw0K
DQogICAgICBpZiAoIV9fdGVzdGkgJiYgX190ZXN0byAmJiAhX190ZXN0dCAm
JiAhX190ZXN0YSkNCiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAidyIpOw0K
ICAgICAgaWYgKCFfX3Rlc3RpICYmIF9fdGVzdG8gJiYgIV9fdGVzdHQgJiYg
X190ZXN0YSkNCiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAiYSIpOw0KICAg
ICAgaWYgKCFfX3Rlc3RpICYmIF9fdGVzdG8gJiYgX190ZXN0dCAmJiAhX190
ZXN0YSkNCiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAidyIpOw0KICAgICAg
aWYgKF9fdGVzdGkgJiYgIV9fdGVzdG8gJiYgIV9fdGVzdHQgJiYgIV9fdGVz
dGEpDQogICAgICAgIHN0cmNweShfX2NfbW9kZSwgInIiKTsNCiAgICAgIGlm
IChfX3Rlc3RpICYmIF9fdGVzdG8gJiYgIV9fdGVzdHQgJiYgIV9fdGVzdGEp
DQogICAgICAgIHN0cmNweShfX2NfbW9kZSwgInIrIik7DQogICAgICBpZiAo
X190ZXN0aSAmJiBfX3Rlc3RvICYmIF9fdGVzdHQgJiYgIV9fdGVzdGEpDQog
ICAgICAgIHN0cmNweShfX2NfbW9kZSwgIncrIik7DQogICAgICBpZiAoX190
ZXN0YikNCiAgICAgICAgc3RyY2F0KF9fY19tb2RlLCAiYiIpOw0KICAgIH0N
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgX19iYXNpY19m
aWxlPF9DaGFyVD4qDQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnN5c19v
cGVuKF9fY19maWxlX3R5cGUqIF9fZmlsZSwgaW9zX2Jhc2U6Om9wZW5tb2Rl
KQ0KICAgIHsNCiAgICAgIF9fYmFzaWNfZmlsZSogX19yZXQgPSBfX251bGw7
DQoNCiAgICAgIGlmICghdGhpcy0+aXNfb3BlbigpICYmIF9fZmlsZSkNCiAg
ICAgICAgew0KICAgICAgICAgIF9NX2NmaWxlID0gX19maWxlOw0KICAgICAg
ICAgIF9NX2NmaWxlX2NyZWF0ZWQgPSBmYWxzZTsNCiAgICAgICAgICBfX3Jl
dCA9IHRoaXM7DQogICAgICAgIH0NCg0KICAgICAgcmV0dXJuIF9fcmV0Ow0K
ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgX0No
YXJUDQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnN5c19nZXRjKCkNCiAg
ICB7DQogICAgICByZXR1cm4gZ2V0YyAoX01fY2ZpbGUpOw0KICAgIH0NCg0K
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgX0NoYXJUDQogICAg
X19iYXNpY19maWxlPF9DaGFyVD46OnN5c191bmdldGMoX0NoYXJUIF9fcykN
CiAgICB7DQogICAgICByZXR1cm4gdW5nZXRjIChfX3MsIF9NX2NmaWxlKTsN
CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIF9f
YmFzaWNfZmlsZTxfQ2hhclQ+Kg0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+
OjpvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9wZW5tb2Rl
IF9fbW9kZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
KQ0KICAgIHsNCiAgICAgIF9fYmFzaWNfZmlsZSogX19yZXQgPSBfX251bGw7
DQogICAgICBpbnQgX19wX21vZGUgPSAwOw0KICAgICAgaW50IF9fcndfbW9k
ZSA9IDA7DQogICAgICBjaGFyIF9fY19tb2RlWzRdOw0KDQogICAgICBfTV9v
cGVuX21vZGUoX19tb2RlLCBfX3BfbW9kZSwgX19yd19tb2RlLCBfX2NfbW9k
ZSk7DQoNCiAgICAgIGlmICghdGhpcy0+aXNfb3BlbigpKQ0KICAgICAgICB7
DQogICAgICAgICAgaWYgKChfTV9jZmlsZSA9IGZvcGVuKF9fbmFtZSwgX19j
X21vZGUpKSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX01fY2Zp
bGVfY3JlYXRlZCA9IHRydWU7DQogICAgICAgICAgICAgIF9fcmV0ID0gdGhp
czsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgcmV0dXJuIF9f
cmV0Ow0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQog
ICAgYm9vbA0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+Ojppc19vcGVuKCkg
eyByZXR1cm4gX01fY2ZpbGUgIT0gMDsgfQ0KDQogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4NCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPioNCiAgICBf
X2Jhc2ljX2ZpbGU8X0NoYXJUPjo6Y2xvc2UoKQ0KICAgIHsNCiAgICAgIF9f
YmFzaWNfZmlsZSogX19yZXR2YWwgPSBzdGF0aWNfY2FzdDxfX2Jhc2ljX2Zp
bGUqPihfX251bGwpOw0KICAgICAgaWYgKF9NX2NmaWxlX2NyZWF0ZWQgJiYg
ZmNsb3NlKF9NX2NmaWxlKSkNCiAgICAgICAgX19yZXR2YWwgPSB0aGlzOw0K
ICAgICAgcmV0dXJuIF9fcmV0dmFsOw0KICAgIH0NCg0KICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFtc2l6ZQ0KICAgIF9fYmFzaWNf
ZmlsZTxfQ2hhclQ+Ojp4c2dldG4oX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUg
X19uKQ0KICAgIHsgcmV0dXJuIGZyZWFkKF9fcywgMSwgX19uLCBfTV9jZmls
ZSk7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3Ry
ZWFtc2l6ZQ0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+Ojp4c3B1dG4oY29u
c3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgIHsgcmV0dXJu
IGZ3cml0ZShfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9DQoNCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHN0cmVhbW9mZg0KICAgIF9fYmFz
aWNfZmlsZTxfQ2hhclQ+OjpzZWVrb2ZmKHN0cmVhbW9mZiBfX29mZiwgaW9z
X2Jhc2U6OnNlZWtkaXIgX193YXksDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlICkNCiAgICB7IGZzZWVr
KF9NX2NmaWxlLCBfX29mZiwgX193YXkpOyByZXR1cm4gZnRlbGwoX01fY2Zp
bGUpOyB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPg0KICAgIHN0
cmVhbW9mZg0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzZWVrcG9zKHN0
cmVhbW9mZiBfX3BvcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgKQ0KICAgIHsgZnNlZWsoX01fY2Zp
bGUsIF9fcG9zLCBpb3NfYmFzZTo6YmVnKTsgcmV0dXJuIGZ0ZWxsKF9NX2Nm
aWxlKTsgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBp
bnQNCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3luYygpDQogICAgeyBy
ZXR1cm4gZmZsdXNoKF9NX2NmaWxlKTsgfQ0KDQoNCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPg0KICAgIGludA0KICAgIF9fYmFzaWNfZmlsZTxfQ2hh
clQ+OjpvdmVyZmxvdyhpbnQgKQ0KICAgIHsgcmV0dXJuICgtMSk7IH0NCg0K
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBpbnQNCiAgICBf
X2Jhc2ljX2ZpbGU8X0NoYXJUPjo6dW5kZXJmbG93KCkNCiAgICB7IHJldHVy
biAoLTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQog
ICAgaW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnVmbG93KCkNCiAg
ICB7IHJldHVybiAoLTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+DQogICAgaW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnBi
YWNrZmFpbChpbnQgKQ0KICAgIHsgcmV0dXJuICgtMSk7IH0NCg0KDQogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4NCiAgICBzdHJlYW1idWYqDQogICAg
X19iYXNpY19maWxlPF9DaGFyVD46OnNldGJ1ZihfQ2hhclQqICwgaW50ICkN
CiAgICB7IHJldHVybiByZWludGVycHJldF9jYXN0PHN0cmVhbWJ1Zio+KHRo
aXMpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAg
aW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OmRvYWxsb2NhdGUoKQ0K
ICAgIHsgcmV0dXJuICgtMSk7IH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4NCiAgICBzdHJlYW1zaXplDQogICAgX19iYXNpY19maWxlPF9D
aGFyVD46OnN5c19yZWFkKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikN
CiAgICB7IHJldHVybiBmcmVhZChfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9
DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFt
c2l6ZQ0KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzeXNfd3JpdGUoY29u
c3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQ0KICAgIHsgcmV0dXJu
IGZ3cml0ZShfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9DQoNCg0KICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgc3RyZWFtb2ZmDQogICAgX19i
YXNpY19maWxlPF9DaGFyVD46OnN5c19zZWVrKHN0cmVhbW9mZiBfX3Bvcywg
aW9zX2Jhc2U6OnNlZWtkaXIgX193YXkpDQogICAgew0KICAgICAgZnNlZWso
X01fY2ZpbGUsIF9fcG9zLCBfX3dheSk7DQogICAgICByZXR1cm4gZnRlbGwo
X01fY2ZpbGUpOw0KICAgIH0NCg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4NCiAgICBpbnQNCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lz
X2Nsb3NlKCkNCiAgICB7IHJldHVybiBmY2xvc2UoX01fY2ZpbGUpOyB9DQoN
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+DQogICAgaW50DQogICAg
X19iYXNpY19maWxlPF9DaGFyVD46OnN5c19zdGF0KHZvaWQqICkNCiAgICB7
IHJldHVybiAoLTEpOyB9DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+DQogICAgaW50DQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnNob3dt
YW55YygpDQogICAgeyByZXR1cm4gKC0xKTsgfQ0KDQoNCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPg0KICAgIHZvaWQNCiAgICBfX2Jhc2ljX2ZpbGU8
X0NoYXJUPjo6aW1idWUodm9pZCogKSB7IH0NCn0NCiMgMjUxICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19maWxlLmgi
IDIgMw0KIyA0MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2ZzdHJlYW0uaCIgMiAzDQojIDEgIi9ob21lL21kZWlsL2Jp
bi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzDQoj
IDQzICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfZnN0cmVhbS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2lu
Y2x1ZGUvZysrLXYzL3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvZ3Roci5o
IiAxIDMNCiMgNDQgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9mc3RyZWFtLmgiIDIgMw0KDQpuYW1lc3BhY2Ugc3RkDQp7
DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4NCiAgICBjbGFzcyBiYXNpY19maWxlYnVmIDogcHVibGljIGJhc2ljX3N0
cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1YmxpYzoN
Cg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAgdHlw
ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBl
bmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQogICAgICB0
eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlw
ZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90
eXBlIG9mZl90eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFt
YnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7
DQogICAgICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcl90eXBlLCB0cmFp
dHNfdHlwZT4gX19maWxlYnVmX3R5cGU7DQogICAgICB0eXBlZGVmIF9fYmFz
aWNfZmlsZTxjaGFyX3R5cGU+IF9fZmlsZV90eXBlOw0KICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6c3RhdGVfdHlwZSBfX3N0YXRlX3R5
cGU7DQogICAgICB0eXBlZGVmIGNvZGVjdnQ8Y2hhcl90eXBlLCBjaGFyLCBf
X3N0YXRlX3R5cGU+IF9fY29kZWN2dF90eXBlOw0KICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2NvZGVjdnRfdHlwZTo6cmVzdWx0IF9fcmVzX3R5cGU7DQog
ICAgICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOw0K
DQogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7DQoNCiAgICBwcml2YXRl
Og0KDQoNCiAgICAgIF9fZmlsZV90eXBlKiBfTV9maWxlOw0KDQoNCiAgICAg
IF9fc3RhdGVfdHlwZSBfTV9zdGF0ZV9jdXI7DQogICAgICBfX3N0YXRlX3R5
cGUgX01fc3RhdGVfYmVnOw0KDQoNCiAgICAgIF9fY19sb2NrIF9NX2xvY2s7
DQoNCg0KICAgICAgYm9vbCBfTV9idWZfYWxsb2NhdGVkOw0KDQoNCiAgICAg
IGJvb2wgX01fbGFzdF9vdmVyZmxvd2VkOw0KDQogICAgcHVibGljOg0KDQog
ICAgICBiYXNpY19maWxlYnVmKCk7DQoNCg0KICAgICAgYmFzaWNfZmlsZWJ1
ZihfX2NfZmlsZV90eXBlKiBfX2YsIGlvc19iYXNlOjpvcGVubW9kZSBfX21v
ZGUsDQogICAgICAgICAgICAgICAgICAgIGludF90eXBlIF9fcyA9IHN0YXRp
Y19jYXN0PGludF90eXBlPigxMDI0KSk7DQoNCiAgICAgIHZpcnR1YWwNCiAg
ICAgIH5iYXNpY19maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAgdGhpcy0+
Y2xvc2UoKTsNCiAgICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7
DQogICAgICB9DQoNCg0KICAgICAgYm9vbA0KICAgICAgaXNfb3Blbih2b2lk
KSBjb25zdCB7IHJldHVybiBfTV9maWxlID8gX01fZmlsZS0+aXNfb3Blbigp
IDogZmFsc2U7IH0NCg0KICAgICAgX19maWxlYnVmX3R5cGUqDQogICAgICBv
cGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9k
ZSk7DQoNCiAgICAgIF9fZmlsZWJ1Zl90eXBlKg0KICAgICAgY2xvc2Uodm9p
ZCk7DQoNCiAgICBwcm90ZWN0ZWQ6DQogICAgICB2b2lkDQogICAgICBfTV9h
bGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKTsNCg0KICAgICAgdm9pZA0KICAg
ICAgX01fZGVzdHJveV9pbnRlcm5hbF9idWZmZXIoKTsNCg0KICAgICAgdm9p
ZA0KICAgICAgX01fYWxsb2NhdGVfcGJhY2tfYnVmZmVyKCk7DQoNCg0KICAg
ICAgdm9pZA0KICAgICAgX01fYWxsb2NhdGVfZmlsZSgpOw0KDQoNCiAgICAg
IHZpcnR1YWwgc3RyZWFtc2l6ZQ0KICAgICAgc2hvd21hbnljKHZvaWQpOw0K
DQoNCg0KDQoNCiAgICAgIHZpcnR1YWwgaW50X3R5cGUNCiAgICAgIHVuZGVy
Zmxvdyh2b2lkKTsNCg0KICAgICAgdmlydHVhbCBpbnRfdHlwZQ0KICAgICAg
cGJhY2tmYWlsKGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsNCiMg
MTQ4ICIvaG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfZnN0cmVhbS5oIiAzDQogICAgICB2aXJ0dWFsIGludF90eXBlDQogICAg
ICBvdmVyZmxvdyhpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7DQoj
IDE1OCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2ZzdHJlYW0uaCIgMw0KICAgICAgaW50X3R5cGUNCiAgICAgIF9NX3Jl
YWxseV9vdmVyZmxvdyhpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7
DQoNCiAgICAgIHZpcnR1YWwgX19zdHJlYW1idWZfdHlwZSoNCiAgICAgIHNl
dGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOw0KDQogICAg
ICB2aXJ0dWFsIHBvc190eXBlDQogICAgICBzZWVrb2ZmKG9mZl90eXBlIF9f
b2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwNCiAgICAgICAgICAgICAg
aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlv
c19iYXNlOjpvdXQpOw0KDQogICAgICB2aXJ0dWFsIHBvc190eXBlDQogICAg
ICBzZWVrcG9zKHBvc190eXBlIF9fcG9zLA0KICAgICAgICAgICAgICBpb3Nf
YmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jh
c2U6Om91dCk7DQoNCiAgICAgIHZpcnR1YWwgaW50DQogICAgICBzeW5jKHZv
aWQpDQogICAgICB7DQogICAgICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0
X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0X2VuZDsNCiAgICAgICAgaWYg
KF9fdGVzdHB1dCkNCiAgICAgICAgICB7DQoNCg0KICAgICAgICAgICAgX01f
ZmlsZS0+c3luYygpOw0KDQoNCg0KDQoNCiAgICAgICAgICAgIHN0cmVhbW9m
ZiBfX2N1ciA9IF9NX2ZpbGUtPnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1cik7
DQogICAgICAgICAgICBvZmZfdHlwZSBfX29mZiA9IF9NX291dF9jdXIgLSBf
TV9vdXRfYmVnOw0KICAgICAgICAgICAgX01fcmVhbGx5X292ZXJmbG93KCk7
DQogICAgICAgICAgICBfTV9maWxlLT5zZWVrcG9zKF9fY3VyICsgX19vZmYp
Ow0KICAgICAgICAgIH0NCiAgICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0g
ZmFsc2U7DQogICAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KDQogICAgICB2
aXJ0dWFsIHZvaWQNCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2Mp
Ow0KDQogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUNCiAgICAgIHhzZ2V0bihj
aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pDQogICAgICB7DQogICAg
ICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOw0KDQogICAgICAgIGlmIChfTV9w
YmFja19pbml0KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIHdoaWxlIChf
X3JldCA8IF9fbiAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpDQogICAgICAg
ICAgICAgIHsNCiAgICAgICAgICAgICAgICAqX19zID0gKl9NX2luX2N1cjsN
CiAgICAgICAgICAgICAgICArK19fcmV0Ow0KICAgICAgICAgICAgICAgICsr
X19zOw0KICAgICAgICAgICAgICAgICsrX01faW5fY3VyOw0KICAgICAgICAg
ICAgICB9DQogICAgICAgICAgICBfTV9wYmFja19kZXN0cm95KCk7DQogICAg
ICAgICAgfQ0KICAgICAgICBpZiAoX19yZXQgPCBfX24pDQogICAgICAgICAg
X19yZXQgKz0gX19zdHJlYW1idWZfdHlwZTo6eHNnZXRuKF9fcywgX19uIC0g
X19yZXQpOw0KICAgICAgICByZXR1cm4gX19yZXQ7DQogICAgICB9DQoNCiAg
ICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQ0KICAgICAgeHNwdXRuKGNvbnN0IGNo
YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikNCiAgICAgIHsNCiAgICAg
ICAgX01fcGJhY2tfZGVzdHJveSgpOw0KICAgICAgICByZXR1cm4gX19zdHJl
YW1idWZfdHlwZTo6eHNwdXRuKF9fcywgX19uKTsNCiAgICAgIH0NCg0KICAg
ICAgdm9pZA0KICAgICAgX01fb3V0cHV0X3Vuc2hpZnQoKTsNCiAgICB9Ow0K
DQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+DQogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW0gOiBwdWJsaWMgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+DQogICAgew0KICAgIHB1Ymxp
YzoNCg0KICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOw0KICAgICAg
dHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOw0KICAgICAgdHlwZWRlZiB0
eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7DQogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3Nf
dHlwZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9m
Zl90eXBlIG9mZl90eXBlOw0KDQoNCiAgICAgIHR5cGVkZWYgYmFzaWNfZmls
ZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZfdHlwZTsN
CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0
c190eXBlPiBfX2lzdHJlYW1fdHlwZTsNCg0KICAgIHByaXZhdGU6DQogICAg
ICBfX2ZpbGVidWZfdHlwZSBfTV9maWxlYnVmOw0KDQogICAgcHVibGljOg0K
DQogICAgICBiYXNpY19pZnN0cmVhbSgpDQogICAgICA6IF9faXN0cmVhbV90
eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQ0KICAgICAgeyB0aGlzLT5pbml0
KCZfTV9maWxlYnVmKTsgfQ0KDQogICAgICBleHBsaWNpdA0KICAgICAgYmFz
aWNfaWZzdHJlYW0oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1v
ZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluKQ0KICAgICAgOiBfX2lzdHJlYW1f
dHlwZShfX251bGwpLCBfTV9maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAg
dGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7DQogICAgICAgIHRoaXMtPm9wZW4o
X19zLCBfX21vZGUpOw0KICAgICAgfQ0KDQogICAgICB+YmFzaWNfaWZzdHJl
YW0oKQ0KICAgICAgeyB9DQoNCg0KICAgICAgX19maWxlYnVmX3R5cGUqDQog
ICAgICByZGJ1ZigpIGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9jYXN0
PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGJv
b2wNCiAgICAgIGlzX29wZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5p
c19vcGVuKCk7IH0NCg0KICAgICAgdm9pZA0KICAgICAgb3Blbihjb25zdCBj
aGFyKiBfX3MsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFz
ZTo6aW4pDQogICAgICB7DQogICAgICAgIGlmIChfTV9maWxlYnVmLm9wZW4o
X19zLCBfX21vZGUgfCBpb3NfYmFzZTo6aW4pID09IF9fbnVsbCkNCiAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAg
ICB9DQoNCiAgICAgIHZvaWQNCiAgICAgIGNsb3NlKHZvaWQpDQogICAgICB7
DQogICAgICAgIGlmICghX01fZmlsZWJ1Zi5jbG9zZSgpKQ0KICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIH0N
CiAgICB9Ow0KDQoNCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+DQogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW0gOiBw
dWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4NCiAgICB7DQog
ICAgcHVibGljOg0KDQogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
DQogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7DQogICAgICB0
eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlw
ZTsNCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190
eXBlIHBvc190eXBlOw0KICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNf
dHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7DQoNCg0KICAgICAgdHlwZWRlZiBi
YXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1
Zl90eXBlOw0KICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXJfdHlw
ZSwgdHJhaXRzX3R5cGU+IF9fb3N0cmVhbV90eXBlOw0KDQogICAgcHJpdmF0
ZToNCiAgICAgIF9fZmlsZWJ1Zl90eXBlIF9NX2ZpbGVidWY7DQoNCiAgICBw
dWJsaWM6DQoNCiAgICAgIGJhc2ljX29mc3RyZWFtKCkNCiAgICAgIDogX19v
c3RyZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpDQogICAgICB7IHRo
aXMtPmluaXQoJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGV4cGxpY2l0DQog
ICAgICBiYXNpY19vZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsDQogICAgICAg
ICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9z
X2Jhc2U6Om91dHxpb3NfYmFzZTo6dHJ1bmMpDQogICAgICA6IF9fb3N0cmVh
bV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQ0KICAgICAgew0KICAgICAg
ICB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsNCiAgICAgICAgdGhpcy0+b3Bl
bihfX3MsIF9fbW9kZSk7DQogICAgICB9DQoNCiAgICAgIH5iYXNpY19vZnN0
cmVhbSgpDQogICAgICB7IH0NCg0KDQogICAgICBfX2ZpbGVidWZfdHlwZSoN
CiAgICAgIHJkYnVmKHZvaWQpIGNvbnN0DQogICAgICB7IHJldHVybiBjb25z
dF9jYXN0PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAg
ICAgIGJvb2wNCiAgICAgIGlzX29wZW4odm9pZCkgeyByZXR1cm4gX01fZmls
ZWJ1Zi5pc19vcGVuKCk7IH0NCg0KICAgICAgdm9pZA0KICAgICAgb3Blbihj
b25zdCBjaGFyKiBfX3MsDQogICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9k
ZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OnRydW5jKQ0K
ICAgICAgew0KICAgICAgICBpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9f
bW9kZSB8IGlvc19iYXNlOjpvdXQpKQ0KICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpmYWlsYml0KTsNCiAgICAgIH0NCg0KICAgICAgdm9p
ZA0KICAgICAgY2xvc2Uodm9pZCkNCiAgICAgIHsNCiAgICAgICAgaWYgKCFf
TV9maWxlYnVmLmNsb3NlKCkpDQogICAgICAgICAgc2V0c3RhdGUoaW9zX2Jh
c2U6OmZhaWxiaXQpOw0KICAgICAgfQ0KICAgIH07DQoNCg0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBj
bGFzcyBiYXNpY19mc3RyZWFtIDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4NCiAgICB7DQogICAgcHVibGljOg0KDQogICAgICB0
eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7DQogICAgICB0eXBlZGVmIF9UcmFp
dHMgdHJhaXRzX3R5cGU7DQogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0
c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsNCiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOw0KICAgICAg
dHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5
cGU7DQoNCg0KICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlw
ZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOw0KICAgICAgdHlwZWRl
ZiBiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pb3NfdHlw
ZTsNCiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcl90eXBlLCB0
cmFpdHNfdHlwZT4gX19pb3N0cmVhbV90eXBlOw0KDQogICAgcHJpdmF0ZToN
CiAgICAgIF9fZmlsZWJ1Zl90eXBlIF9NX2ZpbGVidWY7DQoNCiAgICBwdWJs
aWM6DQoNCiAgICAgIGJhc2ljX2ZzdHJlYW0oKQ0KICAgICAgOiBfX2lvc3Ry
ZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpDQogICAgICB7IHRoaXMt
PmluaXQoJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGV4cGxpY2l0DQogICAg
ICBiYXNpY19mc3RyZWFtKGNvbnN0IGNoYXIqIF9fcywNCiAgICAgICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNl
OjppbiB8IGlvc19iYXNlOjpvdXQpDQogICAgICA6IF9faW9zdHJlYW1fdHlw
ZShfX251bGwpLCBfTV9maWxlYnVmKCkNCiAgICAgIHsNCiAgICAgICAgdGhp
cy0+aW5pdCgmX01fZmlsZWJ1Zik7DQogICAgICAgIHRoaXMtPm9wZW4oX19z
LCBfX21vZGUpOw0KICAgICAgfQ0KDQogICAgICB+YmFzaWNfZnN0cmVhbSgp
DQogICAgICB7IH0NCg0KDQogICAgICBfX2ZpbGVidWZfdHlwZSoNCiAgICAg
IHJkYnVmKHZvaWQpIGNvbnN0DQogICAgICB7IHJldHVybiBjb25zdF9jYXN0
PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9DQoNCiAgICAgIGJv
b2wNCiAgICAgIGlzX29wZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5p
c19vcGVuKCk7IH0NCg0KICAgICAgdm9pZA0KICAgICAgb3Blbihjb25zdCBj
aGFyKiBfX3MsDQogICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21v
ZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQ0KICAgICAgew0K
ICAgICAgICBpZiAoIV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSkpDQog
ICAgICAgICAgc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOw0KICAgICAg
fQ0KDQogICAgICB2b2lkDQogICAgICBjbG9zZSh2b2lkKQ0KICAgICAgew0K
ICAgICAgICBpZiAoIV9NX2ZpbGVidWYuY2xvc2UoKSkNCiAgICAgICAgICBz
ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7DQogICAgICB9DQogICAgfTsN
Cn0NCg0KDQoNCg0KDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRl
L2crKy12My9iaXRzL2ZzdHJlYW0udGNjIiAxIDMNCiMgMzcgIi9ob21lL21k
ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL2ZzdHJlYW0udGNjIiAz
DQpuYW1lc3BhY2Ugc3RkDQp7DQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfZmls
ZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBfTV9hbGxvY2F0ZV9maWxl
KCkNCiAgICB7DQogICAgICBpZiAoIV9NX2ZpbGUpDQogICAgICAgIHsNCiAg
ICAgICAgICBfTV9idWZfdW5pZmllZCA9IHRydWU7DQogICAgICAgICAgdHJ5
DQogICAgICAgICAgICB7IF9NX2ZpbGUgPSBuZXcgX19maWxlX3R5cGUoJl9N
X2xvY2spOyB9DQogICAgICAgICAgY2F0Y2goLi4uKQ0KICAgICAgICAgICAg
ew0KICAgICAgICAgICAgICBkZWxldGUgX01fZmlsZTsNCiAgICAgICAgICAg
ICAgdGhyb3c7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
Pg0KICAgIHZvaWQNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
cz46Og0KICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigpDQogICAg
ew0KICAgICAgaWYgKCFfTV9idWYgJiYgX01fYnVmX3NpemVfb3B0KQ0KICAg
ICAgICB7DQogICAgICAgICAgX01fYnVmX3NpemUgPSBfTV9idWZfc2l6ZV9v
cHQ7DQoNCg0KICAgICAgICAgIHRyeSB7IF9NX2J1ZiA9IG5ldyBjaGFyX3R5
cGVbX01fYnVmX3NpemVdOyB9DQogICAgICAgICAgY2F0Y2goLi4uKQ0KICAg
ICAgICAgICAgew0KICAgICAgICAgICAgICBkZWxldGUgW10gX01fYnVmOw0K
ICAgICAgICAgICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
ICBfTV9idWZfYWxsb2NhdGVkID0gdHJ1ZTsNCiAgICAgICAgfQ0KICAgIH0N
Cg0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+OjoNCiAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpDQog
ICAgew0KICAgICAgaWYgKF9NX2J1Zl9hbGxvY2F0ZWQpDQogICAgICAgIHsN
CiAgICAgICAgICBkZWxldGUgW10gX01fYnVmOw0KICAgICAgICAgIF9NX2J1
ZiA9IF9fbnVsbDsNCiAgICAgICAgICBfTV9idWZfYWxsb2NhdGVkID0gZmFs
c2U7DQogICAgICAgICAgdGhpcy0+c2V0ZyhfX251bGwsIF9fbnVsbCwgX19u
dWxsKTsNCiAgICAgICAgICB0aGlzLT5zZXRwKF9fbnVsbCwgX19udWxsKTsN
CiAgICAgICAgfQ0KICAgIH0NCg0KIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICB2b2lkDQogICAgYmFzaWNfZmls
ZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBfTV9hbGxvY2F0ZV9wYmFj
a19idWZmZXIoKQ0KICAgIHsNCiAgICAgIGlmICghX01fcGJhY2sgJiYgX01f
cGJhY2tfc2l6ZSkNCiAgICAgICAgew0KDQogICAgICAgICAgdHJ5DQogICAg
ICAgICAgICB7IF9NX3BiYWNrID0gbmV3IGNoYXJfdHlwZVtfTV9wYmFja19z
aXplXTsgfQ0KICAgICAgICAgIGNhdGNoKC4uLikNCiAgICAgICAgICAgIHsN
CiAgICAgICAgICAgICAgZGVsZXRlIFtdIF9NX3BiYWNrOw0KICAgICAgICAg
ICAgICB0aHJvdzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0N
Cg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+DQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAg
ICBiYXNpY19maWxlYnVmKCkNCiAgICA6IF9fc3RyZWFtYnVmX3R5cGUoKSwg
X01fZmlsZShfX251bGwpLCBfTV9zdGF0ZV9jdXIoX19zdGF0ZV90eXBlKCkp
LA0KICAgIF9NX3N0YXRlX2JlZyhfX3N0YXRlX3R5cGUoKSksIF9NX2J1Zl9h
bGxvY2F0ZWQoZmFsc2UpLA0KICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZChmYWxz
ZSkNCiAgICB7IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+DQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+OjoNCiAgICBiYXNpY19maWxlYnVmKF9fY19maWxlX3R5cGUqIF9f
ZiwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgaW50X3R5cGUgX19zKQ0K
ICAgIDogX19zdHJlYW1idWZfdHlwZSgpLCBfTV9maWxlKF9fbnVsbCksIF9N
X3N0YXRlX2N1cihfX3N0YXRlX3R5cGUoKSksDQogICAgX01fc3RhdGVfYmVn
KF9fc3RhdGVfdHlwZSgpKSwgX01fYnVmX2FsbG9jYXRlZChmYWxzZSksDQog
ICAgX01fbGFzdF9vdmVyZmxvd2VkKGZhbHNlKQ0KICAgIHsNCiAgICAgIF9N
X2FsbG9jYXRlX2ZpbGUoKTsNCiAgICAgIF9NX2ZpbGUtPnN5c19vcGVuKF9f
ZiwgX19tb2RlKTsNCiAgICAgIGlmICh0aGlzLT5pc19vcGVuKCkpDQogICAg
ICAgIHsNCiAgICAgICAgICBfTV9tb2RlID0gX19tb2RlOw0KICAgICAgICAg
IGlmIChfX3MpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIF9NX2J1
Zl9zaXplX29wdCA9IF9fczsNCiAgICAgICAgICAgICAgX01fYWxsb2NhdGVf
aW50ZXJuYWxfYnVmZmVyKCk7DQogICAgICAgICAgICAgIF9NX3NldF9pbmRl
dGVybWluYXRlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgX01fYWxs
b2NhdGVfcGJhY2tfYnVmZmVyKCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0K
ICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6X19maWxlYnVm
X3R5cGUqDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoN
CiAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2Rl
IF9fbW9kZSkNCiAgICB7DQogICAgICBfX2ZpbGVidWZfdHlwZSAqX19yZXQg
PSBfX251bGw7DQogICAgICBpZiAoIXRoaXMtPmlzX29wZW4oKSkNCiAgICAg
ICAgew0KICAgICAgICAgIF9NX2FsbG9jYXRlX2ZpbGUoKTsNCiAgICAgICAg
ICBfTV9maWxlLT5vcGVuKF9fcywgX19tb2RlKTsNCiAgICAgICAgICBpZiAo
dGhpcy0+aXNfb3BlbigpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg
ICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKTsNCiAgICAgICAgICAg
ICAgX01fYWxsb2NhdGVfcGJhY2tfYnVmZmVyKCk7DQogICAgICAgICAgICAg
IF9NX21vZGUgPSBfX21vZGU7DQoNCg0KICAgICAgICAgICAgICBfTV9zZXRf
aW5kZXRlcm1pbmF0ZSgpOw0KICAgICAgICAgICAgICBpZiAoX19tb2RlICYg
aW9zX2Jhc2U6OmF0ZQ0KICAgICAgICAgICAgICAgICAgJiYgdGhpcy0+c2Vl
a29mZigwLCBpb3NfYmFzZTo6ZW5kLCBfX21vZGUpIDwgMCkNCiAgICAgICAg
ICAgICAgICB0aGlzLT5jbG9zZSgpOw0KICAgICAgICAgICAgICBfX3JldCA9
IHRoaXM7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIHJldHVy
biBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJU
LCBfVHJhaXRzPjo6X19maWxlYnVmX3R5cGUqDQogICAgYmFzaWNfZmlsZWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBjbG9zZSgpDQogICAgew0KICAg
ICAgX19maWxlYnVmX3R5cGUgKl9fcmV0ID0gX19udWxsOw0KICAgICAgaWYg
KHRoaXMtPmlzX29wZW4oKSkNCiAgICAgICAgew0KICAgICAgICAgIGJvb2wg
X190ZXN0cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0
X2VuZDsNCiAgICAgICAgICBpZiAoX190ZXN0cHV0KQ0KICAgICAgICAgICAg
X01fcmVhbGx5X292ZXJmbG93KHRyYWl0c190eXBlOjplb2YoKSk7DQoNCg0K
ICAgICAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsNCiMgMTkyICIvaG9tZS9t
ZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9mc3RyZWFtLnRjYyIg
Mw0KICAgICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6b3Blbm1vZGUoMCk7
DQogICAgICAgICAgX01fZGVzdHJveV9pbnRlcm5hbF9idWZmZXIoKTsNCg0K
ICAgICAgICAgIGlmIChfTV9wYmFjaykNCiAgICAgICAgICAgIHsNCiAgICAg
ICAgICAgICAgZGVsZXRlIFtdIF9NX3BiYWNrOw0KICAgICAgICAgICAgICBf
TV9wYmFjayA9IF9fbnVsbDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICBf
X3JldCA9IHRoaXM7DQogICAgICAgIH0NCg0KDQoNCiAgICAgIGlmIChfTV9m
aWxlKQ0KICAgICAgICB7DQogICAgICAgICAgZGVsZXRlIF9NX2ZpbGU7DQog
ICAgICAgICAgX01fZmlsZSA9IF9fbnVsbDsNCiAgICAgICAgfQ0KICAgICAg
X01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7DQogICAgICByZXR1cm4gX19y
ZXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4NCiAgICBzdHJlYW1zaXplDQogICAgYmFzaWNfZmls
ZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBzaG93bWFueWMoKQ0KICAg
IHsNCiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAtMTsNCiAgICAgIGJvb2wg
X190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOw0KDQogICAgICBp
ZiAoX190ZXN0aW4pDQogICAgICAgIHsNCiAgICAgICAgICBib29sIF9fdGVz
dGVvZiA9IGZhbHNlOw0KICAgICAgICAgIGlmIChfTV9pbl9jdXIgPj0gX01f
aW5fZW5kKQ0KICAgICAgICAgICAgX190ZXN0ZW9mID0gdGhpcy0+dW5kZXJm
bG93KCkgPT0gdHJhaXRzX3R5cGU6OmVvZigpOw0KICAgICAgICAgIGlmICgh
X190ZXN0ZW9mKQ0KICAgICAgICAgICAgX19yZXQgPSBfTV9pbl9lbmQgLSBf
TV9pbl9jdXI7DQogICAgICAgIH0NCiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dl
ZCA9IGZhbHNlOw0KICAgICAgcmV0dXJuIF9fcmV0Ow0KICAgIH0NCg0KICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+DQog
ICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQ0K
ICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6DQogICAgdW5k
ZXJmbG93KCkNCiAgICB7DQogICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0
c190eXBlOjplb2YoKTsNCiAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2Rl
ICYgaW9zX2Jhc2U6OmluOw0KICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9t
b2RlICYgaW9zX2Jhc2U6Om91dDsNCg0KDQogICAgICBpZiAoX190ZXN0aW4p
DQogICAgICAgIHsNCg0KDQoNCiAgICAgICAgICBpZiAoX01fcGJhY2tfaW5p
dCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgX01fcGJhY2tfZGVz
dHJveSgpOw0KICAgICAgICAgICAgICBpZiAoX01faW5fY3VyIDwgX01faW5f
ZW5kKQ0KICAgICAgICAgICAgICAgIHJldHVybiB0cmFpdHNfdHlwZTo6dG9f
aW50X3R5cGUoKl9NX2luX2N1cik7DQogICAgICAgICAgICB9DQoNCiAgICAg
ICAgICBib29sIF9fdGVzdGdldCA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcg
PCBfTV9pbl9jdXI7DQogICAgICAgICAgYm9vbCBfX3Rlc3Rpbml0ID0gX01f
aXNfaW5kZXRlcm1pbmF0ZSgpOw0KDQoNCiAgICAgICAgICBpZiAoX190ZXN0
Z2V0KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpZiAoX190ZXN0
b3V0KQ0KICAgICAgICAgICAgICAgIF9NX3JlYWxseV9vdmVyZmxvdygpOw0K
DQogICAgICAgICAgICAgIGVsc2UgaWYgKChfTV9pbl9jdXIgLSBfTV9pbl9i
ZWcpID09IDEpDQogICAgICAgICAgICAgICAgX01fZmlsZS0+c3lzX2dldGMo
KTsNCg0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgX01f
ZmlsZS0+c2Vla29mZihfTV9pbl9jdXIgLSBfTV9pbl9iZWcsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6Y3VyLCBpb3Nf
YmFzZTo6aW4pOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgaWYgKF9f
dGVzdGluaXQgfHwgX190ZXN0Z2V0KQ0KICAgICAgICAgICAgew0KDQogICAg
ICAgICAgICAgIHN0cmVhbXNpemUgX19zaXplID0gX01fZmlsZS0+eHNnZXRu
KF9NX2luX2JlZywgX01fYnVmX3NpemUpOw0KICAgICAgICAgICAgICBpZiAo
MCA8IF9fc2l6ZSkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAg
ICAgICBfTV9zZXRfZGV0ZXJtaW5hdGUoX19zaXplKTsNCiAgICAgICAgICAg
ICAgICAgIGlmIChfX3Rlc3RvdXQpDQogICAgICAgICAgICAgICAgICAgIF9N
X291dF9jdXIgPSBfTV9pbl9jdXI7DQogICAgICAgICAgICAgICAgICBfX3Jl
dCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsNCg0K
ICAgICAgICAgICAgICAgICAgaWYgKF9fc2l6ZSA9PSAxKQ0KICAgICAgICAg
ICAgICAgICAgICBfTV9maWxlLT5zeXNfdW5nZXRjKCpfTV9pbl9jdXIpOw0K
ICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7
DQoNCiAgICAgICAgICAgICAgICAgIHN0cmVhbW9mZiBfX3AgPSBfTV9maWxl
LT5zZWVrb2ZmKDAgLSBfX3NpemUsIGlvc19iYXNlOjpjdXIsDQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW4pOw0KICAgICAgICAgICAgICAgICAgaWYgKF9fcCA9PSAt
MSkNCiAgICAgICAgICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgICAg
ICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAg
ICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIF9NX2xh
c3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOw0KICAgICAgcmV0dXJuIF9fcmV0Ow0K
ICAgIH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+DQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
OjppbnRfdHlwZQ0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz
Pjo6DQogICAgcGJhY2tmYWlsKGludF90eXBlIF9faSkNCiAgICB7DQogICAg
ICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsNCiAgICAg
IGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOw0KDQog
ICAgICBpZiAoX190ZXN0aW4pDQogICAgICAgIHsNCiAgICAgICAgICBib29s
IF9fdGVzdHBiID0gX01faW5fYmVnIDwgX01faW5fY3VyOw0KICAgICAgICAg
IGNoYXJfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9f
aSk7DQogICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFpdHNfdHlwZTo6
ZXFfaW50X3R5cGUoX19pLCBfX3JldCk7DQoNCiAgICAgICAgICBpZiAoX190
ZXN0cGIpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGJvb2wgX190
ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7DQogICAgICAgICAg
ICAgIGJvb2wgX190ZXN0ZXEgPSB0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlz
LT5ncHRyKClbLTFdKTsNCg0KDQoNCiAgICAgICAgICAgICAgaWYgKCFfX3Rl
c3Rlb2YgJiYgX190ZXN0ZXEpDQogICAgICAgICAgICAgICAgew0KICAgICAg
ICAgICAgICAgICAgLS1fTV9pbl9jdXI7DQogICAgICAgICAgICAgICAgICBp
ZiAoX190ZXN0b3V0KQ0KICAgICAgICAgICAgICAgICAgICAtLV9NX291dF9j
dXI7DQogICAgICAgICAgICAgICAgICBfX3JldCA9IF9faTsNCiAgICAgICAg
ICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGVvZikN
CiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAtLV9NX2lu
X2N1cjsNCiAgICAgICAgICAgICAgICAgIGlmIChfX3Rlc3RvdXQpDQogICAg
ICAgICAgICAgICAgICAgIC0tX01fb3V0X2N1cjsNCiAgICAgICAgICAgICAg
ICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19pKTsNCiAgICAg
ICAgICAgICAgICB9DQogICAgICAgICAgICAgIGVsc2UgaWYgKCFfX3Rlc3Rl
b2YpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgLS1f
TV9pbl9jdXI7DQogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0b3V0KQ0K
ICAgICAgICAgICAgICAgICAgICAtLV9NX291dF9jdXI7DQogICAgICAgICAg
ICAgICAgICBfTV9wYmFja19jcmVhdGUoKTsNCiAgICAgICAgICAgICAgICAg
ICpfTV9pbl9jdXIgPSBfX2M7DQogICAgICAgICAgICAgICAgICBfX3JldCA9
IF9faTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAg
ICAgICAgZWxzZQ0KICAgICAgICAgICAgew0KDQoNCiAgICAgICAgICAgICAg
dGhpcy0+c2Vla29mZigtMSwgaW9zX2Jhc2U6OmN1cik7DQogICAgICAgICAg
ICAgIHRoaXMtPnVuZGVyZmxvdygpOw0KICAgICAgICAgICAgICBpZiAoIV9f
dGVzdGVvZikNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg
ICBpZiAoIXRyYWl0c190eXBlOjplcShfX2MsICpfTV9pbl9jdXIpKQ0KICAg
ICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgX01f
cGJhY2tfY3JlYXRlKCk7DQogICAgICAgICAgICAgICAgICAgICAgKl9NX2lu
X2N1ciA9IF9fYzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg
ICAgICAgICAgX19yZXQgPSBfX2k7DQogICAgICAgICAgICAgICAgfQ0KICAg
ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgX19yZXQgPSB0cmFp
dHNfdHlwZTo6bm90X2VvZihfX2kpOw0KICAgICAgICAgICAgfQ0KICAgICAg
ICB9DQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsNCiAgICAg
IHJldHVybiBfX3JldDsNCiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPg0KICAgIGJhc2ljX2ZpbGVidWY8
X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUNCiAgICBiYXNpY19maWxlYnVm
PF9DaGFyVCwgX1RyYWl0cz46Og0KICAgIG92ZXJmbG93KGludF90eXBlIF9f
YykNCiAgICB7DQogICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBl
Ojplb2YoKTsNCiAgICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAm
JiBfTV9vdXRfY3VyIDwgX01fYnVmICsgX01fYnVmX3NpemU7DQogICAgICBi
b29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0Ow0KDQog
ICAgICBpZiAoX190ZXN0b3V0KQ0KICAgICAgICB7DQogICAgICAgICAgaWYg
KF9fdGVzdHB1dCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgKl9N
X291dF9jdXIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7DQog
ICAgICAgICAgICAgIF9NX291dF9jdXJfbW92ZSgxKTsNCiAgICAgICAgICAg
ICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2MpOw0KICAgICAg
ICAgICAgfQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIF9fcmV0ID0g
dGhpcy0+X01fcmVhbGx5X292ZXJmbG93KF9fYyk7DQogICAgICAgIH0NCg0K
ICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7DQogICAgICByZXR1
cm4gX19yZXQ7DQogICAgfQ0KDQogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBiYXNpY19maWxlYnVmPF9DaGFy
VCwgX1RyYWl0cz46OmludF90eXBlDQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+OjoNCiAgICBfTV9yZWFsbHlfb3ZlcmZsb3coaW50X3R5
cGUgX19jKQ0KICAgIHsNCiAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRz
X3R5cGU6OmVvZigpOw0KICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRf
Y3VyICYmIF9NX291dF9iZWcgPCBfTV9vdXRfZW5kOw0KICAgICAgYm9vbCBf
X3Rlc3R1bmJ1ZmZlcmVkID0gX01fZmlsZSAmJiAhX01fYnVmX3NpemU7DQoN
CiAgICAgIGlmIChfX3Rlc3RwdXQgfHwgX190ZXN0dW5idWZmZXJlZCkNCiAg
ICAgICAgew0KDQogICAgICAgICAgaW50IF9fcGxlbiA9IF9NX291dF9lbmQg
LSBfTV9vdXRfYmVnOw0KICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAw
Ow0KDQogICAgICAgICAgaWYgKF9fcGxlbikNCiAgICAgICAgICAgIF9fbGVu
ID0gX01fZmlsZS0+eHNwdXRuKF9NX291dF9iZWcsIF9fcGxlbik7DQoNCiAg
ICAgICAgICBpZiAoX19jICE9dHJhaXRzX3R5cGU6OmVvZigpKQ0KICAgICAg
ICAgICAgew0KICAgICAgICAgICAgICBjaGFyX3R5cGUgX19wZW5kaW5nID0g
dHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOw0KICAgICAgICAgICAg
ICBfX2xlbiArPSBfTV9maWxlLT54c3B1dG4oJl9fcGVuZGluZywgMSk7DQog
ICAgICAgICAgICAgICsrX19wbGVuOw0KICAgICAgICAgICAgfQ0KDQoNCg0K
ICAgICAgICAgIF9NX2ZpbGUtPnN5bmMoKTsNCiAgICAgICAgICBpZiAoX19s
ZW4gPT0gX19wbGVuKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBf
TV9zZXRfaW5kZXRlcm1pbmF0ZSgpOw0KICAgICAgICAgICAgICBfX3JldCA9
IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7DQogICAgICAgICAgICB9DQoj
IDQ3MiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
ZnN0cmVhbS50Y2MiIDMNCiAgICAgICAgfQ0KICAgICAgX01fbGFzdF9vdmVy
Zmxvd2VkID0gdHJ1ZTsNCiAgICAgIHJldHVybiBfX3JldDsNCiAgICB9DQoN
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
Pg0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6X19zdHJl
YW1idWZfdHlwZSoNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
cz46Og0KICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
X24pDQogICAgew0KICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkgJiYgX19z
ID09IDAgJiYgX19uID09IDApDQogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9
IDA7DQogICAgICBlbHNlIGlmIChfX3MgJiYgX19uKQ0KICAgICAgICB7DQoN
Cg0KDQoNCg0KICAgICAgICAgIF9NX2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVy
KCk7DQoNCg0KICAgICAgICAgIF9NX2J1ZiA9IF9fczsNCiAgICAgICAgICBf
TV9idWZfc2l6ZV9vcHQgPSBfTV9idWZfc2l6ZSA9IF9fbjsNCiAgICAgICAg
ICBfTV9zZXRfaW5kZXRlcm1pbmF0ZSgpOw0KDQoNCiAgICAgICAgICBfTV9h
bGxvY2F0ZV9wYmFja19idWZmZXIoKTsNCiAgICAgICAgfQ0KICAgICAgX01f
bGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7DQogICAgICByZXR1cm4gdGhpczsN
CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPg0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz
Pjo6cG9zX3R5cGUNCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
cz46Og0KICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpz
ZWVrZGlyIF9fd2F5LCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQ0KICAg
IHsNCiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUo
LTEpKTsNCiAgICAgIGJvb2wgX190ZXN0b3BlbiA9IHRoaXMtPmlzX29wZW4o
KTsNCiAgICAgIGJvb2wgX190ZXN0aW4gPSBfX21vZGUgJiBpb3NfYmFzZTo6
aW4gJiYgX01fbW9kZSAmIGlvc19iYXNlOjppbjsNCiAgICAgIGJvb2wgX190
ZXN0b3V0ID0gX19tb2RlICYgaW9zX2Jhc2U6Om91dCAmJiBfTV9tb2RlICYg
aW9zX2Jhc2U6Om91dDsNCg0KDQogICAgICBpbnQgX193aWR0aCA9IHVzZV9m
YWNldDxfX2NvZGVjdnRfdHlwZT4oX01fYnVmX2xvY2FsZSkuZW5jb2Rpbmco
KTsNCiAgICAgIGlmIChfX3dpZHRoIDwgMCkNCiAgICAgICAgX193aWR0aCA9
IDA7DQogICAgICBib29sIF9fdGVzdGZhaWwgPSBfX29mZiAhPSAwICYmIF9f
d2lkdGggPD0gMDsNCg0KICAgICAgaWYgKF9fdGVzdG9wZW4gJiYgIV9fdGVz
dGZhaWwgJiYgKF9fdGVzdGluIHx8IF9fdGVzdG91dCkpDQogICAgICAgIHsN
Cg0KICAgICAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsNCg0KICAgICAgICAg
IGlmIChfX3dheSAhPSBpb3NfYmFzZTo6Y3VyIHx8IF9fb2ZmICE9IDApDQog
ICAgICAgICAgICB7DQogICAgICAgICAgICAgIG9mZl90eXBlIF9fY29tcHV0
ZWRfb2ZmID0gX193aWR0aCAqIF9fb2ZmOw0KDQogICAgICAgICAgICAgIGJv
b2wgX190ZXN0Z2V0ID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2lu
X2VuZDsNCiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRf
Y3VyICYmIF9NX291dF9iZWcgPCBfTV9vdXRfZW5kOw0KDQoNCiAgICAgICAg
ICAgICAgaWYgKF9fdGVzdHB1dCB8fCBfTV9sYXN0X292ZXJmbG93ZWQpDQog
ICAgICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgICAgICB0aGlzLT5z
eW5jKCk7DQoNCiAgICAgICAgICAgICAgICAgIF9NX291dHB1dF91bnNoaWZ0
KCk7DQogICAgICAgICAgICAgICAgfQ0KDQoNCiAgICAgICAgICAgICAgZWxz
ZSBpZiAoX190ZXN0Z2V0ICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIpDQog
ICAgICAgICAgICAgICAgX19jb21wdXRlZF9vZmYgKz0gX01faW5fY3VyIC0g
X01faW5fYmVnOw0KDQogICAgICAgICAgICAgIF9fcmV0ID0gX01fZmlsZS0+
c2Vla29mZihfX2NvbXB1dGVkX29mZiwgX193YXksIF9fbW9kZSk7DQogICAg
ICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7DQogICAgICAgICAg
ICB9DQoNCg0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAgICAg
ICAgICAgICAgX19yZXQgPSBfTV9maWxlLT5zZWVrb2ZmKF9fb2ZmLCBpb3Nf
YmFzZTo6Y3VyLCBfX21vZGUpOw0KICAgICAgICAgICAgICBfX3JldCArPSBt
YXgoX01fb3V0X2N1ciwgX01faW5fY3VyKSAtIF9NX2J1ZjsNCiAgICAgICAg
ICAgIH0NCiAgICAgICAgfQ0KICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0g
ZmFsc2U7DQogICAgICByZXR1cm4gX19yZXQ7DQogICAgfQ0KDQogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4NCiAgICBi
YXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlDQogICAg
YmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoNCiAgICBzZWVrcG9z
KHBvc190eXBlIF9fcG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQ0K
ICAgIHsNCiAgICAgIHBvc190eXBlIF9fcmV0Ow0KICAgICAgb2ZmX3R5cGUg
X19vZmYgPSBfX3BvczsNCg0KICAgICAgX19yZXQgPSB0aGlzLT5zZWVrb2Zm
KF9fb2ZmLCBpb3NfYmFzZTo6YmVnLCBfX21vZGUpOw0KDQogICAgICBfTV9s
YXN0X292ZXJmbG93ZWQgPSBmYWxzZTsNCiAgICAgIHJldHVybiBfX3JldDsN
CiAgICB9DQoNCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPg0KICAgIHZvaWQNCiAgICBiYXNpY19maWxlYnVmPF9DaGFy
VCwgX1RyYWl0cz46Og0KICAgIF9NX291dHB1dF91bnNoaWZ0KCkNCiAgICB7
IH0NCg0KICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+DQogICAgdm9pZA0KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBf
VHJhaXRzPjo6DQogICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykNCiAg
ICB7DQogICAgICBib29sIF9fdGVzdGJlZyA9IGdwdHIoKSA9PSBlYmFjaygp
ICYmIHBwdHIoKSA9PSBwYmFzZSgpOw0KDQogICAgICBpZiAoX190ZXN0YmVn
ICYmIF9NX2J1Zl9sb2NhbGUgIT0gX19sb2MpDQogICAgICAgIHsNCiAgICAg
ICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7DQogICAgICAgICAgX01fYnVm
X2xvY2FsZV9pbml0ID0gdHJ1ZTsNCiAgICAgICAgfQ0KDQoNCg0KDQoNCiAg
ICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOw0KICAgIH0NCg0KfQ0K
IyA0MjEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9mc3RyZWFtLmgiIDIgMw0KIyAzMyAiL2hvbWUvbWRlaWwvYmluLy4u
L2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL2ZzdHJlYW0uaCIgMiAzDQoNCnVz
aW5nIHN0ZDo6ZmlsZWJ1ZjsNCnVzaW5nIHN0ZDo6aWZzdHJlYW07DQp1c2lu
ZyBzdGQ6Om9mc3RyZWFtOw0KdXNpbmcgc3RkOjpmc3RyZWFtOw0KdXNpbmcg
c3RkOjpzdHJlYW1wb3M7DQojIDIzICJidWZmZXIuY2MiIDINCg0KIyAxICIv
aG9tZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDEg
Mw0KIyAzMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2lv
c3RyZWFtIiAzDQojIDEgIi9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAxIDMNCiMgMzggIi9ob21lL21k
ZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5o
IiAzDQoNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYz
L3NwYXJjLXN1bi1zb2xhcmlzMi43L2JpdHMvYysrY29uZmlnLmgiIDEgMw0K
IyA0MCAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2lvc3RyZWFtLmgiIDIgMw0KIyAxICIvaG9tZS9tZGVpbC9iaW4vLi4v
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAxIDMNCiMgNDEg
Ii9ob21lL21kZWlsL2Jpbi8uLi9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9p
b3N0cmVhbS5oIiAyIDMNCiMgMSAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJlYW0uaCIgMSAzDQojIDQyICIvaG9t
ZS9tZGVpbC9iaW4vLi4vaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJl
YW0uaCIgMiAzDQoNCm5hbWVzcGFjZSBzdGQNCnsNCiAgZXh0ZXJuIGlzdHJl
YW0gY2luOw0KICBleHRlcm4gb3N0cmVhbSBjb3V0Ow0KICBleHRlcm4gb3N0
cmVhbSBjZXJyOw0KICBleHRlcm4gb3N0cmVhbSBjbG9nOw0KIyA1NyAiL2hv
bWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3Ry
ZWFtLmgiIDMNCiAgc3RhdGljIGlvc19iYXNlOjpJbml0IF9faW9pbml0Ow0K
fQ0KIyAzMiAiL2hvbWUvbWRlaWwvYmluLy4uL2luY2x1ZGUvZysrLXYzL2lv
c3RyZWFtIiAyIDMNCiMgMjUgImJ1ZmZlci5jYyIgMg0KDQojIDEgImNvbW1v
bi5oIiAxDQoNCg0KDQpleHRlcm4gaW50IGN1cnJlbnRMaW5lTnVtYmVyOw0K
ZXh0ZXJuIGludCBjdXJyZW50TmVzdGluZ0xldmVsOw0KIyAyNyAiYnVmZmVy
LmNjIiAyDQojIDEgIm1pc2MuaCIgMQ0KIyAyOCAiYnVmZmVyLmNjIiAyDQoj
IDEgImVycm9yLmgiIDENCg0KDQoNCmV4dGVybiBpbnQgZXJyb3JDb3VudDsN
Cg0KDQoNCg0KDQoNCmVudW0gVEFib3J0Q29kZSB7DQogICAgYWJvcnRJbnZh
bGlkQ29tbWFuZExpbmVBcmdzID0gLTEsDQogICAgYWJvcnRTb3VyY2VGaWxl
T3BlbkZhaWxlZCA9IC0yLA0KICAgIGFib3J0SUZvcm1GaWxlT3BlbkZhaWxl
ZCA9IC0zLA0KICAgIGFib3J0QXNzZW1ibHlGaWxlT3BlbkZhaWxlZCA9IC00
LA0KICAgIGFib3J0VG9vTWFueVN5bnRheEVycm9ycyA9IC01LA0KICAgIGFi
b3J0U3RhY2tPdmVyZmxvdyA9IC02LA0KICAgIGFib3J0Q29kZVNlZ21lbnRP
dmVyZmxvdyA9IC03LA0KICAgIGFib3J0TmVzdGluZ1Rvb0RlZXAgPSAtOCwN
CiAgICBhYm9ydFJ1bnRpbWVFcnJvciA9IC05LA0KICAgIGFib3J0VW5pbXBs
ZW1lbnRlZEZlYXR1cmUgPSAtMTANCn0gOw0KDQp2b2lkIEFib3J0VHJhbnNs
YXRpb24oVEFib3J0Q29kZSBhYyk7DQojIDI5ICJidWZmZXIuY2MiIDINCiMg
MSAiYnVmZmVyLmgiIDENCiMgMTAgImJ1ZmZlci5oIg0KZXh0ZXJuIGNoYXIg
ZW9mQ2hhcjsNCmV4dGVybiBpbnQgaW5wdXRQb3NpdGlvbjsNCmV4dGVybiBp
bnQgbGlzdEZsYWc7DQpleHRlcm4gaW50IGxldmVsOw0KDQpjb25zdCBpbnQg
bWF4SW5wdXRCdWZmZXJTaXplID0gMjU2Ow0KDQoNCg0KDQoNCmNsYXNzIFRU
ZXh0SW5CdWZmZXIgew0KDQpwcm90ZWN0ZWQ6DQogICAgZnN0cmVhbSBmaWxl
Ow0KICAgIGNoYXIgKmNvbnN0IHBGaWxlTmFtZTsNCiAgICBjaGFyIHRleHRb
bWF4SW5wdXRCdWZmZXJTaXplXTsNCiAgICBjaGFyICpwQ2hhcjsNCg0KDQog
ICAgdmlydHVhbCBjaGFyIEdldExpbmUodm9pZCkgPSAwOw0KDQpwdWJsaWM6
DQogICAgVFRleHRJbkJ1ZmZlcihjb25zdCBjaGFyICpwSW5wdXRGaWxlTmFt
ZSwgVEFib3J0Q29kZSBhYyk7DQoNCiAgICB2aXJ0dWFsIH5UVGV4dEluQnVm
ZmVyKHZvaWQpDQogICAgew0KICAgICAgICBmaWxlLmNsb3NlKCk7DQogICAg
ICAgIGRlbGV0ZSBwRmlsZU5hbWU7DQogICAgfQ0KDQogICAgY2hhciBDaGFy
ICh2b2lkKSBjb25zdCB7IHJldHVybiAqcENoYXI7IH0NCiAgICBjaGFyIEdl
dENoYXIgKHZvaWQpOw0KICAgIGNoYXIgUHV0QmFja0NoYXIodm9pZCk7DQp9
Ow0KDQoNCg0KDQoNCmNsYXNzIFRTb3VyY2VCdWZmZXIgOiBwdWJsaWMgVFRl
eHRJbkJ1ZmZlciB7DQogICAgdmlydHVhbCBjaGFyIEdldExpbmUodm9pZCk7
DQoNCnB1YmxpYzoNCiAgICBUU291cmNlQnVmZmVyKGNvbnN0IGNoYXIgKnBT
b3VyY2VGaWxlTmFtZSk7DQp9Ow0KIyA2NyAiYnVmZmVyLmgiDQpjbGFzcyBU
VGV4dE91dEJ1ZmZlciB7DQoNCnB1YmxpYzoNCiAgICBjaGFyIHRleHRbbWF4
SW5wdXRCdWZmZXJTaXplICsgMTZdOw0KDQogICAgdmlydHVhbCB2b2lkIFB1
dExpbmUodm9pZCkgPSAwOw0KDQogICAgdm9pZCBQdXRMaW5lKGNvbnN0IGNo
YXIgKnBUZXh0KQ0KICAgIHsNCiAgICAgICAgc3RyY3B5KHRleHQsIHBUZXh0
KTsNCiAgICAgICAgUHV0TGluZSgpOw0KICAgIH0NCn07DQoNCg0KDQoNCg0K
Y2xhc3MgVExpc3RCdWZmZXIgOiBwdWJsaWMgVFRleHRPdXRCdWZmZXIgew0K
ICAgIGNoYXIgKnBTb3VyY2VGaWxlTmFtZTsNCiAgICBjaGFyIGRhdGVbMjZd
Ow0KICAgIGludCBwYWdlTnVtYmVyOw0KICAgIGludCBsaW5lQ291bnQ7DQoN
CiAgICB2b2lkIFByaW50UGFnZUhlYWRlcih2b2lkKTsNCg0KcHVibGljOg0K
ICAgIHZpcnR1YWwgflRMaXN0QnVmZmVyKHZvaWQpIHsgZGVsZXRlIHBTb3Vy
Y2VGaWxlTmFtZTsgfQ0KDQogICAgdm9pZCBJbml0aWFsaXplKGNvbnN0IGNo
YXIgKmZpbGVOYW1lKTsNCiAgICB2aXJ0dWFsIHZvaWQgUHV0TGluZSh2b2lk
KTsNCg0KICAgIHZvaWQgUHV0TGluZShjb25zdCBjaGFyICpwVGV4dCkNCiAg
ICB7DQogICAgICAgIFRUZXh0T3V0QnVmZmVyOjpQdXRMaW5lKHBUZXh0KTsN
CiAgICB9DQoNCiAgICB2b2lkIFB1dExpbmUoY29uc3QgY2hhciAqcFRleHQs
IGludCBsaW5lTnVtYmVyLCBpbnQgbmVzdGluZ0xldmVsKQ0KICAgIHsNCiAg
ICAgICAgc3ByaW50Zih0ZXh0LCAiJTRkICVkOiAlcyIsIGxpbmVOdW1iZXIs
IG5lc3RpbmdMZXZlbCwgcFRleHQpOw0KICAgICAgICBQdXRMaW5lKCk7DQog
ICAgfQ0KfTsNCg0KZXh0ZXJuIFRMaXN0QnVmZmVyIGxpc3Q7DQojIDMwICJi
dWZmZXIuY2MiIDINCg0KdXNpbmcgbmFtZXNwYWNlIHN0ZCA7DQoNCg0KDQoN
Cg0KDQoNCmNoYXIgZW9mQ2hhciA9IDB4N0Y7DQppbnQgaW5wdXRQb3NpdGlv
bjsNCg0KaW50IGxpc3RGbGFnID0gMTs7DQojIDUyICJidWZmZXIuY2MiDQpU
VGV4dEluQnVmZmVyOjpUVGV4dEluQnVmZmVyKGNvbnN0IGNoYXIgKnBJbnB1
dEZpbGVOYW1lLCBUQWJvcnRDb2RlIGFjKQ0KICAgIDogcEZpbGVOYW1lKG5l
dyBjaGFyW3N0cmxlbihwSW5wdXRGaWxlTmFtZSkgKyAxXSkNCnsNCg0KICAg
IHN0cmNweShwRmlsZU5hbWUsIHBJbnB1dEZpbGVOYW1lKTsNCg0KDQoNCiAg
ICBmaWxlLm9wZW4ocEZpbGVOYW1lLCBpb3M6OmluKTsNCiAgICBpZiAoIWZp
bGUuZ29vZCgpKSBBYm9ydFRyYW5zbGF0aW9uKGFjKTsNCn0NCiMgNzQgImJ1
ZmZlci5jYyINCmNoYXIgVFRleHRJbkJ1ZmZlcjo6R2V0Q2hhcih2b2lkKQ0K
ew0KICAgIGNvbnN0IGludCB0YWJTaXplID0gODsNCiAgICBjaGFyIGNoOw0K
DQogICAgaWYgKCpwQ2hhciA9PSBlb2ZDaGFyKSByZXR1cm4gZW9mQ2hhcjsN
CiAgICBlbHNlIGlmICgqcENoYXIgPT0gJ1wwJykgY2ggPSBHZXRMaW5lKCk7
DQogICAgZWxzZSB7DQogICAgICAgICsrcENoYXI7DQogICAgICAgICsraW5w
dXRQb3NpdGlvbjsNCiAgICAgICAgY2ggPSAqcENoYXI7DQogICAgfQ0KDQoN
Cg0KICAgIGlmIChjaCA9PSAnXHQnKSBpbnB1dFBvc2l0aW9uICs9IHRhYlNp
emUgLSBpbnB1dFBvc2l0aW9uJXRhYlNpemU7DQoNCiAgICByZXR1cm4gY2g7
DQp9DQojIDEwMyAiYnVmZmVyLmNjIg0KY2hhciBUVGV4dEluQnVmZmVyOjpQ
dXRCYWNrQ2hhcih2b2lkKQ0Kew0KICAgIC0tcENoYXI7DQogICAgLS1pbnB1
dFBvc2l0aW9uOw0KDQogICAgcmV0dXJuICpwQ2hhcjsNCn0NCiMgMTI1ICJi
dWZmZXIuY2MiDQpUU291cmNlQnVmZmVyOjpUU291cmNlQnVmZmVyKGNvbnN0
IGNoYXIgKnBTb3VyY2VGaWxlTmFtZSkNCiAgICA6IFRUZXh0SW5CdWZmZXIo
cFNvdXJjZUZpbGVOYW1lLCBhYm9ydFNvdXJjZUZpbGVPcGVuRmFpbGVkKQ0K
ew0KDQogICAgaWYgKGxpc3RGbGFnKSBsaXN0LkluaXRpYWxpemUocFNvdXJj
ZUZpbGVOYW1lKTsNCiAgICBHZXRMaW5lKCk7DQp9DQojIDE0MiAiYnVmZmVy
LmNjIg0KY2hhciBUU291cmNlQnVmZmVyOjpHZXRMaW5lKHZvaWQpDQp7DQog
ICAgZXh0ZXJuIGludCBsaW5lTnVtYmVyLCBjdXJyZW50TmVzdGluZ0xldmVs
Ow0KDQoNCiAgICBpZiAoZmlsZS5lb2YoKSkgcENoYXIgPSAmZW9mQ2hhcjsN
Cg0KDQogICAgZWxzZSB7DQogICAgICAgIGZpbGUuZ2V0bGluZSh0ZXh0LCBt
YXhJbnB1dEJ1ZmZlclNpemUpOw0KICAgICAgICBwQ2hhciA9IHRleHQ7DQoN
CiAgICAgICAgaWYgKGxpc3RGbGFnKSBsaXN0LlB1dExpbmUodGV4dCwgKytj
dXJyZW50TGluZU51bWJlciwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudE5lc3RpbmdMZXZlbCk7DQogICAgfQ0KDQogICAg
aW5wdXRQb3NpdGlvbiA9IDA7DQogICAgcmV0dXJuICpwQ2hhcjsNCn0NCg0K
DQoNCg0KDQoNCg0KY29uc3QgaW50IG1heFByaW50TGluZUxlbmd0aCA9IDgw
Ow0KY29uc3QgaW50IG1heExpbmVzUGVyUGFnZSA9IDUwOw0KDQpUTGlzdEJ1
ZmZlciBsaXN0Ow0KDQoNCg0KDQoNCg0Kdm9pZCBUTGlzdEJ1ZmZlcjo6UHJp
bnRQYWdlSGVhZGVyKHZvaWQpDQp7DQogICAgY29uc3QgY2hhciBmb3JtRmVl
ZENoYXIgPSAnXGYnOw0KDQogICAgY291dCA8PCBmb3JtRmVlZENoYXIgPDwg
IlBhZ2UgIiA8PCArK3BhZ2VOdW1iZXINCiAgICAgICAgIDw8ICIgICAiIDw8
IHBTb3VyY2VGaWxlTmFtZSA8PCAiICAgIiA8PCBkYXRlDQogICAgICAgICA8
PCBlbmRsIDw8IGVuZGw7DQoNCiAgICBsaW5lQ291bnQgPSAwOw0KfQ0KIyAx
OTcgImJ1ZmZlci5jYyINCnZvaWQgVExpc3RCdWZmZXI6OkluaXRpYWxpemUo
Y29uc3QgY2hhciAqcEZpbGVOYW1lKQ0Kew0KICAgIHRleHRbMF0gPSAnXDAn
Ow0KICAgIHBhZ2VOdW1iZXIgPSAwOw0KDQoNCiAgICBwU291cmNlRmlsZU5h
bWUgPSBuZXcgY2hhcltzdHJsZW4ocEZpbGVOYW1lKSArIDFdOw0KICAgIHN0
cmNweShwU291cmNlRmlsZU5hbWUsIHBGaWxlTmFtZSk7DQoNCg0KICAgIHRp
bWVfdCB0aW1lcjsNCiAgICB0aW1lKCZ0aW1lcik7DQogICAgc3RyY3B5KGRh
dGUsIGFzY3RpbWUobG9jYWx0aW1lKCZ0aW1lcikpKTsNCiAgICBkYXRlW3N0
cmxlbihkYXRlKSAtIDFdID0gJ1wwJzsNCg0KICAgIFByaW50UGFnZUhlYWRl
cigpOw0KfQ0KDQoNCg0KDQoNCnZvaWQgVExpc3RCdWZmZXI6OlB1dExpbmUo
dm9pZCkNCnsNCg0KICAgIGlmIChsaXN0RmxhZyAmJiAobGluZUNvdW50ID09
IG1heExpbmVzUGVyUGFnZSkpIFByaW50UGFnZUhlYWRlcigpOw0KDQoNCiAg
ICB0ZXh0W21heFByaW50TGluZUxlbmd0aF0gPSAnXDAnOw0KDQoNCiAgICBj
b3V0IDw8IHRleHQgPDwgZW5kbDsNCiAgICB0ZXh0WzBdID0gJ1wwJzsNCg0K
ICAgICsrbGluZUNvdW50Ow0KfQ0K
---559023410-758783491-1017137114=:8152--
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-25 10:36 Neil Booth
0 siblings, 0 replies; 11+ messages in thread
From: Neil Booth @ 2002-03-25 10:36 UTC (permalink / raw)
To: nobody; +Cc: gcc-prs
The following reply was made to PR c++/6001; it has been noted by GNATS.
From: Neil Booth <neil@daikokuya.demon.co.uk>
To: Mario Deilmann <Mario.Deilmann@pallas.com>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Mon, 25 Mar 2002 18:26:25 +0000
Mario Deilmann wrote:-
> You never should say there are no bug in a specific software ;).
I'm quite sure there are no bugs in this part of CPP. People use it in
millions of situations every day.
> > You should investigate what the issue is. Have you created preprocessed
> > source and examined it? Have you created preprocessed source with a
> > compiler that works and examined it? I bet there's a difference, and we
> > need to know what is causing it.
>
> I did some investigations. Before I send you the bug report I tested the
> problem with various compilers on different platforms and what I observed
> was that the error only occured with versions of gcc. Then I modified the
> source only by changing the include sequence and after this all gcc
> versions had no problem any more. I want to tell the gcc people about this
> so I send the bug report. I have of course limited time to investigate
> on a problem where I have a workaround for and the different include
> sequences I generated with your help don't tell anything to me and I
> definetly don't have the time to look in the cpp source code. Sorry !
I'm not asking you to look into the cpp source code. I'm asking you
for *preprocessed source*. You haven't sent it. It's the output of -E.
> You don't need to replicate my system. With the source code example I send
> you you could replicate the error on a lot of systems.
I can't, on g++ on Linux I get:
$ g++ -c -Wall buffer.cpp
buffer.cpp: In method `char TSourceBuffer::GetLine()':
buffer.cpp:137: warning: unused variable `int lineNumber'
$
in both directories error/ and no-error/ of your tarball.
> I only tested 4 but
> I'm sure there are a lot more. The problem occured only with versions of
> gcc (and to be honest with the Intel Compiler on Linux too) but all other
> C++ Compiler I used didn't find a problem or even a bug (I tested CC on
> Solaris, KCC on Linux, pgiCC on Linux, Visual C on Windows, CC on Compaq
> Alpha and KCC on Solaris) AND when I changed the sequence of the includes
> the error in the system header disappeared with all gcc versions and with
> the Intel Compiler. So in my opinion from this investigation it's too easy
> to say this is a user bug !
>
> > Have you created the preprocessed source? Can you send it to me?
> > Can you send me the preprocessed source from a compiler that works?
>
> Sure. See below ....
No, that is not preprocessed source. You sent me the include trace,
which was *completely different for the two compilers*. How can you
expect to get the same result when the compilers are reading different
header files?
Neil.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-22 11:36 Neil Booth
0 siblings, 0 replies; 11+ messages in thread
From: Neil Booth @ 2002-03-22 11:36 UTC (permalink / raw)
To: nobody; +Cc: gcc-prs
The following reply was made to PR c++/6001; it has been noted by GNATS.
From: Neil Booth <neil@daikokuya.demon.co.uk>
To: Mario Deilmann <Mario.Deilmann@pallas.com>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Fri, 22 Mar 2002 19:30:02 +0000
Mario Deilmann wrote:-
> If I include nested heades and system headers and that causes parse errors
> in the SYSTEM headers of the Compiler this is by no means a user error !
> So why can you be sure it's not a compiler error ?
Because it would be a preprocessor bug, and I'm sure there are no bugs
in this area in CPP.
> The programm seems syntactically correct (it compiles with no errors on
> different platforms with different compilers).
You should investigate what the issue is. Have you created preprocessed
source and examined it? Have you created preprocessed source with a
compiler that works and examined it? I bet there's a difference, and we
need to know what is causing it.
> Anyhow close this thing, have a nice day ;).
Well, I don't want to close something that is a bug, but you have not
convinced me it is a bug. I urge you to find out what exactly is odd
about the preprocessed source, and *why* it is odd. Otherwise we'll
never get anywhere - I can't replicate your system, only you can.
Have you created the preprocessed source? Can you send it to me?
Can you send me the preprocessed source from a compiler that works?
Neil.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-22 1:56 Mario Deilmann
0 siblings, 0 replies; 11+ messages in thread
From: Mario Deilmann @ 2002-03-22 1:56 UTC (permalink / raw)
To: nobody; +Cc: gcc-prs
The following reply was made to PR c++/6001; it has been noted by GNATS.
From: Mario Deilmann <Mario.Deilmann@pallas.com>
To: Neil Booth <neil@daikokuya.demon.co.uk>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Fri, 22 Mar 2002 10:46:04 +0100 (MET)
Hi Neil,
just received your email:
> Almost certainly not a compiler bug, but user error of some subtle kind
> (agreed with submitter).
I agreed to close the bug report because I found a workaround but in my
opinion it's not a "user error" :o.
>I _am_ sure the compiler is not at fault, so
If I include nested heades and system headers and that causes parse errors
in the SYSTEM headers of the Compiler this is by no means a user error !
So why can you be sure it's not a compiler error ?
The programm seems syntactically correct (it compiles with no errors on
different platforms with different compilers).
>I'll close the PR.
Anyhow close this thing, have a nice day ;).
Viele Gruesse / Best Regards
-- Mario
Mario Deilmann
Senior Sales Engineer
--------------------------------------------------------------------
//// pallas
Pallas GmbH / Hermuelheimer Str. 10 / 50321 Bruehl / Germany
Mario.Deilmann@pallas.com / www.pallas.com
Tel +49-2232-1896-31 / Fax +49-2232-1896-29
--------------------------------------------------------------------
On Thu, 21 Mar 2002, Neil Booth wrote:
> Mario Deilmann wrote:-
>
> > again thanks for your help. The hint was very helpful to get the right
> > output but I cannot see why I got an error like
> >
> > /home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h:39:
> > parse error before `;' token
> >
> > only because I changed the sequence of some includes. The code with the
>
> OK, thanks. The error is something subtle with the effects of changing
> the include order. Maybe some headers don't have guards and are being
> included twice. However, I _am_ sure the compiler is not at fault, so
> I'll close the PR.
>
> Neil.
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-21 10:36 Neil Booth
0 siblings, 0 replies; 11+ messages in thread
From: Neil Booth @ 2002-03-21 10:36 UTC (permalink / raw)
To: nobody; +Cc: gcc-prs
The following reply was made to PR c++/6001; it has been noted by GNATS.
From: Neil Booth <neil@daikokuya.demon.co.uk>
To: Mario Deilmann <Mario.Deilmann@pallas.com>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Thu, 21 Mar 2002 18:31:05 +0000
Mario Deilmann wrote:-
> again thanks for your help. The hint was very helpful to get the right
> output but I cannot see why I got an error like
>
> /home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h:39:
> parse error before `;' token
>
> only because I changed the sequence of some includes. The code with the
OK, thanks. The error is something subtle with the effects of changing
the include order. Maybe some headers don't have guards and are being
included twice. However, I _am_ sure the compiler is not at fault, so
I'll close the PR.
Neil.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-21 1:36 Mario Deilmann
0 siblings, 0 replies; 11+ messages in thread
From: Mario Deilmann @ 2002-03-21 1:36 UTC (permalink / raw)
To: nobody; +Cc: gcc-prs
The following reply was made to PR c++/6001; it has been noted by GNATS.
From: Mario Deilmann <Mario.Deilmann@pallas.com>
To: Neil Booth <neil@daikokuya.demon.co.uk>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Thu, 21 Mar 2002 10:28:39 +0100 (MET)
Dear Neil,
again thanks for your help. The hint was very helpful to get the right
output but I cannot see why I got an error like
/home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h:39:
parse error before `;' token
only because I changed the sequence of some includes. The code with the
nested headers looks syntactically correct for me. The only thing I would
expect from a different include sequence are problems with definitions not
a parse error.
Anyhow I also didn't want to investigate more on this because I have no
clue what I should look for and because I have a workaround if I ommit
nested headers. So if this is enough to close the bugreport please do so.
Viele Gruesse / Best Regards
-- Mario
Mario Deilmann
Senior Sales Engineer
--------------------------------------------------------------------
//// pallas
Pallas GmbH / Hermuelheimer Str. 10 / 50321 Bruehl / Germany
Mario.Deilmann@pallas.com / www.pallas.com
Tel +49-2232-1896-31 / Fax +49-2232-1896-29
--------------------------------------------------------------------
On Wed, 20 Mar 2002, Neil Booth wrote:
> Mario Deilmann wrote:-
>
> > I tried gcc -E -H on both files and there are a LOT of differences (about
> > 1200). I have looked into the differences and most of them obviously are
> > caused by the different include sequence.
> >
> > I have no idea where I should look for the important differences ? Any
> > idea ?
>
> Try
>
> gcc <options> file.c -E -H > /dev/null
>
> which just lists the header trail. Then have a look at the first header
> where they diverge, and figure out why. It's either because your path
> is different, or a command line or builtin macro is different. I can't
> help you any more than that I'm afraid.
>
> Neil.
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-20 10:16 Neil Booth
0 siblings, 0 replies; 11+ messages in thread
From: Neil Booth @ 2002-03-20 10:16 UTC (permalink / raw)
To: nobody; +Cc: gcc-prs
The following reply was made to PR c++/6001; it has been noted by GNATS.
From: Neil Booth <neil@daikokuya.demon.co.uk>
To: Mario Deilmann <Mario.Deilmann@pallas.com>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Wed, 20 Mar 2002 18:13:01 +0000
Mario Deilmann wrote:-
> I tried gcc -E -H on both files and there are a LOT of differences (about
> 1200). I have looked into the differences and most of them obviously are
> caused by the different include sequence.
>
> I have no idea where I should look for the important differences ? Any
> idea ?
Try
gcc <options> file.c -E -H > /dev/null
which just lists the header trail. Then have a look at the first header
where they diverge, and figure out why. It's either because your path
is different, or a command line or builtin macro is different. I can't
help you any more than that I'm afraid.
Neil.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-20 1:46 Mario Deilmann
0 siblings, 0 replies; 11+ messages in thread
From: Mario Deilmann @ 2002-03-20 1:46 UTC (permalink / raw)
To: nobody; +Cc: gcc-prs
The following reply was made to PR c++/6001; it has been noted by GNATS.
From: Mario Deilmann <Mario.Deilmann@pallas.com>
To: Neil Booth <neil@daikokuya.demon.co.uk>
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Wed, 20 Mar 2002 10:41:11 +0100 (MET)
Dear Neil,
thanks for your fast response.
I tried gcc -E -H on both files and there are a LOT of differences (about
1200). I have looked into the differences and most of them obviously are
caused by the different include sequence.
I have no idea where I should look for the important differences ? Any
idea ?
I have included the differences files ddiff:
The 1st error was:
/home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h:
In constructor `std::__basic_file<_CharT>::__basic_file(std::__c_lock*)':
/home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h:39:
parse error before `;' token
poohmak1/orig> grep -i -n "basic_file_model" ddiff
2085:> .....
/home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h
2088:< __bas....
/home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h
Mmh, what does this tell me ?
Viele Gruesse / Best Regards
-- Mario
Mario Deilmann
Senior Sales Engineer
--------------------------------------------------------------------
//// pallas
Pallas GmbH / Hermuelheimer Str. 10 / 50321 Bruehl / Germany
Mario.Deilmann@pallas.com / www.pallas.com
Tel +49-2232-1896-31 / Fax +49-2232-1896-29
--------------------------------------------------------------------
On Tue, 19 Mar 2002, Neil Booth wrote:
> mdeil@pallas.de wrote:-
>
> > I found some strange behaviour with some of the g++ versions greater than 2.91 on different platforms with a small C++ code (included)
> > I investigated a little more and found out that in my opinion the program was badly coded. The header files included each others and also some of the system headers. So I cleaned up all headers so that there are no more
> > includes in the header files. Collected the used system and program header's and added the std namespace. Wow, what a suprise now all gcc versions include 3.0 accepts the code.
> >
> > Can you give me some insight's what makes this program so PRBLEMATIC are this ANSI/ISO feature problems ? All compilers that produce errors find them in their own include files which confuses me. I thought that the problems should be located in the original source code.
>
> We cannot debug this easily for you. However, you can probably get a deeper
> understanding of what is happening with the -H option. Please compare
> the output of gcc -E -H yourfile.c between the two compilers, and see
> where they diverge. It generates an include stack trace.
>
> Let us know if we can close this PR.
>
> Neil.
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-19 11:56 Neil Booth
0 siblings, 0 replies; 11+ messages in thread
From: Neil Booth @ 2002-03-19 11:56 UTC (permalink / raw)
To: nobody; +Cc: gcc-prs
The following reply was made to PR c++/6001; it has been noted by GNATS.
From: Neil Booth <neil@daikokuya.demon.co.uk>
To: mdeil@pallas.de
Cc: gcc-gnats@gcc.gnu.org
Subject: Re: c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
Date: Tue, 19 Mar 2002 19:48:40 +0000
mdeil@pallas.de wrote:-
> I found some strange behaviour with some of the g++ versions greater than 2.91 on different platforms with a small C++ code (included)
> I investigated a little more and found out that in my opinion the program was badly coded. The header files included each others and also some of the system headers. So I cleaned up all headers so that there are no more
> includes in the header files. Collected the used system and program header's and added the std namespace. Wow, what a suprise now all gcc versions include 3.0 accepts the code.
>
> Can you give me some insight's what makes this program so PRBLEMATIC are this ANSI/ISO feature problems ? All compilers that produce errors find them in their own include files which confuses me. I thought that the problems should be located in the original source code.
We cannot debug this easily for you. However, you can probably get a deeper
understanding of what is happening with the -H option. Please compare
the output of gcc -E -H yourfile.c between the two compilers, and see
where they diverge. It generates an include stack trace.
Let us know if we can close this PR.
Neil.
^ permalink raw reply [flat|nested] 11+ messages in thread
* c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
@ 2002-03-19 7:16 mdeil
0 siblings, 0 replies; 11+ messages in thread
From: mdeil @ 2002-03-19 7:16 UTC (permalink / raw)
To: gcc-gnats
>Number: 6001
>Category: c++
>Synopsis: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Tue Mar 19 07:16:02 PST 2002
>Closed-Date:
>Last-Modified:
>Originator: Mario Deilmann
>Release: gcc version 3.0 and other ...
>Organization:
>Environment:
SunOS pooh 5.7 Generic_106541-19 sun4u sparc SUNW,Ultra-4
>Description:
Hi,
I found some strange behaviour with some of the g++ versions greater than 2.91 on different platforms with a small C++ code (included)
I investigated a little more and found out that in my opinion the program was badly coded. The header files included each others and also some of the system headers. So I cleaned up all headers so that there are no more
includes in the header files. Collected the used system and program header's and added the std namespace. Wow, what a suprise now all gcc versions include 3.0 accepts the code.
Can you give me some insight's what makes this program so PRBLEMATIC are this ANSI/ISO feature problems ? All compilers that produce errors find them in their own include files which confuses me. I thought that the problems should be located in the original source code.
GCC 3.0 on Solaris for example:
poohtmp/mak> g++ -Wall -c buffer.cpp
In file included from
/home/mdeil/bin/../include/g++-v3/bits/basic_file.h:250,
from
/home/mdeil/bin/../include/g++-v3/bits/std_fstream.h:41,
from
/home/mdeil/bin/../include/g++-v3/backward/fstream.h:32,
from buffer.h:4,
from buffer.cpp:25:
/home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h:
In constructor
`std::__basic_file<_CharT>::__basic_file(std::__c_lock*)':
/home/mdeil/bin/../include/g++-v3/sparc-sun-solaris2.7/bits/basic_file_model.h:39:
parse error before `;' token .............
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Here my modification to get the code compile:
buffer.cpp NOW includes:
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <fstream.h>
#include <iostream>
#include "common.h"
#include "misc.h"
#include "error.h"
#include "buffer.h"
using namespace std ;
What was the problem ? Why are the original include lines wrong ???
buffer.cpp ORIGINAL includes:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <time.h>
#include "common.h"
---> #include misc.h (no more includes)
#include "buffer.h"
---> #include <fstream.h>
---> #include <stdio.h>
---> #include <string.h>
---> #include "misc.h" (no more includes)
---> #include "error.h" (no more includes)
Although I seem to have solved the problem I don't understand it ???????
>How-To-Repeat:
simply type
g++ -Wall -ansi buffer.cpp or buffer.cc
>Fix:
Don't use nested header files - but I don't know why :).
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/x-gzip; name="gcc-bug.tar.gz"; name="gcc-bug.tar.gz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="gcc-bug.tar.gz"
H4sICD1SlzwAA2djYy1idWcudGFyAO1cbVPbSBLOV/Qr5kgl2MEY29hmDy9XlWXDHlXsQgX2025q
S8hjUK0sqfRCwuVyv/26e0bSjCS/EITzITOpim2pZ6bVb/P0jJru/i8nJ3s36e3+i2drvd6wdzga
wWdv0Bsc4id8G4pP0V70DofD0XjU7x0gXf+gdzB4MXo+loqWxokdwZTzKXe9JXSh7Xl2vPg+PkV/
QA/ZO+j3GufzmVo31z+PoiB6Fiv4Cv0P++MDo/8NtLL+b9LZjEddJwybm6PX74F6ewv03x8fjseZ
/nuHh3i9P0b9b0SI37n+9/cZe/OUZtEI7OtbMcIZ22cX8PkT+52dwr937D27etQIT+fhMgocHscs
4Z8SdrZ/wWaux+MuMOc7XjrlU2ZHnM35/IZHbJb6TuIGfqyOkAQs4vaUJXecxUEaOZzGYLY/ZR8j
N+FIgTc9N07oVrfxpzg5f3t19e7qiF1fw3Oc+T+RV3cYu74ijsTvZSPkjUa4SJNsiOtzYHtR/2af
4vTs/N0RXiqC0iNHeDoPv178/DtxsfiRn5eHJ/mm9dIVZst+jJOpG3Tv/qVdilz/Vr/mBnCV23P1
WuLOuUa17QTzeeB377aVa1JJcA0ZT2MYmvn2nMehDS4A07MJ3dEfcklQ0eiWiKhEd02e64dpkuvs
CeMtEqxzZ0eMB7MT/DxmvU+HpxOgh/5xyB3X9hj3p3vBbI98H6ltJ+GR5foJYy5ydxnELgYP7Ib9
tu/dKEltb5uF8g4LZhQonDSKOPTDUaytLckaser6REEDSjdhrY9ucscS+yZm/FMIYYdP22JejDin
nn0LDCdRyic0CH5j7kyEIxmwPNfncYdxL4bgZcP/qLm9JzUS7QnESpjPSQLhSflvZstnoLgrH+Tm
gQUh99GQ4CErumFMSlIEUbifk4Sk/1O4/BtYIDtiYRJlYRdtMpNs0T3vajvaBEfMvgkikH0wpcCd
xiQs5AskAx2nT5eMpUXpoyPtZ8tBGZHu2Rv9uSAYv0XmTpA322lbguEwu9/y+Ufq+AcI2eN+S+/e
Zrus/6FtfbaEOe3tnQThQ0kuJK4uUcAgTvjQCovpS+OBf2cjXaB89JFglSNuUXxCcl0rt2NBgVJV
x4dgdHTk+v+lTz9wIDAlOM2qDpIEJmr9g+hug2DaarcFA9eR7ceejR7WAqlNrC8NWfcvPKFwkLVT
njh3tO5HPEkjIRAfDTyPB2wWBfOF1q04AyKQGbMTGgNCS2bB4m6ntnsOQ2hOxbVrBquf/05gl476
ALVxLfe+90R4tOgxVUSkTQkBYeHgDXgYuU/JzaS6WveBO828QDgbBkuIn1fufziEyh9EnIzxF0od
AqugxTGdu0lZakBbPDihQRSJlZkktdabUKwcx9ki0s5kLH+LSaWmSVzYjyIy2nXRf+fP3k5b8APM
wkOdg4Zbba0/Kr3o/7mq6doG/XM1Wlu7uzTlBL/pC5i1RVO/kfex65ciFJyRyAqRgJf64MlzXNG0
cfIADXPmveepl7ihl0keVdLNnRunRQEkIAB9qN3jXIF7+q1X8roMVlLooMbGwsAlgGXb+TsPBZdp
UlnGhXHcABkaW7BifZPrYYx00muFYiAnBanV9syC0UcXaGYUiZI7N1ZclrUufO+htjMODKkOMEbT
I5s22+nutMtujqyEEb93gzR+dodVBKs57d6eYnl7eyXjVNWcmeiXtZDoGqixlkbkWI9Cn2shzw2A
MBme1wdgSjynJBmEbnvodlqG28FVcPkaNXMjIMZAVbtY6PBOSLiK7zJsp68yT7VFLWkGeKb+1OGZ
zlcGyHQ8VyLqCIBZXETodEr4SIVmiyQr4YUmRHWlz2Nlhv3b1LdbjFdmSIKnYiFpEh/hkLnu32v4
ZKHqFxtPGOFK7SaVHRWMSQ7H3Zqbh4WmSxP6Ke3koBTVGA3pT4Jm7/F77lXAjRBzEcclFlPk3pGA
Rpu4FtygcqqwriHLFVFUN99MsWoEBflzCI8oTeT+NxJKJ5PGb0IY5yiLibawVxnX9LYENRaGSd4N
oAfxuQQ17HUGgorZ3iFyWYhoSYELzaGrYB9rS2QEPMF+LYTYHTa3P1EqI2SE8ADMfivjBmlkch8G
hA2DqqcJlGRt1fgarFvnxVy7u1Ks54WkIaunvL5G4G0NUOko55j1Jl+7vK1clGopcPPvEQvbGssa
GGmOuUENl6hDlMw5928ThJU/wDNqJHg3vuTRpX1LseSYjYDEUjcmUexSY3pcEAtbU0APeUUu/g1m
KfcGrxI7woUUU+8QGZR+oQXs2nCETVgwgSrse0fjdhsIBOjs6tYtgCmd+ZosiILHLIjmp5xPpSvs
/DnbkU7pBAANf/xRp4Df26SXbYbfIWeAH8LIrS26Cz238Ut5DVfvTSHNF+QQNjyWfZETo7edBCkI
iuy/qdVJWWGp1a24eS5+xYWaiNM6bc5kQqvosaMEqXyxru1c6L2APFWwox4uEPBp4aTKhO1nMRwF
OWjYp0A9wogw2v3R+yA8FJNUEaoKgxDqW3PzqWwux6yyuaXva020Pasy5goVtJNzoCpVzIo7338l
9CHTC/zaek0X2toU2Ak0HDtE4QWQQqm0bUmNZBnH+L0N+Wn/QyYhiliQGwf3HC74O7jAguULFsse
2yAykytUboA0FUQxWtgwguFyW11VnyUupVV4QsopB1ZX3xwPgFNIb2ep51VBL3v9Gn/kceO4vI4A
9qgRbz75dZT6jp1kkcCn2d1kJwahBMwL/NtuYfPVVSzXbzHiZR4Gkgz8djIU6rMbz/b/ZkFaUHS1
mEt98qioeps20e5u/sxoK/v7QD9zby2rOP9dcP5/1+QZM57/jxee//dGhwdDcf4/7A37wzGe/4/G
vbE5/99Ae+nO/CmfyZXtrzvrJfxCA88vKAeBM3E2WD5FXOdgcXvuxo5+YEgGl50Xam09mFp7Txz8
LYWmS0GpZclcSD3gm1hKglQ6vdNuZfGmdFUmThqKLeUb4LiD0XjSUDzXdhzkQ769AbVAyimCh7ax
6IBlx02EcxqoNPtnywqjIOGQ7E6PxNGNMCNxhlPZPhcNnkI5EMz3vx25qfpGyDJfxid6V+W4L8cR
Wv88UpfU8GFSnlpmDNrkodygr+dbmbx0cgtNPbVVx6cJ5AmwmEjL0yVWCtMbz3WEFL/2lHCiz/U/
fRyx7CJBlik7XhDTNtDWlHsc1sBC6GpmSlMrx1+Sb8HX51KGCp3yPsqpmegzKe5VdnxhGWvMR2pe
hbnStj/j9EYYNCAgTUoNuorGBEB7UnDFg5YbR9kw1t6fzKS5MBouzfBrb16kycoAvGJboMkYmL+4
JKbRY2AgeH3GIFhM/1nXEeljQQzC9GUsA5FkcWGkIPysQWYlq9JuanaAvOVeLhMYsTslboGzZ/3y
/afmHK/mDbLzIruuul0uxQa1o/Cge52qslxTZc+ZqIF+jTw8H0jkfwNSr2wwEF5kAjSxUl+56wce
pWTOk6JrtsJQF7GZrXQp4L8ym0M5kDwVjrPFSB1INZ+6baJSwCmWkkKq0hg/s2zRKAvwizLJgi2F
mX4isdjmH2fvupqLjDMzfWHua4zYqWyYu8XRgdi8zX2Mtn1m0sm2Xw2n7NX0iL2KtzvaAGrnVc4o
IWZl3xMQO+R57sxajf6r+V/2Zl+TOcaK/A8ujov8bzwU+V9/YPK/DbQs/xN6V/K//EJNDqdmN5XD
jEnN3dIJkrTPuv0I0zbbyv4vk/JG51jh//2DwUHu/yNR/zMajsz+zyZa5v+kd8X9s9+qM9M1uZvY
DBR8m79bGxPwmdkJLPCJfEETLtCUjaByiwM6UlNhAe/o5Ysz/x7Qx/QEQp7tTzGUvY1uY8JLx2yv
3yko617TkMgKKAcK5dkpnovVESLlgUL5No75/MZ7qCEGyqFCeR0Ev9r+w9WDn9if3pFolDFHKp8J
pM0X9zyaecFHPdUCyrFCibK44rf4Ol6ZHigPFUoZxIGJnzkPy2P+oFC+BxNx55w41CdHyn8qlL/7
7jz06GVAPj3ldpJGvKDs96wvWDVAMKzy7m5lW+MRsMc02crxXyzxzc6xCv/1BwNZ/wdx/0Dgv4GJ
/xtpWfxHvSvhX/7Mf1MRCG4sZBeoaoT1a8Dct34i0x7TCv/3g7+eqQT8a+q/x6NDU/+9gVaj/6za
0mlqjuXxv3/Y7w+z+D8cjA6o/nuIdtAUA8vad65/U/+tj2Dqv0399/dc/12p9V63o/JuSG05+Yrq
8SWvh9SWmJv6clNfXt1PMvXltXtfpr7c1Jeb+nJTX27qy019ud5MfbmpL1dQp6kvp2bqy019OdmB
qS9fbrmmvtzUly9YTkx9+ZPjmakvN/Xlpr7c1Jeb+vIGzcvUlz9bffm3Pss27fFt8fsfzb0EuKr+
f3RYvP/XHw7o/Y+Dnqn/2ERbo/7fVOeb6vxSM9X5pjrfVOeb6vwn6NdU55vq/IXaMdX5pjrfVOdv
otXkf43/CYCV9V+jfpb/DUYHfZn/DU3+t4G2Rv1/M8X+3/pBTattNf7f+J8AWLv+H/1f7v9QTGiO
hcXN+L+p/zf1/6b+/zttNfG/8T8BsBL/9RX8NxJ///dwZPb/N9Eaq///1g9immmmmWbao9r/Aa/V
GBAAhAAA
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2002-03-26 10:16 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-03-21 10:32 c++/6001: g++ problems with nested headers from > egcs-2.91.66 until 3.0.0 neil
-- strict thread matches above, loose matches on Subject: below --
2002-03-26 2:16 Mario Deilmann
2002-03-25 10:36 Neil Booth
2002-03-22 11:36 Neil Booth
2002-03-22 1:56 Mario Deilmann
2002-03-21 10:36 Neil Booth
2002-03-21 1:36 Mario Deilmann
2002-03-20 10:16 Neil Booth
2002-03-20 1:46 Mario Deilmann
2002-03-19 11:56 Neil Booth
2002-03-19 7:16 mdeil
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).