From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4650 invoked by alias); 19 Mar 2003 22:26:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 4581 invoked by uid 71); 19 Mar 2003 22:26:00 -0000 Resent-Date: 19 Mar 2003 22:26:00 -0000 Resent-Message-ID: <20030319222600.4580.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, peter.thompson@etnus.com Received: (qmail 17188 invoked by uid 48); 19 Mar 2003 22:22:11 -0000 Message-Id: <20030319222211.17186.qmail@sources.redhat.com> Date: Wed, 19 Mar 2003 22:26:00 -0000 From: peter.thompson@etnus.com Reply-To: peter.thompson@etnus.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: debug/10156: g++ 3.2 fails to emit debug location info for a local variable inside a class constructor X-SW-Source: 2003-03/txt/msg01300.txt.bz2 List-Id: >Number: 10156 >Category: debug >Synopsis: g++ 3.2 fails to emit debug location info for a local variable inside a class constructor >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Wed Mar 19 22:26:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Peter Thompson - Etnus >Release: gcc version 3.2 20020903 (Red Hat Linux 8.0 3.2-7) >Organization: >Environment: i686 platform gcc 3.2 compilers (also tried 3.2.1, and 3.2.2 versions with same results) >Description: We ran into this problem with our debugger, TotalView, but were able to replicate the problem, with a little bit of effort, with gdb. Inside a class constructor, a local variable that is not a member of the class is used to hold a temporary value. Setting a breakpoint, or stepping into the constructor, and looking for the value of the variable after it as assigned shows "No symbol "i" in current context." Looking at the dwarf output with readelf -wi, it is possible to see that though 'i' is apparently defined <2><186e>: Abbrev Number: 38 (DW_TAG_variable) DW_AT_name : i DW_AT_decl_file : 1 DW_AT_decl_line : 12 DW_AT_type : AND refined correctly in one of the copies of the constructors: <2><18a8>: Abbrev Number: 41 (DW_TAG_variable) DW_AT_abstract_origin: <186e> DW_AT_location : 2 byte block: 91 7c (DW_OP_fbreg: -4; ) it is not referenced correctly in the copy of the subroutine which we are able to step into: <2><18dc>: Abbrev Number: 42 (DW_TAG_variable) DW_AT_abstract_origin: <186e> Here the DW_AT_location attribute is missing, resulting in the debuggers being unable to locate it. >How-To-Repeat: Compile with -g Debug the output file with gdb Set a breakpoint at line 30, A x (a, b); Run Step (to get into the constructor, gdb misses any breakpoints set directly in the constructor. Not your problem!) Next a few times to get past i = 42; print i Should get No Symbol "i" in current context. Also look at the dwarf info from the executable with readelf -wi This will show a DW_AT_location for i in one copy of the constructor, but will only show a DW_AT_abstract_origin for the copy of the constructor that gdb steps into. >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="foo.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="foo.ii" IyAxICJmb28uY3h4IgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMgMSAi Zm9vLmN4eCIKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMjggIi91c3IvaW5jbHVk ZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI5MSAiL3Vz ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEg MwojIDI5MiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDMyMCAiL3Vzci9pbmNsdWRl L2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwojIDMyMSAi L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDI5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg MiAzCgpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxp bnV4LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDEgIi91c3IvbGliL2djYy1saWIvaTM4 Ni1yZWRoYXQtbGludXgvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBp bnQgc2l6ZV90OwojIDM1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAz CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8zLjIvaW5jbHVkZS9zdGRk ZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYg dW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7 CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3Vf bG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9x dWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5 ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4 X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0 IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5 cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMy X3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90 OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90 OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2 X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlw ZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYg X191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1 YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90 Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRf dDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9f dmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNo YXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVk ZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlw ZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBl ZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90 OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBf X2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9s b25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5 cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNu dDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90 IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNp Z25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoK dHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9i aXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5 cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9p bmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBf X3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBl cy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVz OwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jf c3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0 cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3Qg X19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBf X3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZv aWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsK CgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsK ICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRl ZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVm IHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQg X19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVy OwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0g cHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9 IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoK dHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0 bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3 X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9k ZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hh cmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nr a2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRl ZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBz dHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwog IGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJl YWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJl YWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRf dDsKIyAxNDQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDM3ICIvdXNyL2luY2x1 ZGUvc3RkaW8uaCIgMiAzCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CgoK CgoKIyA2MiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUg X19GSUxFOwojIDcyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9s aWJpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvX0dfY29uZmlnLmgiIDEgMwojIDE0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAx ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzMuMi9pbmNsdWRlL3N0ZGRlZi5o IiAxIDMKIyAzMjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMy4yL2luY2x1 ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2lu Y2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5o IiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8zLjIvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMK IyA2MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAg aW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2No Yls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9fR19j b25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3Rh dGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBf X3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNyL2lu Y2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMgMjgg Ii91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwoj IDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1y ZWRoYXQtbGludXgvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUv d2NoYXIuaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgojIDI5ICIvdXNyL2lu Y2x1ZGUvZ2NvbnYuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxp bnV4LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2djb252Lmgi IDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9f R0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9f R0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5D T01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9J TlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAg X19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7 CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsK c3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkg KHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3Qg dW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh ciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9m Y3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9m Y3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJh bnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2ln bmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7 CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBl ZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29u c3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwg Y29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9p ZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBf X3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9m Y3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2Rh dGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19n Y29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRs ZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAq X19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBf X2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsK CgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGlu dCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRl ZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAg dW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoK CiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBf X2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9f c3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlw ZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9f Z2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBf ZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZp Zy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0 cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252 X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVm IGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBl ZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0 eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g KF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVf XyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMK IyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYt cmVkaGF0LWxpbnV4LzMuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9saWIvZ2Nj LWxpYi9pMzg2LXJlZGhhdC1saW51eC8zLjIvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9f YnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDU0ICIvdXNyL2luY2x1ZGUvbGliaW8u aCIgMiAzCiMgMTYyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsg c3RydWN0IF9JT19GSUxFOwojIDE3MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2 b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFy a2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5 NSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewog IF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAg X19jb2RlY3Z0X25vY29udgp9OwojIDI2MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0 IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hh ciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRl X2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNo YXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVf YmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBz dHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoK ICBpbnQgX2ZpbGVubzsKCgoKICBpbnQgX2ZsYWdzMjsKCiAgX19vZmZfdCBfb2xkX29mZnNldDsK CgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29m ZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAzMTEg Ii91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19vZmY2NF90IF9vZmZzZXQ7CgoKCgoKICB2b2lk ICpfX3BhZDE7CiAgdm9pZCAqX19wYWQyOwoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJb MTUgKiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3RydWN0 IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRp bl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBz dHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzUwICIvdXNyL2luY2x1ZGUv bGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2ll LCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6ZV90 IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVkZWYg aW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGludCBf X3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgoKCnR5 cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb193 cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtfZm4gY29v a2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9jbG9zZV9m dW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAgX19p b193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2VfZm4g KmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tpZV9p b19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9m aWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19jb29raWVfZmls ZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zucyk7CgoKCgpl eHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAo KTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf X292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3Vu ZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dWZsb3cgKF9J T19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklMRSAq LCB3aW50X3QpIHRocm93ICgpOwojIDQzMiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJu IGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19w dXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zl b2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9f RklMRSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19G SUxFICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9f RklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAq KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJv dyAoKTsKIyA0NjIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2Nh bmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93 ICgpOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0 IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz dCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGludCwg X19zc2l6ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19GSUxFICos IHZvaWQgKiwgc2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYg KF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRlcm4gX19vZmY2 NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhyb3cgKCk7Cgpl eHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMg NTIwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9CiMgNzMgIi91c3IvaW5jbHVkZS9zdGRpby5o IiAyIDMKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyA4NiAiL3Vzci9pbmNs dWRlL3N0ZGlvLmgiIDMKCgp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgoKdHlwZWRlZiBf R19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxMzggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDEzOSAiL3Vzci9pbmNsdWRlL3N0 ZGlvLmgiIDIgMwoKCgpleHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRpbjsKZXh0ZXJuIHN0cnVj dCBfSU9fRklMRSAqc3Rkb3V0OwpleHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRlcnI7CgoKCgoK CgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgp OwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAq X19uZXcpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cg KCk7CiMgMTczICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdG1wbmFtIChj aGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJv dyAoKTsKCgoKCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMg MTk1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25z dCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0 cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZmbHVzaCAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0 ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cg KCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmls ZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19t b2RlcywKICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRo cm93ICgpOwojIDI0MSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgpleHRlcm4gRklMRSAqZm9w ZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVy biBGSUxFICpmcmVvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAog ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywK ICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg KCk7CgoKCgpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21v ZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVz dHJpY3QgX19tYWdpY19jb29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nv b2tpZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAq Zm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMp IHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0 cmljdCBfX2J1ZmxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVz dHJpY3QgX19zaXplbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxF ICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpf X3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVzLCBzaXplX3Qg X19uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJp Y3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBz cHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2 ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93 ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt YXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3By aW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv cm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgp OwoKCgoKCmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg X19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf X3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwoKCgoK CgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz dCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu dGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBf X3B0ciwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m bXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu dGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19w dHIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwg Li4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9f LCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9f YXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9f LCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoKCgpleHRlcm4gaW50IGZzY2FuZiAoRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NhbmYgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCgoKCmV4 dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2Fy ZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAy LCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m b3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3NjYW5mIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgoK CgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50 IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldGNoYXIgKHZv aWQpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKCgoKCmV4dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4g aW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hh ciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19z KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0c191bmxvY2tlZCAoY2hhciAqX19yZXN0 cmljdCBfX3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNDYzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg MwpleHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24s IGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChj aGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVy biBfX3NzaXplX3QgZ2V0bGluZSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoK CmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXRzIChfX2Nv bnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9f cmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVf dCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwK ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9p ZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7 CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3Qg X19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g aW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkg dGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKIyA1MzAg Ii91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvIChGSUxFICpfX3N0cmVh bSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZl90 IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDU0NiAiL3Vzci9pbmNsdWRlL3N0 ZGlvLmgiIDMKCgoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt LCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZz ZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3MpIHRocm93ICgpOwoj IDU2NSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKZXh0ZXJuIGludCBmc2Vla282NCAoRklM RSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0 ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4g aW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVz dHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpf X3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19wb3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZv aWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpf X3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJl YW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0p IHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRo cm93ICgpOwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N5c19lcnJsaXN0LmgiIDEgMwoj IDI3ICIvdXNyL2luY2x1ZGUvYml0cy9zeXNfZXJybGlzdC5oIiAzCmV4dGVybiBpbnQgc3lzX25l cnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4g aW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3Rb XTsKIyA2MDIgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCmV4dGVybiBpbnQgZmlsZW5v IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxvY2tl ZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKF9f Y29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu IGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN1 c2VyaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpzdHJ1Y3Qgb2JzdGFjazsKCgpleHRlcm4g aW50IG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ss CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv cm1hdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3By aW50Zl9fLCAyLCAzKSkpOwpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAoc3RydWN0IG9ic3Rh Y2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19nbnVjX3ZhX2xpc3QgX19hcmdzKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgZmxvY2tm aWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxl IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJ TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2NzkgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCn0K IyAyICJmb28uY3h4IiAyCmNsYXNzIEEgewpwdWJsaWM6CiAgQSAoaW50IGEsIGludCBiKTsKICBp bnQgYV87CiAgaW50IGJfOwogIGludCBjXzsKfTsKCkE6OkEgKGludCBhLCBpbnQgYikgOiBhXyAo YSksIGJfIChiKSwgY18gKDApCnsKICBpbnQgaTsKICBpID0gNDI7CiAgY18gPSBhXyAqIGJfOwog IGNfICs9IGk7Cgp9Cgp2b2lkIHRlc3QoaW50IGEpIHsKICBpbnQgYiA9IDIqYTsKCiAgcHJpbnRm KCJiID0gJWRcbiIsIGIpOwoKfQoKCmludCBtYWluIChpbnQsIGNoYXIqICopCnsKICBpbnQgYSA9 IDM0LCBiID0gNTY7CiAgQSB4IChhLCBiKTsKICB0ZXN0KGEpOwogIHJldHVybiB4LmFfICsgeC5i XzsKfQo=