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


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

c++/3175: CTOR/DTOR Mismatch Error



>Number:         3175
>Category:       c++
>Synopsis:       CTOR/DTOR Mismatch Error
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Wed Jun 13 11:26:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Brian Crowder
>Release:        gcc version 2.95.3 20010315 (release)
>Organization:
>Environment:
Linux 2.4.2 SMP
>Description:
The attached C++ code generates an unbalanced cascade of
constructor/destructor pairs resulting in one-too-many
DTORs being executed.

We discovered this bug while porting a piece of C++ code
Win32/MSVC++6.0.  The code frequently passes handles for
reference counted objects by value, and we were finding
that at the end of a given call-stack, our reference count
was short by one, causing the associated data to be
released prematurely.  Changing any of several pass-by-value
functions to accept or return values via const reference
provides a workaround.  Also, explicitly creating temporary
variables before function calls also seems to provide a
workaround of sorts.

Interestingly, instrumented with Insure++, our application
behaves correctly, but not when built normally.  My insure
license just ran out, so I haven't had a chance to test
this demonstration code.
>How-To-Repeat:
test.cpp is my demo C++ code
savetemps.out is the reporting from "g++ -v -save-temps test.cpp"
test.ii is the preprocessed source
gcc was built with no additional command-line options (just "configure; make bootstrap")

The source is built with the following command line:
g++ -o test test.cpp
>Fix:

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

IyAxICJ0ZXN0LmNwcCIKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoK
IAoKCgoKCgoKIAojIDE0MiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKCgogCgoKCgoKCgoK
CiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjA4ICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgog
CgoKIAoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCiAKCgojIDEgIi91c3IvaW5jbHVk
ZS9zeXMvY2RlZnMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCgoKCiAK
CgoKCgogCgoKCgoKCgoKIAoKCgojIDY1ICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDMKCgog
CgoKCgoKIAoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoK
CiAKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCiAKCgoKCgoKIyAyODMgIi91c3IvaW5jbHVkZS9m
ZWF0dXJlcy5oIiAyIDMKCgoKIAoKCgoKCgoKCiAKCgoKCiAKCiAKCgoKCgoKCgojIDEgIi91c3Iv
aW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMxMSAi
L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwoKCgoKIyAyNyAiL3Vzci9pbmNsdWRlL3N0ZGlv
LmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMg
MTkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1
ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50
IHNpemVfdDsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKIyAyODMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4z
L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgojIDMxNyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgojIDMzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
CgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbG9jYWwvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAK
CgoKCgogCgoKIyA2MSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8y
Ljk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgogCgogCgojIDEzMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4OCAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CgoKCiAKCgoKCiAKCiMgMjcxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgog
CgojIDMxNyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjMv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI5ICIvdXNy
L2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgogCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3Vf
Y2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQg
aW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9u
X18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9u
X18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ4ICIvdXNyL2luY2x1ZGUvYml0
cy90eXBlcy5oIiAzCgp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2ln
bmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0
eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQg
X19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25f
XyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFk
X3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90OwkJIAp0eXBlZGVmIF9f
dV9pbnQgX191aWRfdDsJCSAKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CQkgCnR5cGVkZWYgX191
X2xvbmcgX19pbm9fdDsJCSAKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90OwkJIAp0eXBlZGVmIF9f
dV9pbnQgX19ubGlua190OyAJCSAKdHlwZWRlZiBsb25nIGludCBfX29mZl90OwkJIAp0eXBlZGVm
IF9fcXVhZF90IF9fbG9mZl90OwkJIAp0eXBlZGVmIGludCBfX3BpZF90OwkJCSAKdHlwZWRlZiBp
bnQgX19zc2l6ZV90OwkJCSAKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsJCSAKdHlwZWRlZiBf
X3VfcXVhZF90IF9fcmxpbTY0X3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX2lkX3Q7CQkJIAoKdHlw
ZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsJCQkJIAoKIAp0
eXBlZGVmIGludCBfX2RhZGRyX3Q7CQkJIAp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRl
ZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0
eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190
OwkJIAoMCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKIAp0eXBlZGVmIGludCBfX2Nsb2Nr
aWRfdDsKCiAKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCiAKCgoKdHlwZWRlZiBpbnQgX19rZXlf
dDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKIAp0eXBlZGVm
IGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKIAoKIAp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7
CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKIAp0eXBlZGVmIF9fdV9sb25nIF9fZnNi
bGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKIAp0eXBlZGVmIF9f
dV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoK
IAp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKIAp0eXBlZGVmIF9fbG9mZl90IF9fb2Zm
NjRfdDsKCiAKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQg
bG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCiAKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCiAKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKIAoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgoKCgoKCgoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
IyA2MiAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwoKCgoKCiAKc3RydWN0IF9fc2NoZWRf
cGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwoKCiMgMjMgIi91c3IvaW5j
bHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgogCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9j
awp7CiAgbG9uZyBpbnQgX19zdGF0dXM7ICAgIAogIGludCBfX3NwaW5sb2NrOyAgICAgICAKCn07
CgoKIAp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2Ny
OwoKCgoKIAp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hz
dGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVk
cGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1
YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNp
emVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgogCnR5cGVkZWYgc3RydWN0CnsK
ICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7ICAKICBfcHRocmVhZF9kZXNjciBf
X2Nfd2FpdGluZzsgICAgICAgICAKfSBwdGhyZWFkX2NvbmRfdDsKCgogCnR5cGVkZWYgc3RydWN0
CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgogCnR5cGVkZWYgdW5zaWdu
ZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKIAogCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9y
ZXNlcnZlZDsgICAgICAgICAgICAgICAgCiAgaW50IF9fbV9jb3VudDsgICAgICAgICAgICAgICAg
ICAgCiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOyAgICAgICAgCiAgaW50IF9fbV9raW5kOyAg
ICAgICAgICAgICAgICAgICAgCiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOyAg
Cn0gcHRocmVhZF9tdXRleF90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2lu
ZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCiAKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7
CgoKIyAxMTcgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCgoKIyAxMzYgIi91
c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCgoKCiAKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGludCBwdGhyZWFkX3Q7CgoKIyAxNDMgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIg
MwoKCgoKIyAzNSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKCgoKCiAKdHlwZWRlZiBz
dHJ1Y3QgX0lPX0ZJTEUgRklMRTsKCgoKCgoKCgogCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9f
RklMRTsKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIAoK
CgoKCiAKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbG9jYWwv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMK
CgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4OCAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgdW5z
aWduZWQgaW50ICB3aW50X3Q7CgoKCgogCgogCgojIDMxNyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgojIDE0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCgoK
CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKCgoKIyA0NiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCgojIDEgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMx
ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRl
L3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAxOTAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCgoKIAoKIyAyNzEg
Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgogCgogCgojIDMxNyAiL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIyA1MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCiAKCgoKCgoKCgoKCgoKCiAKdHlw
ZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2No
OwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwkJIAp9IF9fbWJzdGF0ZV90OwoKCgoK
IAoKIyA2ODMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoKCiMgMjQgIi91c3IvaW5jbHVkZS9f
R19jb25maWcuaCIgMiAzCgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19t
YnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0
X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKCgoKCgoKCgoj
IDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
CgojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCgoKCgojIDQ2ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKCiMgMSAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
CgoKCgoKCiAKCgojIDE5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3RkZGVm
LmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91
c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgogCgogCgojIDE5MCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKCgogCgojIDI3MSAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgoKCiAKCgoK
CgoKCgoKCgojIDc2ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKCgoKIAoKIyA2ODMgIi91c3Iv
aW5jbHVkZS93Y2hhci5oIiAzCgoKCiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoj
IDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMi45NS4zL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoK
CiAKCgojIDYxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUu
My9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CiAKCiAKCiMgMTMxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIu
OTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoK
IAoKCgoKIAoKIyAyNzEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgojIDI4MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMg
MzE3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzIuOTUuMy9pbmNs
dWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMzAgIi91c3IvaW5j
bHVkZS9nY29udi5oIiAyIDMKCgogCgoKIAplbnVtCnsKICBfX0dDT05WX09LID0gMCwKICBfX0dD
T05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9F
TVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBV
VCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQ
VE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IKfTsKCgogCmVudW0KewogIF9fR0NPTlZfSVNf
TEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsKCgogCnN0
cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2Nv
bnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgogCnR5cGVkZWYg
aW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosIHN0cnVjdCBfX2djb252
X3N0ZXBfZGF0YSAqLAoJCQkgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVu
c2lnbmVkIGNoYXIgKiwKCQkJICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBpbnQsIGlu
dCk7CgogCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0
ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0
ZXAgKik7CgoKIAp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2Nv
bnZfc3RlcCAqLAoJCQkJICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAoJCQkJ
ICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKCQkJCSAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoq
LAoJCQkJICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKCQkJCSAg
c2l6ZV90ICopOwoKIAp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2
b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAoJCQkJCSAgX19jb25zdCB1bnNpZ25lZCBj
aGFyICosCgkJCQkJICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgogCnR5cGVk
ZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25z
dCBjaGFyICoqKiwKCQkJCQlzaXplX3QgKik7CgogCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFu
c19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2Nv
bnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhCnsK
ICAgCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAgX19nY29udl90cmFuc19jb250
ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBfX3Ry
YW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEg
Kl9fbmV4dDsKfTsKCgogCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xv
YWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoK
ICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBjaGFyICpfX3RvX25hbWU7
CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBf
X2djb252X2VuZF9mY3QgX19lbmRfZmN0OwoKICAgCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsK
ICBpbnQgX19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19t
YXhfbmVlZGVkX3RvOwoKICAgCiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsJCSAK
fTsKCiAKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRi
dWY7ICAgICAKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVuZDsgIAoKCiAgIAogIGludCBfX2Zs
YWdzOwoKICAgCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCiAgIAoKICBpbnQgX19pbnRl
cm5hbF91c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRl
OwkgCgoKICAgCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgogCnR5
cGVkZWYgc3RydWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBf
X2djb252X3N0ZXAgKl9fc3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVw
X2RhdGEgX19kYXRhIFswXSA7Cn0gKl9fZ2NvbnZfdDsKCgojIDQ0ICIvdXNyL2luY2x1ZGUvX0df
Y29uZmlnLmgiIDIgMwoKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2Nk
OwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBf
X2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0
eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkp
Owp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9f
KSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCiAKCgoKCgoKCgoKCgoKCgojIDMwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCgogCgoK
CgoKCgoKCgoKCgoKCgoKIAoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzIuOTUuMy9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgp0eXBl
ZGVmIHZvaWQgKl9fZ251Y192YV9saXN0OwoKCgogCgojIDEyMiAiL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8yLjk1LjMvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKCgoK
CgoKCgoKCgoKCgoKCiMgMjA5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzIuOTUuMy9pbmNsdWRlL3N0ZGFyZy5oIiAzCgoKCgojIDUxICIvdXNyL2luY2x1ZGUvbGli
aW8uaCIgMiAzCgoKCgoKCgojIDcwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoKCiAKCgoKCgoK
CgoKCgoKCgoKCgojIDEwMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCgoKCgoKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX0lPX2p1
bXBfdDsgIHN0cnVjdCBfSU9fRklMRTsKCiAKCgoKCgoKCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190
OwoKCgogCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0Owog
IHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CiAgIAoKICAgCiAgaW50IF9wb3M7CiMgMTkwICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMwoKfTsKCiAKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2Nv
ZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29k
ZWN2dF9ub2NvbnYKfTsKCiMgMjU3ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoKCnN0cnVjdCBf
SU9fRklMRSB7CiAgaW50IF9mbGFnczsJCSAKCgogICAKICAgCiAgY2hhciogX0lPX3JlYWRfcHRy
OwkgCiAgY2hhciogX0lPX3JlYWRfZW5kOwkgCiAgY2hhciogX0lPX3JlYWRfYmFzZTsJIAogIGNo
YXIqIF9JT193cml0ZV9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX3B0cjsJIAogIGNoYXIqIF9J
T193cml0ZV9lbmQ7CSAKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CSAKICBjaGFyKiBfSU9fYnVmX2Vu
ZDsJIAogICAKICBjaGFyICpfSU9fc2F2ZV9iYXNlOyAgCiAgY2hhciAqX0lPX2JhY2t1cF9iYXNl
OyAgIAogIGNoYXIgKl9JT19zYXZlX2VuZDsgIAoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtl
cnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Js
a3NpemU7CiAgX19vZmZfdCAgIF9vbGRfb2Zmc2V0OyAgCgoKICAgCiAgdW5zaWduZWQgc2hvcnQg
X2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRi
dWZbMV07CgogICAKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CgoKCgoKCgoKICBfX29mZjY0X3QgICBf
b2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2Rl
OwogICAKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9p
ZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9f
RklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lP
XzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJf
OwoKCgoKCgoKCgoKCiAKCiAKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAq
X19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwoKIAoKCgoKCnR5cGVkZWYg
X19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9f
YnVmLAoJCQkJIHNpemVfdCBfX24pOwoKIAoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAo
dm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAgICpfX3BvcywgaW50IF9fdyk7CgogCnR5cGVkZWYg
aW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgojIDM4NyAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDMKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9J
T19GSUxFICopIHRocm93ICgpIDsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJv
dyAoKSA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKSA7
CmV4dGVybiB3aW50X3QgICBfX3d1bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpIDsKZXh0
ZXJuIHdpbnRfdCAgIF9fd3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKSA7CmV4dGVybiB3aW50
X3QgICBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90ICApIHRocm93ICgpIDsKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRo
cm93ICgpIDsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIHRo
cm93ICgpIDsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpIDsK
ZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCkgOwoKZXh0ZXJu
IGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCkgOwoKIAoKCgpl
eHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKSA7CmV4dGVybiB2
b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwpleHRlcm4gaW50IF9J
T19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpIDsKCgoKCgoKCgoKCgoKCgoKCmV4
dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAq
IF9fcmVzdHJpY3QsCgkJCV9fZ251Y192YV9saXN0ICwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAo
KSA7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3Qg
Y2hhciAqX19yZXN0cmljdCwKCQkJIF9fZ251Y192YV9saXN0ICkgdGhyb3cgKCkgOwpleHRlcm4g
X19zc2l6ZV90ICAgX0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90ICApIHRocm93
ICgpIDsKZXh0ZXJuIHNpemVfdCAgIF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXpl
X3QgICkgdGhyb3cgKCkgOwoKZXh0ZXJuIF9fb2ZmNjRfdCAgIF9JT19zZWVrb2ZmIChfSU9fRklM
RSAqLCBfX29mZjY0X3QgICwgaW50LCBpbnQpIHRocm93ICgpIDsKZXh0ZXJuIF9fb2ZmNjRfdCAg
IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QgICwgaW50KSB0aHJvdyAoKSA7Cgpl
eHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwoK
IyA1MDcgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKCn0KCgoKIyA2NCAiL3Vzci9pbmNsdWRl
L3N0ZGlvLmgiIDIgMwoKCiMgNzUgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCgoKIAoKdHlwZWRl
ZiBfR19mcG9zX3QgZnBvc190OwoKCgoKCgoKIAoKCgoKCiAKCgoKCgogCgoKCgoKCiAKCgoKCgoK
CiAKCgoKCiAKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxMjggIi91c3IvaW5j
bHVkZS9zdGRpby5oIiAyIDMKCgoKIApleHRlcm4gRklMRSAqc3RkaW47CQkgCmV4dGVybiBGSUxF
ICpzdGRvdXQ7CQkgCmV4dGVybiBGSUxFICpzdGRlcnI7CQkgCgogCgoKCgoKIApleHRlcm4gaW50
IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGlu
dCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIHRocm93
ICgpIDsKCgogCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCkgOwoKCgoKCgoK
CgoKIApleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpIDsKCgogCgpleHRl
cm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCkgOwoKCgoKIAoKCgoKCgpleHRl
cm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3Bm
eCkKICAgICB0aHJvdyAoKSAgIDsKCgoKIApleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpIDsKIApleHRlcm4gaW50IGZmbHVzaCAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpIDsKCgogCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCkgOwoKCgoKCgoKCgogCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZmlsZW5hbWUsCgkJICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVz
KSB0aHJvdyAoKSA7CiAKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2ZpbGVuYW1lLAoJCSAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVz
LAoJCSAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpIDsKIyAyMjEgIi91
c3IvaW5jbHVkZS9zdGRpby5oIiAzCgoKCgoKCgoKCgogCmV4dGVybiBGSUxFICpmZG9wZW4gKGlu
dCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpIDsKCgojIDI1MCAiL3Vzci9p
bmNsdWRlL3N0ZGlvLmgiIDMKCgoKIAoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKSA7CiAKCgpleHRl
cm4gaW50IHNldHZidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJp
Y3QgX19idWYsCgkJICAgIGludCBfX21vZGVzLCBzaXplX3QgX19uKSB0aHJvdyAoKSA7CgoKIAoK
ZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpf
X3Jlc3RyaWN0IF9fYnVmLAoJCSAgICAgICBzaXplX3QgX19zaXplKSB0aHJvdyAoKSA7CgogCmV4
dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCiAKZXh0
ZXJuIGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAoJCSAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQg
cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCkg
OwogCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCgkJICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKSA7CgogCmV4dGVybiBp
bnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsCgkJICAgICBfX2dudWNfdmFfbGlzdCAgX19hcmcpIHRocm93ICgpIDsKIApl
eHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19n
bnVjX3ZhX2xpc3QgIF9fYXJnKQogICAgIHRocm93ICgpIDsKIApleHRlcm4gaW50IHZzcHJpbnRm
IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LAoJCSAgICAgX19nbnVjX3ZhX2xpc3QgIF9fYXJnKSB0aHJvdyAoKSA7CgoKIApleHRlcm4gaW50
IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAoJCSAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgIF9f
YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJuIGlu
dCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCgkJICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCAgX19h
cmcpCiAgICAgdGhyb3cgKCkgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9f
LCAzLCAwKSkpOwoKCiMgMzIyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgogCmV4dGVybiBp
bnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAoJCSAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIGludCBzY2FuZiAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpIDsKIApleHRl
cm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCkgOwoKIyAzNDggIi91c3Iv
aW5jbHVkZS9zdGRpby5oIiAzCgoKCiAKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpIDsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoK
IApleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpIDsKCiAKCgoKCiAKZXh0ZXJuIGlu
dCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwpleHRlcm4gaW50IGdl
dGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpIDsKCgoKIApleHRlcm4gaW50IGZnZXRjX3Vu
bG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCgogCmV4dGVybiBpbnQgZnB1dGMg
KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQgcHV0YyAoaW50
IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKCiAKZXh0ZXJuIGludCBwdXRjaGFyIChp
bnQgX19jKSB0aHJvdyAoKSA7CgogCgoKCgogCmV4dGVybiBpbnQgZnB1dGNfdW5sb2NrZWQgKGlu
dCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCiAKZXh0ZXJuIGludCBwdXRjX3Vu
bG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwpleHRlcm4gaW50IHB1
dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIHRocm93ICgpIDsKCgoKCiAKZXh0ZXJuIGludCBnZXR3
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHB1dHcgKGludCBfX3cs
IEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCiAKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAg
ICB0aHJvdyAoKSA7CgoKCgoKCgogCgpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSB0aHJv
dyAoKSA7CgoKIyA0MzggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCgoKCiAKZXh0ZXJuIGludCBm
cHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0
cmVhbSkKICAgICB0aHJvdyAoKSA7CgoKCgoKCgogCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBj
aGFyICpfX3MpIHRocm93ICgpIDsKCgogCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKCiAKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19y
ZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKCQkgICAgIHNpemVfdCBfX24sIEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpIDsKIApleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19j
b25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAoJCSAgICAgIHNpemVf
dCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKSA7CgoKIApleHRlcm4gc2l6ZV90
IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAoJ
CQkgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKSA7
CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3Qg
X19wdHIsIHNpemVfdCBfX3NpemUsCgkJCSAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtKSB0aHJvdyAoKSA7CgoKCiAKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19z
dHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpIDsKIApleHRlcm4g
bG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7CiAKZXh0ZXJuIHZvaWQg
cmV3aW5kIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoKIAoKCgoKCgoKCgoKCgogCmV4dGVy
biBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3Ry
aWN0IF9fcG9zKQogICAgIHRocm93ICgpIDsKIApleHRlcm4gaW50IGZzZXRwb3MgKEZJTEUgKl9f
c3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3MpIHRocm93ICgpIDsKIyA1MjEgIi91c3IvaW5j
bHVkZS9zdGRpby5oIiAzCgoKCgoKCgoKCgogCmV4dGVybiB2b2lkIGNsZWFyZXJyIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCkgOwogCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpIDsKIApleHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsK
CgogCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCkgOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKSA7
CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkgOwoK
CgogCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIDsKCiAK
CgpleHRlcm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19l
cnJsaXN0W107CgoKCgoKCgoKIApleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpIDsKCgoKIApleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpIDsKCgoKCgogCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpfX2Nv
bW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCkgOwoKIApleHRlcm4gaW50IHBj
bG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpIDsKCgoKCiAKZXh0ZXJuIGNoYXIgKmN0ZXJt
aWQgKGNoYXIgKl9fcykgdGhyb3cgKCkgOwoKCgoKCgoKCgojIDYwMyAiL3Vzci9pbmNsdWRlL3N0
ZGlvLmgiIDMKCgoKCiAKCiAKZXh0ZXJuIHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCkgOwoKIAoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKSA7CgogCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCkgOwoKCgoKCgoKCgoKIAoKCgoKCn0gCgoKCgojIDEgInRlc3QuY3BwIiAyCgoKIApjbGFz
cyBGb29SZWYKewpwdWJsaWM6CiAgRm9vUmVmKGludCBpbmNvbikgOiBjb250ZW50cyhpbmNvbikK
ICB7CiAgICBjb3VudCA9IDE7CiAgICBwcmludGYoIigweCUwOHgpIEZvb1JlZiBDVE9SKCVkKVxu
IiwgdGhpcywgaW5jb24pOwogIH0KCiAgfkZvb1JlZigpCiAgewogICAgcHJpbnRmKCIoMHglMDh4
KSBGb29SZWYgRFRPUiglZClcbiIsIHRoaXMsIGNvbnRlbnRzKTsKICB9CgogIGludCBjb3VudDsK
ICBpbnQgY29udGVudHM7Cgpwcml2YXRlOgogICAKICBGb29SZWYgJm9wZXJhdG9yPShjb25zdCBG
b29SZWYgJmluKTsKICBGb29SZWYoY29uc3QgRm9vUmVmICZpbik7Cn07CgogCmNsYXNzIEZvbwp7
CnB1YmxpYzoKICBGb28oaW50IGluY29uID0gMCkKICB7CiAgICByZWYgPSBuZXcgRm9vUmVmKGlu
Y29uKTsKICAgIHByaW50ZigiKDB4JTA4eCkgRm9vIENUT1IoJWQpXG4iLCB0aGlzLCBpbmNvbik7
CiAgfQoKICBGb28oY29uc3QgRm9vICZpbikKICB7CiAgICByZWYgPSBpbi5yZWY7CiAgICBpZiAo
aW4ucmVmKQogICAgICB7Cglpbi5yZWYtPmNvdW50Kys7CglwcmludGYoIigweCUwOHgpIEZvbyBD
b3B5IENUT1IoJWQsIGNvdW50OiVkKVxuIiwgdGhpcywgaW4ucmVmLT5jb250ZW50cywgaW4ucmVm
LT5jb3VudCk7CiAgICAgIH0KICB9CgogIEZvbyAmb3BlcmF0b3I9KGNvbnN0IEZvbyAmaW4pCiAg
ewogICAgaWYgKHJlZikgewogICAgICBkZWxldGUgcmVmOwogICAgfQoKICAgIHJlZiA9IGluLnJl
ZjsKICAgIHJlZi0+Y291bnQrKzsKICAgIHByaW50ZigiKDB4JTA4eCkgRm9vIE9QPSglZCwgY291
bnQ6JWQpXG4iLCB0aGlzLCByZWYtPmNvbnRlbnRzLCByZWYtPmNvdW50KTsNCiAgICANCiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQoKICB+Rm9vKCkKICB7CiAgICBwcmludGYoIigweCUwOHgpIEZvbyBE
VE9SKCVkLCBjb3VudDolZClcbiIsIHRoaXMsIHJlZi0+Y29udGVudHMsIHJlZi0+Y291bnQtMSk7
CiAgICByZWYtPmNvdW50LS07CgogICAgaWYgKHJlZi0+Y291bnQgPD0gMCkgewogICAgICBkZWxl
dGUgcmVmOwogICAgfQogIH0KCiAgRm9vUmVmICpyZWY7Cn07CgpjbGFzcyBCYXIKewpwdWJsaWM6
CiAgQmFyKGludCBpbmNvbnQgPSA5OSkgOiBteUZvbyhpbmNvbnQpCiAgewogICAgcHJpbnRmKCIo
MHglMDh4KSBCYXIgQ1RPUiglZClcbiIsIHRoaXMsIG15Rm9vLnJlZi0+Y29udGVudHMpOwogIH0K
CiAgQmFyKGNvbnN0IEJhciAmaW4pIDogbXlGb28oaW4ubXlGb28pCiAgewogICAgcHJpbnRmKCIo
MHglMDh4KSBCYXIgQ29weSBDVE9SKCVkKVxuIiwgdGhpcywgaW4ubXlGb28ucmVmLT5jb250ZW50
cyk7CiAgfQoKICB+QmFyKCkKICB7CiAgICBwcmludGYoIigweCUwOHgpIEJhciBEVE9SKCVkKVxu
IiwgdGhpcywgbXlGb28ucmVmLT5jb250ZW50cyk7CiAgfQoKICB2b2lkIENvcHlGb28oRm9vIHRo
aW5nKSB7IG15Rm9vID0gdGhpbmc7IH0KCnB1YmxpYzoKICAgCiAgIAogIEZvbyBteUZvbzsKfTsK
CmNsYXNzIFRlc3QKewpwdWJsaWM6CiAgdm9pZCBydW4oKQogIHsKICAgIHByaW50ZigiXG5CdWls
ZCBhbiBlbXB0eSBCYXJcbiIpOwogICAgQmFyIGEoMCk7CgogICAgcHJpbnRmKCJcbk5ldyBhIEJh
ciB3aXRoIHN0dWZmIGluIGl0XG4iKTsKICAgIGxpc3RbNV0gPSBuZXcgQmFyKDEyMzQpOwoKICAg
ICAKICAgICAKCiAgICBwcmludGYoIlxuUFJPQkxFTSBIRVJFLCB1bmJhbGFuY2VkIEZvbyBEVE9S
ISFcbiIpOwogICAgYS5Db3B5Rm9vKEdldEJhcig1KS5teUZvbyk7CgogICAgcHJpbnRmKCJcbkRl
c3Ryb3kgQmFyIHdpdGggc3R1ZmZcbiIpOwogICAgZGVsZXRlIGxpc3RbNV07CgogICAgcHJpbnRm
KCJcbkVuZCBzdGFjay4uLlxuIik7CiAgfQoKICAgCiAgQmFyIEdldEJhcihpbnQgd2hpY2gpIHsg
cmV0dXJuICpsaXN0W3doaWNoXTsgfQoKcHJpdmF0ZToKICBCYXIgKmxpc3RbMTBdOwp9OwoKaW50
IG1haW4oKQp7CiAgVGVzdCB0OwogIHQucnVuKCk7Cn0K


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