From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6248 invoked by alias); 18 Jan 2002 10: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 6214 invoked by uid 71); 18 Jan 2002 10:26:00 -0000 Resent-Date: 18 Jan 2002 10:26:00 -0000 Resent-Message-ID: <20020118102600.6213.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, jtorres@sia.es Received:(qmail 4139 invoked by uid 61); 18 Jan 2002 10:17:34 -0000 Message-Id:<20020118101734.4138.qmail@sources.redhat.com> Date: Fri, 18 Jan 2002 02:26:00 -0000 From: jtorres@sia.es Reply-To: jtorres@sia.es To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version:gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/5423: The compiler crashes and you need to relax the optimization to -O0 X-SW-Source: 2002-01/txt/msg00652.txt.bz2 List-Id: >Number: 5423 >Category: optimization >Synopsis: The compiler crashes and you need to relax the optimization to -O0 >Confidential: no >Severity: non-critical >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Fri Jan 18 02:26:00 PST 2002 >Closed-Date: >Last-Modified: >Originator: Jaime Torres >Release: gcc 3.0.2 >Organization: >Environment: Linux 2.4.16, glibc 2.2.4 >Description: When compiling the program john the ripper with the maximun optimization options, gcc can not compile the compiler.c module, and I have to reduce the optimizations options. The compiler crashes. I know I'm using a still developing feature, so this is a file to test it and fix the crash. >How-To-Repeat: gcc -c -Wall -O2 -fomit-frame-pointer -march=i686 -O3 -fpeephole2 -fsched-spec -fsched-interblock -fssa -fdce -funroll-all-loops -fschedule-insns2 -fdelayed-branch -fthread-jumps -fdelete-null-pointer-checks -frerun-loop-opt -funroll-loops compiler.c -save-temp gcc: unrecognized option `-save-temp' cc1: warning: this target machine does not have delayed branches compiler.c: In function `c_direct': compiler.c:1131: Internal error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >Fix: Remove the -fssa from the command line options. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="compiler.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="compiler.i" IyA2ICJjb21waWxlci5jIgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4wLjMvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAzNyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVh dHVyZXMuaCIgMSAzCiMgMjgzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg MiAzCiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9n bnUvc3R1YnMuaCIgMSAzCiMgMzEzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzgg Ii91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5o IiAyIDMKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMv aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTk5ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6 ZV90OwojIDQ0ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1 ZGUvc3RkaW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI2 ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz LmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3Iv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAz CiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQg Y2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYg dW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9f ZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9f ZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2lu Y2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVk ZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2lu dDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2ln bmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4 dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVu c2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRl ZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVk ZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3Vf bG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBf X25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xv ZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVm IF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRl ZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwog IH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2Fk ZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191 c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBp bnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQg X19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBf X2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBl ZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90 Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNi bGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191 X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoK dHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRf dDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25n IGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJl YWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2Jp dHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3By aW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMK CgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBf X3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpf cHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBp bnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9w YXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwog IHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3Rh Y2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRl ZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVh ZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QK ewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVk IGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2Vy dmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBf X21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9t dXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRf bXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwojIDE0MCAiL3Vzci9p bmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBw dGhyZWFkX3Q7CiMgMTQ0ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyA0NiAiL3Vz ci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDIg MwojIDU0ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUv c3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwojIDY0ICIvdXNyL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVm IHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNzQgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlv LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9f R19jb25maWcuaCIgMSAzCiMgOSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMTAgIi91c3IvaW5jbHVkZS9fR19jb25maWcu aCIgMiAzCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMv aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjg3ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBsb25nIGludCB3Y2hhcl90 OwojIDMxMiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRl L3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNs dWRlL19HX2NvbmZpZy5oIiAyIDMKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMK IyA2NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2Nv dW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAg fSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi IDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19z dGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAg X19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRlL19H X2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI2ICIvdXNyL2lu Y2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAi L3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAz CiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNs dWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMKIyA1 MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIg MiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKCgoKZW51 bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAog IF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09V VFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVU LAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9S Cn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9S RV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2Nv bnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29u dl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2Nv bnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFy ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3Qg KiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBf X2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBf X2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1 Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGlu dCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQg Y2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgqX19n Y29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBl ZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICop Owp0eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0 IF9fZ2NvbnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0Owog IF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252 X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3Qg X19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewog IHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3Qg Y2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsK ICBjaGFyICpfX3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9m Y3QgX19pbml0X2ZjdDsKICBfX2djb252X2VuZF9mY3QgX19lbmRfZmN0OwoKCgogIGludCBfX21p bl9uZWVkZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRl ZF90bzsKICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQg Kl9fZGF0YTsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25lZCBjaGFy ICpfX291dGJ1ZjsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFn czsKCgoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9faW50ZXJuYWxfdXNl OwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKCgoKICBz dHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBf X2djb252X2luZm8KewogIHNpemVfdCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpf X3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBb XTsKfSAqX19nY29udl90OwojIDQ1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwp0eXBl ZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAg c3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9f ZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2 X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2lu dDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0 eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g KF9fU0lfXykpKTsKIyAzMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDUzICIvdXNyL2lu Y2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4wLjMvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92 YV9saXN0IF9fZ251Y192YV9saXN0OwojIDU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMg MTYwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9J T19GSUxFOwojIDE3MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19s b2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4 dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5MyAiL3Vzci9p bmNsdWRlL2xpYmlvLmgiIDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2 dF9vaywKICBfX2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0 X25vY29udgp9OwojIDI2MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19GSUxF IHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3Jl YWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAg Y2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19i dWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBj aGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lP X21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2Zp bGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25l ZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFy IF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAzMDUgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAzCiAgX19vZmY2NF90IF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3BhZDE7CiAg dm9pZCAqX19wYWQyOwoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXplb2Yg KGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJ TEUgX0lPX0ZJTEU7CgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19G SUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9f Ml8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87 CiMgMzQ0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3Jl YWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoK CgoKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2Nv bnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9f b2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZv aWQgKl9fY29va2llKTsKIyAzOTYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQg X191bmRlcmZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAq KSA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSA7CmV4dGVybiB3aW50 X3QgX193dW5kZXJmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiB3aW50X3QgX193dWZsb3cgKF9J T19GSUxFICopIDsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90 KSA7CiMgNDI2ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT19nZXRjIChf SU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50IF9JT19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAq X19mcCkgOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50 IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSA7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2Nr ZWQgKF9JT19GSUxFICpfX2ZwKSA7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lP X0ZJTEUgKikgOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIDsKZXh0 ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSA7CiMgNDU2ICIvdXNyL2luY2x1 ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJp Y3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2du dWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSA7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChf SU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSA7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4g KF9JT19GSUxFICosIGludCwgX19zc2l6ZV90KSA7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChf SU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29m ZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgOwpleHRlcm4gX19vZmY2NF90IF9J T19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgOwoKZXh0ZXJuIHZvaWQgX0lP X2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIDsKIyA3NSAiL3Vzci9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDg5ICIvdXNyL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBl ZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CiMgMTM4ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0 ZGlvX2xpbS5oIiAxIDMKIyAxMzkgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4wLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4g RklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwojIDE1MyAiL3Vzci9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBy ZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgOwoKZXh0ZXJuIGludCByZW5hbWUgKF9f Y29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIDsKCgoKCmV4dGVybiBGSUxF ICp0bXBmaWxlICh2b2lkKSA7CiMgMTcyICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpf X3MpIDsKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSA7CiMgMTg5ICIvdXNy L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMwpl eHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpf X3BmeCkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRl cm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxF ICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJl YW0pIDsKIyAyMTIgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5j bHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbW9kZXMpIDsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSkgOwojIDI0MiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAu My9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29u c3QgY2hhciAqX19tb2RlcykgOwojIDI2NSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCmV4dGVybiBp bnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBf X2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgOwoKCgoK ZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpf X3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIDsK CgpleHRlcm4gdm9pZCBzZXRsaW5lYnVmIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGlu dCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHBy aW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBp bnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCgpleHRlcm4gaW50IHZmcHJp bnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y bWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoKZXh0ZXJu IGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192 YV9saXN0IF9fYXJnKQogICAgICAgICAgICA7CgpleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICpf X3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAg ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoKCgpleHRlcm4gaW50IHNucHJp bnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICAgICAg ICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0 ZXJuIGludCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4s CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs IF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9y bWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CiMgMzM2ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzY2FuZiAo RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwojIDM2MiAiL3Vzci9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmZ2V0 YyAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgOwoK CmV4dGVybiBpbnQgZ2V0Y2hhciAodm9pZCkgOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9j a2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQp IDsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpl eHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IHB1 dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQg X19jKSA7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpf X3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpf X3N0cmVhbSkgOwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIDsKCgoKCgpl eHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQg X193LCBGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jl c3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICAgICAg ICAgOwojIDQyOCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNs dWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgOwojIDQ1MiAiL3Vz ci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMK ZXh0ZXJuIGludCBmcHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSkKICAgICAgICAgICAgOwojIDQ2MiAiL3Vzci9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBwdXRz IChfX2NvbnN0IGNoYXIgKl9fcykgOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywgRklM RSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBf X3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qg dm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSA7CgoKCmV4dGVybiBzaXplX3Qg ZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0pIDsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9pZCAq X19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKCmV4dGVy biBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNl KSA7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gdm9p ZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSA7CiMgNTA2ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZnZXRwb3Mg KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykKICAg ICAgICAgICAgOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBm cG9zX3QgKl9fcG9zKSA7CiMgNTQyICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19z dHJlYW0pIDsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQg ZmVycm9yIChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tl ZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0 cmVhbSkgOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoK CmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIDsKCgoKCmV4dGVybiBpbnQg c3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKIyA1 NzMgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRp by5oIiAzCmV4dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGlu dCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgoKCmV4dGVybiBGSUxFICpw b3BlbiAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgOwoK CmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKCmV4dGVybiBjaGFyICpj dGVybWlkIChjaGFyICpfX3MpIDsKIyA2MjAgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklM RSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFt KSA7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CiMgNjQxICIv dXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIg MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUv Yml0cy9zdGRpby5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKewogIHJldHVybiB2ZnBy aW50ZiAoc3Rkb3V0LCBfX2ZtdCwgX19hcmcpOwp9CgoKZXh0ZXJuIF9faW5saW5lIGludApnZXRj aGFyICh2b2lkKQp7CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmV4dGVybiBfX2lu bGluZSBpbnQKZ2V0Y191bmxvY2tlZCAoRklMRSAqX19mcCkKewogIHJldHVybiAoKF9fZnApLT5f SU9fcmVhZF9wdHIgPj0gKF9fZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoo dW5zaWduZWQgY2hhciAqKSAoX19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmV4dGVybiBfX2lu bGluZSBpbnQKZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lP X3JlYWRfcHRyID49IChzdGRpbiktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoo dW5zaWduZWQgY2hhciAqKSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmV4dGVybiBf X2lubGluZSBpbnQKcHV0Y2hhciAoaW50IF9fYykKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBz dGRvdXQpOwp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19j LCBGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIg Pj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVu c2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193 cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNfdW5s b2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+ X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cg KF9fc3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9f c3RyZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCmV4dGVybiBfX2lubGluZSBp bnQKcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9f d3JpdGVfcHRyID49IChzdGRvdXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91 dCwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5f SU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CiMgMTExICIvdXNyL2luY2x1ZGUvYml0cy9zdGRp by5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0p CnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmV4dGVy biBfX2lubGluZSBpbnQKZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkKewogIHJldHVy biAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MjApICE9IDApOwp9CiMgNjQyICIvdXNyL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzCiMgNyAi Y29tcGlsZXIuYyIgMgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMgMjUgIi91c3Iv aW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAy NiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyA5NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCnR5 cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0gZGl2X3Q7CgoK CnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgaW50IHJlbTsK ICB9IGxkaXZfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gc2l6ZV90 IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIDsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChf X2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g aW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQg YXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIpIDsKIyAxNjMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gbG9uZyBpbnQg c3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKZXh0ZXJu IHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICAgICAgICAgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVy biBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu dCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50 IF9fYmFzZSkKICAgICAgICAgICAgOwoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv bmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i YXNlKSA7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRv dWxsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh c2UpCiAgICAgICAgICAgIDsKIyAyNTAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4g ZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgICAgICAgIDsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2lu dGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkK ICAgICAgICAgICAgOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIDsKCmV4dGVybiBsb25nIGludCBfX3N0 cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkg OwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsK CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFs IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7 CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3Vs bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICAgICAgICAgOwoKCgoKCgoKZXh0ZXJuIF9faW5s aW5lIGRvdWJsZQpzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyKQp7CiAgcmV0dXJuIF9fc3RydG9kX2ludGVybmFsIChfX25w dHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKc3RydG9sIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK ICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sX2ludGVybmFsIChfX25wdHIs IF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGlu dApzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvdWxf aW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KIyAzMjUgIi91c3IvaW5j bHVkZS9zdGRsaWIuaCIgMwpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcg aW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxf aW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBl eHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9f ZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxv bmcgbG9uZyBpbnQKc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4g X19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0 ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwg KF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5h bCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBkb3Vi bGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIs IChjaGFyICoqKSAoKHZvaWQgKikwKSk7Cn0KZXh0ZXJuIF9faW5saW5lIGludAphdG9pIChfX2Nv bnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIg KiopICgodm9pZCAqKTApLCAxMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmF0b2wgKF9f Y29uc3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikg KCh2b2lkICopMCksIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcg bG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvbGwg KF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0KIyAzODQgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSA7CgoKZXh0ZXJu IGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAy NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy90eXBlcy5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlw ZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYg X191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3Qg cXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNp ZF90OwoKCgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9f dDsKIyA2MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19kZXZfdCBkZXZf dDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90 OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRf dDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CiMgOTkgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMwp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0eXBlZGVmIF9faWRfdCBpZF90OwoK CgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRk cl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlf dDsKIyAxMzIgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90 aW1lLmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvdHlwZXMuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVk ZWYgX190aW1lX3QgdGltZV90OwojIDc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgODAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIg MwoKCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDkxICIvdXNyL2luY2x1ZGUvdGlt ZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgOTIgIi91c3IvaW5j bHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTMzICIvdXNy L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwojIDE0NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o IiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRl L3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5 cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50 IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxOTAgIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f IChfX1FJX18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f IChfX0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f IChfX1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f IChfX0RJX18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVf XyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBf X2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg dV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVu c2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7 Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3Jk X18pKSk7CiMgMjEyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvZW5kaWFuLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAz CiMgMzcgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vu ZGlhbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyAyMTMgIi91c3Iv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o IiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9mZWF0dXJlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N5 cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMg MzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvc2lnc2V0LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBl ZGVmIGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWdu ZWQgbG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQp KSldOwogIH0gX19zaWdzZXRfdDsKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAz CgoKCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS90 aW1lLmgiIDEgMwojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMK ICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgNDUg Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90 aW1lLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAy IDMKCgoKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vj b25kc190IHR2X3VzZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAz CgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCnR5cGVkZWYgbG9uZyBp bnQgX19mZF9tYXNrOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCgoKCiAgICBfX2ZkX21h c2sgX19mZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCgogIH0gZmRf c2V0OwoKCgoKCgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwojIDEwMiAiL3Vzci9pbmNsdWRl L3N5cy9zZWxlY3QuaCIgMwpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpf X3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmlj dCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhj ZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190 aW1lb3V0KSA7CiMgMjE2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vz ci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDIgMwojIDIzMCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19i bGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoK dHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAzOTEgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMiAzCgoKCgoKCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIDsKCgpleHRlcm4g dm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmlu aXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIDsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0 YXRlIChjaGFyICpfX3N0YXRlYnVmKSA7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAg ICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwog ICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3NlcDsKICAg IGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5k b21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAq X19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGlu dCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIDsKCmV4dGVybiBpbnQgaW5pdHN0 YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwK ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOwoKZXh0ZXJu IGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCgoK ZXh0ZXJuIGludCByYW5kICh2b2lkKSA7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50 IF9fc2VlZCkgOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIDsK CgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgOwpleHRlcm4gZG91YmxlIGVyYW5k NDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGxy YW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGlu dCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIDsKZXh0ZXJu IGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0 ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSA7CmV4dGVybiB1bnNpZ25lZCBz aG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgOwpleHRl cm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgOwoKCgoKCnN0 cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAg dW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19j OwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBp bnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEg Kl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVz dHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGlu dCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAq X19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0 cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9k YXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQg Kl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNo b3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50 ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBk cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBs b25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5z aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg bG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAo bG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICAg ICAgICAgOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2 dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIp IDsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwK ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CiMg NTI3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90 IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxs b2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgICAgICAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqX19w dHIsIHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4g dm9pZCBmcmVlICh2b2lkICpfX3B0cikgOwoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19w dHIpIDsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwojIDIyICIvdXNyL2luY2x1 ZGUvYWxsb2NhLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91 c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUv YWxsb2NhLmgiIDIgMwoKCgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkg OwojIDU0NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICp2YWxs b2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgNTYxICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIF9fYXR0cmli dXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1 bmMpICh2b2lkKSkgOwoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50 IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgICAgICAgICA7CgoKCgoK ZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy bl9fKSk7CiMgNTg3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGVu diAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVu diAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAq X19zdHJpbmcpIDsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUs IF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICAgICAgICAgOwoKCmV4 dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCgoKCmV4dGVybiBp bnQgY2xlYXJlbnYgKHZvaWQpIDsKIyA2MjMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRl cm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSA7CgoKCgoKCgpleHRlcm4gaW50IG1r c3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKIyA2NTAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MwpleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgOwoKCgoKZXh0ZXJuIGlu dCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSA7CiMgNjcyICIvdXNyL2luY2x1ZGUv c3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNv bHZlZCkgOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQg KiwgX19jb25zdCB2b2lkICopOwojIDY4OSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVy biB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFz ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBf X2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFz ZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2Nv bXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDcxMCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAzCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkKICAgICAgICAg ICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25n IGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwojIDcyOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBj aGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3Qg X19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIDsKCgoK CmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9f cmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Np Z24pIDsKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0 LCBjaGFyICpfX2J1ZikgOwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3Zh bHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9f ZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIDsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25n IGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpf X3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIDsKZXh0ZXJuIGNoYXIg KnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSA7 CgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50 ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg X19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fbGVuKSA7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0 LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0 cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBz aXplX3QgX19sZW4pIDsKCmV4dGVybiBpbnQgcWVjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwg aW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0 LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz dHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91 YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz dHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAg ICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIDsKCgoKCgoKZXh0ZXJuIGlu dCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IG1i dG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IHdjdG9t YiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIDsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3dj cyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIDsKCmV4dGVybiBzaXplX3Qg d2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQogICAgICAgICAg ICA7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkg OwojIDg1OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAo ZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgOwojIDggImNvbXBpbGVyLmMiIDIKIyAx ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9z dHJpbmcuaCIgMiAzCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjAuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0cmluZy5o IiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90 IF9fbikgOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9p ZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgICAgICAgIDsKCgoKCgpleHRlcm4gdm9pZCAqbWVt Y2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBf X3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgICAg ICAgIDsKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90 IF9fbikgOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qg dm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19j LCBzaXplX3QgX19uKQogICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoj IDc3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAq X19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICAg ICAgICAgOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAog ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl X3QgX19uKSA7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3Qs IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICAgICAgICAgOwoKZXh0ZXJuIGNo YXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSA7CgoKZXh0ZXJu IGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAg ICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAg KF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAg ICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xs IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICAgICAgICAgIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpf X3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKIyAxMjAgIi91c3IvaW5jbHVkZS9zdHJpbmcu aCIgMwpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVf XyAoKF9fbWFsbG9jX18pKTsKIyAxNTUgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4g Y2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGlu dCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwojIDE2NyAiL3Vzci9pbmNsdWRlL3N0 cmluZy5oIiAzCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29u c3QgY2hhciAqX19yZWplY3QpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hh ciAqX19hY2NlcHQpCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4 dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2Fj Y2VwdCkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNo YXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVl ZGxlKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMgMTg3ICIvdXNy L2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmlj dCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgICAgICAgICA7CgoK CmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOwoKZXh0ZXJu IGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19zYXZlX3B0cikgOwojIDIxOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBzaXpl X3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CiMgMjI5ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChp bnQgX19lcnJudW0pIDsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwg Y2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAo dm9pZCAqX19zLCBzaXplX3QgX19uKSA7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZv aWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gdm9pZCBiemVy byAodm9pZCAqX19zLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZv aWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICAgICAgICAgIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBj aGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBj aGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKIyAyNzIgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gaW50IHN0 cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgICAg ICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNt cCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAg ICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyAyOTQgIi91c3IvaW5jbHVk ZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0 cmluZ3AsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Rl bGltKSA7CiMgMzU3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9zdHJpbmcuaCIgMSAzCiMgMzU4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAxIDMKIyA1MiAiL3Vzci9pbmNsdWRlL2Jp dHMvc3RyaW5nMi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyA1MyAiL3Vz ci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBl cy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAyIDMKIyAzNzEgIi91 c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gdm9pZCAqX19yYXdtZW1jaHIgKGNv bnN0IHZvaWQgKl9fcywgaW50IF9fYyk7CiMgMzk1ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcy LmgiIDMKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RyY3B5X3NtYWxsIChjaGFyICosIF9fdWlu dDE2X3QsIF9fdWludDE2X3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X191aW50MzJfdCwgX191aW50MzJfdCwgc2l6ZV90KTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpf X3N0cmNweV9zbWFsbCAoY2hhciAqX19kZXN0LAogICAgICAgICAgICAgICAgX191aW50MTZfdCBf X3NyYzBfMiwgX191aW50MTZfdCBfX3NyYzRfMiwKICAgICAgICAgICAgICAgIF9fdWludDMyX3Qg X19zcmMwXzQsIF9fdWludDMyX3QgX19zcmM0XzQsCiAgICAgICAgICAgICAgICBzaXplX3QgX19z cmNsZW4pCnsKICB1bmlvbiB7CiAgICBfX3VpbnQzMl90IF9fdWk7CiAgICBfX3VpbnQxNl90IF9f dXNpOwogICAgdW5zaWduZWQgY2hhciBfX3VjOwogIH0gKl9fdSA9ICh2b2lkICopIF9fZGVzdDsK ICBzd2l0Y2ggKCh1bnNpZ25lZCBpbnQpIF9fc3JjbGVuKQogICAgewogICAgY2FzZSAxOgogICAg ICBfX3UtPl9fdWMgPSAnXDAnOwogICAgICBicmVhazsKICAgIGNhc2UgMjoKICAgICAgX191LT5f X3VzaSA9IF9fc3JjMF8yOwogICAgICBicmVhazsKICAgIGNhc2UgMzoKICAgICAgX191LT5fX3Vz aSA9IF9fc3JjMF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICop IF9fdSArIDIpOwogICAgICBfX3UtPl9fdWMgPSAnXDAnOwogICAgICBicmVhazsKICAgIGNhc2Ug NDoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIGJyZWFrOwogICAgY2FzZSA1Ogog ICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAodm9p ZCAqKSgoY2hhciAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VjID0gJ1wwJzsKICAgICAgYnJl YWs7CiAgICBjYXNlIDY6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBf X2V4dGVuc2lvbl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDQpOwogICAgICBfX3UtPl9fdXNp ID0gX19zcmM0XzI7CiAgICAgIGJyZWFrOwogICAgY2FzZSA3OgogICAgICBfX3UtPl9fdWkgPSBf X3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAodm9pZCAqKSgoY2hhciAqKSBfX3Ug KyA0KTsKICAgICAgX191LT5fX3VzaSA9IF9fc3JjNF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lv bl9fICh2b2lkICopKChjaGFyICopIF9fdSArIDIpOwogICAgICBfX3UtPl9fdWMgPSAnXDAnOwog ICAgICBicmVhazsKICAgIGNhc2UgODoKICAgICAgX191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAg IF9fdSA9IF9fZXh0ZW5zaW9uX18gKHZvaWQgKikoKGNoYXIgKikgX191ICsgNCk7CiAgICAgIF9f dS0+X191aSA9IF9fc3JjNF80OwogICAgICBicmVhazsKICAgIH0KICByZXR1cm4gX19kZXN0Owp9 CiMgODczICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIHNp emVfdCBfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fcmVqZWN0KTsKZXh0 ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBjaGFy IF9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3aGlsZSAoX19z W19fcmVzdWx0XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QpCiAgICArK19f cmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0 cmNzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fcmVqZWN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19yZWplY3QyKTsKZXh0ZXJuIF9faW5saW5l IHNpemVfdApfX3N0cmNzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fcmVqZWN0MSwg Y2hhciBfX3JlamVjdDIpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwogIHdoaWxl IChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDEKICAg ICAgICAgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDIpCiAgICArK19fcmVzdWx0OwogIHJl dHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzMgKF9f Y29uc3QgY2hhciAqX19zLCBjaGFyIF9fcmVqZWN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgX19yZWplY3QyLCBjaGFyIF9fcmVqZWN0Myk7CmV4dGVybiBfX2lu bGluZSBzaXplX3QKX19zdHJjc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgY2hhciBfX3JlamVj dDEsIGNoYXIgX19yZWplY3QyLAogICAgICAgICAgICAgIGNoYXIgX19yZWplY3QzKQp7CiAgcmVn aXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3aGlsZSAoX19zW19fcmVzdWx0XSAhPSAnXDAn ICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QxCiAgICAgICAgICYmIF9fc1tfX3Jlc3VsdF0g IT0gX19yZWplY3QyICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QzKQogICAgKytfX3Jlc3Vs dDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KIyA5MjggIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIu aCIgMwpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2MxIChfX2NvbnN0IGNoYXIgKl9f cywgY2hhciBfX2FjY2VwdCk7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJzcG5fYzEgKF9f Y29uc3QgY2hhciAqX19zLCBjaGFyIF9fYWNjZXB0KQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVz dWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQpCiAgICArK19fcmVz dWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cnNw bl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19hY2NlcHQxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyIF9fYWNjZXB0Mik7CmV4dGVybiBfX2lubGluZSBzaXpl X3QKX19zdHJzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBjaGFyIF9fYWNjZXB0MSwgY2hhciBf X2FjY2VwdDIpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19z W19fcmVzdWx0XSA9PSBfX2FjY2VwdDEgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDIpCiAg ICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVf dCBfX3N0cnNwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGNoYXIgX19hY2NlcHQxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fYWNjZXB0MiwgY2hhciBfX2FjY2Vw dDMpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ryc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9f cywgY2hhciBfX2FjY2VwdDEsIGNoYXIgX19hY2NlcHQyLCBjaGFyIF9fYWNjZXB0MykKewogIHJl Z2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9f YWNjZXB0MSB8fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MgogICAgICAgICB8fCBfX3NbX19y ZXN1bHRdID09IF9fYWNjZXB0MykKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9 CiMgOTgzICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIGNo YXIgKl9fc3RycGJya19jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyKTsKZXh0ZXJuIF9f aW5saW5lIGNoYXIgKgpfX3N0cnBicmtfYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2Nl cHQxLCBpbnQgX19hY2NlcHQyKQp7CgogIHdoaWxlICgqX19zICE9ICdcMCcgJiYgKl9fcyAhPSBf X2FjY2VwdDEgJiYgKl9fcyAhPSBfX2FjY2VwdDIpCiAgICArK19fczsKICByZXR1cm4gKl9fcyA9 PSAnXDAnID8gKCh2b2lkICopMCkgOiAoY2hhciAqKSAoc2l6ZV90KSBfX3M7Cn0KCmV4dGVybiBf X2lubGluZSBjaGFyICpfX3N0cnBicmtfYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2Nl cHQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0Miwg aW50IF9fYWNjZXB0Myk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJrX2MzIChfX2Nv bnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MiwKICAgICAgICAgICAg ICBpbnQgX19hY2NlcHQzKQp7CgogIHdoaWxlICgqX19zICE9ICdcMCcgJiYgKl9fcyAhPSBfX2Fj Y2VwdDEgJiYgKl9fcyAhPSBfX2FjY2VwdDIKICAgICAgICAgJiYgKl9fcyAhPSBfX2FjY2VwdDMp CiAgICArK19fczsKICByZXR1cm4gKl9fcyA9PSAnXDAnID8gKCh2b2lkICopMCkgOiAoY2hhciAq KSAoc2l6ZV90KSBfX3M7Cn0KIyAxMDMzICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMK ZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RydG9rX3JfMWMgKGNoYXIgKl9fcywgY2hhciBfX3Nl cCwgY2hhciAqKl9fbmV4dHApOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RydG9rX3JfMWMg KGNoYXIgKl9fcywgY2hhciBfX3NlcCwgY2hhciAqKl9fbmV4dHApCnsKICBjaGFyICpfX3Jlc3Vs dDsKICBpZiAoX19zID09ICgodm9pZCAqKTApKQogICAgX19zID0gKl9fbmV4dHA7CiAgd2hpbGUg KCpfX3MgPT0gX19zZXApCiAgICArK19fczsKICBpZiAoKl9fcyA9PSAnXDAnKQogICAgX19yZXN1 bHQgPSAoKHZvaWQgKikwKTsKICBlbHNlCiAgICB7CiAgICAgIF9fcmVzdWx0ID0gX19zOwogICAg ICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3MgIT0gX19zZXApCiAgICAgICAgKytfX3M7CiAg ICAgIGlmICgqX19zID09ICdcMCcpCiAgICAgICAgKl9fbmV4dHAgPSBfX3M7CiAgICAgIGVsc2UK ICAgICAgICB7CiAgICAgICAgICAqX19zID0gJ1wwJzsKICAgICAgICAgICpfX25leHRwID0gX19z ICsgMTsKICAgICAgICB9CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgMTA4MyAiL3Vzci9p bmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNlcF8x YyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19z dHJzZXBfMWMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QpCnsKICByZWdpc3RlciBjaGFyICpf X3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsID09ICgodm9pZCAqKTApKQogICAgcmV0dXJu ICpfX3MgPSAoKHZvaWQgKikwKTsKICBpZiAoKl9fcmV0dmFsID09IF9fcmVqZWN0KQogICAgKigq X19zKSsrID0gJ1wwJzsKICBlbHNlCiAgICBpZiAoKCpfX3MgPSAoX19leHRlbnNpb25fXyAoX19i dWlsdGluX2NvbnN0YW50X3AgKF9fcmVqZWN0KSAmJiAoX19yZWplY3QpID09ICdcMCcgPyAoY2hh ciAqKSBfX3Jhd21lbWNociAoX19yZXR2YWwsIF9fcmVqZWN0KSA6IHN0cmNociAoX19yZXR2YWws IF9fcmVqZWN0KSkpKSAhPSAoKHZvaWQgKikwKSkKICAgICAgKigqX19zKSsrID0gJ1wwJzsKICAg IGVsc2UKICAgICAgKl9fcyA9ICgodm9pZCAqKTApOwogIHJldHVybiBfX3JldHZhbDsKfQoKZXh0 ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ryc2VwXzJjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0 MSwgY2hhciBfX3JlamVjdDIpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ryc2VwXzJjIChj aGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpCnsKICByZWdpc3RlciBj aGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsID09ICgodm9pZCAqKTApKQogICAg cmV0dXJuICpfX3MgPSAoKHZvaWQgKikwKTsKICBpZiAoKl9fcmV0dmFsID09IF9fcmVqZWN0MSB8 fCAqX19yZXR2YWwgPT0gX19yZWplY3QyKQogICAgKigqX19zKSsrID0gJ1wwJzsKICBlbHNlCiAg ICB7CiAgICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAgICAgd2hpbGUgKCpf X2NwICE9ICdcMCcgJiYgKl9fY3AgIT0gX19yZWplY3QxICYmICpfX2NwICE9IF9fcmVqZWN0MikK ICAgICAgICArK19fY3A7CiAgICAgIGlmICgqX19jcCAhPSAnXDAnKQogICAgICAgIHsKICAgICAg ICAgICpfX3MgPSBfX2NwOwogICAgICAgICAgKigqX19zKSsrID0gJ1wwJzsKICAgICAgICB9CiAg ICAgIGVsc2UKICAgICAgICAqX19zID0gKCh2b2lkICopMCk7CiAgICB9CiAgcmV0dXJuIF9fcmV0 dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNo YXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyIF9fcmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJzZXBf M2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwgY2hhciBfX3Jl amVjdDMpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFs ID09ICgodm9pZCAqKTApKQogICAgcmV0dXJuICpfX3MgPSAoKHZvaWQgKikwKTsKICBpZiAoKl9f cmV0dmFsID09IF9fcmVqZWN0MSB8fCAqX19yZXR2YWwgPT0gX19yZWplY3QyCiAgICAgIHx8ICpf X3JldHZhbCA9PSBfX3JlamVjdDMpCiAgICAqKCpfX3MpKysgPSAnXDAnOwogIGVsc2UKICAgIHsK ICAgICAgcmVnaXN0ZXIgY2hhciAqX19jcCA9IF9fcmV0dmFsOwogICAgICB3aGlsZSAoKl9fY3Ag IT0gJ1wwJyAmJiAqX19jcCAhPSBfX3JlamVjdDEgJiYgKl9fY3AgIT0gX19yZWplY3QyCiAgICAg ICAgICAgICAmJiAqX19jcCAhPSBfX3JlamVjdDMpCiAgICAgICAgKytfX2NwOwogICAgICBpZiAo Kl9fY3AgIT0gJ1wwJykKICAgICAgICB7CiAgICAgICAgICAqX19zID0gX19jcDsKICAgICAgICAg ICooKl9fcykrKyA9ICdcMCc7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgKl9fcyA9ICgo dm9pZCAqKTApOwogICAgfQogIHJldHVybiBfX3JldHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lIGNo YXIgKl9fc3Ryc2VwX2cgKGNoYXIgKipfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpOwpleHRl cm4gX19pbmxpbmUgY2hhciAqCl9fc3Ryc2VwX2cgKGNoYXIgKipfX3MsIF9fY29uc3QgY2hhciAq X19yZWplY3QpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0 dmFsID09ICgodm9pZCAqKTApKQogICAgcmV0dXJuICgodm9pZCAqKTApOwogIGlmICgoKl9fcyA9 IF9fZXh0ZW5zaW9uX18gKHsgY2hhciBfX2EwLCBfX2ExLCBfX2EyOyAoX19idWlsdGluX2NvbnN0 YW50X3AgKF9fcmVqZWN0KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoX19yZWplY3QpICsg MSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKF9fcmVqZWN0KSA9PSAxKSA/ICgoX19hMCA9ICgo X19jb25zdCBjaGFyICopIChfX3JlamVjdCkpWzBdLCBfX2EwID09ICdcMCcpID8gKCh2b2lkKSAo X19yZXR2YWwpLCAoKHZvaWQgKikwKSkgOiAoKF9fYTEgPSAoKF9fY29uc3QgY2hhciAqKSAoX19y ZWplY3QpKVsxXSwgX19hMSA9PSAnXDAnKSA/IChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29u c3RhbnRfcCAoX19hMCkgJiYgKF9fYTApID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAo X19yZXR2YWwsIF9fYTApIDogc3RyY2hyIChfX3JldHZhbCwgX19hMCkpKSA6ICgoX19hMiA9ICgo X19jb25zdCBjaGFyICopIChfX3JlamVjdCkpWzJdLCBfX2EyID09ICdcMCcpID8gX19zdHJwYnJr X2MyIChfX3JldHZhbCwgX19hMCwgX19hMSkgOiAoKChfX2NvbnN0IGNoYXIgKikgKF9fcmVqZWN0 KSlbM10gPT0gJ1wwJyA/IF9fc3RycGJya19jMyAoX19yZXR2YWwsIF9fYTAsIF9fYTEsIF9fYTIp IDogc3RycGJyayAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSkgOiBzdHJwYnJrIChfX3JldHZhbCwg X19yZWplY3QpKTsgfSkpICE9ICgodm9pZCAqKTApKQogICAgKigqX19zKSsrID0gJ1wwJzsKICBy ZXR1cm4gX19yZXR2YWw7Cn0KIyAxMTc2ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDExNzcgIi91c3IvaW5jbHVkZS9iaXRz L3N0cmluZzIuaCIgMiAzCgoKCgpleHRlcm4gY2hhciAqX19zdHJkdXAgKF9fY29uc3QgY2hhciAq X19zdHJpbmcpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMTIwMCAiL3Vzci9pbmNs dWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBjaGFyICpfX3N0cm5kdXAgKF9fY29uc3QgY2hh ciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19t YWxsb2NfXykpOwojIDM2MSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKIyA5ICJjb21waWxl ci5jIiAyCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUv Y3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9p bmNsdWRlL2N0eXBlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwoj IDI4ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMgNDAgIi91c3IvaW5jbHVkZS9jdHlwZS5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2N0 eXBlLmgiIDIgMwoKCgoKCgplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8ICgw KSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ICgo MSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhhID0gKCgyKSA8 IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBfSVNkaWdpdCA9 ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lT eGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+IDgp KSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUp KSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8IDgpIDogKCgx IDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8PCA4 KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4 KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ICgo MSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkg PCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51 bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4KSkK fTsKIyA3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQg c2hvcnQgaW50ICpfX2N0eXBlX2I7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90 b2xvd2VyOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG91cHBlcjsKIyA5MSAi L3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVtIChpbnQpIDsKZXh0ZXJu IGludCBpc2FscGhhIChpbnQpIDsKZXh0ZXJuIGludCBpc2NudHJsIChpbnQpIDsKZXh0ZXJuIGlu dCBpc2RpZ2l0IChpbnQpIDsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIDsKZXh0ZXJuIGludCBp c2dyYXBoIChpbnQpIDsKZXh0ZXJuIGludCBpc3ByaW50IChpbnQpIDsKZXh0ZXJuIGludCBpc3B1 bmN0IChpbnQpIDsKZXh0ZXJuIGludCBpc3NwYWNlIChpbnQpIDsKZXh0ZXJuIGludCBpc3VwcGVy IChpbnQpIDsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSA7CgoKCgoKCgpleHRlcm4gaW50IHRv bG93ZXIgKGludCBfX2MpIDsKCgpleHRlcm4gaW50IHRvdXBwZXIgKGludCBfX2MpIDsKCgoKCgoK ZXh0ZXJuIGludCBpc2FzY2lpIChpbnQgX19jKSA7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50 IF9fYykgOwoKCgpleHRlcm4gaW50IF90b3VwcGVyIChpbnQpIDsKZXh0ZXJuIGludCBfdG9sb3dl ciAoaW50KSA7CiMgMTY3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gX19pbmxpbmUg aW50CnRvbG93ZXIgKGludCBfX2MpCnsKICByZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwgMjU2 ID8gX19jdHlwZV90b2xvd2VyW19fY10gOiBfX2M7Cn0KCmV4dGVybiBfX2lubGluZSBpbnQKdG91 cHBlciAoaW50IF9fYykKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBfX2N0 eXBlX3RvdXBwZXJbX19jXSA6IF9fYzsKfQojIDEwICJjb21waWxlci5jIiAyCiMgMSAiL3Vzci9p bmNsdWRlL2Vycm5vLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIg MwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEgMwojIDI1ICIvdXNyL2lu Y2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDEg MwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAzCiMgNSAiL3Vzci9pbmNsdWRl L2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAyIDMK IyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpleHRlcm4gaW50IGVycm5vOwoKCmV4 dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMwojIDExICJjb21waWxlci5jIiAy CgojIDEgImFyY2guaCIgMQojIDEzICJjb21waWxlci5jIiAyCiMgMSAicGFyYW1zLmgiIDEKIyAx MyAicGFyYW1zLmgiCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAu My9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjAuMy9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAxIDMKCgoKCgoKIyAx ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvbGltaXRz LmgiIDEgMwojIDEyNSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9p bmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAyNiAi L3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEg MwojIDI3ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xp bWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYg Ii91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz L2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUv Yml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGlt LmgiIDIgMwojIDE0NSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEgMwojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5o IiAyIDMKIyAxMjYgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5j bHVkZS9saW1pdHMuaCIgMiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjAuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAxNCAicGFyYW1z LmgiIDIKIyAxMDkgInBhcmFtcy5oIgpleHRlcm4gaW50IHBhc3N3b3JkX2hhc2hfc2l6ZXNbM107 CmV4dGVybiBpbnQgcGFzc3dvcmRfaGFzaF90aHJlc2hvbGRzWzNdOwojIDE0ICJjb21waWxlci5j IiAyCiMgMSAibWVtb3J5LmgiIDEKIyAxMyAibWVtb3J5LmgiCiMgMSAiL3Vzci9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDE0ICJtZW1v cnkuaCIgMgoKIyAxICJhcmNoLmgiIDEKIyAxNiAibWVtb3J5LmgiIDIKIyAzOSAibWVtb3J5Lmgi CmV4dGVybiB1bnNpZ25lZCBpbnQgbWVtX3NhdmluZ19sZXZlbDsKCgoKCgpleHRlcm4gdm9pZCAq bWVtX2FsbG9jKHNpemVfdCBzaXplKTsKCgoKCgpleHRlcm4gdm9pZCBtZW1fZnJlZSh2b2lkICoq cHRyKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtX2FsbG9jX3Rpbnkoc2l6ZV90IHNpemUsIHNpemVf dCBhbGlnbik7CgoKCgpleHRlcm4gdm9pZCAqbWVtX2FsbG9jX2NvcHkoc2l6ZV90IHNpemUsIHNp emVfdCBhbGlnbiwgdm9pZCAqc3JjKTsKCgoKCmV4dGVybiBjaGFyICpzdHJfYWxsb2NfY29weShj aGFyICpzcmMpOwojIDE1ICJjb21waWxlci5jIiAyCiMgMSAiY29tcGlsZXIuaCIgMQojIDM3ICJj b21waWxlci5oIgpleHRlcm4gY2hhciAqY19lcnJvcnNbXTsKCgoKCmV4dGVybiBpbnQgY19lcnJu bzsKCgoKCnR5cGVkZWYgaW50IGNfaW50OwoKCgoKc3RydWN0IGNfaWRlbnQgewoKICAgICAgICBz dHJ1Y3QgY19pZGVudCAqbmV4dDsKCgogICAgICAgIGNoYXIgKm5hbWU7CgoKICAgICAgICB2b2lk ICphZGRyOwp9OwoKCgoKCmV4dGVybiBpbnQgY19jb21waWxlKGludCAoKmV4dF9nZXRjaGFyKSh2 b2lkKSwgdm9pZCAoKmV4dF9yZXdpbmQpKHZvaWQpLAogICAgICAgIHN0cnVjdCBjX2lkZW50ICpl eHRlcm5zKTsKCgoKCmV4dGVybiBzdHJ1Y3QgY19pZGVudCAqY19sb29rdXAoY2hhciAqbmFtZSk7 CgoKCgpleHRlcm4gdm9pZCBjX2V4ZWN1dGUoc3RydWN0IGNfaWRlbnQgKmZuKTsKIyAxNiAiY29t cGlsZXIuYyIgMgoKY2hhciAqY19lcnJvcnNbXSA9IHsKICAgICAgICAoKHZvaWQgKikwKSwKICAg ICAgICAiVW5rbm93biBpZGVudGlmaWVyIiwKICAgICAgICAiVW5leHBlY3RlZCBjaGFyYWN0ZXIi LAogICAgICAgICJFcnJvciBpbiBleHByZXNzaW9uIiwKICAgICAgICAiSWRlbnRpZmllciBpcyB0 b28gbG9uZyIsCiAgICAgICAgIkV4cHJlc3Npb24gaXMgdG9vIGNvbXBsZXgiLAogICAgICAgICJJ bnZhbGlkIGFycmF5IHNpemUiLAogICAgICAgICJEYXRhIHNlY3Rpb24gaXMgdG9vIGxhcmdlIiwK ICAgICAgICAiSW50ZWdlciBjb25zdGFudCBvdXQgb2YgcmFuZ2UiLAogICAgICAgICJEdXBsaWNh dGUgaWRlbnRpZmllciIsCiAgICAgICAgIktleXdvcmQgaXMgdXNlZCBhcyBhbiBpZGVudGlmaWVy IiwKICAgICAgICAiTm90IGluIGEgZnVuY3Rpb24iLAogICAgICAgICJOZXN0ZWQgZnVuY3Rpb25z IGFyZSBub3Qgc3VwcG9ydGVkIiwKICAgICAgICAiTm90IGluIGFuIGlmIHN0YXRlbWVudCIsCiAg ICAgICAgIk5vdCBpbiBhIGxvb3AiLAogICAgICAgICJVbmV4cGVjdGVkIGVuZCBvZiBzb3VyY2Ui LAogICAgICAgICJJbnRlcm5hbCBjb21waWxlciBlcnJvciIKfTsKCmludCBjX2Vycm5vOwoKdW5p b24gY19pbnNuIHsKICAgICAgICB2b2lkICgqb3ApKHZvaWQpOwogICAgICAgIGNfaW50ICptZW07 CiAgICAgICAgY19pbnQgaW1tOwogICAgICAgIHVuaW9uIGNfaW5zbiAqcGM7Cn07CgpzdHJ1Y3Qg Y19maXh1cCB7CiAgICAgICAgc3RydWN0IGNfZml4dXAgKm5leHQ7CiAgICAgICAgdW5pb24gY19p bnNuICpwYzsKfTsKCnN0YXRpYyBpbnQgY19wYXNzOwoKc3RhdGljIHVuaW9uIGNfaW5zbiAqY19j b2RlX3N0YXJ0OwpzdGF0aWMgdW5pb24gY19pbnNuICpjX2NvZGVfcHRyOwpzdGF0aWMgdW5pb24g Y19pbnNuICpjX3BjOwoKc3RhdGljIGNfaW50ICpjX2RhdGFfc3RhcnQ7CnN0YXRpYyBjX2ludCAq Y19kYXRhX3B0cjsKCnN0YXRpYyB1bmlvbiBjX2luc24gY19zdGFja1soKDB4MTAwICsgNCkgKiA0 KV07CnN0YXRpYyB1bmlvbiBjX2luc24gKmNfc3A7CgpzdGF0aWMgdW5pb24gY19pbnNuICpjX2xv b3Bfc3RhcnQ7CnN0YXRpYyBzdHJ1Y3QgY19maXh1cCAqY19icmVha19maXh1cHM7CgpzdGF0aWMg c3RydWN0IGNfaWRlbnQgKmNfZnVuY3M7CgpzdGF0aWMgY2hhciBjX3VuZ2V0X2J1ZmZlclsoMHgx MDAgKyA0KV07CnN0YXRpYyBpbnQgY191bmdldF9jb3VudDsKCnN0YXRpYyBjaGFyIGNfaXNpZGVu dFsweDEwMF07CgoKCnN0YXRpYyBpbnQgY19FT0Y7CgpzdGF0aWMgaW50ICgqY19leHRfZ2V0Y2hh cikodm9pZCk7CnN0YXRpYyB2b2lkICgqY19leHRfcmV3aW5kKSh2b2lkKTsKCnN0YXRpYyBjaGFy ICpjX3Jlc2VydmVkW10gPSB7CiAgICAgICAgInZvaWQiLAogICAgICAgICJpbnQiLAogICAgICAg ICJpZiIsCiAgICAgICAgImVsc2UiLAogICAgICAgICJ3aGlsZSIsCiAgICAgICAgImNvbnRpbnVl IiwKICAgICAgICAiYnJlYWsiLAogICAgICAgICJyZXR1cm4iLAogICAgICAgICgodm9pZCAqKTAp Cn07CiMgOTkgImNvbXBpbGVyLmMiCnN0cnVjdCBjX29wIHsKICAgICAgICBpbnQgcHJlYzsKICAg ICAgICBpbnQgZGlyOwogICAgICAgIGludCBjbGFzczsKICAgICAgICBjaGFyICpuYW1lOwogICAg ICAgIHZvaWQgKCpvcCkodm9pZCk7Cn07CgoKc3RhdGljIHN0cnVjdCBjX29wIGNfb3BzW107CgoK CgpzdGF0aWMgdm9pZCBjX2luaXQodm9pZCkKewogICAgICAgIGludCBjOwoKICAgICAgICBmb3Ig KGMgPSAwOyBjIDwgMHgxMDA7IGMrKykKICAgICAgICBpZiAoYyA8IDB4ODApCiAgICAgICAgICAg ICAgICBjX2lzaWRlbnRbY10gPSAoKF9fY3R5cGVfYlsoaW50KSAoKGMpKV0gJiAodW5zaWduZWQg c2hvcnQgaW50KSBfSVNhbHBoYSkgfHwgKF9fY3R5cGVfYlsoaW50KSAoKGMpKV0gJiAodW5zaWdu ZWQgc2hvcnQgaW50KSBfSVNkaWdpdCkgfHwgYyA9PSAnXycpID8gMSA6IDA7CiAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgY19pc2lkZW50W2NdID0gMDsKCiAgICAgICAgY19jb2RlX3B0ciA9 IGNfY29kZV9zdGFydDsKICAgICAgICBjX2RhdGFfcHRyID0gY19kYXRhX3N0YXJ0OwoKICAgICAg ICBjX2xvb3Bfc3RhcnQgPSAoKHZvaWQgKikwKTsKICAgICAgICBjX2JyZWFrX2ZpeHVwcyA9ICgo dm9pZCAqKTApOwoKICAgICAgICBjX2Z1bmNzID0gKCh2b2lkICopMCk7CgogICAgICAgIGNfdW5n ZXRfY291bnQgPSAwOwoKICAgICAgICBjX0VPRiA9IDA7CiAgICAgICAgY19lcnJubyA9IDA7Cgog ICAgICAgIGNfZXh0X3Jld2luZCgpOwp9CgpzdGF0aWMgdm9pZCBjX3VuZ2V0Y2hhcihjaGFyIGMp CnsKICAgICAgICBpZiAoY191bmdldF9jb3VudCA+PSAoMHgxMDAgKyA0KSkKICAgICAgICAgICAg ICAgIGNfZXJybm8gPSAxNjsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBjX3VuZ2V0X2J1 ZmZlcltjX3VuZ2V0X2NvdW50KytdID0gYzsKfQoKc3RhdGljIGNoYXIgY19idWZmZXJfZ2V0Y2hh cih2b2lkKQp7CiAgICAgICAgaW50IGM7CgogICAgICAgIGlmIChjX3VuZ2V0X2NvdW50KSByZXR1 cm4gY191bmdldF9idWZmZXJbLS1jX3VuZ2V0X2NvdW50XTsKICAgICAgICBpZiAoKGMgPSBjX2V4 dF9nZXRjaGFyKCkpID4gMCkgcmV0dXJuIGM7CgogICAgICAgIGNfRU9GID0gMTsKICAgICAgICBj X2Vycm5vID0gMTU7CiAgICAgICAgcmV0dXJuICcgJzsKfQoKc3RhdGljIGNoYXIgY19nZXRjaGFy KGludCBxdW90ZSkKewogICAgICAgIGludCBjOwogICAgICAgIGludCBzcGFjZSA9IDA7CgogICAg ICAgIGRvIHsKICAgICAgICAgICAgICAgIGMgPSAodW5zaWduZWQgY2hhciljX2J1ZmZlcl9nZXRj aGFyKCk7CiAgICAgICAgICAgICAgICBpZiAocXVvdGUgfHwgY19FT0YpIHJldHVybiBjOwoKICAg ICAgICAgICAgICAgIGlmIChjIDw9ICcgJykgc3BhY2UgPSAxOyBlbHNlCiAgICAgICAgICAgICAg ICBpZiAoYyA9PSAnLycpCiAgICAgICAgICAgICAgICBzd2l0Y2ggKChjID0gY19idWZmZXJfZ2V0 Y2hhcigpKSkgewogICAgICAgICAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICAgICAgICAgICAg ICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gY19idWZmZXJfZ2V0 Y2hhcigpOwogICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICghY19FT0YgJiYgYyAhPSAn XG4nICYmIGMgIT0gJ1xyJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAnICc7IHNwYWNl ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2Fz ZSAnKic6CiAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAoKGMgPSBjX2J1ZmZlcl9nZXRjaGFyKCkpID09ICcqJykKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGMgPSBjX2J1ZmZlcl9nZXRjaGFyKCkpID09ICcv JykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgICAgICAgICB9IHdoaWxlICghY19FT0YpOwogICAgICAgICAgICAgICAgICAgICAg ICBjID0gJyAnOyBzcGFjZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAg ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGNfdW5nZXRjaGFy KGMpOwogICAgICAgICAgICAgICAgICAgICAgICBjID0gJy8nOwogICAgICAgICAgICAgICAgfQog ICAgICAgIH0gd2hpbGUgKGMgPD0gJyAnKTsKCiAgICAgICAgaWYgKHNwYWNlKSB7CiAgICAgICAg ICAgICAgICBjX3VuZ2V0Y2hhcihjKTsKICAgICAgICAgICAgICAgIGMgPSAnICc7CiAgICAgICAg fQoKICAgICAgICByZXR1cm4gYzsKfQoKc3RhdGljIGNoYXIgKmNfZ2V0dG9rZW4odm9pZCkKewog ICAgICAgIHN0YXRpYyBjaGFyIHRva2VuWzB4MTAwXTsKICAgICAgICBpbnQgcG9zID0gMDsKCiAg ICAgICAgd2hpbGUgKGNfaXNpZGVudFsoKHVuc2lnbmVkIGludCkodW5zaWduZWQgY2hhcikodG9r ZW5bcG9zKytdID0gY19nZXRjaGFyKDApKSldKQogICAgICAgIGlmIChwb3MgPj0gMHgxMDApIHsK ICAgICAgICAgICAgICAgIGNfZXJybm8gPSA0OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgfQoKICAgICAgICBpZiAocG9zICE9IDEpIGNfdW5nZXRjaGFyKHRva2VuWy0tcG9zXSk7CiAg ICAgICAgdG9rZW5bcG9zXSA9IDA7CgogICAgICAgIHJldHVybiB0b2tlbjsKfQoKc3RhdGljIGlu dCBjX2dldGludChjaGFyICp0b2tlbikKewogICAgICAgIGludCB2YWx1ZTsKICAgICAgICBsb25n IGxfdmFsdWU7CiAgICAgICAgY2hhciAqZXJyb3I7CgogICAgICAgIGlmICh0b2tlblswXSA9PSAn XCcnKSB7CiAgICAgICAgICAgICAgICBpZiAoKHZhbHVlID0gY19nZXRjaGFyKDEpKSA9PSAnXCcn KQogICAgICAgICAgICAgICAgICAgICAgICBjX2Vycm5vID0gMjsKICAgICAgICAgICAgICAgIGVs c2UKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09ICdcXCcpIHZhbHVlID0gY19n ZXRjaGFyKDEpOwogICAgICAgICAgICAgICAgaWYgKGNfZ2V0Y2hhcigxKSAhPSAnXCcnKSBjX2Vy cm5vID0gMjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgKCpfX2Vycm5vX2xvY2F0 aW9uICgpKSA9IDA7CiAgICAgICAgICAgICAgICBsX3ZhbHVlID0gc3RydG9sKHRva2VuLCAmZXJy b3IsIDApOwogICAgICAgICAgICAgICAgdmFsdWUgPSAoaW50KWxfdmFsdWU7CiAgICAgICAgICAg ICAgICBpZiAoKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAzNCB8fCAobG9uZyl2YWx1ZSAhPSBs X3ZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICBjX2Vycm5vID0gODsKICAgICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgIGlmICghKnRva2VuIHx8ICplcnJvciB8fCAoKl9fZXJy bm9fbG9jYXRpb24gKCkpKQogICAgICAgICAgICAgICAgICAgICAgICBjX2Vycm5vID0gMjsKICAg ICAgICB9CgogICAgICAgIHJldHVybiB2YWx1ZTsKfQoKc3RhdGljIGNoYXIgY19za2lwX3NwYWNl KHZvaWQpCnsKICAgICAgICBjaGFyIGM7CgogICAgICAgIGlmICgoYyA9IGNfZ2V0Y2hhcigwKSkg PT0gJyAnKSBjID0gY19nZXRjaGFyKDApOwoKICAgICAgICByZXR1cm4gYzsKfQoKc3RhdGljIGlu dCBjX2V4cGVjdChjaGFyIGV4cGVjdGVkKQp7CiAgICAgICAgY2hhciBjOwoKICAgICAgICBpZiAo KGMgPSBjX2dldGNoYXIoMCkpID09ICcgJykKICAgICAgICBpZiAoZXhwZWN0ZWQgIT0gJyAnKSBj ID0gY19nZXRjaGFyKDApOwoKICAgICAgICBpZiAoYyAhPSBleHBlY3RlZCkgY19lcnJubyA9IDI7 CgogICAgICAgIHJldHVybiBjX2Vycm5vOwp9CgpzdGF0aWMgc3RydWN0IGNfaWRlbnQgKmNfZmlu ZF9pZGVudChzdHJ1Y3QgY19pZGVudCAqbGlzdCwKICAgICAgICBzdHJ1Y3QgY19pZGVudCAqZ2xv YmFscywgY2hhciAqbmFtZSkKewogICAgICAgIHN0cnVjdCBjX2lkZW50ICpjdXJyZW50OwoKICAg ICAgICBpZiAoKGN1cnJlbnQgPSBsaXN0KSAhPSBnbG9iYWxzKQogICAgICAgIGRvIHsKICAgICAg ICAgICAgICAgIGlmICghX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9fczJfbGVu OyAoX19idWlsdGluX2NvbnN0YW50X3AgKG5hbWUpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChj dXJyZW50LT5uYW1lKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKG5hbWUpLCBfX3MyX2xlbiA9IHN0 cmxlbiAoY3VycmVudC0+bmFtZSksICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKG5hbWUpICsg MSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5hbWUpID09IDEpIHx8IF9fczFfbGVuID49IDQp ICYmICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGN1cnJlbnQtPm5hbWUpICsgMSkgLSAoc2l6 ZV90KShjb25zdCB2b2lkICopKGN1cnJlbnQtPm5hbWUpID09IDEpIHx8IF9fczJfbGVuID49IDQp KSA/IG1lbWNtcCAoKF9fY29uc3QgY2hhciAqKSAobmFtZSksIChfX2NvbnN0IGNoYXIgKikgKGN1 cnJlbnQtPm5hbWUpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDogX19zMl9sZW4p ICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKG5hbWUpICYmICgoc2l6ZV90KShjb25zdCB2 b2lkICopKChuYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShuYW1lKSA9PSAxKSAm JiAoX19zMV9sZW4gPSBzdHJsZW4gKG5hbWUpLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9j b25zdGFudF9wIChjdXJyZW50LT5uYW1lKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoY3Vy cmVudC0+bmFtZSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoY3VycmVudC0+bmFtZSkg PT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzBdIC0gKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKShjdXJyZW50LT5uYW1lKSlbMF0p OyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzFdIC0gKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoY3VycmVudC0+bmFtZSkpWzFd KTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsyXSAtICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGN1cnJlbnQtPm5hbWUpKVsy XSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzNdIC0gKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoY3VycmVudC0+bmFtZSkpWzNd KTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KGN1cnJlbnQtPm5hbWUpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzBdIC0gX19zMlswXSk7IGlmIChf X3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMV0gLSBfX3MyWzFdKTsgaWYg KF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsyXSAtIF9fczJbMl0pOyBp ZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVszXSAtIF9fczJbM10pOyB9 IH0gX19yZXN1bHQ7IH0pKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKGN1cnJlbnQtPm5hbWUp ICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChjdXJyZW50LT5uYW1lKSArIDEpIC0gKHNpemVf dCkoY29uc3Qgdm9pZCAqKShjdXJyZW50LT5uYW1lKSA9PSAxKSAmJiAoX19zMl9sZW4gPSBzdHJs ZW4gKGN1cnJlbnQtPm5hbWUpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9w IChuYW1lKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkgKyAxKSAtIChzaXplX3Qp KGNvbnN0IHZvaWQgKikobmFtZSkgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBp bnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAobmFtZSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KShjdXJyZW50LT5uYW1lKSlbMF0pOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDAp IHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAobmFtZSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoY3VycmVudC0+bmFtZSkpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAw KSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKG5hbWUpKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKGN1cnJlbnQtPm5hbWUpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0g MCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAobmFtZSkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoY3VycmVudC0+bmFtZSkpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25f XyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3Mx WzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoY3VycmVu dC0+bmFtZSkpWzBdOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1 bHQgPSAoX19zMVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKGN1cnJlbnQtPm5hbWUpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0g MCkgeyBfX3Jlc3VsdCA9IChfX3MxWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoY3VycmVudC0+bmFtZSkpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBf X3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoY3VycmVudC0+bmFtZSkpWzNdKTsgfSB9IF9fcmVzdWx0 OyB9KSkpIDogc3RyY21wIChuYW1lLCBjdXJyZW50LT5uYW1lKSkpKTsgfSkpIGJyZWFrOwogICAg ICAgIH0gd2hpbGUgKChjdXJyZW50ID0gY3VycmVudC0+bmV4dCkgIT0gZ2xvYmFscyk7CgogICAg ICAgIGlmIChjdXJyZW50ICE9IGdsb2JhbHMpCiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVu dDsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gKCh2b2lkICopMCk7Cn0KCnN0 YXRpYyBpbnQgY19hbGxvY19pZGVudChzdHJ1Y3QgY19pZGVudCAqKmxpc3QsIHN0cnVjdCBjX2lk ZW50ICpnbG9iYWxzLAogICAgICAgIGNoYXIgKm5hbWUsIHZvaWQgKmFkZHIpCnsKICAgICAgICBj aGFyICoqY3VycmVudDsKICAgICAgICBzdHJ1Y3QgY19pZGVudCAqbGFzdDsKCiAgICAgICAgY3Vy cmVudCA9IGNfcmVzZXJ2ZWQ7CiAgICAgICAgZG8gewogICAgICAgICAgICAgICAgaWYgKCFfX2V4 dGVuc2lvbl9fICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3Rh bnRfcCAobmFtZSkgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKCpjdXJyZW50KSAmJiAoX19zMV9s ZW4gPSBzdHJsZW4gKG5hbWUpLCBfX3MyX2xlbiA9IHN0cmxlbiAoKmN1cnJlbnQpLCAoISgoc2l6 ZV90KShjb25zdCB2b2lkICopKChuYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShu YW1lKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICop KCgqY3VycmVudCkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKmN1cnJlbnQpID09IDEp IHx8IF9fczJfbGVuID49IDQpKSA/IG1lbWNtcCAoKF9fY29uc3QgY2hhciAqKSAobmFtZSksIChf X2NvbnN0IGNoYXIgKikgKCpjdXJyZW50KSwgKF9fczFfbGVuIDwgX19zMl9sZW4gPyBfX3MxX2xl biA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChuYW1lKSAmJiAoKHNp emVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKiko bmFtZSkgPT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVuIChuYW1lKSwgX19zMV9sZW4gPCA0KSA/ IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKmN1cnJlbnQpICYmICgoc2l6ZV90KShjb25zdCB2b2lk ICopKCgqY3VycmVudCkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKmN1cnJlbnQpID09 IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVswXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoKmN1cnJlbnQpKVswXSk7IGlmIChf X3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMV0gLSAoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgqY3VycmVudCkpWzFdKTsgaWYgKF9fczFf bGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsyXSAtICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCpjdXJyZW50KSlbMl0pOyBpZiAoX19zMV9sZW4g PiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKCpjdXJyZW50KSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6 IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMiA9IChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKmN1cnJlbnQpOyByZWdpc3RlciBp bnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAobmFtZSkpWzBdIC0gX19zMlswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0g MCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopIChuYW1lKSlbMV0gLSBfX3MyWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9 PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKG5hbWUpKVsyXSAtIF9fczJbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0 ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKG5hbWUpKVszXSAtIF9fczJbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiAoX19idWls dGluX2NvbnN0YW50X3AgKCpjdXJyZW50KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKmN1 cnJlbnQpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCpjdXJyZW50KSA9PSAxKSAmJiAo X19zMl9sZW4gPSBzdHJsZW4gKCpjdXJyZW50KSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5f Y29uc3RhbnRfcCAobmFtZSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKG5hbWUpICsgMSkg LSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5hbWUpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsg cmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKG5hbWUpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikoKmN1cnJlbnQpKVswXSk7IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQg PT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopIChuYW1lKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopICgqY3VycmVudCkpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAw KSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKG5hbWUpKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCpjdXJyZW50KSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9f cmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5h bWUpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCpj dXJyZW50KSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29u c3QgdW5zaWduZWQgY2hhciAqX19zMSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAobmFtZSk7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9IF9fczFbMF0gLSAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgqY3VycmVudCkpWzBdOyBp ZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsxXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCpjdXJyZW50KSlb MV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19z MVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCpjdXJy ZW50KSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0g KF9fczFbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgq Y3VycmVudCkpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogc3RyY21wIChuYW1lLCAqY3VycmVu dCkpKSk7IH0pKSByZXR1cm4gY19lcnJubyA9IDEwOwogICAgICAgIH0gd2hpbGUgKCorK2N1cnJl bnQpOwoKICAgICAgICBpZiAoY19maW5kX2lkZW50KCpsaXN0LCBnbG9iYWxzLCBuYW1lKSkgcmV0 dXJuIGNfZXJybm8gPSA5OwoKICAgICAgICBsYXN0ID0gKmxpc3Q7CiAgICAgICAgKmxpc3QgPSAo c3RydWN0IGNfaWRlbnQgKiltZW1fYWxsb2Moc2l6ZW9mKHN0cnVjdCBjX2lkZW50KSk7CiAgICAg ICAgKCpsaXN0KS0+bmV4dCA9IGxhc3Q7CiAgICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRp bl9jb25zdGFudF9wIChuYW1lKSA/ICgoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkgKyAx KSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikobmFtZSkgPT0gMSkgJiYgc3RybGVuIChuYW1lKSAr IDEgPD0gOCA/IF9fc3RyY3B5X3NtYWxsICgoKmxpc3QpLT5uYW1lID0gKGNoYXIgKiltZW1fYWxs b2Moc3RybGVuKG5hbWUpICsgMSksIF9fZXh0ZW5zaW9uX18gKCgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVswICsgMV0gPDwgOCB8ICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVswXSksIF9fZXh0ZW5zaW9u X18gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVs0 ICsgMV0gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KG5hbWUpKVs0XSksIF9fZXh0ZW5zaW9uX18gKCgoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzAgKyAzXSA8PCA4IHwgKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzAgKyAyXSkgPDwgOCB8ICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVswICsgMV0pIDw8IDgg fCAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMF0p LCBfX2V4dGVuc2lvbl9fICgoKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKG5hbWUpKVs0ICsgM10gPDwgOCB8ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKG5hbWUpKVs0ICsgMl0pIDw8IDggfCAoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbNCArIDFdKSA8PCA4IHwgKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzRdKSwgc3RybGVuIChu YW1lKSArIDEpIDogKGNoYXIgKikgbWVtY3B5ICgoKmxpc3QpLT5uYW1lID0gKGNoYXIgKiltZW1f YWxsb2Moc3RybGVuKG5hbWUpICsgMSksIG5hbWUsIHN0cmxlbiAobmFtZSkgKyAxKSkgOiBzdHJj cHkgKCgqbGlzdCktPm5hbWUgPSAoY2hhciAqKW1lbV9hbGxvYyhzdHJsZW4obmFtZSkgKyAxKSwg bmFtZSkpKTsKICAgICAgICAoKmxpc3QpLT5hZGRyID0gYWRkcjsKCiAgICAgICAgcmV0dXJuIGNf ZXJybm87Cn0KCnN0YXRpYyB2b2lkIGNfZnJlZV9pZGVudChzdHJ1Y3QgY19pZGVudCAqbGlzdCwg c3RydWN0IGNfaWRlbnQgKmdsb2JhbHMpCnsKICAgICAgICBzdHJ1Y3QgY19pZGVudCAqY3VycmVu dDsKCiAgICAgICAgd2hpbGUgKChjdXJyZW50ID0gbGlzdCkgIT0gZ2xvYmFscykgewogICAgICAg ICAgICAgICAgbGlzdCA9IGxpc3QtPm5leHQ7CiAgICAgICAgICAgICAgICBtZW1fZnJlZSgodm9p ZCAqKikmY3VycmVudC0+bmFtZSk7CiAgICAgICAgICAgICAgICBtZW1fZnJlZSgodm9pZCAqKikm Y3VycmVudCk7CiAgICAgICAgfQp9CgpzdGF0aWMgaW50IGNfZmluZF9vcChjaGFyICp0b2tlbiwg aW50IGxlZnQpCnsKICAgICAgICBpbnQgYmVzdCA9IC0xOwogICAgICAgIGludCBvcCA9IDA7Cgog ICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGlmICgoY19vcHNbb3BdLmNsYXNzICE9IDEgJiYg bGVmdCkgfHwKICAgICAgICAgICAgICAgICAgICAoY19vcHNbb3BdLmNsYXNzID09IDEgJiYgIWxl ZnQpKQogICAgICAgICAgICAgICAgaWYgKCFtZW1jbXAoY19vcHNbb3BdLm5hbWUsIHRva2VuLCBz dHJsZW4oY19vcHNbb3BdLm5hbWUpKSkKICAgICAgICAgICAgICAgIGlmIChiZXN0IDwgMCB8fAog ICAgICAgICAgICAgICAgICAgIHN0cmxlbihjX29wc1tvcF0ubmFtZSkgPiBzdHJsZW4oY19vcHNb YmVzdF0ubmFtZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3QgPSBvcDsKICAgICAgICB9 IHdoaWxlIChjX29wc1srK29wXS5wcmVjKTsKCiAgICAgICAgcmV0dXJuIGJlc3Q7Cn0KCnN0YXRp YyB2b2lkIGNfZnJlZV9maXh1cChzdHJ1Y3QgY19maXh1cCAqbGlzdCwgdW5pb24gY19pbnNuICpw YykKewogICAgICAgIHN0cnVjdCBjX2ZpeHVwICpjdXJyZW50OwoKICAgICAgICB3aGlsZSAoKGN1 cnJlbnQgPSBsaXN0KSkgewogICAgICAgICAgICAgICAgaWYgKGNfcGFzcykKICAgICAgICAgICAg ICAgICAgICAgICAgY3VycmVudC0+cGMtPnBjID0gcGM7CgogICAgICAgICAgICAgICAgbGlzdCA9 IGxpc3QtPm5leHQ7CiAgICAgICAgICAgICAgICBtZW1fZnJlZSgodm9pZCAqKikmY3VycmVudCk7 CiAgICAgICAgfQp9CgpzdGF0aWMgdm9pZCAoKmNfb3BfcmV0dXJuKSh2b2lkKTsKc3RhdGljIHZv aWQgKCpjX29wX2J6KSh2b2lkKTsKc3RhdGljIHZvaWQgKCpjX29wX2JhKSh2b2lkKTsKc3RhdGlj IHZvaWQgKCpjX29wX3B1c2hfaW1tKSh2b2lkKTsKc3RhdGljIHZvaWQgKCpjX29wX3B1c2hfbWVt KSh2b2lkKTsKc3RhdGljIHZvaWQgKCpjX29wX3BvcCkodm9pZCk7CgpzdGF0aWMgdm9pZCAoKmNf b3BfcHVzaF9pbW1faW1tKSh2b2lkKTsKc3RhdGljIHZvaWQgKCpjX29wX3B1c2hfaW1tX21lbSko dm9pZCk7CnN0YXRpYyB2b2lkICgqY19vcF9wdXNoX21lbV9pbW0pKHZvaWQpOwpzdGF0aWMgdm9p ZCAoKmNfb3BfcHVzaF9tZW1fbWVtKSh2b2lkKTsKCnN0YXRpYyB2b2lkICgqY19wdXNoCiAgICAg ICAgKHZvaWQgKCpsYXN0KSh2b2lkKSwgdm9pZCAoKm9wKSh2b2lkKSwgdW5pb24gY19pbnNuICp2 YWx1ZSkpKHZvaWQpCnsKICAgICAgICBpZiAobGFzdCA9PSBjX29wX3B1c2hfaW1tIHx8IGxhc3Qg PT0gY19vcF9wdXNoX21lbSkgewogICAgICAgICAgICAgICAgaWYgKGxhc3QgPT0gY19vcF9wdXNo X2ltbSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPT0gY19vcF9wdXNoX2ltbSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gY19vcF9wdXNoX2ltbV9pbW07 CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsYXN0ID0gY19vcF9wdXNoX2ltbV9tZW07CiAgICAgICAgICAgICAgICB9IGVsc2Ugewog ICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPT0gY19vcF9wdXNoX2ltbSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gY19vcF9wdXNoX21lbV9pbW07CiAgICAgICAg ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0 ID0gY19vcF9wdXNoX21lbV9tZW07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg aWYgKGNfcGFzcykgewogICAgICAgICAgICAgICAgICAgICAgICAoY19jb2RlX3B0ciAtIDIpLT5v cCA9IGxhc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICpjX2NvZGVfcHRyID0gKnZhbHVlOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY19jb2RlX3B0cisrOwogICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICAgICBsYXN0ID0gb3A7CgogICAgICAgICAgICAgICAgaWYgKGNf cGFzcykgewogICAgICAgICAgICAgICAgICAgICAgICAoY19jb2RlX3B0cisrKS0+b3AgPSBvcDsK ICAgICAgICAgICAgICAgICAgICAgICAgKmNfY29kZV9wdHIrKyA9ICp2YWx1ZTsKICAgICAgICAg ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBjX2NvZGVfcHRyICs9IDI7CiAg ICAgICAgfQoKICAgICAgICByZXR1cm4gbGFzdDsKfQoKc3RhdGljIGludCBjX2Jsb2NrKGNoYXIg dGVybSwgc3RydWN0IGNfaWRlbnQgKnZhcnMpOwoKc3RhdGljIGludCBjX2RlZmluZShjaGFyIHRl cm0sIHN0cnVjdCBjX2lkZW50ICoqdmFycywgc3RydWN0IGNfaWRlbnQgKmdsb2JhbHMpCnsKICAg ICAgICBjaGFyICp0b2tlbjsKICAgICAgICBjaGFyIGM7CiAgICAgICAgaW50IHNpemU7CgogICAg ICAgIGNfZXhwZWN0KCcgJyk7CiAgICAgICAgdG9rZW4gPSBjX2dldHRva2VuKCk7CiAgICAgICAg aWYgKCEoY19pc2lkZW50WygodW5zaWduZWQgaW50KSh1bnNpZ25lZCBjaGFyKSgqdG9rZW4pKV0g JiYgKCgqdG9rZW4pIDwgJzAnIHx8ICgqdG9rZW4pID4gJzknKSkpIGNfZXJybm8gPSAyOwoKICAg ICAgICBkbwogICAgICAgIGlmICgqdG9rZW4gIT0gJyAnKSB7CiAgICAgICAgICAgICAgICBpZiAo IShjX2lzaWRlbnRbKCh1bnNpZ25lZCBpbnQpKHVuc2lnbmVkIGNoYXIpKCp0b2tlbikpXSAmJiAo KCp0b2tlbikgPCAnMCcgfHwgKCp0b2tlbikgPiAnOScpKSkgY19lcnJubyA9IDI7CiAgICAgICAg ICAgICAgICBpZiAoY19lcnJubykgcmV0dXJuIGNfZXJybm87CgogICAgICAgICAgICAgICAgaWYg KChjID0gY19za2lwX3NwYWNlKCkpID09ICcoJykgewogICAgICAgICAgICAgICAgICAgICAgICBp ZiAodGVybSkgcmV0dXJuIGNfZXJybm8gPSAxMjsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlm IChjX2FsbG9jX2lkZW50KCZjX2Z1bmNzLCAoKHZvaWQgKikwKSwgdG9rZW4sIGNfY29kZV9wdHIp KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjX2Vycm5vOwoKICAgICAg ICAgICAgICAgICAgICAgICAgY19leHBlY3QoJyknKTsKICAgICAgICAgICAgICAgICAgICAgICAg aWYgKGNfZXhwZWN0KCd7JykpIHJldHVybiBjX2Vycm5vOwoKICAgICAgICAgICAgICAgICAgICAg ICAgY19ibG9jaygnfScsICp2YXJzKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjX3Bh c3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY19jb2RlX3B0ci0+b3AgPSBjX29w X3JldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgY19jb2RlX3B0cisrOwoKICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg ICAgICAgICAgICAgICBpZiAoY19hbGxvY19pZGVudCh2YXJzLCBnbG9iYWxzLCB0b2tlbiwgY19k YXRhX3B0cisrKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY19lcnJu bzsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICdbJykgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemUgPSBjX2dldGludChjX2dldHRva2VuKCkpOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjX2Vycm5vKSByZXR1cm4gY19lcnJubzsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiAweDEw MDAwMDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY19l cnJubyA9IDY7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfZGF0YV9wdHIgKz0g c2l6ZSAtIDE7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjX2RhdGFfcHRy IC0gY19kYXRhX3N0YXJ0ID4gMHg4MDAwMDAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIGNfZXJybm8gPSA3OwoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjX2V4cGVjdCgnXScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMg PSBjX3NraXBfc3BhY2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGMgPT0gJzsnKSBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg aWYgKGMgIT0gJywnKSBjX2Vycm5vID0gMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9IHdo aWxlICghY19lcnJubyAmJiAqKHRva2VuID0gY19nZXR0b2tlbigpKSAhPSAnOycpOwoKICAgICAg ICByZXR1cm4gY19lcnJubzsKfQoKc3RhdGljIGludCBjX2V4cHIoY2hhciB0ZXJtLCBzdHJ1Y3Qg Y19pZGVudCAqdmFycywgY2hhciAqdG9rZW4pCnsKICAgICAgICBjaGFyIGM7CiAgICAgICAgc3Ry dWN0IGNfaWRlbnQgKnZhcjsKICAgICAgICBpbnQgbG9va2FoZWFkLCBvcDsKICAgICAgICBzdHJ1 Y3QgY19vcCAqb3AxLCAqb3AyOwogICAgICAgIHVuaW9uIGNfaW5zbiB2YWx1ZTsKICAgICAgICBp bnQgc3RhY2tbMHgxMDBdOwogICAgICAgIGludCBzcCA9IDA7CiAgICAgICAgaW50IGJhbGFuY2Ug PSAtMTsKICAgICAgICBpbnQgbGVmdCA9IDA7CiAgICAgICAgdm9pZCAoKmxhc3QpKHZvaWQpID0g KHZvaWQgKCopKHZvaWQpKTA7CgogICAgICAgIGlmICh0ZXJtID09ICcpJykgc3RhY2tbc3ArK10g PSAtMTsKICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICBjID0gKnRva2VuOwoKICAgICAgICAg ICAgICAgIGlmIChjID09ICcpJyB8fCBjID09ICddJyB8fCBjID09ICc7JyB8fCBjID09IHRlcm0p IHsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHNwKSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHN0YWNrWy0tc3BdIDwgMCkgYnJlYWs7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGNfb3BzW3N0YWNrW3NwXV0uY2xhc3MgPT0gMCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhbGFuY2UtLTsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IGNfb3BzW3N0YWNrW3NwXV0ub3A7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNfcGFzcykKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNfY29kZV9wdHItPm9wID0gbGFzdDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjX2NvZGVfcHRyKys7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmICghc3RhY2tbc3BdKSBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQoK ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjID09ICcpJyAmJiBzdGFja1tzcF0gPj0gMCkg fHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjID09ICddJyAmJiBzdGFja1tzcF0pIHx8 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGMgPT0gJzsnIHx8ICh0ZXJtICE9ICcpJyAm JiBjID09IHRlcm0pKSAmJiBzcCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY19l cnJubyA9IDM7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjX2Vycm5vIHx8ICghc3AgJiYg YyA9PSB0ZXJtKSkgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gMTsKICAg ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgaWYgKChjID49ICcwJyAmJiBjIDw9 ICc5JykgfHwgYyA9PSAnXCcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmltbSA9 IGNfZ2V0aW50KHRva2VuKTsKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IGNfcHVzaChs YXN0LCBjX29wX3B1c2hfaW1tLCAmdmFsdWUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgbGVm dCA9IDE7IGJhbGFuY2UrKzsKICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg aWYgKGMgPT0gJygnIHx8IGMgPT0gJ1snKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz cCA+PSAweDEwMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX2Vycm5vID0gNTsK ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0YWNrW3NwKytdID0gKGMgPT0gJygnKSA/IC0xIDogMDsKCiAgICAgICAgICAgICAgICAg ICAgICAgIGxlZnQgPSAwOwogICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICBp ZiAoYyAhPSAnICcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNfaXNpZGVudFsoKHVu c2lnbmVkIGludCkodW5zaWduZWQgY2hhcikoYykpXSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2YXIgPSBjX2ZpbmRfaWRlbnQodmFycywgKCh2b2lkICopMCksIHRva2VuKTsKICAg ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZhciA9ICgodm9pZCAqKTApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcikgewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLm1lbSA9IHZhci0+YWRkcjsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gY19wdXNoKGxhc3QsIGNfb3BfcHVz aF9tZW0sICZ2YWx1ZSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSAx OyBiYWxhbmNlKys7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKChsb29rYWhlYWQgPSAhdG9rZW5bMV0pKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlblsxXSA9IGNfZ2V0Y2hhcigw KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuWzJdID0gY19n ZXRjaGFyKDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5b M10gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKChvcCA9IGNfZmluZF9vcCh0b2tlbiwgbGVmdCkpIDwgMCkg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNfaXNpZGVudFso KHVuc2lnbmVkIGludCkodW5zaWduZWQgY2hhcikoYykpXSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY19lcnJubyA9IDE7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNfZXJybm8gPSAyOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIGNfZXJybm87CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9va2FoZWFkKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJsZW4oY19vcHNbb3BdLm5hbWUp IDwgMykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY191bmdldGNo YXIodG9rZW5bMl0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KCFjX29wc1tvcF0ubmFtZVsxXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY191bmdldGNoYXIodG9rZW5bMV0pOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AxID0gJmNfb3Bz W29wXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc3AgJiYgc3RhY2tb c3AgLSAxXSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv cDIgPSAmY19vcHNbc3RhY2tbc3AgLSAxXV07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKG9wMi0+ZGlyID09IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAob3AyLT5wcmVjIDw9IG9wMS0+cHJlYykgYnJlYWs7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wMi0+ZGlyID09IDApCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AyLT5wcmVjIDwgb3AxLT5w cmVjKSBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo b3AyLT5jbGFzcyA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBiYWxhbmNlLS07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGFzdCA9IG9wMi0+b3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoY19wYXNzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjX2NvZGVfcHRyLT5vcCA9IGxhc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjX2NvZGVfcHRyKys7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3AtLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcCA+PSAweDEwMCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNfZXJybm8gPSA1OwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RhY2tbc3ArK10gPSBvcDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsZWZ0ID0gb3AxLT5jbGFzcyA9PSAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAg ICAgICAgICAgIGlmIChjX2Vycm5vIHx8IGMgPT0gJzsnIHx8IChjID09IHRlcm0gJiYgYyAhPSAn KScpKSBicmVhazsKICAgICAgICAgICAgICAgIHRva2VuID0gY19nZXR0b2tlbigpOwogICAgICAg IH0gd2hpbGUgKCFjX2Vycm5vKTsKCiAgICAgICAgaWYgKGNfZXJybm8pIHJldHVybiBjX2Vycm5v OwoKICAgICAgICBpZiAoc3AgfHwgYmFsYW5jZSkgY19lcnJubyA9IDM7CgogICAgICAgIGlmIChj X3Bhc3MpCiAgICAgICAgICAgICAgICBjX2NvZGVfcHRyLT5vcCA9IGNfb3BfcG9wOwogICAgICAg IGNfY29kZV9wdHIrKzsKCiAgICAgICAgaWYgKCF0ZXJtICYmICFjX2Vycm5vKSBjX2Vycm5vID0g MTE7CiAgICAgICAgaWYgKCp0b2tlbiA9PSB0ZXJtKSByZXR1cm4gLTE7CgogICAgICAgIHJldHVy biBjX2Vycm5vOwp9CgpzdGF0aWMgaW50IGNfY29uZChjaGFyIHRlcm0sIHN0cnVjdCBjX2lkZW50 ICp2YXJzLCBjaGFyICp0b2tlbikKewogICAgICAgIGNoYXIgYzsKICAgICAgICBjaGFyICpwb3M7 CiAgICAgICAgdW5pb24gY19pbnNuICpzdGFydCwgKm91dCwgKmZpeHVwOwoKICAgICAgICBpZiAo IXRlcm0pIHJldHVybiBjX2Vycm5vID0gMTE7CgogICAgICAgIGMgPSAqdG9rZW47CiAgICAgICAg c3RhcnQgPSBjX2NvZGVfcHRyOwoKICAgICAgICBpZiAoY19leHBlY3QoJygnKSkgcmV0dXJuIGNf ZXJybm87CiAgICAgICAgc3dpdGNoIChjX2V4cHIoJyknLCB2YXJzLCBjX2dldHRva2VuKCkpKSB7 CiAgICAgICAgY2FzZSAtMToKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDA6 CiAgICAgICAgICAgICAgICBjX2Vycm5vID0gMjsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAg ICAgICAgIHJldHVybiBjX2Vycm5vOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNfcGFzcykKICAg ICAgICAgICAgICAgIChjX2NvZGVfcHRyIC0gMSktPm9wID0gY19vcF9iejsKICAgICAgICBmaXh1 cCA9IGNfY29kZV9wdHIrKzsKCiAgICAgICAgb3V0ID0gY19sb29wX3N0YXJ0OwogICAgICAgIGlm IChjID09ICd3JykKICAgICAgICAgICAgICAgIGNfbG9vcF9zdGFydCA9IHN0YXJ0OwoKICAgICAg ICBpZiAoY19ibG9jaygnOycsIHZhcnMpKSByZXR1cm4gY19lcnJubzsKCiAgICAgICAgaWYgKGMg PT0gJ3cnKSB7CiAgICAgICAgICAgICAgICBjX2xvb3Bfc3RhcnQgPSBvdXQ7CgogICAgICAgICAg ICAgICAgaWYgKGNfcGFzcykgewogICAgICAgICAgICAgICAgICAgICAgICAoY19jb2RlX3B0cisr KS0+b3AgPSBjX29wX2JhOwogICAgICAgICAgICAgICAgICAgICAgICAoY19jb2RlX3B0cisrKS0+ cGMgPSBzdGFydDsKICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAg ICBjX2NvZGVfcHRyICs9IDI7CgogICAgICAgICAgICAgICAgY19mcmVlX2ZpeHVwKGNfYnJlYWtf Zml4dXBzLCBjX2NvZGVfcHRyKTsKICAgICAgICAgICAgICAgIGNfYnJlYWtfZml4dXBzID0gKCh2 b2lkICopMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHdoaWxlICgqKHRva2Vu ID0gY19nZXR0b2tlbigpKSA9PSAnICcpCiAgICAgICAgICAgICAgICBpZiAoY19lcnJubykgcmV0 dXJuIGNfZXJybm87CgogICAgICAgICAgICAgICAgaWYgKCFfX2V4dGVuc2lvbl9fICh7IHNpemVf dCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAodG9rZW4pICYmIF9f YnVpbHRpbl9jb25zdGFudF9wICgiZWxzZSIpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAodG9rZW4p LCBfX3MyX2xlbiA9IHN0cmxlbiAoImVsc2UiKSwgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgo dG9rZW4pICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHRva2VuKSA9PSAxKSB8fCBfX3Mx X2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiZWxzZSIpICsgMSkgLSAo c2l6ZV90KShjb25zdCB2b2lkICopKCJlbHNlIikgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8g bWVtY21wICgoX19jb25zdCBjaGFyICopICh0b2tlbiksIChfX2NvbnN0IGNoYXIgKikgKCJlbHNl IiksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikgKyAxKSA6IChf X2J1aWx0aW5fY29uc3RhbnRfcCAodG9rZW4pICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCh0 b2tlbikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikodG9rZW4pID09IDEpICYmIChfX3Mx X2xlbiA9IHN0cmxlbiAodG9rZW4pLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFu dF9wICgiZWxzZSIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiZWxzZSIpICsgMSkgLSAo c2l6ZV90KShjb25zdCB2b2lkICopKCJlbHNlIikgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyBy ZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAodG9rZW4pKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikoImVsc2UiKSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09 IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAodG9rZW4pKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKCJlbHNlIikpWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7 IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KHRva2VuKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICgiZWxzZSIpKVsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1 bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9rZW4p KVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJlbHNl IikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKCJlbHNlIik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzBdIC0gX19zMlswXSk7IGlmIChf X3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzFdIC0gX19zMlsxXSk7IGlm IChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzJdIC0gX19zMlsyXSk7 IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9rZW4pKVszXSAtIF9fczJbM10p OyB9IH0gX19yZXN1bHQ7IH0pKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCJlbHNlIikgJiYg KChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJlbHNlIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZv aWQgKikoImVsc2UiKSA9PSAxKSAmJiAoX19zMl9sZW4gPSBzdHJsZW4gKCJlbHNlIiksIF9fczJf bGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKHRva2VuKSAmJiAoKHNpemVfdCkoY29u c3Qgdm9pZCAqKSgodG9rZW4pICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHRva2VuKSA9 PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzBdIC0gKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSgiZWxzZSIpKVswXSk7IGlmIChf X3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzFdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImVsc2UiKSlbMV0pOyBpZiAoX19zMl9s ZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9rZW4pKVsyXSAtICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJlbHNlIikpWzJdKTsgaWYgKF9fczJfbGVuID4g MiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoImVsc2UiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChf X2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMSA9IChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9rZW4pOyByZWdpc3RlciBpbnQgX19y ZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoImVsc2UiKSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBf X3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoImVsc2UiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDAp IHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKCJlbHNlIikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9 PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoImVsc2UiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAg KHRva2VuLCAiZWxzZSIpKSkpOyB9KSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY19w YXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNfY29kZV9wdHIrKyktPm9w ID0gY19vcF9iYTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXh1cC0+cGMgPSBj X2NvZGVfcHRyICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXh1cCA9IGNf Y29kZV9wdHIrKzsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY19jb2RlX3B0ciArPSAyOwoKICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGNfYmxvY2soJzsnLCB2YXJzKSkgcmV0dXJuIGNfZXJybm87CiAgICAgICAgICAgICAg ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSB0b2tlbiArIHN0cmxlbih0 b2tlbik7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPiB0b2tlbikgY191bmdl dGNoYXIoKi0tcG9zKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChj X3Bhc3MpCiAgICAgICAgICAgICAgICBmaXh1cC0+cGMgPSBjX2NvZGVfcHRyOwogICAgICAgIGNf dW5nZXRjaGFyKCc7Jyk7CgogICAgICAgIHJldHVybiBjX2Vycm5vOwp9CgpzdGF0aWMgaW50IGNf Y29udGludWUodm9pZCkKewogICAgICAgIGlmICghY19sb29wX3N0YXJ0KSByZXR1cm4gY19lcnJu byA9IDE0OwoKICAgICAgICBpZiAoY19wYXNzKSB7CiAgICAgICAgICAgICAgICAoY19jb2RlX3B0 cisrKS0+b3AgPSBjX29wX2JhOwogICAgICAgICAgICAgICAgKGNfY29kZV9wdHIrKyktPnBjID0g Y19sb29wX3N0YXJ0OwogICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgY19jb2RlX3B0ciAr PSAyOwoKICAgICAgICBjX2V4cGVjdCgnOycpOwogICAgICAgIGNfdW5nZXRjaGFyKCc7Jyk7Cgog ICAgICAgIHJldHVybiBjX2Vycm5vOwp9CgpzdGF0aWMgaW50IGNfYnJlYWsodm9pZCkKewogICAg ICAgIHN0cnVjdCBjX2ZpeHVwICpmaXh1cDsKCiAgICAgICAgaWYgKCFjX2xvb3Bfc3RhcnQpIHJl dHVybiBjX2Vycm5vID0gMTQ7CgogICAgICAgIGNfZXhwZWN0KCc7Jyk7CiAgICAgICAgY191bmdl dGNoYXIoJzsnKTsKCiAgICAgICAgZml4dXAgPSBjX2JyZWFrX2ZpeHVwczsKICAgICAgICBjX2Jy ZWFrX2ZpeHVwcyA9CiAgICAgICAgICAgICAgICAoc3RydWN0IGNfZml4dXAgKiltZW1fYWxsb2Mo c2l6ZW9mKHN0cnVjdCBjX2ZpeHVwKSk7CiAgICAgICAgY19icmVha19maXh1cHMtPm5leHQgPSBm aXh1cDsKCiAgICAgICAgaWYgKGNfcGFzcykKICAgICAgICAgICAgICAgIGNfY29kZV9wdHItPm9w ID0gY19vcF9iYTsKICAgICAgICBjX2JyZWFrX2ZpeHVwcy0+cGMgPSBjX2NvZGVfcHRyICsgMTsK ICAgICAgICBjX2NvZGVfcHRyICs9IDI7CgogICAgICAgIHJldHVybiBjX2Vycm5vOwp9CgpzdGF0 aWMgaW50IGNfcmV0dXJuKGNoYXIgdGVybSkKewogICAgICAgIGlmICghdGVybSkgcmV0dXJuIGNf ZXJybm8gPSAxMTsKCiAgICAgICAgaWYgKGNfcGFzcykKICAgICAgICAgICAgICAgIGNfY29kZV9w dHItPm9wID0gY19vcF9yZXR1cm47CiAgICAgICAgY19jb2RlX3B0cisrOwoKICAgICAgICBjX2V4 cGVjdCgnOycpOwogICAgICAgIGNfdW5nZXRjaGFyKCc7Jyk7CgogICAgICAgIHJldHVybiBjX2Vy cm5vOwp9CgpzdGF0aWMgaW50IGNfYmxvY2soY2hhciB0ZXJtLCBzdHJ1Y3QgY19pZGVudCAqdmFy cykKewogICAgICAgIHN0cnVjdCBjX2lkZW50ICpsb2NhbHMgPSB2YXJzOwogICAgICAgIGNoYXIg KnRva2VuOwoKICAgICAgICB3aGlsZSAoKih0b2tlbiA9IGNfZ2V0dG9rZW4oKSkgIT0gdGVybSkg ewogICAgICAgICAgICAgICAgaWYgKGNfZXJybm8pIHsKICAgICAgICAgICAgICAgICAgICAgICAg aWYgKCF0ZXJtICYmIGNfZXJybm8gPT0gMTUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY19lcnJubyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCp0b2tlbiA9PSAnICcpIGNvbnRpbnVlOwoKICAg ICAgICAgICAgICAgIGlmICgqdG9rZW4gPT0gJ3snKSB7CiAgICAgICAgICAgICAgICAgICAgICAg IGlmICghdGVybSkgcmV0dXJuIGNfZXJybm8gPSAxMTsKCiAgICAgICAgICAgICAgICAgICAgICAg IGlmICh0ZXJtID09ICc7JykgdGVybSA9ICd9JzsgZWxzZQogICAgICAgICAgICAgICAgICAgICAg ICBpZiAoY19ibG9jaygnfScsIGxvY2FscykpIGJyZWFrOyBlbHNlIGNvbnRpbnVlOwogICAgICAg ICAgICAgICAgfSBlbHNlCgogICAgICAgICAgICAgICAgaWYgKCFfX2V4dGVuc2lvbl9fICh7IHNp emVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAodG9rZW4pICYm IF9fYnVpbHRpbl9jb25zdGFudF9wICgidm9pZCIpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAodG9r ZW4pLCBfX3MyX2xlbiA9IHN0cmxlbiAoInZvaWQiKSwgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAq KSgodG9rZW4pICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHRva2VuKSA9PSAxKSB8fCBf X3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgidm9pZCIpICsgMSkg LSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJ2b2lkIikgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkp ID8gbWVtY21wICgoX19jb25zdCBjaGFyICopICh0b2tlbiksIChfX2NvbnN0IGNoYXIgKikgKCJ2 b2lkIiksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikgKyAxKSA6 IChfX2J1aWx0aW5fY29uc3RhbnRfcCAodG9rZW4pICYmICgoc2l6ZV90KShjb25zdCB2b2lkICop KCh0b2tlbikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikodG9rZW4pID09IDEpICYmIChf X3MxX2xlbiA9IHN0cmxlbiAodG9rZW4pLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25z dGFudF9wICgidm9pZCIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgidm9pZCIpICsgMSkg LSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJ2b2lkIikgPT0gMSkgPyAoX19leHRlbnNpb25fXyAo eyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAodG9rZW4pKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikoInZvaWQiKSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAodG9rZW4pKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKCJ2b2lkIikpWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAw KSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKHRva2VuKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopICgidm9pZCIpKVsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19y ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9r ZW4pKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJ2 b2lkIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKCJ2b2lkIik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzBdIC0gX19zMlswXSk7IGlm IChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzFdIC0gX19zMlsxXSk7 IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzJdIC0gX19zMlsy XSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9rZW4pKVszXSAtIF9fczJb M10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCJ2b2lkIikg JiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJ2b2lkIikgKyAxKSAtIChzaXplX3QpKGNvbnN0 IHZvaWQgKikoInZvaWQiKSA9PSAxKSAmJiAoX19zMl9sZW4gPSBzdHJsZW4gKCJ2b2lkIiksIF9f czJfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKHRva2VuKSAmJiAoKHNpemVfdCko Y29uc3Qgdm9pZCAqKSgodG9rZW4pICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHRva2Vu KSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzBdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSgidm9pZCIpKVswXSk7IGlm IChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzFdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoInZvaWQiKSlbMV0pOyBpZiAoX19z Ml9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9rZW4pKVsyXSAtICgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJ2b2lkIikpWzJdKTsgaWYgKF9fczJfbGVu ID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoInZvaWQiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6 IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMSA9IChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9rZW4pOyByZWdpc3RlciBpbnQg X19yZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoInZvaWQiKSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkg eyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoInZvaWQiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09 IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCJ2b2lkIikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3Vs dCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoInZvaWQiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJj bXAgKHRva2VuLCAidm9pZCIpKSkpOyB9KSB8fCAhX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19z MV9sZW4sIF9fczJfbGVuOyAoX19idWlsdGluX2NvbnN0YW50X3AgKHRva2VuKSAmJiBfX2J1aWx0 aW5fY29uc3RhbnRfcCAoImludCIpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAodG9rZW4pLCBfX3My X2xlbiA9IHN0cmxlbiAoImludCIpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCh0b2tlbikg KyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikodG9rZW4pID09IDEpIHx8IF9fczFfbGVuID49 IDQpICYmICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJpbnQiKSArIDEpIC0gKHNpemVfdCko Y29uc3Qgdm9pZCAqKSgiaW50IikgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgo X19jb25zdCBjaGFyICopICh0b2tlbiksIChfX2NvbnN0IGNoYXIgKikgKCJpbnQiKSwgKF9fczFf bGVuIDwgX19zMl9sZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9j b25zdGFudF9wICh0b2tlbikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKHRva2VuKSArIDEp IC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSh0b2tlbikgPT0gMSkgJiYgKF9fczFfbGVuID0gc3Ry bGVuICh0b2tlbiksIF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKCJpbnQi KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImludCIpICsgMSkgLSAoc2l6ZV90KShjb25z dCB2b2lkICopKCJpbnQiKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBf X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0 b2tlbikpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSgi aW50IikpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0 ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRva2VuKSlb MV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiaW50Iikp WzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRva2VuKSlbMl0gLSAo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiaW50IikpWzJdKTsg aWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzNdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImludCIpKVszXSk7IH0gfSBfX3Jl c3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3My ID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiaW50Iik7IHJl Z2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopICh0b2tlbikpWzBdIC0gX19zMlswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19y ZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopICh0b2tlbikpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYg X19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICh0b2tlbikpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIg JiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAodG9rZW4pKVszXSAtIF9fczJbM10pOyB9IH0gX19yZXN1bHQ7IH0p KSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCJpbnQiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9p ZCAqKSgoImludCIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJpbnQiKSA9PSAxKSAm JiAoX19zMl9sZW4gPSBzdHJsZW4gKCJpbnQiKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5f Y29uc3RhbnRfcCAodG9rZW4pICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCh0b2tlbikgKyAx KSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikodG9rZW4pID09IDEpID8gKF9fZXh0ZW5zaW9uX18g KHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKHRva2VuKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopKCJpbnQiKSlbMF0pOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAodG9rZW4pKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKCJpbnQiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDAp IHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAodG9rZW4pKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCJpbnQiKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRva2Vu KSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiaW50 IikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKHRva2VuKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJpbnQiKSlbMF07IGlmIChfX3My X2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImludCIpKVsxXSk7IGlmIChf X3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzJdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImludCIpKVsyXSk7IGlm IChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJpbnQiKSlbM10pOyB9 IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKHRva2VuLCAiaW50IikpKSk7IH0pKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChjX2RlZmluZSh0ZXJtLCAmbG9jYWxzLCB2YXJzKSkgYnJl YWs7CiAgICAgICAgICAgICAgICB9IGVsc2UKCiAgICAgICAgICAgICAgICBpZiAoIV9fZXh0ZW5z aW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9w ICh0b2tlbikgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKCJpZiIpICYmIChfX3MxX2xlbiA9IHN0 cmxlbiAodG9rZW4pLCBfX3MyX2xlbiA9IHN0cmxlbiAoImlmIiksICghKChzaXplX3QpKGNvbnN0 IHZvaWQgKikoKHRva2VuKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSh0b2tlbikgPT0g MSkgfHwgX19zMV9sZW4gPj0gNCkgJiYgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImlmIikg KyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoImlmIikgPT0gMSkgfHwgX19zMl9sZW4gPj0g NCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopICh0b2tlbiksIChfX2NvbnN0IGNoYXIgKikg KCJpZiIpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDogX19zMl9sZW4pICsgMSkg OiAoX19idWlsdGluX2NvbnN0YW50X3AgKHRva2VuKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAq KSgodG9rZW4pICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHRva2VuKSA9PSAxKSAmJiAo X19zMV9sZW4gPSBzdHJsZW4gKHRva2VuKSwgX19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29u c3RhbnRfcCAoImlmIikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJpZiIpICsgMSkgLSAo c2l6ZV90KShjb25zdCB2b2lkICopKCJpZiIpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVn aXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKHRva2VuKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopKCJpZiIpKVswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkg eyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICh0b2tlbikpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoImlmIikpWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRva2Vu KSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiaWYi KSlbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRva2VuKSlbM10gLSAo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiaWYiKSlbM10pOyB9 IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hh ciAqX19zMiA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImlm Iik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICh0b2tlbikpWzBdIC0gX19zMlswXSk7IGlmIChfX3MxX2xlbiA+IDAg JiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+ IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xl biA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9rZW4pKVszXSAtIF9fczJbM10pOyB9IH0gX19yZXN1 bHQ7IH0pKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCJpZiIpICYmICgoc2l6ZV90KShjb25z dCB2b2lkICopKCgiaWYiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiaWYiKSA9PSAx KSAmJiAoX19zMl9sZW4gPSBzdHJsZW4gKCJpZiIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRp bl9jb25zdGFudF9wICh0b2tlbikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKHRva2VuKSAr IDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSh0b2tlbikgPT0gMSkgPyAoX19leHRlbnNpb25f XyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAodG9rZW4pKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikoImlmIikpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3Vs dCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKHRva2VuKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopICgiaWYiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDAp IHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAodG9rZW4pKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCJpZiIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1 bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9rZW4p KVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJpZiIp KVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNp Z25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopICh0b2tlbik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9IF9fczFbMF0gLSAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiaWYiKSlbMF07IGlmIChfX3MyX2xl biA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImlmIikpWzFdKTsgaWYgKF9fczJf bGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMl0gLSAoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiaWYiKSlbMl0pOyBpZiAoX19z Ml9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKF9fczFbM10gLSAoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiaWYiKSlbM10pOyB9IH0gX19y ZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKHRva2VuLCAiaWYiKSkpKTsgfSkgfHwgIV9fZXh0ZW5zaW9u X18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9wICh0 b2tlbikgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKCJ3aGlsZSIpICYmIChfX3MxX2xlbiA9IHN0 cmxlbiAodG9rZW4pLCBfX3MyX2xlbiA9IHN0cmxlbiAoIndoaWxlIiksICghKChzaXplX3QpKGNv bnN0IHZvaWQgKikoKHRva2VuKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSh0b2tlbikg PT0gMSkgfHwgX19zMV9sZW4gPj0gNCkgJiYgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIndo aWxlIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoIndoaWxlIikgPT0gMSkgfHwgX19z Ml9sZW4gPj0gNCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopICh0b2tlbiksIChfX2NvbnN0 IGNoYXIgKikgKCJ3aGlsZSIpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDogX19z Ml9sZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKHRva2VuKSAmJiAoKHNpemVfdCko Y29uc3Qgdm9pZCAqKSgodG9rZW4pICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHRva2Vu KSA9PSAxKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKHRva2VuKSwgX19zMV9sZW4gPCA0KSA/IChf X2J1aWx0aW5fY29uc3RhbnRfcCAoIndoaWxlIikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKiko KCJ3aGlsZSIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJ3aGlsZSIpID09IDEpID8g KF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRva2VuKSlbMF0gLSAoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKCJ3aGlsZSIpKVswXSk7IGlmIChfX3MxX2xl biA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIndoaWxlIikpWzFdKTsgaWYgKF9fczFfbGVuID4g MSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKHRva2VuKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopICgid2hpbGUiKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYm IF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKHRva2VuKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICgid2hpbGUiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4 dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMiA9IChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIndoaWxlIik7IHJlZ2lzdGVyIGludCBfX3Jl c3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tl bikpWzBdIC0gX19zMlswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBf X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0 b2tlbikpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkg eyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICh0b2tlbikpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0g MCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAodG9rZW4pKVszXSAtIF9fczJbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiAoX19idWlsdGlu X2NvbnN0YW50X3AgKCJ3aGlsZSIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgid2hpbGUi KSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgid2hpbGUiKSA9PSAxKSAmJiAoX19zMl9s ZW4gPSBzdHJsZW4gKCJ3aGlsZSIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFu dF9wICh0b2tlbikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKHRva2VuKSArIDEpIC0gKHNp emVfdCkoY29uc3Qgdm9pZCAqKSh0b2tlbikgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdp c3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAodG9rZW4pKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikoIndoaWxlIikpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAw KSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKHRva2VuKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopICgid2hpbGUiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsg X19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo dG9rZW4pKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCJ3aGlsZSIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1 bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9rZW4p KVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJ3aGls ZSIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1 bnNpZ25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopICh0b2tlbik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9IF9fczFbMF0gLSAoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgid2hpbGUiKSlbMF07IGlmIChf X3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIndoaWxlIikpWzFdKTsg aWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMl0g LSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgid2hpbGUiKSlb Ml0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKF9fczFb M10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgid2hpbGUi KSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKHRva2VuLCAid2hpbGUiKSkpKTsg fSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNfY29uZCh0ZXJtLCBsb2NhbHMsIHRv a2VuKSkgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UKCiAgICAgICAgICAgICAgICBpZiAo IV9fZXh0ZW5zaW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9j b25zdGFudF9wICh0b2tlbikgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKCJlbHNlIikgJiYgKF9f czFfbGVuID0gc3RybGVuICh0b2tlbiksIF9fczJfbGVuID0gc3RybGVuICgiZWxzZSIpLCAoISgo c2l6ZV90KShjb25zdCB2b2lkICopKCh0b2tlbikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQg KikodG9rZW4pID09IDEpIHx8IF9fczFfbGVuID49IDQpICYmICghKChzaXplX3QpKGNvbnN0IHZv aWQgKikoKCJlbHNlIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoImVsc2UiKSA9PSAx KSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNoYXIgKikgKHRva2VuKSwg KF9fY29uc3QgY2hhciAqKSAoImVsc2UiKSwgKF9fczFfbGVuIDwgX19zMl9sZW4gPyBfX3MxX2xl biA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICh0b2tlbikgJiYgKChz aXplX3QpKGNvbnN0IHZvaWQgKikoKHRva2VuKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAq KSh0b2tlbikgPT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVuICh0b2tlbiksIF9fczFfbGVuIDwg NCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKCJlbHNlIikgJiYgKChzaXplX3QpKGNvbnN0IHZv aWQgKikoKCJlbHNlIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoImVsc2UiKSA9PSAx KSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzBdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSgiZWxzZSIpKVswXSk7IGlmIChfX3Mx X2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzFdIC0gKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImVsc2UiKSlbMV0pOyBpZiAoX19zMV9sZW4g PiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9rZW4pKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJlbHNlIikpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAm JiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICh0b2tlbikpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoImVsc2UiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4 dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMiA9IChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImVsc2UiKTsgcmVnaXN0ZXIgaW50IF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRva2Vu KSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9f cmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRv a2VuKSlbMV0gLSBfX3MyWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7 IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KHRva2VuKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAw KSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICh0b2tlbikpWzNdIC0gX19zMlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5f Y29uc3RhbnRfcCAoImVsc2UiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImVsc2UiKSAr IDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiZWxzZSIpID09IDEpICYmIChfX3MyX2xlbiA9 IHN0cmxlbiAoImVsc2UiKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo dG9rZW4pICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCh0b2tlbikgKyAxKSAtIChzaXplX3Qp KGNvbnN0IHZvaWQgKikodG9rZW4pID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIg aW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKHRva2VuKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopKCJlbHNlIikpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9f cmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRv a2VuKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgi ZWxzZSIpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3Vs dCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikp WzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImVsc2Ui KSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRva2VuKSlbM10gLSAo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiZWxzZSIpKVszXSk7 IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBj aGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0 b2tlbik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9IF9fczFbMF0gLSAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiZWxzZSIpKVswXTsgaWYgKF9fczJfbGVuID4g MCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiZWxzZSIpKVsxXSk7IGlmIChfX3MyX2xl biA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzJdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImVsc2UiKSlbMl0pOyBpZiAoX19z Ml9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKF9fczFbM10gLSAoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiZWxzZSIpKVszXSk7IH0gfSBf X3Jlc3VsdDsgfSkpKSA6IHN0cmNtcCAodG9rZW4sICJlbHNlIikpKSk7IH0pKQogICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gY19lcnJubyA9IDEzOwogICAgICAgICAgICAgICAgZWxzZQoK ICAgICAgICAgICAgICAgIGlmICghX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9f czJfbGVuOyAoX19idWlsdGluX2NvbnN0YW50X3AgKHRva2VuKSAmJiBfX2J1aWx0aW5fY29uc3Rh bnRfcCAoImNvbnRpbnVlIikgJiYgKF9fczFfbGVuID0gc3RybGVuICh0b2tlbiksIF9fczJfbGVu ID0gc3RybGVuICgiY29udGludWUiKSwgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgodG9rZW4p ICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHRva2VuKSA9PSAxKSB8fCBfX3MxX2xlbiA+ PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiY29udGludWUiKSArIDEpIC0gKHNp emVfdCkoY29uc3Qgdm9pZCAqKSgiY29udGludWUiKSA9PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkg PyBtZW1jbXAgKChfX2NvbnN0IGNoYXIgKikgKHRva2VuKSwgKF9fY29uc3QgY2hhciAqKSAoImNv bnRpbnVlIiksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikgKyAx KSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAodG9rZW4pICYmICgoc2l6ZV90KShjb25zdCB2b2lk ICopKCh0b2tlbikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikodG9rZW4pID09IDEpICYm IChfX3MxX2xlbiA9IHN0cmxlbiAodG9rZW4pLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9j b25zdGFudF9wICgiY29udGludWUiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImNvbnRp bnVlIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoImNvbnRpbnVlIikgPT0gMSkgPyAo X19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9rZW4pKVswXSAtICgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoImNvbnRpbnVlIikpWzBdKTsgaWYgKF9fczFf bGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRva2VuKSlbMV0gLSAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiY29udGludWUiKSlbMV0pOyBpZiAoX19zMV9s ZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9rZW4pKVsyXSAtICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJjb250aW51ZSIpKVsyXSk7IGlmIChfX3MxX2xl biA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9rZW4pKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJjb250aW51ZSIpKVszXSk7IH0gfSBfX3Jlc3VsdDsg fSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiY29udGludWUiKTsgcmVn aXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKHRva2VuKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jl c3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKHRva2VuKSlbMV0gLSBfX3MyWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBf X3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKHRva2VuKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAm JiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICh0b2tlbikpWzNdIC0gX19zMlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkp KSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoImNvbnRpbnVlIikgJiYgKChzaXplX3QpKGNvbnN0 IHZvaWQgKikoKCJjb250aW51ZSIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJjb250 aW51ZSIpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoImNvbnRpbnVlIiksIF9fczJfbGVu IDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKHRva2VuKSAmJiAoKHNpemVfdCkoY29uc3Qg dm9pZCAqKSgodG9rZW4pICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHRva2VuKSA9PSAx KSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzBdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSgiY29udGludWUiKSlbMF0pOyBpZiAo X19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9rZW4pKVsxXSAtICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJjb250aW51ZSIpKVsxXSk7IGlmIChf X3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzJdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImNvbnRpbnVlIikpWzJdKTsgaWYgKF9f czJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzNdIC0gKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImNvbnRpbnVlIikpWzNdKTsgfSB9IF9fcmVz dWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEg PSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRva2VuKTsgcmVn aXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKCJjb250aW51ZSIpKVswXTsgaWYgKF9fczJfbGVuID4gMCAmJiBf X3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgiY29udGludWUiKSlbMV0pOyBpZiAoX19zMl9sZW4g PiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJjb250aW51ZSIpKVsyXSk7IGlmIChf X3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJjb250aW51ZSIpKVszXSk7 IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IHN0cmNtcCAodG9rZW4sICJjb250aW51ZSIpKSkpOyB9KSkg ewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY19jb250aW51ZSgpKSBicmVhazsKICAgICAg ICAgICAgICAgIH0gZWxzZQoKICAgICAgICAgICAgICAgIGlmICghX19leHRlbnNpb25fXyAoeyBz aXplX3QgX19zMV9sZW4sIF9fczJfbGVuOyAoX19idWlsdGluX2NvbnN0YW50X3AgKHRva2VuKSAm JiBfX2J1aWx0aW5fY29uc3RhbnRfcCAoImJyZWFrIikgJiYgKF9fczFfbGVuID0gc3RybGVuICh0 b2tlbiksIF9fczJfbGVuID0gc3RybGVuICgiYnJlYWsiKSwgKCEoKHNpemVfdCkoY29uc3Qgdm9p ZCAqKSgodG9rZW4pICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHRva2VuKSA9PSAxKSB8 fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiYnJlYWsiKSAr IDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiYnJlYWsiKSA9PSAxKSB8fCBfX3MyX2xlbiA+ PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNoYXIgKikgKHRva2VuKSwgKF9fY29uc3QgY2hhciAq KSAoImJyZWFrIiksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikg KyAxKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAodG9rZW4pICYmICgoc2l6ZV90KShjb25zdCB2 b2lkICopKCh0b2tlbikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikodG9rZW4pID09IDEp ICYmIChfX3MxX2xlbiA9IHN0cmxlbiAodG9rZW4pLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRp bl9jb25zdGFudF9wICgiYnJlYWsiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImJyZWFr IikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoImJyZWFrIikgPT0gMSkgPyAoX19leHRl bnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9rZW4pKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikoImJyZWFrIikpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAm JiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKHRva2VuKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopICgiYnJlYWsiKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9f cmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAodG9rZW4pKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCJicmVhayIpKVsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1 bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAodG9rZW4pKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKCJicmVhayIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9u X18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopICgiYnJlYWsiKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0g KCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRva2VuKSlbMF0g LSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0 ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRva2VuKSlb MV0gLSBfX3MyWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHRva2Vu KSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jl c3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tl bikpWzNdIC0gX19zMlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3Rh bnRfcCAoImJyZWFrIikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJicmVhayIpICsgMSkg LSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJicmVhayIpID09IDEpICYmIChfX3MyX2xlbiA9IHN0 cmxlbiAoImJyZWFrIiksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKHRv a2VuKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgodG9rZW4pICsgMSkgLSAoc2l6ZV90KShj b25zdCB2b2lkICopKHRva2VuKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGlu dCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICh0b2tlbikpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSgiYnJlYWsiKSlbMF0pOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19y ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAodG9r ZW4pKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJi cmVhayIpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3Vs dCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikp WzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImJyZWFr IikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzNdIC0g KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImJyZWFrIikpWzNd KTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KHRva2VuKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJicmVhayIpKVswXTsgaWYgKF9fczJfbGVu ID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiYnJlYWsiKSlbMV0pOyBpZiAoX19z Ml9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJicmVhayIpKVsyXSk7IGlm IChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJicmVhayIpKVszXSk7 IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IHN0cmNtcCAodG9rZW4sICJicmVhayIpKSkpOyB9KSkgewog ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY19icmVhaygpKSBicmVhazsKICAgICAgICAgICAg ICAgIH0gZWxzZQoKICAgICAgICAgICAgICAgIGlmICghX19leHRlbnNpb25fXyAoeyBzaXplX3Qg X19zMV9sZW4sIF9fczJfbGVuOyAoX19idWlsdGluX2NvbnN0YW50X3AgKHRva2VuKSAmJiBfX2J1 aWx0aW5fY29uc3RhbnRfcCAoInJldHVybiIpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAodG9rZW4p LCBfX3MyX2xlbiA9IHN0cmxlbiAoInJldHVybiIpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICop KCh0b2tlbikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikodG9rZW4pID09IDEpIHx8IF9f czFfbGVuID49IDQpICYmICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJyZXR1cm4iKSArIDEp IC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgicmV0dXJuIikgPT0gMSkgfHwgX19zMl9sZW4gPj0g NCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopICh0b2tlbiksIChfX2NvbnN0IGNoYXIgKikg KCJyZXR1cm4iKSwgKF9fczFfbGVuIDwgX19zMl9sZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSAr IDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICh0b2tlbikgJiYgKChzaXplX3QpKGNvbnN0IHZv aWQgKikoKHRva2VuKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSh0b2tlbikgPT0gMSkg JiYgKF9fczFfbGVuID0gc3RybGVuICh0b2tlbiksIF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGlu X2NvbnN0YW50X3AgKCJyZXR1cm4iKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoInJldHVy biIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJyZXR1cm4iKSA9PSAxKSA/IChfX2V4 dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tlbikpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSgicmV0dXJuIikpWzBdKTsgaWYgKF9fczFfbGVuID4g MCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKHRva2VuKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopICgicmV0dXJuIikpWzFdKTsgaWYgKF9fczFfbGVuID4gMSAm JiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKHRva2VuKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopICgicmV0dXJuIikpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBf X3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopICh0b2tlbikpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoInJldHVybiIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0 ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgicmV0dXJuIik7IHJlZ2lzdGVyIGludCBfX3Jl c3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0b2tl bikpWzBdIC0gX19zMlswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBf X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICh0 b2tlbikpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkg eyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICh0b2tlbikpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0g MCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAodG9rZW4pKVszXSAtIF9fczJbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiAoX19idWlsdGlu X2NvbnN0YW50X3AgKCJyZXR1cm4iKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoInJldHVy biIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJyZXR1cm4iKSA9PSAxKSAmJiAoX19z Ml9sZW4gPSBzdHJsZW4gKCJyZXR1cm4iKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29u c3RhbnRfcCAodG9rZW4pICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCh0b2tlbikgKyAxKSAt IChzaXplX3QpKGNvbnN0IHZvaWQgKikodG9rZW4pID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsg cmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKHRva2VuKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopKCJyZXR1cm4iKSlbMF0pOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAodG9rZW4pKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKCJyZXR1cm4iKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09 IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAodG9rZW4pKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKCJyZXR1cm4iKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDAp IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KHRva2VuKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICgicmV0dXJuIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKHRva2VuKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJyZXR1cm4iKSlb MF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3Mx WzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoInJldHVy biIpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9 IChfX3MxWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo InJldHVybiIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1 bHQgPSAoX19zMVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCJyZXR1cm4iKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKHRva2VuLCAi cmV0dXJuIikpKSk7IH0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjX3JldHVybih0 ZXJtKSkgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UKCiAgICAgICAgICAgICAgICBpZiAo KnRva2VuICE9ICc7JykKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNfZXhwcih0ZXJtLCBs b2NhbHMsIHRva2VuKSkgYnJlYWs7CgogICAgICAgICAgICAgICAgaWYgKGNfZXJybm8pIGJyZWFr OwogICAgICAgIH0KCiAgICAgICAgY19mcmVlX2lkZW50KGxvY2FscywgdmFycyk7CgogICAgICAg IGlmIChjX2Vycm5vICYmIGNfRU9GKSBjX2Vycm5vID0gMTU7CgogICAgICAgIHJldHVybiBjX2Vy cm5vOwp9CgoKc3RhdGljIHZvaWQgY19kaXJlY3QodW5pb24gY19pbnNuICphZGRyKTsKCgppbnQg Y19jb21waWxlKGludCAoKmV4dF9nZXRjaGFyKSh2b2lkKSwgdm9pZCAoKmV4dF9yZXdpbmQpKHZv aWQpLAogICAgICAgIHN0cnVjdCBjX2lkZW50ICpleHRlcm5zKQp7CgogICAgICAgIGNfZGlyZWN0 KCgodm9pZCAqKTApKTsKCgogICAgICAgIGNfZXh0X2dldGNoYXIgPSBleHRfZ2V0Y2hhcjsKICAg ICAgICBjX2V4dF9yZXdpbmQgPSBleHRfcmV3aW5kOwoKICAgICAgICBjX2NvZGVfc3RhcnQgPSAo KHZvaWQgKikwKTsKICAgICAgICBjX2RhdGFfc3RhcnQgPSAoKHZvaWQgKikwKTsKCiAgICAgICAg Zm9yIChjX3Bhc3MgPSAwOyBjX3Bhc3MgPCAyOyBjX3Bhc3MrKykgewogICAgICAgICAgICAgICAg Y19pbml0KCk7CiAgICAgICAgICAgICAgICBjX2Jsb2NrKDAsIGV4dGVybnMpOwoKICAgICAgICAg ICAgICAgIGlmICghY19wYXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNfZnJlZV9pZGVu dChjX2Z1bmNzLCAoKHZvaWQgKikwKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNfZnJlZV9m aXh1cChjX2JyZWFrX2ZpeHVwcywgKCh2b2lkICopMCkpOwogICAgICAgICAgICAgICAgfQoKICAg ICAgICAgICAgICAgIGlmIChjX2Vycm5vIHx8IGNfcGFzcykgYnJlYWs7CgogICAgICAgICAgICAg ICAgY19jb2RlX3N0YXJ0ID0gbWVtX2FsbG9jKChzaXplX3QpY19jb2RlX3B0cik7CiAgICAgICAg ICAgICAgICBjX2RhdGFfc3RhcnQgPSBtZW1fYWxsb2MoKHNpemVfdCljX2RhdGFfcHRyKTsKICAg ICAgICB9CgogICAgICAgIHJldHVybiBjX2Vycm5vOwp9CgpzdHJ1Y3QgY19pZGVudCAqY19sb29r dXAoY2hhciAqbmFtZSkKewogICAgICAgIHJldHVybiBjX2ZpbmRfaWRlbnQoY19mdW5jcywgKCh2 b2lkICopMCksIG5hbWUpOwp9Cgp2b2lkIGNfZXhlY3V0ZShzdHJ1Y3QgY19pZGVudCAqZm4pCnsK CgoKCiAgICAgICAgaWYgKCFmbikgcmV0dXJuOwoKCiAgICAgICAgY19kaXJlY3QoZm4tPmFkZHIp OwojIDgyNSAiY29tcGlsZXIuYyIKfQoKCgpzdGF0aWMgdm9pZCBjX2RpcmVjdCh1bmlvbiBjX2lu c24gKmFkZHIpCnsKICAgICAgICB1bmlvbiBjX2luc24gKnBjID0gYWRkcjsKICAgICAgICB1bmlv biBjX2luc24gKnNwID0gY19zdGFjazsKICAgICAgICBjX2ludCBpbW0gPSAwOwoKICAgICAgICBz dGF0aWMgdm9pZCAqb3BzW10gPSB7CiAgICAgICAgICAgICAgICAmJm9wX2luZGV4LAogICAgICAg ICAgICAgICAgJiZvcF9hc3NpZ24sCiAgICAgICAgICAgICAgICAmJm9wX2FkZF9hLAogICAgICAg ICAgICAgICAgJiZvcF9zdWJfYSwKICAgICAgICAgICAgICAgICYmb3BfbXVsX2EsCiAgICAgICAg ICAgICAgICAmJm9wX2Rpdl9hLAogICAgICAgICAgICAgICAgJiZvcF9tb2RfYSwKICAgICAgICAg ICAgICAgICYmb3Bfb3JfYSwKICAgICAgICAgICAgICAgICYmb3BfeG9yX2EsCiAgICAgICAgICAg ICAgICAmJm9wX2FuZF9hLAogICAgICAgICAgICAgICAgJiZvcF9zaGxfYSwKICAgICAgICAgICAg ICAgICYmb3Bfc2hyX2EsCiAgICAgICAgICAgICAgICAmJm9wX29yX2ksCiAgICAgICAgICAgICAg ICAmJm9wX2FuZF9iLAogICAgICAgICAgICAgICAgJiZvcF9ub3RfYiwKICAgICAgICAgICAgICAg ICYmb3BfZXEsCiAgICAgICAgICAgICAgICAmJm9wX3N1YiwKICAgICAgICAgICAgICAgICYmb3Bf Z3QsCiAgICAgICAgICAgICAgICAmJm9wX2x0LAogICAgICAgICAgICAgICAgJiZvcF9nZSwKICAg ICAgICAgICAgICAgICYmb3BfbGUsCiAgICAgICAgICAgICAgICAmJm9wX29yX2ksCiAgICAgICAg ICAgICAgICAmJm9wX3hvcl9pLAogICAgICAgICAgICAgICAgJiZvcF9hbmRfaSwKICAgICAgICAg ICAgICAgICYmb3Bfc2hsLAogICAgICAgICAgICAgICAgJiZvcF9zaHIsCiAgICAgICAgICAgICAg ICAmJm9wX2FkZCwKICAgICAgICAgICAgICAgICYmb3Bfc3ViLAogICAgICAgICAgICAgICAgJiZv cF9tdWwsCiAgICAgICAgICAgICAgICAmJm9wX2RpdiwKICAgICAgICAgICAgICAgICYmb3BfbW9k LAogICAgICAgICAgICAgICAgJiZvcF9ub3RfaSwKICAgICAgICAgICAgICAgICYmb3BfbmVnLAog ICAgICAgICAgICAgICAgJiZvcF9pbmNfbCwKICAgICAgICAgICAgICAgICYmb3BfZGVjX2wsCiAg ICAgICAgICAgICAgICAmJm9wX2luY19yLAogICAgICAgICAgICAgICAgJiZvcF9kZWNfciwKICAg ICAgICB9OwoKICAgICAgICBpZiAoIWFkZHIpIHsKICAgICAgICAgICAgICAgIGludCBvcCA9IDA7 CgogICAgICAgICAgICAgICAgY19vcF9yZXR1cm4gPSAmJm9wX3JldHVybjsKICAgICAgICAgICAg ICAgIGNfb3BfYnogPSAmJm9wX2J6OwogICAgICAgICAgICAgICAgY19vcF9iYSA9ICYmb3BfYmE7 CiAgICAgICAgICAgICAgICBjX29wX3B1c2hfaW1tID0gJiZvcF9wdXNoX2ltbTsKICAgICAgICAg ICAgICAgIGNfb3BfcHVzaF9tZW0gPSAmJm9wX3B1c2hfbWVtOwogICAgICAgICAgICAgICAgY19v cF9wb3AgPSAmJm9wX3BvcDsKCiAgICAgICAgICAgICAgICBjX29wX3B1c2hfaW1tX2ltbSA9ICYm b3BfcHVzaF9pbW1faW1tOwogICAgICAgICAgICAgICAgY19vcF9wdXNoX2ltbV9tZW0gPSAmJm9w X3B1c2hfaW1tX21lbTsKICAgICAgICAgICAgICAgIGNfb3BfcHVzaF9tZW1faW1tID0gJiZvcF9w dXNoX21lbV9pbW07CiAgICAgICAgICAgICAgICBjX29wX3B1c2hfbWVtX21lbSA9ICYmb3BfcHVz aF9tZW1fbWVtOwoKICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAg Y19vcHNbb3BdLm9wID0gb3BzW29wXTsKICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNfb3BzWysr b3BdLnByZWMpOwoKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGdv dG8gKihwYysrKS0+b3A7CgpvcF9yZXR1cm46CiAgICAgICAgcmV0dXJuOwoKb3BfYno6CiAgICAg ICAgaWYgKGltbSkgewogICAgICAgICAgICAgICAgcGMgKz0gMjsKICAgICAgICAgICAgICAgIHNw IC09IDI7CiAgICAgICAgICAgICAgICBnb3RvICoocGMgLSAxKS0+b3A7CiAgICAgICAgfQogICAg ICAgIHNwIC09IDI7CgpvcF9iYToKICAgICAgICBwYyA9IHBjLT5wYzsKICAgICAgICBnb3RvICoo cGMrKyktPm9wOwoKb3BfcHVzaF9pbW06CiAgICAgICAgKHNwIC0gMiktPmltbSA9IGltbTsKICAg ICAgICBpbW0gPSBwYy0+aW1tOwogICAgICAgIHBjICs9IDI7CiAgICAgICAgc3AgKz0gMjsKICAg ICAgICBnb3RvICoocGMgLSAxKS0+b3A7CgpvcF9wdXNoX21lbToKICAgICAgICAoc3AgLSAyKS0+ aW1tID0gaW1tOwogICAgICAgIGltbSA9ICooKHNwICsgMSktPm1lbSA9IHBjLT5tZW0pOwogICAg ICAgIHBjICs9IDI7CiAgICAgICAgc3AgKz0gMjsKICAgICAgICBnb3RvICoocGMgLSAxKS0+b3A7 CgpvcF9wb3A6CiAgICAgICAgc3AgLT0gMjsKICAgICAgICBnb3RvICoocGMrKyktPm9wOwoKb3Bf cHVzaF9pbW1faW1tOgogICAgICAgIChzcCAtIDIpLT5pbW0gPSBpbW07CiAgICAgICAgc3AtPmlt bSA9IHBjLT5pbW07CiAgICAgICAgaW1tID0gKHBjICsgMSktPmltbTsKICAgICAgICBwYyArPSAz OwogICAgICAgIHNwICs9IDQ7CiAgICAgICAgZ290byAqKHBjIC0gMSktPm9wOwoKb3BfcHVzaF9p bW1fbWVtOgogICAgICAgIChzcCAtIDIpLT5pbW0gPSBpbW07CiAgICAgICAgc3AtPmltbSA9IHBj LT5pbW07CiAgICAgICAgaW1tID0gKigoc3AgKyAzKS0+bWVtID0gKHBjICsgMSktPm1lbSk7CiAg ICAgICAgcGMgKz0gMzsKICAgICAgICBzcCArPSA0OwogICAgICAgIGdvdG8gKihwYyAtIDEpLT5v cDsKCm9wX3B1c2hfbWVtX2ltbToKICAgICAgICAoc3AgLSAyKS0+aW1tID0gaW1tOwogICAgICAg IHNwLT5pbW0gPSAqKChzcCArIDEpLT5tZW0gPSBwYy0+bWVtKTsKICAgICAgICBpbW0gPSAocGMg KyAxKS0+aW1tOwogICAgICAgIHBjICs9IDM7CiAgICAgICAgc3AgKz0gNDsKICAgICAgICBnb3Rv ICoocGMgLSAxKS0+b3A7CgpvcF9wdXNoX21lbV9tZW06CiAgICAgICAgKHNwIC0gMiktPmltbSA9 IGltbTsKICAgICAgICBzcC0+aW1tID0gKigoc3AgKyAxKS0+bWVtID0gcGMtPm1lbSk7CiAgICAg ICAgaW1tID0gKigoc3AgKyAzKS0+bWVtID0gKHBjICsgMSktPm1lbSk7CiAgICAgICAgcGMgKz0g MzsKICAgICAgICBzcCArPSA0OwogICAgICAgIGdvdG8gKihwYyAtIDEpLT5vcDsKCm9wX2luZGV4 OgogICAgICAgIGltbSA9ICooKHNwIC0gMyktPm1lbSArPSBpbW0pOwogICAgICAgIHNwIC09IDI7 CiAgICAgICAgZ290byAqKHBjKyspLT5vcDsKCm9wX2Fzc2lnbjoKICAgICAgICAqKHNwIC0gMykt Pm1lbSA9IGltbTsKICAgICAgICBzcCAtPSAyOwogICAgICAgIGdvdG8gKihwYysrKS0+b3A7Cgpv cF9hZGRfYToKICAgICAgICBpbW0gPSAqKHNwIC0gMyktPm1lbSArPSBpbW07CiAgICAgICAgc3Ag LT0gMjsKICAgICAgICBnb3RvICoocGMrKyktPm9wOwoKb3Bfc3ViX2E6CiAgICAgICAgaW1tID0g KihzcCAtIDMpLT5tZW0gLT0gaW1tOwogICAgICAgIHNwIC09IDI7CiAgICAgICAgZ290byAqKHBj KyspLT5vcDsKCm9wX211bF9hOgogICAgICAgIGltbSA9ICooc3AgLSAzKS0+bWVtICo9IGltbTsK ICAgICAgICBzcCAtPSAyOwogICAgICAgIGdvdG8gKihwYysrKS0+b3A7CgpvcF9kaXZfYToKICAg ICAgICBpbW0gPSAqKHNwIC0gMyktPm1lbSAvPSBpbW07CiAgICAgICAgc3AgLT0gMjsKICAgICAg ICBnb3RvICoocGMrKyktPm9wOwoKb3BfbW9kX2E6CiAgICAgICAgaW1tID0gKihzcCAtIDMpLT5t ZW0gJT0gaW1tOwogICAgICAgIHNwIC09IDI7CiAgICAgICAgZ290byAqKHBjKyspLT5vcDsKCm9w X29yX2E6CiAgICAgICAgaW1tID0gKihzcCAtIDMpLT5tZW0gfD0gaW1tOwogICAgICAgIHNwIC09 IDI7CiAgICAgICAgZ290byAqKHBjKyspLT5vcDsKCm9wX3hvcl9hOgogICAgICAgIGltbSA9ICoo c3AgLSAzKS0+bWVtIF49IGltbTsKICAgICAgICBzcCAtPSAyOwogICAgICAgIGdvdG8gKihwYysr KS0+b3A7CgpvcF9hbmRfYToKICAgICAgICBpbW0gPSAqKHNwIC0gMyktPm1lbSAmPSBpbW07CiAg ICAgICAgc3AgLT0gMjsKICAgICAgICBnb3RvICoocGMrKyktPm9wOwoKb3Bfc2hsX2E6CiAgICAg ICAgaW1tID0gKihzcCAtIDMpLT5tZW0gPDw9IGltbTsKICAgICAgICBzcCAtPSAyOwogICAgICAg IGdvdG8gKihwYysrKS0+b3A7CgpvcF9zaHJfYToKICAgICAgICBpbW0gPSAqKHNwIC0gMyktPm1l bSA+Pj0gaW1tOwogICAgICAgIHNwIC09IDI7CiAgICAgICAgZ290byAqKHBjKyspLT5vcDsKCm9w X29yX2k6CiAgICAgICAgaW1tIHw9IChzcCAtIDQpLT5pbW07CiAgICAgICAgc3AgLT0gMjsKICAg ICAgICBnb3RvICoocGMrKyktPm9wOwoKb3BfYW5kX2I6CiAgICAgICAgaW1tID0gKHNwIC0gNCkt PmltbSAmJiBpbW07CiAgICAgICAgc3AgLT0gMjsKICAgICAgICBnb3RvICoocGMrKyktPm9wOwoK b3Bfbm90X2I6CiAgICAgICAgaW1tID0gIWltbTsKICAgICAgICBnb3RvICoocGMrKyktPm9wOwoK b3BfZXE6CiAgICAgICAgaW1tID0gKHNwIC0gNCktPmltbSA9PSBpbW07CiAgICAgICAgc3AgLT0g MjsKICAgICAgICBnb3RvICoocGMrKyktPm9wOwoKb3BfZ3Q6CiAgICAgICAgaW1tID0gKHNwIC0g NCktPmltbSA+IGltbTsKICAgICAgICBzcCAtPSAyOwogICAgICAgIGdvdG8gKihwYysrKS0+b3A7 CgpvcF9sdDoKICAgICAgICBpbW0gPSAoc3AgLSA0KS0+aW1tIDwgaW1tOwogICAgICAgIHNwIC09 IDI7CiAgICAgICAgZ290byAqKHBjKyspLT5vcDsKCm9wX2dlOgogICAgICAgIGltbSA9IChzcCAt IDQpLT5pbW0gPj0gaW1tOwogICAgICAgIHNwIC09IDI7CiAgICAgICAgZ290byAqKHBjKyspLT5v cDsKCm9wX2xlOgogICAgICAgIGltbSA9IChzcCAtIDQpLT5pbW0gPD0gaW1tOwogICAgICAgIHNw IC09IDI7CiAgICAgICAgZ290byAqKHBjKyspLT5vcDsKCm9wX3hvcl9pOgogICAgICAgIGltbSBe PSAoc3AgLSA0KS0+aW1tOwogICAgICAgIHNwIC09IDI7CiAgICAgICAgZ290byAqKHBjKyspLT5v cDsKCm9wX2FuZF9pOgogICAgICAgIGltbSAmPSAoc3AgLSA0KS0+aW1tOwogICAgICAgIHNwIC09 IDI7CiAgICAgICAgZ290byAqKHBjKyspLT5vcDsKCm9wX3NobDoKICAgICAgICBpbW0gPSAoc3Ag LSA0KS0+aW1tIDw8IGltbTsKICAgICAgICBzcCAtPSAyOwogICAgICAgIGdvdG8gKihwYysrKS0+ b3A7CgpvcF9zaHI6CiAgICAgICAgaW1tID0gKHNwIC0gNCktPmltbSA+PiBpbW07CiAgICAgICAg c3AgLT0gMjsKICAgICAgICBnb3RvICoocGMrKyktPm9wOwoKb3BfYWRkOgogICAgICAgIGltbSAr PSAoc3AgLSA0KS0+aW1tOwogICAgICAgIHNwIC09IDI7CiAgICAgICAgZ290byAqKHBjKyspLT5v cDsKCm9wX3N1YjoKICAgICAgICBpbW0gPSAoc3AgLSA0KS0+aW1tIC0gaW1tOwogICAgICAgIHNw IC09IDI7CiAgICAgICAgZ290byAqKHBjKyspLT5vcDsKCm9wX211bDoKICAgICAgICBpbW0gKj0g KHNwIC0gNCktPmltbTsKICAgICAgICBzcCAtPSAyOwogICAgICAgIGdvdG8gKihwYysrKS0+b3A7 CgpvcF9kaXY6CiAgICAgICAgaW1tID0gKHNwIC0gNCktPmltbSAvIGltbTsKICAgICAgICBzcCAt PSAyOwogICAgICAgIGdvdG8gKihwYysrKS0+b3A7CgpvcF9tb2Q6CiAgICAgICAgaW1tID0gKHNw IC0gNCktPmltbSAlIGltbTsKICAgICAgICBzcCAtPSAyOwogICAgICAgIGdvdG8gKihwYysrKS0+ b3A7CgpvcF9ub3RfaToKICAgICAgICBpbW0gPSB+aW1tOwogICAgICAgIGdvdG8gKihwYysrKS0+ b3A7CgpvcF9uZWc6CiAgICAgICAgaW1tID0gLWltbTsKICAgICAgICBnb3RvICoocGMrKyktPm9w OwoKb3BfaW5jX2w6CiAgICAgICAgKihzcCAtIDEpLT5tZW0gPSArK2ltbTsKICAgICAgICBnb3Rv ICoocGMrKyktPm9wOwoKb3BfZGVjX2w6CiAgICAgICAgKihzcCAtIDEpLT5tZW0gPSAtLWltbTsK ICAgICAgICBnb3RvICoocGMrKyktPm9wOwoKb3BfaW5jX3I6CiAgICAgICAgKihzcCAtIDEpLT5t ZW0gPSBpbW0gKyAxOwogICAgICAgIGdvdG8gKihwYysrKS0+b3A7CgpvcF9kZWNfcjoKICAgICAg ICAqKHNwIC0gMSktPm1lbSA9IGltbSAtIDE7CiAgICAgICAgZ290byAqKHBjKyspLT5vcDsKfQoK CgpzdGF0aWMgdm9pZCBjX2Zfb3BfcmV0dXJuKHZvaWQpCnsKICAgICAgICBjX3BjID0gKGNfc3Ag LT0gMiktPnBjOwp9CgpzdGF0aWMgdm9pZCBjX2Zfb3BfYnoodm9pZCkKewogICAgICAgIGlmICgo Y19zcCAtPSAyKS0+aW1tKQogICAgICAgICAgICAgICAgY19wYysrOwogICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgIGNfcGMgPSBjX3BjLT5wYzsKfQoKc3RhdGljIHZvaWQgY19mX29wX2JhKHZv aWQpCnsKICAgICAgICBjX3BjID0gY19wYy0+cGM7Cn0KCnN0YXRpYyB2b2lkIGNfZl9vcF9wdXNo X2ltbSh2b2lkKQp7CiAgICAgICAgY19zcC0+aW1tID0gKGNfcGMrKyktPmltbTsKICAgICAgICBj X3NwICs9IDI7Cn0KCnN0YXRpYyB2b2lkIGNfZl9vcF9wdXNoX21lbSh2b2lkKQp7CiAgICAgICAg KGNfc3ArKyktPmltbSA9ICpjX3BjLT5tZW07CiAgICAgICAgKGNfc3ArKyktPm1lbSA9IChjX3Bj KyspLT5tZW07Cn0KCnN0YXRpYyB2b2lkIGNfZl9vcF9wb3Aodm9pZCkKewogICAgICAgIGNfc3Ag LT0gMjsKfQoKc3RhdGljIHZvaWQgY19mX29wX3B1c2hfaW1tX2ltbSh2b2lkKQp7CiAgICAgICAg Y19zcC0+aW1tID0gKGNfcGMrKyktPmltbTsKICAgICAgICAoY19zcCArIDIpLT5pbW0gPSAoY19w YysrKS0+aW1tOwogICAgICAgIGNfc3AgKz0gNDsKfQoKc3RhdGljIHZvaWQgY19mX29wX3B1c2hf aW1tX21lbSh2b2lkKQp7CiAgICAgICAgY19zcC0+aW1tID0gKGNfcGMrKyktPmltbTsKICAgICAg ICAoY19zcCArIDIpLT5pbW0gPSAqY19wYy0+bWVtOwogICAgICAgIChjX3NwICsgMyktPm1lbSA9 IChjX3BjKyspLT5tZW07CiAgICAgICAgY19zcCArPSA0Owp9CgpzdGF0aWMgdm9pZCBjX2Zfb3Bf cHVzaF9tZW1faW1tKHZvaWQpCnsKICAgICAgICBjX3NwLT5pbW0gPSAqY19wYy0+bWVtOwogICAg ICAgIChjX3NwICsgMSktPm1lbSA9IChjX3BjKyspLT5tZW07CiAgICAgICAgKGNfc3AgKyAyKS0+ aW1tID0gKGNfcGMrKyktPmltbTsKICAgICAgICBjX3NwICs9IDQ7Cn0KCnN0YXRpYyB2b2lkIGNf Zl9vcF9wdXNoX21lbV9tZW0odm9pZCkKewogICAgICAgIGNfc3AtPmltbSA9ICpjX3BjLT5tZW07 CiAgICAgICAgKGNfc3AgKyAxKS0+bWVtID0gKGNfcGMrKyktPm1lbTsKICAgICAgICAoY19zcCAr IDIpLT5pbW0gPSAqY19wYy0+bWVtOwogICAgICAgIChjX3NwICsgMyktPm1lbSA9IChjX3BjKysp LT5tZW07CiAgICAgICAgY19zcCArPSA0Owp9CgpzdGF0aWMgdm9pZCBjX29wX2luZGV4KHZvaWQp CnsKICAgICAgICBjX3NwIC09IDI7CiAgICAgICAgKGNfc3AgLSAyKS0+aW1tID0gKigoY19zcCAt IDEpLT5tZW0gKz0gY19zcC0+aW1tKTsKfQoKc3RhdGljIHZvaWQgY19vcF9hc3NpZ24odm9pZCkK ewogICAgICAgIGNfc3AgLT0gMjsKICAgICAgICAoY19zcCAtIDIpLT5pbW0gPSAqKGNfc3AgLSAx KS0+bWVtID0gY19zcC0+aW1tOwp9CgpzdGF0aWMgdm9pZCBjX29wX2FkZF9hKHZvaWQpCnsKICAg ICAgICBjX3NwIC09IDI7CiAgICAgICAgKGNfc3AgLSAyKS0+aW1tID0gKihjX3NwIC0gMSktPm1l bSArPSBjX3NwLT5pbW07Cn0KCnN0YXRpYyB2b2lkIGNfb3Bfc3ViX2Eodm9pZCkKewogICAgICAg IGNfc3AgLT0gMjsKICAgICAgICAoY19zcCAtIDIpLT5pbW0gPSAqKGNfc3AgLSAxKS0+bWVtIC09 IGNfc3AtPmltbTsKfQoKc3RhdGljIHZvaWQgY19vcF9tdWxfYSh2b2lkKQp7CiAgICAgICAgY19z cCAtPSAyOwogICAgICAgIChjX3NwIC0gMiktPmltbSA9ICooY19zcCAtIDEpLT5tZW0gKj0gY19z cC0+aW1tOwp9CgpzdGF0aWMgdm9pZCBjX29wX2Rpdl9hKHZvaWQpCnsKICAgICAgICBjX3NwIC09 IDI7CiAgICAgICAgKGNfc3AgLSAyKS0+aW1tID0gKihjX3NwIC0gMSktPm1lbSAvPSBjX3NwLT5p bW07Cn0KCnN0YXRpYyB2b2lkIGNfb3BfbW9kX2Eodm9pZCkKewogICAgICAgIGNfc3AgLT0gMjsK ICAgICAgICAoY19zcCAtIDIpLT5pbW0gPSAqKGNfc3AgLSAxKS0+bWVtICU9IGNfc3AtPmltbTsK fQoKc3RhdGljIHZvaWQgY19vcF9vcl9hKHZvaWQpCnsKICAgICAgICBjX3NwIC09IDI7CiAgICAg ICAgKGNfc3AgLSAyKS0+aW1tID0gKihjX3NwIC0gMSktPm1lbSB8PSBjX3NwLT5pbW07Cn0KCnN0 YXRpYyB2b2lkIGNfb3BfeG9yX2Eodm9pZCkKewogICAgICAgIGNfc3AgLT0gMjsKICAgICAgICAo Y19zcCAtIDIpLT5pbW0gPSAqKGNfc3AgLSAxKS0+bWVtIF49IGNfc3AtPmltbTsKfQoKc3RhdGlj IHZvaWQgY19vcF9hbmRfYSh2b2lkKQp7CiAgICAgICAgY19zcCAtPSAyOwogICAgICAgIChjX3Nw IC0gMiktPmltbSA9ICooY19zcCAtIDEpLT5tZW0gJj0gY19zcC0+aW1tOwp9CgpzdGF0aWMgdm9p ZCBjX29wX3NobF9hKHZvaWQpCnsKICAgICAgICBjX3NwIC09IDI7CiAgICAgICAgKGNfc3AgLSAy KS0+aW1tID0gKihjX3NwIC0gMSktPm1lbSA8PD0gY19zcC0+aW1tOwp9CgpzdGF0aWMgdm9pZCBj X29wX3Nocl9hKHZvaWQpCnsKICAgICAgICBjX3NwIC09IDI7CiAgICAgICAgKGNfc3AgLSAyKS0+ aW1tID0gKihjX3NwIC0gMSktPm1lbSA+Pj0gY19zcC0+aW1tOwp9CgpzdGF0aWMgdm9pZCBjX29w X29yX2kodm9pZCkKewogICAgICAgIGNfc3AgLT0gMjsKICAgICAgICAoY19zcCAtIDIpLT5pbW0g fD0gY19zcC0+aW1tOwp9CgpzdGF0aWMgdm9pZCBjX29wX2FuZF9iKHZvaWQpCnsKICAgICAgICBj X3NwIC09IDI7CiAgICAgICAgKGNfc3AgLSAyKS0+aW1tID0gKGNfc3AgLSAyKS0+aW1tICYmIGNf c3AtPmltbTsKfQoKc3RhdGljIHZvaWQgY19vcF9ub3RfYih2b2lkKQp7CiAgICAgICAgKGNfc3Ag LSAyKS0+aW1tID0gIShjX3NwIC0gMiktPmltbTsKfQoKc3RhdGljIHZvaWQgY19vcF9lcSh2b2lk KQp7CiAgICAgICAgY19zcCAtPSAyOwogICAgICAgIChjX3NwIC0gMiktPmltbSA9IChjX3NwIC0g MiktPmltbSA9PSBjX3NwLT5pbW07Cn0KCnN0YXRpYyB2b2lkIGNfb3BfZ3Qodm9pZCkKewogICAg ICAgIGNfc3AgLT0gMjsKICAgICAgICAoY19zcCAtIDIpLT5pbW0gPSAoY19zcCAtIDIpLT5pbW0g PiBjX3NwLT5pbW07Cn0KCnN0YXRpYyB2b2lkIGNfb3BfbHQodm9pZCkKewogICAgICAgIGNfc3Ag LT0gMjsKICAgICAgICAoY19zcCAtIDIpLT5pbW0gPSAoY19zcCAtIDIpLT5pbW0gPCBjX3NwLT5p bW07Cn0KCnN0YXRpYyB2b2lkIGNfb3BfZ2Uodm9pZCkKewogICAgICAgIGNfc3AgLT0gMjsKICAg ICAgICAoY19zcCAtIDIpLT5pbW0gPSAoY19zcCAtIDIpLT5pbW0gPj0gY19zcC0+aW1tOwp9Cgpz dGF0aWMgdm9pZCBjX29wX2xlKHZvaWQpCnsKICAgICAgICBjX3NwIC09IDI7CiAgICAgICAgKGNf c3AgLSAyKS0+aW1tID0gKGNfc3AgLSAyKS0+aW1tIDw9IGNfc3AtPmltbTsKfQoKc3RhdGljIHZv aWQgY19vcF94b3JfaSh2b2lkKQp7CiAgICAgICAgY19zcCAtPSAyOwogICAgICAgIChjX3NwIC0g MiktPmltbSBePSBjX3NwLT5pbW07Cn0KCnN0YXRpYyB2b2lkIGNfb3BfYW5kX2kodm9pZCkKewog ICAgICAgIGNfc3AgLT0gMjsKICAgICAgICAoY19zcCAtIDIpLT5pbW0gJj0gY19zcC0+aW1tOwp9 CgpzdGF0aWMgdm9pZCBjX29wX3NobCh2b2lkKQp7CiAgICAgICAgY19zcCAtPSAyOwogICAgICAg IChjX3NwIC0gMiktPmltbSA8PD0gY19zcC0+aW1tOwp9CgpzdGF0aWMgdm9pZCBjX29wX3Nocih2 b2lkKQp7CiAgICAgICAgY19zcCAtPSAyOwogICAgICAgIChjX3NwIC0gMiktPmltbSA+Pj0gY19z cC0+aW1tOwp9CgpzdGF0aWMgdm9pZCBjX29wX2FkZCh2b2lkKQp7CiAgICAgICAgY19zcCAtPSAy OwogICAgICAgIChjX3NwIC0gMiktPmltbSArPSBjX3NwLT5pbW07Cn0KCnN0YXRpYyB2b2lkIGNf b3Bfc3ViKHZvaWQpCnsKICAgICAgICBjX3NwIC09IDI7CiAgICAgICAgKGNfc3AgLSAyKS0+aW1t IC09IGNfc3AtPmltbTsKfQoKc3RhdGljIHZvaWQgY19vcF9tdWwodm9pZCkKewogICAgICAgIGNf c3AgLT0gMjsKICAgICAgICAoY19zcCAtIDIpLT5pbW0gKj0gY19zcC0+aW1tOwp9CgpzdGF0aWMg dm9pZCBjX29wX2Rpdih2b2lkKQp7CiAgICAgICAgY19zcCAtPSAyOwogICAgICAgIChjX3NwIC0g MiktPmltbSAvPSBjX3NwLT5pbW07Cn0KCnN0YXRpYyB2b2lkIGNfb3BfbW9kKHZvaWQpCnsKICAg ICAgICBjX3NwIC09IDI7CiAgICAgICAgKGNfc3AgLSAyKS0+aW1tICU9IGNfc3AtPmltbTsKfQoK c3RhdGljIHZvaWQgY19vcF9ub3RfaSh2b2lkKQp7CiAgICAgICAgKGNfc3AgLSAyKS0+aW1tID0g fihjX3NwIC0gMiktPmltbTsKfQoKc3RhdGljIHZvaWQgY19vcF9uZWcodm9pZCkKewogICAgICAg IChjX3NwIC0gMiktPmltbSA9IC0oY19zcCAtIDIpLT5pbW07Cn0KCnN0YXRpYyB2b2lkIGNfb3Bf aW5jX2wodm9pZCkKewogICAgICAgICooY19zcCAtIDEpLT5tZW0gPSArKyhjX3NwIC0gMiktPmlt bTsKfQoKc3RhdGljIHZvaWQgY19vcF9kZWNfbCh2b2lkKQp7CiAgICAgICAgKihjX3NwIC0gMSkt Pm1lbSA9IC0tKGNfc3AgLSAyKS0+aW1tOwp9CgpzdGF0aWMgdm9pZCBjX29wX2luY19yKHZvaWQp CnsKICAgICAgICAqKGNfc3AgLSAxKS0+bWVtID0gKGNfc3AgLSAyKS0+aW1tICsgMTsKfQoKc3Rh dGljIHZvaWQgY19vcF9kZWNfcih2b2lkKQp7CiAgICAgICAgKihjX3NwIC0gMSktPm1lbSA9IChj X3NwIC0gMiktPmltbSAtIDE7Cn0KCnN0YXRpYyB2b2lkICgqY19vcF9yZXR1cm4pKHZvaWQpID0g Y19mX29wX3JldHVybjsKc3RhdGljIHZvaWQgKCpjX29wX2J6KSh2b2lkKSA9IGNfZl9vcF9iejsK c3RhdGljIHZvaWQgKCpjX29wX2JhKSh2b2lkKSA9IGNfZl9vcF9iYTsKc3RhdGljIHZvaWQgKCpj X29wX3B1c2hfaW1tKSh2b2lkKSA9IGNfZl9vcF9wdXNoX2ltbTsKc3RhdGljIHZvaWQgKCpjX29w X3B1c2hfbWVtKSh2b2lkKSA9IGNfZl9vcF9wdXNoX21lbTsKc3RhdGljIHZvaWQgKCpjX29wX3Bv cCkodm9pZCkgPSBjX2Zfb3BfcG9wOwoKc3RhdGljIHZvaWQgKCpjX29wX3B1c2hfaW1tX2ltbSko dm9pZCkgPSBjX2Zfb3BfcHVzaF9pbW1faW1tOwpzdGF0aWMgdm9pZCAoKmNfb3BfcHVzaF9pbW1f bWVtKSh2b2lkKSA9IGNfZl9vcF9wdXNoX2ltbV9tZW07CnN0YXRpYyB2b2lkICgqY19vcF9wdXNo X21lbV9pbW0pKHZvaWQpID0gY19mX29wX3B1c2hfbWVtX2ltbTsKc3RhdGljIHZvaWQgKCpjX29w X3B1c2hfbWVtX21lbSkodm9pZCkgPSBjX2Zfb3BfcHVzaF9tZW1fbWVtOwoKc3RhdGljIHN0cnVj dCBjX29wIGNfb3BzW10gPSB7CiAgICAgICAgezEsIDAsIDAsICJbIiwgY19vcF9pbmRleH0sCiAg ICAgICAgezIsIDEsIDAsICI9IiwgY19vcF9hc3NpZ259LAogICAgICAgIHsyLCAxLCAwLCAiKz0i LCBjX29wX2FkZF9hfSwKICAgICAgICB7MiwgMSwgMCwgIi09IiwgY19vcF9zdWJfYX0sCiAgICAg ICAgezIsIDEsIDAsICIqPSIsIGNfb3BfbXVsX2F9LAogICAgICAgIHsyLCAxLCAwLCAiLz0iLCBj X29wX2Rpdl9hfSwKICAgICAgICB7MiwgMSwgMCwgIiU9IiwgY19vcF9tb2RfYX0sCiAgICAgICAg ezIsIDEsIDAsICJ8PSIsIGNfb3Bfb3JfYX0sCiAgICAgICAgezIsIDEsIDAsICJePSIsIGNfb3Bf eG9yX2F9LAogICAgICAgIHsyLCAxLCAwLCAiJj0iLCBjX29wX2FuZF9hfSwKICAgICAgICB7Miwg MSwgMCwgIjw8PSIsIGNfb3Bfc2hsX2F9LAogICAgICAgIHsyLCAxLCAwLCAiPj49IiwgY19vcF9z aHJfYX0sCiAgICAgICAgezMsIDAsIDAsICJ8fCIsIGNfb3Bfb3JfaX0sCiAgICAgICAgezQsIDAs IDAsICImJiIsIGNfb3BfYW5kX2J9LAogICAgICAgIHs1LCAxLCAxLCAiISIsIGNfb3Bfbm90X2J9 LAogICAgICAgIHs2LCAwLCAwLCAiPT0iLCBjX29wX2VxfSwKICAgICAgICB7NiwgMCwgMCwgIiE9 IiwgY19vcF9zdWJ9LAogICAgICAgIHs2LCAwLCAwLCAiPiIsIGNfb3BfZ3R9LAogICAgICAgIHs2 LCAwLCAwLCAiPCIsIGNfb3BfbHR9LAogICAgICAgIHs2LCAwLCAwLCAiPj0iLCBjX29wX2dlfSwK ICAgICAgICB7NiwgMCwgMCwgIjw9IiwgY19vcF9sZX0sCiAgICAgICAgezcsIDAsIDAsICJ8Iiwg Y19vcF9vcl9pfSwKICAgICAgICB7NywgMCwgMCwgIl4iLCBjX29wX3hvcl9pfSwKICAgICAgICB7 OCwgMCwgMCwgIiYiLCBjX29wX2FuZF9pfSwKICAgICAgICB7OSwgMCwgMCwgIjw8IiwgY19vcF9z aGx9LAogICAgICAgIHs5LCAwLCAwLCAiPj4iLCBjX29wX3Nocn0sCiAgICAgICAgezEwLCAwLCAw LCAiKyIsIGNfb3BfYWRkfSwKICAgICAgICB7MTAsIDAsIDAsICItIiwgY19vcF9zdWJ9LAogICAg ICAgIHsxMSwgMCwgMCwgIioiLCBjX29wX211bH0sCiAgICAgICAgezExLCAwLCAwLCAiLyIsIGNf b3BfZGl2fSwKICAgICAgICB7MTEsIDAsIDAsICIlIiwgY19vcF9tb2R9LAogICAgICAgIHsxMiwg MSwgMSwgIn4iLCBjX29wX25vdF9pfSwKICAgICAgICB7MTIsIDEsIDEsICItIiwgY19vcF9uZWd9 LAogICAgICAgIHsxMiwgMCwgMSwgIisrIiwgY19vcF9pbmNfbH0sCiAgICAgICAgezEyLCAwLCAx LCAiLS0iLCBjX29wX2RlY19sfSwKICAgICAgICB7MTIsIDAsIDIsICIrKyIsIGNfb3BfaW5jX3J9 LAogICAgICAgIHsxMiwgMCwgMiwgIi0tIiwgY19vcF9kZWNfcn0sCiAgICAgICAgezB9Cn07Cg==